Está en la página 1de 93

3.

ADMINISTRACIÓN
DE MEMORIA
Administracion de memoria
■ Es traer los procesos a la memoria principal para que el procesador los pueda
ejecutar.
– El programa debe llevarse desde el disco a la memoria (principal).
■ Consiste en la asignación de memoria física de capacidad limitada a los diversos
procesos que la soliciten, así como liberar a los procesos inactivos.
■ La memoria principal y los registros son solo el almacenamiento al que la CPU
puede acceder directamente.
Jerarquía de memoria
Actividades del administrador de
memoria
■ Controlar que partes de la memoria están actualmente en uso y por parte de
quien, asimismo que partes están libres.
■ Administrar que datos y procesos (o parte de procesos) añadir o extraer de
la memoria.
■ Asignar memoria a procesos y liberarla cuando terminan.
Requisitos de la administración de
memoria
■ Reubicación:
– Una vez que un programa se ha llevado al disco, sería bastante limitante tener
que colocarlo en la misma región de memoria principal donde se hallaba
anteriormente, cuando éste se trae de nuevo a la memoria. Por el contrario,
podría ser necesario reubicar el proceso a un área de memoria diferente.
■ Protección:
– Los proceso debe protegerse contra interferencias no deseadas por parte de
otros procesos, sean accidentales o intencionadas.
■ Compartición:
– Cualquier mecanismo de protección debe tener la flexibilidad de permitir a
varios procesos acceder a la misma porción de memoria principal.
Requisitos de la administración de
memoria
■ Organización Lógica:
– La mayoría de los programas se organizan en módulos, algunos de los cuales
no se pueden modificar (sólo lectura, sólo ejecución) y algunos de los cuales
contienen datos que se pueden modificar.
■ Organización Física:
– La memoria principal de un computador se organiza como un espacio de
almacenamiento lineal, compuesto por una secuencia de bytes o palabras.
– La organización del flujo de información entre la memoria principal y secundaria
supone una de las preocupaciones principales del sistema.
■ La tarea de mover la información entre los dos niveles de la memoria es la esencia
de la administracion de la memoria.
Tipos de Sistemas Operativos
■ SO Monoprogramado:
– En los sistemas de ejecución en lotes, así como en las primeras computadoras
personales, sólo un programa se ejecutaba a la vez. Por lo que, más allá de la
carga del programa y la satisfacción de alguna eventual llamada al sistema
solicitando recursos, el sistema operativo no tenía que ocuparse de la
asignación de memoria.
■ SO Multiprogramado:
– En un sistema multiprogramado, la memoria principal disponible se comparte
generalmente entre varios procesos.
– Intercambia procesos en la memoria principal para maximizar la utilización del
procesador, proporcionando un gran número de procesos para la ejecución.
Registros base y limite
■ El espacio de memoria separado por proceso
protege los procesos entre sí y es fundamental para
tener varios procesos cargados en la memoria para
la ejecución simultánea.
■ Para ello necesitamos la capacidad de determinar el
rango de direcciones legales a las que el proceso
puede acceder y asegurarnos de que el proceso
solo pueda acceder a estas direcciones legales.
– Registro base: Es el valor más pequeño de la
dirección física.
– Registro limite: Indica el final de la ubicación
del programa.
■ Estos valores se establecen cuando el programa se
carga en la memoria o cuando la imagen del
proceso se lleva a la memoria.
Protección hardware de direcciones con registros base
y límite
La CPU debe verificar cada acceso a la memoria generado en el modo de usuario para
asegurarse de que esté entre la base y el límite para ese usuario
Direcciones lógicas y físicas
■ El concepto de un espacio de direcciones lógico que está vinculado a un espacio de
direcciones físicas separado es fundamental para la gestión adecuada de la
memoria.
■ Una dirección lógica es generada por el CPU estas direcciones son las conocidas
por el programa (proceso) también conocida como dirección virtual o relativa
■ Una dirección física, o dirección absoluta, es una ubicación real en la memoria
principal del programa, dirección conocida por la unidad de memoria.
■ Por tanto, se necesita un mecanismo hardware para traducir las direcciones
virtuales a direcciones físicas de la memoria principal, en tiempo de ejecución de la
instrucción que contiene dicha referencia.
Memory-Management Unit (MMU)
■ Dispositivo de hardware que mapea direcciones lógicas a direcciones físicas.
■ Encargado de funciones de control de permisos, seguridad, y traducción de
direcciones.
■ Los programas de usuario trabajan con direcciones lógicas, nunca ven la
direcciones físicas reales.
– Produce enlaces en tiempo de ejecución ocurre cuando se hace referencia a la
ubicación en la memoria.
– Direcciones lógicas vinculada a direcciones físicas.
Direcciones lógicas y físicas
• El registro base es
ahora llamado Registro
de reubicación.

