Quelle est la différence entre les modes utilisateur et noyau dans les systèmes d'exploitation?

quelles sont les différences entre le Mode utilisateur et le mode noyau, pourquoi et comment activer l'un d'eux, et quels sont leurs cas d'utilisation?

87

7 réponses

  1. Kernel Mode

    en mode noyau, le code d'exécution est complet et illimité l'accès au matériel sous-jacent. Il peut exécuter n'importe quelle instruction CPU et référence n'importe quelle adresse de mémoire. Noyau le mode est généralement réservé au niveau le plus bas, fonctions les plus fiables le système d'exploitation. Les accidents dans en mode noyau sont catastrophiques; ils mettra fin à l'ensemble du PC.

  2. Mode Utilisateur

    en mode utilisateur, le code d'exécution n'a pas la capacité d'accéder directement matériel ou mémoire de référence. Code l'exécution en mode utilisateur doit déléguer à APIs système pour accéder au matériel ou mémoire. En raison de la protection accordée par cette sorte d'isolement, les accidents dans le mode utilisateur est toujours récupérable. La plupart des du code qui s'exécute sur votre ordinateur s'exécutera en mode utilisateur.

lire la suite""

comprendre le Mode utilisateur et noyau

125
répondu rahul 2014-03-24 00:07:39

ce sont deux modes différents dans lesquels votre ordinateur peut fonctionner. Avant cela, quand les ordinateurs étaient comme une grande pièce, si quelque chose se brise – il arrête l'ordinateur entier. Les architectes informatiques décident donc de le changer. Les microprocesseurs modernes mettent en œuvre dans le matériel au moins deux états différents.

mode utilisateur:

  • mode où tous les programmes utilisateurs exécutent. Il n'a pas accès à la RAM et le matériel. La raison pour cela est parce que si tous les programmes couru dans en mode noyau, ils seraient capables d'écraser la mémoire de l'autre. Si il doit accéder à l'une de ces fonctionnalités – il fait un appel à la API sous-jacente. Chaque processus a commencé par windows à l'exception du système le processus s'exécute en mode utilisateur.

mode noyau:

  • mode où tous les programmes du noyau s'exécutent (pilotes différents). Il a accès à toutes les ressources et au matériel sous-jacent. Toute instruction CPU peuvent être exécutées et chaque adresse mémoire est accessible. Ce mode est réservé aux conducteurs qui opèrent au niveau le plus bas

comment l'interrupteur se produit.

le passage du mode utilisateur au mode noyau n'est pas effectué automatiquement par CPU. Le CPU est interrompu par des interruptions (minuteries, clavier, e/s). Lorsque l'interruption se produit, le CPU arrête d'exécuter le programme courant, passe en mode noyau, exécute le gestionnaire d'interruption. Ce gestionnaire sauve L'état du CPU, exécute ses opérations, restaurer l'état et retourne au mode utilisateur.

http://en.wikibooks.org/wiki/Windows_Programming/User_Mode_vs_Kernel_Mode

http://tldp.org/HOWTO/KernelAnalysis-HOWTO-3.html

http://en.wikipedia.org/wiki/Direct_memory_access

http://en.wikipedia.org/wiki/Interrupt_request

43
répondu Salvador Dali 2012-10-02 06:14:28

un processeur dans un ordinateur tournant sous Windows a deux modes différents: le mode utilisateur et le mode noyau. Le processeur passe d'un mode à l'autre en fonction du type de code qui tourne sur le processeur. Les Applications fonctionnent en mode utilisateur, et les composants du système d'exploitation central fonctionnent en mode noyau. Alors que de nombreux pilotes en mode noyau, certains pilotes peuvent s'exécuter en mode utilisateur.

