Qualcosa di piu' sui dischi….

Parlando di sistemi multimediali si e' visto come le caratteristiche dell'hardware sottostante influenzino il rispetto dei vincoli real time. In particolare occorre essere consapevoli di caratteristiche fisiche dei dischi: vedremo qualcosa in piu' sulla geometria del disco e sul concetto di pendenza (skew). Tali concetti sono quindi implementati al momento della formattazione, cioe' quando i settori fisici vengono "numerati".

Geometria del disco

Sui primi dischi fissi il numero dei settori per traccia era lo stesso per tutti i cilindri, interni od esterni che fossero. Questo significa che nei cilindri interni le informazioni erano piu' "dense" che in quelli esterni, e il limite della tecnologia era appunto dato da questa "densita'".

Attualmente questo limite non c'e' piu': i dischi "moderni" sono divisi in zone con piu' settori in quelle esterne e meno in quelle interne. Per un ipotetico disco con due zone, la situazione potrebbe essere quella di Figura 9.1 (a): la zona esterna ah 32 settori per traccia, quella interna ne ha 16. Un disco da 18 GB come il WD 18300 ha 16 zone e il numero di settori per traccia aumenta del 4% rispetto alla zona interna adiacente.

Se il sistema operativo fosse consapevole di questa organizzazione, i FS dovrebbero essere decisamente piu' complessi! Invece a livello di FS si ipotizza di poter gestire richieste a dischi con X cilindri, Y testine e Z settori, in ogni caso. E' il controller che rimappa sul vero settore fisico, come si vede in Figura 9.1 (b). In entrambe le figure (a e b) i settori sono 192, ma disposti "diversamente".


Figura 1 (a) Geometria fisica di un disco con due zone (b) Possibile geometria "virtuale" per lo stesso disco.

Pendenza del cilindro

Il problema del multimedia (e non solo) e' riuscire a leggere piu' tracce in una sola operazione "continua", senza perdere dati quando si salta alla traccia adiacente. Supponiamo ad esempio di dover leggere 18 settori consecutivi a partire dal settore 0 della traccia piu' interna: i primi 16 vengono letti dalla traccia 0, poi occorre un posizionamento della testina per passare a prendere dalla traccia 1 i rimanenti due settori, 0 e 1. Nel tempo in cui la testina si sposta, il disco ruota e sotto la testina non ci sara' piu' il settore 0; perche' questo ripassi, occorre attendere una rotazione quasi completa.

Si organizza diversamente il disco per tener conto di questo problema, "numerando" diversamente i settori di ogni traccia, cioe' non allineando i settori a numero uguale, ma sfasandoli di tanti settori quanti verrebbero "saltati" nell'operazione di spostamento alla traccia adiacente. Ad esempio, se tale numero fosse 3, potremmo adottare una organizzazione come quella di Figura 9.2.


Figura 2. Pendenza del cilindro.

In un esempio piu' realistico, si consideri un drive da 10000 rpm, che quindi compie una rotazione in 6 millisecondi. Se una traccia contiene 300 settori, ogni 20 microscecondi c'e' un nuovo settore sotto la traccia, e se il tempo necessario alla testina per passare alla traccia successiva e' di 800 microsecondi, la pendenza dovra' essere di 40 settori.

Sempre considerando questo disco, si osservi che se ogni settore contiene 512 byte, allora nei 6 millisecondi di rotazione si acquisiscono 153600 byte, il che porta ad una frequenza di 25 600 000 byte al secondo (24 MB circa), indipendentemente dall'interfaccia!

Anche il passaggio da una testina alla successiva richiede un tempo di "aggiustamento", per cui ci potrebbe essere anche una pendenza della testina, ma certamente di minore entita'.

Bufferizzazione ed interleaving

Un ulteriore ritardo potrebbe verificarsi a causa della bufferizzazione all'interno del controller. Supponiamo di dover leggerere due settori consecutivi ma di avere un buffer dimensionato per contenerne uno solo. Quando e' pieno, il suo contenuto deve essere spostato prima di poter leggere il secondo settore; quando si potra' leggerlo, sotto la testina ci saranno altri settori e bisognera' attendere una rotazione quasi completa.

Per superare questo problema si potrebbe "interallacciare" due sequenze di numerazione dei settori come mostra la Figura 9.3. In (a) vediamo la situazione di partenza (senza pendenza x semplificare), in (b) la situazione a singolo interleaving, in cui il controller ha un po' di tempo per effettuare la copia prima dell'arrivo del settore successivo; in (c) il tempo a disposizione aumenta ancora perche' si realizza un doppio interleaving. Si noti che non importa "chi" effettua la copia, se il controller o un dispositivo DMA, ma solo il tempo che tale copia richiede.


Figura 3. (a) senza interleaving (b) singolo interleaving (c) doppio interleaving

L'unico modo per fare a meno dell'interleaving e' avere un buffer del controller che contenga una traccia intera. Esistono controller in cui effettivamente il buffer e' abbastanza grande da fare a meno dell'interleaving.