11.1 概述
在Linux 中输入/输出设备被分为三类:块设备,字符设备和网络设备。这种分类的使用方法,可以将控制不同输入/输出设备的驱动程序和其它操作系统软件成分分离开来。例如文件系统仅仅控制抽象的块设备,而将与设备有关的部分留给低层软件,即驱动程序。字符设备指那些无需缓冲区可以直接读写的设备,如系统的串口设备/dev/cua0和/dev/cua1。块设备则仅能以块为单位进行读写的设备,如软盘,硬盘,光盘等,典型块的大小为 512 或 1024 字节。从名称使人想到,字符设备在单个字符的基础上接收和发送数据。为了改进传送数据的速度和效率,块设备在整个数据缓冲区填满时才一起传送数据。网络设备可以通过BSD套接口访问数据,关于这方面的内容我们将在第十二章中进行讨论。
在Linux中,对每一个设备的描述是通过主设备号和从设备号,其中主设备号描述控制这个设备的驱动程序,也就是说驱动程序和主设备号是一一对应的,从设备号是用来区分同一个驱动程序控制的不同设备。
例如主IDE硬盘的每个分区的从设备号都不相同,/dev/hda2 表示主IDE硬盘的主设备号为3而从设备号为2。Linux通过使用主、从设备号将包含在系统调用中的设备特殊文件映射到设备的管理程序,以及大量系统表格中,如字符设备表—chrdevs。 块(磁盘)设备和字符设备的设备特殊文件可以通过 mknod 命令来创建,并使用主从设备号来描述此设备。网络设备也用设备相关文件来表示,但 Linux 寻找和初始化网络设备时才建立这种文件