调度的层次<br>
<b>高级调度(作业调度)</b><br>从辅存中选择作业调入内存,每个作业只调入、调出一次<br>
<b>中级调度(内存调度)<br></b>按照某种策略将进程调入调出内存<br>
<b>低级调度(进程调度)<br></b>按照某种策略选取就绪进程分配处理机,最基本的调度(高频)<br>
调度的时机、切换、过程、方式<br>
可以切换的情况
发生引起调度的条件且当前进程无法继续进行<br>
<b>中断处理结束</b>或<b>自陷处理结束</b><br>
不能切换的情况<br>
处理中断的过程中
进程在<b>OS内核程序临界区</b>(如就绪队列访问)中<br>普通临界区如打印机资源可以进行调度与切换
原子操作(<b>原语</b>)过程中
<b>切换过程:</b><br>1.对原进程运行环境的保存<br>2.对进程运行环境的恢复
<b>重要结论:</b><br>进程的调度、切换是有代价的,并不是调度越频繁,并发度越高<br>
调度算法的评价指标
<b>CPU利用率<br><span class="equation-text" contenteditable="false" data-index="0" data-equation="=\frac{忙碌时间}{总时间}"><span></span><span></span></span><br></b>
<b>系统吞吐量<br><span class="equation-text" contenteditable="false" data-index="0" data-equation="=\frac{完成作业数}{总时间}"><span></span><span></span></span><br></b>
<b>周转时间<br></b>=作业完成时间-作业提交时间<b><br></b>
平均周转时间<br><span class="equation-text" contenteditable="false" data-index="0" data-equation="=\frac{各作业周转时间之和}{作业数}"><span></span><span></span></span><br>
<b>带权周转时间(≥1)<br><span class="equation-text" contenteditable="false" data-index="0" data-equation="=\frac{作业周转时间}{作业实际运行时间}"><span></span><span></span></span><br></b>
<b>平均带权周转时间<br><span class="equation-text" contenteditable="false" data-index="0" data-equation="=\frac{各作业带权周转时间之和}{作业数}"><span></span><span></span></span><br></b>
<b>等待时间</b><br>进程处于等待处理机状态的时间之和
<b>响应时间</b><br>=首次响应时刻-提交请求时刻
典型的调度算法
先来先服务(FCFS)
非抢占式,对长作业有利,对短作业不利<br>
有利于CPU繁忙型作业,不利于I/O繁忙型作业
不会导致饥饿,前面的作业总会处理完
短作业优先(SJF)
非抢占式,对长作业不利,可能导致"饥饿"、"饿死"现象
不能保证紧迫作业即时处理
"平均等待时间、平均周转时间最少"
抢占式SJF:最短剩余时间优先(SRTN)<br>
高响应比优先(HRRN)
响应比<br><span class="equation-text" contenteditable="false" data-index="0" data-equation="=\frac{等待时间+要求服务时间}{要求服务时间}"><span></span><span></span></span><br>
调度时选取<b>响应比</b>最高的就绪进程上处理机运行
非抢占式,不会导致"饥饿"现象<br>
时间片轮转(RR)<br>
轮流让排在就绪队列队头的进程执行一个时间片<br>
抢占式、用于进程调度、不会导致"饥饿"现象<br>
若进程执行完,时间片未用完,进程会主动放弃CPU
优先级调度算法<br>
发生调度时选择最高优先级的作业/进程,<br>用于作业调度、进程调度,存在"饥饿"现象<br>
<b>非抢占式:</b><br>当前进程放弃处理机时发生调度,选择就绪队列中优先级最高的进程<br><b>抢占式:</b><br>当前进程放弃处理机或就绪队列发生变化时检查是否需要调度
<b>静态优先级:</b>创建进程时确定<br><b>动态优先级:</b>进程运行过程中动态变化
优先级设置:<br>系统进程>用户进程、前台进程>后台进程、I/O繁忙型进程>CPU繁忙型进程