Introduzione ai
sistemi operativi
Monica Bianchini
Dipartimento di Ingegneria dell’Informazione
E-mail: [email protected]
1
UNIVAC
Il primo calcolatore concepito ed impostato come prodotto commerciale, fu realizzato da Eckert e Mauchly
(gli stessi costruttori dell’ENIAC) per l’Ufficio Centrale di Statistica degli Stati Uniti.
Sommario
L’algebra di Boole
Fu teorizzata dal matematico inglese George Boole (18101864) nel lavoro “Analisi Matematica della
Logica”, pubblicato nel 1847. Include un insieme di operazioni su variabili logiche (o variabili booleane),
che possono assumere i due soli valori true e false, indicati da 1 e 0. Le tecniche sviluppate nell’algebra
booleana possono essere applicate all’analisi ed alla progettazione dei circuiti elettronici, poiché essi sono
realizzati con dispositivi che possono assumere solo due stati.
Introduzione
Su insiemi di costanti e variabili logiche possono essere definite funzioni che hanno esse stesse la
caratteristica di assumere due soli valori. La definizione di una funzione booleana può essere effettuata per
sistema
mezzo di unaScopo
tabella del
di verità,
che operativo
indica il valore della funzione in corrispondenza di ogni possibile
configurazione dei valori degli argomenti. Le funzioni booleane possono essere scritte e manipolate anche
con metodi algebrici,
dato un del
insieme
di funzioni
(o operazioni) elementari tramite le quali poter esprimere
Architettura
sistema
operativo
ogni altra funzione.
Storia dei sistemi operativi
Struttura dei sistemi operativi
La gestione dei processi
La gestione della memoria
Il file system
La gestione dei dispositivi di I/O
L’interfaccia utente
Esempi di sistemi operativi
2
Introduzione
3
Introduzione
Il software può essere diviso in due grandi classi:
i programmi di sistema, che gestiscono le funzionalità del
sistema di calcolo
i programmi applicativi, che risolvono i problemi degli utenti
L’insieme dei programmi di sistema viene comunemente
identificato con il nome di Sistema Operativo (SO)
Definizione
Un sistema operativo è un programma che controlla
l’esecuzione di programmi applicativi ed agisce come
interfaccia fra le applicazioni e l’hardware del calcolatore
4
Scopo del sistema operativo
Gestione EFFICIENTE delle risorse del sistema di elaborazione
Rendere AGEVOLE l’interfaccia tra l’uomo e la macchina
5
Compiti del sistema operativo
Gestione dei processi
Gestione della memoria principale
Gestione della memoria di massa (file system)
Realizzazione dell’interfaccia utente
Gestione dell’accesso simultaneo di più utenti alla stessa
macchina
Esecuzione simultanea di più processi sulla stessa macchina
Rilevamento e gestione degli errori
Accounting
6
Esempio: il SO come gestore risorse – 1
Si consideri un ristorante con un capo–cuoco (che dirige la
cucina) ed i suoi aiutanti, camerieri e clienti:
I clienti scelgono un piatto dal menù
Un cameriere prende l’ordine e lo consegna al capo–cuoco
Il capo–cuoco riceve l’ordine e assegna uno o più aiutanti alla
preparazione del piatto
Ogni aiutante si dedicherà alla preparazione di un piatto, il che
potrà richiedere più attività diverse
Il capo–cuoco supervisiona la preparazione dei piatti e gestisce
le risorse (limitate) disponibili
7
Esempio: il SO come gestore risorse – 2
Il capo–cuoco è il sistema operativo!
I clienti sono gli utenti
Le ricette associate ai piatti sono i programmi
Il menù ed il cameriere costituiscono l’interfaccia verso il
sistema operativo (grafica e non)
Gli aiutanti sono i processi
La cucina è il computer; pentole, fornelli, etc. sono le
componenti hardware
8
Esempio: il SO come gestore risorse – 3
Problemi del capo–cuoco:
Esecuzione fedele delle ricette
Allocazione efficiente delle risorse esistenti (aiutanti, fornelli,
etc.)
Coordinamento efficiente degli aiutanti
Licenziamento degli aiutanti che non si comportano secondo le
regole
Problemi del sistema operativo:
Efficienza nell’uso delle risorse (processori, memoria, dischi,
etc.)
Protezione nell’uso delle risorse
Coordinamento dei processi
9
Il SO come macchina estesa – 1
Visione a strati delle componenti hardware/software che
compongo un elaboratore
10
Il SO come macchina estesa – 2
Il SO può essere inteso come uno strumento che virtualizza
le caratteristiche dell’hardware sottostante, offrendo
all’utente la visione di una macchina astratta più potente e
più semplice da utilizzare di quella fisicamente disponibile
In questa visione, un SO…
…nasconde a programmatori/utenti i dettagli dell’hardware e
fornisce un’interfaccia conveniente e facile da usare
…agisce come intermediario tra programmatore/utente e
hardware
Parole chiave
Indipendenza dall’hardware
Comodità d’uso
Programmabilità
11
Architettura del sistema operativo
I SO sono costituiti da un insieme di moduli, ciascuno
dedicato a svolgere una determinata funzione
I vari moduli del SO interagiscono tra loro secondo regole
precise, al fine di realizzare le funzionalità di base della
macchina
Interfaccia utente
Gestore dell’I/O
Gestore dei Processi
Gestore del
File System
Gestore della
Memoria Centrale
KERNEL
12
Storia dei
sistemi operativi
13
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
...
Perché analizzare la storia dei sistemi operativi?
Perché permette di capire l’origine di certe soluzioni presenti
nei SO attuali
Perché è l’approccio migliore per capire come certe idee si sono
sviluppate
Perché alcune delle soluzioni più antiche sono ancora utilizzate
14
Storia dei sistemi di elaborazione
Generazione 0: Babbage (1792–1871)
Progetta la macchina analitica (programmabile, meccanica)
Non aveva sistema operativo
La prima programmatrice della storia è Lady Ada Lovelace
(figlia del poeta Lord Byron)
Generazione 1: 1945–1955
Valvole e tavole di commutazione
Generazione 2: 1955–1965
Transistor e sistemi batch
Generazione 3: 1965–1980
Circuiti integrati, multiprogrammazione e time–sharing
Generazione 4: 1980–oggi
Personal computer
15
Generazione 1: 1945–1955
Come venivano costruiti?
Calcolatori a valvole e tavole di commutazione
Come venivano usati?
Solo calcoli numerici (calcolatori non elaboratori)
Un singolo gruppo di persone progettava,
programmava e manuteneva il proprio computer
costruiva,
Come venivano programmati?
In linguaggio macchina (stringhe di 0 e 1)
Programmazione su tavole di commutazione
Nessun sistema operativo!
16
Generazione 1: 1945–1955
Principali problemi:
Scarsa 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)
2)
3)
4)
5)
…caricare il programma da eseguire
…inserire i dati di input
…eseguire il programma
…attendere il risultato
…in caso di errore, ricominciare dal punto 1)
Tutto ciò a causa dell’assenza del SO
17
FORTRAN
ASSEMBLY
e = (a+b)*(c+d)

