7.11 用户态和内核态的区别
less than 1 minute read
区别
- 内核态:cpu可以访问内存的所有数据,包括外围设备, 内核态运行内核代码
- 用户态:只能受限的访问内存,且不允许访问外围设备, 运行用户代码
用户态与内核态的切换
- 用户态程序切换到内核态, 但是不能控制在内核态中执行的指令, 这种机制叫系统调用, 在CPU中的实现称之为陷阱指令(Trap Instruction)
- 用户态程序将一些数据值放在寄存器中, 或者使用参数创建一个堆栈(stack frame), 以此表明需要操作系统提供的服务.
- 用户态程序执行陷阱指令
- CPU切换到内核态, 并跳到位于内存指定位置的指令, 这些指令是操作系统的一部分, 他们具有内存保护, 不可被用户态程序访问
- 这些指令称之为陷阱(trap)或者系统调用处理器(system call handler). 他们会读取程序放入内存的数据参数, 并执行程序请求的服务
- 系统调用完成后, 操作系统会重置CPU为用户态并返回系统调用的结果
特权级
- 特权级显然是非常有效的管理和控制程序执行的手段, 硬件上在执行每条指令时都会对指令所具有的特权级做相应的检查
用户态切换到内核态的3种方式
参考