1.高级调度(作业调度)
内存与外存之间的调度:从后备队列中按照一定的规则从外存处于后备队列的作业中挑选一个或多个作业给它们分配内存等必要资源,对建立对应的进程(pcb),以使它们获得竞争处理机的机会。多体现在调入内存这个过程,调出是作业运行完就会调出。只调入一次,调出一次。
对进程的影响:无->创建->就绪
2.中级调度(进程-内存调度)
虚拟存储技术:将在内存中暂时不运行的进程先调入外存等待。等重新具备运行条件再调入内存。PCB常驻内存,PCB会以挂起队列的形式在内存中。
对进程的影响:挂起态->就绪态;阻塞挂起->阻塞态
七状态模型:
3.低级调度(进程调度)
从就绪队列中选出一个进程,将处理机分配给它
对进程的影响:就绪态->运行态
4.进程调度的时机
主动放弃处理机:正常/异常终止,主动请求阻塞(等待IO)
被动放弃处理机:时间片用完,IO中断、更高优先级进入就绪队列
不能进行进程调度的场景:
在处理中断的过程中
在原子操作的过程中
在操作系统内核临界区时,访问普通临界区时是可以进行进程调度的
5.进程调度的方式
非剥夺调度方式:进程主动要求进入阻塞态,适用于早期的批处理系统
剥夺调度方式:优先级高的进程会剥夺优先级低的进程的处理权,适用于分时系统与实时系统
6.调度算法的评价指标
cpu利用率:忙碌的时间/总时间
系统吞吐量:总共完成多少道作业/总共花了多少时间
周转时间:作业的完成时间-作业的提交时间(作业从提交到完成总共花了多少时间)
平均周转时间:所有作业的周转时间之和/作业数
带权周转时间:值越小越好。
等待时间:进程等待时间=进程建立后等待被服务的时间之和;作业等待时间=建立进程后的等待时间+在外存后备队列的等待时间。
平均等待时间:所有作业的等待时间/作业数
响应时间:用户提出请求到首次产生响应的时间
7.调度算法
先来先服务算法(FCFS/作业&&进程)
哪一个作业/进程先到达后备队列/就绪队列(等待时间越久的),就先执行
周转时间=完成时间-到达时间
带权周转时间=周转时间/运行时间
等待时间=周转时间-运行时间(无IO操作) 等待时间=周转时间-运行时间-IO操作的时间(有IO操作)
优点:公平、实现简单
缺点:对于排在长作业后面的短作业需要等待很长时间,带权周转时间很大,用户体验不好。表现为对长作业有利,对短作业不利。
短作业优先(SJF)/短进程优先(SPF)
优先执行当前运行时间最短的任务,运行时间相同时,优先执行先到的任务
优点:平均带权/周转/等待时间都比FCFS低
最短剩余时间优先(SRTN抢占式/作业&&进程)
当前进程的剩余时间比新来的进程的时间要长,则新来进程抢占处理机
会产生饥饿,源源不断的短作业会导致长作业一直等待得不到运行
高响应比优先算法(HRNN 作业/进程)
响应比:(等待时间+要求服务时间)/要求服务时间
每次调度时优先选择响应比较高的进程或者作业进程调度
非抢占式的,当进程主动放弃时才进行调度
结合了FCFS和SJF的优点:当等待时间相同时,要求服务时间越短的进程响应比越高(短作业优点);当要求服务时间相同,等待时间越长的进程响应比优先(FCFS优点)
时间片轮转调度算法(进程调度/抢占式)
为了公平轮流的为各个进程服务,让每个进程在一定的时间间隔内都能得到响应
通过时钟装置来通知cpu时间到了
时间片太大,时间片轮转算法会退化为先来先服务算法,会增大进程的响应时间(可能很久才轮到自己)
时间片太小,进程切换开销会很大;切换进程开销不超过1%。
时间片为2的例子:
时间片为5的例子:
优先级调度算法
可以设置静态优先级、动态优先级
系统进程优先级高于用户进程
前台进程高于后台进程
IO密集型高于计算密集型(让IO操作尽早与cpu并行)
当高优先级额进程源源不断的话,会导致低优先级额进程饥饿
非抢占式的优先级调度算法
每次选择当前已到达的且优先级最高的进程,当进程主动放弃处理机时发生调度。
抢占式优先级调度算法
每次选择当前已到达的且优先级最高的进程/当进程主动放弃处理机时发生调度/当就绪队列发生改变时检查是否发生抢占