- 论坛徽章:
- 9
|
Feature Update
支持三级页表机制:
1. PGD 页表:
位于 swapper_pg_dir 处 16K 大小,存储 0 ~ 4G 的一级页表.
操作函数为:
pgd_t *pgd;
pgd_offset()
pgd_index()
2. PMD 页表:
ARM 硬件只支持两级页表,而 Linux 模拟支持该层页表,所以 PMD 页表就是 PGD 页表.
但 PMD 页表有其特定的作用.
其定义为 typedef struct {unsigned long pmd[2];} pmd_t;
由于 PMD 页表的作用是指向 PTE 页表的.内核使用一个 page 来存储 PTE 页表.
对于这个 PTE page 的分布是 0 ~ 2K 存储软件 PTE,2K ~ 4K 存储硬件 PTE.
内核将 2K ~ 4K 分作了两个入口,每个入口包含 256 个PTE 页表.所以
pmd[0] = H/W PTE0.
pmd[1] = H/W PTE1.
3. PTE 页表:
从 buddy system 中分配一个物理页用来做 PTE page,正如上面所说,
0 ~ 1K 用来存储软件 PTE0, 1K ~ 2K 用来存储软件 PTE1,总共 512 个 PTE 入口.
相关函数为:
pte_offset_map()
pte_offset_kernel()
pte_index()
|
|