Appunti Classe Quarta Parte Tre Versione Ridotta 2
-
Upload
cristian-golfarini -
Category
Documents
-
view
224 -
download
0
Transcript of Appunti Classe Quarta Parte Tre Versione Ridotta 2
-
8/12/2019 Appunti Classe Quarta Parte Tre Versione Ridotta 2
1/5
1. singolo processo utente e singolo thread (MS-DOS);
2. singolo processo utente e multiplo thread per processo (JAVA);
3. multiplo processo utente e singolo thread per processo (UNIX);
4. multiplo processo utente e multiplo thread per processo (Linux)
Il base alla capacit di un sistema di gestire i threada livello del
kernel, si distinguono 4 possibili combinazioni di utilizzo
Soluzioni adottate
Gli ambienti operativi hanno due modalit principali per realizzare
un sistema multithreading a seconda che il kernel sia o meno a
conoscenza della loro esistenza, cio se i threadvengono costruiti
mediante chiamate al kernel oppure da software attraverso
procedure e librerie.
Nel primo caso si parla di Kernel-Level, nel secondo di User-Level
-
8/12/2019 Appunti Classe Quarta Parte Tre Versione Ridotta 2
2/5
Kernel-Level
In questo caso il kernel gestisce i threadal pari di tutti gli altri
processi assegnando loro risorse di sistema. Se un threadsi
sospende pu evolvere un secondo threadgenerato dallo stesso
processo poich tra loro schedulati autonomamente. Lo stesso
kernel pu essere scritto come un sistema multithread
Linux, Unix e Windows realizzando ambienti Kernel-Level
User-Level
I threada livello utente vengono implementati grazie a dellelibrerie apposite (thread package) che contengono funzioni per
creare, terminare, sincronizzare i threade per realizzare lo
scheduling. N la schedulazione n lo switching con il cambio di
contesto coinvolgono il kernel, che gestisce solo i processi. Ithreadrisultano pertanto di propriet e gestione esclusiva del
processo che li ha creati. Date le loro caratteristiche possono
essere implementati su qualunque SO: lambiente tipico per
lUser-Level la JVM
-
8/12/2019 Appunti Classe Quarta Parte Tre Versione Ridotta 2
3/5
Come i processi, anche un threaddurante il ciclo di vita pu avere
diversi stati. Inoltre la vita di un thread legata a quella del
processo che li genera dal momento che se un processo termina
allora terminano anche tutti i suoi thread: esso risulta invece
indipendente durante la vita del processo, cio evolve senza
considerare che il processo sia in esecuzione oppure in attesa
Segue il diagramma sul ciclo di vita dei thread, nel quale le
transizioni sotto il controllo del sistema vengono indicate in blu
mentre quelle effettuate da istruzioni, ovvero dove il controllo delprogramma, in verde
Stati di un thread
-
8/12/2019 Appunti Classe Quarta Parte Tre Versione Ridotta 2
4/5
Idle
Ready
Running Sleeping
Waiting
Blocked
Dead
start
notify ()
notify All()
sleep ()
wait ()
stop ()
I/O done
richiesta I/O
Quando finito DispatchAttesa finita
Idle: prima di essere
avviato
Dead: terminate le
sue istruzioni
Blocked: in attesa di
completare lI/O
Blocked: in attesa di
I/O
Waiting: in attesa di
un evento
Running: in
esecuzione
Ready: pronto ma in
attesa della CPU
Sleeping: sospeso un
periodo
-
8/12/2019 Appunti Classe Quarta Parte Tre Versione Ridotta 2
5/5
Un threadviene detto Idlequando non ancora avviato e viene
posto nello stato di Readydove condivide una apposita coda con
tutti i threade i processi che attendono la CPU, gestiti dalle
diverse politiche di scheduling, alternando Runninge Ready
Dallesecuzione passa allo stato Blockedin caso di richieste dioperazioni I/O e nello stato di Waitingquando esegue chiamate
bloccanti che ne causano la sospensione: non appena la causa
del blocco viene rimossa (p.e. con dati dallHD) il threadritorna
nello stato Ready. Dallo stato di Running pu passare anche allostato Sleeping, che uno stato in cui effettua cicli di attesa per poi
essere rimesso in coda tra i processi. Dallo stato di Running un
threadpu passare allo stato di Dead, qualora abbia eseguito
tutte le proprie istruzioni
Se un threadsi blocca per richiesta di I/O e passa in Bloched, il
sistema potrebbe decidere di eseguire un altro threaddello stesso
processo oppure un threaddi altri processi: se User-Level (thread
Java) non vede i threaded esegue un altro processo; se Kernel-
Level (thread C) viene gestito lo scheduling a livello thread