deny_1515
Ominide
3 min. di lettura
Vota

Concetti Chiave

  • Un thread è un flusso di controllo che opera in parallelo con altri thread all'interno dello stesso processo, condividendo risorse e spazio di indirizzamento.
  • I thread mantengono caratteristiche simili ai processi pesanti, come un ID, un program counter, registri, stato di esecuzione, contesto e stack di esecuzione.
  • La gestione dei thread può avvenire a livello utente, dove l'utente controlla l'esecuzione tramite librerie specifiche, favorendo il parallelismo.
  • A livello kernel, il kernel gestisce i thread come processi, migliorando l'efficienza in termini di tempo d'esecuzione e gestione delle risorse.
  • Una soluzione mista combina vantaggi di entrambi i livelli, mappando thread utente su thread kernel, permettendo esecuzioni parallele su processori diversi.

Indice

  1. I Thread
  2. User-Level
  3. Kernel-Level
  4. Soluzione mista

I Thread

Un thread è un flusso di controllo che può essere attivato in parallelo ad altri thread nell’ambito di uno stesso processo e quindi nell’esecuzione dello stesso programma.

Un thread è un “segmento di codice” che viene eseguito in modo sequenziale all’interno di un processo pesante e 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.

Per evolvere parallelamente agli altri thread o processi che si contendono la CPU, il thread mantiene comunque un insieme di caratteristiche comuni a processi pesanti:

    un identificatore di thread (ID);
    un program counter;
    un insieme di registri;
    uno stato di esecuzione (running, ready, blocked);
    un contesto che è salvato quando il thread non è in esecuzione;
    uno stack di esecuzione;
    uno spazio di memoria privato per le variabili locali.

In base alla capacità di un sistema di gestire a livello kernel i thread ottenuti dalla combinazione delle possibili situazioni:

    singolo processo e thread singolo;
    singolo processo e thread multiplo per processo;
    multiplo processo e thread singolo per processo;
    multiplo processo e thread multiplo per processo.

User-Level

È l’utente che decide l’avvicendarsi dell’esecuzione dei thread. Servono apposite librerie che interagiscono con il kernel.
Orientato al parallelismo.

Kernel-Level

A livello di nucleo la gestione dei thread affidata al kernel tramite chiamate di sistema e quindi è il kernel che gestisce i thread come tutti gli altri processi, li deve schedulare, sospendere e risvegliare assegnandogli le risorse di sistema.
Il livello kernel è più efficiente. Gestisce meglio il tempo d’esecuzione, la concorrenza e la competizione.

Soluzione mista

Esistono anche soluzioni miste che combina le proprietà di entrambi i meccanismi permettendo di creare a livello utente dei thread che solo però preventivamente devono essere definiti a livello di kernel (i thread utente vengono “mappati” sopra i thread a livello kernel, quindi non possono essere in numero superiore a essi), e lasciano all’utente le politiche di scheduling e di sincronizzazione. I principali vantaggi sono che thread della stessa applicazione possono essere eseguiti in parallelo su processori diversi e che la chiamata al kernel da parte di un thread non blocca necessariamente il processo che lo ha generato.

Domande da interrogazione

  1. Che cos'è un thread e quali sono le sue caratteristiche principali?
  2. Un thread è un flusso di controllo che può essere eseguito in parallelo ad altri thread all'interno dello stesso processo. Condivide le risorse del processo, risiede nello stesso spazio di indirizzamento e ha accesso a tutti i suoi dati. Mantiene caratteristiche comuni ai processi pesanti, come un ID, un program counter, registri, stato di esecuzione, contesto salvato, stack di esecuzione e spazio di memoria privato per le variabili locali.

  3. Qual è la differenza tra la gestione dei thread a livello utente e a livello kernel?
  4. A livello utente, l'esecuzione dei thread è decisa dall'utente tramite librerie che interagiscono con il kernel, mentre a livello kernel, la gestione è affidata al kernel stesso tramite chiamate di sistema. Il kernel gestisce i thread come tutti gli altri processi, occupandosi di schedulazione, sospensione e risveglio, risultando più efficiente nella gestione del tempo d'esecuzione, concorrenza e competizione.

  5. Quali sono i vantaggi di una soluzione mista nella gestione dei thread?
  6. Una soluzione mista combina le proprietà dei meccanismi a livello utente e kernel, permettendo di creare thread a livello utente che devono essere definiti a livello kernel. I vantaggi principali includono l'esecuzione parallela dei thread della stessa applicazione su processori diversi e il fatto che una chiamata al kernel da parte di un thread non blocca necessariamente il processo che lo ha generato.

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community