GESTIÓN DE MEMORIA
La gestión de memoria se encarga de asignar la memoria física del sistema a los programas, éstos se expanden hasta llenar la memoria con que se cuenta.
Todas las computadoras tienen una jerarquía de memoria, con una pequeña cantidad de memoria caché, una cantidad mucho mayor de memoria principal (RAM) y decenas o centenas de gigabyte de almacenamiento en disco.
El administrador de memoria es el encargado de administrar la jerarquía de memoria. Es el encargado de saber qué partes de la memoria están en uso o no, asignar y liberar la memoria principal a los procesos que la requieren, y administrar los intercambios entre la memoria principal y el disco.
Se puede decir que los objetivos principales de un sistema de gestión de memoria pasan por ofrecer a cada proceso un espacio lógico propio proporcionando una protección entre los procesos, permitir que los procesos compartan la memoria. Además se debe maximizar el rendimiento del sistema y proporcionar a los procesos mapas de memoria grandes.
En un sistema de multiprogramación cada programa debe contener dentro del código referencias al espacio de memoria a utilizar, ya que el mismo no siempre será el mismo, por tanto el sistema tendrá que realizar una reubicación de las direccionesde memoria a las que hacen referencia las instrucciones de los programas para que se correspondan con las direcciones de memoria principal asignadas al mismo. Esto se logra a través de la unidad de manejo de memoria (MMU), que como se ha comentado se encarga de convertir las direcciones lógicas (memoria virtual) emitidas por los procesos en direcciones físicas. Además se encarga de que la conversión se realiza con éxito y que el proceso que intenta acceder a las direcciones de memoria correspondientes tiene permiso para ello.
En caso de fallo se envía una excepción que será tratada por el kernel. Éste último está siempre en la memoria principal, ya que si estuviera en la memoria secundaria nadie podría llevarlo a la memoria principal en caso de fallo de acceso a memoria.
Dentro de la MMU existe una pequeña memoria asociativa denominada TLB (Translation Lookaside Buffer), que mantiene la información de las últimas páginas accedidas. Se puede decir que se trata de una memoria tipo caché. Con ello se evita que el procesador esté siempre leyendo la tabla de páginas directamente, con el consecuente decremento de rendimiento.
El funcionamiento del TLB consiste en verificar si la dirección requerida se encuentra en el mismo, si es así automáticamente la MMU traducirá la dirección lógica en su respectiva dirección física para ser utilizada.
En cambio, si la dirección no está presente en el TLB se produce un fallo de página, por lo que se procederá a buscar en la tabla de dirección mediante un proceso llamado page walk. Este proceso es costoso, ya que requiere de la lectura de múltiples ubicaciones de memoria. Una vez determinada la dirección física a través del page walk, el mapeo de la dirección virtual a la física es ingresado en el TLB para su posterior uso.
Memoria principal
La memoria principal constituye el dispositivo de almacenamiento primario de los computadores. De carácter volátil, en ella se ubican los datos que precisan los programas para su ejecución. Esta memoria es de mayor costo que la memoria secundaria, pero el acceso a su información es mucho mayor.
La memoria principal se comunica con la CPU mediante el bus de direcciones, y es el ancho de este bus el que determina la capacidad del microporcesador para el direccionamiento de direcciones de memoria.
Se puede decir de manera coloquial que la memoria principal está formada como un conjunto de casillas, cada una con una dirección que las identifica, donde se almacenan los datos y las instrucciones correspondientes a los programas. Cada casilla está enumerada con lo que se denomina dirección de memoria.
Memoria virtual
El tamaño del programa, datos y pila puede exceder la cantidad de memoria física disponible, por lo que el sistema guarda en la memoria secundaria aquellas partes del programa que no están en ejecución o que no tienen espacio para ser cargadas en la memoria principal.
La memoria virtual utiliza estos dos niveles de jerarquía de memoria: principal y secundaria o de respaldo que suele ser el disco. Con ello podemos obtener una cantidad de memoria mayor que la memoria física disponible, y por tanto ejecutar procesos con una memoria lógica mayor que la memoria física disponible.
Hay que resaltar que el uso de la memoria virtual no acelera la ejecución de un programa, sino que puede incluso que la ralentice debido a la sobrecarga asociada a las transferencias entre la memoria principal y la secundaria. Esto hace que esta técnica no sea apropiada para sistemas de tiempo real.
Sobre la memoria de respaldo se establece un mapa uniforme de memoria virtual, y son a estas direcciones del mapa a las que se refiere el procesador en la ejecución del programa, pero los accesos reales se realizan sobre la memoria principal. La memoria virtual requiere por tanto de una gestión automática de la jerarquía de memoria formada por la memoria principal y el disco.
El sistema operativo gestiona la transferencia de bloques desde la memoria principal a la memoria secundaria que sirve de respaldo a la memoria virtual. Las direcciones generadas por las instrucciones máquina están referidas al espacio virtual. En este sentido se habla de que el procesador genera direcciones virtuales.
El mapa virtual asociado a un programa en ejecución está soportado físicamente por una zona del disco denominada de intercambio o swap, y por una zona de la memoria principal.
La memoria virtual se implementa sobre un esquema de paginación. A este dispositivo se le denomina dispositivo de paginación. Se denominan páginas virtuales a las páginas de espacio virtual, páginas de intercambio a las páginas residentes en el disco y marcos de página a los espacios en los que se divide la memoria principal.
Cada marco de página es capaz de albergar una página virtual cualquiera. Se puede decir que la unidad de hardware denominada MMU, traduce el número de página virtual en el correspondiente número de marco de página.
Cuando las páginas de memoria de un programa necesarias para su ejecución no se encuentren en memoria principal, la MMU producirá la respectiva excepción.
Los fallos de página son atendidos por el sistema operativo que se encarga de realizar la adecuada migración de páginas, para traer la página requerida por el programa a un marco de página. Se denomina paginación por demanda al proceso de migración necesario para atender los fallos de página. En el siguiente punto se profundizará más en este proceso de paginación.
También cabe reseñar que el tamaño del espacio virtual suele ser muy grande, y dado que los programas requieren en general mucho menos espacio, una de las funciones que realizar el sistema operativo es la asignación de espacio virtual a los programas en ejecución. El programa no podrá utilizar todo el espacio virtual sino que se tiene que restringir a la zona o zonas que le asigne el sistema operativo. Estas zonas se denominan segmentos, y a dicho proceso segmentación que se profundizará más adelante.
Traducción de página virtual a física
La memoria física de un ordenador es una secuencia de bytes donde cada bytes tiene una dirección que es la posición que ocupa en la propia memoria.
Las direcciones de memoria que utiliza un programa no son directamente las direcciones físicas, sino que son direcciones lógicas que son traducidas o mapeadas en direcciones físicas.
Para realizar la traducción es necesaria la utilización de hardware con ayuda del sistema operativo. Respecto a este hardware hablamos del gestor de memoria (MMU) junto con el búfer de traducción anticipada de instrucciones (TLB).
El gestor de memoria será el encargado de traducir las direcciones virtuales a direcciones de memoria principal, de tal forma que cada una corresponda con su respectivo marco de página.
No hay comentarios.:
Publicar un comentario