【问题标题】:Understanding relationship between Physical and Logical addresses and use of LRU了解物理地址和逻辑地址之间的关系以及 LRU 的使用
【发布时间】:2026-01-03 07:10:01
【问题描述】:

通过分页实现内存的计算机CPU产生如下逻辑地址(十进制):

777, 2047, 1199, 1100, 546, 129, 3201
  • 页面大小为512 Byte

  • CPU 生成长度为12 Bit的逻辑地址

  • 主内存可以按字节寻址,总共可以接收4个页面

512 Byte页面大小表示2^9 Bytes,所以逻辑地址的偏移量将由9位组成。我们总共得到了12 Bits 的长度,所以12 - 9 = 3,所以第一个3 Bits 将用于页面!

这就是我完全理解的逻辑地址。但是物理地址呢? 物理地址的偏移量与逻辑地址的偏移量相同。但是页面不同,我不明白为什么会这样?我也没有看到模式,开始的第一页是 00,然后是 01.. 等等。为什么?

任务提供的唯一附加信息:如果所有页框都在使用中,则将应用 LRU...

【问题讨论】:

  • 也许我们需要更多的上下文,但通常不需要任何模式。虚拟化内存的目的是在逻辑地址和物理地址之间进行任意映射(这样您就可以为不同的进程“重用”相同的地址)。也许练习是关于更换政策?
  • 任务:为每个逻辑地址指定使用的物理地址。一切都是二进制格式。我不知道物理地址的页码来自哪里,00、01、10、10、00、11、01 对我来说没有意义……你也不知道吗? :(
  • 不,我不知道 :( 我以为你已经得到了任何逻辑地址(即表格)使用的物理地址。
  • 上一个问题出现的方式,虽然你否认,但它是家庭作业,因为它引用了你应该回答的问题(现在提到你的教授会让你成为忏悔者)。也许这是书本上的练习,而不是正式的家庭作业,但 SO 不是辅导服务,它是关于您遇到的实际编码问题。
  • 有一个解决方案,我必须提醒你一个关键信息是如果所有页框都在使用,则将应用LRU LRU 是这里的关键。在通过逻辑内存转换请求前 4 个唯一页面(最多 4 个内存页面)后,内存管理器将必须交换其中一个页面,以便可以放入新的页面。算法是 LRU(最近最少使用)。因此,当所有页面都在使用时,您会发现最近最少使用的页面将其换出,然后将新数据放入该页面。如果您遵循这个想法,那么使用的 2 位页码将在您的图表中有意义。

标签: caching memory cpu paging lru


【解决方案1】:

你会得到这个信息:

  • 页面大小为 512 字节
  • CPU 生成长度为 12 位的逻辑地址
  • 主存可按字节寻址,总共可以接收 4 页

从中可以得出很多东西:

  • 页面为 512 字节,主存总共有 4 个页面。 4 * 512 = 2048。这意味着有 2048 字节的物理主内存(2^11 字节 = 4 * 2^9)。
  • 物理地址的前 2 位(值 0 到 3)也代表物理页号
  • 逻辑地址为 12 位,即 8 512 字节页面或 4096 字节(2^12 字节)。
  • 逻辑地址的前 3 位 (0-7) 表示逻辑页号。

我的假设:

  • 如果有空闲物理页(未映射到任何逻辑页),则假定首先使用编号最小的物理页。

所以你有 4096 字节的逻辑内存,但只有 2048 字节的物理内存。所以你不能同时在内存中拥有每个逻辑页面。您一次可以有 4 页。这就是Least Recently Used(LRU)算法的用武之地。当发现逻辑地址不在内存中并且所有物理页面都已满时,您会找到最近最少使用的物理页面并将其从内存中逐出;将新的逻辑页面与该物理页面相关联。通常,如果页面从内存中被逐出,操作系统会将页面交换到磁盘(后备存储),并且如果需要在再次需要时将其加载回。

所以我们得到了逻辑地址:

777、2047、1199、1100、546、129、3201

如果我们将这些逻辑地址转换为 12 位二进制,我们有:

777  = 001 100001001
2047 = 011 111111111
1199 = 010 010101111
1100 = 010 001001100
546  = 001 000100010
129  = 000 010000001
3201 = 110 010000001

假设在开始时所有 4 个物理页面 0(00)、1(01)、2(10) 和页面 3(11) 都是空的。 为方便起见,其余答案使用二进制页码

Page 00 = empty, page 01 = empty, page 10 = empty, page 11 = empty

假设处理器按顺序收到对上述每个逻辑地址的请求 - 它必须将它们转换为物理地址,如果物理页面都已填满,则使用 LRU 找到要删除的页面,并将其关联使用新的逻辑页面。


777 = 001 100001001

查看我们的逻辑页面 001 是否映射到物理页面。如果没有,找一个空的物理页面(使用第一个)。物理页 00 是免费的。将逻辑页号 001 与物理页 00 相关联。因此,完成此翻译后,我们有:

Page 00 = 001, page 01 = empty, page 10 = empty, page 11 = empty

逻辑地址:001 100001001 等于物理地址 00 100001001


2047 = 011 111111111

查看物理页以查看逻辑页 011 是否在内存中。它不是。我们找到下一个可用的物理页,即 01。我们将物理页 01 与逻辑页 011 关联起来。

Page 00 = 001, page 01 = 011, page 10 = empty, page 11 = empty

逻辑地址:011 111111111等于物理地址01 111111111


1199 = 010 010101111

查看物理页以查看逻辑页 010 是否在内存中。它不是。我们找到下一个可用的物理页 10。我们将物理页 10 与逻辑页 010 关联起来。

Page 00 = 001, page 01 = 011, page 10 = 010, page 11 = empty

逻辑地址:010 010101111 等于物理地址 10 010101111


1100 = 010 001001100

查看物理页以查看逻辑页 010 是否在内存中。这是。第 10 页已经有逻辑页 010!没事做。重新排序列表,以便最近使用物理页 10。它已经最后一次使用了,所以不需要做任何事情。:

Page 00 = 001, page 01 = 011, page 10 = 010, page 11 = empty

逻辑地址:010 001001100 等于物理地址 10 001001100


546 = 001 000100010

查看物理页以查看逻辑页 001 是否在内存中。这是。页面 00 已经有逻辑页面 001!没事做。重新排序列表,以便最近使用物理页 00,因此将其移至列表末尾:

Page 00 = 001, page 01 = 011, page 10 = 010, page 11 = empty

变成:

page 01 = 011, page 10 = 010, Page 00 = 001, page 11 = empty

逻辑地址:001 000100010 等于物理地址 00 000100010


129 = 000 010000001

查看物理页以查看逻辑页 000 是否在内存中。它不是。我们找到下一个可用的物理页,即 11。我们将物理页 11 与逻辑页 000 相关联。

page 01 = 011, page 10 = 010, Page 00 = 001, page 11 = 000

逻辑地址:000 010000001 等于物理地址 11 010000001

注意:此时我们所有的物理页面都已满。


3201 = 110 010000001

查看物理页以查看逻辑页 110 是否在内存中。它不是。我们寻找下一个可用的物理页面——但不存在这样的空闲页面。使用 LRU,我们查看最近最少使用的条目(始终位于此列表的左侧):

page 01 = 011, page 10 = 010, Page 00 = 001, page 11 = 000

第 01 页位于左侧,因此它是最近最少使用的。我们从物理页面 01 中逐出逻辑页面 011 并将其替换为 110:

page 01 = 110, page 10 = 010, Page 00 = 001, page 11 = 000

现在由于最近使用的物理页面 01 将其移至列表末尾:

page 10 = 010, Page 00 = 001, page 11 = 000, page 01 = 110

逻辑地址:110 010000001 等于物理地址 01 010000001


观察

以上内容与您提供的表格中的答案/解决方案相比如何?如果你把上面的所有行都从Logical address: 开始,你会得到。

Logical address: 001 100001001 equals physical address 00 100001001
Logical address: 011 111111111 equals physical address 01 111111111
Logical address: 010 010101111 equals physical address 10 010101111
Logical address: 010 001001100 equals physical address 10 001001100
Logical address: 001 000100010 equals physical address 00 000100010
Logical address: 000 010000001 equals physical address 11 010000001
Logical address: 110 010000001 equals physical address 01 010000001

将其与您提供的表格进行比较,如果我没有出错,它们应该是等效的。从上面的方法我们还知道的一件事是,在最后一个逻辑地址被翻译后,我们在物理(主)内存中拥有这些页面:

第 10 页 = 010,第 00 页 = 001,第 11 页 = 000,第 01 页 = 110

您的问题可能既是关于学生理解 LRU 的,也是关于理解物理和逻辑记忆的。

【讨论】:

  • 哇,我终于可以说我明白了!非常感谢您花时间为我写这一切。我可以向你保证这不是浪费,我现在已经完全理解它了比给定的 LRU。非常感谢”!!! :)
最近更新 更多