免费注册 查看新帖 |

Chinaunix

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

[进程管理] 《linux内核设计与实现》进程调度只能发生在时钟中断到来吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-05-23 13:11 |只看该作者 |倒序浏览
在《linux内核设计与实现》第11章中说到高HZ的优势时,说“假定有一个正在运行的进程,它的时间片只剩下2ms,此时调度程序又要求抢占该进程,然后去运行另一个进程,然而,该抢占行为不会在下一个时钟中断到来前发生,也就是说,在这2ms内不可能进行抢占”。根据这段话,是不是能够说明进程其实是等到时钟中断到来时才真正调度的。
如果一个进程打算休眠,它把自己加入到等待队列,再调用schedule(),那么是不是也是等到时钟中断到来时才会挑选另一个进程来执行?

论坛徽章:
0
2 [报告]
发表于 2013-05-23 13:17 |只看该作者
本帖最后由 lovegq 于 2013-05-23 13:18 编辑

应该不会,我不知道为什么,但是从现象上看,系统上下文切换次数 是可以用sar等命令统计到的,一次“上下文切换” 至少需要 一次"进程间调度"吧
ok,上下文切换 很多时候都高达几百K,所以如果只有时钟中断时才发生,太不够了

另外,假设我要休眠,都调用sleep了,还要等到时钟中断发生才换给其他进程运行, 这个太傻了,不能够是这样吧

论坛徽章:
0
3 [报告]
发表于 2013-05-23 20:08 |只看该作者
lovegq 发表于 2013-05-23 13:17
应该不会,我不知道为什么,但是从现象上看,系统上下文切换次数 是可以用sar等命令统计到的,一次“上下文 ...

其实我问得也有问题。。很多概念不清楚,还是多看看源码吧,多谢你回答!

论坛徽章:
0
4 [报告]
发表于 2013-05-24 17:36 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
5 [报告]
发表于 2013-05-26 09:04 |只看该作者
本帖最后由 asuka2001 于 2013-05-26 09:07 编辑

发重了。。。。

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
6 [报告]
发表于 2013-05-26 09:06 |只看该作者
回复 1# nwcfafniw

LDK3对于抢占时机的总结:

In short, user preemption can occur
        When returning to user-space from a system call
        When returning to user-space from an interrupt handler

Kernel preemption can occur
        When an interrupt handler exits, before returning to kernel-space
        When kernel code becomes preemptible again
        If a task in the kernel explicitly calls schedule()
        If a task in the kernel blocks (which results in a call to schedule())

详见LKD3 P63 - P64


   

论坛徽章:
0
7 [报告]
发表于 2013-07-05 15:18 |只看该作者
本帖最后由 leon_yu 于 2013-07-05 15:18 编辑

时钟中断的确会调度,但不是唯一抢占点,比如那2MS内,若当前进程主动让出,调用schedule(),或者分配“时间片”用完,都会进行调度。
至于休眠,在进程由运行态切换到睡眠状态的时候,就会调用schedule(),马上进行调度,选取下一个可执行进程,而不是等到下一个时钟中断才调度。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP