UNIVERSITÀ DEGLI STUDI DI BERGAMO
|
|
|
- Gustavo Vecchi
- 9 anni fa
- Visualizzazioni
Transcript
1 UNIVERSITÀ DEGLI STUDI DI BERGAMO DIPARTIMENTO DI INGEGNERIA DELL INFORMAZIONE E METODI MATEMATICI Corso di Laurea in Ingegneria Informatica Esame di Sistemi Operativi (Modulo del C.I. di Reti di Calcolatori e Sistemi Operativi Modulo di Informatica II ) Appello 20 Luglio In una shell di comandi Linux-like: a. Per cosa si utilizza il carattere chiamato pipe? b. Descrivere cosa produce in output il comando: ls -l grep.gz [max 5 pt] 2. Descrivere il metodo di allocazione a partizioni multiple variabili per la gestione della memoria centrale. Con tale metodo, quali politiche (criteri) si usano per soddisfare una richiesta (da parte di un processo) di memoria libera di dimensione n? [max 7 pt] 3. Si considerino i seguenti processi, con la durata di picco della CPU in millisecondi: Si assuma che i processi arrivino nell'ordine P1, P2,...,P5, tutti all'istante 0. a. Disegnare quattro diagrammi di Gantt che illustrino l'esecuzione dei processi utilizzando FCFS, SJF, una schedulazione non-preemptive a priorità (numeri piccoli corrispondono a priorità alte), e una schedulazione RR con quanto di tempo q pari a 2. b. Qual è il tempo di turnaround di ciascun processo per ogni algoritmo di schedulazione? c. Qual è il tempo di attesa di ciascun processo per ogni algoritmo di schedulazione? d. Quale degli algoritmi di schedulazione fornisce il minimo tempo di attesa medio tra tutti i processi P1...P5? [max 10 pt] Quesito riservato agli studenti del C.I. di Reti di calcolatori e Sistemi operativi: 3. Si considerino due processi P1 e P2 in esecuzione concorrente: P1 con due istruzioni s1 e s2, e P2 con un istruzione s3. Si supponga di volere eseguire s3 solo dopo che s1 è terminata, e di eseguire s2 solo dopo che s3 sia terminata. Realizzare questo schema di sincronizzazione usando il meccanismo dei semafori. Esprimere la soluzione con un pseudolinguaggio o linguaggio di programmazione fittizio. [max 8 pt] Quesito riservato agli studenti di Informatica II ( ): 4. Si consideri il seguente problema di sincronizzazione. In un circolo enoculturale, np persone appassionate di vino si riuniscono per una degustazione. E presente una botte di vino pregiato di cui si desidera valutarne la qualità. La botte ha nr=3 rubinetti e contiene inizialmente nl=50 litri di vino; di conseguenza possono bere solo nr persone alla volta, sempre che la botte contenga ancora vino. Si supponga che ogni bevuta (da un singolo rubinetto) faccia diminuire il vino in botte di una quantità q di litri variabile, ma inferiore 1
2 a 2 litri; se la quantità q è maggiore della disponibilità di vino presente nella botte, viene prelevata solo la quantità di vino effettivamente presente (svuotando così la botte). Fornire uno schema di sincronizzazione in Java usando i semafori del package java.util.concurrent. A tale scopo, completare la soluzione data nel riquadro sotto nelle parti contrassegnate <DA COMPLETARE> nella classe BotteSinc. Nota che tale classe contiene i metodi att_al_rub e bevi invocati dal generico thread bevitore (la classe Bevitore) per consentire ad un bevitore, rispettivamente, di accedere ad uno dei rubinetti e di prelevare una certa quantità di vino. Il comportamento di un bevitore (vedi run() nella classe Bevitore) è il seguente: chiacchiera; poi decide di bere e si mette in attesa se non ci sono rubinetti liberi; una volta acquisito un rubinetto sceglie una certa quantità q di vino e la preleva dalla botte; infine, libera il rubinetto e ricomincia. Qualora non ci fosse più vino, il bevitore termina la sua esecuzione. [max 8 p.t.] public class Bevitore extends Thread { //Classe del generico thread bevitore BotteSinc botte; //riferimento all'oggetto sincronizzato botte int id; //identificativo numerico del thread Bevitore (BotteSinc botte, int id){ //Costruttore this.botte=botte; this.id=id; public void run(){ while (botte.getlitri()>0){ //Fintanto che la botte e' non vuota //Chiacchiera un po' prima di mettersi in fila per bere chiacchiera(); //Cerca di bere, cercando di accedere ad un rubinetto botte.att_al_rub(id); //Decide la quantità q di vino (inferiore a 2 l), e la preleva double q= Math.random()*2; botte.bevi(id,q); // fine while //fine run() public void chiacchiera(){ try{ //Aspetta un tempo casuale (max. 10 sec.) sleep( (int)( Math.random()*10000) ); catch (InterruptedException e){ //End class Bevitore //Classe dell oggetto botte import java.util.concurrent.semaphore; public class BotteSinc { private double litri_rimasti;//numero corrente di litri nella botte <DA COMPLETARE> //Dichiarazione dei semafori BotteSinc (double nl,int nr){//costruttore litri_rimasti=nl; //num. iniziale di litri di vino nella botte <DA COMPLETARE> //Inizializzazione dei semafori //Restituisce il num. corrente di litri di vino rimasti nella botte public double getlitri(){ //Sezione critica: lettura della variabile condivisa "litri_rimasti" <DA COMPLETARE> public void att_al_rub(int id){ <DA COMPLETARE> public void bevi(int id, double q){ <DA COMPLETARE> //End class BotteSinc 2
3 SOLUZIONE: 1. a. operatore pipe, concatena standard output e standard input di due programmi in modo che lo standard output di uno diventi lo standard input di un altro. b. Il comando ls l elenca in modo dettagliato il contenuto della directory corrente; mentre, in generale, il comando grep [opzioni] PATTERN [file] elenca le righe di un file che contengono il PATTERN specificato. Eseguendo ls -l grep.gz, l'output del comando ls -l verrà inviato a grep che a sua volta stamperà le righe corrispondenti ovvero la lista dei file con estensione.gz. Equivale a ls -l "*.gz" 2. Vedi Cap. 8, Sez e del libro adottato 3. Vedi Cap. 5 del libro adottato. a. FCFS P1 P2 P3 P4 P RR P1 P2 P3 P4 P5 P1 P5 P1 P5 P SJF P2 P4 P3 P5 P PRIORITA non-preemptive P2 P5 P1 P3 P b. Tempo di completamento (turnaround time) - dal momento dell immissione del processo nel sistema al momento del completamento. P P P P P c. Tempo di attesa è il tempo speso dal processo nella coda dei processi pronti. P P P P P d. La risposta è SJF; infatti: Tempo medio di attesa
4 4. Lo schema della soluzione è: Istruzioni di P1: s1; Istruzioni di P2: acquire(mutex1); release(mutex1); s3; acquire(mutex2); release(mutex2); s3; con mutex1 e mutex2 semafori binari inizializzati a 0 (risorsa in uso) e condivisi da P1 e da P2. Poiché mutex1 è inizializzato a 0, P2 esegue s3 solo dopo che P1 ha eseguito release(mutex1); che si trova dopo s1. Similmente per mutex2. 5. Una possibile soluzione è: import java.util.concurrent.semaphore; public class BotteSinc { //Dati condivisi: private double litri_rimasti;//numero corrente di litri nella botte private Semaphore mutex;//semaforo binario per la mutua esclusione //sulla risorsa litri_rimasti di vino in botte private Semaphore rb; //Semaforo generico (al max di valore nr) per //l accesso alle risorse rubinetti BotteSinc (double nl,int nr){ //Costruttore litri_rimasti=nl; //num. iniziale di litri di vino nella botte mutex = new Semaphore(1); rb = new Semaphore(nr); public void att_al_rub(int id){ //Fintanto che non ci sono rubinetti liberi, aspetto rb.acquire(); catch (InterruptedException e) {e.printstacktrace(); //Adesso c'è un rubinetto libero in meno System.out.println("Il bevitore n. "+id+ " si e' attaccato al rubinetto"); public void bevi(int id, double q){ mutex.acquire(); catch (InterruptedException e) {e.printstacktrace(); //Sezione critica: //Controllo se c'è ancora vino if (litri_rimasti==0) System.out.println("Il bevitore n. "+id+" non puo' bere, e' finito il vino."); else{ System.out.println("Il bevitore n. "+id+" vuole bere "+q+" litri di vino. Ne beve " + ((litri_rimasti-q>=0)? q : litri_rimasti)); litri_rimasti-= (litri_rimasti-q>=0)? q : litri_rimasti; System.out.println(" Sono rimasti "+litri_rimasti+" litri"); mutex.release(); //Ho finito di bere, quindi libero il rubinetto rb.release(); //adesso c'è un rubinetto libero in più 4
5 public double getlitri(){ mutex.acquire(); catch (InterruptedException e) { e.printstacktrace(); //Sezione critica: lettura della variabile condivisa // "litri_rimasti" double lt = litri_rimasti; mutex.release(); return lt; //Restituisce il num. corrente di litri di vino // rimasti nella botte //End class 5
UNIVERSITÀ DEGLI STUDI DI BERGAMO
UNIVERSITÀ DEGLI STUDI DI BERGAMO DIPARTIMENTO DI INGEGNERIA DELL INFORMAZIONE E METODI MATEMATICI Corso di Laurea in Ingegneria Informatica/Meccanica Esame di Sistemi Operativi a.a. 2008-09 (Modulo di
Java Virtual Machine. Indipendenza di java dalla macchina ospite. I threads in Java
programmi sorgente: files.java compilatore Indipendenza di java dalla macchina ospite Programmi java Programmi java Programmi java files.class bytecode linker/loader bytecode bytecode Java API files.class
Decima Esercitazione. Accesso a risorse condivise tramite Monitor Java
Decima Esercitazione Accesso a risorse condivise tramite Monitor Java 1 Agenda Esempio 1 La banca: gestione di una risorsa condivisa da più thread, con politica prioritaria Esercizio 2 da svolgere Accesso
Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A
Matematica 13/11/2007 Teoria Compito A Domanda 1 Descrivere, eventualmente utilizzando uno schema, gli elementi funzionali di una CPU. Domanda 2 Java è un linguaggio compilato o interpretato? Motivare
1. Che cos è un sistema multiprogrammato? Si può realizzare la multiprogrammazione
1. Che cos è un sistema multiprogrammato? Si può realizzare la multiprogrammazione su un sistema con una sola CPU? 2. Qual è la differenza tra un interruzione e una trap? Si faccia qualche esempio. 1.
Esercizio monitor. Sistemi Operativi T 1
Esercizio monitor Si consideri un piccolo Aereoporto, nel quale sia presente una sola pista, utilizzata sia per i decolli che per gli atterraggi. La pista puo` anche essere percorsa da mezzi di servizio:
Esercitazione maggio 2011
Esercitazione 11 23 maggio 2011 Monitor in Java Esercizio 1 In un sito di interesse geologico e` possibile visitare una grotta sotterranea, raggiungibile soltanto attraverso uno stretto cunicolo. Per motivi
Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro
Laboratorio di Programmazione Lezione 2 Cristian Del Fabbro Prossima lezione GIOVEDÌ 29 OTTOBRE 14:00 Input da tastiera package input; import java.io.*; public class Input { public static void main(string[]
Esercizi Esercizi Università di Salerno
Sistemi Operativi: Prof.ssa A. Rescigno Anno Acc. 2015-2016 Esercizi Esercizi Università di Salerno 1. In un sistema si possono presentare solo due tipi di processi: lettori P l e scrittori P s. Dove i
Esercizio semafori Java
Esercizio semafori Java Esercizio di programmazione concorrente in Java Si vuole realizzare un sistema per la gestione delle transazioni commerciali relative a un mercato ortofrutticolo all ingrosso. Il
ESERCIZI SULLO SCHEDULING DEI PROCESSI
ESERCIZI SULLO SCHEDULING DEI PROCESSI Esercizio 1 Esercizio 2 una priorità maggiore) e 4) RR (quanto=1). Esercizio 3 1 una priorità maggiore) e 4) RR (quanto=1). Esercizio 4 Esercizio 5 2 Esercizio 6
19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
19 - Eccezioni Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso
Esercizio sui Semafori
Esercizio sui Semafori Il mercato ortofrutticolo Sistemi Operativi T AA 2011-2012 1 Esercizio di programmazione concorrente in Java Si vuole realizzare un sistema per la gestione delle transazioni commerciali
Lab 4: Locks, Condition Variables in Java
Dept. of Computer Science Lab 4: Locks, Condition Variables in Java Matteo Camilli [email protected] Laboratorio di Sistemi Operativi a.a. 2015/16 Università degli Studi di Bergamo 1 Esercizi Lab3
Esercizio sul Monitor in Java. 18 maggio 2011
Esercizio sul Monitor in Java 18 maggio 2011 1 Il Bar dello Stadio In uno stadio e` presente un unico bar a disposizione di tutti i tifosi che assistono alle partite di calcio. I tifosi sono suddivisi
Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni
Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni Esercizio 1 Dire quale è la complessità temporale del seguente metodo, espressa con notazione asintotica O(.) (con la migliore
Le basi del linguaggio Java
Le basi del linguaggio Java Compilazione e interpretazione Quando si compila il codice sorgente scritto in Java, il compilatore genera il codice compilato, chiamato bytecode. È un codice generato per una
Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre 2014. Negli esercizi proposti si utilizzano le seguenti classi:
Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 22 settembre 2014 TEMPO DISPONIBILE: 2 ore Negli
Laboratorio di programmazione
Laboratorio di programmazione Lezione VIII Tatiana Zolo [email protected] 1 PROGRAMMAZIONE A OGGETTI Quando si programma a oggetti si scompone il problema in sottogruppi di parti collegate che tengono
Esercitazione 15. Il problema dello Sleeping Barber
Università degli Studi della Calabria Corso di Laurea in Ingegneria Informatica A.A. 2001/2002 Sistemi Operativi Corsi A e B Esercitazione 15 Il problema dello Sleeping Barber E dato un salone di barbiere,
Concorrenza e sincronizzazione
Concorrenza e sincronizzazione Ingegneria del software Ing. Jody Marca [email protected] Cosa faremo oggi 2 Concorrenza Sincronizzazione Concorrenza 3 Nei programmi Java fino ad ora sviluppati è presente
Sistemi operativi - Concetti ed esempi -Settima edizione
Capitolo 6: Sincronizzazione dei processi Capitolo 6: Sincronizzazione dei processi Introduzione Problema della sezione critica Soluzione di Peterson Hardware per la sincronizzazione Semafori Problemi
6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
6 - Blocchi e cicli Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://pages.di.unipi.it/milazzo milazzo di.unipi.it
9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
9 - Array Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di Laurea
Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014
Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 11 luglio 2014 TEMPO DISPONIBILE: 2 ore Negli esercizi
Esercitazioni 7 e 8. Bounded Buffer con sincronizzazione Java (1)
Università degli Studi della Calabria Corso di Laurea in Ingegneria Informatica A.A. 2001/2002 Corsi A e B Esercitazioni 7 e 8 Bounded Buffer con sincronizzazione Java (1) public class BoundedBuffer private
Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I)
Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I) Ing. Gianluca Caminiti Sommario ( OOP ) Programmazione Object-Oriented Incapsulamento, Ereditarietà, Polimorfismo Richiami
Corso: Fondamenti di Informatica (Gruppo 2) a.a Corsi di laurea: Ing. Settore Informazione
Corso: Fondamenti di Informatica (Gruppo 2) a.a. 2017-18 Corsi di laurea: Ing. Settore Informazione Questionario a Risposte Multiple per auto-valutazione del Lab05 Domanda n. 1 Argomento: Iterazioni, array
Lab 1: Java Multithreading
Dept. of Computer Science Lab 1: Java Multithreading Matteo Camilli [email protected] Laboratorio di Sistemi Operativi a.a. 2015/16 Università degli Studi di Bergamo 1 Outline Programmazione multithreading
Esercizi sul Monitor in Java. 22 Maggio 2015
Esercizi sul Monitor in Java 22 Maggio 2015 1 Il Bagno del Ristorante Si consideri la toilette di un ristorante. La toilette è unica per uomini e donne. Utilizzando Java, si realizzi un'applicazione concorrente
Perché il linguaggio C?
Il linguaggio C 7 Perché il linguaggio C? Larga diffusione nel software applicativo Standard di fatto per lo sviluppo di software di sistema Visione a basso livello della memoria Capacità di manipolare
