Question

Résumé rapide: en mode x86-64, sont loin des sauts aussi lent que dans le mode x86-32

Sur le processeur x86, sauts se divisent en trois types:

  • bref, avec un décalage de +/- PC-127 octets (2 instruction d'octets)
  • proche, avec un décalage de +/- 32k qui "roule" le segment en cours (3 instruction d'octets)
  • far, qui peut aller nulle part (5 instruction octet)

court et sauts près de prendre 1-2 cycles d'horloge, alors que des sauts bien prendre 50-80 cycles d'horloge, selon le processeur. De ma lecture de la documentation, c'est parce qu'ils « vont à l'extérieur CS, le segment de code actuel. »

En mode x86-64, segments de code ne sont pas utilisés - Le segment est effectivement toujours 0..infinity. Ergo, il ne devrait pas être une pénalité pour aller à l'extérieur d'un segment.

Ainsi, la question: Est-ce que le nombre de cycles d'horloge changement pour un saut loin si le processeur est en mode x86-64

question bonus connexes: La plupart * nix les systèmes d'exploitation en cours d'exécution en mode protégé 32 bits définir explicitement la taille des segments à 0..infinity et gérer linéaire -> traduction physique entièrement par les tables de pages. Est-ce qu'ils obtiennent un avantage de cela en termes de temps pour les appels lointains (moins de cycles d'horloge), ou est la peine vraiment un héritage CPU interne à partir des registres de segments de taille ont été depuis 8086?

Était-ce utile?

La solution

CS est utilisé non seulement pour la base et la limite, mais aussi pour les autorisations. Le CPL est codé là, ainsi que d'autres domaines tels que:

  • D-bit - 32-bit ou la taille de segment par défaut de 16 bits
  • L bits - sélectionne la compatibilité ou 64 bits pour le segment (et dans ce cas, la base et la limite sont significatifs)

Far sauts peut également passer par une porte de la tâche, et loin appels peut également passer par des portes d'appel. Tous ces éléments doivent être traités, quel que soit le mode 64 bits.

Pour résumer, un saut loin en mode 64 bits est pas plus rapide qu'en mode 32 bits. En fait, on considère que lorsque le mode 64 bits est activé, les descripteurs de segment sont deux fois plus grande que lorsque le mode 64-bit est désactivé, tous les accès descripteur tables sont doublés, ce qui peut allonger le temps du saut.

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