• Non ci sono risultati.

M od e ll o d i P ro cess o in UN IX

N/A
N/A
Protected

Academic year: 2021

Condividi "M od e ll o d i P ro cess o in UN IX"

Copied!
10
0
0

Testo completo

(1)

Unix: Gestione dei Processi1

C o rs o d i Fond a m e n ti d i I n fo rm a tica 2 C dL Ing e gn e ri a In fo rm a tica Ing . F ra n c o Z a m bon e lli

IL S IS T E M A O PE RA T IV O UN IX : G ES T IO N E D E I P R O C ESS I

Lu c id i R ea li zz a ti i n C o ll a bo ra z ion e c on :

Prof. Letizia LeonardiUniversità di Modena

Prof. Antonio CorradiUniversità di Bologna

Prof. Cesare StefanelliUniversità di Ferrara

Unix: Gestione dei Processi2

M od e ll o d i P ro cess o in UN IX

Ogni processo ha un proprio spazio di indirizzamentocompletamente locale e non condiviso

M ode ll o ad A m b ien te Loca le

Eccezioni:

• il

codice può essere condiviso

• il

file system rappresenta un ambiente condiviso

P 1 P 1

F ile S y st em P 2 P 2

P 3 P 3

(2)

Unix: Gestione dei Processi3

S ta ti i n te rn i po ss ib ili d i un p ro cess o UN IX

IDLEstato inizialeREADYpronto per l’esecuzioneRUNNINGin esecuzioneSWAPPEDimmagine copiata su disco

IDLESLEEPING READYRUNNING

SWAPPED TERMINATED

ZOMBIE

SLEEPINGattesa di un evento per proseguireTERMINATEDterminatoZOMBIEterminato ma ancora presente

Unix: Gestione dei Processi4

A tt ri bu ti d i un P ro cess o UN IX

p

id(process identifier)•

pp

id(parent process identifier)•

pg

id(process group id )

Un processo è lanciato da un utente, informazione di cui sitiene traccia in:•

real uid (real user identifier) processo. che corrispondono allo uid e gid dell’utente che ha lanciato il real user gid (real user group identifier)

Altre informazioni:•

environment (stringhe nome=valore)

current working directory

dimensione massima dei file creabili

m

aschera dei segnali

c

ontrolling terminal

p

riorità processo (nice)

(3)

Unix: Gestione dei Processi5

P ri m it ive p e r la G es tion e d e i P ro cess i

C rea z ion e

FORK pid =

f o rk

( );pid_t pid;

Un processo ne genera un altro  2 processi concorrentie indipendenti:- il parent (processo padre), quello originario- il child (processo figlio), quello generato.

Processo Padre

...

printf(prima\n);

fork();

printf(dopo\n);

... Processo Padre

...

printf(prima\n);

fork();

printf(dopo\n);

...

Processo Padre

...

printf(prima\n);

fork();

printf(dopo\n);

... Processo Padre

...

printf(prima\n);

fork();

printf(dopo\n);

... Processo Figlio

...

printf(prima\n);

fork();

printf(dopo\n);

... Processo Figlio

...

printf(prima\n);

fork();

printf(dopo\n);

... PC

PCPC Prima fork

Dopo fork

Unix: Gestione dei Processi6

E ff e tt i d e ll a F O RK

1. crea un nuovo processo2. duplica i dati e stack sia parte utente sia parte kernel;3. stesso codice per padre e figlio

fork restituisce l'identificatore del processo creato (PID)al padrein caso di errore la fork restituisce al padre il valore -1 (limite al numero max di processi per utente e per sistema)

Figlio eredita tutti attributi del processo padre, unichedifferenze tra i due processi:

• fork restituisce zero nel figlio, il pid del figlio nel padre

• il pid del figlio è diverso da quello del padre

il pid del padre è diverso

NB. variabili e puntatori del padre sono copiati e non vengono condivisi da padre e figlio ma duplicati.

(4)

Unix: Gestione dei Processi7

E sec u z ion i d iff e re n z ia te de l pad re e de l fig lio

...if(fork()==0) {... /* codice eseguito dal figlio*/ ...} else {.../* codice eseguito dal padre*/ ...}

Dopo la generazione del figlio il padre può deciderese operare contemporaneamente ad essooppurese attendere la sua terminazione (wait)

Unix: Gestione dei Processi8

E sec u z ion e d i un P rog ra mm a (

primitiva EXEC)

exec trasforma il processo chiamante caricando unnuovo programma nel suo spazio di memoria

N

ON si prevede di tornare al programma chiamante.

exec

non produce nuovi processi ma soloil cambiamento dell'ambiente del processo interessato,sia come codice, sia come dati.

Sono disponibili molte funzioni della famiglia exec:

execl, execle, execlp, execv, execve, execvp

p

la funzione prende un nome di file come argomento elo cerca nei direttori specificati in PATH;l la funzione riceve una lista di argomenti (NULLterminata);vla funzione riceve un vettore argv[];e

la funzione riceve anche un vettore envp[] invece diutlizzare l’environment corrente.

(5)

Unix: Gestione dei Processi9

A lc un i ese m p i d i exec

EXE C l ex ec l

(path, arg0, arg1, ..., argn, (char *) 0);char *path, *arg0, *arg1, ..., *argn;/* path è un pathname, assoluto o relativo*//* arg0 è il nome del file, seguono argomenti*/

EXE C VE ex ec v e

(path, argv, envp);char *path, *argv[], *envp[];

Il nuovo file può essere un file eseguibile o un file di dati perun interprete shell.

Nota: In alcuni sistemi operativi, solo una exec (execve) èuna system call, le altre sono chiamate di libreria cheinvocano la execve.

Unix: Gestione dei Processi10

U tili zz o d e ll a p ri m it iva exec

(differenziare comportamento del padre da quello del figlio)

pid = fork();

if (pid == 0){ /* figlio*/printf("Figlio: esecuzione di ls\n");execl("/bin/ls", "ls", "-l", (char *)0);perror("Errore in execl\n");exit(1);}

if (pid > 0){ /* padre*/...printf("Padre ....\n");exit(0);}

if (pid < 0){ /* fork fallita*/perror("Errore in fork\n");exit(1);}

Il figlio esegue immediatamente unaexece passa aeseguire un altro programmasi carica il nuovo codice, i nuovi dati e tutto lo stato delnuovo programma

Si noti che il figlio non ritorna alsuo stato precedente (GO TO)

(6)

Unix: Gestione dei Processi11

C a ra tt e ri s tic h e d e l p ro cess o dopo exec

Ci sono alcuni attributi che il processo che esegue l’execmantiene:

• p

id•

pa

rent pid•

• process gid

session id

• r

eal uid•

real user gid

• file mode creation mask•

• current working directory

root directory

• m

aschera dei segnali•

controlling terminal

• fd

:i file descriptor sono conservati MAogni descrittore di file aperto ha un flag close-on-exec,il default è tenerlo aperto (cambiabile con fcntl())

• C

osa succede all’effective uid ?

Unix: Gestione dei Processi12

S in c ron izz a z ion e tr a pad re e fig lio

WAIT pid= wait (&status);int status;

...

