首页 > 其他分享 >处理机调度与死锁

处理机调度与死锁

时间:2023-10-10 21:13:08浏览次数:30  
标签:算法 处理机 队列 调度 死锁 进程 资源

一、处理机调度的层次

概念

  • 按什么原则分配CPU:调度算法。
  • 何时分配CPU:调度时机。
  • 如何分配CPU:调度过程。
  • 周转时间:完成时间-进入时间。(注意:从进入系统到执行完成包括在后备队列中等待调度、在就绪队列中等待进程调度、执行以及等待I/O操作完成四部分时间,作业进入是指作业准备好被调度的状态)。
  • 平均周转时间:周转时间/执行时间。
  • 资源利用率:CPU有效工作时间/(CPU有效工作时间+CPU空闲等待时间)。

处理机调度的层次

  1、高级调度(作业调度):调度对象是作业,主要功能:根据某种算法,决定将外存上处于后备队列中的哪几个作业调入内存,为它们创建进程、分配必要的资源,并将其放在就绪队列中
  2、低级调度(进程调度):调度对象是进程,主要功能:根据某种算法,决定就绪队列中哪个进程应获得处理机,并由分派程序将处理机分配给被选中的进程。(即分配哪个进程进入运行状态
  3、中级调度(内存调度):其主要目的是提高内存利用率和系统吞吐量。当一个进程暂时不能运行时,它被调至外存等待,此时该进程为挂起状态。当这个进程具备继续运行条件又稍有空闲时,由中级调度来决定,把外存上的那些已经具备运行条件的就绪进程重新调入内存,并修改其状态为就绪状态,挂在就绪队列上等待。

二、作业与作业调度

  作业:不仅包含通常的程序和数据,还应配有一份作业说明书,系统根据该说明书对程序的运行进行控制。在批处理系统中,是以作业为基本单位从外存调入内存的。

2.1 先来先服务(FCFS)调度算法

  就绪队列中最先进入队列的进程,先为之分配处理机运行,直至其结束或阻塞,将处理机分配给其他进程。有利于长作业,CPU繁忙型作业。可用于作业调度,也可用于进程调度。

2.2 短作业优先(SJF)调度算法

  作业越短,优先级越高(注意:若一个进程已进入,而其他进程未进入,尽管未进入的进程作业更短,但仍先执行已进入的作业)。可用于作业调度,也可用于进程调度。

2.3 优先级调度算法(PSA)

  可用于作业调度,也可用于进程调度。作业调度:选择-创建进程-放入就绪队列。进程调度:选择-分配处理机。

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

  主要用于作业调度。每次计算所有符合被调度条件(已经进入)的作业的响应比(响应比=周转时间/处理时间),响应比高的先处理,然后再继续计算下一步中所有符合被调度条件的作业的响应比,直到所有作业被调度完毕。

2.5 时间片轮转调度算法

  主要用于进程调度,时间片大小需选择合适:太大退化为FCFS,太小切换频繁,用于运行时间太少。其举例具体实现过程如下:

2.6 多级队列调度算法

  主要用于进程调度。将就绪队列分成若干子队列,每个进程属于一个就绪队列,每个就绪队列采用一种调度算法

2.7 多级反馈队列调度算法

  调度机制:

  • 设置多个就绪队列,并为每一个就绪队列赋予不同的优先级,第一个队列优先级最高,依次降低。该算法为不同队列中的进程所赋予的执行时间片的大小也各不相同,在优先级越高的队列中,时间片越小。
  • 每个队列都采用FCFS算法。新进程进入内存后,先将其放在第一个队列末尾,按FCFS算法等待调度,轮到该进程执行时,若它能在时间片内完成,便可撤离系统,否则将其转入第二个队列的末尾,等待调度,若在第二个队列中运行一个时间片后仍未完成,转入第三个队列,依次类推。当进程最后被降到第n队列后,在第n队列中便采取RR方式运行。
  • 按队列优先级调度。仅当前面队列都空闲时,当前队列才能够执行。

三、死锁

3.1 死锁

3.1.1 死锁定义

  一组进程中,每个进程都无限等待被该组进程中另一进程所占有的资源,因而永远无法得到该资源,这种现象称为进程死锁,这一组进程就称为死锁进程。
  结论:

  • 参与死锁的进程最少是两个
  • 参与死锁的进程至少两个已经占有资源
  • 参与死锁的所有进程都在等待资源
  • 参与死锁的进程是当前系统中所有进程的子集

3.1.2 产生死锁的必要条件

  • 互斥条件:涉及的资源是非共享的。
  • 不可抢占条件(不可剥夺条件):不能强行剥夺进程拥有的资源。
  • 请求和保持条件:进程在等待一新资源时继续占有已分配的资源。
  • 循环等待条件:存在一种进程的循环链,链中每一个进程已获得的资源同时被链中下一个进程请求。

3.1.3 处理死锁的方法

  • 预防死锁:通过设置某些限制条件,去破坏死锁四个必要条件中的一个或多个,来防止死锁。
  • 避免死锁:在资源动态分配过程中,用某种方法去防止系统进入不安全状态,从而避免死锁的发生。
  • 检测死锁
  • 解除死锁:与检测死锁配套。

3.2 预防死锁

  互斥条件是非共享设备所必须的,不能改变

  • 破坏不可剥夺条件:一个已拥有资源的进程,若它再提出新资源要求而不能立即得到满足时,必须释放已经拥有的所有资源。以后需要时再申请。
  • 破坏请求和保持条件:系统要求所有进程一次性地申请在整个运行过程中所需的全部资源。若系统有足够资源则全部分配。
  • 破坏循环等待条件:系统中的所有资源都有一个确定的唯一号码,所有分配请求必须以序号上升的次序进行

3.3 避免死锁

  死锁避免定义:在系统运行过程中,对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源,若分配后系统可能发生死锁,则不予分配,否则予以分配。
  安全状态:如果系统能按某种顺序(如P 4,P 1,·,Pn,称为安全序列)为每个进程分配其所需的资源,直至所有进程都能运行完成。称系统处于安全状态。若不存在这样一个安全序列称系统处于不安全状态。

银行家算法

1、数据结构

  • 可利用资源向量Available。含有m个元素的数组,每一个元素代表一类可利用的资源数目。
  • 最大需求矩阵MAX。n×m矩阵,定义系统中n个进程中的每一个进程对m类资源的最大需求。
  • 分配矩阵Allocation。系统中每一类资源已分配给每一进程的资源数。
  • 需求矩阵Need。每一个进程尚需要的各类资源数。
  • Need[i,j]=Max[i,j]-Allocation[i,j]。

2、银行家算法

  • 若Request i[j]<=Need[i,j],继续检查;否则认为出错,请求大于需求。
  • 若Request i[j]<=Available[i,j],继续检查,否则,等待,资源不够。
  • 试探分配给进程Pi:Available[i,j]-=Request i[j];Allocation[i,j]+=Request i[j];Need[i,j]-=Request i[j]。
  • 系统执行安全性算法,若系统新状态是安全的,则分配完成,若系统新状态是不安全的,则恢复原状态,进程等待。

3、安全性算法

  • 设置两个向量:可利用资源work,work=Available;标记进程是够结束Finish=false(还未释放)
  • 从进程集合中选择满足条件的进程:1、Finish[i]=false;2、Need[i,j]<=work[j];若不存在,转(4)。
  • 执行Work[j]+=Allocation[i,j];Finish[j]=true;go to step2。
  • 若所有进程Finish[i]=true都满足,表示系统处于安全状态,否则,处于不安全状态。

4、银行家算法例子
  假定系统中有五个进程{P0,P1,P2,P3,P4}和三类资源{A,B,C},各种资源的数量分别为10、5、7,在T0时刻的资源分配情况如图所示。

  T0时刻的安全性:利用安全性算法对To时刻的资源分配情况进行分析(如图所示)可知,在To时刻存在着一个安全序列{P1,P3,P4,P2,P0},故系统是安全的。

  将剩下的资源执行银行家算法,看是否处于安全状态。

3.4 死锁的检测与解除

  死锁检测:允许死锁发生,操作系统不断监视系统进展情况,判断死锁是否发生。一旦死锁发生则采取专门的措施,解除死锁并以最小的代价恢复操作系统运行。
  死锁解除:重要的是以最小的代价恢复系统的运行。方法如下:1、重新启动;2、撤消进程;3、剥夺资源;4、进程回退。
  用有向图描述进程的死锁。 系统由若干类资源构成,一类资源称为一个资源类;每个资源类中包含若干个同种资源,称为资源实例。二元组G=(V,E),V:结点集,分为P,R两部分,进程P={p1,p2,…,pn},资源R={r1,r2,…,rm},E:边的集合,其元素为有序二元组请求资源(pi,rj)或分配资源(rj,pi)。表示法:方框表示资源,圆圈表示进程,方框中的黑圆点表示资源实例。例如:

  死锁定理:如果资源分配图中没有环路,则系统中没有死锁,如果图中存在环路则系统中可能存在死锁。如果每个资源类中只包含一个资源实例,则环路是死锁存在的充分必要条件。
  资源分配图化简

  • 找一个非孤立进程结点且只有分配边,去掉分配边,将其变为孤立结点
  • 再把相应的资源分配给一个等待该资源的进程,即将某进程的申请边变为分配边
  • 重复以上步骤,若所有进程成为孤立结点,称该图是可完全简化的,否则称该图是不可完全简化的。

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

标签:算法,处理机,队列,调度,死锁,进程,资源
From: https://www.cnblogs.com/QwertyWang/p/os_3.html

相关文章

  • 整理常见问题一死锁条件
    1、死锁的条件死锁是两个或两个以上的进程在执行过程中,由于竞争资源或进程推进顺序非法造成的阻塞现象,若无外力作用将无法推进下去。四个必要条件1)互斥条件:一个资源每次只能被一个进程使用(涉及的资源是非共享的)2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不......
  • 死锁
    1、什么是死锁?死锁是一组互相竞争资源的线程,因为互相等待,导致的永久阻塞。2、产生死锁的原因?互斥:共享资源x和y只能被一个线程占用占有且等待:线程t1已经取得资源x,在等待资源y的时候不释放资源x不可抢占:其他线程不能强行抢占线程t1占有的资源循环等待:线程t1等待线程t2占有的......
  • 死锁和Lock锁
    死锁就是两个线程都有着一个对象的锁 然后下一步都想去拿另外一个线程的锁,因为两个线程有的锁还没解开,形成循环僵持,谁都想要另外一个线程的锁,但是又没解开自己拿到的锁。 解决办法示例: 就是可以等另外一个线程解开了锁然后再去拿锁。 Lock锁:和synchonized锁是一样的......
  • SQL SERVER 死锁查询存储
    –execsp_who_lock查询哪个库的死锁,存储就建立在哪个库上IFEXISTS(SELECT*FROMsys.objectsWHEREobject_id=OBJECT_ID(N’[dbo].[sp_who_lock]’)ANDtypein(N’P’,N’PC’))DROPPROCEDURE[dbo].[sp_who_lock]GOcreateprocedure[dbo].[sp_who_lock]asbegindecl......
  • nginx实现后端tomcat的负载均衡调度
    1.负载均衡主机和网络地址规划10.0.0.152proxy.magedu.orgnginx10.0.0.150t1.magedu.orgtomcat110.0.0.160t2.magedu.orgtomcat2#只需在10.0.0.52的nginx主机上实现域名解析[root@localhost~]#cat/etc/hosts127.0.0.1localhost......
  • LVS调度算法总结
     ipvsscheduler:根据其调度时是否考虑各RS当前的负载状态,分为两种:静态方法和动态方法静态方法:仅根据算法本身进行调度1、RR:roundrobin,轮询。较常用2、WRR:WeightedRR,加权轮询。较常用3、SH:SourceHashing,实现sessionsticky,源IP地址hash。将来自于同一......
  • MySQL innoDB 间隙锁产生的死锁问题
    背景线上经常偶发死锁问题,当时处理一张表,也没有联表处理,但是有两个mq入口,并且消息体存在一样的情况,频率还不是很低,这么一个背景,我非常容易怀疑到,两个消息同时近到这一个事务里面导致的,但是是偶发的,又模拟不出来什么场景会导致死锁,只能进行代码分析,问题还原的方式去排查问题。业......
  • 嵌入式裸机设计思想——时间片轮裸机开发架构+状态机+定时器调度机制
    前言(1)(2)在MCU开发的时候,很多入门者会固执的认为,做项目一定要上实时操作系统。但是真的是这样的吗?(3)我曾经阅读过一位10年嵌入式开发经验的大佬分享的公众号,这位大佬感叹到,其实对于绝大多数时候,MCU开发不需要上操作系统。只要任务分配的合理,百分之九十的项目不上操作系统都是能够跑......
  • 26演示进程死锁
     importmultiprocessingasmpimporttime'''示例代码:创建了两个进程,并且两个进程都试图获取两个资源lock_b和lock_a。如果两个进程在同时获取资源时产生了交叉等待,发生死锁.要避免多个进程频繁竞争锁,可以尝试以下方法:1.减少锁的使用:在设计应用程序时,尽量减少对共享资......
  • 简化任务调度与管理:详解XXL-Job及Docker Compose安装
    在现代应用程序开发中,任务调度和管理是至关重要的一部分。XXL-Job是一个强大的分布式任务调度平台,它使得任务的调度和管理变得更加轻松和高效。本文将介绍XXL-Job的基本概念,并详细演示如何使用DockerCompose进行快速安装和配置。什么是XXL-Job?github地址:https://github.com/xuxue......