Memory management 为什么说内核在进程地址空间中?

Memory management 为什么说内核在进程地址空间中?,memory-management,process,operating-system,Memory Management,Process,Operating System,这可能是个愚蠢的问题,但它突然出现在我的脑海里。所有关于进程地址空间和虚拟内存布局的文本都提到进程地址空间具有 为内核保留的空间。例如,在32位系统上,进程地址空间为4GB,其中1GB是为Linux内核保留的(在其他操作系统上可能不同) 我只是想知道,当一个进程不能直接寻址内核时,为什么说内核在进程地址空间中。为什么我们不说内核比进程有一个单独的地址空间,为什么内核本身不能有一个不同的页表,它与进程的页表分开?当进程进行系统调用时,我们不需要切换页表(从进程地址空间页表到内核地址空间页表)用于服

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


我只是想知道,当一个进程不能直接寻址内核时,为什么说内核在进程地址空间中。为什么我们不说内核比进程有一个单独的地址空间,为什么内核本身不能有一个不同的页表,它与进程的页表分开?

当进程进行系统调用时,我们不需要切换页表(从进程地址空间页表到内核地址空间页表)用于服务系统调用(仅应在内核模式下执行)。这被称为内核在进程上下文中运行

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


明白了吗?

你能确定一个或多个特定的URL来描述进程地址空间是如何为内核保留空间的吗?它肯定不是通用的;我相当肯定有32位系统(不一定是基于Linux的)在一个进程中使用超过3 GiB的共享内存,这不会为内核留下1 GiB。我只是举了一个例子,为内核保留了一些空间。具体细节对这个问题来说并不重要。好吧。但是切换页面会对性能造成多大的影响。同样,根据OSX,这一点也非常重要。“Mac OS X不会将内核映射到每个用户地址空间,因此每个用户/内核转换(在任何方向)都需要一个地址空间开关”,而且对我来说它似乎并不特别慢。TLB(转换查找缓冲区)会为每个页表开关重置,这是一个很大的浪费时间。