免费注册 查看新帖 |

Chinaunix

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

请教linux下用户态进程调度问题(2.6.29) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-04 17:10 |只看该作者 |倒序浏览
如下程序,本以为程序是基于时间片去调度的,当时间片用完后开始调用schedule()去调度,但是通过打印堆栈分析发现,调度的是由于
ret_slow_syscall引起的,请问这是什么原因。调度器在何时调度用户态的进程。谢谢

./helloA

#include <stdio.h>
int main()
{
    while(1)
    {
   
    }
}

kernel的堆栈[从helloA -> Thread-8]:
[ 1814.703002] next:Thread-8,   prev:helloA
[ 1814.708282] [<c002f3c0>] (dump_stack+0x0/0x14) from [<c03056b4>] (schedule+0x2b8/0x3a0)
[ 1814.716278] [<c03053fc>] (schedule+0x0/0x3a0) from [<c002af54>] (ret_slow_syscall+0x0/0x10)

论坛徽章:
0
2 [报告]
发表于 2011-11-04 19:45 |只看该作者
可以搜索调度时机,主要如下:
① 进程状态发生变化时,如进程终止和睡眠;
② 进程时间片用完,这是基于timer irq的,所以本质上属于第四类;
③ 内核中自行调用,如在net/fs/driver中可以看到主动调用schedule的情况,因为他们需要执行大量的任务,为了不长期占用CPU,缩短系统响应时间,当响应标志设置时,会主动调度;
④ 进程从中断、异常、系统调用返回到用户态时,调用ret_from_sys_call,检查是否需要调度;

论坛徽章:
0
3 [报告]
发表于 2011-11-04 19:46 |只看该作者
Linux内核里有多种调度算法:CFS,RT等

论坛徽章:
0
4 [报告]
发表于 2011-11-05 19:48 |只看该作者
调度发生在从系统调用或中断处理返回用户空间时。

论坛徽章:
0
5 [报告]
发表于 2011-11-13 01:12 |只看该作者
2楼兄弟说的第3种情况不太了解啊,可以详细说说吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP