CN1971509A - 构件化软件系统基于设备接口实现二进制兼容运行的方法 - Google Patents
构件化软件系统基于设备接口实现二进制兼容运行的方法 Download PDFInfo
- Publication number
- CN1971509A CN1971509A CN 200610119536 CN200610119536A CN1971509A CN 1971509 A CN1971509 A CN 1971509A CN 200610119536 CN200610119536 CN 200610119536 CN 200610119536 A CN200610119536 A CN 200610119536A CN 1971509 A CN1971509 A CN 1971509A
- Authority
- CN
- China
- Prior art keywords
- interface
- device drives
- function
- equipment
- pointer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Stored Programmes (AREA)
Abstract
本发明涉及一种构件化软件系统基于设备接口实现二进制兼容运行的方法,包括根据系统中的设备创建对应的具有标准接口且包含设备属性信息的的设备驱动构件、应用程序在运行过程中获取相应设备驱动构件的接口指针进行功能调用、系统根据应用程序的需要动态替换设备驱动构件、应用程序重复上述的功能调用。采用该种构件化软件系统基于设备接口实现二进制兼容运行的方法,有利于系统的维护,充分利用了面向对象方法的优势,符合软件工程思想,而且设备驱动采用抽象的接口,因而在运行过程中可以利用动态绑定技术进行动态替换,从而便于功能的扩展,并增加了系统的适应性,为计算机跨平台兼容运行技术的进一步发展奠定了坚实的基础。
Description
技术领域
本发明涉及计算机软件技术领域,特别涉及计算机构件化软件系统领域,具体是指一种构件化软件系统基于设备接口实现二进制兼容运行的方法。
背景技术
现今的许多程序跨平台实际上是通过源代码在不同平台上面重新编译实现的,针对不同平台提供了不同的版本而已。按这种方法编写跨平台的程序,每增加一个平台就需要重新调整编译代码,工作量较大,且用户需要在多个平台上用它,就必须保留每个平台不同的拷贝,因为不同平台,它的二进制代码是不一样的。
现在的JAVA技术和微软的.NET技术都能一定程度让程序跨平台运行。不同操作系统装上自己的JAVA虚拟机,配以合适的类库,理论上都能跑完全相同的一个JAVA程序。.NET也是类似的原理。不过,JAVA和.NET有一个特点就是它们采用的是中间代码,不是直接能够在机器上面执行的二进制指令。中间代码让程序跨平台容易,不过也带来了效率的损失。因为虚拟机需要把中间代码翻译成机器指令,这个过程是比较耗费时间的。
如果程序是由能够直接被CPU执行的机器指令所组成的,则可以避开JAVA那种指令翻译过程,效率肯定是最高的。二进制兼容的目标,就是保证程序采用机器指令的前提下,做到程序的跨平台运行。显然,简单的二进制兼容不能做到跨CPU运行,毕竟不同CPU的指令集是不一样的。但是只要是采用了同一种CPU,指令集是一样的,加以各种辅助手段来保证,就可以做到程序的跨操作系统平台特性。
二进制兼容运行的基本含义就是不需要对应用程序进行任何修改,就可以直接让它运行在不同的操作系统平台上面。由于二进制兼容技术的众多优点,因此它被许多软件厂商所吸纳加以利用。传统的二进制兼容技术,是针对应用程序来进行的,它通过实现一套跨平台的基于C函数形式的API,其原理如下:
应用程序要实现自己的功能,需要调用操作系统提供的各类系统API,包括系统内核提供的最基本的功能,以及调用操纵各种设备以及系统组件的函数,等等。比如打开文件,向声卡传递音频数据,创建一个信号量,都是诸如此类的操作。这些API都是以C函数的形式提供的。只要在不同平台上面,能完全提供应用程序所需要的API,且保证这些API的名字、参数、返回值、功能特性一致,就可以让应用程序跑在不同平台上面。因为应用程序与操作系统的交互就是靠这些API,既然它们都实现了,且功能一致,就相当于屏蔽了操作系统对该程序的差异性,应用程序运行的结果也就是一致的,这样做到了程序的跨平台运行。
基于C函数形形式的API,调用起来比较方便,不过,也带来了不少弊端,比如扩展起来不容易,没有利用现代的面向对象的方法,不利于软件工厂化的发展。且很多API都是在较高层次提供的,只要不操作具体的硬件,那些纯软件的系统模块,比如C运行时库函数(CRUN-TIME Libraries,简称CRT库),图形系统等等,也是可以直接做到跨平台的,不用给每个平台维护一套独立的二进制代码。传统的二进制兼容认为这些底层模块也是属于平台差异性的一部分,所以只针对纯应用程序部分兼容。
发明内容
本发明的目的是克服了上述现有技术中的缺点,提供一种能够在系统底层实现二进制兼容、充分发挥面向对象方法的优势、符合软件工程思想、便于功能扩展、系统的适应性较强的构件化软件系统基于设备接口实现二进制兼容运行的方法。
为了实现上述的目的,本发明的构件化软件系统基于设备接口实现二进制兼容运行的方法如下:
该构件化软件系统基于设备接口实现二进制兼容运行的方法,其主要特点是,所述的方法包括以下步骤:
(1)系统进行初始化操作;
(2)根据系统中的设备,创建对应的具有标准接口且包含设备属性信息的的设备驱动构件;
(3)系统中的应用程序在运行过程中获取相应设备驱动构件的接口指针进行功能调用;
(4)系统根据应用程序的需要,进行动态替换设备驱动构件的处理,该应用程序重复上述步骤(3)的功能调用。
该构件化软件系统基于设备接口实现二进制兼容运行的方法的创建具有标准接口且包含设备属性信息的的设备驱动构件包括以下步骤:
(1)创建通用设备驱动构件接口,并增加对设备的读操作、写操作和通用的控制功能的虚函数接口方法;
(2)根据系统中的具体设备,从所述的通用设备驱动构件接口中派生出符合该具体设备特性的虚函数接口方法;
(3)根据系统中的同类设备创建相应的基本设备驱动构件集,并将该基本设备驱动构件集内的设备驱动构件接口标准化;
(4)在实现相应的设备驱动构件过程中将包含该构件的类信息的元数据信息封装到该设备驱动构件中。
该构件化软件系统基于设备接口实现二进制兼容运行的方法的获取设备驱动构件的接口指针进行功能调用包括以下步骤:
(1)系统根据设备驱动构件接口中的虚函数接口方法创建虚函数表;
(2)应用程序获取该设备驱动构件的接口指针,并根据该接口指针所指向的虚函数表中的函数指针来进行相应的方法调用。
该构件化软件系统基于设备接口实现二进制兼容运行的方法的动态替换设备驱动构件的处理为:
修改虚函数表中指向被替换设备构件的函数指针,使该函数指针指向新的设备驱动构件中的函数。
采用了该发明的构件化软件系统基于设备接口实现二进制兼容运行的方法,由于通过创建设备抽象接口的方法在系统底层实现二进制兼容,从而对于不同的平台,只需要实现最基本的硬件设备驱动程序即可,有利于系统的维护;同时,抽象接口的实现是利用C++等面向对象的语言来进行设备驱动构件的编写,因此可以充分利用面向对象方法的优势,符合软件工程思想;不仅如此,该方法的设备驱动采用抽象的接口,因而在运行过程中可以利用动态绑定技术进行动态替换,从而便于功能的扩展,并增加了系统的适应性,为计算机跨平台兼容运行技术的进一步发展奠定了坚实的基础。
具体实施方式
为了能够更清楚地理解本发明的技术内容,特举以下实施例详细说明。
该构件化软件系统基于设备接口实现二进制兼容运行的方法,包括以下步骤:
(1)系统进行初始化操作;
(2)根据系统中的设备,创建对应的具有标准接口且包含设备属性信息的的设备驱动构件,包括以下步骤:
(a)创建通用设备驱动构件接口,并增加对设备的读操作、写操作和通用的控制功能的虚函数接口方法;
(b)根据系统中的具体设备,从所述的通用设备驱动构件接口中派生出符合该具体设备特性的虚函数接口方法;
(c)根据系统中的同类设备创建相应的基本设备驱动构件集,并将该基本设备驱动构件集内的设备驱动构件接口标准化;
(d)在实现相应的设备驱动构件过程中将包含该构件的类信息的元数据信息封装到该设备驱动构件中;
(3)系统中的应用程序在运行过程中获取相应设备驱动构件的接口指针进行功能调用,包括以下步骤:
(a)系统根据设备驱动构件接口中的虚函数接口方法创建虚函数表;
(b)应用程序获取该设备驱动构件的接口指针,并根据该接口指针所指向的虚函数表中的函数指针来进行相应的方法调用;
(4)系统根据应用程序的需要,进行动态替换设备驱动构件的处理,该应用程序重复上述步骤(3)的功能调用;该动态替换设备驱动构件的处理为:修改虚函数表中指向被替换设备构件的函数指针,使该函数指针指向新的设备驱动构件中的函数。
实际上,只要不是操作系统内核最底层的部分,以及跟硬件相关的设备驱动,对于基于纯软件的模块,不管是上层应用程序,还是底层的系统程序(包括CRT函数库,图形系统,数据库系统等等),都可以做到二进制兼容。
CAR(Component Assembly Runtime)技术是一种软件构件技术,它规定了一种构件之间调用的标准,是一种很优秀的构件技术,使用简单,功能强大。因此本发明的具体实施方式中结合了CAR构件的特征,利用软件构件技术进行实现,不过本发明的方法本身并不依赖于具体的构件技术类别,对于其他构件技术,比如微软的COM,以及OMG组织的CORBA等,都是适用的。
在实际使用当中,如果要做到二进制兼容,需要做的关键就是实现必要的设备驱动构件,为构件提供一套符合构件标准的接口,且把描述设备属性的元数据打包在构件内部。
应用程序是通过接口方法来调用设备功能的,只要在不同平台都实现了这个接口,则不同平台都可以满足应用程序的设备请求需要,保证程序的运行。不同于传统的C函数形式的API调用,设备驱动构件提供的是接口方法,需要应用程序获取对应的接口指针,根据指针指向的虚函数表(vtable)来进行方法调用。接口的实现,一般用C++来进行描述和编写。在编译的时候,在构件内部就直接把描述该构件特征的一些数据封装进去了,便于调用它的应用程序调用。封装进去的数据都是自描述数据,也称元数据,它们包含了构件的类信息,应用程序本身不用具体知道设备驱动到底具有什么特征,在创建构件对象的时候,能通过获得构件元数据取得足够多的信息,以便按照准确的方法进行调用。
用下面的代码可以实现一个通用的设备驱动接口:
CAR_INTEREACE(″7C2E182E-8352-2C1A-72DC-FF41F7BC2400″)
IDriver:public IObject
{
virtual CARAPI Read(
/*[in]*/UINT64 u64Offset,
/*[in]*/UINT uNumberOfBytesToRead,
/*[out]*/EzByteBuf ebbData,
/*[out]*/IEvent**ppCompletionEvent)=0;
virtual CARAPI Write(
/*[in]*/UINT64 u64Offset,
/*[in]*/EzByteBuf ebbData,
/*[out]*/UINT*puNumberOfBytesWritten,
/*[out]*/IEvent**ppCompletionEvent)=0;
virtual CARAPI Control(
/*[in]*/INT nControlCode,
/*[in]*/EzByteBuf ebbInData,
/*[out]*/EzByteBuf ebbOutData,
/*[out]*/IEvent**ppCompletionEvent)=0;
};
其中,IDriver接口继承自IObject接口,IObject提供构件最基本的功能,比如引用计数管理,接口指针查询。IDriver在IObject的基础上面,增加了对设备的读、写操作,以及提供一个通用的控制功能。CAR_INTERFACE这个关键字后面的数字是该接口的唯一描述符,用来唯一标识这个接口。
IDriver接口只是实现了一个最基本的驱动框架,所有的设备驱动都可以套用这个框架,来实现自己的功能。所以,通过它,就可以控制各种各样的设备,有着很大的灵活性。不过,由于IDriver接口提供的接口方法比较少,语意不是很明确,所以,为了开发人员的方便和代码的可读性,可以从IDriver接口派生出符合具体设备特性的接口方法。比如,针对声卡,可以提供如下的接口:
CAR_INTERFACE(″4b645ccf-0e80-47fc-9f36-03683722ecac″)
IAudio:public IDriver
{
virtual CARAPI AudioOutInit(
/*[in]*/UINT uSampleRate,
/*[in]*/UINT uChannels,
/*[in]*/UINT uBitsPerSample)=0;
virtual CARAPI WaveOutSetVolume(
/*[in]*/UINT uLeftVolume,
/*[in]*/UINT uRightVolume,)=0;
virtual CARAPI AudioOutClose()=0;
……
};
这个接口继承了通用设备驱动的所有对外特性,同时针对声卡的物理特征,可以提供诸如采样率等基本参数设置,音量设置等功能。这些接口方法从名称上更清晰地表达了声卡的功能,对于软件开发人员来说就更容易理解。且细化的方法对于功能复杂的设备驱动来说,特别有用。
常用的设备的数目是比较有限的,且同类设备提供的基本功能也是比较一致的。所以,可以定义一个基本设备集,然后把这个集合内的设备接口标准化。这样对设备驱动构件的编写以及应用程序的调用就显得很方便,也十分利于应用程序跨平台运行。对于不常用的设备,可以直接利用IDriver接口,如果该设备的功能特性很多,只是需要复用它的Control接口方法,通过参数nControlCode(控制字)来区分不同的功能。
同时,在前面一个步骤中,提供了创建设备驱动构件最基本的方法。按照这个方法在不同平台,根据各自的硬件特性,实现接口一致的设备驱动构件,就能满足应用程序的跨平台运行。操作构件接口,实质上是调用虚函数表里的函数指针。本发明的方法可以动态修改这个指针,让它根据具体情况指向其他的函数,以实现更丰富的功能。
动态修改接口方法指针的实质就是,在应用程序运行的过程中动态替换构件。这样,应用程序本身不需要进行任何改动,可以随时动态引入新的设备驱动构件,以达到更强的功能。
以前面的声卡驱动为例,使用者想在播放声音的同时,了解一下调用每一个接口方法所消耗的时间,以便分析系统的性能。要实现这个功能,本发明的方法则不用修改应用程序,甚至也不需要修改声卡驱动本身,可以用下面的方法很容易地做到:
用实现设备驱动构件的方法实现一个虚拟设备构件,提供的接口方法和声卡保持一致,让上层的应用就认为它是一个声卡构件。这个构件的每个方法直接转调声卡驱动的对应方法,只是在调用前记录一下当前时间,调用之后再记录一下时间,把时间的差值输出到一个特定的地方(比如日志文件或者统计窗口),便于用户观察。
可见,利用本发明的方法,能够方便地扩展设备驱动的功能,在保证二进制兼容的前提下,让系统运行起来更加灵活,随时可以根据用户的需要动态更新构件,满足日益复杂的应用需求。
采用了上述的构件化软件系统基于设备接口实现二进制兼容运行的方法,由于通过创建设备抽象接口的方法在系统底层实现二进制兼容,从而对于不同的平台,只需要实现最基本的硬件设备驱动程序即可,有利于系统的维护;同时,抽象接口的实现是利用C++等面向对象的语言来进行设备驱动构件的编写,因此可以充分利用面向对象方法的优势,符合软件工程思想;不仅如此,该方法的设备驱动采用抽象的接口,因而在运行过程中可以利用动态绑定技术进行动态替换,从而便于功能的扩展,并增加了系统的适应性,为计算机跨平台兼容运行技术的进一步发展奠定了坚实的基础。
在此说明书中,本发明已参照其特定的实施例作了描述。但是,很显然仍可以作出各种修改和变换而不背离本发明的精神和范围。因此,说明书和附图应被认为是说明性的而非限制性的。
Claims (4)
1、一种构件化软件系统基于设备接口实现二进制兼容运行的方法,其特征在于,所述的方法包括以下步骤;
(1)系统进行初始化操作;
(2)根据系统中的设备,创建对应的具有标准接口且包含设备属性信息的的设备驱动构件;
(3)系统中的应用程序在运行过程中获取相应设备驱动构件的接口指针进行功能调用;
(4)系统根据应用程序的需要,进行动态替换设备驱动构件的处理,该应用程序重复上述步骤(3)的功能调用。
2、根据权利要求1所述的构件化软件系统基于设备接口实现二进制兼容运行的方法,其特征在于,所述的创建具有标准接口且包含设备属性信息的的设备驱动构件包括以下步骤:
(1)创建通用设备驱动构件接口,并增加对设备的读操作、写操作和通用的控制功能的虚函数接口方法;
(2)根据系统中的具体设备,从所述的通用设备驱动构件接口中派生出符合该具体设备特性的虚函数接口方法;
(3)根据系统中的同类设备创建相应的基本设备驱动构件集,并将该基本设备驱动构件集内的设备驱动构件接口标准化;
(4)在实现相应的设备驱动构件过程中将包含该构件的类信息的元数据信息封装到该设备驱动构件中。
3、根据权利要求2所述的构件化软件系统基于设备接口实现二进制兼容运行的方法,其特征在于,所述的获取设备驱动构件的接口指针进行功能调用包括以下步骤:
(1)系统根据设备驱动构件接口中的虚函数接口方法创建虚函数表;
(2)应用程序获取该设备驱动构件的接口指针,并根据该接口指针所指向的虚函数表中的函数指针来进行相应的方法调用。
4、根据权利要求1至3中任一项所述的构件化软件系统基于设备接口实现二进制兼容运行的方法,其特征在于,所述的动态替换设备驱动构件的处理为:
修改虚函数表中指向被替换设备构件的函数指针,使该函数指针指向新的设备驱动构件中的函数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200610119536 CN1971509A (zh) | 2006-12-13 | 2006-12-13 | 构件化软件系统基于设备接口实现二进制兼容运行的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200610119536 CN1971509A (zh) | 2006-12-13 | 2006-12-13 | 构件化软件系统基于设备接口实现二进制兼容运行的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN1971509A true CN1971509A (zh) | 2007-05-30 |
Family
ID=38112349
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200610119536 Pending CN1971509A (zh) | 2006-12-13 | 2006-12-13 | 构件化软件系统基于设备接口实现二进制兼容运行的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1971509A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103218223A (zh) * | 2013-03-15 | 2013-07-24 | 汉柏科技有限公司 | 一种vdi兼容多个iaas平台的方法 |
CN109947055A (zh) * | 2017-12-20 | 2019-06-28 | 松下知识产权经营株式会社 | 设备控制方法、设备控制装置以及设备控制系统 |
CN112148283A (zh) * | 2020-09-14 | 2020-12-29 | 第六镜科技(成都)有限公司 | 一种跨平台的abi兼容c++组件框架的实现方法 |
CN113515389A (zh) * | 2020-04-09 | 2021-10-19 | 奇安信安全技术(珠海)有限公司 | 中间接口的调用方法及装置、系统、存储介质、电子装置 |
-
2006
- 2006-12-13 CN CN 200610119536 patent/CN1971509A/zh active Pending
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103218223A (zh) * | 2013-03-15 | 2013-07-24 | 汉柏科技有限公司 | 一种vdi兼容多个iaas平台的方法 |
CN109947055A (zh) * | 2017-12-20 | 2019-06-28 | 松下知识产权经营株式会社 | 设备控制方法、设备控制装置以及设备控制系统 |
CN113515389A (zh) * | 2020-04-09 | 2021-10-19 | 奇安信安全技术(珠海)有限公司 | 中间接口的调用方法及装置、系统、存储介质、电子装置 |
CN113515389B (zh) * | 2020-04-09 | 2024-03-01 | 奇安信安全技术(珠海)有限公司 | 中间接口的调用方法及装置、系统、存储介质、电子装置 |
CN112148283A (zh) * | 2020-09-14 | 2020-12-29 | 第六镜科技(成都)有限公司 | 一种跨平台的abi兼容c++组件框架的实现方法 |
CN112148283B (zh) * | 2020-09-14 | 2023-09-22 | 第六镜科技(成都)有限公司 | 一种跨平台的abi兼容c++组件框架的实现方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR950007883B1 (ko) | 한 세트의 클래스 구성장치 및 그 방법 | |
Box et al. | Essential. Net: the common language runtime | |
US8819650B2 (en) | Instantiating an interface or abstract class in application code | |
US20220261229A1 (en) | Accessing a migrated member in an updated type | |
US10684827B2 (en) | Generating dynamic modular proxies | |
US8037467B2 (en) | Single stream processing with multi-version support of application operating environments | |
JP2001109628A (ja) | ソフトウェアシステムとその開発方法 | |
CN1364260A (zh) | 软件翻译的内省编辑器系统、程序和方法 | |
EP3180734A1 (en) | Restrictive access control for modular reflection | |
WO2004102303A2 (en) | Compiling intermediate language bytecodes into java bytecodes | |
US8271622B2 (en) | Method and apparatus for a system management tool to adapt command interface and behavior based on installed features | |
US6378003B1 (en) | Method and system for deriving metaclasses in an object oriented system | |
CN1971509A (zh) | 构件化软件系统基于设备接口实现二进制兼容运行的方法 | |
US20050108683A1 (en) | Enhanced Software Components | |
US7421715B1 (en) | System and method for dynamic late-binding of persistent object implementations in software-based systems | |
CN1877521A (zh) | 跨操作系统的嵌入式系统板级支持包的实现方法 | |
Szyperski | Insight ETHOS: On object-orientation in operating systems | |
US6751790B2 (en) | Frameworks for efficient representation of string objects in Java programming environments | |
Parsons et al. | The java story | |
WO2021230879A1 (en) | Generating executables for target operational environments | |
Samanta et al. | Joy with Java: Fundamentals of Object Oriented Programming | |
Budd | C++ for Java Programmers | |
US11243876B2 (en) | Techniques for accessing off-heap memory | |
Reali | Using oberon’s active objects for language interoperability and compilation | |
Zeller | Fine-grained integration of Oberon into Windows using pluggable objects |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1102180 Country of ref document: HK |
|
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: WD Ref document number: 1102180 Country of ref document: HK |