WO2020215425A1 - Software operating method and system, computing device and storage medium - Google Patents

Software operating method and system, computing device and storage medium Download PDF

Info

Publication number
WO2020215425A1
WO2020215425A1 PCT/CN2019/087961 CN2019087961W WO2020215425A1 WO 2020215425 A1 WO2020215425 A1 WO 2020215425A1 CN 2019087961 W CN2019087961 W CN 2019087961W WO 2020215425 A1 WO2020215425 A1 WO 2020215425A1
Authority
WO
WIPO (PCT)
Prior art keywords
data
module
input
buffer area
output
Prior art date
Application number
PCT/CN2019/087961
Other languages
French (fr)
Chinese (zh)
Inventor
张明明
Original Assignee
张明明
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 张明明 filed Critical 张明明
Publication of WO2020215425A1 publication Critical patent/WO2020215425A1/en

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/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • 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
    • 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/448Execution paradigms, e.g. implementations of programming paradigms

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

A software operating method. Operated software comprises a plurality of mutually independent functional modules, wherein the functional modules are suitable for processing input data so as to obtain output data; and the functional modules have input buffer regions for buffering the input data of the functional modules. The method is suitable to be implemented in an operating system, and the operating system resides in a computing device. The method comprises: acquiring a data mapping table of software, wherein the data mapping table is suitable for recording directions of transmission of data between a plurality of functional modules (S210); acquiring output data of one functional module (S220); determining, on the basis of the data mapping table, a subsequent functional module that takes the output data as input data, and storing the output data in an input buffer region of the subsequent functional module (S230); and when the input buffer region comprises all input data required by the subsequent functional module, calling the subsequent functional module to process data (S240).

Description

