web-dev-qa-db-fra.com

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 noyau, les threads de noyau, les processus de noyau et la pile de noyau signifient-ils la même chose? Aussi, pourquoi avons-nous besoin de cette différenciation?

124
kc3

La réponse vraiment simplifiée est que le noyau s'exécute dans l'espace noyau et que les programmes normaux s'exécutent dans l'espace utilisateur. L'espace utilisateur est fondamentalement une forme de sand-boxing - il restreint les programmes utilisateur afin qu'ils ne puissent pas jouer avec la mémoire (et d'autres ressources) appartenant à d'autres programmes ou au noyau du système d'exploitation. Cela limite (mais n'élimine généralement pas en totalité) leur capacité à faire des choses mauvaises, comme un crash de la machine.

Le noyau est le noyau 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 souhaitez généralement que le code le plus fiable et le mieux testé soit exécuté en mode noyau/espace noyau.

La pile est juste une autre partie de la mémoire, elle est donc naturellement séparée du reste de la mémoire.

108
Jerry Coffin

La mémoire vive (RAM) peut être divisée logiquement en deux régions distinctes: l’espace noyau et l’espace utilisateur. ( Le Les adresses physiques du RAM ne sont pas réellement divisées mais uniquement les adresses virtuelles , tout cela implémenté par le MMU )

Le noyau s'exécute dans la partie de la mémoire qui lui est consacrée. Les processus des utilisateurs normaux ne peuvent pas accéder directement à cette partie de la mémoire, car 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, à savoir open, read, write etc. De plus, la bibliothèque C fonctionne comme printf appelle l'appel système write à 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 s’embrouiller 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 confier temporairement le contrôle à la routine de traitement d'interruption associée. Le processus de noyau qui a été interrompu par l'interruption reprend après la fin du travail du programme de traitement d'interruption.

61
Aquarius_Girl

L'espace noyau et l'espace virtuel sont des concepts de mémoire virtuelle .... cela ne signifie pas que Ram (votre mémoire réelle) est divisée en noyau et espace utilisateur . Chaque processus reçoit une mémoire virtuelle qui est divisée en noyau et espace utilisateur.

Ainsi dit "La mémoire vive (RAM) peut être divisée en deux régions distinctes: l’espace noyau et l’espace utilisateur." est faux.

& concernant "l'espace entre le noyau et l'espace utilisateur"

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

21
Varun Sharma

L'espace noyau et l'espace utilisateur constituent la séparation des fonctions du système d'exploitation privilégiées et des applications utilisateur restreintes. La séparation est nécessaire pour empêcher les applications utilisateur de piller votre ordinateur. Ce serait une mauvaise chose si un ancien programme utilisateur puisse commencer à écrire des données aléatoires sur votre disque dur ou à lire 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, aussi le noyau du système d’exploitation en gère-t-il l’accès au nom du programme. Les programmes d’espace utilisateur font généralement de telles demandes du système d’exploitation par le biais d’appels système.

Les fils du noyau, les processus, la pile ne signifient pas la même chose. Ce sont des constructions analogues pour l’espace noyau en tant que leurs équivalents dans l’espace utilisateur.

10
Dave Rager

Chaque processus dispose de sa propre mémoire virtuelle de 4 Go, mappée à la mémoire physique par le biais de tables de pages. La mémoire virtuelle est généralement 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 s'appelle l'espace utilisateur. La dernière partie est l'endroit où réside le noyau et est commune à tous les processus. C'est ce qu'on appelle l'espace du noyau et la plus grande partie de cet espace est mappée aux emplacements de départ de la mémoire physique où l'image du noyau est chargée au démarrage.

7
pflz

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

Sur les systèmes dotés de registres d’adresses 32 bits, la taille maximale de l’espace adresse est de 2.32 octets, ou 4 Gio . De même, sur les systèmes 64 bits, 264 les octets peuvent être adressés.

Cet espace adresse est appelé mémoire virtuelle ou espace adresse virtuel . Ce n'est pas réellement lié à la taille physique RAM.

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

Une constante spécifique à l'architecture appelée taille limite de tâche, ou TASK_SIZE, marque l'emplacement de la division:

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

  • le reste de TASK_SIZE jusqu'à 232-1 ou 264-1) est attribué à l'espace du noyau.

Sur un système 32 bits particulier, par exemple, 3 Gio pourraient être occupés pour l'espace utilisateur et 1 Gio 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 identifiant unique appelé identificateur de processus (ou simplement ID de processus, 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 être constitué de plusieurs threads partageant les mêmes données et ressources, mais empruntant des chemins différents dans le code du programme. Linux fournit un appel système clone() pour générer des threads.

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

