第一题
(1)请问进程整个的地址空间有多少字节?一页有多少字节?
$$ 进程整个的地址空间 = 2^{32}B = 4GB $$$$一页有 2^{12}B = 4KB$$(2)一个进程如果从 0x80000000 开始映射 4MB 大小页表空间,求第一级页表(页目录)的起始逻辑地址,并指出从哪个逻辑地址可以读出第一级页表(页目录)所在的物理页框号。说明理由。(注意 B 代表字节,一个 32 位地址占 4 字节)
进程页表空间映射起始地址为
0x80000000,所以页目录的第0x200项指向页表空间,所以第一级页表的起始逻辑地址为0x80200000。页目录自映射,访问逻辑地址
0x80200800可以读取页目录所在的物理页框号。
(3)如果当前进程的页目录物理基地址、页目录和相应页表内容如图下所示,请描述访问以下逻辑地址时系统进行地址转换的过程,如可行,给出最终访存读取到的数据。逻辑地址:0x0、0x00803004、0x00402001
- 访问
0x0:- | 0000 0000 00 | 00 0000 0000 | 0000 0000 0000 |
- 找页目录第0项 -> 页表项内容:00000 | 000
- 缺页异常
- 访问
0x00803004:- | 0000 0000 10 | 00 0000 0011 | 0000 0000 0100 |
- 找页目录第2项 -> 页表项:00005 | 001
- 页表地址:
0x5000,有效 - 找页表第3项 -> 页表项:00020 | 001
- 页地址:
0x20000 - 物理地址:
0x20000+0x004=0x20004 - 读取到的字为
0x326001 - 读取到的数据:
0x00(小端序)或0x01(大端序)
- 访问
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 0000:0x0010 0007- 二级页表页框号:
0x00100 - 标志位:
0x007,Valid, Read/Write
- 二级页表页框号:
- 访问
- 二级页表号:
0x001- 访问
0x0010 0000+ 4 *0x001=0x0010 0004:0x0000 4067- 物理页框号:
0x00004 - 标志位:
0x067,Valid, Read/Write
- 物理页框号:
- 访问
- 页内偏移量:
0x022- 访问
0x0000 4000+0x022=0x0000 4022:0x20
- 访问
- 成功:
0x20
(2)Store [0x00C07222]
- 页目录号:
0x003- 访问
0x0020 0000+ 4 *0x003=0x0020 000C:0x0010 3007- 二级页表页框号:
0x00103 - 标志位:
0x007,Valid, Read/Write
- 二级页表页框号:
- 访问
- 二级页表号:
0x007- 访问
0x0010 3000+ 4 *0x007=0x0010 301C:0xEEFF 0001- 标志位:
0x001,Valid, Read Only
- 标志位:
- 访问
- 页内偏移量:
0x222 - Error: Read Only
(3)Store [0x00C005BF]
- 页目录号:
0x003- 访问
0x0020 0000+ 4 *0x003=0x0020 000C:0x0010 3007- 二级页表页框号:
0x00103 - 标志位:
0x007,Valid, Read/Write
- 二级页表页框号:
- 访问
- 二级页表号:
0x000- 访问
0x0010 3000+ 4 *0x000=0x0010 3000:0x1122 0067- 物理页框号:
0x11220 - 标志位:
0x067,Valid, Read/Write
- 物理页框号:
- 访问
- 页内偏移量:
0x5BF- 写入
0x1122 0000+0x067=0x1122 0067
- 写入
- OK:
0x1122 0067
(4)Load [0x00003013]
- 页目录号:
0x000- 访问
0x0020 0000+ 4 *0x000=0x0020 0000:0x0010 0007- 二级页表页框号:
0x00100 - 标志位:
0x007,Valid, Read/Write
- 二级页表页框号:
- 访问
- 二级页表号:
0x003- 访问
0x0010 0000+ 4 *0x003=0x0010 000C:0x0000 4007- 物理页框号:
0x00004 - 标志位:
0x007,Valid, Read/Write
- 物理页框号:
- 访问
- 页内偏移量:
0x013- 访问
0x0000 4000+0x013=0x0000 4013:0x19
- 访问
- 成功:
0x19
(5)Load [0xFF80078F]
- 页目录号:
0x3FE- 访问
0x0020 0000+ 4 *0x3FE=0x0020 0FF8:0x001F E007- 二级页表页框号:
0x001FE - 标志位:
0x007,Valid, Read/Write
- 二级页表页框号:
- 访问
- 二级页表号:
0x000- 访问
0x001F E000+ 4 *0x000=0x001F E000:0x0415 0000- 标志位:
0x000,Invalid
- 标志位:
- 访问
- 页内偏移量:
0x78F - Error: Invalid
(6)Load [0xFFFFF005]
- 页目录号:
0x3FF- 访问
0x0020 0000+ 4 *0x3FF=0x0020 0FFC:0x001F F007- 二级页表页框号:
0x001FF - 标志位:
0x007,Valid, Read/Write
- 二级页表页框号:
- 访问
- 二级页表号:
0x3FF- 访问
0x001F F000+ 4 *0x3FF=0x001F FFFC:0x0010 3067- 物理页框号:
0x00103 - 标志位:
0x067,Valid, Read/Write
- 物理页框号:
- 访问
- 页内偏移量:
0x005- 访问
0x0010 3000+0x005=0x0010 3005:0x66
- 访问
- 成功:
0x66
综上所述:
| 指令 | 结果 |
|---|---|
| Load [0x00001022] | 0x20 |
| Store [0x00C07222] | Error |
| Store [0x00C005BF] | OK |
| Load [0x00003013] | 0x19 |
| Load [0xFF80078F] | Error |
| Load [0xFFFFF005] | 0x66 |