设备独立性软件
5.1.3 已经给出了这一层的六项职责,5.2 这一整节就是把这六项逐个展开:本节讲”设备独立性”这个核心思想与逻辑名到物理名的映射,5.2.2 讲缓冲管理,5.2.3 讲设备分配与回收。
机制
设备独立性的含义
设备独立性(设备无关性)指:用户程序中使用的是逻辑设备名,而系统在实际执行时将其转换为物理设备名。
这与文件系统的”按名存取”是完全相同的思路——用户说”打印机”,不说”3 号 LPT 端口上那台惠普”;正如用户说”我的论文.docx”,不说”第 38912 号盘块”。
这样做带来三个好处:
① 方便用户编程。 用户不必了解物理设备的具体细节,也不必知道系统里到底装了几台打印机。
② 使程序运行不受具体机器环境的限制。 若程序里写死了”3 号打印机”,一旦那台机器坏了或换了编号,程序就跑不起来;用逻辑名则由系统在运行时挑一台可用的。
③ 便于程序移植。 同一个程序拿到另一台配置完全不同的机器上,不需要修改任何一行代码。
逻辑设备表
实现映射靠的是逻辑设备表(LUT),表中每个表项包含三项内容:逻辑设备名、物理设备名、设备驱动程序的入口地址。
第三项值得注意:LUT 不只回答”这个逻辑名对应哪台设备”,还直接给出了这台设备的驱动程序在哪。这样一次查表就同时解决了”用哪台”和”怎么驱动”两个问题,后续调用不必再查。
LUT 有两种设置方式:
① 整个系统只设置一张 LUT。 所有进程的逻辑设备名都记在这一张表里,因此不同进程不允许使用相同的逻辑设备名。这一限制在多用户环境下很不方便。
② 为每个用户设置一张 LUT。 每个用户一张表,于是不同用户可以使用相同的逻辑设备名(都叫”打印机”,各自映射到不同的物理设备),互不冲突。
这组对照与单级目录与两级目录的演进完全同构:一张全局表导致不允许重名,按用户分表才解决重名问题。
设备的两种编号
绝对号是系统为每台设备统一编的号,作为区分硬件、识别设备的代号。它由系统使用,用户程序不用。
相对号(用户设备号)是用户在自己的程序中定义的设备号,属于逻辑层面。
两者的关系正是设备独立性的另一种表述:用户用相对号,系统靠 LUT 把它换算成绝对号。
疑问点:设备统一编号的名称
- 将系统中的每台设备按某种原则统一进行编号,这些编号作为区分硬件和识别设备的代号,该编号称为设备的( )。 A. 绝对号 B. 相对号 C. 类型号 D. 符号
答案 A。
题干的三个关键词各自指向”绝对号”:“每台设备”说明编号是一台一个而非一类一个(排除 C 类型号);“统一进行编号”说明这是系统层面的全局行为(排除 B 相对号,相对号是用户自己在程序里定义的);“区分硬件和识别设备”说明它面向的是物理设备。
记法:“绝对”对应物理、系统、全局唯一;“相对”对应逻辑、用户、程序内部。
边界
设备独立性不等于”所有设备用起来都一样”
这是对这个名字最常见的误读。
设备独立性说的是”用户程序不依赖于具体是哪一台设备”,而不是”块设备和字符设备可以用同一套操作”。磁盘能 seek、键盘不能,这个差别永远存在,见 5.1.4 的三类接口。
准确表述:独立的是”哪一台”,不是”哪一类”。
逻辑设备表与文件系统的目录
两者做的是同一件事——把名字翻译成实体——但翻译的终点不同:
目录把文件名翻译成 FCB / inode,终点是文件的元数据。
LUT 把逻辑设备名翻译成物理设备名 + 驱动程序入口,终点是设备与驱动它的代码。
共同点是两者都实现了”按名存取”,都因此获得了位置无关性。 这也是 UNIX 能把设备做成 /dev 下的特殊文件、让两套命名合二为一的基础。
设备独立性软件与设备驱动程序的分工
5.1.3 那条判据在这里再用一次:换一台设备还成不成立。
“把逻辑名映射成物理名”这件事,换任何一台设备做法都一样(都是查 LUT),因此属于设备独立性软件。
“用这个驱动程序去操作这台设备”则完全取决于是哪台设备,因此属于驱动程序。
LUT 中的”驱动程序入口地址”这一项,恰好是两层的交接点:设备独立性软件查到它,然后把控制权交给驱动程序。
对照速查
| 设备独立性的三个好处 | |
|---|---|
| ① | 方便用户编程(不必了解物理细节) |
| ② | 不受具体机器环境限制(设备坏了系统可另选) |
| ③ | 便于程序移植 |
| 逻辑设备表 LUT 表项 | 三项 |
|---|---|
| 逻辑设备名 | |
| 物理设备名 | |
| 设备驱动程序的入口地址 |
| LUT 设置方式 | 后果 |
|---|---|
| 整个系统一张 | 不同进程不允许使用相同的逻辑设备名 |
| 每个用户一张 | 不同用户可以使用相同的逻辑设备名 |
| 绝对号 | 相对号 | |
|---|---|---|
| 谁编的 | 系统统一编 | 用户在程序中定义 |
| 面向 | 物理设备 | 逻辑设备 |
| 谁使用 | 系统 | 用户程序 |
考点
- 设备独立性 = 用户用逻辑设备名,系统转换为物理设备名
- 三个好处:方便编程、不受机器环境限制、便于移植
- LUT 三项,注意第三项是驱动程序入口地址
- 一张 LUT 则不允许重名;每用户一张则允许重名
- 绝对号由系统统一编、面向物理设备;相对号是用户程序里的逻辑号
- 独立的是”哪一台”,不是”哪一类”
链接
- 🏠 返回总览:操作系统第 5 章:输入/输出管理总览
- ⬅️ 上一节:5.1.4 应用程序 I/O 接口
- ➡️ 下一节:5.2.2 高速缓存与缓冲区
- 🔗 六项职责的出处,见 5.1.3 I/O 软件层次结构
- 📖 名词库:第 5 章名词库