计组第三章存储系统难点

⚠️难点1
在进行字扩展的时候,与cpu相连需要多少根地址线是由选择的芯片决定的,如选择若干4K*8位的芯片扩展成64KB的存储体,如果不考虑与译码器的连接等,只考虑地址传输,那么需要12条地址线

⚠️难点2
地址线有12条,数据线有8条,则存储体有多大?
2^12*8
看出来区别了吗

⚠️难点3
计算某一部分所占地址的时候别忘了+1
如一个部分所占空间为C000到FFFF
那么这块空间的大小为FFFF-C000+1

⚠️难点4
遇到以字节为单位,很清楚,为8bit
但是遇到字为单位,要考虑题中的字长是多少,若字长为32位,那么以字为单位就是以32位为编址单位

⚠️难点5
多体并行存储器
高位交叉编织
高位为体号,这样做就会导致
第0模块 00 000
00 001
00 010

第1模块
01 000
01 001
01 010

若取一个连续存放的指令或者数字,必须要等0号取完,才能取1号,而不能在第0模块取的时候,同时去第1模块取
因此高位交叉编址是串行存取

而低位交叉编址
若给出存取周期为T,且为四个模块,那么tao的值为T/4。
若在相邻的四次访问中,重复有0或1…那么会发生冲突。
还需注意的是最低两位是模块号。且流水线型进行并行处理时,若要进行不止一轮,第一轮用时2.25s,而存取周期T为1s,那么就要按照3s来算,除了最后一轮可以用2.25s来算

⚠️难点6
全相联映射
直接映射
组相联映射

全相联映射:主存可以映射到cache的任何行
因此需要记录 标记位+主存块号+cache块号+块内地址
⚠️注意:如cache一行可以存储64B,主存按照字节编址,那么主存一行也要摆64个B,这样才能整个一个存储单元搬到cache中,所以可以知道,主存的6位是用来指示块内地址的,剩下的位,是用来指示主存地址的,为了和cache对应方便,若cache有8行,则取3个字为cache。
这样一来主存地址=xxx+cache的块号

全相联映射因为随机存放,所以需要记录cache的块号
而直接映射因为一一对应,不需要存cache的块号,但仍然需要存有效位

全相联映射:地址空间=主存字块标记+字块内地址

主存字块标记:一个存储空间按字节编址,而一个块为4个字节,那么0~3的单位属于第0个主存块,第4~7的单位属于第1个主存块…
同时要添加有效位,表示该位置已被占用

字块内地址的位数由cache一行的数据量决定的

直接映射:主存地址=主存字块标记+cache字块地址+字块内地址
主存与cache行一一对应,如cache第0行存着主存的第0块,第2^c块…
每行包括
有效位 标记位(和cache无关的) 每行存储的数据(包括块内地址,取决于cache行的大小,若为16B,则需要4位,cache多少行,若1024行,则需要10位,因此和cache有关的就需要14位,由于是直接映射,因此这14位是主存的低14位)

算命中率时,若cache字块地址相同,如都指向第三行,那么看主存字块标记(简称标记)是否相同,相同就命中,不相同就直接替换。

组相联映射:主存字块标记+组地址+字块内地址
组地址,若分为4组,那么问某单元所在组号,可以先求出其所在块号,然后块号除以4,即为所在组号
(分4组,则组地址需要两bit)

如一个主存地址的十进制数为78,每个cache块大小为16B,按字节编址,块号=78/16=4
(0~161-1 为块1。 161~16*2-1为块2)
组号=块号/4=0,所以是第0组

如cache有8行,分为2路,则是4组
组间直接映射,组内全映射
不需要记录块号,但需要记录组号

你可能感兴趣的:(笔记)