Lorsque vous démarrez une application en mode utilisateur, Windows crée un processus pour l'application. Le processus fournit à l'application un espace d'adresse virtuel privé et une table de poignée privée. Comme l'espace d'adresse virtuel d'une application est privé, une application ne peut pas modifier des données qui appartiennent à une autre application. Chaque application fonctionne de manière isolée, et si une application s'écrase, le plantage est limité à cette seule application. D'autres applications et le système d'exploitation ne sont pas affectés par l'accident.

En plus d'être privé, l'espace d'adressage virtuel d'une application en mode utilisateur est limité. Un processeur tournant en mode utilisateur ne peut pas accéder aux adresses virtuelles qui sont réservées pour le système d'exploitation. La limitation de l'espace d'adresse virtuel d'une application en mode utilisateur empêche l'application de modifier, et peut-être endommager, les données critiques du système d'exploitation.

tout le code qui s'exécute en mode noyau partage un seul espace d'adresse virtuelle. Cela signifie qu'un pilote en mode noyau n'est pas isolé des autres pilotes et l'exploitation le système lui-même. Si un pilote en mode noyau écrit accidentellement à la mauvaise adresse virtuelle, les données qui appartiennent au système d'exploitation ou à un autre pilote pourraient être compromises. Si un pilote en mode noyau tombe en panne, tout le système d'exploitation tombe en panne.

Si vous êtes un utilisateur de Windows une fois de passer par ce lien, vous obtiendrez plus.

Communication entre le mode utilisateur et le mode noyau

8
répondu Sangeen 2016-06-03 08:20:03

je vais prendre un coup dans le noir et je suppose que vous parlez de fenêtres. En bref, le mode noyau a un accès complet au matériel, mais pas le mode utilisateur. Par exemple, beaucoup, si ce n'est la plupart des pilotes de périphériques sont écrits en mode noyau parce qu'ils ont besoin de contrôler des détails plus fins de leur matériel.

Voir aussi ce wikibook .

5
répondu Mark Rushakoff 2009-08-21 11:27:46

D'autres réponses expliquaient déjà la différence entre le mode utilisateur et le mode noyau. Si vous voulez vraiment entrer dans les détails, vous devriez obtenir une copie de Windows Internals , un excellent livre écrit par Mark Russinovich et David Solomon décrivant l'architecture et les détails intérieurs des différents systèmes D'exploitation Windows.

3
répondu Dirk Vollmar 2009-08-21 11:52:13

les anneaux CPU sont la distinction la plus claire

en mode protégé x86, le CPU est toujours dans l'un des 4 anneaux. Le noyau Linux n'utilise que 0 et 3:

  • 0 pour kernel
  • 3 pour les utilisateurs

C'est la définition la plus dure et la plus rapide du noyau vs userland.

pourquoi Linux n'utilise pas les cycles 1 et 2: CPU Anneaux de privilège: pourquoi les anneaux 1 et 2 ne sont pas utilisés?

comment détermine-t-on l'anneau actuel?

l'anneau courant est sélectionné par une combinaison de:

  • global descriptor table: une table en mémoire de GDT d'entrées, chaque entrée a un champ Privl qui code pour l'anneau.

    l'instruction LGDT fixe l'adresse à l'actuelle table de descripteur.

    Voir aussi: http://wiki.osdev.org/Global_Descriptor_Table

  • le segment enregistre CS, DS, etc., qui pointent vers l'index d'une entrée dans le GDT.

    par exemple, CS = 0 signifie que la première entrée du GDT est actuellement active pour le code d'exécution.

que peut faire chaque bague?

