• Aucun résultat trouvé

L’´ evolution de la notion de processus

N/A
N/A
Protected

Academic year: 2022

Partager "L’´ evolution de la notion de processus"

Copied!
43
0
0

Texte intégral

(1)

Chapitre II : La gestion des ressources Notions fondamentales

Eric.Leclercq@u-bourgogne.fr

epartement IEM

http://ufrsciencestech.u-bourgogne.fr http://ludique.u-bourgogne.fr/~leclercq

February 14, 2008

(2)

Plan

1 La notion de processus La gestion des ressources D´efinitions

La commutation de contexte

2 Implantation du m´ecanisme multitˆaches Multitˆache / multi-utilisateurs Classification des processus

3 Filiation des processus

Modes de lancement des processus Les processus l´egers

Le cycle de vie des processus

4 API thread de Java

5 La communication inter-processus Le diff´erents modes de communication

6 Le partage de ressources entre processus

Notion de processus concurrents, exclusion mutuelle

(3)

La gestion des ressources

Comme nous l’avons vu dans les chapitres pr´ec´edents, une des premi`eres fonctions d’un SE est la gestion des ressources de l’ordinateur.

Nous allons ´etudier dans ce chapitre et les suivants les principes de la gestion :

du processeur

de la m´emoire centrale

des supports de stockage (disques, bandes etc.)

(4)

L’´ evolution de la notion de processus

La notion de processus est bas´ee sur celle de programme Le terme processus apparu dans les ann´ees 60 avec les embryons de syst`eme d’exploitation (moniteurs)

Pr´ehistoire : open shop,closed shop Traitement par lots : batch processing

Apparition des moniteurs permettant de lancer les programmes et de les g´erer : Disk Operating Systems

eveloppement de la multi-programmation puis de son

´

evolution naturelle vers le temps partag´e (time-sharing)

(5)

D´ efinitions

D´efinition : (Processus)

Un processus est un programme en ex´ecution

D´efinition : (SE multitˆaches)

Un syst`eme d’exploitation est dit multitˆaches s’il permet

d’ex´ecuter, apparemment simultan´ement, plusieurs programmes.

Ce fonctionnement est r´ealis´e en alternant rapidement l’ex´ecution de diff´erents processus c’est-`a-dire en effectuant un multiplexage temporel du processeur (chaque processus s’ex´ecute pendant une fraction de seconde)

L’ex´ecution des processus est entremˆel´ee

Par cons´equent, il ne s’agit pas r´eellement d’un traitement simultan´e sauf si la machine `a plusieurs processeurs

(6)

La commutation de contexte

D´efinition : (Commutation de contexte)

Le passage de l’ex´ecution d’un processus `a un autre est appel´e la commutation de contexte.

Lors d’une commutation de contexte, le syst`eme doit sauver l’´etat du processus en cours (le compteur ordinal (Instruction Pointer), les valeurs des registres, etc.) pour les restaurer plus tard.

Deux strat´egies peuvent ˆetre envisag´ees pour la commutation de contexte :

le mode coop´eratif le mode pr´eemptif

(7)

La commutation de contexte

Le multitˆache coop´eratif : chaque processus doit explicitement permettre `a un autre d’acc´eder au processeur

ce m´ecanisme a ´et´e utilis´e dans les SE Microsoft Windows jusqu’`a Windows 3.11 et dans Mac OS jusqu’`a Mac OS 9 cette approche simplifie l’architecture du SE mais pr´esente plusieurs inconv´enients :

si un des processus ne passe pas la main `a un autre processus, le syst`eme entier peut ˆetre bloqu´e ;

le partage des ressources (CPU, m´emoire, disque, etc.) peut ˆ

etre inefficace (IO bound)

(8)

La commutation de contexte

Le multitˆache pr´eemptif : le processeur signale au syst`eme d’exploitation que le processus en cours d’ex´ecution doit ˆetre mis en sommeil pour permettre l’ex´ecution d’un autre processus.

A la diff´` erence du multitˆache coop´eratif, la commutation de contexte est transparente.

