2.3 操作系统 进程、中断上下文
一、进程上下文
内容:进程上下文是指进程在执行过程中的运行环境,包括各种寄存器的值、程序计数器、栈指针、内存分配情况、打开的文件描述符等。
理解:可以将进程上下文看作是进程运行时的 “现场” 信息。当操作系统需要暂停一个进程的执行,转而执行其他进程时,会保存当前进程的上下文,以便之后能够恢复该进程的执行,就像电影播放中途暂停,之后可以从暂停的地方继续播放一样。
进程上下文的三个部分
1、用户级上下文:正文、数据、用户堆栈、共享存储区。
2、寄存器上下文:通用寄存器、程序计数器、处理器状态寄存器(CPSR)、栈指针(SP);
3、系统级上下文:进程控制块、内存管理信息、内核栈。
进程上下文切换
当进程发生调度、进程阻塞、进程完成并终止时,操作系统就会进行进程上下文切换。系统调用属于模式切换,不一定会导致进程上下文切换,最主要是对寄存器进行切换。
二、中断上下文的概念和特点
中断上下文是指在发生中断时,系统保存当前程序执行状态(包括寄存器的值、程序计数器等),并切换到中断处理程序执行的过程中所涉及的环境和数据集合。中断时,内核不代表任何进程运行,一般只访问系统空间,不访问进程空间。
特权级别:运行在内核模式或者超级用户模式。
无线程调度:在中断过程中,不会进行线程的挂起、切换。会关闭进程调度,因此中断服务程序里面不能睡眠。
执行优先级:具有比普通线程更高的优先级。
栈和寄存器:有独立的栈和寄存器。
三、中断上下文代码中的注意事项
运行于进程上下文的内核代码是可抢占的,但中断上下文会禁止抢占,一直会运行到中断程序执行结束。
1、睡眠或放弃 CPU;2、尝试获取一些阻塞锁:如,互斥锁、信号量等;3、执行耗时任务(可以借助下半部);4、访问用户空间虚拟地址,因为中断运行在内核态。
四、处理器总处于三种状态
内核态,运行于进程上下文,内核代表进程运行于内核空间,如:根据进程请求访问硬件资源、管理内存等。
内核态,运行于中断上下文,内核代表硬件运行于内核空间,如,响应设备的输入输出请求、处理定时器中断。
用户态,运行于用户空间。
五、什么情况下会从用户态切换到内核态
1、在进程上下文中进行系统调用,或者出现异常。
2、在中断上下文中,由于硬件发出中断请求,进而进入内核态执行中断服务函数。
一名985硕,在25年秋招中斩获多个C++/嵌入式开发Offer。本专栏将分享我的面经,涵盖C/C++、操作系统、计算机网络、ARM体系与架构、Linux应用/驱动开发、Qt、通信协议及开发工具链等核心内容。