虚拟内存中的地址转换

Address translation in virtual memory

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

这是他解释的图片:

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

关于您最近的问题:

Q: What does the page offset?

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

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

    映射涉及“页号”(我们感兴趣的数据位于哪个“页”?)和“偏移量”的组合。

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

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

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

    等等等

也许您的部分困惑是:

Q: Why do we need "virtual memory" (and pages and address mappings) in the first place???

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

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

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

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

问:有帮助吗?