问题 1:- 在引导过程中,Linux 会创建页表。但是,当一个新进程执行时,它也有自己的页表。这两张表有何不同?
问题 2:- 在 x86 架构上,Linux 使用定义明确的方案(包括页面目录、页表条目等)将线性地址转换为物理地址。假设我们在进程地址空间 A 中有一个线性地址 X,当使用页表进行转换时,它对应于物理地址 Y。还有一些其他进程 B 也有属于它自己的地址空间的有效线性地址 X。现在如果进程 B 想要访问 X,X 是否会再次对应相同的物理地址 Y?
问题 1:- 在引导过程中,Linux 会创建页表。但是,当一个新进程执行时,它也有自己的页表。这两张表有何不同?
问题 2:- 在 x86 架构上,Linux 使用定义明确的方案(包括页面目录、页表条目等)将线性地址转换为物理地址。假设我们在进程地址空间 A 中有一个线性地址 X,当使用页表进行转换时,它对应于物理地址 Y。还有一些其他进程 B 也有属于它自己的地址空间的有效线性地址 X。现在如果进程 B 想要访问 X,X 是否会再次对应相同的物理地址 Y?
问题 1:页表不是仅在启动时创建的。每次派生进程时都会创建一个新的页表。新表遵循内核在启动时设置的模板,但每个表都是可以更改每个进程的独立数据结构。它们通常不同,以允许每个进程拥有自己的工作内存,只有它可以访问。
问题 2:不,这种行为是首先使用分页的原因之一。
问题1:他们的权限不同。
问题2:没有。
如果你真的很好奇,而不仅仅是为你的家庭作业寻找简单的答案,你可能也想看看这个:http: //duartes.org/gustavo/blog/post/how-the-kernel-manages-your-记忆