Prova Teorica 2013.06.21
Testo del compito
Esercizio c.1
monitor nvie
{
condition oktoread;
queue buffer[N];
procedure entry put(int n, generic object)
{
if (buffer[n].length < NELEM)
buffer[n].enqueue(object);
oktoread.signal();
}
procedure entry generic get(generic *object)
{
int count=0;
for (int i=0;i<N;i++)
{
if (buffer[i].length>0)
count++;
return None ;
}
for (int j=0;j<N;j++)
{ if (count>=N/2)
(buffer[j].dequeue(*object) ;
oktoread.wait();
}
}
}
Save
Esercizio g.1
Esercizio g.1
P1 2 2 2 2 2 P2 3 2 3 2 3 P3 1 2 1 2 1
NON-PREEMPTIVE
CPU |1|1|2|2|2|1|1|2|2|2|1|1|2|2|2|3| | |3| | |3| RQ |2|2|1|1|1|2|2|1|1|1|2|2|3|3|3| | | | | | | | |3|3|3|3|3|3|3|3|3|3|3|3| | | | | | | | | | | IO1 | | |1|1| | | |1|1| | | | | | | | | | | | | | IO2 | | | | | |2|2| | | |2|2| | | | | | | | | | | IO3 | | | | | | | | | | | | | | | | |3|3| |3|3| |
PREEMPTIVE
CPU |1|1|2|2|1|1|2|3|1|1|2|2|2|3|2|2|2|3| RQ |2|2| | |2|2| | | |2|3|3|3| | | |3| | |3|3|3|3|3|3|3| | | | | | | | | | | | IO1 | | |1|1| | |1|1| | | | | | | | | | | IO2 | | | | | | | |2|2| | | | |2|2| | | | IO3 | | | | | | | | |3|3| | | | |3|3| | |
Esercizio g.2
a) quali sono le differenze fra la paginazione e la segmentazione nella gestione della memoria?
PAGINAZIONE Dimensioni pagina fissa; suddivisione automatica; le pagine possono contenere informazioni disomogenee (codice, dati); una pagina ha un indirizzo; dim tipiche: 1-4KB
SEGMENTAZIONE Dimensioni variabili; la suddivisione in segmenti e' compito del programmatore; i segmenti contengono dati omogenei; un segmento ha un nome; dim tipica: 64KB-1MB
b) quali sono le differenze fra le operazioni P e V dei semafori e le operazioni wait/signal delle variabili di condizione?
Signal() non ha alcun effetto se nessun processo sta attendendo la condizione. V memorizza il verificarsi degli eventi. Wait() e' sempre bloccante. P, se il semaforo ha valore positivo, no. Il processo risvegliato dalla signal viene eseguito per primo.
c) allocazione contigua, concatenata e indicizzata nei file system, quali sono le differenze e i campi di applicazione?
Nell'allocazione contigua ogni file viene allocato in blocchi di memoria adiacenti.
PRO: non sono presenti strutture di collegamento, l'accesso sequenziale è efficiente. Anche l'accesso diretto risulta efficiente.
CON: frammentazione esterna, politica scelta blocchi liberi da usare; i file non possono crescere
APP: e'utilizzato nell'ISO 9660 (dischi ottici) e nel file system NTFS.
Nell'allocazione concatenata ogni file è una lista concatenata di blocchi ed ogni blocco contiene un puntatore al blocco successivo.
PRO: accesso sequenziale o in append mode efficiente, risolve la frammentazione esterna
CON: l'accesso diretto è inefficiente, se il blocco è piccolo l'overhead per i puntatori può essere rilevante.
APP: utile per i log, dato l'accesso efficiente in append mode. Usata in Xerox alto, DEC TOPS-10
Nell'allocazione indicizzata l'elenco dei blocchi che compongono un file viene memorizzato in un'area indice, quindi per accedere ad un file si carica in memoria la sua area indice e si utilizzano i puntatori contenuti.
PRO: risolve frammentazione esterna; efficiente per accesso diretto. Il blocco indice viene caricato in memoria solo quando il file è aperto.
CON: la dimensinoe del blocco indice determina ampiezza massima file
APP: file grosse dimensioni in quanto e' facile accedere alla parte intermedia del file. Utile per i file system di uso generale.
Esercizio c.2
#Casi possibili delle iterazioni
int val = 0
PQPQQ (((val +1) *2) +1) * 2 * 2 → 12
PQQPQ (( val +1 ) * 2 * 2) +1 * 2 → 12
QQPQP (((val * 2 * 2) + 1 )* 2) + 1 → 3
QPQQP (((val * 2) + 1) * 2 * 2) + 1 → 5
QPQPQ ((((val * 2) + 1) * 2) + 1) * 2 → 6
a) #Quindi i valori possibili sono → (3, 5, 6, 12)
b) #
- Midolo e Marangoni