Programmazione multiprocesso



Похожие документы
Chiamate di sistema per la Gestione dei processi in POSIX. E.Mumolo, DEEI

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

Gestione dei processi

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

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

Gestione dei processi

System call per la gestione di processi

LABORATORIO DI SISTEMI OPERATIVI

Corso di Programmazione Concorrente Processi. Valter Crescenzi

Processi in Linux. Igino Corona 20 Ottobre 2009

CREAZIONE PROCESSI IN UNIX 20

Sistemi Operativi. Des crizione e controllo dei proces s i

I Processi nel Sistema Operativo Unix. Gerarchie di processi Unix. Stati di un processo Unix. Stati di un processo Unix.

Concetto di processo. Processi. Immagine in memoria di un processo. Stati di un processo. Un SO esegue una varietà di attività:

Capitolo 3 -- Silberschatz

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

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

Sistemi Operativi (modulo di Informatica II) I processi

Modello dei processi. Riedizione delle slide della Prof. Di Stefano

Sistemi Operativi. Descrizione e controllo dei processi

Programmazione di sistema in Linux: System Call per il controllo processi. E. Mumolo, DIA

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

Il Concetto di Processo

I Processi nel Sistema Operativo Unix

Î Modello ad Ambiente Locale P1 P1. File System P2 P2 P3 P3. Processi in UNIX. Modello di Processo in UNIX

Sistemi Operativi. Esercitazione 2 Compilazione, Makefile e Processi

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

Elementi di Architettura e Sistemi Operativi

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

Inter Process Communication. Laboratorio Software C. Brandolese

Sistemi Operativi. Processi GESTIONE DEI PROCESSI. Concetto di Processo. Scheduling di Processi. Operazioni su Processi. Processi Cooperanti

SISTEMI OPERATIVI. I processi. Prof. Luca Gherardi Prof.ssa Patrizia Scandurra (anni precedenti) (MODULO DI INFORMATICA II)

Lezione 5. Processi e thread. Sistemi operativi. Marco Cesati System Programming Research Group Università degli Studi di Roma Tor Vergata

Corso di Laboratorio di Sistemi Operativi

CAP. 6: Nucleo del sistema operativo (La gestione dei processi)

I puntatori e l allocazione dinamica di memoria

Processi. Laboratorio Software C. Brandolese

2. I THREAD. 2.1 Introduzione

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

I SISTEMI OPERATIVI (1)

Processi: Exit, Wait, Exec

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

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

Programmazione di Sistema 3

ESERCIZI DI PROGRAMMAZIONE C IN AMBIENTE UNIX

Esercitazione n. 8. Processi

Definizione Parte del software che gestisce I programmi applicativi L interfaccia tra il calcolatore e i programmi applicativi Le funzionalità di base

Program m azione di Sistem a 3

GESTIONE DEI PROCESSI

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

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

Introduzione alla programmazione in C

Sistemi Operativi. 3 LEZIONE PROCESSI CORSO DI LAUREA TRIENNALE IN INFORMATICA. Sistemi Operativi 2007/08

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

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

Транскрипт:

DTI / ISIN / Titolo principale della presentazione 1 Programmazione multiprocesso Amos Brocco, Ricercatore, DTI / ISIN 20 febbraio 2012

2 Processi Cos'è un processo? Un programma in esecuzione Spazio di memoria Codice macchina (text) Dati Stack Heap Puntatori a Registri Program Counter Descrittori di file PID Stato (in esecuzione, bloccato,...)... Descrittore di processo (Process Control Block, PCB)

3 Sistemi multiprogrammati Sistemi multiprogrammati più processi contemporaneamente in memoria Il kernel mantiene una tabella dei processi (process table) con le informazioni necessarie all'esecuzione di ogni processo (process control block) Esecuzione: Pseudo parallelismo (time sharing, CPU singola) Vero parallelismo (multi-core, multi-processore)

4 Sistemi multiprogrammati A. Tanenbaum, Modern Operating Systems, 2nd ed.

5 Spazio di indirizzamento di un processo Stack Heap Data Text

6 Organizzazione dei processi Il sistema operativo (kernel) identifica univocamente ogni processo tramite un PID (process identifier) Il PID è assegnato alla creazione del processo

7 getpid La funzione getpid permette di ottenere il pid assegnato al processo corrente #include <unistd.h> pid_t getpid(void);

8 Creare processi in Unix: fork #include <unistd.h> pid_t fork(void); 1. Crea un nuovo spazio privato in memoria per il figlio 2. Crea una nuovo descrittore di processo per il figlio ( nuovo PID) 3. Copia lo spazio di memoria del padre in quello del figlio 4. Valore di ritorno: Al padre: ritorna il PID del figlio Al figlio: ritorna 0 Se il fork fallisce: ritorna -1

