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