操作系统原理之进程调度与死锁(三)
一、进程调度的功能与时机
进程调度:进程调度的功能由操作系统的进程调度程序完成
具体任务:按照某种策略和算法从就绪态进程中为当前空闲的CPU选择在其上运行的新进程。
进程调度的时机:进程正常或异常结束、进程阻塞、有更高优先级进程到来、时间⽚用完时都会导致进程调度。
二、进程调度算法
进程调度算法是指从就绪态的进程队列中,选择一个或几个进程为期分配cpu。
什么样的算法是好的算法?
- 周转时间短:作业从提交给系统开始,到作业完成,花费时间短
- 响应时间快:从用户提交作业开始,到系统开始响应,花费时间短
- 截止时间的保证:保证作业在“开始截止时间”前开始,在“完成截止时间”前完成
- 系统吞吐量高:系统在单位时间内完成的作业量多
- 处理机利用率好:CPU的利用率尽可能高
进程调度算法:
先来先服务调度算法(FCFS) :从就绪队列的队首选择最先到达就绪队列的进程,为该进程分配CPU
周转时间=进程的周转时间
系统平均周转时间=所有进程的周转时间之和,然后除以进程个数
带全平均周转时间w=每个进程的周转时间除以该进程的服务时间,然后相加,最后除以进程个数
缺点:服务时间段的进程等待时间较长,整个周转时间较长。
短进程优先调度算法(SPF):从就绪队列中选择估计运行时间最短的进程,为该进程分配CPU
优点 :与FCFS算法相比,短进程优先算法能有效降低进程的平均等待时间,提高系统吞吐量
缺点: 对长进程不利;不能保证紧迫进程的处理;进程长短由用户估计,不一定准确。
优先权调度算法:统将CPU分配给就绪队列中优先权最高的进程
- 非抢占式:运行期间,有更高优先权的进程到来,也不能剥夺CPU
- 抢占式:运行期间,有更高优先权的进程到来,就可以抢占CPU
优先权类型
- 静态优先权:创建时确定,运行期间保持不变
- 动态优先权:创建时确定,随着进程推进或等待时间增加而改变
该算法存在的问题:无穷阻塞(饥饿问题);解决的方案(老化技术):增加等待时间很长的进程的优先权
时间片轮转调度算法(RR):
系统将所有就绪进程按先来先服务的原则,排成一个队列,每次调度时把CPU分给队首进程,并令其执行一个时间片。当时间片用完时,调度程序终止当前进程的执行,并将它送到就绪队列的队尾。
1、时间片⼤小确定时
T=Nq T:系统响应时间 N:进程数量 q:时间片
- 系统对响应时间的要求:响应时间要求越短,时间片越小
- 就绪队列中进程的数目:进程数量越多,时间片越小
- 系统的处理能力:处理能力越好,时间片越小
【例】进程A、B、C、D需要运行的时间分别为20ms、10 ms、15 ms、5 ms,均在0时刻到达。到达的先后次序为A、B、C、D。如果时间片分别为1 ms和5ms,计算各个进程的带权周转时间和平均带权周转时间。
多级队列调度算法:将就绪队列分成多个独⽴队列,每个队列有自己的调度算法
优先级高队列 p1 、p2、 p3 、p4
优先级低队列 p5、 p6 、p7
多级反馈队列调度算法:建立多个优先权不同的就绪队列,每个队列有大小不同的时间片
队列优先权越高,时间片越短
队列优先权越低,时间片越长
三、实时系统中的调度
实现实时调度的基本条件:
1、提供必要的调度信息:就绪时间 、开始截止时间 、完成截止时间、处理时间、 资源要求 、优先级
2、系统处理能力强:假定系统中有m个周期性的实时进程,它们的处理时间可表示为Ci,周期时间表示为Pi,则在单处理机情况下,必须满足如下公式的限制条件:
3、采用抢占式调度机制(使用最广泛的方式)
4、具有快速切换机制: 对外部中断的快速响应能力 快速的进程切换能力
常用的实时调度算法:
1、最早截止时间优先算法EDF(淘宝&京东):开始截止时间越早,进程优先级越高,越优先获得CPU
2、最低松弛度优先算法LLF:根据实时进程的紧迫程度来进行调度的算法
四、进程切换
进程切换的含义:当前正在执行的进程成为被替换进程,让出其所使⽤的CPU,以运行被进程调度程序选中的新进程。
进程切换的步骤:
- 保存包括程序计数器和其他寄存器在内的CPU上下文环境
- 更新被替换进程的进程控制块
- 修改进程状态,把执行态改为就绪态或阻塞态
- 将被替换进程的进程控制块移到就绪队列或阻塞队列
- 执行通过进程调度程序选择的新进程,并更新该进程的进程控制块
- 更新内存管理的数据结构
- 恢复被调度程序选中的进程的硬件上下文
五、 多处理器调度
1、多处理器系统的类型:
- 紧密耦合 共享主存储器和I/O设备
- 松弛耦合 有各自的存储器和I/O设备
- 对称 处理单元功能和结构相同
- 非对称 有多种类型的处理单元 一个主处理器,多个从处理器
2、多处理器系统的进程分配方式:
对称系统分配方式:
静态分配:就绪队列的进程只能在与就绪队列对应的处理器上运行。
动态分配:进程随机地被分配到当时处于空闲状态的某一处理器上执行。
⾮对称系统分配方式:主-从式分配方式(大多采用)
3、进程(线程)的调度方式
⾃调度 最常用最简单的方式:采⽤自调度的系统中设置有一个公共的就绪队列,任何一个空闲的处理器都可以自行从该就绪队列中选取一个进程或者一个线程运行。
成组调度
专⽤处理器分配
六、 死锁
死锁的定义:由于多个进程竞争共享资源而引起的进程不能向前推进的僵死状态称为死锁
产生死锁的原因:竞争共享资源且分配资源的顺序不当
1、产生死锁的必要条件
- 互斥条件:只有一个资源,要么你用,要么我用
- 请求和保持条件:必须保持自己的条件,不能相让
- 不剥夺条件:不能抢占他人资源
- 环路等待条件:
2、处理死锁的基本方法
- 死锁的预防 通过破坏死锁的产生条件来保证不发生死锁
- 死锁的检测 检测当前系统是否出现死锁
- 死锁的避免 通过算法合理分配资源来保证不发生死锁
- 死锁的解除 检测到系统有死锁后进行解除
处理死锁的基本方法有:预防死锁、避免死锁、检测并解除死锁和忽略死锁问题
###############################处理死锁的基本方法详解###########################
1、死锁的预防
2、死锁的避免
例如:
银行家算法:一个进程提出资源请求后,系统先进行资源的试分配,分配后检测系统是否安全。银行家算法的实质是避免系统进入不安全状态。
例如:5个进程p0、p1、p2、p3、p4 3种类型的资源A、B、C
3、死锁的检测
何时调用检测算法
- 死锁可能发生的频率 ,发生频率很高时需要检测
- 死锁发生时受影响的进程数量,受影响的进程数量较多
资源分配图
系统初始化时分配给p1两个资源,p1又主动请求一个资源
系统初始化时分配给p2两个资源,p2又主动请求一个资源
死锁定理
用于检测系统所处的资源分配状态是否为死锁状态
S为死锁状态的充分条件是当且仅当S状态的资源分配图是不可完全简化的,即资源分配图是不是可以把申请资源的线全部消掉。
4、死锁的解除
解除途径
- 进程终止 终止所有死锁进程;一次只终止一个处于死锁的进程,直到死锁解除
- 资源抢占 逐步从进程中抢占资源给其他进程使用,直到死锁被打破为止
转载于:https://www.cnblogs.com/jalja/p/11432035.html
操作系统原理之进程调度与死锁(三)相关推荐
- 皮卡丘忠实粉丝之Web实现操作系统实验(进程调度+存储管理+死锁避免银行家算法)
**皮卡皮卡丘~~~~~~** 目录 进程调度 目的和要求 内容与步骤 运行结果 问题及心得 C语言实现代码 存储管理 目的和要求 内容与步骤 运行结果 问题及心得 C语言实现代码 死锁避免银行家算法 ...
- 优先级调度算法实现_《操作系统原理》实验一:进程调度
操作系统原理实验-进程调度实验报告 一.目的与要求 (1)进程是操作系统最重要的概念之一,进程调度是操作系统内核的重要功能,本实验选用XX语言编写了一个进程调度模拟程序,使用优先级或时间的轮转法实现进 ...
- 实验三银行家算法linux,操作系统原理与linux_银行家算法实验报告.doc
. . . PAGE 成 绩 评 阅 人 评阅日期 计算机科学与技术系 实 验 报 告 课程名称: 操作系统原理与linux 实验名称: 银行家算法 2011年 04 月 实验三 银行家算法 一.实验 ...
- 操作系统原理第七章:死锁
目录 1 死锁的基本概念 2 死锁的必要条件 3 死锁预防 3.1 抑制死锁发生的必要条件 4 死锁避免 4.1 资源分配图法 4.2 银行家算法 5 死锁的检测 5.1 每一种资源类型只有一个实例 ...
- 【操作系统】处理机调度与死锁(三)
[操作系统]处理机调度与死锁(三) 一.前言 二.处理机调度的层次 2.1 高级调度 2.2 低级调度 2.3 中级调度 三.调度队列模型和调度准则 3.1 仅有进程调度的调度队列模型 3.2 具有高 ...
- 【考研复习】《操作系统原理》孟庆昌等编著课后习题+答案——第三章
前言 此书在最后的附录B中,有给出部分重难点部分的参考答案.会在最后放上图片.如果想要此书习题答案,可点以下链接:为一个压缩包,以图片形式,习题图片按章节排序,答案图片按书页排序. <操作系统原 ...
- 操作系统原理学习(第三周_上)_进程
3-1 进程概念 process 1.顺序执行 ①顺序环境计算机只有一个程序在运行,改程序独占系统中所有资源,其执行不收外界影响. ②顺序执行的特征: 顺序性:按程序结构所指定的次序 封闭性:独占系统 ...
- 进程调度(第三章 处理调度与死锁)
多道程序环境下,主存中进程数目往往多于处理机数目.要求系统通过某种算法动态的将就绪队列中的进程分配给处理机执行. 3.1 处理机调度的层次 批量型作业:作业调度(高级调度.长程调度)+进程调度(低级调 ...
- 操作系统原理实验二(三)
继续完成操作系统原理的实验 4.5(实验目的:熟悉Window线程创建过程)在windows环境下,利用高级语言编程环境(限定为VS环境或VC环境)调用CreateThread函数实现"并发 ...
最新文章
- mysql运用与实践_MySQL开发与实践 PDF 下载
- chrome 调试 ios h5
- 【HDOJ4699】Editor(对顶栈,模拟)
- Android自动化测试在多种屏幕下的注意事项
- Centos7 Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon run
- 【IoT】产品外包策略:外包地图-充分利用内外部资源
- 三角肌前束(01):直臂前平举
- typeof和instanceof的区别
- 超灵敏检测!Enzo HEK293T宿主细胞蛋白ELISA试剂盒
- 阿里云Oss云存储的使用
- 计算机应用基础客观答案,20春国家开放大学计算机应用基础客观题资料参考答案...
- 欧姆龙服务器显示oE,在公网如何配置OE客户端
- matlab画线的形状颜色
- 仿抖音--音乐裁剪控件,android实现IOS版本效果
- 测试人员必备-用adb抓取APP日志的方法
- cpu软改vista 驱动_在Windows 7、8或Vista中启动分配给特定CPU的应用程序
- css自定义字体font-face的兼容和使用
- QAbstractSlider、QSlider、QDial、QScrollBar
- 关于高德地图定位跑到非洲的情况。
- 基于JAVA薪酬福利管理信息系统计算机毕业设计源码+系统+数据库+lw文档+部署
热门文章
- Optical_Flow(2)
- Lua中的模块和使用
- VS2015新建C++工程时,Object reference not set to an instance of an object
- 公司注册资金100万欠债1千万,股东还100万,剩下的900万怎么办?
- VC,一条会被鼠标移动的直线
- 改变ComboBox控件的高度
- android linux kernel VS standard linux kernel
- 达内软件测试证书是什么证书,达内软件测试培训让我拥有了实际工作经验
- matlab slider不可移动,GUI界面能运行,但是_slider不能用,不能控制波长
- php 年的第几天,收藏-php中某年第几天计算出日期年月日的代码