进程页面存储在哪里 - 在交换空间中还是在文件系统下?在没有空间的情况下,请求调页可以工作吗?

进程页面存储在哪里 - 在交换空间中还是在文件系统下?在没有空间的情况下,请求调页可以工作吗?

Galvin OS 文本说,在旧系统上,曾经有一种方法,将整个正在运行的过程(处于空闲状态时)从主内存(当主内存不足时)移动到充当后备存储的磁盘。

在此处输入图片描述

文中说,我们换出的任何进程都放在磁盘的“交换空间”中。

随着时间的推移,交换的概念也应用于分页进程:

在此处输入图片描述

现在我想知道当可执行文件运行时,“进程映像”在哪里创建和存储?下图中,是a.out可执行文件,我知道可执行文件只是一个二进制文件,其中包含目标机器的机器指令和数据以及重定位信息。但是这个可执行文件的虚拟内存尚未形成,或者说“进程”与可执行文件不同,其中有特定的:代码、静态/全局变量部分、堆部分和堆栈部分。

在此处输入图片描述

下图显示具有 4 个页面的“新进程”位于磁盘中,但它保存在磁盘的哪个位置?在文件系统下还是交换空间下?

在此处输入图片描述

在需求分页部分,文字内​​容如下:

在此处输入图片描述

在此处输入图片描述

现在上面的图片是关于请求分页的。页面 A、B、C、D、E、F、G、H 放在磁盘的什么位置?是在交换空间中还是在文件系统中?系统是否只将交换空间用于那些从主内存中清除的脏页(同时将进程的实际页面保留在文件系统下)并在稍后读取它们,但如果是这种情况,我们可以关闭交换空间并使用磁盘上进程的文件系统版本。我之所以有这种疑问,是因为其中一节中的文字写道:

在 Solaris 1(SunOS)中,设计人员改变了标准 UNIX 方法以提高效率并反映技术发展。当进程执行时,包含代码的文本段页面会被带入从文件系统,在主内存中访问,如果选择页面输出,则丢弃。从文件系统重新读取页面比将其写入交换空间然后从那里重新读取更有效。交换空间仅用作匿名内存页面(不受任何文件支持的内存)的后备存储,其中包括为进程的堆栈、堆和未初始化数据分配的内存。


文中对虚拟内存和请求分页的定义如下:

虚拟内存涉及将开发人员认为的逻辑内存与物理内存分开。这种分离允许在只有较小的物理内存可用时为程序员提供极大的虚拟内存。虚拟内存使编程任务变得容易得多,因为程序员不再需要担心可用的物理内存量;她可以专心于编写要解决的问题。进程的虚拟地址空间是指进程在内存中的存储方式的逻辑(或虚拟)视图。通常,这种观点认为进程从某个逻辑地址(例如地址 0)开始,并存在于连续的内存中。事实上,物理内存以页框的形式组织,分配给进程的物理页框可能不连续。由内存管理单元 (MMU) 将逻辑页面映射到内存中的物理页框。

请求调页并常用于虚拟内存系统。使用按需分页虚拟内存,页面仅在程序执行期间需要时才加载。因此,从未访问过的页面永远不会加载到物理内存中。请求分页系统类似于具有交换功能的分页系统,其中进程驻留在辅助存储器中(通常是 HDD 或 NVM 设备)

相关内容