Sei sulla pagina 1di 22

Organizzazione dei sistemi operativi

CAPITOLO 1

INTRODUZIONE
Un sistema operativo un insieme di programmi che operano sullhardware di un calcolatore con lobbiettivo di rendere pi semplice ed efficace lo sviluppo di programmi e di realizzare politiche di gestione delle risorse hardware. Il sistema operativo agisce da intermediario fra lutente e la struttura fisica del calcolatore. I compiti specifici del sistema operativo dipendono dallobbiettivo del sistema di calcolo. Le funzioni svolte dal sistema operativo sono molteplici e strettamente legate allarchitettura del calcolatore sul quale eseguito.

1.1

Cos un sistema operativo

Il sistema operativo un programma o un insieme di programmi che rendono agevole lutilizzo del calcolatore. Un sistema di calcolo si pu suddividere in quattro componenti: i dispositivi fisici, il sistema operativo, i programmi dapplicazione e gli utenti (Figura 1.1).

utente 1

utente 2

..
..

utente n

compilatore

assemblatore applicazioni

editor di testi

sistema operativo dispositivi fisici

Figura 1.1 Componenti di un sistema di calcolo. La parte hardware del calcolatore composta da tre moduli fondamentali (Figura 1.2), i dispositivi fisici (CPU, memoria, dispositivi di I/O), che comunicano tramite linee di collegamento (bus dati).

Organizzazione dei sistemi operativi

I programmi di applicazione vengono utilizzati per risolvere i problemi computazionali degli utenti (intesi non solo come persone ma anche i calcolatori, le macchine, i programmi ecc. possono essere utenti). Ogni utente ha esigenze diverse quindi ognuno far utilizzo di programmi diversi.
CPU MEMORIA I/O

BUS DATI

Figura 1.2 I dispositivi fisici di un calcolatore. I programmi utilizzano le risorse hardware per svolgere le funzioni che sono state codificate in esse per raggiungere lobbiettivo dellutente. Nasce il problema dellutilizzo delle risorse quando si eseguono sulla stessa macchina pi programmi. Per esempio se esiste una sola CPU non possono essere eseguiti due programmi contemporaneamente. Stesso discorso vale per lo spazio di memoria limitato che quindi deve essere allocato ai programmi uno alla volta. Anche i dispositivi di I/O e tutte le altre risorse devono essere utilizzate da un programma alla volta. Per evitare problemi che nascono con lo sviluppo della multiprogrammazione su un calcolatore, occorre implementare un insieme di funzioni che controllano il corretto svolgimento dei programmi. Utilizziamo quindi un SISTEMA OPERATIVO, un programma che rende conveniente luso delle risorse hardware della macchina, allocando in modo corretto le stesse risorse ai diversi programmi applicativi che sono in esecuzione. Il sistema operativo non produce risultati visibili al programmatore, ma si limita a svolgere funzioni di supporto. Esso rende efficiente lutilizzo delle risorse: alloca e coordina le risorse agendo come un gestore di tali risorse, in modo da svolgere i compiti in modo pi efficiente possibile. Quindi i due scopi principali del sistema operativo sono: CONVENIENZA EFFICIENZA. Questi due requisiti possono essere in alcuni casi contrastanti. Ci sono sistemi progettati per svolgere operazioni diverse: alcuni solo per soddisfare il requisito della convenienza (sistemi operativi progettati per i normali personal computer utilizzati da un unico utente magari non esperto, richiedono solo la facilit duso, realizzata mediante uninterfaccia grafica), altri per lefficienza (per esempio i mainframe per elaborare dati utilizzati da utenti esperti, sono progettati in modo da massimizzare lutilizzo delle risorse).

Organizzazione dei sistemi operativi

Il sistema operativo deve quindi realizzare politiche di gestione hardware al fine di:

delle risorse

1. regolamentare limpiego delle risorse evitando conflitti di accesso, 2. scegliere i criteri con cui assegnare una risorsa a fronte di pi richieste contemporanee, dovuto alla disponibilit limitata di risorse, 3. nascondere allutente i dettagli hardware legati al particolare dispositivo. Alla domanda Cosa fa parte del sistema operativo? esistono due visioni divergenti. Si possono considerare parte del sistema operativo tutte le funzioni necessarie per allocare le risorse hardware ai vari programmi applicativi. Lalternativa quella secondo cui il sistema operativo composto solo dallindispensabile, ovvero la parte di programma che sempre in esecuzione (KERNEL = nucleo); tutto il resto compone il programma applicativo chiamato solo quando necessario.

1.2 1.2.1

Levoluzione dei sistemi operativi


Sistemi batch

Nei sistemi batch i programmi (job) vengono scritti su schede perforate. Ogni scheda rappresenta una istruzione o meglio direttive su come eseguire il programma. Tutte le schede vengono portate al sistema di elaborazione dove i programmi vengono suddivisi a LOTTI (BATCH) aventi caratteristiche simili, quindi letti dal calcolatore tramite dispositivi per la lettura delle schede ed eseguiti. Se il programma non funziona, in caso di terminazione anomala del programma stesso, vengono stampati oltre ai risultati anche una mappa dei registri di memoria. I sistemi di tipo batch prevedono lesecuzione di un programma alla volta sempre residente nella memoria (Figura 1.3): il calcolatore legge un programma, lo carica in memoria e lo esegue fino alla fine o fino allerrore, poi stampa il risultato. Quindi passa ad un nuovo programma: lettura, memorizzazione, esecuzione stampa. E cos via per tutti i programmi.

sistema operativo

area riservata ai programmi utenti

