版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章80386/80486微机系统
3.1当代微机系统新技术3.280386/80486CPU3.380386/80486存储器的结构3.480386/80486CPU对存储器的管理3.5特权保护和任务切换3.680386/80486微机系统3.7Pentium系列微处理器及微机系统3.8小结3.1当代微机系统新技术3.1.1流水线作业技术
1.80386/80486中的指令流水线和地址流水线图3-18位微处理器和8086/8088执行指令次序(a)8位微处理器串行次序;(b)8086/8088并行次序
要想使流水线作业成为现实,有一个十分重要的工作要做,那就是搞清一条指令究竟包括多少微操作。最简单的微处理器执行一条指令的全过程需要做的基本动作通常有:(1)在指令的指挥下,把存储单元的地址送入地址总线;(2)从存储器中取出指令操作码,把指令代码放入数据总线;(3)从数据总线上读取指令代码并对指令译码;(4)按照译码的结果把操作数的地址送入地址总线;(5)从存储器中取出操作数;(6)执行指令操作码规定的操作;(7)把操作结果送至指令指出的目的操作数;(8)送出与运算结果有关的标志信号、控制信号;
(9)在执行下一条指令前,检查有无中断申请信号等,并做出相应反应。80386微处理器使用了由3个逻辑部件(总线接口部件、代码预取部件、指令译码部件)组成的指令流水线,使得在1个时钟周期同时有3条指令的微操作在处理,每条指令执行时间虽然不同,但平均3个时钟周期就可以执行1条指令。80486微处理器有更多独立工作的功能逻辑部件,在1个时钟周期内可同时执行5条指令的微操作,这样一来,平均1个时钟周期就可以执行1条指令。80386/80486指令流水线如图3-2所示。图3-280386/80486指令流水线(a)80386;(b)80486
地址流水线技术用于解决地址信号的产生、发送以及对存储器的管理。在80386/80486微处理器内,首先要计算出有效地址,随后通过分段部件再定位形成线性地址,最后经过分页部件形成存储器的物理地址,这一过程称为该芯片的地址流水线作业,如图3-3所示。从逻辑地址向物理地址的转换,通常只在芯片内完成,和指令流水线作业同时进行且需时相同。80486内还集成有1个8KB的高速缓冲存储器Cache,使得地址流水线转换的速度更快。因此,在确定微处理器运行速度时,只要考虑相对较慢的指令流水线作业需时就够了。指令流水线和地址流水线分别是针对指令信息流和地址信息流而提出的。从计算单位时间内能执行多少条指令的角度出发,80386/80486微处理器只有一条流水作业线。图3-380386/80486地址流水线
2.Pentium系列微处理器流水线作业
1)整数运算流水线作业
Pentium系列微处理器将80386/80486的设计思想往前推进了一大步,从两个方面做出了重大的改进。第一个改进是将80386/80486内的一条流水线扩展成能够并列运行的两条指令流水线,分别命名为“U流水线”和“V流水线”。两条流水线的共同点是都能执行整数运算指令;不同点是U流水线能够执行浮点运算指令,V流水线中仅能执行1条异常FXCH浮点指令。因此,Pentium微处理器在1个时钟周期内可以执行2条整数运算指令;或者执行两条浮点运算指令,但其中必有一条是异常FXCH浮点指令;或者只能执行1条浮点指令。第二个改进是指令执行过程更加细化,根据处理对象的不同,把先后顺序执行的动作阶段划分成5~8个。比如整数运算流水作业就被划分为5个动作阶段,俗称流水线深度为5级,由相应的5个彼此独立运行的逻辑功能部件承担。表3-1Pentium微处理器3种流水线分级对比图3-4Pentium整数运算流水作业线2)浮点运算流水线作业和整数运算流水线作业比较,浮点运算流水线必然要多出对齐阶码、分开阶码和尾数的运算、检查最后结果等基本动作。因此它被划分成8个动作阶段,相应彼此独立运行的逻辑功能部件也有8个。整数流水线作业和浮点流水线作业共用了微处理器的部分功能逻辑部件,结构示意图如图3-5所示。图3-5整数流水线和浮点流水线结构3)MMX流水线作业部分Pentium微处理器芯片采用了MMX技术,这是一种使用单指令多数据(SingleInstructionMulti-Data)执行方式在整型数据上执行的并行运算技术,这些数据包装在64位MMX寄存器中。于是,MMX执行过程也有自己的流水线作业,并且被划分成9个级别,比浮点处理流水线还要多一个。MMX技术在Pentium中引进了8个64位的MMX寄存器和57条MMX指令,这些指令分为3级,包括以下功能:
加、减、乘算术移位和累加等基本算术运算;比较运算;转换数据类型,可将小的数据类型拆成大的数据类型,或者将数据压缩;与、或、与非、异或等逻辑运算;算术和逻辑移位;使用MOV指令实现MMX寄存器之间、寄存器与存储器之间的32/64位数据传送。如此众多的功能,在流水线上使用一级明显不够,与整数处理流水线相比,MMX流水线在预取指令部件IP之后,紧跟的是指令译码部件ID,确定指令长度和指令前缀,之后才选择用U流水线还是用V流水线。MMX流水线结构如图3-6所示。图3-6MMX流水线结构
同一种型号的微处理器,由于操作不同,必然存在不同类型的流水线作业,比如80386/80486的指令流水线和地址流水线就是其中的两种;而不同型号的微处理器,因为存在功能差异和结构区别,虽然有相同类型的流水线作业,却有不同的深度,并且有若干相同的流水线级,另有若干不同的流水线级。流水线深度在5级或5级以上的微处理器结构,称为超流水线(Superpipline)结构。微处理器内拥有两条或者两条以上流水线的设计技术,称为超标量(Superscalar)设计技术。这种结构和这种技术被Pentium系列微处理器广为采用。显然,流水线深度越深,超标量越多,微处理器的工作速度越快。PentiumⅡ微处理器内设置了12级深度和3条超标量流水线,使得在平均1个时钟周期内能够执行3条指令。图3-78个时钟周期内执行8条指令的示意图3.1.2预测执行、乱序执行技术和精简指令集计算技术图3-8由转移指令引起的流水线失误
预测执行技术分为取指阶段预测和译码阶段预测两种。在取指阶段的预测存在着成功和失败两种可能,无论成功与否,都可以设置一个目标缓冲器TB(TargetBuffer)记录预测的结果。显然,如果在取指阶段判断出程序走向,就能够及早发现并及时清除流水线上的无用信息,就越能发挥流水线作业的优点。译码阶段同样也可能成功或失败,预测一旦失败,必然需要更多的时钟周期恢复流水线的正常作业。为了充分发挥流水线作业的长处,Pentium系列微处理器还开发了乱序执行技术。它的实质是按数据流方式驱动,不同于传统的按指令流方式驱动。它的特征是允许指令突破程序中的指令顺序,把需要执行的指令送给执行单元。要想做到这一点,微处理器必须突破传统结构,增添一些硬件电路支持上述功能。
精简指令集计算(ReducedInstructionSetComputing)技术简称RISC技术,其核心是减少CPU芯片中指令的条数,让1条指令具备多条指令的功能,驱动更多的逻辑电路。1条指令的几个微操作既然能够并行处理,那么,能够合成1条指令的多条指令也一样能并行执行。与传统的复杂指令集计算(ComplexedInstructionSetComputing,简称CISC)CPU相比,RISC需要依靠更多的组合逻辑电路、内部通用寄存器、高性能浮点运算单元作硬件支撑,也需要依靠流水线、预测和乱序作软件支撑。3.1.3主存和高速缓冲存储技术
1.什么是高速缓冲存储技术不论哪一种微机,存储器中的指令代码和数据代码的存取速度,都不会随着微处理器的升级换代发生明显变化。这是因为,存储内容的读/写过程是一个必须先寻找存储单元的地址,再从位于这个地址的单元中读/写其内容的串行运行过程。另一方面,随着计算机的广泛运用,要求存储容量越来越大,想提高存储器工作速度就更加困难。仅以容量为128MB的内存条为例,它就有134217728个存储单元,如果微处理器进行关键字搜索操作,每处理一个关键字要把1.3亿多个存储单元访问一遍,运行速度之慢可想而知。存储器工作速度慢的两个原因是:存储器地址和内容的不一致性;存储容量大。
由于这两个因素的存在,使得当代微机中主存储器的工作速度已经比微处理器的工作速度低了一个数量级,并且速度之差有增大的趋势。由此也引出了提高存储器工作速度的方法。改变第一个因素是不可能的,除非放弃存储器的设计原理,放弃冯·诺依曼型计算机,事实上现在正在研制的神经计算机已经充分考虑了这一因素。改变第二个因素是可行的,那就是在内部存储器和微处理器之间增加一个小容量(例如8KB)的存储器,这个小容量的存储器使用同步突发静态随机存储器SBSRAM组成。它被称为高速缓冲存储器Cache。
在现实生活中不乏这样的例子。例如我们所知道的汉字,少说也有4万多个,为了使用方便,人们将它们汇集在《汉语大字典》、《康熙字典》(共收录47035个汉字,分为214个部首,12集,每集再分上、中、下三卷)等工具书内,这些工具书无疑就是存储器。学习中遇到一个生字时,就去访问它们,从字典中查出该字的读音、笔划、含义等相关的信息。但是从这4万多字的字典中查找1个字的速度太慢,因为其中有3万多个字不常用,绝大多数人一辈子也不会遇到它们。所以提高查阅速度的最好方法是将其中可能用到的1.1万个汉字汇集编成一本《新华字典》,访问速度大为提高。对于一些特殊人群来讲,还可以将其中的两级汉字6763个(一级汉字3755个,二级汉字3008个)编在一起供小学生或扫盲班使用。更有甚者,将汉字中三、五十个字配上图画做成识字卡片供幼儿习字用。
高速缓冲存储器Cache的功能就相当于《新华字典》或《小学生字典》,它的位置就位于微处理器和内存条之间。它的容量比内存条小得多,仅8KB(8196个存储单元)~64KB。它存放的内容是微处理器用得最多的、急需执行的指令和数据。增添Cache能提高存取速度是显而易见的,微处理器搜索8196个单元比搜索1.3亿多个单元不知要快多少倍。
Cache的个数可以是一个,叫1级Cache(简记为L1);也可以是两个:第1级Cache和第2级Cache(简记为L1和L2)。如果微机内有2级Cache,第1级Cache的容量小,存取速度快,所处的位置甚至于就可以集成到微处理芯片内,存取速度与微处理器同速;第2级Cache的容量比L1大一些,相应的存取速度比L1慢,比主内存快,当然也可以集成到微处理芯片内,做到与微处理器基本同速。微机系统中各种存储器及寄存器对信息的存取速度和相应的存储容量之间的对比关系如表3-2所示。表3-2Cache位置和寄存器存储器存取速度和存储容量比较
2.Cache1)Cache的操作规程
Cache的引入应当遵循如下的操作规程:微处理器要访问存储器的时候,首先检查要读取的指令或数据是否在Cache中。若在,就近从Cache中读取;如果不在,则访问主存储器,从主存储器中去读取。这一过程同我们使用《新华字典》和《汉语大字典》查阅字词信息的过程完全一样。从《新华字典》和《汉语大字典》的发行量对比可以看出,这种快速查阅信息的方法获得了巨大的成功。Cache能够获得成功吗?答案是可能成功,也可能失败,关键是Cache中存放的内容是不是微处理器所需要的。如果是,则可加快存储器的工作速度;如果不是,则只能延长存储器的存取时间,还不如去掉Cache。Cache的有效性源于局部区域性原则,该原则又源于程序在存储器中的依次存放规则。原则的主要内容是:程序对存储器的访问在时间和空间上都局限在某一段区域内。考查微处理器执行一段程序的全过程,不难发现当微处理器需要访问指令代码和数据代码时,它所访问的只是存储器的一小部分或是几段固定区域,如果某存储单元被访问,那么近期内该单元的临近单元可能被访问,该单元自身在短期内也可能还会再次被访问。只要事先将该程序或该段区域的代码调入Cache,使得微处理器只需访问Cache就能满足程序执行的要求,而不必去访问主存储器,取指令和数据的工作速度就能跟上微处理器的工作速度。Cache的无效性源于转移类指令的存在,如果转移类指令的目标地址偏移量超出Cache的容量,目标代码和转移类指令代码不能同处于8KB的Cache内,微处理器就不得不去访问128MB的内存条。好在转移类指令在程序中出现的概率约为1/7(由统计规律得到),使得Cache的有效性大约为85%左右。为降低Cache的无效性,在遇到转移类指令情况下,微处理器访问内存的同时,把目标代码局部区域的内容填入到Cache中,这些新内容恰恰是微处理器即将需要的指令代码,下一次的取指操作必然有效,Cache才可能完全获得成功。2)Cache的常用术语
(1)Cache命中:Cache控制器要检查微处理器发出的地址信号,判断微处理器所要访问的地址单元是否在Cache中,如果在,则称为Cache命中。Cache如果命中,则表明微处理器要读取的指令代码和数据代码位于Cache中,微处理器就能高速对Cache完成读/写操作。只有命中,才能使Cache有效,达到引进Cache、提高存储器工作速度的目的。
(2)Cache未命中:Cache控制器检查微处理器发出的地址信号时,判断地址单元不在Cache中,称为Cache未命中。这时指令代码和数据代码不在Cache中,Cache无效,微处理器就要去访问主存储器。如果主存储器访问成功,就应当把本次访问相邻近的存储区域内容复制到Cache中,保证下一次不再访问主存,直接访问Cache命中。(3)映射:把内存一段区域的内容复制到Cache中,通常以页为单位进行。高速缓冲存储器中各页存放的位置与主存储器中相应的存放位置有一一对应的关系,这种对应关系称为映射。高速缓冲存储器Cache的管理办法由映射关系决定。目前在微机系统中使用的映射关系有三种:全关联方式、直接映射方式和分组关联方式。例如80486采用的就是分组关联方式(4组)。无论哪一种映射关系,都要确保内存一段区域内容正确复制到Cache中,便于在未命中后的下一次访问一定命中。
(4)命中率:若干次访问中Cache命中次数与访问次数之比,用百分数表示,又称命中概率。一般情况下命中率超过95%(含二次命中)才算正常,否则就失去了添加Cache的意义。(5)内容一致性:Cache的内容从主存储器一段区域的内容复制而来,说明Cache保存的是主存储器某部分的一个副本。这样,同一指令代码或数据代码在微机系统内存在两个拷贝,一个在主存储器中,一个在Cache中。如果其中有一个被改写,另一个还原封不动,就会出现同一地址有两个不同的副本,微处理器执行读/写时就容易出错。因此保证两个完全相同的副本就显得至关重要。在微处理器“读”的时候,Cache要事先接收主存储器一段区域的内容;在微处理器“写”的时候,Cache首先被改写,要及时把改写后的Cache内容回写到主存储器的某段区域内。3)Cache的结构
Cache的结构服从于它的工作机制——局部区域性原则。这一原则由两个因素决定:第一,程序自身具有顺序、分支、循环等三种不同结构;第二,程序数据块在存储器中按指令代码的顺序依次存放。如果在程序中因转移指令、中断指令或调用子程序指令而发生了长距离转移,CPU也会遵循局部区域性原则。这是因为第一次Cache必然未命中,接着就会对内存进行访问,在访问同时要把相关内容复制到Cache中,第二次Cache必然命中。Cache在结构上划分成三大功能块:高速缓冲、地址索引、置换控制。高速缓冲功能块是Cache的主要组成部分,用于存放从内存拷贝过来的内容。地址索引功能块完成地址比较,把微处理器送出的地址信号高位部分与存放在自身内部的地址标记进行比较,判断Cache是否命中。为使其比较快速地进行,地址索引功能块由按内容存取的存储器构成,而不是用按地址存取的常规存储器构成。置换控制功能块承担调页换页的任务,用于Cache和内存之间的代码传送,保证同一代码两个副本的一致。
Cache的结构因读/写的需要可以分成两种不同的工作状态,读状态和写状态。每种状态可以分别用两种方案实现。无论哪种方案,它们都服从局部区域性原则。(1)处于读状态时的Cache:读结构可以分成“旁观”(LookAside)和“综观”(LookThrough)两种。第一种,旁观。
Cache使用“旁观”方案的结构图如图3-9所示。Cache的作用是一个旁观者,它和内存共同观看到一个总线周期。当微处理器开始一次“读”总线周期时,Cache和内存同时接受访问。Cache的地址索引功能块开始比较地址,目的为了确定Cache是否命中。如果命中,微处理器所要的指令代码就在高速缓存中,Cache不会继续旁观而是响应“读”总线周期并终止该总线周期,对内存的访问也同时被终止。微处理器转入下一个总线周期让高速缓存中相关内容放入数据总线。如果未命中,Cache始终就是一个旁观者,就由内存响应“读”总线周期并终止该总线周期,微处理器转入下一个总线周期,内存中相关内容一方面进入数据总线,另一方面,同时进入Cache的高速缓存功能块,以便下一次启动“读”周期时保证Cache命中。使用“旁观”方案构成的Cache,由内存和Cache共同对总线周期予以监视。如果属于Cache未命中,则微处理器从内存中读数就如同没有Cache一样进行,故而不会因为Cache未命中影响“读”速度。这种结构的缺陷是:当总线正在对内存访问时,其它任何芯片,包括微处理器在内都不能访问Cache,因为此刻总线已经被占用。图3-9Cache旁观结构图3-10Cache综观结构
第二种,综观。
Cache使用“综观”方案的结构图如图3-10所示。Cache的作用是通观总线周期的全过程,无论Cache是否命中,从微处理器产生的总线周期只有在Cache的“观察”下才能到达系统总线。当微处理器开始一次“读”总线周期时,只有Cache接受访问。Cache的地址索引功能块开始比较地址,目的是为了确定Cache是否命中。如果命中,则微处理器就从Cache的高速缓存中读数,读数过程和内存无关。如果Cache未命中,则由Cache将总线周期送至系统总线,从头开始对内存寻址。一旦内存寻址成功,内存将要读的数据送入系统总线。送达微处理器,并拷贝给Cache,确保微处理器下一个总线周期请求该数据信息临近的数据项时实现Cache命中。(2)处于写状态的Cache:“写”操作是指把数据信息从微处理器送到存储器存放。由于Cache容量小,能跟得上微处理器的工作速度,而内存工作容量大、速度慢。因此当“写”操作一旦发生,往往是Cache首先被改写。Cache一旦改写,必然要求内存随着改写,否则只会出现同一地址的两个不同副本,导致总线运行错误。Cache改写以后,从Cache拷贝到内存就有通写(WriteThrough)和回写(WriteBack)两种不同的写法。
第一种,通写。当微处理器启动一次“写”总线周期时,数据从微处理器首先写入Cache,随后立即继续写到内存的对应位置上,这种写数据的方法称为“通写”。其特点是数据写到内存之前,写总线周期不会被终止。通写的优点是显而易见的,由于Cache的内容只要一更新,立即就传送给内存,因此内存随时能跟踪Cache的变化,保持两个副本的一致,用不着担心Cache更新后的内容会发生丢失。通写的缺点是:每次Cache一更新,内存就紧跟着写入,它们都占着总线操作时间,必然使总线操作过于频繁,在多处理器系统中占用总线时间过长必然影响操作速度,而且内存并没有必要每次都随时紧跟Cache。为此有一种缓冲通写的改进方法,就是每次内存随时紧跟的数据暂时先在缓冲器中保存。在“写”总线周期结束之前,微处理器可以启动下一个周期,若下一个周期是“读”周期,并且Cache命中,则从Cache的“读”操作和上一个周期未完成的从Cache写向内存的动作就可以并行进行;若Cache未命中或下一个周期继续是“写”周期,微处理器只能等待,缓冲通写的方法也不会有效果。
第二种,回写。当微处理器启动一次“写”总线周期时,数据从微处理器写入Cache,Cache接收数据并终止总线周期。随后微处理器将继续执行别的工作。Cache接收的数据在系统总线有效的时候拷贝到内存。由于不是在“写”总线周期内完成的,而是在“写”总线周期结束以后的其它总线周期内完成的,因此称之为“回写”。回写能与其它总线周期的动作并行进行。这种写法,节省了系统总线的操作,但显然总有一段短的时间内,同一地址的Cache和内存上有两个不同的副本。为了避免存在两个不同副本操作上的失误,在Cache的地址索引功能模块的地址标记TAG字段上设置了一个更新位(TAG是一个标记,用于指定当前微处理器发送的地址信号与Cache中的一个数据块相联)。Cache和内存的两个副本不同时,更新位为“1”;Cache和内存的两个副本相同时,更新位为“0”。于是,在微处理器启动“写”总线周期要将Cache的内容更新时,置换控制功能块就会首先查看TAG更新位。当查知TAG更新位为“0”时,Cache就会首先被改写;当查知TAG更新位为“1”时,置换控制功能块就会先将Cache现有的内容拷贝到内存,待TAG更新位变为“0”后,才允许Cache被微处理器更新。TAG更新位的设置和控制,可靠地保证了回写成功。3.1.4虚拟存储技术随着微机的应用领域越来越广泛,程序和数据日渐增大,要求新型的微机存储器容量也要增大。但是,存储容量的增加要受到地址总线宽度的限制,如Pentium4的地址总线就已经增至36根,最大能寻址空间236B=64GB。如果该机固定配置一个64GB的存储器,就会使得一些用户用不完,造成浪费,另一些用户不够用。对前一种用户,可以采取实际配置的物理存储器容量小于存储空间的办法。但对后一种用户,面对系统程序、大型应用程序以及多道程序日渐增大且要正常运行,不能采用“增加微处理器的地址总线根数和集成超大容量的内部存储器”这种方法,之所以不能从根本上解决,是因为:其一,微处理器对外有三组总线,都需要分配引脚,地址总线宽度不能无限增加;其二,微机内部存储器由半导体存储器构成,受制造工艺、体积和成本的限制,存储容量也不能无限增加。
在叙述什么是虚拟存储技术之前,先解释下列专业名词。虚拟:假想,实际不存在的东西。地址空间:CPU地址总线能够寻址的范围。物理存储器:是微机内的主存储器,一个由存储芯片构成的硬件电路,实际存在的微机5大组成部分之一。物理存储器实际配置的容量往往不大于地址总线最大寻址空间。虚拟存储器:是一个假想的、虚构的、没有物理介质实现的存储器,是存在于人们头脑中的一个概念,微机中没有相应的虚拟存储器硬件电路。和物理存储器一样,虚拟存储器的每一个存储单元相应地也有自己的存储内容和单元地址。
物理地址:又名实际地址或实地址,是物理存储器每一存储单元的地址。逻辑地址:又名虚拟地址或虚地址,是虚拟存储器每一存储单元的地址。进程:每个程序的执行过程。任务:程序指定微处理器和存储器承担的工作和责任。
MMU:MemoryManagementUnit,又称为虚拟存储器管理部件,是80X86微处理器内的一组硬件电路,能把程序的逻辑地址(虚拟地址)转换成主存的物理地址(实际地址)。按地址转换关系把外存(硬盘、光盘等)的程序指令代码和数据代码逐步地、及时地调入到内存(物理存储器)中。
多道程序并发系统:微机中有多个程序要运行的系统。假设有一个应用程序,字节数长达9GB,按照传统的观点,这个应用程序是没有办法在80386/80486微机上运行的,因为该机配备的物理存储器最大存储容量仅为232B=4GB。为了在该机上运行地址空间超过物理存储器容量的程序,不妨在我们的头脑里像做梦一样想象有一个容量大到64TB的虚拟存储器,这样,这个9GB的应用程序就可以存放在那个64TB的存储器中了。图3-11画出了有虚拟存储器的微机系统执行程序时的运行示意图。在需要运行大程序的时候,由位于微处理器内的MMU电路及时分批地把9GB的大程序送入4GB的物理存储器,每次送入的程序段容量都必须小于物理存储器的存储容量,这样,送入物理存储器的一段在运行之后予以清除,及时把这一段后面的程序块调入继续运行,直到把大程序全部运行完毕为止。图3-11有虚拟存储器的微机系统运行9GB的大程序不可能放在人们脑海里,需要具体物理介质组成的存储电路存放,那么它到底放在哪里?答案是放在外存(硬盘、磁盘、光盘等)中。或者说,在微机系统中,外存不是以一个独立组成电路的身份出现,而是以虚拟存储器的形式起作用。只有内存(俗称内存条)才是微机系统的一个独立组成电路,虚拟存储技术一旦切实可行,作为物理存储器的内存也没必要配置4GB(配的越多,用户掏钱越多),例如只配128~512MB就可以分批接收来自虚拟存储器的信息。“及时分批地”从虚拟存储器向物理存储器传送代码,实质上是正确地将虚拟地址转换为物理地址。地址转换由MMU中的地址映射方式完成,地址映射方式通常有页式、段式和段页式3种,无论哪一种,都是在程序执行过程中动态实施的,只不过不同的映射方式有不同的转换表格驻留在内存中,它们的转换函数也不相同。完成一个进程通常需要代码段、数据段、堆栈段和附加段。由于汇编语言程序设计采用了分段结构,使得一个进程的各段逻辑地址空间彼此相互联系、又相对独立,因此在进程运行时,MMU必须把这些相对独立的逻辑段组织到一起,才能正确地进行地址转换。
虚拟存储器的存储容量能不能无限制增大?答复是不能。这是因为微处理器提供的地址总线宽度不能无限大,导致MMU对虚拟存储空间寻址不能无限大;其次,实际存放多道大型程序的外存也不能无限大。多个程序在虚拟存储器中存放、访问和传送,应当由MMU赋予不同的特权、受到不同程度的保护。在多个任务都要涌向物理存储器时,MMU理应正确地进行任务切换。综上所述,可知虚拟存储技术是在存储体系层次结构基础上,通过硬件和软件的配合,在实际存储器容量没有增加的情况下,扩大用户可用存储空间的一门计算机存储新技术。这门技术,不是伴随微机对存储容量不断增加的要求而发展的,而是微机系统借鉴大中型计算机的成功经验而引进的。把这门技术应用到微机系统上,是否能获得成功的关键问题是:MMU如何去管理好一虚一实这两个性质不同的存储器。3.280386/80486CPU3.2.1
80386CPU1.内部功能结构
80386CPU内部功能结构如图3-12所示,内部由能够并列运行的总线接口单元、代码预取单元、指令译码单元、存储器管理单元、指令执行单元和控制单元等逻辑单元组成,这些单元的运作构成了一条指令流水线作业。图3-1280386CPU的内部功能结构1)总线接口单元BIU
总线接口单元BIU是CPU与外部电路交换信息的窗口,它的主要功能是驱动地址总线、数据总线和控制总线,在取指令,取数据,接收分段请求、分页请求等一系列基本操作中实现CPU对3组总线的控制。由于80386CPU的地址总线和数据总线分开使用,避免了分时合用,因此最快能在两个时钟周期内从内存中存取32位数据。在BIU内还设计有流水线/总线宽度控制电路,使得流水线作业过程中,能够在完成当前总线操作前,形成下一个新总线周期的地址。此外,总线采用动态结构,能够按照需要改变地址和数据宽度,既支持16位操作也支持32位操作。2)代码预取单元代码预取单元的功能是预先从存储器中取出指令代码并送到一个16字节的预取队列中,便于指令译码单元将其译码。该单元中的预取器/界限校验器电路用作预取指令的指针以及检验是否违反分段界限,它们的内容来自分段部件。代码预取单元通过分页部件向总线接口单元发送预取总线周期请求信号,这个信号的作用就是从存储器取出代码并保证指令队列装满,它的优先级别比较低,既低于存取操作总线周期请求信号,又低于页面未命中时的处理周期请求信号。3)指令译码单元指令译码单元的功能是从16字节指令队列中取出字节进行译码,以确定是什么操作,译好的码暂时放在“已译好码的指令队列”中,随时供给指令执行单元使用。该队列能容纳3条指令的操作码。指令译码单元对操作码译码需时一个时钟周期。
4)指令执行单元指令执行单元的功能是执行指令,它由桶型移位器、ALU、乘除硬件队列、寄存器组组成。对于每一条指令,并不是所有的功能队列都需要启动,不同的指令只启动与该指令相关的操作电路。存放在指令译码单元“已译好码的指令队列”中的指令微代码,已经含有诸如操作数的起始地址、数据类型、算术或逻辑运算的运算符、所需要用到的寄存器或存储单元地址等微信息。5)控制单元控制单元由译码时序和控制ROM电路组成,它实际上是一个微代码的驱动机构,实现对ALU的操作控制。
6)存储器管理单元MMUMMU由分段部件、分页部件和特权保护部件组成。分段部件的任务是实现虚拟地址向线性地址的转换。分页部件的职责是完成线性地址向物理地址的转换。特权保护部件用于程序段的特权级别保护和任务之间的隔离与切换。MMU有3个管理目标:完成虚拟地址转换为物理地址;给每一个任务段以一定级别的特权保护;正确地实现任务切换。2.内部寄存器表3-380386CPU内部寄存器一览表1)通用寄存器通用寄存器有8个,如图3-13所示,分别是累加器EAX、基址寄存器EBX、计数寄存器ECX、数据寄存器EDX、堆栈指针ESP、基址指针EBP、源变址寄存器ESI、目的变址寄存器EDI。它们的作用有通用和专用(隐含使用)两种。所谓“通用”是用于存放参加运算的数或存储单元的地址,支持8、16和32位操作数,1~32位字段以及16位、32位地址操作数。它们的低16位可作16位寄存器使用,分别命名为AX、BX、CX、DX、SP、BP、SI和DI,共8个。此外还使用8个8位寄存器AH、AL、BH、BL、CH、CL、DH和DL存放字节数据。所谓“专用”限于操作数所用到的特定用途,如表3-4所示。图3-1380386通用寄存器、段寄存器和专用寄存器表3-4通用寄存器的专用用法2)段寄存器代码段寄存器CS定义了存储器代码段的起始地址。在实地址方式下CS给出了一个64KB代码存储段的基址;在保护虚拟地址方式下,CS的内容是一个16位的选择子,该选择子用于选择一个描述符,描述符中含有描述一个代码段的相关参数,包括代码段的基址、段界限和段的属性。DS、SS和ES的功能与CS类似,仅DS定义的是数据段,SS定义的是堆栈段,ES定义的是附加段。FS、GS是80386及80386以上的CPU中新增加的两个附加数据段,其用法和功能同于ES。3)专用寄存器专用寄存器有指令指针EIP和标志寄存器EFLAGS,每个32位。
32位指令指针EIP用于指向下一条要执行指针的偏移地址,与偏移地址配对使用的是存放于CS中的代码段基址或CS选择子所选中描述符给出的段基址。实地址方式使用低16位的IP,保护虚拟地址方式使用32位偏移量。编程人员不能对EIP进行直接存取操作,EIP或IP不能成为任何指令格式中的目的操作数或源操作数,但转移指令、返回指令、中断指令等能使EIP得到新的值。在程序执行过程中,EIP或IP的值具有自动加1的功能。32位标志寄存器EFLAGS用于指示指令操作后的状态和控制CPU的一些特定操作,如图3-14所示。标志寄存器只定义了14位,其中状态标志位6位(C、P、A、Z、S、O),控制标志位8位(T、I、D、IOPL、NT、RF、VM)。与8086/8088CPU的FLAGS相比较,80386CPU增加了5个标志位,这些标志位仅适用于保护虚拟地址方式。图3-1480386EFLAGS
第12、13位IOPL(Input/OutputPrivilegeLevel):I/O特权级标志位,用于指示I/O设备的特权等级,两位代码确定0~3共4级特权,其中00的特权级最高,11的特权级最低。如果当前特权级CPL(CurrentPrivilegeLevel)高于IOPL,则I/O指令能顺利执行,否则产生异常13,将需要执行的任务挂起。第14位NT(NestedTask):嵌套任务标志,用于指示位于嵌套中的任务状态。使用中的返回指令IRET可以检测出此标志,确定任务内返回还是任务间返回。
第16位RF(ResumeFlag):恢复标志,与调试寄存器一起使用。调试中处理断点前在指令边界上检测该位,若置位则忽略下一条指令的调试故障,并在指令执行完毕后使RF自动复位,但JMP、CALL、INT、IRET、POPF等指令除外。第17位VM(VirtualInterrupt):虚拟8086方式标志,为1时表示CPU正工作于虚拟8086工作方式。当CPU工作在保护虚拟地址方式下,且现行特权级为0时,执行IRET指令可使VM置1,CPU进入虚拟8086方式。4)段描述符寄存器段描述符寄存器又称为描述符高速缓存器Cache,共有6个,每个64位,与6个段寄存器对应,如图3-15所示,提供段的基址、段界限(长度)和段属性。当段寄存器的选择子用送数类或转移类指令时,段描述符寄存器中的段基址、段界限和段属性都将按照选择子所寻找的描述符进行修改,直到修改成一个合适的值,参加存储器的存取访问。3个相关参数中,32位段基址提供的是线性空间的基址,20位段界限指出了当前所用段的长度,12位段属性反映了段的访问特征。图3-15段选择子和段描述符寄存器5)状态控制寄存器
4个状态控制寄存器的名称是CR0~CR3,每个32位,用于实施对80386CPU的多种功能选择,相应各位如图3-16所示。图3-1680386状态控制寄存器表3-5CR0中6位预定义标志一览表CR1未定义,留作备用。
CR2名为页故障线性地址寄存器,用来存放页故障中断发生前最后一个页面(32位)的线性页地址,该故障属异常14。
CR3名为页目录基址寄存器,存放页目录表的物理基地址20位,鉴于页目录表按页对齐(1页=4KB),因此只使用高20位,低12位未用。6)系统地址寄存器
80386CPU的4个系统地址寄存器如图3-17所示,用于存放操作系统所需的保护信息和地址转换信息。GDTR名为全局描述符表寄存器,48位,保存全局描述符表GDT的32位线性基地址和GDT的16位界限。IDTR名为中断描述符表寄存器,48位,保存中断描述符表IDT的32位线性基地址和IDT的16位界限。在保护方式下,CPU使用称为“描述符”的数据结构描述存储器操作数所在段的性质。“描述符表”就是系统中所有描述符的集中存储,对于存放在存储器中的“描述符表”,其地址需要寻址和定义,GDTR和IDTR就是存放其基地址和属性的寄存器。TR名为任务状态寄存器,16位,存放任务状态段TSS的16位选择子。任务状态段TSS是物理存储器中有别于代码段、数据段、堆栈段、附加段的一个存储段,容量固定为104B,存放用于任务切换的环境,该段的选择子就在TR之中。LDTR名为局部描述符表寄存器,16位,存放局部描述符表LDT段的16位选择子。LDT段是物理存储器中不同于代码段、数据段、堆栈段、附加段、任务状态段的一个数据存储段,这个段的选择子就在LDTR中。图3-1780386的系统地址寄存器7)调试寄存器和测试寄存器图3-18调试寄存器和测试寄存器3.80386的引脚功能图3-1980386CPU引脚信号功能1)数据总线D0~D31
数据总线D0~D31上传送的是三态双向数据信号,它是CPU与其它芯片交换数据的通道。数据总线的宽度可由控制线BS16调整,使得数据可在32位或低16位的总线上传送。读数据时要满足所读数据的建立和保持时间,才能避免误读。在写数据、暂停和停机周期内,80386总是驱动32位数据总线信号,不管当前总线的宽度是32位还是16位。2)地址总线A2~A31,地址总线上的信号是三态输出信号,30条地址线A2~A31和4条字节允许线共34条(目的是为了向上兼容),对外提供32位地址总线,用于寻址4 GB物理存储空间(00000000H~FFFFFFFFH);使用16条地址线寻址64KBI/O端口(0000H~FFFFH)。数值协处理器的寻址使用I/O空间,地址范围为800000F8H~800000FFH,即A31=1且M/IO=0。I/O端口采用独立寻址方式,由控制线M/IO选择。字节允许线 用于选通数据总线上哪些数据线参与数据传送。BE0选通D0~D7,选通D8~D15,选通D16~D23,BE3选通D24~D31。3)控制总线表3-680386CPU控制总线一览表表3-680386CPU控制总线一览表表3-7表3-6的附表4)电源线
VCC,+5V电源;GND,地;CLK,时钟输入,由时钟发生器82384产生并经二分频后产生执行指令所需的内部处理器时钟。内部时钟包括φ1、φ2两相,每一相内部时钟都是一个CLK周期。3.2.280486CPU1.内部功能结构图3-2080486CPU内部功能结构80486CPU内部由8个功能部件组成,除了80386CPU的6个单元外,还集成了一个浮点运算单元FPU和一个8KB高速缓冲存储器。而且,80386CPU与FPU之间数据总线宽度为64位,与Cache之间数据总线宽度为128位,允许BIU从外部总线一次将16个字节数据读至高速缓冲部件。80486CPU与80386CPU相比,相类似的6个单元(总线接口、代码预取、指令译码、存储器管理、指令执行和控制)相应都作了一些改进,增强了一些功能,这样,80486具有80386的所有功能,而且能在流水线作业中处于更佳的工作状态。
2.浮点运算单元FPU
浮点运算单元FPU与协处理器80387完全兼容,但由于FPU扩充了功能,又处于80486内,内部总线加宽,引线缩短,因此处理速度比80387还要快3~5倍。
1)80387支持的数据类型
80486支持无符号二进制数、有符号二进制定点整数、浮点数、BCD数、数据串、ASCII码数据和指针数据共7种数据,其中数学协处理器80387支持有符号二进制定点整数、浮点数和压缩BCD数共3种数据类型,如表3-8所示。表3-880387支持的数据类型图3-2180387支持的整数格式
实数是实型数的简称,所谓实型数是指小数点浮动的浮点数。80387所支持的3种实型数格式如图3-22所示,每种实型数浮点表示分为阶码和尾数。短实型数32位分配为:阶码8位(符号位1位、数值位7位)、尾数24位(符号位1位、数值位23位),因此它所能表示数的范围就是-1.11…1B×2-1111111B~+1.11…1B×21111111B,或近似为-2×2-127~+2×2127或-3.39×10-38~+3.39×1038
图3-2280387浮点数的格式
上面尾数表示1.11…1B中,小数点后有23个1,是23位尾数数值位的最大值,小数点前面的“1”是隐含值,不在短实型数和长实型数中占1个二进制位。长实型数64位分配为:阶码11位、尾数53位。临时实型数80位分配为:阶码15位、尾数65位,但与短实型数、长实型数稍有不同的是,第63位固定为1,尾数没有隐含值。
80387支持的BCD码为80位的压缩BCD数,在内存中占10个字节,其中最高1个字节作符号字节规定该字节的最高位作符号位,且该位为0表示正数,为1表示负数。余下还有9个字节可以表示18位压缩BCD数。2) FPU的运行机理
80387兼容IEEE-754标准,内含8个80位数据寄存器R0~R7、3个16位寄存器和2个48位指针(FPU指令指针和FPU操作数指针),如图3-23所示。R0~R7在浮点运算时用于存放参加运算的浮点数。允许使用两种方法访问这些数据寄存器,一种是堆栈方式,一种是寄存组固定方式随时进行。不同的访问方式由不同的指令实施。图3-2380387的内部寄存器3个寄存器分别为控制寄存器、状态寄存器和标记字寄存器。控制寄存器存放输入的控制字,字格式为:状态寄存器存放80387的状态,供80386/80486读取,字格式为:
标记字寄存器用于标记R0~R7是否有空,每2位标记一个数据寄存器是否处于空闲状态,16位标记依次为TAG(7)~TAG(0)。当80387识别标记字寄存器的16位状态时,就可以知道R0~R7谁是空的,从而控制堆栈方式操作。
2个指针分别是指令指针和操作数指针,它们存放的是发生故障的指令地址和操作数地址,48位长度内含16位CS选择子和32位偏移地址。3.内部寄存器
80486CPU内部寄存器除FPU浮点寄存器组外,还将80386内部寄存器进行了扩充。
(1)增加了3个用于调试Cache的测试寄存器TR3、TR4和TR5,其中TR3为Cache数据寄存器,TR4为Cache状态检测寄存器,TR5为Cache控制检测寄存器。
(2)将80386CR0的6位控制位作了如下修改:第4位ET(处理器扩充类型)不再使用,作置1处理。原有5位控制位PE、MP、EM、TS、PG继续使用。另外扩充了5位:
第5位NE(NumericsException),数字异常控制位,置1时若执行FPU指令则将产生异常16;第16位WP(WriteProtect),写保护控制位,置1时对管理程序读取的页写保护;第18位AM(AlignmentMask),对准屏蔽控制位,置1时EFLAGS中的AC位有效,否则无效;第29位NW(NetWrite-through),非通写控制位,置1时片内Cache为通写方式;第30位CD(CacheDisable),禁止Cache位,置1时若Cache未命中则禁止回填Cache,置0时若未命中则允许填充Cache。(3)对标志寄存器EFLAGS,80386使用了13个标志,80486除继续使用之,还增加定义了1个标志:第18位A(AlignmentCheck),对准检查标志,在访问字或双字时,查看地址是否处于边界。置1时表示地址不在边界。4.80486CPU引脚功能
80486CPU有168条引脚,提供101条功能信号,如图3-24所示。按功能可分为4组:双向数据线32条、地址线34条(提供32位地址线)、控制线32条、电源线3条。
34条地址线由30位地址线A2~A31和4位字节允许信号 引出,对外提供32位地址总线。80486的数据线和地址线都与80386相同,控制线从17条增加至32条,除80386外接协处理器的控制线不再引出外,其它总线周期定义、总线控制、总线仲裁、中断等信号线依然具备,且功能相同。
5.小结与8086/8088相比,80386/80486CPU有了质的飞跃,主要表现在以下方面:
(1)地址总线宽度为32位,使物理存储器可寻址空间达4GB。
(2)数据总线宽度为32位,寄存器也以32位为主,80386/80486微机成为32位微机。
(3)发展了虚拟存储概念,不仅使虚拟存储器可寻址空间达64TB,而且使编程人员建立起一个全新的观念:在按虚拟地址编程过程中,物理存储器仅仅只是暂时存放代码的一个存储空间。
(4)8086/8088存储器只常用4个段,而80386/80486物理存储器使用了8个段,如表3-9所示。表3-980386/80387物理存储器的段(5)80386/80486有3种不同的工作方式。一是实地址方式,这种方式下的80386/80486等同于一个高速的8086/8088。二是保护虚拟地址方式,这种方式下的80386/80486认可4GB物理存储器和64TB虚拟存储器,存储器按段和按页面组织。每段的长度不固定,当粒度位G=0时,1段=1B~1MB;当粒度位G=1时,1段=1页~1M页=4KB~4GB。每页长度固定为4KB。64TB虚拟空间允许每个任务最多可使用16K个段。三是虚拟8086方式,认可虚拟空间的高速8086工作方式。
(6)增加了由分段部件、分页部件组成的存储器管理系统,建立了虚拟地址、线性地址和物理地址之间的映射关系。(7)使用4级特权保护机制,引用调用门、中断门和陷阱门完成不同特权级之间的切换。
(8)建立了多用户、多任务之间的关系,使用访问任务段和访问任务门完成不同任务之间的切换。
(9)芯片内部结构通过采用RISC(ReducedInstructionSetComputer,缩减指令系统计算机)技术,使芯片上非规则控制布局减少,提高了指令执行速度。3.380386/80486存储器的结构3.3.1物理存储器寻址
80386/80486物理存储器的基本存储单元为一个字节,内容为8位二进制数,最大物理空间为232 B=4 GB,允许指令代码和数据代码以字节、字、双字或4字的格式存放。多字节数据的存放规则是低字节进入低地址,高字节进入高地址,且低字节的地址是多字节数据的访问地址。CPU有三种不同的工作方式:实地址方式、保护虚地址方式和虚拟8086方式。不同的工作方式有不同的物理存储器寻址方法,下面分别叙述。
实地址方式的操作原理和寻址与8086/8088CPU完全相同,每一存储单元的地址,既可以使用20位物理地址表达,又可以用“段基址:偏移量”表示:20位物理地址=16位段基址×10H+16位偏移量
32位地址线中只有20位地址线A19~A0起作用,A31~A20无效,最大物理空间也只有220B=1MB,地址编号×××00000H~×××FFFFFH,4GB的其它空间没有作用。实地址方式仅仅使用了1 MB地址空间,并不等于物理存储器只有1MB。为了兼顾其它两种工作方式的需要,系统实际配置的存储容量通常会远远多于1MB,这样一来,将出现很大的地址重叠区。寻址超过1MB时将产生异常13。编程时需要避开4GB的最高、最低两个存储空间,它们有专门用途。低地址00000000H至000003FFH的1KB区域为中断向量区,存放着256个向量的中断向量表。每一个向量号占用4个字节,里面是中断服务程序的入口地址——16位的偏移量和段基址。高地址FFFFFFF0H至FFFFFFFFH共16B区域是初始化预留区,CPU上电或复位后,地址总线A31~A16为FFFFH,CS的值为F000H,IP的值为FFF0H。所以上电或复位后微机总是从FFFFFFF0H单元开始执行,必须在该单元内设置1条段间跳转指令,转至执行程序入口。此外,由于实地址方式下每个段的最大地址空间为64KB,因此存放偏移量的32位寄存器值必须小于0000FFFFH,否则将发生差错。
保护虚拟地址方式下,物理存储器的最大寻址空间为232B=4GB,地址编号00000000H~FFFFFFFFH。寻址方式有2个特征:先生成线性地址,再生成物理地址;两个地址都采用基址加偏移量的方法,只不过生成线性地址由MMU的分段部件完成。基址又名段基址。段基址和偏移量都是32位,计算公式如下:32位线性地址=32位段基址+32位偏移量
生成物理地址由MMU的分页部件完成,基址有页基址20位,偏移量12位,计算公式如下:32位物理地址=20位页基址×1000H+12位偏移量由于段寄存器只有16位,因此在生成线性地址时,32位段基址只能放在存储器中,为此引入描述符(Descriptor)的概念。描述符是一种存放在内存条中的数据结构,一个描述符由64位二进制数组成(其中含有32位段基址),占内存8 B。按多字节数据存放规则,只需访问最低字节就能访问此描述符。8K(=213=8192)个描述符集合成了一个描述符表,占内存64KB(表内地址编号0000H~FFFFH)。从描述符表中寻址一个描述符需13位地址,通常16位选择子(即段寄存器)的D15~D3专用于存放此13位地址信号,又称为“段号索引DI”。表3-1016位选择子的D15~D3和描述符首址对应关系表
每个描述符寻址地址的低3位为000,高13位与13位段号索引完全相同。在需要寻址的时候,把16位选择子装入段寄存器段(在代码段中用转移指令和调用指令装入,在数据段中用数据传送指令装入),相应电路根据13位段号索引确定出8192个描述符中的一个,并把描述符的64位内容装入段描述符寄存器,随后从段描述符寄存器中取出32位段基址,与32位偏移量相加,生成32位线性地址。所谓线性地址是一个中间地址空间的地址,是一个不分段的连续地址,是介于逻辑地址和物理地址之间的过渡地址。80386/80486CPU对存储器的管理采用了分段机制和分页机制。分段机制是必须采用的,分页机制可用可不用。当禁止使用分页机制时,32位线性地址就是32位物理地址。
当允许使用分页机制时,32位线性地址必须经过“分页管理机制”的处理。处理过程为将20位段基址与12位偏移量相加,生成32位物理地址,详见3.4.3节。图3-25画出了保护虚拟地址方式下的寻址过程。虚拟8086方式是一种模拟仿真8086的工作方式,寻址过程和实地址方式完全相同,即在1MB地址空间内有:20位物理地址=16位段基址×10H+16位偏移量。与实地址方式一样,虚拟8086方式寻址超过1MB时将产生异常13。图3-25保护虚拟地址方式下的32位物理地址形成3.3.2虚拟存储器寻址图3-2664TB虚拟存储器“寻址”示意图3.480386/80486CPU对存储器的管理3.4.1物理存储器管理
1.直接映射方式直接映射方式的地址对应关系如图3-27所示。主存使用16MBDRAM,地址编号为000000H~FFFFFFH。Cache使用16KB×40SRAM,地址编号为0000H~3FFFH。由于Cache的操作是由CPU按照一定的规则自行决定完成的,不需要编程人员的干涉,因此主存和Cache的地址编号可以各编各的,用不着统一编址。Cache的主体有16K个存储单元,每个存储单元有40位,分别为地址字段8位、数据字段32位(1个双字,或2个16位字数据,或4个8位字节数据),除掉8位地址字段,Cache存放数据的存储容量恰好为16KB×32。
在实际使用的时候,要将16MB主存储器划分为若干页,划分的方式是使每一页的存储容量和Cache存放数据的存储容量相同,便于未命中后回写时可将一整页的内容送入Cache。这样一来,16MB内部存储器就划分成了16MB/(16KB×32)=256页,256页的编号为00H~FFH(0~255)。每一个编号页又称为页面,页面号由8位二进制数组成。每一页的存储容量为64KB,或者说能存放16K个双字。高速缓冲存储器的地址寄存器CAR有32位,分配如下:D0~D15为索引INDEX,其中D2~D15用于寻址高速缓冲16K个单元、32K个字节或16K个双字;D0、D1为选择位,用于选择高速缓冲每个单元的4个字节中的一个。D16~D23为页面地址,用TAG表示,或称为标记符,用于指示CPU需要寻找的页面号。CAR的D24~D31为Cache/DRAM选择位,用作选择Cache和主存储器可能有的28=256种不同的情况。图3-27直接映射方式80386/80486CPU通过地址总线AB发出32位地址信号,在地址信号到达CAR后,其中的D2~D15用来选择Cache中16K个单元中的一个。取出该单元的40位二进制数信息,其中8位就是页面地址TAG。随后,由Cache控制器将CAR中的D16~D23标记符与取出的页面地址进行比较。如果两个TAG相等,则Cache命中,这时根据CAR中的D0D1位决定取4个字节中的哪一个字节。与此同时,“命中”信号开启Cache数据存储器CDR,让选中的字节进入CPU的数据总线,完成从Cache中读字节的过程。命中时从Cache读数的操作过程与主存无关。如果两个TAG不等,则Cache未命中,“未命中”信号将开启相关的控制门电路,让标记符8位地址信号经译码器后选中16MB内存256页中的1个。选中该页面后,Cache控制器将继续两个操作,一个是按CPU提供的地址选择已选中页面的1个存储单元,并通过数据寄存器送至数据总线,完成从主存中的读数操作,另一个是启动Cache置换控制逻辑,清除缓存中旧页面的内容,将所访问字节的页面调入Cache,实现页面更新。如果对字节选择位的控制电路稍加改变,使每次能选中的是1个字或1个双字,那么同样也能实现命中时从Cache中读字或读双字、未命中时从主存中读字或读双字的过程。CPU对Cache和主存进行写的过程与读操作相类似,依旧是首先比较TAG,在Cache命中时把数据写入Cache和主存;或只写入Cache,不写入主存。两种写法由TAG的标志位予以确认。在只写入Cache不写入主存的方案中,“不写入主存”是指暂时不写,最终主内存被选中页的内容还是会更新,只不过要等到清除含有该字节页面的时候。如果Cache未命中,则直接写入主存并更新Cache。直接映射方式的优点是CPU发出的标记符地址与Cache中的页面地址只需要比较一次,便可以进行以后的读写操作,相应管理电路也较为简单。缺点是主存的不同页频繁使用时,Cache控制电路将要多次转换,直接影响了命中率。对于4字节选择的Cache直接映射电路,Cache容量为1KB时,命中率为41%,容量为128KB的Cache,命中率可达到89%。由此可见,加大Cache的容量有利于提高读写速度。
2.全关联映射方式和直接映射方式不同的是,全关联映射方式中主存不再分页,只分为若干数据块;Cache也分为若干个数据块,并且主内存每一数据块的容量和Cache每一数据块的容量完全相同。在进行数据传送的时候,以数据块为单位进行,如图3-28所示。Cache中某一数据块的数据可以传送到主存的任一数据块的位置;反之,主存中某一数据块的数据也可以传送到Cache的任何一个位置。数据块的大小不是固定不变的,只是Cache和主存的数据块包含的字节数相同。因此,大容量主存的数据块的个数必然比小容量Cache的数据块个数多得多。图3-28Cache和主内存全关联传送数据块图3-29全关联映射方式
设Cache容量为128×54位,分为128个数据块,每块各占1个位置,由地址标记符TAG(22位)、数据字段(32位
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 台中市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)及答案详解(历年真题)
- 潍坊市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(综合题)
- 金门县农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)含答案详解(轻巧夺冠)
- 金门县农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)及一套参考答案详解
- 通辽市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(黄金题型)
- 北海市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)含答案详解(满分必刷)
- 恩施州农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)含答案详解(综合卷)
- 2026年亳州市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(夺分金卷)
- 威海市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(预热题)
- 宿州市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)含答案详解(满分必刷)
- 2025年注册安全工程师考试化工(初级)安全生产实务试卷与参考答案
- 2025全国翻译资格水平测试日语二级笔译试卷
- 容积率测算专项汇报
- 2024年成人高考《政治(专升本)》考试题库(含答案)
- 2025至2030中国城市轨道交通行业市场深度分析及竞争格局与发展前景展望报告
- 小学国家中小学智慧教育平台应用案例
- 新生儿无陪护理模式探索
- (2025年)黑龙江省齐齐哈尔市辅警协警笔试笔试预测试题含答案
- 海洋大数据平台建设
- 量值溯源培训课件
- 丙烷安全培训课件
评论
0/150
提交评论