1. 处理机调度

多道程序环境下,主存中具有多个进程,其数目往往多于处理机的数目。所以就要求系统采用某种算法,动态地将处理机分配给就绪队列中的进程。

1.1 高级调度

高级调度:又称作业调度或长程调度,主要功能是将外存上处于后备队列的作业调入内存,其调度对象是作业

作业:作业包含了程序,数据以及作业说明书,系统是根据该说明书来对程序的运行进行控制的。

作业控制块JCB:目的是为了管理和调度作业(和PCB一样的道理),其保存了系统对作业进行管理和调度所需的全部信息,是作业在系统中存在的标志

作业调度:根据作业控制块的信息,审查系统能否满足用户作业的资源需求,并按照一定算法,从外存的后备队列中选取作业调入内存,为其创建进程,分配所需要的资源,然后再将新创建的进程插入就绪队列

1. 2 低级调度

低级调度:又称进程调度或短程调度,所调度的对象是进程

低级调度用于决定就绪队列中的哪个进程应获得处理机资源

|低级调度的功能

  1. 保存处理机的现场信息。处理机在调度时,首先要保存当前进程的处理机现场信息,以便之后恢复
  2. 按某种算法选取进程。调度算法
  3. 把处理器分配给进程。为选中的进行恢复处理机现场,将PCB控制块中的有关信息装入处理机

|低级调度三个基本机制

  1. 排队器。系统中的所有就绪进程都应按照一定的方式进行排序
  2. 分派器。取出选中进程,进行上下文切换,后分配处理机资源
  3. 上下文切换。对处理机进行切换时,需要进行两对上下文切换:第一对:系统需要保存当前进行的上下文,并装入分派程序的上下文;第二对:移出分派程序,把新选中进程的CPU现场信息装入处理机

|进程调度的方式

  1. 抢占式。允许调度程序根据某种原则去暂停正在执行的进程,并将处理机重新分配给其他进程
  1. 优先权原则
  2. 短作业优先原则
  3. 时间片原则
  1. 非抢占式。只要该进程正在运行,绝不会因为其他原因而进行中断。采用非抢占式调度方式,可能引起进程调度的因素:
  1. 进程执行完毕,或因为发生某时间而不能再继续执行
  2. 执行中的进程因提出I/O请求而暂停执行
  3. 在进程通信或同步过程执行1来某种原语操作
1.3 中级调度

中级调度:又称中程调度

其目的是为了提高内存利用率和系统吞吐量

2 调度算法的准则

2.1 面向用户
  1. 周转时间短。作业周转时间:从作业被提交给系统开始,到作业完成为止的这段时间间隔。
  1. 除此之外,平均周转时间,带权周转时间,平均带权周转时间都需要了解
  1. 响应时间快
  2. 截止时间的保证
  3. 优先权
2.2 面向系统
  1. 系统吞吐量
  2. 处理机利用率好
  3. 各类资源平衡使用

3 调度算法

3.1 先来先服务—FCFS

先来先服务即可以用于作业调度,也可以用于进程调度

  1. 在作业调度采用该算法时,每次调度都从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内容,分配资源,创建进程,然后放入就绪队列
  2. 缺点。FCFS算法利于长作业/进程,不利于短作业/进程
3.2 短作业(进程)优先—SJ§F

短作业(进程)优先是止对短作业或短进程优先调度的算法。

  1. 短作业优先SJF是从后备队列中选择一个或多个估计运行时间最短的作业,将它们调入内存运行
  2. 短进程优先SPF是从后备队列中选择一个估计运行时间最短的进程,将处理机分配给他,使其一直运行直到执行完成或发生某事件而被阻塞
  3. 缺点。对长作业不利,不能保证紧迫性作业/进程会被及时处理
3.3 高优先权优先调度

|优先权调度算法类型

  1. 非抢占式优先权算法
  2. 抢占式优先权算法。在当前进程执行时,若出现优先权比其更高的进程时,则立即停止当前进程的执行,进行进程的切换

