Per comprendere come un sistema operativo gestisce la memoria di massa, e più precisamente un hard disk (disco fisso), è necessario avere una visione chiara della struttura di un disco. Un hard disk è composto da una serie di “dischi” o “piatti” (platter) sovrapposti, ogni platter è suddiviso in una serie di traccie (track) circolari concentriche, ogni traccia è suddivisa in una serie di settori. L’insieme delle traccie nella stessa posizione sui diversi platter prende il nome di cilindro. Un braccio mobile supporta una testina di lettura e scrittura per ogni platter.
Logicamente, un disco fisso può essere visto come un array unidimensionale di blocchi logici (solitamente) di 512 byte: la più piccola unità di trasferimento dati. Ogni settore contiene un blocco logico. L’array unidimensionale di blocchi logici è tradotto in settori del disco sequenzialmente: Il settore 0 è il primo settore della traccia più esterna del primo platter (di solito il più in alto della pila), poi si procede sulla stessa traccia, le altre tracce dello stesso cilindro, e poi sui cilindri più interni. In questo modo, è possibile tradurre un numero di blocco logico in un punto preciso del disco specificato da:
un numero di cilindro
un numero di “platter” all’interno del cilindro
un numero di settore nella traccia
In pratica, questa traduzione è molto più complicata e difficile, a causa dei difetti di fabbricazione e delle diverse lughezze delle tracce. Inoltre, il numero di settori per traccia non è costantel, più una traccia è lontana dal centro del disco, più è lunga, e quindi maggiore è il numero di settori che può contenere (fino al 40% in più di una traccia interna). Il sistema operativo è responsabile dell’utilizzo efficiente dell’hardware. Per i dischi, questo significa minimizzare tempo di accesso, e massimizzare la quantità di dati trasferiti. Il tempo di accesso ad un settore (e quindi blocco) del disco dipende da due componenti principali:
Seek time: il tempo impiegato per muovere le testine sul cilindro desiderato.
Rotational latency: il tempo richiesto perché il disco ruoti portando il settore interessato sotto la testina magnetica
Se l’HD è idle, una richiesta di lettura/scrittura può essere soddisfatta immediatamente. Se l’HD è impegnato (a servire una richiesta) ogni nuova richiesta viene inserita in una coda di richieste pendenti per quell’HD. Quando una richiesta è stata servita, il sistema operativo deve scegliere quella successiva da servire, in modo da cercare di massimizzare le prestazioni. Il SO può cercare di minimizzare il seek time medio complessivo, ordinando le richieste in attesa di essere servite in modo che le testine si debbamo muovere il meno possibile. Esistono diversi algoritmi di scheduling delle richieste di I/O del disco. Per saperne di più consulta i seguenti approfondimenti:
Tutto quanto riportato in questa pagina è a puro scopo informativo personale. Se non ti trovi in accordo con quanto riportato nella pagina, vuoi fare delle precisazioni, vuoi fare delle aggiunte o hai delle proposte e dei consigli da dare, puoi farlo mandando un email. Ogni indicazione è fondamentale per la continua crescita del sito.