Cognome e nome: Matricola: Corso [A/B] : fila: posto: Esercizio 1 (4 punti) Un ufficio postale è dotato di un unico sportello e di un distributore di numeri per gestire un afflusso ordinato allo sportello stesso. Un generico utente che arriva all'ufficio, prende un numero di ordine di servizio (realizzato mediante la variabile intera turno inizializzata a 0). Se non c'è nessun altro utente in attesa (e quindi se il numero di turno che ha preso è uguale al valore della variabile intera stiamoservendo), attiva l'impiegato (eventualmente sospeso sulla variabile di condizione Impiegato) e si avvia allo sportello. Altrimenti, si sospende sulla condizione CodaUtenti in attesa di essere riattivato dall'impiegato. Se non ci sono utenti da servire, l impiegato si sospende sulla variabile di condizione Impiegato. Altrimenti, serve l'utente che aveva preso il numero di prenotazione uguale a stiamoservendo, ed incrementa di uno il valore di tale variabile. Quindi, passa a servire il prossimo utente (quello il cui numero di prenotazione è uguale al valore attuale di stiamoservendo). Gli utenti e l'impiegato sono thread di uno stesso processo. Per la soluzione del problema, si utilizzano i seguenti dati condivisi dai thread: turno: intero non negativo; valore iniziale 0; stiamoservendo: intero non negativo; valore iniziale 0; utentiinattesa: intero non negativo; valore iniziale 0. Contiene il numero di utenti in attesa di essere serviti allo sportello. Per gli studenti che sostengono la prova di verifica intermedia: Si chiede di completare la soluzione proposta utilizzando i meccanismi delle variabili di condizione (visti a lezione e sul libro), con la variabile MutexPosta, di tipo mutex e le variabili CodaUtenti e Impiegato, di tipo condition, il cui utilizzo è descritto sopra. Per tutti gli altri studenti: Si chiede di completare la soluzione proposta utilizzando i meccanismi della libreria pthread, con la variabile MutexPosta, di tipo mutex e le variabili CodaUtenti e Impiegato, di tipo condition, il cui utilizzo è descritto sopra. //codice dell'utente int x=turno; turno ++; utentiinattesa ++; while x>stiamoservendo //l'utente si mette in attesa // <va allo sportello per il servizio e alla fine esce> } //codice dell'impiegato while true while utentiinattesa ==0 //l'impiegato si mette in attesa // utentiinattesa --; < serve l'utente> stiamoservendo++; }
- Per gli studenti che sostengono la prova di verifica intermedia //codice dell'utente MutexPosta. Acquire(); int x=turno; turno ++; utentiinattesa ++; while x>stiamoservendo CodaUtenti.wait(&MutexPosta); //l'utente si mette in attesa // Impiegato.signal(&MutexPosta); MutexPosta. Release(); <va allo sportello per il servizio e alla fine esce> } //codice dell'impiegato while true MutexPosta. Acquire(); while utentiinattesa ==0 Impiegato.wait(&MutexPosta); //l'impiegato si mette in attesa // utentiinattesa --; MutexPosta. Release(); < serve l'utente> MutexPosta. Acquire(); stiamoservendo++; codautenti.broadcast(&mutexposta); MutexPosta. Release(); } - Per gli altri studenti //codice dell'utente pthread_mutex_lock(&mutexposta); int x=turno; turno ++; utentiinattesa ++; while x>stiamoservendo pthread_cond_wait(&codautenti,&mutexposta); //l'utente si mette in attesa // pthread_cond_signal(&impiegato); pthread_mutex_unlock(&mutexposta); <va allo sportello per il servizio e alla fine esce> } //codice dell'impiegato while true pthread_mutex_lock(&mutexposta); while utentiinattesa ==0 pthread_cond_wait(&impiegato,&mutexposta); //l'impiegato si mette in attesa // utentiinattesa --; pthread_mutex_unlock(&mutexposta); < serve l'utente> pthread_mutex_lock(&mutexposta); stiamoservendo++; pthread_cond_broadcast(&codautenti); pthread_mutex_unlock(&mutexposta); }
Esercizio 2 (4 punti) Si consideri un processore che dispone dei registri speciali PC (program counter), PS (program status) e SP (stack pointer), e di un banco di registri generali, utilizzati sia in stato utente, sia in stato supervisore, che comprende i registri R1, R2 e R3. Inoltre, il nucleo dispone di un proprio stack, che inizia all indirizzo 2020 e si espande verso il basso. Al riconoscimento di un interruzione, il processore salva sullo stack del nucleo i soli registri speciali. Il sistema operativo realizza i thread a livello del nucleo e lo schedulatore gestisce esclusivamente i thread. La politica di scheduling è a priorità e con prerilascio (un valore maggiore della priorità corrisponde a priorità maggiore). Al tempo t sono presenti nel sistema il thread T i1 del processo P i, che si trova in stato di esecuzione, e il thread T j1 del processo P j, che è in stato di attesa sul semaforo sem. In questo istante di tempo, thread T i1 invoca la chiamata di sistema: V(sem) per gli studenti che sostengono la prova di verifica intermedia; signal(sem) per tutti gli altri studenti. Immediatamente dopo il riconoscimento della chiamata di sistema, i registri del processore, i descrittori di T i1 e T j1 hanno i contenuti mostrati in tabella. Lo stack del nucleo è vuoto. Supponendo che il vettore di interruzione associato all interruzione sia 3500 e che la parola di stato del nucleo sia 376A, si chiede: a) il contenuto dei descrittori, dei registri generali e speciali e dello stack del nucleo durante la fase di estrazione della prima istruzione della procedura di gestione della chiamata di sistema; b) il contenuto dei descrittori, dei registri generali e speciali e dello stack del nucleo durante la fase di estrazione dell istruzione IRET con la quale termina la procedura di gestione dell interruzione; c) il contenuto dei descrittori, dei registri generali e speciali e dello stack del nucleo durante la fase di estrazione dell istruzione eseguita subito dopo la IRET. Stato Esec Stato Attesa 2020 Priorità 5 Priorità 4 2019 SP F000 PC E000 PC A0AA 2018 R1 3001 PS 1683 PS 1688 2017 R2 3011 SP F010 SP C0CC 2016 R3 3013 R1 3000 R1 2200 2015 R2 0300 R2 2020 2014 R3 0030 R3 2002 2013 PC E0E0 PS 1682 UTENTE a) contenuto dei descrittori, dei registri generali e speciali e dello stack del nucleo durante la fase di estrazione della prima istruzione della procedura di gestione dell interruzione: Stato Stato 2020 Priorità Priorità 2019 SP PC PC 2018 R1 PS PS 2017 R2 SP SP 2016 R3 R1 R1 2015 R2 R2 2014 R3 R3 2013 PC PS b) contenuto dei descrittori, dei registri generali e speciali e dello stack del nucleo durante la fase di estrazione dell istruzione IRET con la quale termina la procedura di gestione dell interruzione; Stato Stato 2020 Priorità Priorità 2019 SP PC PC 2018 R1 PS PS 2017 R2 SP SP 2016 R3 R1 R1 2015 R2 R2 2014 R3 R3 2013
PC Sistemi Operativi e Laboratorio, Prova del 05/02/2014 PS c) contenuto dei descrittori, dei registri generali e speciali e dello stack del nucleo durante la fase di estrazione dell istruzione eseguita subito dopo la IRET. Stato Stato 2020 Priorità Priorità 2019 SP PC PC 2018 R1 PS PS 2017 R2 SP SP 2016 R3 R1 R1 2015 R2 R2 2014 R3 R3 2013 PC PS a) contenuto dei descrittori, dei registri generali e speciali e dello stack del nucleo durante la fase di estrazione della prima istruzione della procedura di gestione dell interruzione: Stato Esec Stato Attesa 2020 E0E0 Priorità 5 Priorità 4 2019 1682 SP 2017 PC E000 PC A0AA 2018 F000 R1 3001 PS 1683 PS 1688 2017 R2 3011 SP F010 SP C0CC 2016 R3 3013 R1 3000 R1 2200 2015 R2 0300 R2 2020 2014 R3 0030 R3 2002 2013 PC 3500 PS 376A SUPERVISORE b) contenuto dei descrittori, dei registri generali e speciali e dello stack del nucleo durante la fase di estrazione dell istruzione IRET con la quale termina la procedura di gestione dell interruzione; Stato Esec Stato Pronto 2020 E0E0 Priorità 5 Priorità 4 2019 1682 SP 2017 PC E000 PC A0AA 2018 F000 R1 3001 PS 1683 PS 1688 2017 R2 3011 SP F010 SP C0CC 2016 R3 3013 R1 3000 R1 2200 2015 R2 0300 R2 2020 2014 R3 0030 R3 2002 2013 PC 3500+?? PS 376A SUPERVISORE c) Contenuto dei descrittori, dei registri generali e speciali e dello stack del nucleo durante la fase di estrazione dell istruzione eseguita subito dopo la IRET. Stato Esec Stato Pronto 2020 Priorità 5 Priorità 4 2019 SP F000 PC E000 PC A0AA 2018 R1 3001 PS 1683 PS 1688 2017 R2 3011 SP F010 SP C0CC 2016 R3 3013 R1 3000 R1 2200 2015 R2 0300 R2 2020 2014 R3 0030 R3 2002 2013
PC E0E0 PS 1682 UTENTE Esercizio 3 (4 punti) In un file system UNIX i blocchi del disco hanno ampiezza di 1Kbyte e i puntatori ai blocchi sono a 16 bit. Gli i-node contengono, oltre agli altri attributi, 10 puntatori diretti e 3 puntatori indiretti. Il primo blocco del disco ha indice logico 0. Si chiede: 1. il numero di puntatori che possono essere contenuti in un blocco indiretto; 2. l indice logico del primo blocco e dell ultimo blocco indirizzabili con puntatori diretti; 3. l indice logico del primo blocco e dell ultimo blocco indirizzabili con indirizzamento indiretto semplice; 4. Si consideri un file aperto (il cui i-node è caricato in memoria principale), la cui lunghezza corrente (in byte) è 498.600 e il cui i-node contiene i seguenti puntatori a blocchi: Puntatore 0 1 2 3 4 5 6 7 8 9 10 11 12 Valore del puntatore 900 901 942 940 971 941 972 973 974 961 800 -- -- dove il blocco indiretto 800 ha il seguente contenuto parziale: Indice di elemento nel blocco 0 1 2 3 4 5 6 7 Valore del puntatore 702 703 704 677 678 705 700 679 Dire la dimensione in blocchi del file e a quali blocchi del disco bisogna accedere per leggere 2000 bytes del file a partire dal byte 13.400. 1. Numero di puntatori che possono essere contenuti in un blocco indiretto: ; 2. Il primo e l ultimo blocco indirizzabili con puntatori diretti hanno rispettivamente indici logici: ; 3. Il primo e l ultimo blocco indirizzabili con indirizzamento indiretto semplice hanno rispettivamente indici logici: ; 4. L ultimo carattere del file è contenuto nel blocco ; quindi il file è composto da blocchi; Il primo carattere da leggere è il 13.400, ed è contenuto nel blocco di indice logico: L ultimo carattere da leggere è il numero, che è contenuto nel blocco di indice logico:. Quindi i blocchi logici da leggere sono:. I blocchi logici da leggere sono allocati nei blocchi fisici:. I blocchi fisici da leggere sono:. 1. Un indirizzo occupa 16 bit=2 bytes. Pertanto, il numero di puntatori che possono essere contenuti in un blocco indiretto è dato da 2^10/2= 512; 2. il primo e l ultimo blocco indirizzabili con puntatori diretti hanno rispettivamente indici logici 0 e 9; 3. il primo e l ultimo blocco indirizzabili con indirizzamento indiretto semplice hanno rispettivamente indici logici 10 e (10+ 512) - 1= 521; 4. l ultimo carattere del file è contenuto nel blocco (498.600-1) div 2^10= 486; quindi il file è composto da 487 blocchi; il primo carattere da leggere è il 13.400, sul quale è posizionato il puntatore di lettura, è contenuto nel blocco di indice logico: 13.400 div 2^10= 13. L ultimo carattere da leggere è il numero 13.400+2.000-1 = 15.399, che è contenuto nel blocco di indice logico: 15.399 div 2^10= 15. Quindi i blocchi logici da leggere sono il 13, 14 e 15, che rientrano nell indirizzamento indiretto singolo. Nella sequenza dei blocchi indirizzati dall indirizzamento indiretto singolo, Il puntatore corrispondente al blocco logico 13 occupa la posizione 13-10=3 del blocco fisico 800. Quindi il file system deve leggere il blocco indice di primo livello 800. All interno di questo blocco individua gli elementi 3, 4 e 5 che contengono i puntatori ai blocchi 677, 678 e 705 che devono essere letti. I blocchi da leggere sono quindi 800, 677, 678, 705
Esercizio 4 (4 punti) Un sistema simile a Windows gestisce la memoria con paginazione a domanda mediante un Working Set Manager. A un certo tempo, lo stato di occupazione della memoria (senza considerare i blocchi riservati al sistema operativo) è quello descritto nella seguente Core Map, i cui elementi hanno valore nullo se il blocco è libero, o altrimenti identificano il processo e la pagina a cui il blocco è assegnato. B,6 A,4 A,2 B,4 C,2 A,8 C,5 B,1 C,6 B,2 C,7 B,5 A,7 C,9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 Nel sistema sono presenti i processi A, B e C, le cui tabelle delle pagine sono le seguenti (il campo TempoRif registra il tempo virtuale del processo al quale è avvenuto l ultimo riferimento alla pagina): Pagina Blocco TempoRif Pagina Blocco TempoRif Pagina Blocco TempoRif 0 0 0 1 1 21 4 1 2 15 8 2 23 7 2 17 3 3 3 3 4 13 9 4 16 5 4 5 5 26 9 5 20 9 6 6 10 1 6 22 11 7 27 5 7 7 25 5 8 19 4 8 8 9 9 9 28 6 Processo A - 5 Processo B - 4 Processo C - 6 A ogni processo è assegnato un WorkingSet Ammissibile di 4 pagine. Per ogni pagina riferita da un processo che avanza, si procede nel modo seguente: Se la pagina è presente in memoria, si scrive il valore attuale del tempo virtuale del processo nel campo TempoRif della tabella delle pagine. Se si verifica un PageFault, la pagina riferita viene caricata in un blocco disponibile (anche se il numero di pagine caricate, o insieme residente, supera la dimensione del Working Set Ammissibile), registrando il valore attuale del tempo virtuale del processo nel campo TermpoRif. I blocchi disponibili vengono assegnati in ordine crescente di indice. Il Working Set Manager viene attivato quando il numero di blocchi disponibili si riduce a 2, e si comporta nel modo seguente: - considera i soli processi la cui dimensione dell insieme residente (numero di pagine caricate in memoria) superi quello del WorkingSet Ammissibile (che è 4 per tutti i processi) e per questi processi ordina globalmente le pagine per valori decrescenti del parametro TempoVirtuale- TempoRif, dove TempoVirtuale è il valore attuale del tempo virtuale del processo; - scarica dalla memoria le pagine secondo questo ordinamento, fino a quando il numero di blocchi disponibili diventa uguale a 8. In caso di parità tra due o più pagine si considera l ordine alfabetico dei processi. A partire dal tempo considerato il sistema evolve nel modo seguente: 1. Avanza il processo C, che ai tempi virtuali 12, 13, 14 e 15 riferisce rispettivamente le pagine 1, 2, 0, e 9 2. Avanza il processo B, che ai tempi virtuali 10, 11, 12, 13 e 14 riferisce rispettivamente le pagine 6, 5, 0, 6 e 8. Si chiede la configurazione della CoreMap e delle tabelle delle pagine dei 3 processi al termine dei punti 1 e 2. Nei casi nei quali viene eseguito il Working Set Manager indicare anche il tempo virtuale dei processi al momento dell esecuzione del Working Set Manager, e quante e quali pagine vengono rimosse. 1) Configurazione della CoreMap e delle tabelle delle pagine al termine del punto 1: Vengono caricate le pagine: Viene quindi eseguito il Working Set Manager [SI/NO]? Se SI: il Working Set Manager rimuove le pagine: Core Map e tabelle delle pagine al termine del punto 1: 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 Pagina Blocco TempoRif Pagina Blocco TempoRif Pagina Blocco TempoRif 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6
7 7 7 8 8 8 9 9 9 Processo A Processo B Processo C 2) Configurazione della CoreMap e delle tabelle delle pagine al termine del punto 2: Vengono caricate le pagine: Viene quindi eseguito il Working Set Manager [SI/NO]? Se SI: il Working Set Manager rimuove le pagine: Core Map e tabelle delle pagine al termine del punto 2: 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 Pagina Blocco TempoRif Pagina Blocco TempoRif Pagina Blocco TempoRif 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 Processo A Processo B Processo C 1) Configurazione della CoreMap e delle tabelle delle pagine al termine del punto 1: B,6 C,1 C,0 A,4 A,2 B,4 C,2 A,8 C,5 B,1 C,6 B,2 C,7 B,5 A,7 C,9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 Pagina Blocco TempoRif Pagina Blocco TempoRif Pagina Blocco TempoRif 0 0 0 12 14 1 1 21 4 1 11 12 2 15 8 2 23 7 2 17 13 3 3 3 4 13 9 4 16 5 4 5 5 26 9 5 20 9 6 6 10 1 6 22 11 7 27 5 7 7 25 5 8 19 4 8 8 9 9 9 28 15 Processo A - 5 Processo B - 4 Processo C - 6 Non è stato eseguito il Working Set Manager 2) Configurazione della CoreMap e delle tabelle delle pagine al termine del punto 2: B,6 C,1 C,0 A,4 B,0 A,2 B,4 C,2 B,8 A,8 C,5 B,1 C,6 B,2 C,7 B,5 A,7 C,9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 Pagina Blocco TempoRif Pagina Blocco TempoRif Pagina Blocco TempoRif 0 0 14 12 0 12 14 1 1 21 4 1 11 12 2 15 8 2 23 7 2 17 13 3 3 3 4 13 9 4 16 5 4 5 5 26 11 5 20 9 6 6 10 13 6 22 11
7 27 5 7 7 25 5 8 19 4 8 8 9 9 18 14 9 28 15 Processo A - 5 Processo B - 4 Processo C - 6 Viene quindi eseguito il Working Set Manager che rimuove 6 pagine dei soli processi B e C. Il tempo attuale del processo B è: 15 Il tempo attuale del processo C è: 16 TempoVirtuale- TempoRif delle pagine dei processi B e C: B0 3; B1 11; B2 8; B4 10; B5 4; B6 2; B9 1; C0 2; C1 4; C2 3; C5 7; C6 5; C7 11; C9 1; Vengono quindi rimosse le pagine: B1, C7, B4, B2, C5, C6 B,6 C,1 C,0 A,4 B,0 A,2 C,2 B,8 A,8 B,5 A,7 C,9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 Pagina Blocco TempoRif Pagina Blocco TempoRif Pagina Blocco TempoRif 0 0 14 12 0 12 14 1 1 1 11 12 2 15 8 2 2 17 13 3 3 3 4 13 9 4 4 5 5 26 11 5 6 6 10 13 6 7 27 5 7 7 8 19 4 8 8 9 9 18 14 9 28 15 Processo A - 5 Processo B - 4 Processo C - 6 Esercizio 5 (3 punti) Si consideri un File System simile a NTFS che alloca i file in sequenze contigue (nel seguito chiamate run) individuate mediante coppie del tipo (inizio, lunghezza), dove inizio è l indice del primo blocco fisico del run e lunghezza esprime il numero di blocchi che la compongono. Ogni file è descritto da un MFT record che contiene, oltre ad altri attributi, una o più coppie (inizio, lunghezza). Il File System è ospitato da un disco con 2 facce, NTracce = 50 tracce per faccia e NSettori = 100 settori per traccia. Il tempo necessario per percorrere un settore è di 0,1 msec, conseguentemente il tempo di rotazione del disco è pari a 10 msec. Il tempo medio di esecuzione di un operazione di seek per posizionare la testina del disco da una traccia ad una adiacente è di 4 msec. Dopo un operazione di seek, il disco impiega in media un tempo pari alla metà del tempo rotazionale per posizionare la testina sul settore da leggere o scrivere. Assumiamo per semplicità che ogni blocco del file system sia allocato in un settore e si assuma che, dato un indice di blocco B, questo sia allocato nel settore individuato dalla terna <Faccia, Traccia, Settore>: Faccia = B div (NTracce x NSettori) Traccia = (B mod (NTracce x NSettori)) div NSettori Settore = (B mod (NTracce x NSettori)) mod NSettori dove div è la divisione intera e mod restituisce il resto della divisione. Si consideri il file Stromboli, il cui MFT record definisce, nell ordine, i seguenti run contigui: 1. (4000, 20), che contiene i blocchi fisici corrispondenti ai blocchi logici di indici compresi in [0,20) 2. (2000, 15), che contiene i blocchi fisici corrispondenti ai blocchi logici di indici compresi in [20,35) Si calcoli il tempo necessario per leggere l intero file Stromboli, supponendo che le teste di lettura/scrittura siano inizialmente posizionate sulla traccia 2 e che il tempo di esecuzione delle eventuali operazioni di seek sia sempre uguale a quello medio. Il primo blocco da leggere nel run 1 si trova nel blocco fisico 4000, che è allocato nel settore: L ultimo blocco da leggere nel run 1 si trova nel blocco fisico 4019, che è allocato nel settore: Operazioni sul run 1: Numero di blocchi estratti dal run 1: blocchi Tempo necessario per estrarre i blocchi dal run 1: Il primo blocco da leggere nel run 2 si trova nel blocco fisico 2000, che è allocato nel settore:
L ultimo blocco da leggere nel run 2 si trova nel blocco fisico 2014, che è allocato nel settore: Operazioni sul run 2: Numero di blocchi estratti dal run 2: blocchi Tempo necessario per estrarre i blocchi dal run 1: Tempo totale impiegato: Il primo blocco da leggere nel run 1 si trova nel blocco fisico 4000, che è allocato nel settore: <0, 40, 0> L ultimo blocco da leggere nel run 1 si trova nel blocco fisico 4019, che è allocato nel settore: <0, 40, 19> Operazioni sul run 1: Numero di blocchi estratti dal run 1: 20 blocchi Tempo necessario per estrarre i blocchi dal run 1: 4 msec (seek)+ 5 msec (metà tempo rotazionale) + 20* 0,1 (lettura settori) = 11 msec Il primo blocco da leggere nel run 2 si trova nel blocco fisico 2000, che è allocato nel settore: <0, 20, 0> L ultimo blocco da leggere nel run 2 si trova nel blocco fisico 2014, che è allocato nel settore: <0, 20, 14> Operazioni sul run 2: Numero di blocchi estratti dal run 2: 15 blocchi Tempo necessario per estrarre i blocchi dal run 1: 4 msec (seek)+ 5 msec (metà tempo rotazionale) + 15* 0,1 (lettura settori) = 10,5 msec Tempo totale impiegato: 21,5 msec Esercizio 6 (3 punti) Un sistema con 4 processi A, B, C, D e risorse dei tipi R1, R2, R3, R4, rispettivamente di molteplicità [5, 6, 3, 6] adotta nei confronti dello stallo la politica di riconoscimento ed eliminazione. Ad un dato istante di tempo t tutti i processi sono sospesi e si è raggiunto uno stallo, come mostrato nelle tabelle seguenti. Assegnazione attuale Esigenza Massima Esigenza residua (esclusa l assegnazione attuale) Molteplicità R1 R2 R3 R4 R1 R2 R3 R4 R1 R2 R3 R4 R1 R2 R3 R4 A 2 3 A 4 4 A 2 0 0 1 5 6 3 6 B 1 1 B 5 6 3 B 4 5 3 0 C 2 1 C 2 3 C 0 0 0 2 Disponibilità D 3 2 D 1 3 6 D 1 0 0 4 2 2 1 0 Dire quali delle seguenti azioni (da considerarsi in alternativa) elimina lo stallo: a) il processo A viene forzato a rilasciare 1 risorsa di tipo R1 b) il processo C viene forzato a rilasciare 1 risorsa di tipo R4 Ipotesi a): Stato raggiunto dopo il rilascio di un istanza di R1 da parte di A: Assegnazione attuale Esigenza Massima Esigenza residua (esclusa l assegnazione attuale) Molteplicità R1 R2 R3 R4 R1 R2 R3 R4 R1 R2 R3 R4 R1 R2 R3 R4 A A A 5 6 3 6 B B B C C C Disponibilità D D D Verifica dello stato sicuro: 1) Il processo può terminare [SI/NO] la disponibilità di R1, R2, R3, R4} diviene } 2) Il processo può terminare [SI/NO] la disponibilità di R1, R2, R3, R4} diviene } 3) Il processo può terminare [SI/NO] la disponibilità di R1, R2, R3, R4} diviene }
4) Il processo può terminare [SI/NO] la disponibilità di R1, R2, R3, R4} diviene } Di conseguenza: stallo eliminato? [SI/NO] b) Stato raggiunto dopo il rilascio di un istanza di R4 da parte di C: Assegnazione attuale Esigenza Massima Esigenza residua (esclusa l assegnazione attuale) Molteplicità R1 R2 R3 R4 R1 R2 R3 R4 R1 R2 R3 R4 R1 R2 R3 R4 A A A 5 6 3 6 B B B C C C Disponibilità D D D Verifica dello stato sicuro: 1) Il processo può terminare [SI/NO] la disponibilità di R1, R2, R3, R4} diviene } 2) Il processo può terminare [SI/NO] la disponibilità di R1, R2, R3, R4} diviene } 3) Il processo può terminare [SI/NO] la disponibilità di R1, R2, R3, R4} diviene } 4) Il processo può terminare [SI/NO] la disponibilità di R1, R2, R3, R4} diviene } Di conseguenza: stallo eliminato? [SI/NO] Ipotesi a): Stato raggiunto dopo il rilascio di un istanza di R1 da parte di A: Assegnazione attuale Esigenza Massima Esigenza residua (esclusa l assegnazione attuale) Molteplicità R1 R2 R3 R4 R1 R2 R3 R4 R1 R2 R3 R4 R1 R2 R3 R4 A 1 3 A 4 4 A 3 0 0 1 5 6 3 6 B 1 1 B 5 6 3 B 4 5 3 0 C 2 1 C 2 3 C 0 0 0 2 Disponibilità D 3 2 D 1 3 6 D 1 0 0 4 3 2 1 0 Per la verifica dello stato sicuro: Nessun processo può terminare Di conseguenza: stallo eliminato? NO b) Stato raggiunto dopo il rilascio di un istanza di R4 da parte di C: Assegnazione attuale Esigenza Massima Esigenza residua (esclusa l assegnazione attuale) Molteplicità R1 R2 R3 R4 R1 R2 R3 R4 R1 R2 R3 R4 R1 R2 R3 R4 A 2 3 A 4 4 A 2 0 0 1 5 6 3 6 B 1 1 B 5 6 3 B 4 5 3 0 C 2 C 2 3 C 0 0 0 3 Disponibilità D 3 2 D 1 3 6 D 1 0 0 4 2 2 1 1 Per la verifica dello stato sicuro: 1) Il processo A può terminare La disponibilità di R1, R2, R3, R4} diviene 4,2,1,4} 2) Il processo C può terminare La disponibilità di R1, R2, R3, R4} diviene 4,2,3,4} 3) Il processo D può terminare La disponibilità di R1, R2, R3, R4} diviene 4,5,3,6} 4) Il processo B può terminare La disponibilità di R1, R2, R3, R4} diviene 5,6,3,6} Di conseguenza: stallo eliminato? SI
Esercizio 7 (2 punti) Si consideri un sistema che gestisce il processore con politica Round Robin, con quanto di tempo di 5 msec. Lo scheduler del processore è attivato dai seguenti eventi (che possono anche verificarsi contemporaneamente): il processo in esecuzione esaurisce il quanto di tempo; il processo in esecuzione si sospende; il processo in esecuzione termina. Nel sistema sono presenti i seguenti processi, che terminano dopo aver utilizzato il processore per la durata specificata in tabella: Proc Tempo di Durata Comportamento arrivo (msec) A 1 38 Avanza fino alla terminazione senza sospendersi B 3 60 Si sospende dopo aver utilizzato il processore per 12 msec; viene riattivato dopo 3 msec C 4 15 Avanza fino alla terminazione senza sospendersi D 5 20 Si sospende dopo aver utilizzato il processore per 8 msec; viene riattivato dopo 4 msec Utilizzando la seguente tabella per seguire l evoluzione dei processi, si chiede di determinare il tempo di terminazione del processo D, Tempo evento In esec Coda pronti 0 Arriva A A Il processo D termina all istante: Tempo evento In esecuzione Coda pronti 0 A B,C,D 5 Scade qdt B C,D,A 10 Scade qdt C D,A,B 15 Scade qdt D A,B,C 20 Scade qdt A B,C,D 25 Scade qdt B C,D,A 30 Scade qdt C D,A,B 35 Scade qdt D A,B,C 38 D si sospende * A B,C 43 Scade qdt B C,D,A 45 B si sospende * C D,A 50 Termina C D A,B 55 Scade qdt A B,D 60 Scade qdt B D,A 65 Scade qdt D A,B 70 Scade qdt A B,D 75 Scade qdt B D,A 80 Scade qdt D A,B 82 Termina D A B
* dato che i processi B e D restano sospesi meno di un quanto di tempo, quando vengono riattivati la coda pronti non è cambiata e quindi mantengono la loro posizione in coda. Il processo D termina all istante 82 Esercizio 8 (2 punti) Si consideri un sistema nel quale sono definiti il semaforo sem e i processi P1, P2 e P3. Lo scheduling avviene con una politica round robin, e la politica applicata al semaforo è FIFO. Al tempo t il processo P1 è in esecuzione e il processo P2 è in coda pronti. Inoltre il semaforo sem ha valore 0 e la coda associata al semaforo contiene il processo P3. Dopo il tempo t, si verificano in sequenza i seguenti di eventi: 1) P1 esegue V(sem) P1 esegue signal(sem) per gli studenti degli anni accademici precedenti l A.A. 2013/14 2) il processo in esecuzione esegue V(sem) esegue signal(sem) per gli studenti degli anni accademici precedenti l A.A. 2013/14 3) scade il quanto di tempo scade il quanto di tempo 4) il processo in esecuzione esegue P(sem) esegue wait(sem) per gli studenti degli anni accademici precedenti l A.A. 2013/14 Si chiede di specificare quale processo è in esecuzione subito dopo ogni evento e inoltre come si modificano il valore e la coda del semaforo sem e la CodaPronti. Sequenza di eventi In Esecuzione Coda Pronti Valore di sem Coda di sem 1) P1 esegue V(sem) (o, equivalentemente, signal(sem) 2) il processo in esecuzione esegue V(sem) (o, equivalentemente, signal(sem)) 3) scade il quanto di tempo 4) Il processo in esecuzione esegue P(sem) (o, equivalentemente, wait(sem)) Sequenza di eventi In Esecuzione Coda Pronti Valore di sem Coda di sem 1) P1 esegue V(sem) (o, equivalentemente, signal(sem) 2) il processo in esecuzione esegue V(sem) (o, equivalentemente, signal(sem)) P1 P2, P3 0 - P1 P2, P3 1-3) scade il quanto di tempo P2 P3, P1 1-4) Il processo in esecuzione esegue P(sem) (o, equivalentemente, wait(sem)) P2 P3, P1 0 - Esercizio 9 (2 punti) In un sistema tipo Unix che adotta una politica di schedulazione round robin, sono definiti il semaforo sem e i processi P1 e P2. Al tempo t il processo P1 è in esecuzione, la coda pronti contiene il processo P2 e il semaforo sem ha valore 0. Dopo il tempo t si verifica la seguente sequenza di eventi: 1) P1 esegue la chiamata di sistema fork() che genera il processo P3; 2) Scade il quanto di tempo; 3) Il processo in esecuzione esegue P(sem) per gli studenti che NON fanno la prova di verifica intermedia wait(sem); 4) Il processo in esecuzione esegue V(sem) - per gli studenti che NON fanno la prova di verifica intermedia signal(sem); Si chiede di specificare quale processo è in esecuzione dopo ogni evento e inoltre come si modificano le code dei processi pronti e il valore e la coda del semaforo sem. Sequenza di eventi In Esecuzione Coda pronti Valore di sem Coda di sem
1) P1 esegue fork() Sistemi Operativi e Laboratorio, Prova del 05/02/2014 2) Scade il quanto di tempo; 3) il processo in esecuzione esegue P(sem) (wait(sem)) 4) Il processo in esecuzione esegue V(sem) (signal(sem)) Sequenza di eventi In Esecuzione Coda pronti Valore di sem Coda di sem 1) P1 esegue fork() P1 P2, P3 0-2) Scade il quanto di tempo; P2 P3, P1 0-3) il processo in esecuzione esegue P(sem) (wait(sem)) 4) Il processo in esecuzione esegue V(sem) (signal(sem)) P3 P1 0 P2 P3 P1, P2 0 - Esercizio 10 (2 punti) In un sistema il cui nucleo riconosce i processi come unica l unità di schedulazione, i thread sono realizzati a livello utente. In questo sistema, quali delle seguenti operazioni richiedono la transizione in stato supervisore? Operazione Necessario stato supervisore? (SI/NO) Eseguire un istruzione SVC per invocare una chiamata di sistema Modificare la priorità di un thread Effettuare la commutazione di contesto tra due thread dello stesso processo Effettuare la commutazione di contesto tra due processi Operazione Necessario stato supervisore? (SI/NO) Eseguire un istruzione SVC per invocare una chiamata di sistema NO Modificare la priorità di un thread NO Effettuare la commutazione di contesto tra due thread dello stesso processo NO Effettuare la commutazione di contesto tra due processi SI