Difference between revisions of "Prova teorica 2017.05.29"

From Sistemi Operativi
Jump to navigation Jump to search
(Creata pagina con link a foto del compito e struttura. Aggiunta risposa domanda 2 esercizio g.2)
 
Line 4: Line 4:
  
 
==Esercizio c.1==
 
==Esercizio c.1==
 +
 +
se qualcuno può correggermi o confermare il rispetto delle regole concorrenziali, mi fa un grande piacere.
 +
saluti
 +
 +
 +
Monitor rubaBandiera () {
 +
 +
  condition oktochiama, oktopunteggio, oktopronto;
 +
 +
  listnum [] = [1,2,3,4]
 +
  numeri[]
 +
  numeriChiamati[0...MAX-1]
 +
  studentiPronti = True;
 +
 +
  punteggio [A] = 0;
 +
  punteggio [B] = 0;
 +
 +
procedure entry gioco() {
 +
 
 +
 
 +
      n=random(listnum);
 +
      numeri=random(numeriChiamati);
 +
 +
      if( studentiPronti == false)
 +
 +
            oktochiama(numeri).wait() ;
 +
 +
     
 +
      studentiPronti(numeri) = false ;
 +
      oktopunteggio.signal();
 +
}
 +
procedure entry studente () {
 +
 +
    while(studentiPronti(numeri))
 +
 +
        oktochiama(numeri).signal();
 +
}
 +
 +
 +
procedure entry chiama () {
 +
 +
      print(punteggio[A] ":" punteggio[B]);
 +
      if (studentiPronti(numeri))
 +
 +
        oktopunteggio.wait()
 +
 +
      if (allabadiera(A))
 +
        punteggio[A] ++;
 +
      else punteggio [B]++;
 +
      print(punteggio[A] ":" punteggio[B]);
 +
      studentiPronti(numeri) = true
 +
 +
      pronto();
 +
 +
procedure entry pronto() {
 +
 +
      if(punteggio[A] || punteggio[B] < 10)
 +
 +
        return 0;
 +
      else return 1;
 +
}}
  
 
==Esercizio c.2==
 
==Esercizio c.2==

Revision as of 13:13, 15 June 2017

link al compito

Ho caricato questa foto del compito intanto che non è ancora disponibile il pdf. Quando sarà disponibile sostituire con il link al pdf. --FedericoB (talk) 11:41, 15 June 2017 (CEST)

Esercizio c.1

se qualcuno può correggermi o confermare il rispetto delle regole concorrenziali, mi fa un grande piacere. saluti


Monitor rubaBandiera () {

 condition oktochiama, oktopunteggio, oktopronto; 
 listnum [] = [1,2,3,4]
 numeri[]
 numeriChiamati[0...MAX-1]
 studentiPronti = True; 
 punteggio [A] = 0;
 punteggio [B] = 0;
procedure entry gioco() {
  
 
     n=random(listnum);
     numeri=random(numeriChiamati);
     if( studentiPronti == false)
            oktochiama(numeri).wait() ;


     studentiPronti(numeri) = false ;
     oktopunteggio.signal();

}

procedure entry studente () {
   while(studentiPronti(numeri))
        oktochiama(numeri).signal();

}


procedure entry chiama () {
     print(punteggio[A] ":" punteggio[B]);
     if (studentiPronti(numeri))
        oktopunteggio.wait()
     if (allabadiera(A))
        punteggio[A] ++;
     else punteggio [B]++;
     print(punteggio[A] ":" punteggio[B]);
     studentiPronti(numeri) = true
     pronto();
procedure entry pronto() {
     if(punteggio[A] || punteggio[B] < 10)
       return 0;
     else return 1;

}}

Esercizio c.2

Esercizio g.1

Esercizio g.2

  1. Un i-node di un file system tipo ext2 per un errore viene riportato un numero di link maggiore del reale. Cosa può succedere se si continua ad usare il file system? (perchè?) E se il numero di link errato fosse il contrario inferiore al reale cosa potrebbe succedere? (perchè?)
  2. Perchè è necessario usare spinlock in sistemi multiprocessore per implementare kernel di tipo simmetrico (SMP)?
    Perchè la semplice disabilitazione degli interrupt non sarebbe sufficiente in caso di parallelismo reale a prevenire l'accesso a memoria condivisa in concorrenza. Bisogna perciò utilizzare strumenti come gli spinlock che grazie a istruzioni atomiche, per esempio la test-and-set, bloccano l'esecuzione di un processo fino al verificarsi di una condizione. Per evitare il busy wait si possono usare gli spinlock solo per rendere atomiche le istruzioni P e V di un semaforo in modo che la maggior parte del tempo di attesa per entrare in una sezione critica un processo lo passi in stato di wait invece che consumare inutilmente cicli di CPU.
  3. Perchè nei sistemi reali l'algoritmo di rimpiazzamento second chance (orologio) viene preferito a LRU sebbene il primo non sia a stack e il secondo sì?
  4. Perchè revocare un'autorizzazione espressa come capability è più difficile che revocare lo stesso diritto quando espresso come access control list?