【操作系统】操作系统的Buffer和Cache

news2024/11/19 0:44:48

文章目录

        • 1.Buffer和Cache的区别
        • 2.磁盘和文件写入操作案例
        • 3.磁盘和文件读取操作案例
        • 4.Cache和Buffer的命中案例

1.Buffer和Cache的区别

(1)什么是Buffer

  • Buffer指Linux内存的 Buffer cache(缓冲区)。
  • Buffer为了让不同的速度的设备能够同步,建立的一个缓冲区域,写进Buffer的数据是为了从中拿出写入其他设备。
buffers:  Memory used by kernel buffers (Buffers in /proc/meminfo)
内核缓冲区的内存,是/proc/meminfo 中的 Buffers 值

(2)什么是Cache

  • Cache指Linux内存中的 Page cache(缓存区)。
  • Cache是为了提高读取速度,将经常或马上需要的数据预读到缓存中,写进Cache的数据是为了其他设备从中去读取。
cache: Memory used by the page cache and slabs (Cached and SReclaimable in /proc/meminfo)
页缓存和 Slab 用到的内存,是 /proc/meminfo 中的 Cached 与 Slab之和

(3)二者的区别

  • 从软件这一层来说,Buffer是块设备的缓冲,Cache是文件系统的缓存。以Linux为例,Buffer(Buffer Cache)以块形式缓冲了块设备的操作,定时或手动的同步到硬盘,它是为了缓冲写操作然后一次性将很多改动写入硬盘,避免频繁写硬盘,提高写入效率。
  • Cache(Page Cache)以页面形式缓存了文件系统的文件,给需要使用的程序读取,它是为了给读操作提供缓冲,避免频繁读硬盘,提高读取效率。
  • Buffer 的主要目的是在不同应用、线程、进程之间共享字节数据,例如为了让不同速度的设备能够进行数据同步,就会使用共享 Buffer。
  • Cache 的主要目的是提高字节数据的读取/写入速度,例如根据时间局部性、地址局部性操作系统提供 page cache 机制。

2.磁盘和文件写入操作案例

  • Linux中的虚拟设备
#读它的时候,它会提供无限的空字符; 另一个常见用法是产生一个特定大小的空白文件
/dev/zero

#随机数设备,提供不间断的随机字节流, 当系统中断过多时,/dev/random设备会 挂起 ,产生数据速度较慢,但随机性好
/dev/random

#随机数设备,提供不间断的随机字节流, 不依赖系统中断,数据产生速度快,但随机性较低
/dev/urandom

#看作"黑洞",它等价于一个只写文件,所有写入它的内容都会永远丢失
/dev/null
  • 写入之前先清理一下Buffer/Cache
#用命令来释放缓存,  建议先执行sync命令, 将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、延迟的块 I/O 等

#1:释放页缓存
echo 1 > /proc/sys/vm/drop_caches

#2:释放dentries和inodes,即清除回收slab分配器中的对象
echo 2 > /proc/sys/vm/drop_caches

# 3:释放所有缓存
echo 3 > /proc/sys/vm/drop_caches

(1)写入文件案例

  • 一个终端执行 vmstat 监视负载信息
vmstat 2 
  • 一个终端监控内存信息
free -h -w -s 5
  • 在另外一个终端执行dd,把安全的随机设备 /dev/urandom,写入/tmp/test.txt文件,写入的数据大小500M
dd if=/dev/urandom of=/tmp/test.txt bs=1M count=500

在这里插入图片描述
在这里插入图片描述

  • 发现写入文件的时候,Cache中会增加。

(2)写入磁盘案例

  • 写入磁盘前也是先清理下缓存。
# 首先清理缓存
echo 3 > /proc/sys/vm/drop_caches
  • 然后运行dd命令向磁盘分区/dev/sdb1写入2G数据
dd if=/dev/urandom of=/dev/sda bs=1M count=2048

在这里插入图片描述
在这里插入图片描述

可以看到,虽然同是写数据,写磁盘和写文件的想象很不一样,写磁盘时即bo 大于 0时,Buffer和 Cache都在增长,但显然 Buffer的增长快得多。写磁盘用到了大量的 Buffer.我们发现,写文件时会用到Cache缓存数据,而写磁盘则会用到Buffer 来缓存数据。所以,Cache即缓存读文件也缓存写文件。

3.磁盘和文件读取操作案例

  • 首先清理一下缓存
echo 3 > /proc/sys/vm/drop_caches

在这里插入图片描述

(1)文件读取案例