一种软件运行方法、系统、计算设备及存储介质Software operating method, system, computing device and storage medium 技术领域Technical field
本发明涉及软件工程技术领域,尤其涉及一种软件运行方法、系统、计算设备及存储介质。The present invention relates to the technical field of software engineering, in particular to a software operation method, system, computing device and storage medium.
背景技术Background technique
软件编程中一种典型的编程范式或方法是基于控制流的编程方式。控制流是控制程序逻辑执行的先后顺序,其基本特征是将要开发的目标系统进行功能或步骤的分解,形成一个流程,然后按照步骤依次完成。通用型计算机的处理或运行逻辑就是依照这种方式,使用一个执行单元CPU运行包含一组指令集的程序。因此大多数编程语言如汇编语言、C/C++、JAVA等都是面向控制流的。这种编程范式存在的问题是,随着软件规模增大和复杂度的增加,软件功能间调用增多,使得软件各功能模块间的依赖关系或耦合关系变得庞大复杂。系统的开发难度和维护难度呈指数级的增加。尽管诸如面向对象、事件驱动及各种设计模式的出现,使该问题得到了一定的缓解,但如何设计一个易于开发、维护和扩展软件系统仍是一个急需解决的问题。A typical programming paradigm or method in software programming is the programming method based on control flow. Control flow is the order in which the logic of the control program is executed. Its basic feature is to decompose the target system to be developed into functions or steps to form a flow, and then complete the steps in sequence. The processing or operating logic of a general-purpose computer is in this way, using an execution unit CPU to run a program containing a set of instructions. Therefore, most programming languages such as assembly language, C/C++, JAVA, etc. are control flow-oriented. The problem with this programming paradigm is that with the increase in software scale and complexity, the calls between software functions increase, which makes the dependency or coupling relationship between software functional modules become huge and complicated. The difficulty of system development and maintenance has increased exponentially. Although the emergence of object-oriented, event-driven and various design patterns has alleviated this problem to a certain extent, how to design a software system that is easy to develop, maintain and expand is still an urgent problem to be solved.
面向数据流的编程范式是将系统中必要的可分组的功能封装于独立的功能单元,再通过控制功能单元的数据流动实现系统的整体功能。由于硬件电路由芯片和芯片之间的信号连线构成,因此在面向硬件设计或仿真领域的编程语言,如labview、VHDL、Verilog等均使用了基于数据流的编程范式。The data flow-oriented programming paradigm is to encapsulate the necessary groupable functions in the system into independent functional units, and then realize the overall functions of the system by controlling the data flow of the functional units. Since the hardware circuit is composed of the signal connection between the chip and the chip, programming languages oriented to the field of hardware design or simulation, such as labview, VHDL, Verilog, etc., all use the programming paradigm based on data flow.
因此,需要一种软件运行方法,能够将面向数据流的编程范式引入过程化编程语言中,实现各功能模块间的解耦。Therefore, there is a need for a software operation method that can introduce data flow-oriented programming paradigms into procedural programming languages to achieve decoupling between functional modules.
发明内容Summary of the invention
为此,本发明提供了一种软件运行方法、系统、计算设备及存储介质,以力图解决或至少缓解上面存在的问题。To this end, the present invention provides a software running method, system, computing device and storage medium, in an effort to solve or at least alleviate the above problems.
根据本发明的一个方面,提供一种软件运行方法,所述软件包括多个相互独立的功能模块,所述功能模块适于对输入数据进行处理以得到输出数据,所述功能模块具有用于缓存其输入数据的输入缓存区,所述方法适于在运行系统中执行,所述运行系统驻留于计算设备中,所述方法包括:获取所述软件的数据映射表,所述数据映射表适于记录数据在多个功能模块之间的传递方向;获取一功能模块的输出数据;基于数据映射表,确定以所述输出数据为输入数据的在后功能模块,将所述输出数据存储到所述在后功能模块的输入缓存区中;以及当所述输入缓存区中包括所述在后功能模块所需的所有输入数据时,调用所述在后功能模块以进行数据处理。According to one aspect of the present invention, a software running method is provided, the software includes a plurality of mutually independent functional modules, the functional modules are adapted to process input data to obtain output data, and the functional modules have functions for caching The input buffer area of its input data, the method is adapted to be executed in an operating system, the operating system resides in a computing device, and the method includes: acquiring a data mapping table of the software, the data mapping table being suitable To record the transfer direction of data between multiple functional modules; obtain the output data of a functional module; based on the data mapping table, determine the subsequent functional module with the output data as the input data, and store the output data in all In the input buffer area of the subsequent functional module; and when the input buffer includes all input data required by the subsequent functional module, the subsequent functional module is called for data processing.
可选地,在根据本发明的软件运行方法中,数据映射表配置于所述软件的主模块中 或配置于其他文件中,所述其他文件与所述软件相互独立;所述获取所述软件的数据映射表的步骤包括:从主模块或其他文件中获取并加载数据映射表。Optionally, in the software running method according to the present invention, the data mapping table is configured in the main module of the software or in other files, and the other files are independent of the software; the acquiring of the software The steps of the data mapping table include: obtaining and loading the data mapping table from the main module or other files.
可选地,在根据本发明的软件运行方法中,功能模块还具有用于缓存其输出数据的输出缓存区;所述获取一功能模块的输出数据的步骤包括:从该功能模块的输出缓存区中读取输出数据。Optionally, in the software running method according to the present invention, the functional module further has an output buffer area for buffering its output data; the step of obtaining the output data of a functional module includes: from the output buffer area of the functional module Read the output data in.
可选地,在根据本发明的软件运行方法中,功能模块还包括用于发送输出数据的数据发送接口;所述获取一功能模块的输出数据的步骤包括:接收该功能模块的数据发送接口所发送的输出数据。Optionally, in the software operating method according to the present invention, the functional module further includes a data transmission interface for sending output data; the step of obtaining the output data of a functional module includes: receiving the data transmission interface of the functional module The output data sent.
可选地,在根据本发明的软件运行方法中,功能模块还具有对应的调用入口和用于缓存输入数据状态的输入状态缓存区,当将功能模块的输入数据存储至其输入缓存区后,将输入状态缓存区中相应输入数据的状态设置为可用;所述调用所述在后功能模块以进行数据处理的步骤包括:根据所述输入状态缓存区,检查所述在后功能模块所需的输入数据的状态;在所需的输入数据的状态全部为可用的情况下,调用所述在后功能模块以进行数据处理。Optionally, in the software running method according to the present invention, the function module also has a corresponding call entry and an input state buffer area for buffering the input data state. After the input data of the function module is stored in its input buffer area, Setting the state of the corresponding input data in the input state buffer area to be available; the step of invoking the subsequent function module for data processing includes: according to the input state buffer area, checking what is required by the subsequent function module The state of the input data; when all the states of the required input data are available, call the subsequent function module for data processing.
可选地,在根据本发明的软件运行方法中,功能模块还具有用于缓存输出数据状态的输出状态缓存区;在所述调用所述在后功能模块以进行数据处理的步骤之后,还包括:将所述在后功能模块的输出数据存储至其输出缓存区;以及将其输出状态缓存区中的输出数据的状态设置为可用。Optionally, in the software running method according to the present invention, the function module further has an output state buffer area for buffering the output data state; after the step of calling the subsequent function module for data processing, it further includes : Store the output data of the subsequent functional module in its output buffer area; and set the status of the output data in its output state buffer area to be available.
可选地,在根据本发明的软件运行方法中,还包括:获取并记录各功能模块的输入缓存区、输入状态缓存区、输出缓存区、输出状态缓存区中至少之一的地址,其中,所述输入缓存区、输入状态缓存区、输出缓存区、输出状态缓存区的地址由相应的功能模块提供。Optionally, in the software running method according to the present invention, it further includes: acquiring and recording the address of at least one of the input buffer area, input state buffer area, output buffer area, and output state buffer area of each functional module, wherein, The addresses of the input buffer area, input state buffer area, output buffer area, and output state buffer area are provided by corresponding functional modules.
可选地,在根据本发明的软件运行方法中,功能模块可以以创建多个实例的方式被复用,每个实例分别对应于一个输入缓存区和/或输出缓存区。Optionally, in the software operation method according to the present invention, the functional module may be multiplexed in a manner of creating multiple instances, each instance corresponding to an input buffer area and/or an output buffer area respectively.
可选地,在根据本发明的软件运行方法中,各功能模块的输入数据和输出数据采用数据名称和数据类型的组合来进行标识。Optionally, in the software running method according to the present invention, the input data and output data of each functional module are identified by a combination of data name and data type.
可选地,在根据本发明的软件运行方法中,软件中被调用的第一个功能模块为一个不具有输入数据的功能模块。Optionally, in the software running method according to the present invention, the first function module called in the software is a function module that does not have input data.
根据本发明的一个方面,提供一种软件运行系统,驻留于计算设备中,适于运行软件,所述软件包括多个相互独立的功能模块,所述功能模块适于对输入数据进行处理以得到输出数据,所述软件运行系统包括调度模块,所述调度模块包括:输入缓存区注册接口,适于记录各功能模块的输入缓存区地址,所述输入缓存区用于缓存功能模块的输入数据;模块注册接口,适于记录各功能模块的调用入口地址以及作为其触发条件的输入数据集;数据映射加载接口,适于获取所述软件的数据映射表,并根据所述数据映射表设置功能模块的输出数据到在后功能模块的输入数据的映射关系;数据分发器,适于获取功能模块的输出数据,根据所述数据映射表,将获取到的输出数据发送至相应的在后功能模块的输入缓存区,以及当输入缓存区中包括在后功能模块所需的所有输入数据时,将在后功能模块的调用入口地址发送至调度器;调度器,适于接收功能模块的调用 入口地址并调用功能模块以进行数据处理。According to one aspect of the present invention, a software running system is provided, which resides in a computing device and is suitable for running software. The software includes a plurality of mutually independent functional modules, and the functional modules are adapted to process input data to Obtain output data, the software running system includes a scheduling module, the scheduling module includes: an input buffer register interface, suitable for recording the input buffer address of each functional module, the input buffer is used to buffer the input data of the functional module Module registration interface, suitable for recording the call entry address of each functional module and the input data set as its trigger condition; data mapping loading interface, suitable for obtaining the data mapping table of the software, and setting functions according to the data mapping table The mapping relationship between the output data of the module and the input data of the subsequent functional module; the data distributor is adapted to obtain the output data of the functional module, and send the obtained output data to the corresponding subsequent functional module according to the data mapping table When the input buffer area includes all the input data required by the subsequent function module, the call entry address of the subsequent function module is sent to the scheduler; the scheduler is suitable for receiving the call entry address of the function module And call the function module for data processing.
可选地,在根据本发明的软件运行系统中,所述数据映射表配置于所述软件的主模块中或配置于其他文件中,所述其他文件与所述软件相互独立;所述数据映射加载接口适于:从主模块或其他文件中获取并加载数据映射表。Optionally, in the software operating system according to the present invention, the data mapping table is configured in the main module of the software or configured in other files, and the other files are independent of the software; the data mapping table The loading interface is suitable for: obtaining and loading the data mapping table from the main module or other files.
可选地,在根据本发明的软件运行系统中,所述调度模块还包括:输出缓存区注册接口,适于记录各功能模块的输出缓存区地址,所述输出缓存区用于缓存功能模块的输出数据;所述数据分发器适于:从功能模块的输出缓存区中读取输出数据。Optionally, in the software operating system according to the present invention, the scheduling module further includes: an output buffer area registration interface, adapted to record the output buffer area addresses of each functional module, and the output buffer area is used for buffering function modules. Output data; the data distributor is adapted to: read output data from the output buffer area of the functional module.
可选地,在根据本发明的软件运行系统中,所述功能模块包括用于发送输出数据的数据发送接口;所述调度模块还包括:数据接收接口,适于接收功能模块的数据发送接口所发送的输出数据,以及将接收到的输出数据发送至所述数据分发器。Optionally, in the software operating system according to the present invention, the function module includes a data transmission interface for sending output data; the scheduling module further includes: a data receiving interface, a data transmission interface suitable for receiving the function module Sending the output data, and sending the received output data to the data distributor.
可选地,在根据本发明的软件运行系统中,所述调度模块还包括:输入状态缓存区注册接口,适于记录各功能模块的输入状态缓存区地址,所述输入状态缓存区用于缓存功能模块的输入数据的状态;所述数据分发器还适于:在输入缓存区中包括在后功能模块所需的所有输入数据且这些输入数据全部可用时,将在后功能模块的调用入口地址发送至调度器,以便调度器调用所述在后功能模块。Optionally, in the software operating system according to the present invention, the scheduling module further includes: an input state buffer area registration interface, adapted to record the input state buffer area address of each functional module, and the input state buffer area is used for buffering The state of the input data of the functional module; the data distributor is also suitable for: including all the input data required by the subsequent functional module in the input buffer area and all of these input data are available, the call entry address of the subsequent functional module Send to the scheduler so that the scheduler can call the subsequent function module.
可选地,在根据本发明的软件运行系统中,所述调度模块还包括:输出状态缓存区注册接口,适于记录各功能模块的输出状态缓存区地址,所述输出状态缓存区用于缓存功能模块的输出数据的状态;所述调度器适于:在调用功能模块以进行数据处理后,将功能模块的输出数据存储至其输出缓存区,以及将其输出状态缓存区中的输出数据的状态设置为可用。Optionally, in the software operating system according to the present invention, the scheduling module further includes: an output state buffer area registration interface, adapted to record the address of the output state buffer area of each functional module, and the output state buffer area is used for buffering The state of the output data of the function module; the scheduler is suitable for: after calling the function module for data processing, store the output data of the function module in its output buffer area, and store the output data in its output state buffer area The status is set to available.
可选地,在根据本发明的软件运行系统中,所述调度模块还包括:数据映射解除接口,适于将功能模块的输出数据到在后功能模块的输入数据的映射关系从所述数据映射表中删除。Optionally, in the software operating system according to the present invention, the scheduling module further includes: a data mapping release interface adapted to map the mapping relationship between the output data of the functional module to the input data of the subsequent functional module from the data mapping Delete from the table.
可选地,在根据本发明的软件运行系统中,所述调度模块还包括:系统控制接口,适于接收控制数据以控制所述软件的运行。Optionally, in the software operating system according to the present invention, the scheduling module further includes: a system control interface adapted to receive control data to control the operation of the software.
可选地,在根据本发明的软件运行系统中,所述系统控制接口包括:启动接口,适于接收启动数据以启动所述软件的运行,或者将指定的功能模块的调用入口地址发送至调度器以启动所述软件的运行。Optionally, in the software operating system according to the present invention, the system control interface includes: a startup interface, adapted to receive startup data to start the operation of the software, or send the call entry address of the designated function module to the dispatcher To start the operation of the software.
根据本发明的一个方面,提供一种计算设备,包括:至少一个处理器和存储有程序指令的存储器;当所述程序指令被所述处理器读取并执行时,使得所述计算设备执行如上所述的软件运行方法。According to one aspect of the present invention, there is provided a computing device, including: at least one processor and a memory storing program instructions; when the program instructions are read and executed by the processor, the computing device is caused to execute the above The described software operation method.
根据本发明的一个方面,提供一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行如上所述的软件运行方法。According to one aspect of the present invention, there is provided a readable storage medium storing program instructions, when the program instructions are read and executed by a computing device, the computing device is caused to execute the software running method described above.
根据本发明的技术方案,通过将软件分为多个独立的模块,实现了功能模块的解耦,为解决软件开发过程中的大分工问题提供了必要的技术手段。该方案不仅使功能模块可一次开发处处可用,提高开发效率,而且使得开发的软件便于修改和维护,具有广泛的应用价值。According to the technical solution of the present invention, by dividing the software into multiple independent modules, the decoupling of the functional modules is realized, and the necessary technical means are provided for solving the large division of labor in the software development process. This solution not only makes the functional modules available for one-time development everywhere and improves development efficiency, but also makes the developed software easy to modify and maintain, and has a wide range of application values.
附图说明Description of the drawings
为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。In order to achieve the above and related purposes, this article describes certain illustrative aspects in conjunction with the following description and drawings. These aspects indicate various ways in which the principles disclosed herein can be practiced, and all aspects and their equivalents are intended to be Into the scope of the claimed subject matter. By reading the following detailed description in conjunction with the accompanying drawings, the above and other objectives, features and advantages of the present disclosure will become more apparent. Throughout this disclosure, the same reference numerals generally refer to the same parts or elements.
图1示出了根据本发明的一个实施例的计算设备100的构造示意图;FIG. 1 shows a schematic diagram of the structure of a computing device 100 according to an embodiment of the present invention;
图2示出了根据本发明的一个实施例的软件运行方法200的流程图;FIG. 2 shows a flowchart of a software running method 200 according to an embodiment of the present invention;
图3示出了根据本发明一个实施例的软件运行系统300的示意图;FIG. 3 shows a schematic diagram of a software running system 300 according to an embodiment of the present invention;
图4~图6分别示出了根据本发明一个实施例的调度模块400的结构图、相应的软件运行方法的流程图、以及相应的功能模块之间的数据流图;4 to 6 respectively show a structure diagram of a scheduling module 400 according to an embodiment of the present invention, a flowchart of a corresponding software operation method, and a data flow diagram between corresponding functional modules;
图7~图9分别示出了根据本发明另一个实施例的调度模块700的结构图、相应的软件运行方法的流程图、以及相应的功能模块实例之间的数据流图。7-9 respectively show a structure diagram of a scheduling module 700 according to another embodiment of the present invention, a flowchart of a corresponding software operation method, and a data flow diagram between corresponding functional module instances.
具体实施方式Detailed ways
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。Hereinafter, exemplary embodiments of the present disclosure will be described in more detail with reference to the accompanying drawings. Although exemplary embodiments of the present disclosure are shown in the drawings, it should be understood that the present disclosure may be implemented in various forms and should not be limited by the embodiments set forth herein. On the contrary, these embodiments are provided to enable a more thorough understanding of the present disclosure and to fully convey the scope of the present disclosure to those skilled in the art.
在软件工程中,为了解决基于控制流的编程语言各功能模块之间存在耦合,使得系统的开发和维度难度增加的问题,本方案提供一种基于数据流的软件运行方法,能够实现各功能模块的解耦。In software engineering, in order to solve the problem of coupling between the functional modules of the programming language based on control flow, which makes the development and dimension of the system more difficult, this solution provides a data flow-based software operation method that can realize each functional module Decoupling.
图1是示例计算设备100的框图。在基本的配置102中,计算设备100典型地包括系统存储器106和一个或者多个处理器104。存储器总线108可以用于在处理器104和系统存储器106之间的通信。FIG. 1 is a block diagram of an example computing device 100. In the basic configuration 102, the computing device 100 typically includes a system memory 106 and one or more processors 104. The memory bus 108 may be used for communication between the processor 104 and the system memory 106.
取决于期望的配置,处理器104可以是任何类型的处理器,包括但不限于:微处理器(μP)、微控制器(μC)、数字信息处理器(DSP)或者它们的任何组合。处理器104可以包括诸如一级高速缓存110和二级高速缓存112之类的一个或者多个级别的高速缓存、处理器核心114和寄存器116。示例的处理器核心114可以包括运算逻辑单元(ALU)、浮点数单元(FPU)、数字信号处理核心(DSP核心)或者它们的任何组合。示例的存储器控制器118可以与处理器104一起使用,或者在一些实现中,存储器控制器118可以是处理器104的一个内部部分。Depending on the desired configuration, the processor 104 may be any type of processor, including but not limited to: a microprocessor (μP), a microcontroller (μC), a digital information processor (DSP), or any combination thereof. The processor 104 may include one or more levels of cache, such as the first level cache 110 and the second level cache 112, the processor core 114, and the registers 116. The exemplary processor core 114 may include an arithmetic logic unit (ALU), a floating point number unit (FPU), a digital signal processing core (DSP core), or any combination thereof. The example memory controller 118 may be used with the processor 104, or in some implementations, the memory controller 118 may be an internal part of the processor 104.
取决于期望的配置,系统存储器106可以是任意类型的存储器,包括但不限于:易失性存储器(诸如RAM)、非易失性存储器(诸如ROM、闪存等)或者它们的任何组合。系统存储器106可以包括操作系统120、一个或者多个应用122以及程序数据124。在一些实施方式中,应用122可以布置为在操作系统上利用程序数据124进行操作。在一些实施例中,应用122包括软件运行系统,软件运行系统包括用于执行本发明的软件运行方法200的指令,使得计算设备100可以执行软件运行方法200。软件运行方法200的具体实 施步骤将于下文中详述。Depending on the desired configuration, the system memory 106 may be any type of memory, including but not limited to: volatile memory (such as RAM), non-volatile memory (such as ROM, flash memory, etc.), or any combination thereof. The system memory 106 may include an operating system 120, one or more applications 122, and program data 124. In some embodiments, the application 122 may be arranged to operate with the program data 124 on the operating system. In some embodiments, the application 122 includes a software operating system, and the software operating system includes instructions for executing the software operating method 200 of the present invention, so that the computing device 100 can execute the software operating method 200. The specific implementation steps of the software operation method 200 will be detailed below.
计算设备100还可以包括有助于从各种接口设备(例如,输出设备142、外设接口144和通信设备146)到基本配置102经由总线/接口控制器130的通信的接口总线140。示例的输出设备142包括图形处理单元148和音频处理单元150。它们可以被配置为有助于经由一个或者多个A/V端口152与诸如显示器或者扬声器之类的各种外部设备进行通信。示例外设接口144可以包括串行接口控制器154和并行接口控制器156,它们可以被配置为有助于经由一个或者多个I/O端口158和诸如输入设备(例如,键盘、鼠标、笔、语音输入设备、图像输入设备)或者其他外设(例如打印机、扫描仪等)之类的外部设备进行通信。示例的通信设备146可以包括网络控制器160,其可以被布置为便于经由一个或者多个通信端口164与一个或者多个其他计算设备162通过网络通信链路的通信。The computing device 100 may also include an interface bus 140 that facilitates communication from various interface devices (eg, output device 142, peripheral interface 144, and communication device 146) to the basic configuration 102 via the bus/interface controller 130. The example output device 142 includes a graphics processing unit 148 and an audio processing unit 150. They can be configured to facilitate communication with various external devices such as displays or speakers via one or more A/V ports 152. The example peripheral interface 144 may include a serial interface controller 154 and a parallel interface controller 156, which may be configured to facilitate communication via one or more I/O ports 158 and input devices such as keyboards, mice, pens, etc. , Voice input devices, image input devices) or other peripherals (such as printers, scanners, etc.) to communicate. The example communication device 146 may include a network controller 160, which may be arranged to facilitate communication with one or more other computing devices 162 via a network communication link via one or more communication ports 164.
网络通信链路可以是通信介质的一个示例。通信介质通常可以体现为在诸如载波或者其他传输机制之类的调制数据信号中的计算机可读指令、数据结构、程序模块,并且可以包括任何信息递送介质。“调制数据信号”可以是这样的信号,它的数据集中的一个或者多个或者它的改变可以在信号中以编码信息的方式进行。作为非限制性的示例,通信介质可以包括诸如有线网络或者专线网络之类的有线介质,以及诸如声音、射频(RF)、微波、红外(IR)或者其它无线介质在内的各种无线介质。这里使用的术语计算机可读介质可以包括存储介质和通信介质二者。在一些实施例中,计算机可读介质中存储一个或多个程序,这一个或多个程序中包括执行某些方法的指令。A network communication link may be an example of a communication medium. The communication medium may generally be embodied as computer readable instructions, data structures, and program modules in a modulated data signal such as a carrier wave or other transmission mechanism, and may include any information delivery medium. A "modulated data signal" may be a signal, one or more of its data sets or its changes may be carried out in the signal in a manner of encoding information. As a non-limiting example, communication media may include wired media such as a wired network or a dedicated line network, and various wireless media such as sound, radio frequency (RF), microwave, infrared (IR), or other wireless media. The term computer readable media used herein may include both storage media and communication media. In some embodiments, a computer-readable medium stores one or more programs, and the one or more programs include instructions for executing certain methods.
计算设备100可以实现为小尺寸便携(或者移动)电子设备的一部分,这些电子设备可以是诸如蜂窝电话、数码照相机、个人数字助理(PDA)、个人媒体播放器设备、无线网络浏览设备、个人头戴设备、应用专用设备、或者可以包括上面任何功能的混合设备。当然,计算设备100也可以实现为包括桌面计算机和笔记本计算机配置的个人计算机,或者是具有上述配置的服务器。本发明的实施方式对此均不作限制。The computing device 100 can be implemented as a part of small-sized portable (or mobile) electronic devices, such as cellular phones, digital cameras, personal digital assistants (PDAs), personal media player devices, wireless web browsing devices, personal heads Wearable devices, application-specific devices, or hybrid devices that can include any of the above functions. Of course, the computing device 100 can also be implemented as a personal computer including a desktop computer and a notebook computer configuration, or a server with the above configuration. The embodiments of the present invention do not limit this.
在本发明的实施例中,计算设备中部署有软件运行系统,使得计算设备能够执行本发明的软件运行方法200。其中,软件运行系统是一种用于运行软件代码的系统。例如可以实现为软件的集成开发环境(IDE),可以集成代码编写、分析、编译、调试等功能。现有的集成开发环境有visual stodio、eclipse、Delphi等,本发明的软件运行系统可以是完全自主研发的开发环境,也可以是在现有的开发环境上进行改进。软件代码可以是基于汇编语言、C/C++语言、JAVA语言、python语言等任意一种开发语言编写的。In the embodiment of the present invention, a software running system is deployed in the computing device, so that the computing device can execute the software running method 200 of the present invention. Among them, the software operating system is a system used to run software codes. For example, it can be implemented as a software integrated development environment (IDE), which can integrate functions such as code writing, analysis, compilation, and debugging. The existing integrated development environments include visual stodio, eclipse, Delphi, etc., and the software operating system of the present invention can be a completely independent research and development environment, or it can be improved on the existing development environment. The software code can be written based on any development language such as assembly language, C/C++ language, JAVA language, python language.
为了避免因软件的各功能模块间相互耦合所造成的开发、维护困难的问题,本发明的待运行的软件(以下简称“软件”)采用数据流的范式编写,本发明的软件运行系统能够对以数据流范式编写的软件进行编译并运行。In order to avoid the difficulty of development and maintenance caused by the mutual coupling between the functional modules of the software, the software to be run (hereinafter referred to as "software") of the present invention is written in the data flow paradigm, and the software operating system of the present invention can Software written in the data flow paradigm is compiled and run.
图2示出了根据本发明的一个实施例的软件运行方法200的示意性流程图。该方法适于在软件运行系统中执行,软件运行系统驻留于计算设备中。FIG. 2 shows a schematic flowchart of a software running method 200 according to an embodiment of the present invention. The method is suitable for execution in a software operating system, which resides in a computing device.
在本发明的实施例中,软件包括多个相互独立的功能模块。各功能模块之间不存在耦合关系,能够对一组数据完成独立的数据处理,即,各功能模块可以接收各自的输入数据,对接收到的输入数据进行处理,以得到各自的输出数据。为了标记数据(输入数据和输出数据)与功能模块之间的关联关系以及辨识不同的数据类型,可以使用数据名称和数据类型的组合来标识数据。数据类型包括字符串、整型、浮点型、数组、对象、无类 型等。例如可以采用字符串或整型来标识。在本发明的实施例中,数据名称和数据类型的组合可以称之为命名数据。In the embodiment of the present invention, the software includes a plurality of mutually independent functional modules. There is no coupling relationship between the functional modules, and independent data processing can be performed on a group of data, that is, each functional module can receive its own input data and process the received input data to obtain its own output data. In order to mark the association between data (input data and output data) and functional modules and to identify different data types, a combination of data name and data type can be used to identify data. The data types include string, integer, floating point, array, object, no type, etc. For example, it can be identified by string or integer. In the embodiment of the present invention, the combination of data name and data type can be called named data.
功能模块可以包括对应的调用入口、用于缓存输入数据的输入缓存区和用于缓存输入数据状态的输入状态缓存区。在本发明的一个实现方式中,功能模块的输入缓存区地址和输入状态缓存区地址由对应的功能模块提供或者在软件运行时建立。The function module may include a corresponding call entry, an input buffer area for buffering input data, and an input state buffer area for buffering the state of input data. In an implementation of the present invention, the input buffer area address and the input state buffer area address of the functional module are provided by the corresponding functional module or established when the software is running.
需要说明的是,本发明中的功能模块可以以创建多个实例的方式被复用,一个功能模块所对应的多个实例具有相同的处理功能,其区别在于处理的数据不同,相应地,每个实例分别对应于一个输入缓存区和/或输出缓存区,以及相应的输入状态缓存区和/或输出状态缓存区。如图2所示,方法200始于步骤S210。It should be noted that the functional modules in the present invention can be multiplexed by creating multiple instances. Multiple instances corresponding to one functional module have the same processing function. The difference lies in the data being processed. Each instance corresponds to an input buffer area and/or output buffer area, and a corresponding input state buffer area and/or output state buffer area. As shown in Fig. 2, the method 200 starts at step S210.
在步骤S210中,获取软件的数据映射表,数据映射表适于记录数据在多个功能模块之间的传递方向。In step S210, a data mapping table of the software is obtained, and the data mapping table is suitable for recording the transfer direction of data among multiple functional modules.
根据一种实施例,数据映射表可以配置于软件的一个功能模块中,例如,配置于软件的主模块中,即,在main函数中直接定义数据映射表,相应地,在运行软件时,从主模块中动态获取并加载数据映射表。According to an embodiment, the data mapping table can be configured in a functional module of the software, for example, in the main module of the software, that is, the data mapping table is directly defined in the main function. Accordingly, when the software is running, The data mapping table is dynamically obtained and loaded in the main module.
数据映射表也可以配置于其他文件中,该其他文件独立于软件主体保存。相应地,在运行软件时,从该其他文件中动态获取并加载数据映射表。The data mapping table can also be configured in other files, which are stored independently of the main body of the software. Correspondingly, when the software is running, the data mapping table is dynamically obtained and loaded from the other file.
数据映射表中记录了数据在多个功能模块之间的传递方向。具体地,数据映射表中包括多条输出数据到输入数据的映射关系,例如,映射关系link(“Module_A_Output”,“Module_B_X”)表示,将功能模块A的输出数据Module_A_Output映射到功能模块B的输入数据Module_B_X,即,当功能模块A调用完毕,产生输出数据Module_A_Output后,输出数据Module_A_Output将作为功能模块B的输入数据Module_B_X,参与功能模块B的数据处理。The data mapping table records the direction of data transfer between multiple functional modules. Specifically, the data mapping table includes multiple pieces of output data to input data mapping relationship, for example, the mapping relationship link ("Module_A_Output", "Module_B_X") indicates that the output data Module_A_Output of function module A is mapped to the input of function module B The data Module_B_X, that is, when the function module A is called and the output data Module_A_Output is generated, the output data Module_A_Output will be used as the input data Module_B_X of the function module B to participate in the data processing of the function module B.
数据映射表中的多条映射关系示出了数据在多个功能模块之间的传递方向,相应地,软件的各功能模块可以根据数据映射表所指示的顺序依次被调用,执行相应的数据处理功能。除了软件的起始功能模块(即软件中第一个被调用的功能模块)和终止功能模块(软件中最后被调用的功能模块)之外,其他功能模块产生的输出数据需要按照数据映射表传递至至少一个在后的功能模块,以便在后功能模块进行数据处理。The multiple mapping relationships in the data mapping table show the direction of data transfer between multiple functional modules. Correspondingly, each functional module of the software can be called in sequence according to the order indicated by the data mapping table to perform corresponding data processing Features. Except for the start function module of the software (that is, the first function module called in the software) and the termination function module (the last function module called in the software), the output data generated by other function modules need to be transferred according to the data mapping table To at least one subsequent functional module, so that the subsequent functional module can perform data processing.
随后,在步骤S220中,获取一功能模块的输出数据。Subsequently, in step S220, the output data of a functional module is obtained.
根据功能模块的具体配置情况,功能模块的输出数据有不同的获取方式。According to the specific configuration of the functional module, the output data of the functional module can be obtained in different ways.
根据一种实施例,功能模块具有用于缓存其输出数据的输出缓存区,相应地,在步骤S220中,可以从功能模块的输出缓存区中读取输出数据。功能模块的输出缓存区的地址例如可以由功能模块来提供,即,在功能模块中定义其输出缓存区。According to an embodiment, the functional module has an output buffer area for buffering its output data. Accordingly, in step S220, the output data can be read from the output buffer area of the functional module. The address of the output buffer area of the functional module can be provided by the functional module, for example, that is, the output buffer area of the functional module is defined in the functional module.
根据另一种实施例,功能模块中包括用于发送输出数据的数据发送接口(数据发送接口例如可以是send函数),相应地,在步骤S220中,可以通过相应的数据接收接口来接收功能模块的数据发送接口所发送的输出数据。According to another embodiment, the function module includes a data sending interface for sending output data (the data sending interface may be, for example, a send function). Accordingly, in step S220, the function module may be received through a corresponding data receiving interface The output data sent by the data sending interface.
随后,在步骤S230中,基于数据映射表,确定以输出数据为输入数据的在后功能模块,将输出数据存储到在后功能模块的输入缓存区中。Subsequently, in step S230, based on the data mapping table, the subsequent functional module whose output data is the input data is determined, and the output data is stored in the input buffer area of the subsequent functional module.
根据一种实施例,功能模块还具有用于缓存输入数据状态的输入状态缓存区。当将 功能模块的输入数据存储至其输入缓存区后,将输入状态缓存区中相应输入数据对状态设置为可用。例如,功能模块B具有对应的输入缓存区InputBuffer_B和输入状态缓存区InputStatusBuffer_B,功能模块B的输入数据包括Module_B_X和Module_B_Y。输入缓存区InputBuffer_B中存储有输入数据Module_B_X和Module_B_Y的值,输入状态缓存区InputStatusBuffer_B中存储有输入数据Module_B_X和Module_B_Y的状态标识,状态标识的取值例如包括0和1,状态标识为0时,表示输入数据可用(即输入数据已获取);状态标识为1时,表示输入数据不可用(即输入数据尚未获取)。在初始状态下,输入状态缓存区InputStatusBuffer_B中的状态标识均为1,即输入数据均尚未获取,处于不可用状态。当某一输入数据被存储至输入缓存区后,例如,当输入数据Module_B_X被存储至输入缓存区InputBuffer_B后,将输入状态缓存区InputStatusBuffer_B中对应于输入数据Module_B_X的状态设置为可用,即将输入数据Module_B_X对应的状态标识Module_B_X_Status的值设置为0。According to an embodiment, the functional module further has an input state buffer area for buffering the input data state. When the input data of the functional module is stored in its input buffer area, the corresponding input data in the input state buffer area is set to be available. For example, the function module B has a corresponding input buffer area InputBuffer_B and an input status buffer area InputStatusBuffer_B, and the input data of the function module B includes Module_B_X and Module_B_Y. The input buffer InputBuffer_B stores the values of the input data Module_B_X and Module_B_Y, and the input status buffer InputStatusBuffer_B stores the status flags of the input data Module_B_X and Module_B_Y. The value of the status flag includes, for example, 0 and 1. When the status flag is 0, it means The input data is available (that is, the input data has been obtained); when the status flag is 1, it means that the input data is not available (that is, the input data has not been obtained). In the initial state, the status flags in the input status buffer InputStatusBuffer_B are all 1, that is, the input data has not been obtained yet and is in an unavailable state. When a certain input data is stored in the input buffer area, for example, when the input data Module_B_X is stored in the input buffer area InputBuffer_B, the state corresponding to the input data Module_B_X in the input status buffer InputStatusBuffer_B is set to available, that is, the input data Module_B_X The value of the corresponding status identifier Module_B_X_Status is set to 0.
随后,在步骤S240中,当输入缓存区中包括在后功能模块所需的所有输入数据时,调用在后功能模块以进行数据处理。Subsequently, in step S240, when all input data required by the subsequent functional module is included in the input buffer area, the subsequent functional module is called for data processing.
根据本发明的一个实施例,可以检查在后功能模块所需的输入数据的状态,在输入数据的状态全部为可用的情况下,确定在后功能模块满足调用条件,调用在后功能模块进行数据处理。根据一种实施例,在调用在后功能模块之后可以清空在后功能模块的输入缓存区和输入状态缓存区(即将输入状态缓存区中存储的状态标识复位为初始值)。According to an embodiment of the present invention, the status of the input data required by the subsequent function module can be checked. When the status of the input data is all available, it is determined that the subsequent function module meets the calling conditions, and the subsequent function module is called for data deal with. According to an embodiment, the input buffer area and the input state buffer area of the subsequent function module can be cleared after the subsequent function module is called (that is, the state identifier stored in the input state buffer area is reset to the initial value).
根据一种实施例,功能模块还具有用于缓存输出数据状态的输出状态缓存区。输出状态缓存区的地址例如可以由功能模块来提供,即,在功能模块中定义其输出状态缓存区。在调用在后功能模块进行数据处理后,将在后功能模块的输出数据存储至其输出缓存区,并将其输出状态缓存区中的输出数据的状态设置为可用。According to an embodiment, the functional module also has an output state buffer area for buffering the output data state. The address of the output state buffer area can be provided by the functional module, for example, that is, the output state buffer area is defined in the functional module. After calling the subsequent functional module for data processing, the output data of the subsequent functional module is stored in its output buffer area, and the state of the output data in its output state buffer area is set to available.
需要说明的是,步骤S220~S240以一个功能模块为例,描述了将该功能模块产生的输出数据传递至在后功能模块,以及调用在后功能模块进行数据处理的过程。本领域技术人员可以理解,在一个软件的运行过程中,针对多个功能模块,步骤S220~S240需要循环执行多次,直至调用最后一个功能模块得到整个软件的输出结果为止。It should be noted that steps S220 to S240 take a functional module as an example, and describe the process of transferring the output data generated by the functional module to the subsequent functional module and calling the subsequent functional module for data processing. Those skilled in the art can understand that during the running process of a software, for multiple functional modules, steps S220 to S240 need to be executed repeatedly until the last functional module is called to obtain the output result of the entire software.
另外,需要说明的是,本发明的软件运行系统可以运行在单线程模式或多线程模式下,在单线程模式下,任一时刻系统只有一个功能模块运行。当调度模块中存在正在运行的功能模块时,则等待功能模块运行结束;当调度模块中不存在正在运行的模块时,则结束运行并返回。通过增加多线程管理功能,可以实现功能模块的并发执行以提高运行效率。或者通过增加队列管理,以减少系统调用时的堆栈使用。本方案对此不再进行相关描述。In addition, it should be noted that the software running system of the present invention can run in a single-thread mode or a multi-thread mode. In the single-thread mode, the system has only one functional module running at any time. When there is a running function module in the scheduling module, it waits for the running of the function module to end; when there is no running module in the scheduling module, it ends the running and returns. By adding multi-threaded management functions, concurrent execution of functional modules can be implemented to improve operating efficiency. Or increase queue management to reduce stack usage during system calls. This solution will not be described again.
方法200阐述了软件运行系统运行软件的方法过程。以下将详细介绍软件运行系统的组成结构。The method 200 illustrates the method and process of the software operating system to run the software. The following will introduce the composition structure of the software operating system in detail.
图3示出了根据本发明一个实施例的软件运行系统300的示意图。软件运行系统300驻留于计算设备(例如前述计算设备100)中,适于执行本发明的软件运行方法200。如图3所示,软件运行系统300包括调度模块,在本发明的实施例中,调度模块为软件运行系统300中的关键模块,其用于根据软件的数据映射表,以数据流的方式来运行软件。本领域技术人员可以理解,除调度模块之外,软件运行系统300还包括其他模块,例如代码 编译模块、代码调试模块等,但不限于此。FIG. 3 shows a schematic diagram of a software running system 300 according to an embodiment of the present invention. The software operating system 300 resides in a computing device (such as the aforementioned computing device 100), and is suitable for executing the software operating method 200 of the present invention. As shown in FIG. 3, the software operating system 300 includes a scheduling module. In the embodiment of the present invention, the scheduling module is a key module in the software operating system 300, which is used for data flow according to the data mapping table of the software. Run the software. Those skilled in the art can understand that in addition to the scheduling module, the software running system 300 also includes other modules, such as a code compiling module, a code debugging module, etc., but it is not limited thereto.
如图3所示,调度模块包括输入缓存区注册接口302、模块注册接口304、数据映射设置接口306、数据分发器308和调度器310。As shown in FIG. 3, the scheduling module includes an input buffer registration interface 302, a module registration interface 304, a data mapping setting interface 306, a data distributor 308, and a scheduler 310.
输入缓存区注册接口302适于记录各功能模块的输入缓存区地址,输入缓存区用于缓存功能模块的输入数据。The input buffer register interface 302 is adapted to record the address of the input buffer of each functional module, and the input buffer is used to buffer the input data of the functional module.
模块注册接口304适于记录各功能模块的调用入口地址以及作为其触发条件的输入数据集。The module registration interface 304 is suitable for recording the call entry address of each function module and the input data set as its trigger condition.
数据映射加载接口306适于获取软件的数据映射表,并根据数据映射表设置功能模块的输出数据到在后功能模块的输入数据的映射关系。The data mapping loading interface 306 is adapted to obtain the data mapping table of the software, and set the mapping relationship between the output data of the functional module and the input data of the subsequent functional module according to the data mapping table.
根据一种实施例,数据映射表可以配置于软件的一个功能模块中,例如,配置于软件的主模块中,即在main函数中直接定义数据映射表;也可以配置于其他文件中,该其他文件独立于软件主体保存。相应地,数据映射加载接口306适于从主模块或其他文件中动态获取并加载数据映射表。According to an embodiment, the data mapping table can be configured in a functional module of the software, for example, in the main module of the software, that is, the data mapping table is directly defined in the main function; it can also be configured in other files. The file is stored independently of the main body of the software. Correspondingly, the data mapping loading interface 306 is adapted to dynamically obtain and load the data mapping table from the main module or other files.
数据分发器308适于获取功能模块的输出数据,根据数据映射表,将获取到的输出数据发送至相应的在后功能模块的输入缓存区,以及当输入缓存区中包括在后功能模块所需的所有输入数据时,将在后功能模块的调用入口地址发送至调度器。The data distributor 308 is adapted to obtain the output data of the functional module, and send the obtained output data to the input buffer area of the corresponding subsequent functional module according to the data mapping table, and when the input buffer area is included in the subsequent functional module's required When all input data of the following function module is input, the call entry address of the subsequent function module is sent to the scheduler.
功能模块的输出数据有多种获取方式。根据一种实施例,调度模块还包括输出缓存区注册接口312,适于记录各功能模块的输出缓存区地址,输出缓存区用于缓存功能模块的输出数据。相应地,数据分发器308适于从功能模块的输出缓存区中读取输出数据。There are many ways to obtain the output data of the function module. According to an embodiment, the scheduling module further includes an output buffer register interface 312, adapted to record the output buffer address of each functional module, and the output buffer is used to buffer the output data of the functional module. Correspondingly, the data distributor 308 is adapted to read output data from the output buffer area of the functional module.
根据另一种实施例,功能模块包括用于发送输出数据的数据发送接口,调度模块还包括数据接收接口314,数据接收接口314适于接收功能模块的数据发送接口所发送的输出数据,以及将接收到的输出数据发送至数据分发器308。相应地,数据分发器308从数据接受接口314处获取功能模块的输出数据。According to another embodiment, the function module includes a data sending interface for sending output data, and the scheduling module further includes a data receiving interface 314. The data receiving interface 314 is adapted to receive the output data sent by the data sending interface of the function module, and The received output data is sent to the data distributor 308. Correspondingly, the data distributor 308 obtains the output data of the functional module from the data acceptance interface 314.
根据一种实施例,调度模块还包括输入状态缓存区注册接口316,接口316适于记录各功能模块的输入状态缓存区地址,输入状态缓存区用于缓存功能模块的输入数据的状态。相应地,数据分发器308还适于检查在后功能模块的输入数据的状态,在输入缓存区中包括在后功能模块所需的所有输入数据且这些输入数据全部可用时,将在后功能模块的调用入口地址发送至调度器,以便调度器调用所述在后功能模块。According to an embodiment, the scheduling module further includes an input state buffer register interface 316, the interface 316 is adapted to record the input state buffer address of each functional module, and the input state buffer is used to buffer the state of the input data of the functional module. Correspondingly, the data distributor 308 is also adapted to check the status of the input data of the subsequent functional module. When all the input data required by the subsequent functional module is included in the input buffer area and all the input data is available, the subsequent functional module The call entry address of is sent to the scheduler so that the scheduler can call the subsequent function module.
调度器310适于接收功能模块的调用入口地址并调用功能模块以进行数据处理。The scheduler 310 is adapted to receive the call entry address of the function module and call the function module to perform data processing.
根据一种实施例,调度模块还包括输出状态缓存区注册接口318,接口318适于记录各功能模块的输出状态缓存区地址,输出状态缓存区用于缓存功能模块的输出数据的状态。相应地,调度器310进一步适于:在调用功能模块进行数据处理后,将功能模块的输出数据存储至其输出缓存区,以及将其输出状态缓存区中的输出数据的状态设置为可用。According to an embodiment, the scheduling module further includes an output state buffer register interface 318, the interface 318 is adapted to record the output state buffer address of each functional module, and the output state buffer is used to buffer the state of the output data of the functional module. Correspondingly, the scheduler 310 is further adapted to: after calling the function module for data processing, store the output data of the function module in its output buffer area, and set the status of the output data in its output state buffer area to be available.
根据一种实施例,调度模块还包括数据映射解除接口320,适于将功能模块的输出数据到在后功能模块的输入数据的映射关系从所述数据映射表中删除。According to an embodiment, the scheduling module further includes a data mapping release interface 320, adapted to delete the mapping relationship between the output data of the functional module and the input data of the subsequent functional module from the data mapping table.
根据一种实施例,调度模块还包括系统控制接口322,适于接收控制数据以控制软件的运行。系统控制接口322例如可以包括启动接口324,启动接口324适于接收启动数据 (例如START)以启动软件的运行,或者将指定的功能模块(即软件中的一个没有输入数据的功能模块)的调用入口地址发送至调度器310以启动软件的运行。According to an embodiment, the scheduling module further includes a system control interface 322 adapted to receive control data to control the operation of the software. The system control interface 322 may include, for example, a start interface 324, which is adapted to receive start data (for example, START) to start the operation of the software, or to call a designated function module (that is, a function module in the software without input data) The entry address is sent to the scheduler 310 to start the running of the software.
本领域技术人员可以理解,除启动接口324之外,系统控制接口322还可以包括其他接口,例如用于终止软件运行的停止接口、用于暂停软件运行的暂停接口等,但不限于此。Those skilled in the art can understand that in addition to the start interface 324, the system control interface 322 may also include other interfaces, such as a stop interface for terminating software operation, a pause interface for suspending software operation, etc., but it is not limited thereto.
图2、图3概括性地说明了本发明的软件运行方法和软件运行系统,以下将以两个实施例来详细说明本发明的软件运行系统的结构以及软件运行方法的流程。Figures 2 and 3 generally illustrate the software operating method and software operating system of the present invention. Two embodiments will be used to illustrate the structure of the software operating system and the flow of the software operating method of the present invention in detail.
实施例一Example one
在实施例一中,待运行的软件包括主模块和至少一个功能模块。In the first embodiment, the software to be run includes a main module and at least one functional module.
主模块为软件的入口,负责执行以下动作:The main module is the entrance to the software and is responsible for performing the following actions:
1、加载功能模块:调用各模块的初始化函数;1. Load function module: call the initialization function of each module;
2、加载数据映射表:为软件运行系统的调度模块加载数据映射表;2. Load the data mapping table: load the data mapping table for the scheduling module of the software operating system;
3、启动系统:调用调度模块的启动接口,使调度模块进入运行状态。3. Start the system: call the start interface of the dispatch module to make the dispatch module enter the running state.
功能模块包括以下部分:The function module includes the following parts:
1、输入缓存区,用于缓存输入数据;1. Input buffer area, used to buffer input data;
2、输入状态缓存区,用于缓存输入数据的状态(可用或不可用);2. Input state buffer area, used to buffer the state of input data (available or unavailable);
3、回调函数,为功能模块进行数据处理的功能函数;3. Callback function, which is a function function for data processing of functional modules;
4、初始化函数,供软件运行时调用,负责完成向调度模块注册入口地址及输入数据集,输入缓存区地址和输入状态缓存区地址。4. The initialization function is called when the software is running, and is responsible for registering the entry address and input data set with the dispatch module, the input buffer address and the input state buffer address.
在实施例一中,功能模块不包括输出缓存区,功能模块的输出数据通过数据发送接口(例如send函数)发送至调度模块400。In the first embodiment, the function module does not include an output buffer area, and the output data of the function module is sent to the scheduling module 400 through a data sending interface (for example, a send function).
图4示出了根据本发明的实施例一的调度模块400的结构图。如图4所示,调度模块400包括:Fig. 4 shows a structural diagram of a scheduling module 400 according to the first embodiment of the present invention. As shown in FIG. 4, the scheduling module 400 includes:
输入缓存区注册接口402,用于注册各功能模块的输入缓存区地址,将各输入缓存区地址记入输入缓存区地址表410。The input buffer register interface 402 is used to register the input buffer address of each functional module, and record each input buffer address in the input buffer address table 410.
输入状态缓存区注册接口404,用于注册各功能模块的输入状态缓存区地址,将各输入状态缓存区地址记入输入状态缓存区地址表412。The input state buffer register interface 404 is used to register the input state buffer address of each functional module, and record each input state buffer address in the input state buffer address table 412.
模块注册接口406,用于注册各功能模块的调用入口地址以及作为其触发条件的输入数据集,将各功能模块的调用入口地址及其输入数据记入调用入口地址及输入数据对应表414。The module registration interface 406 is used to register the call entry address of each function module and the input data set as its trigger condition, and record the call entry address and input data of each function module in the call entry address and input data correspondence table 414.
数据映射表加载/移出接口408,用于加载数据映射表416,设置输出数据到输入数据的映射关系,以及将输出数据到输入数据的映射关系从数据映射表中删除。The data mapping table load/remove interface 408 is used to load the data mapping table 416, set the mapping relationship between output data and input data, and delete the mapping relationship between output data and input data from the data mapping table.
目标数据名列表缓存418,用于记录数据传递过程中需要将接收到的输出数据送往在后功能模块的数据名。The target data name list buffer 418 is used to record the data names of the output data received to the subsequent functional module during the data transfer process.
数据分发器420,用于将接收到的输出数据按照数据映射表定义的传递路径,送到相应的功能模块的输入缓存区并更新其状态,同时检查触发该模块所需的输入数据集中各 输入数据的状态,判断是否可实施模块调用,若可则将调用入口地址送到调度器422进行调用,并等待返回结果;若不可,则直接返回。The data distributor 420 is used to send the received output data to the input buffer area of the corresponding function module and update its status according to the transmission path defined by the data mapping table, and to check each input in the input data set required to trigger the module For the status of the data, it is judged whether the module call can be implemented, if it is possible, the call entry address is sent to the scheduler 422 for calling, and the result is waited for; if not, it returns directly.
调度器422,用于接收功能模块430的调用入口地址并实施调用。The scheduler 422 is used to receive the call entry address of the function module 430 and implement the call.
系统状态寄存器424,用于保存调度模块400的当前状态,该状态初始化时为不可执行状态。The system status register 424 is used to save the current status of the scheduling module 400, which is in an unexecutable status when initialized.
命名数据发送接口426,用于接收命名数据,并检查调度模块400的系统状态,若为不可执行状态,则返回;若为可执行状态,则将命名数据送至数据分发器420。The named data sending interface 426 is used to receive named data and check the system status of the scheduling module 400. If it is in an unexecutable state, return; if it is in an executable state, send the named data to the data distributor 420.
系统控制接口428,用于启动软件运行的接口,负责将调度模块400的状态置为可运行状态,并发送约定的用于表示软件启动的命名数据,例如名为“START”的无类型、无内容的命名数据;根据实际需要,还可约定其他控制接口,例如系统停止,挂起,暂停等。The system control interface 428 is an interface used to start the software operation. It is responsible for setting the state of the scheduling module 400 to a runnable state, and sending the agreed named data used to indicate the start of the software, such as "START" without type and without The naming data of the content; according to actual needs, other control interfaces can also be agreed, such as system stop, suspend, pause, etc.
图5示出了实施例一所对应的软件运行方法的流程图。如图5所示,首先,主模块加载功能模块,功能模块向调度模块注册调用入口函数、命名数据集(即输入数据集)、输入缓存区及输入状态缓存区地址,相应地,调度模块记录各功能模块的注册信息。Fig. 5 shows a flowchart of the software running method corresponding to the first embodiment. As shown in Figure 5, first, the main module loads the function module, and the function module registers the entry function, named data set (ie input data set), input buffer area and input state buffer area address with the dispatch module. Accordingly, the dispatch module records Registration information of each functional module.
随后,主模块加载数据映射表到调度模块,相应地,调度模块记录数据映射表。Subsequently, the main module loads the data mapping table to the scheduling module, and accordingly, the scheduling module records the data mapping table.
随后,主模块启动调度模块,调度模块发送表示系统开始的命名数据(例如“START”),调度模块中的数据分发器420接收命名数据,根据数据映射表确定目标功能模块,将接收到的命名数据发送至目标功能模块的输入缓存区。当目标功能模块的输入数据状态均为有效(即可用)时,重置输入状态缓存区中各输入数据的状态,将调用入口地址发送至调度器422,调度器422调用该功能模块进行数据处理,将产生的命名数据(输出数据)发送至数据分发器420,数据分发器420再根据数据映射表确定接收到的命名数据的传递方向,如此循环,直至软件中的最后一个功能模块被调用完毕,返回结果数据后,软件运行结束。Subsequently, the main module starts the scheduling module, and the scheduling module sends named data (such as "START") indicating the start of the system. The data distributor 420 in the scheduling module receives the named data, determines the target function module according to the data mapping table, and assigns the received naming The data is sent to the input buffer area of the target function module. When the input data status of the target function module is valid (ready to use), reset the status of each input data in the input status buffer area, and send the call entry address to the scheduler 422, and the scheduler 422 calls the function module for data processing , The generated named data (output data) is sent to the data distributor 420, and the data distributor 420 determines the transfer direction of the received named data according to the data mapping table, and so on, until the last function module in the software is called. , After returning the result data, the software operation ends.
以下以C语言为例,给出了在实施例一的技术方案下,一个软件的功能模块及主模块的编写实例,并结合实施例一中的调度模块400的具体动作,来更清晰地说明本发明是如何运用在编写解耦的软件模块的过程中的。为了容易理解,本实施例中,数据名、数据类型均采用字符串表述。The following takes C language as an example to give an example of writing a software functional module and main module under the technical solution of the first embodiment, combined with the specific actions of the scheduling module 400 in the first embodiment, to illustrate more clearly How the present invention is used in the process of writing decoupled software modules. For ease of understanding, in this embodiment, the data name and data type are all expressed in character strings.
在本示例中,调度模块的接口的C语言描述如下:In this example, the C language description of the interface of the scheduling module is as follows:
1、数据发送API1. Data sending API
int Send(const char*DataName,const char*DataType=0,void*DataAddress=0);int Send(const char*DataName,const char*DataType=0,void*DataAddress=0);
2、命名数据缓存地址及状态地址注册API2. Named data cache address and status address registration API
int RegistNamedData(const char*DataName,int*StatusAddress=0,const char*DataType=0,void**DataRecieveAddress=0);int RegistNamedData(const char*DataName, int*StatusAddress=0, const char*DataType=0, void**DataRecieveAddress=0);
3、数据映射设置API3. Data mapping setting API
int Link(const char*strFrom,const char*strTo);int Link(const char*strFrom,const char*strTo);
4、数据映射解除API4. Data mapping release API
int unLink(const char*strFrom,const char*strTo);int unLink(const char*strFrom,const char*strTo);
5、模块入口地址及其对应的命名数据集的注册API5. The registration API of the module entry address and its corresponding named data set
int Regist(int(*Callback)(),const char*DataName,const char*DataType=0);int Regist(int(*Callback)(),const char*DataName,const char*DataType=0);
6、系统控制API6. System control API
int Run()int Run()
{{
return Send(“START”);return Send("START");
};};
本API实现了实施例一中的系统启动接口,发送名为”START”的无类型命名数据。This API implements the system startup interface in the first embodiment, and sends untyped named data named "START".
接下来,说明功能模块的编写方法。Next, explain how to write functional modules.
首先,假设在一个传统的C言语构成的系统中,有三个彼此存在调用关系的模块,通常的写法为:First, suppose that in a traditional C language system, there are three modules that have a calling relationship with each other. The usual writing is:
int A(int iX)int A(int iX)
{{
return iX+10;return iX+10;
};};
int B(int iX,int iY)int B(int iX,int iY)
{{
return A(iX)+iY;return A(iX)+iY;
};};
int C(int iX,int iY,int iZ)int C(int iX, int iY, int iZ)
{{
return B(iX,iY)-iZ;return B(iX,iY)-iZ;
}}
int main()int main()
{{
int iX,iY,iZ,iResult;int iX,iY,iZ,iResult;
iX=1,iY=2,iZ=3;iX=1, iY=2, iZ=3;
iReturn=C(iX,iY,iZ);iReturn=C(iX,iY,iZ);
printf(“%d\r\n”,iReturn);printf("%d\r\n",iReturn);
return 0;return 0;
}}
通过实施本发明,该软件可编写为六个模块,包括五个功能模块,分别保存于By implementing the present invention, the software can be written into six modules, including five functional modules, which are stored in
A.c,B.c,C.c,D.c,E.c,以及一个主模块,保存于main.c。A.c, B.c, C.c, D.c, E.c, and a main module are stored in main.c.
A.c的内容如下:The content of A.c is as follows:
int A(int iX)int A(int iX)
{{
return iX+10;return iX+10;
};};
int*pX;int*pX;
int iXStatus;int iXStatus;
int iReturn;int iReturn;
int Callback()int Callback()
{{
iReturn=A(*pX);iReturn=A(*pX);
Send(“Module_A_Output”,”int”,&iReturn);Send("Module_A_Output","int",&iReturn);
return 0;return 0;
};};
extern“C”int ModuleA()extern "C" int ModuleA()
{{
Regist(Callback,”Module_A_X”,”int”);Regist(Callback,"Module_A_X","int");
RegistNamedData(”Module_A_X”,&iXStatus,”int”,&pX);RegistNamedData("Module_A_X",&iXStatus,"int",&pX);
return 0;return 0;
};};
int gINIT=ModuleA();int gINIT=ModuleA();
B.c的内容如下:The content of B.c is as follows:
int B(int iX,int iY)int B(int iX,int iY)
{{
return iX+iY;return iX+iY;
};};
int*pX;int*pX;
int*pY;int*pY;
int iXStatus;int iXStatus;
int iYStatus;int iYStatus;
int iReturn;int iReturn;
int Callback()int Callback()
{{
iReturn=B(*pX,*pY);iReturn=B(*pX,*pY);
Send(“Module_B_Output”,”int”,&iReturn);Send("Module_B_Output","int",&iReturn);
return 0;return 0;
};};
extern“C”int ModuleB()extern "C" int ModuleB()
{{
Regist(Callback,”Module_B_X”,”int”);Regist(Callback,"Module_B_X","int");
Regist(Callback,”Module_B_Y”,”int”);Regist(Callback,"Module_B_Y","int");
RegistNamedData(”Module_B_X”,&iXStatus,”int”,&pX);RegistNamedData("Module_B_X",&iXStatus,"int",&pX);
RegistNamedData(”Module_B_Y”,&iYStatus,”int”,&pY);RegistNamedData("Module_B_Y",&iYStatus,"int",&pY);
return 0;return 0;
};};
int gINIT=ModuleB();int gINIT=ModuleB();
C.c的内容如下:The content of C.c is as follows:
int C(int iX,int iY)int C(int iX,int iY)
{{
return iX-iY;return iX-iY;
};};
int*pX;int*pX;
int*pY;int*pY;
int iXStatus;int iXStatus;
int iYStatus;int iYStatus;
int iReturn;int iReturn;
int Callback()int Callback()
{{
iReturn=C(*pX,*pY);iReturn=C(*pX,*pY);
Send(“Module_C_Output”,”int”,&iReturn);Send("Module_C_Output","int",&iReturn);
return 0;return 0;
};};
extern“C”int ModuleC()extern "C" int ModuleC()
{{
Regist(Callback,”Module_C_X”,”int”);Regist(Callback,"Module_C_X","int");
Regist(Callback,”Module_C_Y”,”int”);Regist(Callback,"Module_C_Y","int");
RegistNamedData(”Module_C_X”,&iXStatus,”int”,&pX);RegistNamedData("Module_C_X",&iXStatus,"int",&pX);
RegistNamedData(”Module_C_Y”,&iYStatus,”int”,&pY);RegistNamedData("Module_C_Y",&iYStatus,"int",&pY);
return 0;return 0;
};};
int gINIT=ModuleC();int gINIT=ModuleC();
D.c的内容如下:The content of D.c is as follows:
int*pResult;int*pResult;
int iResultStatus;int iResultStatus;
int Callback()int Callback()
{{
printf(“%d\r\n”,*pResult);printf("%d\r\n",*pResult);
return 0;return 0;
};};
extern“C”int ModuleD()extern "C" int ModuleD()
{{
Regist(Callback,”Module_D_Result”,”int”);Regist(Callback,"Module_D_Result","int");
RegistNamedData(”Module_D_Result”,&iResultStatus,”int”,&pResult);RegistNamedData("Module_D_Result",&iResultStatus,"int",&pResult);
return 0;return 0;
};};
int gINIT=ModuleD();int gINIT=ModuleD();
E.c的内容如下:The content of E.c is as follows:
int iX,iY,iZ;int iX,iY,iZ;
int iStartStatus;int iStartStatus;
int Callback()int Callback()
{{
iX=1,iY=2,iZ=3;iX=1, iY=2, iZ=3;
Send(“Module_E_X”,”int”,&iX);Send("Module_E_X","int",&iX);
Send(“Module_E_Y”,”int”,&iY);Send("Module_E_Y","int",&iY);
Send(“Module_E_Z”,”int”,&iZ);Send("Module_E_Z","int",&iZ);
return 0;return 0;
};};
extern“C”int ModuleE()extern "C" int ModuleE()
{{
Regist(Callback,”Module_E_START”);Regist(Callback,"Module_E_START");
return 0;return 0;
};};
int gINIT=ModuleE();int gINIT=ModuleE();
main.c的内容如下:The content of main.c is as follows:
int main()int main()
{{
ModuleA();ModuleA();
ModuleB();ModuleB();
ModuleC();ModuleC();
ModuleD();ModuleD();
ModuleE();ModuleE();
Link(“Module_E_X”,”Module_A_X”);Link("Module_E_X","Module_A_X");
Link(“Module_A_Output”,”Module_B_X”);Link("Module_A_Output","Module_B_X");
Link(“Module_E_Y”,”Module_B_Y”);Link("Module_E_Y","Module_B_Y");
Link(“Module_B_Output”,”Module_C_X”);Link("Module_B_Output","Module_C_X");
Link(“Module_E_Z”,”Module_C_Y”);Link("Module_E_Z","Module_C_Y");
Link(“Module_C_Output”,”Module_D_Result”);Link("Module_C_Output","Module_D_Result");
Link(“START”,”Module_E_START”);Link("START","Module_E_START");
return Run();return Run();
}}
特别地,如本领域技术人员所知,通常编译器会支持全局变量初始化,此时,A,B,C,D,E各模块的初始化动作可由系统装载程序时自动完成,而无需在main模块中显式完成,所以main.c的内容变为:In particular, as those skilled in the art know, the compiler usually supports the initialization of global variables. At this time, the initialization of each module of A, B, C, D, and E can be automatically completed when the system loads the program, without the need for the main module Explicitly completed in, so the content of main.c becomes:
int main()int main()
{{
Link(“Module_E_X”,”Module_A_X”);Link("Module_E_X","Module_A_X");
Link(“Module_A_Output”,”Module_B_X”);Link("Module_A_Output","Module_B_X");
Link(“Module_E_Y”,”Module_B_Y”);Link("Module_E_Y","Module_B_Y");
Link(“Module_B_Output”,”Module_C_X”);Link("Module_B_Output","Module_C_X");
Link(“Module_E_Z”,”Module_C_Y”);Link("Module_E_Z","Module_C_Y");
Link(“Module_C_Output”,”Module_D_Result”);Link("Module_C_Output","Module_D_Result");
Link(“START”,”Module_E_START”);Link("START","Module_E_START");
return Run();return Run();
}}
为了方便理解,在本例中数据映射表的内容是以在main函数中直接定义的方式给出的,但本领域技术人员应该容易想到,数据映射表可独立于程序主体保存,并通过动态的方式进行装载。In order to facilitate understanding, in this example, the content of the data mapping table is directly defined in the main function. However, those skilled in the art should easily think that the data mapping table can be stored independently of the main body of the program, and through dynamic Way to load.
具体的运行流程及模块间的调用关系如图6所示:The specific operation process and the calling relationship between modules are shown in Figure 6:
首先,加载各模块,注册命名数据及状态缓存地址;加载数据映射表;启动调度模块;调度模块发送命名数据START。调度模块接收命名数据START,根据数据映射表,送到模块E。检查模块E的调用条件,条件满足,重置模块E的输入数据状态,并调用模块E。模块E发送输出数据Module_E_X,调度模块接收输出数据Module_E_X,依据数据映射表,送到Module_A_X的输入缓存区中。判断模块A的触发条件,条件满足,重置模块A的输入数据状态,并对模块A实施调用。模块A对数据进行处理,并发送输出数据Module_A_Output,调度模块接收输出数据Module_A_Output,并依据数据映射表,将其送到Module_B_X的输入缓存。调度模块检查模块B的触发条件,因缺少命名数据Module_B_Y,不能实施调用;由调度模块返回到模块A;由模块A返回到调度模块;由调度模块返回到模块E。模块E继续发送命名数据Module_E_Y;调度模块接收Module_E_Y,并依据数据映射表,将其送到Module_B_Y的输入缓存;调度模块检查模块B的触发条件,条件满足,重置模块B的输入状态,并调用模块B。模块B对数据进行处理,并发送输出数据Module_B_Output。调度模块接收Module_B_Output,并依据数据 映射表,将其送至Module_C_X的缓存。调度模块检查模块C的触发条件,因缺少输入数据Module_C_Y,不能实施调用,由调度模块返回模块B,由模块B返回调度模块,由调度模块返回模块E。模块E继续发送命名数据Module_E_Z,调度模块接收Module_E_Z,并依据数据映射表,将其送到Module_C_Y的输入缓存。调度模块检查模块C的触发条件,条件满足,重置模块C的输入数据状态,并调用模块C。模块C对数据进行处理,并发送输出数据Module_C_Output。调度模块接收Module_C_Output,并依据数据映射表,将其送至Module_D_Result。调度模块检查模块D的触发条件,条件满足,重置模块D的输入数据状态,并调用模块D。模块D打印数据,并返回到调度模块,由调度模块返回到模块C,由模块C返回到调度模块,由调度模块返回到模块E,由模块E返回到调度模块;由调度模块返回到main,结束。First, load each module, register the named data and state cache address; load the data mapping table; start the scheduling module; the scheduling module sends the named data START. The dispatch module receives the named data START, and sends it to the module E according to the data mapping table. Check the calling conditions of module E, if the conditions are met, reset the input data state of module E, and call module E. Module E sends output data Module_E_X, and the scheduling module receives output data Module_E_X, and sends it to the input buffer area of Module_A_X according to the data mapping table. Determine the trigger condition of module A, if the condition is met, reset the input data state of module A, and call module A. Module A processes the data and sends the output data Module_A_Output. The scheduling module receives the output data Module_A_Output and sends it to the input buffer of Module_B_X according to the data mapping table. The dispatch module checks the trigger condition of module B, and the call cannot be implemented due to lack of named data Module_B_Y; the dispatch module returns to module A; the module A returns to the dispatch module; the dispatch module returns to the module E. Module E continues to send the named data Module_E_Y; the scheduling module receives Module_E_Y and sends it to the input buffer of Module_B_Y according to the data mapping table; the scheduling module checks the trigger condition of module B, the condition is met, resets the input state of module B, and calls Module B. Module B processes the data and sends the output data Module_B_Output. The scheduling module receives Module_B_Output and sends it to the buffer of Module_C_X according to the data mapping table. The dispatch module checks the trigger condition of module C, and the call cannot be implemented due to lack of input data Module_C_Y. The dispatch module returns to module B, module B returns to dispatch module, and the dispatch module returns to module E. Module E continues to send the named data Module_E_Z, and the scheduling module receives Module_E_Z and sends it to the input buffer of Module_C_Y according to the data mapping table. The dispatch module checks the trigger condition of module C, and the condition is met, resets the input data state of module C, and calls module C. Module C processes the data and sends the output data Module_C_Output. The scheduling module receives Module_C_Output and sends it to Module_D_Result according to the data mapping table. The scheduling module checks the trigger condition of the module D, the condition is met, resets the input data state of the module D, and calls the module D. Module D prints the data and returns to the dispatch module, from the dispatch module to the module C, from the module C to the dispatch module, from the dispatch module to the module E, from the module E to the dispatch module; from the dispatch module to the main, End.
与上述C语言软件示例类似地,在基于C++语言的编程示例中可以首先定义一个基类,用于通用的描述功能模块的接口。如,给定基类定义如下:Similar to the above C language software example, in the C++ language-based programming example, you can first define a base class to describe the interface of the functional module in general. For example, a given base class is defined as follows:
class_Baseclass_Base
{{
public:public:
virtual Callback();virtualCallback();
};};
相应的,调度模块中,功能模块入口的描述可以具体地由对象的指针来实施。此时,与上述C语言示例对照地,模块入口地址及其对应的命名数据集的注册API可变为:Correspondingly, in the scheduling module, the description of the function module entry can be specifically implemented by the pointer of the object. At this point, in contrast to the above C language example, the registration API of the module entry address and its corresponding named data set can be changed to:
int Regist(_Base*pModual,const char*DataName,const char*DataType=0);int Regist(_Base*pModual,const char*DataName,const char*DataType=0);
而其它的接口无需改变。The other interfaces do not need to be changed.
同时,相应的模块定义中的数据缓存,数据处理函数,初始化均可对应到类变量,重载函数和构造函数中去了。At the same time, the data cache, data processing function, and initialization in the corresponding module definition can all correspond to class variables, overloaded functions and constructors.
具体地,此处以实施例2中的模块A为例,其C++描述变为:Specifically, here, taking module A in embodiment 2 as an example, its C++ description becomes:
class CA:public_Baseclass CA:public_Base
{{
int*iX;int*iX;
int iXStatus;int iXStatus;
int iReturn;int iReturn;
public:public:
CA()CA()
{{
Regist(this,”Module_A_iX”,”int”);Regist(this,"Module_A_iX","int");
RegistNamedData(”Module_A_iX”,&iXStatus,”int”,&iX);RegistNamedData("Module_A_iX",&iXStatus,"int",&iX);
}}
virtual int Callback()virtual int Callback()
{{
iReturn=*iX+10;iReturn=*iX+10;
Send(“Module_A_Output”,”int”,&iReturn);Send("Module_A_Output","int",&iReturn);
return 0;return 0;
};};
};};
CA*gOBJ=0;CA*gOBJ=0;
int gINIT=A();int gINIT=A();
extern“C”int A()extern "C" int A()
{{
if(gOBJ==0)gOBJ=new CA();if(gOBJ==0)gOBJ=new CA();
return 0;return 0;
}}
相应的主模块main函数中,无需进行修改。No modification is required in the main function of the corresponding main module.
实施例二Example two
在实施例二中,待运行的软件包括主模块和至少一个功能模块。In the second embodiment, the software to be run includes a main module and at least one functional module.
主模块为软件的入口,负责执行以下动作:The main module is the entrance to the software and is responsible for performing the following actions:
1、加载功能模块:调用各模块的初始化函数;1. Load function module: call the initialization function of each module;
2、加载实例列表:根据实例列表创建功能模块实例;2. Load the instance list: create a function module instance according to the instance list;
3、加载数据映射表:为调度模块加载数据映射表;3. Load the data mapping table: load the data mapping table for the scheduling module;
4、启动系统:调用调度模块的启动接口,使调度模块进入运行状态,并将指定的启动模块送入调度队列。4. Start the system: call the start interface of the dispatch module to make the dispatch module enter the running state, and send the designated start module to the dispatch queue.
功能模块包括以下部分:The function module includes the following parts:
1、用于创建实例的回调函数:用于创建实例,包括所需系统资源以及输入、输出数据缓存和数据状态缓存等,完成输入输出数据缓存和状态缓存地址的注册,返回实例地址;1. Callback function used to create an instance: used to create an instance, including the required system resources, input and output data cache and data state cache, etc., complete the registration of the input and output data cache and state cache address, and return the instance address;
2、用于释放实例的回调函数:用于回收给定实例的相关的资源2. Callback function used to release the instance: used to reclaim related resources of a given instance
3、功能回调函数:功能模块进行数据处理的功能函数3. Function callback function: the function function of the function module for data processing
4、初始化函数:供系统加载时调用,负责完成向调度模块注册模块名,模块相关的功能回调入口,实例创建回调入口,和释放回调函数入口。4. Initialization function: Called when the system is loaded, responsible for registering the module name with the scheduling module, module-related function callback entry, instance creation callback entry, and release callback function entry.
在实施例二中,功能模块包括输出缓存区,相应地,调度模块可以从功能模块的输出缓存区中读取功能模块的输出数据。此外,本实施例中给出了在同一软件中,多次使用相同功能模块(即功能模块的实例)的实施方式,此时,各功能模块的实例拥有自己独立的输入输出数据及缓存区。相应地,调度模块提供了用于管理功能模块实例的相关接口。In the second embodiment, the function module includes an output buffer area, and accordingly, the scheduling module can read the output data of the function module from the output buffer area of the function module. In addition, this embodiment provides an implementation manner in which the same functional module (ie, functional module instance) is used multiple times in the same software. At this time, each functional module instance has its own independent input and output data and buffer area. Correspondingly, the scheduling module provides related interfaces for managing functional module instances.
图7示出了根据本发明的实施例二的调度模块700的结构图。如图7所示,调度模块700包括:Fig. 7 shows a structural diagram of a scheduling module 700 according to the second embodiment of the present invention. As shown in FIG. 7, the scheduling module 700 includes:
功能模块注册接口702,用于注册功能模块,将功能模块的模块名、调用入口、用于创建功能模块实例的函数入口及释放功能模块实例的函数入口记入功能模块表缓存712。The function module registration interface 702 is used to register a function module, and record the module name of the function module, the calling entry, the function entry for creating the function module instance, and the function entry for releasing the function module instance into the function module table cache 712.
功能模块实例创建接口704,用于创建给定的功能模块的实例,查询功能模块列表,调用实例创建函数,将实例名和创建函数返回的实例地址保存于功能模块实例表缓存714。The function module instance creation interface 704 is used to create an instance of a given function module, query the function module list, call the instance creation function, and save the instance name and the instance address returned by the creation function in the function module instance table cache 714.
实例输入缓存区及输入状态缓存区注册接口706,用于注册各实例的输入缓存区及输入状态缓存区地址,将各输入缓存区及输入状态缓存区地址记入输入缓存区、输入状态缓存区地址表716。Instance input buffer area and input state buffer area registration interface 706, used to register the input buffer area and input state buffer area addresses of each instance, and record the input buffer area and input state buffer area addresses in the input buffer area and input state buffer area Address table 716.
实例输出缓存区及输出状态缓存区注册接口708,用于注册各实例的输出缓存区及输 出状态缓存区地址,将各输出缓存区及输出状态缓存区地址记入输出缓存区、输出状态缓存区地址表718。Instance output buffer area and output status buffer area registration interface 708, used to register the output buffer area and output status buffer area address of each instance, and record the output buffer area and output status buffer area address in the output buffer area and output status buffer area Address table 718.
数据映射表加载/移除接口710,用于加载数据映射表720,设置输出数据到输入数据的映射关系,以及将输出数据到输入数据的映射关系从数据映射表中删除。The data mapping table loading/removing interface 710 is used to load the data mapping table 720, set the mapping relationship between output data and input data, and delete the mapping relationship between output data and input data from the data mapping table.
数据分发器722,用于将完成调用的功能模块的输出数据,按照数据映射表定义的传递路径,送到相应的功能模块实例的接收缓存并更新其状态,同时检查该实例所需的全部输入数据状态,判断是否可实施调用,若可则将该实例送入调度队列724。The data distributor 722 is used to send the output data of the function module that has completed the call to the receiving buffer of the corresponding function module instance according to the transmission path defined by the data mapping table and update its status, and to check all the inputs required by the instance According to the data status, it is judged whether the call can be implemented, and if so, the instance is sent to the dispatch queue 724.
调度队列724,用于缓存实施调用的功能模块的实例的队列。The dispatch queue 724 is used to buffer the queue of the instance of the function module that implements the call.
调度器726,用于从调度队列724中获取调用入口地址并实施调用。The scheduler 726 is configured to obtain the call entry address from the dispatch queue 724 and implement the call.
系统状态寄存器728,用于保存调度模块700的当前状态,该状态初始化时为不可执行状态。The system status register 728 is used to save the current status of the scheduling module 700, which is in an unexecutable status when initialized.
系统控制接口730,用于启动软件运行的接口,检查并更新系统状态,负责将指定的功能模块实例送入调度队列,该实例对应的功能模块应为没有输入的模块,若未指定用于启动的功能模块实例,系统应启动所有的没有输入的功能模块的实例。此外,根据实际需要,还可约定其他的控制接口,例如系统停止,挂起,暂停等。The system control interface 730 is an interface used to start the software operation, check and update the system status, and is responsible for sending the specified function module instance to the dispatch queue. The function module corresponding to the instance should be a module without input. If it is not specified for starting Instances of function modules, the system should start all instances of function modules without input. In addition, according to actual needs, other control interfaces can also be agreed, such as system stop, suspend, pause, etc.
图8示出了实施例二所对应的软件运行方法的流程图。如图8所示,首先,主模块加载功能模块,功能模块向调度模块注册模块名、入口函数、实例创建函数、实例释放函数,相应地,调度模块记录功能模块的各项注册信息。Fig. 8 shows a flowchart of the software running method corresponding to the second embodiment. As shown in Figure 8, first, the main module loads the function module, and the function module registers the module name, entry function, instance creation function, and instance release function with the dispatch module. Accordingly, the dispatch module records various registration information of the function module.
随后,主模块加载功能模块实例表到调度模块,调度模块依据实例表调用各模块的实例创建函数创建各实例。功能模块实例创建函数初始化输入数据及输入状态缓存地址,并向调度模块注册,相应地,调度模块将实例名、实例地址记入实例列表缓存。Subsequently, the main module loads the function module instance table to the dispatch module, and the dispatch module calls the instance creation function of each module according to the instance table to create each instance. The function module instance creation function initializes the input data and the input state buffer address, and registers it with the dispatch module. Accordingly, the dispatch module records the instance name and instance address in the instance list buffer.
随后,主模块加载数据映射表到调度模块,调度模块记录数据映射表。Subsequently, the main module loads the data mapping table to the dispatch module, and the dispatch module records the data mapping table.
主模块调用调度模块启动接口启动软件运行,调度模块从调度队列读取功能模块实例,并以该实例为参数调用该实例对应的功能模块入口函数。被调用的功能模块读取给定的实例的输入数据缓存区,执行数据处理功能,并将产生的数据和状态写入该实例输出缓存。调度模块根据数据映射表,将运行后的该实例的状态为正常的输出数据送到对应的在后的功能模块实例的输入缓存,并检查该功能模块实例的全部输入数据状态,当全部为有效状态时,则重置该实例的全部输入状态并将该实例送入调度队列。检查调度队列是否为空,若为空,则结束,若不为空,则返回。The main module calls the dispatch module to start the interface to start the software operation, the dispatch module reads the function module instance from the dispatch queue, and calls the function module entry function corresponding to the instance with the instance as a parameter. The called function module reads the input data buffer area of a given instance, performs data processing functions, and writes the generated data and status into the instance output buffer. According to the data mapping table, the scheduling module sends the output data of the running instance in the normal state to the input buffer of the corresponding subsequent function module instance, and checks all the input data states of the function module instance, when all are valid In the state, all input states of the instance are reset and the instance is sent to the dispatch queue. Check whether the dispatch queue is empty, if it is empty, it ends, if it is not empty, it returns.
以下以C语言为例,给出了在实施例二的技术方案下,一个软件的功能模块及主模块的编写实例,并结合实施例二中的调度模块700的具体动作,来更清晰地说明本发明是如何运用在编写解耦的软件模块的过程中的。为了容易理解,本实施例中,数据名、数据类型均采用字符串表述。Taking C language as an example, an example of writing a functional module and main module of a software under the technical solution of the second embodiment is given below, and combined with the specific actions of the scheduling module 700 in the second embodiment, to explain more clearly How the present invention is used in the process of writing decoupled software modules. For ease of understanding, in this embodiment, the data name and data type are all expressed in character strings.
在本示例中,调度模块的接口的C语言描述如下:In this example, the C language description of the interface of the scheduling module is as follows:
1、功能模块注册API1. Function module registration API
int RegisterModule(const char*ModuleName,int(*Callback)(),void*(*Create)(const char*InstanceName),void(*Release)(void*));int RegisterModule(const char*ModuleName,int(*Callback)(),void*(*Create)(const char*InstanceName),void(*Release)(void*));
2、创建功能模块实例API2. Create function module instance API
int Instance(const char*ModuleName,const char*InstanceName);int Instance(const char*ModuleName,const char*InstanceName);
3、输入命名数据缓存地址及状态地址注册API3. Enter the named data cache address and state address registration API
int RegistInput(const char*InstanceName,const char*InputName,int*StatusAddress=0,const char*DataType=0,void**DataRecieveAddress=0);int RegistInput(const char*InstanceName,const char*InputName,int*StatusAddress=0,const char*DataType=0,void**DataRecieveAddress=0);
4、输出命名数据缓存地址及状态地址注册API4. Output named data cache address and status address registration API
int RegistOutput(const char*InstanceName,const char*OutputName,int*StatusAddress=0,const char*DataType=0,void**DataRecieveAddress=0);int RegistOutput(const char*InstanceName,const char*OutputName,int*StatusAddress=0,const char*DataType=0,void**DataRecieveAddress=0);
5、数据映射设置API5. Data mapping setting API
int Link(const char*fromInstanceName,const char*strFrom,const char*toInstanceName,const char*strTo);int Link(const char*fromInstanceName,const char*strFrom,const char*toInstanceName,const char*strTo);
6、数据映射解除API6. Data mapping release API
int unLink(const char*fromInstanceName,const char*strFrom,const char*toInstanceName,const char*strTo);int unLink(const char*fromInstanceName,const char*strFrom,const char*toInstanceName,const char*strTo);
7、系统启动API7. System startup API
int Start(const char*InstanceName);int Start(const char*InstanceName);
此外,在实际使用中,可以增加对调度模块中的已注册模块、模块实例、映射等信息的查询接口,在此不再赘述。In addition, in actual use, a query interface for information such as registered modules, module instances, and mappings in the scheduling module can be added, which will not be repeated here.
在本示例中,功能模块A~E及主模块main的示例代码如下(其中,状态标识含义的约定为:0代表正常,其它代表错误)。In this example, the sample codes of the function modules A to E and the main module main are as follows (wherein, the convention for the meaning of the status identifier is: 0 represents normal, and others represent errors).
A.c的内容如下:The content of A.c is as follows:
int A(int iX)int A(int iX)
{{
return iX+10;return iX+10;
};};
typedef structtypedef struct
{{
int*pInput0;int*pInput0;
int iInputStatus0;int iInputStatus0;
int Output0;int Output0;
int*pOutput0;int*pOutput0;
int iOutputStatus0;int iOutputStatus0;
}Moudle_Instance;}Moudle_Instance;
void*Create(const char*Instance Name)void*Create(const char*Instance Name)
{{
Module_Instance*pInstance=(Module_Instance*)calloc(sizeof(Module_Instance));Module_Instance*pInstance=(Module_Instance*)calloc(sizeof(Module_Instance));
pInstance->pOutput0=&pInstance->Output0;pInstance->pOutput0=&pInstance->Output0;
RegistInput(InstanceName,”MODULE_A_INPUT_0”,&pInstance->iInputStatus0,”int”,&pInstance->pIn put0);RegistInput(InstanceName,"MODULE_A_INPUT_0",&pInstance->iInputStatus0,"int",&pInstance->pIn put0);
RegistOutput(InstanceName,”MODULE_A_OUTPUT_0”,&pInstance->iOutputStatus0,”int”,&pInstance->pOutput0);RegistOutput(InstanceName,"MODULE_A_OUTPUT_0",&pInstance->iOutputStatus0,"int",&pInstance->pOutput0);
return pInstance;return pInstance;
}}
void Release(void*p)void Release(void*p)
{{
free(p);free(p);
}}
int Callback(void*p)int Callback(void*p)
{{
Moudle_Instance*pInstance=(Moudle_Instance*)p;Moudle_Instance*pInstance=(Moudle_Instance*)p;
*pInstance->pOutput0=A(*pInstance->pInput0);*pInstance->pOutput0=A(*pInstance->pInput0);
pInstance->iOutputStatus0=0;pInstance->iOutputStatus0=0;
return 0;return 0;
};};
extern“C”int ModuleA()extern "C" int ModuleA()
{{
Regist(“ModuleA”,Callback,Create,Release);Regist("ModuleA",Callback,Create,Release);
return 0;return 0;
};};
int gINIT=ModuleA();int gINIT=ModuleA();
B.c的内容如下:The content of B.c is as follows:
int B(int iX,int iY)int B(int iX,int iY)
{{
return iX+iY;return iX+iY;
};};
typedef structtypedef struct
{{
int*pInput0;int*pInput0;
int*pInput1;int*pInput1;
int iInputStatus0;int iInputStatus0;
int iInputStatus1;int iInputStatus1;
int Output0;int Output0;
int*pOutput0;int*pOutput0;
int iOutputStatus0;int iOutputStatus0;
}Module_Instance;}Module_Instance;
void*Create(const char*InstanceName)void*Create(const char*InstanceName)
{{
Module_Instance*pInstance=(Module_Instance*)calloc(sizeof(Module_Instance));Module_Instance*pInstance=(Module_Instance*)calloc(sizeof(Module_Instance));
pInstance->pOutput0=&pInstance->Output0;pInstance->pOutput0=&pInstance->Output0;
RegistInput(InstanceName,”MODULE_B_INPUT_0”,&pInstance->iInputStatus0,”int”,&pInstance->pIn put0);RegistInput(InstanceName,"MODULE_B_INPUT_0",&pInstance->iInputStatus0,"int",&pInstance->pIn put0);
RegistInput(InstanceName,”MODULE_B_INPUT_1”,&pInstance->iInputStatus1,”int”,&pInstance->pIn put1);RegistInput(InstanceName,"MODULE_B_INPUT_1",&pInstance->iInputStatus1,"int",&pInstance->pIn put1);
RegistOutput(InstanceName,”MODULE_B_OUTPUT_0”,&pInstance->iOutputStatus0,”int”,&pOutput->pOutput0);RegistOutput(InstanceName,"MODULE_B_OUTPUT_0",&pInstance->iOutputStatus0,"int",&pOutput->pOutput0);
return pInstance;return pInstance;
}}
void Release(void*p)void Release(void*p)
{{
free(p);free(p);
}}
int Callback(void*p)int Callback(void*p)
{{
Module_Instance*pInstance=(Module_Instance*)p;Module_Instance*pInstance=(Module_Instance*)p;
*pInstance->pOutput0=B(*pInstance->pInput0,*pInstance->pInput1);*pInstance->pOutput0=B(*pInstance->pInput0,*pInstance->pInput1);
pInstance->iOutputStatus0=0;pInstance->iOutputStatus0=0;
return 0;return 0;
};};
extern“C”int ModuleB()extern "C" int ModuleB()
{{
Regist(“ModuleB”,Callback,Create,Release);Regist("ModuleB",Callback,Create,Release);
return 0;return 0;
};};
int gINIT=ModuleB();int gINIT=ModuleB();
C.c的内容如下:The content of C.c is as follows:
int C(int iX,int iY)int C(int iX,int iY)
{{
return iX-iY;return iX-iY;
};};
typedef structtypedef struct
{{
int*pInput0;int*pInput0;
int*pInput1;int*pInput1;
int iInputStatus0;int iInputStatus0;
int iInputStatus1;int iInputStatus1;
int Output0;int Output0;
int*pOutput0;int*pOutput0;
int iOutputStatus0;int iOutputStatus0;
}Module_Instance;}Module_Instance;
void*Create(const char*InstanceName)void*Create(const char*InstanceName)
{{
Moudle_Instance*pInstance=(Module_Instance*)calloc(sizeof(Module_Instance));Moudle_Instance*pInstance=(Module_Instance*)calloc(sizeof(Module_Instance));
pInstance->pOutput0=&pInstance->Output0;pInstance->pOutput0=&pInstance->Output0;
RegistInput(InstanceName,”MODULE_C_INPUT_0”,&pInstance->iInputStatus0,”int”,&pInstance->pIn put0);RegistInput(InstanceName,"MODULE_C_INPUT_0",&pInstance->iInputStatus0,"int",&pInstance->pIn put0);
RegistInput(InstanceName,”MODULE_C_INPUT_1”,&pInstance->iInputStatus1,”int”,&pInstance->pIn put1);RegistInput(InstanceName,"MODULE_C_INPUT_1",&pInstance->iInputStatus1,"int",&pInstance->pIn put1);
RegistOutput(InstanceName,”MODULE_C_OUTPUT_0”,&pInstance->iOutputStatus0,”int”,&pInstance->Output0);RegistOutput(InstanceName,"MODULE_C_OUTPUT_0",&pInstance->iOutputStatus0,"int",&pInstance->Output0);
return pInstance;return pInstance;
}}
void Release(void*p)void Release(void*p)
{{
free(p);free(p);
}}
int Callback(void*p)int Callback(void*p)
{{
Module_Instance*pInstance=(Module_Instance*)p;Module_Instance*pInstance=(Module_Instance*)p;
*pInstance->pOutput0=C(*pInstance->pInput0,*pInstance->pInput1);*pInstance->pOutput0=C(*pInstance->pInput0,*pInstance->pInput1);
pInstance->iOutputStatus0=0;pInstance->iOutputStatus0=0;
return 0;return 0;
};};
extern“C”int ModuleC()extern "C" int ModuleC()
{{
Regist(“ModuleC”,Callback,Create,Release);Regist("ModuleC",Callback,Create,Release);
return 0;return 0;
};};
int gINIT=ModuleC();int gINIT=ModuleC();
D.c的内容如下:The content of D.c is as follows:
typedef structtypedef struct
{{
int*pInput0;int*pInput0;
int iInputStatus0;int iInputStatus0;
}Module_Instance;}Module_Instance;
void*Create(const char*InstanceName)void*Create(const char*InstanceName)
{{
Module_Instance*pInstance=(Module_Instance*)calloc(sizeof(Module_Instance));Module_Instance*pInstance=(Module_Instance*)calloc(sizeof(Module_Instance));
RegistInput(InstanceName,”MODULE_D_INPUT_0”,&pInstance->iInputStatus0,”int”,&pInstance->pIn put0);RegistInput(InstanceName,"MODULE_D_INPUT_0",&pInstance->iInputStatus0,"int",&pInstance->pIn put0);
return pInstance;return pInstance;
}}
void Release(void*p)void Release(void*p)
{{
free(p);free(p);
}}
int Callback(void*p)int Callback(void*p)
{{
Module_Instance*pInstance=(Module_Instance*)p;Module_Instance*pInstance=(Module_Instance*)p;
printf(“%d\r\n”,*pInstance->pInput0);printf("%d\r\n",*pInstance->pInput0);
return 0;return 0;
};};
extern“C”int ModuleD()extern "C" int ModuleD()
{{
Regist(“ModuleD”,Callback,Create,Release);Regist("ModuleD",Callback,Create,Release);
return 0;return 0;
};};
int gINIT=ModuleD();int gINIT=ModuleD();
E.c的内容如下:The content of E.c is as follows:
typedef structtypedef struct
{{
int Output0;int Output0;
int*pOutput0;int*pOutput0;
int iOutputStatus0;int iOutputStatus0;
int Output1;int Output1;
int*pOutput1;int*pOutput1;
int iOutputStatus1;int iOutputStatus1;
int Output2;int Output2;
int*pOutput2;int*pOutput2;
int iOutputStatus2;int iOutputStatus2;
}Module_Instance;}Module_Instance;
void*Create(const char*InstanceName)void*Create(const char*InstanceName)
{{
Module_Instance*pInstance=(Module_Instance*)calloc(sizeof(Module_Instance));Module_Instance*pInstance=(Module_Instance*)calloc(sizeof(Module_Instance));
pInstance->pOutput0=&pInstance->Output0;pInstance->pOutput0=&pInstance->Output0;
pInstance->pOutput1=&pInstance->Output1;pInstance->pOutput1=&pInstance->Output1;
pInstance->pOutput2=&pInstance->Output2;pInstance->pOutput2=&pInstance->Output2;
RegistOutput(InstanceName,”MODULE_E_OUTPUT_0”,&pInstance->iOutputStatus0,”int”,&pInstance->pOutput0);RegistOutput(InstanceName,"MODULE_E_OUTPUT_0",&pInstance->iOutputStatus0,"int",&pInstance->pOutput0);
RegistOutput(InstanceName,”MODULE_E_OUTPUT_1”,&pInstance->iOutputStatus1,”int”,&pInstance->pOutput1);RegistOutput(InstanceName,"MODULE_E_OUTPUT_1",&pInstance->iOutputStatus1,"int",&pInstance->pOutput1);
RegistOutput(InstanceName,”MODULE_E_OUTPUT_2”,&pInstance->iOutputStatus2,”int”,&pInstance->pOutput2);RegistOutput(InstanceName,"MODULE_E_OUTPUT_2",&pInstance->iOutputStatus2,"int",&pInstance->pOutput2);
return pInstance;return pInstance;
}}
void Release(void*p)void Release(void*p)
{{
free(p);free(p);
}}
int Callback(void*p)int Callback(void*p)
{{
Module_Instance*pInstance=(Module_Instance*)p;Module_Instance*pInstance=(Module_Instance*)p;
pInstance->iOutputStatus0=pInstance->iOutputStatus1=pInstance->iOutputStatus2=0;pInstance->iOutputStatus0=pInstance->iOutputStatus1=pInstance->iOutputStatus2=0;
*pInstance->pOutput0=1;*pInstance->pOutput0=1;
*pInstance->pOutput1=2;*pInstance->pOutput1=2;
*pInstance->pOutput2=3;*pInstance->pOutput2=3;
return 0;return 0;
};};
extern“C”int ModuleE()extern "C" int ModuleE()
{{
Regist(“ModuleE”,Callback,Create,Release);Regist("ModuleE",Callback,Create,Release);
return 0;return 0;
};};
int gINIT=ModuleE();int gINIT=ModuleE();
最后,利用系统API,假定在windows系统中,若A~E五个模块分别编译为Finally, using the system API, assuming that in the windows system, if the five modules A~E are compiled as
A.dll~E.dll五个动态库,借助Windows API LoadLibary,main.c的内容如下:A.dll~E.dll five dynamic libraries, with the help of Windows API LoadLibary, the content of main.c is as follows:
int main()int main()
{{
LoadLibary(“A.dll”);LoadLibary("A.dll");
LoadLibary(“B.dll”);LoadLibary("B.dll");
LoadLibary(“C.dll”);LoadLibary("C.dll");
LoadLibary(“D.dll”);LoadLibary("D.dll");
LoadLibary(“E.dll”);LoadLibary("E.dll");
Instance(“ModuleA”,”InstanceA”);Instance("ModuleA","InstanceA");
Instance(“ModuleB”,”InstanceB”);Instance("ModuleB","InstanceB");
Instance(“ModuleC”,”InstanceC”);Instance("ModuleC","InstanceC");
Instance(“ModuleD”,”InstanceD”);Instance("ModuleD","InstanceD");
Instance(“ModuleE”,”InstanceE”);Instance("ModuleE","InstanceE");
Link(“ModuleE”,“MODULE_E_OUTPUT_0”,“ModuleA”,”MODULE_A_INPUT_0”);Link("ModuleE","MODULE_E_OUTPUT_0","ModuleA","MODULE_A_INPUT_0");
Link(“ModuleA”,“MODULE_A_OUTPUT_0”,“ModuleB”,”MODULE_B_INPUT_0”);Link("ModuleA","MODULE_A_OUTPUT_0","ModuleB","MODULE_B_INPUT_0");
Link(“ModuleE”,“MODULE_E_OUTPUT_1”,“ModuleB”,”MODULE_B_INPUT_1”);Link("ModuleE","MODULE_E_OUTPUT_1","ModuleB","MODULE_B_INPUT_1");
Link(“ModuleB”,“MODULE_B_OUTPUT_0”,“ModuleC”,”MODULE_C_INPUT_0”);Link("ModuleB","MODULE_B_OUTPUT_0","ModuleC","MODULE_C_INPUT_0");
Link(“ModuleE”,“MODULE_E_OUTPUT_2”,“ModuleC”,”MODULE_C_INPUT_1”);Link("ModuleE","MODULE_E_OUTPUT_2","ModuleC","MODULE_C_INPUT_1");
Link(“ModuleC”,“MODULE_C_OUTPUT_0”,“ModuleD”,”MODULE_D_INPUT_0”);Link("ModuleC","MODULE_C_OUTPUT_0","ModuleD","MODULE_D_INPUT_0");
return Start(“InstanceE”);return Start("InstanceE");
}}
具体的运行流程及模块间的调用关系如图9所示:The specific operation process and the calling relationship between modules are shown in Figure 9:
首先,加载各模块,注册模块名、模块入口函数、模块实例创建函数和释放函数;加载实例列表;加载数据映射表;启动调度模块。调度模块将实例E(InstanceE)送入调度队列。读取调度队列,获得实例E,调度模块调用实例E,并重置实例E的输入数据集状态。调度模块发送命名数据MODULE_E_OUPUT_0,依据数据映射表,送到MODULE_A_INPUT_0的缓存中,判断实例A的触发条件,条件满足,将实例A置入调度队列。调度模块发送命名数据MODULE_E_OUPUT_1,依据数据映射表,送到MODULE_B_INPUT_1的缓存中,判断实例B的触发条件,不满足,继续。调度模块发送命名数据MODULE_E_OUPUT_2,依据数据映射表,送到MODULE_C_INPUT_1的缓存中,判断实例C的触发条件,不满足,继续。检查调度队列;读取调度队列,获得实例A,调度模块调用实例A,并重置实例A的输入数据集状态。调度模块发送命名数据MODULE_A_OUPUT_0,依据数据映射表,送到MODULE_B_INPUT_0的缓存中,判断实例B的触发条件,条件满足,将实例B置入调度队列。检查调度队列;读取调度队列,获得实例B,调度模块调用实例B,并重置实例B的输入命名数据集状态。调度模块发送命名数据MODULE_B_OUPUT_0,依据数据映射表,送到MODULE_C_INPUT_0的缓存中,判断实例C的触发条件,条件满足,将实例C置入调度队列。检查调度队列;读取调度队列,获得实例C,调度模块调用模块C,并重置实例C的输入命名数据集状态。调度模块发送命名数据MODULE_C_OUPUT_0,依据数据映射表,送到MODULE_D_INPUT_0的缓存中,判断实例D的触发条件,条件满足,将实例D置入调度队列。检查调度队列;读取调度队列,获得实例D,调度模块调用模块D,并重置实例D的输入命名数据集状态;检查调度队列为空,返回main;结束。First, load each module, register the module name, module entry function, module instance creation function and release function; load the instance list; load the data mapping table; start the scheduling module. The scheduling module sends instance E (InstanceE) into the scheduling queue. Read the dispatch queue to obtain instance E, the dispatch module calls instance E, and resets the input data set state of instance E. The scheduling module sends the named data MODULE_E_OUPUT_0, and sends it to the buffer of MODULE_A_INPUT_0 according to the data mapping table to determine the trigger condition of instance A. If the condition is met, the instance A is placed in the dispatch queue. The scheduling module sends the named data MODULE_E_OUPUT_1 and sends it to the buffer of MODULE_B_INPUT_1 according to the data mapping table to determine the trigger condition of instance B. If it is not met, continue. The scheduling module sends the named data MODULE_E_OUPUT_2 and sends it to the buffer of MODULE_C_INPUT_1 according to the data mapping table to determine the trigger condition of instance C. If it is not met, continue. Check the dispatch queue; read the dispatch queue to obtain instance A, the dispatch module calls instance A, and resets the input data set state of instance A. The scheduling module sends the named data MODULE_A_OUPUT_0, and sends it to the buffer of MODULE_B_INPUT_0 according to the data mapping table to determine the trigger condition of instance B. If the condition is met, the instance B is placed in the dispatch queue. Check the dispatch queue; read the dispatch queue to obtain instance B, the dispatch module calls instance B, and resets the input named data set state of instance B. The scheduling module sends the named data MODULE_B_OUPUT_0, and sends it to the buffer of MODULE_C_INPUT_0 according to the data mapping table to determine the trigger condition of the instance C, and the condition is met, and the instance C is placed in the dispatch queue. Check the dispatch queue; read the dispatch queue, obtain instance C, dispatch module calls module C, and reset the input named data set state of instance C. The scheduling module sends the named data MODULE_C_OUPUT_0, and sends it to the buffer of MODULE_D_INPUT_0 according to the data mapping table to determine the trigger condition of the instance D. If the condition is met, the instance D is placed in the dispatch queue. Check the dispatch queue; read the dispatch queue, obtain instance D, the dispatch module calls module D, and reset the input named data set state of instance D; check that the dispatch queue is empty, return to main; end.
根据本发明的方案,通过将具有独立数据处理能力的模块编写为功能模块,基于数据映射表提供的映射关系,实现数据的传输和处理。本方案从根本上解决了软件开发过程中的功能耦合和数据耦合的问题。在源软件编写的层面上就可实现功能模块隔离、系统处理逻辑独立的方法,为解决软件开发过程中的大分工问题提供了必要的技术手段。本方案的实施不仅使得功能模块可一次开发处处使用,大幅提高开发效率,而且使得开发出的软件产品便于修改,易于维护,具有很大的使用及推广价值。According to the solution of the present invention, a module with independent data processing capability is written as a functional module, and data transmission and processing are realized based on the mapping relationship provided by the data mapping table. This solution fundamentally solves the problem of functional coupling and data coupling in the software development process. At the level of source software compilation, it is possible to realize the method of functional module isolation and system processing logic independence, which provides the necessary technical means for solving the large division of labor in the software development process. The implementation of this program not only enables functional modules to be used everywhere at one time, greatly improving development efficiency, but also makes the developed software products easy to modify, easy to maintain, and have great use and promotion value.

