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. POJ3177 Redundant Paths【双连通分量】

    题意: 有F个牧场,1<=F<=5000,现在一个牧群经常需要从一个牧场迁移到另一个牧场.奶牛们已经厌烦老是走同一条路,所以有必要再新修几条路,这样它们从一个牧场迁移到另一个牧场时总是可以 ...

  2. java线程池如何合理的设置大小

    线程池究竟设置多大要看你的线程池执行的什么任务了,CPU密集型.IO密集型.混合型,任务类型不同,设置的方式也不一样 任务一般分为:CPU密集型.IO密集型.混合型,对于不同类型的任务需要分配不同大小 ...

  3. 【转】Python之函数与变量

    [转]Python之函数与变量 本节内容 函数介绍及其作用 函数的定义与调用 函数的参数说明 变量与作用域 值传递和引用传递 一.函数的介绍及其作用 编程语言中的函数与数学中的函数是有区别的:数学中的 ...

  4. Kaggle 泰坦尼克

    入门kaggle,开始机器学习应用之旅. 参看一些入门的博客,感觉pandas,sklearn需要熟练掌握,同时也学到了一些很有用的tricks,包括数据分析和机器学习的知识点.下面记录一些有趣的数据 ...

  5. opencv入门指南(转载)

    转载链接:http://blog.csdn.net/morewindows/article/details/8426318 网上的总结的一些用openncv的库来做的事: 下面列出OpenCV入门指南 ...

  6. VS2013+Win10+opencv3.0配置(包括opencv2.4.10版本)

    在win下配置opencv3.0.0还是比较简单的,这里简单说一下配置过程:参考链接:http://blog.csdn.net/u010009145/article/details/50756751 ...

  7. MR数据生成工具指向目录

    mrDataTidy_SaveTwoDays.jar 原始路径 :D:\太原MR数据\一天数据整理 目标路径 : D:\MR现场数据整理\保存两天_整理后数据 例如 当前时间:2017-5-17 10 ...

  8. TCP建立流程 【转】

    解决TCP连接数过多的问题 TCP状态迁移,CLOSE_WAIT & FIN_WAIT2 的问题 TCP状态迁移 大家对netstat -a命令很熟悉,但是,你有没有注意到STATE一栏呢,基 ...

  9. centos6.5环境openldap实战之ldap配置详解及web管理工具lam(ldap-account-manager)使用详解

    ldap常用名称解释 1.环境搭建 操作系统:centos6.5 x86_64 关闭防火墙.selinux 开启时间同步 # crontab -e 加入 # time sync */5 * * * * ...

  10. PHP CLI模式下的多进程应用

    作者: Laruence(   ) 本文地址: http://www.laruence.com/2009/06/11/930.html 转载请注明出处 PHP在很多时候不适合做常驻的SHELL进程, ...