Académique Documents
Professionnel Documents
Culture Documents
SYSTÈME ET RÉSEAUX
Pr. M.A. EL KIRAM.
Univérsité Cadi Ayyad.
Faculté des Sciences Semlalia.
Département d’Informatique.
kiram@uca.ac.ma
Plan
Eléments de bases des processus.
Processus
Etats de processus.
Représentation interne de processus.
Les threads
Introduction, caractéristiques et avantages
Gestion des threads sous Linux.
Création des threads.
Suspension des threads.
Terminaison des threads.
Communication interprocessus.
Variables et fichiers communs.
Les signaux.
Les messages.
Tubes.
Sockets.
Plan (suite)
Adressage
Socket en mode connecté (STREAM).
Socket en mode non connecté (DGRAM).
Socket en mode local (AF_UNIX).
Socket en mode INTERNET (AF_INET).
Eléments de bases des processus
Notion de processus:
Segments de données
Un processus est composé d’un
espace de travail formé de 4
segments. Segments de données supp
Segment de code
Segment de pile
Processus
Segment de code
Segment de pile
Processus
Segment de pile
Processus
Segment de code
Segment de pile
Processus
Un processus est représenté par une structure interne appelé Bloc de Contrôle de
Processus PCB (Process Control Bloc).
Programme A Programme B
Réellement exécuter.
Prêt à être exécuter.
En attente de ressources autre que le processeur
Etats de processus
Nous distinguons alors les états suivants:
En exécution.
Prêt.
En attente.
On distingue en plus:
Bloquer : processus en attente d’un événement qui se produira jamais
Suspendu : processus mis temporairement en retrait.
C’est l’OS qui détermine et modifie l’état d’un processus sous l’effet
d’événements.
Etats de processus
Les événements peuvent être:
Internes au processus:
Une demande d’E/S peut faire passer de l’état « en exécution » à l’état « prêt ».
Externes au processus:
Attribution de ressources fait passer de l’état « en attente » à l’état « prêt ».
Atelier N°1
Gestion de processus
Opérations sur les processus
Créer et détruire.
Mettre en attente et réveiller.
Suspendre et reprendre.
Modifié la priorité
Création de processus
Le fils peut à son tour créé d’autre processus dont il devient leur père
Création de processus
P1
P…
Création de processus sous Unix/Linux
L’appel système fork() est la seule véritable façon de créer des processus fils.
#include <sys/types.h>
#include <unistd.h>
pid_t fork(void)
Cet appel duplique le processus qui l’exécute en deux processus identiques au nom près,
qui s’exécutent en parallèle et retourne deux valeurs différentes aux processus père et
fils
Création de processus
pid = fork();
If (pid == 0) {
quisuisje=« le fils »;
printf(« je suis %s \n», quisuisje);}
Q. Donnez le schéma d’exécution de:
#include<stdio.h>
#include <unistd.h> Else
#include <sys/types.h> {
Const char * quisuisje = NULL
printf(« je suis %s \n », quisuisje);
Int main()
}
{
Return 0;
pid_t pid;
quisuisje=« le père »; }
pid = fork();
If (pid == 0) {
quisuisje=« le fils »;
printf(« je suis %s \n», quisuisje);}
Atelier
Création de processus.
Atelier 1
Ecrire un programme prog1.c dans lequel le processus père crée un
processus fils.
Le père écrit « je suis le père ».
Le fils écrit « Je suis le fils ».
Atelier 2
Ecrire un programme prog1.c dans lequel le processus père crée un
processus fils.
Le père écrit « je suis le père ».
Le fils écrit « Je suis le fils ».
Modifier ce programme de telle sorte que père et fils montrent leur pid.
Utiliser getpid().
Atelier 5
Ecrire un programme prog1.c dans lequel le processus père crée un
processus fils.
Le père écrit « je suis le père ».
Le fils écrit « Je suis le fils ».
Modifier ce programme de telle sorte que père et fils montrent leur pid et
le pid de leur père.
Ecrire un programme tfotk.c dans lequel père et fils partagent une varialble a initilalisée à 10
Père ajoute 30 à a.
Fils ajoute 40 à a
Constatez
Atelier 9
Atelier 9
Montrer la différence entre les deux programmes
Fork1.c Fork2.c
# include <sys/types.h> # include <sys/types.h>
#include <unistd.h>
#include <unistd.h>
#include <stdio.h>
#include <stdio.h>
Int main ()
Int main () {
{ int i, n=5;
pid_t pid;
int i, n=5;
int childpid; for (i=1; i<n; i++)
{
for ( i=1; i<n; i++ ) If ((pid = fork())==-1)
{ Break;
If (pid ==0)
If ((childpid = fork()) <= 0) break;
Printf(" Processus %d avec pere %d, i=%d\n", getpid(),
printf(" Processus %d avec pere %d, i=%d\n", getppid(), i) ;
getpid(), getppid (), i) ; }
}
Return 0; Return 0 ;
} }
Détruire
Un processus peut se terminer de différentes façons:
- Se termine normalement.
- Exécute une instruction auto destructrice. (exit(), break…)
- Est détruit par un autre processus ( kill()).
Détruire
- Un processus détruit n’existe plus dans le système.
- Les ressources qui lui avaient été affectées sont libérées.
- son BCB est effacé.
Mettre en attente et réveiller