JPH064498A - Multiprocessor - Google Patents

Multiprocessor

Info

Publication number
JPH064498A
JPH064498A JP16288292A JP16288292A JPH064498A JP H064498 A JPH064498 A JP H064498A JP 16288292 A JP16288292 A JP 16288292A JP 16288292 A JP16288292 A JP 16288292A JP H064498 A JPH064498 A JP H064498A
Authority
JP
Japan
Prior art keywords
processing
block
procedure
intermediate language
code
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
Application number
JP16288292A
Other languages
Japanese (ja)
Inventor
Fumio Nagasaka
文夫 長坂
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Seiko Epson Corp
Original Assignee
Seiko Epson Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Seiko Epson Corp filed Critical Seiko Epson Corp
Priority to JP16288292A priority Critical patent/JPH064498A/en
Publication of JPH064498A publication Critical patent/JPH064498A/en
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

PURPOSE:To execute parallel processing without recompiling object codes even when the hardware constitution of a parallel processing system is changed by providing a mechanism for exclusively controlling access to variables shared at the time of parallel execution and dynamically performing the processing block assignment of the parallel execution realized by an interpreter for executing an intermediate language outputted by a compiler. CONSTITUTION:This multiprocessor is provided with a compiling mechanism 102 having a means for analyzing program description for generating the access at least to shared memory source assignment and the means for analyzing the description for a program processing unit capable of parallel processing and performing processor assignment. Then, interpreting mechanisms 111 and 112 for executing the intermediate language outputted by the compiling mechanism 102 are provided to dynamically perform the processing block assignment of the parallel execution realized by the interpreting mechanisms 111 and 112.

Description

【発明の詳細な説明】Detailed Description of the Invention

【0001】[0001]

【産業上の利用分野】本発明はアーキテクチャの異なる
マルチプロセッサによる並列実行処理に関する。
BACKGROUND OF THE INVENTION 1. Field of the Invention The present invention relates to parallel execution processing by multiprocessors having different architectures.

【0002】[0002]

【従来の技術】同一のプロセッサを複数用いることで均
質な並列処理を行なうシステムは既に知られている。
2. Description of the Related Art A system for performing uniform parallel processing by using a plurality of identical processors is already known.

【0003】一方、異なるアーキテクチャを持つプロセ
ッサを複数用いることで並列処理を行なうシステムにつ
いては、コンパイルにより直接機械語に落とす方法は知
られている。例えば、特開昭62ー34275号で述べ
られている大型コンピュータのベクトルプロセッサ装置
などはこれに該当する。しかし、この方法では個々のア
ーキテクチャの差を吸収し、均質なマルチプロセッサ処
理系と等価な実行環境を実現することはできなかった。
On the other hand, for a system which performs parallel processing by using a plurality of processors having different architectures, a method of directly converting the system into a machine language by compiling is known. For example, a vector processor device of a large computer described in JP-A-62-34275 corresponds to this. However, this method cannot absorb the difference of each architecture and realize an execution environment equivalent to a homogeneous multiprocessor system.

【0004】そこで、その問題を解決する方法としてコ
ンパイルにより直接機械語に落とさずに、その間に中間
コードを介在させる方法が特開昭63−41934号で
提案されている。この方法では中間言語オブジェクトコ
ードを発生するコンパイラと中間言語インタープリタに
より処理が行なわれ、それによりCPUと外部メモリ間
のアクセス頻度を減少させている。
Therefore, as a method for solving the problem, Japanese Patent Laid-Open No. 63-41934 proposes a method in which an intermediate code is interposed between the two instead of directly converting them into a machine language by compiling. In this method, processing is performed by a compiler that generates intermediate language object code and an intermediate language interpreter, thereby reducing the frequency of access between the CPU and external memory.

【0005】[0005]

【発明が解決しようとする課題】しかし、上記従来発明
は並列処理に必要な共有変数の排他制御、実行単位の分
散を実現するものではなかったため、並列記述言語によ
って書かれた目的プログラムが実際には並列実行されな
いという問題点があった。
However, since the above-mentioned conventional invention does not realize the exclusive control of the shared variables and the distribution of the execution units necessary for the parallel processing, the target program written in the parallel description language is actually used. There was a problem that was not executed in parallel.

【0006】本発明はこの様な問題を解決するために鑑
みられたもので、その目的とするところは、異なるアー
キテクチャを持つプロセッサを複数用いることで並列処
理を行なうシステムにおいて、並列記述言語仕様に基づ
いて書かれた目的プログラムにより並列実行を実現する
ことと、プロセッサユニットの変更があった場合でも目
的プログラムの変更を行ない、再コンパイルするという
一連の作業なく並列実行を可能にすることにある。
The present invention has been conceived in order to solve such a problem. An object of the present invention is to provide a parallel description language specification in a system for performing parallel processing by using a plurality of processors having different architectures. It is to realize parallel execution by a target program written based on it, and to enable parallel execution without changing the target program even if the processor unit is changed and recompiling.

【0007】[0007]

【課題を解決するための手段】この様な課題を解決する
ために本発明のマルチプロセッサ処理装置は、少なくと
も共有メモリ資源割り当てに対してアクセスを発生する
プログラム記述の解析を行ない排他制御を指示する手段
と、並列処理可能なプログラム処理単位に対する記述の
解析を行ないプロセッサ割り当てを行なう手段とを有す
るコンパイル機構と、前記コンパイル機構の出力した中
間言語を実行するインタープリット機構と、前記インタ
ープリット機構により実現される並列実行の処理ブロッ
ク割り当てを動的に行なう機構とによって構成されてい
る。
In order to solve such a problem, the multiprocessor processing apparatus of the present invention analyzes a program description that causes an access to at least shared memory resource allocation and instructs exclusive control. And a interpreting mechanism for executing the intermediate language output from the compiling mechanism, and a compiling mechanism having means for performing a processor allocation by analyzing a description of a program processing unit capable of parallel processing And a mechanism for dynamically allocating processing blocks for parallel execution.

【0008】[0008]

【実施例】実施例の説明は次の各項目に従って行なう。EXAMPLES Examples will be described according to the following items.

【0009】0.はじめに 1.ソースコードのコンパイル 1−1.ターゲットシステムの説明 1−2.並列実行及び同期、排他制御の記述方法 1−3.字句解析、構文解析の処理 1−3−1.引数リスト解析処理(S404) 1−3−2.ブロック間の従属関係の抽出(S405、
S416) 1−3−3.共有変数処理(S412) 2.中間言語によるコード生成 2−1.並列実行時のコード生成手段108 2−2.共有資源アクセス手続きのコード生成手段(S
418) 2−3.オブジェクトファイル作成手段109の動作 3.中間言語インタープリタ 3−1.中間言語インタープリタ間の通信 3−2.中間言語インタープリタの動作状態 3−3.並列記述部分の実行時処理 3−4.共有資源アクセスの実行時処理 3−5.実行プロセッサを明示する手続き 4.説明の補足 4−1.コンパイラ、インタープリタの使用する表 4−2.本実施例の展開 4−2−1.排他制御と共有資源管理 4−2−2.中間言語インタープリタの実装 0.はじめに 図1は本発明の一実施例として好適なマルチプロセッサ
システムとそのコンパイラの構成図である。ソースコー
ド101のコンパイルは、ターゲットシステムと異なる
コンピュータ上で行なわれても良い。この時、ソースコ
ード101を入力として、中間言語オブジェクト110
が出力される。この中間言語オブジェクト110が実際
のターゲットシステムにおいて実行される。
0. Introduction 1. Source code compilation 1-1. Description of target system 1-2. Description method of parallel execution, synchronization, and exclusive control 1-3. Processing of lexical analysis and syntax analysis 1-3-1. Argument list analysis processing (S404) 1-3-2. Extraction of dependency between blocks (S405,
S416) 1-3-3. Shared variable processing (S412) 2. Code generation by intermediate language 2-1. Code generation means 108 for parallel execution 2-2. Code generation means for shared resource access procedure (S
418) 2-3. Operation of object file creating means 109 3. Intermediate language interpreter 3-1. Communication between intermediate language interpreters 3-2. Operating state of intermediate language interpreter 3-3. Runtime processing of parallel description part 3-4. Runtime process of shared resource access 3-5. 3. Procedure to specify the execution processor Supplementary explanation 4-1. Table used by compiler and interpreter 4-2. Development of the present example 4-2-1. Exclusive control and shared resource management 4-2-2. Implementation of an intermediate language interpreter 0. First, FIG. 1 is a block diagram of a multiprocessor system and its compiler suitable as an embodiment of the present invention. The source code 101 may be compiled on a computer different from the target system. At this time, the source code 101 is input and the intermediate language object 110 is input.
Is output. This intermediate language object 110 is executed in the actual target system.

【0010】図2はターゲットシステムの一実施例とし
て好適なパーソナルコンピュータ200の構成図であ
る。
FIG. 2 is a block diagram of a personal computer 200 suitable as an embodiment of the target system.

【0011】1.ソースコードのコンパイル 1−1.ターゲットシステムの説明 本実施例のターゲットシステムであるパーソナルコンピ
ュータ200は、制御装置204によって、表示装置、
入力装置等のユーザーインターフェース装置を制御し、
使用者の操作を受けつける。プロセッサ113は汎用の
マイクロコンピュータであり、オペレーティングシステ
ム203の処理を実行し、プロセッサ資源、メモリ資源
の管理を行なっている。中間言語インタープリタ111
はこのオペレーティングシステム203の機能を呼び出
して実行される独立したプロセスである。プロセスはオ
ペレーティングシステムにおけるプロセッサ資源、メモ
リ資源割り当ての実行時の単位である。本実施例でプロ
セスは、プロセスの識別子及び実行管理、メモリ管理の
ための情報を含むプロセスヘッダと、中断の際に現在の
プロセッサのレジスタの状態を保存するための領域と、
オブジェクトコード領域、スタック領域からなる。パー
ソナルコンピュータ200において多重処理を行なう場
合は、複数のプロセスを起動し、プロセスに対するスケ
ジュールによって処理を多重化する。また、中間言語で
記述された目的プログラムのオブジェクトコードは、そ
れぞれ中間言語インタープリタ111を起動してこのイ
ンタープリタ上で実行される。
1. Source code compilation 1-1. Description of Target System The personal computer 200, which is the target system of the present embodiment, controls the display device by the control device 204.
Control user interface devices such as input devices,
Accept the operation of the user. The processor 113 is a general-purpose microcomputer, executes processing of the operating system 203, and manages processor resources and memory resources. Intermediate language interpreter 111
Is an independent process executed by calling the function of the operating system 203. A process is a unit at the time of allocation of processor resources and memory resources in an operating system. In this embodiment, the process includes a process header including process identifiers, execution management, and information for memory management, an area for saving the current register state of the processor at the time of suspension, and
It consists of an object code area and a stack area. When multiple processing is performed in the personal computer 200, a plurality of processes are activated and the processing is multiplexed according to the schedule for the processes. The object code of the target program written in the intermediate language is activated by the intermediate language interpreter 111 and executed on this interpreter.

【0012】パーソナルコンピュータ200のプロセッ
サ113に対して使用者は、ハードウェア付加によって
機能向上を図ることができる。パーソナルコンピュータ
200はこの目的に応えるため外部拡張用のシステムバ
ス202を持つ。図2の構成ではシステムバス202を
使用して付加ハードウェア201を拡張した様子を示し
た。ここで、プロセッサ114はプロセッサ113の処
理の部分を分担し、後述する方法で並列実行する事によ
ってパーソナルコンピュータ200の処理速度を向上さ
せる。この様な付加ハードウェアはその役割からアクセ
ラレータと呼ばれる事がある。プロセッサ114はシス
テムバス202を介してのデータの授受、割り込み等を
処理するためカーネルプログラム205を実行する。中
間言語インタープリタ112はこのカーネル205に管
理されるプロセスである。プロセッサ114がこれらプ
ログラム実行をプロセッサ113とは独立して行なうた
め、局所メモリ206が使用される。また、プロセッサ
114とシステムバス202の接続は先入れデータを先
に取り出すことが出来るように構成された順序付きメモ
リであるFIFO207、208によって行なわれる。
FIFO207、208は、プロセッサ113のメモリ
空間にアドレス割り当てされプロセッサ113からアク
セスされる。
The user can improve the function of the processor 113 of the personal computer 200 by adding hardware. The personal computer 200 has a system bus 202 for external expansion to meet this purpose. In the configuration of FIG. 2, the additional bus 201 is expanded using the system bus 202. Here, the processor 114 shares the processing part of the processor 113 and improves the processing speed of the personal computer 200 by performing parallel execution by a method described later. Such additional hardware is sometimes called an accelerator because of its role. The processor 114 executes the kernel program 205 to handle data transfer, interrupts, etc. via the system bus 202. The intermediate language interpreter 112 is a process managed by this kernel 205. The local memory 206 is used because the processor 114 executes these programs independently of the processor 113. Further, the connection between the processor 114 and the system bus 202 is made by the FIFOs 207 and 208 which are ordered memories configured so that the first-in first-out data can be taken out first.
The FIFOs 207 and 208 are assigned addresses in the memory space of the processor 113 and are accessed by the processor 113.

【0013】1−2.並列実行及び同期、排他制御の記
述方法 本実施例では、複数プロセッサによる並列実行をプログ
ラム言語記述の段階でソースコード中に明示的に記述す
る。このために並列記述を認める言語仕様が必要であ
る。ここでは言語Pascalに並列記述のための述語を追加
した言語を取り上げて説明する。本実施例では説明の簡
略化のため言語Pascalの文法の中でprocedure文またはf
unction文で開始される副プログラムをブロックと呼
び、代入文とif、while、repeat、for等の出発記号で開
始される文をステートメントと呼ぶ。またbegin...end
で囲まれた「文」の並びは、通常は「複合文(compound
statement)」と呼ぶが、ここではこれもステートメン
トと呼ぶ。追加した仕様は次の2種類である。
1-2. Description method of parallel execution, synchronization, and exclusive control In this embodiment, parallel execution by a plurality of processors is explicitly described in the source code at the stage of programming language description. Therefore, a language specification that allows parallel description is necessary. Here, a language in which a predicate for parallel description is added to the language Pascal will be taken up and described. In this embodiment, a procedure statement or f is used in the Pascal grammar to simplify the description.
A subprogram that starts with a unction statement is called a block, and a statement that starts with an assignment statement and a departure symbol such as if, while, repeat, or is called a statement. Also begin ... end
The sequence of "sentences" enclosed by is usually "compound sentence (compound
statement) ”, which is also called a statement here. The added specifications are the following two types.

【0014】(1)cobegin,coend cobegin,coendはそれぞれ並列実行を認めるブロックの
開始文および終了文である。
(1) cobegin, coend cobegin, coend are the start and end statements of a block that allows parallel execution.

【0015】(2)モニタ(monitor)型 モニタ(monitor)型は、並列実行される複数のブロッ
クによってアクセスされるいわゆる共有変数を宣言する
型付け(typing)である。モニタ型は共有資源を抽象化
して表す形式と見なす事もできるが、プログラム上は特
定された手続きによってだけアクセスできる資源を与え
る。この方法で共有変数に対する排他制御及び同期を取
り扱う方法は複数の公知例に詳しい(例えば、上田和紀
著:並列プログラミング言語、情報処理、Vol.27、No.
9、pp.995-1004(1986)、Brinch Hansen,P.著:The Prog
ramming Language Concurrent Pascal、IEEE Trans. So
ftware Eng.、 Vol.1、No.2、pp.199-207(1975)など)。
(2) Monitor Type The monitor type is a typing for declaring a so-called shared variable accessed by a plurality of blocks executed in parallel. The monitor type can be considered as an abstract representation of shared resources, but it provides resources that can be accessed only by specified procedures in a program. The method of handling exclusive control and synchronization for shared variables by this method is detailed in several publicly known examples (for example, Kazuki Ueda: Parallel Programming Language, Information Processing, Vol.27, No.
9, pp.995-1004 (1986), Brinch Hansen, P .: The Prog
ramming Language Concurrent Pascal, IEEE Trans. So
ftware Eng., Vol.1, No.2, pp.199-207 (1975), etc.).

