Cos'è un sistema operativo? Definizione: Un sistema operativo è un programma che controlla l'esecuzione di programmi applicativi e agisce come interfaccia tra le applicazioni e l'hardware del calcolatore Obiettivi Efficienza: Un S.O. cerca di utilizzare in modo efficiente le risorse del calcolatore Semplicità: Un sistema operativo dovrebbe semplificare l'utilizzazione dell'hardware di un calcolatore 1 Visione: S.O. come gestore di risorse Alcune osservazioni: Gestendo le risorse di un calcolatore, un S.O. controlla il funzionamento del calcolatore stesso... ... ma questo controllo è esercitato in modo "particolare" Normalmente: Il meccanismo di controllo è esterno al sistema controllato (esempio: termostato e impianto di riscaldamento) In un elaboratore: Il S.O. è un programma, simile all'oggetto del controllo, ovvero le applicazioni controllate Il S.O. deve lasciare il controllo alle applicazioni e affidarsi al processore per riottenere il controllo 2 Visione: S.O. come macchina estesa Visione "a strati" delle componenti hardware/software che compongono un elaboratore: Utente Programmi applicativi Programmatore di sistema Librerie Programmi di sistema Sistemista Tool di sistema Progettista di S.O. Sistema operativo Computer hardware 3 Visione: S.O. come macchina estesa Un sistema operativo: nasconde ai programmatori i dettagli dell'hardware fornendogli una API conveniente e facile da usare agisce come intermediario tra programmatore e hardware Parole chiave: Indipendenza dall'hardware Comodità d'uso Programmabilità 4 Visione 2: S.O. come macchina estesa Servizi estesi offerti da un S.O.: esecuzione di programmi accesso semplificato ai dispositivi di I/O accesso controllato a dispositivi, file system, etc. accounting ed accesso al sistema rilevazione e risposta agli errori ... 5 Storia dei Sistemi Operativi L'evoluzione dei sistemi operativi è stata spinta dal progresso tecnologico dell'hardware ha guidato il progresso tecnologico dell'hardware Esempio: Gestione degli interrupt Protezione della memoria Memoria virtuale .... 6 Storia dei Sistemi Operativi Generazione 1: 1945 - 1955 Generazione 2: 1955 - 1965 transistor e sistemi batch Generazione 3: 1965 – 1980 valvole e tavole di commutazione circuiti integrati, multiprogrammazione e time-sharing Generazione 4: 1980 – oggi personal computer 7 Generazione 0 Babbage (1792-1871) Cerca di costruire la macchina analitica (programmabile, meccanica) Non aveva sistema operativo La prima programmatrice della storia e' Lady Ada Lovelace (figlia del poeta Lord Byron) 8 Generazione 1 (1944-1955) Come venivano costruiti? Come venivano usati? solo calcoli numerici (calcolatori non elaboratori) un singolo gruppo di persone progettava, costruiva, programmava e manuteneva il proprio computer Come venivano programmati? macchine a valvole e tavole di commutazione in linguaggio macchina programmazione su tavole di commutazione non esisteva il concetto di assembler! Quale sistemi operativi venivano usati? nessuno! 9 Generazione 1 (1944-1955) Principali problemi grossi problemi di affidabilità (guasti frequenti) rigidità nell'assegnazione dei ruoli; non esiste il concetto di programmatore come entità separata dal costruttore di computer e dall'utente utilizzazione lenta e complessa; l'operatore doveva: 1. caricare il programma da eseguire 2. inserire i dati di input 3. lanciare l'esecuzione del programma 4. attendere il risultato 5. ricominciare dal punto 1. tutto ciò a causa dell'assenza del sistema operativo 10 Generazione 1 (1944-1955) Frasi celebri Nel futuro i computer arriveranno a pesare non più di una tonnellata e mezzo (Popular Mechanics, 1949) Penso che ci sia mercato nel mondo per non più di cinque computer (Thomas Watson, chairman di IBM, 1943) Ho girato avanti e indietro questa nazione (USA) e ho parlato con la gente. Vi assicura che questa moda dell'elaborazione automatica non vedrà l'anno prossimo (Editor di libri scientifici di Prentice Hall, 1947) 11 Generazione 2 (1955-1965) Come venivano costruiti? introduzione dei transistor costruzione di macchine più affidabili ed economiche Come venivano usati? le macchine iniziano ad essere utilizzate per compiti diversi si crea un mercato, grazie alle ridotte dimensioni e al prezzo più abbordabile avviene una separazione tra costruttori, operatori e programmatori Come venivano programmati? Assembly e primi linguaggi ad "alto livello" (Fortran,..) tramite schede perforate Quale sistemi operativi venivano usati? sistemi operativi batch 12 Generazione 2 (1955-1965) Definizione: job con job si indica il generico programma utente Ciclo di esecuzione di un job: il programmatore scrive (su carta) un programma in un linguaggio ad alto livello perfora una serie di schede registrandovi il programma ed i dati di input consegna le schede ad un operatore l'operatore inserisce schede di controllo scritte in JCL inserisce il pacco di schede del programma attende il risultato e lo consegna al programmatore Nota: operatore != programmatore == utente 13 Generazione 2 (1955-1965) Sistema operativo primi rudimentali esempi di sistema operativo, detti anche monitor residenti: controllo iniziale al monitor il controllo viene ceduto al job corrente una volta terminato il job, il controllo ritorna al monitor il monitor residente è in grado di eseguire una sequenza di job, trasferendo il controllo dall'uno all'altro Detti anche sistemi batch ("infornata") 14 Generazione 2 (1955-1965) Job Control Language (JCL-FMS) (da una lezione di A.S. Tanenbaum) 15 Generazione 2 (1955-1965) Memory layout per un s.o. batch (versione semplificata) S.O. (monitor) Memoria vuota 1. Stato iniziale S.O. (monitor) S.O. (monitor) Compilatore Fortran Programma in esecuzione Memoria vuota Memoria vuota 2. Dopo il caricamento del compilatore fortran 3. Dopo la compilazione 16 Generazione 2 (1955-1965) Principali problemi Molte risorse restavano inutilizzate: durante le operazioni di lettura schede / stampa, durante il caricamento di un nuovo job, il processore restava inutilizzato parte della memoria restava inutilizzata Primo miglioramento (ma non una soluzione) caricamento di numerosi job su nastro (off-line) elaborazione (output su nastro) stampa del nastro di output (off-line) 17 Generazione 2 (1955-1965) (da una lezione di A.S. Tanenbaum) 18 Generazione 3 (1965-1980) Come venivano costruiti? Come venivano usati? man mano sparisce la figura dell'operatore come "interfaccia" degli utenti verso la macchine utente == operatore Come venivano programmati? circuiti integrati linguaggi ad "alto livello": C, shell scripting editor testuali, editor grafici, compilatori accesso al sistema da terminali Quale sistemi operativi venivano usati? non più batch ma interattivi multi-programmazione time sharing 19 Generazione 3 - Multiprogrammazione Definizione: multiprogrammazione utilizzare il processore durante i periodi di I/O di un job per eseguire altri job Vantaggi il processore non viene lasciato idle durante operazioni di I/O molto lunghe la memoria viene utilizzata al meglio, caricando il maggior numero di job possibili Nota per gestire la multiprogrammazione, il s.o. deve gestire un pool ("insieme") di job da eseguire, fra cui alternare il processore Simultaneous Peripheral Operation On-line (SPOOL) ad esempio: print spooler 20 Generazione 3 - Multiprogrammazione Caratteristiche tecniche: Più job contemporaneamente in memoria S.O. Una componente del s.o. detto scheduler si preoccupa di alternarli nell'uso della CPU Job 1 quando un job richiede un'operaz. di I/O, la CPU viene assegnata ad un altro job. Job 2 Job 3 Job 4 21 Generazione 3 - Multiprogrammazione Esecuzione CPU Richiesta di I/O Richiesta di I/O I/O Completato Richiesta di I/O I/O Completato 22 Generazione 3 - Multiprogrammazione S.O. multiprogrammati: quali caratteristiche? routine di I/O devono essere fornite dal s.o. gestione della memoria CPU scheduling il sistema deve allocare la memoria per i job multipli presenti contemporaenamente il sistema deve scegliere tra i diversi job pronti ad eseguire allocazione delle risorse di I/O Il sistema operativo deve essere in grado di allocare le risorse di I/O fra diversi processi 23 Generazione 3 - Time-sharing Definizione - Time sharing E’ l’estensione logica della multiprogrammazione L'esecuzione della CPU viene suddivisa in un certo numero di quanti temporali Allo scadere di un quanto, il job corrente viene interrotto e l'esecuzione passa ad un altro job anche in assenza di richieste di I/O I passaggi (switch) avvengono così frequentemente che più utenti possono interagire con i programmi in esecuzione 24 Generazione 3 - Time-sharing Esecuzione CPU Context switch Context switch Context switch Context switch Context switch Context switch Context switch Context switch Context switch 25 Generazione 3 - Time-sharing S.O. time-sharing: quali caratteristiche? Gestione della memoria CPU Scheduling Il numero di programmi eseguiti dagli utenti può essere molto grande; si rende necessario la gestione della memoria virtuale Lo scheduling deve essere di tipo preemptive o time-sliced, ovvero sospendere periodicamente l’esecuzione di un programma a favore di un altro Meccanismi di protezione La presenza di più utenti rende necessari meccanismi di protezione (e.g. protezione nel file system, della memoria, etc.) 26 Generazione 3 - Storia Compatible Time-Sharing System (CTSS) (1962) introdusse il concetto di multiprogrammazione introdusse il concetto di time-sharing Multics (1965) introduzione del concetto di processo Unix (1970) derivato da CTSS e da Multics sviluppato inizialmente ai Bell-labs su un PDP-7 riscritto in linguaggio C per renderlo portabile 27 Generazione 4 (1980- ) - Personal computer Ancora una frase celebre Non c’è ragione per cui qualcuno possa volere un computer a casa sua (Ken Olson, fondatore di Digital, 1977) Punti chiave I personal computer sono dedicati a singoli utenti L’obiettivo primario diventa la facilità d’uso Essendo dedicati a singoli utenti, i sistemi operativi per PC sono in generale più semplici Tecnologie a finestre Tuttavia, tecnologie sviluppate per sistemi operativi più complessi possono essere adottate 28 Sistemi paralleli Definizione - Sistema parallelo un singolo elaboratore che possiede più unità di elaborazione Si dicono anche sistemi tightly coupled alcune risorse contenute nell'elaboratore possono essere condivise esempio: memoria la comunicazione avviene tramite memoria condivisa o canali di communicazione dedicati Vantaggi dei sistemi paralleli incremento delle prestazioni incremento dell’affidabilità (graceful degradation) 29 Sistemi paralleli Tassonomia basata sulla struttura SIMD - Single Instruction, Multiple Data Le CPU eseguono all'unisono lo stesso programma su dati diversi MIMD - Multiple Instruction, Multiple Data Le CPU eseguono programmi differenti su dati differenti Tassonomia basata sulla dimensione A seconda del numero (e della potenza) dei processori si suddividono in sistemi a basso parallelismo pochi processori in genere molto potenti sistemi massicciamente paralleli gran numero di processori, che possono avere anche potenza non elevata 30 Sistemi paralleli Symmetric multiprocessing (SMP) Ogni processore esegue una copia identica del sistema operativo Processi diversi possono essere eseguiti contemporaneamente Molti sistemi operativi moderni supportano SMP Asymmetric multiprocessing Ogni processore è assegnato ad un compito specifico; un processore master gestisce l’allocazione del lavoro ai processori slave Più comune in sistemi estremamente grandi 31 Sistemi distribuiti Definizione - Sistema distribuito Sono sistemi composti da più elaboratori indipendenti (con proprie risorse e proprio sistema operativo) Si dicono anche sistemi loosely coupled Ogni processore possiede la propria memoria locale I processori sono collegati tramite linee di comunicazione (rete, linee telefoniche, wireless, etc) Vantaggi dei sistemi distribuiti Condivisione di risorse Suddivisione di carico, incremento delle prestazioni Affidabilità Possibilità di comunicare 32 Sistemi distribuiti Sistemi operativi di rete forniscono condivisione di file forniscono la possibilità di comunicare ogni computer opera independentemente dagli altri Sistemi operativi distribuiti minore autonomia tra i computer dà l’impressione che un singolo sistema operativo stia controllando la rete 33 Sistemi real-time Definizione: sistemi real-time Sono quei sistemi per i quali i risultati sono considerati validi solo se corretti ed ottenuti entro e non oltre un dato istante (tempo utile) 34 Sistemi real-time I sistemi real-time si dividono in: hard real-time: se il mancato rispetto dei vincoli temporali può avere effetti catastrofici e.g. controllo assetto velivoli, controllo centrali nucleari, apparecchiature per terapia intensiva soft real-time: se si hanno solamente disagi o disservizi e.g. programmi interattivi N.B. real-time non significa necessariamente esecuzione veloce 35 Lo "zoo" dei sistemi operativi Mainframe operating systems Server operating systems Multiprocessor operating systems Personal computer operating systems Network operating systems Distributed operating systems Real-time operating systems Embedded operating systems Smart card operating systems 36 Architettura dei sistemi operativi Cos'è l'architettura di un sistema operativo? descrive quali sono le varie componenti del s.o. e come queste sono collegate fra loro i vari sistemi operativi sono molto diversi l'uno dall'altro nella loro architettura la progettazione dell'architettura è un problema fondamentale L'architettura di un s.o. da diversi punti di vista: servizi forniti (visione utente) interfaccia di sistema (visione programmatore) componenti del sistema (visione progettista s.o.) 38 Componenti di un sistema operativo Gestione dei processi Gestione della memoria principale Gestione della memoria secondaria Gestione file system Gestione dei dispositivi di I/O Protezione Networking 39 Gestione dei processi Un processo è un programma in esecuzione Un processo utilizza le risorse fornite dal computer per assolvere i propri compiti Il sistema operativo è responsabile delle seguenti attività riguardanti la gestione dei processi: creazione e terminazione dei processi sospensione e riattivazione dei processi gestione dei deadlock comunicazione tra processi sincronizzazione tra processi 40 Gestione della memoria principale La memoria principale è un "array" di byte indirizzabili singolarmente. è un deposito di informazioni (dati/istruzioni) facilmente accessibile e condiviso tra la CPU ed i dispositivi di I/O Il sistema operativo: tiene traccia di quali parti della memoria sono usate e da chi decide quali processi caricare quando diventa disponibile spazio in memoria alloca e dealloca lo spazio di memoria quando necessario 41 Gestione della memoria secondaria Memoria secondaria: poichè la memoria principale è volatile e troppo piccola per contenere tutti i dati e tutti i programmi in modo permanente, un computer è dotato di memoria secondaria in generale, la memoria secondaria è data da hard disk, dischi ottici, nastri, etc. Il sistema operativo è responsabile delle seguenti attività: allocazione dello spazio inutilizzato gestione dello spazio di memorizzazione ordinamento efficiente delle richieste (disk scheduling) 42 Gestione del file system Un file è l'astrazione informatica di un archivio di dati il concetto di file è indipendente dal media sul quale viene memorizzato (che ha caratteristiche proprie e propria organizzazione fisica) Un file system è composto da un insieme di file Il sistema operativo è responsabile delle seguenti attività: creazione e cancellazione di file creazione e cancellazione di directory manipolazione di file e directory codifica del file system sulla memoria secondaria 43 Gestione dell'I/O La gestione dell’I/O richiede: un interfaccia comune per la gestione dei device driver un insieme di driver per dispositivi hardware specifici un sistema di gestione di buffer per il caching delle informazioni 44 Protezione Il termine protezione si riferisce al meccanismo per controllare gli accessi di programmi, processi o utenti alle risorse del sistema e degli utenti Il meccanismo di protezione deve: Distinguere tra uso autorizzato e non autorizzato Specificare i controlli che possono essere imposti Fornire un meccanismo di attuazione della protezione 45 Networking Consente di far comunicare due o più elaboratori di condividere risorse Quali servizi protocolli di comunicazione a basso livello TCP/IP UDP servizi di comunicazione ad alto livello file system distribuiti (NFS, ...) print spooler 46 Interprete dei comandi Il S.O. deve fornire un interfaccia utente con cui: attivare un programma, terminare un programma, etc. interagire con le componenti del sistema operativo (file system) Può essere: grafica (a finestre, icone, etc.) testuale (linea di comando) Differenze cambia il "linguaggio" utilizzato, ma il concetto è lo stesso vi sono però differenze di espressività N.B. L'interprete dei comandi usa i servizi dei gestori di processi, I/O, memoria principale e secondaria... 47 System call Interfaccia programmatore - s.o. Ogni volta che un processo ha bisogno di un servizio del s.o. richiama una system call sono in genere disponibili come istruzioni a livello assembler esistono librerie che permettono di invocare le system call da diversi linguaggi (ad es. librerie C) vengono normalmente realizzate tramite interrupt software 48 System call 49 System call 50 System call Tutti i sistemi operativi hanno le proprie system call 51 Implementazione del file system Problemi da tenere in considerazione organizzazione di un disco allocazione dello spazio in blocchi gestione spazio libero implementazione delle directory tecniche per ottimizzare le prestazioni tecniche per garantire la coerenza 1 Organizzazione del disco Struttura di un disco un disco può essere diviso in una o più partizioni, porzioni indipendenti del disco che possono ospitare file system distinti il primo settore dei dischi è il cosidetto master boot record (MBR) è utilizzato per fare il boot del sistema contiene la partition table (tabella delle partizioni) contiene l'indicazione della partizione attiva Al boot del sistema, il codice memorizzato nel MBR viene letto ed eseguito MBR Partizione 1 Partizione 2 Partizione 3 Struttura del disco 2 Organizzazione del disco Struttura di una partizione ogni partizione inizia con un boot block Il codice nel MBR carica il boot block della partizione attiva e lo esegue Il boot block fornisce invece il codice che carica ed esegue il s.o. L'organizzazione del resto della partizione dipende dal file system Boot Block Gestione Gestione Root Superblock spazio libero Spazio occ. dir File e directory Struttura di una partizione 3 Organizzazione del disco In generale superblock tabelle per la gestione dello spazio libero struttura dati contenente informazioni sui blocchi liberi tabelle per la gestione dello spazio occupato contiene informazioni sui file presenti nel sistema non presente in tutti i file system root dir contiene informazioni sul tipo di file system e sui parametri fondamentali della sua organizzazione directory radice (del file system) file e directory 4 Allocazione Problema dell'allocazione Poiché l’hardware e il device driver consentono di accedere al disco come ad un insieme di blocchi dati di dimensione fissa. Nasce il problema di come scegliere i blocchi dati da utilizzare per un file e come questi blocchi dati vengono collegati assieme a formare una struttura unica 5 Allocazione contigua Descrizione 0- 5 6-11 i file sono memorizzati in sequenze contigue di blocchi di dischi Vantaggi 12-17 18-23 24-29 30-35 non è necessario utilizzare strutture dati per collegare i blocchi l'accesso sequenziale è efficiente blocchi contigui non necessitano operazioni di seek l'accesso diretto è efficiente block= offset/blocksize; pos= offset%blocksize; 36-41 directory Name Start Size a 0 4 b 13 11 c 30 3 d 33 3 6 Allocazione contigua Svantaggi si ripropongono le stesse problematiche dell’allocazione contigua in memoria centrale frammentazione esterna politica di scelta dell’area di blocchi liberi da usare per allocare spazio per un file: first fit, best fit, worst fit.... inoltre: i file non possono crescere! Quando utilizzare allocazione contigua? memoria secondaria write-only (CD-ROM, DVD) 7 Allocazione concatenata Descrizione ogni file è costituito da un lista concatenata di blocchi. ogni blocco contiene un puntatore al blocco successivo il descrittore del file contiene i puntatori al primo e all’ultimo elemento della lista 3 10 7 nil 0-5 nil 4 5 6 directory Name Start End a 0 4 b 1 6 6-11 spazio allocabile 8 Allocazione concatenata Vantaggi risolve il problema della frammentazione esterna l’accesso sequenziale o in “append mode" è efficiente Svantaggi l’accesso diretto è inefficiente progressivamente l’efficienza globale del file system degrada (i blocchi sono disseminati nel disco, aumenta il n. di seek) la dimensione utile di un blocco non è una potenza di due se il blocco è piccolo (512 byte) l’overhead per i puntatori può essere rilevante 9 Allocazione concatenata Per minimizzare l’overhead dovuto ai puntatori 4, 8, 16 blocchi riuniti in cluster vengono allocati in modo indivisibile Vantaggi la percentuale di spazio utilizzato per i puntatori diminuisce Svantaggi aumenta lo spazio sprecato per la frammentazione interna 10 Allocazione basata su FAT Descrizione invece di utilizzare parte del blocco dati per contenere il puntatore al blocco successivo si crea una tabella unica con un elemento per blocco (o per cluster) spazio allocabile FAT 3 10 7 nil 6 0-5 nil 4 6-11 directory Name Start End a 0 4 b 1 6 5 11 Allocazione basata su FAT Vantaggi i blocchi dati sono interamente dedicati... ai dati Svantaggi la scansione richiede anche la lettura della FAT, aumentando così il numero di accessi al disco. Ovviamente potendo fare caching in memoria dei blocchi FAT l'accesso diretto diventa più efficiente, in quanto la lista di puntatori può essere seguita in memoria Il DOS usa l'allocazione basata su FAT 12 Allocazione indicizzata Descrizione l'elenco dei blocchi che compongono un file viene memorizzato in un blocco (o area) indice per accedere ad un file, si carica in memoria la sua area indice e si utilizzano i puntatori contenuti spazio allocabile directory Name Index a 2 b 8 0-5 6-11 0, 3, 7, 4 2, 10, 5, 6 13 Allocazione indicizzata Vantaggi risolve (come l’allocazione concatenata) il problema dell’allocazione esterna. è efficiente per l’accesso diretto il blocco indice deve essere caricato in memoria solo quando il file è aperto Svantaggi la dimensione del blocco indice determina l’ampiezza massima del file utilizzare blocchi indici troppo grandi comporta un notevole spreco di spazio Come risolvere il trade-off? 14 Allocazione indicizzata - Possibili soluzioni Concatenazione di blocchi indice l’ultimo elemento del blocco indice non punta al blocco dati ma al blocco indice successivo si ripropone il problema per l’accesso diretto a file di grandi dimensioni spazio allocabile directory Name Index a 0 b 8 0-5 6-11 2, 3, 4, 9 1, 5, 6, nil 7, 10, 11, nil 15 Allocazione indicizzata - Possibili soluzioni Indice multilivello si utilizza un blocco indice dei blocchi indice degradano le prestazioni, in quanto richiede un maggior numero di accessi spazio allocabile directory Name Index a 0 0-5 1,2, nil,nil 3,4, 7,8 10,11, nil,nil 6-11 16 Allocazione indicizzata e UNIX In UNIX ogni file è associato ad un i-node (index node) un i-node è una struttura dati contenente gli attributi del file, e un indice di blocchi diretti e indiretti, secondo uno schema misto I-node Attributes Direct blocks ... Data ... Single indirect Double indirect Triple indirect Data . Index . . ... Data Index ... Data Data ... Index ... Data Index 17 Allocazione e performance Lo schema UNIX garantisce buone performance nel caso di accesso sequenziale file brevi sono acceduti più velocemente e occupano meno memoria Ulteriori miglioramenti pre-caricamento (per esempio nell’allocazione concatenata fornisce buone prestazioni per l’accesso sequenziale). combinazione dell’allocazione contigua e indicizzata contigua per piccoli file ove possibile indicizzata per grandi file 18 Gestione spazio libero - Mappa di bit Descrizione 0 ad ogni blocco corrisponde un bit in una bitmap i blocchi liberi sono associati ad un bit di valore 0, i blocchi occupati sono associati ad un bit di valore 1 1 2 3 4 5 f1 6 7 8 9 10 11 f2 12 13 14 15 16 17 18 19 20 21 22 23 f3 1 1 1 1 1 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 19 Gestione spazio libero - Mappa di bit Vantaggi Svantaggi semplice, è possibile selezionare aree contigue la memorizzazione del vettore può richiedere molto spazio Nota: Intel 80386 e succ. Motorola 68020 e succ. hanno istruzioni per trovare l’offset del primo bit acceso/spento in una word 20 Gestione spazio libero - Lista concatenata Descrizione i blocchi liberi vengono mantenuti in una lista concatenata si integra perfettamente con il metodo FAT per l'allocazione delle aree libere spazio allocabile FAT 3 10 7 nil 0-5 6 nil 6-11 4 directory Name Start End a 0 4 b 1 6 Free list 5 21 Gestione spazio libero - lista concatenata Vantaggi richiede poco spazio in memoria centrale Svantaggi l’allocazione di un’area di ampie dimensioni è costosa l’allocazione di aree libere contigue è molto difficoltosa 22 Gestione spazio libero - Lista concatenata (blocchi) Descrizione Free list è costituita da una lista concatenata di blocchi contenenti puntatori a blocchi liberi 12 35 23 32 33 45 22 11 32 55 27 34 53 65 28 19 39 59 97 94 93 95 08 nil 23 Gestione spazio libero - Lista concatenata (blocchi) Vantaggi ad ogni istante, è sufficiente mantenere in memoria semplicemente un blocco contenente elementi liberi non è necessario utilizzare una struttura dati a parte; i blocchi contenenti elenchi di blocchi liberi possono essere mantenuti all'interno dei blocchi liberi stessi Svantaggi l’allocazione di un’area di ampie dimensioni è costosa l’allocazione di aree libere contigue è molto difficoltosa 24 Gestione spazio libero: un po' di conti Premesse blocchi: 1K dimensione partizione: 16GB Mappa di bit Lista concatenata (FAT) 224 bit = 221 byte = 2048 blocchi = 2MB per la bitmap 224 puntatori = 224*3 byte = 48MB per la FAT Lista concatenata (blocchi) spazio occupato nei blocchi liberi 25 Gestione spazio libero: un po' di conti Scegliere la dimensione di un cluster cluster grandi: alta velocità di lettura ma elevata frammentazione cluster piccoli: bassa velocità e scarsa frammentazione, dati ottenuti su file system reali, lunghezza media: 2Kb Block size © 1995-2002 Andrew S. Tanenbaum 26 Implementazione delle directory Una directory è un file speciale contenente informazioni sui file contenuti nella directory una directory è suddivisa in un certo numero di directory entry ogni directory entry deve permettere di accedere a tutte le informazioni necessarie per gestire il file nome attributi informazioni di allocazione Scelte implementative da considerare attributi contenuti nelle directory entry oppure nell'i-node lista lineare (array) vs hash table 27 Implementazione delle directory Informazioni nelle directory entry la directory entry contiene tutte le informazioni necessarie associate ad un file utilizzata da MS-DOS nome file attributi info allocaz. nome file attributi info allocaz. Informazione negli i-node le informazioni sono contenute negli inode; una directory entry contiene un indice di inode utilizzata in UNIX nome nome nome nome i-node i-node i-node i-node 28 Implementazione delle directory Problema della lunghezza dei nomi memorizzare nomi a lunghezza variabile nelle directory comporta una serie di problemi Lunghezza fissa è il meccanismo più semplice... ...ma presenta un trade-off: spazio riservato molto grande, spreco di memoria spazio riservato troppo piccolo, nomi troppo brevi Lunghezza variabile la struttura dati diviene più complessa due possibili esempi nel lucido successivo 29