operating-system - 在上下文切换中将 CPU 分配给另一个进程究竟意味着什么?
问题描述
我正在研究计算机组织和操作系统。一个让我很困惑的是,在上下文切换中将 CPU 分配给进程到底意味着什么?
术语“分配 CPU ”与我对上下文切换的想象不符。
所以我想确定如果我是对的,根据我的观点:
存储程序架构将指令存储到主存储器中,这些指令与进程的文本部分一样。
从计算机组织的角度来看,只有程序计数器决定执行哪条指令。
如果内核决定将分配从进程 1 切换到进程 2,即上下文切换,它会:
- 将Process 1的数据存储到PCB 1
- 将Process 2的数据,即PCB 2加载到内核中
- 从PCB 2更新所有寄存器值(包括 PC)
- 然后PC的地址被更新到另一个文本部分。下图显示了我的想法。
那么,我可以说内核实际执行另一个进程是做什么的,它是否进行了上下文切换,基本上只是将程序计数器的地址更改为另一个进程的文本部分地址?
解决方案
进程由其寄存器值定义。其中一些将是任何应用程序都可以更改的通用寄存器,而其他将是只能在内核模式下更改的系统寄存器。
大多数处理器定义了一个通常称为进程上下文块的结构。PBC 定义了定义过程状态的每个寄存器的存储位置。一些处理器需要多个类似 PCB 的结构作为我的保存浮点和其他类型的寄存器。
大多数处理器都有加载进程上下文和保存进程上下文指令(或它们的等效指令。这些指令通常只有一个操作数:PCB 的地址。
然后流程更改如下所示:
SAVEPCTX address_of_pcb_for_current_process
LOADPCT address_of_pcb_for_next_process ; after this, in a new process.
REI ; Return to user mode.
在一些设计不佳的处理器上,这些步骤更加复杂。
“分配 CPU”一词与我对上下文切换的想象不符。
这一切都取决于你如何看待它。处理器总是需要运行某些东西(除非您有一些专为移动设备设计的处理器,可以轻松关闭)。那么上下文切换是将处理器分配给进程还是将进程分配给CPU?
推荐阅读
- c# - 当接收到过多的传递字段时,传递给控制器的模型变为空
- python-3.x - 如何在自定义 dataproc 映像中安装可选组件(anaconda、jupyter)
- django - AssertionError: 403 != 200 在 APITestCase
- javascript - Laravel DatatableJs 无效的 JSON 响应
- python - 如何从字典中选择所有时间以及时间发生点的名称?
- android - 如何在 Android 上关闭 QLineEdit 中的预测文本?
- visual-studio-code - Visual Studio Code 键盘快捷键获取 keybindings.json
- r - R中Seurat分析中的for循环函数
- python-3.x - 'float' 对象在 NLP 中不可迭代
- html - 为什么当我进行实时预览时这一直发生在我身上