• El valor contenido en el
registro de reubicación
suma todas las
direcciones generadas
por un proceso en el
momento de enviarlas a
memoria.
Mapeo de memoria y protección
■ El registro de reubicación contiene el valor de la dirección física más pequeña,
mientras que el registro límite contiene el rango de las direcciones lógicas
– Cada dirección lógica debe ser inferior al valor contenido en el registro límite.
■ La MMU convertirá la dirección lógica dinámicamente sumándole el valor contenido
en el registro de reubicación.
■ Este mecanismo nos permite proteger tanto al sistema operativo como a los
programas y datos de los otros usuarios de las posibles modificaciones que pudiera
realizar este proceso en ejecución.
Soporte hardware para los registros de
reubicación y de límite
Carga dinámica
■ “Todo el programa y todos los datos de un proceso deben encontrase en memoria
física para que ese proceso pueda ejecutarse”.
■ Para obtener una mejor utilización del espacio de memoria, podemos utilizar un
mecanismo de carga dinámica.
– Una rutina no se carga hasta que se la invoca.
– Todas las rutinas se mantienen en disco en un formato de carga reubicable.
– Mejor utilización del espacio de memoria; la rutina no utilizada nunca se carga.
– Útil cuando se necesitan grandes cantidades de código para gestionar casos
que sólo ocurren de manera poco frecuente.
– Se Implementa la carga dinámica a través del diseño del programa.
■ Sin embargo, los SO proporcionan rutinas de biblioteca que implementen el
mecanismo de carga dinámica.
Asignación de memoria
■ La memoria principal debe albergar tanto el sistema operativo como los diversos
procesos del usuario.
– Por tanto, necesitamos asignar las distintas partes de la memoria principal de
la forma más eficiente posible.
■ La memoria generalmente se divide en dos particiones:
– Una para el sistema operativo.
– Otra para los procesos del usuario.
■ El sistema operativo se encuentra en las direcciones de memoria baja o en
direcciones de memoria alta.
Asignación de memoria
■ Asignación contigua: Cada programa ocupa un bloque contiguo y sencillo de
localizaciones de almacenamiento.
■ Asignación no contigua: Un programa se divide en varias partes que pueden
almacenarse en direcciones que no tienen que ser necesariamente adyacentes, por
lo que es más compleja pero más eficiente que la asignación continua.
Asignación contigua
■ La memoria está dividida en bloques conocidos como particiones.
■ Cuando un proceso necesita ejecutarse, se le asigna un espacio o agujero.
■ Cada partición puede contener un único proceso.
■ Tipos de particionamiento:
– Particionamiento Fijo:
■ de igual tamaño.
■ de tamaño diferente.
– Particionamiento Dinámico.
Particionamiento Fijo
■ El esquema más simple para gestionar la memoria disponible; es repartirla en
regiones con límites fijos.
– Son relativamente sencillos y requieren un soporte mínimo por parte del
sistema operativo y una sobrecarga de procesamiento mínimo.
■ Cada programa ocupa un único bloque contiguo de localidades
■ El sistema operativo mantiene un tabla de particiones en la que cada fila
corresponde a una partición.
Partición fija de igual tamaño
■ En este caso, cualquier proceso cuyo tamaño es menor o igual que el
tamaño de partición puede cargarse en cualquier partición disponible.
■ En cuanto haya una partición disponible, un proceso se carga en dicha
partición.
■ Si todas las particiones se encuentran ocupadas por procesos que no
están listos para ejecutar, entonces uno de dichos procesos debe
llevarse a disco para dejar espacio para un nuevo proceso.
■ Cualquier programa, sin importar lo pequeño que sea, ocupa una
partición entera. El espacio interno malgastado debido al hecho de
que el bloque de datos cargado es menor que la partición, se conoce
con el nombre de fragmentación interna.
Partición fija de tamaño diferente
■ El uso de particiones de distinto tamaño proporciona un grado de
flexibilidad frente a las particiones fijas.
■ Reduciendo significativamente la fragmentación interna.
■ Particiones de diferente tamaño, hay dos formas posibles de asignar
los procesos a las particiones.
– Una cola de procesos por participación.
– Un única cola por particiones.
Deficiencias del Particionamiento Fijo
■ El número de particiones se especifica en tiempo de generación del sistema limita el
número de proceso activos del sistema.
■ Los trabajos pequeños no utilizan el espacio de las particiones eficientemente.
■ En un entorno donde el requisito de almacenamiento principal de todos los trabajos
se conoce de antemano, esta técnica puede ser razonable, pero en la mayoría de
los casos, se trata de una técnica ineficiente.
■ El uso de particionamiento fijo no es empleado hoy en día en los sistemas
operativos actuales.
Particionamiento Dinámico
■ Las particiones son de longitud y número variable. Cuando se lleva un proceso a la
memoria principal, se le asigna exactamente tanta memoria como requiera y no
más.
■ Las ubicaciones referenciadas por un proceso no son fijas, cambiarán cada vez que
un proceso se intercambia o se desplaza durante su ciclo de vida.
■ Se conserva una tabla de partes de memoria ocupadas y libres.
Particionamiento Dinámico
■ El método comienza correctamente, pero finalmente lleva a una situación en
la cual existen muchos agujeros pequeños en la memoria.
– A medida que pasa el tiempo, la memoria se fragmenta cada vez más y
la utilización de la memoria se decrementa.
– Se conoce como fragmentación externa, indicando que la memoria
que es externa a todas las particiones se fragmenta de forma
incremental.
■ Para solucionar esto el SO desplaza los procesos en memoria, de forma que
se encuentren contiguos y de este modo toda la memoria libre se encontrará
unida en un bloque. Esto es conocido como compactación de memoria.
– Se trata de un procedimiento que consume tiempo y malgasta tiempo de
procesador.
Algoritmos de ubicación
■ A la hora de cargar o intercambiar un proceso a la memoria principal, y siempre que
haya más de un bloque de memoria libre de suficiente tamaño, el sistema operativo
debe decidir qué bloque libre asignar.
– Primer-ajuste: Se asigna el primer agujero que sea lo suficientemente grande.
– Mejor-ajuste: Se asigna el agujero más pequeño que tenga el tamaño
suficiente.
– Peor-ajuste: Se asigna el agujero de mayor tamaño.
Fragmentación
■ Fragmentación externa: Espacio de memoria total suficiente como para satisfacer
una solicitud, pero esos espacios disponibles no son contiguos; el espacio de
almacenamiento está fragmentado en un gran número de pequeños agujeros. Este
problema de fragmentación puede llegar a ser muy grave.
– La solución es la compactación de memoria.
■ Fragmentación interna: la memoria asignada puede ser un poco más grande que
la memoria solicitada; esta diferencia de tamaño es la memoria interna de una
partición, pero no es utilizable.
■ La fragmentación es un problema general en la informática que puede ocurrir donde
sea que debamos administrar bloques de datos.
Paginación
■ Técnica de administración de memoria más común para los sistemas informáticos
■ El espacio de físico direcciones de un proceso puede ser no contiguo; el proceso es asignado
en la memoria física donde haya disponibilidad.
– Evita la fragmentación externa.
– Evita fragmentos de memoria de diferentes tamaños .
– Todavía tiene el problema de fragmentación interna.
■ La memoria física se divide dentro de bloques de tamaño fijo llamados Marcos de pagina.
– El tamaño es una potencia de 2, entre 512 bytes y 16 Mbytes
■ La memoria lógica se divide en bloques de un mismo tamaño llamados Páginas.
■ Para ejecutar un programa de tamaño de N páginas, necesita encontrar N marcos libres y
cargar el programa.
■ Mantiene el seguimiento de todos los marcos libres.
■ Establece una tabla de páginas para traducir las direcciones lógicas a direcciones físicas.
Paginación
Esquema de traducción de direcciones
■ La dirección generada por el CPU (dirección lógica) se divide en:
– Número de página (p) – usado como un índice dentro de la tabla de páginas la
cual contiene la dirección base de cada página en la memoria física.
– Desplazamiento de página offset (d) – combinado con la dirección base
define la dirección física de memoria que es enviada la unidad de memoria
– El espacio lógico de direcciones es dado por 2m y el tamaño de página 2n
Esquema de traducción de direcciones
■ los pasos tomados por la MMU para traducir una dirección lógica generada por la
CPU a una dirección física:
– Extraer el número de página p y usarlo como índice en la tabla de páginas.
– Extraer el número de marco de pagina correspondiente f de la tabla de páginas.
– Reemplazar el número de página p en la dirección lógica con el número de marco f.
– El desplazamiento d no cambia,
no se reemplaza.
– El número de pagina y el
desplazamiento ahora
comprenden la dirección física
Modelo de paginación de la memoria
lógica y física.
Esquema de traducción de direcciones
▪ Dirección lógica: n = 2 y m = 4.
Utilizando un tamaño de página de 4
bytes y una memoria física de 32 bytes
(8 páginas)
Esquema de traducción de direcciones
Fragmentación interna en Paginación
■ Se presenta un cierto grado de fragmentación interna, ya que los marcos se
asignan como unidades y, si los requisitos de memoria de un proceso no
coindicen exactamente con las fronteras de pagina, el ultimo marco asignado
pude no estar completamente lleno.
– Tamaño de página = 2,048 bytes
– Tamaño del proceso = 72,766 bytes
– 35 páginas + 1,086 bytes
– Fragmentación interna de 2,048 - 1,086 = 962 bytes
– Fragmentación en el peor de los caso = 1 marco + 1 byte
– En promedio fragmentación interna = 1/2 del tamaño de marco de pagina
por proceso.
■ Hoy en día, las páginas suelen tener un tamaño de 4 KB u 8 KB, y algunos
sistemas admiten tamaños de página aún mayores.
Marcos libres
■ El SO debe ser consciente de
los detalles relativos a la
asignación de memoria física:
– Marcos asignados.
– Marcos disponibles.
■ Esto se mantiene en tabla de
marcos.
– Entrada por cada marco
físico: libre o asignado.
– En caso de estar asignado
a que pagina de proceso o
procesos ha sido
asignado.

Antes de la asignación Después de la asignación


Implementación de la tabla de páginas
■ La tabla de páginas se mantiene en la memoria principal:
– El registro base de la tabla de páginas (PTBR) apunta a la tabla de páginas.
– El registro de longitud de la tabla de páginas (PTLR) indica el tamaño de la
tabla de páginas.
■ En este esquema, cada acceso a datos/instrucciones requiere dos accesos de
memoria.
– Uno para la tabla de páginas y otro para los dato /instrucciones.
■ El problema de acceso de dos memorias se puede resolver mediante el uso de un
caché especial de hardware de búsqueda rápida, denominado búfer de consulta de
traducción (TLB, translation look-aside buffer)
Hardware de paginación con TLB
Protección en paginación
■ La protección de memoria implementada asociando bit de protección con cada
marco para indicar si se permite el acceso de solo lectura o lectura-escritura.
– También se puede agregar más bits para indicar que la página solo se ejecuta,
etc.
■ Protección de Bit Válido-inválido se anexa a cada entrada de la tabla de páginas:
– Válido: indica que la página asociada esta en el espacio lógico de direcciones
del proceso y por lo tanto es una página valida.
– Inválido: indica que la página no esta en el espacio lógico de direcciones del
proceso
– O utilice el registro de longitud de tabla de páginas (PTLR)
■ Cualquier violación resulta en una interrupción.
Bit Válido (v) o Inválido (i) en la Tabla de
pagina
Páginas compartidas
■ Compartir código :
– Una copia de código de solo lectura (reentrante) compartida entre procesos (es
decir, editores de texto, compiladores, sistemas de ventanas).
– Similar a múltiples hilos que comparten el mismo espacio de proceso.
– También es útil para la comunicación entre procesos si se permite compartir
páginas de lectura y escritura
■ Código privado y datos:
– Cada proceso mantiene una copia separada del código y los datos.
– Las páginas para el código privado y los datos pueden aparecer en cualquier
lugar del espacio de direcciones lógicas.
Ejemplo de Páginas compartidas

