我也是因为要考试,看了好久才略懂,讲的不行的地方,欢迎指出。
直接映像和全相联映像因为网上讲的还行,这里不再重说。
组相联映象:
首先,我们先把主存和Cache格式写好,主存:组号+主内块号+块内地址,Cache:组号+块号+块内地址
主存组号:它是用来和Cache的标记一一比较,若相等则命中,若没有相等,这没有命中。
主存块号:等于Cache的组号,它是用来寻找Cache的第几组
Cache组号:就对应着主存的组号,通过它我们先在主存中找到第几组
Cache块号:它说明了每一组有几块,比如块号为2,则它每一组里面有四块。
块内地址:主存和Cache地址一样。
如果命中的话,则f访问Cache的地址为主存的块号+Cache的组内块号(就是你在那一组里面找到的第几个)+块内地址
下面我们通过例题分析:
设某微机主存容量1MB,划分为16×1024块;Cache容量为8KB。采用4路组相联映像时,当前Cache映像如下表所示。判别CPU发出80032H和3612CH主存地址时是否命中Cache,若命中,写出Cache地址。
标记 | Cache |
032H | 第0块 |
065H | 第1块 |
080H | 第2块 |
046H | 第3块 |
┇ ┇ | ┇ ┇ |
036H | 第16块 |
092H | 第17块 |
06CH | 第18块 |
100H | 第19块 |
┇ ┇ | ┇ ┇ |
1MB=2的20次方所以地址20位,同理,Cache地址13位,采用四路组相联映象,就代表Cache的块号2(4=2的平方)位,主存16*1024,有14位地址则剩下来的就是块内地址6位,主存的块内地址和Cache相等,主存的块号和Cache的组号相等,
综上所述:主存地址格式:20=9(组号)+5(块号)+6(块内地址);
Cache地址格式:13=5(组号)+2(块号)+6(块内地址);
由于Cache的块号是2,即Cache里面4个地址一组。
主存给出的地址:80032H=1 0000 0000 00000 110010
根据块号00000,寻找主存的第0组,根据1 0000 0000,发现0组里面地址是032H,065H,080H,046H,都不匹配,所以没有命中
再看下一个主存地址3612CH=0 0110 1100 00100 10 1100
首先根据00100,知道到第四组,从0组开始,每四块一组,发现刚好是图中给出的第16,17,18,19,块,然后根据0 0110 1100,发现第18块06C,和他匹配,则命中。其中第18块在这一组里面是老三,则他的编号是10(老大是00,老二是01,老三是10,老四是11).接着我们要写出访问Cache的地址:主存的块号+Cache的组内块号(就是你在那一组里面找到的第几个)+块内地址,也就是00100 10 101100 即4ACH。就大功告成啦!