操作系统(三)

思维导图
在这里插入图片描述

3.1处理机调度概述

3.1.1处理机调度层次

高级调度(长程调度/作业调度)

中级调度(中程调度/ 内存调度)

低级调度(短程调度/进程调度)

3.1.1.1高级调度

调度对象:作业

根据某种算法,决定将外存上处于后备队列中的作业调入内存,并为它们创建进程和分配必要的资源。然后,将新创建的进程排在就绪队列上等待调度。

主要用于多道批处理系统中

3.1.1.2中级调度

将暂不运行的进程,掉至外存等待;

将处于外存上急需运行的进程,调入内存运行

即“对换”功能 这将在存储器管理章节进行介绍

3.1.1.3低级调度

调度对象:进程

根据某种调度算法,决定就绪队列中的哪个进程应该获得处理机

应用在多道批处理,分时和实时OS

3.1.2进程调度的任务和方式

进程调度的任务

保存处理机的现场信息

按某种算法选取进程

把处理器分配给进程

在这里插入图片描述
进程调度机制

排队器:用于将就绪进程插入相应的就绪队列

分派器:用于将选定的进程移出就绪队列

上下文切换器:进行新旧进程之间的上下文切换

3.1.2进程调度的方式

非抢占方式

—旦把处理机分配给某进程后,便让该进程一直执行,直至该进程完成或发生某事件而被阻塞时,才再把处理机分配给其他进程,决不允许某进程抢占已经分配出去的处理机。

抢占方式

抢占方式∶允许调度程序根据某种原则,去暂停某个正在执行的进程,将已分配给该进程的处理机重新分配给另一进程。(现代OS广泛采用)

优先权原则∶允许优先权高的新到进程抢占当前进程的处理机

短作业优先原则∶短作业可以抢占当前较长作业的处理机

时间片原则︰各进程按时间片运行,当一个时间片用完后,便停止该进程的执行而重新进行调度

3.1.3处理机调度算法的目标

资源利用率

公平性

平衡性

策略强制执行

批处理系统的目标

平均周转时间短、系统吞吐量高、处理机利用率高

分时系统的目标

响应时间快、均衡性

实时系统的目标

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

在这里插入图片描述

3.1.4评价指标

周转时间

  • 从作业提交给系统开始,到作业完成为止的这段时间间隔。

  • 平均周转时间:
    T = 1 n ∑ i = 1 n T i T=\frac{1}{n}\sum_{i=1}^{n} T_i T=n1i=1nTi

  • 带权周转时间:权值为作业周转时间T与系统为之服务时间TS之比

  • 响应时间:从用户通过键盘提交请求开始,直到系统首次显示出结果为止的一段时间

  • 等待时间:进程在就绪队列中等待调度的所有时间之和

3.2调度算法

3.2.1作业调度算法

先来先服务(FCFS)

短作业优先调度(SJF)

优先级调度算法(PR进程紧迫程度)

高响应比优先调度算法(HRRN)

3.2.1.1先来先服务

按照作业到达的先后次序来进行调度

在这里插入图片描述

3.2.1.2短作业优先算法:

即可用于作业,也可用于进程

对作业来说:从后背队列中选择若干个估计运行时间最短的作业。

对进程:关联到每个进程下次运行的CPU区间长度,调度最短的进程。

对进程调度,SJF两种模式

非抢占式SJF

抢占式SJF:抢占发生在有比当前进程剩余时间片更短的进程到达时,也称为最短剩余时间优先调度。

SJF是最优的(对一组指定的进程而言),他给出了最短的平均等待时间

举例
在这里插入图片描述
缺点

  • 只能估算进程的运行时间(估值不准确),所以常用于作业调度
  • 对长作业不利
  • 采用SJF算法时,人-机无法实现交互
  • 完全未考虑作业的紧迫程度
3.2.1.3优先级调度算法(PR)

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

基于作业/进程的紧迫程度,由外部赋予作业相应的优先级,调度算法根据优先级进行调度。

  • 每个进程都有一个优先数,优先数为整数
  • 默认:小的优先数具有更高优先级
  • 目前主流的操作系统调度算法

进程优先级调度算法

两种类型:非抢占式,抢占式

优先级类型

静态优先级

  • 创建进程时确定优先数(整数),在进程的整个运行期间保持不变
  • 简单易行,系统开销小
  • 不够精确,可能会出现优先级低的进程长期没有被调度的情况

动态优先级

  • 创建进程时先赋予其一个优先级,然后其值随进程的推进或等待时间的增加而改变

