Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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.
■ 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
■ 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.