Difference between revisions of "ProvaTeorica 2013.05.30"
Jump to navigation
Jump to search
Line 86: | Line 86: | ||
<h2> Esercizio c.2 </h2> | <h2> Esercizio c.2 </h2> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<h2> Esercizio g.1</h2> | <h2> Esercizio g.1</h2> | ||
Revision as of 14:39, 12 May 2014
Testo del compito
Esercizio c.1
/* Esercizio c.1: scrivere un monitor eventp che realizzi un servizio di sincronizzazione cosi' definito:
procedure entry EP *create(unsigned value): crea un nuovo descrittore. Ogni descrittore ha un contatore associato.
Value e' il valore iniziale del contatore.
procedure entry void write(EP *d, unsigned value): se il contatore ha un valore tale che se si sommasse value causerebbe overflow,
sospende il processo chiamante. In ogni caso
(se la somma e' possibile senza overflow o quando la somma e' possibile senza overflow)
somma value al valore del contatore.
procedure entry unsigned read(EP *d): se il contatore ha valore nullo sospende il processo chiamante fino a che il contatore diventi
non nullo.
In ogni caso restituisce il valore del contatore e riporta il contatore al valore zero.
procedure entry void close(EP *d): termina le operazioni del descrittore d e cancella il descrittore.
*/
monitor eventp{
#define OVERFLOW 999;
condition okToWrite, okToRead;
unsigned int oldValue;
struct EP {
unsigned int count;
} d;
procedure entry EP *create(value){
d.count = value;
return d;
}
procedure entry void write(EP *d, unsigned value){
if(d.count+value > OVERFLOW)
okToWrite.wait();
d.count= d.count + value;
okToRead.signal();
else
d.count = d.count + value;
}
procedure entry unsigned read (EP *d){
if(d.count == NULL)
okToRead.wait();
oldValue = d.count;
d.count = 0;
okToWrite.signal();
return oldValue;
else
oldValue=d.count;
d.count=0;
return oldValue;
}
procedure entry void close(EP* d){
close(d);
delete(d);
}
Esercizio c.2
Esercizio g.1
PUNTO A: (7+256+(256^2)+(256^3))*1kb =16.843.015kb quindi approssimativamente 16MB
PUNTO B: blocco indiretto triplo -> primo livello di idirizzamento 256 esimo blocco -> secondo livello di indirizzamento 256 esimo blocco -> terzo livello di indirizzamento al blocco 100000. Qundi in totale 4 blocchi