¿Por qué la dirección de memoria virtual es la misma en diferentes procesos?

1 minuto de lectura

¿Por que la direccion de memoria virtual es la misma
Juan

http://i.stack.imgur.com/RGMsz.png

Sé que la memoria virtual separa 2G (para kernel)/2G (para usuario) en Windows. Pero, ¿por qué la dirección de la variable no se apila continuamente?

Me gusta 0x22ff74,0x22ff78,0x22ff82,0x22ff86? ¿Significa que Windows usa un mecanismo de sandbox en el proceso del usuario?

Eso es exactamente lo que es la memoria virtual. El sistema operativo proporciona a cada programa su propio espacio de direcciones privado. En realidad, el sistema operativo está a cargo de mapear esas direcciones virtuales al espacio de direcciones físicas sin que la aplicación lo sepa.

Como notó, esto significa que dos aplicaciones pueden tener datos diferentes que residen en la misma dirección virtual en el programa.

Leer más sobre la memoria virtual aquí.

  • Muchas gracias. Pero más preguntas me confunden después de leer la wiki que proporciona. ¿Significa que cada proceso piensa que posee 2G por completo (o dijo que cada proceso tiene un VAS nuevo, vacío y limpio)? En caso afirmativo, ¿es esta la razón por la que cuatro programas comienzan en la misma dirección VAS? Otra pregunta es que DLL (terceros) copia sus “. datos” y “. código” en el VAS de cada proceso. perdon por hacer demasiadas preguntas <3

    – Juan

    9 de febrero de 2012 a las 12:38

  • @John: Es complicado. Cada proceso tiene su propio VAS limpio. En el inicio, cada DLL (junto con el proceso ejecutable) se asigna a la memoria del proceso. Las DLL compartidas normalmente comienzan en la misma dirección en todos los procesos (por lo que se comparten las páginas utilizadas para ellas). Cuando se toca (ejecuta, lee o escribe) una dirección virtual, la administración de memoria copia (páginas) el contenido de esa dirección virtual en la memoria.

    – Reincorporar a Monica Larry Osterman

    10 de febrero de 2012 a las 4:36

  • Seguimiento de la respuesta anterior: a veces las direcciones DLL chocan, en cuyo caso el cargador reubicará la DLL en una nueva dirección. Después de esto, las páginas de la DLL ya no se compartirán con otros procesos que utilicen la DLL.

    – Reincorporar a Monica Larry Osterman

    10 de febrero de 2012 a las 4:37

  • Y un seguimiento más: es probable que este comportamiento no se vea en Windows Vista y Windows 7; eso se debe a que tienen una función llamada ASLR que “aleatoriamente” la dirección base de todas las DLL. Por lo tanto, la dirección en la que se cargan las DLL cambiará de un arranque a otro.

    – Reincorporar a Monica Larry Osterman

    10 de febrero de 2012 a las 4:38

  • ¡Ahora entiendo mucho sobre Visual Memory Space! ¡Muchas gracias chicos! 😀

    – Juan

    10 de febrero de 2012 a las 5:59


1646959926 439 ¿Por que la direccion de memoria virtual es la misma
zr.

¿Estás confundiendo direcciones físicas y direcciones virtuales? Está bien que dos procesos accedan a la misma dirección virtual, porque cada proceso ve su propio espacio de memoria virtual. Por otro lado, todos los procesos comparten el mismo espacio de memoria física en la máquina, por lo que cada proceso tendrá asignada la misma dirección virtual a una dirección física diferente (suponiendo que no haya memoria compartida).

Déjame explicarlo de otra manera. El proceso X se ejecuta en la máquina A y el mismo programa se ejecuta como el proceso Y en la máquina B. ¿Importa si alguna variable global de su programa toma la misma dirección de memoria en ambas máquinas? ¡Ellos son diferentes! De la misma manera, si esa variable global se almacena en la ubicación XYZ para una instancia de proceso, otra instancia de proceso puede tener la misma dirección virtual (XYZ) para esa variable global.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad