Chinaunix首页 | 论坛 | 博客
  • 博客访问: 622007
  • 博文数量: 69
  • 博客积分: 1891
  • 博客等级: 上尉
  • 技术积分: 1359
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-20 23:38
文章分类

全部博文(69)

文章存档

2012年(46)

2011年(23)

分类: LINUX

2012-03-24 15:09:55

   最后一级的页表项不仅仅包含了指向页的内存地址的指针,它也包含了页的一些特定信息,这些信息是附加在多余的比特位上的,不过这些信息是特定于CPU的。下面来看看这些位的意义:
  1. _PAGE_PRESENT 指定了虚拟内存页是否存在于内存之中,这个之前的pte_present函数里有使用
  2. _PAGE_ACCESS CPU每次访问内存页时,会自动设置
  3. _PAGE_DIRTY表示页是否是脏的,即页的内容是否修改过
  4. _PAGE_FILE与_PAGE_DIRTY相同,但用于不同的上下文,即页不在内存中的时候
  5. _PAGE_USER,如果设置了_PAGE_USER则允许用户访问该页,否则,只有内核能够访问
  6. _PAGE_READ、_PAGE_WRITE、_PAGE_EXECUTE制定了普通的用户进程是否允许读取、写入、执行该页中的机器代码
对应于这些标志,内核提供了一些函数来查看和设置不同标志的状态
  1. pte_present 页是否在内存中
  2. pte_read 从用户空间是否可以读取该页
  3. pte_write 是否可以写入该页
  4. pte_exec 该页中的数据是否可以作为二进制代码执行
  5. pte_dirty 页的内容是否被修改过
  6. pte_file 该页表项是否属于非线性映射
  7. pte_young 访问位(_PAGE_ACCESS)是否设置了
  8. pte_rdpprote 清除该页的读权限
  9. pte_wrprote 清除该页的写权限
  10. pte_exprote 清除该页的二进制数据的权限
  11. pte_mkread 设置读权限
  12. pte_mkwrite 设置写权限
  13. pte_mkexec 允许执行页的内容
  14. pte_mkdirty 将页标记为脏
  15. pte_mkclean "清除"页,通常是清除_PAGE_DIRTY位
  16. pte_mkyoung 设置访问位,通常是_PAGE_ACCESSD
  17. pte_mkold 清除访问位
阅读(4058) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~