next up previous contents index
Next: Avvii e shutdown Up: La gestione della memoria Previous: Allocare lo spazio di

   
La cache di buffer

Leggere da un disco5.3 è molto più lento che accedere a della memoria (reale). Oltre a ciò, è comune leggere la stessa parte del disco diverse volte in brevi periodi di tempo. Ad esempio, si può prima leggere un messaggio di posta elettronica, poi caricare il messaggio in un editor per rispondergli, poi farlo leggere al programma di posta per copiarlo in una cartella. Oppure, considerato quanto spesso si può usare il comando ls  su un sistema con molti utenti. Leggendo le informazioni dal disco e trattenendole in memoria finché non servono più si possono velocizzare le letture successive alla prima. Questo processo si chiama bufferizzazione del disco, e la memoria usata allo scopo è la cache di buffer.

Dato che la memoria è, sfortunatamente, una risorsa finita, anzi, scarsa, la cache di buffer di solito non può essere abbastanza grande (non può contenere tutti i dati che si vogliono usare). Quando la cache si riempie, i dati che non sono stati usati per tempo più lungo vengono scartati e la memoria liberata viene usata per i nuovi dati.

La bufferizzazione del disco vale anche in scrittura; d'altra parte, i dati scritti vengono spessi letti di nuovo (come per un codice sorgente che viene salvato in un file, e poi letto dal compilatore), quindi mettere in cache i dati che vengono scritti è una buona idea. D'altra parte, mettendo solo i dati in cache, e non scrivendoli nel disco, il programma che li scrive gira più veloce. La scrittura si può fare sullo sfondo, senza rallentare gli altri programmi.

La maggior parte dei sistemi operativi usano la cache di buffer (anche se si può chiamare in qualche altro modo), ma non tutti funzionano con i principi descritti sotto. Alcuni sono write-through: i dati vengono scritti tutti insieme nel disco (vengono mantenuti anche nella cache, naturalmente). La cache si chiama write-back se la scrittura viene fatta in un secondo tempo. Il write-back è più efficiente del write-through, ma anche più soggetto ad errori: se la macchina ha un crash, o viene tolta la corrente al momento sbagliato, o il floppy viene rimosso dal drive prima che i dati nella cache vengano scritti, i cambiamenti nella cache vengono persi; ciò può anche comportare che il filesystem (se ce n'è uno) non sia pienamente funzionante, forse perché i dati non scritti contenevano cambiamenti importanti alle informazioni di archiviazione.

Per questo non dovreste mai spegnere il computer senza usare una corretta procedura di shutdown (vedere il capitolo 6), o rimuovere un floppy dal drive senza smontarlo (se era stato montato) o dopo che qualsiasi programma che lo stia usando abbia segnalato di aver finito, e che il led del floppy non si sia spento. Il comando sync  fa il flush del buffer, cioè forza la scrittura di tutti i dati nel disco, e può essere usato quando si vuole essere certi che tutto venga scritto al sicuro. Nei sistemi UNIX tradizionali c'è un programma chiamato update  in background che fa un sync  ogni 30 secondi, in modo che non è in genere necessario usare sync . Linux ha un daemon aggiuntivo, bdflush , che fa un sync più imperfetto con frequenza maggiore per evitare il blocco improvviso dovuto al pesante input/output del disco che sync  talvolta causa.

Sotto Linux, bdflush  viene avviato da update . Di solito non c'è ragione per preoccuparsene, ma se per qualche ragione bdflush  muore, il kernel vi avviserà, e dovrete riavviarlo a mano (/sbin/update ).

La cache in genere non fa il buffer dei file, ma di blocchi, che sono le unità più piccole dell'input/output dei dischi (sotto Linux di solito sono di 1 kB). In questo modo vengono messe in cache anche le directory, i superblocchi, altri dati di archiviazione dei filesystem e dischi non di filesystem.

L'efficacia di una cache è principalmente decisa dalla sua dimensione. Una cache piccola è praticamente inutile: terrà talmente pochi dati che tutti i dati in cache vengono tolti prima che vengano riutilizzati. La dimensione critica dipende da quanti dati vengono letti e scritti, e da quanto spesso vengono riutilizzati gli stessi dati. L'unico modo di saperlo è sperimentare.

Se la cache è di dimensione fissa, non è bene che sia troppo grande, perché potrebbe rendere piccola la memoria libera e rendere necessario fare swap (che è ugualmente lento). Per fare l'uso più efficiente possibile della memoria reale, Linux usa automaticamente tutta la RAM libera per la cache di buffer, ma rimpicciolisce la cache automaticamente quando i programmi hanno bisogno di più memoria.

Sotto Linux non dovete fare niente per utilizzare la cache, ma funziona completamente in automatico. Eccetto che seguire le procedure corrette per fare shutdown e per rimuovere i floppy non ve ne dovete preoccupare.


next up previous contents index
Next: Avvii e shutdown Up: La gestione della memoria Previous: Allocare lo spazio di
root
1998-11-08