Torna alla pagina di Sistemi Operativi
:: Appunti caotici ::
Lezione 1 Thread
Ciò che si farà in questa lezione sarà vedere i flussi di esecuzione in modo diverso, in particolare quando questi sono fortemente correlati.
Tra le attività tipiche di un'applicazione ricordiamo:
In applicazioni ad alta disponibilità di servizio e basso tempo di risposta (ad esempio server web), la richiesta di esecuzioni di più flussi di controllo nello stesso processo per attività simili (magari anche da utenti diversi) potrebbe rappresentare - e spesso lo rappresenta - un problema.
Una soluzione semplice potrebbe essere attivare tanti processi che erogano il servizio quante sono le richieste dello stesso. Gli svantaggi sono evidenti:
Sarebbe dunque bello se operazioni similari su dati diversi operassero in modo più correlato, magari su un'area di memoria centrale condivisa.
Sappiamo già che un processo è un flusso di esecuzione che ha un suo preciso spazio nella memoria centrale. Il thread è invece un gruppo di flussi di controllo autonomo sullo stesso programma che accedono alla stessa porzione di memoria centrale.
I processi possono essere dunque suddivisi in:
Pur avendo in comune lo stesso codice, due thread diversi hanno comunque contesti specifici su cui operare (quindi registri e stack separati), in modo da poter eseguire operazioni diverse prese da parte diverse del codice. Se utilizzassero stesso stack e registri ovviamente eseguirebbero le stesse cose nello stesso momento.
La condivisione la porzione di dati del processo garantisce quella proprietà di memoria condivisa presupposta nel concetto stesso di thread. Occorre però una sincronizzazione tra i vari flussi, per evitare che leggano dati inconsistenti (perché ad esempio modificati da altri).
...