5f Esercizi Progr. Concorrente e Vari
|
|
- Umberto Scala
- 6 anni fa
- Visualizzazioni
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 NOTA BENE: E INSISTO!!!!! Usare il comando man nomefunzionedilibreria per ottenere
DettagliLaboratorio 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
Dettagli6h 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
DettagliIntroduzione 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
DettagliEsercizi 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
DettagliProva 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
DettagliPage 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!
DettagliLab. 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
DettagliProva 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
DettagliLezione 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
DettagliEsercitazione 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
DettagliESERCITAZIONE 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 -
- 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
DettagliLaboratorio 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
DettagliEsercizio 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
DettagliLab. 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
DettagliCorso 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
DettagliProva 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:
DettagliProva 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
DettagliCorso 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
DettagliSistemi 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
DettagliIl 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
DettagliLABORATORIO 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
DettagliProva 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:
DettagliL 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ù
DettagliSincronizzazione 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
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
DettagliProva 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
DettagliUniversità 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
DettagliMonitor 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
Dettaglifile: 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
DettagliLinuxthreads: 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,
DettagliSistemi 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
DettagliSistemi 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
DettagliThread 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
DettagliCORSO 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
DettagliSistemi 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
DettagliIl 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
DettagliLibreria 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
DettagliEsercizio 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
DettagliPer 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
DettagliLaboratorio 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
DettagliShell: 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
DettagliLab 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
DettagliIntroduzione 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
DettagliLinuxThreads. 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
DettagliLABORATORIO 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
DettagliShell: 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
DettagliSettima 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
DettagliSistemi 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
DettagliIl 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
DettagliFondamenti 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:
Dettagliapt-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
DettagliUnix - 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:
DettagliCompito 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
DettagliSistemi 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
DettagliZZZ01 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.
DettagliKeep 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
DettagliFiltri 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)
DettagliCORSO 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
DettagliSistemi 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
DettagliEsercizi 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
DettagliSistemi 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
DettagliArchitetture 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
DettagliEsercitazione 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
DettagliSistemi 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.
DettagliProblemi 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,
Dettaglia 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
DettagliCosa 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 - 1 - sort: chiavi di ordinamento - Tramite l'opzione -k è possibile definire una chiave di ordinamento su una porzione della linea contenuta nel file Specificando
DettagliEsercitazione [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
DettagliEsempio 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
DettagliCreazione 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
DettagliSistemi 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
DettagliManipolazioni 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)
DettagliSCUOLA 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
DettagliSistemi 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
DettagliEsempio 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
DettagliUniversità 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
Dettagli2. 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
DettagliEsercitazione 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
DettagliEsercizio 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
DettagliYYY02 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
DettagliEsercizio 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,
DettagliShell 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
DettagliSignalling (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
DettagliThread: 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
DettagliLaboratorio 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
DettagliUniversità 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
DettagliUn 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
Dettaglii 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
DettagliSenza 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
DettagliEsercitazione 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
DettagliProblema: 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
DettagliChiamata 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
DettagliSistemi 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.
DettagliSistemi 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