02 Processus
02 Processus
02 Processus
Hicham Bensaid
Les processus
Concept de processus
Ordonnancement des processus
Opérations sur les processus
Communication inter-processus (IPC)
Exemples de système IPC
Communication dans les systèmes client-serveur
Objectifs
emacs tcsch
ps
pid = 9204 pid = 4005
pid = 9298
Création d'un processus
Espace d'adresses
Le fils est une copie du père
Le fils a un programme chargé dedans
Exemples Unix
fork() appel système pour créer un nouveau processus
exec() appel système utilisé après un fork() pour remplacer l'espace
mémoire du fils avec un nouveau programme
Programme C pour forker des processus
séparés
Créer un processus séparé par l'API
Windows
Terminaison d'un processus
Données partagées
#define BUFFER_SIZE 10
typedef struct {
. . .
} item;
item buffer[BUFFER_SIZE];
int in = 0;
int out = 0;
item next_produced;
while (true) {
/* produce an item in next produced */
while (((in + 1) % BUFFER_SIZE) == out)
; /* do nothing */
buffer[in] = next_produced;
in = (in + 1) % BUFFER_SIZE;
}
Buffer limité : le consommateur
item next_consumed;
while (true) {
while (in == out)
; /* do nothing */
next_consumed = buffer[out];
out = (out + 1) % BUFFER_SIZE;
Opérations
Créer une nouvelle boite au lettres (port)
Envoyer et recevoir les messages à travers la boite aux lettres
Détruire la boite aux lettres
Les primitives sont définies comme :
send(A,message) : envoyer un message à la boite aux lettres A
receive(A,message) : recevoir un message depuis la boite aux
lettres A
Communication indirecte
message next_consumed;
while (true) {
receive(next_consumed);
/* consume the item in next consumed */
}
Mise en tampon
Sockets
RPC
Pipes
Sockets