linux的一个进程调度周期内新加入进程的处理机制分析

        最近在研究Linux的短程调度(进程调度包括长程调度、中程调度和短程调度,详见参考博客1)相关的算法和调度器,由参考博客1可知,短程调度的主要任务是按照某种策略和算法将处理机分配给一个处于就绪状态的进程,分为抢占式和非抢占式。中程调度(又叫中级调度)的主要任务则是按照给定的原则和策略,将处于外存交换区中的就绪状态或等待状态的进程调入内存,或把处于内存就绪状态或内存等待状态的进程交换到外存交换区。长程调度(又叫高级调度)的主要任务则是将已进入系统并处于后备状态的作业按某种算法选择一个或一批,为其建立进程,并进入主机,装入内存;当该作业执行完毕时,负责回收系统资源。如下图所示:

        由图可知,低级调度就是按照某种策略和算法从就绪队列中挑选进程让处理机处理。中级调度和高级调度则负责控制就绪队列中的进程数量。也就是说,就绪队列是处于一种动态变化的状态:已执行完成的进程会退出就绪队列,新的进程会加入到就绪队列。我们的短程调度算法和调度器要能妥善地应对就绪队列的这种动态变化的情况。

        由参考博客2、3和4可知,通用Linux系统支持实时和非实时两种进程,实时进程相对于普通进程具有绝对的优先级。对应地,实时进程采用SCHED_FIFO、SCHED_RR或者SCHED_DEADLINE调度策略,普通的进程采用SCHED_OTHER调度策略。

        对于非实时进程,参考博客2和3中都提到一个重要的名词:调度周期(epoch),本质上是一个一个的时间段,具体是指短程调度器对上述图中就绪队列进行的调度是按照一个个时间段来的。在每个调度周期的开始,就绪队列中的每个进程都会基于其优先级(nice值)给分配一个时间片(由参考博客5可知,时间片范围从5ms~800ms不等)。每次调度时都选择剩余时间片最大的进程给处理机处理,在该调度周期内时间片已经用完的进程不再参与本周期内的进程调度,直到就绪队列中所有进程的剩余时间片都为零,则当前调度周期结束,从而下一个调度周期开始。由此可以看出Linux系统中的调度周期不是静态的,它是一个动态变化的量,比如处于可运行状态的进程的多少和它们优先级值都可以影响一个epoch的长短。

        看到这里,一个新的疑惑产生了:前面介绍了,就绪队列是动态变化的,那么如果在一个调度周期内,不断有进行退出,同时不断有新的进程加入,那新加入的进程会不会导致一个调度周期被无限拉长,以至于该周期内时间片已经用完的进程永远也得不到执行的机会

        到这里,参考博客3和4就有了不一致的说法:参考博客3中说是在每个调度周期开始的时候,会基于进程优先级给进程分配时间片,而参考博客4中说的是每个进程被创建时都被赋予一个时间片。按照博客4中的说法,那epoch确实存在被无限拉长的概率。其实我们换个角度思考,操作系统的设计是尽可能地做到模块化、相互解耦,进程的创建是长程调度的工作,而进程被处理机执行是短程调度的工作,两者应该是相互解耦的。也就是说,进程创建不应该关心进程的调度,因而进程在创建时,只需要设置进程的优先级,而不需要分配时间片。当进程创建完毕并被加载到就绪队列中时,其时间片应该是还未设置(默认为零),因而在当前调度周期内,新加入就绪队列的进程不会影响当前调度周期的时间长度。在下一个调度周期,该进程才会被分配时间片,从而参与处理机的分配。

 

参考博客:

1. https://blog.csdn.net/u013007900/article/details/50550415 操作系统中长期调度、中期调度和短期调度之间的区别

2. https://blog.csdn.net/zhourui1982/article/details/5282361 什么是真正的实时操作系统

3. https://blog.csdn.net/gatieme/article/details/51701149 Linux进程调度策略的发展和演变--Linux进程的管理与调度

4. https://blog.csdn.net/u010317005/article/details/80531985 Linux进程优先级、nice系统中的nice值和nice time,top中的PR和ps中的PRI

5. https://www.jianshu.com/p/b01e779df2c1 Linux的进程优先级 Nice 和 priority

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值