第一题
(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 |