1、IA-32工作方式,实地址方式 与8086具有相同的基本结构 只能寻址1MB物理存储器空间 逻辑段最大不超过64KB 段基地址和偏移量都用16位表示 可以使用32位操作数和32位寻址方式 保护方式 能发挥其全部功能 段页式存储管理和特权与保护能力 可寻址4GB物理存储器 段基地址和段内偏移量都是32位 虚拟方式 保护方式下的类似实方式的运行环境 在1MB存储空间下使用“16位段”,16位段,32位段,数据总线,控制总线,地址总线,A31,A31,A30,A2,A1,A0 =,物理地址,不同CUP的物理地址空间8088/8086:具有 20 位地址总线,可寻址 1 MB的物理地址空间;80286
2、: 具有24 位地址总线,可以寻址16MB物理地址空间;80386:具有32 位地址总线,可以寻址4GB物理地址空间;,应用程序可访问 的空间在理论上 可为4TB!,在386以上CPU中,有两种存储器管理方式,一种称为实地址方式或实方式,另一种称为保护方式; 当计算机加电启动时工作在实地址方式; 在实地址方式下,地址线仍使用20位,所以最大寻址空间为1MB,以便与8086兼容。 保护方式采用32位物理地址,寻址范围可达4GB。,总述,本次课的主要内容,实方式和保护方式的概念;CPU存储器管理中各类地址概念;存储器分段管理;存储器分页管理。,CPU的地址转换,程 序,存储器,CPU,逻辑 地址,
3、物理 地址,存储器管理部件(Memory Management Unit,MMU)将由处理器发出的逻辑地址转换为存储器的物理地址。,逻辑地址:程序中所使用的地址;物理地址:处理器访问存储器使用的地址;逻辑地址结构:“段值:偏移量”(均以省略后缀H的十六进制形式表示)逻辑地址的形成:将段值装入相应的段寄存器(CS、DS、ES、SS、FS、GS),同时提供偏移量。,实方式存储器管理,微处理器运行在实方式时,逻辑地址称为分段地址。分段地址由一个段值和一个有效的地址偏移值组合而成, 其表示方式为:段值:偏移量(均以十六进制形式表示),CPU内部,逻辑地址,段值 (CS,DS, ES,SS),偏移量16
4、位 (由程序给出),物理地址,偏移4位,实方式下物理地址的形成,1BA4:204E,1BA40,+ 204E,1DA8E,小结,主存空间1M(220)个字节存储单元 物理地址范围:00000HFFFFFH 程序设计时分段管理,但有两个限制: 每个逻辑段最大为64KB 逻辑段只能开始于低4位地址全为0的物理地址处 逻辑地址段地址偏移地址 16位段寄存器保存20位段起始物理地址的高16位 偏移地址也用16位数据表示 物理地址段地址16偏移地址,示意图,保护方式存储器管理(386以上),分段管理,线性地址空间,数据,代码,堆栈,任务(代码、数据、堆栈),控制寄存器,CR0的第0位PE:0实模式;1保
5、护模式,标志寄存器,EFLAGS的第17位VM: 1虚拟8086模式,从实模式到保护模式 首先将PE置位为1,CPU内部,逻辑地址 (虚拟地址),偏移量 (32位),线性地址,段 值 (16位),段基地址 (32位),(CS,DS, ES,SS),如何得到?,段寄存器: 32位偏移量,虚拟地址: 保护方式下的逻辑地址(其中:段值为段选择器,用于确定段描述符在段描述符表中的位置以及特权级别);线性地址: 通过逻辑地址计算得到的地址,线性地址空间大小与物理地址空间大小相等,但其中地址单元并不一定一一对应(8086:1MB;80386:4GB);,线性地址计算方法:线性地址=段基地址+偏移量;线性地
6、址空间大小=物理地址空间大小80286线性地址=物理地址, 80386,80486线性地址(在不分页的情况下)=物理地址;,逻辑 地址,线性 地址,.,线性地址空间,程 序,分段部件 MMU,段基地址的获得段描述符表,线性地址空间,BASE A,BASE A+LIMT A,BASE B,BASE B+LIMT B,BASE C,BASE C+LIMT C,任 务,描述符A,段描述符表,描述符B,描述符C,虚拟地址,虚拟地址,线性地址,线性地址,存储在存储器中的数据结构(表),长度不定;表中每一项(段描述符)对应于线性地址空间中一个段段描述符提供段基地址从而将虚拟地址转换成为线性地址(确定了一种
7、转换函数)。,段描述符(Descriptor):段描述符表中的一项,段描述符格式 :8字节,基地址(24-31),G,D,0,段限量,(1619),P,DPL,类型,基地址(16-23),基地址(0-15),段限量(0-15),15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,6,4,2,0,DT,AVL,段基地址:段的起始地址80286:段基地址24位宽,段可在4MB线性地址空间的任何字节处起始; 80386和80486:段基地址32位宽,分成两部分32位段基地址决定了段可在4GB线性地址空间中的任何字节处起始。,段限量:确定段的尺寸。80286:段限量为16位无符
8、号数,表示段的最大尺寸为64 KB;80386和80486:段限量由两部分组成20位的无符号数。,段描述符格式 :8字节,基地址(24-31),G,D,0,段限量,(1619),P,DPL,类型,基地址(16-23),基地址(0-15),段限量(0-15),15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,6,4,2,0,DT,AVL,AVL,粒度G:粒度位设置成字节粒状,则限量以字节为单位,得段的尺寸为1 B1 MB; 粒度位设置成页粒状,则限量以页为单位,一页为4 KB,故段的尺寸为4 KB4 GB; 当采用页粒状时,有效地址偏移量的最低12位不必检查。若粒度设置
9、为页,段限量设置为00000H,则该段的有效地址偏移量为0FFFH (4095)。,段描述符格式 :8字节,基地址(24-31),G,D,0,段限量,(1619),P,DPL,类 型,基地址(16-23),基地址(0-15),段限量(0-15),15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,6,4,2,0,DT,AVL,类 型,ST,段类型,ST位的设置决定,了如何解释其他域,代码段,(ST=1),1,C,R,A,访问(1=yes),可读(1=yes),一致性(1=yes),数据段,(ST=0),0,E,W,A,访问(1=yes),可写(1=yes),向下扩展(1
10、=yes),(对于正常数据段E=0),基地址(24-31),G,D,0,段限量,(1619),P,DPL,类 型,基地址(16-23),基地址(0-15),段限量(0-15),15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,6,4,2,0,DT,AVL,DT位:描述符类型位。 DT=1,表示为段描述符; DT=0,表示为一个特殊的描述符(或称系统段描述符)或门描述符。DPL位:描述符特权级域 用来实现保护而不用于地址生成。,基地址(24-31),G,D,0,段限量,(1619),P,DPL,类 型,基地址(16-23),基地址(0-15),段限量(0-15),15,
11、14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,6,4,2,0,DT,AVL,P位:存在位用来表示描述符存在于存储器中(P=1)或不存在于存储器中(P=0) 。因而该位的设置使操作系统能够对应用程序实现虚拟存储器的功能。,D位为缺省操作尺寸位,不用于地址生成当D=0时,表示操作数和有效地址的缺省值是16位,这样的代码段也称为16位代码段;当D=1时,表示操作数和有效地址的缺省值为32位,这样的代码段也称为32位代码段。当一条单指令具有超越前缀时, 可以超越该位设置。,三种段描述符表:LDT,GDT,IDT。LDT:局部段描述符表为不同的任务存在(不同的任务不同的转换函数)
12、;GDT:全局段描述符表被所有任务使用;IDT:中断描述符表(最多可容纳256项)。,LDT A,GDT,LDT B,CODE A,DATA A,CODE B,DATA B,CODE K,DATA K,CODE OS,DATA OS,任务 A,任务 B,描述符表寄存器确定表位置,全局描述符表寄存器,基地址,限量,80286-24位,80386/80486-32位,16位,局部描述符表寄存器,选择器,限量,80286-24位,80386/80486-32位,16位,基地址,16位,(GDTR),(LDTR),0,1,2,3,最大,8191,基址,GDT,31,0,15,GDTR,0,边界,0,1
13、,2,3,最大,8191,基址,LDT,31,0,15,LDTR高速缓存器,0,LDTR,15,0,0,1,2,3,GDT,LDT描述符,段基址,段限量,选择器值,获得段描述符段选择器(Selector),逻辑地址,偏移量,线性地址,选择器,段基地址,段选择器和描述符表,索 引,TI,RPL,15,3,2,1,0,局部描述,符表,全局描述,符表,第一个项目不用空,描述符,TI=0,索 引,TI=1,RPL( Requestor Privilege Level)保存在选择子的最低两位。RPL说明的是进程对段访问的请求权限,意思是当前进程想要的请求权限;RPL的值由程序员自己来自由的设置,并不一定
14、(00最高,11最低)。,段寄存器及段描述符寄存器,存储器的分页管理,线性地址空间,物理地址空间,线性空间分为大小相等的块(页),物理空间分为大小相等的块(页),控制寄存器,CR0的位PG:0禁止分页;1启动分页,启动页管理方式 需将PG置位为1,页目录表和页表页大小: 4 KB,且每个页面都对齐在4 KB的边界;分页管理机制:每个页面的整个是作为一个单位进行映射;映射方式:保留线性地址的低12位;通过对常驻内存的页表和页目录表查询把线性地址的高20位转换成对应物理地址的高20位。,页目录表(页组目录项表):长度恰好为一页(4 KB);起始于能被1000H整除的物理存储器地址上;4 KB,共存
15、放了1024个项(称为页目录项4B,32位)。 页表:4 KB长,对齐在4 KB 的边界处;页表的4 KB数据结构又存放了1024个页表项(4B,32位),且作为物理存储器中页的指针。,页基地址,3212,AVL,0 0,D,A,0 0,U,/,S,R,/,W,P,31,12,11,9,8,7,6,5,4,3,2,1,0,页目录表/页表项格式,P位:该位为存在位 P=1:该项里的页地址映射到物理存储器中的一个页; P=0,表示该项里的页地址没有映射到物理存储器中,或说该项所指页不在物理存储器中。R/W位: R/W位为读/写位 用于实现页级保护,它不涉及到地址转换。,A位: A位为访问位,用来表
16、明该项指出的页是否已被读或写。 目录项中A=1,则表示该项所指出的页表已被访问过。 若页表项中A=1, 则表示该页表项所指出存储器中的页已被访问过;A位的置位由处理器完成, A位的状态可供操作系统软件测试,以便计算不同页的使用频度。,D位:页面重写标志位, 只在页表项中设置, 而不在页目录项中设置。当页表项中D=1时,表明该项所指出的存储器中的页已被写;D位的状态可被操作系统软件测试。,页目录项,页目录,页表项,页表,目的地址,目录索引域,页帧,表索引域,偏移量,线性地址,31,22,21,12,11,0,CR3,例,CR3=28345XXXH,线性地址25674890H,0010 0101
17、01,目录索引,10 0111 0100,页表索引,1000 1001 0000,偏移量,31,22,21,12,11,0,(10位),(10位),(12位),页目录项,页目录,页表项,页表,目的地址,目录索引域,页帧,表索引域,偏移量,线性地址,31,22,21,12,11,0,CR3,4,页目录表中所寻址项的物理地址=目录表基地址+偏移地址(目录索引地址乘4)=28345000H+254H=28345254H,设目录表中寻址项(从28345254H开始的4个字节)的内容为00200021H,页目录项,页目录,页表项,页表,目的地址,目录索引域,页帧,表索引域,偏移量,线性地址,31,22,
18、21,12,11,0,CR3(PDBR),4,4,页表中所寻址项的物理地址=页表基地址+页表索引地址4=00200000H+9D0H=002009D0H,又设页表中所寻址项(从002009D0H开始的4个字节)的内容为34567021H,则页帧基地址=34567000H。,页目录项,页目录,页表项,页表,目的地址,目录索引域,页帧,表索引域,偏移量,线性地址,31,22,21,12,11,0,CR3(PDBR),4,4,直接相加,寻址的存储单元最终物理地址=页帧基地址+线性地址中的12位偏移量=34567000H+890H=34567890H,小结:虚拟物理地址转换,选择子,15,0,偏移量,段机制,31,0,31,0,31,0,虚拟地址,线性地址,(分页被禁用),物理地址,分页机制,