视频字幕
大家好!今天我们来学习计算机组成原理中的Cache和主存映射方式。首先了解一下Cache的基本概念。Cache是位于CPU和主存之间的高速缓冲存储器,就像一个聪明的小助手,帮助CPU快速获取常用数据。CPU访问Cache只需要1到2个时钟周期,而访问主存需要50到100个时钟周期,速度差异非常明显。让我们看看数据是如何在这三者之间传输的。
欢迎来到计算机组成原理的Cache世界!想象一下,Cache就像是你桌上的小书架,而主存就像是房间里的大书柜。当你需要读书时,如果书在小书架上,你可以立即拿到;如果不在,就需要从大书柜里找,这会花更多时间。Cache映射方式就是决定哪些书应该放在小书架上的规则。今天我们要学习三种主要的映射方式:直接映射、全相联映射和组相联映射。
现在我们来学习第一种映射方式:直接映射。想象一下,这就像是分配宿舍的固定规则。每个主存块就像一个学生,只能住进特定的宿舍房间。映射公式很简单:Cache块号等于主存块号对Cache块数取模。比如8个主存块要映射到4个Cache块,那么主存块0和4都要住进Cache块0,主存块1和5住进Cache块1,以此类推。地址被分为三部分:标记位就像学生的学号,用来区分住在同一房间的不同学生;块号确定是哪个房间;偏移确定在房间内的具体位置。直接映射的好处是规则简单,硬件成本低,就像宿舍管理很容易。但缺点是容易打架,当两个学生都想住同一个房间时,只能让一个住,另一个被赶走。
接下来是全相联映射,这就像是一个超级灵活的旅馆!每个客人(主存块)都可以住进任何一个房间(Cache块),完全没有限制。这种方式就像有一个万能钥匙,可以打开任何房门。因为任何主存块都能放到任何Cache位置,所以地址结构变得更简单,只需要标记位和偏移量,不需要指定具体的Cache块号。但是这种灵活性是有代价的:旅馆需要一个超级聪明的前台(全并行比较器),能够同时检查所有房间来找到客人。这个前台需要同时比较所有Cache块的标记位,看看要找的数据在哪里。虽然这种方式命中率很高,几乎不会发生冲突,但硬件非常复杂,就像需要很多工作人员同时工作,成本很高。
最后一种是组相联映射,这是一个聪明的折中方案!想象一下,这就像把旅馆的房间分成几个区域,每个客人必须住在指定的区域内,但在区域内可以选择任意房间。比如我们把Cache分成2个组,每组有2路。主存块按照取模规则映射到固定的组,但在组内可以灵活选择位置。这样既保持了一定的灵活性,又控制了硬件复杂度。地址结构包含三部分:标记位、组号和偏移量。组号告诉我们要去哪个区域,标记位帮助在组内找到正确的数据,偏移量确定具体位置。这种方式的好处是在成本和性能之间找到了平衡点,既不像直接映射那样容易冲突,也不像全相联那样硬件复杂。当然,组内仍然可能发生冲突,但比直接映射要好很多。
欢迎来到计算机组成原理的奇妙世界!今天我们要学习Cache和主存之间的映射关系。Cache是计算机中的高速缓冲存储器,它就像一个小仓库,需要与大仓库主存建立映射关系。主要有三种映射方式:直接映射、全相联映射和组相联映射。让我们用生动有趣的卡通方式来理解这些概念!
首先我们学习直接映射方式!想象主存是一个大停车场,有8个停车位,编号0到7。Cache就像一个小停车场,只有4个车位。在直接映射中,每个车都有固定的停车规则:0号车只能停0号位,1号车只能停1号位,但是4号车也只能停0号位,5号车也只能停1号位。这就是取模运算,车位号等于车号除以4的余数。地址结构分为三部分:标记位用来区分不同的车,块号决定停哪个车位,偏移表示车位内的具体位置。这种方式硬件简单便宜,但容易发生冲突,比如0号车和4号车都想停0号位就会产生冲突。
接下来我们学习全相联映射方式!这就像是一个超级豪华的动物旅馆,每只小动物都可以住进任何一个房间,完全没有限制!小动物们有完全的自由选择权。这种映射方式最大的特点就是灵活性,任何主存块都能放到任何Cache位置。因为这种完全的灵活性,地址结构变得更简单,只需要标记位和偏移量,不需要指定Cache块号。但是这种自由是有代价的!旅馆需要一个超级智能的大脑作为比较器,能够同时检查所有房间来找到客人。这个智能大脑需要同时比较所有Cache块的标记位,就像用探照灯同时照亮所有房间。虽然这种方式命中率很高,几乎不会发生冲突,但需要很多并行的比较电路,硬件非常复杂,成本很高。
最后我们来学习组相联映射方式!这是一个聪明的折中方案,结合了前两种方式的优点。想象Cache被分成了几个小区,每个小区内部是全相联的,但小动物必须先根据规则进入指定的小区。比如把4个房间分成2组,每组2个房间。动物们按照编号的奇偶性选择小区:偶数号动物去0组,奇数号动物去1组。一旦进入小区,就可以自由选择小区内的任意房间。地址结构包含三部分:标记位用于区分,组号决定进哪个小区,偏移表示房间内位置。这种方式既减少了冲突概率,又降低了硬件复杂度,是性价比很高的选择。在实际计算机中,组相联是最常用的Cache映射方式!
现在让我们来全面对比这三种映射方式!就像选择交通工具一样,每种方式都有自己的特点。直接映射就像自行车,简单便宜但速度有限,容易堵车;全相联映射就像豪华跑车,性能最好但价格昂贵;组相联映射就像家用轿车,性价比最高。从对比表可以看出:直接映射硬件最简单,成本最低,但命中率也最低;全相联映射命中率最高,几乎无冲突,但硬件复杂度和成本都很高;组相联映射在各方面都取得了很好的平衡。在实际应用中,嵌入式系统常用直接映射来控制成本,高性能计算系统可能选择全相联映射追求极致性能,而大多数通用处理器都采用组相联映射,因为它提供了最佳的性价比。这就是为什么组相联映射是现代计算机系统中最受欢迎的选择!
现在让我们通过一个具体的例子来练习计算!假设我们有一个16KB的主存和1KB的Cache,块大小是64字节。我们要计算地址0x1234在三种映射方式下的位置。首先计算块数量:主存有256个块,Cache有16个块。然后将地址0x1234转换为二进制和十进制。接下来分别计算三种映射:直接映射中,先算出主存块号是72,然后72除以16取余数得到8,所以映射到Cache的第8块;全相联映射最灵活,可以放到任意一个Cache块中;组相联映射假设是2路组相联,有8个组,块72除以8取余数是0,所以映射到第0组,可以放在组内的任意位置。通过这个例子,我们可以清楚地看到三种映射方式的计算过程和结果差异。