Sistemas Operativos
Por: 08-05-2009 por carlospatricio | Categorías asociadas: Capitulo VIII, Paralelo "B"

MEMORIA PRINCIPAL
La memoria principal y los registros integrados dentro del propio procesador son las únicas áreas de almacenamiento a las que el CPU puede acceder directamente.
El acceso a memoria puede requerir muchos ciclos del reloj del procesador para poderse complementar. El remedio consiste en añadir una memoria rápida entre la CPU y la memoria principal dicho búfer de memoria se denomina caché. Primero tenemos que asegurarnos  que cada proceso disponga de un espacio de memoria separado. Para hacer esto, debemos poder determinar el rango de direcciones legales a las que el proceso pueda acceder y garantizar también que el proceso sólo acceda a esas direcciones legales. La protección del espacio de memoria se consigue haciendo que el hardware de la CPU compare todas las direcciones generadas en modo usuario con el contenido de esos registros. Los registros base y límite solo pueden ser cargados por el sistema operativo, que utiliza una instrucción privilegiada especial, ya que únicamente el sistema operativo podrá cargar los registros base y límite.
Los procesos del disco que estén esperando a ser cargados en memoria para su ejecución forman lo que se denomina cola de entrada. Consiste en seleccionar uno de los procesos de la cola de entrada y cargar dicho proceso en memoria, este accede a las instrucciones y datos contenidos en la memoria, el proceso terminará su ejecución y sus espacio de memoria será declarado como disponible, un compilador se  encargara de reasignar estas direcciones reubicables a direcciones absolutas. La reasignación de las instrucciones y los datos a direcciones de memoria puede realizarse en cualquiera de los siguientes pasos: tiempo de compilación, tiempo de carga, tiempo de ejecución.
Una dirección generada por la CPU se denomina comúnmente dirección lógica, mientras que una dirección vista por la unidad de memoria se denomina comúnmente dirección física, el esquema de reasignación de direcciones en tiempo de ejecución hace que las direcciones lógica y física difieran, usualmente decimos que la dirección lógica es una dirección virtual. El conjunto de todas las direcciones lógicas generadas por un programa es lo que se denomina un espacio de direcciones lógicas. La correspondencia entre direcciones virtuales y físicas en tiempo de ejecución es establecida por un dispositivo hardware que se denomina unidad de gestión de memoria. El tamaño de un proceso está limitado por el tamaño de la memoria física, con la 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, el programa principal se carga en la memoria y se ejecuta. La ventaja del mecanismo de carga dinámica es que una rutina no utilizada no se cargara nunca en memoria. El mecanismo de carga dinámica no requiere de ningún soporte especial por parte del sistema operativo. Es responsabilidad del usuario diseñar sus programas para poder aprovechar dicho método.
Los procesos pueden ser intercambiados temporalmente, sacándolos de la memoria y almacenándolos  en un almacén de respaldo y volviéndolos a llevar luego a memoria para continuar su ejecución. El gestor de memoria puede intercambiar los procesos con la suficiente rapidez como para que haya siempre algunos procesos en memoria, listos para ejecutarse, cuando el planificador de la CPU quiera asignar el procesador a otra tarea.
La memoria esta usualmente dividida en dos particiones: una para el sistema operativo residente y otra para los procesos de usuarios, en el esquema de asignación continúa de memoria, cada proceso está contenido en una única sección contigua de memoria.
Uno de los métodos más simples para asignar la memoria consiste en dividirla en varias particiones de tamaño fijo. En este método de particiones múltiples, cuando una partición esta libre, se selecciona un proceso  de la cola de entrada y se lo carga en dicha partición. En el esquema de particiones fijas, el sistema operativo mantiene una tabla que indica que partes de la memoria están disponibles y cuales ocupados. La asignación dinámica  se ocupa de cómo satisfacer una solicitud de tamaño n a partir de una lista de agujeros libres. Las estrategias para seleccionar un agujero libre entre el conjunto de agujeros disponibles son las de primer ajuste, mejor ajuste y peor ajuste.
El problema de la fragmentación externa aparece cuando hay un espacio de memoria total suficiente como para satisfacer una solicitud, en el peor de los casos podríamos tener un bloque de memoria libre entre cada dos procesos, mientras que la fragmentación interna es la diferencia entre los dos valores, es decir, la memoria que es interna a una partición pero que no está siendo utilizada. Una solución al problema de la fragmentación externa  consiste en la compactación, el objetivo es mover el contenido de la memoria con el fin de situar toda la memoria libre de manera contigua, para formar un único bloque de gran tamaño.
La paginación es un esquema de gestión de memoria que permite que el espacio de direcciones físicas de un proceso no sea contiguo, la paginación evita el considerable problema de encajar fragmentos de memoria de tamaño variable en el almacén de respaldo. El almacén de respaldo también sufre los problemas de fragmentación que hemos mencionado en relación con la memoria principal, pero con la salvedad de que el acceso es mucho más lento, lo que hace que la compactación sea imposible.
La protección de memoria en un entorno paginado se consigue mediante una serie de bits de protección asociados con cada marco. Al mismo tiempo que se calcula la dirección física, pueden comprobarse los bits de protección para verificar que no se esté haciendo ninguna escritura en una página de solo lectura, todo intento de escribir una página de solo lectura provocara una interrupción hardware al sistema operativo.
Un aspecto importante de la gestión de memoria que se volvió inevitable con los mecanismos de paginación es la separación existente entre la vista que el usuario tiene de la memoria y la memoria física real, la vista del usuario se mapea sobre la memoria física, este mapeo permite la diferenciación entre memoria lógica y memoria física.
La segmentación es un esquema de gestión de memoria que soporta esta visión de la memoria que tienen los usuarios. Un espacio lógico de direcciones es una colección de segmentos y cada segmento tiene un nombre y una longitud. Las direcciones  especifican tanto el nombre del segmento como el desplazamiento dentro de ese segmento. El usuario especifica, por tanto, cada dirección proporcionando dos valores: un nombre de segmento y un desplazamiento. Así una  dirección lógica estará compuesta  por una pareja  del tipo:
<número-segmento, desplazamiento>