Prova Teorica 2013.06.21

From Sistemi Operativi
Jump to navigation Jump to search

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

[soluzione]

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