Linux内核源码学习之 内核页表打印

本文详细介绍了如何在Linux内核2.6.11版本中打印内核页表,特别是针对开启了PAE模式的系统,分析了页表结构,并提供了一段用于打印2M和4KB页的代码示例。
摘要由CSDN通过智能技术生成

本学期Linux内核实验最后是打印内核页表,线性地址----物理地址

我看到这个实验题目的时候想到的就是这个init函数(因为这部分当时就是我讲的^_^),这个函数是初始化linux内核页表的,也就是将32位系统中3G以上的896M线性地址映射到物理地址的0-896M,在其调用者paging_init函数中还处理了其他的情况,比如固定映射之类的。那属于高端内存映射那一块的内容,目前我们先看一下如何将内核页表3G~3G+896M的线性地址对应的物理地址打印出来。

一下的源码是linux2.6.11版本的,应该是和白皮书上的是对应的版本

static void __initkernel_physical_mapping_init(pgd_t *pgd_base)

{

         unsignedlong pfn;

         pgd_t*pgd;

         pmd_t*pmd;

         pte_t*pte;

         intpgd_idx, pmd_idx, pte_ofs;

         /*因为内核的线性地址空间是从0xC0000000开始的,所以这里我们只需要初始化内核全局页目录从0x300开始的项*/

         pgd_idx= pgd_index(PAGE_OFFSET);      /*768*/

         pgd= pgd_base + pgd_idx;                         /*pgd指向当前的目录项 */

         pfn= 0;                                                             /*需要被映射的物理页框号,从物理地址0开始 */

 

         /*初

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值