|优先权类型

  1. 静态优先权。在创建进程时确认,并且在执行过程中不会改变
  2. 动态优先权。在创建进程时所赋予的优先权可以随进程的推进或等待时间的增加而改变,以便获得更好的性能

|高响应比优先算法

短作业优先的不足是长作业的运行不能得到保证。

如果为每个作业赋予动态的优先权,并使作业的优先权等级随着时间的增加而提高,那么长作业在一定时间后,必然有机会分配到处理机

|优先权的变化规律
android rsdl 调度 安卓yc调度是什么_操作系统

  1. 若作业等待时间相同,则服务时间越短,优先权越高。有利于短作业优先
  2. 当要求服务时间相同,等待时间越长,优先权越高。先来先服务
  3. 对于长作业,作业的优先级可以随着等待时间的增加而提高,当等待时间足够长时,便可以获得处理机
3.4 基于时间片的轮转调度算法

|时间片轮转法

|基本原理

早期的时间片轮转法中,系统将所有的就绪进程按先来先服务的原则排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片。当执行的时间片用完时,由计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。

|多级反馈队列调度法


|基本原理

  1. 设置多个就绪队列,并为各个队列赋予不同的优先级。第一个优先级最高,第二个队列次之,其余各队列的优先权逐个降低。该算法赋予各个队列中进程执行时间片的大小也各不相同,优先权高的队列中,为每个进程所规定的执行时间片就越小
  2. 当一个新进程进入内存后,首先将它放入第一队列的末尾,按FCFS原则排队等待调度。当轮到该进程执行时,若它能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚未完成,调度程序,调度程序便将其转入第二队列的末尾,同样按FCFS原则等待调度…
  3. 仅当第一队列空闲时,调度程序才调度第二队列中的进程运行。若处理机正在第i队列中为某进程服务时,又有新的进程进入优先权较高的队列第1~i-1中,则此时新进程将抢占正在运行进程的处理机

4 实时调度

实时系统中需要及时反馈,前面的算法不能满足实时系统对调度的要求,故引入实时调度

4.1 实现实时调度的基本条件

提供以下信息

  1. 就绪时间。任务成为就绪状态的开始时间
  2. 开始时间与截止时间。
  3. 处理时间。任务从开始执行直到完成所需要的时间
  4. 资源要求。执行该任务需要的资源
  5. 优先级。

采用抢占式的调度机制

具有快速切换机制

4.2 常见的实时调度算法

|最早截止时间优先算法EDF

该算法时根据任务的开始截止时间来确定任务的优先级。截止时间越早,其优先级越高。

该算法要求在系统中保持一个实时任务就绪队列,该队列按各任务截止时间的早晚排序

  1. 非抢占式调度方式
  2. 抢占式调度方式

|最低松弛度优先算法LLF

该算法根据任务的紧急程度来确定任务的优先级。紧急程度越高,其优先级越高

系统中保持一个按松弛度排序的队列,该队列按松弛度由小到大进行排序

例如:一个进程需要在200ms内完成,该进程本身的运行时间为100ms,那么其松弛程度为200ms-100ms=100ms

5 死锁

5.1 产生死锁的原因
  1. 竞争资源
  1. 竞争非剥夺性资源
  2. 竞争临时性资源
  1. 进程间推进顺序非法
5.2 产生死锁的必要条件
  1. 互斥条件。进程对所分配到的资源进行排他性使用,一段时间内某资源只由一个进程占用
  2. 持有并请求。进程已经保持了持有了至少一个资源,但又提出新的资源请求,而该资源又被其他进程所持有
  3. 不可剥夺。进程已获得的资源,在未使用完之前,不能被剥夺
  4. 环路等待。资源的环形链

6 预防死锁

使形成死锁的必要条件2,3,4不成立即可

  1. 摒弃“请求和保持条件”。规定开始运行的进程,必须一次性申请所执行的所有资源
  2. 摒弃“不可剥夺条件”。当一个持有的进程再提出请求资源而不被满足时,需释放自己所持有的资源
  3. 摒弃“环路等待条件”。将系统所有的资源按类型线性排队,并赋予不同序号。所有进程对资源的请求必须按照序号的递增次序提出资源请求