183 lines
6.5 KiB
Markdown
183 lines
6.5 KiB
Markdown
# Gestion des processus et des ressources
|
||
|
||
## Le programme
|
||
|
||

|
||
|
||
------
|
||
|
||
Nous le savons, un ordinateur possède une architecture de Von Neumann, il y a donc différents composants tels que la mémoire vive, la mémoire 'dure' (Disque dur, SSD...), un processeur... C'est cet élément-ci qui nous intéresse aujourd'hui.
|
||
|
||
Le processeur est le cerveau de l'ordinateur et c'est lui qui exécute les tâches de la machine.
|
||
|
||
Comment expliquer que notre processeur arrive à ouvrir un navigateur web, un lecteur de musique, télécharger un jeu ou encore envoyer des messages le tout simultanément. (Sans parler des tâches de fond de l'ordinateur)
|
||
|
||
Tous ces programmes sont en réalité des lignes immenses de code et le processeur, lui, agit seul. Il exécute une à une les instructions de chaque programme, mais donne la sensation de tout gérer en même temps.
|
||
|
||
> Les processeurs multi-cœurs fonctionnent de la même façon à l'exception près qu'il n'y a pas 1 cœur, mais 4 voire 8 cœurs. Mais au vu de la multitude de programmes tournant en même temps sur la machine, le nombre de cœurs est nettement inférieur.
|
||
|
||
## 1. Notion de processus
|
||
|
||
Lorsqu'un programme est exécuté, il crée plusieurs processus. En effet, un programme est composé de diverses instructions (lignes de code) qui elles-mêmes forment diverses parties (processus) de celui-ci.
|
||
|
||
Ces processus sont donc stockés dans une file (tout cela est géré par l'OS [Rappel 1ère]) et sont exécutés un à un.
|
||
|
||
*Exemple de répartition de deux programmes par l'OS :*
|
||
|
||
<img src="assets/file.png" alt="File" style="width:50%;" />
|
||
|
||
Chaque processus possède différentes informations stockées en mémoire (dans le PCB (*Process Control Block*)) comme :
|
||
|
||
| Nom | Description |
|
||
| ---------- | ----------------------------------------------------- |
|
||
| PID | Process ID, identifiant du processus |
|
||
| Etat | Etat du processus |
|
||
| Registre | Valeur des registres lors de la dernière interruption |
|
||
| Mémoire | Emplacement mémoire alloué par le système |
|
||
| Ressources | Ressources utilisées par le processus. |
|
||
|
||
## 2. Gestion des processus
|
||
|
||
Nous l'avons vu, chaque processus possède plusieurs informations. **L'état** d'un processus permet de comprendre comment la file d'exécution est créée et comment celle-ci perdure.
|
||
|
||
Il existe 3 états différents :
|
||
|
||
- Prêt : Le processus attend d'être exécuté. Il est dans la file d'exécution.
|
||
- Elu : En cours d'exécution
|
||
- Bloqué/En attente : Le processus nécessite une ressource non disponible, tel qu'un emplacement mémoire ou une entrée/sortie.
|
||
Lorsque la ressource sera disponible, le processus repassera en état prêt.
|
||
- On peut imaginer que le processus attend l'intervention de l'utilisateur, ou le chargement d'une ressource (donc d'autres processus), etc.
|
||
|
||
Il existe aussi deux autres états :
|
||
|
||
- Nouveau : le processus vient d'être créé, il n'est pas encore dans la file d'exécution
|
||
- Terminé : l'exécution du processus est finie.
|
||
|
||
<u>Voici un schéma des différents états :</u>
|
||
|
||
<img src="assets/etat.png" style="zoom:50%;" />
|
||
|
||
## 3. Interblocage :
|
||
|
||
L'interblocage intervient lorsque plusieurs processus sont bloqués les uns par les autres.
|
||
Imaginons deux programmes.
|
||
|
||
```
|
||
# Programme 1 :
|
||
Accès à la ressource A
|
||
Accès à la ressource B
|
||
....
|
||
Libération de ressource B
|
||
Libération de ressource A
|
||
```
|
||
|
||
```
|
||
# Programme 2 :
|
||
Accès à la ressource B
|
||
Accès à la ressource A
|
||
....
|
||
Libération de ressource A
|
||
Libération de ressource B
|
||
```
|
||
|
||
### 3. 1. Un exemple d'ordonnancement
|
||
|
||
```
|
||
# Programme 1 :
|
||
Accès à la ressource A
|
||
Accès à la ressource B
|
||
```
|
||
|
||
- Le processus 1 a commencé, via un premier processus. Afin de faire tourner tous les programmes 'en même temps' il repasse dans la file d'exécution
|
||
|
||
```
|
||
# Programme 2 :
|
||
Accès à la ressource B
|
||
....
|
||
```
|
||
|
||
- Ici l'accès ne peut se faire, le programme 2 passe donc en état **Bloqué**
|
||
|
||
```
|
||
# Programme 1 :
|
||
....
|
||
Libération de ressource B
|
||
Libération de ressource A
|
||
```
|
||
|
||
- Le programme 1 se termine et donc libère A et B
|
||
|
||
```
|
||
# Programme 2 :
|
||
Accès à la ressource B
|
||
Accès à la ressource A
|
||
....
|
||
Libération de ressource A
|
||
Libération de ressource B
|
||
```
|
||
|
||
- Le programme 2 peut donc s'exécuter normalement
|
||
|
||
### 3. 2. Mauvais ordonnancement :
|
||
|
||
```
|
||
# Programme 1 :
|
||
Accès à la ressource A
|
||
```
|
||
|
||
- Le programme 1 crée un premier processus, qui appelle la ressource A
|
||
|
||
```
|
||
# Programme 2 :
|
||
Accès à la ressource B
|
||
```
|
||
|
||
- Le programme 2 crée un premier processus, qui appelle la ressource B
|
||
|
||
```
|
||
# Programme 1 :
|
||
Accès à la ressource B
|
||
```
|
||
|
||
- Le programme 1 attend la ressource B utilisée par le programme 2 et passe en état bloqué.
|
||
|
||
```
|
||
# Programme 2 :
|
||
Accès à la ressource A
|
||
```
|
||
|
||
- Le programme 2 attend la ressource A utilisée par le programme 1 et passe en état bloqué.
|
||
|
||
Ici les deux programmes sont en état bloqué car chacun attend la ressource de l'autre. Il y a interblocage et donc aucun des programmes ne peut s'exécuter.
|
||
|
||
## 4. En pratique
|
||
|
||
### 4. 1. Windows
|
||
|
||
Sous Windows il est possible de voir les processus en cours d'exécution grâce au **gestionnaire de tâches**. Celui-ci est accessible grâce aux touches Ctrl+Maj+Echap.
|
||
Il suffit ensuite d'aller dans l'onglet détail et on obtient tous les processus.
|
||
|
||
<img src="assets/liste_processus_windows.png" style="width:60%;" />
|
||
|
||
Nous retrouvons bien, l'**état**, le **PID**, la **mémoire occupée**
|
||
|
||
### 4. 2. Linux
|
||
|
||
Sous linux, il suffit d'accéder au terminal. Et d'y écrire la commande **ps**, il est possible de voir les **PID** et **PPID** (processus parent)
|
||
|
||

|
||
|
||
### 4. 3. macOS
|
||
|
||
macOS étant un système Unix (dérivé de BSD), on retrouve les mêmes commandes que sous Linux en grande partie.
|
||
Pour voir les processus, ici, on utilisera plutôt **TOP** (dispo sous linux également donc).
|
||
|
||
<img src="assets/top.png" alt="top" style="zoom:50%;" />
|
||
|
||
---------
|
||
|
||
Auteurs : Florian Mathieu, Enzo Frémeaux, Thimothée Decooster
|
||
|
||
Licence CC BY NC
|
||
|
||
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Licence Creative Commons" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a> <br />Ce cours est mis à disposition selon les termes de la <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International</a>. |