我们在介绍进程、线程、中断时常常提及上下文的概念,那么什么是上下文。
这是个面试提问概率比较大的问题,对于一个嵌入式linux软件系统,时刻都在进行着用户空间和内核空间的相互切换,以及进程间的轮转调度,时不时还会来个中断,进入到中断处理程序然后再返回。在这切换的过程中,我们需要保存进程在用户空间的状态,以便切换回去时恢复原来状态,由此引入了上下文的概念。
文章目录
一、上下文基本概念
进程上下文和中断上下文是操作系统中很重要的两个概念,这两个概念在操作系统课程中不断被提及,是最经常接触、看上去很懂但又说不清楚到底怎么回事。造成这种局面的原因,可能是原来接触到的操作系统课程的教学总停留在一种浅层次的理论层面上,没有深入去研究。
处理器总处于以下状态中的一种:
1、内核态,运行于进程上下文,内核代表进程运行于内核空间;
2、内核态,运行于中断上下文,内核代表硬件运行于内核空间;
3、用户态,运行于用户空间。
其实,除了上面三种状态之外,还有一种就是永远处于内核态的内核线程,内核也有自己的任务需要处理,这类内核线程有一部分完全运行于内核空间,它们也有自己的上下文,所以我们把这种状态归纳为运行于内核线程上下文吧。
通过执行ps命令,可以看到有些进程名以[]括起来,这些就是内核线程,它们负责完成特定的任务,像我们后面会介绍的2号进程或者说内核线程kthreadd。
用户空间的应用程序,通过系统调用(当然触发异常也会
),进入内核空间。这个时候用户空间的进程要传递很多变量、参数的值给内核,内核态运行的