domenica 24 gennaio 2016

A.S. 2015/16 - Esercitazioni di laboratorio per la materia SISTEMI E RETI/2

ESERCITAZIONE 5 - Competizione tra thread Linux (10/05/16)

OBIETTIVI / ARGOMENTI TRATTATI
- i semafori

PROCEDIMENTO / SPECIFICHE INIZIALI
- risolvere l'esercizio precedente utilizzando i semafori

ESERCITAZIONE 4 - Competizione tra thread Linux (27/04/16)


OBIETTIVI / ARGOMENTI TRATTATI
- La competizione tra i Thread
- i mutex

PROCEDIMENTO / SPECIFICHE INIZIALI
- Scrivere il programma (th_thread_mutex_wrong.c) che sviluppi il codice seguente, seguire le indicazioni presenti nei commenti
/*
Interazione di processi tramite memoria condivisa
Competizione: interazione prevedibile ma "non desiderata" tra processi che interagiscono per sincronizzarsi nell'accesso a risorse comuni

*/
#include <stdio.h>     // printf
#include <unistd.h>    // usleep
#include <stdlib.h>    // exit,
#include <pthread.h>   // thread, pthread_t, pthread_create

int  SaldoCassa;       //Variabile globale

#define NUM_PANINI    10  //Numero di panini da vendere
#define NUM_BIRRE     15
#define COSTO_PANINO  3   //Costo del singolo panino
#define COSTO_BIRRA   4
#define DELAY_PANINO  100 //[msec] ritardo aggiornamento saldo cassa
#define DELAY_BIRRA   50  //[msec] ritardo aggiornamento saldo cassa

//Il thread CassaPanini per ogni panino da vendere (NUM_PANINI) legge il SaldoCassa,
//aspetta per il tempo DELAY_PANINO (useep(DELAY_PANINO*1000)) e aggiorna il SaldoCassa con il valore letto precedentemente più il costo del panino
//Visualizza un messaggio con il saldo cassa aggiornato
void *CassaPanini(void *arg);
void *CassaBirra(void *arg);

//Il MainThread: visualizza il SaldoCassa iniziale, avvia i due thread
//aspetta la conclusione dei due thread, visualizza il SaldoCassa finale 
int main(int argc, char *argv[])
{
...
- Scrivere il programma (th_thread_mutex.c) che risolva i problemi dell'esercizio precedente utilizzando i mutex

pthread_mutex_t count_mutex     = PTHREAD_MUTEX_INITIALIZER;
// Lock mutex and then wait for signal to relase mutex
pthread_mutex_lock( &count_mutex );
pthread_mutex_unlock( &count_mutex );


RIFERIMENTI / LINK
I Processi Unix

-------------------------------------------------------------------------------------------------------------
ESERCITAZIONE 3 - Gestione di processi Unix (02/03/16)
Gestione dei segnali Unix

OBIETTIVI / ARGOMENTI TRATTATI
- Gestione dei segnali Unix

PROCEDIMENTO / SPECIFICHE INIZIALI
Scrivere un programma che crei un processo figlio e gestisca il segnale SIGCHLD:
- il processo figlio deve visualizzare un messaggio all'avvio, al termine, dovrà durare almeno 5 secondi (usare la funzione sleep e dovrà terminare con un exit status diverso da zero;
- il processo padre dovrà gestire il segnale SIGCHLD e dopo aver creato il processo figlio eseguirà un ciclo infinito al cui interno, ad intervalli di 1 sec, visualizzerà il messaggio "Ciclo infinito...[%d]"
- nel processo padre alla ricezione del segnale SIGCHLD tramite l'istruzione wait verrà visualizzato lo stato di terminazione del processo figlio e il processo padre terminerà

RIFERIMENTI / LINK
4. I segnali Unix
https://github.com/filippo-bilardo/C_Raspi_Projects/blob/master/Processi/

-------------------------------------------------------------------------------------------------------------
ESERCITAZIONE 2 - Gestione di processi Unix (24/02/16)
Gestione dei processi Unix utilizzando la funzione wait(), exec..() e perror() nel linguaggio C

OBIETTIVI / ARGOMENTI TRATTATI
- Gestione dei processi Unix

PROCEDIMENTO / SPECIFICHE INIZIALI
Scrivere un programma che generi tre processi figli:
- il primo figlio visualizza un messaggio contenente il proprio pid, il pid del padre
e il risultato della operazione a+b (variabili a e b sono inizializzate prima dalla istruzione fork)
e termina restituendo come exit status il risultato della operazione
- il secondo figlio esegue il comando Linux "ps -ux"
- il terzo figlio esegue il comando Linux "ls /pippo"
Il processo padre aspetta il termine di ognuno dei tre processi figli visualizzandone l'exit staus
Eventuali errori devono essere gestiti con la funzione perror

RIFERIMENTI / LINK
2. Processi
3. Processi Unix
https://github.com/filippo-bilardo/C_Raspi_Projects/blob/master/Processi/fork3_solv2.c

-------------------------------------------------------------------------------------------------------------
ESERCITAZIONE 1 - Creazioni di processi Unix (25/01/16)
Creazione di processi Unix utilizzando la funzione fork() nel linguaggio C

OBIETTIVI / ARGOMENTI TRATTATI
- Comprensione dei processi Unix

PROCEDIMENTO / SPECIFICHE INIZIALI
- Completare il programma di esempio seguendo le indicazioni presenti nei commenti

RIFERIMENTI / LINK
2. Processi
3. Processi Unix

-------------------------------------------------------------------------------------------------------------
versione iniziale del 25/01/16

Nessun commento:

Posta un commento