【0016】図3は、モニタを用いたプログラムの説明
図である。プログラム300は、手続き305が何らか
の整数型のデータを生成し、手続き306がそれを次々
に消費していくという処理内容を並列記述言語によって
記述した例である。これは例えば、手続き305が外部
装置からデータを受信する処理で、手続き306がその
データを加工して表示する場合などに相当する。ここで
変数bufをモニタ型であるbuffertypeとして宣言した事
により、メモリ上の共有資源の実態である変数(変数名
はbuffer)308にはモニタ型の宣言301内部で定義
した手続き302または303によってしかアクセスす
る事ができない。またモニタ内の各変数は手続き304
で初期化される。生産者手続き305が手続きbuf.appe
nd(v)によって変数308への代入を行なおうとする
と、実際には処理302が実行される。この時、既に配
列変数308であるbufferの中味が全て満たされている
とすると、この要求は待ち行列putqを作って待たされる
(309)(これを手続きwait(putq)として表示し
た)。それ以外の場合は配列変数308への要素の追加
が行なわれ、ポインタが更新された後、手続きsignal(g
etq)が呼び出される(310)。手続きsignal(getq)
は、待ち行列getqを作って待たされているデータ取得の
処理呼び出しが有ればそれを実行し、結果を返す処理を
行なう。消費者手続き306が手続きbuf.fetch(v)によ
って変数308の内容の1要素を読み取ろうとすると、
処理手続き303が実行される。この時、配列変数30
8であるbufferの内容が空であれば、この要求は待ち行
列getqを作って待たされる(処理311の手続きwait(g
etq))。それ以外の場合は配列変数308の内容が読み
出され、ポインタの更新が行なわれた後、手続きsignal
(putq)が呼び出される(312)。手続きsignal(putq)
は上記と同様に待ち行列putqに手続き呼び出しが有れば
それを実行し、結果を返す。モニタ型の構造はモニタ型
のデータが宣言されたブロックの管理下にある資源と見
なされる。本実施例ではこの資源へのアクセスは中間言
語インタープリタによって行なわれる。インタープリタ
の処理自体は逐次的な処理であるから、結果的に共有変
数への排他制御および処理同期が保証できる。モニタ型
定義を検出した場合の中間言語発生方法は次に述べる。
FIG. 3 is an explanatory diagram of a program using a monitor. The program 300 is an example in which a parallel description language describes the processing content that the procedure 305 generates some integer type data and the procedure 306 consumes it one after another. This is, for example, the case where the procedure 305 is a process of receiving data from an external device, and the procedure 306 processes and displays the data. By declaring the variable buf as a buffer type that is a monitor type, the variable (variable name is buffer) 308 that is the actual state of the shared resource on the memory can be used only by the procedure 302 or 303 defined in the monitor type declaration 301. I cannot access it. In addition, each variable in the monitor is the procedure 304
Is initialized with. Producer procedure 305 is procedure buf.appe
When an attempt is made to substitute the variable 308 with nd (v), the process 302 is actually executed. At this time, if all the contents of the buffer, which is the array variable 308, are already filled, this request creates a queue putq and waits (309) (displayed as a procedure wait (putq)). In other cases, the element is added to the array variable 308, the pointer is updated, and the procedure signal (g
etq) is called (310). Procedure signal (getq)
Creates a queue getq and executes the waiting data acquisition processing call, if any, and returns the result. When the consumer procedure 306 tries to read one element of the content of the variable 308 by the procedure buf.fetch (v),
The processing procedure 303 is executed. At this time, array variable 30
If the content of buffer, which is 8, is empty, this request is made to wait by creating a queue getq (procedure wait (g
etq)). In other cases, the contents of the array variable 308 are read, the pointer is updated, and then the procedure signal
(putq) is called (312). Procedure signal (putq)
Executes the procedure call in the queue putq, if any, and returns the result. A monitor-type structure is considered to be a resource under the control of the block in which the monitor-type data is declared. In this embodiment, access to this resource is made by an intermediate language interpreter. Since the interpreter process itself is a sequential process, exclusive control to the shared variable and process synchronization can be guaranteed as a result. An intermediate language generation method when the monitor type definition is detected will be described below.

【0017】1−3.字句解析、構文解析の処理 ソースコード101を読み取ったコンパイラ102は、
字句解析手段103により字句解析を行なう。ここで
は、ソースコード101の中に現われる文字列を順次読
み取ることによって手続き、変数、定数、文字定数、デ
ータ型定義、文字列等の名前と値、さらに演算子、特種
記号、プログラム言語の予約語の取り出しを行なう。こ
の読み取り結果はコンパイラ102の作業領域内に記録
される。
1-3. Lexical analysis and parsing processing The compiler 102 that has read the source code 101
The lexical analysis means 103 performs lexical analysis. Here, by sequentially reading the character strings appearing in the source code 101, the names and values of procedures, variables, constants, character constants, data type definitions, character strings, etc., as well as operators, special symbols, and reserved words of programming languages. Take out. The read result is recorded in the work area of the compiler 102.

【0018】次に、字句解析手段103の読み取り結果
のデータを入力として構文解析手段104が実施され
る。本実施例の構文解析符は言語Pascalの文法がLL(1)
と呼ばれる性質の文法であるため、周知の下降解析を行
なう(下降解析に関する公知例には中田育男著:コンパ
イラ、産業図書(1981)等多数がある)。言語Pascal等の
ブロック構造を持つ言語においては、変数名、ブロック
名は宣言されたブロック内を有効範囲とする。このた
め、変数の値の決定、参照にはブロックの深さと(ブロ
ックの深さが同じ場合は)ブロックの登場順序を表す情
報が必要である。構文解析手段104ではプログラム開
始のレベルをブロックレベル=0とみなして処理を進め
る。この後、ブロックの入れ子の状態が1段深くなる毎
にブロックレベルの値は+1される。同じく、入れ子の
構造を1段抜け出す度に、ブロックレベルの値は−1さ
れる。すなわち主プログラムがブロックレベル=0であ
り、主プログラム内で宣言される手続きがブロックレベ
ル=1である。
Next, the syntactic analysis means 104 is implemented with the data of the read result of the lexical analysis means 103 as input. The parsing code of this embodiment has a Pascal grammar of LL (1).
Since it is a grammar of the nature called, well-known descending analysis is performed (there are many known examples of descending analysis such as Ikuo Nakata: Compiler, Sangyo Tosho (1981)). In languages such as Pascal, which have a block structure, variable names and block names are valid within the declared block. Therefore, in order to determine and refer to the value of a variable, information indicating the block depth and the order of appearance of blocks (when the block depths are the same) is required. The syntactic analysis unit 104 regards the program start level as block level = 0 and advances the processing. After this, the block level value is incremented by 1 every time the nested state of the block becomes one step deeper. Similarly, the block level value is decremented by 1 each time the nested structure is exited one step. That is, the main program has a block level = 0, and the procedure declared in the main program has a block level = 1.

【0019】本実施例の構文解析手段104が従来方法
と異なる部分は、その内部で共有メモリ資源検出手段1
05と、並列実行検出手段106を処理する点である。
前者は、並列実行される複数の処理単位によってアクセ
スされる変数を定義し、その変数への処理手順を確立す
る実行コードを生成する。後者は、並列に実行される手
続き、関数呼び出しのためのコードを生成する。
The part of the syntax analysis means 104 of this embodiment different from the conventional method is the shared memory resource detection means 1 inside.
05, and the point where the parallel execution detection means 106 is processed.
The former defines a variable accessed by a plurality of processing units executed in parallel, and generates an execution code that establishes a processing procedure for the variable. The latter produces code for procedures and function calls that are executed in parallel.

【0020】構文解析手段104の処理手順を図4の流
れ図を用いて説明する。ブロック構造を持つ言語の構文
解析を行なう事から、本実施例の構文解析手段104
は、再帰的な下降解析を行なう。すなわち、ブロック検
出とブロック内での構文解析を行ない、ブロック内に更
にブロックの定義があれば、自分自身の処理を再帰的に
呼び出し、ブロック検出を行なう。これは、疑似的なプ
ログラム言語で次の様に書くことができる。
The processing procedure of the syntax analysis means 104 will be described with reference to the flowchart of FIG. Since the syntax analysis of the language having the block structure is performed, the syntax analysis means 104 of this embodiment is used.
Performs a recursive descent analysis. That is, the block detection and the syntax analysis in the block are performed, and if there is a block definition in the block, the own process is recursively called to detect the block. It can be written in a pseudo programming language as follows.

【0021】 procedure block(....); var ident : 述語; ...; begin (* 次の述語を取り出しidentに代入 *) ident := next_word_in_source; if (ident = 'procedure') or (ident = 'function') then block(...) (*再帰*) else begin ....その他の構文...; end end; この繰り返しを正しく制御するため手続きまたは関数の
宣言を検出しブロックに入ると(S401)、ブロック
レベルを+1し(S402)、ブロック番号を+1する
(S403)。この一方で、ブロックの終了を検出した
場合は、ブロックレベルを−1し(S423)、その結
果ブロックレベルの大きさが0より小さいか調べる(S
424)。ブロックレベルが0より小さくなった場合
は、主プログラムのレベルで、ブロックの終了を検出し
た事になり、プログラムの構文解析が完了した事を示し
ている。また、ブロックレベルが0以上であればさらに
構文は続く可能性があり、処理を継続する。以上が構文
解析手段104の処理の流れの概要である。次に個々の
処理ついてさらに説明する。
Procedure block (....); var ident: predicate; ...; begin (* fetch the next predicate and assign it to ident *) ident: = next_word_in_source; if (ident = 'procedure') or (ident = 'function') then block (...) (* recursion *) else begin .... Other syntax ...; end end; When it enters (S401), the block level is incremented by 1 (S402), and the block number is incremented by 1 (S403). On the other hand, when the end of the block is detected, the block level is decremented by 1 (S423), and as a result, it is checked whether the magnitude of the block level is smaller than 0 (S).
424). When the block level becomes smaller than 0, it means that the end of the block has been detected at the level of the main program, indicating that the syntax analysis of the program has been completed. If the block level is 0 or higher, the syntax may continue and the process continues. The above is the outline of the processing flow of the syntax analysis unit 104. Next, the individual processing will be further described.

【0022】構文解析の処理では、個々の処理ブロック
について実行コードの開始番地、変数表の格納位置、引
数渡しに使用するスタック領域の大きさ等の情報を記録
する必要がある。本実施例はこの目的に実行時ブロック
管理テーブル501とブロック番号管理テーブル801
を使用する。図5は本実施例で使用する実行時ブロック
管理テーブル501のデータ構造を説明する図である。
実行時ブロック管理テーブル501は、データ構造50
2を一つの要素とする配列の形式をとる。データ構造5
02は、ブロック番号503、下位ブロックへの連鎖5
04、オブジェクトコード上でのオフセット505、引
数渡しに消費するスタックの深さ506、引数リストへ
の連鎖アドレス507によって構成される。
In the parsing process, it is necessary to record information such as the start address of the execution code, the storage position of the variable table, and the size of the stack area used for argument passing for each processing block. In this embodiment, the run-time block management table 501 and the block number management table 801 are used for this purpose.
To use. FIG. 5 is a diagram for explaining the data structure of the runtime block management table 501 used in this embodiment.
The runtime block management table 501 has a data structure 50.
It takes the form of an array with 2 as one element. Data structure 5
02 is a block number 503 and a chain 5 to a lower block
04, an offset 505 on the object code, a stack depth 506 consumed for argument passing, and a chain address 507 to the argument list.

【0023】再び流れ図に戻り処理手順の説明を続け
る。
Returning to the flowchart again, the description of the processing procedure will be continued.

【0024】処理S403によって、ソースコード中の
全ての処理ブロック(手続き、関数)はユニークなブロ
ック番号が与えられる。各処理ブロックのブロック番号
とブロックレベルの関係を保持するため、本実施例の処
理では図8aに示すブロック番号管理テーブル801が
生成される。ブロック番号管理テーブルの1つの要素
は、ブロック番号802、ブロックレベル803、テー
ブルエントリ804からなるデータ構造である。処理S
403では、この内ブロック番号802、ブロックレベ
ル803の値の記録が行われる。また処理S403は、
現在の処理ブロックのコード生成の開始位置が全プログ
ラムのオブジェクトコード開始位置から相対位置で何バ
イトの位置であるか計算を行う。この値は実行時ブロッ
ク管理テーブルのデータ構造505に記録される。
By the processing S403, all processing blocks (procedures, functions) in the source code are given unique block numbers. In order to hold the relationship between the block number of each processing block and the block level, the block number management table 801 shown in FIG. 8a is generated in the processing of this embodiment. One element of the block number management table is a data structure including a block number 802, a block level 803, and a table entry 804. Process S
At 403, the values of the inner block number 802 and the block level 803 are recorded. Further, the process S403 is
Calculate how many bytes the relative position of the code generation start position of the current processing block from the object code start position of all programs. This value is recorded in the data structure 505 of the runtime block management table.

【0025】個々のブロック(手続きか関数)はその呼
び出し時に引数を受け取ることができる。このとき、中
間言語インタープリタでは、スタック領域として確保し
たメモリにその引数を積み、処理呼び出しを行なう。そ
こで並列実行時にある手続きを別のプロセッサにスケジ
ュールして実行するためには、このスタック領域に配置
される引数を解釈し、別プロセッサの中間言語インター
プリタの作業領域に複写する必要がある。このため、引
数リスト解析処理(S404)が行なわれる。この処理
は、引数リストを実行時ブロック管理テーブル501の
データ構造507に連結リストとして記録する。この処
理の詳細は次の節で説明する。
Each block (procedure or function) can receive arguments when it is called. At this time, the intermediate language interpreter loads the argument in the memory secured as the stack area and calls the process. Therefore, in order to schedule and execute a certain procedure in another processor during parallel execution, it is necessary to interpret the argument placed in this stack area and copy it to the work area of the intermediate language interpreter of another processor. Therefore, the argument list analysis process (S404) is performed. In this process, the argument list is recorded as a linked list in the data structure 507 of the runtime block management table 501. The details of this process are described in the next section.

【0026】続いてブロック間のリンク発生を行なう
(S405)。これは並列実行時の処理ブロック転送に
必要な情報を生成するものである。詳細は後述する。
Then, a link between blocks is generated (S405). This is for generating information necessary for processing block transfer during parallel execution. Details will be described later.

【0027】この後処理は定数宣言を検出した場合(S
406)はそれを名前表に登録し(S407)、型宣言
を検出した場合(S408)は、型宣言辞書への登録を
行なう(S409)。通常、構文解析処理ではソースプ
ログラム中に現われる予約語以外の名前は定数名、変数
名、手続き名、関数名、変数型名を区別せず名前表に登
録し、この表中に名前と共にそのオブジェクトタイプを
記録する方法を採る場合が多い。これは名前の多重定義
(関数名と定数名が同一など)の不都合を未然に検出す
る上で合理的な方法である。本実施例も構文解析手段1
04における名前(識別子)の管理はこの方法によっ
た。
This post-processing is performed when a constant declaration is detected (S
406) registers it in the name table (S407), and when a type declaration is detected (S408), registers it in the type declaration dictionary (S409). Normally, in the parsing process, names other than reserved words appearing in the source program are registered in the name table without distinguishing constant names, variable names, procedure names, function names, and variable type names, and in the table, names and their objects are registered. Often the method of recording the type is adopted. This is a rational method to detect the inconvenience of name overloading (function name and constant name are the same). Also in this embodiment, the syntax analysis means 1
The management of names (identifiers) in 04 was based on this method.

【0028】但し変数宣言を検出した時(S410)、
共有メモリ資源検出手段105においてモニタ型変数が
検出された場合(S411)は、通常の名前表への登録
の他に後述するような共有変数処理(S412)が実施
される。モニタ型以外の変数であればブロック内の変数
についての表作成が行われ(S413)、さらに、局所
変数割り当てのコード生成が処理される(S414)。
ここで、処理S413でブロック内の変数について作成
された変数表のコンパイラ102の作業領域上での開始
番地がブロック番号管理テーブル801中のテーブルエ
ントリ804の値として記録される。
However, when the variable declaration is detected (S410),
When the monitor type variable is detected by the shared memory resource detecting means 105 (S411), a shared variable process (S412) as described later is executed in addition to the registration in the normal name table. If it is a variable other than the monitor type, a table is created for variables in the block (S413), and code generation for local variable allocation is processed (S414).
Here, the start address on the work area of the compiler 102 of the variable table created for the variables in the block in step S413 is recorded as the value of the table entry 804 in the block number management table 801.

【0029】次にブロック開始以外の構文についての処
理の流れを説明する。
Next, the processing flow for the syntax other than the block start will be described.

【0030】本実施例では言語仕様に並列記述を認めて
いるため、並列実行すべき部分はソースコード中に明示
的にに記述することを要求している。言い換えるとcobe
gin、coendで囲まれた範囲に含まれない処理ブロックは
逐次処理環境での実行コードが生成される。これを構文
解析手段104、コード生成手段107、108、11
7の立場から見れば、cobegin、coendで並列実行を指定
された処理単位以外のブロックの実行コードは通常のコ
ンパイル処理時と同じコード生成を行うことになる。そ
こで構文解析手段104は並列実行検出手段106を実
施する。その処理はソースコードの構文中に予約語cobe
ginを検出すると並列実行フラグ=[真]と設定し(S
420)、予約語coendを検出した場合は並列実行フラ
グ=[偽]とする(S421)処理である。実際の実行
コード(中間言語文)の生成はこのフラグの真偽を判断
しながら行われる。
In this embodiment, since parallel description is allowed in the language specification, the part to be executed in parallel is required to be explicitly described in the source code. In other words, cobe
Execution code in the sequential processing environment is generated for processing blocks that are not included in the range enclosed by gin and coend. This is done by the syntax analysis means 104 and the code generation means 107, 108, 11
From the standpoint of No. 7, the execution code of the block other than the processing unit for which parallel execution is designated by cobegin and coend performs the same code generation as at the time of normal compilation processing. Therefore, the syntax analysis unit 104 executes the parallel execution detection unit 106. The processing is the reserved word cobe in the source code syntax.
When gin is detected, the parallel execution flag = [true] is set (S
420), when the reserved word coend is detected, the parallel execution flag = [false] is set (S421). The actual execution code (intermediate language sentence) is generated while judging whether the flag is true or false.

【0031】取り出された述語が識別子であってしかも
名前表登録を検索した結果、手続き名あるいは関数名で
あったとすると、他の処理ブロックを呼び出す処理であ
ると判断できる(S415)。この判断が[真]である
ときはまずブロック間のリンク処理が行われ(S41
6)、次にブロック呼び出しのコード生成が行われる
(S425)。この時、上述した「並列実行フラグ」の
内容が検査され、フラグ=[真]の場合はコード生成手
段108が実行される。その他の場合はコード生成手段
117が実行される。
If the retrieved predicate is an identifier and the name table registration is searched for a procedure name or a function name, it can be determined that the process is to call another processing block (S415). When this determination is [true], first, inter-block link processing is performed (S41).
6) Next, code generation for block calling is performed (S425). At this time, the content of the above-mentioned "parallel execution flag" is checked, and when the flag = [true], the code generation means 108 is executed. In other cases, the code generation means 117 is executed.

【0032】また、取り出した述語が「モニタ型変数
名」+「.」+「手続き名」という名前の構造を持つ時
はモニタ型変数名によって名前表を検索し、名前が存在
した場合モニタ型手続き呼び出しであると判断できる
(S417)。この場合は共有資源アクセス手続き生成
処理(S418)が実行される。この処理の下部構造と
してさらにコード生成手段107が処理され、中間言語
文が成生される。
When the fetched predicate has a structure of "monitor type variable name" + "." + "Procedure name", the name table is searched by the monitor type variable name, and if the name exists, monitor type It can be determined that it is a procedure call (S417). In this case, the shared resource access procedure generation process (S418) is executed. The code generation means 107 is further processed as a substructure of this processing to generate an intermediate language sentence.

【0033】以上が構文解析手段104の処理の概要で
ある。次に、各部分の動作について順次説明する。
The above is the outline of the processing of the syntax analysis unit 104. Next, the operation of each part will be sequentially described.

【0034】1−3−1.引数リスト解析処理(S40
4) 周知の様にPascal系の言語では手続きに引数が渡される
場合、引数参照の形式には2通りある。「値を渡す引数
(call by value)」と「名前を渡す引数(call by ref
erence)」である。本実施例では、引数参照型の内部表
現として値渡しの場合”参照型=0”、名前を渡す場
合”参照型=1”とした。
1-3-1. Argument list analysis processing (S40
4) As is well known, when arguments are passed to a procedure in Pascal languages, there are two types of argument reference formats. "Argument by value (call by value)" and "Argument by name (call by ref)
erence) ”. In this embodiment, “reference type = 0” is used when passing by value as an internal representation of the argument reference type, and “reference type = 1” is used when passing a name.

【0035】引数の並びは構文の中ではブロック名に続
く”(”で開始され、変数名と変数のデータ型(整数、
配列、文字等)の対で表記される。また引数並びの終了
は”);”である。さらに「名前を渡す引数」は、予約
語”var”で開始される。引数リスト解析処理S404
は、予約語”var”を検出した場合、参照型=1とし、
それ以外の場合は参照型=0とする。次に変数のデータ
型を解析し、そのデータ型に与えられた内部表現の値を
取り出す。使用可能なデータ型には全て内部表現として
ユニークな値(整数値)が与えられている。解析処理S
404は、この”参照型、変数型”の値を実行時ブロッ
ク管理テーブルの連鎖アドレス507から続くデータ構
造509のリストに追加する。データ構造509は、連
結リストのデータ型をとり、データの末尾は連鎖アドレ
スである。連鎖アドレス507からの連鎖509は、引
数リストとしてコード生成処理時に参照される。
The argument sequence starts with "(" following the block name in the syntax, and the variable name and the data type of the variable (integer,
Array, character, etc.). The end of the argument list is ");". Furthermore, the "argument for passing a name" starts with the reserved word "var". Argument list analysis processing S404
When the reserved word "var" is detected, the reference type = 1,
In other cases, the reference type is 0. Next, the data type of the variable is analyzed, and the value of the internal representation given to that data type is extracted. All available data types are given a unique value (integer value) as an internal representation. Analysis process S
404 adds this "reference type, variable type" value to the list of the data structure 509 following the chain address 507 of the runtime block management table. The data structure 509 has a linked list data type, and the end of the data is a chained address. The chain 509 from the chain address 507 is referred to as an argument list during the code generation processing.

【0036】1−3−2.ブロック間の従属関係の抽出
(S405、S416) 本実施例の処理系では、並列実行される対象のブロック
は(それが可能であれば)別のプロセッサの局所メモリ
空間に転送され実行される。このためには、ある処理ブ
ロックを他のプロセッサに配置した時、この処理ブロッ
クから呼び出される手続き、関数のすべてを取り出し、
この複写を前記の処理ブロックと同じプロセッサの局所
メモリに配置することが望まれる。これはある処理ブロ
ックが下位ブロックを呼び出す度にプロセス間通信する
必要を除くための処理である。この実現には、並列実行
の対象となるある処理ブロックに注目した時、その処理
ブロックが呼び出す(以下これを従属すると書く)ブロ
ックを特定できる様な管理手段が実施されれば良い。本
実施例は各処理ブロック間の従属関係を保持するデータ
構造を実行時ブロック管理テーブル501に保持するこ
とでこの管理手段を実現した。
1-3-2. Extraction of Dependence Relationship between Blocks (S405, S416) In the processing system of this embodiment, the target block to be executed in parallel is transferred (if possible) to the local memory space of another processor and executed. To do this, when you place a processing block in another processor, take out all the procedures and functions called from this processing block,
It is desirable to place this copy in local memory of the same processor as the processing block. This is a process for eliminating the need for interprocess communication every time a processing block calls a lower block. To realize this, when attention is paid to a certain processing block that is a target of parallel execution, a management unit that can specify a block that the processing block calls (hereinafter referred to as subordinate) will be implemented. In the present embodiment, this management means is realized by holding the data structure for holding the dependency relationship between the processing blocks in the runtime block management table 501.

【0037】図4の流れ図中の処理S405、S416
はこの実行時ブロック管理テーブル中に、実際のブロッ
ク間のリンクを記述する処理である。
Processes S405 and S416 in the flowchart of FIG.
Is a process for describing links between actual blocks in this runtime block management table.

【0038】本実施例の言語の特性から図6のソースコ
ードの様にプログラムが記述された時、処理単位間のブ
ロック構造と構文解析時に処理S403で与えたブロッ
ク番号を図示すると図7の様に示すことができる。変数
名、手続き名など識別子に与えられたスコープ(有効範
囲)の考え方に従うと、例えばブロック番号11である
手続きp321の処理内部では手続きp32,p3など上位構造の
変数にアクセス可能であるが、手続きp31,p2等の変数へ
のアクセスは許されない。
From the characteristics of the language of this embodiment, when a program is written as in the source code of FIG. 6, the block structure between processing units and the block number given in processing S403 during syntax analysis are shown in FIG. Can be shown in. According to the concept of scope (valid range) given to identifiers such as variable names and procedure names, for example, it is possible to access variables of higher structure such as procedures p32 and p3 inside the processing of procedure p321 which is block number 11. Access to variables such as p31 and p2 is not allowed.

【0039】この様な変数スコープの関係を正しく維持
しながら、処理ブロックの階層関係を取り出すため処理
S405はブロック番号管理テーブル801を参照しな
がら処理を行う。この処理を図9の流れ図に示した。自
ブロックのブロックレベルが0、1のどちらかであれ
ば、自ブロックはトップレベルで宣言されており、上位
階層へ従属しないためリンク発生が不要である(S90
1)。これ以外の場合は、ブロック番号管理テーブル8
01の自ブロックの位置からテーブル内の要素をさかの
ぼり、ブロックレベルの値が自ブロックのブロックレベ
ルの値より一つ小さな値を持つ要素を捜す(S90
2)。その要素のブロック番号を取り出し(S90
3)、そのブロック番号の値をキーとして実行時ブロッ
ク管理テーブル501の中から一致するブロック番号5
03を持つブロックの位置を見つけ、その要素へアクセ
スする。この要素の下位ブロックへの連鎖アドレス50
4からの連鎖508を生成する(S904)。以上の処
理によって上位構造に位置するブロックについて自ブロ
ックへの連鎖を記録することができる。図8bは図6の
プログラムを例に採ってブロック間のリンク動作を説明
した図である。解りやすくするため、ブロック番号管理
テーブル801の内容の右側にブロック間のリンクの様
子を矢印で示した。図6のプログラムから図7のように
ブロック構造に従ってブロック番号を与えた時、例えば
ブロック番号=10の手続きp32はブロック番号=5の
手続きp3に従属する。図8bに示すように手続きp32の
ブロックレベルの値は2であるから、ブロック番号管理
テーブル801をブロックレベル=1であるような要素
を捜してさかのぼるとブロック番号=5の手続きp3の位
置を検出できる。
In order to extract the hierarchical relationship of the processing blocks while maintaining such a variable scope relationship correctly, step S405 performs processing while referring to the block number management table 801. This process is shown in the flowchart of FIG. If the block level of the own block is either 0 or 1, the own block is declared at the top level and is not subordinate to the upper hierarchy, so that link generation is unnecessary (S90).
1). Otherwise, the block number management table 8
The element in the table is traced back from the position of the own block of 01, and an element having a block level value smaller by one than the block level value of the own block is searched (S90).
2). The block number of the element is taken out (S90
3), using the value of the block number as a key, the matching block number 5 from the runtime block management table 501
Find the position of the block with 03 and access that element. Chain address 50 to the lower block of this element
A chain 508 from 4 is generated (S904). With the above processing, the chain to the own block can be recorded for the block located in the upper structure. FIG. 8B is a diagram for explaining the link operation between blocks by taking the program of FIG. 6 as an example. To make it easier to understand, the state of links between blocks is indicated by arrows on the right side of the contents of the block number management table 801. When a block number is given from the program of FIG. 6 according to the block structure as shown in FIG. 7, for example, the procedure p32 of block number = 10 is dependent on the procedure p3 of block number = 5. As shown in FIG. 8b, the value of the block level of the procedure p32 is 2, so if the element is searched for in the block number = 1 in the block number management table 801, the position of the procedure p3 of the block number = 5 is detected. it can.

【0040】他方、処理S416は自ブロックが呼び出
すブロックへの連鎖を生成する処理である。この処理は
より単純である。すなわち、構文中の識別子に従って名
前表を検索した結果、その名前が手続きあるいは関数の
名前であったら、そのブロック番号を取り出す。このブ
ロック番号の値を実行時ブロック管理テーブルの自ブロ
ックの位置の連鎖アドレス504に続く連鎖508に書
き加えるだけである。また、この連鎖508の生成にあ
たり既に同一ブロック番号の要素が連鎖上にあれば重複
を避けるため連鎖への追加は行わない。
On the other hand, the process S416 is a process for generating a chain to a block called by the own block. This process is simpler. That is, as a result of searching the name table according to the identifier in the syntax, if the name is the name of a procedure or function, the block number is extracted. The value of this block number is simply added to the chain 508 following the chain address 504 at the position of the own block in the runtime block management table. Further, when the chain 508 is generated, if an element having the same block number is already on the chain, it is not added to the chain to avoid duplication.

【0041】1−3−3.共有変数処理(S412) 共有変数処理S412は実際のモニタ型変数へのアクセ
スを伴う実行コードの領域を確保する。次にこの領域に
中間言語インタープリタの標準手続きとして用意された
モニタ型手続きの目的コードをロードする。この時、個
々のモニタ型変数にはソースコード内で宣言された順に
ユニークな番号が与えられる。これは図10に示したデ
ータ構造を持つ共有資源管理テーブル1001に記録さ
れる。共有資源管理テーブル1001の一つの要素は、
資源番号1002、共有変数名1003、共有資源を宣
言した処理ブロックのブロック番号1004、モニタ型
手続きの目的コード1006へのオフセットの値100
5から構成される。
1-3-3. Shared variable processing (S412) The shared variable processing S412 secures an area of the execution code that actually accesses the monitor type variable. Next, the target code of the monitor type procedure prepared as the standard procedure of the intermediate language interpreter is loaded in this area. At this time, each monitor type variable is given a unique number in the order of declaration in the source code. This is recorded in the shared resource management table 1001 having the data structure shown in FIG. One element of the shared resource management table 1001 is
Resource number 1002, shared variable name 1003, block number 1004 of processing block that declares shared resource, offset value 100 to object code 1006 of monitor type procedure
It consists of 5.