D’une fa¸con g´en´erale la strat´egie de commutation choisie `a un impact ´enorme sur l’utilisation des ressources.

Une question subsiste : comment peut-on r´ealiser la commutation de contexte dans le mode pr´eemptif ?

(9)

Gestion des ressources en environnement multitˆ ache

Probl´ematique d’une fa¸con g´en´erale il s’agit d’´etudier comment allouer des ressources aux processus, plus pr´ecisement :

comment identifier les processus ?

comment partager le CPU entre plusieurs processus ? comment restaurer l’´etat de chaque processus ?

comment allouer et g´erer la m´emoire attribu´ee aux processus ? comment g´erer les E/S dans un environnement multitˆaches ?

(10)

Multitˆ ache / multi-utilisateurs

Avec la multi-programmation, plusieurs programmes peuvent ˆ

etre trait´es en mˆeme temps : c-`a-d en cours d’ex´ecution et non termin´es

Ce proc´ed´e permet l’emploi simultan´e de la machine par plusieurs utilisateurs

Grˆace `a ce m´ecanisme chaque utilisateur a l’impression d’avoir la machine pour lui seul

La machine traite alors des processus qui sont chacun la propri´et´e d’utilisateur (humain ou virtuel)

(11)

Classification des processus

Un certain nombre de processus existent aussi longtemps que l’ordinateur est en fonctionnement

Exemple :

la gestion des connexions utilisateur, gestion des disques, le processusinit

A contrario, d’autres processus ont une dur´ee de vie limit´ee Exemple :

le processus de la commandedate n’existe que le temps de la commande

Certain processus ont un acc`es privil´egi´e au SE : propri´et´e de l’administrateur ou d’utilisateurs privil´egi´es

Certain processus sont sous le contrˆole des utilisateurs (user-mode) , d’autre sous le contrˆole du SE (ex´ecution en mode kernel)

(12)

Filiation des processus

De fa¸con g´en´erale le SE alloue un processus pour l’interface utilisateur (un shell par exemple) puis d’autres processus (fils du premier pour chaque commande utilisateur ou pour chaque programme lanc´e `a partir du shell

Ainsi, il se cr´ee une hi´erarchie de processus (p`ere fils) prenant la forme d’un arbre

jaromil ~ # pstree

init-+-adsl-connect---pppd---pppoe

|-6*[agetty]

|-bdflush

|-cron

|-cupsd

|-devfsd

|-gconfd-2

|-gdict-applet

|-gdm---gdm-+-X

| ‘-gnome-session---ssh-agent

|-gnome-netstatus

|-gnome-terminal-+-bash---evolution---evolution---8*[evolution]

| |-bash

| |-bash---ssh

| |-gnome-pty-helpe

| ‘-gnome-terminal---gnome-terminal

|-gweather-applet---gweather-applet---3*[gweather-applet]

(13)

Filiation des processus

Le syst`eme d’exploitation d’une machine personnelle g`ere une centaine de processus, celui d’un serveur plusieurs centaines Il existe une limite maximum fix´ee dans le noyau

Exemple :

pour un SE Linux le fichier concern´e est

include/linux/tasks.h, la variable NR TASKSfixe la limite `a 4096. Dans les noyaux 2.4 la limite est une fonction de la taille m´emoire disponible.

(14)

Les modes de lancement des processus

Un processus donn´e `a trois fa¸cons pour cr´eer un processus fils : clonage : processus parall`ele identique au p`ere mais ind´ependant ;

recouvrement par le fils ;

mise en route d’un processus fils ne comportant que certaines portions du processus parent.

Ces diff´erentes strat´egies permettent de fournir une mani`ere efficace pour organiser l’ex´ecution des applications dans le SE.

La majorit´e des SE multi-tˆaches propose les trois modes de cr´eation Comment sont g´er´ees les interactions p`ere fils et attente de

terminaison ?

(15)

Clonage

(16)

Clonage et communication : strat´ egies

(17)

