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

📅  最后修改于: 2021-07-05 06:44:25             🧑  作者: Mango

在生命周期中,进程以用户模式和内核模式执行。用户模式是正常模式,其中进程具有受限访问权限。内核模式是特权模式,在该模式下,进程可以不受限制地访问硬件,内存等系统资源。进程可以访问I / O硬件寄存器对其进行编程,可以执行OS内核代码并以内核模式访问内核数据。与流程管理,IO硬件管理和内存管理相关的所有内容都要求流程以内核模式执行。

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

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

用户模式到内核模式切换

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

  • 调用Glibc库函数。
  • Glibc库知道针对不同体系结构调用系统调用的正确方法。它根据体系结构的应用程序二进制接口(ABI)设置传递参数,以准备系统调用条目。
  • 现在,Glibc调用了SWI指令(ARM的软件中断指令),该指令通过更新CPSR寄存器的Mode位将处理器置于超级用户模式,并跳转到向量地址0x08。
  • 到现在为止,进程执行处于“用户”模式。在执行SWI指令之后,允许该进程执行内核代码。内存管理单元(MMU)现在将允许内核虚拟内存访问和执行此过程。
  • 从向量地址0x08 ,进程执行加载并跳转到SW中断处理程序例程,该例程对于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执行跳转到中断处理程序中,该中断处理程序将执行相应的系统调用例程。