Memorias Lifo y Fifo
Memorias Lifo y Fifo
Memorias Lifo y Fifo
Memoria LIFO
(Last in-First Out), la ltima informacin introducida en la memoria es la primera en extraerse, es lo que se llama una pila o
apilamiento.
Estas memorias especiales se crearon para librar a la CPU de gran parte de la labor de supervisin y control al realizar algunas
operaciones del tipo de manipulacin de datos memorizndolos y extrayndolos a una secuencia establecida. Las memorias LIFO,
no tienen porque ser memorias especiales ajenas a la memoria central del sistema, algunos micro procesadores o UP, suelen
incorporar un registro denominado Stock Pointer o puntero de pila, que facilita al UP la posibilidad de construir pila (stock) sobre
una zona de memoria RAM, el direccionamiento de la pila lo lleva a cabo el registro Stock Pointer actuando sobre la zona de
memoria RAM destinada a tal efecto.
Las memorias LIFO y FIFO son memorias especiales del tipo tampn cuyo nombre proviene de la forma de almacenar y extraer la
informacin de su interior.
MEMORIA LIFO Y FIFO
Las memorias LIFO y FIFO son memorias especiales del tipo tampn cuyo nombre proviene de la forma de almacenar y extraer la
informacin de su interior.
LIFO (Last in-first out), la ltima informacin introducida en la memoria es la primera en extraerse, es lo que se llama una pila o
apilamiento.
Estas memorias especiales se crearon para librar a la CPU de gran parte de la labor de supervisin y control al realizar algunas
operaciones del tipo de manipulacin de datos memorizndolos y extrayndolos a una secuencia establecida.Las memorias LIFO,
no tienen porque ser memorias especiales ajenas a la memoria central del sistema, algunos micro procesadores (UP), suelen
incorporar un registro denominado Stock Pointer (puntero de pila), que facilita al UP la posibilidad de construir pila (stock) sobre
una zona de memoria RAM, el direccionamiento de la pila lo lleva a cabo el registro Stock Pointer actuando sobre la zona de
memoria RAM destinada a tal efecto.
Un dato importante es que como tal este tipo de datos se crean y se destruyen mientras se
ejecuta el programa y por lo tanto la estructura de datos se va dimensionando de forma precisa a
los requerimientos del programa, evitndonos as perder datos o desperdiciar memoria si
hubiramos tratado de definirla cantidad de memoria a utilizar en el momento de compilar el
programa.
Cuando se crea un programa en el que es necesario manejar memoria dinmica el sistema
operativo divide el programa en cuatro partes que son: texto, datos (estticos), pila y una zona
libre o heap. En la ultima parte es donde queda la memoria libre para poder utilizarla de forma
dinmica. En el momento de la ejecucin habr tanto partes libres como partes asignadas al
proceso por lo cual si no se liberan las partes utilizadas de la memoria y que han quedado
inservibles es posible que se agote esta parte y por lo tanto la fuente de la memoria dinmica.
Tambin la pila cambia su tamao dinmicamente, pero esto no depende del programador sino del
sistema operativo.
Una pila (stack en ingls) es una lista ordenada o estructura de datos en la que el modo de acceso
a sus elementos es de tipo LIFO (del ingls Last In First Out, ltimo en entrar, primero en salir)
que permite almacenar y recuperar datos. Esta estructura se aplica en multitud de ocasiones en el
rea de informtica debido a su simplicidad y ordenacin implcita de la propia estructura.
Para el manejo de los datos se cuenta con dos operaciones bsicas: apilar (push), que coloca un
objeto en la pila, y su operacin inversa,retirar (o desapilar, pop), que retira el ltimo elemento
apilado.
En cada momento slo se tiene acceso a la parte superior de la pila, es decir, al ltimo objeto
apilado (denominado TOS, Top of Stack en ingls). La operacin retirar permite la obtencin de
este elemento, que es retirado de la pila permitiendo el acceso al siguiente (apilado con
anterioridad), que pasa a ser el nuevo TOS.
Por analoga con objetos cotidianos, una operacin apilar equivaldra a colocar un plato sobre una
pila de platos, y una operacin retirar a retirarlo.
Las pilas suelen emplearse en los siguientes contextos:
Implementacin de recursividad.
placa de la parte superior es visible, por lo que para ver lo que hay en la tercera placa, el primer y
segundo platos tendrn que ser retirados.
Operaciones[editar]
Una pila cuenta con 2 operaciones imprescindibles: apilar y desapilar, a las que en las
implementaciones modernas de las pilas se suelen aadir ms de uso habitual.
Vaca: devuelve cierto si la pila est sin elementos o falso en caso de que contenga uno.
(empty).
Implementacin[editar]
Un requisito tpico de almacenamiento de una pila de n elementos es O(n). El requisito tpico de
tiempo de O(1) las operaciones tambin son fciles de satisfacer con un array o con listas
enlazadas simples.
Pilas Hardware[editar]
Un uso muy comn de las pilas a nivel de arquitectura hardware es la asignacin de memoria.
Una operacin apilar, en el que un elemento de datos se coloca en el lugar apuntado por el
puntero de pila, y la direccin en el puntero de pila se ajusta por el tamao de los datos de
partida.
Hay muchas variaciones en el principio bsico de las operaciones de pila. Cada pila tiene un lugar
fijo en la memoria en la que comienza. Como los datos se aadirn a la pila, el puntero de pila es
desplazado para indicar el estado actual de la pila, que se expande lejos del origen (ya sea hacia
arriba o hacia abajo, dependiendo de la aplicacin concreta).
Por ejemplo, una pila puede comenzar en una posicin de la memoria de mil, y ampliar por debajo
de las direcciones, en cuyo caso, los nuevos datos se almacenan en lugares que van por debajo de
1000, y el puntero de pila se decrementa cada vez que un nuevo elemento se agrega. Cuando un
tema es eliminado de la pila, el puntero de pila se incrementa.
Los punteros de pila pueden apuntar al origen de una pila o de un nmero limitado de direcciones,
ya sea por encima o por debajo del origen (dependiendo de la direccin en que crece la pila), sin
embargo el puntero de pila no puede cruzar el origen de la pila. En otras palabras, si el origen de la
pila est en la direccin 1000 y la pila crece hacia abajo (hacia las direcciones 999, 998, y as
sucesivamente), el puntero de pila nunca debe ser incrementado ms all de 1000 (para 1001,
1002, etc.) Si un desapilar operacin en la pila hace que el puntero de pila se deje atrs el origen de
la pila, una pila se produce desbordamiento. Si una operacin de apilar hace que el puntero de pila
incremente o decremente ms all del mximo de la pila, en una pila se produce desbordamiento.
La pila es visualizada ya sea creciente de abajo hacia arriba (como pilas del mundo real), o, con el
mximo elemento de la pila en una posicin fija, o creciente, de izquierda a derecha, por lo que el
mximo elemento se convierte en el mximo a "la derecha". Esta visualizacin puede ser
independiente de la estructura real de la pila en la memoria. Esto significa que rotar a la derecha es
mover el primer elemento a la tercera posicin, la segunda a la primera y la tercera a la segunda.
Aqu hay dos equivalentes visualizaciones de este proceso:
Manzana
Pltano
Pltano
==rotar a la derecha==>
Fresa
Manzana
Fresa
Pltano
Manzana
Fresa
Manzana
==rotar a la izquierda==>
Fresa
Pltano
Una pila es normalmente representada en los ordenadores por un bloque de celdas de memoria,
con los "de abajo" en una ubicacin fija, y el puntero de pila de la direccin actual de la "cima" de
clulas de la pila. En la parte superior e inferior se utiliza la terminologa con independencia de que
la pila crece realmente a la baja de direcciones de memoria o direcciones de memoria hacia
mayores.
Apilando un elemento en la pila,se ajusta el puntero de pila por el tamao de elementos (ya sea
decrementar o incrementar, en funcin de la direccin en que crece la pila en la memoria), que
apunta a la prxima celda, y copia el nuevo elemento de la cima en rea de la pila. Dependiendo de
nuevo sobre la aplicacin exacta, al final de una operacin de apilar, el puntero de pila puede
sealar a la siguiente ubicacin no utilizado en la pila, o tal vez apunte al mximo elemento de la
pila. Si la pila apunta al mximo elemento de la pila, el puntero de pila se actualizar antes de que
un nuevo elemento se apile, si el puntero que apunta a la prxima ubicacin disponible en la pila,
que se actualizar despus de que el mximo elemento se apile en la pila.