JP2829078B2 - プロセス分散方法 - Google Patents

プロセス分散方法

Info

Publication number
JP2829078B2
JP2829078B2 JP2026449A JP2644990A JP2829078B2 JP 2829078 B2 JP2829078 B2 JP 2829078B2 JP 2026449 A JP2026449 A JP 2026449A JP 2644990 A JP2644990 A JP 2644990A JP 2829078 B2 JP2829078 B2 JP 2829078B2
Authority
JP
Japan
Prior art keywords
execution
event
task
executed
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.)
Expired - Fee Related
Application number
JP2026449A
Other languages
English (en)
Other versions
JPH03230225A (ja
Inventor
由子 玉置
克佳 北井
泰弘 稲上
義一 田中
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.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2026449A priority Critical patent/JP2829078B2/ja
Priority to US07/647,754 priority patent/US5193186A/en
Publication of JPH03230225A publication Critical patent/JPH03230225A/ja
Application granted granted Critical
Publication of JP2829078B2 publication Critical patent/JP2829078B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program 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)

Description

【発明の詳細な説明】 〔産業上の利用分野〕 本発明は、密結合多重プロセッサシステムに関し、特
に動的に生成される複数のプロセスから成るプログラム
を多重ジョブ環境で効率的に複数のプロセッサに実行さ
せるためのプロセスのプロセッサへの分散方法に関す
る。
〔従来の技術〕
プログラムの実行時間を短縮するアプローチに、1つ
のプログラムを並列化して複数のプロセスに分割しマル
チプロセッサで並列に実行するという方法がある。
1つのプログラムを並列化する方法としては以下の方
法が一般的である。すなわちプログラム中逐次的に実行
すべき部分を1つのプロセス内で実行し、並列実行可能
な部分に到達したらその部分を実行するための子プロセ
スを複数生成し、全ての子プロセスの実行終了を待って
から続きの逐次実行部分を実行するという方法である。
生成された子プロセスも、該子プロセス内で並列実行可
能な部分を実行するための子プロセス(もともとのプロ
セスにとってみれば孫プロセス)をさらに生成できるよ
うにすることもあり、この場合並列処理のネスティング
が許されているという。
並列化されたプログラムの実行時間を短縮するために
は、プロセスのプロセッサに対する効率的な分散が必要
であり、そのためにキューを設け、プログラムの実行に
伴い動的に生成される子プロセスをキューに登録し、行
うべき仕事のないプロセッサがキューを検査して子プロ
セスが登録されていればそれを取りだし実行する方式が
よく知られている。
従来から行われているオペレーテイングシステム(O
S)を介したプロセスの分散及び通信では並列化プログ
ラムの高速化が図れないため、プロセスの分散を高速に
行うためにキューへの子プロセス登録およびキューの検
査、子プロセスの取り出しをプロブレムモードで行う方
法が提案されている。
また、プロセス間の通信を高速に行うために、プロブ
レムモードにおいてフラグの変化を参照しながらスピー
ンループして事象の成立を待つアクテイブウエイト方式
がある(“Active Wait"U.S.PATENT 4,631,674)。
スピンループして待つ事象としては、プロセスの生成
や、生成した全ての子プロセスの実行終了(“Microtas
king on IBM Multiprocessors"IBM J.RES.DEVELOP.VOL.
30 NO.6 NOVEMBER 1986)などが挙げられる。
〔発明が解決しようとする課題〕
従来技術の一例を第15図で説明すると、全ての子プロ
セスの終了を待つべき親プロセスは処理1001において一
旦中断され、処理1002を実行して新しいプロセスがある
かを検査する。新しいプロセスがあれば、処理1003を実
行して新しいプロセスを実行する。新しいプロセスがな
ければ、処理1004を実行し、全ての子プロセスが終了し
たかを検査する。全ての子プロセスが終了していれば処
理1005を実行して親プロセスを再開するが、終了してい
なければ再び処理1004を実行して全ての子プロセスが終
了するまでスピンループする。
上記従来技術は、並列処理のネスティングがない場合
は問題ないが、並列処理のネスティングを許した場合
に、以下のようなケースにおいてプロセッサ資源が有効
に活用されないという問題点がある。即ち、親プロセス
を実行しているプロセッサ0が、子プロセスの終了を待
つスピンループを実行してしまった場合、その後でプロ
セッサ1で新たな孫プロセスを生成しプロセスキューに
登録してもプロセッサ0では孫プロセスを実行できない
という状況が生じる。この場合孫プロセスはいずれプロ
セッサ1で実行されるのでプログラムは正常に終了する
が、プロセッサ0が有効に活用されず処理時間が増大す
るという問題点がある。(課題1) さらに上記従来技術のスピンループはCPU資源を1つ
のジョブで占有するので並列プログラムの実行が1ジョ
ブ環境で行われるときは問題がないが、多重ジョブ環境
で行われる時はシステムのスループットを低下させると
いう問題がある。多重ジョブ環境でデバッグされた並列
プログラムが1ジョブ環境で実行されることも多いこと
から、1ジョブ環境と多重ジョブ環境で使用するロード
モジュールを一本化した上で上記の問題を解決する必要
がある(課題2)。
一般に多重ジョブ環境では、論理的なプロセッサ(一
般にタスクとも呼ばれる。本明細書でも以下ではタスク
は論理的プロセッサを差す)がプロセスを実行し、OSが
プロセッサに時分割でタスクを実行させる。OSは各タス
クのCPU資源や入出力資源使用率などを考慮しながら各
タスクに対するプロセッサ使用権の割り振りを決定す
る。そのためある子プロセス実行中のタスク1がプロセ
ッサ使用権を取り上げられた場合、プロセッサ使用権を
有するタスク0で親プロセスが該子プロセスの実行終了
をスピンループでいくら待ってもプログラムは終了しな
い。これをデッドロック状態という。これを解決するた
めにはデッドロック状態を検出し、OSがタスク1にプロ
セッサ使用権を与えるようにする必要がある(課題
3)。
本発明は、前記問題点を解決するためになされたもの
である。
本発明の目的は、オペレーティングシステムを介在さ
せることなく、ユーザプログラムの中でプロセスの分散
と同期を高速に実行するプロセス分散方法を提供するこ
とにある。
〔課題を解決するための手段〕
上記課題1を解決するために本発明では、全ての子プ
ロセスの終了という事象か、プロセスキューへの新しい
プロセスの登録いう事象かのいずれかの事象かの成立を
スピンループして待つ並列処理用実行時ルーチン¥WAIT
を用意した。
¥WAITの特徴となる部分の処理を第16図を用いて説明
する。全ての子プロセスの終了を待つべき親プロセスは
処理1001において一旦中断され、処理1004を実行して全
ての子プロセスが終了したかを検査する。全ての子プロ
セスが終了していれば処理1005において親プロセスの実
行を再開する。全ての子プロセスが終了していなければ
処理1002を実行し、新しいプロセスがあるかを検査す
る。新しいプロセスがあれば処理1003において新しいプ
ロセスを実行し、その後処理1004を再び実行する。新し
いプロセスがなければ処理1004を再び実行し、全ての子
プロセスが終了するか、新しいプロセスができるか、い
ずれの事象が成立するまでスピンループする。
本発明ではさらに、プロセスキューへのプロセスの登
録をスピンループして待つ並列処理用実行時ルーチン¥
PRCSを用意し、プロセスオブジェクト中生成した全ての
子プロセスの終了を待つべきポイントでは実行時ルーチ
ン¥WAITをコールし、すべき仕事のないタスクに実行さ
せるオブジェクトの先頭では実行時ルーチン¥PRCSをコ
ールするようにコンパイラがオブジェクトモジュール作
成するようにした。
実行時ルーチン¥WAITにおける2事象待ちスピンルー
プのためには、全ての子プロセスの終了を表示するフラ
グ1と、プロセスキューへのプロセス登録を表示するフ
ラグ2とを用意し、フラグ1を参照して、終了していな
い子プロセスがあるならばフラグ2を参照し、プロセス
が登録されていないならばふたたびフラグ1の参照を繰
り返すというステップをふめばよい。また、別のフラグ
3を用意し、フラグ1の設定時およびフラグ2の設定時
には同時にフラグ3にも設定するようにし、フラグ1と
フラグ2の表示内容をフラグ3に代表させてフラグ3の
参照を繰り返すというステップをふんでもよい。
上記課題2および3の解決のために本発明では、実行
時ルーチン¥WAITおよび¥PRCSで実行するスピンループ
に時間期限を設け、該時間期限までスピンループを行っ
ても待ち事象が成立しない場合はスピンループをやめ、
該プロセスを実行しているタスクのプロセッサ使用権を
待ち事象が成立するまで自ら手放すようにした。プロセ
ッサ使用権を自ら手放すためのOSマクロとしてHITAC VO
S3/ESではWAITマクロを用意しており、該マクロのオペ
ランドにて指定した連絡領域に連絡があったときはOSに
より上記タスクに再びプロセッサ使用権が与えられる。
また上記時間期限は、コンパイラによる各プロセスの予
想実行時間や、該ジョブが多重ジョブ環境で実行されて
いるかなどのシステム稼動状況や、ユーザが指定したジ
ョブクラスなどに基づき実行時に実行時ルーチンにより
決定される。
〔作用〕
第16図に示すように、¥WAITを動作させることによ
り、並列処理のネスティングが許されている場合でも、
前述したプロセッサ0は子プロセスの終了を待つスピン
ループ中にプロセッサ1で新しい孫プロセスが生成され
たかどうかを監視でき、新しいプロセスが登録されたら
子プロセス終了待ちを中断して新プロセスを実行できる
ため、プロセッサ資源が有効活用される。
上記のように実行時に決定されるスピンループの時間
制限を設けることにより、システムの稼動状況などを考
慮してスピンループ時間を増減できるのでシステムのス
ループットを低下させずかつ1ジョブ環境と多重ジョブ
環境でロードモジュールを一本化することができる。
さらに上記のようにスピンループ時間期限を設けて時
間期限に達したらWAITマクロを発行することにより、デ
ッドロック状態が発生した場合最悪でもスピンループ期
限時間後にはOSへの通知が行われ、OSは子プロセスを実
行中のタスクにプロセッサ使用権を与えることができ
る。
〔実施例〕
以下、本発明の実施例を図面を参照しながら説明す
る。
(実施例1) 第1図は本発明の全体構成を示す図である。図中1か
ら4は、主記憶5を介して接続される、マルチプロセッ
サを構成するCPUである。
コンパイラはソースプログラムから逐次実行部分のオ
ブジェクト命令列41と並列実行部分のオブジェクト命令
列42およびデータ領域43、並列プロセス実行情報44から
成るオブジェクトモジュール40を生成する。プログラム
中メインプロセスとなるのは逐次実行部分である。メイ
ンプロセスは並列実行部分を実行するサブプロセスを生
成する。本発明の実施例では並列処理のネスティングが
可能であり、サブプロセスはサブプロセス内で並列実行
可能な部分を実行するサブプロセスをさらに生成でき
る。
OS6はユーザジョブの処理要求受け付け時に、1つの
ユーザ空間10(ASCB1)を生成し、その中で実行される
メインタスク11(TCB10)を生成し、プログラムの開始
部であるプロローグ処理、終了部であるエピローグ処理
およびメインプロセスである逐次実行オブジェクトを実
行させる。プロローグ処理においては、ジョブ制御言語
JCLのEXEC文のPARAMオペランドにてユーザが指定した生
成要求サブタスク数に基づきシステムの状態を考慮した
上で生成サブタスク数を決定しサブタスク(TCB11,12,
…)を生成する実行時ルーチン¥ATTACH16を呼ぶ。
本発明の実施例では生成されるサブタスクはTCB11(1
2)のみである。上記サブタスク12は、並列プロセスキ
ュー25にプロセス情報テーブルが登録されるのを待ち、
登録されるとプロセス情報テーブルから実行すべきサブ
プロセスの情報をとりだし、該プロセス実行に必要なワ
ークデータ領域(33、38)をスタック管理して、タスク
対応のローカルデータ領域(30、35)内から確保して、
該サブプロセスを実行しワークデータ領域(33、38)を
解放する実行時ルーチン¥PRCS20を実行する。¥PRCS20
は並列プロセスキュー25へのプロセス情報テーブルの登
録を一定時間待っても登録が行われない場合システムの
スループットを低下させないよう自らCPU使用権を手離
す。
メインプロセスの実行が並列実行部分の直前に達した
ら、タスク対応のプロセス情報テーブル用フリーエリア
(30、35)から領域を確保し、並列実行部分の実行に必
要な情報を一括して示す並列プロセス情報テーブルを作
成して並列プロセスキュー25に登録する実行時ルーチン
¥DISP18を呼ぶ。1つのプロセス情報テーブルからは複
数の並列サブプロセスが生成されるが、プロセス情報テ
ーブルを作成したメインプロセスもしくはサブプロセス
を親プロセス、プロセス情報テーブルから生成されるサ
ブプロセスを子プロセスと呼ぶ。¥DISP18は同時にタス
クウエイトフラグ26、27(TW10,TW11)を参照してWAIT
マクロ発行中のタスクがあれば実行すべきプロセスが生
成されたことを知らせるためにPOSTマクロをタスク対応
のECB28、29(タスク10ECB,タスク11ECB)に対し発行す
る。
プロセス情報テーブルを作成するためのフリーエリア
(31、36)はタスク対応のローカルデータ域(30、35)
にチェインされて設けられている。32、37はタスク対応
のフリーエリアポインタであり、プロセス情報テーブル
用フリーエリア(31,36)をどこまで使用したかを示
す。並列プロセスキュー25は、グローバルデータ域24に
ある並列プロセスキュー先頭アドレスQH21を先頭とし
て、上記のうち実行可能なプロセスの情報を含んでいる
プロセス情報テーブルエリア(31、36)をチェインして
構成されている。
¥DISP18の実行が終了するとメインプロセスは全ての
子プロセスの実行終了もしくは並列プロセスキュー25へ
の新しいプロセス情報テーブルの登録を待つ実行時ルー
チン¥WAIT19を呼ぶ。¥WAIT19は新しいプロセス情報テ
ーブルが登録された場合はプロセス情報テーブルから実
行すべきサブプロセスの情報をとりだし、該サブプロセ
ス実行に必要なワークデータ領域(33,38)をスタック
管理してタスク対応のローカルデータ領域(30,35)内
から確保して、該サブプロセスを実行しワークデータ領
域(33,38)を解放する。また一定時間待ってもサブプ
ロセス実行が修了せずまた新しいプロセス情報テーブル
も登録されない場合は、システムのスループットを低下
させないようWAITマクロを発行し、自らCPU使用権を手
離す。
¥WAIT19の実行が終了するとメインプロセスは逐次実
行オブジェクトの実行を再開する。メインプログラムの
終了部で実行されるエピローグ処理においては生成した
サブタスク12(TCB11)を消滅させる実行時ルーチン¥D
ETACH17が呼ばれプログラムが終了する。
33、38は並列プロセス実行に必要なワークデータ領域
を確保するためのデータ領域であり、34、39はそのスタ
ックポインタである。
本ジョブが多重ジョブ環境で実行される時は、他ユー
ザ空間8、13(ASCB0,ASCB2)およびその中で実行され
るタスク9、14(TCB00、TCB20)も存在するが、どのタ
スクを実行させるかのスケジューリング処理はOS6によ
り公知のスケジューリング処理制御技術により行われ
る。
第2図に並列実行可能部分を含むFORTRANソースプロ
グラムの一例を、第3図に本発明による第2図のソース
プログラムから生成されるオブジェクトモジュールをFO
RTRANライクに記述したものを、第4図に第3図のオブ
ジェクトモジュールから生成されるプロセスの概念的実
行順序を示す。
第2図のソースプログラム51中処理Aおよび処理Eは
逐次実行部分であり、DO30のループ52内の処理Bおよび
Dは添字Iに関し、DO40のループ53内の処理Cは添字I,
Jに関し並列化可能な部分である。
第3図のオブジェクトモジュールの概略構成は、並列
プロセスオブジェクト命令列部分(67、68)と並列プロ
セス実行情報部分(63、64)が追加されていることを除
いて従来の逐次実行プロセスと同一である(例えば、HI
TAC VOS3最適化FORTRAN77 OFORT77 E2,HAP FORTRAN
77使用の手引き8090−3−765−30 476頁 オブジェク
トモジュールの構成)。ソースプログラム51中の処理B,
Dを実行するオブジェクトが並列プロセスオブジェクト
命令列67部分に、処理Cを実行するオブジェクトが並
列プロセスオブジェクト68部分に格納される。またコ
ンパイラにより生成される、並列プロセスオブジェクト
67を実行するために必要な情報が並列プロセス実行情
報63部分に、並列プロセスオブジェクト68を実行す
るために必要な情報が並列プロセス実行情報64部分に
格納される。
以下、第3図と第4図を参照しながらオブジェクトモ
ジュールの内容とプロセスの対応およびプロセスの概念
的実行順序について説明する。
プロローグ処理部分65はメインタスク11(TCB10)に
より実行される。プロローグ処理部分65の処理は、前記
の実行時ルーチン¥ATTACH16を呼ぶ以外は従来の逐次実
行プロセスと同一である。¥ATTACH16の処理の詳細につ
いては後述する。
メインタスク11(TCB10)はプロローグ処理65に続い
てメインプロセス1(81)として逐次実行オブジェクト
命令列66を実行し、処理A92の実行終了後に、DO30の処
理を子プロセスとして生成するために前述の実行時ルー
チン¥DISP93を呼ぶ。¥DISPの処理の詳細については後
述する。¥DISP93の引数ENTRYは並列プロセス実行情
報63部分の先頭アドレスを示し、引数PTBLには生成
されたプロセス情報テーブルの先頭アドレスが返され
る。
¥DISP93は引数ENTRYより得られる情報をたどり並
列プロセスオブジェクト67を実行するためのプロセス
情報テーブルを作成する。コンパイラにより並列プロセ
スオブジェクト67中に埋め込まれたループ制御変数LC
1およびLCに与えるべき値を¥DISP18が実行時に決定す
ることにより、生成されるサブプロセス数が決定され
る。本発明の実施例ではLC1には0、1、2がLCには3
が与えられ、サブプロセス2(82)、サブプロセス3
(85)、サブプロセス4(88)が生成される。生成され
たサブプロセスはいずれかのタスクで実行されている¥
PRCSもしくは¥WAIT(97、109、121)により取り出され
実行される。
¥DISP93の実行が終るとメインプロセス1(81)は¥
DISP93の引数PTBLを引数として前述の実行時ルーチン
¥WAIT94を呼ぶ。PTBLで示されるプロセス情報テーブ
ル内には、全ての子プロセス即ちサブプロセス2、3、
4(82、85、88)の実効が終了したか否かを示すプロセ
ス終了ポストフラグ(後述)があり、¥WAIT94は引数LI
MITの値およびシステムやジョブの状態を考慮して決
定した一定時間が経過するまで、該プロセス終了ポスト
フラグを参照して全ての子プロセスの終了を待つ。引数
LIMITの値は、生成されるサブプロセスの予測実行時
間やタスク間の同期に従来から使用されているPOST/WAI
Tマクロの処理時間などを考慮してコンパイラにより決
定される。¥WAIT94はサブプロセスの終了を待つと同時
に新しいサブプロセスの生成も待つが、その点について
は後で述べる。
サブプロセス2、3、4(82、85、88)はそれぞれLC
1の値のみ異なる並列プロセスオブジェクト67を実行
し、処理Bの実行終了後、DO40の処理を子プロセスとし
て生成するためにそれぞれ実行時ルーチン¥DISP(99、
111、123)を呼ぶ。¥DISP(99、111、123)の引数ENTR
Yは並列プロセス実行情報部分64の先頭アドレスを
示し、引数PTBLにはそれぞれ並列プロセスオブジェク
ト68を実行するためのプロセス情報テーブルの先頭ア
ドレスが返される。コンパイラにより並列プロセスオブ
ジェクト68中に埋め込まれたループ制御変数LC2には
本実施例ではそれぞれ0、1が、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)は実行時ルーチン¥WAIT(10
0、112、124)を呼び、引数LIMITに示される時間が経
過するまで、引数PTBLからたどれるプロセス終了ポス
トフラグを参照してそれぞれサブプロセス5、6(83、
84)、サブプロセス7、8(86、87)、サブプロセス
9、10(89、90)の終了を待つ。
サブプロセス5、6、7、8、9、10(83、84、86、
87、89、90)はそれぞれLCおよびLC2の値のみ異なる並
列プロセスオブジェクト68を実行し、処理Cの実行終
了後自プロセスを取りだした¥PRCSもしくは¥WAIT(10
3、106、115、118、127、130)に分岐する。¥PRCSもし
くは¥WAIT(97、109、121)は取りだした子プロセスの
実行が終了したことをプロセス終了ポストフラグを通じ
て親プロセスに通知し、該子プロセスを消滅させる。
サブプロセス2、3、4(82、85、88)で実行されて
いた¥WAIT(100、112、124)は、それぞれ全て子プロ
セス即ちサブプロセス5、6(83、84)、サブプロセス
7、8(86、87)、サブプロセス9、10(89、90)の終
了通知をうけると呼びもとに分岐して実行を終了する。
サブプロセス2、3、4(82、85、88)は続いて処理D
(101、113、125)を実行し、処理D(101、113、125)
の実行終了後は自プロセスを取りだした¥PRCSもしくは
¥WAIT(94、109、121)に分岐する。¥PRCSもしくは¥
WAIT(97、109、121)では親プロセスであるメインプロ
セス1(81)にとりだした子プロセスの実行が終了した
ことを通知し該子プロセスを消滅させる。
メインプロセス1(81)で実行されていた¥WAIT94
は、全子プロセスすなわちサブプロセス2、3、4(8
2、85、88)の終了通知をうけると呼びもとに分岐して
実行を終了する。メインプロセス1(81)は続いて処理
E95を実行し、エピロー処理部分69に分岐する。エピロ
ーグ処理部分69の処理は、前述の実行時ルーチン¥DETA
CH17を呼ぶ以外は従来の逐次実行プログラムと同一であ
る。
第3図のデータ領域62はプロセス中断時のレジスタの
退避領域や、変数や配列の領域、パラメタリスト領域な
ど従来の逐次実行プログラムのデータ領域と同一の領域
から構成されている。
並列プロセス実行情報部分(63、64)には、並列プロ
セスオブジェクト対応に以下の情報がある。
並列プロセスオブジェクト先頭アドレスフィールド
(71、74)はオブジェクトモジュール中命令語領域にあ
る対応する並列プロセスオブジェクトの先頭アドレスを
示す。並列プロセスオブジェクトで必要なワークデータ
領域の大きさフィールド(72、75)は、該並列プロセス
で並列実行に必要な一時変数、変数、配列のために必要
なワークデータ領域の大きさを示す。並列プロセスオブ
ジェクトで必要なワークデータ領域における初期値情報
フィールド(73、76)は、ワークデータ領域が1つのベ
ースレジスタで届かない大きさの場合の、ワークデータ
領域のベースアドレス値などを示す。
以下、第6図(a)〜(c)を用い実行時ルーチン¥
ATTACH16,¥DETACH17の処理を説明する。¥ATTACH16は
処理151においてシステム内に多すぎるTCBを生成してシ
ステムのスループットを低下させることを避けるため
に、サブタスクの生成に先立ち追加獲得可能なTCB数をO
Sに問い合わせるマクロ(NTCB)を発行する。NTCB158を
実行するOSは処理155においてシステム内に存在する全T
CB数やそのうち実行可能状態のTCBの数、およびそれら
によるCPU資源や入出力資源の使用状況などを調べ、処
理156において問い合わせてきたジョブに対し追加付与
可能なTCB数を計算し、引数に返す。¥ATTACH16では処
理152において得られた追加獲得可能TCB数と、ユーザが
JCLにて指定した生成要求サブタスク数との小さい方を
変数NPに設定し、処理153においてサブタスクの生成をO
Sに依頼する公知のATTACHマクロをNP回発行する。ATTAC
Hマクロの発行時には入口アドレスとして¥PRCS20の入
口アドレスを指定して、サブタスクに¥PRCS20を実行さ
せる。処理154においてATTACHマクロの実行によりOSか
ら返されるNP個のTCBの先頭アドレスおよび変数NPをリ
ストにし、リストの先頭アドレスを引数ADRLSTに返す。
¥DETACH17では処理157において¥ATTACH16で返され
た引数ADRLSTを引数として受けとり、そこに示されるTC
Bの消去をOSに依頼する公知のDETACHマクロをNP回発行
する。
次にプロセス情報テーブル149の内容を示す第5図を
参照しつ、タスクk(TCBk)において¥DISP18が実行さ
れている場合の処理を第7図を使って説明する。
第5図のinuseビット141は¥DISP18においてプロセス
情報テーブル149を作成した時に1に設定され、該プロ
セス情報テーブル149から生成された全ての子プロセス
の実行が終了した時に¥WAIT19によって0が設定される
ビットであり、該ビットが1である間は該プロセス情報
テーブルエリアは使用中である。
次フリーエリアポインタフィールド142はタスクk用
のローカルデータ域(30,35)(第1図)内でプロセス
情報テーブルエリア(31,36)どうしをチェインするも
のであり、次のプロセス情報テーブルエリアの先頭アド
レスを保持している。
並列プロセスキューポインタフィールド143は並列プ
ロセスキュー25(第1図)内のプロセス情報テーブルど
うしをチェインするものであり、該プロセス情報テーブ
ル149が並列プロセスキュー内のエントリであれば0
が、途中のエントリであれば次のプロセス情報テーブル
の先頭アドレスが設定される。
第7図の処理161において、タスクk用のプロセス情
報テーブル用フリーエリア(31,36)からプロセス情報
テーブルエリアを獲得する。フリーエリアポインタk
(32,37)はプロセス情報テーブル用フリーエリアをど
こまで使用したかを示すポインタであり、処理162では
それにより示されるプロセス情報テーブル149内の次フ
リーエリアポインタフィールド143の値を新たにフリー
エリアポインタk(32、37)に設定することにより次の
プロセス情報テーブルエリアのアドレスを得、処理163
では該プロセス情報テーブルエリア149内のinuseビット
141が0かどうか調べる。inuseビット141が1であれば
該プロセス情報テーブル149は使用中であるから再び処
理162を実行する。処理163においてinuseビット141が0
であればinuseビット141に1を設定して該プロセス情報
テーブルエリアが使用中であることを表示する。
処理165においては獲得したプロセス情報テーブル149
に、実行時に決定される並列プロセスの実行に必要な情
報を設定する。並列プロセス実行情報アドレスフィール
ド144には、コンパイラの生成した並列プロセスの実行
に必要な情報を保持するため、引数として入力された並
列プロセス実行情報(63、64)の先頭アドレスを設定す
る。ループ分割数LCフィールド145には該並列プロセス
情報テーブルから幾つの子プロセスを生成するかを、本
ジョブにおいて生成したサブタスク数やサブプロセス
数、プロセスのロードバランスなどを考慮して実行時に
決定し設定する。第4図におけるサブプロセス2、3、
4(82、85、88)を生成するときはLCに3を設定する。
¥PRCS20や¥WAIT19は、ループ分割数LC145を1ずつ減
算していくことにより並列プロセスキュー25からサブプ
ロセスを1つずつ取りだす。
プロセス終了ポストフラグフィール146は、その値を
1減算することによって、各々の子プロセスの終了を通
知するための連絡領域であり、初期値として上記ループ
分割数を設定する。
事象制御ブロックであるプロセス終了ポスト/ウエイ
トECB(Event Control Block)フィールド147もまた子
プロセスの終了を通知するための連絡領域である。該タ
スクkにおいて¥DISP18に続いて実行される¥WAIT19
は、一定時間待っても全子プロセスが終了せずまた新し
いサブプロセスも生成されない場合はWAITマクロを発行
する。その場合に実行を最後に終了した子プロセスが通
知してくるのがプロセス終了ポスト/ウエイトECBフィ
ールド147であり、該子プロセスがPOSTマクロを発行す
べきか否かを表示するのがプロセス終了ポスト/ウエイ
トマクロ発行フラグ148であり、いずれも初期値として
0を設定する。
処理166においては、値を設定したプロセス情報テー
ブルを並列プロセスキュー25に排他的に登録する。排他
制御が必要なのは、データの更新が複数のタスクで同時
に起こる可能性があるためである。例えば本発明の実施
例のように並列処理がネスティングしている場合は、第
4図に示すようにサブプロセス2(82)とサブプロセス
3(85)で同時に¥DISP18が動作しうる。キューへのエ
ントリ排他的登録は公知の排他制御技術により主記憶へ
の排他的アクセス命令を使用して実現できる。主記憶へ
の排他的アクセス命令としてはたとえばHITAC M−ser
isのCS(Compare and Swap)命令などが挙げられる。
前述の¥PRCS20や¥WAIT19は一定時間待っても並列プ
ロセスキューにプロセス情報テーブルが登録されない時
は、タスク対応のタスクウエイトフラグTWi(26、27)
に1を設定してCPU資源の有効活用のためWAITマクロを
発行して該タスクを待ち状態にさせる。処理167におい
ては、上記タスクに対してタスク対応のタスクiECB(2
8、29)を連絡領域に指定してWAITマクロを発行してい
るタスクに対して、POSTマクロを発行し,待ち状態を解
除すると共に新しいプロセス情報テーブル149が登録さ
れたことを通知する。
処理168においては獲得したプロセス情報テーブルの
先頭アドレスを第2引数PTBLに返し、¥DISP18の実行を
終了する。
次に¥PRCS20がタスクk(TCBk)で実行される場合の
処理を第8図(a),(b)を参照しつつ説明する。
処理181は並列プロセスキュー25の先頭ポインタQH21
が0か否かを判定する。0でない場合は以下処理183〜1
92を実行する。先頭ポインタQH21が0でないとはプロセ
ス情報テーブルが並列プロセスキュー25中に存在するこ
とを意味する。
処理183は先頭ポインタQH21で示されるプロセス情報
テーブルから生成されるサブプロセスを排他的に取り出
す。具体的にはプロセス情報テーブル149内のループ分
割数LC145を排他的に1減算する。排他制御が必要なの
は複数のタスクにより¥PRCS20や¥WAIT19が実行されLC
の減算が同時に起こりうるからである。サブプロセスの
実行時には、減算後のLCの値を第4図におけるLC1やLC2
として使用する。
処理184は幾つめのサブプロセスを取りだしたかを調
べるもので、減算後のLCの値が負の場合は他タスクの更
新により既に全てのサブプロセスが取り出されたことを
意味するので再び処理181を実行する。減算後のLCの値
が正の場合はサブプロセスを獲得したことを意味し処理
186を実行する。減算後のLCの値が0の場合は該プロセ
ス情報テーブル149から生成された最後のサブプロセス
を獲得したことを意味するので、並列プロセスキュー25
からプロセス情報テーブル149を排他的に取り外す処理1
85を実行し、その後処理186を実行する。キューからエ
ントリを取りはずす処理は公知の排他制御技術により前
述のCS命令などを使用して実現できる。
処理186ではサブプロセス実行に必要なワークデータ
領域を、該プロセス情報テーブル149から指される並列
プロセス実行情報(63、64)中にある必要ワークデータ
領域の大きさフィールド(72、75)を読みだし、その値
の大きさの領域をタスクk用のローカルデータ域(33、
38)に確保する。ワークデータ領域とは、並列プロセス
実行のために新たに必要となる領域で、サブプロセス2
〜10(82〜90)のループ制御変数やレジスタが不足する
ために必要な一時変数などである。確保はワークデータ
領域ポインタk(43、39)(第1図)の値にワークデー
タ領域の大きさフィールド(72、75)の値を加算するこ
とにより行い、ワークデータ領域(33、38)の確保/解
放管理はスタック的に行われる。
処理187はワークデータ領域先頭アドレスを、オブジ
ェクト中でワークデータ領域ベースレジスタとして使用
しているレジスタに設定し、プロセス情報テーブル149
から指される並列プロセス実行情報(63、64)中にある
並列プロセスオブジェクト先頭アドレスフィールド(7
1、74)を読みだし、そのアドレスに分岐を行い、サブ
プロセスを実行する。
処理188はサブプロセス実行終了後、処理186で確保し
たワークデータ領域(33、38)を解放する。解放はワー
クデータ領域ポインタk(34、39)の値からワークデー
タ領域の大きさフィールド(72、75)の値を減算するこ
とにより行う。
処理189〜192は該子プロセスの終了を親プロセスに通
知する。子プロセスの終了通知は処理188においてプロ
セス情報テーブル149中のプロセス終了ポストフラグ146
から排他的に1減算することにより行う。プロセス終了
ポストフラグ146は初期値としてループ分割数LCが設定
されており、値が0になったら全ての子プロセスが終了
したことを示す。処理190は減算後のプロセス終了ポス
トフラグ146が0であるかを調べることにより該子プロ
セスが全子プロセス中最後に実行を終了したプロセスで
あるかを調べる。0である場合は最後の子プロセスであ
るので、処理191を実行してプロセス終了ポスト/ウエ
イトマクロ発行フラグ148が1であるかをさらに調べる
ことにより親プロセスがWAITマクロを発行しているかを
調べる。1である場合はWAITマクロを発行しているので
処理192を実行して親プロセスに対しプロセス情報テー
ブル149中のプロセス終了ポスト/ウエイトECB147を連
絡領域としてPOSTマクロを発行して、再び処理181を実
行する。処理190においてプロセス終了ポストフラグ146
が0でなかった場合および処理191においてプロセス終
了ポスト/ウエイトマクロ発行フラグ148が1でなかっ
た場合は、親プロセスに対しPOSTマクロを発行する必要
がないので再び処理181を実行する。
処理181において並列プロセスキューの先頭アドレスQ
H21が0である場合は処理182を実行し、一定の待ち時間
期限に到達したかを調べる。期限時間にまだ到達してい
ないならば再び処理181を実行し、並列プロセスキュー2
5に新しいプロセス情報テーブル149が登録されてQH21が
0でなくなるか、期限時間に到達するかまで処理181の
実行を繰り返す。期限時間は、システムが現在多重ジョ
ブ環境で運営されているか等のシステムの稼働状況や、
ユーザの指定したジョブクラスなどを考慮して¥PRCS20
により決定される。
処理182において期限時間に到達した場合、システム
のスループットを低下させないために自らCPU使用権を
手離す処理193を実行する。
処理193では該タスクkがWAITマクロを発行中である
ことを表示するタスク対応のタスクウエイトフラグTWk
(26、27)に1を設定しタスク対応のタスクkECB(28,2
9)を連絡領域としてWAITマクロを発行する。
他タスクで実行される¥DISP18によって新しいプロセ
ス情報テーブル149が生成された時にはタスクkECB(28,
29)に通知がなされ、タスクkはCPU使用権を取り戻
し、処理194から¥PRCS20の実行を再開する。処理194で
はWAITマクロ発行中ではなくなったことを表示するため
にタスクウエイトフラグTWk(26,27)に0を設定すると
ともに、連絡領域タスクkECB(28,29)に再使用にそな
えて0を設定し、再び処理181を実行する。
次にタスクk(TCBk)で¥WAIT19が実行される場合の
処理を第9図(a),(b)を使用して説明する。
処理211はプロセス情報テーブル149中のプロセス終了
ポストフラグ146が0であるかを調べることにより生成
した全ての子プロセスが終了したかを調べる。終了して
いる場合は処理214を実行し、プロセス情報テーブル149
中のinuseビット141を0にすることにより該プロセス情
報テーブルエリアを解放し、タスクkにおいて後に¥DI
SP18を実行する場合にそなえ、¥WAIT19の実行を終了す
る。処理211においてまだ終了していない子プロセスが
ある場合は、処理212が実行して並列プロセスキュー先
頭アドレスQH21が0でないかを調べることにより並列プ
ロセスキュー25内にプロセス情報テーブル149が存在す
るかを調べ、存在する場合は処理215から224を実行して
新しいプロセスを実行する。処理215から224の処理内容
は、¥PRCS20の処理を説得した第8図(a),(b)に
おける処理183から192と同一である。
処理212において並列プロセスキュー25内にプロセス
情報テーブル149が存在しない場合は、処理213を実行
し、一定の待ち時間期限に到達したかを調べる。期限時
間にまだ到達していないならば再び処理211を実行し、
全ての子プロセスの実行が終了してプロセス終了ポスト
フラグ146が0となるか、並列プロセスキュー25に新し
いプロセス情報テーブル149が登録されてQH21が0でな
くなるか、期限時間に到達するかまで処理211〜213の実
行を繰り返す。
期限時間は、システムが現在多重ジョブ環境で運営さ
れているか等のシステムの稼働状況や、ユーザの指定し
たジョブクラス、およびコンパイラが並列プロセスの予
想実行時間などから決定した待ち時間期限である第一引
数LIMITなどを考慮して¥WAIT19により決定される。
処理213において期限時間に到達した場合、システム
のスループットを低下させないために自らCPU使用権を
手離す処理225を実行する。
処理225では該タスクkがWAITマクロを発行中である
ことを表示するタスク対応のタスクウエイトフラグTWk
(26、27)に1を設定し、また該親プロセスがWAITマク
ロを発行中であることを表示するプロセス情報テーブル
149中のプロセス終了ポスト/ウエイトマクロ発行フラ
グ148に1を設定する。そして新しいサブプロセスが生
成された場合および全ての子プロセスが終了した場合の
いずれにも連絡してもらえるように、タスクkに対応す
るタスクkECB(28,29)およびプロセス情報テーブル149
中のプロセス終了ポスト/ウエイトECB147の双方を連絡
領域としてWAITマクロを発行する。
新しいサブプロセスが生成された時もしくは全ての子
プロセスが終了した時には、タスクkECB(28,29)もし
くはプロセス終了ポスト/ウエイトECB147に通知がなさ
れ、タスクkはCPU使用権を取り戻し、処理226から¥WA
IT19の実行を再開する。処理226ではプロセス終了ポス
ト/ウエイトECB147に対して通知があったのかを調べ、
その場合はプロセス情報テーブルエリアを解放する処理
214を実行する。一方タスクkECB(28,29)に対する通知
があった場合は処理227を実行し、タスクウエイトフラ
グTWk(26,27)およびタスクkECB(28,29)に0を設定
して再び処理211を実行する。
(実施例2) 次に、子プロセスの終了とサブプロセスの生成という
2つの事象の成立を1つのフラグで代表させて待つ他の
実施例を第10図から第14図を参照しながら説明する。
第10図は全体構成を示す図である。第1図と異なるの
は、2つの事象の成立を待つためのタスク対応のタスク
フラグ46,47(TF10,TF11)、¥DISP18がプロセス情報テ
ーブル149作成時に各サブプロセスに対してジョブ全体
で一意にプロセス番号を与えるために使用するプロセス
ID順序番号PIDSEQ45、および現在各タスクで¥WAIT19を
実行中のプロセスのプロセス番号を保持するためのタス
ク対応の実行プロセスIDフィールドEXPIDi(48,49)が
追加されている点である。実行プロセスIDフィールドEX
PIDi(48,49)には¥WAIT19実行時以外は0が設定され
ている。¥WAIT19では第9図(a),(b)に示したよ
うにプロセス終了ポストフラグ146と並列プロセスキュ
ー先端アドレスQH21のいずれかが変化するのを待つので
はなく、タスクフラグTFi(46,47)が変化するのを待
つ。
コンパイラが生成するオブジェクトモジュール40は第
2図と同一である。
OS6は第1図と同様ユーザ空間ASCB1(10)およびメイ
ンタスクTCB10(11)を生成する。メインプログラムは
メインタスクTCB10(11)で実行開始され、プロローグ
処理65においては、第6図で説明したのと同一の実行時
ルーチン¥ATTACH16を呼び、サブタスクTCB11(12)が
生成される。サブタスクTCB11(12)は、新しいサブプ
ロセスの生成を待ち、サブプロセスを取りだして実行す
る実行時ルーチン¥PRCS20を実行する。¥PRCS20では子
プロセスの終了をプロセス終了ポストフラグ146に通知
するという第8図(a),(b)の処理に追加して、あ
るタスクが現在¥WAIT19を実行中の親プロセスを実行中
であれば該タスクに対応するタスクフラグTFi(46,47)
にも通知する。あるタスクで親プロセスが¥WAIT19を実
行中であるかは実行プロセスIDフィールドEXPIDi(48,4
9)を参照して調べる。
プロローグ処理65の後実行されるメインプロセスの実
行が並列実行部分の直前に達したら、プロセス情報テー
ブル149の作成と並列プロセスキューへの登録および他
タスクへのプロセス情報テーブル149登録の通知を行う
実行時ルーチン¥DISP18を呼ぶ。¥DISP18では第7図の
処理に追加して、各サブプロセスへのプロセス番号の付
与、実行時ルーチン¥WAIT19を実行しながらタスクフラ
グTFi(46,47)の変化を待っているプロセスに対するプ
ロセス情報テーブル149登録の通知などを行う。
プロセス情報テーブル149を作成するためのフリーエ
リア(31、36)および並列プロセスキュー25の構成は、
第1図と同一である。
¥DISP18の実行が終了するとメインプロセスは全ての
子プロセスの実行終了もしくは並列プロセスキュー25へ
の新しいプロセス情報テーブル149の登録を待つ実行時
ライブラリ¥WAIT19を呼ぶ。¥WAIT19では第9図に示し
たようにプロセス終了ポストフラグ146と並列プロセス
キュー先頭アドレスQH21のいずれかが変化するのを待つ
のではなく、タスクフラグTFi(46,47)が変化するのを
待つ。
¥WAIT19の実行が終了するとメインプロセスは逐次実
行オブジェクトの実行を再開し、エピローグ処理69にお
いては生成したサブタスク12(TCB11)を消滅させる第
6図で説明したのと同一の実行時ルーチン¥DETACH18が
呼ばれプログラムが終了する。
33、38は並列プロセス実行に必要なワークデータ領域
を確保するためのデータ領域であり、34、39はそのスタ
ックポインタである。他ユーザ空間8、13(ASCB0,ASCB
2)およびその中で実行されるタスク9、14(TCB00,TCB
20)は本ジョブが多重ジョブ環境で実行される時OS6に
より生成される。
次にプロセス情報テーブル149の内容を示す第11図を
参照しつつ、タスクk(TCBk)において¥DISP18が実行
されている場合の処理を第12図を使って説明する。
第11図のinuseビット141、次フリーエリアポインタフ
ィールド142および並列プロセスキューポインタフィー
ルド143の意味および設定内容と設定タイミングは第5
図と同一である。
第12図の処理331において、タスクk用のプロセス情
報テーブル用フリーエリアからプロセス情報テーブルエ
リアを獲得する。この処理内容332〜334は第7図の処理
162〜164と同一である。
処理335においては獲得したプロセス情報テーブル149
に、実行時に決定される並列プロセスの実行に必要な情
報を設定する。並列プロセス実行情報アドレスフィール
ド144、ループ分割数LCフィールド145、プロセス終了ポ
ストフラグフィールド146、プロセス終了ポスト/ウエ
イトECBフィールド147およびプロセス終了ポスト/ウエ
イトマクロ発行フラグ148の意味および保持内容は第5
図と同一であり、第7図の処理165で設定したのと同一
の値を設定する。
プロセスIDフィールド301は各サブプロセスにジョブ
内で一意のプロセス番号を与えるためのフィールドで、
¥DISP18実行時にはプロセスID順番号PIDSEQ45(第1
図)の内容を与える。¥PRCS20もしくは¥WAIT19による
サブプロセス取りだし時にプロセスIDフィールド301の
内容を読みだし減算後のLCの値と加算し、確保したワー
クデータ領域(33、38)内に格納することによりプロセ
ス番号はジョブ内で一意の値となる。PIDSEQ45には作成
中のプロセス情報テーブル149から生成されるサブプロ
セス数即ちループ分割数を加算して値を更新しておくこ
とによりジョブ内に同じ値のプロセス番号は存在しなく
なる。
第4図のプロセスが生成、実行される場合を例にとっ
てプロセス番号の付与を説明する。メインプロセスのプ
ロセス番号は標準値として1が与えられている。メイン
プロセス1(81)で実行される¥DISP93はプロセスIDフ
ィールド301に2を与え、PIDSEQ45の値2にループ分割
数3を加えた値5に更新しておく。¥PRCSもしくは¥WA
IT(97、109、121)によりメインプロセス1(81)の子
プロセスが取りだされる時には2にLCの値が加算され、
それぞれプロセス番号2、3、4をもつサブプロセス
2、3、4(82、85、88)が生成される。サブプロセス
2(82)による¥DISP99の実行がサブプロセス3、4
(85、88)によるものより早かった場合、サブプロセス
2(82)で実行される¥DISP99がPIDSEQ45の値5をプロ
セスIDフィールド301に与え、PIDSEQ45には5にループ
分割数2を加えた値7を与えると、サブプロセス5、6
(83、84)が生成される。以下同様にしてサブプロセス
3、4(85、88)が¥DISP111、123を実行すると各サブ
プロセスにはジョブ内で一意のプロセス番号が与えら
え、PIDSEQ45には最後に11が格納される。
第11図の親プロセス番号PPIDフィールド302には¥DIS
P18を呼んだプロセスのワークデータ領域(33、38)中
のプロセス番号を読みだして与える。また親プロセス実
行TCB#フィールド303には¥DISP18を実行中のタスク番
号kを与える。該プロセス情報テーブル149から生成さ
れるサブプロセスは、PPIDフィールド302を参照して実
行終了を通知すべき親プロセスのプロセス番号を知り、
親プロセス実行TCB#フィールド303で示されるタスクk
に対応する実行プロセスIDkフィールド(48、49)の値
と比較して、該タスクkに対応するタスクフラグTFk(4
6、47)に通知を行うべきかを判断する。上記の制御を
行うのは、タスクkでは上記¥DISP18を呼んだプロセス
のみが実行されるわけではないため、無関係なプロセス
に子プロセス終了の通知を行ってしまうことを避けるた
めである。
処理336においては第7図の処理166と同様に、値を設
定したプロセス情報テーブル149を並列プロセスキュー2
5に排他的に登録する。
処理337では、¥WAIT19においてタスクフラグTFi(4
6,47)を参照しながら新しいサブプロセスの生成もしく
は子プロセスの終了通知を待っている他タスクに対しプ
ロセス情報テーブル149の登録を通知するために、実行
プロセスIDフィールド(48、49)に0以外が設定されて
いるタスクに対応するタスクフラグTFi(46,47)に通知
を行う。第7図においてこの処理が不要だったのは、¥
WAIT19が並列プロセスキュー先端アドレスQH21を参照し
ながらサブプロセスの生成を待っており、処理166にお
いてプロセス情報テーブル149を並列プロセスキュー25
に登録すれば自動的にQH21の値が変化したためである。
処理338においては第7図の処理167と同様に、WAITマ
クロ発行中のタスクに対しPOSTマクロを発行して新しい
プロセス情報テーブル149が登録されたことを通知す
る。
処理339においては第7図の処理138と同様に、獲得し
たプロセス情報テーブル149の先頭アドレスを第2引数P
TBLに返し、¥DISP18の実行を終了する。
次に¥PRCS20がタスクk(TCBk)で実行される場合の
処理を第13図(a),(b)を参照しつつ説明する。
処理351は第8図(a)の処理181と同様に、並列プロ
セスキュー先頭ポインタQH21が0か否かを判定し、0で
ない場合は以下処理353〜365を実行する。先頭ポインタ
QH21が0でないとはプロセス情報テーブル149が並列プ
ロセスキュー25中に存在することを意味する。
処理353〜356は第8図(a),(b)の処理183〜186
と同様に、先頭ポインタQH21で示されるサブプロセスを
排他的に取り出し、必要ならばプロセス情報テーブル14
9を並列プロセスキュー25から取り外した上でワークデ
ータ領域を必要ワークデータ領域の大きさフィールド
(72、75)に示される大きさだけタスクk用のローカル
データ域(30、35)に確保する。
処理357は、プロセス情報テーブル149中のプロセスID
フィールド301から読みだした値と減算後のLCの値を加
算することによりプロセス番号を決定し、確保したワー
クデータ領域(33、38)に格納する。
処理358〜359は第8図(b)の処理187〜188と同様
に、並列プロセスオブジェクト先端アドレスに分岐を行
い、サブプロセスを実行した後、確保したワークデータ
領域(33、38)を解放する。
処理360〜365は該子プロセスの終了を親プロセスに通
知する。処理360において第8図(b)の処理189と同様
に、子プロセスの終了通知をプロセス情報テーブル149
中のプロセス終了ポストフラグ146から排他的に1減算
することにより行う。処理361は減算後のプロセス終了
ポストフラグ146が0であるかを調べることにより該子
プロセスが全子プロセス中最後に実行を終了したプロセ
スであるかを調べる。0である場合は最後の子プロセス
であるので、処理362を実行して親プロセスがタスクで
実行されていてかつ¥WAIT19を実行中であるかを調べ
る。上記のためには、処理362においてプロセス情報テ
ーブル149中の親プロセス実行TCB#フィールド303に示
されるタスクに対応する実行プロセスID EXPID(48、4
9)がプロセス情報テーブル149中の親プロセスIDフィー
ルド302の値と等しいかを調べる。等しければあるタス
クで親プロセスが¥WAIT19を実行中なので、処理363を
実行して該タスクに対応するタスクフラグ(46、47)を
1に設定して全子プロセスが実行終了したことを通知
し、処理351を再実行する。
等しくなければ親プロセスによる¥WAIT19は実行中で
はないので、さらに処理364を実行してプロセス終了ポ
スト/ウエイトマクロ発行フラグ148が1であるかを調
べることにより親プロセスがWAITマクロを発行している
かを調べる。1である場合はWAITマクロを発行している
ので処理365を実行して親プロセスに対しプロセス情報
テーブル149中のプロセス終了ポスト/ウエイトECB147
を連絡領域としてPOSTマクロを発行して、再び処理351
を実行する。処理364においてプロセス終了ポスト/ウ
エイトマクロ発行フラグが1でなかった場合は、親プロ
セスに対しPOSTマクロを発行する必要がないので再び処
理351を実行する。
処理351において並列プロセスキュー25の先頭アドレ
スQH21が0である場合は第8図(a)における処理182
〜181と同様に処理351〜352を実行し、並列プロセスキ
ュー25に新しいプロセス情報テーブル149が登録されてQ
H21が0でなくなるか、期限時間に到達するかまで処理3
51の実行を繰り返し、期限時間に到達した場合は、WAIT
マクロを発行中であることを表示するタスク対応のタス
クウエイトフラグTWk(26、27)に1を設定しタスク対
応のタスクkECB(28,29)を連絡領域としてWAITマクロ
を発行する。¥PRCS20では待つべき事象が1つのため、
タスクフラグTFkを参照せず直接QH21を参照する。
新しいプロセス情報テーブル149が生成された時には
タスクkECB(28,29)に通知がなされ、処理367から¥PR
CS20の実行が再開される。処理367では第8図(a)の
処理194と同様にタスクウエイトフラグTWk(26,27)と
タスクkECB(28,29)に再使用にそなえて0を設定し、
再び処理351を実行する。
次にタスクk(TCBk)で¥WAIT19が実行される場合の
処理を第14図(a),(b)を使用して説明する。
処理381はプロセス情報テーブル149中のプロセス終了
ポストフラグ146が0であるかを調べることにより生成
した全ての子プロセスが終了したかを調べる。終了して
いる場合は処理383を実行し、プロセス情報テーブル149
中のinuseビット1410を0にすることにより該プロセス
情報テーブルエリアを解放し、タスクkにおいて後に¥
DISP18実行する場合にそなえて、¥WAIT19に実行を終了
する。処理381においてまだ終了していない子プロセス
がある場合は、処理382を実行して並列プロセスキュー
先端アドレスQH21が0でないかを調べることにより並列
プロセスキュー25内にプロセス情報テーブル149が存在
するかを調べ、存在する場合は処理384から396を実行し
て新しいプロセスを実行する。処理384から396の処理内
容は、¥PRCS20の処理を説明した第13図における処理35
3から365と同一である。
処理382において並列プロセスキュー25内にプロセス
情報テーブル149が存在しない場合は、処理401〜408を
実行し、タスクフラグTFk(46,47)を参照することによ
り一定の待ち時間期限の間新しいサブプロセスの生成も
しくは全ての子プロセスの終了を待つ。
処理401においては、これからタスクフラグTFk(46,4
7)を参照して待つ親プロセスのプロセス番号を表示す
るため、該¥WAIT19を呼んだ親プロセスのワークデータ
領域(33,38)から該親プロセスのプロセス番号を読み
だし実行プロセスIDk(48,49)に設定する。
処理402においてはタスクフラグTFk(46,47)に初期
値を設定する。タスクフラグTFk(46,47)には全ての子
プロセス終了時もしくは新しいサブプロセス生成時に1
が設定されるので、初期値として、プロセス終了ポスト
フラグ146の値が0即ち全ての子プロセスが終了してい
れば1を、0以外ならば0を設定する。
処理403ではタスクフラグTFk(46,47)に通知があっ
たかを調べ、あった場合は処理404を実行し、すでにタ
スクフラグTFk(46,47)を参照して待ってはいないこと
を表示するため実行プロセスID EXPIDk(48,49)に0を
設定する。さらに処理405へ実行して該タスクフラグTFk
(46,47)への通知は全ての子プロセス実行終了による
ものかを調べるためプロセス終了ポストフラグ146が1
であるかを調べ、1であれば全ての子プロセスは終了し
ているので処理383を実行する。1でなければタスクフ
ラグTFk(46,47)への通知は新しいサブプロセス生成に
よるものであるので処理406を実行して並列プロセスキ
ュー先頭アドレスQH21が0でないかを調べる。0でなけ
ればプロセス情報テーブル149が登録されているのでサ
ブプロセスを取りだし実行する処理384〜396を実行す
る。0であれば既に他タスクが登録されたプロセス情報
テーブル149を取りはずしてしまったことを意味するの
で処理381を再実行する。
処理403においてタスクフラグTFk(46,47)に通知が
ない場合は処理407を実行し待ち時間期限に到達したか
を調べる。期限時間にまだ到達していないならば再び処
理403を実行し、タスクフラグTFk(46,47)に対し全子
プロセス終了もしくは新しいサブプロセス生成の通知が
あるか、期限時間に到達するかまで処理403の実行を繰
り返す。
処理407において期限時間に到達した場合は処理408を
実行してすでにタスクフラグTFk(46,47)を参照して待
ってはいないことを表示するため実行プロセスID EXPID
(48,49)に0を設定し、その後システムのスループッ
トを低下させないためにWAITマクロを発行して自らCPU
使用権を手離す処理409を第9図(a)を処理225と同様
に実行する。
新しいサブプロセスが生成された時もしくは全ての子
プロセスが終了した時には、タスクkECB(28,29)もし
くはプロセス終了ポスト/ウエイトECB147に通知がなさ
れ、タスクkはCPU使用権を取り戻し、処理410から¥WA
IT19の実行を再開する。処理410ではプロセス終了ポス
ト/ウエイトECB147に対して通知があったのかを調べ、
その場合はプロセス情報テーブルエリアを解放する処理
383を実行する。一方タスクkECB(28,29)に対する通知
があった場合は処理411を実行し、タスクウエイトフラ
グTWk(26,27)およびタスクkECB(28,29)に0を設定
して再び処理381を実行する。
〔発明の効果〕
以上、説明したように、本発明によればプロセッサ資
源を有効に活用することができ、また多重ジョブ環境で
もシステムスループットを低下させず、かつスピンルー
プ方式の高速性を失わないプロセス間通信を実現でき
る。さらに多重ジョブ環境で発生するデッドロック状態
を検出し、それを除去することができる。
【図面の簡単な説明】
第1図は、本発明の1実施例におけるプロセス分散方法
の全体概要図、 第2図は、本発明の1実施例におけるソースプログラム
例を示す図、 第3図は、本発明の1実施例におけるオブジェクトモジ
ュールの構成図、 第4図は、本発明の1実施例におけるプロセスの概念的
実行順序を示した図、 第5図は、本発明の1実施例におけるプロセス情報テー
ブル構造を示した図、 第6図(a)〜第6図(c)は、本発明の1実施例にお
ける並列処理用実行時ルーチン¥ATTACHおよび¥DETACH
の実行方法を示す図、 第7図は、本発明の1実施例における並列処理用実行時
ルーチン¥DISPの実行方法を示す図、 第8図(a)、第8図(b)は、本発明の1実施例にお
ける並列処理用実行時ルーチン¥PRCSの実行方法を示す
図、 第9図(a)、第9図(b)は、本発明の1実施例にお
ける並列処理用実行時ルーチン¥WAITの実行方法を示す
図、 第10図は、本発明の他の実施例におけるプロセス分散方
法の全体概要図、 第11図は、本発明の他の実施例におけるプロセス情報テ
ーブル構造を示した図、 第12図は、本発明の他の実施例における並列処理用実行
時ルーチン¥DISPの実行方法を示す図、 第13図(a)、第13図(b)は、本発明の他の実施例に
おける並列処理用実行時ルーチン¥PRCSの実行方法を示
す図、 第14図(a)、第14図(b)は、本発明の他の実施例に
おける並列処理用実行時ルーチン¥WAITの実行方法を示
す図、 第15図は、従来技術の一例を示す図、 第16図は、本発明の特徴を説明するための図である。 図中、1〜4……プロセッサ、5……主記憶、6……O
S、10……ユーザ空間、11、12……並列プロセスを実行
するためのタスク、16……並列処理用実行時ルーチン¥
ATTACH、17……並列処理用実行時ルーチン¥DETACH,18
……並列処理用実行時ルーチン¥DISP,19……並列処理
用実行時ルーチン¥WAIT,20……並列処理用実行時ルー
チン¥PRCS,25……並列プロセスキュー、21……並列プ
ロセスキュー先頭アドレスQH,26、27……タスクウエイ
トフラグ、46、47……タスクフラグ、28、29……タスク
ECB,48、49……実行プロセスID,31,36……プロセス情報
テーブル用フリーエリア、40……オブジェクトモジュー
ル、51……ソースプログラム、63、64……オブジェクト
モジュール中の並列プロセス実行情報、81……メインプ
ロセス、82〜90……サブプロセス、149……プロセス情
報テーブル、141……inuseビット、145……ループ分割
数、146……プロセス終了フラグ、147……プロセス終了
ポスト/ウエイトECB,148……プロセス終了ポスト/ウ
エイトマクロ発行フラグ,301……プロセスIDフィール
ド、302……親プロセスIDフィールド。
───────────────────────────────────────────────────── フロントページの続き (72)発明者 田中 義一 東京都国分寺市東恋ケ窪1丁目280番地 株式会社日立製作所中央研究所内 (56)参考文献 特開 昭63−208948(JP,A) 特開 昭59−60542(JP,A) 特開 昭61−60137(JP,A) 中村明・著,「ワークステーションシ リーズ オペレーティングシステム構築 法−UNIX詳説−構造編]、丸善株式 会社・発行(昭和61年初版)、P.91〜 92 (58)調査した分野(Int.Cl.6,DB名) G06F 9/46,15/16