LOAD a, %r0
LOAD b, %r1
ADD %r0, %r1
LOAD c, %r2
LOAD d, %r3
ADD %r2, %r3
MULT
%r1, %r3
venivano
costruiti?
STORE %r3, e
LINGUAGGIO MACCHINA

10000001101101011010101010101000
Generazione 2: 1955–1965
Come
Introduzione dei transistor
Costruzione di macchine più affidabili ed economiche
Come venivano usati?
Gli elaboratori iniziano ad essere utilizzati per compiti diversi
Si crea un mercato, grazie alle dimensioni ed al prezzo ridotti
Avviene una separazione tra costruttori, operatori e
programmatori
Come venivano programmati?
Linguaggi di “alto livello”: Assembly, Fortran
Tramite schede perforate
Sistemi operativi batch
18
Generazione 2: 1955–1965
Definizione di job: Un programma o un insieme di
programmi la cui esecuzione è richiesta da un utente
Ciclo di esecuzione di un job
Il programmatore…
1)
2)
3)
scrive (su carta) un programma in un linguaggio di alto livello
perfora una serie di schede con il programma e il suo input
consegna le schede ad un operatore
L’operatore…
1)
2)
3)
inserisce le schede di controllo scritte in linguaggio apposito
inserisce le schede del programma
attende il risultato e lo consegna al programmatore
operatore  programmatore = utente
19
Generazione 2: 1955–1965
Primi rudimentali esempi di sistema operativo, detti anche
monitor residenti o sistemi batch, “a infornata”:
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 in
successione
20
Generazione 2: 1955–1965
Principale problema: molte risorse non utilizzate
Durante le operazioni di lettura schede/stampa, durante il
caricamento di un nuovo job, il processore resta inutilizzato
Parte della memoria resta 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)
21
Generazione 3: 1965–1980
Come venivano costruiti?
Circuiti integrati
Come venivano usati?
Progressivamente sparisce la figura dell’operatore come
“interfaccia” degli utenti verso le macchine
utente = operatore
Come venivano programmati?
Linguaggi di “alto livello”: C, shell scripting
Editor testuali, editor grafici, compilatori
Accesso al sistema da terminali
Sistemi operativi interattivi, con multi–programmazione e
time–sharing
22
Generazione 3: Multi–programmazione
Definizione di multi–programmazione: Utilizzo del processore
durante i periodi di I/O di un job per eseguire altri job
Vantaggi:
Il processore non viene lasciato inattivo (idle) durante le
operazioni di I/O (molto lunghe)
La memoria viene utilizzata al meglio, caricando il maggior
numero di job possibili
Nota: per gestire la multi–programmazione, il SO deve
gestire un pool di job da eseguire, fra cui alternare il
processore
23
Generazione 3: Multi–programmazione
Caratteristiche tecniche:
Più job contemporaneamente in memoria
Una componente del SO, detta scheduler, si preoccupa di
alternarli nell’uso della CPU
Quando un job richiede un’operazione di I/O, la CPU viene
assegnata ad un altro job
SO multi–programmati:
Routine di I/O fornite dal SO
Gestione della memoria: il sistema deve allocare la memoria
per i job presenti contemporaneamente
CPU scheduling: il sistema deve scegliere tra i diversi job pronti
all’esecuzione
Allocazione delle risorse di I/O: il SO deve essere in grado di
allocare le risorse di I/O fra diversi processi
24
Generazione 3: Time–sharing
Definizione di time–sharing:
La risorsa CPU viene suddivisa in 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 context switch avvengono così frequentemente che più utenti
possono interagire con i programmi in esecuzione
SO time–sharing:
Gestione della memoria: il numero di processi utente può essere
molto elevato; si rende necessario l’uso della memoria virtuale
CPU scheduling: deve essere di tipo time–sliced, ovvero
sospendere periodicamente l’esecuzione di un programma a
favore di un altro
La presenza di più utenti rende necessari meccanismi di
protezione (e.g. protezione del file system, della memoria, etc.)
25
Generazione 4: 1980–oggi
I personal computer sono dedicati ad utenti singoli:
L’obiettivo primario per i SO diventa la facilità d’uso; diminuisce
l’interesse per la gestione ottima delle risorse
I SO per PC sono in generale più semplici; non implementano
la protezione (almeno fino all’avvento di Internet)
Creazione di interfacce grafiche user–friendly
Tuttavia, tecnologie sviluppate per SO più complessi possono
comunque essere adottate
26
La struttura del
sistema operativo
La gestione dei processi
27
La gestione dei processi – 1
Un processo è un programma in esecuzione
Un processo utilizza le risorse fornite dal sistema di elaborazione per
assolvere ai propri compiti
Il sistema operativo è responsabile
riguardanti la gestione dei processi:
delle
seguenti
attività
creazione e terminazione dei processi
sospensione e riattivazione dei processi
gestione dei deadlock
comunicazione tra processi
sincronizzazione tra processi
Il gestore dei processi “realizza” una macchina virtuale in cui
ciascun programma opera come se avesse a disposizione un’unità di
elaborazione dedicata
28
La gestione dei processi – 2
Il gestore dei processi è il modulo che si occupa del controllo
della sincronizzazione, dell’interruzione e della riattivazione
dei programmi in esecuzione cui viene assegnato un
processore
La gestione dei processi viene compiuta secondo modalità
diverse, in funzione del tipo di utilizzo cui il sistema è rivolto
Il programma che si occupa della distribuzione del tempo di
CPU tra i vari processi attivi, decidendone l’avvicendamento,
è chiamato scheduler
Nel caso di sistemi multiprocessore, lo scheduler si occupa
anche di gestire la cooperazione tra le diverse CPU presenti
nel sistema
29
Ciclo di vita dei processi
top nella coda di scheduling
running
nascita
ready
tempo scaduto
evento
termine
attesa evento (es. I/O)
wait
30
Politiche di scheduling
Le politiche di scheduling sono raggruppabili in due grandi
categorie:
Preemptive: l’uso della CPU da parte di un processo può essere
interrotto in un qualsiasi momento, e la risorsa concessa ad
altro processo
Non preemptive: una volta che un processo ha ottenuto l’uso
della CPU, è unico proprietario della risorsa finché non ne
decide il rilascio
31
Sistemi mono–tasking
I SO che gestiscono l’esecuzione di un solo programma per
volta (un solo processo) sono detti mono–tasking
Non è possibile sospendere un processo per assegnare la
CPU ad un altro
Sono storicamente i primi SO (es. MS–DOS)
Tempo di utilizzo della CPU
Tempo di attesa di eventi
esterni
C
B
A
t
T
32
Sistemi multi–tasking
I SO che permettono l’esecuzione contemporanea di più
programmi sono detti multi–tasking o multi–programmati
Un programma può essere interrotto e la CPU passata a un
altro programma
Tempo di utilizzo della CPU
C
Tempo di attesa di eventi
esterni
B
A
t
Tmulti-tasking Tmono-tasking
33
Sistemi time–sharing
Un’evoluzione dei sistemi multi–tasking sono i sistemi time–
sharing
Ogni processo viene eseguito ciclicamente per piccoli quanti
di tempo
Se la velocità del processore è sufficientemente elevata si ha
l’impressione di un’evoluzione parallela dei processi
0.00”
Esempio
Ipotesi: 1 MIPS, 4 processi,
0.25 s/utente
Conseguenze: 0.25 MIPS/utente,
TELA = 4  TCPU
D
A
0.75”
0.25”
C
0.50”
B
34
Time–sharing: diagramma temporale
Processo
Tempo di CPU
A
3
B
2
C
4
D
3
D
C
B
A
t
35
La gestione della memoria
36
La gestione della memoria principale – 1
La memoria principale…
…è un “array” di byte indirizzabili singolarmente
…è un deposito di dati facilmente accessibile e condiviso tra la CPU ed
i dispositivi di I/O
Il SO è responsabile delle seguenti attività riguardanti la gestione
della memoria principale:
Tenere traccia di quali parti della memoria sono usate e da chi
Decidere quali processi caricare quando diventa disponibile spazio in
memoria
Allocare e deallocare lo spazio di memoria quando necessario
Il gestore di memoria “realizza” una macchina virtuale in cui
ciascun programma opera come se avesse a disposizione una
memoria dedicata
37
La gestione della memoria principale – 2
L’organizzazione e la gestione della memoria centrale è uno
degli aspetti più critici nel disegno di un SO
Il gestore della memoria è quel modulo del SO incaricato di
assegnare la memoria ai task (per eseguire un task è
necessario che il suo codice sia caricato in memoria)
La complessità del gestore della memoria dipende dal tipo di
SO
Nei SO multi–tasking, più programmi possono essere caricati
contemporaneamente in memoria
Problema: come allocare lo spazio in maniera ottimale
38
Allocazione lineare
Memoria
0000x
Programma A
Programma B
Programma C
39
Allocazione lineare
Memoria
0000x
Programma A
PROBLEMA !!!!
Programma D
FRAMMENTAZIONE
Programma C
40
Paginazione
Memoria
0000x
Programma A
Programma A
Programma A
Programma B
Programma B
Programma D
41
Paginazione
Memoria
0000x
Programma A
Programma A
Programma A
Programma E
Programma F
Programma D
Programma F
42
La memoria virtuale – 1
Spesso la memoria non è sufficiente per contenere
completamente tutto il codice dei processi
Si può simulare una memoria più grande tenendo nella
memoria di sistema (RAM) solo le parti di codice e dati che
servono in quel momento
Si usa il concetto di memoria virtuale
I dati e le parti di codice relativi a programmi non in
esecuzione possono essere tolti dalla memoria centrale e
“parcheggiati” su disco nella cosiddetta area di swap
I processori moderni sono dotati di meccanismi hardware per
facilitare la gestione della memoria virtuale
43
La memoria virtuale – 2
Memoria
0000x
Programma A-1
Programma B-1
Programma D
Swap
Programma A-2
Programma A-3
Programma B-2
44
La memoria virtuale – 2
Memoria
0000x
Programma A-2
Programma B-1
Programma D
Swap
Programma A-1
Programma A-3
Programma B-2
45
La gestione della 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, floppy, etc.
Il SO è responsabile delle seguenti attività riguardanti la
gestione della memoria secondaria:
Allocazione dello spazio
Gestione dello spazio libero
Ordinamento efficiente delle richieste (disk scheduling)
46
Il file system
47
La gestione del file system – 1
Un file è l’astrazione informatica di un archivio di dati
Il concetto di file è indipendente dal mezzo sul quale viene
memorizzato (che ha caratteristiche proprie e propria
organizzazione fisica)
Un file system è composto da un insieme di file
Il SO è responsabile delle seguenti attività riguardanti la
gestione del file system:
Creazione e cancellazione di file
Creazione e cancellazione di directory
Manipolazione di file e directory
Codifica del file system sulla memoria secondaria
48
La gestione del file system – 2
Il gestore del file system è il modulo del SO incaricato di
gestire le informazioni memorizzate sui dispositivi di memoria
di massa
Il gestore del file system deve garantire la correttezza e la
coerenza delle informazioni
Nei sistemi multi–utente, fornisce meccanismi di protezione
per consentire agli utenti di proteggere i propri dati
dall’accesso di altri utenti non autorizzati
Le funzioni tipiche del gestore del file system sono:
Fornire un meccanismo per l’identificazione dei file
Fornire metodi opportuni di accesso ai dati
Rendere trasparente la struttura fisica del supporto di
memorizzazione
Implementare meccanismi di protezione dei dati
49
Organizzazione del file system
Quasi tutti i SO utilizzano un’organizzazione gerarchica del
file system
L’elemento utilizzato per raggruppare più file insieme è la
directory
L’insieme gerarchico delle
directory e dei file può essere
rappresentato attraverso un
grafo (un albero nei SO più
datati) delle directory
Directory
File
Grafo delle directory
50
La gestione dei dispositivi di I/O
51
La gestione dei dispositivi di 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
Il gestore dei dispositivi di I/O è il modulo del SO incaricato
di assegnare i dispositivi ai task che ne fanno richiesta e di
controllare i dispositivi stessi
Da esso dipende la qualità e il tipo di periferiche riconosciute
dal sistema
Il gestore delle periferiche offre all’utente una versione
astratta delle periferiche hardware; l’utente ha a disposizione
un insieme di procedure standard di alto livello per
leggere/scrivere da/su una periferica che “percepisce” come
dedicata
52
Device driver
Il controllo dei dispositivi di I/O avviene attraverso speciali
moduli software, detti device driver
I device driver sono spesso realizzati dai produttori dei
dispositivi stessi che ne conoscono le caratteristiche fisiche in
maniera approfondita
I device driver implementano le seguenti funzioni:
Rendono trasparenti le caratteristiche fisiche tipiche di ogni
dispositivo
Gestiscono la comunicazione dei segnali verso i dispositivi
Gestiscono i conflitti, nel caso in cui due o più task vogliano
accedere contemporaneamente allo stesso dispositivo
53
L’interfaccia utente
54
L’interfaccia utente – 1
Tutti i SO implementano meccanismi per facilitare l’utilizzo
del sistema da parte degli utenti
L’insieme di tali meccanismi di accesso al computer prende il
nome di interfaccia utente
Serve per…
…attivare un programma, terminare un programma, etc.
…interagire con le componenti del sistema operativo (gestore
dei processi, file system, etc.)
55
L’interfaccia utente – 2
Interfaccia testuale:
Interprete dei comandi (shell)
Esempio: MS–DOS
Interfaccia grafica (a finestre):
L’output dei vari programmi viene visualizzato in maniera
grafica all’interno di finestre
L’utilizzo di grafica rende più intuitivo l’uso del calcolatore
Esempio: WINDOWS
Differenze:
Cambia il “linguaggio” utilizzato, ma il concetto è lo stesso
Vi sono però differenze a livello di espressività
56
Esempi di sistemi operativi
57
Sistemi operativi commerciali
In commercio sono presenti una grande quantità di sistemi
operativi diversi
In passato, la tendenza delle case costruttrici di sistemi di
elaborazione era di sviluppare sistemi operativi proprietari
per le loro architetture
La tendenza attuale è quella dello sviluppo di sistemi
operativi portabili su piattaforme diverse
58
MS–DOS
DOS: Disk Operating System
CPU Intel 80x86 (16 bit)
Monotask
Monoutente
File system gerarchico
Memoria gestibile limitata (1 MB/640 KB)
Nessuna protezione
59
Windows
CPU Intel 80386/486/Pentium/Sparc/Alfa
Multitask
Monoutente/Multiutente
NTFS (NT File System)
Microkernel, thread
Non solo per Intel 80x86 (ma anche per DEC–AXP, MIPS–
R4000, etc.)
Sistema a 32/64 bit
60
UNIX
Nato alla fine degli anni ‘60 (AT&T Bell Labs)
Rimasto all’avanguardia perchè sviluppato in ambito
universitario (UCB, University of California at Berkeley)
Multitask
Multiutente
Ottima integrazione in rete
Portabilità dei programmi
61
Linux
Nato nel ‘91, grazie a Linus Torvalds, uno studente
finlandese dell’Università di Helsinki
Sviluppato su piattaforma Intel 80386, fu distribuito da
subito su Internet (free e open–source)
Multitask
Multiutente
L'architettura del sistema è Unix–like: un kernel molto
“piccolo” che contiene solo funzioni fondamentali per la
gestione delle risorse del computer (memoria, dischi, rete e
altre periferiche) ed una larga collezione di programmi
applicativi che l’utente usa per operare sul sistema
62