linux - Linux 中的页表

标签 linux linux-kernel paging osdev

问题 1:- 在引导过程中,Linux 创建页表。但是,当一个新的进程被执行时,它也有自己的页表。这两个表有何不同?

问题 2:- 在 x86 arch 上,Linux 使用定义明确的方案(包括页目录、页表条目等)将线性地址转换为物理地址。 假设我们在进程地址空间 A 中有一个线性地址 X,当使用页表转换时对应于物理地址 Y。还有一些其他进程 B 也有属于它自己的地址空间的有效线性地址 X。现在如果进程B要访问X,X会不会再次对应同一个物理地址Y?

最佳答案

问题 1:页表并非仅在启动时创建。每次 fork 进程时都会创建一个新的页表。新表遵循内核在启动时设置的模板,但每个表都是一个独立的数据结构,可以根据进程进行更改。它们通常不同,以允许每个进程拥有自己的工作内存,只有它可以访问。

问题 2:不,这种行为是首先使用分页的原因之一。

关于linux - Linux 中的页表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4792654/

相关文章:

linux - 如何在 Linux 中的 makefile 中创建指向目录的链接?

c - 缓慢的系统调用和信号

Android 分页 3 库 - 用于从 Room 数据库分页数据,数据更改时流程变为空

c - 如何编译可以在内核中使用读/写提示的应用程序?

用户空间中的 copy_to/from_user 和 malloc

linux - 多级页表

linux - 为什么我没有看到预期的页面错误?

linux - 如何在 bash 中找到正在运行的命令的 PID?

c - 在Linux用户空间进程中,vsyscall页面的地址是什么?

linux - Linux 上奇怪的 AF_INET 和 SOCK_STREAM 套接字行为