Cache 主要由 Cache Tag,Cache 存储体,Cache 控制模块组成。Cache Tag 主要用来记录 Cache 存储体中数据的位置和判断 Cache 内数据是否命中;

Cache 存储体主要用来存储片外数据,方便处理器直接调用;而 Cache 控制模块则控制整个Cache 的具体工作,它决定了 Cache 的工作效率。

                                               cache基本结构图

 

                                                Cache 的组织结构

Cache 的状态信息位包括有效位,脏位,锁定位,只读位,LRU 位等等Cache 状态信息位记录该 Cache Line 的状态,比如有效位是用来判断该 Cache Line
是否有效的;而脏位是用来判断 Cache 数据是否与主存相同的;锁定位是用来强制保证 Cache 中该行不被修改的。本文描述的 Cache 使用了有效位和脏位。

当处理器返回修改过后的数据给 Cache 时,脏位就会置 1,表示已改变。当发生 Cache Line 被替换的事件时,Cache 控制器就会对脏位进行检测,若脏位

已经置 1 则该Cache Line 中的数据会被写入主存,保证 Cache 和主存数据的一致性

 

    全相联映射中,主存中每个 Line 能映射到 Cache 中任意的一个 Line,其结是资源冲突少,命中率最高。缺点是电路比较复杂。因为在判断数据是否在 Cache

中时需要将当前地址和 SPRAM 中的所有地址一一进行比较,需要的比较器很多。另外会产生大量访问 Cache 的延迟,因此只能在较小的 Cache 中使用。

   直接映射中,主存按照 Cache 空间大小分成若干容量相等的存储页,存储页中每个 Line 对应到 Cache 中固定的 Cache Line。主存地址对应 Cache Line 进行循

环分配。这种映射方式最容易实现,只需要将当前地址和 Cache 中的某一个地址进行比较,来判断是否命中。但是缺点比较明显,灵活性太差,空间利用率低,

Cache 中的资源冲突也很频繁,使得 Cache 命中下降。在高性能 DSP 中基本不采用该映射方式。

   组相联映射是全相联映射方式和直接映射方式的结合。比如 4 路组相联就是将 Cache  分成 4 个相同的部分,每个部分都称为 Cache  Way。主存分成若干容量相

等的存储页。而主存中每个 Line 都可以被存放在任意 Way 中的对应 Line。该实现方式复杂度比全相联方式低,Way 数目就是比较器所需数目。其映射方式也更加

灵活,从而资源冲突较少,命中率也较高。

 

                                    不同相联度的 Cache 中的缺失率

 

                                          cache数据流向

cache 基本原理的更多相关文章

  1. Cache基本原理之:结构

    转载自:https://www.jianshu.com/p/2b51b981fcaf Cache entries 数据在主存和缓存之间以固定大小的”块(block)”为单位传递,也就是每次从main ...

  2. Linux Cache 机制

    在阅读文章前,您应该具备基本的存储器层次结构知识,至少要了解局部性原理.要详细了解cache基本原理,可以参考本书<深入理解计算机系统>中存储器体系结构一章: 带着疑问来看文章,cache ...

  3. linux从head.s到start_kernelstart_kernel之---内核解压到重定位分析

    一: arm linux 内核生成过程 1. 依据arch/arm/kernel/vmlinux.lds 生成linux内核源码根目录下的vmlinux,这个vmlinux属于未压缩,带调试信息.符号 ...

  4. oracle buffer cache的基本原理

    Buffer cache 的原理 一. 1·)当一个服务器进程需要读数据到buffer cache中时,首先必须判断该数据在buffer 中是否存在,如果存在且可用,则获取该数据,根据lru算法在lr ...

  5. 注释驱动的 Spring cache 缓存介绍

    概述 Spring 3.1 引入了激动人心的基于注释(annotation)的缓存(cache)技术,它本质上不是一个具体的缓存实现方案(例如 EHCache 或者 OSCache),而是一个对缓存使 ...

  6. [转]注释驱动的 Spring cache 缓存介绍

    原文:http://www.ibm.com/developerworks/cn/opensource/os-cn-spring-cache/ 概述 Spring 3.1 引入了激动人心的基于注释(an ...

  7. Spring Cache 介绍

    Spring Cache 缓存是实际工作中非常常用的一种提高性能的方法, 我们会在许多场景下来使用缓存. 本文通过一个简单的例子进行展开,通过对比我们原来的自定义缓存和 spring 的基于注释的 c ...

  8. cache 浅析

    http://blog.chinaunix.net/uid-26817832-id-3244916.html   1. Cache Cache一词来源于法语,其原意是"藏匿处,隐秘的地方&q ...

  9. Using dbms_shared_pool.purge to remove a single task from the library cache

    我们都知道可是使用 alter system flush shared_pool 来清除shared pool 信息,当时不能指定清除某个对象.因为在系统繁忙的时侯 使用 alter system f ...

随机推荐

  1. CF418D Big Problems for Organizers

    传送门 题意,给一棵树,每次给两个点\(x,y\),求\(\max_{i=1}^{n}(\min(di_{x,i},di_{y,i}))\) 看std看了好久 以下是一个优秀的在线做法,\(O(nlo ...

  2. Database学习 - mysql 数据库 数据操作

    mysql数据操作 查询语法 select * | field1,field1 ... from 表名 where 条件 group by 字段 having 筛选 order by 字段 limit ...

  3. C#的五种访问修饰符

    简述: 所有类型和类型成员都具有可访问性级别,用来控制是否可以在您程序集的其他代码中或其他程序集中使用它们. 可使用访问修饰符指定声明类型或成员的可访问性. 在C#语言中,共有五种访问修饰符:publ ...

  4. SpringMVC的JSON数据交互(七)-@Response,@RestController,@RequestBody用法

    1.@RequestBody   (自动将请求的数据封装为对象) 作用: @RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConve ...

  5. Ubuntu14.04+caffe+CPU

    刚刚在上篇博客记录了windows10下GPU版本caffe的安装,正准备跑跑论文里的代码,发现好多命令都是.sh命令,这是linux系统的脚本文件.不能直接在windows下运行,于是我想把.sh转 ...

  6. Mysql Binlog三种格式介绍及分析【转】

    一.Mysql Binlog格式介绍       Mysql binlog日志有三种格式,分别为Statement,MiXED,以及ROW! 1.Statement:每一条会修改数据的sql都会记录在 ...

  7. setInterval的用法

    function show1(){    console.log("每隔1秒显示一次");}function show2(str){    console.log(str);}se ...

  8. mysql系列六、mysql创建用户、授权、备份及恢复命令

    一.创建用户和授权 下面的操作中,其中someusername为用户名,somepassword为密码,somedbname为数据库名 1.创建用户 create user 'someusername ...

  9. Oracle 正则表达式函数-REGEXP_REPLACE

    背景 当初写oracle的一个存储过程,以前不知道sql里也有正则表达式,关于正则表达式教程很多了,这里只是记录下Oracle也有这个功能,下次再有类似需求用这个处理的确方便很多. 想起存储过程,就想 ...

  10. Qt Ubuntu 编译出错-1: error: 找不到 -lGL

    安装好,编译界面程序出错“-1: error: 找不到 -lGL” 在终端运行如下命令(安装Qt5.8.0) sudo apt-get install libqt5-dev sudo apt-get ...