控制动态链接库DLL加载状态的方法和系统技术方案

技术编号:4257173 阅读:321 留言:0更新日期:2012-04-11 18:40
本发明专利技术涉及控制DLL加载状态的装置和方法。具体地,提供了一种流程序编译器,包括:关联表生成单元,用于根据用户定义的规则生成关联表,该关联表包括至少一个条目,每一条目指示一种流分支和该流分支对应的操作模块;以及触发器生成单元,用于根据所述规则生成触发器,该触发器用于判断流程序适用的条件,将该条件映射至所述流分支,并发出触发信号。还提供了一种控制器,包括操作模块确定单元,用于响应于触发信号指示的流分支查找关联表,确定该流分支对应的操作模块;以及DLL控制单元,用于卸载不使用的操作模块所调用的DLL。本发明专利技术还提供与上述编译器和控制器相对应的方法。由此,用户可以通过定义DLL控制规则实现对DLL加载状态的控制。

【技术实现步骤摘要】

本专利技术涉及流应用程序和动态链接库(DLL, Dynamic LinkedLibrary),更具体地,涉及在流应用程序中控制动态链接库的加载和卸载的装置和方法。
技术介绍
动态链接库(DLL)是一个包含可由多个程序同时使用的代码和数据的库。在现有的操作系统中,大量功能是由动态链接库(DLL)提供的。例如,在Windows操作系统中,Comdlg32DLL执行与对话框有关的常见函数。因此,每个程序都可以使用该DLL中包含的功能来实现打开对话框。此外,在操作系统上运行的应用程序的很多功能也可以是由DLL提供的。例如,某些应用程序可能包含很多不同的模块,而该程序的每个模块都包含在DLL中并从中分发。 使用DLL有助于促进代码的模块化、代码重用、内存的有效使用和减少所占用的磁盘空间。因此,操作系统和程序能够更快地加载和运行,并且在计算机中占用较少的磁盘空间。 在目前的运行模式下,操作系统在一个DLL第一次被调用时将其加载,在调用该DLL的程序结束时将其卸载,或者直到其后需要内存时才卸载不再需要的DLL。然而,在多数流式应用程序或流应用程序(streaming即plication)中,主程序通常是常年运行的。在主程序运行期间,通常会调用大量的DLL。在这些大量的DLL中,大部分都是周期性调用和激活(active)的。然而,对于流程序语言来说,由于其不支持分支结构,通常不能对DLL加载卸载的条件进行定义,因此无法对DLL的加载卸载状态进行适当的控制。对于操作系统来说,系统只能判断一个程序是否结束,而无法自己判断一个运行之中的程序所调用的DLL是否需要卸载。因此,尽管有些DLL在程序运行中已经不再需要,但是系统仍然不能将其识别出来,因而不能在适当时候对其进行加载或卸载。 不必要的运行DLL对于系统来说会带来一些问题。首先是内存空间的浪费。通过对系统运行线程的监视,运行DLL时一个线程常常会占用上百兆的内存空间。其次,对于已经加载的DLL,系统必须定时地核查、监控该DLL的运行状态以确认其正常运行。因此如果不能适时卸载不需要的DLL,系统核查这些不再需要的DLL时所需的资源和时间也是一种浪费。 因此,希望提供一种方案,能够对DLL的加载卸载状态进行控制,从而提高系统的资源利用率。
技术实现思路
考虑到上述问题,本专利技术提供一种在流程序中控制DLL加载状态的方法、编译器和系统。 根据本专利技术第一方面,提供一种流程序编译器,用于对包括至少一个操作模块的流程序进行编译,所述至少一个操作模块在所述流程序执行期间需要调用至少一个DLL,所4述编译器包括关联表生成单元,被配置为根据用户定义的至少一条规则生成关联表,该关 联表包括至少一个条目,每一个条目指示流程序的一种流分支和该流分支对应的至少一个 操作模块;以及触发器生成单元,被配置为根据所述用户定义的至少一条规则生成触发器, 所述触发器用于判断所述流程序适用的条件,将该条件映射至流分支,并发出指示该流分 支的触发信号。 根据本专利技术第二方面,提供一种控制流程序中动态链接库(DLL)加载状态的装 置,所述流程序包括至少一个操作模块,所述至少一个操作模块在所述流程序执行期间需 要调用至少一个DLL,所述装置包括控制器,所述控制器包括操作模块确定单元,被配置 为响应于接收指示流分支的触发信号,查找记录有流分支和操作模块对应关系的关联表, 确定所述流分支对应的操作模块;以及DLL控制单元,被配置为根据所述流分支对应的操 作模块卸载不使用的操作模块所调用的DLL。 根据本专利技术第三方面,提供一种控制流程序中DLL加载状态的方法,所述流程序 包括至少一个操作模块,所述至少一个操作模块在所述流程序执行期间需要调用至少一个 DLL,所述方法包括响应于接收指示流分支的触发信号,查找记录有流分支和操作模块对 应关系的关联表,确定所述流分支对应的操作模块;以及根据所述流分支对应的操作模块 卸载不使用的操作模块所调用的DLL。 通过本专利技术以上方面的装置和方法,用户可以通过以流程序定义DLL的控制逻辑 或规则,来实现对DLL加载状态的自由控制,从而节省大量的计算资源。附图说明 以下结合附图说明本专利技术的具体实施例,其中 图1示出根据本专利技术一个实施例的编译器的结构示意图; 图2示出根据本专利技术实施例的一段示例性流程序代码; 图3示出图2所示的流程序所涉及的操作模块; 图4A示出图2的流程序的第一流分支中的操作模块的连接示意图; 图4B示出图2的流程序的第二流分支中的操作模块的连接示意图; 图5示出根据本专利技术实施例的一个关联表; 图6示出根据本专利技术一个实施例的控制装置的结构示意图; 图7示出根据本专利技术一个实施例的编译流程序的流程图; 图8示出根据本专利技术一个实施例的控制DLL加载状态的方法的流程图;以及 图9示出控制器对流程序操作模块的控制示意图。具体实施例方式本专利技术希望能够提供一种方案,该方案能够对DLL的加载状态进行适当的控制。 为了适当控制DLL的加载和卸载,就必须知道DLL的控制逻辑,也就是,在一个程 序运行期间,哪些DLL必须激活,哪些DLL不再需要从而可以卸载,以及加载和卸载这些DLL 的条件。在现有的应用程序和操作系统中,DLL的设计者显然并不适于描述这样的控制逻 辑。了解应用程序的算法和逻辑的只有程序的设计者或程序员。因此,只能由程序设计者 或程序员来定义加载或卸载特定DLL的控制逻辑。然而,对于流应用程序来说,由于流程序语言并不支持分支结构,也就是不能对条件进行比较、判断和选择,因此程序设计者通常不 能用流程序语言定义加载或卸载的DLL条件和控制逻辑。 具体地,流应用程序所采用的流程序语言有很多种,如SPUR、 Cg、 Baker、 Spidle、 Streamlt、StreamC/KernelC、Brook、Sequoia等。下面以Streamlt为例,说明流程序的基本 特点。Streamlt是面向RAW开发的一种编程语言,是Java语法的一个子集扩充。它将流处 理器的处理过程看作一个一个的单输入输出流计算模块filter,而流则看作连接filter 之间的数据通路。多个filter通过流水(pipeline)、分割合并(splitjoin)和反馈循环 (feedbackloop)三种结构组成一个通信网络,该通信网络被映射到各个Tile上并行执行。 其他流程序语言在处理的流数据类型、流的级别等各方面互有不同。总体来说,可以认为流 程序包括多个操作模块,例如Streamlt中的filter。每一操作模块对输入数据流进行一定 的操作,并产生输出数据流。为了执行特定操作,一个操作模块可以调用一个或多个DLL。 基于流程序的流式处理特点,现有的上述流程序语言并不支持分支结构。然而,为 了控制DLL的加载状态,必须知道被调用的DLL的控制逻辑,也就是必须将流程序中涉及的 各个操作模块之间的控制逻辑描述出来。这就带来了现有的流程序编译器和系统无法解决 的问题。 考虑到上述问题,本专利技术提供一种装置和方法,能够在编译阶段对用户,也就是程 序员以流程序语言定义的DLL控制逻辑进行编译和解读,并在流程序执行阶段根据这样的 控制逻辑来监视加载、卸载DLL的条件,并在条件成立时执行相应的加载卸载操作,由此实本文档来自技高网
...

