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的更多相关文章

  1. 初识virtual memory

    一.先谈几个重要的东西 virtual memory是一个抽象概念,书上的原文是"an abstraction of main memory known as virtual memory& ...

  2. DBA面对新mysql环境

    来源:http://blog.csdn.net/wyzxg/article/details/8491152 author:skatetime:2013/01/10 DBA面对新MySQL环境感悟 1. ...

  3. 初识 MySQL 5.6 新功能、参数

    摘要: 继上一篇的文章 初识 MySQL 5.5 新功能.参数 之后,现在MySQL5.6 针对 MySQL5.5 各个方面又提升了很多,特别在性能和一些新参数上面,现在看看大致提升了哪些方面(后续不 ...

  4. 初识 ServiceWorker

    初识ServiceWorker 初识ServiceWorker 在8月份的时候.W3C更新了一个叫Service Workers的API. 了解过HTML5中的Web Worker的人可能会对这个AP ...

  5. 3 MySQL数据库--初识sql语句

    1.初识sql语句 服务端软件 mysqld SQL语句:后面的分号mysql -uroot -p123 操作文件夹(库) 增 create database db1 charset utf8; 查 ...

  6. Django框架 之 Cookie和Session初识

    Django框架 之 Cookie和Session初识 浏览目录 Cookie介绍 Django中的Cookie Session 一.Cookie介绍 1.Cookie产生的意义 众所周知,HTTP协 ...

  7. 第一章 初识shiro

    shiro学习教程来自开涛大神的博客:http://jinnianshilongnian.iteye.com/blog/2018936 第一章 初识shiro 简单了解shiro主要记住三张图即可. ...

  8. 初识Nginx及编译安装Nginx

    初识Nginx及编译安装Nginx 环境说明: 系统版本    CentOS 6.9 x86_64 软件版本    nginx-1.12.2 1.什么是Nginx? 如果你听说或使用过Apache软件 ...

  9. PHP下的异步尝试一:初识生成器

    PHP下的异步尝试系列 PHP下的异步尝试一:初识生成器 PHP下的异步尝试二:初识协程 PHP下的异步尝试三:协程的PHP版thunkify自动执行器 PHP下的异步尝试四:PHP版的Promise ...

随机推荐

  1. Node.js 教程 03 - 创建HTTP服务器

    前言: 如果我们使用PHP来编写后端的代码时,需要Apache 或者 Nginx 的HTTP 服务器,并配上 mod_php5 模块和php-cgi. 从这个角度看,整个"接收 HTTP 请 ...

  2. 使用ABP EntityFramework连接MySQL数据库

    ASP.NET Boilerplate(简称ABP)是在.Net平台下一个很流行的DDD框架,该框架已经为我们提供了大量的函数,非常方便与搭建企业应用. 关于这个框架的介绍我就不多说,有兴趣的可以参见 ...

  3. SQL优化 查询语句中,用 inner join 作为过滤条件和用where作为过滤条件的区别

    前段时间遇到一个存储过程,参数之一是一个字符串,在存储过程中,把字符串拆分成一个临时表之后存为一个key值的临时表,作为其中一个查询条件, 逻辑实现上有两种处理方式 insert into #t se ...

  4. Masonry和FDTemplateLayoutCell 结合使用示例Demo

    我们知道,界面布局可以用Storyboard或Xib结合Autolayout实现,如果用纯代码布局,比较热门的有Masonry.SDAutoLayout,下面的简单demo,采用纯代码布局,实现不定高 ...

  5. 将自己的项目上传到github保管

    一.首先需要生成gey-gen,因为github跟本地计算机要通过ssh传输的,详情见官方教程. 二.本地已有项目的情况:现在本地将项目git innit 初始化好,然后去到github上面初始化一个 ...

  6. Linux设备树语法详解

    概念 Linux内核从3.x开始引入设备树的概念,用于实现驱动代码与设备信息相分离.在设备树出现以前,所有关于设备的具体信息都要写在驱动里,一旦外围设备变化,驱动代码就要重写.引入了设备树之后,驱动代 ...

  7. 鸟哥私房菜学习(一)——Linux背景了解

    1.Linux,继承鱼Unix 2.Unix档案系统的两个重要概念 3.几个主要的 Linux distributions 发行者网址: • Red Hat: http://www.redhat.co ...

  8. Windows Git安装指南

    步骤如下: 1.资源下载 :Git-1.9.4-preview20140815.exe http://code.google.com/p/tortoisegit/downloads/list 2.安装 ...

  9. .Net中DLL冲突解决(真假美猴王)

    <西游记>中真假美猴王让人着实难以区分,但是我们熟知了其中的细节也不难把他们剥去表象分别出来.对问题不太关心的可以直接调到文中关于.Net文件版本的介绍 问题 最近在编译AKKA.net ...

  10. windows中,端口查看&关闭进程及Kill使用

    测试过程中遇到的问题,杂记一: 1.netstat -ano | findstr "8001"    查看端口8001被哪个进程占用:由下图可以看出,被进程为3736的占用 2.查 ...