JPH03230225A - プロセス分散方法 - Google Patents
プロセス分散方法Info
- Publication number
- JPH03230225A JPH03230225A JP2026449A JP2644990A JPH03230225A JP H03230225 A JPH03230225 A JP H03230225A JP 2026449 A JP2026449 A JP 2026449A JP 2644990 A JP2644990 A JP 2644990A JP H03230225 A JPH03230225 A JP H03230225A
- Authority
- JP
- Japan
- Prior art keywords
- execution
- executed
- event
- task
- parallel
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multi Processors (AREA)
Abstract
(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。
め要約のデータは記録されません。
Description
【発明の詳細な説明】
〔産業上の利用分野〕
本発明は、密結合多重プロセッサシステムに関し、特に
動的に生成される複数のプロセスから成るプログラムを
多重ジョブ環境で効率的に複数のプロセッサに実行させ
るためのプロセスのプロセッサへの分散方式に関する。
動的に生成される複数のプロセスから成るプログラムを
多重ジョブ環境で効率的に複数のプロセッサに実行させ
るためのプロセスのプロセッサへの分散方式に関する。
プログラムの実行時間を短縮するアプローチに、1つの
プログラムを並列化して複数のプロセスに分割しマルチ
プロセッサで並列に実行するという方法がある。
プログラムを並列化して複数のプロセスに分割しマルチ
プロセッサで並列に実行するという方法がある。
1つのプログラムを並列化する方法としては以下の方法
が一般的である。すなわちプログラム中逐次的に実行す
べき部分を1つのプロセス内で実行し、並列実行可能な
部分に到達したらその部分を実行するための子プロセス
を複数生成し、全ての子プロセスの実行終了を待ってか
ら続きの逐次実行部分を実行するという方法である。生
成された子プロセスも、該子プロセス内で並列実行可能
な部分を実行するための子プロセス(もともとのプロセ
スにとってみれば孫プロセス)をさらに生成できるよう
にすることもあり、この場合並列処理のネスティングが
許されているという。
が一般的である。すなわちプログラム中逐次的に実行す
べき部分を1つのプロセス内で実行し、並列実行可能な
部分に到達したらその部分を実行するための子プロセス
を複数生成し、全ての子プロセスの実行終了を待ってか
ら続きの逐次実行部分を実行するという方法である。生
成された子プロセスも、該子プロセス内で並列実行可能
な部分を実行するための子プロセス(もともとのプロセ
スにとってみれば孫プロセス)をさらに生成できるよう
にすることもあり、この場合並列処理のネスティングが
許されているという。
並列化されたプログラムの実行時間を短縮するためには
、プロセスのプロセッサに対する効率的な分散が必要で
あり、そのためにキューを設け、プログラムの実行に伴
い動的に生成される子プロセスをキューに登録し、行う
べき仕事のないプロセッサがキューを検査して子プロセ
スが登録されていればそれを取りだし実行する方式がよ
く知られている。
、プロセスのプロセッサに対する効率的な分散が必要で
あり、そのためにキューを設け、プログラムの実行に伴
い動的に生成される子プロセスをキューに登録し、行う
べき仕事のないプロセッサがキューを検査して子プロセ
スが登録されていればそれを取りだし実行する方式がよ
く知られている。
従来から行われているオペレーティングシステム(O8
)を介したプロセスの分散及び通信では並列化プログラ
ムの高速化が図れないため、プロセスの分散を高速に行
うためにキューへの子プロセス登録およびキューの検査
、子プロセスの取りだしをプロプレムモードで行う方法
が提案されている。
)を介したプロセスの分散及び通信では並列化プログラ
ムの高速化が図れないため、プロセスの分散を高速に行
うためにキューへの子プロセス登録およびキューの検査
、子プロセスの取りだしをプロプレムモードで行う方法
が提案されている。
また、プロセス間の通信を高速に行うために、プロプレ
ムモードにおいてフラグの変化を参照しながらスピンル
ープして事象の成立を待つアクティブウェイト方式があ
る(”Active 1lait” U、S、PATE
NT 4,631,674)。
ムモードにおいてフラグの変化を参照しながらスピンル
ープして事象の成立を待つアクティブウェイト方式があ
る(”Active 1lait” U、S、PATE
NT 4,631,674)。
スピンループして待つ事象としては、プロセスの生成や
、生成した全ての子プロセスの実行終了(”Micro
tasking on IBM Multiproce
ssors”IBM J。
、生成した全ての子プロセスの実行終了(”Micro
tasking on IBM Multiproce
ssors”IBM J。
RES、DEVELOP、 VOL、30 No、6
NOVEMBER1986)などが挙げられる。
NOVEMBER1986)などが挙げられる。
従来技術の一例を第15図で説明すると、全ての子プロ
セスの終了を待つべき親プロセスは処理1001におい
て一旦中断され、処理1002を実行して新しいプロセ
スがあるかを検査する。新しいプロセスがあれば、処理
1003を実行して新しいプロセスを実行する。新しい
プロセスがなければ、処理1004を実行し、全ての子
プロセスが終了したかを検査する。全ての子プロセスが
終了していれば処理1005を実行して親プロセスを再
開するが、終了していなければ再び処理1004を実行
して全ての子プロセスが終了するまでスピンループする
。
セスの終了を待つべき親プロセスは処理1001におい
て一旦中断され、処理1002を実行して新しいプロセ
スがあるかを検査する。新しいプロセスがあれば、処理
1003を実行して新しいプロセスを実行する。新しい
プロセスがなければ、処理1004を実行し、全ての子
プロセスが終了したかを検査する。全ての子プロセスが
終了していれば処理1005を実行して親プロセスを再
開するが、終了していなければ再び処理1004を実行
して全ての子プロセスが終了するまでスピンループする
。
上記従来技術は、並列処理のネスティングがない場合は
問題ないが、並列処理のネスティングを許した場合に、
以下のようなケースにおいてプロセッサ資源が有効に活
用されないという問題点がある。即ち、親プロセスを実
行しているプロセッサ0が、子プロセスの終了を待つス
ピンループを実行してしまった場合、その後でプロセッ
サ1で新たな孫プロセスを生成しプロセスキューに登録
してもプロセッサ0では孫プロセスを実行できないとい
う状況が生じる。この場合孫プロセスはいずれプロセッ
サ1で実行されるのでプログラムは正常に終了するが、
プロセッサ0が有効に活用されず処理時間が増大すると
いう問題がある。(課題1) さらに上記従来技術のスピンループはCPU資源を1つ
のジョブで占有するので並列プログラムの実行が1ジヨ
ブ環境で行われるときは問題がないが、多重ジョブ環境
で行われる時はシステムのスループットを低下させると
いう問題がある。多重ジョブ環境でデバッグされた並列
プログラムが1ジヨブ環境で実行されることも多いこと
がら、1ジヨブ環境と多重ジョブ環境で使用するロード
モジュールを一本化した上で上記の問題を解決する必要
がある(課題2)。
問題ないが、並列処理のネスティングを許した場合に、
以下のようなケースにおいてプロセッサ資源が有効に活
用されないという問題点がある。即ち、親プロセスを実
行しているプロセッサ0が、子プロセスの終了を待つス
ピンループを実行してしまった場合、その後でプロセッ
サ1で新たな孫プロセスを生成しプロセスキューに登録
してもプロセッサ0では孫プロセスを実行できないとい
う状況が生じる。この場合孫プロセスはいずれプロセッ
サ1で実行されるのでプログラムは正常に終了するが、
プロセッサ0が有効に活用されず処理時間が増大すると
いう問題がある。(課題1) さらに上記従来技術のスピンループはCPU資源を1つ
のジョブで占有するので並列プログラムの実行が1ジヨ
ブ環境で行われるときは問題がないが、多重ジョブ環境
で行われる時はシステムのスループットを低下させると
いう問題がある。多重ジョブ環境でデバッグされた並列
プログラムが1ジヨブ環境で実行されることも多いこと
がら、1ジヨブ環境と多重ジョブ環境で使用するロード
モジュールを一本化した上で上記の問題を解決する必要
がある(課題2)。
一般に多重ジョブ環境では、論理的なプロセッサ(一般
にタスクとも呼ばれる。水量m書でも以下ではタスクは
論理的プロセッサを指す)がプロセスを実行し、O8が
プロセッサに時分割でタスクを実行させる。O8は各タ
スクのCPU資源や入出力資源使用率などを考慮しなが
ら各タスクに対するプロセッサ使用権の割り振りを決定
する。
にタスクとも呼ばれる。水量m書でも以下ではタスクは
論理的プロセッサを指す)がプロセスを実行し、O8が
プロセッサに時分割でタスクを実行させる。O8は各タ
スクのCPU資源や入出力資源使用率などを考慮しなが
ら各タスクに対するプロセッサ使用権の割り振りを決定
する。
そのためある子プロセスを実行中のタスク1がプロセッ
サ使用権を取り上げられた場合、プロセッサ使用権を有
するタスクOで親プロセスが該子プロセスの実行終了を
スピンループでいくら待ってもプログラムは終了しない
。これをデッドロック状態という。これを解決するため
にはデッドロック状態を検出し、O8がタスク1にプロ
セッサ使用権を与えるようにする必要がある(課題3)
。
サ使用権を取り上げられた場合、プロセッサ使用権を有
するタスクOで親プロセスが該子プロセスの実行終了を
スピンループでいくら待ってもプログラムは終了しない
。これをデッドロック状態という。これを解決するため
にはデッドロック状態を検出し、O8がタスク1にプロ
セッサ使用権を与えるようにする必要がある(課題3)
。
本発明は、前記問題点を解決するためになされたもので
ある。
ある。
本発明の目的は、オペレーティングシステムを介在させ
ることなく、ユーザプログラムの中でプロセスの分散と
同期を高速に実行するプロセス分散方式を提供すること
にある。
ることなく、ユーザプログラムの中でプロセスの分散と
同期を高速に実行するプロセス分散方式を提供すること
にある。
〔課題を解決するための手段〕
上記課題1を解決するために本発明では、全ての子プロ
セスの終了という事象か、プロセスキューへの新しいプ
ロセスの登録という事象かのいずれかの事象の成立をス
ピンループして待つ並列処理用実行時ルーチン¥WAI
Tを用意した。
セスの終了という事象か、プロセスキューへの新しいプ
ロセスの登録という事象かのいずれかの事象の成立をス
ピンループして待つ並列処理用実行時ルーチン¥WAI
Tを用意した。
¥WAITの特徴となる部分の処理を第16図を用いて
説明する。全ての子プロセスの終了を待つべき親プロセ
スは処理1001において一旦中断され、処理1004
を実行して全ての子プロセスが終了したかを検査する。
説明する。全ての子プロセスの終了を待つべき親プロセ
スは処理1001において一旦中断され、処理1004
を実行して全ての子プロセスが終了したかを検査する。
全ての子プロセスが終了していれば処理1005におい
て親プロセスの実行を再開する。全ての子プロセスが終
了していなければ処理1002を実行し、新しいプロセ
スがあるかを検査する。新しいプロセスがあれば処理1
003において新しいプロセスを実行し、その後処理1
004を再び実行する。新しいプロセスがなければ処理
1004を再び実行し、全ての子プロセスが終了するか
、新しいプロセスができるか、いずれかの事象が成立す
るまでスピンループする。
て親プロセスの実行を再開する。全ての子プロセスが終
了していなければ処理1002を実行し、新しいプロセ
スがあるかを検査する。新しいプロセスがあれば処理1
003において新しいプロセスを実行し、その後処理1
004を再び実行する。新しいプロセスがなければ処理
1004を再び実行し、全ての子プロセスが終了するか
、新しいプロセスができるか、いずれかの事象が成立す
るまでスピンループする。
本発明ではさらに、プロセスキューへのプロセスの登録
をスピンループして待つ並列処理用実行時ルーチン¥P
RC3を用意し、プロセスオブジェクト中生成した全て
の子プロセスの終了を待つべきポイントでは実行時ルー
チン¥WA I Tをコールし、すべき仕事のないタス
クに実行させるオブジェクトの先頭では実行時ルーチン
¥PRC5をコールするようにコンパイラがオブジェク
トモジュールを作成するようにした。
をスピンループして待つ並列処理用実行時ルーチン¥P
RC3を用意し、プロセスオブジェクト中生成した全て
の子プロセスの終了を待つべきポイントでは実行時ルー
チン¥WA I Tをコールし、すべき仕事のないタス
クに実行させるオブジェクトの先頭では実行時ルーチン
¥PRC5をコールするようにコンパイラがオブジェク
トモジュールを作成するようにした。
実行時ルーチン¥WAITにおける2事象待ちスピンル
ープのためには、全ての子プロセスの終了を表示するフ
ラグ1と、プロセスキューへのプロセス登録を表示する
フラグ2とを用意し、フラグ1を参照して、終了してい
ない子プロセスがあるならばフラグ2を参照し、プロセ
スが登録されていないならばふたたびフラグ1の参照を
繰り返すというステップをふめばよい。また、別のフラ
グ3を用意し、フラグ1の設定時およびフラグ2の設定
時には同時にフラグ3にも設定するようにし、フラグ1
とフラグ2の表示内容をフラグ3に代表させてフラグ3
の参照を繰り返すというステップをふんでもよい。
ープのためには、全ての子プロセスの終了を表示するフ
ラグ1と、プロセスキューへのプロセス登録を表示する
フラグ2とを用意し、フラグ1を参照して、終了してい
ない子プロセスがあるならばフラグ2を参照し、プロセ
スが登録されていないならばふたたびフラグ1の参照を
繰り返すというステップをふめばよい。また、別のフラ
グ3を用意し、フラグ1の設定時およびフラグ2の設定
時には同時にフラグ3にも設定するようにし、フラグ1
とフラグ2の表示内容をフラグ3に代表させてフラグ3
の参照を繰り返すというステップをふんでもよい。
上記課題2および3の解決のために本発明では、実行時
ルーチン¥WAITおよび¥PRC8で実行するスピン
ループに時間期限を設け、該時間期限までスピンループ
を行っても待ち事象が成立しない場合はスピンループを
やめ、該プロセスを実行しているタスクのプロセッサ使
用権を待ち事象が成立するまで自ら手放すようにした。
ルーチン¥WAITおよび¥PRC8で実行するスピン
ループに時間期限を設け、該時間期限までスピンループ
を行っても待ち事象が成立しない場合はスピンループを
やめ、該プロセスを実行しているタスクのプロセッサ使
用権を待ち事象が成立するまで自ら手放すようにした。
プロセッサ使用権を自ら手放すためのOSマクロとして
HITACVO53/ESt’はWAITVクコを用、
11しており、該マクロのオペランドにて指定した連絡
領域に連絡があったときはO8により上記タスクに再び
プロセッサ使用権が与えられる。また上記時間期限は、
コンパイラによる各プロセスの予想実行時間や、該ジョ
ブが多重ジョブ環境で実行されているかなどのシステム
稼働状況や、ユーザが指定したジョブクラスなどに基づ
き実行時に実行時ルーチンにより決定される。
HITACVO53/ESt’はWAITVクコを用、
11しており、該マクロのオペランドにて指定した連絡
領域に連絡があったときはO8により上記タスクに再び
プロセッサ使用権が与えられる。また上記時間期限は、
コンパイラによる各プロセスの予想実行時間や、該ジョ
ブが多重ジョブ環境で実行されているかなどのシステム
稼働状況や、ユーザが指定したジョブクラスなどに基づ
き実行時に実行時ルーチンにより決定される。
第16図に示すように、¥WAITを動作させることに
より、並列処理のネスティングが許されている場合でも
、前述したプロセッサOは子プロセスの終了を待つスピ
ンループ中にプロセッサ1で新しい孫プロセスが生成さ
れたかどうかを監視でき、新しいプロセスが登録された
ら子プロセス終了部ちを中断して新プロセスを実行でき
るため、プロセッサ資源が有効活用される。
より、並列処理のネスティングが許されている場合でも
、前述したプロセッサOは子プロセスの終了を待つスピ
ンループ中にプロセッサ1で新しい孫プロセスが生成さ
れたかどうかを監視でき、新しいプロセスが登録された
ら子プロセス終了部ちを中断して新プロセスを実行でき
るため、プロセッサ資源が有効活用される。
上記のように実行時に決定されるスピンループの時間期
限を設けることにより、システムの稼働状況などを考慮
してスピンループ時間を増減できるのでシステムのスル
ープットを低下させずかつ1ジヨブ環境と多重ジョブ環
境でロードモジュールを一本化することができる。
限を設けることにより、システムの稼働状況などを考慮
してスピンループ時間を増減できるのでシステムのスル
ープットを低下させずかつ1ジヨブ環境と多重ジョブ環
境でロードモジュールを一本化することができる。
さらに上記のようにスピンループ時間期限を設けて時間
期限に達したらWA I Tマクロを発行することによ
り、デッドロック状態が発生した場合最悪でもスピンル
ープ期限時間後にはO8への通知が行われ、O8は子プ
ロセスを実行中のタスクにプロセッサ使用権を与えるこ
とができる。
期限に達したらWA I Tマクロを発行することによ
り、デッドロック状態が発生した場合最悪でもスピンル
ープ期限時間後にはO8への通知が行われ、O8は子プ
ロセスを実行中のタスクにプロセッサ使用権を与えるこ
とができる。
以下、本発明の実施例を図面を参照しながら説明する。
(実施例1)
第1図は本発明の全体構成を示す図である1図中1から
4は、主記憶5を介して接続される、マルチプロセッサ
を構成するCPUである。
4は、主記憶5を介して接続される、マルチプロセッサ
を構成するCPUである。
コンパイラはソースプログラムから逐次実行部分のオブ
ジェクト命令列41と並列実行部分のオブジェクト命令
列42およびデータ領域43、並列プロセス実行情報4
4から成るオブジェクトモジュール40を生成する。プ
ログラム中メインプロセスとなるのは逐次実行部分であ
る。メインプロセスは並列実行部分を実行するサブプロ
セスを生成する。本発明の実施例では並列処理のネステ
ィングが可能であり、サブプロセスはサブプロセス内で
並列実行可能な部分を実行するサブプロセスをさらに生
成できる。
ジェクト命令列41と並列実行部分のオブジェクト命令
列42およびデータ領域43、並列プロセス実行情報4
4から成るオブジェクトモジュール40を生成する。プ
ログラム中メインプロセスとなるのは逐次実行部分であ
る。メインプロセスは並列実行部分を実行するサブプロ
セスを生成する。本発明の実施例では並列処理のネステ
ィングが可能であり、サブプロセスはサブプロセス内で
並列実行可能な部分を実行するサブプロセスをさらに生
成できる。
O36はユーザジョブの処理要求受は付は時に、1つの
ユーザ空間10 (ASCBI)を生成し、その中で実
行されるメインタスク11(TCBIO)を生成し、プ
ログラムの開始部であるプロローグ処理、終了部である
エピローグ処理およびメインプロセスである逐次実行オ
ブジェクトを実行させる。プロローグ処理においては、
ジョブ制御言語JCLのEXEC文のPARAMオペラ
ンドにてユーザが指定した生成要求サブタスク数に基づ
きシステムの状態を考慮した上で生成サブタスク数を決
定しサブタスク(TCBII、12.・・・)を生成す
る実行時ルーチン¥ATTACH16を呼ぶ。
ユーザ空間10 (ASCBI)を生成し、その中で実
行されるメインタスク11(TCBIO)を生成し、プ
ログラムの開始部であるプロローグ処理、終了部である
エピローグ処理およびメインプロセスである逐次実行オ
ブジェクトを実行させる。プロローグ処理においては、
ジョブ制御言語JCLのEXEC文のPARAMオペラ
ンドにてユーザが指定した生成要求サブタスク数に基づ
きシステムの状態を考慮した上で生成サブタスク数を決
定しサブタスク(TCBII、12.・・・)を生成す
る実行時ルーチン¥ATTACH16を呼ぶ。
本発明の実施例では生成されるサブタスクはTCB11
(12)のみである。上記サブタスク12は、並列プロ
セスキュー25にプロセス情報テーブルが登録されるの
を待ち、登録されるとプロセス情報テーブルから実行す
べきサブプロセスの情報をとりだし、該プロセス実行に
必要なワークデータ領域(33,38)をスタック管理
して、タスク対応のローカルデータ領域(30,35)
内から確保して、該サブプロセスを実行しワークデータ
領域(33,38)を解放する実行時ルーチン¥PRC
820を実行する。¥PRC820は並列プロセスキュ
ー25へのプロセス情報テーブルの登録を一定時間待っ
ても登録が行われない場合システムのスループットを低
下させないよう自らCPU使用権を手離す。
(12)のみである。上記サブタスク12は、並列プロ
セスキュー25にプロセス情報テーブルが登録されるの
を待ち、登録されるとプロセス情報テーブルから実行す
べきサブプロセスの情報をとりだし、該プロセス実行に
必要なワークデータ領域(33,38)をスタック管理
して、タスク対応のローカルデータ領域(30,35)
内から確保して、該サブプロセスを実行しワークデータ
領域(33,38)を解放する実行時ルーチン¥PRC
820を実行する。¥PRC820は並列プロセスキュ
ー25へのプロセス情報テーブルの登録を一定時間待っ
ても登録が行われない場合システムのスループットを低
下させないよう自らCPU使用権を手離す。
メインプロセスの実行が並列実行部分の直前に達したら
、タスク対応のプロセス情報テーブル用フリーエリア(
30,35)から領域を確保し、並列実行部分の実行に
必要な情報を一括して示す並列プロセス情報テーブルを
作成して並列プロセスキュー25に登録する実行時ルー
チン¥DISP18を呼ぶ。1つのプロセス情報テーブ
ルからは複数の並列サブプロセスが生成されるが、プロ
セス情報テーブルを作成したメインプロセスもしくはサ
ブプロセスを親プロセス、プロセス情報テーブルから生
成されるサブプロセスを子プロセスと呼ぶ。¥DISP
18は同時にタスクウェイトフラグ26.27 (TW
IO,TWII)を参照してWA I Tマクロ発行中
のタスクがあれば実行すべきプロセスが生成されたこと
を知らせるためにPO8Tマクロをタスク対応のECB
28.29 (タスクl0ECB、タスクIIECB)
に対し発行する。
、タスク対応のプロセス情報テーブル用フリーエリア(
30,35)から領域を確保し、並列実行部分の実行に
必要な情報を一括して示す並列プロセス情報テーブルを
作成して並列プロセスキュー25に登録する実行時ルー
チン¥DISP18を呼ぶ。1つのプロセス情報テーブ
ルからは複数の並列サブプロセスが生成されるが、プロ
セス情報テーブルを作成したメインプロセスもしくはサ
ブプロセスを親プロセス、プロセス情報テーブルから生
成されるサブプロセスを子プロセスと呼ぶ。¥DISP
18は同時にタスクウェイトフラグ26.27 (TW
IO,TWII)を参照してWA I Tマクロ発行中
のタスクがあれば実行すべきプロセスが生成されたこと
を知らせるためにPO8Tマクロをタスク対応のECB
28.29 (タスクl0ECB、タスクIIECB)
に対し発行する。
プロセス情報テーブルを作成するためのフリーエリア(
31,36)はタスク対応のローカルデータ域(30,
35)にチエインされて設けられてシ)る。32.37
はタスク対応のフリーエリアポインタであり、プロセス
情報テーブル用フリーエリア(31,36)をどこまで
使用したかを示す。並列プロセスキュー25は、グロー
バルデータ域24にある並列プロセスキュー先頭アドレ
スQH21を先頭として、上記のうち実行可能なプロセ
スの情報を含んでいるプロセス情報テーブルエリア(3
1,36)をチエインして構成されている。
31,36)はタスク対応のローカルデータ域(30,
35)にチエインされて設けられてシ)る。32.37
はタスク対応のフリーエリアポインタであり、プロセス
情報テーブル用フリーエリア(31,36)をどこまで
使用したかを示す。並列プロセスキュー25は、グロー
バルデータ域24にある並列プロセスキュー先頭アドレ
スQH21を先頭として、上記のうち実行可能なプロセ
スの情報を含んでいるプロセス情報テーブルエリア(3
1,36)をチエインして構成されている。
¥DISP18の実行が終了するとメインプロセスは全
ての子プロセスの実行終了もしくは並列プロセスキュー
25への新しいプロセス情報テーブルの登録を待つ実行
時ルーチン¥WA I T 19を呼ぶ。¥WAI’r
19は新しいプロセス情報テーブルが登録された場合は
プロセス情報テーブルから実行すべきサブプロセスの情
報をとりだし、該サブプロセス実行に必要なワークデー
タ領域(33,38)をスタック管理してタスク対応の
ローカルデータ領域(30,35)内から確保して、該
サブプロセスを実行しワークデータ領域(33,38)
を解放する。また一定時間待ってもサブプロセスの実行
が終了せずまた新しいプロセス情報テーブルも登録され
ない場合は、システムのスループットを低下させないよ
うWA I Tマクロを発行し、自らCPU使用権を手
離す。
ての子プロセスの実行終了もしくは並列プロセスキュー
25への新しいプロセス情報テーブルの登録を待つ実行
時ルーチン¥WA I T 19を呼ぶ。¥WAI’r
19は新しいプロセス情報テーブルが登録された場合は
プロセス情報テーブルから実行すべきサブプロセスの情
報をとりだし、該サブプロセス実行に必要なワークデー
タ領域(33,38)をスタック管理してタスク対応の
ローカルデータ領域(30,35)内から確保して、該
サブプロセスを実行しワークデータ領域(33,38)
を解放する。また一定時間待ってもサブプロセスの実行
が終了せずまた新しいプロセス情報テーブルも登録され
ない場合は、システムのスループットを低下させないよ
うWA I Tマクロを発行し、自らCPU使用権を手
離す。
¥WA I T 19の実行が終了するとメインプロセ
スは逐次実行オブジェクトの実行を再開する。
スは逐次実行オブジェクトの実行を再開する。
メインプログラムの終了部で実行されるエピローグ処理
においては生成したサブタスク12(TCBll)を消
滅させる実行時ルーチン¥DETACH17が呼ばれプ
ログラムが終了する。
においては生成したサブタスク12(TCBll)を消
滅させる実行時ルーチン¥DETACH17が呼ばれプ
ログラムが終了する。
33.38は並列プロセス実行に必要なワークデータ領
域を確保するためのデータ領域であり、34.39はそ
のスタックポインタである。
域を確保するためのデータ領域であり、34.39はそ
のスタックポインタである。
本ジョブが多重ジョブ環境で実行される時は、他ユーザ
空間8.13 (ASCBO,ASCB2)およびその
中で実行されるタスク9.14(TCBoo、TCB2
0)も存在するが、どのタスクを実行させるかのスケジ
ューリング処理はO36により公知のスケジューリング
処理制御技術により行われる。
空間8.13 (ASCBO,ASCB2)およびその
中で実行されるタスク9.14(TCBoo、TCB2
0)も存在するが、どのタスクを実行させるかのスケジ
ューリング処理はO36により公知のスケジューリング
処理制御技術により行われる。
第2図に並列実行可能部分を含むFORTRANソース
プログラムの一例を、第3図に本発明による第2図のソ
ースプログラムから生成されるオブジェクトモジュール
をFORTRANライクに記述したものを、第4図に第
3図のオブジェクトモジュールから生成されるプロセス
の概念的実行順序を示す。
プログラムの一例を、第3図に本発明による第2図のソ
ースプログラムから生成されるオブジェクトモジュール
をFORTRANライクに記述したものを、第4図に第
3図のオブジェクトモジュールから生成されるプロセス
の概念的実行順序を示す。
第2図のソースプログラム51中処理Aおよび処理Eは
逐次実行部分であり、D○30のループ52内の処理B
およびDは添字工に関し、D○40のループS3内の処
理Cは添字I、Jに関し並列化可能な部分である。
逐次実行部分であり、D○30のループ52内の処理B
およびDは添字工に関し、D○40のループS3内の処
理Cは添字I、Jに関し並列化可能な部分である。
第3図のオブジェクトモジュールの概略構成は、並列プ
ロセスオブジェクト命令列部分(67,68)と並列プ
ロセス実行情報部分(63,64)が追加されているこ
とを除いて従来の逐次実行プログラムと同一である(例
えば、HITACV○S3最適化FORTRAN77
0FORT77 E2.HAP FORTRAN7
7使用TR側き8090−3−765−30 476頁
オブジェクトモジュールの構成)ゆソースプログラム
51中の処理B、Dを実行するオブジェクトが並列プロ
セスオブジェクト命令列の67部分に、処理Cを実行す
るオブジェクトが並列プロセスオフシェフ8068部分
に格納される。またコンパイラにより生成される、並列
プロセスオブジェクト■67を実行するために必要な情
報が並列プロセス実行情報063部分に、並列プロセス
オブジェクト■68を実行するために必要な情報が並列
プロセス実行情報■64部分に格納される。
ロセスオブジェクト命令列部分(67,68)と並列プ
ロセス実行情報部分(63,64)が追加されているこ
とを除いて従来の逐次実行プログラムと同一である(例
えば、HITACV○S3最適化FORTRAN77
0FORT77 E2.HAP FORTRAN7
7使用TR側き8090−3−765−30 476頁
オブジェクトモジュールの構成)ゆソースプログラム
51中の処理B、Dを実行するオブジェクトが並列プロ
セスオブジェクト命令列の67部分に、処理Cを実行す
るオブジェクトが並列プロセスオフシェフ8068部分
に格納される。またコンパイラにより生成される、並列
プロセスオブジェクト■67を実行するために必要な情
報が並列プロセス実行情報063部分に、並列プロセス
オブジェクト■68を実行するために必要な情報が並列
プロセス実行情報■64部分に格納される。
以下、第3図と第4図を参照しながらオブジェクトモジ
ュールの内容とプロセスの対応およびプロセスの概念的
実行順序について説明する。
ュールの内容とプロセスの対応およびプロセスの概念的
実行順序について説明する。
プロローグ処理部分65はメインタスク11(TCBI
O)により実行される。プロローグ処理部分65の処理
は、前述の実行時ルーチン¥ATTACH16を呼ぶ以
外は従来の逐次実行プログラムと同一である。¥ATT
ACHI 6の処理の詳細については後述する。
O)により実行される。プロローグ処理部分65の処理
は、前述の実行時ルーチン¥ATTACH16を呼ぶ以
外は従来の逐次実行プログラムと同一である。¥ATT
ACHI 6の処理の詳細については後述する。
メインタスク11 (TCBIO)はプロローグ処理6
5に続いてメインプロセス1 (81)として逐次実行
オブジェク1−命令列66を実行し、処理A92の実行
終了後、D○3oの処理を子プロセスとして生成するた
めに前述の実行時ルーチン¥DISP93を呼ぶ。¥D
ISPの処理の詳細については後述する。¥DISP9
3の引数ENTRY■は並列プロセス実行情報■63部
分の先頭アドレスを示し、引数PTBL■には作成され
たプロセス情報テーブルの先頭アドレスが返される。
5に続いてメインプロセス1 (81)として逐次実行
オブジェク1−命令列66を実行し、処理A92の実行
終了後、D○3oの処理を子プロセスとして生成するた
めに前述の実行時ルーチン¥DISP93を呼ぶ。¥D
ISPの処理の詳細については後述する。¥DISP9
3の引数ENTRY■は並列プロセス実行情報■63部
分の先頭アドレスを示し、引数PTBL■には作成され
たプロセス情報テーブルの先頭アドレスが返される。
¥DISP93は引数ENTRY■より得られる情報を
たどり並列プロセスオブジェクト■67を実行するため
のプロセス情報テーブルを作成する。コンパイラにより
並列プロセスオブジェクト■67中に埋め込まれたルー
プ制御変数LCIおよびLCに与えるべき値を¥DIS
Pffi8が実行時に決定することにより、生成される
サブプロセス数が決定される。本発明の実施例ではLC
Iには0.1.2がLCには3が与えられ、サブプロセ
ス2 (82)、サブプロセス3 (85)、サブプロ
セス4 (88)が生成される。生成されたサブプロセ
スはいずれかのタスクで実行されている¥PRC5もし
くは¥WAIT(97,109,121)により取り呂
され実行される。
たどり並列プロセスオブジェクト■67を実行するため
のプロセス情報テーブルを作成する。コンパイラにより
並列プロセスオブジェクト■67中に埋め込まれたルー
プ制御変数LCIおよびLCに与えるべき値を¥DIS
Pffi8が実行時に決定することにより、生成される
サブプロセス数が決定される。本発明の実施例ではLC
Iには0.1.2がLCには3が与えられ、サブプロセ
ス2 (82)、サブプロセス3 (85)、サブプロ
セス4 (88)が生成される。生成されたサブプロセ
スはいずれかのタスクで実行されている¥PRC5もし
くは¥WAIT(97,109,121)により取り呂
され実行される。
¥DISP93の実行が終るとメインプロセス1 (8
1)は¥DISP93の引数PTBL■を引数として前
述の実行時ルーチン¥WAIT94を呼ぶ。PTBL■
で示されるプロセス情報テーブル内には、全ての子プロ
セス即ちサブプロセス2.3.4(82,85,88)
の実行が終了したか否かを示すプロセス終了ポストフラ
グ(後述)があり、¥WAIT94は引数LIMIT■
の値およびシステムやジョブの状態を考慮して決定した
一定時間が経過するまで、該プロセス終了ポストフラグ
を参照して全ての子プロセスの終了を待つ。引数LIM
IT■の値は、生成されるサブプロセスの予測実行時間
やタスク間の同期に従来から使用されているPO8T/
WAITマクロの処理時間などを考慮してコンパイラに
より決定される。¥WAIT94はサブプロセスの終了
を待つと同時に新しいサブプロセスの生成も待つが、そ
の点については後で述べる。
1)は¥DISP93の引数PTBL■を引数として前
述の実行時ルーチン¥WAIT94を呼ぶ。PTBL■
で示されるプロセス情報テーブル内には、全ての子プロ
セス即ちサブプロセス2.3.4(82,85,88)
の実行が終了したか否かを示すプロセス終了ポストフラ
グ(後述)があり、¥WAIT94は引数LIMIT■
の値およびシステムやジョブの状態を考慮して決定した
一定時間が経過するまで、該プロセス終了ポストフラグ
を参照して全ての子プロセスの終了を待つ。引数LIM
IT■の値は、生成されるサブプロセスの予測実行時間
やタスク間の同期に従来から使用されているPO8T/
WAITマクロの処理時間などを考慮してコンパイラに
より決定される。¥WAIT94はサブプロセスの終了
を待つと同時に新しいサブプロセスの生成も待つが、そ
の点については後で述べる。
サブプロセス2.3.4(82,85,88)はそれぞ
れLCIの値のみ異なる並列プロセスオブジェクト■6
7を実行し、処理Bの実行終了後、D○4oの処理を子
プロセスとして生成するためにそれぞれ実行時ルーチン
¥DISP (99,111,123)を呼ぶ。¥DI
SP (99,111,123)の引数ENTRY■は
並列プロセス実行情報■部分64の先頭アドレスを示し
、引数PTBL■にはそれぞれ並列プロセスオブジェク
ト■68を実行するためのプロセス情報テーブルの先頭
アドレスが返される。コンパイラにより並列プロセスオ
ブジェクトロ68中に埋め込まれたループ制御変数LC
2には本実施例ではそれぞれOllが、LCには2が与
えられ、サブプロセス2(82)からはサブプロセス5
.6(83,84)が、サブプロセス3(85)からは
サブプロセス7.8(86,87)が、サブプロセス4
(88)からはサブプロセス9.10(89,90)が
生成される。
れLCIの値のみ異なる並列プロセスオブジェクト■6
7を実行し、処理Bの実行終了後、D○4oの処理を子
プロセスとして生成するためにそれぞれ実行時ルーチン
¥DISP (99,111,123)を呼ぶ。¥DI
SP (99,111,123)の引数ENTRY■は
並列プロセス実行情報■部分64の先頭アドレスを示し
、引数PTBL■にはそれぞれ並列プロセスオブジェク
ト■68を実行するためのプロセス情報テーブルの先頭
アドレスが返される。コンパイラにより並列プロセスオ
ブジェクトロ68中に埋め込まれたループ制御変数LC
2には本実施例ではそれぞれOllが、LCには2が与
えられ、サブプロセス2(82)からはサブプロセス5
.6(83,84)が、サブプロセス3(85)からは
サブプロセス7.8(86,87)が、サブプロセス4
(88)からはサブプロセス9.10(89,90)が
生成される。
¥DISP(99,111,123)の実行が終るとサ
ブプロセス2.3.4(82,85,88)は実行時ル
ーチン¥WA4T(100,112,124)を呼び、
引数LIMIT■に示される時間が経過するまで、引数
PTBL■から九どれるプロセス終了ポストフラグを参
照してそれぞれサブプロセス5.6(83,84)、サ
ブプロセス7.8(86,87)、サブプロセス9.1
0(89,90)の終了を待つ。
ブプロセス2.3.4(82,85,88)は実行時ル
ーチン¥WA4T(100,112,124)を呼び、
引数LIMIT■に示される時間が経過するまで、引数
PTBL■から九どれるプロセス終了ポストフラグを参
照してそれぞれサブプロセス5.6(83,84)、サ
ブプロセス7.8(86,87)、サブプロセス9.1
0(89,90)の終了を待つ。
サブプロセス5.6.7.8.9.10(83,84,
86,87,89,90)はそれぞれLClおよびLC
2の値のみ異なる並列プロセスオブジェクト■68を実
行し、処理Cの実行終了後自プロセスを取りだした¥P
RC5もしくは¥WAIT (103,106,115
,118,127゜130)に分岐する。¥PRC3も
しくは¥WAIT(97,109,121)は取りだし
た子プロセスの実行が終了したことをプロセス終了ポス
トフラグを通じて親プロセスに通知し、該子プロセスを
消滅させる。
86,87,89,90)はそれぞれLClおよびLC
2の値のみ異なる並列プロセスオブジェクト■68を実
行し、処理Cの実行終了後自プロセスを取りだした¥P
RC5もしくは¥WAIT (103,106,115
,118,127゜130)に分岐する。¥PRC3も
しくは¥WAIT(97,109,121)は取りだし
た子プロセスの実行が終了したことをプロセス終了ポス
トフラグを通じて親プロセスに通知し、該子プロセスを
消滅させる。
サブプロセス2.3.4(82,85,88)で実行さ
れていた¥WAIT(100,112,124)は、そ
れぞれ金子プロセス即ちサブプロセス5.6(83,8
4)、サブプロセス7.8(86,87)、サブプロセ
ス9.10 (89,90)の終了通知をうけると呼び
もとに分岐して実行を終了する。サブプロセス2.3.
4(82,85,88)は続いて処理D(101,11
3,125)を実行し、処理D(101,113,12
5)の実行終了後は自プロセスを取りだした¥PRC5
もしくは¥WAIT(97,109,121)に分岐す
る。¥PRCSもしくは¥WAIT(97,109,1
21)では親プロセスであるメインプロセス1(81)
にとりだした子プロセスの実行が終了したことを通知し
該子プロセスを消滅させる。
れていた¥WAIT(100,112,124)は、そ
れぞれ金子プロセス即ちサブプロセス5.6(83,8
4)、サブプロセス7.8(86,87)、サブプロセ
ス9.10 (89,90)の終了通知をうけると呼び
もとに分岐して実行を終了する。サブプロセス2.3.
4(82,85,88)は続いて処理D(101,11
3,125)を実行し、処理D(101,113,12
5)の実行終了後は自プロセスを取りだした¥PRC5
もしくは¥WAIT(97,109,121)に分岐す
る。¥PRCSもしくは¥WAIT(97,109,1
21)では親プロセスであるメインプロセス1(81)
にとりだした子プロセスの実行が終了したことを通知し
該子プロセスを消滅させる。
メインプロセス1(81)で実行されていた¥WAIT
94は、金子プロセスすなわちサブプロセス2.3.4
(82,85,88)の終了通知をうけると呼びもとに
分岐して実行を終了する。
94は、金子プロセスすなわちサブプロセス2.3.4
(82,85,88)の終了通知をうけると呼びもとに
分岐して実行を終了する。
メインプロセス1 (81)は続いて処理E95を実行
し、エピローグ処理部分69に分岐する。エピローグ処
理部分69の処理は、前述の実行時ルーチン¥DETA
CH17を呼ぶ以外は従来の逐次実行プログラムと同一
である。
し、エピローグ処理部分69に分岐する。エピローグ処
理部分69の処理は、前述の実行時ルーチン¥DETA
CH17を呼ぶ以外は従来の逐次実行プログラムと同一
である。
第3図のデータ領域62はプロセス中断時のレジスタの
退避領域や、変数や配列の領域、パラメタリスト領域な
ど従来の逐次実行プログラムのデータ領域と同一の領域
から構成されている。
退避領域や、変数や配列の領域、パラメタリスト領域な
ど従来の逐次実行プログラムのデータ領域と同一の領域
から構成されている。
並列プロセス実行情報部分(63,64)には、並列プ
ロセスオブジェクト対応に以下の情報がある。
ロセスオブジェクト対応に以下の情報がある。
並列プロセスオブジェクト先頭アドレスフィールド(7
1,74)はオブジェクトモジュール中命令語領域にあ
る対応する並列プロセスオブジェクトの先頭アドレスを
示す。並列プロセスオブジェクトで必要なワークデータ
領域の大きさフィールド(72,75)は、該並列プロ
セスで並列実行に必要な一時変数、変数、配列のために
必要なワークデータ領域の大きさを示す。並列プロセス
オブジェクトで必要なワークデータ領域における初期値
情報フィールド(73,76)は、ワークデータ領域が
1つのペースレジスタで届かない大きさの場合の、ワー
クデータ領域のベースアドレス値などを示す。
1,74)はオブジェクトモジュール中命令語領域にあ
る対応する並列プロセスオブジェクトの先頭アドレスを
示す。並列プロセスオブジェクトで必要なワークデータ
領域の大きさフィールド(72,75)は、該並列プロ
セスで並列実行に必要な一時変数、変数、配列のために
必要なワークデータ領域の大きさを示す。並列プロセス
オブジェクトで必要なワークデータ領域における初期値
情報フィールド(73,76)は、ワークデータ領域が
1つのペースレジスタで届かない大きさの場合の、ワー
クデータ領域のベースアドレス値などを示す。
以下、第6図(a)〜(C)を用い実行時ルーチン¥A
TTACHI 6.¥DETACHI 7の処理を説明
する。 ¥ATTACH16は処理151においてシス
テム内に多すぎるTCBを生成してシステムのスループ
ッ1−を低下させることを避けるために、サブタスクの
生成に先立ち追加獲得可能なTCB数をO8に問い合わ
せるマクロ(NTCB)を発行する。NTCB 158
を実行するO8は処理155においてシステム内に存在
する全TCB数やそのうち実行可能状態のTCBO数、
およびそれらによるCPU*源や入出力資源の使用状況
などを調べ、処理156において問い合わせてきたジョ
ブに対し追加付与可能なTCB数を計算し、引数に返す
。¥ATTACHI 6では処理152において得られ
た追加獲得可能TCB数と、ユーザがJCLにて指定し
た生成要求サブタスク数との小さい方を変数NPに設定
し、処理153においてサブタスクの生成をO8に依頼
する公知のATTACHマクロをNP回発行する。AT
TACHマクロの発行時には入口アドレスとして¥PR
C320の入口アドレスを指定して、サブタスクに¥P
RC820を実行させる。処理154においてATTA
CHマクロの実行によりO8から返されるNP個のTC
Bの先頭アドレスおよび変数NPをリストにし、リスト
の先頭アドレスを引数ADRLSTに返す。
TTACHI 6.¥DETACHI 7の処理を説明
する。 ¥ATTACH16は処理151においてシス
テム内に多すぎるTCBを生成してシステムのスループ
ッ1−を低下させることを避けるために、サブタスクの
生成に先立ち追加獲得可能なTCB数をO8に問い合わ
せるマクロ(NTCB)を発行する。NTCB 158
を実行するO8は処理155においてシステム内に存在
する全TCB数やそのうち実行可能状態のTCBO数、
およびそれらによるCPU*源や入出力資源の使用状況
などを調べ、処理156において問い合わせてきたジョ
ブに対し追加付与可能なTCB数を計算し、引数に返す
。¥ATTACHI 6では処理152において得られ
た追加獲得可能TCB数と、ユーザがJCLにて指定し
た生成要求サブタスク数との小さい方を変数NPに設定
し、処理153においてサブタスクの生成をO8に依頼
する公知のATTACHマクロをNP回発行する。AT
TACHマクロの発行時には入口アドレスとして¥PR
C320の入口アドレスを指定して、サブタスクに¥P
RC820を実行させる。処理154においてATTA
CHマクロの実行によりO8から返されるNP個のTC
Bの先頭アドレスおよび変数NPをリストにし、リスト
の先頭アドレスを引数ADRLSTに返す。
¥DETACHI 7では処理157において¥ATT
ACH16で返された引数ADRLSTを引数として受
けとり、そこに示されるTCBの消去をO8に依頼する
公知のD E T A CHマクロをNP回発行する。
ACH16で返された引数ADRLSTを引数として受
けとり、そこに示されるTCBの消去をO8に依頼する
公知のD E T A CHマクロをNP回発行する。
次にプロセス情報テーブル149の内容を示す第5図を
参照しつつ、タスクk (TCBk)において¥DIS
Pi8が実行されている場合の処理を第7図を使って説
明する。
参照しつつ、タスクk (TCBk)において¥DIS
Pi8が実行されている場合の処理を第7図を使って説
明する。
第5図の1nuseピツh 141は¥DISP18に
おいてプロセス情報テーブル149を作成した時に1に
設定され、該プロセス情報テーブル149から生成され
た全ての子プロセスの実行が終了した時に¥WA I
T 19によって0が設定されるビットであり、該ビッ
トが1である間は該プロセス情報テーブルエリアは使用
中である。
おいてプロセス情報テーブル149を作成した時に1に
設定され、該プロセス情報テーブル149から生成され
た全ての子プロセスの実行が終了した時に¥WA I
T 19によって0が設定されるビットであり、該ビッ
トが1である間は該プロセス情報テーブルエリアは使用
中である。
次フリーエリアポインタフィールド142はタスクに用
のローカルデータ域(30,35)(第1図)内でプロ
セス情報テーブルエリア(31゜36)どうしをチエイ
ンするものであり、次のプロセス情報テーブルエリアの
先頭アドレスを保持している。
のローカルデータ域(30,35)(第1図)内でプロ
セス情報テーブルエリア(31゜36)どうしをチエイ
ンするものであり、次のプロセス情報テーブルエリアの
先頭アドレスを保持している。
並列プロセスキューポインタフィールド143は並列プ
ロセスキュー25(第1図)内のプロセス情報テーブル
どうしをチエインするものであり、該プロセス情報テー
ブル149が並列プロセスキュー内の最後のエントリで
あれば0が、途中のエントリであれば次のプロセス情報
テーブルの先頭アドレスが設定される。
ロセスキュー25(第1図)内のプロセス情報テーブル
どうしをチエインするものであり、該プロセス情報テー
ブル149が並列プロセスキュー内の最後のエントリで
あれば0が、途中のエントリであれば次のプロセス情報
テーブルの先頭アドレスが設定される。
第7図の処理161において、タスクに用のプロセス情
報テーブル用フリーエリア(31,36)からプロセス
情報テーブルエリアを獲得する。フリーエリアポインタ
k (32,37)はプロセス情報テーブル用フリーエ
リアをどこまで使用したかを示すポインタであり、処理
162ではそれにより示されるプロセス情報テーブル1
49内の次フリーエリアポインタフィールド143の値
を新たにフリーエリアポインタk(32,37)に設定
することにより次のプロセス情報テーブルエリアのアド
レスを得、処理163では該プロセス情報テーブルエリ
ア149内のi n u s eピッ1−141が0が
どうか調べる。1nuseビツト141が1であれば該
プロセス情報テーブル149は使用中であるから再び処
理162を実行する。処理163において1nuseピ
ツh 141が0であれば1nuseビツト141に1
を設定して該プロセス情報テーブルエリアが使用中であ
ることを表示する。
報テーブル用フリーエリア(31,36)からプロセス
情報テーブルエリアを獲得する。フリーエリアポインタ
k (32,37)はプロセス情報テーブル用フリーエ
リアをどこまで使用したかを示すポインタであり、処理
162ではそれにより示されるプロセス情報テーブル1
49内の次フリーエリアポインタフィールド143の値
を新たにフリーエリアポインタk(32,37)に設定
することにより次のプロセス情報テーブルエリアのアド
レスを得、処理163では該プロセス情報テーブルエリ
ア149内のi n u s eピッ1−141が0が
どうか調べる。1nuseビツト141が1であれば該
プロセス情報テーブル149は使用中であるから再び処
理162を実行する。処理163において1nuseピ
ツh 141が0であれば1nuseビツト141に1
を設定して該プロセス情報テーブルエリアが使用中であ
ることを表示する。
処理165においては獲得したプロセス情報テーブル1
49に、実行時に決定される並列プロセスの実行に必要
な情報を設定する。並列プロセス実行情報アドレスフィ
ールド144には、コンパイラの生成した並列プロセス
の実行に必要な情報を保持するため、引数として入力さ
れた並列プロセス実行情報(63,64)の先頭アドレ
スを設定する。ループ分割数LCフィールド145には
該並列プロセス情報テーブルから幾つの子プロセスを生
成するかを、本ジョブにおいて生成したサブタスク数や
サブプロセス数、プロセスのロードバランスなどを考慮
して実行時に決定し設定する。
49に、実行時に決定される並列プロセスの実行に必要
な情報を設定する。並列プロセス実行情報アドレスフィ
ールド144には、コンパイラの生成した並列プロセス
の実行に必要な情報を保持するため、引数として入力さ
れた並列プロセス実行情報(63,64)の先頭アドレ
スを設定する。ループ分割数LCフィールド145には
該並列プロセス情報テーブルから幾つの子プロセスを生
成するかを、本ジョブにおいて生成したサブタスク数や
サブプロセス数、プロセスのロードバランスなどを考慮
して実行時に決定し設定する。
第4図におけるサブプロセス2.3.4(82,85,
88)を生成するときはLCに3を設定する。¥PRC
820や¥WAIT19は、ループ分割数LC145を
1ずつ減算していくことにより並列プロセスキュー25
からサブプロセスを1つずつ取りだす。
88)を生成するときはLCに3を設定する。¥PRC
820や¥WAIT19は、ループ分割数LC145を
1ずつ減算していくことにより並列プロセスキュー25
からサブプロセスを1つずつ取りだす。
プロセス終了ポストフラグフィール146は、その値を
1減算することによって、各々の子プロセスの終了を通
知するための連絡領域であり、初期値として上記ループ
分割数を設定する。
1減算することによって、各々の子プロセスの終了を通
知するための連絡領域であり、初期値として上記ループ
分割数を設定する。
事象制御ブロックであるプロセス終了ポスト/ウェイト
ECB (Event ControlBlock)
フィールド147もまた子プロセスの終了を通知するた
めの連絡領域である。該タスクkにおいて¥DISP1
8に続いて実行される¥WAIT19は、一定時間待っ
ても金子プロセスが終了せずまた新しいサブプロセスも
生成されない場合はWA I Tマクロを発行する。そ
の場合に実行を最後に終了した子プロセスが通知してく
るのがプロセス終了ボスト/ウェイトECBフィールド
147であり、該子プロセスがPO8Tマクロを発行す
べきか否かを表示するのがプロセス終了ポスト/ウェイ
トマクロ発行フラグ148であり、いずれも初期値とし
て0を設定する。
ECB (Event ControlBlock)
フィールド147もまた子プロセスの終了を通知するた
めの連絡領域である。該タスクkにおいて¥DISP1
8に続いて実行される¥WAIT19は、一定時間待っ
ても金子プロセスが終了せずまた新しいサブプロセスも
生成されない場合はWA I Tマクロを発行する。そ
の場合に実行を最後に終了した子プロセスが通知してく
るのがプロセス終了ボスト/ウェイトECBフィールド
147であり、該子プロセスがPO8Tマクロを発行す
べきか否かを表示するのがプロセス終了ポスト/ウェイ
トマクロ発行フラグ148であり、いずれも初期値とし
て0を設定する。
処理166においては、値を設定したプロセス情報テー
ブルを並列プロセスキュー25に排他的に登録する。排
他制御が必要なのは、データの更新が複数のタスクで同
時に起こる可能性があるためである。例えば本発明の実
施例のように並列処理がネスティングしている場合は、
第4図に示すようにサブプロセス2 (82)とサブプ
ロセス3(85)で同時に¥DISP18が動作しうる
。
ブルを並列プロセスキュー25に排他的に登録する。排
他制御が必要なのは、データの更新が複数のタスクで同
時に起こる可能性があるためである。例えば本発明の実
施例のように並列処理がネスティングしている場合は、
第4図に示すようにサブプロセス2 (82)とサブプ
ロセス3(85)で同時に¥DISP18が動作しうる
。
キューへのエントリの排他的登録は公知の排他制御技術
により主記憶への排他的アクセス命令を使用して実現で
きる。主記憶への排他的アクセス命令としてはたとえば
HITACM−serisのC3(Compare
and Swap)命令などが挙げられる。
により主記憶への排他的アクセス命令を使用して実現で
きる。主記憶への排他的アクセス命令としてはたとえば
HITACM−serisのC3(Compare
and Swap)命令などが挙げられる。
前述の¥PRC320や¥WA’lT19は一定時間待
っても並列プロセスキューにプロセス情報テーブルが登
録されない時は、タスク対応のタスクウェイトフラグT
Wi(26,27)に1を設定してCPU資源の有効活
用のためWA I Tマクロを発行して該タスクを待ち
状態にさせる。処理167においては、上記タスクに対
してタスク対応のタスク1ECB (28,29)を連
絡領域に指定してWAITマクロを発行しているタスク
に対して、POSTマクロを発行し、待ち状態を解除す
ると共に新しいプロセス情報テーブル149が登録され
たことを通知する。
っても並列プロセスキューにプロセス情報テーブルが登
録されない時は、タスク対応のタスクウェイトフラグT
Wi(26,27)に1を設定してCPU資源の有効活
用のためWA I Tマクロを発行して該タスクを待ち
状態にさせる。処理167においては、上記タスクに対
してタスク対応のタスク1ECB (28,29)を連
絡領域に指定してWAITマクロを発行しているタスク
に対して、POSTマクロを発行し、待ち状態を解除す
ると共に新しいプロセス情報テーブル149が登録され
たことを通知する。
処理168においては獲得したプロセス情報テーブルの
先頭アドレスを第2引数PTBLに返し、¥DISP1
8の実行を終了する。
先頭アドレスを第2引数PTBLに返し、¥DISP1
8の実行を終了する。
次に¥PRCS20がタスクk (TCBk)で実行さ
れる場合の処理を第8図(a)、(b)を参照しつつ説
明する。
れる場合の処理を第8図(a)、(b)を参照しつつ説
明する。
処理181は並列プロセスキュー25の、先頭ポインタ
QH21が0か否かを判定する。0でない場合は以下処
理183〜192を実行する。先頭ポインタQH21が
Oでないとはプロセス情報テーブルが並列プロセスキュ
ー25中に存在することを意味する。
QH21が0か否かを判定する。0でない場合は以下処
理183〜192を実行する。先頭ポインタQH21が
Oでないとはプロセス情報テーブルが並列プロセスキュ
ー25中に存在することを意味する。
処理183は先頭ポインタQH21で示されるプロセス
情報テーブルから生成されるサブプロセスを排他的に取
り出す。具体的にはプロセス情報テーブル149内のル
ープ分割数LC145を排他的に1減算する。排他制御
が必要なのは複数のタスクにより¥PRC320や¥W
AIT19が実行されLCの減算が同時に起こりうるか
らである。サブプロセスの実行時には、減算後のLCの
値を第4図におけるLCIやLC2として使用する。
情報テーブルから生成されるサブプロセスを排他的に取
り出す。具体的にはプロセス情報テーブル149内のル
ープ分割数LC145を排他的に1減算する。排他制御
が必要なのは複数のタスクにより¥PRC320や¥W
AIT19が実行されLCの減算が同時に起こりうるか
らである。サブプロセスの実行時には、減算後のLCの
値を第4図におけるLCIやLC2として使用する。
処理184は幾つめのサブプロセスを取りだしたかを調
べるもので、減算後のLCの値が負の場合は他タスクの
更新により既に全てのサブプロセスが取り出されたこと
を意味するので再び処理181を実行する。減算後のL
Cの値が正の場合はサブプロセスを獲得したことを意味
し処理186を実行する。減算後のLCの値がOの場合
は該プロセス情報テーブル149から生成された最後の
サブプロセスを獲得したことを意味するので、並列プロ
セスキュー25からプロセス情報テーブル149を排他
的に取り外す処理185を実行し、その後処理186を
実行する。キューからエントリを取りはずす処理は公知
の排他制御技術により前述のC8命令などを使用して実
現できる。
べるもので、減算後のLCの値が負の場合は他タスクの
更新により既に全てのサブプロセスが取り出されたこと
を意味するので再び処理181を実行する。減算後のL
Cの値が正の場合はサブプロセスを獲得したことを意味
し処理186を実行する。減算後のLCの値がOの場合
は該プロセス情報テーブル149から生成された最後の
サブプロセスを獲得したことを意味するので、並列プロ
セスキュー25からプロセス情報テーブル149を排他
的に取り外す処理185を実行し、その後処理186を
実行する。キューからエントリを取りはずす処理は公知
の排他制御技術により前述のC8命令などを使用して実
現できる。
処理186ではサブプロセス実行に必要なワークデータ
領域を、該プロセス情報テーブル149から指される並
列プロセス実行情報(63,64)中にある必要ワーク
データ領域の大きさフィールド(72,75)を読みだ
し、その値の大きさの領域をタスクに用のローカルデー
タ域(33,38)に確保する。ワークデータ領域とは
、並列プロセス実行のために新たに必要となる領域で、
サブプロセス2〜10(82〜90)のループ制御変数
やレジスタが不足するために必要な一時変数などである
。確保はワークデータ領域ポインタk(43,39)(
第1図)の値にワークデータ領域の大きさフィールド(
72,75)の値を加算することにより行い、ワークデ
ータ領域(33,38)の確保/解放管理はスタック的
に行われる。
領域を、該プロセス情報テーブル149から指される並
列プロセス実行情報(63,64)中にある必要ワーク
データ領域の大きさフィールド(72,75)を読みだ
し、その値の大きさの領域をタスクに用のローカルデー
タ域(33,38)に確保する。ワークデータ領域とは
、並列プロセス実行のために新たに必要となる領域で、
サブプロセス2〜10(82〜90)のループ制御変数
やレジスタが不足するために必要な一時変数などである
。確保はワークデータ領域ポインタk(43,39)(
第1図)の値にワークデータ領域の大きさフィールド(
72,75)の値を加算することにより行い、ワークデ
ータ領域(33,38)の確保/解放管理はスタック的
に行われる。
処理187はワークデータ領域先頭アドレスを。
オブジェクI−中でワークデータ領域ベース1ノジスタ
として使用しているレジスタに設定し、プロセス情報テ
ーブル149から指される並列プロセス実行情報(63
,64)中にある並列プロセスオブジェクト先頭アドレ
スフィールド(71,74)を読みだし、そのアドレス
に分岐を行い、サブプロセスを実行する。
として使用しているレジスタに設定し、プロセス情報テ
ーブル149から指される並列プロセス実行情報(63
,64)中にある並列プロセスオブジェクト先頭アドレ
スフィールド(71,74)を読みだし、そのアドレス
に分岐を行い、サブプロセスを実行する。
処理188はサブプロセス実行終了後、処理186で確
保したワークデータ領域(33,38)を解放する。解
放はワークデータ領域ポインタk(34,39)の値か
らワークデータ領域の大きさフィールド(72,75)
の値を減算することにより行う。
保したワークデータ領域(33,38)を解放する。解
放はワークデータ領域ポインタk(34,39)の値か
らワークデータ領域の大きさフィールド(72,75)
の値を減算することにより行う。
処理189〜192は該子プロセスの終了を親プロセス
に通知する。子プロセスの終了通知は処理188におい
てプロセス情報テーブル149中のプロセス終了ポスト
フラグ146から排他的に1減算することにより行う。
に通知する。子プロセスの終了通知は処理188におい
てプロセス情報テーブル149中のプロセス終了ポスト
フラグ146から排他的に1減算することにより行う。
プロセス終了ポストフラグ146は初期値としてループ
分割数LCが設定されており、値がOになったら全ての
子プロセスが終了したことを示す。処理190は減算後
のプロセス終了ポストフラグ146が0であるかを調べ
ることにより該子プロセスが金子プロセス中最後に実行
を終了したプロセスであるかを調べる60である場合は
最後の子プロセスであるので、処理191を実行してプ
ロセス終了ポスト/ウェイトマクロ発行フラグ148が
1であるかをさらに調べることにより親プロセスがWA
ITマクロを発行してしているかを調べる。1である場
合はWA工Tマクロを発行しているので処理192を実
行して親プロセスに対しプロセス情報テーブル149中
のプロセス終了ポスト/ウェイl−E CB147を連
絡領域としてPOSTマクロを発行して、再び処理18
1を実行する。処理190においてプロセス終了ポスト
フラグ146が0でなかった場合および処理191にお
いてプロセス終了ボスト/ウェイトマクロ発行フラグ1
48が1でなかった場合は、親プロセスに対しPO3T
マクロを発行する必要がないので再び処理181を実行
する。
分割数LCが設定されており、値がOになったら全ての
子プロセスが終了したことを示す。処理190は減算後
のプロセス終了ポストフラグ146が0であるかを調べ
ることにより該子プロセスが金子プロセス中最後に実行
を終了したプロセスであるかを調べる60である場合は
最後の子プロセスであるので、処理191を実行してプ
ロセス終了ポスト/ウェイトマクロ発行フラグ148が
1であるかをさらに調べることにより親プロセスがWA
ITマクロを発行してしているかを調べる。1である場
合はWA工Tマクロを発行しているので処理192を実
行して親プロセスに対しプロセス情報テーブル149中
のプロセス終了ポスト/ウェイl−E CB147を連
絡領域としてPOSTマクロを発行して、再び処理18
1を実行する。処理190においてプロセス終了ポスト
フラグ146が0でなかった場合および処理191にお
いてプロセス終了ボスト/ウェイトマクロ発行フラグ1
48が1でなかった場合は、親プロセスに対しPO3T
マクロを発行する必要がないので再び処理181を実行
する。
処理181において並列プロセスキューの先頭アドレス
QH21がOである場合は処理182を実行し、一定の
待ち時間期限に到達したかを調べる。期限時間にまだ到
達していないならば再び処理181を実行し、並列プロ
セスキュー25に新しいプロセス情報テーブル149が
31されてQH21が0でなくなるか、期限時間に到達
するかまで処理181の実行を繰り返す。期限時間は、
システムが現在多重ジョブ環境で運営されているか等の
システムの稼働状況や、ユーザの指定したジョブクラス
などを考慮して¥PRC820により決定される。
QH21がOである場合は処理182を実行し、一定の
待ち時間期限に到達したかを調べる。期限時間にまだ到
達していないならば再び処理181を実行し、並列プロ
セスキュー25に新しいプロセス情報テーブル149が
31されてQH21が0でなくなるか、期限時間に到達
するかまで処理181の実行を繰り返す。期限時間は、
システムが現在多重ジョブ環境で運営されているか等の
システムの稼働状況や、ユーザの指定したジョブクラス
などを考慮して¥PRC820により決定される。
処理182において期限時間に到達した場合。
システムのスループットを低下させないために自らCP
U使用権を手離す処理193を実行する。
U使用権を手離す処理193を実行する。
処理193では該タスクkがWAITマクロを発行中で
あることを表示するタスク対応のタスクウェイトフラグ
TWk (26,27)に1を設定しタスク対応のタス
クkECB (28,29)を連絡領域としてWAIT
マクロを発行する。
あることを表示するタスク対応のタスクウェイトフラグ
TWk (26,27)に1を設定しタスク対応のタス
クkECB (28,29)を連絡領域としてWAIT
マクロを発行する。
他タスクで実行される¥DISP18によって新しいプ
ロセス情報テーブル149が生成された時にはタスクk
ECB (28,29)に通知がなされ、タスクにはC
PU使用権を取り戻し、処理194から¥PRC820
の実行を再開する。処理194ではWAITマクロ発行
中ではなくなったことを表示するためにタスクウェイト
フラグTWk (26,27)にOを設定するとともに
、連絡領域タスクkECB (28,29)に再使用に
そなえてOを設定し、再び処理181を実行する。
ロセス情報テーブル149が生成された時にはタスクk
ECB (28,29)に通知がなされ、タスクにはC
PU使用権を取り戻し、処理194から¥PRC820
の実行を再開する。処理194ではWAITマクロ発行
中ではなくなったことを表示するためにタスクウェイト
フラグTWk (26,27)にOを設定するとともに
、連絡領域タスクkECB (28,29)に再使用に
そなえてOを設定し、再び処理181を実行する。
次にタスクk (TCBk)で¥WAIT19が実行さ
れる場合の処理を第9図(a)、(b)を使用して説明
する。
れる場合の処理を第9図(a)、(b)を使用して説明
する。
処理211はプロセス情報テーブル149中のプロセス
終了ポストフラグ146が0であるかを調べることによ
り生成した全ての子プロセスが終了したかを調べる。終
了している場合は処理214を実行し、プロセス情報テ
ーブル149中の1nuseビツト141を0にするこ
とにより該プロセス情報テーブルエリアを解放し、タス
クkにおいて後に¥DISP18を実行する場合にそな
え、¥WAIT19の実行を終了する。処理211にお
いてまだ終了していない子プロセスがある場合は、処理
212を実行して並列プロセスキュー先頭アドレスQH
21がOでないかを調べることにより並列プロセスキュ
ー25内にプロセス情報テーブル149が存在するかを
調べ、存在する場合は処理215から224を実行して
新しいプロセスを実行する。処理215から224の処
理内容は、¥PRC820の処理を説明した第8図(a
)、(b)における処理183から192と同一である
。
終了ポストフラグ146が0であるかを調べることによ
り生成した全ての子プロセスが終了したかを調べる。終
了している場合は処理214を実行し、プロセス情報テ
ーブル149中の1nuseビツト141を0にするこ
とにより該プロセス情報テーブルエリアを解放し、タス
クkにおいて後に¥DISP18を実行する場合にそな
え、¥WAIT19の実行を終了する。処理211にお
いてまだ終了していない子プロセスがある場合は、処理
212を実行して並列プロセスキュー先頭アドレスQH
21がOでないかを調べることにより並列プロセスキュ
ー25内にプロセス情報テーブル149が存在するかを
調べ、存在する場合は処理215から224を実行して
新しいプロセスを実行する。処理215から224の処
理内容は、¥PRC820の処理を説明した第8図(a
)、(b)における処理183から192と同一である
。
処理212において並列プロセスキュー25内にプロセ
ス情報テーブル149が存在しない場合は、処理213
を実行し、一定の待ち時間期限に到達したかを調べる。
ス情報テーブル149が存在しない場合は、処理213
を実行し、一定の待ち時間期限に到達したかを調べる。
期限時間にまだ到達していないならば再び処理211を
実行し、全ての子プロセスの実行が終了してプロセス終
了ポストフラグ146がOとなるか、並列プロセスキュ
ー25に新しいプロセス情報テーブル149が登録され
てQH21がOでなくなるか、期限時間に到達するかま
で処理211〜213の実行を繰り返す。
実行し、全ての子プロセスの実行が終了してプロセス終
了ポストフラグ146がOとなるか、並列プロセスキュ
ー25に新しいプロセス情報テーブル149が登録され
てQH21がOでなくなるか、期限時間に到達するかま
で処理211〜213の実行を繰り返す。
期限時間は、システムが現在多重ジョブ環境で運営され
ているか等のシステムの稼働状況や、ユーザの指定した
ジョブクラス、およびコンパイラが並列プロセスの予想
実行時間などから決定した待ち時間期限である第一引数
LIMITなどを考慮して¥WAIT19により決定さ
れる。
ているか等のシステムの稼働状況や、ユーザの指定した
ジョブクラス、およびコンパイラが並列プロセスの予想
実行時間などから決定した待ち時間期限である第一引数
LIMITなどを考慮して¥WAIT19により決定さ
れる。
処理213において期限時間に到達した場合、システム
のスループットを低下させないために自らCPU使用権
を手離す処理225を実行する。
のスループットを低下させないために自らCPU使用権
を手離す処理225を実行する。
処理225では該タスクkがWAITマクロを発行中で
あることを表示するタスク対応のタスクウェイトフラグ
TWk (26,27)に1を設定し、また該親プロセ
スがWAITマクロを・発行中であることを表示するプ
ロセス情報テーブル149中のプロセス終了ポスト・/
ウェイトマクロ発行フラグ148に1を設定する。そし
て新しいサブプロセスが生成された場合および全ての子
プロセスが終了した場合のいずれにも連絡してもらえる
ように、タスクkに対応するタスクkECB (28,
29)およびプロセス情報テーブル149中のプロセス
終了ポスト/ウェイトECB147の双方を連絡領域と
してWA I Tマクロを発行する。
あることを表示するタスク対応のタスクウェイトフラグ
TWk (26,27)に1を設定し、また該親プロセ
スがWAITマクロを・発行中であることを表示するプ
ロセス情報テーブル149中のプロセス終了ポスト・/
ウェイトマクロ発行フラグ148に1を設定する。そし
て新しいサブプロセスが生成された場合および全ての子
プロセスが終了した場合のいずれにも連絡してもらえる
ように、タスクkに対応するタスクkECB (28,
29)およびプロセス情報テーブル149中のプロセス
終了ポスト/ウェイトECB147の双方を連絡領域と
してWA I Tマクロを発行する。
新しいサブプロセスが生成された時もしくは全ての子プ
ロセスが終了した時には、タスクkECB (28,2
9)もしくはプロセス終了ポスト/ウェイトECB14
7に通知がなされ、タスクにはCPU使用権を取り戻し
、処理226から¥WAIT19の実行を再開する。処
理226ではプロセス終了ポスト/ウェイトECB14
7に対して通知があったのかを調べ、その場合はプロセ
ス情報テーブルエリアを解放する処理214を実行する
。一方タスクkECB (28,29)に対する通知が
あった場合は処理227を実行し、タスクウェイトフラ
グTWI< (26,27)およびタスクkECE (
28,29)にOを設定して再び処理211を実行する
。
ロセスが終了した時には、タスクkECB (28,2
9)もしくはプロセス終了ポスト/ウェイトECB14
7に通知がなされ、タスクにはCPU使用権を取り戻し
、処理226から¥WAIT19の実行を再開する。処
理226ではプロセス終了ポスト/ウェイトECB14
7に対して通知があったのかを調べ、その場合はプロセ
ス情報テーブルエリアを解放する処理214を実行する
。一方タスクkECB (28,29)に対する通知が
あった場合は処理227を実行し、タスクウェイトフラ
グTWI< (26,27)およびタスクkECE (
28,29)にOを設定して再び処理211を実行する
。
(実施例2)
次に、子プロセスの終了とサブプロセスの生成という2
つの事象の成立を1つのフラグで代表させて待つ他の実
施例を第10図から第14図を参照しながら説明する。
つの事象の成立を1つのフラグで代表させて待つ他の実
施例を第10図から第14図を参照しながら説明する。
第10図は全体構成を示す図である。第1図と異なるの
は、2つの事象の成立を待つためのタスク対応のタスク
フラグ46.47 (TFIO,TFil)、¥DIS
P18がプロセス情報テーブル149作成時に各サブプ
ロセスに対してジョブ全体で一意にプロセス番号を与え
るために使用するプロセスより順序番号P より5EQ
45、および現在各タスクで¥WAIT19を実行中の
プロセスのプロセス番号を保持するためのタスク対応の
実行プロセスIDフィールドEXPIDi (48,4
9)が追加されている点である。実行プロセスIDフィ
ールドEXPIDi (48,49)には¥WA I
T l 9実行時以外は○が設定されている。¥WA
IT19では第9図(a)、(b)に示したようにプロ
セス終了ポストフラグ146と並列プロセスキュー先頭
アドレスQH21のいずれかが変化するのを待つのでは
なく、タスクフラグ1゛Fi (46,47)が変化
するのを待つ。
は、2つの事象の成立を待つためのタスク対応のタスク
フラグ46.47 (TFIO,TFil)、¥DIS
P18がプロセス情報テーブル149作成時に各サブプ
ロセスに対してジョブ全体で一意にプロセス番号を与え
るために使用するプロセスより順序番号P より5EQ
45、および現在各タスクで¥WAIT19を実行中の
プロセスのプロセス番号を保持するためのタスク対応の
実行プロセスIDフィールドEXPIDi (48,4
9)が追加されている点である。実行プロセスIDフィ
ールドEXPIDi (48,49)には¥WA I
T l 9実行時以外は○が設定されている。¥WA
IT19では第9図(a)、(b)に示したようにプロ
セス終了ポストフラグ146と並列プロセスキュー先頭
アドレスQH21のいずれかが変化するのを待つのでは
なく、タスクフラグ1゛Fi (46,47)が変化
するのを待つ。
コンパイラが生成するオブジェクトモジュール40は第
2図と同一である。
2図と同一である。
O86は第1図と同様ユーザ空間ASCB 1(10)
およびメインタスク゛rcB10 (li)を生成する
。メインプログラムはメインタスク1゛CBIO(11
)で実行開始され、プロローグ処理65においては、第
6図で説明したのと同一の実行時ルーチン¥ATTAC
H16を呼び、サブタスクTCBII (12)が生成
される。サブタスクTCBII (12)は、新しいサ
ブプロセスの生成を待ち、サブプロセスを取りだして実
行する実行時ルーチン¥PRC320を実行する。¥P
RC820では子プロセスの終了をプロセス終了ポスト
フラグ146に通知するという第8図(a)、(b)の
処理に追加して、あるタスクが現在¥WAIT19を実
行中の親プロセスを実行中であれば該タスクに対応する
タスクフラグTFi (46゜47)にも通知する。
およびメインタスク゛rcB10 (li)を生成する
。メインプログラムはメインタスク1゛CBIO(11
)で実行開始され、プロローグ処理65においては、第
6図で説明したのと同一の実行時ルーチン¥ATTAC
H16を呼び、サブタスクTCBII (12)が生成
される。サブタスクTCBII (12)は、新しいサ
ブプロセスの生成を待ち、サブプロセスを取りだして実
行する実行時ルーチン¥PRC320を実行する。¥P
RC820では子プロセスの終了をプロセス終了ポスト
フラグ146に通知するという第8図(a)、(b)の
処理に追加して、あるタスクが現在¥WAIT19を実
行中の親プロセスを実行中であれば該タスクに対応する
タスクフラグTFi (46゜47)にも通知する。
あるタスクで親プロセスが¥WAIT19を実行中であ
るかは実行プロセスIDフィールドEXPIDi (
48,49)を参照して調べる。
るかは実行プロセスIDフィールドEXPIDi (
48,49)を参照して調べる。
プロローグ処理65の後実行されるメインプロセスの実
行が並列実行部分の直前に達したら、プロセス情報テー
ブル149の作成と並列プロセスキューへの登録および
他タスクへのプロセス情報テーブル149登録の通知を
行う実行時ルーチン¥DISP18を呼ぶ。¥DISP
18では第7図の処理に追加して、各サブプロセスへの
プロセス番号の付与、実行時ルーチン¥WAIT19を
実行しながらタスクフラグTFi (46,47)の
変化を待っているプロセスに対するプロセス情報テーブ
ル149登録の通知などを行う。
行が並列実行部分の直前に達したら、プロセス情報テー
ブル149の作成と並列プロセスキューへの登録および
他タスクへのプロセス情報テーブル149登録の通知を
行う実行時ルーチン¥DISP18を呼ぶ。¥DISP
18では第7図の処理に追加して、各サブプロセスへの
プロセス番号の付与、実行時ルーチン¥WAIT19を
実行しながらタスクフラグTFi (46,47)の
変化を待っているプロセスに対するプロセス情報テーブ
ル149登録の通知などを行う。
プロセス情報テーブル149を作成するためのフリーエ
リア(31,36)および並列プロセスキュー25の構
成は、第1図と同一である。
リア(31,36)および並列プロセスキュー25の構
成は、第1図と同一である。
¥DISP18の実行が終了するとメインプロセスは全
ての子プロセスの実行終了もしくは並列プロセスキュー
25への新しいプロセス情報テーブル149の登録を待
つ実行時ライブラリ¥WAIT19を呼ぶ。¥WAIT
19では第9図に示したようにプロセス終了ポストフラ
グ146と並列プロセスキュー先頭アドレスQ H21
のいずれかが変化するのを待つのではなく、タスクフラ
グTFi (46,47)が変化するのを待つ。
ての子プロセスの実行終了もしくは並列プロセスキュー
25への新しいプロセス情報テーブル149の登録を待
つ実行時ライブラリ¥WAIT19を呼ぶ。¥WAIT
19では第9図に示したようにプロセス終了ポストフラ
グ146と並列プロセスキュー先頭アドレスQ H21
のいずれかが変化するのを待つのではなく、タスクフラ
グTFi (46,47)が変化するのを待つ。
¥WAIT19の実行が終了するとメインプロセスは逐
次実行オブジェクトの実行を再開し、エピローグ処理6
9においては生成したサブタスク12 (TCB 11
)を消滅させる第6図で説明したのと同一の実行時ルー
チン¥DETACH18が呼ばれプログラムが終了する
。
次実行オブジェクトの実行を再開し、エピローグ処理6
9においては生成したサブタスク12 (TCB 11
)を消滅させる第6図で説明したのと同一の実行時ルー
チン¥DETACH18が呼ばれプログラムが終了する
。
33.38は並列プロセス実行に必要なワークデータ領
域を確保するためのデータ領域であり、34.39はそ
のスタックポインタである。他ユーザ空間8.13 (
ASCBO,ASCB2)およびその中で実行されるタ
スク9.14 (TCBoo、TCB20)は本ジョブ
が多重ジョブ環境で実行される時○S6により生成され
る。
域を確保するためのデータ領域であり、34.39はそ
のスタックポインタである。他ユーザ空間8.13 (
ASCBO,ASCB2)およびその中で実行されるタ
スク9.14 (TCBoo、TCB20)は本ジョブ
が多重ジョブ環境で実行される時○S6により生成され
る。
次にプロセス情報テーブル149の内容を示す第11図
を参照しつつ、タスクk (TCBk)において¥DI
SP18が実行されている場合の処理を第12図を使っ
て説明する。
を参照しつつ、タスクk (TCBk)において¥DI
SP18が実行されている場合の処理を第12図を使っ
て説明する。
第11図の1nuseビツト141、次フリーエリアポ
インタフィールド142および並列プロセスキューポイ
ンタフィールド143の意味および設定内容と設定タイ
ミングは第5図と同一である。
インタフィールド142および並列プロセスキューポイ
ンタフィールド143の意味および設定内容と設定タイ
ミングは第5図と同一である。
第12図の処理331において、タスクに用のプロセス
情報テーブル用フリーエリアからプロセス情報テーブル
エリアを獲得する。この処理内容332〜334は第7
図の処理162〜164と同一である。
情報テーブル用フリーエリアからプロセス情報テーブル
エリアを獲得する。この処理内容332〜334は第7
図の処理162〜164と同一である。
処理335においては獲得したプロセス情報テーブル1
49に、実行時に決定される並列プロセスの実行に必要
な情報を設定する。並列プロセス実行情報アドレスフィ
ールド144、ループ分割数LCフィールド145、プ
ロセス終了ポストフラグフィールド146、プロセス終
了ボスト/ウェイトECBフィールド147およびプロ
セス終了ボスト/ウェイトマクロ発行フラグ148の意
味および保持内容は第5図と同一であり、第7図の処理
165で設定したのと同一の値を設定する。
49に、実行時に決定される並列プロセスの実行に必要
な情報を設定する。並列プロセス実行情報アドレスフィ
ールド144、ループ分割数LCフィールド145、プ
ロセス終了ポストフラグフィールド146、プロセス終
了ボスト/ウェイトECBフィールド147およびプロ
セス終了ボスト/ウェイトマクロ発行フラグ148の意
味および保持内容は第5図と同一であり、第7図の処理
165で設定したのと同一の値を設定する。
プロセスIDフィールド301は各サブプロセスにジョ
ブ内で一意のプロセス番号を与えるためのフィールドで
、¥DISP18実行時にはプロセスID順番号PID
SEQ45 (第1図)の内容を与える。¥PRC32
0もしくは¥WAIT19によるサブプロセス取りだし
時にプロセスIDフィールド301の内容を読みだし減
算後のLCの値と加算し、確保したワークデータ領域(
33,38)内に格納することによりプロセス番号はジ
ョブ内で一意の値となる。PIDSEQ45には作成中
のプロセス情報テーブル149から生成されるサブプロ
セス数即ちループ分割数を加算して値を更新しておくこ
とによりジョブ内に同じ値のプロセス番号は存在しなく
なる。
ブ内で一意のプロセス番号を与えるためのフィールドで
、¥DISP18実行時にはプロセスID順番号PID
SEQ45 (第1図)の内容を与える。¥PRC32
0もしくは¥WAIT19によるサブプロセス取りだし
時にプロセスIDフィールド301の内容を読みだし減
算後のLCの値と加算し、確保したワークデータ領域(
33,38)内に格納することによりプロセス番号はジ
ョブ内で一意の値となる。PIDSEQ45には作成中
のプロセス情報テーブル149から生成されるサブプロ
セス数即ちループ分割数を加算して値を更新しておくこ
とによりジョブ内に同じ値のプロセス番号は存在しなく
なる。
第4図のプロセスが生成、実行される場合を例にとって
プロセス番号の付与を説明する。メインプロセスのプロ
セス番号は標準値として1が与えられている。メインプ
ロセス1 (81)で実行される¥DISP93はプロ
セスIDフィールド301に2を与え、PIDSEQ4
5の値2にループ分割数3を加えた値5に更新しておく
。¥PRCSもしくは¥WAIT(97,109,12
1)によりメインプロセス1(81)の子プロセスが取
りだされる時には2にLCの値が加算され、それぞれプ
ロセス番号2.3.4をもつサブプロセス2.3.4
(82,85,88)が生成される。
プロセス番号の付与を説明する。メインプロセスのプロ
セス番号は標準値として1が与えられている。メインプ
ロセス1 (81)で実行される¥DISP93はプロ
セスIDフィールド301に2を与え、PIDSEQ4
5の値2にループ分割数3を加えた値5に更新しておく
。¥PRCSもしくは¥WAIT(97,109,12
1)によりメインプロセス1(81)の子プロセスが取
りだされる時には2にLCの値が加算され、それぞれプ
ロセス番号2.3.4をもつサブプロセス2.3.4
(82,85,88)が生成される。
サブプロセス2(82)による¥D工5P99の実行が
サブプロセス3.4 (85,88)によるものより早
かった場合、サブプロセス2(82)で実行される¥D
ISP99がPIDSEQ45の値5をプロセスIDフ
ィールド301に与え、PIDSEQ45には5にルー
プ分割数2を加えた値7を与えると、サブプロセス5.
6(83,84)が生成される。以下同様にしてサブプ
ロセス3.4(85,88)が¥DISPIII、12
3を実行すると各サブプロセスにはジョブ内で一意のプ
ロセス番号が与えられ、PIDSEQ45には最後に1
1が格納される。
サブプロセス3.4 (85,88)によるものより早
かった場合、サブプロセス2(82)で実行される¥D
ISP99がPIDSEQ45の値5をプロセスIDフ
ィールド301に与え、PIDSEQ45には5にルー
プ分割数2を加えた値7を与えると、サブプロセス5.
6(83,84)が生成される。以下同様にしてサブプ
ロセス3.4(85,88)が¥DISPIII、12
3を実行すると各サブプロセスにはジョブ内で一意のプ
ロセス番号が与えられ、PIDSEQ45には最後に1
1が格納される。
第11図の族プロセス番号PPIDフィールド302に
は¥DISP18を呼んだプロセスのワークデータ領域
(33,38)中のプロセス番号を読みだして与える。
は¥DISP18を呼んだプロセスのワークデータ領域
(33,38)中のプロセス番号を読みだして与える。
また親プロセス実行TCB#フィールド303には¥D
ISP18を実行中のタスク番号kを与える。該プロセ
ス情報テーブル149から生成されるサブプロセスは、
PPIDフィールド302を参照して実行終了を通知す
べき親プロセスのプロセス番号を知り、親プロセス実行
TCB#フィールド303で示されるタスりkに対応す
る実行プロセスIDkフィールド(48,49)の値と
比較して、該タスクkに対応するタスクフラグTFk(
46,47)に通知を行うべきかを判断する。上記の制
御を行うのは、タスクにでは上記¥DISP18を呼ん
だプロセスのみが実行されるわけではないため、無関係
なプロセスに子プロセス終了の通知を行ってしまうこと
を避けるためである。
ISP18を実行中のタスク番号kを与える。該プロセ
ス情報テーブル149から生成されるサブプロセスは、
PPIDフィールド302を参照して実行終了を通知す
べき親プロセスのプロセス番号を知り、親プロセス実行
TCB#フィールド303で示されるタスりkに対応す
る実行プロセスIDkフィールド(48,49)の値と
比較して、該タスクkに対応するタスクフラグTFk(
46,47)に通知を行うべきかを判断する。上記の制
御を行うのは、タスクにでは上記¥DISP18を呼ん
だプロセスのみが実行されるわけではないため、無関係
なプロセスに子プロセス終了の通知を行ってしまうこと
を避けるためである。
処理336においては第7図の処理166と同様に、値
を設定したプロセス情報テーブル149を並列プロセス
キュー25に排他的に登録する。
を設定したプロセス情報テーブル149を並列プロセス
キュー25に排他的に登録する。
処理337では、¥WA工T19においてタスクフラグ
TFi (46,47)を参照しながら新しいサブプロ
セスの生成もしくは子プロセスの終了通知を待っている
他タスクに対しプロセス情報テーブル149の登録を通
知するために、実行プロセスよりフィールド(48,4
9)にO以外が設定されているタスクに対応するタスク
フラグTFi (46,47)に通知を行う。第7図
においてこの処理が不要だったのは、¥WAIT19が
並列プロセスキュー先頭アドレスQH21を参照しなが
らサブプロセスの生成を待っており、処理166におい
てプロセス情報テーブル149を並列プロセスキュー2
5に登録すれば自動的にQH21の値が変化したためで
ある。
TFi (46,47)を参照しながら新しいサブプロ
セスの生成もしくは子プロセスの終了通知を待っている
他タスクに対しプロセス情報テーブル149の登録を通
知するために、実行プロセスよりフィールド(48,4
9)にO以外が設定されているタスクに対応するタスク
フラグTFi (46,47)に通知を行う。第7図
においてこの処理が不要だったのは、¥WAIT19が
並列プロセスキュー先頭アドレスQH21を参照しなが
らサブプロセスの生成を待っており、処理166におい
てプロセス情報テーブル149を並列プロセスキュー2
5に登録すれば自動的にQH21の値が変化したためで
ある。
処理338においては第7図の処理167と同様に、W
AITマクロ発行中のタスクに対しPOS Tマクロを
発行して新しいプロセス情報テーブル149が5lta
されたことを通知する。
AITマクロ発行中のタスクに対しPOS Tマクロを
発行して新しいプロセス情報テーブル149が5lta
されたことを通知する。
処理339においては第7図の処理138と同様に、獲
得したプロセス情報テーブル149の先頭アドレスを第
2引数PTBLに返し、¥DISP18の実行を終了す
る。
得したプロセス情報テーブル149の先頭アドレスを第
2引数PTBLに返し、¥DISP18の実行を終了す
る。
次に¥PRC820がタスクk (TCBk)で実行さ
れる場合の処理を第13図(a)、(b)を参照しつつ
説明する。
れる場合の処理を第13図(a)、(b)を参照しつつ
説明する。
処理351は第8図(a)の処理181と同様に、並列
プロセスキュー先頭ポインタQ H21がOか否かを判
定し、0でない場合は以下処理353〜365を実行す
る。先頭ポインタQH21が0でないとはプロセス情報
テーブル149が並列プロセスキュー25中に存在する
ことを意味する。
プロセスキュー先頭ポインタQ H21がOか否かを判
定し、0でない場合は以下処理353〜365を実行す
る。先頭ポインタQH21が0でないとはプロセス情報
テーブル149が並列プロセスキュー25中に存在する
ことを意味する。
処理353〜356は第8図(a)、(b)の処理18
3〜186と同様に、先頭ポインタQH21で示される
プロセス情報テーブル149から生成されるサブプロセ
スを排他的に取り呂し、必要ならばプロセス情報テーブ
ル149を並列プロセスキュー25から取り外した上で
ワークデータ領域を必要ワークデータ領域の大きさフィ
ールド(72,75)に示される大きさだけタスクに用
のローカルデータ域(30,35)に確保する。
3〜186と同様に、先頭ポインタQH21で示される
プロセス情報テーブル149から生成されるサブプロセ
スを排他的に取り呂し、必要ならばプロセス情報テーブ
ル149を並列プロセスキュー25から取り外した上で
ワークデータ領域を必要ワークデータ領域の大きさフィ
ールド(72,75)に示される大きさだけタスクに用
のローカルデータ域(30,35)に確保する。
処理357は、プロセス情報テーブル149中のプロセ
スよりフィールド301から読みだした値と減算後のL
Cの値を加算することによりプロセス番号を決定し、確
保したワークデータ領域(33,38)に格納する。
スよりフィールド301から読みだした値と減算後のL
Cの値を加算することによりプロセス番号を決定し、確
保したワークデータ領域(33,38)に格納する。
処理358〜359は第8図(b)の処理187〜18
8と同様に、並列プロセスオブジェクト先頭アドレスに
分岐を行い、サブプロセスを実行した後、確保したワー
クデータ領域(33,38)を解放する。
8と同様に、並列プロセスオブジェクト先頭アドレスに
分岐を行い、サブプロセスを実行した後、確保したワー
クデータ領域(33,38)を解放する。
処理360〜365は該子プロセスの終了を親プロセス
に通知する。処理360において第8図(b)の処理1
89と同様に、子プロセスの終了通知をプロセス情報テ
ーブル149中のプロセス終了ボストフラグ146から
排他的に1減算することにより行う。処理361は減算
後のプロセス終了ポストフラグ146がOであるかを調
べることにより該子プロセスが金子プロセス中最後に実
行を終了したプロセスであるかを調へる。Oである場合
は最後の子プロセスであるので、処理362を実行して
親プロセスがタスクで実行されていてかつ¥WA I
T 19を実行中であるかを調べる。
に通知する。処理360において第8図(b)の処理1
89と同様に、子プロセスの終了通知をプロセス情報テ
ーブル149中のプロセス終了ボストフラグ146から
排他的に1減算することにより行う。処理361は減算
後のプロセス終了ポストフラグ146がOであるかを調
べることにより該子プロセスが金子プロセス中最後に実
行を終了したプロセスであるかを調へる。Oである場合
は最後の子プロセスであるので、処理362を実行して
親プロセスがタスクで実行されていてかつ¥WA I
T 19を実行中であるかを調べる。
上記のためには、処理362においてプロセス情報テー
ブル149中の親プロセス実行TCI33フィールド3
03に示されるタスクに対応する実行プロセスID E
XPより (48,49)がプロセス情報テーブル14
9中の族プロセスIDフィールド302の値と等しいか
を調べる。等しければあるタスクで親プロセスが¥WA
IT19を実行中なので、処理363を実行して該タス
クに対応するタスクフラグ(46,47)に1を設定し
て金子プロセスが実行終了したことを通知し、処理35
1を再実行する。
ブル149中の親プロセス実行TCI33フィールド3
03に示されるタスクに対応する実行プロセスID E
XPより (48,49)がプロセス情報テーブル14
9中の族プロセスIDフィールド302の値と等しいか
を調べる。等しければあるタスクで親プロセスが¥WA
IT19を実行中なので、処理363を実行して該タス
クに対応するタスクフラグ(46,47)に1を設定し
て金子プロセスが実行終了したことを通知し、処理35
1を再実行する。
等しくなければ族プロセスによる¥WA I T 19
は実行中ではないので、さらに処理364を実行してプ
ロセス終了ポスト/ウェイトマクロ発行フラグ148が
1であるかを調べることにより族プロセスがWAITマ
クロを発行してしているかを調へる。1である場合はW
AITマクロを発行しているので処理365を実行して
族プロセスに対しプロセス情報テーブル149中のプロ
セス終了ポスト/ウェイトECB147を連絡領域とし
てPO5Tマクロを発行して、再び処理351を実行す
る。処理364においてプロセス終了ボスト/ウェイト
マクロ発行フラグが1でなかった場合は、族プロセスに
対しPO3Tマクロを発行する必要がないので再び処理
351を実行する。
は実行中ではないので、さらに処理364を実行してプ
ロセス終了ポスト/ウェイトマクロ発行フラグ148が
1であるかを調べることにより族プロセスがWAITマ
クロを発行してしているかを調へる。1である場合はW
AITマクロを発行しているので処理365を実行して
族プロセスに対しプロセス情報テーブル149中のプロ
セス終了ポスト/ウェイトECB147を連絡領域とし
てPO5Tマクロを発行して、再び処理351を実行す
る。処理364においてプロセス終了ボスト/ウェイト
マクロ発行フラグが1でなかった場合は、族プロセスに
対しPO3Tマクロを発行する必要がないので再び処理
351を実行する。
処理351において並列プロセスキュー25の先頭アド
レスQH21がOである場合は第8図(a)における処
理182〜181と同様に処理351〜352を実行し
、並列プロセスキュー25に新しいプロセス情報テーブ
ル149が登録されてQH21がOでなくなるが、期限
時間に到達するがまで処理351の実行を繰り返し1期
限時間に到達した場合は、WA I Tマクロを発行中
であることを表示するタスク対応のタスクウェイトフラ
グTWk (26,27)に1を設定しタスク対応のタ
スクkECB (28,29)を連絡領域としてWAI
Tマクロを発行する。¥PRC820では待つべき事象
が1つのため、タスクフラグTFkを参照せず直接QH
21を参照する。
レスQH21がOである場合は第8図(a)における処
理182〜181と同様に処理351〜352を実行し
、並列プロセスキュー25に新しいプロセス情報テーブ
ル149が登録されてQH21がOでなくなるが、期限
時間に到達するがまで処理351の実行を繰り返し1期
限時間に到達した場合は、WA I Tマクロを発行中
であることを表示するタスク対応のタスクウェイトフラ
グTWk (26,27)に1を設定しタスク対応のタ
スクkECB (28,29)を連絡領域としてWAI
Tマクロを発行する。¥PRC820では待つべき事象
が1つのため、タスクフラグTFkを参照せず直接QH
21を参照する。
新しいプロセス情報テーブル149が生成された時には
タスクkECB (28,29)に通知がなされ、処理
367から¥PRC820の実行が再開される。処理3
67では第8図(a)の処理194と同様にタスクウェ
イトフラグTWk (26゜27)とタスクkECB
(28,29)に再使用にそなえて0を設定し、再び処
理351を実行する。
タスクkECB (28,29)に通知がなされ、処理
367から¥PRC820の実行が再開される。処理3
67では第8図(a)の処理194と同様にタスクウェ
イトフラグTWk (26゜27)とタスクkECB
(28,29)に再使用にそなえて0を設定し、再び処
理351を実行する。
次にタスクk (TCBk)で¥WAIT19が実行さ
れる場合の処理を第14図(a) 、 (b)を使用し
て説明する。
れる場合の処理を第14図(a) 、 (b)を使用し
て説明する。
処理381はプロセス情報テーブル149中のプロセス
終了ポストフラグ146が0であるかを調べることによ
り生成した全ての子プロセスが終了したかを調べる。終
了している場合は処理383を実行し、プロセス情報テ
ーブル149中の1nuseビツト141をOにするこ
とにより該プロセス情報テーブルエリアを解放し、タス
クkにおいて後に¥DISP18を実行する場合にそな
えて、¥WAIT19に実行を終了する。処理381に
おいてまだ終了していない子プロセスがある場合は、処
理382を実行して並列プロセスキュー先頭アドレスQ
H21がOでないかを調べることにより並列プロセスキ
ュー25内にプロセス情報テーブル149が存在するか
を調べ、存在する場合は処理384から396を実行し
て新しいプロセスを実行する。処理384から396の
処理内容は、¥PRCS20の処理を説明した第13図
における処理353から365と同一である。
終了ポストフラグ146が0であるかを調べることによ
り生成した全ての子プロセスが終了したかを調べる。終
了している場合は処理383を実行し、プロセス情報テ
ーブル149中の1nuseビツト141をOにするこ
とにより該プロセス情報テーブルエリアを解放し、タス
クkにおいて後に¥DISP18を実行する場合にそな
えて、¥WAIT19に実行を終了する。処理381に
おいてまだ終了していない子プロセスがある場合は、処
理382を実行して並列プロセスキュー先頭アドレスQ
H21がOでないかを調べることにより並列プロセスキ
ュー25内にプロセス情報テーブル149が存在するか
を調べ、存在する場合は処理384から396を実行し
て新しいプロセスを実行する。処理384から396の
処理内容は、¥PRCS20の処理を説明した第13図
における処理353から365と同一である。
処理382において並列プロセスキュー25内にプロセ
ス情報テーブル149が存在しない場合は、処理401
〜408を実行し、タスクフラグTFk (46,47
)を参照することにより一定の待ち時間期限の間断しい
サブプロセスの生成もしくは全ての子プロセスの終了を
待つ。
ス情報テーブル149が存在しない場合は、処理401
〜408を実行し、タスクフラグTFk (46,47
)を参照することにより一定の待ち時間期限の間断しい
サブプロセスの生成もしくは全ての子プロセスの終了を
待つ。
処理401においては、これからタスクフラグTFk
(46,47)を参照して待つ族プロセスのプロセス番
号を表示するため、該¥WA I T 19を呼んだ族
プロセスのワークデータ領域(33゜38)から該族プ
ロセスのプロセス番号を読みだし実行プロセスIDk
(48,49)に設定する。
(46,47)を参照して待つ族プロセスのプロセス番
号を表示するため、該¥WA I T 19を呼んだ族
プロセスのワークデータ領域(33゜38)から該族プ
ロセスのプロセス番号を読みだし実行プロセスIDk
(48,49)に設定する。
処理402においてはタスクフラグTFk (46,4
7)に初期値を設定する。タスクフラグTFk (46
,47)には全ての子プロセス終了時もしくは新しいサ
ブプロセス生成時に1が設定されるので、初期値として
、プロセス終了ポストフラグ146の値がO即ち全ての
子プロセスが終了していれば1を、0以外ならば0を設
定する。
7)に初期値を設定する。タスクフラグTFk (46
,47)には全ての子プロセス終了時もしくは新しいサ
ブプロセス生成時に1が設定されるので、初期値として
、プロセス終了ポストフラグ146の値がO即ち全ての
子プロセスが終了していれば1を、0以外ならば0を設
定する。
処理403ではタスクフラグTFk (46,47)に
通知があったかを調べ、あった場合は処理404を実行
し、すでにタスクフラグTFk(46,47)を参照し
て待ってはいないことを表示するため実行プロセスID
EXPIDk (48゜49)に○を設定する。さら
に処理405を実行して該タスクフラグTF’k (4
6,47)への通知は全ての子プロセス実行終了による
ものかを調へるためプロセス終了ボストンラグ146が
1であるかを調入、1であれば全ての子プロセスは終了
しているので処理383を実行する。1でなければタス
クフラグTFk (46,47)への通知は新しいサブ
プロセス生成によるものであるので処理406を実行し
て並列プロセスキュー先頭アドレスQ )I 21が0
でないかを調べる。0でなければプロセス情報テーブル
149が登録されているのでサブプロセスを取りだし実
行する処理384〜396を実行する。Oであれば既に
他タスクが登録されたプロセス情報テーブル149を取
りはずしてしまったことを意味するので処11381を
再実行する。
通知があったかを調べ、あった場合は処理404を実行
し、すでにタスクフラグTFk(46,47)を参照し
て待ってはいないことを表示するため実行プロセスID
EXPIDk (48゜49)に○を設定する。さら
に処理405を実行して該タスクフラグTF’k (4
6,47)への通知は全ての子プロセス実行終了による
ものかを調へるためプロセス終了ボストンラグ146が
1であるかを調入、1であれば全ての子プロセスは終了
しているので処理383を実行する。1でなければタス
クフラグTFk (46,47)への通知は新しいサブ
プロセス生成によるものであるので処理406を実行し
て並列プロセスキュー先頭アドレスQ )I 21が0
でないかを調べる。0でなければプロセス情報テーブル
149が登録されているのでサブプロセスを取りだし実
行する処理384〜396を実行する。Oであれば既に
他タスクが登録されたプロセス情報テーブル149を取
りはずしてしまったことを意味するので処11381を
再実行する。
処理403においてタスクフラグTFk (46゜47
)に通知がない場合は処理407を実行し待ち時間期限
に到達したかを調べる。期限時間にまだ到達していない
ならば再び処理403を実行し、タスクフラグTFk
(46,47)に対し金子プロセス終了もしくは新しい
サブプロセス生成の通知があるか、期限時間に到達する
かまで処理403の実行を繰り返す。
)に通知がない場合は処理407を実行し待ち時間期限
に到達したかを調べる。期限時間にまだ到達していない
ならば再び処理403を実行し、タスクフラグTFk
(46,47)に対し金子プロセス終了もしくは新しい
サブプロセス生成の通知があるか、期限時間に到達する
かまで処理403の実行を繰り返す。
処理407において期限時間に到達した場合は処理40
8を実行してすでにタスクフラグTFk(46,47)
を参照して待ってはいないことを表示するため実行プロ
セスID EXPID (48,49)にOを設定し
、その後システムのスループットを低下させないために
WAITマクロを発行して自らCPU使用権を手離す処
理409を第9図(a)の処理225と同様に実行する
。
8を実行してすでにタスクフラグTFk(46,47)
を参照して待ってはいないことを表示するため実行プロ
セスID EXPID (48,49)にOを設定し
、その後システムのスループットを低下させないために
WAITマクロを発行して自らCPU使用権を手離す処
理409を第9図(a)の処理225と同様に実行する
。
新しいサブプロセスが生成された時もしくは全ての子プ
ロセスが終了した時には、タスクkECB (28,2
9)もしくはプロセス終了ボスト/ウェイI−E CB
147に通知がなされ、タスクにはCPU使用権を取
り戻し、処理410から¥WAIT19の実行を再開す
る。処理410ではプロセス終了ボスト/ウェイトEC
B147に対して通知があったのかを調べ、その場合は
プロセス情報テーブルエリアを解放する処理383を実
行する。一方タスクkECB (28,29)に対する
通知があった場合は処理411を実行し、タスクウェイ
トフラグTWk (26,27)およびタスクkECB
(28,29)に0を設定して再び処理381を実行
する。
ロセスが終了した時には、タスクkECB (28,2
9)もしくはプロセス終了ボスト/ウェイI−E CB
147に通知がなされ、タスクにはCPU使用権を取
り戻し、処理410から¥WAIT19の実行を再開す
る。処理410ではプロセス終了ボスト/ウェイトEC
B147に対して通知があったのかを調べ、その場合は
プロセス情報テーブルエリアを解放する処理383を実
行する。一方タスクkECB (28,29)に対する
通知があった場合は処理411を実行し、タスクウェイ
トフラグTWk (26,27)およびタスクkECB
(28,29)に0を設定して再び処理381を実行
する。
以上、説明したように、本発明によればプロセッサ資源
を有効に活用することができ、また多重ジョブ環境でも
システムスループットを低下させず、かつスピンループ
方式の高速性を失わないプロセス間通信を実現できる。
を有効に活用することができ、また多重ジョブ環境でも
システムスループットを低下させず、かつスピンループ
方式の高速性を失わないプロセス間通信を実現できる。
さらに多重ジョブ環境で発生するデッドロック状態を検
出し、それを除去することができる。
出し、それを除去することができる。
第1図は、本発明の1実施例におけるプロセス分散方式
の全体概要図、 第2図は、本発明の1実施例におけるソースプログラム
例を示す図、 第3図は、本発明の1実施例におけるオブジェクトモジ
ュールの構成図、 第4図は1本発明の1実施例におけるプロセスの概念的
実行順序を示した図、 第5図は、本発明の1実施例におけるプロセス情報テー
ブル構造を示した図、 第6図(a)〜第6図(c)は、本発明の1実施例にお
ける並列処理用実行時ルーチン¥ATTACHおよび¥
DETACHの実行方法を示す図、第7図は1本発明の
1実施例における並列処理用実行時ルーチン¥DISP
の実行方法を示す図、第8図(a)、第8図(b)は、
本発明の1実施例における並列処理用実行時ルーチン¥
PRCSの実行方法を示す図、 第9図(a)、第9図(b)は、本発明の1実施例にお
ける並列処理用実行時ルーチン¥WAITの実行方法を
示す図、 第10図は、本発明の他の実施例におけるプロセス分散
方式の全体概要図、 第11図は、本発明の他の実施例におけるプロセス情報
テーブル構造を示した図、 第12図は、本発明の他の実施例における並列処理用実
行時ルーチン¥DISPの実行方法を示す図、 第13図(a)、第13図(b)は1本発明の他の実施
例における並列処理用実行時ルーチン¥PRC8の実行
方法を示す図、 第14図(a)、第14図(b)は、本発明の他の実施
例における並列処理用実行時ルーチン¥WAITの実行
方法を示す図、 第15図は、従来技術の一例を示す図、第16図は、本
発明の詳細な説明するための図である。 図中、1〜4・・・プロセッサ、5・・・主記憶、6・
・・O8,10・・・ユーザ空間、11.12・・・並
列プロセスを実行するためのタスク、16・・・並列処
理用実行時ルーチン¥ATTACH117・・・並列処
理用実行時ルーチン¥DETACH,18・・・並列処
理用実行時ルーチン¥DISP、19・・・並列処理用
実行時ルーチン¥WAIT、20・・・並列処理用実行
時ルーチン¥PRC5,25・・・並列プロセスキュー
、21・・・並列プロセスキュー先頭アドレスQH,2
6,27・・・タスクウェイトフラグ、46.47・・
・タスクフラグ、28.29山タスクECB。 48.49・・・実行プロセスより、31.36・・プ
ロセス情報テーブル用フリーエリア、40・・・オブジ
ェクトモジュール、51・・・ソースプログラム、63
.64・・・オブジェクトモジュール中の並列プロセス
実行情報、81・・・メインプロセス、82〜90・・
・サブプロセス、149・・・プロセス情報テブル、1
41・・・1nuseビツト、145・・・ループ分割
数、146・・・プロセス終了フラグ、147・・・プ
ロセス終了ボスト/ウェイトECB、148・・プロセ
ス終了ボスト/ウェイトマクロ発行フラグ、301・・
・プロセスIDフィールド、302・・族プロセスID
フィールド。 第2図 第7図
の全体概要図、 第2図は、本発明の1実施例におけるソースプログラム
例を示す図、 第3図は、本発明の1実施例におけるオブジェクトモジ
ュールの構成図、 第4図は1本発明の1実施例におけるプロセスの概念的
実行順序を示した図、 第5図は、本発明の1実施例におけるプロセス情報テー
ブル構造を示した図、 第6図(a)〜第6図(c)は、本発明の1実施例にお
ける並列処理用実行時ルーチン¥ATTACHおよび¥
DETACHの実行方法を示す図、第7図は1本発明の
1実施例における並列処理用実行時ルーチン¥DISP
の実行方法を示す図、第8図(a)、第8図(b)は、
本発明の1実施例における並列処理用実行時ルーチン¥
PRCSの実行方法を示す図、 第9図(a)、第9図(b)は、本発明の1実施例にお
ける並列処理用実行時ルーチン¥WAITの実行方法を
示す図、 第10図は、本発明の他の実施例におけるプロセス分散
方式の全体概要図、 第11図は、本発明の他の実施例におけるプロセス情報
テーブル構造を示した図、 第12図は、本発明の他の実施例における並列処理用実
行時ルーチン¥DISPの実行方法を示す図、 第13図(a)、第13図(b)は1本発明の他の実施
例における並列処理用実行時ルーチン¥PRC8の実行
方法を示す図、 第14図(a)、第14図(b)は、本発明の他の実施
例における並列処理用実行時ルーチン¥WAITの実行
方法を示す図、 第15図は、従来技術の一例を示す図、第16図は、本
発明の詳細な説明するための図である。 図中、1〜4・・・プロセッサ、5・・・主記憶、6・
・・O8,10・・・ユーザ空間、11.12・・・並
列プロセスを実行するためのタスク、16・・・並列処
理用実行時ルーチン¥ATTACH117・・・並列処
理用実行時ルーチン¥DETACH,18・・・並列処
理用実行時ルーチン¥DISP、19・・・並列処理用
実行時ルーチン¥WAIT、20・・・並列処理用実行
時ルーチン¥PRC5,25・・・並列プロセスキュー
、21・・・並列プロセスキュー先頭アドレスQH,2
6,27・・・タスクウェイトフラグ、46.47・・
・タスクフラグ、28.29山タスクECB。 48.49・・・実行プロセスより、31.36・・プ
ロセス情報テーブル用フリーエリア、40・・・オブジ
ェクトモジュール、51・・・ソースプログラム、63
.64・・・オブジェクトモジュール中の並列プロセス
実行情報、81・・・メインプロセス、82〜90・・
・サブプロセス、149・・・プロセス情報テブル、1
41・・・1nuseビツト、145・・・ループ分割
数、146・・・プロセス終了フラグ、147・・・プ
ロセス終了ボスト/ウェイトECB、148・・プロセ
ス終了ボスト/ウェイトマクロ発行フラグ、301・・
・プロセスIDフィールド、302・・族プロセスID
フィールド。 第2図 第7図
Claims (1)
- 【特許請求の範囲】 1、複数のプロセッサ上で、複数の論理的プロセッサが
複数のプロセスを並列に実行し、該論理的プロセッサは
、第1のプロセス実行中に該第1のプロセスによって生
成された第2のプロセスにおける事象の成立を待つ並列
処理システムにおいて、該第2のプロセスが終了したと
いう第1の事象が成立しているか否かを調べる第1のス
テップと、プロセスの実行中に第3のプロセスが生成さ
れたという第2の事象が成立しているか否かを調べる第
2のステップとを有し、前記論理的プロセッサは前記第
1のステップを実行して前記第1の事象が成立していな
い場合は前記第2のステップを実行し、前記第2のステ
ップの実行において前記第2の事象が成立していない場
合は前記第1のステップを再度実行して、前記第1のス
テップと前記第2のステップの実行を繰り返すことによ
り、前記第1の事象もしくは前記第2の事象のいずれか
の成立をスピンループして待ち、前記第1の事象が成立
した場合は前記第1のプロセスの実行を継続し、前記第
2の事象が成立した場合は前記第1のプロセスの実行を
中断して前記第3のプロセスを実行することを特徴とす
るプロセス分散方式。 2、前記スピンループを所定の時間実行しても前記第1
の事象も第2の事象も成立しなかった場合に、前記プロ
セスを実行している前記論理的プロセッサのプロセッサ
使用権を一時的に取り上げるようオペレーティングシス
テムに依頼することを特徴とする請求項1記載のプロセ
ス分散方式。 3、前記所定の時間は、プロセスの実行時に決定される
ことを特徴とする請求項2記載のプロセス分散方式。 4、複数のプロセッサ上で、複数の論理的プロセッサが
複数のプロセスを並列に実行し、該論理的プロセッサは
、第1のプロセス実行中に該第1のプロセスによって生
成された第2のプロセスにおける事象の成立を待つ並列
処理システムにおいて、該第2のプロセスが終了したと
いう第1の事象もしくはプロセスの実行中に第3のプロ
セスが生成されたという第2の事象のいずれかが成立し
たかを調べるステップを有し、前記論理的プロセッサは
前記ステップを繰り返し実行することにより、前記第1
の事象もしくは前記第2の事象のいずれかの成立をスピ
ンループして待ち、前記第1の事象が成立した場合は前
記第1のプロセスの実行を継続し、前記第2の事象が成
立した場合は前記第1のプロセスの実行を中断して前記
第3のプロセスを実行することを特徴とするプロセス分
散方式。 5、前記スピンループを所定の時間実行しても前記第1
の事象も第2の事象も成立しなかった場合に、前記プロ
セスを実行している前記論理的プロセッサのプロセッサ
使用権を一時的に取り上げるようオペレーティングシス
テムに依頼することを特徴とする請求項4記載のプロセ
ス分散方式。
Priority Applications (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2026449A JP2829078B2 (ja) | 1990-02-05 | 1990-02-05 | プロセス分散方法 |
| US07/647,754 US5193186A (en) | 1990-02-05 | 1991-01-30 | Processor system for executing processes in parallel under multitask, control method of waiting for event of process |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2026449A JP2829078B2 (ja) | 1990-02-05 | 1990-02-05 | プロセス分散方法 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JPH03230225A true JPH03230225A (ja) | 1991-10-14 |
| JP2829078B2 JP2829078B2 (ja) | 1998-11-25 |
Family
ID=12193812
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2026449A Expired - Fee Related JP2829078B2 (ja) | 1990-02-05 | 1990-02-05 | プロセス分散方法 |
Country Status (2)
| Country | Link |
|---|---|
| US (1) | US5193186A (ja) |
| JP (1) | JP2829078B2 (ja) |
Families Citing this family (33)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US5497500A (en) * | 1986-04-14 | 1996-03-05 | National Instruments Corporation | Method and apparatus for more efficient function synchronization in a data flow program |
| US5737622A (en) * | 1986-04-14 | 1998-04-07 | National Instruments Corporation | Method and apparatus for more efficient function synchronization in a data flow program |
| JP3268338B2 (ja) | 1992-04-22 | 2002-03-25 | 株式会社日立製作所 | 計算機システム |
| FR2696259A1 (fr) * | 1992-09-30 | 1994-04-01 | Apple Computer | Organisation en tâches et en modules d'une exécution dans un processeur. |
| JP2551312B2 (ja) * | 1992-12-28 | 1996-11-06 | 日本電気株式会社 | ジョブステップ並列実行方式 |
| US5848283A (en) * | 1993-01-29 | 1998-12-08 | International Business Machines Corporation | Method and system for efficient maintenance of data coherency in a multiprocessor system utilizing cache synchronization |
| JP2550864B2 (ja) * | 1993-05-31 | 1996-11-06 | 日本電気株式会社 | ジョブ実行における分散型制御方法及びその装置 |
| DK0635784T3 (da) * | 1993-07-23 | 2000-03-27 | Siemens Ag | Multiprocessorsystem. |
| US5632032A (en) * | 1994-02-07 | 1997-05-20 | International Business Machines Corporation | Cross address space thread control in a multithreaded environment |
| JP3658420B2 (ja) * | 1994-04-14 | 2005-06-08 | 株式会社日立製作所 | 分散処理システム |
| DE69635409T2 (de) * | 1995-03-06 | 2006-07-27 | Intel Corp., Santa Clara | Ein rechnersystem mit unbewachter auf-anfrage-verfügbarkeit |
| JPH08286932A (ja) * | 1995-04-11 | 1996-11-01 | Hitachi Ltd | ジョブの並列実行制御方法 |
| JP3573546B2 (ja) * | 1995-10-27 | 2004-10-06 | 富士通株式会社 | 並列計算機における並列プロセススケジューリング方法および並列計算機用処理装置 |
| US5768572A (en) * | 1996-02-05 | 1998-06-16 | International Business Machines Corporation | Timer state control optimized for frequent cancel and reset operations |
| US6005575A (en) * | 1998-03-23 | 1999-12-21 | Microsoft Corporation | Foreground window determination through process and thread initialization |
| EP0990985A3 (de) * | 1998-09-30 | 2005-12-28 | Infineon Technologies AG | Verfahren zum Betrieb eines Netzcomputers |
| US6223203B1 (en) * | 1998-11-04 | 2001-04-24 | Advanced Micro Devices, Inc. | Method for performing parallel management operations including and deleting computer systems |
| US6453430B1 (en) | 1999-05-06 | 2002-09-17 | Cisco Technology, Inc. | Apparatus and methods for controlling restart conditions of a faulted process |
| KR100332552B1 (ko) * | 1999-12-18 | 2002-04-17 | 서평원 | 에이티엠 교환 시스템의 하드웨어 자원 제어 구조 및 방법 |
| US6678701B1 (en) | 2000-01-05 | 2004-01-13 | International Business Machines Corporation | Technique for establishing a point of consistency in a parallel database loading system |
| US6658650B1 (en) * | 2000-02-18 | 2003-12-02 | International Business Machines Corporation | Service entry point for use in debugging multi-job computer programs |
| JP3664473B2 (ja) * | 2000-10-04 | 2005-06-29 | インターナショナル・ビジネス・マシーンズ・コーポレーション | プログラムの最適化方法及びこれを用いたコンパイラ |
| US8032886B2 (en) * | 2000-11-22 | 2011-10-04 | Microsoft Corporation | Tracking asynchronous execution of program using hierarchical structure of objects |
| US7386797B1 (en) * | 2002-05-22 | 2008-06-10 | Oracle Corporation | Framework to model and execute business processes within a collaborative environment |
| US20050021756A1 (en) * | 2003-07-26 | 2005-01-27 | Grant Bruce K. | Method of developing, delivering and rendering network applications |
| US9003413B1 (en) * | 2009-09-28 | 2015-04-07 | Xilinx, Inc. | Thread synchronization by transitioning threads to spin lock and sleep state |
| US8250576B2 (en) * | 2009-09-30 | 2012-08-21 | Microsoft Corporation | Structured task hierarchy for a parallel runtime |
| US9086922B2 (en) | 2009-10-26 | 2015-07-21 | Microsoft Technology Licensing, Llc | Opportunistically scheduling and adjusting time slices |
| US20120005682A1 (en) * | 2010-06-30 | 2012-01-05 | International Business Machines Corporation | Holistic task scheduling for distributed computing |
| US9513975B2 (en) | 2012-05-02 | 2016-12-06 | Nvidia Corporation | Technique for computational nested parallelism |
| US9323931B2 (en) * | 2013-10-04 | 2016-04-26 | Bitdefender IPR Management Ltd. | Complex scoring for malware detection |
| US9824130B1 (en) * | 2013-12-13 | 2017-11-21 | Open Text Corporation | Optimizing synchronization of enterprise content management systems |
| CN112799799B (zh) * | 2020-12-29 | 2024-07-19 | 杭州涂鸦信息技术有限公司 | 数据消费方法及装置 |
Family Cites Families (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US4636942A (en) * | 1983-04-25 | 1987-01-13 | Cray Research, Inc. | Computer vector multiprocessing control |
| US4631674A (en) * | 1985-02-05 | 1986-12-23 | International Business Machines Corporation | Active wait |
| US4825358A (en) * | 1985-04-10 | 1989-04-25 | Microsoft Corporation | Method and operating system for executing programs in a multi-mode microprocessor |
| JPH0766329B2 (ja) * | 1985-06-14 | 1995-07-19 | 株式会社日立製作所 | 情報処理装置 |
-
1990
- 1990-02-05 JP JP2026449A patent/JP2829078B2/ja not_active Expired - Fee Related
-
1991
- 1991-01-30 US US07/647,754 patent/US5193186A/en not_active Expired - Lifetime
Also Published As
| Publication number | Publication date |
|---|---|
| US5193186A (en) | 1993-03-09 |
| JP2829078B2 (ja) | 1998-11-25 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JPH03230225A (ja) | プロセス分散方法 | |
| US4636948A (en) | Method for controlling execution of application programs written in high level program language | |
| Nichols et al. | Pthreads programming: A POSIX standard for better multiprocessing | |
| US10884822B2 (en) | Deterministic parallelization through atomic task computation | |
| US5666533A (en) | Program execution management using process enclaves which define the scope of high-level language semantics and threads improving cooperation between processes written in multiple languages | |
| US5515538A (en) | Apparatus and method for interrupt handling in a multi-threaded operating system kernel | |
| US5257372A (en) | Methods for efficient distribution of parallel tasks to slave processes in a multiprocessing system | |
| CN109614170B (zh) | 控制由计算系统执行的任务 | |
| CN100449478C (zh) | 用于实时多线程处理的方法和装置 | |
| CN109814986A (zh) | 任务并行处理方法、存储介质、计算机设备、装置和系统 | |
| KR20110071018A (ko) | 시스템 태스크를 실행하는 복수의 프로세싱 코어를 포함하는 정보 프로세싱 시스템의 결정적 실행 및 동기화 방법 | |
| JP2818016B2 (ja) | プロセス並列実行方法および装置 | |
| CN103473135A (zh) | 虚拟化环境下自旋锁lhp现象的处理方法 | |
| JP2020160482A (ja) | 性能見積もり装置、端末装置、システムlsi及びプログラム | |
| CN113094260B (zh) | 一种分布式系统时序关系建模与仿真分析方法 | |
| CN113051049A (zh) | 任务调度系统、方法、电子设备及可读存储介质 | |
| Socci et al. | A timed-automata based middleware for time-critical multicore applications | |
| Janowski et al. | Dynamic scheduling in the presence of faults: Specification and verification | |
| JPH11306149A (ja) | 並列演算処理装置およびその方法 | |
| CN118170520A (zh) | 基于嵌入式多核实时操作系统的dag任务调度方法、计算机程序产品、存储介质及终端 | |
| Sang et al. | The Xthreads library: Design, implementation, and applications | |
| Hunt | Coroutines | |
| Oliveira | Multithreading | |
| JPH11306037A (ja) | 並列演算処理装置およびその方法 | |
| Végh et al. | The von Neumann computer model on the mirror of new technologies |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| LAPS | Cancellation because of no payment of annual fees |