Question

Ce sont "Programmeur visibles" registres x86-64:


(source: usenix.org )

Et les registres invisibles? Tout à l'heure j'ai appris que les registres MMU, Interrompre Descriptor Table (IDT) utilise ces registres invisibles. J'apprends ces choses à la dure. Y at-il des ressources (livre / documentation / etc) qui me donne l'image complète à la fois?

Je suis conscient du programmeur et registres visibles à l'aise dans la programmation avec eux. Je veux juste en savoir plus sur les registres invisibles et leur fonctionnalité. Je veux obtenir une image complète. Où puis-je obtenir cette information?

EDIT:

  

Je veux obtenir une image complète. Où puis-je obtenir cette information?

Ce sont les deux livres me ont aidé à comprendre ces détails au niveau historiquement bas.

  1. Principes fondamentaux de l'organisation et la conception informatique ~ Sivarama P. Dandamudi - 1 édition (2003 )
  2. Organisation informatique et conception: Le matériel / logiciel d'interface, 4e édition, ~ David A . Patterson, John L. Hennessy
Était-ce utile?

La solution

IDT est un descripteur Interrompre Table, qui contient quelque chose comme ceci d'une vue abstraite, dix-huit premières interruptions sont réservées par le processeur, les dix-huit sont réservés par Intel pour l'avenir épreuvage l'architecture de la puce ...

Interrupt    Handler
   0         divide_by_zero_handler
   1         debug_handler
   ..           ...
   13        general_exception_handler
   14        page_fault_handler
   ..           ...
   18        machine_check_handler

Dans ce contexte, les gestionnaires font partie d'un noyau de jouet, et chacun des gestionnaires sont mis en place au démarrage, avant le code espace utilisateur chargé. (BIOS est le code de 16 bits aka réel code de mode), le noyau met en place les gestionnaires, les commutateurs à 32 bits en mode protégé, lorsque l'un quelconque des interruptions sont émises, le gestionnaire approprié est exécuté en fonction du nombre d'interruption. Par exemple, si interruption 14 a été généré, le noyau exécutera un page_fault_handler, vérifiez si la page est sale et résider sur le disque, puis chargez cette page en mémoire, corriger les adresses et effacer le bit sale, exécute une IRET Interrompre instruction Retour de continuer, effaçant les drapeaux ....

C'est une vue abstraite de la façon dont fonctionne IDT ... Il y a plus de choses complexes passe dans les coulisses ... en fonction de l'architecture et le type de gestion de la mémoire tels que paginée / plat / protégé / mode virtuel schémas d'adressage. ..

Jetez un coup d'oeil ici à la la documentation d'Intel qui donne un excellente et vue complète de la programmation Intel ...

Edit: De retour dans les vieux jours de DOS (qui était le code 16bit et pas bien, exactement la mémoire protégée), il était possible de réacheminer les gestionnaires d'interruption à vos propres gestionnaires superposant ainsi l'IDT d'origine, pour un exemple d'une telle interruption, interruption 9 qui est le clavier d'interruption (BIOS interrompt dans ce contexte) en utilisant les appels getvect(...) et setvect(...), vous pouvez aussi gérer certains (pas toutes les interruptions de traitement, notamment, IDT 0 pour diviser par zéro) ... bien que les interruptions du BIOS étaient assez semblables en apparence aux interruptions de traitement, ils partagent une caractéristique commune, les deux ont fait la table des vecteurs d'interruption (comme on l'appelait à l'époque). C'était comment TSR (Terminate Stay Resident) programmes ont été en mesure de maintenir rentrante sous DOS en raison du BIOS interrompt réacheminés vers les gestionnaires de la TSR ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top