什么是“内核地址空间”?

Tim*_*Tim 2 linux operating-system linux-kernel address-space

从 Understanding The Linux Kernel 中,这里有一些关于内核线程与用户进程(即常规进程)的讨论:

\n\n
\n

除了用户进程之外,Unix 系统还包括一些称为内核线程的特权进程,具有以下特征:

\n\n

\xe2\x80\xa2 它们在内核地址空间中以内核模式运行

\n\n

\xe2\x80\xa2 它们不与用户交互,因此不需要终端设备。

\n\n

\xe2\x80\xa2 它们通常在系统启动期间创建,并保持活动\n直到系统关闭。

\n\n

...

\n\n

在 Linux 中,内核线程与常规进程在以下方面有所不同:

\n\n

\xe2\x80\xa2 内核线程仅在内核模式下运行,而常规进程在内核模式和用户模式下交替运行。

\n\n

\xe2\x80\xa2 由于内核线程仅在内核模式下运行,因此它们仅使用大于 PAGE_OFFSET 的线性地址。另一方面,常规进程在用户模式或内核模式下使用全部 4 GB 线性地址。

\n
\n\n

我听说过用户进程(即常规进程)的虚拟地址空间,并且地址空间的一部分映射到内核代码和数据

\n\n

我的问题:

\n\n
    \n
  • 我想知道上面引用中的“内核地址空间”是什么意思?
  • \n
  • 它不是用户进程虚拟地址空间的一部分吗?
  • \n
  • 这是否意味着内核有自己的虚拟地址空间,就像用户进程有自己的虚拟地址空间一样?
  • \n
\n

Had*_*ais 5

本书使用术语“内核地址空间”来指代为内核分配的虚拟地址空间的分区。

最近,Linux 和其他操作系统已经实现了页表隔离(PTI),以缓解 Meltdown 安全漏洞。通过 PTI,内核确实拥有自己的地址空间(如维基百科的图像所示)。但由于这本书很旧,它是在 PTI 还没有发明的时候写的。

                               

所以它肯定是指虚拟地址空间的内核分区,其中也包含用户分区。