Passer du mode noyau au mode utilisateur (et vice versa)

8

Je lis le livre sur les systèmes d'exploitation de Galvin. Galvin explique ce que sont les modes noyau et utilisateur, les privilèges d'instructions accordés pour les deux modes et aussi pour le mode-bit. Mais je suis intéressé de savoir comment le mode passe de l'un à l'autre. Fondamentalement, je veux résoudre la question suivante:

Un CPU a 2 modes, privilégiés et non privilégiés. Pour faire passer le mode de pré-prévalu à non pré-prévalu

a) Une interruption matérielle est nécessaire

b) Une interruption logicielle est nécessaire.

c) Une instruction privilégiée est nécessaire.

d) Une instruction non privilégiée est nécessaire.

D'après ce que je comprends,

du mode utilisateur au mode noyau - une interruption matérielle est nécessaire [comme dans les E / S disque]. Maintenant, dans le cas où le programme utilisateur se fatigue pour accéder à une mémoire qui est au-delà de sa plage autorisée, un piège se produit, qui est essentiellement une interruption logicielle qui sera gérée par le système d'exploitation. Maintenant, en mode utilisateur, nous ne pouvons exécuter aucune instruction privilégiée. Ainsi, une instruction non privilégiée telle qu'une demande d'E / S peut faire passer l'utilisateur en mode noyau. Donc je pense que pour changer

de non privilégié (utilisateur) à privilégié (noyau) - les instructions H / W Interrupt, S / W Interrupt & non-Privileged feront l'affaire.

Maintenant, passons au noyau en mode utilisateur. L'OS peut changer le noyau en mode utilisateur. Ainsi, il exécutera simplement une instruction privilégiée pour passer du mode noyau au mode utilisateur. Il n'a pas besoin de générer d'interruption H / w ou S / w. Je conclus donc, pour changer

de privilégié à non-privilégié - une instruction privilégiée fera l'affaire.

Ai-je raison ?

De plus, lors de l'exécution en mode noyau, toutes les interruptions seront désactivées, n'est-ce pas? La réponse ne peut donc pas être (a) ou (b). De plus, comme OS est essentiellement un logiciel, il ne peut pas générer d'interruptions H / W.

De plus, puisque le système d'exploitation lui-même gère les interruptions, cela n'a pas de sens pour moi de devoir générer une interruption (et la réparer) pour passer du noyau au mode utilisateur.

Veuillez me faire savoir si je me trompe quelque part. Toute aide à ce sujet est appréciée.

avi
la source

Réponses:

7

Mode utilisateur en mode noyau: faux ! ;-) Oui, les interruptions sont traitées en mode noyau, et à l'origine le moyen d'entrer en mode noyau était par une interruption forcée d'une manière ou d'une autre par le logiciel. Le DEC 2020, il y avait un ensemble d'UIO (Unimplemented Instruction Opcodes), appelant l'un d'eux a provoqué un piège pour le système d'exploitation. Ils comprenaient des instructions en virgule flottante (si ce n'est pas dans le matériel) et d'autres instructions exotiques, mais aussi les moyens de faire des appels au système d'exploitation. La famille i? 86 a l' intinstruction (interruption), traditionnellement utilisée comme vous le dites. Les nouveaux membres de la famille ont SYSTENT pour téléphoner plus efficacement. Les moyens de passer en mode superviseur ne peuvent pas être privilégiés, mais doivent en quelque sorte être étroitement contrôlés par le noyau (où vous entrez dans le noyau, quels arguments vous passez, ...).

Du mode noyau au mode utilisateur: il n'est pas nécessaire de privilégier l'opération "supprimer les privilèges". Si vous n'avez pas de privilèges, les supprimer est un no-op. Mais le mécanisme exact dépend de l'architecture à l'extrême.

Interruptions désactivées dans le noyau: les interruptions indiquent une condition qui doit être gérée dès que possible (par exemple, si les données arrivées sur le net ne sont pas enregistrées sur la carte avant la prochaine arrivée, elles seront écrasées). Les interruptions sont donc très rarement désactivées. Dans les systèmes Unix originaux (et contemporains), il y avait un processeur, et le moyen le plus simple d'obtenir une région critique ("personne ne salit mes données pendant que je les modifie") était simplement de désactiver les interruptions. Des efforts ont été faits pour que les tronçons "interruption désactivée" soient aussi courts que possible en raison de ce qui précède. Sur les machines multi-CPU actuelles, la désactivation des interruptions sur une CPU ne fait pas grand chose dans ce sens; la désactivation des interruptions dans le monde est extrêmement coûteuse dans la coordination inter-CPU, donc ce n'est pas fait (ou extrêmement rarement).

vonbrand
la source
Msgstr "Pas besoin de privilégier l 'opération" drop privilèges "". Donc, vous voulez dire que pour passer du mode noyau au mode utilisateur, une instruction non privilégiée fera l'affaire. S'il s'agit d'une instruction non privilégiée, alors même un utilisateur peut l'exécuter et passer du mode noyau au mode utilisateur? Ou ai-je mal interprété?
avi
Oui, un "utilisateur normal" ne peut tout simplement pas passer en mode noyau. De plus, l' abandon de privilèges ne peut pas faire de mal, il n'a donc pas besoin d'être privilégié (en soi). Si cela sur une machine signifie par exemple frobbing des registres privilégiés, il y sera privilégié. Mais il n'a pas besoin d'être privilégié.
vonbrand
Je ne comprends pas bien. Votre commentaire et réponse précédents se contredisant. Dans le commentaire que vous avez dit, "un" utilisateur normal "ne peut tout simplement pas passer en mode noyau", mais en réponse, vous avez mentionné "" Pas besoin que l'opération "supprimer les privilèges" soit privilégiée "". Qu'est-ce qui me manque? : S Pour dire simplement, pour changer le noyau en mode utilisateur, le bit de mode doit être changé. Ce qui ne peut pas être fait en mode utilisateur à droite? Il ne peut donc pas s'agir d'instructions non privilégiées.
avi
Merde, je ne comprenais pas non plus pourquoi le mode utilisateur en mode noyau était mauvais? Dans votre explication, dans les premières lignes, vous avez mentionné que le mode utilisateur au noyau peut être fait via les instructions INT et enfin vous avez mentionné: «Les moyens de passer en mode superviseur ne peuvent pas être privilégiés». N'est-ce pas tout ce que j'ai mentionné? Interruption H / W (ce qui est évident, par exemple, demandes d'E / S), interruption S / W (instruction INT) et instruction non privilégiée.
avi
Cela peut être fait avec une interruption, mais il existe d'autres possibilités. Il ne peut pas être privilégié (s'il l'était, aucun utilisateur ne pourrait le faire ;-).
vonbrand