Autore |
Discussione |
|
kenz88
Nuovo Utente
|
Inserito il - 04/05/2010 : 17:05:35
|
Ciao a tutti....mi potreste dare un po di consigli su come fare sto progetto in JAVA?
1.Specifiche generali
Scrivere un programma multithread che simuli la gestione di un disco di I/O in un sistema multiprogrammato e che permetta di valutare le performance, in termini di tempo medio d’attesa e distanza totale percorsa dalle testine del disco, della politica di scheduling del disco detta SSTF (shortest seek time first). In particolare, il programma dovrà essere costituito da un gestore del disco (GESTORE_DISCO) il quale avrà il compito di gestire e schedulare le richieste di I/O provenienti da un pool di processi concorrenti. Ogni processo effettuerà una richiesta di I/O specificando il numero del settore del disco al quale intende accedere. In particolare, il programma dovrà essere costituito da un oggetto condiviso, rappresentante il disco, da un thread rappresentate il gestore del disco, e da un numero arbitrario (n) di thread, rappresentati i processi che effettuano richieste al gestore del disco. Il programma terminerà quando ogni processo avrà effettuato il proprio numero di richieste (numRic).
2.Politica di gestione del disco SSTF
La politica SSTF (shortest seek time first) ) è un politica di scheduling per brevità e si basa sulla considerazione che risulta conveniente servire tutte le richieste vicine alla posizione corrente della testina prima di spostarla in un’area lontana per soddisfarne altre. Tale politica, quindi, sceglie la richiesta che dà il minimo tempo di ricerca (seek time) rispetto alla posizione corrente della testina; poiché questo tempo aumenta al crescere della distanza dei cilindri dalla testina, l’algoritmo sceglie le richieste relative ai cilindri più vicini alla posizione della testina.
3.Specifiche dell’oggetto DISCO
L’oggetto DISCO sarà un oggetto condiviso tra gli n thread ed il GESTORE_DISCO. L’oggetto DISCO dovrà emulare un comune disco magnetico e sarà costituito da un numero di cilindri pari a 1000. Ogni cilindro, a sua volta, sarà costituito da 1000 settori per un totale di 1000000 di settori. In particolare, i settori saranno numerati in modo progressivo così che, ad esempio, il cilindro numero 3 conterrà i settori di indice compreso tra 3000 e 3999, il cilindro numero 4 conterrà i settori di indice compreso tra 4000 e 4999 e così via. Il disco sarà caratterizzato da un tempo di ricerca (seek_time), cioè il tempo necessario affinché il braccio dell’unità disco sposti le te stine fino al cilindro contenente il settore desiderato, pari a 1ms/cilindro. Questo significa che per spostare le testine dal cilindro 128 al cilindro al cilindro 110 saranno necessari (128-110)*1ms = 18ms. La latenza di rotazione del disco sarà considerata trascurabile. Nella fase iniziale, le testine del disco saranno posizionate sul cilindro numero 0.
4.Specifiche dell’oggetto GESTORE_DISCO
L’oggetto GESTORE_DISCO sarà un thread che avrà il compito di gestire le richieste di I/O secondo la politica SSTF. Quando non ci sono richieste da servire il GESTORE_DISCO rimarrà in attesa di richieste sospendendo la propria esecuzione. Ogni processo richiederà al gestore del disco di accedere ad un particolare settore mediante l’invocazione di un metodo richiestaSettore(int settore). Se la richiesta di accesso ad un settore arriva mentre il GESTORE_DISCO è inattivo, questo verrà attivato dalla richiesta stessa ed inizierà a servire l’unica richiesta pervenuta. Tutte le richieste pervenute mentre il disco sta servendo un'altra richiesta verranno messe in un’apposita coda. Le richieste di accesso ad un settore del disco dovranno essere bloccanti sospendendo il processo richiedente per il tempo necessario ad ottenere il servizio. Le richieste presenti nella coda verranno servite dal GESTRE_DISCO secondo la politica SSTF.
5.Specifiche dell’entità PROCESSO:
L’entità PROCESSO dovrà emulare un processo in esecuzione su di un sistema multiprogrammato. Ogni processo dovrà essere emulato attraverso l’utilizzo di un singolo thread. Ogni processo dovrà essere inizializzato con il valore numRic di numero di richieste da effettuare (input fornito al momento del lancio dell’applicazione ed uguale per tutti i processi). Il comportamento di ogni entità PROCESSO può essere descritto dai seguenti passi: -1.Finché non ha terminato il proprio numero di richieste -2.Effettua un richiesta per un settore il cui indice dovrà essere scelto casualmente tra i settori disponibili [0, 999999]. (Ogni processo, identificato dal proprio pid, sarà dotato di un generatore di numeri casuali inizializzato con seme pari al proprio pid). -3.Quando la richiesta per il settore specificato ritorna (richiesta evasa) il processo andrà a dormire per 50 ms.
6.Specifiche di sincronizzazione ed implementazione:
non sarà possibile utilizzare il costrutto synchronized
7.Specifiche dati in input:
Il programma dovrà ricevere in input, tramite riga di comando o tramite file di specifica, i seguenti parametri di input: Numero di processi (n) Numero di richieste numRic comune a tutti i processi
8.Specifiche dati di output:
Al termine della simulazione il programma dovrà scrivere, su di un file di testo oppure sulla consolle, il tempo d’attesa per ogni processo ( tempoAttesa - tempo che intercorre tra la richiesta di un settore l’evasione della richiesta), il tempo medio d’attesa di tutti i processi (tempoMedioAttesa) e la distanza totale percorsa dalle testine del disco espressa in numero di cilindri totali attraversati ( cilindriTotali). Per rilevare i tempi d’attesa è consigliato l’utilizzo del metodo currentTimeMillis() della classe System.
|
|
battistis
Utente Nonno
Regione: Friuli-Venezia Giulia
Prov.: Verbano-Cusio-Ossola
Città: inCentroConPassAuto
|
Inserito il - 07/06/2010 : 01:02:22
|
una tesi praticamente :) |
|
|
jonny7719
Nuovo Utente
|
|
|
Discussione |
|
|
|