Está en la página 1de 93

Objetivos del sistema de gestión de memoria

 En sistemas con multiproceso, el S.O. debe “repartir” los recursos


entre los procesos existentes:
 Reparto de procesador: Gestión de procesos
 Reparto de memoria: Gestión de memoria

 Objetivos del Gestor de Memoria


 Espacios lógicos independientes
 Protección entre procesos
 Compartición de Memoria (procesos ligeros)
 Soporte a las regiones del proceso
 Maximizar el grado de multiprogramación
 Mapas de memoria de un tamaño adecuado (normalmente
grandes)
Objetivos del sistema de gestión de memoria

A. Espacios lógicos independientes


 A priori no se conoce la posición de memoria que ocupará
un programa cuando vaya a ejecutarse (estado de ocupación
de la memoria)
 Código en ejecutable genera referencias entre 0 y N
 Ejemplo: Programa que copia un vector
Fichero Ejecutable –Vector destino a partir de
0
4
dirección 2000
.... Cabecera
96 –Tamaño del vector en dirección
100
104
LOAD R1, #1000
LOAD R2, #2000
1500
108 LOAD R3, /1500
112 LOAD R4, [R1] –Vector origen a partir de dirección
1000
116 STORE R4, [R2]
120 INC R1
124 INC R2
128 DEC R3
132 JNZ /12
136 .................
Objetivos del sistema de gestión de memoria

Se supone que el código del SO reside en las


posiciones más altas.
El programa se carga en la posición 0 y para que se
ejecute ha de pasársele el control (es decir, que el Memoria
0 LOAD R1, #1000
contador del programa apunte a esta posición). 4 LOAD R2, #2000
8 LOAD R3, /1500
 Problema:Como se ve, no coinciden las 12 LOAD R4, [R1]
direcciones usadas en el programa con la posición 16 STORE R4, [R2]
20 INC R1
a partir de la cual se carga el programa. Suponer 24 INC R2
por ejemplo, que el programa se cargara a partir 28 DEC R3
32 JNZ /12
de la posición 10000.... 36 .................
....
 Solución: Reubicación de direcciones lógicas a
físicas
Sistema Operativo
Objetivos del sistema de gestión de memoria

 Reubicación: Traducir direcciones lógicas a direcciones físicas


dependientes del hardware mediante una función de traducción. La
reubicación permite crear un espacio lógico independiente para cada
proceso y el S.O. debe poder acceder a los espacios lógicos para realizar la
traducción.
 Direcciones lógicas: direcciones de memoria generadas por el programa
 Direcciones físicas: direcciones de memoria principal asignadas
 Función de traducción:
Traducción(IdProc, dir_lógica)  dir_física
 Ejemplo:
El programa tiene asignada memoria a partir de la dirección 10000
Reubicación: sumar 10000 a direcciones lógicas
 Implementación:
o Hardware

o Software
Objetivos del sistema de gestión de memoria

 Reubicación Hardware: la MMU (memory management


unit) se encarga de la traducción
 Proceso:
 Programa se carga en memoria sin modificar
 El S.O. almacena por cada proceso su función de traducción
 El S.O. especifica a la MMU qué función aplicar para cada proceso
Memoria

Procesador 10000 LOAD R1, #1000


10004 LOAD R2, #2000
HW traducción 10008 LOAD R3, /1500
PC 10012 LOAD R4, [R1]
8 10000 10016 STORE R4, [R2]
11500
R. Instrucción 1500 10020 INC R1
+ 10024 INC R2
LOAD R3, /1500 10028 DEC R3
10032 JNZ /12
10036 .................
..........
Objetivos del sistema de gestión de memoria

 Reubicación software: traducción


de direcciones durante carga del
programa. Esta solución se usa en
sistemas sin el hardware específico de Memoria
traducción (MMU).
 Proceso:
 El programa se carga con las 10000
10004
LOAD R1, #11000
LOAD R2, #12000
direcciones ya traducidas 10008 LOAD R3, /11500
 Se genera un código diferente del 10012 LOAD R4, [R1]
10016 STORE R4, [R2]
programa ejecutable 10020 INC R1
 Desventajas: 10024
10028
INC R2
DEC R3
 No asegura protección (no se verifica 10032 JNZ /10012
cada dirección a usar, sino que se 10036
..........
.................
usan las direcciones generadas tras el
proceso de carga)
 No permite mover programa en
tiempo de ejecución (suponer que es
necesaria la reubicación del espacio
asignado al proceso, por necesitar
más espacio.....)
Objetivos del sistema de gestión de memoria

B. Protección entre procesos


La protección es diferente según sea un sistema Mono o Multi
programado:
Sistema MonoProgramado: La intrusión se dará solamente entre el programa
y el S.O.
Sistema MultiProgramado: La intrusión puede venir tanto de otros procesos
como de otros usuarios además del riesgo del sistema Monoprogramado.
 Acciones
 La traducción de direcciones debe crear espacios disjuntos
 Es necesario validar todas las direcciones que genera el programa
 La detección de alguna intrusión debe realizarla el hardware del procesador
(MMU), ya que hay que realizarla en tiempo de ejecución
 El tratamiento de alguna intrusión lo hace el SO
 En sistemas con mapa de E/S y memoria común:
 Traducción permite impedir que los procesos accedan directamente a
dispositivos de E/S
Objetivos del sistema de gestión de memoria

C. Compartición de Memoria (procesos ligeros)


La compartición de memoria entre procesos da soporte a la creación de
procesos ligeros y está controlado por el S.O.
 Acciones:
 Las direcciones lógicas de 2 o más procesos se corresponderán con una
misma dirección física.
 La memoria asignada a cada proceso no puede ser ya contigua.
 La función de traducción en estos casos se va haciendo más compleja.
Mapa proceso 1
Memoria
zona privada 1
• Ventajas:
– Procesos ejecutando mismo zona compartida zona priv. 1 (P1)

programa comparten su zona privada 2


zona priv. 1 (P2)

código
zona compartida
– Mecanismo de comunicación Mapa proceso 2
entre procesos muy rápido zona priv. 2 (P2)
zona privada 1
zona priv. 2 (P1)
zona compartida

zona privada 2
Objetivos del sistema de gestión de memoria

 Problemas:
 Requiere asignación no contigua
 Si la posición de zona Mapa proceso 1
Memoria
compartida contiene referencia a
otra posición de la zona 2000
compartida, no se puede saber a
zona compartida
qué dirección se refiere puesto
que cada proceso ligero verá esa zona compartida
dirección de forma diferente. 10000 ¿1100 ó 2100?
10100
Mapa proceso 2
Ejemplo: Si el código, que es común,
contiene una bifurcación, no se
1000
podrá determinar a qué dirección
zona compartida
se debe saltar, dependiendo del
proceso que esté ejecutando el
código

lógico físico
Objetivos del sistema de gestión de memoria

D. Soporte de las regiones del proceso


El mapa de memoria de un proceso no es homogéneo, ya que las regiones
contienen diferentes tipos de información (código, datos y pila normalmente) y
poseen diferentes características
 Acciones:
 Hacer mapa de memoria dinámico:
 Regiones cambian de tamaño (p.ej. pila)

 Se crean y destruyen regiones (el sistema de memoria debe controlar


qué regiones están presentes, así como su tamaño)
 Existen zonas sin asignar (huecos, con carácter dinámico)

 Detectar accesos no permitidos a una región ( de sólo lectura por ej)


 Detectar accesos a huecos
 Evitar reservar espacio para huecos
 Guardar y gestionar una tabla de regiones para cada proceso
Objetivos del sistema de gestión de memoria

E. Maximizar el grado de multiprogramación

El reparto de memoria debe ser tal que Aprovechamiento


