[Linux-kernel] Quelle est la différence entre l'espace noyau et l'espace utilisateur?


Answers

La mémoire à accès aléatoire (RAM) peut être divisée logiquement en deux régions distinctes à savoir: - l'espace noyau et l'espace utilisateur ( les adresses physiques de la RAM ne sont pas réellement divisées uniquement les adresses virtuelles , toutes implémentées par la MMU )

Le noyau s'exécute dans la partie de la mémoire qui y a droit. Cette partie de la mémoire ne peut pas être accédée directement par les processus des utilisateurs normaux, alors que le noyau peut accéder à toutes les parties de la mémoire. Pour accéder à une partie du noyau, les processus utilisateur doivent utiliser les appels système prédéfinis, c'est-à-dire open , read , write etc. De plus, la bibliothèque C fonctionne comme printf appelle l'appel système à son tour.

Les appels système agissent comme une interface entre les processus utilisateur et les processus du noyau. Les droits d'accès sont placés sur l'espace du noyau afin d'empêcher les utilisateurs de jouer avec le noyau, sans le savoir.

Ainsi, lorsqu'un appel système se produit, une interruption logicielle est envoyée au noyau. La CPU peut transmettre temporairement le contrôle à la routine de gestionnaire d'interruption associée. Le processus de noyau interrompu par l'interruption reprend une fois que la routine du gestionnaire d'interruption a terminé son travail.

Question

Quelle est la différence entre l'espace noyau et l'espace utilisateur? Est-ce que l'espace du noyau, les threads du noyau, les processus du noyau et la pile du noyau signifient la même chose? Aussi, pourquoi avons-nous besoin de cette différenciation?




La taille maximale de l'espace adresse dépend de la longueur du registre d'adresses sur la CPU.

Sur les systèmes avec des registres d'adresses 32 bits, la taille maximale de l'espace d'adressage est de 2 32 octets, soit 4 GiB. De même, sur les systèmes 64 bits, 2 64 octets peuvent être adressés.

Cet espace d'adressage est appelé mémoire virtuelle ou espace d'adressage virtuel . Ce n'est pas vraiment lié à la taille de la RAM physique.

Sur les plateformes Linux, l'espace d'adressage virtuel est divisé en espace noyau et espace utilisateur.

Une constante spécifique à l'architecture appelée limite de taille de tâche , ou TASK_SIZE , marque la position où se produit le fractionnement:

  • la plage d'adresses allant de 0 à TASK_SIZE -1 est attribuée à l'espace utilisateur;

  • le reste de TASK_SIZE jusqu'à 2 32 -1 (ou 2 64 -1) est attribué à l'espace noyau.

Sur un système 32 bits particulier par exemple, 3 GiB pourraient être occupés pour l'espace utilisateur et 1 GiB pour l'espace noyau.

Chaque application / programme dans un système d'exploitation de type Unix est un processus; chacun de ceux-ci a un identificateur unique appelé Process Identifier (ou simplement Process ID , c'est-à-dire PID). Linux fournit deux mécanismes pour créer un processus: 1. l'appel système fork() , ou 2. l'appel exec() .

Un thread de noyau est un processus léger et également un programme en cours d'exécution. Un seul processus peut consister en plusieurs threads partageant les mêmes données et ressources mais empruntant des chemins différents à travers le code du programme. Linux fournit un appel système clone() pour générer des threads.

Exemples d'utilisation des threads du noyau: synchronisation des données de la RAM, aide le planificateur à répartir les processus entre les processeurs, etc.




L'espace du noyau et l'espace utilisateur sont des espaces logiques.

La plupart des processeurs modernes sont conçus pour fonctionner dans différents modes privilégiés. Les machines x86 peuvent fonctionner dans 4 modes privilégiés différents.

Et une instruction machine particulière peut être exécutée dans / au-dessus du mode privilégié particulier.

En raison de cette conception, vous donnez une protection du système ou une boîte de sable dans l'environnement d'exécution.

Le noyau est un morceau de code, qui gère votre matériel et fournit l'abstraction du système. Donc, il doit avoir accès à toutes les instructions de la machine. Et c'est le morceau de logiciel le plus fiable. Donc, je devrais être exécuté avec le plus haut privilège. Et Ring niveau 0 est le mode le plus privilégié. Donc, Ring Level 0 est aussi appelé en mode Kernel .

L'application utilisateur est un logiciel provenant d'un fournisseur tiers et vous ne pouvez pas leur faire entièrement confiance. Quelqu'un avec une intention malveillante peut écrire un code pour planter votre système s'il avait un accès complet à toutes les instructions de la machine. Donc, l'application doit être fournie avec un accès à un ensemble limité d'instructions. Et Ring Level 3 est le mode le moins privilégié. Donc, toute votre application fonctionne dans ce mode. Par conséquent, Ring Level 3 est également appelé User Mode .

