(57)【特許請求の範囲】
【請求項１】
プロセスが使用する資源を占有して当該プロセスを実行する処理手段と、
複数のプロセス実行時にプロセス同士が使用する資源が競合することによりデッドロックが発生するか否かを監視する監視手段と、を有し、
前記処理手段は、プロセスが取得して占有する資源を識別するための情報と、資源の取得順序を示す資源取得順序と、を示す占有資源情報をプロセスごとに前記監視手段に送信するよう構成され、
前記監視手段は、前記占有資源情報に含まれるプロセスごとの資源取得順序に基づいて、デッドロックを引き起こす可能性のある複数の前記占有資源情報内の資源の組み合わせである、複数のプロセスの資源取得順序における資源取得順序の循環または逆転を検出する検出手段と、前記検出手段が資源取得順序の循環または逆転を検出した際に、前記占有資源情報を蓄積した蓄積情報に基づいて、前記検出手段が資源取得順序の循環または逆転を検出した複数のプロセスにおいて、循環または逆転している資源の組み合わせより前に、同一の資源を占有しているか否か確認することで、資源取得順序の循環または逆転を引き起こす組み合わせによりデッドロックが生じるか否かを検証する検証手段と、を有する
情報処理装置。
【請求項２】
請求項１に記載の情報処理装置であって、
前記検証手段は、前記蓄積情報に基づいて、前記検出手段が資源取得順序の循環または逆転を検出した複数のプロセスにおいて、循環または逆転している資源の組み合わせより前に、同一の資源を占有している場合、デッドロックが生じないと判断する
情報処理装置。
【請求項３】
請求項１または請求項２に記載の情報処理装置であって、
前記検証手段は、排他的に動作するプロセスを示すプロセス排他情報を含むプロセス関係情報を取得し、当該プロセス関係情報に含まれる前記プロセス排他情報に基づいて、前記検出手段が資源取得順序の循環または逆転を検出した複数のプロセスの関係を確認することで、資源取得順序の循環または逆転を引き起こす組み合わせによりデッドロックが生じるか否かを検証する
情報処理装置。
【請求項４】
請求項３に記載の情報処理装置であって、
前記検証手段は、前記プロセス関係情報に含まれる前記プロセス排他情報に基づいて、前記検出手段が資源取得順序の循環または逆転を検出した複数のプロセスが並列に動作しないと判断される場合、資源取得順序の循環または逆転を引き起こす組み合わせによりデッドロックが生じないと判断する
情報処理装置。
【請求項５】
情報処理装置が、
プロセスが使用する資源を占有して当該プロセスを実行し、
プロセスが取得して占有する資源を識別するための情報と、資源の取得順序を示す資源取得順序と、を示す占有資源情報をプロセスごとに送信し、
複数のプロセス実行時に、プロセス同士の使用する資源が競合することによりデッドロックが発生するか否かを監視し、
前記監視は、前記占有資源情報に含まれるプロセスごとの資源取得順序に基づいて、デッドロックを引き起こす可能性のある複数の前記占有資源情報内の資源の組み合わせである、複数のプロセスの資源取得順序における資源取得順序の循環または逆転を検出し、資源取得順序の循環または逆転を検出した際に、前記占有資源情報を蓄積した蓄積情報に基づいて、資源取得順序の循環または逆転を検出した複数のプロセスにおいて、循環または逆転している資源の組み合わせより前に、同一の資源を占有しているか否か確認することで、資源取得順序の循環または逆転を引き起こす組み合わせによりデッドロックが生じるか否かを検証する
情報処理方法。
【請求項６】
情報処理装置に、
プロセスが使用する資源を占有して当該プロセスを実行する処理手段と、
複数のプロセス実行時にプロセス同士が使用する資源が競合することによりデッドロックが発生するか否かを監視する監視手段と、を実現させ、
前記処理手段は、プロセスが取得して占有する資源を識別するための情報と、資源の取得順序を示す資源取得順序と、を示す占有資源情報をプロセスごとに前記監視手段に送信し、
前記監視手段として、前記占有資源情報に含まれるプロセスごとの資源取得順序に基づいて、デッドロックを引き起こす可能性のある複数の前記占有資源情報内の資源の組み合わせである、複数のプロセスの資源取得順序における資源取得順序の循環または逆転を検出する検出手段と、前記検出手段が資源取得順序の循環または逆転を検出した際に、前記占有資源情報を蓄積した蓄積情報に基づいて、前記検出手段が資源取得順序の循環または逆転を検出した複数のプロセスにおいて、循環または逆転している資源の組み合わせより前に、同一の資源を占有しているか否か確認することで、資源取得順序の循環または逆転を引き起こす組み合わせによりデッドロックが生じるか否かを検証する検証手段と、を実現させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法、プログラムに関し、特に、デッドロックの発生を検証する情報処理装置、情報処理方法、プログラムに関する。
【背景技術】
【０００２】
複数のプロセス（プログラムの実行単位）が並列に動作する場合、お互いに相手側が占有している資源の解放を待ってしまうデッドロックという現象が生じることが知られている。
【０００３】
このようなデッドロックに対処するための技術として、例えば、特許文献１がある。特許文献１には、処理スレッドと監視スレッドとを有する計算機システムが記載されている。特許文献１によると、処理スレッドは、排他制御情報を収集・蓄積するとともに、多重排他制御情報を監視スレッドに送信する。また、監視スレッドは、多重排他制御情報を蓄積し、デッドロックを引き起こす組み合わせを検出したとき、組み合わせの多重排他制御情報の復帰場所に排他制御を追加する。
【０００４】
また、同様の技術として、例えば、特許文献２がある。特許文献２には、マルチタスクシステムにおいて、デッドロック発生の可能性を、各タスクの別々に行ったテスト時のアクセス情報の比較により検出することが記載されている。具体的には、特許文献２の場合、共通資源のアクセス履歴から先行リソースＩＤと後続リソースＩＤの組を抽出し、順序が逆転している組をサーチしてデッドロックの可能性があるか否かを判定する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１４−１１９９６４号公報
【特許文献２】特開２００１−２２９０４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１、２に記載されている技術の場合、デッドロックを引き起こす組み合わせを検出してデッドロックの発生の可能性を判定している。しかしながら、局所的にはデッドロック発生の可能性を有していたとしても、所定の条件を満たす場合、大域的にはデッドロックが発生しないことがある。そのため、特許文献１、２に記載されている技術の場合、大域的にはデッドロックが発生しない場合でも、デッドロック発生の可能性がある、と判断してしまうおそれがあった。
【０００７】
このように、局所的にデッドロック発生の要件を満たす場合、大域的にはデッドロックが発生しない場合でも、デッドロック発生の可能性があると判断してしまうおそれがある、という問題が生じていた。
【０００８】
そこで、本発明の目的は、局所的にデッドロック発生の要件を満たす場合、大域的にはデッドロックが発生しない場合でも、デッドロック発生の可能性があると判断してしまうおそれがある、という問題を解決する情報処理装置を提供することにある。
【課題を解決するための手段】
【０００９】
かかる目的を達成するため本発明の一形態である情報処理装置は、
プロセスが使用する資源を占有して当該プロセスを実行する処理手段と、
複数のプロセス実行時に、プロセス同士の使用する資源が競合することによりデッドロックが発生するか否かを監視する監視手段と、を有し、
前記処理手段は、プロセスが占有する資源を示す占有資源情報を前記監視手段に送信するよう構成され、
前記監視手段は、前記占有資源情報に基づいてデッドロックを引き起こす可能性のある複数の前記占有資源情報内の資源の組み合わせを検出する検出手段と、前記検出手段がデッドロックを引き起こす可能性のある資源の組み合わせを検出した際に、当該デッドロックを引き起こす可能性のある資源の組み合わせによりデッドロックが生じるか否かを検証する検証手段と、を有する
という構成を採る。
【００１０】
また、本発明の他の形態である情報処理方法は、
プロセスが使用する資源を占有して当該プロセスを実行し、
プロセスが占有する資源を示す占有資源情報を送信し、
複数のプロセス実行時に、プロセス同士の使用する資源が競合することによりデッドロックが発生するか否かを監視し、
前記監視は、前記占有資源情報に基づいてデッドロックを引き起こす可能性のある複数の前記占有資源情報内の資源の組み合わせを検出し、デッドロックを引き起こす可能性のある資源の組み合わせを検出した際に、当該デッドロックを引き起こす可能性のある資源の組み合わせによりデッドロックが生じるか否かを検証する
という構成を採る。
【００１１】
また、本発明の他の形態であるプログラムは、
情報処理装置に、
プロセスが使用する資源を占有して当該プロセスを実行する処理手段と、
複数のプロセス実行時に、プロセス同士の使用する資源が競合することによりデッドロックが発生するか否かを監視する監視手段と、を実現させ、
前記処理手段は、プロセスが占有する資源を示す占有資源情報を前記監視手段に送信し、
前記監視手段として、前記占有資源情報に基づいてデッドロックを引き起こす可能性のある複数の前記占有資源情報内の資源の組み合わせを検出する検出手段と、前記検出手段がデッドロックを引き起こす可能性のある資源の組み合わせを検出した際に、当該デッドロックを引き起こす可能性のある資源の組み合わせによりデッドロックが生じるか否かを検証する検証手段と、を実現させるためのプログラムである。
【発明の効果】
【００１２】
本発明は、以上のように構成されることにより、局所的にデッドロック発生の要件を満たす場合、大域的にはデッドロックが発生しない場合でも、デッドロック発生の可能性があると判断してしまうおそれがある、という問題を解決する情報処理装置を提供することが可能となる。
【図面の簡単な説明】
【００１３】
【図１】本発明の第１の実施形態に係る情報処理装置の構成の一例を示すブロック図である。
【図２】図１で示す占有情報スタック領域の一例を示す図である。
【図３】図１で示すプロセス情報格納領域の一例を示す図である。
【図４】図１で示すロック情報格納領域の一例を示す図である。
【図５】図４で示す資源情報部の一例を示す図である。
【図６】図４で示す循環情報部の一例を示す図である。
【図７】図４で示すスタック情報蓄積部の一例を示す図である。
【図８】図１で示すロック循環チェック手段が利用する作業用テーブルの一覧の一例を示す図である。
【図９】図８で示す作業用資源登録部の一例を示す図である。
【図１０】図８で示す作業用内側ロックリストと作業用外側ロックリストとの一例を示す図である。
【図１１】図８で示す作業用循環情報登録表の一例を示す図である。
【図１２】図８で示す作業用追加循環リスト登録部と作業用追加循環リストとの一例を示す図である。
【図１３】図８で示す作業用循環チェックリストの一例を示す図である。
【図１４】図１で示すデッドロック検証手段が利用する作業用テーブルの一覧の一例を示す図である。
【図１５】図１４で示す作業用追加スタック対応表の一例を示す図である。
【図１６】図１４で示す作業用占有資源チェックリストの一例を示す図である。
【図１７】図１４で示す作業用プロセス番号チェックリストの一例を示す図である。
【図１８】図１４で示す作業用プロセス排他番号チェックリストの一例を示す図である。
【図１９】図１で示す開始手段の動作の一例を示すフローチャートである。
【図２０】図１で示す占有資源取得手段の動作の一例を示すフローチャートである。
【図２１】図１で示す占有資源解放手段の動作の一例を示すフローチャートである。
【図２２】図１で示すプロセス起動手段の動作の一例を示すフローチャートである。
【図２３】図１で示すプロセス終了待合せ手段の動作の一例を示すフローチャートである。
【図２４】プロセスの動作の一例を示す図である。
【図２５】図２４で示す処理プロセスの動作時のプロセス情報格納領域の遷移の一例を示す図である。
【図２６】図１で示すロック循環チェック手段の動作の一例を示すフローチャートである。
【図２７】図２６で示すステップＳ０５０１の動作の詳細な一例を示すフローチャートである。
【図２８】図２６で示すステップＳ０５０２の動作の詳細な一例を示すフローチャートである。
【図２９】図２６で示すステップＳ０５０２の動作の詳細な一例を示すフローチャートである。
【図３０】図２６で示すステップＳ０５０３の動作の詳細な一例を示すフローチャートである。
【図３１】循環チェックルーチンを行う際の動作の一例を示すフローチャートである。
【図３２】循環チェックルーチンを行う際の動作の一例を示すフローチャートである。
【図３３】循環チェックルーチンを行う際の動作の一例を示すフローチャートである。
【図３４】図１で示すデッドロック検証手段の動作の一例を示すフローチャートである。
【図３５】図３４で示すステップＳ１００１の動作の詳細な一例を示すフローチャートである。
【図３６】図３４で示すステップＳ１００１の動作の詳細な一例を示すフローチャートである。
【図３７】図３４で示すステップＳ１００２の動作の詳細な一例を示すフローチャートである。
【図３８】資源チェックルーチンを行う際の動作の一例を示すフローチャートである。
【図３９】資源チェックルーチンを行う際の動作の一例を示すフローチャートである。
【図４０】図１で示すロック情報登録手段の動作の一例を示すフローチャートである。
【図４１】図１で示すロック情報登録手段の動作の一例を示すフローチャートである。
【図４２】図１で示す占有情報スタック領域に格納される情報の一例を示す図である。
【図４３】図１で示すプロセス情報格納領域に格納される情報の一例を示す図である。
【図４４】図４で示す資源情報部に格納される情報の一例を示す図である。
【図４５】図４で示す循環登録部に格納される情報の一例を示す図である。
【図４６】図４で示すスタック情報蓄積部に格納される情報の一例を示す図である。
【図４７】情報処理装置の動作の一例を説明するための図である。
【図４８】情報処理装置の動作の一例を説明するための図である。
【図４９】情報処理装置の動作の一例を説明するための図である。
【図５０】情報処理装置の動作の一例を説明するための図である。
【図５１】情報処理装置の動作の一例を説明するための図である。
【図５２】情報処理装置の動作の一例を説明するための図である。
【図５３】情報処理装置の動作の一例を説明するための図である。
【図５４】本発明の第２の実施形態における情報処理装置の構成の一例を示す概略ブロック図である。
【発明を実施するための形態】
【００１４】
［第１の実施形態］
本発明の第１の実施形態を図１乃至図５３を参照して説明する。図１は、情報処理装置１の構成の一例を示すブロック図である。図２は、占有情報スタック領域４０の一例を示す図である。図３は、プロセス情報格納領域５０の一例を示す図である。図４は、ロック情報格納領域６０の一例を示す図である。図５は、資源情報部６１の一例を示す図である。図６は、循環情報部６２の一例を示す図である。図７は、スタック情報蓄積部６３の一例を示す図である。図８は、ロック循環チェック手段２２０が利用する作業用テーブルの一覧の一例を示す図である。図９は、作業用資源登録部２２０Ａの一例を示す図である。図１０は、作業用内側ロックリスト２２０Ｂと作業用外側ロックリスト２２０Ｃとの一例を示す図である。図１１は、作業用循環情報登録表２２０Ｄの一例を示す図である。図１２は、作業用追加循環リスト登録部２２０Ｅと作業用追加循環リスト２２０Ｆとの一例を示す図である。図１３は、作業用循環チェックリスト２２０Ｇの一例を示す図である。図１４は、デッドロック検証手段２３０が利用する作業用テーブルの一覧の一例を示す図である。図１５は、作業用追加スタック対応表２３０Ａの一例を示す図である。図１６は、作業用占有資源チェックリスト２３０Ｂの一例を示す図である。図１７は、作業用プロセス番号チェックリスト２３０Ｃの一例を示す図である。図１８は、作業用プロセス排他番号チェックリスト２３０Ｄの一例を示す図である。図１９は、開始手段１１０の動作の一例を示すフローチャートである。図２０は、占有資源取得手段１２０の動作の一例を示すフローチャートである。図２１は、占有資源解放手段１３０の動作の一例を示すフローチャートである。図２２は、プロセス起動手段１４０の動作の一例を示すフローチャートである。図２３は、プロセス終了待合せ手段１５０の動作の一例を示すフローチャートである。図２４は、プロセスの動作の一例を示す図である。図２５は、図２４で示すプロセスの動作時のプロセス情報格納領域５０の遷移の一例を示す図である。図２６は、ロック循環チェック手段２２０の動作の一例を示すフローチャートである。図２７は、図２６で示すステップＳ０５０１の動作の詳細な一例を示すフローチャートである。図２８、図２９は、図２６で示すステップＳ０５０２の動作の詳細な一例を示すフローチャートである。図３０は、図２６で示すステップＳ０５０３の動作の詳細な一例を示すフローチャートである。図３１乃至図３３は、循環チェックルーチンを行う際の動作の一例を示すフローチャートである。図３４は、デッドロック検証手段２３０の動作の一例を示すフローチャートである。図３５、図３６は、図３４で示すステップＳ１００１の動作の詳細な一例を示すフローチャートである。図３７は、図３４で示すステップＳ１００２の動作の詳細な一例を示すフローチャートである。図３８、図３９は、資源チェックルーチンを行う際の動作の一例を示すフローチャートである。図４０、図４１は、ロック情報登録手段２４０の動作の一例を示すフローチャートである。図４２は、占有情報スタック領域４０に格納される情報の一例を示す図である。図４３は、プロセス情報格納領域５０に格納される情報の一例を示す図である。図４４は、図４で示す資源情報部６１に格納される情報の一例を示す図である。図４５は、循環登録部６２に格納される情報の一例を示す図である。図４６は、スタック情報蓄積部６３に格納される情報の一例を示す図である。図４７乃至図５３は、情報処理装置１の動作の一例を説明するための図である。
【００１５】
本発明の第１の実施形態では、デッドロックを引き起こす可能性のある資源の組み合わせをチェックし、当該デッドロックを引き起こす可能性のある資源の組み合わせによりデッドロックが発生するか否かを検証する情報処理装置について説明する。後述するように、情報処理装置は、局所的にロック取得順序が循環（または逆転）するデッドロックを引き起こす可能性のある占有資源３０（資源）の組み合わせを検出すると、スタック情報４４やプロセス情報格納領域５０、ロック情報格納領域６０を参照して大域的にデッドロックが発生するか否かを検証する。
【００１６】
図１を参照すると、本実施形態における情報処理装置１は、処理プロセス１０（処理手段）と、監視プロセス２０（監視手段）と、占有資源３０と、占有情報スタック領域４０と、スタック情報４４（占有資源情報）と、プロセス情報格納領域５０（プロセス関係情報）と、ロック情報格納領域６０（蓄積情報）と、を有している。
【００１７】
情報処理装置１は、図示しない演算装置と記憶装置とを有しており、記憶装置が有するプログラムを演算装置が実行することで、処理プロセス１０や処理プロセス１０が有する各手段、監視プロセス２０や監視プロセス２０が有する各手段を実現する。また、占有資源３０は、ディスクやファイルなどであり、占有資源３０へのアクセスは例えばセマフォで管理されている。また、占有情報スタック領域４０と、スタック情報４４と、プロセス情報格納領域５０と、ロック情報格納領域６０と、は、情報処理装置１が有するメモリなどの記憶装置に格納されている。
【００１８】
占有情報スタック領域４０は、後述する開始手段１１０によりプロセスごとに用意される。図２を参照すると、占有情報スタック領域４０は、ヘッダ情報４１とスタック情報部４２と送信履歴情報部４３とを有している。
【００１９】
ヘッダ情報４１は、履歴情報先頭ポインタと送信フラグから構成されている。履歴情報先頭ポインタには、送信履歴情報部４３の先頭エントリへのポインタが格納されている。送信フラグは、監視プロセス２０へのスタック情報４４の送信要否を表している。後述するように、送信フラグは、プロセスが取得して占有する占有資源の数が２以上である場合に、オンに設定されることになる。
【００２０】
スタック情報部４２は、占有資源確保数とプロセス番号と占有資源種別と占有資源識別子とから構成されている。占有資源確保数は、プロセスが取得して占有する占有資源３０の数を示している。プロセス番号は、プロセスを識別するための番号である。占有資源種別は、占有資源３０の種別を示しており、例えば、占有資源３０がセマフォで管理されるか、装置毎に管理されるかを示している。また、占有資源識別子は、占有資源３０を識別するための情報である。
【００２１】
送信履歴情報部４３には、監視プロセス２０へ送信したスタック情報４４が格納されている。
【００２２】
図４２は、占有情報スタック領域４０に格納される情報の一例を示している。図４２を参照すると、プロセスは３つの占有資源３０を取得して占有しており、プロセスのプロセス番号は２５であることが分かる。また、スタック情報部４２は、エントリ１、エントリ２、エントリ３の順番で占有資源３０を確保したことを示している。つまり、図４２によると、占有資源種別「０２」、占有資源識別子「００２３００５８」の占有資源３０を確保した後、占有資源種別「０１」、占有資源識別子「０ＤＥ００３４８」の占有資源３０を確保していることが分かる。また、占有資源種別「０１」、占有資源識別子「０ＤＥ００３４８」の占有資源３０を確保した後、占有資源種別「０１」、占有資源識別子「０ＤＥ００３５ＺＣ」の占有資源３０を確保していることが分かる。また、図４２の場合、送信フラグがオンに設定されている。また、情報履歴送信部４３は、エントリ１とエントリ２の送信スタック情報を監視プロセス２０へ送信したことを表している。なお、本実施形態においては、送信履歴情報部４３の各エントリをリンクして繋げているが、ハッシュテーブルで管理しても構わない。
【００２３】
図１で示すスタック情報４４は、処理プロセス１０が監視プロセス２０へ送信したスタック情報である。処理プロセス１０が監視プロセス２０へ送信したスタック情報は、監視プロセス２０が受信するまでスタック情報４４でキューイングされる。スタック情報４４の形式は、図２で示すスタック情報部４２の形式と同一である。
【００２４】
プロセス情報格納領域５０は、後述するプロセス起動手段１４０によりプロセスごとに用意される。図３を参照すると、プロセス情報格納領域５０は、終了待合せ情報部５１とプロセス排他情報部５２（プロセス排他情報）とを有している。
【００２５】
終了待合せ情報部５１には、終了を待ち合わせたプロセスのプロセス番号が格納されている。また、プロセス排他情報部５２には、他プロセスと並列に動作しないことを示す番号が格納されている。
【００２６】
図４３は、プロセス情報格納領域５０に格納される情報の一例を示している。例えば、図４３のうちのプロセス情報格納領域５０−１は、プロセス番号２５に用意されるプロセス情報格納領域の一例であり、プロセス情報格納領域５０−２は、プロセス番号２６に用意されるプロセス情報格納領域の一例である。図４３を参照すると、プロセス情報格納領域５０−１のプロセス排他情報部５２−１とプロセス情報格納領域５０−２のプロセス排他情報部５２−２とには同一の排他番号「１０２６１５１１３１０３０」が格納されている。このことから、プロセス番号２５のプロセスとプロセス番号２６のプロセスとが並列に動作しないことが分かる。
【００２７】
図４を参照すると、ロック情報格納領域６０は、資源情報部６１と循環情報部６２とスタック情報蓄積部６３とを有している。
【００２８】
資源情報部６１は、資源登録部６１Ａと内側ロックリスト部６１Ｂと外側ロックリスト部６１Ｃと循環情報対応表６１Ｄとから構成されている。
【００２９】
図５を参照すると、資源登録部６１Ａは、ヘッダに登録資源数が格納されている。また、資源登録部６１Ａの各エントリには、占有資源種別と占有資源識別子と内側出現カウンタと内側ロック数と内側ロックリストポインタと外側ロック数と外側ロックリストポインタが格納されている。資源登録部６１Ａにおいては、占有資源３０ごとにエントリが用意される。エントリのキーは、占有資源種別と占有資源識別子の組合せである。
【００３０】
内側出現カウンタ（回数情報）は、当該エントリの占有資源３０が、スタック情報４４の最終エントリの資源であった回数が格納される。つまり、内側出現カウンタは、プロセスが占有資源３０を占有してから解放するまでの間で最後に占有した占有資源３０の占有回数を示している。
【００３１】
エントリに対応する占有資源３０を取得した状態でさらに取得される他の資源を示す占有資源種別と占有資源識別子が、内側ロックリスト部６１Ｂに格納される。内側ロック数には、当該エントリに対応する占有資源３０を取得した状態でさらに取得される他の占有資源３０の数が格納される。また、内側ロックリストポインタには、内側ロックリスト部６１Ｂの対応する内側ロックリストへのアドレスが格納される。
【００３２】
また、エントリに対応する占有資源３０の取得前に既に取得していた他の資源を示す占有資源種別と占有資源識別子が、外側ロックリスト部６１Ｃに格納される。外側ロック数には、当該エントリに対応する占有資源３０の取得前に既に取得していた他の占有資源３０の数が格納される。また、外側ロックリストポインタには、外側ロックリスト部６１Ｃの対応する外側ロックリストへのアドレスが格納される。
【００３３】
内側ロックリスト部６１Ｂには、占有資源種別と占有資源識別子と循環フラグと循環情報対応表ポインタが格納される。循環フラグは、内側ロックリストが対応する占有資源３０の取得順序が循環（または逆転）しているか否かを表している。また、占有資源３０の取得順序が循環（逆転）している場合、循環情報部６２へのリンクが循環情報対応表６１Ｄに格納され、内側ロックリスト部６１Ｂの循環情報対応表ポインタに、対応する循環情報対応表６１Ｄへのアドレスが格納される。
【００３４】
外側ロックリスト部６１Ｃには、占有資源種別と占有資源識別子と循環フラグと循環情報対応表ポインタが格納される。循環フラグは、外側ロックリストが対応する占有資源３０の取得順序が循環（または逆転）しているか否かを表している。また、占有資源３０の取得順序が循環（逆転）している場合、循環情報部６２へのリンクが循環情報対応表６１Ｄに格納され、外側ロックリスト部６１Ｃの循環情報対応表ポインタに、対応する循環情報対応表６１Ｄへのアドレスが格納される。
【００３５】
循環情報対応表６１Ｄは、循環（逆転）している資源の取得順序ごとに用意される。循環情報対応表６１Ｄには、循環情報部６２へのリンク情報が格納されている。例えば、循環情報対応表６１Ｄは、パターン数とパターン番号とエントリ番号とを有している。循環情報対応表６１Ｄが有するパターン番号は、後述する循環登録部６２Ａのパターンに対応した値を示している。また、循環情報対応表６１Ｄが有するエントリ番号は、後述する循環リスト６２Ｂのエントリに対応した値を示している。
【００３６】
図４４は、資源情報部６１に格納される情報の一例を示している。図４４では、資源登録部６１Ａのエントリ２とエントリ３に対応する内側ロックリストと外側ロックリストの両方に、お互いの占有資源種別と占有資源識別子とが格納されている。このような状況は、例えば、資源登録部６１Ａのエントリ２とエントリ３の取得順序が逆転している場合に生じることになる。
【００３７】
なお、内側ロックリスト部６１Ｂのうちの内側ロックリスト２のエントリ１は、占有資源識別子「０ＤＥ００３４８」の後に占有資源識別子「０ＤＥ００Ａ１４」を取得したことを示している。また、外側ロックリスト部６１Ｃのうちの外側ロックリスト３のエントリ２は、占有資源識別子「０ＤＥ００Ａ１４」の取得前に占有資源識別子「０ＤＥ００３４８」を取得していることを示している。このように、内側ロックリスト２のエントリ１と外側ロックリスト３のエントリ２は、同じ取得順序を意味している。そのため、内側ロックリスト２のエントリ１と外側ロックリスト３のエントリ２には、同一の循環情報対応表のアドレスが格納されることになる。同様に、内側ロックリスト３のエントリ１および外側ロックリスト２のエントリ２も、同一の循環情報対応表のアドレスが格納される。なお、本実施形態においては、資源登録部６１Ａなどのエントリの順番は、スタック情報４４（占有資源種別と占有資源識別子）を受信した順番で決まることになる。しかしながら、資源登録部６１Ａなどのエントリの順番は、占有資源種別と占有資源識別子のハッシュ値をキーにした順番であっても構わない。
【００３８】
循環情報部６２は、循環登録部６２Ａと循環リスト６２Ｂとスタック対応表６２Ｃとから構成されている。
【００３９】
図６を参照すると、循環登録部６２Ａは、ヘッダに取得順序が循環（または逆転）しているパターン数が格納されている。また、循環登録部６２Ａの各エントリ（パターン）には、循環（または逆転）している占有資源３０の数と、循環リスト６２Ｂへのアドレスである循環リストへのポインタが格納されている。なお、循環情報対応表６１Ｄのパターン番号は、循環登録部６２Ａのパターンに対応した値を示している。
【００４０】
循環リスト６２Ｂには、循環（または逆転）している資源を示す占有資源種別と占有資源識別子と、スタック対応表６２Ｃのアドレスが格納されている。なお、循環情報対応表６１Ｄのエントリ番号は、循環リスト６２Ｂのエントリに対応した値を示している。
【００４１】
スタック対応表６２Ｃは、循環している資源の取得順序毎に用意される。スタック対応表６２Ｃには、スタック情報蓄積部６３へのリンク情報が格納されている。例えば、スタック対応表６２Ｃのスタック対応表は、パターン数とスタック番号とエントリ番号とを有している。スタック対応表が有するスタック番号は、後述するスタック登録部６３Ａのエントリ（スタック）に対応する値（スタック部６３Ｂのスタック情報の番号に対応する値）を示している。また、スタック対応表が有するエントリ番号は、後述するスタック部６３Ｂのうちのスタック番号が示すスタック情報のエントリに対応する値を示している。
【００４２】
図４５は、循環情報部６２に格納される情報の一例を示している。図４５を参照すると、循環リスト６２Ｂの循環リスト１は、エントリ１とエントリ２の占有資源３０取得順序が逆転していることを示している。スタック対応表６２Ｃのスタック対応表１には、エントリ１の占有資源３０（「０ＤＥ００Ａ１４」）を取得したまま、エントリ２の占有資源３０（「０ＤＥ００３４８」）を取得しているスタック情報へのリンクが格納されている。また、スタック対応表２には、エントリ２の占有資源３０を取得したまま、エントリ１の占有資源３０を取得しているスタック情報へのリンクが格納されている。
【００４３】
また、循環リスト６２Ｂの循環リスト２は、エントリ１とエントリ２とエントリ３の占有資源３０取得順序が循環していることを示している。スタック対応表６２Ｃのスタック対応表３は、エントリ１の占有資源３０（「０ＤＤＦ０５１Ｃ」）を取得したまま、エントリ２の占有資源３０（「０ＤＤＦ０５３８」）を取得しているスタック情報へのリンクが格納されている。また、エントリ２の資源を取得したまま、エントリ３の資源を取得しているスタック情報へのリンクが、スタック対応表４に格納され、エントリ３の資源を取得したまま、エントリ１の資源を取得しているスタック情報へのリンクが、スタック対応表５に格納されることになる。なお、循環リスト６２Ｂのうちの、循環リスト２のエントリ１と循環リスト３のエントリ２は、同じ取得順序を表すため、いずれもスタック対応表３のアドレスが格納されている。
【００４４】
スタック情報蓄積部６３は、スタック登録部６３Ａとスタック部６３Ｂ（資源順序情報）とから構成されている。
【００４５】
図７を参照すると、スタック登録部６３Ａは、ヘッダに蓄積しているスタック情報の数が格納されている。また、スタック登録部６３Ａの各エントリ（スタック）には、スタック部６３Ｂのアドレスが格納されている。なお、スタック対応表６２Ｃのスタック番号は、スタック登録部６３Ａのエントリ（スタック）に対応する値を示している。
【００４６】
スタック部６３Ｂには、スタック情報が格納されている。スタック部６３Ｂに格納されるスタック情報の形式は、図２で示すスタック情報部４２の形式と同一である。なお、スタック対応表６２Ｃのエントリ番号は、後述するスタック部６３Ｂのうちのスタック番号が示すスタック情報のエントリに対応する値を示している。
【００４７】
図４６は、スタック情報蓄積部６３に格納される情報の一例を示している。図４６を参照すると、スタック登録部６３Ａには３つのアドレスが格納されており、それぞれのエントリ（スタック）には、対応するエントリへのアドレスが格納されている。
【００４８】
処理プロセス１０は、必要に応じてプロセスが使用する占有資源３０を占有して、当該プロセスを実行する。図１を参照すると、処理プロセス１０は、開始手段１１０と、占有資源取得手段１２０と、占有資源解放手段１３０と、プロセス起動手段１４０と、プロセス終了待合せ手段１５０と、終了手段１６０と、を有している。
【００４９】
開始手段１１０は、自プロセスの占有情報スタック領域４０を確保する。そして、開始手段１０は、自プロセスのプロセス番号を占有情報スタック領域４０のスタック情報部４２にセットする。
【００５０】
占有資源取得手段１２０は、自プロセスからの要求に応じて、必要な占有資源３０を取得する。そして、占有資源取得手段１２０は、取得した占有資源３０を識別するための占有資源種別、占有資源識別子をスタック情報部４２に登録する。また、占有資源取得手段１２０は、プロセスが２個以上の占有資源３０を確保している場合、ヘッダ情報部４１の送信フラグをオンに設定する。
【００５１】
占有資源解放手段１３０は、自プロセスからの要求に応じて、占有資源３０を解放する。そして、占有資源解放手段１３０は、ヘッダ情報部４１の送信フラグがオン、かつ、スタック情報部４２に登録されている情報が送信履歴情報部４３に登録されている情報と一致しない場合に、スタック情報部４２の内容を監視プロセス２０に送信する。また、占有資源解放手段１３０は、送信したスタック情報部４２の内容を送信履歴情報部４３に追加する。そして、占有資源解放手段１３０は、ヘッダ情報部４１の送信フラグをオフにし、スタック情報部４２から解放した占有資源識別子を削除する。一方、ヘッダ情報部４１の送信フラグがオフの場合や、スタック情報部４２に登録されている情報が送信履歴情報部４３に登録されている情報と一致する場合、占有資源解放手段１３０は、スタック情報部４２の送信を行わない。
【００５２】
プロセス起動手段１４０は、自プロセスからの要求に応じて、新たに起動するプロセスのプロセス情報格納領域５０を確保する。次に、プロセス起動手段１４０は、自プロセスの終了待合せ情報部５１を、新たに起動するプロセスの終了待合せ情報部５１にコピーする。また、プロセス起動手段１４０は、必要に応じて、自プロセスの終了待合せ情報部５１に格納されているプロセス、及び、新たに起動するプロセスのプロセス排他情報部５２に、同一の排他番号を登録する。その後、プロセス起動手段１４０は、当該新たに起動するプロセスを起動する。
【００５３】
プロセス終了待合せ手段１５０は、プロセスの終了を待ち合わせる。そして、プロセス終了待合せ手段１５０は、自プロセスの終了待合せ情報部５１に、終了を待ち合わせたプロセスのプロセス番号を登録する。また、プロセス終了待合せ手段１５０は、終了を待ち合わせたプロセスの終了待合せ情報部５１に格納されているプロセス番号のうち、自プロセスの終了待合せ情報部５１に登録されていないプロセス番号が存在する場合、当該プロセス番号を自プロセスの終了待合せ情報部５１に追加する。
【００５４】
終了手段１６０は、プロセスの終了時に、自プロセスの占有情報スタック領域４０を解放する。
【００５５】
監視プロセス２０は、複数のプロセス実行時に、プロセス同士の使用する占有資源３０が競合することによりデッドロックが発生するか否かを監視する。図１を参照すると、監視プロセス２０は、占有情報受信手段２１０と、ロック循環チェック手段２２０（検出手段）と、デッドロック検証手段２３０（検証手段）と、ロック情報登録手段２４０と、を有している。
【００５６】
占有情報受信手段２１０は、占有資源解放手段１３０から送信されたスタック情報４４を受信する。つまり、占有情報受信手段２１０は、スタック情報４４をキューから取り出す。
【００５７】
ロック循環チェック手段２２０は、スタック情報４４（占有資源情報）などに基づいて、デッドロックを引き起こす可能性のある占有資源３０の組み合わせである、占有資源取得順序の循環または逆転を検出する。具体的には、ロック循環チェック手段２２０は、占有情報受信手段２１０が受信したスタック情報４４を参照し、２つの占有資源の取得順序の全組合せを抽出する。そして、ロック循環チェック手段２２０は、ロック情報格納領域６０に格納されている情報に従って、占有資源取得順序が循環または逆転しているか否かをチェックする。また、ロック循環チェック手段２２０は、内側出現カウンタに基づいて設定される内側フラグに基づいて、上記チェックを行う。例えば、ロック循環チェック手段２２０は、内側フラグに基づいて、対象となる資源よりも前に取得している占有資源３０をチェックして取得順序の循環・逆転をチェックするか、対象となる資源よりも後に取得する占有資源３０をチェックして取得順序の循環・逆転をチェックするか、を決定する。そして、ロック循環チェック手段２２０は、占有資源３０の取得順序が循環または逆転していると判断した場合に、デッドロック検証手段２３０を呼び出す。
【００５８】
本実施形態におけるロック循環チェック手段２２０は、占有資源取得順序が循環または逆転しているか否かをチェックする際に、所定の作業用テーブルを用いてチェックを行う。図８を参照すると、ロック循環チェック手段２２０は、作業用テーブルとして、作業用資源登録部２２０Ａと作業用内側ロックリスト２２０Ｂと作業用外側ロックリスト２２０Ｃと作業用循環情報登録表２２０Ｄと作業用追加循環リスト登録部２２０Ｅと作業用追加循環リスト２２０Ｆと作業用循環チェックリスト２２０Ｇとを用いる。
【００５９】
作業用資源登録部２２０Ａ、作業用内側ロックリスト２２０Ｂ、及び、作業用外側ロックリスト２２０Ｃには、占有情報受信手段２１０が受信したスタック情報４４に登録されている資源の更新情報を格納する。
【００６０】
図９を参照すると、作業用資源登録部２２０Ａの形式は、図５で示す資源登録部６１Ａのエントリに、内側更新フラグおよび外側更新フラグを追加した形式である。また、図１０を参照すると、作業用内側ロックリスト２２０Ｂ、及び、作業用外側ロックリスト２２０Ｃの形式は、図５で示す内側ロックリスト部６１Ｂ、及び、外側ロックリスト部６１Ｃの形式と同じ形式である。
【００６１】
占有情報受信手段２１０が受信したスタック情報４４により内側ロック、外側ロック（いずれか一方、又は、両方）の追加が必要な場合、ロック循環チェック手段２２０は、作業用内側ロックリスト２２０Ｂ、作業用外側ロックリスト２２０Ｃに新たな情報を追加することになる。そして、ロック循環チェック手段２２０は、新たに情報を追加した場合、新たに情報を追加したフラグ（内側更新フラグ、外側更新フラグ）をオンに設定する。なお、この場合、作業用資源登録部２２０Ａに含まれる内側ロックリストポインタや外側ロックリストポインタは、作業用内側ロックリスト２２０Ｂや作業用外側ロックリスト２２０Ｃのアドレスに切り替わることになる。
【００６２】
図１１を参照すると、作業用循環情報登録票２２０Ｄは、エントリ数と循環情報対応表ポインタとを有している。エントリ数は、循環情報対応表ポインタの数を示している。また、循環情報対応表ポインタは、対応する循環情報対応表６１Ｄへのアドレスを示している。占有情報受信手段２１０が受信したスタック情報４４の資源取得順序が既に循環（または逆転）していることがわかっている場合（すなわち、循環フラグがオンの場合）に、循環情報対応表ポインタが格納されることになる。
【００６３】
図１２を参照すると、作業用追加循環リスト登録部２２０Ｅ、及び、作業用追加循環リスト２２０Ｆは、受信したスタック情報４４の資源取得順序について、新たに循環（または逆転）を検出した場合の循環情報を示している。作業用追加循環リスト登録部２２０Ｅと作業用追加循環リスト２２０Ｆのテーブルの形式は、図６で示す循環登録部６２Ａと循環リスト６２Ｂの形式と同じである。
【００６４】
作業用循環チェックリスト２２０Ｇは、循環（または逆転）しているかチェックするためのテーブルである。図１３を参照すると、作業用循環チェックリスト２２０Ｇは、内側フラグとエントリ数とを有するヘッダと、占有資源種別と占有資源識別子とスタック対応表ポインタとを有する各エントリと、を有している。
【００６５】
内側フラグは、内側の資源をチェックして占有資源３０の取得順序が循環（または逆転）しているか否かを判断するか、または、外側の資源をチェックして占有資源３０の取得順序が循環（または逆転）しているか否かを判断する際に用いられる。ここで、内側の資源とは、対象となる占有資源３０を取得した状態でさらに取得される他の占有資源３０のことをいう。また、外側の資源とは、対象となる占有資源３０の取得前に既に取得していた他の占有資源３０のことをいう。
【００６６】
内側フラグは、作業用資源登録部２２０Ａの内側出現カウンタ（回数情報）の値に基づいて、オフにするかオンにするかが決定される。内側フラグは、例えば、下記数式の結果が固定値よりも大きい場合にオンにセットされ、下記数式の結果が固定値以下である場合に、オフにセットされる。
［数式］
（作業用資源登録部２２０Ａのｎ番目のエントリの内側出現カウンタ）×１００÷変数ｚ
なお、ｎは、例えば、１以上スタック情報４４の占有資源確保数以下の任意の値である。また、変数ｚは、スタック登録部６３Ａの登録パターン数に１加算した値である。また、上記数式と比較される固定値は、任意の設定値で構わないが、例えば、５０とすることが考えられる（それ以外の値でも構わない）。
【００６７】
なお、作業用資源登録部２２０Ａ、作業用内側ロックリスト２２０Ｂ、作業用外側ロックリスト２２０Ｃ、作業用追加循環リスト登録部２２０Ｅ、作業用追加循環リスト２２０Ｆは、大域的にもデッドロックが発生する場合に、スタック情報４４をロック情報格納領域６０に蓄積・登録しないようにするために用いられる。
【００６８】
デッドロック検証手段２３０は、ロック循環チェック手段２２０から、循環または逆転している旨の情報を受信する。すると、デッドロック検証手段２３０は、スタック情報４４（占有資源情報）やロック情報格納領域６０（蓄積情報）に含まれているスタック情報（資源順序情報）、プロセス排他情報部５２（プロセス排他情報）などを参照し、デッドロックが発生するか否かを検証する。
【００６９】
本実施形態におけるデッドロック検証手段２３０は、デッドロックが発生するか否かを検証する際に、所定の作業用テーブルを用いてチェックを行う。図１４を参照すると、デッドロック検証手段２３０は、作業用テーブルとして、作業用追加スタック対応表２３０Ａと作業用占有資源チェックリスト２３０Ｂと作業用プロセス番号チェックリスト２３０Ｃと作業用プロセス排他番号チェックリスト２３０Ｄとを用いる。
【００７０】
図１５を参照すると、作業用追加スタック対応表２３０Ａには、ロック循環チェック手段２２０で、資源の取得順序に新たな循環（または逆転）を検出した場合に、スタック情報蓄積部６３の該当するスタック情報へのリンクが格納される。作業用追加スタック対応表２３０Ａのテーブルの形式は、図６で示すスタック対応表６２Ｃの形式と同じである。
【００７１】
図１６を参照すると、作業用占有資源チェックリスト２３０Ｂは、ヘッダにエントリ数を有し、各エントリに占有資源種別と占有資源識別子とを有している。また、図１７を参照すると、作業用プロセス番号チェックリスト２３０Ｃは、ヘッダにエントリ数を有し、各エントリにプロセス番号を有している。また、図１８を参照すると、作業用プロセス排他番号チェックリスト２３０Ｄは、ヘッダにエントリ数を有し、各エントリに排他番号を有している。作業用占有資源チェックリスト２３０Ｂ、作業用プロセス番号チェックリスト２３０Ｃ、及び、作業用プロセス排他番号チェックリスト２３０Ｄは、大域的にデッドロックが発生するかをチェックするために、取得順序が循環（または逆転）する前に取得していた占有資源、プロセス番号、及び、排他番号を格納するテーブルである。
【００７２】
デッドロック検証手段２３０は、作業用循環情報登録表２２０Ｄ、作業用追加循環リスト登録部２２０Ｅ、および、作業用追加循環リスト２２０Ｆに格納されている全循環（逆転）パターンについて、循環（逆転）する全てのスタック情報を組み合わせる。そして、デッドロック検証手段２３０は、組み合わせの結果に基づいて、大域的にはデッドロックが発生しないかを検証する。
【００７３】
具体的には、デッドロック検証手段２３０は、例えば、各スタック情報の組み合わせについて、循環（逆転）する前に取得していた占有資源、プロセス番号、排他番号を、それぞれ作業用占有資源チェックリスト２３０Ｂ、作業用プロセス番号チェックリスト２３０Ｃ、および、作業用プロセス排他番号チェックリスト２３０Ｄに格納する。そして、デッドロック検証手段２３０は、循環（逆転）する前に取得していた占有資源、プロセス番号、排他番号に、同一占有資源、同一プロセス番号、同一排他番号が一つでもあれば、大域的にはデッドロックが発生しないと判断する。
【００７４】
なお、本実施形態における動作例では、作業用のチェックリストに全て格納した後で同一資源・同一番号があるかを確認する方法ではなく、作業用のチェックリストに一つ一つ格納していく際に、既に同一資源・同一番号が格納されているかをチェックする。そして、同一資源・同一番号が格納されていれば、当該各スタックの組み合わせではデッドロックは発生しないものと判断する。このような動作例について説明する。しかしながら、デッドロック検証手段２３０は、作業用のチェックリストに全て格納した後で同一資源・同一番号があるかを確認するよう構成しても構わない。
【００７５】
ロック情報登録手段２４０は、占有情報受信手段２１０で受信したスタック情報４４をスタック情報蓄積部６３に蓄積すると共に、資源情報部６１と循環情報部６２を更新する。
【００７６】
以上が、情報処理装置１の構成の一例についての説明である。次に、情報処理装置１の動作の一例について説明する。まずは、図１９を参照して、開始手段１１０の動作の一例について説明する。
【００７７】
図１９を参照すると、開始手段１１０は、処理プロセス１０の開始時、自プロセスの占有情報スタック領域４０を確保する（ステップＳ０００１）。続いて、開始手段１１０は、確保した自プロセスの占有情報スタック領域４０を初期化（０クリア）する（ステップＳ０００２）。その後、開始手段１１０は、スタック情報部４２のプロセス番号格納領域に自プロセス番号をセットする。そして、開始手段１１０は、処理を終了する。
【００７８】
続いて、図２０を参照して、占有資源取得手段１２０の動作の一例について説明する。
【００７９】
図２０を参照すると、占有資源取得手段１２０は、自プロセスからの要求に応じて、要求された占有資源３０を取得する（ステップＳ０１０１）。なお、要求された占有資源を他プロセスが使用中の場合は、解放されるまで待ち合わせることになる。
【００８０】
続いて、占有資源取得手段１２０は、自プロセスのスタック情報部４２の占有資源確保数に１加算した数を、変数ｎにセットする（ステップＳ０１０２）。続いて、占有資源取得手段１２０は、自プロセスのスタック情報部４２のｎ番目のエントリに、ステップＳ０１０１で取得した占有資源３０を示す占有資源種別と占有資源識別子をセットする（ステップＳ０１０３）。また、占有資源取得手段１２０は、自プロセスのスタック情報部４２の占有資源確保数に、変数ｎの値をセットする（ステップＳ０１０４）。
【００８１】
占有資源取得手段１２０は、変数ｎが２以上であるか否かを確認する（ステップＳ０１０５）。変数ｎが２以上である場合（ステップＳ０１０５、Ｙｅｓ）、占有資源取得手段１２０は、ヘッダ情報部４１の送信フラグをオンに設定する。その後、占有資源取得手段１２０は、処理を終了する。一方、変数ｎが２よりも小さい場合（ステップＳ０１０５、Ｎｏ）、占有資源取得手段１２０は、処理を終了する。
【００８２】
続いて、図２１を参照して、占有資源解放手段１３０の動作の一例について説明する。
【００８３】
図２１を参照すると、占有資源解放手段１３０は、自プロセスからの要求に応じて、要求された占有資源３０を解放する（ステップＳ０２０１）。
【００８４】
続いて、占有資源解放手段１３０は、ヘッダ情報部４１の送信フラグがオンに設定されているか否かを確認する（ステップＳ０２０２）。
【００８５】
ヘッダ情報部４１の送信フラグはオンに設定されていない場合（ステップＳ０２０２、Ｎｏ）、ステップＳ０２１１の処理に進む。一方、ヘッダ情報部４１の送信フラグがオンに設定されている場合（ステップＳ０２０２、Ｙｅｓ）、占有資源解放手段１３０は、自プロセスのスタック情報部４２と一致した内容のエントリが自プロセスの送信履歴情報部４３に存在するか否かを確認する（ステップＳ０２０３）。
【００８６】
自プロセスのスタック情報部４２と一致した内容のエントリが自プロセスの送信履歴情報部４３に存在する場合（ステップＳ０２０３、Ｙｅｓ）、占有資源解放手段１３０は、一致しているエントリが先頭エントリになるようにリンクをはりかえる（ステップＳ０２０４）。その後、ステップＳ０２１０の処理に進むことになる。一方、自プロセスのスタック情報部４２と一致した内容のエントリが自プロセスの送信履歴情報部４３に存在しない場合（ステップＳ０２０３、Ｎｏ）、占有資源解放手段１３０は、スタック情報部４２の内容をスタック情報４４として監視プロセス２０に送信（キューイング）する（ステップＳ０２０５）。続いて、占有資源解放手段１３０は、送信履歴情報部４３に空きエントリが存在するか否かを確認する（ステップＳ０２０６）。
【００８７】
送信履歴情報部４３に空きエントリが存在する場合（ステップＳ０２０６、Ｙｅｓ）、占有資源解放手段１３０は、送信履歴情報部４３の空きエントリにスタック情報部４２の内容をコピーする（ステップＳ０２０７）。一方、送信履歴情報部４３に空きエントリが存在しない場合（ステップＳ０２０６、Ｎｏ）、占有資源解放手段１３０は、送信履歴情報部４３の最終エントリにスタック情報部４２の内容をコピーする（ステップＳ０２０８）。
【００８８】
ステップＳ０２０７、又は、ステップＳ０２０８の処理の後、占有資源解放手段１３０は、スタック情報部４２の内容をコピーしたエントリが先頭のエントリになるように、送信履歴情報部４３に対するリンクをはりかえる（ステップＳ０２０９）。
【００８９】
ステップＳ０２０４、又は、ステップＳ０２０９の処理の後、占有資源解放手段１３０は、ヘッダ情報部４１の送信フラグをオフにする（ステップＳ０２１０）。そして、占有資源解放手段１３０は、解放した占有資源３０のエントリを自プロセスのスタック情報部４２から削除する（ステップＳ０２１１）。なお、エントリの途中に解放した占有資源が存在する場合には、占有資源解放手段１３０は、削除対象のエントリを削除した後、エントリを上につめる。その後、占有資源解放手段１３０は、自プロセスのスタック情報部４２の占有資源確保数を１減算する（ステップＳ０２１２）。上記処理の後、占有資源解放手段１３０は、処理を終了する。
【００９０】
続いて、図２２を参照して、プロセス起動手段１４０の動作の一例について説明する。
【００９１】
プロセス起動手段１４０は、自プロセスからの要求に応じて、新たなプロセスを起動する処理を開始する。図２２を参照すると、プロセス起動手段１４０は、新たに起動するプロセスのプロセス番号を変数ｐにセットし、自プロセスのプロセス番号を変数ｃにセットする（ステップＳ０３０１）。
【００９２】
プロセス起動手段１４０は、プロセス番号ｐに対応するプロセス情報格納領域５０を確保する（ステップＳ０３０２）。
【００９３】
続いて、プロセス起動手段１４０は、プロセス番号ｃ（自プロセス）の終了待合せ情報部５１の待合せプロセス数を変数ｍにセットする（ステップＳ０３０３）。そして、プロセス起動手段１４０は、変数ｍが１以上であるか否か確認する（ステップＳ０３０４）。
【００９４】
変数ｍが１よりも小さい場合（ステップＳ３０４、Ｎｏ）、プロセス起動手段１４０は、プロセスｐを起動する（ステップＳ０３１５）。その後、プロセス起動手段１４０は、処理を終了する。一方、変数ｍが１以上である場合（ステップＳ３０４、Ｙｅｓ）、プロセス起動手段１４０は、プロセス番号ｃの終了待合せ情報部５１の内容を、プロセス番号ｐの終了待合せ情報部５１へコピーする（ステップＳ０３０５）。そして、プロセス起動手段１４０は、プロセス番号ｐのプロセス排他情報部５２の排他プロセス数に変数ｍをセットする（ステップＳ０３０６）。
【００９５】
続いて、プロセス起動手段１４０は、変数ａに１をセットする（ステップＳ０３０７）。また、プロセス起動手段１４０は、プロセス番号ｃの終了待合せ情報部５１のａ番目のエントリの待合せプロセス番号を変数ｑにセットする（ステップＳ０３０８）。また、プロセス起動手段１４０は、変数ｋに任意の他と重ならない排他番号（例えば、自プロセス番号と変数ｑと現在日時を並べた値）をセットする（ステップＳ０３０９）。また、プロセス起動手段１４０は、プロセス番号ｑのプロセス排他情報部５２の排他プロセス数に１加算した値を変数ｎにセットする（ステップＳ０３１０）。
【００９６】
そして、プロセス起動手段１４０は、プロセス番号ｐのプロセス排他情報部５２のａ番目のエントリの排他番号、および、プロセス番号ｑのプロセス排他情報部５２のｎ番目のエントリの排他番号に変数ｋをセットする（ステップＳ０３１１）。また、プロセス起動手段１４０は、プロセス番号ｑのプロセス排他情報部５２の排他プロセス数に変数ｎをセットする（ステップＳ０３１２）。
【００９７】
その後、プロセス起動手段１４０は、変数ａを１加算する（ステップＳ３１３）。そして、プロセス起動手段１４０は、変数ａが変数ｍより大きいか否かを確認する（ステップＳ３１４）。
【００９８】
変数ａが変数ｍより大きい場合（ステップＳ３１４、Ｙｅｓ）、プロセス起動手段１４０は、プロセスｐを起動する（ステップＳ０３１５）。その後、プロセス起動手段１４０は、処理を終了する。一方、変数ａが変数ｍ以下である場合（ステップＳ３１４、Ｎｏ）、ステップＳ０３０８の処理に進むことになる。
【００９９】
続いて、図２３を参照して、プロセス終了待合せ手段１５０の動作の一例について説明する。
【０１００】
図２３を参照すると、プロセス終了待合せ手段１５０は、プロセス終了待ち合わせ要求時に、終了を待ち合わせる対象となるプロセスのプロセス番号を変数ｐにセットし、自プロセスのプロセス番号を変数ｃにセットする（ステップＳ０４０１）。
【０１０１】
プロセス終了待合せ手段１５０は、プロセスｐの終了を待ち合わせる（ステップＳ０４０２）。
【０１０２】
プロセス終了待合せ手段１５０は、プロセス番号ｃの終了待合せ情報部５１の待合せプロセス数を変数ｍにセットし、プロセス番号ｐの終了待合せ情報部５１の待合せプロセス数を変数ｎにセットする（ステップＳ０４０３）。また、プロセス終了待合せ手段１５０は、変数ａに１をセットする（ステップＳ０４０４）。
【０１０３】
続いて、プロセス終了待合せ手段１５０は、変数ａが変数ｎより大きいか否かを確認する（ステップＳ０４０５）。変数ａが変数ｎ以下である場合（ステップＳ０４０５、Ｎｏ）、プロセス終了待合せ手段１５０は、プロセス番号ｐの終了待合せ情報部５１のａ番目のエントリの待合せプロセス番号を変数ｑにセットする（ステップＳ０４０６）。そして、プロセス終了待合せ手段１５０は、プロセス番号ｃの終了待合せ情報部５１の待合せプロセス番号に変数ｑが存在するか否かを確認する（ステップＳ０４０７）。
【０１０４】
プロセス番号ｃの終了待合せ情報部５１の待合せプロセス番号に変数ｑが存在しない場合（ステップＳ０４０７、Ｎｏ）、プロセス終了待合せ手段１５０は、変数ｍを１加算する（ステップＳ０４０８）。そして、プロセス終了待合せ手段１５０は、プロセス番号ｃの終了待合せ情報部５１のｍ番目の待合せプロセス番号に変数ｑをセットする（ステップＳ０４０９）。
【０１０５】
一方、プロセス番号ｃの終了待合せ情報部５１の待合せプロセス番号に変数ｑが存在する場合（ステップＳ０４０７、Ｙｅｓ）、又は、ステップＳ０４０９の処理の後、プロセス終了待合せ手段１５０は、変数ａを１加算する（ステップＳ０４１０）。その後、ステップＳ０４０５の処理に進む。
【０１０６】
ステップＳ０４０５の処理において、変数ａが変数ｎより大きい場合（ステップＳ０４０５、Ｙｅｓ）、プロセス終了待合せ手段１５０は、変数ｍを１加算する（ステップＳ０４１１）。そして、プロセス終了待合せ手段１５０は、プロセス番号ｃの終了待合せ情報部５１のｍ番目の待合せプロセス番号に変数ｐをセットする（ステップＳ０４１２）。また、プロセス終了待合せ手段１５０は、プロセス番号ｃの終了待合せ情報部５１の待合せプロセス数に変数ｍをセットする（ステップＳ０４１３）。その後、プロセス終了待合せ手段１５０は、その処理を終了する。
【０１０７】
ここで、プロセス起動手段１４０およびプロセス終了待合せ手段１５０動作時のプロセス情報格納領域５０の遷移について、図２４、図２５を参照して説明する。具体的には、例えば、図２４で示すようにプロセスが動作する場合のプロセス情報格納領域５０の遷移について説明する。
【０１０８】
図２４を参照すると、プロセス番号１０は、［１］プロセス番号２０を起動し、［４］プロセス番号２０の終了を待ち合わせた後、［５］プロセス番号４０を起動する。また、プロセス番号２０は、プロセス番号１０から起動され、［２］プロセス番号３０を起動し、［３］プロセス番号３０の終了を待ち合わせた後、終了する。また、プロセス番号３０は、プロセス番号２０から起動された後、終了する。また、プロセス番号４０は、プロセス番号１０から起動される。
【０１０９】
このような状況における、プロセス情報格納領域５０の遷移を図２５に示す。なお、プロセス番号１０がプロセス番号２０を起動する前の終了待合せ情報部５１およびプロセス排他情報部５２の待合せプロセス数および排他プロセス数は、共に０であるとする。
【０１１０】
図２５を参照すると、［１］プロセス番号１０がプロセス番号２０を起動する前においては、プロセス番号１０のみがプロセス情報格納領域５０を用意されている。また、上記のように、プロセス番号１０のプロセス情報格納領域５０の待合せプロセス数および排他プロセス数は、共に０である。
【０１１１】
［１］プロセス番号１０がプロセス番号２０を起動した後においては、新たにプロセス番号２０のプロセス情報格納領域５０が用意される。一方で、プロセス番号１０及びプロセス番号２０のプロセス情報格納領域５０の待合せプロセス数および排他プロセス数は、共に０である。
【０１１２】
［２］プロセス番号２０がプロセス番号３０を起動した後においては、新たにプロセス番号３０のプロセス情報格納領域５０が用意される。一方で、プロセス番号１０、プロセス番号２０、プロセス番号３０のプロセス情報格納領域５０の待合せプロセス数および排他プロセス数は、共に０である。
【０１１３】
［３］プロセス番号２０がプロセス番号３０の終了を待ち合わせ後は、プロセス番号２０の終了待合せ情報部５１にプロセス番号３０が追加される。
【０１１４】
［４］プロセス番号１０がプロセス番号２０の終了を待ち合わせ後は、プロセス番号１０の終了待合せ情報部５１にプロセス番号３０およびプロセス番号２０が追加される。
【０１１５】
［５］プロセス番号１０がプロセス番号４０を起動した後は、新たにプロセス番号４０のプロセス情報格納領域５０が用意される。そして、プロセス番号４０の終了待合せ情報部５１にプロセス番号３０およびプロセス番号２０が追加される。また、プロセス番号３０とプロセス番号４０のプロセス排他情報部５２に同一の排他番号がセットされ、プロセス番号２０とプロセス番号４０のプロセス排他情報部５２に同一の排他番号がセットされる。
【０１１６】
以上が、図２４で示す状況における、プロセス情報格納領域５０の遷移である。
【０１１７】
続いて、終了手段１６０の動作の一例について説明する。終了手段１６０は、処理プロセス１０において、プロセス終了時に、自プロセスの占有情報スタック領域４０を解放する。その後、終了手段１６０は、処理を終了する。
【０１１８】
続いて、占有情報受信手段２１０の動作の一例について説明する。占有情報受信手段２１０は、処理プロセス１０から送信されたスタック情報４４を受信し、キューから取り出す。また、占有情報受信手段２１０は、キューにスタック情報４４が残っていない場合、キューに送信されるまで待ち合わせる。
【０１１９】
続いて、ロック循環チェック手段２２０の動作の一例について説明する。まず、図２６を参照して、ロック循環チェック手段２２０の全体の動作について説明する。
【０１２０】
図２６を参照すると、ロック循環チェック手段２２０は、作業用資源登録部２２０Ａを作成する（ステップＳ０５０１）。続いて、ロック循環チェック手段２２０は、作業用内側ロックリスト２２０Ｂおよび作業用外側ロックリスト２２０Ｃに内側・外側ロックを登録する（ステップＳ０５０２）。そして、ロック循環チェック手段２２０は、必要に応じて、循環チェックを行う（ステップＳ０５０３）。その後、ロック循環チェック手段２２０は、処理を終了する。
【０１２１】
続いて、図２７を参照して、図２６で示すステップＳ０５０１の処理の詳細な流れの一例について説明する。
【０１２２】
図２７を参照すると、ロック循環チェック手段２２０は、作業用資源登録部２２０Ａの初期化（０セット）を行う（ステップＳ０６０１）。
【０１２３】
続いて、ロック循環チェック手段２２０は、変数ｓｗ＿ｌｏｏｐ及び変数ｓｗ＿ｎｅｗをオフにセットする（ステップＳ０６０２）。また、ロック循環チェック手段２２０は、スタック情報４４の占有資源確保数を変数ｎにセットする（ステップＳ０６０３）。また、ロック循環チェック手段２２０は、変数ｘに１をセットする（ステップＳ０６０４）。
【０１２４】
次に、ロック循環チェック手段２２０は、スタック情報４４のｘ番目のエントリの占有資源種別と占有資源識別子を変数ａにセットする（ステップＳ０６０４）。そして、ロック循環チェック手段２２０は、資源登録部６１Ａに登録されている占有資源種別と占有資源識別子のうち、変数ａと一致するエントリがあるか否かを確認する（ステップＳ０６０５）。
【０１２５】
資源登録部６１Ａに登録されている占有資源種別と占有資源識別子のうち、変数ａと一致するエントリがある場合（ステップＳ０６０５、Ｙｅｓ）、ロック循環チェック手段２２０は、変数ａと一致するエントリの内容を作業用資源登録部２２０Ａのｘ番目のエントリへコピーする（ステップＳ６０６）。一方で、資源登録部６１Ａに登録されている占有資源種別と占有資源識別子のうち、変数ａと一致するエントリがない場合（ステップＳ０６０５、Ｎｏ）、ロック循環チェック手段２２０は、変数ｓｗ＿ｎｅｗをＯＮにセットする（ステップＳ０６０７）。そして、ロック循環チェック手段２２０は、作業用資源登録部２２０Ａのｘ番目のエントリの占有資源種別と占有資源識別子に変数ａをセットする（ステップＳ０６０８）。
【０１２６】
ステップＳ０６０６、又は、ステップＳ０６０８、の処理の後、ロック循環チェック手段２２０は、変数ｘに１を加算する（ステップＳ０６０９）。その後、ロック循環チェック手段２２０は、変数ｘが変数ｎより大きいか否かを確認する（ステップＳ０６１０）。
【０１２７】
変数ｘが変数ｎ以下である場合（ステップＳ６１０、Ｎｏ）、ロック循環チェック手段２２０は、ステップＳ０６０４の処理に進む。一方、変数ｘが変数ｎより大きい場合（ステップＳ６１０、Ｙｅｓ）、ロック循環チェック手段２２０は、作業用資源登録部２２０Ａのｎ番目のエントリの内側出現カウンタを１加算する（ステップＳ０６１１）。その後、ロック循環チェック手段２２０は、ステップＳ０５０１の処理を終了する。
【０１２８】
続いて、図２８、図２９を参照して、図２６で示すステップＳ０５０２の処理の詳細な流れの一例について説明する。
【０１２９】
図２８を参照すると、ロック循環チェック手段２２０は、作業用循環情報登録表２２０Ｄのエントリ数に０をセットする（ステップＳ０７０１）。また、ロック循環チェック手段２２０は、スタック情報４４の占有資源確保数を変数ｎにセットする（ステップＳ０７０３）。
【０１３０】
また、ロック循環チェック手段２２０は、変数ｘに１をセットする（ステップＳ０７０３）。
【０１３１】
また、ロック循環チェック手段２２０は、スタック情報４４のｘ番目のエントリの占有資源種別と占有資源識別子を変数ａにセットする（ステップＳ０７０４）。
【０１３２】
そして、ロック循環チェック手段２２０は、作業用資源登録部２２０Ａのｎ番目のエントリの外側ロックリストポインタが示す外側ロックリストに変数ａと一致する占有資源種別と占有資源識別子のエントリがあるか否かを確認する（ステップＳ０７０５）。
【０１３３】
業用資源登録部２２０Ａのｎ番目のエントリの外側ロックリストポインタが示す外側ロックリストに変数ａと一致する占有資源種別と占有資源識別子のエントリがある場合（ステップＳ０７０５、Ｙｅｓ）、ロック循環チェック手段２２０は、変数ａと一致する外側ロックリストのエントリの循環フラグがオンであるか否かを確認する（ステップＳ０７０６）。
【０１３４】
変数ａと一致する外側ロックリストのエントリの循環フラグがオンである場合（ステップＳ０７０６、Ｙｅｓ）、ロック循環チェック手段２２０は、変数ａと一致するエントリの循環情報対応表ポインタを作業用循環情報登録表２２０Ｄに追加する。また、ロック循環チェック手段２２０は、作業用循環情報登録表２２０Ｄのエントリ数を１加算する（ステップＳ０７０７）。そして、ロック循環チェック手段２２０は、変数ｓｗ＿ｌｏｏｐをオンにセットする（ステップＳ０７０８）。
【０１３５】
変数ａと一致する外側ロックリストのエントリの循環フラグがオンでない場合（ステップＳ０７０６、Ｎｏ）、又は、ステップＳ０７０８の処理の後、ロック循環チェック手段２２０は、図２９で示すステップＳ０７２３の処理に進むことになる。
【０１３６】
業用資源登録部２２０Ａのｎ番目のエントリの外側ロックリストポインタが示す外側ロックリストに変数ａと一致する占有資源種別と占有資源識別子のエントリがない場合（ステップＳ０７０５、Ｎｏ）、ロック循環チェック手段２２０は、作業用資源登録部２２０Ａのｎ番目のエントリの外側更新フラグがオフであるか否かを確認する（ステップＳ０７０９）。
【０１３７】
作業用資源登録部２２０Ａのｎ番目のエントリの外側更新フラグがオフである場合（ステップＳ０７０９、Ｙｅｓ）、ロック循環チェック手段２２０は、作業用資源登録部２２０Ａのｎ番目エントリの外側ロックリストポインタが示す外側ロックリスト部６１Ｃの内容を、未使用の作業用外側ロックリスト２２０Ｃへコピーする（ステップＳ０７１０）。そして、ロック循環チェック手段２２０は、作業用資源登録部２２０Ａのｎ番目エントリの外側ロックリストポインタに、作業用外側ロックリスト２２０Ｃのアドレスを格納する（ステップＳ０７１１）。その後、ロック循環チェック手段２２０は、作業用資源登録部２２０Ａのｎ番目エントリの外側更新フラグをオンにセットする（ステップＳ０７１２）。
【０１３８】
作業用資源登録部２２０Ａのｎ番目のエントリの外側更新フラグがオフでない場合（ステップＳ０７０９、Ｎｏ）、又は、ステップＳ０７１２の処理の後、ロック循環チェック手段２２０は、作業用資源登録部２２０Ａのｎ番目エントリの外側ロックリストポインタが示す作業用外側ロックリスト２２０Ｃに変数ａを追加する（ステップＳ０７１３）。そして、ロック循環チェック手段２２０は、作業用資源登録部２２０Ａのｎ番目エントリの外側ロック数を１加算する（ステップＳ０７１４）。その後、ロック循環チェック手段２２０は、変数ｓｗ＿ｎｅｗをオンにセットする（ステップＳ０７１５）。
【０１３９】
続いて、ロック循環チェック手段２２０は、スタック情報４４のｎ番目のエントリの占有資源種別と占有資源識別子を変数ｂにセットする（ステップＳ０７１６）。
【０１４０】
ステップＳ０７１６の処理の後、図２９を参照すると、ロック循環チェック手段２２０は、作業用資源登録部２２０Ａのｘ番目のエントリの内側更新フラグがオフであるか否かを確認する（ステップＳ０７１７）。
【０１４１】
作業用資源登録部２２０Ａのｘ番目のエントリの内側更新フラグがオフである場合（ステップＳ０７１７、Ｙｅｓ）、ロック循環チェック手段２２０は、作業用資源登録部２２０Ａのｘ番目エントリの内側ロックリストポインタが示す内側ロックリスト部６１Ｂの内容を、未使用の作業用内側ロックリスト２２０Ｂへコピーする（ステップＳ０７１８）。そして、ロック循環チェック手段２２０は、作業用資源登録部２２０Ａのｘ番目エントリの内側ロックリストポインタに、作業用内側ロックリスト２２０Ｂのアドレス格納する（ステップＳ０７１９）。その後、ロック循環チェック手段２２０は、作業用資源登録部２２０のｘ番目エントリの内側更新フラグをオンにセットする（ステップＳ０７２０）。
【０１４２】
作業用資源登録部２２０Ａのｘ番目のエントリの内側更新フラグがオフでない場合（ステップＳ０７１７、Ｎｏ）、又は、ステップＳ０７２０の処理の後、ロック循環チェック手段２２０は、作業用資源登録部２２０Ａのｘ番目エントリの内側ロックリストポインタが示す作業用内側ロックリスト２２０Ｂに、変数ｂを追加する（ステップＳ０７２１）。そして、ロック循環チェック手段２２０は、作業用資源登録部２２０Ａのｘ番目エントリの内側ロック数を１加算する（ステップＳ０７２２）。
【０１４３】
ステップＳ０７０６がＮｏである場合、又は、ステップＳ０７０８の処理の後、又は、ステップＳ０７２２の処理の後、ロック循環チェック手段２２０は、変数ｘに１加算する（ステップＳ０７２３）。
【０１４４】
ロック循環チェック手段２２０は、変数ｘが変数ｎ以上であるか否かを確認する（ステップＳ０７２４）。
【０１４５】
変数ｘが変数ｎよりも小さい場合（ステップＳ０７２４、Ｎｏ）、ロック循環チェック手段２２０は、ステップＳ０７０４の処理に進む。一方、変数ｘが変数ｎ以上である場合（ステップＳ０７２４、Ｙｅｓ）、ロック循環チェック手段２２０は、変数ｎを１減算する（ステップＳ０７２５）。そして、ロック循環チェック手段２２０は、変数ｎが１以下であるか否かを確認する（ステップＳ０７２６）。
【０１４６】
変数ｎが１よりも大きい場合（ステップＳ０７２６、Ｎｏ）、ロック循環チェック手段２２０は、ステップＳ０７０３の処理に進む。一方、変数ｎが１以下である場合（ステップＳ０７２６、Ｙｅｓ）、ロック循環チェック手段２２０は、変数ｓｗ＿ｎｅｗがオンであるか否かを確認する（ステップＳ０７２７）。
【０１４７】
変数ｓｗ＿ｎｅｗがオンである場合（ステップＳ０７２７、Ｙｅｓ）、ロック循環チェック手段２２０は、図２６のステップＳ０５０３の処理である循環チェックを実行する。一方、変数ｓｗ＿ｎｅｗがオンでない場合（ステップＳ０７２７、Ｎｏ）、ロック循環チェック手段２２０は、変数ｓｗ＿ｌｏｏｐがオンであるか否かを確認する（ステップＳ０７２８）。
【０１４８】
変数ｓｗ＿ｌｏｏｐがオンである場合（ステップＳ０７２８、Ｙｅｓ）、ロック循環チェック手段２２０は、デッドロック検証手段２３０に制御を渡して、デッドロックが発生するか否かの検証を行わせる。一方、変数ｓｗ＿ｌｏｏｐがオンでない場合（ステップＳ０７２８、Ｎｏ）、ロック循環チェック手段２２０は、ロック情報登録手段２４０に制御を渡す。デッドロック検証手段２３０、又は、ロック情報登録手段２４０に制御を渡した後、ロック循環チェック手段２２０は、処理を終了する。
【０１４９】
続いて、図３０を参照して、図２６で示すステップＳ０５０３の処理の詳細な流れの一例について説明する。
【０１５０】
図３０を参照すると、ロック循環チェック手段２２０は、作業用追加循環リスト登録部２２０Ｅの登録パターン数に０をセットする（ステップＳ０８０１）。また、ロック循環チェック手段２２０は、スタック情報４４の占有資源確保数を変数ｎにセットする（ステップＳ０８０２）。
【０１５１】
また、ロック循環チェック手段２２０は、スタック登録部６３Ａの登録数に１加算した値を変数ｚにセットする（ステップＳ０８０３）。
【０１５２】
ロック循環チェック手段２２０は、（作業用資源登録部２２０Ａのｎ番目のエントリの内側出現カウンタ）×１００÷変数ｚが固定値（％）より大きいか否かを確認する（ステップＳ０８０４）。なお、固定値は、任意の設定値でよいが、半分の５０（％）としてもよい。
【０１５３】
（作業用資源登録部２２０Ａのｎ番目のエントリの内側出現カウンタ）×１００÷変数ｚが固定値（％）より大きい場合（ステップＳ０８０４、Ｙｅｓ）、ロック循環チェック手段２２０は、作業用循環チェックリスト２２０Ｇの内側フラグをオンにセットする（ステップＳ０８０５）。一方、（作業用資源登録部２２０Ａのｎ番目のエントリの内側出現カウンタ）×１００÷変数ｚが固定値（％）以下である場合（ステップＳ０８０４、Ｎｏ）、ロック循環チェック手段２２０は、作業用循環チェックリスト２２０Ｇの内側フラグをオフにセットする（ステップＳ０８０６）。
【０１５４】
続いて、ロック循環チェック手段２２０は、変数ｘに１をセットする（ステップＳ０８０７）。そして、ロック循環チェック手段２２０は、作業用循環チェックリスト２２０Ｇの内側フラグがオンであるか否かを確認する（ステップＳ０８０８）。
【０１５５】
作業用循環チェックリスト２２０Ｇの内側フラグがオンである場合（ステップＳ０８０８、Ｙｅｓ）、ロック循環チェック手段２２０は、作業用循環チェックリスト２２０Ｇの先頭のエントリに、スタック情報４４のｘ番目のエントリの占有資源種別と占有資源識別子をセットする（ステップＳ０８０９）。また、ロック循環チェック手段２２０は、作業用循環チェックリスト２２０Ｇの２番目のエントリに、スタック情報４４のｎ番目のエントリの占有資源種別と占有資源識別子をセットする（ステップＳ０８１０）。
【０１５６】
一方、作業用循環チェックリスト２２０Ｇの内側フラグがオンでない場合（ステップＳ０８０８、Ｎｏ）、ロック循環チェック手段２２０は、作業用循環チェックリスト２２０Ｇの先頭のエントリに、スタック情報４４のｎ番目のエントリの占有資源種別と占有資源識別子をセットする（ステップＳ０８１１）。また、ロック循環チェック手段２２０は、作業用循環チェックリスト２２０Ｇの２番目のエントリに、スタック情報４４のｘ番目のエントリの占有資源種別と占有資源識別子をセットする。
【０１５７】
ステップＳ０８１０、又は、ステップＳ０８１２の処理の後、ロック循環チェック手段２２０は、作業用循環チェックリスト２２０Ｇのエントリ数に２をセットする（ステップＳ０８１３）。その後、ロック循環チェック手段２２０は、循環チェックルーチンを呼び出す（ステップＳ０８１４）。なお、循環チェックルーチンを実行する際の詳細な流れの一例については、後述する。
【０１５８】
ロック循環チェック手段２２０は、変数ｘに１加算する（ステップＳ０８１５）。そして、ロック循環チェック手段２２０は、変数ｘが変数ｎ以上であるか否かを確認する（ステップＳ０８１６）。
【０１５９】
変数ｘが変数ｎよりも小さい場合（ステップＳ０８１６、Ｎｏ）、ロック循環チェック手段２２０は、ステップＳ０８０８の処理に進む。一方、変数ｘが変数ｎ以上の場合（ステップＳ０８１６、Ｙｅｓ）、ロック循環チェック手段２２０は、変数ｎを１減算する（ステップＳ０８１７）。そして、ロック循環チェック手段２２０は、変数ｎが１以下であるか否かを確認する（ステップＳ０８１８）。
【０１６０】
変数ｎが１よりも大きい場合（ステップＳ０８１８、Ｎｏ）、ロック循環チェック手段２２０は、ステップＳ０８０３の処理に進む。一方、変数ｎが１以下の場合（ステップＳ０８１８、Ｙｅｓ）、ロック循環チェック手段２２０は、変数ｓｗ＿ｌｏｏｐがオンであるか、または、作業用追加循環リスト登録部２２０Ｅの登録パターン数が０よりも大きいか、を確認する（ステップＳ０８１９）。変数ｓｗ＿ｌｏｏｐがオンである場合、又は、作業用追加循環リスト登録部２２０Ｅの登録パターン数が０よりも大きい場合（ステップＳ０８１９、Ｙｅｓ）、ロック循環チェック手段２２０は、デッドロック検証手段２３０に制御を渡して、デッドロックが発生するか否かの検証を行わせる。一方、変数ｓｗ＿ｌｏｏｐがオンでなく、かつ、作業用追加循環リスト登録部２２０Ｅの登録パターン数が０よりも大きくない場合（ステップＳ０８１９、Ｎｏ）、ロック循環チェック手段２２０は、ロック情報登録手段２４０に制御を渡す。デッドロック検証手段２３０、又は、ロック情報登録手段２４０に制御を渡した後、ロック循環チェック手段２２０は、処理を終了する。
【０１６１】
続いて、図３１乃至図３３を参照して、循環チェックルーチンを実行する際の詳細な流れの一例について説明する。
【０１６２】
図３１を参照すると、ロック循環チェック手段２２０は、作業用循環チェックリスト２２０Ｇのエントリ数を変数ｅにセットする（ステップＳ０９０１）。また、ロック循環チェック手段２２０は、作業用循環チェックリスト２２０Ｇのｅ番目エントリの占有資源種別と占有資源識別子を変数ａにセットする（ステップＳ０９０２）。
【０１６３】
続いて、ロック循環チェック手段２２０は、作業用資源登録部２２０Ａに登録されている占有資源種別と占有資源識別子のうち、変数ａと一致しているエントリがあるか否かを確認する（ステップＳ０９０３）。
【０１６４】
作業用資源登録部２２０Ａに登録されている占有資源種別と占有資源識別子のうち、変数ａと一致しているエントリがある場合（ステップＳ０９０３、Ｙｅｓ）、ロック循環チェック手段２２０は、作業用循環チェックリスト２２０Ｇの内側フラグがオンであるか否かを確認する（ステップＳ０９０４）。そして、作業用循環チェックリスト２２０Ｇの内側フラグがオンである場合（ステップＳ０９０４、Ｙｅｓ）、ロック循環チェック手段２２０は、変数ａと一致するエントリの内側ロック数を変数ｂにセットし、変数ａと一致するエントリの内側ロックリストポインタを変数ｐにセットする（ステップＳ０９０５）。一方、作業用循環チェックリスト２２０Ｇの内側フラグがオンでない場合（ステップＳ０９０４、Ｎｏ）、ロック循環チェック手段２２０は、変数ａと一致するエントリの外側ロック数を変数ｂにセットし、変数ａと一致するエントリの外側ロックリストポインタを変数ｐにセットする（ステップＳ０９０６）。
【０１６５】
また、作業用資源登録部２２０Ａに登録されている占有資源種別と占有資源識別子のうち、変数ａと一致しているエントリがない場合（ステップＳ０９０３、Ｎｏ）、ロック循環チェック手段２２０は、作業用循環チェックリスト２２０Ｇの内側フラグがオンであるか否かを確認する（ステップＳ０９０７）。そして、作業用循環チェックリスト２２０Ｇの内側フラグがオンである場合（ステップＳ０９０７、Ｙｅｓ）、ロック循環チェック手段２２０は、資源登録部６１Ａに登録されている占有資源種別と占有資源識別子のうち、変数ａと一致しているエントリの内側ロック数を変数ｂにセットする。また、ロック循環チェック手段２２０は、資源登録部６１Ａに登録されている占有資源種別と占有資源識別子のうち、変数ａと一致しているエントリの内側ロックリストポインタを変数ｐにセットする（ステップＳ０９０８）。一方、作業用循環チェックリスト２２０Ｇの内側フラグがオンでない場合（ステップＳ０９０７、Ｎｏ）、ロック循環チェック手段２２０は、資源登録部６１Ａに登録されている占有資源種別と占有資源識別子のうち、変数ａと一致しているエントリの外側ロック数を変数ｂにセットする。また、ロック循環チェック手段２２０は、資源登録部６１Ａに登録されている占有資源種別と占有資源識別子のうち、変数ａと一致しているエントリの外側ロックリストポインタを、変数ｐにセットする（ステップＳ０９０９）。
【０１６６】
ステップＳ０９０５、又は、ステップＳ０９０６、又は、ステップＳ０９０８、又は、ステップＳ０９０９、の処理の後、ロック循環チェック手段２２０は、変数ｃに１をセットする（ステップＳ０９１０）。
【０１６７】
続いて、図３２を参照すると、ロック循環チェック手段２２０は、変数ｃが変数ｂよりも大きいか否かの確認を行う（ステップＳ０９１１）。
【０１６８】
変数ｃが変数ｂよりも大きい場合（ステップＳ０９１１、Ｙｅｓ）、ロック循環チェック手段２２０は、循環チェックルーチンを終了する。一方、変数ｃが変数ｂ以下である場合（ステップＳ０９１１、Ｎｏ）、ロック循環チェック手段２２０は、変数ｐがさすロックリストポインタのｃ番目のエントリの占有資源種別と占有資源識別子を変数ｄにセットする（ステップＳ０９１２）。
【０１６９】
続いて、ロック循環チェック手段２２０は、作業用循環チェックリスト２２０Ｇに登録されている占有資源種別と占有資源識別子のうち、変数ｄと一致しているエントリがあるか否かを確認する（ステップＳ０９１３）。
【０１７０】
作業用循環チェックリスト２２０Ｇに登録されている占有資源種別と占有資源識別子のうち、変数ｄと一致しているエントリがない場合（ステップＳ０９１３、Ｎｏ）、ロック循環チェック手段２２０は、作業用循環チェックリスト２２０Ｇの（ｅ＋１）番目のエントリに変数ｄ（占有資源種別と占有資源識別子）を登録する（ステップＳ０９１４）。また、ロック循環チェック手段２２０は、作業用循環チェックリスト２２０Ｇのエントリ数を１加算する（ステップＳ０９１５）。そして、ロック循環チェック手段２２０は、循環チェックルーチンを再帰呼び出しする（ステップＳ０９１６）。
【０１７１】
その後、ロック循環チェック手段２２０は、作業用循環チェックリスト２２０Ｇのエントリ数を１減算する（ステップＳ０９１７）。そして、ロック循環チェック手段２２０は、変数ｃを１加算する（ステップＳ０９１８）。ステップＳ０９１８の処理の後、ロック循環チェック手段２２０は、ステップＳ０９１１の処理に進む。
【０１７２】
作業用循環チェックリスト２２０Ｇに登録されている占有資源種別と占有資源識別子のうち、変数ｄと一致しているエントリがある場合（ステップＳ０９１３、Ｙｅｓ）、ロック循環チェック手段２２０は、変数ｄと一致しているエントリが先頭のエントリであるか否かを確認する（ステップＳ０９１９）。
【０１７３】
変数ｄと一致しているエントリが先頭のエントリでない場合（ステップＳ０９１９、Ｎｏ）、ロック循環チェック手段２２０は、ステップＳ０９１８の処理に進む。一方、変数ｄと一致しているエントリが先頭のエントリである場合（ステップＳ０９１９、Ｙｅｓ）、ロック循環チェック手段２２０は、作業用循環チェックリスト２２０Ｇの循環パターンが循環情報部６２に登録済の循環パターンであるか否かを確認する（ステップＳ０９２０）。
【０１７４】
作業用循環チェックリスト２２０Ｇの循環パターンが循環情報部６２に登録済の循環パターンである場合（ステップＳ０９２０、Ｙｅｓ）、ロック循環チェック手段２２０は、ステップＳ０９１８の処理に進む。一方、作業用循環チェックリスト２２０Ｇの循環パターンが循環情報部６２に登録済の循環パターンでない場合（ステップＳ０９２０、Ｎｏ）、ロック循環チェック手段２２０は、ステップＳ０９２１の処理に進む。なお、作業用循環チェックリスト２２０Ｇの内側フラグがオフの場合には、循環リスト６２Ｂと逆順を示すことになる。そのため、ロック循環チェック手段２２０は、順番を逆にして比較する。例えば、内側フラグがオフの作業用循環チェックリスト２２０Ｇの占有資源３０がＳ１、Ｓ２、Ｓ３の順番となっている場合、循環リスト６２ＢがＳ３、Ｓ２、Ｓ１の順番となっていれば、登録済と判断する。また、ロック循環チェック手段２２０は、循環リストの先頭の資源が異なっていても、並び順が同じ場合には、登録済と判断する。例えば、内側フラグがオンの作業用循環チェックリスト２２０Ｇの占有資源がＳ１、Ｓ２、Ｓ３の順番となっている場合、例えば循環リスト６２ＢがＳ２、Ｓ３、Ｓ１となっている場合も登録済と判断する。
【０１７５】
ステップＳ０９２１の処理では、ロック循環チェック手段２２０は、作業用追加循環リスト登録部２２０Ｅの登録パターン数に１加算した値を、変数ｆにセットする（ステップＳ０９２１）。
【０１７６】
ロック循環チェック手段２２０は、未使用の作業用追加循環リスト２２０Ｆを確保し、初期化（０セット）する（ステップＳ０９２２）。続いて、ロック循環チェック手段２２０は、作業用追加循環リスト登録部２２０Ｅのｆ番目エントリの作業用追加循環リストへのポインタに、確保した作業用追加循環リスト２２０Ｆのアドレスをセットする（ステップＳ０９２３）。また、ロック循環チェック手段２２０は、作業用追加循環リスト登録部２２０Ｅのｆ番目エントリの循環資源数に変数ｅの値をセットする（ステップＳ０９２４）。また、ロック循環チェック手段２２０は、作業用追加循環リスト登録部２２０Ｅの登録パターン数に、変数ｆの値をセットする（ステップＳ０９２５）。
【０１７７】
続いて、ロック循環チェック手段２２０は、変数ｇに１をセットする（ステップＳ０９２６）。
【０１７８】
そして、ロック循環チェック手段２２０は、作業用循環チェックリスト２２０Ｇの内側フラグがオンであるか否かを確認する（ステップＳ０９２７）。
【０１７９】
作業用循環チェックリスト２２０Ｇの内側フラグがオンである場合（ステップＳ０９２７、Ｙｅｓ）、ロック循環チェック手段２２０は、変数ｈに１をセットする（ステップＳ０９２８）。一方、作業用循環チェックリスト２２０Ｇの内側フラグがオンでない場合（ステップＳ０９２７、Ｎｏ）、ロック循環チェック手段２２０は、変数ｈに２をセットする（ステップＳ０９２９）。
【０１８０】
続いて、ロック循環チェック手段２２０は、作業用循環チェックリスト２２０Ｇのｈ番目エントリの占有資源種別と占有資源識別子を、作業用追加循環リスト２２０Ｆのｇ番目エントリの占有資源種別と占有資源識別子にセットする（ステップＳ０９３０）。
【０１８１】
次に、ロック循環チェック手段２２０は、変数ｇを１加算する（ステップＳ９３１）。そして、ロック循環チェック手段２２０は、変数ｇが変数ｅより大きいか否かを確認する（ステップＳ０９３２）。
【０１８２】
変数ｇが変数ｅよりも大きい場合（ステップＳ０９３２、Ｙｅｓ）、ロック循環チェック手段２２０は、図３２で示すステップＳ０９１８の処理に進む。一方、変数ｇが変数ｅ以下である場合（ステップＳ０９３２、Ｎｏ）、ロック循環チェック手段２２０は、作業用循環チェックリスト２２０Ｇの内側フラグがオンであるか否かを確認する（ステップＳ０９３３）。
【０１８３】
作業用循環チェックリスト２２０Ｇの内側フラグがオンである場合（ステップＳ０９３３、Ｙｅｓ）、ロック循環チェック手段２２０は、変数ｈを１加算する（ステップＳ０９３４）。一方、作業用循環チェックリスト２２０Ｇの内側フラグがオンでない場合（ステップＳ０９３３、Ｎｏ）、ロック循環チェック手段２２０は、変数ｈが１以下であるか否かを確認する（ステップＳ０９３５）。そして、変数ｈが１以下である場合（ステップＳ０９３５、Ｙｅｓ）、ロック循環チェック手段２２０は、変数ｈに変数ｅの値をセットする（ステップＳ０９３６）。一方で、変数ｈが１よりも大きい場合（ステップＳ０９３５、Ｎｏ）、ロック循環チェック手段２２０は、変数ｈを１減算する（ステップＳ０９３７）。ステップＳ０９３４、又は、ステップＳ０９３６、又は、ステップＳ０９３７、の処理の後、ロック循環チェック手段２２０は、ステップＳ０９３０の処理に進むことになる。
【０１８４】
続いて、デッドロック検証手段２３０の動作の一例について説明する。まず、図３４を参照して、デッドロック検証手段２３０の全体の動作について説明する。
【０１８５】
図３４を参照すると、デッドロック検証手段２３０は、作業用追加スタック対応表２３０Ａを作成する（ステップＳ１００１）。続いて、デッドロック検証手段２３０は、占有資源のチェックを行う（ステップＳ１００２）。その後、デッドロック検証手段２３０は、処理を終了する。
【０１８６】
続いて、図３５、図３６を参照して、図３４で示すステップＳ１００１の処理の詳細な流れの一例について説明する。
【０１８７】
図３５を参照すると、デッドロック検証手段２３０は、変数ｓｗ＿ｎｅｗがオンにセットされているか否かを確認する（ステップＳ１１０１）。変数ｓｗ＿ｎｅｗがオンにセットされていない場合（ステップＳ１１０１、Ｎｏ）、デッドロック検証手段２３０は、図３４で示すステップＳ１００２の処理である占有資源のチェックを開始する。一方、変数ｓｗ＿ｎｅｗがオンにセットされている場合（ステップＳ１１０１、Ｙｅｓ）、デッドロック検証手段２３０は、作業用追加循環リスト登録部２２０Ｅの登録パターン数の値を変数ｅにセットする（ステップＳ１１０２）。また、デッドロック検証手段２３０は、変数ｆに１をセットする（ステップＳ１１０３）。
【０１８８】
デッドロック検証手段２３０は、変数ｆが変数ｅよりも大きいか否か確認する（ステップＳ１１０４）。変数ｆが変数ｅよりも大きい場合（ステップＳ１１０４、Ｙｅｓ）、デッドロック検証手段２３０は、図３４で示すステップＳ１００２の処理である占有資源のチェックを開始する。一方、変数ｆが変数ｅ以下である場合、デッドロック検証手段２３０は、作業用追加循環リスト登録部２２０Ｅのｆ番目エントリの循環資源数を変数ｇにセットする。また、デッドロック検証手段２３０は、作業用追加循環リスト登録部２２０Ｅのｆ番目エントリの作業用追加循環リストへのポインタを変数ｐにセットする（ステップＳ１１０５）。また、デッドロック検証手段２３０は、変数ｈに１をセットするとともに、変数ｈに１加算した値を変数ｊにセットする（ステップＳ１１０６）。
【０１８９】
さらに、デッドロック検証手段２３０は、変数ｐが示す作業用追加循環リスト２２０Ｆのｈ番目エントリの占有資源種別と占有資源識別子を変数ａにセットする。また、デッドロック検証手段２３０は、変数ｐが示す作業用追加循環リスト２２０Ｆのｊ番目エントリの占有資源種別と占有資源識別子を変数ｂにセットする（ステップＳ１１０７）。
【０１９０】
続いて、デッドロック検証手段２３０は、作業用資源登録部２２０Ａに登録されている占有資源種別と占有資源識別子のうち、変数ａと一致しているエントリがあるか否かを確認する（ステップＳ１１０８）。
【０１９１】
作業用資源登録部２２０Ａに登録されている占有資源種別と占有資源識別子のうち、変数ａと一致しているエントリがある場合（ステップＳ１１０８、Ｙｅｓ）、デッドロック検証手段２３０は、変数ａと一致しているエントリの内側ロックリストポインタを変数ｑにセットする（ステップＳ１１０９）。一方、作業用資源登録部２２０Ａに登録されている占有資源種別と占有資源識別子のうち、変数ａと一致しているエントリがない場合（ステップＳ１１０８、Ｎｏ）、デッドロック検証手段２３０は、資源登録部６１Ａに登録されている占有資源種別と占有資源識別子のうち、変数ａと一致しているエントリの内側ロックリストポインタを変数ｑにセットする（ステップＳ１１１０）。
【０１９２】
ステップＳ１１０９、又は、ステップＳ１１１０の処理の後、デッドロック検証手段２３０は、変数ｑが示す内側ロックリストに登録されている占有資源種別と占有資源識別子のうち、変数ｂと一致するエントリの循環フラブがオンであるか否かを確認する（ステップＳ１１１１）。
【０１９３】
変数ｂと一致するエントリの循環フラブがオンである場合（ステップＳ１１１１、Ｙｅｓ）、デッドロック検証手段２３０は、変数ｂと一致するエントリの循環対応表ポインタが示す循環情報対応表６１Ｄの先頭パターンのパターン番号とエントリ番号取得する（ステップＳ１１１２）。また、デッドロック検証手段２３０は、取得したパターン番号の循環リスト６２Ｂ中の取得したエントリ番号のエントリに格納されているスタック対応表ポインタを取得する（ステップＳ１１１３）。また、デッドロック検証手段２３０は、取得したスタック対応表ポインタを、変数ｐが示す作業用追加循環リスト２２０Ｆのｈ番目エントリのスタック対応表ポインタにセットする（ステップＳ１１１４）。その後、デッドロック検証手段２３０は、図３６で示すステップＳ１１２３の処理に進む。
【０１９４】
一方、変数ｂと一致するエントリの循環フラブがオンでない場合（ステップＳ１１１１、Ｎｏ）、デッドロック検証手段２３０は、未使用の作業用追加スタック対応表２３０Ａを確保して初期化（０クリア）する（ステップＳ１１１５）。次に、デッドロック検証手段２３０は、作業用追加スタック対応表２３０Ａのアドレスを、作業用追加循環リスト２２０Ｆのｈ番目エントリのスタック対応表ポインタにセットする（ステップＳ１１１６）。また、デッドロック検証手段２３０は、変数ｋに１をセットする（ステップＳ１１１７）。
【０１９５】
図３６を参照すると、図３５で示すステップＳ１１１７の処理の後、デッドロック検証手段２３０は、変数ｋがスタック登録部６３Ａの登録パターン数よりも大きいか否か確認する（ステップＳ１１１８）。変数ｋがスタック登録部６３Ａの登録パターン数よりも大きい場合（ステップＳ１１１８、Ｙｅｓ）、デッドロック検証手段２３０は、ステップＳ１１２３の処理に進む。一方、変数ｋがスタック登録部６３Ａの登録パターン数以下である場合（ステップＳ１１１８、Ｎｏ）、デッドロック検証手段２３０は、ｋ番目のスタック情報（スタック情報部６３Ｂ）の占有資源種別と占有資源識別子に変数ａが登録されており、かつ、変数ａより下のエントリに変数ｂが登録されているか否かを確認する（ステップＳ１１１９）。
【０１９６】
ｋ番目のスタック情報（スタック情報部６３Ｂ）の占有資源種別と占有資源識別子に変数ａが登録されており、かつ、変数ａより下のエントリに変数ｂが登録されている場合（ステップＳ１１１９、Ｙｅｓ）、デッドロック検証手段２３０は、作業用追加スタック対応表２３０Ａに、スタック番号ｋ、および、変数ａが登録されているエントリ番号を追加する（ステップＳ１１２０）。そして、デッドロック検証手段２３０は、作業用追加スタック対応表２３０Ａのパターン数を１加算する（ステップＳ１１２１）。
【０１９７】
ｋ番目のスタック情報（スタック情報部６３Ｂ）の占有資源種別と占有資源識別子に変数ａが登録されていない場合や、変数ａより下のエントリに変数ｂが登録されていない場合（ステップＳ１１１９、Ｎｏ）、又は、ステップＳ１１２１の処理の後、デッドロック検証手段２３０は、変数ｋを１加算する。その後、デッドロック検証手段２３０は、ステップＳ１１１８の処理に進む。
【０１９８】
図３５で示すステップＳ１１１４の処理の後、又は、ステップＳ１１１８で確認する、変数ｋがスタック登録部６３Ａの登録パターン数よりも大きい場合、デッドロック検証手段２３０は、変数ｈが変数ｇよりも大きいか否か確認する（ステップＳ１１２３）。
【０１９９】
変数ｈが変数ｇ以下である場合（ステップＳ１１２３、Ｎｏ）、デッドロック検証手段２３０は、変数ｈを１加算する（ステップＳ１１２４）。続いて、デッドロック検証手段２３０は、変数ｊが変数ｇ以上であるか否かを確認する（ステップＳ１１２５）。変数ｊが変数ｇよりも小さい場合（ステップＳ１１２５、Ｎｏ）、デッドロック検証手段２３０は、変数ｊを１加算する（ステップＳ１１２６）。一方、変数ｊが変数ｇ以上である場合（ステップＳ１１２５、Ｙｅｓ）、デッドロック検証手段２３０は、変数ｊに１をセットする（ステップＳ１１２７）。ステップＳ１１２６、又は、ステップＳ１１２７の処理の後、デッドロック検証手段２３０は、デッドロック検証手段２３０は、ステップｓ１１０７の処理へ進む。
【０２００】
一方、変数ｈが変数ｇよりも大きい場合（ステップＳ１１２３、Ｙｅｓ）、デッドロック検証手段２３０は、変数ｆを１加算する（ステップＳ１１２８）。その後、デッドロック検証手段２３０は、ステップＳ１１０４の処理に進む。
【０２０１】
続いて、図３７を参照して、図３４で示すステップＳ１００２の処理の詳細な流れの一例について説明する。
【０２０２】
図３７を参照すると、デッドロック検証手段２３０は、作業用占有資源チェックリスト２３０Ｂ、作業用プロセス番号チェックリスト２３０Ｃ、及び、作業用プロセス排他番号チェックリスト２３０Ｄの領域を確保し、初期化（０クリア）する（ステップＳ１２０１）。
【０２０３】
続いて、デッドロック検証手段２３０は、グローバル変数ｓｗ＿ｄｅａｄｌｏｃｋをオフにセットする（ステップＳ１２０２）。また、デッドロック検証手段２３０は、作業用循環情報登録表２２０Ｄのエントリ数を変数ｅにセットする（ステップＳ１２０３）。また、デッドロック検証手段２３０は、変数ｆに１をセットする（ステップＳ１２０４）。
【０２０４】
デッドロック検証手段２３０は、変数ｆが変数ｅよりも大きいか否かを確認する（ステップＳ１２０５）。
【０２０５】
変数ｆが変数ｅ以下である場合（ステップＳ１２０５、Ｎｏ）、デッドロック検証手段２３０は、作業用循環情報登録表２２０Ｄのｆ番目のエントリの循環情報対応表ポインタを変数ｐにセットする（ステップＳ１２０６）。また、デッドロック検証手段２３０は、変数ｐが示す循環情報対応表６１Ｄのパターン数を変数ｇにセットする（ステップＳ１２０７）。また、デッドロック検証手段２３０は、変数ｈに１をセットする（ステップＳ１２０８）。
【０２０６】
さらに、デッドロック検証手段２３０は、変数ｐが示す循環情報対応表６１Ｄのｈ番目エントリのパターン番号を変数ｒにセットする（ステップＳ１２０９）。そして、デッドロック検証手段２３０は、変数ｐが示す循環情報対応表６１Ｄのｈ番目エントリのエントリ番号をグローバル変数ｇｅにセットする。また、デッドロック検証手段２３０は、循環登録部６２Ａのパターン番号ｒの循環リストへのポインタをグローバル変数ｇｐにセットする。また、デッドロック検証手段２３０は、循環登録部６２Ａのパターン番号ｒの循環資源数をグローバル変数ｇｎにセットする（ステップＳ１２１０）。
【０２０７】
その後、デッドロック検証手段２３０は、資源チェックルーチンを呼び出す（ステップＳ１２１１）。なお、グローバル変数は、呼び出される資源チェックルーチンに引き継がれるものとする。
【０２０８】
ステップＳ１２１１の処理の後、デッドロック検証手段２３０は、変数ｈを１加算する（ステップＳ１２１２）。そして、デッドロック検証手段２３０は、変数ｈが変数ｇよりも大きいか否かを確認する（ステップＳ１２１３）。
【０２０９】
変数ｈが変数ｇよりも大きい場合（ステップＳ１２１３、Ｙｅｓ）、デッドロック検証手段２３０は、変数ｆを１加算する（ステップＳ１２１４）。その後、デッドロック検証手段２３０は、ステップＳ１２０５の処理に進む。一方、変数ｈが変数ｇ以下である場合（ステップＳ１２１３、Ｎｏ）、デッドロック検証手段２３０は、ステップＳ１２０９の処理に進む。
【０２１０】
ステップＳ１２０５での確認の結果、変数ｆが変数ｅよりも大きい場合（ステップＳ１２０５、Ｙｅｓ）、デッドロック検証手段２３０は、変数ｓｗ＿ｎｅｗがオンであるか否かを確認する（ステップＳ１２１５）。
【０２１１】
変数ｓｗ＿ｎｅｗがオンである場合（ステップＳ１２１５、Ｙｅｓ）、デッドロック検証手段２３０は、作業用追加循環リスト登録部２２０Ｅの登録パターン数を変数ｅにセットする（ステップＳ１２１６）。また、デッドロック検証手段２３０は、変数ｆに１をセットする（ステップＳ１２１７）。
【０２１２】
そして、デッドロック検証手段２３０は、変数ｆが変数ｅよりも大きいか否かを確認する（ステップＳ１２１８）。変数ｆが変数ｅ以下である場合（ステップＳ１２１８、Ｎｏ）、デッドロック検証手段２３０は、グローバル変数ｇｅに１をセットする。また、デッドロック検証手段２３０は、作業用追加循環リスト登録部２２０Ｅのｆ番目エントリの循環情報対応表ポインタをグローバル変数ｇｐにセットする。また、デッドロック検証手段２３０は、作業用追加循環リスト登録部２２０Ｅのｆ番目エントリの循環資源数をグローバル変数ｇｎにセットする（ステップＳ１２１９）。その後、デッドロック検証手段２３０は、資源チェックルーチンを呼び出す（ステップＳ１２２０）。なお、グローバル変数は、呼び出される資源チェックルーチンに引き継がれるものとする。ステップＳ１２２０の処理の後、デッドロック検証手段２３０は、変数ｆを１加算する（ステップＳ１２２１）。その後、デッドロック検証手段２３０は、ステップＳ１２１６の処理に進む。
【０２１３】
ステップＳ１２１５での確認の結果、変数ｓｗ＿ｎｅｗがオンでない場合（ステップＳ１２１５、Ｎｏ）、又は、ステップＳ１２１８での確認の結果、変数ｆが変数ｅよりも大きい場合（ステップＳ１２１８、Ｙｅｓ）、デッドロック検証手段２３０は、グローバル変数ｓｗ＿ｄｅａｄｌｏｃｋａがオンであるか否かを確認する（ステップＳ１２２２）。グローバル変数ｓｗ＿ｄｅａｄｌｏｃｋａがオンである場合（ステップＳ１２２２、Ｙｅｓ）、デッドロック検証手段２３０は、占有情報受信手段２１０に制御を渡し処理を終了する。一方、グローバル変数ｓｗ＿ｄｅａｄｌｏｃｋａがオンでない場合（ステップＳ１２２２、Ｎｏ）、デッドロック検証手段２３０は、ロック情報登録手段２４０に制御を渡して処理を終了する。
【０２１４】
続いて、図３８乃至図３９を参照して、資源チェックルーチンを実行する際の詳細な流れの一例について説明する。
【０２１５】
図３８を参照すると、デッドロック検証手段２３０は、作業用占有資源チェックリスト２３０Ｂのエントリ数を変数ｓａｖｅ＿ｒｓｃにセットする。また、デッドロック検証手段２３０は、デッドロック検証手段２３０は、作業用プロセス番号チェックリスト２３０Ｃのエントリ数を変数ｓａｖｅ＿ｐｒｃにセットする。また、デッドロック検証手段２３０は、作業用プロセス排他番号チェックリスト２３０Ｄのエントリ数を変数ｓａｖｅ＿ｅｘｃにセットする（ステップＳ１３０１）。また、デッドロック検証手段２３０は、変数ｓａｖｅ＿ｐｒｃに１加算した値を、変数ｅにセットする（ステップＳ１３０２）。
【０２１６】
デッドロック検証手段２３０は、変数ｅがグローバル変数ｇｅと一致しているか否かを確認する（ステップＳ１３０３）。変数ｅがグローバル変数ｇｅと一致していない場合（ステップＳ１３０３、Ｎｏ）、デッドロック検証手段２３０は、グローバル変数ｇｐが示す循環リストのｅ番目のエントリのスタック対応表のポインタを変数ｓにセットする。また、デッドロック検証手段２３０は、変数ｓが示すスタック対応表のパターン数を変数ｆにセットする（ステップＳ１３０４）。一方、変数ｅがグローバル変数ｇｅと一致している場合（ステップＳ１３０３、Ｙｅｓ）、デッドロック検証手段２３０は、変数ｆに１をセットする（ステップＳ１３０５）。
【０２１７】
ステップＳ１３０４、又は、ステップＳ１３０５の処理の後、デッドロック検証手段２３０は、変数ｇに１をセットする（ステップＳ１３０６）。
【０２１８】
デッドロック検証手段２３０は、変数ｇが変数ｆよりも大きいか否か確認する（ステップＳ１３０７）。変数ｇが変数ｆよりも大きい場合（ステップＳ１３０７、Ｙｅｓ）、デッドロック検証手段２３０は、資源チェックルーチンの処理を終了する。一方、変数ｇが変数ｆ以下である場合（ステップＳ１３０７、Ｎｏ）、デッドロック検証手段２３０は、変数ｅがグローバル変数ｇｅと一致しているか否かを確認する（ステップＳ１３０８）。変数ｅがグローバル変数ｇｅと一致していない場合（ステップ１３０８、Ｎｏ）、デッドロック検証手段２３０は、変数ｓが示すスタック対応表のｇ番目のエントリのスタック番号を変数ｈにセットする。また、デッドロック検証手段２３０は、変数ｓが示すスタック対応表のｇ番目のエントリのエントリ番号を変数ｊにセットする（ステップＳ１３０９）。また、デッドロック検証手段２３０は、スタック登録部６３Ａのｈ番目エントリのスタック情報へのポインタを変数ｐにセットする（ステップＳ１３１０）。一方、変数ｅがグローバル変数ｇｅと一致している場合（ステップ１３０８、Ｙｅｓ）、デッドロック検証手段２３０は、スタック情報４４のアドレスを変数ｐにセットする（ステップＳ１３１１）。また、デッドロック検証手段２３０は、グローバル変数ｇｐが示す循環情報対応表のｅ番目のエントリの占有資源種別と占有資源識別子を変数ａにセットする（ステップＳ１３１２）。また、デッドロック検証手段２３０は、スタック情報４４に登録されている占有資源種別と占有資源識別子のうち、変数ａと一致するエントリのエントリ番号を変数ｊにセットする（ステップＳ１３１３）。
【０２１９】
ステップＳ１３１０、又は、ステップＳ１３１３の処理の後、デッドロック検証手段２３０は、変数ｑに１をセットする（ステップＳ１３１４）。そして、デッドロック検証手段２３０は、変数ｑが変数ｊ以上であるか否かを確認する（ステップＳ１３１５）。
【０２２０】
変数ｑが変数よりも小さい場合（ステップＳ１３１５、Ｎｏ）、デッドロック検証手段２３０は、変数ｐが示すスタック部のｑ番目エントリの占有資源種別と占有資源識別子を変数ｃｈｋ＿ｓにセットする（ステップＳ１３１６）。そして、デッドロック検証手段２３０は、作業用占有資源チェックリスト２３０Ｂに、変数ｃｈｋ＿ｓと同じ占有資源種別と占有資源識別子が既に登録されているか否かを確認する（ステップＳ１３１７）。
【０２２１】
変数ｃｈｋ＿ｓと同じ占有資源種別と占有資源識別子が既に登録されている場合（ステップＳ１３１７、Ｙｅｓ）、デッドロック検証手段２３０は、図３９で示すステップＳ１３３６の処理に進む。一方、変数ｃｈｋ＿ｓと同じ占有資源種別と占有資源識別子が登録されていない場合（ステップＳ１３１７、Ｎｏ）、デッドロック検証手段２３０は、変数ｃｈｋ＿ｓを作業用占有資源チェックリスト２３０Ｂに追加する（ステップＳ１３１８）。また、デッドロック検証手段２３０は、作業用占有資源チェックリスト２３０Ｂのエントリ数を１加算する（ステップＳ１３１９）。その後、デッドロック検証手段２３０は、変数ｑを１加算する（ステップＳ１３２０）。そして、デッドロック検証手段２３０は、ステップＳ１３１５の処理に進む。
【０２２２】
ステップＳ１３１５の処理において、変数ｑが変数ｊ以上である場合（ステップＳ１３１５、Ｙｅｓ）、デッドロック検証手段２３０は、図３９で示すステップＳ１３２１の処理に進む。つまり、デッドロック検証手段２３０は、変数ｐが示すスタック部６３Ｂまたはスタック情報４４のプロセス番号を、変数ｃｈｋ＿ｐにセットする（ステップＳ１３２１）。
【０２２３】
続いて、デッドロック検証手段２３０は、作業用プロセス番号チェックリスト２３０Ｃに変数ｃｈｋ＿ｐと同じプロセス番号が既に登録されているか否かを確認する（ステップＳ１３２２）。
【０２２４】
変数ｃｈｋ＿ｐと同じプロセス番号が既に登録されている場合（ステップＳ１３２２、Ｙｅｓ）、デッドロック検証手段２３０は、ステップＳ１３３６の処理に進む。一方、変数ｃｈｋ＿ｐと同じプロセス番号が登録されていない場合（ステップＳ１３２２、Ｎｏ）、デッドロック検証手段２３０は、変数ｃｈｋ＿ｐを作業用プロセス番号チェックリスト２３０Ｃに追加する（ステップＳ１３２３）。また、デッドロック検証手段２３０は、作業用プロセス番号チェックリスト２３０Ｃのエントリ数を１加算する（ステップＳ１３２４）。更に、デッドロック検証手段２３０は、変数ｑに１をセットする。また、デッドロック検証手段２３０は、変数ｃｈｋ＿ｐのプロセス排他情報部５２の排他プロセス数を変数ｒにセットする（ステップＳ１３２５）。
【０２２５】
デッドロック検証手段２３０は、変数ｑが変数ｒよりも大きいか否かを確認する（ステップＳ１３２６）。変数ｑが変数ｒ以下である場合（ステップＳ１３２６、Ｎｏ）、デッドロック検証手段２３０は、変数ｃｈｋ＿ｐのプロセス排他情報部５２のｑ番目エントリの排他番号を、変数ｃｈｋ＿ｅにセットする（ステップＳ１３２７）。
【０２２６】
続いて、デッドロック検証手段２３０は、作業用プロセス排他番号チェックリスト２３０Ｄに変数ｃｈｋ＿ｅと同じ排他番号が既に登録されているか否かを確認する（ステップＳ１３２８）。
【０２２７】
変数ｃｈｋ＿ｅと同じ排他番号が既に登録されている場合（ステップＳ１３２８、Ｙｅｓ）、デッドロック検証手段２３０は、ステップＳ１３３６の処理に進む。一方、変数ｃｈｋ＿ｅと同じ排他番号が登録されていない場合（ステップＳ１３２８、Ｎｏ）、デッドロック検証手段２３０は、変数ｃｈｋ＿ｅを作業用プロセス排他番号チェックリスト２３０Ｄに追加する（ステップＳ１３２９）。また、デッドロック検証手段２３０は、作業用プロセス排他番号チェックリスト２３０Ｄのエントリ数を１加算する（ステップＳ１３３０）。更に、デッドロック検証手段２３０は、変数ｑを１加算する（ステップＳ１３３１）。その後、デッドロック検証手段２３０は、ステップＳ１３２６の処理に進む。
【０２２８】
ステップＳ１３２６の処理において、変数ｑが変数ｒよりも大きい場合（ステップＳ１３２６、Ｙｅｓ）、デッドロック検証手段２３０は、ステップＳ１３３２の処理に進む。つまり、デッドロック検証手段２３０は、変数ｅがグローバル変数ｇｎ以上であるか否かを確認する（ステップＳ１３３２）。
【０２２９】
変数ｅがグローバル変数ｇｎより小さい場合（ステップＳ１３３２、Ｎｏ）、デッドロック検証手段２３０は、資源チェックルーチンを再帰呼出しする（ステップＳ１３３３）。なお、グローバル変数は、呼び出される資源チェックルーチンに引き継がれる。一方、変数ｅがグローバル変数ｇｎ以上である場合（ステップＳ１３３２、Ｙｅｓ）、デッドロック検証手段２３０は、グローバル変数ｓｗ＿ｄｅａｄｌｏｃｋをオンにセットする（ステップＳ１３３４）。そして、デッドロック検証手段２３０は、デッドロック検出メッセージを出力する（ステップＳ１３３５）。
【０２３０】
ステップＳ１３３３の処理の後、又は、ステップＳ１３３５の処理の後、デッドロック検証手段２３０は、作業用占有資源チェックリスト２３０Ｂのエントリ数に、変数ｓａｖｅ＿ｒｓｃの値をセットする。また、デッドロック検証手段２３０は、作業用プロセス番号チェックリスト２３０Ｃのエントリ数に、変数ｓａｖｅ＿ｐｒｃの値をセットする。また、デッドロック検証手段２３０は、作業用プロセス排他番号チェックリスト２３０Ｄのエントリ数に、変数ｓａｖｅ＿ｅｘｃの値をセットする（ステップＳ１３３６）。その後、デッドロック検証手段２３０は、変数ｇを１加算する（ステップＳ１３３７）。そして、デッドロック検証手段２３０は、ステップＳ１３０７の処理に進む。
【０２３１】
続いて、図４０、図４１を参照して、ロック情報登録手段２４０の動作の一例について説明する。
【０２３２】
図４０を参照すると、ロック情報登録手段２４０は、スタック情報４４の占有資源確保数を変数ｎにセットする（ステップＳ１４０１）。また、ロック情報登録手段２４０は、変数ｘに１をセットする（ステップＳ１４０２）。
【０２３３】
更に、ロック情報登録手段２４０は、スタック情報４４のｘ番目のエントリの占有資源種別と占有資源識別子を変数ａにセットする（ステップＳ１４０３）。そして、ロック情報登録手段２４０は、資源登録部６１Ａに登録されている占有資源種別と占有資源識別子のうち、変数ａと一致するエントリがあるか否かを確認する（ステップＳ１４０４）。
【０２３４】
変数ａと一致するエントリがある場合（ステップＳ１４０４、Ｙｅｓ）、ロック情報登録手段２４０は、変数ａと一致するエントリの内側出現カウンタに、作業用資源登録部２２０Ａのｘ番目のエントリの内側出現カウンタをセットする（ステップＳ１４０５）。
【０２３５】
続いて、ロック情報登録手段２４０は、変数ａと一致するエントリの内側ロック数が、作業用資源登録部２２０Ａのｘ番目エントリの内側ロック数よりも小さいか否かを確認する（ステップＳ１４０６）。変数ａと一致するエントリの内側ロック数が、作業用資源登録部２２０Ａのｘ番目エントリの内側ロック数よりも小さい場合（ステップＳ１４０６、Ｙｅｓ）、ロック情報登録手段２４０は、作業用資源登録部２２０Ａのｘ番目のエントリが示す作業用内側ロックリスト２２０Ｂの内容を、変数ａと一致するエントリの内側ロックリスト部６１Ｂへコピーする（ステップＳ１４０７）。また、ロック情報登録手段２４０は、変数ａと一致するエントリの内側ロック数に、作業用資源登録部２２０Ａのｘ番目のエントリの内側ロック数をセットする（ステップＳ１４０８）。
【０２３６】
変数ａと一致するエントリの内側ロック数が、作業用資源登録部２２０Ａのｘ番目エントリの内側ロック数よりも小さくなかった場合（ステップＳ１４０６、Ｎｏ）、又は、ステップＳ１４０８の処理の後、ロック情報登録手段２４０は、ステップＳ１４０９の処理に進む。つまり、ロック情報登録手段２４０は、変数ａと一致するエントリの外側ロック数が、作業用資源登録部２２０Ａのｘ番目エントリの外側ロック数よりも小さいか否かを確認する（ステップＳ１４０９）。変数ａと一致するエントリの外側ロック数が、作業用資源登録部２２０Ａのｘ番目のエントリの外側ロック数よりも小さい場合（ステップＳ１４０９、Ｙｅｓ）、ロック情報登録手段２４０は、作業用資源登録部２２０Ａのｘ番目のエントリが示す作業用外側ロックリスト２２０Ｃの内容を、変数ａと一致するエントリの外側ロックリスト部６１Ｃへコピーする（ステップＳ１４１０）。また、ロック情報登録手段２４０は、変数ａと一致するエントリの外側ロック数に、作業用資源登録部２２０Ａのｘ番目のエントリの外側ロック数をセットする（ステップＳ１４１１）。変数ａと一致するエントリの外側ロック数が、作業用資源登録部２２０Ａのｘ番目エントリの外側ロック数よりも小さくなかった場合（ステップＳ１４０９、Ｎｏ）、又は、ステップＳ１４１１の処理の後、ロック情報登録手段２４０は、ステップＳ１４１５の処理に進む。
【０２３７】
ステップＳ１４０１の処理において、資源登録部６１Ａに登録されている占有資源種別と占有資源識別子のうち、変数ａと一致するエントリがない場合（ステップＳ１４０４、Ｎｏ）、ロック情報登録手段２４０は、ステップＳ１４１２の処理に進む。つまり、ロック情報登録手段２４０は、資源登録部６１Ａの登録資源数に１加算した値を変数ｆにセットする（ステップＳ１４１２）。また、ロック情報登録手段２４０は、作業用資源登録部２２０Ａのｘ番目エントリの内容（占有資源種別〜外側ロックリストポインタまでの内容）を、資源登録部６１Ａのｆ番目のエントリへコピーする（ステップＳ１４１３）。また、ロック情報登録手段２４０は、資源登録部６１Ａの登録資源数に、変数ｆの値をセットする（ステップＳ１４１４）。
【０２３８】
ステップＳ１４０９がＮｏであった場合、又は、ステップＳ１４１１の処理の後、又は、ステップＳ１４１４の処理の後、ロック情報登録手段２４０は、変数ｘを１加算する（ステップＳ１４１５）。
【０２３９】
続いて、ロック情報登録手段２４０は、変数ｘが変数ｎよりも大きいか否か確認する（ステップＳ１４１６）。変数ｘが変数ｎ以下である場合（ステップＳ１４１６、Ｎｏ）、ロック情報登録手段２４０は、ステップＳ１４０３の処理に進む。一方、変数ｘが変数ｎよりも大きい場合（ステップＳ１４１６、Ｙｅｓ）、ロック情報登録手段２４０は、図４１で示すステップＳ１４１７の処理に進む。つまり、ロック情報登録手段２４０は、変数ｓｗ＿ｎｅｗがオンであるか否かを確認する（ステップＳ１４１７）。
【０２４０】
変数ｓｗ＿ｎｅｗがオンである場合（ステップＳ１４１７、Ｙｅｓ）、ロック情報登録手段２４０は、作業用追加循環リスト登録部２２０Ｅの登録パターン数を変数ｅにセットする（ステップＳ１４１８）。また、ロック情報登録手段２４０は、変数ｆに１をセットする（ステップＳ１４１９）。
【０２４１】
ロック情報登録手段２４０は、変数ｆが変数ｅよりも大きいか否かを確認する（ステップＳ１４２０）。変数ｆが変数ｅ以下である場合（ステップＳ１４２０、Ｎｏ）、ロック情報登録手段２４０は、作業用追加循環リスト登録部２２０Ｅのｆ番目のエントリの作業用追加循環リスト２２０Ｆへのポインタを変数ｐにセットする（ステップＳ１４２１）。そして、ロック情報登録手段２４０は、変数ｐが示す作業用追加循環リスト２２０Ｆが、ｆ番目のエントリより前の作業用追加循環リスト２２０Ｆのいずれかと循環が一致しているか否かを確認する（ステップＳ１４２２）。
【０２４２】
循環が一致していない場合（ステップＳ１４２２、Ｎｏ）、ロック情報登録手段２４０は、循環登録部６２Ａの登録パターン数に１加算した値を変数ｑにセットする（ステップＳ１４２３）。また、ロック情報登録手段２４０は、作業用追加循環リスト登録部２２０Ｅのｆ番目のエントリの内容を循環登録部６２Ａのｑ番目のエントリへコピーする（ステップＳ１４２４）。これにより、作業用追加循環リスト登録部２２０Ｅのｆ番目のエントリが示す作業用追加循環リスト２２０Ｆおよび当該作業用追加循環リスト２２０Ｆが示す作業用追加スタック対応表２３０Ａは、循環リスト６２Ｂおよびスタック対応表６２Ｃとして登録されることになる。
【０２４３】
また、ロック情報登録手段２４０は、循環登録部６２Ａの登録パターン数に、変数ｑの値をセットする（ステップＳ１４２５）。また、ロック情報登録手段２４０は、追加した循環リスト６２Ｂに従い、内側ロックリスト部６１Ｂおよび外側ロックリスト部６１Ｃの循環フラグをオンにセットする（ステップＳ１４２６）。そして、ロック情報登録手段２４０は、循環フラグをオンにした内側ロックリスト部６１Ｂおよび外側ロックリスト部６１Ｃからリンクされる循環情報対応表６１Ｄにパターン番号（変数ｑ）およびエントリ番号（対応する循環リスト６２Ｂのエントリ番号）を追加する（ステップＳ１４２７）。
【０２４４】
変数ｐが示す作業用追加循環リスト２２０Ｆが、ｆ番目のエントリより前の作業用追加循環リスト２２０Ｆのいずれかと循環が一致している場合（ステップＳ１４２２、Ｙｅｓ）、又は、ステップＳ１４２７の処理の後、ロック情報登録手段２４０は、ステップＳ１４２８に進む。なお、例えば、変数ｐが示す作業用追加循環リスト２２０Ｆの占有資源がＳ１、Ｓ２、Ｓ３の順番のとき、ｆ番目のエントリより前の作業用追加循環リスト２２０Ｆの占有資源にＳ２、Ｓ３、Ｓ１の順番がある場合などにおいて、循環が一致していると判断する。
【０２４５】
ステップＳ１４２８においては、ロック情報登録手段２４０は、変数ｆを１加算する（ステップＳ１４２８）。その後、ロック情報登録手段２４０は、ステップＳ１４２０の処理に進む。
【０２４６】
ステップＳ１４２０の処理において、変数ｆが変数ｅよりも大きい場合（ステップＳ１４２０、Ｙｅｓ）、ロック情報登録手段２４０は、ステップＳ１４２９の処理に進む。また、ステップＳ１４１７の処理において、変数ｓｗ＿ｎｅｗがオンになっていない場合（ステップＳ１４１７、Ｎｏ）、ロック情報登録手段２４０は、ステップＳ１４２９の処理に進む。
【０２４７】
ステップＳ１４２９の処理において、ロック情報登録手段２４０は、スタック登録部６３Ａの登録数に１加算した値を変数ｑにセットする（ステップＳ１４２９）。また、ロック情報登録手段２４０は、スタック情報４４の内容を未使用のスタック部６３Ｂへコピーする（ステップＳ１４３０）。更に、ロック情報登録手段２４０は、スタック登録部６３Ａのｑ番目のエントリに、コピーしたスタック部６３Ｂのアドレスをセットする（ステップＳ１４３１）。また、ロック情報登録手段２４０は、スタック登録部６３Ａの登録数に、変数ｑの値をセットする（ステップＳ１４３２）。そして、ロック情報登録手段２４０は、スタック情報４４の２つの占有資源の取得順序の全組み合わせのうち、内側ロックリストおよび外側ロックリストの循環フラグがオンになっている取得順序について、当該循環情報対応表６１Ｄからリンクされる循環リスト６２Ｂからリンクされるスタック対応表６２Ｃに、追加したスタック情報のスタック番号と外側の占有資源が登録されているスタック情報中のエントリ番号を追加する（ステップＳ１４３３）。その後、ロック情報登録手段２４０は、処理を終了する。
【０２４８】
以上が、情報処理装置１の動作の一例である。
【０２４９】
続いて、図４７乃至図５３を参照して、実際の動作時のロック情報格納領域６０の遷移と、デッドロック検証の一例について説明する。
【０２５０】
まず、図４７で示す［１］受信スタック情報（スタック情報４４）を受信したとする。つまり、占有資源確保数３、プロセス番号２５、エントリ１「０１」「０ＤＤＦ００１４」、エントリ２「０１」「０ＤＥ００３４８」、エントリ３「０１」「０ＤＥ００Ａ１４」のスタック情報４４を受信したとする。
【０２５１】
この場合、受信したスタック情報４４に格納されている３個の占有資源が資源登録部６１Ａに登録される。また、スタック情報４４のエントリ１、エントリ２、エントリ３の占有資源の内側ロックとして、それぞれ２個、１個、０個の占有資源が内側ロックリスト部６１Ｂに登録される。また、スタック情報４４のエントリ１、エントリ２、エントリ３の占有資源の外側ロックとして、それぞれ０個、１個、２個の占有資源が外側ロックリスト部６１Ｃに登録される。また、受信したスタック情報４４がスタック登録部６３Ａ及びスタック部６３Ｂに登録される。
【０２５２】
このような状態において、更に、［２］受信スタック情報（スタック情報４４）を受信した場合について、図４８で示す。つまり、新たに、占有資源確保数２、プロセス番号１０、エントリ１「０１」「０ＤＥ００Ａ１４」、エントリ２「０１」「０ＤＥ２０８Ａ８」のスタック情報４４を受信したとする。なお、図４８では、［２］受信スタック情報で更新される値を下線部で示している。
【０２５３】
この場合、図４８を参照すると、スタック情報４４のエントリ２の占有資源が、資源登録部６１Ａに追加されることになる。また、スタック情報４４のエントリ１に対応する（つまり、資源登録部６１Ａのエントリ３に対応する）内側ロックリスト部６１Ｂが追加されることになる。また、スタック情報４４のエントリ２に対応する（つまり、資源登録部６１Ａのエントリ４に対応する）外側ロックリスト部６１Ｃが登録されることになる。更に、受信したスタック情報４４がスタック登録部６３Ａおよびスタック部６３Ｂに追加される。
【０２５４】
このような状態において、図４９で示すように、更に、［３］受信スタック情報（スタック情報４４）を受信したとする。
【０２５５】
この場合、受信した新たなスタック情報４４に基づいて、同様に、内側ロックリスト部６１Ｂおよび、外側ロックリスト部６１Ｃに占有資源が追加されることになる。
【０２５６】
ここで、図４９の資源登録部６１Ａのエントリ２及び対応する内側ロックリスト部６１Ｂ及び外側ロックリスト部６１Ｃを参照する。すると、「０ＤＥ００３４８」を取得する前に「０ＤＤＦ００１４」又は「０ＤＥ２０８Ａ８」を取得しており、「０ＤＥ００３４８」の取得後に「０ＤＥ００Ａ１４」を取得していることが分かる。同様に、資源登録部６１Ａのエントリ３によると、「０ＤＥ００Ａ１４」の取得前に「０ＤＤＦ００１４」又は「０ＤＥ００３４８」を取得しており、「０ＤＥ００Ａ１４」の取得後に「０ＤＥ２０８Ａ８」を取得していることが分かる。同様に、資源登録部６１Ａのエントリ４によると、「０ＤＥ２０８Ａ８」の取得前に「０ＤＥ００Ａ１４」又は「０ＤＤＦ００１４」を取得しており、「０ＤＥ２０８Ａ８」の取得後に「０ＤＥ００３４８」を取得していることが分かる。以上からすると、「０ＤＥ００３４８」の取得後に「０ＤＥ００Ａ１４」が取得され、「０ＤＥ００Ａ１４」の取得後に「０ＤＥ２０８Ａ８」が取得され、「０ＤＥ２０８Ａ８」の取得後に「０ＤＥ００３４８」が取得されることが分かる。つまり、資源登録部６１Ａのエントリ２〜４の占有資源３０の取得順序が循環していることになる。そのため、図４９で示す場合、図５０で示すように、循環情報が登録される。
【０２５７】
図５０を参照すると、循環登録部６２Ａには、パターン数１、循環資源数３で登録されることになる（「０ＤＥ００３４８」、「０ＤＥ００Ａ１４」、「０ＤＥ２０８Ａ８」の順番で循環するため）。また、循環リスト６２Ｂによると、「０ＤＥ２０８Ａ８」、「０ＤＥ００３４８」の順番を含むスタック情報（スタック情報３）と循環リスト１中のエントリ１が紐付けられていることが分かる。同様に、「０ＤＥ００３４８」、「０ＤＥ００Ａ１４」の順番を含むスタック情報（スタック情報１）と循環リスト１中のエントリ２が紐付けられていることが分かる。同様に、「０ＤＥ００Ａ１４」、「０ＤＥ２０８Ａ８」の順番を含むスタック情報（スタック情報２）と循環リスト１中のエントリ３が紐付けられていることが分かる。
【０２５８】
図５０で示す場合、スタック部６３Ｂの各スタック情報を参照すると、スタック情報１とスタック情報３において、循環している占有資源３０の組み合わせよりも前に、同一の占有資源３０である「０ＤＤＦ００１４」が占有されている。そのため、図５０で示す場合、デッドロック検証手段２３０は、デッドロックは発生しないと判断することになる。
【０２５９】
また、上記場合において、更に、［４］受信スタック情報（スタック情報４４）を受信したとする。
【０２６０】
この場合、図５１で示すように、同一の取得順序（「０ＤＥ２０８Ａ８」から「０ＤＥ００３４８」の順番）を格納しているスタック対応表３に、新たなスタック情報を追加することになる。
【０２６１】
図５１で示す場合では、デッドロック検証手段２３０は、新たに追加された循環である、スタック情報１、スタック情報２、スタック情報４をチェックすることになる。図５１で示す場合、循環している占有資源３０の組み合わせよりも前に、同一の占有資源は取得していない。しかしながら、図５１のプロセス排他情報部５２を参照すると、スタック情報１のプロセス番号２５のプロセス排他情報部５２と、スタック情報４のプロセス番号２６のプロセス排他情報部５２に同一の排他番号が登録されている。そのため、デッドロック検証手段２３０は、デッドロックは発生しないと判断する。
【０２６２】
また、上記場合において、更に、[５]受信スタック情報（スタック情報４４）を受信したとする。
【０２６３】
この場合、図５２で示すように、スタック対応表６２Ｃが追加されることになる。そのため、デッドロック検証手段２３０は、新たに追加された循環である、２つのパターンについて、デッドロックが発生するか否か検証することになる。つまり、デッドロック検証手段２３０は、スタック情報５、スタック情報２、スタック情報３（パターン１）について検証するとともに、スタック情報５、スタック情報２、スタック情報４（パターン２）について検証することになる。
【０２６４】
図５３で示すように、パターン１の場合、循環している占有資源３０の組み合わせよりも前に、同一の占有資源３０である「０ＤＤＦ００１４」が占有されている。そのため、パターン１の場合、デッドロック検証手段２３０は、デッドロックは発生しないと判断する。一方で、パターン２の場合、循環している占有資源３０の組み合わせよりも前に、同一の占有資源は取得していない。また、図５３で示すように、プロセス番号は、それぞれ２８、１０、２６であり、全て異なっている。さらに、各プロセス排他情報部５２には、同一の排他番号は無い。このため、デッドロック検証手段２３０は、デッドロックが発生すると判断することになる。なお、図５２、図５３で示す場合、デッドロックが発生するパターンが存在することから、ロック情報格納領域６０は更新しないことになる。
【０２６５】
このように、本実施形態における情報処理装置１は、ロック循環チェック手段２２０とデッドロック検証手段２３０とを有している。このような構成により、情報処理装置１は、ロック循環チェック手段２２０が局所的にデッドロック発生の要件を満たす占有資源３０の組み合わせを検出した場合、デッドロック検証手段２３０により、大域的にデッドロックが発生するか否かを検証することが出来る。その結果、局所的にデッドロック発生の要件を満たす場合でも、大域的にはデッドロックが発生しない場合に、デッドロック発生の可能性があると判断することを防ぐことが可能となる。
【０２６６】
次に、図５４を参照して、第２の実施形態について説明する。第２の実施形態では、情報処理装置７の構成の概要について説明する。
【０２６７】
図５４を参照すると、本実施形態における情報処理装置７は、処理手段７１と監視手段７２とを有している。また、監視手段７２は、検出手段７３と検証手段７４とを有している。
【０２６８】
処理手段７１は、プロセスが使用する資源を占有して当該プロセスを実行する。また、処理手段７１は、プロセスが占有する資源を示す占有資源情報を監視手段７２に送信する。
【０２６９】
監視手段７２は、複数のプロセス実行時にプロセス同士が使用する資源が競合することによりデッドロックが発生するか否かを監視する。
【０２７０】
検出手段７３は、占有資源情報に基づいて、デッドロックを引き起こす可能性のある資源の組み合わせを検出する。また、検証手段７４は、検出手段７３がデッドロックを引き起こす可能性のある資源の組み合わせを検出した際に、当該デッドロックを引き起こす可能性のある資源の組み合わせによりデッドロックが生じるか否かを検証する。
【０２７１】
このように、本実施形態における情報処理装置７は、検出手段７３と検証手段７４とを有している。このような構成により、情報処理装置７は、検出手段７３がデッドロックを引き起こす可能性のある資源の組み合わせを検出した際に、検証手段７４により、当該資源の組み合わせによりデッドロックが生じるか否かを検証することが出来る。その結果、デッドロックを引き起こす可能性のある資源の組み合わせがあったとしても、デッドロックが生じない場合に、デッドロック発生の可能性があると判断することを防ぐことが可能となる。
【０２７２】
なお、上記情報処理装置７は、当該情報処理装置７に所定のプログラムが組み込まれることで実現できる。具体的に、本発明の他の形態であるプログラムは、情報処理装置に、プロセスが使用する資源を占有して当該プロセスを実行する処理手段と、複数のプロセス実行時に、プロセス同士の使用する資源が競合することによりデッドロックが発生するか否かを監視する監視手段と、を実現させ、処理手段は、プロセスが占有する資源を示す占有資源情報を監視手段に送信し、監視手段として、占有資源情報に基づいてデッドロックを引き起こす可能性のある資源の組み合わせを検出する検出手段と、検出手段がデッドロックを引き起こす可能性のある資源の組み合わせを検出した際に、当該デッドロックを引き起こす可能性のある資源の組み合わせによりデッドロックが生じるか否かを検証する検証手段と、を実現させるためのプログラムである。
【０２７３】
また、上述した情報処理装置７が作動することにより実行される情報処理方法は、プロセスが使用する資源を占有して当該プロセスを実行し、プロセスが占有する資源を示す占有資源情報を送信し、複数のプロセス実行時に、プロセス同士の使用する資源が競合することによりデッドロックが発生するか否かを監視し、監視は、占有資源情報に基づいてデッドロックを引き起こす可能性のある資源の組み合わせを検出し、デッドロックを引き起こす可能性のある資源の組み合わせを検出した際に、当該デッドロックを引き起こす可能性のある資源の組み合わせによりデッドロックが生じるか否かを検証する、という方法である。
【０２７４】
上述した構成を有する、プログラム、又は、情報処理方法、の発明であっても、上記情報処理装置７と同様の作用を有するために、上述した本発明の目的を達成することが出来る。
【０２７５】
＜付記＞
上記実施形態の一部又は全部は、以下の付記のようにも記載されうる。以下、本発明における情報処理装置などの概略を説明する。但し、本発明は、以下の構成に限定されない。
【０２７６】
（付記１）
プロセスが使用する資源を占有して当該プロセスを実行する処理手段と、
複数のプロセス実行時にプロセス同士が使用する資源が競合することによりデッドロックが発生するか否かを監視する監視手段と、を有し、
前記処理手段は、プロセスが占有する資源を示す占有資源情報を前記監視手段に送信するよう構成され、
前記監視手段は、前記占有資源情報に基づいてデッドロックを引き起こす可能性のある複数の前記占有資源情報内の資源の組み合わせを検出する検出手段と、前記検出手段がデッドロックを引き起こす可能性のある資源の組み合わせを検出した際に、当該デッドロックを引き起こす可能性のある資源の組み合わせによりデッドロックが生じるか否かを検証する検証手段と、を有する
情報処理装置。
【０２７７】
（付記２）
付記１に記載の情報処理装置であって、
前記検証手段は、前記占有資源情報を蓄積した蓄積情報を参照し、当該蓄積情報に基づいてデッドロックが生じるか否かを検証する
情報処理装置。
【０２７８】
（付記３）
付記２に記載の情報処理装置であって、
前記蓄積情報には、プロセスが資源を占有してから解放するまでの資源の取得順序を示す資源順序情報が含まれており、
前記検証手段は、前記蓄積情報に含まれる、デッドロックを引き起こす可能性のある資源の組み合わせを含む前記資源順序情報に基づいて、デッドロックが生じるか否かを検証する
情報処理装置。
【０２７９】
（付記４）
付記３に記載の情報処理装置であって、
前記検証手段は、前記資源順序情報のうち、デッドロックを引き起こす可能性のある資源の組み合わせより前に占有されていた資源に基づいて、デッドロックが生じるか否かを検証する
情報処理装置。
【０２８０】
（付記５）
付記３又は４に記載の情報処理装置であって、
前記検証手段は、デッドロックを引き起こす可能性のある資源の組み合わせを含む複数の前記資源順序情報の中に、当該デッドロックを引き起こす可能性のある組み合わせより前に同一の資源を占有する前記資源順序情報が含まれている場合、デッドロックは生じないと判断する
情報処理装置。
【０２８１】
（付記６）
付記１乃至５のいずれかに記載の情報処理装置であって、
前記検証手段は、プロセス間の関係を示すプロセス関係情報を取得し、当該プロセス関係情報に基づいて、デッドロックを引き起こす組み合わせによりデッドロックが生じるか否かを検証する
情報処理装置。
【０２８２】
（付記７）
付記６に記載の情報処理装置であって、
前記プロセス関係情報は、排他的に動作するプロセスを示すプロセス排他情報を含んでおり、
前記検証手段は、前記プロセス排他情報に基づいて、デッドロックを引き起こす可能性のある資源の組み合わせによりデッドロックが生じるか否かを検証する
情報処理装置。
【０２８３】
（付記８）
付記１乃至７のいずれかに記載の情報処理装置であって、
前記蓄積情報には、プロセスが資源を占有してから解放するまでの間で最後に占有した資源の占有回数を資源ごとに示す回数情報が含まれており、
前記検出手段は、前記回数情報を使用して、デッドロックを引き起こす可能性のある資源の組み合わせを検出する
情報処理装置。
【０２８４】
（付記９）
プロセスが使用する資源を占有して当該プロセスを実行し、
プロセスが占有する資源を示す占有資源情報を送信し、
複数のプロセス実行時に、プロセス同士の使用する資源が競合することによりデッドロックが発生するか否かを監視し、
前記監視は、前記占有資源情報に基づいてデッドロックを引き起こす可能性のある複数の前記占有資源情報内の資源の組み合わせを検出し、デッドロックを引き起こす可能性のある資源の組み合わせを検出した際に、当該デッドロックを引き起こす可能性のある資源の組み合わせによりデッドロックが生じるか否かを検証する
情報処理方法。
【０２８５】
（付記１０）
情報処理装置に、
プロセスが使用する資源を占有して当該プロセスを実行する処理手段と、
複数のプロセス実行時に、プロセス同士の使用する資源が競合することによりデッドロックが発生するか否かを監視する監視手段と、を実現させ、
前記処理手段は、プロセスが占有する資源を示す占有資源情報を前記監視手段に送信し、
前記監視手段として、前記占有資源情報に基づいてデッドロックを引き起こす可能性のある複数の前記占有資源情報内の資源の組み合わせを検出する検出手段と、前記検出手段がデッドロックを引き起こす可能性のある資源の組み合わせを検出した際に、当該デッドロックを引き起こす可能性のある資源の組み合わせによりデッドロックが生じるか否かを検証する検証手段と、を実現させるためのプログラム。
【０２８６】
なお、上記各実施形態及び付記において記載したプログラムは、記憶装置に記憶されていたり、コンピュータが読み取り可能な記録媒体に記録されていたりする。例えば、記録媒体は、フレキシブルディスク、光ディスク、光磁気ディスク、及び、半導体メモリ等の可搬性を有する媒体である。
【０２８７】
以上、上記各実施形態を参照して本願発明を説明したが、本願発明は、上述した実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明の範囲内で当業者が理解しうる様々な変更をすることが出来る。
【符号の説明】
【０２８８】
１  情報処理装置
１０  処理プロセス
１１０  開始手段
１２０  占有資源取得手段
１３０  占有資源解放手段
１４０  プロセス起動手段
１５０  プロセス終了待合せ手段
１６０  終了手段
２０  監視プロセス
２１０  占有情報受信手段
２２０  ロック循環チェック手段
２２０Ａ  作業用資源登録部
２２０Ｂ  作業用内側ロックリスト
２２０Ｃ  作業用外側ロックリスト
２２０Ｄ  作業用循環情報登録表
２２０Ｅ  作業用追加循環リスト登録部
２２０Ｆ  作業用追加循環リスト
２２０Ｇ  作業用循環チェックリスト
２３０  デッドロック検証手段
２３０Ａ  作業用追加スタック対応表
２３０Ｂ  作業用占有資源チェックリスト
２３０Ｃ  作業用プロセス番号チェックリスト
２３０Ｄ  作業用プロセス排他番号チェックリスト
２４０  ロック情報登録手段
３０  占有資源
４０  占有情報スタック領域
４１  ヘッダ情報部
４２  スタック情報部
４３  送信履歴情報部
５０  プロセス情報格納領域
５１  終了待合せ情報部
５２  プロセス排他情報部
６０  ロック情報格納領域
６１  資源情報部
６１Ａ  資源登録部
６１Ｂ  内側ロックリスト部
６１Ｃ  外側ロックリスト部
６１Ｄ  循環情報対応表
６２  循環情報部
６２Ａ  循環情報部
６２Ｂ  循環リスト
６２Ｃ  スタック対応表
６３  スタック情報蓄積部
６３Ａ  スタック登録部
６３Ｂ  スタック部
７  情報処理装置
７１  処理手段
７２  監視手段
７３  検出手段
７４  検証手段
【図１】
0006805522.tif 000002
【図２】
0006805522.tif 000003
【図３】
0006805522.tif 000004
【図４】
0006805522.tif 000005
【図５】
0006805522.tif 000006
【図６】
0006805522.tif 000007
【図７】
0006805522.tif 000008
【図８】
0006805522.tif 000009
【図９】
0006805522.tif 000010
【図１０】
0006805522.tif 000011
【図１１】
0006805522.tif 000012
【図１２】
0006805522.tif 000013
【図１３】
0006805522.tif 000014
【図１４】
0006805522.tif 000015
【図１５】
0006805522.tif 000016
【図１６】
0006805522.tif 000017
【図１７】
0006805522.tif 000018
【図１８】
0006805522.tif 000019
【図１９】
0006805522.tif 000020
【図２０】
0006805522.tif 000021
【図２１】
0006805522.tif 000022
【図２２】
0006805522.tif 000023
【図２３】
0006805522.tif 000024
【図２４】
0006805522.tif 000025
【図２５】
0006805522.tif 000026
【図２６】
0006805522.tif 000027
【図２７】
0006805522.tif 000028
【図２８】
0006805522.tif 000029
【図２９】
0006805522.tif 000030
【図３０】
0006805522.tif 000031
【図３１】
0006805522.tif 000032
【図３２】
0006805522.tif 000033
【図３３】
0006805522.tif 000034
【図３４】
0006805522.tif 000035
【図３５】
0006805522.tif 000036
【図３６】
0006805522.tif 000037
【図３７】
0006805522.tif 000038
【図３８】
0006805522.tif 000039
【図３９】
0006805522.tif 000040
【図４０】
0006805522.tif 000041
【図４１】
0006805522.tif 000042
【図４２】
0006805522.tif 000043
【図４３】
0006805522.tif 000044
【図４４】
0006805522.tif 000045
【図４５】
0006805522.tif 000046
【図４６】
0006805522.tif 000047
【図４７】
0006805522.tif 000048
【図４８】
0006805522.tif 000049
【図４９】
0006805522.tif 000050
【図５０】
0006805522.tif 000051
【図５１】
0006805522.tif 000052
【図５２】
0006805522.tif 000053
【図５３】
0006805522.tif 000054
【図５４】
0006805522.tif 000055