缓存

本文探讨了处理器与内存间速度差异的原因,介绍了高速缓存(Cache)的概念及其工作原理。通过阐述直接映射法的基本概念及应用实例,揭示了缓存在提高数据访问效率方面的作用。同时,还提供了一个基于缓存原理的日志调试工具的设计方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 一个工艺上的问题

  • 处理器和内存所使用的半导体器件工艺不同
  • 工艺的差异导致了处理器与内存的速度差异
  • 数据处理时,处理器总是需要等待内存
    这里写图片描述

2 程序访问的局部性

  • 在短时间内,处理器访问的存储空间是一个很小的范围
    • 时间局部性:某个存储单元在短时间内很可能被再次访问
    • 空间局部性:某个存储单元的邻近单元在短时间内也被访问

3 高速缓冲存储器的引入(Cache)

  • Cache是一种小容量高速存储器
  • Cache的存取速度与处理器的运算速度几乎同量级
  • Cache在现代计算机系统中直接内置于处理器芯片中

4 Cache解决方案

  • 在处理器和内存之间设置cache
  • 把内存中被频繁访问的指令和数据复制到cache中
  • 大多数情况下,处理器能直接从cache中取得指令和数据

5 处理器数据访问

这里写图片描述

6 内存和cache之间的映射

6.1 直接映射法

6.1.1 直接映射法基本概念
  • 将cache和内存分成固定大小的块(如:512Byte/块)
  • 内存中的每一块在cache中有固定的映射位置
  • 映射公式为:POScache = 内存块号%cache总块数
    这里写图片描述
    特点:任意一个内存地址都能被映射到cache中的一个固定位置。
6.1.2 直接映射法原理
  • 地址划分
    这里写图片描述

  • 映射原理

    • 根据访问地址中的c位找到cache中的对应块
    • 比较地址的高t位是否和flag相同
      相同:直接读取数据
      不同:从内存中复制块内容
6.1.3 直接映射法举例

这里写图片描述

6.1.4 直接映射法的特点
  • 优点:映射过程简单,所需耗时短
  • 缺点:当短时间内访问的地址有同余冲突时,会造成缓存失效

7 cache原理的软件应用

  • 项目背景:日志调试工具

    • 解决的问题:
      ✓ 日志对系统效率影响巨大,且不容易分析查看
      ✓ 现有的日志系统无法高效的打印二进制数据
      ✓ 自定义日志内容的解析方式
      ✓ 对日志进行分类,并控制日志是否输出
    • 出现过的性能问题:当短时间内有大量日志需要打印时,性能无法满足调试需要
    • 最终的解决方案:根据cache原理,设置二级缓存机制,尽量避开查找!

    • 核心伪码如下:

void process(Message* msg)
{
    static Parser* cache1 = NULL;
    static Parser* cache2 = NULL;
    static int flag = 0;

    if ((cache1 != NULL) && (cache1->id == msg->type))
    {
        cache1->handle(msg);
    }
    else if ((cache2 != NULL) && (cache2->id == msg->type))
    {
        cache2->handle(msg);
    }
    else
    {   

        Parser* p = find_parser(msg->type);

        if (NULL != p)
        {
            p->handle(msg);

            flag = !flag;
            if (flag == 0)
            {
                cache1 = p;
            }
            else
            {
                cache2 = p;
            }       
        }
    }
}

修改记录


时间动作
2017.6.7首次上传

参考资料


唐老师 — 狄泰软件学院 — 十二月提升计划

李云 — 《专业嵌入式软件开发 全面走向高质量编程》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值