参考:《计算机组成原理》(第五版) 白中英等著

准备工作:

①cache与主存之间的数据交换是以“块”为单位进行的。一个“块”中包含若干个“字”,字长由实际情况确定。

习惯上,cache中的“块”称“行”,主存中称“块”。cache的“行”与主存的“块”存储容量相同。

②相联存储表(CAM)是一种按内容寻址的存储器。下面所提到的标记(tag)存于该存储器中。

③cache中的标记tag与cache的“行”一一对应的。如果某一块主存数据块拷贝到cache中的某一行,该cache行就会形成相应的标记tag。

三种地址映射方式:①全相联映射方式、②直接映射方式、③组相联映射方式

①全相联映射方式:

理念:主存中的一块可以拷贝到cache中的任意一行。

通俗理解:对于主存中的数据块可以拷贝到cache中的哪一行不做硬性规定。

主存地址格式:主存块号+块内偏移地址

cache地址格式: cache行号+行内偏移地址

cache标记tag:主存块号

映射过程(地址变换过程):

CPU提供一内存地址给cache,cache中的“控制逻辑”将“主存地址格式”中的“主存块号”与cache中所有行的标记tag进行同时比较。

如果存在相同的,即表示“命中”,根据“块内偏移地址”找到相应的字。

如果不存在相同的,即表示“未命中”,那么将会到主存中寻找。

优点:该映射方式下,块冲突的概率低,cache利用率高。

缺点:硬件控制复杂,尤其是用于比较“主存块号”与tag时的比较器电路难于设计与实现。

适用情况:小容量的cache

②直接映射方式:

理念:一个主存块只能拷贝到cache的一个特定行位置去。

通俗理解:相当于将主存空间按cache的大小(行数)进行分区(说“分组”也可以),主存分区(组)后,每区(组)中的数据块数目与cache的行数一致。

将每一区(组)的数据块在区(组)内重新进行编号。使区(组)内各块只能映射到与它区(组)内编号相同的cache行去。

举例:假设现有主存-cache体系。cache共4行,主存共16块。cache的4行编号分别为L0~L3,主存的16块编号分别为B0~B15。如下图所示:

a、首先将主存按照cache的大小进行分区(组):16/4=4(组),即将主存分为4组,编号分别为G0~G3,这样每组中拥有与cache行数相同的数据块。

b、对每组内的数据块进行“组内重新编号”,即B0变为G0的b0,B1变为G0的b1,B2变为G0的b2,B3变为G0的b3;B4变为G1中的b0,B5变为G1中的b1,B6变为G1中的b2,B7变为G1中的b3。依次类推。

c、这样,组内编号为b0的主存块如果需要拷贝至cache,只能放置到L0;b1只能拷贝到L1;b2只能拷贝到L2;b3只能拷贝到L3。如上图所示,相同颜色的说明可以进行拷贝。

主存地址格式:主存组号+组内块号+块内偏移地址

cache地址格式:cache行号+行内偏移地址

cache标记tag:映射到该行的主存块的主存地址的“组号”

映射过程(地址变换过程):

CPU提供一内存地址给cache,相关的逻辑根据内存地址中的“组内块号”确定该主存块如果发生拷贝会被拷贝到哪一行;

然后,将内存地址中的“主存组号”与上步确定的cache行的标记tag进行比较,如果存在相同的即“命中”,如果不存在相同的即“未命中”。

优点:硬件简单,容易实现,成本低。

缺点:发生块冲突的概率较大,导致cache的命中率、效率下降。

适用情况:大容量的cache,更多的行数可以减小冲突发生的机会。

③组相联映射方式:

理念:是直接映射方式与全相联映射方式的折衷方案,适度地兼顾了二者的优点又避免二者的缺点。

将cache的空间分为若干组,主存块与cache组之间直接映射,而组内各块之间全相联映射。

关键:cache的分组数=主存每一组的块数

相关概念:

v路组相联cache:说明该cache采用组相联映射方式且cache的每组有v行。v一般取值较小,典型的有2、4、8、16。

举例:假设有主存-cache体系,cache共4行,主存共16块。cache的4行编号为:L0~L3,主存的16块编号为B0~B15。采用2路组相联映射。如下图所示:

a、cache共4行,采用2路组相联映射,即将cache分为2组G0~G1,每组2行。

b、cache的分组数=主存每一组的块数,即将主存分为8组g0~g7,每组2块。

c、主存组内进行重新编号b0、b1,如上图所示

d、凡是组内编号为b0的主存块,可以拷贝至cache的G0组,至于是2行中的哪一行,是随机的无硬性规定的。依次类推,组内编号b1的主存块可以拷贝至G1组

主存地址格式:主存组号+组内块号+块内偏移地址

cache地址格式:cache组号+组内行号+行内偏移地址

cache标记tag:组号

映射过程(地址变换过程):

CPU提供一内存地址给cache,相关逻辑根据地址中的“组内块号”部分确定主存块如果发生拷贝将会被放置到cache的哪一组中;

