operating system - sistemas - ¿Cuándo se pueden asignar 2 direcciones virtuales a la misma dirección física?
segmentacion simple (4)
Creo que las secciones ejecutables de los programas pueden compartirse entre procesos, por lo que se asignan dos veces.
Por ejemplo: si carga dos instancias de vim
, habrá dos procesos. Ambos procesos probablemente se correlacionarán con el mismo código ejecutable en la memoria física.
Una pregunta de sistema operativo / arquitectura de computadora aquí. Estaba leyendo acerca de los cachés, acerca de cómo virtualmente indexar el caché es una opción para reducir el tiempo de traducción de la dirección. Me encontré con lo siguiente:
"Virtual cache difficulties include:
Aliasing
Two different virtual addresses may have the same physical address."
No puedo pensar en un escenario cuando esto puede ocurrir. Ha pasado un tiempo desde mis días de O / S y estoy dibujando un espacio en blanco.
¿Podría alguien dar un ejemplo? Gracias
Dos procesos pueden tener un mapeo compartido. Por ejemplo, en Unix, el código ejecutable generalmente se mapea en una región compartida entre todos los procesos que ejecutan el mismo programa. (De hecho, un único proceso puede tener varias asignaciones de la misma memoria subyacente, por ejemplo, cuando mmap
es el mismo archivo dos veces).
Además, a cada proceso se le asignan 4 GB de espacio virtual (en el sistema de 32 bits), de los cuales 1 GB (depende de Os a Os) se asigna para el sistema operativo. Dado que el sistema operativo es común para todos los procesos, las direcciones virtuales de 1 GB más bajas son comunes para todo el proceso, que se asignan a las mismas páginas físicas del sistema operativo.
shmat () es un ejemplo típico de la misma dirección física que se asigna como dos direcciones virtuales diferentes en dos procesos diferentes. Si haces pmap -x pid_A. Verá el mapa de mem virtual para el proceso A de manera similar para el Proceso B. La Phy mem real no está expuesta al programa de espacio de usuario.
Ahora SayProcess A y B comparten un segmento de memoria compartida y un puntero de memoria compartida sh_mem_ptr_A y Sh_mem_ptr_B. Si imprime estos punteros, su dirección (virtual) será diferente. Porque Sh_mem_ptr_A es una parte del mapa de memoria del Proceso A, del mismo modo sh_mem_ptr_B para el Proceso B.
Kernel mantiene el mapeo de Virtual-tophy addr. Por tabla de página y desplazamiento. Los bits más altos se asignan a la tabla de páginas y los mapas de compensación se compensan en la tabla de páginas. Entonces, si observa los bits de orden inferior de sh_mem_ptr_A y sh_mem_ptr_B, serán iguales (pero pueden no ser siempre verdaderos).