Corso di Sistemi Operativi

Funzioni di un SO: protezione delle risorse

 

Un sistema dinamico complesso come un calcolatore è soggetto ad errori, guasti e anomalie, che non è sempre possibile prevedere e riconoscere in tempo.
Al SO è affidato il compito di conoscere i possibili errori hardware e software che si possono verificare in un qualsiasi punto del sistema (nella CPU, nella memoria, nei dispositivi di I/O e nei programmi utente); inoltre il SO deve essere in grado di intercettare ogni errore e di intraprendere (se possibile) un’azione appropriata per tentare di ripristinare il corretto funzionamento, cercando di assicurare la consistenza dell’elaborazione.

Un primo importante meccanismo di protezione adoperato da tutte le moderne CPU è l’hardware dual mode, che permette di distinguere due diversi livelli di esecuzione delle istruzioni:
- user mode, che è la normale modalità di esecuzione per i programmi utente,
- kernel mode, che è una modalità di esecuzione privilegiata in cui è possibile eseguire delle particolari istruzioni (dette appunto istruzioni privilegiate) che sono vietate in user mode.
La CPU mantiene un bit di stato per verificare, istante per istante, il suo livello di esecuzione.

Il cuore del SO, detto nucleo o kernel, è l’unico insieme di processi che possono eseguire in kernel mode e, quindi, accedere alle istruzioni privilegiate.
Tutti gli altri programmi, sia utente che di sistema, vengono eseguiti sempre in user mode.

Alcuni errori dei programmi utente possono essere rilevati dall’hardware e gestiti dal SO per mezzo del meccanismo delle trap (trappola): se durante l’esecuzione di un programma l’hardware rileva un’operazione non consentita (ad es. un tentativo di eseguire un’istruzione privilegiata in user mode), scatta una “trap”, cioè il processo corrente viene interrotto e viene passato il controllo al SO che si occupa di gestire opportunamente la situazione.
Poiché non tutti gli errori possono essere rilevati dall’hardware, il SO deve essere provvisto di strumenti software propri, preposti alla protezione degli elementi vitali del sistema quali memoria, CPU, dispositivi di I/O, etc.

Nei sistemi operativi multiuser, in cui più utenti possono accedere contemporanemente ad un calcolatore, sono necessari degli ulteriori meccanismi di protezione.
In UNIX e nei sistemi da esso derivati, ogni utente possiede un proprio account, per accedere al quale deve identificarsi (spesso si usa il termine loggarsi), cioè specificare all’accesso il proprio nome di login e una password (entrambi obbligatori).
In questo modo possono accedere alla macchina solo utenti registrati dall’amministatore di sistema (detto anche superuser), impedendo l’intrusione da parte di persone non autorizzate.

Affinché un sistema multiprogrammato funzioni correttamente, bisogna predisporre dei meccanismi di protezione per difendere le risorse utilizzate dai vari processi in esecuzione e il SO stesso, da interazioni indesiderate, attacchi o danneggiamenti (volontari o no) da parte di altri processi.

Ogni SO può utilizzare un proprio modello di protezione per stabilire chi può accedere a cosa, utilizzando i processi come soggetti il cui potere di interferenza viene limitato con meccanismi di vario tipo.

Il file system può essere protetto associando ad ogni file dei diritti di accesso, che consentano di controllare il modo in cui i veri processi possono usare i file.
Un classico meccanismo di protezione dei file è quello usato da UNIX, in cui i file hanno, tra gli attributi, dei bit di accesso, che indicano come e se il file è accessibile dal proprietario, dagli utenti appertenenti allo stesso gruppo del proprietario e da tutti gli altri utenti del sistema.
Ritornendo con maggior dettaglio su questo argomento nel secondo capitolo.

La memoria principale può essere protetta permettendone l’accesso solo tramite un chipset particolare, detto Memory Management Unit o MMU, che confina gli accessi di ogni processo ad un proprio spazio di indirizzamento logico, mappando tali indirizzi logici nei corrispondenti indirizzi della memoria fisica, la cui associazione è nota solo durante la rilocazione o l’esecuzione (dipendentemente dal tipo di gestione della memoria).
Il concetto di rilocazione verrà presentato e chiarito nelle parti seguenti del corso.

La protezione della CPU viene solitamente realizzata tramite un apposito gestore software che si occupa di assegnare e togliere la CPU ai processi al momento giusto (secondo un algoritmo scelto dai progettisti del sistema), impedendo che un processo possa accaparrarsi indebitamente il processore impedendo od ostacolando l’esecuzione degli altri processi.
Per permettere operazioni di I/O sicure, esse vengono realizzate tramite delle chiamate di sistema, che sono l’argomento della prossima lezione.

 

Torna all'indice Generale del corso di Corso di Sistemi Operativi di Software Planet