CPU总体概述

  CPU 缓存「Cache」指的访问速度比一般内存快得多的高速存储器,主要是为了解决 CPU 运算速率与内存读写速率不匹配的问题。因为 CPU 的运算速率比内存读写速率快得多,当 CPU 需要向内存请求数据或者写入数据时,就需要一直等待内存缓慢的读写。在这个过程中,CPU 的高速运算能力就无法得到充分发挥。
  所以缓存的作用就像是 CPU 和内存之间进行数据缓冲的桥梁。
  缓存中的数据是内存中的一部分,这一部分数据被认为是 CPU 在短时间内会即将访问到的数据。当 CPU 在调用数据时,会先从缓存中调用,而不直接通过内存。当在缓存中找到想要的数据时,就会立即读取并返回给 CPU 处理;如果没有找到,就以相对较慢的速度从内存中读取,同时将这个数据所在的数据块都调入缓存中,方便下次对该数据块的读取。主要原因是程序在运行时对内存的访问会出呈现局部性的特征,这种特征表现在使用了某一个数据时,该数据附近的数据会有更高的概率在下次访问时被使用到,这就是局部性原理

计算机存储系统

  一般而言,通用计算机的存储层级分为四层,分别为 CPU 内部寄存器、高速缓存、主存储器和辅存储器。主存可以看作是一般而言的内存,而辅存又可根据是否与计算机相连分为联机和脱机两种类型。

  从层次结构上可以看出,高速缓存处于第二层次,起到承上启下的作用。而为了能够与 CPU 进行高速交互,同时与主存进行数据的交换,高速缓存的结构也十分具有个人特色。
高速缓存并不是一种概念上的缓存,而是由特定 SRAM 组成的物理芯片。在现代 CPU 中,大量的空间都已经被 SRAM 占据。下图是一张Intel CPU的放大图片,红色框标出的就是其中一部分高速缓存。

SRAM:SRAM是指静态随机存储器,它具有静止存取的功能,也就是可以不需要刷新电路就保存内部的数据。性能高,功耗小,速度快,价格高。


  高速缓存一般由两部分组成,控制部分和存储器部分。控制部分是用来判断 CPU 所请求的数据是否保存在存储器中,如果在,则称为命中;若不在,则没有命中。

  当 CPU 命中缓存时,即可直接对高速缓存的存储器进行寻址;未命中时,则需要根据缓存替换算法将主存中的数据块替换到高速缓存的存储器中。实际上地址映像方法就是为了将主存地址与高速缓存中存储器的地址对应起来,进行地址的映射,这样 CPU 在工作才能通过缓存正确地对主存数据进行快速读写。地址映像方法有三种,直接映像,全相联映像和组相联映像。

直接映像

  直接映像的图示如下,主存单元中的区块与缓存中内存块的关系是固定的,主存中的内存块只会存放在高速缓存存储器中的相同块号。因此,只要主存地址中的主存区号与缓存中的主存区号相同,则表明访问缓存命中。

全相联映像

  为了解决直接映射造成灵活性差,缓存空间无法充分利用的问题,全相联映像的方式被提出来。全相联与直接映像就是两个极端,一个只能访问主存单元中固定的主存区块进行对应,一个就允许任意主存的块调入高速缓存存储器中任意的块。

  在进行地址变换时,当主存地址高位的主存块号与高速缓存中中主存块号相比时,有相同的块号即表示命中。一旦命中,CPU 即可通过缓存存储器中的块内地址访问到相应的数据。
全相联映像能够提供非常灵活的变换方式,不受主存所在块的限制。但是同样也是由于过于灵活,导致实际在变换的时候,无法从主存块号直接获得高速缓存存储器的块号,变换过程相对比较复杂,速度也比较慢。

组相连映像

  既然两者方法各有利弊,不妨我们就折中一下。因而有了中庸的组相连映像方式。组相连方式就是将主存和高速缓存存储器中的块再分成组,组之间采用直接映像方式,而组内的块则采用全相联映像方式。具体的实现可以参考以下图示。
  举例来说,主存任何区的0组只能存到高速缓存中的0组中,1组只能存到1组。这就是所谓组间的直接映像。而主存相同一组的任意一块可以存入高速缓存相同组中的任意一块。这就是所谓组内的全相联方式。

  在进行地址变换时,可通过直接映像方式来决定组号,在一组内再用全相联映像方式决定高速缓存中的块号。通过比较主存地址高位决定的主存区号与缓存中的区号,即可决定是否命中。

  缓存替换算法的目的很明显,就是为了使得高速缓存获得尽可能高的命中率,当缓存的存储器满了的时候,将不用的数据块进行删除,替换新的数据。常用的替换算法有以下几种:

  • 随机替换算法:顾名思义,就是通过随机获得一个需要被替换的块号,并用新的数据替换该块。
  • 先进先出算法:即FIFO,通过缓存中的块进入队列的先后顺序进行淘汰和替换,先进入缓存的数据块最先被替换。
  • 最近最少使用算法:即LRU,将近期最少使用的缓存块替换出去。这种算法在实现的时候将最近使用的的数据块放置到靠近缓存顶部的位置。每一次替换都从缓存尾部开始进行。
  • 最不经常使用算法:即LFU,这个算法需要记录每一个缓存块被访问的频率,每一次替换都从最低访问频率的数据块开始。
  • 最近最常使用算法,即MRU,这个算法会最先移除最近最常使用的数据块。

  替换算法说白了,就是看采用怎么样的策略将缓存中的数据块替换出去。在实际的应用中,还会根据程序具体的情况对不同的算法进行优化选择。