la puce CPU est physiquement construite de sorte que:

  • ring 0 ne pouvez rien faire

  • ring 3 ne peut pas exécuter plusieurs instructions et d'écrire à plusieurs registres, notamment:

    • ne peut pas changer sa propre bague! Sinon, il pourrait se mettre à l'anneau 0 et les anneaux seraient inutiles.

      En d'autres termes, ne peut pas modifier l'actuel segment descripteur , qui détermine l'anneau courant.

    • ne peut pas modifier les tableaux de page: Comment fonctionne x86 paging?

      en d'autres termes, ne peut pas modifier le registre CR3, et paging lui-même empêche la modification des tableaux de page.

      ceci empêche un processus de voir la mémoire d'autres processus pour la sécurité / la facilité de programmation raisons.

    • ne peut enregistrer les manipulateurs d'interruption. Ceux-ci sont configurés en écrivant à des emplacements de mémoire, qui est également empêchée par la pagination.

      Gestionnaires d'exécuter en ring 0, et de casser le modèle de sécurité.

      en d'autres termes, ne peut pas utiliser les instructions LGDT et LIDT.

    • ne peut pas faire des instructions comme in et out , et ont donc des accès matériels arbitraires.

      autrement, par exemple, les permissions de fichiers seraient inutiles si n'importe quel programme pouvait lire directement à partir du disque.

      plus précisément grâce à Michael Petch : il est en fait possible pour L'OS d'autoriser io instructions sur le ring 3, cela est en fait contrôlé par le segment D'état de tâche .

      ce qui n'est pas possible est pour anneau 3 pour se donner la permission de le faire si elle ne l'avait pas en premier lieu.

      Linux le refuse toujours. Voir aussi: pourquoi Linux n'utilise-t-il pas le commutateur de contexte matériel via le TSS?

comment les programmes et les systèmes d'exploitation font-ils la transition entre les anneaux?

  • lorsque le CPU est tourné sur, il commence à exécuter le programme initial en ring 0 (bien gentil, mais c'est une bonne approximation). Vous pouvez penser que ce programme initial est le noyau (mais c'est normalement un bootloader qui appelle alors le noyau toujours dans le ring 0).

  • lorsqu'un processus userland veut que le noyau fasse quelque chose pour lui comme écrire dans un fichier, il utilise une instruction qui génère une interruption telle que int 0x80 pour signaler le noyau.

    Lorsque cela se produit, le CPU appelle et interrompt le gestionnaire de rappel que le noyau a enregistré au démarrage.

    ce gestionnaire tourne dans le ring 0, qui décide si le noyau va permettre cette action, faire l'action, et redémarrer le programme userland dans le ring 3.

  • lorsque l'appel système exec est utilisé (ou lorsque le noyau démarre /init ), le noyau prépare les registres et la mémoire du nouveau processus userland, puis il saute au point d'entrée et commute le CPU à l'anneau 3

  • si le programme essaie de faire quelque chose de mal, comme écrire à un registre interdit ou à une adresse mémoire (à cause de la pagination), le CPU appelle aussi un gestionnaire de rappel du noyau dans le ring 0.

    mais puisque l'userland était méchant, le noyau pourrait tuer le processus cette fois, ou lui donner un avertissement avec un signal.

  • lorsque le noyau démarre, il configure une horloge matérielle avec une fréquence fixe, qui génère des interruptions périodiques.

    cette horloge matérielle génère des interruptions qui s'exécutent ring 0, et lui permettent de programmer quels processus userland pour se réveiller.

    de cette façon, l'ordonnancement peut se produire même si les processus ne font aucun appel système.

Quel est l'intérêt d'avoir plusieurs anneaux?

il y a deux avantages majeurs à séparer kernel et userland:

  • il est plus facile de faire des programmes car vous êtes plus certain que l'un ne va pas interférer avec l'autre. Par exemple, un processus userland n'a pas à se soucier d'écraser la mémoire d'un autre programme à cause de la pagination, ni de mettre le matériel dans un état invalide pour un autre processus.
  • c'est plus sûr. Par exemple: les permissions de fichiers et la séparation de la mémoire pourrait empêcher une application de piratage de lire vos données bancaires. Cela suppose, bien sûr, que vous ayez confiance dans le noyau.

Comment jouer un peu avec elle?

j'ai créé une configuration en métal nu qui devrait être une bonne façon de manipuler les anneaux directement: https://github.com/cirosantilli/x86-bare-metal-examples