Exemple de cr´ eation par clonage

L’appel syst`emefork()cr´ee un nouveau processus :

apr`es l’ex´ecution le pointeur d’instruction du fils et du p`ere sont positionn´es sur l’instruction suivante

fork()retourne la valeur 0 au fils

fork()retourne un entier non nul (identifiant du processus fils) au p`ere

Exemple :

id-fils=fork() if (id-fils==0)

traitements relatif au fils else

traitements relatif au p`ere

(18)

Exemple de cr´ eation par clonage

Exemple :

...

pid = fork();

switch(pid) {

case -1: /* erreur dans fork() */

fprintf(stderr,"error %d in fork: %s\n",errno,sys_errlist[errno]);

exit(errno);

case 0: /* on est dans le fils */

fprintf(stdout,"Dans le fils, pid = %d\n",getpid());

sleep(20);

break;

default: /* on est dans le pere */

fprintf(stdout,"Dans le pere, pid = %d\n",getpid());

sleep(20);

(19)

Exemple de cr´ eation par recouvrement

La cr´eation par recouvrement se fait au moyen d’une op´eration de la familleexec

Exemple : ...

printf("Exemple de recouvrement\n");

execve("/bin/ls", argv, envp);

printf("Ne s’affiche pas");

...

(20)

Lancement des processus

Ils existe diff´erent types de processus :

les d´emons(daemon) sont des processus cr´ees par le syst`eme hors contrˆole des utilisateur. Plus g´en´eralement dans les SE Unix, les d´emons

peuvent ˆetre relanc´es automatiquement si ils sont tu´es avoir comme parent direct le processusinit

les zombies : processus sans filiation directe, ne pouvant pas ˆ

etre tu´es

les processus utilisateurs, par exemple : applications, commandes, processus de communication cr´ee `a partir d’un d´emon

Note :

A l’origine le terme daemon signifiait Disk And Execution MONitor` c-`a-d un mini syst`eme d’exploitation pour contrˆoler les disques et l’ex´ecution des programmes.

(21)

Les processus l´ egers (Thread)

Certains SE proposent en plus de la notion de processus, un m´ecanisme de processus l´egers appel´esthread ou fil d’ex´ecution.

Ce m´ecanisme permet :

une cr´eation rapide des processus fils

une communication simplifi´ee entre un processus p`ere et ses enfants

Le processus p`ere et le ou les threads fils partagent la zone de donn´ees du programme.

(22)

Les processus l´ egers (Thread)

Les threads existent dans de nombreux SE : la famille UNIX Windows NT et 2000 WIN 9x et Me

Dans cette derni`ere famille (9x, Me), la notion de processus n’existe pas : les programmes lanc´es depuis l’interface graphique sont des threads.

Ainsi le syst`eme peut ˆetre rendu instable si un programme endommage la zone de m´emoire commune.

(23)

Impl´ ementation des Thread dans Java

La plateforme Java propose une machine virtuelle (MV) Java qui est un environnement d’´ex´ecution permettant d’´ex´ecuter des programmes Java ind´ependament du processeur hˆote et du syst`eme d’exploitation.

Une machine virtuelle r´ealise une abstraction des machines r´eelles : elle propose uninterpr´eteur de byte-code: langage

machine/instructions d’un processeur virtuel traduites dans en instructions pour le processeur r´eel

elle fournit un m´ecanisme d’interaction avec le syst`eme d’exploitation hˆote (Linux, Windows, MACOS X etc.) elle se comporte comme un syst`eme d’exploitation : gestion de la m´emoire dans la MV, gestion des processus l´egers, gestion des E/S

(24)

Impl´ ementation des Thread dans Java

La machine virtuelle est lanc´ee au moyen de la commandejava et elle devient un processus du syst`eme d’exploitation

Programme Java fichiers .class

code objet Chargeur de classes

Interpréteur Java

fichiers .class API Java

Système hôte Processus num X du système Machine virtuelle

(byte code)

traduction du byte code

