“内核模式”和“用户模式”是硬件特征还是软件特征?

“内核模式”和“用户模式”是硬件特征还是软件特征?

我读到有两种模式称为“内核模式”和“用户模式”来处理进程的执行。 (了解 Linux 内核,第 3 版。)这是由 Linux 控制的硬件开关(内核/用户),还是由 Linux 内核提供的软件功能?

答案1

内核模式和用户模式是一种硬件功能,特别是处理器的功能。专为中高端系统(PC、功能手机、智能手机、除了最简单的网络设备之外的所有系统)设计的处理器都包含此功能。内核模式可以有不同的名称:管理模式、特权模式等。在 x86(PC 中的处理器类型)上,它称为“ring 0”,用户模式称为“ring 3”。

处理器在寄存器中有一个存储位,指示它是处于内核模式还是用户模式。 (在具有两种以上此类模式的处理器上,这可能不止一位。)某些操作只能在内核模式下执行,特别是通过修改控制寄存器的寄存器来更改虚拟内存配置。内存管理单元。而且,从用户态切换到内核态的方法很少,而且都需要跳转到内核代码控制的地址。这允许在内核模式下运行的代码控制在用户模式下运行的代码可以访问的内存。

类 Unix 操作系统(以及大多数其他具有进程隔离的操作系统)分为两部分:

  • 内核运行在内核模式。内核可以做一切事情。
  • 进程在用户模式下运行。进程不能访问硬件,也不能访问其他进程的内存(除非显式共享)。

因此,操作系统利用硬件功能(特权模式,MMU)来强制进程之间的隔离。

微内核基于 的操作系统具有更细粒度的体系结构,在内核模式下运行的代码更少。

当用户模式代码需要执行它无法直接执行的操作(例如访问文件、访问外围设备、与另一个进程通信……)时,它会创建一个系统调用:跳转到内核代码中的预定义位置。

当硬件外设需要请求 CPU 的关注时,它将 CPU 切换到内核模式并跳转到内核代码中的预定义位置。这被称为打断

进一步阅读

答案2

“Linux”本身只有内核。当我们谈论“Linux”作为一个操作系统时,它是内核和所有其他随其分发的软件Linux发行版

当您创建一个命令时,就会发生用户模式和内核模式之间的切换系统调用,这是记录在中的任何函数手册第 2 节。也就是说,如果您说出类似的内容man 2 open并得到结果,或者man creat看到(2)页面标题上有后缀,那么您正在查看系统调用,这意味着它是由内核处理的。

(这里的区别在于手册第 3 节,用于完全在用户空间实现的功能,例如系统的标准C库.)

当系统调用返回到调用它的用户代码时,它将该进程返回到用户模式。

Linux 内核使用硬件功能在其运行的大多数处理器上强制区分内核模式和用户模式。英特尔保护环方案是做到这一点的一种方法。但也有例外,例如µCLinux,它运行在没有 MMU 的小型处理器上,也可能缺少保护环。非常旧的 Unix 版本也可以在没有内核/用户保护的情况下运行。

当我们谈论“用户模式代码”时,我们谈论的是主要在用户空间中运行的代码,尽管几乎任何程序都将包含一些系统调用,因此会花费一些时间等待内核,而内核总是在内核模式下运行。

相关内容