美文网首页
软件架构设计师笔记(缓存)

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

作者: Mr菜头 | 来源:发表于2019-02-24 10:22 被阅读0次

    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 位

    相关文章

      网友评论

          本文标题:软件架构设计师笔记(缓存)

          本文链接:https://www.haomeiwen.com/subject/bhnzeqtx.html