Linux下磁盘读写流

news2025/3/9 7:48:57
  1. 用户空间请求
    系统调用:应用程序通过系统调用(如 read() 或 write())请求对文件或设备进行读写操作。
    文件描述符:操作通过文件描述符进行,该描述符在应用程序打开文件时获得。

  2. VFS(虚拟文件系统)
    路径解析:VFS 负责解析文件路径并找到对应的文件 inode。
    权限检查:VFS 检查文件的权限,确保当前用户有权限进行读写操作。
    缓存检查:VFS 检查页缓存(page cache)以确定请求的数据是否已经在内存中。

  3. 页缓存
    读操作:
    如果数据在页缓存中,直接返回数据给用户空间。
    如果不在缓存中,VFS 发起从磁盘读取数据的请求。
    写操作:
    数据首先写入页缓存(写回机制),然后异步地刷新到磁盘。
    使用脏页(dirty pages)标记缓存中需要写回的数据。

  4. 块设备层
    I/O 调度:请求被发送到块设备层,I/O 调度器对请求进行排序和优化,以提高性能。
    合并请求:相邻的 I/O 请求可能会被合并以减少磁盘寻道时间。

  5. 驱动程序
    设备驱动:I/O 请求被传递给相应的设备驱动程序,驱动程序负责与硬件设备进行通信。
    DMA(直接内存访问):在可能的情况下,DMA 用于将数据直接从内存传输到设备,减少 CPU 负担。

  6. 硬件设备
    硬盘控制器:硬件设备接收到请求后执行实际的读写操作。
    数据传输:数据从磁盘传输到内存(读操作)或从内存传输到磁盘(写操作)。

  7. 完成处理
    中断处理:操作完成后,设备驱动程序通过中断通知内核。
    缓存更新:对于写操作,页缓存中的脏页被标记为干净。
    通知用户空间:最终,系统调用返回,用户空间应用程序被通知操作已完成。

优化与特性
预读(Read-ahead):内核可能会提前读取数据到缓存中,以提高读取性能。
写回缓存(Write-back Cache):写操作通常是异步的,数据先写入缓存然后再写入磁盘。
I/O 调度算法:不同的 I/O 调度算法(如 CFQ、Deadline、NOOP)可以根据工作负载选择以优化性能。

流程如下:

命中缓存
未命中缓存
用户空间请求
系统调用
VFS
页缓存检查
直接返回数据
块设备层
I/O 调度
设备驱动
硬件设备
数据传输
完成处理
通知用户空间
操作完成

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

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

相关文章

MAVEN手动配置(阿里云)全教程

