内核如何在进程之间进行上下文切换?
当需要用户模式和内核模式之间的交互时,不需要上下文切换;简单的模式转换并非上下文切换。因为,取决于操作系统,此时也可能发生上下文切换。
让我们看看上下文切换的主要步骤
CPU寄存器的值通常保存在发生时钟中断之前正在运行的进程的进程表中。
要运行下一个进程,则从进程中加载寄存器并由CPU调度程序选择。
考虑一个多程序单处理器系统,上下文切换频繁发生,因此所有进程似乎并发运行。如果一个进程有多个线程,操作系统使用上下文切换技术来调度线程,使它们看起来并行执行。
如果线程在内核级别实现,则会出现这种情况。线程也可以在运行时库的用户级别实现。因为操作系统不提供线程调度,程序员有责任为每个线程提供足够的CPU时间,以便进程中的所有线程都能取得进展。
进程间的上下文切换非常昂贵。在切换进程之前,其进程控制块(PCB)必须由操作系统保存。
PCB包含以下信息:
进程状态。
程序计数器 (PC)。
不同寄存器的值。
进程的CPU调度信息。
关于进程的内存管理信息。
该进程的可能会计信息。
进程的I/O状态信息。
当操作系统保存当前正在执行进程的PCB时,它会加载下一个要在CPU上运行的进程的PCB。这是一个繁重的任务,需要更多时间。
让我们看看下面的图表,说明进程之间是如何进行上下文切换的:
广告