程序的局部性原理:是指程序在执行时呈现出局部性规律,即在一段时间内,整个程序的执行仅限于程序中的某一部分。相应地,执行所访问的存储空间也局限于某个内存区域。局部性原理又表现为:时间局部性和空间局部性。时间局部性是指如果程序中的某条指令一旦执行,则不久之后该指令可能再次被执行;如果某数据被访问,则不久之后该数据可能再次被访问。空间局部性是指一旦程序访问了某个存储单元,则不久之后。其附近的存储单元也将被访问。

为了保证cache和memory的数据一致性,通常有三种方法:

1〉write through:CPU向cache写入数据时,同时向memory也写一份,使cache和memory的数据保持一致。优点是简单,缺点是每次都要访问memory,速度比较慢。

2〉post write:CPU更新cache数据时,把更新的数据写入到一个更新缓冲器,在合适的时候才对memory进行更新。这样可以提高cache访问速度,但是,在数据连续被更新两次以上的时候,缓冲区将不够使用,被迫同时更新memory。

3〉write back:CPU更新cache时,只是把更新的cache区标记一下,并不同步更新memory。只是在cache区要被新进入的数据取代时,才更新memory。这样做的原因是考虑到很多时候cache存入的是中间结果,没有必要同步更新memory。优点是CPU执行的效率提高,缺点是实现起来技术比较复杂。

1.Cache的两个类型
    --Write Through
    当写数据进Cache时,也同时更新了相应的Memory里的内容
    --Write back
    只是写到Cache里,Memory的内容要等到cache保存的要被别的数据替换或者系统做cache flush时,才会被更新。

2.Cache的两个函数
    --Flush
    把Cache内容写回Memory,当Cache为Write through,不需要Flush
    --Invalidate
    把Cache内容直接丢掉不要。

3.Cache的使用场合
    当有DMA在使用memory的时候,一般要用到cache的处理。因为DMA在访问memory时是不经过cache的。比较典型的比如在Ethernet,wireless,USB等driver里,DMA会操作descriptors和packet buffers,Driver要做这些处理
    --如果driver使用descripter和packet buffer的地址都是cache的地址,那么
    a).Driver在读descripter里一些状态比如Owned by CPU/DMA,有没有收到包时,要对descripter当前结构里的内容做cache invalidate,收到packet后,也要对packet buffer做cache invalidate
    b).Driver在写descripter里一些状态比如Owned by DMA,要发送包时,要对descripter当前结构里的内容做cache flush,发送packet时,也要对packet buffer做cache flush
    --有些driver会对descripter使用uncache 地址,那么上面两种情况里invalidate/flush就不用做了。一般很少会对packet buffer也用uncache地址的,因为对packet内容的处理将会很频繁,使用uncache会很慢。而descripter一般由于结构比较小,如果也使用cache地址的话,做invalidate/flush的时间消耗可能会比uncache的还要多。】

文章转载自http://blog.chinaunix.net/uid-15014334-id-4185529.html

