Asignacion dinamico de memoria
Enviado por Julio Mazza • 20 de Abril de 2016 • Tutorial • 4.439 Palabras (18 Páginas) • 222 Visitas
ASIGNACION DINAMICA DE LA MEMORIA
Una de las funciones más importantes que tienen los sistemas operativos es la administración de la memoria. Esta tarea se complica cuando se habla de sistemas de tiempo compartido o cuando varios procesos compartían en un momento determinado el control del procesador central. Es por eso que un módulo del Sistema operativo, se encarga de la tarea de administrar la memoria; este módulo se llama Administrador de Memoria y tiene que cumplir dos tareas o funciones, las cuales son:
- asignar memoria ante los requerimientos de los procesos.
- Liberar memoria cuando esos procesos han terminado de ejecutar sus funciones.
Para llevar a cabo estas dos tareas, existen un conjunto de mecanismos o de técnicas que tienen como propósito hacer más sencillas esas tareas.
La administración de la memoria se complica con la presencia de varios procesos ya que al haber muchos procesos, esto me determina que cada proceso tiene tamaños distintos y tiempos de ejecución distintos, en un momento determinado el administrador de la memoria tiene que llevar esas dos tareas de forma tal que optimice el manejo de los requerimientos.
Ejemplo: consideremos que al inicio del día tenemos la memoria libre/disponible y su tamaño es de 100.000 palabras. Supongamos que los requerimientos en un momento determinado son de 5 programas. Para asignar espacio de memoria a esos programas no necesitamos conocer los tiempos de ejecución solo necesitamos conocer el tamaño de cada programa. Veamos:
[pic 1]
PROGRAMA | TAMAÑO |
P1 | 10.000 palabras |
P2 | 15.000 palabras |
P3 | 6.000 palabras |
P4 | 8.000 palabras |
P5 | 20.000 palabras |
Si consideramos la suma de todos los tamaños de esos 5 programas podemos observar que todos entran en memoria. Entonces la tarea de asignación de requerimientos en un momento determinado estará dividida en:
- Un bloque de 10.000 palabras para que entre el programa 1.
- Un bloque de 15.000 palabras para que entre el programa 2
- ……………
- Un bloque de 20.000 palabras para que entre el programa 5.
Esquemáticamente sería:
P1 | P2 | P3 | P4 | P5 | LIBRE |
10.000 15.000 6.000 8.000 20.000
Además tenemos un espacio libre que puede ser ocupado ante cualquier requerimiento, ese espacio libre es de 41.000 palabras.
Ahora supongamos, que en otro momento se terminan de ejecutar el P2 y P4 y al terminar su ejecución liberan esos bloques que les hemos asignado. Entonces tendremos una situación de memoria de la siguiente manera:
10.001 25.000 31.001 39.000 59.001 100.000
P1 | P3 | P5 | LIBRE |
1 10.000 25.001 31.000 39.001 59.000
Esos bloques que se han liberado van a quedar disponibles ante un nuevo requerimiento. Tenemos 3 bloques libres, los cuales no se encuentran en posiciones contiguas de memoria, por lo tanto no pueden realizar lo que se llama Compactación de la memoria, es decir, no se pueden unir para poder formar un solo bloque libre. Se puede llevar a cabo la compactación cuando se ha liberado un bloque y los bloques o el bloque adyacente está libre en ese caso se unirán formando un solo bloque libre y su tamaño es la suma de los tamaños de los bloques que se han compactado.
Supongamos otra situación: si ahora el P3 termina su ejecución y libera un bloque de 6.000 palabras, como sus bloques adyacentes están libres, se arma un solo bloque libre. Veamos:
10.001 39.000 59.001 100.000
P1 | P5 | LIBRE |
1 10.000 39.001 59.000
TAMAÑO = 15.000 + 6.000 + 8.000[pic 2]
Conclusión: para lograr un manejo eficiente de bloques libres el S.O. utiliza listas encadenadas, las cuales pueden ser simples o encadenadas dobles; depende del mecanismo a utilizarse. El formato de cada nodo es de contar con el campo puntero y el campo tamaño, este campo me indica el tamaño del bloque libre.
TAMAÑO | PUNTERO |
Si hacemos una representación de los bloques libres del ejemplo anterior, implementado listas simples encadenadas, tendremos 3 nodos. Estos nodos están ordenados ascendentemente por las direcciones de inicio de esos bloques. (Se implementa esta forma de ordenación para facilitar la compactación, si hubiésemos ordenado por tamaño del bloque, no podríamos compactar tan fácilmente debido a que podremos tener distintas direcciones y por lo tanto no serán consecutivas).
...