• 进程调度算法的比较


    1。FCFS调度(first come first serve):

    也就是先来先服务进程调度策略,没有切换进程的概念,自然也也就没有抢占的概念。类似于流水线的机制。

    2. Round Robin:

    时间片轮转,现在计算机大多是采用的这个策略进行进程切换。不利于不同大小进程的完成时间。

    3 SJF(Short Job First):

    短作业优先,这是对FCFS对短作业效果不好所做的对短作业特定的优化。但是优化过度了,会产生饥饿的现象。因为一些短进程不断到来时一些长进程无法执行。

    4.SRTN

     Shortest Remaining Time Next 最短剩余时间,是SJF的另一个版本,可以看出仅仅是从抢占改成了非抢占。

    5 HRRN:

    Highest Response Ratio Next,一种动态的根据优先级调度的策略,这里的优先级是由以下的公式计算得来。

    响应比R = 周转时间 / 处理时间

    总是选取相应比最高的进程执行。

    6.Feedback

    多级反馈队列,同时创建多个队列。优先级从高到低,从第一个队列调度,当第一个队列为空时,调度下一个队列。时间片则是优先级低的队列较大。

    以上的进程调度算法通常都应用在实时系统以及交互式系统当中,其中应用在交互式系统中的有 Round Robin以及FeedBack。因为交互系统要保持对各个进程的响应,所以要设置时间片,使其可以更好的对各个进程进行响应。剩下的SJF,FCFS, SRTN,HRRN则是批处理中的调度算法,这类进程调度算法普遍吞吐量比较好(因为不用消耗资源切换时间片),但是响应性不太好。

    进程优先级反转:

    定义:一个低优先级进程持有一个高优先级进程所需要的资源,使得高优先级进程等待低优先级进程运行。

    例子:设H是高优先级进程,L是低优先级进程, M是中优先级进程(CPU型)

    场景:L进入临界区执行,之后被抢占;H也要进入临界区,失败,被阻塞;M上CPU执行,L无法执行所以H也无法执行

    解决的思路是让低优先级的进程不被中断,通常有三种解决方法:

    • 设置优先级上限,将优先级提到最高,让其无法被中断
    • 优先级继承,让其拥有要高优先级,不被终端
    • 使用中断禁止,直接不让中断
  • 相关阅读:
    Java程序员进阶:Java异常知识点梳理
    JVM内存模型(运行时数据区)
    史前最详细的:Java线程池核心流程解析
    10年大牛给Java 初学者的学习路线建议,如何学习 Java?
    异常处理(面试题)
    115道Java经典面试题(面中率高、全)
    Java异常处理(捕获异常)
    Java异常处理(观察常见异常)
    Java异常处理(异常基本概念)
    学习笔记:Java数组
  • 原文地址:https://www.cnblogs.com/qtalker/p/4435134.html
Copyright © 2020-2023  润新知