调度的概念
确定某种规则决定处理任务的顺序。
调度的三个层次:
高级调度(作业调度)
作业:一个具体的任务(存放在外存的程序,进入内存就成了进程)
按一定的原则从外存的作业队列中挑选一个作业调入内存,并创建进程。每个作业只调入一次(建立PCB),调出一次(撤销PCB)。
中级调度(内存调度)
内存不足时,将某些进程的数据调到外存。等内存空闲或者进程需要运行时再重新调入内存。
暂时调到外存等待的进程状态为挂起状态,被挂起的进程PCB被组织成挂起队列。
按照某种策略决定将哪个处于挂起状态的进程重新调入内存,一个进程可能多次调入、调出内存,频率比高级调度高。
低级调度(进程调度/处理机调度)
按照某种策略从就绪队列中选取一个进程,将处理机分配给它。
最基本的调度,频率很高,一半几十毫秒一次。
发生位置 | 发生频率 | 对进程状态影响 | |
高级调度 (作业调度) | 外存-->内存 (面向作业) | 最低 | 无-->创建态-->就绪态 |
中级调度 (内存调度) | 外存-->内存 (面向进程) | 中等 | 挂起态-->就绪态 |
低级调度 (进程调度) | 内存-->CPU | 最高 | 就绪态-->运行态 |
进程的挂起态与七状态模型
挂起状态:暂时调到外存等待的进程状态。
就绪态-->就绪挂起
阻塞态-->阻塞挂起
运行态-->就绪挂起
创建态-->就绪挂起
阻塞挂起也可以进入就绪挂起
进程调度的时机、切换与过程、方式
进程调度时机
当前运行的进程主动放弃处理机:进行正常终止、发生异常而终止、主动请求阻塞(I/O);
当前运行的进程被动放弃处理机:时间片用完、有更紧急的事处理(I/O中断)、优先级更高的进程进入就绪队列;
不能进行调度与切换的情况:处理中断的过程中、进程在操作系统内核临界区中、原子操作过程中(原语);
进程调度方式
非剥夺调度方式(非抢占方式):只允许进程主动放弃处理机
实现简单、开销小、无法处理紧急任务,适合早期批处理系统。
剥夺调度方式(抢占方式):若有更重要的进程需要使用处理机,则立即停止正在执行的进程,将处理机分配给更重要的进程。
适合于分时操作系统、实时操作系统。
进程切换
狭义的进程调度:从就绪队列中选出一个要运行的进程。
进程切换:进程让出处理机,由另一个进程占用处理机的过程。(保存原有进程数据、对新进程数据恢复)
广义的进程调度包含上面两种。
调度器/调度程序
调度程序决定让谁运行(调度算法)、运行时长(时间片大小)
调度时机
- 创建新进程
- 进程退出
- 运行进程阻塞
- I/O中断发生(可能唤醒某些阻塞进程)
- 非抢占式,运行阻塞或退出
- 抢占式,每个时钟中断
不支持内核级线程的操作系统,调度程序的处理对象是进程;
支持内核级线程的操作系统,调度程序的处理对象是内核级线程;
闲逛进程(idle)
没有其他就绪进程时,运行闲逛进程。优先级最低,可以是0地址指令,占一个完整的指令周期,能耗低,指令周期末尾例行检查中断。
评价调度算法的指标
CPU利用率
CPU处于忙碌时间占总时间的比例;
利用率=忙碌时间/总时间;
系统吞吐量
单位时间内完成作业的数量
系统吞吐量=总共完成了多少道作业/总花费时间
周转时间
作业被提交给系统开始,到作业完成为止的时间间隔。
包括:高级调度、低级调度时间、在CPU执行时间、等待I/O操作完成的时间。
作业周转时间=作业完成时间-作业提交时间
平均周转时间=各作业周转时间之和/作业数
带权周转时间=作业周转时间/作业实际运行的时间 (>=1)
平均带权周转时间=各作业带权周转时间之和/作业数
等待时间
进程/作业处于等待处理机状态时间之和
进程等待I/O完成的期间不计入等待时间,进程在被服务。
响应时间
用户提交请求到首次产生响应所用的时间。