Corso di Sistemi Operativi, AA 2001-2002 Progetto D Sistema distribuito Si vuole realizzare un ambiente per la simulazione di un sistema di calcolo distribuito. Il sistema è costituito da un insieme di computer, ciascuno identificato da un nome. Su ciascun computer lavora un insieme di utenti, i quali possono richiedere l’esecuzione di applicazioni locali o remote. In particolare, un utente richiede l’esecuzione di un programma specificando il nome dell’eseguibile ed il nome del computer su cui l’applicazione deve essere eseguita. Il sistema è costituito da un insieme di computer. Su ciascun computer sono presenti i seguenti elementi: • Il clock, contenente una variabile intera al cui aumentare il simulatore modifica lo stato del sistema, in modo da descrivere le attività dei diversi componenti. • Un gestore dei processi, il quale si occupa di gestire le richieste di esecuzione locali e remote. • Un insieme di processi utente, che effettuano le richieste di esecuzione. Il simulatore dovrà generare su ciascun computer processi in modo casuale o secondo un ordine predefinito, attribuendo a ciascuno di essi le seguenti specifiche: • Un identificativo univoco (un numero progressivo) • Una o più richieste di esecuzione. E’ necessario implementare le strutture dati per rappresentare gli elementi del sistema, garantendo che le operazioni siano, dove necessario, effettuate in modo atomico. A tal fine si può fare uso degli strumenti standard di Java (metodi synchronized), oppure utilizzare semafori definiti a partire dai monitor Java. Possibile alternativa: Realizzare il simulatore come l’insieme di più applicazioni Java. In particolare ciascun computer del sistema da simulare sarà rappresentato da una applicazione autonoma, e le diverse applicazioni autonome comunicano tramite Socket.