飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 4797|回复: 2

关于CR寄存器

  [复制链接]

该用户从未签到

发表于 2010-10-17 23:21:56 | 显示全部楼层 |阅读模式
Intel中的CR寄存器:


 控制寄存器(CR0、CR 1、CR2和CR3)用於控制和确定处理器的操作模式以及当前执行任务的特性。

CR0:中含有控制处理器操作模式和状态的系统控制标志;

CR1:保留不用;

CR2:含有导致页错误的線性位址。

CR3:中含有页目錄表实体记忆体基底位址,因此该寄存器                                                    称也被称为页目录基底位址寄存器PDBR(Page-Directory Base address Register) 。

CR0
•          For example:
•          PE CR0的位元。是啟用保护(Protection Enable)标志。当设置该位元时即开啟了保护模式;当重定时即进入真实位址模式。这个标志仅开啟段级保护,而並沒有啟用分页机制。若要啟用分页机制,那麼PE和PG标志都要置位元。+

•          如果PE=0、PG=0,处理器工作在真实位址模式下;如果PG=0、PE=l,处理器工作在沒有开啟分页机制的保护模式下;如果PG=l、PE=0,此时由於不在保护模式下不能啟用分页机制,因此处理器会產生一个一般保护異常,即这种标志组合无效;如果PG=1、PE=l,则处理器工作在开啟了分页机制的保护模式下。

•          当改变PE和PG位时,我们必须小心。只有当执行程式起码有部分代码司资料在線性位址空间和实体位址空间中具有相同位址时,我们才能改变PG位的设置。此时这部分具有相同位址的代码在分页和未分页世界之问起著桥樑的作用。无论是否开啟分页机制,这部分代码部具有相同的位址。另外,在开啟分页(PG=l)之前必须先更新页高速缓冲TLB。

•          CR2和CR3

•          CR2和CR3用於分页机制。CR3含有存放页目錄表页面的实体位址,因此CR3也被称为PDBR。因为页目錄表页面是页对齐的,所以该寄存器只有高20位是有效的。而低12位保留供更高级处理器使用,因此在往CR3中载入一个新值时低12位必须设置为0。

•          使用MOV指令载入CR3时具有让页高速缓冲无效的副作用。为了減少位址转換所要求的汇流排週期数量,最近存取的页目錄和页表会被存放在处理器的页高速缓冲器件中,该缓冲器件被称为转換查找缓冲区TLB(Translation Lookaside Buffer) 。只有当TLB中不包含要求的页表项时才会使用额外的汇流排週期从记忆体中读取页表项。

•          即使CR0中的PG位处於重定模式(PG=0) ,我们也能先载入CR3。以允许对分页机制进行初始化。当切換任务时,CR3的內容也会随之改变。但是如果新任务的CR3值与原任务的一樣,处理器就无需更新页高速缓冲。这樣共用页表的任务可以执行得更快。

•          CR2用於出现页異常时报告出错资讯。在报告页異常时,处理器会把引起異常的線性位址存放在CR2中。因此作业系统中的页異常处理程式可以透过检查CR2的內容来确定線性位址空间中哪一个页面引发了異常。

•          CPU工作模式
•          The IA-32 architecture supports three operating modes and one quasi-operating mode:
•          • Protected mode:物理地址空间4GB
•             This is the native operating mode of the processor. In this mode all instructions and architectural features are available, providing the highest performance and capability. This is the recommended mode for all new applications and operating systems.
•             操作系统接管CPU后. 会使CPU进入保护模式. 这时候可以发挥80x86的所有威力.. 包括权限分级.内存分页.等等等等各种功能 。从80286开始,处理器就具备了保护机制。保护机制能有效地实现不同任务之间的保护和同一任务内的保护。
•          实模式下通常只能寻址1M的内存空间,且只能是单任务,就是说同一时间不能有两个任务被激活。从8086/8088的20根地址线,80286的24根地址线到80386的32根地址线,直至今天Puntium4已经发展到了36根地址线,它们分别可以寻址1M、16M、4G、64G的内存空间,然而在实模式下,通常的寻址范围还是1M。也就是对于在纯DOS下运行的Puntium4也只能是一个快速的8086。
•          保护模式下,段空间增大为4k-4g。通过段描述符以及段内偏移寻址,寻找到的是线性地址,再通过线性地址寻找物理地址(虚存转换)。在根据段地址选择的时候,可以加入权限判断等保护机制。
•          三个重要的系统表GDT、LDT和IDT
首先说明的是,这三个表是在内存中由操作系统或系统程序员所建,并不是固化在哪里,所以从理论上是可以被读写的。
这三个表都是描述符表.描述符表是由若干个描述符组成,每个描述符占用8个字节的内存空间,每个描述符表内最多可以有8129个描述符.描述符是描述一个段的大小,地址及各种状态的.描述符表有三种,分别为全局描述符表GDT、局部描述符表LDT和中断描述符表IDT。
•          在保护模式下,。段寄存器存储的是指向这些表的指针。用于定义内存段的表有两种:全局描述符表(GDT) 和局部描述符表(LDT)。在实模式中,段长是固定的(为64KB),而在保护模式中,段长是可变的,其最大可达4GB。LDT也是段描述符的一个数组。与GDT不同,LDT是一个段,其中存放的是局部的、不需要全局共享的段描述符。每一个操作系统都必须定义一个GDT,而每一个正在运行的任务都会有一个相应的LDT。每一个描述符的长度是8个字节,格式如图3所示。当段寄存器被加载的时候,段基地址就会从相应的表入口获得。描述符的内容会被存储在一个程序员不可见的影像寄存器(shadow register)之中,以便下一次同一个段可以使用该信息而不用每次都到表中提取。物理地址由16位或者32位的偏移加上影像寄存器中的基址组成。

