Windows保护模式学习笔记(十二)—— 控制寄存器

Windows保护模式学习笔记(十二)—— 控制寄存器

前言

一、学习自滴水编程达人中级班课程,官网:https://bcdaren.com
二、海东老师牛逼!

控制寄存器

描述:

控制寄存器有五个,分别是:Cr0 Cr1 Cr2 Cr3 Cr4

Cr1:保留
Cr3:页目录表基址

Cr0寄存器

结构图:
Cr0
PE位:启用保护(Protecction Enable)标志
PE=1:保护模式
PE=0:实地址模式
这个标志仅开启段级保护,而没有启用分页机制
若要启用分页机制,那么PEPG标志都要置位

PG位:分页机制标志
PG=1:开启了分页机制
PG=0:未开启分页机制
在开启这个标志位之前必须已经或者同时开启PE标志

PG=0PE=0:处理器工作状态为实地址模式
PG=0PE=1:处理器工作状态为没有开启分页机制的保护模式
PG=1PE=0:不存在。在PE没有开启的情况下无法开启PG
PG=1PE=1:处理器工作状态为开启了分页机制的保护模式

WP位:写保护(Write Proctect)标志
对于Intel 80486或以上的CPU,CR0的16位是写保护标志
当设置该标志时,处理器会禁止超级用户程序(例如特权级0的程序)向用户级只读页面执行写操作

CPL<3的时候:

  1. 如果 WP=0 可以读写任意用户级物理页,只要线性地址有效
  2. 如果 WP=1 可以读取任意用户级物理页,但对于只读的物理页,则不能写

Cr2寄存器

描述:

当CPU访问某个无效页面时,会产生缺页异常,此时,CPU会将引起异常的线性地址存放在CR2中

结构图:
Cr2
举例:

  1. 当CPU访问某个物理页,但PDE/PTE的P位为0时,会产生缺页异常
  2. 缺页异常一旦发生,CPU会将引起缺页异常的线性地址存储到Cr2
  3. 此时,操作系统的处理程序开始对异常进行处理
  4. 处理结束后,虽然PDE/PTE的P位为0,但实际上它被写进了页面
  5. 这时,处理程序会将数据从页面中读出,再挂上一个有效的物理页,让程序接着往下跑
  6. 程序往下跑时,操作系统必须要记录程序原先已经跑到了哪里
  7. 此时,Cr2便派上了用场,因为产生异常时的线性地址存在了Cr2中
  8. 但如果异常处理程序检测到用户访问的页面是一个未分配的页面
  9. 这时,操作系统会报告一个异常,告诉我们在哪里发生了错误
  10. 若没有Cr2寄存器,当进入异常处理程序时,将找不到回去的线性地址

Cr4寄存器

结构图:
Cr4
PAE
PAE=1:2-9-9-12分页
PAE=0:10-10-12分页

PSE
PSE


注意:关于控制寄存器的更多细节,请参考Intel白皮书第三卷

发布了45 篇原创文章 · 获赞 2 · 访问量 1854

猜你喜欢

转载自blog.csdn.net/qq_41988448/article/details/102763646