Modello Onion Skin


Che cos'è un sistema operativo


Il sistema operativo è un programma, o meglio, un insieme di programmi, scritto allo scopo di rendere disponibili all’uso le risorse di calcolo e i dispositivi collegati al computer.

Il sistema operativo può essere di 2 tipi: aperto e proprietario.

Il primo è costruito in modo da poter operare con una molteplicità di dispositivi, anche con processori e schede madri diversi. (Window, Linux)

Il secondo, invece, è scritto per essere eseguito su un insieme ristretto e ben specifico di macchine. Il vantaggio dei sistemi proprietari è che sono ottimizzati per uno specifico hardware, quindi hanno in genere una maggiore efficienza. (Mac OS X )

Si parla di grado di portabilità del sistema operativo, intendendo la sua attitudine ad essere eseguito su macchine diverse: tale grado è tanto maggiore quanto è minore il costo delle modifiche da riportare. Nei sistemi aperti questo grado è chiaramente maggiore che in quelli proprietari.


Struttura di un Sistema Operativo


La struttura formale di un sistema operativo è gerarchica: questo significa che i programmi che lo compongono si collocano a livelli diversi, si servono di programmi che stanno a livelli sottostanti e servono i programmi dei livelli superiori.

All’interno di ogni livello i programmi scritti per risolvere un problema vengono raggruppati in moduli. La procedura standard per mezzo della quale il modulo mette a disposizione i servizi è detta primitiva.

Questi moduli forniscono risorse e servizi al livello superiore, semplicemente usando una chiamata di funzione, senza conoscere i dettagli del procedimento con cui tali servizi vengono gestiti e ottenuti.

In questo modo la complessità dei problemi viene nascosta, e si procede scomponendo le operazioni complessi in sotto-problemi.

Ogni livello deve essere in grado di nascondere ai livelli superiori lo strato sottostante, e gestire lui stesso le eventuali chiamate ai livelli inferiori provenienti da quelli superiori. In questo modo ogni livello fornisce una macchina virtuale dotata di certe funzionalità, e protegge l'accesso a certe altre.

Il primo vantaggio di questa struttura gerarchizzata, è quello di garantire un buon grado di portabilità del sistema: infatti l'unico livello a contatto con l'hardware è il primo (nucleo), quindi – in teoria – è sufficiente riscrivere o ricompilare il nucleo per far girare il sistema su un'altra macchina.

Un altro vantaggio è quello di scomporre lo studio delle problematiche da affrontare in maniera sistematica: per entrare nel dettaglio delle funzioni svolte dal sistema operativo, si utilizza questo modello che consente di mettere a fuoco i principali meccanismi di interazione tra le varie parti che lo costituiscono e di queste con l’esterno.

La schematizzazione usata è, come abbiamo detto, di tipo gerarchico e viene detta a macchine virtuali. Una macchina virtuale è un oggetto costituito da una macchina in grado di eseguire un certo insieme di operazioni, e da un modulo che fornisce un’interpretazione logica di tali operazioni: l’insieme costituisce una nuova macchina in grado di eseguire operazioni logiche.

Il modello onion skin (buccia di cipolla) rappresenta il sistema operativo come una successione di strati costruiti sopra un nocciolo costituito dalla macchina hardware, ciascun dei quali rappresenta un livello di macchina virtuale.


Gli strati della cipolla del software


modello onion skin


Nucleo


Il nucleo è la parte del sistema operativo più vicino all’hardware, ed è strettamente dipendente dall’hardware.

Il nucleo teoricamente dovrebbe comprendere solo le procedure necessarie all'esecuzione dei programmi utente. L'esecuzione di un programma genera un processo, che a sua volta può scomporsi in diversi thread: il nucleo si occupa della gestione dei thread e dei criteri con cui essi possono sfruttare il processore. (microkernel)

Spesso pero' nel nucleo viene incluso anche lo strato successivo, perchè anche questo è residente in memoria per tutta la durata dell'attività della macchina. (macrokernel o kernel monolitico)

Nonostante la teoria indichi tale prassi come svantaggiosa, alcuni sistemi (Linux) includono nel nucleo anche i driver per la gestione delle periferiche.


Le funzioni fondamentali del nucleo sono:


La questione della sincronizzazione, in un ambiente multiprogrammato, è fondamentale, e avviene tramite il meccanismo delle interruzioni. Una interruzione è un evento che per essere gestito prevede la sospensione del programma attivo a favore di una chiamata al Sistema Operativo


Si possono distinguere 3 tipi fondamentali di interruzione:

Gestore memoria


La gestione della memoria, secondo livello del modello macchine virtuali, simula l’esistenza di una pluralità di unità di memoria centrale, ciascuna associata ad una dei processi virtuali generati dal nucleo, mascherando ai livelli successivi la limitazione fisica della memoria centrale reale.


Le problematiche gestite da questo livello sono:


Gestore delle periferiche


Il terzo livello del modello macchine virtuali, consente di definire i dispositivi periferici come dispositivi virtuali. In questo modo l’utente può utilizzare le periferiche senza preoccuparsi delle caratteristiche fisiche e delle operazioni fisiche che vengono eseguite per svolgere la funzione logica richiesta. Questo compito è demandato ai driver delle varie periferiche, che ricevono i comandi di input o di output e provvedono a tradurli nelle necessarie istruzioni a basso livello per il completamento dell'operazione.


I principali compiti di questo strato sono:




File system


Tutto ciò che viene registrato su memoria di massa prende il nome di file. Il file system consente di riferirsi alle informazioni registrate in termini di identificatori piuttosto che di indirizzi fisici, adoperando allo scopo le directories (cartello o folder) che contengo per ciascun file alcuni dati significativi.

La directory di livello più elevato è detta root (radice). La struttura ad albero risulta composta da nodi non terminali (le directories) e nodi terminali (foglie) che sono i file veri e propri.

La prima operazione richiesta dal file system è la formattazione del disco, che consiste nella sua suddivisione in blocchi e nella creazione delle mappe necessarie a gestire gli spazi liberi e quelli occupati



Approfondimenti sul file system

Interprete dei comandi


E' il primo strato esterno accessibile all'utente finale, per questo detto anche shell (guscio).

Si tratta di un programma che riceve in ingresso le richieste di esecuzione di operazioni, espresse usando il linguaggio comandi. Una componente importante degli interpreti è l’analizzatore sintattico, un programma che verifica la correttezza formale delle richieste dell’utente, e provvede a richiamare la funzione opportuna.