ip软件介绍

CPU基础知识拓展3

标签: | 作者:admin | VISITORS: | 来源:未知
28
Nov
2022

CPU要访问一个内存地址0__1CAABBDD?,它首先检查这个内存地址是否在缓存中,检查过程是这样的:内存地址的二进制形式是(低位在前面):| tag | inde__ | offset |0 0 0 1 1 1 0 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1先计算内存在cache
line中的偏移,因为缓存块是64字节,那么offset需要占6位(2^6=64),即offset=011101=29。接着要计算缓存项的索引,因为缓存项数组是512个,所以inde__需要占9位(2^9=512),即inde__=011101111=239。

现在我们通过offset和inde__已经找到缓存块的具体位置了,但是因为内存要远比缓存大很多,所以多个内存块是可以映射到同一个位置的,怎么判断这个缓存块位置存的就是这个内存的值呢?答案就是tag:内存地址去掉inde__和offset的部分,剩下的就是tag=00011100101010101=0__3955。通过inde__找到缓存项,比较缓存项中的tag是否与内存地址中的tag相同,如果相同表示命中,就直接取缓存块中的值;如果不同表示未命中,CPU需要将内存值拷贝到缓存(替换掉老的)。

这种映射方式就称为直接映射(Direct mapped),它的缺点就是多个内存地址会映射到同一个缓存地址,拿上面的内存地址来看,只要offset和inde__相同的内存地址,就一定会映射到同一个地方,比如:00011100101010100 011101111 01110100011100101010110 011101111 01110100011100101010111 011101111 011101如果同时访问上面3个地址,就会一直替换缓存的值,也就是一直出现缓存冲突,这可能比没有缓存还要慢,因为除了访问内存外,还多一个拷贝内存值到缓存的操作。N路组相联为了解决上面的问题,我试着把缓存项数组分成2个数组(2路),比如分成2个256的数组,如下图所示:查找过程和上面其实一样的:先通过inde__找到数组索引,只不过因为是2路,所以存在2个数组。


电脑常见英文词汇


electronic cash电子现金
electronic commerce电子商务
electronic communications privacy act of1986电子通信隐私法案
encrypting加密术
energy star能源之星
Enterprise computing企业计算化
environment环境
Erasable optical disks可擦除式光盘
ergonomics人类工程学
ethics道德规范
External modem外置调制解调器
extranet企业外部网

相关新闻
首页 | ip使用技巧 | 云手机使用相关 | ip软件介绍 | 蛙仔云手机
 分享按钮