【问题标题】:Address translation in virtual memory虚拟内存中的地址转换
【发布时间】:2020-12-01 21:29:53
【问题描述】:

我正在看these series,但我不明白12 位页面偏移量是什么(我只提出2^12-1 并得到4Kb,尽管它的大小为页面本身,但我不确定它是否正确)。我也不明白什么是虚拟页码。 我看过这个家伙的所有系列 1-6,并且确实理解他所呈现的内容。我也喜欢 explanation 的房子和街道,但我还是不明白。

这是他解释的图片:

【问题讨论】:

  • 您的程序使用virtual addresses。在此示例中,为 32 位虚拟地址。虚拟地址最终映射到物理地址。页表有助于将虚拟地址映射到物理地址。物理页面的大小和布局不需要完全映射到虚拟页面 - 它们可以不同。问:这有帮助吗?
  • 我想了解什么是虚拟页码和页偏移量以及如何计算它们以及它们代表什么
  • 在本例中: 1) 您的应用程序有一个 32 位地址。 2) 该 32 位 VA 的 20 个高位指向“页表”中的“页号”。 3) 地址转换机制在页表中获取该条目。 4)页表中的条目指向物理页。 5)操作系统加载物理页面。 6)物理页+页偏移=物理地址。 7) 您的应用程序现在可以访问该地址的数据。
  • 页面偏移量是多少?

标签: memory-management


【解决方案1】:

好的-您发布的图表很好地描述了“虚拟内存”。

关于您最近的问题:

问:页面偏移量是多少?

  1. 当您的程序想要访问内存时,它使用“虚拟地址”。

  2. “虚拟地址”映射到“物理地址”。

    映射涉及“page #”(我们感兴趣的数据驻留在哪个“page”中?)和“offset”的组合。

  3. “偏移量”只是我们的数据所在的页面的位置。

    偏移量“0”是页面中的第一个字节。

    偏移量“9”是页面中的第 10 个字节。

    等等。等等。

也许你的部分困惑是:

问:为什么我们需要“虚拟内存”(以及页面和地址映射) 第一名???

考虑像 DOS 这样的操作系统。没有虚拟寻址,没有“页面”。一切都只是“物理记忆”。

在 DOS 中,16 位地址物理地址。它直接指向物理内存中的特定位置 - 特定字节。 “地址”IS是“偏移量”,从物理内存位置“0”开始。 (严格来说,DOS“地址”实际上是当前“段”的 16 位偏移量,位于 Intel 8086“段寄存器”中。但我们跑题了……)

像 DOS 这样简单的非分页系统的问题之一是RAM limits。另一个问题是任何 DOS 应用程序都可以访问 - 并可能损坏 - 任何其他活动 DOS 应用程序(包括 DOS TSR)使用的内存。

Virtual Memory 解决了这些 - 以及许多其他 - 问题。尽管“分页”引入了额外的复杂性,但支持虚拟内存的系统可以更加强大、健壮和安全。

问:这有帮助吗?

【讨论】:

  • 是的,实际上我花了很多时间才理解实际的“页面”需要编号(因此需要更多位)以及页面偏移量(这是一个众所周知的大小,因此可以占用更少的内存——例如 12 位)
猜你喜欢
  • 2012-03-21
  • 2011-06-17
  • 2018-07-09
  • 2010-09-26
  • 2021-07-25
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 2017-07-07
相关资源
最近更新 更多