免费注册 查看新帖 |

Chinaunix

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

进程调度 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-20 09:41 |只看该作者 |倒序浏览

背景:
  cpu只有那么1-4个,每个cpu在同一时刻只能运行一个进程.而系统中绝不会只有一个进程存在,于是我们需要一个策略来调度这些诸多的进程来有效地使用有限的几个cpu.
正文:
1.cpu是盒子,进程是货物,不同颜色的货物具有不同的重要性
  货物有几百上千个,盒子只有1-4个.每个盒子体积只能装下一个货物,对于重要颜色的货物要重要对待.情况就是如此,问你怎么能最有效地安排货物装到盒子里去?
2.最基本的策略
抢占式
非抢占式
3.进程类型
IO消耗型:多是对IO请求和等待,运行频率要高,但时间要短
处理器消耗型:多是执行代码,运行频率要低,但时间要长
4.优先级
nice >>>-20~19,默认是0,越小优先级越高.动态可改变
5.时间片
5ms-100ms(define)-800ms
>>>时间片耗尽则不再运行,直到其他程序也耗尽时间片,然后再重新分配.
6.抢占
如果一个进程进入TASK_RUNNING,则与现在正在运行的进程比较,优先级高的话就替换.
如果当前运行进程时间片变为0,会被下面的进程抢占.
>>>想象一个字符编码程序和一个视频编码程序的策略.
7.高度算法
7.1可执行队列结构struct runqueue >>>kernel/sched.h
>>>每个结构对应一个cpu
>>>切换时要锁住结构
>>>自旋:等钥匙的活动.
7.2优先级数组
  struct prio_array,每个runqueue有两个,一个当前一个过期.
  成员中有一个位图,来标记各优先级是否需要运行.
7.3重新计算时间片
  当时片耗尽时便被从活动优先级数组转移到过期优先级数组中,在此之前新的时间片被计算出来,下面要做的就是将之再移回活动优先级数组.这只是指针操作.由schedule()完成,其执行时间恒定.


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP