Unità di Apprendimento 1: processi sequenziali e paralleli in informatica

Slide sull'Unità di Apprendimento 1. La Pdf esplora i concetti fondamentali dei processi sequenziali e paralleli in informatica, distinguendo tra processi "pesanti" e "leggeri" (thread), il context switch e il multithreading. Questo materiale universitario di Informatica è ideale per lo studio autonomo dei principi di base della gestione dei processi nei sistemi operativi.

Mostra di più

16 pagine

Unità di apprendimento 1
Processi sequenziali
e paralleli
Unità di apprendimento 1
Lezione 3
I thread o “processi leggeri”

Visualizza gratis il Pdf completo

Registrati per accedere all’intero documento e trasformarlo con l’AI.

Anteprima

Unità di apprendimento 1

Processi sequenziali
e paralleli
0110110110101010100110110101010
1010
MOIV
011101010101001010
TONO
TTOLIOLIO
010
101010
1010101001018
011101001010
DIOT
C
OTOOUnità di apprendimento 1
Lezione 3
I thread o "processi leggeri"
0110110110101010100110110101010
1010
MOIV
011101010101001010
TONO
TTOLIOLIO
010
101010
1010101001018
011101001010
DIOT
C
OTOOIn questa lezione impareremo:

  • la differenza tra processi e thread
  • le modalità di utilizzo dei thread nei
    S.O.

Introduzione

Lo sviluppo delle applicazioni è molto diverso a seconda
della loro tipologia: se si pensa ai videogiochi, ai social
network, ai server Internet, etc. vi sono situazioni in cui è
richiesto un alto grado di parallelismo con molteplici
risorse condivise ed altre in cui la cooperazione è molto
ridotta, le attività svolte in parallelo sono quasi totalmente
indipendenti, vi sono poche interazioni e piccole aree di
memoria condivise.
E opportuno in fase di progettazione del software avere
a disposizione più strumenti a seconda di tali esigenze.

Processi "pesanti" e "processi leggeri"

  • I processi che abbiamo studiato sinora sono anche detti
    processi pesanti; sono entità autonome, adatti alla
    descrizione di attività indipendenti con poche risorse
    condivise, poco si prestano alla scrittura di applicazioni
    fortemente cooperanti.
  • Oltre al processo viene definita una nuova entità a esso
    molto simile ma con particolari caratteristiche che
    agevolano la risoluzione di problemi con alta
    cooperazione e condivisione di risorse: i thread o
    processi leggeri che realizzano "delle attività" piuttosto
    che un "compito completo"

Processi "pesanti" e "processi leggeri"

Processi

=
programma che evolve
condividendo la CPU con altri
processi + risorse utilizzate.
Ciascuno ha un proprio spazio
di
indirizzamento:
non
condividono nessuna area di
memoria.

Thread

= parte del processo a cui
viene assegnata la CPU.
Funzione che viene eseguita
all'interno di un processo
pesante.
Può
essere
attivato
in
parallelo ad altri thread dello
stesso processo.
Tutti i thread di un processo condividono con esso le risorse, risiedono
nello stesso spazio di indirizzamento e hanno accesso a tutti i suoi dati.

Processi "pesanti" e "processi leggeri"

. Il context switch per i processi è un'operazione
complessa che richiede tempo utile di CPU; per
questo motivo al processo viene "assegnato
l'aggettivo di pesante", perché richiede "pesanti"
elaborazioni per passare dallo stato di pronto a
quello di esecuzione.

Processi "pesanti" e "processi leggeri"

. Il termine "processo leggero" (LightWeight Process
LWP)" vuole indicare che l'implementazione di un
thread è meno onerosa di quella di un vero
processo.
Con multithreading
si indica la
molteplicità di flussi di esecuzione all'interno di un
processo pesante.

THREAD o processo leggero

Per evolvere parallelamente agli altri thread o processi che si
contendono la CPU, il thread ha un insieme di propri elementi
che lo caratterizzano chiamato TCB (Thread Control Block),
simile al PCB per quanto visto per i processi.
Il TCB è quindi simile al PCB e contiene i registri, lo stack, le variabili "locali" e lo stato
esecuzione: dati "globali" e TCB "locale" rappresentano lo stato di esecuzione del singolo
thread.

