计算机体系结构:存储层次(非常详细,已完结)

①存储层次的概念:存储层次是指将CPU近期使用的程序和数据放在离CPU较近的、容量小但速度快的存储器中以满足性能要求,而其他的程序和数据放在离CPU较远的、容量大而速度慢的存储器中满足容量要求。

②存储层次方案的可行性原理:程序在计算机中的执行符合局部性原理:绝大多数程序访问的指令和数据是相对聚簇的。这也是存储层次方案可行的原因。

1.存储器的层次结构

1.1.多级存储层次

用户角度上存储器的三个主要指标:容量、速度和每位价格。

存储层次方案的必要性:存储层次方法是解决存储器“容量-速度-价格”矛盾的唯一解决方案。一般计算机的存储层次为:寄存器-Cache-主存-辅存(有时也不考虑寄存器这一级)。

存储层次的结构特点:越靠近CPU的存储器速度越快,容量越小且每位价格越高;越远离CPU的存储器速度越慢,容量越大且每位价格越低,同时管理越依赖于软件和用户。在存储层次中,任何一级存储器的数据一般都是其下一级存储器中数据的子集。

存储层次的目标:存储器越靠近CPU,则CPU对它的访问频度越高,而且最好大多数访问都能在靠近CPU的存储层次上完成。

1.2.存储层次的性能参数

存储层次的平均每位价格:即存储器的总价格和总位数之比。当存储层次中下一级的存储空间远大于上一级的存储空间时,该指标接近于下一级存储器的平均每位价格。

命中率和失效率:某级存储器的命中率是指在CPU访问存储系统时能够在当前存储器中找到所需信息的概率。命中率可用通过模拟的方法进行确定。与命中率互补的是失效率。

平均访问时间:存储器访问在某一级上命中所用的访问时间称为命中时间;如果没有命中,则会把下一级存储器中包含所需信息的块传送到上一级存储器中。向下一级存储器访问并将信息块调入上一级存储器的时间称为失效开销。平均访问时间是命中时间以及失效率和失效开销的乘积的和。

1.3.两种存储层次的关系

两种存储层次:近年来,CPU和主存在性能上的差距越来越大,现代计算机都采用Cache来解决这个问题,由此形成了“Cache-主存”层次关系;另一种层次关系是“主存-辅存”层次关系。这两种层次关系分别弥补了主存速度和容量的不足。

存储层次的四个问题:映像规则、查找算法、替换算法、写策略。

2.Cache基本知识

Cache的概念:Cache是现代计算机在CPU和主存之间设置的一个高速、小容量的缓冲存储器,填补了CPU和主存在速度上的巨大差距,可用用于提高整个计算机系统的性能。

Cache和主存的信息交换:Cache和主存之间以块为单位进行信息交换,块的大小一般为2的幂次方字节。

Cache的地址分割:通常Cache对于程序员是透明的,CPU访存指令中给出的主存地址被分割成块地址和块内偏移地址两部分。硬件根据块地址寻找该块在Cache中的位置,块内地址用于确定所访问的数据在该块中的位置。

2.1.映像规则

映像规则的原理:一般来说主存的容量都远大于Cache的容量,因此必须确定一种主存块和Cache块之间的对应关系,这种对应关系就是Cache和主存层次之间的映像规则。

直接映像:直接映像是指任何一个主存块都只能映射到唯一一个Cache块位置,由主存块的块号和Cache块数的取模唯一确定。直接映像中某一个主存块的Cache块号其实就是这个块的主存块号的低m位,其中m为Cache块的表示位数。

全相联映像:全相联映像是指任意一个主存块都可以放置到任意一个Cache块的位置。

组相联映像:组相联映像是指主存块可以被放置到Cache中唯一一个组的任何一个位置上。一个主存块映射到哪一个Cache组的方法与直接映像相同。组相联映像实际上是直接映像和全相联映像的一种折中,可以通过主存块的低m位确定这一个块的Cache组号,这里的低m位与直接映像中的低m位都称为索引。一个Cache组中有几个块,就称为几路组相联。

