Pregunta Mapeo de direcciones virtuales y físicas en Windows de 32 bits


Corrígeme, estoy equivocado.

Q1) Tengo entendido que en el modo de 32 bits obtenemos un espacio de direcciones virtuales de 4GB. ¿Esto es porque Windows de 32 bits solo admite 4 GB de RAM física?

Q2) Cada proceso obtiene su propio espacio de direcciones privado de 4 GB. Modo de usuario de 2GB y kernel de 2GB. ¿El proceso asigna todo su código al modo de usuario y los componentes del sistema operativo necesarios para que el proceso se comunique con el procesador para ejecutar el código se cargan en modo kernel?

Q3) Si un proceso obtiene su propio espacio privado de 4GB. Si cargo 3 procesos, un total de 12 GB de espacio de direcciones. ¿Tendré problemas de rendimiento ya que solo tengo 4 GB de RAM?

Pero como dirección virtual está diseñada para cumplir con la necesidad de proceso en caso de menos RAM. ASÍ mi verdadera pregunta, cuando se carga un proceso (aplicación de proceso único), se asigna todo el código a la dirección virtual de 4 GB, independientemente de si la aplicación está ejecutando actualmente solo una parte determinada del código completo.

Lo que entiendo es que cuando se inicia un proceso, todo su código se carga en el espacio de direcciones virtuales del modo de usuario de 2 GB y el resto de 2 GB carga los archivos del kernel del sistema operativo. Ahora, al utilizar las tablas de páginas, la dirección virtual se asigna a la dirección física en la RAM y en el disco. ¿Se correlacionarán todas las direcciones virtuales de 4 GB con 4 GB de RAM física y el resto con el archivo de página? Si me niego a usar el archivo de página, ¿significa eso que solo se puede ejecutar 1 proceso con una dirección virtual de 4 GB en un sistema operativo de 32 GB y 4 GB?

=============================================== ======================== Gracias por las respuestas anteriores.

Todavía estoy un poco confundido acerca de cómo se divide el espacio de direcciones del usuario y el núcleo.

1) ¿El espacio de direcciones del Kernel de 2 GB es compartido por todos los procesos porque es de todo el sistema y se carga en el momento del arranque? o ¿Todos los procesos obtienen un espacio de direcciones de kernel de 2 GB? 2) Leí una aplicación mal escrita que puede consumir todo su espacio de direcciones. ¿Eso significa que no hay espacio para que otras aplicaciones se ejecuten ahora en una máquina de 4 GB? 3) Si un espacio de direcciones Kernel es compartido por todos los procesos, alguna vez se queda sin espacio de direcciones o nunca lo hace porque (creo) la dirección del kernel permanece fija en base a la arquitectura del sistema operativo y compartida por todos los procesos. 4) Al usar el modificador USERVA, la dirección del Kernel se reduce a 1 GB solo para la aplicación con Large Address aware. ¿Por qué no funciona para todo el proceso si el espacio de direcciones del kernel es de 2 GB (que creo) se comparte entre todos los procesos? 5) ¿Cómo diferenciamos exactamente la memoria virtual en b / n y la dirección virtual sace? Si una aplicación necesita 5GB de memoria como devloper, no se ejecutará en una máquina de 32 bits con una dirección de 2GB (¿Está bien decir que la memoria virtual del proceso = espacio de direcciones virtuales del proceso?)


0


origen


la mayoría de esto fue respondida en su pregunta anterior Administración de memoria en Windows de 32 bits. Las direcciones virtuales de 3 procesos no suman 12 GB, ya que no están mapeadas linealmente, de lo contrario, se desperdiciarían toneladas de memoria cuando un proceso utilice solo 10 MB de RAM, pero consuma todo el fragmento de direcciones de 4 GB. Si abre el administrador de tareas, verá que hay miles de procesos, ¿eso significa que la computadora necesita TB de RAM? - phuclv


Respuestas:


Corrígeme, estoy equivocado.

Con alegría. ¿Estás listo?


Q1) Tengo entendido que en el modo de 32 bits obtenemos un espacio de direcciones virtuales de 4GB.

Correcto.

¿Esto es porque Windows de 32 bits solo admite 4 GB de RAM física?

No, el tamaño de la memoria virtual es independiente del tamaño de la memoria física o instalada.
Estas cantidades son iguales solo porque ambas usan valores (para direcciones) de 32 bits de ancho. Un procesador podría diseñarse para tener un tamaño de dirección virtual que es diferente de su tamaño de dirección física. IIRC que se hizo cuando las dimensiones y los costos del hardware eran mucho mayores que hoy.


Q2) Cada proceso obtiene su propio espacio de direcciones privado de 4 GB.

Sí, un espacio de direcciones virtual.

Modo de usuario de 2GB y kernel de 2GB.

