软件总线的利记博彩app

文档序号:6498113阅读:786来源:国知局
软件总线的利记博彩app
【专利摘要】本发明涉及软件模块之间,特别是软件总线之间进行通信的方法的领域。这里描述了一种可实现软件模块间通信的软件总线。这种通信出现在机器间,并交替作用于软件模块,不论此软件模块是否正在处理进程、轻量进程或简单任务。这种通信依赖于适应多任务等级的机制,发送器软件模块和接收器软件模块运行在此等级上。此通信基于分层体系架构,需经由总线进行通信的多个软件模块的发现和记录阶段。
【专利说明】软件总线
[0001]本发明涉及在软件模块之间,特别是在软件总线之间进行通信的方法的领域。
[0002]信息处理装置在操作系统的控制下进行工作。这些操作系统是多任务的,并使得多个软件模块的调度成为可能。根据组织多任务和模块层次可能性的调度器,这些软件模块可以分为几种类型。
[0003]在历史上,操作系统使进程的调度成为可能。进程被定义为拥有自身控制和自身存储空间的软件模块。现今,进程的调度通常使用抢占式的方式来执行。换句话说,调度器可随意地决定在进程之间进行上下文切换的时间。随后,当前进程的上下文(通常是内存缓存中的内容、处理器寄存器中的内容以及指示控制的指针)被存储。等待中的另一个进程被选择,并且其上下文被恢复。之后,这个进程就可继续它的执行过程。
[0004]上下文切换是一个相对复杂的过程。驱动较轻并行软件模块的需求已经出现。线程的概念也因此被创建。一般来说,一组线程是在公用存储空间进行调度的,它通常是一个进程的情况。
[0005]在某些情况下,能够实现补充级并且能够实际上在线程中调度一组任务。该调度随后会变为或不变为抢占式的。在任务将控制明确地传递给调度器的情况下,另外一类调度族,合作调度,在出现特定系统调用的时刻发生。主要的区别涉及以下事实:在这类调度中,进入无限循环的任务可能会妨碍系统接管和阻塞整个系统。因为任务在任何时间都不能被中断,所以这种调度的优势在于:不必对由互斥(mutex)机制共享的资源进行保护。
[0006]因此,我们可以将执行在信息处理设备上的软件看作一个或多个进程,每个进程可使其自身包括一个或多个线程,每个线程又能够包括一个或多个任务。对于进程和线程的调度被认为是抢占式的,而对于任务的调度可能是也可能不是抢占式的。我们通常用软件模块这个术语来命名所有的进程、线程和任务。
[0007]软件模块的层次由图1所示。在其中可看到信息处理装置1.1。此装置使三个进程1.2、1.3、1.4能够被并行执行。这些进程由操作系统1.16来进行调度。包含一些并行执行线程1.5、1.6、1.7和1.8的进程1.2由操作系统1.16调度。进程1.3不包含任何线程。进程1.4包含首要线程1.9和次要线程1.10。这个次要线程1.10本身包含一些在调度器1.14的控制下并行执行的任务1.11、1.12和1.13,调度器1.14自身则在线程1.10中执行。这种装置具有至少一个通信端口 1.15,该至少一个通信端口 1.15提供经由通信网络(通常是IP网络)与其他装置的通信。
[0008]当需要进行软件模块通信时,专用于给定级别的并行度的解决方案已在先前技术中被发现。其主要技术是专用于进程间通信的。信息列队、用于同一装置的进程间通信的UNIX套接字和用于连接至IP (互联网协议)网络的远程设备上的进程间通信的INET套接字可被引用。可以存在软件总线,如用于进程间通信的系统的D-Bus。但它并不适用于如简单任务的软件模块,也不适用于线程或机器间的通信。
[0009]本发明旨在提出一种可提供软件模块间通信的通信系统或软件总线。这种通信存在于单个机器中且位于不同机器间,并且无差别的作用于软件模块上,不管是在进程、线程还是简单任务的情况下。这种通信基于适用于多任务等级的机制,发送器和接收器软件模块就运行在这个多任务等级上。这种通信基于层次架构和需要经由总线进行通信的多种软件模块的发现阶段和记录阶段。


【发明内容】

