问题描述
galvin OS 文本说在旧系统上,曾经有一种方法,其中整个运行过程(处于空闲状态时)从主内存(当主内存不足时)移动到磁盘,作为后备商店。
文字说明我们换出的任何进程都放在磁盘的“交换空间”中。
现在我想知道何时运行可执行文件,“进程映像”在哪里创建和存储?在下图中,a.out
是可执行文件,我知道该可执行文件只是一个二进制文件,其中包含目标机器的机器指令、数据和重定位信息。但是这个可执行文件的虚拟内存还没有形成,或者说“进程”不同于可执行文件,具体有:代码、静态/全局变量段、堆段和堆栈段。
下图显示了有4页的“新进程”在磁盘中,但它保存在磁盘中?在文件系统或交换空间下?
现在上图是关于需求分页的。磁盘中的页面 A、B、C、D、E、F、G、H 位于磁盘的哪个位置,是在交换空间中还是在文件系统中?是不是系统只为那些从主内存中冲出的脏页使用交换空间(同时将进程的实际页保留在文件系统下)并随后读取它们,但如果是这种情况,我们可以因此,只需关闭交换空间并使用磁盘上进程的文件系统版本即可。我有这个疑问,因为一节中的文字说:
在 Solaris 1 (SunOS) 中,设计人员更改了标准 UNIX 方法以提高效率并反映技术发展。 当一个进程执行时,包含代码的文本段页面被从文件系统带入,在主内存中访问,如果被选择用于页面输出,则将其丢弃。从文件系统重新读取页面比将其写入交换空间然后从那里重新读取更有效。 交换空间仅用作匿名内存(不由任何文件支持的内存)页面的后备存储,其中包括为进程的堆栈、堆和未初始化数据分配的内存。
文中是这样定义虚拟内存和需求分页的:
虚拟内存涉及开发人员感知的逻辑内存与物理内存的分离。当只有较小的物理内存可用时,这种分离允许为程序员提供非常大的虚拟内存。虚拟内存使编程任务变得更加容易,因为程序员不再需要担心可用的物理内存量;她可以专注于编写要解决的问题。进程的虚拟地址空间是指进程如何存储在内存中的逻辑(或虚拟)视图。通常,这种观点认为进程从某个逻辑地址(例如地址 0)开始,并存在于连续内存中。事实上,物理内存是按页框组织的,分配给进程的物理页框可能不连续。内存管理单元 (MMU) 负责将逻辑页映射到内存中的物理页框。
请求分页,常用于虚拟内存系统。使用按需分页虚拟内存,页面仅在程序执行期间需要时才加载。永远不会被访问的页面因此永远不会被加载到物理内存中。 请求分页系统类似于具有交换的分页系统,其中进程驻留在二级内存(通常是 HDD 或 NVM 设备)中。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)