x86内存管理机制

上传人:lx****y 文档编号:242970650 上传时间:2024-09-13 格式:PPT 页数:70 大小:1.35MB
返回 下载 相关 举报
x86内存管理机制_第1页
第1页 / 共70页
x86内存管理机制_第2页
第2页 / 共70页
x86内存管理机制_第3页
第3页 / 共70页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,x86内存管理机制,x86微处理器的寄存器结构,x86微处理器的基本结构,(80286以上),李曦,罗文坚,中科大计算机系,1,x86内存管理机制,x86微处理器的寄存器结构(80286以上),2,多任务工作模式的支持,任务调度方式,时间片调度:如20ms切换,循环,平等,产生“系统降级”,对关键任务不利,优先级调度:低优先级可被高优先级中断,实时系统,任务运行环境的保护,用户程序context切换:寄存器、指针、数据区等,使用堆栈或内存,OS区要保护:使用,分层分级,权限管理,3,80386的保护环,应用程序,常规扩展,系统服务,内核,级别0,级别1,级别2,级别3,4,虚拟存储管理,虚拟存储器:提供给程序员的一个很大的逻辑存储空间,由内存和外存构成,,可以运行所要求的存储容量比实际主存容量大得多的程序,内存换入换出:物理内存无法容纳一个任务的全部代码和数据,覆盖技术(overlay):分块调入当前执行者。EMM386,虚拟存储管理技术(Virtual Memary),5,内存管理,DRAM与HD间映射交换,段交换:整段换入换出,优点:与程序中的代码和数据结构对应,缺点:长度不定,不易管理;大段时间开销大,页交换:固定大小页(如4K),与逻辑结构不对应,段页式:程序员使用逻辑段进行编程,OS将段分成4K的页,进行交换,x86系列使用之,OS在MMU(存储器管理单元)的支持下完成,虚存管理,根据虚拟地址(逻辑地址)计算有效地址(物理地址),存储空间保护,提供权限管理支持,6,虚实地址转换机制多级页表,Index:选择子/选择符,表(or段)的索引,表项(Entry):描述子,表(or段)的基址,并,包括,权限、访问位、dirty位等,context,seg,page,offset,VA,Index0,Index1,Index2,Index3,Context,BaseReg,DRAM,PA,上下文表,段表,页表,7,286内存管理,实方式(real mode),与8086同(兼容),段偏移,寻址空间同样为1M,加电后的缺省工作模式,完成系统初始化,保护方式(protect mode),段式管理:段大小可变(PA,否:产生“段不存在”异常,完成段调入,访问权限检查,如果RPL=DPL,允许访问;否则,产生“权限违例”异常,10,386工作模式,实方式,工作原理与8086同,差别在于可以访问32位寄存器,主要任务是进行系统初始化(不是兼容),保护方式,基本概念与286同,含两种地址映射模式,段方式:段长1M4G,不启动页功能(PU部件),页方式:,任务隔离,权限检查,虚拟8086方式,既有保护功能,又能执行8086代码,本质:保护方式的任务之一,11,386工作模式切换,R,P,V,PE=1,PE=0,任务切换/中断返回,中断异常,Reset,Reset,Reset,12,0,15,16,31,0,15,0,15,16,31,7,8,AL,BL,CL,DL,AX,BX,CX,DX,AH,BH,CH,DH,EAX,EBX,ECX,EDX,IP,CS,DS,SS,ES,FS,GS,SP,BP,SI,DI,ESP,EBP,ESI,EDI,FLAGS,CR,0,实模式的寄存器模型,附加数据段,13,段方式地址映射,虚存空间64T,46位:14位选择子32位offset,RPL,48位VA,描述子,选择子(14位),BaseReg,DRAM(4G),1M,offset(32位),32PA,段基址,控制,DPL,14,描述符(Descriptor),描述存储器“段”的属性的一个8字节的数据结构。,两,种类型,段描述符,:,用于描述代码、数据和堆栈段,系统段描述符,:中断,描述符,、任务段等,15,G,位(粒度位):,G=0, 段的长度以字节为单位,段长最大1M字节,G=1,段的长度以页(4K字节)为长度单位,段长最大1M,4K=4G,字节,D,位:D=0,16位指令方式,D=1,32位指令方式,AVL位:AVL=0,程序不可使用本段,AVL=1,程序可以使用本段,段描述符,16,访问权限字节,0,1,2,3,4,5,6,7,A,P,DPL,S,E,ED,C,R,W,P,位:P=0,段不在内存中,P=1,段在内存中,DPL:取值03,确定段的,特权级,为任务允 许访问该门的最低特权级,S位:S=1,段描述符,A位:A=0,段尚未被访问,A=1,段已被访问,段描述符(1),17,访问权限字节,0,1,2,3,4,5,6,7,A,P,DPL,S,E,ED,C,W,R,13位表示段的类型,E=0,为数据段,ED=0,段向上扩展,为数据段,ED=1,段向下扩展,为堆栈段,W=0,数据段只读,W=1,数据段可写,E=1,为代码段,C=0,忽略描述符特权级,C=1,遵循描述符特权级,R=0,代码段不可读,即只执行,R=1,代码段可读,段描述符(2),18,格式与段描述符基本相同,主要差别,访问权限字节,0,1,2,3,4,5,6,7,P,DPL,S,TYPE,S=0,系统段描述符,TYPE为4个字节,共有16种类型。其中:,2,LDT,9,TSS,非忙,B,TSS,忙,5,任务门,C,,调用门,E,中断门,F,陷阱门, D位无定义(D=0),系统段描述符,19,例:,系统段描述符,所描述的段的性质,0,1,2,3,4,5,6,7,S=0, TYPE=2(LDT), P=,1,, DPL=,2,,A=0,,因此为一个特权级为2的LDT,已经在内存中,尚未访问过,该LDT的基址为,0020 0000H,,界限为0300H,G=0,段的长度为字节长度,AVL=0,该段不可被程序访问,0,1,2,3,4,5,6,7,P,DPL,S,TYPE,20,描述符表由描述符顺序排列组成,占内存一定的区域,由系统地址寄存器(GDTR、IDTR、LDTR),指示其在物理存储器中的位置和大小,描述符表有:,全局描述符表GDT,中断描述符表IDT,局部描述符表LDT,任务表TSS,描述符表,访,问,权,限,访,问,权,限,基,址,界,限,0,19,20,51,52,63,21,在物理存储器地址空间中定义全局描述符表GDT,0,15,16,47,GDTR,BASE(32位),LIMIT,BASE,指示GDT在物理存储器中开始的位置,LIMIT规定GDT的界限,LIMIT有16位,从而GDT最大65536个字节,,能够容纳65536/8=8192个描述符,全局描述符表寄存器GDTR,22,例:(GDTR)=0010 0000,0FFF,H,求GDT在物理存储器中的起始地址,结束地址,表的大小,表中可以存放多少个描述符?,解:GDT的起始地址为0010 0000H,结束地址为,0010 0000H+0FFFH=0010 0FFFH,表的大小为,0FFFH+1=4096字节,表中可以存放,4096/8=512个描述符,全局描述符表寄存器GDTR(1),23,在物理存储器地址空间中定义中断描述符表IDT,0,15,16,47,IDTR,BASE,LIMIT,由于Pentium只能支持256个中断和异常,因此,LIMIT,最大为0FFFH,IDT中的描述符类型为中断门,中断描述符表寄存器IDTR,24,LDT定义任务用到的局部存储器地址空间,16位的LDTR并不直接定义LDT,它只是一个指向GDT中LDT描述符的选择符。,如果LDTR中装入了选择符,相应的描述符将从GDT中读出并装入局部描述符表高速缓冲寄存器。将该描述符装入高速缓冲寄存器就为当前任务创建了一个LDT,局部描述符表寄存器LDTR,25,GDTR,GDT,BASE,LIMIT,LDT,描述符,LDTR,LDT,基址,界限,32位,16位,LDT描述符高速缓冲,寄存器(不可见),为当前任务创建LDT的过程,*OS根据LDT使用情况为LDTR赋值,26,存放16位的选择符,指示全局描述符表中任务状态段(TSS)描述符的位置,当选择符装入TR时,相应的TSS,描述符自动从存储器中读出并装入任务描述符缓冲寄存器。该描述符定义了一个称为任务状态段(TSS)的存储块。每个任务都有TSS,TSS包含启动任务所必需的信息。,TSS最大64K字节,任务寄存器TR,27,GDTR,GDT,BASE,LIMIT,TSS,描述符,TR,基址,界限,32位,16位,TSS,TSS描述符高速缓冲,寄存器(不可见),生成一个新任务的过程,*OS为TR赋值,28,存储空间分配,GDT描述子,LDT描述子,TSS描述子,OS段,(代码、数据),TSS段,中断描述子,中断例程,LDT0描述子,LDT0段,(代码、数据),LDT1描述子,LDT1段,(代码、数据),GDTR,IDTR,GDT,LDTR,TR,全局空间,任务0,任务1,局部空间,注意:存在两种描述子类型,29,保护模式下CS、DS、SS、ES、FS、GS寄存器称为段选择符寄存器,其值不再是基址而是选择符,它从描述符表中选择一个定义存储器段大小和属性的描述符。FS/GS用于OS进行数据通信。,0,1,2,3,15,TI,RPL,选择子,RPL: 申请特权级,03,TI: 表指示符,0使用全局描述符表,1使用局部描述符表,选择子:选择描述符表中的表项,段选择符寄存器,30,例:设LDT的基址为0012 0000H,GDT,的基址为00100000H,(CS)=1007H,那么:,请求的特权级是多少,段描述符位于GDT中还是LDT中,段描述符的地址是什么,解:(CS)=1007H=,0001 0000 0000 0,1,11,B, RPL=,3,,申请的特权级为3,TI=,1,,描述符位于LDT中,描述符相对于LDT基址的偏移量为,0001 0000 0000 0,B,8=512 8=4096=1000H,段描述符的地址为,0012 0000H+1000H=00121000H,0,1,2,3,15,TI,RPL,选择子,31,虚拟地,址指针,GDT/LDT,选择符,偏移量,段,描述符,数据段描述符高速缓,冲寄存器(不可见),数据段,操作数,DS,EAX,段式地址转换,段基址,32,段式地址转换,例:假设虚拟地址为0100:0000 0200H,禁止分页。如果描述符中读出的段基址为0003 0000H,那么操作数的物理地址是什么?,解:,将此虚拟地址转换成物理地址,基地址+偏移量,=00030000H+00002000H,=0003 2000H,33,分段法:将程序分成可变长的若干段,分页法:将程序分成若干相同大小的页,每页长4KB,如果不允许分页,那么分段机构确定的32位线性地址即为物理地址;如果允许分页,就要将32位线性地址通过两级表格结构转换成物理地址,第一级是页目录,第二级是页表,分页机制,虚拟地址(VA),线性地址,物理地址(VA),34,线性地址,页目录,目录,偏移量,页目录项,页,操作数,页,CR3,页表,页表项,页表基址,分页机制(1),35,页目录长4KB,包含最多1024个页目录项,每个页目录项4字节,分页机制(2)页目录表,7,6,5,4,3,2,1,0,0,0,A,0,0,U/S,R/,W,P,页表地址,03,位,OS,专用,0,页表地址,411,位,页表地址,1219,位,0,1,2,3,36,页基址:页表的起始地址是4K的整数倍,因此32位地址的低12位总为0,用高20位表示即可,即页目录表项中给出的是页基址的高20位。,U/S R/W 特权级3 特权级02,0 0 无 读/写,0 1 无 读/写,1 0 只读 读/写,1 1 读/写 读/写,分页机制(3),页目录表项,user,supervisor,37,页表长4KB,包含最多1024个页面项,每项4字节,7,6,5,4,3,2,1,0,0,D,A,0,0,U/S,R/,W,P,页面地址,03,位,OS,专用,0,页面地址,411,位,页面地址,1219,位,0,1,2,3,页面的起始地址为4K的整数倍,所以32位页面地址只用高20位,D位(Dirty):对所涉及页面进行写操作时,D置1,分页机制(4)页表,38,整个存储器有一个页目录表,它最多有1024个页目录项,即可以有1024个页表;,每个页表可含有1024个页面项,即可以有1024个页;,共有1024,1024=1M个页面,每页面4KB,存储器大小正好4GB,目录,页,偏移量,31 22 21 12 11 0,线性地址格式,分页机制(5)系统容量,39,TLB转换检测缓冲器,TLB,为一个Cache,其中保存了32个最近使用的页转换地址。若访问同样的存储区域,则不必再访问,内存中,的页目录表和页表 ,可以加快程序的运行。,例:对于线性地址00000000H00000FFFH,将选中页目录项0和页表项0。若页表项0包含的地址为00100000H,则线性地址00000000H00000FFFH对应的物理地址为00100000H00100FFFH,分页机制(6)TLB,目录,页,偏移量,31 22 21 12 11 0,FFF,0,00,00,0,40,段模式下的TLB,CS,DS,SS,ES,FS,GS,程序员可见,访,问,权,限,访,问,权,限,基,址,界,限,0,19,20,51,52,63,段描述符高速缓冲寄存器(TLB),程序员不可见,41,保护模式的子模式,在保护模式下,只要将EFLAGS寄存器的VM位置1,处理器便进入V86模式。将VM位清0,处理器便又退回保护模式,当处理器处于V86模式时,段寄存器的使用与实模式相同。,通过分页操作,V86的1MB地址空间可以转换到Pentium的4GB空间的任何地方,虚拟8086模式,42,保护模式的寄存器模型,43,控制寄存器,44,CR0的低5位组成机器状态字(MSW):,PE:0实模式;1保护模式,MP:1(系统有数学协处理器时),EM:0(仿真协处理器),TS:,任务切换,切换任务时自动设置,ET:1(协处理器的类型),控制寄存器,CR0,45,存储器分页机制:,CR0,中的PG位设置为1,表示允许分页,CR3包含页目录基址,指向页目录的开头,如果发生缺页,则将发生缺页的地址保存在CR2中,控制寄存器CR3、CR2,46,IOPL: 输入/输出特权级,VM:,虚拟8086模式标志,标志寄存器EFLAGS,47,任务保护与切换,讨论两个问题,虚空间保护,任务隔离:各自的LDTn,分层管理:在任务内保护全局段,特权级,任务切换,48,虚空间保护,段限检查,防止偶然或有意访问另一个任务的空间,访问类型检查,SS段不能“只读”,DS不能“可执行”,P位检查,0,1,2,3,4,5,6,7,A,P,DPL,S,E,ED,C,W,R,49,权限管理,特权级,管态,0级(OS核心)、1级(OS)、2级(dBase程序等),目态,3级(应用程序),RPL:访问请求的权限,CPL:当前执行任务的权限,DPL:被访问者权限,DPL = MAX(CPL, RPL),50,访问高DPL段的方法门,门:一种特殊的描述子,,提供了将程序控制转给服务程序入口的手段。,调用门、陷阱门、中断门、任务门,0,1,2,3,调,用,门,调用,代,码,段,51,调用门,一个程序调用其他段中的一个过程,两级寻址:提高操作可靠性,门选择子,过程描述子,过程偏移,调用门描述子,过程段描述子,过程代码,过程入口,52,偏移量:相对于段基地址的偏移量,为目标代码的入口点,选择符:用于确定段基地址,字计数:从调用者堆栈中复制到被,调用者堆栈中的参数个数,,参数为32位,访问权限字节格式与系统段描述符相同,属于系统段描述符,门描述符,0,1,2,3,4,5,6,7,P,DPL,S,TYPE,53,中断门,中断源:256个,外设,指令执行异常(陷阱),中断指令INTn(软中断),实模式下,中断向量(4字节)位于内存最低端,保护模式下,IDT中为中断门描述子(8字节),54,任务门任务状态段TSS,55,任务切换方法,转向TSS法:使用远程call或jmp指令完成,转向任务门法:具有特权级保护的优点,任务切换期间,处理器修改下列动态域:通用目的寄存器域:EAX、ECX、EDX、EBX、ESP、EBP、ESI和EDI的状态。段选择符域:ES、CS、SS、DS、FS和GS的段选择符。EFLAGS寄存器域:EFLAGS的状态。指令指针EIP域:EIP的状态。先前任务连接域(反向链):TSS的段选择子。,当一个任务建立时,下列静态域被建立:LDT段选择子域:包含任务LDT的段选择子。控制寄存器CR3域:包含任务所使用的页目录物理基地址(PDBR)。特权级0、l和2堆栈指针域:由堆栈段的段选择子和进入堆栈的一个偏移量所组成(ESP0、ESPI和ESP2)。调试自陷标志位T(第100号字节的位0):当标志位T设置,发生任务切换时引起处理器产生一个调试异常。IO映射副本基地址域:包含一个从TSS基地址开始的16位偏移量(位图偏移)。,56,OS进行任务切换的过程,使用JMP从OS切换到用户任务,时间片结束后产生时钟中断,时钟中断指向OS任务门,返回OS,OS切换到任务队列中的下一个任务,57,x86微处理器的基本结构,(80286以上),58,8086的2级流水线,EU与BIU协同工作,每当ISQ中有2bytes空闲空间,BIU自动取指,一次读两个字节,转移、调用、返回指令会造成ISQ排空,EU通过BIU取指和读写数据,ISQ满且EU无申请时BIU空闲,59,80286的4个模块示意图,地址部件AU,指令部件IU,执行部件EU,总线部件BU,60,80386的结构框图,61,80486的内部结构框图,62,Pentium CPU版图,63,Pentium CPU结构框图,64,Pentium超标量流水线,超标量流水线是Pentium系统结构的核心。它由U和V两条指令流水线构成,每条流水线都有自己的ALU、地址生成电路和与数据cache的接口。因而,有可能在1个时钟周期内执行两条整数指令,每条流水线执行1个。这种指令并行方式要求指令必须是简单指令,且V流水线总是接受U流水线的下一条指令。U流水线能执行指令集的任何指令,包括指令前缀;而V流水线却不能,它只能执行“指令配对法则”中规定的简单指令。若连续的两条指令不能配对,则只能使用U流水线先后执行这两条指令。U,V流水线采用的是按序发射、按序完成的调度策略。注意,在这种策略下只要指令cache 及其TLB 和数据cache 及其TLB连续命中,可连续每时钟完成两条可匹配指令,与486流水线相类似, Pentium双流水线中每一条也分为5段,即指令预取(PF)、指令译码(D1)、地址生成(D2)、指令执行(EX)和结果写回(WB)。 D1段除完成指令译码外,还要完成指令配对检查和条件转移预测。带有前缀的指令,要求有一个额外的D1周期。经检查合格的配对指令,由D1段同时发射给下一段,才真正开始两条流水线的并行工作。,65,分离的指令和数据cache,80846片内有8KB的指令和数据合一的Cache,而Pentium则是将指令cache和数据cache分立,各为8KB。指令cache是只读的(应用程序不能改写,但可由操作系统实行替换算法 进行新旧行的更替)指令代码。数据cache是可读写的,双端口每端口32位,与U,V两条流水线交换整数数据,或组合成一个64位端口与浮点运算部件交换浮点数据。两个cache与64位数据、32位地址的CPU内部总线相接。 它们都是两路组相联的结构,每行32字节。数据cache可设置成行写回或写直达方式,并且遵守MESI协议来维护L1,L2 cache的一致性。个别页面的访问可用硬件或软件设置成可以或不可以高速缓冲,也可用硬件或软件来禁止或使用Pentium的cache功能。它们都是物理地址(实地址)cache。每个cache都有一个转换后援缓冲器TLB,负责将TLB命中的线性地址转换成32位物理地址。分立的指令和数据cache是对Pentium超标量结构的有力支持。它不仅使指令预取和数据读写能无冲突地同时完成,而且可同时与U,V两条流水线分别交换数据。,66,Pentium的浮点运算器,同80486DX一样, Pentium也将浮点运算器包含于芯片内,但Pentium的浮点运算部件重新设计了。执行过程是分为8段的流水线。前4段为指令预取(PF)、指令译码(D1)、地址生成(D2)、取操作数(EX),在U,V流水线完成;后4段为执行1(X1)、执行2(X2)、结果写回寄存器堆(WF)、错误报告(ER),在浮点运算部件中完成。一般情况下,只能由U流水线完成一条浮点操作指令;少数情况下,V流水线也能同时完成一条如浮点数交换这样的指令。浮点部件内有浮点专用的加法器、乘法器和除法器,有8个80位寄存器组成的寄存器堆,内部的数据总线为80位宽。支持IEEE 754标准的单、双精度格式的浮点数,另外还使用一种称为临时实数的80位浮点数。对于浮点数的常用指令如LOAD,ADD,MUL等采用了新的算法并予以固化,用硬件来实现,其执行速度是80486的10倍多。,67,Pentium的动态转移预测技术,Pentium采用动态转移预测技术,来减少由于过程相关性引起的流水线性能损失。它提供的转移目标缓冲器BTB是个小容量的cache,当一条指令导致程序转移时,BTB记忆住这条指令及其转移目标地址。以后遇到这条转移指令时, BTB会依据前面转移发生的历史来预测这次是转移取还是顺序取,若是预测为转移取则记录的转移目标地址立即送出。Pentium的超标量流水线有两个指令预取缓冲器,当前总是使用其中一个。当在指令译码(D1)段译出一条转移指令时立即检索BTB。若预测为顺序取则继续以当前预取缓冲器取指令,若预测为转移取则立即冻结当前预取缓冲器,启动另一个预取缓冲器,由给出的转移目标地址处开始取分支程序的指令序列。因而保证了流水线的指令预取步骤永远不会空置。而且预测转移取不正确时,正确路径的指令已在指令预取缓冲器中,也使因预测错误而蒙受的性能损失减小。除了上述特点外, Pentium在数据完整性、容错性和节电等方面也采取了一些特殊的设计方法。,68,小结,讨论的问题,虚拟存储管理,对多任务的支持,工作模式,实方式、虚方式、V86方式,虚实地址映射方式:基于查找表技术,段式,页式,69,作业,386系统中是如何对任务以及OS的核心过程和数据进行保护的?,在386系统中,一个运行于特权级2的任务如何调用一个高特权级的过程?,分析说明段式和页式寻址两种方式的特征,读书报告(teamwork=4人):,结合i386 Linux,分析其任务切换的过程,4月30号提交,优秀者(=5人)最高可加10分。,70,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!