linux下写穿/直写(Write-Through)与写回(Write-Back)

2023-11-09

CPU使用高速缓存(DCache)时,它对内存的的写操作有两种模式:写穿(write-throuht)、写回(write-back)。

写穿(write-throuht)模式

该模式下,CPU对主存写数据时,不经过DCdcache直接写到内存,此时对于写的实现比较简单,如果系统只用写穿模式的话,DCache则变成了读缓存了。

写回(write-back)模式:

CPU写入数据时,不直接将数据写入内存,而是写入DCdcache,当dcache数据被替换出去时才写回主存。 
此时存在一个问题,并不是所有的dcache中的数据都被修改过,因此没必要把所有替换出去的数据都重新写入主存。 
为了表示哪些数据被修改过(dcache中是数据和主存中的数据是否不一致),dcache中每一块增加了一个记录信息位,CPU修改过的DCdcache时,设置此记录信息位(此时数据块为脏的(dirty), cache数据写入到主存时清理此位(此时数据块为干净的(clean)。 
有了次记录信息位,数据从dcache替换到主存时只替换脏的数据块即可),

为什么有写回模式 
大家都是知道cache速度远大于RAM(主存)。通过DCache吸收系统的写操作,在必要的时候再统一写入主存,从而减少频繁的相对较慢的对主存的写操作,这样明显能加速系统。同样的思想在主存与磁盘中也存在。

比较:

现在系统中,写回策略设置了写缓冲器,减少了访问主存的次数,但是写通方式设计比较容易,维护数据的一致性跟简单。

WB(write back)+WA(write allocation) 

è¿éåå¾çæè¿°

若存在缓存,即CPU先访问缓存, 
1.当请求是读请求时,若命中,直接返回其数据;当未命中时,先再缓存中分配一个缓存快,判断当前缓存块是不是脏数据(被修改过的数据),如果是,将之前的数据写回下一级存储中,如果不是脏数据,直接从下一级存储中读到cache块中,修改dirty位为,clean(未被修改);返回数据。

2.当请求是写请求时,若命中,直接将新数据写入缓存,并且标记dirt位为,dirty(被修改);若未命中,分配一块缓存块,,判断当前缓存块是不是脏数据,如果是,将之前的数据写回下一级存储中,如果不是脏数据,直接从下一级存储中读到cache块中,将新数据写入缓存块,并标记为dirty。

WT(write through )+WN(write no allocation) 
这里写图片描述

1.解释与wb类似

 

consult:

https://blog.csdn.net/davie1love/article/details/47342695 

https://blog.csdn.net/dark5669/article/details/53895744

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux下写穿/直写(Write-Through)与写回(Write-Back) 的相关文章

  • xsel -o 对于 OS X 等效项

    是否有一个等效的解决方案可以在 OS X 中抓取选定的文本 就像适用于 Linux 的 xsel o 一样 只需要当前的选择 这样我就可以在 shell 脚本中使用文本 干杯 埃里克 你也许可以安装xsel在 MacOS 上 更新 根据 A
  • ansible 重新启动 2.1.1.0 失败

    我一直在尝试创建一个非常简单的 Ansible 剧本 它将重新启动服务器并等待它回来 我过去在 Ansible 1 9 上有一个可以运行的 但我最近升级到 2 1 1 0 并且失败了 我正在重新启动的主机名为 idm IP 为 192 16
  • Locale.getDefault() 始终返回 en

    unix 机器上的服务器始终使用 en 作为默认区域设置 以下是区域设置输出 LANG en US LC CTYPE C LC NUMERIC C LC TIME C LC COLLATE C LC MONETARY C LC MESSAG
  • 如何修复“iptables:没有该名称的链/目标/匹配”?

    我在我的 Linux 嵌入式系统上构建并安装了 iptables 如果我列出所有规则 则一切正常 iptables list Chain INPUT policy ACCEPT target prot opt source destinat
  • 为什么我收到“无法进行二进制日志记录”的信息。在我的 MySQL 服务器上?

    当我今天启动 MySQL 服务器并尝试使用以下命令进行一些更改时用于 MySQL 的 Toad http www quest com toad for mysql 我收到此消息 MySQL 数据库错误 无法进行二进制日志记录 消息 交易级别
  • awk 子串单个字符

    这是columns txt aaa bbb 3 ccc ddd 2 eee fff 1 3 3 g 3 hhh i jjj 3 kkk ll 3 mm nn oo 3 我可以找到第二列以 b 开头的行 awk if substr 2 1 1
  • 抑制 makefile 中命令调用的回显?

    我为一个作业编写了一个程序 该程序应该将其输出打印到标准输出 分配规范需要创建一个 Makefile 当调用它时make run gt outputFile应该运行该程序并将输出写入一个文件 该文件的 SHA1 指纹与规范中给出的指纹相同
  • 如何通过替换为空页映射来取消映射 mmap 文件

    Linux 用户空间有没有办法用空页面 映射自 dev null 或者可能是一个空页面 重复映射到从文件映射的页面的顶部 对于上下文 我想找到这个 JDK bug 的修复 https bugs openjdk java net browse
  • 跟踪 Linux 程序中活跃使用的内存

    我想跟踪各种程序在特定状态下接触了多少内存 例如 假设我有一个图形程序 最小化时 它可能会使用更少的内存 因为它不会重新绘制窗口 这需要读取图像和字体并执行大量库函数 这些对象仍然可以在内存中访问 但实际上并没有被使用 类似的工具top它们
  • nginx 上的多个网站和可用网站

    通过 nginx 的基本安装 您的sites available文件夹只有一个文件 default 怎么样sites available文件夹的工作原理以及如何使用它来托管多个 单独的 网站 只是为了添加另一种方法 您可以为您托管的每个虚拟
  • 如何在bash中使用jq从变量中包含的json中提取值

    我正在编写一个 bash 脚本 其中存储了一个 json 值 现在我想使用 Jq 提取该 json 中的值 使用的代码是 json val code lyz1To6ZTWClDHSiaeXyxg redirect to http examp
  • Linux中的CONFIG_OF是什么?

    我看到它在很多地方被广泛使用 但不明白在什么场景下我需要使用它 What is 配置 OF OF 的全名是什么 打开固件 这是很久以前发明的 当时苹果公司正在生产基于 PowerPC CPU 的笔记本电脑 而 Sun Microsystem
  • chown:不允许操作

    我有问题 我需要通过 php 脚本为系统中的不同用户设置文件所有者权限 所以我通过以下命令执行此操作 其中 1002 是系统的用户 ID file put contents filename content system chown 100
  • 域套接字“sendto”遇到“errno 111,连接被拒绝”

    我正在使用域套接字从另一个进程获取值 就像 A 从 B 获取值一样 它可以运行几个月 但最近 A 向 B 发送消息时偶尔会失败 出现 errno 111 连接被拒绝 我检查了B域套接字绑定文件 它是存在的 我也在另一台机器上做了一些测试 效
  • 加载数据infile,Windows和Linux的区别

    我有一个需要导入到 MySQL 表的文件 这是我的命令 LOAD DATA LOCAL INFILE C test csv INTO TABLE logs fields terminated by LINES terminated BY n
  • 如何在数组中存储包含双引号的命令参数?

    我有一个 Bash 脚本 它生成 存储和修改数组中的值 这些值稍后用作命令的参数 对于 MCVE 我想到了任意命令bash c echo 0 0 echo 1 1 这解释了我的问题 我将用两个参数调用我的命令 option1 without
  • 如何有效截断文件头?

    大家都知道truncate file size 函数 通过截断文件尾部将文件大小更改为给定大小 但是如何做同样的事情 只截断文件的尾部和头部呢 通常 您必须重写整个文件 最简单的方法是跳过前几个字节 将其他所有内容复制到临时文件中 并在完成
  • CentOS:无法安装 Chromium 浏览器

    我正在尝试在 centOS 6 i 中安装 chromium 以 root 用户身份运行以下命令 cd etc yum repos d wget http repos fedorapeople org repos spot chromium
  • 将 PDF 转换为 600dpi 的 TIFF 和 jpg 96 dpi

    我想使用 ImageMagick 从 Python 脚本将 pdf 转换为 600 dpi 的 tiff 和 96 dpi 的 jpg 我使用 imagemagick 命令行完成了这项任务 但我想使用python中的Imagemagick将
  • Linux 可执行文件与 OS X“兼容”吗?

    如果您在基于 Linux 的平台上用 C 语言编译一个程序 然后将其移植以使用 MacOS 库 它会工作吗 来自编译器的核心机器代码在 Mac 和 Linux 上兼容吗 我问这个问题的原因是因为两者都是 基于 UNIX 的 所以我认为这是真

随机推荐

  • Spring Boot, 访问入口配置

    HTTP Server port server port 8080 Make the application accessible on the given context path http localhost 8080 myapp se
  • openGL结合光照与纹理

    openGL系列文章目录 文章目录 openGL系列文章目录 前言 一 实现思路 二 代码 1 c 主程序 2 顶点着色器 3 片元着色器 运行效果 参考 源码下载 前言 在光照模型中 都是假设我们使用按ADS 定义的光源 照亮按ADS 定
  • Python计算商品复购率

    1 Python计算产品复购率 需求 给出数据商品购买数据 数据格式 csv 包含 购买月份 手机号 根据该数据计算产品的复购率 复购率算法 算法一 单位时间内 按每月 R 复购人数 总购买人数 算法二 单位时间内 按每月 R 复购交易次数
  • 应用usb_cam同时打开多个摄像头方法

    最近由于项目需要 需要同时开启多个摄像头 虽然可以用opencv去写对应的摄像头开启的程序 但是 还是想用ros中提供的usb cam去打开多个摄像头 通过usb cam去打开一个摄像头 不用下载源码 可以直接安装usb cam去调用lau
  • 使用GDI/GDI+绘制到D3D9缓冲区的方法

    这个其实是3D绘图里嵌入2D绘图的传统方式 D3D9直接使用GDI GDI 就可以画图 只不过需要额外的设置 而且只支持RGB和XRGB 不支持ARGB 因此这种方法比较适合合成UI元素和不透明的纹理贴图 不适合将要进行AlphaBlend
  • #Mybatis 关于mybatis的一级缓存

    本篇文章主要是为了帮助自己总结和加深理解 若能帮助到其他小伙伴也是极好的 基本介绍 Mybatis中支持一级缓存和二级缓存 一级缓存是默认开启的并且不能关闭 二级缓存默认关闭 可根据需要进行手动开启 总体来说Mybatis的一二级缓存的最终
  • Shell 排序法 - 改良的插入排序

    说明 插入排序法由未排序的后半部前端取出一个值 插入已排序前半部的适当位置 概念简单但速度不快 排序要加快的基本原则之一 是让后一次的排序进行时 尽量利用前一次排序后的结果 以加快排序的速度 Shell排序法即是基于此一概念来改良插入排序法
  • css设置div上下左右均居中 、底部居中

    css设置div或盒子居中 垂直居中 左右居中 底部居中 类型一 固定宽度高度 html代码 div class login container div class login box div 内容 div div div 2 css 外部
  • 软件测试入坑建议

    本科非计算机专业 在深圳做了四年软件测试工作 从之前的一脸懵的点点点 到现在会点自动化测试 说一点点非计算机专业人员从事软件测试的心得体会 仅供参考交流 如果你是非计算机专业 毕业不久 软件测试工作门槛相对较低 比较容易入门 建议入职互联网
  • Halcon学习---玻璃瓶口的缺陷检测

    inspect bottle mouth hdev 巧妙运用了极坐标变换法 细节很精细 值得学习 tuning parameters SmoothX 501 ThresholdOffset 25 MinDefectSize 50 initi
  • 华为机试-----集五福作为近年来大家喜闻乐见迎新春活动,集合爱国福、富强福、和谐福、友善福、敬业福即可分享超大红包

    题目 以0和1组成的长度为5的字符串代表每个人所得到的福卡 每一位代表一种福卡 1表示已经获得该福卡 单类型福卡不超过1张 随机抽取一个小于10人团队 求该团队最多可以集齐多少套五福 输入描述 输入若干个 11010 00110 的由0 1
  • 有限状态机的4中实现对比

    有限状态机的4种实现对比 在日常工作过程中 我们经常会遇到状态的变化场景 例如订单状态发生变化 商品状态的变化 这些状态的变化 我们称为有限状态机 缩写为FSM F State Machine 之所以称其为有限 是因为这些场景中的状态往往是
  • 俄罗斯方块代码

    package Game1 import java awt Color import java awt Font import java awt Graphics import java awt event ActionEvent impo
  • C语言之实现矩阵(3行3列)的转置(即行列互换)

    例如 输入下面的矩阵 100 200 300 400 500 600 700 800 900 程序输出 100 400 700 200 500 800 300 600 900 代码如下所示 include
  • 数据结构视频教程 -《[猎豹网校]数据结构与算法_C语言》

    整个视频打包下载地址 史上最全的数据结构视频教程系列分享之 猎豹网校 数据结构与算法 C语言 转载请保留出处和链接 更多优秀资源请访问 我是码农 数据结构是信息与计算科学专业中一门重要的专业基础课程 当用计算机来解决实际问题时 就要涉及到数
  • vmware esxi 6.7 下载以及如何在虚拟机里实现显卡直通?

    为了让vmware支持显卡 找了好久esxi下载 版本太多了 都不知道要下哪个 找到别人贡献的百度链接 分析给大家 使用esxi也不行 esxi需要安装在裸机上 才能支持独显 不能直接安装在windows上 后来查资料使用 qemu kvm
  • 【Windows基线检查】

    文章目录 前言 一 目的 二 要求 总结 前言 企业在发布服务器到公网前都应该对服务器进行安全测试 包括漏洞扫描 基线检查 业务流程测试等等 本期介绍Windows基线检查的部分内容和一些操作系统策略设置方法 一 目的 旨在为即将发布到公网
  • 获取时间的方法

    Java获取当前年份 月份和日期是通过Calendar类的实例对象来获取的 首先创建一个Calendar类的实例对象 Calendar类属于java util包 Calendar calendar Calendar getInstance
  • linux内核开发基础(linux内核源码、树莓派源码编译、SD卡挂载)

    首先下载树莓派linux内核源码 下载网址 https github com raspberrypi linux 在树莓派使用指令 uname r查看当前树莓派的版本号 然后选择对应的linux内核版本号进行下载 将linux内核源码从共享
  • linux下写穿/直写(Write-Through)与写回(Write-Back)

    CPU使用高速缓存 DCache 时 它对内存的的写操作有两种模式 写穿 write throuht 写回 write back 写穿 write throuht 模式 该模式下 CPU对主存写数据时 不经过DCdcache直接写到内存 此