今天我们来介绍处理机调度
处理机调度呢
是计算机操作系统当中
用来管理处理机执行能力的
这一部分资源的功能
那在这里头呢 我们首先会涉及到
处理机调度它到底都要干些什么
这是它的基本概念
然后会说处理机调度的调度算法
那在这里头调度算法呢
我们有单处理机的
那这时候呢 它只有一个CPU
有实时调度算法
这些调度算法是有更强的时间要求
有多处理机调度算法
那这时候 我们调度的时候
更多的考虑是有多个CPU
它们之间如何来协调的问题
那今天呢我们首先来介绍
处理机调度的基本概念
那在在前面呢我们讲过了进程切换
进程切换呢实际上就是
CPU资源的当前占用者的一种切换
它通过这种切换
实现CPU资源的时分复用
那具体说起来呢
我们在前面也讲过
进程管理里头 进程切换是
保存当前进程的执行上下文
放到你的进程控制块里头
然后恢复下一个进程的执行上下文
那这时候 我们在前面讲
这个进程管理里头说到的进程切换
那这个就和我们这里说到的
CPU资源的时分复用相关
那就是我们这里的处理机调度算法
那这调度算法的功能是什么呢
是说从就绪队列当中
挑选出一个进程
占用CPU进行运行
也就说挑选下一个执行的进程
如果你是多处理机的话
这时候还会有另外一个问题
就是我从多个可以用的CPU当中
我要挑选出一个CPU
给我下一个就绪进程来使用
这是处理机调度要做的功能
那对应着处理机调度的呢
我们有一个调度程序
这个程序是指 在内核当中
用来挑选就绪进程的这个函数
如果说是多处理机的话
还有负责挑选可用处理机的这个功能
好 那在这个调度程序里
要解决什么问题呢
一个是调度策略
也就说我依据什么来选下一个进程
那还有一个呢是调度时机
也就说我找着一个进程可以运行
那这时候我在什么时候把它切过去呢
那这个时机的选择呢也是非常关键的
下面我们就对此来进行进一步的介绍
首先我们来说调度时机
在前面呢我们有一个进程状态模型
这是我们这里说到的三状态进程模型
那在这些进程的状态里头呢
我们操作系统的进程控制
会来维护当前进程所处的状态
那我们这个调度
在什么时候能切换是最合适的呢
那大家想想 也就是说
我进到堵塞 我退出
没有新的进程运行了
我需要来做这种调度
那实际情况是什么样呢
那这个是我们执行调度程序的条件
第一个是 有进程从运行状态
切换到等待状态
这个切换呢是说
我由于要等待某一个事件
我现在即使你给我CPU资源
我也没办法往下算了
好 它把它放到等待队列里头
这样CPU资源就空闲出来
这时候我可以
再把一个就绪进程放到CPU上
让它切换回来 恢复运行
然后还有一种情况呢是说
我进程退出了
那进程退出之后 那收尾
好 那我这时候CPU资源空出来
我又可以加载一个进程
这里所说的这两种情况呢
是对应着我们的非强占系统
也就说如果你的CPU资源
分配给了一个进程
操作系统不会主动地剥夺
这个进程对CPU的占有
那如果说你是一个强占系统
那么这时候呢
就可能再出现一种情况
说我在有中断请求的时候
或者说有系统调用的时候
那我会呢在这里
再把当前这个进程转成就绪状态
那具体说起来
我在什么时候会出现这种情况呢
有两种情况
一种 如果我们是依据时间来进行调度的
你分配给你的执行时间已经结束了
好 这时候呢
我们的定时会有时钟中断
这个时钟中断 它的处理
会导致把当前正在运行进程
重新放回到就绪队列里头
然后再去找一个新的进程来运行
还有一种情况是说
我有某一个处于等待状态的进程
它由等待变成了就绪
而这时候呢它更急迫
需要来占用CPU
那也会把抢占
会把当前正在运行这个进程
放回到就绪队列当中
好 这是说到的时机
基本上是说我们在状态发生变化的时候
来完成这个调度是比较合适的
其中某一些状态的变化呢
时钟中断也正是由于
以这个调度的原因
所导致的这个状态切换