En computación , una batería (en Inglés pila ) es una estructura de datos basada en el "último en entrar, primero en salir" (Inglés LIFO para el último en entrar, primero en salir ), lo que significa que, en general, el último elemento, sumado a la stack, será el primero en salir.
La mayoría de los microprocesadores administran de forma nativa una pila para llamadas de rutina. Luego corresponde a un área de la memoria y el procesador retiene la dirección del último elemento.
En la arquitectura x86 de 32 bits, el registro ESP se utiliza para indicar la dirección de la parte superior de una pila en la RAM . El empuje y pop opcodes permiten que los datos pueden apilar y desapilar respectivamente. Los códigos de operación call y ret usan la pila para llamar a una función y luego salir de ella, volviendo a la instrucción inmediatamente posterior a la llamada.
En caso de una interrupción, los registros EFLAGS, CS y EIP se apilan automáticamente. En el caso de un cambio de nivel de prioridad durante la interrupción, los registros SS y ESP también lo son.
Existe otra pila en las CPU x86, la de la Unidad de Computación Flotante (FPU). Más precisamente, esta unidad utiliza una batería limitada a 8 celdas, y cuyo funcionamiento es similar a un barril.
El elemento del barril actual se denomina st (0), los siguientes elementos st (N) con N entre 1 y 7. Esta pila permite realizar cálculos a la manera de una calculadora manual, apilando los valores, luego por aplicando una operación en los últimos valores apilados, por ejemplo.
Algunos procesadores no usan un registro genérico, solo la pila. Las instrucciones se refieren a sus primeros elementos. Por ejemplo, calculadoras Hewlett-Packard , procesadores Focus o mecánicos de la gama Burroughs B 5000 . Entonces, las instrucciones suelen ser más breves, porque no tienen que hacer referencia a registros. El código de bytes del lenguaje Java también usa este truco.
En la mayoría de los lenguajes de programación compilados , la pila de ejecución es donde se apilan algunos o todos los parámetros para llamar a las rutinas . Además, creamos un espacio para variables locales . La batería se forma así marcos de pila (en inglés marcos de pila ) que comprende para cada rutina es llamada anidada, sus parámetros, sus variables locales y el punto de retorno.
Algunos lenguajes, como PostScript de Adobe o control dc Unix , implementan un mecanismo de pila (con notación polaca inversa ) para los cálculos.
Aquí están las primitivas que se usan comúnmente para manipular pilas. No existe una estandarización para las primitivas de manipulación de pilas. Por tanto, sus nombres se indican de manera informal. Solo los tres primeros son realmente imprescindibles, pudiendo deducirse los demás de ello.
Esta implementación es la que se usa en los procesadores: es simple y la pila ocupa poco espacio. También es posible una implementación en forma de lista vinculada para los programas.
algoritmos '''Classe Pile''' Attributs : pile : tableau[1, MAX] de Objet sommet : entier ''{indice du dernier element entre}'' Methodes Mprocédure '''PUSH'''(element) ''{entre un element (Objet)}'' Mfonction '''POP'''() retourne Objet ''{sort un Objet}'' ''{non données ici}'' Mfonction '''FULL'''() retourne booleen ''{la pile est-elle pleine ? (retourne sommet >= MAX)}'' Mfonction '''EMPTY'''() retourne booleen ''{la pile est-elle vide ? (retourne sommet <= 0)}'' Mfonction '''SIZE'''() retourne entier ''{retourne le nombre d'elements (retourne sommet)} Mprocedure '''INIT'''() ''{constructeur (met sommet à 0)} '''Mprocédure''' ''PUSH'' (element) ''{ajouter un élément sur la pile}'' Paramètres : (D) element : Objet (D/R) cible : Pile Début Si cible.sommet <= MAX Alors cible.sommet <- cible.sommet + 1 cible.pile[cible.sommet] <- element Sinon afficher("Pile pleine") Fsi Fin '''Mfonction''' ''POP'' () retourne objet ''{enlever un élément de la pile et le renvoyer}'' Paramètres : (D/R) cible : Pile Variables : Element : objet Début Si cible.sommet > 0 Alors Element <- cible.pile[cible.sommet] cible.sommet <- cible.sommet - 1 Sinon afficher("Pile vide") Fsi Retourner Element Fin