logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).


L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT → ODT PDF Export

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
doc:systeme:noyau:theorie [11/02/2014 17:50]
captnfab [Les interruptions matérielles]
doc:systeme:noyau:theorie [05/11/2015 18:01] (Version actuelle)
milou [Les processus]
Ligne 2: Ligne 2:
  
   * Objet : Comprendre la notion de noyau   * Objet : Comprendre la notion de noyau
-  * Niveau requis : {{tag>​débutant}}+  * Niveau requis : {{tag>​débutant ​avisé}}
   * Commentaires : //Pour vous cultiver dans le mode de fonctionnement des systèmes d'​exploitations.//​   * Commentaires : //Pour vous cultiver dans le mode de fonctionnement des systèmes d'​exploitations.//​
-  * Débutant, à savoir :  +  * Débutant, à savoir : [[:​doc:​systeme:​commandes:​le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !]] :-) 
-  * Suivi : {{tag>en-chantier ​à-placer}} +  * Suivi : {{tag>à-compléter ​à-tester}} 
-    * Création par **captnfab** 10/02/2014+    * Création par [[user>captnfab]] le 10/02/2014 
 +    * Testé par ... le ...
   * Commentaires sur le forum : [[https://​debian-facile.org/​topic-8438-wiki-introduction-au-fonctionnement-d-un-systeme-d-exploitation-page-1.html | Lien vers le forum concernant ce tuto]] ((N'​hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !))   * Commentaires sur le forum : [[https://​debian-facile.org/​topic-8438-wiki-introduction-au-fonctionnement-d-un-systeme-d-exploitation-page-1.html | Lien vers le forum concernant ce tuto]] ((N'​hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !))
  
-**Nota:** +
-Contributeurs,​ les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli !+
  
 ===== Introduction ===== ===== Introduction =====
  
-Le noyau est, sans mauvais jeu de mot, une pièce centrale dans un système d'​exploitation. Il est difficile de donner un exemple minimal montrant ce qu'est un noyau tellement celui-ci est omniprésent. Il est l'​interface avec les périphériques,​ il est celui qui exécute les programmes, qui leur donne la main, les faut communiquer entre eux, il est celui qui gère la mémoire, l'​alloue,​ la range dans la swap. Il est celui qui à plus haut niveau défini la notion de fichiers, et les décode à partir des données brutes contenues sur les périphériques de stockage, etc.+Le noyau est, sans mauvais jeu de mot, une pièce centrale dans un système d'​exploitation. Il est difficile de donner un exemple minimal montrant ce qu'est un noyau tellement celui-ci est omniprésent. Il est l'​interface avec les périphériques,​ il est celui qui exécute les programmes, qui leur donne la main, les fait communiquer entre eux, il est celui qui gère la mémoire, l'​alloue,​ la range dans la swap. Il est celui qui à plus haut niveau défini la notion de fichiers, et les décode à partir des données brutes contenues sur les périphériques de stockage, etc.
  
 Plutôt que faire une description théorique technique du fonctionnement du noyau, des tas de livres présentant la chose existent (voir les références),​ nous allons explorer un peu tout ça au travers de l'​action la plus banale et pourtant probablement la plus complexe faisable pour un noyau : lancer un navigateur web. Nous prendrons l'​exemple du noyau Linux, mais le raisonnement devrait être le même pour tous les noyaux monolithiques (modulaires ou non) Plutôt que faire une description théorique technique du fonctionnement du noyau, des tas de livres présentant la chose existent (voir les références),​ nous allons explorer un peu tout ça au travers de l'​action la plus banale et pourtant probablement la plus complexe faisable pour un noyau : lancer un navigateur web. Nous prendrons l'​exemple du noyau Linux, mais le raisonnement devrait être le même pour tous les noyaux monolithiques (modulaires ou non)
Ligne 26: Ligne 26:
 Vous avez ainsi effectué un tas d'​opérations complexes utilisant le noyau, mais le pire est à venir. Vous avez ainsi effectué un tas d'​opérations complexes utilisant le noyau, mais le pire est à venir.
  
-Vous avez lancez ​iceweasel, un programme, c'est à dire un bout de code autonome qui s'​exécute dans son coin. Cette notion de programme qui tourne dans son coin est appelée **processus**((processus:​ de l'​anglais //process// signifiant //danser à la queue-leu-leu//,​ comme le font les [[http://​fr.wikipedia.org/​wiki/​Processionnaire_du_pin|processionnaires du pin]] des poils desquelles, à l'​instar de ceux des geeks, je me méfierais si j'​étais vous.)). Un processus donc, c'est un objet qui contient du code, stocké en mémoire et tout un tas d'​autres propriétés sur lesquelles nous reviendrons. ​+Vous avez lancé ​iceweasel, un programme, c'est-à-dire un bout de code autonome qui s'​exécute dans son coin. Cette notion de programme qui tourne dans son coin est appelée **processus**((processus:​ de l'​anglais //process// signifiant //danser à la queue-leu-leu//,​ comme le font les [[http://​fr.wikipedia.org/​wiki/​Processionnaire_du_pin|processionnaires du pin]] des poils desquelles, à l'​instar de ceux des geeks, je me méfierais si j'​étais vous.)). Un processus donc, c'est un objet qui contient du code, stocké en mémoire et tout un tas d'​autres propriétés sur lesquelles nous reviendrons. ​
  
 ==== Mitose numérique ==== ==== Mitose numérique ====
Ligne 40: Ligne 40:
 <code user>​nano /​tmp/​test_fork.c</​code>​ <code user>​nano /​tmp/​test_fork.c</​code>​
  
-<code c>#​include <​stdio.h>​+<file c test_fork.c> 
 +#include <​stdio.h>​
 #include <​unistd.h>​ #include <​unistd.h>​
  
Ligne 55: Ligne 56:
    }    }
   return 0;   return 0;
-}</code>+}</file>
  
 <code user>gcc -o /​tmp/​test_fork /​tmp/​test_fork.c</​code>​ <code user>gcc -o /​tmp/​test_fork /​tmp/​test_fork.c</​code>​
