Función de la unidad de administración de memoria

2

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

También sé que hay una unidad de gestión de memoria (MMU?) en el nivel de hardware. ¿Está a cargo de hacer esta redirección (desde la DRAM al firmware de la BIOS) para que el procesador pueda interactuar con la memoria de la computadora de una manera ingenua? Si es así, ¿qué otras áreas (además de BIOS) se asigna la MMU en el espacio de direcciones total?

Sé que para los sistemas operativos modernos con una GUI, las pantallas están "en mapa de bits". ¿La MMU también asigna una parte de la RAM de video en la tarjeta de video al espacio global de direcciones?

¿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 sistema operativo?

Puede que esté muy lejos.

    
pregunta Padawan Learner

2 respuestas

2

En RESET, la MMU generalmente está 'apagada', es decir, no realiza ninguna traducción de las direcciones de memoria. Por lo tanto, el vector RESET se recupera de BIOS EPROM / Flash porque la memoria del BIOS puede estar en esa dirección física.

La CPU finalmente activará la MMU, cuando se hayan configurado suficientes datos de la MMU. 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. Los más simples 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 MCU de 32 bits.

Las MMU más complejas crearán la ilusión de 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 almacenarse en un sistema de almacenamiento externo como un disco o SSD.

La MMU está "en chip" en las CPU modernas. Eran unidades separadas de chip para algunas CPU en los 70 y parte de los 80.

AN MMU tiene una relación muy 'íntima' con la CPU. Cada acceso a la memoria va a través de la MMU. La MMU puede evitar que la instrucción cualquier complete un acceso a la memoria. Por ejemplo, una instrucción de carga o almacenamiento, transfiriendo datos entre la CPU y la memoria, debe evitarse porque se está utilizando una dirección que no es válida. Por lo tanto, la MMU necesita una integración rápida y sincronizada con la CPU.

Para una CPU con capacidad de direccionamiento virtual, la MMU puede evitar que una instrucción se complete para una página de memoria virtual "faltante" al interrumpir la CPU en la mitad de la instrucción. El estado de la CPU se almacena y se inicia el proceso para recuperar la página faltante del almacenamiento externo. Otros programas pueden ejecutarse mientras tanto. Finalmente, la página se carga en la memoria, la página se "arregla" en las tablas de la MMU, de modo que sea válida, y luego la instrucción incompleta se vuelva a completar, posiblemente millones de instrucciones más adelante.

Hay una opción acerca de la relación entre la memoria caché y la MMU. Un caché puede estar indexado por direcciones de memoria física o direcciones de memoria virtual. Si la caché está indexada por direcciones virtuales, la búsqueda en caché puede realizarse 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 puede asignar la memoria de video al espacio de direcciones de la CPU a menos que la tarjeta de video ya haga que la memoria de video se vea como la memoria normal. La MMU no realiza ningún tipo de magia, sino que realiza 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, Aplicación separada. La MMU puede "ocultar" partes del espacio de direcciones de un proceso, y normalmente lo hace. Por lo tanto, la MMU podría impedir que un proceso acceda a la memoria de video si es parte del espacio de direcciones subyacente de la CPU.

Es la MMU la que permite que un sistema operativo cree un entorno de memoria virtual para los procesos. El SO está mayormente limitado a usar cualquier arquitectura de dirección virtual que proporcione la MMU. El sistema operativo y la MMU no tienen que estar exactamente alineados, por ejemplo, el sistema operativo podría usar páginas más grandes de las que admite la MMU, pero sería extremadamente incómodo para el sistema operativo intentarlo para usar páginas más pequeñas.

Es la MMU la que permite al sistema operativo proporcionar la ilusión de memoria virtual. Sin una MMU adecuada, no sería práctico proporcionar memoria virtual.