Les fichiers.classsont les mˆemes quelquesoit le syst`eme d’exploitation : inutile de recompiler un application si on change de SE ou de mat´eriel.

(25)

Les Thread dans Java

Le langage Java propose deux modes de cr´eation des threads via l’h´eritage ou l’impl´ementation d’interface (h´eritage de

fonctionnalit´e) :

1 c l a s s W o r k e r 1 e x t e n d s T h r e a d { 2 p u b l i c v o i d run () {

3 S y s t e m . out . p r i n t l n ( " I Am a W o r k e r T h r e a d " ) ;

4 }

5 }

6

7 c l a s s W o r k e r 2 i m p l e m e n t s R u n n a b l e { 8 p u b l i c v o i d run () {

9 S y s t e m . out . p r i n t l n ( " I Am a W o r k e r T h r e a d " ) ;

10 }

11 } 12

13 p u b l i c c l a s s F i r s t {

14 p u b l i c s t a t i c v o i d m a i n ( S t r i n g a r g s []) { 15 // une p r e m i e r e f o r m e d ’ u t i l i s a t i o n 16 W o r k e r 1 t h r 1 = new W o r k e r 1 () ; 17 t h r 1 . s t a r t () ;

18 S y s t e m . out . p r i n t l n ( " I Am The M a i n T h r e a d " ) ; 19 // une s e c o n d e f o r m e d ’ u t i l i s a t i o n

20 R u n n a b l e r u n n e r = new W o r k e r 2 () ; 21 T h r e a d t h r d = new T h r e a d ( r u n n e r ) ; 22 t h r d . s t a r t () ;

23 }

24 }

(26)

Interaction de la MV avec le SE

1 i m p o r t j a v a . io .*;

2 p u b l i c c l a s s O S P r o c e s s {

3 p u b l i c s t a t i c v o i d m a i n ( S t r i n g [] a r g s ) t h r o w s I O E x c e p t i o n { 4 if ( a r g s . l e n g t h != 1) {

5 S y s t e m . err . p r i n t l n ( " U s a g e : j a v a O S P r o c e s s < command > " ) ; 6 S y s t e m . e x i t (0) ;

7 }

8

9 // a r g s [0] c o r r e s p o n d au p r o c e s s u s `a c r ´e e r ( c o m m a n d e ou p r o g r a m m e ) 10 P r o c e s s B u i l d e r pb = new P r o c e s s B u i l d e r ( a r g s [ 0 ] ) ;

11 P r o c e s s p r o c = pb . s t a r t () ; 12

13 // c r ´e e des f l u x p o u r les E / S

14 I n p u t S t r e a m is = p r o c . g e t I n p u t S t r e a m () ;

15 I n p u t S t r e a m R e a d e r isr = new I n p u t S t r e a m R e a d e r ( is ) ; 16 B u f f e r e d R e a d e r br = new B u f f e r e d R e a d e r ( isr ) ; 17 S t r i n g l i n e ;

18 w h i l e ( ( l i n e = br . r e a d L i n e () ) != n u l l) 19 S y s t e m . out . p r i n t l n ( l i n e ) ;

20 br . c l o s e () ;

21 }

22 }

(27)

Le cycle de vie des processus

Un processus peut avoir trois ´etats principaux : en train d’ˆetre ex´ecut´e : on dit qu’il est actif

en attente d’ˆetre ex´ecut´e : il est prˆet (toutes les ressources dont il a besoin sont disponibles)

bloqu´e : il est en attente de ressources ou d’un signal provenant d’un p´eriph´erique

mort : il n’existe plus et la place qu’il occupe dans le syst`eme va ˆetre lib´er´ee

(28)

Le cycle de vie des processus

(29)

Contrˆ ole des threads

Pour g´erer l’ex´ecution des threads les m´ethodes propos´ees sont : public void start() : permet de d´emarrer un thread, la m´ethode start, lance un nouveau thread dans le syst`eme dont le code `a ex´ecuter d´emarre par le run. Si vous invoquez la m´ethode runle code s’ex´ecute bien, mais aucun nouveau thread n’est lanc´e dans le syst`eme.

