You are on page 1of 6

SISTEMI OPERATIVI ...

febbraio 2012
Cognome: Matricola: Nome:

1. Ricordate che non potete usare calcolatrici o materiale didattico. 2. Ricordate che potete consegnare al massimo tre prove scritte per anno accademico.

ESERCIZI RELATIVI ALLA PARTE DI TEORIA DEL CORSO (15 punti)


ESERCIZIO 1 (4 punti) Scheduling della CPU (1.1) Indicare, fra tutti quelli studiati, un algoritmo di scheduling della CPU preemptive (con prelazione) e un algoritmo di scheduling della CPU non preemptive (senza prelazione), spiegando cosa li rende tali e i rispettivi vantaggi: Algo. Preemptive: Round Robin preemptive perch: quando scade il suo quanto di tempo, viene effettuata la prelazione della CPU al processo in esecuzione, il quale cambia stato e diventa ready, venendo posizionato in coda alla coda ready. Vantaggi: Non presenta il problema della starvation ed particolarmente adatto alla realizzazione di sistemi in time-sharing, in quanto suddivide il tempo di CPU equamente fra i diversi processi. Algo. Non-preemptive: FIFO Non preemptive perch: I processi accedono alla CPU nello stesso ordine di cui sono posizionati in coda ready. Quando un processo ottiene la CPU la mantiene fino al termine del suo burst di CPU, indipendentemente dalla sua durata. Vantaggi: Questo meccanismo non richiede l'implementazione di algoritmi particolari per il mantenimento di ordinamenti specifici della coda ready, inoltre non affetto da starvation. (1.2) Si consideri il diagramma delle transizioni di stato dei processi: un processo nello stato waiting pu transire nello stato running? No. Dovr comunque attraversare lo stato ready. (1.3) Si considerino i seguenti processi, tutti in coda ready (il numero d'ordine del processo indica la posizione in coda, P1 in testa alla coda, seguito da P2, ecc.), e le relative stime di durata dei prossimi burst di CPU. Si calcoli il tempo medio di attesa nel caso in cui l'algoritmo di scheduling utilizzato sia il round-robin ( necessario riportare il diagramma di Gantt): 1

P P1 P2 P3 P4 Quanto == 4

D 8 6 12 2

P1
0 4

P2
8

P3

P4
12 14

P1

P2
18

P3
20 24

P3
28

t_P1 = 0+(14-4) = 10 t_P2 = 4+(18-8) = 14 t_P3 = 8+(20-12)+0 = 16 t_P4 = 12 tma = (10+14+16+12)/4 = 52/4 = 13 ESERCIZIO 2 (2 punti) - Thread (2.1) Spiegare la differenza fra thread kernel e thread utente: I thread sono detti kernel quando sono riconosciuti come unit computazionali dal sistema operativo, il quale ne possiede una rappresentazione e applica opportuni meccanismi per la loro gestione. I thread sono detti kernel quando sono realizzati a livello di programmazione tramite opportune librerie (es. POSIX) ma non sono n riconosciuti n gestiti dal sistema operativo, il quale vede come unit minima di computazione il processo. (2.2) Che cosa si intende per upcall? Nei sistemi operativi a thread, che implementano lo schema molti-a-molti, una upcall uno strumento tramite il quale il sistema operativo informa un processo che uno dei thread ai quali stato assegnato un LWP ha compiuto un'operazione con effetti sostensivi (esempio operazione di I/O) quindi l'LWP pu essere assegnato a un altro eventuale thread nello stato ready. ESERCIZIO 3 (5 punti) RAM e Memoria Virtuale (3.1) Illustrare il meccanismo di traduzione di un indirizzo logico in un indirizzo fisico nel caso in cui la RAM sia gestita tramite paginazione e il sistema mantenga una tabella delle pagine invertita:

Si veda lo schema studiato a lezione.


(3.2) Si consideri un sistema operativo che adotta un meccanismo di memoria virtuale e si spieghi l'algoritmo di selezione della pagina vittima noto come LRU: LRU associa a ogni pagina caricata in un frame di RAM un marcatore temporale, che viene inizializzato a tempo di caricamento in RAM della pagina e viene aggiornato ogni volta che il processo effettua un accesso alla pagina in questione. In caso di page fault viene scelta come vittima la pagina col marcatore pi basso, cio quella utilizzata meno di recente. 2

(3.3) Si consideri un sistema in cui LRU approssimata tramite bit di riferimento e registri a scorrimento a quattro bit. Supponendo che, dopo la sequenza di di accessi a pagine riportata nel seguito, un processo produca un page fault, quale pagina sar scelta come vittima? Calcolare il risultato illustrando l'evoluzione del contenuto dei registri durante l'esecuzione del processo. Sequenza: 1, 1, 2, 1, 1, 3, 2, 3, 3, 2, 3, 1 Partenza: 11 1100 0000 0000 2 0110 1000 0000 11 1101 0010 0000 3 2 0110 0011 0001 1000 1000 0100 33 0000 0010 1101 2 0000 1001 0110 3 0000 0100 1011 1 1000 0010 0101

1 0000 2 0000 3 0000

