【计算机组成】Cache与CPU的直接映射、全相联映射与组相联映射

2023-11-10

一.Cache与CPU需要映射的原因

        CPU准备访问内存时,会先问问cache存储器有没有已经提前准备好了数据,如果没有则再找内存要:

        如果Cache刚好命中,则直接从Cache中读取数据:

        如果Cache没有命中(Cache失效),则CPU再去找内存要:

        但通常来说,因为Cache(容量小,速度快)和内存的容量(容量大,速度较Cache略慢)不一样,导致Cache和内存记录数据存储方式不一样,而CPU一般只认识内存的记录方法:

        所以就有了Cache与内存的地址映射,方便CPU直接找数据:

二.什么是Cache与CPU的映射

         Cache的地址映射中,会以Cache的容量为标准将内存分成相同大小的块(页或者区),根据映射方法的不同,地址的表达方式也不同,常见的映射方式分为:直接映射、全相联映射和组相联映射。

三.直接映射

        先把映射方式写出来,再详细介绍:

        主存映射如下: 

        直接映射顾名思义,就是直接把内存的地址“直接”原封不动地放到Cache中,但问题来了,Cache可没有主存那么大的容量,怎么“直接”放呢?后来人们就想到一个办法,把内存分成好几区,每一区就刚刚好是Cache的容量大小,根据空间局部性原理时间局部性原理将不同的区放到Cache中去,如果CPU需求的块刚好存在了Cache里,就说这是“命中了”,如果没有,就说是“失效”了。

        如内存容量为1G,Cache容量为8M,采用直接映射方式就可以将内存分为(1G/8M=128)128块,至于128块中要把哪块分到Cache里面去,就是资源调度需要做的事情了。所以,地址映射中就有“区号”(也称之为块)这个部分,让Cache知道这个区块是从CPU哪个地方拿下来的:

       但这样做的一个缺点是,每个区块的页都是固定位置的,如主存中每个区的第 0 页,只能进入到 Cache 的第 0 页。若当前时刻 Cache 中 0 号页已被占据,而 1 到15 页空闲,现在要将 1 区第 0 页(即内存的 16 页)调入 Cache 是会发生冲突的。所以直接映像的区块冲突率非常高

        最后举个例子,如果你想找到一本书里面的某个句子,先找到第几章(区号)后,再找是第几页(页号)中的第几段(页内地址),就能找到你所要的句子,这就是直接映射的地址映射方式。

四.全相联映射

        全相联映像使用相联存储器(什么是相联存储可以参考我之前写的文章:【计算机组成】三分钟了解顺序存储、直接存储、随机存储和相联存储的区别)组成的 Cache 存储器。全相联映像方式很简单,就是主存的每一页可以映像到 Cache 的任一页。如果淘汰 Cache 中某一页的内容 ,则可调入任一主存页的内容:

        没有直接映射方式的分区,是一页一页地放进Cache里面去,所以地址映射比较简单:

        全相联映射最大的缺点是采用了相联存储的方式,也就是按内容访问(要是不懂的快去看看我上面发的那个连接!!)的方式进行搜索,在进行搜索时,主存地址不能直接提取 Cache 页号,而是需要将主存页标记与Cache 各页的标记逐个比较,直到找到标记符合的页(访问 Cache 命中),或者全部比较完后仍无符合的标记(访问 Cache 失败)。因此这种映像方式速度很慢,失掉了高速缓存的作用,这是全相联映像方式的最大缺点。如果让主存页标记与各 Cache 标记同时比较,则成本又太高