■ Código compartido
en un entorno
paginado
Estructura de la tabla de páginas
■ Las estructuras de memoria para paginación pueden volverse enormes usando
métodos sencillos
– Considere un espacio de direcciones lógicas de 32 bits como en las
computadoras modernas
– Tamaño de página de 4 KB (212)
– La tabla de páginas tendría 1 millón de entradas (232 / 212)
– Si cada entrada esté compuesta por 4 bytes, cada proceso puede necesitar
hasta 4 MB de espacio físico de direcciones sólo para la tabla de páginas.
■ Obviamente, no conviene asignar la tabla de páginas de forma contigua en
memoria principal.
– Una solución simple es dividir la tabla de páginas en unidades más pequeñas.
■ Paginación jerárquica
■ Tablas de páginas hash
■ Tablas de páginas invertidas
Paginación jerárquica

■ Consiste en una técnica simple de


paginación de dos niveles en el que la
propia tabla de paginas esta también
paginada.
■ La versión mas simple es paginación de
dos niveles.
Estructura de la tabla de páginas
■ Una dirección lógica (en una máquina de 32 bits con un tamaño de página de 1K)
se divide en:
– un número de página que consta de 22 bits
– un desplazamiento de página que consta de 10 bits
■ Como la tabla de páginas está paginada, el número de página se divide además en:
– un número de página de 10 bits
– un desplazamiento de página de 12 bits
■ Por tanto, una dirección lógica es la siguiente:

– p1 es un índice en la tabla de la página exterior y p2 es el desplazamiento


