virtual memory
例子分析:
page size = 4K
address space = 16K
physical memroy = 64K
page table entry = 4Bytes 假定 valid bit(1bit) + PFN(31bits)
address translation 图解
Linear page table
virtual address space(16K)
- bits(virtual address space) = log2(virtual memory address space) = log216K = 14
- 总页数 =
virtual address space / page size
= 16K / 4K = 4,可知需要 2bits 表示页数(Virtual Page Number) - offset = log2(page size) = log2(4K) = 12
Virtual Page Number bits | offset bits |
---|---|
2 | 12 |
physical memory (64K)
- bits(virtual address space) = log2(virtual memory address space) = log264K = 16
- 总页数 =
virtual address space / page size
= 64K / 4K = 16,可知需要 4bits 表示页数(Physical Frame Number) - offset = log2(page size) = log2(4K) = 12
Physical Frame Number bits | offset bits |
---|---|
4 | 12 |
linear page table 记录啥?
记录从 VPN
到 PFN
的映射。那么记录(Page Table Entry
)格式是怎样的呢?
该示例使用的记录格式是:
valid bit | PFN bits |
---|---|
1 | 31 |
valid bit = 1 该 entry 是一个有效的 VPN
-> PFN 映射。
valid bit = 0 该 entry 是一个无效的 VPN
-> PFN 映射。
linear page table
就是一维数组,数组 index 作为 VPN
。数组每一个元素就是一个 Page Table Entry。
实例 Address Translation
Page table 例子
Page Table (from entry 0 down to the max size)
[ 0] 0x8000000c
[ 1] 0x00000000
[ 2] 0x00000000
[ 3] 0x80000006
virtual address 例子
Virtual Address Trace
VA 0x00003229 (decimal: 12841) --> PA or invalid address? (1)
VA 0x00001369 (decimal: 4969) --> PA or invalid address? (2)
VA 0x00001e80 (decimal: 7808) --> PA or invalid address? (3)
VA 0x00002556 (decimal: 9558) --> PA or invalid address? (4)
VA 0x00003a1e (decimal: 14878) --> PA or invalid address? (5)
(1) VA 0x00003229 (decimal: 12841
) 虚拟地址翻译过程。
- 计算 VPN = VA / page size = 12841 / 4K = 3,即是线性页表的 index
- 计算 offset = VA % page size = 553
- 查看 Page Table[VPN] = Page Table[3] = 0x80000006
- 判断该 Page Table Entry 是否有效,该 VPN -> PFN 是有效映射。根据 page table entry 格式可以得到 PFN = 6。
- 计算物理地址:PFN * page size + offset = 6 * 4K + 553 = 25129。虚拟地址翻译完毕。
综上步骤可知:地址翻译主要是找到 VPN 到 PFN 的过程。这个关系存储在 Linear Page Table 之中。