Caricare documenti e articoli online 
INFtub.com è un sito progettato per cercare i documenti in vari tipi di file e il caricamento di articoli online.


 
Non ricordi la password?  ››  Iscriviti gratis
 

GESTIONE DI UN DISCO A TESTE MOBILI

informatica



GESTIONE DI UN DISCO A TESTE MOBILI


Ricordiamo che su di un disco viene letto o scritto un blocco fisico per volta, di solito un settore. L'indirizzo di un blocco fisico di un disco, sia esso rigido o floppy, è composto di tre elementi: indirizzo del cilindro, traccia e settore. Ci poniamo l'obbiettivo di minimizzare i tempi di attesa.

In linea di massima, si potrebbe provare ad ottimizzare il tempo di ricerca di tutti e tre questi componenti Tuttavia, il tempo di selezione della traccia è trascurabile rispetto agli altri due, poiché esso è di natura elettronica, mentre i tempi di selezione di cilindro e settore sono di natura meccanica. In particolare, la selezione del cilindro viene effettuata tramite uno spostamento radiale del pettine (= l'insieme delle testine) e il tempo necessario a tale selezione si chiama TEMPO DI SEEK. Ovviamente, se il disco è dotato di testine fisse invece che mobili non ha senso parlare di tempo di seek. Per selezionare il settore occorre aspettare che la giusta zona del disco, ruotando, passi sotto alla testina e il relativo tempo di attesa prende il nome di TEMPO DI LATENZA.




Data l'irrilevanza del tempo di selezione di una traccia, possiamo considerare valida la relazione:

TEMPO ACCESSO DISCO = TEMPO DI SEEK + TEMPO DI LATENZA


Supponiamo di voler ottimizzare soltanto rispetto al tempo di seek. Ciò significa minimizzare lo spostamento radiale del pettine durante i successivi accessi al disco.

I due algoritmi fondamentali di scheduling possono essere spiegati in questo modo:

- ogni volta che deve servire la richiesta da parte di un processo relativa a informazioni contenute sul disco, il SO tiene conto della posizione attuale del pettine e tra tutte le richieste pendenti accontenta quella che si riferisce alla traccia più vicina, a prescindere dall'attuale direzione del pettine (verso l'interno o verso l'esterno delle superfici), e cioè a prescindere dalla direzione di quelli che sono stati gli spostamenti precedenti.



DISCO MAGNETICO VISTO DALL'ALTO (schema)



Spostamento radiale del pettine



Tracce





- il SO serve la richiesta più vicina rispetto alla posizione attuale, ma solo nella direzione attuale del pettine. Ad esempio, nel caso seguente (il grafico è di facile comprensione):


richiesta 1  richiesta 2

posizione attuale del pettine


viene servita prima la richiesta 2, poiché la richiesta 1, più vicina, si trova nella direzione opposta rispetto a quella attualmente seguita dal pettine.


Noi faremo riferimento a questo seconda strategia. Per convinzione il movimento del pettine dal cilindro più esterno verso quello più interno prende il nome di salita e l'altro spostamento è detto discesa. L'algoritmo che ora consideriamo è detto ALGORITMO ASCENSORE. Si pensi infatti ad un ascensore 'a prenotazione', tipo quelli installati negli edifici della Federico II. Quando l'ascensore è in salita, esso serve tutti gli utenti che desiderano salire, raccogliendoli man mano che sale per i vari piani. Nella successiva fase di discesa l'ascensore servirà in modo analogo tutti coloro che desiderano scendere. L'unica cosa che differenzia il nostro algoritmo dal comportamento di un ascensore del genere è che, se viene fatta una richiesta relativa ad una traccia appena servita, questa non sarà presa in considerazione subito, ma soltanto dopo il successivo cambiamento di direzione del pettine. Questo per evitare che si verifichi uno starvation dovuto a continue richieste relative ad una stessa traccia.


Per realizzare questa strategia di gestione del disco utilizzeremo il costrutto MONITOR. Il nostro monitor conterrà una procedura di richiesta ed una di rilascio. Così, un processo che voglia scrivere qualcosa sul disco dovrà richiamare la procedura di richiesta, specificando la posizione in cui intende scrivere, e quando il monitor lo riterrà opportuno gli consentirà di eseguire il driver del disco (il programma che rende possibile il passaggio delle informazioni). Fatto ciò, il processo effettuerà la procedura di rilascio.


Le variabili locali del monitor comprendono:

- posizione : la posizione corrente del pettine, ottenuta come numero della traccia su cui il pettine si trova;

- direzione : la direzione del movimento;

- occupato : lo stato attuale del disco.

Inoltre, definiamo due variabili condition per la sospensione dei processi, direzione_su e direzione_giù, ed una funzione, cond.queue, che dice se ci sono processi sospesi nella coda associata alla variabile cond.


Type traccia = 0..N ;

type movimento_braccio = MONITOR ;

var posizione: traccia ;

direzione: (giù, su) ;



occupato: boolean ;

direzione_giù, direzione_su: condition;


Procedure entry Richiesta (dest: traccia) ;

begin

if occupato then

if posizione < dest or (posizione = dest and direzione = giù) then

direzione_su.wait (dest) /* il processo si mette in attesa sulla salita;

esso va a occupare la posizione dest

nella coda dei processi sospesi sulla salita */

else

direzione_giù.wait (N - dest) ; /* il processo si pone in attesa sulla discesa */

occupato : = true ;

posizione : = dest ;

end ;


Procedure entry Rilascio

begin

occupato : = false ;

if direzione = su then

if direzione_su.queue then /* la coda dei processi sospesi in salita

non è vuota */

direzione_su.signal ; /* liberato un processo in attesa sulla salita */

else

begin

direzione : = giù ; /* non ci sono processi in attesa sulla salita;

inversione del senso di marcia */

direzione_giù.signal ; /* liberato un processo in attesa sulla discesa */

end ;

else /* direzione = giù */

if direzione_giù.queue then

direzione_giù.signal ;

else

begin

direzione : = su ; /* inversione del senso di marcia */

direzione_su.signal

end ;

end ;


begin

posizione : = 0 ; /* si parte dalla traccia più esterna */

direzione : = su ;

occupato : = false

end ;


Osservazioni:

- se la variabile occupato risulta vera, significa che qualche processo sta eseguendo il driver. Il driver rappresenta in questo caso la procedura d'uso della risorsa disco, e ci si potrebbe domandare perché mai non è stato inserito anch'esso come parte del monitor. La risposta è che se fosse stato incluso anche il driver, avremmo serializzato la richiesta da parte di un processo con l'uso da parte di un altro, e questo sarebbe stato un appesantimento non necessario.

- il parametro dest indica la priorità del processo sospeso. Si ricordi che abbiamo adottato una diversa versione della wait su variabili condition, quella che è in grado di gestire la priorità dei processi, servendosi in questo caso dell'indice dest.

- la variabile posizione costituisce per il processo che ha effettuato la richiesta la posizione in cui sta leggendo o scrivendo il processo che prima di lui ha ottenuto l'utilizzo del driver, nel caso in cui la risorsa risulti occupata.









Privacy




});

Articolo informazione


Hits: 1801
Apprezzato: scheda appunto

Commentare questo articolo:

Non sei registrato
Devi essere registrato per commentare

ISCRIVITI



Copiare il codice

nella pagina web del tuo sito.


Copyright InfTub.com 2024