I computer moderni sono costituiti da una struttura hardware interna molto complessa: processori, dischi di memoria, schede video, schede di rete e cosi via… Tuttavia il programmatore medio non conosce il funzionamento di tutti questi componenti (e non deve farlo), nell’utilizzare le risorse del calcolatore esso è aiutato dal sistema operativo. Il compito del sistema operativo è quello di fornire ai programmatori (e quindi ai programmi da loro implementati) un modello del computer migliore, più semplice e chiaro. Esso deve permettere una gestione semplificata delle risorse. In una parola esso deve fornire “astrazione”.

Tutti abbiamo avuto a che fare con almeno un sistema operativo, basta pensare alle distribuzioni Microsoft Windows, Mac OS o Linux oppure ai diversi sistemi portatili come Google Android, Apple IOS o Windows Mobile; tuttavia non dobbiamo farci ingannare: l’interfaccia con cui utilizziamo il computer, che sia essa grafica (Graphical User Interface) o testuale (Shell) fa raramente parte del sistema operativo.

Kernel Mode vs. User Mode

Tutti i “programmi” in esecuzione sul nostro computer vengono eseguiti (normalmente) in due modalità operative distinte: modalità kernel o modalità user. Il sistema operativo viene eseguito in modalità kernel, questa modalità garantisce pieno accesso all’hardware e permette l’esecuzione di tutte le istruzioni dell’ISA (Set d’Istruzioni dell’Architettura). Il resto del software viene invece eseguito in modalità utente, in questa modalità i programmi possono eseguire un ristretto numero d’istruzioni dell’ISA e si devono interfacciare con il S.O. per accedere all’hardware. Questo sistema permette di salvaguardare l’uso delle risorse e di proteggere il funzionamento del computer.

Kernel Mode:

  • Il codice in esecuzione sul calcolatore ha accesso completo e senza restrizioni all’hardware sottostante;
  • Il processo può fare riferimento a qualsiasi area della memoria;
  • Il processo in esecuzione può eseguire qualsiasi istruzione appartenente all’ISA del processore;
  • Errori in modalità kernel implicano errori critici e blocchi del sistema (la famosa Blue Death Screen presente in alcune versione di Microsoft Windows).

User Mode:

  • Il codice in esecuzione non ha possibilità di accedere direttamente all’hardware sottostante, specialmente alla memoria;
  • Il processo in esecuzione può eseguire un ristretto numero d’istruzioni dell’ISA;
  • Errori in modalità user pregiudicano solo il funzionamento dei processi coinvolti.

Le modalità kernel/user sono gestite direttamente dall’hardware della CPU, se un programma utente cerca di fare qualcosa che non è di sua competenza viene generata una eccezione che blocca immediatamente il funzionamento del programma. Il passaggio dalla modalità utente alla modalità kernel avviene tramite la chiamata di una System Call o di una eccezione. Il procedimento opposto avviene invece tramite una procedura di ritorno di sistema (istruzione IRET).

Ring di Intel

Abbiamo visto come il software in esecuzione su un calcolatore venga suddiviso in due modalità d’esecuzione. Tuttavia l’architettura Intel originare prevedeva l’esistenza di quattro anelli concentrici con priorità e compiti differenti.
Le specifiche originali prevedevano:

  • Il primo anello doveva essere riservato al solo sistema operativo, eseguito in modalità kernel;
  • Il secondo anello era riservato ai servizi del sistema operativo;
  • Il terzo anello doveva contenere le estensioni, da eseguire in modalità utente;
  • Il quarto anello doveva contenere tutte le applicazioni utente, eseguite in user mode.

Questa architettura non è però stata adottata dai progettisti di sistemi operativi, la struttura odierna prevede:

  • Il primo anello è usato dal sistema operativo e dai suoi servizi;
  • Il secondo è il terzo anello sono inutilizzati;
  • Il quarto anello contiene tutte le altre applicazioni eseguiti in user mode.
Arichitettura ad anelli nei Sistemi Operativi
Arichitettura ad anelli nei Sistemi Operativi