A quoi sert le registre “FS” / “GS”?

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

Mais à quoi servent les registres suivants?

  • FS = “Segment de fichier”?

  • GS = ???

Remarque: je ne vous pose pas de questions sur un système d’exploitation particulier – je me demande ce que le processeur était censé utiliser, le cas échéant.

Il y a ce à quoi ils étaient destinés, et à quoi ils sont utilisés par Windows et Linux.

L’intention initiale derrière les registres de segment était de permettre à un programme d’accéder à de nombreux segments de mémoire (de grande taille) destinés à être indépendants et faisant partie d’un magasin virtuel persistant. L’idée a été tirée du système d’exploitation 1966 Multics , qui traitait les fichiers comme de simples segments de mémoire adressables. Non BS “Ouvrir un fichier, écrire un enregistrement, fermer un fichier”, il suffit de “Stocker cette valeur dans ce segment de données virtuel” avec le vidage de la page en question.

Nos systèmes d’exploitation actuels de 2010 constituent un grand pas en arrière, ce qui explique pourquoi ils sont appelés “Eunuchs”. Vous ne pouvez adresser que le segment unique de votre espace de traitement, en donnant un espace d’adressage dit “plat (IMHO dull)”. Les registres de segments sur la machine x86-32 peuvent toujours être utilisés pour des registres de segments réels, mais personne ne s’y intéresse (Andy Grove, ancien président d’Intel, a fait une entrée publique célèbre au siècle dernier. son argent pour mettre en œuvre cette fonctionnalité, que personne n’allait l’utiliser. Allez, Andy!)

En passant à 64 bits, AMD a décidé de ne pas choisir Multics (ce qui est une interprétation charitable, car ils ne savaient rien de Multics) et a donc désactivé la capacité générale des registres de segment en mode 64 bits. Les threads avaient toujours besoin d’accéder au magasin local de threads, et chaque thread nécessitait un pointeur … quelque part dans l’état de thread immédiatement accessible (par exemple, dans les registres) … pour placer un magasin local. Comme Windows et Linux utilisaient tous deux FSand GS (merci Nick pour la clarification) à cette fin dans la version 32 bits, AMD a décidé de laisser les registres de segments 64 bits (GS et FS) être utilisés uniquement à cette fin (je pense que vous pouvez faites-les pointer n’importe où dans votre espace de processus, ne sais pas si le code de l’application peut les charger ou non. Intel dans sa panique de ne pas perdre de parts de marché à AMD sur 64 bits, et Andy étant à la retraite, a décidé de copier le schéma d’AMD.

IMHO aurait été plus joli sur le plan architectural pour que la carte mémoire de chaque thread ait une adresse virtuelle absolue (par exemple, 0-FFF) qui était son stockage local de thread (aucun pointeur de registre [segment] nécessaire!); Je l’ai fait dans un OS 8 bits dans les années 70 et c’était extrêmement pratique, comme avoir une autre grosse stack de registres dans laquelle travailler.

Ainsi, les registres de segments ressemblent maintenant à votre annexe. Ils servent à des fins vestigiales. À notre perte collective.

Ceux qui ne connaissent pas l’histoire ne sont pas condamnés à le répéter. ils sont condamnés à faire quelque chose de plus bête.

Les registres FS et GS sont des registres de segments. Ils n’ont pas de finalité définie par le processeur, mais sont plutôt utilisés par les systèmes d’exploitation qui les exécutent. Dans Windows 64 bits, le registre GS est utilisé pour désigner les structures définies par le système d’exploitation. FS et GS sont couramment utilisés par les kernelx OS pour accéder à la mémoire spécifique aux threads. Dans Windows, le registre GS est utilisé pour gérer la mémoire spécifique au thread. Le kernel Linux utilise GS pour accéder à la mémoire spécifique au processeur.