Appunti Classe Quarta Parte Tre Versione Ridotta

6

Click here to load reader

description

Appunti Classe Quarta Parte Tre Versione Ridotta

Transcript of Appunti Classe Quarta Parte Tre Versione Ridotta

Page 1: Appunti Classe Quarta Parte Tre Versione Ridotta

I thread

Page 2: Appunti Classe Quarta Parte Tre Versione Ridotta

Oltre al processo viene definita una nuova entità ad esso molto simile ma con particolari caratteristiche che agevolano la risoluzione di problemi con alta cooperazione e condivisione di risorse: i cosiddetti thread

Al modello a processi che implementa una insieme di macchine virtuali (una per processo) si affianca quindi un modello a thread, che definisce un sistema di macchine virtuali che realizzano delle attività piuttosto che un compito completoI processi descritti fino a questo momento vengono anche definiti processi pesanti, mentre i thread, sono detti processi leggeri

• Processi pesantiIl processo può essere visto come l’insieme della sua immagine e delle risorse che sta utilizzando. Viene definito spazio di indirizzamento l’insieme dell’immagine di un processo e le risorse da esso possedute

Page 3: Appunti Classe Quarta Parte Tre Versione Ridotta

Una caratteristica fondamentale dei processi è che ciascuno di essi ha un proprio spazio di indirizzamento, ovvero due processi non condividono nessuna area di memoria

Quando un processo si sospende per renderne operativo un altro, le operazioni che il SO deve compiere sono molteplici e complesse poiché richiedono il salvataggio del contesto del processo che si sospende e il ripristino di quello che inizia o riprende la sua esecuzione. Questa operazione è detta di context switch e richiede tempo utile alla CPU, sprecato per gestire operazioni non produttive: viene indicato con il nome di overhead Per questo motivo al processo viene attribuito l’aggettivo pesante

Obiettivo di ogni SO è quello di ridurre al minimo l’overhead migliorando gli algoritmi di scheduling

Page 4: Appunti Classe Quarta Parte Tre Versione Ridotta

• Processi leggeriIl processo in evoluzione può essere visto come l’unione di due componenti: le risorse che utilizza comprese nel suo spazio di indirizzamento e l’esecuzione di un codice, cioè il flusso di evoluzione del programma Il thread è una parte del processo alla quale viene assegnata la CPU

Un thread risulta allora un flusso di controllo (che può essere attivato in parallelo ad altri) nell’ambito di uno stesso processo e quindi nell’esecuzione di un programma

In altre parole un thread è un segmento di codice che viene eseguito in modo sequenziale all’interno di un processo pesante; tutti i thread definiti all’interno di un processo ne condividono le risorse, risiedono nello stesso spazio di indirizzamento e hanno accesso a tutti i suoi dati

Page 5: Appunti Classe Quarta Parte Tre Versione Ridotta

Ogni thread viene eseguito in parallelo agli altri mandati in esecuzione dallo stesso processo con il vantaggio di condividere lo spazio di indirizzamento e quindi le strutture datiIl termine processo leggero vuole indicare che l’implementazione di un thread è meno onerosa di quella di un vero processo

Per evolvere parallelamente agli altri thread o processi, il thread mantiene comunque un insieme di caratteristiche comuni ai processi pesanti. I più importanti:

• un identificatore di thread (ID);

• un program counter;

• un insieme di registri;

• uno stato di esecuzione;

•uno stack di esecuzione;

• uno spazio di memoria privato per le variabili locali

Page 6: Appunti Classe Quarta Parte Tre Versione Ridotta

Risulta più vantaggioso avere i thread rispetto ai processi in quanto le operazioni di context switch sono più semplici e veloci dal momento che essi condividono i vari dati

I thread di un programma usano il SO mediante system call, i quali a loro volta utilizzano dati e tabelle di sistema dedicate al processo che devono essere progettate per essere utilizzate da più thread simultaneamente senza che vengano persi i dati

L’uso dei thread in un programma comporta vantaggi, quali:

• miglioramento delle performance dei programmi, specialmente in applicazioni di tipo grafico;

• semplificano il codice: per eseguire cicli è possibile utilizzare una classe timer che notifica una certa quantità di tempo trascorsa;

• garantiscono automaticamente la condivisione della memoria del processo cui appartengono