什么是设备驱动程序?
设备驱动程序,顾名思义,就是直接驱动I/O设备进行输入或输出操作的软件。它属于与设备控制器直接联系的I/O软件部分。它与具体的I/O设备直接相关,并针对每个特定的I/O设备进行优化。设备控制程序通常由设备制造商提供,但归属于操作系统内核。正因为这一属性,设备驱动程序是操作系统安全的一个巨大隐患。
由于需要直接驱动设备的运行,设备驱动程序必须清楚设备的所有细节。例如,磁盘驱动程序必须清楚什么是扇面、磁道、磁柱、磁头、磁臂、电机和电机驱动等信息;鼠标驱动程序需要具备辨认按下哪个键的能力。
设备驱动程序的任务?
设备驱动程序需要完成的任务包括:
从上层接收抽象的读写请求。
确保读写操作完成。
初始化设备,开关设备。
对设备的功能进行管理。
UNIX和windows设备驱动程序有何不同?
在UNIX系统下,设备驱动程序与整个操作系统编在一个二进制文件里。如果要增加新的设备驱动程序或者修改现有的设备驱动程序,则需要重新编译操作系统
。UNIX的这种做法主要是考虑了安全的因素。由于用户或其他人无法动态地加载设备驱动程序,因此操作系统安全性较高。不过,这种不能动态加载的限制让人感觉十分不便,因此在最新的UNIX版本如Solaris 10里,设备驱动程序可以动态加载。
而Windows操作系统从一开始(NT开始)就在运行设备驱动程序时进行动态加载。而这也是Windows不如UNIX安全的一个原因。
设备驱动程序如何检查设备?
在收到一个I/O请求后,设备驱动程序做的第一件事情是检查输入参数是否合法
。如果不合法,则返回错误。如果参数正常,则将I/O请求的抽象表示转换为设备能够认识的具体表示,如将线性数据块号转换为磁头、磁道、扇面等。
然后,设备驱动程序需要检查设备状态
以确认其处于闲置状态。如果设备繁忙,则将I/O请求送入该设备的等待队列里面以待处理。如果设备没有开机,则驱动设备进行并启动电机。
在做完上述各项工作后,剩下的就是真正的I/O操作了。设备驱动程序通过发出一系列的I/O命令到设备控制寄存器里面来进行真正的数据传输工作。如果需要,设备驱动程序需要阻塞并等待中断。而每次从中断醒过来,则需要检查I/O是否正确完成,再将数据传输到上面调用设备驱动程序的应用。
在所有数据传输完毕后,设备驱动程序将返回到调用者那里。
总结
- 设备驱动程序由厂商开发
- 设备驱动程序对设备的功能进行管理