5f Esercizi Progr. Concorrente e Vari

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "5f Esercizi Progr. Concorrente e Vari"

Transcript

1 5f Esercizi Progr. Concorrente e Vari Contenuti: Esercizio 1 Programmazione concorrente, gestione coda FIFO (fornaio FIFO) Esercizio 2 - script, processi in background, pid, variabili. Esercizio 3 - script e stdout Esercizio 4 - script, stdout, e espressioni condizionali if Esercizio 5 - script, stdout, espressioni condizionali if e text utils ( sort etc etc ) Esercizio 6 - esecuzione comandi, precedenze operatori e raggruppamento comandi Esercizio 7 - espressioni condizionali Esempio soluzione semplice esercizio 1 Esempio soluzione piu' efficiente esercizio 1 Soluzioni esercizi 2, 3, 4, 5

2 Esercizio 1 - Fornaio FIFO (1/3) Un fornaio ha deciso di installare una macchinetta che distribuisce dei biglietti con un numero intero crescente per dirimere le liti tra i clienti in coda per essere serviti. Ciascun cliente che entra accede al distributore e prende un biglietto, poi aspetta il suo turno per essere servito. Il primo biglietto, di valore 0, lo prende il fornaio e lo posa sul bancone. Il biglietto sul bancone indica chi e' di turno. In particolare, chi possiede il biglietto di valore (1+bigliettoSulBancone) e' di turno non appena il fornaio ha finito di servire il cliente e dopo che questo ha poggiato il proprio biglietto sul bancone da qualche parte. Ogni volta che il fornaio finisce di servire un cliente, cambia il valore del bigliettosulbancone mettendo il valore del cliente appena servito, poi lancia un urlo per avvisare tutti che ha finito e che attende il prossimo cliente, poi aspetta che il cliente di turno arrivi al bancone. Quando il cliente di turno arriva al bancone, mette il suo biglietto sul bancone, avvisa il fornaio di essere arrivato, e aspetta di essere servito. Quando il fornaio finisce di servire il cliente al bancone, lo saluta e lo manda a casa, poi urla per avvisare il prossimo cliente di venire al bancone e aspetta. Dopo essere stato servito, il cliente se ne va. Ipotizziamo che: - il primo cliente prende il biglietto col numero 1. - nessun cliente va via dopo avere preso il biglietto; tutti restano in coda fino ad essere serviti. Modellare ed implementare il sistema descritto, utilizzando dei thread POSIX per ciascuna figura (il fornaio, i clienti) ed avvalendosi delle opportune strutture dati per la sincronizzazione. Utilizzare e completare i file (sorgenti e Makefile) disponibili al link:

3 Continuazione Esercizio 1 - Fornaio FIFO (2/3) L'archivio con la base per l'esercizio contiene un Makefile e alcuni moduli di utilita' che avete gia' usato (DBGpthread.h DBGpthread.c printerror.h) ed un modulo con il main del programma fornaiobasefifo.c. In questo modulo sono definite alcune variabili globali ed alcune funzioni: int64_t bigliettoglob=0; il contatore del distributore pthread_mutex_t mutexdistributorebiglietti; protegge il distributore questa var non deve essere usata per nesun altro motivo. int64_t bigliettosulbancone; biglietto su bancone che determina il turno Nel main viene inizializzata la mutex che protegge il distributore. Nel main vengono creati NUMCLIENTICONTEMPORANEAMENTE thread di tipo cliente, che vanno dal fornaio e terminano, Man mano che i thread terminano il main ne crea altri. La funzione clientechevuoleesseresalutato implementa il cliente. All'interno e' gia' presente il codice che prende il biglietto e lo mette in una variabile locale del cliente int64_t biglietto; Quando va al bancone, il cliente poggia il suo biglietto sul bancone. bigliettosulbancone=biglietto; La funzione fornaiochesaluta implementa la base per il fornaio. All'interno sono gia presenti due parti, che servono per fare un po' di output: - nella parte gestita in mutua esclusione, DOPO che il cliente e' arrivato al bancone ed ha posato il biglietto sul Bancone, viene essere salvato in yna variabile locale il valore del biglietto posato dal cliente. temp_bigliettosulbancone = bigliettosulbancone; Mentre il fornaio serve il cliente, FUORI DALLA MUTUA ESCLUSIONE, viene stampato il valore del biglietto del cliente, salvato nella variabile temp_bigliettosulbancone.

4 Continuazione Esercizio 1 - Fornaio FIFO (3/3) Completare il codice con la parte necessaria a realizzare la sincronizzazione. NB: Una soluzione efficiente e' sintetizzata alla fine delle slide. La soluzione efficiente, completa, e' scaricabile all'indirizzo

5 Esercizio 2 - script, processi, background e pid. Realizzare uno script bash aspetta.sh che prende come argomento un numero intero. Lo script deve attendere un numero di secondi pari al numero passato come argomento allo script, e poi terminare restituendo 0. Scrivere poi uno script principale, lanciaekilla.sh che lancia 10 volte direttamente in background lo script aspetta.sh, passando come argomento Lo script lanciaekilla.sh, ogni volta che lancia lo script aspetta.sh, deve prendere il pid del processo messo in background. Man mano che crea figli, lo script lanciaekilla.sh memorizza i pid dei figli creati in una variabile PIDFIGLI che contiene uno dopo l'altro, separati da uno spazio bianco, i pid dei diversi figli. Ad esempio, dopo la creazione di 10 figli, il contenuto della variabile PIDFIGLI potrebbe essere Dopo avere creato i 10 figli, il processo padre lancia un ultimo script, killa.sh. Lo script killa.sh, al proprio interno, legge la variabile PIDFIGLI, separa i pid dei diversi processi, e usa uno per uno quei pid per eliminare uno per uno i processi, mediante il comando kill -9 pidprocessodaeliminare

6 Esercizio 3 - script e stdout Realizzare uno script bash che considera tutti i file con estensione.h contenuti direttamente nella directory /usr/include/ (non nelle sottodirectory). Lo script deve stampare sullo standard output il numero intero dato dalla somma del numero delle righe di ciascuno dei file considerati. Suggerimento: utilizzare il comando wc per ottenere il numero di righe di cui e' formato ciascun file. Esercizio 4 - script, stdout, e espressioni condizionali if Realizzare uno script bash che considera i file con estensione.h contenuti direttamente nella directory /usr/include/ (non nelle sottodirectory) e che abbiano al loro interno almeno 100 righe. Lo script deve stampare sullo standard output il numero intero dato dalla somma del numero delle righe di ciascuno dei file considerati. Suggerimento: utilizzare il comando wc per ottenere il numero di righe di cui e' formato ciascun file. Esercizio 5 - script, stdout, espressioni condizionali if e text utils ( sort etc etc ). Realizzare uno script bash che considera i file con estensione.h contenuti direttamente nella directory /usr/include/ (non nelle sottodirectory) e che al loro interno abbiano almeno 10 righe contenenti la parola ifdef. Da questi file prendere le prime 5 righe che contengono la parola ifdef. Creare un primo file che contiene tutte le righe cosi' selezionate. Usando il comando sort, creare un secondo file, chiamandolo FINALE.txt, che contiene le righe del primo file ma ordinate secondo l'ordine lessicografico crescente.

