Processus§

Systèmes d’exploitation

auteur:Pierre-Antoine Champin
adresse:Département Informatique - IUT - Lyon1
licence:Ce travail est sous license Creative Commons Attribution-ShareAlike 3.0 France
1

Notion de processus§

2

Terminologie§

3

Terminologie (2)§

4

Définition : Processus§

5

Remarques§

6

Exemple : gestionnaire de tâches Windows§

_images/ps_windows.png
7

Exemple : moniteur système Linux§

_images/ps_gnome.png
8

Processus et SE§

Plusieurs processus indépendants doivent pouvoir s’exécuter sans interférence :

À l’inverse, les processus doivent pouvoir communiquer si leur programme le demande

9

Gestion des processus par le noyau§

10

Définition : PCB§

Process Control Block (PCB)

11

Identité§

12

Exécution§

13

Ressources§

14

États d’un processus§

Selon les systèmes, le nombre et le nom des états peut varier. Mais la base commune est :

Élu:
en train de s’exécuter sur un processeur
Éligible:
en attente d’un processeur pour s’exécuter
Bloqué:
en attente d’un événement (ex: interruption) ; ne peut donc pas s’exécuter pour l’instant
15

Diagramme d’états d’un processus§

_images/ps_states.png
16

Remarques sur l’identité§

Intérêt de séparer l’utilisateur propriétaire de l’utilisateur effectif :

17

Création de processus par programmation§

18

Différentes approches§

19

Windows§

Appel système CreateProcess : crée un processus dont les caractéristiques sont données en paramètres de l’appel système.

Exemple :

STARTUPINFO si; // à renseigner
PROCESS_INFORMATION pi; // utilisé en sortie
bool succes = CreateProcess( 0, "mon_prog.exe", 0,
                             0, FALSE, 0, 0, 0,
                             &si, &pi);
20

UNIX§

Appel système fork : crée un processus dont les caractéristiques sont identiques à celles du processus courant (seuls le PID et le PPID changent).

→ retourne une valeur différente dans le processus père et le processur fils

Exemple :

int pid_fils = fork();
if (pid_fils == 0) return fonction_fils();
              else return fonction_père();
21

UNIX (2)§

Si on souhaite que le fils exécute un autre programme que le père, on utilise une variante de exec (qui remplace le programme courant par un autre programme).

Exemple :

int pid_fils = fork();
if (pid_fils == 0) execlp("mon_prog", "mon_prog");
// seul le père exécute la suite
22

UNIX (3)§

23

Comparaison§

24