Claims (21)

  1. 一种软件运行方法,所述软件包括多个相互独立的功能模块,所述功能模块适于对输入数据进行处理以得到输出数据,所述功能模块具有用于缓存其输入数据的输入缓存区,所述方法适于在运行系统中执行,所述运行系统驻留于计算设备中,所述方法包括:A software operation method, the software includes a plurality of mutually independent functional modules, the functional modules are adapted to process input data to obtain output data, and the functional modules have an input buffer area for buffering the input data, The method is adapted to be executed in an operating system that resides in a computing device, and the method includes:
    获取所述软件的数据映射表,所述数据映射表适于记录数据在多个功能模块之间的传递方向;Acquiring a data mapping table of the software, where the data mapping table is suitable for recording the transfer direction of data among multiple functional modules;
    获取一功能模块的输出数据;Obtain the output data of a functional module;
    基于数据映射表,确定以所述输出数据为输入数据的在后功能模块,将所述输出数据存储到所述在后功能模块的输入缓存区中;以及Based on the data mapping table, determine the subsequent functional module that uses the output data as input data, and store the output data in the input buffer area of the subsequent functional module; and
    当所述输入缓存区中包括所述在后功能模块所需的所有输入数据时,调用所述在后功能模块以进行数据处理。When the input buffer area includes all the input data required by the subsequent functional module, the subsequent functional module is called for data processing.
  2. 如权利要求1所述的方法,其中,所述数据映射表配置于所述软件的主模块中或配置于其他文件中,所述其他文件与所述软件相互独立;3. The method of claim 1, wherein the data mapping table is configured in a main module of the software or in other files, and the other files are independent of the software;
    所述获取所述软件的数据映射表的步骤包括:从主模块或其他文件中获取并加载数据映射表。The step of obtaining the data mapping table of the software includes: obtaining and loading the data mapping table from the main module or other files.
  3. 如权利要求1或2所述的方法,其中,所述功能模块还具有用于缓存其输出数据的输出缓存区;The method according to claim 1 or 2, wherein the function module further has an output buffer area for buffering its output data;
    所述获取一功能模块的输出数据的步骤包括:从该功能模块的输出缓存区中读取输出数据。The step of obtaining the output data of a functional module includes: reading the output data from the output buffer area of the functional module.
  4. 如权利要求1或2所述的方法,其中,所述功能模块还包括用于发送输出数据的数据发送接口;The method according to claim 1 or 2, wherein the functional module further comprises a data sending interface for sending output data;
    所述获取一功能模块的输出数据的步骤包括:接收该功能模块的数据发送接口所发送的输出数据。The step of obtaining the output data of a functional module includes: receiving the output data sent by the data sending interface of the functional module.
  5. 如权利要求1-4中任一项所述的方法,其中,所述功能模块还具有对应的调用入口和用于缓存输入数据状态的输入状态缓存区,当将功能模块的输入数据存储至其输入缓存区后,将输入状态缓存区中相应输入数据的状态设置为可用;The method according to any one of claims 1-4, wherein the function module further has a corresponding call entry and an input state buffer area for buffering the state of input data, and when the input data of the function module is stored in it After entering the buffer area, set the state of the corresponding input data in the input state buffer area to available;
    所述调用所述在后功能模块以进行数据处理的步骤包括:The step of calling the subsequent function module for data processing includes:
    根据所述输入状态缓存区,检查所述在后功能模块所需的输入数据的状态;According to the input state buffer area, check the state of the input data required by the subsequent functional module;
    在所需的输入数据的状态全部为可用的情况下,调用所述在后功能模块以进行数据处理。In the case where all the required input data states are available, the subsequent function module is called to perform data processing.
  6. 如权利要求3所述的方法,其中,所述功能模块还具有用于缓存输出数据状态的输出状态缓存区;The method according to claim 3, wherein the functional module further has an output state buffer area for buffering the output data state;
    在所述调用所述在后功能模块以进行数据处理的步骤之后,还包括:After the step of calling the subsequent function module for data processing, the method further includes:
    将所述在后功能模块的输出数据存储至其输出缓存区;以及Store the output data of the subsequent functional module in its output buffer area; and
    将其输出状态缓存区中的输出数据的状态设置为可用。Set the status of the output data in its output status buffer area to available.
  7. 如权利要求1所述的方法,还包括:The method of claim 1, further comprising:
    获取并记录各功能模块的输入缓存区、输入状态缓存区、输出缓存区、输出状态缓存区中至少之一的地址,其中,所述输入缓存区、输入状态缓存区、输出缓存区、输出状态缓存区的地址由相应的功能模块提供。Obtain and record the address of at least one of the input buffer area, input state buffer area, output buffer area, and output state buffer area of each functional module, wherein the input buffer area, input state buffer area, output buffer area, and output state The address of the buffer area is provided by the corresponding function module.
  8. 如权利要求1所述的方法,其中,所述功能模块可以以创建多个实例的方式被复用,每个实例分别对应于一个输入缓存区和/或输出缓存区。The method according to claim 1, wherein the functional module can be multiplexed by creating multiple instances, and each instance corresponds to an input buffer area and/or an output buffer area.
  9. 如权利要求1所述的方法,其中,The method of claim 1, wherein:
    各功能模块的输入数据和输出数据采用数据名称和数据类型的组合来进行标识。The input data and output data of each functional module are identified by a combination of data name and data type.
  10. 如权利要求1所述的方法,其中,所述软件中被调用的第一个功能模块为一个不具有输入数据的功能模块。The method according to claim 1, wherein the first function module called in the software is a function module without input data.
  11. 一种软件运行系统,驻留于计算设备中,适于运行软件,所述软件包括多个相互独立的功能模块,所述功能模块适于对输入数据进行处理以得到输出数据,所述软件运行系统包括调度模块,所述调度模块包括:A software running system that resides in a computing device and is suitable for running software. The software includes a plurality of mutually independent functional modules, and the functional modules are adapted to process input data to obtain output data. The software runs The system includes a scheduling module, the scheduling module includes:
    输入缓存区注册接口,适于记录各功能模块的输入缓存区地址,所述输入缓存区用于缓存功能模块的输入数据;The input buffer area registration interface is suitable for recording the address of the input buffer area of each functional module, and the input buffer area is used to buffer the input data of the functional module;
    模块注册接口,适于记录各功能模块的调用入口地址以及作为其触发条件的输入数据集;Module registration interface, suitable for recording the call entry address of each function module and the input data set as its trigger condition;
    数据映射加载接口,适于获取所述软件的数据映射表,并根据所述数据映射表设置功能模块的输出数据到在后功能模块的输入数据的映射关系;The data mapping loading interface is adapted to obtain the data mapping table of the software, and set the mapping relationship between the output data of the functional module and the input data of the subsequent functional module according to the data mapping table;
    数据分发器,适于获取功能模块的输出数据,根据所述数据映射表,将获取到的输出数据发送至相应的在后功能模块的输入缓存区,以及当输入缓存区中包括在后功能模块所需的所有输入数据时,将在后功能模块的调用入口地址发送至调度器;The data distributor is adapted to obtain the output data of the functional module, and according to the data mapping table, send the obtained output data to the input buffer area of the corresponding subsequent functional module, and when the input buffer area is included in the subsequent functional module When all required input data, the call entry address of the subsequent function module is sent to the scheduler;
    调度器,适于接收功能模块的调用入口地址并调用功能模块以进行数据处理。The scheduler is adapted to receive the call entry address of the function module and call the function module for data processing.
  12. 如权利要求11所述的系统,其中,所述数据映射表配置于所述软件的主模块中或配置于其他文件中,所述其他文件与所述软件相互独立;The system according to claim 11, wherein the data mapping table is configured in the main module of the software or in other files, and the other files are independent of the software;
    所述数据映射加载接口适于:从主模块或其他文件中获取并加载数据映射表。The data mapping loading interface is suitable for obtaining and loading the data mapping table from the main module or other files.
  13. 如权利要求11或12所述的系统,其中,所述调度模块还包括:The system according to claim 11 or 12, wherein the scheduling module further comprises:
    输出缓存区注册接口,适于记录各功能模块的输出缓存区地址,所述输出缓存区用于缓存功能模块的输出数据;The output buffer area registration interface is suitable for recording the output buffer area address of each functional module, and the output buffer area is used to buffer the output data of the functional module;
    所述数据分发器适于:从功能模块的输出缓存区中读取输出数据。The data distributor is adapted to read output data from the output buffer area of the functional module.
  14. 如权利要求11或12所述的系统,其中,所述功能模块包括用于发送输出数据的数据发送接口;The system according to claim 11 or 12, wherein the functional module includes a data sending interface for sending output data;
    所述调度模块还包括:数据接收接口,适于接收功能模块的数据发送接口所发送的输出数据,以及将接收到的输出数据发送至所述数据分发器。The scheduling module further includes: a data receiving interface adapted to receive output data sent by the data sending interface of the function module, and send the received output data to the data distributor.
  15. 如权利要求11-14任一项所述的系统,其中,所述调度模块还包括:The system according to any one of claims 11-14, wherein the scheduling module further comprises:
    输入状态缓存区注册接口,适于记录各功能模块的输入状态缓存区地址,所述输入状态缓存区用于缓存功能模块的输入数据的状态;The input state buffer area registration interface is suitable for recording the address of the input state buffer area of each functional module, and the input state buffer area is used to buffer the state of the input data of the functional module;
    所述数据分发器还适于:在输入缓存区中包括在后功能模块所需的所有输入数据且这些输入数据全部可用时,将在后功能模块的调用入口地址发送至调度器,以便调度器调用所述在后功能模块。The data distributor is further adapted to: when all the input data required by the subsequent functional module is included in the input buffer area and all the input data is available, the call entry address of the subsequent functional module is sent to the scheduler so that the scheduler Call the subsequent function module.
  16. 如权利要求13所述的系统,其中,所述调度模块还包括:The system according to claim 13, wherein the scheduling module further comprises:
    输出状态缓存区注册接口,适于记录各功能模块的输出状态缓存区地址,所述输出状态缓存区用于缓存功能模块的输出数据的状态;The output state buffer area registration interface is suitable for recording the address of the output state buffer area of each functional module, and the output state buffer area is used to buffer the state of the output data of the functional module;
    所述调度器适于:在调用功能模块以进行数据处理后,将功能模块的输出数据存储至其输出缓存区,以及将其输出状态缓存区中的输出数据的状态设置为可用。The scheduler is adapted to store the output data of the function module in its output buffer area after calling the function module for data processing, and set the status of the output data in its output state buffer area to be available.
  17. 如权利要求11所述的系统,其中,所述调度模块还包括:The system according to claim 11, wherein the scheduling module further comprises:
    数据映射解除接口,适于将功能模块的输出数据到在后功能模块的输入数据的映射关系从所述数据映射表中删除。The data mapping release interface is adapted to delete the mapping relationship between the output data of the functional module and the input data of the subsequent functional module from the data mapping table.
  18. 如权利要求11所述的系统,其中,所述调度模块还包括:The system according to claim 11, wherein the scheduling module further comprises:
    系统控制接口,适于接收控制数据以控制所述软件的运行。The system control interface is adapted to receive control data to control the operation of the software.
  19. 如权利要求18所述的系统,其中,所述系统控制接口包括:The system of claim 18, wherein the system control interface comprises:
    启动接口,适于接收启动数据以启动所述软件的运行,或者将指定的功能模块的调用入口地址发送至调度器以启动所述软件的运行。The startup interface is adapted to receive startup data to start the operation of the software, or send the call entry address of the designated function module to the scheduler to start the operation of the software.
  20. 一种计算设备,包括:A computing device including:
    至少一个处理器;和At least one processor; and
    存储有程序指令的存储器;Memory storing program instructions;
    当所述程序指令被所述处理器读取并执行时,使得所述计算设备执行如权利要求1-10中任一项所述的方法。When the program instructions are read and executed by the processor, the computing device is caused to execute the method according to any one of claims 1-10.
  21. 一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行如权利要求1-10中任一项所述的方法。A readable storage medium storing program instructions, when the program instructions are read and executed by a computing device, the computing device executes the method according to any one of claims 1-10.
