操作系统原理之进程调度与死锁(三)

一、进程调度的功能与时机

进程调度:进程调度的功能由操作系统的进程调度程序完成

具体任务:按照某种策略和算法从就绪态进程中为当前空闲的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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248198.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

模拟京东侧边栏

思路: // 1. 获取元素 // 1.1 获取一组li // 1.2 获取一组类名为item的div // 1.3 获取类名为slide的div// 2. 循环遍历给每一个li注册onmouseenter,并且每一个li添加一个index表示索引 // 2.1 循环遍历把所有的li的类名设置为,把所有的item的display设…

ViewPager + TabLayout + Fragment + MediaPlayer的使用

效果图 在gradle里导包 implementation com.android.support:design:28.0.0 activity_main <?xml version"1.0" encoding"utf-8"?><LinearLayout xmlns:android"http://schemas.android.com/apk/res/android" xmlns:tools"http…

vs code打开文件显示的中文乱码

这种情况下&#xff0c;一般是编码格式导致的&#xff0c;操作办法&#xff1a; 鼠标点击之后&#xff0c;上面会弹出这个界面&#xff0c;双击选中 然后从UTF-8换到GB2312&#xff0c;或者自己根据情况&#xff0c;更改编码格式 转载于:https://www.cnblogs.com/132818Creator…

操作系统原理之内存管理(第四章第一部分)

内存管理的⽬标&#xff1a;实现内存分配和回收&#xff0c;提高内存空间的利用率和内存的访问速度 一、存储器的层次结构 寄存器&#xff1a;在CPU内部有一组CPU寄存器&#xff0c;寄存器是cpu直接访问和处理的数据&#xff0c;是一个临时放数据的空间。 高速缓冲区&#xff1…

自写图片遮罩层放大功能jquery插件源代码,photobox.js 1.0版,不兼容IE6

版权声明&#xff1a;本文为博主原创文章。未经博主同意不得转载。 https://blog.csdn.net/u010480479/article/details/27362147 阿嚏~~~ 话说本屌丝没啥开发插件的经验&#xff0c;可是天公不作美&#xff0c;公司须要让我自己开发个图片放大的插件 但公司老大的话&#xff0…

黑白两客进入页面(1)

<div><span>欢</span><span>迎</span><span>来</span><span>到</span><span><strong>黑白两客</strong></span><span>的</span><span>博</span><span>客</sp…

zookeeper学习之原理

一、zookeeper 是什么 Zookeeper是一个分布式协调服务&#xff0c;可用于服务发现&#xff0c;分布式锁&#xff0c;分布式领导选举&#xff0c;配置管理等。这一切的基础&#xff0c;都是Zookeeper提供了一个类似于Linux文件系统的树形结构&#xff08;可认为是轻量级的内存文…

前端js基础智能机器人

<script>var flag true;while(flag) {//获取用户输入信息 var code prompt(你好,我是小娜\n请输入编号或者关键词选择功能,输入Q(q)退出聊天\n1.计算\n2.时间\n3.笑话);switch( code ) {case q:case Q:alert(狠心的抛弃了小娜);flag false;break;case 1:case 计算:var…

2018-2019-2 《Java程序设计》第6周学习总结

20175319 2018-2019-2 《Java程序设计》第6周学习总结 教材学习内容总结 本周学习《Java程序设计》第七章和第十章&#xff1a; 内部类&#xff1a; 1.内部类可以使用外嵌类的成员变量和方法。 2.类体中不可以声明类变量和类方法。 3.内部类仅供外嵌类使用。 4.类声明可以使用s…

Hbase基本原理

一、hbase是什么 HBase 是一种类似于数据库的存储层&#xff0c;也就是说 HBase 适用于结构化的存储。并且 HBase 是一种列式的分布式数据库&#xff0c;是由当年的 Google 公布的 BigTable 的论文而生。HBase 底层依旧依赖 HDFS 来作为其物理存储。 二、hbase的列式存储结构 行…

最终的动画函数封装(2)

<button>点击触发1</button><button>点击触发2</button><div></div><style>*{margin: 0;padding: 0;}div{width: 100px;height: 100px;background-color: red;position: relative;top: 100px;left: 0;}.div1{display: block;width: …

第二次JAVA作业

感觉和C语言后面都差不多&#xff0c;就是开头的定义和输入输出有点差别&#xff0c;多写几次应该能搞清楚开头的定义&#xff0c;接下来是四道题目的截图。 第一题&#xff1a; 第二题&#xff1a; 第三题&#xff1a; 第四题&#xff1a; 转载于:https://www.cnblogs.com/YSh…

js(Dom+Bom)第七天(1)

JavaScript BOM介绍 概念 BOM&#xff08;Browser Object Model&#xff09;即浏览器对象模型。 本质&#xff1a; 通过对象抽象浏览器中的一些功能 例如&#xff1a;&#xff08;刷新页面&#xff0c;alert,confirm,pormpt,跳转 ...&#xff09;BOM顶级对象 window对象是js中…

「十二省联考 2019」皮配——dp

题目 【题目描述】 #### 题目背景一年一度的综艺节目《中国好码农》又开始了。本季度&#xff0c;好码农由 Yazid、Zayid、小 R、大 R 四位梦想导师坐镇&#xff0c;他们都将组建自己的梦想战队&#xff0c;并率领队员向梦想发起冲击。 四位导师的**派系**不尽相同&#xff0c;…

链表中环的入口结点

题目描述 给一个链表&#xff0c;若其中包含环&#xff0c;请找出该链表的环的入口结点&#xff0c;否则&#xff0c;输出null。 分析 第一步&#xff1a;确定一个链表中是否有环 我们可以用两个指针来解决&#xff0c;定义两个指针&#xff0c;同时从链表的头结点触发&#xf…

java 线程之线程状态

Thread 类中的线程状态&#xff1a; public enum State {NEW,//新建RUNNABLE,// 执行态BLOCKED, //等待锁&#xff08;在获取锁的池子里&#xff09;WAITING,//等待状态TIMED_WAITING,//定时等待TERMINATED; //终止 } 创建状态&#xff08;NEW&#xff09;&#xff1a;当一个线…

目标元素拖动

<div class"box"><div class"title">拖拽效果</div></div>* {margin: 0;padding: 0;}.box {width: 350px;height: 300px;border: 1px solid #ccc;position: absolute;left: 50%;top: 50%;transform: translate(-50%, -50%);cursor…

操作系统原理之内存管理(第四章第二部分)

一、基本分页存储管理方式 1、分⻚存储管理的基本原理&#xff1a; 页&#xff1a;将⼀个进程的逻辑地址空间分成若⼲个⼤⼩相等的⽚页框&#xff1a;将物理内存空间分成与⻚⼤⼩相同的若⼲个存储块分⻚存储&#xff1a;将进程中的若⼲⻚分别装⼊多个可以不相邻的⻚框中页内碎片…

d3.js 教程 模仿echarts柱状图

由于最近工作不是很忙&#xff0c;隧由把之前的charts项目用d3.js重写的一下&#xff0c;其实d3.js文档很多&#xff0c;但是入门不是很难&#xff0c;可是想真的能做一个完成的&#xff0c;交互良好的图还是要下一番功夫的。今天在echarts找到了一个柱状图&#xff0c;如图。 …

简单的动画函数封装(2)

<div></div><!-- <span></span> --><button class"btn1">点击500</button><button class"btn2">点击800</button>div{width: 100px;height: 100px;background-color: red;position: absolute;top: …