进程调度

本文深入探讨了Unix和Linux操作系统中的进程调度策略,包括固定时间片加优先级调度(Unix)与处理器使用比加优先级调度(Linux)。分析了两种调度方式的优劣,并以蛋糕分配为例形象说明了两种调度策略的不同。

1.背景知识

调度程序可以理解成一个分配者,用于分配有限的处理器资源。只有通过调度程序,处理器资源才能够达到最大限度的利用。调度程序主要负责以下工作

  • 决定哪个进程将会投入运行
  • 决定进程什么时候运行
  • 决定运行多长时间

调度程序在设计上分为:

  • 抢占式

    调度程序决定什么时候停止一个进程,以便其他进程能够得到执行的机会。Unix 、Linux 和许多其他的现代操作系统都是抢占式的

  • 非抢占式

    除非进程主动停止运行,否则它会一直运行。

作为一个名坐地铁玩手机会晕的奇怪份子,笔者在地铁上思考了一路 Unix 和 Linux 在处理器资源分配策略上的不同。从本质上讲两者都是如何尽可能公平的分配好有限的资源。

先思考一个例子,假设有一个八寸的蛋糕,均匀的进行分配,你能想到什么分配方式:

  • 以蛋糕作为衡量的单位,比如先均匀的切成 10 等分,然后分配 —— Unix 时间片的概念
  • 以人数作为衡量单位,比如已知有 5 个人,则可以直接切成 5 等分 —— Linux 公平调度程序

注:这个例子也不是很恰当,但能够跟后面两类操作系统进程调度做类比,后面需要补充

1.1 进程分类

进程可以分为 I/O 密集型和处理器密集型。

  • I/O 密集型:进程的大部分时间都是用来提交 I/O 请求等待 I/O 请求,比如文本编辑程序
  • 处理器密集型:进程的大部分时间都用来执行代码,比如视频解码程序

调度策略通常要保证进程响应时间短以及吞吐量高,但是这是两个矛盾点,调度程序所有做的实在这两个矛盾点之间寻找平衡。

2. Unix 调度

Unix 的调度 = 固定的时间片 + 优先级调度( nice 值)

nice 值越大优先级越低

时间片表示一个进程在被抢占前所能持续运行时间。调度策略需要规定一个默认的时间片,如何设置一个合适的时间片是一个非常复杂的问题。时间片过长会导致系统对交互的响应延迟,时间片过短又会使进程切换消耗的处理器时间增加。I/O 密集型不需要长的时间片,处理器密集型需要长的时间片。

2.1 劣势

Unix 的固定时间片 + 基于 nice 值的优先级调度有以下的问题:

  • 进程切换无法最优的进行,翻译一下就是有的时候不期待进行进程切换也会进行进程切换……

    首先 nice 值需要映射到时间片,即处理器的绝对时间,假设存在高优先级的进程(100ms 的时间片),底优先级的进程(5ms 的时间片),高低优先级进程同时存在的时候进程切换的周期是 105ms ,但是两个底优先级进程切换的周期是 10ms

  • 把进程 nice 值减小到 1,即提升优先级的效果,取决于其 nice 值的初始值

    nice 系统调用是初始值上增加或者减少

  • 执行 nice 值到时间片的映射,需要一个绝对的时间片,而时间片必须是定时器节拍的整数倍,即 10ms 或者 1 ms ,带来的问题是两个连续的 nice 值之间时间片的差异多则 10ms 少则 1ms ,(ps 调度程序的精度这么敏感嘛……

  • 为了使进程更快的被调度,你可以选择为该进程设置更高的优先级,但这为特定进程破坏了公平性原则,损耗了其他进程的利益。

3. Linux 调度

Linux 的 CFS 调度 = 处理器使用比 + 优先级调度(nice 值)

nice 值代表时间片的比例,CFS 完全公平调度算法

以文本编辑程序(I/O 密集型)和视频编码程序(处理器密集型)举例,假设两者是仅有的两个运行程序并且具有同样的 nice 值,那么处理器的使用比将是 50%——它们平分处理器时间。但是

  • 文本编辑器更过的时间是在等待用户的输入,因此它的处理器时间不会用到 50%。
  • 视频编码程序是处理器密集型无疑有机会用到 50% 的处理器时间。

结论是,无论什么时候文本编辑器被唤醒, CFS 注意到它的处理器使用比是 50% ,但是它并未实际用到,为了兑现公平分享处理器的承诺,它会立即抢占视频编码程序,让文本编辑程序运行。

CFS 的核心理念是每个进程都能够获得 1/n 的处理器时间—— n 是指可运行从进程数量。

CFS 的做法是允许每个进程运行一段时间、循环轮转、选择运行最少的进程作为下一个运行进程,而不是采用分配每个进程时间片的方式。

CFS 在所有可以运行进程总数基础上计算出一个进程应该运行多久,而不是依靠 nice 值计算时间片。

nice 值在 CFS 中被作为进程获得处理器运行比的权重。越高的 nice 值(越低的优先级)进程获得更低的处理器使用权重。

4. 参考

  • 《linux 内核设计与实现》第四章
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值