我读到有两种模式叫做“内核模式”和“用户模式”来处理进程的执行。(理解Linux内核,第3版)是由Linux控制的硬件交换机(内核/用户)还是由Linux内核提供的软件特性?
发布于 2015-04-23 01:21:58
内核模式和用户模式是一个硬件特性,特别是处理器的一个特性。为中高端系统设计的处理器(PC,功能电话,智能手机,除了最简单的网络设备,…)包括这个特性。内核模式可以采用不同的名称:监控程序模式、特权模式等。在x86 (PC机中的处理器类型)上,内核模式被称为“ring 0”,用户模式称为“ring 3”。
处理器在寄存器中有一些存储,指示它是处于内核模式还是用户模式。(在具有两种以上模式的处理器上,这可以是一个以上的位。)某些操作只能在内核模式下执行,特别是通过修改控制MMU的寄存器来更改虚拟内存配置。此外,从用户模式切换到内核模式的方法很少,它们都需要跳转到由内核代码控制的地址。这允许以内核模式运行的代码控制在用户模式下运行的代码可以访问的内存。
类似Unix的操作系统(以及大多数具有进程隔离的其他操作系统)分为两部分:
因此,操作系统利用硬件特性(特权模式,MMU)来执行进程之间的隔离。
微核-based操作系统具有更细粒度的体系结构,在内核模式下运行的代码较少。
当用户模式代码需要执行它无法直接执行的操作时(例如访问文件、访问外围设备、与另一个进程…通信),它产生了一个系统呼叫:在内核代码中跳入预定义的位置。
当硬件外设需要请求CPU的注意时,它会将CPU切换到内核模式,并跳转到内核代码中的预定义位置。这被称为中断。
发布于 2015-04-22 15:41:47
"Linux“本身只是内核。当我们谈论"Linux“作为一个操作系统时,它是内核和在Linux发行版中与它一起发布的所有其他软件的混合。
用户和内核模式之间的切换发生在生成系统呼叫时,这是手册第2节中记录的任何函数。也就是说,如果您说了一些类似man 2 open并得到一个结果,或者man creat,并且看到页面标题上有一个(2)后缀,那么您将看到一个系统调用,这意味着它是由内核处理的。
(这里的区别是手册第3节,它适用于完全在用户空间中实现的函数,比如系统的标准C库。)
当系统调用返回到调用它的用户代码时,它会将该进程返回到用户模式。
Linux内核使用硬件特性在运行它的大多数处理器上强制执行内核和用户模式之间的区别。英特尔的保护环方案就是这样做的一种方式。也有例外,例如CLinux,它运行在没有MMU的小型处理器上,这也可能缺少保护环。非常老的Unix版本也没有内核/用户保护就运行了。
当我们谈论“用户模式代码”时,我们谈论的是大部分在用户空间中运行的代码,尽管几乎所有的程序都会包含一些系统调用,所以会花一些时间在内核上等待,内核总是以内核模式运行。
https://unix.stackexchange.com/questions/197918
复制相似问题