举例

在这里插入图片描述

优点

实现简单,考虑

实现简单,考虑了进程的紧迫程度

灵活,可模拟其它算法

存在问题
饥饿——低优先级的进程可能永远得不到运行

解决办法

视进程等待时间延长提高其优先数。
在这里插入图片描述

3.2.1.4高响应比优先调度算法

既考虑作业的等待时间,又考虑作业的运行时间。

响应比:Rp = (等待时间+要求服务时间)/要求服务时间

如果等待时间相同,运行时间越短,类似于SJF。

如运行时间相同,取决于等待时间,类似于FCFS

长时间可随等待时间的增加而提高,也可得到服务。

缺点:每次调度之前,都需要计算响应比,增加系统开销。

3.2.1.5时间片轮转调度算法(PR)
  1. 专为分时系统设计,类似于FCFS,但增加了抢占
  2. 时间片:小单位的CPU时间,通常为10~100毫秒
  3. 为每个进程分配不超过一个时间片的CPU。时间片用完后,该进程将被抢占并插入就绪队列末尾,循环执行。
  4. 假定就绪队列中有n个进程、时间片为q,则每个进程每次得到1/n的、不超过q单位的成块CPU时间,没有任何一个进程的等待时间会超过(n-1) q单位

举例


相关特性:q大变为FCFS q小增加上下文切换的时间

时间片设置应考虑

  • 系统对响应时间的要求
  • 就绪队列中进程的数目
  • 系统的处理能力

一般准则:时间片/10 > 进程上下文切换时间

举例

相关特性:q大变为FCFS q小增加上下文切换的时间

时间片设置应考虑

  • 系统对响应时间的要求
  • 就绪队列中进程的数目
  • 系统的处理能力

一般准则:时间片/10 > 进程上下文切换时间

举例
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2.1.6多级队列调度算法

就绪队列从一分为多个,如:

前台[交互式] 后台[批处理]

每个队列都有自己的调度算法

例子:前台-RR 后台-FCFS

调度需在队列间进行

固定优先级调度,即前台运行完再运行后台,有可能产生饥饿。

给定时间片调度,即每个队列得到一定的CPU时间,进程在指定时间内执行;如80%的时间执行前台的RR调度,20%执行后台的FCFS调度。

特点

进程能在不同的队列间移动

优点:不必事先知道各种进程所需要的执行时间

可以满足各种类型进程的需要

其他队列的局限性:

短进程优先的调度算法,仅照顾了短进程而忽略了长进程。

如果未指明进程的长度,则短进程优先和基于进程长度的抢占式调度算法都将无法使用。
在这里插入图片描述

3.2.1.7基于公平原则的调度算法

主要考虑调度的公平性(从不同角度体现公平性)。

保证调度算法︰

性能保证,而非优先运行;

如保证处理机分配的公平性(处理机时间为1/n )。公平分享调度算法︰

调度的公平性主要针对用户而言;

使所有用户能获得相同的处理机时间或时间比例。

3.3实时调度

实时调度,都联系着一个截止时间

硬实时任务HRT

软实时SRT任务

实时调度具备一定的条件

3.3.1实现实时调度的基本条件
  1. 提供必要的信息:如,就绪时间、开始截止时间和完成截止时间、处理时间、资源要求、优先级
  2. 系统处理 能力强:单处理系统,满足 ∑ i = 1 n c i p i ≤ 1 \sum_{i=1}^{n} \frac{c_i}p_i \leq 1 i=1npcii1,多处理系统 ∑ i = 1 n c i p i ≤ N \sum_{i=1}^n \frac{c_i}p_i \leq N i=1npciiN
  3. 采用抢占式调度机制:广泛采用抢占调用,如果能预知开始截止时间,也可以采用非抢占机制
  4. 采用快速切换机制 :对中断具有快速响应能力,快速的任务分派能力
3.3.2 实时调度算法分类

根据实时任务性质

HRT调度算法 ,SRT调度算法

根据调度方式

非抢占式调度算法

抢占式调度算法

非抢占式轮转调度算法

为每个对象创建实时任务,排队轮流调度

响应时间:数秒至数十秒

可用于要求不太严格的实时控制系统

非抢占式优先调度算法

为少数实时任务分配高优先级,优先调度

响应时间:数秒至数百毫秒

可用于一定要求的实时控制系统。

抢占式调度算法

