一:块设备介绍
块设备是与字符设备并列的概念,两者在驱动结构上有较大差异。缓冲,I/O调度,请求队列等都是与块设备驱动相关的概念。块设备驱动较字符设备驱动复杂得多,在I/O操作上也有很大不同:
(1):块设备只能以块为单位接收输入和返回输出,而字符设备则以字节为单位。大多数设备是字符设备,因为它们不需要缓冲而且不以固定块大小进行操作。
(2):块设备对于I/O请求有对应的缓冲区,因此它们可以选择以什么顺序进行响应,字符设备无须缓冲且被直接读取。对于存储设备而言,调整读写的顺序作用巨大,因为在读写连续的扇区的存储速度比比分离的扇区更快。
(3):字符设备只能被顺序读写,而块设备可以随机访问。虽然块设备可以随机访问,但是对于磁盘这类机械设备而言,按顺序排列访问可以提高性能,例如对扇区1,5,3,6的读写请求可以调整为1,3,5,6的请求。
在Linux中,我们通常用过磁盘文件系统EXT4,UBIFS等访问磁盘,但是磁盘也有一种原始设备的访问方式,如直接访问/dev/sdb1等。所有的EXT4,UBIFS,原始块设备又都是工作于VFS之下,而EXT4,UBIFS,原始块设备之下又包含块I/O调度层以进行排序和合并。I/O调度层的基本目的是将请求按照它们对应在块设备上的扇区进行排列,以减少磁头的移动,提高效率。