Difference between revisions of "ProvaTeorica 2013.05.30"

From Sistemi Operativi
Jump to navigation Jump to search
Line 1: Line 1:
 
<h1>[http://www.cs.unibo.it/~renzo/so/compiti/2013.05.30.tot.pdf Testo del compito]</h1>
 
<h1>[http://www.cs.unibo.it/~renzo/so/compiti/2013.05.30.tot.pdf Testo del compito]</h1>
−
 
−
<h2>Esercizio c.1</h2>
 
−
 
−
<syntaxhighlight lang="C">
 
−
 
−
/* 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);
 
−
}
 
−
 
−
</syntaxhighlight>
 
−
 
−
<h2> Esercizio c.2 </h2>
 
−
 
  
 
<h2> Esercizio g.1</h2>
 
<h2> Esercizio g.1</h2>

Revision as of 17:09, 12 May 2014

Testo del compito

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

Esercizio g.2

Holt.png