óptimo es irrealizable!!!!
de memoria
maximize el grado de multiprogramación Tablas de gestión demasiado
para evitar el desperdicio de memoria grandes
 Memoria desperdiciada
 Restos (huecos) inutilizables Memoria
(fragmentación) 0 Dirección 50 del proceso 4
 Tablas requeridas por gestor de 1 Dirección 10 del proceso 6
memoria
2 Dirección 95 del proceso 7
 Acciones
3 Dirección 56 del proceso 8
 Crear bloques de asignación de menor
4 Dirección 0 del proceso 12
tamaño
5 Dirección 5 del proceso 20
 Gestionar las tablas de asignación más
eficientemente 6 Dirección 0 del proceso 1

 Se opta por la paginación .........................................


.........................................
 Uso de memoria virtual para aumentar
grado de multiprogramación N-1 Dirección 88 del proceso 9
N Dirección 51 del proceso 4
Objetivos del sistema de gestión de memoria

F. Mapas de memoria de un tamaño adecuado (normalmente


grandes)
Los procesos necesitan cada vez mapas más grandes: aplicaciones más
novedosas, más recursos gráficos, más carga computacional....
 Acciones
 Utilizar Memoria Virtual
 Hacer que el usuario disponga virtualmente de una enorme
cantidad de memoria física

 Otras opciones (antigua)


 Overlays
 Programa dividido en fases que se ejecutan sucesivamente
 En cada momento sólo hay una fase residente en memoria
 Cada fase realiza su labor y carga la siguiente
 No es transparente: Toda la labor realizada por programador
Modelo de memoria de un proceso

Conceptos

– El S.O. es el responsable de la gestión de memoria de


cualquier proceso.
– El mapa inicial de memoria de un proceso está
relacionado con el archivo ejecutable que generará el
proceso
– ¿Cómo generar el mapa de memoria inicial a partir del
ejecutable?
– ¿Cómo se organiza el mapa de memoria?
– ¿Cuáles son sus características básicas?
– ¿Qué operaciones se pueden realizar en el mapa de
memoria?
Modelo de memoria de un proceso

Fases en la generación de un ejecutable

 Aplicación: conjunto de módulos en lenguaje de alto nivel


 Procesado en dos fases: Compilación y Montaje
• Compilación:
Módulo Módulo
– Se asignan direcciones a los
fuente A fuente B
símbolos definidos
– Resuelve referencias a los
símbolos de cada módulo Compilador
– Genera módulo objeto

Módulo Módulo
• Montaje (o enlace): objeto A objeto B Bibliotecas
– Resuelve referencias entre
módulos objeto
– Resuelve referencias a símbolos Montador
de bibliotecas
– Genera resultado (archivo Fichero
ejecutable), que incluye las ejecutable
bibliotecas usadas
Modelo de memoria de un proceso

Biblioteca: colección de módulos objeto relacionados. Algunas bibliotecas


son proporcionadas a los usuarios (bibliotecas) del sistema, mientras
que otras habrán sido creadas por los usuarios (propias) (por ejemplo,
bibliotecas de entrada salida, incluyendo las funciones como printf,
getchar, etc, o las llamadas al sistema de POSIX)

 Tipos:
Estáticas: el montaje enlaza los módulos
objeto del programa y de las bibliotecas,
dando como resultado un ejecutable Main

autocontenido. Función A
 Desventajas: Función B
Código

 Ejecutables grandes Función de biblioteca F1

 Código de función de biblioteca repetido Función de biblioteca F2

 Múltiples copias en memoria del código de


función de biblioteca
 La actualización de biblioteca implicaría
volver a montar
Modelo de memoria de un proceso

Dinámicas: la carga y montaje se hace en tiempo de


ejecución. El ejecutable contiene únicamente el nombre de
la biblioteca y la rutina de carga y montaje en tiempo de
ejecución

 Proceso de carga:
 La rutina de carga y montaje incorpora la biblioteca
correspondiente.
 Se ajustan las instrucciones que realizan las referencias a dicho
símbolo, de forma que las próximas referencias accedan al símbolo
de biblioteca correspondiente, sin que sea necesario activar de
nuevo el proceso de montaje de la biblioteca.
 Para evitar modificar el código del programa, en este proceso, se
suelen utilizar referencias indirectas mediante una tabla que
recoge todos los símbolos correspondientes a bibliotecas
dinámicas. Hay que tener en cuenta que en algunos S.O. los
segmentos de código ejecutables no son modificables
Modelo de memoria de un proceso

 Ventajas:

 Menor tamaño ejecutables


 Código de rutinas de biblioteca sólo en archivo de biblioteca
 Procesos pueden compartir código de biblioteca
 Actualización automática de bibliotecas: uso de versiones.
Suele haber en un sistemas varias versiones de la misma
biblioteca. Cuando un programa hace referencia a uno de sus
símbolos, se busca la versión adecuada

 Desventajas:

 Mayor tiempo de ejecución debido a carga y montaje. Se trata


de un retraso tolerable, ya que se compensan el resto de las
ventajas
 Ejecutable no autocontenido
Modelo de memoria de un proceso

 Forma de uso :
1. Enlace dinámico implícito: Se especifica en tiempo de
montaje qué biblioteca usar, pero se pospone su carga y
montaje a tiempo de ejecución.
2. Uso explícito:

 Requerido por aplicaciones que determinan en


tiempo de ejecución qué bibliotecas deben usar
 No se especifica la biblioteca en mandato de montaje

 Es el programa quien solicita la carga de bibliotecas


mediante servicio del sistema (dlopen en UNIX y
LoadLibrary en Win32)
 El acceso a los símbolos de la biblioteca ya no es
transparente, sino que se ha de hacer desde el propio
programa, mediante los servicios apropiados del
sistema (dlsym en UNIX y GetProcAddress en Win32)
Modelo de memoria de un proceso

 El uso de bibliotecas dinámicas es transparente. Es decir, los


mandatos de compilación y montaje son idénticos que en el caso
de las estáticas
 Si la biblioteca dinámica contiene referencias internas (a
símbolos definidos en la misma) existe el problema, ya
comentado, de la zona compartida con autoreferencias
 Tres posibles soluciones:
1. A cada biblioteca dinámica se le asigna un rango de direcciones
fijo
 Inconveniente: Poco flexible
2. En montaje en tiempo de ejecución se reajustan autoreferencias
 Inconveniente: Impide compartir código de biblioteca
3. Crear biblioteca con código independiente de posición (PIC)
 Se genera código con direccionamiento relativo a registro
 Inconveniente (tolerable): direccionamiento relativo menos eficiente
Modelo de memoria de un proceso

Ficheros ejecutables

 Distintos fabricantes usan diferentes formatos

 Ejemplo: En Linux Executable and Linkable Format (ELF)

 Estructura: Cabecera y conjunto de secciones

 Cabecera: información de control que permite interpretar el


contenido del ejecutable. Suele incluir la siguiente información:
 Número mágico que identifica a ejecutable. Por ejemplo, en formato
ELF el primer byte debe contener el valor hexadecimal 7f, los tres
siguientes los caracteres E, L y F
 Punto de entrada del programa: es decir, el valor que inicialmente
contendrá el contador del programa
 Tabla de secciones. Para cada una de ellas se especifica: tipo,
dirección de comienzo en el archivo y tamaño.
Ejemplo:
 Tabla de símbolos para depuración
 Lista de bibliotecas dinámicas usadas
Modelo de memoria de un proceso

Fichero Ejecutable
0 Número mágico Despl. Tam.
Contador de programa inicial Código 1000 4000
Cabecera
.................... Datos con v.i. 5000 1000
Tabla de secciones Datos sin v.i. ------ 500
1000 ...................... ........ ........

Código T. Símbolos 8000 1000

5000
Secciones Datos con valor inicial

................