cache 的两种方式Write Through和Write back相关推荐

  1. jvm两种方式获取对象所占用的内存

    在开发过程中,我们有时需要来获取某个对象的大小,以方便我们参考,来决定开发的技术方案.jvm中提供了两种方式来获取一个对象的大小. 通过Instrumentation来计算对象的大小 编写计算代码: ...

  2. ajax的data传参的两种方式

    ajax的data传参的两种方式 本文为转载. 1.[javascript] view plaincopy   /** * 订单取消 * @return {Boolean} 处理是否成功 */ fun ...

  3. oracle自增的两种办法,ORACLE数据库实现自增的两种方式

    Mysql数据库因为其有自动+1,故一般我们不需要花费太多时间,直接用关键字auto_increment即可,但是Oracle不行,它没有自动增长机制.顾我们需要自己去实现.一般有两种方式,但是这两种 ...

  4. Ubuntu 安装 JDK 7 / JDK8 的两种方式

    2019独角兽企业重金招聘Python工程师标准>>> ubuntu 安装jdk 的两种方式: 1:通过ppa(源) 方式安装. 2:通过官网下载安装包安装. 这里推荐第1种,因为可 ...

  5. 详解SpringCloud-gateway动态路由两种方式,以及路由加载过程

    gateway配置路由主要有两种方式,一种是用yml配置文件,一种是写代码里,这两种方式都是不支持动态配置的.如: 下面就来看看gateway是如何加载这些配置信息的. 1 路由初始化 无论是yml还 ...

  6. Ubuntu 安装和卸载 JDK 7 / JDK8 的两种方式以及双jdk的互相切换

    1:通过ppa(源) 方式安装. 2:通过官网下载安装包安装. 这里推荐第1种,因为可以通过 apt-get upgrade 方式方便获得jdk的升级 使用ppa/源方式安装 1.添加ppa sudo ...

  7. PageRank、图计算、图存储的两种方式

    目录 PageRank 什么是PageRank? 算法原理 入链 ====投票 入链数量 入链质量 网络上各个页面的连接图 计算过程 初始值 迭代递归计算(收敛) 图存储的两种方式 代码实现 Page ...

  8. iOS 通过URL网络获取XML数据的两种方式

    下面简单介绍如何通过url获取xml的两种方式. 第一种方式相对简单,使用NSData的构造函数dataWithContentsOfURL:不多解释,直接上代码咯. NSURL *url = [NSU ...

  9. linux下安装mysql8(基于yum安装和mysql安装包离线安装两种方式)

    试验环境: centos7 x64 最小化安装 mysql80-community-release-el7-3.noarch.rpm 或mysql-8.0.17-linux-glibc2.12-x86 ...

最新文章

  1. pytorch 卷积分组
  2. python适合零基础学习吗-零基础能学好Python吗?哪些人更适合学习?
  3. C++如何获得文件大小(1)
  4. Linux实用快捷键
  5. 什么是代理模式?代理模式有什么用?通过一个小程序分析静态代理和动态代理。自己简单实现动态代理。JDK动态代理和CGLIB动态代理的区别。
  6. 记一次程序员在办公室里的“撕逼”经历
  7. 又把锅甩给中国!苹果和解给了300多亿,但高通业绩预测并不乐观
  8. 微软账号被暂时停用咋办_游戏账号交易要注意什么?买游戏账号有哪些可能会被找回去...
  9. Android Gmail 邮件签名客制化需求
  10. w10更新后怎么找计算机全民,Win10系统下全民WiFi不能用了怎么办
  11. access转sql iif_Access中IIF,SWITCH,CHOOSE的使用技巧
  12. Wall following algorithm机器人沿墙算法(一)
  13. Android手机存储路径
  14. 在自己的数据集上训练CrowdDet过程记录
  15. python @ 用法
  16. colorkey口红怎么样_colorkey镜面唇釉怎么样 唇釉和口红有什么区别
  17. CBInsights 2019金融科技趋势报告:东南亚、拉美成新宠,IPO脚步恐放缓(附全文下载)...
  18. MMPBSA结合自由能计算原理
  19. 关于Android Studio 模拟器“ANDROID SDK_ ROOT”的问题
  20. maven3.0.4学习笔记(三)-坐标

热门文章

  1. 各大公司在GitHub上开源投入排名分析
  2. HTTP_POST body
  3. 安搭Share:主播探店为实体店发展迎来新机遇
  4. 一个即将30岁的Android程序员妄想用他的「逆袭」来劝你不再
  5. Electron教程 (一)Electron介绍
  6. Brt课程设计day3
  7. 求最大公约数和最小公倍数
  8. 计算机网络 | 网络概述(什么是互联网 互联网结构)
  9. 利用Opencv3.4.15 vs2017实现鼠标获取图像像素值坐标、RGB值、HSV值
  10. 小度送音箱,这是只属于开发者的福利