¿Para qué sirve una pila?

Los usuarios de las calculadoras Hewlett-Packard que gustan de su forma de manejo, llamado RPN (Reverse Polish Notation), puede ser que no sepan que han estado usando una pila para almacenar los números. En vez de presionar la secuencia de teclas "5", "+", "8" y "=" para calcular la suma de 5 más 8, utilizan la secuencia "5", "enter", "8", "enter" y "+", la cual empuja (operación push) el número 5 en la pila, igualmente para el número 8 y luego la operación de suma retira (operaciones pop) los dos números del tope de la pila, los suma y deja el resultado en el tope.

Las computadoras usan la pila para guardar las direcciones de retorno de las subrutinas. Para poder digerir ésta última oración, empecemos por notar que los programadores no hacen los programas en un solo bloque de 10.000 líneas o más, sino que los dividen en segmentos más pequeños llamados subrutinas (o procedimientos, o funciones, o métodos, según el lenguaje de programación). Esto reduce la repetición de líneas porque las secuencias de instrucciones más comunes son convertidas en subrutinas y se llaman a estas subrutinas en vez de repetir las secuencias. Por ejemplo, tenemos una secuencia de instrucciones que nos ordena alfabéticamente una lista de nombres y necesitamos ordenar varias listas en diversas partes del programa. En vez de repetir la misma secuencia de instrucciones en cada parte, convertimos la secuencia en una subrutina y la invocamos cada vez que la necesitemos.

Los programas son secuencias de instrucciones. Estas instrucciones están almacenadas en la memoria y cada celda de memoria tiene asociada una dirección. Para ejecutar o correr los programas, las computadoras se valen de un apuntador de instrucciones (instruction pointer, o IP), que contiene la dirección de la celda de memoria que contiene la próxima instrucción a ser ejecutada. O sea, la computadora lee la celda de memoria que contiene la próxima instrucción, incrementa el apuntador de instrucciones, ejecuta la instrucción, y repite la secuencia indefinidamente.

Durante la ejecución de un programa, cuando la computadora encuentra una llamada de subrutina, guarda el contenido del apuntador de instrucciones en la pila (y que podríamos llamar dirección de retorno), sustituye el apuntador de instrucciones por la dirección de la primera instrucción de la subrutina y continúa la ejecución, esta vez con las instrucciones de la subrutina. Al llegar al final de la subrutina, la computadora busca en la pila el valor anterior del apuntador de instrucciones y así continuar con la secuencia anterior, que puede ser a su vez otra subrutina.

En el ejemplo, la instrucción 3 que está en la dirección 10003 es una llamada a la subrutina que comienza en la dirección 20001. El apuntador de instrucciones, que contiene la dirección de la próxima instrucción a ejecutarse, es guardado en la pila.
Ahora el apuntador de instrucciones (IP) señala a la primera instrucción de la subrutina. La computadora incrementará el IP y ejecutará la instrucción 1 de la subrutina.
Al terminar de ejecutar la subrutina, se recupera el valor del IP (10004), se incrementa (para seguir apuntando a la siguiente instrucción a ejecutarse), y se ejecuta la instrucción 4.

Ahora solamente nos falta ver los registros de activación.

 

<<<< Página anterior
^^^^ Página principal
Registros de activación >>>>

Última actualización: 4/11/02