•          • Real-address mode.
•          This operating mode provides the programming environment of the Intel 8086 processor, with a few extensions .
•          CPU启动的时候的模式 这时候就相当于一个速度超快的8086
不能使用多线程 不能实现权限分级 还不能访问20位以上地址线,也就是说只能访问1M内存(!!!)
•          实模式是通过段地址加段内偏移地址来确定物理地址,然后直接访问。偏移寄存器是16位(64k),所以1m空间被分为很多个64k来寻址。也就是说一个段的空间,最大为64k。

•          System management mode (SMM):
•          IA-32 processors, beginning with the Intel386™ SL processor. This mode provides an operating system or executive with a transparent mechanism for implementing power management and OEM differentiation features.
•          只有SMI才会引起进入SMM,处理器保护现场,切换到SMRAM里的一个独立地址空间执行SMM代码,RSM指令会使系统返回到原来的正常模式。SMM相当于实模式,没有特权级和地址映射,可寻址4GB,可执行所有I/O和可用系统指令。只要进入了SMM就什么都可以干了,而且系统是不知道的。
•          SMI优先级在所有中断里最高。当处于SMM状态,处理器不识别后继的SMI请求,但第一个SMI请求可以被锁存,并在系统退出SMM后被处理。通过对chipset编程可以发出软件SMI信号,但针对不同的CHIP有不同的写法。

•          Virtual-8086 mode
•          In protected mode, the processor supports a quasi-operating mode known as virtual-8086 mode. This mode allows the processor execute 8086 software in a protected, multitasking environment.

•          虚拟8086模式是保护模式下的一种工作方式,也称为V8086模式,或者简称为V86模式。在虚拟8086模式下,处理器类似于8086。寻址的地址空间是1M字节;段寄存器的内容作为段值解释;20位存储单元地址由段值乘以16加偏移构成。在V86模式下,代码段总是可写的,这与实模式相同,同理,数据段也是可执行的,只不过可能会发生异常。所以,在虚拟8086模式下,可以运行DOS及以其为平台的软件。但V86模式毕竟是虚拟8086的一种方式,所以不完全等同于8086。

•          8086程序可以直接在V86模式下运行,而V86模式受到称为V86监控程序的控制。V86监控程序和在V86模式下的8086程序构成的任务称为虚拟8086任务,或者简称为V86任务。V86任务形成一个由处理器硬件和属于系统软件的监控程序组成的“虚拟8086机”。V86监控程序控制V86外部界面、中断和I/O。硬件提供该任务最低端1M字节线性地址空间的虚拟存储空间,包含虚拟寄存器的TSS,并执行处理这些寄存器和地址空间的指令。

•          80386把V86任务作为与其它任务具有同等地位的一个任务。它可以支持多个V86任务,每个V86任务是相对独立的。所以,通过V86模式这种形式,运行8086程序可充分发挥处理器的能力和充分利用系统资源。

评分

参与人数 1威望 +8 飘云币 +8 收起 理由
whypro + 8 + 8 PYG有你更精彩!

查看全部评分

PYG19周年生日快乐!

该用户从未签到

发表于 2010-11-1 15:02:03 | 显示全部楼层
感谢分享,这个需要学习下,有时候很强大。
PYG19周年生日快乐!
  • TA的每日心情

    2016-8-15 06:09
  • 签到天数: 13 天

    [LV.3]偶尔看看II

    发表于 2016-7-23 18:27:13 | 显示全部楼层
    楼主,怎么能实现修改DPL?
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表