【0042】2.中間言語によるコード生成 次に、中間言語の生成手順について説明する。説明の簡
単のため中間言語についてその機能を説明する表の一部
を図11に図示した。但しTOPは中間言語インタープリ
タの作業領域に取ったスタック型データ領域の最上段の
番地を表し、SPはスタック型データ領域を指し示すポイ
ンタを表す。本実施例のインタープリタスタックはアド
レス値の小さい方に新たに要素を積み重ね、要素を取り
出す時はアドレス値の大きな方向にポインタを更新する
先入れ後出し型のメモリ構造である。また識別子xの格
納されるアドレスをaddr(x)と書き表す。
2. Code Generation by Intermediate Language Next, a procedure for generating an intermediate language will be described. For simplification of description, a part of the table explaining the function of the intermediate language is shown in FIG. However, TOP represents the uppermost address of the stack type data area taken in the work area of the intermediate language interpreter, and SP represents the pointer pointing to the stack type data area. The interpreter stack of this embodiment has a first-in, first-out type memory structure in which elements are newly stacked in the smaller address value and the pointer is updated in the direction of the larger address value when the element is taken out. The address where the identifier x is stored is written as addr (x).

【0043】中間言語インタープリタは、 LODV addr(x) と書かれた命令をアドレスaddr(x)に格納されている値
を取り出し、それを中間言語インタープリタの実行時の
スタックの最上段に格納せよという命令として解釈す
る。(以下の説明では記述の簡単のため、これを単に”
LODV x ”と書き表す。)また、 LODA addr(x) という命令はaddr(x)のアドレスの値そのものを評価
し、スタックの最上段に置く。
The intermediate language interpreter extracts the value stored at the address addr (x) from the instruction written as LODV addr (x), and stores it in the top level of the stack when the intermediate language interpreter is executed. Interpret as an instruction. (In the explanation below, for simplicity of explanation, this is simply
It is written as LODV x ”.) The instruction LODA addr (x) evaluates the address value of addr (x) itself and puts it on the top level of the stack.

【0044】LODN obj はobjが処理ブロックまたはモニタ型の共有資源であ
り、オブジェクトのブロック番号か資源番号の値を取り
出し、スタックの最上段に置く。
LODN obj is a processing block or monitor type shared resource, and the value of the block number or resource number of the object is taken out and placed at the top of the stack.

【0045】LOD n はインタープリタの使用するスタック中で現在のスタッ
クポインタから+nバイトの深さのアドレスを計算しその
アドレスにあるデータを取り出し、スタックの最上段に
複写する。
LOD n calculates an address with a depth of + n bytes from the current stack pointer in the stack used by the interpreter, extracts the data at that address, and copies it to the top of the stack.

【0046】ALOC n は現在のスタックポインタを番地の少ない方向に向かっ
てn進め(つまりnだけ減算し)、局所変数のための領域
を割り当てる。
ALOC n advances the current stack pointer in the direction of the smaller address by n (that is, subtracts n), and allocates an area for a local variable.

【0047】UALC n はALOC nと対をなす命令で、スタックポインタの値にn
を加えALOC n 命令で空けた領域を元に戻す。
UALC n is an instruction paired with ALOC n, and the value of the stack pointer is n.
Is added to restore the area vacated by the ALOC n command.

【0048】CALL addr(x) は識別子Xの先頭番地へ処理分岐し、命令語RETを検出し
た場合、先にCALL Xを実行した次の命令位置に復帰す
る。
The CALL addr (x) processing branches to the head address of the identifier X, and when the instruction word RET is detected, the CALL addr (x) is returned to the next instruction position where the CALL X was previously executed.

【0049】ADD はスタック最上段の値と、スタックの次の位置にある値
を加え、スタックポインタを1段スタックの減る方向に
進めてスタックの新たな最上段に加算結果を格納する。
ADD adds the value at the top of the stack and the value at the position next to the stack, advances the stack pointer in the direction of decreasing the stack by one stage, and stores the addition result at the new top of the stack.

【0050】中間言語はこのほか演算処理、条件分岐処
理等の命令語を持つ。いずれの命令もプロセッサのレジ
スタをアキュムレータとして使用せず、スタック上で演
算操作を行う形式とした。言うまでもなくこの中間言語
の仕様は並列実行する中間言語のインタープリタ間で統
一されてさえいれば他の仕様であっても構わない。ま
た、ここで使用するスタックは中間言語インタープリタ
の作業領域に取ったリニアなメモリ空間でプロセッサス
タックと異なる。
The intermediate language also has instruction words for arithmetic processing, conditional branch processing, and the like. All instructions do not use the processor register as an accumulator, but operate on the stack. Needless to say, the specifications of this intermediate language may be other specifications as long as they are unified among the intermediate language interpreters that execute in parallel. The stack used here is a linear memory space taken in the work area of the intermediate language interpreter, and is different from the processor stack.

【0051】図13は中間言語記述生成の処理の一部を
疑似的なプログラム言語によって記述した説明図であ
る。記述はブロック呼び出し時のコード生成手順130
1と、cobegin、coend文を検出した場合のコード生成手
順1303を示している。ブロック呼び出し時の処理に
は引数に対するコード生成手順1302が含まれる。こ
の他に算術演算の際の中間言語生成が必要であるが、従
来方法と同じであるため省略した。中間言語生成の処理
はある条件を検出したとき、その条件に適用されるルー
ルに従い中間言語発生する方法をとる。従って処理は条
件の検出とルール化されたコード生成に対し、構文解析
で取り出した識別子、値、番地等の評価を組み込む処理
を繰り返す操作である。
FIG. 13 is an explanatory diagram in which a part of the intermediate language description generation processing is described in a pseudo program language. The description is the code generation procedure 130 at the time of calling a block.
1 and the code generation procedure 1303 when the cobegin and coend statements are detected. The process at the time of calling a block includes a code generation procedure 1302 for arguments. In addition to this, it is necessary to generate an intermediate language at the time of arithmetic operation, but it is omitted because it is the same as the conventional method. The process of intermediate language generation is such that when a certain condition is detected, an intermediate language is generated according to the rule applied to the condition. Therefore, the process is an operation for repeating the process of incorporating the evaluation of the identifier, the value, the address, etc., taken out by the syntactic analysis, in addition to the condition detection and the rule-based code generation.

【0052】以下に例を挙げて上記中間言語を実行コー
ド中でどのように発生するかを説明する。
An example will be given below to explain how the above intermediate language occurs in the execution code.

【0053】2−1.並列実行時のコード生成手段10
8 中間言語による記述の生成を図12を用いて説明する。
ソースコード中に1200に示す手続きp1の定義が現わ
れた場合、構文解析手段104は図4の流れ図で示した
様に引数リスト解析を行う(S404)。第1引数12
01は識別子xで始まる。構文解析手段104はこれを
「値を渡す引数」であると判断する。この結果、参照型
=0が記録され、次に引数の型がintegerであることか
ら整数型の内部表現である1が”型名”として記録され
る。第2引数1202は予約語varで始まる。ゆえに構
文解析手段104はこれを「名前を渡す引数」と判断
し、”参照型=1”、”型名=1”が記録される。この
結果、実行時ブロック管理テーブル501の連鎖アドレ
ス507からの連鎖509によって引数リストが形成さ
れる。手続きp1に関する引数リストの内容を取り出すと
1203のように図示できる。
2-1. Code generation means 10 for parallel execution
8 Generation of description in intermediate language will be described with reference to FIG.
When the definition of the procedure p1 shown in 1200 appears in the source code, the syntax analysis unit 104 analyzes the argument list as shown in the flowchart of FIG. 4 (S404). First argument 12
01 starts with the identifier x. The syntactic analysis unit 104 determines that this is an “argument for passing a value”. As a result, reference type = 0 is recorded, and since the argument type is integer, 1 which is the internal representation of the integer type is recorded as the “type name”. The second argument 1202 begins with the reserved word var. Therefore, the syntax analysis unit 104 determines that this is an “argument for passing a name”, and “reference type = 1” and “type name = 1” are recorded. As a result, the argument list is formed by the chain 509 from the chain address 507 of the runtime block management table 501. If the content of the argument list regarding the procedure p1 is taken out, it can be illustrated as 1203.

【0054】ソースコード中に記述1204が現われた
場合、並列実行されない場合はコード生成手段117が
実施され、引数リスト1203の内容に従い、中間言語
記述1205が生成される。この記述の生成は引数リス
ト1203に現われる順にルール化された命令語を配置
する方法によったもので周知の方法である。
When the description 1204 appears in the source code and the code is not executed in parallel, the code generation means 117 is executed and the intermediate language description 1205 is generated according to the contents of the argument list 1203. The generation of this description is based on a method of arranging ruled command words in the order that they appear in the argument list 1203, and is a known method.

【0055】本実施例では並列実行する部分について、
従来方法と異なる中間言語記述の発生を行う。前提条件
として本実施例では並列実行が許される手続き、関数は
モニタ型変数以外の変数引数を認めない。これは変数引
数が代入を認める引数であることを考えれば当然であ
る。手続きp2を第1引数に値渡しの整数、第2引数に名
前渡しのモニタ型変数を持つ手続きとし、手続きp3を引
数を持たない手続きとする。ソースコード中に記述12
06が現われると本実施例の構文解析手段104は次の
手順の処理を実行する。
In this embodiment, the parts to be executed in parallel are
Generate an intermediate language description different from the conventional method. As a precondition, in the present embodiment, a procedure or function that allows parallel execution does not accept variable arguments other than monitor type variables. This is natural considering that the variable argument is an argument that allows assignment. Let procedure p2 be a procedure that has an integer passing by value as the first argument and a monitor type variable that is passing by name as the second argument, and procedure p3 be a procedure that has no arguments. Described in source code 12
When 06 appears, the syntax analysis unit 104 of this embodiment executes the processing of the next procedure.

【0056】手順1 並列実行検出手段106がcobegi
n文を検出し並列実行フラグを[真]とする(図4の流
れ図では処理S420)。
Step 1 The parallel execution detecting means 106 is cobegi
The n statements are detected and the parallel execution flag is set to [true] (process S420 in the flowchart of FIG. 4).

【0057】手順2 構文解析手段104の中で記述”
p2(a,b);”が解析され、ブロック呼び出しであると検出
される(S415)。
Procedure 2 Described in the syntax analysis means 104 "
p2 (a, b); "is analyzed and detected as a block call (S415).

【0058】手順3 並列実行フラグの内容が検査され
る。ここでは[真]であるためコード生成手段108が
実行される。
Step 3 The content of the parallel execution flag is checked. Since it is [true] here, the code generation unit 108 is executed.

【0059】手順4 コード生成手段108によってコ
ンパイラ102の作業領域の名前表が検索され、手続き
p2のブロック番号と引数リストが指定される。
Step 4 The code generation unit 108 searches the name table of the work area of the compiler 102, and
The block number of p2 and the argument list are specified.

【0060】手順5 引数リストの内容から、第1引数
が値渡し(参照型=0)であり、整数型であると知るこ
とができる。
Procedure 5 From the contents of the argument list, it can be known that the first argument is a pass by value (reference type = 0) and is an integer type.

【0061】手順6 コード生成手段108が生成ルー
ルに従い中間言語の述語を出力する。ここでのルールは
「値渡しの引数は、命令語{LODV x}形式を出力」であ
る。
Step 6 The code generation means 108 outputs the predicate of the intermediate language according to the generation rule. The rule here is "the argument passed by value outputs the instruction word {LODV x} format".

【0062】手順7 引数リストの内容から、第2引数
が名前渡しの変数で、モニタ型であることを知ることが
できる。
Procedure 7 It can be known from the contents of the argument list that the second argument is a variable passed by name and is of the monitor type.

【0063】手順8 ルールとして「モニタ型変数引数
は、命令語{LODN obj}形式を出力」が用いられ、中間
言語記述が出力される。
Step 8 As a rule, "monitor type variable argument outputs instruction word {LODN obj} format" is used, and an intermediate language description is output.

【0064】手順9 手続きp2を呼び出す中間言語記述
を発生する。ここでは並列実行時のルール「手続き呼び
出しは命令語{LODN obj、CALL addr(coexec)}形式を
出力」が適用される。
Procedure 9 Generate an intermediate language description that calls procedure p2. Here, the rule "procedure call outputs command word {LODN obj, CALL addr (coexec)} format" is applied at the time of parallel execution.

【0065】以下、同様に手続きp3についても処理が行
われる。さらに次の手順が処理される。
Thereafter, the process is similarly performed for the procedure p3. Further, the following procedure is processed.

【0066】手順10 並列実行検出手段106がcobe
nd文を検出し並列実行フラグを[偽]とする(図4の流
れ図では処理S421)。
Step 10 The parallel execution detecting means 106 is cobe
The nd statement is detected and the parallel execution flag is set to [false] (process S421 in the flowchart of FIG. 4).

【0067】手順11 並列実行終了時のルールに従
い、命令語{CALL addr(sync)}が出力される。
Procedure 11 The instruction word {CALL addr (sync)} is output according to the rule at the end of parallel execution.

【0068】以上の手順の結果として記述1207が出
力される。ここで手続きcoexecとsyncは中間言語インタ
ープリタの組み込み手続きである。これら組み込み手続
きの動作は”3−3.並列記述部分の実行時処理”の節
で説明する。
The description 1207 is output as a result of the above procedure. Here the procedures coexec and sync are built-in procedures of the intermediate language interpreter. The operation of these built-in procedures will be described in the section "3-3. Runtime processing of parallel description part".

【0069】2−2.共有資源アクセス手続きのコード
生成手段(S418)構文解析手段104において、共
有資源へのアクセスを伴う構文が検出された時、処理S
418が実行される。共有資源へのアクセスを伴う中間
言語の発生は疑似的なプログラム言語で書き表すと、図
13の1304のように示すことができる。モニタ型変
数へのアクセスを行うためには、モニタ型変数が非局所
変数として手続き中に指定される場合と、引数リスト中
に指定される場合がある。
2-2. Shared resource access procedure code generation means (S418) When the syntax analysis means 104 detects a syntax involving access to a shared resource, the process S
418 is executed. Occurrence of the intermediate language accompanied by access to the shared resource can be expressed as 1304 in FIG. 13 when written in a pseudo programming language. In order to access the monitor type variable, the monitor type variable may be specified as a non-local variable in the procedure or may be specified in the argument list.

【0070】前者のコード生成は単純である。コードが
実行された場合を図14aを使って示すと、中間言語イ
ンタープリタはスタック上にモニタ型手続きへの引数1
404を置き、さらに上段にモニタ型資源番号の値14
05を置いてappend、fetchの手続き呼び出しを行う。
これはコード生成側から見ると次の手順による中間言語
発生を行うことで実現できる。
The former code generation is simple. Using Fig. 14a to show the case where the code is executed, the intermediate language interpreter puts the argument 1 to the monitor type procedure on the stack.
404 is placed, and the value of the monitor type resource number is 14 at the top.
Place 05 and call the procedure of append and fetch.
This can be realized by generating an intermediate language according to the following procedure from the viewpoint of the code generation side.

【0071】手順1 構文解析手段104の処理S41
8が構文中に記述されたモニタ型の名前をキーとして共
有資源管理テーブル1001を検索し、資源番号を取り
出す。手順2 コード生成手段107が呼び出される。
Procedure 1 Process S41 of the syntax analysis means 104
8 searches the shared resource management table 1001 using the monitor type name described in the syntax as a key, and extracts the resource number. Procedure 2 The code generation means 107 is called.

【0072】手順3 プログラム1304で記述した手
順が実行される。直前までの目的コード生成によりモニ
タ型手続きに対する引数は、スタック最上段1404に
置かれる。これに続いて命令語{LODN obj}を出力す
る。
Procedure 3 The procedure described in the program 1304 is executed. The arguments for the monitor-type procedure due to the object code generation up to immediately before are placed in the topmost stage 1404 of the stack. Following this, the command word {LODN obj} is output.

【0073】手順4 構文解析結果がappend呼び出しか
fetch呼び出しか判断し、命令語{CALL addr(appendま
たはfetch)}を出力する。
Step 4 Whether the result of syntax analysis is an append call
It is judged whether it is a fetch call, and the command word {CALL addr (append or fetch)} is output.

