处理器的cr0寄存器Pcd标志用来启用或者禁用高速缓存电路。
pcd标志是访问叶匡中的数据时高速缓存是否开启,pwt表示将数据写到叶匡的时候采用的回写策略是通写还是回写。
TLB用于缓存刚刚被访问的物理地址。每个cpu都有一个TLB。
常用宏功能:
PAGE_SHIFT:指定offset字段的位数,页框大小。
PMD_SHIFT指定线性地址的offset字段与table字段的总位数。32位当PAE被禁用的时候是22位offset(12)+table(10),PMD_MASK为0xffe00000。
PUD_SHIFT:页上级目录项所映射的区域大小的对数。32位的环境上由于是两级页表所以总是等于PMD_SHIF。
PGDIR_SHIFT:页全局目录项所能映射的区域大小的对数。PGDIR_MASK宏用于屏蔽offset、table、middle、upper字段的所有位。
PTRS_PER_PTE、OTRS_PED_PMD、PTRS_PER_PUD、PTRS_PER_PGD用于计算页表、页中间目录、页上级目录和页全局目录表中的表项个数。
pte_t、pmd_t、pud_t、pgd_t分别描述页表项、页中间目录项、页上级目录和页全局目录定义。
__pte\__pmd\__pud\__pgd\__pgprot和pte_val\pmd_val\pud_val\pgd_val\pgprot_val是将相应表项和无符号整数相互转换。
pte_none\pmd_none\pud_none\pgd_none表示相应的表项值为0则返回1否则返回0。
pte_clear\pmd_clear\pud_clear\pgd_clear清除相应的表项,set_pte\set_pmd\set_pud\set_pgd向一页表中写入指定的值。
pte_same表示两个页表项指向相同的页且有相同的访问优先级则返回1否则返回0。
pmd_large(e)当e指向大型页则返回1。
pmd_bad用于检查传入的页中间目录参数,如果页中间所指向的页表满足下列之一返回1。
a页不存在(present标志被清除)b页只允许读访问(read\write标志被清除) c access或者 dirty标志被清除。pud_bad和pgd_bad总是返回0,没有定义pte_bad。
pte_user\pte_read读取user/supervisor标志
pte_write\pte_exec读取read/write标志
pte_dirty 读取dirty标志
pte_young 读取accessed标志
pte_file读取dirty标志
设置页标志函数: