你会得到这个信息:
- 页面大小为 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 的,也是关于理解物理和逻辑记忆的。