第四章 存储体系

4.2.3 页式虚拟存储器实现中的问题

1.页面失效的处理

跨页现象导致页面失效:因页面的划分只是机械等分,按字节编址的存储器可能出现指令,操作数横跨在两页上存储的情况,若跨页存放不在主存,在取指、取操作数或间接寻址等访存过程中产生页面失效。

页面失效会在一条指令的分析或执行中产生。

中断一般是在每条指令执行的末尾安排中断微操作,检验系统中有无未屏蔽的中断请求。页面失效如果也用这种办法处理就会造成死机,所以不能按一般中断对待,应看成一种故障,必须立即响应和处理。

多数计算机采用后援寄存器法,把发生页面失效时指令的全部现场保存下来,带调页后再取出后援寄存器中内容恢复故障点现场,以便继续执行完成指令。

也有的计算机采用一些预判技术或替换算法。

给程序分配的主存页数应有某个下线,同时页面不能过大,以便多道程序的倒数、所分配的主存页数都在一个合适的范围内,否则出现主存页数过少,大量出现页面失效,严重降低虚拟存储器的访问效率和等效速度。


2.提高虚拟存储器等效访问速度的措施

缩短主存时间可采取的措施

a.用单独的小容量快速随机存储器或寄存器组成存放页表。

b.硬件上增设“快表”来解决。

用快速硬件构成比全表小得多的快表,存放目录表当前正在使用的虚实地址映像关系,那么其相联查找的速度将会很快。

原存放全部虚实地址映像关系的表称为慢表。

快表只是慢表中很小的一部分副本。

查表时,由虚页号u+Nv'Nv同时查快表和慢表。快表中有就能快速找到对应的实页号nv。送入主存地址寄存器,并立即停止慢表查询。访主存速度几乎未下降。

快表查不到,经一个访主存时间,慢表中查到实页号nv,就会送入主存地址寄存器并访问,同时将虚页号与实页号的对应关系送入快表(替换算法替换快表内容)

经快表与慢表实现内部地址变换

经快表与慢表实现内部地址变换

快表和慢表实际构成了一个两级层次,替换算法一边为LRU算法。

为提高快表的命中率和查表速度,可用告诉按地址访问耳朵寄存器构成大容量快表,用散列(Hashing)方法实现按内容查找。

散列方法的基本思想是让内容Nv与存放改内容的地址A之间有某种散列函数关系,既让快表的地址A=H(Nv)

散列函数变换必须采用硬化实现才能保证必要的速度,快表中增设Nv字段是为了解决多个不同的Nv可能散列到同一个A的散列冲突。

在快表的A单元,同时存入nvNv,地址变换时用现行Nv经散列函数求得A,查到nv并访主存的同时,再讲同行中原保存Nv读出,与现行虚拟地址Nv比较,相等,按nv行程的主存实地址进行访存,不等于,表明出现散列冲突,即A地址单元中的nv不是现行虚地址的实页号,终止按nv访存,用从慢表读得的nv再去访存。

快表比相联存储器芯片构成的快表容量大,提高了命中率,而且具有很高的查表速度,加上这种判相等与访主存是同时并行的,进一步缩短了地址变换所需要的时间。

快表中增加Nv比较以解决散列冲突引起的查错

快表中增加Nv比较以解决散列冲突引起的查错

散列变换(压缩)的入、出位数差越小,散列冲突的概率就越低,可考虑缩短被被变换的虚地址位数,去掉u字段是不行的。

上述查相联寄存器、散列压缩、查快表都用硬件实现,因此作为虚拟存储器的内部地址映像和变换的快慢表对应用/系统程序员是透明的。


3.映像主存命中率和CPU效率的某些因素

命中率是评价存储体系性能的重要指标,程序地址流,替换算法以及分配给程序的实页数不同都会映像命中率。

  • 主存容量S1一定时,随页面大小Sp由很小开始增大,命中率H逐渐增大,到达某个最大值后减小,同时分配给程序的容量S1增大可普遍提高命中率,达到最高命中率时的页面大小Sp也可以大一些。
  • 分配给程序的容量的增大也只是在开始时对H提高有明显作用
  • 不要让S1过大,SpS1选择应折中权衡,只要H高到不会再明显增大时就可以了

页面取大的弊端:页内零头浪费增大,主存空间利用率低,页表行数降低又缓解主存空间利用率的下降。

页面取大的优势:提高辅存的调页效率,减少操作系统为页面替换所花的辅助开销,降低指令、操作数和字符的跨页存储概率。

主存命中率也与所用页面的调度策略有关,多数虚拟存储器采用请求式调页,页面失效时才把所需页调入主页。

针对程序存在局部性,可改用在工作区调度策略。

工作区:在时间t之前的一段时间△t内已访问过的页面集合。

可在启动某道程序重新运行之前,将程序上次运行时所用虚页集合调入只存。

这种预存工作区方法可免除在程序启动出现大量的页面失效,使命中率提高。

对分时系统,分配给美刀程序的CPU时间片大小会影响虚拟存储器的使用。

