134 votes

Qu'est-ce que le "FS"/"GS" registre destiné?

Donc je sais ce que les registres suivants et leurs utilisations sont censés être:

  • CS = Segment de Code (utilisé pour les IP)

  • DS = Segment de Données (utilisé pour MOV)

  • ES = Destination Segment (utilisé pour MOV, etc.)

  • SS = Segment de Pile (utilisé pour SP)

Mais quels sont les registres suivants, destinés à être utilisés pour?

  • FS = "Fichier de Segment"?

  • GS = ???

Note: je suis pas poser sur un système d'exploitation -- je veux parler de ce qu'ils étaient destinés à être utilisés par le CPU, si quoi que ce soit.

143voto

Ira Baxter Points 48153

Il y a de quoi ils sont destinés, et ce qu'ils sont utilisés par Windows et Linux.

L'origine, l'intention derrière les registres de segment a été de permettre à un programme d'accès à de nombreux différents (grande) des segments de mémoire qui ont été conçu pour être indépendant et d'une partie d'une persistance de la boutique virtuelle. L'idée a été prise à partir de l' 1966 Multics système d'exploitation, que les fichiers traités comme de simples segments de mémoire adressable. No BS "Ouvrir un fichier, écrire enregistrer, fermer le fichier", juste "Stocker cette valeur dans le virtuel segment de données" à la page sale rinçage.

Notre courant 2010 systèmes d'exploitation sont un pas de géant en arrière, qui est pourquoi ils sont appelés "Eunuques". Vous pouvez seulement de l'adresse de votre espace de processus unique segment, donnant un soi-disant "plat" à mon humble avis terne) l'adresse de l'espace". Les registres de segment sur le x86-32 machine peut encore être utilisé pour les registres de segment, mais personne n'a pris la peine (Andy Grove, ancien Intel président, avait un célèbre publique ajustement siècle dernier, quand il a compris, après toutes ces Intel ingénieurs ont passé énergie et son argent pour mettre en place cette fonctionnalité, que personne n'allait l'utiliser. Allez, Andy!)

AMD va 64 bits décidé qu'ils ne se soucient pas si ils ont éliminé Multics comme un choix (c'est la charité de l'interprétation; la uncharitable est qu'ils étaient désemparés sur Multics) et donc désactivé le général-capacité de registres de segment en mode 64 bits. Il y a toujours un besoin pour les threads d'accéder fil de magasin, et chaque thread a besoin d'un pointeur ... quelque part dans le immédiatement accessible état du thread (e.g, dans les registres) ... au fil de magasin. Depuis Windows et Linux utilisé FS à cet effet dans la version 32 bits, AMD a décidé de laisser le 64 bits registres de segment (GS et FS) être essentiellement utilisé uniquement à cette fin (je pense que vous pouvez les faire n'importe où dans votre espace de processus; je ne sais pas si le code de l'application peut charger ou pas). Intel dans leur panique de ne pas perdre des parts de marché d'AMD sur 64 bits, et Andy être à la retraite, a décidé de simplement copier AMD régime.

Il aurait été architecturalement plus joli à mon humble avis, pour faire de chaque fil de la mémoire de la carte disposent d'une adresse virtuelle (e.g, 0-FFF dire) qui a été son thread local storage (pas de [segment] registre pointeur de la nécessaire!); Je l'ai fait en 8 bits OS de retour dans les années 1970 et c'était très pratique, un peu comme avoir une grosse pile de registres de travail.

Ainsi, les registres de segment sont maintenant un peu comme votre annexe. Ils servent un vestige de but. À notre perte collective.

Ceux qui ne connaissent pas l'histoire ne sont pas condamnés à la répéter; ils sont condamnés à faire quelque chose de stupide.

64voto

cytinus Points 1184

Les registres FS et GS sont des registres de segment. Ils n'ont pas de processeur-le but défini, mais au lieu de cela, le but par le système d'exploitation de leur exécution. Sous Windows l' GS registre est utilisé pour le point de fonctionnement du système de structures définies. FS et GS sont couramment utilisés par les OS, les noyaux d'accès thread spécifique de la mémoire. Dans windows, l' GS registre est utilisé pour gérer thread spécifique de la mémoire. Le noyau linux utilise l' GS d'accès spécifique au processeur de la mémoire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X