8000
Tabla de símbolos
Modelo de memoria de un proceso

 Las secciones más relevantes se volcarán en el mapa de


memoria del proceso: código, datos con valor inicial y datos
sin valor inicial

 Código (texto): contiene el código del programa

 Datos con valor inicial: variables globales inicializadas

 Datos sin valor inicial: variables globales no inicializadas:


aunque aparece en la tabla de secciones no se almacena en el
ejecutable, ya que su contenido no es relevante

 No hay sección vinculada a variables locales, ya que estas


tienen carácter dinámico (se crearán en la pila del proceso,
cuando los procedimientos en que aparecen sean invocados)
Modelo de memoria de un proceso

 Variables globales
 Estáticas
 Se crean al iniciarse programa
 Existen durante toda la ejecución del proceso
 Dirección fija en memoria y en ejecutable

 Variables locales y parámetros


 Dinámicas
 Se crean al invocar la función
 Se destruyen al retornar
 La dirección se calcula en tiempo de ejecución
 Recursividad: varias instancias de una variable
Modelo de memoria de un proceso

 Ejemplo:

int x=8; /* Variable global con valor inicial */


int y; /* Variable global sin valor inicial */

f(int t){ /* Parámetro */


int z; /* Variable local */
.......
}
main(){
.......
}
Modelo de memoria de un proceso

Mapa de memoria de un proceso


 El mapa de memoria o imagen del proceso estará compuesto
por un conjunto de regiones o segmentos; cada una de
ellas almacena cierto tipo de información

 Cada región:

 Tiene asociada una información (un “objeto de memoria”)


 Consiste en una zona contigua tratada como unidad al proteger
o compartir
 Se caracteriza por:
 Dirección de comienzo y tamaño inicial
 Soporte: donde se almacena su contenido inicial (soporte en archivo y
sin soporte, es decir, objeto sin contenido inicial)
 Protección: RWX
 Uso compartido o privado
 Tamaño fijo o variable
Modelo de memoria de un proceso

 La ejecución de un programa crea un mapa de memoria


a partir del archivo ejecutable. Cada sección del ejecutable da
lugar a una región del mapa inicial.

 Código (texto): compartida, lectura y ejecución, tamaño fijo,


soporte en archivo ejecutable

 Datos con valor inicial: privada, lectura y escritura, tamaño fijo,


soporte en archivo ejecutable

 Datos sin valor inicial: privada, lectura y escritura, tamaño fijo,


sin soporte (se rellena a ceros en algunos lenguajes)

 Pila: privada, lectura y escritura, tamaño variable, sin soporte.


Crece hacia direcciones más bajas. La pila inicial sólo contiene
los argumentos de llamada al programa.
Modelo de memoria de un proceso

Fichero ejecutable Mapa de memoria


0 0
Número mágico
Cabecera Código
Contador de programa
inicial
4000
Datos con valor
Tabla de secciones inicial
1000 5000
Datos sin valor
Secciones Código inicial
5500
5000
Datos con valor
inicial
8000

Tabla de símbolos Pila

Argumentos del programa


Modelo de memoria de un proceso

 Durante ejecución de proceso se crean nuevas regiones. Es decir, el mapa de


memoria tiene un carácter dinámico. Las nuevas regiones creadas en tiempo de
ejecución pueden ser:
 Región de Heap
 Soporte de memoria dinámica (malloc en C)

 Privada, lectura y escritura, tamaño variable, sin soporte (inicializada a cero)

 Crece hacia direcciones más altas

 Archivo proyectado
 Región asociada al archivo proyectado

 Tamaño variable, soporte en archivo

 Protección y carácter compartido o privado especificado en la proyección

 Memoria compartida
 Región asociada a la zona de memoria compartida

 Compartida, tamaño variable, sin soporte (inicializada a 0)

 Protección especificada en proyección

 Pilas de threads
 Cada pila de thread corresponde con una región.

 Estas regiones constan de las mismas características que las asociadas a la pila
del proceso
Modelo de memoria de un proceso

Región Soporte Protección Comp/Priv Tamaño

Código Fichero RX Compartida Fijo

Dat. con v.i. Fichero RW Privada Fijo

Dat. sin v.i. Sin soporte RW Privada Fijo

Pilas Sin soporte RW Privada Variable

Heap Sin soporte RW Privada Variable

F. Proyect. Fichero por usuario Comp./Priv. Variable

M. Comp. Sin soporte por usuario Compartida Variable


Modelo de memoria de un proceso
Modelo de memoria de un proceso

Operaciones sobre regiones


Para estudiar la evolución del mapa de memoria a lo largo de la
ejecución de un proceso, se pueden distinguir las siguientes
operaciones:

 Crear región: Implícitamente al crear mapa inicial (por parte del SO)
o por solicitud del programa en tiempo de ejecución de ejecución
(por ejemplo, al cargar una biblioteca dinámica)

 Eliminar región: Implícitamente al terminar el proceso o por solicitud


del programa en tiempo de ejecución (por ejemplo, al desproyectar
un archivo)

 Cambiar tamaño de la región: Implícitamente para la pila o por


solicitud del programa para el heap (cuando se hace malloc)

 Duplicar región: Operación requerida por el servicio fork de POSIX


Esquema de memoria basados en asignación contigua

Esquema Hardware
El mapa de proceso se ubica en una zona contigua de la
memoria principal.
Proceso:
 El S.O. busca un hueco en memoria de tamaño suficiente para
alojar su mapa de memoria del proceso que comienza.
 El S.O. reserva la parte del hueco necesaria y crea en ella el
mapa inicial del proceso
 Se establece la función de traducción, de forma que las
direcciones del programa se correspondan con las direcciones
existentes en el hueco asignado.

Hardware requerido:
 Registros valla (registro base y registro límite). Estos dos
registros sólo son accesibles en modo privilegiado.
 Los registros valla están desocupados cuando el S.O. toma el
control para acceder a todo el mapa de memoria.
Esquema de memoria basados en asignación contigua

• Registro límite: Se comprobará que las direcciones usadas por el


proceso no excedan el valor almacenado en él.
• Registro base: Una vez realizada la comprobación anterior, se suma a
cada dirección el valor contenido en este registro, de forma que se
obtiene la dirección física pertinente.
Memoria
0

Proceso 4
Procesador 10000
Hard. traducción (MMU) 10200
PC
Proceso 7
8 R. límite R. base
15036
4000 21000 Proceso 3
Registro instrucción
NO 20500
21000
LOAD R3, /1500 > +
Proceso 2
22500
SI
25000
Excepción
N
Esquema de memoria basados en asignación contigua

Gestión del SO
El S.O. almacena en el BCP cuáles son los valores de los
registros valla.

Dedica una estructura para conocer en todo momento el estado de


la memoria, identificando qué huecos están libres. Normalmente
se usa una lista en la que se almacena la dirección inicial y el
tamaño de cada hueco.
La gestión de esta lista obliga a comprobar, al desocupar espacio, si
el nuevo espacio libre puede unirse a huecos vecinos.
Problema:Según se van ejecutando procesos van quedando
fragmentos de memoria libres, que debido a su tamaño no podrán
ser usados en asignaciones de espacio a memoria. Este problema se
denomina fragmentación externa y conlleva una mala gestión de
memoria.
Solución tradicional: Compactar los huecos de forma que queden
contiguos. Para ello es necesario reajustar los registros valla de
los procesos. INEFICIENTE.
Esquema de memoria basados en asignación contigua

Política de asignación de espacio


