Laboratorio di Sistemi Operativi
|
|
- Timoteo Giglio
- 4 anni fa
- Visualizzazioni
Transcript
1 Laboratorio di Sistemi Operativi LAB6 System call per gestione IPC (Inter Process Communication) 2002/2003 Pagani Trentini Slide 1 Agenda Linux gestione segnali ; kill ; alarm ; pause ; read ; write ; close ; pipe ; fifo (cenni) Windows messages (cenni) ; anonymous pipe ; ReadFile ; WriteFile ; named pipe (cenni) 2002/2003 Pagani Trentini Slide 2
2 Linux 2002/2003 Pagani Trentini Slide 3 gestione dei segnali UNIX rende possibile mandare dei messaggi asincroni ai processi, per la notifica di eventi possono essere generati dal sistema in maniera automatica (e.g. per segnalare la morte di un processo figlio) generati dal sistema ma su richiesta dell utente (allarmi temporizzati) scambiati tra processi utente per notificare eventi 2002/2003 Pagani Trentini Slide 4
3 gestione dei segnali predefiniti tipi di segnali, e azioni di default da compiere per gestirli un proc puo mandare segnali solo ad altri procs con lo stesso UID; root puo mandare segnali a qualunque proc per alcuni segnali, un proc puo (anticipatamente) indicare una routine (handler) diversa da quella di default per la loro gestione 2002/2003 Pagani Trentini Slide 5 SIGHUP SIGINT SIGKILL SIGALRM SIGTERM SIGSTOP SIGTSTP SIGCONT SIGCHLD tipi di segnali segnale di reset di linea (forza la rilettura di una configurazione) terminazione del processo terminazione del processo segnalazione temporizzata real time terminazione software del processo sospensione del job sospensione del job il job riprende ad essere eseguito lo stato di un processo figlio cambiato gestibile? SI NO SI SI SI SI NO NO SI SIGUSR1/2 non gestiti da sistema, sono a disposizione del programmatore SI 2002/2003 Pagani Trentini Slide 6
4 void (*signal(int signum, void (*handler)(int)))(int); serve per indicare a s.o. qual e la funzione handler del segnale specificato, in sostituzione dello handler di default memorizza info in u area eventualmente indica segnale da ignorare (SIG_IGN) NON serve per mandare segnali il proc NON si blocca in attesa del segnale torna 0 se ha successo, 1 altrimenti 2002/2003 Pagani Trentini Slide 7 #include <signal.h> #include <sys/types.h> int handler() int retcode; printf("signal received\n"); signal(sigusr1, handler); main(int argc, char ** argv) printf("my pid is %d\n", getpid()); signal(sigusr1, handler); signal(sigusr2, SIG_IGN); while(1) sleep(60); File signal.c // ATTENZIONE! Handler da ripristinare! N.B. per provare questo esempio, mandarlo in esecuzione in background e inviare quindi segnali di USR1, USR2 o terminazione con la kill. Esempio: kill USR1 <PID processo> Il PID viene stampato a inizio esecuzione. 2002/2003 Pagani Trentini Slide 8
5 int kill(pid_t pid, int sig) serve per inviare il segnale indicato al proc con PID indicato se pid = 0 : segnale inviato a tutti i procs nello stesso gruppo del chiamante se pid = 1 e invocata da superuser: segnale inviato a tutti i processi se pid = 1 e non invocata da superuser: segnale inviato a tutti i procs con UID uguale a EUID chiamante torna 0 se ha successo e 1 altrimenti 2002/2003 Pagani Trentini Slide 9 #include <stdio.h> #include <signal.h> #include <sys/types.h> #include <sys/wait.h> File kill1.c int handler(void) int retcode; printf("signal received\n"); signal(sigusr1, (sig_t) handler); main(int argc, char **argv) int retcode; int pid; pid = fork(); 2002/2003 Pagani Trentini Slide 10
6 if (!pid) printf("child pid is %d\n", getpid()); signal(sigusr1, (sig_t) handler); signal(sigusr2, (sig_t) SIG_IGN); while(1) sleep(60); sleep(1); printf("father pid is %d\n", getpid()); while(1) sleep(10); kill(pid, SIGUSR1); 2002/2003 Pagani Trentini Slide 11 unsigned int alarm(unsigned int seconds) serve per mandare al processo stesso un segnale SIGALRM dopo il tempo indicato e una sorta di timer sovrascrive allarmi precedenti torna il #sec che mancava allo scadere dell allarme precedente (o 0) se ha successo, 1 altrimenti alarm(0) annulla gli allarmi creati in precedenza 2002/2003 Pagani Trentini Slide 12
7 #include <stdio.h> #include <signal.h> #include <unistd.h> typedef void (*sig_t) (int); int handler(void) static int counter = 0; counter += 1; printf("%d seconds passed\n", counter); signal(sigalrm, (sig_t) handler); alarm(1); main(int argc, char **argv) signal(sigalrm, (sig_t) handler); alarm(1); while(1) sleep(60); File alarm.c 2002/2003 Pagani Trentini Slide 13 int pause(void) sospende il chiamante in attesa dell arrivo di un segnale qualsiasi quando segnale e ricevuto, il controllo passa al relativo signal handler, e poi all istruzione successiva a pause() torna sempre 1 puo servire per sincronizzazione tra processi o gestione timer in proc (con alarm() ) 2002/2003 Pagani Trentini Slide 14
8 #include <stdio.h> #include <signal.h> #include <unistd.h> int handler() static int counter = 0; File pause.c counter += 1; printf("%d seconds passed\n", counter); signal(sigalrm, handler); main(int argc, char **argv) signal(sigalrm, handler); while(1) alarm(1); pause(); 2002/2003 Pagani Trentini Slide 15 pid_t wait(int *status) a terminazione proc, s.o. invia SIGCLD a padre padre puo definire handler (asynch), oppure sospendersi in attesa della terminazione del figlio "The wait() function suspends execution of its calling process until status information is available for a terminated child process, or a signal is received. On return from a successful wait() call, the status area contains termination information about the process that exited." torna pid del figlio, o 1 in caso di errore anche waitpid() per attesa terminazione specifico figlio 2002/2003 Pagani Trentini Slide 16
9 #include <stdio.h> #include <sys/types.h> File wait.c #include <sys/wait.h> main(int argc,char ** argv) int retcode, pid; if (!fork()) printf("child pid is %d\n", getpid()); sleep(10); exit(8); sleep(1); printf("father pid is %d\n", getpid()); pid = wait(&retcode); if (pid == 1) perror("wait"); printf("signal received\n Child pid was %d\n", pid); printf("exit code was %d\n", WEXITSTATUS(retcode)); 2002/2003 Pagani Trentini Slide 17 pipe una pipe e un canale di comunicazione FIFO unidirezionale tra processi imparentati un proc scrive ad una estremita del canale; l altro processo legge dall altra estremita comunicazione asincrona: buffer associato alla pipe e implementato come un file senza nome le due estremita accedute tramite due descrittori di file letture e scritture sono eseguite con le stesse syscall usate per i file 2002/2003 Pagani Trentini Slide 18
10 int pipe(int filedes[2]) inizializza i due descrittori associati alla pipe la creazione va fatta prima di generare i discendenti che condividono la pipe dato che e file anonimo, condivisione possibile solo attraverso eredita descrittori... [recall fork()] parametro e array di due descrittori per convenzione: descrittore [0] per input (lettura); descrittore [1] per output (scrittura) torna 0 se ha successo e 1 altrimenti 2002/2003 Pagani Trentini Slide 19 ssize_t read(int fd, void *buf, size_t count) legge caratteri dal file descriptor fd in numero di count, e li mette nell array allocato all indirizzo *buf rende il numero di caratteri effettivamente letti, oppure 1 in caso di errore se e arrivato a EOF, torna 0 se legge da pipe e non ci sono caratteri, si blocca in attesa 2002/2003 Pagani Trentini Slide 20
11 ssize_t write(int fd, const void *buf, size_t count) scrive sul file indicato dal descrittore fd dei caratteri contenuti nell array allocato all indirizzo *buf, in numero di count rende il numero di caratteri effettivamente scritti o 1 in caso di errore se scrive su pipe e non c e piu spazio buffer, si arresta in attesa di disponibilita se proc reader e terminato, il chiamante termina con errore di Broken pipe 2002/2003 Pagani Trentini Slide 21 int close(int fd) chiude il descrittore e rilascia strutture dati torna 0 se ha successo e 1 altrimenti NB: chiusura descrittori inutili e buona pratica di programmazione evita condivisione indesiderata tra procs imparentati libera spazio nelle tabelle (file descriptor table, file table) per l allocazione di nuovi descrittori 2002/2003 Pagani Trentini Slide 22
12 #include <stdio.h> #include <unistd.h> File pipe.c main(int argc, char **argv) int pipestub[2]; int counter; char buffer[10]; if (pipe(pipestub) == 1) perror("pipe"); 2002/2003 Pagani Trentini Slide 23 if (!fork()) close(pipestub[1]); while(1) read(pipestub[0], buffer, 1); printf("%c(%x):", *buffer, *buffer); else close(pipestub[0]); while (1) counter = read(0, buffer, 10); write(pipestub[1], buffer, counter); 2002/2003 Pagani Trentini Slide 24
13 Windows 2002/2003 Pagani Trentini Slide 25 Strumenti di IPC thread nello stesso proc possono facilmente scambiare info, poiche accedono alle medesime risorse per thread in processi differenti: messaggi: specialmente per applic. grafiche pipe anonime: simili a Unix pipe pipe con nome: anche per comunicazione in rete 2002/2003 Pagani Trentini Slide 26
14 messaggi sono diretti a una window, piuttosto che ad uno specifico thread (ricevuto dal thread che ha creato la window) gestiti via struttura THREADINFO che include code di messaggi PostMessage: messaggio e aggiunto in coda e controllo torna immediatamente a chiamante (asincrono) SendMessage: msg e aggiunto in coda, ma chiamante e bloccato finche msg non e prelevato dalla coda (sincrono) ReplyMessage: usato per notificare ricezione msg al sender (e.g. se receiver prevede di essere lento a gestirlo) 2002/2003 Pagani Trentini Slide 27 pipe anonime passaggio info tra gli spazi di indirizzamento di processi diverse, implementato via shared memory canali anonimi unidirezionali per comunicazione tra procs (in genere imparentati) sullo stesso host procs leggono da/scrivono su pipe come da/su file usando relativi handle pipe distrutta quando tutti gli handle sono stati chiusi (CloseHandle) 2002/2003 Pagani Trentini Slide 28
15 CreatePipe BOOL CreatePipe( PHANDLE hreadpipe, // ptr a handle per lettura PHANDLE hwritepipe, // ptr a handle per scrittura LPSECURITY_ATTRIBUTES lppipeattributes, DWORD nsize // #bytes = taglia buffer associato ); se nsize=0 e usata taglia di default torna 0 se fallisce, non zero altrimenti 2002/2003 Pagani Trentini Slide 29 ReadFile BOOL ReadFile ( HANDLE hfile, // handle a file da leggere LPVOID lpbuffer, // ptr a buffer in cui porre dati letti DWORD nnumberofbytestoread, // #bytes da leggere LPDWORD lpnumberofbytesread, // ptr a #bytes letti LPOVERLAPPED lpoverlapped // per pipe deve essere NULL ); torna quando qualcuno ha scritto o se tutti i write handle sono stati chiusi torna 0 se fallisce, non zero altrimenti 2002/2003 Pagani Trentini Slide 30
16 WriteFile BOOL WriteFile ( HANDLE hfile, // handle a file da scrivere LPCVOID lpbuffer, // ptr a buffer da cui prendere dati DWORD nnumberofbytestowrite, // #bytes da scrivere LPDWORD lpnumberofbyteswritten, // ptr a #bytes scritti LPOVERLAPPED lpoverlapped // per pipe deve essere NULL ); se buffer pipe pieno, Write termina quando si crea spazio a sufficienza in seguito a una Read torna 0 se fallisce, non zero altrimenti 2002/2003 Pagani Trentini Slide 31 condivisione handle a pipe dato che pipe e anonima, tutti i procs che vogliono usarla devono conoscerne gli handle generalmente ottenuto via inheritance. ES: padre crea la pipe padre crea figlio I rendendo lo handle di scrittura ereditabile e redireziona stdout figlio su pipe padre crea figlio II rendendo lo handle di lettura ereditabile e redireziona stdin figlio da pipe I P II stdin stdout pipe stdin stdout 2002/2003 Pagani Trentini Slide 32
17 esempio uso pipe in Win struttura sistema e step: padre crea pipe anonima padre crea figlio che eredita Read Handle della pipe padre legge da stdin e scrive su pipe; figlio legge da pipe e scrive su stdout funzioni principali CreateChildProcess : crea figlio che eredita gli handle del padre WriteToPipe: legge da stdin e scrive su pipe, con opportuno controllo errori ErrorExit: stampa errore e termina processo 2002/2003 Pagani Trentini Slide 33 API e strutture usate nell esempio SECURITY_ATTRIBUTES: contiene info di sicurezza per l accesso a un oggetto e specifica se lo handle ottenuto specificando questo oggetto e ereditabile GetStdHandle: recupera handle per stdin, stdout o stderr SetStdHandle: fa set handle per stdin, stdout o stderr DuplicateHandle: duplica handle proc sorgente in handle proc destinatario, specificando se e inheritable ZeroMemory: riempie un blocco di memoria di /2003 Pagani Trentini Slide 34
18 #include "stdafx.h" #include <stdio.h> #include <windows.h> File WpipePadre.cpp #define BUFSIZE 10 HANDLE hchildstdinrd, hchildstdinwr, hchildstdinwrdup, hchildstdoutrd, hchildstdoutwr, hchildstdoutrddup, hinputfile, hsavestdin, hsavestdout; BOOL CreateChildProcess(VOID); VOID WriteToPipe(VOID); VOID ErrorExit(LPTSTR); int main(int argc, char *argv[]) SECURITY_ATTRIBUTES saattr; BOOL fsuccess; // Save the handle to the current STDIN. hsavestdin = GetStdHandle(STD_INPUT_HANDLE); 2002/2003 Pagani Trentini Slide 35 // Set the binherithandle flag so pipe handles are inherited. saattr.nlength = sizeof(security_attributes); saattr.binherithandle = TRUE; saattr.lpsecuritydescriptor = NULL; // Create a pipe for the child process s STDIN. if (! CreatePipe(&hChildStdinRd, &hchildstdinwr, &saattr, 0)) ErrorExit("Stdin pipe creation failed\n"); // Set a read handle to the pipe to be STDIN. if (! SetStdHandle(STD_INPUT_HANDLE, hchildstdinrd)) ErrorExit("Redirecting Stdin failed"); // Duplicate the write handle to the pipe so it is not inherited. fsuccess = DuplicateHandle(GetCurrentProcess(), hchildstdinwr, GetCurrentProcess(), &hchildstdinwrdup, 0, FALSE, // not inherited DUPLICATE_SAME_ACCESS); if (! fsuccess) ErrorExit("DuplicateHandle failed"); CloseHandle(hChildStdinWr); 2002/2003 Pagani Trentini Slide 36
19 // Now create the child process. fsuccess = CreateChildProcess(); if (! fsuccess) ErrorExit("Create process failed"); // After process creation, restore the saved STDIN if (! SetStdHandle(STD_INPUT_HANDLE, hsavestdin)) ErrorExit("Re redirecting Stdin failed\n"); hinputfile = hsavestdin; if (hinputfile == INVALID_HANDLE_VALUE) ErrorExit("no input file\n"); // Write to pipe that is the standard input for a child process. WriteToPipe(); return 0; 2002/2003 Pagani Trentini Slide 37 BOOL CreateChildProcess() PROCESS_INFORMATION piprocinfo; STARTUPINFO sistartinfo; BOOL bfuncretn = FALSE; // reset PROCESS_INFORMATION and STARTUPINFO structures ZeroMemory( &piprocinfo, sizeof(process_information) ); ZeroMemory( &sistartinfo, sizeof(startupinfo) ); sistartinfo.cb = sizeof(startupinfo); // Create the child process. bfuncretn = CreateProcess(NULL, "figlio", // command line NULL, // process security attributes NULL, // primary thread security attributes TRUE, // handles are inherited 0, // creation flags NULL, // use parent s environment NULL, // use parent s current directory &sistartinfo, // STARTUPINFO pointer &piprocinfo); // receives PROCESS_INFORMATION 2002/2003 Pagani Trentini Slide 38
20 if (bfuncretn == 0) ErrorExit("CreateProcess failed\n"); return 0; else CloseHandle(piProcInfo.hProcess); CloseHandle(piProcInfo.hThread); return bfuncretn; printf("padre in Create Child: ho fatto\n"); // end CreateChildProcess VOID ErrorExit (LPTSTR lpszmessage) fprintf(stderr, "%s\n", lpszmessage); ExitProcess(0); 2002/2003 Pagani Trentini Slide 39 VOID WriteToPipe(VOID) DWORD dwread, dwwritten; CHAR chbuf[bufsize]; // Read from a file and write its contents to a pipe. for (;;) if (! ReadFile(hInputFile, chbuf, BUFSIZE, &dwread, NULL) dwread == 0) break; printf("padre: letto da stdin %d char, ora scrivo su pipe\n",dwread); if (! WriteFile(hChildStdinWrDup, chbuf, dwread, &dwwritten, NULL)) break; // Close the pipe handle so the child process stops reading. if (! CloseHandle(hChildStdinWrDup)) ErrorExit("Close pipe failed\n"); 2002/2003 Pagani Trentini Slide 40
21 #include "stdafx.h" #include <windows.h> #define BUFSIZE 10 File WpipeFiglio.cpp int main(int argc, char* argv[]) CHAR chbuf[bufsize]; DWORD dwread, dwwritten; HANDLE hstdin, hstdout; BOOL fsuccess; hstdout = GetStdHandle(STD_OUTPUT_HANDLE); hstdin = GetStdHandle(STD_INPUT_HANDLE); if ((hstdout == INVALID_HANDLE_VALUE) (hstdin == INVALID_HANDLE_VALUE)) ExitProcess(1); 2002/2003 Pagani Trentini Slide 41 for (;;) // Read from standard input. fsuccess = ReadFile(hStdin, chbuf, BUFSIZE, &dwread, NULL); if (! fsuccess dwread == 0) break; printf("figlio: letto da pipe %d char, ora scrivo \n", dwread); // Write to standard output. fsuccess = WriteFile(hStdout, chbuf, dwread, &dwwritten, NULL); if (! fsuccess) break; return 0; 2002/2003 Pagani Trentini Slide 42
22 pipe con nome Unix: come le pipe anonime, ma consentono comunicazione (unidirezionale) tra processi non imparentati (residenti sullo stesso host) fifo, generate con mkfifo() che crea un file speciale Win: a differenza delle pipe anonime, consentono comunicazione bidirezionale anche tra processi residenti su macchine diverse (via rete) usano API differenti da pipe anonime (e.g. CreateNamedPipe, WaitNamedPipe, CallNamedPipe...) 2002/2003 Pagani Trentini Slide 43
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 Processi in Unix/Linux (parte II)
DettagliSistemi Operativi Anno Accademico 2011/2012. Segnali: Interrupt software per la gestione di eventi asincroni
Anno Accademico 2011/2012 Segnali: Interrupt software per la gestione di eventi asincroni Concetto di segnale Un segnale è un interrupt software Un segnale può essere generato da un processo utente o dal
DettagliSincronizzazione tra processi in Unix: i segnali
Sincronizzazione tra processi in Unix: i segnali 1 Sincronizzazione tra processi I processi interagenti possono avere bisogno di sincronizzazione. Unix: non c è condivisione di variabili tra processi:
DettagliLaboratorio di Sistemi Operativi Marzo-Giugno 2008 Matricole congrue 0 modulo 3
Marzo-Giugno 2008 Matricole congrue 0 modulo 3 Segnali: Interrupt software per la gestione di eventi asincroni Concetto di segnale Un segnale è un interrupt software Un segnale può essere generato da un
DettagliSincronizzazione tra processi UNIX: i segnali. Sincronizzazione tra processi
Sincronizzazione tra processi UNIX: i segnali Sincronizzazione tra processi Processi interagenti possono avere bisogno di meccanismi di sincronizzazione Ad esempio, abbiamo appena visto il caso di processi
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 9 Giovedì 2-11-2017 Comunicazione con pipe Oltre che con la memoria condivisa
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 20 Giovedì 22-12-2016 Comunicazione: pipe In Unix, processi possono comunicare
DettagliSincronizzazione tra processi. Sincronizzazione tra processi. segnali. Segnali UNIX
Sincronizzazione tra processi Sincronizzazione tra processi UNIX: i segnali Processi interagenti possono avere bisogno di meccanismi di sincronizzazione Ad esempio, abbiamo appena visto il caso di processi
DettagliI segnali. First the signals described in the original POSIX standard.
I segnali Prof.ssa Sara Michelangeli I segnali sono interruzioni inviate ai processi dal kernel, da un altro processo utente, oppure da un processo a se' stesso. Possono essere utilizzati dal sistema operativo
DettagliTerza Esercitazione. Gestione di segnali in Unix Primitive signal e kill!
Terza Esercitazione Gestione di segnali in Unix Primitive signal e kill! Primitive fondamentali signal kill pause alarm sleep Imposta la reazione del processo all eventuale ricezione di un segnale (può
DettagliTECN.PROG.SIST.INF. Creazione di un processo in Windows. Roberta Gerboni
Roberta Gerboni // Funzione delle API di Windows // Crea un nuovo processo e il relativo thread primario. // Il nuovo processo viene eseguito nel contesto di protezione // del processo chiamante BOOL WINAPI
DettagliSincronizzazione tra processi in Unix: : i segnali. Sistemi Operativi T AA
Sincronizzazione tra processi in Unix: : i segnali Sistemi Operativi T AA 2009-2010 1 Sincronizzazione tra processi La sincronizzazione permette di imporre vincoli sull'ordine di esecuzione delle operazioni
DettagliSincronizzazione tra processi in Unix: i segnali
Sincronizzazione tra processi in Unix: i segnali Sincronizzazione tra processi La sincronizzazione permette di imporre vincoli sull'ordine di esecuzione delle operazioni dei processi interagenti. Unix
DettagliSincronizzazione tra processi! in Unix: i segnali!
Sincronizzazione tra processi! in Unix: i segnali! 1 Sincronizzazione tra processi La sincronizzazione permette di imporre vincoli sull'ordine di esecuzione delle operazioni dei processi interagenti. Unix
DettagliTerza Esercitazione. Gestione di segnali in Unix Primitive signal e kill
Terza Esercitazione Gestione di segnali in Unix Primitive signal e kill signal kill pause alarm sleep Primitive fondamentali Imposta la reazione del processo all eventuale ricezione di un segnale (può
DettagliSISTEMI OPERATIVI. Processi in Linux. Giorgio Giacinto Sistemi Operativi
SISTEMI OPERATIVI Processi in Linux 2 Creazione di processi concorrenti» La creazione di un processo figlio consente di far eseguire alcune funzionalità del programma in modo concorrente» Opzione 1 il
DettagliProgrammazione di sistema in Linux: System Call per i Segnali. E. Mumolo
Programmazione di sistema in Linux: System Call per i Segnali E. Mumolo Eventi asincroni: segnali I segnali permettono la gestione di eventi asincroni che interrompono il normale funzionamento di un processo
DettagliSegnali. Tecnica di comunicazione asincrona tra processi. Si può solo inviare uno tra un insieme fissato di segnali
Segnali ed allarmi Segnali Tecnica di comunicazione asincrona tra processi Si può solo inviare uno tra un insieme fissato di segnali Il destinatario viene interrotto, e si salta ad una procedura specifica
DettagliPipes e named pipes: 1. Nozioni preliminari 2. Pipes e named pipes (FIFO) in sistemi UNIX 3. Pipes e named pipes sistemi Windows
Sistemi Operativi II Corso di Laurea in Ingegneria Informatica Facolta di Ingegneria, Universita La Sapienza Docente: Francesco Quaglia Pipes e named pipes: 1. Nozioni preliminari 2. Pipes e named pipes
DettagliEsercitazione 4. Gestione dei file in Unix
Esercitazione 4 Gestione dei file in Unix Primitive fondamentali (1/2) open close Apre il file specificato e restituisce il suo file descriptor (fd) Crea una nuova entry nella tabella dei file aperti di
DettagliComunicazione tra processi: pipe Le pipe sono un meccanismo UNIX di Inter Process Communication (IPC)
Comunicazione tra processi: pipe Le pipe sono un meccanismo UNIX di Inter Process Communication (IPC) Le pipe sono canali di comunicazione unidirezionali Limitazione pipe: permettono la comunicazione solo
DettagliEsercitazione: Utilizzo delle Pipe
Esercitazione: Utilizzo delle Pipe Specifica del problema Struttura generale del programma Esempio per Unix Esempio per Windows 1 Esercizio Realizzazione di una semplice shell che sia in grado di accettare
DettagliProcessi. Segnali. Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino
Processi Segnali Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino 2 Interruzioni Interrupt Interruzione del procedimento corrente dovuto al verificarsi di un evento straordinario
DettagliUniversità di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14. Pietro Frasca.
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14 Pietro Frasca Lezione 22 Martedì 7-1-2014 1 System Call per l'uso dei segnali Un processo che
DettagliPOSIX Systems Programming. geek evening 0x0d. ambienti POSIX. By lord_dex ZEI e Salug! presentano:
POSIX Systems Programming Syscall e fondamenti della ambienti POSIX programmazione in By lord_dex f.apollonio@salug.it ZEI e Salug! presentano: geek evening 0x0d INDICE Processi e Thread Creazione ed utilizzo
DettagliAddendum alle chiamate di sistema per la gestione processi. E Mumolo
Addendum alle chiamate di sistema per la gestione processi E Mumolo Definiamo un processo proc.c che scrive l'argomento passato in linea: void main(int argc, char *argv[]){ printf("sono il processo %s\n",
DettagliLaboratorio di sistemi operativi A.A. 2010/2011 Gruppo 2 Gennaro Oliva 18 Segnali
Laboratorio di sistemi operativi A.A. 2010/2011 Gruppo 2 Gennaro Oliva 18 Segnali I lucidi di seguito riportati sono distribuiti nei termini della licenza Creative Commons Attribuzione/Condividi allo stesso
DettagliLINUX: struttura generale
LINUX: struttura generale User Interface The layers of a UNIX system. 1 Processi in LINUX Ogni processo nasce con un solo thread Un processo gira in modalità utente; quando effettua una system call passa
DettagliPOSIX - Gestione dei Segnali. E.Mumolo, DEEI mumolo@units.it
POSIX - Gestione dei Segnali E.Mumolo, DEEI mumolo@units.it Segnali in POSIX Segnali in Posix Modalità di notifiche relative a vari eventi asincroni I signal interrompono un processo e possono o meno essere
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. 2018-2019 Pietro Frasca Lezione 5 Martedì 16-10-2018 Operazioni sui processi Nella maggior parte dei
DettagliLaboratorio di Sistemi Operativi primavera 2009
primavera 2009 Forme di comunicazione tra processi La comunicazione tra processi può avvenire: Le pipe Passando dei files aperti tramite fork Attraverso il filesystem Utilizzando le pipes Utilizzando le
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. 2018-2019 Pietro Frasca Lezione 8 Giovedì 25-10-2018 Comunicazione con pipe Oltre che con la memoria
DettagliSistemi Operativi (M. Cesati)
Sistemi Operativi (M. Cesati) Compito scritto del 17 febbraio 2014 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare
DettagliLaboratorio di Sistemi Operativi Marzo-Giugno 2008 Matricole congrue 0 mod 3
Marzo-Giugno 2008 Matricole congrue 0 mod 3 IPC: pipe e FIFO (1) Forme di comunicazione tra processi La comunicazione tra processi può avvenire: Passando dei files aperti tramite fork Attraverso il filesystem
DettagliQuinta Esercitazione. Principali primitive di accesso ai File
Esempio: processi padre e figlio condividono di file aperti PRIMA della creazione Quinta Esercitazione Gestione File-System Segnali processo padre fork() Sistema tabella dei file attivi i-node Eugenio
DettagliLaboratorio di Sistemi Operativi
Laboratorio di Sistemi Operativi Segnali a.a. 2011/2012 Francesco Fontanella Segnali - Introduzione I segnali sono interrupt software a livello di processo comunicano al processo il verificarsi di un evento
DettagliLa Comunicazione tra Processi in Unix
La Comunicazione tra Processi in Unix La è un canale di comunicazione tra processi: unidirezionale: accessibile ad un estremo in lettura ed all'altro in scrittura molti-a-molti: più processi possono spedire
DettagliGestione dei processi
Gestione dei processi SLEEP(3) sospende il processo per seconds secondi unsigned int sleep(unsigned int seconds); Sospende il thread chiamante fino a quando non sono trascorsi seconds secondi, o fino a
DettagliUniversità degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria Elettronica. SISTEMI OPERATIVI A.A. 2004/2005 Docente: Giorgio Giacinto
Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria Elettronica SISTEMI OPERATIVI A.A. 2004/2005 Docente: Giorgio Giacinto Comunicazione fra processi in Linux Lock-file, Signal,
DettagliSistemi Operativi (M. Cesati)
Sistemi Operativi (M. Cesati) Compito scritto del 1 febbraio 2016 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare
DettagliAvvio. La funzione main puo' avere due argomenti argc ed argv, ma in realta' oltre a argc ed argv c'e' qualche cosa di piu'.
Avvio Quando un programma viene eseguito, prima vengono caricate le librerie condivise che servono al programma, poi viene effettua il link dinamico del codice e alla fine avviene l'esecuzione vera e propria.
DettagliLa Comunicazione tra Processi in Unix
La Comunicazione tra Processi in Unix 1 Interazione tra processi Unix I processi Unix non possono condividere memoria (modello ad ambiente locale ) L interazione tra processi può avvenire: mediante la
DettagliProcessi. Comunicazione tra processi Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino
Processi Comunicazione tra processi Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino 2 Processi independenti e cooperanti I processi concorrenti possono essere Indipendenti Cooperanti
DettagliLaboratorio di Sistemi Operativi Marzo-Giugno 2008 matricole congrue 0 mod 3
Marzo-Giugno 2008 matricole congrue 0 mod 3 Controllo dei processi - I Controllo dei processi Creazione di nuovi processi Esecuzione di programmi Processo di terminazione Altro 2 1 Identificatori di processi
DettagliChiamate di sistema. Pipe Flussi di I/O
Chiamate di sistema Pipe Flussi di I/O Esempio di chiamata di sistema #include int main(int argc, char ** argv) FILE * f; f = fopen("nuovo-file", "w"); fprintf(f, "Hello World!\n"); fclose(f);
DettagliEsercizio sulla gestione di file in Unix. Sistemi Operativi T AA
Esercizio sulla gestione di file in Unix Sistemi Operativi T AA 2011-2012 1 Esercizio Si vuole realizzare un programma C che, utilizzando le system call di Unix, realizzi uno schema di comunicazione tra
DettagliSistemi Operativi (M. Cesati)
Sistemi Operativi (M. Cesati) Compito scritto del 5 febbraio 2013 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 Indice
Il sistema operativo LINUX Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica Processo Un processo è un programma in esecuzione:
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 Processi in Unix/Linux caratteristiche
DettagliProgrammazione di Sistema
Programmazione di Sistema Massimo Bernaschi Istituto per le Applicazioni del Calcolo Mauro Picone Consiglio Nazionale delle Ricerche Viale Manzoni, 30-00185 Rome - Italy http://www.iac.cnr.it/~massimo
DettagliLa creazione di un nuovo processo in UNIX
La creazione di un nuovo processo in UNIX #include int fork(void); Viene creato un nuovo processo (figlio) identico (stesso codice, area dati copiata) al processo (padre) che ha invocato la
DettagliChiamate di sistema. Pipe Flus s i di I/O
Chiamate di sistema Pipe Flus s i di I/O Esempio di chiamata di sistema #include int main(int argc, char ** argv) { FILE * f; f = fopen("nuovo-file", "w"); fprintf(f, "Hello World!\n"); fclose(f);
DettagliIgino Corona
Sistemi Operativi Esercitazione 6: Comunicazione fra processi in Linux PIPE Igino Corona igino.corona@diee.unica.it 17 Novembre 2009 File In Linux, un le può essere un contenitore di informazione o uno
DettagliCorso di Laboratorio di Sistemi Operativi A.A
Corso di Laboratorio di Sistemi Operativi A.A. 2016 2017 Lezione 16 Ivan Scagnetto ivan.scagnetto@uniud.it Nicola Gigante gigante.nicola@spes.uniud.it Dipartimento di Scienze Matematiche, Informatiche
DettagliSistemi Operativi (M. Cesati)
Sistemi Operativi (M. Cesati) Compito scritto del 25 settembre 2014 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare
DettagliInter-process communication
Primitive di Comunicazione 1 Inter-process communication Nell'attività del sistema si rende necessario la cooperazione tra processi per realizzare le diverse funzionalità offerte all'utente. La cooperazione
DettagliCorso di Programmazione Concorrente Processi. Valter Crescenzi
Corso di Programmazione Concorrente Processi Valter Crescenzi http://crescenzi.inf.uniroma3.it Sommario Processi vs Thread Creazione e terminazione di processi chiamata di sistema fork() chiamata di sistema
DettagliSistemi Operativi. Marzo-Giugno 2011 matricole congrue 0 mod 3. Controllo dei processi - I
Marzo-Giugno 2011 matricole congrue 0 mod 3 Controllo dei processi - I Controllo dei processi Creazione di nuovi processi Esecuzione di programmi Processo di terminazione Altro 2 1 Identificatori di processi
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 di Calcolo - Secondo modulo (SC2) Programmazione dei Sistemi di Calcolo Multi-Nodo
www.dis.uniroma1.it/~midlab Sistemi di Calcolo - Secondo modulo (SC2) Programmazione dei Sistemi di Calcolo Multi-Nodo Corso di Laurea in Ingegneria Informatica e Automatica A.A. 2014-2015 Prof. Roberto
DettagliIl sistema operativo LINUX Semafori. Semaforo. Sommario. Sommario. Uso delle pipe. Gestione di semafori tramite pipe. Sistemi operativi Modulo II
Il sistema operativo LINUX Semafori Semaforo Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica Un semaforo è una variabile
DettagliProcessi Aspetti avanzati. Terminazione Segnali
Processi Aspetti avanzati Terminazione Segnali Inizializzazione e terminazione di un programma Dal punto di vista dell'utente, ogni programma "inizia" dalla funzione main() E' la prima funzione utente
DettagliCapitolo 3 -- Silberschatz
Processi Capitolo 3 -- Silberschatz Concetto di processo Un SO esegue una varietà di attività: Sistemi batch job Sistemi time-sharing programmi utenti o task Nel libro i termini job e processo sono usati
DettagliSistemi Operativi II
Sistemi Operativi II Massimo Bernaschi Istituto per le Applicazioni del Calcolo Mauro Picone Consiglio Nazionale delle Ricerche Viale del Policlinico, 137-00161 Rome - Italy http://www.iac.cnr.it/ e-mail:
DettagliUniversità degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria Elettronica. SISTEMI OPERATIVI A.A. 2004/2005 Docente: Giorgio Giacinto
Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria Elettronica SISTEMI OPERATIVI A.A. 2004/2005 Docente: Giorgio Giacinto fork() & exec() Roberto Perdisci A.A. 2004/2005 1 Dettagli
DettagliSistemi Operativi (M. Cesati)
Sistemi Operativi (M. Cesati) Compito scritto del 7 settembre 2012 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare
DettagliChiamate di sistema per la Gestione dei processi in POSIX. E.Mumolo, DEEI mumolo@units.it
Chiamate di sistema per la Gestione dei processi in POSIX E.Mumolo, DEEI mumolo@units.it Process id ed altri identificatori pid_t getpid(); // Process id del processo chiamante pid_t getppid(); // Process
DettagliIl processo figlio : utilizza lo stesso codice che sta eseguendo il padre ;
La creazione di un nuovo processo in UNIX int fork(void); Viene creato un nuovo processo (figlio) identico (stesso codice, area dati copiata) al processo (padre) che ha invocato la fork Solo il valore
DettagliSincronizzazione e comunicazione tra processi in Unix. usati per trasferire ad un processo l indicazione che un determinato evento si è verificato.
Processi parte III Sincronizzazione e comunicazione tra processi in Unix Segnali: usati per trasferire ad un processo l indicazione che un determinato evento si è verificato. Pipe: struttura dinamica,
Dettaglicase 0: /* child 1 - writing end */ close(fd[0]); // close read end write(fd[1], string, (strlen(string)+1));/* +1 is termination \0 */ return (0);
ESERCIZIO RELATIVO ALLA PARTE DI UNIX (3 punti) Si scriva un programma per realizzare la comunicazione unidirezionale via pipe fra due processi fratelli, in cui un fratello invia all altro la stringa "Good
DettagliCorso di Reti di Calcolatori T
Università degli Studi di Bologna Scuola di Ingegneria Corso di Reti di Calcolatori T Esercitazione 0 (proposta) Lettura e Scrittura File in Java e C Luca Foschini Michele Solimando, Giuseppe Martuscelli
DettagliControllo dei Processi 1
Controllo dei Processi 1 I processi Nei sistemi Unix/Linux ogni processo ne può generare altri. Il processo che li genera è detto processo padre (parent process), mentre i processi generati sono detti
DettagliI Processi nel Sistema Operativo Unix. Gerarchie di processi Unix. Stati di un processo Unix. Stati di un processo Unix.
I Processi nel Sistema Operativo Unix Processi Unix Unix è un sistema operativo multiprogrammato a divisione di tempo: l unità di computazione è il processo. Caratteristiche del processo Unix: processo
DettagliSystem call per la gestione di processi
System call per la gestione di processi Chiamate di sistema per creazione di processi: fork() sostituzione di codice e dati: exec...() terminazione: exit() sospensione in attesa della terminazione di figli:
DettagliSystem call per la gestione di processi
System call per la gestione di processi Chiamate di sistema per creazione di processi: fork() sostituzione di codice e dati: exec...() terminazione: exit() sospensione in attesa della terminazione di figli:
DettagliControllo dei Processi. M. R. Guarracino - Primitive di Controllo dei Processi
Controllo dei Processi Introduzione Come possiamo creare nuovi processi? Come possiamo eseguire un programma? Come possiamo terminare un processo? Introduzione Unix fornisce le primitive per la creazione
DettagliSystem Calls per la Gestione dei Processi
System Calls per la Gestione dei Processi Domenico Cotroneo Dipartimento di Informatica e Sistemistica Università degli Studi di Napoli Federico II Roadmap Process Context Identificativi getpid() getppid()
DettagliProcessi Concetti di base. Esecuzione parallela e sequenziale Il concetto di processo Gestione dei processi
Processi Concetti di base Esecuzione parallela e sequenziale Il concetto di processo Gestione dei processi Esecuzione sequenziale I sistemi di calcolo più semplici consentono unicamente l'esecuzione sequenziale
DettagliGESTIONE DELLA COMUNICAZIONE LOCALE TRA PROCESSI IN UNIX:
GESTIONE DELLA COMUNICAZIONE LOCALE TRA PROCESSI IN UNIX: Il primo meccanismo di comunicazione tra processi locali in ambiente Unix e stato il meccanismo delle pipe. Per processo locale si intende un processo
DettagliSystem Call EXEC EXEC P P. fork exec(new_prog) fork. sono_il_padre = fork(); if (!sono_il_padre) {
System Call EXEC EXEC L effetto delle system call della famiglia exec consiste nel mandare in esecuzione: (1) un programma contenuto in un file eseguibile oppure un (2) interprete di programmi P fork P
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 6 Martedì 24-10-2017 1 Sostituzione del codice Tipicamente, dopo una
DettagliRiepilogo sulla Concorrenza
Riepilogo sulla Concorrenza Passi per la costruzione di un programma concorrente Prima di tutto, definire se la concorrenza avviene mediante Processi concorrenti o Thread concorrenti Definizione delle
DettagliCORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 4
UNIVERSITÀ DEGLI STUDI DI PARMA Facoltà di Ingegneria Corso di Laurea in Ingegneria Elettronica e delle Telecomunicazioni a.a. 2005-2006 CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 4 1 Funzioni per il
DettagliCorso di Sistemi Operativi A.A CHIAMATE DI SISTEMA PER FILE E SEMAFORI. Fabio Buttussi
Corso di Sistemi Operativi A.A. 2008-2009 - CHIAMATE DI SISTEMA PER FILE E SEMAFORI Fabio Buttussi System call per l accesso a file Nome open close read write lseek creat remove unlink stat Significato
DettagliSistemi Operativi (M. Cesati)
Sistemi Operativi (M. Cesati) Compito scritto del 17 settembre 2012 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare
DettagliSC per Inter Process Communication. Pipe senza nome e con nome (FIFO)
SC per Inter Process Communication Pipe senza nome e con nome (FIFO) 1 Pipe Pipe : file speciali utilizzati per connettere due processi con un canale di comunicazione Possono essere utilizzati in modo
DettagliLe strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune.
Le strutture Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune. Dichiarazione di una struttura: struct point { int x; int y; }; La dichiarazione di una struttura
DettagliSC per Inter Process Comminication. Pipe senza nome e con nome (FIFO)
SC per Inter Process Comminication Pipe senza nome e con nome (FIFO) 1 Pipe Pipe : file speciali utilizzati per connettere due processi con un canale di comunicazione Possono essere utilizzati in modo
DettagliSistemi Operativi 1. Lezione III: Concetti fondamentali. Mattia Monga. 7 marzo 2008
1 Dip. di Informatica e Comunicazione Università degli Studi di Milano, Italia mattia.monga@unimi.it 7 marzo 2008 1 c 2008 M. Monga. Creative Commons Attribuzione-Condividi allo stesso modo 2.5 Italia
DettagliSistemi Operativi 1. Mattia Monga. 7 marzo Dip. di Informatica e Comunicazione Università degli Studi di Milano, Italia
1 Dip. di Informatica e Comunicazione Università degli Studi di Milano, Italia mattia.monga@unimi.it 7 marzo 2008 1 c 2008 M. Monga. Creative Commons Attribuzione-Condividi allo stesso modo 2.5 Italia
DettagliSistemi Operativi T. Esercizi
Sistemi Operativi T Esercizi Esercizio monitor Si consideri la toilette di un ristorante. La toilette è unica per uomini e donne. Utilizzando la libreria pthread, si realizzi un'applicazione concorrente
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 12 Martedì 14-11-2017 System call per l'uso dei segnali Un processo che
DettagliIn generale può essere utile che i due processi eseguano del codice diverso
System call FORK P fork() ha l aspetto di una funzione C, in realtà è una system call, una chiamata al sistema operativo fork() P P Il processo P' è una copia di P esegue lo stesso codice e possiede una
DettagliINTERPROCESS COMMUNICATION 27
INTERPROCESS COMMUNICATION 27 - Le comunicazioni tra processi (IPC, Intreprocess Communication) sono realizzate mediante strutture dati rese disponibili dal kernel. Sono disponibili 3 tipologie di comunicazioni
DettagliSistemi Operativi (M. Cesati)
Sistemi Operativi (M. Cesati) Compito scritto del 7 settembre 2016 (Traccia A) Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine
DettagliÎ Modello ad Ambiente Locale P1 P1. File System P2 P2 P3 P3. Processi in UNIX. Modello di Processo in UNIX
Processi in UNIX Spazio di sistema (residente) Modello di Processo in UNIX 1 Tabella dei processi i PROCESS CODE Tabella dei codici Tabella dei file APERTI OPEN FILE ACTIVE FILE Tabella dei file ATTIVI
DettagliEsercitazione sui segnali
Esercitazione sui segnali Problema: creare un programma analizzatore di file testuali che prenda come argomenti il nome di un file e una sequenza di stringhe. Per ognuna delle stringhe deve venire generato
DettagliSISTEMI OPERATIVI. Struttura dei. Sistemi Operativi. Giorgio Giacinto 2015
SISTEMI OPERATIVI Struttura dei Sistemi Operativi 2 Panoramica dei servizi del sistema operativo 3 4 Cos è una chiamata al sistema?» Il SO mette a disposizione i suoi servizi ai programmi utente attraverso
Dettagli