08 Jul 2023, 8:07 AM
08 Jul 2023, 8:07 AM

2. Componenti di un sistema operativo

Interprete dei comandi

Elemento principale di interfaccia tra SO e utente è l'interprete dei comandi (shell), che ha il compito di prendere i comandi specificati dall’utente e di eseguirli. Esso può fornire diversi tipi di interfaccia utente, come CLI, GUI, o batch.

System Calls e API

Fra SO e i comandi dettati da un utente si interpongono system call e API(Application Program Interface).

Una system call è un meccanismo usato a livello utente per richiedere un servizio a livello kernel e permettono di eseguire operazioni riservate, quali l'accesso all'hardware o alla memoria. Le system call sono specifiche di ogni SO, alcuni esempi sono open(), read(), write(), wait().

Per quanto riguarda le API, queste, a seconda del SO, invocano le system call e restituiscono i risultati all'utente, aggiungendo un ulteriore livello di astrazione. Le API non fanno quindi parte del kernel. Un esempio di API è l'app del meteo nel nostro cellulare. Essa mette in comunicazione il nostro cellulare con i server del meteo.
Le 2 API piú comuni sono Win32 API (insieme di API usate su Windows) e POSIX (Portable Operating System Interface for Unix, insieme di API usate su tutte le versioni di UNIX).

Implementazione delle System Calls

Tipicamente, viene associato un numero ad ogni system call. È compito poi dell’interfaccia alle chiamate di sistema di mantenere una tabella che associa del codice (le system calls vere e proprie) ad ogni numero. L’interfaccia invoca la system call nel kernel del SO e poi ritorna lo stato della system call e gli eventuali valori di ritorno. In questo modo il chiamante non ha necessitá di conoscere nulla di come la system call è implementata.
In breve, quando viene invocata una system call. accadono i seguenti eventi:

  1. La system call viene invocata dal programma utente
  2. Si passa dalla modalità utente (user mode) alla modalità kernel (kernel mode). Questa operazione è detta trap.
  3. Viene usata la tabella per chiamare la system call corretta
  4. Si passa dalla modalità kernel alla modalità utente ritornando il risultato.

Ma quando invoco la system call come fa il sistema operativo a passare i parametri al processo che si occupa di eseguirla?
Si possono passare principalmente in 3 modi: