假设进程
p1
正在使用自己的地址空间(堆栈,堆,文本)执行。当上下文切换发生时,我知道所有当前的 cpu 寄存器在加载过程之前都会被推入 PCB p2
。然后 TLB 被刷新并加载 p2
地址映射,并开始使用自己的地址空间执行。
我想知道的是 p1
地址空间的状态。在加载过程之前它会被复制到磁盘并更新其页表吗p2
?
上下文切换的细节取决于底层硬件。然而,即使在不同的系统之间,上下文切换也基本相同。
你的错误是“我知道所有当前的CPU寄存器在加载进程p2之前都被推入堆栈”。寄存器存储在通常称为进程上下文块(或 PCB)的内存区域中,其结构由处理器定义。大多数处理器都有用于将进程上下文(即其寄存器)加载和保存到该结构中的指令。就英特尔而言,由于所有不同的寄存器集(例如 FPU、MMX),这可能需要将多条指令保存到多个块。
传出进程不必写入磁盘。如果系统需要更多内存,它可能会被调出,但它有可能完全保留在内存中并准备好执行。
上下文切换只是一个处理器保存的寄存器值与另一个处理器的交换。
进程 P1 在 RAM 中,进程 P2 正在运行。执行上下文切换并且 调度程序已准备好执行上下文切换,因为 P2 想要执行 I/O.. 哪个 将执行以下操作。如果适用,请选择多个答案。 (a) 加载P2的状态并保存P1的状态。 (b) 保存 P1 的 PCB。 (c) P2 的 PCB 已恢复。 (d) P2 移至就绪队列,P1 移至 CPU。 (e) 保存P2的状态并将其移回就绪队列。 (f) 仅 (c) (g) 以上都不是