操作系统理论作业 3:两级页表地址转换

1. 页目录自映射与地址转换

一个 32 位页式虚拟存储系统采用两级页表。逻辑地址由 10 位页目录号、10 位二级页表号和 12 位页内偏移组成。页目录项与页表项均包含 20 位物理页框号、11 位其他标志和 1 位页面有效标志。

  1. 进程的整个地址空间有多少字节?一页有多少字节?
  2. 若一个进程从 0x80000000 开始映射 4 MB 页表空间,求页目录的起始逻辑地址,并指出从哪个逻辑地址可读出页目录所在的物理页框号。说明理由。一个 32 位地址占 4 字节。
  3. 已知页目录物理基地址为 0x1000,有关页目录和页表内容如下,描述访问 0x0、0x00803004、0x00402001 时的地址转换过程;若可行,给出最终读到的数据。
  4. 要访问物理地址 0x326028,应使用哪个逻辑地址?

有关表项如下:

结构索引 0索引 1索引 2索引 3索引 4索引 1023
页目录(物理地址 0x1000)0x00x10010x50010x200010x00x0
页表(物理地址 0x5000)0x00x4e0010x670010x200010x00x0
页表(物理地址 0x20000)0x90000x3260010x410010x00x00x0
查看我当时提交的答案
  1. 进程地址空间为 4 GB,一页为 4 KB。
  2. 页目录起始逻辑地址为 0x80200000。可从页目录自映射表项地址 0x80200800 读出页目录所在的物理页框号。我当时使用的自映射关系为 PT_base = PD_base | (PD_base >> 10) | (PD_base >> 20)。
  3. 地址转换:
    • 0x0:虚拟页目录号为 0,页目录项为 0x0,有效位为 0,触发缺页中断。
    • 0x00803004:页目录索引为 2,二级页表索引为 3,页内偏移为 4。页目录项为 0x5001,据此查物理地址 0x5000 处的二级页表;第 3 项为 0x20001,再访问物理页框 0x20000 加偏移 4,得到 0x326001。
    • 0x00402001:页目录索引为 1,二级页表索引为 2,页内偏移为 1。页目录项为 0x1001;查相应二级页表第 2 项,物理页框基地址为 0x5000,加偏移 1 后读到 0x0。
  4. 逻辑地址为 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 00000E0F101112131415161718191A1B1C1D
0000 00101E1F202122232425262728292A2B2C2D
0000 102040034101300131030003000000000000
0000 103000112233445566778899AABBCCDDEEFF
0000 400030003101110133033401350043383279
0000 401050288419716939937510582097494459
0000 402023032003000162089986280348253421
0010 000000001065000040670000300000004007
0010 3000112200675566778899AABBCCDDEEFF00
001F E000041500004859707B8C9DAEBFD0E1F203
001F E01010150067101510671015206710153067
001F F00000000000000000650000106700000000
001F F01000002067000030670000406700005007
001F FFF000000000000000001000006700103067
0020 000000100007001010070010200700103007
0020 001000104007001050070010600700107007
0020 002000100007000000000000000000000000
0020 0FF00000000000000000001FE007001FF007
查看我当时提交的答案

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。

评论