(57)【要約】      （修正有）【課題】より多くの命令実行データを保存することができるデータ書き込み装置を提供する。【解決手段】ＲＡＭにおける仮想メモリ領域の空き領域７２は、書き込まれたデータを記憶する複数のフリーページ７２Ｓ、７２Ｓ+１、・・・７２Ｅ-１、７２Ｅを有する。プログラムの命令データが予め定められた順番３００に複数のフリーページ７２Ｓ、７２Ｓ+１、・・・に書き込まれる。プログラムの複数の命令の各々が実行される毎に、当該命令の実行状態を示す命令実行データが、予め定められた順番３００とは逆の順番４００に書き込まれる。命令実行データの書き込みが始められるフリーページは、データが最初に書き込まれるフリーページ７２Ｓよりも最も離れたフリーページ７２Ｅである。【選択図】図１９
2015076052.tif 000002
【特許請求の範囲】
【請求項１】
書き込まれたデータを記憶する複数の記憶領域を有する記憶部と、
前記記憶部の記憶領域にデータを書き込む第１の書き込み部と、
前記記憶部の複数の記憶領域の内、前記第１の書き込み部により書き込みがされないと予想される記憶領域に、複数の命令を含むプログラムの各命令の実行状態を示す命令実行データを書き込む第２の書き込み部と、
を備えたデータ書き込み装置。
【請求項２】
前記第１の書き込み部は、前記記憶部の複数の記憶領域に予め定められた順番にデータを書き込み、
前記第２の書き込む部は、前記各命令の実行状態を示す命令実行データを、前記記憶部の複数の記憶領域に前記順番とは逆の順番に書き込むと共に前記第１の書き込み部が最初に書き込む記憶領域よりも最も離れた記憶領域から書き込み始める
請求項１に記載のデータ書き込み装置。
【請求項３】
前記記憶部は、予め定められた数の特定の記憶領域を更に有し、
前記各命令が実行される毎に、前記命令実行データを、前記特定の記憶領域に書き込むと共に前記特定の記憶領域の全てに前記命令実行データを書き込んだ場合には、前記命令実行データが記憶された記憶領域に別の命令実行データを書き込む第３の書き込み部を更に備え、
前記第２の書き込み部は、前記命令実行データが記憶された記憶領域に別の命令実行データが書き込まれる前に、前記記憶領域に記憶された前記命令実行データを、前記予想される記憶領域に書き込む
請求項１又は請求項２に記載のデータ書き込み装置。
【請求項４】
前記第２の書き込み部は、プログラムの命令を実行可能であり、前記命令を実行する場合には、前記命令実行データを書き込むことを停止する請求項１〜請求項３の何れか１項に記載のデータ書き込み装置。
【請求項５】
前記第２の書き込み部は、前記記憶部の前記複数の記憶領域の全てに前記データ又は前記命令実行データが書き込まれた場合には、前記命令実行データを書き込むことを停止する請求項１〜請求項４の何れか１項に記載のデータ書き込み装置。
【請求項６】
コンピュータに、
書き込まれたデータを記憶する複数の記憶領域を有する記憶部の記憶領域にデータを書き込む第１の書き込みをし、
前記記憶部の複数の記憶領域の内、前記第１の書き込みにより書き込みがされないと予想される記憶領域に、複数の命令を含むプログラムの各命令の実行状態を示す命令実行データを書き込む第２の書き込みをする
ことを含む処理を実行させるデータ書き込みプログラム。
【請求項７】
コンピュータに、
書き込まれたデータを記憶する複数の記憶領域を有する記憶部の記憶領域にデータを書き込む第１の書き込みをし、
前記記憶部の複数の記憶領域の内、前記第１の書き込みにより書き込みがされないと予想される記憶領域に、複数の命令を含むプログラムの各命令の実行状態を示す命令実行データを書き込む第２の書き込みをする
ことを含む処理を実行させるデータ書き込み方法。
【発明の詳細な説明】
【技術分野】
【０００１】
開示の技術は、データ書き込み装置、データ書き込みプログラム、及びデータ書き込み方法に関する。
【背景技術】
【０００２】
従来、複数の命令を含むプログラムの各命令が実行されると、この実行によって生成されたデータ（命令実行データ）が、メモリの予め定められた位置にある固定サイズの調査用資料記憶領域に記憶されている。これは、システムが暴走（パニック）した場合等に、調査用資料記憶領域に記憶された上記命令実行データを２次記憶装置に記憶（クラッシュダンプ）し、どのような暴走が生じたのかを後に判断できるようにするためである。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開2001-290678号公報
【特許文献２】特開2006-72931号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、上記のように、調査用資料記憶領域は固定サイズとなっている。従って、複数の命令の各々が順次実行された場合、上記実行によって生成された命令実行データが、以前に記憶された命令実行データに上書きされてしまう。即ち、調査用資料記憶領域には、調査用資料記憶領域全てにデータを記憶するのに要する一定時間内のデータしか記憶されない。従って、一定時間より前に生じた命令実行データを得ることができない。
【０００５】
開示の技術は、１つの側面として、より多くの命令実行データを保存することができるようにすることが目的である。
【課題を解決するための手段】
【０００６】
記憶部は、書き込まれたデータを記憶する複数の記憶領域を有する。第１の書き込み部は、記憶部の記憶領域にデータを書き込む。第２の書き込み部は、記憶部の複数の記憶領域の内、第１の書き込み部により書き込みがされないと予想される記憶領域に、複数の命令を含むプログラムの各命令の実行状態を示す命令実行データを書き込む。
【発明の効果】
【０００７】
開示の技術は、１つの側面として、より多くの命令実行データを保存することができる、という効果を有する。
【図面の簡単な説明】
【０００８】
【図１】業務プログラム実行装置のブロック図である。
【図２】（Ａ）は、ＲＯＭ２２に記憶されたプログラムを示し、（Ｂ）は、２次記憶装置に記憶されたＯＳ及びトラブルの調査用資料の記憶領域を示す図である。
【図３】仮想メモリ領域２００の具体的内容を示す図である。
【図４】先頭終端ページ構造体対応テーブル６２を示す図である。
【図５】ページ構造体７１、管理構造体８４、空き領域７２の関係を示す図である。
【図６】ページ構造体７１の具体的内容を示す図である。
【図７】仮想メモリアドレスを管理する管理構造体８４の具体的内容を示す図である。
【図８】業務プログラム記憶領域対応テーブル７０を示す図である。
【図９】（Ａ）は、ＯＳの機能ブロック図であり、（Ｂ）は、ＯＳのプロセスを示す図であり、（Ｃ）は、業務プログラムの機能ブロック図であり、（Ｄ）は、業務プログラムのプロセスを示す図である。
【図１０】ＯＳがフリーページを利用する際に、フリーページを取得するフリーページ取得処理の一例を示すフローチャートである。
【図１１】ＯＳがフリーページを追加する処理の一例を示すフローチャートである。
【図１２】業務プログラム実行装置に電源が投入されたときにＯＳ１８Ａが仮想メモリ領域２００の内容を設定する初期設定処理の一例を示すフローチャートである。
【図１３】業務プログラムＡ４２が実行された時に記憶領域６８Ａ２に命令実行データが記憶される様子を示す図である。
【図１４】アイドル状態となった空ＣＰＵをＯＳが検知した時に、ＯＳが空ＣＰＵにアイドルスレッド処理を実行させる命令処理の一例を示すフローチャートである。
【図１５】アイドルスレッド処理の一例を示すフローチャートである。
【図１６】アイドルスレッド処理のロギング処理を実行するように設定（ロード）する処理の一例を示すフローチャートである。
【図１７】アイドルスレッド処理のロギング処理を解除（アンロード）する処理の一例を示すフローチャートである。
【図１８】図１５のステップ１９４のロギング処理の一例を示すフローチャートである。
【図１９】（Ａ）は、空き領域７２を示し、（Ｂ）は、ＯＳがデータを空き領域７２に書き込む順番３００を示し、（Ｃ）は、ロギング処理で命令実行データを退避する際に書き込む順番４００を示し、（Ｄ）は、ＯＳが、命令実行データにデータを上書きすることを示し、（Ｅ）は、命令実行データにデータを上書きする際の（Ｄ）とは別の順番を示し、（Ｆ）は、ロギング処理で命令実行データを退避する際に書き込む（Ｃ）の順番４００とは異なる順番４０１を示す図である。
【図２０】ＯＳがアイドルスレッド処理を停止する処理の一例を示すフローチャートである。
【図２１】ＯＳがアイドルスレッド処理を実行（再開）させる処理の一例を示すフローチャートである。
【図２２】（Ａ）は、第１の命令が第２の命令にジャンプしかつ第２の命令が第３の命令にジャンプする内容の場合に、命令実行データとしてスレッドを用いると、第３の命令から第２の命令に戻る場合に、第２の命令のスレッド（ｆｕｎｃ２）に第３の命令のスレッド（ｆｕｎｃ３）が上書きされることを示し、（Ｂ）は、第３の命令から第２の命令に戻る場合に、第２の命令のスレッド（ｆｕｎｃ２）に第３の命令のスレッド（ｆｕｎｃ３）が上書きされる前に第２の命令のスレッド（ｆｕｎｃ２）が退避されることを示す図である。
【発明を実施するための形態】
【０００９】
以下、図面を参照して開示の技術の実施形態の一例を詳細に説明する。
【００１０】
図１には、業務プログラム実行装置のブロック図が示されている。図１に示すように、業務プログラム実行装置は、複数のＣＰＵ（中央処理装置：Central Processing Unit）１２、１４、１６、・・・を備えている。業務プログラム実行装置は、２次記憶装置１８、メモリ２０、ＲＯＭ（Read Only Memory）２２、表示制御部２４、表示制御部２４に接続された表示装置２６、入力装置２８、及び通信制御部３０を備えている。表示装置２６としては、液晶表示装置（ＬＣＤ）、ブラウン管（ＣＲＴ）、有機エレクトロルミネセンス表示装置（ＯＥＬＤ）、プラズマディスプレイパネル（ＰＤＰ）、電界放出ディスプレイ（ＦＥＤ）等が適用できる。入力装置２８としては、キーボード（keyboard）やマウス（mouse）などが適用できる。複数のＣＰＵ１２、１４、１６、・・・２次記憶装置１８、メモリ２０、ＲＯＭ２２、表示制御部２４、入力装置２８、及び通信制御部３０はバス３２を介して相互に接続されている。
業務プログラム実行装置は、本開示の技術の「データ書き込み装置」の一例である。
【００１１】
図２（Ａ）には、ＲＯＭ２２に記憶されたプログラムが示されている。図２（Ａ）に示すように、ＲＯＭ２２には、複数の業務プログラム、例えば、業務プログラムＡ４２、業務プログラムＢ４４、及び業務プログラムＣ４６が記憶されている。また、ＲＯＭ２２には、業務プログラムＡ４２、業務プログラムＢ４４、業務プログラムＣ４６それぞれに対応するアイドルスレッド処理プログラムＡ５２、アイドルスレッド処理プログラムＢ５４、及びアイドルスレッド処理プログラムＣ５６が記憶されている。
【００１２】
図２（Ｂ）に示すように、２次記憶装置１８には、オペレーティングシステム（ＯＳ）１８Ａが記憶される。また、２次記憶装置１８には、トラブルの調査用資料を保存（クラッシュダンプ）するための記憶領域１８Ｂが設けられている。
【００１３】
図３には、仮想メモリ領域２００の具体的内容が示されている。メモリ２０の記憶領域は、仮想メモリ領域２００として管理される。仮想メモリ領域２００には、後述する初期設定処理（図１２）の結果、管理領域６０、業務プログラムＡ４２用の領域６８Ａ、業務プログラムＢ４４用の領域６８Ｂ、業務プログラムＣ４６用の領域６８Ｃ、及び業務プログラム記憶領域対応テーブル７０が設定される。仮想メモリ領域２００内で、これらの領域（６０、６８Ａ、６８Ｂ、６８Ｃ、７０）以外の領域は空き領域７２である。管理領域６０には、先頭終端ページ構造体対応テーブル６２、ページ構造体記憶領域６４、及び管理構造体記憶領域６６が設定される。業務プログラムＡ４２用の領域６８Ａ、業務プログラムＢ４４用の領域６８Ｂ、及び業務プログラムＣ４６用の領域６８Ｃの各設定内容はそれぞれ同一である。よって、業務プログラムＡ４２用の領域６８Ａの設定内容のみ説明する。業務プログラムＡ４２用の領域６８Ａには、命令ａ１、命令ａ２、・・・命令ａｋを含む業務プログラムＡ４２を記憶するための領域６８Ａ１、及び業務プログラムＡ４２用のトラブルの調査用資料を記憶するための記憶領域６８Ａ２が設定されている。また、業務プログラムＡ４２用の領域６８Ａには、業務プログラムＡ４２用のアイドルスレッド処理プログラムＡ６８Ａ３を記憶するための記憶領域６８Ａ３、及び設定領域６８Ａ４が設定されている。
メモリ２０は、本開示の技術の「記憶部」の一例である。
【００１４】
仮想メモリ領域２００の選択された領域に記憶されるように指示されたデータは、ＯＳ１８Ａにより、メモリ２０の仮想メモリ領域２００の選択された領域に対応する記憶領域に記憶される。
【００１５】
図４には、先頭終端ページ構造体対応テーブル６２が示されている。先頭終端ページ構造体対応テーブル６２は、先頭及び終端のそれぞれに対応して、先頭のページ構造体が記憶されているページを示すポインタ（アドレス情報）ｐｓ、終端ページ構造体が記憶されているページを示すポインタ（アドレス情報）ｐｅが記憶されている。
【００１６】
図５には、ページ構造体７１、管理構造体８４、空き領域７２の関係が示されている。図５に示すように、空き領域７２は、固定サイズの複数の未使用（データが記憶されていない）の領域（フリーページ）に分割されている。各フリーページは、管理構造体記憶領域６６に記憶された、各フリーページの仮想メモリアドレスを管理する構造体（管理構造体）８４により管理されている。また、管理構造体８４は、ページ構造体記憶領域（フリーリスト）６４に記憶されたページ構造体７１に管理されている。
フリーページは、本開示の技術の「記憶領域」の一例である。
【００１７】
図６には、ページ構造体７１の具体的内容が示されている。ページ構造体７１は、次のデータを記憶するテーブルである。即ち、ページ（フリーページ）の状態を示すフラグ７４、次のページ構造体へのポインタ７６、及び前のページ構造体のポインタ７８が記憶される。また、当該ページ構造体７１に対応するフリーページの仮想メモリアドレスを管理する構造体（管理構造体）へのポインタ８０、及びクラッシュダンプ採取対象となるか判定するフラグ８２が記憶される。
【００１８】
図７には、仮想メモリアドレスを管理する構造体（管理構造体）８４の具体的内容が示されている。図７に示すように、仮想メモリアドレスを管理する管理構造体８４は、仮想メモリアドレスへのポインタ８６を記憶するテーブルである。
【００１９】
ＯＳ１８Ａは、空き領域７２の複数のフリーページについてデータを書き込む順番を決定する。例えば、図３及び図１９（Ａ）に示すように、ＯＳ１８Ａは、空き領域７２の左上端のフリーページを先頭のフリーページ７２Ｓとし、順に右下端のフリーページの終端のフリーページ７２Ｅまで、データを書き込む順番を決定する。図１９（Ｂ）に示すように、先頭のフリーページ７２Ｓの次にデータが書き込まれるページとしてのフリーページ７２Ｓ+１がある。また、終端のフリーページ７２Ｅの前にデータが書き込まれるページとしてページ７２Ｅ-１がある。
【００２０】
図６に示すように、ページ構造体７１は、ＯＳ１８Ａが当該ページ構造体７１に対応するページの次にデータを書き込む予定のページに対応するページ構造体７１へのポインタ７６を記憶する。また、ページ構造体７１は、ＯＳ１８Ａが当該ページ構造体７１に対応するページより前にデータを書き込む予定のページに対応するページ構造体７１へのポインタ７８を記憶する。
【００２１】
例えば、先頭のフリーページ７２Ｓの図３及び図１９に向かって右側のフリーページ７２Ｓ+１には、先頭のフリーページ７２Ｓの次にデータが書き込まれる。よって、先頭のフリーページ７２Ｓのページ構造体７１における次のページ構造体へのポインタ７６（図６）に、フリーページ７２Ｓ+１（図１９（Ｂ）参照）に対応するページ構造体７１へのポインタが記憶される。
【００２２】
また、終端のフリーページ７２Ｅの図３及び図１９に向って左側のフリーページ７２Ｅ−１には、終端のフリーページ７２Ｅよりも１つ前にデータが書き込まれる。よって、終端のフリーページ７２Ｅのページ構造体７１における前のページ構造体へのポインタ７８（図６）に、フリーページ７２Ｅ−１（図１９（Ｂ）参照）に対応するページ構造体７１へのポインタを記憶する。
【００２３】
ページ構造体７１は、管理構造体８４へのポインタ８０を記憶する。ページ構造体７１は、クラッシュダンプ時に、対応するページに記憶されたデータが２次記憶装置１８の記憶領域１８Ｂ（図２（Ｂ））に記憶（ダンプ）される対象となるか判定するフラグ８２を記憶する。業務プログラム実行装置がパニックすると、ＯＳ１８Ａがトラブルの調査用資料の記憶領域６８Ａ２に記憶された内容を２次記憶装置１８にダンプする。ＯＳ１８Ａは、各ページを管理するページ構造体７１におけるフラグ８２を参照してダンプ採取するか否かを判断する。ページは本来、ＯＳ１８Ａによってトラブルの調査用資料の保存のためには利用されない。よって、フラグ８２は、ダンプ採取不要のステータスになっている。後述するロギング処理で、トラブルの調査用資料が退避された場合、フラグ８２が「ダンプ採取必要」と変更されることにより（図１８のステップ２１８）、当該ページがダンプ採取対象となるように、設定される。
【００２４】
ＯＳ１８Ａが先頭のフリーページにデータを書き込む場合、ＯＳ１８Ａは、先頭終端ページ構造体対応テーブル６２（図４）の先頭に対応して記憶されているページ構造体７１へのポインタｐｓを取得する。ＯＳ１８Ａは、取得したポインタｐｓに基づいて先頭のフリーページに対応するページ構造体７１を把握する。ＯＳ１８Ａは、把握したページ構造体７１中のポインタ８０に基づいて、管理構造体８４を把握する。ＯＳ１８Ａは、把握した管理構造体８４中のポインタ８６から先頭のフリーページの仮想メモリアドレスを把握する。ＯＳ１８Ａは、把握した仮想メモリアドレスの先頭のフリーページにデータを書き込む。
【００２５】
図８には、業務プログラム記憶領域対応テーブル７０が示されている。図８に示すように、業務プログラム記憶領域対応テーブル７０は、業務プログラムと業務プログラムが記憶されている記憶領域のアドレスとを対応して記憶するテーブルである。業務プログラムＡ４２に対応してアドレスＡ、業務プログラムＢ４４に対応してアドレスＢ、及び業務プログラムＣ４６に対応してアドレスＣが記憶されている。
【００２６】
図９（Ａ）には、ＯＳ１８Ａの機能ブロック図が、図９（Ｂ）には、ＯＳ１８Ａのプロセスが示されている。図９（Ａ）に示すように、ＯＳ１８Ａの機能部は、初期設定部９０、空ＣＰＵ利用部９２、空メモリ利用部９４、命令部９６、及びダンプ部９８を備えている。図９（Ｂ）に示すように、ＯＳ１８Ａのプロセスは、初期設定プロセス１００、空ＣＰＵ利用プロセス１０２、空メモリ利用プロセス１０４、命令プロセス１０６、及びダンププロセス１０８を備えている。例えば、ＣＰＵ１２が、上記プロセス（１００、１０２、１０４、１０６、１０８）の各々を実行することにより、図９（Ａ）の上記各部（９０、９２、９４、９６、９８）として動作する。
【００２７】
図９（Ｃ）には、業務プログラムの機能ブロック図が、図９（Ｄ）は、業務プログラムのプロセスが示されている。図９（Ｃ）に示すように、業務プログラムの機能部は、処理部９１を備えている。図９（Ｄ）に示すように、業務プログラムのプロセスは、処理プロセス９３を備えている。例えば、ＣＰＵ１４が、処理プロセス９３を実行することにより、図９（Ｃ）の処理部９１として動作する。
【００２８】
次に、本実施の形態の作用を説明する。
ＯＳ１８Ａは、次の場合に空き領域７２からフリーページを取得する。即ち、新たに業務プログラムがＲＯＭ２２に追加されて空き領域７２に新たな業務プログラムを書き込んだ場合や、業務プログラムの各命令を実行するためにデータを空き領域７２に書き込んだ場合である。図１０にはフリーページ取得処理の一例がフローチャートとして示されている。
【００２９】
図１０のステップ１１２で、空メモリ利用部９４は、先頭終端ページ構造体対応テーブル６２（図４）における先頭に対応して記憶されている先頭のページ構造体へのポインタｐｓを取得する。
【００３０】
ステップ１１４で、空メモリ利用部９４は、ページ構造体記憶領域６４に記憶された複数のページ構造体７１の１つのページ構造体７１を任意に選択する。例えば、空メモリ利用部９４は、複数のページ構造体７１の内の中央のページ構造体７１を選択する。空メモリ利用部９４は、当該選択したページ構造体７１から、ポインタｐｓで識別されるページ構造体７１まで（図５に向って左側に向って）、各ページ構造体７１における前のページ構造体へのポインタ７８（図６）に基づいて、辿る。空メモリ利用部９４は、ポインタｐｓで識別されるページ構造体７１まで辿ることができたか否かを判断することにより、ポインタｐｓで識別されるページ構造体７１を取得できたか否かを判断する。ステップ１１４の判定結果が否定判定の場合には、先頭のフリーページがない、即ち、フリーページがないのでフリーページ取得処理は終了する。
【００３１】
ステップ１１４の判定結果が肯定判定の場合には、フリーページ取得処理はステップ１１６に進む。ステップ１１６で、空メモリ利用部９４は、ページ構造体７１のページの状態を示すフラグ７４を使用中に変更する。これにより、当該ページはフリーページでないことが示される。更に、空メモリ利用部９４は、ページ前後のリンクを削除する。即ち、空メモリ利用部９４は、先頭のフリーページ７２Ｓ（図１９（Ｂ））のページ構造体７１における次のページ構造体へのポインタ７６及び当該次のページ構造体における前のページ構造体へのポインタ７８を削除する。これにより、先頭ページは、ページ構造体記憶領域（フリーリスト）６４の管理下から外れ、先頭ページでなくなる。
【００３２】
ステップ１１８で、空メモリ利用部９４は、先頭のフリーページ７２Ｓ（図１９（Ｂ））の次にデータを書き込む予定のフリーページ７２Ｓ+１（図１９（Ｂ））のページ構造体７１へのポインタを取得する。ＯＳ１８Ａは、ページ構造体記憶領域６４においてフリーページ７２Ｓ+１のページ構造体７１を管理しているので、当該ポインタを取得できる。
【００３３】
ステップ１２０で、空メモリ利用部９４は、ページ構造体記憶領域６４に記憶された複数のページ構造体７１の１つのページ構造体７１を任意に選択する。例えば、空メモリ利用部９４は、複数のページ構造体７１の内の中央のページ構造体７１を選択する。空メモリ利用部９４は、当該選択したページ構造体７１から、フリーページ７２Ｓ+１のページ構造体７１まで（図５に向って左側に向って）、各ページ構造体７１における前のページ構造体へのポインタ７８（図６）に基づいて、辿る。空メモリ利用部９４は、フリーページ７２Ｓ+１のページ構造体７１まで辿ることができたか否かを判断することにより、ステップ１１８で取得したポインタにより識別される次のページ構造体が取得できたか否かを判断する。ステップ１２０の判手結果が否定判定の場合は、フリーページがないので、フリーページ取得処理は終了する。
【００３４】
ステップ１２０の判定結果が肯定判定の場合には、本フリーページ取得処理はステップ１２２に進む。ステップ１２２で、空メモリ利用部９４は、上記ステップ１２０で辿った先のアドレスを先頭ページ構造体へのポインタ先として新しくリンクし直す。即ち、空メモリ利用部９４は、先頭終端ページ構造体対応テーブル６２（図４）における先頭に対応して、ステップ１１８で取得したポインタのアドレスを記憶する。これにより、次のページだったページが先頭のページとして管理される。
【００３５】
ＯＳ１８Ａは、業務プログラムの実行が終了したり、次の命令の実行に移ったりして、ページを利用しなくなった場合、当該ページをフリーページにする。図１１には、ページ構造体記憶領域（フリーリスト）６４にフリーページを追加するフリーページ追加処理の１例がフローチャートとして示されている。
【００３６】
ステップ１３２で、空メモリ利用部９４は、先頭終端ページ構造体対応テーブル６２（図４）における終端に対応して記憶されている終端のページ構造体７１へのポインタｐｅを取得する。  
【００３７】
ステップ１３４で、空メモリ利用部９４は、ページ構造体記憶領域６４に記憶された複数のページ構造体７１の内の任意に選択したページ構造体７１における次のページ構造体へのポインタ７６から出発する。空メモリ利用部９４は、ポインタｐｅにより識別される終端のページ構造体７１まで（図５に向って右側に向って）辿る。空メモリ利用部９４は、ポインタｐｅにより識別される終端のページ構造体７１が取得できたか否かを判断する。ステップ１３４の判定結果が肯定判定の場合には、フリーページ追加処理はステップ１３６に進む。ステップ１３４の判定結果が否定判定の場合には、フリーページ追加処理はステップ１３８に進む。
【００３８】
ステップ１３６で、空メモリ利用部９４は、終端のページのページ構造体７１における次のページ構造体のポインタ７６として新しいページ構造体のアドレスを設定する。また、空メモリ利用部９４は、新しいページ構造体７１における前のページ構造体へのポインタ７８として終端のページのページ構造体７１へのポインタを設定する。更に、空メモリ利用部９４は、先頭終端ページ構造体対応テーブル６２（図４）の終端に対応して、新しいページのページ構造体のアドレスを記憶する。本ステップ１３６の処理により、新しく追加されたページが終端のページとなりかつ終端のページだったページが終端のページの１つ前のページに設定される。
【００３９】
ステップ１３４の判定結果が否定判定の場合には、終端のページがない、即ち、フリーページがない場合である。ステップ１３８で、空メモリ利用部９４は、先頭終端ページ構造体対応テーブル６２（図４）の先頭ページ構造体と終端ページ構造体に新しいページ構造体をポインタ先として設定する。
空メモリ利用部９４は、本開示の技術の「第１の書き込み部」の一例である。
【００４０】
図１２には、業務プログラム実行装置に電源が投入されたときにＯＳ１８Ａが仮想メモリ領域２００の内容を設定する初期設定処理の一例がフローチャートとして示されている。図１２のステップ１４２で、初期設定部９０は、仮想メモリの全ページを管理するための管理領域６０の設定をする。これにより、先頭終端ページ構造体対応テーブル６２、ページ構造体記憶領域６４、及び管理構造体記憶領域６６が設定される。
【００４１】
ステップ１４４で、初期設定部９０は、ＲＯＭ２２から業務プログラム及びアイドルスレッド処理プログラムを読み出す。  
【００４２】
ステップ１４６で、初期設定部９０は、各業務プログラムを識別する変数ｐを０に初期化する。例えば、変数ｐ＝１は、業務プログラムＡ４２が識別される。ステップ１４８で、初期設定部９０は、変数ｐを１インクリメントする。ステップ１５０で、初期設定部９０は、変数ｐで識別される業務プログラムｐを仮想メモリ領域２００に設定し、ステップ１５２で、初期設定部９０は、業務プログラムｐ用のトラブル調査資料の記憶領域６８Ａを設定する。即ち、変数ｐ＝１で、業務プログラムＡ４２が認識される場合、初期設定部９０は、記憶領域６８Ａ１に業務プログラムＡ４２を記憶し、業務プログラムＡ４２用のトラブルの調査用資料の記憶領域６８Ａ２が設定される。なお、記憶領域６８Ａ２の記憶領域の数は、所定値に固定されている。
【００４３】
ステップ１５４で、初期設定部９０は、業務プログラムｐ用のアイドルスレッド処理プログラムを設定（記憶）する。即ち、変数ｐ＝１で、業務プログラムＡ４２が認識される場合、初期設定部９０は、記憶領域６８Ａ３にアイドルスレッド処理プログラムＡ５２を記憶する。ステップ１５６で、初期設定部９０は、業務プログラムｐ用のアイドルスレッド処理プログラムの実行又は非実行の設定領域６８Ａ４を設定する。
【００４４】
ステップ１５８で、初期設定部９０は、変数ｐが、業務プログラムの総数Ｐか否かを判断する。ステップ１５８の判定結果が否定判定の場合には、本初期設定処理は、ステップ１４８に戻って、以上の処理（ステップ１４８〜１５８）が実行される。ステップ１５８の判定結果が肯定判定の場合には、本初期設定処理はステップ１６０に進む。
【００４５】
ステップ１６０で、初期設定部９０は、変数ｐを０に初期化、ステップ１６２で、初期設定部９０は、変数ｐを１インクリメントする。ステップ１６４で、初期設定部９０は、業務プログラムｐを複数のＣＰＵ１２、１４、１６、・・・の中から業務プログラムｐ用に選択したＣＰＵｐに実行させる。
【００４６】
ステップ１６６で、変数ｐは、総数Ｐか否かを判断する。ステップ１６６の判定結果が否定判定の場合には、本初期設定処理はステップ１６２に進む。ステップ１６６の判定結果が肯定判定の場合には、本初期設定処理は終了する。
【００４７】
以上の処理により、業務プログラムＡ４２、業務プログラムＢ４４、業務プログラムＣ４６が実行される。しかし、業務プログラムＡ４２用のアイドルスレッド処理プログラムＡ５２、業務プログラムＢ４４用のアイドルスレッド処理プログラムＢ５４、及び業務プログラムＣ４６用のアイドルスレッド処理プログラムＣ５６はこの段階では実行されない。
【００４８】
図１３には、上記ステップ１６４（図１２）により、例えば、業務プログラムＡ４２の命令ａ１、ａ２、・・・ａｋの各々が実行される場合に、当該命令の実行状態を表す命令実行データが記憶領域６８Ａ２に記憶される様子が示されている。この命令実行データの記憶処理は、命令の一部として行われる。
【００４９】
ここで、命令実行データとしては、次の種類のデータがある。第１の種類としては、命令を実行した場合に生成されるデータがある。業務プログラムの当該命令の内容によってどのようなデータが生成されるのかが決まる。例えば、当該命令の内容が所定の演算をすることである場合には、上記命令実行データは、その演算結果である。また、当該命令の内容が指定されたウェブサイトをブラウズする場合には、上記命令実行データは、上記ブラウズのために受信したデータ数である。
第２の種類としては、命令を実行するために使用するデータがある。例えば、ある命令が、既に実行した命令（演算処理）の中間の演算結果を使用する場合には、当該既に実行した命令（演算処理）の中間の演算結果である。
第３の種類としては、実行した命令を識別するデータ（スレッド）である。
【００５０】
業務プログラムＡ４２の実行がスタートすると、ＯＳ１８Ａの命令部９６は、まず、命令ａ１をＣＰＵ１２に実行させる。ＣＰＵ１２は、命令ａ１を実行する。命令ａ１が実行されると命令実行データａ１が生成される。生成された命令実行データａ１が、時間ｔ１において、記憶領域６８Ａ２１に記憶される。
【００５１】
同様に、命令ａ２が実行されると、命令実行データａ２が、時間ｔ２において記憶領域６８Ａ２における命令実行データａ１が記憶された領域６８Ａ２１とは異なる領域６８Ａ２２に記憶される。そして命令ａｉが実行されると、命令実行データａｉが、時間ｔｉ（業務プログラムＡ４２の実行がスタートしたときからＴ時間後）において、領域６８Ａ２ｉに記憶される。
【００５２】
次の命令ａｉ＋１が実行されると、命令実行データａｉ＋１が、時間ｔｉ＋１で、命令実行データａ１が記憶された領域６８Ａ２１に記憶されようとする。命令実行データａｉ＋１が、命令実行データａ１が記憶された領域に記憶されると、命令実行データａ１に命令実行データａｉ＋１が上書きされる。よって、命令実行データａ１が消去される。従って、クラッシュダンプしたとき、命令実行データａ１を取得できず、命令ａ１の実行状態を把握することができない。そこで、本実施の形態では、後述するロギング処理が実行される。
命令部９６は、本開示の技術の「第３の書き込み部」の一例である。
【００５３】
図１４には、アイドル状態となった空ＣＰＵをＯＳ１８Ａが検知した時に、ＯＳ１８Ａが空ＣＰＵにアイドルスレッド処理を実行させる命令処理の一例がフローチャートとして示されている。図１４のステップ１７２で、空ＣＰＵ利用部９２は、アイドルスレッド処理を空ＣＰＵに実行させていない業務プログラムを検出する。
【００５４】
ステップ１７４で、空ＣＰＵ利用部９２は、業務プログラムが検出されたか否かを判断する。ステップ１７４の判定結果が否定判定の場合には、アイドルスレッド処理の実行の命令処理は終了する。ステップ１７４の判定結果が肯定判定の場合には、本命令処理はステップ１７６に進む。
【００５５】
ステップ１７６で、空ＣＰＵ利用部９２は、検出されたアイドルスレッド処理プログラムを識別する変数ｑを０に初期化し、ステップ１７８で、空ＣＰＵ利用部９２は、変数ｑを１インクリメントする。
【００５６】
ステップ１８０で、空ＣＰＵ利用部９２は、検出された空ＣＰＵに業務プログラムｑ用のアイドルスレッド処理プログラムを実行させる。例えば、ｑ＝１により業務プログラムＡ４２が識別される場合、空ＣＰＵにアイドルスレッド処理プログラムＡ５２の実行が割り当てられる。
【００５７】
ステップ１８２で、空ＣＰＵ利用部９２は、変数ｑが上記検出された業務プログラムの総数Ｑに等しいか否かを判断する。ステップ１８２の判定結果が否定判定の場合には、アイドルスレッド処理の実行命令処理はステップ１８４に進む。ステップ１８２の判定結果が肯定判定の場合には、本命令処理は終了する。
【００５８】
ステップ１８４で、空ＣＰＵ利用部９２は、更に空ＣＰＵがあるか否かを判断する。ステップ１８４の判定結果が否定判定の場合には、アイドルスレッド処理の実行命令処理は終了する。ステップ１８４の判定結果が肯定判定の場合には、本命令処理はステップ１７８に進む。
【００５９】
次に、アイドルスレッド処理を説明する。アイドルスレッド処理は、各業務プログラムに対応するアイドルスレッド処理プログラムにより実行される。業務プログラムＡ４２〜業務プログラムＣ４６に対応するアイドルスレッド処理プログラムＡ５２〜アイドルスレッド処理プログラムＣ５６は互いに同様であるので、以下、アイドルスレッド処理プログラムＡ５２のみ説明する。図１５には、アイドルスレッド処理の一例がフローチャートとして示されている。図１５のステップ１９２で、処理部９１は、ロギング処理が実行するようにユーザにより設定されたか否かを判断する。ステップ１９２の判定結果が否定判定の場合には、本処理はステップ１９２に進む。よって、ロギング処理が実行するように設定されてない場合、当該ＣＰＵは、当該判断処理（ステップ１９２）を実行し続ける。
【００６０】
ステップ１９２の判定結果が肯定判定の場合には、本処理はステップ１９４に進む。ステップ１９４で、処理部９１は、ロギング処理を実行する。
【００６１】
図１６には、アイドルスレッド処理のロギング処理を実行するように設定（ロード）する処理の一例がフローチャートとして示されている。ユーザが、入力装置２８を介して、例えば、業務プログラムＡ４２についてのロギング処理を実行するように、データを入力（ロード）したとする。ＯＳ１８Ａの命令部９６は、当該ロードを検知すると、図１６のステップ１９６で、命令部９６は、設定領域６８Ａ４にアイドルスレッド処理プログラムＡ５２の格納アドレスを設定する。これにより、図１５のステップ１９２の判定が肯定判定となる。
【００６２】
一方、図１７には、アイドルスレッド処理のロギング処理を解除（アンロード）する処理の一例がフローチャートとして示されている。ユーザが、入力装置２８を介して、例えば、業務プログラムＡ４２についての実行を停止するように、データを入力（アンロード）したとする。ＯＳ１８Ａの命令部９６は、当該アンロードを検知すると、図１７のステップ１９８で、命令部９６は、設定領域Ａ４からアイドルスレッド処理プログラムＡ５２の格納アドレスを削除する。これにより、図１５のステップ１９２の判定が否定判定となる。
【００６３】
このように、ユーザは、業務プログラムを選択してロギング処理を実行させたり、業務プログラムを選択してロギング処理を停止させたりすることができる。
入力装置２８は、本開示の技術の「書き込み設定部」及び「停止設定部」の一例である。
【００６４】
図１８には、図１５のステップ１９４のロギング処理の一例がフローチャートとして示されている。図１８のステップ２０２で、処理部９１は、ページ構造体記憶領域（フリーリスト）６４の終端のページ構造体のポインタｐｅ（図４）を取得する。ステップ２０４で、処理部９１は、ページ構造体記憶領域６４に記憶された複数のページ構造体７１の１つのページ構造体７１を任意に選択する。例えば、処理部９１は、複数のページ構造体７１の内の中央のページ構造体７１を選択する。処理部９１は、当該選択したページ構造体７１から、ポインタｐｅで識別される終端のページ構造体まで（図５に向って右側に向って）、各ページ構造体７１における次のページ構造体へのポインタ７６（図６）に基づいて、辿る。処理部９１は、終端のページ構造体まで辿ることができたか否かを判断することにより、ポインタｐｅで識別される終端のページ構造体を含め、記憶領域６８Ａ２（図１３参照）のページの数分のページ構造体が取得できたか否かを判断する。記憶領域６８Ａ２（図１３参照）のページの数分のページ構造体が取得できたか否かを判断するのは、後述するステップ２１６で、処理部９１が記憶領域６８Ａ２（図１３参照）の全ての領域に記憶された命令実行データを一括して退避させるためである。
【００６５】
ステップ２０４の判定結果が否定判定の場合には、利用可能なフリーページが存在しないと判断でき、ロギング処理はステップ２０６に進む。ステップ２０６で、処理部９１は、一定時間待機する。一定時間待機すると、上記（図１０）のようにフリーページが追加されることもある。この場合には、ステップ２０４の判定結果が肯定判定となる。ステップ２０４の判定結果が肯定判定の場合には、ロギング処理はステップ２０８に進む。
【００６６】
ステップ２０８で、処理部９１は、業務プログラム記憶領域対応テーブル７０（図８）を参照し、例えば、業務プログラムＡ４２に対応して記憶されているアドレスＡを取得し、アドレスＡに基づいて退避する記憶領域６８Ａ２を検出できたか否かを判断する。
【００６７】
ところで、アイドルスレッド処理（ロギング処理）は、対応する業務プログラムの実行とは独立して実行される。よって、前述したようにユーザによりロギング処理が実行されるように設定された状態であっても、対応する業務プログラムがメモリ２０に存在しない場合がある。なお、対応する業務プログラムがメモリ２０に存在しない場合は、業務プログラム記憶領域対応テーブル７０の対応する業務プログラムに対応する記憶領域に記憶されたアドレスがＯＳ１８Ａにより削除される。この場合には、ステップ２０８の判定結果が否定判定となる。ステップ２０８の判定結果が否定判定の場合には、ロギング処理はステップ２１０に進む。ステップ２１０で、処理部９１は、一定時間待機する。一定時間待機すると、対応する業務プログラムがメモリ２０に記憶（復活）される場合もある。この場合には、業務プログラム記憶領域対応テーブル７０の対応する業務プログラムに対応する記憶領域にアドレスがＯＳにより記憶（復活）される。ステップ２０８の判定結果が肯定判定となる。ステップ２０８の判定結果が肯定判定の場合には、ロギング処理はステップ２１２に進む。
【００６８】
ステップ２１２で、処理部９１は、ヘッダ情報の作成をする。ここで、ヘッダ情報には、マジックナンバ、シーケンス番号、時刻（タイムスタンプ）、使用したＣＰＵ番号、領域の属性、チェックサムがある。マジックナンバは、調査資料がどの業務プログラムに対応するのかを示す。シーケンス番号は、調査資料がどの命令に対応するのかを示す。領域の属性は、調査資料の具体的内容の種類を識別する情報である。
ヘッダ情報は、本開示の技術の「命令を特定するデータ」の一例である。
【００６９】
ステップ２１４で、処理部９１は、ページ構造体がページ構造体記憶領域（フリーハスト）６４上にあるか否を確認する。ところで、ステップ２０４で、ページ構造体が取得できたと判断されても、ステップ２０８の判定結果が否定判定の場合、ロギング処理は、ステップ２１０で一定時間待機される。ロギング処理が一定時間待機された場合、ＯＳ１８Ａがステップ２０４におけるページ構造体に対応するページを利用する場合がある。この場合には、ステップ２０４におけるページ構造体がページ構造体記憶領域（フリーリスト）６４から外れる（図１０）。よって、ステップ２１４の判定結果は否定判定となる。この場合、ロギング処理はステップ２０６に進む。上記のように、ステップ２０６で、ロギング処理は一定時間待機する。ロギング処理が一定時間待機している間に、ページが解放されて、ページ構造体記憶領域（フリーリスト）６４にページ構造体が追加される（図１１）。この場合、ステップ２１４の判定結果が肯定判定となる。
【００７０】
ステップ２１４の判定結果が肯定判定の場合には、ロギング処理はステップ２１６に進む。ステップ２１６で、処理部９１は、ヘッダ情報と記憶領域６８Ａ２の命令実行データをページに書き込む。即ち、処理部９１は、ステップ２０４で取得できたページ構造体７１における管理構造体８４へのポインタ８０に基づいて、管理構造体８４を認識する。処理部９１は、認識した管理構造体８４のポインタ８６に基づいて、上記ステップ２０４で取得できたページ構造体７１に対応するページに、ヘッダ情報と命令実行データを記憶（退避）する。
【００７１】
ステップ２１８で、処理部９１は、ページ構造体７１のフラグ８２を、クラッシュダンプの採取対象に変更する。即ち、処理部９１はフラグ８２を「ダンプ採取必要」に変更する。
【００７２】
ステップ２２０で、処理部９１は、上記Ｔ時間待機する。ステップ２１６の処理により、上記Ｔ時間が経過する間に、上記（図１３）のように、複数の命令が実行され、記憶領域６８Ａ２に新たに命令実行データが記憶される。ロギング処理がステップ２２０に移行したときから上記Ｔ時間が経過するときは、記憶領域６８Ａ２に新たに記憶されたデータに、更に新たなデータが上書きされそうになる。
【００７３】
よって、記憶領域６８Ａ２に記憶された命令実行データを再度退避するため、ロギング処理はステップ２２２に進む。ステップ２２２で、処理部９１は、ロギング処理により書き込んだページがリンクしている、前のページ構造体アドレスを取得する。
【００７４】
ここで、ステップ２２２で、上記のように前のページ構造体アドレスを取得するようにしているのは次の理由からである。即ち、ＯＳ１８Ａが空き領域７２のフリーページ（図１９（Ａ））にデータを書き込む順番（３００（図１９Ｂ））とは逆の順番（４００（図１９（Ｃ））で、処理部９１が命令実行データをフリーページに書き込むようにするためである。これは、終端のフリーページ７２Ｅを含む所定数のフリーページは、空メモリ利用部９４によりデータが書き込まれないと予想されるフリーページである。ここで、空メモリ利用部９４によりデータが書き込まれないと予想されるフリーページには、第１に、全くデータが書き込まれないと予想されるフリーページや、第２に、一定時間後でなければデータが書き込まれないと予想されるフリーページが含まれる。当該一定時間は、過去の統計値に基づいて得られる、業務プログラム実行装置に電源が投入された時からクラッシュダンプが生ずるであろうと予想される時間である。なお、このように上記一定時間は統計値に基づいて得られるので、空メモリ利用部９４によりデータが書き込まれないと予想した所定数のフリーページに現実にはデータが書き込まれこともある。
【００７５】
また、ステップ２２２における「前のページ構造体」の数は、記憶領域６８Ａ２（図１３参照）のページの数である。これは、ステップ２２２の処理後に実行されるステップ２１６では、記憶領域６８Ａ２（図１３参照）の全ての領域に記憶された命令実行データを一括して退避するからである。
【００７６】
ステップ２２２の後は、ロギング処理は、ステップ２０４に進み、処理部９１は、以上の処理（ステップ２０４〜２２２）を実行する。なお、ステップ２２２の処理後にロギング処理が進んだステップ２０４では、処理部９１は、ステップ２２２で取得された前のページ構造体アドレスに基づいて、記憶領域６８Ａ２（図１３参照）のページの数のページ構造体が取得できたか否かを判断する。
【００７７】
上記（図１３）のように、複数の命令が実行され、記憶領域６８Ａ２に命令実行データが記憶される。ロギング処理がステップ２２０に移行したときから上記Ｔ時間が経過するときは、記憶領域６８Ａ２に記憶された命令実行データに、新たな命令実行データが上書きされそうになる。そこで、ロギング処理では、ステップ２１６で、新たな命令実行データが上書きされる前に、記憶領域６８Ａ２の全ての領域に記憶された命令実行データを上記のように空き領域２００のフリーページに退避される。
処理部９１は、本開示の技術の「第２の書き込み部」の一例である。
【００７８】
上記のように、ロギング処理では、調査用資料を退避した先の空き領域７２のページを管理しているページ構造体７１におけるフラグ８２が、クラッシュダンプ採取対象となることを示すように変更される。ダンプ部９８は、何れかのＣＰＵが暴走した場合（パニックが生じた場合）、このフラグ８２の内容を調べることにより、空き領域７２のページがメモリダンプ採取対象か否か判断する。そして、ダンプ部９８は、調査用資料を２次記憶装置１８の記憶領域１８Ｂ（図２（Ｂ）参照）に記憶（ダンプ）する。
【００７９】
ところで、アイドルスレッド処理は、以下の場合に、強制的に終了となるが、以下の場合以外の場合は、実行し続けられる。
第１に、アイドルスレッド処理を実行しているＣＰＵが業務プログラムの実行のために利用される場合に、アイドルスレッド処理は強制的に終了となる。
第２に、図１９（Ｃ）に示すように全てのフリーページが利用された場合である。即ち、ＯＳ１８Ａが、業務プログラム等の実行のために、フリーページ７２Ｓ〜７２Ｌにデータを書き込みかつヘッダ情報及び命令実行データをフリーページ７２Ｅ〜７２Ｍに書き込んだ場合、ロギング処理は強制終了となる。なお、業務プログラム等の実行のために、データを書き込む場合、ＯＳ１８Ａは、ページ７２Ｍ以後の（図１９（Ｄ）の順番３０２参照）を利用する。この場合には、保存した命令実行データにデータが上書きされる。
第３に、ＯＳ１８Ａのカーネルにパニックが発生した場合に、ロギング処理は強制的に終了となる。
【００８０】
アイドルスレッド処理を実行しているＣＰＵが業務プログラムの実行のために利用される場合、全てのフリーページが利用された場合、及びＯＳ１８Ａのカーネルにパニックが発生した場合の各場合をＯＳ１８Ａが検知した場合、次の処理がスタートする。即ち、図２０に示すアイドルスレッド処理停止処理がスタートし、命令部９６は、ステップ２３０で、アイドルスレッド処理を停止する。
【００８１】
一方、第２の場合（図１９（Ｂ））の後にフリーページが追加された場合、カーネルのパニックが解消された場合の各場合をＯＳ１８Ａが検知した場合、次の処理がスタートする。即ち、図２１に示すアイドルスレッド処理実行処理がスタートし、命令部９６は、ステップ２４０でアイドルスレッド処理を実行させる。
【００８２】
次に、本実施の形態の効果を説明する。
（第１の効果）
ロギング処理では、命令実行データ（調査用資料）を記憶領域６８Ａ２（図３、図１３）から空き領域７２に退避するので、命令実行データを記憶領域６８Ａ２（図３、図１３）の記憶可能量よりも多く保存することができる。また、ロギング処理では、命令実行データを退避する場合、業務プログラム等が空き領域７２のフリーページを利用する順番とは逆の順番でフリーページが利用される。空き領域７２が存在する状態では、保存した内容（命令実行データ）が上書きされることをより少なくすることができる。命令実行データが一旦、固定領域の記憶領域６８Ａ２（図３、図１３）に記憶され、記憶領域６８Ａ２に記憶された命令実行データに上書きされる前に、命令実行データが空き領域７２に退避される。よって、命令実行データが上書きされることをより少なくすることができる。
【００８３】
（第２の効果）
ＯＳ１８Ａは、ロギング処理を空ＣＰＵに実行させるので、業務処理をしているＣＰＵの処理を妨げることを防止することができる。また、ＯＳは、ロギング処理を実行しているＣＰＵが業務処理を実行する場合には、ロギング処理を停止させる共に当該ＣＰＵに業務処理を実行させるので、業務処理の妨げとなることを防止することができる。
【００８４】
（第３の効果）
ロギング処理は、フリーページがある状態でのみ業務処理を実行する際に利用されるフリーページを利用するので、業務処理の妨げとなることを防止することができる。
【００８５】
（第４の効果）
ロギング処理では、命令実行データ（調査用資料）を退避した先の空き領域７２のページを管理しているページ構造体７１におけるフラグ８２が、クラッシュダンプ採取対象となることを示すように変更される。このフラグ８２の内容を調べることにより、空き領域７２のページがメモリダンプ採取対象か否か判断でき、命令実行データを２次記憶装置１８の記憶領域１８Ｂ（図２（Ｂ）参照）に保存することが可能となる。その結果、命令実行データを確実に採取することができる。
【００８６】
（第５の効果）
ヘッダ情報が命令実行データ（調査用資料）に対応して付与される。よって、クラッシュダンプの中から目的の調査資料を探しやすい。また、ヘッダ情報には、領域の属性として命令実行データがどのような処理の情報なのかを示す情報が含まれている。よって、採取された命令実行データの解析時に命令実行データがどのような内容なのかを特定することができる。
【００８７】
（第６の効果）
命令実行データとして命令の実行によって生成された演算結果や中間の演算結果を利用すると、命令が正しく実行されたのかを知ることができる。
【００８８】
（第７の効果）
命令実行データとしてスレッド（命令の識別データ）を利用すると、どの命令が実行されたのか及びどの命令が実行されなかったのかを知ることができる。また、命令実行データとして、命令のスレッドを用いると、従来の方法だと、当該スレッドが上書きされる場合がある。即ち、図２２（Ａ）に示すように、第１の命令が第２の命令にジャンプしかつ第２の命令が第３の命令にジャンプする内容の場合を例にとり説明する。図２２（Ａ）の上側に示すように、第１の命令が実行されると、第１の命令の識別データであるスレッド（ｆｕｎｃ２）がフリーページ２３２に保存され、第２の命令が実行されると、第２の命令のスレッド（ｆｕｎｃ２）がフリーページ２３４に保存される。第３の命令から第２の命令に戻る場合には、図２２（Ａ）の下側に示すように、第２の命令のスレッド（ｆｕｎｃ２）に第３の命令のスレッド（ｆｕｎｃ３）が上書きされる。しかし、本実施の形態では、図２２（Ｂ）の中間に示すように、第３の命令から第２の命令に戻る場合に、第２の命令のスレッド（ｆｕｎｃ２）に第３の命令のスレッド（ｆｕｎｃ３）が上書きされる前に第２の命令のスレッド（ｆｕｎｃ２）が退避される。よって、スレッドを保存することができる。
【００８９】
次に、本実施の形態の変形例を説明する。
（第１の変形例）
図１９（Ｄ）に示すように、ＯＳ１８Ａは、ページ７２Ｍ以後のページを順番３０２に従って、ページを利用することに代えて、図１９（Ｅ）に示すように、終端のページ７２Ｅから上記順番３００、３０１とは逆の順番（３０４）にページを利用してもよい。命令実行データが上書きされる順番をより古い順番にすることができる。これは、クラッシュダンプ時に時間的により近い命令実行データを保存するためである。
【００９０】
（第２の変形例）
図１９（Ｃ）に示すように、命令実行データを終端のフリーページ７２Ｅから書き込むことに代えて、次のようにしてもよい。即ち、ＯＳ１８Ａは、空き領域７２の全てのフリーページを、先頭のフリーページ７２Ｓから４／５の部分と、終端のフリーページ７２Ｅからの１／５の部分に分ける。命令実行データは、上記順番３００、３０１と同方向の順番（４０１）に、フリーページ７２Ｅから終端７２Ｅに向って利用するようにしてもよい。これにより、命令実行データが上書きされる順番をより古い順番にすることができる。ここで、１／５の部分は、ＯＳ１８Ａによりデータが書き込まれないと予想されるフリーページの部分である。なお、１／５は例示であり、ＯＳ１８Ａによりデータが書き込まれないフリーページの数の統計値に基づいて決定することができる。
【００９１】
（第３の変形例）
命令実行データが一旦記憶領域６８Ａ２（図３、図１３）に記憶された後、空き領域７２のフリーページに記憶（退避）することに代えて、次のようにしてもより。即ち、ＯＳ１８Ａは、命令実行データが生成される毎に、生成された命令実行データを空き領域７２のフリーページに直接記憶してもよい。これにより、記憶領域６８Ａ２を消去して、より空き領域７２を増やすことができる。なお、一旦記憶領域６８Ａ２に記憶した後、空き領域７２に退避する場合、及び空き領域７２に直接記憶する場合の各場合における命令実行データの種類は、上記第１〜第３の種類の何れかに限定されない。上記第１〜第３の種類の少なくとも１つの種類することができる。
【００９２】
（第４の変形例）
ステップ２１６とステップ２１４との間で、処理部９１は次の処理を実行してもよい。即ち、ステップ２０８で検出できた上記退避する領域６８Ａ２に記憶されかつこれから退避する上記命令実行データが、ステップ２０４で取得したページ構造体よりも次のページ構造体に記憶された命令実行データと同じか否かを判断する処理である。これは、同じ内容の命令実行データが再度退避されないようにするためである。なお、命令実行データが同じ内容か否かは、各命令実行データに対応するヘッダ情報のマジックナンバ及びシーケンス番号が同じか否か判断することにより判断することができる。
【００９３】
（第５の変形例）
ダンプ部９８は、何れかのＣＰＵが暴走した場合（パニックが生じた場合）、命令実行データを２次記憶装置１８の記憶領域１８Ｂ（図２（Ｂ）参照）に記憶（ダンプ）することに代え、次のようにしてもよい。第１に、ＣＰＵが適正に動作している、即ち、パニックが生じていない場合に、命令実行データを、空き領域７２に退避される毎に２次記憶装置１８の記憶領域１８Ｂに記憶してもよい。第２に、命令実行データが生成され、直接空き領域７２に記憶される毎に命令実行データを２次記憶装置１８の記憶領域１８Ｂに記憶してもよい。
【００９４】
本明細書に記載された全ての文献、特許出願及び技術規格は、個々の文献、特許出願及び技術規格が参照により取り込まれることが具体的かつ個々に記された場合と同程度に、本明細書中に参照により取り込まれる。
【００９５】
以上の実施形態に関し、更に以下の付記を開示する。
（付記１）
書き込まれたデータを記憶する複数の記憶領域を有する記憶部と、
前記記憶部の記憶領域にデータを書き込む第１の書き込み部と、
前記記憶部の複数の記憶領域の内、前記第１の書き込み部により書き込みがされないと予想される記憶領域に、複数の命令を含むプログラムの各命令の実行状態を示す命令実行データを書き込む第２の書き込み部と、
を備えたデータ書き込み装置。
【００９６】
（付記２）
前記第１の書き込み部は、前記記憶部の複数の記憶領域に予め定められた順番にデータを書き込み、
前記第２の書き込む部は、前記各命令の実行状態を示す命令実行データを、前記記憶部の複数の記憶領域に前記順番とは逆の順番に書き込むと共に前記第１の書き込み部が最初に書き込む記憶領域よりも最も離れた記憶領域から書き込み始める
付記１に記載のデータ書き込み装置。
【００９７】
（付記３）
前記記憶部は、予め定められた数の特定の記憶領域を有し、
前記各命令が実行される毎に、前記命令実行データを、前記特定の記憶領域に書き込むと共に前記特定の記憶領域の全てに前記命令実行データを書き込んだ場合には、前記命令実行データが記憶された記憶領域に別の命令実行データを書き込む第３の書き込み部を更に備え、
前記第２の書き込み部は、前記命令実行データが記憶された記憶領域に別の命令実行データが書き込まれる前に、前記記憶領域に記憶された前記命令実行データを、前記予想される記憶領域に書き込む
付記１又は付記２に記載のデータ書き込み装置。
【００９８】
（付記４）
前記第２の書き込み部は、プログラムの命令を実行可能であり、前記命令を実行する場合には、前記命令実行データを書き込むことを停止する付記１〜付記３の何れか１項に記載のデータ書き込み装置。
【００９９】
（付記５）
前記第２の書き込み部は、前記記憶部の前記複数の記憶領域の全てに前記データ又は前記命令実行データが書き込まれた場合には、前記命令実行データを書き込むことを停止する付記１〜付記４の何れか１項に記載のデータ書き込み装置。
【０１００】
（付記６）
前記命令実行データは、前記命令を実行した場合に生成される第１のデータ、前記命令を実行するために利用する第２のデータ、前記実行された命令を識別する第３のデータの少なくとも１つである付記１〜付記５の何れか１項に記載のデータ書き込み装置。
【０１０１】
（付記７）
前記命令実行データを書き込むように設定する書き込み設定部を更に備え、
前記第２の書き込み部は、前記書き込み設定部により前記命令実行データを書き込むように設定された場合に、前記命令実行データを書き込む付記１〜付記６の何れか１項に記載のデータ書き込み装置。
【０１０２】
（付記８）
前記命令実行データの書き込みを停止するように設定する停止設定部を更に備え、
前記第２の書き込み部は、前記停止設定部により前記命令実行データの書き込みを停止するように設定された場合に、前記命令実行データの書き込みを停止する付記１〜付記７の何れか１項に記載のデータ書き込み装置。
【０１０３】
（付記９）
前記第２の書き込み部は、複数のプログラムの各々に対応して備える付記１〜付記８の何れか１項に記載のデータ書き込み装置。
【０１０４】
（付記１０）
前記第２の書き込み部は、前記命令実行データと、前記命令を特定するデータとを対応して書き込む付記１〜付記９の何れか１項に記載のデータ書き込み装置。
【０１０５】
（付記１１）
コンピュータに、
書き込まれたデータを記憶する複数の記憶領域を有する記憶部の記憶領域にデータを書き込む第１の書き込みをし、
前記記憶部の複数の記憶領域の内、前記第１の書き込みにより書き込みがされないと予想される記憶領域に、複数の命令を含むプログラムの各命令の実行状態を示す命令実行データを書き込む第２の書き込みをする
ことを含む処理を実行させるデータ書き込みプログラム。
【０１０６】
（付記１２）
前記第１の書き込みでは、前記記憶部の複数の記憶領域に予め定められた順番にデータを書き込み、
前記第２の書き込むでは、前記各命令の実行状態を示す命令実行データを、前記記憶部の複数の記憶領域に前記順番とは逆の順番に書き込むと共に前記第１の書き込み部が最初に書き込む記憶領域よりも最も離れた記憶領域から書き込み始める
付記１１に記載のデータ書き込みプログラム。
【０１０７】
（付記１３）
前記記憶部は、予め定められた数の特定の記憶領域を有し、
前記コンピュータに、
前記各命令が実行される毎に、前記命令実行データを、前記特定の記憶領域に書き込むと共に前記特定の記憶領域の全てに前記命令実行データを書き込んだ場合には、前記命令実行データが記憶された記憶領域に別の命令実行データを書き込む第３の書き込みをすることを含む処理を更に実行させ、
前記第２の書き込みでは、前記命令実行データが記憶された記憶領域に別の命令実行データが書き込まれる前に、前記記憶領域に記憶された前記命令実行データを、前記予想される記憶領域に書き込む
付記１１又は付記１２に記載のデータ書き込みプログラム。
【０１０８】
（付記１４）
前記第２の書き込みを行う第２の書き込み部は、プログラムの命令を実行可能であり、
前記コンピュータに、
前記第２の書き込み部が前記命令を実行する場合には、前記第２の書き込みを停止することを含む処理を更に実行させる付記１１〜付記１３の何れか１項に記載のデータ書き込みプログラム。
【０１０９】
（付記１５）
前記コンピュータに、
前記記憶部の前記複数の記憶領域の全てに前記データ又は前記命令実行データが書き込まれた場合には、前記第２の書き込みを停止することを含む処理を更に実行させる付記１１〜付記１４の何れか１項に記載のデータ書き込みプログラム。
【０１１０】
（付記１６）
前記命令実行データは、前記命令を実行した場合に生成される第１のデータ、前記命令を実行するために利用する第２のデータ、前記実行された命令を識別する第３のデータの少なくとも１つである付記１１〜付記１５の何れか１項に記載のデータ書き込みプログラム。
【０１１１】
（付記１７）
前記コンピュータに、
前記第２の書き込みをするように設定することを含む処理を更に実行させ、
前記第２の書き込みでは、前記命令実行データを書き込むように設定された場合に、前記命令実行データを書き込む付記１１〜付記１６の何れか１項に記載のデータ書き込みプログラム。
【０１１２】
（付記１８）
前記コンピュータに、
前記第２の書き込みを停止するように設定された場合に、前記第２の書き込みを停止することを含む処理を更に実行させる付記１１〜付記１７の何れか１項に記載のデータ書き込みプログラム。
【０１１３】
（付記１９）
複数のプログラムの各々に対応して前記第２の書き込みが行われる付記１１〜付記１８の何れか１項に記載のデータ書き込みプログラム。
【０１１４】
（付記２０）
前記第２の書き込みでは、前記命令実行データと、前記命令を特定するデータとを対応して書き込む付記１１〜付記１９の何れか１項に記載のデータ書き込みプログラム。
【０１１５】
（付記２１）
コンピュータに、
書き込まれたデータを記憶する複数の記憶領域を有する記憶部の記憶領域にデータを書き込む第１の書き込みをし、
前記記憶部の複数の記憶領域の内、前記第１の書き込みにより書き込みがされないと予想される記憶領域に、複数の命令を含むプログラムの各命令の実行状態を示す命令実行データを書き込む第２の書き込みをする
ことを含む処理を実行させるデータ書き込み方法。
【０１１６】
（付記２２）
前記第１の書き込みでは、前記記憶部の複数の記憶領域に予め定められた順番にデータを書き込み、
前記第２の書き込むでは、前記各命令の実行状態を示す命令実行データを、前記記憶部の複数の記憶領域に前記順番とは逆の順番に書き込むと共に前記第１の書き込み部が最初に書き込む記憶領域よりも最も離れた記憶領域から書き込み始める
付記２１に記載のデータ書き込み方法。
【０１１７】
（付記２３）
前記記憶部は、予め定められた数の特定の記憶領域を有し、
前記コンピュータに、
前記各命令が実行される毎に、前記命令実行データを、前記特定の記憶領域に書き込むと共に前記特定の記憶領域の全てに前記命令実行データを書き込んだ場合には、前記命令実行データが記憶された記憶領域に別の命令実行データを書き込む第３の書き込みをすることを含む処理を更に実行させ、
前記第２の書き込みでは、前記命令実行データが記憶された記憶領域に別の命令実行データが書き込まれる前に、前記記憶領域に記憶された前記命令実行データを、前記予想される記憶領域に書き込む
付記２１又は付記２２に記載のデータ書き込み方法。
【０１１８】
（付記２４）
前記第２の書き込みを行う第２の書き込み部は、プログラムの命令を実行可能であり、
前記コンピュータに、
前記第２の書き込み部が前記命令を実行する場合には、前記第２の書き込みを停止することを含む処理を更に実行させる付記２１〜付記２３の何れか１項に記載のデータ書き込み方法。
【０１１９】
（付記２５）
前記コンピュータに、
前記記憶部の前記複数の記憶領域の全てに前記データ又は前記命令実行データが書き込まれた場合には、前記第２の書き込みを停止することを含む処理を更に実行させる付記２１〜付記２４の何れか１項に記載のデータ書き込み方法。
【０１２０】
（付記２６）
前記命令実行データは、前記命令を実行した場合に生成される第１のデータ、前記命令を実行するために利用する第２のデータ、前記実行された命令を識別する第３のデータの少なくとも１つである付記２１〜付記２５の何れか１項に記載のデータ書き込み方法。
【０１２１】
（付記２７）
前記コンピュータに、
前記第２の書き込みをするように設定することを含む処理を更に実行させ、
前記第２の書き込みでは、前記命令実行データを書き込むように設定された場合に、前記命令実行データを書き込む付記２１〜付記２６の何れか１項に記載のデータ書き込み方法。
【０１２２】
（付記２８）
前記コンピュータに、
前記第２の書き込みを停止するように設定された場合に、前記第２の書き込みを停止することを含む処理を更に実行させる付記２１〜付記２７の何れか１項に記載のデータ書き込み方法。
【０１２３】
（付記２９）
複数のプログラムの各々に対応して前記第２の書き込みが行われる付記２１〜付記２８の何れか１項に記載のデータ書き込み方法。
【０１２４】
（付記３０）
前記第２の書き込みでは、前記命令実行データと、前記命令を特定するデータとを対応して書き込む付記２１〜付記２９の何れか１項に記載のデータ書き込み方法。
【符号の説明】
【０１２５】
１２、１４、１６    ＣＰＵ
１８Ａ    ＯＳ
２０      メモリ
２８      入力装置
４２      業務プログラムＡ
４４      業務プログラムＢ
４６      業務プログラムＣ
５２      アイドルスレッド処理プログラムＡ
５４      アイドルスレッド処理プログラムＢ
５５      アイドルスレッド処理プログラムＣ
６８Ａ２  記憶領域
９１      処理部
９４      空メモリ利用部
９６      命令部
２００    仮想メモリ領域
【図１】
2015076052.tif 000003
【図２】
2015076052.tif 000004
【図３】
2015076052.tif 000005
【図４】
2015076052.tif 000006
【図５】
2015076052.tif 000007
【図６】
2015076052.tif 000008
【図７】
2015076052.tif 000009
【図８】
2015076052.tif 000010
【図９】
2015076052.tif 000011
【図１０】
2015076052.tif 000012
【図１１】
2015076052.tif 000013
【図１２】
2015076052.tif 000014
【図１３】
2015076052.tif 000015
【図１４】
2015076052.tif 000016
【図１５】
2015076052.tif 000017
【図１６】
2015076052.tif 000018
【図１７】
2015076052.tif 000019
【図１８】
2015076052.tif 000020
【図１９】
2015076052.tif 000021
【図２０】
2015076052.tif 000022
【図２１】
2015076052.tif 000023
【図２２】
2015076052.tif 000024