您尚未登录。

楼主 #1 2018-06-05 18:04:59

xinxiaoci
会员
注册时间: 2018-04-18
已发帖子: 71
积分: 71

CACHE 的概念及原理

《单片机小白转嵌入式Linux学习记录,基于S3C2440----目录》

CACHE 高速缓存

S3C2440 内部有

16k 指令缓存 16K 数据缓存

通过 CP15 协处理器来控制

程序局部性
a. 时间局部性 在程序执行时,在一段时间内有极大的概率访问同一地址的指令/数据。
b. 空间局部性 在程序执行时,在一段时间内有极大的概率访问相邻地址的指令/数据。

对于高速缓存中的数据存储方式:

地址 : 数据
地址 : 数据
地址 : 数据
地址 : 数据
地址 : 数据

对于高速缓存中的指令存储方式:

地址 : 指令
地址 : 指令
地址 : 指令
地址 : 指令
地址 : 指令

Data CACHE 与 Instruction CACHE 在读取时类似。
以 Data CACHE 为例:地址A 地址B 相邻

  1. 程序要读取地址A的数据
    a. cpu以地址A查找CACHE,一开始CACHE中无数据 : CACHE MISS
    b. cpu把地址A发送到SDRAM,SDRAM返回的不只是地址A的数据, 而是一系列的数据 CACHE LINE = 8 WORD = 32 byte
    把返回的数据读入 CACHE : CACHE FILL 并返回A地址对应的数据给 CPU

  2. 程序再次读取地址A的数据
    a. cpu以地址A查找CACHE,CACHE 有对应的地址,直接读取CACHE中的数据给CPU : CACHE HIT 命中

  3. 程序读取地址B的数据
    a. cpu以地址B查找CACHE,CACHE 有对应的地址,直接读取CACHE中的数据给CPU : CACHE HIT 命中
    ......
    ......

  4. 16k CACHE满
    a. 将老数据置换出去
    b. 填充新数据

write buffer 写入缓冲,由于CPU运行的比较快,写外部硬件比较慢,所以 CPU 可以直接把要写的数据扔给 write buffer 然后去执行下一条指令,write buffer 去和硬件打交道,从而提高CPU运行速度。

Data CACHE 和 write buffer 可以后四种组合方式:s3c2410 585

  1. NCNB 不启动 Data CACHE 和 write buffer CPU直接操作外部硬件,适用于外设寄存器操作。

  2. NCB 不启动 Data CACHE 启动 write buffer , CPU把要写的数据给 write buffer ,write buffer再把数据写给硬件。

  3. WT 启动 Data CACHE 不启动 write buffer , CPU把数据写给 Data CACHE ,Data CACHE 再把数据写给硬件。写通

  4. WB 启动 Data CACHE 和 write buffer ,写回 分为两种情况:
    miss 未命中: CPU -> write buffer -> 硬件
    hit 命中: CPU -> Data CACHE(标记 dirty 脏) -> 合适的时机 -> write buffer -> 硬件
    合适的时机:
    a. Data CACHE 缓存满需要替换时 会把标记 dirty 的数据 -> write buffer -> 硬件
    b. 强刷 flush ,CACHE -> write buffer -> 硬件

--------------------------------------------------------------------

协处理器CP15 管理CACHE 和 MMU

主CPU:r0 - r15
协处理器: c0 - c15 c7 有多个专用寄存器 类似于主CPU的专用寄存器。

协处理器操作:S3C2440 P142
<MCR|MRC>{cond} p#,<expression1>,Rd,cn,cm{,<expression2>}

mcr p15,0,r1,c1,c0,0

mrc : mov register coprocessor 将协处理器寄存器数据 写入 主CPU寄存器
p15 : CP15 协处理器
r1 : 主CPU寄存器
c1 : 协处理器寄存器
c0,0: 区分是哪一个c1 有可能一个寄存器对应多个专用寄存器

mcr p15,0,r1,c1,c0,0 将主CPU 寄存器数据写入 写协处理器 寄存器

演示:

由于 Data CACHE 只能通过地址映射后才能使用。演示 Instruction CACHE

使能 Instruction CACHE 需要 设置协处理器CP15 C1-> 12bit 置 1 启动 Instruction CACHE 。 C1 : Control Register 1 参考S3C2410数据手册 附录 2-11 描述

代码:
在start.s 中添加
-----------------------

mrc p15, 0, r0, c1, c0, 0
orr r0, r0, #(1<<12) / r0 = r0 | (1<<12) /
mcr p15, 0, r0, c1, c0, 0

-----------------------

最近编辑记录 xinxiaoci (2018-06-05 18:09:54)

离线

#2 2019-03-09 18:28:11

tink
会员
注册时间: 2019-03-09
已发帖子: 32
积分: 32

Re: CACHE 的概念及原理

mark

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn


东莞哇酷科技有限公司开发