Qu'est-ce que cela signifie lorsque le code est exécuté en mode noyau ou utilisateur?
Mode noyau
Un programme exécuté dans ce mode a un accès complet au matériel sous-jacent. Il peut exécuter n'importe quelle instruction CPU, accéder à n'importe quelle adresse mémoire et faire essentiellement ce qu'il veut.
Le code du mode utilisateur exécuté dans ce mode est limité à la modification du matériel via l'API du système d'exploitation. Il ne peut pas accéder directement au matériel .
La chose intéressante ici est que sur les architectures courantes, cela est appliqué via le matériel - pas seulement le système d'exploitation. En particulier, l' architecture x86 possède des anneaux de protection .
Le gros avantage de ce type de séparation est que lorsqu'un programme plante en mode utilisateur, il n'est pas toujours fatal. En fait, sur les systèmes modernes, ce n'est généralement pas le cas.
Découvrez les écrits de Jeff . Ce sont ses bonnes choses habituelles.
La réponse courte est: elle vous indique simplement où les programmes passent leur temps.
Pour une réponse plus longue, je vais l'expliquer en deux étapes. Premier:
1. Entrer en mode noyau
Chaque code normal que vous écrivez s'exécute en "mode utilisateur".
Les programmes peuvent utiliser des bibliothèques pour effectuer des tâches courantes à leur place. Il s'agit également du code du mode utilisateur.
À un certain point, le programme peut nécessiter une fonction de base du système. Par exemple:
Cette fonctionnalité essentielle - proche du matériel - fait partie du noyau. C'est le programme central derrière tout sur votre ordinateur. Il gère tout ce dont les programmes ont besoin pour fonctionner.
Pour utiliser une fonction dans le noyau, le chemin d'exécution du programme passe littéralement du mode utilisateur au code noyau. Le noyau fait son travail et replie le chemin d'exécution en mode utilisateur.
Lorsqu'un programme passe beaucoup de temps en mode noyau, cela signifie souvent qu'il fait beaucoup d'activités liées au matériel. Par exemple, recherche de disque ou streaming vidéo. Le matériel peut également être défectueux; rendant le traitement lent et obligeant le programme à passer une quantité inhabituelle de temps dans l'espace du noyau.
2 la différence
Le code dans l'espace du noyau est très performant. Les autres parties du noyau peuvent l'appeler directement et le code a un accès direct à toutes les ressources du système, sans vérification des limites. La commutation entre le mode noyau / utilisateur est également une opération coûteuse, qui est complètement évitée en exécutant tout dans le code du noyau.
Cependant, à l'intérieur du noyau, il n'y a pas beaucoup de place pour le contrôle de sécurité, la protection contre les plantages ou l'écriture dans les mauvaises parties de la mémoire. Ce sont des services que le noyau peut fournir à d'autres programmes. Il incite les programmes à croire que le monde est différent (les programmes vivent dans un environnement virtuel, en bac à sable / restreint) et donc tout ce qui entre / sort des programmes peut être traduit et protégé.
Le noyau lui-même ne peut pas avoir beaucoup de protection car il n'y a rien derrière lui pour le protéger. C'est le cœur du système, et quand cela s'arrête, tout se termine. Vous obtenez une panique du noyau, ou sur Windows, le fameux BSOD.
C'est également le risque de code basé sur le noyau, et la raison pour laquelle davantage de sous-systèmes avec de faibles exigences de performances sont déplacés vers l'espace utilisateur. Cependant, les parties essentielles liées au matériel sont généralement du code du noyau qui ne changera pas de si tôt.
Il s'agit de savoir si le code en cours d'exécution est autorisé à interagir directement avec divers éléments matériels. Le code en mode noyau peut écrire sur les bus de périphériques, modifier les mappages de mémoire, changer de processus en cours d'exécution, etc. Le mode utilisateur peut effectuer des calculs et effectuer des appels système dans le noyau pour interagir avec le reste du monde.