Argomenti più comuni esame di Sistemi Operativi (Ingegneria Informatica ed Elettronica)
- Monitor
- Gestione thread a livello utente ed a livello nucleo
- Deadlock e condizione necessaria per un deadlock
Descrivere le principali caratteristiche di un Monitor
La realizzazione di programmi con l’utilizzo di semafori può portare facilmente a errori, tra cui uno stallo (deadlock), situazione in cui i processi sono definitivamente bloccati e non può essere eseguito alcun lavoro. Un rimedio a ciò è il Monitor, ossia un ADT (Abstract Data Type) che incapsula i dati, mettendo a disposizione un insieme di funzioni per operare su di essi.
Il Monitor comprende il bounded buffer ed una serie di operazioni definite dal programmatore, necessarie per il trattamento dello stesso e contraddistinte dalla mutua esclusione. I processi possono chiamare le procedure contenute in un monitor ma non possono accedere direttamente alle sue strutture dati interne tramite procedure dichiarate esternamente al Monitor.
Quindi, affinché due processi non entrino contemporaneamente nelle loro sezioni critiche, è sufficiente inserire le loro sezioni critiche tra le procedure del Monitor (ciò assicura che un solo processo alla volta sia attivo al suo interno, poiché il Monitor ha una sola porta d’entrata ed una di uscita).
Dato che nel Monitor la mutua esclusione è gestita dal compilatore (e non dal programmatore), c’è una minore probabilità di errore. Senza ulteriori meccanismi, il rigido vincolo di mutua esclusione del costrutto non permetterebbe sincronizzazioni particolari. Tuttavia, le variabili condizionali, di tipo condition (che possono essere definite tra le altre variabili locali) e le procedure wait e signal (le uniche a poter essere invocate su di esse) forniscono a un programmatore gli strumenti necessari per scrivere un proprio schema di sincronizzazione.
L'operazione wait(), applicata ad una variabile condizionale, permette di sospendere un processo che occupa il monitor, facendo in modo che il processo sparisca temporaneamente dal monitor e venga posto in una coda d'attesa per quella variabile condizionale, dando così via libera a un nuovo processo che desidera entrare nel monitor oppure ad un altro processo pronto, presso una variabile condizionale, a riprendere l'esecuzione.
L'operazione signal() risveglia un processo sospeso sulla variabile condizionale per cui è chiamata (questo processo riprende la propria esecuzione appena ha via libera). In ogni caso, quando non ci sono processi in attesa sulla variabile condizionale per cui è chiamata, il flusso continua senza interruzioni.
-
Sistemi operativi: domande base esame con soluzioni
-
Sistemi operativi - Thread nei sistemi operativi
-
Appunti di Sistemi Operativi
-
Sistemi operativi