No, "modo de usuario" se refiere al estado operacional de la CPU, es decir, modos de CPU. La memoria no tiene un "modo de usuario" (ni "modo kernel").
La memoria virtual se divide en espacio de usuario y espacio de kernel.

¿El proceso asigna su código completo al modo de usuario y los componentes del sistema operativo necesarios para que el proceso se comunique con el procesador para ejecutar el código y se carguen en modo kernel?

Esta pregunta solo tiene sentido si "modo" es reemplazado por "espacio".

El kernel se carga en la memoria física durante el arranque.
La ejecución del kernel es lo que controla el sistema, p. inicio y gestión de procesos.
El kernel está mapeado en el espacio de direcciones virtuales de cada proceso. Es por eso que una parte de la memoria virtual del proceso es "espacio del núcleo".

El código de programa y las bibliotecas (compartidas) se asignan a la memoria virtual en el espacio de usuario.

El sistema operativo no "comunicarse con el procesador" (ni tampoco ningún proceso).
El procesador / CPU ejecuta las instrucciones. No hay "comunicación" con la CPU.
Un proceso es un trabajo o tarea conceptualizado que tiene asignados recursos como la memoria (tanto virtual como física) y el tiempo de CPU programado.
La única interacción entre un proceso y el procesador / CPU es la ejecución de instrucciones para ese proceso. La interacción entre el kernel y el procesador / CPU es la ejecución de instrucciones para ese kernel y el enrutamiento de excepciones e interrupciones.


Q3) Si un proceso obtiene su propio espacio privado de 4GB.

No hay "Si". Cada proceso obtiene 4 GB de memoria virtual.

Si cargo 3 procesos, un total de 12 GB de espacio de direcciones. ¿Tendré problemas de rendimiento ya que solo tengo 4 GB de RAM?

No es probable en absoluto, ya que los procesos típicos rara vez usan toda su memoria virtual. E incluso si lo hicieran, hay una tienda de respaldo (por ejemplo, el archivo de paginación o espacio de intercambio) para manejar situaciones cuando hay menos memoria física que espacio de direcciones virtuales (que es la razón original para usar la memoria virtual).


Pero como dirección virtual está diseñada para cumplir con la necesidad de proceso en caso de menos RAM.

Probablemente se refiera a la memoria virtual, no "dirección virtual".

ASÍ mi verdadera pregunta, cuando se carga un proceso (aplicación de proceso único), se asigna todo el código a la dirección virtual de 4 GB, independientemente de si la aplicación está ejecutando actualmente solo una parte determinada del código completo.

(¿Por qué no eres tu "pregunta real" dado un número?)
No tengo una respuesta definitiva, pero esperaría que cargara todo el programa, para realizar cualquier reubicación, así como para resolver cualquier enlace externo (por ejemplo, a bibliotecas).
Lo que está cargado tiene que mapearse, es decir, memoria física asignada.

Lo que entiendo es que cuando se inicia un proceso, todo su código se carga en el espacio de direcciones virtuales del modo de usuario de 2 GB y el resto de 2 GB carga los archivos del kernel del sistema operativo.

Nuevamente malgastaste "modo de usuario".
La carga del código del núcleo se realiza en el momento del inicio, no cuando se inicia un proceso.

Ahora, al utilizar las tablas de páginas, la dirección virtual se asigna a la dirección física en la RAM y en el disco. ¿Se correlacionarán todas las direcciones virtuales de 4 GB con 4 GB de RAM física y el resto con el archivo de página?

No, las tablas de página solo asignan la memoria virtual a la física (en unidades de páginas). No hay mapeo para "disco". Eso suena como un concepto erróneo común de cómo funciona el archivo de página y la memoria virtual.
El archivo de la página es una tienda de respaldo. Mantiene temporalmente los contenidos de las páginas de memoria virtual que no pueden residir en la memoria (es decir, la memoria física asignada).

Si me niego a usar el archivo de página, ¿significa eso que solo se puede ejecutar 1 proceso con una dirección virtual de 4 GB en un sistema operativo de 32 GB y 4 GB?

No, porque normalmente un proceso no usa todo el espacio de direcciones virtuales, por lo que no requiere 4 GB de memoria física.
He visto más de dos docenas de procesos ejecutándose en un sistema Linux de 32 bits con solo 512 MB de RAM de instalación y ningún archivo de intercambio.


0





P1: No, es porque un registro de 32 bits solo puede contener 4 GB de direcciones únicas.

Q2: incorrecta, no hay división de la memoria del usuario en usuario y kernel. El kernel no está en el espacio de direcciones del proceso.

Q3: Sí, Windows cambiará según sea necesario las páginas de memoria de referencia más antigua.

Pregunta real: Sí, un proceso no puede comenzar sin la asignación para intercambiar espacio de toda su memoria, por lo que se puede cambiar en cualquier momento, total o parcialmente.

Por lo demás, te sugiero que leas algo primero en Wikipedia:


0