Chinaunix

标题: 进程问题! [打印本页]

作者: chenzhanyiczy    时间: 2009-05-01 10:12
标题: 进程问题!
一个进程有内核态和用户态,当通过系统调用的时候就陷入了内核态,当陷入内核态时,进程处于能被内核调度的形式,但假如一个进程只是运行用户的代码,没系统调用,那么该进程陷入用户态,这时进程还能被内核调度吗?内核是怎样调度的?
作者: beepbug    时间: 2009-05-01 11:23
用户进程是一直处于被内核调度的状态的。一个叫进程管理子系统的东西一直在管着它们。
一个大系统,往往有许多个进程在同时在运行(譬如有50个学生在上机学习C++,另有50个学生在学MySQL,那至少得有100多个用户进程)。没人管,那就乱了套了。
作者: youshuang    时间: 2009-05-01 13:40
你从哪听说“陷入内核态时,进程处于能被内核调度的形式”的?
作者: kouu    时间: 2009-05-01 13:53
标题: 回复 #1 chenzhanyiczy 的帖子
通过系统调用, 进程由用户态进入内核态, 这算是进程主动进入内核态.
另外, 进程还可能被动进入内核态, 典型的情况就是中断.

如果一个进程只执行用户态的代码, 它不会主动进入内核态. 但是时钟中断问题存在的, 在每一个tick到来时, 内核代码得到运行, 于是检查当前这个进程是否应该被调度(比如时间片是否用完). 除此这外, 其他的中断也可能造成调度. 比如网卡中断, 网卡中断处理完成后, 某某socket可读. 有一个比当前进程优先级更高的进程正在等待这个socket可读, 于是内核调度这个进程运行.

就是这样, 虽然你不主动进入内核, 但是依然有办法治你.

[ 本帖最后由 kouu 于 2009-5-1 13:57 编辑 ]




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2