Chinaunix首页 | 论坛 | 博客
  • 博客访问: 371812
  • 博文数量: 47
  • 博客积分: 967
  • 博客等级: 准尉
  • 技术积分: 1290
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-25 16:14
文章分类

全部博文(47)

文章存档

2019年(1)

2014年(1)

2013年(9)

2012年(36)

分类: LINUX

2012-09-27 20:10:47

    那天看到我的博客留言有这样一个问题:父子进程分配时间片时,调度器是不是CFS呢?看到这个问题之后,我不知道如何回答,我也不知道,所以下定决心这两天好好看看进程调度。
    2.6.23 内核中包含了一个重要的变化,用CFS替代了以前的调度器。CFS 被合并到 mainline 之前,关于内核调度器还有一个重要的 调度器:RSDL。
   进程调度是操作系统的核心功能。调度器只是是调度过程中的一部分,进程调度是非常复杂的过程,需要多个系统协同工作完成。而调度器,它的主要工作是在所有 RUNNING 进程中选择最合适的一个。作为一个通用操作系统,Linux 调度器将进程分为三类。
  (1)交互式进程。此类进程有大量的人机交互,因此进程不断地处于睡眠状态,等待用户输入。典型的应用比如编辑器 vim。此类进程对系统响应时间要求比较高,否则用户会感觉系统反应迟缓。
    (2)  批处理进程。此类进程不需要人机交互,在后台运行,需要占用大量的系统资源。但是能够忍受响应延迟。比如编译器。
    (3) 实时进程。实时进程往往执行非常重要的操作,要求立即响应并执行。
   根据进程的不同分类 Linux 采用不同的调度策略。对于实时进程,采用 FIFO 或者 Round Robin 的调度策略。对于普通进程,则需要区分交互式和批处理式的不同。
   传统 Linux 调度器提高交互式应用的优先级,使得它们能更快地被调度。而 CFS 和 RSDL 等新的调度器的核心思想是“完全公平”。这个设计理念不仅大大简化了调度器的代码复杂度,还对各种调度需求的提供了更完美的支持。

  我们先来看一下 Linux2.4 的调度器。该调度器简单的来说就是对 runqueue 中所有进程的优先级进行依次进行比较,选择最高优先级的进程作为下一个被调度的进程。而且实时进程的优先级始终大于普通进程。该调度器的主要缺点是可扩展性不好以及调度性能低。
   linux2.6的O(1)调度器主要解决了前面调度器的扩展性,而且O(1)调度算法所话费的时间为常数。O(1)调度器在两个方面修改了Linux2.4调度器,一是进程优先级的计算方法;二是pick next算法。
   (1).Pick next算法借助于active数组,无需遍历runqueue;
   (2).取消了定期更新所有进程counter的操作,动态优先级的修改分布在进程切换,时钟tick中断以及其它一些内核函数中进行。

今天就写到这儿,后续我会将楼梯调度算法。RSDL。CFS算法。

阅读(5800) | 评论(8) | 转发(1) |
给主人留下些什么吧!~~

Bean_lee2012-09-29 18:40:27

lmnos: 这个调度器在我LINUX系统上用了两年了 你说的不错,的确很好,但是我有个宗旨,绝不抄袭任何人一行代码.....
我离你的境界还很远,实力比你应该差不少,呵呵,还需要向你学习。
希望你能多分享一些东西,可以向你学习。

lmnos2012-09-29 18:19:20

Bean_lee: 给你推荐给调度器,BFS,实现简单,效果不输CFS,对于交互性进程特别好。
全称Brain Fuck Scheduler 。又称脑残调度器。
别误会,我真不是在骂人,真是有这么个.....
这个调度器在我LINUX系统上用了两年了 你说的不错,的确很好,但是我有个宗旨,绝不抄袭任何人一行代码

Bean_lee2012-09-29 18:11:53

lmnos: 说的对.....
给你推荐给调度器,BFS,实现简单,效果不输CFS,对于交互性进程特别好。
全称Brain Fuck Scheduler 。又称脑残调度器。
别误会,我真不是在骂人,真是有这么个调度器,很神奇。
呵呵,自己写着写着都觉着像骂人,可见这个调度器作者很愤青啊。
这个作者也很神奇,大牛,是个麻醉师。

lmnos2012-09-28 17:05:40

lwp225: 没事。。。慢慢来,先实现最基本的,再进一步优化!.....
说的对

lwp2252012-09-28 11:15:08

Bean_lee: 呵呵,不错。如果多些代码分析就更好了。调度器中有个priority,有nice,
shell 有nice,renice chrt等工具,你可以结合工具,分析下kernel.....
好的,谢谢你的建议!