软件架构设计师笔记(缓存)

Cache(缓存) 的功能是提高 CPU 数据输入输出的速率,突破所谓的“冯•诺依曼瓶颈”

由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起来要慢的多,

因此如果任何时候对数据的操作都要通过和内存的交互来进行,会大大降低指令执行的速度。因此在CPU里面就有了高速缓存

为了节约成本 通常在CPU 和内存之间设置小容量的 Cache。

Cache 基本原理

其中:1级缓存的容量通常在32~256KB。二级缓存一般为128KB~3MB

缓存真的很小,是 内存的 千分之一,甚至 十万分之一

缓存如此之小,怎么可能让CPU提速呢?

原因是:程序的局部性原理。

根据程序的局部性原理,最近的、未来要用的指令和数据大多局限于正在用的指令和数据,或是存放在与这些指令和数据位置上邻近的单元中

所以我们就将相邻的数据放入了缓存中,方便CPU提取。

当然,缓存的容量有限,有时候cpu 在缓存中没有找到数据,只能去主存中获取数据了,这时我们就称 (访问未命中)

于是我们有了cpu执行一段程序的时间,公式

t3 = t1* h + t2*(1-h)

t3 : 系统执行平均时间 (系统的平均周期)

t1 : 系统在 缓存中消耗的时间

h : 系统在缓存中命中率 (如 查询 100次数据 命中了 95 次  命中率 为 95% )

t2 : 系统在 内存 中耗费的时间

(1-h) : 系统的未命中率  (1- 命中率 )

     注: 未命中率 =!命中率   命中率 最大值就是为1  未命中率 就是 1- 命中率

例如,设某计算机主存的读/写时间为 l00ns,有一个指令和数据合一的 Cache,已知该Cache 的读/写时间为 10ns,取指令的命中率为 98%,取数的命中率为 95%。在执行某类程序时,约有 1/5 指令需要存/取一个操作数。假设指令流水线在任何时候都不阻塞,则设置 Cache 后,每条指令的平均访存时间约为:

(2%′100ns+98%′10ns)+1/5′(5%′100ns+95%′10ns)=14.7ns

指令时间 + 取数时间

直接映像

从高到低依次为:区号、页号以及页内地址

内存容量为 1GB,Cache 容量为 8MB,页面的大小为 512KB。

直接映像中,先分区,再分页。一个区的大小就是 Cache 容量的大小,所以一共分:1GB/8MB=128 个区,区号 7 位。

每个区分:8MB/512KB=16 个页,所以页号为 4 位

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第一章 计算机组成与体系结构 1.1 计算机系统组成 1.1.1 计算机硬件的组成 控制器。控制器是分析和执行指令...
    步积阅读 6,246评论 0 15
  • CPU Cache 今天的CPU比25年前更复杂。那时候,CPU内核的频率与内存总线的频率相当。内存访问只比寄存器...
    blueshadow阅读 8,269评论 0 5
  • 1. 基础知识 1.1、 基本概念、 功能 冯诺伊曼体系结构1、计算机处理的数据和指令一律用二进制数表示2、顺序执...
    yunpiao阅读 10,927评论 1 22
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,902评论 1 32
  • 在职场中一个人的智商也许能够决定他做到什么位置,但是一个人的情商就能决定他能够在这个位置呆多久。 那么如何处理与同...
    这个馒头有馅阅读 5,334评论 1 12

友情链接更多精彩内容