Linux内存寻址(三):Linux中的分页

参考链接:https://cloud.tencent.com/developer/article/1373361

https://blog.csdn.net/gatieme/article/details/50756050

https://blog.csdn.net/gatieme/article/details/50651561

Linux采用了一种同时适用于32位和64位系统的普通分页模式。4级分页模式

目前的内核的内存管理总是假定使用四级页表, 而不管底层处理器是否如此.

单元

描述

页全局目录

Page GlobalDirectory

页上级目录

Page Upper Directory

页中间目录

Page Middle Directory

页表

Page Table

页内偏移

Page Offset

对于没有启用物理地址扩展的32位系统,两级页表足够了。Linux通过使页上级目录和页中间目录位为0从根本上取消了页上级目录和中间目录。但是兼容扩展地址并64位系统下页能使用。

Linux不同于其他的操作系统, 它把计算机分成独立层(体系结构无关)/依赖层(体系结构相关)两个层次. 对于页面的映射和管理也是如此. 页表管理分为两个部分, 第一个部分依赖于体系结构, 第二个部分是体系结构无关的. 所有数据结构几乎都定义在特定体系结构的文件中. 这些数据结构的定义可以在头文件arch/对应体系/include/asm/page.harch/对应体系/include/asm/pgtable.h中找到. 但是对于AMD64和IA-32已经统一为一个体系结构. 但是在处理页表方面仍然有很多的区别, 因为相关的定义分为两个不同的文件arch/x86/include/asm/page_32.harch/x86/include/asm/page_64.h, 类似的也有pgtable_xx.h .

2 页表

Linux内核通过四级页表将虚拟内存空间分为5个部分(4个页表项用于选择页, 1个索引用来表示页内的偏移). 各个体系结构不仅地址长度不同, 而且地址字拆分的方式也不一定相同. 因此内核使用了宏用于将地址分解为各个分量.

参考:深入理解Linux内核

发布了13 篇原创文章 · 获赞 2 · 访问量 3270

猜你喜欢

转载自blog.csdn.net/wangyangzhizunwudi/article/details/100162496