Skip to content

2009年 408 操作系统 第 32 题

操作系统2009年选择题2分

题目

程序员利用系统调用打开 I/O 设备时,通常使用的设备标识是( )。

错因

B

物理设备名是硬件特定的标识——比如"第二块磁盘的第三个分区"这种带具体硬件信息的名字。让程序员直接用物理设备名等于让程序绑死在某台机器上,违反"设备无关性"的设计目标。OS 的 I/O 抽象就是让程序员不用关心物理细节。

C

主设备号(major number)是驱动程序的标识——OS 内核用它把请求分发给对应的设备驱动。这是内核内部使用的编号,不是用户看到的;程序员的 syscall 不会传主设备号。

D

从设备号(minor number)是同一类设备里的具体实例编号(比如同一块磁盘的不同分区)——也是内核内部使用。程序员用的是更高一层的逻辑名,syscall 不要求程序员管这个数字。

总解析

设备无关性(device independence):用户程序使用设备时不依赖具体硬件——通过逻辑设备名访问,OS 在运行时把逻辑设备名映射到物理设备。

逻辑设备名 vs 物理设备名

例子谁用
逻辑设备名/dev/printer/dev/cdrom、stdin / stdout、con:程序员
物理设备名"EpsonL3151" 在 USB1 上、"WD Caviar 500GB" 在 SATA0OS 内部
主 + 从设备号(major=8, minor=0) 表示第一块 SCSI 硬盘OS 内核驱动表

OS 把逻辑名翻译成物理设备

程序:open("/dev/cdrom")

OS 查"逻辑名 → 物理设备"映射表

找到具体物理设备 + 主从设备号 + 驱动入口

调用对应驱动,启动 I/O

好处

维度收益
移植性同一程序在不同硬件配置上都能跑(逻辑名不变)
灵活性同一程序可以重定向到不同设备(如 stdout 重定向到文件)
简化编程程序员不用学硬件细节

速记:程序员只跟逻辑名打交道——open("文件名" 或 "/dev/X"),OS 内部翻译成物理设备 + 设备号。这正是 Unix"一切皆文件"哲学的体现:所有 I/O 都通过统一的 open/read/write 接口操作逻辑名,物理细节藏在内核。

最终答案是 A

最后更新:

⚠️ 这道题暂未配可视化,欢迎在 CodeBrick 反馈区告诉我们你想看哪道题