Parte 2: Chiamate di sistema - WEB Lab
←
→
Trascrizione del contenuto della pagina
Se il tuo browser non visualizza correttamente la pagina, ti preghiamo di leggere il contenuto della pagina quaggiù
Lezione 14
Struttura di un SO
Sistemi Operativi (9 CFU), CdL Informatica, A. A. 2020/2021
Dipartimento di Scienze Fisiche, Informatiche e Matematiche
Università di Modena e Reggio Emilia
http://weblab.ing.unimo.it/people/andreolini/didattica/sistemi-operativi
2Quote of the day
(Meditate, gente, meditate …)
“There are two ways of constructing a
software design. One way is to make
it so simple that there are no obvious
deficiencies, and the other way is to
make it so complicated that there are
no obvious deficiencies. The first
method is far more difficult.”
Sir Charles Anthony Richard Hoare (1943-)
Inventore dell'algoritmo di ordinamento QuickSort
3
Vincitore del Turing Award (1980)Lo scenario
(Lo studente vuole approfondire l’API messa a disposizione in GNU/Linux)
Lo studente vuole capire come è
organizzato il SO GNU/Linux (e
non solo).
4Interrogativi
(Come è organizzato un SO?)
Utente 1 Utente 2 Utente N
Come è strutturato un SO in Host
generale? Applicazioni
Come è strutturato GNU/Linux in ?
particolare?
Sistema
Operativo ?
Hardware
CPU Disco
Bus
Porta
Memoria USB 5Scenario e interrogativi
(Come sono organizzate le componenti di un SO?)
Scenario: lo studente si è sciroppato un lungo tutorial
sui comandi UNIX e si rende conto dell’enorme volume di
funzionalità offerte da un SO all’utente (utility, librerie,
meccanismi).
Interrogativi:
Come sono organizzate le funzionalità offerte da un SO
all’utente?
7Un piccolo esperimento
(Conteggio delle righe di codice del kernel Linux)
Il comando seguente conta le righe di codice del kernel
Linux, assumendo come sorgenti i file C (.c, .h) e
assembly (.S):
find /path/to/linux -name '*.[chS]' -exec wc -l '{}'
\; | cut -f1 -d" " | awk '{s+=$1} END {print s}'
Nella versione corrente1 IL numero di righe è 27232535
(~ 27.2M). Il numero può variare di versione in versione.
1 commit 0477e92881850d44910a7e94fc2c46f96faa131f, v5.10-rc7, 12/2020
8Interrogativi
(Inquietanti)
È praticabile gestire in un unico file 27.2M righe di
codice?
È praticabile far condividire ad un team di
programmatori in lettura e scrittura un un unico file di
27.2M righe di codice?
È praticabile studiare l’architettura di un software
contenuto in un file con 27.2M righe di codice?
È praticabile effettuare il debugging di un eseguibile
concepito a partire da un singolo file con 27.2M righe di
codice?
9Se non rispondete sempre “NO!”…
(… la stima del docente nei vostri confronti è rappresentata qui sotto)
10Una amara necessità
(Suddividere un software complesso in più moduli)
Al crescere della complessità del software, è necessario
abbandonare l’approcio naive “singolo file” e concepire
un’applicazione come un insieme di componenti
cooperanti.
Nei corsi precedenti avete recepito le motivazioni legate
a tale modus operandi.
Modularità.
Testing incrementale.
Dominazione della complessità.
Riuso dei componenti.
11Definizioni preliminari
(Per introdurre il concetto di stratificazione software)
In questo corso si introduce una ulteriore tecnica di
modularizzazione del software, la stratificazione.
Un software complesso come un SO moderno è
concepito per strati.
Uno strato è un insieme di funzioni e strutture dati che
implementa un sistema virtuale (da non confondersi
con le macchine virtuali fornite dagli hypervisor).
Un sistema virtuale implementa un mondo di entità
fittizie ad uno specifico livello di astrazione. Tali entità
interagiscono tra loro tramite le funzioni messe a disposi-
zione dal sistema vituale corrispondente. 12Stratificazione software
(Il software è visto come una pila di strati che unisce mondi diversi)
La stratificazione è l’atto di concepire un software come
una pila di strati (software stack).
Lo strato più alto offre le astrazioni più semplici da
concepire per l’utente finale (spesso, un umano).
Lo strato più basso offre le astrazioni più simili a quelle
della realtà (spesso, l’hardware).
Lo strato sottostante fornisce le funzionalità per imple-
mentare lo strato successivo.
13Un esempio di stack software
(SO UNIX in generale)
UTENTE
Strato 6: applicazioni utente
Strato 5: sistema di base
Strato 4: librerie di sistema
Strato 3: chiamate di sistema
Strato 2: scheduling, memoria, file system
Strato 1: driver dei dispositivi
Strato 0: funzionalità di accesso all'hw.
14
HARDWAREUso degli strati - richiesta
(Flusso verso il basso)
Quando un utente richiede Utente
un servizio al SO, effettua una Richiesta
richiesta allo strato più in applicazione grafica
alto. Strato 6
La richiesta viene propagata Richiesta
applicazione
allo strato più basso, e così Strato 5
via fino a raggiungere lo Richiesta
strato “hardware”. funzione
…
Richiesta
hardware
HARDWARE 15Uso degli strati - risposta
(Flusso verso l’alto)
Lo strato “hardware” invia la Utente
risposta allo strato 0. Richiesta
Lo strato 0 elabora la risposta …
applicazione grafica
dello strato hardware e
Risposta
propaga una sua risposta allo device driver
strato 1, e così via fino allo Strato 1
strato 6, che ritorna la Risposta
astrazione periferica
risposta finale all’utente.
Strato 0
Risposta
hardware
HARDWARE 16How does stratification feel like?
(https://www.youtube.com/watch?v=AvBUijBGcdk)
17Il generico strato funzionale
(Un po' di sana modellistica ogni tanto non guasta)
Le funzionalità dello strato m fanno
uso delle funzionalità definite nello
strato m-1. Qui, fjm è una funzione
pubblica, usabile dallo strato m+1.
m funzione j-ma Strato m
fj
dello strato m
m−1 m−1
Strato m-1
f k f l
18Il generico strato funzionale
(Un po' di sana modellistica ogni tanto non guasta)
Lo strato m definisce anche delle
funzioni private, non visibili agli
strati superiori. Tali funzioni sono di
supporto e possono usare le funzioni
pubbliche dello strato m-1.
m funzione m funzione Strato m
fj pubblica f l privata
m−1 m−1 m−1 m−1
Strato m-1
f k f l f p f q
19Il generico strato funzionale
(Un po' di sana modellistica ogni tanto non guasta)
Le funzioni dello strato m+1
utilizzano le funzioni definite nello Strato m+1
strato m. Non sono visibili le funzioni m+1
di supporto. fc
m funzione m
X
funzione Strato m
f j pubblica f l privata
m−1 m−1 m−1 m−1
Strato m-1
f k f l f p f q
20Vantaggi: modularità
(Divide et impera)
Nello sviluppo.
Il primo strato può essere progettato senza alcuna
considerazione per il resto del sistema.
Il secondo strato si appoggia sulle funzioni del primo.
Nel debugging.
In un sistema ad m strati, se i primi m-1 sono corretti
ciò implica che l'eventuale errore stia nell'm-mo.
→ Approccio incrementale, per comparti stagni.
21Vantaggi: semplificazione
(Si modella una realtà complessa per passi intermedi)
Un altro vantaggio indubbio della stratificazione è la
semplificazione delle attività di progetto.
Un oggetto complesso come un insieme di periferiche
cooperanti non può essere modellato in un colpo solo.
La stratificazione consente di avvicinarsi “per passi” alla
realtà, partendo da astrazioni semplici da concepire e
introducendo via via dettagli nei mondi sottostanti.
22Vantaggi: intercambabilità
(Si modella una realtà complessa per passi intermedi)
Un altro vantaggio indubbio della stratificazione è la
intercambiabilità degli strati.
Uno strato può essere esteso, modificato, ridotto a
piacere per far fronte a nuovi requisiti di progetto.
L’unico vincolo richiesto è la preservazione funzioni
pubbliche presenti.
Non è carino cambiare nomi e/o prototipi di funzioni e far
riscrivere strati interi ai colleghi.
23Svantaggi: come definire gli strati?
(Come divido?)
Dove finisce uno strato ed inizia il successivo?
Esempio: il sistema di gestione della memoria ha
bisogno del driver del disco per poter implementare il
meccanismo di swapping.
→ Il driver del disco deve essere collocato “al di sotto” del
gestore della memoria.
Un SO moderno è soggetto a moltissimi vincoli di questo
genere.
24Svantaggi: riduzione dell'efficienza
(Quanto costa dividere et imperare?)
L'uso di più strati introduce ritardi nella fruizione del
servizio per via delle cascate più lunghe di funzioni.
Con l'aumentare della potenza di calcolo, tali ritardi
possono oramai essere considerati trascurabili.
25MACRO, MICRO, HYBRID KERNEL
26Scenario e interrogativi
(Come sono stratificati il nucleo, le librerie, le applicazioni?)
Scenario: lo studente ha ben chiaro il concetto di strati-
ficazione e comincia a porsi alcune domande.
Interrogativi:
Come è stratificato il nucleo di un SO?
Come sono stratificatie le librerie di un SO?
Come sono stratificate le applicazioni di un SO?
Esistono strategie diverse di stratificazione? Che vantaggi
e svantaggi hanno?
27SO basato su Macro kernel
(Detto anche “kernel monolitico”)
Il nucleo è organizzato in un singolo file binario, caricato in
memoria all’avvio della macchina.
Tutte le funzionalità essenziali del SO (driver dei dispositivi,
gestione processi, dischi, memoria, file, … ) eseguono con la
CPU a privilegio massimo (kernel mode: può eseguire ogni
istruzione macchina).
Le applicazioni utente e le funzionalità non essenziali del SO
(funzioni di libreria, comandi di base) eseguono con la CPU a
privilegio minimo (user mode: non può eseguire istruzioni di
I/O e di modifica dello stato interno).
Esempi:
Kernel Unix-like (Linux, BSD, AIX, System V). 28Vantaggi e svantaggi
(Esecuzione più veloce, sistema più fragile)
Vantaggi.
L'esecuzione dei servizi è la più veloce possibile (tutte le
funzionalità del nucleo sono contenute in un file; non c’è
bisogno di individuarle altrove).
Svantaggi.
Marcata fragilità (un crash del nucleo pianta la CPU).
Dimensione enorme del file binario contenente il nucleo
(la sezione di testo rischia di non entrare nelle CPU cache,
con una sensibile riduzione delle prestazioni).
29Esempio di Macro kernel: UNIX
(By Ken Thompson & Dennis Ritchie)
User Utenti
mode
Interprete comandi Comandi base Librerie di sistema
Interfaccia system call ← → kernel
Segnali, gestione File system, swapping, Scheduling CPU,
terminali, I/O caratteri, I/O blocchi, driver demand paging,
Kernel driver terminali nastri e dischi memoria virtuale
mode
Interfaccia kernel ← → architettura fisica
Controller terminali Controller nastri/dischi Controller memoria 30
Terminali Nastri/dischi MemoriaLa dimensione della code base di UNIX
(Because size matters)
Con l'aumentare dei servizi, il nucleo dei sistemi UNIX è
cresciuto notevolmente.
Problemi funzionali (manutenzione del codice).
Problemi di sicurezza (maggiore probabilità di crash).
Problemi prestazionali (nucleo non cache friendly).
Strategie risolutive:
uso di moduli caricabili.
adozione dell'architettura basata su Micro kernel.
31Moduli caricabili
(“Loadable kernel module”: una idea grandiosa)
Modulo caricabile: file oggetto
contenente funzionalità del nucleo non indispensabili per
l’inizializzazione delle periferiche;
SÌ a file system, driver di dispositivi, algoritmi di
schedulazione delle risorse (non tutti), …;
NO a gestore dei processi, gestore della memoria, …;
(dis)attivabile a tempo di esecuzione (a mano oppure
automaticamente).
Esempi:
Linux, FreeBSD, Mac OS X.
32Vantaggi e svantaggi
(Prestazioni e robustezza migliori, rallentamento una tantum)
Vantaggi.
La dimensione di base del nucleo diminuisce
sensibilmente (a pieno vantaggio delle CPU cache).
Un crash di un modulo non pregiudica il
funzionamento del sistema.
Svantaggi.
Lieve penalità di prestazioni una tantum dovuta alla
(dis)attivazione.
33SO basato su Micro kernel
(L'esatto contrario di un kernel monolitico)
Il nucleo esegue solo i servizi necessari per l’avvio della
macchina.
Le restanti funzionalità sono fruite tramite server
applicativi. I server parlano fra di loro tramite un sistema
a messaggi.
Nucleo: sistema di messaggistica per i server,
scheduler CPU, allocatore memoria.
Applicazioni: driver dei dispositivi, gestore file
system.
Esempi: 34
Tru64 UNIX (Digital), Mach, Minix.Vantaggi e svantaggi
(Elevata tolleranza ai guasti)
Vantaggi.
Facilità di estensione (nuovo servizio → nuovo server);
il kernel non è toccato.
Kernel ridotto all'osso, CPU cache friendly.
SO robusto rispetto ai crash (muore il server, si ripara,
se ne lancia una nuova istanza; nel frattempo, il SO
continua ad eseguire).
35Vantaggi e svantaggi
(Lieve perdita di prestazioni rispetto ai Macro kernel)
Svantaggi.
Un Micro kernel è meno performante di un kernel
monolitico. Il macro kernel usa funzioni per implementare
i servizi; il micro kernel usa messaggi (che devono essere
spacchettati ed interpretati, se non addirittura consegnati
ad altri server prima di poter essere elaborati).
36Esempio di Micro kernel: Minix
(By Andrew Tanenbaum)
User bash vim make ... lynx Applicazioni
mode
Chiamate di sistema, messaggi
File Process Network Reinc. Data Servizi
server manager server server store
Chiamate di kernel, messaggi
SATA Audio ... SCSI Printer Driver dei
driver driver driver driver dispositivi
Chiamate di kernel, messaggi
Kernel IRQ, MMU, IPC Clock System
37
mode driver taskSO basato su Hybrid kernel
(Una via di mezzo fra Micro e Macro kernel)
Variante di Micro kernel con una unica differenza:
i driver dei dispositivi eseguono in kernel mode.
Tentativo di combinare il meglio dei Macro e dei Micro
kernel. Funzionalità, prestazioni e sicurezza si collocano
come intermedie fra Macro e Micro kernel.
Esempi:
Windows, Plan 9, OS X.
38Esempio di Hybrid kernel: Windows
(By Willam Henry Gates III) Win32 POSIX OS/2
User appl. appl. appl.
mode Workstation Server Server
service service service Win32 POSIX OS/2
Executive Services
I/O IPC VM Process
manager manager manager manager GDI
Object manager
Kernel mode driver Micro kernel
Kernel Hardware Abstraction Layer 39
modeMacro vs. Micro vs. Hybrid
(Un'immagine vale più di 1000 parole)
Macro Kernel Micro Kernel Hybrid kernel
Applicazione Applicazione Applicazione User
Unix File
Virtual File System Appl. Unix Device File server server
IPC IPC server driver server
File System Appl. Device Kernel
Scheduler IPC driver
Memoria virtuale
IPC di base IPC di base
Device driver Memoria virtuale Memoria virtuale
Scheduler CPU Scheduler CPU
Hardware Hardware Hardware 40Progetto e studio di sistemi stratificati
(Approcci Top Down e Bottom Up)
Approccio “Top Down”. Si progettano inizialmente gli
strati più alti e poi quelli più bassi.
Vantaggi: progetto e studio delle applicazioni sono
inizialmente molto facili e liberi da vincoli.
Svantaggi: Scendendo agli strati inferiori ci si scontra
rapidamente con i vincoli imposti di funzionamento
dall'hardware. Se non si conosce l'hardware sottostante:
la comprensione degli strati intermedi e bassi
è molto difficile.
il progetto di uno strato intermedio rischia di essere
fondato su assunzioni sbagliate. 41Progetto e studio di sistemi stratificati
(Approcci Top Down e Bottom Up)
Approccio “Bottom Up”. Si progettano inizialmente gli
strati più bassi e poi quelli più alti.
Vantaggi: il progetto può essere condotto e validato in
maniera modulare. Lo studio permette di comprendere a
fondo l'hardware e le successive scelte progettuali degli strati
superiori.
Svantaggi: la fase iniziale del progetto o studio è la più
ostica, poiché coinvolge la programmazione dell'hardware.
42“Yes, there are two paths you can go by”
(“but in the long run, there's still time to change the road you're on”)
43STRUTTURAZIONE DI GNU/LINUX
44Scenario e interrogativi
(Come sono organizzate le componenti di un SO?)
Scenario: lo studente ha subito le varie stratificazioni
possibili per un nucleo e, spazientito, si pone diversi
interrogativi.
Interrogativi:
Come sono organizzate le funzionalità del kernel Linux?
Esiste una strutturazione simile per le applicazioni utente
e per le librerie?
45Stratificazione del kernel Linux
(https://makelinux.github.io/kernel/map/)
La pagina Web seguente mostra la vera stratificazione
del kernel Linux:
https://makelinux.github.io/kernel/map/
Sono presenti ben sette (!) strati.
User space interfaces: interfacce con applicazioni utente
e librerie.
Virtual: sottosistemi “virtuali” che fanno sembrare un
utente il padrone assoluto della macchina.
Bridges: funzionalità richieste agli strati più alti e a quelli
più bassi del nucleo (collante).
Logical: astrazioni logiche dei sottosistemi del nucleo. 46Stratificazione del kernel Linux
(https://makelinux.github.io/kernel/map/)
La pagina Web seguente mostra la vera stratificazione
del kernel Linux:
https://makelinux.github.io/kernel/map/
Sono presenti ben sette (!) strati.
Device control: astrazioni per la definizione dei driver di
dispositivo.
Hardware interfaces: implementazione dei driver di
dispositivo.
Electronics: astrazioni per l’interazione con le
periferiche.
47Stratificazione di GNU/Linux e FOSS
(https://www.makelinux.net/system/)
La pagina Web seguente mostra la vera stratificazione di
GNU/Linux e del Free and Open Source Software (FOSS):
https://www.makelinux.net/system/
Sono presenti ben sei (!) strati.
Presentation: applicazioni di alto livello, spesso costruite
come front-end grafici e testuali di altre applicazioni.
Application: applicazioni utente.
Engines: servizi, server, interpreti, infrastruttura.
Control: amministrazione e accesso alle risorse.
Foundation: librerie di base, kernel.
Hardware: periferiche hardware. 48Puoi anche leggere