进程状态转换

上一篇 / 下一篇  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)

,j l&|'y kE)\0

内核模式运行的进程,为了等待特定的事件(比如I/O的完成,其他某进程的退出,系统资源的可用,锁,等等),转而步入睡眠。

Z0U(vs2~i0

在UNIX里(以及Linux 2.6之前),内核是非抢占性的(non-preemptive),上下文切换(context switch)也只能在一个进程从内核模式运行步入睡眠时得以允许。抢占性的内核就复杂了,表现在状态转换上还算简单:多了一条从内核模式运行到就绪运行的路径而已。LUPA开源社区0qlt!lrC

 

5M[VX&M&g&Xf0

TAG: Linux kernel

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

我的栏目

日历

« 2008-10-14  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 183
  • 日志数: 4
  • 建立时间: 2007-12-23
  • 更新时间: 2008-08-25

RSS订阅

Open Toolbar