Esercizio Descrivere la tecnica di gestione della memoria basata su paginazione (non e richiesta la descrizione della tecnica si memoria virtuale). Inoltre, data un architettura a 64 bit di indirizzamento logico, la quale supporta pagine di 1MB ciascuna e paginazione a 2 livelli, si calcoli il numero delle entry della tabella delle pagine di primo livello ammettendo tabelle di secondo livello ciascuna con un numero di entry pari a 1 K.
Soluzione Parte A: descrizione della struttura logica di un address space (suddivisa in pagine), della strutturazione logica della RAM (suddivisa in frames), della struttura di un indirizzo logico e del relativo indirizzo fisico, della struttura di una tabella delle pagine, dell integrazione del TLB nell operativita del microcodice di traduzione degli indirizzi da logici a fisici. Parte B: 1MB di taglia della pagina comporta 2^(20) byte indirizzabili per pagina, che necessitano di 20 bit per l offset di pagina nell indirizzo logico tabelle di secondo livello con 1K elementi inplicano che l identificazione di una pagina in una sezione di secondo livello necessiti di 10 bit nell indirizzo logico i rimanenti 34 bit sono destinati all identificazione della sezione target per l accesso, quindi la taglia della tabella di primo livello dovra essere di 2^(34) elementi (ovvero 32 G elementi)
Esercizio Si consideri un insieme di N processi (P1,..., PN), ciascuno dei quali scrive periodicamente un nuovo messaggio su una memoria condivisa M di N slot. Ciascun processo Pi scrive esclusivamente nell i-esimo slot della memoria condivisa. Dopo aver scritto il proprio messaggio, Pi attende che venga consegnata una risposta nello stesso slot della memoria condivisa. Le risposte vengono prodotte da un ulteriore processo REPLY. In particolare, non appena i messaggi di due processi Pi e Pi+1 con indice consecutivo (modulo N) sono disponibili, questi vengono scambiati da REPLY e consegnati come risposte. L attesa della risposta da parte dei processi Pi e bloccante. La lettura dei messaggi da parte di REPLY e anche essa bloccante. Gli accessi in scrittura/lettura su M da parte dei processi (P1,, PN) potranno avvenire in concorrenza. Si schematizzi la soluzione del suddetto problema di sincronizzazione, usando solo semafori, fornendo lo pseudo-codice delle procedure SCRIVI-LEGGI e SCAMBIA usate rispettivamente da Pi e REPLY.
Soluzione (senza perdita di generalita i processi Pi vengono indentificati nel range [0,M-1]) Binary sem P[M]; // codes if messages have been posted Binary sem A[M]; // codes if answers have been provided INIT: for i = 0 to M-1 set(p[i], 0); for i = 0 to M-1 set(a[i], 0); SCRIVI-LEGGI: me = getpid(); < write message into M[me] >; signal(p[me]); wait(a[me]); < read reply form M[me] >; REPLY: static int index = 0; wait(p[index]); wait(p[(index + 1)%M]); < switch M[index] and M[(index+1)%M] >; signal(a[index]); signal(a[(index + 1)%M]); index = (index+2) % M;
Esercizio Si consideri un insieme di N processi (P1,..., Pn), ciascuno dei quali scrive periodicamente un nuovo messaggio su una memoria condivisa M di n slot. Ciascun processo Pi scrive esclusivamente nell iesimo slot della memoria condivisa. Dopo aver scritto il proprio messaggio, Pi attende che venga consegnata una risposta tramite un buffer R, a slot singolo. L attesa della risposta e bloccante. Un ulteriore processo REPLY legge i messaggi prodotti dai processi Pi in ordine, ovvero a partire da P1 fino a Pn, e poi ancora da P1. La lettura e anche in questo caso bloccante. Quando REPLY ha letto il messaggio proveniente da TUTTI i processi Pi, consegna la risposta destinata a tutti i Pi tramite il buffer R. Gli accessi in scrittura su M da parte dei processi (P1,, Pn) potranno avvenire in concorrenza. Si schematizzi la soluzione del suddetto problema di sincronizzazione, usando solo semafori, fornendo lo pseudo-codice delle procedure SCRIVI e RISPONDI usate rispettivamente da Pi e REPLY.
Soluzione (senza perdita di generalita i processi Pi vengono indentificati nel range [0,M-1]) Binary sem P[M]; // codes if messages have been posted Binary sem A[M]; // codes if the answer has been provided INIT: for i = 0 to M-1 set(p[i], 0); for i = 0 to M-1 set(a[i], 0); SCRIVI-LEGGI: me = getpid(); < write message into M[me] >; signal(p[me]); wait(a[me]); < get answer from buffer R >; REPLY: for index = 0 to M-1 { wait(p[index]); < read message from M[index] >; } < post reply onto buffer R >; for index = 0 to M-1 signal(a[index]);
Esercizio Si descriva lo scheduler di CPU Windows. Si consideri inoltre uno scenario single-core in cui esistono solo 3 processi attivi A, B e C, tutti singlethread/cpu bound di durata 100 milisecondi, che eseguono solo in user mode, di cui i primi due di classe real-time (stello livello) ed il terzo di classe variable. Supponendo che il tempo T per un cambio di contesto tra i due processi (qualora realmente eseguito) sia pari a 10 microsecondi, e considerando che il software di gestione dell interrupt da timer per lo scheduling della CPU e tutto eseguito in kernel mode (e ad ogni interrupt e ammesso che possa avvenire un context switch), si determini il minimo periodo dell interrupt da timer per lo scheduling di CPU che garantisca che almeno il 90 per cento del tempo di CPU speso per i tre processi sia impegnato in user mode. Risposte non motivate non verranno ritenute valide.
Soluzione Parte A: descrizione dei livelli di priorita dello scheduler windows, e della logica di assegnazione (dinamica e/o basata su system call) delle priorita ai processi/thread attivi. Parte B: i 2 processi a priorita real-time vanno in time-sharing sulla CPU, il terzo viene schedulato solo a valle del loro completamento, e non subisce context switch. Bisogna quindi calcolare il numero massimo di context switch N che occorrono durante l esecuzione dei primi 2 in modo da soddisfare la seguente equazione (Ttot Tuser)/Ttot <= 0.1 Ma Tuser = 300 millisec Ttot = Tuser + N Tsched dove Tsched = 0.01 millisec quindi N <= 3333.3... In conclusione Tinterrupt >= (200 / N ) + 0.01 millisec ~ 0.07 millisec
Esercizio Descrivere il metodo di allocazione di file basato su indicizzazione a livelli multipli. Si consideri un file di dati F di 2048 record ed un dispositivo di memorizzazione di massa con blocchi di 256 record avente tempo di accesso ai blocchi fisso pari a 30 microsecondi. Supponendo che (i) gli indici abbiano taglia pari and un record, (ii) gli indici di primo livello siano 6, e quelli di secondo livello siano 2, (iii) il tempo di identificazione di un riferimento ad un blocco di dispositivo sia costante e pari a 5 microsecondi, calcolare il tempo per la lettura di tutto il file F.
Soluzione numero di blocchi dati allocati per il file = 2048/256 = 8 6 degli 8 blocchi dati sono puntati in modo diretto dagli indici di primo livello mantenuti nell RS. il loro tempo di lettura è pari a 6 x (5 + 30) i rimanenti due blocchi dati devono essere individuati tramite indici di secondo livello tali indici sono memorizzati in un unico blocco il cui tempo di lettura risulta (5 + 30) letto il precedente blocco, il tempo di lettura dei due blocchi dati risulta pari a 2 x (5 + 30) tempo totale per la lettura di F = 6 x (5 + 30) + (5 + 30) + 2 x (5 + 30)
Esercizio Si consideri un insieme di processi {P1, P2,..., Pi,..., Pm}. Ciascuno di essi legge periodicamente il contenuto di una memoria condivisa di taglia N bytes per copiarlo in un buffer di N bytes locale al processo stesso. Un processo PROD aggiorna periodicamente il contenuto della memoria condivisa. L aggiornamento deve aver luogo solo dopo che tutti i processi {P1, P2,..., Pi,..., Pm} hanno copiato l immagine precedentemente scritta da PROD esattamente una volta. La lettura del contenuto della memoria condivisa da parte di {P1, P2,..., Pi,..., Pm} puo avvenire in modo concorrente. L aggiornamento deve avvenire in modo esclusivo (nessun processo puo leggere mentre PROD aggiorna la memoria condivisa). Si schematizzi la soluzione di tale problema di sincronizzazione, utilizzando solo semafori, costituita dal pseudocodice delle procedure AGGIORNA (usata da PROD) e LEGGI (usata da P1,..., Pm).
SOLUZIONE Indicazione a PROD del numero di lettori che hanno effettivamente letto l ultima immagine scritta Indicazione ai lettori se essi sono abilitati a leggere dalla memoria condivisa DATA Semaphore S1; // generico Semaphore S2[m] ; // binari INIT 1 // ipotesi: la memoria condivisa contiene // inizialmente una immagine valida S1 = 0; for i=1 to m S2 [i]=1;
INIT 2 // ipotesi: la memoria condivisa non contiene // inizialmente una immagine valida S1 = m; for i=1 to m S2 [i]=0; PROD: AGGIORNA wait(s1,m); <write image into shared memory>; for i=1 to m signal(s2[i]); P i : LEGGI wait(s2[i]); <read image from shared memory>; signal(s1);
Esercizio Si consideri un insieme di processi {P1, P2,..., Pi,...,Pn} che devono depositare immagini di dimensioni predefinite in un area di memoria condivisa con 4 slot disponibili (ciascuno slot puo contenere una sola immagine). Un altro processo PV (processo di verifica) ha il compito di verificare il formato di ciascuna immagine e di mandarlo in stampa dopo la verifica. Si schematizzi la soluzione di tale problema, utilizzando semafori, costituita dal pseudocodice delle procedure: DEPOSITA (usata da P1, P2,..., Pi,..., Pn) e VERIFICA (usata da PV).
SOLUZIONE quantità di slot occupati quantità di slot liberi mutua esclusione DATA Semaphore Cont1, Cont2; // generici Semaphore S ; // binario int shared_index; image buff [4]; INIT Cont1 = 0; Cont2 = 4; S = 1; shared_index = 0;
PV: DATA int index = 0; VERIFICA wait(cont1); <verify and print image in buff[index]>; index = (index+1) mod 4; Signal(Cont2); P i : DEPOSITA wait(s); wait(cont2); <write image into buff[shared_index]>; shared_index = (shared_index+1) mod 4; signal(cont1) signal(s)
Esercizio Descrivere il metodo di accesso sequenziale indicizzato ad un file. Si consideri un file di dati F di 2048 record ed il relativo file di indici f contenente 1024 elementi. Supponendo che il tempo di accesso ad un indice del file f sia 5 microsecondi e che il tempo di accesso di ogni singolo record del file F sia 20 microsecondi, calcolare il tempo massimo per l accesso ad un record del file F con chiave generica. Risposte non motivate non verranno ritenute valide.
SOLUZIONE il tempo massimo si ottiene quando: 1. la chiave ricercata è associata all ultimo record del file dati F 2. si ha una configurazione di caso peggiore del file di indici f la configurazione peggiore si ha quando la chiave ricercata tra le 2048 è nell intervallo associato all ultimo elemento del file f e tale intervallo ha la massima ampiezza, ovvero quando esistono 1023 intervalli di ampiezza 1 ed un unico intervallo di ampiezza 1025 per giungere all ultimo record di suddetto intervallo devo scandire tutto il file degli indici, questo porta via un tempo pari a 5 x 1024 devo poi leggere tutti i blocchi dell intervallo, questo porta via un tempo 20 x 1025 tempo massimo per l accesso ad un record di F con chiave generica = 5 x 1024 + 20 x 1025