目录
第二章 32位处理机的工作模式 .............................................. 2
2.1 实模式 ........................................................... 2
2.1.1 实模式的特点 ............................................... 2
2.1.2 32位微处理器在实模式下的状态 .............................. 2
2.1.3 实模式下的存储器管理 ....................................... 3
2.1.4 实模式下的存储器寻址范围 ................................... 3
2.2 保护模式 ......................................................... 4
2.2.1 保护模式的特点 ............................................. 4
2.2.2 虚拟存储器的概念 ........................................... 4
2.2.3 保护机制 ................................................... 5
2.2.4 保护摸式下的存储器管理 ..................................... 5
2.3 虚拟8086模式(V86模式) ........................................ 6
习 题 二 ............................................................... 8
第二章 32位处理机的工作模式
微处理器的工作模式:是指微处理器对存储器的操作模式。早期的微处理器(如8086)只有一种工作模式就是实地址模式(Real Address Mode),简称实模式,程序和数据运行在实际存储空间,无存储保护。从80286到Pentium的微处理器又增加了一种工作模式,即受保护的虚拟地址模式(Protected Virtual Address Mode),简称保护模式,对程序和数据的管理采用虚拟存储空间,并且增加了存储保护,还支持多任务。在保护模式下,为了兼容8086微处理器对存储器的实模式操作.又派生出了一种虚拟8086工作模式,又称V8086模式,简称V86模式。
所以,32位微处理器有实模式、保护模式和V86模式3种工作模式供用户选择使用。其中,保护模式是32位微处理器的本机工作模式,而实模式和V86模式完全是为了兼容16位微处理器程序才保留下来的工作模式。
微处理器的3种工作模式之间可相互切换。
2.1 实模式
32位微处理器3种工作模式中的实模式是为了与历史上曾经使用过的8位/16位微处理器兼容而保留下来的一种工作模式。兼容的直接结果:就是用户在32位微处理器的实模式下编写程序和在16位微处理器上编写程序是完全一样的。或者说用户编写的8/16位微处理器程序可以直接在32位微处理器的实模式下运行。所以,从用户的角度,可以把32位实模式下的微处理器当作16位微处理器来使用,只不过在功能上更加强大,新增加了寄存器,扩充了新指令,加快了运行速度,因此,对熟悉16位微处理器的人来说,使用32位微处理器实模式毫无困难。
2.1.1 实模式的特点
32位微处理器实模式具有以下特点。
①存储器地址空间采用实地址,不支持虚拟存储器。
②无保护机制,不支持存储保护功能。
③单任务运行,不支持多任务。
④存储器管理采用分段机制,支持段式管理,无分页机制,不支持页式管理。
⑤使用20位地址,支持1MB的内存空间寻址。
以上特点也是16位微处理器工作模式的特点,可见32位微处理器的实模式是把32位高档微处理器当作低档16位微处理器使用,因而没有发挥32位微处理器的高性能。
如何进入实模式呢? 32位微处理器进入实模式有两种方式;一是开机时在内部复位后直接进入实模式;一是用软件的办法从保护模式切换到实模式,即将控制寄存器CR0的PE位置0,使微处理器进入实模式。
2.1.2 32位微处理器在实模式下的状态
进入实模式后,微处理器的状态可以从表2.1所列的相关寄存器的内容看出
例如,CR0的第0位PE=0,表明微处理器工作在实模式下;
第3位TS=0,表明无 任务转换,即不支持多任务;
第16位WP=0,表明不进行写保护,不支持保护功能;
第31位PG=0,表明不使用页式管理。
另外,IDTR的基地址=0和界限=3FFH,表示实模式的中断向量表安排在存储器的00000H~003FFH区域,并且固定不变。
此外,从CS和EIP的内容可知,复位后32位微处理器程序从0FFFFFF0H单元开始执行,直到执行
段间调用 或 段间转移指令时,A31~A20才降为0,形成以FFFF0H为起始地址的实模式下程序地址。
实际上,实模式下的分段机制对存储器的段也是按照段描述符的格式定义的,只不过是根据实模式的特点进行的,并且所定义的段描述符中的各种属性是固定不变的。因此.不像保护模式那样,由于段的各种属性是变化的,而需要使用描述符来描述各个具体段。
下面是实模式下对段描述符的定义,内容包括段基址、段界限和段属性3个域。
由于各个段的基址、界限和属性都是按上述固定的值由微处理器复位时设置好的,所以实模式下不再要求用段描述将来说明各个段的具体属性。
2.1.3 实模式下的存储器管理
由于实模式下CR0的PG=0,页式管理机构不工作,故只有段式管理。段式管理的逻辑地址采用段加偏移的方案来表示,在形式上,它与16位微处理器的逻辑地址没有差别,所不同的是32位微处理器的段的含义发生了变化,由原来单一的段基址变成了包括段基址、段界限和段属性的段描述符;段寄存器也扩展为段寄存器(可见部分)和段描述符高速缓存寄存器(不可见部分)两部分。在用户向段寄存器(可见部分)装入 段值 时,系统硬件自动将 段值×16,然后装入段描述符高速缓存寄存器(不可见)中,这就和16位微处理器的逻辑地址在形式上保持一致了。
实模式下用户在程序中所使用的地址是逻辑地址,而代码和数据存放在物理地址中,CPU要运行程序就要将逻辑地址转换为物理地址。如何把逻辑地址转换为物理地址呢?
物理地址的形成:将段寄存器的内容左移4次+偏移量,即:物理地址=段值×16+偏移量
这就是32位微处理器实模式下的物理地址形成的方法。
2.1.4 实模式下的存储器寻址范围
20实模式来源于8086微处理器,它有20根地址线,可寻址空间为2B=1MB。如何去寻址或访问这个
1MB
的存储空间,是微处理器所面临的问题。由于8086的寄存器为16位,只能寻址2B=64KB,因此,实模式下存储寻址只能采用以最大长度(64KB)为一段的段寻址方式。
这个段位放在段寄存器中,表示每个段的首地址(或基址)。偏移量表示存储单元离段首地址的距离,偏移量放在偏移寄存器中。把这两部分合起来就形成了段加偏移的寻址方案,即:把段寄存器和偏移寄存器组合在一起进行寻址,用以指定指令或数据在存储器中的位置。
一般情况下.各段在存储器中的位置分配是由操作系统负责的,除非专门指定。每个段可以独占1个段,段也可重叠。实际使用中,每个段的大小(尺寸)可根据需要确定,可以是任意个字节,但不能超过64KB的范围。另外,段不能起始于任意地址,而必须从16的整数倍 地址单元开始。 16
2.2 保护模式
保护模式是32位微处理器的本机模式。它是一种与实模式完全不相同的工作模式。因在学习保护模式时,即使是很熟悉实模式的读者.也会遇到不少困难,需要理解和掌握许多既念、新术语和新方法。
2.2.1 保护模式的特点
32位微处理器保护模式具有以下特点。
①采用虚拟技术,支持虚拟存储器。
②采用保护措施,实现存储器内容的保护与隔离。
③采用分段与分页机制,实现虚拟存储器管理。
④基于虚拟机.支持多任务。
以上特点,说明了保护模式的高性能,但也增加了使用保护模式的复杂性。内容的保护,对存储器的寻址过程,特别是多任务的切换过程变得很复杂;为了实现对存储器的管理而采用的分段与分页机制,使存储器地址的生成与转换(映射),比实模式要麻烦得多。
32位微处理器开机或复位时,处于实模式。如果要使微处理器进入保护模式,则可以用软件的办法把控制存储器CR0的第0位PE置1来使微处理器从实模式转换到保护模式(见第6.7.3节)。在进入保护模式后,微处理器就可以提供支持虚拟地址、分页、保护和多任务的高级微机系统的功能。
2.2.2 虚拟存储器的概念
在保护模式下,程序中所使用的地址都是虚拟地址而不是实地址,存储器也是虚拟存储器。那么,什么是虚拟存储器?为什么要使用虚拟存储器?以及如何实现虚拟存储呢?
1.什么是虚拟存储器
实际的物理存储器是由存储器芯片所组成的一个存储器实体,它的最大容量取决于地址总线的位数,20位地址线有1MB的空间,32位地址线可达4GB的空间。
虚拟存储器是采用虚拟技术设计出来的一种比实际存储器容量大得多的,而并非实际存在的存储器。虚拟存储器的地址与微处理器的地址总线没有直接关系,即与实际存储器的大小无关,从这一点来看它是虚拟的。但是,使用者在编程时又会感觉到它的存在,并且好像在使用一个非常庞大的物理存储器似的,而不用担心存储空间不够。
46然而,虚拟存储器空间也不可能无穷大,从32位微处理器段式管理方式的段(扩展)十偏移可知,寻址目标地址有46位(选择子14位,偏移量32位),可见32位微处理器的虚拟地址空间可达到2=64TB。这
个空间比起实际的4GB大了15000倍。
2.为什么要采用虚拟存储器
32位微处理器虽然可支持4GB的空间,但考虑成本问题,在个人计算机中所配置的实际存储器(内存)一般都不大,只有几百MB到2GB,这样的存储器空间对多任务系统来说是杯水车薪,非常有限。那么,怎样才能使众多的不同任务共享这个空间有限的存储器来运行各自的程序呢?显然,采用增加存储器芯片来扩展存储器的办法不可取,而利用软件手段来构造一个容量几乎不受限制的虚拟存储器最为合适。使用虚拟存储器的好处是使编程人员可写出比任何实际配置的物理存储器大得多的程序,从而支持多任务的实现。
3.如何实现虚拟存储
首先,虚拟存储器由存储器管理器(MMU)及1个大容量硬盘(HD)支持。操作系统的存储器管理器控制物理存储器的分配和释放,以及硬盘和物理存储器之间的数据交换。当程序访问的一个段或页已在存储器(内存)时,操作正常;如果不在,就产生异常,并转入异常处理程序,异常处理程序则将该段 或 页从硬盘装入内存。这样,在编程者看来所有段和页都在存储器中,从而使计算机可以使用的地址空间要比实际的物理存储器大得多,这就是虚拟存储技术。
这种虚拟存储技术的可行性基于程序访问存储器(内存)的局部性原理,即在程序执行过程中只需将整个虚拟存储器的一部分地址空间放在内存中。当访问内存的某一段或页时,可以把虚拟存储器的这一段或页从硬盘装入内存。虚拟存储器的另外段或页,也可从内存回送到硬盘上。
关于虚拟存储可以这样来小结;由于系统的物理内存不可能给每个任务提供高达4GB的存储空间,因此在程序运行时只是将一部分的空间存放在内存中,而大部分的空间都是存放在外存中,只有在需要访问时才将它从外存调入内存,但这个调入过程对用户来说是透明的,在用户看来就是每个任务独占4GB的存储空间。虚拟存储是通过描述符表来实现的,在每个描述符的段属性中都有一个存在位P用来表示所描述的段是否在物理内存中,当要访问的段的描述符的P=0时,即该段不在内存中,则引发一个系统异常,通过异常处理程序将该段调入内存,程序继续运行。
2.2.3 保护机制
保护功能是保护模式的重要特点之一,如果像早期的16位微处理器那样,则处理问题要简单得多。但是,计算机的安全没有保障,并且无法支持多任务之间的隔离。因此,不能没有保护机制,但加了保护机制就注定会使存储器和I/O访问复杂化。
1.什么是保护
保护是为了防止对存储器(包括I/O端口)资源进行未经授权的或不正确的访问,而在软件系统中加入的防护措施,以免操作系统和用户程序遭到有意和无意的破坏,保证系统与用户程序正常运行。下面简要介绍32位微处理器的一些保护措施,存储器保护机制的详细情况将在6.5节中讨论。
2.存储器保护措施
保护措施的直接目的是保障系统的安全性和可靠性:安全就是使系统免遭破坏,可靠就是保证得到正确的结果。32位微处理器的存储器保护措施大致可分为特权级保护和条件保护两类。
(1)特权级保护措施
特权级保护是对各段 人为地附加一个特权级别,并且规定低级别的程序不能访问,更不能修改高级别的程序与数据。每当一个程序试图访问一个段时,就把它的特权级(CPL)与要访问的段的特权级(DPL)进行比较,以决定是否允许其访问。如果符合访问权限的规定,则允许访问,否则,拒绝访问,从而达到保护的目的。
特权级保护也叫访问权限保护,特权级保护可分为两个层次:同一任务内的保护和不同任务之间的保护。
(2)条件保护性措施
条件保护措施,或者叫可靠性保护措施。这类保护措施是针对那些不够条件而进行的违规操作,用以保证系统的安全。这类违规操作会引起异常,异常处理程序会去处理它们并重启操作。
在保护模式下I/O地址空间也属于访问的保护范围。但是,端口地址与存储器地址不同,它是不分段的,也不分页,故它的寻址不需要段寄存器,因而对存储器所采取的那些保护措施就不适用于I/O端口了。因此,采用IOPL特权级和I/O许可位图进行保护。需要说明的是:上述的保护措施是由系统软件与硬件实施的,不需要用户去做。
2.2.4 保护摸式下的存储器管理
在保护模式下,存储器空间用虚拟地址空间、线性地址空间和物理地址空间三种方式来描述。采用扩充的分段和可选的分页管理方式,并由CPU中的存储器管理部件MMU实现。
1.保护模式下存储器管理的特点
保护模式下的存储器管理与实模式下的相比,有三大特点:管理的是虚拟存储器,存储器要求有保护功能,存储器要支持多任务。
首先,保护模式下的存储器管理所面向的是虚拟存储器,因此,除了原有的分段管理之外,还新增加了分页管理,由此而引出了页表目录、页表等新名词。同时,虚拟存储器的存储空间庞大,可达64TB,故在分段的处理上也和实模式下的不同。
其次,保护模式下的存储器管理必须对存储器进行保护,因此,对存储器段的描述不再是单一的段基址和偏移量之类的存储属性,而应加入保护属性,以便在访问时进行一系列的保护性检查。这样就出现了段描述符、段选择子。
最后,保护模式下的存储器管理要支持多任务,因此,需提供任务之间的隔离和切换的方法。为了使任务之间相互隔离,将存储空间划分为任务公有(共享)和任务私有两部分,由此而引出了全局描述符与局部描述符。同时,为了能够进行任务之间的切换,又引入了门描述符及任务状态段。
以上这些都是支持保护模式下的存储器管理的基本要素,其含义和作用在后面讨论。
2.保护模式下存储器的管理方式
保护模式下的两种存储器管理方式中,段式管理将存储空间划为任意长度的段,并采用段+偏移量形成物理地址,这虽然在名称和形式上与原来16位微处理器的相同,但实际含义完全不同,它对段的描述已添加了许多标志保护功能的属性,而把“段”扩展为“段描述符”,因此,把保护模式下的段式管理称为扩展段式管理。至于页式管理.这是16位微处理器没有的,是32位微处理器新增加的管理方式,页式管理将存储空间划分为固定大小的页,并采用页表将线性地址页转换为物理页,再将物理页+页内偏移量形成物理地址。
3.虚拟地址空间到物理地址空间的转换
在保护模式下,用户在程序中所使用的地址是虚拟地址,而代码和数据是存放在物理地址中的,因此,微处理器要运行程序就要将虚拟地址转换(映射)到物理地址。如何才能把虚拟地址转换为物理地址呢?由于保护模式下,除了段式管理外,还有页式管理,而这两种不同的管理方式,对地址转换的方案也不同。 在段式管理下,仍然采用段+偏移量的方案来表示,在形式上也是段寄存器;偏移量,如代码段的虚拟地址CS:EIP。但是,这里的段寄存器里装的并不是真正的段基地址,而是1个指向某段描述符的选择子,真正的段基地址放在段描述符中。因此,要从虚拟地址转换(映射)到物理地址,必须利用段选择子到描述符表中找到相应的描述符,从描述符中取出段基地址,再把这个段基地址+偏移量,最后得到物理地址。为什么不像在实模式下那样直接把段基地址装人段寄存器,而要统一个圈子,使问题变得复杂呢?原因是在保护模式下,为了实现保护功能,对段的描述除了段基地址外,还加入了段的特权级属性与段限长等保护信息,使原来单一的16位段基地址扩展为1个64位的段描述符。显然,这样的描述符是不能直接装到段寄存器中的,而是要把它存放在1个描述符表中,在需要启用时,通过段寄存器的选择子到描述符表中去选取,选中了某个段描述符就激活了相应的存储段。一个任务中,可以同时激活6个存储段。值得指出的是这里得到的物理地址,又叫做线性地址,只有在禁止使用页式管理时,线性地址才等于物理地址。 在页式管理下,存储器线性地址不等于物理地址,要得到物理地址还必须将线性地址再进行一次转换(映射)。为了实现这种转换,分页 机制将32位存储空间划分为大小固定为4KB/4MB的物理页,并提供两级转换表:页表目录和页表。利用两级转换表建立起线性地址与物理地址的对应关系。其中,线性地址的最高10位(22~31位)对应页表目录项;线性地址的次高10位(12~21位)对应页表项;线性地址的低12位(0~11位),对应页内的偏移量,即要访问的存储单元。通过对两级转换表的页表目录项和页表项的两次查表,就可产生与线性地址相对应的物理页,这叫做页变换。将页变换所获得的物理页加上线性地址最低12位(0~11位)所确定的页内的偏移量,就是要访问的存储单元。
2.3 虚拟8086模式(V86模式)
1.什么是V86模式
V86模式是在32位微处理器中模拟运行16位微处理器的一种工作模式,是在保护模式下由保护机制控制运行的8086工作模式。
在V86模式下,段寄存器的用法跟实模式的一样,用来保存段起始地址的高16位;可寻址的地址空间为1MB,20位的物理地址的计算也是段寄存器内容左移4位加段内偏移地址。
因此,在V86模式下可以运行8086/8088的应用程序,达时32位微处理器就好像一个快速的8086/8088微处理器。
2.V86模式与实模式的区别
V86模式和实模式都是为了与8086/8088兼容而设置的16位操作模式。但是V86模式由于是在保护模式下模拟运行8086的工作模式,所以V86模式跟真正的8086模式有很大的差别。
在V86模式下可寻址的存储空间虽然为1MB,但可以采用存储器分页管理机制,将1MB的存储空间分为256个页面,每页4KB.
在V86模式下中断处理不是采用实模式下的中断向量表,而是采用保护模式下的中断描述符表,即采用保护模式下的中断处理机制。
实模式是整个微处理器的工作模式.而V86模式是在保护模式下一个任务内的代码段、数据段和堆栈段的工作模式。因此,在32位微处理器的多任务系统中,可使其中的一个或几个任务同时工作于V86模式,每个V86任务是相对独立的。此时,每个V86任务所使用的地址空间被映射到物理存储器的不同位置,像保护模式下的其他任务一样被有效隔离和保护。运行在V86模式下的任务被称为虚拟8086任务,简称V86任务。
由此可见,V86模式既保持了与8086/8088工作模式的兼容,又支持了保护模式下的保护机制、存储器分页 管理机制和多任务机制。V86模式使得8086/8088的应用程序和在32位微处理器保护模式下的应用程序可以并发运行。这样既运行了8086/8088应用程序,又能发挥保护模式的优点,充分利用微处理器的处理能力和系统资源。
另外,在V86模式下,各段的特权级均为2级,而在实模式下,各段的特权级均为0级.因此,V86模式限制了一些特权指令的执行。
3.虚拟8086机
在V86模式下,V86任务的执行是由一个被称为V86监控程序的系统软件控制的。V86任务和V86监控程序以及微处理器硬件组成一个所谓的“虚拟8086机”,其中V86监控程序控制V86任务的外部界面、中断和输人/输出,微处理器硬件提供该任务运行所需的1MB的虚拟地址空间,并执行V86任务中的指令。
对DOS操作系统而言,创建一个虚拟8086机是为了在32位微处理器上执行DOS应用程序。这样,32位微处理器就可在保护模式和V86模式之间切换。windows操作系统和windows应用程序运行在保护模式,如果要运行DOS操作系统和DOS应用程序微处理器就切换到V86模式,并由虚拟机管理器VMM负责这种切换。
习 题 二
2.1 32位微处理器有哪几种工作模式?
2.2 实模式有什么特点?
2.3 32位微处理器进入实模式各备寄存器的状态如何?
2.4 实模式下存储器的管理采用什么方式?
2.5 实模式下存储器的地址空间是多少?
2.6 保护模式有什么特点?
2.7 保护模式下实际存储器的地址空间是多少?
2.8 保护模式下虚拟存储器的地址空间可达多少?
2.9 什么是虚拟存储器?为什么要使用虚拟存储器?如何实现虚拟存储?
2.10 保护模式下的所谓保护的含义是什么?
2.11 保护模式下对存储器一般有哪些保护措施?
2.12 保护模式下对存储器的管理与实模式下对存储器的管理有什么不同的特点?
2.13 保护模式下存储器管理采用哪两种方式?
2.14 什么是虚拟8086模式(V86模式)?
2.15 虚拟8086模式与实模式有什么区别?
2.16 什么是虚拟DOS机(WDM)?