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:
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.
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.
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
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.
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.
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 corresponden 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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Bit que se activa si se hace referencia a la página en cuestiónBit que se activa si se modifica la página