*另外一种直接映像Cache存储器图9.6:相对简单的CPU中,行大小为4字节的直接映像Cache*直接映像的Cache存储器优点: 价格低 容量大缺点:灵活性差如前所述,物理内存中 任何形式为xxxxxx11 11111111的地址都只能 映射到Cache中地址为 1111111111的单元中*JUMP1000HJUMP0000HJUMP0000HJUMP1000H考虑下面的代码:0000000000000000(0000H):JUMP1000H0001000000000000(1000H):JUMP0000H直接映象Cache地址0000000000*第一条指令被取出放入cache中。基于低10位地址位,它被映射到cache单元0000000000。标志域被设置为地址位中的6个高位,即000000。现在,它被执行,CPU在单元1000H中取指令,它的低10位也为000000,因此,它被取出并装入cache中,并且设置标志值为000100,覆盖以前的值。JUMP跳转反过来执行到单元0000H,这样,尽管其他cache单元全都可用,但这两条指令仍会不断的彼此覆盖。*9.2.4组相联映像的cache存储器特点灵活性增强 减少由直接映像带来的覆盖数据的问题采用比较便宜的SRAMN路组相联:每个单元能够包含N个字节或字 直接映像的cache可以看作是一个一路 组相联映像cache存储器*考察大小为1k的2路组相联cache(如图9.7)该cache有1k个数据入口,每个单元2个数据值,因此有512个单元用9个地址位选择cache单元,剩下的7位说明标签值计数值用来纪录数据什么时候被访问过了图9.7相对简单CPU的2路组相联cache*JUMP1000HJUMP0000HJUMP0000HJUMP1000H重新考虑下面的代码:0000000000000000(0000H):JUMP1000H0001000000000000(1000H):JUMP0000H组相联映象cache*用在9.2.3的代码例子中,cache就不会覆盖任一条指令。JUMP1000H这条指令将会被取出存入cache单元0的一路中。然后,指令0000H将会被取出放入同一单元的另一路中。从这可以看出,指令都从cache取出并被连续的执行。*一种采用数据行的组相联cache图9.8相对简单CPU中具有4字节数据行的2路组相联cache*9.2.5在cache中替换数据问题的引出:计算机开始执行一个程序。它 从内存中取指令和数据,同时 将这些值载入cache。当cache为 空或很少被占用时,会工作的 很好。但是,最终计算机会要 将数据移入到已占用的cache单 元。此时,将哪个数据移出 cache,以及此数据如何在保存 到物理内存,这一问题就变得 至关重要*替换策略:FIFO先进先出原则LRU近期最少使用原则随机策略*1.FIFO先进先出策略按顺序填充相联存储器,当cache 占满时返回最顶单元,用新数据 替换原有数据只要一个寄存器就能实现 该寄存器保存下一个要被替换的 单元的指针性能好*2.LRU近期最少使用策略跟踪单元的访问顺序,用新的数 据替换近期最少使用的数据每个cache单元需要一个计数器 最近访问的数据,将相应的计数 器置为0;其余的计数器依次加1性能没有FIFO好*例:在一个4路组相联cache单元中应用LRU策略TDCVTDCVTDCVTDCVCc21Bb11Aa01---01.Cache单元的当前状态2.CPU访问DTDCVTDCVTDCVTDCVCc31Bb21Aa11Dd01*3.CPU访问ETDCVTDCVTDCVTDCVEe01Bb31Aa21Dd114.CPU访问ATDCVTDCVTDCVTDCVEe11Bb31Aa01Dd21*3.RANDOM随机策略随机的选择一个单元给新的数据 使用性能较好,与FIFO策略差不多*9.2.6写数据到cache写