public void suspend() : permet d’arrˆeter temporairement un thread en cours d’ex´ecution.

public void resume() : permet de relancer l’ex´ecution d’un thread, au pr´ealable mis en pause viasuspend.

public void stop(): permet de stopper, de mani`ere d´efinitive, l’ex´ecution du thread. Une autre solution pour stopper un thread consiste `a simplement sortir de la m´ethode run.

(30)

Les diff´ erents modes de communication

Le terme IPC (Inter Process Communication) recouvre les modes de communication entre processus `a l’int´erieur du SE ou entre plusieurs SE sur des machines diff´erentes :

communication par message (Message Passing) m´emoire partag´e et buffering (Shared Memory)

appel de proc´edures / m´ethodes (Remote Procedure Call) socket pour les syst`emes distribu´es (chapitre 7)

communiquant via un r´eseau

(31)

Les deux mod` eles principaux de communication

segment partagé a

a a

Noyau Noyau

Processus A Processus A

Processus B

Processus B

(32)

Passage / ´ echange de messages

Deux fonctions de bases sont propos´ees pour la communication entre processus :

send(message) receive(message)

Si les processus P et Q souhaitent s’envoyer des messages un lien de communication est n´ecessaire :

Lien direct : send(P, message) etreceive(Q,message) Lien indirect avec boˆıte aux lettres : send(A, message) et receive(A,message)

Lien synchrone : envoi bloquant ou non, r´eception bloquante ou non

Lien bufferis´e avec file d’attente

(33)

M´ emoire partag´ ee et buffer

Une zone de m´emoire est d´eclar´ee comme partag´ee par un processus et peut ˆetre utilis´ee ensuite comme un moyen de communication entre plusieurs processus.

Les paradigme de coop´eration est le suivant : un processus producteur ´ecrit des informations dans le buffer qui sont consomm´ee par un processeus consommateur.

Le buffer peut ˆetre limit´e (bounded-buffer) ou s’´etendre en fonction des capacit´e m´emoire du syst`eme (unbounded-buffer)

Note :

Lors de l’utilisation de threads, la zone de m´emoire utilis´ee par le parent et partag´ee automatique avec les thread cr´ees.

(34)

M´ emoire partag´ ee et buffer en Java

Producteur Consommateur

Objet Java BoundedBuffer

référence référence

1 p u b l i c i n t e r f a c e B u f f e r { 2

3 // les p r o d u c t e u r s u t i l i s e r o n t c e t t e m ´e t h o d e 4 p u b l i c a b s t r a c t v o i d i n s e r t ( O b j e c t i t e m ) ; 5

6 // les c o n s o m m a t e u r s u t i l i s e r o n t c e t t e m ´e t h o d e 7 p u b l i c a b s t r a c t O b j e c t R e m o v e () ;

8 }

(35)

Appel de proc´ edure (RPC)

Ce m´ecanisme est essentiellement utilis´e pour des communications au travers d’un r´eseau.

On parle alors de RPC (Remote Procedure Call).

Un syst`eme similaire est propos´e pour les langages orient´es objet (Java RMI pour la langage Java).

Hors du domaine couvert par le cours de L2.

(36)

La notion de processus concurrents

D´efinition : (Ressource)

La notion de ressource dans les SE d´esigne tout ´el´ement qui est utile au d´eroulement d’un processus

Une ressource peut ˆetre :

Physique (si on se place du point de vue du syst`eme d’exploitation) : processeur, m´emoire, p´eriph´erique

Logique (si on se place du point de vue du programmeur) : fichier, variable, objet

(37)

La notion de processus concurrents

Plusieurs processus peuvent avoir besoin des mˆemes ressources.

D´efinition :

une ressource est dite partageable si elle peut ˆetre utilis´ee en mˆeme temps `a plusieurs processus. Une ressource est dite non partageable si elle doit ˆetre `a utilis´ee exclusivement par un seul processus.

