• 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!
55
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 2, 2011

(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

7 Autres mod`eles de Thread

(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 ?

Understanding the Linux Kernel, Third Edition, Daniel P. Bovet, Marco Cesati, Oreilly, November 2005, pp. 942

Linux System Programming, Robert Love, Oreilly September 2007, pp. 388

De nombreux chapitres disponibles enpreview sur le site http://www.oreilly.com

(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 ? Tr`es bon site de David Decotigny et Thomas Petazzoni :

http://sos.enix.org/fr/PagePrincipale

(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.

Note :

La commandeps -efLpermet de visualiser les thread sous Linux.

qpshttp: // qps. kldp. net/, top sont des commandes plus synth´etiques.

(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) pour obtenir un jeton : l’op´eration P est mise en attente jusqu’`a ce qu’une ressource soit disponible

V(s) pour restituer un jeton :

P et V signifient en n´eerlandaisProberen(tester) etVerhogen (incr´ementer).

Note :

Les op´erations P et V doivent ˆetre indivisibles : le SE leur garanti une ex´ecution atomique (pas de commutation de contexte).

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 moniteurs sont implant´es dans le langage Java via la notion de m´ethodes d´efinies avec le modificateursynchronized

(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

(44)

Synchronisation

La synchronisation des processus est un probl`eme plus large que celui de la concurrence.

La synchronisation des processus concerne les m´ethodes mises en oeuvre afin que les processus coordonent leurs activit´es.

Cette partie est abord´ee en TD et en TP au travers de l’ exemple de barri`ere de synchronisation.

(45)

Threads et langages fonctionnels

Les mod`ele de processus et d’´etat partag´e induit des probl`emes : de concurrence

de synchronisation de verrou mortels de famine

Sans partage d’´etat ces probl`emes n’existent plus.

Depuis 3 ans les langages fonctionnels pour les applications distribu´ees et multi-thread se d´eveloppent :

Erlang origine Ericson

Scala origine EPFL (objet et fuonctionnel) : fonctionne sur une machine virtuelle Java

(46)

Paradigme d’acteur

Definition

Un acteur (actor) est une abstraction logicielle qui impl´emente un protocole de passage de message permattant de g´erer la

concurrence.

Les acteurs n’ont pas d’´etat partag´e, ils communiquent par envoi et reception de messages.

This is a paradigm that provides a very different and much simpler concurrency model than Shared-State Concurrency (the scheme adopted by C, Java, C# etc.) and is avoiding all of the latter one’s problems with deadlocks, live locks, thread starvation etc.

The most well known and successful implementation of actors can be found in the Erlang language where it has been used to

implement extremely fault tolerant and massively concurrent systems (with hundreds of thousand simultaneous actors).

(47)

Paradigme d’acteur

Each actor has a mailbox in which it receives incoming messages and can use pattern matching on the messages to decide if a message is interesting and which action to take.

Les acteurs proposent leur services sous la forme de trait ( A trait is Scala’s mixin construct. Traits allows you to build up your components using so-called mixin composition which is something that can give you a very high grade of reuse and flexibility.

(48)

Exemple

Trait only defines a single method named status which prints out info about the enclosing instance. Then we subclass this mixin and define the ServerOne concrete server class (with the status method mixed in).

1 // s e r v e r s

2 t r a i t S e r v e r {

3 def s t a t u s = p r i n t l n ( " c u r r e n t s e r v e r : " + t h i s)

4 }

5 c l a s s S e r v e r O n e e x t e n d s S e r v e r

Instantiate the ServerOne class and see what the status method it will print out. Here we are doing it interactively through Scala’s REPL (read-eval-print-loop).

1 $ s c a l a - cp . 2

3 scala > val s e r v e r = new S e r v e r O n e 4 s e r v e r : S e r v e r O n e = S e r v e r O n e @ 7 b e 7 5 d 5

6 scala > s e r v e r s t a t u s

7 c u r r e n t s e r v e r : S e r v e r O n e @ 7 b e 7 5 d

(49)

Exemple : mise en place des ´ ev´ enements

Defining the messages to respond to.

Scala is using case classes which are similar to normal classes but with some enhancements:

Match on them, e.g. use pattern matching (similar to the one found in Erlang)

Create them without using new, the compiler generates getters and setters for the constructor arguments, equality is not based on object id but on meaning/content

We define two different messages : StatusandHotSwap.

1 // t r i g g e r s the s t a t u s m e t h o d 2 c a s e o b j e c t S t a t u s

3 // t r i g g e r s h o t s w a p - c a r r i e s the new s e r v e r to be h o t s w a p p e d to 4 c a s e c l a s s H o t S w a p ( s : S e r v e r )

(50)

Exemple : d´ efinition de l’acteur

Actor is a base class in the Scala library

Choose to either extend it explicitly or to create an anonymous actor through the actor {...} construct.

When subclassing the actor: implement the method called actwhich is the callback method that is invoked when the actor is started up.

Scala comes with two different implementations; one that is based on Java threads in that each actor is getting its own thread, while the other one is based on events and very lightweight allowing hundreds of thousands of actors to run simultaneously.

We will use the event-based version (which is done by using thereact method instead of thereceive method for receiving messages).

(51)

Exemple : d´ efinition de l’acteur

1 c l a s s S e r v e r A c t o r e x t e n d s A c t o r {

2 def act = {

3 p r i n t l n ( " s t a r t i n g s e r v e r a c t o r ... " ) 4 l o o p (new S e r v e r O n e )

5 }

6

7 def l o o p ( s e r v e r : S e r v e r ) {

8 r e a c t {

9 c a s e S t a t u s = >

10 s e r v e r . s t a t u s 11 l o o p ( s e r v e r ) 12

13 c a s e H o t S w a p ( n e w S e r v e r ) = >

14 p r i n t l n ( " hot s w a p p i n g c o d e ... " ) 15 l o o p ( n e w S e r v e r )

16

17 c a s e _ = > l o o p ( s e r v e r )

18 }

19 }

20 }

(52)

Exemple : d´ efinition de l’acteur

Create a companion object for our ServerActor class. In this object, which is a singleton but should be seen upon as a module for functions and immutable state, we define an immutable handle to an instantiated and started actor.

1 // a c t o r c o m p a n i o n o b j e c t 2 o b j e c t S e r v e r A c t o r {

3 val a c t o r = {

4 val a = new S e r v e r A c t o r 5 a . s t a r t ; a

6 }

7 }

(53)

Exemple : d´ efinition de l’acteur

1 $ s c a l a - cp . 2

3 scala > i m p o r t h o t s w a p . _ 4 i m p o r t h o t s w a p . _ 5

6 scala > val a c t o r = S e r v e r A c t o r . a c t o r 7 s t a r t i n g a c t o r ...

8 a c t o r : h o t s w a p . S e r v e r A c t o r = h o t s w a p . S e r v e r A c t o r @ 5 2 8 e d 7 9

10 scala > a c t o r ! S t a t u s

11 c u r r e n t s e r v e r : h o t s w a p . S e r v e r O n e @ 2 2 6 4 4 5 12

13 scala > c l a s s S e r v e r T w o e x t e n d s S e r v e r {

14 | o v e r r i d e def s t a t u s = p r i n t l n ( " h o t s w a p p e d s e r v e r : " + t h i s)

15 | }

16 d e f i n e d c l a s s S e r v e r T w o 17

18 scala > a c t o r ! H o t S w a p (new S e r v e r T w o ) 19 hot s w a p p i n g c o d e ...

20

21 scala > a c t o r ! S t a t u s

22 h o t s w a p p e d s e r v e r : l i n e 5 $ o b j e c t $ $ i w $ $ i w $ $ i w $ S e r v e r T w o @ b 5 5 6

(54)

Remote Actor : d´ efinition

RemoteActorobject in package scala.actors.remote.

This object provides methods to create and connect to remote actor instances.

A remote actor is uniquely identified by a Symbol. This symbol is unique to the JVM instance on which the remote actor is executed.

1 i m p o r t s c a l a . a c t o r s . _ 2 i m p o r t s c a l a . a c t o r s . A c t o r . _ 3 i m p o r t s c a l a . a c t o r s . r e m o t e . _

4 i m p o r t s c a l a . a c t o r s . r e m o t e . R e m o t e A c t o r . _ 5 c l a s s M y A c t o r e x t e n d s A c t o r {

6 def act () {

7 a l i v e ( 9 0 0 0 )

8 r e g i s t e r ( ’ myActor , s e l f ) 9 // la s u i t e

10 } 11 }

(55)

Remote Actor : utilisation

Connecting to a remote actor: obtain a remote reference to a remote actor running on machine myMachine, on port 8000, with name ’anActor,

Use select in the following manner.

The actor returned from select has type AbstractActor which provides essentially the same interface as a regular actor, and thus supports the usual message send operations

1 val m y R e m o t e A c t o r = s e l e c t ( N o d e ( " m y M a c h i n e " , 8 0 0 0 ) , ’ a n A c t o r )

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´