L’astrazione di Processo incorpora due concetti importanti.
Esecuzione
Possesso di Risorse (e Protezione)
Threads
Un thread è un flusso di controllo sequenziale:
Vantaggi nell’uso dei thread:
La capacità di un sistema operativo di consentire l’esecuzione di più thread all’interno di un singolo processo
MS-DOS supporta un unico processo (unico thread).
Alcuni sist. UNIX, consentono l’utilizzo di più processi, ognuno dei quali con un singolo thread.
La macchina virtuale Java è un singolo processo con thread multipli.
Processi e thread multipli si trovano in sistemi operativi come Windows, Solaris, Mac OS, ed alcune versioni recenti di UNIX (ad es. Linux 2.6).
User Level Thread (ULT).
Kernel level Thread (KLT) anche chiamati:
La gestione dei thread è eseguita a livello applicativo.
Il kernel non ha coscienza dell’esistenza dei thread
Vantaggi
Svantaggi
Il Kernel gestisce le informazioni di contesto sia per il processo sia per i threads.
La gestione dei thread non è fatta a livello applicativo.
Lo scheduling è eseguito sui thread.
Windows adotta questo approccio.
Il kernel è in grado di schedulare più thread dello stesso processo su più processori.
Se un thread di un processo è “blocked”,il kernel potrà schedulare un altro thread dello stesso processo.
Anche le routine del Kernel possono essere sviluppate con un approccio multithreaded.
Il trasferimento del controllo da un thread ad un altro, pure se nell’ambito di uno stesso processo, richiede un context switch a livello kernel.
Più thread al livello d’utente corrispondono a ad un numero inferiore o uguale di thread al livello del nucleo.
La creazione del thread avviene nello spazio utente.
Il grosso dello scheduling e sincronizzazione è fatta nello spazio utente.
Esempio: Solaris.
Tradizionalmente, le architetture a singolo processore sono viste come macchine sequenziali.
Supponendo un overlap perfetto a livello di istruzione tra le vaire fasi (fetch, preparazione operandi, esecuzione), la massima velocità del processore viene fissata:
Al fine di incrementare il parallelismo dell’esecuzione di istruzioni, esistono due approcci:
Single Instruction Single Data (SISD) stream.
Single Instruction Multiple Data (SIMD) stream.
Multiple Instruction Single Data (MISD) stream (mai implementata).
Multiple Instruction Multiple Data (MIMD).
Il kernel può essere eseguito su qualsiasi processore.
É possibile eseguire differenti “task” del kernel in parallelo (su più processori).
Tipicamente ogni processore ha un suo scheduler che agisce su un insieme comune di processi o threads.
1. Introduzione ai Sistemi Operativi
5. Scheduling nei sistemi mono-processore
6. Threads, SMP
8. Scheduling Multiprocessore e Real-Time
9. Gestione dei processi nei sistemi operativi Unix/Linux e Window...
10. Introduzione alla Programmazione Concorrente
11. Sincronizzazione nel modello ad ambiente globale
12. Problemi di cooperazione nel modello ad ambiente globale
14. Sincronizzazione nel modello ad ambiente locale
15. Deadlock
16. Programmazione Multithread
18. Memoria Virtuale
20. Il File System
21. Primitive di sincronizzazione nel kernel Linux
22. Esercitazione: System call per la gestione dei processi
23. Esercitazione: Inteprocess Communication e Shared Memory
24. Esercitazione: System Call per la gestione dei semafori in Linu...
25. Esercitazione: Problema dei Produttori e dei Consumatori
26. Posix Threads
P. Ancilotti, M.Boari, A. Ciampolini, G. Lipari, “Sistemi Operativi”, Mc-Graw-Hill (Cap. 2, par. 10)
W. Stallings, “Operating Systems : Internals and Design Principles (5th Edition) ”, Prentice Hall (Cap. 4)