Figura 1.3 Configurazione della memoria per un sistema batch. Il sistema operativo utilizzato molto semplice: non c interazione tra programma e utente, non si devono prendere decisioni su come allocare le risorse, n scegliere il successivo programma da eseguire (prelevato dalla scheda perforata).

Organizzazione dei sistemi operativi

Questi sistemi sono poco efficienti. La CPU spesso inattiva poich i dispositivi meccanici di I/O sono pi lenti (Figura 1.4). In oltre le risorse in ingresso (lettore delle schede perforate) e in uscita (stampante) non sono sfruttate al massimo: in fase di lettura la CPU e le risorse di uscita non sono utilizzate; nella fase di stampa del risultato oltre alla CPU non sono utilizzate le risorse di ingresso; mentre in fase di elaborazione si utilizza solo la CPU.

uso della CPU

attesa per I/O

tempo

Figura 1.4 Utilizzo della CPU nei sistemi batch. Conseguentemente le risorse in ingresso possono essere utilizzate solo nella fase di lettura iniziale perch lutente non pu interagire con il programma durante la sua elaborazione, quindi tutti i dati devono essere inseriti allinizio. Un discorso analogo pu essere fatto per le risorse in uscita. Linefficienza di questo tipo di sistema operativo dovuta alla mancanza dellutilizzo parallelo delle risorse che viene realizzata nei sistemi sviluppati successivamente.

1.2.2

Sistemi multiprogrammati

Il problema dellutilizzo inefficiente delle risorse viene pienamente superato con lintroduzione dei sistemi multiprogrammati. La multiprogrammazione consente di aumentare lutilizzo della CPU organizzando i lavori in modo tale da mantenerla in continua attivit. Con la multiprogrammazione si introdotto lo schema di gestione della memoria per organizzare i programmi che devono andare in esecuzione. In questi sistemi sono presenti contemporaneamente in memoria centrale diversi programmi (Figura 1.5), uno dei quali viene selezionato e mandato in esecuzione. Il processo creato mantiene il controllo della CPU finch non si arresta perch termina o perch in attesa di qualche evento come il completamento di una operazione di I/O. A questo punto la CPU invece di rimanere inattiva viene assegnata ad un altro processo presente in memoria. Se il primo processo non era terminato, quando torna pronto riprende il controllo della CPU continuando la sua esecuzione.

Organizzazione dei sistemi operativi

10

sistema operativo job 1 job 2 job 3

Figura 1.5 Configurazione della memoria per un sistema multiprogrammato. Una caratteristica importante dei sistemi multiprogrammati riguarda la tecnica dello spooling (symultaneus peripheral operation on line): quando il calcolatore impegnato a eseguire un programma il sistema utilizza il lettore di scheda per leggere quello successivo e lo memorizza in un disco (il lettore e tutte le altre risorse input sono pi lente della CPU). Quando terminata lesecuzione del primo programma viene caricato in memoria il processo che era salvato sul disco (processo pi veloce rispetto alla lettura diretta dalla scheda). Discorso analogo in uscita (la stampante pi lenta della CPU): mentre un programma in stampa, quello successivo viene eseguito. Quindi il metodo dello spooling permette di eseguire pi programmi contemporaneamente secondo lo schema dello pipe line:
processo P 1 lettura P 1 esecuzione P 1 stampa P 1 processo P 2 lettura P 2 esecuzione P 2 stampa P 2

La multiprogrammazione ottimizza lutilizzo delle risorse, in particolare della CPU che viene commutata tra i processi in esecuzione per ridurre i tempi morti (Figura 1.6).
uso della CPU attesa per I/O programma 2 programma 1 tempo

Figura 1.6 Utilizzo della CPU nei sistemi multiprogrammati.

Organizzazione dei sistemi operativi

11

Una variante dei sistemi multiprogrammati rappresentata dai sistemi interattivi in cui la CPU viene commutata pi velocemente per permettere allutente di interagire con il programma. Lallocazione della memoria per ogni processo (in presenza di una sola CPU) viene gestita tramite un algoritmo di schedulazione dei processi. La scelta del programma da mandare in esecuzione viene fatta in modo da ottenere il pi alto grado di multiprogrammazione. Per fare questo (e per dare allutente limpressione che lesecuzione dei programmi sia parallela) si introduce il meccanismo del timesharing (condivisione di tempo) secondo il quale si commuta la CPU tra i diversi programmi per un quanto di tempo T. Ogni programma viene quindi eseguito per un tempo minore o uguale a T. Se non ci sono errori che sospendono lesecuzione prima che sia trascorso il tempo T, il programma si blocca e il controllo della CPU passa ad un altro programma scelto, mentre laltro viene messo in una apposita lista. Il tempo impiegato dal sistema operativo per trasferire il controllo da un programma ad un altro definito overhead e deve essere limitato il pi possibile (Figura 1.7). La scelta dellintervallo di tempo T dipende dal numero di programmi che devono essere eseguiti: maggiore il numero di programmi, minore T. Se T piccolo lutente non si accorge del cambiamento di esecuzione.
uso della CPU attesa per I/O overhead programma 2 programma 1 tempo

Figura 1.7 Overhead nei sistemi multiprogrammati. Un programma pu essere eseguito anche per un intervallo di tempo minore di T quando lutente interagisce con lo stesso tramite le risorse di I/O o perch ci sono errori. In questi casi la CPU passa ad eseguire un altro programma. I vantaggi di questi sistemi sono evidenti: - capacit del sistema di mantenere contemporaneamente pi programmi in esecuzione (multiprogrammazione); - possibilit di interazione tra programma e utente durante lelaborazione (timesharing); - utilizzo contemporaneo delle risorse (spooling).

