Skip to content

MOOC NSI - fondamentaux.

Transcription de la vidéo

4.2.2.1 : Processeur vs processus

[00:00:01]

Avec cette séquence, nous commençons à nous intéresser au processus. Nous avons déjà vu brièvement la notion de processus apparaître dans une des séquences précédentes, dont celle qui parlait d'interface système. Nous avons vu que le système d'exploitation nous donne une autre vision de notre machine. Au lieu de travailler avec les ressources physiques, le processeur, la mémoire, etc., nous avons vu que le système d'exploitation présente au programme et aux usagers des notions de ressources virtuelles qui sont les processus, la mémoire virtuelle, les flux d'entrées/sorties et les autres. Donc le processus est la ressource virtuelle qui vient se substituer au processeur. Et dans la suite de cette séquence, nous allons voir le lien qui a entre ces deux notions.

Si on regarde le processeur, c'est l'unité matérielle qui s'occupe de l'exécution sur la machine. Et si on regarde le nom en anglais CPU pour Central Processing Unit, c'est l'unité centrale de traitement, d'exécution. Qu'est ce qui exécute un processeur? Un processeur? Est vraiment placé au plus bas niveau, au niveau matériel et donc il exécute des instructions, mais ce sont des instructions machine. Et si nous regardons la couche qui est ici au plus bas en vert, les instructions que le processeur voit, c'est des instructions encodées en binaire qu’un œil humain peut difficilement comprendre. Si nous remontons d'une couche au-dessus de la couche binaire, nous pouvons voir des instructions machine écrites dans le langage machine ou encore appelé langage assembleur, qui commencent à être un petit peu plus intelligible pour nous.

[00:01:58]

Si nous remontons encore d'une couche, nous pouvons arriver à une instruction qui est tout à fait claire, une addition, une simple addition, en Python. Donc, pour nous, les développeurs et les usagers, nous travaillons avec des langages haut niveau puisque pour nous, c'est plus simple. Mais cette chose-là doit être traduite dans une forme qui est compréhensible et exécutable par le processeur. Donc, le processeur exécute les instructions, en langage machine, en binaire. D'où viennent ces instructions? Ils viennent des programmes que nous lançons sur la machine, bien entendu. Comment on passe donc de la suite d'instructions que nous avons dans notre programme à quelque chose qui s’exécute? Puisque effectivement, vous avez tous programmé et vous savez qu'un programme est une suite d'instructions. Par contre, la suite d'instructions, pour l'instant, est quelque chose de statique puisque ces instructions, typiquement sont écrites dans un fichier ou dans plusieurs fichiers, que nous appelons des fichiers sources, Elles sont écrites, comme on l'a dit, typiquement dans un langage haut niveau. Ce ne sont pas des entités dynamiques. Ce sont des entités statiques puisque ce ne sont que des données sauvegardées sur disque. Comment on va passer d'une entité statique de données qui sont sur disque à quelque chose de dynamique et quelque chose qui s'exécute? Donc, nous avons le code source, du code source il faut passer à code exécutable, c'est à dire qu'il y a une traduction pour passer à une forme qui est compréhensible par le processeur, et on lance ce qui est exécutable pour obtenir une exécution.

[00:03:47]

Et quand on a un programme en exécution, eh bien en effet, nous avons un processus. Donc un processus c'est l'entité qui correspond à l'exécution d'un programme.

Comment peut- on donc passer des sources d'un programme à l'exécutable? Cela dépend du langage que nous utilisons. Alors, soit le programme est compilé. Typiquement, il s'agit de langages C, C++, Pascal… Donc, nous utilisons un outil qui est un compilateur qui prend en entrée les fichiers sources et qui rend en sortie un fichier exécutable pour la machine que nous considérons, pour le processeur que nous considérons.

Nous pouvons aussi utiliser des langages dits interprétés et typiquement Python est un langage interprété. Donc, nous avons le code source de notre programme Python. Mais ce code source n'est pas transformé. Nous lançons un autre exécutable qui est l'interpréteur Python et qui, lui, peut lire le code source et interpréter instruction par instruction. C'est pour cela qu'effectivement, nous pouvons lancer un programme Python, exécuter une partie du programme et que cela s'arrête au milieu du programme parce que c'est à ce moment-là que l'interpréteur ne comprend pas ce qui lui est demandé et il y a une erreur.

Alors, si nous avons des processus qui correspondent à des exécutions de programmes, on peut les distinguer selon des types et selon celui qui les a lancés.

[00:05:27]

