受限制直接执行

Friday, October 11, 2019

受限制直接执行

一个进程必须能够执行一些受限制的操作,但又不能让进程完全控制系统。

  • 我们引入一种新的处理器模式,用户模式。在用户模式中,不能执行受限制的操作,比如 I/O 访问。
  • 与之相对的就是内核模式,操作系统就以这种模式运行。在这种模式重就可以执行特权操作。

要执行系统调用,程序必须执行特殊的陷进(trap)指令,这时会提升到内核模式,指令执行完成后,操作系统调用一个特殊的从trap 返回的指令,同时降权,回到用户模式。通过寄存器和程序计数器来进行模式的切换。

进程之间切换

操作系统如何重新获得 CPU 的控制权,以便它可以在进程之间切换。

协作方式:等待系统调用

OS 通过等待系统调用,或者某种非法操作发生,从而重新获取CPU 控制权

非协作方式:操作系统进行控制

利用时钟中断重新获得控制权,时钟设备可以每隔几毫秒发生一次中断,产生中断时,当前运行的进程停止,操作系统中预先配置的中断处理程序会运行,操作系统重新取得控制权。

硬件在发生中断时要为正在运行的程序保存足够的状态,以便随后恢复。

保存和恢复上下文

操作系统拿到控制权后,必须决定是继续运行当前的进程,还是切换进程,这个由调度程序做出的。

  • 如果要切换,OS 会进行上下文切换,为当前正在执行的进程保存一些寄存器的值,并为即将执行的进程恢复一些寄存器的值。这样操作系统从陷阱返回指令时,会去执行另一个进程。
  • 为了实现上下文切换,操作系统会执行一些底层的汇编代码,来保存通用寄存器,程序计数器,正在运行的进程的内核指针,然后恢复寄存器,程序计数器,并切换内核栈,供即将运行的进程使用。

上下文切换

操作系统可以简单的处理,在中断处理期间禁止中断,这样可以确保在处理一个中断的时候,不会将其他中断交给 CPU。

操作系统还开发了许多复杂的加锁方案,以保护对内部数据结构的并发访问。使得多个活动可以同时在内核中进行,特别适用于多处理器。

OS

进程调度

进程