Sommario
Un file system è quella parte di un sistema operativo responsabile per la gestione e l’organizzazione dei file. In particolare, gli obiettivi di un FS sono quelli di garantirne:
Un FS fornisce alle applicazioni un’interfaccia unica per la gestione dei file.
Un file è un insieme di informazioni, correlate e registrate nella memoria secondaria, cui è stato assegnato un identificativo (nome).
Contengono sia dati sia attributi.
Al fine di gestire un elevato numero di file, un FS è strutturato in directory, cioè in un insieme di nodi contenenti informazioni su tutti i file.
Una directory è un file speciale creato con l’obiettivo di risolvere le corrispondenza tra il nome del file in formato testuale e il suo identificativo interno.
Ricerca efficiente.
Possibilità di raggruppamento.
Directory corrente (quella che contiene la maggior parte dei file di interesse corrente).
Nomi diversi possono riferirsi allo stesso file (aliasing)
Se a ogni operazione di cancellazione segue l’immediata rimozione del file, potrebbero rimanere puntatori a un file che ormai non esiste più.
Soluzioni:
Un file system può avere parti residenti su device removibili (es. dischetti, USB pen), o su altre partizioni del disco fisso.
Tipicamente i file system consentono di agganciare (sganciare) il file system che si trova su di un dispositivo all’albero dei file principale (montaggio).
L’accesso ai file va consentito soltanto agli utenti autorizzati, mediante uno schema di permessi di accesso.
Con riferimento ai sistemi UNIX, a ciascun file (normale, speciale o directory) sono associati alcuni attributi:
Proprietario, gruppo e permessi iniziali sono assegnati dal sistema al file al momento della sua creazione. Il proprietario potrà successivamente modificare tali attributi.
Tipicamente una directory contiene un lista di entries, una per ogni file, contenente le informazioni relative al file associato.
Nella maggior parte dei SO ogni entry contiene un puntatore ad una struttura dati associata al file, denominata FCB.
File control block – struttura di memorizzazione che contiente le informazioni su un file.
Quasi tutti i FS forniscono un’interfaccia conforme allo standard POSIX.
int fd= open (/home/cotroneo/didattica/so/monitor.c);
Alla open si fornisce un path name (che può essere assoluto o relativo) per individuare il file dato in ingresso.
Fase 1: Accesso al disco
Fase 2: Accesso in memoria
Accesso sequenziale: tempo di accesso dipendente dalla posizione
read next
write next
reset
Accesso diretto: tempo di accesso indipendente dalla posizione
read n
write n
position to n
read next
write next
n = numero relativo del blocco
Ogni disco può essere organizzato in più partizioni, ognuna delle quali può avere un proprio file system.
Ogni disco ha uno speciale settore (Settore 0), denominato MBR (Master Boot Record), che viene utilizzato per il bootstrap.
L’MBR contiene inoltre la tabella delle partizioni del disco (indirizzo iniziale e finale di ogni partizione), di cui solo una può essere etichettata con lo stato “Active”.
Quando il sistema parte, la BIOS accede al primo settore del disco (MBR), carica in memoria il contenuto e lo esegue. Il programma caricato si articola nei seguenti passi:
Il sistema operativo usa una dimensione del blocco in genere maggiore di quella del settore del disco. Ogni blocco consiste di un certo numero di settori consecutivi.
Quali sono i motivi di questa scelta?
Ogni blocco contiene un insieme di settori contigui.
Definiscono il modo in cui i blocchi del disco sono assegnati ai file:
Ciascun file occupa un insieme di blocchi contigui sul disco.
Vantaggi
Svantaggi
Ciascun file è una lista concatenata di blocchi su disco: i blocchi possono essere sparpagliati ovunque sul disco.
Si alloca quanto è richiesto, e poi si concatenano i blocchi insieme.
I blocchi sui quali viene mappato ogni file sono organizzati in una lista concatenata.
Vantaggi
Svantaggi
File-allocation table (FAT)
Allocazione dello spazio su disco usata da MS-DOS e OS/2.
La FAT è una tabella con un elemento per ogni blocco disco ed è indirizzato dal numero di blocco.
La FAT consente di avere i puntatori localizzati sul disco e non sparsi.
Velocizza anche l’accesso diretto.
Richiede una tabella indice.
E’ possibile un accesso casuale.
Si ha un accesso dinamico senza frammentazione esterna, ma c’è il sovraccarico del blocco indice.
Dimensione del blocco indice: un blocco piccolo comporta meno spreco nel caso di file piccoli, ma per file grandi?
Lista concatenata (free list)
Raggruppamento: memorizzazione degli indirizzi di n blocchi liberi sul primo di tali blocchi. Sull’ultimo sono indirizzati altri blocchi, e così via.
Conteggio: Si indica un blocco libero, e da quanti altri blocchi liberi (contigui) è seguito.
La mappa dei bit richiede uno spazio ulteriore.
Esempio:
block size = 212 byte
disk size = 230 byte (1 gigabyte)
n = 230/212 = 218 bit (o 32K byte)
UNIX distingue 6 tipi di file:
Tutti i file UNIX sono gestiti e rappresentati tramite gli inode.
Un inode (index node) è una struttura di controllo (un FCB) che contiene tutte le informazioni di cui il SO ha bisogno per gestire il file corrispondente.
Ogni file è controllato da esattamente un inode, e viceversa, ma più nomi di file possono essere associati allo stesso inode (con il meccanismo dei link).
VFS presenta un’interfaccia uniforme ai processi, indipendentemente dal particolare file system adottato.
Definisce un modello generale di file, comune a tutti i file system:
Anche VFS gestisce i file attraverso gli inode (detti anche v-node), i quali però non contengono informazioni circa i blocchi dati (tali informazioni sono gestite dal file system specifico)
Il second extended filesystem supporta tutte le caratteristiche di un filesystem standard Unix.
è in grado di gestire nomi di file lunghi (256 caratteri, estensibili a 1012) con una dimensione massima di 4 Tb.
Presenta diverse estensioni rispetto al FS Unix:
Il layout di una partizione ext2 prevede:
Introdotto nel 2001 nel kernel Linux 2.4.15
Rispetto al suo predecessore, introduce le seguenti caratteristiche:
Il journaling consiste nel gestire un “diario” (journal) delle modifiche da fare, in modo da evitare che errori e malfunzionamenti possano lasciare i file in uno stato inconsistente.
Limita il ricorso a specifici tool per il controllo della consistenza, come e2fsck.
Introdotto nel 2006 nel kernel Linux 2.6.19
Rispetto ad ext3, aggiunge:
Introdotto negli anni novanta con Windows NT
Principali caratteristiche:
Sector: la più piccola unità di storage (512 byte).
Cluster: uno o più settori contigui; la dimensione effettiva dei cluster varia da 1 a 128 settori, e dipende dalla dimensione complessiva del volume (a volumi grandi corrispondono cluster grandi e viceversa).
Volume: una partizione logica del disco.
Contiene la lista di tutti i file e le cartelle (memorizzate come i file) presenti nel volume, ed è organizzata come un insieme di righe di un database relazionale (ogni riga corrisponde a un file o a una cartella).
Ogni riga è di 1024 byte e contiene:
La regione “System Files” del volume contiene i seguenti elementi:
1. Introduzione ai Sistemi Operativi
5. Scheduling nei sistemi mono-processore
6. Threads, SMP
8. Scheduling Multiprocessore e Real-Time
9. Gestione dei processi nei sistemi operativi Unix/Linux e Window...
10. Introduzione alla Programmazione Concorrente
11. Sincronizzazione nel modello ad ambiente globale
12. Problemi di cooperazione nel modello ad ambiente globale
14. Sincronizzazione nel modello ad ambiente locale
15. Deadlock
16. Programmazione Multithread
18. Memoria Virtuale
20. Il File System
21. Primitive di sincronizzazione nel kernel Linux
22. Esercitazione: System call per la gestione dei processi
23. Esercitazione: Inteprocess Communication e Shared Memory
24. Esercitazione: System Call per la gestione dei semafori in Linu...
25. Esercitazione: Problema dei Produttori e dei Consumatori
26. Posix Threads
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari, “Sistemi Operativi”, Mc-Graw-Hill (Cap.6)
W. Stallings, Operating Systems, par. 12.8 – 12.10