我上了一门关于操作系统设计和概念的课程,现在我正在尝试彻底研究 Linux 内核。我有一个我无法摆脱的问题。在现代操作系统中,每个进程都有自己的虚拟地址空间(VAS)(例如,32 位系统中的 0 到 2^32-1)。这提供了许多优点。但在实施中,我在某些方面感到困惑。让我通过一个例子来解释它:
假设我们有两个进程 p1, p2; p1 和 p2 有自己的 VAS。一个地址0x023f4a54
映射到不同的物理地址(PA),怎么可能呢?这种翻译是怎么做到的。我的意思是我知道翻译机制,但我无法理解当涉及不同进程的地址空间时,相同的地址被映射到不同的物理地址。
0x023f4a54 in p1's VAS => PA 0x12321321
0x023f4a54 in p2's VAS => PA 0x23af2341 # (random addresses)