Sincronizzazione e comunicazione tra processi in Unix. usati per trasferire ad un processo l indicazione che un determinato evento si è verificato.



Documenti analoghi
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

ESERCIZI DI PROGRAMMAZIONE C IN AMBIENTE UNIX

POSIX - Gestione dei Segnali. E.Mumolo, DEEI mumolo@units.it

Laboratorio di Sistemi Operativi

Esercizio sulla gestione di file in Unix

Laboratorio di Sistemi Operativi

Corso di Sistemi Operativi Ingegneria Elettronica e Informatica prof. Rocco Aversa. Raccolta prove scritte. Prova scritta

Sistemi Operativi Anno Accademico 2011/2012. Segnali: Interrupt software per la gestione di eventi asincroni

CREAZIONE DI UN FILE

Esempio produttori consumatori. Primitive asincrone

I/O su Socket TCP: read()

Gestione dei processi

Inter Process Communication. Laboratorio Software C. Brandolese

Computazione multi-processo. Condivisione, Comunicazione e Sincronizzazione dei Processi. Segnali. Processi e Threads Pt. 2

Sistemi Operativi L-A. Esercizi 14 Giugno Esercizio monitor

Lab. di Sistemi Operativi - Esercitazione n 9- -Thread-

I segnali. First the signals described in the original POSIX standard.

Corso di Sistemi Operativi A.A CHIAMATE DI SISTEMA PER IL CONTROLLO DEI PROCESSI. Fabio Buttussi

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.

Lab. di Sistemi Operativi - Esercitazione n 7- -Gestione dei processi Unix-

Segnali. #include <signal.h> Segnali

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

IPC System V. Code di messaggi

Java Virtual Machine

I puntatori e l allocazione dinamica di memoria

Introduzione al Linguaggio C

Sincronizzazione tra processi in Unix: i segnali

CREAZIONE PROCESSI IN UNIX 20

Programmazione multiprocesso

Segnali. Un segnale e' un interrupt software. La terminologia corretta e' exception mentre interrupt e' usata solo per gli interrupt hardware

Introduzione alla programmazione in C

Esercitazione [8] Pipe e FIFO

ISTITUTO TECNICO INDUSTRIALE STATALE LA GESTIONE DEI FILE DI TESTO IN C++

Processi e thread. Dipartimento di Informatica Università di Verona, Italy. Sommario

AXO. Operativo. Architetture dei Calcolatori e Sistema. programmazione di sistema

Record locking con la system call fcntl

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

Gestione dei File in C

Il problema del produttore e del consumatore. Cooperazione tra processi

Terza Esercitazione. Unix - Esercizio 1. Unix System Call Exec Java Introduzione Thread

Le system call: fork(), wait(), exit()

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main

Sincronizzazione tra processi UNIX: i segnali. Sincronizzazione tra processi

Quinta Esercitazione. Principali primitive di accesso ai File

Esercitazione finale per il corso di Sistemi Operativi (A.A. 2004/2005)

La sincronizzazione è legata alla implementazione delle pipe: int pipe(int fd[2]);

Sincronizzazione tra processi in Unix: : i segnali. Sistemi Operativi T AA

Esercitazione n 4. Obiettivi

Sincronizzazione tra processi! in Unix: i segnali!

Elementi di Architettura e Sistemi Operativi

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Sincronizzazione tra processi in Unix: i segnali

Sistemi Operativi. Lez. 13: primitive per la concorrenza monitor e messaggi

Esercizio sulla gestione di file in Unix. Sistemi Operativi T AA

Sincronizzazione tra processi. Sincronizzazione tra processi. segnali. Segnali UNIX

Introduzione al linguaggio C Gli array

Processi e Sincronizzazione. Laboratorio Software C. Brandolese M. Grotto

Drivers. Introduzione Tipologie Struttura Interazione con il kernel

MANUALE UTENTE. In questo manuale verranno descritte tutte le sue funzioni. Il sistema OTRS è raggiungibile al seguente link:

CAPITOLO 7 - SCAMBIO DI MESSAGGI

File I/O. M. R. Guarracino: File I/O 1

Sistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Il costrutto monitor [Hoare 74]

SISTEMI OPERATIVI. Sincronizzazione dei processi. Domande di verifica. Luca Orrù Centro Multimediale Montiferru 30/05/2007

Processi. Laboratorio Software C. Brandolese

System call fcntl e record locking

Funzioni. Il modello console. Interfaccia in modalità console

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. D. Talia - UNICAL. Sistemi Operativi 9.1

Processi in Linux. Stru/ura file eseguibili

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. Implementazione del File System. Struttura del File System. Implementazione

I processi Unix. Entry della tabella dei processi

Capitolo Silberschatz

Laboratorio di Sistemi Operativi Marzo-Giugno 2008 Matricole congrue 0 modulo 3

FONDAMENTI di INFORMATICA L. Mezzalira

Sistemi Operativi. 7 Gestione dei processi in Unix

Il descrittore di processo (PCB)

Allocazione dinamica della memoria - riepilogo

costruttori e distruttori

DMA Accesso Diretto alla Memoria

puntatori Lab. Calc. AA 2007/08 1

Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione.

LABORATORIO DI SISTEMI OPERATIVI

GENERAZIONE PROCESSO FIGLIO (padre attende terminazione del figlio)

CAPITOLO 27 SCAMBIO DI MESSAGGI

SISTEMI OPERATIVI 14 settembre 2015 corso A nuovo ordinamento e parte di teoria del vecchio ordinamento indirizzo SR

Esempio di esecuzione di una pagina JSP: Il client chiede la pagina: sdfonline.unimc.it/info/modulo.jsp;

Sistemi Operativi (modulo di Informatica II)

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO V Indice

I thread nel sistema operativo LINUX: Linuxthreads

GESTIONE INFORMATICA DEI DATI AZIENDALI

Processi UNIX. I Processi nel SO UNIX. Gerarchie di processi UNIX. Modello di processo in UNIX

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it

Java threads (2) Programmazione Concorrente

Comunicazione tra processi: pipe Le pipe sono un meccanismo UNIX di Inter Process Communication (IPC)

Transcript:

Processi parte III Sincronizzazione e comunicazione tra processi in Unix Segnali: usati per trasferire ad un processo l indicazione che un determinato evento si è verificato. Pipe: struttura dinamica, creata ed usata dal processo che la genera. Fifo: struttura simile alla Pipe, ma statica. Sopravvive ai processi che la usano.

Segnali Un segnale può essere inviato ad un processo al verificarsi di una determinata condizione. Normalmente i segnali provocano la terminazione del processo che li riceve: terminazione normale (simile a quella ottenuta con exit) terminazione anormale (core dumped). Segnali Un processo può specificare una specifica azione da intraprendere all arrivo di un segnale: system call signal Ad ogni segnale è associato un nome simbolico usato dall utente e un numero intero usato dal sistema. La corrispondenza è stabilita nel file signal.h: /usr/lib/bcc/include/

Segnali: signal.h Esempi di segnali: SIGINT int. da terminale SIGILL istruzione non consentita SIGALRM compl. di un quanto di tempo SIGKILL terminazione di un processo SIGTERM terminazione di un processo (intercettabile) SIGUSR1 SIGUSR2 inviati da un processo per sincronizzazione System call signal int sig; void(*func)(); signal(sig,func); sig: specifica il nome del segnale func: è il puntatore ad una funzione che specifica come deve essere trattato il segnale

System call signal La signal deve essere chiamata prima che il segnale sia ricevuto, altrimenti, si ha il comportamento di default (terminazione). signal(sig,sig-ign) il segnale è ignorato dal processo. signal(sig,sig-dfl) ristabilisce l azione di default. Esempio #include<signal.h> extern clean-exit(); main() signal(sigint,sig-ign); /*ignora interruzione da terminale*/ signal(sighup,sig-dfl); /*termina allo spegnimento del terminale*/ signal(sigterm,clean-exit); /*gestione del segnale di terminazione SIGTERM*/ etc. clean-exit() /*copia i buffer in memoria centrale su disco*/ printf( salvataggio buffer completato\n ); exit(1);

