He tomado un curso sobre el diseño y el concepto del sistema operativo y ahora estoy tratando de estudiar el kernel de Linux a fondo. Tengo una pregunta de la que no me puedo deshacer. En los sistemas operativos modernos, cada proceso tiene espacio de direcciones virtuales (VAS) propio (por ejemplo, de 0 a 2^32-1 en sistemas de 32 bits). Esto proporciona muchas ventajas. Pero en la implementación estoy confundido en algunos puntos. Permítanme explicarlo dando un ejemplo:¿Cómo se asignan las mismas direcciones virtuales para diferentes procesos a diferentes direcciones físicas?
Digamos que tenemos dos procesos p1, p2; p1 y p2 tienen sus propios VAS. Una dirección 0x023f4a54
está asignada a diferentes direcciones físicas (PA), ¿cómo puede ser? ¿Cómo se hace esta traducción de esta manera? Quiero decir que conozco el mecanismo de traducción, pero no puedo entender que la misma dirección esté asignada a una dirección física diferente cuando se trata de espacio de direcciones de procesos diferentes.
0x023f4a54 in p1's VAS => PA 0x12321321
0x023f4a54 in p2's VAS => PA 0x23af2341 # (random addresses)
https://en.wikipedia.org/wiki/Virtual_memory –