Quelle est la représentation physique du tas et de la pile?

9

Je peux facilement comprendre comment .bss et le code ont des représentations physiques dans le processeur qui a une banque de mémoire pour les instructions qu'un compteur de programme peut compter et le bss (symbole de démarrage de bloc) n'est que des données globales. Mais il y a ensuite la pile pour les variables locales et le tas pour la mémoire dynamique. Comment ces choses sont-elles mises sur le circuit physiquement?

Niklas
la source

Réponses:

6

Remarque: Je me réfère principalement à x86 car je le connais le mieux et il est largement documenté:

Sur x86 (et la plupart des autres architectures), la pile réside simplement en mémoire comme tout le reste. Le processeur manipule la pile via un pointeur, qui est généralement stocké dans un registre (le pointeur de pile). Les instructions push et pop changeront la valeur du pointeur de pile, en changeant où se trouve le haut de la pile.

Le tas est une abstraction logicielle . Comme son nom l'indique, c'est juste un morceau de RAM auquel un allocateur tranche et distribue des pointeurs. En termes physiques, le tas ne ressemble à aucune autre partie de la RAM.

La pagination et la segmentation sont cependant tangentiellement liées au tas. Ils concernent principalement le multitâche, où les processus ne peuvent pas être autorisés à modifier la RAM qu'ils ne possèdent pas explicitement.

Mathew Hall
la source
3
La pagination concerne davantage la gestion de la mémoire en général - l'unité à laquelle la mémoire physique est mappée à une adresse logique - que les seules restrictions d'accès, bien que ces dernières aient tendance à être appliquées en tant que fonctionnalité supplémentaire de l'unité de gestion de la mémoire.
Chris Stratton
4

Logiquement, la pile et le tas ne sont généralement que de la mémoire; au niveau de la mise en œuvre cependant, ils seront, espérons-le, servis principalement à partir du cache. Dans la plupart des systèmes, ils y parviennent dynamiquement via des algorithmes de mise en cache, mais il y a eu des systèmes qui prennent en charge la localisation explicite dans le cache ou une autre mémoire plus rapide que d'habitude, et probablement aussi ceux qui prennent en charge les indications laissant que des données particulières devraient avoir une priorité préférentielle pour y être placées comme l'espace le permet.

Il est à espérer que la conception de logiciels de bas niveau et de générateurs de code de compilateur tient compte de l'organisation de l'accès aux données, ce qui est susceptible d'entraîner une bonne utilisation du cache, par rapport à des échecs constants du cache.

Certains processeurs ont un registre d'adresse de retour, qui fonctionne comme une sorte de cache de pile explicite à une profondeur (il y a probablement aussi ceux avec plusieurs piles matérielles profondes, bien que des exemples ne me viennent pas à l'esprit).

Chris Stratton
la source