为什么内核被称为进程地址空间?

vja*_*n27 17 operating-system memory-management process

这可能是一个愚蠢的问题,但它只是突然出现在我的脑海里.所有关于进程地址空间和虚拟内存布局的文本都提到进程地址空间有为内核保留的空间.例如,在32位系统上,进程地址空间为4GB,其中1GB为Linux中的内核保留(在其他操作系统上可能不同).

我只是想知道为什么当进程无法直接处理内核时,内核被称为进程地址空间.为什么我们不说内核有一个单独的地址空间而不是一个进程?为什么我们不能为内核本身提供一个与进程的页表分开的不同的页表?

vij*_*iji 16

当进程进行系统调用时,我们不需要切换页表(从进程地址空间页表到内核地址空间页表)来为系统调用提供服务(应该只在内核模式下进行).据说这是内核在进程上下文中运行.

一些不在进程上下文中运行的内核事件将仅为内核加载页表.

得到它了 ?

  • 对此进行了一次更新,因为自从发布这个问题以来事情发生了一些变化,我只是偶然发现了它,所以其他人也可能如此。:) 这个答案中描述的情况不再完全是这样。发现了一个名为 MELTDOWN 的漏洞,该漏洞导致能够访问页表中的内核页面。这导致内核切换为每个进程使用两个页表,一个具有内核映射(用于系统调用),另一个没有映射(常规进程空间)。根据 CPU 的不同,TLB 现在可能会自动刷新,或者仅刷新与该进程相关的条目。 (2认同)