(57)【要約】【課題】計算機システムのジョブの課金処理に関し、複数のプロセスグループから構成されるジョブの課金方法を提供する。【解決手段】計算機システムでの複数のプロセスグループから構成されるユーザジョブの課金情報取得のため、ＯＳがユーザジョブの最初のプロセスにシステム内で一意のＩＤを割り当て、プロセス生成中にそのＩＤを継承させてＯＳが実行されたジョブのプロセスを認識できるようにし、ジョブ内の各プロセスが終了する度にＯＳ内のジョブ課金情報格納領域に格納集計し、ジョブ内の全てのプロセスが終了した時点でジョブ管理ソフトウェアへの通知と課金ファイルへの書き込みを行う。【選択図】  図３
2005031870.tif 000002
【特許請求の範囲】
【請求項１】
バッチジョブの計算機システム資源使用に対する課金方法において、
ユーザからの指示に基づいてジョブ管理ソフトウェアからバッチジョブとしてプログラムを呼び出して実行した時に、オペレーティングシステムがバッチジョブの最初のプロセスに対してシステム内でユニークなＩＤを設定し、プロセス生成によって前記ＩＤを継承させ、
ジョブ内でプロセスグループを複数生成した場合に、ジョブ内の全てのプロセスを一つの単位としてオペレーティングシステムが実行し、
プロセスが終了する度にオペレーティングシステムのメモリ上で課金情報を集計し、
ジョブ内の最後のプロセスが終了した時点で集計した課金情報をジョブ管理ソフトウェアに渡すことを特徴とするジョブ課金方法。
【請求項２】
バッチジョブの計算機システム資源使用に対する課金方法を実行するためのプログラムを格納した、計算機で読み取り可能な記憶媒体であって、前記方法は、
ユーザからの指示に基づいてジョブ管理ソフトウェアからバッチジョブとしてプログラムを呼び出して実行した時に、オペレーティングシステムがバッチジョブの最初のプロセスに対してシステム内でユニークなＩＤを設定し、プロセス生成によって前記ＩＤを継承させ、
ジョブ内でプロセスグループを複数生成した場合に、ジョブ内の全てのプロセスを一つの単位としてオペレーティングシステムが実行し、
プロセスが終了する度にオペレーティングシステムのメモリ上で課金情報を集計し、
ジョブ内の最後のプロセスが終了した時点で集計した課金情報をジョブ管理ソフトウェアに渡すことを特徴とする記憶媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、計算機におけるジョブ課金機能に関し、ジョブ管理ソフトウェアがユーザジョブのプロセス課金情報を取得・集計する際に、プロセスがどのジョブに属しているかといった情報を意識することなくオペレーティングシステムから取得できる技術に関する。
【０００２】
【従来の技術】
従来の計算機システムでは、プロセス単位でのプロセス課金データを採取し、各プロセスが終了するごとにオペレーティングシステムがシステム全体の課金ファイルに書き込んでいた。ジョブ課金においては、ユーザがバッチジョブを実行する際、通常、ジョブ管理ソフトウェアからジョブを起動しジョブが終了した時点で、オペレーティングシステムによって出力されたプロセス課金情報を元に、実行したジョブのプロセスかどうかをジョブ管理ソフトウェアが判別し、集計していく（例えば、特許文献１参照）。
【０００３】
また、初期の計算機システムではジョブという概念がなかったため、ジョブの課金をプロセスグループの課金と結び付け、プロセスグループとしての課金をジョブ課金として出力し、ジョブ内で新たにプロセスグループを生成するシステムコールを発行してもプロセスグループを生成させないようにしてジョブとしての課金の整合性を保証するシステムも存在する。
【０００４】
【特許文献１】
特開平５−２３３４８６号公報
【０００５】
【発明が解決しようとする課題】
従来のプロセス単位でのプロセス課金情報では課金の情報の単位としては小さく、またデータ量はプロセス単位となっているため膨大になっていた。また、バッチジョブという単位で課金しようとした場合、ジョブをプロセスグループとして扱い、オペレーティングシステムが出力したプロセス毎の課金情報を元にジョブ管理ソフトウェアがプロセスグループＩＤをキーにしてジョブとしての課金情報を集計する。しかし、ジョブ内でプロセスグループを生成する処理を行っていた場合は、ジョブ起動時のプロセスグループだけではなく、新たに生成されたプロセスグループのＩＤもジョブ管理ソフトウェアが認識していなければならず、ジョブとしての正確な課金ができない。回避策としてジョブ内からプロセスグループを生成しないようにする方法が用いられるが、ジョブの実行が制限される。
【０００６】
本発明の目的は、ジョブ内でプロセスグループを複数生成した場合においても一つのジョブとしてオペレーティングシステムが認識できるようにし、ジョブ内からのプロセスグループ生成の保証とジョブとしての正確な課金を保証する。また、課金ファイルに出力される課金情報のデータ量を抑え、ジョブ課金情報取得の容易性を向上させる。
【０００７】
【課題を解決するための手段】
上記目的を達成するために、本発明では、バッチジョブのシステム資源使用に対する課金方法において、ユーザからの指示に基づいてジョブ管理ソフトウェアからバッチジョブとしてプログラムを呼び出して実行した時に、オペレーティングシステムがバッチジョブの最初のプロセスに対してシステム内でユニークなＩＤを設定し、プロセス生成によって前記ＩＤを継承させ、ジョブ内でプロセスグループを複数生成した場合に、ジョブ内の全てのプロセスを一つの単位としてオペレーティングシステムが実行し、プロセスが終了する度にオペレーティングシステムのメモリ空間に課金情報を集計し、ジョブ内の最後のプロセスが終了した時点で集計した課金情報をジョブ管理ソフトウェアに渡す。
【０００８】
【発明の実施の形態】
以下、本発明の一実施形態について図面により説明する。
【０００９】
図１は、本発明の一実施例のシステム構成図である。
【００１０】
オペレーティングシステム（ＯＳ）１は、ユーザのジョブ２を管理している。ジョブ２はプロセスグループ３ａ、３ｂから構成されており、プロセスグループ３ａはプロセス４ａ、プロセス４ｂから構成されている。プロセスグループ３ｂは一つのプロセス４ｃから構成されており、これらのプロセスはオペレーティングシステムの中で一つのジョブ２として処理され、プロセス終了時にジョブ課金情報格納領域５に個々のプロセスの課金情報が集計格納される。
【００１１】
集計された課金情報は外部記憶装置６の課金ファイル７に書き込まれる。また、ジョブ管理ソフトウェア８にも課金情報が通知される。
【００１２】
図２は、ジョブ起動時にオペレーティングシステム１のジョブ課金情報格納領域５に生成されるジョブエントリテーブル２００と、プロセスグループ生成時に同じくジョブ課金情報格納領域５に生成されるプロセスグループエントリテーブル２０４の例を示したものである。
【００１３】
ジョブエントリテーブル２００は、オペレーティングシステム内でジョブを識別するためのジョブＩＤ２０１、ジョブ内に存在するプロセスグループの情報を格納するテーブル２０４のアドレス２０２、及びジョブとしての課金情報を格納するためのフィールド２０３からなる。
【００１４】
プロセスグループエントリテーブル２０４は、ジョブ内に存在するプロセスグループを示したテーブルであり、ジョブ内でプロセスグループが生成されるとジョブエントリテーブル２００のフィールド２０２にリンクされるテーブルである。プロセスグループエントリテーブル２０４にはＮＥＸＴエントリアドレス２０５、プロセスグループＩＤ２０６、ステータス２０７、プロセスグループの課金情報２０８があり、ＮＥＸＴエントリアドレス２０５には複数プロセスグループが生成されている場合には次のプロセスグループエントリテ―ブルのアドレスを指しており、ステータス２０７はプロセスグループ内の全プロセスが終了しているか又は動作中であるかの情報が格納される。課金情報２０８にはプロセスグループ内のプロセスが終了する毎にプロセス課金情報が加算・格納される。
【００１５】
図３は、ユーザがバッチジョブを投入し、ジョブ内で複数プロセスグループが生成された時に、ジョブとしての課金情報をジョブ管理ソフトウェア８に通知する動作を示したものである。
【００１６】
ユーザがジョブ管理ソフトウェア８にジョブを投入すると、ジョブ管理ソフトウェア８はジョブ起動用のプロセス４ａを生成する。プロセス４ａではシステム内で一意なＩＤをプロセス４ａに設定するシステムコールを発行する。この時、システムコール処理３００では一意なＩＤを生成しプロセス４ａに設定した後、ジョブ課金情報格納領域５にジョブエントリテーブル２００を生成する。プロセス４ａはその後プロセスグループ３ａを生成するシステムコールを発行し、プロセスグループエントリテーブル２０４ａを生成し、プロセス４ａのジョブＩＤと同じジョブエントリテーブル２００にリンクする。
【００１７】
最後に、プロセス４ａはユーザが投入したジョブのプログラムをローディングし、ジョブが起動される。プロセス４ｂはプロセス４ａの子プロセスであり、同じプロセスグループ３ａに所属している。プロセス４ｂは生成時にジョブＩＤが継承されるため、オペレーティングシステムは同一ジョブとして認識している。
【００１８】
プロセス４ｃはプロセス４ｂから生成されたプロセスであり、プロセス４ｂと同様にジョブＩＤが継承される。プロセス４ｃは新たにプロセスグループを生成するシステムコールを発行すると、プロセスグループ３ａから切り離され、新たに生成されたプロセスグループ３ｂのプロセスとなる。この時、プロセスグループ３ｂが生成されたことを示すプロセスグループエントリテーブル２０４ｂが生成され、プロセス４ｃのジョブＩＤと同じジョブエントリテーブル２００にリンクされる。
【００１９】
プロセス４ｂが終了するとプロセスグループエントリテーブル２０４ａのフィールドである課金情報２０８にプロセス課金情報が格納される。プロセス４ａが終了すると、プロセス４ｂと同じテーブル２０４ａに課金情報を格納する。この時、プロセス４ｂの課金情報が格納されているため加算し格納する。
【００２０】
プロセスグループ３ａの全プロセスの終了により、プロセスグループエントリテーブル２０４ａのステータス２０７に、全プロセスが終了したことを示すフラグを立てる。同様に、プロセスグループ３ｂも消滅すると、テーブル２０４ｂのステータス２０７に終了フラグを立てる。オペレーティングシステムはジョブエントリテーブル２００にリンクされている全てのプロセスグループエントリテーブルのステータス２０７に終了フラグが設定されたことを検知すると、プロセスグループエントリ２０４ａ、２０４ｂの課金情報２０８を集計し、ジョブ管理ソフトウェア８に通知する。
【００２１】
図４は、ジョブ管理ソフトウェア８がジョブを起動する際の前処理に関する動作概要を示すフローチャートである。ジョブ管理ソフトウェア８はジョブを起動するためにプロセスを生成する。
【００２２】
プロセスが行う処理として、まず、システム内で一意なジョブＩＤを自分のプロセスに設定してもらうシステムコールを発行する。この時割り当てられたジョブＩＤに対するジョブエントリテーブル２００をオペレーティングシステム内に生成する（ステップ４００）。次に、プロセスグループを生成するシステムコールを発行（図５）し、自分自身が新たに生成したプロセスグループのリーダとなる。この時生成したプロセスグループに対するプロセスグループエントリ２０４ａを作成してジョブエントリテーブル２００にリンクする（ステップ４０１）。最後に、ユーザプログラムをローディングしてジョブの実行を開始する（ステップ４０２）。
【００２３】
図５はオペレーティングシステム１がプロセスグループを生成する時の動作概要を示すフローチャートである。プロセスグループ生成のシステムコールを発行すると、システムコールを発行したプロセスのＩＤをプロセスグループＩＤとしてプロセスグループを生成する（ステップ５００）。
【００２４】
プロセスグループ発行プロセスのジョブＩＤを調べ（ステップ５０１）、ジョブＩＤを持っていたら同一のジョブＩＤを持ったジョブエントリテーブルがジョブ課金情報格納領域に存在するかどうか調べ（ステップ５０２）、テーブルが存在していればプロセスグループエントリテーブル２０４ｂを作成しプロセスグループＩＤを設定した後、ジョブエントリテーブル２００にリンクする（ステップ５０４）。同一ジョブＩＤのジョブエントリテーブルが存在していなければシステムエラーになる（ステップ５０３）。
【００２５】
図６はジョブ内でのプロセス終了した時の動作を示したフローチャートである。ジョブ内のプロセスが終了すると、終了プロセスのジョブＩＤに一致するジョブエントリテーブルをジョブ課金情報格納領域から検索する（ステップ６００）。同一ジョブＩＤのジョブエントリテーブルがなかった場合はシステムエラー（ステップ６０１）になり、同一のジョブエントリテーブル２００があった時（ステップ６０２）は、生成された子プロセスの属するプロセスグループのＩＤに一致するプロセスグループエントリテーブルを検索する。同一プロセスグループＩＤのプロセスグループエントリテーブルがなかった場合は、システムエラー（ステップ６０３）になり、あった場合（ステップ６０４）はテーブル内の課金情報フィールド２０８にプロセス課金情報をセットする（ステップ６０６）。既に別プロセス終了による課金情報が設定されている場合（ステップ６０４）は終了プロセスの課金情報とすでに設定されている課金情報を加算（ステップ６０５）して課金情報フィールド２０８にセットする。
【００２６】
終了プロセスがプロセスグループ内で最後のプロセスかどうかを判定し（ステップ６０７）、最後のプロセスであった時はプロセスグループエントリテーブルのステータス２０７を全プロセス終了済みにし、プロセスグループエントリテーブルの課金情報をジョブエントリテーブルの課金情報フィールド２０３に加算する（ステップ６０８）。
【００２７】
その後、ジョブエントリテーブルにリンクしている全てのプロセスグループエントリテーブルのステータスをチェックし（ステップ６０９）、全てのテーブルが全プロセス終了済みになっていた場合は各プロセスグループエントリに格納されているプロセスグループ課金情報を集計し、ジョブ管理ソフトウェアにジョブ課金情報として通知する。また、課金ファイルにもジョブ課金情報を書き込む（ステップ６１０）。
【００２８】
以上に述べた本発明のジョブ課金方法を実行するためのプログラムを、計算機で読み取り可能な記憶媒体に格納し、このプログラムをメモリに読み込んで実行することもできる。
【００２９】
【発明の効果】
本発明によれば、ジョブ内で複数のプロセスグループが生成された場合でも正確かつ効率的に課金情報を得られる。
【図面の簡単な説明】
【図１】本発明の一実施例のシステム構成図である。
【図２】ジョブ内でプロセスグループを管理するテーブルである。
【図３】本発明の一実施例の原理図である。
【図４】ジョブ実行前処理フローチャートである。
【図５】プロセスグループ生成処理フローチャートである。
【図６】ジョブ内プロセス終了処理フローチャートである。
【符号の説明】
１：オペレーティングシステム、２：ジョブ、３ａ、３ｂ：プロセスグループ、４ａ、４ｂ、４ｃ：プロセス、５：ジョブ課金情報格納領域、６：外部記憶装置、７：課金ファイル、８：ジョブ管理ソフトウェア、２００：ジョブエントリテーブル、２０１：ジョブＩＤ、２０２：プロセスグループ情報リスト領域アドレス、２０３：ジョブ課金情報、２０４：プロセスグループエントリテーブル、２０５：ＮＥＸＴエントリアドレス、２０６：プロセスグループＩＤ、２０７：ステータス、２０８：プロセスグループ課金情報、３００：システムコール処理部
【図１】
2005031870.tif 000003
【図２】
2005031870.tif 000004
【図３】
2005031870.tif 000005
【図４】
2005031870.tif 000006
【図５】
2005031870.tif 000007
【図６】
2005031870.tif 000008