>> La pagina scelta come vittima la numero: 2 >> perch: il contenuto del suo registro codifica il timestamp pi basso. ESERCIZIO 4 (4 punti) File System (4.1) Spiegare che cosa si intende per journaling del file system, per quale motivo stato introdotto, quali sono i suoi vantaggi e svantaggi: Il journaling un meccanismo finalizzato a rendere pi veloce e sicuro il recovery del file system in caso di crash del sistema. Viene mantenuto in memoria secondaria un journal, nel quale verranno segnate tutte le modifiche effettuate dai processi ai diversi file prima che queste vengano attuate. In questo modo, in caso di crash possibile limitare la verifica del file system alle sole porzioni di file modificate negli ultimi minuti. Le modifiche che si trovano nel journal ma non trovano riscontro nei file vengono effettuate, quelle che non erano rimaste segnate nel journal non richiedono interventi. VANTAGGI: rapidit del recovery del file system, la cui durata diventa indipendente dalla dimensione del file system gestito. SVANTAGGI: rallentamenti nelle scritture dovuti alla necessit di mantenere il journal aggiornato. (4.2) Spiegare, aiutandosi con un disegno, com' fatta e a che cosa serve una FAT (File Allocation Table): Per il disegno si vedano le slide. La FAT una tabella (un array) avente tanti elementi quanti blocchi di memoria contiene un file system (l'indice permette di focalizzarsi sulla cella corrispondente a uno specifico blocco). Per ogni blocco indica se guasto, se non in uso oppure se appartiene a un file. In quest'ultimo caso il contenuto della cella sar, in genere, un riferimento al blocco successivo contenente dati del file realizzando cos una lista concatenata. Il primo elemento di una lista concatenata siffatta sar direttamente riferito dall'inode del file. Le informazioni contenute nella FAT consentono di accedere ai blocchi dati dei vari file. 3

ESERCIZIO 5 (3 punti) Sezioni Critiche (5.1) Che cosa si intende per sezione critica? Una sezione critica una porzione di codice nella quale si accede a una variabile condivisa. (5.2) Spiegare qual il difetto della seguente soluzione software al problema della sezione critica per due processi (indicati rispettivamente come processo i e processo j), dove il processo i ha il seguente codice mentre il processo j ha il codice simmetrico (i e j invertite): <sezione non critica> while (turno != i) do no_op; <sezione critica> turno = j; <sezione non critica>

Questa la prima delle soluzioni software studiate. Il suo difetto consiste nella stretta alternanza imposta ai processi i e j. Nel momento in cui uno dei due processi non dovesse pi desiderare di usare la variabile condivisa, l'altro potrebbe utilizzarla ancora al pi una volta anche se l'unico aspirante a farlo. Non vale la propriet di progresso. Inoltre come tutte le soluzioni software si fa attesa attiva.
ESERCIZI RELATIVI ALLA PARTE DI UNIX (9 punti) ESERCIZIO 1 (2 punti) (1.1) Che cosa si intende per real user id di un processo? un identificatore di utente associato a un processo: identifica l'utente che ha avviato l'esecuzione di quel processo. (1.2) Che cosa si intende per effective user id di un processo? Anche questo un identificatore di utente associato a un processo: se il suid settato sar uguale all'utente proprietario del file eseguibile (la cui esecuzione ha dato luogo al processo), se non settato sar identico al real user id. ESERCIZIO 2 (2 punti) Dato il seguente makefile: funz1.o: funz1.c gcc -c funz.c main.o: main.c funz.h gcc -c main.c prog: main.o funz.o gcc -o prog main.o funz.o 4

(2.1) In quali circostanze verr ricostruito l'eseguibile prog? Prog sar ricostruito quando non esiste (es. stato cancellato) oppure quando main.o oppure funz.o risultano aggiornati pi recentemente di prog stesso, cio quando almeno uno dei due main.c, funz.h stato aggiornato pi recentemente del target a cui associato oppure quando, esternamente al makefile, funz.o stato rigenerato. (2.2) Quali condizioni devono valere affinch venga eseguita la linea di compilazione relativa alla seconda regola? La seconda regola (main.o) scatta se main.c oppure funz.h pi recente di main.o oppure quando main.o non esiste. ESERCIZIO 3 (2 punti) (3.1) Spiegare il funzionamento della system call msgget: si vedano le slide. (3.2) La seguente invocazione di msgrcv corretta? Se s spiegarne il funzionamento, se no spiegarne il motivo (NB: l'assenza della motivazione rende sbagliata la risposta): ris = msgrcv(qid, &mm, 0, 0, 0); [X] NO ( errata). Il motivo : sebbene sintatticamente l'invocazione sia corretta, il terzo parametro il numero di byte di cui dovrebbe essere costituito il messaggio. Si tratta di un dato di un tipo fondamentale o derivato, quindi la dimensione da esso occupata non pu essere pari a zero. ESERCIZIO 4 (3 punti) Si spieghi il funzionamento delle seguenti invocazioni di system call, indicando inoltre per ciascuna se l'invocazione corretta oppure errata: (4.1) semop(semid, 0, 0); ERRATA sintatticamente corretta ma semanticamente errata in quanto semop richiede come secondo parametro un array di operazioni, il cui numero rappresentato dal terzo parametro. I due zeri indicano un NULL come array e uno 0 come numero di operazioni. (4.2) wait(0); CORRETTA fa s che il processo invocante attenda la terminazione di uno dei suoi figli, se ne ha e se sono tutti vivi. Se non ne ha o se ne gi terminato uno (non ancora intercettato da una (wait) terminer immediatamente. (4.3) signal(212, SIGCONT); 5

ERRATA Il primo parametro dovrebbe essere un segnale, il secondo il suo handler.