[toc]
1.Cache的基本结构
Cache包括:SRAM,控制逻辑(主存地址寄存器、主存——Cache地址变换机构,替换控制器件和Cache地址寄存器)
2.Cache的读写操作
2.1 读操作
当CPU发出读请求时,如果Cache命中,就直接对Cache进行读操作;
如果Cache不命中,则访问主存,并把该信息从主存调入Cache内。
如果Cache满了,则根据替换算法替换Cache中原来的某个信息
2.2 写操作
Cache保存的是主存的副本,当CPU发出写请求时
如果Cache命中,有可能会遇到Cache与主存内容不一致问题。
造成原因通常是:
- CPU写Cache后,没有立即写入主存;
- I/O写入主存后,没有立刻将信息从主存调入Cache更新。
处理的方法有:
写直达法:CPU把数据同时写入Cache和主存;
- 增加很多不必要的写主存操作,访问存储器速度会变慢
- 实现简单,随时保持存储数据的正确性
写回法:CPU把数据暂时只写入Cache,并用标志注明,等该块被替换时才写回主存。
减少很多不必要的写主存的操作,访问存储器的速度会提高
有可能出错,因为主存的字块有可能没有及时被修改
如果Cache不命中,直接把信息写入主存,并有两种处理方法
- 不按写分配法:只写入主存
- 按写分配法:写入主存,并将该块读入Cache
3. 地址映像
把主存地址空间映像到Cache地址空间
全相联映像:主存的任一块可以被放置到Cache中的任意一个位置
- 空间利用率最高
- 块冲突率最低
- 实现复杂度最大
直接映像:主存中的每一块只能被放置到Cache的唯一一个位置(循环分配),也就是主存块的位置取模Cache块的个数
- 空间利用率最低
- 冲突概率最高
- 实现最简单
组相联映像:主存中的每一块可以被放置到Cache中的唯一的一个组中的任意一个位置
若主存的第i块映像到第k组,则
k=i mod Cache的组数
例如:假设Cache有8个块,而主存有16个块,我们把Cache分为4各组(0,1,2,3),每个组有两个块,对应的主存也需要4个区,所以每个区有4个块。例如第9块位于区2(8(0),9(1),10(2),11(3))的第1个块,所以对应到Cache中的第1组的任意一个位置,也就是9mod4=1