dd if=/tmp/test.txt of=/dev/null

在这里插入图片描述
在这里插入图片描述

  • 读取文件时,发现bi增长,Buffer保持不变,而Cache再不断增长。

(1)磁盘读取案例

dd if=/dev/sda of=/dev/null

在这里插入图片描述
在这里插入图片描述

  • 读取磁盘时,发现bi增长,Buffer不断增长,而Cache保持不变,证明我们之前说的结论是对的,读写文件时操作的是cache,读写磁盘时操作的是buffer。

由此我们得知:

  • Buffer 是对磁盘数据的缓存,它即可以作为将要写入的磁盘数据的缓存,也可以作为从磁盘读取数据的缓存。
  • Cache 是对文件数据的缓存,它即可以作为从文件读取数据的页缓存,也可以用作写文件的页缓存。

我们都知道,文件是通过文件系统负责和磁盘交互,磁盘是块设备文件,直接读写磁盘或者分区,就会跳过文件系统,产生裸I/O,因此 文件和磁盘的缓存 的管理非常不同。

4.Cache和Buffer的命中案例

  • 首先先清理一下缓存
echo 3 > /proc/sys/vm/drop_caches

(1)文件写入读取案例

# 先向文件中写入500M
dd if=/dev/urandom of=/tmp/test.txt bs=1M count=500
# 然后再将其读取出来
dd if=/tmp/test.txt of=/dev/null

在这里插入图片描述
在这里插入图片描述

(2)磁盘写入读取案例

# 先读取1G的数据到buffer
dd if=/dev/sda1 of=/dev/null bs=1M count=1024
# 然后在读取一遍,看看有没有命中缓存
dd if=/dev/sda1 of=/dev/null bs=1M count=1024

在这里插入图片描述

在这里插入图片描述

至此,整篇对Buffer和Cache的作用以及演示就到这里了,由上面的案例我们也最终确认了开头的结论:

  • cache用于文件读写的缓存。
  • buffer用于磁盘读写的缓存,也就是裸I/O。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/149195.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【迅为iMX6Q】开发板 Linux 5.15.71 SD卡 启动

开发环境 win10 64位VMware Workstation Pro 16ubuntu 22.04【迅为imx6q】开发板, 2G DDR linux-imx 下载 使用 NXP 官方提供的 linux-imx,代码地址为: https://github.com/nxp-imx/linux-imx 使用 git 下载 linux-imx, git cl…

Linux应用编程---6.无名管道

Linux应用编程—6.无名管道 6.1 pipe()函数使用详情 ​ 管道是进程之间进行通讯的一种方式。管道有两种,分别是:无名管道和有名管道。先看无名管道。管道创建函数是pipe(),在Linux终端输入man pipe。 图1 pipe()函数详情NAMEpipe, pipe2 - …

Mathorcup数学建模竞赛第六届-【妈妈杯】B题:小区车位分布的优化设计与评价(附一等奖获奖论文、C++和matlab代码)

赛题描述 随着现代社会经济的快速发展,房地产成为国家经济发展中重要的经济增长点之一。而小区内汽车停车位的分布对于小区居民的上下班出行影响很大。请建立数学模型,解决下列问题: 问题1:分析评判小区汽车停车位分布是否合理的几个关键指标,建立评判车位分布合理的数学…

mybatis官方文档之第一个mybatis程序实操

mysql数据库准备工作: 首先,我们需要在mysql数据库中,建立数据库和数据表: //创建数据库 create database my_batis; //创建表 create table students(id int not null,name varchar(30) default null,pwd varchar(30) default …

用移动激光扫描来估计树干直径的分割和树干校准法

Paper题目:Mobile Laser Scanning for Estimating Tree Stem Diameter Using Segmentation and Tree Spine Calibration Abstract 移动激光扫描 (MLS) 可以通过使用自动推导出树干中心位置和树干直径的算法来提高森林清查效率。在这项工作中,我们提出了…

远程控制软件– 向日葵使用教程

新冠疫情的严峻形式下,各地都延期复工,一时间远程办公,在家办公可谓非常火爆。然而,家里毕竟不是公司,很多的资料都在办公室电脑,甚至一些比较专业系统或者专属网络限制无法完成在家办公,这时候…

从加(解)密角度讲栅栏密码

目录普通型栅栏加密原理解密原理W型栅栏加密原理实例解密原理这今天在做新生赛的一道“只有倒着翻过十八层的篱笆才能抵达北欧神话的终点”,研究了很长时间的栅栏原理,flag没出来,而且自己对于普通和W型的加密解密整的有的蒙… 原先一篇文章里…

