Riassunto gerarchico delle nozioni del corso 2003-2004 di
Sistemi Operativi del Prof. Francesco Aymerich - Università degli
Studi di Cagliari, Facoltà di Scienze Matematiche Fisiche Naturali,
Dipartimento di Matematica ed Informatica, Corso di Laurea in
Informatica
- Funzioni del Sistema Operativo
- Condivisione delle risorse
- Un sistema operativo deve suddividere le risorse del sistema di calcolo tra le persone che ne fanno uso simultaneamente.
- Macchina virtuale
- trasforma l'hardware, quale si presenta fisicamente, in una macchina di più semplice impiego, con caratteristiche diverse da quelle della macchina fisica di base, ma più duttili
- presenta spesso divergenze dalla macchina reale su cui si basa
- Condivisione delle risorse
- Caratteristiche di una macchina virtuale
- a) Input/Output (I/O)
- Le proprietà di I/O dell'hardware di base possono essere estremamente complesse e possono richiedere una programmazione anche molto sofisticata per divenire utilizzabili. Grazie al sistema operativo, l'utente sarà sollevato dall'oneroso compito di comprendere tale complessità e gli si presenterà una macchina virtuale con proprietà di 1/O molto più semplici da usare, pur restando invariate per quanto riguarda la loro potenza.
- b) Memoria
- Molti sistemi operativi presentano una macchina virtuale con una memoria diversa per dimensione da quella della macchina reale di base. Ad esempio, un sistema operativo può impiegare la memoria secondaria (sotto forma di dischi magnetici) per dare l'illusione di una memoria centrale più ampia; in alternativa, può suddividere quest'ultima tra gli utenti, cosicché ciascuno di essi si troverà di fronte ad una macchina virtuale con memoria inferiore a quella della macchina reale.
- c) File system
- La maggior parte delle macchine virtuali comprende un file system per la memorizzazione di dati e programmi permanenti. Il file system si basa sui supporti di informazione (disco o nastro) della macchina reale, ma il sistema operativo permette all'utente di avere accesso alle informazioni memorizzate per mezzo di un nome simbolico, anzichè dover ricorrere alla loro posizione fisica sul supporto di informazione.
- d) Protezione e gestione degli errori
- Spesso i sistemi di calcolo di vaste dimensioni vengono condivisi da svariati utenti, è essenziale che ciascuno di essi sia protetto dalle conseguenze degli errori (intenzionali o meno) compiuti da altri. I computer variano notevolmente per quanto concerne il grado di protezione fornita dall'hardware di base ed il sistema operativo deve avvalersi di questa caratteristica per fornire una macchina virtuale nel cui ambito gli utenti non possano influenzarsi negativamente in modo reciproco.
- e) Interazione dei programmi
- Una macchina virtuale può fornire facilitazioni per i programmi utente, così da farli interagire mentre girano in macchina; ad esempio, l'output di un programma viene utilizzato quale input per un altro programma.
- f) Controllo dei programmi
- Una macchina virtuale fornisce all'utente uno strumento per manipolare i programmi ed i dati che si trovano dentro al sistema di calcolo. All'utente viene presentato un linguaggio di comando che gli consente di esprimere ciò che vuole far eseguire alla macchina (copiare un file, ...). Il linguaggio di comando è ad un livello molto più alto (ed è molto più facile da usare) delle istruzioni in linguaggio macchina, eseguibili dalla macchina fisica.
- La natura precisa della macchina virtuale dipenderà
dall'applicazione per la quale se ne prevede l'uso.
- le caratteristiche di una macchina necessaria per un sistema di prenotazione dei posti per compagnie aeree saranno diverse da quelle richieste per il controllo di esperimenti scientifici.
- la progettazione del sistema operativo deve essere nettamente determinata dal tipo di impiego cui è destinata la macchina.
- Purtroppo, con le "macchine universali" spesso non si riesce ad individuare facilmente il tipo di applicazione prevista; una critica comunemente sollevata a proposito di parecchi sistemi è che, nel tentativo di voler essere tutto per tutti, finiscono per non essere completamente soddisfacenti per nessuno.
- a) Input/Output (I/O)
- Livelli dell'architettura di un elaboratore
- Sono 6 livelli distinti.
- i primi 3 hanno linguaggi macchina numerici, i successivi sono man mano più comprensibili per l'uomo
- Livello 0 della logica digitale
- gli oggetti che ci interessano sono chiamati gate (porte). Ogni gate ha uno o più input digitali (segnali rappresentanti 0 o 1) e fornisce come output alcune semplici funzioni di questi input, quali AND o OR.
- Livello 1 della microprogrammazione
- è il livello del vero linguaggio macchina
- si introduce il concetto di programma, chiamato microprogramma, come una sequenza di istruzioni da eseguire
- il microprogramma interpreta le istruzioni del livello 2.
- La maggior parte di queste istruzioni si occupano dello spostamento di dati da una parte della macchina ad un'altra o dell'esecuzione di semplici test.
- Livello 2 della macchina standard
- Le macchine di questo livello sono tutte molto simili tra loro
- Ogni produttore di calcolatori pubblica un manuale per ogni calcolatore. Questi manuali riguardano in realtà la macchina virtuale dì livello 2 e non la macchina reale di livello 1
- Alcuni calcolatori non hanno un livello di microprogrammazione.
- Su queste macchine le istruzioni del livello di macchina standard sono eseguite direttamente dai circuiti elettronici (livello 0) senza che nessun livello 1 intervenga come interprete.
- Livello 3 del sistema operativo
- metodo ibrido
- Le istruzioni di livello 3 identiche a quelle di livello 2 vengono eseguite direttamente dal microprogramma mentre quelle specifiche del livello 3 sono interpretate dal sistema operativo.
- Le nuove capacità aggiunte a livello 3 sono eseguite da un interprete che fa operare il livello 2.
- La maggior parte delle istruzioni nel linguaggio di livello 3 appaiono anche nel linguaggio di livello 2.
- Il terzo livello fornisce un'insieme di nuove istruzioni, un'organizzazione della memoria differente, la capacità di eseguire due o più programmi in parallelo e altre caratteristiche.
- metodo ibrido
- Livello 4 del linguaggio assembler
- è una forma simbolica per uno dei linguaggi sottostanti.
- fornisce un metodo per scrivere programmi per i livelli 1, 2 e 3 in forma non così ostica come i linguaggi delle macchine virtuali stesse.
- Se i livelli 2 e 3 sono sempre interpretati, i livelli 4, 5 e superiori sono di solito, anche se non sempre, supportati da traduzione.
- I programmi nel linguaggio assembler sono prima tradotti nei linguaggi di livello 1, 2, 3 e poi interpretati da una appropriata macchina virtuale o effettiva.
- I programmi che eseguono la traduzione sono chiamati assemblatori.
- Livello 5 del linguaggio orientato ai problemi
- è costituito da un linguaggio progettato per essere utilizzato
dai programmatori di applicazioni con problemi da risolvere.
- Tali linguaggi sono chiamati linguaggi di alto livello.
- I programmi scritti in questi linguaggi sono generalmente tradotti nel livello 3 o 4 da traduttori conosciuti come compilatori, sebbene occasionalmente siano anche interpretati.
- è costituito da un linguaggio progettato per essere utilizzato
dai programmatori di applicazioni con problemi da risolvere.
- Tipologia dei sistemi operativi
- Sistemi monoutente
- forniscono una macchina virtuale per un solo utente alla volta.
- Sono idonei a computer dedicati ad un'unica funzione oppure tanto economici da non valere la pena condividerli.
- La maggior parte dei sistemi operativi per microcomputer (ad esempio, Macintosh e Windows) corrisponde al tipo per monoutenza.
- In linea generale, presentano una macchina virtuale semplice
che facilita l'applicazione di un vasto numero di pacchetti
software, permettendo nel contempo all'utente di sviluppare e
mettere in esecuzione programmi per proprio conto.
- si dà maggior rilievo alla disponibilità di un linguaggio di comando facilmente utilizzabile, di un file system semplice e di risorse di I/O per dischi e dispositivi vari.
- Sistemi per il controllo dei processi (real-time)
- Il termine controllo dei processi indica solitamente il
controllo, effettuato tramite calcolatore, di un processo
industriale, quale la produzione di macchine utensili.
- Tale concetto può essere allargato fino a comprendere settori quali il controllo ambientale in una capsula aerospaziale.
- La caratteristica comune di tutte queste applicazioni è il
feedback (retroazione):
- il computer, cioè, riceve un input proveniente dal processo sotto controllo, elabora una risposta per mantenerlo in condizioni di stabilità ed avvia il meccanismo per l'emissione della risposta stessa. Se, ad esempio, i dati di input denotassero un pericoloso aumento di temperatura, l'intervento di risposta potrebbe benissimo constare nell'apertura di una valvola per aumentare la portata del liquido di raffreddamento.
- È chiaro che, se il processo deve rimanere in equilibrio esiste un intervallo di tempo critico entro il quale deve essere fornita la risposta da parte del calcolatore.
- La funzione principale di un sistema operativo adibito al controllo di un processo è quella di fornire il massimo di affidabilità con il minimo indispensabile di interventi da parte dell'operatore, nonché quella di garantire condizioni di sicurezza anche al verificarsi di eventuali disfunzioni dell'hardware.
- Il termine controllo dei processi indica solitamente il
controllo, effettuato tramite calcolatore, di un processo
industriale, quale la produzione di macchine utensili.
- Sistemi a Data Base
- Il carattere distintivo di tali sistemi è il vasto insieme di dati, o data base, che può essere consultato allo scopo di ottenere informazioni.
- La risposta alle richieste di informazione deve avere luogo entro un periodo di tempo breve (sono caratteristici tempi inferiori al minuto) e deve essere possibile modificare il data base mano a mano che si aggiornano le informazioni.
- A tale proposito, citiamo a titolo di esempi i sistemi
informativi gestionali (dove il data base è costituito da
informazioni sull'andamento aziendale) ed i sistemi informativi
sanitari, per i quali il data base consta di un insieme di
anamnesi.
- L'utente (nei casi esemplificati, il direttore della società o il medico) si aspetta di essere in grado di accedere alle informazioni senza dover disporre di alcuna conoscenza relativa all'organizzazione del data base, né per quel che riguarda la struttura del software, né per i dispositivi hardware di memorizzazione.
- Perciò, il sistema operativo deve mettere a disposizione i servizi di consultazione senza coinvolgere l'utente nella loro realizzazione pratica.
- Sistemi per il trattamento delle transazioni
- sono caratterizzati da un data base che viene modificato con frequenza, anche parecchie volte al secondo.
- Se ne possono trovare tipiche applicazioni nel settore delle prenotazioni aeree e delle attività bancarie.
- La principale limitazione nell'elaborazione delle transazioni è
data dalla necessità di mantenere aggiornato il data base:
- è chiaro che il sistema è inutile se le transazioni vengono effettuate sulla base di dati inesatti.
- Problemi ulteriori sorgono poi quando si trattano transazioni
effettuate contemporaneamente sugli stessi dati.
- Il singolo utente dovrebbe avere l'impressione di essere l'unico utente del sistema.
- Sistemi universali
- sono impiegati per calcolatori caratterizzati da un vasto numero di utenti che svolgono una grande serie di compiti.
- Tali sistemi vengono progettati in modo da gestire un flusso
continuativo di lavoro sotto forma di diversi job (lavori) da
eseguirsi sul calcolatore.
- Ciascun job svolge un compito specifico per un utente determinato.
- La messa a disposizione ed il controllo queste risorse, unitamente all'organizzazione del flusso di lavoro, sono le funzioni in senso lato, di un sistema operativo universale.
- Un breve passo indietro nella storia dell'informatica ci aiuta
a capire l'evoluzione dei sistemi operativi. I sistemi universali
ammettono in genere due categorie di attività:
- 1) batch
- Una volta avviato il job non viene più a contatto con l'utente fino suo completamento;
- Questa modalità era molto diffusa fino agli anni '90, anche se meno rilevante, esiste ancora in tutti i sistemi operativi universali
- Il job caratteristico di questo sistema era, agli albori dell'era informatica perforato su schede oppure memorizzato su nastro magnetico e veniva passato ad un operatore per la sottomissione alla macchina.
- Quando il job era stato completato, l'operatore restituiva l'output all'utente
- Alcuni sistemi di tipo batch, chiamati sistemi remote job entry
(RJE; elaborazione con accesso a distanza), consentivano la
sottomissione dei lavori tramite dispositivi di I/O che potevano
anche trovarsi ad una certa distanza dall'impianto centrale (mentre
begli altri casi erano nella stessa stanza) ed essere ad esso
collegati per mezzo di una linea di trasmissione dei dati.
- Un sistema RJE poteva supportare anche parecchie stazioni esterne di I/O
- il tipo batch viene ora utilizzato esclusivamente per compiti di routine non interattivi, quali gli statini paga o l'inventano delle scorte di magazzino.
- 2) interattivo (accesso multiplo o on demand)
- l'utente può introdurre un lavoro tramite la tastiera di un terminale e può utilizzare il terminale stesso per controllare il job mentre viene eseguito.
- Il sistema operativo provvede a suddividere le risorse di calcolo tra i diversi job, in modo che a ciascun utente sembri avere per sé tutta la macchina.
- questa modalità tende ad essere usata per attività quali lo sviluppo di programmi e la redazione di documenti
- 1) batch
- Sistemi monoutente
- Il set di istruzioni estese
- L'interfaccia tra il sistema operativo e i programmi utente è
definita dal set di "istruzioni estese" fornite dal sistema
operativo.
- Queste sono tradizionalmente note con il nome di chiamate di sistema (system calls), benché esse possano essere implementate in diversi modi.
- Le chiamate disponibili a questo livello variano a seconda del sistema operativo (benché i concetti di base tendano a rimanere gli stessi).
- Esse indicano ciò che realmente fa il sistema operativo.
- L'interfaccia tra il sistema operativo e i programmi utente è
definita dal set di "istruzioni estese" fornite dal sistema
operativo.
- Struttura dei Sistemi Operativi
- Sistemi monolitici
- è l'organizzazione più comune, potrebbe essere sottotitolato "La grande confusione".
- La struttura dei sistemi monolitici consiste infatti nell'assenza di ogni strutturazione.
- Il sistema operativo è scritto come un insieme di procedure,
ognuna delle quali può indifferentemente chiamare tutte le altre in
qualsiasi momento ne abbia bisogno.
- ogni procedura all'interno del sistema ha una ben definita interfaccia in termini di parametri e risultati.
- Per costruire il programma oggetto del sistema operativo, si devono innanzitutto compilare tutte le singole procedure, o i file contenenti le procedure, e quindi si collegano insieme le prime in un unico file oggetto utilizzando il linker di sistema.
- Di fatto, non c'è nessuna astrazione - ogni procedura è visibile da tutte le altre.
- Come effettuare una chiamata di sistema
- 1) I1 programma utente invoca una trap e passa il controllo al
nucleo.
- I servizi (chiamate di sistema) forniti dal sistema operativo vengono invocati immettendo i parametri in locazioni ben definite, come i registri o lo stack, ed eseguendo quindi una speciale istruzione di trap denominata kernel call (chiamata di nucleo) o supervisor call.
- Questa istruzione cambia la modalità della macchina da "user
mode" a "kernel mode" e trasferisce il controllo al sistema
operativo
- in kernel mode sono consentite tutte le istruzioni;
- in user mode, usata per i programmi utente, gll'I/O e alcune altre istruzioni non sono permesse.
- Il sistema operativo esamina quindi i parametri della chiamata per determinare quale chiamata di sistema debba essere eseguita
- 2) Il sistema operativo determina l'indice del servizio
richiesto.
- accedendo a una tabella (tabella di dispatch) che contiene nel k-esimo elemento un puntatore alla procedura che effettua quanto richiesto dalla k-esima chiamata di sistema
- 3) I1 sistema operativo chiama la procedura di servizio.
- Quando l'operazione termina, e la chiamata di sistema ha fine, il controllo viene restituito al programma utente (4), in modo da consentirgli di proseguire con l'istruzione immediatamente successiva alla chiamata di sistema.
- 4) I1 controllo ritorna al programma utente
- 1) I1 programma utente invoca una trap e passa il controllo al
nucleo.
- Anche nei sistemi monolitici, comunque, è possibile avere un certo grado di strutturazione.
- Questa organizzazione suggerisce una struttura di base per il
sistema operativo:
- 1. Un programma principale che richiama la procedura di servizio richiesta.
- 2. Un insieme di procedure di servizio che eseguono le chiamate di sistema.
- 3. Un insieme di procedure di utilità che forniscono il supporto alle procedure di servizio.
- In questo modello a ogni chiamata di sistema corrisponde una procedura di servizio che si prende cura di essa. Le procedure di utilità svolgono compiti richiesti da diverse procedure di servizio, come ad esempio estrarre i dati dai programmi utente.
- Sistemi a strati
- Una generalizzazione dell'approccio strutturale del sistema
monolitico è quella di organizzare il sistema operativo come una
gerarchia di strati, ognuno costruito al di sopra del precedente.
- Il primo sistema progettato in questo modo fu il sistema THE, realizzato alla Technische Hogeschool Eindhoven in Olanda da E.W. Dijkstra (1968) e dai suoi studenti.
- Il sistema THE era un semplice sistema batch per un computer olandese, l'Electrologica X8, che aveva 32 K di parole a 27 bit (a quei tempi i bit erano costosi).
- Il sistema THE aveva 6 livelli:
- Il livello 0 si occupava di allocazione del processore,
avvicendando i processi in corrispondenza delle interruzioni o
della scadenza del timer.
- Sopra il livello 0 il sistema era composto da processi sequenziali, ognuno dei quali poteva essere programmato senza doversi preoccupare del fatto che più di un processo fosse in esecuzione su di un solo processore.
- In altre parole, il livello 0 forniva la multi programmazione della CPU.
- Il livello 1 effettuava la gestione della memoria.
- Esso allocava spazio per i processi nella memoria principale e su un tamburo (o drum, antenato dei moderni hard disk) di 512K parole usato per trattenere parti di processi (pagine) per le quali non vi era spazio in memoria principale.
- Al di sopra del livello 1 i processi non dovevano preoccuparsi del fatto di essere nella memoria principale piuttosto che nel tamburo;
- il software del livello I si preoccupava di far sì che le pagine dei processi fossero presenti nella memoria principale nel momento in cui venivano richieste.
- Il livello 2 gestiva la comunicazione tra ogni processo e la
console dell'operatore.
- Al di sopra di questo livello ogni processo di fatto aveva la sua console di operatore.
- Il livello 3 si prendeva cura di gestire i dispositivi di I/O e
la memorizzazione nei buffer del flusso di informazioni da e per
essi.
- Al di sopra del livello 3 ogni processo poteva accedere a dispositivi di I/O astratti, più semplici e gradevoli rispetto ai dispositivi reali caratterizzati da svariate peculiarità.
- Il livello 4 ospitava i programmi utente.
- Tali programmi non dovevano preoccuparsi dei processi, della memoria, della console o della gestione dell'i/O.
- Il livello 5 ospitava il processo operatore di sistema.
- Il livello 0 si occupava di allocazione del processore,
avvicendando i processi in corrispondenza delle interruzioni o
della scadenza del timer.
- Un'ulteriore generalizzazione del concetto di stratificazione
era presente nel sistema MULTICS, progenitore di UNIX.
- Invece che su livelli, MULTICS era organizzato come una serie di anelli concentrici, in cui gli anelli più interni avevano privilegi superiori rispetto agli esterni.
- Quando una procedura in un anello esterno desiderava chiamare una procedura in un anello interno, doveva effettuare l'analogo di una chiamata di sistema, cioè una istruzione TRAP i cui parametri venivano accuratamente controllati prima che la chiamata potesse procedere.
- Benché l'intero sistema operativo facesse parte dello spazio di indirizzamento di ogni processo MULTICS, l'hardware rendeva possibile la definizione di alcune procedure (in realtà segmenti di memoria) come protette in lettura, scrittura o esecuzione.
- Mentre lo schema a strati del THE era in realtà solo una
convenzione progettuale, poiché tutte le parti del sistema venivano
alla fine collegate insieme in un unico programma oggetto, in
MULTICS il meccanismo ad anelli agiva realmente a tempo di
esecuzione, essendo imposto dall'hardware.
- Il vantaggio del meccanismo ad anelli consiste nel fatto che esso può essere facilmente esteso ai sottosistemi utente. Ad esempio, un professore potrebbe scrivere un programma per controllare e valutare i programmi degli studenti ed eseguirlo nell'anello n, lasciando che i programmi degli studenti vengano eseguiti al livello n+1 in modo che gli studenti stessi non possano modificare i loro voti.
- Una generalizzazione dell'approccio strutturale del sistema
monolitico è quella di organizzare il sistema operativo come una
gerarchia di strati, ognuno costruito al di sopra del precedente.
- Macchine Virtuali
- nel vM/370
- il vM/370 è un sistema a timesharing che fornisce
multiprogrammazione e una macchina estesa in maniera nettamente
separata
- Il cuore del sistema, noto come virtual machine monitor, gira direttamente sull'hardware e realizza la multiprogrammazione, fornendo al livello superiore svariate macchine virtuali
- la macchina virtuale è una copia esatta dell'hardware, compresi il modo utente/nucleo, l'i/O, le interruzioni, e quant'altro esiste su di una macchina reale
- ogni macchina virtuale può eseguire un qualsiasi sistema operativo in grado di girare direttamente sull'hardware
- Alcune macchine virtuali eseguono uno dei discendenti
dell'os/360 per le elaborazioni batch o l'elaborazione di
transazioni, mentre altre eseguono un sistema interattivo
monoutente chiamato CMS (Conversational Monitor System) per utenti
in timesharing.
- Quando un programma CMS esegue una chiamata di sistema, questa viene tradotta in una trap del sistema operativo in esecuzione sulla macchina virtuale e non in una trap del sistema vM/370
- l sistema CMS richiama quindi le normali istruzioni hardware per leggere il suo disco virtuale o quant'altro sia necessario per effettuare la chiamata.
- Queste istruzioni di I/O sono tradotte in trap di vM/37O, che le esegue quindi come parte della sua simulazione dell'hardware reale.
- Separando completamente le funzioni di multiprogrammazione e fornendo una macchina estesa, ognuno dei componenti può essere più semplice, più flessibile e facile da mantenere
- il vM/370 è un sistema a timesharing che fornisce
multiprogrammazione e una macchina estesa in maniera nettamente
separata
- nel Pentium
- Intel implementò una modalità virtuale 8086
- In questa modalità, la macchina si comporta come un 8086 (che è identico all'8088 da un punto di vista dei software), compreso l'indirizzamento a 16 bit e il conseguente limite di memoria di 1 MB
- Questa modalità viene utilizzata da WINDOWS, os/2 e da altri sistemi operativi per eseguire i programmi MS-DOS
- Quando i programmi vengono lanciati in modalità virtuale 8086
ed eseguono istruzioni normali, girano direttamente sull'hardware.
- quando un programma cerca di effettuare una trap nei sistema
operativo per richiamare una chiamata di sistema, o cerca di fare
direttamente l'i/O in modo protetto, si scatena una trap nei
virtual machine monitor che può essere gestita in due modi diversi:
- 1) MS-DOS stesso viene caricato nello spazio virtuale 8086, in modo che il virtual machine monitor rimandi semplicemente la trap a MS-DOS, esattamente come accadrebbe su un 8086 reale. Quando in seguito MS-DOS stesso cerca di effettuare l'i/O, l'operazione viene intercettata ed eseguita dai virtuali machine monitor.
- 2) il virtual machine monitor intercetta la prima trap e porta
esso stesso a compimento l'i/O, essendo a conoscenza di ciò che
fanno le chiamate di sistema MS-DOS e quindi ciò che ci si aspetta
faccia ogni trap.
- Questa variante è meno pulita rispetto alla precedente, poiché corrisponde solo all'emulazione di MS-DOS e non di altri sistemi operativi, come potrebbe invece accadere con la precedente.
- D'altra parte, essa è molto più veloce, poiché risparmia il fastidio di richiamare MS-DOS per effettuare l'i/O.
- Un ulteriore svantaggio nell'eseguire realmente MS-DOS in modo virtuale 8086 è che MS-DOS fa spesso uso del bit di abilitazione/disabilitazione delle interruzioni usando operazioni che devono essere emulate con un costo considerevole.
- quando un programma cerca di effettuare una trap nei sistema
operativo per richiamare una chiamata di sistema, o cerca di fare
direttamente l'i/O in modo protetto, si scatena una trap nei
virtual machine monitor che può essere gestita in due modi diversi:
- Intel implementò una modalità virtuale 8086
- nel vM/370
- UNIX
- il kernel è il cuore del sistema operativo
- ogni processo può interagire col kernel:
- direttamente, attraverso una chiamata di sistema
- indirettamente, quando riceve il permesso di andare in esecuzione
- ogni processo può interagire col kernel:
- Il compito principale del kernel consiste nel controllare e
risolvere i conflitti tra i processi riguardo all'uso della CPU
- la priorità
- è una misura dell'importanza del processo e viene spesso utilizzata per temporizzare i processi
- viene modificata dinamicamente in modo che venga abbassata la priorità dei processi che utilizzano intensivamente la CPU e venga alzata la priorità dei processi a cui da un certo intervallo di tempo non viene assegnata la CPU
- Il kernel seleziona il processo con la priorità più alta che sia pronto ad essere eseguito e gli assegna la CPU
- il processo selezionato dal kernel viene eseguito finché non si
verifica una delle seguenti condizioni:
- 1) Il processo esaurisce il suo intervallo di tempo.
- Un intervallo è un breve periodo di tempo che il kernel assegna al processo, per dare a tutti i processi l'opportunità di venire eseguiti.
- 2) Il processo non può proseguire finché non si verifica un
certo evento.
- Ad esempio, quando un processo legge o scrive dati su un file, è necessario attendere finché i dati non siano stati trasferiti.
- 3) Un processo con una priorità più elevata diviene un
candidato ad entrare in esecuzione perché l'evento di cui era in
attesa si è verificato.
- Il processo corrente viene "scavalcato" dal processo il cui evento si è verificato.
- 1) Il processo esaurisce il suo intervallo di tempo.
- Quando si verifica una delle precedenti condizioni, il kernel interrompe il processo e assegna la CPU ad un altro processo.
- la priorità
- Scheduling dei processi
- è l'algoritmo di selezione del processo da mettere correntemente in esecuzione
- è strutturato in modo tale da garantire che:
- il kernel non lasci passare troppo tempo tra un intervallo di esecuzione e l'intervallo successivo di ogni processo
- i processi scaricati dalla memoria centrale non restino nella memoria di massa troppo a lungo
- ogni processo abbia l'opportunità, prima o poi, di avanzare nell'esecuzione.
- Contesti della CPU
- User mode (modo non privilegiato)
- Kernel mode (modo privilegiato)
- Commutazione di contesto
- si ha quando avviene il cambio di contesto della CPU
- Quando un processo, in esecuzione in modo utente, effettua una chiamata di sistema viene forzata una commutazione di contesto dal modo utente al modo kernel.
- lo stesso processo viene eseguito in modo kernel per servire la chiamata di sistema.
- terminate le operazioni relative alla chiamata di sistema, il kernel forza un'altra commutazione di contesto ritornando all'esecuzione in modo utente del processo.
- Il processo 0, che rappresenta il kernel, non ha alcun compito nel soddisfare la chiamata di sistema
- Commutazione di processo
- si ha quando una commutazione di contesto modifica il processo che l'ha attivata in favore del processo 0 (il kernel)
- Questa situazione usualmente si verifica quando un processo
effettua una chiamata di sistema che lo forza ad attendere un
evento:
- Il processo i, in esecuzione nel modo kernel, si sospende e l'esecuzione passa al processo 0. Il processo 0 seleziona un processo che sia pronto ad entrare in esecuzione. Il processo 0 si sospende a sua volta e viene attivato il processo k, in esecuzione nel modo kernel. Il processo k commuta infine contesto e diventa processo k in esecuzione in modo utente.
- File System
- compito fondamentale del kernel che fornisce l'accesso ai file presenti nei diversi file system.
- In sintesi:
- il kernel del sistema UNIX è un unico programma i cui compiti
sono:
- l'allocazione della CPU tra processi in conflitto e l'accesso ai file.
- La CPU viene assegnata ai processi in modo time-sharing provvedendo alla gestione delle interruzioni inviate da parte dei processi con priorità più elevata.
- Le chiamate di sistema effettuate da un processo vengono servite dal processo stesso eseguito in modo kernel.
- Il processo 0 che rappresenta il kernel, viene eseguito solo quando la CPU deve essere assegnata ad un altro processo.
- Infine i processi accedono al file system in risposta a varie chiamate di sistema.
- il kernel del sistema UNIX è un unico programma i cui compiti
sono:
- il kernel è il cuore del sistema operativo
- Modello Client-Server
- il sistema operativo è diviso in parti, ognuna delle quali
gestisce solo un aspetto del sistema:
- file service
- process service
- terminai service
- memory service
- ogni parte diviene piccola e maneggevole
- In questo modello il kernel deve solo gestire la comunicazione
(attraverso messaggi) tra client e server (ipotesi poco
realistica).
- Alcune funzioni del sistema operativo (come il caricamento dei comandi sui registri dell'interfaccia fisica di I/O) sono difficili, se non impossibili da effettuare per i programmi nello spazio utente.
- Ci sono due modi di affrontare questo problema:
- 1) far sì che alcuni processi server critici (come i device driver di I/O) vengano eseguiti in kernel mode e possano comunicare con gli altri processi mediante i normali meccanismi a messaggi.
- 2) implementare nel kernel una quantità minima di meccanismi,
lasciando le politiche di gestione ai server nello spazio utente.
- Ad esempio, il kernel potrebbe riconoscere che un messaggio inviato a un particolare indirizzo implica prendere il contenuto di quel messaggio e caricarlo nei registri dell'interfaccia di I/O di un disco, per iniziare una lettura dal disco stesso.
- In questo esempio, il nucleo non andrebbe neanche a guardare i byte contenuti nel messaggio per controllare che essi siano validi o significativi; esso dovrebbe copiarli direttamente nei registri di interfaccia del disco (ovviamente bisogna usare qualche schema per limitare l'uso di tali messaggi ai processi autorizzati).
- La separazione tra meccanismo e politiche è un concetto importante; esso ricorre più e più volte e in contesti diversi nei sistemi operativi.
- Inoltre, poiché tutti i server vengono eseguiti in user mode,
essi non hanno accesso diretto all'hardware.
- se un difetto nel file server causa un guasto, il servizi relativi ai file possono interrompersi, ma in genere questo non provocherà l'arresto dell'intera macchina
- Un altro vantaggio del modello client-server è la sua
adattabilità all'utilizzo in sistemi distribuiti.
- Se un client comunica con un server inviandogli messaggi, il client non ha bisogno di sapere se il suo messaggio venga gestito localmente o venga inviato attraverso la rete a un server su di una macchina remota.
- Per quanto concerne il client, in entrambi i casi accade lo stesso: una richiesta viene inviata e una risposta restituita.
- il sistema operativo è diviso in parti, ognuna delle quali
gestisce solo un aspetto del sistema:
- Architettura di Windows NT (dall'alto verso il basso)
- user mode:
- win 16
- ms-dos
- ntvdm
- sottosistemi ambiente (posix, win32, OS/2) e sottosistema integrale (sicurezza)
- kernel mode:
- servizi esecutive
- servizi di sistema
- I/O, componenti dell'esecutive, Microkernel, Astrazione HW, Windows Manager
- Hardware
- user mode:
- Sistemi monolitici