File
Memorizzazione In memoria principale In memoria secondaria Strutture dati: interi, reali, array, liste, ... Durante l’esecuzione di un programma In memoria secondaria file
Record logici e fisici Un file e’ suddiviso in record logici Es.: file con i dati del persnale Un record per ogni dipendente Vari campi in ogni record: nome, indirizzo, ... Memorizzato in memoria secondaria in pezzi (record fisici) Es.: settori di un disco Lettura e scrittura di record fisici, anche se il programma chiede di leggere o scrivere un solo record logico
Lettura/scrittura di un record logico Lettura: viene letto tutto un record fisico contenente il record logico richiesto, e messo in un buffer di memoria principale Scrittura: il record logico che si vuole modificare viene messo in un buffer e poi scritto in un intero record fisico
File Allocation Table (FAT) Tabella di allocazione dei file: per ogni file, quali settori del disco sono assegnati a lui Tante righe quanti sono i settori (o gruppi di settori) Nella directory del file: numero del primo settore Nella riga del FAT per il primo settore: numero del secondo settore, e cosi’ via Ogni voce della FAT: 16 o 32 bit 216 o 232 settori diversi (ogni settore circa 2 KB)
Operazioni su file Apertura Lettura Scrittura Chiusura
File sequenziali Accesso sequenziale Esempi: file di audio, video, programmi, testo Se su CD o nastro (supporto sequenziale), l’accesso sequenziale e’ naturale Se su disco e diviso in settori diversi, il SO deve recuperare i settori e ricostruire il file
File sequenziali – fine file Rilevare la fine del file Record di fine (diverso da tutti gli altri record) Oppure, variabile EOF (end of file) che il sistema operativo mette a vero quando il file e’ finito Es.: while (not EOF) do (leggi un record dal file)
File sequenziali -- chiave Ogni record logico ha un campo che lo identifica (chiave) Es.: codice fiscale per un dipendente File ordinati secondo il campo chiave elaborazione piu’ efficiente Es.: merge (fusione) di due file, aggiornamento di un file usando le informazioni di un altro file, ...
Fusione (merge) di due file Procedure merge(file1,file2,file3) if (eof1 and eof2) then (file3= vuoto) if (not eof1) then (record1 = primo record di file1) if (not eof2) then (record2 = primo record di file2) while (not eof1 and not eof2) do Metti il record con chiave piu’ piccola tra record1 e record 2 in file3; Aggiorna record1 o record2 al rcord successivo; Copia i restanti record del file non finito in file3
File di testo Stringa di caratteri: ogni carattere e’ un intero record logico Standard ASCII, un byte per carattere Molti file sequenziali complessi realizzati da file di testo Es.: file dei dipendenti: ogni record logico e’ una stringa di 25 caratteri per il nome, piu’ 6 caratteri per numero di matricola 31 caratteri per un record
Linguaggi di programmzione Istruzioni per gestire file sequenziali Aprire un file per leggere un record o un suo campo o un carattere o una riga Tastiera, schermo, stampante considerati come file sequenziali da cui leggere o a cui inviare caratteri
Indici Indice: sequenza di chiavi e indirizzi di memoria dove e’ archiviato un bloco di informazioni Per accedere al blocco di informazioni: prima si ceca la chiave, e poi si guarda l’indirizzo corrispondente File indicizzato: file + file di indice Es.: matricola per dipendenti, numero per CD audio Entrambi memorizzati in M secondaria Quando di vuole usare un file, l’indice viene trasferito in M principale Piu’ veloce accedere all’informazione
File invertiti Piu’ indici per accedere velocemente secondo diverse chiavi Es.: numero di matricola, codice fiscale
Indici parziali File sequenziale, diviso in vari segmenti Ogni segmento contiene piu’ record e corrisponde ad una sola chiave (l’ultima) Per cercare un record: trovo la prima chiave nell’indice > del record cercato, poi cerco il record nel segmento