PCT/CN2019/087961 2019-04-26 2019-05-22 Software operating method and system, computing device and storage medium WO2020215425A1 (en)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN201910345058.2 2019-04-26
CN201910345058.2A CN111857886A (en) 2019-04-26 2019-04-26 Software running method, system, computing equipment and storage medium

Publications (1)

Publication Number Publication Date
WO2020215425A1 true WO2020215425A1 (en) 2020-10-29

Family

ID=72941010

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/CN2019/087961 WO2020215425A1 (en) 2019-04-26 2019-05-22 Software operating method and system, computing device and storage medium

Country Status (2)

Country Link
CN (1) CN111857886A (en)
WO (1) WO2020215425A1 (en)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7120908B1 (en) * 2001-12-04 2006-10-10 Yazaki North America, Inc. Method and system for improving memory allocation in embedded software design applications
CN103019743A (en) * 2012-12-31 2013-04-03 清华大学 Modular signal processing flow graph and multiprocessor hardware platform modeling method
CN103970900A (en) * 2014-05-27 2014-08-06 重庆大学 Multi-dimensional cross data flexible management method and system based on industrial field
CN109614518A (en) * 2018-11-15 2019-04-12 深圳市酷开网络科技有限公司 A kind of storage of network flow data, restoring method and system

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150370582A1 (en) * 2014-06-19 2015-12-24 Ray Kinsella At least one user space resident interface between at least one user space resident virtual appliance and at least one virtual data plane
CN107508698B (en) * 2017-07-20 2020-07-24 上海交通大学 Software defined service reorganization method based on content perception and weighted graph in fog calculation

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7120908B1 (en) * 2001-12-04 2006-10-10 Yazaki North America, Inc. Method and system for improving memory allocation in embedded software design applications
CN103019743A (en) * 2012-12-31 2013-04-03 清华大学 Modular signal processing flow graph and multiprocessor hardware platform modeling method
CN103970900A (en) * 2014-05-27 2014-08-06 重庆大学 Multi-dimensional cross data flexible management method and system based on industrial field
CN109614518A (en) * 2018-11-15 2019-04-12 深圳市酷开网络科技有限公司 A kind of storage of network flow data, restoring method and system

