118 votes

Quel est le sens de la pousse de la pile dans des systèmes plus modernes ?

Je me prépare à certains matériaux de formation en C et je veux que mes exemples d’ajuster le modèle de pile typique.

Ce que la direction pousse une pile C sous Linux, Windows, Mac OSX (PPC et x86), Solaris et les plus récents systèmes Unix ?

164voto

paxdiablo Points 341644

Croissance de la pile n'a pas l'habitude dépendent du système d'exploitation lui-même, mais sur le processeur, c'est en cours d'exécution sur. Solaris, par exemple, fonctionne sur x86 et SPARC. Mac OSX (comme vous l'avez mentionné) fonctionne sur PPC et x86. Linux fonctionne sur tout, de mon grand honkin' System z au travail pour un peu chétifs montre-bracelet.

Les processeurs et leurs sens sont:

x86          down
SPARC        in a circle, very clever architecture, see below.
PPC          down, I think.
System z     in a linked list, I kid you not.
             (but still down, at least for zLinux).
ARM          selectable (thanks, Michael Burr).
Mostek6502   down (but only 256 bytes).
RCA1802A     any way you want, subject to SCRT implementation.
PDP11        down.

Montrant mon âge sur ces derniers, l'1802 a été la puce utilisée pour contrôler le début des navettes (détection si les portes étaient ouvertes, je le soupçonne, basé sur la puissance de traitement qu'il avait :-) et mon deuxième ordinateur, le port COMX-35 (à la suite de mon ZX80).

En aparté:

PDP11 détails glanés partir d' ici.

L'architecture SPARC, par ailleurs, est un exemple d'une étrange architecture de pile - c'est un tampon circulaire avec une fenêtre coulissante, donnant une profondeur limitée de la pile. Voir ici pour plus de détails.

Le cadre de la SCRT technique est un autre - l'1802 utilisé une partie ou il est seize registres 16 bits pour les SCRT (standard d'appel et de retour de la technique). L'un était le compteur de programme, vous pouvez utiliser n'importe quel registre du PC avec l' SEP Rn enseignement. L'un est le pointeur de pile et les deux étaient toujours à la point de la SCRT adresse de code, un appel, un pour le retour. Pas de registre a été traité d'une manière spéciale. Gardez à l'esprit que ces détails sont à partir de la mémoire, ils peuvent ne pas être tout à fait correcte.

Par exemple, si R3 est le PC, R4 a la SCRT adresse d'appel, R5 a été le SCRT adresse de retour et R2 est de la "pile" (entre guillemets, comme il est mis en œuvre dans le logiciel) SEP R4 aurait la valeur de R4 pour être le PC et commencer à courir le SCRT appel code.

Il serait alors magasin R2 R3 sur la "pile" (je pense que R6 a été utilisé pour le stockage temporaire), le réglage vers le haut ou vers le bas, prenez les deux octets suivants de R3, les charger dans R3, alors n' SEP R3 et être en cours d'exécution à la nouvelle adresse.

De retour, il pourrait SEP R5 qui permettrait de tirer le vieux adresse hors du R2 de la pile, y ajouter deux (pour sauter les octets d'adresse de l'appel), le charger dans R3 et SEP R3 pour démarrer l'exécution du code précédent.

Très difficile pour envelopper votre tête autour de initialement après tous les 6502/6809/z80 basée sur la pile de code mais toujours élégant dans un bang votre tête contre le mur. Aussi l'une des grandes caractéristiques de vente de la puce a 16 registres 16 bits, et vous avez immédiatement perdu 7 de ceux (5 pour SCRT, deux pour les DMA et les interruptions de la mémoire). Ahh, le triomphe du marketing sur la réalité.

Système z est en fait assez similaire, à l'aide de son R14 et R15 registres d'appel/retour.

24voto

J.F. Sebastian Points 102961

En C++ (adaptable aux C) stack.cc:

9voto

mP. Points 7516

L’avantage de plus en plus vers le bas est dans des systèmes plus anciens, que la pile a été généralement dans la partie supérieure de la mémoire. Mémoire généralement rempli de programmes à partir du bas donc ce genre de gestion de la mémoire réduit la nécessité de mesurer et de placer le bas de la pile quelque part sensible.

7voto

Michael Points 34110

Pile pousse vers le bas sur x86 (défini par l’architecture, le pointeur de pile incréments pop, le poussoir décrémente.)

2voto

Kai Points 2573

Elle pousse vers le bas parce que la mémoire allouée au programme a les « données permanentes » c'est-à-dire un code pour le programme lui-même à la partie inférieure, puis le tas au milieu. Vous avez besoin d’un autre point fixe permettant de faire référence à la pile, alors que les feuilles vous haut. Cela signifie que la pile se développe vers le bas, jusqu'à ce qu’il est potentiellement adjacent aux objets sur le tas.

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