sentinel-流量控制

github地址:主页 alibaba/Sentinel Wiki GitHub 目录 概述基于 QPS/并发数的流量控制基于调用关系的流量控制 概述 流量控制(flow control),其原理是监控应用流量的 QPS 或并发线程数等指标,当达到指定的阈值时对…

免费安全的内网穿透实现——Tailscale

一、需求说明想要实现访问公司或家里的网络设备(Windows电脑、NAS、安卓设备等);但是这些设备又没有对应的公网IP地址;且就算有公网 IP 地址,也不放心让这些网络设备直接公开暴露在网络环境中(这样很容易被频繁的恶意扫…

【MySQL Tips】除了指定密码外 MySQL客户端更好的选择——登录路径

在实际项目中,我们在生产(环境)发布新版本或运维时,使用 mysql 、mysqladmin、mysqlimport、mysqldump、mysqlpump 等 MySQL 客户端程序时,每次都需要输入密码,一般都会采用更安全的互动输入密码模式&#…

UOS 22.0家庭版使用体验

1月4日这天我收到了UOS的22.0版本的推送,更新后新增了未成年人账户和学习中心,由于是虚拟机中所以无法新增未成年人账户,于是我制作了Linux to go(LTG)但是由于我的U盘不是固态U盘所以我用普通的更新就卡在了更新界面。…

Linux下第一个程序:进度条

一、前言 进度条程序曾经是百度的一道面试题。 这一期博客我们来介绍代码和原理究竟是怎样的。 二、知识点 1.回车和换行 通常意义上我们以为回车就是就是键盘的那个回车键。 其实不然。回车其实是不换行,回到本行开头。我们通常用符号表示为 \r 。 换行就是新…

Docker Compose安装

目录 前言 1. 二进制包在线安装 2. 二进制包离线安装 2.1 下载安装包。 2.2 上传到linux服务器 2.3 解压到/usr/local/bin/docker-compose目录。 2.4 将可执行权限应用于二进制文件 2.5 创接建软链(可选) 2.6 测试是否安装成功 3. 国内镜像二进…

Linux应用编程---3.wait()函数

Linux应用编程—3.wait()函数 ​ 首先引入三个函数,我们通过在Linux终端下查阅它的作用与使用方法。 ​ Linux终端命令下输入:man exit,敲击回车键即可打开exit函数详情页。 图1 exit编程手册​ exit函数的作用是终止一般进程,没…

12、Java基础之泛型的使用

一、泛型的理解1、泛型的概念所谓泛型,就是允许在定义类、接口时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型。这个类型参数将在使用时(例如, 继承或实现这个接口,用这个类型声明变量、创建对象时&#…

[游戏测试]基于人工智能博弈树,极大极小(Minimax)搜索算法并使用Alpha-Beta剪枝算法优化实现的可人机博弈的AI智能五子棋游戏。

⬜⬜⬜ 🐰🟧🟨🟩🟦🟪 (*^▽^*)欢迎光临 🟧🟨🟩🟦🟪🐰⬜⬜⬜ ✏️write in front✏️ 📝个人主页:陈丹宇jmu &a…

关于idea中查看源码时的注释以及.class与.java文件的问题

文章目录问题描述解决方法问题描述 在使用idea编辑器学习java的时候发现有的人的idea将鼠标方法java自带的类方法上会出现解释注释,但是我的idea不可以,经过查询发现是idea中jdk选择的问题。 下图为能查看注释时的截图 按住ctrl点击方法名进入&#x…

分治和递归

目录 分治的概念: 递归的概念: 分治策略的特征: 分治法步骤: 例:阶乘! 迭代 递归 关于递归使用栈 斐波拉切数列 迭代 递归 分治的概念: 将一个难以直接解决的大问题(规模大…

【年终总结】我的前端之行,回顾2022,展望2023

🐱个人主页:不叫猫先生 🙋‍♂️作者简介:前端领域新星创作者、华为云享专家、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀! 💫系列专栏&#xff…

Vivado综合属性之MAX_FANOUT

本文介绍了综合属性MAX_FANOUT对Schematic的影响,通过本文可以理解通过寄存器复制的方式可以降低扇出。 高扇出信号可能会因为布线拥塞而出现时序问题。常用的规避方法是通过寄存器复制的方式降低扇出,可通过MAX_FANOUT实现寄存器复制。 MAX_FANOUT既可…