[0010]因此,本发明涉及一种信息处理装置,这种装置包括:
[0011]-操作系统:
[0012]-至少一个进程,由所述操作系统调度,以及
[0013]-线程,能够由所述操作系统在所述进程中进行调度。
[0014]其特征在于,所述信息处理装置还包括:
[0015]-至少一个用户任务或者系统任务,位于各线程中,
[0016]-各线程本身包含针对所述线程中包括的各个任务的FIFO、以及线程类型的、本身集成了用于调度所述线程的一个或多个任务的专属调度器的总线管理模块,
[0017]其特征还在于,为了使第一任务能够向第二任务发送消息,所述信息处理装置包括:
[0018]-用于寻找所述第二任务所依靠的进程的装置,以及
[0019]-在所述第二任务和所述第一任务属于相同进程的情况下用于在所述第二任务专用的FIFO中传送所述消息使得所述第二任务能够考虑所述消息的装置,
[0020]-在所述第二任务属于与所述第一任务所依靠的进程不同的进程的情况下
[0021]-用于在所述第二任务所依靠的进程的线程中创建远程中继任务的装置,
[0022]-用于在所述第一任务所依靠的进程的线程中创建中继任务的装置,
[0023]-用于在所述第一任务所依靠的进程与所述第二任务所依靠的进程之间创建连接的装置,
[0024]-用于在所述中继任务专用的FIFO中传送所述消息的装置,
[0025]-用于经由所述连接将所述消息发送至所述远程中继任务的装置,
[0026]-用于在所述第二任务的FIFO中传送所述消息使得所述第二任务能够考虑所述消息的装置。
[0027]有利地,所述用于寻找所述第二任务所依靠的进程的装置包括与各个进程相关的总线管理模块,所述总线管理模块中的每一个均包括列出进程的任务和线程的路由表,其中任务和线程依靠进程。
[0028]有利地,对于各个进程,用于在所述中继任务与所述远程中继任务之间发送消息的装置包括由进程的线程托管的进程间通信模块。
[0029]有利地,所述信息处理装置包括将进程中的一个初始化为主进程并将其他进程初始化为从属进程的装置。
[0030]有利地,所述主进程包括由进程的线程托管的装置间通信模块,以便能够在装置的中继任务和由另一个信息处理装置托管的远程中继任务之间发送消息。
[0031]本发明还涉及一种在运行于一个或两个之前描述的信息处理装置上的任务之间交换消息的方法。该方法的特征在于,为了使消息能够从第一任务发送到第二任务,所述方法包括
[0032]-由托管所述第一任务的线程的总线管理模块实现的以下步骤:
[0033]-在所述第二任务和所述第一任务属于相同进程的情况下,在所述第二任务专用的FIFO中传送所述消息使得所述第二任务能够考虑所述消息的步骤;
[0034]-在所述第二任务和所述第一任务属于不同进程的情况下向所述主进程的总线管理模块发送寻找所述第二任务的消息的步骤,
[0035]-由所述主进程的总线管理模块实现的以下步骤:
[0036]-当所述第二任务由所述主进程的线程托管时,
[0037]-在所述主进程的线程中创建远程中继任务的步骤,
[0038]-向托管所述第一任务的线程的总线管理模块发送响应的步骤,
[0039]-当所述第二任务不由所述主进程的线程托管时,
[0040]-向进程类型的总线管理模块中的每一个广播寻找所述第二任务的消息的步骤,
[0041]-在接收到寻找所述第二任务的消息时,由托管所述第二任务的从属进程的总线管理模块实现的以下步骤:
[0042]-在所述从属进程的线程中创建远程中继任务的步骤,
[0043]-向所述主进程的总线管理模块发送响应的步骤,
[0044]-同样由所述主进程的总线管理模块实现的步骤:在接收到由所述从属进程的总线管理模块发送的响应后,向所述托管所述第一任务的线程的总线管理模块发送响应,以及
[0045]-当托管所述第一任务的线程的总线管理模块接收到来自所述主进程的总线管理模块的响应后,由托管所述第一任务的线程的总线管理模块实现的以下步骤:
[0046]-在托管所述第一任务的进程的线程中创建对应所述远程中继任务的中继任务的步骤,以及
[0047]-在所述中继任务专用的FIFO中传送所述消息的步骤,其中所述中继任务专用的FIFO先将所述消息发送到所述远程中继任务,再将所述消息发送到所述第二任务。
[0048]根据本发明的另一个有利特征,所述方法包括的初始化总线的以下步骤:
[0049]-从属进程的总线管理模块建立与主进程的总线管理模块的连接链路的步骤;
[0050]-总线的各个客户端任务通过对它们所依靠的总线进行管理的模块来记录的步骤;
[0051]-建立与总线的各个客户端任务和总线的各个管理模块相关的FIFO的步骤;
[0052]-接收总线的客户端软件模块的记录的从属进程的总线管理模块将这些记录导出到所述主进程的总线管理模块的步骤。
[0053]根据本发明的另一个有利特征,所述初始化步骤进一步包括在所述主进程中创建与装置中的从属进程的总线的客户端任务的数量相当的中继任务的步骤。
[0054]根据本发明的另一个有利特征,通过公用模式或私用模式来记录总线的客户端任务,只有公用的任务才被导出到所述主进程。
[0055]根据本发明的另一个有利特征,所述方法进一步包括在参与于总线的机器之间进行发现的步骤。
[0056]在参与于总线的机器之间进行发现的步骤例如包括:
[0057]-参与于总线的各个机器通过连接所述机器的通信网络发送声明的声明步骤;
[0058]-接收来自远程机器的声明消息的步骤;
[0059]-如果发送被接收声明消息的机器还是未知的则将该机器加入到表中的步骤;
[0060]-建立与所述远程机器的连接的步骤。

【专利附图】

【附图说明】
[0061]通过阅读示例性实施方式的结合附图给出的下面的描述,上述的本发明的特征以及其他特征将会变的更加清楚,在附图中:
[0062]图1示出了可在机器上执行的多种类型的软件模块。
[0063]图2示出了本发明的实施方式中的总线的软件架构。
[0064]图3示出了机器中的总线的初始化阶段。
[0065]图4示出了在参与总线的机器之间的发现阶段。
[0066]图5示出了总线的依靠同一个总线管理模块的两个客户端软件模块间的信息交换。
[0067]图6示出了总线的依靠不同总线管理模块但托管于相同进程的两个客户端软件模块间的信息交换。
[0068]图7示出了总线的托管于不同进程甚至不同机器的两个客户端软件模块间的信息交换。
[0069]图8示出了依照于特定实施方式的信息处理装置的架构,以及
[0070]图9示出了依照本发明的方法的多个步骤的图表。

