虚拟地址空间所在的位置

时间:2019-06-25 20:25:51

标签: operating-system virtual-memory

无法理解在RAM或HARD-DISK中存在虚拟地址空间的位置吗? 如果它存在于RAM中,那么它的地址空间如何大于物理地址空间?

3 个答案:

答案 0 :(得分:0)

顾名思义,

虚拟地址是虚拟。它们仅由处理器操纵,在转换之前不会与实际地址对应。

由于操作系统填写了表格,因此转换是由硬件完成的。这些表为每个潜在的虚拟页面地址指示其对应的物理页面地址。因此,大多数情况下,虚拟地址会映射到物理(RAM)地址。

  

无法理解在RAM或HARD-DISK中存在虚拟地址空间的位置吗?如果它存在于RAM中,那么它的地址空间如何大于物理地址空间?

就虚拟地址而言,进程始终具有相同类型的内存结构。在地址较低的一端,有指令,全局数据和堆,它们按几个组织。在最上端是程序参数(argv)和堆栈。在它们之间有可用空间,可以使堆栈和堆增长。
因此,地址等于0(程序的第一条指令)和0xfffffffffffffffffff(堆栈的开始)。
显然是远远超出了目前大多数(全部?)RAM的容量。通过64位虚拟地址和4GB RAM(32位),最多可以使用 超过10亿个页面。
但是由于基于页面的翻译,映射机制是可能的。在堆和堆栈之间的可用空间中,绝不会使用大多数地址。在这种情况下,操作系统不会创建用于翻译的页表。
如果您在程序中生成一个随机地址,则最有可能的是它不会与系统映射到RAM的地址相对应。如果您尝试对该地址进行任何访问,则处理器将检测到不存在任何页面,并将引发将由系统处理的异常。系统很可能会停止您的程序并显示错误消息,例如“访问冲突”。

使用相同的机制将部分内存映射到磁盘。为了以某种方式增加内存大小,系统可以交换分配给一个进程的物理内存的磁盘部分,以便将其分配给另一个进程。如果第一个进程尝试访问它,则会再次引发异常,但是OS将检测到该地址对应于该存储到磁盘的内存区域。它将读取磁盘,确定该页面的物理地址,填写相应的页面表,还原内存内容,然后返回到现在可以执行内存访问的程序。

答案 1 :(得分:0)

虚拟地址空间保留在辅助存储(磁盘)中。虚拟内存的虚拟部分意味着操作系统在辅助存储器中维护地址空间的映像。由于地址空间的映像保留在辅助存储器中,因此它可能大于物理内存。

实现虚拟内存的第二部分是完全在内存中进行的逻辑地址转换。在逻辑地址空间中,内存被细分为页面(大约512字节到1MB)。物理内存可细分为页面框架。在大多数系统上,页面框架的大小必须与逻辑页面的大小匹配。

操作系统为每个进程维护一个页表。页表将逻辑地址空间中的页映射到物理页框架。地址由页面表中的索引和页面定位后使用的页面偏移量组成。

在大多数情况下,没有逻辑地址到物理地址的映射。如果访问没有映射的页面,则处理器会产生页面错误。一旦逻辑转换失败,操作系统就必须对页面进行虚拟转换。它看起来是否有问题的页面位于辅助存储中。

如果该页面不存在,则操作系统将触发访问冲突异常。如果该页面确实存在,则操作系统将页面加载到一个空闲的物理页面框架中;更新页面以将页面映射到该页面框架,然后重新启动导致错误的过程。

虚拟内存实现必须在辅助存储中维护每个进程的虚拟地址空间的副本。它必须能够将逻辑页面引用转换为存储在磁盘上的虚拟页面。它必须能够在磁盘上的虚拟页面之间复制内存中的逻辑页面。

您可以在没有虚拟内存转换的情况下进行逻辑内存转换,但是在没有逻辑内存转换的情况下不能进行虚拟内存转换。

答案 2 :(得分:0)

虚拟地址空间存储在硬盘中。好的,但是在哪里?该过程为此使用了两个文件。其中一个是页面文件,另一个是交换文件。

但是页面文件和交换文件之间有什么区别?

交换文件用于内存已完全用尽并且进程需要更多内存的情况。因此,交换是内存的扩展部分。交换文件的另一个实用程序是在进程之间切换上下文。因此,例如,假设进程A正在执行,而进程B正在等待运行。然后,在进程B运行之前,将进程A从交换文件中的实际上下文e存储中删除,以等待其时间再次运行。

然后我们有了页面文件。该页面文件用于存储该进程当前未使用的页面。它用于节省内存,因为这是PC中有限的资源。因此,实际存储器中仅存在最近使用的页面。当CPU尝试访问内存中不存在的页面时,CPU会发生异常,由Windows处理,从而将其还原到内存中,更新页面表,并让CPU继续执行该过程。