Claims (5)

    (57)【特許請求の範囲】
  1. 【請求項1】複数のプロセッサ上で、複数の論理的プロ
    セッサが複数のプロセスを並列に実行し、該論理的プロ
    セッサは、第1のプロセス実行中に該第1のプロセスに
    よって生成された第2のプロセスにおける事象の成立を
    待つ並列処理システムにおいて、 該第2のプロセスが終了したという第1の事象が成立し
    ているか否かを調べる第1のステップと、第1のプロセ
    スの実行中に第3のプロセスが生成されたという第2の
    事象が成立しているか否かを調べる第2のステップとを
    有し、前記論理的プロセッサは前記第1のステップを実
    行して前記第1の事象が成立していない場合は前記第2
    のステップを実行し、前記第2のステップの実行におい
    て前記第2の事象が成立していない場合は前記第1のス
    テップを再度実行して、前記第1のステップと前記第2
    のステップの実行を繰り返すことにより、前記第1の事
    象もしくは前記第2の事象のいずれかの成立をスピンル
    ープして待ち、前記第1の事象が成立した場合は前記第
    1のプロセスの実行を継続し、前記第2の事象が成立し
    た場合は論理的プロセッサの使用権を維持したまま前記
    第1のプロセスの実行を中断して前記第3のプロセスを
    実行することを特徴とするプロセス分散方法。
  2. 【請求項2】前記スピンループを所定の時間実行しても
    前記第1の事象も第2の事象も成立しなかった場合に、
    前記第1のプロセスを実行している前記論理的プロセッ
    サのプロセッサ使用権を一時的に取り上げるようオペレ
    ーテイングシステムに依頼することを特徴とする請求項
    1記載のプロセス分散方法。
  3. 【請求項3】前記所定の時間は、第1のプロセスの実行
    時に決定されることを特徴とする請求項2記載のプロセ
    ス分散方法。
  4. 【請求項4】複数のプロセッサ上で、複数の論理的プロ
    セッサが複数のプロセスを並列に実行し、該論理的プロ
    セッサは、第1のプロセッサ実行中に該第1のプロセス
    において生成された第2のプロセスにおける事象の成立
    を待つ並列処理システムにおいて、該第2のプロセスが
    終了したという第1の事象もしくはプロセスの実行中に
    第3のプロセスが生成されたという第2の事象のいずれ
    かが成立したかを調べるステップを有し、前記論理的プ
    ロセッサは前記ステップを繰り返し実行することによ
    り、前記第1の事象もしくは前記第2の事象のいずれか
    の成立をスピンループして待ち、前記第1の事象が成立
    した場合は前記第1のプロセスの実行を継続し、前記第
    2の事象が成立した場合は論理的プロセッサの使用権を
    維持したまま前記第1のプロセスの実行を中断して前記
    第3のプロセスを実行することを特徴とするプロセス分
    散方法。
  5. 【請求項5】前記スピンループを所定の時間実行しても
    前記第1の事象も第2の事象も成立しなかった場合に、
    前記プロセスを実行している前記論理的プロセッサのプ
    ロセッサ使用権を一時的に取り上げるようオペレーテイ
    ングシステムに依頼することを特徴とする請求項4記載
    のプロセス分散方法。
