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



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

CREAZIONE PROCESSI IN UNIX 20

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

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

Programmazione multiprocesso

Chiamate di sistema per la Gestione dei processi in POSIX. E.Mumolo, DEEI

Elementi di Architettura e Sistemi Operativi

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

Capitolo 3 -- Silberschatz

Sistemi Operativi. Des crizione e controllo dei proces s i

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

Gestione dei processi

Processi in Linux. Igino Corona 20 Ottobre 2009

SISTEMI OPERATIVI. Processi in Linux. Giorgio Giacinto Sistemi Operativi

ESERCIZI DI PROGRAMMAZIONE C IN AMBIENTE UNIX

System Call EXEC EXEC P P. fork exec(new_prog) fork. sono_il_padre = fork(); if (!sono_il_padre) {

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

Esercizio sulla gestione di file in Unix

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

Inter Process Communication. Laboratorio Software C. Brandolese

Gestione dei processi

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

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

Laboratorio di Sistemi Operativi

Codifica: dal diagramma a blocchi al linguaggio C++

Addendum alle chiamate di sistema per la gestione processi. E Mumolo

GESTIONE INFORMATICA DEI DATI AZIENDALI

Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio

Sistemi Operativi. Descrizione e controllo dei processi

SISTEMI&OPERATIVI& AA&2013&0&2014& Processi( in(linux( Giorgio&Giacinto&2013& Sistemi&Opera?vi&

Pag. 1. modello di esecuzione parallela

L ambiente di simulazione SPIM

System call per la gestione di processi

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

System call per la gestione di processi

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

I puntatori e l allocazione dinamica di memoria

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

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C

Laboratorio di Sistemi Operativi Marzo-Giugno 2008 matricole congrue 0 mod 3

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

Linguaggio C - Funzioni

Sistemi Operativi 1. Lezione III: Concetti fondamentali. Mattia Monga. 7 marzo 2008

Sistemi Operativi 1. Mattia Monga. 7 marzo Dip. di Informatica e Comunicazione Università degli Studi di Milano, Italia

Una funzione è detta ricorsiva se chiama, direttamente o indirettamente, se stessa. In C tutte le funzioni possono essere usate ricorsivamente.

Cos è una stringa (1) Stringhe. Leggere e scrivere stringhe (1) Cos è una stringa (2) DD Cap. 8 pp KP Cap. 6 pp

MAGAZZINO.CPP January 2, 2008 Page 1

Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria Elettronica. SISTEMI OPERATIVI A.A. 2004/2005 Docente: Giorgio Giacinto

Corso di Programmazione Concorrente Processi. Valter Crescenzi

eseguire comandi dati dall'utente, utilizzando una macchina reale, di livello inferiore,

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

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Sistemi Operativi (modulo di Informatica II) I processi

2. I THREAD. 2.1 Introduzione

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

Gestione dei File in C

Il simulatore SPIM SPIM

Introduzione al linguaggio C Gli array

Sistemi Operativi (M. Cesati)

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

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

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

I Processi nel SO UNIX

I SISTEMI OPERATIVI (1)

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

RICORSIONE - schema ricorsivo (o induttivo) si esegue l'azione S, su un insieme di dati D, mediante eventuale esecuzione di

I Processi nel SO UNIX

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

Sistemi Operativi. Marzo-Giugno 2011 matricole congrue 0 mod 3. Controllo dei processi - I

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

I Processi nel SO UNIX

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

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

Il processo figlio : utilizza lo stesso codice che sta eseguendo il padre ;

Controllo dei Processi 1

Processi in Linux. Stru/ura file eseguibili

void funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }

Concetto di Processo Scheduling dei Processi Operazioni sui Processi Processi cooperanti Comunicazione tra processi

La creazione di un nuovo processo in UNIX

Il sistema operativo LINUX Indice

" &$ () " ) ) $ ' () *) " ) $

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

Chiamate di sistema per la Inter Process Communication (IPC) in POSIX. E.Mumolo, DEEI

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 5 di Giovedì 15 Luglio 2010 tempo a disposizione 2h30'

Esercizi di programmazione in C

I Processi nel Sistema Operativo Unix

Politecnico di Torino

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

CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 4

case 0: /* child 1 - writing end */ close(fd[0]); // close read end write(fd[1], string, (strlen(string)+1));/* +1 is termination \0 */ return (0);

Dynamic Linking. Introduzione Creazione di una libreria dinamica Uso di una libreria dinamica

Allocazione dinamica della memoria - riepilogo

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

PROGRAMMI LINGUAGGIO C

Controllo dei Processi. M. R. Guarracino - Primitive di Controllo dei Processi

Funzioni. Il modello console. Interfaccia in modalità console

La struttura dati ad albero binario

Arduino: Programmazione

Transcript:

Le system call: fork(), wait(), exit() Di seguito viene mostrato un programma che fa uso di puntatori a funzione, nel quale si mette in evidenza il loro utilizzo. Programma A1 #include <signal.h> int add(a,b,c) int a; int b; int c; return (a+b+c); int molt(a,b) int a; int b; return a*b; int (*fp)(); int ris; ris = add(5,4,2); printf( il risultato dell addizione: %d\n, ris); ris = molt(2,13); printf( il risultato della moltiplicazione: %d\n, ris); fp = add; ris = fp(5,4,2); printf( il risultato dell addizione: %d\n, ris); fp = molt; ris = fp(2,13); printf( il risultato della moltiplicazione: %d\n, ris); M.Aprea 1

Di seguito viene mostrato un programma che accede all environment di un processo. Si evidenzia la alterazione della variabile environ[0]. questa modifica ha effetto solo all interno del proramma e non nell environment oriinario che, pertanto, permane inalterato. Programma A2 extern char **environ; int i; environ[0] = ulisse=5 ; for (i=0;environ[i]!= NULL; i++) printf( %s\n, environ[i]); getchar(); system( env ); exit(0); M.Aprea 2

Di seguito un programma che utilizza la fork per duplicare i processi. Si noti come dopo la fork il processo parent viene clonato nel processo figlio che eredita dal parent i quattro segmenti di un processo che sono: 1. data segment, 2. stack segment, 3. code segment, 4. environment Programma A3 int a; char b; a = 1; if (fork() == 0) printf( sono nel processo child\n ); printf( sono nel processo child\n ); printf( sono nel processo child\n ); exit(1); printf( sono nel processo parent\n ); while (a =1) b = getchar(); exit(2); M.Aprea 3

Il programma che segue mostra l utilizzo della fork che va in esecuzione solo se il dato in input e positivo. Percio la clonazione avviene solo in quest ultimo caso. Di rilievo l utilizzo della wait che inserita nel parent serve a sincronizzare child e parent. Essa blocca il parent nell attesa che finisca il child. Quando quest ultimo finisce essa lo cancella dalla memoria centrale dopo di che il parent va ad eseguire l istruzione successiva. Programma A4 #include <sys/types.h> int status; int pid, child_pid; in dato; printf( inserisci dato\n ); scanf( %d, &dato); if (dato > 0) printf( ulisse\n ); pid = fork(); printf( %d\n, pid); printf( ulisse\n ); printf( il dato introdorro e neativo\n ); child_pid = wait(&status); M.Aprea 4

Il proramma mostra come si implementa il ciclo principale di una shell. In sostanza si tratta di un ciclo continuo all interno del quale si visualizza il prompt e si lee la strina da input, dopo di che si biforca per eseguire, con la exec, il comando costituito dalla stringa, si attende l esecuzione del child e si ritorna al parent. Programma A5 #include <string.h> char *comando; int pid; system( clear ); fflush(stdin); comando = malloc(sizeof(char*)); while(1) printf( prompt : ); gets(comando); pid = fork(); if (pid == 0) eseclp(comando, comando, NULL); exit(); pid = wait(null); M.Aprea 5

Il programma utilizza una fork all interno di una funzione: la funzione restituisce due processi. Percio, dopo partorisci( maschio ) vi sono due processi, dopo partorisci( femmina ) vi sono quattro processi, dopo partorisci( ermafrodita ) vi sono otto processi. Programma A6 int partorisci(sesso) char ]sesso; if (fork() == 0) printf( \nil figlio e : %s, sesso); ; wait(null); printf(\nsono prima della fork ); partorisci( maschio ); printf( \nsono dopo la prima fork ); printf( \nsono prima della seconda fork ); partorisci( femmina ); printf( \nsono dopo la seconda fork ); printf( \nsono prima della terza fork ); partorisci( un ermafrodita ); printf( \nsono dopo la terza fork ); M.Aprea 6

Il proramma mostra come con la fork si possa generare due processi fratelli. Programma A7 int pid1, pid2, i; pid1 = fork(); /* GENERAZIONE DEL PRIMO FIGLIO */ if (pid1 == 0) /* SONO NEL PRIMO FIGLIO */ for (i01;i<=200;i++) /* CICLO DI SINCRONIZZAZIONE */ printf( SONO NEL FRATELLO 1 \n ); exit(1); /* SONO NEL SECONDO FIGLIO */ pid2 = fork(); /* GENERAZIONE DEL SECONDO FIGLIO */ if (pid2 == 0) for (i=1; i<=200;i++) /* CICLO DI SINCRONIZZAZIONE */ printf( SONO NEL FRATELLO 2 \n ); exit(2); /* SONO NEL PADRE */ wait(null); wait(null); printf( SONO NEL PADRE \n\n ); M.Aprea 7