Un generico sistema operativo moderno si compone di alcune parti
standard, più o meno ben definite. Il
kernel: un gruppo
di funzioni fondamentali, strettamente interconnesse fra loro e
con l'hardware, che vengono eseguite con il privilegio massimo
disponibile sulla macchina ossia in modalità kernel; il kernel
fornisce le funzionalità di base per tutte le altre componenti
del sistema operativo, che assolvono le loro funzioni servendosi
dei servizi che esso offre. A seconda del tipo di sistema
operativo il kernel può inglobare altre parti (kernel
classico, monolitico o modulare) o fornire solo funzioni
base delegando più funzioni possibile a oggetti/gestori esterni
(microkernel).
- Il gestore di file system: si occupa di esaudire le
richieste di accesso alle memorie di massa. Viene utilizzato
ogni volta che si accede a un file su disco, e oltre a
fornire i dati richiesti tiene traccia dei file aperti, dei
permessi di accesso ai file. Inoltre si occupa anche e
soprattutto dell'astrazione logica dei dati memorizzati sul
computer (directory, ecc).
- Un gestore di memoria virtuale, che alloca la memoria
richiesta dai programmi e dal sistema operativo stesso,
salva sulla memoria di massa le zone di memoria
temporaneamente non usate dai programmi e garantisce che le
pagine swappate vengano riportate in memoria se
richieste.
- Uno scheduler che scandisce il tempo di esecuzione dei
vari processi e assicura che ciascuno di essi venga eseguito
per il tempo richiesto. Normalmente lo scheduler gestisce
anche lo stato dei processi e può sospenderne
l'esecuzione nel caso questi siano in attesa senza fare
nulla (esempio classico è la richiesta di dati da disco).
Nei sistemi operativi realtime lo scheduler si occupa
anche di garantire una timeline, cioè un tempo
massimo di completamento per ciascun task in esecuzione, ed
è notevolmente più complesso.
- Uno spooler che riceve dai programmi i dati da stampare
e li stampa in successione, permettendo ai programmi di
proseguire senza dover attendere la fine del processo di
stampa.
- Una interfaccia utente (Shell) che permette agli esseri
umani di interagire con la macchina.
A seconda dei casi, un particolare sistema operativo può
avere tutti questi componenti o solo alcuni. Una ulteriore
differenza fra i sistemi operativi è data dal tipo di
comunicazione fra le varie componenti: i sistemi operativi
classici sono basati su chiamate dirette di funzioni, mentre
molti sistemi operativi moderni, soprattutto quelli che adottano
microkernel, si basano sul message passing, sullo scambio
di messaggi fra le loro varie parti e fra il sistema operativo e
i programmi che fa girare.