Il 0% ha trovato utile questo documento (0 voti)
24 visualizzazioni3 pagine

Febbraio 14 R

Caricato da

Klejdi Hysenaj
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
24 visualizzazioni3 pagine

Febbraio 14 R

Caricato da

Klejdi Hysenaj
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 3

Ricordarsi di mettere il proprio nome, cognome, e numero di matricola in

tutti i fogli. Motivare sempre le risposte date. Non e’ necessario dare risposte molto
lunghe, ma e’ importante rispondere in modo motivato ed esauriente alle domande poste
(in altre parole, molto meglio una frase in piu’ che una in meno).
Esplicitate i calcoli che fate, quando possibile. Cioe’ non dare risposte secche (tipo
“falso”, o “14”) ma spiegate perche’ siete arrivati al risultato (potranno essere tolti punti
in caso contrario).

Esercizio 1 [] Considerate i 3 processi sotto

print(A); print(B); print(C);


print(D); print(E);
print(F); print(G);

Agite, se necessario, sul codice, inserendo opportune operazioni su semaforo, in modo


che l’output di questa esecuzione concorrente sia sempre la stringa ADBFCEG. Indicare
bene i semafori utilizzati e il loro valore di inizializzazione.
Risposta(Sketch)
T.P() W.P()
print(A); print(B); print(C);
U.V(); Z.P() Z.V()
print(D); print(E);
T.V(); U.P()
print(F); print(G);
W.V()
con inizialmente S=1 e T=0 e U=0

Esercizio 2 Perche’ si implementa la memoria virtuale?


Risposta(Sketch) Per poter eseguire programmi che hanno uno spazio di indiriz-
zamento logico maggiore di quello fisico, e per poter avere in esecuzione contempo-
raneamente programmi che, insieme, oc cupano uno spazio maggiore dello spazio di
indirizzamento fisico.

Esercizio 3 Descrivere le azioni che un sistema operativo deve fare per effettuare un
context switch tra 2 processi.

Esercizio 4 1. Cos’e’ una memoria cache e perche’ si usa?


2. Date degli esempi di strutture del Sistema Operativo per gestire le quali si fa
ricorso ad una qualche forma di memoria cache.

Esercizio 5 La soluzione del problema dei lettori e scrittori vista a lezione garantisce
l assenza di starvation?
Risposta(Sketch) No, infatti un qualsiasi processo scrittore potrebbe dover attendere
all infinito senza riuscire ad entrare in sezione critica. Al contrario i processi lettori
sono liberi da starvation (in altre parole, non è garantita l attesa limitata)

1
Esercizio 6 Elencate quali tecniche usa un sistema operativo, in collaborazione con
l’hardware del processore, per proteggersi da funzionamenti impropri (accidentali o
voluti) dei programmi utente.
Risposta(Sketch) (1) Uso di una doppia modalità di esecuzione delle istruzioni, per
cui le istruzioni "delicate" possono essere eseguit e solo per conto del sistema operativo.
2) uso di un timer hardware che puo’ essere inizializzato solo dal SO e allo scadere del
quale il controllo della macchina torna al SO (3) uso di tecniche per limitare le aree
della RAM a cui possono accedere i program mi utente: coppia di registri base/limit, o
base/offset, o paginazione della memoria.

Esercizio 7 Descrivete brevemente il piu’ grave problema che si puo’ presentare in un


sistema che implementa la memoria virutale
Risposta(Sketch) Thrashing, in cui i processi passano la maggior parte del tempo a
generar e page fault e a rubarsi pagine in RAM senza portare avanti la loro computazione

Esercizio 8 Un hard disk ha la capienza di 238 byte, ed è formattato in blocchi da


2048 byte.
1. Quanti accessi al disco sono necessari per leggere l ultimo blocco di un file A della
dimensione di 8192 byte, assumendo che sia gia’ in RAM il numero del primo
blocco del file stesso e che venga adottata una allocazione concatenata dello spazio
su disco?
2. Qual e’ lo spreco di memoria dovuto alla frammentazione interna nella memoriz-
zazione di A
3. Se si adottasse una allocazione indicizzata dello spazio su disco, quanti accessi al
disco sarebbero necessari per leggere l ultimo byte di un file B grande 1200K byte
(specificate quali assunzioni fate nel rispondere a questa domanda)?
Risposta(Sketch)
1. 5. Ogni blocco infatti memorizza 2044 byte di dati piu’ 4 byte di puntatore al
blocco successivo (infatti, 238 /211 = 227 ), per cui sono necessari 5 blocchi per
memorizzare l intero file.
2. L hard disk è suddiviso in 238 /211 = 227 blocchi, sono necessari 4 byte per mem-
orizzare un puntatore al blocco successivo, e ogni blocco contiene 2044 byte di
dati. Il quinto blocco memorizzerà quindi 16 byte del file, e la frammentazione
interna corrisponde a 2048 16 = 2032 byte (2028 se si considerano non sprecati
i 4 byte del quinto blocco che contengono il puntatore, non utilizzato, al blocco
successivo)
3. Poiche’ sono necessari 4 byte per scrivere il numero di un blocco, in un blocco
indice possono essere memorizzati 512 puntatori a blocco, e con un blocco indice
possiamo indirizzare in tutto (circa) 29 × 211 = 220 = 1 Megabyte. Un solo blocco
indice non e’ quindi sufficiente a memorizzare B. Assumendo una allocazione in-
dicizzata concatenata (ma si ottengono gli stessi risultati con una allocazione
indicizzata gerarchica) usando un secondo blocco indice e’ possibile memorizzare
l intero file. Se il numero del primo blocco indice e’ già in RAM, per leggere l ul-
timo carattere del file sono necessari 3 accessi al disco: lettura del primo blocco
indice, lettura del secondo blocco indice, lettura dell ultimo blocco del file.

2
Esercizio 9 Si consideri il problema dei lettori e scrittori visto a lezione, dove i codici
del generico scrittore e del generico lettore sono riportati qui di seguito. Inserite le
operazioni di decremento/incremento (dette anche wait e signal, oppure P e V) su
semaforo mancanti necessarie per il corretto funzionamento del sistema, indicando anche
il semaforo mancante. Ricordarsi dei valori di inizializzazione. Come per tutte le
risposte, motivate brevemente anche le aggiunte fatte.

semafori e variabili condivise necessarie


semaphore write = 1;
int numlettori = 0;

scrittore {

...Esegui la scrittura del file ...

lettore {

numlettori++;
if numlettori == 1 ;
... leggi il file ...
numlettori--;
if numlettori == 0 ;

Risposta(Sketch)
semafori e variabili condivise necessarie

semaphore mutex = 1;
semaphore write = 1;
int numlettori = 0;

scrittore {
wait(scrivi);
...Esegui la scrittura del file ...
signal(scrivi) }

lettore {
wait(mutex);
numlettori++;
if numlettori == 1 wait(scrivi);
signal(mutex);
... leggi il file ...
wait(mutex);
numlettori--;
if numlettori == 0 signal(scrivi);
signal(mutex);

Potrebbero piacerti anche