码迷,mamicode.com
首页 > 系统相关 > 详细

cache与主存的地址映射

时间:2016-05-04 10:45:17      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:

   前一篇写了虚存与主存的地址转换,所以现在就写写cache与主存的地址映像。我会用自己的理解和举例的方法说的明了。

              首先,地址映像是把主存的地址空间用某种方法映像到cache,即就是把主存的程序按照一定的方法装进cache中,并且会建立主存与cache的地址对应关系。

              通常有5种方法来映射,包括全相联映射,直接映射,组相联映射和位选择组相联映射及段相联映射,先介绍常见的前三种。

             一.   全相联映射和变换

                     全相联,用一句话说明就是:主存的任意一块可以映射到cache的任意一块。当把主存的一块装入cache中时,会由相连存储器记录是哪一块。cache的标记存的是主存的块号。在映射的时候会记录主存的块号作为标记。

                    主存的地址格式是:                                     cache的格式是:

                                      技术分享                                技术分享

                  M和C分别为块号,W为块内地址(字或字节)

                 假设主存容量是16KB,每块16B,则M=10,W=4。 cache的容量是512B,每块16B,则C=5,W=4。则映射的时候,cache前面会有对主存块的标记(10位),若主存的块号与cache的标记相等,则命中,最少比较一次,最多比较2的c次方。

            二.  直接映射

                  直接映射,就是主存的一块只能映射到 cache的特定块中,就是主存的0块只能映射到cache的0块。一般用公式:b=M mod C,是将内存的块号对cache的块号取余。继续用上面的数据。主存是2的10次方块,也就是1024块。cache是32块,按照直接映射的方式:把内存分组,按cache有多少块就把内存的每组分为多少块,将1024块的每组分为32块,则需要分为32组,32组需要用5位来标记。

                      这时,主存的地址格式就成了:  

                                       技术分享                

                                                             

      T是标记,c是块号,b是块内地址。T的5位就是用来标记组数的。

                       主存                                     cache

 技术分享

                       

    假如有一个地址是10011 01110 111的地址,如何看命中,最后四位是块内地址,不用管,中间五位是块号,是01110,是14,则在cache找块号是14的,再比较第14块的标记是不是和10011相等,相等则命中。cache的标记就是主存的组号。在直接映射中,只需要比较一次,但是可能会存在块冲突的问题。

             三. 组相联映射

                 组相联映射就是将主存的每一组的某一块映射到cache中的某一组的任意一块。组相联映射对cache和主存都进行分组,继续沿用上面的数据,首先对cache进行分组,将cache分为8组,每组4块,那么cache的地址格式就变为:  

           技术分享       

      g位组号,r为块号,b为块内地址。

      cache有多少组,则主存的每组有多少块。因此主存的地址格式:

             技术分享

                     

    M-g为主存的组号,g为主存的块号,b为块内地址。因为cache分为8组,所以主存的每一组为8块,用3位来表示。所以组号就是7位,因为主存一共14位。主存与cache建立映射的时候,会记录下映射的主存的组号,即cache的标记就是主存的组号M-g。

                    技术分享

    上面表示的就是主存与cache的映射,主存的每一组的0块只能映射到cache的第0组的任意一块,在映射的过程中会需要7位来记录主存的组号,由cache的标记记录。当给定一个地址,来判断是不是命中,比如给定1111110 111 1111这个地址,后四位是块内地址,同样不考虑,中间三位111,是7则在cache的第7组找,找第7组的每一块的标记,和1111110比较,若相等,则表示命中。因此,最少需要比较一次,最多需要比较2的r次方。

          


0

cache与主存的地址映射

标签:

原文地址:http://blog.csdn.net/jxl_1207/article/details/51312096

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!