在生命周期中,进程以用户模式和内核模式执行。用户模式是正常模式,其中进程具有受限访问权限。内核模式是特权模式,在该模式下,进程可以不受限制地访问硬件,内存等系统资源。进程可以访问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执行跳转到中断处理程序中,该中断处理程序将执行相应的系统调用例程。