• 四川郎酒股份有限公司获第十二届人民企业社会责任奖年度环保奖 2019-05-13
  • 银保监会新规剑指大企业多头融资和过度融资 2019-05-12
  • 韩国再提4国联合申办世界杯 中国网友无视:我们自己来 2019-05-11
  • 中国人为什么一定要买房? 2019-05-11
  • 十九大精神进校园:风正扬帆当有为 勇做时代弄潮儿 2019-05-10
  • 粽叶飘香幸福邻里——廊坊市举办“我们的节日·端午”主题活动 2019-05-09
  • 太原设禁鸣路段 设备在测试中 2019-05-09
  • 拜耳医药保健有限公司获第十二届人民企业社会责任奖年度企业奖 2019-05-08
  • “港独”没出路!“梁天琦们”该醒醒了 2019-05-07
  • 陈卫平:中国文化内涵包含三方面 文化复兴表现在其中 2019-05-06
  • 人民日报客户端辟谣:“合成军装照”产品请放心使用 2019-05-05
  • 【十九大·理论新视野】为什么要“建设现代化经济体系”?   2019-05-04
  • 聚焦2017年乌鲁木齐市老城区改造提升工程 2019-05-04
  • 【专家谈】上合组织——构建区域命运共同体的有力实践者 2019-05-03
  • 【华商侃车NO.192】 亲!楼市火爆,别忘了买车位啊! 2019-05-03
    • / 22
    • 下载费用:30 金币  

    重庆时时彩后3做计划: 基于构件的操作系统动态设备驱动的方法.pdf

    关 键 词:
    基于 构件 操作系统 动态 设备 驱动 方法
      专利查询网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    摘要
    申请专利号:

    CN02159471.6

    申请日:

    2002.12.31

    公开号:

    CN1512335A

    公开日:

    2004.07.14

    当前法律状态:

    终止

    有效性:

    无权

    法律详情: 未缴年费专利权终止IPC(主分类):G06F 9/46申请日:20021231授权公告日:20060315终止日期:20151231|||授权|||专利申请权、专利权的转移(专利申请权的转移)变更项目:申请人变更前权利人:北京科泰世纪科技有限公司变更后权利人:上??铺┦兰涂萍加邢薰颈涓钅?地址变更前:100176北京市海淀区清华科技园创业大厦B座6层618号变更后:201203上海市浦东新区郭守敬路498号17号楼2层登记生效日:2005.5.27|||实质审查的生效|||公开
    IPC分类号: G06F9/46; G06F9/445 主分类号: G06F9/46; G06F9/445
    申请人: 北京科泰世纪科技有限公司;
    发明人: 陈榕; 苏翼鹏; 杜永文; 邓康
    地址: 100176北京市海淀区北京市清华科技园创业大厦B座6层618号
    优先权:
    专利代理机构: 北京同立钧成知识产权代理有限公司 代理人: 余丽;刘芳
    PDF完整版下载: PDF下载
    法律状态
    申请(专利)号:

    CN02159471.6

    授权公告号:

    |||1245685|||||||||

    法律状态公告日:

    2017.02.22|||2006.03.15|||2005.06.29|||2004.09.22|||2004.07.14

    法律状态类型:

    专利权的终止|||授权|||专利申请权、专利权的转移(专利申请权的转移)|||实质审查的生效|||公开

    摘要

    一种基于构件的操作系统动态设备驱动的方法,操作系统通过设备管理器管理所有的设备和驱动构件对象,客户程序通过设备管理器创建驱动构件对象,设备管理器与驱动构件对象通讯,驱动构件对象向客户程序提供应用接口。本发明将驱动程序进行构件化,使得只有在应用程序需要使用驱动程序时,驱动程序才会被装载并创建出驱动构件对象;一旦驱动构件对象使用完毕,驱动程序就会被删除并卸载出内存。

    权利要求书

    1: 一种基于构件的操作系统设备动态驱动的方法,其特征在于:操作 系统通过设备管理器管理所有的设备和驱动构件对象,构件客户程序通过设 备管理器创建驱动构件对象,设备管理器与驱动构件对象通讯,驱动构件对 象向构件客户程序提供应用接口。
    2: 根据权利要求1所述的基于构件的操作系统设备动态驱动的方法, 其特征在于:所述的设备管理器至少具有: 设备枚举器接口,用于提供系统中所有的设备信息及其状态信息; 设备管理接口,用于提供创建设备驱动构件对象的功能; 该设备枚举器接口和设备管理接口提供给上层应用; 设备信息接口,提供给驱动构件对象,用于驱动构件对象从中获得自己 的设备信息。
    3: 根据权利要求2所述的基于构件的操作系统设备动态驱动的方法, 其特征在于:所述的设备管理器通过系统的设备配置文件和/或设备枚举器 接口获取设备信息,并在驱动构件对象初始化时,将相应的设备信息以设备 信息接口参数的形式传递给驱动构件对象。
    4: 根据权利要求1或2或3所述的基于构件的操作系统设备动态驱动 的方法,其特征在于:所述的设备管理器收集、管理系统中的所有设备信息, 为每一个设备建立相应的设备节点,并使用设备标识和设备号唯一地标识系 统中的每一个设备。
    5: 根据权利要求1所述的基于构件的操作系统设备动态驱动的方法, 其特征在于:所述的驱动构件对象至少具有: 驱动接口,用于驱动构件对象与设备管理器交互; 应用接口,用于应用程序访问驱动构件对象。
    6: 根据权利要求5所述的基于构件的操作系统设备动态驱动的方法, 其特征在于:所述的驱动构件对象还具有:设备驱动中断服务例程接口,用 于提供设备驱动中断服务例程的入口。
    7: 根据权利要求1所述的基于构件的操作系统设备动态驱动的方法, 其特征在于:设备管理器创建驱动构件对象的具体过程为: 步骤11:使用COM规范规定的用于创建构件对象的标准功能创建驱动 构件对象; 步骤12:从驱动构件对象取设备标识并根据设备识别找到相应的设备 节点; 步骤13:如果没有找到该设备节点,则为驱动构件对象创建的新设备 节点; 步骤14:初始化设备的驱动构件对象; 步骤15:返回该驱动构件对象接口。
    8: 根据权利要求7所述的基于构件的操作系统设备动态驱动的方法, 其特征在于:在创建驱动构件对象之前还包括: 步骤10:检测对应的驱动构件对象是否已经被激活,如果没有激活则 执行步骤11; 步骤10A:如果已经激活,则进一步检测该驱动构件对象是否可以共享; 步骤10B:如果可以共享,则返回该驱动构件对象接口,否则告知创建 失败。
    9: 根据权利要求7所述的基于构件的操作系统设备动态驱动的方法, 其特征在于:在找到设备节点之后,还进一步检测该设备资源是否与已活动 的设备冲突,如果不冲突则执行步骤14;否则告知创建失败。
    10: 根据权利要求9所述的基于构件的操作系统设备动态驱动的方法, 其特征在于:所述的冲突检测为:在找到与驱动构件对象相应的设备信息后, 将当前新创建的驱动构件对象的设备信息与驱动构件对象已被创建的设备信 息进行比较,如果占用的设备资源相同或部分相同,则表明发生了冲突,否 则没有冲突。
    11: 根据权利要求7所述的基于构件的操作系统设备动态驱动的方法, 其特征在于:在初始化设备驱动构件对象之后,还进一步包括: 步骤14A:判断设备节点信息中是否有中断号;如果没有则执行步骤15; 步骤14B:进一步查询设备驱动中断服务例程接口,如果查询失败则告 知创建失败; 步骤14C:如果查询成功则安装中断服务程序;执行步骤15。
    12: 根据权利要求1所述的基于构件的操作系统设备动态驱动的方法, 其特征在于:该方法还进一步包括:当驱动构件对象的引用结束时,该驱动 构件对象将自己删除;具体的删除过程至少包括: 步骤21:当驱动构件对象引用结束后,将引用计数值减1 步骤22:判断该引用计数值是否为零;如果不是,则不删除该驱动构 件对象,并执行步骤26; 步骤23:询问该驱动构件对象是否能被立即删除,如果不能删除则等 待一预设的时间后重复执行本步骤; 步骤24:注销该驱动构件对象; 步骤25:删除该驱动构件对象; 步骤26:返回引用计数值。
    13: 根据权利要求1或12所述的基于构件的操作系统设备动态驱动的 方法,其特征在于:当驱动构件对象被设定为常驻状态时;对应的常驻驱动 构件对象在引用结束时不被删除;其具体的处理过程为: 当常驻驱动构件对象的引用计数值为零时,将该驱动构件对象设置为非 激活状态;当下次构件客户再次创建同样的驱动构件对象时,则直接返回已 经存在的驱动构件对象的接口,并将该驱动构件对象的状态设置为激活状 态。
    14: 一种基于构件的操作系统设备动态驱动实现的方法,其特征在于: 至少根据如下的方式定义驱动构件: 通过声明驱动构件类,使相应的驱动构件类至少包含设备驱动构件向设 备管理器提供的交互接口。
    15: 根据权利要求14所述的基于构件的操作系统设备动态驱动实现的 方法,其特征在于:所述的设备驱动构件向设备管理器提供的交互接口至少 包括: 获取设备标识的功能,用于返回驱动对象所驱动的设备的标识;使设备 管理器与相应的设备节点进行匹配; 驱动对象初始化功能,用于使驱动对象采用传入的设备信息接口参数取 得自己的设备信息; 共享功能,用于标识驱动对象是否支持多线程、多进程; 可立即卸载功能,用于在驱动对象将要被卸载时根据任务完成情况决定 是否立即退出。
    16: 根据权利要求14所述的基于构件的操作系统设备动态驱动实现的 方法,其特征在于:在声明驱动构件类时还进一步使该驱动构件类包含设备 驱动中断服务例程的入口;该入口至少由设备管理器自动安装,并在中断发 生时被调用。
    17: 根据权利要求14或16所述的基于构件的操作系统设备动态驱动实 现的方法,其特征在于:所述的驱动构件通过如下的方法实现:根据驱动构 件的定义,在编译时生成相应驱动构件的源程序框架,并由驱动开发者实现 所有相应的功能。
    18: 根据权利要求17所述的基于构件的操作系统设备动态驱动实现的 方法,其特征在于:所述的源程序框架中至少包括用户自定义的上层应用接 口功能和设备驱动构件向设备管理器提供的交互接口功能。
    19: 根据权利要求18所述的基于构件的操作系统设备动态驱动实现的 方法,其特征在于:所述的源程序框架中还进一步包括设备驱动中断服务例 程的入口。

    说明书


    基于构件的操作系统动态设备驱动的方法

        【技术领域】

        本发明涉及一种基于构件的操作系统动态加载、卸载设备驱动的方法,特别是指一种将驱动程序构件化,并只在应用程序需要使用驱动程序时,才装载驱动程序并创建出驱动构件对象;且在驱动构件对象使用完毕后,就将驱动程序删除并卸载,从而实现合理而有效地使用CPU和内存资源的设备驱动的方法,属于计算机技术领域。

        背景技术

        设备及其驱动的管理是任何操作系统都必须具备的功能。操作系统通过驱动程序来访问硬件设备,并通过驱动程序的隔离,使操作系统不需要了解具体硬件的访问细节。

        同时,设备驱动作为系统访问硬件的接口,其运行模式必须与操作系统的运行有机地结合起来。因而操作系统需要对设备驱动程序的运行进行必要的管理和协调,这些管理功能通常包括:

        1)搜集硬件系统中的设备信息。这些设备信息可通过硬件本身的功能检测得到,例如PCI总线上的设备;也可通过手工配置的方式,把设备信息添加到系统中。

        2)对系统中的设备进行标识,通过设备标识能够把设备与对应的驱动程序进行匹配。例如:在传统的Unix系统中,通过主设备号和次设备号来标识设备并找到其相应的驱动程序入口。

        3)在上层应用需要访问硬件设备时,操作系统负责激活相应的驱动程序,通过驱动程序为上层应用提供硬件访问接口。

        4)操作系统协调设备驱动程序地运行,管理共享硬件资源,检测及报告资源冲突,并为设备驱动提供设备信息服务。

        5)最后,操作系统还需要为设备驱动程序的开发提供必要的支持手段。

        传统的操作系统中的设备管理子系统在完成上述必要的功能服务的同时,通常也都存在以下三个的问题:

        第一,传统的操作系统,都没有将驱动程序构件化。驱动程序总是与操作系统绑定在一起,操作系统启动时加载所有的驱动程序,而不管用户是否使用到这个驱动程序;这样既耗费CPU资源,也耗费内存资源。

        第二,驱动程序运行在操作系统核内,而传统操作系统中在核内能进行的操作是受限制的。例如:不能访问文件系统,不能访问标准输入、输出设备,不能使用一些在用户态可以使用的许多标准函数及系统调用等。这些限制给驱动程序的开发带来了极大的不便,驱动程序员需要熟悉一大套与应用开发不一样的开发接口及编程约定,编写驱动程序的门槛由此变得很高。

        第三,由于受到跨地址空间的约束,传统操作系统中的驱动程序上层接口大多都是以文件接口为基础设计的。驱动程序的开发者无法根据设备特性定义自己的接口方法。

        【发明内容】

        本发明的主要目的在于提供一种基于构件的操作系统动态加载、卸载设备驱动的方法,除实现传统操作系统的所完成的常规设备及驱动管理功能外,还将驱动程序进行构件化,使得只有在应用程序需要使用驱动程序时,驱动程序才会被装载并创建出驱动构件对象;而一旦驱动构件对象使用完毕,驱动程序就会被删除并卸载出内存;合理而有效地使用CPU和内存资源。

        本发明的目的是这样实现的:

        一种基于构件的操作系统设备动态驱动的方法,操作系统通过设备管理器管理所有的设备和驱动构件对象,构件客户程序通过设备管理器创建驱动构件对象,设备管理器与驱动构件对象通讯,驱动构件对象向构件客户程序提供应用接口。

        上述的设备管理器至少具有:

        设备枚举器接口,用于提供系统中所有的设备信息及其状态信息;

        设备管理接口,用于提供创建设备驱动构件对象的功能;

        该设备枚举器接口和设备管理接口提供给上层应用;

        设备信息接口,提供给驱动构件对象,用于驱动构件对象从中获得自己的设备信息。

        上述的设备管理器通过系统的设备配置文件和/或设备枚举器接口获取设备信息,并在驱动构件对象初始化时,将相应的设备信息以设备信息接口参数的形式传递给驱动构件对象。

        上述的设备管理器收集、管理系统中的所有设备信息,为每一个设备建立相应的设备节点,并使用设备标识和设备号唯一地标识系统中的每一个设备。

        上述的驱动构件对象至少具有:

        驱动接口,用于驱动构件对象与设备管理器交互;

        应用接口,用于应用程序访问驱动构件对象。

        上述的驱动构件对象还具有:设备驱动中断服务例程接口,用于提供设备驱动中断服务例程的入口。

        设备管理器创建驱动构件对象的具体过程为:

        步骤11:使用COM规范规定的用于创建构件对象的标准功能创建驱动构件对象;

        步骤12:从驱动构件对象取设备标识并根据设备识别找到相应的设备节点;

        步骤13:如果没有找到该设备节点,则为驱动构件对象创建的新设备节点;

        步骤14:初始化设备的驱动构件对象;

        步骤15:返回该驱动构件对象接口。

        在创建驱动构件对象的步骤之前还进一步包括:

        步骤10:检测对应的驱动构件对象是否已经被激活,如果没有激活则执行步骤11;

        步骤10A:如果已经激活,则进一步检测该驱动构件对象是否可以共享;

        步骤10B:如果可以共享,则返回该驱动构件对象接口,否则告知创建失败。

        在找到设备节点之后,还进一步检测该设备资源是否与已活动的设备冲突,如果不冲突则执行步骤14;否则告知创建失败。

        上述的冲突检测为:在找到与驱动构件对象相应的设备信息后,将当前新创建的驱动构件对象的设备信息与驱动构件对象已被创建的设备信息进行比较,如果占用的设备资源相同或部分相同,则表明发生了冲突,否则则没有冲突。

        在初始化设备驱动构件对象之后,还进一步包括:

        步骤14A:判断设备节点信息中是否有中断号;如果没有则执行步骤15;

        步骤14B:进一步查询设备驱动中断服务例程接口,如果查询失败则告知创建失败;

        步骤14C:如果查询成功则安装中断服务程序;执行步骤15。

        本发明的方法还进一步包括:当驱动构件对象的引用结束时,该驱动构件对象将自己删除;具体的删除过程至少包括:

        步骤21:当驱动构件对象引用结束后,将引用计数值减1

        步骤22:判断该引用计数值是否为零;如果不是,则不删除该驱动构件对象,并执行步骤26;

        步骤23:询问该驱动构件对象是否能被立即删除,如果不能删除则等待一预设的时间后重复执行本步骤;

        步骤24:注销该驱动构件对象;

        步骤25:删除该驱动构件对象;

        步骤26:返回引用计数值。

        当驱动构件对象被设定为常驻状态时;对应的常驻驱动构件对象在引用结束时不被删除;其具体的处理过程为:

        当常驻驱动构件对象的引用计数值为零时,将该驱动构件对象设置为非激活状态;当下次构件客户再次创建同样的驱动构件对象时,则直接返回已经存在的驱动构件对象的接口,并将该驱动构件对象的状态设置为激活状态。

        一种基于构件的操作系统设备动态驱动实现的方法,至少根据如下的方式定义驱动构件:

        通过声明驱动构件类,使相应的驱动构件类至少包含设备驱动构件向设备管理器提供的交互接口。

        所述的设备驱动构件向设备管理器提供的交互接口至少包括:

        获取设备标识的功能,用于返回驱动对象所驱动的设备的标识;使设备管理器与相应的设备节点进行匹配;

        驱动对象初始化功能,用于使驱动对象采用传入的设备信息接口参数取得自己的设备信息;

        共享功能,用于标识驱动对象是否支持多线程、多进程;

        可立即卸载功能,用于在驱动对象将要被卸载时根据任务完成情况决定是否立即退出。

        在声明驱动构件类时还进一步使该驱动构件类包含设备驱动中断服务例程的入口;该入口至少由设备管理器自动安装,并在中断发生时被调用。

        所述的驱动构件通过如下的方法实现:根据驱动构件的定义,在编译时生成相应驱动构件的源程序框架,并由驱动开发者实现所有相应的功能。

        所述的源程序框架中至少包括用户自定义的上层应用接口功能和设备驱动构件向设备管理器提供的交互接口功能。所述的源程序框架中还包括有设备驱动中断服务例程的入口。

        本发明除实现了传统操作系统的所完成的常规设备及驱动管理功能外,还将驱动程序进行构件化,使得只有在应用程序需要使用驱动程序时,驱动程序才会被装载并创建出驱动构件对象;而一旦驱动构件对象使用完毕,驱动程序就会被删除并卸载出内存;从而合理而有效地使用了CPU和内存资源;与此同时,运行在操作系统核内的驱动程序不再受操作系统内核的限制,开发驱动构件和开发普通的应用构件在可使用的系统调用及API上没什么区别,因此降低了驱动程序的开发门槛;由于驱动构件不受跨地址空间的约束,可以自定义用户接口,使得驱动程序的开发者可以根据设备特性定义自己的接口方法。

        【附图说明】

        图1为本发明总体结构关系原理示意图;

        图2为本发明创建驱动构件对象实施例的流程图;

        图3为本发明删除驱动构件对象实施例的流程图。

        【具体实施方式】

        以下结合附图和具体的实施例对本发明作进一步的详细说明:

        本发明使操作系统可以通过设备管理器(DeviceManager),来管理操作系统中所有的设备与相应的驱动构件对象。该操作系统的设备驱动模型以构件化的设备管理器为核心,并基于如下的原则实现:

        首先,由设备管理器收集、管理操作系统中的所有的设备信息,并且为每一个设备建立一个设备节点,并使用设备标识与设备号来唯一标识这些设备。

        然后,把驱动构件对象作为设备的一个属性,当且仅当相应设备节点的驱动构件对象被创建出来以后后,该设备节点才成为被激活了的设备或活动设备(Actived?Device)。

        再由设备管理器创建驱动构件对象,并使用设备标识、设备号来匹配设备节点与驱动构件对象。

        上述的驱动构件所实现的接口分为两大类:一是系统接口,它是系统定义的标准接口,由操作系统调用;二是上层用户接口,由驱动构件的开发者定义,并由驱动构件对象的客户程序调用。

        设备管理器管理驱动构件对象的创建及消亡过程,但不参与驱动构件对象的使用过程。

        参见图1,其为构件化的设备管理器、驱动构件对象和构件客户程序之间实现设备驱动的关系示意。其中,驱动构件对象实现了两个标准系统接口:设备驱动接口IDriver及设备驱动中断服务例程接口IDriverISR(可选),这两个接口对上层构件客户程序是不可见的,只能由设备管理器使用,另外,驱动构件对象向客户程序提供应用接口A,可使客户程序调用接口方法。

        设备管理器提供设备信息接口IDeviceInfo给驱动构件对象,驱动构件对象可以从该设备信息接口中得到自己的设备信息。

        此外,设备管理器还向上层应用提供设备枚举器接口IDeviceEnumerator和设备管理接口IDeviceManager。设备枚举器接口IDeviceEnumerator用于列出系统中所有的设备信息及其状态;构件客户程序使用设备管理接口IDeviceManager中的建立驱动功能(CreateDriver)来创建设备驱动构件对象。

        要让驱动构件对象能够运行在正确的设备上,操作系统中的所有设备需要有全局性的唯一标识。本发明使用设备识别符号(DeviceId)和设备号(DeviceNo)来标识设备。

        其中,设备识别符号为字符串形式,用它可以将不同种类的设备区分开;例如:串行口的设备识别符号是“COM”,IDE控制器的设备识别符号是“IDE”。设备号为数字形式,用以区分系统中的多个相同设备,通常从数值“1”开始编号。例如:第一个串行口的设备号为1,第二个串行口的设备号为2,以此类推。

        与普通构件不同的是:驱动构件类的属性栏里必须用相应的关键字,例如“driver”,声明这是一个驱动构件类。使用关键字“driver”,驱动构件对象包含了两个隐含的标准系统接口:设备驱动接口IDriver及设备驱动中断服务例程接口IDriverISR,这意味着驱动构件的编写者必须实现这两个接口。

        设备驱动接口IDriver是设备驱动构件向设备管理器提供的交互接口,设备驱动中断服务例程接口IDriverISR是设备驱动中断服务例程的入口。

        对不需要中断服务程序的设备驱动而言,可以使用关键字“noisr”声明驱动构件类,这样,编译器在编译设备驱动构件类时就不会把设备驱动中断服务例程接口IDriverISR包含到构件类之中。

        设备驱动中断服务例程接口IDriverISR中的中断服务例程功能被作为驱动的中断服务程序入口,由设备管理器自动安装,并在中断发生时被调用。

        使用驱动构件的客户端程序可以使用驱动构件类智能指针来实例化一个驱动构件对象。在此之前,可以先指定设备号(缺省值为1)。

        参见图2,设备管理器创建驱动构件对象的过程包括:

        步骤10:检测对应的驱动构件对象是否已经被激活,如果没有激活则执行步骤11;

        步骤10A:如果已经激活,则进一步检测该驱动构件对象是否可以共享;

        步骤10B:如果可以共享,则返回该驱动构件对象接口,否则告知创建失败;

        步骤11:使用COM规范规定的用于创建构件对象的标准功能创建驱动构件对象;

        步骤12:读取设备标识并根据设备识别找到相应的设备节点;在找到设备节点之后,还进一步检测该设备资源是否与已活动的设备冲突,如果不冲突则执行步骤14;否则告知创建失败。

        步骤13:如果没有找到该设备节点,则为驱动构件对象创建的新设备节点:

        步骤14:初始化设备的驱动构件对象;

        步骤14A:判断设备节点信息中是否有中断号;如果没有则执行步骤15;

        步骤14B:进一步查询设备驱动中断服务例程接口,如果查询失败则告知创建失败;

        步骤14C:如果查询成功则安装中断服务程序;

        步骤15:返回该驱动构件对象接口。

        与普通构件一样,一旦构件客户不再使用驱动构件对象,并且系统中没有其它引用到驱动构件对象的地方,即驱动构件对象的引用计数变为零时,驱动构件对象把自己从内存中删除。所不同的是,驱动构件对象在删除自己之前,首先会确定该驱动构件对象能否立即被删除,最后并且通知设备管理器,以便设备管理器能够正确地维护和管理设备状态。

        参见图3,驱动构件对象的删除包括:

        步骤21:当驱动构件对象引用结束后,将引用计数值减1

        步骤22:判断该引用计数值是否为零;如果不是,则不删除该驱动构件对象,并执行步骤26;

        步骤23:询问该驱动构件对象是否能被立即删除,如果不能删除则等待一预设的时间后重复执行本步骤;

        步骤24:注销该驱动构件对象;

        步骤25:删除该驱动构件对象;

        步骤26:返回引用计数值。

        在创建驱动构件对象的过程中,设备管理器在找到与驱动构件对象相应的设备信息后,首先会检查该设备占用的资源是否与其它设备冲突。检测的内容包括中断号、I/O地址、内存映像地址以及直接存储器存取(DMA)通道号等。

        传统操作系统,如Unix、Windows等的资源冲突检测是静态的,是把设备资源与系统中其它所有的设备资源进行比较,以确定是否冲突。由于本发明操作系统的驱动构件对象可以动态装载和卸载,因此设备管理器确定资源是否冲突的方法也是动态的,即:该方法是把当前的新创建的驱动构件对象的设备信息与其它活动设备(驱动构件对象已经被创建的设备)信息进行比较。

        这种动态资源冲突检测的优点在于:一些系统硬件资源可以复用。只要两个设备的驱动构件不会同时启用,就可以使用相同的硬件资源。例如:系统上声卡使用直接存储器存取(DMA)通道1,光驱也使用DMA通道1,但只要不同时使用声卡和光驱,就不会出现资源冲突。

        在设备管理器调用设备驱动接口IDriver初始化驱动构件对象时,会传入一个设备信息接口参数。驱动构件对象通过该设备信息接口取得自己的设备相关的信息。

        驱动构件开发者比较重要的是设备所占用的硬件资源,如I/O地址、内存地址、DMA通道号等。由于中断服务程序是由设备管理器自动安装,所以驱动构件的实现通常不需要关心中断号。

        对有些设备,如硬盘、网卡等,由于它们经常使用,不希望其驱动构件对象频繁地被创建和删除,从而影响操作系统的效率。因此需要一种能够支持常驻型驱动程序开发的机制。本发明的解决办法是:

        在定义驱动构件时,声明驱动构件为常驻状态,一旦驱动构件被声明为常驻,该常驻驱动构件对象不会在引用计数变为零时真正删除掉该驱动构件对象。实际上,在常驻驱动构件对象的引用计数变为零时,该驱动构件对象通知设备管理器,设备管理器则将这个驱动构件对象置为非激活状态;在下次构件客户创建同样的驱动构件对象时,设备管理器直接将已经存在的驱动构件对象的接口返回,并将驱动构件对象的状态设置为激活状态。

        本发明中,设备管理器通过两种渠道收集设备信息:一是从操作系统标准的设备配置文件读入设备信息;二是通过设备枚举器驱动获取设备信息。得到的设备信息以链表形式存放以便于检索。并在调用驱动构件对象的初始化功能时,将相应的设备信息以设备信息接口参数的形式传递给驱动构件对象。

        如上所述,设备管理器通过设备枚举器驱动获取设备信息时,设备枚举器接口列出设备枚举器中的所有设备信息,然后通过如下的功能检测到相应的设备信息:1、取当前设备节点的信息;2、移至下一个设备节点;3、恢复到初始状态。

        典型的设备枚举器驱动是各种总线及控制器驱动。例如:周边元件扩展接口(PCI)总线驱动,通过其枚举器接口可以得到PCI总线上自动检测到的所有设备信息。设备管理器在创建新的设备驱动构件对象时,总会检查该驱动构件对象是否支持设备枚举器接口,如果支持,则通过该接口取出枚举器里的所有设备信息。

        在本发明的实施例中,驱动构件通过如下的方式实现:

        定义一个驱动构件类,该驱动构件类与普通构件不同的是,驱动构件类的必须用相应的关键字(例如:driver)来声明该构件类为一驱动构件类。事实上,该声明用于使驱动构件类包含两个隐含的标准系统接口:设备驱动构件向设备管理器提供的交互接口和设备驱动中断服务例程的入口。

        对有些不需要中断服务程序的设备驱动而言,可以使用相应的关键字(例如:noisr)声明驱动构件类不需要中断服务程序,这样,在编译该设备驱动构件类时就不会将设备驱动中断服务例程的入口包含到构件类之中。

        在上述定义的驱动构件类中至少应包括获取设备标识、初始化、对象共享以及可立即卸载等功能;其中:获取设备标识功能用于返回驱动对象所驱动的设备的标识,设备管理器用它与相应的设备节点进行匹配;初始化是驱动对象被创建后调用的第一个功能,用于驱动对象的初始化;驱动对象可通过传入的设备信息接口参数取得自己的设备信息;共享功能用于标识驱动对象是否支持多线程或多进程;可立即卸载功能在驱动对象将要卸载时被调用,这实际上是给驱动对象一个选择机会,以根据任务完成情况决定是否立即退出。

        设备驱动中断服务例程的入口中包含有中断服务例程功能,其被作为驱动的中断服务程序入口,由设备管理器自动安装,并在中断发生时被调用。

        在定义了驱动构件后,可以通过运行特定的编译工具生成驱动构件的源程序框架。生成的源程序框架中,除了包括用户自定义的上层应用接口功能外,还包括上述的设备驱动构件向设备管理器提供的交互接口和设备驱动中断服务例程的入口(如果用户没有指定“noisr”属性的话)接口中的所有功能。驱动开发者可按指定的语义实现所有这些功能。

        设备管理器调用上述的初始化功能初始化驱动对象时,会传入一个设备信息(IdeviceInfo)接口参数。驱动对象通过IDeviceInfo可以取得自己的设备相关信息。其中对驱动构件开发者比较重要的是:设备所占用的硬件资源,如I/O地址、内存地址、DMA通道号等。由于中断服务程序可由设备管理器自动安装,所以驱动构件的实现通常不需要关心中断号。

        最后应说明的是:以上实施例仅用以说明本发明而并非限制本发明所描述的技术方案;因此,尽管本说明书参照上述的各个实施例对本发明已进行了详细的说明,但是,本领域的普通技术人员应当理解,仍然可以对本发明进行修改或者等同替换;而一切不脱离本发明的精神和范围的技术方案及其改进,其均应涵盖在本发明的权利要求范围当中。

    关于本文
    本文标题:基于构件的操作系统动态设备驱动的方法.pdf
    链接地址://www.4mum.com.cn/p-6198262.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    [email protected] 2017-2018 www.4mum.com.cn网站版权所有
    经营许可证编号:粤ICP备17046363号-1 
     


    收起
    展开
  • 四川郎酒股份有限公司获第十二届人民企业社会责任奖年度环保奖 2019-05-13
  • 银保监会新规剑指大企业多头融资和过度融资 2019-05-12
  • 韩国再提4国联合申办世界杯 中国网友无视:我们自己来 2019-05-11
  • 中国人为什么一定要买房? 2019-05-11
  • 十九大精神进校园:风正扬帆当有为 勇做时代弄潮儿 2019-05-10
  • 粽叶飘香幸福邻里——廊坊市举办“我们的节日·端午”主题活动 2019-05-09
  • 太原设禁鸣路段 设备在测试中 2019-05-09
  • 拜耳医药保健有限公司获第十二届人民企业社会责任奖年度企业奖 2019-05-08
  • “港独”没出路!“梁天琦们”该醒醒了 2019-05-07
  • 陈卫平:中国文化内涵包含三方面 文化复兴表现在其中 2019-05-06
  • 人民日报客户端辟谣:“合成军装照”产品请放心使用 2019-05-05
  • 【十九大·理论新视野】为什么要“建设现代化经济体系”?   2019-05-04
  • 聚焦2017年乌鲁木齐市老城区改造提升工程 2019-05-04
  • 【专家谈】上合组织——构建区域命运共同体的有力实践者 2019-05-03
  • 【华商侃车NO.192】 亲!楼市火爆,别忘了买车位啊! 2019-05-03
  • 河内5分彩彩全天计划软件 付费彩票计划软件大全 腾讯体育女篮直播 棋牌龙虎大战技巧?原因是这个 重庆时时开奖分析软件 极速pk拾有什么套路吗 7码阶梯式超级倍投法 秒速时时开奖平台 七乐彩基走势图500期 赛车双人游戏大全 江苏时时 3分赛车彩票稳赚技巧 二期时时计划稳定版 到底有没有北京时时开奖结果 5分快3走势回血计划 技巧规律 幸运飞艇6码买法代打屁股