进程状态转换
上一篇 /
下一篇 2008-07-10 19:00:32
/ 个人分类:Linux Kernel
The Design of The UNIX Operating System (Maurice J. Bach),P.31,有一张图,描述进程的状态及其转换。觉得有很多东西值得一说。同时参考了Linux Kernel Development (Robert Love, 2nd Edition,英文影印版),P.28。Bach的书在P.148另有一幅更为详细的进程状态转换图,不过觉得暂时没有必要弄得那么细节。(下图灰色部分是Bach的书上所没有的)
1O6{] fwz7C%u0
%Y4k|$lSs!b0
hX;x6h'V,a!E$YJh0
状态1:用户模式运行(user running)LUPA开源社区7jF\UTDYjZ
这是进程在用户模式下惟一可能的状态。LUPA开源社区'S$n Yy}%rxu&b7nb
状态2:内核模式运行(kernel running)
J`V'Z-Nw2X0
运行中的进程既可以在用户模式下,也可以在内核模式下。用户模式下运行的进程,通过系统调用或中断步入内核模式运行。当系统调用返回或中断处理完毕,再回到用户模式。此状态的进程也接受中断(图中的那个双向回路),中断处理本身也在内核模式,所以状态并没改变。
C4_`dAd
Ag$f:}z0
状态3:就绪运行(ready to run)LUPA开源社区^I)Y&_%j"OOX?5Q
当调用fork()后,新起的进程即处于此状态。睡眠而被唤醒的进程也处于此状态。就绪运行的进程并没真正运行,它们各自等着,等着CPU来眷顾它们。如果CPU抽出时间了,就会从它们中择一合适的,投入运行。LUPA开源社区d7Iw$t1o)D
e/R
状态4:睡眠(asleep)
,jl&|'y
kE)\0
内核模式运行的进程,为了等待特定的事件(比如I/O的完成,其他某进程的退出,系统资源的可用,锁,等等),转而步入睡眠。
Z0U(vs2~i0
在UNIX里(以及Linux 2.6之前),内核是非抢占性的(non-preemptive),上下文切换(context switch)也只能在一个进程从内核模式运行步入睡眠时得以允许。抢占性的内核就复杂了,表现在状态转换上还算简单:多了一条从内核模式运行到就绪运行的路径而已。LUPA开源社区0qlt!lrC
5M[ V X&M&g&Xf0
导入论坛
收藏
分享给好友
管理
举报
TAG:
Linux
kernel