(57)【要約】【課題】ＯＳによるメモリ管理方法に変更があってもファームウェアがパーシャルダンプを行うこと。【解決手段】ＯＳ１０１のカーネル１０３−２は、ＥＦＩ変数に基づいて、部分ダンプコード１２０−２の格納先となる物理メモリ内の記憶領域を特定する。カーネル１０３−２は、物理メモリの各記憶領域が出力条件に該当するダンプ対象領域か否かを判定可能な部分ダンプコード１２０−２をインタープリタ１１１が実行可能な形式で生成する。カーネル１０３−２は、ＥＦＩ変数に基づく記憶領域に、生成した部分ダンプコード１２０−２を格納する。カーネル１０３−２がパニックになった場合、ＦＷ１０２は、インタープリタ１１１によってＥＦＩ変数に基づく記憶領域に格納された部分ダンプコード１２０−２を実行する。【選択図】図１
2018142079.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータが、
オペレーティングシステムの起動時に、前記オペレーティングシステムによって、前記オペレーティングシステムが管理する第１記憶装置のうち、所定の環境変数の値に基づく記憶領域を特定し、前記第１記憶装置の各記憶領域が出力条件に該当するダンプ対象領域か否かを判定可能なプログラムコードを生成し、生成した前記プログラムコードを特定した前記記憶領域に書き込み、
ダンプ出力指示を受けた実行部によって、前記所定の環境変数の値に基づく前記記憶領域に記憶された前記プログラムコードを実行し、前記プログラムコードの実行結果に基づいて前記第１記憶装置の各記憶領域のうち前記ダンプ対象領域であると判定された記憶領域についてダンプ出力する、
処理を実行することを特徴とするダンプ出力方法。
【請求項２】
前記プログラムコードを生成する処理では、
前記オペレーティングシステムによって、前記第１記憶装置の各記憶領域についての管理用配列と前記出力条件とに基づいて、前記プログラムコードを生成する、
ことを特徴とする請求項１に記載のダンプ出力方法。
【請求項３】
前記コンピュータが、
前記実行部を有するファームウェアによって、前記第１記憶装置に、前記プログラムコードを格納可能な記憶領域を確保し、前記所定の環境変数に確保した前記記憶領域に関する値を設定し、
前記所定の環境変数の値に基づく前記記憶領域を特定する処理では、
前記オペレーティングシステムによって、前記第１記憶装置のうち、設定された前記所定の環境変数の値に基づく前記記憶領域を特定することを特徴とする請求項１に記載のダンプ出力方法。
【請求項４】
前記プログラムコードを生成する処理では、
前記オペレーティングシステムによって、複数の出力条件の各々の出力条件について、前記第１記憶装置の各記憶領域が前記各々の出力条件に該当するダンプ対象領域か否かを判定可能なプログラムコードを生成し、
前記ダンプ対象領域をダンプ出力する処理では、
前記実行部によって、前記各々の出力条件について生成した前記プログラムコードを実行し、前記プログラムコードの実行結果に基づいて、前記第１記憶装置の各記憶領域のうち、前記複数の出力条件のすべての出力条件において前記ダンプ対象領域であると判定した記憶領域をダンプ出力する、
処理を実行することを特徴とする請求項１〜３のいずれか一つに記載のダンプ出力方法。
【請求項５】
前記コンピュータが、
さらに、前記オペレーティングシステムによって、生成した前記プログラムコードを不揮発性の第２記憶装置に書き込み、
前記オペレーティングシステムの起動時に前記オペレーティングシステムのアップデートを検出しなかった場合に、前記オペレーティングシステムによって、前記プログラムコードを生成する処理を行わずに、前記第２記憶装置に記憶された前記プログラムコードを、特定した前記記憶領域に書き込むことを特徴とする請求項１〜４のいずれか一つに記載のダンプ出力方法。
【請求項６】
コンピュータに、
オペレーティングシステムの起動時に、前記オペレーティングシステムによって、前記オペレーティングシステムが管理する第１記憶装置のうち、所定の環境変数の値に基づく記憶領域を特定し、前記第１記憶装置の各記憶領域が出力条件に該当するダンプ対象領域か否かを判定可能なプログラムコードを生成し、生成した前記プログラムコードを特定した前記記憶領域に書き込み、
ダンプ出力指示を受けた実行部によって、前記所定の環境変数の値に基づく前記記憶領域に記憶された前記プログラムコードを実行し、前記プログラムコードの実行結果に基づいて前記第１記憶装置の各記憶領域のうち前記ダンプ対象領域であると判定された記憶領域についてダンプ出力する、
処理を実行させることを特徴とするダンプ出力プログラム。
【請求項７】
オペレーティングシステムの起動時に、前記オペレーティングシステムによって、前記オペレーティングシステムが管理する第１記憶装置のうち、所定の環境変数の値に基づく記憶領域を特定し、前記第１記憶装置の各記憶領域が出力条件に該当するダンプ対象領域か否かを判定可能なプログラムコードを生成し、生成した前記プログラムコードを特定した前記記憶領域に書き込み、
ダンプ出力指示を受け付けた実行部によって、前記所定の環境変数の値に基づく前記記憶領域に記憶された前記プログラムコードを実行し、前記プログラムコードの実行結果に基づいて前記第１記憶装置の各記憶領域のうち前記ダンプ対象領域であると判定された記憶領域についてダンプ出力する、
処理を実行する制御部を有することを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ダンプ出力方法、ダンプ出力プログラム、および情報処理装置に関する。
【背景技術】
【０００２】
従来、コンピュータに不具合が発生したとき、オペレーティングシステムやファームウェアによって物理メモリの記憶内容をダンプ出力し、出力した記憶内容を解析することにより原因または原因箇所を特定する技術がある。オペレーティングシステムは以下ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）と表す。ファームウェアは以下ＦＷ（ＦｉｒｍＷａｒｅ）と表す。ＦＷはＯＳの動作に関係なく動作するため、ＯＳのカーネルがパニックになった場合、ＦＷは、ＯＳがダンプ出力するよりも確実にダンプ出力することができる（例えば、以下特許文献１参照。）。
【０００３】
近年、コンピュータに搭載される物理メモリの容量が大きいと、物理メモリ内の記憶内容をすべてダンプ出力するには時間がかかる。そこで、物理メモリ内の記憶内容の一部の内容をダンプ出力する技術がある。ここで物理メモリ内の記憶内容の一部の内容をダンプ出力することをパーシャルダンプ（ＰＡＲＴＩＡＬ  ＤＵＭＰ）とも称する。ＯＳは、物理メモリの管理を行っているため、物理メモリ内の各領域の記憶内容を把握している。例えば、パーシャルダンプでは、ＯＳが物理メモリ内の所定の領域ごとに予め定められた条件により各領域内の記憶内容のダンプ出力の有無を判定する。
【０００４】
先行技術としては、例えば、物理メモリの記憶内容をダンプ出力する際に、物理メモリの記憶内容を編集するのに使用するコマンド編集情報テーブルを作成し、物理メモリの記憶内容と共にダンプファイルに格納する技術がある（例えば、以下特許文献２参照。）。また、先行技術としては、例えば、主プログラムとダンプ採取プログラムを主記憶装置に記憶し、主プログラム内の命令コードにダンプ採取要求ビットを割り当て、その命令コードのデコード時に、ダンプ採取要求ビットを参照してダンプ採取が要求されていた場合、ダンプ採取プログラムを実行する技術がある（例えば、以下特許文献３参照。）。また、先行技術としては、例えば、ダンプ対象をユーザが事前指定する技術において、ダンプ対象のメモリを所定サイズに分割し、かつダンプ出力が必要か否かを表すオン／オフビットを分割領域ごとに設定しておき、故障発生時にオンが設定された分割領域の記憶内容をダンプ出力する技術がある（例えば、以下特許文献４参照。）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１１−２３２９８６号公報
【特許文献２】特開２００１−３５０６５４号公報
【特許文献３】特開平０５−００６２９４号公報
【特許文献４】特開２００５−３３２４２１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、ＦＷは、物理メモリの管理を行っていないため、パーシャルダンプを行うことが困難な場合がある。例えば、ＦＷがパーシャルダンプを行うためには、ＦＷにＯＳのダンプ出力の判断方法に関するコードを組み込む。ＯＳのアップデートによってＯＳの物理メモリの管理方法が変更されると、ダンプ出力の判断方法が変更される場合がある。このような場合、ＦＷには、変更後のダンプ出力の判断方法に関するコードが組み込まれるようなアップデートが行われなければならない。ＦＷのアップデートが困難であると、ＦＷではパーシャルダンプを行うことができない。
【０００７】
１つの側面では、本発明は、ＯＳによるメモリ管理方法に変更があってもＦＷがパーシャルダンプを行うことができるダンプ出力方法、ダンプ出力プログラム、および情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の一側面によれば、オペレーティングシステムの起動時に、前記オペレーティングシステムによって、前記オペレーティングシステムが管理する第１記憶装置のうち、所定の環境変数の値に基づく記憶領域を特定し、前記第１記憶装置の各記憶領域が出力条件に該当するダンプ対象領域か否かを判定可能なプログラムコードを生成し、生成した前記プログラムコードを特定した前記記憶領域に書き込み、ダンプ出力指示を受けた実行部によって、前記所定の環境変数の値に基づく前記記憶領域に記憶された前記プログラムコードを実行し、前記プログラムコードの実行結果に基づいて前記第１記憶装置の各記憶領域のうち前記ダンプ対象領域であると判定された記憶領域についてダンプ出力するダンプ出力方法、ダンプ出力プログラム、および情報処理装置が提案される。
【発明の効果】
【０００９】
本発明の一態様によれば、ＯＳによるメモリ管理方法に変更があってもＦＷがパーシャルダンプを行うことができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、本発明にかかる情報処理装置の一動作例を示す説明図である。
【図２】図２は、ＯＳのアップデートによるファームウェアのアップデート例を示す説明図である。
【図３】図３は、情報処理装置のハードウェア構成例を示す説明図である。
【図４】図４は、情報処理装置の機能的構成例を示すブロック図である。
【図５】図５は、システム起動時の動作例を示す説明図である。
【図６】図６は、部分ダンプ手法例を示す説明図である。
【図７】図７は、設定ファイルの記憶内容の一例を示す説明図である。
【図８】図８は、ＤＵＭＰ＿ＬＥＶＥＬの値をＯＳに渡す方法例を示す説明図である。
【図９】図９は、物理メモリの管理の一例を示す説明図である。
【図１０】図１０は、ＬＥＶＥＬ１６の判定式の一例を示す説明図である。
【図１１】図１１は、判定式の生成例を示す説明図である。
【図１２】図１２は、論理アドレスから物理アドレスへの変換例を示す説明図である。
【図１３】図１３は、判定式からバイナリコードに変換する一例を示す説明図である。
【図１４】図１４は、部分ダンプコードの書き込み例を示す説明図である。
【図１５】図１５は、ダンプ採取時の動作例を示す説明図である。
【図１６】図１６は、実行例を示す説明図である。
【図１７】図１７は、ＯＳが行う処理手順例を示すフローチャートである。
【図１８】図１８は、ＯＳによる図１７で示した部分ダンプコード生成処理の詳細な説明を示すフローチャートである。
【図１９】図１９は、ＯＳによる図１８に示すＬＥＶＥＬ１６の部分ダンプコードの出力処理手順例を示すフローチャートである。
【図２０】図２０は、ＦＷが起動時に行う処理手順例を示すフローチャートである。
【図２１】図２１は、ＦＷがＯＳのパニック時に行う処理手順例を示すフローチャートである。
【図２２】図２２は、図２１で示したダンプ採取処理の詳細な説明を示すフローチャートである。
【図２３】図２３は、図２２で示したインタープリタ処理の詳細な説明を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下に添付図面を参照して、本発明にかかるダンプ出力方法、ダンプ出力プログラム、および情報処理装置の実施の形態を詳細に説明する。
【００１２】
図１は、本発明にかかる情報処理装置の一動作例を示す説明図である。情報処理装置１００は、ＦＷ１０２とＯＳ１０１とによって動作し、ＦＷ１０２によるパーシャルダンプ出力が可能なコンピュータである。
【００１３】
上述したように、従来、コンピュータに不具合が発生したとき物理メモリの記憶内容をダンプ出力し、出力した記憶内容を解析することにより原因または原因箇所を特定する技術がある。コンピュータの不具合とは、例えば、ＯＳのカーネルがパニックになることを示す。カーネルがパニックになるとは、安全に復旧することができなくなった状態になることを示す。例えば、カーネル１０３は、コンピュータに接続された入出力装置とのやり取りができなくなった場合などにパニックになることがある。
【００１４】
ＯＳとは、コンピュータのオペレーションのためのシステムソフトウェアであり、コンピュータプログラムの集合である。カーネルとは、ＯＳの中核となるソフトウェアである。カーネルは、動作中のプログラムの実行状態を管理したり、ハードウェア資源を管理してアプリケーションソフトウェアがハードウェアの機能を利用する手段を提供する機能を有する。
【００１５】
ここで、例えば、ダンプ出力については、ＯＳまたはＦＷなどが行う。ＦＷは、コンピュータを制御するためのソフトウェアである。ＦＷは、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）などの記憶装置に予め書き込まれてあり、コンピュータに組み込まれたものである。具体的には、ＯＳは、例えば、パニックになったことを検出すると、ダンプ出力を行う。または、ＯＳは、例えば、パニックになったことを検出すると、ＦＷ１０２にコンピュータの制御を渡す。そして、ＦＷは、例えば、ＯＳからコンピュータの制御を渡されると、ダンプ出力を行う。または、ＯＳは、例えば、コンピュータのリセットを行う。ＦＷは、例えば、このリセットの発生によりパニックになったと判断してダンプ出力を行う。
【００１６】
ＦＷはＯＳの動作に関係なく動作するため、カーネルがパニックになった場合、ＦＷは、ＯＳがダンプ出力するよりも確実にダンプ出力することができる。
【００１７】
また、従来、物理メモリの記憶内容の一部をダンプ出力するパーシャルダンプと呼ばれる技術がある。ＯＳは、物理メモリの管理を行っているため、パーシャルダンプを行うことができる。
【００１８】
一方、ＦＷは、物理メモリの管理を行っていないため、パーシャルダンプを行うことができない場合がある。例えば、ＦＷがパーシャルダンプを行うためには、ＯＳのダンプ出力の判断方法に関するコードがＦＷに組み込まれなければならない。そして、ＯＳが、予め定められた記憶領域に、パーシャルダンプに用いられる配列のアドレスなどの情報を記憶させ、ＦＷが、その記憶領域を参照することで、パーシャルダンプを行うことができる。ダンプ出力の判断方法は、ＯＳのアップデートによるＯＳのメモリ管理方法の変更時に変更される場合がある。このような場合、ＦＷには、変更後のダンプ出力の判断方法に関するコードが組み込まれるようなアップデートが行われなければならない。ＦＷのアップデートを行うことが困難であると、ＦＷではパーシャルダンプを行うことができない。このため、ＦＷでは、ダンプ出力に時間がかかるという問題点がある。なお、ＯＳおよびＦＷがアップデートされる例については図２を用いて説明する。
【００１９】
そこで、本実施の形態では、起動時にＯＳ１０１が、物理メモリの各記憶領域が出力条件に該当するかを判定可能なプログラムコードを生成し、ＯＳ１０１のパニック時にＦＷ１０２が、該コードの実行に応じ出力条件に該当する記憶領域をダンプ出力する。これにより、ＯＳ１０１によるメモリ管理方法に変更があってもＦＷ１０２がパーシャルダンプを行うことができる。したがって、ＦＷ１０２によって確実にダンプ出力を行うことができ、ダンプ出力の時間を短縮することができる。
【００２０】
まず、情報処理装置１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、記憶装置、入出力装置などのハードウェアを有する。そして、情報処理装置１００は、ＯＳ１０１とＦＷ１０２とをＣＰＵによって実行することによりコンピュータシステムを実現する。なお、情報処理装置１００のハードウェア構成については図３を用いて説明する。
【００２１】
ＯＳ１０１のカーネル１０３−１は、メモリ管理機能１１０−１を有する。また、ＦＷ１０２は、所定のインタープリタ１１１を有する。
【００２２】
情報処理装置１００に電源の投入や再起動指示の割り込みなどの場合に、情報処理装置１００は起動する。具体的にはＦＷ１０２が起動する。そして、ＦＷ１０２は、パーシャルダンプコードの格納先を物理メモリに確保する。ＦＷ１０２は、確保した記憶領域のアドレスおよびサイズを所定の環境変数に設定する。所定の環境変数とは、例えば、ＦＷ１０２とカーネル１０３−１とが共有で参照可能な領域である。所定の環境変数とは、例えば、ＦＷ１０２に用いられるＵＥＦＩ（Ｕｎｉｆｉｅｄ  Ｅｘｔｅｎｓｉｂｌｅ  Ｆｉｒｍｗａｒｅ  Ｉｎｔｅｒｆａｃｅ）に関する環境変数である。ＵＥＦＩとは、情報処理装置１００の起動前に用いられる様々なインターフェースを提供するための規格である。ＵＦＥＩに関する環境変数としてはＥＦＩ変数などが挙げられる。ＥＦＩ変数とはＯＳ１０１とＦＷ１０２の双方が読み書き可能な変数である。ＥＦＩ変数は、ＯＳ１０１とＦＷ１０２との間で情報交換に用いられる。ここでは、所定の環境変数として、ＥＦＩ変数を例に挙げて説明する。ＦＷ１０２は、例えば、ＥＦＩ変数に、確保した記憶領域のアドレスおよびサイズを設定する。
【００２３】
カーネル１０３−１は、例えばＥＦＩ変数の値に基づく物理メモリ上の記憶領域を特定する。そして、カーネル１０３−１は、カーネル１０３−１が有するパーシャルダンプの論理に基づいてインタープリタ１１１が実行可能な形式で、出力条件に該当するパーシャルダンプ出力対象領域か否かを判定可能なプログラムコードを生成する。このプログラムコードを部分ダンプコードとも称する。そして、カーネル１０３−１は、特定した記憶領域に、生成した部分ダンプコードを格納する。
【００２４】
ここで、カーネル１０３−１がパニックになった場合、ＦＷ１０２は、ＥＦＩ変数の値に基づく記憶領域に格納された部分ダンプコードを実行する。具体的には、ＦＷ１０２は、インタープリタ１１１によって部分ダンプコードを実行する。これにより、ＦＷ１０２は、パーシャルダンプ出力を行うことができる。
【００２５】
ここで、カーネル１０３−１からカーネル１０３−２にアップデートされたとする。カーネル１０３−２は、メモリ管理機能１１０−２を有する。すなわち、ＯＳ１０１のアップデート時にメモリ管理の制御方法が更新されている。なお、情報処理装置１００の再起動によってＯＳ１０１のアップデートは適用される。このため、再起動が行われると、ＦＷ１０２は、部分ダンプコード１２０−２の格納先を物理メモリに確保する。そして、ＦＷ１０２は、確保した記憶領域を示すアドレスおよびサイズをＥＦＩ変数に設定する。ＦＷ１０２は、ＯＳ１０１を起動する。
【００２６】
ＯＳ１０１のカーネル１０３−２は、物理メモリの各記憶領域が、出力条件に該当するダンプ対象領域か否かを判定可能な部分ダンプコード１２０−２を生成する。なお、カーネル１０３−２は、部分ダンプコード１２０−２を、このインタープリタ１１１が実行可能な形式で生成する。そして、カーネル１０３−２は、ＥＦＩ変数の値に基づく記憶領域に、生成した部分ダンプコード１２０−２を格納する。
【００２７】
また、カーネル１０３−２がパニックになった場合、ＦＷ１０２は、インタープリタ１１１によってＥＦＩ変数の値に基づく記憶領域に格納された部分ダンプコード１２０−２を実行する。
【００２８】
このように、ＯＳ１０１のアップデートによるメモリ管理方法に変更があってもＦＷ１０２を変更せずにパーシャルダンプを行うことができる。したがって、ダンプ出力に要する時間の短縮化を図ることができる。
【００２９】
図２は、ＯＳのアップデートによるファームウェアのアップデート例を示す説明図である。カーネル２０１−１は、メモリ管理機能２１０−１を有する。また、パーシャルダンプ出力を行うために、ＦＷ２０２には、メモリ管理機能２１０−１に関するＯＳ依存処理のコード２１１−１が組み込まれる。
【００３０】
カーネル２０１−１はアップデートされてカーネル２０１−２になると、メモリ管理機能２１０−１が更新される場合がある。カーネル２０１−２は、メモリ管理機能２１０−２を有する。カーネル２０１−２にアップデートされた後にＦＷ２０２がパーシャルダンプ出力を行うためには、ＦＷ２０２には、新たにメモリ管理機能２１０−２に関するＯＳ依存処理のコード２１１−２を組み込まなければならない。
【００３１】
（情報処理装置１００のハードウェア構成例）
図３は、情報処理装置のハードウェア構成例を示す説明図である。情報処理装置１００は、ＣＰＵ３０１と、ＲＯＭ３０２と、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）３０３と、ディスクドライブ３０４と、ディスク３０５と、ＮＶＲＡＭ（Ｎｏｎ  Ｖｏｌａｔｉｌｅ  ＲＡＭ）３０６と、を有する。情報処理装置１００は、Ｉ／Ｆ（Ｉｎｔｅｒ／Ｆａｃｅ）３０７と、キーボード３０８と、マウス３０９と、ディスプレイ３１０と、を有する。また、ＣＰＵ３０１と、ＲＯＭ３０２と、ＤＲＡＭ３０３と、ディスクドライブ３０４と、ＮＶＲＡＭ３０６と、Ｉ／Ｆ３０７と、キーボード３０８と、マウス３０９と、ディスプレイ３１０とは、バス３００によってそれぞれ接続される。
【００３２】
ここで、ＣＰＵ３０１は、情報処理装置１００の全体の制御を司る。ＲＯＭ３０２は、ＦＷ１０２などのプログラムを記憶する。ＤＲＡＭ３０３は、ＣＰＵ３０１のワークエリアとして使用される物理メモリである。ＤＲＡＭ３０３は、第１記憶装置である。ディスクドライブ３０４は、ＣＰＵ３０１の制御にしたがってディスク３０５に対するデータのリード／ライトを制御する。ディスク３０５は、ディスクドライブ３０４の制御で書き込まれたデータを記憶する第２記憶装置である。具体的には、ディスク３０５は、例えば、ユーザによって設定される設定ファイルや本実施の形態において出力されるダンプファイルなどが記憶する。ディスク３０５としては、磁気ディスク、光ディスクなどが挙げられる。
【００３３】
ＮＶＲＡＭ３０６は、不揮発性メモリである。ＮＶＲＡＭ３０６は、ハードウェアの設定情報などを記憶する小容量の第３記憶装置である。ＮＶＲＡＭ３０６は、例えば、上述したＥＦＩ変数の値などを記憶する。
【００３４】
Ｉ／Ｆ３０７は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク３１１に接続され、このネットワーク３１１を介して他の装置に接続される。そして、Ｉ／Ｆ３０７は、ネットワーク３１１と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ３０７には、例えばモデムやＬＡＮアダプタなどを採用することができる。
【００３５】
キーボード３０８やマウス３０９は、ユーザの操作により、各種データの入力を受け付けるインターフェースである。ディスプレイ３１０は、ＣＰＵ３０１の指示により、データを出力するインターフェースである。
【００３６】
また、図示を省略するが、情報処理装置１００には、カメラから画像や動画を取り込む入力装置やマイクから音声を取り込む入力装置が設けられていてもよい。また、図示を省略するが、情報処理装置１００には、プリンタなどの出力装置が設けられていてもよい。
【００３７】
また、本実施の形態では、情報処理装置１００のハードウェア構成として、パーソナル・コンピュータを例に挙げているが、これに限らず、サーバなどであってもよい。情報処理装置１００がサーバである場合、情報処理装置１００と、ユーザが操作可能な装置やディスプレイ３１０などと、がネットワーク３１１を介して接続されてもよい。
【００３８】
（情報処理装置１００の機能的構成例）
図４は、情報処理装置の機能的構成例を示すブロック図である。情報処理装置１００は、生成部４０１と、確保部４０２と、実行部４０３と、を有する。
【００３９】
生成部４０１から実行部４０３までの制御部４００の処理は、例えば、図３に示すＣＰＵ３０１がアクセス可能なＲＯＭ３０２、ディスク３０５などの記憶装置に記憶されたプログラムにコーディングされている。ＣＰＵ３０１が記憶装置から該プログラムを読み出して、プログラムにコーディングされている処理を実行する。これにより、制御部４００の処理が実現される。より詳細には、生成部４０１の処理は、例えば、ＯＳ１０１によって実現される。確保部４０２および実行部４０３の処理は、ＦＷ１０２によって実現される。
【００４０】
また、確保部４０２は、ＦＷ１０２が起動すると、ＯＳ１０１が管理する物理メモリからダンプ対象領域か否かを判定可能なプログラムコードを格納可能な格納先の領域を確保する。所定の環境変数とは、例えば、ＥＦＩ変数４１３である。そして、確保部４０２は、確保した記憶領域に関する値を所定の環境変数に設定する。確保した記憶領域に関する値とは、例えば、確保した記憶領域のアドレスやサイズである。
【００４１】
生成部４０１は、ＯＳ１０１の起動時に、ＯＳ１０１によって、ＯＳ１０１が管理する物理メモリのうち、所定の環境変数の値に基づく記憶領域を特定する。生成部４０１は、物理メモリの各記憶領域が出力条件に該当するダンプ対象領域か否かを判定可能なプログラムコードを生成する。このプログラムコードは部分ダンプコード４１２とも称する。具体的には、設定ファイル４１１を読み込む。設定ファイル４１１は、ディスク３０５などに記憶されている。設定ファイル４１１については、ユーザによって指定されたダンプレベルが記述されている。ダンプレベルとは、どのようなデータをダンプ出力するかのダンプ採取方法を指定可能な値である。ダンプレベルとしては、例えば、ＬＥＶＥＬ１，２，４，８，１６などのように指定可能である。各ダンプレベルを指定した場合におけるダンプ採取方法については、図６を用いて説明する。設定ファイル４１１の設定例については図７を用いて説明する。
【００４２】
具体的には、後述するダンプレベルがＬＥＶＥＬ２，４，８，１６の場合、生成部４０１は、物理メモリの各記憶領域についての管理用配列とダンプレベルとに基づいて、プログラムコードを生成する。管理用配列とは、例えば、ＯＳによって管理される論理メモリ空間と物理メモリ空間とを管理するためのページテーブルである。管理用配列例については、図９を用いて後述する。管理用配列である。後述するダンプレベルがＬＥＶＥＬ１の場合、生成部４０１は、ダンプレベルに基づいてプログラムコードを生成する。そして、生成部４０１は、生成したプログラムコードを特定した記憶領域に書き込む。
【００４３】
そして、実行部４０３は、ダンプ出力指示を受けると、所定の環境変数の値に基づく記憶領域に記憶された部分ダンプコード４１２を実行する。そして、実行部４０３は、部分ダンプコード４１２の実行結果に基づいて物理メモリの各記憶領域のうちダンプ対象領域であると判定された記憶領域についてダンプ出力する。ダンプ出力による出力結果は、例えば、ディスク３０５などに記憶される。
【００４４】
また、複数の出力条件がある場合、生成部４０１は、複数の出力条件の各々の出力条件について、各々の出力条件に該当するダンプ対象領域か否かを判定可能な部分ダンプコード４１２を出力する。実行部４０３は、各部分ダンプコード４１２を実行する。そして、実行部４０３は、すべての出力条件においてダンプ対象領域であると判定された記憶領域についてダンプ出力する。また、実行部４０３は、いずれかの出力条件においてダンプ対象領域でないと判定された記憶領域についてダンプ出力しない。
【００４５】
また、生成部４０１は、生成した部分ダンプコード４１２をディスク３０５などに記憶しておいてもよい。そして、生成部４０１は、ＯＳ１０１の起動時にＯＳのアップデートが検出されなかった場合、部分ダンプコード４１２を生成せずに、ディスク３０５に記憶された部分ダンプコード４１２をＥＦＩ変数４１３に基づく記憶領域に格納してもよい。これにより、ＯＳのアップデートがない場合にＯＳが起動される都度、部分ダンプコード４１２を生成しなくてよいため、部分ダンプコード４１２の生成に要する時間の短縮化を図ることができる。
【００４６】
以上の各部の処理内容を踏まえて、ＯＳ１０１やＦＷ１０２の詳細な動作例について説明する。まず、情報処理装置１００のシステムに対する電源投入や電源リセット時におけるＯＳ１０１やＦＷ１０２の処理について説明する。
【００４７】
図５は、システム起動時の動作例を示す説明図である。情報処理装置１００のシステムに対する電源投入や電源リセット時に、図５に示すような処理が行われる。
【００４８】
まず、ＦＷ１０２は、情報処理装置１００のソフトウェアシステムを初期化する。次に、図５（１）に示すように、ＦＷ１０２は、部分ダンプコード４１２の格納領域５００を物理メモリ上に確保する。そして、ＦＷ１０２は、確保した格納領域５００のアドレスおよびサイズを、ＮＶＲＡＭ３０６内のＥＦＩ変数４１３に設定する。次に、図５（２）に示すように、ＦＷ１０２は、ＯＳ１０１を起動する。これにより、ＦＷ１０２はＯＳ１０１に情報処理装置１００の制御を渡すことができる。
【００４９】
次に、図５（３）に示すように、ＯＳ１０１は、ＦＷ１０２から制御を渡されると、部分ダンプ手法が指定された設定ファイル４１１に基づいて部分ダンプコード４１２を生成する。そして、ＯＳ１０１は、生成した部分ダンプコード４１２を、物理メモリのうち、ＥＦＩ変数４１３に設定された値に基づく格納領域５００に配置する。そして、ＯＳ１０１は、情報処理装置１００のシステムを運用する。
【００５０】
次に、ＯＳ１０１による部分ダンプコード４１２の生成処理の詳細について説明する。具体的にＯＳ１０１は、部分ダンプコード４１２の生成処理として、（ａ）設定ファイル４１１の読み込みと、（ｂ）部分ダンプコード４１２の生成と、（ｃ）部分ダンプコード４１２の書き込みと、の大きく３つの処理を行う。まず、図６を用いて、ユーザが指定可能な部分ダンプ手法例を説明する。そして、図７を用いて、部分ダンプ手法がユーザによって指定された設定ファイル４１１の一例を説明する。
【００５１】
図６は、部分ダンプ手法例を示す説明図である。ダンプレベルとは、どのようなデータをダンプ出力するかを指定可能な値である。ダンプレベルは、例えば、０〜３１の値によって指定可能とする。「０ｘ１」（ＬＥＶＥＬ１）の場合、ゼロページを採取しないことを指定可能である。すなわち、ゼロページ以外のページを採取することができる。
【００５２】
「０ｘ２」（ＬＥＶＥＬ２）の場合、非プライベートのページキャッシュを採取しないことを指定可能である。「０ｘ４」（ＬＥＶＥＬ４）の場合、プライベートのページキャッシュを採取しないことを指定可能である。ここで、ページキャッシュを採取しないとは、ディスク３０５などから取得されたデータを採取しないことを示す。また、非プライベートのページとは、例えばＬｉｎｕｘ（登録商標）などのであれば内部の管理用の情報であり、プライベートページとは、内部の管理用以外の情報である。
【００５３】
「０ｘ８」（ＬＥＶＥＬ８）の場合、ユーザページを採取しないことを指定可能である。ユーザページとは、物理メモリの各領域にはカーネル１０３メモリ空間とユーザメモリ空間とが割り当てられてあり、ユーザページとは、ユーザメモリ空間である。「０ｘ１０」（ＬＥＶＥＬ１６）の場合、未使用ページを採取しないことを指定可能である。採取方法については、組み合わせることが可能である。
【００５４】
図７は、設定ファイルの記憶内容の一例を示す説明図である。設定ファイル４１１では、ＤＵＭＰ＿ＬＥＶＥＬの値に「５」が設定されている。ＤＵＭＰ＿ＬＥＶＥＬには、どのようなデータを採取するかの図６に示した数値が設定される。「５」は「０ｘ１」と「０ｘ４」との組み合わせである。このため、図７の例では、ゼロページおよびプライベートのページキャッシュを採取しないことが指定されている。数値が表す採取方法をダンプレベルとも称する。「０ｘ数値」の場合、ＬＥＶＥＬ数値と表す。具体的には「０ｘ１」の採取方法は、ＬＥＶＥＬ１とも表す。このように、ＯＳ１０１は、生成部４０１によってＬＥＶＥＬ１とＬＥＶＥＬ４との２つの部分ダンプコード４１２を生成する。
【００５５】
図８は、ＤＵＭＰ＿ＬＥＶＥＬの値をＯＳに渡す方法例を示す説明図である。情報処理装置１００のユーザが、スクリプトなどによって設定ファイル４１１を読み込む。そして、情報処理装置１００のユーザが、設定ファイル４１１に設定されたＤＵＭＰ＿ＬＥＶＥＬの値をＯＳ１０１に渡す。または、情報処理装置１００が、設定ファイル４１１に設定されたＤＵＭＰ＿ＬＥＶＥＬの値をＯＳ１０１に渡すようなコードを実行することによりＤＵＭＰ＿ＬＥＶＥＬの値を自動的にＯＳ１０１に渡してもよい。渡す方法としては、例えば、図８に示すように、Ｌｉｎｕｘの場合、ｐｒоｃファイルシステムを利用してもよい。ｐｒоｃファイルシステムは、ディレクトリと仮想ファイルで構成される。仮想ファイルは、例えば、カーネル１０３からの情報をユーザに提示する手段と、ユーザからカーネル１０３に情報を送信する手段とになる。
【００５６】
次に、部分ダンプコード４１２の生成処理の詳細な説明の前に、ＯＳ１０１のカーネル１０３による物理メモリの管理方法の一例について説明する。
【００５７】
図９は、物理メモリの管理の一例を示す説明図である。ここで、カーネル１０３は、図９に示すように物理メモリを管理しているとする。カーネル１０３は、例えば、ページと呼ばれる４ＫＢｙｔｅのサイズの単位に物理メモリを分割して管理する。ページには、下位アドレスから順に０、１、２というように通し番号が付される。この番号をＰＦＮ（Ｐａｇｅ  Ｆｒａｍｅ  Ｎｕｍｂｅｒ、ページフレーム番号またはページ番号）と称する。
【００５８】
ＯＳ１０１は、物理メモリ空間から論理メモリ空間への対応付けを管理用配列９００によって管理する。管理用配列９００は、例えば、ＣＰＵ３０１とバス３００との間に設けられるメモリ管理ユニット（図示省略）が有する記憶領域に記憶されてある。例えば、ＯＳ１０１は、ＰＦＮがＮのページを管理用配列９００のＮ番目の要素９０１によって管理する。管理用配列９００の各要素９０１には、要素９０１に対応するページの情報が格納されている。例えば、要素９０１内のメンバｄａｔａ２の２ビット目は、要素９０１に対応するページの使用状況を示す。例えば、このビットが０である場合、要素９０１に対応するページは未使用であることを示し、このビットが１である場合、要素９０１に対応するページは使用中であることを示す。
【００５９】
このメモリ管理方法を前提に部分ダンプコード４１２の生成処理について説明する。
【００６０】
ＯＳ１０１は、例えば、生成部４０１によって、指定ファイルで指定されたダンプレベルに応じた判定式を生成する。ここで、判定式とは、あるページ番号が与えられたときに、そのページ番号が示すページをダンプ出力するか否かを判断するための条件式である。生成部４０１は、この判定式に基づいて部分ダンプコード４１２を生成する。
【００６１】
ダンプレベルがＬＥＶＥＬ１の場合、生成部４０１は、指定されたページ番号のページの記憶内容が０である場合にダンプ対象領域でなく、指定されたページ番号のページの記憶内容が０でない場合にダンプ対象領域であると判定する判定式を生成する。後述するダンプレベルがＬＥＶＥＬ２，４，８，１６の場合、生成部４０１は、管理用配列９００とダンプレベルとに基づいて、プログラムコードを生成する。ダンプレベルに応じて、管理用配列９００に含まれるビットを参照してビットの値に基づいてダンプ対象領域か否かを判定する判定式を生成する。なお、ＯＳ１０１は、ダンプレベル別に、判定式を生成して部分ダンプコード４１２を生成する。
【００６２】
次に、図１０〜図１３を用いて、ＬＥＶＥＬ１６の部分ダンプコード４１２を生成する例について説明する。
【００６３】
図１０は、ＬＥＶＥＬ１６の判定式の一例を示す説明図である。判定式１０００は、条件を満たす場合、戻り値としてＴＲＵＥが返され、条件を満たさない場合、戻り値としてＦＡＬＳＥが返される。判定式１０００に含まれるＰは、判定対象のページ番号が入力される。Ｘは、管理用配列９００の先頭のアドレスである。Ａは、要素９０１のサイズである。Ｏは、要素９０１のｄａｔａ２のオフセットである。Ｆは、要素９０１のｄａｔａ２のページ使用状況を表すビットの位置である。
【００６４】
具体的に図１０の条件式では、Ｐが示すページに対応する管理用配列９００の要素９０１に含まれるｄａｔａ２のページ使用状況を表すビットが１であれば、戻り値としてＴＲＵＥが返され、このビットが０であれば、戻り値としてＦＡＬＳＥが返される。
【００６５】
次に、ＯＳ１０１は、生成部４０１によって、判定式１０００を静的または動的に生成する。静的に生成するとは、ダンプレベルごとに予め判定式１０００をディスク３０５などの記憶装置に記憶しておき、ダンプレベルがＬＥＶＥＬ１６の場合に、ＯＳ１０１が、ディスク３０５から判定式１０００を取得することにより生成することを示す。一方、動的に生成するとは、ダンプレベルがＬＥＶＥＬ１６に指定される都度、ＯＳ１０１が、判定式１０００を生成することを示す。図１１を用いて判定式１０００を動的に生成する例について説明する。
【００６６】
図１１は、判定式の生成例を示す説明図である。ＯＳ１０１は、例えば、生成部４０１によって、文字列として判定式１１０１を生成可能なプログラム１１００を生成して、このプログラムをコンパイルすることにより判定式１１０１を生成する。
【００６７】
図１２は、論理アドレスから物理アドレスへの変換例を示す説明図である。次に、ＯＳ１０１は、判定式１１０１に論理アドレスが含まれている場合、生成部４０１によって、論理アドレスを物理アドレスに変換する。これにより、判定式１２００が生成される。ＯＳ１０１は、論理アドレスから物理アドレスに変換する処理に、ＯＳ１０１のアドレス変換機構を用いればよい。Ｌｉｎｕｘの場合に、ＯＳ１０１は、例えば、論理アドレスから固定オフセット（例えば、「０ｘｆｆｆｆｆｆｆｆ８０００００００」）を減算することにより物理アドレスに変換してもよい。ＯＳ１０１は、ページテーブルである管理用配列９００を辿って変換してもよい。なお、Ｌｉｎｕｘの場合、論理アドレスから物理アドレスへの変換方法は複数あり、特に限定しない。
【００６８】
次に、ＯＳ１０１は、生成部４０１によって、判定式１２００をコード化するコード変換を行う。ここでのコード変換の方法は、プログラムコードをコンパイラによってバイナリコードに変換する方法と同じである。具体的には、ＯＳ１０１は、判定式１２００をバイナリ変換する。
【００６９】
図１３は、判定式からバイナリコードに変換する一例を示す説明図である。ＯＳ１０１は、生成部４０１によって、判定式１２００を仮想マシンのコードである中間コード１３００に変換する。そして、ＯＳ１０１は、生成部４０１によって、中間コード１３００をコード化してバイナリコード１３０１に変換する。このバイナリコード１３０１が、部分ダンプコード４１２である。そして、ＯＳ１０１は、生成部４０１によって、ＦＷ１０２から通知されたＥＦＩ変数４１３に格納されたアドレスが示す物理メモリの格納領域５００に、生成したＬＥＶＥＬ１６の部分ダンプコード４１２を書き込む。
【００７０】
図１４は、部分ダンプコードの書き込み例を示す説明図である。ＯＳ１０１は、生成部４０１によって、ＥＦＩ変数４１３に含まれるアドレスが示す物理メモリの格納領域５００に、ヘッダとして管理情報１４００を書き込むとともに、部分ダンプコード４１２を書き込む。管理情報１４００には、例えば、部分ダンプコード４１２の数、チェックサムなどが含まれる。
【００７１】
例えば、図７に示す設定ファイル４１１では、「ＤＵＭＰ＿ＬＥＶＥＬ＝５」であるため、ＬＥＶＥＬ１の部分ダンプコード４１２と、ＬＥＶＥＬ４の部分ダンプコード４１２とが生成される。図１４に示すように、部分ダンプコード４１２［０］と、部分ダンプコード４１２［１］のように、生成された２つの部分ダンプコード４１２が物理メモリに書き込まれる。
【００７２】
次に、ダンプ採取時のＯＳ１０１とＦＷ１０２の処理について説明する。図１５を用いて、ダンプ採取時の動作例について説明する。また、図１６を用いて、インタープリタ１１１による実行例について説明する。
【００７３】
図１５は、ダンプ採取時の動作例を示す説明図である。ＦＷ１０２は、ＥＦＩ変数４１３に設定されたアドレスおよびサイズに基づいて、部分ダンプコード４１２を読み出す。ＦＷ１０２は、実行部４０３によって、インタープリタ１１１に、部分ダンプコード４１２をロードする。そして、図１５（１）に示すように、ＦＷ１０２は、インタープリタ１１１によって、ロードした部分ダンプコード４１２を解釈して実行する。
【００７４】
具体的には、ＦＷ１０２は、インタープリタ１１１にページ番号を入力として与えて、インタープリタ１１１に部分ダンプコード４１２を実行させる。ＦＷ１０２は、ページ番号を入力するために、ＦＷ１０２が管理しているＤＲＡＭ３０３のファーム領域内に含まれるメモリ情報から、最大ＰＦＮを取得する。そして、ＦＷ１０２は、０番から最大ＰＦＮまで順にインタープリタ１１１に入力する。
【００７５】
実行部４０３のインタープリタ１１１は、入力されたページ番号が示すページ別に、各部分ダンプコード４１２を解釈して実行する。インタープリタ１１１は、各部分ダンプコード４１２の戻り値がＴＲＵＥである場合、その部分ダンプコード４１２のダンプレベルにおいてページ番号が示すページがダンプ対象領域であると判断する。インタープリタ１１１は、各部分ダンプコード４１２の戻り値がＦＡＬＳＥである場合、その部分ダンプコード４１２のダンプレベルにおいてページ番号が示すページがダンプ対象領域でないと判断する。
【００７６】
インタープリタ１１１は、すべての部分ダンプコード４１２において戻り値がＴＲＵＥの場合に、ページ番号についての戻り値としてＦＷ１０２に対してＴＲＵＥを返す。すなわち、インタープリタ１１１は、すべての部分ダンプコード４１２においてダンプ対象領域であると判断されたページをＦＷ１０２にダンプ出力させるようにする。インタープリタ１１１は、いずれかの部分ダンプコード４１２において戻り値がＦＡＬＳＥの場合に、ページ番号についての戻り値としてＦＷ１０２に対してＦＡＬＳＥを返す。すなわち、インタープリタ１１１は、いずれかの部分ダンプコード４１２においてダンプ対象領域でないと判断されたページをＦＷ１０２にダンプ出力させないようにする。
【００７７】
そして、図１５（２）に示すように、ＦＷ１０２は、ページ番号が示すページ別に、インタープリタ１１１からの戻り値に応じて、ダンプ出力を行う。ＦＷ１０２は、ＴＲＵＥであれば、ページ番号が示すページをダンプ出力する。一方、ＦＷ１０２は、ＦＡＬＳＥであれば、ページ番号が示すページをダンプ出力しない。次に、図１６を用いて、インタープリタ１１１による実際の実行例を示す。
【００７８】
図１６は、実行例を示す説明図である。図１６では、ＰＦＮとして１０が入力される場合の実行例を示す。ＦＷ１０２は、実行部４０３のインタープリタ１１１によって、部分ダンプコード４１２であるバイナリコード１３０１を解釈しながら実行する。図１６に示すように、ＦＷ１０２は、バイナリコード１３０１を順に解釈するとともに、インタープリタ１１１内の仮想マシンによって解釈後のコードを実行してもよい。
【００７９】
例えば、インタープリタ１１１内の仮想マシンでは、命令コード（１）の実行により、ＩＮが１０となり、ＧＲ０にＩＮの値が設定される。次に、インタープリタ１１１内仮想マシンでは、命令コード（２）の実行により、ＧＲ１に「０ｘ０００００００００７６５４３２１」が設定される。インタープリタ１１１内仮想マシンでは、その後も同様に命令コードを実行する。そして、インタープリタ１１１内仮想マシンでは、命令コード（３）の実行により、ＯＵＴの内容を戻り値としてＦＷ１０２へ渡す。例えばＯＵＴの内容が０の場合、ＦＡＬＳＥを示し、ＯＵＴの内容が１の場合、ＴＲＵＥを示す。
【００８０】
上述したように、インタープリタ１１１からの戻り値に応じて、ＦＷ１０２はパーシャルダンプ出力を行うことができる。
【００８１】
また、上述した例では、生成部４０１が部分ダンプコード４１２として仮想マシンのコードを生成し、実行部４０３のインタープリタ１１１は、インタープリタ１１１内の仮想マシンを内部に生成して仮想マシンのコードを実行する。すなわち、生成部４０１と実行部４０３のインタープリタ１１１は、仮想マシンの仕様を一致させる。仮想マシンの仕様としては、例えば、使用可能なレジスタの数、レジスタのサイズ、命令体系などである。本実施の形態では、インタープリタ１１１の仮想マシンを使用する例に限らない。例えば、生成部４０１は、図１２に示した判定式をスクリプトとし、スクリプトを部分ダンプコード４１２として生成してもよい。すなわち生成部４０１は、判定式の文字列そのものを部分ダンプコード４１２として生成してもよい。このような部分ダンプコード４１２の場合、インタープリタ１１１は、文字列であるスクリプトを解釈可能な機能を有する。そして、インタープリタ１１１は、部分ダンプコード４１２に含まれる文字列を解釈して実行する。
【００８２】
また、生成部４０１は、インタープリタ１１１の仮想マシンのコードを部分ダンプコード４１２として生成する代わりに、ＣＰＵ３０１が解釈可能な実命令コードを部分ダンプコード４１２として生成してもよい。実命令コードの場合、実行部４０３は、インタープリタ１１１を用いずに、部分ダンプコード４１２を関数呼び出しのように呼び出して、直接実行すればよい。
【００８３】
（情報処理装置１００が行う処理手順例を示すフローチャート）
次に、ＯＳ１０１とＦＷ１０２とのそれぞれが行う処理手順について説明する。ＯＳ１０１が行う処理手順については図１７〜１９を用いて説明する。次に、ＦＷ１０２が行う処理手順については図２０〜図２３を用いて説明する。
【００８４】
（ＯＳ１０１が行う処理手順例を示すフローチャート）
図１７は、ＯＳが行う処理手順例を示すフローチャートである。ＯＳ１０１は、ＦＷ１０２から制御を渡される（ステップＳ１７０１）。次に、ＯＳ１０１は、ＥＦＩ変数４１３の値に基づく格納領域５００を特定する（ステップＳ１７０２）。次に、ＯＳ１０１は、部分ダンプコード生成処理を行う（ステップＳ１７０３）。ＯＳ１０１は、物理メモリのうち、ＦＷ１０２から通知されたＥＦＩ変数４１３の値に基づく格納領域５００に、生成した部分ダンプコード４１２を格納する（ステップＳ１７０４）。
【００８５】
ＯＳ１０１は、運用を行う（ステップＳ１７０５）。ここで、ＯＳ１０１が運用を行うとは、ユーザが使用可能な状態になっていることを示す。次に、ＯＳ１０１は、カーネル１０３のパニックの発生を検出し（ステップＳ１７０６）、一連の処理を終了する。ステップＳ１７０５の後に、ＯＳ１０１は、ＦＷ１０２に情報処理装置１００の制御を渡した後に、一連の処理を終了してもよい。これにより、ＦＷ１０２は起動する。また、ステップＳ１７０５の後に、ＯＳ１０１は、カーネル１０３のパニックによって終了することと、ダンプ出力指示を受け付けることとをディスプレイ３１０などに出力した後に、一連の処理を終了してもよい。そして、例えば、ユーザは、ディスプレイ３１０などの表示内容に基づいて入力装置を介してＦＷ１０２を起動する指示を入力してもよい。
【００８６】
図１８は、ＯＳによる図１７で示した部分ダンプコード生成処理の詳細な説明を示すフローチャートである。ＯＳ１０１は、設定ファイル４１１を取得する（ステップＳ１８０１）。ＯＳ１０１は、設定ファイル４１１で指定されたダンプレベルがＬＥＶＥＬ１を示すか否かを判断する（ステップＳ１８０２）。
【００８７】
ダンプレベルがＬＥＶＥＬ１を示すと判断された場合（ステップＳ１８０２：ＴＲＵＥ）、ＯＳ１０１は、ＬＥＶＥＬ１の部分ダンプコード４１２の出力処理を行い（ステップＳ１８０３）、ステップＳ１８０４へ移行する。ダンプレベルがＬＥＶＥＬ１を示さないと判断された場合（ステップＳ１８０２：ＦＡＬＳＥ）、ＯＳ１０１は、設定ファイル４１１で指定されたダンプレベルがＬＥＶＥＬ２を示すか否かを判断する（ステップＳ１８０４）。
【００８８】
ダンプレベルがＬＥＶＥＬ２を示すと判断された場合（ステップＳ１８０４：ＴＲＵＥ）、ＯＳ１０１は、ＬＥＶＥＬ２の部分ダンプコード４１２の出力処理を行い（ステップＳ１８０５）、ステップＳ１８０６へ移行する。ダンプレベルがＬＥＶＥＬ２を示さないと判断された場合（ステップＳ１８０４：ＦＡＬＳＥ）、ＯＳ１０１は、設定ファイル４１１で指定されたダンプレベルがＬＥＶＥＬ４を示すか否かを判断する（ステップＳ１８０６）。
【００８９】
ダンプレベルがＬＥＶＥＬ４を示すと判断された場合（ステップＳ１８０６：ＴＲＵＥ）、ＯＳ１０１は、ＬＥＶＥＬ４の部分ダンプコード４１２の出力処理を行い（ステップＳ１８０７）、ステップＳ１８０８へ移行する。ダンプレベルがＬＥＶＥＬ４を示さないと判断された場合（ステップＳ１８０６：ＦＡＬＳＥ）、ＯＳ１０１は、設定ファイル４１１で指定されたダンプレベルがＬＥＶＥＬ８を示すか否かを判断する（ステップＳ１８０８）。
【００９０】
ダンプレベルがＬＥＶＥＬ８を示すと判断された場合（ステップＳ１８０８：ＴＲＵＥ）、ＯＳ１０１は、ＬＥＶＥＬ８の部分ダンプコード４１２の出力処理を行い（ステップＳ１８０９）、ステップＳ１８１０へ移行する。ダンプレベルがＬＥＶＥＬ８を示さないと判断された場合（ステップＳ１８０８：ＦＡＬＳＥ）、ＯＳ１０１は、設定ファイル４１１で指定されたダンプレベルがＬＥＶＥＬ１６を示すか否かを判断する（ステップＳ１８１０）。
【００９１】
ダンプレベルがＬＥＶＥＬ１６を示すと判断された場合（ステップＳ１８１０：ＴＲＵＥ）、ＯＳ１０１は、ＬＥＶＥＬ１６の部分ダンプコード４１２の出力処理を行い（ステップＳ１８１１）、一連の処理を終了する。ダンプレベルがＬＥＶＥＬ１６を示さないと判断された場合（ステップＳ１８１０：ＦＡＬＳＥ）、ＯＳ１０１は、一連の処理を終了する。
【００９２】
図１８では、ＬＥＶＥＬ１、ＬＥＶＥＬ２、ＬＥＶＥＬ４、ＬＥＶＥＬ８、ＬＥＶＥＬ１６の順に判断と生成との処理を行う例を示したが、この順番は特に限定しない。
【００９３】
図１９は、ＯＳによる図１８に示すＬＥＶＥＬ１６の部分ダンプコードの出力処理手順例を示すフローチャートである。ここでは、図１８に示したダンプレベルごとの各部分ダンプコード４１２の出力手順のうちステップＳ１８１１に示したＬＥＶＥＬ１６の部分ダンプコード４１２の出力処理手順について説明する。
【００９４】
まず、ＯＳ１０１は、ＬＥＶＥＬ１６の判定式を生成する（ステップＳ１９０１）。ステップＳ１９０１において、上述したように、ＯＳ１０１は、例えば、図１１に示したように文字列として判定式を生成する。次に、ＯＳ１０１は、判定式に含まれる論理アドレスから物理アドレスに変換する（ステップＳ１９０２）。変換例は図１２に示す。ステップＳ１９０２において、上述したように、ＯＳ１０１は、論理アドレスから固定オフセットを減算することにより物理アドレスに変換してもよい。ＯＳ１０１は、ページテーブルを辿ることにより論理アドレスから物理アドレスに変換してもよい。
【００９５】
次に、ＯＳ１０１は、変換後の判定式をコード変換し（ステップＳ１９０３）、一連の処理を終了する。ステップＳ１９０３において、上述したように、ＯＳ１０１は、インタープリタ１１１が解釈可能な中間コードに変換する。そして、ステップＳ１９０３において、ＯＳ１０１は、中間コードをバイトコードに変換する。このバイトコードは部分ダンプコード４１２である。
【００９６】
図２０は、ＦＷが起動時に行う処理手順例を示すフローチャートである。ＦＷ１０２は、部分ダンプコード４１２の格納領域５００を物理メモリ上に確保する（ステップＳ２００１）。ＦＷ１０２は、物理メモリ上に確保した記憶領域のアドレスおよびサイズをＮＶＲＡＭ３０６上のＥＦＩ変数４１３に設定する（ステップＳ２００２）。ＦＷ１０２は、ＯＳ１０１に制御を渡し（ステップＳ２００３）、一連の処理を終了する。
【００９７】
図２１は、ＦＷがＯＳのパニック時に行う処理手順例を示すフローチャートである。まず、ＦＷ１０２は、ＯＳ１０１から制御を渡される（ステップＳ２１０１）。そして、ＦＷ１０２は、ダンプ採取処理を行う（ステップＳ２１０２）。次に、ＦＷ１０２は、情報処理装置１００の再起動を指示し（ステップＳ２１０３）、一連の処理を終了する。
【００９８】
図２２は、図２１で示したダンプ採取処理の詳細な説明を示すフローチャートである。ここでは、インタープリタ１１１によって部分ダンプコード４１２を実行する場合の例について説明する。
【００９９】
ＦＷ１０２は、インタープリタ１１１に部分ダンプコード４１２をロードする（ステップＳ２２０１）。ＦＷ１０２は、ｉ＝０とする（ステップＳ２２０２）。ｉは、ページ番号を示すインクリメント演算子である。
【０１００】
ＦＷ１０２は、インタープリタ１１１によるｉを入力としてインタープリタ処理を行う（ステップＳ２２０３）。次に、ＦＷ１０２は、ｉを入力としたインタープリタ処理の戻り値がＴＲＵＥかＦＡＬＳＥかを判断する（ステップＳ２２０４）。ここで、図２３で後述するように、ページｉが、いずれか一つの部分ダンプコード４１２の実行によってダンプ対象領域でないと判断された場合、インタープリタ処理の戻り値としてＦＡＬＳＥが返される。ページｉが、すべての部分ダンプコード４１２の実行によってダンプ対象領域であると判断された場合、インタープリタ処理の戻り値としてＴＲＵＥが返される。
【０１０１】
戻り値がＴＲＵＥの場合（ステップＳ２２０４：ＴＲＵＥ）、ＦＷ１０２は、ページｉのダンプ出力を行い（ステップＳ２２０５）、ステップＳ２２０６へ移行する。戻り値がＦＡＬＳＥの場合（ステップＳ２２０４：ＦＡＬＳＥ）、ＦＷ１０２は、ｉが最大ＰＦＮか否かを判断する（ステップＳ２２０６）。
【０１０２】
ｉが最大ＰＦＮでないと判断された場合（ステップＳ２２０６：Ｎｏ）、ＦＷ１０２は、ｉ＝ｉ＋１とし（ステップＳ２２０７）、ステップＳ２２０３へ戻る。ｉが最大ＰＦＮであると判断された場合（ステップＳ２２０６：Ｙｅｓ）、ＦＷ１０２は、一連の処理を終了する。
【０１０３】
図２３は、図２２で示したインタープリタ処理の詳細な説明を示すフローチャートである。ＦＷ１０２は、ｊ＝０とする（ステップＳ２３０１）。ｊは、部分ダンプコード４１２を指定するためのインクリメント演算子である。ＦＷ１０２は、インタープリタ１１１によって、入力ｉに対して、部分ダンプコード４１２［ｊ］を実行する（ステップＳ２３０２）。
【０１０４】
ＦＷ１０２は、実行結果はＴＲＵＥであるかＦＡＬＳＥであるかを判定する（ステップＳ２３０３）。ここで、部分ダンプコード４１２の実行によって、ページｉがダンプ対象領域であれば、実行結果は、ＴＲＵＥであり、ページｉがダンプ対象領域でなければ、実行結果は、ＦＡＬＳＥである。実行結果がＴＲＵＥであると判断された場合（ステップＳ２３０３：ＴＲＵＥ）、ＦＷ１０２は、ｊが（部分ダンプコード数−１）であるか否かを判断する（ステップＳ２３０４）。なお、上述したように、部分ダンプコード数は、管理情報１４００に含まれる。
【０１０５】
ｊが（部分ダンプコード数−１）でないと判断された場合（ステップＳ２３０４：Ｎｏ）、ＦＷ１０２は、ｊ＝ｊ＋１とし（ステップＳ２３０５）、ステップＳ２３０２へ戻る。ｊが（部分ダンプコード数−１）であると判断された場合（ステップＳ２３０４：Ｙｅｓ）、ＦＷ１０２は、戻り値＝ＴＲＵＥとし（ステップＳ２３０７）、一連の処理を終了する。すなわち、ページｉがすべての部分ダンプコード４１２の実行においてダンプ対象領域であると判断された場合、戻り値としてＴＲＵＥが返される。
【０１０６】
ステップＳ２３０３において、実行結果がＦＡＬＳＥであるかを判断された場合（ステップＳ２３０３：ＦＡＬＳＥ）、ＦＷ１０２は、戻り値＝ＦＡＬＳＥとし（ステップＳ２３０６）、一連の処理を終了する。すなわち、ページｉが、いずれか一つの部分ダンプコード４１２の実行によってダンプ対象領域でないと判断された場合、戻り値としてＦＡＬＳＥが返される。
【０１０７】
以上説明したように、起動時にＯＳ１０１が、各ページが出力条件に該当するかを判定可能なプログラムコードを生成し、ＯＳ１０１パニック時にＦＷ１０２が該コードの実行に応じて条件該当ページをダンプ出力する。これにより、ＯＳ１０１の更新に関係なくＦＷ１０２は部分ダンプできる。したがって、不具合の解析に用いるダンプ出力に要する時間の短縮化を図ることができる。
【０１０８】
また、ＯＳ１０１は、物理メモリの各記憶領域についての管理用配列と出力条件とに基づいて、部分ダンプコードを生成する。これにより、ダンプレベルに応じて出力条件に該当するか否かを判定可能な部分ダンプコードが生成可能である。
【０１０９】
また、ＦＷ１０２は、コンピュータの起動時に、物理メモリに、部分ダンプコードを格納可能な記憶領域を確保し、所定の環境変数に確保した記憶領域に関する値を設定する。これにより、ＦＷ１０２とＯＳ１０１とによって部分ダンプコードの格納先に関する情報を共有することができる。
【０１１０】
また、ＦＷ１０２は、複数の出力条件がある場合、各出力条件についてダンプ対象領域であるか否かを判定し、物理メモリの記憶領域のうち、すべての出力条件においてダンプ対象領域であると判定された記憶領域をダンプ出力する。これにより、ＦＷ１０２は、出力条件が複数あってもパーシャルダンプを行うことができる。したがって、ダンプ出力に要する時間の短縮化を図ることができる。
【０１１１】
また、ＯＳ１０１は、生成した部分ダンプコードをディスクに記憶しておき、ＯＳ１０１の起動時にＯＳ１０１アップデートが検出されなかった場合、部分ダンプコードを生成する処理を行わずにディスクに記憶しておいた部分ダンプコードをＥＦＩ変数に基づく格納先に格納する。これにより、ＯＳ１０１のアップデートがない場合に、部分ダンプコードを生成する処理に要する時間を短縮することができる。
【０１１２】
なお、本実施の形態で説明したダンプ出力方法は、予め用意されたダンプ出力プログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本ダンプ出力プログラムは、磁気ディスク、光ディスク、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）フラッシュメモリなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、ダンプ出力プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１１３】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１１４】
（付記１）コンピュータが、
オペレーティングシステムの起動時に、前記オペレーティングシステムによって、前記オペレーティングシステムが管理する第１記憶装置のうち、所定の環境変数の値に基づく記憶領域を特定し、前記第１記憶装置の各記憶領域が出力条件に該当するダンプ対象領域か否かを判定可能なプログラムコードを生成し、生成した前記プログラムコードを特定した前記記憶領域に書き込み、
ダンプ出力指示を受けた実行部によって、前記所定の環境変数の値に基づく前記記憶領域に記憶された前記プログラムコードを実行し、前記プログラムコードの実行結果に基づいて前記第１記憶装置の各記憶領域のうち前記ダンプ対象領域であると判定された記憶領域についてダンプ出力する、
処理を実行することを特徴とするダンプ出力方法。
【０１１５】
（付記２）前記プログラムコードを生成する処理では、
前記オペレーティングシステムによって、前記第１記憶装置の各記憶領域についての管理用配列と前記出力条件とに基づいて、前記プログラムコードを生成する、
ことを特徴とする付記１に記載のダンプ出力方法。
【０１１６】
（付記３）前記コンピュータが、
前記実行部を有するファームウェアによって、前記第１記憶装置に、前記プログラムコードを格納可能な記憶領域を確保し、前記所定の環境変数に確保した前記記憶領域に関する値を設定し、
前記所定の環境変数の値に基づく前記記憶領域を特定する処理では、
前記オペレーティングシステムによって、前記第１記憶装置のうち、設定された前記所定の環境変数の値に基づく前記記憶領域を特定することを特徴とする付記１に記載のダンプ出力方法。
【０１１７】
（付記４）前記プログラムコードを生成する処理では、
前記オペレーティングシステムによって、複数の出力条件の各々の出力条件について、前記第１記憶装置の各記憶領域が前記各々の出力条件に該当するダンプ対象領域か否かを判定可能なプログラムコードを生成し、
前記ダンプ対象領域をダンプ出力する処理では、
前記実行部によって、前記各々の出力条件について生成した前記プログラムコードを実行し、前記プログラムコードの実行結果に基づいて、前記第１記憶装置の各記憶領域のうち、前記複数の出力条件のすべての出力条件において前記ダンプ対象領域であると判定した記憶領域をダンプ出力する、
処理を実行することを特徴とする付記１〜３のいずれか一つに記載のダンプ出力方法。
【０１１８】
（付記５）前記コンピュータが、
さらに、前記オペレーティングシステムによって、生成した前記プログラムコードを不揮発性の第２記憶装置に書き込み、
前記オペレーティングシステムの起動時に前記オペレーティングシステムのアップデートを検出しなかった場合に、前記オペレーティングシステムによって、前記プログラムコードを生成する処理を行わずに、前記第２記憶装置に記憶された前記プログラムコードを、特定した前記記憶領域に書き込むことを特徴とする付記１〜４のいずれか一つに記載のダンプ出力方法。
【０１１９】
（付記６）前記所定の環境変数は、前記オペレーティングシステムと前記実行部とが参照可能な不揮発性の第３記憶装置の記憶領域に含まれることを特徴とする付記１〜５のいずれか一つに記載のダンプ出力方法。
【０１２０】
（付記７）コンピュータに、
オペレーティングシステムの起動時に、前記オペレーティングシステムによって、前記オペレーティングシステムが管理する第１記憶装置のうち、所定の環境変数の値に基づく記憶領域を特定し、前記第１記憶装置の各記憶領域が出力条件に該当するダンプ対象領域か否かを判定可能なプログラムコードを生成し、生成した前記プログラムコードを特定した前記記憶領域に書き込み、
ダンプ出力指示を受けた実行部によって、前記所定の環境変数の値に基づく前記記憶領域に記憶された前記プログラムコードを実行し、前記プログラムコードの実行結果に基づいて前記第１記憶装置の各記憶領域のうち前記ダンプ対象領域であると判定された記憶領域についてダンプ出力する、
処理を実行させることを特徴とするダンプ出力プログラム。
【０１２１】
（付記８）オペレーティングシステムの起動時に、前記オペレーティングシステムによって、前記オペレーティングシステムが管理する第１記憶装置のうち、所定の環境変数の値に基づく記憶領域を特定し、前記第１記憶装置の各記憶領域が出力条件に該当するダンプ対象領域か否かを判定可能なプログラムコードを生成し、生成した前記プログラムコードを特定した前記記憶領域に書き込み、
ダンプ出力指示を受け付けた実行部によって、前記所定の環境変数の値に基づく前記記憶領域に記憶された前記プログラムコードを実行し、前記プログラムコードの実行結果に基づいて前記第１記憶装置の各記憶領域のうち前記ダンプ対象領域であると判定された記憶領域についてダンプ出力する、
処理を実行する制御部を有することを特徴とする情報処理装置。
【符号の説明】
【０１２２】
１００  情報処理装置
１０１  ＯＳ
１０２  ＦＷ
１０３  カーネル
１１１  インタープリタ
１２０−１，１２０−２，４１２  部分ダンプコード
４００  制御部
４０１  生成部
４０２  確保部
４０３  実行部
４１１  設定ファイル
４１３  ＥＦＩ変数
５００  格納領域
９００  管理用配列
９０１  要素
１０００，１１０１，１２００  判定式
１３０１  バイナリコード
１４００  管理情報
【図１】
2018142079.tif 000003
【図２】
2018142079.tif 000004
【図３】
2018142079.tif 000005
【図４】
2018142079.tif 000006
【図５】
2018142079.tif 000007
【図６】
2018142079.tif 000008
【図７】
2018142079.tif 000009
【図８】
2018142079.tif 000010
【図９】
2018142079.tif 000011
【図１０】
2018142079.tif 000012
【図１１】
2018142079.tif 000013
【図１２】
2018142079.tif 000014
【図１３】
2018142079.tif 000015
【図１４】
2018142079.tif 000016
【図１５】
2018142079.tif 000017
【図１６】
2018142079.tif 000018
【図１７】
2018142079.tif 000019
【図１８】
2018142079.tif 000020
【図１９】
2018142079.tif 000021
【図２０】
2018142079.tif 000022
【図２１】
2018142079.tif 000023
【図２２】
2018142079.tif 000024
【図２３】
2018142079.tif 000025