【0074】一方、複数の共有資源が有り、同一手続き
を使用しながらもアクセスする資源を場合によって区別
したいという要求の下では、モニタ型引数が必要とな
る。この場合のコード生成はやや複雑である。モニタ型
引数を含むコードとはソースコード中に記述1208が
現われた場合等である。図14bの実行時のスタックの
使用の履歴1401を用いて説明する。
On the other hand, when there are a plurality of shared resources and it is desired to distinguish the resources to be accessed while using the same procedure, the monitor type argument is required. Code generation in this case is rather complicated. The code including the monitor type argument is, for example, the case where the description 1208 appears in the source code. This will be described with reference to the stack usage history 1401 in FIG. 14B.

【0075】手続き呼び出し時の引数は、スタック上に
積み重ねられる。この後、実際に手続きが呼び出される
と手続き内の局所的な変数を確保するため命令{ALOC
N}が実行され、局所領域1402が確保される。さら
に演算等の目的コードがスタックを消費し、現在の処理
結果がこの時点でのスタックの最上段1404に配置さ
れる。これがモニタ型手続きへの引数である。次にモニ
タ型の資源番号をスタックの最上段に置く。このために
命令語{LOD +d}が実行され、スタックの+dバイトの
深さの位置から矢印1403の様に値をスタックトップ
に複写する。続いてappend、fetchの手続き呼び出しが
実行される。これはコード生成側から見ると、次の手順
による中間言語発生を行うことで実現できる。
The arguments used when the procedure is called are stacked on the stack. After this, when the procedure is actually called, the command {ALOC
N} is executed and the local area 1402 is secured. Further, the target code for operations and the like consumes the stack, and the current processing result is placed in the top stage 1404 of the stack at this point. This is the argument to the monitor type procedure. Next, the monitor type resource number is placed at the top of the stack. For this purpose, the instruction word {LOD + d} is executed, and the value is copied onto the stack top from the position of the depth of + d bytes of the stack as indicated by arrow 1403. Then the append and fetch procedure calls are executed. From the code generation side, this can be realized by performing intermediate language generation according to the following procedure.

【0076】手順1 局所変数のための領域の展開を行
う。このために命令語{ALOC N}を出力する。
Procedure 1 A region for local variables is expanded. For this purpose, the command word {ALOC N} is output.

【0077】手順2 他の目的コード生成をする。Step 2 Another object code is generated.

【0078】手順3 モニタ型手続き呼び出しで検出し
たら引数リスト中のモニタ型変数がスタックに置かれた
位置までの深さを計算する。計算結果をdとして命令語
{LOD+d}を発生する。
Step 3 When detected by the monitor type procedure call, the depth to the position where the monitor type variable in the argument list is placed on the stack is calculated. The instruction word {LOD + d} is generated with the calculation result as d.

【0079】手順4 構文解析結果がappend呼び出しか
fetch呼び出しか判断し、命令語{CALL addr(appendま
たはfetch)}を出力する。
Step 4 Whether the result of syntax analysis is the call to append
It is judged whether it is a fetch call, and the command word {CALL addr (append or fetch)} is output.

【0080】手順5 もし必要ならさらに他の目的コー
ド生成をする。その後命令語{UALC N,RET}の順に出力
する。
Step 5 If necessary, another object code is generated. After that, the command words {UALC N, RET} are output in this order.

【0081】以上の処理手順の結果としてソースコード
の記述1208から中間言語による目的コード1209
が出力される。
As a result of the above processing procedure, the target code 1209 in the intermediate language is converted from the source code description 1208.
Is output.

【0082】2−3.オブジェクトファイル作成手段1
09の動作 上述した手順によって目的コード記述が得られる。オブ
ジェクトファイル生成手段はコード生成手段107、1
08、117により生成される目的コード記述を入力と
して中間言語オブジェクト110を出力する。目的コー
ド記述は、手続き呼び出しを手続きの名前(識別子)に
結び付けられたブロック番号で記述している。これは実
質的に名前と等価であるから上記説明では手続き名を用
いて説明した。しかし、実行時に必要なのは手続きの名
前ではなく、その手続きがプログラム中で先頭位置から
相対値で何バイトの位置に記録されているかである。こ
の情報は既に説明した実行時ブロック管理テーブル50
1のデータ構造505によって保持されている。そこで
オブジェクトファイル作成手段109は、目的コード記
述を読み取り、ブロック名の呼び出しを検出するとこの
ブロック名(正確にはブロック番号)をキーとして実行
時ブロック管理テーブル501を検索し、実行コードで
の相対位置505を取り出す。次にこの値によって中間
言語記述のブロック名を相対位置505の値に置き換え
る。
2-3. Object file creation means 1
Operation of 09 The target code description is obtained by the above-mentioned procedure. The object file generating means is code generating means 107, 1.
The intermediate language object 110 is output with the object code description generated by 08 and 117 as an input. The purpose code description describes a procedure call by a block number linked to a procedure name (identifier). Since this is substantially equivalent to the name, the procedure name is used in the above description. However, what is needed at the time of execution is not the name of the procedure, but the number of bytes in which the procedure is recorded relative to the start position in the program. This information is the run-time block management table 50 already described.
It is held by the data structure 505 of 1. Therefore, the object file creating means 109 reads the target code description, and when it detects that the block name is called, searches the runtime block management table 501 using this block name (correctly, block number) as a key, and the relative position in the execution code Take out 505. Next, the block name of the intermediate language description is replaced with the value of the relative position 505 by this value.

【0083】同様に共有資源であるモニタ型変数/手続
きが目的コード記述では資源番号で指定されている。オ
ブジェクトファイル作成手段109はこれについても資
源番号をキーとして共有資源管理テーブル1001を検
索し、実行コード上でのオフセットの値1005を取り
出し、目的コード記述の中で資源番号として記述されて
いる部分を置き換える。
Similarly, a monitor type variable / procedure which is a shared resource is designated by a resource number in the object code description. The object file creating means 109 also searches the shared resource management table 1001 by using the resource number as a key, extracts the offset value 1005 in the execution code, and extracts the part described as the resource number in the object code description. replace.

【0084】以上の処理に続き、オブジェクトファイル
作成手段109は実行時ブロック管理テーブル501と
共有資源管理テーブル1001の内容を目的コード記述
の後に書き加え、中間言語オブジェクト110としてフ
ァイル出力する。
Following the above processing, the object file creating means 109 adds the contents of the runtime block management table 501 and the shared resource management table 1001 after the object code description and outputs the file as an intermediate language object 110.

【0085】3.中間言語インタープリタ 3−1.中間言語インタープリタ間の通信 上述したコンパイラ処理系はターゲットシステム上で実
行される必要はない。他のコンピュータシステムをホス
ト装置として中間言語オブジェクト110を生成するこ
とが可能である。生成された中間言語オブジェクトはフ
ァイル出力され、ターゲットシステムには磁気ディスク
媒体、半導体ROM、通信手段等によって伝達される。
あるいはターゲットシステムで直接上述の構成のコンパ
イラを実行し、ソースコードから中間言語オブジェクト
110を生成することも可能である。
3. Intermediate language interpreter 3-1. Communication between Intermediate Language Interpreters The compiler system described above need not be run on the target system. The intermediate language object 110 can be generated by using another computer system as a host device. The generated intermediate language object is output as a file and transmitted to the target system by a magnetic disk medium, a semiconductor ROM, communication means, or the like.
Alternatively, the intermediate language object 110 can be generated from the source code by directly executing the compiler having the above configuration on the target system.

【0086】中間言語インタープリタは、この中間言語
オブジェクト110を入力として動作する処理系であ
る。中間言語インタープリタは与えられた中間言語を解
釈し実行できる事が必要条件であり、このためにどのよ
うな実現形態でも良い。もっとも単純な実施例は図16
の流れ図に示す様な無限ループを続ける装置を用いる方
法である。本実施例は図2で示すようにプロセッサ11
3が実行するオペレーティングシステム203の上にプ
ロセス111を起動し、このプロセス111によって図
16の流れ図の処理を実現した。また、プロセッサ11
4では割り込み処理等をサポートするカーネル205の
上にプロセス112を起動し、同様の処理の流れを実現
した。従ってここではプロセス111、112を中間言
語インタープリタ(以下IPRと略す)と呼ぶ。また説
明のため主プログラムの起動が行われたプロセッサをロ
ーカルプロセッサと呼ぶ。また、並列実行記述を検出し
た後、一部の処理ブロックが分散され並列実行を担うプ
ロセッサをリモートプロセッサと呼ぶ。同様に主プログ
ラムの起動が行われたコンピュータ上の中間言語インタ
ープリタをマスタIPRと呼び、リモートプロセッサ上
で実行される中間言語インタープリタをスレブIPRと
呼ぶ。
The intermediate language interpreter is a processing system that operates using the intermediate language object 110 as an input. The intermediate language interpreter is required to be able to interpret and execute a given intermediate language, and for this purpose, any implementation form is possible. The simplest example is shown in FIG.
It is a method using a device that continues an infinite loop as shown in the flowchart in FIG. In this embodiment, as shown in FIG.
3 starts the process 111 on the operating system 203, and the process 111 realizes the processing of the flowchart of FIG. In addition, the processor 11
In No. 4, the process 112 is activated on the kernel 205 that supports interrupt processing and the like, and a similar processing flow is realized. Therefore, here, the processes 111 and 112 are called an intermediate language interpreter (hereinafter abbreviated as IPR). For the sake of explanation, the processor in which the main program is started is called a local processor. A processor in which some processing blocks are distributed after the parallel execution description is detected and is responsible for parallel execution is called a remote processor. Similarly, the intermediate language interpreter on the computer in which the main program is activated is called the master IPR, and the intermediate language interpreter executed on the remote processor is called the slave IPR.

【0087】IPRとして動作するプロセスは、図17
のプロセス1702として表す構成をとる。プロセス1
702はプロセス管理のための情報が記録されるプロセ
スヘッダと、プロセッサプログラムカウンタ1703が
指し示す実行コード領域と、作業領域と、プロセッサス
タックポインタ1710が指し示すプロセッサスタック
1711からなる。実行コード領域には、インタープリ
タプログラムのオブジェクトコード1704と、組み込
み手続き群のオブジェクトコード1705が格納され
る。中間言語オブジェクトコードが配置されるコード領
域1706と、中間言語用のスタック領域1707は、
プロセスの作業領域に配置される。また同じ作業領域に
は中間言語用の命令ポインタ1708と、中間言語用の
スタックポインタ1709が置かれ、この他、実行時ブ
ロック管理テーブル501、共有資源管理テーブル10
01、実行時プロセッサ管理テーブル1701が置かれ
る。IPR111、112はFIFO207、208を使っ
て通信しあう事ができる。FIFO208にデータ書き込み
があるとシステムバス202を介してプロセッサ113
に割り込みが発生する。この割り込みはオペレーティン
グシステム203の処理ルーチンに取り出され、IPR
111に伝達される。またFIFO207にはシステムバス
202によりプロセッサ113のアドレス空間における
アドレス割り当てが行われている。このためプロセッサ
113がこのアドレスにデータ書き込みを行うとFIFO2
07はプロセッサ114への割り込み信号を発生するこ
とができる。プロセッサ114のカーネル205は割り
込みサービスルーチンによってFIFO207に書き込まれ
たデータを取り出し、IPR112に伝達する。
The process which operates as an IPR is shown in FIG.
The process 1702 of FIG. Process 1
702 includes a process header in which information for process management is recorded, an execution code area indicated by the processor program counter 1703, a work area, and a processor stack 1711 indicated by a processor stack pointer 1710. An object code 1704 of an interpreter program and an object code 1705 of a built-in procedure group are stored in the execution code area. The code area 1706 in which the intermediate language object code is arranged and the stack area 1707 for the intermediate language are
Placed in the work area of the process. An instruction pointer 1708 for the intermediate language and a stack pointer 1709 for the intermediate language are placed in the same work area. In addition to this, the runtime block management table 501 and the shared resource management table 10 are also provided.
01, a runtime processor management table 1701 is placed. The IPRs 111 and 112 can communicate with each other using the FIFOs 207 and 208. When data is written in the FIFO 208, the processor 113 is transmitted via the system bus 202.
Is interrupted. This interrupt is fetched by the processing routine of the operating system 203, and the IPR
It is transmitted to 111. Further, the system bus 202 assigns addresses to the FIFO 207 in the address space of the processor 113. Therefore, when the processor 113 writes data to this address, the FIFO2
07 can generate an interrupt signal to the processor 114. The kernel 205 of the processor 114 takes out the data written in the FIFO 207 by the interrupt service routine and transfers it to the IPR 112.

【0088】IPR111、112はこのFIFO207、
208を用いて通信しあうプロセスと見なすことができ
る。本処理系の設計上、パーソナルコンピュータ200
に対し付加されるハードウェアは複数個許容できる。こ
のため、マスタIPR(この場合はIPR111)とス
レブIPRの通信は1対1の通信に限定されない。そこ
で、本実施例ではIPRとして動作するプロセス間の通
信に図15に示す1501、1505または1510の
形式のデータ構造を持つデータ列を用いる。このデータ
構造において、プロセッサ番号1503はシステムで一
意に決定する各プロセッサの番号であり、プロセス番号
1504は各プロセッサがプロセス生成時にプロセスに
割り当てた番号である。従って、複数のプロセスが存在
してもプロセッサ番号1503とプロセス番号1504
の両者を指定する事であるプロセスを特定できる。一
方、コマンド1502として使用されるのは{コネクト
・ロック}、{ロード}、{実行}、{リリース}、
{フェッチ}、{アペンド}の6つである。通信150
1、1505を受信したIPRは応答として1510の
データ構造からなるメッセージを返す。ここで状態コー
ド1511として{ビジー}、{レディ}、{アクセプ
ト}、{ダーン}、{フェイル}の5つが使用される。
The IPRs 111 and 112 are the FIFOs 207 and
It can be considered as a process that communicates using 208. Due to the design of this processing system, the personal computer 200
Multiple pieces of hardware can be added to the above. Therefore, the communication between the master IPR (IPR 111 in this case) and the slave IPR is not limited to one-to-one communication. Therefore, in this embodiment, a data string having a data structure of the format 1501, 1505 or 1510 shown in FIG. 15 is used for communication between processes operating as IPR. In this data structure, the processor number 1503 is the number of each processor uniquely determined by the system, and the process number 1504 is the number assigned to each process by each processor when the process is created. Therefore, even if a plurality of processes exist, the processor number 1503 and the process number 1504
It is possible to specify the process which is to specify both. On the other hand, what is used as the command 1502 is {connect lock}, {load}, {execute}, {release},
These are {fetch} and {append}. Communication 150
The IPR that receives 1, 1505 returns a message having a data structure of 1510 as a response. Here, five status codes 1511 are used: {busy}, {ready}, {accept}, {dern}, and {fail}.

【0089】以下図16の流れ図に従ってIPRの動作
を説明する。IPRはコマンドを受信すると(S160
1)その内容が{コネクト・ロック}か判断する(S1
602)。{コネクト・ロック}であればIPR内部の
状態コードを{ビジー}とし(S1603)コネクト処
理S1604を実行する。コネクト処理S1604は受
信したデータ列からプロセッサ番号1503とプロセス
番号1504を取り出し、内部作業領域に記録し、{コ
ネクト・ロック}処理を発生したプロセスに対し状態コ
ード{アクセプト}を返す。これ以降はコマンドを受け
取った後、これを送信したプロセスがコネクト処理の対
象となったプロセスであるか判断し(S1605)、No
であれば状態コード{ビジー}を返す(S1606)。
コネクト処理の対象となったプロセスからのコマンドを
受け取った場合は、{ロード}、{リリース}、{実
行}のいずれかのコマンドを実行する。{アペンド}、
{フェッチ}コマンドは、コネクトされたプロセス以外
のプロセスに対しても応答される。
The operation of the IPR will be described below with reference to the flowchart of FIG. When the IPR receives the command (S160
1) Judge whether the content is {connect lock} (S1)
602). If {connect lock}, the status code inside the IPR is set to {busy} (S1603), and the connect process S1604 is executed. The connect processing S1604 extracts the processor number 1503 and the process number 1504 from the received data string, records them in the internal work area, and returns a status code {accept} to the process that has generated {connect lock} processing. After this, after receiving the command, it is judged whether the process that transmitted the command is the process targeted for the connect process (S1605), and No
If so, the status code {busy} is returned (S1606).
When a command is received from the process that is the target of the connect process, one of {load}, {release}, and {execute} commands is executed. {append},
The {fetch} command is also responded to for processes other than the connected process.

