154 votes

Quelle est la différence entre l'espace noyau et l'espace utilisateur ?

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

3 votes

1 votes

124voto

Jerry Coffin Points 237758

El vraiment La réponse simplifiée est que le noyau s'exécute dans l'espace noyau, et les programmes normaux dans l'espace utilisateur. L'espace utilisateur est essentiellement une forme de "bac à sable" : il restreint les programmes utilisateurs afin qu'ils ne puissent pas s'immiscer dans la mémoire (et les autres ressources) appartenant à d'autres programmes ou au noyau du système d'exploitation. Cela limite (mais n'élimine généralement pas complètement) leur capacité à faire de mauvaises choses comme planter la machine.

Le noyau est le cœur du système d'exploitation. Il a normalement un accès complet à toute la mémoire et au matériel de la machine (et à tout le reste de la machine). Pour que la machine soit aussi stable que possible, vous ne voulez normalement que le code le plus fiable et le mieux testé s'exécute en mode noyau/espace noyau.

La pile n'est qu'une autre partie de la mémoire, elle est donc naturellement séparée avec le reste de la mémoire.

4 votes

Disons que j'ai 10 processus dans mon système. Est-ce que chaque processus a sa propre pile qui est divisée en une pile utilisateur et une pile noyau OU tous les processus partagent une seule pile noyau ?

10 votes

@kc3 : cela dépend au moins en partie du système d'exploitation, mais je crois que la plupart ont une pile en mode noyau pour chaque processus qui est utilisée lorsque le noyau fait des choses pour le compte d'un processus (par exemple, E/S) et au moins une autre pile noyau qui est exclusivement utilisée en interne par le noyau (par exemple, pour l'ordonnancement).

2 votes

Existe-t-il des processus de noyau et quelle est la relation ou les différences avec les processus d'espace utilisateur comme demandé dans la question ?

64voto

El Mémoire à accès aléatoire (RAM) peut être logiquement divisée en deux régions distinctes, à savoir l'espace noyau et l'espace utilisateur.( El Adresses physiques de la RAM ne sont pas réellement divisées ; seules les Adresses virtuelles tout cela est mis en œuvre par le MMU )

Le noyau s'exécute dans la partie de la mémoire qui lui revient. Cette partie de la mémoire n'est pas accessible 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 utilisateurs doivent utiliser les appels système prédéfinis, à savoir open , read , write etc. En outre, le C des fonctions de bibliothèque comme printf appeler l'appel système write à tour de rôle.

Les appels système servent d'interface entre les processus utilisateurs et les processus du noyau. Les droits d'accès sont placés dans l'espace du noyau afin d'empêcher les utilisateurs de manipuler le noyau à leur insu.

Ainsi, lorsqu'un appel système se produit, une interruption logicielle est envoyée au noyau. L'unité centrale peut transférer temporairement le contrôle à la routine de gestion des interruptions associée. Le processus du noyau qui a été interrompu par l'interruption reprend une fois que la routine de gestion des interruptions a terminé son travail.

2 votes

La première partie de cette réponse est incorrecte. La RAM n'est pas divisée en espace noyau et espace utilisateur. Mémoire virtuelle est. J'ai essayé d'éditer la réponse mais la file d'attente d'édition est pleine depuis des jours. Veuillez réparer. Consultez la réponse de Varun ci-dessous pour plus d'informations.

1 votes

@MeLikeyCode N'est-ce pas une simplification justifiable dans le contexte d'une tentative de fournir une réponse largement compréhensible ?

2 votes

@problemofficer, je pense qu'une grande simplification peut fournir une mauvaise compréhension de base. Chacun devrait comprendre que la mémoire physique n'est pas divisée entre l'espace utilisateur et l'espace noyau, mais que le noyau fournit une abstraction de la mémoire virtuelle, qui est divisée entre l'espace noyau et l'espace utilisateur et qui est ensuite mappée sur une mémoire physique.

22voto

Varun Points 51

L'espace du noyau et l'espace virtuel sont des concepts de mémoire virtuelle.... cela ne signifie pas que la RAM (votre mémoire réelle) est divisée en espace noyau et espace utilisateur. Chaque processus dispose d'une mémoire virtuelle qui est divisée en espace noyau et espace utilisateur.

En disant "La mémoire vive (RAM) peut être divisée en deux régions distinctes, à savoir l'espace noyau et l'espace utilisateur" est faux.

& en ce qui concerne l'espace noyau et l'espace utilisateur.

Lorsqu'un processus est créé, sa mémoire virtuelle est divisée en un espace utilisateur et un espace noyau, où l'espace utilisateur contient les données, le code, la pile, le tas du processus et l'espace noyau contient des éléments tels que la table des pages du processus, les structures de données du noyau et le code du noyau, etc. Pour exécuter le code de l'espace noyau, le contrôle doit passer en mode noyau (en utilisant l'interruption logicielle 0x80 pour les appels système) et la pile du noyau est essentiellement partagée entre tous les processus en cours d'exécution dans l'espace noyau.

2 votes

Un processus commun a son propre espace noyau et son propre espace utilisateur ?

0 votes

@VictorChoy, un processus s'exécute en deux modes : utilisateur et noyau. La mémoire, que le processus voit, lui est unique. Mais pour chaque processus fonctionnant en mode noyau (exécutant du code noyau), il n'y a qu'un seul espace - l'espace noyau.

0 votes

Notez également que lorsqu'un processus est créé, sa mémoire virtuelle est divisée en deux parties (utilisateur et noyau), où une partie des adresses virtuelles est réservée au mode utilisateur et une autre au mode noyau.

11voto

Dave Rager Points 4682

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

Les programmes de l'espace utilisateur ne peuvent pas accéder directement aux ressources du système. L'accès est donc géré pour le compte du programme par le noyau du système d'exploitation. Les programmes de l'espace utilisateur font généralement ces demandes au système d'exploitation par le biais d'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 et leurs homologues dans l'espace utilisateur.

8voto

pflz Points 540

Chaque processus dispose de ses propres 4 Go de mémoire virtuelle qui sont mappés sur la mémoire physique par le biais de tables de pages. La mémoire virtuelle est principalement divisée en deux parties : 3 Go pour l'utilisation du processus et 1 Go pour l'utilisation du noyau. La plupart des variables que vous créez se trouvent dans la première partie de l'espace d'adressage. Cette partie est appelée espace utilisateur. La dernière partie est celle où réside le noyau et est commune à tous les processus. C'est ce qu'on appelle l'espace du noyau et la plupart de cet espace est mappé aux emplacements de départ de la mémoire physique où l'image du noyau est chargée au moment du démarrage.

1 votes

Votre réponse est spécifique à Windows ; vous devriez le préciser.

1 votes

Vous dites que pour chaque processus, sur les 4 Go de mémoire virtuelle, 1 Go est l'espace du noyau qui est le même pour chaque processus et ne contient que le mappage. Je n'arrive pas à comprendre pourquoi, pourquoi 1 Go est nécessaire uniquement pour le mappage de l'emplacement de départ ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X