Introduzione
• Cosa è un sistema operativo?
Trasparenze su Sistemi Operativi I
• Evoluzione dei sistemi operativi
• Tipi di sistemi operativi
• Concetti fondamentali
• Chiamate di sistema
c 2000-03 Marino Miculan ([email protected])
Copyright La copia letterale e la distribuzione di questa presentazione nella sua integrità sono permesse con qualsiasi
mezzo, a condizione che questa nota sia riprodotta.
• Struttura dei Sistemi Operativi
2004-05 Modificati ed integrati con altro materiale da Giorgio Delzanno su autorizzazione di Marino Miculan
1
2
Visione astratta delle componenti di un sistema di calcolo
Cosa è un sistema operativo?
Possibili risposte:
• È un programma di controllo
Banking
system
Airline
reservation
Web
browser
Compilers
Editors
Command
interpreter
• È un gestore di risorse
Application programs
System
programs
Operating system
• È un fornitore di servizi
Machine language
• ...
Microarchitecture
Nessuna di queste definizioni è completa
Hardware
Physical devices
3
4
Cosa è un sistema operativo? (2)
Componenti di un sistema di calcolo
1. Hardware – fornisce le risorse computazionali di base:
dispositivi di I/O).
(CPU, memoria,
2. Sistema operativo – controlla e coordina l’uso dell’hardware tra i programmi
applicativi per i diversi utenti
3. Programmi applicativi — definiscono il modo in cui le risorse del sistema
sono usate per risolvere i problemi computazionali dell’utente (database,
videgiochi, programmi di produttività personale,. . . )
• Un programma che agisce come intermediario tra l’utente di un calcolatore
e l’hardware del calcolatore stesso.
• Obiettivi di un sistema operativo:
– Eseguire programmi utente e rendere più facile la soluzione dei problemi
dell’utente
– Rendere il sistema di calcolo più facile da utilizzare
– Utilizzare l’hardware del calcolatore in modo efficiente
Questi obiettivi sono in contrapposizione. A quale obiettivo dare priorità
dipende dal contesto.
4. Utenti (persone, macchine, altri calcolatori)
5
6
Primi sistemi – Macchine nude e crude (primi anni ’50)
Alcune definizioni di Sistema Operativo
• Struttura
– Grossi calcolatori funzionanti solo da console
• Macchina astratta
Implementa funzionalità di alto livello, nascondendo dettagli di basso livello.
– Sistemi single user; il programmatore era anche utente e operatore
– I/O su nastro perforato o schede perforate
• Primi Software
• Allocatore di risorse
Gestisce ed alloca le risorse finite della macchina.
– Assemblatori, compilatori, linker, loader
– Librerie di subroutine comuni
• Programma di controllo
Controlla l’esecuzione dei programmi e le operazioni sui dispositivi di I/O.
Condivisione rispetto al tempo e rispetto allo spazio
– Driver di dispositivi
• Uso inefficiente di risorse assai costose
– Bassa utilizzazione della CPU
– Molto tempo impiegato nel setup dei programmi
7
8
Semplici Sistemi Batch
• Utente 6= operatore
• Ridurre il tempo di setup raggruppando i job simili (batch)
• Aggiungere un lettore di schede
Card
reader
Tape
drive
Input
tape
• Sequenzializzazione automatica dei job – automaticamente, il controllo
passa da un job al successivo. Primo rudimentale sistema operativo
System
tape
• Monitor residente
Output
tape
– inizialmente, il controllo è in monitor
Printer
– poi viene trasferito al job
– quando il job è completato, il controllo torna al monitor
1401
(a)
7094
(b)
(c)
(d)
1401
(e)
(f)
9
Schede di controllo
Semplici Sistemi Batch (Cont.)
• Schede speciali che indicano al monitor residente quali programmi mandare
in esecuzione
$END
• Problemi
Data for program
1. Come fa il monitor a sapere la natura del job (e.g., Fortran o assembler?)
o quale programma eseguire sui dati forniti?
$RUN
$LOAD
Fortran program
2. Come fa il monitor a distinguere
$FORTRAN
(a) un job da un altro
$JOB, 10,6610802, MARVIN TANENBAUM
(b) dati dal programma
• Soluzione: schede di controllo
• Caratteri speciali distinguono le schede di controllo dalle schede di programma o di dati.
10
11
Schede di controllo (Cont.)
Funzionamento Off-Line
• Una parte del monitor residente è
– Inteprete delle schede di controllo – responsabile della lettura e esecuzione delle istruzioni sulle schede di controllo
card
reader
satellite
processor
printer
– Loader – carica i programmi di sistema e applicativi in memoria
– Driver dei dispositivi – conoscono le caratteristiche e le proprietà di ogni
dispositivo di I/O.
• Problema: bassa performance – I/O e CPU non possono sovrapporsi; i
lettore di schede sono molto lenti.
• Soluzione: operazioni off-line – velocizzare la computazione caricando i job
in memoria da nastri, mentre la lettura e la stampa vengono eseguiti off-line
system tapes
main
computer
• Il computer principale non è limitato
dalla velocità dei lettori di schede
o stampanti, ma solo dalla velocità
delle unità nastro.
• Non si devono fare modifiche nei
programmi applicativi per passare
dal funzionamento diretto a quello
off-line
• Guadagno in efficienza: si può usare
più lettori e più stampanti per una
CPU.
12
13
Spooling
disk
• Spool = Simultaneous peripheral operation on-line
• Sovrapposizione dell’I/O di un job con la computazione di un altro job.
Mentre un job è in esecuzione, il sistema operativo
– legge il prossimo job dal lettore di schede in un’area su disco (coda dei
job)
I/O
– trasferisce l’output del job precedente dal disco alla stampante
on-line
CPU
card reader
line printer
14
• Job pool – struttura dati che permette al S.O. di scegliere quale job mandare
in esecuzione al fine di aumentare l’utilizzazione della CPU.
Anni 60: Sistemi batch Multiprogrammati
Più job sono tenuti in memoria nello stesso momento, e la CPU fa a turno su
tutti i job
I/O
CPU
OS
u2
u1
OS
u1
u2
L read ()
u3
SIO
u4
scheduler
L+1
M block
R+1
• routine di I/O devono essere fornite dal sistema
• Gestione della Memoria – il sistema deve allocare memoria per più job
• Scheduling della CPU – il sistema deve scegliere tra più job pronti per
l’esecuzione
scheduler
R
Caratteristiche dell’OS richieste per la multiprogrammazione
interrupt
• Allocazione dei dispositivi
scheduler
15
Anni 70: Sistemi Time-Sharing – Computazione Interattiva
• La CPU è condivisa tra più job che sono tenuti in memoria e su disco (la
CPU è allocata ad un job solo se questo si trova in memoria)
16
Anni 80: Personal Computer
• Personal computers – sistemi di calcolo dedicati ad un singolo utente
• I/O devices – tastiere, mouse, schermi, piccole stampanti
• Un job viene caricato dal disco alla memoria, e viceversa (swapping)
• Comodità per l’utente e reattività
• Viene fornita una comunicazione on-line tra l’utente e il sistema; quando
il sistema operativo termina l’esecuzione di un comando, attende il prossimo “statement di controllo” non dal lettore di schede bensı́ dalla tastiera
dell’utente.
• Deve essere disponibile un file system on-line per poter accedere ai dati e
al codice
17
• Interfaccia utente evoluta (GUI)
• Spesso gli individui hanno un uso esclusivo del calcolatore, e non necessitano
di avanzate tecniche di sfruttamento della CPU o sistemi di protezione.
18
Anni 90: Sistemi operativi di rete
Il futuro: Sistemi operativi distribuiti
• Distribuzione della computazione tra più processori
• In un sistema operativo distribuito, l’utente ha una visione unitaria del
sistema di calcolo.
• Sistemi debolmente accoppiati – ogni processore ha la sua propria memoria;
i processori comunicano tra loro attraverso linee di comunicazione (e.g., bus
ad alta velocità, linee telefoniche, fibre ottiche,. . . )
• In un sistema operativi di rete, l’utente ha coscienza della differenza tra i
singoli nodi.
– Condivisione delle risorse (dati e computazionali)
– Aumento della velocità – bilanciamento del carico
– Tolleranza ai guasti
• Un sistema operativo distribuito è molto più complesso di un SO di rete.
– Trasferimenti di dati e computazioni avvengono in modo esplicito
– Poco tollerante ai guasti
• Esempi di servizi (non sistemi) di rete: NFS, P2P (KaZaA, Gnutella, . . . ),
Grid computing. . .
– Complesso per gli utenti
19
20
Riepilogo
• IV Generazione (’80-oggi): circuiti integrati su larga scala
• I generazione (’45-’55): relè/valvole, no sistema operativo
– Personal Computer IBM e MS-DOS
– MacIntosh di Apple con GUI (Graphical User Interface)
• II generazione (’55-’65): transistor e schede performate
– Sistema operativo Windows
– sistemi batch: IBM 1401 (scheda ⇔ nastro) e IBM 7094 (calcolo)
∗ Windows costruito su DOS
• III generazione (’65-’80): circuiti integrati
∗ Windows 95 e Windows 98 (ancora con codice assembly a 16bit)
∗ Windows NT e Windows 2000 (a 32bit)
– compatibilita’ tra macchine IBM diverse (360,370, . . . )
∗ Windows Me (update di Windows 98)
– OS/360 con spooling e multiprogrammazione
∗ Windows XP
– MULTICS: servizio centralizzato e time-sharing
– Linux versione open source di Unix
– PDP-1 . . . -11: minicalcolatori a 18bit
– UNIX: Versione singolo utente di MULTICS per PDP-7
21
Tipologie di Sistemi Operativi
Sistemi operativi per mainframe
Diversi obiettivi e requisiti a seconda delle situazioni
• Grandi quantità di dati (> 1T B ' 1012B)
• Supercalcolatori
• Mainframe
• Grande I/O
• Server
• Elaborazione “batch” non interattiva
• Multiprocessore
• Assoluta stabilità (uptime > 99, 999%)
• Personal Computer
• Applicazioni: banche, amministrazioni, ricerca. . .
• Real Time
• Esempi: IBM OS/360, OS/390
• Embedded
22
23
Sistemi per server
Sistemi operativi per supercalcolatori
• Sistemi multiprocessore con spesso più di una CPU in comunicazione stretta.
• Grandi quantità di dati (> 1T B)
• Enormi potenze di calcolo (es. NEC Earth-Simulator, 40 TFLOP)
• Rilevamento automatico dei guasti
• Architetture con migliaia di CPU
• Elaborazione su richiesta (semi-interattiva)
• Elaborazione “batch” non interattiva
• Applicazioni: server web, di posta, dati, etc.
• Esempi: Unix, o ad hoc
• Esempi: Unix, Linux, Windows NT e derivati
24
25
Sistemi Real-Time
• Vincoli temporali fissati e ben definiti
• Sistemi hard real-time: i vincoli devono essere soddisfatti (es. fermare il
braccio meccanico)
– la memoria secondaria è limitata o assente; i dati sono memorizzati o in
memoria volatile, o in ROM.
– Utili in applicazioni (multimedia, virtual reality) che richiedono caratteristiche avanzate dei sistemi operativi
– In confitto con i sistemi time-sharing; non sono supportati dai sistemi
operativi d’uso generale
– Usati in robotica, controlli industriali, software di bordo. . .
• Sistemi soft real-time: i vincoli possono anche non essere soddisfatti, ma il
sistema operativo deve fare del suo meglio
– Uso limitato nei controlli industriali o nella robotica
26
Sistemi operativi embedded
Sistemi operativi per smart card
• Per calcolatori palmari (PDA), cellulari, ma anche televisori, forni a microonde, lavatrici, etc.
• Girano sulla CPU delle smartcard
• Stretti vincoli sull’uso di memoria e alimentazione
• Hanno spesso caratteristiche di real-time
• implementano funzioni minime
• Limitate risorse hardware
• Esempio: JavaCard
• esempio: PalmOS, Epoc, PocketPC, QNX.
27
28
Architettura dei calcolatori
Struttura dei Sistemi di Calcolo
disk
disk
printer
tape drives
on-line
• Operazioni dei sistemi di calcolo
• Struttura dell’I/O
CPU
disk
controller
printer
controller
tape-drive
controller
• Struttura della memoria
system bus
• Gerarchia delle memorie
memory controller
• Protezione hardware
memory
• Invocazione del Sistema Operativo
29
30
Operazioni dei sistemi di calcolo
Funzionamento event-driven di un S.O.
• I dispositivi di I/O e la CPU possono funzionare concorrentemente
• Ogni controller gestisce un particolare tipo di dispositivo
• Il programma di bootstrap inizializza i registri della CPU e dei controller dei
dispositivi di I/O
• Ogni controller ha un buffer locale
• Quindi carica in memoria il nucleo del sistema operativo e lo esegue
• La CPU muove dati da/per la memoria principale per/da i buffer locali dei
controller
• l’I/O avviente tra il dispositivo e il buffer locale del controller
• Il sistema operativo lancia un processo speciale (init in Unix) e poi attende
segnali di interrupt (eventi che possono cambiare il corso dell’esecuzione
del programma corrente)
• Il controller informa la CPU quando ha terminato la sua operazione, generando un interrupt.
31
32
Funzioni comuni degli Interrupt
Interrupt
• Gli interrupt trasferiscono il controllo alla routine di servizio dell’interrupt,
generalmente attraverso il vettore di interruzioni, che contiene gli indirizzi
di tutte le routine di servizio.
• Visono due tipi di interrupt
– Segnali di interrupt che arrivano da un controller
– Interrupt generate da software, chiamate trap: un trap può essere causato o da un errore o da una esplicita richiesta dell’utente, ad. es., una
chiamata di una funzione di sistema (system call)
• L’hardware deve salvare l’indirizzo dell’istruzione interrotta.
• Interrupt in arrivo sono disabilitati mentre un altro interrupt viene gestito,
per evitare che vadano perduti.
33
34
Gestione degli Interrupt
Funzioni comuni degli Interrupt
• Gli interrupt trasferiscono il controllo alla routine di servizio dell’interrupt,
generalmente attraverso il vettore di interruzioni, che contiene gli indirizzi
di tutte le routine di servizio.
• Il sistema operativo preserva lo stato della CPU salvando registri e program
counter.
• Determinazione di quale tipo di interrupt è avvenuto:
• L’hardware deve salvare l’indirizzo dell’istruzione interrotta.
• Interrupt in arrivo sono disabilitati mentre un altro interrupt viene gestito,
per evitare che vadano perduti.
• Un trap è un interrupt generato da software, causato o da un errore o da
una esplicita richiesta dell’utente.
• Un sistema operativo è guidato da interrupt
35
– Se i controller non inviano direttamente segnali di interrupt alla CPU,
si utilizza il polling: ciclicamente la CPU controlla lo stato (registri) dei
dispositivi per vedere se si sono verificati eventi rilevanti (ad esempio
fine di un trasferimento I/O) e quindi invoca la routine per gestire tale
evento (ad es. trasferimento dei dati da buffer a memoria)
– Se il controller invia un segnale di interrupt (con informazioni sul tipo
di interrupt, ad es. un indice per il vettore delle interr.) il sistema
operativo utilizza il selezionare la routine di gestione attraverso il vettore
delle interruzioni
36
Struttura dell’I/O
• I/O sincrono: dopo che l’I/O è partito, il controllo ritorna al programma
utente solo dopo che l’I/O è stato completato
– l’istruzione hardware wait (se esiste) blocca la CPU fino alla prossima
interruzione
– oppure, la CPU aspetta laprossima intrruzione tramite un ciclo di attesa
(chiamato busy wait)
– inq uesto caso al più una richiesta di I/O è eseguita alla volta; non ci
sono I/O paralleli
• I/O asincrono: dopo che l’I/O è partito, il controllo ritorna al programma
utente senza aspettare che l’I/O venga completato
– chiamata di sistema (System call) – richiede al sistema operativo di
sospendere il processo in attesa del completamento dell’I/O.
– Se non ci sono processi da eseguire la CPU esegue un’istruzione wait
– una tabella dei dispositivi mantiene tipo, indirizzo e stato di ogni dispositivo di I/O.
– Il sistema operativo accede alla tabella dei dispositivi per determinare lo
stato, e per mantenere le informazioni relative agli interrupt.
37
Struttura del Direct Memory Access (DMA)
CPU
Memory
I/O devices
Struttura della Memoria
I/O instructions
• Usata per dispositivi in grado di trasferire dati a velocità prossime a quelle
della memoria
• I controller trasferiscono blocchi di dati dal buffer locale direttamente alla
memoria, senza intervento della CPU (per evitare di dover gestire troppe
interruzioni)
• Memoria principale (RAM) – la memoria che la CPU può accedere direttamente.
• Memoria secondaria (Dischi, floppy, CD, ...) – estensione della memoria
principale che fornisce una memoria non volatile (e solitamente più grande)
• Viene generato un solo interrupt per blocco, invece di uno per ogni byte
trasferito.
38
39
Gerarchia della Memoria
I sistemi di memorizzazione sono organizzati gerarchicamente, secondo
Typical access time
Typical capacity
• velocità
• costo
• volatilità
1 nsec
Registers
2 nsec
Cache
10 nsec
Main memory
64-512 MB
10 msec
Magnetic disk
5-50 GB
Magnetic tape
20-100 GB
100 sec
<1 KB
1 MB
Caching – duplicare i dati più frequentemente usati di una memoria, in una
memoria più veloce. La memoria principale può essere vista come una cache
per la memoria secondaria.
40
Funzionamento Dual-Mode
Protezione hardware
• La condivisione di risorse di sistema richiede che il sistema operativo assicuri
che un programma scorretto non possa portare altri programmi (corretti)
a funzionare non correttamente.
• Funzionamento in dual-mode
• Protezione dell’I/O
• L’hardware deve fornire un supporto per differenziare almeno tra due modi
di funzionamento
• Protezione della Memoria
1. User mode – la CPU sta eseguendo codice di un utente
• Protezione della CPU
2. Monitor mode (anche supervisor mode, system mode, kernel mode) –
la CPU sta eseguendo codice del sistema operativo
41
42
Funzionamento Dual-Mode (Cont.)
• La CPU ha un Mode bit che indica in quale modo si trova: supervisor (0)
o user (1).
Protezione dell’I/O
• Quando avviene un interrupt, l’hardware passa automaticamente in modo
supervisore
interrupt/fault
monitor
• Tutte le istruzione di I/O sono privilegiate
• Si deve assicurare che un programma utente non possa mai passare in modo
supervisore (per esempio, andando a scrivere nel vettore delle interruzioni)
user
set user mode
• Le istruzioni privilegiate possono essere eseguite solamente in modo supervisore
43
44
Protezione della Memoria (Cont.)
Protezione della Memoria
base
base + limit
Si deve proteggere almeno il vettore delle interruzioni e le routine di gestione
degli interrupt
address
CPU
0
monitor
no
256000
• Per avere la protezione della memoria, si aggiungono due registri che determinano il range di 300040
indirizzi a cui un programma può accedere:
registro base contiene il primo indirizzo fisico 420940
legale
registro limite contiene la dimensione del range 880000
di memoria accessibile
• la memoria al di fuori di questo range è protetta 1024000
yes
≥
yes
<
no
job 1
300040
job 2
base register
120900
job 3
trap to operating system
monitor—addressing error
memory
limit register
• Essendo eseguito in modo monitor, il sistema operativo ha libero accesso
a tutta la memoria, sia di sistema sia utente
job 4
• Le istruzioni di caricamento dei registri base e limite sono privilegiate
45
46
Invocazione del sistema operativo
Protezione della CPU
• il Timer interrompe la computazione dopo periodi prefissati, per assicurare
che periodicamente il sistema operativo riprenda il controllo
– Il timer viene decrementato ad ogni tick del clock (1/50 di secondo,
tipicamente)
• Dato che le istruzioni di I/O sono privilegiate, come può il programma
utente eseguire dell’I/O?
• Attraverso le system call – il metodo con cui un processo richiede un’azione
da parte del sistema operativo
– Solitamente sono un interrupt software (trap)
– Quanto il timer va a 0, avviene l’interrupt
– Il controllo passa attraverso il vettore di interrupt alla routine di servizio della trap nel sistema operativo, e il mode bit viene impostato a
“monitor”.
• Il timer viene usato comunemente per implementare il time sharing
• Serve anche per mantenere la data e l’ora
– Il sistema operativo verifica che i parametri siano legali e corretti, esegue
la richiesta, e ritorna il controllo all’istruzione che segue la system call.
• Il caricamento del timer è una istruzione privilegiata
– Con l’istruzione di ritorno, il mode bit viene impostato a “user”
47
48
Componenti comuni dei sistemi
Struttura dei Sistemi Operativi
1. Gestione dei processi
• Componenti del sistema
2. Gestione della Memoria Principale
• Servizi del Sistema Operativo
3. Gestione della Memoria Secondaria
• Chiamate di sistema (system calls)
4. Gestione dell’I/O
• Programmi di Sistema
5. Gestione dei file
6. Sistemi di protezione
• Struttura del Sistema
7. Connessioni di rete (networking)
• Macchine Virtuali
8. Sistema di interpretazione dei comandi
49
50
Gestione dei processi
Gestione della Memoria Principale
• Un processo è un programma in esecuzione. Un processo necessita di certe
risorse, tra cui tempo di CPU, memoria, file, dispositivi di I/O, per assolvere
il suo compito.
• La memoria principale è un (grande) array di parole (byte, words. . . ), ognuna identificata da un preciso indirizzo. È un deposito di dati rapidamente
accessibili dalla CPU e dai dispositivi di I/O.
• Il sistema operativo è responsabile delle seguenti attività, relative alla gestione dei processi:
• La memoria principale è volatile. Perde il suo contenuto in caso di system
failure.
– creazione e cancellazione dei processi
• Il sistema operativo è responsabile delle seguenti attività relative alla gestione della memoria:
– sospensione e riesumazione dei processi
– Tener traccia di quali parti della memoria sono correntemente utilizzate,
e da chi.
– fornire meccanismi per
∗ sincronizzazione dei processi
∗ comunicazione tra processi
– Decidere quale processo caricare in memoria, quando dello spazio si rende
disponibile.
∗ evitare, prevenire e risolvere i deadlock
– Allocare e deallocare spazio in memoria, su richiesta.
51
52
Gestione della memoria secondaria
• Dal momento che la memoria principale è volatile e troppo piccola per
contenere tutti i dati e programmi permanentemente, il calcolatore deve
prevedere anche una memoria secondaria di supporto a quella principale.
• La maggior parte dei calcolatori moderni utilizza dischi come principale
supporto per la memoria secondaria, sia per i programmi che per i dati.
Gestione del sistema di I/O
• Il sistema di I/O consiste in
– un sistema di cache a buffer
• Il sistema operativo è responsabile delle seguenti attività relative alla gestione dei dischi:
– una interfaccia generale ai gestori dei dispositivi (device driver )
– i driver per ogni specifico dispositivo hardware (controller)
– Gestione dello spazio libero
– Allocazione dello spazio
– Schedulazione dei dischi
53
54
Gestione dei File
Sistemi di protezione
• Un file è una collezione di informazioni correlate, definite dal suo creatore.
Comunemente, i file rappresentano programmi (sia sorgenti che eseguibili
(oggetti)) e dati.
• Il sistema operativo è responsabile delle seguenti attività connesse alla
gestione dei file:
• Per Protezione si intende un meccanismo per controllare l’accesso da programmi, processi e utenti sia al sistema, sia alle risorse degli utenti.
• Il meccanismo di protezione deve:
– Creazione e cancellazione dei file
– distinguere tra uso autorizzato e non autorizzato.
– Creazione e cancellazione delle directory
– fornire un modo per specificare i controlli da imporre
– Supporto di primitive per la manipolazione di file e directory
– forzare gli utenti e i processi a sottostare ai controlli richiesti
– Allocazione dei file nella memoria secondaria
– Salvataggio dei dati su supporti non volatili
55
56
Networking (Sistemi Distribuiti)
Interprete dei comandi
• Un sistema distribuito è una collezione di processori che non condividono
memoria o clock. Ogni processore ha una memoria propria.
• I processori del sistema sono connessi attraverso una rete di comunicazione.
• Molti comandi sono dati al sistema operativo attraverso control statement
che servono per
– creare e gestire i processi
– gestione dell’I/O
• Un sistema distribuito fornisce agli utenti l’accesso a diverse risorse di
sistema.
– gestione della memoria secondaria
– gestione della memoria principale
• L’accesso ad una risorsa condivisa permette:
– accesso al file system
– Aumento delle prestazioni computazionali
– protezione
– Incremento della quantità di dati disponibili
– networking
– Aumento dell’affidabilità
57
58
Servizi dei Sistemi Operativi
Interprete dei comandi (Cont.)
• Esecuzione dei programmi:
esecuzione.
• Il programma che legge e interpreta i comandi di controllo ha diversi nomi:
caricamento dei programmi in memoria ed
• Operazioni di I/O: il sistema operativo deve fornire un modo per condurre
le operazioni di I/O, dato che gli utenti non possono eseguirle direttamente,
– interprete delle schede di controllo (sistemi batch)
• Manipolazione del file system: capacità di creare, cancellare, leggere, scrivere file e directory.
– interprete della linea di comando (DOS, Windows)
– shell (in UNIX)
– interfaccia grafica: Finder in MacOS, Explorer in Windows, gnome-session in
Unix. . .
La sua funzione è di ricevere un comando, eseguirlo, e ripetere.
• Comunicazioni: scambio di informazioni tra processi in esecuzione sullo
stesso computer o su sistemi diversi collegati da una rete. Implementati
attraverso memoria condivisa o passaggio di messaggi.
• Individuazione di errori: garantire una computazione corretta individuando
errori nell’hardware della CPU o della memoria, nei dispositivi di I/O, o nei
programmi degli utenti.
59
60
Chiamate di Sistema (System Calls)
Funzionalità addizionali dei sistemi operativi
Le funzionalità addizionali esistono per assicurare l’efficienza del sistema, piuttosto che per aiutare l’utente
• Le chiamate di sistema formano l’interfaccia tra un programma in esecuzione e il sistema operativo.
• Generalmente, sono disponibili come speciali istruzioni assembler
• Allocazione delle risorse: allocare risorse a più utenti o processi, allo stesso
momento
• Accounting: tener traccia di chi usa cosa, a scopi statistici o di rendicontazione
• Protezione: assicurare che tutti gli accessi alle risorse di sistema siano
controllate
• Alcuni linguaggi pensati per programmazione di sistema permettono di
eseguire direttamente system call (e.g., Bliss e PL 360 (anni 70), C).
• In questo il Run Time System (RTS) (insieme di funzioni predefinite associate ad una particolare piattaforma fornite con il compilatore) fornisce
l’interfaccia per la chiamata a basso livello
• Tre metodi generali per passare parametri tra il programma e il sistema
operativo:
61
62
Tipi di chiamate di sistema
Controllo dei processi: creazione/terminazione processi, esecuzione programmi, (de)allocazione memoria, attesa di eventi, impostazione degli attributi,. . .
– Passare i parametri nei registri.
– Memorizzare i parametri in una tabella in memoria, il cui indirizzo è
passato come parametro in un registro
– Il programma mette i parametri sullo stack, da cui il sistema operativo
li recupera.
Gestione dei file: creazione/cancellazione, apertura/chiusura, lettura/scrittura,
impostazione degli attributi,. . .
Gestione dei dispositivi: allocazione/rilascio dispositivi, lettura/scrittura, collegamento logico dei dispositivi (e.g. mounting). . .
Informazioni di sistema: leggere/scrivere data e ora del sistema, informazioni
sull’hardware/software installato,. . .
Comunicazioni: creare/cancellare connessioni, spedire/ricevere messaggi,. . .
63
Programmi di sistema
• I programmi di sistema forniscono un ambiente per lo sviluppo e l’esecuzione
dei programmi. Si dividono in
Struttura dei Sistemi Operativi -Approccio semplice
– Gestione dei file
application program
– Modifiche dei file
• MS-DOS – pensato per fornire le
massime funzionalità nel minore
spazio possibile.
– non è diviso in moduli (è
cresciuto oltre il previsto)
– nonostante ci sia un po’ di struttura, le sue interfacce e livelli
funzionali non sono ben separati.
– Informazioni sullo stato del sistema e dell’utente
– Supporto dei linguaggi di programmazione
– Caricamento ed esecuzione dei programmi
– Comunicazioni
– Programmi applicativi
resident system program
MS-DOS device drivers
ROM BIOS device drivers
• La maggior parte di ciò che un utente vede di un sistema operativo è definito
dai programmi di sistema, non dalle reali chiamate di sistema.
64
65
Struttura dei Sistemi Operativi – Unix originale
Struttura dei Sistemi Operativi - Approccio semplice
(the users)
shells and commands
compilers and interpreters
system libraries
• UNIX – limitato dalle funzionalità hardware, lo UNIX originale aveva una
debole strutturazione. Consiste almeno in due parti ben separate:
system-call interface to the kernel
– Programmi di sistema
signals terminal
handling
character I/O system
terminal drivers
– Il kernel
∗ consiste in tutto ciò che sta tra le system call e l’hardware
∗ implementa il file system, lo scheduling della CPU, gestione della memoria e altre funzioni del sistema operativo: molte funzionalità in un
solo livello.
file system
swapping block I/O
system
disk and tape drivers
CPU scheduling
page replacement
demand paging
virtual memory
kernel interface to the hardware
terminal controllers
terminals
device controllers
disks and tapes
memory controllers
physical memory
66
67
Struttura dei sistemi operativi – Approccio stratificato
• Il sistema operativo è diviso in un certo numero di strati (livelli); ogni strato
è costruito su quelli inferiori. Lo strato di base (livello 0) è l’hardware; il
più alto è l’interfaccia utente.
• Secondo la modularità, gli strati sono pensati in modo tale che ognuno
utilizza funzionalità (operazioni) e servizi solamente di strati inferiori.
new
operations
hidden
operations
existing
operations
.
..
• La prima stratificazione fu usata nel sistema operativo THE per un calcolatore olandese nel 1969 da Dijkstra e dai suoi studenti.
• THE consisteva dei seguenti sei strati:
layer M
.
..
Struttura dei sistemi operativi – Stratificazione di THE
layer
layer
layer
layer
layer
layer
layer M – 1
.
..
68
5:
4:
3:
2:
1:
0:
user programs
buffering for input and output devices
operator-console device driver
memory management
CPU scheduling
hardware
69
Macchine Virtuali
• Una macchina virtuale porta l’approccio stratificato all’estremo:
hardware e il sistema operativo come se fosse tutto hardware.
Stratificazione
tratta
• Una macchina virtuale fornisce una interfaccia identica all’hardware nudo e
crudo sottostante.
• Il sistema MULTICS era organizzato ad annelli concentrici (livelli)
• Per accedere ad un livello piú interno occorreva una chiamata di sistema
che attivava una TRAP
• L’organizzazione ad anelli si poteva estendere anche a sottosistemi utente
(studente lavora a livello n + 1, programma di correzioni lavora a livello n
per evitare interferenze)
• Il sistema operativo impiega le risorse del calcolatore fisico per creare le
macchine virtuali:
– Lo scheduling della CPU crea l’illusione che ogni processo abbia il suo
processore dedicato.
– La gestione della memoria crea l’illusione di una memoria virtuale per
ogni processo
– Lo spooling può implementare delle stampanti virtuali
– Spazio disco può essere impiegato per creare “dischi virtuali”
70
Vantaggi/Svantaggi delle Macchine Virtuali
Macchine Virtuali (Cont.)
• Il concetto di macchina virtuale fornisce una protezione completa delle risorse di sistema, dal momento che ogni macchina virtuale è isolata dalle
altre. Questo isolamento non permette però una condivisione diretta delle
risorse.
processes
processes
processes
processes
programming
interface
kernel
kernel
kernel
virtual machine
hardware
hardware
(a)
(b)
71
• Un sistema a macchine virtuali è un mezzo perfetto per l’emulazione di altri
sistemi operativi, o lo sviluppo di nuovi sistemi operativi: tutto si svolge
sulla macchina virtuale, invece che su quella fisica, quindi non c’è pericolo
di far danni.
kernel
• Implementare una macchina virtuale è complesso, in quanto si deve fornire
un perfetto duplicato della macchina sottostante. Può essere necessario
dover emulare ogni singola istruzione macchina.
• Approccio seguito in molti sistemi: Windows, Linux, MacOS, JVM,. . .
(a) Macchina non virtuale; (b) Macchine virtuali
72
73
Meccanismi e Politiche
Exokernel
• I kernel tradizionali (monolitici) sono poco flessibili
• Estensione dell’idea di macchina virtuale
• Distinguere tra meccanismi e politiche:
• Ogni macchina virtuale di livello utente vede solo un sottoinsieme delle
risorse dell’intera macchina
– i meccanismi determinano come fare qualcosa;
– le politiche determinano cosa deve essere fatto.
• Ogni macchina virtuale può eseguire il proprio sistema operativo
Ad esempio: assegnare l’esecuzione ad un processo è un meccanismo;
scegliere quale processo attivare è una politica.
• Le risorse vengono richieste all’exokernel, che tiene traccia di quali risorse
sono usate da chi
• Semplifica l’uso delle risorse allocate: l’exokernel deve solo tenere separati
i domini di allocazione delle risorse
74
Sistemi con Microkernel
• Microkernel: il kernel è ridotto all’osso, fornisce soltanto i meccanismi:
– Un meccanismo di comunicazione tra processi
– Una minima gestione della memoria e dei processi
– Gestione dell’hardware di basso livello (driver)
• Tutto il resto viene gestito da processi in spazio utente: ad esempio, tutte
le politiche di gestione del file system, dello scheduling, della memoria sono
implementate come processi.
• Meno efficiente del kernel monolitico
• Grande flessibilità; immediata scalabilità in ambiente di rete
• Sistemi operativi recenti sono basati, in diverse misure, su microkernel
(AIX4, BeOS, GNU HURD, MacOS X, QNX, Tru64, Windows NT . . . )
76
• Questa separazione è un principio molto importante: permette la massima
flessibilità, nel caso in cui le politiche debbano essere cambiate.
• Estremizzazione: il kernel fornisce solo i meccanismi, mentre le politiche
vengono implementate in user space.
75