Linux内存管理源码剖析(五)

本篇主要讲解内核态内存映射,也是本系列文章的最后一篇
上一篇:用户态内存映射原理与源码分析
经常听说,虚拟内存内核空间也有映射区域vmalloc区,其实内核可以通过vmalloc在该区进行内存映射,也可以调用kmap_atomic_prot函数在临时映射区进行临时映射。

1.用户态和内核态的顶级页表在哪?

(1)用户态

pgd_t * pgd;//顶级页表项,mm_struct结构中

(2)内核态
swapper_pg_dir是内核的顶级页表,在系统初始化时就进行了定义,需要注意的是内核也有自己的mm_struct结构;

//linux-4.13.16\arch\x86\include\asm\pgtable_64.h
#define swapper_pg_dir init_top_pgt
2.vmalloc函数与kmap_atomic的区别

对于kmap_atomic发现没有页表的时候回直接创建页表进行映射,而vmalloc则和mmap一样只是分配虚拟地址,所以会发生缺页异常,然后调用do_page_fault处理之。

3.总结
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值