Please enable JavaScript.
Coggle requires JavaScript to display documents.
SISTEMI OPERATIVI - Coggle Diagram
SISTEMI OPERATIVI
THREAD
è un flusso di controllo relativo ad un dato processo. molti SO consentono ad un processo di avere più flussi.
generazione di thead(condivide lo stesso spazio di memoria del proc princ, quindi possono accedere alle stesse risorse) ≠ generazione di proc figli(hanno il proprio spazio di mem separato dal proc princ, il che li rende più isolati e sicuri ma più lenti da creare e con maggior uso di risorse)
-
-
-
MULTITHREADING
MODELLO MOLTI-A-MOLTI-> Un numero variabile di thread utente è associato a un numero minore o uguale di thread del kernel. E' flessibile e NON ha limitazioni degli altri modelli.
MODELLO A DUE LIVELLI-> versione agg-> Permette di mappare alcuni thread utente direttamente su thread del kernel, se necessario aumentando flessibilità e controllo.
MODELLO UNO-A-UNO-> ogni thread utente è associato a un thread del kernel. Questo aumenta la concorrenza e permette esec su più processori
MODELLO MOLTI-A-UNO-> molti thread utente sono associati su un solo thread del kernel. Efficiente ma non permette l'esecuzione parallela su più processori.
CHIAMATE DI SIST
FORK()->se un thread chiama una fork si potrebbe, a seconda della specifica app: Duplicare tt thread, Duplicare solo il thread che chiama Fork
EXEC()-> funzionamento analogo: si procede a Rimpiazzare l'intero processo inclusi tt i suoi thread.
semantica diversa,nel caso thread, rispetto processi.
PROBLEMATICHE THREAD:
GESTIONE DEI SEGNALI
-
-
-
Trattare un SEGNALE può significare: IGNORARLO, CONDURRE ALLA TERMINAZIONE PROGRAMMA, CONDURRE INTERVENTO STABILITO DAL SIGNAL MANAGER
-
GRUPPI DI THREAD->Nei server multi-thread si potrebbero ESAURIRE le risorse di sistema se non viene posto limite alla creazione di thread concorrenti; SOLUZIONE-> creare numerosi thread all'avvio del processo e metterli dentro ad un pool dove restano in attesa di lavoro.
-
LWP(LightWeight Process)-> struttura intermedia tra user thread e kernel thread denominata LWP; Appare come un PROCESSORE VIRTUALE sul quale schedulare l'esecuzione.
ATTIVAZIONE SCHEDULATORE->fornire UPCALL(chiamate thread) un meccanismo di comunicazione dal kernel alla libreria dei thread.---> La libreria di thread esegue UPCALL MANAGER per processore virtuale. Provvede alla gestione di eventi diretti al thread.
PTHREAD(POSIX THREADS)-> sono un insieme di API standard definite dalla norma POSIX(PORTABLE OPERATING SYSTEM INTERFACE).-->le api di Pthread possono essere considerate come librerie di thread A LIVELLO UTENTE
-
SINCRONIZZAZIONE
IL PROBLEMA DELLA S->Quando più processi accedono a dati condivisi, può verificarsi una situazione di INCONSISTENZA dei dati. I meccanismi di sincronizzazione assicurano che processi cooperanti condividano lo spazio di indirizzi in modo ordinato.
IL PROBLEMA DELLA SEZ
Ogni thread può avere una porzione di codice che deve essere eseguita in maniera esclusiva, chiamata SEZIONE CRITICA. Soluzioni:
-
PROGRESSO->se NESSUNO è nella sezione critica, solo i thread che ne fanno richiesta partecipano alla decisione su chi entra.
ATTESA LIMITATA->c'è un limite al numero di volte che un thread deve aspettare prima di entrare nella sezione critica.
SOLUZIONE SOFTWARE:ALGORITMO DI BAKERY->che assegna a OGNI thread un token per decidere l'ordine d'accesso alla sezione critica.
HW X S->Nei sistemi MONOPROCESSORE, si possono disabilitare gli interrupt per evitare interruzioni durante l'accesso alle sezioni critiche. Nei sistemi MULTIPROCESSORE, questa tecnica è inefficiente, quindi si usano istruzioni hardware atomiche per garantire l'accesso sicuro ai dati.
SEMAFORI
sono strumenti di sincronizzazione usati per controllare l'accesso concorrente a risorse condivise da più processi o thread. Un semaforo è rappresentato da una variabile intera che può assumere vari valori e viene gestito tramite due operazioni fondamentali:
acquire() (o P): Se il valore del semaforo è positivo, viene decrementato e il processo può accedere alla risorsa. Se il valore è zero o negativo, il processo deve attendere finché la risorsa non diventa disponibile
release() (o V): Incrementa il valore del semaforo e sblocca un processo in attesa, permettendogli di accedere alla risorsa.
Semaforo BINARIO: Assume solo i valori 0 e 1, spesso usato per implementare la mutua esclusione (mutex), garantendo che solo un processo acceda alla risorsa alla volta.
Semaforo GENERALIZZATO: Il valore può essere qualsiasi intero positivo, utile quando ci sono più istanze di una risorsa disponibile.
Busy waiting: Un processo in attesa continua a controllare attivamente il semaforo, consumando risorse della CPU. Per evitare ciò, si possono usare code di attesa.
PROBLEMI TIPICI DI S
STALLI(DEADLOCK)-> due o più processi aspettano un evento che può essere causato solo da uno dei processi in attesa.
BLOCCO INDEFINITO(STARVATION)-> i processi attendono indefinitamente all'interno del semaforo. Un processo può non essere mai rimosso dalla coda del semaforo.
MONITOR(cenni)-> Un costrutto ad alto livello che fornisce un modo strutturato di sincronizzazione. Ogni thread può accedere solo a una sezione di codice monitor alla volta. I metodi wait e signal gestiscono la sincronizzazione dei thread tramite variabili di tipo condition.
-
-