在linux中两个进程之间的上下文切换期间会发生什么

时间:2016-12-03 23:01:26

标签: linux-kernel operating-system multiprocessing

让我们说进程p1正在使用自己的地址空间(堆栈,堆,文本)执行。当上下文切换发生时,我知道在加载进程p2之前,所有当前的cpu寄存器都被推入PCB。然后刷新TLB并加载p2地址映射并开始使用自己的地址空间执行。 我想知道的是p1地址空间的状态。是否会在加载进程p2之前将其复制到磁盘并更新其页表?

1 个答案:

答案 0 :(得分:2)

上下文切换的细节取决于底层硬件。但是,即使在不同的系统中,上下文切换也基本相同。

你遇到的错误是“我知道在加载进程p2之前所有当前的cpu寄存器都被压入堆栈”。寄存器存储在存储器区域中,该区域通常称为PROCESS CONTEXT BLOCK(或PCB),其结构由处理器定义。大多数处理器具有用于将过程上下文(即,其寄存器)加载和保存到该结构中的指令。在英特尔的情况下,由于所有不同的寄存器组(例如FPU,MMX),这可能需要多个指令保存到多个块。

不必将传出进程写入磁盘。如果系统需要更多内存,它可能会被分页,但它可能完全保留在内存中并准备好执行。

上下文切换只是将一个处理器保存的寄存器值替换为另一个处理器。