3.1 处理机调度的层次和调度算法的目标
3.1.1 处理机调度的层次
- 高级调度:高级调度称为作业调度,它的调度对象是作业。主要功能是根据某种算法,决定将外村上处于后备队列中的哪几个作业调入内存,并将它们放入就绪队列
- 低级调度:低级调度称为进程调度,其所调度的对象是进程。主要功能是根据某种算法,决定就绪队列中的哪个进程获得处理机
- 中级调度:也称为内存调度,主要是为了提高内存利用率和系统吞吐量,会把那些暂时不能运行的进程,调至外存等待,此时进程的状态称为挂起状态
3.1.2 处理机调度算法的目标
- 资源利用率
平均周转时间:周转时间指从作业被提交给系统开始,到作业完成为止这段时间间隔。但是对于n个作业而言,平均周转时间可以表示为
平均带权周转时间可以用周转时间与系统为其服务的时间之比来表示
- 系统吞吐量:吞吐量是指在单位时间内系统所完成的作业数
3.2 作业与作业调度
3.2.3 先来先服务(FCFS)和短作业优先(SJF)调度算法
- 先来先服务(FCFS)调度算法:系统将按照作业到达的先后顺序来进行调度
- 短作业邮箱(SJF)的调度算法
- 以作业的长短来计算优先级,作业越短优先级越高
- 但是主要缺点为:必须预知作业的运行时间;对长作业十分不利
3.2.4 优先级调度算法和高响应比优先调度算法
- 优先调度算法(PSA):基于作业的紧迫程度,由外部赋予作业相应的优先级
- 高响应比优先调度算法(HRRN):综合考虑了作业的等待时间和作业的运行时间确定优先级,主要是根据作业等待时间延长而增加优先级,因此相应比可以表示为:
3.3 进程调度
- 进程调度方式
- 非抢占式:一旦把处理机分配给某进程后,就一直让它运行下去
- 抢占方式:允许程序根据某种原则,去暂停某个正在执行的进程
3.3.2 轮转调度算法(RR)
- 基本原理:系统根据FCFS策略,将所有的就绪进程排成一个就绪队列,并可以设置每隔一段时间间隔即产生一次中断,激活系统中的进程调度程序,完成一次调度
- 进程切换时机
- 若一个时间片尚未用完,正在运行的进程便已经完成了,就立即激活调度程序,将其删除,并从就绪队列队首选取进程运行,开始一个新的时间片
- 在一个时间片用完时,计时器中断处理程序被激活,如果进程尚未完成运行,调度程序将把它送往就绪队列的末尾。
3.3.3 优先级调度算法
- 优先级调度算法是把处理机分配给就绪队列中优先级最高的进程
- 非抢占式优先级调度算法
- 抢占式优先级调度算法
3.4 实时调度
- 实时调度必须满足实时任务对于截止时间的要求
3.5 死锁概述
3.5.2 计算机系统中的死锁
- 造成死锁的起因有如下几种可能:
- 竞争不可抢占性资源引起死锁
- 竞争可消耗资源引起死锁
- 进程推进顺序不当引起死锁
3.5.3 死锁的定义、必要条件和处理方法
- 如果一组进程中的每一个进程都在等待仅有该组进程中的其他进程才能引发的事件,那么改组进程是死锁的
- 产生死锁的条件
- 互斥条件:进程对所分配到的资源进行排他性使用
- 请求和保持条件:进程已经保持了至少一个资源,但又提出新的资源请求,但是该资源被其他进程占有
- 不可抢占条件:进程已经获得的资源在未使用完之前不能被抢占
- 循环等待条件:在发生死锁使,必然存在一个进程—资源的循环链
3.6 预防死锁
3.6.1 破坏“请求和保持”条件
- 第一种方法:所有程序在开始运行之前,必须一次性地申请其在整个运行过程中所需的全部资源,只要有一种资源无法满足,其余资源也不分配
- 第二种方法:允许一个进程只获得运行初期所需的资源后,便开始运行。进程运行过程中再逐步释放已经分配给自己、且已经用完的全部资源。
3.6.2 破坏“不可抢占”条件
- 当一个已经保持了某些不可被抢占资源的进程,提出新的资源得不到满足时,必须释放已经保持的所有资源,待以后需要的时候重新申请
3.6.3 破坏“循环等待”条件
- 先对系统所有的资源类型进行线性分类,要求进程再请求某类资源时,必须保证所请求的资源数量小于当前可以被请求的资源数量
3.7 避免死锁
3.7.1 系统安全状态
- 系统在进行资源分配之前,应先计算此次资源分配的安全性,若此次分配不会导致系统进入不安全状态,才可将资源分配给进程。
- 所谓安全状态就是指系统能按照某种进程推进顺序为每个进程分配其所需要的资源,直到满足每个进程对资源的最大需求
- 以下举例,可以发现通过安全序列<P2,P2,P3>的顺序可以完成资源分配,因此为安全状态