Files
BUT2FI_2026_R3.05/tp/tp4/ordonnancement.md
T
2026-09-25 12:17:20 +02:00

6.5 KiB

Interruptions - Ordonnancement

Ex1 1

Ouvrez un terminal et exécutez :

ps

Puis :

ps -f

et :

ps -eo pid,ppid,stat,ni,pri,psr,comm

Cette dernière commande affiche notamment :

  • PID : identifiant du processus ;
  • PPID : identifiant du processus père ;
  • STAT : état du processus ;
  • NI : valeur de nice ;
  • PRI : priorité affichée par Linux ;
  • PSR : numéro du processeur sur lequel le processus s'est exécuté ;
  • COMMAND : nom du programme.

Questions

  1. Quelle est la valeur de nice d'un processus nouvellement créé ?
  2. Quelles valeurs peut prendre nice ?
  3. Que signifie une valeur de nice élevée ?
  4. Que signifie l'état R ?
  5. Que signifie l'état S ?
  6. Pourquoi le champ PSR peut-il changer au cours du temps ?

Ex2.

Nous allons créer un programme très simple qui consomme du temps processeur.

Créez le fichier cpu.c :

#include <stdio.h>

int main(void)
{
    unsigned long long i = 0;

    while (1)
        i++;

    return 0;
}

Compilez-le :

gcc -O2 -o cpu cpu.c

Lancez-le :

./cpu

Dans un autre terminal :

top

Questions

  1. Quel pourcentage de CPU utilise le processus cpu ?
  2. Observez le champ NI.
  3. Observez le champ PR.
  4. Sur quel processeur le processus s'exécute-t-il ?

Utilisez :

watch -n 0.1 ps -C cpu -o pid,ni,pri,psr,comm
  1. Appuyez sur 1 dans top. Que constatez-vous concernant les différents processeurs ?

Pour arrêter le programme :

killall cpu

Ex3

Lancez maintenant deux instances :

./cpu &
./cpu &

Puis :

watch -n 0.1 ps -C cpu -o pid,ni,pri,psr,pcpu,comm

et observez avec :

top

Questions

  1. Si votre machine possède plusieurs processeurs logiques, les deux processus utilisent-ils nécessairement le même processeur ?
  2. Lancez quatre processus :
./cpu &
./cpu &
./cpu &
./cpu &

Observez leur utilisation CPU.

  1. Que se passe-t-il si vous lancez davantage de processus que votre machine ne possède de processeurs logiques ?
  2. Pourquoi un processus CPU-bound finit-il malgré tout par laisser le processeur à un autre processus ?

Ex4

La commande nice permet de lancer un processus avec une valeur de nice particulière.

Lancez :

nice -n 10 ./cpu &

Puis :

watch -n 0.1 ps -C cpu -o pid,ni,pri,pcpu,comm 

Comparez avec un processus lancé normalement :

./cpu &

Questions

  1. Quelle est la valeur de nice des deux processus ?
  2. Leur valeur de PRI est-elle identique ?
  3. Que signifie concrètement nice = 10 ?
  4. Est-ce que nice signifie que le processus est exécuté « moins souvent » au sens strict ?

Ex5

Lancez deux processus :

./cpu &
./cpu &

Repérez leurs PID :

pgrep cpu

Choisissez l'un des deux PID et modifiez sa valeur de nice :

renice 10 -p PID

par exemple :

renice 10 -p 12345

Observez :

ps -p 12345 -o pid,ni,pri,pcpu,comm

Expérience

Essayez de faire tourner simultanément deux processus cpu :

  • l'un avec nice = 0 ;
  • l'autre avec nice = 10.

Observez leur consommation CPU pendant plusieurs secondes.

Questions

  1. Le processus avec nice = 10 reçoit-il toujours du CPU ?
  2. Que constatez-vous lorsque les deux processus se disputent le même processeur ?
  3. Si les deux processus peuvent s'exécuter simultanément sur deux processeurs différents, l'effet de nice est-il aussi visible ?
  4. Expliquez pourquoi.

Attention : nice modifie la priorité relative d'un processus, mais ne lui réserve pas une quantité fixe du processeur.

Ex6

Linux permet de restreindre les processeurs sur lesquels un processus peut s'exécuter.

Utilisez :

nproc

pour connaître le nombre de processeurs logiques disponibles.

Lancez :

taskset -c 0 ./cpu &

Puis :

ps -C cpu -o pid,psr,pcpu,comm 

Vous pouvez également consulter directement l'affinité :

taskset -p PID

Questions

  1. Sur quel processeur le processus est-il autorisé à s'exécuter ?
  2. Pourquoi le champ PSR reste-t-il normalement égal à 0 ?
  3. Quelle différence faites-vous entre :
nice

et :

taskset

Ex7

Nous allons maintenant forcer deux processus à utiliser le même processeur.

Lancez :

taskset -c 0 ./cpu &
taskset -c 0 ./cpu &

Observez :

top

Puis :

ps -C cpu -o pid,ni,pri,psr,pcpu,comm 

Questions

  1. Les deux processus peuvent-ils s'exécuter simultanément sur le CPU 0 ?
  2. Quelle proportion approximative du temps processeur reçoit chaque processus ?

Modifiez maintenant la priorité du premier processus :

renice 10 -p PID1

et laissez le second avec :

nice = 0
  1. Observez à nouveau top.
  2. Expliquez qualitativement l'effet de nice lorsque deux processus CPU-bound sont contraints de partager le même processeur.

Ex8

Linux fournit de nombreuses informations sur chaque processus dans :

/proc/PID/

Pour un processus cpu, examinez :

cat /proc/PID/status

puis :

cat /proc/PID/sched

Dans sched, recherchez notamment :

se.sum_exec_runtime
nr_switches
nr_voluntary_switches
nr_involuntary_switches

Questions

  1. Que représente se.sum_exec_runtime ?
  2. Quelle différence faites-vous entre :
  • changement de contexte volontaire ;
  • changement de contexte involontaire ?
  1. Pourquoi un processus cpu devrait-il avoir relativement peu de changements de contexte volontaires ?

Ex9

Nous allons mettre en place l'expérience suivante :

  • deux processus cpu ;
  • tous deux limités au CPU 0 ;
  • processus A : nice = 0 ;
  • processus B : nice = 15.

Lancez-les :

taskset -c 0 ./cpu &

et :

taskset -c 0 nice -n 15 ./cpu &

Notez leurs PID.

Après environ 30 secondes, récupérez :

cat /proc/PID_A/sched
cat /proc/PID_B/sched

Relevez notamment :

se.sum_exec_runtime
nr_switches

Questions

  1. Le temps CPU obtenu par A et B est-il identique ?
  2. Comparez les valeurs de se.sum_exec_runtime.
  3. Quelle conclusion pouvez-vous tirer sur l'influence de nice ?
  4. Pourquoi cette expérience est-elle plus significative lorsque les deux processus sont attachés au même CPU ?