2 votos

Función de la unidad de gestión de la memoria

Sé que la primera instrucción almacenada en la BIOS está "mapeada" en la dirección de memoria 0, y que una señal en el pin de reinicio del microprocesador hace que esta instrucción sea buscada, comenzando el POST y toda la carga en cadena involucrada en el proceso de arranque.

También sé que hay una unidad de gestión de memoria (MMU) a nivel de hardware. ¿Se encarga de hacer esta redirección (lejos de la DRAM al firmware de la BIOS) para que el procesador pueda interactuar con la memoria del ordenador de una manera felizmente ingenua? Si es así, ¿qué otras áreas (además de la BIOS) mapea la MMU en el espacio total de direcciones?

Sé que en los sistemas operativos modernos con interfaz gráfica de usuario, las pantallas están "mapeadas en bits". ¿La MMU mapea también una parte de la RAM de vídeo de la tarjeta de vídeo en el espacio de direcciones global?

¿Qué pasa con la memoria virtual y la paginación? ¿Tiene la MMU de hardware alguna capacidad intrínseca que facilite la función de memoria virtual proporcionada por el SO?

Puede que esté muy equivocado.

5voto

Kiran Puntos 320

En el momento del RESET, la MMU suele estar "apagada", es decir, no hace ninguna traducción de las direcciones de memoria. Así que el vector de RESET se recupera de la EPROM/Flash de la BIOS porque la memoria de la BIOS puede estar realmente en esa dirección física.

La CPU acabará encendiendo la MMU cuando se hayan configurado suficientes datos de la misma. Por ejemplo, la MMU puede tener tablas, en matrices de memoria, que convertirán una dirección virtual en una dirección física.

Hay varios tipos de MMU. Las más sencillas tienen una dirección base, que es un desplazamiento en la memoria física, y un límite, que es la dirección más grande a la que puede acceder un programa. Este tipo es común en las MCU de 32 bits.

Las MMU más complejas crearán la ilusión del direccionamiento virtual. El espacio de direcciones de un programa parece ser contiguo para el programa y los datos, pero en realidad no lo es, y parte de él puede estar almacenado en un sistema de almacenamiento externo como un disco o SSD.

La MMU está "en el chip" en las CPU modernas. En algunas CPUs de los años 70 y parte de los 80 eran unidades separadas fuera del chip.

La MMU tiene una relación muy "íntima" con la CPU. Cada acceso a la memoria pasa por la MMU. La MMU puede evitar cualquier instrucción que completa un acceso a la memoria. Por ejemplo, una instrucción de carga o almacenamiento, que transfiere datos entre la CPU y la memoria, podría no completarse porque está utilizando una dirección que no es válida. Por ello, la MMU necesita una integración rápida y sincronizada con la CPU.

En el caso de una CPU con capacidad de direccionamiento virtual, la MMU puede evitar que se complete una instrucción para una página de memoria virtual "perdida" interrumpiendo la CPU en mitad de la instrucción. Ese estado de la CPU se almacena y se inicia el proceso para recuperar la página que falta desde el almacenamiento externo. Mientras tanto, pueden ejecutarse otros programas. Finalmente, la página se carga en la memoria, se "arregla" en las tablas de la MMU para que sea válida y se vuelve a ejecutar la instrucción incompleta hasta su finalización, posiblemente millones de instrucciones más tarde.

Hay que elegir la relación entre la memoria caché y la MMU. Una caché puede estar indexada por direcciones de memoria física, o por direcciones de memoria virtual. Si la caché está indexada por direcciones virtuales, la búsqueda en la caché puede ocurrir en paralelo con la MMU. Si la caché está indexada por direcciones físicas, la búsqueda se realiza después de que la MMU haya traducido una dirección virtual a una dirección física.

Una MMU no podría mapear la memoria de vídeo en el espacio de direcciones de la CPU a menos que la tarjeta de vídeo ya haga que la memoria de vídeo se parezca a la memoria normal. La MMU no realiza ninguna magia, hace la traducción de direcciones entre la CPU y el acceso a la memoria. La MMU se configura para cada proceso lógico (OS), por ejemplo, una aplicación independiente. La MMU puede "ocultar" partes del espacio de direcciones de un proceso, y normalmente lo hace. Así, la MMU puede impedir que un proceso acceda a la memoria de vídeo si ésta forma parte del espacio de direcciones subyacente de la CPU.

Es la MMU la que permite a un SO crear un entorno de memoria virtual para los procesos. El sistema operativo está obligado a utilizar cualquier arquitectura de direcciones virtuales que la MMU proporcione. El SO y la MMU no tienen que ser exactamente alineado, por ejemplo el SO podría utilizar más grande páginas de las que admite la MMU, pero sería muy incómodo para el SO intentar utilizar páginas más pequeñas.

Es la MMU la que permite al SO proporcionar la ilusión de memoria virtual. Sin una MMU adecuada, sería impracticable proporcionar memoria virtual.

