Non lo fa, in realtà. I computer possono svolgere soltanto un task (o
processo) alla volta. Ma un computer può cambiare task molto
rapidamente e indurre i lenti esseri umani a pensare che sta facendo
diverse cose contemporaneamente. Questo viene chiamato
timesharing (condivisione di tempo).
Uno dei compiti del kernel è gestire il timesharing. Ha una parte
chiamata scheduler (pianificatore) che contiene
informazioni relative a tutti gli altri processi (a parte il kernel)
del vostro repertorio. Ogni sessantesimo di secondo nel kernel fa
scattare un timer e viene generato un clock di interrupt. Lo
scheduler ferma qualunque processo sia attualmente in esecuzione, lo
sospende sul posto e passa il controllo a un altro processo.
Un sessantesimo di secondo può non sembrare una grande quantità di
tempo. Ma per i microprocessori odierni è sufficiente per eseguire
decine di migliaia di istruzioni macchina, che si possono tradurre in
una gran mole di lavoro. Quindi anche se ci sono molti processi
ciascuno di essi può fare molte cose nella porzione di tempo a sua
disposizione.
In pratica non sempre un programma ottiene la sua intera porzione di
tempo. Se scatta un interrupt da un dispositivo I/O il kernel ferma
effettivamente il task corrente, esegue il gestore dell'interrupt e
poi ritorna al task corrente. Una tempesta di interrupt ad alta
priorità può scombinare il normale funzionamento dei processi; questo
fenomeno viene chiamato thrashing e per fortuna è molto
difficile da indurre negli Unix moderni.
Infatti la velocità dei programmi solo molto di rado è limitata dalla
quantità di tempo macchina a loro disposizione (ci sono alcune
eccezioni a questa regola, quali il suono o la generazione di grafica
3D). Molto più spesso dei ritardi si generano quando il programma deve
attendere dei dati da un disco o da una connessione di rete.
Un sistema operativo che può di norma gestire più processi
simultaneamente è detto ``multitasking''. La famiglia di sistemi
operativi Unix è stata progettata fin dall'inizio per il multitasking
e lo fa molto bene, in modo molto più efficace rispetto a Windows o al
Mac OS ai quali il multitasking è stato appiccicato a posteriori in
seguito a un ripensamento e lo fanno in modo piuttosto povero. Il
multitasking efficiente e affidabile costituisce buona parte di ciò
che rende Linux superiore per le applicazioni di rete, le
comunicazioni e i servizi Web.