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

磁盘I/O子系统

一、数据写入磁盘流程

当执行向磁盘写入数据操作的时候,会发生如下的一系列基本操作。假设文件数据存在于磁盘扇区上,并且已经被读入到页缓存中。

  1. 进程使用write()系统调用写入文件。
  2. 内核更新映射到文件的page cache。
  3. 内核线程pdflush负责把页缓存刷入到磁盘中。
  4. 文件系统层把各个块缓存放入一个bio结构,并且提交一个写入到块设备层的请求。
  5. 块设备层从上层获得请求,执行I/O elevator操作,把请求放入到I/O请求队列中。
  6. 磁盘驱动,例如SCSI或其它特定驱动将会负责写操作。
  7. 磁盘驱动固件执行硬件操作,例如寻址、旋转、数据传送到磁盘的扇区

二、物理磁盘结构

磁盘是计算机主要的存储设备,也是计算机的主要构成硬件,磁盘主要由盘片、磁头、磁道、扇区、柱面这几部分组成。

  • 盘片 : 磁盘由多个盘片组成,数据存储在这些盘片上,通过盘片的转动来让磁头读取数据的。
  • 磁头: 在需要读取数据的时候,磁头就会移到这个盘片上面读取数据,磁头和盘片之间的距离非常小,但不会接触到盘片。如果出现断电的情况,那么磁头就会从盘片上移开移回到原来的位置。
  • 磁道: 每个盘片就像一个“目标靶盘”,从中心向外分布着一圈圈的圆环,这些圆环被称为磁道。磁道是数据存储的基本单位,每个磁道上可以存储大量的数据。
  • 扇区: 磁道是由一个一个的小圆环组成,每一个圆圈又进行了一个更小的划分,被称为扇区,如下面所示,一个磁道由八个扇区组成,每个扇区存储512个字节数据。
  • 柱面: 柱面是多个盘片的磁道在相同位置的集合,如下面的黄色部分,四个盘面都有这个黄色的磁道,这样黄色部分的四个磁道就形成了一个圆柱体状的柱面。

三、缓存与脏数据

现代处理器的访问速度已经远远超过了主存储器的访问速度,为了解决这个问题,在CPU和内存之间添加一个高速内存, 这个高速内存容量小,只用来存储CPU执行时常用的指令。既保证了硬件成本,又提高了CPU的访问速度。

高缓存命中率是提升性能的关键。 为了获得高缓存命中率, 使用”局部性引用“的技术。 这个技术基于如下的原则:
最近使用过的数据即将被使用的可能性很高(时间局部性, temporal locality)。
使用过数据的附近数据被使用的可能性很高(空间局部性, spatial locality)
Linux在很多组件中用到了这个原则,例如页缓存、文件对象缓存(i-node缓存、目录条 目缓存等等)、预读缓冲区等。如下图所示:

在进程从磁盘中读数据时,数据被复制到内存中。该进程和其它进程都可以在内存缓存中读 取同样的数据副本。当进程尝试改变数据,进程首先修改内存中的数据,这时候,磁盘和内 存中的数据就不一致了,内存中的数据就叫做脏缓冲(dirty buffer)。脏缓冲应该尽快同步到 磁盘上,否则,如果突然崩溃,内存中的数据会丢失。

同步脏缓冲的进程叫做flush,在Linux内核2.6中,pdflush内核线程负责把数据写入到磁盘 上。数据会定时刷新(kupdate),或者当内存中的脏缓冲到了阀值的比例的时候 (bdflush)。这个阀值在/proc/sys/vm/dirty_background_ratio文件中。

参考:

I/O子系统与磁盘调度详解-CSDN博客

https://juejin.cn/post/6844903747189997581

https://zhuanlan.zhihu.com/p/25779982455

http://www.xdnf.cn/news/6949.html

相关文章:

  • 【VSCode】快捷键合集(持续更新~)
  • GJOI 5.15 题解
  • FTP与NFS服务实战:从配置到应用
  • 考公知识总结
  • 怎么用Origin画出MATLAB效果的3D时频图
  • [ctfshow web入门] web77
  • Python基于Django的校园招聘系统【附源码、文档说明】
  • 寻找树的中心(重心)
  • Mysql 索引概述
  • 通过多线程同时获取H264和H265码流
  • 本地缓存更新方案探索
  • 多模态模型如何处理任意分辨率输入——Tiling与Packing技术详解
  • CentOS 下 FTP 与 NFS 服务深度解析:从基础配置到实战应用
  • css 中 content: “\e6d0“ 怎么变成图标的?
  • 2000 元以下罕见的真三色光源投影仪:雷克赛恩Cyber Pro1重新定义入门级投影体验
  • 南航无人机大规模户外环境视觉导航框架!SM-CERL:基于语义地图与认知逃逸强化学习的无人机户外视觉导航
  • STM32F10xx 参考手册
  • ALIENTEK精英STM32F103开发板 实验0测试程序详解
  • 信息安全的基石:深入理解五大核心安全服务
  • NPN、PNP三极管的应用
  • 企业级电商数据对接:1688 商品详情 API 接口开发与优化实践
  • Pandas 掌握Matplotlib基础绘图①
  • 6to4、6over4的类比解释
  • MAUI之XAML标记扩展
  • Linux:计算机的层状结构
  • .NET 中管理 Web API 文档的两种方式
  • 指定elf文件dwarf 版本以及查看dwarf版本号
  • C++ 蓝桥 STEMA 真题模拟测试卷二
  • 程序中断方式好题分享
  • 日志系统**