Linux2.6块设备驱动程序
来源:互联网 发布:全家福相册排版软件 编辑:程序博客网 时间:2024/05/21 10:09
一、块设备的操作的处理体系结构
1.VFS(虚拟文件系统)
VFS位于块设备的处理体系结构的上层,提供一个通用的文件模型。VFS和块设备的关系见Linux2.6设备管理
系统调用的服务例程调用一个合适的VFS函数,将文件描述符和文件内的偏移量传递给它。
2.磁盘高速缓存
VFS函数确定所请求的数据是否已经存在磁盘高速缓存中,若存在,就没有必须访问磁盘上的数据了。
3.映射层(块设备文件系统)
(1)把文件拆分成大小相同的块,每一个块都有一个逻辑号
(2)访问文件的磁盘节点,根据每一块的逻辑块号,确定这块数据的在磁盘上的位置
4.通用块层
(1)内核利用通用块层启动I/O操作来传送所请求的数据。
每个I/O操作只针对一组连续的块,由一个bio结构描述
由于所请求的数据不一定在相邻的块中,所以可能启动多次I/O操作
(2)gendisk是一个由通用块层处理的逻辑块设备。
通常一个gendisk对应一个硬件块设备,如硬盘、软盘、光盘。
gendisk也可以是一个虚拟设备,建立在几个磁盘分区之上
不管理gendisk是什么,借助于通用块层提供的服务,可以以同样的方式工作在所有的gendisk上。
(3)向通用块层提交一个I/O请求的通用操作
分配一个新的bio描述符,并初始化
获取与gendisk相关的块设备驱动程序的请求队列q
将bio插入q队列
5.I/O调度程序层
(1)当内核组件要读写一些磁盘数据时,创建一个块设备请求。请求中描述所请求的扇区和操作类型
(2)通过I/O调度策略(见(4)),把物理介质上相邻的数据请求聚在一起,减少不必须的寻道时间,提高效率
当请求传送一个新的数据块时,内核检查能否通过稍微扩展前一个处于等待状态的请求而满足要求
(3)每个块设备驱动程序都维持着自己的请求队列,对每个队列上单独执行I/O调度,可以提高磁盘的性能。
(4)I/O调度策略
预期算法:是最后期限算法的演变,最后期限算法中读的优先级较高,而预期算法写的优先级更高
最后期限算法:电梯策略可能会对某个请求忽略很长一段时间,最后期限算法保证这些请求得到满足
完全公平队列算法CFQ:确保在触发I/O请求的所有进程中公平分配磁盘的I/O带宽,通常把同一进程的请求放插入同一队列
Noop算法:没有排序队列,简单的FIFO后LIFO
电梯算法:优先处理与上一个所处理的请求最近的要求
6.块设备驱动程序
驱动程序向磁盘控制器发送适当的命令,进行实际的数据传输。
一个驱动程序可能处理几个块设备
每个块设备驱动程序都维持着自己的请求队列
7.硬件设备
二、数据管理的基本单位
1.扇区
扇区是硬件设备传送数据的基本单位。
扇区大小是512KB
2.块
块是VFS文件系统、映射层传送和存储数据的基本单位。文件和磁盘都被看作拆分成几个块。
块的大小必须是2的幂,不超过一个页框,是扇区大小的整数倍
块的大小不是唯一的,比如:512、1024、2048、4096
同一个磁盘上的几个分区可能使用不同大小的块
3.段
段是块设备驱动程序传输数据的单位
一个段是一个内存页或内存页的一部分,它包含磁盘上相邻的扇区
4.页
硬件高速缓存作用于磁盘数据上的页,每页正好装在一个页框中
5.扇区、块、段、页
扇区512B硬件传送数据的基本单位块大小是2的幂不超过一个页框
是扇区的整数倍VFS、文件系统、映射层的传送和存储数据的基本单位段几个相邻的扇区驱动程序处理数据的基本单位
- Linux2.6块设备驱动程序
- linux2.6设备驱动程序框架
- 块设备驱动程序实现
- 13. 块设备驱动程序
- 块设备驱动程序
- 装载块设备驱动程序
- 块设备驱动程序框架
- 块设备驱动程序
- 块设备驱动程序
- .块设备驱动程序框架
- 块设备驱动程序
- 块设备驱动程序
- 块设备驱动程序之一
- 块设备驱动程序设计
- 块设备驱动程序<一>
- 块设备驱动程序<二>
- 块设备驱动程序
- 块设备驱动程序1
- struts2报错: No result defined for action and result input
- Android Launcher-------Launcher为何物,究竟是干什么的?
- Two's complement
- C#中的 int?是什么意思
- C#中的 int?是什么意思
- Linux2.6块设备驱动程序
- C#遍历指定文件夹中的所有文件
- velocity 判空
- 【Ajax】参考资料
- Euclid's algorithms for GCD
- ftpj4图解
- SQL中获取一个关键字在某个字符串出现次数
- 回调函数及使用方法
- DWZ框架常见问题及解决