操作系统中的算法总结1

操作系统中各种算法的总结

作业调度
算法
  • 先来先服务算法(FCFS First-Come First-Served)
    FCFS是最简单的调度算法,既可以用于作业调度,也可用于进程调度。有利于长作业,不利于短作业
  • 短作业优先算法(SJF Short Job First)
    实际情况中,短作业(进程)占有很大的比例,所以此算法对短作业是有利的
  • 优先级调度算法
    根据作业的优先级来进行调度。先来先服务和短作业优先都不能反映作业的紧迫程度。而在优先级调度算法中,则是基于作业的紧迫程度。
  • 高相应比优先调度算法
    高响应优先调度算法则是既考虑了作业的等待时间,又考虑了作业运行的时间的调度算法。
进程调度
进程调度的方式
  • 非抢占方式
    一旦处理机分配给某进程后,就一直让它运行下去,绝不会因为时钟中断或任何其他原因去抢占当前正在执行进程的处理机,直到该进程完成,或发生某事件而被阻塞时,才把处理机分配给其他进程。
  • 抢占方式
    该调度方式基于某种原则,去暂停某个正在执行的进程,将已经分配给该进程的处理机重新分配给另一个进程。在分时系统中,只有采用抢占方式才有可能实现人机交互。
    抢占的主要原则:①优先权原则②短进程优先原则③时间片原则
算法
  • 先来先服务算法
  • 短进程优先算法
  • 轮转调度算法(RR)
    该算法采取了非常公平的处理机分配方式,使用了循环队列,让就绪队列上的每个进程每次仅运行一个时间片。进程切换的原因只有两个,一是时间片未用完,进程便已完成,二是时间片用完。
  • 多队列调度算法-基于优先级的算法
  • 多级反馈队列调度算法-基于优先级的算法
  • 保证调度算法-基于公平原则的算法
  • 公平分享调度算法-基于公平原则的算法
实时调度
算法
  • 最早截止时间优先算法
    根据任务的截止时间确定任务的优先级,任务的截止时间愈早,其优先级愈高,具有最早介质时间的任务排在队列的队首。
  • 最低松弛度优先算法
    根绝的是任务的紧急程度,任务紧急程度愈高,赋予该任务的优先级就愈高。松弛度最低的任务排在最卡你慢,调度程序选择队列中队首任务执行。
死锁
处理死锁的办法
  1. 预防死锁
    通过设置某些限制条件,去破坏产生死锁条件中的一个或几个来预防产生死锁。
  2. 避免死锁
    属于实现预防策略,但它并不是实现餐区各种限制措施,去破坏产生死锁的四个必要条件,而是在资源的动态分配过程中,用某种方式防止系统进入不安全状态,从而可以避免发生死锁。
  3. 检测死锁
    无须事先采取任何限制性措施, 允许进程在运行过程中发生死锁。但是可以通过检测机构及时地检测出死锁的发生,然后采取适当的措施,把进程从死锁中解脱出来。
  4. 解除死锁
    当检测到系统中已发生死锁时,就采取相应措施,将进程从死锁状态中解脱出来。
避免死锁
  • 安全状态
    系统能按照某种进程推进顺序,为每个进程分配其所需资源,直到满足每个进程对资源的最大需求,使每个进程都可以顺利地完成。
  • 不安全状态
    与安全状态相反,如果无法找到这样一个安全序列,则称系统处于不安全状态。
利用银行家算法避免死锁

为了实现银行家算法,每一个新进程在进入系统时,它必须申明在运行过程中,可能需要每种资源类型的最大数单元数目,其数目不应超过系统所拥有的资源总量。当进程请求一组资源时,系统必须首先确定是否有足够的资源分配给该进程。若有,仔进一步计算在将这些资源分配给进程后,是否会使系统处于不安全状态。如果不会,才将资源分配给它,否则让进程等待。

  • 银行家算法中的数据结构
    ①可利用资源向量Available
    ②最大需求矩阵Max
    ③分配矩阵Allocation
    ④需求矩阵Need

  • 银行家算法
    ①如果请求量小于等于需求量,转向步骤②;否则认为出错,因为它所需要的资源数已超过它所宣部的最大值。
    ②如果请求量小于等于可利用资源向量,转向步骤③;否则,表示尚无足够资源,进程必须等待。
    ③系统试探着把资源分配给进程,并修改数据结构中的数值
    ④系统执行安全性算法,检查此次资源分配后系统是否处于安全状态。若安全才正式将资源分配给进程,以完成本次分配;否则,将本次的试探分配作废,恢复原来的资源分配状态,让进程等待。

  • 安全性算法
    1. 设置两个向量:
      ①工作向量Work,它表示系统可提供给进程继续运行所需的各类资源数目,它含有m个元素,在执行安全算法开始时,Work=Avilable;
      ②Finish,它表示系统是否有足够的资源分配给进程,是之运行完成。开始时Finish[i]=false,当有足够的资源分配给金亨时,再令Finish[i]=true.
    2. 从进程集合中找到一个能满足下述条件的进程:
      ①Finish[i]=true;
      ②需求量小于Work
      若找到了该进程,就进行下一步,否则执行第4步
    3. 当进程P1获得资源后,可顺利执行,直至完成,并释放出分配给它的资源
      执行:Work[j]=Work[j]+Allocation[i,j];
      Finish[i]=ture;
      go to step 2;
    4. 如果所有进程的 Finish[i]=true都满足,则表示系统处于安全状态;否则系统处于不安全状态

猜你喜欢

转载自blog.csdn.net/lyn_00/article/details/80887395