(Sin una MMU capaz de memoria virtual, la ilusión de memoria virtual, contenida en el proceso, sería gestionada por un intérprete como la Máquina Virtual de Java (JVM) o el tiempo de ejecución de .NET. Actúan sobre cada instrucciones para garantizar que el código del programa Java / C # no pueda dañar 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 manera diferente según el modo. El sistema operativo se ejecutará en un "modo" más privilegiado que un proceso de usuario.

Una MMU que admite el direccionamiento virtual interceptará cada acceso de 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 necesariamente sucede. Las tablas de traducción de la MMU también llevan bits de control, que la MMU aplica, lo que le permite al usuario procesar permisos para leer, ejecutar o escribir en la dirección física.

    
respondido por el gbulmer
0

El "núcleo" de un procesador es un dispositivo que genera una secuencia de solicitudes de lectura y escritura en uno o más buses del sistema. En un sistema simple basado en un procesador, algunos de los bits de dirección y las señales de control del núcleo se utilizarán para seleccionar qué dispositivo (si corresponde) debe manejar cada solicitud, y algunos o todos los bits restantes se entregarán al dispositivo seleccionado . Normalmente, cuando un núcleo emite una solicitud de lectura, emitirá una dirección y esperará que el dispositivo seleccionado coloque información en el bus de datos; el núcleo tomará una muestra del contenido del bus de datos después de darle al dispositivo algo de tiempo para procesar la solicitud. Cuando emite una solicitud de escritura, generará una dirección y manejará el bus de datos con la información que se escribirá; se espera que el dispositivo seleccionado tome los datos del bus de datos dentro de un cierto período de tiempo. Aunque los núcleos de los procesadores generalmente tienen una cierta cantidad de tiempo en el que esperan que se respeten las solicitudes de lectura y escritura, muchos tienen algún tipo de entrada de "espera" que puede hacer que esperen más tiempo si es necesario.

Si bien 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 encuentra 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 temporizaciones de señal diferentes a las del bus del procesador principal (por ejemplo, líneas de dirección multiplexadas), optimizar el comportamiento con ciertas secuencias de direcciones (por ejemplo, cuando se usa un bus de direcciones multiplexado, ver si hay solicitudes consecutivas) La dirección permanece constante, y los procesa sin volver a cargar la parte constante), implementa el almacenamiento en memoria caché, etc. Los circuitos que realizan tales funciones no se llamarán, en sí mismos, MMU, pero vale la pena mencionarlos porque muchos Los dispositivos MMU incorporan dicha funcionalidad dentro de ellos .

El término "MMU" generalmente se relaciona con un dispositivo que le permite al procesador cambiar el comportamiento de los rangos de direccionamiento de memoria y - esto es clave - usa alguna forma de indicador de "modo supervisor" recibido desde el núcleo del procesador para permitir que una buena parte conocida del código cambie, justo antes de ejecutar un código que puede no ser bueno, en un modo de "usuario" que restringirá qué funciones estarán disponibles para el procesador hasta que se sepa que se está ejecutando Buen código de nuevo. Dicho diseño, si se implementa correctamente, hará posible que un sistema ejecute código potencialmente no confiable y cosechará los beneficios si el código es bueno, pero limitará el daño que puede hacer si es malo.

Tenga en cuenta que si bien una unidad de administració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 convierte a algo en una MMU. Lo que es importante, más bien, es que proporciona un medio para cambiar entre un modo en el que el procesador puede hacer "cualquier cosa" y uno donde no puede. La configurabilidad es altamente 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, mientras que algunos procesadores como el 80286 han admitido una variedad de modos de usuario / supervisor en sus núcleos, la práctica actual es tener un modo central de soporte de un usuario y un modo de supervisor. El núcleo debe admitir mucho, ya que sabe cuándo está buscando el código para las interrupciones (que deben ejecutarse como supervisor, pero comenzará en las direcciones que pueden ser consideradas seguras). Los niveles más finos de control de acceso a menudo se manejan no haciendo que el núcleo admita más modos, sino más bien diciendo que el código de modo supervisor está incondicionalmente habilitado para reconfigurar todas las configuraciones relacionadas con la dirección, y el código de modo de usuario puede hacer cualquier cosa que " la unidad de gestión de la memoria "le permitirá hacerlo.

    
respondido por el supercat

Lea otras preguntas en las etiquetas