第2章微处理器内部结构2.3微处理器存储器组织第2章微处理器内部结构2.3微处理器存储器组织2.3.1IA-32工作方式2.3.2实方式的逻辑段2.3.3保护方式的段页管理2.3.1IA-32工作方式3种工作方式实地址方式Realaddressmode保护方式Protectedvirtualaddressmode虚拟8086方式Virtual8086mode实地址方式CPU在刚加电或复位时,进入实地址方式主要作用初始化80386,相当于快速8086CPU特点物理地址空间1MB逻辑到物理地址的转换与8086CPU相同操作数默认长度16位允许访问32位寄存器组16位段值0000193016位偏移值153020位物理地址190段:偏移量1BA4:204E+1DA8EH204EHBA40H116位段CPU的地址转换程序存储器逻辑地址物理地址存储器管理部件(MemoryManagementUnit,MMU)将由处理器发出的逻辑地址转换为存储器的物理地址。逻辑地址段值(CS,DS,ES,SS)偏移量16位(由程序给出)物理地址偏移4位实方式地址保护方式本性方式(最常用)开机或复位→实地址方式完成初始化→保护方式特点段基地址和段内偏移量都是32位可寻址4GB物理存储器采用虚拟技术,支持虚拟存储器采用分段与分页机制,实现虚拟存储器管理采用保护措施,实现存储器内容的保护与隔离支持虚拟机,支持多任务32位段虚拟8086方式与实地址方式的比较相同点为与8086/8088/80186/80188兼容而设置的16位操作方式逻辑段段首址段基址(段寄存器的内容)乘以10H段的最大尺寸均为64KB最大寻址空间均为1MB不同点实地址方式整个CPU的工作方式,即8086的工作方式IA-32CPU相当于一个快速的8086CPU只能运行8086程序的任务虚拟8086方式一种模拟(仿真)8086的方式在虚拟存储器、保护和多任务操作等环境下支持一个任务的工作方式在1MB存储空间下使用“16位段”三种工作方式的切换工作方式受寄存器位控制CR0(控制寄存器)的第0位:PEEFLAGS(标志寄存器)的第17位:VM切换方法实模式→保护模式PE=1保护模式→实模式PE=0(只能重新启动CPU来实现)虚拟8086模式VM=1保护方式存储器管理1.保护方式的特点2.虚拟存储器3.保护机制4.虚拟存储器管理1.保护方式特点可寻址4GB物理存储器地址线:32根;232B段基地址和段内偏移量都是32位采用分段与分页机制,实现虚拟存储器管理采用保护措施,实现存储器内容的保护与隔离支持虚拟机,支持多任务物理存储器:存储器芯片组成的存储器实体最大容量取决于地址线位数2.虚拟存储器非实际存在的存储器作用可写出比实际物理存储器大得多的程序从而支持多任务实现方法由存储器管理器(MMU)及一个大容量硬盘(HD)支持程序运行时只将需要访问的空间存放在内存中,而其它空间存放在外存中譬如……3.保护机制作用防止操作系统和用户程序遭到有意和无意的破坏未经授权的或不正确的访问存储器(包括I/O端口)资源特权级保护各段有特权级别,低级别程序不能访问、修改高级别的程序与数据分为:同一任务内的保护和不同任务间的保护条件保护(可靠性保护措施)违规操作引起:异常核级别0(最高特权)系统服务级别1扩展操作系统延伸级别2应用程序(用户级别)级别3(最低级别)4.虚拟存储器管理特点主存划分为:长度不固定的段分段管理方法不分页分页逻辑地址段寄存器(16位):段内偏移量(32位)物理地址逻辑地址不分页分页物理地址逻辑地址不分页段基址(32位)+线性地址(物理地址)?逻辑地址段寄存器(16位)段内偏移量(32位):4.1确定物理地址——不分页段长度?逻辑段的基本信息段基址(BaseAddress)段的开始地址,32位段界限(SegmentLimit)又称段限量、段限长段的大小,20位访问权限段属性(Attributes)段的保护属性,12位段访问合法性的规定等段描述符描述符表4.1.1段描述符长度8个字节基地址(24~31)GD0段限长(16~19)PDPL类型基地址(16~23)基地址(0~15)段限长(0~15)15141312111098765432106420DTAVLGD0段限长段限长(0-15)(16~19)PDPL类型基地址(16-23)基地址(24-31)基地址(0-15)15141312111098765432106420DTAVL32位段基地址决定段可在4GB线性地址空间中的任何字节处起始段属性(1)G段限长粒度位段长度单位0,字节粒状段限长以字节为单位段限长=(1~220)×1B=1B~1MB1,页粒状段限长以页(1页为4KB)为单位段限长=(1~220)×4KB=4KB~4GB例:段限长为00000H,则:有效地址偏移量=0~4K×(段限量+1)-1=0~0FFFH(4095)GD0AVL对段基地址无效,段基地址总以字节为单位(2)D段数据宽度指示位指明操数长度(不用于地址生成)0操作数和有效地址的缺省值:16位代码段:16位代码段1操作数和有效地址的缺省值:32位代码段:32位代码段GD0AVL软件可利用位(3)P(Present)段存在位描述符所描述的段是否在内存(主存)中1,在0,不在此时访问该段,会产生段异常若访问该段,需从磁盘上调入内存作用可使操作系统实现虚拟存储器PDPLDT(4)DPL描述符特权级指出段的保护级(不用于产生地址)从高到低分为:0~3(即00B~11B)级作用防止一般用户程序任意访问操作系统的对应段PDPLDT核级别0(最高特权)系统服务级别1扩展操作系统延伸级别2应用程序(用户级别)级别3(最低级别)(5)DT描述符类型指示位1为存储段描述符包括:代码段描述符和数据段描述符0为一个特殊的描述符,或称系统段描述符或门描述符PDPLDT(6)ST段可执行指示符(DT=1)区分代码段和数据段类型ST段类型代码段(ST=1)1CRA是否被访问过(1=yes)可读(1=yes)一致性(1=yes)数据段(ST=0)0EWA是否被访问过(1=yes)可写(1=yes)向下扩展(1=yes)(对于正常数据段E=0)4.1.2门描述符用于:程序转移的保护包括偏移量:给出转移到的目标程序的段内偏移量选择器:给出转移到的目标程序的段选择器访问权字节:说明该段的访问权限字计数:堆栈复制的字数描述符的分类堆栈(通常向下扩展)非堆栈(通常向上扩展)数据代码一般的段描述符特殊的段描述符TSSLDT段描述符任务门调用门中断门陷阱门门描述符描述符4.1.3描述符表描述符编成的表局部描述符表LDT(Localdescriptortable)每个任务1张全局描述符表GDT(Globaldescriptortable)1张中断描述符表IDT(Interruptdescriptortable)1张每个描述符表最长:216B=64KB最多包含()个描述符64K/8=8192LDTAGDTLDTBCODEADATAACODEBDATABCODEKDATAKCODEOSDATAOS任务A任务BGDT、LDT的比较(1)全局描述符表GDT每一个任务都可以访问包括代码段和数据段的描述符,各任务的LDT段的描述符、TSS的描述符、调用门及任务门等全局描述符表寄存器基地址限量80286-24位80386/80486-32位16位(GDTR)216/8=213每个描述符的长度表中描述符总个数最大值GDT的定位例:若GDTR中的限长(限量)为0FFFH,基址为00100000H,则:GDT在存储器中的起始地址为:?GDT按字节算大小为:?GDT在存储器中的结束地址为:?00100000H0FFFH+1H=1000H00100000H+0FFFH=00100FFFH物理存储器∶819281918190:321空描述符:FFFFFFFFH00000000HGDT基址限长0151647GDTR(2)选择器——段寄存器段寄存器段选择器,16位作用从描述符表中选择(检索)段描述符段描述符中给出了段基地址(32位)段基地址+偏移量=线性地址段寄存器格式TIRPLDI描述符表中的索引请求者特权级00b=最高特权11b=最低特权表指示器0=全局描述符表(GDT)1=局部描述符表(LDT)153210虚拟空间=214(个段)×232(最大偏移量)=246=64TB13位,可检索213(8192)个描述符(对应213个段)RPL(RequestorPrivilegeLevel)用于特权检查,实现特权级保护。每当程序试图访问一个段时,就要把当前程序的特权级与要访问段(目标段)的特权级进行比较,以确定是否允许程序对该段进行访问。段选择子的功能(最多为213项)(最多为213项)每项为8个字节长的段描述符第一项不用(空描述符)虚拟地址空间示意图全局段0全局段8192局部段0局部段8192虚拟地址空间64TB局部地址空间32TB全局地址空间32TB段选择符的TI=1段选择符的TI=0每个任务对应一个局部空间仅有一个全局地址空间例:保护模式下对存储器访问时的分段管理假设:程序的CPL=0,程序段的指令如下MOVAX,10HMOVGS,AXMOVEBP,2000HMOVAX,GS:[EBP]要求:试分析分段管理方式下,程序段执行过程中,每条指令所完成的相应操作。物理存储器∶00000000000000003000FFFF000098000000FF00000092014500EF0000009201:::目标单元:GDT0号GDTR320存储段GDT基址1号2号3号GS=10H=00010000BDITIRPL段选择子64位段描述符缓冲寄存器000092010000FF00HGD0段限量段限量(0-15)(16~19)段限量段限量(0-15)(16~19)PDPL类型基地址(16-23)基地址(24-31)基地址(0-15)基地址(16-23)基地址(24-31)基地址(0-15)基地址(24-31)基地址(0-15)1514131211109876543210642015141312111098765432106420DTAVL00010000HMOVEBP,2000HMOVAX,GS:[EBP]2000H+12000H段基址偏移量线性地址(3)局部描述符表LDT包含代码段、数据段和堆栈段的描述符,以及门描述符特点一个任务私有,其他任务不能共享LDT本身也是个段(系统段)需要描述符(LDTR)来描述它每个任务的LDT不相同,随着任务切换LDTR格式局部描述符表寄存器选择器限量80286-24位80386/80486-32位16位基地址16位(LDTR)确定LDT的位置和尺寸系统初始化时设置LDT的定位物理存储器∶LDT描述符GDT基址限长0151647LDTLDTR015LDTR高速缓存例:若LDTR中的选择器为18H,并且选择的LDT描述符中的基址为00040000H,段限长为1FFH,则:LDT描述符在GDT中的编号为:?LDT在存储器中的起始地址为:?LDT的结束地址为:?LDT按字节算大小为:?0011B=03H00040000H00040000H+01FFH=000401FFH18H=00011000B|DI|TI|RPL|01FFH+1H=0200HLDT选择器段的类型存储段存放程序与数据,包括:代码段、数据段和堆栈段系统段不存放程序代码或数据包括局部描述符表(LocalDescriptorTable,LDT)段任务状态段(TaskStateSegment,TSS)门描述程序转移的入口点用于任务内特