基于始终中断的可抢占式优先级调度

  • 产生时钟中断后,发生调度
  • 响应时间:几十毫秒至几毫秒
  • 可用于大多数实时系统

立即抢占的优先级调度

  • 外部中断,直接抢占
  • 响应时间∶几毫秒至几百微秒
  • 可用于有严格时间要求的实时系统
3.3.3最早时间EDF调度算法

最先要求截止的更紧急

  • EDF根据任务的截止时间确定优先级,截止时间越早,优先级越高
  • 即可用于抢占式调度,也可用于非抢占式调度
  • 非抢占式调度用于非周期实时任务
  • 抢占式调度用户周期实时任务
    在这里插入图片描述
    在这里插入图片描述
3.3.4最低松弛度优先LLF算法

根据任务的紧急程度(松弛度)确定任务优先级

紧急程度越高(松弛度越低),优先级越高

松弛度=必须完成时间-其本身所需的运行时间-当前时间主要用在抢占式调度方式中

例子∶两个周期性实时任务A和B,任务A要求每20 ms执行一次,执行时间为10 m在这里插入图片描述
s,任务B要求每50 ms执行一次,执行时间为25 ms

3.3.5优先级倒置现象

采用优先级调度和抢占方式,可能产生优先级倒置。现象︰高优先级进程被低优先级进程延迟或阻塞。

Eg:低优先级进程拿到信号量被中优先级抢占,高优先级得不到信号量

解决方法:
制定一些规定,如规定低优先级进程执行后,其所占用的处理机不允许被抢占;
建立动态优先级继承∶低优先级进程继承高优先级,确保不被中优先级进程中断,直至释放信号量

3.4 Linux进程调度

默认调度算法︰完全公平调度CFS算法。(2.6.23内核)

基于调度器类∶允许不同的可动态添加的调度算法并存,每个类都有一个特定的优先级。

总调度器︰根据调度器类的优先顺序,依次对调度器类中的进程进行调度。

调度器类∶使用所选的调度器类算法(调度策略)进行内部的调度。

调度器类的默认优先级顺序为:Stop_Task >Real_Time > Fair > ldle_Task开发者根据需求,把所属的task配置到不同的调度器中。


普通进程调度:

采用SCHED_NORMAL调度策略。

分配优先级、挑选进程并允许、计算使其运行多久。

CPU运行时间与友好值(-20~+19)有关,数值越低优先级越高。

实时进程调度

实时调度的进程比普通进程具有更高的优先级。

SCHED_FIFO:进程若处于可执行的状态,就会一直执行,直到它自己被阻塞或者主动放弃CPU。

SCHED_RR:与SCHED_FIFO大致相同,只是进程在耗尽其时间片后,不能再执行,而是需要接受CPU的调度。

3.4死锁概述

死锁(DeadLock) :死锁(Deadlock ) ︰指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,这些进程都将永远不能再向前推进。

3.4.1 资源相关问题

可重用性资源和可消耗性资源

可重用性资源:一次只能分配给一个进程,不允许多个进程共享,遵循︰请求资源->使用资源->释放资源(大部分资源)。

可重用性资源:一次只能分配给一个进程,不允许多个进程共享,遵循︰请求资源->使用资源->释放资源(大部分资源)。

可抢占性和不可抢占性资源

可抢占性资源︰某进程在获得这类资源后,该资源可以再被其他进程或系统抢占,CPU(处理机)和主存区。

不可抢占资源︰当系统把这类资源分配给某进程后,再不能强行收回,只能在进程用完后自行释放,打印机、磁带机。

3.4.2 死锁产生原因(不是必要条件)
  1. 竞争不可抢占资源
  2. 竞争可消耗性资源
  3. 进程推进不当
3.4.3 产生死锁的必要条件
  • 互斥
  • 请求和保持
  • 不可抢占
  • 循环等待
    在这里插入图片描述
3.4.4处理死锁的方法

1 保证系统不会进入死锁状态

  • 死锁预防

  • 死锁避免

2 允许系统进入死锁

  • 死锁检查

  • 恢复系统

3 忽略这个问题,表示I don’t care

主要是破坏必要条件

3.4.4.1预防死锁

互斥:破坏互斥条件,基本不可实现,因为互斥条件是共享资源必须的,不仅不能改变,还应加以保证

请求和保持:必须保证进程申请资源的时候没有占有其他资源

  • 要求进程在执行前一次性申请全部的资源,只有没有占有资源时才可以分配资源
  • 资源利用率低,可能出现饥饿
  • 改进∶进程只获得运行初期所需的资源后,便开始运行﹔其后在运行过程中逐步释放已分配的且用毕的全部资源,然后再请求新资源