介于网上各种各样的MAVEN配置过程中方法大致相同却细节参差不齐,我总结了我遇见的一些问题,来完全的解决MAVEN手动配置的全过程,以及分享解决小毛病的经验。 所需材料: MAVEN3.9.9(下载适合自己的版本即可&#xff09…

贪心算法一

> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:了解什么是贪心算法,并且掌握贪心算法。 > 毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安! >…

计算机毕业设计Python+DeepSeek-R1大模型微博的话题博文及用户画像分析系统 微博舆情可视化(源码+ 文档+PPT+讲解)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

Secret Cow Code S

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝 既然选择了远方,当不负青春,砥砺前行! 题目描述 奶牛们正在实验秘密代码,并设计了一种方法用于生成无限长度的字符…

MyBatis - XML CRUD 其他查询

1. XML 配置文件 使用 MyBatis 操作数据库的方式有两种: 注解 (在注解中定义 SQL 语句)XML 配置文件 (在 XML 文件中定义 SQL 语句) 在上一篇博客中, 已经讲解了如何使用注解操作数据库, 本篇文章来讲解如何使用 XML 进行 MyBatis 开发. 使用 XML 的步骤, 和使用注解的步骤…

牛客python蓝桥杯11-32(自用)

11 import os import sysdef huiwen(str):length len(str)# if length 0:# return -1result []for i in range(length-1): # 0 - length-2for j in range(i2,length1):# 取出从索引 i 到 j-1 的子串s str[i:j]# 正序倒序if s s[::-1]:result.append(len(s))if result…

rabbitmq版本升级并部署高可用

RabbitMQ版本升级 先检查是否已经安装rabbitmq rpm -qa|grep rabbitmq|wc -l //如果结果是0,表示没有安装 rpm -e --nodeps $(rpm -qa|grep rabbitmq) //如安装了,则进行卸载 先检查是否已经安装erlang rpm -qa|grep erlang|wc -l //如果结果…

数据集路径出错.yaml‘ images not found , missing path

方法一:删除settings.yaml 方法二:dataset_name.yaml改用绝对路径,如最后一张图 错误分析: dataset_name.yaml中的path的路径仅支持绝对路径,写相对路径就会搜索不到,使用settings.json中的路径&#xff0…

win32汇编环境,对话框中使用树形视图示例二

;运行效果 ;win32汇编环境,对话框中使用树形视图示例二 ;得到树形视图控件Treeview的全路径字符串,这里的方法是由子项向父项挨个找的算法找齐路径 ;直接抄进RadAsm可编译运行。重要部分加备注。 ;下面为asm文件 ;>>>>>>>>>>>>>>&g…

【连珠云弈】网页五子棋版项目测试报告

目录 一、项目背景 1.1、项目起源 1.2、市场需求 1.3、项目目标 二、项目功能 2.1 用户管理功能 2.2 游戏对战功能 三、测试报告 3.1.功能测试 ​编辑 3.1.1注册功能测试 解决bug: 测试总结: 3.1.2登录功能测试 测试总结: 3.…

OpenCV计算摄影学(15)无缝克隆(Seamless Cloning)调整图像颜色的函数colorChange()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::colorChange 是 OpenCV 中用于调整图像颜色的函数。它允许你通过乘以不同的系数来独立地改变输入图像中红色、绿色和蓝色通道的强度&#xf…

AI视频领域的DeepSeek—阿里万相2.1图生视频

让我们一同深入探索万相 2.1 ,本文不仅介绍其文生图和文生视频的使用秘籍,还将手把手教你如何利用它实现图生视频。 如下为生成的视频效果(我录制的GIF动图) 如下为输入的图片 目录 1.阿里巴巴全面开源旗下视频生成模型万相2.1模…

用Python分割并高效处理PDF大文件

在处理大型PDF文件时,将它们分解成更小、更易于管理的块通常是有益的。这个过程称为分区,它可以提高处理效率,并使分析或操作文档变得更容易。在本文中,我们将讨论如何使用Python和为Unstructured.io库将PDF文件划分为更小的部分。…

RabbitMQ知识点

1.为什么需要消息队列? RabbitMQ体系结构 操作001:RabbitMQ安装 二、安装 # 拉取镜像 docker pull rabbitmq:3.13-management ​ # -d 参数:后台运行 Docker 容器 # --name 参数:设置容器名称 # -p 参数:映射端口号&…

2025-03-06 学习记录--C/C++-PTA 习题6-6 使用函数输出一个整数的逆序数

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、题目描述 ⭐️ 二、代码&#xff08;C语言&#xff09;⭐️ #include <stdio.h>int reverse( int number );int main…

力扣132. 分割回文串 II

力扣132. 分割回文串 II 题目 题目解析及思路 题目要求返回将s切割成若干回文串的最少切割次数 对于子串s[j...i]&#xff0c;若为回文串&#xff0c;则问题变为求s[0...j]的最少切割次数 因此可以考虑动态规划 对于问题s[j...i]是否为回文串&#xff0c;若s[i] s[j]则问…

调研:如何实现智能分析助手(Agent)(AutoCoder、FastGPT、AutoGen、DataCopilot)

文章目录 调研&#xff1a;如何实现智能分析助手&#xff08;Agent&#xff09;&#xff08;AutoCoder、FastGPT、AutoGen、DataCopilot&#xff09;一、交互流程二、数据流程三、架构分类四、开源产品4.1 AutoCoder&#xff08;知识库变体&#xff09;4.2 FastGPT&#xff08;…

学习使用ESP8266进行MQTT通信并在网页上可视化显示

目录 一、工具 二、 流程 三、代码实现 设置MQTT服务器地址 设置服务器和端口号 连接MQTT服务器并订阅话题 回调处理函数 发布数据到话题 四、调试软件使用 打开MQTTx 添加话题 五、网页使用 一、工具 arduino ide esp8266/32单片机 lot物联网网页 MQTTx软件或者m…

mysql进阶(三)

MySQL架构和存储引擎 1. MySQL架构 MySQL8.0服务器是由连接池、服务管理⼯具和公共组件、NoSQL接⼝、SQL接⼝、解析器、优化 器、缓存、存储引擎、⽂件系统组成。MySQL还为各种编程语⾔提供了⼀套⽤于外部程序访问服务器 的连接器。整体架构图如下所⽰&#xff1a; 2. 连接层 …

【MYSQL数据库异常处理】执行SQL语句报超时异常

MYSQL执行SQL语句异常&#xff1a;The last packet successfully received from the server was 100,107 milliseconds ago. The last packet sent successfully to the server was 100,101 milliseconds ago. 这个错误表明 MySQL 服务器与 JDBC 连接之间的通信超时了。通常由…