JPH10207724A - Distributed application execution program - Google Patents
Distributed application execution programInfo
- Publication number
- JPH10207724A JPH10207724A JP9006747A JP674797A JPH10207724A JP H10207724 A JPH10207724 A JP H10207724A JP 9006747 A JP9006747 A JP 9006747A JP 674797 A JP674797 A JP 674797A JP H10207724 A JPH10207724 A JP H10207724A
- Authority
- JP
- Japan
- Prior art keywords
- message
- procedure
- program
- application execution
- processes
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 claims abstract description 252
- 238000004891 communication Methods 0.000 claims abstract description 29
- 238000012546 transfer Methods 0.000 claims abstract description 6
- 238000012545 processing Methods 0.000 claims description 40
- 230000005540 biological transmission Effects 0.000 description 39
- 238000007726 management method Methods 0.000 description 31
- 238000010586 diagram Methods 0.000 description 12
- 239000011800 void material Substances 0.000 description 12
- 230000006870 function Effects 0.000 description 4
- 238000011156 evaluation Methods 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 238000011161 development Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 101100445488 Neurospora crassa (strain ATCC 24698 / 74-OR23-1A / CBS 708.71 / DSM 1257 / FGSC 987) ptr-2 gene Proteins 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
Landscapes
- Computer And Data Communications (AREA)
Abstract
Description
【0001】[0001]
【発明の属する技術分野】本発明は、個人用コンピュー
タあるいはワークステーション等からなる複数のノード
がネットワークを介して有機的に結合された分散処理シ
ステムにおける分散アプリケーション実行システムに関
する。[0001] 1. Field of the Invention [0002] The present invention relates to a distributed application execution system in a distributed processing system in which a plurality of nodes such as personal computers and workstations are organically connected via a network.
【0002】[0002]
【従来の技術】分散システムにおいて実行されるアプリ
ケーションは、ネットワークを介して隔てられた個々の
ノードで生成される複数のプロセスによって構成され
る。プロセスは、実行中にあるプログラムの状態を指
し、単なる命令の列としてのプログラムと区別する。プ
ロセスは、その元となるプログラムをプロセッサが実行
することにより生じる。2. Description of the Related Art An application executed in a distributed system is composed of a plurality of processes generated at individual nodes separated through a network. A process refers to the state of a running program and distinguishes it from a program simply as a sequence of instructions. The process occurs when the processor executes the original program.
【0003】複数の分散アプリケーションを実行する分
散アプリケーション実行システムを、既存のプロセス間
通信技術、例えば遠隔手続き呼び出し(リモートプロシ
ジャーコール;RPC)を用いて実現する場合には、解
決すべき次のような問題がある。すなわち上記RPCに
おける呼び出し側からのプロシージャの特定は、プログ
ラムの識別によって行われるものとなっている。このこ
とは、複数のプロセスから構成される分散アプリケーシ
ョン空間を動的に設営しようとする際の制約になるとい
う問題点がある。When a distributed application execution system for executing a plurality of distributed applications is realized by using an existing inter-process communication technique, for example, a remote procedure call (remote procedure call; RPC), the following problem to be solved is obtained. There's a problem. That is, the procedure specified by the caller in the RPC is performed by identifying the program. This has a problem that it becomes a restriction when dynamically setting up a distributed application space composed of a plurality of processes.
【0004】[0004]
【発明が解決しようとする課題】したがって本発明は、
複数のプロセスから構成される分散アプリケーション空
間を動的に設営可能な分散アプリケーション実行システ
ムを提供することを目的とする。Accordingly, the present invention provides
An object of the present invention is to provide a distributed application execution system capable of dynamically setting up a distributed application space composed of a plurality of processes.
【0005】[0005]
(1)本発明の分散アプリケーション実行システムは、
複数のコンピュータノードがネットワークを介して結合
された分散処理システム上で前記ノード上に存在するプ
ロセス間のメッセージ受け渡しを行うアプリケーション
を実行する分散アプリケーション実行システムにおい
て、前記アプリケーションを構成するプロセスの生成元
となるプログラムを識別する第1の識別手段と、前記第
1の識別手段により識別されたプログラムによって生成
される少なくとも一つのプロセスを識別する第2の識別
手段とを具備し、前記プロセス間のメッセージ受け渡し
は、前記第1の識別手段によるプログラムの識別と、前
記第2の識別手段によるプロセスの識別とによって前記
プロセスを特定して行われることを特徴とする。(1) The distributed application execution system of the present invention comprises:
In a distributed application execution system for executing an application for passing messages between processes existing on the nodes on a distributed processing system in which a plurality of computer nodes are connected via a network, a generation source of a process constituting the application First identification means for identifying a program, and second identification means for identifying at least one process generated by the program identified by the first identification means, and message passing between the processes is provided. Is characterized in that the process is specified by the identification of the program by the first identification means and the identification of the process by the second identification means.
【0006】この構成により、上記アプリケーションを
構成するプロセス間のメッセージ受け渡しは、当該アプ
リケーションのプロセスの生成元となるプログラムの識
別ではなくプロセスの識別によって行うことができる。
このため、例えば同一のプログラムから生成された複数
のプロセスを識別してプロセス間のメッセージ受け渡し
を行うことができる。[0006] With this configuration, message transfer between the processes constituting the application can be performed not by identifying the program that is the source of the process of the application but by identifying the process.
Therefore, for example, a plurality of processes generated from the same program can be identified and messages can be transferred between the processes.
【0007】[0007]
【発明の実施の形態】以下、図面を参照して本発明によ
る分散アプリケーション実行システムの実施形態を説明
する。まず第1実施形態においては、分散アプリケーシ
ョンを構成する複数プロセス間のメッセージパッシング
(メッセージ受け渡し)を、遠隔手続き呼び出し(RP
C)によって実現する場合のシステム構成例について説
明する。また第2実施形態においては、同様に分散アプ
リケーションを構成する複数プロセス間のメッセージパ
ッシングを、いわゆるソケットインタフェースによるプ
ロセス間通信により実現する場合のシステム構成例につ
いて説明する。DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS Hereinafter, an embodiment of a distributed application execution system according to the present invention will be described with reference to the drawings. First, in the first embodiment, message passing (message passing) between a plurality of processes constituting a distributed application is performed by a remote procedure call (RP
An example of a system configuration realized by C) will be described. In the second embodiment, an example of a system configuration in which message passing between a plurality of processes constituting a distributed application is realized by inter-process communication using a so-called socket interface will be described.
【0008】(第1実施形態)図1は本発明の第1実施
形態に係る分散アプリケーション実行システムの一例を
示す論理構成図である。分散アプリケーション実行シス
テムは、一つあるいは複数の(コンピュータ)ノードを
有するイントラネット及びこれに相当する種々の局所的
なネットワークがインターネットを介して相互に接続さ
れて成る分散処理システム上において分散アプリケーシ
ョンを実行するものである。(First Embodiment) FIG. 1 is a logical configuration diagram showing an example of a distributed application execution system according to a first embodiment of the present invention. The distributed application execution system executes a distributed application on a distributed processing system in which an intranet having one or a plurality of (computer) nodes and various corresponding local networks are interconnected via the Internet. Things.
【0009】分散アプリケーション実行システムは、ネ
ットワークを介して隔てられた複数のプロセスのうち、
同図の一点鎖線Lによって包含されハッチングで示され
る特定のプロセスをその構成要素としている。また、分
散アプリケーション実行システムは、同空間内において
複数の分散アプリケーションを実行する。各々の分散ア
プリケーションは複数の実行プロセスを有し、これら実
行プロセス間においてメッセージパッシングを行って協
調動作する。[0009] The distributed application execution system includes a plurality of processes separated by a network.
A specific process which is encompassed by a dashed line L in FIG. The distributed application execution system executes a plurality of distributed applications in the same space. Each distributed application has a plurality of execution processes, and performs message passing between these execution processes to cooperate.
【0010】図2はこのような分散アプリケーション間
におけるメッセージパッシングの機能を実現するための
ソフトウェア構成図である。図2に示すように、分散ア
プリケーションAp1とAp2の間のメッセージパッシ
ングは、メッセージパッシングオペレータ部M1及びM
2と、通信メディアインタフェース部C1及びC2を介
して行われる。FIG. 2 is a software configuration diagram for realizing a message passing function between such distributed applications. As shown in FIG. 2, the message passing between the distributed applications Ap1 and Ap2 is performed by the message passing operator units M1 and M1.
2 through the communication media interface units C1 and C2.
【0011】図3はこのようなメッセージパッシングを
実現するためのより具体的な構成例を示すブロック図で
ある。分散評価部10、開発ツール(モニタ及びデバッ
ガ)11、そしてシステムイニシャライザ12が上記ア
プリケーションAp1(Ap2)に相当する。また、メ
ッセージディスパッチャ31及びメッセージ送信要求部
32を含むメッセージパッシングオペレータ部30が上
記メッセージパッシングオペレータ部M1(M2)に相
当する。ネットワークインタフェース61を有する通信
メディアインタフェース60が、上記通信メディアイン
タフェースC1(C2)に相当している。FIG. 3 is a block diagram showing a more specific configuration example for realizing such message passing. The distribution evaluation unit 10, the development tools (monitor and debugger) 11, and the system initializer 12 correspond to the application Ap1 (Ap2). The message passing operator unit 30 including the message dispatcher 31 and the message transmission request unit 32 corresponds to the message passing operator unit M1 (M2). The communication media interface 60 having the network interface 61 corresponds to the communication media interface C1 (C2).
【0012】そして本実施形態においては、通信メディ
アインタフェース部60が、同図に示すように通信メデ
ィア70を介して他のノードの通信メディアインタフェ
ース部に対して遠隔手続き呼び出し(RPC)を行うも
のとなっている。In this embodiment, the communication media interface unit 60 performs a remote procedure call (RPC) to a communication media interface unit of another node via a communication medium 70 as shown in FIG. Has become.
【0013】ここで、遠隔手続き呼び出しによるメッセ
ージパッシングを行う通信メディアインタフェース部6
0の具体的な構成例について説明する。図4は、ネット
ワークを介して隔てられたノード間(ノードA〜ノード
B)において、遠隔手続き呼び出しによりプロセス間の
メッセージパッシングを行う場合の構成を概略的に示す
ブロック図である。ノードA側のプロセス及びノードB
側のプロセスの両者は一つの分散アプリケーションの構
成要素である。Here, a communication media interface unit 6 for performing message passing by calling a remote procedure.
A specific configuration example of 0 will be described. FIG. 4 is a block diagram schematically showing a configuration in a case where message passing between processes is performed by calling a remote procedure between nodes (nodes A and B) separated via a network. Node A process and Node B
Both processes are components of one distributed application.
【0014】そしてここでは、遠隔手続き呼び出しによ
りノードAがノードBに対してメッセージ送信を行う場
合について説明する。同図に示すように、ノードA及び
ノードBの両プロセスは、遠隔手続呼び出しによるメッ
セージパッシングのための送信スレッド800(70
0)及び受信スレッド400(900)、そして受信ス
レッドにより生成されるメッセージ処理スレッド300
(600)から構成される。Here, a case where node A transmits a message to node B by calling a remote procedure will be described. As shown in the figure, both processes of the node A and the node B have a transmission thread 800 (70) for message passing by a remote procedure call.
0) and the receiving thread 400 (900), and the message processing thread 300 generated by the receiving thread
(600).
【0015】プロシージャ呼び出し要求としてのメッセ
ージ送信要求を受信する受信スレッド900の通信メデ
ィアインターフェース500は、受信準備プロシージャ
501と、ディスパッチプロシージャ502と、実処理
プロシージャ503と、RPC504とから構成され
る。RPC504は、受信準備プロシージャ501又は
ディスパッチプロシージャ502から呼び出されるラン
タイムライブラリとして実装され、このRPC504
は、メッセージ送信側のプロセスから送られてきたメッ
セージ送信要求(プロシージャ呼び出し要求)をポート
505を介して入力する。The communication media interface 500 of the reception thread 900 that receives a message transmission request as a procedure call request includes a reception preparation procedure 501, a dispatch procedure 502, an actual processing procedure 503, and an RPC 504. The RPC 504 is implemented as a runtime library called from the reception preparation procedure 501 or the dispatch procedure 502.
Input a message transmission request (procedure call request) transmitted from the message transmitting process via the port 505.
【0016】受信準備プロシージャ501は、メッセー
ジが到着した際にディスパッチプロシージャ502に制
御が渡るようRPC504に依頼する。ディスパッチプ
ロシージャ502はプロシージャ呼び出し要求を処理
し、実処理プロシージャ503を呼び出す。実処理プロ
シージャ503はメッセージ処理スレッド600を生成
してメッセージディスパッチャ601を生成する。メッ
セージディスパッチャ601は、受信したメッセージを
処理する。メッセージ処理スレッド600は、受信スレ
ッド500とは別のスレッドにより実行される。このた
め受信スレッド500の実処理プロシージャ503は速
やかに終了されることとなり、迅速に次のメッセージ待
ち状態に移行することになる。なお受信スレッド400
は、受信スレッド900と同様に構成される。図5に上
記メッセージ処理スレッド600により処理されるプロ
シージャ呼び出し要求メッセージのデータ構造を模式的
に示す。The reception preparation procedure 501 requests the RPC 504 to transfer control to the dispatch procedure 502 when a message arrives. The dispatch procedure 502 processes the procedure call request and calls the actual processing procedure 503. The actual processing procedure 503 generates the message processing thread 600 and generates the message dispatcher 601. The message dispatcher 601 processes a received message. The message processing thread 600 is executed by a thread different from the receiving thread 500. Therefore, the actual processing procedure 503 of the receiving thread 500 is immediately terminated, and the state immediately shifts to the next message waiting state. The receiving thread 400
Is configured in the same way as the receiving thread 900. FIG. 5 schematically shows the data structure of the procedure call request message processed by the message processing thread 600.
【0017】図6は、受信準備プロシージャ501、デ
ィスパッチプロシージャ502、及び実処理プロシージ
ャ503の動作を示すフローチャートである。図6
(a)は受信準備プロシージャ501の動作を示すフロ
ーチャートである。先ずステップS1においてRPCト
ランスポートハンドルを取得する。当該処理は自プロセ
スのプロセスIDをパラメータに指定してRPC504
の所定のライブラリルーチンを呼び出すことにより実現
される。RPCトランスポートハンドルは、通信に関す
る情報を維持するための特定のデータ構造を有してい
る。次にステップS2においてディスパッチプロシージ
ャ502をポートマップに登録する。当該処理は、以下
に記すパラメータを指定してRPC504の所定のライ
ブラリルーチンを呼び出すことにより実現される。FIG. 6 is a flowchart showing the operations of the reception preparation procedure 501, the dispatch procedure 502, and the actual processing procedure 503. FIG.
9A is a flowchart illustrating the operation of the reception preparation procedure 501. First, in step S1, an RPC transport handle is obtained. This process is performed by designating the process ID of the own process as a parameter to the RPC 504.
By calling a predetermined library routine. The RPC transport handle has a specific data structure for maintaining information regarding communication. Next, in step S2, the dispatch procedure 502 is registered in the port map. This process is realized by specifying a parameter described below and calling a predetermined library routine of the RPC 504.
【0018】指定パラメータ: ・RPCサービストランスポートハンドル ・プログラム番号(分散アプリケーション実行システム
ID) ・バージョン番号(プロセスID) ・ディスパッチプロシージャ ・伝送プロトコル(TCP又はUDP)Specification parameters: RPC service transport handle Program number (distributed application execution system ID) Version number (process ID) Dispatch procedure Transmission protocol (TCP or UDP)
【0019】そしてステップS3においてプロシージャ
呼び出し要求として与えられるメッセージを待つイベン
ト待ち処理に移行する。ここで、プロシージャ呼び出し
側プロセスからのメッセージが到着すると、RPCは5
04はディスパッチプロシージャ502に制御を渡す。
ここで、上記受信準備プロシージャ501のより具体的
な構成例として当該プロシージャのC言語ソースリスト
を記す。In step S3, the process proceeds to an event waiting process for waiting for a message given as a procedure call request. Here, when a message from the procedure calling process arrives, RPC becomes 5
04 passes control to the dispatch procedure 502.
Here, a C language source list of the reception preparation procedure 501 will be described as a more specific configuration example.
【0020】 /********************************************************** * cmirpc.x ;ONC RPC言語によるプロトコル定義ファイル * rpcgen -b cmirpc.x ***********************************************************/ struct packetInfo { opaque senderHostID[4]; /* 送信側ホストID */ u_long senderPID; /* 送信側プロセスID */ opaque receiverHostID[4];/* 受信側ホストID */ u_long receiverPID; /* 受信側プロセスID */ opaque msg<>; /* message本体 */ }; /********************* * progran definition *********************/ program CMIPROG { version CMIVERS { int CMISVC(packetInfo) = 1; /* プロシージャ番号 */ } = 1; /* バージョン番号( 仮) * / } = 0x211d1ae3; /* プログラム番号 */ /*************************** * cmirpc.h ;ヘッダファイル ****************************/ #ifndef _CMIRPC_H_RPCGEN #define _CMIRPC_H_RPCGEN #include <rpc/rpc.h> struct packetInfo { char senderHostID[4]; u_long senderPID; char receiverHostID[4]; u_long receiverPID; struct { u_int msg_len; char *msg_val; } msg; }; typedef struct packetInfo packetInfo; #define CMIPROG ((unsigned long)(0x211d1ae3)) #define CMIVERS ((unsigned long)(1)) #define CMISVC ((unsigned long)(1)) extern int * cmisvc_1(); extern int cmiprog_1_freeresult(); /* the xdr functions */ extern bool_t xdr_packetInfo(); #endif /* !_CMIRPC_H_RPCGEN */ /******************************************* * cmirpc_xdr.c ;外部データ表現変換ルーチン ********************************************/ #include "cmirpc.h" bool_t xdr_packetInfo(xdrs, objp) register XDR *xdrs; packetInfo *objp; { register long *buf; int i; if (!xdr_opaque(xdrs, objp->senderHostID, 4)) return (FALSE); if (!xdr_u_long(xdrs, &objp->senderPID)) return (FALSE); if (!xdr_opaque(xdrs, objp->receiverHostID, 4)) return (FALSE); if (!xdr_u_long(xdrs, &objp->receiverPID)) return (FALSE); if (!xdr_bytes(xdrs, (char **)&objp->msg.msg_val, (u_int *) &obj p->msg.msg_len, ~0)) return (FALSE); return (TRUE); } /**************************** * 受信準備プロシージャ ****************************/ void cmilisten(u_long SelfProcessID) { SVCXPRT *transp; int sock = RPC_ANYSOCK; int proto = IPPROTO_TCP; /* ポートマップから指定プログラム番号、バージョン番号の登録を削 除 */ (void) pmap_unset(CMIPROG, SelfProcessID); /* RPCサービストランスポートハンドルを取得 */ transp = svctcp_create(sock, 0, 0); if (transp == NULL) { exit(1); } /* ディスパッチプロシージャをポートマップに登録 */ /* svc_register() の第二引数はプログラム番号、 * 第三引数はバージョン番号である。[0020] / ********************************************** ************ * cmirpc.x; Protocol definition file in ONC RPC language * rpcgen -b cmirpc.x ******************* **************************************** / struct packetInfo {opaque senderHostID [4]; / * Sender host ID * / u_long senderPID; / * sender process ID * / opaque receiverHostID [4]; / * receiver host ID * / u_long receiverPID; / * receiver process ID * / opaque msg <>; / * message body * /}; / ********************* * progran definition ****************** *** / program CMIPROG {version CMIVERS {int CMISVC (packetInfo) = 1; / * procedure number * /} = 1; / * version number (provisional) * /} = 0x211d1ae3; / * program number * / / ** ************************* * cmirpc.h; Header file ****************** ********** / #ifndef _CMIRPC_H_RPCGEN #define _CMIRPC_H_RPCGEN #include <rpc / rpc.h> struct packetInfo {char senderHostID [4]; u_long senderPID; char receiverHostID [4]; u _long receiverPID; struct {u_int msg_len; char * msg_val;} msg;}; typedef struct packetInfo packetInfo; #define CMIPROG ((unsigned long) (0x211d1ae3)) #define CMIVERS ((unsigned long) (1)) #define CMISVC ( (unsigned long) (1)) extern int * cmisvc_1 (); extern int cmiprog_1_freeresult (); / * the xdr functions * / extern bool_t xdr_packetInfo (); #endif / *! _CMIRPC_H_RPCGEN * / / ******* ************************************ * cmirpc_xdr.c; external data representation conversion routine **** **************************************** / #include "cmirpc.h" bool_t xdr_packetInfo (xdrs, objp) register XDR * xdrs; packetInfo * objp; {register long * buf; int i; if (! xdr_opaque (xdrs, objp-> senderHostID, 4)) return (FALSE); if (! xdr_u_long (xdrs, & objp-> senderPID)) return (FALSE); if (! xdr_opaque (xdrs, objp-> receiverHostID, 4)) return (FALSE); if (! xdr_u_long (xdrs, & objp-> receiverPID)) return (FALSE); if (! xdr_bytes (xdrs, (char **) & objp-> msg.msg_val, (u_int *) & obj p-> msg.msg_len, ~ 0)) return (FALSE); return (TRUE) ;} / **************************** * Receive preparation procedure *************** ************* / void cmilisten (u_long SelfProcessID) (SVCXPRT * transp; int sock = RPC_ANYSOCK; int proto = IPPROTO_TCP; / * Delete registration of specified program number and version number from port map Except * / (void) pmap_unset (CMIPROG, SelfProcessID); / * Get RPC service transport handle * / transp = svctcp_create (sock, 0, 0); if (transp == NULL) {exit (1);} / * Register the dispatch procedure in the portmap * / / * The second argument of svc_register () is the program number * The third argument is the version number.
【0021】 * 第二引数にアプリケーション実行システムIDであるCMIPROG * (ヘッダファイルに0x2211d1aeと言う値で定義されている) 、 * 第三引数に自プロセスのプロセスIDであるSelfProcessID を * 指定する。* CMIPROG * (defined in the header file as a value of 0x2211d1ae), which is the application execution system ID, is designated as the second argument. * SelfProcessID, which is the process ID of the own process, is designated as the third argument.
【0022】 */ if (!svc_register(transp, CMIPROG, SelfProcessID, cmiprog, proto)) { exit(1); } /* プロシージャ呼び出し要求を待つループに入る */ svc_run(); exit(1); } * / If (! Svc_register (transp, CMIPROG, SelfProcessID, cmiprog, proto)) {exit (1);} / * Enter a loop waiting for a procedure call request * / svc_run (); exit (1);}
【0023】図6(b)は、ディスパッチプロシージャ
502の動作を示すフローチャートである。このディス
パッチプロシージャ502には、プロシージャ番号及び
RPCサービストランスポートハンドルがパラメータと
して指定される。また当該処理はRPC504の所定の
ライブラリルーチンを利用する。FIG. 6B is a flowchart showing the operation of the dispatch procedure 502. In the dispatch procedure 502, a procedure number and an RPC service transport handle are specified as parameters. This process uses a predetermined library routine of the RPC 504.
【0024】先ずステップS21において、プロシージ
ャ番号による分岐処理を行う。すなわち、プロシージャ
番号に“0”が指定された場合は、ステップS20に移
行し、値を返さす応答処理のみを実行して終了する。こ
のプロシージャ番号“0”は、特定の目的すなわち受信
側の動作確認のために予約されている。またプロシージ
ャ番号に“1”が指定された場合は、ステップS23に
移行し、受け取った引数(メッセージ)のデコードを行
い、ステップS24に移行して実処理プロシージャ50
3を呼び出す。ここでは、デコードされた引数を指定
し、リモートから呼び出されたプロシージャを呼び出
す。呼び出し処理を終えるとステップS26に移行し、
上記デコードによって割り当てられたメモリ領域を開放
して終了する。First, in step S21, a branching process based on the procedure number is performed. That is, when “0” is designated as the procedure number, the process shifts to step S20, executes only the response process for returning the value, and ends. This procedure number “0” is reserved for a specific purpose, that is, for confirming the operation of the receiving side. If "1" is designated as the procedure number, the process proceeds to step S23, where the received argument (message) is decoded, and the process proceeds to step S24 to execute the actual processing procedure 50.
Call 3 Here, the decoded argument is specified, and the procedure called from the remote is called. Upon completion of the calling process, the process proceeds to step S26,
The memory area allocated by the decoding is released, and the process ends.
【0025】またプロシージャ番号に上記“0”もしく
は“1”以外の値が指定された場合はエラーとする。こ
こで、上記ディスパッチプロシージャ502のより具体
的な構成例として当該プロシージャのC言語ソースリス
トを記す。If a value other than "0" or "1" is designated as the procedure number, an error is generated. Here, as a more specific configuration example of the dispatch procedure 502, a C language source list of the procedure will be described.
【0026】 /**************************** * ディスパッチプロシージャ ****************************/ static void cmiprog(struct svc_req *rqstp, SVCXPRT *transp) { union { packetInfo cmisvc_1_arg; } argument; char *result; bool_t (*xdr_argument)(), (*xdr_result)(); char *(*local)(); /* プロシージャ番号による切り分け */ switch (rqstp->rq_proc) { case NULLPROC: /* プロシージャ番号0: 値を返さず応答のみする */ (void) svc_sendreply(transp, xdr_void, (char *)NULL); return; case CMISVC: /* プロシージャ番号1: */ xdr_argument = xdr_packetInfo; xdr_result = xdr_int; local = (char *(*)()) cmisvc_1; break; default: /* その他 */ svcerr_noproc(transp); return; } (void) memset((char *)&argument, 0, sizeof (argument)); /* 受け取った引数をデコード */ if (!svc_getargs(transp, xdr_argument, &argument)) { svcerr_decode(transp); return; } /* 実処理プロシージャ呼び出し */ result = (*local)(&argument, rqstp); /* 返値をエンコードし呼び出し元へ送信 */ if (result != NULL && !svc_sendreply(transp, xdr_result, result) ) { svcerr_systemerr(transp); } /* デコードで割り当てられたメモリを解放 */ if (!svc_freeargs(transp, xdr_argument, &argument)) { exit(1); } return; } / ************************ * Dispatch procedure *************** ************* / static void cmiprog (struct svc_req * rqstp, SVCXPRT * transp) {union {packetInfo cmisvc_1_arg;} argument; char * result; bool_t (* xdr_argument) (), (* xdr_result) (); char * (* local) (); / * Separation by procedure number * / switch (rqstp-> rq_proc) {case NULLPROC: / * Procedure number 0: Response only without returning value * / (void ) svc_sendreply (transp, xdr_void, (char *) NULL); return; case CMISVC: / * Procedure number 1: * / xdr_argument = xdr_packetInfo; xdr_result = xdr_int; local = (char * (*) ()) cmisvc_1; break; default: / * Other * / svcerr_noproc (transp); return;} (void) memset ((char *) & argument, 0, sizeof (argument)); / * Decode received arguments * / if (! svc_getargs (transp, xdr_argument, & argument)) {svcerr_decode (transp); return;} / * Actual processing procedure * / Result = (* local) (& argument, rqstp); / * Encode the return value and send it to the caller * / if (result! = NULL &&! Svc_sendreply (transp, xdr_result, result)) (svcerr_systemerr (transp );} / * Free memory allocated by decoding * / if (! Svc_freeargs (transp, xdr_argument, & argument)) {exit (1);} return;}
【0027】図6(c)は、実処理プロシージャ503
の動作を示すフローチャートである。実処理プロシージ
ャ503は、ステップS30においてメッセージ処理ス
レッド600を生成し、引数(メッセージ)をメッセー
ジディスパッチャ601に渡す。メッセージディスパッ
チャ601はメッセージを処理する。メッセージ処理ス
レッド600は、受信スレッド900とは別のスレッド
により実行される。このため受信スレッド900の実処
理プロシージャ503は速やかに終了されることとな
り、迅速に次のメッセージ待ち状態に移行することにな
る。ここで、上記実処理プロシージャ503のより具体
的な構成例として当該プロシージャのC言語ソースリス
トを記す。FIG. 6C shows an actual processing procedure 503.
6 is a flowchart showing the operation of the first embodiment. The actual processing procedure 503 generates the message processing thread 600 in step S30, and passes an argument (message) to the message dispatcher 601. The message dispatcher 601 processes a message. The message processing thread 600 is executed by a thread different from the receiving thread 900. Therefore, the actual processing procedure 503 of the receiving thread 900 is immediately terminated, and the state immediately shifts to the next message waiting state. Here, a C language source list of the actual processing procedure 503 will be described as a more specific configuration example.
【0028】 /**************************** * 実処理プロシージャ ***************************/ int * cmisvc_1(packetInfo *packetInfoPtr, struct svc_req *rqstp) { struct packetInfo* packetInfoPtr2; int result; u_long tid; /* メモリを確保し、引数( メッセージ) をコピー */ packetInfoPtr2 = (struct packetInfo *)malloc(sizeof(packetInfo)); memcpy(packetInfoPtr2, packetInfoPtr, sizeof(packetInfo)); packetInfoPtr2->msg.msg_val = (char *)malloc(packetInfoPtr->msg.msg_le n); memcpy(packetInfoPtr2->msg.msg_val, packetInfoPtr->msg.msg_val, packetInfoPtr->msg.msg_len); /* Message処理スレッドを生成し、引数( メッセージ) を渡す */ result = thr_create(0,0,(void*(*)(void*))MessageDispatcher, packetInfo Ptr2, 0, &tid); return (&result); } / **************************** * Actual processing procedure ************** ************* / int * cmisvc_1 (packetInfo * packetInfoPtr, struct svc_req * rqstp) (struct packetInfo * packetInfoPtr2; int result; u_long tid; / * Allocate memory and arguments (message) * / PacketInfoPtr2 = (struct packetInfo *) malloc (sizeof (packetInfo)); memcpy (packetInfoPtr2, packetInfoPtr, sizeof (packetInfo)); packetInfoPtr2-> msg.msg_val = (char *) malloc (packetInfoPtr-> msg.msg_le n); memcpy (packetInfoPtr2-> msg.msg_val, packetInfoPtr-> msg.msg_val, packetInfoPtr-> msg.msg_len); / * Create a Message processing thread and pass the argument (message) * / result = thr_create (0, 0, (void * (*) (void *)) MessageDispatcher, packetInfo Ptr2, 0, &tid); return (&result);}
【0029】一方、プロシージャが呼び出される側のプ
ロセスの受信スレッド900に対しプロシージャ呼び出
し要求を送信する送信スレッド800は、メッセージ送
信要求部100と通信メディアインタフェース部200
とから構成される。通信メディアインタフェース部20
0は、送信プロシージャ201とRPC202とから構
成される。RPC202は、送信プロシージャ201か
ら呼び出されるランタイムライブラリとして実装され、
このRPC202は、ポート203から上記要求メッセ
ージを出力し、プロシージャが呼び出される側のプロセ
スのポート505に送る。なお送信スレッド700は、
送信スレッド800と同様に構成される。On the other hand, a transmission thread 800 for transmitting a procedure call request to a reception thread 900 of a process on which a procedure is called includes a message transmission request unit 100 and a communication media interface unit 200.
It is composed of Communication media interface unit 20
0 comprises a transmission procedure 201 and an RPC 202. The RPC 202 is implemented as a runtime library called from the transmission procedure 201,
The RPC 202 outputs the request message from the port 203 and sends it to the port 505 of the process on which the procedure is called. The transmission thread 700 is
The configuration is the same as that of the transmission thread 800.
【0030】図7は送信プロシージャ201の動作を示
すフローチャートである。この送信プロシージャ201
は、送信要求部100により送信先ホストID、プロセ
スID、そしてメッセージがパラメータとして指定され
る。FIG. 7 is a flowchart showing the operation of the transmission procedure 201. This transmission procedure 201
The transmission request unit 100 specifies a destination host ID, a process ID, and a message as parameters.
【0031】先ずステップS40においてクライアント
ハンドルを取得する。このクライアントハンドルは、受
信側との接続情報を保持するための特定のデータ構造を
有している。当該処理は、以下に記すパラメータを指定
してRPC202の所定のライブラリルーチンを呼び出
すことにより実現される。First, in step S40, a client handle is obtained. This client handle has a specific data structure for holding connection information with the receiving side. This processing is realized by calling a predetermined library routine of the RPC 202 by specifying the following parameters.
【0032】指定パラメータ: ・ホストID ・プログラム番号(分散アプリケーション実行システム
ID) ・バージョン番号(プロセスID) ・その他(バッファサイズなど)Designated parameters: Host ID Program number (distributed application execution system ID) Version number (process ID) Other (buffer size, etc.)
【0033】次にステップS41においてリモートプロ
シージャ呼び出しを行う。当該処理は、以下に記すパラ
メータを指定してRPC202の所定のライブラリルー
チンを呼び出すことにより実現される。Next, in step S41, a remote procedure is called. This processing is realized by calling a predetermined library routine of the RPC 202 by specifying the following parameters.
【0034】指定パラメータ: ・クライアントハンドル ・プロシージャ番号 ・引数エンコード用プロシージャ ・引数本体(メッセージ) ・返値デコード用プロシージャ ・返値格納用フィールド ・タイムアウト時間Specified parameters:-Client handle-Procedure number-Argument encoding procedure-Argument body (message)-Return value decoding procedure-Return value storage field-Timeout time
【0035】ここで、上記送信プロシージャ201のよ
り具体的な構成例として当該プロシージャのC言語ソー
スリストを記す。Here, as a more specific configuration example of the transmission procedure 201, a C language source list of the procedure will be described.
【0036】 /**************************** * 送信プロシージャ ****************************/ int cmisend(const struct packetInfo *packetInfoPtr) { int clnt_res; CLIENT *clnt; struct sockaddr_in Sockaddr; static struct timeval TIMEOUT = { 5, 0 }; int sock = RPC_ANYSOCK; memset((char *)&Sockaddr, 0, sizeof(Sockaddr)); memcpy(&(Sockaddr.sin_addr.s_addr), packetInfoPtr->receiverHostID, sizeof(u_long)); Sockaddr.sin_family = AF_INET; /* クライアントハンドルを取得 */ /* clnttcp_create() の第二引数はプログラム番号、 * 第三引数はバージョン番号である。[0036] / **************************** * Send procedure *************** ************* / int cmisend (const struct packetInfo * packetInfoPtr) {int clnt_res; CLIENT * clnt; struct sockaddr_in Sockaddr; static struct timeval TIMEOUT = {5, 0}; int sock = RPC_ANYSOCK ; memset ((char *) & Sockaddr, 0, sizeof (Sockaddr)); memcpy (& (Sockaddr.sin_addr.s_addr), packetInfoPtr-> receiverHostID, sizeof (u_long)); Sockaddr.sin_family = AF_INET; / * Get * / / * The second argument of clnttcp_create () is * the program number, and the third argument is the version number.
【0037】 * ここで、第二引数にアプリケーション実行システムIDであるCMIPROG * (ヘッダファイルに0x2211d1aeと言う値で定義されている) 、 * 第三引数に受信側プロセスのプロセスIDであるpacketInfoPtr->recei verPIDを * 指定する。* Here, CMIPROG * (defined in the header file as a value of 0x2211d1ae) which is the application execution system ID as the second argument * packetInfoPtr-> which is the process ID of the receiving process as the third argument * Specify recei verPID.
【0038】 */ if ((clnt = clnttcp_create(&Sockaddr, CMIPROG, packetInfoPtr->receiver PID,&sock, 0, 0)) == NULL) { clnt_pcreateerror("clnttcp_create"); return -1; } /* リモートプロシージャ呼び出し */ if (clnt_call(clnt, CMISVC, (xdrproc_t) xdr_packetInfo, (caddr_t) packetInfoPtr, (xdrproc_t) xdr_int, (caddr_t) &clnt_res, TIMEOUT) != RPC_SUCCESS) { clnt_perror(clnt, "call failed"); return -1; } return(clnt_res); } * / If ((clnt = clnttcp_create (& Sockaddr, CMIPROG, packetInfoPtr-> receiver PID, & sock, 0, 0)) == NULL) {clnt_pcreateerror ("clnttcp_create"); return -1;} / * remote procedure Call * / if (clnt_call (clnt, CMISVC, (xdrproc_t) xdr_packetInfo, (caddr_t) packetInfoPtr, (xdrproc_t) xdr_int, (caddr_t) & clnt_res, TIMEOUT)! = RPC_SUCCESS) {clnt_perror (clnt, "call failed"); return 1;} return (clnt_res);}
【0039】ところで本実施形態は、上記したようにプ
ログラム番号には分散アプリケーション実行システムI
Dを指定し、バージョン番号にはプロセスIDを指定す
るものとなっている。すなわち本実施形態においては、
第1の識別手段として分散アプリケーション実行システ
ムIDを指定し、このアプリケーション実行システムI
Dにより識別されたプログラムによって生成される一つ
あるいは複数のプロセスを識別する第2の識別手段とし
てプロセスIDを指定する。この構成により、分散アプ
リケーションを構成するプログラムを遠隔手続き呼び出
しシステム上で稼動している他のプログラムから区別
し、なおかつ分散アプリケーションを構成するプログラ
ムから生成された個々のプロセスを識別してプロセス間
のメッセージ受け渡しを行うことができる。In this embodiment, as described above, the program number is assigned to the distributed application execution system I.
D is specified, and the process number is specified as the version number. That is, in the present embodiment,
A distributed application execution system ID is designated as the first identification means, and the application execution system I
A process ID is designated as second identification means for identifying one or more processes generated by the program identified by D. With this configuration, a program constituting the distributed application is distinguished from other programs running on the remote procedure calling system, and individual processes generated from the program constituting the distributed application are identified and messages between the processes are identified. Can be delivered.
【0040】たとえば図8に示すように、分散アプリケ
ーション実行システムが、複数のノードN1〜N4と、
それらのノードに配置された分散アプリケーション実行
システム機能をもつ複数のプログラムPg0〜Pg4
(同一の分散アプリケーション実行システムIDをも
つ)から構成されている場合を考える。本実施形態によ
れば、それらのプログラムから生成されたプロセスP0
〜P5を識別することが可能となり、プロセスP0〜P
5は独立した分散アプリケーション1と分散アプリケー
ション2として構成できる。For example, as shown in FIG. 8, a distributed application execution system includes a plurality of nodes N1 to N4,
A plurality of programs Pg0 to Pg4 having distributed application execution system functions arranged in those nodes
(Having the same distributed application execution system ID). According to the present embodiment, the process P0 generated from those programs
To P5 can be identified, and processes P0 to P5 can be identified.
5 can be configured as independent distributed applications 1 and 2.
【0041】かくして複数の分散アプリケーションを動
的に設営することが可能な分散アプリケーション実行シ
ステムを提供できる。 (第2実施形態)次に、本発明の第2実施形態を説明す
る。第1実施形態においては、分散アプリケーション実
行システムによって管理されるアプリケーションを構成
する複数プロセス間のメッセージパッシングを、遠隔手
続き呼び出し(RPC)によって実現する場合のシステ
ム構成例について説明したが、第2実施形態において
は、上記アプリケーションを構成する複数プロセス間の
メッセージパッシングを、いわゆるソケットインタフェ
ースによるプロセス間通信により実現する場合のシステ
ム構成例について説明する。Thus, a distributed application execution system capable of dynamically setting up a plurality of distributed applications can be provided. (Second Embodiment) Next, a second embodiment of the present invention will be described. In the first embodiment, an example of a system configuration in which message passing between a plurality of processes constituting an application managed by a distributed application execution system is realized by a remote procedure call (RPC) has been described. In the following, a description will be given of an example of a system configuration in which message passing between a plurality of processes constituting the application is realized by inter-process communication using a so-called socket interface.
【0042】図9は、ネットワークを介して隔てられた
ノード間(ノードA〜ノードB)において、ソケットイ
ンターフェースによるプロセス間通信によりメッセージ
パッシングを行う場合の構成を概略的に示すブロック図
である。ノードA側のプロセス及びノードB側のプロセ
スの両者は一つのアプリケーションの構成要素である。
同図に示すように、ノードA及びノードBの両プロセス
は、ソケットインタフェースによるプロセス間通信を用
いるメッセージパッシングのための送信スレッド500
1(5000)及び受信スレッド8000(800
1)、そして受信スレッドにより生成されるメッセージ
処理スレッド4000(9000)から構成される。FIG. 9 is a block diagram schematically showing a configuration in which message passing is performed between nodes (nodes A and B) separated via a network by inter-process communication using a socket interface. Both the process on the node A side and the process on the node B side are components of one application.
As shown in the figure, both processes of the node A and the node B have a transmission thread 500 for message passing using inter-process communication by a socket interface.
1 (5000) and receiving thread 8000 (800
1) and a message processing thread 4000 (9000) generated by the receiving thread.
【0043】送信スレッド5001は送信要求部100
0および通信メディアインターフェース部2000から
構成される。通信メディアインタフェース部2000
は、送信プロシージャ2001と、ポート番号管理要求
プロシージャ2002と、ソケットライブラリルーチン
2003とから構成される。なお送信スレッド5000
は、送信スレッド5001と同様に構成される。The transmission thread 5001 is the transmission request unit 100
0 and a communication media interface unit 2000. Communication media interface unit 2000
Comprises a transmission procedure 2001, a port number management request procedure 2002, and a socket library routine 2003. Transmission thread 5000
Is configured similarly to the transmission thread 5001.
【0044】受信スレッド8001は、ポート番号管理
要求プロシージャ3001と、受信プロシージャ300
2と、ソケットライブラリルーチン3003とから成る
通信メディアインタフェース部3000を有している。
受信プロシージャ3002から呼び出されるメッセージ
処理スレッド4000は、メッセージディスパッチャ4
001を呼び出す。なお、当該メッセージ処理スレッド
4000及びメッセージディスパッチャ4001は、第
1実施形態において説明したメッセージ処理スレッド6
00及びメッセージディスパッチャ601と同様の構成
である。The reception thread 8001 includes a port number management request procedure 3001 and a reception procedure 300
2 and a communication media interface unit 3000 including a socket library routine 3003.
The message processing thread 4000 called from the reception procedure 3002 is the message dispatcher 4
Call 001. The message processing thread 4000 and the message dispatcher 4001 correspond to the message processing thread 6 described in the first embodiment.
00 and the message dispatcher 601.
【0045】ポート番号管理プロセス6000は、ポー
ト番号表管理プロシージャ6001と、ポート番号表6
002と、ソケットライブラリルーチン6003とから
構成される。なお、ポート管理プロセス7000は、ポ
ート管理プロセス6000と同様に構成される。The port number management process 6000 includes a port number table management procedure 6001 and a port number table 6
002 and a socket library routine 6003. The port management process 7000 has the same configuration as the port management process 6000.
【0046】図10は、送信プロシージャ2001及び
ポート番号管理要求プロシージャ2002の動作を示す
フローチャートである。図10(a)は、送信プロシー
ジャ2001の動作を示すフローチャートである。送信
プロシージャ2001は、送信先ホストID、送信先プ
ロセスID、そしてメッセージがパラメータとして指定
され、送信要求部1000により呼び出される。先ずス
テップS70において、ポート番号管理プロセス600
0に対しポート番号を問い合わせる。すなわちポート番
号管理要求プロシージャ2002を呼び出す。ここでは
送信先ホストのポート番号管理プロセス6000に対
し、アプリケーション実行システムID及びプロセスI
Dに対応するポート番号を問い合わせる。FIG. 10 is a flowchart showing the operations of the transmission procedure 2001 and the port number management request procedure 2002. FIG. 10A is a flowchart showing the operation of the transmission procedure 2001. The transmission procedure 2001 is designated by the transmission destination host ID, the transmission destination process ID, and the message as parameters, and is called by the transmission requesting unit 1000. First, in step S70, the port number management process 600
Inquires about the port number for 0. That is, the port number management request procedure 2002 is called. Here, the application execution system ID and process I
Inquire about the port number corresponding to D.
【0047】次にステップS71において、メッセージ
送信用のソケットを作成する。ここでは、上記ステップ
S70の問い合わせ処理によって得たポート番号を指定
して接続要求を出す。続くステップS72においてメッ
セージを送信する。ここでは先ず図5に示したデータ構
造を有するメッセージデータを送信する。そしてステッ
プS73において結果を受信する。ここで、上記送信プ
ロシージャ2001のより具体的な構成例として当該プ
ロシージャのC言語ソースリストを記す。Next, in step S71, a socket for transmitting a message is created. Here, a connection request is issued by designating the port number obtained by the inquiry processing in step S70. In a succeeding step S72, the message is transmitted. Here, first, message data having the data structure shown in FIG. 5 is transmitted. Then, the result is received in step S73. Here, a C language source list of the transmission procedure 2001 will be described as a more specific configuration example.
【0048】 /****************************** * ヘッダファイル ******************************/ #include <stdlib.h> #include <errno.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/uio.h> #include <netinet/in.h> struct portInfo { int flag; /* 0:ポート番号登録 1: ポート番号問い合わせ */ u_long progID; /* アプリケーション実行システムID */ u_long processID; /* プロセスID */ u_short portNo; /* ポート番号 */ }; #define CMIPROG ((unsigned long)(0x211d1ae3)) struct packetInfo { u_long senderHostID; u_long senderPID; u_long receiverHostID; u_long receiverPID; struct { u_int msg_len; char *msg_val; } msg; }; /**************************** * 送信プロシージャ ***************************/ int cmisend(const struct packetInfo *packetInfoPtr) { struct sockaddr_in ports, socks; int Sock, addrlen, nByteRecv, nByteSend, result, portNo; struct portInfo PortInfo; /* ポート番号管理プロセスにポート番号を問い合わせ */ PortInfo.flag = 1; PortInfo.progID = CMIPROG; /* ヘッダファイルに定義されている */ PortInfo.processID = packetInfoPtr->receiverPID; portNo = cmiportreq(packetInfoPtr->receiverHostID, &PortInfo); if(portNo == -1){ return -1; } /* メッセージ送信用のソケットを作成 */ Sock = socket(AF_INET, SOCK_STREAM, 0); socks.sin_addr.s_addr = packetInfoPtr->receiverHostID; socks.sin_family = AF_INET; socks.sin_port = htons(portNo);/* 問い合わせで得た送信相手ポート番号に 接続 */ connect(Sock, (struct sockaddr *)&socks, sizeof(socks)); /* packetInfo を送信 */ nByteSend = send(Sock, (char *)packetInfoPtr, sizeof(struct packetInfo ), 0); /* メッセージ本体を送信 */ nByteSend = send(Sock, (char *)packetInfoPtr->msg.msg_val, packetInfoPtr->msg.msg_len, 0); /* 結果を受信 */ nByteRecv = recv(Sock, (char *)&result, sizeof(result), 0); close(Sock); return result; } [0048] / ****************************** * Header file ************* ***************** / #include <stdlib.h> #include <errno.h> #include <sys / types.h> #include <sys / socket.h> #include <sys / uio.h> #include <netinet / in.h> struct portInfo {int flag; / * 0: Register port number 1: Query port number * / u_long progID; / * Application execution system ID * / u_long processID; / * process ID * / u_short portNo; / * port number * /}; #define CMIPROG ((unsigned long) (0x211d1ae3)) struct packetInfo {u_long senderHostID; u_long senderPID; u_long receiverHostID; u_long receiverPID; struct {u_int msg_len ; char * msg_val;} msg;}; / **************************** * Send procedure ******** ******************* / int cmisend (const struct packetInfo * packetInfoPtr) {struct sockaddr_in ports, socks; int Sock, addrlen, nByteRecv, nByteSend, result, portNo; struct portInfo PortInfo; / * Queries the port number management process for the port number. * / PortInfo.flag = 1; PortInfo.progID = CMIPROG; / * Defined in header file * / PortInfo.processID = packetInfoPtr-> receiverPID; portNo = cmiportreq (packetInfoPtr-> receiverHostID, &PortInfo); if (portNo == -1) {return -1;} / * Create a socket for sending messages * / Sock = socket (AF_INET, SOCK_STREAM, 0); socks.sin_addr.s_addr = packetInfoPtr-> receiverHostID; socks.sin_family = AF_INET; socks.sin_port = htons (portNo); / * Connect to the destination port number obtained by the query * / connect (Sock, (struct sockaddr *) & socks, sizeof (socks)); / * Send packetInfo * / nByteSend = send (Sock, (char *) packetInfoPtr, sizeof (struct packetInfo), 0); / * Send message body * / nByteSend = send (Sock, (char *) packetInfoPtr-> msg.msg_val, packetInfoPtr-> msg.msg_len, 0); / * Receive result * / nByteRecv = recv (Sock, (char *) & result, sizeof (result), 0); close (Sock); return result;}
【0049】図10(b)はポート番号管理要求プロシ
ージャ2002の動作を示すフローチャートである。当
該プロシージャは、以下のようなパラメータが指定され
て送信プロシージャ2001から呼び出される。FIG. 10B is a flowchart showing the operation of the port number management request procedure 2002. This procedure is called from the transmission procedure 2001 with the following parameters specified.
【0050】指定パラメータ: ・ホストID ・要求内容(登録又は問い合わせ) ・アプリケーション実行システムID ・プロセスID ・ポート番号Designated parameters: • Host ID • Request content (registration or inquiry) • Application execution system ID • Process ID • Port number
【0051】先ずステップS80において、要求送信用
のソケットを作成する。ここではポート番号表管理プロ
シージャ6001のために予約されたポート番号(後述
のように“8888”が予約)を指定して接続要求を出
す。次にステップS81において要求を送信し、ステッ
プS82において結果を受信し、そしてステップS83
において、呼び出し元である送信プロシージャ2001
に対して受信結果を返す。ここで、上記ポート番号管理
要求プロシージャ2002のより具体的な構成例として
当該プロシージャのC言語ソースリストを記す。First, in step S80, a socket for request transmission is created. Here, a connection request is issued by designating a port number reserved for the port number table management procedure 6001 (“8888” is reserved as described later). Next, a request is transmitted in step S81, a result is received in step S82, and a step S83 is performed.
In the transmission procedure 2001 which is the caller,
Returns the reception result for. Here, as a more specific configuration example of the port number management request procedure 2002, a C language source list of the procedure will be described.
【0052】 /************************************* * ポート番号管理要求プロシージャ *************************************/ int cmiportreq(u_long HostID, struct portInfo *portInfoPtr) { struct sockaddr_in ports; int portSock, addrlen, nByteRecv, nByteSend, result; /* 要求送信用のソケットを作成 */ memset((char *)&ports, 0, sizeof(ports)); portSock = socket(AF_INET, SOCK_STREAM, 0); ports.sin_addr.s_addr = HostID; ports.sin_family = AF_INET; ports.sin_port = htons(8888);/* 「ポート番号管理プロセス」のポートに接 続 */ connect(portSock, (struct sockaddr *)&ports, sizeof(ports)); /* 要求を送信 */ nByteSend = send(portSock, (char *)portInfoPtr, sizeof(*portInfoPtr), 0); /* 結果を受信 */ nByteRecv = recv(portSock, (char *)&result, sizeof(result), 0); close(portSock); if(result < 0){ printf("portreq error:%d\n", result); return -1; } return result; } / ************************************* * Port number management request procedure *** ********************************** / int cmiportreq (u_long HostID, struct portInfo * portInfoPtr) {struct sockaddr_in ports ; int portSock, addrlen, nByteRecv, nByteSend, result; / * Create socket for sending request * / memset ((char *) & ports, 0, sizeof (ports)); portSock = socket (AF_INET, SOCK_STREAM, 0); ports.sin_addr.s_addr = HostID; ports.sin_family = AF_INET; ports.sin_port = htons (8888); / * Connect to the port of the port number management process * / connect (portSock, (struct sockaddr *) & ports, sizeof (ports)); / * Send request * / nByteSend = send (portSock, (char *) portInfoPtr, sizeof (* portInfoPtr), 0); / * Receive result * / nByteRecv = recv (portSock, (char *) & result, sizeof (result), 0); close (portSock); if (result <0) {printf ("portreq error:% d \ n", result); return -1;} return result;}
【0053】図11は、ポート番号表管理プロシージャ
6001及び受信プロシージャ3002の動作を示すフ
ローチャートである。図11(a)はポート番号表管理
プロシージャ6001の動作を示すフローチャートであ
る。当該プロシージャは、送信スレッドのポート番号管
理要求プロシージャ2002からの要求により、ポート
番号の登録処理又はポート番号問い合わせ処理を行う。
先ずステップS50において、要求受信用のソケットを
作成する。ここでは、ポート番号管理プロセス6000
のために予約されたポート番号(ここでは“8888”
とする)を指定してソケットを作成する。FIG. 11 is a flowchart showing the operation of the port number table management procedure 6001 and the reception procedure 3002. FIG. 11A is a flowchart showing the operation of the port number table management procedure 6001. This procedure performs port number registration processing or port number inquiry processing in response to a request from the port number management request procedure 2002 of the transmission thread.
First, in step S50, a socket for receiving a request is created. Here, the port number management process 6000
Port number reserved here ("8888" here)
To create a socket.
【0054】次にステップS51において、要求の受信
待ちを行い、ここで管理要求を受信したらステップS5
2に移行する。ステップS52においては、ポート番号
管理要求プロシージャ2002によって指定されたパラ
メータのうち要求内容を判別して処理を行う。すなわち
要求内容が「ポート番号の登録要求」である場合は、ス
テップS53に移行しポート番号表6002にアプリケ
ーション実行システムID,プロセスIDおよびポート
番号を格納する。また要求内容が「ポート番号の問い合
わせ要求」である場合は、ステップS54に移行し、ポ
ート番号表6002内において、指定パラメータのアプ
リケーション実行システムID及びプロセスIDに対応
するポートを検索する。対応するポートが見つかった場
合はそのポート番号を返す。Next, in step S51, a request reception is waited, and if a management request is received here, step S5 is performed.
Move to 2. In step S52, the request is determined from the parameters specified by the port number management request procedure 2002, and the process is performed. That is, when the request content is “port number registration request”, the process proceeds to step S53, and the application execution system ID, the process ID and the port number are stored in the port number table 6002. If the request is a "port number inquiry request", the process proceeds to step S54, and the port number table 6002 is searched for a port corresponding to the application execution system ID and the process ID of the designated parameter. If the corresponding port is found, return the port number.
【0055】そしてステップS55において、呼び出し
元であるポート番号管理要求プロシージャ2002に対
して結果を送信したのち、ステップS51に移行し、再
び要求の受信待ちに入る。ここで、上記ポート番号表管
理プロシージャ6001のより具体的な構成例として当
該プロシージャのC言語ソースリストを記す。Then, in step S55, after transmitting the result to the port number management request procedure 2002 which is the calling source, the flow shifts to step S51 to wait for the reception of the request again. Here, as a more specific configuration example of the port number table management procedure 6001, a C language source list of the procedure will be described.
【0056】 #include "port.h" /******************************************************** * ポート番号表管理プロシージャ * ********************************************************/ #define PORTTABLE_MAX 256 void main() { struct sockaddr_in listens, news; int i, listenSock, newSock, addrlen, opt, nByteRecv, nByteSend, result ; struct portInfo PortInfo; struct portTable { /* ポート番号表 */ u_long progID; u_long processID; u_short portNo; }PortTable[PORTTABLE_MAX]; int portTable_tail = -1; /* 要求受信用のソケット作成 */ listenSock = socket(AF_INET, SOCK_STREAM, 0); opt = 1; setsockopt(listenSock, SOL_SOCKET, SO_REUSEADDR, (char *)&opt, sizeof( int)); memset((char *)&listens, 0, sizeof(listens)); listens.sin_addr.s_addr = htonl(INADDR_ANY); listens.sin_family = AF_INET; listens.sin_port = htons(8888);/* 「ポート番号管理プロセス」のポート指 定 */ bind(listenSock, (struct sockaddr *)&listens, sizeof(listens)); listen(listenSock, 5); addrlen = sizeof(struct sockaddr_in); while(1){ /* 要求の受信待ち */ newSock = accept(listenSock, (struct sockaddr *)&news, &addrlen); /* 要求を受信 */ nByteRecv = recv(newSock, (char *)&PortInfo, sizeof(PortInfo), 0); switch(PortInfo.flag){ case 0: /* ポート番号の登録要求: ポート番号表にアプリケーション実行システムID、プロセスID、 ポート番号を格納 */ if(portTable_tail == PORTTABLE_MAX - 1){ result = -1; break; } for(i = 0; i <= portTable_tail; i++){ if(PortTable[i].progID == PortInfo.progID && PortTable[i].processID == PortInfo.processID){ break; } } if(i <= portTable_tail){ /* すでにある: 上書き */ PortTable[i].portNo = PortInfo.portNo; }else{ /* ない: 新規登録 */ PortTable[++portTable_tail].processID = PortInfo.processID; PortTable[portTable_tail].progID = PortInfo.progID; PortTable[portTable_tail].portNo = PortInfo.portNo; } result = 0; break; case 1: /* ポート番号の問い合わせ要求: ポート番号表をアプリケーション実行システムID、プロセスIDで検索 し、対応するポート番号を返却 */ result = -1; for(i = 0; i <= portTable_tail; i++){ if(PortTable[i].progID == PortInfo.progID && PortTable[i].processID == PortInfo.processID){ result = PortTable[i].portNo; break; } } break; default: result = -1; break; } /* 結果を送信 */ nByteSend = send(newSock, (char *)&result, sizeof(result), 0); close(newSock); } /* while */ } #Include "port.h" / *************************************** ***************** * Port number table management procedure * ************************** ****************************** / #define PORTTABLE_MAX 256 void main () {struct sockaddr_in listens, news; int i, listenSock , newSock, addrlen, opt, nByteRecv, nByteSend, result; struct portInfo PortInfo; struct portTable {/ * Port number table * / u_long progID; u_long processID; u_short portNo;} PortTable [PORTTABLE_MAX]; int portTable_tail = -1; / * Create socket for receiving request * / listenSock = socket (AF_INET, SOCK_STREAM, 0); opt = 1; setsockopt (listenSock, SOL_SOCKET, SO_REUSEADDR, (char *) & opt, sizeof (int)); memset ((char *) & listens , 0, sizeof (listens)); listens.sin_addr.s_addr = htonl (INADDR_ANY); listens.sin_family = AF_INET; listens.sin_port = htons (8888); / * Specify the port for the port number management process * / bind (listenSock, (struct sockaddr *) & listens, sizeof (listens)); listen (listenSock, 5); a ddrlen = sizeof (struct sockaddr_in); while (1) {/ * Waiting to receive request * / newSock = accept (listenSock, (struct sockaddr *) & news, &addrlen); / * Receive request * / nByteRecv = recv (newSock, (char *) & PortInfo, sizeof (PortInfo), 0); switch (PortInfo.flag) {case 0: / * Port number registration request: Store application execution system ID, process ID, and port number in port number table * / if (portTable_tail == PORTTABLE_MAX-1) {result = -1; break;} for (i = 0; i <= portTable_tail; i ++) {if (PortTable [i] .progID == PortInfo.progID && PortTable [i] .processID == PortInfo.processID) {break;}} if (i <= portTable_tail) {/ * already exists: overwrite * / PortTable [i] .portNo = PortInfo.portNo;} else {/ * not: new registration * / PortTable [++ portTable_tail] .processID = PortInfo.processID; PortTable [portTable_tail] .progID = PortInfo.progID; PortTable [portTable_tail] .portNo = PortInfo.portNo;} result = 0; break; case 1: / * Port number Inquiry request: port number table Is retrieved by application execution system ID and process ID, and the corresponding port number is returned. * / Result = -1; for (i = 0; i <= portTable_tail; i ++) {if (PortTable [i] .progID == PortInfo .progID && PortTable [i] .processID == PortInfo.processID) {result = PortTable [i] .portNo; break;}} break; default: result = -1; break;} / * Send result * / nByteSend = send (newSock, (char *) & result, sizeof (result), 0); close (newSock);} / * while * /}
【0057】図11(b)は、受信プロシージャ300
2の動作を示すフローチャートである。当該プロシージ
ャに対しては、自プロセスID及び自ホストIDがパラ
メータとして指定される。FIG. 11B shows a reception procedure 300.
6 is a flowchart showing the operation of No. 2. For this procedure, its own process ID and its own host ID are specified as parameters.
【0058】先ずステップS60においてメッセージ受
信用のソケットを作成する。次に、ステップS61にお
いて、ポート番号管理プロセス6000に対し、ポート
番号の登録を要求する。すなわちメッセージ受信用に割
り当てられたポート番号を調べ、そのポート番号及びア
プリケーション実行システムID,プロセスIDを自ホ
ストのポート番号管理プロセスに対して登録要求する。
当該処理は、受信プロシージャ3002がポート番号管
理要求プロシージャ3001を呼び出すことによって行
われる。次にステップS62においてメッセージ受信待
ちに入る。ここで、メッセージを受信した場合は、メッ
セージを格納するメモリ領域を確保し、当該領域にメッ
セージ本体を書き込む。First, in step S60, a socket for receiving a message is created. Next, in step S61, the port number management process 6000 is requested to register a port number. That is, the port number assigned for message reception is checked, and the port number, application execution system ID, and process ID are requested to be registered to the port number management process of the host.
This processing is performed by the reception procedure 3002 calling the port number management request procedure 3001. Next, in step S62, the process waits for message reception. Here, when a message is received, a memory area for storing the message is secured, and the message body is written in the area.
【0059】次にステップS63においてメッセージ処
理スレッド4001を生成し、引数(すなわちメッセー
ジ)を渡す。ここでは上述したようにメッセージディス
パッチャ4001によるメッセージ処理が行われる。そ
してステップS64に移行し、送信スレッド側に結果を
送信する。ここで、上記受信プロシージャ3002のよ
り具体的な構成例として当該プロシージャのC言語ソー
スリストを記す。Next, in step S63, a message processing thread 4001 is generated, and an argument (ie, message) is passed. Here, message processing is performed by the message dispatcher 4001 as described above. Then, the process shifts to step S64 to transmit the result to the transmission thread side. Here, as a more specific configuration example of the reception procedure 3002, a C language source list of the procedure will be described.
【0060】 /**************************** * 受信プロシージャ * ***************************/ void cmilisten(u_long selfProcessID, u_long selfHostID) { struct sockaddr_in listens, news; int i, listenSock, newSock, addrlen, nByteRecv, nByteSend, result; struct packetInfo* packetInfoPtr; struct portInfo PortInfo; u_long tid; /* メッセージ受信用のソケットを作成 */ memset((char *)&listens, 0, sizeof(listens)); listenSock = socket(AF_INET, SOCK_STREAM, 0); listens.sin_addr.s_addr = htonl(INADDR_ANY); listens.sin_family = AF_INET; listens.sin_port = htons(0); bind(listenSock, (struct sockaddr *)&listens, sizeof(listens)); /* 割り当てられたポート番号を調べる */ addrlen = sizeof(struct sockaddr_in); getsockname(listenSock, (struct sockaddr *)&listens, &addrlen); /* ポート番号管理プロセスに登録を要求 */ PortInfo.flag = 0; PortInfo.progID = CMIPROG; /* ヘッダファイルに定義されている */ PortInfo.processID = selfProcessID; PortInfo.portNo = listens.sin_port; if(cmiportreq(selfHostID, &PortInfo) == -1){ exit(1); } listen(listenSock, 5); while(1){ /* メッセージの受信待ち */ newSock = accept(listenSock, (struct sockaddr *)&news, &addrlen); /* packetInfo を読み込み、メッセージ本体長を得る */ packetInfoPtr = (struct packetInfo *)malloc(sizeof(struct packetInfo )); nByteRecv = recv(newSock, (char *)packetInfoPtr, sizeof(struct packetInfo), 0); /* メッセージ本体を読み込む */ packetInfoPtr->msg.msg_val = (char *)malloc(packetInfoPtr->msg.msg_l en); nByteRecv = recv(newSock, (char *)packetInfoPtr->msg.msg_val, packetInfoPtr->msg.msg_len, 0); /* メッセージ処理スレッドを生成し、引数( メッセージ) を渡す */ result = thr_create(0,0,(void*(*)(void*))MessageDistributer, packetInfoPtr, 0, &tid); /* 結果を送信 */ nByteSend = send(newSock, (char *)&result, sizeof(result), 0); close(newSock); } /* while */ } [0060] / **************************** * Receive procedure * ************** ************* / void cmilisten (u_long selfProcessID, u_long selfHostID) {struct sockaddr_in listens, news; int i, listenSock, newSock, addrlen, nByteRecv, nByteSend, result; struct packetInfo * packetInfoPtr; struct portInfo PortInfo; u_long tid; / * Create socket for receiving messages * / memset ((char *) & listens, 0, sizeof (listens)); listenSock = socket (AF_INET, SOCK_STREAM, 0); listens.sin_addr.s_addr = htonl (INADDR_ANY); listens.sin_family = AF_INET; listens.sin_port = htons (0); bind (listenSock, (struct sockaddr *) & listens, sizeof (listens)); / * Check the assigned port number * / addrlen = sizeof (struct sockaddr_in); getsockname (listenSock, (struct sockaddr *) & listens, &addrlen); / * Request registration to port number management process * / PortInfo.flag = 0; PortInfo.progID = CMIPROG; / * In header file Defined * / PortInfo.processID = selfProcessID ; PortInfo.portNo = listens.sin_port; if (cmiportreq (selfHostID, & PortInfo) == -1) {exit (1);} listen (listenSock, 5); while (1) {/ * Wait for message reception * / newSock = accept (listenSock, (struct sockaddr *) & news, &addrlen); / * Read packetInfo and get message body length * / packetInfoPtr = (struct packetInfo *) malloc (sizeof (struct packetInfo)); nByteRecv = recv (newSock, (char *) packetInfoPtr, sizeof (struct packetInfo), 0); / * Read message body * / packetInfoPtr-> msg.msg_val = (char *) malloc (packetInfoPtr-> msg.msg_l en); nByteRecv = recv (newSock , (char *) packetInfoPtr-> msg.msg_val, packetInfoPtr-> msg.msg_len, 0); / * Create a message processing thread and pass the argument (message) * / result = thr_create (0,0, (void * (*) (void *)) MessageDistributer, packetInfoPtr, 0, &tid); / * Send result * / nByteSend = send (newSock, (char *) & result, sizeof (result), 0); close (newSock);} / * while * /}
【0061】このように、複数プロセス間のメッセージ
パッシングを、いわゆるソケットインタフェースによる
プロセス間通信により実現する第2実施形態によれば、
メッセージ送信先の特定を、アプリケーション実行シス
テムID及びプロセスIDの指定によって行うため、ソ
ケットインタフェースの通常の方法によりホストのアド
レス及びポート番号を用いて物理的に特定する場合に比
べて、論理的に、そして柔軟に行うことができる。な
お、本発明は上述した実施形態に限定されず、種々変形
して実施可能である。As described above, according to the second embodiment in which message passing between a plurality of processes is realized by inter-process communication using a so-called socket interface,
Since the message transmission destination is specified by specifying the application execution system ID and the process ID, logically, compared with the case where the message is physically specified using the address and port number of the host by the normal method of the socket interface, And it can be done flexibly. The present invention is not limited to the above-described embodiment, and can be implemented with various modifications.
【0062】[0062]
【発明の効果】以上説明したように本発明によれば、複
数のアプリケーションから構成される分散アプリケーシ
ョン空間を動的に設営可能な分散アプリケーション実行
システムを提供できる。As described above, according to the present invention, a distributed application execution system capable of dynamically setting up a distributed application space composed of a plurality of applications can be provided.
【図1】本発明の第1実施形態に係る分散アプリケーシ
ョン実行システムの論理構成図。FIG. 1 is a logical configuration diagram of a distributed application execution system according to a first embodiment of the present invention.
【図2】上記第1実施形態に係るアプリケーション間に
おけるメッセージパッシングの機能を実現するためのソ
フトウェア構成図。FIG. 2 is a software configuration diagram for realizing a message passing function between applications according to the first embodiment.
【図3】上記第1実施形態に係るメッセージパッシング
を実現するためのより具体的な構成例を示すブロック
図。FIG. 3 is a block diagram showing a more specific configuration example for realizing message passing according to the first embodiment.
【図4】上記第1実施形態に係り、ネットワークを介し
て隔てられたノード間(ノードA〜ノードB)におい
て、遠隔手続き呼び出しによりプロセス間のメッセージ
パッシングを行う場合の構成を概略的に示すブロック
図。FIG. 4 is a block diagram schematically showing a configuration in a case where message passing between processes is performed by a remote procedure call between nodes (nodes A and B) separated via a network according to the first embodiment. FIG.
【図5】上記第1実施形態に係るメッセージ処理スレッ
ド600により処理されるプロシージャ呼び出し要求メ
ッセージのデータ構造を模式的に示す図。FIG. 5 is a diagram schematically showing a data structure of a procedure call request message processed by the message processing thread 600 according to the first embodiment.
【図6】上記第1実施形態に係る受信準備プロシージャ
501、ディスパッチプロシージャ502、及び実処理
プロシージャ503の動作を示すフローチャート。FIG. 6 is a flowchart showing operations of a reception preparation procedure 501, a dispatch procedure 502, and an actual processing procedure 503 according to the first embodiment.
【図7】上記第1実施形態に係る送信プロシージャ20
1の動作を示すフローチャート。FIG. 7 is a transmission procedure 20 according to the first embodiment.
3 is a flowchart showing the operation of FIG.
【図8】上記第1実施形態に係る分散アプリケーション
の構築例を示す模式図。FIG. 8 is a schematic diagram showing a configuration example of a distributed application according to the first embodiment.
【図9】本発明の第2実施形態に係るメッセージパッシ
ングを実現するためのより具体的な構成例を示すブロッ
ク図。FIG. 9 is a block diagram showing a more specific configuration example for implementing message passing according to the second embodiment of the present invention.
【図10】送信プロシージャ2001及びポート番号管
理要求プロシージャ2002の動作を示すフローチャー
ト。FIG. 10 is a flowchart showing operations of a transmission procedure 2001 and a port number management request procedure 2002.
【図11】ポート番号表管理プロシージャ6001及び
受信プロシージャ3002の動作を示すフローチャー
ト。FIG. 11 is a flowchart showing operations of a port number table management procedure 6001 and a reception procedure 3002.
L…分散アプリケーション実行システム Ap1,Ap2…(分散)アプリケーション M1,M2…メッセージパッシングオペレータ部 C1,C2…通信メディアインターフェース部 10…分散評価部 11…開発ツール 12…システムイニシャライザ 13…メッセージ受け渡しインタフェース部 20…メッセージ評価スケジューラ 30…メッセージパッシングオペレータ部 31…メッセージディスパッチャ 32…メッセージ送信要求部 60…通信メディアインターフェース部 61…ネットワークインターフェース 70…通信メディア 100…送信要求部 200,500…通信メディアインターフェース部 201…送信プロシージャ 202,504…RPC 203,505…ポート 300,600…メッセージ処理スレッド 400,900…受信スレッド 501…受信準備プロシージャ 502…ディスパッチプロシージャ 503…実処理プロシージャ 601…メッセージディスパッチャ 700,800…送信スレッド L: Distributed application execution system Ap1, Ap2: (Distributed) application M1, M2: Message passing operator unit C1, C2: Communication media interface unit 10: Distributed evaluation unit 11: Development tool 12: System initializer 13: Message delivery interface unit 20 ... Message evaluation scheduler 30 ... Message passing operator unit 31 ... Message dispatcher 32 ... Message transmission request unit 60 ... Communication media interface unit 61 ... Network interface 70 ... Communication media 100 ... Transmission request unit 200,500 ... Communication media interface unit 201 ... Transmission Procedures 202, 504: RPC 203, 505: Port 300, 600 ... Message processing thread 400 900 ... reception thread 501 ... reception preparation procedure 502 ... Dispatch procedure 503 ... actual processing procedure 601 ... message dispatcher 700, 800 ... send thread
Claims (3)
クを介して結合された分散処理システム上で前記ノード
上に存在するプロセス間のメッセージ受け渡しを行うア
プリケーション、を実行する分散アプリケーション実行
システムにおいて、 前記アプリケーションを構成するプロセスの生成元とな
るプログラムを識別する第1の識別手段と、前記第1の
識別手段により識別されたプログラムによって生成され
る少なくとも一つのプロセスを識別する第2の識別手段
とを具備し、 前記プロセス間のメッセージ受け渡しは、前記第1の識
別手段によるプログラムの識別と、前記第2の識別手段
によるプロセスの識別とによって前記メッセージの送り
先を特定して行われることを特徴とする分散アプリケー
ション実行システム。1. A distributed application execution system for executing an application for transferring a message between processes existing on a distributed processing system in which a plurality of computer nodes are connected via a network, wherein the application is configured. First identification means for identifying a program that is a generation source of a process to be performed, and second identification means for identifying at least one process generated by the program identified by the first identification means, The distributed application execution is characterized in that the message transfer between the processes is performed by specifying the destination of the message by the identification of the program by the first identification means and the identification of the process by the second identification means. system.
呼出しにより行われ、当該遠隔手続き呼出しに対する通
信ポートの割り当ては、前記第1の識別手段によるプロ
グラムの識別と、前記第2の識別手段によるプロセスの
識別により行われ、前記メッセージは前記通信ポートに
対して送られることを特徴とする請求項1に記載の分散
アプリケーション実行システム。2. The method according to claim 1, wherein the message transfer is performed by a remote procedure call, and a communication port is allocated to the remote procedure call by identifying the program by the first identification means and identifying the process by the second identification means. The distributed application execution system according to claim 1, wherein the message is sent to the communication port.
ンタフェースによるプロセス間通信により行われ、当該
ソケットインタフェースに対する通信ポートの割り当て
は、前記第1の識別手段によるプログラムの識別と、前
記第2の識別手段によるプロセスの識別とによって行わ
れることを特徴とする請求項1に記載の分散アプリケー
ション実行システム。3. The message passing is performed by inter-process communication using a socket interface, and the assignment of a communication port to the socket interface is performed by identifying the program by the first identification unit and by using the process identification by the second identification unit. 2. The distributed application execution system according to claim 1, wherein the identification is performed.
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP9006747A JPH10207724A (en) | 1997-01-17 | 1997-01-17 | Distributed application execution program |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP9006747A JPH10207724A (en) | 1997-01-17 | 1997-01-17 | Distributed application execution program |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH10207724A true JPH10207724A (en) | 1998-08-07 |
Family
ID=11646796
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP9006747A Pending JPH10207724A (en) | 1997-01-17 | 1997-01-17 | Distributed application execution program |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPH10207724A (en) |
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| KR100331519B1 (en) * | 1998-08-01 | 2002-04-06 | 포만 제프리 엘 | Computerized method and system for implementing distributed applications |
| WO2013011713A1 (en) * | 2011-07-15 | 2013-01-24 | オムロン株式会社 | Cpu unit for plc, plc-use system program, recording medium in which plc-use system program is stored, plc system, plc support device, plc support program, and recording medium in which plc support program is stored |
-
1997
- 1997-01-17 JP JP9006747A patent/JPH10207724A/en active Pending
Cited By (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| KR100331519B1 (en) * | 1998-08-01 | 2002-04-06 | 포만 제프리 엘 | Computerized method and system for implementing distributed applications |
| WO2013011713A1 (en) * | 2011-07-15 | 2013-01-24 | オムロン株式会社 | Cpu unit for plc, plc-use system program, recording medium in which plc-use system program is stored, plc system, plc support device, plc support program, and recording medium in which plc support program is stored |
| JP2013025353A (en) * | 2011-07-15 | 2013-02-04 | Omron Corp | Cpu unit of plc, system program for plc, recording medium having system program for plc stored therein, plc system, plc support device, plc support program, and recording medium having plc support program stored therein |
| CN103562807A (en) * | 2011-07-15 | 2014-02-05 | 欧姆龙株式会社 | CPU unit for PLC, PLC-use system program, recording medium in which PLC-use system program is stored, PLC system, PLC support device, PLC support program, and recording medium in which PLC support program is stored |
| US10082777B2 (en) | 2011-07-15 | 2018-09-25 | Omron Corporation | CPU unit for PLC, PLC-use system program, recording medium in which PLC-use system program is stored, PLC system, PLC support device, PLC support program, and recording medium in which PLC support program is stored |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN106161537B (en) | Processing method, device, system and electronic equipment of remote procedure call | |
| US5926636A (en) | Remote procedural call component management method for a heterogeneous computer network | |
| US6282581B1 (en) | Mechanism for resource allocation and for dispatching incoming calls in a distributed object environment | |
| Arulanthu et al. | The design and performance of a scalable ORB architecture for CORBA asynchronous messaging | |
| US20040068479A1 (en) | Exploiting asynchronous access to database operations | |
| US5867650A (en) | Out-of-band data transmission | |
| US6360279B1 (en) | True parallel client server system and method | |
| US7640549B2 (en) | System and method for efficiently exchanging data among processes | |
| JPH10124470A (en) | A paging mechanism for multiplexed messages with low low context switching overhead. | |
| JP2004536382A (en) | Systems, methods, and articles of manufacture using replaceable components to select network communication channel components with replaceable quality of service features | |
| JP2002543491A (en) | Communication architecture for distributed computing environment | |
| CN100442240C (en) | Data processing system and its control method | |
| CN118381796A (en) | Data transmission method, apparatus, electronic device, storage medium, and program product | |
| US5933632A (en) | Ring transitions for data chunks | |
| US20030202522A1 (en) | System for concurrent distributed processing in multiple finite state machines | |
| JPH10207724A (en) | Distributed application execution program | |
| KR20040002624A (en) | The Apparatus & Method to link Multi Protocol For Component Middleware In Real-Time | |
| JPH08212180A (en) | Inter-process communication processor | |
| CN111901689B (en) | Streaming media data transmission method, device, terminal equipment and storage medium | |
| CN115361348A (en) | Method for communicating with web browser performed by data acquisition device | |
| US7320044B1 (en) | System, method, and computer program product for interrupt scheduling in processing communication | |
| US20030061257A1 (en) | Multithreaded universal daemon for network data exchanges | |
| US5987527A (en) | Binding data sinks and sources across ring levels | |
| JP2000267960A (en) | Packet communication method and packet communication device between processes | |
| JP2000151739A (en) | Information processor, distributed processor and network system |