Administración de la memoria con mapas de bits
Podemos dividir la memoria en pequeñas unidades, y registrar en un mapa de bits las unidades ocupadas y desocupadas. Las unidades pueden ser de unas pocas palabras cada una, hasta de un par de KB. A mayor tamaño de las unidades, menor espacio ocupa el mapa de bits, pero puede haber mayor fragmentación interna. Desventaja: para encontrar hoyo de n unidades hay que recorrer el mapa hasta encontrar n ceros seguidos (puede ser caro).
Con un mapa de bits, la memoria se divide en unidades de asignación, las cuales pueden ser tan pequeñas como unas cuantas palabras o tan grandes como varios kilobytes. A cada unidad de asignación le corresponde un bit en el mapa de bits, el cual toma el valor de 0 si la unidad está libre y El tamaño de la unidad de asignación es un aspecto importante del diseño. Mientras más pequeña sea esta unidad, más grande será el mapa de bits. Una memoria de 32n bits utilizará n bits del mapa, de forma que dicho mapa sólo ocupa 1/33 de la memoria. Si la unidad de asignación es grande el mapa de bits será pequeño, pero se podría desperdiciar una parte valiosa de la memoria en la última unidad si el tamaño del proceso no es un múltiplo exacto de la unidad de asignación.
Un mapa de bits es una forma sencilla para llevar un registro de las palabras de la memoria en una cantidad fija de memoria, puesto que el tamaño del mapa sólo depende del tamaño de la memoria y del tamaño de la unidad de asignación. El problema principal de esto es que, cuando se decide traer a la memoria un proceso de k unidades, el administrador de la memoria debe buscar en el mapa una cadena de k ceros consecutivos.
La búsqueda en un mapa de bits de ciertas cadenas es una operación lenta, por lo que los mapas no se utilizan con frecuencia.
jueves, 19 de noviembre de 2009
4.2.2 Administracion de memoria con listas enlazadas
Otra forma es con una lista enlazadas: estado (ocupado o en uso), dirección (de inicio), tamaño. Cuando un proceso termina o se pasa a disco, si quedan dos hoyos juntos, se funden en un solo segmento. Si la lista se mantiene ordenada por dirección, podemos usar uno de los siguientes algoritmos para escoger un hoyo donde poner un nuevo proceso.
• First-fit.
Asignar el primer hoyo que sea suficientemente grande como para contener al proceso.
• Best-fit.
Asignar el menor hoyo en el que el proceso quepa.
• Worst-fit.
Asignar el mayor hoyo.
Cada vez que se asigna un hoyo a un proceso, a menos que quepa exactamente, se convierte en un segmento asignado y un hoyo más pequeño. Best-fit deja hoyos pequeños y worst-fit deja hoyos grandes. Simulaciones han mostrado que first-fit y best-fit son mejores en términos de utilización de la memoria. First-fit es más rápido .
Cada entrada de la lista especifica un hueco (H) o un proceso (P), la dirección donde comienza, su longitud y un apuntador a la siguiente entrada.
La lista de segmentos está ordenada por direcciones. Este orden tiene la ventaja de que al terminar o intercambiar un proceso, la actualización de la lista es directa.
Cuando los procesos y los huecos se mantienen en una lista ordenada por direcciones, se pueden utilizar diversos algoritmos para asignar la memoria para un proceso de reciente creación o intercambio
Algoritmo primero en ajustarse.
El administrador de la memoria revisa toda la lista de segmentos hasta encontrar un espacio lo suficientemente grande. El espacio se divide entonces en dos partes, una para el proceso y otra para la memoria no utilizada, excepto por el caso poco probable de un ajuste exacto. Este algoritmo es rápido, puesto que busca lo menos posible.
4.2.3 Distribucion del espacio para el intercambio
Los grupos de software son colecciones de paquetes que admiten distintas funciones y controladores de hardware.
Para una instalación inicial, debe seleccionar el grupo de software que se va a instalar basándose en las funciones que desea realizar en el sistema.
En el caso de una modernización, deberá realizarla al grupo de software instalado en el sistema. por ejemplo, si ha instalado previamente en el sistema el grupo de software Usuario final, no puede usar la opción de modernización especificando el grupo de software. Sin embargo, durante la modernización puede agregar software al sistema que no forme parte del grupo de software instalado en ese momento.
Al instalar el software, puede elegir, agregar o suprimir paquetes del grupo de software que haya seleccionado. Para ello es necesario que conozca las dependencias de software y la manera como está empaquetado el software.
La compatibilidad reducida de red contiene el número mínimo de paquetes y el grupo completo de software más compatibilidad contiene todos los paquetes.
Las recomendaciones sobre el espacio de disco
Al instalar el software, puede elegir, agregar o suprimir paquetes del grupo de software que haya seleccionado. Para ello es necesario que conozca las dependencias de software y la manera como está empaquetado el software.
- Espacio de intercambio
- Modificaciones
- Paquetes adicionales de software
4.3 MEMORIA VRTUAL
La memoria virtual es una técnica para proporcionar la ilusión de un espacio de memoria mayor que la memoria física, sin tener en cuenta el tamaño de la memoria física.
Está soportada por el mecanismo de traducción de memoria, junto con un almacenamiento rápido en disco duro (swap).
El espacio de direcciones virtual, está mapeado de tal forma que una pequeña parte de él, está en memoria real y el resto almacenado en el disco.
Está soportada por el mecanismo de traducción de memoria, junto con un almacenamiento rápido en disco duro (swap).
El espacio de direcciones virtual, está mapeado de tal forma que una pequeña parte de él, está en memoria real y el resto almacenado en el disco.
4.3.1 Paginacion memoria virtual
- Igual que la paginación simple.
- No es necesario cargar todas las páginas.
- Las páginas no residentes se cargan por demanda.
Ventajas.
No fragmentación externa. Alto grado de multiprogramación. Gran espacio virtual para el proceso.
Desventaja.
Sobrecarga por gestión compleja de memoria.
Cada proceso tiene su propia tabla de paginas.
Si la pagina no se modifica, al realizarse el swap a disco no se necesitara copiar desde la memoria principal a la memoria secundaria.
Ocurre cuando se referencia a una dirección virtual y ella no reside en la memoria real, se presenta una interrupción fallo de página.
TAMAÑO DE PAGINAS
Páginas pequeñas
Menos fragmentación interna.
Más páginas para el proceso.
Muchas páginas por proceso.
La tabla de paginas crecerá en tamaño.
Se necesita mas MV para carga la tabla.
El fallo de página se reduce.
Páginas grandes
Mas fragmentación interna.
C/página contiene mas porciones del proceso.
Se ocupa memoria innecesariamente.
El fallo de página se incrementa.
4.3.2 Segmentacion memoria virtual
Es un esquema de manejo de memoria mediante el cual la estructura del programa refleja su división lógica; llevándose a cabo una agrupación lógica de la información en bloques de tamaño variable denominados segmentos. Cada uno de ellos tienen información lógica del programa: subrutina, arreglo, etc. Luego, cada espacio de direcciones de programa consiste de una colección de segmentos, que generalmente reflejan la división lógica del programa. La segmentación permite alcanzar los siguientes objetivos:
1. Modularidad de programas: cada rutina del programa puede ser un bloque sujeto a cambios y recopilaciones, sin afectar por ello al resto del programa.
2. Estructuras de datos de largo variable: ejm. Stack, donde cada estructura tiene su propio tamaño y este puede variar.
3. Protección: se puede proteger los módulos del segmento contra accesos no autorizados.
4. Comparición: dos o más procesos pueden ser un mismo segmento, bajo reglas de protección; aunque no sean propietarios de los mismos.
5. Enlace dinámico entre segmentos: puede evitarse realizar todo el proceso de enlace antes de comenzar a ejecutar un programa. Los enlaces se establecerán solo cuando sea necesario.
Un bit expresa si el segmento se encuentra ya en memoria.
Un bit expresa si el segmento ha sido modificado.
1. Modularidad de programas: cada rutina del programa puede ser un bloque sujeto a cambios y recopilaciones, sin afectar por ello al resto del programa.
2. Estructuras de datos de largo variable: ejm. Stack, donde cada estructura tiene su propio tamaño y este puede variar.
3. Protección: se puede proteger los módulos del segmento contra accesos no autorizados.
4. Comparición: dos o más procesos pueden ser un mismo segmento, bajo reglas de protección; aunque no sean propietarios de los mismos.
5. Enlace dinámico entre segmentos: puede evitarse realizar todo el proceso de enlace antes de comenzar a ejecutar un programa. Los enlaces se establecerán solo cuando sea necesario.
- Igual que la segmentación simple.
- No es necesario cargar todos los segmentos.
- Las segmentos se cargan por demanda.
- Segmentos de tamaño dinámico, según la demanda.
- Se puede alterar los programas y recompilarlos independientemente.
Tabla de Segmentos
El SO debe mantener una lista de huecos libres.
Un bit expresa si el segmento se encuentra ya en memoria.
Un bit expresa si el segmento ha sido modificado.
4.3.3 Algoritmos de Sustitución de Páginas
El SO perfecto eliminaría siempre la página menos necesaria, aquella que en el futuro resultará ser la última en ser usada de todas las existentes en la tabla
En la práctica, la mejor estrategia es aquella que tenga el menor número de fallas-de-página, i.e. page-fault rate
Primera en entrar, primera en salir (FIFO, First In, First Out)
En este método el sistema operativo sólo tiene que guardar en qué orden las páginas fueron cargadas, de modo que al necesitar hacer espacio pueda fácilmente elegir la primera página cargada. Se usa una cola, al cargar una página nueva se ingresa en el último lugar. Aunque las colas FIFO son simples e intuitivas, no se comportan de manera aceptable en la aplicación práctica, por lo que es raro su uso en su forma simple. Uno de los problemas que presentan es la llamada Anomalía FIFO o Anomalía de Belady. Belady encontró ejemplos en los que un sistema con un número de marcos de páginas igual a tres tenía menos fallos de páginas que un sistema con cuatro marcos de páginas. El problema consiste en que podemos quitar de memoria una página de memoria muy usada, sólo porque es la más antigua.
Segunda oportunidad
Es una pequeña modificación al algoritmo FIFO, que funciona bastante mejor que aquel. En este caso cuando una página debe ser sacada se toma la primera en la cola, y en vez de sacarla, consulta el valor de un bit de referencia. En caso de estar fijado (en 1) se cambia el bit a 0 y se lo coloca al final de la cola, actualizando su tiempo de carga como si recién hubiera llegado a la memoria. De esta forma, se le da una segunda oportunidad. Si el bit se encuentra sin fijar(en 0), la página se saca de memoria. Cada vez que la MMU accede a una página, fija su bit de referencia a 1. Para esto es necesario soporte para bit de referencia por hardware.
Reloj
Existe una variante de este algoritmo que sobre la misma idea presenta una mejora en la implementación. Es el algoritmo del reloj, que lo que hace es tener una lista circular, de forma que al llegar al último elemento de la lista, pasa automáticamente al primero. Los elementos no se mueven al final de la cola cuando son accedidos, simplemente se pone su bit de referencia a 1. Esto nos evita tener que hacer movimientos de punteros en el caso de implementarlo con una lista enlazada. De hecho, se puede implementar con un array perfectamente, ahorrando así memoria.
No usada recientemente (Not Recently Used, NRU)
Este algoritmo favorece a las páginas que fueron usadas recientemente. Funciona de la siguiente manera: cuando una página es referenciada, fija el bit de referencia para esa página. Similarmente, cuando una página es modificada, fija su bit de modificación. Usualmente estas operaciones son realizadas por el hardware, aunque puede hacerse también por software. En un tiempo fijo, el sistema operativo pone en 0 los bits de referencia de todas las páginas, de modo que las páginas con su bit de referencia en 1 son las que fueron referenciadas dentro del último intervalo de reloj. Cuando una página debe ser reemplazada, el sistema operativo divide las páginas en cuatro categorías:
Categoría 0: no referenciada, no modificada
Categoría 1: no referenciada, modificada
Categoría 2: referenciada, no modificada
Categoría 3: referenciada, modificada
Las mejores páginas para cambiar son las que se encuentran en la categoría 0, mientras que las peores son las de la categoría 3. Se desaloja al azar una página de la categoría más baja que no esté vacía. Este algoritmo se basa en la suposición de que es mejor desalojar una página modificada a la que no se ha hecho referencia en al menos un tic de reloj, en vez de una página limpia que se está usando mucho.
Menos usada recientemente (Least Recently Used, LRU)
Este algoritmo difiere del de 'No usada recientemente' en el hecho de que aquel sólo se fija en el intervalo de tiempo desde que se pusieron en 0 los bits de referencia de las páginas, mientras que el algoritmo de 'Menos usada recientemente' intenta proveer un comportamiento casi óptimo mediante la observación de las páginas que menos fueron usadas recientemente. Este tipo de páginas, estadísticamente son las que tienen menor probabilidad de ser usadas nuevamente.













