有关Linux的一些内容。

用户态和内核态

系统调用

统调用组成了用户态跟内核态交互的基本接口。

为什么要区分用户态与内核态

  1. 在 CPU 的所有指令中,有一些指令是非常危险的,如果错用将导致整个系统崩溃。
  2. CPU 将指令分为特权指令和非特权指令,对于那些危险的指令,只允许操作系统及其相关模块使用,普通的应用程序只能使用那些不会造成灾难的指令。
  3. Intel 的 CPU 将特权级别分为4个级别: RING0(特权级最高)、 RING1 、 RING2 、 RING3 。

处理器总处于以下状态中的一种

  1. 内核态,运行于进程上下文,内核代表进程运行于内核空间。
  2. 内核态,运行于中断上下文,内核代表硬件运行于内核空间。
  3. 用户态,运行于用户空间。

从用户态切换到内核态可以通过三种方式

  1. 系统调用
  2. 异常
  3. 外设中断