System call per la gestione dei segnali Unix fornisce altre primitive per la gestione dei segnali: installazione di un allarme: ALARM(sec) (non è bloccante) sospensione in attesa di un qualunque segnale: PAUSE(). sospensione temporizzata: SLEEP(sec) invio di segnali ad altri processi: KILL(pid,sig) System call: alarm, pause e sleep La system call alarm(sec) setta un allarme per un segnale di tipo SIGALRM che dovrà essere inviato al processo dopo sec secondi. La system call pause() blocca il processo che la esegue in attesa di un qualunque segnale: Il processo deve predisporsi alla gestione del segnale che gli arriverà pena la terminazione La system call sleep(sec) blocca il processo che la esegue per sec secondi

System call kill La system call kill invia un messaggio specificato ad un processo specificato (indicando il pid): Se non è specificato nessun segnale viene inviato SIGTERM Il segnale inviato uccide il processo che lo riceve se non è predisposto alla sua gestione Alcuni segnali come SIGKILL non possono essere intercettati System call kill: esempio void azione() printf( segnale ricevuto\n ); main() int pid; signal(sigusr1,azione); pid = fork(); if(pid == 0) pause(); etc. else... kill(pid,sigusr1);...

Pipe Canale di comunicazione unidirezionale: accessibile ad un estremo in lettura ed all altro estremo in scrittura. Gestione Fifo, dimensione fissa (es. 4096 byte) Sincronizzazione tra processi: un processo che legge si blocca se la pipe è vuota. un processo che scrive si blocca se la pipe è piena. int retval, fd[2]; retval = pipe(fd); fd[0] identificatore del file aperto in lettura, fd[1] identificatore del file aperto in scrittura. Pipe Comunicazione con pipe nella gerarchia di processi; ad esempio: tra processi figli (ereditano il pipe dal padre) tra un processo padre e un processo figlio.

Produttore e consumatore con pipe main() int fd[2],pid,retval,status;... retval = pipe(fd);... if(pid=fork( ) == 0) /*produttore*/ /*scrittura su fd[1]*/ if(pid=fork( ) == 0) /*consumatore*/ /*lettura su fd[0]*/ pid=wait(&status); pid=wait(&status); /*attende entrambe le terminazioni*/ FIFO La pipe ha lo svantaggio di consentire la comunicazione solo tra processi in relazione di parentela, e di essere distrutta al termine del suo utilizzo. FIFO: canale unidirezionale del tipo first-in-first-out: possiede un nome di file di sistema, permane nel sistema, ha un proprietario, un insieme di diritti e una lunghezza. è creata dalla system call mknod: int retval, mode; char* path; retval = mknod(path,mode);

Esercizio: orologio Realizzare un programma C in ambiente Unix che gestisca un contatore minuti-secondi così organizzato: Esistono due processi uno padre e uno figlio Il figlio avverte il padre con un segnale ogni dieci secondi Quando riceve il segnale, il padre aggiorna il contatore a video Processo figlio Trascorsi 10 secondi Processo padre Aggiorna video min:sec Soluzione #include <stdio.h> #include <signal.h> #define TRUE 1 int min=0,sec=0; void stampa( ) signal(sigusr1,stampa); sec +=10; if(sec == 60) sec = 0; min ++; if (min == 60) min = 0; printf("min: %d sec: %d\r",min,sec); fflush(stdout); return; main( ) int pid; signal(sigusr1,stampa); printf("min: %d sec: %d\r",min,sec); fflush(stdout); if((pid=fork())==0) while(true) sleep(10); kill(getppid(),sigusr1); else while(true) pause();