• 进程调度


    调度种类:

    • 高级调度:(High-Level Scheduling)又称为作业调度,它决定把后备作业调入内存运行;
    • 中级调度:(Intermediate-Level Scheduling)又称为在虚拟存储器中引入,在内、外存对换区进行进程对换。
    • 低级调度:(Low-Level Scheduling)又称为进程调度,它决定把就绪队列的某进程获得CPU;

    非抢占式调度与抢占式调度

    • 非抢占式:分派程序一旦把处理机分配给某进程后便让它一直运行下去,直到进程完成或发生进程调度进程调度某事件而阻塞时,才把处理机分配给另一个进程。

    • 抢占式:操作系统将正在运行的进程强行暂停,由调度程序将CPU分配给其他就绪进程的调度方式。

    调度算法:

    FIFO或First Come, First Served (FCFS)先来先服务

    • 调度的顺序就是任务到达就绪队列的顺序。

    • 公平、简单(FIFO队列)、非抢占、不适合交互式。

    • 未考虑任务特性,平均等待时间可以缩短。

    Shortest Job First (SJF)

    • 最短的作业(CPU区间长度最小)最先调度。

    • SJF可以保证最小的平均等待时间。

    Shortest Remaining Job First (SRJF)

    • SJF的可抢占版本,比SJF更有优势。

    • SJF(SRJF): 如何知道下一CPU区间大小?根据历史进行预测: 指数平均法。

    优先权调度

    • 每个任务关联一个优先权,调度优先权最高的任务。

    • 注意:优先权太低的任务一直就绪,得不到运行,出现“饥饿”现象

    Round-Robin(RR)轮转调度算法

    • 设置一个时间片,按时间片来轮转调度(“轮叫”算法)

    • 优点: 定时有响应,等待时间较短;缺点: 上下文切换次数较多;

    • 时间片太大,响应时间太长;吞吐量变小,周转时间变长;当时间片过长时,退化为FCFS。

    多级队列调度

    • 按照一定的规则建立多个进程队列

    • 不同的队列有固定的优先级(高优先级有抢占权)

    • 不同的队列可以给不同的时间片和采用不同的调度方法

    • 存在问题1:没法区分I/O bound和CPU bound;

    • 存在问题2:也存在一定程度的“饥饿”现象;

    多级反馈队列

    • 在多级队列的基础上,任务可以在队列之间移动,更细致的区分任务。

    • 可以根据“享用”CPU时间多少来移动队列,阻止“饥饿”。

    • 最通用的调度算法,多数OS都使用该方法或其变形,如UNIX、Windows等。

    多级反馈队列调度算法描述:

    • 进程在进入待调度的队列等待时,首先进入优先级最高的Q1等待。

    • 首先调度优先级高的队列中的进程。若高优先级中队列中已没有调度的进程,则调度次优先级队列中的进程。例如:Q1,Q2,Q3三个队列,只有在Q1中没有进程等待时才去调度Q2,同理,只有Q1,Q2都为空时才会去调度Q3。

    • 对于同一个队列中的各个进程,按照时间片轮转法调度。比如Q1队列的时间片为N,那么Q1中的作业在经历了N个时间片后若还没有完成,则进入Q2队列等待,若Q2的时间片用完后作业还不能完成,一直进入下一级队列,直至完成。

    • 在低优先级的队列中的进程在运行时,又有新到达的作业,那么在运行完这个时间片后,CPU马上分配给新到达的作业(抢占式)。

     

  • 相关阅读:
    IDEA导入jar包
    怎么在idea中新建package包,只有directory选项
    Python在自动化运维时经常会用到的方法
    SocketServer 网络服务框架
    导入自定义包
    socket编程
    在线安全清空慢查询日志slowlog
    OS X中微信双开
    OS X中crt中文乱码
    谈谈TCP中的TIME_WAIT
  • 原文地址:https://www.cnblogs.com/topass123/p/12801694.html
Copyright © 2020-2023  润新知