[394页]
第9章 块设备驱动程序
395–9-1-总体功能
395–9-1-1-块设备请求项和请求队列
397–9-1-2-块设备访问调度处理
397–9-1-3-块设备操作方式
398–9-2-blk.h文件
398–9-2-1-功能描述
399–9-2-2-代码注释
403–9-3-hd.c程序
403–9-3-1-功能描述
405–9-3-2-代码注释
417–9-3-3-其他信息
426–9-4-ll_rw_blk.c程序
426–9-4-1-功能描述
426–9-4-2-代码注释
432–9-5-ramdisk.c程序
432–9-5-1-功能描述
434–9-5-2-代码注释
438–9-6-floppy.c程序
438–9-6-1-功能描述
439–9-6-2-代码注释
452–9-6-3-其他信息
[394页]
第9章 块设备驱动程序
操作系统的主要功能之一就是与周边的输入输出设备进行通信,采用统一的接口来控制这些外围设备。操作系统的所有设备可以粗略地分成两种类型:块设备(block device)和字符型设备(character device)。块设备是一种可以以固定大小的数据块为单位进行寻址和访问的设备,例如硬盘设备和软盘设备。字符设备是一种以字符流作为操作对象的设备,不能进行寻址操作。例如打印机设备、网络接口设备和终端设备。
为了便于管理和访问,操作系统将这些设备统一地以设备号进行分类。在Linux0.12内核中设备被分为7类,即共有7个设备号(0到6)。每个类型中的设备可再根据子(从、次)设备号来加以进一步区分。
表9-1中列出了各个设备号的设备类型和相关的设备。从表中可以看出某些设备(内存设备)即可以作为块设备也可以作为字符设备进行访问。本章主要讨论和描述块设备驱动程序的实现原理和方法,关于字符设备的讨论放在下一章中进行。
表9-1 Linux0.12内核中的主设备号与相关操作函数
Linux0.12内核主要支持硬盘、软盘和内存虚拟盘三种块设备。由于块设备主要与文件系统和高速缓冲有关,因此在继续阅读本章内容之前最好能够先快速浏览一下第12章的内容。本章所涉及的源码文件见表9-2。
表9-2 linux/kernel/blk_drv 目录
本章程序代码的功能可分为两类,一类是对应各块设备的驱动程序,这类程序有:
硬盘驱动程序hd.c。
软盘驱动程序floppy.c。
内存虚拟盘驱动程序ramdisk.c。
另一类只有一个程序,是内核中其他程序访问块设备的接口程序ll_rw_blk.c。块设备专用头文件blk.h为这三种块设备与ll_rw_blk.c程序交互提供了一个统一的设备方式和相同的设备请求开始程序。