某计算机主存按字节编址,逻辑地址和物理地址都是32位,页表项大小为4B。
1.若使用一级页表的分页存储管理方式,逻辑地址结构为
页号(20位) |
页内偏移量(12位) |
则页的大小是多少字节?页表最大占用多少字节?
【解析】页的大小为2^12B=4KB,页表最大占用页表最大占用2^20 *4B=2^22B=4MB
2.若使用二级页表的分页存储管理方式,逻辑地址结构为
页目录号(10位) |
页表索引(10位) |
页内偏移量(12位) |
设逻辑地址为LA,请分别给出其对应的页目录号和页表索引的表达式。
【解析】
页目录号可表示为(((unsigned int)(LA))>>22)& 0x3FF
页表索引可表示为(((unsigned int)(LA))>>12)& 0x3FF
注:可用“无符号右移动>>”和“按位与&”操作取出某几个二进制位的值。
如01101101,00000000右移动——高位用0补齐,右边8位全舍去,LA>>8
得00000000,01101101,LA>>8
1111 1111 0xFF(按位与&:只有对应位都为1时“与”结果才为1)
结果是 01101101
3.采用(1)中的分页存储管理方式,一个代码段的起始逻辑地址为0000 8000H,其长度为8KB,被装载到从物理地址0090 0000H开始的连续主存空间中。页表从主存0020 0000H开始的物理地址处连续存放(我注:每个进程都有一个对应的页表),如下图所示(地址大小自下向上递增)。请计算出该代码对应的2个页表项的物理地址、这2个页表项中的页框号,以及代码页面2的起始物理地址。
【解析】代码段为8KB,而一个页面是4KB,所以代码段占2个页面。
代码页面1的逻辑地址为0000 8000H,表明其位于第8个页处,对应页表中的第8个页表项,所以第8个页表项的物理地址=页表始址0020 0000H+8×4=0020 0020H【特别注意:对于“新地址的计算”,这里是十六进制加十进制的32,先把32换算成20H再进行计算即可,同时不要误以为是加32B】。
第一个页表的页框号为00900,第二个页表的页框号为00901,代码页面2的起始物理地址即第9个页表项的物理地址=页表始址+9×4=0020 0024H。代码压面2的起始物理地址=00901000H。