CN101727345A - 控制动态链接库dll加载状态的方法和系统 - Google Patents

控制动态链接库dll加载状态的方法和系统 Download PDF

Info

Publication number
CN101727345A
CN101727345A CN200810170786A CN200810170786A CN101727345A CN 101727345 A CN101727345 A CN 101727345A CN 200810170786 A CN200810170786 A CN 200810170786A CN 200810170786 A CN200810170786 A CN 200810170786A CN 101727345 A CN101727345 A CN 101727345A
Authority
CN
China
Prior art keywords
operational module
dll
flow branching
trigger
string routine
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.)
Granted
Application number
CN200810170786A
Other languages
English (en)
Other versions
CN101727345B (zh
Inventor
刘之育
王华勇
侯锐
王艳琦
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Priority to CN2008101707866A priority Critical patent/CN101727345B/zh
Priority to US12/607,241 priority patent/US8589896B2/en
Publication of CN101727345A publication Critical patent/CN101727345A/zh
Application granted granted Critical
Publication of CN101727345B publication Critical patent/CN101727345B/zh
Priority to US14/075,664 priority patent/US9372676B2/en
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44594Unloading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/37Compiler construction; Parser generation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

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

Description

控制动态链接库DLL加载状态的方法和系统
技术领域
本发明涉及流应用程序和动态链接库(DLL,Dynamic LinkedLibrary),更具体地,涉及在流应用程序中控制动态链接库的加载和卸载的装置和方法。
背景技术
动态链接库(DLL)是一个包含可由多个程序同时使用的代码和数据的库。在现有的操作系统中,大量功能是由动态链接库(DLL)提供的。例如,在Windows操作系统中,Comdlg32DLL执行与对话框有关的常见函数。因此,每个程序都可以使用该DLL中包含的功能来实现“打开”对话框。此外,在操作系统上运行的应用程序的很多功能也可以是由DLL提供的。例如,某些应用程序可能包含很多不同的模块,而该程序的每个模块都包含在DLL中并从中分发。
使用DLL有助于促进代码的模块化、代码重用、内存的有效使用和减少所占用的磁盘空间。因此,操作系统和程序能够更快地加载和运行,并且在计算机中占用较少的磁盘空间。
在目前的运行模式下,操作系统在一个DLL第一次被调用时将其加载,在调用该DLL的程序结束时将其卸载,或者直到其后需要内存时才卸载不再需要的DLL。然而,在多数流式应用程序或流应用程序(streamingapplication)中,主程序通常是常年运行的。在主程序运行期间,通常会调用大量的DLL。在这些大量的DLL中,大部分都是周期性调用和激活(active)的。然而,对于流程序语言来说,由于其不支持分支结构,通常不能对DLL加载卸载的条件进行定义,因此无法对DLL的加载卸载状态进行适当的控制。对于操作系统来说,系统只能判断一个程序是否结束,而无法自己判断一个运行之中的程序所调用的DLL是否需要卸载。因此,尽管有些DLL在程序运行中已经不再需要,但是系统仍然不能将其识别出来,因而不能在适当时候对其进行加载或卸载。
不必要的运行DLL对于系统来说会带来一些问题。首先是内存空间的浪费。通过对系统运行线程的监视,运行DLL时一个线程常常会占用上百兆的内存空间。其次,对于已经加载的DLL,系统必须定时地核查、监控该DLL的运行状态以确认其正常运行。因此如果不能适时卸载不需要的DLL,系统核查这些不再需要的DLL时所需的资源和时间也是一种浪费。
因此,希望提供一种方案,能够对DLL的加载卸载状态进行控制,从而提高系统的资源利用率。
发明内容
考虑到上述问题,本发明提供一种在流程序中控制DLL加载状态的方法、编译器和系统。
根据本发明第一方面,提供一种流程序编译器,用于对包括至少一个操作模块的流程序进行编译,所述至少一个操作模块在所述流程序执行期间需要调用至少一个DLL,所述编译器包括:关联表生成单元,被配置为根据用户定义的至少一条规则生成关联表,该关联表包括至少一个条目,每一个条目指示流程序的一种流分支和该流分支对应的至少一个操作模块;以及触发器生成单元,被配置为根据所述用户定义的至少一条规则生成触发器,所述触发器用于判断所述流程序适用的条件,将该条件映射至流分支,并发出指示该流分支的触发信号。
根据本发明第二方面,提供一种控制流程序中动态链接库(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、StreamIt、StreamC/KernelC、Brook、Sequoia等。下面以StreamIt为例,说明流程序的基本特点。StreamIt是面向RAW开发的一种编程语言,是Java语法的一个子集扩充。它将流处理器的处理过程看作一个一个的单输入输出流计算模块filter,而流则看作连接filter之间的数据通路。多个filter通过流水(pipeline)、分割合并(splitjoin)和反馈循环(feedbackloop)三种结构组成一个通信网络,该通信网络被映射到各个Tile上并行执行。其他流程序语言在处理的流数据类型、流的级别等各方面互有不同。总体来说,可以认为流程序包括多个操作模块,例如StreamIt中的filter。每一操作模块对输入数据流进行一定的操作,并产生输出数据流。为了执行特定操作,一个操作模块可以调用一个或多个DLL。
基于流程序的流式处理特点,现有的上述流程序语言并不支持分支结构。然而,为了控制DLL的加载状态,必须知道被调用的DLL的控制逻辑,也就是必须将流程序中涉及的各个操作模块之间的控制逻辑描述出来。这就带来了现有的流程序编译器和系统无法解决的问题。
考虑到上述问题,本发明提供一种装置和方法,能够在编译阶段对用户,也就是程序员以流程序语言定义的DLL控制逻辑进行编译和解读,并在流程序执行阶段根据这样的控制逻辑来监视加载、卸载DLL的条件,并在条件成立时执行相应的加载卸载操作,由此实现由用户自由控制DLL的加载状态。
图1示出根据本发明一个实施例的编译器的结构示意图。该编译器总体由附图标记100标识。如图1所示,编译器100包括关联表生成单元102,被配置为根据用户定义的至少一条规则生成关联表,该关联表包括至少一个条目,每一个条目指示流程序的一种流分支和该流分支对应的至少一个操作模块;以及触发器生成单元104,被配置为根据所述用户定义的至少一条规则生成触发器,所述触发器用于判断所述流程序适用的条件,将该条件映射至流分支,并发出指示该流分支的触发信号。如上所述,关联表和触发信号都是在读取用户定义的至少一条规则的基础上产生的。用户定义的规则可以被称为控制规则,是针对一个流应用程序以流程序语言定义的。该控制规则用于描述该流应用程序中调用DLL所基于的控制逻辑。下面说明流程序调用DLL的特点以及上述控制规则的描述方法。
下面以一段示例性代码为例说明规则的定义。图2示出根据本发明实施例的一段示例性流程序代码,该示例性代码包括了用户对DLL控制规则的定义。图3示出图2所示的流程序所涉及的操作模块。如图2和图3所示,该示例性流程序涉及8个操作模块P1,P2,...,P8,这些操作模块在图3中分别以数字1-8标示,从这些操作模块流出的数据流分别以S1,S2,...,S8表示。简单起见,假定每个操作模块在执行期间需要调用一个DLL,分别记为DLL1,DLL2,...,DLL8。这些操作模块以一定逻辑顺序连接起来,构成一个流程序。操作模块之间的连接在图3中以操作模块之间的带方向的连线示出,在图2中以特定形式用流程序语言描述。在一般的流程序中,各个操作模块之间的连接符合直接无循环图形(DAG,directed acyclic graph)。具体地,在图2的流程序语言中,以下面的形式表示操作模块和数据流之间的关系:
输出数据流=操作模块(输入数据流)[对操作模块的修改]{}因此,Sn=Pn(Sm)[]{}就表示从操作模块Pm流出的数据Sm是操作模块Pn的输入数据流,由Pn操作和处理之后,成为数据流Sn流出,也就意味着,操作模块Pm与Pn相连。利用这样的形式,用户可以描述出操作模块之间的数据流向,从而构建一个完整的流程序。此外,用户也可以采用上述形式,定义操作模块之间的逻辑,也就是DLL的控制规则。
在图2所示的代码中,从T1开始的代码表示用户对控制规则的定义。在定义规则的代码中,不仅包含有上述的多个操作模块以及其连接关系,还包括对不同流分支的定义,这些流分支成立的条件和监视这些条件的触发器。具体地,T1表示第一种流分支,T2表示第二种流分支。T1,T2后面的几个语句分别定义在第一、第二流分支中,数据流在各个操作模块之间的流向。最后的一个语句用关键词“TRG”描述了该流分支成立的条件和触发器。具体地,在C1条件下,该流程序按照第一流分支T1运行,在C2条件下,该流程序按照第二流分支运行。并且,“TRG”写在操作模块P5后面的[]中,因此,是对操作模块P5的进一步修改和限定。也就是说,触发器是嵌入在P5中的,每到流程序运行到操作模块P5时,就要执行条件的判断和触发。
可以理解,上述流程序可以采用现有的各种流程序语言来实现。在上述的示例性代码中,用户在主程序中以一段脚本定义了操作模块的控制逻辑和规则。然而,在其他实施方式中,用户也可以在一个独立的文件中,用流程序语言描述上述规则。在描述规则的过程中,用户可以根据需要定义各种流分支、流分支成立的条件以及触发方法,而不限于以上给出的示例性代码中给出的例子。例如,根据需要,用户可以对上述代码中的条件C1,C2给出详细定义,如C1为A>B,C2为A<B,其中A和B为操作模块P5中的两个变量。在条件的成立涉及某些操作模块内部的数据时,通常判断条件是否成立的触发器要嵌入在操作模块之内,如图2的示例性代码中所示。在其他实施方式中,用户也可以在操作模块外部定义一个触发器,例如:TRG(T3=throughput()>5GBPS)。可以理解,该触发器是单独定义的,并没有写在某个操作模块的解释[]内,因而并没有嵌入操作模块内部。依据该触发器的定义,设定了一个新的流分支T3,该流分支成立的条件为throughput()>5GBPS。因此,该触发器可用于监视数据的输出,并在输出量大于5GBPS时触发流程序按照T3的流分支运行。
在用户定义了上述规则之后,关联表生成单元102根据上述规则,产生关联表,该关联表用于示出每一种流分支和该流分支对应的操作模块。下面仍然以图2的示例性代码为例,说明该关联表的产生。
首先,分析上述规则中对第一流分支的定义。对第一流分支的定义为:
T1:
S7=P7(S6,S1)[...]{...}
S3=P3(S7)
S8=P8(S3)[...]{...}
P5(S8)[TRG(T1=C1,T2=C2)...]{}
关联表生成模块102分析前三个语句可知,分别从操作模块P6,P1输出的数据S6,S1被输入到操作模块P7,经P7操作之后的数据流S7接着被输入到操作模块P3,经P3处理之后成为数据流S3。之后,操作模块P8对数据流S3进行处理,输出数据流S8。最后,S8流入操作模块P5,在P5中嵌入有触发器。通过这样的分析,可以得到如图4A所示的第一流分支中的操作模块的连接示意图。通过对比图4A与图3可以看出,相比于图3中流程序所涉及的所有操作模块的连接图,图4A的流分支中减少了操作模块P2和P4,以及所有与P2和P4相关联的连线。这就意味着,在T1流分支下,并不需要运行操作模块P2,P4,也就不需要加载P2和P4所调用的DLL。
类似的,分析上述规则中对第二流分支的定义,可以得到如图4B所示的示意图。对比图4B与图3可以看出,相比于图3,图4A的流分支中减少了操作模块P8以及P1和P7之间的连线。
为了更清楚示出上述流分支下所述流程序所使用的操作模块,关联表生成单元102用条件关联表的方式示出上述流分支和涉及的操作模块之间的关联。图5示出根据本发明实施例的一个关联表。该关联表对应于图2所示的示例性代码中所定义的规则。如图5所示,该关联表有3个条目,最后一个条目是流程序所涉及的所有操作模块以及这些操作模块之间的连接关系。具体地,数字1即表示操作模块P1,(1,2)即表示操作模块P1与P2之间相连。关联表的第一个条目是流分支T1与该流分支下操作模块的对应关系。在该实施例中,关联表以-2,-4的形式示出,在流分支T1中,所需的操作模块相比于条目3中的所有模块缺少了操作模块P2和P4。同样的,在第二个条目中,以-8,-(1,7)的形式示出,将条目3中的操作模块和连接关系去除掉模块P8和模块P1、P7之间的连线将会得到流分支T2。
可以理解,关联表的形式并不局限于图5所示的形式。例如,在其他实施例中,可以通过列出所需的操作模块,而不是要去除的操作模块,来描述一个流分支。
在用户定义的规则中,除了描述特定流分支对应的操作模块,还定义了触发该流分支的条件。因此,触发器生成单元104需要生成相应的触发器,并使得该触发器能够根据用户定义的规则,判断所述流程序适用的条件,将该条件映射为流程序适用的流分支,并发出指示该流分支的触发信号。具体地,仍然以图2示出的示例性代码为例,说明触发器生成单元104生成触发器的过程。
在图2示出的代码中,用户以关键字TRG定义了一个触发器:TRG(T1=C1,T2=C2),并将该触发器嵌入在操作模块P5中。这意味着,用户希望程序运行至操作模块P5时,生成的触发器判断条件C1和C2是否成立。如果条件C1成立,触发器就发出一个信号SG1,该信号指示出目前条件C1成立,流程序需要按照T1的流分支来运行。如果条件C2成立,触发器就发出信号SG2,指示出要执行的流分支T2。
如前所述,常规的流程序语言并不支持分支结构,相应地,对应的编译器也不能解读和编译用户对触发条件的定义和描述。为此,触发器生成单元104对用户定义的触发器的逻辑进行分析,并用支持分支结构的语言产生一段反映该逻辑的程序代码来实现触发器的功能。实际上,尽管流程序语言本身不支持分支结构,但是流程序中包含的操作模块通常是由支持分支结构的程序语言,例如C/C++,Java等构建的。例如对于StreamIT,操作模块是由Java构建的。这时,对于嵌入在操作模块中的触发器,触发器生成单元104可以将触发器的判断逻辑同样以Java写入操作模块中。具体地,对于图2所示的代码中的触发器,就可以用诸如多个if语句将判断条件C1,C2并相应产生触发信号SG1,SG2的逻辑写入操作模块P5。对于非嵌入式的触发器,触发器生成单元104在进行触发器条件编译时直接将其判断逻辑添加至主程序即可。这样,在执行流程序时,就能够对流程序适用的条件进行判断,并产生相应的触发信号。
在流程序编译阶段根据用户定义的规则产生关联表和触发器的基础上,就可以在执行该流程序时,对流程序所使用的操作模块和调用的DLL进行控制了。对DLL加载状态的直接控制由操作系统中对应于运行时的控制装置来执行。图6示出根据本发明一个实施例的控制装置的结构示意图。在该实施例中,控制装置表现为一个控制器600。如图所示,该控制器600包括操作模块确定单元602,被配置为响应于接收指示流分支的触发信号,查找记录有流分支和操作模块对应关系的关联表,确定所述流分支对应的操作模块;以及DLL控制单元604,被配置为根据所述流分支对应的操作模块卸载不使用的操作模块所调用的DLL。下面结合图2的代码和图5所示的关联表描述控制器600的操作。
如上所述,在流程序编译阶段,编译器已经生成了关联表和触发器。所述关联表通常存储在系统的缓存中。所述触发器在该流程序执行阶段,能够通过判断流程序满足的条件产生指示一个流分支的触发信号。在此基础上,操作模块确定单元602首先对产生的触发信号进行分析。结合图2的代码,如果触发信号为SG1,则指示了T1分支。进一步地,操作模块确定单元602查询编译阶段生成的关联表,例如,图5所示的关联表,由此可以得到T1分支所涉及的操作模块以及连接关系。具体地,相对于流程序所涉及的全部操作模块,在流分支T1中,操作模块P2和P4不再需要,因此,操作模块P2,P4所分别调用的DLL2,DLL4也可以被卸载。在获得这样的信息的基础上,DLL控制单元604就可以卸载所述不需要的操作模块所调用的DLL。为了执行DLL的卸载,在一个实施例中,DLL控制单元604可以向操作模块P2,P4发出结束指令,并调用卸载函数,例如dll.close(),来卸载DLL2和DLL4。也可以通过上述结束指令,使得操作模块P2,P4自己调用卸载函数,卸载相应的DLL。类似地,如果触发信号为SG2,则指示了T2分支。操作模块确定单元602通过查询关联表可以得到T2分支对应的操作模块。进一步地,DLL控制单元604通过向不再需要的操作模块发出结束指令,可以卸载这些模块所调用的DLL。由此,通过用户自定义的规则,实现了对DLL加载状态的控制。
在一个实施例中,用于直接控制DLL加载状态的控制器600由添加到操作系统中的一段固定代码来实现。该实施例适于接收固定形式的触发信号,查阅固定格式的关联表,并产生固定形式的加载/卸载命令。因此,对于固定格式的关联表和触发信号,这样的控制器是有利的。在另一种实施例中,控制器600可以由编译器100在编译流程序和规则时现场生成,并在流程序的执行阶段对DLL的加载状态进行直接控制。相应地,编译器100可选地还可以包括控制器生成单元(未示出),用于生成如图6所示的控制器。
以上的实施例都是结合图2所示的示例性代码进行描述的。可以理解,对于其他以流程序语言定义的规则,可以用类似的编译器对规则进行编译,产生关联表和触发器,并用类似的控制器根据触发信号和关联表卸载特定分支对应的DLL。然而,可以理解,所述规则、关联表、触发信号都可以采用多种形式来实现。本领域技术人员可以在说明书教导之下根据用户定义的规则相应地设计编译器和控制器。
基于同一发明构思,本发明还提供与上述编译器和控制器对应的执行方法。
图7示出根据本发明一个实施例的编译流程序的流程图。如图7所示,首先在步骤702,读取用户定义的控制规则。该控制规则由流程序语言定义。在步骤704中,根据上述规则,产生关联表,该关联表用于示出每一种流分支和该流分支对应的操作模块。具体地,对于图2所示的流程序代码,通过分析用户定义的控制规则,可以生成如图5所示的关联表。在图5中,该关联表有3个条目,分别示出T1,T2流分支和不区分流分支的情况下流程序所涉及的操作模块以及操作模块之间的连接关系。可以理解,关联表的形式并不局限于图5所示的形式。
在步骤706中,根据用户定义的规则,生成触发器,该触发器用于判断所述流程序适用的条件,将该条件映射为流程序适用的流分支,并发出指示该流分支的触发信号。具体地,在步骤706中通过对用户定义的触发器的逻辑进行分析,用支持分支结构的语言产生一段反映该逻辑的程序代码作为触发器。对于嵌入在操作模块中的触发器,在步骤706中将触发器的判断逻辑代码写入操作模块中。
编译生成的触发器在流程序的执行阶段,就能够对流程序适用的条件进行判断,并产生相应的触发信号。基于产生的触发信号和编译生成的关联表,在执行该流程序时,就能够对流程序中涉及的DLL进行控制。
图8示出根据本发明一个实施例的控制DLL加载状态的方法的流程图。如图所示,在步骤802,响应于接收指示流分支的触发信号,查找记录有流分支和操作模块对应关系的关联表,确定该流分支对应的操作模块;在步骤804,根据所述流分支对应的操作模块卸载不使用的操作模块所调用的DLL。
具体地,在步骤802中,首先对接收的触发信号进行分析。在一个实施例中,该触发信号由编译器生成的触发器产生。对于图2所示的示例性流程序代码,如果触发信号为SG1,则指示了T1分支。接着查询图5所示的关联表,获得T1分支所涉及的操作模块以及连接关系。具体地,相对于流程序所涉及的全部操作模块,在流分支T1中,操作模块P2和P4不再需要,因此,操作模块P2,P4所分别调用的DLL2,DLL4可以被卸载。在获得这些信息的基础上,在步骤804中,控制执行DLL的卸载。具体地,可以向操作模块P2,P4发出结束指令,并调用卸载函数,例如dll.close(),来卸载DLL2和DLL4。类似地,如果触发信号为SG2,则指示了T2分支。通过查询关联表可以得到T2分支对应的操作模块。进一步地,在步骤804中通过向不再需要的操作模块发出结束指令,可以卸载这些模块所调用的DLL。由此,通过用户自定义的规则,实现了对DLL加载状态的控制。
图9示出控制器对流程序操作模块的控制示意图。对比图3可以看出,图9在图3的流程序操作模块外部添加了一个控制器。该控制器可以是由编译器生成,也可以由一段固定的代码来实现。如图9所示,在流程执行时,控制器从嵌入在操作模块P5中的触发器读取触发信号,根据该触发信号和关联表产生控制指令。例如,在接收到的触发信号为SG1时,控制器向操作模块P2,P4发出DLL卸载指令,如虚线箭头所示;在接收到的触发信号为SG2时,控制器向操作模块P8发出DLL卸载指令,如实线箭头所示。
可以理解,图1的编译器和图6的控制器分别可以用来执行图7和图8所示的编译方法和控制DLL加载状态的方法。由此,用户通过定义规则,可以实现对DLL加载状态的自由控制,从而节省系统的计算资源。
本领域技术人员可以理解,上述的编译器、控制器及其方法可以使用计算机可执行指令和/或包含在处理器控制代码中来实现,例如在诸如磁盘、CD或DVD-ROM的载体介质、诸如只读存储器(固件)的可编程的存储器或者诸如光学或电子信号载体的数据载体上提供了这样的代码。本实施例的控制器、编译器及其单元、模块可以由诸如超大规模集成电路或门阵列、诸如逻辑芯片、晶体管等的半导体、或者诸如现场可编程门阵列、可编程逻辑设备等的可编程硬件设备的硬件电路实现,也可以用由各种类型的处理器执行的软件实现,也可以由上述硬件电路和软件的结合实现。
虽然以上结合具体实施例,尤其是结合一个示例性程序代码,对本发明的控制DLL加载状态的装置以及方法进行了详细描述,但本发明并不限于此。本领域普通技术人员能够在说明书教导之下对本发明进行多种变换、替换和修改而不偏离本发明的精神和范围,例如对规则定义的方式、关联表的格式等进行扩展或变换,使其适用于其他情况。应该理解,所有这样的变化、替换、修改仍然落入本发明的保护范围之内。本发明的保护范围由所附权利要求来限定。

Claims (14)

1.一种流程序编译器,用于对包括至少一个操作模块的流程序进行编译,所述至少一个操作模块在所述流程序执行期间需要调用至少一个动态链接库DLL,所述编译器包括:
关联表生成单元,被配置为根据用户定义的至少一条规则生成关联表,该关联表包括至少一个条目,每一个条目指示流程序的一种流分支和该流分支对应的至少一个操作模块;以及
触发器生成单元,被配置为根据所述用户定义的至少一条规则生成触发器,所述触发器用于判断所述流程序适用的条件,将该条件映射至流分支,并发出指示该流分支的触发信号。
2.如权利要求1的编译器,其中所述用户定义的至少一条规则包含在所述流程序中。
3.如权利要求1的编译器,其中所述流分支对应的至少一个操作模块是在该流分支下所述流程序需要的操作模块。
4.如权利要求1的编译器,其中所述流分支对应的至少一个操作模块是在该流分支下所述流程序不需要的操作模块。
5.如权利要求1的编译器,其中所述触发器生成单元还被配置为将触发器嵌入在所述至少一个操作模块中。
6.如权利要求1-5中任一项的编译器,还包括:控制器生成单元,被配置为生成控制器,所述控制器用于根据所述触发信号指示的流分支,查找所述关联表,确定该流分支对应的操作模块,并卸载不使用的操作模块所调用的DLL。
7.一种控制流程序中动态链接库DLL加载状态的装置,所述流程序包括至少一个操作模块,所述至少一个操作模块在所述流程序执行期间需要调用至少一个DLL,所述装置包括控制器,所述控制器包括:
操作模块确定单元,被配置为响应于接收指示流分支的触发信号,查找记录有流分支和操作模块对应关系的关联表,确定所述流分支对应的操作模块;以及
DLL控制单元,被配置为根据所述流分支对应的操作模块卸载不使用的操作模块所调用的DLL。
8.如权利要求7的装置,其中所述触发信号是通过判断所述流程序适用的条件,将该条件映射至流分支而产生的。
9.如权利要求7的装置,其中所述关联表是根据用户定义的至少一条规则生成的,该关联表包括至少一个条目,每一个条目指示流程序的一种流分支和该流分支对应的至少一个操作模块。
10.如权利要求7的装置,其中DLL控制单元进一步被配置为向所述不使用的操作模块发出结束指令,并通过调用结束函数卸载其中的DLL。
11.一种控制流程序中动态链接库DLL加载状态的方法,所述流程序包括至少一个操作模块,所述至少一个操作模块在所述流程序执行期间需要调用至少一个DLL,所述方法包括:
响应于接收指示流分支的触发信号,查找记录有流分支和操作模块对应关系的关联表,确定所述流分支对应的操作模块;以及
根据所述流分支对应的操作模块卸载不使用的操作模块所调用的DLL。
12.如权利要求11的方法,其中所述触发信号是通过判断所述流程序适用的条件,将该条件映射至流分支而产生的。
13.如权利要求11的方法,其中所述关联表是根据用户定义的至少一条规则生成的,该关联表包括至少一个条目,每一个条目指示流程序的一种流分支和该流分支对应的至少一个操作模块。
14.如权利要求11的方法,其中卸载不使用的操作模块所调用的DLL的步骤包括:向所述不使用的操作模块发出结束指令,并通过调用结束函数卸载其中的DLL。
CN2008101707866A 2008-10-29 2008-10-29 控制动态链接库dll加载状态的方法和系统 Active CN101727345B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN2008101707866A CN101727345B (zh) 2008-10-29 2008-10-29 控制动态链接库dll加载状态的方法和系统
US12/607,241 US8589896B2 (en) 2008-10-29 2009-10-28 Method and system for loading status control of DLL
US14/075,664 US9372676B2 (en) 2008-10-29 2013-11-08 Method and system for loading status control of DLL

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2008101707866A CN101727345B (zh) 2008-10-29 2008-10-29 控制动态链接库dll加载状态的方法和系统

Publications (2)

Publication Number Publication Date
CN101727345A true CN101727345A (zh) 2010-06-09
CN101727345B CN101727345B (zh) 2013-09-04

Family

ID=42118629

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2008101707866A Active CN101727345B (zh) 2008-10-29 2008-10-29 控制动态链接库dll加载状态的方法和系统

Country Status (2)

Country Link
US (2) US8589896B2 (zh)
CN (1) CN101727345B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104519011A (zh) * 2013-09-27 2015-04-15 无锡华润微电子有限公司 半导体设备管理系统及其协议转换模块、半导体设备管理方法

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8458676B2 (en) * 2009-06-30 2013-06-04 International Business Machines Corporation Executing platform-independent code on multi-core heterogeneous processors
US9514159B2 (en) * 2010-10-27 2016-12-06 International Business Machines Corporation Database insertions in a stream database environment
US20120130963A1 (en) * 2010-11-24 2012-05-24 Teradata Us, Inc. User defined function database processing
CN102184264B (zh) * 2011-06-16 2012-09-26 东信和平智能卡股份有限公司 一种动态链接库的远程联调方法
CN104239017B (zh) * 2013-06-19 2018-09-14 深圳联友科技有限公司 一种配置及调用自定义表单的规则的方法和系统
US9110681B2 (en) 2013-12-11 2015-08-18 International Business Machines Corporation Recognizing operational options for stream operators at compile-time
CN109933350B (zh) * 2019-03-07 2021-07-16 江苏通付盾信息安全技术有限公司 在应用中嵌入代码的方法、装置及电子设备
EP3770755B1 (en) * 2019-07-23 2024-04-17 Palantir Technologies Inc. Systems and methods for running applications associated with browser-based user interfaces within multi-developer computing platforms
US11681520B2 (en) 2021-04-20 2023-06-20 International Business Machines Corporation Software upgrading using dynamic link library injection

Family Cites Families (60)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2102883A1 (en) * 1993-02-26 1994-08-27 James W. Arendt System and method for lazy loading of shared libraries
EP0744689B1 (en) * 1995-05-26 2002-10-09 Intel Corporation Extensible communication type manager for a computer system
US6769126B1 (en) * 1996-12-10 2004-07-27 International Business Machines Corporation Apparatus and method for demand load analysis
US6802061B1 (en) * 1996-12-12 2004-10-05 Microsoft Corporation Automatic software downloading from a computer network
US6002868A (en) * 1996-12-31 1999-12-14 Compaq Computer Corporation Test definition tool
US6263376B1 (en) 1997-02-24 2001-07-17 Novell, Inc. Generic run-time binding interpreter
US5953534A (en) * 1997-12-23 1999-09-14 University Of Washington Environment manipulation for executing modified executable and dynamically-loaded library files
US6574618B2 (en) * 1998-07-22 2003-06-03 Appstream, Inc. Method and system for executing network streamed application
US6314566B1 (en) * 1998-09-29 2001-11-06 Apple Computer, Inc. Method and apparatus for “Just-in-Time” dynamic loading and unloading of computer software libraries
US6308184B1 (en) * 1999-04-09 2001-10-23 Hewlett-Packard Company Delayed unloading of a dynamically loadable file
US7096465B1 (en) * 1999-05-17 2006-08-22 Invensys Systems, Inc. Process control configuration system with parameterized objects
US6665866B1 (en) * 1999-05-28 2003-12-16 Microsoft Corporation Extensible compiler utilizing a plurality of question handlers
US7430670B1 (en) * 1999-07-29 2008-09-30 Intertrust Technologies Corp. Software self-defense systems and methods
WO2001059999A1 (en) * 2000-02-11 2001-08-16 Convergent Networks, Inc. Service level executable environment for integrated pstn and ip networks and call processing language therefor
US6871344B2 (en) * 2000-04-24 2005-03-22 Microsoft Corporation Configurations for binding software assemblies to application programs
US6698015B1 (en) * 2000-06-13 2004-02-24 Cisco Technology, Inc. Apparatus and method for improving performance of critical code execution
US6708330B1 (en) * 2000-06-13 2004-03-16 Cisco Technology, Inc. Performance improvement of critical code execution
US7062567B2 (en) * 2000-11-06 2006-06-13 Endeavors Technology, Inc. Intelligent network streaming and execution system for conventionally coded applications
US6918113B2 (en) * 2000-11-06 2005-07-12 Endeavors Technology, Inc. Client installation and execution system for streamed applications
US7274659B2 (en) * 2001-07-27 2007-09-25 Western Digital Ventures, Inc. Providing streaming media data
US7080289B2 (en) * 2001-10-10 2006-07-18 Arm Limited Tracing multiple data access instructions
CN100403264C (zh) * 2001-11-07 2008-07-16 华为技术有限公司 Ttcn测试用例执行方法
US7707591B2 (en) * 2002-02-05 2010-04-27 Talkway, Inc. Integration of audio or video program with application program
US7987491B2 (en) * 2002-05-10 2011-07-26 Richard Reisman Method and apparatus for browsing using alternative linkbases
US7159021B2 (en) * 2002-06-27 2007-01-02 Microsoft Corporation System and method for testing peer-to-peer network applications
US7752618B2 (en) * 2002-12-05 2010-07-06 Samsung Electronics Co., Ltd. Apparatus and method for remote DLL linking of software upgrades for a wireless mobile station
US7725884B2 (en) * 2003-02-28 2010-05-25 Microsoft Corporation System and method for compiling markup files
US7441237B2 (en) * 2003-03-25 2008-10-21 Microsoft Corporation System and method for extending a compiler through a composer
US7210124B2 (en) * 2003-06-16 2007-04-24 Microsoft Corporation Reformulating resources with nodes reachable from defined entry points
US20050015621A1 (en) * 2003-07-17 2005-01-20 International Business Machines Corporation Method and system for automatic adjustment of entitlements in a distributed data processing environment
US20050049924A1 (en) * 2003-08-27 2005-03-03 Debettencourt Jason Techniques for use with application monitoring to obtain transaction data
US7856624B2 (en) * 2003-09-15 2010-12-21 Thomas Plum Automated safe secure techniques for eliminating undefined behavior in computer software
GB2407656B (en) * 2003-10-28 2008-12-17 Symbian Ltd Mapping of dynamic link libraries in computing devices
US7430760B2 (en) * 2003-12-05 2008-09-30 Microsoft Corporation Security-related programming interface
US20050193378A1 (en) * 2004-03-01 2005-09-01 Breault Richard E. System and method for building an executable program with a low probability of failure on demand
US7653900B2 (en) * 2004-04-22 2010-01-26 Blue Coat Systems, Inc. System and method for remote application process control
US7730473B2 (en) * 2004-06-30 2010-06-01 Intel Corporation Relieving data marshalling overhead
US20060026584A1 (en) * 2004-07-27 2006-02-02 Muratori Richard D Explicit linking of dynamic link libraries
US7814471B2 (en) * 2004-12-16 2010-10-12 Microsoft Corporation Method and apparatus for providing DLL compatibility
US7900201B1 (en) * 2004-12-21 2011-03-01 Zenprise, Inc. Automated remedying of problems in software application deployments
CN1967574A (zh) * 2005-11-17 2007-05-23 深圳市东进通讯技术股份有限公司 实现综合电信平台流程生成的方法及系统
US20070174824A1 (en) * 2006-01-23 2007-07-26 Microsoft Corporation Techniques for generating and executing browser-hosted applications
US7827525B1 (en) * 2006-06-02 2010-11-02 Richard Paul Navaro Data object utilization in software applications
US7991427B2 (en) * 2006-09-13 2011-08-02 Mformation Technologies, Inc. System and method to provide application management on wireless data terminals by means of device management agent and dynamic link libraries
US8250558B2 (en) * 2006-11-30 2012-08-21 Microsoft Corporation Dynamic linked library add-on features
US9038041B2 (en) * 2006-12-04 2015-05-19 Tibco Software, Inc. Stream processor with compiled programs
US8769485B2 (en) * 2006-12-04 2014-07-01 Tibco Software, Inc. Data parallelism and parallel operations in stream processing
CN100456260C (zh) * 2006-12-21 2009-01-28 华为技术有限公司 一种用于对解释语言程序进行调试方法及装置
US20080163185A1 (en) * 2006-12-29 2008-07-03 Rto Software, Inc. Delay-load optimizer
US8793676B2 (en) * 2007-02-15 2014-07-29 Microsoft Corporation Version-resilient loader for custom code runtimes
US8418206B2 (en) * 2007-03-22 2013-04-09 United Video Properties, Inc. User defined rules for assigning destinations of content
CN100507843C (zh) * 2007-04-05 2009-07-01 杨力祥 一种动态编程方法
JP4668306B2 (ja) * 2007-09-07 2011-04-13 パナソニック株式会社 二次電池の寿命推定装置および二次電池の寿命推定方法
US8516505B2 (en) * 2008-03-14 2013-08-20 Microsoft Corporation Cross-platform compatibility framework for computer applications
US20090249311A1 (en) * 2008-03-31 2009-10-01 International Business Machines Corporation Sharing a native module of compiled code using an abstraction module of interpreted code in a virtual machine environment
US9098316B2 (en) * 2008-09-22 2015-08-04 International Business Machines Corporation Routing function calls to specific-function dynamic link libraries in a general-function environment
US9134973B2 (en) * 2009-02-26 2015-09-15 Red Hat, Inc. Dynamic compiling and loading at runtime
US8949801B2 (en) * 2009-05-13 2015-02-03 International Business Machines Corporation Failure recovery for stream processing applications
US8826250B2 (en) * 2010-06-30 2014-09-02 Bioproduction Group Method for just-in-time compilation and execution of code blocks within discrete event simulations
US8516455B2 (en) * 2011-06-14 2013-08-20 International Business Machines Corporation Dynamic loading of kernel extensions

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104519011A (zh) * 2013-09-27 2015-04-15 无锡华润微电子有限公司 半导体设备管理系统及其协议转换模块、半导体设备管理方法
CN104519011B (zh) * 2013-09-27 2018-06-15 无锡华润微电子有限公司 半导体设备管理系统及其协议转换模块、半导体设备管理方法

Also Published As

Publication number Publication date
US8589896B2 (en) 2013-11-19
US20100106950A1 (en) 2010-04-29
US9372676B2 (en) 2016-06-21
CN101727345B (zh) 2013-09-04
US20140068575A1 (en) 2014-03-06

Similar Documents

Publication Publication Date Title
CN101727345B (zh) 控制动态链接库dll加载状态的方法和系统
US8799881B2 (en) Program parallelization device and program product
US9430203B2 (en) Information processing apparatus and compilation method
CN111966366A (zh) 一种多cpu架构的集群部署的方法和设备
US20140237458A1 (en) Systems and Methods for Efficient Just-In-Time Compilation
CN112379884A (zh) 基于Spark和并行内存计算的流程引擎实现方法及系统
CN111666210A (zh) 一种芯片验证方法及装置
JP2021193618A (ja) モデルトレーニング方法、装置、電子デバイス、記憶媒体、開発システムおよびプログラム
US11295258B2 (en) Cross domain integration in product lifecycle management
JP3561506B2 (ja) 演算システム
CN114489676A (zh) 源代码的处理方法、系统、存储介质及电子设备
Lyu et al. Evaluating a self-manageable architecture for industrial automation systems
CN103064722A (zh) 一种程序统一编译方法及系统
KR101867866B1 (ko) 프로그램의 동적 최적화 방법 및 장치
US11947975B2 (en) Offload server, offload control method, and offload program
EP4252137A1 (en) Automated design of field programmable gate array or other logic device based on artificial intelligence and vectorization of behavioral source code
CN112241268A (zh) 一种keil工程的编译方法、系统及设备
CN112394939A (zh) 基于联盟链的用户合约自动部署方法、装置及存储介质
CN117251166B (zh) 缩短op-build编译时间的编译方法、装置、终端及介质
CN117519733B (zh) 一种项目部署方法、装置、存储介质及电子设备
CN118152314B (zh) 一种基于数据采集适配器的数据交互方法、设备及介质
CN111966479B (zh) 业务处理、风险识别业务处理方法、装置及电子设备
CN115225638B (zh) 服务部署方法、装置、电子设备及计算机可读存储介质
US11567741B2 (en) Memory compiler techniques
CN116560625A (zh) 部署方法、部署装置、芯片、电子设备和介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant