了解物理和逻辑地址之间的关系以及LRU的使用

时间:2016-09-05 17:25:28

标签: caching memory cpu paging lru

通过分页实现内存的计算机的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 ......

enter image description here

1 个答案:

答案 0 :(得分:4)

您将收到以下信息:

  • 页面大小为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有关,因为它与理解物理和逻辑记忆有关。