Avanti Indietro Indice

8. Come fa il computer a fare diverse cose contemporaneamente?

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 interrupt di orologio. Lo scheduler ferma qualunque processo sia attualmente in esecuzione, lo sospende sul posto e passa il controllo ad 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 ad un ripensamento e lo fanno in modo piuttosto povero. Il multitasking efficiente ed affidabile costituisce buona parte di ciò che rende Linux superiore per le applicazioni di rete, le comunicazioni e i servizi Web.


Avanti Indietro Indice