Organizzazione dei sistemi operativi

12

Il sistema operativo in questione risulta pi complesso, composto da pi funzioni: utile un algoritmo per la scelta del programma da mandare in esecuzione; una funzione che effettua il cambio di esecuzione; un meccanismo di allocazione della memoria; funzioni che gestiscono i conflitti sulluso delle risorse tramite meccanismi di controllo sugli accessi alle risorse condivise. Inoltre nasce la necessit di introdurre tecniche per la protezione dei dati: tale caratteristica non era richiesta nei sistemi precedenti poich si trattava di sistemi monoprogrammati e monoutente. Risultava quindi superflua qualsiasi tipo di protezione sugli accessi, sui dati, o da altri processi in esecuzione.

1.2.3

Sistemi paralleli

I sistemi paralleli sono dotati di pi unit di elaborazione, per questo sono chiamati anche sistemi multiprocesso. I processori che compongono questo tipo di sistemi sono strettamente accoppiati: condividono risorse hardware, tipicamente hanno lo spazio di memoria in comune. Le operazioni sono eseguite in parallelo su pi processi; quindi se una solita operazione deve essere eseguita su dati diversi, sfruttando la presenza di + CPU, vengono mandati in esecuzione contemporaneamente processi diversi. Lavorando in questo modo si guadagna in: EFFICIENZA: aumentando il numero di CPU possibile svolgere un lavoro maggiore in meno tempo. I processi non lavorano esattamente in parallelo: essi devono condividere alcune risorse quindi il sistema operativo deve gestire le operazioni di coordinamento dei processi in modo che tutti i componenti funzionino correttamente. Per esempio se lavorano due unit di elaborazione contemporaneamente, il lavoro svolto non sar esattamente raddoppiato, ma risulter poco minore. AFFIDABILITA: il guasto di una CPU provoca un degrado delle prestazioni del sistema ma non lo rende inutilizzabile, cosa che accadrebbe in presenza di una sola CPU. Lintero sistema quindi non si ferma ma funziona ad una velocit ridotta. Esiste comunque un quanto di tempo nel quale il sistema bloccato in attesa di individuare il guasto, successivamente continua lelaborazione con le N1 CPU rimaste. (si definisce affidabilit la capacit del sistema operativo di lavorare correttamente). DISPONIBILITA: la presenza di pi CPU assicura una maggiore disponibilit del sistema a eseguire nuove operazioni. (si definisce disponibilit la capacit del sistema operativo di essere sempre libero a eseguire elaborazioni). I sistemi paralleli possono essere suddivisi in:

Organizzazione dei sistemi operativi

13

OPERATIVI: ogni processore del sistema esegue la stessa replica del sistema operativo; queste repliche possono comunicare tra loro. (SIMMETRIC MULTIPROCESSING) ASIMMETRICI: ad ogni processore del sistema viene assegnato un compito specifico; quindi ogni CPU esegue una copia diversa del sistema operativo. Esiste un processore master che controlla il sistema, mentre gli altri svolgono la funzione di slave, attendendo istruzioni dallunit principale o svolgendo compiti predefiniti. Il processore master controlla e coordina lintero sistema, compresi tutti gli slave.

1.2.4

Reti di calcolatori

Una rete rappresenta un canale di comunicazione tra due o pi sistemi. In una rete di calcolatori il sistema costituito da pi processori come accade nei sistemi paralleli, ma a differenza di questo ultimo i processori sono dislocati a distanze elevate uno dallaltro. Inoltre nei sistemi paralleli lo spazio di memoria generalmente in comune (in realt dipende dalla struttura del sistema) , quindi i diversi processori non sono completamente autonomi. Nelle reti invece i nodi sono indipendenti e possono lavorare da soli. Per questo motivo le reti si definiscono SISTEMI LASCAMENTE ACCOPPIATI. Classificazione delle reti: SISTEMI DI RETE: il sistema operativo supportato da moduli per il networking e da programmi per la comunicazione in rete con altri calcolatori simili. Lutente ha visione di tutte le risorse disponibili, pu quindi accedere a macchine remote e copiare file da una macchina allaltra. Ogni macchina ha il proprio sistema operativo locale. Il sistema operativo per supportare i collegamenti in rete deve introdurre e gestire dei moduli per la gestione delle comunicazioni in rete (networking). Necessita quindi di un controllore per linterfaccia di rete, del software a basso livello per il suo funzionamento e di programmi per laccesso a macchine remote. La presenza di questi moduli non cambia la struttura essenziale del sistema operativo. SISTEMI DISTRIBUITI: il sistema operativo cos organizzato fa apparire la rete come un unico sistema monoprocessore: lutente manda in esecuzione un programma su una macchina; sar poi il sistema operativo a decidere su quale macchina verr realmente eseguito (di solito sceglie il processore meno occupato), quindi lutente non sa quali risorse vengono utilizzate. E il sistema che deve gestire la trasparenza della rete di calcolatori in modo automatico ed efficiente. Questo tipo di sistemi sono pi complicati da realizzare dei sistemi di rete poich permettono lesecuzione contemporanea di pi programmi su diversi processori. Tale caratteristica richiede la gestione di algoritmi di pianificazione dellutilizzo del processore pi complessi, per ottimizzare lesecuzione parallela. Inoltre a causa dei ritardi delle comunicazioni in rete tali algoritmi devono utilizzare informazioni

Organizzazione dei sistemi operativi

14

incomplete. Ci non accade nei sistemi operativi di rete in cui il sistema stesso ha una visione completa dello stato della rete.

1.2.5

Sistemi cluster

