一个块的大小就是一个字的容量,一个字节固定是8位,8bit,一字节是B
int为4个字节,就是32位二进制
CACHE为了解决CPU与主存之间速度不匹配的问题
CACHE与主存之间数据交换以块为单位,就是一个字一个字
所以需要把主存和CACHE按照相同的块大小进行划分。要求主存块与CACHE的块内地址相同,变的是块号的映射关系
地址包含块号和块内偏移量,即块内地址
对于主存来说,块号的地址多,对于CACHE来说,块号的地址少
按字节编址的话,不影响求块数,
块数决定数据地址的块间地址位数;每块大小决定数据地址的块内地址位数(块内偏移量)
编址方式决定最后地址的总位数(主存与CACHE的数据位)
按字节编址,那么对于容量需要20位地址,CACHE需要8位地址数据位
注意区分字和字节,,一个块先是包含好多的字,然后一个字由好多的字节组成
每块4个字,一个字有4个字节,那么一个块就有16个字节;那么块内地址需要4位,所以主存需要16位块间地址(取决于主存的总块数,本身也就是总块数,即总大小除以块的大小),CACHE需要4位块间地址(即16个块)
每个块大小是4个字,一个字为4个字节,即4*4=16个B,主存分为1MB/16=2<<16个块
CACHE分为256B/32B=8B个块
一个字节是8位,一个字节是8位
按字节编址,CACHE容量为256B=2<<8个字节,那么CACHE的位数是8,所以就是地址有8位
主存有2《《20/16=2《《16个字节个块,按字节编址的话有20位
块数≠位数
采用字节编址的话,一个块里有16个字节,一个地址是8位,那么一个块里有两个地址
如果按字编址的话,那就是一个块就是一个完整的地址,交换块就是在交换地址
地址来索引主存的某个具体的地址。
如果按字编址,求地址的数量,是要让主存容量除以每个字的大小;
一个块可能包含很多的字,所以才需要块内地址(块内偏移)的说法
容量是2MB,块大小是8个字,一个字是4B,那么每块是32B,
所以主存的块数是2《《21/2《《5=2《《16,
主存地址有2《《21/2《《2=2《《19位,所以是需要19位地址
由于一个块内包含8个字,所以块内地址需要3位
由于块数有2《《16,所以需要16位块间地址(块内、块间也可相互转换求得)
注意是按字编址,求块数和求地址位数是两个独立的过程;求块数就是总主存容量除以每块的大小
CACHE为512B,那么CACHE里有2《《9/2《《5=2《《4个块数量
所以CACHE地址里,需要4位块间地址,
按字编址,字内包含8个字,块内地址要3位(需要和主存地址的块内地址保持一致)
需要CACHE地址需要7位
或者由于同样是按照按字编址,所以CACHE存数据需要2《《9/2《《2=2《《7,即7位地址
所以缓存块号,即CACHE地址里的块间地址有4位,
主存地址32位,按字节编址,就是说一个地址含有8位,主存块大小是4个字,每个字32位B,
CACHE要存放4K个字,那就是4K*32=128K位的二进制长度,
总大小是4K个字,每个块大小是
时刻注意,交换的时候是要按照块的大小进行交换的,块的数量确认也是要按照块的大小去确认的,就是要存储数据的总大小除以块的大小,注意存储数据的总大小不等于CACHE的总大小,CACHE还包含每块的标记位;
按字节编址,那么对于4K的CACHE,
总容量包含数据大小本身以及索引,每个块含4个字,每个字32位,那么一个块128=2《《7位
一块大小是2<<4个字,由于按字节编址,所以块内的编址需要4位,即一块可以包含2《《4个字
所以4K个字,需要4K/4=1k个块
标记阵列容量=有效位+标记位+脏位
标记阵列是对于每一个块来说的
因为按字节编址,所以块内地址需要4位表示