1、第9章 高档微机中虚拟存储、多任务和保护原理 第9章 高档微机中虚拟存储、多任务和保护原理 9.1 硬件基础和基本概念硬件基础和基本概念 9.2 虚拟存储器原理虚拟存储器原理 9.3 多任务的实现原理多任务的实现原理 9.4 保护功能的实现原理保护功能的实现原理 小结小结 习题九习题九 第9章 高档微机中虚拟存储、多任务和保护原理 9.1 9.1 硬件基础和基本概念硬件基础和基本概念在保护模式下的虚拟存储、多任务和保护功能是依靠特殊的硬件支持实现的。其中除了第2章图2.12给出的直接影响保护模式存储器寻址过程的寄存器外,还包括一组系统级寄存器。图9.1是这组系统级寄存器的结构图。它们在虚拟存储
2、、多任务和保护控制中的具体作用,将在下面相关部分介绍。第9章 高档微机中虚拟存储、多任务和保护原理 图9.1 系统级寄存器结构第9章 高档微机中虚拟存储、多任务和保护原理 这组寄存器包括3个控制寄存器和4个段基址寄存器。1.1.控制寄存器控制寄存器3个控制寄存器分别为CR0、CR2 和CR3(CR1 留给后代CPU使用)。这里只介绍CR0 的功能。CR0 的低 16 位又称机器状态字,可以用指令装入内容。其中控制位按功能还可以分为 5组:(1)对CPU工作方式进行控制的有两位:PE(位0)为保护模式允许位,该位置 1,使CPU转移到保护模式;该位为 0时,为实模式。第9章 高档微机中虚拟存储、
3、多任务和保护原理 PG(位31)为分页功能允许位。分页是在保护模式下实现虚拟存储器管理的一种方式(以后详细说明),可以利用这种方式,也可以不用这种方式。该位置 1,表示设置为这种方式,使CPU的有关逻辑按分页方式编址和寻址。(2)对CPU内高速缓冲存储器Cache操作方式进行控制的有两位:CD(位30)为高速缓存禁止(即不允许)位:该位置 1,表示片内高速缓冲的功能处于不允许状态,不把主存内容拷贝到高速缓存器,CPU直接访问内存;只有该位复位为0,高速缓存功能才处于允许状态。第9章 高档微机中虚拟存储、多任务和保护原理 NW(位29)为高速缓存通写方式禁止(即不允许)位。为了保持高速缓存的内容
4、与它对应的主存储器部分内容相同,在改变了高速缓存中的数据后,有两种方法修改主存中的数据。一种方法为写回(write back)法,另一种称为通写(write through)法。NW位置 1,意味着不用通写法;NW位为 0,用通写法。(3)与协处理器或浮点运算部件有关的控制位有TS、EM、MP和NE,这里不介绍。第9章 高档微机中虚拟存储、多任务和保护原理(4)对界屏蔽位AM。对界是指访问存储器时数据类型与在存储器内起始地址的关系:如果访问存储器中字型数据时其起始地址为奇地址,或访问双字型数据时其起始地址不是4 的倍数的地址,或者访问4字型数据时起始地址不是8的倍数的地址,都是未对准界限,或简
5、称未对界。在前面介绍的标志寄存器EFLAGS中,有一个控制标志位AC(位18),称为对界检查标志。该位设置为 1,意味着要进行对界检查,并且当检查出未对界发生时,CPU将产生一类型号为 17 的异常中断;AC位为0时,意味着访问内存时不进行对界检查。第9章 高档微机中虚拟存储、多任务和保护原理 CR0 中的AM位对EFLAGS中的AC位进行控制:如果AM位置 1,使AC位具有所指定的控制作用;AM为0,表示AC位不再起控制作用,也就不会有类型号为 17 的异常中断产生。(5)写保护控制位WP。在对存储器管理采用分页方式时,WP对只读页面提供保护控制功能。如果设定WP位为1,则在管理程序中出现了
6、对只读页面写操作时将自动产生故障中断(类型号14);当WP为0时,允许有条件地对只读页面写操作。第9章 高档微机中虚拟存储、多任务和保护原理 2.2.系统地址寄存器系统地址寄存器为了实现保护模式的功能,系统软件(操作系统)需要在存储器内定义 4 种表,也可以称表段。较低层次的两个表段是:局部描述符表段LDT,有多个,每个任务一个;任务状态段TSS,有多个,每个任务一个。需要注意的是,这些段也和程序的代码段、数据段有相同的属性,就是也有各自的描述符,这些描述符将存储于较高层次的描述符表段内。第9章 高档微机中虚拟存储、多任务和保护原理 较高层次描述符表段有:全局描述符表段GDT,只有一个;中断描
7、述符表段IDT,只有一个。LDT表段描述符和TSS任务状态段的描述符存储于全局描述符表段GDT内。全局描述表段GDT和中断描述符表段IDT都只有一个,它们本身不需要完整的描述符。它们的基地址和段界限直接分别存储于全局描述符表寄存器GDTR、中断描述符表寄存器IDTR中。从相反方向看过去,GDTR内的32位基地址和16位界限值,直接定位了全局描述符表段GDT在内存中的位置;GDT内的任一项描述符,指向较低层次的一个LDT表段、TSS段或直接指向层次更低的程序的代码段、数据段。第9章 高档微机中虚拟存储、多任务和保护原理 除了GDTR和IDTR两个系统级地址寄存器之外,还有局部描述符表寄存器LDT
8、R和任务状态段寄存器TR两个系统级地址寄存器。LDTR用于指向当前任务正在使用的局部描述符表段;TR用于指向当前任务的TSS段。LDT段和TSS段都有多个,而LDTR和TR只寄存当前正在活跃的LDT和TSS描述符。LDTR、TR的结构和CS、DS等段选择符寄存器一样,可以由指令访问的只有 16 位,即选择器部分,用以寄存正在执行任务的LDT描述符表段的 16 位选择符和正在执行任务的TSS段的 16 位选择符。LDTR和TR也有相应的描述符高速缓冲寄存器部分。第9章 高档微机中虚拟存储、多任务和保护原理 当某个LDT(或TSS)的选择符装入LDTR(或TR)的选择器部分时,将自动地把这个LDT
9、(或TSS)的描述符装入相应的描述符高速缓冲寄存器部分。这些表段和寄存器更多的应用将在下面的虚拟存储、多任务和保护部分说明。第9章 高档微机中虚拟存储、多任务和保护原理 9.2 9.2 虚拟存储器原理虚拟存储器原理虚拟存储器是通过管理把主存储器(常称为内存)和辅助存储器(常称为外存,例如磁盘)有机地结合起来,使得程序员可以按比主存储器容量大得多的存储空间编制程序。这时,把程序员编程可用的空间称为虚拟空间,把主存储器的实际空间称为物理空间。第9章 高档微机中虚拟存储、多任务和保护原理 虚拟存储器的实现,允许同一程序的一部分在主存储器中,其它部分在辅助存储器里。运行时,可能会频繁地进行着辅存部分装
10、入主存,主存部分传至辅存的操作。这就要有一套技术通过程序进行管理,也需要CPU内有相应逻辑结构的支持。本节以80486为例,介绍其与虚拟存储、多任务保护有关的逻辑结构和概念。9.2.1 9.2.1 实现虚拟存储的基础实现虚拟存储的基础 在第2章的2.7节,结合图2.12介绍了高档微处理器在保护模式下访问存储器的寻址机制。关键是要理解段、段寄存器中的段选择符、段描述符、为保存段描述符而定义的段(称为描述符表)的概念和它们之间的关系。第9章 高档微机中虚拟存储、多任务和保护原理 如图9.2所示,概括地说,保护模式下访问存储器的地址由段基地址和偏移地址两部分合成。偏移地址根据寻址方式计算,为32位;
11、段的基地址不是段寄存器直接提供的,而是经过段寄存器中的选择符中的索引号,指明存储于段描述符表中的描述符,这个描述符提供了段的基地址。正是这种“间接提供”基地址方法,使得可寻址空间几乎可以无限扩大,因为只要把描述符中基地址的位数增加就可以了。为了后面讨论的方便,这里介绍虚拟地址、物理地址和线性地址三种存储地址空间的概念。第9章 高档微机中虚拟存储、多任务和保护原理 图9.2 80486保护模式下寻址过程第9章 高档微机中虚拟存储、多任务和保护原理 1)虚拟地址虚拟地址即逻辑地址,也就是程序访问存储器时由程序指明的地址。在实模式下,与8086 CPU相同,一个虚拟地址是用它的段地址和段内偏移地址两
12、部分表示的。因为任何由程序访问内存的操作,总是要指明段地址和段内偏移地址。保护模式下,虚拟地址仍由程序指明段的基地址(即段地址)和偏移地址两部分表示,也就是说,任何由程序指明的访问存储器操作,必须指明一个段的基地址和一个偏移地址而组成虚拟地址。第9章 高档微机中虚拟存储、多任务和保护原理 2)物理地址物理地址即物理存储器的地址。物理存储器是CPU可以访问的存储器。物理存储器空间的大小由CPU具有的地址总线的位数决定。对于8086 CPU,地址总线为20 位,其物理存储空间为220 B,即1 MB地址。由8086 CPU内部逻辑决定的由虚拟地址变换成物理地址的规则是,16位段地址(在段寄存器中)
13、左移4位与16位偏移地址相加,得到20位地址,即是物理地址。第9章 高档微机中虚拟存储、多任务和保护原理 80486 CPU的地址总线为32位,决定了物理存储器地址空间为232 B(4 GB)。一个程序要占用的虚拟存储器空间大于CPU可以直接访问的物理存储器空间,这就出现了矛盾,解决矛盾的方法是将虚拟存储器空间扩展到磁盘上,也就是说,虚拟存储器空间是由磁盘等外部存储器支持实现的。3)线性地址段的基地址与偏移地址之和称为线性地址。由于段基地址和偏移地址都是32位,所以线性地址也是32位。在分页机制被禁止的情况下,线性地址就是物理地址,如图9.2所示。而在分页机制被使用时,分页机制将把线性地址转换
14、成物理地址,如图9.3所示。第9章 高档微机中虚拟存储、多任务和保护原理 图9.3 分页机制转换线性地址为物理地址 第9章 高档微机中虚拟存储、多任务和保护原理 这种存储器管理或存储器分配一般是由操作系统进行的,但CPU内部结构必须支持存储器管理功能。80486 CPU内的分段存储管理机制和分页管理机制为操作系统的虚拟存储器管理提供了必要的硬件支持。9.2.2 9.2.2 实现虚拟存储的控制方式实现虚拟存储的控制方式虚拟存储器的操作必然有内存与硬盘之间频繁的信息交换。根据内存与硬盘之间交换信息的管理控制方式的不同,虚拟存储器的控制可分为分段控制、分页控制和段页控制三种方式。第9章 高档微机中虚
15、拟存储、多任务和保护原理 1.1.分段控制方式分段控制方式前面的讨论已经为理解虚拟存储器的分段控制方式打下基础。因为对于编程而言,任何信息(包括程序本身)都是分段存储的。这些段包括熟悉的代码段、数据段、堆栈段,还包括描述符段等系统段。分段控制方式的基本思想是把段作为基本信息单位在主存和硬盘之间传送。在信息分段存储下,还有两位状态信息,即P位和A位的状态信息起着重要控制作用,它们都在图2.12给出的段描述符的12位“属性”字段中,其中的访问权字节见图9.7(c)。第9章 高档微机中虚拟存储、多任务和保护原理 P位,指明该段当前是否在内存中。P位为1,表示该段在内存中;P位为0,表示该段不在内存,
16、而在硬盘中。如果要访问P位为 0 的段,必须转入操作系统中负责把该段从磁盘装入内存的程序。A位,代码段或数据段属性字段的A位是这样操作的:每当该段被程序访问时,将A位置1,操作系统按一定周期查看、记录A位的状态并使A位复位为 0。借助对A位的操作,可以统计出近期一段时间内该段被访问的频繁程度,以决定是否把该段移送硬盘。在虚拟存储器系统中,随着程序的运行,把存于磁盘上的段装入内存是常有的操作,自然也有从内存中删除某些段的操作。第9章 高档微机中虚拟存储、多任务和保护原理 分段管理的优点是段的分界和程序的自然分界相对应;段的逻辑独立性使它易于编译、管理、修改和保护,也便于多任务共享。分段管理的缺点
17、来自于段长度不固定、不相同。段的起点和终点不定,对内存空间分配带来不便,每次对内存清除腾空的段长度必须大于将要从磁盘装入的段,在内存与磁盘多次交换段之后,内存中将出现许多空余的零碎存储空间无法利用而浪费。2.2.分页控制方式分页控制方式80486 CPU中,对于存储器管理除分段控制机制外,还有分页控制机制。在前面介绍的控制寄存器CR0 中的PG位就是分页机制控制位,该位设置为1,意味着分页机制被使用;该位设置为0,表示分页机制不使用。第9章 高档微机中虚拟存储、多任务和保护原理 分页管理将克服简单分段控制的缺点,把虚拟存储空间和内存物理空间都划分成长度为 4 KB的页;页的起点地址和终点地址都
18、是固定的;无论是程序还是数据,在内存中存储和在内存与磁盘之间交换时都是以4 KB的页为单位进行的。这就是说,一个程序或一个段都可以划分为多个页,在划分为多个页时,这些页在内存中不一定是地址相邻的。在从磁盘向内存调入一页时,只要内存有空闲页就可容纳。唯一可能造成浪费的存储空间是程序最后一页所留下的剩余空间。由于一页的字节数只有4 KB,所以剩余空间必然小于 4 KB。图9.4是分页控制时存储器的寻址过程。第9章 高档微机中虚拟存储、多任务和保护原理 图9.4 分页控制时的存储器寻址过程第9章 高档微机中虚拟存储、多任务和保护原理 图中的“CPU分页机制”概括为以下几点:(1)把内存的物理空间划分
19、为每 4 KB为 1 页,页与页互不重叠,页的开始地址必须是地址码低12位全为0,页的最高地址必然是地址码的低12位全为1。(2)和分段管理方式中引入段描述符和为存储描述符而定义描述符表段的思想类似,分页控制方式引入描述页属性的“项”,定义存储项的“项表”页和存储项表页的“目录”页。它们之间是层次关系。项包含32位(4 B)描述页的物理地址和属性信息,其中20位是物理地址的高20位(页起始地址的低12位为0),其余12位为属性信息。这类似于分段控制中的段描述符。第9章 高档微机中虚拟存储、多任务和保护原理 项表是不超过1024项的集合,其占据的4 KB内存空间就是页表页。这类似于分段控制中的描
20、述符表段。描述页表页也需要项,而且描述页表页的项也需要组成表,占据页。这个表称为目录,在内存中存于目录页。现在可以看出项的层次关系和伴随的页的不同作用。虽然项都是4字节的描述页的信息,但页表中的项和目录中的项,在存储器编址和寻址过程中的作用是不同的。(3)前面介绍过的CPU内的系统级控制寄存器CR3 是目录的物理基地址寄存器,它寄存着目录的物理起始地址。CR3 用其32位中的高20位给出目录页的起始地址(低12位全0)。第9章 高档微机中虚拟存储、多任务和保护原理 从以上所述可以看出,对任何一个存储单元的编址包含三部分信息:这个单元在页内的地址、对应的页表项在页表中的地址以及对应的目录项在目录
21、中的地址。在使用分页功能时,CPU分段机制形成的32位线性地址分解成三个字段:位 11位0,共12位,指明页内的偏移地址;位21位12,共10位,作为页表项在页表内的索引号,这个索引号乘以4,就是页表项在页表页内的偏移地址;位31位22,共10位,作为目录项在目录中的索引号,这个索引号乘以4,就是目录项在目录内的偏移地址;目录的起始地址在CR3 中。第9章 高档微机中虚拟存储、多任务和保护原理 分页的机制介绍之后,下面介绍内存与硬盘交换信息的控制方法。都是4字节的目录项和页表项的格式是相同的,但它们描述的对象是不同的:目录项描述的是一个页表,而页表项描述的是一页。除了位31位12(共 20 位
22、)给出了页表或页的起始地址的高20位外,位11位0 给出了属性信息:P(Present)位表示该项是否正确可用。P位为1,表示该目录项或该页表项正确,可在线性地址到物理地址变换中使用;P位为0,表示该项不可用,此时,其它位已无意义。第9章 高档微机中虚拟存储、多任务和保护原理 A(Access)位的意义和前面讨论描述符内的A位意义相同:程序对该目录项或页表项描述的地址区域进行访问时,CPU的固件将A位置 1,由软件(操作系统)周期性地将A位复位为0,这样,对A位为1状态的统计可以知道该页的活动情况。D(Dirty)位在目录项中无意义,在页表项中,当程序向对应页写入数据时,使D位置1。和A位一样
23、,D位只能由操作系统复位为 0,所以D位用于描述对应页被写入的情况。U/S(User/Suppervisor)位和R/W(Read/Write)位用于支持页保护功能。标有AVL(位11位9)留给操作系统定义和使用。第9章 高档微机中虚拟存储、多任务和保护原理 分页控制方式的缺点:由于页不是编程使用的独立的存储空间单位,所以对于页的处理、保护和共享都不及分段控制方式来得方便。3.3.段页控制方式段页控制方式段页控制方式就是将分段控制方式和分页控制方式结合起来,先对程序按模块分段,然后段内再分页,内存与硬盘之间仍以页为基本信息传送单位,而在编址寻址时,用段表和页表(每段一个页表)进行两级定位管理。
24、对这种控制方式这里不再深入讨论。第9章 高档微机中虚拟存储、多任务和保护原理 9.3 9.3 多任务的实现原理多任务的实现原理高档微处理器最主要的特点是支持多任务操作系统,例如Windows。本节介绍高档微处理器支持多任务操作的机制。不严格地说,多任务就是微机系统同时运行多道程序,每道程序又可以处于不同阶段。对于存储器来说,可能多道程序的全部或部分处于内存中。例如在Windows下,可以打开IE、Word、Power Point等多个程序窗口,有的在前台运行,有的在后台运行。第1章图1.3给出的多道程序分时操作已经表明多道程序在时间上是如何互相分时而协调的。多任务是由操作系统和支持硬件共同实现
25、的。支持硬件主要是9.1节讲的系统级控制寄存器和地址寄存器,还需要补充和说明。第9章 高档微机中虚拟存储、多任务和保护原理 9.3.1 9.3.1 任务状态段任务状态段TSSTSS和门和门(Gate)(Gate)描述符描述符任务状态段TSS在操作系统术语中常称为进程控制块,在这里是在内存中定义的存储格式确定的段,每个任务一个。任务状态段本身不包含任务的程序,只用于记录任务的有关信息。由于任务在系统运行过程中的状态是不断变化的,所以必须把这些信息记录下来,以便操作系统对任务进行调度。系统在建立任务的同时定义该任务的任务状态段,在撤消任务时也就撤消了它的任务状态段;在任务切换过程中,必须既要访问原
26、任务的任务状态段,向其中保存当前CPU寄存器值,以备以后返回,又要访问新任务的任务状态段,从其中读取相关状态信息并装入CPU的寄存器,第9章 高档微机中虚拟存储、多任务和保护原理 使新任务开始运行。当前任务的任务状态段描述符寄存在CPU的TR寄存器中。为了说明方便,称转换前的任务为旧任务,转换后的任务为新任务,它们的TSS分别用TSSO和TSSN表示。TSS段的结构格式如图9.5所示。第9章 高档微机中虚拟存储、多任务和保护原理 图9.5 TSS的结构格式第9章 高档微机中虚拟存储、多任务和保护原理 TSS所包含的信息如下:(1)字节0、1共16位称做反向链(Back Link)。如果该任务状
27、态段为TSSN,那么反向链保存TSSO描述符的选择符,是在任务转换时自动装入的。从该任务返回旧任务时,需要这个选择符返回原来任务,很像子程序调用时压入堆栈的的返回地址。(2)字节41BH存储三个特权级堆栈的SS和ESP修改值。关于特权级和特权保护的概念将在下节讨论,这里只需知道在控制转移过程中,可用这些值修改SS和ESP寄存器的值。第9章 高档微机中虚拟存储、多任务和保护原理(3)字节1CH5FH 标有CR3GS,存储CPU各寄存器的初值。这就是说,在任务转换时,要把TSSN的这些值装入CPU寄存器,其中包括CS和EIP,使程序运行从新的起点开始。(4)字节 60H和61H存储本任务的LDT表
28、段描述符的选择符。在任务转换时,用TSSN的这个值修改LDTR,包括把LDT表段的描述符自动装入LDTR的高速缓冲器部分,表明它是当前任务的TSS。(5)字节64H的位0标以T,与调试支持功能有关,这里不再介绍。第9章 高档微机中虚拟存储、多任务和保护原理(6)I/O地址位屏蔽偏移量和I/O地址位屏蔽共同支持输入输出的保护功能。其基本原理是,在执行任务时,可以屏蔽某些I/O端口地址,当有I/O指令访问被屏蔽的I/O端口时,将产生异常中断,从而达到保护的目的。对于TSS中的信息,简单地说,初始任务的TSS是用程序定义置入的。在任务切换时,切换前的CPU状态信息,除了把TR中的选择符字段作为反向链
29、存入TSSN之外,其它状态信息存入TSSO,以便任务返回切换时使用。任务切换时,TSSN中的信息大部分要分别置入CPU的有关寄存器,作为新任务运行的初始状态。第9章 高档微机中虚拟存储、多任务和保护原理 由于TSS段的特殊作用,TSS段的描述符只能定义在全局描述符表GDT中。在任务切换过程中,从GDT中读取或写入TSS段的描述符。前面9.1节讲的中段描述符表段IDT,保存的是门(Gate)描述符。一般意义上的“门”,是“过渡”机制。门描述符,简称门,用于程序的转移,包括任务之内的间接段间转移、任务之间切换和转入中断服务子程序。根据功能不同,门有4种:调用门,用于任务之内段间间接转移;任务门,用
30、于任务之间切换;中断门和陷阱门,用于调用中断服务程序和陷阱处理程序。第9章 高档微机中虚拟存储、多任务和保护原理 门的用途不同和程序中用于转移的指令不同,决定了它们可以包含在哪种描述符表段中:调用门的描述符可以在GDT和LDT中;任务门的描述符可以在GDT、LDT和IDT中;而中断门和陷阱门的描述符只能在IDT中。表9.1综合了各种描述符表段可以定义的描述符类型。第9章 高档微机中虚拟存储、多任务和保护原理 表表9.1 各种描述符表段内可以定义的描述符类型各种描述符表段内可以定义的描述符类型第9章 高档微机中虚拟存储、多任务和保护原理 门描述符的格式符合功能要求。门描述符与段描述符的主要区别是
31、,在8个字节的描述符格式中,段描述符有32位段的基地址和20位的段界限值;而门描述符中有16位的选择符指向其它描述符,不需要指明段的界限。调用门、中断门和陷阱门的描述符还有32位地址偏移量,指明代码段段内偏移地址;而任务门用于间接的任务转换。任务门不同于调用门的是,其中的选择符指向TSS描述符,而不是指向代码段的描述符。由于TSS描述符的选择符将引出一个TSS描述符,进而指向一个TSS段,所以在调用门中4个字节的偏移值对于任务门是无意义的。第9章 高档微机中虚拟存储、多任务和保护原理 9.3.2 9.3.2 任务的设置、启动和任务之间的切换任务的设置、启动和任务之间的切换1.1.任务的设置和启
32、动任务的设置和启动CPU在加电或复位(Reset)之后立即进入实模式开始运行程序。如要进入保护模式执行任务或进行任务转换,必须做三件事:在实模式下的初始化和转入保护模式的准备;从实模式转入保护模式;执行任务和任务之间的切换。三件事中之,即从实模式转入保护模式最为简单,只要将图9.1中的控制寄存器CR0 的PE位(位0)置 1 即可,用下面两条指令实现:MOV EAX,1MOV CR0,EAX第9章 高档微机中虚拟存储、多任务和保护原理 三件事中之,即进入保护模式后如何开始执行任务有两种方法:控制转移法和任务转换法。这两种方法都用JMP指令,此时的JMP指令格式为:JMP(选择符:偏移量)控制转
33、移法用的JMP指令,其格式中的段选择符指向GDT的第一个代码段描述符,所以JMP指令执行后,将第一个代码段描述符选择符装入CS,对应的段描述符装入CS对应的描述符高速缓冲寄存器。其中的段基地址成为当前段的段地址。可见,控制转移法是用一条JMP指令进行段间间接控制转移。第9章 高档微机中虚拟存储、多任务和保护原理 任务转换法也是用一条JMP指令,但利用的是JMP的直接任务转换操作。也就是说,JMP格式中的选择符指向GDT的一个TSS描述符,进而指向一个已被定义的TSS段,TSS段中给出的初值自动装入CPU各寄存器,开始执行第一个任务。三件事之,即在实模式下的初始化和转入保护模式要完成的准备操作与
34、如何开始执行任务的方法有关,任务转换法与控制转移法稍有不同。下面是在实模式下程序应完成的准备操作:第9章 高档微机中虚拟存储、多任务和保护原理(1)在存储器中定义一个GDT段,其中包括建立必要的各种描述符。在利用控制转移法转入任务执行时,GDT中至少应包含一个空描述符、一个代码段描述符和一个数据段描述符,如图9.6所示。GDT段的定义在其中建立描述符的编程过程(此时还在实模式下)是,首先用定义结构伪指令定义描述符结构,然后在数据段中定义GDT,其中设置结构变量以建立描述符。第9章 高档微机中虚拟存储、多任务和保护原理 图9.6 最简单保护模式下的GDT第9章 高档微机中虚拟存储、多任务和保护原
35、理 定义结构的例子如下:Desc STRUC ;结构开始Limit DW?;段界限低16位base_l DW?;段基址低16位base_m DB?;段基址1623位access DB?;访问权字节gran DB?;段界限高4位和部分属性base_h DB?;段基址2431位Desc ends ;结构结束第9章 高档微机中虚拟存储、多任务和保护原理 在数据段定义GDT的例子如下:gdt_def EQU$desc gdt_kcs desc ;9ah=exec/read,DPL=0gdt_kds desc ;92h=p,DPL=0,type=2gdt_size EQU$-gdt_def第9章 高档微
36、机中虚拟存储、多任务和保护原理 本例中定义了一个GDT表。在汇编语言中$称为地址计数器(Location Counter),它是一个特殊的操作数,在汇编过程中代表当前地址,即在哪里出现就代表哪里的地址。gdt_def是GDT的开始地址,GDT的字节数为gdt_size。本例中建立了三个描述符:一个空描述符;一个代码段描述符,首地址为gdt_kcs;一个数据段描述符,首地址为gdt_kds。用这样的方法,在GDT中可以建立更多的描述符。这里用“建立”这个词,是因为只为描述符定义了“框架”,其中只对访问权字节赋予了初值。其它字段,如基地址、界限值等还没有置入真实值。第9章 高档微机中虚拟存储、多任
37、务和保护原理 如果用控制转移法转去执行任务,如上述定义两个描述符是最低的要求。它能控制转移到这个代码段描述符指向的代码段。在这个代码段内再定义其它描述符、LDT、TSS等。这里的数据段同时也用作堆栈段。如果用任务转换法开始执行任务,那么在GDT中至少还要定义两个TSS描述符,一个指向TSSO,另一个指向TSSN。因为在执行任务转换的JMP或CALL指令时,要向TSSO中存入当前CPU的状态值,还要从TSSN中取值装入CPU各寄存器,这样才能开始任务的执行(关于任务转换的操作将在后面说明)。第9章 高档微机中虚拟存储、多任务和保护原理(2)在实模式时,要对GDT中建立的必要的描述符置入初值。先要
38、计算出应赋的初值,如基地址、界限值等,然后用传送指令把初值装入描述符的相应字段。(3)用LGDT指令把GDT的基地址和界限值装入GDTR寄存器(32位基址和16位界限值),使GDT成为可使用状态。(4)用(1)和(2)所述相似的方法,在存储器中定义IDT并根据需要在IDT建立中断门、陷阱门和任务门。(5)用LIDT指令把IDT的基地址和界限值装入IDTR,使IDT成为可使用状态。第9章 高档微机中虚拟存储、多任务和保护原理 在实模式下完成上述准备后,如前所述用传送指令使CR0 寄存器的PE位置1,CPU进入保护模式。进入保护模式后,凡是访问存储器都要遵循新的寻址规则。首先必须修改CS的内容,C
39、S的修改值就是第一个要执行的代码段的选择符。随着CS中装入这个选择符,代码段的描述符自动装入属于CS的高速段描述符缓冲器,使段的基地址起作用。为了实现这样的操作,一种选择是在进入保护模式后的第1条指令(紧随使CR0的PE位置1指令)为段间转移指令:JMP偏移量,选择符第9章 高档微机中虚拟存储、多任务和保护原理 在实际编程时,这条指令的指令码常用下列 3 条伪指令表示:DB 0eah ;段间转移JMP指令码第一字节(操作代码)DW offset labelen;lablein为入口地址标号DW gdt_kcs_sel ;gdt_kcs_sel是在GDT中第1个代码段描述符的选择符值3条伪指令的
40、第1条是段间转移JMP的指令操作码字节,第2条是转移目的地址的段内偏移量(16位),第3条给出的是选择符,应该事先用equ伪指令使gdt_kcs_sel赋予正确值,如:第9章 高档微机中虚拟存储、多任务和保护原理 gdt_kcs_sel EQU 08它是GDT表内描述符1的选择符。这3条伪指令组成JMP指令执行后,gdt_kcs_sel选择符装入CS,对应的描述符装入属于CS的高速缓冲寄存器,目的地址的段内偏移量装入IP(16 位),程序从这个入口继续执行下去。第9章 高档微机中虚拟存储、多任务和保护原理 在程序的第1个代码段中,把第1个数据段描述符选择符装入所有数据段寄存器,或者用不同的选择
41、符修改各数据段寄存器。此外,在第1代码段中还必须定义若干个TSS描述符和LDT描述符,把它们置入GDT中;把某个LDT描述符选择符用LLDT指令装入LDTR的选择符字段,使其对应的LDT描述符自动装入LDTR的高速缓冲器,对应的LDT成为进入使用状态;同样,用LTR指令把某个TSS描述符的选择符装入TR的选择符字段,对应的TSS描述符自动装入TR的高速缓冲器,使对应的TSS成为当前任务的TSS。值得说明的是,指令LLDT和LTR是高档微处理器才有的,只能在保护模式下执行,如果试图在实模式时执行这两条指令,将产生异常中断。第9章 高档微机中虚拟存储、多任务和保护原理 以上是在进入保护模式后用段间
42、转移JMP指令向CS赋初值,然后向其它段寄存器、LDTR、TR赋初值的操作。另一种选择是进入保护模式后,用JMP或CALL指令进行任务转换操作方法,转去执行任务。为了实现这一方法,一方面,需要在实模式作准备时在GDT中定义两个TSS描述符,一个为TSSO,另一个为TSSN,对TSSN要赋初值,因为在任务转换时,将把TSSN的值装入CPU各寄存器,然后执行任务;另一方面,在进入保护模式后还要先用LTR指令把TSSO的选择符装入TR的选择器段,使TSSO的描述符自动装入TR的高速缓冲器,这是因为在任务转换时TSSO将保存当前的CPU寄存器。这些准备完成后,用一条JMP或CALL指令,指向GDT中的
43、TSSN描述符,就可开始执行TSSN的任务。第9章 高档微机中虚拟存储、多任务和保护原理 2.2.用用JMPJMP、CALLCALL指令实现任务转换指令实现任务转换前面曾经讲过,在系统工作于多任务时,每个任务有自己的TSS和LDT。正在执行任务的LDT描述符及其选择符在LDTR中寄存,它的TSS描述符及其选择符在TR中寄存。从一个正在执行的旧任务转换为执行一个新任务,意味着TR和LDTR需要更新。如果JMP或CALL指令后的选择符指向GDT中的描述符,经过硬件逻辑判别,其类型(描述符的属性字段有“类型”指示位)为TSS描述符,那么就意味着将进行直接任务转换,CPU的固件将控制完成以下操作:第9
44、章 高档微机中虚拟存储、多任务和保护原理(1)按指令格式中选择符的指引,从GDT中取出TSSN的描述符,装入TR的描述符高速缓冲器,使其指向TSSN。(2)从TSSN中取出新的LDT描述符的选择符,装入LDTR的选择符段,并随之自动地把对应的LDT描述符从GDT中取出装入LDTR的描述符高速缓冲器。(3)把当前CPU各寄存器的值存入TSSO中,以备返回时使用。(4)把TSSN中的各值装入CPU对应的各寄存器,完成新任务的初始化。第9章 高档微机中虚拟存储、多任务和保护原理(5)把当前TR的选择符装入TSSN的反向链字中。如果要从新任务返回旧任务,只需从反向链中取出旧任务TSSO描述符的选择符,
45、重新装入TR即可。(6)用JMP或CALL指令后的选择符修改TR的选择符段。至此,程序将从新起点(TSSN提供代码段描述符和EIP)开始执行。上述 6 项操作是一条JMP或CALL指令完成的操作。前面已经说过,之所以不同于一般的段间转移操作,是因为指令后给出的选择符的类型是TSS描述符的选择符。第9章 高档微机中虚拟存储、多任务和保护原理 以上所述是直接任务转换操作。如果JMP或CALL指令后的选择符指向的不是TSSN描述符,而是任务门(在GDT或当前的LDT中),那将引起间接任务转换。间接任务转换比直接任务转换只多了一项操作,那就是先要通过任务门选择符找到GDT或当前LDT中的任务门,从任务
46、门中取出TSS描述符的选择符,这以后的操作就和直接任务转换相同了。第9章 高档微机中虚拟存储、多任务和保护原理 除了JMP、CALL指令可以进行任务转换外,IRET和IRETD指令也可以进行任务转换。这两条指令实现的是从正在执行的“新”任务到“新”任务之前的“旧”任务转换。IRET本来是中断返回指令,只有在Flags寄存器中的NT位为 1 时,才能实现“新”到“旧”的任务转换功能。用IRET或IRETD指令返回“旧”任务时的操作是,把当前TSS中反向链字保存的选择符装入TR的选择符段,然后自动地把“旧”的TSS描述符装入TR的描述符缓冲器,TSS中的各值装入CPU各寄存器,将使由于JMP或CA
47、LL指令转换被中断了的任务重新继续运行。第9章 高档微机中虚拟存储、多任务和保护原理 9.4 9.4 保护功能的实现原理保护功能的实现原理CPU在保护模式下最重要的特征之一是具有保护功能。为什么需要保护功能呢?在8086/8088系统运行DOS 2.0 的时候没有保护功能。对于汇编语言的程序,由于程序设计出现简单错误,在运行时破坏了常驻内存的DOS部分而造成死机,这是常有的事。之所以出现这种情况就是因为没有保护功能,指令访问内存时超越了可以访问的范围。这对于单任务系统来说造成的危害不是很大,但是对于多任务系统,在内存中同时可能有多个任务的程序,如果没有保护功能,任务程序中的一条错误指令可能造成
48、整个系统的破坏,后果是不堪设想的。第9章 高档微机中虚拟存储、多任务和保护原理 保护功能的讨论涉及的问题有:保护的任务是什么,或者说有哪些方面应该受到保护;保护的规则是什么,也就是说,保护意味着不允许出现“不合理”的操作,那么“合理”操作与“不合理”操作是如何定义的;CPU内实现保护功能的机制是什么。在本节讨论之后,应该能理解这些问题。但是,这是一个较难讨论的问题,因为保护的任务、保护的规则和保护的机制三个方面是互相交织的,不能分别讨论。因此,讨论可以从以下不同的思路进行:第9章 高档微机中虚拟存储、多任务和保护原理(1)按异常中断类型讨论保护。所谓保护,就是当出现了不合理的指令或操作要求时,
49、CPU将拒绝执行,并进入某种异常中断。不同的异常中断有不同的处理程序。有的异常中断处理程序将通知用户出现了哪种不合理的指令或操作,以便修改。例如执行除法指令时,如果除数为0,则将引起中断类型号为0的异常中断,这可看做是一种保护功能。80486 CPU的多种异常中断是为实现保护功能而设置的。所以一种讨论路线是逐个讨论异常中断类型。第9章 高档微机中虚拟存储、多任务和保护原理(2)按访问存储器过程不同讨论保护。保护出现在操作过程中,例如用JMP指令实现间接任务转换要经过一系列操作,几乎每个操作过程都要判断是否合理,都有保护规则。所以另一种讨论路线是按不同的访问存储器的过程讨论保护的功能。(3)描述
50、符的字段格式、选择符的格式、描述符表以及相应的系统级寄存器、控制寄存器字段中,都包含着保护的信息。按照这些保护信息,更容易讨论保护的任务、规则和实现机制。所以下面将主要沿着这种思路进行讨论。第9章 高档微机中虚拟存储、多任务和保护原理 9.4.1 9.4.1 特权级保护特权级保护在前面的讨论中,段选择符、描述符以及系统级寄存器中都包含特权级信息。如图9.7所示,段描述符的选择符,在其未装入段寄存器之前,称为选择符修正值,其最低两位称为请求特权级RPL(Request Privilege Level);在 16 位的CS中的选择符最低2位称为当前特权级CPL(Current Privilege
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。