LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 896|回复: 4

linux下进程调度的疑问

[复制链接]
发表于 2004-12-26 18:01:59 | 显示全部楼层 |阅读模式
看linux内核分析时
对进程调度感到很困惑
linux下是不是一种抢占式调度方法?即当进入运行队列的进程优先级高于正在运行
的进程,就会发生进程切换?
还有我看到这样一句话:linux对CPU的时间划分可以分为两层,第一层CPU时间分为
时间段 ,第二层,在一个时间段,每个进程分到确定的时间片。
我就是不懂这到底是怎么在划分时间段的?时间片又是如何划分?
希望知晓的帮忙一下,谢谢!
发表于 2004-12-26 21:02:22 | 显示全部楼层
进程在内核态运行的时候应该是不可以抢占的,运行在用户态才是可以抢占的。
大牛们来解答第二个问题吧,也不太清楚具体划分的依据是什么,应该跟运行的优先级什么的有关系吧?
发表于 2004-12-29 21:49:54 | 显示全部楼层
时间段不是划分出来的,只要运行队列中所有的进程的时间片都用光,一个时间段也就结束了。一旦所有运行队列中所有的进程都用光了,那么就会用
for_each_task(p)
        p->counter = (p->counter >> 1) + NICE_TO_TICKS(p->nice);
的语句给所有的进程重新分配一个时间片,如果是一个SCHED_RR调度策略进程的时间片用光了,那么NICE_TO_TICKS(p->nice)重新给他分配一个时间片,在把这个进程放到运行进程队列的最后面
基本上就是这个样子
 楼主| 发表于 2005-1-3 12:36:47 | 显示全部楼层
时间段不是划分出来的,只要运行队列中所有的进程的时间片都用光,一个时间段也就结束了。一旦所有运行队列中所有的进程都用光了,那么就会用
for_each_task(p)
p->counter = (p->counter >> 1) + NICE_TO_TICKS(p->nice);
的语句给所有的进程重新分配一个时间片

我就是这里搞不懂,“只要运行队列中所有的进程的时间片都用光,一个时间段也就结束了”,既然是所有进程的时间片用完了,时间段才结束,那么 “p->counter = (p->counter >> 1) + NICE_TO_TICKS(p->nice);”  而这个代码中,p->counter 代表的是时间片,怎么还会有“ (p->counter >> 1)”,这不是意味着时间片还有剩余吗? 这个问题搞得我很迷惑!
发表于 2005-1-3 21:56:59 | 显示全部楼层
你看代码里用的是for_each_task(p),也就是说这里在重新分配时间片的时候是把是给所有的进程重新分配时间片,所以这里运行队列里的进程的时间片都用光了,可是等待队列里的进程的时间片还是有的啊!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表