• Non ci sono risultati.

process P[i] { while true { /* hic sunt leones */ dueotre.enter() /* use dueotre resource */ dueotre.exit() }}

N/A
N/A
Protected

Academic year: 2021

Condividi "process P[i] { while true { /* hic sunt leones */ dueotre.enter() /* use dueotre resource */ dueotre.exit() }}"

Copied!
5
0
0

Testo completo

(1)

Nome_______________ Cognome _____________________N. di matricola (10 cifre) _____________________ Riga ___ Col _____

UNIVERSITA' DEGLI STUDI DI BOLOGNA - CORSO DI LAUREA IN INFORMATICA CORSO DI SISTEMI OPERATIVI - ANNO ACCADEMICO 2007/2008

CONCORRENZA – 11 Luglio 2008

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

Esercizio 0: Scrivere correttamente nome, cognome, matricola e posizione prima di svolgere ogni altro esercizio.

Esercizio 1: Una risorsa puo' essere utilizzata da due o tre processi contemporaneamente.

Quando la risorsa e' occupata occorre che tutti i processi che la stanno utilizzando abbiano terminato per poterne ammettere altri. Pertanto se la risorsa e' inutilizzata o c'e' solo un processo in attesa il secondo processo che ne fa richiesta causera' l'inizio dell'utilizzazione della risorsa (da parte di entrambi).

Se quando la risorsa viene liberata dall'ultimo utilizzatore ci sono tre o piu' processi in attesa di utilizzarla dovranno venir ammessi i primi tre, se ce ne sono due la utilizzeranno in due, se ce n'e' uno solo o nessuno occorre attendere.

Scrivere un monitor dueotre con due metodi enter e exit che regolino secondo le indicazioni appena date la vita di processi che eseguino il seguente codice:

process P[i] { while true {

/* hic sunt leones */

dueotre.enter()

/* use dueotre resource */

dueotre.exit() }

}

Esercizio 2: E' possibile implementare un meccanismo di entrata/uscita da sezione critica usando le seguenti operazioni atomiche?

a) F(X,Y) = < X += Y; Y += X >

b) F(X,Y) = < X *= Y; Y *= X >

c) F(X,Y) = < if (X==Y) { X *= Y; Y *= X; } else { X += Y; Y += X} >

d) F(X,Y) = < if (X==Y) { X += Y; Y += X; } else { X *= Y; Y *= X} >

Esercizio 3: Spiegare perche' mai e come, senza introdurre alcun nuovo processo, e' possibile implementare il message passing totalmente asincrono utilizzando il message passing asincrono, ma non e' possibile implementare quello asincrono utilizzando quello sincrono. Tale situazione puo' infatti apparire sorprendente in quanto in entrambi I casi il problema consiste nell'implementare una primitiva asincrona utilizzando una primitiva sincrona.

(2)
(3)

Nome_______________ Cognome _____________________N. di matricola (10 cifre) _______________________ Riga ___ Col _____

UNIVERSITA' DEGLI STUDI DI BOLOGNA - CORSO DI LAUREA IN INFORMATICA CORSO DI SISTEMI OPERATIVI - ANNO ACCADEMICO 2007/2008

PARTE GENERALE – 11 Luglio 2008

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

Esercizio 0: Scrivere correttamente nome, cognome, matricola e posizione prima di svolgere ogni altro esercizio.

Esercizio 1: Sia dato un buffer di 16K gestito con il metodo delle buddy list e unita' di allocazione minima 1K.

Mostrare una sequenza di operazioni che porti ad avere 8K liberi frammentati in blocchi da 1K.

Mostrare la storia dello stato della memoria a seguito di ogni operazione.

Esercizio 2:

:

Si consideri un sistema RAID 4 formato da 5 dischi. Supponiamo che il file system contenga I seguenti file:

file1 strip dati: 3,6,7,10 (+ strips di parita') file2 strip dati: 0,1,9,11 (+ strips di parita') file3 strip dati: 2,4,5,8 (+ strips di partia')

Supponiamo per semplicita' che lo strip n-esimo contenga il numero n espresso in binario.

a) Rappresentare la distribuzione degli strip di dati e degli strip di parita' sui 5 dischi. In particolare, rappresentare il contenuto di tutti gli strip di ogni disco (sia dischi dati che dischi parita').

b) Quanti dischi sono coinvoli nell'accesso in lettura al file file1 (lettura completa del file)? Quanti accessi al disco sono necessari? Quali di questi potranno essere eseguiti in contemporanea?

c) Quanti dischi sono coinvolti nell'accesso in scrittura al file file2 (ri-scrittura completa del file)? Quanti accessi al disco sono necessari? Quali di questi potranno essere eseguiti in contemporanea?

d) Supponiamo che uno dei dischi si rompa e debba essere sostituito. Spiegare come viene ricostruita l'informazione contenuta nel disco che si e' rotto.

Esercizio 3:

Sia x l'ultima e y la penultima cifra del vostro numero di matricola. Rispondete alla domanda

(y*10+x)

%3.

0. Descrivere le condizioni che determinano il deadlock e come possono essere attaccate per prevenirlo.

1. Dare la definizione di deadlock e descrivere due differenti metodi per l'individuazione (detection) del deadlock.

2. Dare la definizione di starvation, mostrando una situazione in cui ci sia starvation. Descrivere un metodo generale per eliminare starvation.

(4)
(5)

Riferimenti

Documenti correlati

Nella figura 3 è stato illustrato il sistema di controllo della posizione delle testine nel quale sono messi in evidenza i vari disturbi che agiscono sulla posizione delle testine.

 Una volta creato il file, si possono salvare ad esempio dati di tipi primitivi se incapsuliamo il file dentro un DataOutputStream.  Questa classe estende FilterOutputStream (che

Esercizio 0: Scrivere correttamente nome, cognome, matricola e posizione prima di svolgere ogni altro esercizio. Esercizio 1: Considerate un file system tipo UNIX inizialmente

• “w+” crea un file per l’aggiornamento (lettura e scrittura) ; se il file già esiste esso sarà riscritto cancellando il contenuto precedente. • “r+” apre il file

• Magazzino: è vettore di struct dichiarato nel main e passato prima alla funzione di lettura del magazzino e poi alla funzione di ricerca degli articoli mancanti

Abbreviations: ABC, activated B cell-like; ALL, acute lymphoblastic leukemia; AML, acute myeloid leukemia; ARMS, alveolar rhabdomyosarcomas; BRM, Brahma; BRG1, BRM-related gene 1;

• Le operazioni di lettura e scrittura su file ad accesso random fanno uso di un indice che si può spostare con le funzioni lseek (basso livello) e fseek (stream). • Ovviamente non

o implementare una funzione virtuale nella classe base implementata nelle classi derivate (con output). o implementare una funzione virtuale nella classe base non implementata