File 1 Memorizzazione In memoria principale Strutture dati: interi, reali, array, liste, ... Durante l’esecuzione di un programma In memoria secondaria file 2 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, Memorizzato in memoria secondaria in pezzi (record fisici) Es.: indirizzo, ... settori di un disco Lettura e scrittura di record fisici, anche se il programma chiede di leggere o scrivere un solo record logico 3 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 4 5 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) 6 Operazioni su file Apertura Lettura Scrittura Chiusura 7 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 8 9 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) 10 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, ... 11 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 12 13 14 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 15 16 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 17 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 18 19 File invertiti Piu’ indici per accedere velocemente secondo diverse chiavi Es.: numero di matricola, codice fiscale 20 21 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 22