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 voxdemonix . Évalué à 2. Dernière modification le 07 janvier 2019 à 13:03.
Le CPU n'execute pas en permanence ta boucle. Il :
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 Renault (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 paulez (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 cosmoff . É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 ?
[^] # Re: Grace aux pauses
Posté par chimrod (site web personnel) . Évalué à 3.
C'est ça. Le mécanisme s'appelle Interruption_(informatique).
Tu peux aussi regarder du côté de la table des interruptions (désolé pour la mauvaise traduction), qui devrait te donner des pistes pour comprendre le fonctionnement de l'ordinateur.
# l'interet du noyau multitache
Posté par NeoX . É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 Renault (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 Pouetpouet . Évalué à 4.
Si le sujet t'intéresse, les mots clés dans ton moteur de recherche favoris son "Ordonnancement" ou "Scheduling" en anglais
[^] # Re: Ordonnancement
Posté par foobarbazz . Évalué à 2. Dernière modification le 10 janvier 2019 à 11:05.
Et préemption
https://fr.wikipedia.org/wiki/Multit%C3%A2che_pr%C3%A9emptif
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.