操作系统运行机制

说明

  • 如果只想了解操作系统应用:
    • 熟悉内核态和用户态
  • 如果想深入学习操作系统:
    • 熟悉内核态和用户态,内核程序和应用程序,特权指令和非特权指令

程序是如何运行的

alt text

内核程序和应用程序

我们普通程序员写的程序就是应用程序

微软、苹果有一帮人负责实现操作系统,他们写的是内核程序。由很多内核程序组成了操作系统内核,或简称内核(Kernel)。内核是操作系统最重要最核心的部分,也是最接近硬件的部分。甚至可以说,一个操作系统只要有内核就够了(eg:Docker—>仅需Linux内核)

注:操作系统的功能未必都在内核中,如图形化用户界面GUI。

特权指令和非特权指令

  • 应用程序只能执行非特权指令,比如:加法指令,减法指令。
  • 内核程序可以执行特权指令,比如:内存清零指令。这些指令影响重大,只允许管理者——操作系统内核使用。

内核态和用户态

CPU有两种状态,内核态用户态

  • 处于内核态时,说明此时正在运行的是内核程序,此时可以执行特权指令
  • 处于用户态时,说明此时正在运行的是应用程序,此时只能执行非特权指令

CPU中有一个寄存器叫程序状态字寄存器(PSW),其中有个二进制位,1表示内核态,0表示用户态。CPU通过这个寄存器实现的状态切换。

  • 内核态->用户态:执行一条特权指令——修改PSW的标志位为用户态,这个动作意味着操作系统主动让出CPU使用权。
  • 用户态->内核态:由中断引发,硬件自动完成变态过程,触发中断信号意味着操作系统将强行夺回CPU使用权。

举例

  1. 刚开机时,CPU为内核态,操作系统内核程序现上CPU运行。
  2. 开机完成后,用户可以启动某个程序。
  3. 操作系统内核程序在合适的时候主动让出CPU,让该应用程序上CPU运行。
  4. 应用程序运行在用户态
  5. 此时,一位黑客在应用程序中植入了一条特权指令,企图破坏系统。
  6. CPU发现接下来要执行的指令是特权指令,但是自己处于用户态
  7. 这个非法事件会引发一个中断信号。CPU检测到信号后,会立即变为内核态,并立即停止运行当前的应用程序,转而运行中断服务程序。
  8. 中断使操作系统再次夺回CPU控制权。
  9. 操作系统会对引发中断的事件进行处理,处理完了再把CPU使用权交给别的程序。