La relation entre les instructions privilégiées, les pièges et les appels système
Je suis en train d'essayer de comprendre comment un moniteur de la machine virtuelle (VMM) virtualise le CPU.
Ma compréhension est que le PROCESSEUR problèmes d'une défaillance de protection interrompre lorsque privilégié d'instruction est sur le point d'être exécutée alors que le CPU est en mode utilisateur. Dans des langages comme C, a privilégié les instructions sont enveloppés à l'intérieur d'appels système. Par exemple, lorsqu'une application a besoin de la date et l'heure actuelles (les instructions qui interagissent avec les périphériques d'e/S sont privilégiés), il demande une certaine fonction de la bibliothèque. L'assemblé version de cette fonction de la bibliothèque contient une instruction appelée " int " qui provoque un piège dans le CPU. La CPU passe à partir du mode utilisateur au mode privilégié et les sauts à la trappe gestionnaire de l'OS. Chaque appel système a son propre piège gestionnaire. Dans cet exemple, le piège gestionnaire lit la date et l'heure de l'horloge matérielle et retourne, puis le CPU passe lui-même à partir privilégié au mode utilisateur. (source: http://elvis.rowan.edu/~hartley/Courses/OperatingSystems/Handouts/030Syscalls.html)
Cependant, je ne suis pas tout à fait sûr que cette compréhension est correcte. Cet article mentionne la notion que l' (privilégié) x86 popf instruction n'a pas pour cause un piège, et complique les choses pour la VMM: http://www.csd.uwo.ca/courses/CS843a/papers/intro-vm.pdf. Dans ma compréhension du popf enseignement ne devrait pas causer un piège, mais une erreur de protection interrompre, lorsqu'il est explicitement appelé par un programme utilisateur et non par le biais d'un appel système.
Donc mes deux questions sont les suivantes:
- Ce qui se passe quand un programme utilisateur exécute un lieu privilégié d'instruction alors que le CPU est en mode utilisateur?
- Ce qui se passe quand un programme utilisateur effectue un appel système?
source d'informationauteur datwelk | 2013-05-18
Vous devez vous connecter pour publier un commentaire.
Dans aucun ordre particulier:
Votre confusion est causée principalement par le fait que les systèmes d'exploitation de la communauté n'ont pas de vocabulaire normalisé. Voici quelques termes que obtenir en bandoulière autour de qui veut parfois dire la même chose, parfois non: exceptionfauteinterrompreappel systèmeet piège. Tout individu auteur va généralement utiliser les termes de manière uniforme, mais les différents auteurs définissent différemment.
Il y a 3 différents types d'événements qui provoquent l'entrée en mode privilégié.
int
sur les architectures x86). (Plus généralement, dans le x86 ces manuels sont appelés pièges et comprennent un couple de d'autres instructions (pour les débogueurs la plupart du temps.))Chaque interruption, piège ou à la faute d'un nombre différent associé avec elle.
Dans tous les cas:
iret
sur x86.) (C'est la distinction subtile entre une faute et un piège sur x86: défauts de retour à l'instruction qui a provoqué l'erreur, les pièges de retour à l'instruction après le piège.)Note le confondant le nom de "vecteur d'interruption de la table." Même s'il est appelé un interrompre table, il est utilisé pour les défauts et les pièges. (Ce qui conduit certains auteurs à l'appel tout une interruption.)
La
popf
question est plutôt subtile. Il s'agit essentiellement d'un bug dans l'architecture x86. Lorsquepopf
exécute depuis le mode utilisateur, il ne pas cause d'un piège ou d'anomalie (ou d'une exception ou d'une interruption ou ce que vous voulez l'appeler.) Il agit simplement comme un noop.Est-ce important? Eh bien, pour une normale de l'OS, il n'a pas vraiment d'importance. Si, d'autre part, vous êtes à la mise en œuvre d'un moniteur de machines virtuelles (comme VMWare ou Xen ou Hyper-V), la VMM est en cours d'exécution en mode protégé, et que vous voulez exécuter les systèmes d'exploitation invités en mode utilisateur et efficacement émuler tout code en mode protégé. Lorsque le système d'exploitation invité utilise un
popf
d'instructions, vous voulez pour générer une erreur de protection générale, mais il ne le fait pas. (Lecli
etsti
instructions de générer une erreur de protection générale si elle est appelée depuis le mode utilisateur, qui est ce que vous voulez.)Je ne suis pas un expert en architecture des ordinateurs. Mais j'ai plusieurs opinions pour votre considération:
load/store
partir de la mémoire protégée, etc.system calls
. Et si l'utilisateur du programme d'appels d'eux, il va provoquer une exception (jette un interruption logicielle), quiles vecteurs d'un noyau de gestionnaire,
trap
à noyau modes et passer des contextes.trap
au mode noyau. En fonction de ce qui s'est passé, il serait l'un des plusieurs pièges, comme une violation d'accès mémoire, une instruction illégale de violation ou un registre de violation d'accès. Le piège des commutateurs du processeur de l'exécution de mode noyau et les commutateurs de contrôle pour le système d'exploitation, qui décide ensuite d'un plan d'action. L'adresse est définie par la piège vecteurqui est mis en place lorsque le système d'exploitation démarre.