JP2026449A 1990-02-05 1990-02-05 プロセス分散方法 Expired - Fee Related JP2829078B2 (ja)

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 JPH03230225A (ja) 1991-10-14
JP2829078B2 true 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)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5737622A (en) * 1986-04-14 1998-04-07 National Instruments Corporation Method and apparatus for more efficient function synchronization in a data flow program
US5497500A (en) * 1986-04-14 1996-03-05 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 日本電気株式会社 ジョブ実行における分散型制御方法及びその装置
EP0635784B1 (de) * 1993-07-23 1999-08-25 Siemens Aktiengesellschaft Multiprozessorsystem
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 株式会社日立製作所 分散処理システム
WO1996027827A1 (en) * 1995-03-06 1996-09-12 Intel Corporation A computer system with unattended on-demand availability
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)

* Cited by examiner, † Cited by third party
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 株式会社日立製作所 情報処理装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
中村明・著,「ワークステーションシリーズ オペレーティングシステム構築法−UNIX詳説−構造編]、丸善株式会社・発行(昭和61年初版)、P.91〜92

Also Published As

Publication number Publication date
US5193186A (en) 1993-03-09
JPH03230225A (ja) 1991-10-14

Similar Documents

Publication Publication Date Title
JP2829078B2 (ja) プロセス分散方法
US10241831B2 (en) Dynamic co-scheduling of hardware contexts for parallel runtime systems on shared machines
JP2866241B2 (ja) コンピュータシステムおよびスケジューリング方法
US5257372A (en) Methods for efficient distribution of parallel tasks to slave processes in a multiprocessing system
US20020046230A1 (en) Method for scheduling thread execution on a limited number of operating system threads
EP0531107A2 (en) Program execution manager
US20050188177A1 (en) Method and apparatus for real-time multithreading
US7296271B1 (en) Replaceable scheduling algorithm in multitasking kernel
JPH06208552A (ja) スモール・グレイン機構
JP2005284749A (ja) 並列処理コンピュータ
JPH10124330A (ja) オブジェクト指向コンピューティングシステムのプログラマインタフェースシステムおよび該システムをもつオブジェクトコードを有する記憶媒体
Agarwal et al. Deadlock-free scheduling of X10 computations with bounded resources
Walmsley Multi-threaded Programming in C++
Giacaman et al. Parallel task for parallelising object-oriented desktop applications
Protze et al. MPI detach-asynchronous local completion
JP7346649B2 (ja) 同期制御システムおよび同期制御方法
CN116204289A (zh) 进程数据处理方法、终端设备及存储介质
JP2020160482A (ja) 性能見積もり装置、端末装置、システムlsi及びプログラム
Pinho et al. Real-time fine-grained parallelism in ada
JPH08123699A (ja) 並行処理方法、並行処理システム及び並行処理用プログラムの変換ツール
Rothberg Interrupt handling in Linux
Singh Design and Evaluation of an Embedded Real-time Micro-kernel
CN112612582B (zh) 信号量功能实现方法和装置
Aldea et al. Implementing an application-defined scheduling framework for ada tasking
Dokulil et al. Improving Blocking Operation Support in Intel TBB

Legal Events

Date Code Title Description
LAPS Cancellation because of no payment of annual fees