Operating system 页码和偏移量
我正在学习不同类型的内存管理。我不明白在虚拟地址中有偏移位的意义。还有为什么页面大小是由Operating system 页码和偏移量,operating-system,page-numbering,page-size,os161,Operating System,Page Numbering,Page Size,Os161,我正在学习不同类型的内存管理。我不明白在虚拟地址中有偏移位的意义。还有为什么页面大小是由2的幂决定的 我的主要困惑是: 请给出一个在指令中使用偏移量来访问某个虚拟地址的示例 我的第二个困惑是: 通常的说法是,如果逻辑地址的大小为2^m且页面大小为2^n,则逻辑地址的高阶m-n位指定页码 我认为你的主要和次要困惑是由于对这个主题的普遍困惑:)让我谈谈这个问题,希望我能有所帮助。首先,打个比方——想象一下你正试图在一座城市中找到一所房子。想象一下,每个房子都有一个唯一的数字——你可以想象,房子的数
2
的幂决定的
- 我的主要困惑是: 请给出一个在指令中使用偏移量来访问某个虚拟地址的示例
- 我的第二个困惑是:
通常的说法是,如果逻辑地址的大小为
且页面大小为2^m
,则逻辑地址的高阶m-n位指定页码2^n
- 虚拟地址是32位
- 页偏移量为12位
- 物理地址为30位
- 内存是1GB
- 我认为你的主要和次要困惑是由于对这个主题的普遍困惑:)
让我谈谈这个问题,希望我能有所帮助。首先,打个比方——想象一下你正试图在一座城市中找到一所房子。想象一下,每个房子都有一个唯一的数字——你可以想象,房子的数量很快就会变得非常庞大和混乱。现在想象一下,你引入了街道的概念——随着你把门牌号码分成一个很好的块,门牌号码现在变得更易于管理了。所以:街道=页码,门牌号=偏移地址。
拥有虚拟内存页的全部意义在于允许计算机将内存分割成可管理的块,而不是浪费太多内存。将它分割成块(页面)允许对访问、分页和其他类似的事情进行细粒度控制。页面越小,浪费的内存就越少(如果进程A需要32k内存,而页面大小为64k,则会得到一些未使用的内存),但系统开销越高。
至于为什么页面大小是2的幂,这是为了不浪费地址内的空间。由于计算机(目前)是基于二进制的,所以一切都倾向于归结为2的幂。想象一下,如果你有基于10的东西。二进制中的10是1010-您必须使用4位来保存它,所以为什么不从4位中获取完整的值范围:0000-1111(0到15=16个值)。
对不起,我说得有点含糊不清-我希望这能把你推向正确的方向 我也有同样的困惑,但如果我理解正确的话,那就如下所示:2案例的力量稍微超出了对主题的一般理解。这更像是一种约定,因为我们处理的是二进制值,需要在2的幂适合的位之间进行适当的划分 例如,如果pGe有64k个字,且每帧有4个字,则2^x=64 ->x=6 这意味着每个帧可以有一个由6个二进制值组成的物理地址,即0或1,其中4表示帧编号。最后表示单词在4个单词中的确切位置
请注意,这里每个帧不能有5或任何其他值,或者所谓的约定失败。我喜欢GHC与街道和城市的类比,以解释我们为什么需要分页。此外,将内存的字节分组到页面中还允许CPU使用更大的内存量 假设给定以下属性:
示例数据取自本节课--它对虚拟内存有很好的概述。谢谢GHC,但我想看的是汇编指令如何看待偏移量。ld r2,0x0005也是如此。假设每个地址都是字大小,每个页面大小是4字节。在这种情况下,偏移量是1字节。在回复之前,我做了一些研究,我们使用2的幂的原因是,当我们将虚拟地址除以页面大小时,u将得到pagennumber和偏移量,因为地址的前m位将是页码,后面的n位将是偏移量。如果不是二的幂,则分割虚拟地址以定位页码和偏移量需要%和/函数,这会增加系统开销。通过页表进行虚拟地址到物理地址的转换还有另一个好处:它可以减少虚拟地址空间碎片造成的物理内存浪费。您可以