Una operazione di I/O su file genera una interruzione che richiede l’intervento del sistema operativo.
Una generica richiesta di operazione su un record del file specifica il nome del file, la posizione logica del record nel file (per esempio il numero di record o la chiave del record) e l’operazione che deve essere eseguita. Il file system deve determinare la posizione fisica sul disco su cui si trovano i dati ed eseguire l’operazione.
Supponendo che si tratti della prima operazione sul file, il file system si deve occupare dell’apertura del file.
Il file system in base al nome individua il descrittore del file nella directory e copia il descrittore del file nella tabella dei file aperti in modo da rendere più veloce l’elaborazione del file. Il descrittore del file sarà riportato sul disco alla chiusura del file, se non ci sono altri processi che lo stanno utilizzando.
Il file system deve controllare se è possibile effettuare l’operazione richiesta. Un primo controllo (controllo statico) consiste nel determinare se il processo ha il permesso di effettuare l’operazione sul file. Se l’operazione può essere effettuata viene fatto un ulteriore controllo (controllo dinamico) per determinare se ci sono altri processi che stanno usando in modo condiviso il file e stanno eseguendo operazioni che impediscono momentaneamente di procedere.
Il file system individua in un primo tempo l’indirizzo logico del record all’interno del file (espresso in byte, come se il file fosse un byte stream) utilizzando le informazioni sul tipo di organizzazione e la lunghezza del record (o l’area indici per i file indexed).
Poi a partire dall’indirizzo logico individua il numero del blocco che contiene il record richiesto, in base alla lunghezza dei blocchi, e l’indirizzo relativo del record all’interno del blocco. Il calcolo del numero del blocco è ancora indipendente dal tipo e dalle caratteristiche della periferica e dalla modalità di allocazione dello spazio sulla periferica.
L’esecuzione vera e propria dell’operazione richiede l’intervento del gestore dei dispositivi e l’utilizzo del driver della periferica. Utilizzando il driver della periferica si effettua la conversione del numero di blocco nell’indirizzo fisico relativo alla periferica (per esempio numero di cilindro, traccia e settore su un disco).
Viene generato un processo di I/O che al termine genera una interruzione.
La lettura di un blocco trasferisce i dati contenuti nel blocco nel buffer di I/O da cui viene prelevato il record logico per trasferirlo in un’area dati del programma che lo ha richiesto. Per l’operazione di scrittura il record logico viene inserito nel buffer di I/O e la memorizzazione del blocco su disco viene effettuata dal processo di I/O generato dal modulo di scrittura. Può essere necessario trovare uno o più blocchi liberi secondo la politica di allocazione.