一个进程的逻辑地址与另一个进程的逻辑地址有何不同?

一个进程的逻辑地址与另一个进程的逻辑地址有何不同?

我在读了解 Linux 内核。在那里,我试图理解如何逻辑地址被翻译成实际地址。根据我的理解,我相信逻辑地址被转换为线性地址(在分段单元的帮助下),然后线性地址被转换为物理地址(在分页单元的帮助下)。更深入地研究,我发现只有当我们从用户模式切换到内核模式时,分段寄存器才会发生变化,否则它保持不变。即对于在用户模式下执行的各种进程,分段寄存器的集合是CS,ds,SS等都是一样的。并且也在段描述符表中根据限制各个进程执行的字段也是相同的。
在这种情况下,我无法理解一个进程的逻辑地址如何不同来自另一个的逻辑地址?

答案1

x86 Linux 上同一组逻辑地址到不同物理地址的不同映射(每个进程)只能通过分页实现。即基本上不同的 CR3 寄存器值指向每个进程的不同 PGD。使用相同的 CS、DS 值(意味着每个进程没有什么独特之处,段描述符也一样,只是用户模式和内核模式之间的权限不同),您拥有相同的一组所有进程的线性地址,因此唯一的区别是通过分页。谢谢克里希纳·库马尔先生的回答。

相关内容