CPU时间页较小,减小页面失效次数,不然大部分时间会消耗在调页上。

页面也不能选的过大,不然会出现连一页也没用完,就得换道的情况。

道数太少,调页是CPU可能会等待。

道数太多,每道程序占用的主存页数太少,导致频繁的页面失效。

多道程序系统优化CPU效率的调页模型:

  1. 50%准则:调页操作能使辅存约有一半的时间在忙着,CPU利用率最大。
  2. 调页时近乎等于页面失效间的平均时间时,CPU利用率最大。
  3. 每道程序的页面分配量应选择成能使页面失效间的平均时间达到最大值。

 

4.3 高速缓存存储器

4.3.1 工作原理和基本结构

高速缓冲(Cache)存储器为弥补主存速度不足,在处理器和主存之间设置一个高速、小容量的Cache,构成Cache——主存存储层次,使之从CPU角度来看速度接近Cache,容量却是主存的。

将Cache和主存机械地等分成相同大小的块(行),每一块若干字(字节)组成,从存储原理上讲,Cache存储器中的块和虚拟存储器中的页具有相同的地位,块的大小比页的大小小得多。

每当给出一个主存字地址进行访存时,都必须通过主存——Cache地址映像变换机构判定该访问字所在的块是否在Cache中,如果在Cache中(命中),主存地址经地址映像变换机构变换成Cache地址访问Cache,Cache与处理机之间进行单字信息传送。

Cache未命中,产生Cache块失效,这是需从访存的通路中把包含该字的一块信息通过多字宽通路调入Cache,同时将被访问字直接从单字通路送往处理机。并修改地址映像表中有关的地址映像关系及Cache的速度来访问大容量主存。

目前,访Cache的时间一般是访主存时间的1/10~1/4,只要Cache的命中率足够高,就能以接近于Cache的速度来访问大容量的主存。

Cache和虚拟存储器的原理上是类似的,所以虚拟存储器中使用的地址映像变换及替换算法基本上也适用于Cache存储器。只是对速度的要求更高。

Cache与主存速度相差很小,比主存与辅存之间的速度差小两个数量级,加上Cache存储器的速度要比虚拟存储器的高,希望能与CPU速度相匹配,为此,Cache本身采用与CPU同类型的半导体工艺制成。

Cache——主存间的地址映像和变换,以及替换、调度算法全得用专门的硬件实现。

Cache存储器对系统/应用程序员是透明的。

送入主存地址到Cache的读出或写入完成实际包括查表地址变换和访Cache两部分工作,这两部分工作所花费的时间基本相近。那么可以让前一地址的访Cache和后裔地址的查表变换在时间上重叠,流水的进行。

访问一次Cache存储器往往要经过很多子过程,多个请求源同时访问Cache存储器时,首先要经优先级排队,然后访问目录表进行抵制变换,接着访问Cache,从Cache中选择所需的字和字节,修改Cache中的块使用状态标志等。

这些子过程流水地处理使Cache存储器能在一个周期为多条指令和数据服务,进一步提高Cache存储器的吞吐率。

为了发挥Cache的速度,减少CPU与Cache之间的传输延迟,应让Cache在物理位置上尽量靠近处理机或放置在处理机内部。

对于共用主存的多处理机系统,如果每个处理器都有自己的Cache,处理机主要与Cache交换,就能减少使用内存的冲突,提高整个系统吞吐量。

虚拟存储器中,处理机和辅存之间没有直接的通路,因为辅存的速度相对主存差距大,发生页面失效,辅存调页时间毫秒级。避免时间浪费,采用CPU换道。

Cache发生Cache块失效的问题,从主存掉块的时间是微秒级。无需程序换道,为了减少处理机空等时间,除了Cache到处理机的通路外,在主存和处理机之间设有直接的通路。发生Cache块失效,不必等待Cache读主存再送入,将Cache主存调块和处理机访问主存所需的字重叠进行。

同时也实现CPU直接写入主存的写直达。

Cache既是Cache存储器中的一级,也是处理机和主存间的一个旁视存储器。

为了加速掉块,一般让每块的大小等于一个主存周期内由主存所访问到的字数。因此Cache存储器的主存系统都采用多体交叉存储器。

主存是计算机多个部件共用,所以应把Cache的访主存优先级尽量提高,一般高于通道的访主存级别。这样在采用Cache存储器的系统中,访存申请响应顺序通常安排成Cache、通道、写数、读数、取指。因Cache调块时间只有1~2个内存周期,这样做不会影响其他外设访问主存

Cache存贮器的基本结构

Cache存贮器的基本结构

与本文相关的文章
版权声明
转载保留版权: 大D综合研究院 | 《《计算机系统结构》读书笔记(十)》
本文链接地址:https://www.dadclab.com/archives/3119.jiecao
转载须知:如果您需要转载本文,请将版权信息,版权授权方式,以及本文的链接地址注明,谢谢合作。
本文被贴上了: , , , , , , 标签