2

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

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

• 它们在内核地址空间中以内核模式运行。

• 它们不与用户交互,因此不需要终端设备。

• 它们通常在系统启动期间创建,并且在系统关闭之前一直保持活动状态。

...

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

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

• 因为内核线程只在内核模式下运行,所以它们只使用大于 PAGE_OFFSET 的线性地址。另一方面,常规进程在用户模式或内核模式下使用所有 4 GB 的线性地址。

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

我的问题:

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

1 回答 1

4

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

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

                               

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

于 2018-09-17T23:34:20.550 回答