Title: Problema del Gestor de Memoria
1Problema del Gestor de Memoria
- Existen tareas clientes que utilizan páginas de
memoria. Para ello - Solicitan memoria
- Cuando una tarea necesita memoria (número de
páginas), se la pide a un gestor de memoria. - El gestor devuelve el id. de la primera de una
secuencia de páginas concedidas. - Liberan memoria
- Cuando una tarea no va a utilizar por más tiempo
cierta secuencia de páginas, se lo indica al
gestor. - Propiedades de seguridad
- Exclusión mutua entre las operaciones
- Sólo se concederán n páginas si hay n páginas
consecutivas libres.
2C-TADSOL Gestor de memoria
CPRE Hay n páginas consecutivas de memoria
libre CPRE ?k, 1 ? k ? Max-n1 ? (?j, k ? j lt
kn ??m(j)) Solicitar (m, n, i) POST A partir de
i había n páginas de memoria libres que están
ahora señaladas como ocupadas POST msalment \
?k, 1 ? k ? Max - n 1 ? (?j, k ? j lt k n ?
(?ment(j) ? msal(j)) ? isal k) PRE Hay n
páginas de memoria ocupadas a partir de la
i-ésima PRE ?k, i ? k lt n i ? m(k) CPRE
cierto Devolver (m, n, i) POST Se marcan como
libres las n páginas de memoria a partir de la
i-ésima POST msalment \ ?k, i ? k lt ni ?
?msal(i)
- C-TADSOL Gestor de memoria
- OPERACIONES
- ACCIÓN Solicitar TipoGMes xTipoTamañoex
TipoDireccións - ACCIÓN Devolver TipoGMes xTipoTamañoex
TipoDireccióne - SEMÁNTICA
- DOMINIO
- TIPO TipoGM Secuencia(B)
- TipoTamaño 1..Max
- TipoDirección 1..Max
- INVARIANTE ?m?TipoGM?Longitud(m) Max
- DONDE Max ...
- INICIAL(m) ?i, 1 ? i ? Max ? ?m(i)
-
3Desarrollo de la abstracción de datos (gestor
memoria)
-- Procedimientos y funciones privadas
function Hay_Memoria_Disponible (Num in
Tipo_Num_Pags) return Natural -- indica
si hay Num páginas -- consecutivas libres end
GestorMem
- subtype Tipo_Num_Pags is Natural range
1..Num_paginas - type Tipo_Indice is new Tipo_Num_Pags
- type Tipo_Memoria is
- array (Tipo_Indice range ltgt) of Boolean
- protected type GestorMem is
- entry Solicitar (Num in
Tipo_Num_Pags - Ind out Tipo_Indice)
- entry Liberar (Num in Tipo_Num_Pags
- Ind in Tipo_Indice)
- private
- -- Estado de la memoria todas las paginas
estan disponibles inicialmente - Memoria Tipo_Memoria(Tipo_Indice)
(others gt True) -
- Operación Solicitar
- Ind Tipo_Indice(Hay_Memoria_Disponible(Cant))
Memoria(Ind..IndTipo_Indice(Num)-1)
(others gt False) - Operación Liberar
- Memoria(Ind..IndTipo_Indice(Num)-1) (others
gt True)
4Diseño de la s. de seguridad (gestor memoria)
- Tabla de bloqueos (desglose de la CPRE
atendiendo al parámetro Num)
5Implementación de la s. de seguridad (gestor
memoria)
- Se utiliza una familia de entradas para la
operación Solicitar (Num_pags entradas). - fichero gestormem_fament.adb
- Solución poco eficiente familias de entries con
posiblemente muchas entradas.
6Otro desarrollo de la s. de seguridad (gestor de
memoria)
- Se define una familia de entries atendiendo a un
tipo Tipo_PID_Solicitar (1..Max_Solicitudes). - Para cada llamada a Solicitar
- Se genera un identificador Pid (Tipo_PID_Solicitar
) de solicitud de memoria. - Se reencola a la entrada Pid.
- En cada entrada de la familia como máximo vamos a
tener un solicitud pendiente.
7Diseño de la s. de vivacidad (gestor memoria)
- Análisis de la vivacidad similar al del problema
de la Cuenta bancaria. - Situación no determinista con las solicitudes
pendientes (familia de entries). - Los Solicitar de muchas páginas sufrirán
inanición frente a los solicitar de pocas
paginas.
8Diseño de la s. de vivacidad (ii)
- Para eliminar la inanición
- Política FIFO (como en c. bancaria y
multibuffer). - Política basada en turnos para Solicitar (como en
multibuffer).
9Implementación de la s. de vivacidad (gestor
memoria)
- Implementa una política FIFO
- Fichero gestormem_requeue.adb
- Poco eficiente tras devolver, se reevalúa la
guarda, es decir, la CPRE completa.
10Optimización de la Implementación con vivacidad
- Posible optimización
- Tras Devolver(i, n), se evalúa la condición de
desbloqueo simplificada para el primer
Solicitar(Num) pendiente - n ? Num ? ?a,b?1..MAX? (a? i ? b ? in
-1??x?a..i-1? m0(x) ? ?y?in..b? m0(y) ?
b-a1? Num - Si se cumple, se fuerza el desbloqueo del primer
Solicitar (desbloqueo explícito). - Fichero gestormem_desb_expl.adb