然后,将地址中的“主存组号”与上步所确定的那一组中所有行的tag同时进行比较,如果存在相同的即“命中”,如果不存在相同的即为“未命中”。

该映射方式实现较为容易,块冲突概率比直接映射方式低,命中率介于直接映射方式与全相联映射方式之间。被普遍采用。

主存与cache间的地址映射相关推荐

  1. 主存和cache每一块相等_笔记:cpu中的cache(一)

    前言:绝大部分内容来源于北京大学的慕课<计算机组成原理>,地址: https://www.coursera.org/learn/jisuanji-zucheng 存储体系(<深入理解 ...

  2. 假定主存地址位数为32位,按字节编址,主存和cache之间采用直接映射方式,主存块大小为1个字,每字32位,写操作时采用直写(Write Throght)方式,则能存放32K字数据的cache的总容量

    5单选(1分) 假定主存地址位数为32位,按字节编址,主存和cache之间采用直接映射方式,主存块大小为1个字,每字32位,写操作时采用直写(Write Throght)方式,则能存放32K字数据的c ...

  3. 计组 | 【Cache】主存映射cache容量及cache写策略

    预备知识 1.cache的产生背景 在多体并行存储器中讲过,外部设备的优先级最高,这样就会导致CPU等待外部设备访存的现象,致使CPU空等一段时间,甚至可能等待几个主存周期,从而降低了CPU的工作效率 ...

  4. 主存,cache ,寄存器

    寄存器是中央处理器内的组成部份.寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令.数据和位址.在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC).在中央处理器的算术及 ...

  5. 主存和cache每一块相等_CPU中的Cache实现原理

    本文翻译自:http://duartes.org/gustavo/blog/ 微信公众号:技术原理君 本文简要的展示了现代Intel处理器的CPU cache是如何组织的.有关cache的讨论往往缺乏 ...

  6. 高速缓存Cache详解(西电考研向)

    西电计组 考研笔记 内容较多 建议收藏 持续更新 欢迎关注 文章目录 高速缓存Cache详解 一.Cache概述及引入背景 二.地址映射与变换 1.全相联地址映射方式 2.直接地址映射方式 3.组相联 ...

  7. 整理笔记——cache主存映射方式

    (结合看过的几篇文章整理笔记) 什么是Cache地址映射 Cache的容量很小,它保存的内容只是主存内容的一个子集,且Cache与主存的数据交换是以块为单位的.主存每个块的大小和Cache每个块的大小 ...

  8. 3-3存储系统-高速缓冲存储器Cache

    文章目录 一.概述 二.Cache与主存的映射方式 1.直接映射 2.全相联映射 3.组相联映射 三.Cache中主存块的替换算法 1.随机算法RAND 2.先进先出算法FIFO 3.最近最少使用算法 ...

  9. 计算机组成原理题库(唐朔飞)

    计算机组成原理题库 ~~02|01|1|2|A0400047_010_1|871 ^^通常划分计算机发展时代是以( )为标准的. A.所用电子器件 B.运算速度 C.计算机结构 D.所用语言 ^^A ...

最新文章

  1. 微软拼音输入法2007状态栏无法显示!
  2. SQL Server中TOP子句可能导致的问题以及解决办法
  3. SpringBoot中在配置文件中限制文件上传的大小
  4. IdentityServer4【Introduction】之支持的规范
  5. nacos云环境集群部署
  6. Python地理可视化工具包 folium介绍
  7. android progressbar icon,android中ProgressDialog与ProgressBar的使用详解
  8. 卓语言对泛型类的使用
  9. 网页用数学公式编辑器 可以集成到FCKeditor
  10. python免杀技术---shellcode的加载与执行
  11. [css] 当页面采用rem布局时,如何解决用户设置字体大小造成的页面布局错位?
  12. 【优秀选手采访】看十强选手如何顺利拿下腾讯offer
  13. 基于SpringBoot的后台管理系统(启动类解析,开源的世界真好)(一)
  14. 泰康应用盒子Android,泰康医疗app下载-泰康医疗 安卓版v1.8.8-PC6安卓网
  15. 学习python的一些脚本
  16. 面试被问高并发流量控制,我脸都绿了...
  17. 我国低轨宽带通信卫星系统建设迈出了实质性的一步
  18. java 加载java文件_如何用JAVA实现加载一个文件?
  19. 单片机c语言设计电风扇,基于单片机的智能电风扇的设计(毕业论文).docx
  20. 软件测试管理—如何写好软件测试计划书

热门文章

  1. golang uint8、int8与byte的区别
  2. 机器人学笔记(3)矩阵的伪逆
  3. python窗体按钮_Python ---(二)Tkinter窗口组件:Button
  4. C++头文件和源文件的区别
  5. 西门子s7-1200使用蒲公英路由器异地组网,实现远程调试,配置组态修改程序。
  6. JavaScript页面跳转技术笔记
  7. 开发工程师历年企业真题汇总
  8. BigDecimal.setScale(int newScale, int roundingMode)的用法
  9. 前员工又作乱,华人AI学者陷学术造假风波,真假难辨
  10. Medkoo Biosciences 艾美捷 Atogepant说明书