ARM处理器 的linux分页机制

ARM MMU只支持两级页表地址转换,也就是采用三级分页映射,能够满足32bitCPU的存储管理需求



ARM支持的页大小有几种 - 1M, 64K, 4K, 1K。在linux kernel中,ARM采用了4K大小的页,4K大小的页决定了虚拟地址的低12bit留作偏移地址。从上图可以看出,页全局目录索引有效位数是12bit,二级索引有效位数是8bit,页内偏移量为12bit。

根据ARM的硬件分页机制,我们得出第一级全局页目录有4096项,第二级为256项,这样第二级可以有很多位可以被硬件使用。

在arm linux实现上,针对ARM的硬件分页机制做了些微小的调整。第一级目录保留了2048项,每项占用8 bytes(换句话说,是两个硬件指针指向二级页表);第二级则把两个硬件PTE表连续放在一起,在这两个PTE表后面则保存相应的Linux状态信息,因此二级表项实际上有512项(每个表256项,两个则为512项)。这样每个逻辑PTE表刚好占用一个page。

ARM linux页表layout如下:


在arch/arm/include/asm/pgtable.h中,可以看到PTRS_PER_PTE和PTRS_PER_PTE的定义

#define PTRS_PER_PTE        512
#define PTRS_PER_PMD        1
#define PTRS_PER_PGD        2048

由于PGD有2048项,每项占用8个字节,总计需要4*4K,也就是说ARM linux的PGD实际上占用了四个连续物理页框。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值