1. CPU的状态
CPU总是处于以下3种状态的一种:
a) 内核态,运行于进程上下文,内核代表进程运行于内核空间;
b) 内核态,运行于中断上下文,内核代表硬件运行于内核空间;
c) 用户态,运行于用户空间。
2. 进程上下文
它是一种内核所处的操作模式,此时内核代表进程执行系统调用或运行内核线程。既然代表进程,那么就用前面“进程定义及其结构”中一文中提到的task_struct保存进程所需的资源,只不过堆栈变成了stack(0)。用此结构保存现在进程的状态,在进程上下文中可以睡眠,也可以调用调度程序。
3. 中断上下文
硬件通过触发信号,导致内核调用中断处理程序,进入内核空间。这个过程中,硬件的一些变量和参数也要传递给内核,内核通过这些参数进行中断处理。所谓的“中断上下文”,其实也可以看作就是硬件传递过来的这些参数和内核需要保存的一些其他环境。(以上来自网络,没有找到更权威的说法)。由于中断处理程序与程序没有联系,也就没有相应的task_struct结构,那就不能保持状态。而进程是系统调用的单元,一旦睡眠或者让出CPU,就不能重新调度了。这也就是为什么中断上下文中不能让出CPU。