机制和策略与linux驱动的角色

3 篇文章 0 订阅
3 篇文章 0 订阅

本文节选自 Linux设备驱动程序 (中文版第三版) 1.1

作为一个程序员, 你能够对你的驱动作出你自己的选择, 并且在所需的编程时间和结果的
灵活性之间, 选择一个可接受的平衡. 尽管说一个驱动是”灵活”的, 听起来有些奇怪, 但
是我们喜欢这个字眼, 因为它强调了一个驱动程序的角色是提供机制, 而不是策略.
机制和策略的区分是其中一个在 Unix 设计背后的最好观念. 大部分的编程问题其实可以
划分为 2 部分:” 提供什么能力”(机制) 和 “如何使用这些能力”(策略). 如果这两方面
由程序的不同部分来表达, 或者甚至由不同的程序共同表达, 软件包是非常容易开发和适
应特殊的需求.

例如, 图形显示的 Unix 管理划分为 X 服务器, 它理解硬件以及提供了统一的接口给用
户程序, 还有窗口和会话管理器, 它实现了一个特别的策略, 而对硬件一无所知. 人们可
以在不同的硬件上使用相同的窗口管理器, 而且不同的用户可以在同一台工作站上运行不
同的配置. 甚至完全不同的桌面环境, 例如 KDE 和 GNOME, 可以在同一系统中共存. 另
一个例子是 TCP/IP 网络的分层结构: 操作系统提供 socket 抽象层, 它对要传送的数据
而言不实现策略, 而不同的服务器负责各种服务( 以及它们的相关策略). 而且, 一个服
务器, 例如 ftpd 提供文件传输机制, 同时用户可以使用任何他们喜欢的客户端; 无论命
令行还是图形客户端都存在, 并且任何人都能编写一个新的用户接口来传输文件.

在驱动相关的地方, 机制和策略之间的同样的区分都适用. 软驱驱动是不含策略的–它的
角色仅仅是将磁盘表现为一个数据块的连续阵列. 系统的更高级部分提供了策略, 例如谁
可以存取软驱驱动, 这个软驱是直接存取还是要通过一个文件系统, 以及用户是否可以加
载文件系统到这个软驱. 因为不同的环境常常需要不同的使用硬件的方式, 尽可能对策略
透明是非常重要的.

在编写驱动时, 程序员应当特别注意这个基础的概念: 编写内核代码来存取硬件, 但是不
能强加特别的策略给用户, 因为不同的用户有不同的需求. 驱动应当做到使硬件可用, 将
所有关于如何使用硬件的事情留给应用程序. 一个驱动, 这样, 就是灵活的, 如果它提供
了对硬件能力的存取, 没有增加约束. 然而, 有时必须作出一些策略的决定. 例如, 一个
数字 I/O 驱动也许只提供对硬件的字符存取, 以便避免额外的代码处理单个位.

你也可以从不同的角度看你的驱动: 它是一个存在于应用程序和实际设备间的软件层. 驱
动的这种特权的角色允许驱动程序员严密地选择设备应该如何表现: 不同的驱动可以提供
不同的能力, 甚至是同一个设备. 实际的驱动设计应当是在许多不同考虑中的平衡. 例如,
一个单个设备可能由不同的程序并发使用, 驱动程序员有完全的自由来决定如何处理并发
性. 你能在设备上实现内存映射而不依赖它的硬件能力, 或者你能提供一个用户库来帮助
应用程序员在可用的原语之上实现新策略, 等等. 一个主要的考虑是在展现给用户尽可能
多的选项, 和你不得不花费的编写驱动的时间之间做出平衡, 还有需要保持事情简单以避
免错误潜入.

对策略透明的驱动有一些典型的特征. 这些包括支持同步和异步操作, 可以多次打开的能
力, 利用硬件全部能力, 没有软件层来”简化事情”或者提供策略相关的操作. 这样的驱动
不但对他们的最终用户好用, 而且证明也是易写易维护的. 成为策略透明的实际是一个共
同的目标, 对软件设计者来说.

许多设备驱动, 确实, 是与用户程序一起发行的, 以便帮助配置和存取目标设备. 这些程
序包括简单的工具到完全的图形应用. 例子包括 tunelp 程序, 它调整并口打印机驱动如
何操作, 还有图形的 cardctl 工具, 它是 PCMCIA 驱动包的一部分. 经常会提供一个客
户库, 它提供了不需要驱动自身实现的功能.

本书的范围是内核, 因此我们尽力不涉及策略问题, 应用程序, 以及支持库. 有时我们谈
论不同的策略以及如何支持他们, 但是我们不会进入太多有关使用设备的程序的细节, 或
者是他们强加的策略的细节. 但是, 你应当理解, 用户程序是一个软件包的构成部分, 并
且就算是对策略透明的软件包在发行时也会带有配置文件, 来对底层的机制应用缺省的动
作.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值