当前位置: 首页 > 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 调度
设备驱动
硬件设备
数据传输
完成处理
通知用户空间
操作完成

相关文章:

  • 《几何原本》命题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打包
  • wordpress网站图标/谷歌google官网下载
  • 做网站开发需要学哪些东西/seo快速整站上排名教程
  • 网站移动端开发需要哪些技术/在百度怎么发布作品
  • 广告型网站怎么做的/免费制作网站平台
  • 重庆网站建设 微客巴巴/关键词排名优化工具
  • 如何免费建一个wordpress/seo推广方法