crecimiento de la pila por lo general no dependen del sistema operativo en sí, sino en el procesador que se está ejecutando. Solaris, por ejemplo, se ejecuta en x86 y SPARC. Mac OSX (como usted mencionó) se ejecuta en PPC y x86. Linux funciona en todo, desde mi gran honkin 'System z at work hasta puny little wristwatch.
Si la CPU ofrece algún tipo de opción, la convención de llamadas ABI utilizada por el sistema operativo especifica qué opción debe realizar si desea que su código llame al código de todos los demás.
Los procesadores y su dirección son:
x86 down
SPARC selectable. The standard ABI uses down.
PPC down, I think.
System z in a linked list, I kid you not.
(but still down, at least for zLinux).
ARM selectable, but Thumb2 has compact encodings only for down (LDMIA (increment after)/STMDB (decrement before))
Mostek6502 down (but only 256 bytes).
RCA1802A any way you want, subject to SCRT implementation.
PDP11 down.
mostrando mi edad en esos últimos, el 1802 fue el chip se utiliza para controlar las primeras lanzaderas (detección de si las puertas estaban abiertas, sospecho, sobre la base de el poder de procesamiento que tenía :-) y mi segunda computadora, el COMX-35 (siguiendo mi ZX80).
PDP11 detalles recogidos de here.
La arquitectura SPARC utiliza un modelo de registro de ventana deslizante. Los detalles arquitectónicamente visibles también incluyen un búfer circular de ventanas de registro que son válidas y se almacenan en caché internamente, con trampas cuando se sobrepasa/subdesborda. Ver here para más detalles. Como the SPARCv8 manual explains, las instrucciones GUARDAR y RESTAURAR son como las instrucciones ADD más la rotación de la ventana de registro. Usar una constante positiva en lugar del negativo habitual daría una pila ascendente.
La técnica SCRT antes mencionado es otro - el 1802 utilizaron algunos o Es dieciséis registros de 16 bits para SCRT (llamada estándar a la técnica de retorno). Uno era el contador del programa, puede usar cualquier registro como la PC con la instrucción SEP Rn
. Uno era el puntero de la pila y dos se establecieron siempre para apuntar a la dirección del código SCRT, una para la llamada y otra para el retorno. No registro fue tratado de una manera especial. Tenga en cuenta que estos detalles son de memoria, es posible que no sean totalmente correctos.
Por ejemplo, si R3 era la PC, R4 era la dirección de llamada SCRT, R5 era la dirección de retorno SCRT y R2 era la "pila" (citas como se implementa en el software), SEP R4
configuraría R4 para ser la PC y comienza a ejecutar el código de llamada SCRT.
Sería entonces tienda de R3 en la R2 "pila" (creo que R6 se utiliza para el almacenamiento temporal), ajustándolo hacia arriba o hacia abajo, agarra los dos bytes siguientes R3, ellos cargar en R3, y luego hacer SEP R3
y estar corriendo en la nueva dirección.
Para regresar, sería SEP R5
que tirar de la antigua dirección de la pila R2, agregue dos a él (para saltar los bytes de dirección de la llamada), cargarlo en R3 y SEP R3
para empezar a ejecutar el código anterior.
Muy difícil de entender después de todo el código basado en la pila 6502/6809/z80, pero sigue siendo elegante en una especie de bang-tu-cara contra la pared. Además, una de las principales características de venta del chip fueron 16 registros de 16 bits, e inmediatamente se perdieron 7 de ellos (5 para SCRT, dos para DMA e interrupciones de la memoria). Ahh, el triunfo del marketing sobre la realidad.
El sistema z es en realidad bastante similar, utilizando sus registros R14 y R15 para llamada/devolución.
A por qué versión a la baja: http://stackoverflow.com/questions/2035568/why-do-stacks-typically-grow-downwards –