(Sin una MMU con capacidad de memoria virtual, la ilusión de la memoria virtual, que contiene en proceso, sería gestionada por un intérprete como la Máquina Virtual Java (JVM), o el runtime de .NET. Estos actúan sobre cada para garantizar que el código del programa Java/C# no pueda dañar a otro programa que se esté ejecutando en el mismo espacio de direcciones).

Normalmente la CPU se ejecuta en un par de "modos" diferentes, y la MMU tratará una dirección de forma diferente dependiendo del modo. El SO se ejecutará en un "modo" más privilegiado que un proceso de usuario.

Una MMU que soporte el direccionamiento virtual interceptará cada acceso del proceso de usuario a la memoria (tanto para instrucciones como para datos) y convertirá la dirección virtual en una dirección física real. Esta traducción no se produce necesariamente. Las tablas de traducción de la MMU también llevan bits de control, que la MMU impone, que permiten al proceso de usuario el permiso para leer, ejecutar o escribir en la dirección física.

0voto

Alex Andronov Puntos 178

El "núcleo" de un procesador es un dispositivo que genera una secuencia de peticiones de lectura y escritura en uno o varios buses del sistema. En un sistema simple basado en un procesador, algunos de los bits de dirección y señales de control del núcleo se utilizarán para seleccionar qué dispositivo (si es que hay alguno) debe manejar cada solicitud, y algunos o todos los bits restantes se darán al dispositivo seleccionado. Normalmente, cuando un núcleo emite una petición de lectura, emitirá una dirección y esperará que el dispositivo seleccionado ponga información en el bus de datos; el núcleo muestreará el contenido del bus de datos después de dar al dispositivo algún tiempo para procesar la petición. Cuando se emite una petición de escritura, se emite una dirección y se conduce el bus de datos con la información a escribir; se espera que el dispositivo seleccionado tome los datos del bus de datos en un tiempo determinado. Aunque los núcleos de los procesadores suelen tener un tiempo determinado en el que esperan que se cumplan las peticiones de lectura y escritura, muchos tienen algún tipo de entrada de "espera" que puede hacer que esperen más tiempo si es necesario.

Aunque los sistemas "simples" como los descritos anteriormente han demostrado ser útiles para muchos propósitos, a menudo es útil proporcionar una lógica adicional que se sitúa entre el procesador y la memoria o los dispositivos de E/S. Esta lógica puede servir para permitir el uso de dispositivos que requieren tiempos de señal diferentes a los del bus principal del procesador (por ejemplo, líneas de dirección multiplexadas), optimizar el comportamiento con ciertas secuencias de direcciones (por ejemplo, cuando se utiliza un bus de direcciones multiplexado, vigilar las solicitudes consecutivas en las que parte de la dirección permanece constante, y procesarlas sin recargar la parte constante), implementar el almacenamiento en caché de la memoria, etc. Los circuitos que realizan este tipo de funciones no se denominan en sí mismos MMU, pero vale la pena mencionarlos porque muchos dispositivos MMU incorporan esta funcionalidad .

El término "MMU" suele referirse a un dispositivo que permite al procesador cambiar el comportamiento de los rangos de direccionamiento de la memoria y esta es la clave --utiliza algún tipo de indicador de "modo supervisor" recibido desde el núcleo del procesador para permitir que una pieza de código conocida como buena cambie, justo antes de ejecutar algún código que pueda no ser bueno, a un modo "usuario" que restringirá qué características estarán disponibles para el procesador hasta que se sepa que está ejecutando código bueno de nuevo. Este diseño, si se implementa correctamente, hará posible que un sistema ejecute código potencialmente no fiable y obtenga los beneficios si el código es bueno, pero limitará el daño que puede hacer si es malo.

Ten en cuenta que aunque una unidad de gestión de memoria típica incluirá varias formas de características de mapeo de direcciones, no es el soporte para el mapeo de direcciones lo que hace que algo sea una MMU. Lo importante, más bien, es que proporcione un medio para cambiar entre un modo en el que el procesador puede hacer "cualquier cosa" y otro en el que no. La configurabilidad es muy deseable en una MMU, pero en algunos casos no es esencial; en algunos casos una "MMU" podría no ser más que un cable que conecta el pin "usuario/supervisor" de un procesador a una señal de habilitación para un decodificador de selección de chip [en cuyo caso habría dos "configuraciones", controladas por el núcleo].

Por cierto, aunque algunos procesadores como el 80286 han soportado una variedad de modos de usuario/supervisor en sus núcleos, la práctica actual es que un núcleo soporte un modo de usuario y un modo de supervisor. El núcleo necesita soportar esa cantidad, ya que sabe cuándo está obteniendo código para las interrupciones (que necesitan ejecutarse como supervisor, pero comenzarán en direcciones que se sabe que son seguras). Niveles más finos de control de acceso se manejan a menudo no teniendo el núcleo soporte para más modos, sino más bien diciendo que el código en modo supervisor está incondicionalmente permitido para reconfigurar todos los ajustes relacionados con las direcciones, y el código en modo usuario está permitido para hacer cualquier cosa que la "unidad de gestión de memoria" le permita hacer.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X