7 Esercizio 6 - esecuzione comandi, precedenze operatori e raggruppamento comandi Realizzare uno script bash che: esegue il comando echo ciao se tale comando va a buon fine esegue il comando cat /usr/include/stdlib.h se tale comando va a buon fine esegue il comando sleep 1 se tale comando va a buon fine esegue il comando false niente se tale comando NON va a buon fine esegue echo puzzola Se uno dei 5 comandi specificati non ha ottenuto il risultato indicato, allora occorre eseguire il comando cat /usr/include/stdio.h tutto lo standard output prodotto dai comandi precedenti deve essere processato dal comando grep -i -v int Esercizio 7 - espressioni condizionali realizzare uno script che mette in output il numero di directory contenute nella directory /usr/include (non considerare le directory contenute nelle sottodirectory).

8 soluzione SEMPLICE Esercizio 1 - fornaio FIFO 1/3 #define NUMCLIENTICONTEMPORANEAMENTE 50 /* variabili da proteggere */ int64_t bigliettoglob=0; int64_t bigliettosulbancone, previousbigliettosulbancone; /* variabili per la sincronizzazione */ pthread_mutex_t mutexdistributorebiglietti; pthread_mutex_t mutex; pthread_cond_t condattendiprossimoturno; pthread_cond_t condsaluto; /* aggiunta per salutare */ int main ( void) { pthread_t th, vth[numclienticontemporaneamente]; int rc, i, itot, *intptr; rc = pthread_cond_init( &condsaluto, NULL); rc = pthread_cond_init( &condattendiprossimoturno, NULL); rc = pthread_mutex_init( &mutex, NULL); rc = pthread_mutex_init( &mutexdistributorebiglietti, NULL); bigliettoglob=1; previousbigliettosulbancone=0; rc=pthread_create( &th, NULL, fornaiochesaluta,(void*)null); for(i=0;i<numclienticontemporaneamente;i++) { intptr=malloc(sizeof(int)); *intptr=i; rc=pthread_create( &(vth[i]),null,clientechevuoleesseresalutato,(void*)intptr); itot=i-1; i=0; while(1) { /* aspetto la fine di un thread e ne lancio un altro */ void *ptr; rc=pthread_join( vth[i], &ptr ); intptr=malloc(sizeof(int)); *intptr=itot; itot++; rc=pthread_create( &(vth[i]),null,clientechevuoleesseresalutato,(void*)intptr); i++; i = i%numclienticontemporaneamente;