Dans ce cas on dit que lesprocessus doivent ˆetre exclusion mutuellepour l’acc`es `a la ressource.

(38)

La notion verrouillage

Lorsqu’une ressource est partag´ee, si plusieurs processus acc`edent

`a la ressource, des incoh´erences peuvent en r´esulter : il faut un arbitre

Exemple :

des guichets automatiques de retrait d’argent : simulation du comportement

Comment ´eviter les situation de comp´etition sur des ressources non partageable ?

interdire l’acc`es partag´e `a la ressource : exclusion mutuelle interdire l’ex´ecution simultan´ee du cod´e acc´edant `a la ressource : section critique

(39)

La notion verrouillage

Pour r´esoudre ce probl`eme on utilise la notion de verrou (lock) deux op´erations sont propos´ees :

Verouiller(v)permet `a un processus d’acqu´erir un verrou, s’il n’est pas disponible, le processus est bloqu´e en attente du verrou

D´everouiller(v) permet de lib´erer un verrou

(40)

Les s´ emaphores

Les s´emaphores (Dijkstra 1965) proposent un m´ecanisme de contrˆole de la concurrence sous la forme d’un distributeur de jeton (n jetons).

Deux op´erations sont d´efinies : P(s) obtenir un jeton V(s) restituer un jeton

Si il y a un seul jeton alors le s´emaphore est un verrou.

(41)

Les moniteurs

Hoare (1974) `a propos´e une solution de plus haut niveau bas´ee sur le concept de moniteur.

il s’agit d’une construction sp´ecifique au langage de programmation ;

un seul processus `a la fois peut ex´ecuter une fonction du moniteur ;

les moniteur sont implant´es dans le langage Java via la notion de m´ethodes. d´efiniessynchronized

(42)

Probl` eme des verrous mortels

Le probl`eme des verrous mortels traduit une situation

d’interblocage caus´e par l’acc`es `a une ressource non partageable.

On parle ´egalement d’´etreinte fatale.

...

Verouiller(R1) Verouiller(R2) utiliser R1 et R2 Déverouiller(R2) Déverouiller(R1) 1

...

Verouiller(R2) Verouiller(R1) utiliser R1 et R2 Déverouiller(R1) Déverouiller(R2) 2

Commutation de contexte

R2 P2

2

R1 1

P1

(43)

Solutions au probl` eme des verrous mortels

Il n’existe pas de solution r´eellement satisfaisante : Politique de l’autruche

Pr´evention

D´etection puis gu´erison

Références

Documents relatifs

Le multitˆ ache pr´ eemptif : le processeur signale au syst` eme d’exploitation que le processus en cours d’ex´ ecution doit ˆ etre mis en sommeil pour permettre l’ex´

Les syst` emes d’exploitation distribu´ es (Distributed Operating Systems) : ces syst` eme sont con¸cu pour permettre une migration transparente des processus et des donn´ ees de

Les syst` emes d’exploitation distribu´ es (Distributed Operating Systems ) : ces syst` eme sont con¸ cu pour permettre une migration transparente des processus et des donn´ ees de

Le multitˆ ache pr´ eemptif : le processeur signale au syst` eme d’exploitation que le processus en cours d’ex´ ecution doit ˆ etre mis en sommeil pour permettre l’ex´

Les syst` emes d’exploitation distribu´ es (Distributed Operating Systems ) : ces syst` eme sont con¸ cu pour permettre une migration transparente des processus et des donn´ ees de

Le multitˆ ache pr´ eemptif : le processeur signale au syst` eme d’exploitation que le processus en cours d’ex´ ecution doit ˆ etre mis en sommeil pour permettre l’ex´

La strat´ egie SJF peut ˆ etre adpat´ ee pour un mode pr´ eemptif : si un processus plus court que le processus actif arrive dans la file, le processus actif est pr´ eempt´

Le multitˆ ache pr´ eemptif : le processeur signale au syst` eme d’exploitation que le processus en cours d’ex´ ecution doit ˆ etre mis en sommeil pour permettre l’ex´