linux IO流程中各级缓存

2024-04-26 19:18
文章标签 linux io 缓存 流程 各级

本文主要是介绍linux IO流程中各级缓存,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 “buffer cache” (指内存)

要理解”buffer cache”这个东西,需要澄清一下概念:

一般情况下,进程在io的时候,要依赖于内核中的一个buffer模块来和外存发生数据交换行为。另一个角度来说,数据从应用进程自己的buffer流动到外存,中间要先拷贝到内核的buffer中,然后再由内核决定什么时候把这些载有数据的内核buffer写出到外存。

“buffer cache”仅仅被内核用于常规文件(磁盘文件)的I/O操作。

内核中的buffer模块,就是今天的主题—-“buffer cache”(buffer,cache的功能兼备)

一般情况下,Read,write系统调用并不直接访问磁盘。这两个系统调用仅仅是在用户空间和内核空间的buffer之间传递目标数据。举个例子,下面的write系统调用仅仅是把3个字节从用户空间拷贝到内核空间的buffer之后就直接返回了

write(fd,”abc”,3);

在以后的某个时间点上,内核把装着“abc”三个字节的buffer写入(flush)磁盘……

如果另外的进程在这个过程中想要读刚才被打开写的那个文件怎么办?答案是:内核会从刚才的buffer提供要读取的数据,而不是从磁盘读。

介绍完“写出”,该介绍“读入”了。

当前系统上第一次读一个文件时,Read系统调用触发内核以block为单位从磁盘读取文件数据,并把数据blocks存入内核buffer,然后read不断地从这个buffer取需

这篇关于linux IO流程中各级缓存的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/938427

相关文章

mybatis使用redis缓存两种方式

1、注入 @EnableAsync //开启异步@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })public class RuoYiApplication{public static void main(String[] args){// System.setProperty("spring.de

Linux中gitlab-runner部署使用备忘

环境:         操作系统::CentOS8         gitlab版本:13.11.4 查看gitlab-runner版本         可以从https://packages.gitlab.com/app/runner/gitlab-runner/search找到与安装的gitlab版本相近的gitlab-runner版本以及安装命令等信息,我找到与13.11

正点原子Linux学习笔记(七)在 LCD 上显示 png 图片

在 LCD 上显示 png 图片 21.1 PNG 简介21.2 libpng 简介21.3 zlib 移植下载源码包编译源码安装目录下的文件夹介绍移植到开发板 21.4 libpng 移植下载源码包编译源码安装目录下的文件夹介绍移植到开发板 21.5 libpng 使用说明libpng 的数据结构创建和初始化 png_struct 对象创建和初始化 png_info 对象设置错误返回点指定

浅谈冯诺依曼体系与Linux操作系统

目录 前言 1.1冯诺依曼体系下的存储器 二、操作系统 1.关于操作系统 2.关于管理方式 总结 前言 不知道你是否有着这样的疑问: 什么是内存?什么是磁盘?他们有什么区别?可不可以相互替代? 操作系统是如何对数据进行管理的?我们平日写的C代码是如何既能在windows机器上执行又能在Linux机器上执行的呢? 如果你对这些问题感到混乱不妨先来看看这篇文章! 博主码云:带着

Linux上,用>>重定向指定的日志,如何实现定期归档?

工作中遇到这样的问题,程序执行时,用nohup后台挂起生成的日志文件,还是用>>重定向指定的日志文件,比如这个日志文件是test1.log,改变名字为test2.log,输出信息还是会继续在test2.log上输出,而不是重新生成新的test1.log。 那么,这样就没办法实现日志的归档,于是琢磨了一个上午,终于找到办法了。 思路是这样的:         1,定期把日志文件复制一份到归档目

Linux系统LVM扩容报Logical volume datavg/lv_data successfully resized

Linux系统LVM扩容报Logical volume datavg/lv_data successfully resized 问题现象 今天在对现有的环境进行扩容的时候报Couldn’t find valid filesystem superblock错误 [root@ZHHALxjspo0db021 ~]# resize2fs /dev/datavg/lv_dataresize2fs

Tcl学习笔记(四)——流程控制、过程、命名空间、访问文件

1. 流程控制 if命令         if命令后跟两个参数:表达式、待执行的Tcl脚本。if命令中的每一个左大括号都必须与它前一个字符同行。         有elseif和else可选子句,使用时与if中第二个参数的右大括号放在同一行。 switch命令         switch命令利用一个给定值与多个模式进行匹配,执行匹配成功的TCL脚本,有两个参数:待检测的值、一个或多

wordpress安装教程_如何在linux中安装wordpress程序-apache php(服务器学习十二)

最后附带安装工程中的问题! wordpress安装教程_如何在linux中安装wordpress程序 本套wordpress安装教程是本人在linux中安装wordpress程序之后记录下来的,所有的步骤也都是经过本人自己验证过的,所以请放心看完整个wordpress程序的安装过程。   在linux系统中安装wordpress程序之前需要准备安装好php,mysql,apache htt

Linux下安装mysql(服务器学习十)

参考   https://www.jianshu.com/p/276d59cbc529   针对自己的问题略有改动!亲测可用!! Mysql数据库的安装对于开发者来说,是我们必然会面对的问题,它的安装过程其实并不复杂,并且网络上的安装教程也非常多,但是对于新手来说,各种不同形式的安装教程,又给新手们带来了要选择哪种方式进行安装的难题,而且很多时候按照教程也没有能够安装成功,安装过程出现各种各

CentOS、Ubuntu、Debian三个linux选择哪一个(服务器学习九)

Linux有非常多的发行版本,从性质上划分,大体分为由商业公司维护的商业版本与由开源社区维护的免费发行版本。 商业版本以Redhat为代表,开源社区版本则以debian为代表。这些版本各有不同的特点,在不同的应用领域发挥着不同的作用,不能一概而论。而绝大多数VPS上只提供开源社区维护的发行版本。下面就这些不同的Linux发行版进行简单的分析。 Ubuntu Ubuntu近些年的粉丝越来越多,