[IT计算机]80X86处理器结构chapter2mpu323.ppt_第1页
[IT计算机]80X86处理器结构chapter2mpu323.ppt_第2页
[IT计算机]80X86处理器结构chapter2mpu323.ppt_第3页
[IT计算机]80X86处理器结构chapter2mpu323.ppt_第4页
[IT计算机]80X86处理器结构chapter2mpu323.ppt_第5页
已阅读5页,还剩89页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章80 x86微处理器的结构,罗文坚中国科大计算机学院,本章内容,8086微处理器的结构80286微处理器的结构32位微处理器(386、486、pentium、pentiumpro、)的结构80386以上,以80386为主,32位微处理器的结构(80386以上),保护模式下的内存管理,x86内存管理:保护模式下的内存管理保护模式下的存储管理包含两大机制地址转换机制保护机制任务切换,逻辑地址、线性地址和物理地址,逻辑地址,即虚拟地址,这是应用程序设计人员进行编程时要用到的地址。“段选择子:偏移量”:由一个16位的段选择子和32位偏移量两部分组成。段选择子放在段寄存器中;偏移量也称为偏移地址、有效地址。物理地址:指内存芯片阵列中每个阵列对应的唯一的地址。32位地址线可直接寻址4gb内存单元。线性地址:沟通逻辑地址与物理地址的桥梁。32位微处理器芯片内的分段部件将逻辑地址空间转换成32位的线性地址。,二级虚拟物理地址转换,什么情况下,偏移地址和线性地址一致?,什么情况下,线性地址和物理地址一致?,段描述子(descriptor),段描述子/段描述符:描述存储器“段”的属性的一个8字节的数据结构。为了实现分段管理,32位微处理器把有关段的信息都放在段描述子数据结构中,并把系统中所有的描述子编成表,放在内存中,以便硬件查找。由段选择子可以找到相应的段描述子。两种类型的描述子代码或数据段描述子:用于描述代码、数据和堆栈段。系统段描述子:任务状态段等。局部描述子表ldt也作为一种系统段来看待。,段描述子的分类,段描述子(descriptor),段基址:32位;段限:20位。g:granularityg=0,段的长度以字节为单位,段长最大1m字节。g=1,段的长度以页(4k字节)为长度单位,段长最大1m4k=4g字节。,段描述子(descriptor),d/b:本质:d=1,32位代码/数据段;d=0,16位代码/数据段段。对可执行代码段(d):指示指令引用的有效地址和操作数的缺省长度。d=1为32位地址、32位或8位操作数;d=0为16位地址、16位或8位操作数。对堆栈段(b):指示堆栈指针的大小,esp/sp。对向下扩展的数据段(b):指示段的上限,4g/64k。avl:availableforusebysystemsoftware,提供给系统软件使用(80386对该位的使用未作规定)。p:p=0,段不在内存中;p=1,段在内存中。,段描述子(descriptor),dpl:描述子特权级,取值03,确定段的特权级,为任务允许访问该段的最低特权级。s:s=1表示该描述子为代码或数据段描述子;s=0,表示该描述子为系统段描述子。type:段的类型(与段描述子类型相关)。,代码或数据段描述子的类型,系统段描述子的类型,type为4个字节,共有16种类型。其中:,2,ldt9,tss,非忙b,tss,忙,5,任务门c,调用门e,中断门f,陷阱门,系统段描述子的类型,例:系统段描述子所描述的段的性质,段基址为00000000h,段限为fffffhg=1,段的长度以4k为单位属性位d=1,表示32位段p=1,dpl=00,s=1,type=10(可读可执行代码段),因此一个特权级为0的代码段已经在内存中,描述子表由描述子顺序排列组成,占内存一定的区域,由系统地址寄存器(gdtr、idtr、ldtr)指示其在物理存储器中的位置和大小。,描述子表有:全局描述子表gdt中断描述子表idt局部描述子表ldt,描述子表,全局描述子表,一个系统只能有一个全局描述子表(gdt)。全局描述子表:定义了能被系统中所有任务公用的存储分段,可以避免对同一系统服务程序的不必要的重复定义与存储。通常gdt中包含了操作系统使用的代码段、数据段、任务状态段以及系统中各个ldt所在段的描述子。注意:中断服务程序所在段的段描述子在idt中。gdt本身不是一个段;它是一个在线性地址空间的数据结构。,在线性地址空间中定义全局描述子表gdt,base:指示gdt在存储器中开始的位置(线性地址)limit:规定gdt的界限,limit有16位,从而gdt最大65536个字节能够容纳65536/8=8192个描述子(213),全局描述子表寄存器gdtr,例:(gdtr)=001000000fffh,求gdt在存储器中的起始地址,结束地址,表的大小,表中可以存放多少个描述子?,解:gdt的起始地址为00100000hgdt的结束地址为00100000h+0fffh=00100fffh表的大小为0fffh+1=4096字节表中可以存放4096/8=512个描述子,全局描述子表寄存器gdtr,中断描述子表idt,中断描述子表(interruptdescriptortable,idt)最多包含256个中断服务程序的位置的描述子。系统所使用的每种类型的中断在idt中必须有一个描述子表项。idt的表项通过中断指令、外部中断和异常事件来访问。为容纳intel保留的32个中断描述子,idt的长度至少应有256byte(328byte)。与gdt相似,idt也不是一个段。,在线性地址空间中定义中断描述子表idt,idt中的描述子类型为门描述子(属于系统描述子)pentium只能支持256个中断和异常。,中断描述子表寄存器idtr,idtr和idt的关系,中断门陷阱门任务门,局部描述子表,局部描述子表(localdescriptortable,ldt)包含了与某个任务相关联的段描述子。在设计操作系统时,通常一个任务有一个独立的ldt。ldt提供了将一任务的代码段、数据段与操作系统的其余部分相隔离的机制。ldt是一个ldt类型的系统段,其段描述子保存在gdt中。,一个任务一个ldt。因此,系统中有多个ldt。ldt定义任务用到的局部存储器地址空间。,16位的ldtr并不直接定义ldt,它只是一个指向gdt中ldt描述子的段选择子。如果ldtr中装入了段选择子,相应的段描述子将从gdt中读出并装入ldtr的段描述子cache。,局部描述子表寄存器ldtr,gdtr,gdt,base,limit,ldt描述子,ldtr与gdt表、ldt表的关系,os根据ldt使用情况为ldtr赋值,全局和局部地址空间,保护模式下cs、ds、ss、es、fs、gs寄存器称为段选择子寄存器,其值不再是段基址而是选择子,它从描述子表中选择一个定义存储器段大小和属性的描述子。fs/gs中存放新的两个附加数据段的基址/选择子。,段选择子寄存器,段描述子寄存器,程序员不可见,段描述子寄存器,称为段描述子高速缓冲寄存器(或段描述子cache),段选择子与段描述子的关系,例:设ldt的基址为00120000h,gdt的基址为00100000h,(cs)=1007h,请问:请求特权级是多少?段描述子位于gdt中还是ldt中?段描述子的地址是什么?,解:(cs)=1007h=0001000000000111brpl=3,请求特权级为3。ti=1,描述子位于ldt中。描述子相对于ldt基址的偏移量为:0001000000000b8=5128=4096=1000h段描述子的地址为:00120000h+1000h=00121000h,例题,段基址段限和属性,48位虚拟地址,gdt/ldt,选择子,偏移量,段描述子,段描述子cache(不可见),被选中的段,操作数,段式地址转换(不分页),段寄存器,段式地址转换(不分页),例:假设虚拟地址为0100:00000200h,禁止分页。如果描述子中读出的段基址为00030000h,那么操作数的物理地址是什么?,解:将此虚拟地址转换成物理地址,即基地址+偏移量=00030000h+00002000h=00032000h,segmentation,分段机制的使用,ia-32体系结构支持多种系统设计,例如:basicflatmodel(基本的平展模型)protectedflatmodel(保护的平展模型)multi-segmentmodel(多段模型),基本的平展模型,基本的平展模型:最简单的存储模型,操作系统和应用程序可以访问一个连续的、不分段的地址空间。对系统程序员和应用程序员隐藏了分段机制。,保护的平展模型,保护的平展模型与基本的平展模型的不同点:段限设置为仅仅包括物理内存存在的地址范围。,多段模型,二级虚拟物理地址转换,分段法:将程序分成可变长的若干段。分页法:将程序分成若干相同大小的页,每页长4kb。,如果不允许分页,那么分段机构确定的32位线性地址即为物理地址;如果允许分页,就要将32位线性地址通过两级表格结构转换成物理地址,第一级是页目录表,第二级是页表。二级分页方案,分页机制,分页机制(1),linearaddresstranslation(4-kbytepages),分页机制(2),linearaddresstranslation(4-mbytepages),分页机制(3)页目录表项,页表基址:页表的起始地址是4k的整数倍,因此32位地址的低12位总为0,用高20位表示即可,即页目录表项中给出的是页基址的高20位。p:为1指示页表在内存中;为0指示页表不在内存。r/w:读/写;u/s:user/supervisor。,u/sr/w特权级3特权级0200无读/写01无读/写10只读读/写11读/写读/写,分页机制(4)页目录表项,pwt:page-levelwrite-throughflag,为1表示write-throughcaching,为0表示write-backcaching。pcd:page-levelcachedisableflag,为1,不允许cache操作;为1,禁止cache操作。a:accessedflag,访问时置1。ps:pagesizeflag,为0表示4kb/页;为1表示4mb/页。g:globalflag,指示全局页;pentiumpro增加。avail.:os专用的三位,通常记录使用情况。,页目录表长4kb,包含最多1024个页目录项,每个页目录项4字节。,页表长4kb,包含最多1024个页表项,每项4字节。,页面的起始地址为4k的整数倍,所以32位页面地址只用高20位。,与页目录表项不同的标志位:d位(dirty):对所涉及页面进行写操作时,d置1。页目录表项中恒为0。第7位为保留位(reserved),设置为0。页目录表项中为ps标志。,分页机制(5)页表,例:对于线性地址00000000h00000fffh,将选中页目录项0和页表项0。若页表项0包含的地址为00100000h,则线性地址00000000h00000fffh对应的物理地址为00100000h00100fffh,分页机制(6),页转换高速缓冲存储器tlbtlb为一个cache,其中保存了32个最近使用的页转换地址。若访问同样的存储区域,则不必再访问内存中的页目录表和页表,可以加快程序的运行。,分页机制(6)tlb,二级虚拟物理地址转换,分段机制和分页机制之间有什么关系?,分段与分页,段页映射,intelarchitecture并不强制段、页边界的对齐。一个页可能包含一个段的结束和另一个段的开始。反之亦然。存储管理软件可以强制边界对其以简化设计。一个方便的方法:每一个段对应一个页表。,保护模式的子模式。本质:保护方式的任务之一严格地说,不能算是一种处理器模式。在保护模式下,只要将eflags寄存器的vm位置1,处理器便工作在v86模式。处理器便退回保护模式时,将vm位清0。当处理器处于v86模式时,段寄存器的使用与实模式相同。v86的1mb地址空间可以转换到pentium的4gb空间的任何地方。,虚拟8086模式,保护模式下的内存管理,保护模式下的存储管理包含两大机制地址转换机制保护机制任务切换,保护机制,80386以上的32位微处理器支持2个主要的保护机制:任务隔离:各自的ldt。通过给每个任务分配不同的虚拟地址空间,使任务之间完全隔离,每个任务有不同的“虚拟地址物理地址”的转换映射。分层管理:在任务内保护全局段特权级。任务内的保护机制操作,包含操作系统存储段及特殊的处理器寄存器,使其不能被其它应用程序破坏。,不同任务间的保护,通过各自的ldt来实行相互间的隔离和保护不同任务的同一个虚拟地址在局部地址空间,实际转换出来的线性地址一般是不同的在全局地址空间,转换成相同的线性地址,段级别保护,限度检查:防止超过段的界限。例如,访问1个双字操作数,其地址在段限值减2处,便会发生异常。类型检查例1,加载前,只有可执行的段的段选择子才能加载到cs。例2,加载后,对不可写的数据段进行写操作,产生异常。特权检查,段级别保护特权级,管态,又称为特权态(特态)、系统态0级(os核心)、1级2级(os服务)目态,又称为普通态(普态)、用户态3级(应用程序),三种类型的特权级,cpl:当前执行任务的特权级,由cs寄存器的最低两位来确定。一般情况下,cpl等于正在执行的指令所在的代码段的特权级。当程序控制从当前段转移到另外一个不同特权级的段时,cpl随着改变。例外情况:任何特权级等于或低于(数值上大于)一致代码段特权级的段均可转移到一致代码段。同时,cpl不改变。一致代码段通常用来存放多个特权级程序共享的例程。,三种类型的特权级,dpl:描述子特权级,被访问者特权级,段描述子中。dpl的解释依赖于被访问的段或门。数据段:dpl指示程序或任务访问该段必须具有的最低特权级。例如:如果一个数据段的dpl=1,只有运行在cpl=0或1的程序才能访问该段。非一致代码段(不通过调用门时):dpl指示一个程序或任务必须在该特权级才能访问该段。例如,如果非一致代码段的dpl为0,则只有运行在cpl=0的程序才能访问该段。调用门:dpl指示程序或任务访问该段必须具有的最低特权级(与数据段一致)。一致代码段和非一致代码段(通过调用门访问时):dpl指示程序或任务能够访问该段的最高特权级。例如,如果一致代码段的dpl=2,运行在cpl=0或1的程序不能访问该段。tss:dpl指示程序或任务访问该段必须具有的最低特权级(与数据段一致)。,三种类型的特权级,rpl:请求特权级,段选择子中,说明的是进程对段访问的请求权限(requestprivilegelevel),表示本次访问所要求的特权级。处理器同时检查cpl和rpl以决定对一个段的访问是否允许。例如,cpl1,rpl2时,只能访问dpl=2的段。rpl可用于保证特权代码不会代表一个应用程序访问某个段,除非该应用程序本来就具有这一特权级。,特权级检查,当一个段描述子的段选择子加载到一个段寄存器中时,进行特权级检查。两种情形数据访问时的特权级检查程序控制转移时的特权级检查,访问数据段时的特级级检查,要求数值上满足:dpl=max(cpl,rpl)数值越大,特权级别越低,访问数据段时的特级级检查,访问代码段中的数据的方法。通过段选择子将非一致、可读代码段加载到数据段寄存器。要求数值上满足:dpl=max(cpl,rpl)。与访问数据段一致。通过段选择子将一致、可读代码段加载到数据段寄存器ok。因为一致代码段的有效特权级等于cpl。不考虑它的dpl。用cs作段前缀读取一个可读的代码段(当代码段已经加载到cs寄存器)ok。因为由cs寄存器选中的的代码段的dpl与cpl相等。,代码段控制转移时的特权级检查,控制转移时,代码段的选择子必须加载到cs。作为加载过程的一部分,处理器检查目标代码段的类型、段限和特权级。检查成功,则程序转移到新的代码段执行。同一任务中实现控制转移有3种方式:段内转移段内转移不会引起特权级的变化,也不需要重新加载cs段寄存器。在此不予考虑。直接转移到另一代码段的段间转移通过调用门的段间转移,直接的段间转移(不经过调用门),处理器要检查3个特权级和1个类型信息cpl、rpl、dpl、c,直接的段间转移,访问非一致代码段:cpl=dpl,否则处理器产生保护异常。,a可以通过c1调用c中过程。b不可以通过c1或c2调用c中过程。,直接的段间转移,访问非一致代码段:cpl=dpl,否则处理器产生保护异常,rpl影响有限。rpl在数值上必须小于或等于主调程序的cpl。例如,c1的rpl可以为0,1,2,但不能为3。当非一致代码段的选择子加载到cs寄存器时,特权级不变。也就是说,保持原来的cpl(即使rpl与cpl不同)。,直接的段间转移,访问一致代码段:cpl=dpl,否则处理器产生保护异常。如果目标段是一致代码段,rpl不检查。,a和b都可以通过d1和d2调用d中过程。,直接的段间转移,一致代码段通常是一些数学函数库、异常处理程序等。当一致代码段的选择子加载到cs寄存器时,cpl特权级不变。这用于防止应用程序控制转移到一致代码段时,访问与一致代码段同级的非一致代码段。,访问一致代码段:cpl=dpl,否则处理器产生保护异常。如果目标段是一致代码段,rpl不检查。,直接的段间转移,绝大多数代码段是非一致的。对于这些非一致代码段,程序控制只能在同特权级直接转移,除非使用调用门。,门描述子,门:一种特殊的描述子,提供了不同特权级的程序间的控制转移。调用门:通过调用门,可以使优先级别低的代码转到优先级高的或同级代码去。陷阱门、中断门:处理异常和中断程序任务门:切换任务属于系统段描述子。,调用门,通过调用门,可以使优先级别低的代码转到优先级高的或同级代码去。,调用门,调用门描述子可位于gdt或ldt,但不能位于idt。,调用门的门描述子,段选择子:指明要访问的段。偏移量:指明代码段的入口点。,通过调用门访问代码段,通过调用门访问代码段,通过调用门访问代码段时,要检查4个特权级以决定是否允许程序控制转移:当前特权级cpl;调用门选择子的请求特权级rpl;调用门描述子的dpl;目标代码段的段描述子的dpl。,通过调用门访问代码段,跳转后的cpl:如果call指令跳转到更高特权级的非一致代码段,cpl目标dpl。栈切换如果call指令跳转到更高特权级的一致代码段,cpl不变。栈不切换如果jump指令跳转到更高特权级的一致代码段,cpl不变。栈不切换,通过调用门访问代码段,中断门/陷阱门,中断/异常的类型:256个外部中断(硬件产生)、软件产生的中断(中断指令intn)。指令执行异常(陷阱)、软件产生异常等。实模式:中断向量表(每个中断向量4字节)位于内存最低端。保护模式:idt中的描述子包括中断门、陷阱门、任务门描述子三种类型(每个描述子8字节),可位于内存任何地方,由idtr定位。门描述子中的选择子和偏移量构成中断处理程序或陷阱处理程序的入口地址(通过选择子找到段基址)。,中断门/陷阱门,任务门,在任务门描述子中,只有段选择子起作用,它指向gdt中的tss描述子。偏移量不起作用。tss是为了在发生任务切换时保存环境而设计的一种数据结构。每创建一个任务,操作系统必须为其建立一个tss。任务门可以位于gdt、idt和ldt中。tss描述子只能在gdt中。,保护模式下的内存管理,保护模式下的存储管理包含两大机制地址转换机制保护机制任务切换,存放16位的选择子,指示全局描述子表中任务状态段(tss)描述子的位置。当选择子装入tr时,相应的tss描述子自动从存储器中读出并装入tr的描述子寄存器。该描述子定义了一个称为任务状态段(tss)的存储块。每个任务都有tss,tss包含启动任务所必需的信息。,任务状态段寄存器tr,gdtr,gdt,base,limit,tr工作过程,*os为tr赋值,任务状态段tss的低位部分,任务状态段tss低位部分,由微处理器定义、维护,任务状态段tss(续),任务状态段tss低位部分,由微处理器定义、维护高位部分,由操作系统定义、维护,任务状态段tss(续),当一个任务建立时,下列静态域被建立:ldt段选择子域:包含任务ldt的段选择子。控制寄存器cr3域:包含页目录物理基地址(pdbr)。特权级0、l和2堆栈指针域:由堆栈段的段选择子和进入堆栈的一个偏移量所组成(esp0、espi和esp2)。调试自陷标志位t(第100号字节的位0):当标志位t设置,发生任务切换时引起处理器产生一个调试异常。io位图基地址域:包含一个从tss基地址开始的16位偏移量(位图偏移)。,任务状态段tss(续),任务切换期间,处理器修改下列动态域:通用目的寄存器域:eax、ecx、edx、ebx、esp、ebp、esi和edi的状态。段选择子域:es、cs、ss、ds、fs和gs的段选择子。eflags寄存器域:eflags的状态。指令指针eip域:eip的状态。先前任务连接域(反向链):tss的段选择子。,处理器切换任务的四种情况,当前程序、任务、过程执行jmp或call指令到gdt中的tss描述子;当前程序、任务、过程执行jmp或call指令到gdt或ldt的任务门;中断或异常向量指向一个idt中的任务门;当前任务执行iret

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论