【技术保护点】
一种流程序编译器,用于对包括至少一个操作模块的流程序进行编译,所述至少一个操作模块在所述流程序执行期间需要调用至少一个动态链接库DLL,所述编译器包括:关联表生成单元,被配置为根据用户定义的至少一条规则生成关联表,该关联表包括至少一个条目,每一个条目指示流程序的一种流分支和该流分支对应的至少一个操作模块;以及触发器生成单元,被配置为根据所述用户定义的至少一条规则生成触发器,所述触发器用于判断所述流程序适用的条件,将该条件映射至流分支,并发出指示该流分支的触发信号。

【技术特征摘要】
一种流程序编译器,用于对包括至少一个操作模块的流程序进行编译,所述至少一个操作模块在所述流程序执行期间需要调用至少一个动态链接库DLL,所述编译器包括关联表生成单元,被配置为根据用户定义的至少一条规则生成关联表,该关联表包括至少一个条目,每一个条目指示流程序的一种流分支和该流分支对应的至少一个操作模块;以及触发器生成单元,被配置为根据所述用户定义的至少一条规则生成触发器,所述触发器用于判断所述流程序适用的条件,将该条件映射至流分支,并发出指示该流分支的触发信号。2. 如权利要求1的编译器,其中所述用户定义的至少一条规则包含在所述流程序中。3. 如权利要求l的编译器,其中所述流分支对应的至少一个操作模块是在该流分支下 所述流程序需要的操作模块。4. 如权利要求l的编译器,其中所述流分支对应的至少一个操作模块是在该流分支下 所述流程序不需要的操作模块。5. 如权利要求1的编译器,其中所述触发器生成单元还被配置为将触发器嵌入在所述 至少一个操作模块中。6. 如权利要求1-5中任一项的编译器,还包括控制器生成单元,被配置为生成控制 器,所述控制器用于根据所述触发信号指示的流分支,查找所述关联表,确定该流分支对应 的操作模块,并卸载不使用的操作模块所调用的DLL。7. —种控制流程序中动态链接库DLL加载状态的装置,所述流程序包括至少一个操作 模块,所述至少一个操作模块在所述流程序执行期间需要调用至少一个DLL,所述装置包括 控制器,所述控制器包括操作模块确定单元,被配置为响应于接收指示流分支的触发信号,查找记录有流分支 和操...

【专利技术属性】
技术研发人员:刘之育王华勇侯锐王艳琦
申请(专利权)人:国际商业机器公司
类型:发明
国别省市:US[美国]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1