Operating system 发生上下文切换时PC和CPU注册?

Operating system 发生上下文切换时PC和CPU注册?,operating-system,context-switch,Operating System,Context Switch,根据这一问题: PCB包含大量信息,由内核管理(以避免用户访问) 但我对PC和CPU寄存器有疑问。内核是在每次执行指令时保存这些值,还是仅在上下文切换过程中保存 PCB是链表吗?实际上,CPU寄存器的值是根据指令的运行顺序修改的 例如,指令指针指向要执行的下一条指令,堆栈指针,如果处于活动状态,将在堆栈中存储最后一个程序请求的地址。等等这些基本上都是CPU寄存器 PCB有一个部件处理器状态数据,即这些部件 定义流程运行时的状态的信息 已挂起,允许操作系统稍后重新启动并仍然执行 正确地这始终包括通

根据这一问题:

PCB包含大量信息,由内核管理(以避免用户访问)

但我对PC和CPU寄存器有疑问。内核是在每次执行指令时保存这些值,还是仅在上下文切换过程中保存


PCB是链表吗?

实际上,CPU寄存器的值是根据指令的运行顺序修改的

例如,
指令指针
指向要执行的下一条指令,
堆栈指针
,如果处于活动状态,将在堆栈中存储最后一个程序请求的地址。等等这些基本上都是CPU寄存器

PCB有一个部件
处理器状态数据
,即这些部件 定义流程运行时的状态的信息 已挂起,允许操作系统稍后重新启动并仍然执行 正确地这始终包括通用CPU的内容 寄存器、CPU进程状态字、堆栈和帧指针等。 在上下文切换期间,正在运行的进程将停止,另一个进程将停止 进程有机会运行。内核必须停止执行 对于正在运行的进程,将硬件寄存器中的值复制到 它的PCB,并使用来自的值更新硬件寄存器 新工艺的PCB(摘自维基百科)

内核是在每次执行指令时保存这些值,还是仅在上下文切换过程中保存这些值

所以,你的问题可能已经解决了。内核只会在上下文切换的情况下保存硬件(CPU)寄存器的值,通常情况下不会。否则,它会将维护寄存器的负担留给
进程本身


另外,最后一个问题的答案是--PCB的实现“一般”是作为
双链表数据结构来完成的

首先感谢您的回复,我还有一个问题是process table是PCB的双链表形式吗?我认为它是使用双链表实现的,但我不确定。你最好提出一个新问题,你可能会得到你的回答。也许,我会想出一些办法,让你知道!