本文转自:一则故事带你了解CPU缓存原理!

一文读懂CPU缓存原理!相关推荐

  1. 一文读懂CPU工作原理、程序是如何在单片机内执行的、指令格式之操作码地址码

    文章较长,大家可选择性阅读,嘎嘎细 计算机结构 CPU的运行原理 CPU的控制单元在时序脉冲的作用下,将指令计数器里所指向的指令地址(这个地址是在内存里的)送到地址总线上去,然后CPU将这个地址里的指 ...

  2. 一文读懂CDN加速原理

    一文读懂CDN加速原理 什么是 CDN 工作原理 传统访问过程 CDN 访问过程 组成要素 智能调度 DNS 缓存功能服务 负载均衡设备 内容 Cache 服务器 共享存储 名词解释 CNAME记录( ...

  3. 一文读懂贝叶斯原理(Bayes‘ theorem)

    一文读懂贝叶斯原理(Bayes' theorem) 前言:贝叶斯定理是18世纪英国数学家托马斯·贝叶斯(Thomas Bayes)提出得重要概率论理论.以下摘一段 wikipedia 上的简介: 一. ...

  4. 一文读懂 | CPU负载均衡实现

    在<一文读懂 | 进程怎么绑定 CPU>这篇文章中介绍过,在 Linux 内核中会为每个 CPU 创建一个可运行进程队列,由于每个 CPU 都拥有一个可运行进程队列,那么就有可能会出现每个 ...

  5. 【第1398期】一文读懂前端缓存

    言 有点长,要是坐地铁的话注意时间.今日早读文章由百度@小蘑菇哥哥投稿分享. @小蘑菇小哥,百度上海研发中心资深前端工程师,pwa开源解决方案lavas作者,百度mip核心开发者 正文从这开始-- 大 ...

  6. 一文读懂cpu cache

    转载:https://coolshell.cn/articles/10249.html CPU cache一直是理解计算机体系架构的重要知识点,也是并发编程设计中的技术难点,而且相关参考资料如同过江之 ...

  7. 一文读懂遗传算法工作原理(附Python实现)

    Datawhale干货 选自:AnalyticsVidhya,编译:机器之心 近日,Analyticsvidhya 上发表了一篇题为<Introduction to Genetic Algori ...

  8. 一文读懂网络通信技术原理

    一.网络的由来? 互联网的本质就是一系列的网络协议. 一台硬设有了操作系统,然后装上软件你就可以正常使用了,每个人都拥有一台自己的机器,然而彼此孤立. 如何能让大家一起玩耍,就有了初步的网络,其实两台 ...

  9. 一文读懂图像三原色原理

    本书后面的篇幅将重点讲基于Matlab与FPGA的数字图像处理.但在正式开始之前,我们不得不再得巴拉巴拉一下,图像的成像原理.知其然要知其所以然,了解图像的成像原理,对于图像数据的组成,算法的处理以及 ...

最新文章

  1. lispbox 安装运行.sh的时候出现 lispbox.sh: 2: lispbox.sh: Bad substitution
  2. GlusterFS 安装与配置
  3. 语音公司集体杀入AI芯片 2019场景落地战打响!
  4. Java多线程之并发协作生产者消费者设计模式
  5. 天翼云从业认证(2.3)云计算的价值和核心技术。
  6. 如何理解Minor/Major/Full GC
  7. Ubuntu Server 分区案例
  8. mysql访问类型最好的_【干货满满】最全的MySQL性能指南(一):选择最佳的数据类型...
  9. epoll、mysql概念及简单操作
  10. Android系统自带样式(@android:style/) (转)
  11. 三菱数控CNC系统G代码M代码大全
  12. 后台批量刷新金蝶K3物料名称操作步骤
  13. 越是聪明人越要懂得下笨功夫!
  14. Mac安装双系统后无法切回mac系统
  15. R语言创建空数据框(Empty Data Frame )用于追加数据
  16. U盘插到电脑上无反应怎么办?
  17. [转] 关于“时间”的一次探索
  18. 浅谈Flink对象重用(object reuse)
  19. 智能语音机器人语音识别系统
  20. 什么是ERP系统?为何工厂都要上erp软件?

热门文章

  1. CTEX编辑器之插入公式
  2. 知识上云第四弹:蚂蚁笔记,同时搞定笔记和博客!
  3. qt如何定义全局变量_QT中全局变量的定义
  4. 3dMax 闭合曲线挤出不封口
  5. 领导、员工、选择、矛盾
  6. android8 通知呼吸灯_android8 通知呼吸灯_说说8.0下 Android 通知(Notification)
  7. xposed开发7 - 获取微信个人信息
  8. 声音乐器拓展包-Ableton Live Suite 11 Sound Packs (ALP)
  9. 笔记本电池应该怎样维护保养
  10. 国内有哪些SAAS软件?SAAS软件有哪些优点?