找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6397|回复: 0
打印 上一主题 下一主题
收起左侧

从驱动编写角度看Windows 系统的层次架构

[复制链接]
跳转到指定楼层
楼主
ID:90014 发表于 2015-9-13 16:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

Windows 的基本驱动架构
这里是一个基本的Windows 系统的架构,和一般对操作系统的架构的介绍稍微有点不同的是,对于系统底层做了分解。在硬件抽象层(HAL)上的系统核心处,标示了几个核心构件,如文件系统驱动,可输出的驱动例程及核心态的驱动(KMD)。而用户态的驱动程序则划分在应用程序层面。并不是所有的驱动程序都属于系统核心层,这样就可以降低核心崩溃的风险。

用户态驱动和普通的应用程序一样,以普通权限运行,只能通过Windows API进入与底层硬件打交道。而核心态的驱动则是操作系统构成的一部分,系统对其数据不做完整性检查,则可能会导致系统崩溃。并且处于核心态的驱动程序难于调试。
以Xp系统中的打印机驱动程序为例,分为用户界面部分和设备渲染部分。用户界面部分如选择纸张大小,设置是否双面打印等,都是调用一般的Windows API,和普通应用程序一样工作。而对于实际打印机控制的设备渲染部分,则处于核心态工作。用户界面部分通过系统调用的形式对其进行控制(DeviceIoControl?),从而完成打印工作。
注:对于Vista以后的系统,渲染部分也在用户态工作。

驱动的层次结构:



  • 应用程序处于驱动栈的顶层,处理用户和其他应用程序的请求,并且调用Win32 API或者用户态驱动客户端所暴露的例程。
  • 用户态客户端驱动处理来自应用程序或Win32API的请求。对于需要核心态才能完成的服务,则调用Win32API,通过核心态驱动或支持例程完成该请求。这个驱动通常通过DLL方式实现。打印机驱动通常由很多操作是需要用户态工作,所以会工作于用户态。而存储设备,网络和输入设备则不需要这样。
  • 核心态的客户端驱动完成的工作与用户态类似,只是完成无法在用户态完成的操作。
  • 设备类和迷你类驱动对提供设备支持的批量传输。类驱动提供特定类的设备中系统所需的并且与硬件独立的支持。一般也是有MS提供。迷你驱动提供特定类中特定设备的操作。如电池类驱动提供了所有电池的通用操作,而一个UPS设备的迷你类驱动则处理这个设备的特殊操作。一般由硬件供应商提供。
  • 对应于端口驱动 (对于一些设备,是宿主控制器或宿主适配器驱动) 支持下层端口,集线器,或所连接的物理设备的I/O操作。是否具有此类驱动,取决于设备类型以及它连接的总线类型。 存储设备的全部驱动栈都有一个端口驱动。例如,SCSI端口驱动提供SCSI总线上的I/O。
    对于 USB 设备,集线器和宿主控制器的驱动共同完成端口驱动工作。它们处理USB设备以及总线自己的I/O操作。
    相应的微端口驱动处理与设备相关的操作。对于大部分端口,端口驱动由操作系统提供,而微端口驱动则由设备供应商提供。
  • 最底部是硬件总线驱动。是操作系统的基本部分,由微软提供,一般不需修改。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表