Unaltra forma di sistema operativo il sistema cluster. I sistemi cluster hanno caratteristiche simili ai sistemi paralleli e altre simili alle reti: sono composti da pi nodi autonomi che condividono le risorse (per esempio condividono dispositivi di memoria secondaria dischi). Questi sistemi sono utilizzati per garantire affidabilit e disponibilit: devono produrre grosse prestazione o essere sempre disponibili (server web). Le richieste vengono gestite da un controllore e smistate ai nodi. Le richieste di uno stesso utente possono essere gestite tutte da uno stesso nodo o da nodi diversi a seconda della politica scelta dal controllore. Questi sistemi sono anche chiamati calcolatori replicati: ogni nodo esegue una replica del sistema operativo uguale o leggermente diversa. Dato ad esempio un sistema cluster composto da due nodi (master, slave) lelaborazione di una operazione viene svolta da entrambi. Alla fine vengono controllati i risultati: se i due nodi danno il solito risultato, questo viene comunicato dal master; se il risultato diverso va in esecuzione una routine che individua quale nodo ha sbagliato e viene disattivato.

1.2.6

Sistemi di elaborazione in tempo reale

I sistemi di elaborazione in tempo reale si usa quando necessario fissare rigidi vincoli di tempo per le operazioni della CPU o per il flusso di dati. In questi sistemi tutte le elaborazioni devono essere eseguite entro un limite massimo temporale, altrimenti i risultati non risultano pi attendibili. Classificazione dei sistemi in tempo reale: HARD REAL-TIME: i compiti critici devono essere completati in un dato intervallo di tempo; il mancato rispetto del vincolo temporale produce cause catastrofiche (la definizione di cause catastrofiche relativa). SOFT REAL-TIME: il mancato rispetto del vincolo temporale non ha conseguenze disastrose (per esempio sistemi multimediali, real-time per calcolatori, realt virtuale). Dal punto di vista del sistema operativo ci sono implicazioni notevoli in entrambi i tipi di sistemi real-time: non tutti i meccanismi vanno bene per i soft real-time, tanto meno per gli hard real-time.

Organizzazione dei sistemi operativi

15

Nei sistemi hard real-time tutto deve essere programmato in modo pi complesso: si utilizza la memoria rom che consente una pi rapida lettura rispetto ai normali sistemi di lettura (dischi); non si usano tecniche di virtualizzazione perch renderebbe il sistema troppo casuale. Il tempo per ogni operazione deve essere definito a priori poich il sistema operativo deve essere costruito per permettere il rispetto del limite di tempo disponibile. I sistemi soft real-time hanno caratteristiche meno restrittive: i processi di elaborazione in tempo reale critici hanno priorit sugli altri processi e la mantengono fino al completamento dellesecuzione. La realizzazione di questi sistemi risulta pi semplice: si utilizzano i general p. con supporti per il real-time e con la modifica o laggiunta di algoritmi di scheduling appropriati per tener presente dei processi che hanno bisogno del real-time. Gli algoritmi di scheduling qui utilizzati hanno due componenti: una componente per il trattamento delle operazioni non in real-time realizzata con il sistema timesharing normale ( a divisione di tempo); laltra componente viene realizzata con scheduling a priorit (non va pi bene il timesharing). Prima vengono eseguite tutte le operazioni che richiedono real-time, poi le altre.

1.2.7

Sistemi embedded

I sistemi embedded (= dedicato) vengono eseguiti su calcolatori che controllano dispositivi che non sono generalmente sistemi di elaborazione (per esempio televisori, lavatrici, forni a microonde, telefoni cellulari). Si tratta di sistemi dedicati a svolgere una funzione particolare, che sempre la stessa. Il sistema in questo caso ottimizzato per la specifica applicazione,per questo in contraddizione con i general p i quali sono progettati per svolgere funzioni diverse. Il sistema operativo risulta quindi semplice: si limita ad interpretare i comandi, gestire la memorizzazione dei dati sui file e attivare i programmi applicativi. I sistemi embedded spesso hanno esigenze di real-time, ma hanno anche problemi di limitazioni di memoria (non c la virtualizzazione delle risorse) e di alimentazione. Il progetto del sistema operativo viene sviluppato congiuntamente allhardware in modo da ottimizzare il programma e decidere quale funzionalit usare nella parte hardware e quale nella parte software.

1.2.8

Sistemi mobili

I sistemi mobili comprendono palmari, notebook, cellulari che possono connettersi alle reti. La dimensione ridotta di questi dispositivi rende il sistema che li realizza particolare:

Organizzazione dei sistemi operativi

16

Per ridurre al minimo le dimensioni dei portatili si utilizzano risorse hardware inferiori ai normali pc.

La memoria disponibile limitata e attualmente non realizzata la virtualizzazione della memoria; il sistema operativo deve quindi gestire la memoria in modo efficiente.
Lunit di elaborazione lenta, perch una maggiore frequenza della CPU comporta un maggior consumo. Quindi il sistema risulta avere una minor potenza di calcolo. Perch questi dispositivi siano portatili le batterie devono essere leggere e non alimentate da rete.

Tutte le risorse sono progettate in modo da consumare il meno possibile e utilizzate nel modo pi efficiente, compatibilmente al minor consumo.

Organizzazione dei sistemi operativi

17

CAPITOLO 2

STRUTTURA DEI SISTEMI OPERATIVI


Il compito del sistema operativo quello di implementare funzioni per gestire tutti i dispositivi che compongono il calcolatore e per fornire ai programmi utente uninterfaccia semplificata con lhardware. Per ottimizzare le prestazioni del calcolatore, il sistema operativo viene suddiviso in diverse componenti, ognuna delle quali ha il compito di realizzare un sottoinsieme delle funzioni sopra citate. Ogni sistema svolge funzioni diverse, a seconda dellambiente in cui viene implementato. Inoltre anche la struttura interna che li caratterizza pu essere molto diversa da sistema a sistema.

