• Non ci sono risultati.

UNIVERSITA' DI BOLOGNA - CORSO DI LAUREA IN INFORMATICA CORSO DI SISTEMI OPERATIVI - ANNO ACCADEMICO 2005/2006 PROVA PARZIALE DI CONCORRENZA – 04 Novembre 2005

N/A
N/A
Protected

Academic year: 2021

Condividi "UNIVERSITA' DI BOLOGNA - CORSO DI LAUREA IN INFORMATICA CORSO DI SISTEMI OPERATIVI - ANNO ACCADEMICO 2005/2006 PROVA PARZIALE DI CONCORRENZA – 04 Novembre 2005"

Copied!
8
0
0

Testo completo

(1)

Nome/cognome ____________________ N. di matricola (10 cifre) ______________________ Posizione: Riga _______ Col _______

UNIVERSITA' DI BOLOGNA - CORSO DI LAUREA IN INFORMATICA CORSO DI SISTEMI OPERATIVI - ANNO ACCADEMICO 2005/2006

PROVA PARZIALE DI CONCORRENZA – 04 Novembre 2005

Esercizio -1: essersi iscritti correttamente per svolgere questa prova.

Esercizio 0: Su entrambi i fogli, scrivere correttamente nome, cognome, matricola e posizione prima di svolgere ogni altro esercizio.

Esercizio 1 – Tavolo dei giocatori

In una casa da gioco si trova un tavolo con 5 sedie. I giocatori sono dotati di un capitale iniziale. Ogni giocatore

attende il suo turno per sedersi al tavolo e partecipare a un round di gioco. Quando 5 giocatori sono seduti al tavolo ogni giocatore lancia un dado. Chi ottiene il valore piu' alto vince la posta in gioco (1 unita' per giocatore). Tutti gli altri perdono la loro posta. Se piu' di un giocatore ottiene il valore piu' alto allora tutti i giocatori perdono la posta. Una volta finito il round i giocatori lasciano il tavolo e, se hanno ancora capitale disponibile, si rimettono in coda per giocare un nuovo round.

La vita di un giocatore e' quindi la seguente:

while(capitale > 0) {   casino.misiedo();

  capitale += casino.gioca(random(1,6));

  casino.mialzo();

}

Implementare il monitor casino con le procedure entry misiedo(), gioca() e mialzo().

Esercizio 2 – Double send message passing

Implementare usando le asend() e areceive() le seguenti primitive di comunicazione:

d = ssend2(m,d1,d2); Invia il messaggio m o a d1 o a d2. Il messaggio viene inviato al primo processo destinatario che effettua una sreceive. Nel caso entrambi i destinatari siano in attesa il messaggio venga inviato a d1. Ritorna l'identificativo del processo che ha ricevuto il messaggio.

m = sreceive(); Riceve un messaggio in maniera sincrona.

Esercizio 3:

La funzione

QR(X,Y)=<Y1=X%Y; X1=X/Y; X=X1; Y=Y1;>

consente di essere usata in modo simile a Test&Set? Motivare la risposta.

(2)
(3)

Nome/cognome ____________________ N. di matricola (10 cifre) ______________________ Posizione: Riga _______ Col _______

(4)
(5)

Nome/cognome ____________________ N. di matricola (10 cifre) ______________________ Posizione: Riga _______ Col _______

UNIVERSITA' DI BOLOGNA - CORSO DI LAUREA IN INFORMATICA CORSO DI SISTEMI OPERATIVI - ANNO ACCADEMICO 2005/2006

PROVA PARZIALE DI CONCORRENZA – 04 Novembre 2005

Esercizio -1: essersi iscritti correttamente per svolgere questa prova.

Esercizio 0: Su entrambi i fogli, scrivere correttamente nome, cognome, matricola e posizione prima di svolgere ogni altro esercizio.

Esercizio 1 – Tavolo dei giocatori

In una casa da gioco si trova un tavolo con 5 sedie. I giocatori sono dotati di un capitale iniziale. Ogni giocatore

attende il suo turno per sedersi al tavolo e partecipare a un round di gioco. Quando 5 giocatori sono seduti al tavolo ogni giocatore lancia un dado. Chi ottiene il valore piu' alto vince la posta in gioco (1 unita' per giocatore). Tutti gli altri perdono la loro posta. Se piu' di un giocatore ottiene il valore piu' alto allora tutti i giocatori perdono la posta. Una volta finito il round i giocatori perdenti lasciano il tavolo e, se hanno ancora capitale disponibile, si rimettono in coda per giocare un nuovo round.

La vita di un giocatore e' quindi la seguente:

while(capitale > 0) {   int guadagno;

  casino.misiedo();

  do {

   guadagno = casino.gioca(random(1,6));

   capitale += guadagno;

  } while(guadagno > 0)   casino.mialzo();

}

Implementare il monitor casino con le procedure entry misiedo(), gioca() e mialzo().

Esercizio 2 – Double receive message passing

Implementare usando le asend() e areceive() le seguenti primitive di comunicazione:

ssend(m,d); Invia un messaggio in maniera sincrona.

<m,s> = sreceive2(s1,s2); Riceve un messaggio m da s1 o s2. Il messaggio viene ricevuto dal primo processo mittente che effettua una ssend. Nel caso entrambi i mittenti siano in attesa che il messaggio venga inviato, viene ricevuto il messaggio da s1. Ritorna il messaggio e l'identificativo del processo mittente.

Esercizio 3:

La funzione

QR(X,Y)=<X1=X%Y; Y1=X/Y; X=X1; Y=Y1;>

consente di essere usata in modo simile a Test&Set? Motivare la risposta.

(6)
(7)
(8)

Riferimenti

Documenti correlati

Altrimenti, il sistema calcola il ritardo in base ai tempi dichiarati dai clienti che utilizzano le macchine e i clienti in coda; se questo ritardo è inferiore a maxdelay, il

Mostrate una sequenza di allocazioni e deallocazioni di memoria tale per cui il fenomeno della frammentazione esterna impedisce di soddisfare l'ultima richiesta di allocazione

Il buffer è limitato con dimensione N; la chiamata extract è bloccante se il buffer è vuoto; la chiamata insert è bloccante se il buffer è pieno. Inoltre, supponendo che esistono

Esercizio 0: Su entrambi i fogli, scrivere correttamente nome, cognome, matricola e posizione prima di svolgere ogni altro esercizio.. Spiegate concisamente l'algoritmo seguito

Esercizio 0: Su entrambi i fogli, scrivere correttamente nome, cognome, matricola e posizione prima di svolgere ogni altro esercizio.. Mostrare l'output dei processi

b) Descrivere una sequenza di allocazioni e deallocazioni di memoria principale che possa essere allocata correttamente da best-fit, ma che non possa essere gestita da first-fit (una

Siano date le funzioni void allocate(resourceset x), void deallocate(resourceset x), and boolean safe() che rispettivamente

p1. 3ms CPU, I/O traccia 10,  3 ms CPU, I/O traccia 3, 3 ms CPU