用户态和内核态

用户态和内核态是什么

用户态

CPU只能受限的访问内存,不能访问外围设备。占用CPU的能力低,能被抢占。Ring3

内核态

CPU可以访问内存的所有数据。Ring0

为什么要有内核态和用户态

需要限制不同应用程序的访问能力。

为什么要切换

用户程序一般都运行在用户态。但是从硬盘读取数据,键盘输入等时候,用户态不能完成,需要请求操作系统内核,让操作系统内核替自己去执行。所以用户程序不能控制操作系统内核具体执行的指令

如何切换到内核态

系统调用

用户程序主动发起的。

流程:

  1. 用户态程序把数据放到寄存器中,或者用参数创建一个堆栈,告诉操作系统需要服务。
  2. 用户态程序执行陷阱指令。
  3. CPU切换到内核态,进入内核地址空间,跳到指定指令。这些指令被保护,不能被用户态程序访问。
  4. 读取指令并执行。
  5. 返回用户态。

异常

用户程序被动接收的。比如缺页异常。

中断

用户程序被动接收的。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!