内存中一次只有一个进程,上下文切换是否不断在 DRAM 和磁盘之间来回移动进程?还是同时在 DRAM 中保存多个进程,上下文切换只是改变 CPU 正在执行的进程?
这对于虚拟内存有何不同?
答案1
这个问题确实没有任何意义。
信息根据其使用频率和虚拟内存管理器做出的决定加载到内存中并保存。进程由调度程序调度。两者之间没有任何关系。
在现代操作系统中,保存在内存中的不是进程,而是页面。想象一下,例如,两个进程运行同一个可执行文件,当任何一个进程访问它们时,许多页面将被共享并加载到内存中(如果需要)。
答案2
我偶尔会从哲学的角度思考这个问题,尝试将其应用到人类身上,以思考我们对某些过程的体验。我用电脑来模拟我们;意识是来自记忆的信息过程的产物。
这对我没有帮助,但我认为它适用于你的问题,因为在简单的情况下,答案是肯定的。
在 CPU 核心中,如果该过程正在执行在程序中,我们知道处理器正在处理来自寄存器内存的数据。也许这还不够低。再深入一点,到执行的阈值,这个过程会导致这产品,我们将看到它结束在算术逻辑单元. ALU 具有执行以下功能:对两个数进行运算。所以,这就是为什么我说是的,如果我们的视野有限,那么内存中一次只有一个进程。
所以:
- 寄存器 = 工作记忆(我们的缓冲区,保存着我们很快体验到的信息)现在(事发后几毫秒)
- ALU = 进程的结束阈值(我们对该内存执行的最后一项操作)
- 产品/输出 = 意识(过程的结果)
这不是问题的答案,但我希望让您思考不同级别和类型的内存,并记住这一切的底层是一台物理机器。答案假设 ALU 最终将从两个输入和一个输出完成该过程。现代 CPU 可能太复杂了,我甚至无法说出单元末端实际上有多少个潜在的最终子 ALU。
答案3
部分多个进程的地址空间肯定可以同时位于物理内存中,而且几乎总是如此。进程的所有 vas 都驻留在物理内存中的情况非常罕见。没有一个驻留在物理内存中的情况也几乎同样罕见。(事实上,在 Windows 上,由于每个进程都带有少量不可分页的信息,所以这是不可能的。不知道其他操作系统的情况,但我认为情况是一样的。)
由于调度行为,内存不会被调入或调出 — — 当然,除非一个未运行的线程不会引发页面错误;如果进程中的所有线程都没有运行,那么就没有理由调入它的任何虚拟地址空间。
相反,如果 RAM 不足和/或页面错误率很高,长时间空闲的进程可能会从其工作集中回收部分内存(并且可能但不一定从 RAM 中丢失)。
您没有指定要询问的操作系统。在 Windows 上,任务管理器的“进程”选项卡(Windows Vista 和 7)或“详细信息”选项卡(Windows 8.x),“内存(私有工作集)”将显示每个进程的工作集中有多少 RAM,对于进程私有的 vas,“内存(共享工作集)”列告诉您每个进程的 ws 中有多少 RAM,这些 RAM 也可能位于其他进程的工作集中。
此外,修改和备用页面列表中通常会有一些与许多进程相关的页面。备用列表是 Windows 报告为“可用”的一部分,而修改列表则不是。这些页面不在任何进程的工作集中,但如果相应的虚拟页面发生故障,则可以非常快速地“调入”它们,而无需进入磁盘。