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 2
Quote 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). 4
Interrogativi (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 5
Scenario 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? 7
Un 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 8
Interrogativi (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? 9
Se non rispondete sempre “NO!”… (… la stima del docente nei vostri confronti è rappresentata qui sotto) 10
Una 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. 11
Definizioni 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. 12
Stratificazione 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. 13
Un 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 HARDWARE
Uso 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 15
Uso 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 16
How does stratification feel like? (https://www.youtube.com/watch?v=AvBUijBGcdk) 17
Il 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 18
Il 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 19
Il 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 20
Vantaggi: 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. 21
Vantaggi: 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. 22
Vantaggi: 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. 23
Svantaggi: 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. 24
Svantaggi: 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. 25
MACRO, MICRO, HYBRID KERNEL 26
Scenario 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? 27
SO 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). 28
Vantaggi 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). 29
Esempio 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 Memoria
La 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. 31
Moduli 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. 32
Vantaggi 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. 33
SO 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). 35
Vantaggi 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). 36
Esempio 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 task
SO 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. 38
Esempio 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 mode
Macro 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 40
Progetto 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. 41
Progetto 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”) 43
STRUTTURAZIONE DI GNU/LINUX 44
Scenario 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? 45
Stratificazione 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. 46
Stratificazione 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. 47
Stratificazione 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. 48
Puoi anche leggere