dentro de la página de la tabla de la página interior
Traducción de dirección dos niveles
Paginación jerárquica 64-bits
■ Para un sistema con un espacio de direcciones lógicas de 64 bits, un esquema de
paginación de dos niveles ya no es apropiado.
■ Podría requerir paginación de 7 niveles.
■ Para 64 bits arquitecturas, las tablas de páginas jerárquicas generalmente se
consideran inapropiadas.
Tablas de páginas hash
■ Común para gestionar los espacios de direcciones superiores a 32 bits.
■ El valor hash es el número de página virtual.
– Cada entrada de la tabla hash contiene una lista enlazada de elementos que
tienen como valor hash una misma ubicación (con el fin de tratar las
colisiones). Cada elemento está compuesto de tres campos:
1. El número de página virtual
2. El valor del marco de página mapeado
3. El un punto del siguiente elemento de la lista enlazada
■ Los números de página virtual se comparan en esta cadena buscando una
coincidencia.
– Si se encuentra una coincidencia, se extrae el marco físico correspondiente.
Tablas de páginas hash
Tablas de páginas en clúster
■ Tablas de páginas en clúster es variante para los espacios de direcciones de 64
bits.
– Esta variante utiliza tablas de páginas en clúster, que son similares a las tablas
de páginas hash, salvo porque cada entrada de la tabla hash apunta a varias
páginas en lugar de a una sola página.
■ Una única entrada de la tabla de páginas puede almacenar las correspondencias
(mapeos) para múltiples marcos de página física.
■ Especialmente útil para espacios de direcciones dispersos en los que las
referencias a memoria son no continuas y están dispersas por todo el espacio de
direcciones.
Tablas de páginas invertidas
■ En lugar de que cada proceso tenga una tabla de páginas y realice un seguimiento de todas
las páginas lógicas posibles, realice un seguimiento de todas las página reales (o marco).
■ Disminuye la memoria necesaria para almacenar cada tabla de páginas, pero incrementa el
tiempo necesario para buscar en la tabla cuando se produce una referencia de página.
– Puede que sea necesario explotar toda la tabla hasta encontrar una correspondencia
■ Para aliviar este problema, se utiliza una tabla hash, con el fin de limitar la búsqueda a una
sola entrada de la tabla de paginas o a unas pocas entradas.
– Para mejorar la velocidad primero se explora el búfer TLB.
Tablas de páginas invertidas
Intercambio (swaping)
■ Un proceso se puede intercambiar temporalmente de la memoria a un almacén de
respaldo y luego volver lo a memoria para continuar su ejecución.
– El espacio total de memoria física de los procesos puede exceder la memoria
física.
■ Almacenamiento de respaldo: disco rápido lo suficientemente grande como para
poder albergar copias de todas las imágenes de memoria para todos los usuarios, y
debe proporcionar un acceso directo a estas imágenes de memoria.
■ Existe una variante de intercambio utilizada para algoritmos de planificación
basados en prioridades; el proceso de menor prioridad se intercambia para que el
proceso de mayor prioridad se pueda cargar y ejecutar.
Intercambio (swaping)
Intercambio en paginación
Memoria virtual
■ El código debe estar en la memoria para ejecutarse, pero el programa completo rara
vez se usa
– Código de error, rutinas inusuales, grandes estructuras de datos.
■ No se necesita el código completo del programa al mismo tiempo.
■ Considerar la capacidad de ejecutar programas parcialmente cargados.
– El programa ya no está limitado por los límites de la memoria física.
– Cada programa ocupa menos memoria mientras se ejecuta.
■ Más programas se ejecutan al mismo tiempo generando una mayor
utilización de la CPU.
– Se necesita menos E/S para cargar o intercambiar programas en la memoria
■ Cada programa de usuario se ejecuta más rápido.
Memoria virtual
■ La técnica de memoria virtual es un mecanismo que permite la ejecución de
procesos que no se encuentren completamente en la memoria.
– Solo una parte del programa debe estar en la memoria para su ejecución.
– Por tanto, el espacio de direcciones lógicas puede ser mucho mayor que el
espacio de direcciones físicas.
– Permite que varios procesos compartan espacios de direcciones.
– Permite una creación de procesos más eficiente.
– Más programas ejecutándose al mismo tiempo.
– Se necesitan menos E/S para cargar o intercambiar procesos.
Memoria virtual
■ El espacio de direcciones virtuales de un proceso hace referencia a la forma lógica
(o virtual) de almacenar un proceso en la memoria.
– Mientras tanto, la memoria física organizada en marcos de página
– MMU establece la correspondencia entre paginas lógicas y marcos de pagina
física de la memoria.
■ La memoria virtual puede ser implementada vía:
– Paginación por demanda
– Segmentación por demanda
Diagrama que muestra una memoria virtual
de tamaño mayor que la memoria física
Paginación bajo demanda
■ Solo se cargan las paginas cuando así se solicita durante la ejecución del programa
de este modo, las paginas a las que nunca se acceda no llegaran a cargarse en la
memoria física.
■ Cargar en memoria una página solamente cuando se necesita
– Se requiere de menos E/S
– Se requiere de menos memoria
– Respuesta rápida
– Mayor número de usuarios
■ Similar a paginación con intercambio
Paginación bajo demanda
■ Se necesita una página; hace referencia a ella
– Referencia inválida; abortar
– No en la memoria; se trae a memoria
■ Intercambiador perezoso: Jamás intercambia una página en la memoria a menos
que sea necesaria.
– El encargado de realizar los intercambios es el Paginador que se ocupa de las
páginas individuales de un proceso.
Bit Válido-inválido
■ Necesitamos soporte hardware de MMU.
■ Con cada entrada de la tabla de páginas se asocia un bit válido-inválido (v = en
memoria - residente en memoria, i = no en memoria)
■ Bit válido; Página en la memoria.
■ Bit no válido:
– (La página no está en el espacio de direcciones lógico.)
– Es válida pero no está en la memoria.
■ Inicialmente el bit válido-invalido se establece en i en todas las entradas.
■ Durante la traducción de la dirección (MMU), si el bit válido-inválido en la entrada de
la tabla de páginas es invalido se producirá un fallo de pagina.
Tabla de páginas cuando algunas páginas no
se encuentran en memoria principal.
Fallo de página
■ Esta interrupción se produce como resultado de que el sistema operativo no ha
cargado anteriormente en memoria la página deseada.
1. Comprobamos la tabla interna correspondiente, para determinar si la referencia era un
acceso de memoria válido o inválido.
2. Si la referencia era:
■ Inválida; terminamos el proceso.
■ No cargada en memoria; traer a memoria.
3. Buscamos un marco libre.
4. Ordenamos una operación de disco para leer la página deseada en el marco recién
asignado.
5. Modificamos la tablas para indicar que la página se encuentra en memoria(bit v).
6. Reiniciamos la instrucción que fue interrumpida. El proceso podrá ahora acceder a la
página como si siempre hubiera estado en memoria.
Pasos para tratar un fallo de página
Aspectos de la paginación bajo
demanda
■ En el caso extremo, podríamos empezar a ejecutar un proceso sin ninguna página
en memoria; ocurriría siempre fallos de pagina.
– Este esquema sería una paginación bajo demanda pura; nunca cargar una
página en memoria hasta que sea requerida.
■ Teóricamente, una instrucción dada podría acceder a múltiples páginas; generando
fallos múltiples páginas.
– Este comportamiento es bastante improbable.
– Esto disminuye gracias a tener localidad de referencia.
■ El hardware necesario para soportar la paginación bajo demanda .
– Tabla de páginas con bit válido / inválido.
– Memoria secundaria (espacio de intercambio).
– Reinicio de instrucciones, después de fallo de pagina.
Lista de marcos libres
■ Cuando ocurre una falla de página, el sistema operativo debe traer la página
solicitada del almacenamiento secundario a la memoria principal.
■ La mayoría de los sistemas operativos mantienen una lista de marcos libres, para
satisfacer tales solicitudes.
■ El sistema operativo generalmente asigna marcos libres utilizando una técnica
conocida como “zero-fill-on-deman”: los marcos se "ponen a cero" antes de ser
asignados, borrando así su contenidos previos.
■ Cuando se inicia un sistema, toda la memoria disponible se coloca en la lista de
marcos libres.
Rendimiento de la paginación bajo de
manda
■ La paginación bajo demanda puede afectar significativamente al rendimiento de un
sistema informático.
■ Radio de Fallo de (0 < p < 1)
– Sea p la probabilidad de que se produzca un fallo de. Cabe esperar que p esté
próxima a cero; es decir, que sólo vayan a producirse unos cuantos fallos de
página.
■ Resulta crucial mantener una tasa de fallos de página baja en los sistemas de
paginación bajo demanda. Si no se hace así, el tiempo efectivo de acceso se
incrementa, ralentizando enormemente la ejecución de los procesos.
■ Tres componentes principales del tiempo de servicio de fallo de página:
1. Servir la interrupción de fallo de página.
2. Leer la página.
3. Reiniciar el proceso.
Optimización de paginación bajo
demanda
■ Las operaciones de E/S de disco dirigidas al espacio de intercambio son general
mente más rápidas que las correspondientes al sistema de archivos.
■ Copiando la imagen completa de un proceso en el espacio de intercambio en el
momento de iniciar el proceso.
– Entonces la página entra y sale del espacio de intercambio.
– Utilizado antiguamente; es necesario copiar toda la imagen del programa.
■ Demandar las páginas inicialmente desde el sistema de archivos, pero irlas
escribiendo en el espacio de intercambio a medida que se las sustituye.
– Sólo se lean desde el sistema de archivos las páginas necesarias y que todas
las operaciones subsiguientes de paginación se lleven a cabo desde el espacio
de intercambio.
– Utilizado por Linux y Windows
Optimización de paginación bajo
demanda
■ Sistemas móviles
– Por lo general, no admite el intercambio
– En su lugar, solicita la página del sistema de archivos y reclama las páginas de
solo lectura (como el código) .
– Utilizan memoria comprimida, una alternativa de uso común al intercambio.
Copia durante la escritura
■ La creación de un proceso mediante la llamada al sistema fork () puede inicialmente
evitar que se tenga que cargar ninguna página, utilizando esta técnica similar a la
de compartición de páginas.
■ Permite que los procesos padre e hijo compartan inicialmente las mismas páginas.
■ Estas páginas compartidas se marcan como páginas de copia durante la escritura:
– Si cual quiera de los procesos escribe en una de las páginas compartidas, se creará una
copia de esa página compartida.
– El proceso modificará entonces su página copiada y no la página compartida.
– Las páginas que no modificadas y las que no se puedan modificarse (páginas que
contengan el código ejecutable) pueden compartirse entre el padre y el hijo.
■ Utilizada en Windows, Linux y macOS.
Ejemplo copia durante escritura

