Parte 2: Chiamate di sistema - WEB Lab

Pagina creata da Riccardo Ferrero
 
CONTINUA A LEGGERE
Parte 2: Chiamate di sistema - WEB Lab
Parte 2: Chiamate di sistema
 (https://www.youtube.com/watch?v=avjdKTqiVvQ)

                                                 1
Parte 2: Chiamate di sistema - WEB Lab
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
Parte 2: Chiamate di sistema - WEB Lab
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)
Parte 2: Chiamate di sistema - WEB Lab
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
Parte 2: Chiamate di sistema - WEB Lab
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
Parte 2: Chiamate di sistema - WEB Lab
STRATIFICAZIONE DEL SOFTWARE

                               6
Parte 2: Chiamate di sistema - WEB Lab
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