不同映像规则的比较:直接映像方式实现最简单,能够充分利用局部性原理;全相联映射空间利用率最高,冲突概率最低(块冲突是指一个主存块想要进入已经被占用了的Cache块位置);组相联映像是两者的折中。

映像规则的实际应用:由于低相联度下的实现较为简单,因此绝大多数计算机都采用较低相联度的Cache设计方案。

2.2.查找方法

查找方法的作用:为了区分当前某个Cache块中保存的是哪一个主存块,必须唯一标识这个主存块的信息,用于记录这些信息的硬件结构称为目录表。当在Cache中查找某一个块时,首先根据索引查找该块的位置,然后通过查找目录表来确定该块是否在这些位置中的一个。

目录表的记录内容:目录表中目录项保存了对应的主存块的块地址除了索引之外的高位部分,称为标识tag。标识唯一指出了当前该块中存放的信息是哪一个主存块的。除此之外,为了指出Cache块中是否包含有效信息,一般给每一个目录项设置一个有效位,只有有效位为1时才表示块中信息有效。

查找方法的硬件实现:Cache中一般采用单体多字存储器来保存目录表和Cache数据,用比较器来实现并行查找。相联度越高,实现查找方法的代价就越高,因此直接映像Cache的查找最为简单。

2.3.替换算法

替换算法的必要性:当一个块从主存调入Cache时,可能会出现该块所映射的位置已经被(全部)占用的情况,因此需要使用替换算法来存放这个新调入的块。

直接映像方式的替换算法:直接映像中Cache只有一个块位置可以被选择,因此一定是此位置上的块被替换。

①随机法:随机法随机选择被替换的块,以便均匀使用一组中的各块。使用伪随机数的随机方法来产生块号实现起来很简单,并且随机序列一定。
②先进先出法(FIFO):选择最早被调入的块作为被替换的块。这种方法也很容易实现,但是不能正确反映程序的局部性:因为最先进入的块可能是经常要用到的块。
③最近最少使用法(LRU):选择近期最久没有被访问过的块作为被替换的块。这种方法需要记录一段时间内各块的被访问次序,以确定最久没有被访问的块。
④最不常使用法(LFU):选择过去一个时间段内访问次数最少的数据块作为被替换的块。这种方法充分利用了历史信息并且反映了程序的局部性,但是需要记录一段时间内各个块的被访问次数,因此代价较大。

不同替换算法的选择:随机法没有考虑Cache过去被使用的情况,反映不了程序的局部性,因此失效率相对较高;最近最少使用法和最不常使用法较好地反映了程序局部性原理,失效率较低,但是硬件实现较为复杂。最近最少使用法和随机法分别因为失效率低和实现简单而被广泛采用。

2.4.写策略

处理器读写操作的比较:处理器对Cache的访问中,读访问的比例比写访问的比例更高,因此对读操作进行优化可以得到较大的性能效益。由于检查标志不能和写入Cache块同时进行,但是检查标志的同时可以读Cache块,并且写操作中写入的数据宽度不固定,因此写操作一般比读操作更加复杂,并且要花费更多的时间。

优化读操作的方法:在处理器访问Cache时,在读出标志进行比较的同时把相应的Cache块也读出。如果命中,则把该块中所请求的数据送到CPU;如果失效,则读读出的块处理器置之不理。

写策略的概念:写策略确定被写的块不在Cache中(也称为写失效),或者在Cache中是否同时更新两级存储器中的内容的方法。写策略是区分不同Cache设计方案的一个重要标志。

写失效时的两种写策略
①按写分配法:先把所要写的单元所在的块调入Cache中,然后再进行更新。这种方法也被称为写时取。
②不按写分配法:直接写入下一级存储器而不将相应的块调入Cache。这种方法也称为绕写。

写命中时的两种写策略
①写直达法:不仅把信息写入Cache中相应的块,而且也写入下一级存储器中相应的块。写直达法的优点在于容易实现,并且由于下一级存储器中的数据总是最新的,因此简化了数据一致性的问题。如果在写操作过程中CPU必须等待操作结束,则称CPU写停顿;可以使用写缓冲器技术来进行优化:写访问数据写入该缓冲器后CPU就可以继续执行,从而使得下一级存储器的更新可以和CPU的执行重叠起来。
②写回法:只把信息写入Cache中相应的块。该块只有再被替换时才会写入下一级存储器中。在写回法中,为了减少替换时块的写回,常常采取“脏位”标志,用于指出这个快是被修改过的还是没有修改过的;如果没有被修改过,则下一次替换时就不需要写回到下一级存储器。写回法的优点是速度快。

参考例题:按写分配法、不按写分配法例题

2.5.Cache结构

分离Cache结构和混合Cache结构:指令和数据分别采用一个Cache缓冲的称为分离Cache结构;指令和数据采用同一个Cache缓冲称为混合Cache结构。

分离Cache和混合Cache的比较原则:基于相同的总容量。

2.6.Cache性能分析

平均访存时间:平均访存时间是比失效率更加合理的评价指标(因为考虑了硬件速度)。平均访存时间可以用绝对时间来衡量,也可以使用时钟周期数进行衡量。
平均访存时间公式

平均访存时间=命中时间+失效率*失效开销

CPU性能:CPU性能是对程序执行时间的衡量,与Cache性能密切相关。

CPU时间公式

CPU时间=(CPU执行周期数+存储器停顿周期数)×时钟周期时间

其中CPU执行周期数是假设所有访存在Cache中命中时程序的执行时间,这一段时间包括了Cache的命中时间。

存储器停顿周期数的计算公式

存储器停顿周期数=读的次数×读失效率×读失效开销+写的次数×写失效率×写失效开销。

由此可以得到近似公式:

存储器停顿周期数=访存次数×失效率×失效开销

由于读写的失效率和失效开销往往不对等,因此这个公式仅仅能够实现近似分析。
CPU时间的另一个公式

CPU时间=指令数×(CPI+访存次数/指令数×失效率×失效开销)×时钟周期时间

相关例题

失效率和平均访存时间计算例题
求CPU时间例题
平均访问时间和CPU时间计算例题

2.7.改进Cache性能

改进Cache性能的方法:从Cache的平均访存时间出发,可以得到以下三个改进方向:

(1)降低失效率; (2)减少失效开销; (3)减少Cache命中时间。

3.降低Cache失效率的方法

Cache失效的原因:Cache的失效原因可以分为三类(简称为3C)。

①强制性失效:当第一次访问一个块时,需要从下一级存储器中调入Cache,这种失效称为强制性失效。也称为冷启动失效或首次访问失效。强制性失效发生在对初始空Cache的访问中。
②容量失效:由于Cache容量有限,使得程序执行所需的块不能全部调入Cache中,所以当某些块被替换后如果重新被访问就会发生失效。这种失效就称为容量失效。
③冲突失效:在组相联或直接映像Cache中,多个块映像到同一组(个)块中,则会出现该组中的某一个块被别的块替换后又被重新访问的情况,这就发生了冲突失效。冲突失效也称为碰撞失效或干扰失效。

关于Cache失效的一些结论
①Cache容量对失效的影响:强制性失效不受到Cache容量的影响,但是容量失效随着容量的增加而减少;
②相联度对失效的影响:强制性失效和容量失效不受相联度的影响,但是相联度越高冲突失效就越少;
③经验规则:大小为N的直接映像Cache的失效率约等于大小为N/2的2路组相联Cache的失效率。

抖动现象:在一个存储层次中如果高一级的存储器的容量比程序所需的空间小得多,就有可能出现由于过多容量失效而产生的抖动现象:大量数据要进行替换,程序执行的大部分时间都用于在两级存储器之间移动数据,机器的运行速度接近于只有第二级存储器的情况,甚至更慢。

3.1.调节Cache块的大小