THREAD o processo leggero

Rappresentazione di tre thread in esecuzione all'interno di un
processo di cui eseguono tutti un segmento di codice:
Processo
PCB
file
dati
codice
IP
TCB
TCB
TCB
IP
stack
IP
stack
IP
stack
Traccia
Traccia
in esecuzione in esecuzione
Traccia
in esecuzione
L'utilizzo dei thread offre la
possibilità di sfruttare meglio le
architetture multiprocessore e
di comunicare e scambiare
informazioni
in
modo
immediato.

Soluzioni adottate: single threading vs multithreading

In base alla capacità di un sistema di gestire a livello kernel
i thread, distinguiamo tra quattro possibili scenari, 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.

Soluzioni adottate: single threading vs multithreading

Queste situazioni le possiamo
riscontrare in quattro diversi
ambienti operativi:

  • MS-DOS: un solo processo
    utente e un solo thread;
  • UNIX: più processi utente
    ciascuno
    con un solo
    thread;
  • run time di Java (JVM): un
    solo processo, più thread;
  • Linux,
    Windows
    NT,
    Solaris: più processi utente
    ciascuno con più thread.
    MS-DOS
    Processo singolo
    Thread singolo
    I
    UNIX
    Processi multipli
    Thread singolo per processo
    I
    1
    JAVA runtime engine
    Processo singolo
    Thread multipli per processo
    I
    I
    I
    NT, Solaris, MACH, OS/2, Linux
    I
    I
    I
    I
    Processi multipli
    Thread multipli per processo

Realizzazione di thread

Gli ambienti operativi hanno due modalità per realizzare un
sistema multithreading:

  • se la gestione dei thread è affidata al kernel tramite
    chiamate di sistema si parla di Kernel-Level (es. ambienti
    Linux e Windows);
  • se i thread vengono realizzati da software mediante
    procedure e librerie si parla di User-Level (es. ambiente UNIX
    che non implementa thread ma questi vengono generati all'interno dei
    suoi processi).
  • esistono anche soluzioni miste, che combinano le
    proprietà di entrambi i meccanismi (es. ambiente Solaris).

Lo standard POSIX

Il modello ANSI/IEEE per i thread è definito dallo standard POSIX
(Portable Operating System Interface for Computing Environments), il
quale comprende un insieme di direttive per le interfacce applicative
(API) dei sistemi operativi. Lo scopo è quello di realizzare programmi
applicativi portabili in ambienti diversi.
I thread di POSIX sono chiamati Pthread.
Le principali applicazioni dei thread sono quelle di permettere di
organizzare l'esecuzione di lavori con attività in foreground e in
background.
Es: nei fogli di calcolo sono usati nelle procedure di ricalcolo
automatico, nei word processor per la reimpaginazione o il controllo
ortografico, nel Web per le ricerche nei motori o nei database.

Stati di un thread

Il ciclo di vita di un
thread è:

  • legato al ciclo di vita
    del processo che l'ha
    generato;
  • indipendente dal fatto
    che il processo sia in
    esecuzione o in attesa.
    In rosso le transizioni sotto il controllo del
    sistema, in verde quelle sotto il controllo
    del programma.
    Idle
    = non ancora avviato
    start()
    4
    notify()
    I/O done
    Ready
    notify All()
    Quanto finito
    Dispatch
    Attesa
    finita
    sleep()
    Running
    Sleeping
    Richiesta
    di I/O
    wait()
    stop()
    Blocked
    Waiting
    Dead

Riepilogo

Esecuzione
del codice
Risorse
utilizzate
LWP
Un thread
un processo
acronimo
ha due
componenti
anche
per
Thread
detti
realizzare
Un thread
più processi
Threath Control
Block-TCB
Più thread
più processi
Statica
Dinamica
Puntatore al
PBC padre
Codice
Dati
Registri
Stack
Heap
Più thread
un processo
Processi
leggeri
Multi
threading
descritto
dal

Non hai trovato quello che cercavi?

Esplora altri argomenti nella Algor library o crea direttamente i tuoi materiali con l’AI.