Ligne 68: Ligne 69:
 C'est donc ce que fait le noyau, sur ses versions non-préemptives((Parfois,​ quand vous êtes partis pour bosser pendant 1h, et qu'au bout de deux minutes vous recevez un message sur IRC, vous êtes interrompus et changez de tâche plus tôt que prévu. Bravo, vous êtes compilé avec préemption.)) il laisse un temps de calcul à un processeur sur un processus, puis au bout d'un petit laps de temps, reprend la main et la donne à quelqu'​un d'​autre. C'est donc ce que fait le noyau, sur ses versions non-préemptives((Parfois,​ quand vous êtes partis pour bosser pendant 1h, et qu'au bout de deux minutes vous recevez un message sur IRC, vous êtes interrompus et changez de tâche plus tôt que prévu. Bravo, vous êtes compilé avec préemption.)) il laisse un temps de calcul à un processeur sur un processus, puis au bout d'un petit laps de temps, reprend la main et la donne à quelqu'​un d'​autre.
  
-Une première problématique qui se pose est celle dite de la **famine**. Prenons un exemple concret, imagé, etc. Vous vous baladez dans la rue, un jour de marché. Vous êtes juste à l'​angle entre le marchand de pommes bio et l'​Apple Store. Deux petites filles pleurent chacune devant un de ces magasins. Vous êtes très riche parce que libriste, elles sont très pauvres parce que leur parents claquent tout leur argent respectivement dans les salades bio et dans les 4x4 citadins. Vous décidez d'​aider une des deux petites filles aujourd'​hui en lui achetant l'​objet qu'​elle convoite, mais n'avez pas le temps d'​aider les deux. À laquelle allouez-vous vos ressources ? Celle qui en a le plus besoin ? Celle qui a besoin du plus de ressources ? Celle dont les parents sont les plus influents ? Je vous laisse choisir.+Une première problématique qui se pose est celle dite de la **famine**. Prenons un exemple concret, imagé, etc. Vous vous baladez dans la rue, un jour de marché. Vous êtes juste à l'​angle entre le marchand de pommes bio et l'​Apple Store. Deux petites filles pleurent chacune devant un de ces magasins. Vous êtes très riche parce que libriste, elles sont très pauvres parce que leurs parents claquent tout leur argent respectivement dans les salades bio et dans les 4x4 citadins. Vous décidez d'​aider une des deux petites filles aujourd'​hui en lui achetant l'​objet qu'​elle convoite, mais n'avez pas le temps d'​aider les deux. À laquelle allouez-vous vos ressources ? Celle qui en a le plus besoin ? Celle qui a besoin du plus de ressources ? Celle dont les parents sont les plus influents ? Je vous laisse choisir.
  
 Maintenant, imaginez que la situation se reproduise chaque jour, que les deux petites filles soient des processus qui veulent du temps de calcul, et que vous êtes un noyau. Maintenant, imaginez que la situation se reproduise chaque jour, que les deux petites filles soient des processus qui veulent du temps de calcul, et que vous êtes un noyau.
Ligne 74: Ligne 75:
 <note important>​Clairement,​ si vous ne voulez pas qu'une des deux petites filles ne meurt de faim, il va falloir trouver un moyen de leur donner du temps de calcul à toutes les deux. Mais pour des raisons écologiques,​ vous allez peut-être plus souvent acheter des pommes que des ipommes.</​note>​ <note important>​Clairement,​ si vous ne voulez pas qu'une des deux petites filles ne meurt de faim, il va falloir trouver un moyen de leur donner du temps de calcul à toutes les deux. Mais pour des raisons écologiques,​ vous allez peut-être plus souvent acheter des pommes que des ipommes.</​note>​
  
-Revenons un instant à notre vendeur. Le fait qu'il n'ait toujours pas réussit ​à faire une addition alors que ça fait 1h qu'il tripote sa calculatrice ne vous semble pas tout à fait normal ? Si vous voulez mon avis, le problème vient du fait que les 30ms sont un peu trop courtes, et qu'il gâche tout son temps à reprendre le calcul là où il en était. Mais le rallonger à 1h, ce ne serait pas très agréable pour jongler entre le shell et le navigateur. C'est votre avis également ? Bravo, vous pensez comme un ordonnanceur !+Revenons un instant à notre vendeur. Le fait qu'il n'ait toujours pas réussi ​à faire une addition alors que ça fait 1h qu'il tripote sa calculatrice ne vous semble pas tout à fait normal ? Si vous voulez mon avis, le problème vient du fait que les 30ms sont un peu trop courtes, et qu'il gâche tout son temps à reprendre le calcul là où il en était. Mais le rallonger à 1h, ce ne serait pas très agréable pour jongler entre le shell et le navigateur. C'est votre avis également ? Bravo, vous pensez comme un ordonnanceur !
  
 ==== Des jumeaux différents ==== ==== Des jumeaux différents ====
Ligne 86: Ligne 87:
 <code user>​nano /​tmp/​test_minishell.c</​code>​ <code user>​nano /​tmp/​test_minishell.c</​code>​
  
-<code c>#​include <​stdio.h>​+<file c test_minishell.c> 
 +#include <​stdio.h>​
 #include <​unistd.h>​ #include <​unistd.h>​
 #include <​string.h>​ #include <​string.h>​
Ligne 114: Ligne 116:
   return 0;   return 0;
 } }
