Qualcuno sa come si effettua la traduzione di indirizzi logici in indirizzi fisici in Unix?
Un esercizio di Sistemi Operativi che sto tentando di risolvere, mi chiede:
si considerino 3 processi P1, P2 e P3 che accedono ai blocchi logici di due file A e B in unix in lettura e scrittura seguendo la seguente coda delle richieste di blocchi logici e file relativo:
(6,B), (15,A), (34,B), (520,A), (4300,B), (4250,A), (4560,B), (4484,A)
Si consideri inoltre che i file A e B abbiano i blocchi logici allocati ogni 2 a partire da 1 per il file B e da 0 per il file A, che l'unità disco è composta da 400 cilindri (da 0 a 399), ognuna di 290 blocchi da 4kb, indirizzi a 32 bit, transfer rate 50mb/s, e la latenza sia media. Se la testina sul terzo piatto ha eseguito l'ultimo movimento portandosi dal cilindro 120 al cilindro 150, si calcoli il tempo necessario per l'accesso alle tracce secondo a) SSTF e b) C-LOOK nel caso che arrivi al tempo 40ms la richiesta di lettura del blocco logico 1040 per il file A.
I problemi riguardano fondamentalmente la prima parte dell'esercizio, cioè quella dove deve essere effettuata la conversione da indirizzi logici a indirizzi fisici tenendo conto del file system di Unix.
La parte seguente, quella dove bisogna applicare gli algoritmi SSTF e C-LOOK bene o male la sappiamo fare.
Le informazioni di cui sono in possesso sono le seguenti:
Unix utilizza l’allocazione indicizzata, ed ogni blocco è di 4kb.
Ogni file ha una tabella FMT composta da 15 elementi, ogni elemento viene chiamato inode che contiene le info relative ai file.
In particolare i primi 12 puntano direttamente ai blocchi dati del file, quindi ad essi è possibile accedere direttamente.
Gli altri tre, 13,14 e 15, puntano a blocchi indice, quindi I record successivi al 13 devono essere acceduti leggendo prima un blocco indice per ottenere il relativo indirizzo.