计算机操作系统——进程调度算法

在多道程序系统中,调度的实质是一种资源分配,处理机调度是对处理机资源进行分配。处理机调度分为高级调度(作业调度)、中级调度和低级调度。其中低级调度又称为进程调度,它所调度的对象是进程(或内核级线程)。
进程调度,其主要功能是根据某种算法,决定就绪队列中的哪个进程应获得处理机,并由分派程序将处理机分配给被选中的进程。进程调度是最基本的一种调度,在多道批处理、分时和实时三种类型的OS中,都必须配置这一级调度。

一、先来先服务(FCFS)调度算法

FCFS是最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。系统将按照作业/进程的先后次序来进行调度,或者说它是优先考虑在系统中等待最长时间的作业/进程,而不管进程所需执行时间的长短。

先来先服务调度算法的优缺点:

  • 相对有利于长作业/进程,不利于短作业/进程
  • 有利于CPU繁忙型作业(进程) ,而不利于I/O繁忙型作业(进程)
  • 用于批处理系统,不适于分时系统

由于在实际情况中,短作业(进程)占很大比例,因此FCFS算法在单处理机系统中已很少作为主调度算法,但经常把它与其他调度算法相结合使用,形成一种更为有效的调度算法。

二、短作业优先(SJF)调度算法

SJF算法是以作业的长短来计算优先级,作业(进程)越短,其优先级越高。作业(进程)的长短是以作业(进程)的运行时间来衡量的。
同样的,SJF算法也可以分别用于作业调度和进程调度。

短作业优先调度算法的优缺点:

  • 对长作业不利。严重的是,若一长作业(进程)进入系统的后备队列(就绪队列),由于调度程序总是优先调度那些(即使是后进来的)短作业(进程),将导致长作业(进程)长期不被调度——饥饿
  • 必须预知作业(进程)的运行时间。在采用这种算法时,必须要先知道每个作业(进程)的运行时间。
  • 在采用SJF算法时,人-机无法实现交互。
  • 该调度算法完全未考虑作业(进程)的紧迫程度,故不能保证紧迫性作业(进程)能够得到及时处理。

三、高优先权(HRRN)调度算法

可用于作业调度,也可用于进程调度

  • 优先调度算法的类型
    • 非抢占式优先权调度算法
      • 特点:系统一旦把处理机分配给就绪队列中优先权最高的进程后,该进程便一直执行下去,直至完成,或因发生某事件使该进程放弃处理机时,系统才将处理机重新分配给另一优先权最高的进程
      • 主要用于批处理系统中,也可用于某些对实时性要求不严的实时系统中
    • 抢占式优先权调度算法
      • 特点:把处理机分配给优先权最高的进程,但在执行期间,只要出现另一个优先权更高的进程,则进程调度程序就立即停止当前进程的执行,并将处理机分配给新到的优先权最高的进程
      • 注意:只要系统中出现一个新的就绪进程,就进行优先权比较
      • 能更好地满足紧迫作业的要求,故而常用于要求比较严格的实时系统中,以及对性能要求较高的批处理和分时系统中
  • 优先权类型
    高优先权调度算法,需要比较作业或进程的优先级,所以我们需要了解一下优先级
    优先权分为静态优先权、动态优先权
    • 静态优先权
      • 静态优先权在创建进程时确定,且在进程的整个运行期间保持不变。一般地,优先权是利用某一范围内的一个整数来表示的,例如,0∼7或0∼255, 又把该整数称为优先数
      • 确定进程优先权的依据有如下三个方面:
        • 进程类型:系统进程的优先权高于一般用户进程。
        • 进程对资源的需求:如进程的估计执行时间及内存需要量少的进程,应赋予较高的优先权。
        • 用户要求:由用户进程的紧迫程度和用户所付费用的多少来确定优先权。
    • 动态优先权
      • 概念:在创建进程时赋予的优先权是随进程的推进或随其等待时间的增加而改变,以获得更好的调度性能。可规定,在就绪队列中的进程,随其等待时间的增长,其优先权以速率a提高
      • 特征:具有相同优先权初值的进程,则最先进入就绪队列,其将因其动态优先权变得最高而优先获得处理机,此即FCFS算法
        具有各不相同的优先权初值的就绪进程,则优先权初值低的进程,在等待了足够的时间后,其优先权便可能升为最高,从而可以获得处理机
      • 注意:当采用抢占式优先权调度算法时,如果再规定当前进程的优先权以速率b下降,则可防止一个长作业长期地垄断处理机

四、时间片轮转(RR)算法

在分时系统中,最简单也是较常用的是基于时间片的轮转调度算法。
该算法采用了非常公平的处理机分配方式,即让就绪队列上的每个进程仅运行一个时间片。如果就绪队列上有n个进程,则每个进程每次大约都可获得1/n的处理机时间。

基本原理:
在轮转法中,系统根据FCFS策略,将所有的就绪进程排成一个就绪队列,并可设置每隔一定时间间隔(如30ms)即产生一次中断,激活系统中的进程调度程序,完成一次调度,将CPU分配给队首进程,令其执行。当该进程的时间片耗尽或运行完毕时,系统再次将CPU分配给心得队首进程(或新到达的紧迫进程)。由此,可保证就绪队列中的所有进程在一个确定的时间段内,都能得到一次CPU执行。

  • 进程的切换:
    时间片够用:意思就是在该时间片内,进程可以运行至结束,进程运行结束之后,将进程从进程队列中删除,然后启动新的时间片
    时间片不够用:意思是在该时间片内,进程只能完成它的一部分任务,在时间片用完之后,将进程的状态改为等待状态,将进程放到进程队列的尾部,等待cpu的调用
  • 关于时间片大小的选择
    时间片过小,则进程频繁切换,会造成cpu资源的浪费
    时间片过大,则轮转调度算法就退化成了先来先服务算法
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值