Introduzione:-Poiché lo spazio su disco è limitato, dovremmo riutilizzare lo spazio dai file eliminati per i nuovi file. Per tenere traccia dello spazio libero su disco, il sistema mantiene un elenco di spazio libero. L’elenco spazio libero registra tutti i blocchi disco libero quelli non assegnati ad alcuni file o directory. Questo elenco di spazio libero può essere implementato come uno dei seguenti:
a) Bit vector – l’elenco di spazio libero è implementato come una mappa di bit o un vettore di bit. Ogni blocco è rappresentato da un bit. Se il blocco è libero, il bit è 1, se il blocco è allocato, il bit è 0.
Il vantaggio principale di questo approccio è la sua relativa semplicità e la sua efficienza nel trovare il primo blocco libero o n blocchi liberi consecutivi sul disco. Il calcolo del numero di blocco è (Numero di bit per parola) * (numero di parole di valore 0) offset del primo 1 bit
b) Elenco collegato-Un altro approccio alla gestione dello spazio libero è quello di collegare insieme tutti i blocchi del disco libero mantenendo un puntatore al primo blocco libero in una posizione speciale sul disco e memorizzarlo nella cache. Il primo blocco contiene un puntatore al successivo blocco disco libero.
c) Raggruppamento – Una modifica dell’approccio free list consiste nel memorizzare gli indirizzi di n blocchi liberi nel primo blocco libero.
d) Conteggio – Un altro approccio consiste nel sfruttare il fatto che diversi blocchi contigui possono essere allocati o liberati simultaneamente quando lo spazio viene allocato con l’algoritmo di allocazione contigua o il clustering.
Efficienza e prestazioni
I dischi tendono a rappresentare un importante collo di bottiglia nelle prestazioni del sistema poiché sono il componente principale del computer più lento. Efficienza:- L’uso efficiente dello spazio su disco dipende fortemente dall’allocazione del disco e dagli algoritmi di directory in uso.
Prestazioni:-La maggior parte dei controller del disco includono memoria locale per formare una cache di bordo che è abbastanza grande per memorizzare intere tracce alla volta. Una volta eseguita una ricerca, la traccia viene letta nella cache del disco a partire dal settore sotto la testa del disco. Il controller del disco trasferisce quindi tutte le richieste del settore al sistema operativo. Alcuni sistemi mantengono una sezione separata della memoria principale per una cache buffer in cui i blocchi sono tenuti sotto il presupposto che verranno utilizzati di nuovo. Altri sistemi memorizzano i dati dei file utilizzando una cache di pagina. La cache delle pagine utilizza tecniche di memoria virtuale per memorizzare i dati dei file come pagine piuttosto che come blocchi orientati al file system. Caching dei dati dei file utilizzando indirizzi virtuali è più efficiente di caching attraverso blocchi di disco fisici come interfaccia accessi con la memoria virtuale, piuttosto che il file system. Diversi sistemi utilizzano il caching delle pagine per memorizzare nella cache sia le pagine di processo che i dati dei file. Questo è noto come unified buffer cache.
Esistono altri problemi che possono influire sulle prestazioni dell’I/O, ad esempio se le scritture nel file system avvengono in modo sincrono o asincrono. Le scritture sincrone si verificano nell’ordine in cui il sottosistema del disco le riceve e le scritture non vengono bufferizzate. Le scritture asincrone vengono eseguite la maggior parte del tempo. Alcuni sistemi ottimizzano la cache delle pagine utilizzando diversi algoritmi di sostituzione a seconda del tipo di accesso del file. L’accesso sequenziale può essere ottimizzato con tecniche note come free behind e read ahead. Free behind rimuove una pagina dal buffer non appena viene richiesta la pagina successiva. Con read ahead, una pagina richiesta e diverse pagine successive vengono lette e memorizzate nella cache.