内存管理——页表

来源:互联网 发布:青岛广电网络客服电话 编辑:程序博客网 时间:2024/06/05 20:33

include/asm-x86_64/page.h
typedef struct {unsigned long pte;} pte_t;
typedef struct {unsigned long pmd;} pmd_t;
typedef struct {unsigned long pud;} pud_t;
typedef struct {unsigned long pgd;}pgd_t;
虚拟地址分为几个部分,用作各个页表的索引。内核使用32或64位类型来表示表项,这意味着冰粉表项的所有比特位都存储了有用的数据,即下一级表的基地址。多余的比特位用于保存额外的信息。

3 特定于PTE信息
3 特定于PTE信息
最后一级页表中的不仅包含了指向页的内存位置的指针,还在上述的多余比特位包含与页有关的附加信息。
*_PAGE_PRESENT指定了虚拟内存页是否存在内存中,也不见得总是在内存中。(可能在交换区)

*CPU每次访问页时,会自动设置_PAGE_ACCESSED.内核会定期检查该比特位,一确认页使用的活跃程度。在读或谢访问之后会设置改比特位。

*_PAGE_DIRTY表示该也是否是“脏的”,即页的内容是否已经修改过
*_PAGE_FILE的数值与_PAGE_DIRTY相同,但用于不同的上下文,即页不再内存中的时候。显然,不存在的页不可能是脏的,因此可以重新解析该比特位。
*如果设置了_PAGE_USER,则允许用户空间代码访问该也。否则只有内核才能访问(或CPU处于系统状态的时候)
*_PAGE_READ_PAGE_WRITE和_PAGE_EXECUTE指定了普通的用户进程是否允许读写、写入、执行该野种的机器代码。

每种体系结构都必须提哦给你个两个东西,使得内存管理子系统能够修改pte_t项中额外的比特位,机保存额外的比特位的_pgprot数据类型,以及修改这些比特位的pte_modify函数。
内核定义了各种函数,用于查询和设置内存页与体系结构相关的状态。
*pte_presetn检查页表甚至想的页是否存在内存中。
*pte_dirty检查与页表相关的也是否是脏的,即其内存在上次内核检查之后是否已经修改过。
*pte_write检查内核是否可以写入到页。
*pte_file用于非线性映射,通过操作页表提哦给你了文件内容的一种不同试图。该函数检查页表项检查也表象是否属于这样的一个映射。
注:只有在pte_present返回false时,才能调用pte_file ,即与该也表项相关的页也不在内存中。

3.3.2 页表项的创建和操作

0 0
原创粉丝点击