点此查看作业源文件

第一题

(1)请问进程整个的地址空间有多少字节?一页有多少字节?

$$ 进程整个的地址空间 = 2^{32}B = 4GB $$$$一页有 2^{12}B = 4KB$$

(2)一个进程如果从 0x80000000 开始映射 4MB 大小页表空间,求第一级页表(页目录)的起始逻辑地址,并指出从哪个逻辑地址可以读出第一级页表(页目录)所在的物理页框号。说明理由。(注意 B 代表字节,一个 32 位地址占 4 字节)

  • 进程页表空间映射起始地址为0x80000000,所以页目录的第0x200项指向页表空间,所以第一级页表的起始逻辑地址为0x80200000

  • 页目录自映射,访问逻辑地址0x80200800可以读取页目录所在的物理页框号。

(3)如果当前进程的页目录物理基地址、页目录和相应页表内容如图下所示,请描述访问以下逻辑地址时系统进行地址转换的过程,如可行,给出最终访存读取到的数据。逻辑地址:0x0、0x00803004、0x00402001

  1. 访问0x0
    • | 0000 0000 00 | 00 0000 0000 | 0000 0000 0000 |
    • 找页目录第0项 -> 页表项内容:00000 | 000
    • 缺页异常
  2. 访问0x00803004
    • | 0000 0000 10 | 00 0000 0011 | 0000 0000 0100 |
    • 找页目录第2项 -> 页表项:00005 | 001
    • 页表地址:0x5000,有效
    • 找页表第3项 -> 页表项:00020 | 001
    • 页地址:0x20000
    • 物理地址:0x20000 + 0x004 = 0x20004
    • 读取到的字为0x326001
    • 读取到的数据:0x00(小端序)或0x01(大端序)
  3. 访问0x00402001
    • | 0000 0000 01 | 00 0000 0010 | 0000 0000 0001 |
    • 找页目录第1项 -> 页表项内容:00001 | 001
    • 页表地址:0x1000,有效
    • 找页表第2项 -> 页表项:00005 | 001
    • 页地址:0x5000
    • 物理地址:0x5000 + 0x001 = 0x5001
    • 读取到的字为0x0
    • 读取到的数据:0x00

(4)要想访问物理地址 0x326028,需要使用哪个逻辑地址?

  • 页内偏移:0x028
  • 页框号:0x326,出现在0x20000 + 1 * 0x4,所以二级页表号:0x1
  • 页框号:0x20,出现在0x1000 + 3 * 0x4,所以一级页表号:0x3
  • 逻辑地址:| 0000 0000 11 | 00 0000 0001 | 0000 0010 1000 |
  • 即:0x00c01028

第二题

(1)Load [0x00001022]

  • 页目录号:0x000
    • 访问0x0020 0000 + 4 * 0x000 = 0x0020 00000x0010 0007
      • 二级页表页框号:0x00100
      • 标志位:0x007,Valid, Read/Write
  • 二级页表号:0x001
    • 访问0x0010 0000 + 4 * 0x001 = 0x0010 00040x0000 4067
      • 物理页框号:0x00004
      • 标志位:0x067,Valid, Read/Write
  • 页内偏移量:0x022
    • 访问0x0000 4000 + 0x022 = 0x0000 40220x20
  • 成功:0x20

(2)Store [0x00C07222]

  • 页目录号:0x003
    • 访问0x0020 0000 + 4 * 0x003 = 0x0020 000C0x0010 3007
      • 二级页表页框号:0x00103
      • 标志位:0x007,Valid, Read/Write
  • 二级页表号:0x007
    • 访问0x0010 3000 + 4 * 0x007 = 0x0010 301C0xEEFF 0001
      • 标志位:0x001,Valid, Read Only
  • 页内偏移量:0x222
  • Error: Read Only

(3)Store [0x00C005BF]

  • 页目录号:0x003
    • 访问0x0020 0000 + 4 * 0x003 = 0x0020 000C0x0010 3007
      • 二级页表页框号:0x00103
      • 标志位:0x007,Valid, Read/Write
  • 二级页表号:0x000
    • 访问0x0010 3000 + 4 * 0x000 = 0x0010 30000x1122 0067
      • 物理页框号:0x11220
      • 标志位:0x067,Valid, Read/Write
  • 页内偏移量:0x5BF
    • 写入0x1122 0000 + 0x067 = 0x1122 0067
  • OK: 0x1122 0067

(4)Load [0x00003013]

  • 页目录号:0x000
    • 访问0x0020 0000 + 4 * 0x000 = 0x0020 00000x0010 0007
      • 二级页表页框号:0x00100
      • 标志位:0x007,Valid, Read/Write
  • 二级页表号:0x003
    • 访问0x0010 0000 + 4 * 0x003 = 0x0010 000C0x0000 4007
      • 物理页框号:0x00004
      • 标志位:0x007,Valid, Read/Write
  • 页内偏移量:0x013
    • 访问0x0000 4000 + 0x013 = 0x0000 40130x19
  • 成功:0x19

(5)Load [0xFF80078F]

  • 页目录号:0x3FE
    • 访问0x0020 0000 + 4 * 0x3FE = 0x0020 0FF80x001F E007
      • 二级页表页框号:0x001FE
      • 标志位:0x007,Valid, Read/Write
  • 二级页表号:0x000
    • 访问0x001F E000 + 4 * 0x000 = 0x001F E0000x0415 0000
      • 标志位:0x000,Invalid
  • 页内偏移量:0x78F
  • Error: Invalid

(6)Load [0xFFFFF005]

  • 页目录号:0x3FF
    • 访问0x0020 0000 + 4 * 0x3FF = 0x0020 0FFC0x001F F007
      • 二级页表页框号:0x001FF
      • 标志位:0x007,Valid, Read/Write
  • 二级页表号:0x3FF
    • 访问0x001F F000 + 4 * 0x3FF = 0x001F FFFC0x0010 3067
      • 物理页框号:0x00103
      • 标志位:0x067,Valid, Read/Write
  • 页内偏移量:0x005
    • 访问0x0010 3000 + 0x005 = 0x0010 30050x66
  • 成功:0x66

综上所述:

指令结果
Load [0x00001022]0x20
Store [0x00C07222]Error
Store [0x00C005BF]OK
Load [0x00003013]0x19
Load [0xFF80078F]Error
Load [0xFFFFF005]0x66