调节块大小对失效率的影响
①对于给定的Cache容量,当块大小从较小开始增加时,失效率开始下降;当块大小增加到较大时,失效率反而上升了。这是因为增加块大小一方面可以利用空间局部性,减少了强制性失效;另一方面相同容量下增加块大小会减少Cache的块数,增加冲突失效。当一开始增加时第一方面占主导,而后期第二方面占主导,因此导致失效率先下降再升高。
②Cache容量越大,使得失效率最小的块大小越大。

调节块大小对失效开销的影响:一般而言,块大小越大,失效开销也越大。

调节最佳的块大小:块大小应该调节到使得失效率较低且使得平均访存时间最小的状态。
另外,从降低失效开销的角度来看,块大小取决于下一级存储器的延迟和带宽两个方面:高延迟和高带宽适合使用较大的Cache块(因为每次失效时稍微增加一些失效开销就可以获得非常多的数据),低延迟低带宽时应该采用较小的Cache块。

例题
调节Cache块大小的例题

3.2.提高相联度

提高相联度的影响:提高相联度可以降低失效率,但是会因为增加的多路选择器延迟而使得命中时间增加。

提高Cache相联度例题提高Cache相联度例题

3.3.Victim Cache

Victim Cache技术简介:Vimtim Cache是指在Cache和它与下一级存储器的数据通路之间增设一个全相联的小Cache,称为Victim Cache。Victim Cache中存放被替换的某些块。每当发生Cache失效时,在访问下一级存储器之前都会检查Victim Cache中是否有所需的块。如果有则将该块调入Cache中(同时可能有另一个块被替换进入Victim Cache)。

对Victim Cache的理解:可以把Victim Cache视为位于Cache和存储器之间的又一级Cache。

Victim Cache的作用:Victim Cache可以在不影响时钟周期和失效开销的前提下降低Cache的失效率和失效开销。

伪相联Cache技术的原理:伪相联Cache技术将首先按照查找直接映像Cache的方法来访问Cache,如果命中则称为快命中;如果发生失效,则会查找Cache的另一个位置,通常这个位置是将索引字段的最高位取反获得的,这个位置就称为“伪相联”位置。如果在伪相联位置上命中称为伪命中(或慢命中)。

伪相联技术的使用方法:根据程序局部性原理,应该尽可能多地把下级存储器取来的块放在快命中位置上,而把原来在此位置的块交换到慢命中的位置。

Victim和伪相联技术的缺点:多次命中时间会使得CPU流水线的设计更加复杂。

3.4.硬件预取

硬件预取技术的概念:硬件预取技术是指指令和数据在处理器提出访问请求之前进行预取。预取出的内容可以直接放入Cache,也可以放在一个访问速度比下一级存储器快的缓冲器中。

硬件预取的完成部件:硬件预取由Cache之外的硬件完成。

