Sistemi operativi/Funzioni base: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Riga 103:
 
==== La protezione hardware ====
Con l'uso di un sistema operativo, l'elaboratore è utilizzato da almeno due utenti simultanei: l'operatore di sistema, che ''utilizza'' il sistema operativo per far funzionare in modo efficiente l'elaboratore; e l'utente che ha consegnato all'operatore il programma applicativo e i dati, che utilizza il programma applicativo per elaborare i propri dati.
La protezione hardware è l'insieme di dispositivi elettronici che assicurano che un programma applicativo non possa eseguire operazioni che danneggino l'esecuzione di altri programmi.
Nei sistemi multiprogrammati ci possono essere altri utenti simultanei.
Si suddivide in: protezione della CPU, protezione della memoria, protezione di ingresso/uscita.
 
La protezione della memoria consiste in un circuito che verifica ogni accesso alla memoria e blocca il programma se utilizza indirizzi di memoria inferiori a una soglia fissata.
Se un programma contiene degli errori o comunque degli algoritmi che usano le risorse in modo non economicamente conveniente (per esempio, impiegano dei minuti per eseguire un calcolo che potrebbe essere eseguito in pochi secondi), danneggia gli altri utenti.
Il sistema operativo si trova interamente nella memoria bassa, cioè sotto la soglia.
Siccome i programmi applicativi spesso contengono difetti, un sistema di elaborazione dati multiutente deve impedire ai programmi applicativi tali comportamenti devianti e dannosi.
Usando tale protezione, nessun programma applicativo può sovrascrivere la memoria occupata dal sistema operativo stesso.
 
Ogni tentativo del genere provocherebbe l'immediata terminazione del programma applicativo e il passaggio al programma successivo.
Il problema non si presenta per i difetti che può avere il sistema operativo stesso, in quanto, se il sistema operativo genera un malfunzionamento, comunque il funzionamento del software applicativo è compromesso.
La protezione del processore consiste in un timer che viene attivato all'inizio dell'elaborazione con un valore pari al tempo massimo previsto per l'elaborazione.
 
Se l'elaborazione termina prima che il timer abbia esaurito il suo tempo, il timer viene spento.
Quindi l'obiettivo è fare in modo che qualunque comportamento possa avere un programma applicativo, questo non possa danneggiare l'esecuzione del sistema operativo e di altri programmi.
Se invece il timer scatta quando l'elaborazione è ancora in corso, il controllo passa al sistema operativo che termina l'esecuzione del programma e passa il controllo al programma successivo.
Questo era semplicementi impossibile nei primi elaboratori negli anni '50 e nei primi microprocessori (quelli a 8 bit).
La protezione di ingresso/uscita consiste nel fatto che i programmi applicativi non possono effettuare direttamente operazioni di ingresso/uscita, ma possono solo richiedere al sistema operativo di effettuare tali operazioni.
 
Quando il sistema operativo riceve una richiesta del genere, valuta se rispetta i requisiti dell'applicazione, e in caso affermativo la effettua per conto dell'applicazione e poi torna il controllo all'applicazione.
Per renderlo possibile sono state apportate modifiche all'hardware dell'elaboratore.
Tali accorgimenti tecnici prendono il nome di "protezione hardware".
 
La protezione hardware è quindi l'insieme didei dispositivi elettronici che assicuranopermettono al sistema operativo di assicurare che un programma applicativo non possa eseguire operazioni che danneggino l'esecuzione di altri programmi.
 
La protezione hardware si basa essenzialmente su tre concetti: il registro base, il timer, e la modalità del processore.
 
Il registro base contiene l'indirizzo di memoria a partire dal quale viene caricato il programma applicativo.
Le posizioni di memoria che precedono tale indirizzo sono quelle che contengono codice e dati del sistema operativo.
 
Tutte le volte che il processore emette un indirizzo sul bus indirizzi, per leggere un dato, per scrivere un dato, o per caricare un'istruzione, un circuito verifica che tale indirizzo non sia inferiore al registro base.
In caso negativo, cioè se il programma applicativo tenta di accedere a una posizione di memoria riservata al sistema operativo, viene generato un interrupt e il controllo torna al sistema operativo, che arresta il programma e passa al programma successivo.
 
Il timer è un dispositivo che viene impostato da un'apposita istruzione ad un certo intervallo di tempo, e quando tale tempo scade, invia un interrupt che passa il controllo al sistema operativo.
Prima di lanciare un programma applicativo, il sistema operativo imposta il timer al tempo massimo previsto per l'esecuzione.
Se invece il timerprogramma scattaapplicativo quandonon ha ancora terminato l'elaborazioneesecuzione è ancoradopo intale corsotempo, il controllotimer passa il controllo al sistema operativo che terminaarresta l'esecuzione delil programma e passa il controllo al programma successivo.
 
Il processore ha (almeno) due modalità di funzionamento:
* La modalità sistema (detta anche modalità protetta, o modalità supervisore, o modalità kernel).
* La modalità utente.
 
La modalità sistema è quella priva di qualunque limitazione.
Il processore è in modalità sistema solo quando è in esecuzione il codice del sistema operativo.
 
La modalità utente è quella sottoposta a varie limitazioni.
Il processore è in modalità utente quando è in esecuzione il codice applicativo, o anche il codice del sistema operativo che non richiede i privilegi propri della modalità sistema.
 
Le istruzioni di alcuni tipi, dette istruzioni privilegiate, possono essere eseguite solo in modalità sistema.
Esse sono quelle che svolgono i seguenti compiti:
* Abilitazione e disabilitazione degli interrupt.
* Ingresso/uscita (input/output).
* Cambio di modalità del processore.
* Impostazione del registro base.
* Impostazione del timer.
 
Il fatto che le istruzioni di ingresso/uscita siano privilegiate costringe i programmi applicativi a invocare il sistema operativo per effettuare qualunque operazione di ingresso/uscita.
Questo genera un continuo rimpallo del controllo tra il codice applicativo e il codice di sistema.
 
Quando il sistema operativo lancia l'applicazione, pone il processore in modalità utente, e quando il controllo torna al sistema operativo a causa della termina dell'applicazione il processore torna in modalità sistema.
 
Ma come fa l'applicazione a chiedere al sistema operativo di eseguire un'operatione di ingresso/uscita, dato che non può saltare direttamente nel codice del sistema operativo?
 
Per risolvere questo problema è stata introdotta una nuova istruzione, la "chiamata di sistema" (in inglese "system call" o "supervisor call").
Eseguendo tale istruzione il processore passa automaticamente in modalità sistema.
 
==== Il flusso di controllo del sistema operativo ====