Administración de la Memoria
La parte del sistema
operativo que administra la memoria se llama administrador de la memoria. Para
ello existen diferentes esquemas de administración de memoria desde los mas
simples hasta los mas elaborados entre los cuales se ubican:
1.
Administración de la memoria sin
intercambio o paginación.
Los sistemas de
administración de memoria se pueden clasificar en dos tipos. Los
que desplazan los procesos de la memoria principal al disco y viceversa durante
la ejecución (intercambio y paginación) y aquellos que no.
1.1.
Monopogramación
sin intercambio o paginación.
Es en forma secuencial
pues solo se tiene un objeto en memoria en cada instante, el usuario carga toda
la memoria con un programa, esto implica que cada proceso debe contener controladores de dispositivo para cada uno
de los dispositivos E/S que utilice.
1.2.
Multiprogramación
y uso de la memoria.
La multiprogramación
facilita la programación de una aplicación al dividirla en dos o mas procesos.
La mayoría de los procesos tardan cierto tiempo en la espera de datos de
dispositivos E/S.
Un modelo para el uso y
aprovechamiento de la CPU es el modelo probabilístico dado por la fórmula :
Uso de la CPU = 1 - pn
1.3.
Multiprogramación
con particiones fijas
El objetivo en todo esto
es tener mas de un proceso en memoria a la vez, solución posible sería dividir
la memoria en n partes al inicio de una sesión de uso de la máquina, pero aún
así se obtiene el desperdicio de particiones grandes con una tarea pequeña, la
respuesta puede ser tener particiones pequeñas también.
Las tareas que van
llegando se forman hasta que una partición adecuada está disponible, en cuyo
momento la tarea se carga en esa partición y se ejecuta hasta terminar.
2.
Intercambio
En un sistema por lotes la organización
de la memoria en particiones fijas es adecuado pero en un ambiente multiusuario
la situación es distinta con el tiempo compartido, ya que existen mas usuarios
de los que puede albergar la memoria, por lo que es conveniente albergar el exceso de los procesos en disco., por
supuesto para ser ejecutados estos procesos deben ser trasladados a la
memoria principal. Al traslado de
procesos de disco a memoria y viceversa se
le llama intercambio.
2.1.
Multiprogramación
con particiones variables.
Mediante un algoritmo de
administración de memoria las particiones variables varían de forma dinámica
durante el uso de la máquina, evitando desperdicio de memoria
Otros métodos de administración de
memoria que tenemos son:
la administración de memoria con
mapa de bits
la memoria se divide en unidades de
asignación, a cada asignación le correspoden un bit en el mapa de bits, un mapa
de bits es una forma sencilla para llevar un registro de las palabras de la
memoria en una cantidad fija de memoria.
la administración de memoria con
listas ligadas
otra forma de mantener un registro
en memoria es mediante una lista ligada donde cada entrada de la lista
específica un hueco o un proceso.
la administración de memoria con el
sistema de los asociados
basado en el sistema binario o
utiliza para las direcciones.
3.
Memoria Virtual
El método diseñado por Fotheringham
en 1961 se conoce como Memoria Virtual,
la idea es que el tamaño combinado de la pila, programa y datos puede exceder
la memoria física disponible para ello. El S.O. mantiene en memoria aquellas
partes del programa que se deben permanecer en memoria y el resto lo deja en
disco, las partes entre el disco y la memoria se intercambian de modo que se
vayan necesitando.
3.1.
Paginación
El espacio de direcciones de cada
proceso se divide en bloques de tamaño uniforme llamados páginas, los cuales se
pueden colocar dentro de cualquier para página marco disponible en memoria.
Cuando las tablas de páginas son muy grandes se puede utilizar un esquema de
paginación de varios niveles para que las páginas se paginen a sí mismas.
Existen distintos niveles de
paginación y a su vez distintos modelos de computadoras han trabajado con
ellas.
Paginación de nivel 1: PDP-11
Paginación de 2 niveles: la VAX
Paginación de 3 niveles: la SPARC
Paginación de 4 niveles: la 68030
Memoria asociativa
En los algoritmos de paginación las
tablas de páginas se mantienen en la memoria debido a su gran tamaño, en
potencia este diseño tiene un efecto enorme en el rendimiento.
4.
Algoritmos de reemplazo de páginas.
Cuando ocurre un fallo
de página el sistema operativo debe elegir una página para retirarla de la
memoria y hacer un espacio para la página por recuperar. Si la página por
eliminar fue modificada mientras estaba
en memoria, debe escribirla en el disco para mantener actualizada la copia del
disco, si por el contrario la página no ha sido modificada la copia del disco
ya está actualizada por lo que no es necesario volver a escribir, la página por
leer sólo escribe encima de la página por retirar.
Aunque es posible elegir
una página al azar para el reemplazo relacionado con un fallo de página, el
rendimiento del sistema es mucho mejor si se elige una página de poco uso.
4.1.
Algoritmo
de reemplazo de páginas optimo
Mejor algoritmo posible para reemplazo
de páginas pero irrealizable en la práctica.
Al momento de ocurrir un fallo de
página cierto conjunto de páginas se encuentran en la memoria, en la siguiente
instrucción se hará referencia a una de estas páginas, otras páginas no se
utilizaran sino hasta mucho después, cada página puede ejecutarse con el número
de instrucciones ejecutadas antes de la primera referencia a esa página, el
algoritmo dice que se elimine la página con la mayor etiqueta; si una página no
va a utilizase sino hasta mucho después que otra la eliminación de la primera
retrasa el fallo de página lo mas posible, el único problema de este algoritmo
es que es irrealizable. Al momento del fallo de página el S.O. no tiene forma
de saber a qué página se hace referencia.
4.2.
Algoritmo
de página de uso no muy reciente.
En un fallo de página , el sistema
operativo inspecciona todas las páginas y las divide en cuatro categorías según
los valores actuales de los bits R
y M
Clase 0: No se ha hecho referencia
ni ha sido modificada
Clase 1: No se ha hecho referencia
pero ha sido modificada
Clase 2: Se ha hecho referencia pero
no ha sido modificada
Clase 3: Se ha hecho referencia y ha
sido modificada
El algoritmo NRU implica una hipótesis que indica que es
mejor eliminar una página modificada sin referencias al menos por lo general un
intervalo de reloj, este algoritmo es fácil de comprender, de implantación
eficiente y con un rendimiento que, aún sin ser el óptimo si es adecuado en
muchos casos.
4.3.
Algoritmo
de reemplazo " primero en entrar, primero en salir FIFO"
El sistema operativo tiene una lista
de todas las páginas que se encuentran en memoria, siendo la primera página la
mas antigua y la última la mas reciente, en un fallo de página, se elimina la
primera página y se añade la nueva al final de la lista.
4.4.
Algoritmo
de reemplazo de páginas de la segunda oportunidad
Una modificación simple del FIFO que
evita deshacerse de una página de uso frecuente inspecciona el bit R de la
página mas antigua, busca una página antigua sin referencias durante el
anterior intervalo de tiempo.
4.5.
Algoritmo
de reemplazo de páginas del reloj
Aunque el anterior algoritmo es
razonable un mejor enfoque es mantener las páginas en una lista circular con la
forma de un reloj, una manecilla apunta hacia la mas antigua. Al ocurrir un
fallo de página se inspecciona la página a la que apunta la manecilla si su bit
R=0 se retira de la memoria, se inserta la nueva página en su lugar en el reloj
y la manecilla avanza una posición, si R=1 la manecilla avanza una posición y
el bit se limpia, esto continua hasta encontrar una página con R=0.
5.
Segmentación
La memoria virtual que hemos
analizado hasta ahora es unidimensional, puesto que cada segmento constituye un
espacio independiente de direcciones, los distintos segmentos pueden crecer o
reducirse en forma independiente sin afectar a los demás.
Una memoria segmentada tiene otras
ventajas como hacer mas sencilla la administración de las estructuras de datos
que crecen o se reducen, si cada procedimiento ocupa un segmento independiente
con la posición inicial cero el ligado independiente de los procesos compilados
es mucho mas sencillo.