7.5 Asignación de Marcos [SILB94]

¿Cómo asignamos la cantidad fija de memoria libre a los distintos procesos? Si disponemos de 93 marcos libres y de dos procesos, ¿cuántos marcos obtiene cada proceso?

 

7.5.1 Número Mínimo de Marcos

No podemos asignar más del total de marcos libres. También hay un número mínimo de marcos que pueden asignarse. Este número mínimo está definido por la arquitectura del conjunto de instrucciones(máquina). Recuerde que cuando ocurre un fallo de página antes de terminar la ejecución de una instrucción, ésta debe reiniciarse. Por tanto, debemos contar con marcos suficientes para todas las páginas a las que pueda hacer referencia una instrucción.

Por ejemplo, considere una máquina donde todas las instrucciones de referencia a memoria que permiten direccionamiento indirecto de un nivel (por ejemplo, en la página 16 hay una instrucción de carga que puede referirse a una dirección de la página 0, la cual es una referencia indirecta a la página 23), entonces la paginación necesita al menos tres marcos por proceso. El número mínimo de marcos está definido por la arquitectura del computador, mientras que el número máximo está definido por la cantidad de memoria física disponible. Entre estos dos extremos podemos adoptar distintas opciones de asignación de marcos.

 

7.5.2 Algoritmos de Asignación de Marcos

La manera más fácil de dividir m marcos entre n procesos consiste en otorgar a cada uno una parte igual, m/n marcos. Por ejemplo, si hay 93 marcos y 5 procesos, cada proceso recibirá 18 marcos. Los tres marcos sobrantes pueden usarse como depósito de marcos libres. A este esquema se le llama asignación equitativa.

Una alternativa es reconocer que los diversos procesos necesitarán cantidades distintas de memoria. Si un pequeño proceso de 10K y una base de datos interactiva de 127K son los únicos procesos que se ejecutan en un sistema con 62 marcos libres, no tiene mucho sentido asignar 31 marcos a cada proceso. El proceso pequeño no necesita más de 10 marcos, por lo que los 21 restantes se desperdician.

Se puede usar una asignación proporcional. Asignamos la memoria disponible a cada proceso de acuerdo con el tamaño de éste. Sea vi el tamaño de la memoria virtual para el proceso pi y definamos V=vi . Entonces, si el total de marcos disponibles es m, asignamos ai marcos al proceso pi, donde ai es aproximadamente ai = vi / V x m. Por supuesto, debemos ajustar ai para que sean enteros, mayores al número mínimo de marcos requerido por el conjunto de instrucciones, y que sumados no excedan de m.

Para la asignación proporcional dividiríamos los 62 marcos entre dos procesos, uno de 10 páginas y el otro de 127, asignando 4 y 57 marcos respectivamente, ya que 10/137 x 62 =(aprox.) 4, 127/137 x 62 =(aprox.) 57.

Por supuesto, tanto en la asignación equitativa como proporcional, la asignación para cada proceso puede variar de acuerdo con el nivel de multiprogramación . Si aumenta el nivel de multiprogramación, cada proceso perderá algunos marcos para proporcionar al nuevo proceso la memoria necesaria. Por el contrario, si disminuye, los marcos liberados se distribuyen entre los restantes.

El esquema de asignación proporcional se ha hecho dependiente del tamaño, pero nos podríamos basar en sus prioridades o en una combinación entre tamaño y prioridad. De igual modo, se podría permitir que un proceso de alta prioridad pueda reemplazar páginas de otro proceso de menor prioridad. Esto haría aumentar el número de marcos del proceso de alta prioridad en perjuicio de los de prioridad menor.

ENLACE al tema anterior: ADMINISTRACIÓN DE LA MEMORIA