2.1

Funzioni svolte dal sistema operativo

Il sistema operativo offre un ambiente in cui eseguire i programmi e fornire servizi ai programmi stessi ed ai loro utenti. Il sistema operativo svolge quindi un insieme di funzioni che variano secondo larchitettura del calcolatore. In generale si possono individuare due classi di funzioni: 1. Funzioni visibili allutente. Ne fanno parte tutte le funzioni che realizzano il criterio di convenienza. In particolare il sistema deve:

Rendere possibile lesecuzione di programmi da parte dellutente.

Rendere disponibili i dispositivi di I/O. Svolgere il coordinamento delle operazioni di I/O poich le richieste arrivano da pi programmi nello stesso momento. Gestire il file system. I programmi manipolano i dati sui files (leggono, elaborano e stampano o memorizzano i dati): il sistema operativo deve rendere possibile il loro utilizzo attraverso la gestione dei file.
Gestire la comunicazione tra pi programmi eseguiti su una stessa macchina o, nel caso di connessione di rete, su macchine diverse. La comunicazione si pu realizzare tramite una memoria condivisa o attraverso lo scambio di messaggi. In questo caso il sistema operativo trasferisce pacchetti dinformazione tra i vari processi.

Organizzazione dei sistemi operativi

18

Gestire gli errori temporanei o permanenti nella CPU o nei dispositivi di memoria, che possono causare linterruzione della comunicazione o produrre risultati errati. Il sistema deve garantire unelaborazione corretta e coerente.

2. Funzioni non visibili allutente. Ne fanno parte tutte le funzioni che realizzano il criterio di efficienza. In particolare il sistema deve:
Allocare le risorse in modo efficiente in modo da massimizzare lobbiettivo che il sistema operativo si prefigge. Per lassegnamento della CPU il sistema fa uso di algoritmi di scheduling che tengono conto della velocit della CPU, dei processi da eseguire e di altri fattori. Le altre risorse vengono assegnate ai vari processi secondo procedure che utilizzano tabelle per la memorizzazione degli utenti e delle risorse che utilizzano.

Contabilizzare luso delle risorse. Il sistema deve tenere traccia delle risorse che i programmi utilizzano a scopi commerciali, statistici o per implementare sistemi di sicurezza.
Realizzare funzioni per la gestione della protezione e della sicurezza. Nei sistemi multiprogrammati il sistema operativo deve evitare laccesso di utenti alle risorse di altri utenti. La protezione assicura che laccesso alle risorse del sistema sia controllato.

2.2

System call

Le system call costituiscono linterfaccia tra un processo e il sistema operativo. Tutte le funzioni svolte dal sistema operativo devono essere disponibili ai programmi scritti dagli utenti attraverso chiamate di sistema. Esse sono chiamate di funzioni in cui la funzione viene svolta dal sistema operativo (in assembler o linguaggi ad alto livello). Le chiamate di sistema si possono classificare in cinque categorie principali: Controllo dei processi. Utilizzate per svolgere operazioni sui processi (creare, fermare, terminare e eseguire processi), per caricare il sistema in memoria, per attendere un certo evento o un intervallo di tempo. Gestione dei file. Su un sistema di elaborazione esistono diversi supporti di memorizzazione con caratteristiche e modalit di memorizzazione diverse. Lutente dovrebbe tenerne presente e considerare tutti i dettagli. Per questo motivo il sistema operativo realizza lastrazione dei file introducendo lunit di memorizzazione logica. I file sono poi mappati nei dispositivi di memoria di massa, cos che lutente si preoccupa solo di scrivere i dati su un file. Il sistema operativo mette a disposizione dellutente un certo numero di chiamate di sistema per la gestione dei file.

Organizzazione dei sistemi operativi

19

Gestione dei dispositivi di I/O. Come per i file, i dispositivi sono numerosi e ognuno con proprie caratteristiche interne. Per semplificare il lavoro dellutente, il sistema mette a disposizione dei file evitando che lutente colloqui direttamente con i dispositivi. Il sistema operativo offre allutente una interfaccia semplificata. Gestione delle informazioni. System call poco significative per lutente (riguardano limpostazione della data e dellora attuale; numero degli utenti collegati). Comunicazione con altri processi in esecuzione sulla stessa macchina o su macchine diverse. Il sistema operativo gestisce la comunicazione tra processi: fornisce system call per lapertura / chiusura dei collegamenti su un altro processo, imposta i parametri per i collegamenti, gestisce linvio / ricezione delle informazioni tra processi. Spesso, linsieme delle system call esportate dal sistema operativo risulta essere troppo di basso livello per essere utilizzabile in maniera semplice dallutente. Per questo motivo, vengono talvolta fornite delle librerie che implementano funzionalit di pi alto livello basandosi sulle chiamate di sistema. Tipicamente, una libreria mette a disposizione delle chiamate di libreria (library call) che esportano uninterfaccia pi potente e semplice da usare rispetto a quella fornita dalle chiamate di sistema. Bisogna per tener presente che una chiamata di libreria eseguir del codice di libreria in modo utente, e poi eventualmente chiamer una o pi system call che eseguiranno in modo kernel.

2.3

Componenti di un sistema operativo

Il sistema operativo pu essere suddiviso in moduli, ognuno dei quali fornisce una interfaccia e realizza funzioni ben precise. Le componenti fanno riferimento alle funzioni viste sopra.

