gpt4 book ai didi

memory - 如何使用页表将虚拟地址转换为物理地址?

转载 作者:IT王子 更新时间:2023-10-28 23:31:14 27 4
gpt4 key购买 nike

假设我有一个普通的页表:

页表(页面大小 = 4k)

      Page #:  0  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15          
Page Frame #: 3 x 1 x 0 x 2 x 5 x 7 4 6 x x x

如何将任意逻辑地址(如 51996)转换为物理内存地址?


如果我取对数基数 2 (4096),我得到 12。我想这就是我想用于地址偏移量的位数。

我只是不确定。 51996/4096 = 12.69。那么这是否意味着它位于第 12 页并具有一定的偏移量?

然后如何将其转换为“51996”的物理地址?

最佳答案

要确定给定内存地址的页,请取前 P 位(N 位的)个数。

P = lg2(numberOfPages)
在您的示例中, P=lg2(16)=4

所以给定内存地址的前 4 位将告诉我们页面。这意味着其余部分应该是从该页面开始的偏移量。

您的示例地址 51996 是二进制的 1100101100011100。 IE。 [1100:101100011100]。

1100(十进制的12)是页码
101100011100(十进制2844)是偏移量

现在我们需要找到第 12 页在内存中的位置。
查看您的框架表,第 12 页似乎位于第 6 个框架中。在所有内存都可分页(即没有内存映射 IO)的系统中,第 6 页帧将位于 (entriesPerPage*frameNum)-1

在这种情况下,4000*6-1 = 23999(需要“-1”,因为内存是 0 索引的。)

在这种情况下,4096*6-1 = 24575(需要“-1”,因为内存是 0 索引的。)

现在我们要做的就是添加偏移量,我们就有了物理内存地址:

23999 + 2844=26843 = 0x68DB

24575 + 2844 = 27419 = 0x6B1B

完成!

希望这(编辑)对您有所帮助 XD

编辑:感谢 Jel 发现了我的错误 :)感谢 user8 发现我的另一个错误! (frameNum 而不是 pageNum)。

关于memory - 如何使用页表将虚拟地址转换为物理地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/831494/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com