cache 基本原理
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 基本原理的更多相关文章
- Cache基本原理之:结构
转载自:https://www.jianshu.com/p/2b51b981fcaf Cache entries 数据在主存和缓存之间以固定大小的”块(block)”为单位传递,也就是每次从main ...
- Linux Cache 机制
在阅读文章前,您应该具备基本的存储器层次结构知识,至少要了解局部性原理.要详细了解cache基本原理,可以参考本书<深入理解计算机系统>中存储器体系结构一章: 带着疑问来看文章,cache ...
- linux从head.s到start_kernelstart_kernel之---内核解压到重定位分析
一: arm linux 内核生成过程 1. 依据arch/arm/kernel/vmlinux.lds 生成linux内核源码根目录下的vmlinux,这个vmlinux属于未压缩,带调试信息.符号 ...
- oracle buffer cache的基本原理
Buffer cache 的原理 一. 1·)当一个服务器进程需要读数据到buffer cache中时,首先必须判断该数据在buffer 中是否存在,如果存在且可用,则获取该数据,根据lru算法在lr ...
- 注释驱动的 Spring cache 缓存介绍
概述 Spring 3.1 引入了激动人心的基于注释(annotation)的缓存(cache)技术,它本质上不是一个具体的缓存实现方案(例如 EHCache 或者 OSCache),而是一个对缓存使 ...
- [转]注释驱动的 Spring cache 缓存介绍
原文:http://www.ibm.com/developerworks/cn/opensource/os-cn-spring-cache/ 概述 Spring 3.1 引入了激动人心的基于注释(an ...
- Spring Cache 介绍
Spring Cache 缓存是实际工作中非常常用的一种提高性能的方法, 我们会在许多场景下来使用缓存. 本文通过一个简单的例子进行展开,通过对比我们原来的自定义缓存和 spring 的基于注释的 c ...
- cache 浅析
http://blog.chinaunix.net/uid-26817832-id-3244916.html 1. Cache Cache一词来源于法语,其原意是"藏匿处,隐秘的地方&q ...
- Using dbms_shared_pool.purge to remove a single task from the library cache
我们都知道可是使用 alter system flush shared_pool 来清除shared pool 信息,当时不能指定清除某个对象.因为在系统繁忙的时侯 使用 alter system f ...
随机推荐
- 字符加密 Valentino 函数 (伪分治)
题面 \(solution:\) 这一题重点不在字符串加密,而是我们最后的求值:\(K^{s}\mod M\)(\(s\leq36^{100000}\)) 而我们发现它的指数十分巨大,但众所周知的指数 ...
- jquery开发自定义的插件总结
1.第一种方式,有元素的插件 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "htt ...
- Python算法:推导、递归和规约
Python算法:推导.递归和规约 注:本节中我给定下面三个重要词汇的中文翻译分别是:Induction(推导).Recursion(递归)和Reduction(规约) 本节主要介绍算法设计的三个核心 ...
- cmake介绍
1. cmake介绍 1.1 cmake用途 CMake的用途是能通过一系列的源码和相关的配置来生成需要的编译器平台上的项目文件.譬如,如果一个项目需要在Windows上用VS编译,在Linux上用m ...
- 关于python中的类方法(classmethod)和静态方法(staticmethod)
首先明确两点: a)python在创建类的时候,self指向的是类的实例而不是类属性! b)我们所创建的类的方法有两种作用,一种是改变类的属性,一种是改变实例的属性,这点一定要分清! c)我们在调用类 ...
- DDR3基本知识及测试【转】
转自:http://blog.csdn.net/myarrow/article/details/7847385 一.DDR3简介 DDR3(double-data-rate three synchro ...
- php学习之mysqli的面向对象
// mySqlTool.php 封装好的工具类 <?php class SqlTool{ private $conn; private $host="localhost" ...
- centos6.5环境openldap实战之ldap配置详解及web管理工具lam(ldap-account-manager)使用详解
ldap常用名称解释 1.环境搭建 操作系统:centos6.5 x86_64 关闭防火墙.selinux 开启时间同步 # crontab -e 加入 # time sync */5 * * * * ...
- lamp环境搭建之配置apache与fpm方式的php
配置apache-2.4.9与fpm方式的php-5.4.26 一.apache.MySQL的安装参考<编译安装lamp环境> http://blog.csdn.net/reblue520 ...
- [HTML]点击按钮,页面总是跳回顶端的解决方法(Clicking an button,always resets the view to top of page)
1 前言 当网页页面较长或者表单较多时,右侧会出现滚动条,然而经常会出现点击底部的<button>按钮或者<a>超链接,会出现点击后,当前页面会回到顶端. 2 方案 例如样例代 ...