if ((pid = fork()) == 0) {.../* codice eseguito dal figlio*/ ...} else {... /* codice eseguito dal padre*/...wait(&status);

In caso di più figli while (rid = wait (&status) != pid);

Operazione di wait

Quando un processo termina, il nucleo notifica laterminazione al processo padre (mandandogli un segnale).

Il padre riceve lo stato di uscita del figlio invocando la wait.

Il processo padre che esegue la wait:

si sospende se nessun processo figlio è terminato non

si sospende se almeno un processo figlio èterminato (zombie)

(7)

Unix: Gestione dei Processi13 Esempio di uso della WAIT/* il figlio scrive su un file; il padre torna all'inizio e legge */#include <stdio.h>#include <fcntl.h>

int procfile (f1)char *f1; /* file di comunicazione */{int nread, nwrite = 0, atteso, status, fd, pid;char *st1 = " ", st2 [80];

if (fd = open (f1, O_RDWR | O_CREAT, 0644)<0) {perror("open"); exit(1); }

if ((pid = fork()) < 0) {perror("fork"); exit(1);}

if (pid == 0) { /* FIGLIO */scanf ("%s", st1);nwrite = write (fd, st1, strlen(st1));exit (0);}

else { /* PADRE */atteso = wait (&status); /* attesa del figlio */lseek (fd, 0L, 0);nread = read (fd, st2, 80);printf ("Il padre ha letto la stringa %s\n", st2);close (fd);return (0); }}

main (argc, argv) ... { int integi;integi = procfile (file1);exit (integi);}

Unix: Gestione dei Processi14

T e rm in a z ion e d i un p ro cess o

modo volontariomodoforzato

VOLONTARIO- operazione primitiva "exit" o- alla conclusione del programma main;

EX IT

void

ex it

(status);int status;

c

hiude tutti i file aperti del processo che termina•

• altre azioni tipo scarico buffer standard I/O library attende il processo che termina (esegue cioè la wait() ) status viene passato al processo padre, se questo

FORZATOa seguito di:- azioni non consentite(come riferimenti a indirizziscorretti o tentativi di eseguire codici di operazioni nondefinite, che generano segnali “sincroni”)- segnali generati dall'utenteda tastiera e ricevuti dalprocesso, oppure- segnali spediti da un altro processo tramite la systemcall kill.

(8)

Unix: Gestione dei Processi15

P a re n te la P ro cess i e T e rm in a z ion e

T e rm in a z ion e d e l P a d re

P ad re P ad re

F ig li o F ig li o In it

pid=1

In it

pid=1

In it er ed it a il F ig lio

ppid figlio =1

T e rm in a z ion e d e l F ig li o : P ro cess i Zo m b ie

P ad re P ad re F ig lio F ig lio Z o m b ie Z o m b ie A tt es a d el la w ait d el p ad re

Unix: Gestione dei Processi16

ESE RC IZ IO (esec u z ion e d i c o m a nd i)

#include <stdio.h>

main (argc, argv) {int stato, atteso, pid;char st[80];

for (;;) {if ((pid = fork()) < 0) {perror("fork"); exit(1);}

if (pid == 0) { /* FIGLIO: esegue i comandi */printf("inserire il comando da eseguire:\n");scanf ("%s", st);

execlp(st, (char *)0);perror("errore");exit (0);

} else { /* PADRE */atteso=wait (&stato); /*attesa figlio: sincronizzazione */printf ("eseguire altro comando? (si/no) \n");scanf ("%s", st);if (strcmp(st, "si") exit(0);}}}

(9)

Unix: Gestione dei Processi17

G es tion e d e g li e rr o ri

In caso di fallimento, le System Call ritornano -1

In più, UNIX assegna alla variabile globale errno il codice dierrore occorso alla system call

/usr/include/sys/errno.h per le corrispondenze codici dierrori e loro descrizione

(definire extern int errno nel programma)

perror()

routine utilizzata nella gestione degli errori, stampa (sustandard error) una stringa definita dall’utente, seguitadalla descrizione dell’errno avvenuto

Esempio:

perror(“stringa descrittiva”);

può stamparestringa descrittiva: No such file or directory

Unix: Gestione dei Processi18

I g rupp i d i p rocess i

Tutti i processi UNIX sono identificati dal pid eappartengono a un gruppo (identificato da pgid)

L’insieme di processi appartenenti a uno stesso gruppo èdetto anche job

esempio:cesare lia00 ~/ 10>P1 | P2 | P3

P1P1P2P2

P3P3 processgroup (job)

leaderpid=pgid pid pgid

pid pgid≠ ≠

In un gruppo di processi c’è un solo group leader,che ha pid = pgidUso dei gruppi di processi :•

se

gnali mandati a tutti i processi in un gruppo(es. segnali da terminale)•

shell con job control

G rupp i d i p ro ce ss i i n fo re g round (r ice vono inpu t d a ta sti er a e se gn ali , es . il ct rl- C ) e in b ac kg round .

(10)

Unix: Gestione dei Processi19

I F il e e la p ri m it iva F O RK

variabili e puntatori del processo padre sono copiati e non vengono condivisi da padre e figlio ma duplicati.

I fd vengono duplicati

 I file aperti dal processo padresono aperti anche per il figlio

Attenzione: in questo caso, ogni puntatore a file (I/Opointer) è condiviso tra padre e figlio.

I/O pointer si sposta per entrambi in seguito a letture oscritture eseguite dal padre o dal figlio.

Riferimenti

Documenti correlati

SCHEDA 1: PROGRAM,MA TRIENNALE DELLE OPERE PUBBLICHE 2017/2019 DELL'AMMINISTRAZIONE COMUNALE DI SAN GIMIGNANO (SI) QUADRO DELLE RISORSE DISPONIBILI Arco temporale di validità

al ritiro, per proprio ordine e conto, dell’Abbonamento annuale “Mi Muovo Insieme” a tariffa agevolata anno 2018.. Allo scopo allega fotocopia di un proprio documento di identità

•Proprietà3 (di internalità): La media geometrica èsempre compresa tra il minimo e il massimo della distribuzione kgxxx≤≤1 •Proprietà4 (invarianza rispetto a cambiamenti

Il comma 13 prevede, anzitutto, alla lettera a), che, limitatamente ai debiti definibili ricompresi nella dichiarazione di adesione, alla data del 31 tuglio 2019, le

- la realizzazione di attività di informazione e di comunicazione previste nel documento concernente linee guida per una corretta comunicazione del rischio in

con una maggiore attenzione agli Affari Europei e per stimolare il dibattito su temi di politica europea 2008: lancio di bandi di gara il rinnovo degli Europe Direct Point

Gestione indiretta: 2014-2020 Investimenti in favore della crescita e dell'occupazione Articolazione differenziata in relazione a 3 diverse categorie di regioni Regioni meno

La giurisprudenza ha poi precisato che in tema di accertamento del diritto ad ottenere una misura di protezione internazionale, il giudice non può formare il proprio