其含义分别为:
running:正在运行
runnable:可以运行,但是由于调度的关系,没有运行
blocked:进程由于缺少某种资源,不能运行,这里还可以再把这个状态分为interruptable, uninterruptable, 以及killable三种
它们之间的状态转换关系如下图所示:
其中running和runnable可以相互转换,代表性的动作就是一个进程的时间片用完了,换另一个运行。而一旦一个进程由于缺少某种资源从running转换到blocked,尽管它可能在不久的将来获得该资源,但是它不能直接转换为running状态,它必须经过runnable状态进行中转。
在linux当中,可以将任意时刻每个处理器上的代码的上下文进行如下总结:
1. 运行与用户空间,执行用户进程
2. 运行于内核空间,处于进程上下文,代表某个特定的进程执行
3. 运行于内核空间,处于(软)中断上下文,与任何进程无关,处理某个特定的(软)中断