Después de que el proceso 1 modifique la página C.


Antes de que el proceso 1 modifique la página C.
Sustitución de páginas
■ Si no hay ningún marco libre, localizamos uno que no esté siendo actualmente
utilizado, lo liberamos y almacenamos la pagina que provoco el fallo.
– Podemos liberar un marco escribiendo su contenido en el espacio de
intercambio y modificando la tabla de páginas para indicar que esa página ya
no se encuentra en memoria.
■ Utilizando un Bit de Modificación (o bit sucio) para reducir la sobrecarga de las
transferencias de página, se modifica cada vez que se escribe en la pagina:
– Bit activado = escribir pagina en disco
– Bit inactivo = no necesario escribir en disco; (copia se encuentra en disco.)
■ Igualmente aplica a las páginas de sólo lectura.
■ La sustitución de páginas, completa la separación entre la memoria lógica y la
memoria física: se puede proporcionar una gran memoria virtual en una memoria
física más pequeña.
Sustitución de página básico
1. Encontrar la ubicación de la página deseada dentro del disco.
2. Localizar un marco libre:
– Si hay un marco libre; utilizarlo.
– Si no hay ningún marco libre; utilizar un algoritmo de sustitución de páginas
para seleccionar un marco víctima.
– Escribir el marco víctima en el disco (si este fue modificado); cambiar las tablas
de páginas y de marcos correspondientemente.
3. Traer la página deseada al nuevo marco libre actualizar las tablas (páginas y
marcos libres)
4. Reinicializar el proceso de usuario
Sustitución de página
Algoritmos de sustitución de página
■ Buscar el algoritmo con la frecuencia de fallos de página más baja posible.
– Sustitución de páginas (FIFO)
– Sustitución óptima de páginas.
– Sustitución de páginas (LRU).
– Sustitución de páginas mediante aproximación (LRU)
– Sustitución de páginas basada en contador
– Algoritmos de búfer de páginas
Asignación de marcos de pagina
■ Se debe de repartir la cantidad de memoria libre entre los distintos procesos.
■ ¿Cómo asignar los marcos a los procesos?
– Número mínimo de marcos.
– Algoritmos de asignación.
– Asignación global o local.
■ Número mínimo de marcos
– Número de marcos asignados reducidos; + tasa de fallos de páginas.
■ Es necesario tener suficientes marcos para contener todas las páginas a
las que una sola instrucción puede hacer referencia.
■ Mientras que el número mínimo de marcos por proceso está definido por la
arquitectura, el número máximo está definido por la cantidad de memoria física
disponible.
Asignación Fija
■ Asignación equitativa: Repartir m marcos entre n procesos consiste en dar a cada
uno un número igual de marcos, m/n.
– Por ejemplo, si hay 100 marcos (después de asignar marcos para el sistema
operativo) y 5 procesos, se asigna a cada proceso 20 cuadros.
■ Asignación proporcional: Asignar la memoria disponible a cada proceso de
acuerdo con el tamaño de éste.
– Por ejemplo, repartiríamos 62 marcos entre de procesos, uno de 10 páginas y
otro de 127 páginas, asignando 4 marcos y 57 marcos.
Asignación Fija
■ Las asignación concretas pueden variar de acuerdo con el nivel de
multiprogramación.
– Si se incrementa el nivel de multiprogramación, cada proceso perderá algunos
marcos con el fin de proporcionar la memoria necesaria para el nuevo proceso.
– Si se reduce el nivel de multiprogramación, marcos que hubieran sido
asignados al proceso terminado pueden distribuirse entre los procesos
restantes.
■ Los mecanismos de asignación equitativo y proporcional, trata igual a los
procesos de alta y baja prioridad.
Asignación Prioritaria
■ El esquema de asignación proporcional usando prioridades en lugar de tamaño.
■ Concedemos más memoria a un proceso de más alta prioridad con el fin de acelerar
su ejecución.
■ Utilizar un esquema de asignación proporcional en el que el cociente de marcos
dependa del tamaño relativo del proceso y de su prioridad.
Asignación global y local
■ Otro factor importante en la forma de asignar los marcos, si hay múltiples procesos
compitiendo por marcos.
■ Sustitución global: un proceso selecciona un marco de sustitución de entre el conjunto
de todos los marcos, incluso si dicho marco está asignado actualmente a algún otro
proceso.
– El tiempo de ejecución del procesos puede variar mucho.
– Puede incrementar o decrementar los marcos asignados.
– Un mayor rendimiento es más común.
■ Sustitución local: cada proceso sólo selecciona entre su propio conjunto de marcos
asignado.
– Rendimiento más consistente por proceso
– Cantidad de marcos por proceso constantes.
– Posiblemente memoria subutilizada
■ La sustitución global permite a un proceso prioritario; aumentar su asignación de
marcos a expensas de procesos de baja prioridad.
Recuperación de páginas
■ Una estrategia para implementar una política
global de sustitución de páginas.
■ Todas las solicitudes de memoria se satisfacen
desde la lista de marcos libres, en lugar de
esperar a que la lista decaiga a cero antes de
comenzar a seleccionar las páginas para su
sustitución.
■ La sustitución de página se activa cuando la lista
cae por debajo de cierto umbral.
■ Esta estrategia intenta garantizar que siempre
haya suficiente memoria libre para satisfacer las
nuevas solicitudes.
Sobrepaginación
■ Si un proceso no tiene el número de marcos que necesita para soportar las páginas
que se están usando activamente; generando fallos de página.
– Sustituir alguna página; como todas sus páginas se están usando activamente,
se verá forzado a sustituir una página que va a volver a ser necesaria
enseguida.
– Generando sucesivos fallos de página una y otra vez, sustituyendo páginas
que se ve forzado a recargar inmediatamente.
■ Esta alta tasa de actividad de paginación se denomina sobrepaginación.
– Un proceso entrará en sobrepaginación si invierte más tiempo implementando
los mecanismos de paginación que en la propia ejecución del proceso.
– La sobrepaginación provoca graves problemas de rendimiento.
Sobrepaginación
■ Disminuye el aprovechamiento de la CPU
■ El planificador de CPU aumenta el grado
de multiprogramación.
■ Se utiliza un algoritmo de sustitución
global de páginas, que sustituye las
páginas sin tomar en consideración a qué
proceso pertenecen.
■ Esto agravando aún más el problema,
generando un circulo vicioso.
Sobrepaginación
■ ¿Cómo evitarla?
– Proporcionar a los procesos tantos marcos como necesiten.
– Podemos limitar los efectos utilizando un algoritmo de sustitución local o un
algoritmo de sustitución basado en prioridades.
– Concediendo memoria según las necesidades reales.
■ ¿Por qué funciona la paginación de demanda?
– La estrategia basada en conjunto de trabajo comienza examinando cuántos
marcos está utilizando realmente un proceso; esta técnica define el modelo de
localidad de ejecución del proceso.
■ Si asignamos menos marcos que el tamaño de la localidad actual, el proceso
entrará en sobrepaginación, ya que no podrá mantener en memoria todas las
páginas que esté utilizando activamente.
Modelo del conjunto de trabajo
■ El modelo del conjunto de trabajo está basado en la suposición de la localidad de
ejecución de los programas.
– Se observa que todo proceso trabaja en cada momento con unas zonas de
código y datos bien delimitadas: localidad.
■ Cuando se salta a otra subrutina, etc., se cambia la localidad.
– Se generará fallos de página para todas las páginas de su localidad, hasta que
todas ellas estén en memoria; no se volverá a generar fallos de página hasta
que cambie de localidad.
Frecuencia de fallos de página
■ Enfoque más directo que Modelo del conjunto de trabajo
■ Frecuencia de fallos de página elevada; controlar la frecuencia de fallos de página.
■ Límites superiores e inferiores “aceptables” para la frecuencia de fallos de página
deseada.
– Frecuencias altas;
■ El proceso necesita más marcos.
– Frecuencias bajas;
■ Al proceso le sobran marcos.
■ Los marcos de página se repartirán
entre los procesos que tengan fallos
de página muy frecuentes.
Conjunto de trabajo y tasas de fallo de
página
■ Relación directa entre el conjunto de trabajo de un proceso y su tasa de fallo de
página
– El Conjunto de trabajo cambia con el tiempo.
– Picos y valles a lo largo del tiempo.
Prepaginación
■ Cuando se reinicia un proceso que se había intercambiado a disco todas sus
páginas están en el disco; habrá un fallo de página para traer a la memoria cada
una de ellas.
■ La prepaginación trata de evitar este alto nivel de paginación.
■ Se trae de una sola vez a la memoria todas las páginas que se necesitan.
■ Si la predicción es buena el tiempo de ejecución de los procesos se reduce
notablemente.
■ Emplea el Modelo del conjunto de trabajo.
Compresión de memoria
■ Una alternativa a la paginación es la compresión de memoria.
– En lugar de paginar cuadros modificados para intercambiar espacio,
comprimimos varios cuadros en un solo cuadro, permitiendo que el sistema
reduzca el uso de memoria sin recurrir al intercambio de páginas.

