diferencia entre direcciones lógicas y virtuales

1

Hoy escuché que a:

  • El controlador DMA está asignando / convirtiendo direcciones lógicas (de I / O-Mapping) a direcciones físicas
  • El controlador MMU está asignando / convirtiendo direcciones virtuales en direcciones físicas

Así que ahora estoy realmente confundido! ¿Cuál es la diferencia entre direcciones lógicas y virtuales? ¿Por qué necesitamos ese nuevo tipo de dirección (dirección lógica)?

    
pregunta Jorgos

2 respuestas

4

Dirección lógica: la dirección que utiliza el conjunto de instrucciones de la CPU. Tenga en cuenta que puede haber muchas más direcciones de este tipo que RAM (u otra memoria o IO) en el sistema.

Dirección física: la dirección que se envía a la RAM (o ROM, o IO) para una operación de lectura o escritura.

Para un sistema simple, dirección física = dirección lógica. Los sistemas más grandes generalmente son sistemas de memoria virtual paginados por demanda, donde la MMU traduce una dirección lógica a una dirección física, o alerta al sistema operativo para que actúe (para asignar una página, leer una página del disco o denegar el acceso a una página - & gt ; trampa o falla).

"DMA-controller is mapping/converting logical addresses (from I/O-Mapping) to physical addresses"

No entiendo esa oración, tal vez me esté faltando algo de contexto. En los casos que conozco, el DMA trabaja en direcciones físicas. (Un DMA que trabaja en direcciones lógicas es posible, pero menos eficiente porque cada transferencia de DMA involucraría a la MMU. Pero sería más fácil de usar).

    
respondido por el Wouter van Ooijen
2

@Wouter ya dio una buena explicación. Voy a destacar un par de cosas:

las direcciones lógicas son las que ve y utiliza el programador de ensamblajes, mientras que las direcciones físicas son las que corresponden directamente a los niveles lógicos del bus de direcciones de hardware.

Esas son las dos categorías principales (lógica frente a física), que pueden ser las mismas en sistemas simples, o pueden ser diferentes. El sistema que convierte de direcciones lógicas a físicas es la MMU (Unidad de administración de memoria) y el esquema de conversión varía según la arquitectura del sistema.

Una (familia de) esquemas de conversión son aquellos que emplean memoria virtual , y por lo tanto, la dirección lógica en dicho sistema también se llama dirección virtual . Dicho de otra manera, una dirección virtual es una dirección lógica en un sistema con memoria virtual. La memoria virtual se llama de esta manera porque una dirección lógica (es decir, virtual) no se asigna necesariamente a una dirección de memoria física real. El contenido de la memoria direccionado por un VA podría residir en el disco y, por lo tanto, deberá llevarse a la memoria principal antes de poder utilizarlo, mientras que en un sistema sin memoria virtual, una dirección lógica siempre se asigna a una dirección física, es decir, a algunos " "memoria real" (por ejemplo, RAM, ROM o algún registro en un dispositivo si se implementa E / S asignada en memoria).

Otra perspectiva, de nivel superior, es considerar un acceso a un VA solo un acceso provisional . Si el contenido de la memoria a la que se accede ya está en la memoria física, se otorga el acceso. De lo contrario, se genera una interrupción (falta de página de memoria) y se llama a una rutina de interrupción que cargará la página de memoria necesaria en la memoria física desde su ubicación real (normalmente el archivo de página en el disco). Esa rutina también es responsable de liberar algo de memoria física si no queda espacio para cargar la página solicitada.

    
respondido por el Lorenzo Donati

Lea otras preguntas en las etiquetas