【问题标题】:Does virtual address space resides in virtual memory?虚拟地址空间是否驻留在虚拟内存中?
【发布时间】:2014-01-16 03:31:43
【问题描述】:

虚拟地址空间是否驻留在虚拟内存中?我有一个困惑,每个过程 有自己的虚拟内存和页表,从虚拟地址到物理地址的转换是在将其加载到物理内存时发生的,但是虚拟地址空间在哪里出现呢?我浏览了许多操作系统书籍,但它在任何地方都只是解释了特定单词而不是它所在的位置以及它们之间的关系以及它是如何运行的。 请从理论上解释我,不需要示例。 提前致谢。

【问题讨论】:

  • 地址空间就是一组可能的(数字)地址。物理地址空间是物理内存地址的集合,虚拟地址空间也是如此。进程处理虚拟地址(在大多数平台上)。
  • 虚拟地址空间(例如进程)只是一个数据结构(页表),它告诉硬件如何将访问内存时使用的内存地址转换为物理内存地址。当前活动的页表驻留在物理内存中,并且可以随时更改/切换以提供另一组映射,例如为每个进程提供一组不同的映射。
  • 你的实际编程问题是什么?这似乎是一个理论问题,更适合cs.stackexchange.com

标签: memory-management operating-system


【解决方案1】:

(虚拟)地址空间是给定地址宽度(即 x86 上为 2^32 字节,x64 上为 2^64)的允许地址集。虚拟内存通常意味着几乎相同。它是特定进程或应用程序或整个系统的一组允许地址。单个应用程序的虚拟内存最多可以与系统的虚拟地址空间一样大。每个应用程序只能“看到”操作系统分配给它的虚拟地址空间(并且由于一些诡计,每个应用程序可能具有相同大小的虚拟地址空间,并且总和可能大于系统的地址空间)。

物理内存(更正确的是:物理 RAM),是有效安装的 RAM 模块的数量。它通常小于虚拟地址空间。如果需要,操作系统会进行交换以将所需的内存页面从硬盘带入物理内存。物理内存中的内存页有一个物理地址一个虚拟地址。普通应用程序只看到虚拟地址,它们不(也不能)关心内存页面的物理加载位置。因此,在应用程序或调试器中看到的地址实际上是该应用程序的虚拟地址空间中的虚拟地址。只有在直接连接到硬件时才需要物理地址。如果操作系统决定这样做,它甚至可以不断变化。

希望这能让它更清楚一点。

【讨论】:

  • 我有点清楚,但仍然有一些困惑,例如,每个进程都有自己的虚拟内存和页表,它是否也有自己的虚拟地址空间,我的意思是每个进程都有自己的虚拟地址空间?
  • 我有些清楚,但仍然有些困惑,根据您的回答,以下陈述是否属实?每个进程是否都有自己的虚拟地址空间,就像每个进程都有自己的虚拟内存和页表一样?如果它们是相同的,则从虚拟内存或虚拟地址空间映射到物理地址?
【解决方案2】:

我不是专家,但我认为虚拟寻址和分页是 80386 之后引入的 cpu 保护模式的一部分,它不是操作系统的一部分。操作系统控制页表。例如,对于虚拟地址,它们只是可执行文件中的数字 objdump -d 将显示它们

【讨论】:

    猜你喜欢
    • 2013-11-10
    • 2023-03-17
    • 2018-07-09
    • 2017-12-08
    • 2021-09-11
    • 2021-03-18
    • 2011-12-27
    • 1970-01-01
    • 2021-07-25
    相关资源
    最近更新 更多