为什么内核映射到与进程相同的地址空间

foo*_*oty 14 linux operating-system kernel memory-management

这是一个要详细阐述这个问题的问题:为什么内核被称为进程地址空间?

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

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

我可以获得有关linux(debian或ubuntu)特定操作系统的解释.

twa*_*erg 26

回答问题的另一部分 - 内核被部分地映射到每个进程地址空间以达到效率/性能的原因(还有其他的,我敢肯定).在大多数现代硬件上,更改安全级别(因此允许访问受其他方式保护的页面,如Alexey的答案中所述)以执行系统调用和其他内核提供的功能比更改安全级别更快以及整个虚拟内存映射,以及所有关联的TLB缓存刷新以及完整上下文切换中涉及的所有其他内容.由于系统调用可能是相当频繁的事件,因此在Linux和许多其他地方发展的设计是尽量减少利用内核服务的开销,


Ale*_*nze 13

进程"拥有"这里的整个虚拟地址空间,内核及其用户部分.

它无法窥视和戳戳内核代码和数据不是由于不同的地址空间,而是由于页表中设置的不同访问权限/权限.内核页面的设置方式使常规应用程序无法访问它们.

然而,习惯上将整个事物的两个部分称为内核空间和用户空间,这可能令人困惑.


xia*_*aoy 6

我们说内核在进程地址空间中的另一个重要原因是内核可以访问CURRENT进程的用户代码/数据,即虚拟地址空间0~3G.

抱歉我的英语不好.我不是母语为英语的人.