Je n'ai pas eu la patience de faire un exemple userland malheureusement, mais je suis allé jusqu'à la configuration de paging, donc userland devrait être faisable. J'aimerais voir une pull request.

alternativement, les modules du noyau Linux tournent dans le ring 0, de sorte que vous pouvez les utiliser pour essayer des opérations privilégiées, par exemple lire les registres de contrôle: comment accéder aux registres de contrôle cr0,cr2,cr3 à partir d'un programme? Erreur de segmentation

Voici un pratique qemu + Buildroot setup pour l'essayer sans tuer votre hôte.

l'inconvénient des modules du noyau est que d'autres kthreads sont en cours d'exécution et pourraient interférer avec vos expériences. Mais en théorie, vous pouvez prendre en charge tous les gestionnaires d'interruption avec votre module du noyau et posséder le système, ce serait un projet intéressant en fait.

Négatif anneaux

Alors que les anneaux négatifs ne sont pas réellement référencés dans le manuel Intel, il existe en fait des modes CPU qui ont d'autres capacités que l'anneau 0 lui-même, et sont donc un bon ajustement pour le nom "anneau négatif".

un exemple est le mode hyperviseur utilisé dans la virtualisation.

pour plus de détails voir: https://security.stackexchange.com/questions/129098/what-is-protection-ring-1

ARM

dans ARM, les anneaux sont appelés niveaux D'Exception à la place, mais les idées principales restent les mêmes.

Il existe 4 exception niveaux en ARMv8, couramment utilisé comme:

  • EL0: userland

  • EL1: noyau

  • EL2: hypervisors , par exemple Xen .

    un hyperviseur est à un OS, ce qu'un OS est à un userland.

    par exemple, Xen vous permet d'exécuter plusieurs os comme Linux ou Windows sur le même système en même temps, et il isole les os les uns des autres pour la sécurité et la facilité de débogage, tout comme Linux le fait pour les programmes userland.

    les hyperviseurs sont un élément clé de l'infrastructure cloud d'aujourd'hui: ils permettent à plusieurs serveurs de fonctionner sur un seul matériel, garder l'utilisation du matériel toujours proche de 100% et économiser beaucoup d'argent.

    AWS par exemple utilisé Xen, jusqu'en 2017, lors de la de son déplacement à KVM fait la une des journaux .

  • EL3: encore un autre niveau. TODO exemple.

the ARMv8 Architecture Reference Model DDI 0487C.a - chapitre D1-le modèle du programmeur au niveau du système AArch64-Figure D1-1 illustre cela magnifiquement:

enter image description here

notez comment ARM, peut-être en raison de l'avantage du recul, a une meilleure convention de nommage pour les niveaux de privilèges que x86, sans la nécessité de niveaux négatifs: 0 étant le plus bas et 3 le plus élevé. Les niveaux supérieurs ont tendance à être créés plus souvent que les niveaux inférieurs.

2

Ce

fondamentalement, la différence entre les modes noyau et utilisateur n'est pas dépendante du système D'exploitation et n'est obtenue qu'en limitant certaines instructions à être exécutées uniquement en mode noyau au moyen de la conception matérielle. Toutes les autres fins comme la protection de la mémoire ne peuvent être faites que par cette restriction.

Comment

signifie que le processeur vit soit en mode noyau, soit en mode le mode utilisateur. En utilisant certains mécanismes, l'architecture peut garantir que chaque fois qu'elle passe en mode noyau, le code OS est récupéré pour être exécuté.

pourquoi

disposant de cette infrastructure matérielle, ceux-ci pourraient être atteints en OSS communs:

  • protéger les programmes utilisateurs d'accéder à toute la mémoire, de ne pas laisser les programmes écraser L'OS par exemple,
  • la prévention de la les programmes utilisateurs de l'exécution des instructions sensibles telles que celles qui changent les limites de pointeur de mémoire CPU, pour ne pas laisser les programmes briser leurs limites de mémoire par exemple.
1
répondu Alto 2017-10-26 20:45:14