操作系统理论作业 3:两级页表地址转换
1. 页目录自映射与地址转换
一个 32 位页式虚拟存储系统采用两级页表。逻辑地址由 10 位页目录号、10 位二级页表号和 12 位页内偏移组成。页目录项与页表项均包含 20 位物理页框号、11 位其他标志和 1 位页面有效标志。
- 进程的整个地址空间有多少字节?一页有多少字节?
- 若一个进程从
0x80000000开始映射 4 MB 页表空间,求页目录的起始逻辑地址,并指出从哪个逻辑地址可读出页目录所在的物理页框号。说明理由。一个 32 位地址占 4 字节。 - 已知页目录物理基地址为
0x1000,有关页目录和页表内容如下,描述访问0x0、0x00803004、0x00402001时的地址转换过程;若可行,给出最终读到的数据。 - 要访问物理地址
0x326028,应使用哪个逻辑地址?
有关表项如下:
| 结构 | 索引 0 | 索引 1 | 索引 2 | 索引 3 | 索引 4 | 索引 1023 |
|---|---|---|---|---|---|---|
页目录(物理地址 0x1000) | 0x0 | 0x1001 | 0x5001 | 0x20001 | 0x0 | 0x0 |
页表(物理地址 0x5000) | 0x0 | 0x4e001 | 0x67001 | 0x20001 | 0x0 | 0x0 |
页表(物理地址 0x20000) | 0x9000 | 0x326001 | 0x41001 | 0x0 | 0x0 | 0x0 |
查看我当时提交的答案
- 进程地址空间为 4 GB,一页为 4 KB。
- 页目录起始逻辑地址为
0x80200000。可从页目录自映射表项地址0x80200800读出页目录所在的物理页框号。我当时使用的自映射关系为PT_base = PD_base | (PD_base >> 10) | (PD_base >> 20)。 - 地址转换:
0x0:虚拟页目录号为 0,页目录项为0x0,有效位为 0,触发缺页中断。0x00803004:页目录索引为 2,二级页表索引为 3,页内偏移为 4。页目录项为0x5001,据此查物理地址0x5000处的二级页表;第 3 项为0x20001,再访问物理页框0x20000加偏移 4,得到0x326001。0x00402001:页目录索引为 1,二级页表索引为 2,页内偏移为 1。页目录项为0x1001;查相应二级页表第 2 项,物理页框基地址为0x5000,加偏移 1 后读到0x0。
- 逻辑地址为
0x00C01028。
2. 带权限位的两级页表
另一个 32 位虚拟存储系统同样使用 10 位一级页表索引、10 位二级页表索引和 12 位页内偏移。物理地址由 20 位物理页框号与 12 位偏移组成。页表项高 20 位是物理页框号;最低位是有效位,次低位是读写位。
当前进程一级页表的物理地址是 0x00200000。根据题目给出的物理内存内容,写出以下指令的结果,并给出寻址过程:
| 指令 | 结果要求 |
|---|---|
Load [0x00001022] | 成功则写读入的 1 字节数据,否则写 Error |
Store [0x00C07222] | 成功写 OK,否则写 Error |
Store [0x00C005BF] | 同上 |
Load [0x00003013] | 同上 |
Load [0xFF80078F] | 同上 |
Load [0xFFFFF005] | 同上 |
题目所需的物理内存片段:
| 地址 | +0 | +1 | +2 | +3 | +4 | +5 | +6 | +7 | +8 | +9 | +A | +B | +C | +D | +E | +F |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0000 0000 | 0E | 0F | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 1A | 1B | 1C | 1D |
0000 0010 | 1E | 1F | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 2A | 2B | 2C | 2D |
0000 1020 | 40 | 03 | 41 | 01 | 30 | 01 | 31 | 03 | 00 | 03 | 00 | 00 | 00 | 00 | 00 | 00 |
0000 1030 | 00 | 11 | 22 | 33 | 44 | 55 | 66 | 77 | 88 | 99 | AA | BB | CC | DD | EE | FF |
0000 4000 | 30 | 00 | 31 | 01 | 11 | 01 | 33 | 03 | 34 | 01 | 35 | 00 | 43 | 38 | 32 | 79 |
0000 4010 | 50 | 28 | 84 | 19 | 71 | 69 | 39 | 93 | 75 | 10 | 58 | 20 | 97 | 49 | 44 | 59 |
0000 4020 | 23 | 03 | 20 | 03 | 00 | 01 | 62 | 08 | 99 | 86 | 28 | 03 | 48 | 25 | 34 | 21 |
0010 0000 | 00 | 00 | 10 | 65 | 00 | 00 | 40 | 67 | 00 | 00 | 30 | 00 | 00 | 00 | 40 | 07 |
0010 3000 | 11 | 22 | 00 | 67 | 55 | 66 | 77 | 88 | 99 | AA | BB | CC | DD | EE | FF | 00 |
001F E000 | 04 | 15 | 00 | 00 | 48 | 59 | 70 | 7B | 8C | 9D | AE | BF | D0 | E1 | F2 | 03 |
001F E010 | 10 | 15 | 00 | 67 | 10 | 15 | 10 | 67 | 10 | 15 | 20 | 67 | 10 | 15 | 30 | 67 |
001F F000 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 65 | 00 | 00 | 10 | 67 | 00 | 00 | 00 | 00 |
001F F010 | 00 | 00 | 20 | 67 | 00 | 00 | 30 | 67 | 00 | 00 | 40 | 67 | 00 | 00 | 50 | 07 |
001F FFF0 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 10 | 00 | 00 | 67 | 00 | 10 | 30 | 67 |
0020 0000 | 00 | 10 | 00 | 07 | 00 | 10 | 10 | 07 | 00 | 10 | 20 | 07 | 00 | 10 | 30 | 07 |
0020 0010 | 00 | 10 | 40 | 07 | 00 | 10 | 50 | 07 | 00 | 10 | 60 | 07 | 00 | 10 | 70 | 07 |
0020 0020 | 00 | 10 | 00 | 07 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
0020 0FF0 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 1F | E0 | 07 | 00 | 1F | F0 | 07 |
查看我当时提交的答案
Load [0x00001022]:0x20
页目录索引为 0,页目录项为 0x00100007,页面有效,二级页表物理基地址为 0x00100000。页表索引为 1,二级页表项为 0x00004067,页面有效。物理页框基地址为 0x00004000,页内偏移为 0x22,所以物理地址为 0x00004022,数据为 0x20。
Store [0x00C07222]:Error
页目录索引为 3,页目录项为 0x00103007,页面有效,二级页表物理基地址为 0x00103000。页表索引为 7,二级页表项为 0xEEFF0001,页面有效;读写位为 0,只读,因此返回 Error。
Store [0x00C005BF]:OK
页目录索引为 3,页目录项为 0x00103007,页面有效。页表索引为 0,二级页表项为 0x11220067,页面有效且可写;写入地址为 0x112205BF,返回 OK。
Load [0x00003013]:0x19
页目录索引为 0,页目录项为 0x00100007。页表索引为 3,二级页表项为 0x00004007,页面有效。物理页框基地址为 0x00004000,页内偏移为 0x13,所以物理地址为 0x00004013,数据为 0x19。
Load [0xFF80078F]:Error
页目录索引为 0x3FE,页目录项为 0x001FE007,页面有效,二级页表物理基地址为 0x001FE000。页表索引为 0,二级页表项为 0x04150000,页面无效,返回 Error。
Load [0xFFFFF005]:0x66
页目录索引为 0x3FF,页目录项为 0x001FF007。页表索引为 0x3FF,二级页表项为 0x00103067,页面有效。物理页框基地址为 0x00103000,页内偏移为 5,所以物理地址为 0x00103005,数据为 0x66。