Proposte di esercizi per il compito di Sistemi Operativi A-B-C

Esercizio 1:

Dire quali delle seguenti operazioni possono essere permesse in modalità utente:

1. disabilitazione delle interruzioni

2. Invio di un comando ad un dispositivo

3. invocazione di una system call

Motivare la risposta.

Soluzione:
1. La disabilitazione delle interruzioni non può essere permessa in modalità utente, altrimenti un processo potrebbe impedire il riconoscimento delle interruzioni del timer e di conseguenza potrebbe impedire l'attivazione dello scheduler, monopolizzando in tal modo il processore.

2. No, i processi utente potrebbero inviare comandi contradditori o sbagliati impedendo ad altri processi di utilizzare correttamente il dispositivo.

3. certamente si, l'invocazione delle system call permette ai processi utente di accedere alle funzioni del sistema operativo.


Esercizio 2:

Fare un esempio di codice del sistema operativo che non può essere scritto in linguaggi ad alto livello (quali C) e spiegare il perchè.

Soluzione:
All'atto della commutazione di contesto, il salvataggio dei registri generali deve essere scritto in linguaggio macchina perchè i linguaggi ad alto livello non permettono di indirizzare i singoli registri del processore.


Esercizio 3:

Si considerino 7 job che arrivano in sequenza ad un sistema batch, con tempi di esecuzione rispettivamente di 15, 24, 13, 6, 21, 32, 15 (in minuti). Si schedulino i job in ordine FIFO (First In First Out -- cioe' in ordine di arrivo) e SJF, e si valuti il tempo di turnaround e il throughput.

Soluzione:

Il tempo di turnaround e' il tempo medio di permanenza dei job nel sistema, il throughput del sistema e' il numero medio di job eseguiti in un'ora, quindi

Scheduling FIFO: 15, 24, 13, 6, 21, 32, 15

Turnaround: (15*7+24*6+13*5+6*4+21*3+32*2+15*1)/7=68,571

Throughput:

    Tempo totale di esecuzione:  126 minuti per 7 job

    numero medio di job completati in un'ora è dato dalla proporzione:

                 126: 7 = 60 : x

    da cui il throughput è : 3,333

Scheduling SJF: 6, 13, 15, 15, 21,  24, 32

Turnaround: (6*7+13*6+15*5+15*4+21*3+24*2+32)/7=56,857

Throughput: lo stesso che per lo scheduling FIFO


Esercizio 4:

Si considerino 3 processi (A, B e C) che vengono attivati contemporaneamente, con tempi di esecuzione rispettivamente di 30, 20, 10 (millisecondi). Valutare il turnaround time dei tre processi nell'ipotesi di schedulazione round-robin, con un quanto di tempo di 10 ms, trascurando il tempo necessario per la commutazione di contesto e supponendo che passi in esecuzione prima il processo A, poi B e infine C.

Soluzione:
l'ordine con cui vengono eseguiti i processi è il seguente:

A (per 10 ms), B (per 10 ms), C (per 10 ms), A (per 10 ms), B (per 10 ms), A (per 10 ms)

per cui C termina in 30 ms, B termina in 50 ms e A termina in 60 ms.

Quindi il turnaround time è:

(30+50+60)/3=46,666 ms


Esercizio 5:

Elencare le condizioni necessarie affinché si verifichi lo stallo, e motivare la risposta

Soluzione:
Le condizioni sono:

    1. risorse seriali

    2. risorse non prerilasciabili

    3. condizione hold&wait

    4. attesa circolare di un insieme di processi

Se la condizione 1 non fosse verificata, sarebbe possibile assegnare la stessa risorsa a più processi, quindi sarebbe possibile assegnare ad ogni processo tutte le risorse di cui ha bisogno per terminare

Se la condizione 2 non fosse verificata, sarebbe possibile forzare il prerilascio di tutte le risorse acquisite dai processi in stallo. A questo punto sarebbe quindi possibile far terminare tutti i processi in stallo assegnando di volta in volta ad ognuno dei processi in stallo tutte le risorse delle quali necessita per terminare.

Se la condizione hold&wait non fosse verificata i processi bloccati in stallo non potrebbero vincolare le risorse acquisite. In tal caso le risorse sarebbero libere e potrebbero essere assegnate di volta in volta ad ognuno dei processi bloccati per farlo terminare.

Le condizioni 1,2 e 3 da sole non sono sufficienti per garantire il verificarsi dello stallo, infatti se i processi fossero eseguiti in ordine strettamente sequenziale potrebbero terminare tutti. La condizione di attesa circolare è quindi necessaria in quanto garantisce che ogni processo non possa proseguire perché in attesa delle risorse vincolate dagli altri processi in stallo.