磁盘读写过程总结+debugfs总结
来源:互联网 发布:淘宝助理很卡 编辑:程序博客网 时间:2024/05/22 05:15
本文参考~http://hi.baidu.com/_kouu/item/4e9db87580328244ef1e53d0和http://blog.yufeng.info/archives/751两篇博客,主要是对两篇内容进行总结。
普通磁盘文件的读写流程:
1.VFS:用户下发read或者write操作,然后在VFS层调用f_op->read/f_op->write
2.高速缓存:用于将磁盘的内容缓存在内存中,加速文件的读写,实际上,read,write只跟缓存打交道,只有读的数据不在缓存中,则触发读盘操作,。cache中存储inode节点信息,每个inode都内嵌一个address_space结构,维护一颗radix树,用于磁盘高速缓存的内存页面就挂在这棵树上,inode被载入内存的时候,对应的磁盘高速缓存是空的(radix树上没有页面),随着文件的读写,磁盘上的数据被载入内存,相应的内存页被挂到radix树相应位置。如果文件打开时,指定了O_DIRECT选项选项,则表示绕开磁盘高速缓存,直接与通用块层打交道(我们的测试中,选择指定O_DIRECT选项,避免缓存,为了全面观察读写操作下发的整个流程)
3.通用块层:把块设备看做由若干个扇区组成的数组空间,扇区是磁盘读写的最小单位,通过扇区号可以指定要访问的磁盘扇区。
4.IO调度器层:磁盘是通过磁头来写数据的,磁头在定位扇区的过程中需要做机械移动,相比于电和磁的传递,机械运动是非常慢速的,这也是磁盘慢的主要原因。IO调度器要做的事情就是在完成现有请求的前提下,让磁头尽可能少移动,从而提高磁盘的读写效率。最有名的就是”电梯算法“
。在IO调度器中,上层提交的bio被构造成request结构,一个request中包含一组顺序的bio,而每个物理设备会对应一个request queue,里面顺序存放着相关的request。新的bio可能被合并到request_queue中已有的request结构中,也可能生成新的request结构并插入到request_queue中。除了电梯算法,还有nono算法,也是就没有算法,先来先服务,因为现在很多块设备已经很好支持随机访问(SSD),没有必要使用电梯算法。
io调度器除了改变请求顺序,还可能延迟触发对请求的处理,因为只有当请求队列有一定数目的请求时,”电梯算法“才能发挥其功效,否则极端情况下,它将退化成先来先服务算法。
这种延迟触发请求,是通过plug/unplug来实现的。
5.设备驱动程序:
设备驱动程序要做的事就是从request_queue中取出请求,然后操作硬件设备,逐个去执行这些请求。除了处理请求,设备驱动程序还要选择IO调度算法,因为设备驱动程序是最知道设备属性的,知道用什么样的IO调度算法最合适。甚至于,设备驱动程序可以将IO调度器屏蔽掉,直接对上层bio进行处理。
- 磁盘读写过程总结+debugfs总结
- Windows物理磁盘扇区读写示例总结
- 操作磁盘路径总结
- 磁盘IO的总结
- ASM磁盘管理总结
- 磁盘IO的总结
- 磁盘知识总结
- 磁盘IO的总结
- 磁盘IO的总结
- 磁盘(卷)过滤总结
- Hadoop学习总结之二:HDFS读写过程解析
- Hadoop学习总结之二:HDFS读写过程解析
- Hadoop学习总结之二:HDFS读写过程解析
- Hadoop学习总结之二:HDFS读写过程解析
- Hadoop学习总结之二:HDFS读写过程解析
- Hadoop学习总结之二:HDFS读写过程解析
- Hadoop学习总结之二:HDFS读写过程解析
- Hadoop学习总结之二:HDFS读写过程解析
- 2014-06-20 日志
- Python中reduce、map、filter、apply、tuple函数
- Java 值传递与引用传递
- IllegalStateException: Can not perform this action after onSaveInstanceState
- 11、素数算法逐步优化
- 磁盘读写过程总结+debugfs总结
- poi操作doc、docx、xls、xlsx文档总结
- androd 调用系统拍照功能
- 关于android app跳转和从web跳转的问题(转载修正)
- 12、 枚举法---八皇后
- 【黑马程序员】java基础加强_JavaBean
- oracle数据库中最常用的sql语句
- 微信公众平台开发教程第21篇-“可信网址”白名单
- jsp