In questo articolo comprenderemo il modello multithreading nel sistema operativo.
Modello multithread:
Il multithreading consente all'applicazione di dividere il proprio compito in thread individuali. In multithread, lo stesso processo o attività può essere eseguito in base al numero di thread, oppure possiamo dire che esiste più di un thread per eseguire l'attività in multithreading. Con l'uso del multithreading è possibile ottenere il multitasking.
tag html
Lo svantaggio principale dei sistemi a thread singolo è che è possibile eseguire solo un'attività alla volta, quindi per superare lo svantaggio di questo threading singolo, esiste il multithreading che consente di eseguire più attività.
Per esempio:
Nell'esempio precedente, client1, client2 e client3 accedono al server Web senza alcuna attesa. Nel multithreading è possibile eseguire più attività contemporaneamente.
In un sistema operativo, i thread sono divisi in thread a livello utente e thread a livello kernel. I thread a livello utente gestivano forme indipendenti sopra il kernel e quindi gestiti senza alcun supporto del kernel. D'altro canto, il sistema operativo gestisce direttamente i thread a livello di kernel. Tuttavia, deve esserci una forma di relazione tra i thread a livello utente e a livello kernel.
Esistono tre modelli multithreading consolidati che classificano queste relazioni sono:
- Modello multithreading molti a uno
- Modello multithreading uno a uno
- Modelli multithreading molti a molti
Modello multithreading molti a uno:
Il modello molti a uno mappa molti thread a livello utente su un thread del kernel. Questo tipo di relazione facilita un ambiente efficace di cambio di contesto, facilmente implementabile anche sul kernel semplice senza supporto di thread.
css testo in grassetto
Lo svantaggio di questo modello è che, poiché esiste una sola pianificazione dei thread a livello di kernel alla volta, questo modello non può sfruttare l'accelerazione hardware offerta dai processi multithread o dai sistemi multiprocessore. In questo, tutta la gestione dei thread viene eseguita nello spazio utente. Se arriva il blocco, questo modello blocca l’intero sistema.
Nella figura sopra, il modello molti a uno associa tutti i thread a livello utente a singoli thread a livello kernel.
Modello multithreading uno a uno
Il modello uno-a-uno mappa un singolo thread a livello utente su un singolo thread a livello kernel. Questo tipo di relazione facilita l'esecuzione di più thread in parallelo. Tuttavia, questo vantaggio presenta il suo svantaggio. La generazione di ogni nuovo thread utente deve includere la creazione di un thread del kernel corrispondente che causa un sovraccarico, che può ostacolare le prestazioni del processo genitore. La serie Windows e i sistemi operativi Linux cercano di affrontare questo problema limitando la crescita del numero di thread.
Nella figura sopra, un modello associa quel thread a livello utente a un singolo thread a livello kernel.
25 c a k
Modello multithreading modello Many to Many
In questo tipo di modello sono presenti diversi thread a livello utente e diversi thread a livello kernel. Il numero di thread del kernel creati dipende da una particolare applicazione. Lo sviluppatore può creare tanti thread su entrambi i livelli ma potrebbe non essere lo stesso. Il modello molti a molti è un compromesso tra gli altri due modelli. In questo modello, se un thread effettua una chiamata di sistema bloccante, il kernel può pianificare l'esecuzione di un altro thread. Inoltre, con l'introduzione dei thread multipli, la complessità non è presente come nei modelli precedenti. Sebbene questo modello consenta la creazione di più thread del kernel, con questo modello non è possibile ottenere la vera concorrenza. Questo perché il kernel può pianificare solo un processo alla volta.
Molte o molte versioni del modello multithreading associano diversi thread a livello utente alla stessa o a una varietà molto inferiore di thread a livello kernel nella figura sopra.