您的位置:首页 > 运维架构 > Linux

《深入理解LINUX内存管理》学习笔记 (四)

2008-06-13 16:35 591 查看

郑重声明:未经本人允许,不得用于商业或非商业的转载和使用,如有需要请联系: yrj1978@hotmail.com

页表条目的操作

X86体系结构的情况下,在include/asm-x86/pgtable.h文件中,定义了“析出”或者“检查”页表条目中的值的几个宏(在2.6.24版本的内核中,由于体系结构的关系,这几个宏可能分布在几个相关的头文件中)。

通过
4
个宏,把一个线性地址从第一级页目录表
(Page directories)
追巡最后一级页目录表。

pgd_offset:
通过线性地址
(
其中的一部分指出了需要访问的内存地址在的
PGD
中的索引
)
和进程的
mm_struct
数据结构对象,返回一个指向
PGD
条目的地址,内容是某个
PUD
页面的首地址。

pud_offset:
通过线性地址(也是索引)和指向
PGD
条目的地址,返回一个指向
PUD
条目的地址,内容是某个
PMD
页面的首地址。如果硬件系统并不支持
PUD

则直接返回指向
PGD
条目的地址。也就是通过巧妙的直接返回
PGD
的方式,使得不同体系结构下,统一的软件架构。

pmd_offset:

通过线性地址(也是索引)和指向
PUD
条目的地址,返回一个指向
PMD
条目的地址,内容是某个
PTE
页面的首地址。如果硬件系统并不支持
PMD

则直接返回指向
PUD
条目的地址。也就是通过巧妙的直接返回
PUD
的方式,使得不同体系结构下,统一的软件架构。

pte_offset:

通过线性地址(也是索引)和指向
PMD
条目的地址(内容是
PMD
页面的首地址),返回一个指向
PTE
条目的地址,内容是某个需要访问的数据内存页面的首地址(物理地址),这个地址和线性地址的低位部分的数据在内存页面中的偏移相加,就获得了数据真正所在的物理地址了。

第二组宏,用于检测页表条目是否存在或者是否可用的信息。

pte_none(), pmd_none(), pud_none(),pgd_none()
,如果对应的条目不存在,则返回
1
。宏的定义只是检测条目的内容是否全
0.

pte_present(), pmd_present(), pud_present(),pgd_present(),
如果条目中的
PRESENT
位被设置,则返回
1.

pte_clear(), pmd_clear(), pud_clean(),pgd_clear(),
对相应条目清零。

pmd_bad(), pud_bad(),pgd_bad(),
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: