zoukankan      html  css  js  c++  java
  • 操作系统--处理机调度与死锁

    • 处理机调度的层次和目标
      •   处理机调度的层次
        •   高级调度:对象是作业,功能:根据某种算法决定将外存上处于队列的哪几个作业调用内存,为他们创建进程、分配资源、放入就绪队列。--》用于多道批处理系统
        •   低级调度(进程调度):功能:根据某种算法决定就绪队列的那个进程获得处理机,并且将处理机分配给进程。--》多道批,分时,实时系统
        •   中级调度(内存调度):作用:提高内存利用率和系统吞吐量。功能:把暂时不能运行的进程调至外存等待,当他们具备运行条件且内存有空闲,再调入内存变为就绪状态。

      •   目标
        •   批处理系统目标:周转时间短,系统吞吐量大,处理机利用率高。
        •   分时系统:响应时间快,均衡性
        •   实时系统:截止时间保证,可预测性


    • 调度算法:
      •   先来先服务FCFS
        •   思想:按照作业到达的先后次序进行调度。    优先考虑在队列中等待最长的作业,从后背队列中选择几个,将他们调入内存,为他们分配资源和创建进程,然后放入就绪队列中。
        •   实现代码(C++语言)

      •   短作业优先SJF
        •   思想:以作业的执行时间的长短来计算优先级。从外存中选取若干个估计运行时间最短的作业,将他们调入内存运行。
        •   实现代码(C++语言)

      •   高响应比优先调度算法
        •   思想:即安装作业的等待时间又按照作业的要求服务时间来进行调度。综合了fcfs和sjf两个算法的优点。根据优先权进行调度,优先权=(等待时间+要求服务时间)/要求服务时间=响应时间/要求服务时间。响应时间:进程进入到运行结束出来的总时间。当作业的等待时间相同的时候类似SJF,执行时间短的先调度;当作业的执行时间相同时,类似FCFS,等待时间长的先调度。
        • 实现代码(C++语言)


    • 进程调度
      •   几个术语概念:周转时间:作业到达到作业完成的时间。带权周转时间:周转时间/服务时间。
      •   调度任务:保存处理机的现场信息,便于还原;按某种算法选择进程;把处理器分配给内存。
      •   进程调度方式:
        •   非抢占式:一直运行,不会因为时钟中断或者其他原因被抢占处理机,除非该进程运行完成或者进程阻塞。非抢占式可以被抢占的几种情况:①进程完成或者因某事件无法执行②正在执行的进程提出I/O请求,处理机可以去执行别的操作。

        •   抢占式:根据某种原则进行处理机的调度。抢占原则:①优先权原则②短进程优先③时间片原则。

      •   时间片轮转调度算法
        •   原理:各个进程的优先级是一样的。给定一个固定的时间片,按照进程进入的时间顺序进行调度,当一个时间片执行完就让下一个进程调度处理机,依次执行,知道所有进程执行完毕。
        •   举例:P94.

      •   优先级调度算法
        •   非抢占式优先级调度算法:把处理机赋予给进程中优先级最高的进程,直至该进程完成或者因某事件进程停止执行。
        •   抢占式优先级调度算法:把处理机赋予给进程中优先级最高的进程,一直执行,直到出现优先级比这个进程还高的进程,处理机赋予给新的进程。

        •   优先级类型:静态优先级:在创建进程时创建,在运行期间保持不变。   动态优先级:在创建进程时创建,动态改变。


    • 死锁概述
      •   资源
        •   可重用性资源:
          •   ①只能分配给一个进程使用。②使用资源时顺序:请求资源,使用资源,释放资源。③资源时固定的,不能创建也不能删除。
        •   消耗性资源:会引起死锁。
        •   抢占式资源:可以被抢占的资源,不会引起死锁。
        •   非抢占式资源:不能被抢占,只能在进程完成后自行释放。会引起死锁。

      •   死锁
        •   引起的原因:竞争不可抢占资源引起死锁。竞争消耗性资源引起死锁。进程推进顺序不当。
        •   死锁的定义:每个进程锁等待的事件是该组中的其他进程释放所占有的资源。
        •   死锁的条件:
          ①互斥条件:一个资源一段时间只能一个进程使用,当有别的进程想调用的时候,必须的鞥该进程释放该资源才能调用。
          ②请求和保持条件:进程已经占有一个资源,又提出一个新的资源请求,新的资源被占有,请求进程被阻塞,自己拥有的资源又不释放。
          ③不可抢占:自己的资源不能被占有。
          ④循环等待:环状条件。

        • 预防死锁
          •   破坏请求和保持条件:当一个已经拥有资源的进程去请求资源时,它持有的资源不能是不可抢占的资源。
          •   破坏不可抢占资源:已经有不可抢占资源的进程去请求新的资源而不能得到满足时候,必须释放自己已经拥有的资源,待以后需要的时候再重新申请。
          •   破坏循环等待条件:对所有的资源实行线性排序,


        •   避免死锁
          •   银行家算法
            银行家算法的基本思想是分配资源之前,判断系统是否是安全的;若是,才分配。它是最具有代表性的避免死锁的算法。
            设进程cusneed提出请求REQUEST [i],则银行家算法按如下规则进行判断。
            (1)如果REQUEST [cusneed] [i]<= NEED[cusneed][i],则转(2);否则,出错。
            (2)如果REQUEST [cusneed] [i]<= AVAILABLE[i],则转(3);否则,等待。
            (3)系统试探分配资源,修改相关数据:
            AVAILABLE[i]-=REQUEST[cusneed][i];
            ALLOCATION[cusneed][i]+=REQUEST[cusneed][i];
            NEED[cusneed][i]-=REQUEST[cusneed][i];
            (4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。

            银行家算法安全性检查算法

            (1)设置两个工作向量Work=AVAILABLE;FINISH
            (2)从进程集合中找到一个满足下述条件的进程,
            FINISH==false;
            NEED<=Work;
            如找到,执行(3);否则,执行(4)
            (3)设进程获得资源,可顺利执行,直至完成,从而释放资源。
            Work=Work+ALLOCATION;
            Finish=true;
            GOTO 2
            (4)如所有的进程Finish= true,则表示安全;否则系统不安全。


      •   死锁的检测和解除
        •   
  • 相关阅读:
    poj 3243 Clever Y(BabyStep GiantStep)
    poj 2417 Discrete Logging
    poj 3481 Double Queue
    hdu 4046 Panda
    hdu 2896 病毒侵袭
    poj 1442 Black Box
    hdu 2815 Mod Tree
    hdu 3065 病毒侵袭持续中
    hdu 1576 A/B
    所有控件
  • 原文地址:https://www.cnblogs.com/Kobe10/p/5667336.html
Copyright © 2011-2022 走看看