2.3.1

Gestione dei processi

Il gestore dei processi si occupa di tutte le operazioni che coinvolgono i processi. Un processo un programma in esecuzione. Per svolgere i suoi compiti necessita di alcune risorse (CPU, memoria, file dispositivi di I/O) che possono essere attribuite in diversi momenti, alla creazione o durante la sua esecuzione. Il sistema operativo si occupa di mandare un programma in esecuzione e allocare le risorse utilizzate. In particolare il sistema operativo deve gestire lallocazione della CPU in base alla politica di schedulazione adottata: deve decidere quale processo mandare in esecuzione, quando revocargli la CPU e quale sar il prossimo processo a cui assegnare la CPU. Il S.O. inoltre: - crea e cancella i processi utente e di sistema,

Organizzazione dei sistemi operativi

20

- sospende e ripristina i processi, - fornisce meccanismi per la sincronizzazione dei processi, - fornisce meccanismi per la comunicazione tra i processi, - fornisce meccanismi per la gestione dei deadlock.

2.3.2

Gestione della memoria centrale

La memoria condivisa dalla CPU e da alcuni dispositivi di I/O. Prima di eseguire un programma deve essergli allocata la memoria: il programma deve essere associato a indirizzi assoluti e caricato in memoria; tali indirizzi vengono generati dalla CPU. Se ci sono pi programmi che richiedono lelaborazione occorre scegliere quale mandare in esecuzione tenendo conto della memoria totale disponibile e di quella richiesta: se un programma occupa pi memoria di quella disponibile si attua il processo di virtualizzazione. Quando il programma termina il sistema gli revoca la memoria rendendola disponibile per lesecuzione di altri programmi. Inoltre le esigenze di memoria di un programma possono variare dinamicamente durante la sua esecuzione: il gestore della memoria tiene conto anche di questo per ottimizzare lutilizzo delle risorse. Il sistema operativo deve quindi seguire degli schemi di gestione della memoria che variano in funzione dellarchitettura del sistema. In particolare deve: - tener traccia della memoria disponibile, - selezionare i processi da caricare in memoria, - assegnare e revocare la memoria ai processi, - memorizzare per ogni processo la memoria allocata.

2.3.3

Gestione dei file

I dispositivi di memorizzazione secondaria sono molteplici ed ognuno ha proprie caratteristiche (per esempio velocit di trasferimento dati, metodo daccesso) e una organizzazione fisica diversa. Il sistema operativo si occupa di semplificare i compiti dellutente e traduce le sue richieste per i dispositivi fisici. Il sistema realizza effettivamente lastrazione dei file, fornendo una visione logica astratta e uniforme delle informazioni memorizzate (i file). Lastrazione riguarda le particolari caratteristiche fisiche dei dispositivi. Riguardo alla gestione dei file responsabile di: - creare e cancellare file e directory,

Organizzazione dei sistemi operativi

21

- fornire allutente le funzioni fondamentali per la manipolazione di file e directory, - creare una associazione tra i file e i corrispondenti dispositivi di memoria secondaria, - mantenere un back up dei file su dispositivi di memorizzazione stabili, non volatili.

2.3.4

Gestione dell I/O

Il sistema operativo deve nascondere allutente le caratteristiche degli specifici dispositivi hardware. Solo il driver del dispositivo software relativo al dispositivo fisico conosce le caratteristiche dello stesso. Il sistema operativo realizza unastrazione dei dispositivi di I/O definendo uninterfaccia comune che sfrutta i servizi dei driver (sottosistema I/O), che composto da: - componente per la gestione della memoria di un buffering, latching e spooling, - uninterfaccia generale per i driver dei dispositivi, - i driver per gli specifici dispositivi.

2.3.5

Gestione della memoria secondaria

Prima di eseguire un programma deve essergli allocata la memoria centrale. Poich i programmi eseguiti su un calcolatore sono molti, anche la richiesta di memoria sar elevata. Per questo motivo i sistemi devono disporre di una memoria secondaria a sostegno della memoria centrale. La maggior parte dei moderni sistemi di calcolo impiega i dischi come principale mezzo di memorizzazione secondaria, sia per i programmi sia per i dati a cui accedono. Il gestore della memoria secondaria utile perch tutti i sistemi hanno i supporti di memorizzazione secondaria non volatili e le prestazioni del sistema operativo spesso dipendono da questi sistemi di memorizzazione. Questa componente si occupa di: - gestire lo spazio libero del disco (per memorizzare da file a disco), - allocazione e revoca dello spazio di memoria ai vari file, - realizzare lo scheduling del disco a fronte di richieste multiple di utilizzo del disco.

2.3.6

Gestione del networking

Organizzazione dei sistemi operativi

22

In un sistema distribuito le unit di elaborazione sono collegate da una rete di comunicazione. I calcolatori che ne fanno parte condividono le risorse. Quindi il sistema operativo deve gestire laccesso a queste ultime e gestire la comunicazione con processi remoti. Per far questo dotato di un dispositivo di interfaccia con la rete (dispositivi di I/O) e sviluppa la parte dei protocolli di rete nel sistema operativo stesso. Normalmente i sistemi operativi generalizzano laccesso alla rete come una forma daccesso ai file, dove i particolari riguardanti linterconnessione sono contenuti nel driver del dispositivo dinterfaccia della rete stessa.

2.3.7

Gestione del meccanismo di protezione

