操作系统
大约 1 分钟
1. 用户态和内核态
1.1 介绍
为了保证计算机系统的安全性、稳定性和性能设计了用户态和内核态:
- 用户态(User Mode): 权限较低,如果需要特殊权限的操作(如读写磁盘、网络通信)则需要发起系统调用请求,进入内核态
- 内核态(Kernel Mode): 权限很高,当操作系统接收到进程的系统调用请求时,就会从用户态切换到内核态,执行相应的系统调用,并将结果返回后再切换回用户态
进入内核态需要执行一些列上下文切换和权限检查,开销较高
1.2 切换方式
- 系统调用(Trap): 用户态主动要求切换
- 中断(Interrupt): 外围设备操作完成后(如磁盘读取完成),会发起中断信号,此时CPU会转而处理中断对应的程序,若之前执行的是用户态的程序,则发生了切换
- 异常(Exception): 用户态触发了事前不可知的异常时(如缺页),会切换至内核态执行异常处理
1.3 系统调用过程
- 用户态的程序发起系统调用,因为系统调用中涉及一些特权指令(只能由操作系统内核态执行的指令),用户态程序权限不足,因此会中断执行,也就是 Trap(Trap 是一种中断)。
- 发生中断后,当前 CPU 执行的程序会中断,跳转到中断处理程序。内核程序开始执行,也就是开始处理系统调用。
- 内核处理完成后,主动触发 Trap,这样会再次发生中断,切换回用户态工作