Qualche esempio di analisi di Sistemi Operativi mediante la teoria delle code d’attesa. E.Mumolo Si consideri un S.O. non pre-emptive, senza iterazioni di I/O. Supponendo che il tempo medio di esecuzione dei processi sia di 0.2 secondi, trovare la frequenza massima di arrivo dei processi tale che il tempo di attesa nel sistema sia minore di 0.5 secondi. 1 , dove (1 ) e’ la frequenza di elaborazione, =1/te=5, dove te e’ il tempo medio di elaborazione. Inoltre Il modello e’ quello della coda M/M/1. Il tempo d’attesa nel sistema e’ w e’ la frequenza di arrivo, e e’ il coefficiente di traffico, ed e’ uguale a . Dunque: 1 1 1 0.5 . Quindi 1 / 0.5 ovvero 1 / 0.5 . (1 ) Quindi 3 w Si consideri un S.O. non pre-emptive, senza iterazioni di I/O. Si supponga che da alcune misure risulti che il tempo medio di esecuzione dei processi sia pari a 100/(frequenza clock CPU in MHz). Se il tempo medio di interarrivo e’ di 3 secondi, qual’e’ il clock minimo della CPU tale che il tempo d’attesa nel sistema sia minore di 0.5 secondi? Il modello e’ quello della coda M/M/1. Il tempo d’attesa nel sistema e’ 1 1 w 0.5 . Cioe’ 2 , cioe’ 2 . Visto che 1/ 3 , 7 / 3 . (1 ) Dato che clock / 100 , ne risulta che clock > 233. Si consideri un S.O. di tipo batch, con un dispositivo di I/O. Supponendo che la CPU lavori al ritmo di 3 elaborazioni al secondo e l’unita’ di I/O soddisfi 2 richieste al secondo, qual’e’ il livello (minimo) di multiprogrammazione tale che l’utilizzazione della CPU sia maggiore del 60%? Il modello e’ quello della coda ciclica. Dato che la utilizzazione della CPU, u, e’: 1 N , dove N e’ il numero di processi concorrenti, cioe’ il livello di u 1 N 1 2 2 1 2 / 3N , cioe’ u . 3 3 1 2 / 3 N 1 Provando con alcuni N, si vede che il minimo N che da’ una utilizzazione della CPU maggiore del 60% e’ N=4 multiprogrammazione, dai dati del problema ottengo Si supponga che in un esperimento di simulazione discreta sia necessaria una variabile aleatoria x con la seguente funzione densita’ di probabilita’: 3 2 f ( x) x 1 con x [0 ] . Scrivere lo pseudo-codice di una procedura per generare 2 3 la variabile aleatoria. Il campo di esistenza della v.a. e’ 0..2/3. Quindi la funzione di distribuzione e’ 2/3 2/3 3 3 F ( x) f ( )d ( 1)d x 2 x che, in effetti, per x=2/3 vale 1. 2 4 0 0 3 Generando una v.a. uniforme r, ed uguagliandola ad F(x), si ha: r x 2 x , da cui risulta che 4 3 2 2 x x r 0 e quindi x1,2 (1 1 3r ) . Resta da vedere quale segno scegliere, se + o 4 3 -. Se si sceglie +, le soluzioni sono tra 0 e 2/3 per r che va da 0 a 1. Se si sceglie il -, le soluzioni vanno da –4/3 a –2 per r che va da 0 a 1. Quindi il segno e’ il +, perche’ ad esso le x prodotte per r che va’ da 0 a 1 sono nell’intervallo indicato. In definitiva, la v.a. desiderata e’ calcolata 2 cosi’: x (1 1 3r ) dove r ovviamente e’ una v.a. uniforme tra 0 e 1. 3 Cioe’, se rnd() e’ una procedura per il calcolo del numero uniforme, lo pseudo-codice in C puo’ essere: float aleatoria() { return(2/3*(-1+sqrt(1+3*rnd())); } Un grosso Centro di Elaborazione Dati funziona nel seguente modo: a. Riceve da rete un blocco di processi da eseguire da parte di N utenti b. Una volta ricevuti, esegue gli N processi in multiprogrammazione c. Raccoglie i risultati e li invia agli utenti, assieme alla fattura con il costo del servizio. Sapendo che: - il tempo medio per ricevere un blocco di N richieste è T1 = 500 secondi - il tempo medio richiesto da un processo è T2 = 10 secondi - il costo fisso del centro è CS = 100 euro/secondo - il costo del tempo d’attesa di un utente è CU = 50 euro/secondo si determini il numero ottimale di utenti del blocco, cioe’ il numero N che minimizza il costo totale per utente. [suggerimento: il costo totale per utente è (tempo totale per eseguire i programmi)(costo totale al secondo)/N cioè (T1+NT2)(CS+NCU)/N] Come suggerito, il costo totale C è dato da C=(T1+NT2)(CS+NCU)/N. Volendo minimizzare C, si annulla la derivata prima di C rispetto a N. Cioe’: dC/dN=[(T1CU+T2CS+2NT2CU)N-(T1+NT2)(CS+NCU)]/N2=0 Cioè : T1CUN+T2CSN+2N2T2CU = T1CS+T1CUN+ T2CSN+ N2T2CU Ovvero : N2T2CU= T1CS cioè N=SQRT(T1CS / T2CU)=SQRT(500x100/10x50)=10 Cioè, il costo totale per utente viene minimizzato se ci sono 10 utenti del centro di elaborazione. Un Sistema Operativo è rappresentabile nel seguente modo: CPU1 CPU2 La frequenza di elaborazione della 2° CPU è di 1 processo/s. La probabilità che ci sia 1 processo nella coda della 2° CPU è del 25%. Sapendo che la 1° CPU è utilizzata al 50%, determinare il numero di processi in attesa della 1° CPU. [ricorda: la probabilità di avere n processi in coda è n(1-) ] Con i dati del problema, basta avere le informazioni sulla 1° CPU. Le informazioni sulla 2° CPU sono irrilevanti. Infatti: utilizzazione CPU = Visto che E[N]= np(n) = /(1-il numero medio di processi in attesa della 1° CPU è pari a 1. Un Sistema Operativo possiede una CPU (che esegue in media di 50 processi al secondo) ed un disco (in media esegue 40 richieste al secondo). Sapendo che un processo ha uno spazio di indirizzamento medio di 500KB, che il Sistema Operativo non usa memoria virtuale, e che la CPU è utilizzata al 60%, determinare la minima quantità di memoria di cui il Sistema Operativo deve disporre. [ricorda: la probabilità di avere n processi in coda in un sistema a coda ciclica è n(1-)/(1-N+1) dove è (frequenza esecuzione disco)/(frequenza elaborazione CPU)] Visto che pn(t)=n(1-)/(1-N+1), e che il coefficiente di utilizzazione è U=1-p0(t)=1-(1-)/(1-N+1)= (1- N)/(1-N+1). Quindi, visto che = 40/50=0.8, possiamo dire che: U=0.8(1-0.8 N)/(1-0.8N+1)=0.6. Sviluppando questa relazione si ha che 0.5=0.8 N+1 da cui, facendo il logaritmo dei due membri, N=ln0.5/ln0.8 –1, quindi N=2. Cioe’ ci sono due processi nel sistema operativo. La memoria minima richiesta è quindi di 1 Mbyte. In una biblioteca c’è un calcolatore dotato di un unico terminale mediante il quale gli utenti fanno ricerche sulla disponibilità e collocazione dei libri. Se un nuovo utente arriva per consultare il terminale in media ogni 3 minuti, ed il tempo medio di attesa che gli utenti aspettano prima di usare il terminale è di 8 minuti, qual è il numero medio di utenti che aspetta in coda? Secondo Little, NumeroMedioDiUtentiInCoda = freq.arrivo*TempoAttesaInCoda cioè n=*W=1/3*8=2.66 utenti medi in attesa. I processi che arrivano ad un sistema operativo provengono da varie sorgenti, tutte poissoniane, come si vede in figura: I tempi medi di interarrivo sono di 10, 5, 3.33 e 2.5 secondi rispettivamente per le varie sorgenti. Qual è la probabilità che nel processo degli arrivi risultante arrivino 5 processi in 10 secondi? Le varie sorgenti hanno evidentemente le seguenti frequenze d’arrivo (=1/T): rispettivamente 1=0.1, 2=0.2, 3=0.3, 4=0.4. La confluenza è sempre di Poisson con =i, cioè =1. In accordo alla distribuzione di Poisson, la probabilità che ci siano 5 processi arrivati in 10 secondi è pari a (t)5 e-t /5! con t=10 s. E’ cioè pari a 105 e-10 /120 = 0.037. Un sistema operativo è modellabile come una coda ciclica. Il tempo medio di CPU è di 2 secondi, quello di I/O è di 3 secondi. Il numero di processi nel sottosistema CPU, N(t), è una variabile aleatoria con media pari a –1/6 e varianza pari a 1. Usando l’approssimazione del fluido continuo, determinare il numero minimo di processi nel sistema tale che il coefficiente di utilizzazione della CPU sia maggiore dell’80%. Si vuole cioè trovare il valore di J tale che U(J)>0.8. Dato che U=(1-e-2J/var)/(1-e-2J/var), con i dati del problema (=2/3, =-1/6 e var=1) si ha che (1-e-J/3)/(1.5-e-J/3) > 0.8. Questa disuguaglianza porta a –1>e-J/3 che non ha soluzioni nel campo reale. In effetti con i valori assegnati non si troverà mai una probabilità maggiore di 0.8. Infatti, per J che tende a infinito, il coefficiente di utilizzazione tende a 2/3=0.6666. Si consideri un sistema di calcolo modellabile come in figura: CPU1 CPU2 dove il tempo medio di elaborazione della seconda CPU è di 10 secondi. Se si vuole che il tempo d’attesa medio nell’intero sistema sia minore di 0.8 secondi, determinare la frequenza massima d’arrivo sapendo che l’utilizzazione della prima CPU è del 65%. Intanto, U1=1=1/1=0.65, cioè 1=0.651, Dato che il tempo d’attesa medio complessivo è la somma dei due tempi d’attesa medi nei due sistemi, si ha: W=W1+W2<0.8 W1=1/(1-1)=1/(0.351) W2=1/(-)=1/(0.1-2)=1/(0.1-1) Quindi W=1/(0.351) + 1/(0.1-1) = (0.1-0.651)/(0.0351 – 0.35 12) < 0.8 ovvero 0.1 – 0.651 < 0.0281 - 0.2812 0.2812 – 0.678 1 + 0.1 < 0 Risolvendo l’equazione si ha che la frequenza di esecuzione della 1° CPU deve essere maggiore di 0.1589 e minore di 2.2625, cioè i tempi medi di esecuzione devono essere tra 0.44 e 6.29 secondi. La frequenza massima d’arrivo all’intero sistema e’ dunque 0.65*2.2625 = 1.47 processi al secondo. Da notare che se si imponesse la condizione riportata sopra in funzione di 1, si otterrebbe la seguente diseguaglianza: 0.662712 – 1.04 1 + 0.1 < 0 con gli stessi risultati. Consideriamo ora la congruenza dei risultati ottenuti. Si è ottenuto 1=[0.1, 1.47] arrivi al secondo e 1=[0.15, 2.26] elaborazioni al secondo. In tutti i casi, l’utilizzazione della CPU1 è del 65%. La frequenza d’arrivo alla 2° coda è quindi [0.1538, 2.26] mentre la frequenza di elaborazione di CPU2 è per ipotesi pari a 0.1. In tutti i casi, cioè il coefficiente di utilizzazione risulta maggiore di 1, il che comporta instabilità della seconda coda. Si consideri un sistema di calcolo modellabile come in figura: CPU1 CPU3 CPU2 I processi arrivano al sistema e si biforcano con probabilità e 1- sui due sottosistemi di CPU1 e CPU2. Quando i processi terminano l’elaborazione sulle due CPU, confluiscono sulla terza CPU per l’elaborazione finale. Sapendo che la frequenza d’arrivo al sistema è di 1.5 processi al secondo e che la frequenza di esecuzione della terza CPU è di 2 processi al secondo, e che l’utilizzazione della CPU1 e CPU2 sono del 90% e 80% rispettivamente, calcolare l’utilizzazione di CPU3 nel caso che =0.5. Se =1.5, per =0.5 si ha che la frequenza d’arrivo sulle due code è di 0.75. Visto che U1=1=1/1=0.9 si ha che la frequenza di esecuzione della prima CPU è di 0.8333 processi al secondo. Ugualmente, da U2=2=2/2=0.8 si ha che la frequenza di esecuzione della seconda CPU è di 0.9374 processi al secondo. La frequenza di arrivo nella terza coda è la somma della frequenza di esecuzione delle prime due CPU, cioè 3=1+2, cioè 3=1.7708. Da cui si ha che U3=3/3=0.8854 cioè 88.54 %.