某计算机按字节编址,采用页式虚拟存储管理方式,虚拟地址和物理地址的长度均为 32 位,页表项的大小为 4 字节,页大小为 4MB,虚拟地址结构如下:
进程 Р 的页表起始虚拟地址为 B8C0 0000H,被装载到从物理地址 6540 0000H 开始的连续主存空间中。请回答下列问题:
(1)若 CPU 在执行进程 P 的过程中,访问虚拟地址 1234 5678H 时发生了缺页异常,经过缺页异常处理和 MMU 地址转换后得到的物理地址是 BAB4 5678H。在此次缺页异常的处理中,需要为新缺页分配页框并更新相应的页表项,则该页表项的虚拟地址和物理地址分别是什么?该页表项中的页框号更新后的值是什么?(3 分)
(2)进程 P 的页表所在页的页号是什么?该页对应的页表项的虚拟地址是什么?该页表项中的页框号是多少?(4 分)
[tag_link]
1)首先,我们需要确定虚拟地址 12345678H 对应页号。由于页号占 10 位,1234 5678H = 0001 0010 0011 0100 0101 0110 0111 1000B。计算得到:页内偏移量(22 位)= 11 0100 0101 0110 0111 1000B = 345678H页号(10 位)= 00 0100 1000B = 048H然后,我们需要找到这个页号对应的页表项的虚拟地址和物理地址。由于页表项的大小为字节,我们可以通过将页号乘以 4 得到页表项的偏移量。然后将这个偏移量加到页表的起始地址上,就可以得到页表项的虚拟地址和物理地址。进程 P 的页表起始虚拟地址为 B8C0 0000H,物理地址 654 0000H。计算得到:页表项虚拟地址 = 页表起始虚拟地址 + 页号×4 = B8C00000H + 048H×4 = B8C00120,页表项物理地址 = 页表起始物理地址 + 页号×4 = 65400000H + 048H×4 = 65400120H。最后,我们需要更新页表项中的页框号。由于经过 U 地址转换后得到的物理地址是 BAB4 5678H,我们可以通过右移 22 位得到页框号。计算得到:页框号 = 物理地址 BAB45678H 的前 10 位,即 10 1110 1010B = 2EAH。
2)首先,我们需要确定进程即的页表所在页的页号。由于页表起始虚拟地址位 B8C00000H,我们可以通过右移 22 位得到页号。计算得到:进程 P 的页表所在页的页号等于 B8C0 0000 的前 10 位,即 10 1110 0011B = 2E3H。然后,我们需要找到这个页号对应的页表项的虚拟地址。由于页表项的大小为 4 字节,我们可以通过将页号乘以 4 得到页表项的偏移量。然后将这个偏移量加到页表的起始地址上,就可以得到顷表项的虚拟地址。计算得到:该页对应的页表项的虚拟地址 = B8C0 0000H + 2E3H*4 = B8C0 0B8CH。最后,我们需要确定贡表项中的页框号。由于页表被装在到从物理地址 65400000 开始的连续主存空间中,我们可以通过右移 22 位得到页框号。计算得到:该页表项中的页框号等于物理地址 6540 0000H 的前 10 位,即 01 1001 0101B = 195H。