Escolar Documentos
Profissional Documentos
Cultura Documentos
4. GESTIÓN DE LA MEMORIA
Si se pretende que los procesos estén preparados para su ejecución es necesario cargarlos en
la memoria principal, ya que ningún proceso se puede activar antes de que se le asigne el
espacio de memoria que requiere.
La utilización de los recursos del sistema, y en general, del rendimiento del sistema va a estar
condicionado por la eficacia en la gestión de la memoria. Uno de los factores más importantes
es la organización y gestión de la memoria principal.
El siguiente esquema se obtiene al dividir la memoria en dos secciones: una para el proceso
del usuario y otra para la parte del sistema operativo que debe de estar residente en memoria
(monitor).
En el MS-DOS para el PC de IBM, la memoria está dividida en tres zonas: la parte inferior, que
está destinada al SO; la parte central, dedicada al único programa de usuario y la parte
superior, en ROM, para los controladores de dispositivos (más conocido como BIOS).
Hay diferentes tipos de organizaciones posibles para la asignación de memoria a las tareas,
por ejemplo, clasificarlas todas según sus requerimientos de espacio. Así cada partición tendrá
una cola de tareas y cada tarea se incluye en la cola de partición de memoria que mejor se
adapta. La planificación de cada cola se hace por separado y, como cada cola tiene su propia
partición, no hay competencia entre las colas por la memoria.
Otro tipo de organización consiste en mantener todas las tareas en una sola cola. El
planificador selecciona la próxima tarea para ser ejecutada y espera hasta que se disponga de
una región de memoria del tamaño requerido.
4.2.2 Intercambio
La selección de los procesos en la memoria principal que hay que intercambiar se hace
entre aquellos que ocupan particiones suficientemente grandes para los procesos que se les
debe asignar espacio en memoria, considerando:
a) Prioridad. Son más aptos aquellos con baja prioridad.
b) Estado de espera. Procesos que esperan sucesos lentos tienen mayor probabilidad de ser
suspendidos durante un tiempo suficientemente grande.
c) Tiempo de permanencia en memoria. Y si se ha ejecutado mientras ha estado en
memoria.
La elección de los procesos que hay sin cargar en la memoria se basan en:
1) Tiempo que ha permanecido en memoria secundaria
2) Prioridad
3) Satisfacción del tiempo mínimo de residencia en disco desde la descarga
4.2.3Archivo de intercambio
Los algoritmos para la gestión del espacio disponible en el archivo de intercambio son los
mismos que los usados para la gestión de la memoria principal.
La selección de los tamaños de las particiones es un compromiso entre estos dos casos de
fragmentación.
El SO mantiene una tabla que indica qué partes de la memoria están disponibles y cuales
están ocupadas. Cuando llega una tarea que requiere memoria, se busca un bloque disponible
suficientemente grande. Si se encuentra, se asigna sólo la cantidad que se necesita.
Mientras se puedan mover todos los procesos hacia la parte superior es posible combinar
todos los bloques libres en uno solo. Esta técnica se conoce como compactación de la
memoria. Generalmente no se realiza porque consume mucho tiempo de CPU.
El registro de las particiones libres y ocupadas debe ser eficiente, tanto en tiempo para la
asignación, como en aprovechamiento de la memoria. Hay varias formas:
Listas enlazadas. De las particiones libres y asignadas. Cada proceso tiene dos vecinos: dos
procesos, un proceso y una partición libre y dos particiones libres. En este caso las estrategias
más comunes para la asignación de memoria son:
1) Primero en ajustarse: estrategia más simple y rápida. El bloque encontrado se
divide en dos partes, una se asigna al proceso y la otra se introduce en la lista
como libre. Se produce fragmentación externa.
2) Mejor en ajustarse: busca en toda la lista y asigna el bloque más pequeño que es
suficientemente grande. Produce restos más pequeños y es más lento. Produce
mayor desperdicio de memoria que los otros dos algoritmos.
3) Peor en ajustarse: Suprime el efecto de particiones muy pequeñas. Produce restos
más grandes, pero se ha demostrado que no tiene mejor rendimiento que los otros
dos algoritmos.
4) Sistema de los asociados: Aprovecha el hecho de trabajar con direcciones binarias
para hacer más rápida la fusión entre particiones libres adyacentes. El bloque de
Gestión de la memoria |5
4.4 Paginación
Uno de los principales inconvenientes de los anteriores sistemas de gestión es la
fragmentación externa. Este problema tiene dos soluciones generales:
1) Compactación de memoria. No se suele usar por su coste en tiempo.
2) Paginación. Permite que la memoria de un programa no sea contigua, de forma que
siempre que se disponga de espacio, aunque éste no sea adyacente, se pueda asignar
a un programa.
El objetivo de las tablas de páginas es asociar a las páginas un marco de página. Plantean dos
cuestiones importantes:
1) El tamaño de la tabla de páginas, que puede ser demasiado grande.
2) El tiempo de asignación, que debe ser rápido.
El acceso y búsqueda en estas tablas tiene que ser lo suficiente rápido para no ser un cuello de
botella en funcionamiento del computador.
La realización más sencilla es tener una sola tabla de páginas estructurada como un conjunto
de registros dedicados. La CPU cargará estos registros cada vez que cargue los otros registros
del programa. Es un método directo, sólo usa una referencia a memoria durante la asociación.
Su desventaja es el coste de la circuitería asociada cuando las tablas de páginas son grandes.
Cuando se presenta una dirección lógica, se verifica que el número de página lógica se
encuentra en la memoria asociativa. Si el acceso no viola los bits de protección, el marco de
Gestión de la memoria |6
Hay que tener en cuenta si el sistema es multiprogramado. Cada proceso tiene su propia tabla
de páginas y es necesario dar mecanismos para que al ejecutarse un nuevo proceso no utilice
los marcos de página de otro proceso. Dos soluciones:
a) Proporcionar una instrucción máquina que invalide la memoria asociativa
b) Realiza la memoria asociativa con un campo id_proceso
4.5 Segmentación
El usuario prefiere ver a la memoria como un conjunto de diferentes tamaños, sin una
ordenación específica entre ellos.
Las direcciones especifican el nombre del segmento y el desplazamiento dentro del segmento.
Este esquema es muy diferente al de la paginación.
Una tabla de segmentos que se mantiene en registros especiales puede ser referenciada muy
rápidamente; la suma a la base y la comparación con el tamaño se puede hacer
simultáneamente. Cuando el número de segmentos crece, la tabla de segmentos se deja en
memoria; un registro base de la tabla de segmentos apunta a la tabla de segmentos.
Modo de proceder:
1) Se comprueba que el número de segmento es correcto
2) Se suma el número de segmento al valor del registro base de la tabla de segmentos
para obtener la dirección de memoria para la entrada de la tabla de segmentos
3) Esta entrada se lee de memoria y se procede como antes (se comprueba que el
desplazamiento no rebasa la longitud del segmento y se calcula la dirección física).
Esto requiere dos referencias a memoria por dirección lógica, provocando una
disminución en la velocidad del computador.
Solución: disponer también de una memoria asociativa para retener las entradas de la tabla de
segmentos usadas más recientemente. La segmentación no produce fragmentación interna,
pero sí externa, cuando todos los bloques de memoria libres son muy pequeños para
acomodar un segmento.
Como todas las entradas al segmento se usan de la misma manera, los segmentos de código
se pueden definir de sólo lectura, mientras que un segmento de datos se puede definir de
lectura/escritura.
También facilita la compartición de código o datos entre varios procesos. Ejemplo: las librerías
compartidas.
Características:
a) El programador no necesita saber que se está utilizando la paginación; pero si se
dispone de segmentación sí necesita saberlo.
b) La paginación sigue un sistema lineal, la segmentación proporciona un espacio
bidimensional con muchos espacios de direcciones.
c) La paginación no distingue el código de los datos. La segmentación sí.
d) La segmentación facilita la compartición de código y datos, así como el uso de
estructuras de datos de tamaños fluctuantes.
e) El espacio total de direcciones de ambas puede exceder el tamaño de la memoria
física. Esto permite desarrollar el concepto de memoria virtual.
No se puede decir que una técnica sea mejor a la otra, por ello hay muchos sistemas que
combinan los dos métodos.
Una técnica muy extendida consiste en usar la segmentación desde el punto de vista usuario,
pero dividiendo cada segmento en páginas de tamaño fijo. Es adecuada en el caso de que los
Gestión de la memoria |8
segmentos sean muy grandes. Así se elimina la fragmentación externa y hace más fácil el
problema de la ubicación.
Cada segmento tiene su propia tabla de páginas. El tamaño de la tabla de páginas no tiene que
ser el máximo, sino un tamaño en función de la longitud del segmento. Se ha eliminado la
fragmentación externa, pero introduciendo fragmentación interna y aumentando el espacio de
tablas.
Un fallo de página se produce cuando en la tabla de páginas del proceso no hay asociado un
marco de página a la página a la que se quiere acceder.
Muchos procesos no usan todas sus páginas (páginas de dato o código que no se usan, de
tratamiento de errores…), por tanto no hay que traerlas todas, pudiéndose ejecutar más
procesos.
La memoria virtual mediante paginación supone mantener una tabla de páginas por cada uno
de los procesos activos. Estas tablas pueden ser mucho más grandes en un sistema virtual que
en uno de paginación real, ya que el espacio de direcciones virtuales de un proceso puede
exceder la capacidad de la memoria real.
Tiene que producir menos fallos de páginas que cualquier otro algoritmo. Además, no debe de
presentar la anomalía de Belady.
G e s t i ó n d e l a m e m o r i a | 10
El algoritmo óptimo se puede enunciar así: “Sustituir aquella página que tardará más en
volverse a utilizar”.
El problema de este algoritmo es que es irrealizable, ya que el SO no sabe a priori que páginas
se referenciarán en el futuro. Sirve como medida para los demás algoritmos.
Es una buena aproximación al algoritmo óptimo. Se considera que las páginas usadas más
frecuentemente en las últimas instrucciones son las que con más probabilidad se usarán
próximamente.
Este algoritmo asocia a cada página el tiempo de la última vez que se utilizó. Cuando una
página debe ser sustituida, se elige aquella que no ha sido utilizada durante un mayor periodo
de tiempo.
Los dos métodos necesitan de una circuitería especial de la que no siempre se dispone. Así,
muchos sistemas proporcionan un bit de referencia por cada una de las páginas. El SO pone a
0 estos bits y, cuando se referencia una página, el bit se pone a 1. Se sabe qué páginas se han
referenciado, pero no el orden en el que se ha hecho.
Se puede tener más información registrando regularmente estos bits (por ejemplo, una tabla
con registros de ocho bits por cada página). Periódicamente el SO desplazará a la derecha los
bits de estor registros y situará en el bit de orden superior el bit de referencia. En el caso
extremo se puede mantener sólo el bit de referencia, sin ningún bit de historia. Esto da lugar al
algoritmo de la segunda oportunidad.
A muchos de ellos se les puede considerar aproximaciones del LRU. Si además del bit de
referencia se considera un bit de modificación, que se activa cuando se escribe una palabra en
la página.
El SO asigna un valor 0 a los dos bits, de forma periódica, el bit de referencia se pone a 0 para
distinguir las páginas que no tienen referencias recientes de las que sí. Cuando hay un fallo de
página, el SO se encontrará cuatro categorías de páginas, según los bits:
Hay una clase de algoritmos que nunca presentan la anomalía de Belady, los algoritmos de
pila. Es un algoritmo para el que se puede demostrar que el conjunto de páginas en memoria
para n marcos es un subconjunto del conjunto de páginas que se tendrían con n+1 marcos.
El número mínimo de marcos por proceso viene fijado por la propia arquitectura del
computador, mientras que el número máximo es definido por la cantidad de memoria física
disponible. La elección del número de marcos para cada proceso se hará entre estos dos
límites.
Para prevenir la catástrofe se debe suministrar a los procesos tantas páginas como necesiten.
El conjunto de páginas utilizadas en un determinado momento por el proceso se denomina
conjunto de trabajo. Para evitar la catástrofe, el grado de multiprogramación no debe ser mayor
que el que permite que los conjuntos de trabajo de todos los procesos se puedan tener
simultáneamente en la memoria.
G e s t i ó n d e l a m e m o r i a | 12
En las políticas de sustitución y asignación se debe seguir la siguiente regla genérica: Ejecutar
un proceso solamente si el conjunto de trabajo está por completo en memoria principal, y no
eliminar una páginas que es parte del conjunto de trabajo de un proceso.
En general, las páginas se eligen de tamaños que son potencias de 2. Un tamaño pequeño
supone un menor desperdicio de la memoria.
Si las páginas son pequeñas las tablas de páginas tienen que ser grandes, y como cada
proceso tiene su propia copia de la tabla de páginas sería recomendable tablas pequeñas, lo
que supone páginas grandes.
Otro problema es el tiempo necesario para leer y escribir una página. Este tiempo está
compuesto por un periodo de latencia y por el propio tiempo de transferencia. El tiempo de
transferencia depende del tamaño de la página, es proporcional a la cantidad de información
transferida.
Hay otros factores, como la relación entre el tamaño de página y el tamaño de los sectores del
disco; pero no hay una respuesta satisfactoria global.
4.9.2 Prepaginación
Cuando un proceso se arranca inicialmento o despés de haber sido suspendido, tiene que traer
a memoria todas las páginas que necesita para su ejecución. Se pueden traer de una sola vez
a memoria todas las páginas que se precisan (técnica de prepaginación).
El modelo del conjunto de trabajo es útil para realizar la prepaginación, pero no es el más
adecuado para manejar el control de la catástrofe.
Se pueden establecer límites entre los cuales se desea mantener el porcentaje de fallos de
páginas. La política a seguir será mantener el número de fallos de páginas entre estos límites.