当前位置: 首页 > news >正文

Linux下磁盘读写流

  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.dtcms.com/a/53431.html

相关文章:

  • 《几何原本》命题I.12
  • API和SDK
  • 护照阅读器在汽车客运站流程中的应用
  • Excel表格打印 第二页边框隔断
  • 在Spring Boot + MyBatis中优雅处理多表数据清洗:基于XML的配置化方案
  • Android Coil3缩略图、默认占位图placeholder、error加载错误显示,Kotlin(5)
  • #如何改变怂怂懦弱的气质(2)
  • 【Linux内核系列】:进入文件系统的世界
  • µCOS-III从入门到精通 第七章(任务调度)
  • 算法日记34:14届蓝桥C++B接龙数列(动态规划DP)
  • 安全见闻之网络安全新兴术语
  • ThreadLocal
  • 马尔科夫不等式和切比雪夫不等式
  • 为AI聊天工具添加一个知识系统 之138 设计重审 2 文章学 之2
  • Linux基础 IO 和文件
  • 期权交易的优势和缺点是什么?
  • 斗地主小游戏
  • 运算放大器LM358的简单应用
  • LeetCode第78题_子集
  • ubuntu打包 qt 程序,不用每次都用linuxdeployqt打包
  • mybatisplus 开发流程
  • 1236 - 二分查找
  • jenkins配置连接k8s集群
  • LeetCode和为k的字数组(560题)
  • 【hello git】git 扫盲(add、commit、push、reset、status、log、checkout)
  • C语言学习笔记:初阶指针
  • 在 Maven 中使用 <scope> 元素:全面指南
  • “深入浅出”系列之Linux篇:(10)基于C++实现分布式网络通信RPC框架
  • 软件开发工程师与AI工具
  • MySQL字段内容加解密使用性能验证