主存与cache的地址映射
地址映射方式有全相联映射方式,直接映射方式,组相联映射方式三种。
- 全相联映射方式:
主存块数2s块 块大小2w个字 主存地址长度 s+w 位 将主存的一个块的地址与块的内容一起存于cache的行中,块地址作为cache的标志。
主存地址格式:主存块号+块内偏移地址(块大小)
cache地址格式: cache行号+行内偏移地址(块大小)
cache标记tag:主存块号
- 直接映射方式:
主存地址长度s+w位 cache的行数=m=2r 把主存块地址变为 低r位主存区内块号作为cache的行地址 高s-r位区号作为标记与块数据一起保存在该行。
CPU给定一个内存地址访问cache时,首先用r位区内块号找到cache的某一行,然后用地址的s-r位区号部分与此行的标记在比较器中比较,若相符即命中,在cache中找到了所要求的块,而后用地址中最低的w位读取所需求的字。
主存地址格式:主存区号+区内块号+块内偏移地址(块大小)
cache地址格式:cache行号+行内偏移地址(块大小)
cache标记tag:区号
- 组相联映射方式:
主存地址长度s+w位 cache的行数=m=2r 把主存块地址变为 低d位主存区内块号作为cache的组地址,高s-d位区号作为标记与块数据一起保存在该组内某行。
CPU给定一个内存地址访问cache时,首先用d位区内块号找到cache的相应组,然后用主存地址的高s-d位区号部分与该组v行中的所有标记同时比较,哪行的标记与之相符,哪行即命中,而后用内存地址中最低的w位读取所需求的字。
主存地址格式:主存区号+区内块号+块内偏移地址(块大小)
cache地址格式:cache组号+组内行号+行内偏移地址(块大小)
cache标记tag:区号
个人理解:cache地址是地址,需要利用行号或者组号去找到它,而不是里面的内容(标志+块内容)
例题: 有一个处理机,主存容量 1MB,字长 1B,块大小 16B,cache 容量 64KB,若 cache 采用直接映射式,请写出它的主存地址,cache地址:
解:
主存容量1MB,块大小16B,可得主存有1MB/16B=2^16块 所以块地址有16位
cache容量64KB,可得cache有64KB/16B=2^12行 cache行地址有12位
主存地址(20 位):块地址 16 位 + 块内字地址 4 位
Cache 地址结构(16 位):行地址 12 位 + 行内字地址 4 位
主存地址结构: 标记 4 位 + 行地址 12 位 + 字地址 4 位 区号有4位,行地址12位,字地址4位
此为复习计组时,由于之前并没有仔细看书本内容,导致对这部分内容记忆很模糊,遇到题就不会做,故此细品书本,理解各个方式的原理,也在此分享。
人非圣贤,如有错误,请批评指正,谢谢。