页目录和页表结构

这篇博客详细介绍了Linux内存管理中的页目录和页表结构。每个进程拥有独立的页目录表,可通过CR3寄存器访问,而内核则有其自身的页目录。进程空间、内核直接映射空间和内核动态映射空间通过同一页目录表实现不同映射。页表项的高20bit指示物理页面索引,用于管理struct page结构。线性地址通过页目录和页表转换为物理地址,反之亦然,对于进程空间和内核动态映射空间的转换则需要遍历虚存区间链表。
摘要由CSDN通过智能技术生成

 

上图反映了如下信息:

1、  进程的4G 线性空间被划分成三个部分:进程空间(0-3G)、内核直接映射空间(3G – high_memory)、内核动态映射空间(VMALLOC_START  -  VMALLOC_END)

2、  三个空间使用同一张页目录表,通过 CR3 可找到此页目录表。但不同的空间在页目录表中页对应不同的项,因此互相不冲突

3、  内核初始化以后,根据实际物理内存的大小,计算出 high_memory、VMALLOC_START、VMALLOC_END 的值。并为“内核直接映射”空间建立好映射关系,所有的物理内存都可以通过此空间进行访问。

4、  “进程空间”和“内核动态映射空间”的映射关系是动态建立的(通过缺页异常)

假设在有三个线性地址 addr1, addr2, addr3 ,分别属于三个线性空间,但是最终都映射到物理页面1:

1、  三个地址对应不同的页表和页表项

2、  但是页表项的高 20bit 肯定是1,表示物理页面的索引号是1

3、  同时,根据高 20 bit,可以从 mem_map[] 中找到对应的 struct page 结构,struct page 用于管理实际的物理页面(红线)

4、  从线性地址,根据页目录表,页表,可以找到物理地址

5、  Struct page 和物理地址之间很容易互相转换

6、  从物理地址,可以很容易的反推出在内核直接映射空间的线性地址&#

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Blue_Dream_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值