5
RajKumar Rampelli

En bref: le noyau fonctionne dans l’espace noyau, l’espace noyau dispose d’un accès complet à toute la mémoire et à toutes les ressources; vous pouvez dire que la division de la mémoire est divisée en deux parties: space 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 existe 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 processeur de fonctionner en deux modes, Mode noyau et Mode utilisateur , l’instruction Hardware 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 s'exécute en mode utilisateur, elle ne peut accéder qu'à la mémoire qui se trouve dans l'espace utilisateur. Tandis que le processeur tente d'accéder à la mémoire dans l'espace du noyau, le résultat est une "exception matérielle". à la fois l'espace du noyau et l'espace utilisateur ...

3

Par Sunil Yadav, sur Quora:

Le noyau Linux fait référence à tout ce qui fonctionne en mode noyau et est composé de plusieurs couches distinctes. Au niveau le plus bas, le noyau interagit avec le matériel via le HAL. Au niveau intermédiaire, le Le noyau UNIX est divisé en 4 zones distinctes. Le premier des quatre zones gère les périphériques de caractère, TTY et terminal bruts et cuits manipulation. La deuxième zone gère les pilotes de périphériques réseau, le routage protocoles et prises. La troisième zone traite les pilotes de périphérique de disque, caches de page et de tampon, système de fichiers, mémoire virtuelle, nommage de fichier et cartographie. Le quatrième et dernier domaine traite de la répartition des processus, planification, création et terminaison ainsi que traitement du signal. Au-dessus de tout cela, nous avons la couche supérieure du noyau qui inclut appels système, interruptions et pièges. Ce niveau sert de interface à chacune des fonctions de niveau inférieur. Un programmeur utilise les différents appels système et interruptions pour interagir avec les fonctionnalités du système d'exploitation.

2
Vijay Ram

L'espace noyau signifie qu'un espace mémoire ne peut être touché que par le noyau. Sur Linux 32 bits, il s'agit de 1G (de 0xC0000000 à 0xffffffff comme adresse de mémoire virtuelle). Chaque processus créé par le noyau est également un fil du noyau. Ainsi, pour un processus, il existe deux piles: une pile dans l'espace utilisateur pour ce processus et une autre dans le noyau espace pour le fil du noyau.

la pile du noyau occupait 2 pages (8 Ko en Linux 32 bits), inclut une tâche_struct (environ 1 Ko) et la pile réelle (environ 7 Ko). Ce dernier est utilisé pour stocker des variables auto ou des paramètres d’appel de fonction ou une adresse de fonction dans les fonctions du noyau. Voici le code (Processor.h (linux\include\asm-i386)):

#define THREAD_SIZE (2*PAGE_SIZE)
#define alloc_task_struct() ((struct task_struct *) __get_free_pages(GFP_KERNEL,1))
#define free_task_struct(p) free_pages((unsigned long) (p), 1)

__get_free_pages (GFP_KERNEL, 1)) signifie allouer de la mémoire en tant que 2 ^ 1 = 2 pages.

Mais la pile de processus est une autre chose, son adresse est juste au-dessous de 0xC0000000 (linux 32 bits), sa taille peut être beaucoup plus grande, utilisée pour les appels de fonction d’espace utilisateur.

Voici donc une question posée pour l'appel système, il est exécuté dans l'espace noyau mais a été appelé par processus dans l'espace utilisateur, comment cela fonctionne-t-il? Linux mettra-t-il ses paramètres et son adresse de fonction dans la pile du noyau ou de la pile de processus? Solution Linux: tous les appels système sont déclenchés par une interruption logicielle INT 0x80 . Définie dans entry.S (linux\Arch\i386\kernel), voici quelques lignes par exemple:

ENTRY(sys_call_table)
.long SYMBOL_NAME(sys_ni_syscall)   /* 0  -  old "setup()" system call*/
.long SYMBOL_NAME(sys_exit)
.long SYMBOL_NAME(sys_fork)
.long SYMBOL_NAME(sys_read)
.long SYMBOL_NAME(sys_write)
.long SYMBOL_NAME(sys_open)     /* 5 */
.long SYMBOL_NAME(sys_close)
2
user991800

Dans l’espace noyau court, la partie de la mémoire où le noyau Linux s’exécute (1 Go d’espace virtuel dans le cas de Linux) et l’espace utilisateur est la partie de la mémoire dans laquelle l’exécution de veux en savoir plus le voir le lien donné ci-dessous :)

http://learnlinuxconcepts.blogspot.in/2014/02/kernel-space-and-user-space.html

2
JIN007

Essayer de donner une explication très simplifiée

La mémoire virtuelle est divisée en espace noyau et espace utilisateur . L'espace noyau est la zone de mémoire virtuelle où les processus du noyau seront exécutés et l'espace utilisateur est 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.

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

1
Nanobrains

La mémoire se divise en deux zones distinctes:

  • L'espace utilisateur, qui est un ensemble d'emplacements où s'exécutent des processus utilisateur normaux (c'est-à-dire tout ce qui est autre que le noyau). Le noyau a pour rôle de gérer les applications en cours d'exécution dans cet espace afin d'éviter tout problème avec la machine.
  • L'espace du noyau, qui est l'emplacement où le code du noyau est stocké et exécuté sous.

Les processus exécutés sous l'espace utilisateur n'ont accès qu'à une partie limitée de la mémoire, alors que le noyau a accès à toute la mémoire. Les processus exécutés dans l'espace utilisateur n'ont également pas accès à l'espace du noyau. Les processus de l'espace utilisateur ne peuvent accéder qu'à une petite partie du noyau via une interface exposée par le noyau - les appels système. Si un processus effectue un appel système, une interruption logicielle est envoyée au noyau, qui envoie ensuite le gestionnaire d'interruption approprié et continue. son travail après que le gestionnaire a fini.

0
gopika

L'espace 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 .  enter image description here

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

En raison de cette conception, vous donnez une protection du système ou un environnement de travail exécuté.

Le noyau est un morceau de code qui gère votre matériel et fournit une abstraction du système. Il doit donc avoir accès à toutes les instructions de la machine. Et c'est le logiciel le plus fiable. Je devrais donc être exécuté avec le privilège le plus élevé. Et niveau de sonnerie 0 est le mode le plus privilégié. Ainsi, niveau de sonnerie 0 est également appelé Mode noyau.

Les applications utilisateur sont des logiciels fournis par des fournisseurs tiers et vous ne pouvez leur faire entièrement confiance. Une personne mal intentionnée peut écrire un code pour bloquer votre système s’il dispose d’un accès complet à toutes les instructions de la machine. Donc, l'application devrait avoir accès à un ensemble limité d'instructions. Et Ring Level 3 est le mode le moins privilégié. Donc, toutes vos applications fonctionnent dans ce mode. C'est pourquoi niveau de sonnerie 3 est également appelé Mode utilisateur.

Remarque: je ne reçois pas les niveaux de sonnerie 1 et 2. Ce sont des modes avec des privilèges intermédiaires. Il est donc possible que le code du pilote de périphérique soit exécuté avec ce privilège. application utilisateur, respectivement} _

Ainsi, toute opération effectuée en mode noyau peut être considérée comme un espace noyau ..__ Et toute opération effectuée en mode utilisateur peut être considérée comme un espace utilisateur.

0
Darshan L

La réponse correcte est la suivante: l'espace noyau et l'espace utilisateur n'existent pas. Le jeu d'instructions du processeur dispose d'autorisations spéciales pour définir des éléments destructeurs tels que la racine de la mappe de tables de pages, accéder à la mémoire du périphérique matériel, etc.

Le code du noyau a les privilèges de niveau le plus élevé et le code d'utilisateur le plus bas. Cela empêche le code utilisateur de planter le système, de modifier d’autres programmes, etc.

Généralement, le code du noyau est conservé dans une mappe de mémoire différente de celle du code utilisateur (tout comme les espaces utilisateur sont conservés dans des mappes de mémoire différentes). C’est d’où viennent les termes «espace noyau» et «espace utilisateur». Mais ce n’est pas une règle absolue. Par exemple, étant donné que x86 exige indirectement que ses gestionnaires d'interruption/interruption soient mappés à tout moment, une partie (ou certains systèmes d'exploitation uniquement) du noyau doit être mappée sur l'espace utilisateur. Encore une fois, cela ne signifie pas que ce code a des privilèges d’utilisateur.

Pourquoi la division noyau/utilisateur est-elle nécessaire? Certains concepteurs ne sont pas d'accord pour dire que c'est en fait nécessaire. L'architecture du micro-noyau repose sur l'idée que les sections de code avec les privilèges les plus élevés devraient être aussi réduites que possible, toutes les opérations importantes étant effectuées dans le code avec privilèges d'utilisateur. Vous auriez besoin d'étudier pourquoi cela pourrait être une bonne idée, ce n'est pas un concept simple (et est célèbre pour ses avantages et ses inconvénients).

0
Scott Franco