虚拟内存中的地址转换
Address translation in virtual memory
我在看these series但我不明白什么是12位页面偏移量(我只提高2^12-1
并得到4Kb
,虽然它是页面本身的大小,但我不确定它是否正确)。我也不明白 虚拟页码 是什么。
我看过这个人的所有系列 1-6,并且确实理解他呈现的内容。我也喜欢 explanation 的房子和街道,但我还是不明白。
这是他解释的图片:
好的 - 您发布的图表很好地描述了“虚拟内存”。
关于您最近的问题:
Q: What does the page offset?
当您的程序想要访问内存时,它会使用“虚拟地址”。
“虚拟地址”映射到“物理地址”。
映射涉及“页号”(我们感兴趣的数据位于哪个“页”?)和“偏移量”的组合。
“偏移量”只是我们数据所在页面内的位置。
偏移量“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 解决了这些 - 以及许多其他 - 问题。尽管“分页”带来了额外的复杂性,但支持虚拟内存的系统可以更加强大、健壮和安全。
问:有帮助吗?
我在看these series但我不明白什么是12位页面偏移量(我只提高2^12-1
并得到4Kb
,虽然它是页面本身的大小,但我不确定它是否正确)。我也不明白 虚拟页码 是什么。
我看过这个人的所有系列 1-6,并且确实理解他呈现的内容。我也喜欢 explanation 的房子和街道,但我还是不明白。
这是他解释的图片:
好的 - 您发布的图表很好地描述了“虚拟内存”。
关于您最近的问题:
Q: What does the page offset?
当您的程序想要访问内存时,它会使用“虚拟地址”。
“虚拟地址”映射到“物理地址”。
映射涉及“页号”(我们感兴趣的数据位于哪个“页”?)和“偏移量”的组合。
“偏移量”只是我们数据所在页面内的位置。
偏移量“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 解决了这些 - 以及许多其他 - 问题。尽管“分页”带来了额外的复杂性,但支持虚拟内存的系统可以更加强大、健壮和安全。
问:有帮助吗?