处理机调度
文章目录
处理机调度与层次
基本概念
- 当有一堆任务要处理时,但由于资源有限,这些事情没办法同时处理,这就需要缺点某种规则来决定处理这些任务得顺序,这就是“调度”研究得问题
- 在多道系统程序中,进程得数量往是往多于处理机得个数得,这样不可能同时并行地处理各个进程
- 处理机调度,就是从就绪队列当中按照一定的算法选择一个进程并将处理机分配给它运行,以实现进程地并发执行。
高级调度
- 高级调度(作业调度):按照一定的原则从外村上处于后备队列地作业中挑选一个(或多个)作业,给他们分配内存等必要资源,并建立相应地进程(建立PCB),以使它(们)获得竞争处理机地权力。
- 高级调度是辅存(外存)与内存之间地调度。每个作业只调入一次,调出一次。作业调入时会建立相应地PCB,作业调出时才撤销PCB。高级调度主要是指调入的问题,因为只有调入的时机需要操作系统来确定,但调出的时机必然是作业运行结束才调出。
中级调度
- 引入了虚拟存储技术之后,可将暂时不能运行的进程调至外存等待,等它重新具备了运行条件且内存又稍有空间时,在重新调入内存。这么做的目的是为了提高内存利用率和系统吞吐量。
- 暂时调到外存等待的进程状态为挂起状态,值得注意的是,PCB并不会一起调到外存,而是会常驻内存。PCB中会记录进程数据在外存中的存放位置,进程状态等信息,操作系统通过内存中的PCB来保持对各个进程的监控、管理。被挂起的进程PCB会被放到挂起队列中。
- 中级调度(内存调度):就是又要决定将哪个处于挂起状态的进程重新调入内存
- 一个进程可能被多次调出、调入内存,因此中级调度发生的频率要比高级调度更高。
低级调度
- 低级调度(进程调度):其主要任务是按照某种方法和策略从就绪队列中选取一个进程,将处理机分配给它。
- 进程调度是操作系统中最基本的一种调度,在一般的操作系统中都必须配置进程调度
- 进程调度的频率很高,一般几十毫秒一次
层次 | 要做什么 | 调度发生在 | 发生频率 | 对进程状态的影响 |
---|---|---|---|---|
高级调度(作业调度) | 按照某种规则,从后背队列中选择合适的作业将其调入内存,并为其创建进程 | 外存->内存(面向作业) | 最低 | 无->创建态->就绪态 |
中级调度(内存调度) | 按照某种规则,从挂起队列中选择合适的进程将其数据调回内存 | 外存->内存(面向进程) | 中等 | 挂起态->就绪态(阻塞挂起->阻塞态) |
低级调度(进程调度) | 按照某种规则,从就绪队列中选择一个进程为其分配处理机 | 内存->CPU | 最高 | 就绪态->运行态 |
进程调度的时机、切换与过程、方式
进程调度的时机
- 需要进程进程调度与切换的情况
- 当前运行的进程主动放弃处理机
- 进程正常终止
- 运行过程中发生异常而终止
- 进程主动请求阻塞(如等待I/O)
- 当前运行的进程被动放弃处理机
- 分给进程的时间片用完
- 有更紧急的事需要处理(如I/O中断)
- 有更高优先级的进程进入就绪队列
- 当前运行的进程主动放弃处理机
- 不能进行进程调度与切换的情况
- 在处理中断的过程中。中断处理过程复杂,与硬件密切相关,很难做到在中断处理过程中进行进程切换
- 进程在操作系统内核程序的临界区中。
- 在原子操作过程中(原语)。原子操作不可中断,要一气呵成。
进程调度的方式
- 非剥夺调度方式(非抢占方式),即只允许主动放弃处理机。在运行过程有更紧急的任务到达,当前的进程依然会继续使用处理机,直到该进程终止或主动要求进入阻塞态。
- 实现简单,系统开销小但无法及时处理紧急任务,适合于早期的批处理系统
- 剥夺调度方式(抢占方式),当一个进程正在处理机上执行时,如果有一个更重要或更紧迫的进程需要使用处理机,则立即停止正在执行的过程,将处理机分配给更重要紧迫的哪个进程
- 可以优先处理更紧急的进程,也可实现让各进程按时间片轮流执行的功能(通过时钟中断)。适合于分时操作系统、实时操作系统
进程的切换与过程
- 狭义的进程调度指的是从就绪队列中选中一个要运行的进程(这个进程可以是刚刚被暂停执行的进程,也可能是另一个进程,后一种情况就需要进程切换)
- 进程切换是指一个进程让出处理机,由另一个进程占用处理机的过程
- 广义的进程调度包括了选择一个进程和进程切换两个步骤
- 进程切换的过程主要完成了:
- 对原来的运行进程各个数据的保存
- 对新的进程各种数据的恢复
- 注:进程切换是有代价的,因此如果过于频繁的进行进程调度、切换,必然会使整个系统的效率降低,使系统大部分时间都花在了进程切换上,而真正用于执行进程的时间减少。
调度算法的评价指标
- cpu利用率:指cpu忙碌的时间占总时间的比例
- 利用率=忙碌的时间/总时间
- 系统吞吐量:单位时间内完成作业的数量
- 总共完成了多少道作业/总共花了多少时间
- 周转时间:是指从作业被提交给系统开始,到作业完成为止的这段时间间隔
- 周转时间=作业完成时间-作业提交时间
- 平均周转时间=各作业周转时间之和/作业数
- 带权周转时间=作业周转时间/作业实际运行的时间=(作业完成时间-作业提交时间)/作业实际运行的时间
- 等待时间:进程/作业处于等待处理机状态时间之和,等待时间越长,用户满意度越低
- 响应时间:指从用户提交请求到首次产生响应所用的时间
调度算法
先来先服务(FCFS)
- 算法规则:按照作业/进程到达先后顺序进行服务
- 非抢占式的算法
- 优点:公平,算法实现简单
- 缺点:排在长作业(进程)后面的短作业需要等待很长时间,带权周转时间很大,对短作业来说用户体验不好。即FCFS算法对长作业有利,对短作业不利
- 不会导致饥饿
短作业优先(SJF)
- 算法思想:追求最少的平均等待时间,最少的平均周转时间、最少的平均带权周转时间
- 算法规则:最短的作业/进程优先得到服务(服务时间最短)
- 即可用于作业调度,也可用于进程调度,用于进程调度时称为“短进程优先(SPF)算法”
- 非抢占式的算法,但也有抢占式的版本–最短剩余时间算法(SRTN)
- 优点:"最短的"平均等待时间、平均周转时间
- 缺点:不公平。对短作业有利,对长作业不利,可能会产生饥饿现象
- 如果源源不断地有短作业到来,可能使长作业长时间得不到服务,产生“饥饿”现象。如果一直得不到服务,则成为“饿死”
高响应比优先(HRRN)
- 算法思想:综合考虑作业/进程地等待时间和要求服务时间
- 算法规则:在每次调度时先计算各个作业/进程的响应比,选择响应比最高的作业/进程为其服务
- 响应比=(等待时间+要求服务时间)/要求服务时间
- 即可用于作业调度,也可用于进程调度
- 非抢占式算法
- 优点
- 综合考虑了等待时间和运行时间
- 等待时间相同时,要求服务时间短的优先(JSF优点)
- 要求服务时间相同时,等待时间长的优先(FCFS的优点)
- 对于长作业来说,随着等待时间的增长,响应比也会越来越大,从而避免了长作业饥饿的问题
时间片轮转调度算法(RR)
- 算法思想:公平的、轮流的为各个进程服务,让每个进程在一定的时间间隔内都能得到响应
- 算法规则:按照各个进程到达就绪队列的顺序,轮流让各个进程执行一个时间片。若进程未在一个时间片内执行完,则剥夺处理机,将进程重新放到就绪队列队尾中心排队
- 用于进程调度
- 非抢占式算法
- 优点:公平,响应快,适用于分时操作系统
- 缺点:由于高频率的进程切换,因此有一点的开销;不区分任务的紧急程度
- 不会导致饥饿
优先级调度
- 算法规则:每个作业/进程各有优先级,调度时选择优先级高的
- 既可用于作业调度,也可用于进程调度
- 抢占式。非抢占式都有
- 优点:用有点急区分紧急程度、重要程度,适用于实时操作系统,可灵活的调整对各种作业/进程的偏好程度
- 缺点:如源源不断地有优先级高的进程尽量,可能导致饥饿
多级反馈队列调度算法
- 算法规则
- 设置多级就绪队列,各级队列优先级从高到低,时间片从小到大
- 新进程到达时先进入第1级队列,按FCFS原则排队等待被分配时间片,若用完时间片还未结束,则进程进入下一级队列队尾。如果此时已经是在最下级地队列,则重新放回该队列队尾
- 只有第k级队列为空时,才会为k+1级队头的进程分配时间片
- 用于进程调度
- 抢占式的算法
- 优点:
- 对给类型进程相对公平(FCFS优点)
- 每个新到达的进程都可以很快得到响应(RR优点)
- 短进程只用较少的时间就可以完成(SPF优点)
- 不必实现估计进程的运行时间
- 可灵活的调整对各类进程的偏好程度,比如CPU密集型进程,I/O密集型进程
- 会导致饥饿现象