在虚拟内存管理中,交换输入/输出用于管理页面错误,交换文件位于预先分配的磁盘位置。
但是,当涉及到请求分页时,例如,在加载程序代码时,虚拟内存管理系统如何知道下一条指令的实际位置?它是否将可执行文件映射为内存映射文件?
答案 0 :(得分:1)
这里实际上有两个不同的问题:
1)OS program loader如何从磁盘读取可执行文件并为程序运行创建地址空间?
......和......
2)OS virtual memory management如何运行程序?
答案 1 :(得分:0)
这取决于操作系统。我在这里给出的描述是基于许多系统的简化。
可执行文件描述了许多程序部分。加载程序读取可执行文件并使用它来定义内存中的部分。对于静态数据和代码,可执行文件将成为用于分页的文件(只读)。对于只读存储器,系统页面文件用于分页(读/写)。
在这个模型中,是的,可执行文件是一个内存映射文件(尽管只有一部分映射到内存)。某些系统不支持直接分页到可执行文件。
当程序第一次在页面上执行指令时,存储器管理单元检测到页面不在内存中并且页面被备份到可执行文件。然后,它从可执行文件加载页面并重新启动指令。这就是程序启动时出现大量页面错误的原因。