【0090】コマンドが{リリース}の場合は、状態コ
ードを{レディ}とし(S1607)、コネクト処理の
ため記録したプロセッサ番号、プロセス番号を廃棄し、
コマンド読み取り処理S1601に戻る。
If the command is {release}, the status code is set to {ready} (S1607), and the processor number and process number recorded for the connect process are discarded.
The process returns to the command reading process S1601.

【0091】コマンドが{ロード}であればロード処理
S1608を実行する。ロード処理S1608はスレブ
IPRの作業領域に中間言語記述されたオブジェクトコ
ード1507を読み込み、次にスタック初期化データ1
508を読み込み、このデータの指示に従いスタックに
初期状態のデータを格納しスタックポインタを設定す
る。続いて、テーブル初期化データ1509を読み込
み、実行時ブロック管理テーブル501、共有資源管理
テーブル1001の内容を初期設定する。
If the command is {load}, load processing S1608 is executed. Load processing S1608 reads the object code 1507 described in the intermediate language in the work area of the slave IPR, and then the stack initialization data 1
508 is read, the data in the initial state is stored in the stack according to the instruction of this data, and the stack pointer is set. Then, the table initialization data 1509 is read and the contents of the runtime block management table 501 and the shared resource management table 1001 are initialized.

【0092】コマンドが{実行}の時は、実行状態に入
り、コード領域1706の命令ポインタの指定する命令
から、逐次実行処理(S1609)に入る。逐次実行処
理S1609は命令語処理群1610を実行するほか、
処理内容に応じて組み込み手続き処理群1611の処理
内容を実行する。また、逐次実行の処理ループにある場
合、命令実行後にポーリング処理S1612を実行す
る。これはsync命令語実行後のスレブIPRの処理終了
を確認する場合及び他のIPRからの要求に{ビジー}
応答する場合に、それぞれ通信ポートからの待ち行列を
検査する必要から行なわれる。
When the command is {execute}, the execution state is entered, and the sequential execution process (S1609) is started from the instruction designated by the instruction pointer of the code area 1706. Sequential execution processing S1609 executes the instruction word processing group 1610,
The processing contents of the built-in procedure processing group 1611 are executed according to the processing contents. In the case of the sequential execution processing loop, the polling processing S1612 is executed after the instruction execution. This is {busy} when confirming the end of processing of slave IPR after execution of sync command and request from other IPR.
When responding, it is necessary to check the queue from each communication port.

【0093】以上がIPRの動作概要である。The above is the outline of the operation of the IPR.

【0094】3−2.中間言語インタープリタの動作状
態 本実施例のIPRには初期起動という動作状態が有る。
この動作状態は、中間言語オブジェクト110がオペレ
ーティグシステム203の管理下で実行された直後にオ
ペレーティグシステム203により作り出される動作状
態である。オペレーティングシステム203は、中間言
語オブジェクト110のファイル属性からこれがIPR
111によって実行管理されるファイルであるという判
断をする。オペレーティングシステム203は、この判
断の結果、IPR111を起動する。(この方法と別
に、コマンドシェルと呼ばれるオペレーティングシステ
ム用命令の通訳系を持つシステムではコマンドシェル用
のテキストとして類似の操作を記述できる)。
3-2. Operating State of Intermediate Language Interpreter The IPR of this embodiment has an operating state of initial startup.
This operating state is an operating state created by the operating system 203 immediately after the intermediate language object 110 is executed under the control of the operating system 203. The operating system 203 determines that this is an IPR from the file attributes of the intermediate language object 110.
It is judged that the file is a file managed and executed by 111. As a result of this determination, the operating system 203 activates the IPR 111. (Apart from this method, a system with an interpreter system for operating systems called command shells can describe similar operations as text for command shells).

【0095】一方、IPRはその起動時にオペレーティ
ングシステムから渡される引数を取得できる。上記操作
によりこの引数として中間言語オブジェクトファイル1
10のファイル参照番号(ファイル管理情報)が渡され
る。このときIPRは中間言語オブジェクト110をそ
の作業領域にロードし実行する。ここで起動されたIP
R111が以下マスタIPRとなり、スレブIPRであ
るIPR112に対し必要に応じてコマンドを送り処理
の一部を分担させる。
On the other hand, the IPR can acquire the arguments passed from the operating system when it is started. By the above operation, the intermediate language object file 1 as this argument
10 file reference numbers (file management information) are passed. At this time, the IPR loads the intermediate language object 110 into its work area and executes it. IP started here
The R111 becomes the master IPR below, and sends a command to the IPR 112, which is a slave IPR, as necessary to share a part of the processing.

【0096】初期起動の状態にあるIPRは状態コード
が{ビジー}である。従って、他のIPRが処理の並列
実行の処理分担を要求し、{コネクト・ロック}メッセ
ージをこのIPRに発行しても要求が受けつけられな
い。これに対し初期起動の以外の動作状態であるIPR
は常にスレブIPRとして動作することができる。
The IPR in the initial startup state has a status code of {busy}. Therefore, the request cannot be accepted even if another IPR requests the sharing of processing in parallel and issues a {connect lock} message to this IPR. On the other hand, an IPR that is in an operating state other than initial startup
Can always act as a slave IPR.

【0097】3−3.並列記述部分の実行時処理 次に図18を用いて並列実行時のIPRの動作を説明す
る。
3-3. Runtime Processing of Parallel Description Part Next, the operation of IPR during parallel execution will be described with reference to FIG.

【0098】マスタIPRの命令語解析処理1801が
中間言語オブジェクト110の記述中に命令語{CALL a
ddr(coexec)}を検出した場合、cobegin文処理1802
が呼び出される。cobegin文処理1802はシステムバ
ス202を用いて全てのプロセッサに{コネクト・ロッ
ク}コマンドを送る。応答が{ビジー}であるか、また
は一定時間を経ても応答がない場合は、それらプロセッ
サが並列実行を分担できない状態に有ることが判断でき
る。一方で、プロセッサ資源の余裕度によっては複数の
IPRを実行中のプロセッサが存在し、複数の{アクセ
プト}メッセージを受信できる場合が有る。そこでマス
タIPRはその作業領域に実行時プロセス管理テーブル
1701を作成する。実行時プロセス管理テーブル17
01の内容は、{アクセプト}メッセージを受け取るこ
とのできたプロセッサ番号及びプロセス番号と、このプ
ロセスをスレブIPRと見なして分散した(あるいはす
る予定の)処理ブロックのブロック番号と、各プロセス
に対する要求待ち行列1807へのポインタである。
The instruction word analysis processing 1801 of the master IPR is instructing the instruction word {CALL a during the description of the intermediate language object 110.
When ddr (coexec)} is detected, cobegin statement processing 1802
Is called. The cobegin statement process 1802 sends a {connect lock} command to all processors using the system bus 202. If the response is {busy}, or if there is no response after a certain period of time, it can be determined that those processors cannot share the parallel execution. On the other hand, depending on the margin of processor resources, there may be a processor executing a plurality of IPRs and a plurality of {accept} messages may be received. Therefore, the master IPR creates a runtime process management table 1701 in the work area. Runtime process management table 17
The contents of 01 are the processor number and the process number that were able to receive the {Accept} message, the block number of the processing block distributed (or scheduled) to be regarded as the slave IPR, and the request queue for each process. It is a pointer to 1807.

【0099】並列実行の対象となるブロックの数が、獲
得したスレブIPRのプロセスの数より小さい場合、マ
スタIPRは不必要なスレブIPRに{リリース}メッ
セージを送りコネクトを開放する。これとは反対に並列
実行すべき処理ブロック数が、獲得したスレブIPRよ
り多い場合は、獲得したスレブIPRに対し待ち行列1
807を作り、この待ち行列の要素に並列実行したい処
理ブロックを追加する。この処理はcobegin文処理18
02が呼び出したスケジューラ1803によって処理さ
れる。本実施例のスケジュールアルゴリズムは、スケジ
ューラが検出した新たな要求は、最も短い長さの待ち行
列1807に配置するという単純なアルゴリズムであ
る。
When the number of blocks to be executed in parallel is smaller than the number of acquired slave IPR processes, the master IPR sends a {release} message to unnecessary slave IPRs to release the connection. On the contrary, if the number of processing blocks to be executed in parallel is larger than the acquired slave IPR, the queue 1 for the acquired slave IPR.
807 is created, and the processing blocks to be executed in parallel are added to the elements of this queue. This processing is cobegin statement processing 18
02 is processed by the scheduler 1803. The scheduling algorithm of this embodiment is a simple algorithm in which new requests detected by the scheduler are placed in the shortest queue 1807.

【0100】一方処理ブロックの一部はマスタIPRに
おいても処理可能である。このためスケジューラは述語
展開処理1806を実行する。述語展開処理1806
は、中間言語記述の LODN foo CALL addr(coexec) という述語の並びを取り出し、 NOP CALL addr(foo) という述語の並びに置き換える。ここでfooはある手続
きまたは関数の相対番地であり、命令語NOPは{作用し
ない}命令語を表す。述語展開処理1806により書き
換えられた命令語記述は、再び命令語解析処理1801
に返され、そこで評価される。このため、命令語解析処
理1801および述語展開処理1806は、中間言語の
命令ポインタ1708を処理内容に従い書き換える。
On the other hand, some of the processing blocks can be processed by the master IPR. Therefore, the scheduler executes the predicate expansion process 1806. Predicate expansion processing 1806
Retrieves the sequence of predicates LODN foo CALL addr (coexec) in the intermediate language description and replaces the sequence of predicates NOP CALL addr (foo). Here, foo is a relative address of a certain procedure or function, and the command word NOP represents a command word that does not work. The instruction word description rewritten by the predicate expansion processing 1806 is again the instruction word analysis processing 1801.
Returned to and evaluated there. Therefore, the instruction word analysis processing 1801 and the predicate expansion processing 1806 rewrite the instruction pointer 1708 in the intermediate language according to the processing content.

【0101】以上の処理において、並列実行の対象とな
る複数の処理ブロックをどの様な順序でマスタIPRと
スレブIPRに分配するかはスケジューラ1803で決
定される。本実施例のスケジューラ1803は後述する
特殊な命令を使用しないかぎり、少なくとも一つの処理
ブロックはマスタIPRへの割り当てを行なう。
In the above processing, the scheduler 1803 determines in what order the plurality of processing blocks to be executed in parallel are distributed to the master IPR and the slave IPR. The scheduler 1803 of this embodiment allocates at least one processing block to the master IPR unless a special instruction described later is used.

【0102】マスタIPRは、スレブIPR1808に
対する待ち行列1807に前述した{ロード}メッセー
ジのデータ構造に従うデータ列と、{実行}メッセージ
をエンキューする。この処理要求を実行するスレブIP
Rは処理終了後データ構造1510からなるメッセージ
を返す。この時の状態コードは正常終了であれば{ダー
ン}が返される。これに対し、何らかの実行時エラーを
検出した場合は状態コード{フェイル}が返される。エ
ラー処理に関して目的プログラムのソースコードが何ら
かの対応をする必要が有るが、これは従来のプログラミ
ングと同じである。状態コード{ダーン}によって正常
終了した処理は、もし処理ブロックが関数であれば関数
の値をデータ1512によって返す。
The master IPR enqueues the data string according to the data structure of the {load} message described above in the queue 1807 for the slave IPR 1808 and the {execute} message. Slave IP that executes this processing request
After the processing is completed, R returns a message composed of the data structure 1510. If the status code at this time is normal termination, {Dern} is returned. On the other hand, if any run-time error is detected, the status code {Fail} is returned. The source code of the target program needs to do something about error handling, which is the same as conventional programming. If the processing block is a function, the processing normally terminated by the status code {Dern} returns the value of the function as data 1512.

【0103】並列実行を開始したマスタIPRは、coen
d文によって並列実行の終了を待つ。既に説明した様にc
oend文に対し生成される中間言語記述は{CALL addr(sy
nc)}である。命令語解析処理1801は、この記述を
検出するとsync文処理1805を呼び出す。sync文処理
1805はスレブIPRからの{ダーン}メッセージを
待ち、実行時プロセッサ管理テーブル1701のプロセ
ッサ番号、プロセス番号との一致を確認し処理終了を記
録する。全ての処理ブロックの処理終了が確認されると
sync文処理1805は終了する。既に述べた様にマスタ
IPRは、スケジューラ1803の制御に従い、少なく
とも一つの処理ブロックを実行するのでIPR自体が逐
次処理系であることからsync文処理1805が実行され
るのはマスタIPRの分担した処理ブロックの実行が終
了した後である。
The master IPR that started parallel execution is coen
Wait for parallel execution to end with d statement. C as already explained
The intermediate language description generated for the oend statement is {CALL addr (sy
nc)}. Upon detecting this description, the command word analysis processing 1801 calls the sync statement processing 1805. The sync statement process 1805 waits for a {darn} message from the slave IPR, confirms the match with the processor number and process number in the runtime processor management table 1701, and records the end of the process. When the processing of all processing blocks is confirmed
The sync statement processing 1805 ends. As described above, the master IPR executes at least one processing block under the control of the scheduler 1803. Therefore, since the IPR itself is a sequential processing system, the sync statement processing 1805 is executed by the master IPR. After the block has finished executing.

【0104】3−4.共有資源アクセスの実行時処理 次に、図19の流れ図を用いてモニタ型手続き呼び出し
によって共有変数へのアクセスが発生した場合の処理に
ついて説明する。命令語解析処理1801は、手続きap
pendまたはfetchの呼び出しを検出すると、IPRスタ
ックの最上段からモニタ型の資源番号を取り出す(S1
901)。この資源番号1002をキーとして共有資源
管理テーブル1001を検索する(S1902)。検索
結果として、その資源が宣言されたブロック番号100
4が取得できる(S1903)。このブロック番号を自
ブロックの番号と比較し(S1904)、一致する場合
は通常の手続き呼び出しと同じ処理を行なう(S190
7)。それ以外であれば、IPRは自プロセスが実行中
のブロック番号から実行時ブロック管理テーブル501
の要素502にアクセスし、下位ブロックへの連鎖アド
レス504からの連鎖508をたどる(S1905)。
この処理によってブロック番号の一致するブロックが見
つかれば(S1906)手続き呼び出し処理を行なう
(S1907)。連鎖508の終了まで検査しても一致
するブロック番号を検出できない時は、実行時ブロック
管理表によってモニタ型資源を保持するプロセッサ番
号、プロセス番号を取り出し、この2つの番号で指定さ
れるIPRにメッセージ{フェッチ}あるいは{アペン
ド}を送り(S1908)処理結果のデータ列を受け取
るまで待機する(S1909)。
3-4. Shared Resource Access Runtime Processing Next, the processing when a shared variable is accessed by a monitor type procedure call will be described using the flowchart of FIG. The command word analysis processing 1801 uses the procedure ap.
When a call to pend or fetch is detected, a monitor type resource number is fetched from the top level of the IPR stack (S1
901). The shared resource management table 1001 is searched using this resource number 1002 as a key (S1902). As the search result, the block number 100 in which the resource is declared
4 can be acquired (S1903). This block number is compared with the own block number (S1904), and if they match, the same processing as a normal procedure call is performed (S190).
7). Otherwise, the IPR starts from the block number being executed by its own process, to the runtime block management table 501.
The element 502 is accessed, and the chain 508 from the chain address 504 to the lower block is traced (S1905).
If a block with the same block number is found by this processing (S1906), procedure calling processing is performed (S1907). If a matching block number cannot be detected even after checking up to the end of the chain 508, the processor number and process number holding the monitor type resource are fetched from the runtime block management table, and the message is sent to the IPR specified by these two numbers. It sends {fetch} or {append} (S1908) and waits until the data string of the processing result is received (S1909).