9 Creare processi in Unix: fork Stack Processo padre Heap Data Text Viene creato un nuovo spazio di indirizzamento (copia di quello del padre) Stack Heap Data Text Processo figlio fork

10 Esempio fork #include <unistd.h> pid_t cpid; cpid = fork(); if (cpid == (pid_t) -1) { printf( Errore!\n ); } else if (cpid == 0) { printf( Sono il figlio\n ); } else { } printf( Sono il padre\n );

11 Gerarchia di processi Con fork viene creata una gerarchia di processi In cima all'albero c'è il processo init (PID=1) Un processo può determinare il PID del padre con getppid (get parent pid) #include <unistd.h> pid_t getppid(void);

12 Eseguire un altro programma: Exec #include <unistd.h> int execl(const char *path, const char*arg0,...); int execlp(const char *file, const char *arg0,...);... Sostituisce i segmenti Text e Data del processo con quanto caricato dal file del programma specificato Esistono diverse varianti di exec (cf. man exec)

13 Exec Stack Processo padre Heap Data Text Viene creato un nuovo spazio di indirizzamento (copia di quello del padre) Stack Heap Data Text Processo figlio fork I segmenti Text e Data vengono sostituiti Stack Heap Data Text exec

14 Terminare un processo Un processo termina quando return viene invocato dalla procedura main viene invocata la procedura exit(int) Il valore di ritorno/uscita può essere letto dal processo padre #include <stdlib.h> void exit(int status);

15 Attendere il valore di uscita di un processo figlio: Wait / Waitpid Il processo padre aspetta la terminazione dei processi figli e ottiene lo stato di uscita con le funzioni wait e waitpid #include <sys/types.h> #include <sys/wait.h> pid_t wait(int *status); pid_t waitpid(pid_t pid, int *status, int options); * La terminazione è segnalata con SIGCHLD

16 waitpid Stack Processo padre Heap Data Text Stack cpid = fork() Heap Data Text Processo figlio exit(1) waitpid(cpid,&sts);

17 Esempio waitpid #include <unistd.h> #include <wait.h> pid_t cpid; int sts; int main(void) { if (cpid = fork()) { waitpid(cpid, &sts, 0); printf( Figlio uscito con %d\n, WEXITSTATUS(sts)); } else if (cpid == 0) { printf( Sono il figlio\n ); exit(1); } }

18 Processi zombie Quando il sotto-processo figlio termina è necessario che il padre sia in attesa con wait o waitpid Fintanto che il padre non attende, il figlio rimane nello stato zombie (o defunct) e non può essere rimosso dal sistema Quando il padre termina il figlio viene rimosso Se il padre termina prima del figlio, il sotto-processo viene ereditato da init

19 Processi zombie Stack Processo padre Heap Data Text Stack cpid = fork() Heap Data Text Processo figlio exit(0) Il figlio è nello stato di zombie waitpid(cpid,&sts);

20 Login e sessioni sessione login login login

21 Sessioni Quando un utente si collega al sistema il processo di login crea una nuova sessione Ogni sessione ha un proprio identificatore (SID, Session ID) Tutti i sottoprocessi ereditano automaticamente l'identificatore di sessione Quando l'utente abbandona il sistema (logout) tutti i processi in esecuzione all'interno della sessione possono essere facilmente identificati e terminati

22 Sessioni Con getsid posso ottenere il SID #include <unistd.h> pid_t getsid(pid_t pid); Dopo un fork, un processo può creare una nuova sessione con setsid #include <unistd.h> pid_t setsid(void);

23 Gruppi di processi La filosofia Unix si basa sull'utilizzo di programmi semplici che possono essere combinati facilmente per svolgere operazioni complesse ls *.txt grep Hello sort head -n 5 Per controllare facilmente tutti i processi creati da questa linea di comando (p.es. per terminarli) è possibile raggrupparli...

24 Gruppi di processi Ogni processo è membro di un gruppo di processi Ogni gruppo è identificato univocamente da un Process Group ID (PGID) Ogni gruppo ha un leader, il cui PID è uguale al PGID del gruppo Ogni gruppo ha associato un terminale di controllo

25 Gruppi di processi Un processo eredita il gruppo dal padre, può conoscere il PGID con getpgid, e può cambiarlo con setpgid #include <unistd.h> pid_t getpgid(pid_t pid); int setpgid(pid_t pid, pid_t pgid); Se pgid è uguale pid o uguale a 0 viene creato un nuovo gruppo, di cui il processo è leader