【具体实施方式】
[0071]图2示出了本发明的实施方式中的总线的软件架构。本发明基于信息处理装置
2.1中的两个可能的进程架构。进程2.2示出了第一个可能的架构。在此架构中,总线2.4的第一管理软件模块使一个或多个的软件模块2.6,2.7和2.8能够与总线进行通信。旨在与总线进行通信的软件模块被称为总线的客户端模块。这些软件模块通常是在进程中被并行调度的线程。总线2.4的管理模块通常也是线程。这些线程随后会在进程中的由操作系统进行调度。调度方式通常为抢占式。可选地,可通过进程中的自组(ad hoc)调度器对软件模块进行调度,这些软件模块随后被称为在进程中并行执行的任务。随后其调度可以是或不是抢占式的。自组调度器可以依照实施方式与总线2.4的管理模块或独立模块(未显示)进行合并。
[0072]在进程2.3中,线程2.5被用来为进程管理总线。线程2.9是总线的客户端进程。另一方面,线程2.10不是总线的直接客户端。它托管线程内部的总线管理模块2.11和一个或多个的任务2.12,2.13和2.14。在这之后这些任务才变为总线的客户端。这些任务通过自组调度器在线程2.10中被调度,其中自组调度器可与或不与总线管理模块2.11合并。
[0073]随后软件被分为进程2.2和2.3。每个进程都包括总线2.4,2.5的管理模块。进程还负责托管一个或多个总线2.6,2.7,2.8和2.9的客户端软件模块。这些总线的客户端可以是在进程中直接执行的线程或任务。这些客户端还可能包括在线程中执行的任务2.12、
2.13和2.14。该线程还负责托管总线的管理模块2.11。
[0074]在机器中的总线的初始化阶段以图3所示的下述方式进行。将与总线进行通信的客户端软件模块分布在一个或多个进程中。这些进程中的一个进程被选作主进程。其余进程,如果有的话,则变为从属进程。
[0075]在步骤3.1中,从属进程的总线管理模块建立与主进程的总线管理模块的连接链路。通常,这个连接链路是UNIX套接字。
[0076]在步骤3.2中,总线的各个客户端软件模块通过总线进行注册。该注册通过客户端软件模块所依靠的进程或线程中的总线管理模块进行。有利地,该注册包含软件模块的名称、对上述客户端软件模块所依靠的总线管理模块的引用、以及可见模式。可见模式包含私用模式,在私用模式下,总线的客户端软件模块可以在总线上向其它公用客户端发送消息并接收与之相关的响应,但不接收来自其他公用客户端的直接消息。可见模式还包含公用模式,在公用模式下,总线的客户端软件模块的名称和位置都是公开的,也因此可以接收和发送消息。
[0077]在步骤3.3中,针对总线的每个已注册的客户端软件模块,总线管理模块建立在总线的相同管理模块上进行交换的情况下使用的FIFO(先入先出)。如果由FIFO负责的总线管理模块的列队和总线的客户端的列队协同作用,则这些FIFO可以是简易的FIFO,就是说它们不被互斥所保护。在相反的情况下,则使用受互斥机制保护的FIFO。总线的每个管理模块都拥有在与总线的其它管理模块进行交换的情况下使用的FIFO来管理对与此客户端模块相关的消息的接收。
[0078]在步骤3.4中,接收总线的客户端软件模块的注册的从属进程的总线管理模块将这些注册导出到主进程的总线管理模块。总线的这个管理模块维护存在于机器上的总线的客户端软件模块的表格,该表格被称为用户路径表。用户在这里是总线的客户端模块。有利地、只有被宣布为公用的模块才会出现在此表格中。
[0079]在步骤3.5中,主进程里,主进程的总线管理模块启动与装置中从属进程的总线的客户端软件模块数量相当的软件模块。这些软件模块由主进程的总线管理模块进行管理,并被称为中继(代理服务)软件模块。这个步骤是可选的。在如下面将要描述的信息交换中,中继进程可根据需要可选地建立。
[0080]装置中的总线的启动阶段因此构成了内部发现阶段,在内部发现阶段中,装置中的多个进程与被选作主进程的进程建立通信,同时,装置中的总线的每个客户端软件模块都被主进程的总线管理模块所发现,该管理模块保有装置中的总线的所有客户端软件的表格。
[0081]有利地,总线的初始化还包括在参与于该总线的机器间进行发现的步骤。这个步骤如图4中的流程图表所示。它是针对于各个装置的,由主进程的总线管理模块来实现的。
[0082]在声明步骤4.1中,每个装置通过连接各个装置的通信网络发送声明。有利地,这种发送是在其子网络上用广播模式通过局域网链路,和在特定群组中用多播模式通过广域网链路完成的。有利地,通过不断重复这种发送,使连接到总线的新机器能够发现现有的机器。声明信息包括机器的名称和其IP地址以及使能IP连接的端口。
[0083]在步骤4.2中,装置接收来自远程装置的声明信息。
[0084]在步骤4.3中,装置检查发送它所接收声明的远程装置是否是已知的。有利地,此装置维护显示已知机器的表格,这样就可以满足它通过此表格来检查是否存在此远程装置入口的需要了。
[0085]如果此装置是已知的,则不需要进行任何操作,在等待接收另一个声明信息时会产生循环。
[0086]如果此装置是未知的,它则会在步骤4.4中被添加到表格上。在表格中会建立已知机器的入口,入口通过远程装置的名称、IP地址和它可被连接的端口来显示。
[0087]在步骤4.5中,与远程装置的连接被建立。此连接可以以机器间通信专用的INET套接字的形式存在。有利地,两个INET套接字被创建,一个使用信息交换专用的TCP (传输控制协议),另一个使用信令消息(如声明信息)专用的UPD (用户数据报协议)。
[0088]在这种机器间发现阶段的最后,连接到总线的各个机器的各个主进程的总线管理模块都是相互连接的。在每个机器中,所有远程机器都是已知和被引用的。通信链路会针对这些远程机器中的每一个进行建立。
[0089]总线的两个客户端软件模块间的消息交换使用相同的编程接口 API (应用程序编程接口)来访问总线,不论这两个软件模块是什么类型。
[0090]总线的依靠相同总线管理模块的两个客户端软件模块间的消息交换如图5所示。在这种情况下,这两个客户端通常是同一线程中的任务。
[0091]在步骤5.1中,发送器通过总线的API传送它的消息,并指定被访地址的名称。
[0092]在步骤5.2中,总线管理模块认知到被访地址是自身范围的一部分,例如,通过将被访地址的总线管理模块的引用与它自己的进行比较;随后在其的简单FIFO中传送此消肩、O
[0093]在步骤5.3中,被访地址通过对简单FIFO进行提取的操作对为它准备的一个或多个消息进行恢复。
[0094]总线的、不依靠该总线的相同管理模块但存储于相同进程中的、两个客户端软件模块之间的消息的交换如图6所示。
[0095]在步骤6.1中,发送器通过总线的API传送它的消息,并指定被访地址的名称。
[0096]在步骤6.2中,总线管理模块认知到被访地址不是自身范围的一部分,例如,通过将被访地址的总线管理模块的引用和它自己的进行比较;随后在被访地址的总线管理模块的FIFO中传送此消息。
[0097]在步骤6.3中,被访地址的总线管理模块提取出其FIFO中存在的一个或多个消息,并将它们传送到上述消息的被访地址的FIFO中。
[0098]在步骤6.4中,被访地址通过对FIFO进行提取的操作对为它准备的一个或多个消息进行恢复。
[0099]关于由位于不同进程的总线客户端软件模块构成的发送器和接收器之间的信息传输,这种传输使用的是中继软件模块。在每个进程中,总线具有用于对由总线管理且充当远程软件模块的中继的总线客户端软件模块进行初始化的装置。因此被访地址的中继软件模块在发送器的进程中建立,而发送器的中继软件模块则在被访地址的进程中建立。这些中继软件模块由总线管理。因此,从被访地址的发送器来看,通信好像总是在进程内部。同样的基元可为总线的客户端软件模块所用。是总线在管理经由这些中继软件模块进行的进程间通信。这些中继软件模块还使通信的异步运行变得可行。这是因为发送器在通过被访地址的中继软件模块传送它的消息的同时还可继续它的处理过程。在这期间,总线将消息通过进程间的连接(通常是UNIX套接字)发送到真正的被访地址。
[0100]关于进程间的这种通信,已经知道在总线进行初始化时,从属进程和主进程间会建立起通信链路。但是,从属进程彼此间没有链路被建立。因此,也就是说,当发送器和被访地址需由两个从属进程托管时,这两个从属进程间会建立起链路(通常是UNIX套接字)。
[0101]托管于不同机器的发送器和被访地址间的传输过程是通过完全相同的方式进行的。它也牵涉被访地址进程中发送器的中继模块和发送器进程中的被访地址的中继模块。由这两个机器的主进程的总线管理模块管理的路由阶段使这两个进程中建立起直接连接。这里的这种连接通常是INET套接字。
[0102]这种通信通过如图7所示的流程来实现。
[0103]在第一步7.1中,想要发送消息的被称为发送器的总线客户端软件模块通过总线通过被访地址的名称执行路由步骤,即通过它所依靠的总线管理模块来执行路由步骤。
[0104]在步骤7.2中,当总线认知到被访地址托管于不同进程时,它在发送器进程中创建此被访地址的中继软件模块。在一些实施方式中,如果中继在初始化阶段中被创建,则中继模块可以是预先存在的(如在主进程中),参见可选步骤3.5。
[0105]在步骤7.3中,消息随后依照所描述的在进程中传输消息的机制被传送到这个中继软件模块。如果通信是异步的,则发送器即可重新开始它的进程。
[0106]在步骤7.4中,总线会按照要求创建与托管被访地址的进程的直接链路。这里有一些案例。如果通信发生在同一机器中的从属进程和主进程之间,那么通信链路是已存在的。不必再进行创建。如果通信发生在同一机器的两个从属进程之间,那么这两个从属进程之间就必须要建立起通信链路(通常是以UNIX套接字的形式)。如果通信发生在两个不同的机器间,那么两个进程间就必须创建起直接链路(通常是以INET套接字的形式)。直接链路的创建由互换必要地址和端口的两个机器的主进程来协商进行的。
[0107]在步骤7.5中,总线在托管被访地址的进程中创建发送器的中继软件模块。
[0108]在步骤7.6中,消息随后通过创建于两个进程间的直接通信链路在两个中继间进行传递。
[0109]在最后一步7.7中,包括通过已向最终被访地址描述的进程间机制来传递消息。
[0110]有利地,总线客户端软件模块的命名是依照源于用于URL(统一资源定位器)的方案进行。根据这种方案,模块的名称按如下方式被分解:“ism://name_machine/name_modul e_sof tware ”,其中I SM是依照本发明分配给总线协议的名称。在同一机器中,简化为“name_module_software”的相关命名可被使用。
[0111]有利地,相同进程范围内的FIFO中的多个消息的各种副本被规避。在公共内存空间中,消息被复制一次,之后仅有一个消息的引用被交换。这种方法限制了实际的复制。
[0112]图8示出了信息处理装置3的配置实例,在给定示例中,具有与本说明书的图1和图2中示出的信息处理装置相比的细节,通过阅读本说明书的余下部分而看出的细节。
[0113]可以看到,在讨论中的时刻,信息处理装置3使三个进程3.1,3.2和3.3能够并行执行。这三个进程由信息处理装置3的操作系统3.0来调度。
[0114]进程3.1自身包括多个线程3.11,3.12和3.13,它们在操作系统3.0的调度下并行执行。进程3.1还包括与进程3.10同一类型的总线管理模块。
[0115]线程3.11包括系统任务,即使消息能够在进程间进行交换的属于进程间类型3.118的通信模块(将在下面进行说明)和使消息能在多个信息处理装置间进行交换的属于装置间类型3.119的通信模块。线程3.12包括两个用户任务3.121和3.122以及属于线程3.120类型的总线管理模块,其中总线管理模块包括单个线程3.12的所有任务的专属调度器(未显示),在此情况中为任务3.121和3.122。线程3.13包括用户任务3.131和属于线程类型的总线管理模块3.130,其中总线管理模块3.130包括用户任务3.131的专属调度器。
[0116]进程3.2包括线程3.21和属于进程3.20类型的总线管理模块。线程3.21包括用户任务3.211和系统任务(即属于进程间类型3.218的通信模块)和属于线程3.210类型的总线管理模块,其中该总线管理模块包括单个线程3.21的所有任务的专属调度器,在此情况中则是用户任务3.211和通信模块3.218。
[0117]进程3.3包括两个线程3.31和3.32以及属于进程类型的总线管理模块3.30。线程3.31包括用户任务3.311和系统任务(即属于进程间类型的通信模块3.318),以及属于线程类型的总线管理模块3.310,其中总线管理模块3.310包括线程3.31的所有任务(即任务3.311和通信模块3.318)的专属调度器。同样对进程3.32来说,它包括两个用户任务3.321和3.322以及属于线程类型的总线管理模块3.320,总线管理模块3.320包括线程的所有任务即任务3.321和3.322的专属调度器。
[0118]需要指出的是调度体系是分层的,因此在同一进程中它包括一个或多个自身包含一个或多个任务的线程。此外,对进程和线程的调度将被认为是抢占式的,并通过信息处理装置的操作系统3.0来执行的。对线程中任务的调度来说,它被认为是或不是抢占式的,并通过专属调度器来执行,也就是说从属于上述线程。
[0119]应指出,在另一个时刻,这种配置可能会改变。因为,举例来说,任务、线程甚至是进程已经结束了它的执行过程,或者因为在所谓的移动模式下,任务已从一个线程转移到同一进程或不同进程中的另一个线程。
[0120]每个属于线程类型的总线管理模块都包括受保护的FIFO和分别专用于相应线程的用户任务的FIFO。这些FIFO的作用将在下文进行说明。为了减轻图片的负荷,这些FIFO并未显示在图8中。
[0121]每个属于进程类型3.10,3.20和3.30的总线管理模块都进一步包括路径表3.101,3.201,3.301 ;这些路径表中存储着每个任务的名称、以及对相应线程类型的总线管理模块中的FIFO的引用。
[0122]每个任务都能够发送和接收指令消息、发送和接收指令消息的响应、以及发送和接受通知、发送和接受通知的响应。
[0123]为发送指令消息,任务为这类型消息调用一种独特的典型的方法,在这种方法中,此类消息被视为相关任务在上述相关总线的注册过程中,相关任务引用所提供的参数、相关总线名称和相关任务的名称(<name_distant_bus>/〈name_distant_task>),可选地,如果这个任务要求响应,(那么此类消息就被视为)用于此类型响应的以总线为原型的引用和回调函数、以及执行命令所必需的参数。
[0124]为接受指令消息,任务通过由上述总线披露的用于此类指令接收的方法来定位以总线为原型的事件触发函数(被称为回调函数)和用于触发此函数的引用。
[0125]为发送通知,任务为这类通知调用一种独特的典型的方法,在这种方法中,此类通知被视为任务引用所涉及的参数(在上述总线进行注册时所提供的),可选地,如果这个任务要求响应,用于此类型响应的以总线为原型的引用和回调函数,以及用于通知的所需参数。
[0126]最后,为接受:通知,任务将所涉及总线的名称和所涉及任务的名称〈name_distant_bus>/〈name_distant_task>、以上述总线为原型的事件触发函数(回调函数)以及触发上述函数的引用进行定位。
[0127]为发送指令消息或通知的响应消息,总线管理模块为这类响应调用一种独特的典型的方法,在这种方法中,此类消息被视为消息引用通过调用预配于上述消息接收的回调函数来提供的参数,以及上述函数所必需的参数。
[0128]图1所示的这些多种类型的任务、多种类型的线程和进程都属于同一个被称为软件总线的逻辑实体,举例来说,这种软件总线可被命名为“bus_l”。
[0129]本发明仅对路由功能使用主/从分层体系架构。因此,在信息处理装置之中,一个进程被初始化为主模式,同时同装置中的其他进程被初始化为从属模式。在所示的配置实例中,在信息处理装置I中,进程3.1被初始化为主模式,进程3.2和3.3被初始化为从属模式。
[0130]需要指出的是,包括主进程和从属进程在内的拥有不同名称的一些总线可能共存于同一个信息处理装置上。
[0131]主进程3.1具有通信模块3.118、通信模块3.218和3.318,属于主进程3.1的进程间类型3.118的通信模块3.118在名为“/var/run/bus_l/Master”的Unix套接字上处于监听模式,属于进程间类型的通信模块3.218和3.318在主进程3.1的Unix套接字上处于连接模式。
[0132]需要注意,通常来说,在同一个信息处理装置中,主进程和从属进程的总线的名称是相同的,但是这种情况绝不是绝对的。
[0133]通过访问表在从属进程、主进程和身份识别验证间建立连接后,从属进程3.2和3.3分别通过端口 3.118_12和3.118_13与主进程相连接。进程的每个连接都被认为是与讨论中的总线名称的连接,在此情况下是总线“buS_l”。
[0134]对于在任务间路由消息的过程,本发明使用中央集成的分层体系架构;然而,对于任务间的消息交换,本发明使用分布式的体系架构。为了解释这两个特征,任务间传输消息交换的实例将在下文中给出。
[0135]因此应理解,在信息处理装置I和同一进程中,不论主进程或是从属进程,一个任务希望向另一个构成相同线程一部分的任务发送消息。举例来说,名为3.321的任务希望向构成同一线程3.32 一部分的名为3.322的任务发送一个已知消息。线程总线3.321的管理模块接管此消息,并向属于进程类型3.30的总线管理模块请求此消息应该遵循的路径。通过路径表3.301,属于进程类型3.30的总线管理模块回复它对被线程总线3.320相同管理模块所托管的任务3.322专用的不受保护FIFO的引用。上述线程总线3.320的管理模块随后在上述的FIFO中传送上述消息,并触发关于调度这个目的任务3.322的请求。一旦这个任务被调度,此消息就会从FIFO中被提取,任务3.322则通过调用它有消息中所含参数的事件触发函数(回调函数)将此消息纳入考虑。
[0136]现在考虑信息处理装置I中的任务,它想要向构成另一线程的一部分但在同一进程中的任务发送消息。举例来说,名为3.321的任务想要向名为3.311的构成另一线程3.31的一部分但同属于进程3.3的任务发送消息。线程总线3.321的管理模块接管此消息,并向属于进程类型3.30的总线管理模块请求应遵循的路线。总线管理模块回复它对属于线程类型的总线管理模块3.310的受保护FIFO的引用。上述的属于线程类型的总线管理模块3.320随后在上述的线程3.310总线管理模块的受保护FIFO中传送此消息,并通过可用操作系统3.0实现的某种方法,提出调度包含上述FIFO的管理模块(即总线管理模块3.310)的请求。一旦总线管理模块3.310被调度,线程3.310的总线管理模块就会将消息从受保护的FIFO中提取出来,并像前一个例子那样向进程的总线管理模块3.30发送路由请求,同时从总线管理模块3.30得到对于不受保护FIFO的引用;以此通过目的任务3.311来接收被发送的消息。线程的总线管理模块3.310随后在这个不受保护的FIFO中传送消息并提出调度目的任务3.311的请求。一旦任务3.311被调度,此消息就会从FIFO中被提取,任务3.311则通过调用它有消息中所含参数的事件触发函数(回调函数)将此消息纳入考虑。
[0137]需要指出的是,如果FIFO在消息被发送到其中时并不是空闲的,那则是因为它所包含的一个或多个信息还没有被提取。然而,这也意味着对相应线程的唤醒已被触发。因此,只有在FIFO是空的时才可能完成对线程的唤醒。
[0138]还需要指出的是,为了满足用户任务的移动端,路由过程是被常规性执行的。这是因为尽管目的任务在从受保护FIFO中提取消息之前已被转移,路由过程还是会使能必需的路由重建。
[0139]现在考虑在信息处理装置I中,从属进程线程上的任务想要向托管于主进程线程的另一个任务发送消息。举例来说,任务3.321想要向名为3.121的托管于进程3.1的线程3.12的任务发送已知消息。属于线程类型3.320的总线管理模块接管此消息并向属于进程类型的总线管理模块3.30请求此消息应遵循的路径。总线管理模块3.30则回复目的任务3.121对于它是未知的。总线管理模块3.30存储此要进行传输的消息,并使用信令连接3.318_13以“distant-task search (远程任务搜索)”的消息类型(如来自本地任务3.321)发送一条消息。线程3.11的进程3.1的通信模块3.118在它的连接3.118_33上接收此“distant-task search (远程任务搜索)”类型的消息,并通知属于进程类型的总线管理模块3.10,总线管理模块3.10随后在它的路径表3.101中进行寻找。
[0140]在总线管理模块3.10的路径表3.101中,目的任务3.121被认为是常驻于线程3.12上的。依照本发明,属于进程类型3.10的总线管理模块建立一个拥有从搜索消息中提取的特性的远程中继任务R3.321 ;此中继任务被建立在与之前接收此搜索消息的通信模块所在的相同的线程上,即线程3.11。随后属于进程类型3.10的总线管理模块经由接收此搜索消息的连接,即连接3.118_33向管理模块3.30发送“add relay task(增加中继任务)”类型的(如来自本地任务3.121)具有建立中继任务所需特性的消息,作为对上述搜索消息的回应。线程3.31的进程3.3的通信模块3.318在它的连接3.318_31上接收“addition of remote task (增加远程任务)”类型的消息并通知属于进程类型3.30的总线管理模块。属于进程类型3.30的总线管理模块建立具有从此消息中提取的特性的中继任务R3.121,此中继任务被建立在与之前接收此附加类型的消息的通信模块所在的相同的线程上,在此情况下是线程3.31 ;随后属于进程类型3.30的总线管理模块用这个新任务来扩大它的路径表。接下来是对等待路由的对应此名称的消息的搜索。相应的消息被存储在目的任务R3.121专用的不受保护的FIFO中。
[0141]属于线程类型3.310的总线管理模块生成用于调度这个中继任务R3.121的指令。一旦这个任务被调度,属于线程类型的总线管理模块3.310就将通信装置3.318的连接3.118_33中的消息进行序列化。由属于线程类型的总线管理模块3.110管理的连接3.118_33对此消息进行接收和反序列化。管理模块3.110随后执行所有已描述的用来在任务3.121专用的FIFO中传送消息的操作,并在任务3.121专用的FIFO是空闲的情况下,通过这些操作来生成调度指令。一旦任务3.121被调度,消息就会从FIFO中被提取,任务3.121通过调用它的有消息中所含参数的事件触发函数(回调函数)将此消息纳入考虑。
[0142]可以理解的是,任务3.321可以通过线程3.31的中继任务R3.121和线程3.11的中继任务R3.321来与任务3.121进行通信。
[0143]重新考虑在信息处理装置I中,从属进程的任务想要向另一个现托管在另一从属进程线程上的任务发送一个已知消息。举例来说,任务3.321想要向名为3.211的由线程3.21上进程3.2托管的任务发送消息。属于线程类型3.320的总线管理模块3.320接管此消息并向属于进程类型的总线管理模块3.30请求此消息需遵循的路径。总线管理模块3.30则向总线管理模块3.320回复这个目的任务对于它是未知的。总线管理模块3.30将此消息进行存储并通过进程间类型3.318的通信模块来发送一个“remote task search (远程任务搜索)”类型的消息(如来自任务3.321)。主进程3.1和线程3.11的通信模块3.118在它的信令类型连接3.118_33上接受此“remote task search(远程任务搜索)”的消息,并通知属于进程类型3.10的总线管理模块,这个总线管理模块随后在自己的路径表3.101中进行寻找。
[0144]属于进程类型3.10的总线管理模块中,因为目的任务3.211并不托管于主进程3.1,所以目的任务对这个总线管理模块是未知的。属于进程类型的总线管理模块3.10在所有带有相关总线名字“bus_l”建立的连接中广播这条搜索信息(除了看到上述第一条搜索信息通过的连接),也就是说在通信模块3.119和3.118_32中的带有名称“bus_l”的连接中进行广播。在接收到此“remote task search (远程任务搜索)”类型的消息时,每个通信模块都针对它所依靠的进程类型向总线管理模块进行通知,总线管理模块来查找所要寻找的目的任务是否出现在自己的路径表中。
[0145]只有线程3.21的进程3.2的通信模块3.218的路径表中有常驻于和通信模块3.218相同进程和相同线程的相关任务3.211,通信模块3.218将其通知给线程类型3.20的总线管理模块。此总线管理模块,如上文已经说明的,在与之前接受搜索消息的通信模块3.218所处的相同线程3.21上建立一个具有从搜索信息中提取特性的中继任务R3.321,并扩大自身的路径表,发起对等待路由的消息的搜索;同时使用名为“/var/run/busj/Slave_3.2”的Unix套接字的名称作为消息的连接参数来传输“add remote relay (添加远程中继)”类型的消息(如来自任务3.211)。线程3.11的进程3.1的通信模块3.118在它的连接3.118_32上接收此“add remote relay task(添加远程中继)”类型的消息并将其传送到第一个搜索信息请求来源的连接3.118_33。线程3.11的进程3.1的通信模块3.118在它的连接3.118_31接收此“add remote relay task(添加远程中继)”类型的消息并将其通知给进程类型3.30的总线管理模块。
[0146]进程类型3.30的总线管理模块在与托管之前接收“add remote relay task(添加远程中继)”类型3.318消息的通信模块3.318的相同的线程3.31上建立具有从搜索消息中提取特性的中继任务R3.211,随后通过上述中继任务R3.211来扩大自己的路径表3.301。此外,进程类型3.30的总线管理模块用上述“add remote relay task(添加远程中继)”类型的消息所含的信息来初始化连接请求;随后,在此连接被接受时,识别和身份验证通过访问表按阶段进行。接下来是对等待路由的对应此名称的消息的搜索。相应的消息被存储于目的任务R3.211专用的不受保护的FIFO中。
[0147]线程类型3.310的总线管理模块发出调度这个中继任务R3.211的请求。一旦这个中继任务R3.211被调度,线程类型的总线管理模块3.310就将包含于通信模块3.318的连接3.318_32中的消息进行序列化。由总线管理模块3.210管理的连接3.21_33对此消息进行接收和反序列化。
[0148]管理模块3.210随后执行所有的已描述的用来在任务3.211专用FIFO中传送消息的操作,并在此FIFO空闲时执行所有已描述的用来发出调度请求的所有操作。一旦任务3.211被调度,消息就会从FIFO被提取出来,任务3.211通过调用有消息中所含参数的事件触发函数(回调函数)来将此消息纳入考虑。
[0149]任务3.211的操作模式可被扩展用来进行信息处理装置间的消息交换,增加远程任务类型的消息随后将通过装置间通信模块3.119和ip端口地址类型的INET套接字信息一起到达。在此情况中,序列化/反序列化阶段是必需的。
[0150]在移动模式中,依照本发明的总线的功能如下所示。
[0151]考虑在信息处理装置I中,名为3.321的任务从总线撤销注册。相应的线程类型的总线管理模块3.321随后会释放FIFO资源、调度器资源和注册时补充的引用资源。线程类型的总线管理模块3.321还会面向进程中所有线程的所有本地任务和进程中信令类型的所有连接,通过通信模块3.318生成远程任务消除消息3.321。通信装置3.118的连接
3.118_33接受此消息并通知进程类型的总线管理模块3.10,此总线管理模块负责检查它是否有相应的远程中继任务。如果是这样的话,此总线管理模块就会释放这些远程中继任务。如果有消息在等待回执,这些消息则是被重新插入FIFO中等待远程中继搜索进程的,这种进程将因此被启动。进程类型的总线管理模块还会检查数据类型的连接是否没有连接到任何一个远程中继任务。如果是这样的话,它就将释放此链接,并通过除了消息来源之外的所有信令连接,即3.118_32和3.119传播此消息。通信装置3.218的连接3.128_31接收此消息并通知给进程类型的总线管理模块,此总线管理模块负责检查它是否有相应的远程中继任务。如果是这样的话,此总线管理模块就会释放这些远程中继任务。如果有消息在等待回执,这些消息则是被重新插入FIFO中等待远程中继搜索进程的,这种进程将因此被启动。进程类型的总线管理模块还会检查数据类型的连接是否没有连接到任何一个远程中继任务。如果是这样的话,它就会释放这个连接。
[0152]此外,如果任务3.321被插入到进程3.2的线程3.21中,进程类型3.20的总线管理模块的路径表就会将这个名称增加进来。其结果是一个搜索对应此名称的等待消息的过程。另外,对应此名称的搜索消息会得到尊重。
[0153]概括来说,参考图9,为了从首要任务3.321向第二任务传送消息,依照本发明的消息交换方法包括:
[0154]-由托管上述第一任务3.321的线程3.32的总线管理模块3.320执行的以下步骤:
[0155]-步骤5.1:当上述第二任务3.322或3.311和上述第一任务3.321从属于相同的进程3.3时,在上述第二任务3.322专用的FIFO中传送上述消息,这样第二任务3.322可以将此消息纳入考虑,否则
[0156]-步骤5.2:向上述主进程3.1的总线管理模块3.10传送寻找第二任务的消息,
[0157]-由主进程3.1的总线管理模块3.10执行的以下步骤:
[0158]-当上述次要进程3.121托管于上述主进程3.1的线程3.12时,
[0159]-步骤5.3:在上述主进程3.1的线程3.11中建立远程中继任务R3.321,
[0160]-步骤5.4:向上述托管第一任务3.321的线程3.32的总线管理模块3.320传送响应,
[0161]-当上述次要进程3.121不被上述主进程3.1的线程3.12托管时,
[0162]-步骤5.5:向上述各个进程类型的总线管理模块(在此情况中,只有模块3.20)广播寻找第二任务的消息,
[0163]-接收到寻找第二任务的消息时,由托管第二任务3.211的从属进程3.2的总线管理模块3.20执行的以下步骤:
[0164]-步骤5.6:在上述从属进程3.2的线程3.21中建立远程中继任务R3.321,
[0165]-步骤5.7:向上述主进程3.1的总线管理模块3.10传送响应,
[0166]-步骤5.8:在接收到由从属进程3.2的总线管理模块3.20传送的响应后,向上述托管第一任务3.321的线程3.32的总线管理模块3.30发送响应;此步骤依然由主进程3.1的总线管理模块3.10执行,以及
[0167]-当托管上述第一任务3.321的线程3.32的总线管理模块3.30接收到来自上述主进程3.1的总线管理模块3.10的响应后,由托管上述第一任务3.321的线程3.32的总线管理模块3.30执行的以下步骤:
[0168]-步骤5.9:在托管上述第一任务3.321的上述进程3.3的线程3.31中,建立对应于上述远程中继任务R3.321的中继任务R3.211,以及
[0169]-步骤5.10:在上述中继任务R3.211专用的FIFO中传送上述消息,中继任务R3.211专用的FIFO先将此消息传送到远程中继任务R3.321,随后再将此次消息传送到第二任务 3.211。
[0170]因此,如下文所解释的,本发明提出了一种用来在从属于不同线程的不同任务间进行通信的系统,其中这些线程本身又从属于不同的进程。同时在此系统中,上述任务被分组到同一个实体或软件总线,或者从另一方面说,从属于不同的软件总线。
[0171]总之,这种任务间的通信使用的是基于I对I或者I对η发送消息的命令/响应类型的客户端/服务器模式,以及基于I对η发送消息的通知/响应类型的客户端/服务器模式。它使用将客户端任务根据〈总线名称>/〈任务名称〉的格式进行命名的系统。这类通信可通过任务对任务直接进行通信或经由插入服务(如产生服务命令随后通知用户任务服务的任务系统)间接进行通信来实现。这类通信发生在同一个进程装置中,但也可能出现在两个信息处理装置间。另外,对于这类通信来说,任务可被托管于和/或被移动到特定的信息处理装置或特定的进程或特定的线程上。
[0172]这类通信是基于总线名称和任务名称,分层调度体系架构,用于路由功能的中央集成体系架构,用于消息交换的分布式体系架构,以及发现和注册/注销注册多个拥有一个或多个总线名称的任务的阶段的。
【权利要求】
1.一种信息处理装置,包括: -操作系统: -至少一个进程,由所述操作系统调度,以及 -线程,能够由所述操作系统在所述进程中进行调度, 其特征在于,所述信息处理装置还包括: -至少一个用户任务或者系统任务,位于各线程中, -各线程本身包含针对所述线程中包括的各个任务的FIFO、以及线程类型的、本身集成了用于调度所述线程的一个或多个任务的专属调度器的总线管理模块, 其特征还在于,为了使第一任务能够向第二任务发送消息,所述信息处理装置包括: -用于寻找所述第二任务所依靠的进程的装置,以及 -在所述第二任务和所述第一任务属于相同进程的情况下用于在所述第二任务专用的FIFO中传送所述消息使得所述第二任务能够考虑所述消息的装置, -在所述第二任务属于与所述第一任务所依靠的进程不同的进程的情况下 -用于在所述第二任务所依靠的进程的线程中创建远程中继任务的装置, -用于在所述第一任务所依靠的进程的线程中创建中继任务的装置, -用于在所述第一任务所依靠的进程与所述第二任务所依靠的进程之间创建连接的装置, -用于在所述中继任务专用的FIFO中传送所述消息的装置, -用于经由所述连接将所述消息发送至所述远程中继任务的装置, -用于在所述第二任务的FIFO中传送所述消息使得所述第二任务能够考虑所述消息的装置。
2.根据权利要求1所述的信息处理装置,其特征在于,所述用于寻找所述第二任务所依靠的进程的装置包括与各个进程相关的总线管理模块,所述总线管理模块中的每一个均包括列出进程的任务和线程的路由表,其中任务和线程依靠进程。
3.根据权利要求1或2所述的信息处理装置,其特征在于,对于各个进程,用于在所述中继任务与所述远程中继任务之间发送消息的装置包括由进程的线程托管的进程间通信模块。
4.根据前述权利要求中任一项所述的信息处理装置,其特征在于,所述信息处理装置包括将进程中的一个初始化为主进程并将其他进程初始化为从属进程的装置。
5.根据权利要求4所述的信息处理装置,其特征在于,所述主进程包括由进程的线程托管的装置间通信模块,以便能够在装置的中继任务和由另一个信息处理装置托管的远程中继任务之间发送消息。
6.—种在运行于一个或两个信息处理装置上的任务之间交换消息的方法,所述方法包括: -操作系统; -至少一个进程,由所述操作系统排序;所述进程或所述进程中的一个被初始化为主进程,并且如果存在其他进程的话,则将其他进程初始化为从属进程, -线程,能够由所述操作系统在所述进程中进行调度;以及 -至少一个用户任务和/或一个系统任务,特别是进程间通信模块或装置间通信模块,位于各个线程中;进程的至少一个线程包括进程间通信模块,并且所有进程的至少一个线程包括装置间通信模块, -各个进程都包括进程类型的总线管理模块,以及 -各个线程本身包括针对所述线程中包括的各个任务的FIFO、以及集成了用于调度上述线程的专属调度器的线程类型的总线管理模块, 其特征在于,为了使消息能够从第一任务发送到第二任务,所述方法包括 -由托管所述第一任务的线程的总线管理模块实现的以下步骤: -在所述第二任务和所述第一任务属于相同进程的情况下在所述第二任务专用的FIFO中传送所述消息使得所述第二任务能够考虑所述消息的步骤(5.1); -在所述第二任务和所述第一任务属于不同进程的情况下向所述主进程的总线管理模块发送寻找所述第二任务的消息的步骤(5.2), -由所述主进程的总线管理模块实现的以下步骤: -当所述第二任务由所述主进程的线程托管时, -在所述主进程的线程中创建远程中继任务的步骤(5.3), -向托管所述第一任 务的线程的总线管理模块发送响应的步骤(5.4), -当所述第二任务不由所述主进程的线程托管时, -向进程类型的总线管理模块中的每一个广播寻找所述第二任务的消息的步骤(5.5), -在接收到寻找所述第二任务的消息时,由托管所述第二任务的从属进程的总线管理模块实现的以下步骤: -在所述从属进程的线程中创建远程中继任务的步骤(5.6), -向所述主进程的总线管理模块发送响应的步骤(5.7), -同样由所述主进程的总线管理模块实现的、在接收到由所述从属进程的总线管理模块发送的响应后向所述托管所述第一任务的线程的总线管理模块发送响应的步骤(5.8),以及 -当托管所述第一任务的线程的总线管理模块接收到来自所述主进程的总线管理模块的响应后,由托管所述第一任务的线程的总线管理模块实现的以下步骤: -在托管所述第一任务的进程的线程中创建对应所述远程中继任务的中继任务的步骤(5.9),以及 -在所述中继任务专用的FIFO中传送所述消息的步骤(5.10),其中所述中继任务专用的FIFO先将所述消息发送到所述远程中继任务,再将所述消息发送到所述第二任务。
7.—种在运行于一个或两个信息处理装置上的任务之间交换消息的方法,其特征在于,所述方法包括的初始化总线的以下步骤: -从属进程的总线管理模块建立与主进程的总线管理模块的连接链路的步骤(3.1); -总线的各个客户端任务通过这些客户端任务所依靠的总线的管理模块来记录的步骤(3.2); -建立与总线的各个客户端任务和总线的各个管理模块相关的FIFO的步骤(3.3);-接收总线的客户端软件模块的记录的、从属进程的总线管理模块将这些记录导出到所述主进程的总线管理模块的步骤(3.4)。
8.根据权利要求7所述的方法,其特征在于,所述初始化步骤进一步包括在所述主进程中创建与装置中的从属进程的总线的客户端任务的数量相当的中继任务的步骤(3.5)。
9.根据权利要求6或7所述的方法,其特征在于,通过公用模式或私用模式来记录总线的客户端任务,只有公用的任务才被导出到所述主进程。
10.根据权利要求6到9中任一项所述的方法,其特征在于,所述方法进一步包括在参与于总线的机器之间进行发现的步骤。
11.根据权利要求5所述的方法,其特征在于,在参与于总线的机器之间进行发现的步骤包括: -参与于总线的各个机器通过连接所述机器的通信网络发送声明的声明步骤(4.1); -接收来自远程机器的声明消息的步骤(4.2); -如果发送被接收声明消息的机器还是未知的则将该机器加入到表中的步骤(4.4); -建立与所述远程机器的连接的步骤(4.5)。
【文档编号】G06F9/54GK104081355SQ201280068835
【公开日】2014年10月1日 申请日期:2012年12月14日 优先权日:2011年12月16日
【发明者】安东尼·罗科奎雷, 劳伦·阿拉科恩 申请人:萨热姆通信宽带简易股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1