操作系统第三章——处理机调度

概述

问题

  • 调度算法
  • 调度时机

层次

层次别名对象实现功能应用范围频度
高级作业调度、长程调度、接纳调度作业作业管理程序将外存作业调入内存,创建PCB等,插入就绪队列用于批处理系统,分/实时系统一般直接入内存,无此环节。 (分时系统如果有前后台的话,后台也是作业)最低,分钟级
中级内存调度挂起的进程内存管理中的对换进程把外存上那些已经具备运行条件的就绪进程重新载入内存。从静止就绪到活动就绪具有对换功能(进程对换)的操作系统中等
低级进程调度或短程调度就绪进程(或内核线程)分派程序(dispatcher)决定就绪队列中的那个进程应获得处理机,并将处理机分配给选中的进程都有(多道系统)最频繁,毫秒级

目标

共同目标

  • 资源利用率
    • 有效时间:执行进程的时间
  • 公平性
    • 合理性
    • 相对性
    • 饥饿现象
  • 平衡性:充分利用各种资源
  • 策略强制执行

批处理系统

  • 平均周转时间1
  • 带权周转时间:作业周转时间T与系统为它提供服务的时间Ts之比(额外等待和作业执行时间之比)
    • W = T / T s W=T/Ts W=T/Ts大于1
  • 系统吞吐量高:尽量多地选择短作业运行
  • 处理机利用率高:尽量选择计算量大的作业
    不同的目标间可能存在一定的矛盾

分时系统

  • 响应时间2快:分时系统的重要准则。
  • 均衡性:指系统响应时间的长短应与用户所请求服务的复杂性相适应。

分时系统的目标

  • 截止时间的保证
  • 可预测性

另一种分类

  • 面向用户的准则
    • 周转时间短
    • 响应时间快
    • 截止时间保证
    • 优先权准则
  • 面向系统的准则
    • 吞吐量大
    • 处理机利用率高
    • 平衡性

作业与作业调度

相关概念

  • 作业:用户提交给系统的一项相对独立的工作(程序+数据+作业说明书)
  • 作业步:在作业运行期间,每个作业都必须经过若干个相对独立,又相互关联的顺序加工步骤才能得到结果,每一个加工步骤称为一个作业步,各作业步之间存在着相互联系
  • 作业流
  • 作业控制块:作业管理系统用于管理和控制作业运行的数据结构
    • 作业标识、用户名称 、用户账户、作业类型、作业状态、调度信息、资源需求、进入系统时间、开始处理时间、作业完成时间、作业退出时间、资源使用情况等

作业运行阶段和三种状态

  • 收容阶段:后备状态 ——外存
  • 运行阶段:运行状态 ——包括执行等待+执行+I/O
  • 完成阶段:完成状态——外存

作业调度主要任务

  • 接纳多少个作业
    • 取决于多道程序允许多少个作业同时在内存中运行
    • 系统规模<——>运行速度
  • 接纳哪些作业
    • 将哪些作业从外存调入内存,取决于所采用的调度算法

常见调度算法

先来先服务(FCFS)

既可用于作业调度,也可用于进程调度

有利于大作业,不利于小作业(小作业的带权周转时间可能会很大)

短作业优先(SJF)

既可用于作业调度,也可用于进程调度

是从后备队列中选择一个或若干个估计运行时间最短3的作业,将它们调入内存运行

  • 对长作业不利
  • 不能保证紧迫性作业被及时处理
  • 时间由用户估计,但估计不一定准确

优先级调度(PSA)

既可用于作业调度,也可用于进程调度
赋予优先级, 优先级高先执行

高响应比优先(HRRN)

只适用于作业调度

赋予作业动态优先级优先级随作业等待时间延长而增加,从而使长作业的优先级在等待期间不断增加

相 应 比 : R p = 等 待 时 间 + 要 求 服 务 时 间 要 求 服 务 时 间 = 响 应 时 间 要 求 服 务 时 间 相应比:R_p=\frac{等待时间+要求服务时间}{要求服务时间}=\frac{响应时间}{要求服务时间} :Rp=+=

进程调度

基本概述

任务

  • 选取进程
  • 保存现场
  • 把处理其分配给要执行的进程

机制

在这里插入图片描述

方式

  • 非抢占式
    • 引起调度的原因:1、被挂起或终止,2、阻塞
  • 抢占
    • 使用原因
      • 批处理:防止长进程长期占用CPU
      • 公平分时:人机交互
      • 实时:紧迫任务的执行
        主要原则
  • 优先级
  • 短进程优先
  • 时间片原则

调度算法

轮转调度算法

每个进程仅运行一个时间片即被抢占CPU
原理:FCFS策略+时钟中断+时间片原则

时间片用完不一定就换一个进程,可能只有一个进程

进程切换时机

  • 时间片内进程结束,进程结束事件激活进程调度,新进程可运行一个时间片;
  • 时间片用完,时钟中断激活调度,旧进程到就绪队列尾,队头进程投入运行一个时间片。

优先级调度算法

立即抢占(实时性好)+非抢占
优先权类型

  • 静态优先权
    • 进程优先权在整个运行期不变
    • 特点:简单,但低优先权作业可能长期不被调度
  • 动态优先权
    • 响应比(Rp): (等待时间+服务时间)/服务时间 作为优先权
    • 优点:长短兼顾
    • 缺点:需计算Rp

多队列调度算法

问题(原因)

  • 不同用户的调度策略需求
  • 多CPU单就绪队列的问题:互斥访问导致效率不高

解决方法:

  • 不同类型或者性质的进程组织在不同的队列中
  • 每个CPU和一个队列,分配优化,CPU间队列均衡

多级反馈队列调度算法

调度机制

  • 设置多个就绪队列,并为各个队列赋予不同的优先级。
  • 优先级愈高的队列的进程的执行时间片就愈小。
  • 新进程首先进入最高优先级的队列。每个队列采用FCFS算法。队列中的进程运行一个时间片后未结束则降级排到下一个队列的末尾。最低优先权队列中的进程则按RR方式运行。
  • 按队列优先级调度。只有比队列的优先级高的队列均空时,才运行该队列中的进程。

当进程在执行时被高优先级进程抢占,直接放到队尾

特点

  • 短作业一次完成,响应时间性能好;
  • 中型作业周转时间不长;
  • 大型作业不会长期不处理。

基于公平原则的调度算法

公平:承诺保证、用户共享均分

  • 保证调度算法
    • 保证的是绝对运行时间,即启动后在某个时间段内必须获得多少运行时间。 例如N个进程平均分配时间。
  • 公平分享调度算法
    • 按照用户数量平均分配时间,而不是进程间平均分配。

实时系统与实时任务调度

分类

在这里插入图片描述
调度程序调度时间

  • 静态调度算法
  • 动态调度算法
    多处理机环境
  • 集中式调度
  • 分布式调度

基本条件

必要的信息

  1. 就绪时间
  2. 开始截止时间和完成截止时间
  3. 处理时间
  4. 资源要求
  5. 优先级

处理能力强

  • 单处理机增强其处理能力
  • 采用多处理机

抢占式调度机制

快速切换机制

  • 对外部终端的快速响应能力
  • 快速的任务分派能力

调度算法

最早截止时间优先算法(EDF)

具有最早截止时间的任务排在队列的最前面

在这里插入图片描述

最低松弛度优先算法(LLF)

松弛度=完成截至时间–剩余运行时间–当前时间

松弛度值最小的任务排在队列最前面,调度程序总是选择就绪队列中的队首任务执行。

优先级倒置

高优先级进程(或线程)被低优先级进程(或线程)延迟或阻塞

解决方法

  • 假如进程再进入临界区后进程所占用的处理机就不允许被抢占(仅适用于临界区较短情况)
  • 采用动态优先级继承方法(防范中间优先级插入)
    动态优先级继承方法运行情况
    调度算法的调度时机
  • A 执行进程结束
  • B 执行进程因等待I/O阻塞
  • C 执行进程因同步或者通信阻塞
  • D 执行进程被挂起
  • E 新进程或有进程进入就绪队列
  • F 时钟中断到达
调度算法调度时机说明
优先级ABCDE
轮转ABCDF
多级反馈队列ABCDEF每个队列也有时间片的概念
先来先服务ABCD

进程死锁

死锁原因和必要条件

定义

如果一组进程中的每一个进程都在等待仅由改组进程中的其他进程才能引发的事件,那么改组进程是死锁的

现象:多个进程再运行过程中因争夺资源而造成的一种僵局

分类

  • 可重用资源:重复使用多次(如打印机)
    • 每一个可重用资源中的单元必须互斥访问;
    • 进程在使用该类资源时必须按照请求/使用/释放的过程使用。
    • 每一类可重用资源的单元数目是相对固定的 ,进程在运行期间既不能创建,也不能删除
  • 消耗性资源:临时性的资源(如消息,生产者消费者问题)
    • 可消耗资源的单元数目在进程运行期间是可以不断变化的。
    • 进程在运行中可以不断的创建该类资源的单元。
    • 进程在运行中可以消耗若干个资源单元。

  • 可抢占性资源(如CPU、内存等)
    • 一个进程在使用某个资源时,系统可以剥夺其使用权,将该资源分配给其他进程
  • 不可抢占资源(造成死锁,如打印机,磁带机等)
    • 某个资源一旦分配给某个进程,则系统不能剥夺进程的使用权,只能由进程释放资源,或者进程终止运行

主要原因

  • 竞争资源
    • 竞争非剥夺性资源:非剥夺性资源不能满足进程的需要,因争夺陷入僵局
    • 竞争临时性资源 :消息通信处理顺序不当发生死锁
  • 进程间推进顺序非法
    • P1申请R1,P2申请R2,当P1申请R2被阻塞,P2申请R1被阻塞

必要条件

  • (1)互斥条件:指进程对所分配到的资源进行排它性使用 。
  • (2)请求和保持条件:指进程已经保持了至少一个资源,但又提出了新的资源请求 。
  • (3)不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。
  • (4)环路等待条件:指在发生死锁时,必然存在一个进程——资源的环形链 。(充分条件)

解决死锁的方法

  • 预防死锁:破坏四个必要条件中的一个或多个
  • 避免死锁:在资源动态分配过程中,使用某种方法去防止系统进入不安全的状态
  • 检测死锁:检测死锁的发生,并确定与死锁有关的进程和资源
  • 解除死锁:外力解脱。常用撤销或挂起一些进程

死锁的预防

使2.3.4条件之一不能成立,1因为使设备的固有属性决定,不能改变

  • 破坏请求和保持
    • 方法:所有进程在开始运行之前,都必须一次性地申请其在整个运行过程所需的全部资源,运行过程中不再提出资源要求
    • 优点:简单、易于实现且安全
    • 缺点:资源浪费严重,使进程延迟运行
  • 摈弃“不剥夺”条件
    • 方法:已保有一些资源的进程申请资源但是不能得到满足时,释放保持的所有资源。待以后需要再重新申请
    • 缺点:复杂、代价大
      • 被迫释放导致前段工作失效
      • 信息不连续
      • 进程执行可能会被无限推迟,增加开销,降低吞吐量
  • 摒弃“环路等待”
    • 方法:所有资源按类型进行排队并赋予不同的序号。按个按照资源序号递增的次序提出资源申请
    • 重要问题期末简答题
      • 第一,为系统中各类资源分配的序号必须相对稳定,这就限制了新设备类型的增加;
      • 第二,会经常发生作业使用的顺序与系统规定顺序不同的情况,造成资源浪费;
      • 第三,增加了程序设计难度

避免死锁

安全状态
是指系统按某种进程顺序,依次为n个进程分配所需的资源,直到满足最大需求,每个进程都可顺利的完成,称系统处于安全状态。若找不到安全序列<P1,P2,…,Pn>则称系统处于不安全状态

安全状态没有死锁,非安全状态可能有死锁

银行家算法(预测是否会出现死锁)

数据结构

  • 可利用资源向量:m个元素的数组,每一个元素代表一类可利用的资源数目.如Available[j]=k,即有k个Rj类资源
  • 最大需求矩阵:n × m的矩阵,n个进程对m类资源的最大需求.Max[n,m]
  • 分配矩阵:n × m的矩阵,n个进程已经分配到多少m类资源.Allocation[n,m]
  • 需求矩阵:n × m的矩阵,n个进程还需要多少m类资源.Need[n,m]
  • R e q u e s t i Request_i Requesti为Pi的请求向量
    流程图
    在这里插入图片描述
    安全性算法
  • 工作向量:系统可提供给进程继续运行所需要的各类资源数目,初值为Available
  • Finish[n]用于标记进程Pi是否已经获得所需的全部资源

在这里插入图片描述
回答题目时必须要写:存在安全序列<…>,是安全状态

死锁的检测

若不想附加太多约束条件预防死锁,也不希望增加系统开销避免死锁,之恶能允许死锁出现然后解除它。所以要检测死锁

死锁分配图(有向图)
结点 N N N,边 E E E组成对偶 G = ( N , E ) G=(N,E) G=(N,E)

  • 把N分为两个互斥的子集: 进程节点 P = { P 1 , P 2 , . . . , P n } P=\{P_1,P_2,...,P_n\} P={P1,P2,...,Pn}+资源节点 R = { r 1 , r 2 , . . . , r n } R=\{r_1,r_2,...,r_n\} R={r1,r2,...,rn},即 N = P ⋃ R N=P \bigcup R N=PR
  • E中的一个边 e ∈ E e \in E eE都连接P中的节点和R中的节点
    • e = { P i , r j } e=\{P_i,r_j\} e={Pi,rj},P_i请求一个单元的 r j r_j rj资源
    • e = { r j , P i } e=\{r_j,P_i\} e={rj,Pi},一个单位的资源 r j r_j rj分配给进程 P i P_i Pi

注意:图所展现的是状态,且是先分配后再申请
在这里插入图片描述
参考链接
(a)状态:R1三个已经分配完,不能再分配;R2已经分配一个,还可再分配一个;P1申请一个R2,P2申请一个R1
(b)由(a)作化简获得

具体步骤

  • 第一步:先看R1资源,它有三个箭头是向外的,因此它一共给进程分配了3个资源,此时,R1没有空闲的资源剩余。
  • 第二步:再看R2资源,它有一个箭头是向外的,因此它一共给进程分配了1个资源,此时,R2还剩余一个空闲的资源没分配。
  • 第三步:看完资源,再来看进程,先看进程P2,它只申请一个R1资源,但此时R1资源已经用光了,所以,进程P2进入阻塞状态,因此,进程P2暂时不能化成孤立的点。
  • 第四步:再看进程P1,它只申请一个R2资源,此时,系统还剩余一个R2资源没分配,因此,可以满足P1的申请。这样,进程P1便得到了它的全部所需资源,所以它不会进入阻塞状态,可以一直运行,等它运行完后,我们再把它的所有的资源释放。

死锁定理
若能消去资源分配图中所有节点的连接边,是全部节点称为孤立节点,则称该图是可完全化简图

当且仅当状态S的资源分配图是不可完全化简,S为死锁状态。(充分条件)

检测算法(了解即可)

死锁的解除

  • 剥夺资源:从其他进程剥夺足够资源给死锁进程
  • 撤销进程:释放部分或全部死锁资源
    • 释放部分进程一半都是采取特定顺序释放,遵循最小代价原则

最小代价原则

  • 到目前为止,花费处理机的时间最少的进程;
  • 到目前为止,产生输出最少的进程;
  • 估计未执行部分最多的进程;
  • 到目前为止,已获得资源量最少的进程;
  • 优先级最低的进程

哲学家问题改进

  • 改进一
    • 获得左边的筷子时,查看右边筷子是否可用,若不可用,则谦让,放下已获得的左边的筷子
    • 存在问题: 反复谦让
  • 改进二
    • 增加一个服务员控制,先让四个哲学家竞争,必然有一个哲学家能获得两只筷子,进餐完毕,然后让下一位哲学家入座,参与第二次竞争

  1. 周转时间: 接纳等待、执行等待、执行时间、I/O时间 ↩︎

  2. 响应时间:从用户通过键盘提交一个请求开始,直到屏幕上显示出处理结果为止的一段时间间隔。包括三个部分:输入时间、处理时间、显示时间 ↩︎

  3. 作业–服务时间; 进程–进程的剩余执行时间 ↩︎

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值