系统调度 | 进程调度原理

原创
01/08 15:52
阅读数 485

作者:世至其美

原文地址:https://hqber.com

调度原理

最大限度地利用处理器时间,只要有可以执行的进程,那么就总会有进程正在执行。

多任务系统

  • 抢占式多任务
  • 非抢占式多任务

进程分类

  • IO消耗型:进程的大部分时间用来提交I/O请求或是等待I/O请求。
  • 处理器消耗型:进程的大部分时间在执行代码

进程优先级

根据进程的价值和其对处理器的时间需求对进程进行分级。

Linux采用了两种优先级范围:

  • nice值,范围[-20,19],nice值越大,优先级越低。nice值代表的是时间片的比例。在Mac OS X中,进程的nice值代表分配给进程的时间片
  • 实时优先级,范围[0,99],数值越大,优先级越高。任何实时优先级都大于普通进程。

时间片

分配给每个可运行进程的处理器时间段。

注意:现在操作系统对程序运行都采用了动态时间片计算的方式,并且引入了可配置的计算策略。Linux的“公平”调度算法本身并没有采取时间片来达到公平调度。

Linux调度算法

Linux调度算法中,Linux调度器是以模块的方式提供的,这种模块化结构叫做调度器类。

每个调度器都有一个优先级,基础调度器(<kernel sched core.c>)会按照优先级顺序遍历调度类,拥有一个可执行进程的最高优先级的调度器类胜出。

  • 完全公平调度(CFS):一个针对普通进程的调度类。(SCHED_NORMAL)<kernel sched fair.c>Linux的CFS调度器没有规定时间片的大小,通过nice值作为权重调整处理器的使用比,nice值越小的进程被赋予高权重,高优先级,抢得更多的处理器时间使用比。最后通过计算(线程的处理器使用比*总处理器时间)获取每个进程的处理器时间。抢占时机是当新进程消耗的处理器使用比小于当前的进程,则新进程立刻投入运行,抢占当前进程。还设置了每个进程获得的时间片底线(最小粒度),默认值是1ms,为了避免可运行任务数量趋于无限,他们各自获取的处理器使用比和时间片都将趋于0,进程切换开销将是不可接受的。

作者:世至其美

原文地址:https://hqber.com

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部