miércoles, 17 de junio de 2009

3.a ¿Cómo se traduce de dirección virtual a dirección física?

La memoria fisica de un ordenador es una secuencia de bytes, que empieza en el 0 y termina en....por ejemplo 64 megas. Es decir un array de bytes.

Cada byte tiene una dirección : el numero que ocupa posicionalmente en la memoria. Esta dirección es conocida como dirección fisica. Las direcciones que va a utilizar un programa (en modo protegido), no son esas. Siempre son traducidas, o mapeadas, en direcciones de memoria fisica por un mecanismo de traducción de direcciones.

Este mecanismo, nos introduce en el concepto de dirección virtual. Se llama de esta manera porque no corresponde directamente a posiciones de memoria física, sino que a traves de una función de mapeado equivale a una dirección de memoria fisica. Es decir este mecanismo, al apuntar a una dirección de memoria, lo que hace es buscar, por ejemplo en unas tablas internas, la correspondencia entre esta dirección y la dirección real física del dato.

La traduccion de dirección virtual a física tambien proporciona proteccion de memoria, ya que podría disponerse por ejemplo, que ciertas direcciones fisicas de memoria no se mapeen desde ninguna dirección virtual.

La traducción de las direcciones virtuales a reales es implementada por una Unidad de Manejo de Memoria (MMU). El sistema operativo es el responsable de decidir qué partes de la memoria del programa es mantenida en memoria física. Además mantiene las tablas de traducción de direcciones (si se usa paginación la tabla se denomina tabla de paginación), que proveen las relaciones entre direcciones virtuales y físicas, para uso de la MMU. Finalmente, cuando una excepción de memoria virtual ocurre, el sistema operativo es responsable de ubicar un área de memoria física para guardar la información faltante, trayendo la información desde el disco, actualizando las tablas de traducción y finalmente continuando la ejecución del programa que dio la excepción de memoria virtual desde la instrucción que causó el fallo.

Existen muchos mecanismos para la traducción de direcciones virtuales a físicas, entre los cuales destacamos:

Particiones fijas
La memoria física se divide en particiones fijas que pueden ser de diferentes tamaños. El hardware requiere de un registro base y un registro límite. La dirección fisica estará compuesta por la dirección virtual más un registro base (cargado por el SO después del cambio de contexto). La ventaja que tiene es que es sencillo y tiene un cambio de contexto rápido, y como desventajas la fragmentacion interna y externa.


Particiones variables
La memoria física es dividida en particiones variables cuyo tamaño varía dinámicamente. El hardware requiere de un registro base y un registro límite. La dirección fisica estará ompuesta por la dirección virtual más un registro base. El registro base contiene el valor de la dirección física menor posible, y el registro límite el mayor rango de direcciones virtuales. Con este tipo de traducción nos evitamos el problema de la fragmentacion interna (si sabemos cuanto necesita el proceso) pero seguimos teniendo el problema de la fragmentación externa.


Paginación (técnica actual)
Para solucionar el problema de la fragmentación externa dada conparticiones variables, usamos particiones fijas en memoria virtual y física.




Con este método, los procesos ven a la memoria como un espacio contiguo de 0 a M, aunque en realidad la memoria física está desparramada. Cada página virtual se mapea a una página real (marco de página) que está en cualquier parte en memoria física. Dicho mapeo es invisible al programa.


En la traducción de direcciones virtual,es una dirección tiene dos partes, el número de página virtual y el offset. El número de página virtual es un índice en la tabla de páginas. Una entrada en la tabla de paginas contiene el número de marco de págino, por lo que la dirección fisica se traduce a un número de marco de página más el offset. Las tablas de páginas son manejadas por el SO.







No hay comentarios:

Publicar un comentario