- 虚拟地址映射到物理地址采用页表,页表用数组来实现(暂时不知道有没有别的数据结构来实现页表)。数组的下标用虚拟地址的高20位来表示。虚拟地址实际是32位的(以32位为例,64位类似),如果以全部32位做数组下标,会造成的问题是数组要占用16GB的内存(2^32乘以4个字节=16GB),显然不可取。而以虚拟地址的高20 位做数组下标,只占用4M内存。这样做的前提是以虚拟地址的高20位表示页号,以低12位表示页内偏移。12位刚好是4KB(一个页的大小)。
- 数组下标只存虚拟地址的高20位,数组的个数也就是1M个。数组的值存储的是物理地址的高20位+12位(这12位用于表示访问权限以及其他属性,而不是存储页内偏移)物理地址的页内偏移就等于虚拟地址的页内偏移,不需要映射。
- 参考:http://c.biancheng.net/view/vip_2095.html
浙公网安备 33010602011771号