硬件预取的前提条件:硬件预取的前提条件是存储器具有空闲带宽(不采用预取将会被浪费掉。同时,利用编译器的支持可以避免不必要的预取。

3.5.编译器控制的预取

编译器预取技术概念:编译器预取技术是指在编译时加入预取指令,使得指令和数据被用到之前发出预取请求。

编译器预取的分类
①寄存器预取:把数据取到寄存器中;
②Cache预取:只把数据取到Cache中而不放入寄存器。

预取的目的与前提:预取的目的是使得执行指令和读取数据能够重叠进行,因此只有在预取数据的同时处理器还能继续执行的情况下预取才是有意义的。

非阻塞Cache的定义:非阻塞Cache也称为非锁定Cache,是指在等待预取数据返回的同时还能继续正常指令和数据的访问的Cache。

编译器预取的主要对象:循环是编译器预取的主要对象,因为它们易于进行预取优化。在失效开销较大的情况下,编译器会将循环体展开很多次,以便为后面较远的循环预取数据。

预取付出的代价:预取指令的插入会带来一些额外开销,例如在支持虚拟存储器机制的系统中,预取的虚地址可能会引发异常。不会产生异常的预取称为非故障性预取,本节均假设所有预取都是非故障性预取(也称为非绑定预取)。

使用预取的原则:只有保证预取带来的额外开销不超过预取带来的收益时才应该使用预取技术。

例题编译器预取例题(优化前后失效次数计算)

3.6.编译器优化

编译器优化的特点:前面所介绍的技术都需要改变或者增加硬件,而编译器优化技术可以在编译时通过对程序的优化来提高性能,而无需对硬件作任何改动就可以降低失效率。

编译器优化的分类:编译器优化可以分为减少指令失效和减少数据失效两类。
编译器优化的原理:对于指令,编译器可以很容易地重新组织程序而不影响程序的正确性;对于数据,由于数据对存储位置的限制比指令对存储位置的限制还要少,因此更加便于调整顺序,以更好地利用数据的空间局部性和时间局部性。

3.6.1.数组合并

数组合并的原理:有些程序用相同的索引访问若干个数组的同一维度,这些访问可能相互干扰导致冲突失效,为此可以把这些相互独立的数组合并为一个复合数组,使得一个Cache块中能够包含所有所需的元素。

3.6.2.内外循环交换

内外循环交换的原理:通过简单地交换循环的嵌套关系有时可以使得程序按数据存储地址进行访问,这种方法即为循环交换。

3.6.3.循环融合

循环融合的原理:有些程序含有几部分独立的程序段,这些程序段用相同的循环访问相同的数组,对相同的数据进行不同的运算,此时就可以进行循环融合:将这些循环融合成一个单一的循环,能使得读入Cache的数据在被替换出去之前得到反复的使用。循环融合利用了时间局部性。

3.6.4.分块

分块的适用情况:当程序对多个数组进行访问时,如果对一些数组按照行访问而对另一些数组按照列访问,则此时用之前的任何一种变换方法都不能完成优化,就需要使用到分块技术。

分块的原理:分块算法不是对数组的整行或整列进行访问的,而是把对大数组的访问转化为对矩阵或块的访问,从而更好地提高程序的时间局部性和空间局部性。分块的大小衡量标准称为分块因子。

分块的其他优点:分块可以在降低失效率的同时有助于寄存器分配。通过减小块大小可以使得寄存器可以容纳整个子数组从而降低访存操作的次数。

4.减少Cache失效开销

4.1.写缓冲及写合并

写缓冲的概念:在写直达Cache中,由于所有写请求都必须发送到下一级存储层次中,因此常常采用一个称为写缓冲的硬件结构来减少失效开销。从CPU的角度看,只需要将数据写入写缓冲中即认为写操作已经结束而可以继续进行其他操作。

写合并的原理:当需要将数据送入写缓冲时,如果写缓冲包含其他被改写的块,那么就需要进行检查。对这些块对应的地址进行逐一检查,判断当前需要写入的数据是否在这些块中:如果在的话则将该数据结合到这个块中,否则Cache必须等待直到写缓冲有空项(空的位置)。这种不直接写入,而是每次需要写入新数据时可以在缓冲中已经有的块中进行修改添加的方式称为写合并。

写合并的优点:写缓冲的性能会直接影响失效开销,而采用写合并技术可以使得存储器的效率更高。

I/O地址的特殊要求:I/O地址通常不允许使用写合并,因为不同I/O寄存器的行为不像连续的存储字那样对连续地址的多个字进行写,而是可能每个寄存器只是在地址上一个数据字进行写操作。

Victim Buffer的概念:在写回Cache中被替换的块通常被称为Victim Buffer。Victim Buffer中存放了因为Cache失效而被替换的脏块。Victim Buffer和Victim Cache有相似之处,区别在于Victim Cache中可以包含任何Cache失效替换的块,而Victim Buffer中都是被替换的脏块(可以认为Victim Buffer是Victim Cache的子集)。写缓冲比Victim Cache的应用广泛地多。

4.2.让读失效优先于写

例题
Cache访问存在的先写后读相关例题

读失效优先于写的内容:对于写直达Cache,如果读Cache时失效,则首先检查写缓冲器中的内容,如果没有冲突且存储器可以访问,则可以继续处理读失效。

4.3.请求字处理

请求字的定义:当从存储器向CPU中调入数据块时,块中往往只有一个字是CPU立即需要的,这个字称为请求字。

请求字处理技术的概念:请求字技术是指当CPU所请求的字到达后,不等整个块都调入Cache,就可以把这个字送给CPU并使得处理器继续运行。

请求字处理技术的两种方案
①尽早重启动:按照顺序访问存储器数据块中的每一个字,在请求字未到达时CPU都处于等待状态。一旦请求字到达后就立即发向CPU,让等待的CPU尽早能够继续工作。
②请求字优先:调块时,首先向存储器请求CPU所要的请求字。请求字一旦送达就立即送到CPU让CPU继续执行,同时从存储器中调入该块的其他部分。(这个技术也被称为回绕读取或关键字优先)。

请求字处理的适用情况:当Cache块很小时,是否采用请求字处理技术对应的失效开销差别不大,只有Cache块很大时才能体现出效果。

例题
Cache减小失效开销例题

4.4.多级Cache

多级Cache原理:多级Cache即在原有的Cacche和存储器之间增加新的Cache层次,把靠近CPU的Cache级别做得足够小,使得其速度可以与快速CPU的时钟周期匹配;把靠近主存的Cache级别做得足够大,使得它能捕获更多本来需要到主存中进行的访问,从而降低失效开销。一般来说,多级Cache中低级的Cache的失效率很高。

多级Cache的平均访存时间公式

平均访存时间=某一级命中时间+某一级的失效率×下一级Cache的平均访存时间

平均访存时间=命中时间(L1)+失效率(L1)×命中时间(L2)+ 失效率(L1)×失效率(L2)×命中时间(L3)…

局部失效率和全局失效率:多级Cache结构中某一级Cache的失效率称为局部失效率;各级Cache的局部失效率的乘积称为全局失效率,相当于把多级Cache视为一个整体Cache时这个整体Cache的失效率。由于全局失效率一定小于任何一级Cache的局部失效率,因此通过多级Cache技术可以降低失效率。

多级Cache的一些其他内容
①多级Cache中,后面级别的Cache只会影响前一级别Cache的失效开销;
②多级Cache中,后面级别的Cache的容量一般比前一级大得多;
③降低第二级Cache的失效率是减少第一级Cache失效开销的主要方面。
④对于大容量的第二级Cache,其采用的块大小通常比第一级大。
⑤一般来说第二级Cache的相联度高可以有效地提高第二级Cache的性能。

多级相容性的概念:如果前一级Cache中的数据总是同时存在于下一级Cache中,则称下一级Cache具有多级相容性。存储层次常采用多级相容性以便于内容的一致性检测。

多级Cache例题

多级Cache例题第一题
多级Cache例题第二题

4.5.非阻塞Cache

非阻塞Cache的定义:非阻塞Cache技术也称为非锁定Cache技术。这种技术允许Cache在处理失效时继续服务其他访问,这样就可以多个Cache访问,从而提高CPU的性能。

非阻塞Cache的优点和缺点:非组合Cache能同时处理的失效个数越多,所能带来的性能上的提升就越大;但是非阻塞Cache会大大增加Cache控制器的复杂度,同时对非阻塞Cache的性能测试也非常困难。

5.减少命中时间

5.1.容量小、结构简单的Cache

Cache命中过程中最耗时的部分:用地址的索引部分标识存储器,并读出标识与地址进行比较是Cache命中过程中最耗时的部分。

容量小且结构简单的Cache的优点:首先由于硬件结构简单,小容量Cache可以有效提高Cache的访问速度;另一方面,小容量Cache便于和处理器集成在同一块芯片上,从而避免了片外访问所导致的额外时间开销。

结构简单的小容量Cache的应用:多级Cache系统中的第一级Cache往往采用容量小且结构简单的设计方案,以更好地匹配系统的时钟频率,保持较高的传输速度。

5.2.虚拟Cache

虚存机制:为了扩大用户的逻辑空间并支持多用户共享主存,现代计算机都采用虚存机制。在采用虚存机制的机器中,程序表达的地址是虚地址(逻辑地址),每一次访存计算机都必须将虚地址转化为实地址(主存物理地址),才能访问实际的主存空间。

虚拟Cache技术概括:在将虚地址转化为实地址的过程中同时也进行Cache映射访问。

虚拟Cache的作用:虚拟Cache能够消除访问时用于地址转换的时间,从而减少命中时间。

虚拟存储器的带来的三个问题
①支持虚存的多用户运行环境下,不同的进程可能使用相同的虚地址指向不同的物理地址,每当进行进程切换时新进程都可以使用与旧进程相同的虚地址来指向不同的物理空间。
②操作系统和用户程序为了共享某些空间,对于同一个物理地址可能采用两种以上不同形式的虚拟地址来访问,这些地址称为同义(同名)。
③I/O通常使用物理地址,如果I/O数据也在虚拟Cache缓冲,则需要把物理地址映像为虚拟地址,这增加了处理的开销。

5.3.访问流水化

访问流水化的概念:对第一级Cache的访问流水化。

访问流水化的作用:这样做虽然不能使得单个访问的命中时间减少,但是会提高Cache的带宽,从而从整体上降低了平均时间。

6.主存

主存的性能指标:主存的主要性能指标分别是延迟和带宽。在过去,Cache主要关心主存的延迟(因为这会影响Cache的失效开销),而I/O和多处理器系统主要关心主存的带宽。但是随着采用较大块的第二级Cache的广泛使用,主存带宽对于Cache来说也变得重要了。

两个性能指标的优化难度比较:通过各种优化主存技术来增加主存带宽通常比降低主存延迟更加容易。

6.1.存储器组织技术

存储器组织技术优化的意义:采用新型的组织结构来提高存储带宽是提高主存性能的主要途径,对现代具有多级、较大的Cache来说很有意义。

6.1.1.增加存储器宽度

增加存储器宽度的意义:增加存储器宽度是提高主存性能最直观的方法。

增加存储器宽度的缺点
①增加CPU和存储器之间的数据通路(存储器总线)的宽度,使得实现代价提高。
②当主存宽度增加后,用户扩充主存时的最小增量也增加了相应的倍数。
③在具有纠错功能的存储器中,实现对一行中部分数据的写入比较复杂。

6.1.2.多体交叉

多体交叉的原理:首先,多个存储器构成存储系统,可以利用多体结构开发存储芯片之间的潜在并行性;另一方面,在一个存储芯片内部,虽然在逻辑上一个存储器芯片是一个单一的阵列,但是由于生产工艺的原因,它内部实际上可以包含很多模块。

存储体的概念:多体技术把每个存储模块组织为多个存储体,每个存储体的宽度通常是一个字,这些存储体并行工作,可以一次读或写一个或多个字。地址到存储体的映像方法影响着存储系统的行为。

例题
存储器组织技术例题

6.1.3.独立存储体

独立存储体的概念:独立存储体是交叉访存的进一步推广。在包含多个独立存储体的存储器中,每个个体都有单独的存储控制器、独立的地址线等,这样就可以支持多个独立的访存。

独立存储体的缺点:实现独立存储体的代价较大。

体冲突与解决方法:体冲突是指两个请求同时要访问同一个个体。解决体冲突的方法有三种,分别是采用更多的体、软件方法和“素数模”法。

7.虚拟存储器

7.1.虚拟存储器的基本原理

虚拟存储器的应用:虚拟存储系统已经广泛应用于几乎所有的计算机系统中。

虚拟存储器的组成:虚拟存储器由价格较贵、速度较快、容量较小的主存储器和一个价格低廉、速度较慢、容量很大的辅助存储器组成。

虚拟存储器的优点:应用程序员可以用机器指令的地址码对整个程序统一编址而不需要考虑主存空间的大小。

虚拟存储器的管理:计算机中一般由软件和硬件共同完成对虚存的管理。

虚存的具体机制:虚存降主存空间划分为较小的块,并以块为单位分配给各个进程。

虚存的分块方式:虚存的分块可以分为段式、页式和段页式三种。采用哪一种分块方式对操作系统的性能具有很大的影响。
①页式分块:页式虚存把空间划分为大小相同的页面,其中每个存储单元的地址都是单一、固定长度的地址字,由页号和页内位移两部分组成。
②段式分块:往往是按照程序的逻辑结构进行划分,段的长度可变。这种方式中地址一般用两个字表示:一个是段号,另一个是段内位移。
③段页式分块:同时采用段式和页式,也就是将每个段划分为若干个页面。这种方式不仅保持了段作为逻辑单元的优点,又简化了替换操作的实现。

7.1.1.映像规则

虚拟存储器的映像规则的概念:虚拟存储器的映像规则是指当需要将处于辅存中的一个虚存块调入主存中时,应该放在主存中的哪一个块位置。由于失效开销非常大(需要访问辅存),因此操作系统总是采用失效率尽可能低的方式,也就是全相联映像规则。

7.1.2.查找算法

页表/段表的作用:页表或段表是专门用于记录每个虚存块和主存块之间的对应关系的数据结构。在段式虚存系统中,虚段号通过查找段表得到物理段号,拼接上段内偏移得到最终的物理地址;在页式虚存系统中,虚地址中截取高位作为虚页号,通过查找页表得到实页号,再与页内偏移地址进行拼接就可以得到最终的物理地址。

7.1.3.替换算法

页故障的定义:在页式虚存系统中,将主存失效的情况称为页故障。

虚存系统中替换算法的选择:由于失效开销很大,因此几乎所有操作系统中都采用LRU等具有较低失效率的替换算法。为了帮助操作系统找到LRU页,许多机器都为主存的每个页面设置了一个使用位,每当主存中的一个页面被访问时,其相应的使用位就置一。操作系统定期复位所有使用位,这样在每一次复位之前使用位的值就反映出上次复位到现在的这段时间哪些页被使用过,从而替换出最近最少使用的页。

7.1.4.写策略

写直达法的不合理性:由于主存和磁盘之间访问时间的巨大差距,所以CPU执行Store操作时如果将请求穿过主存直接写入磁盘是不合理的。

虚存系统中的写策略:虚存系统中总是采用写回策略,并且设置脏位,确保只有被修改过了的块才会被重新写入磁盘,从而尽可能避免了对下一级存储器不必要的访问。

7.2.快表

页表存在的问题:页表本身也较大,并且需要操作系统进行维护。同时,页表必须放在主存中才能进行访问,因此每一次访存都需要两次对主存进行访问:第一次读取主存中的页表项以获取所要访问数据的物理地址,第二次才是访问数据本身。

快表的作用:计算机中设置一个专门用于地址转换的高速缓冲部件TLB(也称为地址变换缓冲器或快表),用于存放近期经常使用的页表项,其中的内容是页表中部分内容的一个副本。

快表的原理:快表也应用了局部性原理:如果访存存在局部性,则这些访存中的地址变换也存在局部性(也就是使用的页表项是相对聚簇的)。

快表项中的内容:快表项中存放着一个虚地址和物理地址的对应关系,由标识和数据两部分组成。标识存放的是虚地址的一部分,而数据部分中则存放物理页号、有效位、存储保护信息和其他一些辅助信息。

快表与Cache的比较:相比于Cache来说,快表的容量更小且速度更快,从而保证快表读出操作不会使得Cache的命中时间延长。

8.虚存保护和虚存实例

进程的概念:进程是支持程序执行的机制,一个正在运行的程序加上它继续执行所需的任何状态(称为上下文)就是进程。

进程的管理:操作系统的处理机管理功能负责多进程的调度和进程间的切换。

进程保护的相关方法
①在CPU保护结构中加入环;
②采用加锁和解锁机制。

  • 15
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值