9 continua soluzione SEMPLICE Esercizio 1 - fornaio FIFO 2/3 void *fornaiochesaluta (void *arg) { while(1) { pthread_mutex_lock(&mutex,flabel); /* dico chi e' il prossimo ad essere */ previousbigliettosulbancone=bigliettosulbancone; /* libero gli eventuali clienti che non erano di turno */ pthread_cond_broadcast ( &condattendiprossimoturno); /* aspetto che il cliente arrivi al bancone */ pthread_cond_wait ( &condsaluto, &mutex ); /* ORA il cliente ha appoggiato il suo biglietto al bancone */ /* rilascio mutua esclusione */ pthread_mutex_unlock(&mutex ); /* fornaio serve il cliente */ printf("fornaio serve cliente \n" ); fflush(stdout); /* il fornaio serve il cliente per 1/2 di sec piu o meno */ nanosleep( ); /* fornaio finisce di servire il cliente */ /* prendo la mutua esclusione */ pthread_mutex_lock(&mutex ); /* fornaio saluta per far uscire fuori il cliente */ pthread_cond_signal( &condsaluto ); printf("fornaio ha salutato cliente \n" );fflush(stdout); /* rilascio mutua esclusione */ pthread_mutex_unlock(&mutex); pthread_exit(null);

10 continua soluzione SEMPLICE Esercizio 1 - fornaio FIFO 3/3 void *clientechevuoleesseresalutato (void *arg) { int64_t biglietto; pthread_mutex_lock(&mutexdistributorebiglietti ); biglietto=bigliettoglob; /* cliente prende il biglietto */ bigliettoglob++; pthread_mutex_unlock(&mutexdistributorebiglietti ); /* cliente controlla il biglietto sul Bancone per vedere se e' il suo turno oppure no. Se non e' il suo turno aspetta che il fornaio lo risvegli. Al risveglio, il cliente controlla di nuovo se e' il suo turno. Se non e' il suo turno si blocca in attesa del prossimo turno.*/ pthread_mutex_lock(&mutex ); while( (previousbigliettosulbancone+1)!= biglietto ) { /* non sono di turno, aspetto */ pthread_cond_wait( &condattendiprossimoturno, &mutex ); /* io cliente esco dalla coda e vado al bancone del fornaio */ bigliettosulbancone=biglietto; pthread_cond_signal ( &condsaluto ); /*ok, sono al banco, ora il fornaio mi serve */ /* il cliente aspetta mentre il fornaio lo serve */ pthread_cond_wait( &condsaluto, &mutex ); /* aspetto il saluto del fornaio per andare via dal banco */ pthread_mutex_unlock(&mutex ); /* rilascio mutua esclusione */ /* e il cliente se ne va */ pthread_exit(null);

11 soluzione piu' EFFICIENTE Esercizio 1 - fornaio FIFO 0/3 UNA SOLUZIONE PIU' EFFICIENTE IMPEDISCE CHE, IN UNO STESSO TURNO, UNO STESSO CLIENTE VENGA SVEGLIATO PIU' VOLTE PER CONTROLLARE SE E' IL SUO TURNO vedi qui di seguito. La soluzione piu' efficiente e' pero' abbastanza complicata/

12 soluzione piu' EFFICIENTE Esercizio 1 - fornaio FIFO 1/3 #define NUMCLIENTICONTEMPORANEAMENTE 50 /* variabili da proteggere */ int64_t bigliettoglob=0; int64_t bigliettosulbancone, previousbigliettosulbancone; /* variabili per la sincronizzazione */ pthread_mutex_t mutexdistributorebiglietti; pthread_mutex_t mutex; pthread_cond_t condfornaiolibero; pthread_cond_t condattendiprossimoturno; pthread_cond_t condsaluto; /* aggiunta per salutare */ int main ( void) { pthread_t th, vth[numclienticontemporaneamente]; int rc, i, itot, *intptr; rc = pthread_cond_init( &condfornaiolibero, NULL); rc = pthread_cond_init( &condsaluto, NULL); rc = pthread_cond_init( &condattendiprossimoturno, NULL); rc = pthread_mutex_init( &mutex, NULL); rc = pthread_mutex_init( &mutexdistributorebiglietti, NULL); bigliettoglob=1; previousbigliettosulbancone=0; rc=pthread_create( &th, NULL, fornaiochesaluta,(void*)null); for(i=0;i<numclienticontemporaneamente;i++) { intptr=malloc(sizeof(int)); *intptr=i; rc=pthread_create( &(vth[i]),null,clientechevuoleesseresalutato,(void*)intptr); itot=i-1; i=0; while(1) { /* aspetto la fine di un thread e ne lancio un altro */ void *ptr; rc=pthread_join( vth[i], &ptr ); intptr=malloc(sizeof(int)); *intptr=itot; itot++; rc=pthread_create( &(vth[i]),null,clientechevuoleesseresalutato,(void*)intptr); i++; i = i%numclienticontemporaneamente;

13 continua soluzione piu' EFFICIENTE Esercizio 1 - fornaio FIFO 2/3 void *fornaiochesaluta (void *arg) { while(1) { pthread_mutex_lock(&mutex,flabel); /* dico chi e' il prossimo ad essere */ previousbigliettosulbancone=bigliettosulbancone; /* libero gli eventuali clienti che non erano di turno */ pthread_cond_broadcast ( &condattendiprossimoturno); /* se il prossimo cliente e' gia' in coda, ne risveglio 1 */ pthread_cond_signal ( &condfornaiolibero ); /* aspetto che il cliente arrivi al bancone */ pthread_cond_wait ( &condsaluto, &mutex ); /* ORA il cliente ha appoggiato il suo biglietto al bancone */ /* rilascio mutua esclusione */ pthread_mutex_unlock(&mutex ); /* fornaio serve il cliente */ printf("fornaio serve cliente \n" ); fflush(stdout); /* il fornaio serve il cliente per 1/2 di sec piu o meno */ nanosleep( ); /* fornaio finisce di servire il cliente */ /* prendo la mutua esclusione */ pthread_mutex_lock(&mutex ); /* fornaio saluta per far uscire fuori il cliente */ pthread_cond_signal( &condsaluto ); printf("fornaio ha salutato cliente \n" );fflush(stdout); /* rilascio mutua esclusione */ pthread_mutex_unlock(&mutex); pthread_exit(null);

14 continua soluzione piu' EFFICIENTE Esercizio 1 - fornaio FIFO 3/3 void *clientechevuoleesseresalutato (void *arg) { int64_t biglietto; pthread_mutex_lock(&mutexdistributorebiglietti ); biglietto=bigliettoglob; /* cliente prende il biglietto */ bigliettoglob++; pthread_mutex_unlock(&mutexdistributorebiglietti ); /* cliente controlla il biglietto sul Bancone per vedere se e' il suo turno oppure no. Se non e' il suo turno aspetta che qualcuno lo risvegli. Se qualcuno lo sveglia, il cliente controlla di nuovo se e' il suo turno. Se non e' il suo turno si blocca in attesa del prossimo turno.*/ pthread_mutex_lock(&mutex ); while( (previousbigliettosulbancone+1)!= biglietto ) { /* non sono di turno, aspetto */ pthread_cond_wait( &condfornaiolibero, &mutex ); if( (previousbigliettosulbancone+1)!= biglietto ) { /* prima di aspettare risveglio un altro cliente in coda */ pthread_cond_signal( &condfornaiolibero ); pthread_cond_wait( &condattendiprossimoturno, &mutex ); /* rifaccio il controllo sul loop, in attesa del fornaio libero */ else { /* e' il mio turno, esco dal loop */ break; /* io cliente esco dalla coda e vado al bancone del fornaio */ bigliettosulbancone=biglietto; pthread_cond_signal ( &condsaluto ); /*ok, sono al banco, ora il fornaio mi serve */ /* il cliente aspetta mentre il fornaio lo serve */ pthread_cond_wait( &condsaluto, &mutex ); /* aspetto il saluto del fornaio per andare via dal banco */ pthread_mutex_unlock(&mutex ); /* rilascio mutua esclusione */ /* e il cliente se ne va */ pthread_exit(null);

15 soluzione Esercizio 2 aspetta.sh #/bin/bash if (( "$#"!= 1 )) ; then echo "num arg errato" ; exit 1 ; fi sleep $1 exit 0 killa.sh #/bin/bash for pidfiglio in ${PIDFIGLI ; do kill -9 ${pidfiglio done exit 0 lanciaekilla.sh #/bin/bash for (( num=0; ${num<10; num=${num+1 )) ; do./aspetta.sh 1000 & PIDFIGLI="${PIDFIGLI $!" ; done export PIDFIGLI./killa.sh exit 0 NB: for pid in `ps aux grep sleep cut --bytes=3-10 ` ; do kill -9 $pid ; done

16 soluzione Esercizio 3 somma_h.sh #/bin/bash SOMMA= for nomefile in `ls /usr/include/*.h` ; do OUT=`wc -l ${nomefile` (( SOMMA=${SOMMA+${OUT%% * )) done echo "SOMMA=${SOMMA" exit 0 soluzione Esercizio 4 somma_h_minori100.sh #/bin/bash SOMMA= for nomefile in `ls /usr/include/*.h` ; do OUT=`wc -l ${nomefile` LINES=${OUT%% * if (( "${LINES" >= "100" )) ; then (( SOMMA=${SOMMA+${LINES )) fi done echo "SOMMA=${SOMMA" exit 0 NB: for pid in `ps aux grep sleep cut --bytes=3-10 ` ; do kill -9 $pid ; done

17 soluzione Esercizio 5 somma_h_ifdef10.sh #/bin/bash if [[ -e PARZIALE.txt ]] ; then rm -f PARZIALE.txt fi for nomefile in `ls /usr/include/*.h` ; do OUT=`cat ${nomefile grep ifdef wc -l ` LINES=${OUT%% * if (( "${LINES" >= "10" )) ; then cat ${nomefile grep ifdef head -n 5 >> PARZIALE.txt fi done sort PARZIALE.txt > FINALE.txt exit 0 soluzione Esercizio 7 find /usr/include/ -maxdepth 1 -mindepth 1 -type d wc -l NB: for pid in `ps aux grep sleep cut --bytes=3-10 ` ; do kill -9 $pid ; done

Laboratorio su Programmazione Concorrente in C. Problemi classici e derivati Dalla Ottava lezione di laboratorio in avanti

Laboratorio su Programmazione Concorrente in C. Problemi classici e derivati Dalla Ottava lezione di laboratorio in avanti Laboratorio su Programmazione Concorrente in C Problemi classici e derivati Dalla Ottava lezione di laboratorio in avanti NOTA BENE: E INSISTO!!!!! Usare il comando man nomefunzionedilibreria per ottenere

Dettagli

Laboratorio su Programmazione Concorrente in C. Problemi classici e derivati Dalla Ottava lezione di laboratorio in avanti

Laboratorio su Programmazione Concorrente in C. Problemi classici e derivati Dalla Ottava lezione di laboratorio in avanti Laboratorio su Programmazione Concorrente in C Problemi classici e derivati Dalla Ottava lezione di laboratorio in avanti NOTA BENE: E INSISTO!!!!! Usare il comando man nomefunzionedilibreria per ottenere

Dettagli

6h Esercizi (laboratorio lez 11) Progr. Concorrente e Bash

6h Esercizi (laboratorio lez 11) Progr. Concorrente e Bash 6h Esercizi (laboratorio lez 11) Progr. Concorrente e Bash Contenuti: SIMULAZIONE PROVA PRATICA 0b Esercizio 1051 Programmazione concorrente semplice Esercizio 1052 Programmazione concorrente complicato

Dettagli

Introduzione alla programmazione nella shell di Unix 10 Maggio 2005

Introduzione alla programmazione nella shell di Unix 10 Maggio 2005 Introduzione alla programmazione nella shell di Unix 10 Maggio 2005 1 Page 1 Shell e programmazione La shell di UNIX definisce un vero e proprio linguaggio di programmazione, le cui caratteristiche principali

Dettagli

Esercizi Programmazione Concorrente

Esercizi Programmazione Concorrente Esercizio 1- Prelievo Moduli Nella segreteria dell Università N studenti devono compilare il modulo per la Domanda di Laurea. All apertura della segreteria una impiegata ha disposto M copie del modulo

Dettagli

Prova Pratica 018 turno 1 gruppo febbraio 06

Prova Pratica 018 turno 1 gruppo febbraio 06 Prova Pratica 018 turno 1 gruppo 2 2017 febbraio 06 i file da consegnare devono essere collocati nella directory CONSEGNA dentro la home directory dell'utente studente. SUGGERIMENTO PRATICO PRELIMINARE

Dettagli

Page 1. Programmazione. Shell e programmazione. File comandi (script) Introduzione alla programmazione nella shell di Unix

Page 1. Programmazione. Shell e programmazione. File comandi (script) Introduzione alla programmazione nella shell di Unix Introduzione alla programmazione nella shell di Unix 10 Maggio 2005 1 Programmazione E` possibile memorizzare sequenze di comandi all'interno di le eseguibili: Ad esempio: #!bin/bash echo hello world!

Dettagli

Lab. di Sistemi Operativi - Esercitazione n 3 - a.a. 2016/2017. Script shell

Lab. di Sistemi Operativi - Esercitazione n 3 - a.a. 2016/2017. Script shell Lab. di Sistemi Operativi - Esercitazione n 3 - a.a. 2016/2017 Script shell 1 Sommario Script shell Script shell con struttura di controllo ed iterativa: if then ciclo for ciclo While ciclo Until 2 - Script

Dettagli

Prova Pratica 017 turno 1 gruppo febbraio 06

Prova Pratica 017 turno 1 gruppo febbraio 06 Prova Pratica 017 turno 1 gruppo 1 2017 febbraio 06 i file da consegnare devono essere collocati nella directory CONSEGNA dentro la home directory dell'utente studente. SUGGERIMENTO PRATICO PRELIMINARE

Dettagli

Lezione 5 in laboratorio processi, stringhe

Lezione 5 in laboratorio processi, stringhe Lezione 5 in laboratorio processi, stringhe hic sunt canes stercore Montecodruzzo for cane in 'pastore maremmano' 'rottweiler' 'pittbull' do kill - 9 ${cane}; Ciola Araldi NOTA BENE: A questo punto abbiamo

Dettagli

Esercitazione 1 la shell

Esercitazione 1 la shell Esercitazione 1 la shell Obiettivi Prendere confidenza con i comandi per la gestione del file system Utilizzare gli strumenti visti a lezione per creare tre semplici script bash File system 1/2 1. Verificare

Dettagli

ESERCITAZIONE 2 fork e exec

ESERCITAZIONE 2 fork e exec ESERCITAZIONE 2 fork e exec Richiami di scripting Ripassiamo: Differenza tra pipe e ridirezione su file Come si accede agli argomenti di un invocazione Sintassi dell if Sintassi del for Pipe e ridirezione

Dettagli

- Controllo di flusso: for -

- Controllo di flusso: for - - Script shell - 1 - Controllo di flusso: for - 2 - Esempi d uso - Ciclo for for var in lista do comando/i che usano $var 3 Esercizio n 1 Scrivere uno script shell (shell program) di nome cercafilereg

Dettagli

Laboratorio in C su Processi e POSIX IPC (Inter Process Communications) Dalla nona lezione di laboratorio in avanti

Laboratorio in C su Processi e POSIX IPC (Inter Process Communications) Dalla nona lezione di laboratorio in avanti Laboratorio in C su Processi e POSIX IPC (Inter Process Communications) Dalla nona lezione di laboratorio in avanti NOTA BENE: E INSISTO!!!!! Usare il comando man nomefunzionedilibreria per ottenere informazioni

Dettagli

Esercizio sul Monitor. Ponte con utenti grassi e magri 11 Novembre 2013

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

Dettagli

Lab. di Sistemi Operativi - Esercitazione n 2- - comando di ricerca: grep -

Lab. di Sistemi Operativi - Esercitazione n 2- - comando di ricerca: grep - Lab. di Sistemi Operativi - Esercitazione n 2- - comando di ricerca: grep - 1 Ricordiamo che Le righe di /etc/passwd si presentano nella seguente forma: Username:Password:UserID:GroupID:Info:HomeDirectory:Shell

Dettagli

Corso di Laboratorio di Sistemi Operativi A.A

Corso di Laboratorio di Sistemi Operativi A.A Corso di Laboratorio di Sistemi Operativi A.A. 2016 2017 Lezione 18 Ivan Scagnetto ivan.scagnetto@uniud.it Nicola Gigante gigante.nicola@spes.uniud.it Dipartimento di Scienze Matematiche, Informatiche

Dettagli

Prova Pratica 014 turno 2 gruppo 1

Prova Pratica 014 turno 2 gruppo 1 Prova Pratica 014 turno 2 gruppo 1 i file da consegnare devono essere collocati nella directory CONSEGNA dentro la home directory dell'utente studente Prova Pratica 014 - turno 2 gruppo 1 Download Materiale:

Dettagli

Prova Pratica 019 turno 1 gruppo febbraio 20

Prova Pratica 019 turno 1 gruppo febbraio 20 Prova Pratica 019 turno 1 gruppo 1 2017 febbraio 20 i file da consegnare devono essere collocati nella directory CONSEGNA dentro la home directory dell'utente studente. Prova Pratica 019 - turno 1 gruppo

Dettagli

Corso di Laboratorio di Sistemi Operativi

Corso di Laboratorio di Sistemi Operativi Corso di Laboratorio di Sistemi Operativi Lezione 4 Alessandro Dal Palù email: alessandro.dalpalu@unipr.it web: www.unipr.it/~dalpalu Approfondimento su make http://http://capone.mtsu.edu/csdept/facilitiesandresources/make.htm

Dettagli

Sistemi Operativi (M. Cesati)

Sistemi Operativi (M. Cesati) Sistemi Operativi (M. Cesati) Compito scritto del 4 settembre 2015 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare

Dettagli

Il sistema operativo LINUX Esercitazione 3

Il sistema operativo LINUX Esercitazione 3 Il sistema operativo LINUX Esercitazione 3 Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica esercitazioni e temi d'esame 1

Dettagli

LABORATORIO DI SISTEMI OPERATIVI

LABORATORIO DI SISTEMI OPERATIVI LABORATORIO DI SISTEMI OPERATIVI Corso di Laurea Triennale in Ingegneria Informatica A.A. 2018/2019 Guglielmo Cola Email: g.cola@iet.unipi.it Web: iet.unipi.it/g.cola Thread POSIX nel sistema Linux (parte

Dettagli

Prova Pratica 015 turno 1 gruppo 2

Prova Pratica 015 turno 1 gruppo 2 Prova Pratica 015 turno 1 gruppo 2 i file da consegnare devono essere collocati nella directory CONSEGNA dentro la home directory dell'utente studente Prova Pratica 015 - turno 1 gruppo 2 Download Materiale:

Dettagli

L utility Unix awk [Aho-Weinberger-Kernighan]

L utility Unix awk [Aho-Weinberger-Kernighan] L utility Unix awk [Aho-Weinberger-Kernighan] L utility awk serve per processare file di testo secondo un programma specificato dall utente. L utility awk legge riga per riga i file ed esegue una o più

Dettagli

Sincronizzazione di thread POSIX

Sincronizzazione di thread POSIX Sincronizzazione di thread POSIX Sincronizzazione I thread condividono la memoria Rischio di race condition Necessari meccanismi di sincronizzazione mutex (semaforo binario) condition variable I mutex

Dettagli

= PTHREAD_MUTEX_INITIALIZER

= PTHREAD_MUTEX_INITIALIZER MUTEX Prof.ssa Sara Michelangeli Quando si programma in modalità concorrente bisogna gestire le problematiche di accesso alle eventuali sezioni critiche. Una sezione critica è una sequenza di istruzioni

Dettagli

Prova Pratica 020 turno 1 gruppo febbraio 20

Prova Pratica 020 turno 1 gruppo febbraio 20 Prova Pratica 020 turno 1 gruppo 2 2017 febbraio 20 i file da consegnare devono essere collocati nella directory CONSEGNA dentro la home directory dell'utente studente. Prova Pratica 020 - turno 1 gruppo

Dettagli

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 Pietro Frasca. Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2016-17 Pietro Frasca Lezione 21 Martedì 10-01-2017 Sincronizzazione tra thread Per risolvere problemi

Dettagli

Monitor pthreads. Esercizio

Monitor pthreads. Esercizio Monitor pthreads Esercizio Esercizio monitor Una società di noleggio di automobili offre ai propri clienti tre tipi di automobili: piccole, medie, grandi. Ogni tipo di auto è disponibile in numero limitato

Dettagli

file: sistemioperativi_index.html Rivedrete la consueta pagina web di sistemi operativi, ma tutta in locale.

file: sistemioperativi_index.html Rivedrete la consueta pagina web di sistemi operativi, ma tutta in locale. ZZZ02 Esercizi Vari Potete usare tutto il materiale, normalmente disponibile sulla pagina di sistemi operativi, che trovate tar-gzippato in questo archivio di 48 MB. http://www.cs.unibo.it/~ghini/didattica/tree4os.tgz

Dettagli

Linuxthreads: esercizio

Linuxthreads: esercizio Linuxthreads: esercizio Esercizio Una società di noleggio di automobili offre ai propri clienti tre tipi di automobili: piccole, medie, grandi. Ogni tipo di auto è disponibile in numero limitato (Npiccole,

Dettagli

Sistemi Operativi Teledidattico

Sistemi Operativi Teledidattico Sistemi Operativi Teledidattico Anno 2002 3a esercitazione 5/10/2002 Paolo Torroni processi fork (creazione di un figlio) exec (sostituzione di codice del programma in esecuzione) wait (attesa della terminazione

Dettagli

Sistemi Operativi (M. Cesati)

Sistemi Operativi (M. Cesati) Sistemi Operativi (M. Cesati) Compito scritto del 19 febbraio 2013 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare

Dettagli

Thread thread lightweight process

Thread thread lightweight process Thread Un thread o lightweight process (LWP) è un unità di utilizzo della CPU che consiste di: un program counter, un insieme di registri, uno stack space. Tale unità condivide con gli altri peer thread

Dettagli

CORSO LINUX PER LA CERTIFICAZIONE LPI ESSENTIALS

CORSO LINUX PER LA CERTIFICAZIONE LPI ESSENTIALS CORSO LINUX PER LA CERTIFICAZIONE LPI ESSENTIALS Comandi da terminale Il comando sleep fa attendere un comando prima dell'esecuzione. Prova il comando: $ sleep 3s && echo Ciao Mondo! $ Comandi da terminale

Dettagli

Sistemi Operativi L-A. Esercizi 14 Giugno 2007. Esercizio monitor

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

Dettagli

Il sistema operativo UNIX/Linux. Soluzione di problemi mediante script Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino

Il sistema operativo UNIX/Linux. Soluzione di problemi mediante script Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino Il sistema operativo UNIX/Linux Soluzione di problemi mediante script Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino 2 Esercizio Si scriva uno script in gra di calcolare i

Dettagli

Libreria Linux Threads. Threads nel S.O. Linux. Primitive per la gestione dei thread. Portabilità: libreria pthreads (Posix).

Libreria Linux Threads. Threads nel S.O. Linux. Primitive per la gestione dei thread. Portabilità: libreria pthreads (Posix). Threads nel S.O. Linux Il thread è un processo leggero che può condividere uno spazio di indirizzi (o parte di esso) con il padre e gli altri processi della gerarchia cui appartiene. Realizzato a livello

Dettagli

Esercizio monitor con pthreads

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

Dettagli

Per visualizzare il valore di tutte le variabili d ambiente si usa il comando env

Per visualizzare il valore di tutte le variabili d ambiente si usa il comando env Tipi di Shell sh Bourne shell csh C shell ksh Korn shell bash Bourne Again (Bash) shell tcsh TENEX C shell zsh Z shell rc rc shell es es shell à csh e bash sono le più comuni. Per cambiare il tipo di shell

Dettagli

Laboratorio di sistemi operativi A.A. 2010/2011 Gruppo 2 Gennaro Oliva Soluzioni della prova intercorso

Laboratorio di sistemi operativi A.A. 2010/2011 Gruppo 2 Gennaro Oliva Soluzioni della prova intercorso Laboratorio di sistemi operativi A.A. 2010/2011 Gruppo 2 Gennaro Oliva Soluzioni della prova intercorso Prova intercorso a1-2 a1) mkdir uno && chmod a-r uno && mkdir uno/uno && \ uno touch uno/uno/uno

Dettagli

Shell: variabili di sistema. Per visualizzare il valore di tutte le variabili d ambiente si usa il comando set

Shell: variabili di sistema. Per visualizzare il valore di tutte le variabili d ambiente si usa il comando set PATH Shell: variabili di sistema HOME USER PWD SHELL HOSTNAME HOSTTYPE Per visualizzare il valore di tutte le variabili d ambiente si usa il comando set Shell: variabili di sistema Per visualizzare il

Dettagli

Lab 19 Unix e comandi di base

Lab 19 Unix e comandi di base Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni e Ingegneria dell Automazione a.a. 2009/2010 Lab 19 Unix e comandi di base Lab19 1 Unix - Shell dei comandi In Unix/Linux

Dettagli

Introduzione a Linux Lezione 7 Programmare in Linux

Introduzione a Linux Lezione 7 Programmare in Linux Introduzione a Linux Lezione 7 Programmare in Linux Angelo Genovese Corso di Sistemi Operativi I/II Prof. V. Piuri Università degli Studi di Milano Dipartimento di Informatica A.A. 2018/2019 2018 2015

Dettagli

LinuxThreads. LinuxThreads: monitor & variabili condizione

LinuxThreads. LinuxThreads: monitor & variabili condizione LinuxThreads Variabili Condizione LinuxThreads: monitor & variabili condizione Lo standard POSIX 1003.1c (libreria ) non implementa il costrutto Monitor ma implementa i mutex implementa le variabili

Dettagli

LABORATORIO DI SISTEMI OPERATIVI

LABORATORIO DI SISTEMI OPERATIVI LABORATORIO DI SISTEMI OPERATIVI Corso di Laurea Triennale in Ingegneria Informatica A.A. 2018/2019 Guglielmo Cola Email: g.cola@iet.unipi.it Web: iet.unipi.it/g.cola Thread POSIX nel sistema Linux (parte

Dettagli

Shell: variabili di sistema PATH HOME USER PWD SHELL HOSTNAME. Per visualizzare il valore di tutte le variabili d ambiente si usa il comando set

Shell: variabili di sistema PATH HOME USER PWD SHELL HOSTNAME. Per visualizzare il valore di tutte le variabili d ambiente si usa il comando set Shell: variabili di sistema PATH HOME USER PWD SHELL HOSTNAME Per visualizzare il valore di tutte le variabili d ambiente si usa il comando set Shell: variabili di sistema Per visualizzare il valore di

Dettagli

Settima esercitazione. Shell scripting

Settima esercitazione. Shell scripting Settima esercitazione Shell scripting 1 Agenda Esempio 1 Creazione di un semplice script bash per l'esplorazione del le system Esempio 2 Script bash con ricorsione: esempio guidato Esercizio 3 DA SVOLGERE

Dettagli

Sistemi Operativi (M. Cesati)

Sistemi Operativi (M. Cesati) Sistemi Operativi (M. Cesati) Compito scritto del 8 settembre 2017 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare

Dettagli

Il sistema operativo LINUX Script di Shell

Il sistema operativo LINUX Script di Shell Il sistema operativo LINUX Script di Shell Giorgio Di Natale Stefano Di Carlo Bartolomeo Montrucchio Politecnico di Torino Dip. Automatica e

Dettagli

Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni. Lab Shell. Lab-Shell 1

Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni. Lab Shell. Lab-Shell 1 Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni Lab Shell Lab-Shell 1 Scelta della shell La prima riga di un file comandi deve specificare quale shell si vuole utilizzare:

Dettagli

apt-get, installazione pacchetti software bash exercises

apt-get, installazione pacchetti software bash exercises Lezione 4 in laboratorio apt-get, installazione pacchetti software bash exercises Traccia: sudo apt-get sudo apt-get update sudo apt-get install nomepkg con apt-get posso anche Installazione pacchetti

Dettagli

Unix - Shell dei comandi Sostituzioni

Unix - Shell dei comandi Sostituzioni Unix - Shell dei comandi Sostituzioni Prima dell esecuzione di un comando, esso viene scandito (assieme ad i suoi parametri) e vengono operate delle sostituzioni 1. Sostituzioni delle variabili/parametri:

Dettagli

Compito scritto 12 Luglio 2004

Compito scritto 12 Luglio 2004 Laboratorio di Sistemi Operativi: Prof.ssa A. Rescigno Anno Acc. 2003-2004 Classe 2 Compito scritto 12 Luglio 2004 Università di Salerno Nome e Cognome: Matricola: 1 2 3 4 5 6 7 tot /10 /12 /8 /12 /10

Dettagli

Sistemi Operativi (M. Cesati)

Sistemi Operativi (M. Cesati) Sistemi Operativi (M. Cesati) Compito scritto del 16 febbraio 2016 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare

Dettagli

ZZZ01 Esercizi Vari. Esercizi per preparazione alla prova pratica di laboratorio

ZZZ01 Esercizi Vari. Esercizi per preparazione alla prova pratica di laboratorio ZZZ01 Esercizi Vari Esercizi per preparazione alla prova pratica di laboratorio Esercizio ZZZ01_01 - Elefanti Schizzinosi Nella savana africana c'e' una pozza d'acqua fresca alimentata da un acquedotto.

Dettagli

Keep it simple, stupid!

Keep it simple, stupid! Keep it simple, stupid! La filosofia alla base dei programmi Unix (solitamente non grafici) è semplice: ogni programma è specializzato per uno scopo ben preciso; funzionalità avanzate si ottengono dalla

Dettagli

Filtri e pipeline. qualsiasi comando unix ha a disposizione 3 file con cui comunicare con il resto del sistema: standard input in ingresso

Filtri e pipeline. qualsiasi comando unix ha a disposizione 3 file con cui comunicare con il resto del sistema: standard input in ingresso Filtri e pipeline qualsiasi comando unix ha a disposizione 3 file con cui comunicare con il resto del sistema: standard input in ingresso standard output in uscita standard error in uscita stdin (fd 0)

Dettagli

CORSO DI: INFORMATICA Lezione N 6

CORSO DI: INFORMATICA Lezione N 6 CORSO DI LAUREA IN TECNICHE DI RADIOLOGIA MEDICA PER IMMAGINI E RADIOTERAPIA CORSO DI: INFORMATICA Lezione N 6 Anno Accademico 2017/2018 Dott. Silvio Pardi Mobaxterm: L editor VI vi è il primo editor testuale

Dettagli

Sistemi Operativi e informatica 1

Sistemi Operativi e informatica 1 1 Dip. Scienze dell Informatica Università degli Studi di Milano, Italia marchi@dsi.unimi.it a.a. 2011/12 1 c 2010-2012 M.Monga R.Paleari M.. Creative Commons Attribuzione-Condividi allo stesso modo 2.5

Dettagli

Esercizi su permessi

Esercizi su permessi Esercizi su permessi usare umask per verificare il valore corrente creare file e directory verificare i permessi cambiare umask e ripetere l esercizio verificando come cambiano i permessi creare una cartella

Dettagli

Sistemi Operativi (M. Cesati)

Sistemi Operativi (M. Cesati) Sistemi Operativi (M. Cesati) Compito scritto del 4 luglio 2014 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare tutti

Dettagli

Architetture dei Calcolatori e Sistemi Operativi

Architetture dei Calcolatori e Sistemi Operativi Prof. Gerardo Pelosi & Ing. Michele Scandale 23 Ottobre 2014 Gerardo Pelosi 1 Esercizio 1 Quattro amici fanno una scommessa: il vincitore sceglie casualmente a chi tocca bere

Dettagli

Esercitazione E9 Sincronizzazione

Esercitazione E9 Sincronizzazione Esercitazione E9 Sincronizzazione Sistemi Operativi (9 CFU), CdL Informatica, A. A. 2013/2014 Dipartimento di Scienze Fisiche, Informatiche e Matematiche Università di Modena e Reggio Emilia http://weblab.ing.unimo.it/people/andreolini/didattica/sistemi-operativi

Dettagli

Sistemi Operativi 1. Mattia Monga. a.a. 2017/18. Dip. di Informatica Università degli Studi di Milano, Italia

Sistemi Operativi 1. Mattia Monga. a.a. 2017/18. Dip. di Informatica Università degli Studi di Milano, Italia 1 Mattia Monga Dip. di Informatica Università degli Studi di Milano, Italia mattia.monga@unimi.it a.a. 2017/18 1 cba 2008 18 M. Monga. Creative Commons Attribuzione Condividi allo stesso modo 4.0 Internazionale.

Dettagli

Problemi Classici di Programmazione Concorrente risolti usando i Posix Thread

Problemi Classici di Programmazione Concorrente risolti usando i Posix Thread Problemi Classici di Programmazione Concorrente risolti usando i Posix Thread Preliminari: Un po' di Controllo d'errore e di Debug(1) Funzioni per semplificare il controllo d'errore: Nella lezione in laboratorio,

Dettagli

a strange language, shaped as much by history as by design

a strange language, shaped as much by history as by design a strange language, shaped as much by history as by design Kernigham & Pike Percorso 5 Bash script 2 Il primo script Percorso 5 Bash script 3 Esecuzione Percorso 5 Bash script 4 Variabili # la variabile

Dettagli

Cosa sono i semafori?

Cosa sono i semafori? Mutex Cosa sono i semafori? I semafori sono primitive fornite dal sistema operativo per permettere la sincronizzazione tra processi e/o thread. Semafori di mutua esclusione con i thread POSIX 2 Operazioni

Dettagli

- comando sort: con chiavi di ordinamento -

- comando sort: con chiavi di ordinamento - - comando sort: con chiavi di ordinamento - 1 - sort: chiavi di ordinamento - Tramite l'opzione -k è possibile definire una chiave di ordinamento su una porzione della linea contenuta nel file Specificando

Dettagli

Esercitazione [08] Server multi-process/multi-thread

Esercitazione [08] Server multi-process/multi-thread Esercitazione [08] Server multi-process/multi-thread Leonardo Aniello aniello@dis.uniroma1.it Daniele Cono D'Elia delia@dis.uniroma1.it Giuseppe Laurenza laurenza@dis.uniroma1.it Federico Lombardi lombardi@dis.uniroma1.it

Dettagli

Esempio 1. Creare uno script (file comandi) che abbia la sintassi:

Esempio 1. Creare uno script (file comandi) che abbia la sintassi: Esempi shell 1 Esempio 1 Creare uno script (file comandi) che abbia la sintassi:./ps_monitor.sh [N] Lo script: in caso di assenza dell argomento, deve mostrare i processi di tu@ gli utena (compresi quelli

Dettagli

Creazione di thread. In Linux si utilizzano le librerie pthread (POSIX thread) per lavorare con i thread:

Creazione di thread. In Linux si utilizzano le librerie pthread (POSIX thread) per lavorare con i thread: Thread Un thread o lightweight process (LWP) è un unità di utilizzo della CPU che consiste di: un program counter, un insieme di registri, uno stack space. Tale unità condivide con gli altri peer thread

Dettagli

Sistemi Operativi (M. Cesati)

Sistemi Operativi (M. Cesati) Sistemi Operativi (M. Cesati) Compito scritto del 6 settembre 2013 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare

Dettagli

Manipolazioni elementari di flussi di testo strutturati

Manipolazioni elementari di flussi di testo strutturati Manipolazioni elementari di flussi di testo strutturati L output di molti comandi è costituito da flussi di testo strutturati: ogni riga rappresenta una parte del risultato ed è divisa in campi (fields)

Dettagli

SCUOLA DI INGEGNERIA DELL INFORMAZIONE. Corso di Piattaforme Software per la rete MODULO 2 Anno Accademico Prof. William FORNACIARI

SCUOLA DI INGEGNERIA DELL INFORMAZIONE. Corso di Piattaforme Software per la rete MODULO 2 Anno Accademico Prof. William FORNACIARI SCUOLA DI INGEGNERIA DELL INFORMAZIONE Corso di Piattaforme Software per la rete MODULO 2 Anno Accademico 2016-2017 Prof. William FORNACIARI SOLUZIONE D1 D2 D3 TOT Laureando SI NO NOTE PER LO SVOLGIMENTO

Dettagli

Sistemi Operativi. Bruschi Monga Re. Concorrenza Semafori. Sincronizzazione con monitor pthreads. Sistemi Operativi. Bruschi Monga Re.

Sistemi Operativi. Bruschi Monga Re. Concorrenza Semafori. Sincronizzazione con monitor pthreads. Sistemi Operativi. Bruschi Monga Re. 1 Mattia Monga Lezione XVI: Dip. di Informatica Università degli Studi di Milano, Italia mattia.monga@unimi.it a.a. 2016/17 1 cba 2008 17 M. Monga. Creative Commons Attribuzione Condividi allo stesso modo

Dettagli

Esempio di domande sul file system

Esempio di domande sul file system Esempio di domande sul file system Si supponga che un file system usi blocchi di 4 Kbyte, e che un puntatore ad un blocco occupi 4 byte. Se l INODE di un file utilizza 12 blocchi, un blocco indiretto ed

Dettagli

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 Pietro Frasca. Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2016-17 Pietro Frasca Lezione 22 Giovedì 12-01-2017 1 Un esempio di sincronizzazione tra thread Risolviamo

Dettagli

2. Teoria. [7 punti] La comunicazione tra processi nel sistema UNIX.

2. Teoria. [7 punti] La comunicazione tra processi nel sistema UNIX. 1. Unix [12 punti] Prova Scritta di Recupero del 5 Aprile 2004 Si scriva un programma C che utilizzi le system call di UNIX e che realizzi un comando UNIX avente la seguente sintassi: esame fsize fin fout

Dettagli

Esercitazione 11. Esercitazione di riepilogo

Esercitazione 11. Esercitazione di riepilogo Esercitazione 11 Esercitazione di riepilogo Agenda Esercizio 1 - Monitor java Gestione della pista di un aereoporto Esercizio 2 Programma C di sistema Gestione e monitoraggio dell esecuzione del programma

Dettagli

Esercizio 1. Scrivere un programma C in cui: Il master thread:

Esercizio 1. Scrivere un programma C in cui: Il master thread: Scrivere un programma C in cui: Il master thread: Esercizio 1 Inizializza una variabile globale a=0 crea un thread produttore ed un thread consumatore. In un ciclo infinito visualizza il valore di a. Il

Dettagli

YYY02 Esercizi per Teoria. Esercizi per preparazione alla prova scritta

YYY02 Esercizi per Teoria. Esercizi per preparazione alla prova scritta YYY02 Esercizi per Teoria Esercizi per preparazione alla prova scritta Esercizio YYY02_02 - Busy Waiting In linguaggio ANSI C, siano dichiarate le seguenti variabili, e siano queste variabili debitamente

Dettagli

Esercizio 1 - nucleo e commutazione tra processi

Esercizio 1 - nucleo e commutazione tra processi Esercizio 1 - nucleo e commutazione tra processi / programma CODICE.c / int main ( ) {... fd = open( /acso/file_prova, ORDWR) pid = fork ( ); if (pid == 0) {/ codice eseguito da F1 / execl ( /acso/prog_x,

Dettagli

Shell scripting. Turing completi approccio procedurale non tipati (l'unico tipo disponibile è la stringa) interpretati

Shell scripting. Turing completi approccio procedurale non tipati (l'unico tipo disponibile è la stringa) interpretati Shell scripting Shell scripting la shell è uno strumento potente per l'esecuzione di comandi arbitrariamente complessi ciò nonostante, per automatizzare l'esecuzione di compiti lunghi e ripetitivi, ogni

Dettagli

Signalling (IPC) Signalling (segnalazione)

Signalling (IPC) Signalling (segnalazione) Signalling (IPC) Signalling (segnalazione) è un particolare tipo di Inter-Process Communications che permettere di sincronizzare dei processi spedendo e ricevendo dei messaggi minimali che informano dell'accadimento

Dettagli

Thread: sincronizzazione Esercitazioni del 16 Ottobre 2009

Thread: sincronizzazione Esercitazioni del 16 Ottobre 2009 Thread: sincronizzazione Esercitazioni del 16 Ottobre 2009 Luca Fossati, Fabrizio Castro, Vittorio Zaccaria 19 ottobre 2009 Sequenze di esecuzione - 2 Sequenze di esecuzione - 2 Esercizio 1 Sequenze di

Dettagli

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 2 10/10/2012 Lezione 3 17/10/2012

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 2 10/10/2012 Lezione 3 17/10/2012 Laboratorio di Programmazione 1 1 Docente: dr. Damiano Macedonio Lezione 2 10/10/2012 Lezione 3 17/10/2012 Original work Copyright Sara Migliorini, University of Verona Modifications Copyright Damiano

Dettagli

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 Pietro Frasca. Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2017-18 Pietro Frasca Lezione 10 Martedì 7-11-2017 Thread a livello kernel Modello da uno a uno La

Dettagli

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt);

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt); Un esempio per iniziare Il controllo del programma in C DD Cap.3 pp.91-130 /* calcolo di 8!*/ #include #define C 8 int main() int i=1; int fatt=1; while (i

Dettagli

i link Unix i link Unix gli hard link (link fisici)

i link Unix i link Unix gli hard link (link fisici) i link Unix 1 In Unix, un file è identificato univocamente dall index-node che contiene tutte le informazioni relative al file: i suoi attributi e in quali blocchi sono memorizzati i suoi dati. Entry nella

Dettagli

" &$ () " ) ) $ ' () *) " ) $

 &$ ()  ) ) $ ' () *)  ) $ %&! "# $ #include int main(int argc, char *argv[]) { int i; for (i = 0; i < argc; i++) printf("argv[%d]: %s\n", i, argv[i] ); 1 2 " &$ cc cc program.c a.out pippo pluto topolino argv[0]: a.out

Dettagli

Senza Soluzioni. Può un altro utente non appartenente al gruppo di mgiorgio, eseguire gli stessi comandi?

Senza Soluzioni. Può un altro utente non appartenente al gruppo di mgiorgio, eseguire gli stessi comandi? Senza Soluzioni Scrivere i due seguenti semplici script in bash shell: a. (1.5pt.)uno script che cancella un file dando il suo inode. Lo script e' attivato cosi': irm b. (1.5pt.)uno script che

Dettagli

Esercitazione 2! Mutex e semafori POSIX. 3 Novembre 2016

Esercitazione 2! Mutex e semafori POSIX. 3 Novembre 2016 Esercitazione 2! Mutex e semafori POSIX 3 Novembre 2016 Strumenti di sincronizzazione nella libreria LinuxThread I semafori nelle librerie pthread e LinuxThreads La libreria pthread definisce soltanto

Dettagli

Problema: stampa degli interi compresi tra n e m

Problema: stampa degli interi compresi tra n e m Costrutti imperativi Problema: stampa degli interi compresi tra n e m http://caml.inria.fr/pub/docs/manual-ocaml/libref/pervasives.html Output functions on standard output val print_string: string -> unit

Dettagli

Chiamata di procedura remota

Chiamata di procedura remota Con gli strumenti gia` visti, si puo` realizzare come segue: lato chiamante: send asincrona immediatamente seguita da una receive lato chiamato: una receive seguita, al termine dell azione richiesta, da

Dettagli

Sistemi Operativi 1. Mattia Monga. a.a. 2015/16. Dip. di Informatica Università degli Studi di Milano, Italia

Sistemi Operativi 1. Mattia Monga. a.a. 2015/16. Dip. di Informatica Università degli Studi di Milano, Italia 1 Mattia Monga Dip. di Informatica Università degli Studi di Milano, Italia mattia.monga@unimi.it a.a. 2015/16 1 cba 2008 16 M. Monga. Creative Commons Attribuzione Condividi allo stesso modo 4.0 Internazionale.

Dettagli

Sistemi Operativi. Bruschi Monga Re. Shell Esercizi Shell programming Esercizi I/O. Sistemi Operativi. Bruschi Monga Re

Sistemi Operativi. Bruschi Monga Re. Shell Esercizi Shell programming Esercizi I/O. Sistemi Operativi. Bruschi Monga Re 1 Mattia Monga Lezione XI: Processi, shell, file Dip. di Informatica Università degli Studi di Milano, Italia mattia.monga@unimi.it a.a. 201/16 1 cba 2008 16 M. Monga. Creative Commons Attribuzione Condividi

Dettagli