操作系统-处理机调度及死锁

高级调度

  1. 作业和作业步

作业:程序+数据+作业说明书

作业步:作业加工的每一步被称为作业步,例如:编译作业步,链接作业步,运行作业步..

作业流:多个作业加载进外存后形成一个队列,这样就是形成一个流的状态.

2.作业控制块(JCB):

作业控制快因为系统的不同有些许差异,主要由以下几部分构成:

  • 作业标示
  • 用户名称
  • 用户账户
  • 作业类型
  • 作业状态
  • 调度信息
  • 资源请求
  • 进入系统的时间
  • 开始处理的时间
  • 完成时间
  • 推出时间
  • 资源使用情况

每个作业进入系统的时候,系统就为每一个作业建立一个JCB,然后根据作业类型将他插入相应的后备队列中,系统根据jcb中的信息付作业进行调度.

3.作业调度

作业调度的主要功能是根据作业控制块中的信息,按照一定的算法将作业从后备队列中调入内存中,准备执行.

在调度作业之前,系统需要做一下两个决定:

  • 决定接受多少个作业

    作业太多,系统的服务质量减低,吞吐量少,资源利用吕低.

  • 决定接受那些作业
     
     通过算法选择相应的作业加载进内存,最简单的事先来先服务算法.

低级调度

通常把低级调度称为进程调度(内核线程)或这是短程调度;

1.低级调度的功能

  • 保存处理机的现场信息
  • 按某种算法选取进程
  • 按处理器分配给进程

2.进程调度的三个基本机制

  • 排队器:事先将系统中的所有就绪进程按照一定的顺序排成一个队列
  • 分派器:把选定的程序从队列中取出,进行上下文切换,将处理器分配给他
  • 上下文切换机制.

3.进程调度方式

  • 非抢占式 一个死了在加载另一个,没有时间到了然后去切换的概念.

    1. 进程执行完了.
    2. 执行中出现了I/O,请求暂停;
    3. 在进程通信或者同步过程中执行了某种原语操作,如:wait(),block().

这种方式 实现简单,系统少去好多的上下文切换的代价,开销小,适合大多书批处理环境.

缺点:难以满足紧急任务的执行要求

  • 抢占式

    1. 优先权原则:优先级高的优先
    2. 短作业优先:时间短者优先
    3. 时间片原则:时间到就挂起

中级调度

中级调度提出的目的就是将提高内存的利用率,将暂时不用的作业调度到外存去等待,等到具备运行的资格了,在调度到内存中,一般当一个进程被挂起了就是被调度到外存上了.

调度算法准则:

  • 吞吐量高
  • 处理机利用率高
  • 各类资源平衡利用

调度算法

  1. 先来先服务

有利于长作业,不利于短作业,利于cpu繁忙型作业,不利于I/O繁忙型作业

2.短作业优先算法(SJF)

优点:降低了作业平均等待时间,提高了系统吞吐量.

缺点:对长作业不利.没有考虑作业的紧急程度.不确定性

  1. 优先权调度算法
     

4.高响应优先算法

5.时间片轮转算法

6.多级反馈调度算法

死锁产生的原因

  1. 产生死锁的愿意:

    • 竞争资源
    • 进程间推进顺序非法
  2. 产生死锁的必要条件

    • 互斥条件
    • 请求和保持
    • 不可剥夺
    • 环路等待
  3. 处理死锁的基本方法

    • 摒弃 请求和保持 的条件

在系统开始之前就一次性的将他所需要的全部资源分配给他,在整个系统运行期间就不在提出申请资源的需求,那样就步会出现死锁.

优点:简单.实现简单.安全

缺点:资源浪费.恶化系统资源利用率,延迟进行(分配所有资源是需要时间)资源被长期占用而其他进程不能进行.

  • 摒弃 不可剥夺 的条件

当持有资源再去获取其他资源的时候就必须要释放所持有的资源.

  • 摒弃环路原则

系统所有的资源按类型进行线性排队,所有进程必须按照资源序列好递增的次序条件提出申请.

银行家算法

Available[ ]矩阵数组表示某类资源的可用量

Claim[ i ][ j ]表示进程Pi最大需要Rj类资源的数量

Allocation[ i ][ j ]表示Pi已占有的Rj类资源数量

Need[ i ][ j ]表示Pi尚需Rj类资源的数量


Need[ i ][ j ]=Claim[ i ][ j ]—Allocation[ i ][ j ]


Request[ i ]表示进程Pi进程的申请向量,如 Request[ i ][ j ]=m 表示Pi申请m个Rj类资源

对于当前进程Pi X

(1) 检查if( Request[ i ][ j ]<=Need[ i ][ j ] ) goto (2)

else error(“进程 i 对资源的申请量大于其说明的最大值 ”);

(2) 检查 if ( Request[ i ][ j ]<=Available[ j ] ) goto (3)

else wait() ; /注意是等待!即在对后续进程的需求资源判断中,若出现不符合的则安全检查结束,当前进程进入等待/

(3) 系统试探地把资源分给Pi 并修改各项属性值 (具体是否成立,则根据安全检查的结果)

Available[ j ] =Available[ j ] — Request[ i ][ j ]

Allocation[ i ][ j ]=Allocation[ i ][ j ] +Request[ i ][ j ]

Need[ i ][ j ]=Need[ i ][ j ]— Request[ i ][ j ]

(4) 安全检查,若检查结果为安全,则(3)中执行有效,否则分配作废,使该Pi进程进入等待

检查算法描述:

向量Free[ j ]表示系统可分配给各进程的Rj类资源数目,初始与当前Available等值

向量Finish[ i ]表示进程Pi在此次检查中是否被满足,初始均为false 当有足有资源可分配给进程时,

Finish[ i ]=true, Pi完成并释放资源(Free[ j ]+=Allocation[ i ][ j ])

1) 从进程队列中找一个能满足下述条件的进程Pi

①、Finish[ i ]==false,表示资源未分配给Pi进程

②、Need[ i ][ j ]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值