三层调度

image.png

image.png

进程调度的时机

  1. 主动放弃处理机
    1. 正常终止
    2. 发生异常终止
    3. 主动请求阻塞,如等待 IO
  2. 被动放弃
    1. 时间片用完
    2. 有更紧急的事处理
    3. 有更高优先级的进程进入就绪队列

<aside> 💡

不能进行调度和切换的情况

  1. 在处理中断的过程中。中断处理过程复杂,与硬件密切相关,很难做到在中断处理过程中进行进程切换
  2. 进程在操作系统内核程序临界区中
  3. 在原子操作过程中(原语)。原子操作不可中断,要一气呵成(如之前讲过的修改 PCB 中进程状态标志,并把 PCB 放到相应队列) </aside>

<aside> 💡

临界资源:一个时间段内只允许一个进程使用的资源,各进程需要互斥地访问临界资源

临界区:访问临界资源的代码

内核程序临界区一般是用来访问某种内核数据结构的,比如进程的就绪队列(由各就绪进程的PCB组成)

</aside>

进程调度的方式

非抢占方式

非剥夺调度方式,又称非抢占方式。即,只允许进程主动放弃处理机。在运行过程中即便有更紧迫的任务到达,当前进程依然会继续使用处理机,直到该进程终止或主动要求进入阻塞态。

实现简单,系统开销小但是无法及时处理紧急任务,适合于早期的批处理系统

抢占式方式

剥夺调度方式,又称抢占方式。当一个进程正在处理机上执行时,如果有一个更重要或更紧迫的进程需要使用处理机,则立即暂停正在执行的进程,将处理机分配给更重要紧迫的那个进程。

可以优先处理更紧急的进程,也可实现让各进程按时间片轮流执行的功能(通过时钟中断)。适合于分时操作系统、实时操作系统

进程的切换与过程

<aside> 💡

狭义的进程调度指的是从就绪队列中选中一个要运行的进程。(这个进程可以是刚刚被暂停执行的进程,也可能是另一个进程,后一种情况就需要进程切换)

进程切换是指个进程让出处理机,由另一个进程占用处理机的过程。

广义的进程调度包含了选择一个进程和进程切换两个步骤。

</aside>

  1. 原来的数据的保存(程序计数器、程序状态字、各种数据寄存器)
  2. 新数据的恢复

调度器/调度程序