8

Leí que, "Cuando un programa ejecuta una instrucción como: MOV REG,1000, lo hace para copiar el contenido de la dirección de memoria 1000 a REG. La dirección se puede generar usando indexación, registros base, registros de segmento y otras formas.Comprensión de dirección virtual y espacio de dirección virtual

Estas direcciones generadas por el programa se llaman dirección virtual y forman el espacio de direcciones virtuales. "

¿Alguien me puede explicar por favor, qué lo hace (Estas direcciones generadas por el programa se llaman dirección virtual) mean?

Respuesta

27

Los programas y los datos se almacenan como números en las celdas de la memoria. Cada celda de memoria tiene un número único, llamado , dirección. El rango de números que representan direcciones válidas se llama espacio de direcciones.

Cuando se ejecutan programas, la CPU lee datos de la memoria y vuelve a escribir los resultados en la memoria. La CPU comunica la ubicación deseada a la memoria especificando la dirección de la celda de memoria seleccionada por una operación de lectura o escritura.

Hay varias maneras en que la CPU puede encontrar una dirección (recuerde, la dirección es solo un número). El número que representa la dirección podría estar en un registro, podría almacenarse en otra ubicación de la memoria, podría calcularse sumando o restando un desplazamiento a un registro, y así sucesivamente. En todos los casos, su programa compilado instruye a la CPU sobre cómo generar (o generar) la dirección que necesita para leer o escribir.

Las arquitecturas modernas permiten que múltiples programas se ejecuten como si fueran propietarios de todo el espacio de direcciones lógicas. En otras palabras, varios programas podrían escribir en la ubicación de la memoria en la misma dirección sin pasar por encima de los resultados de los demás. Esto se hace virtualizando el espacio de direcciones: digamos que los programas A y B generan una ubicación de escritura en memoria en 0x1000. La CPU, con la ayuda del sistema operativo, podría realizar ajustes adicionales a la dirección y map a dirección física 0x60001000 para el programa A, y a 0x5F001000 para el programa B. Ambos programas creen que escribieron en la ubicación en 0x1000 , porque operan en un espacio de direcciones virtual. Su modelo de memoria es un bloque contiguo que comienza en 0 y continúa en 0x000100000000 (suponiendo que su sistema tenga 4GiB de memoria disponible para los procesos). Pero este modelo solo funciona porque la CPU adicionalmente traduce sus direcciones lógicas a direcciones físicas, que se asignan y quitan según sea necesario en el proceso de ejecución del programa.

Debido a que el mismo número que representa una dirección significa cosas diferentes para un programa y a una CPU, el espacio de direcciones del programa se llama virtual, y el espacio de direcciones de la CPU se llama física.

+0

En su ejemplo 0x1000 es una dirección generada por programa? –

+0

@ program-o-steve Sí, es una dirección generada por el programa.Tenga en cuenta que no importa * cómo * el programa generó esa dirección: podría ser una dirección de una variable estática, un elemento 0 de una matriz en la dirección 0x1000, un elemento 32 de una matriz en la dirección 0x0FE0, etc. . – dasblinkenlight

+0

pero la declaración en mi pregunta dice que la dirección generada por el programa es una dirección virtual. 0x1000 no parece ser una dirección virtual –

1

Cuando un programa accede a la memoria, no sabe ni le importa dónde está almacenada la memoria física que respalda la dirección. Sabe que depende del sistema operativo y del hardware trabajar juntos para ubicar la dirección física correcta y así proporcionar acceso a los datos que desea. Por lo tanto, llamamos a la dirección que usa un programa para acceder a la memoria una dirección virtual. Una dirección virtual consta de dos partes; la página y una compensación en esa página.

Cuestiones relacionadas