目录
3.3.3 最早截止时间优先EDF(Earliest Deadline First)算法
3.3.4 最低松弛度优先LLF(Least Laxity First)算法
3.3.5 优先级倒置(priority inversion problem)
3.1 处理机调度的层次和调度算法的目标
在多道程序系统中,调度的实质是一种资源分配,处理机调度是对处理机资源进行分配。处理机调度算法是指根据处理机分配策略所规定的处理机分配算法。
3.1.1 处理机调度的层次
执行作业调度时,需要解决:(1)一次接纳多少作业:即允许多少个作业同时在内存中运行。(2)接纳哪些作业:即哪些作业调入内存,取决于所采用的算法。
1. 高级调度(High Level Scheduling)又称为作业调度或长程调度。
2. 低级调度又称为进程调度、短程调度。
3. 中级调度又称平衡负载调度、中程调度。
3.1.2 进程调度的任务和方式
1.进程调度的任务
保存处理机的现场信息;按某种算法选取进程;把处理器分配给进程。
2.进程调度的方式
非抢占方式;抢占方式(现代OS广泛采用)
3.1.3 处理机调度算法的目标
1. 处理机调度算法的共同目标
(1) 资源利用率
(2) 公平性
(3) 平衡性
(4) 策略强制执行
2. 批处理系统的目标
(1) 平均周转时间短
(2) 系统吞吐量高
(3) 处理机利用率高
3. 分时系统的目标
(1) 响应时间快;(2) 均衡性
4. 实时系统的目标
(1) 截止时间的保证;(2) 可预测性
3.2 作业与作业调度
3.2.1 批处理系统中的作业
1. 作业和作业步
(1) 作业(Job)程序+数据+作业说明书(JCB)
(2) 作业步(Job Step)“ 编译”作业步、“链接装配”作业步、“运行”作业步
2. 作业控制块(Job Control Block,JCB)
JCB是作业在系统中存在的标志,其中保存了系统对作业进行管理和调度所需的全部信息。
3.2.2 作业调度的主要任务
作业调度的主要任务:根据JCB中的信息,检查系统中的资源能否满足作业对资源的需求,以及按照一定的调度算法,从外存的后备队列中选取某些作业调入内存,并为它们创建进程、分配必要的资源。然后再将新创建的进程排在就绪队列上等待调度。
3.2.3 各种作业调度算法
这个就出现了考试中的第一类大题,包括了先来先服务(first-come first-served,FCFS)调度算法;短作业(进程)优先调度算法(SJF(抢占与非抢占)/ SPF);优先级调度算法(priority-scheduling algorithm,PSA);高响应比优先调度算法(Highest Response Ratio Next,HRRN);时间片轮转调度算法RR;多队列调度算法;基于公平原则的调度算法 详情见如下链接:大题-处理机调度算法_哔哩哔哩_bilibili
3.3 实时调度
3.3.1 实现实时调度的基本条件
1. 提供必要的信息
2. 系统处理能力强
3. 采用抢占式调度机制
4. 具有快速切换机制
3.3.2 实时调度算法的分类
① 根据实时任务性质,可将实时调度的算法分为硬实时调度算法HRT和软实时调度算法SRT;② 按调度方式,则可分为非抢占调度算法和抢占调度算法。
3.3.3 最早截止时间优先EDF(Earliest Deadline First)算法
EDF根据任务的截止时间确定优先级,截止时间越早,优先级越高,既可用于抢占式调度,也可用于非抢占式调度
3.3.4 最低松弛度优先LLF(Least Laxity First)算法
该算法主要用于可抢占调度方式中。根据任务的紧急程度(松弛度)确定任务优先级;紧急程度越高(松弛度越低),优先级越高。松弛度=必须完成时间-其本身的运行时间-当前时间。
3.3.5 优先级倒置(priority inversion problem)
优先级倒置,采用优先级调度和抢占方式,可能产生优先级倒置。现象:高优先级进程被低优先级进程延迟或阻塞。解决方法:制定一些规定,如规定低优先级进程执行后,其所占用的处理机不允许被抢占;建立动态优先级继承。
3.4 死锁概述
3.4.1 资源问题
1.可重用性资源和消耗性资源(根据资源使用期限)
可重用性资源:一次只能分配给一个进程,不允许多个进程共享,遵循:请求资源,使用资源,释放资源 (大部分资源)。可消耗性资源:由进程动态创建和消耗 (进程间通信的消息)。
2. 可抢占性资源和不可抢占性资源(根据资源本身的性质)
可抢占性资源:某进程在获得这类资源后,该资源可以再被其他进程或系统抢占,CPU(处理机)和主存区。不可抢占资源:当系统把这类资源分配给某进程后,再不能强行收回,只能在进程用完后自行释放,打印机、磁带机。
3.4.2 计算机系统中的死锁
1. 竞争不可抢占性资源引起死锁
系统中的不可抢占性资源,由于它们的数量不能满足诸进程运行的需要,会使进程在运行过程中,因争夺这些资源而陷入僵局。利用资源分配图进行描述:用方块代表可重用的资源(文件),用圆圈代表进程。
2. 竞争可消耗资源引起死锁
在三个进程之间,在利用消息通信机制进行通信时所形成的死锁情况
3. 进程推进顺序不当引起死锁
3.5.3 死锁的定义、必要条件和处理方法
1. 死锁的定义
如果一组进程中的每一个进程都在等待仅由该组进程中的其它进程才能引发的事件,那么该组进程是死锁的(Deadlock)。
2. 产生死锁的必要条件
产生死锁必须同时具备下面四个必要条件,只要其中任一个条件不成立,死锁就不会发生:(1) 互斥条件;(2) 请求和保持条件;(3) 不可抢占条件;(4) 循环等待条件。
3. 处理死锁的方法
确保系统永远不会进入死锁状态 预防死锁避免死锁
3.5 预防死锁
破坏死锁的四个必要条件中的一个或几个:
互斥:互斥条件是共享资源必须的,不仅不能改变,还应加以保证
请求和保持:必须保证进程申请资源的时候没有占有其他资源
要求进程在执行前一次性申请全部的资源,只有没有占有资源时才可以分配资源。
资源利用率低,可能出现饥饿。
改进:进程只获得运行初期所需的资源后,便开始运行;其后在运行过程中逐步释放已分配的且用毕的全部资源,然后再请求新资源。
非抢占:如果一个进程的申请没有实现,它要释放所有占有的资源;先占的资源放入进程等待资源列表中;进程在重新得到旧的资源的时候可以重新开始。
循环等待:对所有的资源类型排序进行线性排序,并赋予不同的序号,要求进程按照递增顺序申请资源。Ø如何规定每种资源的序号是十分重要的;Ø限制新类型设备的增加;Ø作业使用资源的顺序与系统规定的顺序不同;Ø限制用户简单、自主的编程。
3.6 避免死锁
3.6.1 系统安全状态
死锁避免算法动态检查资源分配状态以确保不会出现循环等待的情况。
1. 安全状态
Ø在该方法中,允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次资源分配的安全性。Ø如果一个系统在安全状态,就没有死锁。Ø如果一个系统不是处于安全状态,就有可能死锁。Ø死锁避免 -> 确保系统永远不会进入不安全状态。
3.6.2 利用银行家算法避免死锁
最有代表性的避免死锁的算法是Dijkstra的银行家算法。
详情见以下链接:(还是看视频最高效,考完试补自己讲的视频)
3.7 死锁的检测与解除
3.7.1 死锁的检测
为了能对系统中是否已发生了死锁进行检测,在系统中必须:
① 保存有关资源的请求和分配信息;
② 提供一种算法,它利用这些信息来检测系统是否已进入死锁状态。
检测死锁的基本思想: 是在操作系统中保存资源的请求和分配信息,利用某种算法对这些信息加以检查,以判断是否存在死锁。为此,将进程和资源间的申请和分配关系描述成一个有向图---资源分配图。
3.7.2 死锁的解除
常用解除死锁的两种方法: