Linux2.6块设备驱动程序

一、块设备的操作的处理体系结构

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、文件系统、映射层的传送和存储数据的基本单位
几个相邻的扇区 驱动程序处理数据的基本单位


你可能感兴趣的:(linux,算法,工作,存储,扩展,磁盘)