Se un sistema di calcolo ha pi utenti e consente che pi processi siano eseguiti in modo concorrente, i diversi processi devono essere protetti dallattivit di altri processi e gli utenti possono accedere solo alle risorse di cui dispongono i permessi. Per questo motivo esistono meccanismi che assicurano che i file, i segmenti della memoria, la CPU e altre risorse possano essere controllate solo dai processi che hanno ricevuto lautorizzazione dal sistema operativo. E compito del sistema stesso amministrare la sicurezza del sistema in modo opportuno. La protezione definita d ogni meccanismo che controlla laccesso da parte di programmi, processi o utenti alle risorse di un sistema di calcolo. Questo meccanismo deve fornire i mezzi che specifichino quali controlli si debbano eseguire e i mezzi per effettuarli. Come esempio si consideri Unix: ad ogni file associato un codice di protezione che specifica i permessi di accesso al file stesso. Tale codice composto da 9 bit che a gruppi di tre, indicano lo stato dei permessi di lettura (r), scrittura (w) e esecuzione (x). I primi tre indicano i permessi di accesso per il proprietario, i secondi tre i permessi di accesso per un utente dello stesso gruppo, gli ultimi tre per tutti gli altri. Il sistema operativo deve realizzare il meccanismo di protezione considerando la sicurezza sotto due aspetti differenti: si parla infatti di sicurezza di sistema, intesa come tecnica per prevenire intrusi allinterno di un sistema, e sicurezza di rete (derivante dal fatto che i calcolatori sono connessi in rete) intesa come insieme di tecniche per garantire il controllo degli accessi provenienti dalla rete e per garantire la sicurezza dei dati che viaggiano sulla rete.

2.3.8

Interprete dei comandi

Linterprete dei comandi la parte con cui il sistema operativo si interfaccia direttamente con lutente. il programma di sistema pi importante, la cui funzione principale consiste nel ricevere i comandi impartiti dagli utenti ed eseguirli. A seconda dellarchitettura del sistema linterprete viene implementato nel nucleo con tutte le altre funzioni o fornito al di fuori del nucleo. In questo ultimo caso linterprete come una tipica applicazione di sistema, quindi modificabile.

Organizzazione dei sistemi operativi

23

Linterprete realizza un piccolo numero di comandi, gli altri sono in pi realizzati come funzioni: il sistema operativo cerca il programma (i programmi sono organizzati allinterno di file) contiene il comando richiesto dallutente e lo manda in esecuzione. In questa ottica lutente pu aggiungere nuovi comandi. Esistono interpreti di diverso tipo: alcuni efficienti ma con interfaccia di basso livello (linux); altri hanno interpreti pi facili da utilizzare, realizzati mediante lutilizzo di una interfaccia grafica.

2.4

Struttura del sistema

I sistemi operativi forniscono lambiente in cui si eseguono i programmi. Essendo organizzati secondo criteri che possono essere assai diversi, anche la struttura interna che li caratterizza pu essere molto diversa. Il tipo di sistema realizzato definisce i criteri di scelta dei metodi e degli algoritmi necessari. Il sistema operativo pu essere quindi organizzato come un unica struttura (sistema monolitico) o suddiviso in moduli (strutturato a livelli).

2.4.1

Sistemi monolitici

La prima soluzione realizza il sistema come un insieme di procedure, ciascuna delle quali pu chiamarne una qualunque delle altre. Ogni procedura ha uninterfaccia ben definita ed completamente visibile ad ogni altra procedura. In questo tipo di organizzazione il programma oggetto del sistema operativo ottenuto in due fasi: - compilazione delle singole procedure o dei file che contengono le procedure, - collegamento di tutte le procedure in un unico file oggetto tramite un linker di sistema. Lunica struttura presente in questi sistemi sono le system call che comportano il salvataggio dei parametri e l'esecuzione di una istruzione di trap speciale. Questa istruzione fa passare la macchina dalla modalit utente alla modalit kernel e trasferisce il controllo al sistema operativo: il sistema esamina i parametri, determina e chiama la procedura di sistema da eseguire. Alla fine, il controllo torna al programma utente. Quindi la struttura di base del sistema operativo monolitico composta da (Figura 2.1): - un programma principale che chiama le procedure di servizio richieste, - un insieme di procedure di servizio che eseguono le chiamate di sistema, - un insieme di procedure di utilit che aiutano le procedure di servizio.

Organizzazione dei sistemi operativi

24

Procedura principale

Procedure di servizio

Procedure i utilit

Figura 2.1 Struttura di un sistema monolitico. Nei sistemi monolitici risulta difficile modificare il sistema stesso. Inoltre i sistemi moderni sono vasti e complessi quindi la soluzione appena vista non assicura il corretto funzionamento degli stessi.

2.4.2

Sistemi a livelli

Con lo sviluppo dei moderni calcolatori stata introdotta la modularizzazione dei sistemi operativi: anzich progettare un sistema monolitico, si suddivide in piccoli componenti, ciascuno dei quali aventi interfacce e funzioni definite con precisione. Il sistema operativo viene quindi organizzato in una gerarchia di livelli, ognuno costruito su quello sottostante. Il livello pi basso il livello fisico, quello pi alto linterfaccia dutente (Figura 2.2).

applicazione

applicazione

applicazione

interfaccia per la programmazione d'applicazione (API) sottosistema sottosistema sottosistema

nucleo del sistema

driver di dispositivo

driver di dispositivo

driver di dispositivo

Figura 2.2 Esempio di struttura stratificata.

Organizzazione dei sistemi operativi

25

