Linux的进程调度

  Linux有两种进程调度策略:普通进程调度和实时进程调度。Linux调度的总体思想是:实时进程优先于普通进程,实时进程以进程的紧急程度为优先顺序,并为实时进程赋予固定的优先级;普通进程则以保证所有进程能平均占用处理器时间为原则。所以其具体做法就是:

  • 对于实时进程来说,总的思想是为实时进程赋予远大于普通进程的固定权重参数weight,以确保实时进程的优先级。在此基础上,还分为两种做法:一种与时间片无关,另一种与时间片有关
  • 对于普通进程来说,原则上以相等的weight作为所有进程的初始权重值,即nice=0,然后在每次进行进程调度时,根据剩余时间片对weight动态调整

普通进程调度策略

  如果进程控制块的policy的值为SCHED_OTHER,则该进程为普通进程,适用于普通进程调度策略。当一个普通进程被创建时,系统会先为它分配一个默认的时间片(nice=0)。

weight的微调函数goodness()
  尽管在默认情况下,系统为所有的进程都分配了相等的时间片,但在实际运行时,常常因各种原因使得进程的运行总是有先有后,于是经过一段时间运行后,各个进程在实际使用其时间片的方面形成了差异。剩余时间计数器counter的值就反映了这个差异的程度:该值大的,意味着这个进程占用处理器的时间少;该值小的,意味着这个进程占用处理器的时间多。
  为了尽可能地缩小上述的这个差异,Linux的调度器在调度周期中每次调度时,都遍历就绪列表中的所有进程,并按照各个进程的counter当前值调用函数goodness()对所有进程的weight进行调整,想办法让counter值大的进程的weight大一些,而counter值小的进程的weight小一些。

普通进程调度算法中的一些细节
  当普通就绪队列中所有非等待进程counter值都减为0时,对所有的进程时间片counter重新赋值。在重新赋值时,对于耗尽时间片的进程,由于参与计算的counter等于0,因此这个算法就是恢复counter的初值;而对于处于等待状态的进程,由于参与计算的counter大于0,因此这个算法实际上就是把counter的剩余值折半再加上初值。也就是说,因等待而损失了时间片的进程在counter重新被赋值时,系统会适当地给它一些“照顾”,以使其在下一个调度周期中获得更多的时间片,并拥有更高的权重weight。
  一个进程的等待次数比较多,通常意味着它的I/O操作比较密集。通过对时间片进行叠加的做法给等待进程赋予更高的优先级,体现了Linux对I/O操作密集型进程的一种体贴。可见,SCHED_OTHER策略本质上是一种比例共享的调度策略,它的这种设计方法能够保证进程调度时的公平性:一个低优先级的进程在每一个周期中也会得到自己应得的那些运行时间;同时,它提供了nice使用户可以对进程优先级进行干预。

实时进程调度策略

  凡是进程控制块的policy的值为SCHED_FIFO或SCHED_RR的进程,调度器都将其视为实时进程。进程控制块中的域rt_pripority就是实时进程的优先级,其范围时1~99。这一属性将在调度时用于对进程权重参数weight的计算。Linux是按照严格的优先级别来选择待运行进程的,并且实时进程的权重weight远高于普通进程。
  Linux允许多个实时进程具有相同的一个优先级别,Linux把所有的实时进程按照其优先级组织成若干个队列,对于同一队列的实时进程可以采用先来先服务和时间片轮转调度两种调度策略。

先来先服务调度(SCHED_FIFO)

  在同一级别的队列中,先就绪的进程先入队,后就绪的进程后入队。调度器在选择运行进程时,就以优先级rt_pripority为序查询各个队列,当发现队列中有就绪进程时,就运行处于队列头位置的进程。其后,它就会一直运行,除非出现下述情况之一:

  • 进程被具有更高优先级别进程剥夺了处理器
  • 进程自己因为请求资源而堵塞
  • 进程自己主动放弃处理器

时间片轮转调度(SCHED_RR)

  根据优先级别把就绪进程分成若干个队列,但每个队列被组织成一个循环队列,并且每个进程都拥有一个时间片。调度时,调度器仍然以优先级别为序查询就绪进程对列。当发现就绪进程队列后,也是运行处在队列头部的进程,但是当这个进程将自己的时间片耗完之后,调度器把这个进程放到其队列的队尾,并且再选择处在队头的进程来运行,当然前提条件是这时没有更高优先级别的实时进程就绪。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值