【0105】一方、このメッセージを受け取ったIPR
側では図16に示す様にフェッチ処理S1613または
アペンド処理S1614を行なう。この処理はメッセー
ジのデータ部分からモニタ型共有資源の資源番号を取り
出し、この資源番号に従い共有資源管理テーブル100
1の登録を検査する。次に該当する要素を取り出し、そ
のデータ構造1005からモニタ型手続きの実行コード
上での番地計算を行ない、実際の処理を呼び出し、処理
結果を状態コード{ダーン}と共に、要求側IPRに返
す。
On the other hand, the IPR that received this message
On the side, as shown in FIG. 16, fetch processing S1613 or append processing S1614 is performed. In this processing, the resource number of the monitor-type shared resource is extracted from the data part of the message, and the shared resource management table 100 according to this resource number.
Check 1 registration. Next, the corresponding element is taken out, the address is calculated on the execution code of the monitor type procedure from the data structure 1005, the actual processing is called, and the processing result is returned to the requesting IPR together with the status code {Dern}.

【0106】ここで、他のプロセッサにあるモニタ型変
数にアクセスを行なった場合は、メッセージを受信し応
答を返すIPRの処理が逐次処理であるため、完全に排
他制御される。また、他のプロセッサのIPRから応答
が有るまで要求側のIPRは待機するため、要求側での
追い越し処理の発生も防ぐことができる。同一プロセッ
サ上で複数のプロセスが生成され、複数のIPRを実行
中の場合もモニタ型では共有資源に対するアクセスを専
用の処理に限定しており、この処理の実行がIPRによ
って逐次的に行なわれるため排他制御できる。
Here, when a monitor type variable in another processor is accessed, the IPR process for receiving a message and returning a response is a sequential process, and therefore is completely exclusive controlled. Further, since the IPR on the request side waits until there is a response from the IPR of another processor, it is possible to prevent the occurrence of overtaking processing on the request side. Even when a plurality of processes are created on the same processor and a plurality of IPRs are being executed, access to shared resources is limited to a dedicated process in the monitor type, and this process is executed sequentially by the IPR. Exclusive control is possible.

【0107】一方、共有資源の中に実際のデータ列が書
き込まれないうちに値を読み取ろうとしても処理内容は
無効なものとなる。また、バッファが全て満たされた状
態に更に書き込みを行なうと、先行するデータを(多重
書き込みにより)失ってしまう。これらの不都合を防ぐ
には同期機構が必要であるが、モニタ型内部の手続きと
して記述した待ち行列に対するwait及びsignal処理によ
って同期は維持される。
On the other hand, if the value is read before the actual data string is written in the shared resource, the processing content becomes invalid. Further, if data is further written while the buffer is all filled, the preceding data is lost (due to multiple writing). A synchronization mechanism is required to prevent these inconveniences, but the synchronization is maintained by the wait and signal processing for the queue described as a monitor-type internal procedure.

【0108】以上の処理によって本実施例では、排他制
御を行ないながら複数個のIPRの実行が可能となる。
With the above processing, in this embodiment, a plurality of IPRs can be executed while performing exclusive control.

【0109】3−5.実行プロセッサを明示する手続き 以上に説明した処理系は実際にリモートプロセッサに配
置される処理ブロックも、またローカルプロセッサで実
行を継続する処理ブロックも、中間言語記述の上では同
様な命令語を使用する処理系であった。このため、中間
言語記述の中でプロセッサを特定する記述や、処理ブロ
ックをリモートプロセッサの局所メモリに転送するため
の記述を明示的書く必要が無い処理系の実現方法を説明
した。なぜなら、本発明がハードウェア変更により書き
換えの必要の無い処理系の実現を目的としたからであ
る。
3-5. Procedures that specify the execution processor In the processing system described above, the processing blocks that are actually placed in the remote processor and the processing blocks that continue execution in the local processor use similar instruction words in the intermediate language description. It was a processing system. Therefore, the implementation method of the processing system that does not need to explicitly write the description that specifies the processor in the intermediate language description and the description that transfers the processing block to the local memory of the remote processor has been described. This is because the present invention aims to realize a processing system that does not need to be rewritten by changing hardware.

【0110】一方、上記とは逆に専用プロセッサを付加
した場合(特に信号処理、画像処理等の特定分野では重
要であるが)、処理分散するプロセッサを明示的に特定
したい場合がある。このために本実施例の処理系は組み
込み関数として function processor(slot:integer) : boolean; を用意した。これは、システムバスの拡張基板用のスロ
ットの番号を引数slot(整数型)で指定すると、その拡
張基板用のスロットにプロセッサ基板が実装され、中間
言語インタープリタが実行されているとき、論理[真]
を返す関数である。この関数が呼び出されると、マスタ
IPRは、プロセッサ番号を指定して{コネクト・ロッ
ク}メッセージを送る。この応答として{アクセプト}
メッセージの応答があれば、関数の戻り値は{TRUE}が
代入される。また、一定時間以上応答が無い場合、また
は応答が{ビジー}である場合は関数の戻り値は{FALS
E}である。
On the other hand, contrary to the above, when a dedicated processor is added (especially important in specific fields such as signal processing and image processing), there are cases where it is desired to explicitly specify the processors to be distributed. For this reason, the processing system of the present embodiment prepared function processor (slot: integer): boolean; as a built-in function. This is because if the number of the slot for the expansion board of the system bus is specified by the argument slot (integer type), when the processor board is mounted in the slot for the expansion board and the intermediate language interpreter is running, the logic [true ]
Is a function that returns. When this function is called, the master IPR sends a {Connect Lock} message specifying the processor number. This response is {Accept}
If there is a message response, {TRUE} is substituted for the return value of the function. Also, if there is no response for a certain period of time, or if the response is {busy}, the return value of the function is {FALS
E}.

【0111】さらに本実施例の処理系は、組み込み手続
きとして procedure distribute(slot:integer; procedure foo); を用意した。これは拡張基板用のスロットの番号を引数
slot(整数型)で指定し、かつそのスロットのハードウ
ェア上のプロセッサに手続き引数fooで指定される手続
きを配置し実行する手続きである。第2引数はfunction
foo:tt;等の様に指定しても構わない。ここでfooは関
数名、ttはデータ型名である。この手続きの実現のた
め、マスタIPRはプロセッサ番号を指定して{コネク
ト・ロック}メッセージを送り、この応答として{アク
セプト}メッセージの応答があれば続けて{ロード}及
び{実行}メッセージを送る。この処理によって上記手
続き中に手続き引数あるいは関数引数で指定された処理
ブロックの実行を特定のハードウェアに割り当て処理す
る。上記の2つの組み込み処理を用い、プロセッサを特
定した実行を記述することができる。次はその記述の一
例である。引数a、bを持つ手続きPROC1と、引数aを
持つ手続きPROC2を並列実行する場合であり、システム
バスのスロット4のプロセッサにPROC1を配置したいと
すると次のように書ける。
Further, in the processing system of this embodiment, procedure distribute (slot: integer; procedure foo); is prepared as a built-in procedure. This is the argument of the slot number for the expansion board
It is a procedure that is specified by slot (integer type) and that the procedure specified by the procedure argument foo is placed and executed in the processor on the hardware of that slot. The second argument is function
You can specify it as foo: tt ;. Where foo is the function name and tt is the data type name. To realize this procedure, the master IPR sends a {connect lock} message specifying the processor number, and if there is a response of an {accept} message in response to this, sends a {load} and {execute} message successively. By this processing, the execution of the processing block specified by the procedure argument or the function argument in the above procedure is assigned to specific hardware. The above two built-in processes can be used to describe processor-specific execution. The following is an example of the description. This is a case where the procedure PROC1 having the arguments a and b and the procedure PROC2 having the argument a are executed in parallel, and it is possible to write PROC1 in the processor of the slot 4 of the system bus as follows.

【0112】cobegin if processor(4) then dist
ibute(4,PROC1(a,b)) else PROC1(a,b); PROC2(a); coend; この例では、拡張スロット4にプロセッサ基板が無い場
合は手続きPROC1、PROC2は通常のシーケンスで並
列実行される。
Cobegin if processor (4) then dist
ibute (4, PROC1 (a, b)) else PROC1 (a, b); PROC2 (a); coend; In this example, if the expansion slot 4 does not have a processor board, the procedures PROC1 and PROC2 are parallel in a normal sequence. To be executed.

【0113】4.説明の補足 4−1.コンパイラ、インタープリタの使用する表 図20を用いて本実施例の説明の中で示した各種表構造
について、その役割をまとめる。
4. Supplementary explanation 4-1. Tables Used by Compiler and Interpreter The roles of various table structures shown in the description of the present embodiment will be summarized with reference to FIG.

【0114】ブロック番号管理テーブル801はコンパ
イラ102の作業領域に生成され、コンパイル処理が終
了した時点で廃棄される。この表にはコンパイラ102
の構文解析手段104において、ブロック番号、ブロッ
ク内変数表のポインタ等が記録される。またこの表構造
を参照して実行時ブロック管理テーブル501のブロッ
ク間の連鎖生成が行なわれる。
The block number management table 801 is generated in the work area of the compiler 102, and is discarded when the compilation processing is completed. This table shows the compiler 102
In the syntactic analysis means 104, the block number, the pointer of the in-block variable table, etc. are recorded. Further, with reference to this table structure, chain generation between blocks of the runtime block management table 501 is performed.

【0115】実行時ブロック管理テーブル501は、コ
ンパイラ102の作業領域に生成された後、オブジェク
トファイル作成手段109によって中間言語オブジェク
ト110のファイルに出力される。さらに、中間言語オ
ブジェクト110が中間言語インタープリタにロードさ
れた後、中間言語インタープリタ内でも参照される。こ
の表にはコンパイラ102の構文解析手段104により
ブロック呼び出しの際の引数リストの解析結果、ブロッ
ク間の従属関係が記録される。
The runtime block management table 501 is generated in the work area of the compiler 102 and then output to the file of the intermediate language object 110 by the object file creating means 109. Further, after the intermediate language object 110 is loaded into the intermediate language interpreter, it is also referred to in the intermediate language interpreter. In this table, the parsing result of the argument list when the block is called by the syntax analysis unit 104 of the compiler 102 and the dependency relation between the blocks are recorded.

【0116】共有資源管理テーブル1001はコンパイ
ラ102の作業領域に作成された後、オブジェクトファ
イル作成手段109によって中間言語オブジェクト11
0のファイルに出力される。この表は中間言語オブジェ
クト110が中間言語インタープリタにロードされた
後、中間言語インタープリタ内でも参照される。中間言
語インタープリタ中ではモニタ型手続き処理にあたり参
照される。
After the shared resource management table 1001 is created in the work area of the compiler 102, the intermediate language object 11 is created by the object file creating means 109.
It is output to the 0 file. This table is also referenced in the intermediate language interpreter after the intermediate language object 110 has been loaded into the intermediate language interpreter. In the intermediate language interpreter, it is referred to for monitor-type procedure processing.

【0117】実行時プロセッサ管理テーブル1701
は、インタープリタ作業領域に実行時に生成される。こ
の表は並列実行にあたり使用可能な({コネクト・ロッ
ク}できた)プロセッサの管理および、並列実行した結
果のスケジュール管理に使用される。
Runtime processor management table 1701
Is generated at run time in the interpreter work area. This table is used for managing the processors that can be used for parallel execution ({connect lock} has been created) and for managing the schedule of the results of parallel execution.

【0118】上記表構造に加え、本実施例ではコンパイ
ラ102において変数名、ブロック名等の識別子の管理
に名前表およびブロック内変数表を用いた。
In addition to the above table structure, in the present embodiment, the compiler 102 uses a name table and an in-block variable table to manage identifiers such as variable names and block names.

【0119】4−2.本実施例の展開 4−2−1.排他制御と共有資源管理 上記の説明において、共有資源への排他制御、同期機構
としてモニタ型を挙げて説明した。これは本実施例にお
いて実現容易なものとして使用した。しかし、本実施例
と同一の構成において直ちに周知のセマフォに対しても
適用できる。このためには、どのブロックの管理下に有
るセマフォにアクセスするかを本実施例の実行時ブロッ
ク管理テーブル501と同様のデータ構造で記録し、自
プロセッサ外のセマフォに関しては通信を伴ってリモー
トにアクセスする組み込み手続きを用意するだけで良
い。
4-2. Development of the present example 4-2-1. Exclusive control and shared resource management In the above description, the monitor type has been described as the exclusive control for the shared resource and the synchronization mechanism. This is used as an easy implementation in this example. However, the same configuration as this embodiment can be immediately applied to a well-known semaphore. For this purpose, which block is under the control of the semaphore to be accessed is recorded in the same data structure as the runtime block management table 501 of the present embodiment, and the semaphore outside the self processor is remotely communicated with the communication. All you have to do is prepare a built-in procedure to access.

【0120】周知の排他制御、同期機構はセマフォを用
いて置き換え可能な場合が多い。このことから本実施例
はモニタ型以外の共有変数実現方法にも応用可能である
と言うことができる。
The well-known exclusive control and synchronization mechanism can often be replaced by using a semaphore. From this, it can be said that the present embodiment can be applied to a shared variable realization method other than the monitor type.

【0121】また本実施例で示したモニタ型において、
バッファメモリ割り当てを取り去った構造を用いた場
合、あるデータ型に結び付けられた特定手続きによる同
期的な通信経路が中間言語インタープリタにより実現さ
れたと見なすことができる。従って本発明の中間言語イ
ンタープリタは、インタープリタとインタープリタの間
でFIFO等のメモリ構造を用い通信経路を実現した場合に
対しても実装することができる。この場合、共有変数を
持たず、通信によって並列実行手続き間のデータ授受を
おこなう仕様のプログラム言語のコンパイラであって
も、本実施例と同様な中間言語出力を行なうことで複数
のプロセッサに実装した中間言語インタープリタにおい
て実行可能であると言える。
In the monitor type shown in this embodiment,
When the structure without buffer memory allocation is used, it can be considered that a synchronous communication path by a specific procedure associated with a certain data type is realized by the intermediate language interpreter. Therefore, the intermediate language interpreter of the present invention can be implemented even when a communication path is realized by using a memory structure such as a FIFO between the interpreters. In this case, even a compiler of a programming language which does not have a shared variable and which exchanges data between parallel execution procedures by communication is implemented in a plurality of processors by outputting an intermediate language similar to that of this embodiment. It can be said that it can be executed by an intermediate language interpreter.

【0122】4−2−2.中間言語インタープリタの実
装 上記実施例の示したものと等価な中間言語インタープリ
タは、複数プロセッサからなる処理系に実現されても良
い。例えば4つのプロセッサからなるコンピュータ上に
並列処理を実現するカーネルプログラムを実装し、この
カーネルプログラム上に中間言語インタープリタプログ
ラムを走らせることが考えられる。これを更に発展させ
ると、トポロジーの異なる別々のマルチプロセッサシス
テム上にそれぞれ本発明の中間言語インタープリタを実
装し、トポロジー混在環境で実行可能な並列プログラム
を記述する事ができる。
4-2-2. Implementation of Intermediate Language Interpreter An intermediate language interpreter equivalent to that shown in the above embodiment may be realized in a processing system including a plurality of processors. For example, it is conceivable to implement a kernel program that realizes parallel processing on a computer including four processors and run an intermediate language interpreter program on this kernel program. If this is further developed, the intermediate language interpreter of the present invention can be mounted on different multiprocessor systems having different topologies, and parallel programs that can be executed in a mixed topology environment can be written.