Also Published As

Publication number Publication date
CN111857886A (en) 2020-10-30

Similar Documents

Publication Publication Date Title
Bonachea et al. GASNet Specification, v1. 8.1
US11733985B2 (en) Accessing a migrated member in an updated type
US8117615B2 (en) Facilitating intra-node data transfer in collective communications, and methods therefor
US8397225B2 (en) Optimizing just-in-time compiling for a java application executing on a compute node
US7246346B2 (en) System and method for persisting dynamically generated code in a directly addressable and executable storage medium
US20080270979A1 (en) Methods and systems for using type models to generate an implementation of a type
US8566368B2 (en) Garbage collection extensibility via managed code
US9811319B2 (en) Software interface for a hardware device
US10891214B2 (en) Transferring a debug configuration amongst carrier threads for debugging a carried thread
EP2941694B1 (en) Capability based device driver framework
US20110173595A1 (en) Language-based model for asynchronous operations
WO2023207418A1 (en) Sdk upgrade method and apparatus, and computer device
US8490115B2 (en) Ambient state for asynchronous methods
WO2020215425A1 (en) Software operating method and system, computing device and storage medium
EP2941695B1 (en) High throughput low latency user mode drivers implemented in managed code
US8286128B2 (en) Methods for type analysis in systems for code generation
US10891213B2 (en) Converting between a carried thread and a carrier thread for debugging the carried thread
Takaso et al. Component Framework for Multiprocessor Real-Time Operating Systems
Harvey InceOS: The Insense-specific operating system
Yang et al. A RISC-V On-chip Operating System Based on Rust
Maas et al. A JVM for the Barrelfish Operating System
Thompson et al. Introducing the .NET Micro Framework
CN112256455A (en) Method, medium and electronic device for optimizing transaction remote procedure call
CN115495201A (en) Embedded abstract virtual machine system for edge computing
Vik Space-Bounded Async Scheduling: A UPC++ Extension

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 19925783

Country of ref document: EP

Kind code of ref document: A1

NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 19925783

Country of ref document: EP

Kind code of ref document: A1