Forum Linux.général comment un ordi avec un seul CPU peut faire du multi tache

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
2
7
jan.
2019

Bonjour à tous.

Voila je vais prendre l'exemple ci dessous, ca illustra bien mon probleme de compréhension.

je lance un programme (qui est une boucle infini) dans un shell via la commande ./mon_programme

le noyau va donc laisser la main à mon programme, et donc sur le CPU seulement mon programme tourne. Et donc le noyau ne tourne plus car le CPU exécute les instructions de mon programme. Comment le noyau peut reprendre la main alors que le seul processus en READY est mon programme ?

voila merci d'avance pour votre aide

  • # Grace aux pauses

    Posté par  . Évalué à 2. Dernière modification le 07/01/19 à 13:03.

    Le CPU n'execute pas en permanence ta boucle. Il :

    1. Exécute une partie,
    2. Fait une pause, regarde s'il n'y a ni blocage ni autre tache importante a faire,
    3. Puis re-execute une partie de ta boucle et ainsi de suite.

    C'est le noyau qui gère cela.
    Si je me rappel bien, une des différences entre ubuntu desktop et ubuntu server se fait au niveau du temps défini entre chaque pause :)

    • [^] # Re: Grace aux pauses

      Posté par  (site Web personnel) . Évalué à 10.

      Plus exactement le multitâche préemptif avec l'algorithme round robin (cas classique, la plupart des appareils ont un fonctionnement très proche) fonctionne comme suit.

      Le CPU ne peut exécuté qu'une instruction à la fois, mais le CPU ne fait pas que de l'exécution d'instruction. Il possède aussi des timers ou des entrées / sorties qui sont indépendantes des instructions qu'il exécute. C'est du parallélisme vrai au niveau électronique.

      Le noyau va enregistrer dans le vecteur d'interruptions du processeur quelques fonctions internes. L'objectif est qu'en cas d'une interruption, ou disons un évènement au niveau du processeur comme l'expiration d'un timer, l'arrivée d'une donnée depuis le réseau, etc. le noyau exécute une fonction pour traiter rapidement cet évènement. Ce traitement suspend l'exécution en cours du programme utilisateur.

      Du coup pour réaliser du multitâche, le noyau va configurer toutes les X millisecondes (souvent autour de 10-20) un timer au niveau du processeur. Quand le timer expire, le noyau est appelé pour évaluer quel est le prochain programme à exécuter durant la prochaine fenêtre de temps, et sauvegarder l'état du processus qui venait d'être exécuté. Et ainsi de suite. Comme ces changements se font rapidement, l'utilisateur n'y voit que du feu. Et pourtant ton processeur n'exécute qu'une instruction processeur à la fois.

      • [^] # Re: Grace aux pauses

        Posté par  (site Web personnel) . Évalué à 2.

        Rien à ajouter, si ce n'est que cet excellent bouquin explique ces principes de base de fonctionnement d'un système d'exploitation en prenant exemple sur la première version de Linux: Conception de systèmes d'exploitation - Le cas Linux, je recommande pour comprendre le fonctionnement bas niveau du noyau.

      • [^] # Re: Grace aux pauses

        Posté par  . Évalué à 1.

        Alors merci beaucoup pour vos reponses !

        donc si j'ai bien compris, dans le CPU il y a une sorte de compteur (fait avec une succession de bascule RS par exemple) et quand le compteur arrive à une certaine valeur, alors un bit est déclenché ce qui va changer
        le registre PC du CPU pour allez à l'adresse ou se trouve les instructions du noyau c'est un peu ca l'idée ?

  • # l'interet du noyau multitache

    Posté par  . Évalué à 2.

    si tu avais un noyau monotache, en effet, il ne pourrait faire qu'une chose à la fois
    mais comme c'est vite bloquant, on a inventé le noyau multitache

    qui, pour une durée de CPU données disons 1000
    va faire des tranches de 10
    et toutes les 10 unités va regarder s'il y a autre chose à faire

    • [^] # Re: l'interet du noyau multitache

      Posté par  . Évalué à 2.

      Je pense que la question était "comment le noyau reprend la main s'il a lancé un truc infini". Je crois que la réponse est dans les anneaux de protection ou "ring" : le noyau tourne dans une couche prioritaire du CPU.

      ⚓ À g'Auch TOUTE! http://afdgauch.online.fr

      • [^] # Re: l'interet du noyau multitache

        Posté par  (site Web personnel) . Évalué à 6.

        Les anneaux n'ont pas vraiment d'impact sur l'ordonnancement. Ils ne servent qu'à limiter les droits des applications normales, qui doivent dialoguer avec le noyau pour obtenir les données souhaitées depuis une zone qui leur est directement interdite : la mémoire physique, les périphériques, le réseau, etc.

        L'ordonnancement est de la responsabilité du noyau car ce sont les fonctions du noyau qui sont dans le vecteur d'interruptions. Et via une interruption, de temps en temps, le processeur appelle le noyau pour effectuer cet ordonnancement. Note que le processeur par ailleurs n'a pas conscience de cela, c'est le noyau qui configure les timers du CPU pour générer une interruption qui va servir à piloter l'ordonnancement.

  • # Ordonnancement

    Posté par  . Évalué à 4.

    Si le sujet t'intéresse, les mots clés dans ton moteur de recherche favoris son "Ordonnancement" ou "Scheduling" en anglais

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.