Académique Documents
Professionnel Documents
Culture Documents
SUPPORT DE COURS:
SYSTÈMES D’EXPLOITATION 2
UAMB)
(L3 Informatique)
Chargé de cours:
Année: 2023/2024
Dr.KHENOUS Lachemi 1
Systèmes d’exploitation 2 (L3 Info,
UAMB)
Chapitre 3:
INTERPROCESSUS
COMMUNICATION
2
Chapitre 3: Communication Interprocessus
1.Introduction
Systèmes d’exploitation 2 (L3 Info,
(communication interprocessus).
Processus A Processus B
Moyen de
communica
tion
3
Chapitre 3: Communication Interprocessus
2. Communication interprocessus
Systèmes d’exploitation 2 (L3 Info,
B. Communication IPC:
1) file de message,
2) mémoire mappée,
3) sémaphores.
C. Communication par sockets
4
Chapitre 3: Communication Interprocessus
Producteur Consommateur 5
Chapitre 3: Communication Interprocessus
Exemples :
• Le processus clavier produit des caractères qui sont consommés par le
processus d’affichage à l’écran.
• Le pilote de l’imprimante produit des lignes de caractères qui sont
consommées par l’imprimante.
• Un compilateur produit des lignes de codes consommés par l’assembleur.
Règle 2 : CONSOMMATEUR
Le consommateur ne peut Faire toujours
prendre un objet si le tampon si nb d'objets dans tampon > 0 alors
est vide : <prendre l'objet>
<consommer l'objet>
Franchissement (retirer) : fsi
Fait
UAMB)
Règle 4 :
Si le producteur (resp. consommateur) est en attente parce que le
tampon est plein (resp. vide), il doit être averti dès que cette condition
cesse d'être vraie.
8
Chapitre 3: Communication Interprocessus
Gestion du tampon:
Un cas fréquent de la politique de gestion du tampon est la façon circulaire:
• les messages sont alors retirés dans l’ordre de leur dépôt.
• deux variables caractérisant l'état du tampon:
NPLEIN : nombre d'objets dans le tampon (début : 0)
NVIDE : nombre d'emplacements disponibles dans le tampon (N au début).
UAMB)
CONSOMMATEUR :
Faire toujours
si NPLEIN > 0 alors NPLEIN -- / * s'il existe au moins un
sinon s'endormir objet dans le tampon.*/
finsi
<Prélever l'objet dans le tampon>
si producteur endormi alors réveiller le producteur
sinon NVIDE ++
finsi
<Consommer l'objet>
Fait
9
Chapitre 3: Communication Interprocessus
PRODUCTEUR :
Faire toujours
<Produire un objet>
//début de bloc ininterruptible
si NVIDE >0 alors NVIDE -- /*s'il existe au moins un emplacement
sinon s'endormir vide dans le tampon */
UAMB)
10
Chapitre 3: Communication Interprocessus
PRODUCTEUR CONSOMMATEUR
Faire toujours Faire toujours
<Produire un objet> P(NPLEIN)
P(NVIDE) <prélever un objet>
<déposer un objet> V(NVIDE)
V(NPLEIN) <consommer l'objet>
Fait
Fait 11
Chapitre 3: Communication Interprocessus
PRODUCTEUR () CONSOMMATEUR ()
UAMB)
13
Chapitre 3: Communication Interprocessus
Fin
Debut (*initialisation du moniteur*)
nb=0 ;
Fin
Fin ProdCons. /* fin du moniteurs*/
15
Chapitre 3: Communication Interprocessus
16
Chapitre 3: Communication Interprocessus
A. priorité aux lecteurs : s’il existe des lecteurs sur le fichier, toute
UAMB)
au fichier.
BDD
File_Att
BDD
File_Att File_Att
Pr_Lec_01 Pr_Lec_03 …
Pr_Red Pr_Lec_k
Pr_Lec_02
18
Chapitre 3: Communication Interprocessus
BDD
File_Att File_Att
Pr_Red_01 Pr_Lec_03 … Pr_Lec_k
Pr_Red_02 Pr_lec_01
19
Chapitre 3: Communication Interprocessus
d’arrivée.
BDD
File_Att File_Att
Pr_Red_01 Pr_Lec_03 … Pr_Lec_k
Pr_Red_01
Pr_lec_02
Pr_Red_02
20
Chapitre 3: Communication Interprocessus
Initialisation:
int nbLect = 0; /* compte nombre de processus lecteurs qui veulent lire */
Semaphore:
lecture = 1, /* utilisé pour contrôler l'accès à la variable nblLect */
bd = 1, /*utilisé par le 1ier lecteur ou le rédacteur qui accède à la SC*/
Ecriture = 1 /* utilisé pour garantir qu’il n’y aura qu’un rédacteur dans la SC*/
21
Chapitre 3: Communication Interprocessus
void lecteur ()
{ while (TRUE) void Rédacteur()
{ P (lecture);
UAMB)
{ while (TRUE)
nbLect ++; {
if (nbLect = = 1) P (bd); P (Ecriture);
V (lecture); P (bd);
<lire_donnees ()>; <Ecrire_donnees ();>
P (lecture); V (bd);
nblect--; V (Ecriture) ;
if (nbLect = = 0) V (bd); }
V (lecture); }
}
} 22
Chapitre 3: Communication Interprocessus
Processus_lecteur() Processus_redacteur()
{ {
LecRed.debut_lire ; LecRed.debut_ecrire ;
<Accès en lecture> <Accès en écriture>
LecRed.fin_lire ; LecRed.fin_ecrire ;
} }
ecr := vrai ;
debut fin
nl :=nl+1 ; procedure fin_ecrire
Si ecr alors Debut
debut ecr :=faux ;
c_lect.wait ; Si nl >0 alors
c_lect.signal; //réveil des c_lect.signal ;
lecteurs Sinon c_ecr.signal ;
FinSi Fin Si
fin fin
Procedure fin_lire ; debut // initialisation
debut ecr := faux ; nl := 0 ;
nl=nl-1 ; Fin
Si nl= 0 alors c_ecr.signal ; Fin LecRed //findu moniteur. 24
2.2. Communication interprocessus par échange de messages
A … … B
25
2.2. Communication interprocessus par échange de messages
Systèmes d’exploitation 2 (L3 Info,
26
Chapitre 3: Communication Interprocessus
communiquer.
27
Chapitre 3: Communication Interprocessus
28
Chapitre 3: Communication Interprocessus
lettres ou le port A.
29
Chapitre 3: Communication Interprocessus
Une liaison n’est établie entre deux processus que s’ils partagent
UAMB)
une boite-aux-lettres;
Une liaison (boite aux lettres) peut être partagée par plus de deux
processus;
30
Chapitre 3: Communication Interprocessus
31