Alors de manière simple, on peut dire qu'il y a des processus système, qui sont là et qui ont été lancés pour la bonne exécution de notre système global. Typiquement, ce sont les pilotes d'entrées/sorties, ceux qui scrutent si un message réseau arrive, ceux qui s'occupent du traitement du clavier et sont typiquement des processus qui sont lancés au démarrage. Et après, vous avez des processus utilisateur qui sont ceux lancés par les utilisateurs de la machine. Donc, vous, quand vous vous connectez sur votre machine, vous lancez des navigateurs, vous lancez des commandes et ce sont typiquement des processus qui sont créés en réponse à quelque chose qui est demandé par l'utilisateur. Donc, nous avons, vous le savez, plusieurs choses qui se passent sur une machine, donc nous avons plusieurs processus et le système d'exploitation gère l'exécution de ces processus. Pour pouvoir faire ça, il doit connaître et doit pouvoir agir sur les processus. Et ce qu'il faut comprendre c’est qu'effectivement, le système d'exploitation, c'est le maître des processus : il sait quel est le type de processus, il sait quel usager l’a lancé, il connaît les droits d'exécution du processus, si il a le droit d'accéder à certaines données ou s'il n'a pas le droit d'accéder à certaines données, il peut l'arrêter, il peut le relancer, il peut le tuer… Donc, il faut retenir que c'est le système qui sait tout ce qui se passe sur notre machine et donc gère les processus.

[00:07:53]

Comment peut-on voir ce qu'il y a sur notre machine? Quels sont les processus qui s'exécutent sur la machine? Sur tous les systèmes d'exploitation, il existe des utilitaires qui sont les moniteurs et qui peuvent nous montrer la liste des processus qui tournent à un moment donné sur le système. Donc, ici vous voyez l'exemple de l'utilitaire système sur ma machine qui est un Mac. Vous avez ici des détails : donc on peut voir le nom de l'opération qui est exécutée, on peut voir combien de pourcentage de processeur occupent notre processus, s'il demande beaucoup de calcul ou s’il demande peu de calcul, on voit depuis combien de temps ce processus est lancé, …ici, c'est les threads ou les processus légers dont on va parler plus tard dans les séquences vidéo, on voit l'utilisateur qui a lancé le processus et une information avec laquelle nous allons travailler aussi dans les séquences vidéo qui vont venir, c'est l'identifiant de processus qui est unique. Donc tous les processus dans le système ont un numéro unique qui les authentifié et qui permet de les distinguer. Alors comme je disais, nous avons les mêmes utilitaires avec tous les systèmes d'exploitation voici l'utilitaire qui nous permet de voir les processus sous Linux. Alors essayons de voir un exemple: nous avons le système d'exploitation qui est là, qui est lancé, parce que la machine est en route, et nous allons lancer trois choses :

[00:08:49]

Firefox, Word et l'interpréteur Python. Quand on lance Firefox, il va y avoir un processus qui va être créé. Quand on lance Word, on va avoir un autre processus qui va être créé. Enfin, l'interpréteur Python, un troisième processus qui est créé. Essayons de voir si on les voit dans la liste des processus. Donc, je relance mon utilitaire pour voir la liste des processus et effectivement, vous voyez dans la bulle verte à gauche que je vois bien mon Firefox, mon Microsoft et Python, il doit être un peu plus bas puisqu' il a un nom avec une lettre plus loin dans l'alphabet. Après, je peux voir la liste des processus sur ma machine. Vous vous rappelez, on a plusieurs types d'interfaces. Là, j'ai utilisé l'interface graphique. Je peux le faire en ligne de commande. Donc j'ai dit une commande sous Linux qui est ps (process status) que je peux utiliser pour voir la liste de mes processus. Alors voici un terminal sur lequel j'ai tapé la commande ps et j'ai voulu voir les processus qui sont les miens, donc qui appartiennent à l'utilisateur vania. Donc ici c'est un petit extrait puisque la liste est un peu longue et on se rend compte qu'effectivement, il y a beaucoup de processus qui tournent pour l'utilisateur vania. Mais ça, ce n'est pas une surprise. Et en fait, c'est le même processus que nous voyions sur l'interface graphique.

[00:10:32]

Pour retrouver les processus que nous venons de lancer, on peut taper une commande un peu plus compliquée, donc ici il y a l'écran de la haut qui est juste zoomé en dessous. Donc la commande, c'est au début. La même chose, donc PS pour lister les processus -u pour spécifier l'utilisateur. Et donc je m'intéresse à l'utilisateur vania. Et ensuite je lui ai dit que la sortie de cette commande, je voudrais la filtrer et regarder si le texte contient Firefox ou Word ou Python. De cette manière, je récupère bien mes trois processus. Le premier qui est listé, c'est Firefox, le deuxième, c'est Word et le troisième, c'est Python. Effectivement, il y a les chemins complets des exécutables qui sont donc sur ma machine. Et après, vous voyez, la deuxième colonne de ce qui est affiché, c'est le numéro de processus et on voit bien que ces trois processus là ont trois numéros différents.

Dans cette vidéo, nous avons vu que si le processeur est l'unité matérielle qui permet l'exécution sur une machine, le processus représente un programme en exécution et c'est l'unité logicielle d'exécution. Le système d'exploitation, lui, gère tous les processus qui sont lancés sur une machine et connaît toutes les informations les concernant. Ces informations sont accessibles à travers l'interface système et donc les programmes où les usagers peuvent demander des informations sur les processus à travers l'interface graphique en ligne de commande ou de manière programmatique.