Sopra l'hardware si costruisce una serie di strati software che costituiscono il sistema operativo (SO). Questo ha il compito di utilizzare il componente fisico e renderlo disponibile agli strati software superiori, semplificandone l’uso e mascherandone la complessità. I software si suddividono in:
L’obiettivo principale del sistema operativo è rendere le risorse facilmente utilizzabili da uno strato superiore, attraverso semplificazione, astrazione e virtualizzazione.
La virtualizzazione è un processo che rende disponibili risorse fisiche come se fossero illimitate e indipendenti, simulandole a livello software.
Lo strato più vicino alla macchina fisica è il kernel, che gestisce il processore. Esso astrae l'interazione con il processore, fornendo a ogni processo un processore virtuale.
Definiamo un processo come un programma attivo, cioè in esecuzione. Più processi possono derivare da uno stesso programma.
Per garantire l'esecuzione di più processi su un numero limitato di CPU fisiche, si usa la condivisione temporale (time-sharing): ogni processo riceve un intervallo (quantum) di tempo per usare la CPU.
L'insieme di politiche usato per decidere quale processo eseguire è detto scheduling.
Un processo si può trovare in uno di questi stati
Durante l’esecuzione, i processi passano ciclicamente tra questi stati, utilizzando l’algoritmo round-robin, che assicura una rotazione equa.
Il cambio di contesto (switching) comporta un costo, poiché lo stato del processo corrente va salvato e quello del nuovo processo caricato.
Il kernel gestisce tutto ciò con una tabella dei processi e si occupa anche della comunicazione tra processi (inter-process communication).
Il gestore della memoria consente ai processi di accedere alla memoria tramite indirizzi logici, isolandoli e proteggendoli l’uno dall'altro.
Per farlo si usa la Memory Management Unit (MMU), cioè un modulo hardware che mappa la memoria logica a quella fisica. In questo modo ogni processo ha l’impressione di partire da indirizzo
La memoria può essere gestita in due modi:
Definiamo il fenomeno di frammentazione come spazio sprecato nella memoria a causa dell’allocazione fissa o non ottimale.
Quando la RAM è piena, i processi in stato wait
possono essere spostati su disco (memoria di massa), liberando spazio. Questo è detto meccanismo di swapping.
Generalmente le politiche di swapping sono:
Il gestore delle periferiche è un modulo che semplifica la comunicazione con le periferiche, rendendole accessibili tramite driver, cioè un programma che definisce come interagire con una periferica fisica, offrendo un'interfaccia standard.
I driver possono includere meccanismi di condivisione della risorsa, ad esempio usando delle code di accesso.
Per comunicare con le periferiche si possono utilizzare due metodi:
Il Direct Memory Address (DMA) è coprocessore programmabile dalla CPU che gestisce direttamente il trasferimento di dati tra periferiche e memoria, liberando la CPU da questo compito.