zoukankan      html  css  js  c++  java
  • 第三章、处理机调度与死锁

    第三章、处理机调度与死锁

    • 处理机调度的层次:

    • 高级调度
      又称为长程调度和作业调度。调度对象是作业

    • 低级调度
      低级调度又称为进程调度或短程调度,调度对象是进程(或内核级线程)

    • 中级调度
      又称为内存调度。引入它的目的是提高内存利用率和系统吞吐量。

    • 响应时间:指从用户通过键盘提交一个请求开始,直到屏幕上显示出处理结果为止的一段时间的间隔。

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

    • 作业调度算法

    • 先来先服务(FCFS)

      • 概念:系统按照作业到达的先后顺序进行调度
      • 使用: 该算法即可用于作业调度,也可用于进程调度。
    • 短作业优先(SJF)
      * 概念:SJF以作业长短来计算优先级,作业越短,优先级越高。其中作业的长短是以作业所要求的运行时间来衡量的。
      * 使用:该算法可用户作业调度和进程调度。
      * 缺点:
      * 必须预知作业的运行时间。
      * 对长作业非常不利,长作业的周转时间会明显地增加。
      * 在采用SJF算法时,人-机无法实现交互。

    • 优先级调度算法(PSA)

      • 概念:作业优先级越高,就越先调度。
    • 高响应比优先调度(HRRN)
      * 优先权 = (等待时间+要求服务时间)/要求服务时间。

    • 进程调度的任务

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

    • 非抢占式:一旦把处理机分配给某进程以后,就一直执行,直到完毕。

    • 抢占式:调度程序根据某种原则去暂停某个正在执行的进程,将已分配给该进程的处理机重新分配给另一个进程。

    • 进程调度算法

      • 轮转调度算法(RR)
        • 概念:让就绪队列(按照FCFS排序)的每个进程每次仅运行一个时间片,如果就绪队列上有几个进程,则每个进程每次大约都可获得1/n的处理机时间。
      • 最早截止时间有限(EDF)
        • 概念:开始截止时间越早,优先级越高。
    • 死锁相关知识

      • 概念:是指多个进程在运行过程中因争夺资源而造成的一种僵局,但进程处于这种僵局后,若无外力作用他们都将无法在向前推进。
      • 产生死锁的必要条件(一共四个,任何一个不成立都不会死锁):
        • 互斥条件(自己理解:必须有临界资源)
          一段时间内,某资源只能被一个进程调用,如果此时有其他进程请求该资源,那么请求进程等待,直到占有该资源的进程释放。
        • 请求和保持条件 (自己理解:自己有,但是还想要,但是已经没有了,自己又不给出自己有的)
          进程已经保持了一个至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程被阻塞,但对自己已经获得的资源不释放。
        • 不可抢占条件(自己使用完才能释放)
          进程已获得的资源在未使用完之前不能被抢占,只能在进程使用完时自动释放。
        • 循环等待条件
          在发生死锁时,必然存在一个进程---资源的循环链,即进程集合{p0,p1,p2,,,,,pn}中的po正在等待一个P1占用的资源,P1正在等待P2占用的资源。。。。。。Pn正在等待Po占用的资源。
    • 预防死锁的方法

    • 破坏“请求和保持”条件
      要想破坏该条件,必须做到:当一个进程在请求资源时,它不能持有不可抢占资源。可通过两种不同的协议实现:

      • 第一种协议
        一次性把自己需要的资源都给他。优点:简单、易行且安全。缺点:资源严重浪费;使进程经常会发生饥饿现象。
      • 第二种协议
        它允许一个进程只获得运行初期所需的资源后,便开始运行。运行过程中再逐步释放已分配给自己的、且已用毕的资源,然后再请求新的所需要的资源。
    • 破坏“不可抢占”条件
      当请求资源得不到满足时,释放自己已经保持的资源,待需要时再重新申请。

    • 破坏“循环等待”条件
      将资源线性排序,并赋予不同的序号。然后规定:每个进程必须按序号递增的顺序请求资源。例如,一个进程开始后,可以请求某类资源Ri的单元,以后当且仅当F(Rj)>F(Ri)时,进程才可以请求资源Rj的单元。

    • 产生死锁的原因

    • 因为系统资源不足

    • 进程运行推进的顺序不合适

    • 资源分配不当。

    • 避免死锁
      利用银行家算法避免死锁,最具有代表性的避免死锁的算法是Dijkstra的银行家算法。
      银行家算法中的数据结构:

      • 可利用资源向量Available。
      • 最大需求资源MAX。
      • 以分配资源Allocation。
      • 还需要的资源Need。

      Need = Max - Allocation。

    • 银行家算法的举例
      这里有一个链接:http://www.cnblogs.com/xuxu8511/archive/2012/04/06/2435053.html
      讲的比较详细。

  • 相关阅读:
    SD卡性能测试
    在程序内动态获取svn版本号
    在SharePoint 2010程序中使用Session
    图片预读
    CSS图片垂直居中方法整理集合 !(常见问题解答)
    cpld的入门交流之二:秒信号发生器
    基于json数据的jQuery无限级下拉菜单插件
    MySQL 按指定字段自定义列表排序
    10张图让你更了解博客
    IE6 CSS bug: position:relative变成了absolute
  • 原文地址:https://www.cnblogs.com/zhanggui/p/4716993.html
Copyright © 2011-2022 走看看