Materia: #organizacion_del_computador_II

Tags: Memoria, Arquitectura Intel 64

La pila

La pila es un área de memoria contigua, referencia por un segmento cuyo selector está siempre en el registro ss del procesador. El tamaño de este segmento puede llegar a los 4 Gbytes, en especial cuando el sistema operativo utiliza el modelo de segmentacion flat.

El segmento se recorre mediante un registro de propósito general, denominado habitualmente en forma genérica stack pointer, y que en estos procesadores según el modo de trabajo es el registro sp, esp o bsp (16, 32 o 64 bits, respectivamente).

El stack es un segmento expand down, ya que a medida que lo utilizamos (con la intruccion push) su registro de desplazamiento se decrementa apuntando a las direcciones mas bajas (por eso down) de memoria, es decir, aquellas numéricamente menores.


Usos

Las operaciones de pila se pueden realizar en cualquier momento, pero hablando mas generalmente, podemos afirmar que la pila se usa cuando:


Alineación del Stack

El stack pointer debe apuntar a direcciones de memoria alineadas de acuerdo con su ancho de bits. Al definir un stack en memoria, uno como programador debe procurar mantener la alineación.

El tamaño de cada segmento de la pila se corresponde con el atributo de tamaño del segmento (16, 32 o 64 bits), es decir, con el modo de trabajo en el que está el procesador, y no con el del operando en sí.


Llamados a funciones

A la hora de hacer un llamado a función, o manejar las interrupciones, la pila es vital para el funcionamiento de dichas operaciones. Una vez iniciamos un llamado, lo primero que hace el procesador es reservar la direccion de memoria de la linea de codigo de llamado en la pila, para luego acceder a la funcion llamada, que seguro esta en otro lugar de la memoria.

Tras cumplir la subrutina, y si todo se manejo correctamente desde el software, la operacion ret saca el elemento de la pila (con pop) donde deberia estar la direccion que guardamos. El programa retorna ahi, y continua con su procedimiento habitual.

En el caso de las interrupciones es bastante similiar, pero en lugar de ir a una funcion, el procesador se va de manera predeterminada a las operaciones de manejo de instrucciones (que se encuentran predefinidas dentro de la unidad de control).