-</code>+</file> 
  
 <code user>gcc -o /​tmp/​test_minishell /​tmp/​test_minishell.c</​code>​ <code user>gcc -o /​tmp/​test_minishell /​tmp/​test_minishell.c</​code>​
 <code user>/​tmp/​test_minishell</​code>​ <code user>/​tmp/​test_minishell</​code>​
-Ctrl-c pour interrompre le shell.+<​key>​C-c</​key> ​pour interrompre le shell.
 Attention, ce mini-shell n'​accepte pas les commandes avec arguments.</​note>​ Attention, ce mini-shell n'​accepte pas les commandes avec arguments.</​note>​
 ===== Les interruptions matérielles ===== ===== Les interruptions matérielles =====
Ligne 138: Ligne 141:
 <code root>od -t x1 -w3 /​dev/​input/​mice</​code>​ <code root>od -t x1 -w3 /​dev/​input/​mice</​code>​
 Bougez votre souris. Bougez votre souris.
-Ctrl-c pour quitter.</​note>​+<​key>​C-c</​key> ​pour quitter.</​note>​
  
 //Pouf.// Vous avez atteint le lien, et l'avez subtilement éraflé du clic, afin de visiter la page des nouvelles contributions. //Pouf.// Vous avez atteint le lien, et l'avez subtilement éraflé du clic, afin de visiter la page des nouvelles contributions.
Ligne 187: Ligne 190:
 " | nc debian-facile.org 80 | less</​code>​ " | nc debian-facile.org 80 | less</​code>​
  
-Ce qui se traduit en bon françoy par [i]Envoyer la requête HTTP du echo sur le port 80 de la machine derrière le nom ''​debian-facile.org''​ et en afficher la réponse grace au pager ''​[[:​doc:​editeurs:​less|less]]''​.+Ce qui se traduit en bon françoy par //Envoyer la requête HTTP du echo sur le port 80 de la machine derrière le nom ''​debian-facile.org''​ et en afficher la réponse grace au pager ''​[[:​doc:​editeurs:​less|less]]''​.//
 (''​q''​ pour quitter) (''​q''​ pour quitter)
 </​note>​ </​note>​
doc/systeme/noyau/theorie.1392137446.txt.gz · Dernière modification: 11/02/2014 17:50 par captnfab

Pied de page des forums

Propulsé par FluxBB