分页内存管理的核心是将虚拟内存空间和物理内存空间皆划分为大小相同的页面,并以页面作为内存空间的最小分配单位。下图给出了内存管理单元的虚拟地址到物理地址的翻译过程,假设页面大小为4KB,那么CPU发出虚拟地址0010000000000100后,其访问的物理地址是(A)。
- A 0110000000000100
- B 0100000000000100
- C 1100000000000000
- D 1100000000000010
页面大小为 4KB = B,所以页内偏移占低 12 位。
虚拟地址:
- 虚拟页号 = 高 4 位:
- 页内偏移 = 低 12 位:
查页表,页号 2 对应的物理页框号为:
物理地址 = 物理页框号拼接页内偏移:
即十六进制:
因此,访问的物理地址是 0x6004(或写成二进制 0110 0000 0000 0100)。
追问:图片中页表最后一列单个数字列表示什么?
图片中页表最后一列的单个数字(0 或 1)表示的是存在位(Present Bit),也叫有效位(Valid Bit)。
它的含义是:
- 1:表示该页面当前已经调入物理内存,页表中对应的物理页框号是有效的,可以正常进行地址转换。
- 0:表示该页面当前不在物理内存中(可能还在磁盘上,或者尚未分配),此时如果访问该页面,会触发缺页中断(Page Fault),由操作系统负责将页面从外存调入内存。
结合图片来看:
- 页号 0、1、2、5、9 对应的存在位为 1,说明这些页面在内存中;
- 页号 3、4、6、7、8 对应的存在位为 0,说明这些页面不在内存中。
题目中访问的虚拟页号是 2,查表发现页号 2 的存在位为 1,物理页框号为 110(即 6),因此可以顺利完成地址转换,得到物理地址 0x6004。如果访问的是页号 3,则会因为存在位为 0 而触发缺页中断。