【0123】この方法を使用すれば、画像処理の高速処
理に有利なシストリックアレイプロセッサシステムと、
信号処理、高速フーリエ変換処理などの処理に有利なベ
クトルプロセッサシステムを結合したシステム上で記述
可能な高級言語を実現することができる。
By using this method, a systolic array processor system advantageous for high-speed image processing,
It is possible to realize a high-level language that can be described on a system in which vector processor systems that are advantageous for processing such as signal processing and fast Fourier transform processing are combined.

【0124】従来のコンパイラの中で、例えばベクトル
プロセッサの使用を前提として開発されたコンパイラの
出力コードは、ベクトルプロセッサ上で実行される機械
語コードを発生する。このオブジェクトコードはターゲ
ットシステムに依存したコードである。この種のコンパ
イラの出力結果は、ハードウェアの仕様の変更に対して
は再コンパイルしないと最適コードとならない。例え
ば、スカラープロセッサのみのハードウェアを実行環境
としてコンパイルされたオブジェクトコードを運用して
いたコンピュータに新たにベクトルプロセッサを付加し
たとしても、ベクトルプロセッサをサポートするコンパ
イラによって再度コンパイルし、オブジェクトコードを
生成し直さないと実行速度の向上効果は得られない。
In the conventional compiler, the output code of the compiler developed assuming the use of the vector processor, for example, generates a machine language code to be executed on the vector processor. This object code depends on the target system. The output of this kind of compiler will not be the optimum code unless it is recompiled for changes in the hardware specifications. For example, even if a new vector processor is added to the computer that was operating the object code compiled with the hardware of only the scalar processor as the execution environment, it is recompiled by the compiler that supports the vector processor to generate the object code. Without fixing it, the effect of improving the execution speed cannot be obtained.

【0125】これに対し、本実施例で示したコンパイラ
は中間コードインタプリタにより実行されるコードを発
生する。また中間コードは実行時にプロセッサに動的に
スケジュールされる。この2つの特徴からコンパイル済
みのオブジェクトコードを運用しているシステムに対
し、中間コードインタープリタを実装したハードウェア
(回路基板等)を付加した場合、再度コンパイルを行な
い目的プログラムのオブジェクトコードを生成し直す手
順が不要である。中間コードインタープリタを実装した
ハードウェアが付加された時点から目的プログラムのオ
ブジェクトコードは、付加ハードウェアのプロセッサと
従来から運用していたプロセッサによるマルチプロセッ
サ系によって実行される。このことは、商用アプリケー
ションを販売し運用する段階で極めて有利である。なぜ
なら、商用アプリケーションのほとんどは、プログラム
著作権を保護するためソースコードを含めないオブジェ
クトコードのみの状態で使用者に販売されるためであ
る。本実施例のコンパイラによって開発されたオブジェ
クトコードであれば、使用者がハードウェア付加を行な
ってもアプリケーションソフトウェアのオブジェクトコ
ードを変更する必要が無い。これにより、保守の容易
さ、運用の簡便さの両面で優れるという効果が生じる。
On the other hand, the compiler shown in this embodiment generates the code executed by the intermediate code interpreter. Also, the intermediate code is dynamically scheduled by the processor at run time. Due to these two characteristics, when hardware (circuit board etc.) with an intermediate code interpreter is added to a system that operates compiled object code, it is recompiled to regenerate the object code of the target program. No steps required. The object code of the target program is executed by the multiprocessor system including the processor of the additional hardware and the processor that has been conventionally operated from the time when the hardware implementing the intermediate code interpreter is added. This is extremely advantageous at the stage of selling and operating commercial applications. This is because most commercial applications are sold to users only in the form of object code that does not include source code in order to protect the program copyright. With the object code developed by the compiler of this embodiment, it is not necessary to change the object code of the application software even if the user adds hardware. As a result, there is an effect that the maintenance is easy and the operation is easy.

【0126】[0126]

【発明の効果】本発明は、並列実行時に共有される変数
へのアクセスを排他制御する機構と、中間言語の命令語
によって記述されたオブジェクトコードを生成するコン
パイラと、前記コンパイラの出力した中間言語を実行す
るインタープリタと、前記インタープリタにより実現さ
れる並列実行の処理ブロック割り当てを動的に行なう機
構とによって構成されているため、並列処理系のハード
ウェアの構成が変わった場合でもこのコンパイラを用い
て開発されたオブジェクトコードを再コンパイルする事
無く並列処理を実行することが可能である。
According to the present invention, a mechanism for exclusively controlling access to a variable shared during parallel execution, a compiler for generating an object code described by an intermediate language instruction word, and an intermediate language output by the compiler. This compiler is used even if the hardware configuration of the parallel processing system changes because it is composed of an interpreter that executes the above and a mechanism that dynamically allocates processing blocks for parallel execution realized by the interpreter. It is possible to execute parallel processing without recompiling the developed object code.

【0127】言い替えるなら、使用者が処理速度改善の
ためアクセラレータ等の付加ハードウェアを追加した場
合でも、本発明による処理系を実装したパーソナルコン
ピュータ向けのアプリケーションプログラムについて
は、ハードウェア追加によるプログラムの変更を必要と
せずに追加したハードウェアによる処理速度の改善を享
受できる。
In other words, even if the user adds additional hardware such as an accelerator to improve the processing speed, the application program for the personal computer in which the processing system according to the present invention is mounted is changed by adding the hardware. You can enjoy the improvement of the processing speed by the added hardware without needing.

【図面の簡単な説明】[Brief description of drawings]

【図1】本発明の実施例として好適なマルチプロセッサ
処理装置と、そのコンパイラ処理系の構成図。
FIG. 1 is a configuration diagram of a multiprocessor processing apparatus suitable as an embodiment of the present invention and a compiler processing system thereof.

【図2】図1のコンパイラ処理系で開発したオブジェク
トコードを実行するマルチプロセッサ処理装置であるパ
ーソナルコンピュータの構成図。
FIG. 2 is a configuration diagram of a personal computer that is a multiprocessor processing device that executes an object code developed by the compiler processing system of FIG.

【図3】モニタ型の説明図。FIG. 3 is an explanatory diagram of a monitor type.

【図4】構文解析手段104の処理の流れ図。FIG. 4 is a flowchart of the processing of the syntax analysis unit 104.

【図5】実行時ブロック管理テーブルの説明図。FIG. 5 is an explanatory diagram of a runtime block management table.

【図6】例として挙げたプログラムの説明図。FIG. 6 is an explanatory diagram of a program given as an example.

【図7】例として挙げたプログラムのブロックの従属関
係の説明図。
FIG. 7 is an explanatory diagram of a dependency relationship of blocks of a program given as an example.

【図8】ブロック管理テーブルの説明図。FIG. 8 is an explanatory diagram of a block management table.

【図9】ブロック間の従属関係を取り出す処理の流れ
図。
FIG. 9 is a flowchart of a process of extracting a dependency relationship between blocks.

【図10】共有資源管理テーブルの説明図。FIG. 10 is an explanatory diagram of a shared resource management table.

【図11】中間言語の機能の説明図。FIG. 11 is an explanatory diagram of functions of an intermediate language.

【図12】中間言語発生の処理の説明図。FIG. 12 is an explanatory diagram of an intermediate language generation process.

【図13】中間言語発生手順の説明図。FIG. 13 is an explanatory diagram of an intermediate language generation procedure.

【図14】中間言語処理時のスタック状態の説明図。FIG. 14 is an explanatory diagram of a stack state during intermediate language processing.

【図15】中間言語インタープリタを形成するプロセス
間の通信に使用するデータ構造の説明図。
FIG. 15 is an explanatory diagram of a data structure used for communication between processes that form an intermediate language interpreter.

【図16】中間言語インタープリタの処理の流れ図。FIG. 16 is a flowchart of processing of an intermediate language interpreter.

【図17】中間言語インタープリタを実現するプロセス
の構成図。
FIG. 17 is a block diagram of a process for realizing an intermediate language interpreter.

【図18】cobegin文、sync文処理の説明図。FIG. 18 is an explanatory diagram of processing of a cobegin statement and a sync statement.

【図19】共有資源アクセス処理の実行時の流れ図。FIG. 19 is a flowchart at the time of execution of shared resource access processing.

【図20】表構造の説明図。FIG. 20 is an explanatory diagram of a table structure.

【符号の説明】[Explanation of symbols]

101…ソースコード 102…コンパイラ 103…字句解析手段 104…構文解析手段 105…共有メモリ資源検出手段 106…並列実行検出手段 107…コード生成手段 108…コード生成手段 109…オブジェクトファイル作成手段 110…中間言語オブジェクト 111…中間言語インタープリタ 112…中間言語インタープリタ 113…プロセッサ 115…通信経路 200…パーソナルコンピュータ 201…付加ハードウェア 202…システムバス 203…オペレーティングシステム 300…説明のためのソースコード 501…実行時ブロック管理テーブル 503…ブロック番号 504…下位ブロックへの連鎖アドレス 507…引数リストへの連鎖アドレス 508…連鎖 509…連鎖 801…ブロック番号管理テーブル 802…ブロック番号 803…ブロックレベル 804…テーブルエントリ 1001…共有資源管理テーブル 1002…資源番号 1003…共有変数名 1004…共有資源が宣言されたブロック番号 1006…モニタ型手続きの実行コード 1203…引数リスト 1401…スタック使用の履歴 1501…データ構造 1502…コマンド 1503…プロセッサ番号 1504…プロセス番号 1506…データ長 1507…オブジェクトコード 1508…スタック初期化データ 1509…テーブル初期化データ 1511…状態コード 1701…実行時プロセッサ管理テーブル 1702…プロセス 1706…コード領域 1707…スタック領域 1708…命令ポインタ 1709…スタックポインタ 1801…命令語解析処理 1803…スケジューラ 1804…述語展開処理 1808…他の中間言語インタープリタ 101 ... Source code 102 ... Compiler 103 ... Lexical analysis means 104 ... Syntax analysis means 105 ... Shared memory resource detection means 106 ... Parallel execution detection means 107 ... Code generation means 108 ... Code generation means 109 ... Object file creation means 110 ... Intermediate language Object 111 ... Intermediate language interpreter 112 ... Intermediate language interpreter 113 ... Processor 115 ... Communication path 200 ... Personal computer 201 ... Additional hardware 202 ... System bus 203 ... Operating system 300 ... Source code 501 for explanation ... Runtime block management table 503 ... Block number 504 ... Chain address to lower block 507 ... Chain address to argument list 508 ... Chain 509 ... Chain 801 ... Block number management table 802 ... Block number 803 ... Block level 804 ... Table entry 1001 ... Shared resource management table 1002 ... Resource number 1003 ... Shared variable name 1004 ... Block number where shared resource is declared 1006 ... Monitor type procedure execution code 1203 ... Argument list 1401 ... Stack usage history 1501 ... Data structure 1502 ... Command 1503 ... Processor number 1504 ... Process number 1506 ... Data length 1507 ... Object code 1508 ... Stack initialization data 1509 ... Table initialization data 1511 ... Status code 1701 ... Runtime processor Management table 1702 ... Process 1706 ... Code area 1707 ... Stack area 1708 ... Instruction pointer 1709 ... Stack pointer 1801 ... Instruction word analysis processing 180 ... scheduler 1804 ... predicate expansion processing 1808 ... other intermediate language interpreter

Claims (1)

【特許請求の範囲】[Claims] 【請求項1】 少なくとも共有メモリ資源割り当てに対
してアクセスを発生するプログラム記述の解析を行ない
排他制御を指示する手段と、並列処理可能なプログラム
処理単位に対する記述の解析を行ないプロセッサ割り当
てを行なう手段とを有するコンパイル機構と、前記コン
パイル機構の出力した中間言語を実行するインタープリ
ット機構と、前記インタープリット機構により実現され
る並列実行の処理ブロック割り当てを動的に行なう機構
とによって構成されることを特徴とするマルチプロセッ
サ処理装置。
1. A means for instructing exclusive control by analyzing a program description that causes access to at least shared memory resource allocation, and a means for performing a processor allocation by analyzing a description for a program processing unit capable of parallel processing. And an interpreting mechanism for executing the intermediate language output by the compiling mechanism, and a mechanism for dynamically allocating processing blocks for parallel execution realized by the interpreting mechanism. And a multiprocessor processing device.
JP16288292A 1992-06-22 1992-06-22 Multiprocessor Pending JPH064498A (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP16288292A JPH064498A (en) 1992-06-22 1992-06-22 Multiprocessor

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP16288292A JPH064498A (en) 1992-06-22 1992-06-22 Multiprocessor

Publications (1)

Publication Number Publication Date
JPH064498A true JPH064498A (en) 1994-01-14

Family

ID=15763060

Family Applications (1)

Application Number Title Priority Date Filing Date
JP16288292A Pending JPH064498A (en) 1992-06-22 1992-06-22 Multiprocessor

Country Status (1)

Country Link
JP (1) JPH064498A (en)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1094398A1 (en) * 1999-05-07 2001-04-25 Seiko Epson Corporation Meeting system and information storage medium
US6839061B1 (en) 1999-05-20 2005-01-04 Seiko Epson Corporation Image display system and information storage medium
JP2016510146A (en) * 2013-02-18 2016-04-04 ハイブリッドサーバー テック ゲーエムベーハー Method, processing module, and system for executing executable code

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1094398A1 (en) * 1999-05-07 2001-04-25 Seiko Epson Corporation Meeting system and information storage medium
US7251675B1 (en) 1999-05-07 2007-07-31 Seiko Epson Corporation Meeting system and information storage medium
US6839061B1 (en) 1999-05-20 2005-01-04 Seiko Epson Corporation Image display system and information storage medium
EP1895403A2 (en) 1999-05-20 2008-03-05 Seiko Epson Corporation Image display system and information storage medium
JP2016510146A (en) * 2013-02-18 2016-04-04 ハイブリッドサーバー テック ゲーエムベーハー Method, processing module, and system for executing executable code

Similar Documents

Publication Publication Date Title
US9471291B2 (en) Multi-processor code for modification for storage areas
US11599346B2 (en) Accessing a migrated member in an updated type
US5659751A (en) Apparatus and method for dynamic linking of computer software components
US10620988B2 (en) Distributed computing architecture
US10140119B2 (en) Modular serialization
US20020046230A1 (en) Method for scheduling thread execution on a limited number of operating system threads
US20200293335A1 (en) Container-based language runtime loading an isolated method
US12014190B2 (en) Type-constrained operations for plug-in types
Horwat Concurrent Smalltalk on the message-driven processor
Theobald et al. Overview of the Threaded-C language
US10387142B2 (en) Using annotation processors defined by modules with annotation processors defined by non-module code
JPH064498A (en) Multiprocessor
KR20190060561A (en) THE INTERGRATED IoT PROGRAMMING METHOD AND SYSTEM WITH SELECTIVE ABSTRACTION OF THIRD-PARTY DEVICES
Feyel Some new technics regarding the parallelisation of ZéBuLoN, an object oriented finite element code for structural mechanics
Pautet et al. CORBA & DSA: Divorce or marriage?
Tremblay et al. Threaded-C language reference manual (release 2.0)
JPH0660047A (en) Multiprocessor processor
Taft et al. Annex E (normative): Distributed Systems
Cooperman et al. Marshalgen: A Package for Semi-Automatic Marshaling of Objects.
Wrench CSP-i: An Implementation of CSP
Theobald et al. Threaded-C Language Reference Manual Release 2.0
Vo et al. The MPI Message Queue Dumping Interface
Bawtree Restructuring the run time support of a distributed language
Bellur et al. SmmmmS
Guang et al. Parallel objects in distributed Ada95 compiler and running system-PDEFA