■ Suponga que este número de marcos libres cae por debajo de un cierto umbral que
activa el reemplazo de la página.
Compresión de memoria
■ Comprimir varios marcos y almacenar sus versiones comprimidas en un solo marco
de página.
– El marco 7 se elimina de la lista de marcos libres.
– Los marcos 15, 3 y 35 se comprimen y almacenan en el marco 7, que luego se
almacena en la lista de marcos comprimidos.
– Los marcos 15, 3 y 35 ahora se pueden mover a la lista de cuadros libres.
■ Si luego se hace referencia a uno de los tres cuadros comprimidos, se produce un
fallo de página y el cuadro comprimido se descomprime, restaurando las tres
páginas 15, 3 y 35 en la memoria.
Compresión de memoria
■ La compresión de memoria es una parte integral de la estrategia de administración
de memoria para la mayoría de los sistemas operativos móviles, incluidos Android e
iOS (No soporta paginación).
■ Windows 10 y macOS admiten compresión de memoria.
■ Las pruebas de rendimiento indican que la compresión de memoria es más rápida
que la paginación.
Practicas actuales
■ Hablando en términos prácticos, la sobrepaginación y el intercambio resultante
tienen un impacto negativo en el rendimiento.
■ La mejor práctica actual en la implementación de un sistema informático es incluir
suficiente memoria física, siempre que sea posible, para evitar la sobrepaginación
y el intercambio.
■ Desde teléfonos inteligentes a través de servidores grandes, proporcionar suficiente
memoria para mantener todos los conjuntos de trabajo en memoria al mismo
tiempo, excepto en condiciones extremas, proporciona la mejor experiencia de
usuario.
Referencias
■ Silberschatz, A., Galvin, P., & Gagne, G. (2018). Operating System Concepts
Tenth Edition. USA: John Wiley & Sons, Inc.
– Modificadas en base a Web Pages supporting
https://codex.cs.yale.edu/avi/os-book/OS10/slide-dir/index.html
■ Stalliengs, W. (2005). Sistemas operativos Aspectos internos y principios de
diseño Quinta Edición. Madrid: Pearson Educación, S.A.

También podría gustarte