@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.