LinuxSir.cn,穿越时空的Linuxsir!

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

进程切换是哪个执行的

[复制链接]
发表于 2007-4-14 16:33:41 | 显示全部楼层 |阅读模式
进程切换是哪个执行的 书上说市内核执行的 内核执行的时候要占用cpu吗 关于这一块,有点混淆,高手给指点一下
发表于 2007-4-14 16:41:03 | 显示全部楼层
schedule()这个函数来实现的, 既然要完成任务,当然就会去占用CPU啊, 这些功能都是由CPU来完成的,不然要CPU要做什么啊.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-14 21:35:46 | 显示全部楼层
scutan兄:你的意思是:进入内核态的进程来执行这个函数的吗,也就是说,即将被换出的进程在内核态执行schedule()吗???
回复 支持 反对

使用道具 举报

发表于 2007-4-15 12:10:03 | 显示全部楼层
Post by liupeng83517
scutan兄:你的意思是:进入内核态的进程来执行这个函数的吗,也就是说,即将被换出的进程在内核态执行schedule()吗???
1.如果当前进程要申请的资源没有得到,那么它就会主动地去执行schedule()这个函数.所以此时是由即将被换出的进程执行schedule().
2.当然如果是在抢占的情况下,内核必须知道在什么时候调用schedule(),因此内核提供了一个need_sched标志来表明是否需要重新执行一次调度.当某个进程耗尽它的时间片时,scheduler_tick()就会设置这个标志,当一个优先级高的进程进入可执行状态的时候,,try_to_wake_up()也会设置这个标志.因此,当内核中的情况为返回到用户空间或者从中断返回的时候,内核就会检查need_sched这个标志如果已被设置,内核会在继续执行之前调用调度程序.这个情况称为用户抢占的情况.
3.当然,在内核中,最重要的就是内核抢占的情况.在以下几种情况下会调用schedule():当从中断处理程序返回内核空间之前,当内核代码再一次具有可抢占性的时候.另外,在释放一个锁的时候也会去调用 schedule()这个函数.
其实呢,这个时候执行当前切换的这些动作也是由当前进程来完成的. 仔细看一下schedule()代码就知道了. 里面频繁地用到了current这个宏.

大概是这样的,如果有不对的地方请大家指出来.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-15 20:48:06 | 显示全部楼层
顶!!!
太棒了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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