ADMINISTRADOR DE MEMORIA

El primer esquema de asignación de memoria era el siguiente:  El programa que se iba a ejecutar se cargaba por completo en memoria y se le asignaba tanto espacio contiguo como necesitase.

ALGORITMO PARA CARGAR UNA TAREA EN UN SISTEMA DE USUARIO UNICO

1. Almacene la primera localidad de

2.

3. 4.

memoria del programa en el registro base. Ponga el contador del programa igual que la dirección de la primera localidad de memoria. Lea la primera instrucción del programa. Incremente el contador del programa en el numero de bytes que ocupa la instrucción.

ALGORITMO PARA CARGAR UNA TAREA EN UN SISTEMA DE USUARIO UNICO

1. ¿Ha llegado a la ultima instrucción? Si

2.

3. 4.

es así pare la carga del programa si no continué. El contador del programa es mas grande que el tamaño de la memoria si es así deje de cargar si no continué. Cargue la instrucción en memoria Lea la siguiente instrucción y vuelva al paso 4.

ALGORITMO PARA CARGAR UN TRABAJO EN UNA PARTICION FIJA
1. Determine el tamaño de memoria 2.

3. 4.

solicitado por la tarea. Si el tamaño de la tarea es > la partición mas grande se manda un mensaje de error si no entonces continué. Ponga el contador en 1. Mientras el contador <= numero de particiones en memoria,

Si el tamaño de la tarea > tamaño de la partición de memoria al contador le asignas contador +1, si no si el estado de la partición es libre cargue la tarea en la partición y cambie su estado a ocupado y vaya al paso 1 si no contador le asigna contador +1. 2. No hay una partición disponible. 3. Vaya al paso 1.

ALGORITMO DEL PRIMER AJUSTE
1. Ponga el contador a 1. 2. Mientras el contador<= al numero de

bloques en memoria. Si el tamaño del bloque > tamaño de memoria (contador) entonces contador= contador+1, si no cargue el trabajo en el tamaño de memoria ajuste las lista de libre y ocupado de la memoria y vaya al paso 4. 3. Coloque la tarea en la cola de espera. 4. Vaya a recoger la siguiente tarea.

ALGORTIMO DE MEJOR AJUSTE
1. Inicialice el bloque de 2. 3. 4. 5.

memoria(0)=99999. Calcule el desperdicio inicial de memoria. Inicialice el subíndice=0. Ponga el contador en 1. Mientras el contador <= numero de bloques en memoria. Si el tamaño de la tarea > tamaño de la memoria al contador =contador +1 si no desperdicio de memoria=tamaño de la memoria – tamaño de la tarea.

Si el desperdicio inicial de la memoria > desperdicio de la memoria al subíndice=contador, al desperdicio inicial de la memoria=desperdicio de la memoria y al contador=contador+1. 2. Si subíndice=0 entonces coloque la tarea en la cola de espera, si no cargue la tarea en el tamaño de la memoria y ajuste las listas de memoria libres/ocupadas. 3. Vaya a tomar la siguiente tarea.

Desasignación
El proceso de desasignación consiste en liberar un espacio en la memoria y este espacio de querer liberar pasaría de un estado ocupado a un estado libre Para un sistema de partición fija, el proceso es bastante sencillo. Cuando se termina la tarea, el administrador de memoria restablece el estado del bloque de memoria, donde se asigno la tarea como libre Un sistema de partición dinámica utiliza un algoritmo mas complicado, ya que este trata de combinar áreas libres de memoria siempre que sea posible.

Algoritmo para Liberar Bloques de Memoria
Si la ubicación de la tarea se encuentra unto a uno o mas bloques libres Si la ubicación de la tarea esta entre dos bloques libres Entonces combine los tres bloques en uno tamaño de la memoria(contador -1) + tamaño de la tarea + tamaño de la memoria(contador -1) Fije el estado del tamaño de la memoria(contador+1) en entrada nula Si no Combine ambos bloques en uno tamaño de la memoria(contador -1) = tamaño de la memoria(contador -1) =tamaño de la memoria(contador -1) + tamaño de la tarea Si no busque una entrada nula en la lista de memoria libre introduzca el tamaño de la tarea y la dirección de inicio en el lugar de la entrada nula Fije su estado en “libre”

Caso 1, Unión de dos Bloques Libres
Dirección de Inicio 4075 5225 6785 7560 (7600) *7800 10250 15125 24500 Tamaño del Bloque Estado Dirección de Inicio 4075 5225 6785 7560 7600 10250 5 Libre 4050 Libre 230 Libre 1000 Libre Se inicia 15125 24500 Tamaño del Bloque Estado

105 Libre 5 Libre 600 Libre 20 Libre (200) (Ocupado)*

105 Libre 5 Libre 600 Libre 20 Libre 205 Libre 4050 Libre 230 Libre 1000 Libre

localización 7800 Se modifica la lista, para reflejar la dir. del nuevo bloque, 7600, que era la dir. De la 1era. Instrucción que acaba de liberarlo.

Caso 2, Unión de Tres Bloques Libres
Dirección de Inicio 4075 5225 6785 *7560 (7580) *7600 10250 15125 24500 Tamaño del Bloque Estado Dirección de Inicio 4075 5225 6785 7560 * 10250 15125 24500 5 Libre 600 Libre 20 Libre (20) (Ocupado)1 205 Libre 4050 Libre 230 Libre 1000 Libre Tamaño Estado del Bloque 105 Libre 5 Libre 600 Libre 245 Libre (entrada nula) 4050 Libre 230 Libre 1000 Libre

105 Libre

Dado que la entrada en la localidad 7600 se combino con la entrada anterior, debemos “vaciar” esta entrada. Lo hacemos cambiando el estado a entrada nula, sin dirección de inicio ni tamaño. Esto vuelve innecesario tener que re arreglar la lista a expensas de memoria.

Caso 3, Desasignación de un Bloque Aislado
Dirección de Inicio 4075 5225 6785 7560 * 10250 15125 Tamaño Estado del Bloque 105 Libre 5 Libre 600 Libre 245 Libre (entrada nula) 4050 Libre 230 Libre Dirección de Inicio 4075 5225 6785 7560 *8805 10250 15125 24500 Dirección de Inicio 7805 * Tamaño Estado del Bloque 105 Libre 5 Libre 600 Libre 245 Libre 445 Libre 4050 Libre 230 Libre 1000 Libre Tamaño del Bloque Estado

24500 1000 Libre Dirección Tamaño Estado de Inicio del Bloque 7805 *8805 9250 1000 Ocupado 445 Ocupado 1000 Ocupado

1000 Ocupado
(entrada nula)

Particiones Dinámicas Relocalizables
En este tipo de esquema el administrado de memoria relocaliza los programas para reunir los bloques vacios y los compacta para hacer un bloque de memoria lo bastante grande para aceptar algunas o todas las tareas en espera de entrar El sistema operativo compacta la memoria a este proceso también se le conoce como recolección de basura o desfragmentación, para recuperar secciones fragmentadas de espacio de memoria.

Diagrama inicial de memoria (a)

Diagrama de memoria después de la compactación(b)

Administración de memoria
Sistemas recientes

Administración de la memoria

Asignación de la memoria en segmentos

Asignación de memoria en paginación por demanda

Asignación de memoria por segmentación por segmentación por paginación por demanda

ASIGNACION DE LA MEMORIA POR PAGINAS

Se basa en el concepto de dividir cada tarea de llegada en páginas de igual tamaño Las secciones de un disco se conocen como sectores o algunas veces como bloques Y los sectores de la memoria principal se denominan marcos de pagina

Paginación por demanda
La paginación por demanda introdujo la idea de cargar nada mas una porción del programa en la memoria para su procesamiento. Además aprovecha el hecho que los programas se escriben de manera secuencial de manera que mientras una sección o modulo Una de las innovaciones es que hizo posible el amplio uso de la memoria virtual

Algoritmos
Algoritmo de procesamiento de instrucción del hardware 2. Iniciar el procesamiento de la instrucción 3. Generar la dirección de los datos 4. Calcular el numero de la pagina 5. Si la pagina esta en la memoria entonces Obtenga los datos y termine la instrucción Pase a la siguiente instrucción Regrese al paso 1 De lo contrario Genere una interrupcion de pagina

Algoritmo de manejo de fallas de pagina
1 Sin no hay un marco de pagina libre entonces Seleccione la pagina por intercambiar utilizando el algoritmo de eliminación de paginas Actualice la tabla de mapa de paginas de la tarea Si el contenido de la pagina ha cambiado, entonces Escriba la pagina en el disco Fin del si Fin si 2 Utilice el numero de pagina 3 del algoritmo de procesamiento de instrucciones del hardware para obtener la dirección del disco donde se almacena la pagina solicitada(el administrador de archivos, utiliza el numero de pagina para obtener la dirección del disco) 3 Lea la pagina hacia la memoria 4 Actualice la tabla de mapa de paginas de la tarea 5 Actualice la tabla del mapa de memoria 6 Vuelva a iniciar la instrucción interrumpida

Políticas y conceptos de remplazo de paginas
Política de reemplazo de pagina es crucial para la eficiencia del sistema razón por la cual hay que elegir con cuidado el algoritmos para hacerlo. Dos de los mas conocidos son el FIFO y (se basa en la teoría se debe eliminar la pagina que ha estado mas tiempo en memoria) Política de la menos recientemente utilizada (cambia las paginas que recientemente se han usado menos)

Conjunto de trabajo
Un conjunto de trabajo de una tarea es el conjunto de paginas que residen en la memoria, que permiten acceso directo, sin incurrir en una falla de pagina. Cuando un usuario solicita la ejecución de un programa, la primera pagina se carga en la memoria y la ejecución continua conforme se cargan mas paginas: las que contienen declaraciones de variables, otras que contienen instrucciones, otras que contienen datos, etc. después de cierto tiempo, la mayor parte de los programas llega a un estado razonablemente estable y el procesamiento continua sin problemas, con muy pocas fallas de paginas adicionales. al llegar a ese punto, el conjunto de trabajo de la tarea esta en la memoria, y el programa no generará muchas fallas de pagina, hasta que pase a otra fase que requiera un conjunto diferente de paginas para efectuar el trabajo: un conjunto de trabajo diferente.