El S.O. debe considerar qué espacio, de los huecos libres, se usará
intentando encontrar un equilibrio entre buen aprovechamiento de
espacio y tiempo de respuesta corto, es decir, se aplica un
algoritmo de decisión que debe ser eficiente.
Este problema es un clásico: ¿Cómo asignar espacio para su
aprovechamiento óptimo?. Existen tres posibles enfoques:
a) Mejor ajuste (best-fit). Se elige la zona libre más pequeña
donde quepa el mapa del proceso.
• Problema: Conlleva crear nuevos huecos de tamaño
pequeño. Además, elegir el hueco más pequeño obliga a
mantener ordenados por tamaño los huecos disponibles.
No es eficiente
b) Peor ajuste. Se busca el hueco más grande, intentando evitar la
generación de huecos pequeños. Sigue precisando mantener el
control de los tamaños
c) El primero que ajuste (first-fit). Suele ser la mejor política. Muy
eficiente, ya que basta con encontrar una zona libre de tamaño
suficiente, y ofrece un aprovechamiento aceptable
Esquema de memoria basados en asignación contigua

Valoración del esquema contiguo


• Valoracion:
– Espacios independientes para procesos: mediante
registros valla
– Protección: mediante registros valla
– Compartir memoria: no es posible
– Soporte de regiones:
• No existe (no hay mecanismo de permisos sobre el
espacio asignado a cada proceso)
• Se reserva espacio para huecos, ya que el espacio
asignado al proceso en primera instancia debe servir
para todo su tiempo de vida
– Maximizar rendimiento:
• Mal aprovechamiento de memoria por fragmentación
externa
– Mapas de MV de tamaño adecuado:
• No permite memoria virtual
Intercambio

¿Qué hacer si no caben todos los programas en memoria


principal?

Usar disco (dispositivo swap) como respaldo de la memoria


principal. Si no caben en memoria todos los procesos activos, se
elige un proceso residente y se copia en disco su imagen de
memoria
Expulsar (swap-out) a los procesos bloqueados. El proceso de
expulsión no implica copiar toda la imagen del proceso (por
ejemplo, no es preciso ocupar los huecos ni el código, al poder
recuperarse fácilmente del ejecutable). Un proceso expulsado
vuelve a cargarse (swap-in) cuando esté listo para ejecutar y haya
espacio en memoria.

Políticas de asignación de espacio en swap:


Preasignación: al crear el proceso se reserva espacio de swap.
NO Preasignación: sólo se reserva espacio de swap al expulsar.
(¿Semejanza con estado “suspendido”?)
Memoria virtual

Conceptos
La técnica de la MV se usa prácticamente en todos los SSOO
modernos. Esta técnica se basa en transferir información
entre memoria principal y memoria secundaria (por lo
que involucra varios niveles de la jerarquía de memoria)

Suele implementarse en un esquema de paginación (es decir,


la unidad de información intercambiada entre los diferentes
niveles de la jerarquía de memoria es la página)

Elemento Clave: Proximidad referencial habitual de los


procesos. Esta propiedad permite que un proceso puede
funcionar disponiendo en memoria de una parte de su
imagen de memoria (conjunto residente).

Objetivo final: conseguir que la información necesaria para un


proceso (conjunto de trabajo) vaya ocupando la memoria
principal según se va necesitando (es decir, conjunto de
trabajo === conjunto residente)
Memoria virtual

Ventajas:

a) Aumento del grado de multiprogramación. Por tanto,


aumento en el rendimiento del sistema
b) Posibilidad de ejecutar programas más grandes que la
MV disponible

El uso de la MV no implica que se acelere la ejecución


del programa (más bien al contrario, debido a la
sobrecarga asociada a los movimientos de información
entre niveles de la jerarquía). Este mecanismo no es
apropiado para sistemas de tiempo real.
Memoria virtual

Paginación
• Página: Zona contigua de memoria de determinado tamaño.
(Por motivos de eficiencia se suele trabajar siempre con tamaños
potencia de 2. Ej:4 KB.)
• Organización:
— El mapa de memoria del proceso se considera dividido en
páginas.
— La memoria principal se considera dividida en marcos de
página (tamaño de marco = tamaño de página).
— Los marcos contendrán páginas de los procesos en ejecución
— La tabla de páginas (TP) relaciona cada página con el marco
que la contiene. El hardware de traducción (MMU) usa la tabla
de páginas para traducir direcciones lógicas a físicas
— Típicamente la MMU usa dos tablas de páginas (TP):
a) TP del usuario: Por ejemplo, direcciones lógicas que
empiezan por 0
b) TP del sistema: Por ejemplo, direcciones lógicas que
empiezan por 1. Estas sólo se podrán usar en modo
sistema
Memoria virtual

 Cada entrada de la tabla de páginas contendrá, además del número de


marco asociado con la página:
a) Información de protección: tipo de acceso permitido RWX
b) Bit de página válida/inválida: para indicar si dicha entrada contiene una
traducción asociada, es decir, si se corresponde realmente con un marco
c) Bit de página accedida (Ref): activado cuando se accede
d) Bit de página modificada (Mod): activado cuando se escribe
e) Bit de desactivación de caché: se usa cuando la entrada corresponde con
direcciones de E/S
 Tamaño de página: La elección de tamaño de página está condicionada
por diversos factores, entre los que hay que conseguir equilibrio:
 Potencia de 2 y múltiplo del tamaño del bloque de disco
 mejor pequeño por:
 Menor fragmentación
 Se ajusta mejor al conjunto de trabajo
 mejor grande por:
 Tablas más pequeñas
 Mejor rendimiento de dispositivos de E/S
 Compromiso (entre 2K y 16K)
Memoria virtual

 Dirección:Una dirección lógica se obtiene a partir de:


nº página + desplazamiento
 Problema:
 La paginación no ofrece una solución óptima. Lo
ideal sería que cada palabra del mapa de memoria de un
proceso pudiera ubicarse en cualquier dirección. Esta
solución es inviable debido al coste de traducción
 Al no ser así, con la paginación se asigna a cada proceso
un número entero de marcos de página, aunque el
espacio de su mapa de memoria no sea un múltiplo
entero del tamaño de página. Por tanto, se irán
generando huecos (memoria no aprovechada, en la
última de las páginas que no se llena de forma
completa). Este proceso se denomina fragmentación
interna (implica que, en término medio, cada proceso
desperdicia la mitad de una página)
Memoria virtual

Dirección lógica
Página Byte

Marcos de página
0
1
2
3

Registro base de la TP
(RIED)

MP: direcciones físicas


Memoria virtual

T. Páginas Proceso 1
Página 0 Marco 2
Memoria
Página 1 Marco N
Pág. 1 Pr. 2 Marco 0
..............
Pág. P Pr. 2 Marco 1
Página M Marco 3
Pág. 0 Pr. 1 Marco 2
Pág. M Pr. 1 Marco 3
T. Páginas Proceso 2
Pág. 0 Pr. 2 Marco 4
Página 0 Marco 4
............
Página 1 Marco 0
.............. Pág. 1 Pr. 1 Marco N

Página P Marco 1

 Problema: Fragmentación, la memoria asignada es mayor


que la memoria requerida y por lo tanto, se desperdicia
cierta cantidad de espacio
Memoria virtual
 Otras cuestiones:
 En este esquema, el S.O. mantiene una tabla de páginas por
cada proceso. Cuando se produce un cambio de contexto se
indica a la MMU qué tabla de páginas usar
 El S.O. mantiene una única tabla de páginas para sí
mismo. Así, todos los procesos comparten el SO. Cuando un
proceso se ejecuta en modo sistema accede directamente a su
mapa y al del SO
 S.O. mantiene tabla de marcos, como forma de mantener
información de estado de la memoria principal. De cada
marco se conoce su estado (libre, ocupado, etc)
 S.O. mantiene tabla de regiones por cada proceso,
indicando las características de cada región y qué rango de
páginas pertenecen a cada región
 Desperdicio de espacio: Mucho mayor gasto en tablas
que con asignación contigua: es el precio de mucha
mayor funcionalidad
Memoria virtual

 Implementación de la tabla de páginas:


 Las tablas de páginas se mantiene normalmente en memoria
principal. Problemas: eficiencia y gasto de almacenamiento
a) Eficiencia: cada acceso lógico requiere dos accesos a memoria
principal, a la tabla de páginas + al propio dato o instrucción. Solución:
caché de traducciones –› TLB
b) Gasto de almacenamiento: tablas muy grandes. Ejemplo: páginas 4K,
dir. lógica 32 bits y 4 bytes por entrada, la tabla de páginas de cada
proceso tendrá 4MB. Solución: tablas multinivel y tablas invertidas
 Valoración :
 Espacios independientes para procesos: mediante tablas de páginas
 Protección: mediante tablas de páginas
 Compartir memoria: entradas corresponden con mismo marco (bajo
supervisión del SO dos procesos pueden compartir una página
asociada al mismo marco)
 Soporte de regiones: bits de protección, bit de validez: no se reserva
espacio para huecos
 Maximizar rendimiento: Si, al permitir esquemas de memoria más
flexibles
 Mapas de tamaño adecuado: sí, al permitir esquemas de memoria
virtual
Memoria virtual
TLB (Translation Look-aside Buffer): Consta de una memoria
asociativa con información sobre últimas páginas accedidas.
 Para el multiproceso, existen varias posibilidades:
 La TLB no incluye información del proceso. En este caso, habrá
que invalidar la TLB en los cambios de contexto
 Entradas en TLB incluyen información sobre proceso: en este
caso, debe existir un registro de UCP para mantener la
identificación del proceso actual
 Implementación
 HW: La MMU consulta la TLB y si falla, se usa la TP en memoria.
 Ventajas: Es un proceso muy rápido
 Inconvenientes: Actualizar la TP en cambios de contexto y hay que invalidar
la TLB cuando se produce un cambio de contexto (si no tiene información
del PID)
 SW: La MMU no usa la TP, sino que sólo consulta TLB. En caso de
fallo, se activa el SO, que ha de buscar la entrada en la tabla de
páginas (mediante programa), e insertar en la TLB la traducción
hecha, de forma que se pueda reutilizar.
 Ventajas: flexibilidad, ya que la tabla de páginas puede ser definida a
conveniencia, sin restricciones impuestas por el hardware
 Inconvenientes: Es menos eficiente, ya que parte del proceso de traducción
se realiza mediante programa.
Memoria virtual
Una de las opciones disponibles para disminuir el tamaño requerido
por las tablas de páginas es la tabla de páginas multinivel

 Organización:Se trata de una tabla de páginas organizadas en M


niveles:
 Entrada de TP de nivel K apunta a TP de nivel K+1
 Entrada de último nivel apunta a marco de página

 Dirección: La dirección lógica especifica la entrada a usar en cada


nivel
 1 campo por nivel + desplazamiento

 Accesos:Un acceso lógico supone M + 1 accesos a memoria.


Solución: uso de TLB

 Invaliadación:Si todas las entradas de una TP son inválidas, no se


almacena esa TP y se pone inválida la entrada correspondiente de
la TP superior

 Ahorro de espacio:Si el proceso usa una parte pequeña de su


espacio lógico, se consigue ahorro en espacio para almacenar TPs
Memoria virtual

Página Dirección lógica

1er nivel 2º nivel Byte


0
1
2
3 Marcos de página
0
1
2
3

Registro base de la TP
(RIED) n
0
1
2
3

n MP: direcciones físicas


Memoria virtual
 Ejemplo: Proceso que usa 12MB superiores y 4MB
inferiores

 2 niveles, páginas de 4K, dir. lógica 32 bits (10 bits por


nivel) y 4 bytes por entrada
 Tamaño: 1 TP N1 + 4 TP N2= 5 * 4KB = 20KB (frente a
4MB)

 Ventajas adicionales: permite compartir TPs


intermedias y sólo se requiere que esté en memoria la
TP de nivel superior. Las restantes pueden estar en disco
y traerse por demanda
Memoria virtual
memoria
tablas de páginas
segundo nivel Página 2048

..
.
Página 1023

Tabla de páginas
primer nivel
Página 0
..
V .
V
Página 1024
V

I
Página 2047

I ..
V .

Página 3071

.. Página 1048575 (2^20-1)


.

Pág. 1047552 (2^20-1024)


Memoria virtual
Otra alternativa para disminuir el espacio necesario por la tabla de
páginas es la tabla de páginas invertida
 Organización:
 La tabla contendrá tantas entradas como marcos de página haya.
 Cada entrada almacena la página cargada en dicho marco junto con
sus características:
 Número de página,
 Proceso dueño de la página
 El tamaño de la tabla de páginas es proporcional a la memoria
disponible.
 Accesos:La MMU usa una TLB convencional, pero si falla la
traducción se accede a la tabla de páginas invertida. Al estar la
tabla organizada por marcos no se puede hacer una búsqueda
directa. Debería accederse a todas las entradas en busca de la
página correspondiente. Por esta razón se suele organizar como
una tabla hash
 Ahorro de espacio: Se reduce el espacio de almacenamiento
necesario, ya que sólo se guarda información sobre las páginas
válidas
Memoria virtual

Dirección lógica

pid Página Byte

pid página i Byte

Dirección física
Memoria virtual
Segmentación
Con la paginación la MMU no dispone de información sobre las
regiones de los procesos y sólo entiende de páginas. Por esta
razón, el SO debe mantener una lista de las páginas que
componen cada región, lo que supone varias desventajas:
• Al crear una región hay que cuidar que todas las páginas asociadas
tengan la misma información de control
• Para poder compartir una región es preciso que las entradas de varios
procesos apunten a los mismos marcos
Segmentación: es un esquema HW que intenta dar soporte directo a
las regiones. En él se considera el mapa de memoria como
compuesto por varios segmentos.
Se puede considerar que consisten en una generalización de los
registros valla base y límite, pero usando un par de registros por
cada segmento
Memoria virtual

 Dirección:Una dirección lógica estará compuesta por un


número de segmento y un desplazamiento en el mismo.
 Traducción: La forma de realizar la traducción puede
apreciarse en la imagen siguiente:
dirección lógica
s d
tabla de segmentos

límite base

NO memoria
> +
SI

Excepción
Memoria virtual
 Tabla de segmentos:En este caso, la MMU usa una tabla de
segmentos (TS).
 Organización:
 El SO mantiene una TS por proceso, de forma que en cada
cambio de contexto se notifica a MMU cuál debe usar
 Cada entrada de TS contiene (entre otros):
 Registro base y límite del segmento
 protección: RWX

 Problema: Fragmentación Externa


 En este esquema se produce fragmentación externa, ya que el
almacenamiento de los segmentos se realiza de forma
contigua.
 El SO debe mantener una lista que le permita conocer qué
zonas de memoria están libres y cuáles ocupadas: es decir,
estructuras de datos que identifiquen huecos y zonas
asignadas
Memoria virtual
 Valoración:

 Espacios independientes para procesos: mediante su propia


TS, que crea un espacio lógico independiente
 Protección: mediante TS, ofreciendo espacios disjuntos de
memoria
 Compartir memoria: bajo control del SO es posible que dos o
más procesos tengan un segmento asociado a la misma zona
de memoria
 Soporte de regiones: bits de protección
 Maximizar rendimiento : No lo maximiza, por la
fragmentación externa
 Mapas de tamaño adecuado: No cumple este objetivo porque
no permite implementar eficientemente un sistema de
memoria virtual

Por tanto, tal y como se ha presentado se usa en muy pocos SO reales


Memoria virtual
Segmentación paginada
Se intenta aunar las ventajas de ambos esquemas:
segmentación y paginación:
 Segmentación: soporte para regiones.
 Paginación: mejor uso del espacio de memoria.

 Organización:
 Entrada en TS apunta a una TP para el segmento.
 El espacio del segmento está compuesto de varias
páginas, de forma que su espacio no tiene que ser
contiguo.
Memoria virtual

•Traducción:La traducción se lleva a cabo según se indica.

dirección lógica
s p d tabla de páginas
tabla de segmentos para segmento s

límite dir. T. Pág. p m

NO memoria
> m d
SI
dirección
Excepción física
Memoria virtual
 Valoración:

 Espacios independientes para procesos: mediante TS


 Protección: mediante TS
 Compartir memoria: bajo control del SO, podemos hacer que
una misma entrada aparezca en diferentes TS (es decir, pueda
ser usado por varios procesos)
 Soporte de regiones: bits de protección
 Maximizar rendimiento: la paginación aprovecha
eficientemente el espacio de memoria.
 Mapas de tamaño adecuado: permite esquemas de memoria
virtual

 Ventajas: Frente a paginación sin segmentos facilita al SO


la gestión de las regiones, pero requiere HW más complejo
Memoria virtual
Paginación por demanda
Una vez analizados los diferentes esquemas hardware vamos a ver
cómo se articulan para construir un esquema de memoria virtual
(estos esquemas también pueden usarse sin memoria virtual, pero
en la actualidad su uso está siempre vinculado a la memoria
virtual)

 Normalmente la memoria virtual se construye sobre esquemas de


paginación pura o segmentada. De esta forma, la unidad de
información intercambiada entre memoria principal y secundaria
es la página.

 Normalmente la transferencia de información se lleva a cabo bajo


demanda (paginación por demanda). De esta forma, cuando un
proceso necesita acceder a una página que no está en memoria
principal, se genera un fallo de página y el SO se encarga de
transferirla desde la memoria secundaria. Si al traerla no hay
espacio suficiente en MP, será necesario desalojar alguna de las
páginas actuales (ello se hace mediante un algoritmo de
reemplazo)
Memoria virtual
 La construcción de un sistema de memoria virtual sobre un
procesador con paginación implica usar un bit de validez en las
entradas de la tabla de páginas, que indica si la página es
válida. Estarán marcadas como inválidas todas las páginas que no
residen en MP, así como las que constituyen huecos en el mapa
de memoria.

 Para las entradas correspondientes a páginas no residentes en


MP, la entrada principal, en lugar de almacenar el marco donde
reside contendrá la dirección del dispositivo de memoria en
que se encuentra almacenada. De forma que cuando se
produce un acceso a una de estas páginas, se produce una
excepción y se activa el SO, responsable de hacer la transferencia
desde memoria secundaria.

 Algunos sistemas también usan la técnica de prepaginación. Al


ocurrir un fallo de página no sólo traen la página en cuestión,
sino también las cercanas, al suponerse que se usarán en un corto
plazo de tiempo. La efectividad de esta técnica dependerá del
acierto de la predicción.
Memoria virtual

Veamos cómo se gestiona la ocurrencia de un fallo de página:


 La MMU genera una excepción. Normalmente deja en un
registro especial la dirección que causó el fallo
 Se activa el SO, que comprueba:
 Si la página es inválida, se aborta el proceso (solución normal,
aunque también podría bastar con el envío de una señal).
 Si la página es ausente se siguen los pasos siguientes:
a) Se consulta la tabla de marcos para ver si hay algún hueco libre:
i. Si no hay ningún marco libre se aplica el algoritmo de
reemplazo, que decidirá el marco a desalojar. La página
almacenada hasta entonces se marca como inválida. Si ha sido
modificada, antes hay que salvar su contenido en memoria
secundaria
ii. Si hay marco libre: se inicia la lectura desde memoria
secundaria y se vuelca al marco, marcándose como válida dicha
entrada en la TP y apuntando el marco en que está almacenada
Memoria virtual
 En el peor de los casos un fallo de página puede suponer dos
operaciones de E/S:

a) Salvaguarda de la página expulsada


b) Lectura de la página nueva

Dos políticas definen el funcionamiento del sistema de memoria

 Política de reemplazos:
 Reemplazo local: Sólo puede usarse para reemplazo un marco
asignado al proceso que causa fallo
 Reemplazo global: Puede usarse para reemplazo cualquier marco

 Política de asignación de espacio a los procesos:


 Asignación fija: El número de marcos de página para cada proceso es
fijo.
 Asignación dinámica: El número de marcos de página para cada
proceso es dinámico
Memoria virtual
Políticas de reemplazo
 Objetivo: Minimizar la tasa de fallos de página.

 Cada algoritmo descrito tiene versión local y global:


 Local: criterio se aplica a las páginas residentes del proceso
 Global: criterio se aplica a todas las páginas residentes

 Algoritmos a estudiar
A. Óptimo
B. FIFO
C. Reloj (o segunda oportunidad)
D. LRU
E. Buffering de páginas
F. Retención de páginas en memoria
Memoria virtual

A) Algoritmo óptimo

 Criterio: Página residente que tardará más en


accederse
 Implementación: Irrealizable, ya que supone
disponer de una predicción fiable del uso de
las páginas en un futuro a medio plazo
 Versión local y global
 Interés para estudios analíticos comparativos.
Memoria virtual

B) Algoritmo FIFO
 Criterio: se elimina la página que lleva más tiempo residente

 Implementación: Fácil
 Páginas residentes en orden FIFO –› se expulsa la primera
 No requiere hardware especial
 En el caso de estrategia local se mantiene una lista de páginas por
cada proceso. En el caso global, basta con una única lista

 Problema:
 Una página que lleva mucho tiempo residente puede seguir
accediéndose frecuentemente.
 Su criterio no se basa en el uso de la página.
 Anomalía de Belady: Se pueden encontrar ejemplos en que al
aumentar el número de marcos aumenta el número de fallos de
página
Memoria virtual

C) Algoritmo de segunda oportunidad o del reloj


Se trata de una modificación del algoritmo FIFO, para evitar que una
página residente desde hace tiempo sea desalojada pese a estar
siendo usada. Para ello se usa el bit de referencia Ref de las
páginas, con lo que se detecta su uso

 Criterio:
 Si la página elegida por FIFO no tiene activo el bit Ref, es la página
expulsada
 Si lo tiene activo se da 2ª oportunidad antes de expulsar: se desactiva
el bit Ref, se pone página al final de FIFO, se aplica criterio a la
siguiente página

 Implementación: Se puede implementar el orden FIFO mediante


una lista circular con una referencia a la primera página de la lista:
se visualiza como un reloj donde la referencia a la primera página
es la aguja del reloj
Memoria virtual

D) Algoritmo LRU (last recently used)

 Criterio: Basado en proximidad temporal de referencias: página


residente menos recientemente usada como página a eliminar
 Implementación:Posible implementación con HW específico y un
contador de accesos a memoria:
 Cada entrada de la TP posee un contador
 Cada acceso a memoria la MMU copia el contador del sistema a
entrada referenciada
 Reemplazo: página con contador más bajo
 Difícil implementación estricta (hay aproximaciones): precisaría una
MMU específica, ya que habría que controlar los accesos realizados a
cada marco para actualizar los contadores de los accesos en la TP
 Nota: en su versión global, hay que considerar los contadores de las
páginas menos recientemente usadas teniendo en cuenta el tiempo
lógico de cada proceso
Memoria virtual

E) Buffering de páginas
 Criterio:Esta técnica intenta evitar el problema con las páginas
modificadas que han de ser desalojadas. En este caso, el
tratamiento del fallo de página implica realizar dos accesos a disco,
uno para almacenar la página modificada y para traer la nueva

 Implementación:
 Mantiene una reserva de marcos libres. Cuando se produce un fallo
de página, siempre se usa un marco libre (es decir, en verdad no hay
reemplazo)
 Cuando el número de marcos libres queda por debajo de cierto
umbral se activa un “demonio de paginación”, que aplica
repetidamente el algoritmo de reemplazo:
 Páginas no modificadas pasan a lista de marcos libres
 Páginas modificadas pasan a lista de marcos modificados: cuando se
escriban a disco pasan a lista de libres; suelen escribirse en tandas (lo que
mejora el rendimiento)
 Si se referencia una página mientras está en estas listas: se recupera
directamente de la lista (no hay E/S), lo que puede mejorar el
comportamiento de algoritmos poco eficientes
Memoria virtual

F) Retención de páginas en memoria

 Criterio:No todas las páginas son reemplazables

 Aplicación:
 Se aplica a páginas del propio S.O: si sus páginas están fijas en
memoria, su gestión es más sencilla
 También se aplica mientras se hace DMA sobre una página. La
página no será reemplazable hasta que finalice la operación
sobre ella

 Implementación: Algunos S.O. ofrecen a las aplicaciones un


servicio para fijar en memoria una o más páginas de su
mapa: adecuado para procesos de tiempo real, aunque puede
afectar al rendimiento del sistema. En POSIX se trata del
servicio mlock
Memoria virtual
Política de asignación de marcos de página
El SO deberá decidir cuántos marcos de página asigna a cada proceso:
a) Asignación Fija

b) Asignación Dinámica

A) Asignación fija

 Número constante de marcos asignados al proceso. Puede


depender de las características del proceso: tamaño, prioridad,...
 No se adapta a las distintas fases de ejecución. Como positivo, el
comportamiento del proceso es relativamente predecible
 Sólo tiene sentido usar estrategia de reemplazo local
 La arquitectura impone el Nº mínimo de marcos de página:
mínimo número de marcos a asignar igual al número de referencias
que aparezca en la instrucción que más fallos de página pueda generar
Memoria virtual

B) Asignación dinámica

 El número de marcos asignados a un proceso es variable


dependiendo del comportamiento del proceso (y
posiblemente de los demás procesos).
 Se adapta a las diferentes fases por las que puede pasar un
proceso
 Se pueden usar tanto estrategias de reemplazo global como
local.

 Asignación dinámica + reemplazo local: el proceso va


aumentando o disminuyendo su conjunto residente
dependiendo de su comportamiento (comportamiento
relativamente predecible)

 Asignación dinámica + reemplazo global: los procesos compiten


por el uso de las páginas entre ellos (comportamiento
difícilmente predecible)
Memoria virtual
Hiperpaginación (thrashing)
 Definición:Tasa excesiva de fallos de página de un proceso o
en el sistema, debido a que el número de marcos de página
asignados es insuficiente para albergar el conjunto residente

 Con asignación fija. Hiperpaginación en el proceso Pi si


conjunto residente de Pi < conjunto de trabajo Pi

 Con asignación variable. Hiperpaginación en el sistema si


nº marcos disponibles <  conjuntos de trabajo de los procesos

 Problema: decae el grado de uso de la CPU. Los procesos


están casi siempre en colas de dispositivo de paginación.
 Solución: controlar la carga:
 Disminuir el grado de multiprogramación,
 Suspender uno o más procesos liberando sus páginas residentes

 ¿Cómo detectar esta situación?


Memoria virtual

Utilización de la UCP

grado de multiprogramación
Se verán a continuación algunas estrategias de control de la
carga de trabajo:
A. Estrategia del conjunto de Trabajo
B. Estrategia de administración basada en la frecuencia de
fallos de página
C. Estrategia de control de carga para algoritmos de
reemplazo globales
Memoria virtual
A) Estrategia del conjunto de trabajo
 Objetivo: Determinar el conjunto de trabajo de cada proceso, es
decir, las páginas usadas por el proceso en las últimas N referencias

 Proceso:
 Si el conjunto de trabajo decrece se liberan marcos.
 Si el conjunto de trabajo crece se asignan nuevos marcos.
 Si no hay marcos disponibles se suspenderá algún(os) proceso(s), que
se reactivan cuando haya marcos suficientes

 Condición: Si el SO es capaz de detectar el conjunto de trabajo de


cada proceso, puede especificarse una estrategia de asignación
dinámica con reemplazo local

 Implementación: Difícil, ya que precisaría una MMU específica


que controlara las páginas accedidas por cada proceso.

 Aproximación: Estrategia basada en frecuencia de fallos de página


(PFF), controlando la tasa de fallos de página de cada proceso
Memoria virtual
B) Estrategia basada en frecuencia de fallos de página
 Objetivo: Controlar la tasa de fallos de página por proceso
 Proceso:
 Si tasa < límite inferior, se liberan marcos aplicando un
algoritmo de reemplazo
 Si tasa > límite superior, se asignan nuevos marcos. Si no
hay marcos libres se suspende algún proceso
tasa de fallos de página

límite superior

límite inferior

número de marcos
Memoria virtual
C) Estrategia de control de carga para algoritmos de reemplazo
globales
 Objetivo: Controlar la hiperpaginación utilizando un
algoritmo de control de carga. Se da en algoritmos de
reemplazo global.

 Proceso: Ejemplo: UNIX 4.3 BSD


 Reemplazo global con algoritmo del reloj. Variante con
dos “manecillas”: hay dos punteros en vez de uno
 Uso de buffering de páginas. Un demonio de paginación
controla el número de marcos libres
 Si el número de marcos libres < umbral, el demonio de
paginación aplica reemplazo
 Si se repite con frecuencia la falta de marcos libres: un
proceso “swapper” suspende procesos
Memoria virtual
Gestión del espacio de swap
La asignación del espacio de swaping puede seguir dos
técnicas:
a) Preasignación de swap:
Al crear la nueva región se reserva espacio de swap para ella. Al
expulsar una página, con esta estrategia, ya habrá espacio de swap
para almacenar su contenido
b) Sin preasignación de swap:
Al crear una región no se hace reserva de swap. Las páginas de la región
se irán trayendo a MP por demanda desde el soporte de la región.
Sólo se reserva espacio de swap para una página cuando es
expulsada por primera vez

Tendencia actual: Se suele utilizar más la estrategia sin


preasignación, puesto que la preasignación de swap conlleva
un peor aprovechamiento de memoria secundaria (toda
página debe tener reservado espacio de swap).
Memoria virtual
Operaciones sobre regiones de un proceso
Se considerarán a continuación las siguientes operaciones
sobre las regiones de un proceso en un sistema con memoria
virtual:
a) Creación de región:
Al crear el mapa inicial o por solicitud posterior
b) Liberación de región:
Al terminar el proceso o por solicitud posterior
c) Cambio de tamaño de región:
Aumento de tamaño: hay que comprobar que no se solape con otra
región y equiparar las nuevas páginas a las ya existentes en la región.
El caso de expansión de la pila es algo más complejo.
Disminución de tamaño
d) Duplicado de región:
Operación requerida por el servicio fork de POSIX
Se duplica todo y se trata de una operación costosa
Memoria virtual
a)Creación de nueva región
Acciones:
 Al crear una región no se asigna MP ( se hará por demanda).
 Se marcarán las páginas como no residentes y válidas (fallo de
página cuando se intenten acceder)
 El S.O. actualiza la tabla de regiones y guarda la información
correspondiente a las páginas de la región, rellenando las entradas
de la TP. Debe buscar un hueco en el mapa de memoria para
asignar a nueva región.
 Según el soporte:
 Soporte en archivo: Páginas marcadas como Cargar de archivo (CA)
y se almacena dirección del bloque del archivo correspondiente
 Sin soporte: Páginas marcadas como Rellenar con ceros (RC) y se
