内存管理——页表
来源:互联网 发布:青岛广电网络客服电话 编辑:程序博客网 时间: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 页表项的创建和操作
- 内存管理——页表
- 操作系统—内存管理
- JavaScript—内存管理
- 内存管理—页式管理/段式管理/段页式管理
- Windows内存管理——内存池
- Java内存管理——内存分配
- Java内存管理——内存分配
- Java内存管理——内存回收
- linux内存寻址——内存管理
- 存储管理——内存管理
- 内存管理——段式管理
- C++内存管理——C++内存管理详解
- C++内存管理——浅谈C++中的内存管理
- Linux内存管理(四)——物理内存管理
- OC基础—内存管理之多对象内存管理
- OC基础—内存管理之set方法内存管理
- 内存管理——引用
- 内存管理——虚拟内存
- angular的切换页面
- scala程序设计
- 二叉树中和为某一值的路径
- [博弈]SG函数的求法和一些结论 NIM博弈
- c#连接mysql实例
- 内存管理——页表
- 城市平乱(dijkstra)
- HDU4006
- 逻辑结构常见练习
- Accessibility 实现抢红包(一)
- 二元多项式(sdut_1482)
- java实现线程的暂停与继续(详解案例)
- Google Analytics
- ZZULIOJ 1799 wrz的压岁钱(水。。)