📜  用户模式和内核模式切换

📅  最后修改于: 2021-09-28 09:58:52             🧑  作者: Mango

在它的生命周期中,进程在用户模式和内核模式下执行。用户模式是正常模式,其中进程的访问权限有限。而内核模式是特权模式,其中进程可以不受限制地访问系统资源,如硬件、内存等。进程可以访问 I/O 硬件寄存器对其进行编程,可以在内核模式下执行操作系统内核代码和访问内核数据。与进程管理、IO 硬件管理和内存管理相关的任何事情都需要进程在内核模式下执行。

知道内核模式下的进程有权访问任何设备和内存很重要,同时内核模式下的任何崩溃都会导致整个系统崩溃。但是用户模式下的任何崩溃只会导致错误的进程停止。

内核提供了系统调用接口( SCI ),它是内核的入口点。系统调用是进程从用户模式进入内核模式的唯一途径。下图详细解释了用户模式到内核模式的转换。

用户模式到内核模式的切换

进入内核模式,一个应用进程。

  • 调用Glibc库函数。
  • Glibc 库知道为不同架构调用系统调用的正确方法。它根据体系结构的应用程序二进制接口 (ABI) 设置传递参数以准备系统调用条目。
  • 现在 Glibc 调用 SWI 指令(ARM 的软件中断指令),它通过更新 CPSR 寄存器的模式位使处理器进入超级模式并跳转到向量地址 0x08。
  • 到目前为止,流程执行处于用户模式。 SWI 指令执行后,允许进程执行内核代码。内存管理单元 (MMU) 现在将允许内核虚拟内存访问和执行,用于此进程。
  • 从向量地址0x08 开始,进程执行加载并跳转到软件中断处理程序,即 ARM 的vector_swi()
  • vector_swi() 中,从 SWI 指令中提取系统调用号 ( SCNO ) 并执行跳转到使用SCNO作为系统调用表sys_call_table索引的系统调用函数。
  • 系统调用执行后,在返回路径中,用户空间寄存器在用户模式开始执行之前被恢复。

为了支持内核模式和用户模式,处理器必须有不同特权模式的硬件支持。例如 ARM 处理器支持七种不同的模式。

Processor Mode CPSR Mode bits Remark
User   10000 No privilege or user mode
FIQ   10001 Fast Interrupt mode
IRQ   10010 Interrupt mode
Supervisor   10011 Kernel mode
Abort   10111 Mode for memory violation handling
Undefined   11011 Undefined instruction handling mode
System   11111 Same as Supervisor mode but with re-entrancy

结论 :
对于任何系统,特权模式和非特权模式对于访问保护都很重要。处理器必须具有用户/内核模式的硬件支持。系统调用接口 (SCI) 是从用户空间到内核空间的唯一途径。内核空间切换是通过软件中断来实现的,它改变处理器模式,将CPU执行跳转到中断处理程序,执行相应的系统调用例程。