¿Qué son los espacios de direcciones lógicos y físicos?

Asumo que la pregunta es:

“¿Qué es el espacio de direcciones físicas y el espacio de direcciones lógicas?”

Entonces, mi respuesta se basa en el supuesto anterior.

Digamos que su sistema tiene 2 GB de memoria física (RAM) dividida en palabras de tamaño 8 bytes (en una máquina de 64 bits). Entonces a cada palabra se le asigna una dirección. Esta dirección real se llama dirección física. En esta etapa, déjame decirte que somos ciegos a esas direcciones físicas .


Ahora, supongamos que hemos escrito un programa en C:

#include
#include
int main (int argc, char argv []) {
printf (“ubicación del código:% p \ n”, (void) main);
printf (“ubicación del montón:% p \ n”, (void) malloc (1));
int x = 3;
printf (“ubicación de la pila:% p \ n”, (vacío) & x);
volver x;
}

Cuando se ejecuta en una máquina Mac OS X de 64 bits, obtenemos el siguiente resultado:

ubicación del código: 0x1095afe50
ubicación del montón: 0x1096008c0
ubicación de la pila: 0x7fff691aea64

Los valores hexadecimales que se muestran son direcciones virtuales .

Cualquier dirección que pueda ver como programador de un programa de nivel de usuario
Es una dirección virtual. Es solo el sistema operativo, a través de sus técnicas difíciles de
virtualizando la memoria, que sabe en qué parte de la memoria física del
La máquina de estas instrucciones y los valores de datos se encuentran. Así que nunca olvides: si tú
imprimir una dirección en un programa, es virtual, una ilusión de cómo
las cosas se presentan en la memoria; solo el sistema operativo (y el hardware) conoce el
verdad real.

La siguiente pregunta que puede surgir es:

“¿Por qué las direcciones físicas se abstraen a los programas de usuario?”

Para hacer el cambio entre procesos más rápido. Si todo el proceso reside en la memoria física, los procesos de conmutación pueden llevar tiempo, ya que todo el proceso debe llevarse al disco durante la conmutación y se debe cargar un nuevo proceso, que puede volverse muy lento si los procesos son grandes. Por lo tanto, surgió la necesidad de memoria virtual que conduzca a la abstracción de las direcciones de memoria física.

Nota: Algunas personas creen que se requería memoria virtual para ejecutar procesos grandes que requieren una memoria mayor que la memoria física disponible. Esto no es verdad Se requería memoria virtual para cambios de contexto más rápidos, especialmente en sistemas operativos modernos, donde el cambio ocurre con mucha frecuencia. Podemos decir que es una ventaja adicional de la memoria virtual.

El siguiente pensamiento que puede venir a la mente es:

“Entonces, ¿cómo se manejan las cosas?”


La imagen de arriba es un ejemplo de espacio de direcciones lógicas para el proceso A. Este espacio pertenece solo al proceso A. Puede haber un espacio de direcciones lógicas similar para el proceso B invisible para A. Entonces, el proceso A piensa que posee toda la memoria física. En realidad, posee solo una pequeña parte de ella. Es deber del sistema operativo asignar las direcciones lógicas de diferentes procesos a las direcciones físicas reales y evitar chocar de un proceso a otro. Esto se llama Responsabilidad de administración de memoria del sistema operativo.


La imagen de arriba muestra tres procesos A, B, C que comparten el espacio de direcciones físicas sin chocar entre sí. Ahora, si volvemos a mirar el espacio de direcciones lógicas, vemos que ” cada proceso piensa que se ha cargado en la dirección de memoria 0 KB. Pero en realidad el proceso A, B y C se cargan a 320 KB, 192 KB y 128 KB respectivamente. Y esta asignación es administrado por el sistema operativo.

Supongo que te ayudaría.

Para su ejercicio, puede encontrar la respuesta a esta pregunta:

“Tenemos un sistema con 4 GB de memoria física. Fuera de esto, los procesos del sistema utilizan 2 GB y tiene dos aplicaciones para ejecutar, cada una de las cuales requiere 25 MB de memoria física. ¿Todavía necesitamos memoria virtual? ¿Cuál sería su respuesta si ambas aplicaciones requieren 1 KB de memoria? “

La CPU genera una dirección lógica que se asigna a una ubicación de memoria real o física. Esto lo implementa el sistema operativo, que mantiene las tablas de páginas y segmentos (para el mapeo).
La paginación y la segmentación se realizan de manera diferente en varios sistemas, pero los conceptos básicos siguen siendo los mismos.
Recomiendo el libro Conceptos del sistema operativo de Silberschatz et al. para aprender sobre paginación, segmentación o memoria virtual.