内存管理——页表

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值