Difference between revisions of "Prove svolte e soluzioni proposte"

From Sistemi Operativi
Jump to navigation Jump to search
 
(185 intermediate revisions by 15 users not shown)
Line 1: Line 1:
Questa pagina serve a raccogliere prove d'esame svolte (che possono essere utili alla preparazione) e soluzioni proposte a tali prove da sottoporre a peer-review.
+
Questa pagina raccoglie prove d'esame svolte (che possono essere utili alla preparazione) e soluzioni proposte a tali prove da sottoporre a peer-review. Chiunque prenda visione di un esercizio è pregato (per il bene collettivo) a lasciare una [https://www.mediawiki.org/wiki/Help:Signatures propria firma] con nome utente e data di visualizzazione indicando se lo svolgimento è ritenuto corretto; in caso di svolgimento scorretto è invece invitato ad apportare una correzione o a '''spiegare il perché dell'errore commesso''', lasciando come nel caso precedente il proprio nome utente e data di correzione.
  
== Esame 17/07/2018 ==
+
Al fine di verificare la correttezza degli esercizi di concorrenza, segnaliamo la presenza di [[Tool_per_semafori_e_monitor|strumenti di programmazione concorrente]] per i linguaggi C e Python.
=== Esercizio c.1 ===
 
<source lang="c">
 
/* Monitor Delirum: */
 
  
Condition: Ok2Load;
+
== Prove scritte ==
Condition: Ok2Pour[]; // Un elemento per Type
+
* [[Prove scritte 2023]]
int availableBeer[]; // Un elemento per Type
+
* [[Prove scritte 2022]]
Queue requests[]; // Un elemento per Type
+
* [[Prove scritte 2021]]
Queue pendingRequests;
+
* [[Prove scritte 2020]]
 +
* [[Prove scritte 2019]]
 +
* [[Prove scritte 2018]]
 +
* [[Prove scritte 2017]]
 +
* [[Prove scritte 2015]]
 +
* [[Prove scritte 2014]]
 +
* [[Prove scritte 2013]]
 +
* [[Prove scritte 2011]]
 +
* [[Prove scritte 2005]]
  
Procedure entry: void Pour(Type t, Quantity c)
+
== Prove pratiche ==
{
+
* [[Prove pratiche 2022]]
    if (c > availableBeer[t]) // Richiesta maggiore della birra disponibile
+
* [[Prove pratiche 2019]]
    {
+
* [[Prove pratiche 2018]]
        c -= availableBeer[t];
+
* [[Prove pratiche 2017]]
        availableBeer[t] = 0;             
+
* [[Prove pratiche 2016]]
        requests[t].Enqueue(c);
 
        if (requests[t].Length == 1) // Risveglio un magazziniere solo se è la prima richiesta di questo tipo di birra
 
        {
 
            pendingRequests.Enqueue(t);
 
            Ok2Load().Signal();
 
        }
 
        Ok2Pour[t].Wait();
 
        requests[t].Dequeue(); // Quando ho ottenuto la birra che voglio, elimino la mia richiesta
 
    }
 
    availableBeer[t] -= c;
 
}
 
 
 
Procedure entry: Type isEmpty()
 
{
 
    if (pendingRequests.Length == 0)
 
    {
 
        Ok2Load.Wait();
 
    }
 
    return pendingRequests.Dequeue();
 
}
 
 
 
Procedure entry: Loaded(Type t, Capacity c)
 
{
 
    availableBeer[t] += c;
 
    while (requests[t].Length > 0 && availableBeer[t] > requests[t].head())
 
    {
 
        Ok2Pour[t].Signal();
 
    }
 
 
 
    if (requests[t].Length > 0) //serve per evitare che a causa di un magazziniere lento si accodino cosi tante richieste che mentre si sta caricando si svuota subito il fusto
 
    {
 
        pendingRequests.Enqueue(t);
 
        Ok2Load.Signal();
 
    }
 
}
 
</source>
 

Latest revision as of 15:49, 17 May 2023

Questa pagina raccoglie prove d'esame svolte (che possono essere utili alla preparazione) e soluzioni proposte a tali prove da sottoporre a peer-review. Chiunque prenda visione di un esercizio è pregato (per il bene collettivo) a lasciare una propria firma con nome utente e data di visualizzazione indicando se lo svolgimento è ritenuto corretto; in caso di svolgimento scorretto è invece invitato ad apportare una correzione o a spiegare il perché dell'errore commesso, lasciando come nel caso precedente il proprio nome utente e data di correzione.

Al fine di verificare la correttezza degli esercizi di concorrenza, segnaliamo la presenza di strumenti di programmazione concorrente per i linguaggi C e Python.

Prove scritte

Prove pratiche