用户态和内核态
用户态和内核态是什么
用户态
CPU只能受限的访问内存,不能访问外围设备。占用CPU的能力低,能被抢占。Ring3
内核态
CPU可以访问内存的所有数据。Ring0
为什么要有内核态和用户态
需要限制不同应用程序的访问能力。
为什么要切换
用户程序一般都运行在用户态。但是从硬盘读取数据,键盘输入等时候,用户态不能完成,需要请求操作系统内核,让操作系统内核替自己去执行。所以用户程序不能控制操作系统内核具体执行的指令。
如何切换到内核态
系统调用
用户程序主动发起的。
流程:
- 用户态程序把数据放到寄存器中,或者用参数创建一个堆栈,告诉操作系统需要服务。
- 用户态程序执行陷阱指令。
- CPU切换到内核态,进入内核地址空间,跳到指定指令。这些指令被保护,不能被用户态程序访问。
- 读取指令并执行。
- 返回用户态。
异常
用户程序被动接收的。比如缺页异常。
中断
用户程序被动接收的。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!