2009年第32题
程序员利用系统调用打开 I/O 设备时,通常使用的设备标识是( )
A. 逻辑设备名 \qquad B. 物理设备名 \qquad C. 主设备号 \qquad D. 从设备号
解析
本题主要考查的是对选项中四个术语的理解,以下是对它们的详细解释(示例是基于 Unix/Linux 系统的设备管理机制):
A. 逻辑设备名
逻辑设备名是操作系统为方便用户或应用程序访问设备而抽象出的名称,不直接对应物理硬件的物理属性,而是通过逻辑映射关联到物理设备。它通常用于屏蔽底层硬件差异,提供统一的访问接口。其特点是:
-
抽象性:不依赖硬件物理特性,而是根据功能、配置或用户定义命名。例如:
-
在 Linux 中,通过逻辑卷管理(LVM)创建的卷(如
/dev/mapper/vg0-lv0
)是逻辑设备名,对应物理磁盘上的逻辑卷。 -
系统通过符号链接(如
/dev/disk/by-label/ROOT
)为设备分配易读的逻辑名称,指向实际物理设备(如/dev/sda1
)。
-
-
动态性:可通过软件配置随时创建、删除或修改,与物理硬件的物理连接无关。
B. 物理设备名
物理设备名是直接关联硬件物理属性的名称,反映设备在系统中的物理连接或硬件标识,通常由系统内核根据设备的物理特性(如总线类型、硬件地址)自动分配。其特点是:
-
硬件相关性:名称直接对应设备的物理存在,如硬盘、光驱、USB 设备等。例如:
-
在 Linux 中,
/dev/sda
表示第一个 SATA 硬盘(sda
中的a
表示物理连接顺序),/dev/nvme0n1
表示第一个 NVMe 固态硬盘。 -
串口设备
/dev/ttyS0
、USB 设备/dev/usb/hiddev0
等也属于物理设备名。
-
-
稳定性:通常在系统启动时根据硬件枚举结果固定,但可能因硬件插拔或启动顺序改变而变化(除非通过 UUID 等机制固定)。
C. 主设备号
主设备号是 Unix/Linux 系统中用于标识设备类型的整数标识符,对应设备驱动程序。同一类设备(如所有硬盘、所有串口)共享相同的主设备号,内核通过主设备号找到对应的驱动程序处理设备请求。其作用是:
-
驱动匹配:主设备号是内核区分设备类型的关键。例如:
-
硬盘(SCSI/SATA)的主设备号为 8,软盘为 2,字符设备(如串口)的主设备号为 4。
-
查看主设备号:通过
ls -l /dev/sda
命令,输出中的第一列数字即为主设备号(如 8)。
-
-
历史背景:早期 Unix 系统中,主设备号范围为 0~255,现代 Linux 扩展至 0~65535,但仍通过
/proc/devices
文件管理已注册的主设备号。
D. 从设备号
从设备号是 Unix/Linux 系统中用于标识同一类型设备中的具体实例或分区的整数标识符,与主设备号共同构成设备文件的唯一标识。其作用是:
-
设备实例区分:
-
对于存储设备,从设备号用于标识具体分区。例如:
/dev/sda
(主设备号 8,从设备号 0)是整个硬盘,/dev/sda1
(从设备号 1)是第一个分区,/dev/sda2
(从设备号 2)是第二个分区。 -
对于总线设备(如 USB 设备),从设备号可能标识同一总线上的不同设备实例。
-
-
内核处理:内核通过从设备号确定操作的具体设备实例,驱动程序根据从设备号执行针对性操作(如读写特定分区)。
将以上术语比较如下:
术语 | 核心作用 | 典型示例(Linux) |
---|---|---|
逻辑设备名 | 提供用户友好的抽象名称,屏蔽硬件细节 | /dev/mapper/vg0-lv0、/dev/CDROM |
物理设备名 | 标识硬件物理存在,基于设备连接顺序或硬件地址 | /dev/sda、/dev/nvme0n1 |
主设备号 | 标识设备类型,关联驱动程序 | 硬盘主设备号 8,串口主设备号 4 |
从设备号 | 标识同一类型设备中的具体实例或分区 | /dev/sda1 的从设备号 1 |
对于 Windows 系统而言,也有“逻辑设备名”“物理设备名”术语,只是具体实现方式与 Linux 不同;但没有“主设备号”和“从设备号”两个术语,类似功能由其他机制替代了。
本题虽然没有明确说明按照哪种操作系统回答,但题干要求是“程序员利用系统调用打开 I/O 设备”,显然该标识应该对“人”友好,所以应为“逻辑设备名”。
本题答案:A