Note: Je n'obtiens pas les Niveaux de Ring 1 et 2. Ce sont essentiellement des modes avec privilège intermédiaire. Ainsi, le code du pilote de périphérique peut être exécuté avec ce privilège. AFAIK, Linux utilise uniquement Ring Level 0 et 3 pour l'exécution de code noyau et l'application utilisateur respectivement.

Donc, toute opération qui se passe en mode noyau peut être considérée comme un espace noyau. Et toute opération qui se passe en mode utilisateur peut être considérée comme un espace utilisateur.




En bref: le noyau fonctionne dans l'espace noyau, l'espace noyau a un accès complet à toute la mémoire et aux ressources, vous pouvez dire la division de la mémoire en deux parties, une partie pour le noyau et une partie pour le processus utilisateur. l'espace ne peut pas accéder directement à l'espace du noyau, il demande donc au noyau d'utiliser les ressources. par syscall (appel système prédéfini dans la glibc)

il y a une déclaration qui simplifie les différents " Espace utilisateur est juste une charge de test pour le noyau " ...

Pour être très clair: l'architecture du processeur permet au CPU de fonctionner en deux modes, le mode noyau et le mode utilisateur , l'instruction matérielle permet de passer d'un mode à l'autre.

La mémoire peut être marquée comme faisant partie de l'espace utilisateur ou de l'espace noyau.

Lorsque la CPU fonctionne en mode utilisateur, la CPU ne peut accéder qu'à la mémoire de l'espace utilisateur, alors que cpu tente d'accéder à la mémoire du noyau, le résultat est une "exception matérielle", lorsque la CPU fonctionne en mode noyau. à la fois l'espace noyau et l'espace utilisateur ...




Par Sunil Yadav, sur Quora:

Le noyau Linux fait référence à tout ce qui s'exécute en mode noyau et est constitué de plusieurs couches distinctes. Au niveau le plus bas, le noyau interagit avec le matériel via le HAL. Au niveau intermédiaire, le noyau UNIX est divisé en 4 zones distinctes. Le premier des quatre domaines gère les dispositifs de caractères, ATS cru et cuit et la manipulation des terminaux. La deuxième zone gère les pilotes de périphériques réseau, les protocoles de routage et les sockets. La troisième zone gère les pilotes de périphériques de disque, les caches de page et de mémoire tampon, le système de fichiers, la mémoire virtuelle, le nommage de fichiers et le mappage. La quatrième et dernière zone s'occupe de la répartition, de la planification, de la création et de la terminaison des processus, ainsi que de la gestion des signaux. Surtout, nous avons la couche supérieure du noyau qui comprend les appels système, les interruptions et les interruptions. Ce niveau sert d'interface à chacune des fonctions de niveau inférieur. Un programmeur utilise les divers appels système et interruptions pour interagir avec les fonctionnalités du système d'exploitation.




Essayer de donner une explication très simplifiée

La mémoire virtuelle est divisée en espace noyau et en espace utilisateur. L'espace du noyau est la zone de la mémoire virtuelle où les processus du noyau s'exécuteront et l'espace utilisateur sera la zone de mémoire virtuelle où les processus utilisateur seront exécutés.

Cette division est requise pour les protections d'accès à la mémoire.

Chaque fois qu'un chargeur de démarrage démarre un noyau après l'avoir chargé dans un emplacement RAM, (généralement sur un contrôleur basé sur ARM), il doit s'assurer que le contrôleur est en mode superviseur avec les FIQ et les IRQ désactivés.




L'espace du noyau et l'espace utilisateur sont la séparation des fonctions du système d'exploitation privilégié et des applications utilisateur restreintes. La séparation est nécessaire pour empêcher les applications utilisateur de saccager votre ordinateur. Ce serait une mauvaise chose si n'importe quel ancien programme utilisateur pouvait commencer à écrire des données aléatoires sur votre disque dur ou lire de la mémoire à partir de l'espace mémoire d'un autre programme utilisateur.

Les programmes d'espace utilisateur ne peuvent pas accéder directement aux ressources système, de sorte que l'accès est géré au nom du programme par le noyau du système d'exploitation. Les programmes d'espace utilisateur effectuent généralement de telles demandes du système d'exploitation via des appels système.

Les threads du noyau, les processus, la pile ne signifient pas la même chose. Ce sont des constructions analogues pour l'espace noyau comme leurs homologues dans l'espace utilisateur.