本章主要教学内容1.80x86的几种工作模式;2.保护模式存储、保护;3.段式管理、页式管理;4.地址寄存器和系统寄存器以及任务状态段和控制 门。 本章主要教学目的及要求1.理解80x86的几种工作模式;2.掌握保护模式的段式、页式管理机制;3.理解地址寄存器和系统寄存器 以及任务状态段和控制门的相关概念。10.1 工作模式概述 10.1.1 80x86的几种工作模式工作模式实模式 注意:8086/8 088只有一种实模式,80286及以后的x86系列微处理器增加了保护模式和系统管理模式。 保护模式 系统管理模式 Intel 8 0x86系列微处理器的几种工作模式的切换 10.1.2 保护模式特点:1.可寻址更多的物理地址空间; 2.为存储器共享和保护以及实 现虚拟存储器提供了硬件支持;3.支持多任务,能够快速地进行任务切换和并保护任务环境;4.提供4个特权级,并配合以完善的特权检查机制 5.80386以上的微处理器还支持虚拟8086模式。 10.2 保护模式 10.2.1 存储组织1.虚拟存储器 虚拟存储 器技术通过存储管理机制在大容量快速硬盘中实现存储器扩充支持。在这种存储管理机制作用下,某一时刻仅将运行程序虚拟地址空间的一小部分映 射到主存储器(内存),其余部分则存储在外部存储器(硬盘)。 虚拟存储器采用段式存储管理技术,虚拟存储器被划分成若干个 段,段是指存储器中地址连续的存储块,大小由存放在该段中的程序大小确定。采用描述符来描述段的基本情况。 虚拟存储器的 地址(逻辑地址)由指示段的描述符中给出的选择子和段内偏移两部分构成,是二维地址。2.地址空间含义:全部的物理地址形成的存储空间,指 微处理器全部地址有效 时能够访问最大的存储空间。 线性空间到实际的物理存储空间之间的转换机制: (2)分段机 制:分段管理机制使用可变大小的块管理线性空间。 (1)分页机制:使用的固定大小的块管理物理存储器,将线性地址空间和物理地址空间分 别划分为大小相同的块,称为页。通过在线性地址空间的页与物理地址空间的页之间建立映射表实现对应关系,实现了线性地址到物理地址的转换。 注意:分页管理机制是可以选择的。 保护模式地址变换过程10.2.2 存储保护1.不同任务之间的保护(1)任务的保护 不同任务之间的保护是保护机制的一个重要方面。通过任务的保护实现任务与任务的隔离,实现应用程序之间保护。在两个不同任务中虚拟存 储单元地址有很多是相同的,但经过映射后得到的实际物理存储单元地址是不同的。 (2)任务的共享 将共享程序作为一个单一 的任务存储在虚拟地址空间的一个公共区域,使每一任务按此区域分配一个同样的虚拟地址空间,并进行同样的虚拟地址到物理地址映射。 2.同 一任务内的保护 在一个任务内,有四种执行特权级别,用于限制对任务中的段访问。特权级别的划分是根据包含在段中数据的重要性和代码 的可信程度确定。特权级别用数字0、1、2和3表示,每一特权级都有各自独立的堆栈段。当一个程序从一个特权级切换到另一个特权级执行时, 任务使用的堆栈段从原特权级的堆栈段切换到新特权级的堆栈段。 四种特权级层次关系图 10.3 段式管理 段由三个参数定义:①段基地址 :规定段在线性地址空间中的起始地址。②段界限规定段的大小,用20位表示,单位有两种:字节或是以4KB。③段属性规定段的主要特性。 虚拟地址空间到线性地址空间映射关系 10.3.1 段定义和地址转换10.3.2 存储段描述符1.存储段描述符:用来描述存储段。 段描述符:由段基地址、段界限、段属性三个参数组成的数据结构,每 个段描述符长度为8个字节。 2.段描述符结构类型 S_DESC STRUC Limit_Low DW 0 ;段界限低16位 Ba se_Address_Low DW 0 ;基地址低16位 Base_AAddress_Middle DB 0 ;基地址中间8位 Attrtibute DB 0 ;段属性 Limit_High DB 0 ;段界限的高4位(包括段属性的高4位) Base_Assress_High DB 0 ;基地址的高8位S_DESC ENDS10.3.3 描述符表描述符表:段描述符被组织成线性表。 80386中有三种类 型的描述符表: 全局描述符表GDT、局部描述符表LDT和中断描述符表IDT。GDT和IDT只有一份,LDT可以有若干份,每个 任务可以有一份。 每个任务的LDT含有该任务自身的代码段、数据段和堆栈段的段描述符,也包含该任务所使用的一些门描述符。 GDT含有每一个任务都可能或可以访问段的段描述符,通常包含描述操作系统所使用的代码段、数据段和堆栈段的段描述符,也包含多种特殊 数据段描述符。 10.3.4 段选择子1.段选择子格式 实模式下逻辑地址空间中存储单元的地址由段值和段内偏移两部分组成 ,保护方式下虚拟地址空间中存储单元的地址由段选择子和段内偏移两部分组成,用段选择子代替了段值。段选择子长度为16位。 2.空选择 子空选择子是特殊的段选择子 。10.3.5 段描述符高速缓冲寄存器 为了避免在每次存储器访问时,处理器重复通过段选择子获得段 描述符进而得到段的起始地址。从80286开始每个段寄存器都配有一个高速缓冲寄存器,称之为段描述符高速缓冲寄存器或描述符投影寄存器, 对程序员是透明的。段描述符高速缓冲寄存器之内容 10.4 分页管理机制 10.4.1 分页管理机制 分页管理机制将线 性地址空间和物理地址空间均划分为大小相同的块,称为页。通过在线性地址空间的页与物理地址空间的页之间建立映射,分页机制实现线性地址到 物理地址的转换。 1.分页管理 保护模式下由控制寄存器CR0中的最高位PG位控制分页管理机制是否生效。如果PG=1,分页机制 生效,将线性地址转换为物理地址。如果PG=0,分页机制无效,线性地址直接作为物理地址。必须注意,只有在保护方式下分页机制才可能生效 ,即只有PE=1的前提下,才能够使PG=1,否则将引起通用保护故障。 2.启用分页管理10.4.2 线性地址到物理地址的转换 线性地址空间页到物理地址空间页的映射用页映射表描述。80386将页映射表分为两级。 1.映射表结构 2.表项格式 3.线性地址到 物理地址的转换 首先,把线性地址的最高10位(即第22~31位)作为页目录表的索引,对应表项所包含的页码指定页表。 然 后,再把线性地址的中间10位(即第12~21位)作为所指定的页目录表中的页表项的索引,对应表项所包含的页码指定物理地址空间中的一页 。 最后,把所指定的物理页的页码作为高20位,把线性地址的低12位不加改变地作为32位物理地址的低12位。4.不存在的页表 页目录表项中的属性位P也可用于表示是否页表存储在虚拟存储器中。当发生由于所需页表无效而引起的页故障时,页故障处理程序再申请物 理页,从磁盘上把对应的页表读入,并把对应页目录表项中的P位置1。5.页的共享 常用的实现页共享的方法是线性地址空间的共 享,也就是不同任务的部分相同的线性地址空间的映射信息相同,具体表现为部分页表相同或页表内的部分表项的页码相同。10.4.3 页级保 护和虚拟存储器支持1.页级保护 分页机制只区分两种特权级。特权级0、1和2统称为系统特权级,特权级3称为用户特权级。页的读写 权限与保护 2.对虚拟存储器的支持 页表项中的P位是支持采用分页机制虚拟存储器的关键。P=1,表示表项指定的页存在于物理存储 器中,并且表项的高20位是物理页的页码;P=0,表示该线性地址空间中的页所对应的物理地址空中的页不在物理存储器中。如果程序访问不存 在的页,会引起页异常,这样操作系统可把该不存在的页从磁盘上读入,把所在物理页的页码填入对应表项并把表项中的P位置为1,然后使引起异 常的程序恢复运行。10.4.4 页异常 线性地址要经过分页机制转换才成为物理地址。在转换过程中,如果出现下列情况之一就会引起 页异常: (1)涉及的页目录表内的表项或页表内的表项中的P=0,即涉及到 页不在内存;(2)发现试图违反页保 护属性的规定而对页进行访问。 报告页异常的中断向量号是14(0EH)。页异常属于故障类异常。10.5 控制寄存器和系统地址寄 存器 10.5.1 控制寄存器 CR0包括指示处理器工作方式的控制位、启用和禁止分页管理机制的控制位、控制浮点协处理器操作的 控制位。 CR1被保留,供今后开发的处理器使用, CR2及CR3由分页管理机制使用。1.保护控制位 控制寄存器C R0中的D0标记为PE,用于控制分段管理,PE=0时处理器运行于实模式,PE=1时处理器运行于保护方式。控制寄存器CR0中的D31 用PG标记,用于控制分页管理,PG=0时禁用分页管理;PG=1时启用分页管理。 控制寄存器CR0中的D1~D4分别标记为M P(算术存在位)、EM(模拟位)、TS(任务切换位)和ET(扩展类型位),它们控制浮点协处理器的操作。 ET=1表示系统中存 在80387协处理器,否则ET=0。 EM=0时,硬件控制浮点指令传送到协处理器;EM=1时,浮点指令由软件模拟。 T S=1时,浮点指令将产生设备不可用异常。 MP=1和TS=1时,WAIT产生异常;MP=0时,WAIT指令忽略TS条件,不产 生异常。2.协处理器控制位 CR2用于发生页异常时报告出错信息。当发生页异常时,处理器把引起页异常的线性地址保存在CR2中 。 CR3用于保存页目录表的起始物理地址。3.CR2和CR3含义:一些特殊的保存段的基地址和段界限的寄存器。10.5.2系统 地址寄存器1.全局描述符表寄存器GDTR LDTR类似于段寄存器,由程序员可见的16位的寄存器和程序员不可见的高速缓冲寄存器 组成。处理器根据装入LDTR可见部分的选择子,从GDT中取出对应的描述符,并把LDT的基地址、界限和属性等信息保存到LDTR的不可 见的高速缓冲寄存器中。 LDTR寄存器包含当前任务LDT的选择子。所以,装入到LDTR的选择子必须确定一个位于GDT中的类 型为LDT的系统段描述符,也即选择子中的TI位必须是0,而且描述符中的类型字段所表示的类型必须为LDT。 2.局部描述符表寄存器L DTR TR包含指示描述当前任务的任务状态段的描述符选择子,从而规定了当前任务的状态段。 TR也由程序员可见和不可见两 部分组成。当把任务状态段的选择子装入到TR可见部分时,处理器自动把选择子所索引的描述符中的段基地址等信息保存到不可见的高速缓冲寄存 器中。4.任务状态段寄存器TR IDTR指向中断描述符表IDT。由于80386只支持256个中断/异常,所以IDT表最大长度 是2K,以字节位单位的段界限为7FFH。IDTR指示IDT的方式与GDTR指示GDT的方式相同。3.中断描述符表寄存器IDTR1. 系统段描述符的格式10.6.1 系统段描述符10.6 任务状态段和控制门 系统段描述符的属性值表 任务状态段描述符描述某个 任务状态段TSS描述符分为286TSS和386TSS两类。TSS描述符规定了任务状态段的基地址和任务状态段的大小等信息。 TSS描述符中的类型规定:TSS要么为“忙”,要么为“可用”。如果一个任务是当前正执行的任务,或者是用TSS中的链接字段沿挂起任务 链接到当前任务上的任务,那么该任务是“忙”的任务;否则该任务为“可用”任务。3.任务状态段描述符 LDT段描述符描述任务的局 部描述符表段。LDT段描述符必须安排在全局描述符表中才有效。在装载LDTR寄存器时,描述符中的LDT段基地址和段界限等信息被装入L DT段描述符高速缓冲寄存器中。2.LDT段描述符 1.门描述符的一般格式10.6.2 门描述符门描述符结构类型 G_DESC STRUC Offset_Low DW 0 ;32位偏移的低16位 Selector D W 0 ;选择子 DB_Counter DB 0 ;双字计数字段 Gate_Type DB 0 ;类型 Offset_High DW 0 ;32位偏移的高16位 G_DESC END S 调用门描述某个子程序的入口。调用门内的选择子必须实现代码段描述符,调用门内的偏移是对应代码段内的偏移。利用段间调用指令C ALL,通过调用门可实现任务内从外层特权级变换到内层特权级。2.调用门 任务门指示任务。任务门内的选择子必须指示GDT中的 任务状态段TSS描述符,门中的偏移无意义。任务的入口点保存在TSS中。利用段间转移指令JMP和段间调用指令CALL,通过任务门可实 现任务切换。 3.任务门 中断门和陷阱门描述中断/异常处理程序的人口点。中断门和陷阱门内的选择子必须指向代码段描述符,门内的 偏移就是对应代码段的人口点的偏移。中断门和陷阱门只有在中断描述符表IDT中才有效。4.中断门和陷阱门保存一个任务重要信息的特殊段 ,通过它实现任务的挂起和恢复。 任务状态段(Task State Segment)是保存一个任务重要信息的特殊段。任务状态段 描述符用于描述这样的系统段。任务状态段寄存器TR的可见部分含有当前任务的任务状态段描述符的选择子,TR的不可见的高速缓冲寄存器部分 含有当前任务状态段的段基地址和段界限等信息。 10.6.3 任务状态段任务状态段TSS的基本格式 寄存器保存区域位于TS S内偏移20H至5FH处,用于保存通用寄存器、段寄存器、指令指针和标志寄存器。当TSS对应的任务正在执行时,保存区域是未定义的;在 当前任务被切换出时,这些寄存器的当前值就保存在该区域。当下次切换回原任务时,再从保存区域恢复出这些寄存器的值,从而,使处理器恢复成 该任务换出前的状态,最终使任务能够恢复执行。1.TSS的寄存器保存区域2.TSS内层堆栈指针区域 为了有效地实现保护,同一 任务在不同的特权级下使用不同的堆栈。 TSS的内层堆栈指针区域中有三个堆栈指针,它们都是48位的全指针(16位的选择子和 32位的偏移),分别指向0级、1级和2级堆栈的栈顶,没有指向3级堆栈的指针,因为3级是最外层,所以任何一个向内层的转移都不可能转移 到3级。 从虚拟地址空间到线性地址空间的映射由GDT和LDT确定,与特定任务相关的部分由LDT确定,而LDT又由LDTR确定 。如果采用分页机制,那么由线性地址空间到物理地址空间的映射由包含页目录表起始物理地址的控制寄存器CR3确定。 3.TSS的地址映射 寄存器区域 4.TSS的链接字段 链接字段安排在TSS内偏移0开始的双字中,其高16位未用。在起链接作用时,低16位保存前一 任务的TSS描述符的选择子。5.TSS的其它字段 为了实现输入/输出保护,要使用I/O许可位图。任务使用的I/O许可位图也存放在TSS中,作为TSS的扩展部分。在TSS内偏移66H处的字用于存放I/O许可位图在TSS内的偏移。本章小结 本章介绍保护模式下存储器管理。 保护模式下利用分段管理机制和分页管理机制实现的虚拟存储技术可寻址更多的物理地址空间。 在保护方式下,每个段由三个参数定义:段基地址、段界限和段属性。保护方式下虚拟地址空间中存储单元的地址由段选择子和段内偏移两部分组成。段选择子可以确定与之唯一对应的段描述符,通过段描述符中给出的段基地址能够计算得到线性地址。 分页管理机制是存储器管理机制的一个可选的组成部分。分页管理机制将线性地址空间和物理地址空间均划分为大小相同的页,通过在线性地址空间的页与物理地址空间的页之间建立的映射,分页机制实现线性地址到物理地址的转换。 80x86的控制寄存器和系统地址寄存器用于控制工作方式,控制分段管理机制及分页管理机制的实施过程。 |
|