非抢占∶

如果一个进程的申请没有实现,它要释放所有占有的资源;

先占的资源放入进程等待资源列表中﹔

进程在重新得到旧的资源的时候可以重新开始。

循环等待 :对所有的资源类型排序进行线性排序,并赋予不同的序号,要求进程按照递增顺序申请资源。

如何规定每种资源的序号是十分重要的;

限制新类型设备的增加;

作业使用资源的顺序与系统规定的顺序不同﹔

限制用户简单、自主的编程。
在这里插入图片描述

3.5 避免死锁

再分配资源时:判断是否能否分配以避免死锁

设一个简单而有效的模型,要求每一个进程声明它所需要的资源的最大数。

死锁避免算法动态检查资源分配状态以确保不会出现循环等待的情况。

资源分配状态定义为可用的与已分配的资源数,和进程所需的最大资源量。

35.1安全状态

当进程申请一个有效的资源的时候,系统必须确定分配后是安全的。如果存在一个安全序列,则系统处于安全态。

进程序列<P1,P2,…, Pn>是安全的,如果每一个进程Pi所申请的可以被满足的资源数加上其他进程所持有的该资源数小于系统总数。

如果Pi需要的资源不能马上获得,那么Pi等待直到所有的Pi-1进程结束。当Pi-1结束后,Pi获得所需的资源,执行、返回资源、结束。

基本事实:如果一个系统处于不安全状态,就有可能出现死锁

死锁避免→ 确保系统永远不会进入不安全状态
在这里插入图片描述
在这里插入图片描述

3.5.2避免死锁算法

银行家算法具体步骤

  • 针对资源有多个实例
  • 每一个进程必须事先声明使用的最大量
  • 当一个进程请求资源,他可能需要等待
  • 当一个进程得到所有的资源,它必须在有限的时间释放他们

这个算法在实验中做过,后面开一个文章做

3.6 死锁的检测与解除

资源类型 有cpu 内存 io设备

每一种类型R有不同W种 实例

每一个进程通过如下方法:

申请 使用 释放

3.6.1资源分配组成

一个顶点的集合V和边的集合E在这里插入图片描述
在这里插入图片描述

3.6.2死锁检测和解除

如果没有采取限制性措施,则系统必须提供检测和解除死锁的手段,系统必须

  • 保存有关资源的请求和分配信息
  • 提供一种算法,以利用这些信息来检测系统是否已经进入死锁状态
3.6.3资源分配图的简化

在资源分配图中,找出一个既不阻塞又非独立的进程结点p,。在顺利的情况下,p;可获得所需资源而继续运行,直至运行完毕,再释放其所占有得全部资源,这相当于消去p;所有的请求边和分配边,使之成为孤立的结点;

pz释放资源后,便可使pz获得资源而继续运行,直到pz完成后又释放出它所占有的全部资源;

在进行一系列的简化后,若能消去图中所有的边,使所有进程都成为孤立结点,则称该图是可完全简化的;若不能通过任何过程使该图完全简化,则称该图是不可完全简化的。在这里插入图片描述

3.6.4死锁定理

对于较复杂的资源分配图,可能有多个既未阻塞、又非孤立的进程结点,不同的简化顺序,是否会得到不同的简化图?有关文献已经证明,所有的简化顺序,都将得到相同的不可简化图。

S为死锁状态的充分条件是:当且仅当S状态的资源分配图是不可完全简化的。该充分条件称为死锁定理。

死锁检测算法

这里不过多概述,主要是找到是否无法简化完

3.6.5死锁解除

两种方法:

抢占资源:从一个或多个进程中抢占足够数量的资源给死锁进程,以解除死锁状态。

终止或撤销进程:终止或撤消进程。终止系统中一个或多个死锁进程,直到打破循环环路,使死锁状态消除为止。

终止或撤消进程。终止系统中一个或多个死锁进程,直到打破循环环路,使死锁状态消除为止。

终止所有死锁进程(最简单方法)

逐个终止进程(稍温和方法)

3.6.6进程终止
  • 中断所有的死锁进程
  • 一次消除一个

如何考虑中断顺序

  • 进程的优先级﹔
  • 进程需要计算多长时间,以及需要多长时间结束﹔
  • 进程使用的资源,进程完成还需要多少资源;
  • 进程是交互的还是批处理的。在这里插入图片描述

3.7总结

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值