- nome: identifica simbolicamente il file,
composto da caratteri alfanumerici e simboli (con opportune regole di
validità), è scelto dall'utente.
- file_id: codice identificativo del file
utilizzato dal sistema operativo per contraddistinguerlo univocamente a
suo interno.
- locazione: puntatore o coordinate che
identificano lo spazio fisico dove è allocato o inizia l'allocazione del
file.
- tipo: codice che indica l'applicazione
utilizzata o la codifica adottata per produrre e/o interpretare le
informazioni che compongono il file. Questi alcuni tipi comuni:
- .exe .com .bin : file di tipo eseguibile
- .lib .dll: librerie eseguibili
- .bat .sh .scr : file di script, insiemi di comandi per interpreti
- .txt .doc .pdf : file di testo
- .gif .jpeg .bmp : file di immagini
- .zip .tar .grz : file compressi
- creazione: informazioni che identificano
l'istante in cui è stato creato il file.
- modifica: informazioni che identificano
l'istante dell'ultimo accesso al file
- protezione: insieme di bit che
specificano il tipo di operazioni ammissibili per quel file (ex. sola
l 646f56g ettura, nascosto, ecc ).
- dimensione: grandezza effettiva del file
(Byte).
- password: informazione necessaria per
poter accedere al file.
- lock: bit che specifica se il file è
attualmente condiviso da altri processi.
- offset: puntatore che indica la posizione
attuale dove verrebbe applicata un'eventuale operazione di ricerca, estrazione
o inserimento.
Operazioni sui file
Le principali operazioni applicabili sono:
- creazione: che richiede di individuare i
dati che comporranno il file, la definizione degli attributi, lo spazio
fisico dove allocarlo e la sua collocazione all'interno della struttura
gerarchica dei file system
- apertura: permette l'accesso al file,
richiede la predisposizione del sistema operativo di un meccanismo di
accesso utilizzabile dal processo che lo ha richiesto (handle del file)
- chiusura: determina il rilascio del
meccanismo di accesso
- lettura: permette la lettura dei dati
contenuti nel file
- scrittura: duale della precedente ma
implica la sovrascrittura del file o l'inserimento di dati da una
posizione specificata da un apposito puntatore
- aggiunta(append): permette l'inserimento
di nuovi dati alla fine del file
- posizionamento(seek): permette il
posizionamento del puntatore ove inserire i nuovi dati
- modifica attributi: modifica il valore
degli attributi di un file
- cancellazione: elimina il file dalla
memoria secondaria
Struttura dei file
La struttura dei file comprende tutte quelle
informazioni che permettono di interpretare correttamente i dati che compongono
il file. Ogni file ha una sua struttura logica denominata generalmente formato
che può essere più o meno strutturato.
Per quanto riguarda invece la struttura fisica
si possono individuare tre categorie:
- byte stream: il file è composto da una
sequenza lineare di informazioni omogenee, la cui unità gestibile è il
byte
- record stream: il file è composto da una
sequenza di informazioni omogenee tra loro, ma non obbligatoriamente al
loro interno, la cui unità logica gestibile è il record (generico archivio
composto da strutture dati complesse)
- ad albero: il file è sdoppiato in due
unità, la prima riconducibile ad un file a sequenza di record contenente i
dati veri e propri, la seconda composta da una lista di elementi associati
ai record, formati da una chiave
Accesso ai file
Possiamo individuare tre modalità di accesso
distinte:
- accesso individuale: metodo più semplice
basato sulla lettura di tutte le informazioni che compongono il file, fino
ad arrivare a quella desiderata. L'operazione di scrittura si distingue
tra write ed append. Il suo vantaggio è la semplicità e la velocità se
deve accedere sequenzialmente a tutti i record, il suo limite principale
l'estrema lentezza
- accesso diretto: questo metodo è
applicabile a file del tipo a sequenza di record e ad albero di chiavi e
richiede l'utilizzo di una lista di puntatori ad ognuno dei singoli
record. La lista a sua volta può essere. Una struttura lineare e quindi
individuare il valore del puntatore in base alla chiave, e di conseguenza
al record desiderato in una sola operazione. Questa soluzione garantisce
un accesso più veloce ai dati nel caso di file composti da molti record e
l'accesso indicizzato permette di utilizzare più liste di indici per lo
stesso insieme di record.
Struttura delle
directory
Il concetto di directory è stato introdotto
per poter organizzare in forma logica tutti i file presenti nel file system. La
struttura globale di una directory può essere di tre tipi:
- a livello singolo: tutti i file sono
allocati in una grande lista sequenziale, devono avere molti nomi
identificativi diversi, e non vi è possibilità di creare ulteriori
contenitori logici all'intero di questa directory
- ad albero: per gestire due o più utenti,
si potrebbe ricorrere ad una versione gerarchica del metodo a livello
singolo: al primo livello(master file directory) vengono creati tanti
contenitori(user file directory) quanti sono gli utenti accreditati su
quel file system, e ad ogni utente viene associata una directory ad
utilizzo esclusivo del tipo a livello singolo. Inoltre per non incombere
nel problema dell'eccessiva numerosità di file per utente si introduce una
struttura a più livelli in cui il primo (root level o radice) può ospitare
sia singoli file che sottodirectory le quali, a loro volta, possono
ricorsivamente ospitare altri file singoli o altre sottodirectory. In
questa struttura si utilizza il concetto di percorso o path name tipica
della struttura ad albero. Viene detta infine directory corrente quella directory
dove sono posizionati i file cui l'utente può accedervi direttamente
- a grafo: questa struttura è una
generalizzazione di quella precedente infatti la condivisione avviene solo
tramite gli indici di accesso e non ha niente a che vedere con i
contenuti: in parole povere non abbiamo due file uguali, ma un unico file
raggiungibile da due percorsi distinti (collegamenti). Questa struttura
viene detta a grafo senza cicli perché deve soddisfare ad una condizione:
non sono ammesse condivisioni che portino alla creazione di in ciclo
chiuso.
Operazioni sulle directory
Le principali azioni
applicabili ad una directory sono:
crea:
alloca nel file system una nuova directory all'estremità del percorso
specificato, o all'interno della directory corrente
elimina: rimuove dal file system la directory specificata
cambia:
sposta la directory corrente specificandone il nuovo valore
rinomina: permette di modificare l'identificatore della directory selezionata
collega: crea un collegamento relativo ad un file/directory
montaggio: permette l'allocazione logica di un'intera struttura gerarchica a
directory all'interno della directory corrente detta punto di montaggio. In
sintesi un intero file system potrebbe essere montato all'interno della
directory users del file system globale del sistema
L'allocazione dei file
in memoria
Le varie tecniche atte a risolvere questo
problema sono le seguenti:
- allocazione contigua: si suddivide il
file in tanti pezzi di dimensione di un blocco e poi si cerca nel disco
rigido una sequenza contigua di blocchi pari a contenere ordinatamente
l'intero file. Per gestire questo tipo di allocazione è sufficiente una
lista composta da tre parametri: l'indirizzo fisico del primo blocco
libero, il numero di blocchi liberi che compongo la sequenza e il
puntatore all'elemento successivo.
- Vantaggi: strutture dati semplici e velocemente aggiornabili,
ottimizzazione dei tempi di accesso fisico alle informazioni (il seek
time e il latency time non sono più rilevanti), buona velocità per file
ad accesso sequenziale e ad accesso diretto
- Svantaggi: presenza di frammentazione esterna e la complessità di
implementazione degli algoritmi per ricorrere ad un'efficiente politica di
allocazione dei blocchi, impossibilità di gestire facilmente la crescita
di un file
- allocazione a lista concatenata: si
occupano via via i blocchi che rimangono liberi, anche senza un ordine
particolare, e si associa ad ogni file una lista concatenata dei blocchi
utilizzati. Per poter accedere ai file è sufficiente un'altra struttura
dati molto semplice, ad esempio una tabella in cui ogni riga rappresenta
un file ed è composta dal nome del file e dai suoi attributi e che
utilizza come unità di allocazione una serie di blocchi contigui
(cluster).
- Vantaggi: riduzione dell' indirizzo dei puntatori utilizzati per
realizzare la lista concatenata; maggiore velocità di accesso fisico;
riduzione delle tabelle di gestione dei file e delle aree libere;
riduzione della frammentazione esterna
- Svantaggi: aumento della frammentazione interna; scarsa
affidabilità
- File Allocation Table (FAT) del DOS:
utilizza una struttura dati di appoggio dove vengono memorizzati i
puntatori per realizzare la struttura concatenata che descrive
l'allocazione dei file. La tabella è composta da tanti elementi quanti
sono i cluster del disco ed ogni elemento può contenere il valore del
puntatore ad un cluster o i valori prefissati -1 per indicare l'ultimo
cluster di un file e 0 per indicare un cluster vuoto. L'unica differenza
rispetto all'allocazione a lista concatenata pura è la mancanza del campo
puntatore all'interno dell'area dati dei singoli cluster. Infatti la
questa area detta descrittore del file è composta da: nome ed estensione del file, una serie
di bit che ne specificano gli attributi, data e ora di creazione e il
puntatore al primo cluster e la dimensione del file.
- Vantaggi: elimina lo spreco di memoria del disco imputabile ai
puntatori e ne riduce gli accessi
- Svantaggi: non risolve del tutto il problema dell'affidabilità
del sistema
Vi sono varie
versioni di FAT caratterizzate dalla dimensione dei puntatori, rispettivamente
FAT 12, FAT 16 e FAT 32 questa ultima utilizzata su sistemi operativi come
Windows 98.
- allocazione indicizzata: la tecnica
consiste nel riportare direttamente i valori di tutti i puntatori ai vari
cluster che compongono il file in un ulteriore cluster del disco, che fa
da supporto ai primi, associato univocamente al file in esame.
o
Svantaggi: assembla le proprietà
delle due precedenti tecniche; permette di caricare in memoria solo il blocco
degli indici del file desiderato e quindi non tutta la FAT
o
Svantaggi: il numero degli indici
scrivibili in un cluster sono limitati dalla dimensione del cluster ma si
possono comunque concatenare più cluster indici o utilizzare cluster di
puntatori che a loro volta puntano ad altri cluster puntatori
- i - node (index-node) di Unix: ogni file
viene descritto da un cluster (blocco per Unix) contenente tra l'altro i
puntatori ai blocchi dati del file. La struttura di un i-node è composta
da tre parti:
attributi del file: tipo di file, operazioni consentite, l'identificativo dell'utente,
identificativo del gruppo a cui appartiene l'utente, la dimensione del file,
gli orari di creazione e dell'ultima modifica, un campo contenitore degli
utenti che condividono questo file
gli indici ai vari blocchi: la zona contiene 15 puntatori (4 Byte) organizzati nel seguente modo:
accesso diretto: 12 indici che puntano rispettivamente ai primi 10 blocchi che
compongono il file
accesso indiretto singolo: indice che punta ad un i-node particolare anch'esso associato allo
stesso file contenente solo i puntatori ai successivi blocchi dati del file
accesso indiretto doppio: indice che punta ad un i-node indiretto, contenente solo puntatori ad
altrettanti i-node indiretti che potranno contenere gli indici dei successivi
blocchi dati del file
accesso indiretto triplo: indice che punta ad un i-node indiretto contenente solo puntatori ad
altrettanti i-node indiretti, che a loro volta punteranno ad altrettanti i-node
indiretti che finalmente potranno contenere gli indici dei successivi blocchi.
Questa tecnica è la più versatile
informazioni per
l'individuazione del file: identificatore del driver e
del dispositivo contenente il file e il percorso (path) del file.
Implementazione delle
directory
Una directory è un file di tipo speciale, che
ha il compito di raggruppare tra loro i file in una struttura logica scelta
liberamente dal programmatore. La sua implementazione più semplice è una
tabella dove ad ogni riga viene associato un
file oppure una soluzione alternativa e più efficiente è quella di
associare ad ogni riga una lista concatenata di elementi. Due problemi
principali sono la gestione di collegamenti e la lunghezza dei nomi. Per il
primo problema la soluzione più veloce è quella di duplicare i dati del file
condiviso in tutte le directory che contengono il suo link, per il secondo si
utilizzano dei nomi a lunghezza variabile con due diverse soluzioni: la prima
consiste nell'aggiungere in ogni elemento della tabella descrittore della
directory un campo preliminare detto lunghezza che permette di saltare
all'elemento successivo nel caso di lettura sequenziale; la seconda soluzioni
prevede invece l'accomodamento alla fine della tabella di un'area buffer dove
descrivere sequenzialmente i vari nomi degli oggetti che compongono la
directory separati da un elemento terminatore standard, e posizionare nel campo
nome di ogni oggetto il puntatore all'inizio del nome all'interno del buffer.
Caratteristiche dei file
system
Tipologie di backup:
- backup completo, se vengono ricopiati
tutti i dati nel nuovo supporto
- backup incrementale, se vengono salvati
solo quei file che hanno subito una modifica o sono stati creati dopo la
precedente operazione di backup completo
- backup differenziale, se vengono salvati
solo quei file che hanno subito una modifica o sono stati creati dopo la
precedente operazione di backup completo. In questo caso si parte sempre e
solo dall'ultimo backup completo effettuato
Fsck
(Linux) e scandisk (Windows)
Il funzionamento di questi due comandi
consiste nell'analizzare la lista dei blocchi liberi e riempire una particolare
tabella detta tabella dei blocchi liberi. Successivamente effettua una scansione
di tutti gli i-node presenti nel file system, annotando su una seconda tabella,
detta dei blocchi in uso, se e quante volte viene utilizzato ogni singolo
blocco. A questo punto inizia la verifica vera e propria, confrontando,
elemento per elemento le due tabelle e verificando tutti i vari casi di incongruità (6). Infine
il programma effettua anche la scansione di tutte le directory.
Tipi di file system
- NTFS (NT File System): file system della
Microsoft da Windows 2000, si rifà alle strutture antecedenti ma tratta il
file come se fosse composto da una serie di campi detti attributi che
ne definiscono le caratteristiche e il contenuto. La struttura base è il volume,
che può occupare una parte di disco fisico, tutto, o addirittura essere
spalmata su più supporti fisici distinti. Il volume è strutturato come una
sequenza di cluster, della dimensione da 512 a 64KB. Il formato generale
di un volume formattato è composto da quattro parti:
- Partition boot sector: contiene le
procedure richiamate all'avvio della partizione in esame, viene
memorizzato a partire dal primo settore del disco (0) e può occupare fino
ad un massimo di 16. Inizia sempre con un'istruzione di salto che
permette di raggiungere il bootstrap code posizionato più avanti
- Master File Table: o tabella dei file,
composta da elementi di dimensione fissa (1KB) detti record MFT che
descrivono le caratteristiche e puntano ai cluster dati di ciascun file
dell'NTFS
- file di sistema: descrive il file su cui
vengono registrate temporaneamente tutte le operazione da effettuare sui
file
- area file: contiene le informazioni
relative al volume
A queste parti
succedono i record dei file definiti dall'utente.
- ext2: Linux separa il file system reale
dal sistema operativo e li raccorda con un nuovo livello di interfaccia,
detto file system virtuale o VFS (Virtual File System). Quest' ultimo
adotta un'impostazione tipica della programmazione ad oggetti, ed
identifica al suo interno tre tipi di oggetti:
- file system: è un insieme di file
organizzati gerarchicamente ed il suo scopo è quello di individuare gli
i-node che appartengono ad un certo file
- i-node: rappresenta il file nella sua
completezza, contiene le informazioni relative al nome, agli attributi,
al possessore, a diritti, ed ovviamente anche i puntatori ai blocchi che
contengono i dati veri e propri
- file: rappresenta il punto di accesso ai
blocchi che contengono i dati effettivi del file, contiene il puntatore
alla posizione d'accesso corrente ai dati del file in oggetto permettendo
un accesso sequenziale alle informazioni
Le directory
vengono trattate come i file ma contengono solo puntatori ad altri i-node e non
fanno riferimento esplicito a blocchi di dati.
- BFS: il Be
File System usato su BeOS
- EFS: un vecchio
file system a blocchi usato su IRIX
- Ext3: Extended filesystem 3, diffuso su sistemi GNU/Linux
(ext2+journaling)
- HFS: Hierarchal Filesystem, usato su vecchie versioni di Mac OS
- HPFS High Performance Filesystem,
usato su OS/2
- ISO 9660: usato su dischi CD-ROM e DVD-ROM
- Minix: Usato su sistemi Minix
- UDF: File
system a pacchetti usato su supporti WORM/RW, CD-RW e DVD
- ZFS: Creato dalla Sun