3) Quali soluzioni esistono per realizzare i thread?

Per i Thread esistono soluzioni realizzative:

    nel kernel (kernel-level thread):

    vantaggio: integrazione degli strumenti nel kernel

    svantaggio: soluzione meno efficiente rispetto di quelle realizzare al livello applicativo

    a livello applicativo (user-level thread):

    vantaggio: possibilità di variare le politiche secondo necessità

    svantaggio: interferenza con le politiche di kernel

    miste (FastThread):

    vantaggio: possibilità di integrare le due politiche secondo necessità ed ottenere i vantaggi di entrambe

La realizzazione dei processi leggeri senza modifica del kernel implica il problema delle primitive sospensive: se un thread esegue una primitiva sospensiva, viene sospeso l'intero processo (e quindi anche tutti gli altri thread).

Rimedi:

    Uso di primitive ad-hoc, che non interessano il kernel

    Uso di primitive solamente non sospensive (select e primitive asincrone) in un wrapper (il codice è detto jacket) che avvolge la chiamata alla primitiva e garantisce la non sospensione.

Realizzativamente vengono implementati alcuni modelli di organizzazione dei thread

    Dispatcher/worker model:

    un thread dispatcher legge le richieste di servizi dalla mailbox di sistema

    dopo aver esaminato la richiesta, sceglie un thread inattivo (worker) e gli affida una richiesta, probabilmente scrivendo un puntatore al messaggio in una parola di memoria associata al thread; quindi risveglia il thread

    il thread cerca nella cache comune per vedere se la richiesta può essere soddisfatta. In caso negativo invia un messaggio al disco e si sospende, permettendo così ad un altro thread di andare in esecuzione

    Team model:

    non c’è il dispatcher; ogni thread guarda nella mailbox. Poichè può accadere che un thread non possa soddisfare una richiesta, è necessario che i thread, prima di guardare nella mailbox, guardino nella coda delle richieste inevase

    Pipeline model:

    i thread si passano i dati in sequenza (modello non adatto per un file server, ma può essere adatto per altre situazioni)

Strumenti di sincronizzazione tra thread:

 

 


Back
Index
Next