进程上下文切换是什么(新手必看)
进程上下文是指操作系统中某个进程完全运行所需要的状态信息。
当操作系统的调度器从一个进程切换到另一个进程时,它需要保存当前进程的上下文,并加载下一个进程的上下文。
进程上下文主要包括以下部分:
进程上下文确保了进程能够在被中断后恢复执行,即像没有被中断一样继续执行其任务。操作系统通过在进程间切换上下文来实现多任务处理。
进程上下文切换是指操作系统挂起一个进程的执行并启动另一个进程的执行过程中所涉及的活动,将 CPU 资源从一个进程分配给另一个进程的过程。这种切换通常发生在多任务操作系统中。
从用户角度看,计算机能并行执行多个程序,这恰恰是操作系统快速进行进程上下文切换产生的效果。
在进程上下文切换的过程中,操作系统需要先存储当前进程的上下文状态信息,再加载下一个进程的上下文状态信息,然后执行此进程,如下图所示。
进程上下文切换的详细过程如下:
虽然进程上下文切换是多任务操作系统的基础特性,但是它也有性能代价。过多的上下文切换会增加 CPU 的工作负载,降低处理效率。这个性能代价在系统设计和优化时通常需要被考虑。
当操作系统的调度器从一个进程切换到另一个进程时,它需要保存当前进程的上下文,并加载下一个进程的上下文。
进程上下文主要包括以下部分:
- CPU 寄存器:包括程序计数器(它指向要执行的下一条指令)以及栈指针(Stack Pointer,SP,它指向进程栈中的当前位置)。此外,还包括累加器、索引寄存器和状态寄存器等;
- 程序状态字(Program Status Word,PSW):存储了进程的状态信息,比如条件代码、CPU 的模式以及中断使能/禁用状态等;
- CPU 内核栈:内核模式下使用的栈,通常用于存储内核过程或中断服务例程中的局部变量和返回地址;
- PCB:包含操作系统用于管理进程的各种信息,比如进程状态(运行、就绪、等待等)、进程ID、进程优先级、CPU 时间、内存管理信息(如页表或段表),以及其他资源的追踪等;
- 内存管理信息:包括虚拟地址空间的状态,如页表或段表,它们记录了虚拟地址到物理地址的映射;
- 打开文件和 I/O状态:进程打开的文件描述符、网络连接状态、缓冲区信息等都是进程上下文的一部分;
- 进程账户信息:如 CPU 时间、实际用户 ID 和有效用户 ID 等。
进程上下文确保了进程能够在被中断后恢复执行,即像没有被中断一样继续执行其任务。操作系统通过在进程间切换上下文来实现多任务处理。
进程上下文切换
在现代操作系统中,进程上下文切换是一项基础而关键的功能,它的高效实现对于提高系统整体性能至关重要。进程上下文切换是指操作系统挂起一个进程的执行并启动另一个进程的执行过程中所涉及的活动,将 CPU 资源从一个进程分配给另一个进程的过程。这种切换通常发生在多任务操作系统中。
从用户角度看,计算机能并行执行多个程序,这恰恰是操作系统快速进行进程上下文切换产生的效果。
在进程上下文切换的过程中,操作系统需要先存储当前进程的上下文状态信息,再加载下一个进程的上下文状态信息,然后执行此进程,如下图所示。

进程上下文切换的详细过程如下:
1) 存储当前进程上下文状态信息
在切换到新进程之前,系统需要存储当前正在运行进程的上下文状态信息,包括程序计数器、CPU寄存器的内容、系统调用状态、内核堆栈等信息。这些信息通常被存储在 PCB 中。2) 加载下一个进程上下文状态信息
系统随后加载下一个进程的上下文状态信息,这个进程可能是新选择的要执行的进程,或者是从等待状态被唤醒的进程。CPU 寄存器会加载下一个进程的相关值,程序计数器中的指令地址也会被更新为下一个进程要执行的下一条指令地址。3) 资源重新分配
在上下文切换过程中,操作系统还需要管理并更新其他系统资源的状态,比如虚拟内存、I/O 状态等。引起进程上下文切换的原因
引起进程上下文切换的原因有以下几个方面:- 时间片用尽:大多数操作系统通过时间片来分配进程的执行时间。当一个进程的时间片用尽时,操作系统会进行进程上下文切换,执行其他进程;
- I/O请求:如果一个进程发出 I/O 请求,那么在 I/O 操作完成前,它不需要 CPU。在这种情况下,操作系统会进行进程上下文切换,执行其他进程;
- 高优先级进程:如果有高优先级进程需要执行,操作系统可能会打断当前进程的执行,先执行高优先级进程;
- 中断处理:硬件或软件中断可能导致当前进程被暂停,以便操作系统响应和处理中断。
虽然进程上下文切换是多任务操作系统的基础特性,但是它也有性能代价。过多的上下文切换会增加 CPU 的工作负载,降低处理效率。这个性能代价在系统设计和优化时通常需要被考虑。