Virtualizzazione risorse hardware (fornitore di servizi)
Gestione e Coordinamento
E’ quella parte del SO che risiede in memoria principale.
Contiene le funzioni più utilizzate del SO.
Chiamato anche nucleo.
Al livello kernel (nucleo) la macchina virtuale realizzata dal SO:
Al livello gestione della memoria la macchina virtuale realizzata dal SO:
Al livello gestione periferiche la macchina virtuale realizzata dal SO:
Al livello file system la macchina virtuale realizzata dal S.O.
Come è invocato un Sistema Operativo (qual è il flusso di controllo)?
Qual è l’architettura di un Sistema Operativo?
I sistemi operativi sono guidati dalle interruzioni (sincrone ed asincrone).
Gran parte del nucleo viene eseguito come interrupt handler.
Gli interrupt (sia hardware che software) guidano l’avvicendamento dei processi.
Qualunque richiesta di un servizio di sistema (ad es. l’apertura di un file, la lettura dati da un file, la comunicazione con un altro processo ecc…) deve essere inoltrata attraverso una system call.
La funzione di una system call, perciò, consiste nel soddisfare le richieste di un determinato servizio di sistema o di acquisizione di una certa risorsa.
L’esecuzione di una system call, da parte di un processo-utente, corrisponde all’attivazione di una parte del Kernel a favore dello stesso processo, per espletare il servizio o per acquisire la risorsa richiesta.
Quando il kernel, o parte di esso, viene eseguito a favore di un processo ai fini dell’acquisizione di una risorsa, si dice che tale processo viene eseguito in kernel mode.
Una volta acquisita la risorsa dal kernel, il processo-utente ritorna nello stato user mode.
La transizione dallo stato user mode a quello di kernel mode viene effettuata mediante la chiamata di una delle system call; mentre la transizione inversa avviene all’atto della chiamata di return della system call stessa.
Tipicamente le librerie run time dei linguaggi di programmazione rendono disponibili apposite routine di interfaccia che trasformano una tradizionale chiamata di procedura in una SVC, con scambio dei parametri tramite registri del processore e/o specifiche aree di memoria.
Ad esempio il linguaggio C e il C++ consentono di eseguire direttamente da programma le chiamate di sistema, usando delle apposite funzioni di libreria.
Microsoft Windows rende disponibili le S.C. tramite l’API Win32 (application programmer interface).
La CPU carica il “boot program” dalla ROM (ad es. dal BIOS1 di un PC).
Boot program:
1 E’ un software indispensabile per il boot del PC. Acronimo di “Basic Input/Output System”, il bios è un software built-in che contiene un insieme di minimale di procedure, tra cui un caricatore, driver della tastiera, del video, del disco e una serie di handler di periferiche contenute nella piastra madre. Tipicamente Il BIOS è contenuto in una ROM montata sulla piastra madre.
Siccome la RAM è più veloce della ROM, molti produttori sviluppano sistemi nei quali il BIOS è copiato da ROM a RAM ogni volta che il computer è riavviato. Questa tecnica è nota come “shadowing”. Molti PC moderni dispongono di un BIOS su memorie flash, il che significa che il BIOS può essere modificato e configurato, se necessario.
Inizializzazione del SO:
Dopo che i processi di base sono stati creati,il SO può eseguire dei programmi utente, se disponibili,altrimenti il SO esegue il cosiddetto “idle loop“.
idle loop:
Il SO si “sveglia” a seguito di :
Due modi di esecuzione:
I disp. Hardware invocano il SO ad un predefinita locazione.
IL SO salva lo stato del programma utente.
Il SO identifica il dispositivo che ha causato l’interrupt.
IL SO esegue la routine associata all’interrupt.
Il SO recupera lo stato del programma utente (se possibile) oppure assegna la CPU ad un altro.
IL SO esegue l’istruzione RTI per restituire il controllo al programma utente.
Il programma utente continua la sua esecuzione esattamente dallo stesso punto in cui era stato sospeso.
Punto chiave: Nessuna di queste operazioni è “visibile” al programma utente.
Anche in questo caso la risorsa che ha provocato un’eccezione invoca il SO ad una locazione predefinita;
Il SO identifica la causa dell’eccezione (ad es., “divide by 0″).
Se il programma utente ha specificato un “exception handler”, allora il SO configura il programma utente in modo che possa chiamare il suo handler.
IL SO esegue l’istruzione RTI per restituire il controllo al programma utente.
Se il programma utente non ha specificato un handler, allora il SO “uccide” il processo e affida il controllo della CPU ad un altro programma utente, se disponibile.
Punto chiave: gli effetti delle eccezioni sono visibili al programma utente e causano un’alterazione del flusso di controllo.
Il programma utente esegue un istruzione di trap (system call).
L’effetto di questa istruzione è quello di invocare il SO ad un predeterminata locazione (trap handler).
Il SO identifica il servizio richiesto e i parametri (ad es. open(filename, O_RDONLY)).
Il SO esegue il servizio richiesto.
Il SO configura un registro atto a contenere i risultati del servizio.
Il SO esegue un RTI per restituire il controllo al programma utente.
Il programma utente riceve i risultati e continua la sua elaborazione.
Punto Chiave: al programma utente, la system call appare come un normale funzione di libreria che può essere eseguito sotto il suo controllo.
Il SO è un programma di notevole complessità e dimensione.
E’ quindi fondamentale applicare durante il suo progetto e realizzazione le più sofisticate tecniche proprie dell’ingegneria del software, al fine di garantire:
I primi sistemi operativi erano costituiti da un unico programma, senza particolari suddivisioni.
Il SO era costituito da un insieme di procedure di servizio, solitamente scritte in assembler, a ciascuna delle quali corrispondeva una system call.
Approccio adeguato per sistemi semplici e non multiprogrammati, come MS-DOS.
Approccio inadeguato al crescere della complessità dei sistemi multiprogrammati.
Sistemi operativi realizzati secondo le tecniche della programmazione strutturata.
Il SO è organizzato in moduli, ognuno destinato ad offrire una delle funzionalità del sistema, e caratterizzato da:
Ogni modifica all’implementazione, che mantiene inalterata la sua interfaccia, non ha influenza sul resto del sistema.
Strutturato come una collezione di moduli caricabili che possono essere collegati o scollegati dal kernel a runtime
SO modulari, organizzati in una struttura gerarchica.
Le interazioni hanno luogo solo tra livelli adiacenti:
Es.: il sistema operativo THE organizzato in 4 livelli.
Il microkernel implementa solo i meccanismi essenziali.
Le strategie sono implementate all’esterno del kernel, da processi di sistema (in user mode).
I gestori delle risorse sono particolari processi di sistema, spesso indicati come server (file server, terminal server, printer server, …).
Quando un processo applicativo (client) deve usare una risorsa, deve interagire con un server attraverso i meccanismi di comunicazione forniti dal microkernel.
Vantaggi: maggiore modularità, portabilità, estensibilità.
Svantaggi: perdita di efficienza legata alle frequenti comunicazioni inter-processo.
Esempi: Mac OS, MINIX 3, Windows (microkernel ibrido).
Struttura modulare per renderlo più flessibile.
Basata su un’architettura a microkernel ibrida:
1. Introduzione ai Sistemi Operativi
5. Scheduling nei sistemi mono-processore
6. Threads, SMP
8. Scheduling Multiprocessore e Real-Time
9. Gestione dei processi nei sistemi operativi Unix/Linux e Window...
10. Introduzione alla Programmazione Concorrente
11. Sincronizzazione nel modello ad ambiente globale
12. Problemi di cooperazione nel modello ad ambiente globale
14. Sincronizzazione nel modello ad ambiente locale
15. Deadlock
16. Programmazione Multithread
18. Memoria Virtuale
20. Il File System
21. Primitive di sincronizzazione nel kernel Linux
22. Esercitazione: System call per la gestione dei processi
23. Esercitazione: Inteprocess Communication e Shared Memory
24. Esercitazione: System Call per la gestione dei semafori in Linu...
25. Esercitazione: Problema dei Produttori e dei Consumatori
26. Posix Threads
P. Ancilotti, M.Boari, A. Ciampolini, G. Lipari, “Sistemi Operativi”, Mc-Graw-Hill (Cap.1, Par. 1.4)