进程管理之上下文切换与进程控制详解
一、上下文切换的定义
在多程序运行环境下,程序以进程形式存在,且多个进程共享CPU资源。不同时刻,进程需要切换以获取CPU执行权,这个切换过程被称为进程的上下文切换。“上下文”英文为“context” ,“context switch”即上下文切换。
二、上下文切换的具体内容
传统操作系统课本指出,进程上下文切换涉及寄存器。寄存器与CPU联系紧密,若要在操作系统内实现进程切换,就必须清楚操作系统所在CPU的寄存器情况,包括寄存器的种类以及进程对它们的使用情况。
进程运行时依赖多种寄存器,例如程序计数器,它用于指示进程的执行位置;栈指针同样作为寄存器,栈能反映调用关系和局部变量的位置等。进程切换时,这些寄存器信息会被保存到进程控制块(PCB)的特定位置。当运行其他进程时,再从相应进程的PCB中取出寄存器等上下文信息,恢复到CPU中,依据PCB信息重新配置寄存器资源,确保新进程能在CPU上继续执行。
三、上下文切换的过程示例
以进程A和进程B为例,进程A执行一段时间后,操作系统会调度进程B执行。此时,进程A需将其“context”(即各类寄存器信息)保存到PCB中,随后将进程B的PCB中保存的上下文信息恢复到CPU,以此完成进程间的切换。
四、上下文切换的实现方式及开销要点
上下文切换涉及的信息与硬件关联密切,在实际操作和真实操作系统中,这部分代码大多由汇编代码编写。
上下文切换的开销十分关键,我们期望其开销越小越好,这样进程就能将更多时间用于执行自身任务,而非耗费在上下文切换上。
五、进程队列管理
能够在CPU上执行的进程被放置在一个队列中,该队列常被称为就绪队列(也叫rq或运行队列等),它以链表形式存在,便于操作系统挑选进程执行。部分进程暂时无法占用CPU,它们在等待特定事件,这类进程会被置于等待队列。此外,还有一个僵尸队列,其具体含义将在后续进程控制时深入探讨,在此先给留个思考问题:僵尸队列中存放的是什么呢?