免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1354 | 回复: 0
打印 上一主题 下一主题

Linux进程调度(2) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-08 12:31 |只看该作者 |倒序浏览
  从调度的角度,Linux把进程分成140个优先等级,其中0级到99级是分给实时进程的,100级到139级是分给非实时进程的。每个优先等级都有一个运行对列,这样就有140个运行队列。级数越小优先度越高。调度程序从0级到139级依次询问每个运行队列是否有可执行进程。询问的方法是通过访问一个bitmap,这个位图共有160bits,前140位与140个运行队列一一对应,后20位空闲。在每个运行队列里又把进程分成两组队列,active队列和expired队列。active队列相当于前面说的那个圆盘,里面的进程是被分配了时间片的。expired队列相当于圆盘外的“替补席”。一般来说,active队列里的进程用完其时间片后,就被送到expired队列里(也可能由于要和某个外设同步而被直接送到“休息室”--由可执行状态变成等待状态)。当active队列里的进程都被送出去的时候,就把active队列和expired队列互换一下,原来的active队列变成expired队列,原来的expired队列变成active队列。这就是Linux进程调度的基本思路。
    Linux进程的优先级有两种,静态优先级和动态优先级。
    静态优先级是初始优先级,它决定时间片的大小。
        时间片大小 = (140 - 静态优先级) X 20 ;( 静态优先级
        时间片大小 = (140 - 静态优先级) X 5 ;( 静态优先级 >= 120)
    和静态优先级有关的一个变量叫做nice。进程外部可以通过调整nice值改变静态优先级。
        静态优先级 = 120 - nice值
    动态优先级是在调度的过程中不断变化的。它决定该进程被送到140个运行队列中的哪一个。
        动态优先级 = max(100, min(静态优先级 - bonus + 5, 139))
    和动态优先级有关的一个变量叫做bonus。动态优先级所谓的“动态”就体现在bonus的变化上。bonus的值和进程的睡眠时间反相关,睡眠时间越长bonus值越大,睡眠时间越短bonus值越小。bonus的取值范围是0-10。另外bonus还有一个作用就是可以作为区分交互进程和批处理进程的标准。
        当 bonus - 5 >=静态优先级 / 4- 28 时,该进程被看作交互进程。
        当 bonus - 5


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/91477/showart_1818604.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP