¿Cuál es el beneficio de almacenar una dirección virtual en un puntero en lugar de una dirección física?

He leído el siguiente enlace y dice que en la mayoría de los sistemas operativos, los punteros almacenan la dirección virtual en lugar de la dirección física, pero no puedo obtener el beneficio de almacenar la dirección virtual en un puntero.

cuando al final podemos modificar el contenido de una ubicación de memoria en particular directamente a través de un puntero, ¿cuál es el problema si se trata de una dirección virtual o física? También durante el tiempo en que se ejecuta el código, la mayoría del tiempo el segmento de datos también permanecerá en la memoria, por lo que estamos tratando con la ubicación de la memoria física, ¿por qué es útil la dirección virtual?

C punteros y la dirección física.

En realidad, los punteros normalmente contienen direcciones lógicas.

Hay varias razones para usar el direccionamiento lógico, incluyendo:

  1. Facilidad de gestión de la memoria. El sistema operativo nunca tiene que asignar marcos de página físicos contiguos a un proceso.

  2. Seguridad. Cada proceso tiene acceso a su propio espacio de direcciones lógicas y no puede meterse con otro espacio de direcciones de procesos.

  3. Memoria virtual. La traducción lógica de direcciones es un requisito previo para implementar la memoria virtual.

  4. Protección de la página. Ayuda a la seguridad al limitar el acceso a las páginas del sistema a modos de procesador más altos. Ayuda a la captura de errores (y virus) al limitar los tipos de acceso a las páginas (por ejemplo, no permite escribir o ejecutar páginas de datos).

Esta no es una lista completa.

Aparte de los problemas de seguridad (como se mencionó anteriormente), hay otra gran ventaja:

Los globos y las funciones (y su stack) siempre se pueden encontrar en direcciones fijas (para que el ensamblador las pueda codificar), independientemente de donde se cargue la instancia de su progtwig.

Si realmente desea que su código se ejecute desde cualquier dirección, debe hacerlo independiente de la posición (con gcc usaría el argumento -fPIC ). Esta pregunta podría ser una lectura de -fPIC el -fPIC y el direccionamiento virtual: opción GCC -fPIC

La misma dirección virtual puede apuntar a diferentes direcciones físicas en diferentes momentos.

Si su memoria física está llena, sus datos se intercambian de la memoria a su HDD. Cuando su progtwig desea acceder a estos datos nuevamente, actualmente no está almacenado en la memoria, los datos se intercambian de nuevo a la memoria, pero a menudo será una ubicación diferente como antes. La Tabla de páginas, que almacena la asignación de direcciones virtuales a físicas, se actualiza con la nueva dirección física. Por lo tanto, su dirección virtual permanece igual, mientras que la dirección física puede cambiar.