Soluzioni della provetta di Sistemi Operativi – 4 novembre 2004 Analisi dei Sistemi Operativi mediante le code d’attesa 1) (1pt) Descrivere un algoritmo per generare una variabile aleatoria uniforme tra -2 e +2. Partendo da una v.a. uniforme ‘r’ tra 0 e 1, una v.a. ‘x’ uniforme tra -2 e +2 si può evidentemente ottenere nel seguente modo: x=4r-2 Volendo verificare questo risultato possiamo usare il metodo classico della funzione di distribuzione inversa di una v.a. uniforme tra -2 e +2: F(x)= x 1 d 4 x 1 1 d ( x 2) 4 2 4 Quindi, da r=F(x) si ottiene x=4r-2. 2) (3pt) Un utente di un sistema operativo scrive una applicazione che risponde al paradigma del produttore/consumatore. L’applicazione è composta da due processi, uno dei quali – il produttore - scrive continuamente messaggi in un buffer di 100 byte. Si consideri che: Ogni messaggio richiede 5 byte Il buffer di 100 byte non è circolare: dopo che il buffer si riempie i messaggi ulteriormente prodotti non sovrascrivono altri messaggi, semplicemente vengono persi se non vengono letti. L’altro processo – il consumatore – legge il buffer con degli intertempi aleatori distribuiti secondo una distribuzione esponenziale con frequenza pari a 2 [letture/s]. Tenendo conto dei valori medi, trovare la frequenza massima alla quale il processo produttore scrive messaggi in modo tale che non venga perso nessun messaggio. Il problema si può descrivere con una coda M/M/1 con = 2 e da determinare in modo tale che la lunghezza della coda non superi mai 100 byte. Questo vuol dire che, considerando i valori medi e chiamando n il numero medio di messaggi in coda, 5*n <100 ovvero 5 2 100 ovvero 5 2 100 100 0 che ha due soluzioni: 1=0,954 e 2=-20,954. 1 Dal che risulta che <0,954 ovvero, visto che /2, la frequenza media con la quale il processo scrittore scrive messaggi deve essere minore di 1,9 messaggi al secondo. 3) (6pt) Un progettista realizza una applicazione nella quale i processi che eseguono nel contesto del Sistema Operativo – basato su una sola CPU - richiedono ciclicamente servizio da parte di una sola unità di I/O. Il numero dei processi nel sistema è costante e pari a 6 e le distribuzioni relative alle elaborazioni della CPU e dell’I/O sono esponenziali con frequenze rispettivamente 1 e 2. Sapendo che la frequenza media di servizio da parte della unità di I/O è pari a 5 richieste al secondo, trovare il numero dei processi elaborati al secondo dalla CPU in modo tale che la probabilità di utilizzazione della CPU sia maggiore di 0.8. Per eliminare la coda d’attesa dei processi pronti per l’esecuzione, il progettista del sistema pensa di sostituire la CPU con un numero di processori di minore costo ( e di minore potenza) che, da un punto di vista funzionale sono posti in parallelo, in modo tale che non appena un nuovo processo richiede elaborazione viene subito assegnato ad un processore libero. Sapendo che ognuno dei nuovi processori ha una potenza ed un costo 3 volte inferiori all’unica CPU della versione iniziale, calcolare il costo della soluzione multiprocessore relativamente al sistema originale. Considerando il sistema multiprocessore come un unico server equivalente di elaborazione, e gli altri parametri invariati (nr. complessivo di processi e frequenza di I/O) calcolare la probabilità di utilizzazione del server. Il problema può essere modellato quindi con una coda ciclica: CPU 1 2 con un numero di processi J=6. È conosciuto 2 e si vuole conoscere 1 tale che U>0,8. Mettendo U in una forma più maneggevole: 1 J 1 dove J 1 0,8 J 1 0,8 0,8 J 1 cioè 0,8 J 1 0,8 J 1 0,2 J 1 2 1 Quindi 2 J 1 0,8 0,2 2 1 1 J 1 2 1 J 0,8 2 J 1 0,2 2 J 1 0,2 5 7 15625 Provando con qualche valore di 1, si vede che per 1=5,1 si ha un valore di U maggiore di 0.8. In particolare U=0,8485. Quindi, consideriamo 1=5,1. Con questo valore, si ha r=5/5,1. Il numero medio processi è E{Pn(t)}= nPn(t), dove Pn(t)=n(1-)/(1-J+1). Sviluppando, si ha E{Pn(t)}= 1 [( J 1) 1 J 1 J 1 J ] 2,92 . Quindi consideriamo che ci siano mediamente 3 processi nel sistema CPU. Per eliminare la coda d’attesa nel sistema CPU, si può pensare di usare alcune CPU di minore potenza (in particolare come affermato, di potenza 1/3 della precedente) in modo tale che non appena un processo entra nel sistema CPU, viene subito elaborato da un processore, eliminando quindi la coda d’attesa. Con i dati precedenti, il numero medio di processi nel sistema CPU è uguale a 3. Quindi il numero di CPU che sostituiscono l’unica CPU del sistema originale sarà pari a tre. Ovviamente, se il processore è tre volte meno potente, la durata della elaborazione sarà tre volte maggiore di prima, cioè possiamo dire che la frequenza di elaborazione dei processori meno potenti (1’) sarà un terzo della precedente (1’=1/3). Naturalmente la minore frequenza sarà compensata dalla maggiore disponibilità di processori. Intanto, possiamo dire che il sistema CPU ha lo stesso costo di prima (naturalmente non c’e’ bisogno di memoria per contenere la coda d’attesa ma questo è un risparmio limitato e sul quale non vengono forniti dati quindi nulla si può dire sul fattore memoria). Cosa possiamo dire sul fattore di utilizzazione con il sistema delle 3 CPU? Se ci fosse una sola CPU di potenza 1/3, avremmo ’=2/1’=3. Se invece consideriamo le 3 CPU come un sistema M/M/3 (un sistema con ‘c’ processori ciascuno con coefficiente di utilizzazione pari a è equivalente ad un server con coefficiente di utilizzazione pari a ’=/c) il fattore di utilizzazione resta uguale a . Quindi anche il fattore di utilizzazione U resta uguale al precedente. In conclusione, nel problema considerato nulla cambia (costo e fattore di utilizzazione) se al posto di una CPU si usassero tre CPU di potenza pari a 1/3.