Gestione del processore
Concetti di base
[modifica]Consideriamo per semplicità di avere una tradizionale architettura basata su una CPU singola. Questa comincia oggi ad essere un'assunzione poco realistica, ma è utile per illustrare le problematiche di base della gestione della CPU (Central Processing Unit).
Il processore, o unità centrale di elaborazione (o CPU, dall'inglese Central Processing Unit), è una risorsa hardware la cui gestione presenta due problemi:
- In ogni momento, più task possono essere pronti per l'esecuzione, ma solo uno può essere eseguito da un processore; pertanto, occorre decidere quale task eseguire, facendo attendere gli altri. È compito del sistema operativo anche gestire la comunicazione tra processi ed evitare i tempi morti.
- Quando è in esecuzione il sistema operativo, il processore deve poter accedere a tutte le risorse dell'elaboratore; ma, per assicurare l'integrità del sistema, quando è in esecuzione un programma applicativo, il processore deve poter eseguire solo le operazioni consentite dal sistema operativo. Pertanto, occorre fare in modo che il processore funzioni in due modalità: modalità supervisore o modalità utente:
- Nella modalità utente (detta anche “stato utente” o “stato del problema”) il processore esegue il codice di un utente.
- Nella modalità supervisore (detta anche modalità kernel) il processore esegue il codice del sistema operativo. La CPU passa automaticamente in questa modalità quando avviene un interrupt. Le istruzioni di I/O sono istruzioni privilegiate e possono essere eseguite solamente in questa modalità, pertanto non possono essere gestite direttamente dai programmi. Per questo motivo quando un programma vuole eseguire un'operazione di I/O effettua una chiamata di sistema, ovvero richiede al sistema operativo di effettuare una specifica operazione di I/O. Il sistema operativo controlla che i parametri passati siano legali e corretti ed in tal caso gestisce l'I/O.
Il binomio “modalità kernel” e “modalità utente” è ancora valido per la maggior parte dei sistemi moderni; nei sistemi più sicuri è auspicabile avere più di due modalità, così da poter utilizzare meccanismi di protezione a grana più fine.
Architetture multiprocessore
[modifica]Sono oggi sempre più diffuse architetture hardware basate su processori multipli, sia nella versione base con un involucro del processore che contiene più unità di elaborazione (commercialmente chiamate "core"), sia nelle versioni in cui ci sono schede separate per diversi processori, passando poi per architetture in cui molti computer lavorano in parallelo, per arrivare infine alle architetture distribuite del cosiddetto "cloud computing". Le metodologie adottate per queste architetture si sono parecchio evolute nel corso del tempo, migliorando nettamente sia l'efficienza che l'affidabilità. Le soluzioni variano a seconda del livello di parallelismo dei processori. I più comuni sistemi operativi commerciali (MS-Windows, Linux, ...) gestiscono senza problemi CPU multiple ("multi core") mentre per livelli superiori servono soluzioni più mirate.