185 lines
6.5 KiB
Markdown
185 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)
|
||
|
||
Tout 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 voir 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 inferieur.
|
||
|
||
## 1. Notion de processus
|
||
|
||
Lorsqu'un programme est exécuté, il créé 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 stocker dans une file (tout cela est géré par l'OS [Rappel 1ère]) et sont exécuté 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èdent 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ée par le processeur |
|
||
| Ressources | Ressources utilisées par le processus. |
|
||
|
||
## 2. Gestion des processus
|
||
|
||
Nous l'avons vu chaque processus possèdent 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, une entré/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 ressources (donc d'autres processus), etc.
|
||
|
||
Il existe aussi deux autres états :
|
||
|
||
- Nouveau : le processus vient d'être crée, 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 un aux autres.
|
||
Imaginons deux programme.
|
||
|
||
```
|
||
# 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 à 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éer un premier processus, qui appelle la ressource A
|
||
|
||
```
|
||
# Programme 2 :
|
||
Accès à la ressource B
|
||
```
|
||
|
||
- le programme 2 créer 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 aucuns 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âche**. 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 ici) 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, Timothée Decoster, Enzo Frémaux
|
||
|
||
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>. |