appuntiDiIngegneria
File System
Sommario
1.1. File System .............................................................................................................................................. 2
1.1.1. Gestione delle Directory ..................................................................................................................... 6
1.1.2. Implementazione di un File System ................................................................................................... 7
1.1.3. Implementazione delle Directory ..................................................................................................... 11
1.1.4. File System più Famosi ..................................................................................................................... 13
1.1.5. Dimensionamento dei Blocchi di un Disco ....................................................................................... 16
1.1.6. Affidabilità e Consistenza dei File System ........................................................................................ 16
1.1.7. File System UNIX ............................................................................................................................... 18
1.1.8. File System MS-DOS ......................................................................................................................... 22
1.1.9. File System di Windows 98 ............................................................................................................... 23
1.1.10. File System di NT .............................................................................................................................. 24
1
1.1. File System
Il File System è la parte del SO che gestisce un insieme di dati permettendo di preservarli in modo
persistente, organizzarli in apposite strutture e recuperarli quando un Processo li richiede. Ogni SO
crea nel proprio File System una propria astrazione di file (lo implementa cioè in un certo modo),
per questo motivo esistono diversi File Systems ed ognuno di questi è gestito da un SO; poiché il
File System è associato alla singola partizione di un Disco, possono coesistere più File Systems
nello stesso Disco (a patto che esistano più partizioni). Un File System deve fornire 2 astrazioni:
File: è un contenitore, ovvero un insieme di informazioni omogenee tra loro, univoco in
quanto non posso esistere due files con lo stesso nominativo, ed è l'utente (User) a
sceglierne uno per ogni file (mentre il SO si occupa di informare l'utente nel caso in cui in
quella directory esiste già un file con lo stesso nome). Quando un file viene salvato su Disco
vengono salvati: i dati in esso contenuti, il nome del file compresa la sua estensione
(ovvero quella parte del nome del file che permette al SO di associarlo ad un programma
automaticamente), e gli attributi (Dimensione, Data di Creazione, ◦ Data di Ultima
Modifica, Protezione, Codifica, etc).
Directory: astrazione che permette di raggruppare insieme più files, tipicamente i files
vengono organizzati in cartelle (directory) e sottocartelle (subdirectory).
Nei sistemi UNIX l’estensione del file può essere più articolata: il file può non avere alcuna
estensione oppure può averne una o più. L’estensione è infatti (diversamente dai sistemi MS-DOS
e Windows) un’informazione aggiuntiva data all’utente (e non al SO), pertanto mentre un file
nominato appunti.txt nei sistemi MS-DOS/Windows è aperto dal programma notepad.exe oppure
wordpad.exe, nei sistemi UNIX l’estensione .txt suggerisce all’utente il contenuto del file (ad
esempio un blocco di testo tipicamente codificato in ASCII, sarà poi l’utente che deciderà con
quale programma utente andarlo ad aprire). Viene mostrato un elenco delle estensioni più note in
letteratura: 2
Le informazioni all'interno dei file possono a loro volta essere organizzate oppure no, esistono 3
tipi di accesso logico ai files che un file di esempio “file appunti.txt” potrebbe avere:
Sequenza di byte non strutturata: il file è visto dal SO come una sequenza di byte. Si tratta
dell’implementazione più flessibile visto che l’utente può inserire nel file qualunque cosa,
qualunque byte. Dall’altra parte, tuttavia, il SO non fornisce alcun supporto ai file: non
impedisce i nomi troppo lunghi ai file, non pretende un’estensione, non limita e/o evita il
contenuto del file. Viene molto utilizzato dai sistemi UNIX ed MS-DOS;
Sequenza di Record: il file è visto dal SO strutturato internamente come una sequenza di
record di lunghezza fissa, ogni record ha poi una propria struttura ed organizzazione
interna. Per questo motivo la scrittura o la lettura del file viene indirizzata indicando un
numero di record e la colonna (questo sistema era ad esempio utilizzato nei vecchi sistemi
con schede perforate in cui ogni scheda 132 colonne ed ognuna di essa aveva la capacità di
contenere 80 caratteri!);
Struttura ad albero: il file è formato da un albero di record non tutti della stessa lunghezza,
ogni record ha poi un campo chiave e l’albero è ordinato rispetto a tale chiave. A differenza
della precedente struttura (che accede al file accedendo man mano al record successivo),
nella struttura ad albero l’accesso è assai più veloce: si accede, infatti ad una parte del file
fornendo un’opportuna chiave che identifica il blocco di interesse;
Ogni sistema di calcolo adotta un File System per organizzare i files, un SO può tuttavia
comprendere diversi formati e/o tipi di file. Nei sistemi Windows ed UNIX, ad esempio esistono 3
tipi di files:
File Regolari: sono quelli che contengono l’informazione e sono strutturati secondo le
volontà del programmatore che decide quindi l’organizzazione dell’informazione.
File Speciali: modellano alcune periferiche di input e di output.
Directory: organizzano e tengono ordinati i files in strutture ad albero. 3
L’informazione nei file regolari può essere formattata secondo lo standard ASCII, in tal caso la
stampa del file ne riproduce esattamente il contenuto. In alcuni casi, invece, i file regolari sono file
di tipo binario: l’informazione è in tal caso mascherata o codificata nel file e solo il
programmatore, oppure il programma utente ne conosce la struttura interna e quindi la
collocazione. Ad esempio, in un file binario eseguibile di UNIX prendono posto diverse
informazioni aggiuntive oltre all’informazione vera e propria: il file ha più sezioni informative,
come intestazione, testo, dati, bit di rilocazione e tabella dei simboli.
Le 3 modalità definite prima riguardano soltanto “l’accesso logico” ai files, tuttavia l’accesso fisico
dipende dal tipo di supporto di Memoria che il sistema di elaborazione ha a disposizione, e può
essere essenzialmente di 2 tipi:
Accesso Sequenziale: è la modalità di accesso prevista ad esempio per i Nastri Magnetici e
CD-ROM e DVD. Prima di accedere ad un record bisogna leggere tutti quelli che lo
precedono, ciò comporta un enorme tempo di attesa e per questo motivo si usa quasi
sempre l’altra modalità di accesso;
Accesso Casuale: è la modalità di accesso prevista ad esempio per i Dischi Magnetici.
Questi Dischi sono divisi in blocchi, e quindi se bisogna trovare un determinato byte,
bisogna prima cercare il blocco in cui è contenuto, e poi “ scavare” nel blocco fino a trovare
il byte interessato. Permette dunque di accedere ad un record dell’informazione senza
leggere quelli precedenti;
La OPEN è la System Call più impegnativa perché richiede una ricerca nel File System, allora per
maggiore efficienza le informazioni “estratte dall’apertura del file” vengono memorizzate: quando
un Processo apre un file utilizzando la OPEN viene creata una nuova riga in una Tabella dei File
Aperti associata a quel Processo, che contiene le seguenti informazioni:
Tipo di Accesso: lettura, scrittura, esecuzione;
Posizione Corrente del Cursore: inizio, fine o qualsiasi altro punto del file;
Punto di Allocazione del File su Disco: blocco fisico iniziale in cui è salvato il file. 4
La OPEN predispone il file per le successive operazioni poiché dal momento dell’apertura è
sufficiente conoscere il file descriptor fd del file, ovvero un indice di riga nella Tabella dei File
Aperti, per poter rapidamente lavorare sul file. Poiché può succedere che un file può essere aperto
ed utilizzato contemporaneamente da più Processi si utilizzano 3 tabelle diverse per gestire i File
Aperti, che insieme formano la Tabella dei File Aperti e sono:
File Descriptors Table: è situata nella User-Area del singolo Processo, e contiene i
descrittori di tutti file aperti dal medesimo Processo, quindi è composta da tante righe
quanti sono i file aperti dal Processo. Si utilizza questa tabella locale per ottenere il fd
“globale” del file, poiché potendo esserci più versioni dello stesso file aperte da più
Processi, sarebbe inutili tenerli tutti in Memoria in un’unica tabella globale.
File Table: tramite il file descriptor si individua una riga della Tabella dei File “globale” che
contiene le seguenti informazioni: Modalità di apertura del file, Posizione del Cursore per il
relativo file, un Contatore che tiene traccia del numero di Processi che hanno aperto lo
stesso file con la stessa modalità e con la stessa posizione del cursore (cosa che capita
essenzialmente solo quando si esegue una fork() in quanto il figlio eredita la stessa Tabella
dei File Aperti del padre), ed infine un puntatore ad una riga della Tabella I-Node. Quindi
per questa tabella viene creata una riga diversa per ogni file diverso aperto da un Processo,
possono quindi esistere più righe che puntano effettivamente verso lo stesso file, create
poiché il file viene richiesto da Processi diversi.
I-Node Table: in questa tabella viene creata una nuova riga solo nel momento in cui il file
viene aperto per la prima volta da un Processo. Quindi se due processi tentano di accedere
al medesimo file, in ogni caso in questa tabella sarà presente un unica riga relativa a quel
file. Ogni riga di questa tabella indica la posizione del file sul Disco ed un Contatore che
viene incrementato ogni volta che un Processo apre (o più in generale utilizza) quel file e
viene decrementato qualora il Processo dovesse chiudere il file. Nel momento in cui nessun
Processo usa quel file, allora viene rimossa questa riga dalla tabella.
La RAM dovrà mantenere tutte queste tabelle indispensabili per localizzare un file sul Disco. 5
L'utilizzo di queste tre tabelle infatti permette di ricercare rapidamente un file sul Disco,
assicurandosi che le operazioni di ricerca non debbano essere ripetute, poiché per quanto possono
essere veloci, richiedono comunque tempo.
1.1.1. Gestione delle Directory
Essenzialmente una Directory ha lo scopo di “conservare” files ed altre directory, e di tenere
quindi in ordine i file e le directory in essa contenute. La directory principale di sistema prende il
nome di Root; a partire da essa si può quindi creare una gerarchia ad albero di directory, oppure
con l'utilizzo dei links, un grafo aciclico dove il sistema può accedere tramite più percorsi allo
stesso file. I links rappresentano quindi una rottura dell’astrazione ad albero offrendo all’utente
più percorsi alternativi per accedere allo stesso file, tale comodità per l’utente rappresenta però
una complicazione in più da gestire per il SO. Grazie ai links quindi è possibile avere più Pathnames
per lo stesso file, ma non è possibile avere 2 file che hanno lo stesso pathname.
Anche la suddivisione dei files in directory diventa un qualcosa che occorre memorizzare in
maniera permanente sul Disco, infatti le cartelle create vengono gestite come dei “files speciali”
che esattamente come i files hanno un proprietario, dei diritti (non sarà presente il diritto di
esecuzione), ma non hanno dei dati eccetto le informazioni su chi sono i figli (files e subdirectory).
La gerarchia a livelli delle directory elimina i conflitti che possono sorgere sui nomi dei file, ogni
utente può tuttavia avere l’esigenza di un ulteriore livello di astrazione per le directory, magari
perché vuole un secondo file con lo stesso nome di uno già esistente. Per questo motivo i moderni
sistemi consentono una gerarchia di directory che permette di avere un numero arbitrario di
sottodirectory. Quando il file system è organizzato su una gerarchia di directory, tipicamente detta
ad albero, è necessario una procedura sistematica che permetta di individuare un file. Un primo
metodo prevede l’uso del cosiddetto path assoluto: per indicare un file si parte sempre dalla
direcotory root (che per i sistemi UNIX è / mentre per i sistemi MS-DOS/Windows è C:\), quindi si
elencano tutte le sottodirectory intermedie fino al file utilizzando gli appositi Separatori di
6
Directory (nei sistemi MS-DOS/Windows è il simbolo \, nei sistemi UNIX il separatore è il simbolo
/). Un altro metodo per indicare un path di file fa uso del concetto di directory di lavoro, che è
l’attuale directory selezionata dall’utente che l’utente può selezionare con il comando change
directory cd NomeDirectory (nei sistemi UNIX il comando pwd restituisce l’attuale directory di
lavoro). In genere il contenuto della directory root viene caricato dal SO in RAM in quanto è da
quel punto che tutte le ricerche partono; il SO dopodiché deve effettuare diversi accessi al Disco
per “accedere” ai vari livelli dell’albero fino a ritrovare il file desiderato, per questo motivo la
OPEN rappresenta l’operazione più pesante di tutte e deve essere eseguita una sola volta all’inizio.
1.1.2. Implementazione di un File System
Dal punto di vista dell’utente il File System deve fornire le astrazioni necessarie per i file e per le
directory, e all’utente stesso spettano le assegnazioni dei nomi per i file e per le directory nonché
la struttura gerarchica per le directory. Il SO, invece, si prende cura di come implementare in
maniera efficiente delle opportune strutture dati, di come deve avvenire la gestione tramite le
System Call e di come lo spazio sul Disco debba essere mantenuto. I File Systems vengono
memorizzati sui Dischi, sia essi magnetici oppure ottici come i CD-ROM, ogni Disco è diviso in
Partizioni, ed ogni Partizione del disco può avere un proprio File System. La Partizione 0 di ogni
Disco è detta Master Boot Reco
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
-
System Call (Gestione dei Processi nei Sistemi Operativi)
-
Sistemi operativi - System Call per la gestione dei semafori in Linux
-
Sistemi Operativi - Gestione VM e Processi
-
Esercizi svolti – Gestione dello stallo