初识cache
1、cache是什么
cache这个名字用来称呼两种物理世界中存在的概念,硬体cache和cache机制。下面来分别介绍。
硬体cache:硬体cache是一种用肉眼可以看得见用皮肤可以摸得着的物品,它是由SRAM(static random-access memory)构成(在计算机硬件系统中main memory由DRAM(dynamic random-access memory)构成。硬体cache在CPU中,直接与寄存器进行数据的传输。

cache机制:有两块存储区域,区域A,区域B,区域B大于区域A,区域A存放区域B中最常用的数据。相比于区域B,由于区域A更小,所以在区域A中寻找一个数据的时间更短。在程式运行过程中,区域A始终维护着区域B中最常用的数据。这样一种机制就称为cache机制。有了cache机制,我们可以更加快速的访问程式需要的数据。当然,这里值得说明的一点是,cache机制之所以有效,是因为程式的一个特性,locality。程式的这个特性可以简单的认为每一个程式一般只访问一些数据,并且经常访问他们(如果想要了解更多关于locality,可以参考本文最后给出的参考材料)。cache机制示意图如下。

在实际使用当中,我们需要根据上下文判断出这里的cache是指硬体cache还是cache机制。 硬体cache从本质上讲是一块具有极高硬件访问速度的存储区域,并在这块存储区域上使用cache机制。所以本文所介绍的相关知识的核心是cache机制。硬件cache只不过加了更好的硬件材料而已。
2、硬件cache以及cache机制在计算机系统中的分布
计算机系统中的memory hierarchy如下图所示,

对于硬体cache。L1cache,L2cache,L3cache是硬体cache,存在于CPU当中。
对于cache机制。L1与L2之间存在cache机制,即L1是L2的cache(如果CPU想访问L2上的数据,那么CPU访问更上层的L1。如果有想要的数据,L1直接返回给CPU;如果没有,再从L2中搜索出想要的数据,并保存到L1当中,最后将此数据返回给CPU)。同理,L2是L3的cache,L3是L4的cache,等等。
3、cache的读与写(这里指cache机制)
在cache机制中,读操作的运行机制是这样的。假设CPU想访问Level k+1 上的数据B,其地址为A。
第1步,根据地址A判断数据B在不在Level k 上,如果在,返回给CPU数据B,我们称cache hit 发生;如果不在,我们进行第2步,并称cache miss 发生;
第2步,在Level k+1 上根据地址搜索出数据B,将数据B所在的block根据替换规则替换Level k上的相对应的block,并返回CPU所需的数据B。注意:这里是将数据B所在的block拷贝到更上层,不仅仅是数据B。一个block不仅包含数据B,还包含邻近的几个数据项。层与层之间的数据的传输都是以block进行传输以提高传输效率。另外层与层之间的block的大小也不一样,一般来说,越靠近底层,block越大,block在32—64 bytes之间。
更加详细的细节描述,比较繁琐,这里不再赘述,只需要阅读完下面的第一个参考资料的一章,并记住拷贝的是block而不仅仅是单个的数据项,即可以理解。
cache的写基于cache的读,读理解了,写自然就理解了。
4、cache的分类
根据cache中存储的是指令还是数据可以分为 I-cache 和 D-cache。
根据每个set的个数,cache line的个数可以分为 directed-mapped caches(多个set,每个set中cache line 只有一个)、set associative caches(多个set,每个set中有多于1个的cache line)、fully associative caches(只有一个set),示意图分别如下图的左、中、右。

5、参考资料
<<computer systems a programmer's perspective>> second edition p559-p615
初识cache的更多相关文章
- 初识virtual memory
一.先谈几个重要的东西 virtual memory是一个抽象概念,书上的原文是"an abstraction of main memory known as virtual memory& ...
- DBA面对新mysql环境
来源:http://blog.csdn.net/wyzxg/article/details/8491152 author:skatetime:2013/01/10 DBA面对新MySQL环境感悟 1. ...
- 初识 MySQL 5.6 新功能、参数
摘要: 继上一篇的文章 初识 MySQL 5.5 新功能.参数 之后,现在MySQL5.6 针对 MySQL5.5 各个方面又提升了很多,特别在性能和一些新参数上面,现在看看大致提升了哪些方面(后续不 ...
- 初识 ServiceWorker
初识ServiceWorker 初识ServiceWorker 在8月份的时候.W3C更新了一个叫Service Workers的API. 了解过HTML5中的Web Worker的人可能会对这个AP ...
- 3 MySQL数据库--初识sql语句
1.初识sql语句 服务端软件 mysqld SQL语句:后面的分号mysql -uroot -p123 操作文件夹(库) 增 create database db1 charset utf8; 查 ...
- Django框架 之 Cookie和Session初识
Django框架 之 Cookie和Session初识 浏览目录 Cookie介绍 Django中的Cookie Session 一.Cookie介绍 1.Cookie产生的意义 众所周知,HTTP协 ...
- 第一章 初识shiro
shiro学习教程来自开涛大神的博客:http://jinnianshilongnian.iteye.com/blog/2018936 第一章 初识shiro 简单了解shiro主要记住三张图即可. ...
- 初识Nginx及编译安装Nginx
初识Nginx及编译安装Nginx 环境说明: 系统版本 CentOS 6.9 x86_64 软件版本 nginx-1.12.2 1.什么是Nginx? 如果你听说或使用过Apache软件 ...
- PHP下的异步尝试一:初识生成器
PHP下的异步尝试系列 PHP下的异步尝试一:初识生成器 PHP下的异步尝试二:初识协程 PHP下的异步尝试三:协程的PHP版thunkify自动执行器 PHP下的异步尝试四:PHP版的Promise ...
随机推荐
- nodejs---修改文件名字
D:\node\update_name目录有如下文件: 1:文件夹:icons 2:js文件:update-name.js js文件代码: // 引入fs文件处理模块var fs = require( ...
- Spring下如何配置bean
本次讲述项目背景: 创建Service类,Service下用到dao类.通过在Spring中配置bean,实现在项目启动时,自动加载这个类 本次只讲述配置bean的注意事项,故只给出简单实例: 创建S ...
- GDB调试命令小结
1.启动调试 前置条件:编译生成执行码时带上 -g,如果使用Makefile,通过给CFLAGS指定-g选项,否则调试时没有符号信息.gdb program //最常用的用gdb启动程序,开始调试的方 ...
- Masonry和FDTemplateLayoutCell 结合使用示例Demo
我们知道,界面布局可以用Storyboard或Xib结合Autolayout实现,如果用纯代码布局,比较热门的有Masonry.SDAutoLayout,下面的简单demo,采用纯代码布局,实现不定高 ...
- 严重: Exception loading sessions from persistent storage Java.io.EOFException
tomcat启动时报此异常,但web页均能正常运行:对程序影响不大. /*具体原因时tomcat--work--(你当前运行的工程名)--session.ser*/删除即可解决 分析: EOFExce ...
- IBM Bluemix体验:Containers
国际版的Bluemix目前有三个region,US South,United Kingdom和Sydney.其中US South是功能最全的,UK其次,Sydney功能最少.Containers服务在 ...
- 第9章 Shell基础(1)_Shell简介和脚本执行方式
1. Shell概述 1.1 Shell简介 (1)Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动.挂起.停止甚至是编 ...
- AC日记——滑动窗口 洛谷 P1886
题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 例如: The array i ...
- iOS网络编程
今天的重点是UIWebView.NSURLSession.JSon. 网络编程联网准备:1.在Info.plist中添加AppTransportSecurity类型Dictionary:2.在AppT ...
- [LeetCode] Best Time to Buy and Sell Stock IV 买卖股票的最佳时间之四
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...