博客
关于我
嵌入式系统设计师学习笔记⑥:存储器的层次架构及Cache详解
阅读量:391 次
发布时间:2019-03-05

本文共 972 字,大约阅读时间需要 3 分钟。

嵌入式系统设计师学习笔记:存储器的层次架构及Cache详解

存储器被组织成金字塔形的层次结构,自上而下依次变得更慢、访问效率更低、容量更大、每字节的造价更便宜。其所处的层数从高到低分别为:

  • CPU寄存器(最快,但容量最少)
  • 缓存(速度较快)
  • 主存(速度较慢)
  • 磁盘(速度较慢,容量大)
  • CD-ROM/Disk(速度更慢,容量大)
  • 存储设备(速度最慢,容量更大)

Cache概述

Cache是CPU与主存储器之间的缓冲器,主要功能是解决“冯·诺依曼瓶颈”问题,通过提高数据传输效率来优化系统性能。其核心原理解决程序的时间局部性和空间局部性。以下是Cache的基本组成和相关概念:

局部性原理

  • 时间局部性:程序运行中,如果某个存储项被访问过,未来一段时间内它很有可能再次被访问。
    例如:循环变量i在短时间内被多次使用。
  • 空间局部性:在程序运行过程中,某个存储项被访问后,其在内存中的相邻区域很有可能在短时间内被访问。
    例如:数组的元素按物理存储顺序连续排列,相邻元素的访问频率较高。

Cache的命中率直接决定了系统性能。在读操作中,Cache命中时间远小于失效损失时间。因此在设计Cache时,需要尽量减少失效率,而提高命中率。

Cache参数

  • 块(Line):Cache数据交换的最小单位。
  • 命中(Hit):在Cache中找到所需数据的操作。
    命中率(Hit Rate) = 命中次数 / 总访问次数。
  • 失效(Miss):需要在更慢的级别(如主存)中查找数据。
    失效率(Miss Rate) = 1 - 命中率。
  • 置换算法:根据程序需求动态替换Cache中的数据块,影响命中率。

Cache地址映像

Cache地址映像是通过硬件自动实现的。以下是Cache地址变换的几种常见方式:

常见的地址映像和变换方式

  • 直接映像

    • 主存与Cache按块一一映射,主存的块只能映射到Cache中的特定块。
    • 地址变换电路简单,适合小容量Cache。
  • 组相联映像

    • 主存的任意块可以映射到Cache中的任意块地址。
    • 适用于大容量Cache,空间利用率高,但实现较为复杂。
  • 全相联映像

    • Cache分成多个组,每个组内采用直接映像方式,组间采用全相联镜像。
    • 这是一个折中方案,成本比全相联镜像低。
  • 通过选择合适的镜像方式,可以在实现复杂度和命中率之间取得最佳平衡。

    转载地址:http://jmvzz.baihongyu.com/

    你可能感兴趣的文章
    netcore中使用session
    查看>>
    Android 开发学习进程0.25 自定义控件
    查看>>
    多媒体文件格式全解说(下)--图片
    查看>>
    淘宝WAP版小BUG分析
    查看>>
    NodeJS+Express+MongoDB
    查看>>
    (四十四)c#Winform自定义控件-水波-HZHControls
    查看>>
    c#winform主题实现的一个方法
    查看>>
    asp.net打印网页后自动关闭网页【无需插件】
    查看>>
    一个人开发的html整站源码分享网站就这么上线了
    查看>>
    SQLServer 查看耗时较多的SQL语句(转)
    查看>>
    【计算机网络】应用层
    查看>>
    【Maven】POM基本概念
    查看>>
    【Java思考】Java 中的实参与形参之间的传递到底是值传递还是引用传递呢?
    查看>>
    【设计模式】单例模式
    查看>>
    【SpringCloud】Hystrix熔断器
    查看>>
    【Linux】2.3 Linux目录结构
    查看>>
    java.util.Optional学习笔记
    查看>>
    远程触发Jenkins的Pipeline任务的并发问题处理
    查看>>
    jackson学习之七:常用Field注解
    查看>>
    jackson学习之八:常用方法注解
    查看>>