编辑: 飞翔的荷兰人 | 2019-04-14 |
电话:+86
0731 4433018,4430578,4445278,4445728 转8001,8002 邮件:tr @csai.cn 其地址变换的过程如下: 在程序执行过程中,当要访问 Cache 时,用主存地址中的块号 B 与目录表中的主存块号字段进行相联比较.如果 发现有相等的,表示要访问的数据已经装入到 Cache 中了,这种情况称为 Cache 命中.这时,只要把目录表中与主存 块号字段在同一个存储字中的 Cache 块号读出来,并把它与主存地址中的块内地址 w 直接拼接起来,就得到 Cache 地址.用这个 Cache 地址去访问 Cache,把读出来的一个字送往 CPU 就完成了访问过程.如果在相联比较中没有发现相 等的,表示要访问的那个块还没有装入到 Cache 中,这种情况称为 Cache 没有命中,或称为 Cache 失效.这时,要用 主存地址去访问主存储器,把从主存储器中读出来的一个字送往 CPU.同时,把包括被访问字在内的一块都从主存储 器中读出来装入到 Cache 中,另外,还要修改目录表中的主存块号字段,把当前的主存块号 B 写到目录表的这个存储 字中. 有效位是用来标记目录表中的各个存储字是否有效的.如果有效位为"1",表示目录表中由主存块号 B 与Cache 块号b建立的映象关系是有效的.实际上也表示在 Cache 的第 b 块中存放数据是主存第 B 块中数据的正确副本.如果有 效位为"0", 表示目录表中的主存块号 B 与Cache 块号 b 之间的映象关系是无效的, 或者说它们之间根本没有什么关系, 希赛? 远程教育平台――疑难解答 希赛? 软考学院(http://edu.csai.cn/hzzx/kspx.htm) (第5页,共6页)
电话:+86
0731 4433018,4430578,4445278,4445728 转8001,8002 邮件:tr @csai.cn Cache 的第 b 块中存放数据也不是主存第 B 块中数据的正确副本.因此,在访问目录表时,也要看有效位的状态.在Cache 失效时,也要对有效位的状态进行管理.具体方法与直接映象方式的地址变换过程相同. 采用全相联映象和变换方式最突出的优点是块的冲突率最小,Cache 的利用率也最高.但是,需要一个相联访问速 度很快,容量为 Cb 的相联存储器,其代价很高.而且,相联比较所花费的时间将影响 Cache 的访问速度. 2.3 组相联映射 组相联方式是上述两种方式的折中: 在这种方式中还将 CACHE、主存分成大小相等的组,其地址变换过程如下: 希赛? 远程教育平台――疑难解答 希赛? 软考学院(http://edu.csai.cn/hzzx/kspx.htm) (第6页,共6页)
电话:+86
0731 4433018,4430578,4445278,4445728 转8001,8002 邮件:tr @csai.cn 这里也需要一个由高速小容量存储器做成的块表存储器. 块表存储器采用按地址访问和按相联访问两种方式工作. 在块内采用相联方式访问,在块之间采用按地址方式访问.块表的容量与 Cache 的块容量相等,字长为主存地址中的 区号 E、组内块号 B 与Cache 地址中的组内块号 b 的长度之和,另外再加一个有效位及其它控制字段等. 在程序执行过程中,当要访问 Cache 时,用主存地址中的组号 G 按地址访问块表存储器.从块表存储器中读出来 的不仅仅是一个字,而是一组字,字的个数等于组内的块容量 Gb.把这些字中的区号和块号与主存地址中相应的区号 E 和块号 B 进行相联比较.如果发现有相等的,表示要访问的数据已经装入到 Cache 中了,这种情况称为 Cache 命中. 这时,只要把同一个存储字中的 Cache 块号 b 读出来,并且把它与主存地址中直接送过来的组号 g 和块内地址 w 直接 拼接起来,就得到 Cache 地址.用这个 Cache 地址去访问 Cache,把读出的一个字送往 CPU.如果在相联比较中没有 发现相等的,表示要访问的那个块还没有装入到 Cache 中,这种情况称为 Cache 没有命中,或称为 Cache 失效.这时, 要用主存地址去访问主存储器,把从主存储器中读出来的一个字送往 CPU.同时,把包括被访问字在内的一块都从主 存中读出来装入到 Cache 中.另外,还要修改块表存储器等.有效位的使用和管理方法与直接映象方式中的地址变换 过程完全相同,在该图中没有画出来. 这里要注意的一点就是块表存储器采用按地址访问和按相联访问两种方式工作! 3. 总结 简单地说,CACHE 利用了局部性原理,直接相联、全相联是两种不同极端的映射方式,一个过于"死板" 、一个 过于"灵活" ,而组相联却是两者的折中.