您尚未登录。

楼主 #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)

离线

页脚

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

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