Sistemi Operativi T. Esercizi
|
|
|
- Giada Negro
- 8 anni fa
- Visualizzazioni
Transcript
1 Sistemi Operativi T Esercizi
2 Esercizio monitor Si consideri la toilette di un ristorante. La toilette è unica per uomini e donne. Utilizzando la libreria pthread, si realizzi un'applicazione concorrente nella quale ogni utente della toilette (uomo o donna) è rappresentato da un processo e il bagno come una risorsa. La politica di sincronizzazione tra i processi dovrà garantire che: nella toilette non vi siano contemporaneamente uomini e donne nell'accesso alla toilette, le donne abbiano la priorità sugli uomini. Si supponga che la toilette abbia una capacità limitata a N persone. Sistemi Operativi T 2
3 1. Quali processi? Impostazione 2. Qual è la struttura di ogni processo? 3. Definizione del monitor per gestire la risorsa 4. Definizione delle procedure "entry" 5. Definizione del programma concorrente Sistemi Operativi T 3
4 1. Quali processi? uomini donne Impostazione 2. Quale struttura per i processi? Uomo: entrau(toilet); <usa il bagno> esciu(toilet); Donna: entrad(toilet); <usa il bagno> escid(toilet); Sistemi Operativi T 4
5 Soluzione 3. Definizione del monitor per gestire la risorsa: uomini e donne sono soggetti a vincoli di sincronizzazione diversi possibilita` di attesa in ingresso per uomini e donne prevedo 2 condition (1 per uomini, 1 per donne) Sistemi Operativi T 5
6 3. Definizione del monitor public toilet{ private final int MAX=10; /* max capacita */ int ND; /* num. donne nella toilette*/ int NU; /* numero uomini nella toilette*/ private Lock lock = new ReentrantLock(); condition codad; /* var. cond. donne */ condition codau; /* var. cond. uomini */ int sospd;/* numero di donne sospese */ int sospu;/* numero di uomini sospesi*/ Sistemi Operativi T 6
7 public toilet() { ND=0; /* num. donne nella toilette*/ NU=0; /* numero uomini nella toilette*/ codad=lock.newcondition(); codau=lock.newcondition(); sospd=0;/* numero di donne sospese */ sospu=0; Sistemi Operativi T 7
8 4.Def. procedure entry /* Accesso alla toilette DONNE*/ public void accessod() throws InterruptedException { lock.lock(); try { while ((NU>0) /* ci sono uomini in bagno */ (ND==MAX)) /* il bagno e` pieno */ { sospd++; codad.await(); sospd--; ND++; finally{lock.unlock(); Sistemi Operativi T 8
9 4.Def. procedure entry public void accessou() throws InterruptedException { lock.lock(); try { while ((ND>0) /* ci sono donne in bagno */ (NU==MAX) /* il bagno e` pieno */ (sospd>0)) /* ci sono donne in attesa*/ { sospu++; codau.await(); sospu--; NU++; finally{lock.unlock(); Sistemi Operativi T 9
10 4.Def. procedure entry public void uscitad () { lock.lock(); ND--; if (sospd) codad.signal(); else if ((sospu) && (ND==0)) codau.signalall(); lock.unlock() Sistemi Operativi T 10
11 4.Def. procedure entry public void uscitau () {lock.lock(); NU--; if ((sospd)&& (NU==0)) codad.signalall(); else codau.signal(); lock.unlock() if (sospu) Sistemi Operativi T 11
12 Definizione main import java.util.concurrent.*; public class Bagno { public static void main (String args[]) { int i; toilet p; Uomo []U= new Uomo[100]; Donna []D= new Donna[100]; for (i=0; i<100; i++) { U[i]=new Uomo(i); D[i]=new Donna(i); for (i=0; i<100; i++) { U[i].start(); D[i].start(); Sistemi Operativi T 12
13 Esercizio Unix Si scriva un programma in C che, utilizzando le system call di unix, preveda la seguente sintassi: esame N N1 N2 C dove: esame è il nome dell eseguibile da generare N, N1, N2 sono interi positivi C e` il nome di un file eseguibile (presente nel PATH) Il comando dovrà funzionare nel modo seguente: il processo padre P0 deve creare 2 processi figli: P1e P2; Sistemi Operativi T 13
14 Il comando dovrà funzionare nel modo seguente: il processo padre P0 deve creare 2 processi figli: P1e P2; il figlio P1 deve aspettare N1 secondi e successivamente eseguire il comando C; il figlio P2 dopo N2 secondi dalla sua creazione dovra` provocare la terminazione del processo fratello P1 e successivamente terminare; nel frattempo P2 deve periodicamente sincronizzarsi con il padre P0 (si assuma la frequenza di 1 segnale al secondo). il padre P0, dopo aver creato i figli, si pone in attesa di segnali da P1: per ogni segnale ricevuto, dovra` stampare il proprio pid; al N-simo segnale ricevuto dovra` attendere la terminazione dei figli e successivamente terminare. Sistemi Operativi T 14
15 Soluzione dell esercizio #include <fcntl.h> #include <stdio.h> #include <signal.h> int PID1, PID2,N,esci=0; int cont=0; /* cont. dei segnali ricev. da P0*/ void gestore_p(int sig); /* gestore di SIGUSR1 per P0*/ void timeout(int sig); /* gestore timeout P2*/ main(int argc, char *argv[]) { int N1, N2, pf, status, i; char com[20]; Sistemi Operativi T 15
16 if (argc!=5) { printf("sintassi sbagliata!\n"); exit(1); N=atoi(argv[1]); N1=atoi(argv[2]); N2=atoi(argv[3]); strcpy(com, argv[4]); signal(sigusr1, gestore_p); PID1=fork(); Sistemi Operativi T 16
17 if (PID1==0) /*codice figlio P1*/ { sleep(n1); execlp(com,com,(char *)0); exit(0); else if (PID1<0) exit(-1); PID2=fork(); if (PID2==0) {/*codice figlio P2*/ int pp=getppid(); signal(sigalrm, timeout); alarm(n2); for(;;) { sleep(1); kill(pp, SIGUSR1); exit(0); Sistemi Operativi T 17
18 else if (PID2<0) exit(-1); /* padre */ while(1) pause(); exit(0); Sistemi Operativi T 18
19 void gestore_p(int sig) { int i, status, pf; cont++; printf("padre %d: ricevuto %d (cont=%d)!\n", getpid(), sig, cont); if (cont==n) { for (i=0; i<2; i++) { pf=wait(&status); if ((char)status==0) printf("term. %d con stato%d\n", pf, status>>8); else printf("term. %d inv. (segnale %d)\n", pf, (char)status); exit(0); return; Sistemi Operativi T 19
20 void timeout(int sig) { printf("figlio%d: scaduto timeout!\n"); kill(pid1, SIGKILL); exit(0); Sistemi Operativi T 20
21 Esercizio Unix (esame giugno 2007) Si realizzi un programma, che, utilizzando le system call del sistema operativo UNIX, soddisfi le seguenti specifiche: Sintassi di invocazione: Esame C N Significato degli argomenti: Esame è il nome del file eseguibile associato al programma. N e` un intero non negativo. C e` una stringa che rappresenta il nome di un file eseguibile (per semplicita`, si supponga che il direttorio di appartenenza del file C sia nel PATH). Sistemi Operativi T 21
22 Specifiche: Il processo iniziale (P0) deve creare 1 processo figlio P1 che, a sua volta crea un proprio figlio P2. Si deve quindi ottenere una gerarchia di 3 processi: P0 (padre), P1 (figlio) e P2 (nipote). Il processo P2, una volta creato, passa ad eseguire il comando C. Il processo P1, dopo aver generato P2, deve mettersi in attesa di uno dei 2 eventi seguenti: 1. la ricezione di un segnale dal padre, oppure 2. la terminazione di P2. Nel primo caso (ricezione di un segnale da P0) P1 termina forzatamente l esecuzione di P2 e poi termina. Nel secondo caso (terminazione di P2), P1 invia un segnale al padre P0 e successivamente termina trasferendo a P0 il pid di P2 Il processo P0, dopo aver generato P1, entra in un ciclo nel quale, ad ogni secondo, incrementa un contatore K; se K raggiunge il valore N, P0 invia un segnale al figlio P1 e termina. Nel caso in cui P0 riceva un segnale da P1 durante l esecuzione del ciclo, prima di terminare dovra` stampare lo stato di terminazione del figlio e successivamente terminare. Sistemi Operativi T 22
23 Soluzione dell esercizio #include <stdio.h> #include <signal.h> #include <string.h> #include <stdlib.h> #define dim 10 int P1, P2; int status; void GP(int sig); //gestore padre void GF(int sig); //gestore segnali figlio P1 main(int argc, char *argv[]) { int N, K=0; char C[dim]; if( argc!= 3 ) { \n", argv[0] ); exit(2); strcpy(c,argv[1]); N=atoi(argv[2]); printf( "sintassi: %s <nome_comando> <N> Sistemi Operativi T 23
24 signal(sigusr1, GP); P1=fork(); if (P1==0)//figlio { printf("sono il figlio..\n"); signal(sigusr1, GF); signal(sigchld, GF); P2=fork(); if (P2==0) //nipote { execlp(c, C, NULL); perror("attenzione: exec fallita!"); exit(1); pause(); //P1: attesa evento exit(0); else //padre { for (K=0; K<N; K++) sleep(1); printf("padre P0: esaurito ciclo di conteggio - segnale a P1..\n"); kill(p1, SIGUSR1); exit(0); /* fine padre */ Sistemi Operativi T 24
25 void GP(int sig) { int pf, status; printf( "P0 (PID: %d):ricevuto SIGUSR1\n", getpid()); pf=wait(&status); if ((char)status==0) printf("padre: valore trasferito da P1 (pid di P2): %d\n", status>>8); else printf("padre: la terminazione di %d involontaria (per segnale %d)\n", pf, (char)status); exit(1); Sistemi Operativi T 25
26 void GF(int sig) { int pf, status; if (sig==sigchld) //P2 terminato { printf( "P1 (PID: %d):ricevuto SIGCHLD-> esecuzione di P2 terminata\n", getpid()); pf=wait(&status); if ((char)status==0) printf("p1: terminazione di %d con stato %d\n", pf, status>>8); else printf("p1: terminazione di %d involontaria (segnale %d)\n", pf, (char)status); kill(getppid(), SIGUSR1); exit(pf); //trasferimento pid di P2 al padre P0 else //segnale da P0 { printf( "P1 (PID: %d):ricevuto SIGUSR1-> uccido P2\n", getpid()); kill(p2, SIGKILL); exit(0); Sistemi Operativi T 26
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
Sistemi Operativi L-A. Esercizi 14 Giugno 2007. Esercizio monitor
Sistemi Operativi L-A Esercizi 14 Giugno 2007 Esercizio monitor Si consideri la toilette di un ristorante. La toilette è unica per uomini e donne. Utilizzando la libreria pthread, si realizzi un'applicazione
La Comunicazione tra Processi in Unix
La Comunicazione tra Processi in Unix La è un canale di comunicazione tra processi: unidirezionale: accessibile ad un estremo in lettura ed all'altro in scrittura molti-a-molti: più processi possono spedire
System call per la gestione di processi
System call per la gestione di processi Chiamate di sistema per creazione di processi: fork() sostituzione di codice e dati: exec...() terminazione: exit() sospensione in attesa della terminazione di figli:
Sistemi Operativi Anno Accademico 2011/2012. Segnali: Interrupt software per la gestione di eventi asincroni
Anno Accademico 2011/2012 Segnali: Interrupt software per la gestione di eventi asincroni Concetto di segnale Un segnale è un interrupt software Un segnale può essere generato da un processo utente o dal
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
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2014-15 Pietro Frasca Lezione 20 Martedì 16-12-2014 1 System call per la gestione dei processi Creazione
I Processi nel Sistema Operativo Unix. Gerarchie di processi Unix. Stati di un processo Unix. Stati di un processo Unix.
I Processi nel Sistema Operativo Unix Processi Unix Unix è un sistema operativo multiprogrammato a divisione di tempo: l unità di computazione è il processo. Caratteristiche del processo Unix: processo
Sincronizzazione tra processi in Unix: : i segnali. Sistemi Operativi T AA
Sincronizzazione tra processi in Unix: : i segnali Sistemi Operativi T AA 2009-2010 1 Sincronizzazione tra processi La sincronizzazione permette di imporre vincoli sull'ordine di esecuzione delle operazioni
Esercizio sulla gestione di file in Unix
Esercizio sulla gestione di file in Unix 1 Esercizio Si vuole realizzare un programma C che, utilizzando le system call di Unix, realizzi uno schema di comunicazione tra due processi (padre e figlio) mediante
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
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:
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
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2016-17 Pietro Frasca Lezione 20 Giovedì 22-12-2016 Comunicazione: pipe In Unix, processi possono comunicare
Esempio: la Toilette Unisex
Esempio: la Toilette Unisex Si consideri la toilette di un ristorante. La toilette è unica per uomini e donne. Utilizzando i semafori forniti dalla libreria LinuxThreads, si realizzi un'applicazione concorrente
ESERCIZI DI PROGRAMMAZIONE C IN AMBIENTE UNIX
ESERCIZI DI PROGRAMMAZIONE C IN AMBIENTE UNIX Introduzione In questa dispensa sono stati raccolti alcuni esercizi di programmazione C in ambiente Unix, tratti dagli esami di Sistemi Operativi svoltisi
Principles of Concurrent Programming
Principles of Giuseppe Anastasi [email protected] Pervasive Computing & Networking Lab. () Dept. of Information Engineering, University of Pisa Overview Concetti preliminari Interazione fra processi
Sincronizzazione e comunicazione tra processi in Unix. usati per trasferire ad un processo l indicazione che un determinato evento si è verificato.
Processi parte III Sincronizzazione e comunicazione tra processi in Unix Segnali: usati per trasferire ad un processo l indicazione che un determinato evento si è verificato. Pipe: struttura dinamica,
I Processi nel Sistema Operativo Unix
I Processi nel Sistema Operativo Unix Processi Unix Unix è un sistema operativo multiprogrammato a divisione di tempo: l unità di computazione è il processo. Caratteristiche del processo Unix: processo
Gestione dei processi
Capitolo 1 Gestione dei processi 1.1 Creazione di un processo I principali eventi che possono dare luogo ad un nuovo processo sono: inizializzazione del sistema; esecuzione di una primitiva di sistema
Esercizi sul Monitor in Java
Esercizi sul Monitor in Java 1 I filosofi a cena (E. Dijkstra, 1965) 5 filosofi sono seduti attorno a un tavolo circolare; ogni filosofo ha un piatto di spaghetti tanto scivolosi che necessitano di 2 forchette
Esercizio 1 (15 punti)
Esercizio 1 (15 punti) Corsi di laurea in Ingegnera Elettronica e Ingegneria Gestionale Fondamenti di Programmazione / Fondamenti di Informatica I Prova scritta del 16 giugno 2017 Il noto gioco MasterMind
ACSO Programmazione di Sistema e Concorrente
ACSO Programmazione di Sistema e Concorrente P2 Modello Thread 2/12/2015 programma e parallelismo il tipo di parallelismo dipende dal grado di cooperazione (scambio di informazione) necessario tra attività
Lab. di Sistemi Operativi - Esercitazione n 7- -Gestione dei processi Unix-
Lab. di Sistemi Operativi - Esercitazione n 7- -Gestione dei processi Unix- 1 Sommario Esercizi sulla gestione dei processi Creazione di un nuovo processo: fork Sincronizzazione tra processi: wait 2 -
Comunicazione tra processi: pipe Le pipe sono un meccanismo UNIX di Inter Process Communication (IPC)
Comunicazione tra processi: pipe Le pipe sono un meccanismo UNIX di Inter Process Communication (IPC) Le pipe sono canali di comunicazione unidirezionali Limitazione pipe: permettono la comunicazione solo
Processi in Unix. Capitolo 8 -- Stevens
Processi in Unix Capitolo 8 -- Stevens Controllo dei processi Creazione di nuovi processi Esecuzione di programmi Processo di terminazione Altro Identificatori di processi Ogni processo ha un identificatore
AXO. Operativo. Architetture dei Calcolatori e Sistema. programmazione di sistema
AXO Architetture dei Calcolatori e Sistema Operativo programmazione di sistema Il sistema operativo Il Sistema Operativo è un insieme di programmi (moduli software) che svolgono funzioni di servizio nel
Processi UNIX. I Processi nel SO UNIX. Gerarchie di processi UNIX. Modello di processo in UNIX
Processi UNIX I Processi nel SO UNIX UNIX è un sistema operativo multiprogrammato a divisione di tempo: unità di computazione è il processo Caratteristiche del processo UNIX: processo pesante con codice
Esercizio monitor con pthreads
Esercizio monitor con pthreads Si consideri la pista di pattinaggio sul ghiaccio di una località turistica montana. La pista di pattinaggio è aperta a tutti. In particolare i clienti dell impianto si suddividono
Corso di Programmazione Concorrente Processi. Valter Crescenzi
Corso di Programmazione Concorrente Processi Valter Crescenzi http://crescenzi.inf.uniroma3.it Sommario Processi vs Thread Creazione e terminazione di processi chiamata di sistema fork() chiamata di sistema
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
Puntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata
Puntatori int i = 10; int * pi = &i; pi i = 10 116 int * pi = pi contiene un informazione che mi permette di accedere ( puntare ) ad una variabile intera Un puntatore contiene un numero che indica la locazione
Lab. di Sistemi Operativi - Esercitazione n 9- -Thread-
Lab. di Sistemi Operativi - Esercitazione n 9- -Thread- 1 Sommario Esercizi su: Comunicazione tra processi: la funzione pipe() Condivisione dati e codice tra due o più processi: concetto di Thread 2 -
La sincronizzazione è legata alla implementazione delle pipe: int pipe(int fd[2]);
int pipe(int fd[2]); Le pipe sono canali di comunicazione unidirezionali che costituiscono un primo strumento di comunicazione (con diverse limitazioni), basato sullo scambio di messaggi, tra processi
Gestione dei processi
Gestione dei processi Dormire unsigned int sleep(unsigned int); Attende un numero specificato di secondi a meno che non si verifichi un segnale Restituisce 0 se l'attesa è terminata senza interruzioni,
Chiamate di sistema per la Gestione dei processi in POSIX. E.Mumolo, DEEI [email protected]
Chiamate di sistema per la Gestione dei processi in POSIX E.Mumolo, DEEI [email protected] Process id ed altri identificatori pid_t getpid(); // Process id del processo chiamante pid_t getppid(); // Process
Esercizio sul Monitor. Ponte con utenti grassi e magri 11 Novembre 2013
Esercizio sul Monitor Ponte con utenti grassi e magri 11 Novembre 2013 1 Ponte con utenti grassi e magri Si consideri un ponte pedonale che collega le due rive di un fiume. Al ponte possono accedere due
Sistemi operativi Modulo II I semafori 2 Select
Il sistema operativo LINUX Semafori 2 Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica La system call read è bloccante Non
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
Esercitazione n. 8. Processi
Esercitazione n. 8 Processi (in ambiente GNU/Linux) dott. Carlo Todeschini [email protected] Politecnico di Milano A.A. 2010/2011 Queste slide sono distribuite con licenza Creative Commons Attribuzione-Non
C: panoramica. Violetta Lonati
C: panoramica Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010 Violetta Lonati
Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);
Fondamenti di Informatica L-A (A.A. 004/005) - Ingegneria Informatica Prof.ssa Mello & Prof. Bellavista I Prova Intermedia del 11/11/004 - durata h - COMPITO B Esercizio 1 (punti 1) Una associazione di
CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 5
UNIVERSITÀ DEGLI STUDI DI PARMA Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica a.a. 2005-2006 CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 5 1 Segnali Vi sono spesso eventi importanti
POSIX - Gestione dei Segnali. E.Mumolo, DEEI [email protected]
POSIX - Gestione dei Segnali E.Mumolo, DEEI [email protected] Segnali in POSIX Segnali in Posix Modalità di notifiche relative a vari eventi asincroni I signal interrompono un processo e possono o meno essere
Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE
Input/output da file Il linguaggio C non contiene istruzioni di I/O, in quanto tali operazioni vengono eseguite tramite funzioni di libreria standard. Questo approccio rende estremamente flessibile e potente
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 1 (15 punti)
Esercizio 1 (15 punti) Corsi di laurea in Ingegnera Elettronica e Ingegneria Gestionale Fondamenti di Programmazione / Fondamenti di Informatica I Prova scritta del 30 giugno 2017 In un lontano paese da
INTERPROCESS COMMUNICATION 27
INTERPROCESS COMMUNICATION 27 - Le comunicazioni tra processi (IPC, Intreprocess Communication) sono realizzate mediante strutture dati rese disponibili dal kernel. Sono disponibili 3 tipologie di comunicazioni
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