inicializa cuando hay un fallo de página.
 Si la región es privada con preasignación de swap, se reserva
espacio de swap
 Si la región es la pila:
 Se copian los argumentos iniciales del proceso en bloque(s) de swap
Memoria virtual
 Algoritmo de expulsión:
 Si la región es privada se escribe página en swap. Si no hay
preasignación de espacio swap, en la primera expulsión se
reserva espacio. Posteriores fallos se sirven de ese bloque de
swap
 Si la región es compartida se escribe página en soporte, para
que todos los procesos puedan ver las modificaciones. Todos los
fallos se sirven del soporte

 En la creación del mapa inicial (servicio exec en POSIX), se


crean las regiones según sus características
 Código: CA, Compartida, RX
 Datos v. inicial: CA, Privada, RW
 Datos sin v. inicial: RC, Privada, RW
 Pila inicial: contenido inicial en swap

Los huecos se marcan como páginas inválidas, tanto para el HW


como para el S.O.
Memoria virtual

Swap
Tabla de páginas Archivo Ejecutable
1ªpág. Cabecera
Código RX A Bloque T (arch.) Bloque T
........................... Código
1ªpág.
Dat.v.i. RW A Bloque U (arch.) Bloque U
Datos con valor inicial
...........................
1ªpág. ................
Dat.no.v.i.
RW A Rellenar con 0
...........................
1ªpág. Bloque S
Pila
RW A Bloque S (swap) Pila

Estado inicial de ejecución en un sistema sin preasignación de swap


Memoria virtual
b) Liberación de región
 Acciones:
 Actualizar tabla de regiones para eliminar región
 Marcar como inválidas páginas asociadas
 Si la región es privada, se libera el espacio de swap
asociado
 Cuando:
 Solicitud explícita (p.ej. desproyección de región).
 Finalización del proceso (exit en POSIX).
 El servicio exec de POSIX libera el mapa actual del
proceso antes de construir un nuevo mapa vinculado al
ejecutable a “usar”
Memoria virtual
c) Cambio de tamaño
 Acciones:
 Si disminuye:
 Se ajusta la tabla de regiones.
 Se marcan páginas como inválidas.
 Se libera espacio de swap
 Si aumenta:
 Se comprueba que no haya solapamiento.
 Se fijan nuevas páginas como no residentes y con las mismas
características que otras páginas de la región.
 Si hay preasignación se reserva espacio en swap para las nuevas
páginas.
 Casos especiales:
 Expansión del heap: Solicitada por programa mediante
servicios del S.O. Se marcan las páginas correspondientes como
RC, privadas, RW

 Expansión de pila no proviene de una solicitud del proceso,


sino de la propia evolución de la pila. Por esta razón esta
operación es automática
Memoria virtual

d) Duplicado de una región


 Acciones:
 Se duplican las regiones privadas del padre y se
comparten las no privadas

 La copia de una región de un proceso en el mapa de


memoria de otro proceso es una operación costosa,
ya que también se debe copiar el contenido.

 Problema: La ejecución de fork sería muy ineficiente.


 Solución: copy-on-write (COW). Se comparte una
página mientras no se modifique. Si un proceso la
modifica, se crea una copia para él. Esta operación se
denomina duplicado por demanda
Memoria virtual
 Implementación de COW
 Se comparten las páginas de regiones duplicadas
 Se marcan de sólo lectura y con bit de COW.
 Al realizar la primera escritura se produce un fallo de
proteccción y se genera una copia privada para el proceso que
escribe.
 Lo normal es que haya varios procesos con misma región
duplicada, por lo que existe un contador de uso por página.
 Cada vez que se crea copia privada se decrementa contador, ya
que hay un proceso menos trabajando sobre la copia
compartida.
 Si llega a 1, se desactiva el bit COW, al no haber duplicados

 FORK con COW. Se comparten todas las regiones. Las


regiones privadas se marcan como COW en padre e hijo, el
resultado de la optimización es que en vez de duplicar todo
el espacio de memoria sólo se duplica la TP.
Archivos proyectados en memoria
 ¿En qué consiste?
 Recordemos que en un sistema con MV se hacen
corresponder las entradas de la TP con bloques de un
archivo ejecutable.
 La técnica de la proyección permite usar esta misma idea,
pero con cualquier archivo.
 El S.O. permite que un programa solicite la
correspondencia de una zona de su mapa de memoria con
los bloques de un archivo cualquiera (ya sea completo o en
parte).
 En la solicitud el programa indicará el tipo de acceso que
desea para las páginas asociadas al archivo.
 Servicio:
 La generalización de la técnica de memoria virtual
permite ofrecer a los usuarios una forma alternativa de
acceder a los archivos.
Archivos proyectados en memoria

• Proceso: Se rellenan las entradas de la TP correspondientes con :


—Página no residente,
—CA (cargar de archivo),
—Privada/compartida y
—Protección (indicada en la llamada).

De esta forma, Mapa de memoria


cuando el
programa accede Código

a una posición
de memoria Tabla de páginas Datos con valor inicial

asociada al ........................... Archivo


Datos sin valor inicial
archivo proyectado, 1ªpág. RW A Bloque 0 (arch.) Bloque 0
Archivo
está accediendo Última pág.
...........................
Bloque 1
realmente Archivo RW A Bloque N (arch.) 10240
Bloque 2
al archivo ...........................
Archivo Proyectado
.............

Bloque N
Pila
Archivos proyectados en memoria

 Ventajas: Se trata por tanto de una forma alternativa de


acceso a archivos, frente a las llamadas read/write. De esta
forma se producen:
 Menos llamadas al sistema lo que se traduce en una notable
mejora de los tiempos de acceso.
 Se evitan copias intermedias de la información ya que el S.O.
transfiere directamente la información entre la región de
memoria y el archivo.
 Se facilita la programación, ya que una vez proyectado se
accede al archivo como si fuera una estructura de datos en
memoria

 Ejemplo: Típicamente las bibliotecas dinámicas se cargan


usando este tipo de proyección: la zona de código se proyecta
como compartida y la zona de datos con valor inicial se
proyecta como privada
Servicios de gestión de memoria

El gestor de memoria realiza funciones internas. Por eso,


ofrece pocos servicios directos para las aplicaciones.
Básicamente están relacionados con la proyección de
archivos:

 POSIX
 Proyectar un archivo: mmap
 Desproyectar un archivo: munmap

 Win32
 Proyectar un archivo: 2 pasos:
 Crear proyección: CreateFileMapping

 Realizar proyección: MapViewOfFile

 Desproyectar un archivo: UnmapViewOfFile


Servicios de gestión de memoria

void *mmap(void *direc, size_t lon, int prot, int indic, int desc, off_t
desp);

Establece la proyección entre el espacio de direcciones de un proceso


y un archivo.

 Devuelve la dirección de memoria donde se ha proyectado el archivo


 direc: dirección donde proyectar. Generalmente se utiliza NULL,
con lo que el S.O. elige la dirección por su cuenta
 lon: especifica el número de bytes a proyectar
 prot: el tipo de acceso, lectura (PROT_READ), escritura
(PROT_WRITE) o ejecución (PROT_EXEC), o cualquier combinación
de ellas
 indic: propiedades sobre la región, compartida (MAP_SHARED, un
proceso hijo compartirá la región con el padre), privada
(MAP_PRIVATE, el hijo obtiene copia propia de la región), fija
(MAP_FIXED, el archivo ha de proyectarse en una direc´ción
específica)
 desc: representa el descriptor de archivo a proyectar.
 Desp: desplazamiento dentro del archivo a partir del cual se realiza
la proyección.
Servicios de gestión de memoria

void munmap(void *direc, size_t lon);


Desproyecta parte del espacio de direcciones de un
proceso desde la dirección direc hasta direc+lon.

También podría gustarte