Ogni livello rappresenta la realizzazione di un oggetto astratto, composto da un insieme di strutture dati e da un insieme di procedure. Tali procedure possono essere chiamate dal livello superiore e possono richiedere lesecuzione di operazioni sul livello inferiore. Il vantaggio principale nei sistemi organizzati a livelli la modularit: ogni livello utilizza le informazioni fornite dallo strato inferiore (considerando soltanto le azioni che compiono senza analizzare la loro implementazione) per fornire servizi allo strato superiore. Inoltre questa organizzazione semplifica la progettazione e la realizzazione dei sistemi: la verifica della correttezza viene fatta al momento della creazione di ogni singolo livello, quindi il riscontro di un errore indica un errore solo sul livello stesso e non su quelli sottostanti che sono gi stati corretti. Con la struttura stratificata bisogna tener conto di diversi problemi: 1. lordine dei livelli dipende anche dalle caratteristiche della struttura su cui viene implementata una tale organizzazione; 2. necessaria una accurata analisi e definizione dei livelli, poich ogni strato pu usare solo strati che si trovano a un livello inferiore; 3. la struttura stratificata tende ad essere meno efficiente delle altre: lesecuzione di alcune istruzioni comporta lo scorrimento di tanti livelli (ciascuno dei quali aggiunge un carico allesecuzione) che risulta superfluo in un sistema monolitico. La presenza di questi limiti ha portato negli ultimi anni ad un arresto dello sviluppo della stratificazione, spostando la progettazione verso sistemi basati su un numero inferiore di livelli ognuno con pi funzionalit.

2.4.3

Macchine virtuali

Le macchine virtuali sono sistemi strutturati a livelli. Il cuore del sistema (monitor della macchina virtuale) gira direttamente sullhardware e si occupa della multiprogrammazione, fornendo al livello immediatamente superiore un insieme di macchine virtuali. Queste, a differenza dei normali sistemi operativi, non sono macchine estese (non hanno file,non forniscono servizi allutente), ma sono delle copie esatte dellhardware, incluse le modalit kernel/utente, lingresso/uscita e le interruzioni (Figura 2.3). Proprio perch ogni macchina virtuale identica allhardware, ciascuna pu far girare qualunque sistema operativo compatibile con lhardware e diverse macchine virtuali possono eseguire diversi sistemi operativi.

Organizzazione dei sistemi operativi

26

Ciascun processo dispone quindi di una macchina virtuale: una copia (virtuale) del calcolatore (CPU e memoria) da cui pu far eseguire qualsiasi sistema operativo o programma progettato per la macchina fisica sottostante. A differenza dei sistemi timesharing, che forniscono la mutiprogrammazione e una macchina esetesa con uninterfaccia pi adeguata dellhardware, le macchine virtuali separano queste due funzioni. In questo modo ciascuna risulta pi semplice, pi flessibile e pi facile da mantenere.

processi processi interfaccia di programmazione nucleo architettura (a) nucleo VM1

processi

processi

nucleo VM2

nucleo VM3

realizzazione della macchina architettura fisica ( b)

Figura 2.3 Modelli di sistema: a) Semplice; b) Macchina virtuale. Un problema che nasce nella realizzazione di questi sistemi riguarda la gestione dei dischi, unit presenti in numero limitato sui calcolatori. Per offrire le funzioni di memoria virtuale i programmi che realizzano le macchine virtuali richiedono una parte rilevante dello spazio dei dischi. Per ovviare a questo problema si sfruttano i dischi virtuali: ad ogni processo associato un disco virtuale; il sistema riserva nei dischi fisici tante tracce quante ne richiede il disco virtuale. La somma delle dimensioni di tutti i dischi virtuali deve essere minore della dimensione dello spazio fisico complessivamente disponibile nei dischi.

2.4.4

Modello client-server

I sistemi operativi attuali sono molto estesi, per questo motivo stato introdotto il modello client-server, un sistema orientato al microkernel. Questo tipo di organizzazione prevede che nel nucleo siano sviluppate solo le funzioni essenziali (di gestione dei processi, della memoria e di comunicazione) con una conseguente riduzione notevole del nucleo del sistema. Tutto le altre funzioni di sistema sono realizzate attraverso processi utente, chiamati processi client (Figura 2.4): il client per richiedere un servizio spedisce la richiesta ad un processo server che la esegue e restituisce la risposta. La comunicazione avviene tramite scambio di messaggi).

Organizzazione dei sistemi operativi

27

Mentre il kernel include i dati che descrivono un processo e realizza i meccanismi di comunicazione tra processi, i processi server realizzano le politiche di gestione delle risorse.
processo client processo client processo server server dei terminali server per server dei i file terminali

...

modalit utente modalit kernel

microkernel

Figura 2.4 Il modello client-server. Vantaggi del modello client-server: - Modularit del sistema: le funzioni del sistema operativo sono suddivise in parti di dimensioni ridotte e ben specificate. - Facilit di estensione del sistema operativo: i nuovi servizi si aggiungono allo spazio utente e non comportano modifiche al nucleo. - Sistema operativo adattabile alle diverse architetture: le modifiche sono limitate grazie alla dimensione ridotta del nucleo. - Maggior sicurezza e affidabilit del sistema: poich i servizi vengono eseguiti come processi utente non si ha accesso allhardware; se un servizio compromesso, si blocca solo il processo relativo a quel servizio, senza causare il blocco dellintera macchina. - Adattabilit del sistema nei sistemi distribuiti: il client implementato in modo che non sappia se il destinatario (server) di un suo messaggio sulla sua stessa macchina o su una macchina remota. Alcune funzioni del sistema operativo non sono realizzabili tramite processi utente. Per ovviare a questo problema possibile eseguire alcuni processi server in modalit kernel dedicati alla realizzazione delle funzioni critiche. Lalternativa quella di implementare un numero minimo di meccanismi nel kernel e lasciare le politiche di decisione ai processi server eseguiti a livello utente.