五.组相联映射

        组相联映射则是集以上两者映射方式之大成,即分区又分组,组内可以随意调换位置,很好了折中了直接映射和全相联映射的最大缺点,同时又拥有自己的新东西(分组),使得CPU读取变得更为灵活。怎么分组呢?就是在分完区之后,再在区块里面分组,分多少组就得看看Cache的容量有多大,分完组后,组内的页可以随意调换位置,没有特定的限制:

        组相联映像的规则是:主存中的组与Cache 的组形成直接映像关系,而每个组内的页是全相联映像关系。如主存 1区 0页,他在 0组中,所以只能进入 Cache的 0组中,至于进入到 Cache的 0组 0页,还是 0组 1页,并无强制要求,可任意放置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【计算机组成】Cache与CPU的直接映射、全相联映射与组相联映射 的相关文章

  • 终端连接控制(stty的编写)

    终端连接控制 stty的编写 一 背景 文件与目录在之前已经学习过了 文件中包含着数据 这些数据可以被读出 写入 也可以用以操作 但文件不仅仅是计算机唯一的数据来源 计算机的数据还可以来自于许多的外部设备 比如扫描仪 照相机 鼠标等输入设备
  • plsql更改用户登录密码

    ORACLE数据库系统是美国ORACLE公司 甲骨文 提供的以分布式数据库为核心的一组软件产品 是目前最流行的客户 服务器 CLIENT SERVER 或B S体系结构的数据库之一 比如SilverStream就是基于数据库的一种中间件 O
  • System.getProperty用法

    转自 http blog darkmi com 2011 03 16 1666 html System getProperty 用于获取当前的系统属性 比如java版本 操作系统名称 区域 用户名等 这些属性一般由jvm自动获取 不能手工设
  • 文件管理系统(操作系统)——9张思维导图

    文件管理系统 1 文件管理 1 1 一个文件的逻辑结构 比如一个文本txt文件 又或者Excel文件 在我们用户看来 它是长什么样的 这个就是逻辑结构 几个概念 逻辑结构 就是指在用户看来 单个文件内部的数据应该是如何组织起来的 物理结构
  • 虚拟内存的最大容量与实际容量区别

    虚拟内存的最大容量与实际容量区别 1 概念介绍 虚拟内存的最大容量是计算机的地址结构 CPU寻址范围决定的 虚拟内存的实际容量是内存与外存之和 CPU寻址范围 两者的最小值 2 例题介绍 某计算机的地址结构是64位 按字节编址 内存大小51
  • 虚拟机管理程序、虚拟化和云: 深入剖析 PowerVM 虚拟机管理程序

    预备知识 Power 是没有限制的虚拟化 一些企业打算依靠 PowerVM 虚拟化将多个工作负载整合到较少系统上 从而提高服务器利用率 降低成本 Power VM 为基于 Power Systems 平台的高级 RAS 功能和领先性能为 A
  • JSON.stringify()

    JSON stringify 将一个JavaScript值 对象或者数组 转换为一个 JSON字符串 如果指定了replacer是一个函数 则可以选择性的替换值 或者如果指定了replacer是一个数组 可选择性的仅包含数组指定的属性 语法
  • office2013 excel 打开时提示excel词典xllex.dll文件丢失或损坏

    今天打开Excel时 发现报错 xllex dll文件丢失或损坏 我用的是office2013 网上找了好多都是2007的dll文件 导入不了 于是乎重装office 问题解决 但还是把xllex dll烤出来做个备份吧 参考下面步骤即可
  • nslookup命令详解

    nslookup命令用于查询DNS的记录 查看域名解析是否正常 在网络故障的时候用来诊断网络问题 nslookup的用法相对来说还是蛮简单的 主要是下面的几个用法 1 直接查询 这个可能大家用到最多 查询一个域名的A记录 nslookup
  • Linux系统如何看目录属于哪个磁盘分区

    Linux是先有目录 再有磁盘分区 df h 目录 例如 没有挂载磁盘的目录 显示在系统盘 root iZ2ze57v3n0zma46zqiq8nZ sh 1 5 5 df h alidata Filesystem Size Used Av
  • Linux 内核中的 Device Mapper 机制

    Linux 内核中的 Device Mapper 机制 尹 洋 在读博士生 尹洋 中科院计算所国家高性能计算机工程技术研究中心的在读博士生 主要从事服务部署和存储资源管理以及Linux块设备一级的开发和研究工作 简介 本文结合具体代码对 L
  • 内存管理——分页分段

    一 分页存储管理 1 页面与页框 1 页面 将一个进程的逻辑地址空间分成若干个大小相等的片 称为页面或页 并为各页加以编号 2 页框 相应于页面 把内存空间分成和页面相同大小的若干个存储块 称为 物理 块或页框 frame 3 页内碎片 在
  • 《深入理解计算机系统》实验四Architecture Lab

    前言 深入理解计算机系统 实验四Architecture Lab下载和官方文档机翻请看 深入理解计算机系统 实验四Architecture Lab下载和官方文档机翻 我觉得这个文档对整个实验很有帮助 如果你的Y86 64环境还没安装好可以看
  • linux 使用systemctl 启动服务报错: Error: No space left on device

    By default Linux only allocates 8192 watches for inotify which is ridiculously low And when it runs out the error is als
  • slabinfo解读

    文件 proc slabinfo统计slab分配器相关信息 如 cat proc slabinfo slabinfo version 1 1 kmem cache 65 70 108 2 2 1 ip fib hash 10 112 32
  • C#实现FTP文件夹下载功能【转载】

    网上有很多FTP单个文件下载的方法 前段时间需要用到一个FTP文件夹下载的功能 于是找了下网上的相关资料结合MSDN实现了一段FTP文件夹下载的代码 实现的思路主要是通过遍历获得文件夹下的所有文件 当然 文件夹下可能仍然存在文件夹 这样就需
  • MacOS中清除原有ssh公钥方法

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 用ssh的跳转登录服务器后 ssh会把你每个你访问过计算机的公钥 public key 都记录在 ssh known hosts 当下次访问相同计算机时 SSH会核对公钥
  • Common块和Bss段的区别

    昨天看 程序员的自我修养 链接 装载与库 发现不是很理解为什么要用common块 然后仔细看了一番 有了自己的理解 common块 用来存放弱符号 而全局未初始化变量是弱符号 但是难道不是应该存放在 bss段吗 为什么要有common块呢
  • 《OSPF和IS-IS详解》一1.7 独立且平等

    本节书摘来自异步社区 OSPF和IS IS详解 一书中的第1章 第1 7节 作者 美 Jeff Doyle 更多章节内容可以访问云栖社区 异步社区 公众号查看 1 7 独立且平等 OSPF和IS IS详解与TCP IP相比 OSI协议对各国
  • 八股文打卡day20——操作系统(3)

    面试题 线程同步的方式有哪些 我的回答 多线程同时访问和修改某个数据的话 会造成数据的不一致和冲突问题 所以就需要线程同步 线程同步的方式有 1 互斥锁 互斥锁就是 当一个资源被访问和操作时 会对这个资源加锁 把这个资源锁定 其他线程不能对

随机推荐