(57)【特許請求の範囲】
【請求項１】
複数プロセッサ上で任意数のプロセスによってジョブを実行するジョブ実行システムにおいて、
上記各プロセッサは、
複数のプロセッサ上でそれぞれ処理を実行するプロセスにそれぞれ割り当てた一意の実行プロセスＩＤを登録して管理する実ＰＩＤ制御表と、
複数のプロセッサ上でジョブを実行する複数のプロセスに対して当該ジョブ内でそれぞれ割り当てた一意の仮想プロセスＩＤを、上記一意の実プロセスＩＤにそれぞれ対応づけて登録して管理する仮想ＰＩＤ制御表と、
ジョブ毎に仮想プロセスＩＤがいずれのプロセッサに存在するかを登録する仮想ＰＩＤ対応表と、
プロセスからデータを受け取ると、上記仮想ＰＩＤ対応表を参照し、当該データの仮想プロセスＩＤに対応するプロセッサを決定し、当該プロセッサにデータを送る手段と、
他のプロセッサからデータを受け取ると、当該データの仮想プロセスＩＤに対応するプロセスにデータを渡して実行させる手段と、
ジョブの凍結指示に対応して、指示されたジョブの上記仮想ＰＩＤ制御表とジョブ内のプロセスを退避して保存する手段と、
ジョブの解凍指示に対応して、上記保存しておいたジョブの仮想ＰＩＤ制御表とジョブ内のプロセスを復元した後、当該仮想ＰＩＤ制御表中に登録されている仮想プロセスＩＤに対して上記実ＰＩＤ制御表の空の実プロセスＩＤを割り当てて登録し、ジョブ内の各プロセスに処理を再開させる手段と
を備えることを特徴とするジョブ実行システム。
【請求項２】
複数のプロセッサ上でそれぞれ処理を実行するプロセスにそれぞれ割り当てた一意の実行プロセスＩＤを登録して管理する実ＰＩＤ制御表と、
複数のプロセッサ上でジョブを実行する複数のプロセスに対して当該ジョブ内でそれぞれ割り当てた一意の仮想プロセスＩＤを、上記一意の実プロセスＩＤにそれぞれ対応づけて登録して管理する仮想ＰＩＤ制御表と、
ジョブ毎に仮想プロセスＩＤがいずれのプロセッサに存在するかを登録する仮想ＰＩＤ対応表と
を備える各プロセッサを、
プロセスからデータを受け取ると、上記仮想ＰＩＤ対応表を参照し、当該データの仮想プロセスＩＤに対応するプロセッサを決定し、当該プロセッサにデータを送る手段と、
他のプロセッサからデータを受け取ると、当該データの仮想プロセスＩＤに対応するプロセスにデータを渡して実行させる手段と、
ジョブの凍結指示に対応して、指示されたジョブの上記仮想ＰＩＤ制御表とジョブ内のプロセスを退避して保存する手段と、
ジョブの解凍指示に対応して、上記保存しておいたジョブの仮想ＰＩＤ制御表とジョブ内のプロセスを復元した後、当該仮想ＰＩＤ制御表中に登録されている仮想プロセスＩＤに対して上記実ＰＩＤ制御表の空の実プロセスＩＤを割り当てて登録し、ジョブ内の各プロセスに処理を再開させる手段と
して動作させることを特徴とするジョブ実行プログラムを記録したコンピュータ読取可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、複数プロセッサ上で任意数のプロセスによってジョブを実行するジョブ実行システムおよび記録媒体に関するものである。
【０００２】
【従来の技術】
従来、複数のＰＥ（プロセッサ）間にまたがるプロセスの集合体によって実行するいわゆる並列ジョブを任意の時点で中断させ、その状態をファイルなどに保存して凍結し、システムのＩＰＬなどを経た後に、再びファイルから凍結したジョブを読み出し、当該ジョブの実行を継続するジョブ凍結・解凍機能がある。
【０００３】
このジョブ凍結・解凍の際に問題となるのは次の点である。ジョブに属するプロセス中では、そのプロセスの識別子（プロセスＩＤ）を使用して、ジョブ内のプロセス間のデータのやりとりを行うが、ジョブ凍結の際には、プログラム空間内にそのプロセスＩＤの情報が残っているため、ジョブ解凍時には、ジョブ内のプロセスについては、以前に持っていたプロセスＩＤを保証した形で、ジョブを再現してプロセスＩＤの衝突を回避する必要がある。
【０００４】
このとき、当該ジョブ外のプロセスで、そのプロセスＩＤと同一のプロセスＩＤが既に使用中である場合には、そのプロセスの終了を待たなければ、ジョブを再開できない。
【０００５】
これを解決するため、プロセスの凍結時にプロセスＩＤに関する情報を格納しておき、システム再起動時に格納情報をもとにプロセスＩＤを予約し、ジョブを解凍して再現し、他のジョブが非所望に当該プロセスＩＤを使用することによる待ちを無くし、即時に予約しておいた以前のプロセスＩＤを用いてプロセス間のデータのやりとりを開始して処理を再開するようにしていた。
【０００６】
【発明が解決しようとする課題】
上述したように、従来のジョブ凍結・解凍機能では、解凍時のプロセスＩＤの衝突を避けるために、システムの起動時にプロセスＩＤを予め予約しておく必要があり、このために解凍するジョブに応じた予約のための格納情報を確保し、システム起動時に予約して確保する必要が生じる。
【０００７】
このような従来のジョブ凍結・解凍機能では、予めプロセスＩＤの予約が必要であり、凍結された任意のジョブを解凍できないという制約が生じる問題があった。
【０００８】
また、並列プログラムでは、ジョブを構成するプログラムがＰＥの数だけ存在するため、多数のプロセスＩＤを予約しておく必要があり、その分だけシステム中で常に使用できないプロセスＩＤが存在し、他のプロセスのプロセスＩＤの採番範囲を圧迫してしまうという問題も発生する。特にジョブ凍結・解凍機能が要求される大規模なジョブ程、並列度が高く、多数のプロセスを必要とする傾向があり、極めて多数のプロセスＩＤが使用できなくなってしまうという問題がある。
【０００９】
本発明は、これらの問題を解決するため、一意な実プロセスＩＤを管理する実ＰＩＤ制御表の他にジョブ内の仮想プロセスＩＤを一意に管理する仮想ＰＩＤ制御表を設けて実プロセスＩＤと仮想プロセスＩＤとの対応づけを行い、ジョブ毎に任意の一意の仮想プロセスＩＤの割り当てを実現し、凍結したジョブを解凍したときにプロセスＩＤの予約なしにプロセスＩＤの衝突を無くして即時にジョブ内のプロセス間でデータのやりとりを行う処理の再開を可能にすることを目的としている。
【００１０】
【課題を解決するための手段】
図１を参照して課題を解決するための手段を説明する。
図１において、プロセッサＰＥ１、ＰＥ２は、複数のプロセッサであって、プロセスを生成してジョブを実行するためのものであり、ここでは、実ＰＩＤ制御表３、およびジョブ実行手段７などから構成されるものである。
【００１１】
実ＰＩＤ制御表３は、プロセスに一意に割り当てた実プロセスＩＤを登録して管理するものである。
ジョブ実行手段７は、複数プロセッサ上で任意個のプロセスによってジョブを実行するものであって、図示のように、仮想ＰＩＤ制御表４、仮想ＰＩＤ対応表５、および複数のプロセスから構成されるものである。
【００１２】
仮想ＰＩＤ制御表４は、ジョブ内のプロセスに一意に割り当てた仮想プロセスＩＤに対応づけて実プロセスＩＤを登録して管理するものである。
仮想ＰＩＤ対応表５は、仮想プロセスＩＤがいずれのプロセッサにあるかを登録したものである。
【００１３】
次に、動作を説明する。
ジョブ毎に仮想ＰＩＤ制御表４を設けてジョブを実行する複数のプロセスにそれぞれ割り当てた一意の仮想プロセスＩＤを当該仮想ＰＩＤ制御表４に登録すると共に実ＰＩＤ制御表３の空の実ＰＩＤを割り当てて対応づけて登録し、ジョブ内では各プロセスが仮想プロセスＩＤを用いて相互に通信し、処理を実行するようにしている。
【００１４】
この際、各プロセッサ内に仮想プロセスＩＤがいずれのプロセッサに存在するかを登録する仮想ＰＩＤ対応表５を設け、ジョブ内の仮想プロセスＩＤがいずれのプロセッサに存在するかを判別してそのプロセッサにデータを送信してジョブ内の各プロセスが相互にデータの送受信を行い、処理を実行するようにしている。
【００１５】
また、ジョブの凍結指示に対応して、指示されたジョブの仮想ＰＩＤ制御表４とジョブ内のプロセス、あるいは更に仮想ＰＩＤ対応表５を退避して保存するようにしている。
【００１６】
また、ジョブの解凍指示に対応して、保存しておいたジョブの仮想ＰＩＤ制御表４とジョブ内のプロセス、あるいは更に仮想ＰＩＤ対応表５を復元した後、仮想ＰＩＤ制御表４中に登録されている仮想プロセスＩＤに対して実ＰＩＤ制御表３の空の実プロセスＩＤを割り当てて登録した後、ジョブ内の各プロセスが処理を再開するようにしている。
【００１７】
従って、一意な実プロセスＩＤを管理する実ＰＩＤ制御表３の他にジョブ内の仮想プロセスＩＤを一意に管理する仮想ＰＩＤ制御表４を設けて実プロセスＩＤと仮想プロセスＩＤとの対応づけを行うことにより、ジョブ毎に任意の一意の仮想プロセスＩＤの割り当てを実現し、凍結したジョブを解凍したときにプロセスＩＤの予約なしにプロセスＩＤの衝突を無くして即時にジョブ内のプロセス間でデータのやりとりを行う処理を再開することが可能となる。
【００１８】
【発明の実施の形態】
次に、図１から図５を用いて本発明の実施の形態および動作を順次詳細に説明する。ここで、記録媒体から読み出したプログラムあるいは外部記憶装置であるハードディスク装置などから読み出したプログラム、またはセンタの外部記憶装置から読み出して回線を介して転送を受けたプログラムを主記憶にローディングして起動し、以下に説明する各種処理を行うようにしている。
【００１９】
図１は、本発明の１実施例構成図を示す。
図１において、ＰＥ１、ＰＥ２は、複数のプロセッサのうちの２つを表したものであって、図示のように、オペレーティングシステム２およびユーザプログラム６の部分から構成されるものである。
【００２０】
オペレーティングシステム（ＯＳ）２は、全体を統括制御するものであって、ここでは、図示のように、実プロセスＩＤ（実ＰＩＤ）および仮想プロセスＩＤ（仮想ＰＩＤ）を割り当ておよび管理するための実ＰＩＤ制御表３およびジョブ実行手段７を構成するうちの仮想ＰＩＤ制御表４、仮想ＰＩＤ対応表５からなるものである。
【００２１】
実ＰＩＤ制御表３は、ユーザプログラム６の部分に創成したプロセスに一意に割り当て実プロセスＩＤ（実ＰＩＤ）を登録して管理するものである。
仮想ＰＩＤ制御表４は、ジョブ内でユーザプログラム６の部分に創成したプロセスに一意に割り当て仮想プロセスＩＤ（仮想ＰＩＤ）を登録して管理するものである。
【００２２】
仮想ＰＩＤ対応表５は、仮想プロセスＩＤの所定範囲がいずれのプロセッサ（ＰＥ）にあるかを登録したものである（図５参照）。
プロセスは、ユーザプログラム６の部分に創成して各種処理を実行するものであって、相互にデータを通信などするために一意のプロセスＩＤ（実ＰＩＤあるいは仮想ＰＩＤ）を割り当てたものである。
【００２３】
次に、図２のフローチャートに示す順序に従い、図１の構成のもとでプロセスＩＤ（実ＰＩＤおよび仮想ＰＩＤ）を割り当てるときの手順を詳細に説明する。
図２は、本発明の動作説明フローチャートを示す。ここで、ＰＥ１、ＰＥ２は、図１のプロセッサであるＰＥ１、ＰＥ２である。
【００２４】
図２において、Ｓ１、Ｓ２は、ＰＥ１、ＰＥ２がＯＳのＩＰＬを行う。ここでは、ＯＳのＩＰＬの過程でＰＥ１、ＰＥ２は、プロセスの実プロセスＩＤを一意に割り当てて登録して管理するための実ＰＩＤ制御表＃４、＃５の作成を行う。
【００２５】
Ｓ３は、ＰＥ１に並列ジョブ＃１０が投入される。この延長で、ＰＥ１、ＰＥ２を使用する並列ジョブ＃１０が実行されることとなる。
Ｓ４、Ｓ５は、Ｓ３で並列ジョブ＃１０が投入されると、ジョブ毎の仮想ＰＩＤ制御表＃６、＃７の作成を行う。これにより、ジョブ毎に仮想プロセスＩＤと実プロセスＩＤの対応関係を登録して管理する仮想ＰＩＤ制御表＃６、＃７の作成が行われたこととなる。
【００２６】
Ｓ６、Ｓ７は、マスタのプロセッサＰＥ１が仮想ＰＩＤ対応表＃８を作成して各ＰＥ、ここではＰＥ２への配布を行い当該ＰＥ２で仮想ＰＩＤ対応表＃９を作成する。この仮想ＰＩＤ対応表＃８、＃９により、各ＰＥにおいて仮想プロセスＩＤとＰＥとの対応関係を認識し、仮想プロセスＩＤをもとにいずれのＰＥにデータを送信すればよいかを判別することが可能となる。ここでは、仮想ＰＩＤ対応表＃８、＃９には
仮想プロセスＩＤ      ＰＥ
００１〜１００        ＰＥ１
１０１〜２００        ＰＥ２
と登録されているので、仮想プロセスＩＤが００１〜１００まではＰＥ１に存在し、１０１〜２００まではＰＥ２に存在することが判明する
Ｓ８は、ＰＥ１で親プロセス＃２を生成する。そして、親プロセス＃２は、Ｓ９で子プロセス＃３をＰＥ２に生成する。
【００２７】
Ｓ１０は、Ｓ８で親プロセスを生成したことに対応して、ＰＥ１では、実ＰＩＤ制御表＃４の空の実プロセスＩＤとして「１９９７」を割り当てて登録する。
Ｓ１１は、Ｓ１０と同様に、Ｓ９で子プロセスを生成したことに対応して、ＰＥ２では、実ＰＩＤ制御表＃５の空の実プロセスＩＤとして「２０３８」を割り当てて登録する。
【００２８】
Ｓ１２は、空き仮想プロセスＩＤ（３）の割り当てを行うと共に、実プロセスＩＤ（１９９７）と仮想プロセスＩＤ（３）を対応づけて仮想ＰＩＤ制御表＃６への登録を行う。これにより、仮想ＰＩＤ制御表＃６には、実プロセスＩＤ（３）と仮想プロセスＩＤ（１９９７）との対応関係が登録されたこととなる。
【００２９】
Ｓ１３は、Ｓ１２と同様に、仮想プロセスＩＤ（１０１）の割り当てを行うと共に、実プロセスＩＤ（２０３８）と仮想プロセスＩＤ（１０１）を対応づけて仮想ＰＩＤ制御表＃７への登録を行う。これにより、仮想ＰＩＤ制御表＃７には、実プロセスＩＤ（２０３８）と仮想プロセスＩＤ（１０１）との対応関係が登録されたこととなる。
【００３０】
以上の手順によって、実プロセスＩＤと仮想プロセスＩＤを制御するための内部データ構造が構築されたこととなる。そして、ユーザプログラムへは、Ｓ１２、Ｓ１３で割り当てられた仮想プロセスＩＤが通知され、ユーザプログラムは自分、あるいは親プロセス＃２、子プロセス＃３のプロセスＩＤを認識する。ここでは、親プロセス＃２は「３」（実際は実プロセスＩＤ、１９９７）、子プロセス＃３は「１０１」（実際は実プロセスＩＤ、２０３８）と認識する。
【００３１】
次に、図３のフローチャートに示す順序に従い、図１の構成のもとで、図２の手順によって実プロセスＩＤと仮想プロセスＩＤを制御するための内部データ構造が構築された状態で、ジョブを実行するときの動作を詳細に説明する。
【００３２】
図３は、本発明の動作説明フローチャートを示す。ここで、ＰＥ１、ＰＥ２は、図１のプロセッサであるＰＥ１、ＰＥ２である。
図３において、Ｓ２１は、プロセス＃２（親プロセス）からＰＩＤ＝１０１へデータを送る。
【００３３】
Ｓ２２は、ＰＥ１のオペレーティングシステム２が仮想ＰＩＤ対応表＃８をみて通信先ＰＥを決定する。ここで、ＰＩＤ＝１０１は、ＰＥ２と決定する。
Ｓ２３は、Ｓ２２でＰＥ２と決定されたので、ＰＥ２へ並列ジョブ＃１０のＰＩＤ＝１０１のプロセスへデータを送る。これは、Ｓ２２で通信先ＰＥがＰＥ２と決定されたので、ＰＥ１と同一ジョブ＃１０の配下の仮想プロセスＩＤ（１０１）のプロセスに対して、データを送信する。
【００３４】
Ｓ２４は、Ｓ２３で送信されたデータを受信したＰＥ２のオペレーティングシステム２が、並列ジョブ＃１０の仮想ＰＩＤ制御表＃３を見てプロセス＃３へデータを渡す。そして、ジョブを実行する。
【００３５】
以上によって、図１のＰＥ１の並列ジョブ＃１０内のプロセス＃２からＰＩＤ＝１０１へデータ送信したことに対応して、仮想ＰＩＤ対応表＃８を参照してＰＥ２にデータが渡され、ＰＥ２内で更に仮想ＰＩＤ制御表＃７を参照して並列ジョブ＃１１内のプロセス＃３にデータが渡されたこととなる。これらにより、仮想ＰＩＤ対応表を参照して該当するＰＥにデータを送信し、次に当該ＰＥ内で仮想ＰＩＤ制御表を参照して該当するプロセスにデータを渡し、ジョブ内で異なるＰＥ内のプロセスにデータを送信できたこととなる。
【００３６】
次に、図４のフローチャートに示す順序に従い、図１の構成のもとで、ジョブの凍結および解凍について詳細に説明する。
図４は、本発明の動作説明フローチャートを示す。
【００３７】
図４において、Ｓ３１は、ジョブ凍結指示を受信する。これは、ＯＳがシステム管理者あるいはユーザからジョブ凍結指示を受信する。そして、ジョブ実行中の各ＰＥにジョブ凍結指示を通知する。
【００３８】
Ｓ３２は、ＰＥ２がＳ３１で通知したジョブ凍結指示を受信する。
Ｓ３３、Ｓ３４は、各ＰＥ内で並列ジョブ＃１０の仮想ＰＩＤ対応表＃８、＃９、仮想ＰＩＤ制御表＃６、＃７とプロセス＃２、＃３をそれぞれファイルに退避して保存する。
【００３９】
Ｓ３５は、ジョブ凍結完了する。
以上によって、ジョブ凍結指示を受信したときに、凍結指示を受けたジョブを実行している各ＰＥは、当該ジョブの仮想ＰＩＤ対応表、仮想ＰＩＤ制御表、およびプロセスをそれぞれファイルに退避して保存する。
【００４０】
Ｓ４０は、ジョブ解凍を開始する。
Ｓ４１は、ジョブ解凍指示を受信する。これは、ＯＳがシステム管理者あるいはユーザからジョブ解凍指示を受信する。そして、ジョブを割り付ける各ＰＥにジョブ解凍指示を通知する。
【００４１】
Ｓ４２は、ＰＥ２がＳ４１で通知したジョブ解凍指示を受信する。
Ｓ４３、Ｓ４４は、各ＰＥ内で並列ジョブ＃１０の仮想ＰＩＤ対応表＃８、＃９、仮想ＰＩＤ制御表＃６、＃７の復元を行う。そして、更にプロセス＃２、＃３の情報も合わせてＰＥ１、ＰＥ２に復元する。
【００４２】
Ｓ４５、Ｓ４６は、実ＰＩＤ制御表＃４、＃５の空プロセスＩＤの再割り当てと仮想ＰＩＤ制御表＃６、＃７への登録を行う。これにより、実ＰＩＤ制御表＃４、＃５の空の実プロセスＩＤを割り当てて、仮想ＰＩＤ制御表＃６、＃７に実プロセスＩＤと仮想プロセスＩＤとの対応づけが登録され、実プロセスＩＤと仮想プロセスＩＤとの対応関係が決定されたこととなる。
【００４３】
Ｓ４７、Ｓ４８は、プロセス＃２、＃３の復元を行い、ジョブの実行を再開する。
以上のように、仮想ＰＩＤ対応表、仮想ＰＩＤ制御表、プロセスの情報を復元した後、実ＰＩＤ制御表から空の実プロセスＩＤを割り当ててこの実プロセスＩＤを仮想ＰＩＤ制御表に登録して仮想プロセスＩＤとの対応関係を決定した後、プロセスを復元してジョブの実行を再開することが可能となる。このように、実プロセスＩＤの割り当てとして、実ＰＩＤ制御表を参照して空の実プロセスＩＤを仮想プロセスＩＤに対応づけて仮想ＰＩＤ制御表に登録しているため、確実に仮想プロセスＩＤに実プロセスＩＤを割り当ることができ、従来の他のプロセスが凍結時と同一の実プロセスＩＤを使用してそれの終了を待つまで待機するという事態の発生を無くし、迅速に実プロセスＩＤを仮想プロセスＩＤに割り当ててジョブの実行を再開することが可能となった。
【００４４】
図５は、本発明の仮想ＰＩＤ対応表例を示す。この仮想ＰＩＤ対応表５は、仮想プロセスＩＤの範囲に対応づけてプロセッサＩＤを登録したものである。ここでは、仮想プロセスＩＤの範囲が００１〜１００の場合に、プロセッサＰＥ１と登録し、仮想プロセスＩＤが００１〜１００のプロセスは、プロセッサＰＥ１上で動作するものである旨が判明する。従って、仮想プロセスＩＤが００１〜１００の範囲内の仮想プロセスＩＤへのデータ送信依頼の場合には、データをＰＥ１に送信すればよい。そして、ＰＥ１は、受信したデータについて、仮想ＰＩＤ制御表４を参照して該当する仮想プロセスＩＤのプロセスに渡す。
【００４５】
【発明の効果】
以上説明したように、本発明によれば、一意な実プロセスＩＤを管理する実ＰＩＤ制御表３の他にジョブ内の仮想プロセスＩＤを一意に管理する仮想ＰＩＤ制御表４を設けて実プロセスＩＤと仮想プロセスＩＤとの対応づけを行う構成を採用しているため、ジョブ毎に任意の一意の仮想プロセスＩＤの割り当てを実現し、凍結したジョブを解凍したときに従来のプロセスＩＤの予約なしにプロセスＩＤの衝突を無くして即時にジョブ内のプロセス間でデータのやりとりを行う処理を再開することができる。また、ユーザプログラムの構成（プロセスの構成）を意識することなく、解凍時にプロセスＩＤの再割り当てを行うときに自動的にプロセスＩＤの衝突を回避してジョブの再開を確実かつ迅速に行い、処理の続行することが可能となる。
【図面の簡単な説明】
【図１】本発明の１実施例構成図である。
【図２】本発明の動作説明フローチャート（プロセスＩＤの割り当て）である。
【図３】本発明の動作説明フローチャート（仮想プロセスＩＤを使用したデータ送受信）である。
【図４】本発明の動作説明フローチャート（ジョブ凍結、ジョブ解凍時のプロセスＩＤの割り当て）である。
【図５】本発明の仮想ＰＩＤ対応表例である。
【符号の説明】
２：オペレーティングシステム（ＯＳ）
３：実ＰＩＤ制御表
４：仮想ＰＩＤ制御表
５：仮想ＰＩＤ対応表
６：ユーザプログラム
７：ジョブ実行手段
ＰＥ、ＰＥ１、ＰＥ２：プロセッサ
【図１】
0003884762.tif 000002
【図２】
0003884762.tif 000003
【図３】
0003884762.tif 000004
【図４】
0003884762.tif 000005
【図５】
0003884762.tif 000006