(57)【要約】【課題】情報処理システムのスタンドアロンダンプにおいて、ファームウェア、ローダ、システム制御プログラムのダンプデータの内容を、ただ一種類のダンププログラムが外部記憶装置に出力する。【解決手段】ダンプデータの領域情報を保持可能なメモリマップを設け、ダンプデータの領域情報をプログラムが自ら登録することで、情報処理装置のリセット以降に実行するファームウェアおよびダンププログラムがダンプデータを上書きせずに実行でき、ダンププログラムはメモリマップからダンプすべきメモリ領域の内容を外部記憶装置に出力する。【選択図】  図２
2009075992.tif 000002
【特許請求の範囲】
【請求項１】
システムファームウェアがブートファームウェアを主記憶装置にロードし、ブートファームウェアがローダを主記憶装置にロードし、ローダがシステム制御プログラムを主記憶装置にロードし、システム制御プログラムが各種サービスを提供する情報処理装置のメモリダンプ採取方法において、
システムファームウェアが主記憶装置の各領域の領域情報を登録するメモリマップを作成し、ローダ又はシステム制御プログラムがダンプ対象の領域情報を前記メモリマップに登録し、情報処理装置がリセットされた場合にローダがダンププログラムを主記憶装置にロードし、ダンププログラムが前記メモリマップに登録されているダンプ対象のデータを外部記憶装置に出力することを特徴とする情報処理装置のメモリダンプ採取方法。
【請求項２】
情報処理装置がリセットされた場合にシステムファームウェアが当該システムファームウェアのダンプ領域を確保し、確保した領域をダンプ領域としてメモリマップに登録し、当該システムファームウェア領域のデータを前記確保されたダンプ領域にコピーすることを特徴とする請求項１記載の情報処理装置のメモリダンプ採取方法。
【請求項３】
ローダ、システム制御プログラム、及びダンププログラムが外部記憶装置に格納されていることを特徴とする請求項１記載の情報処理装置のメモリダンプ採取方法。
【請求項４】
ＲＯＭに格納されたシステムファームウェアが当該システムファームウェアを主記憶装置にロードし、ロードされたシステムファームウェアがＲＯＭに格納されたブートファームウェアを主記憶装置にロードし、ロードされたブートファームウェアがローダを外部記憶装置から主記憶装置にロードし、ロードされたローダがシステム制御プログラムを外部記憶装置から主記憶装置にロードし、ロードされたシステム制御プログラムが各種サービスを提供する情報処理装置のメモリダンプ採取方法において、
システムファームウェアが主記憶装置の各領域の領域情報を登録するメモリマップを作成し、ローダ又はシステム制御プログラムがダンプ対象の領域情報を前記メモリマップに登録し、情報処理装置がリセットされた場合にローダがダンププログラムを外部記憶装置から主記憶装置にロードし、ロードされたダンププログラムが前記メモリマップに登録されているダンプ対象のデータを外部記憶装置に出力することを特徴とする情報処理装置のメモリダンプ採取方法。
【請求項５】
主記憶装置、プロセッサ、ＲＯＭを有する情報処理装置の電源投入後に、ＲＯＭに格納されたシステムファームウェアが起動し、起動されたシステムファームウェアが主記憶装置の初期化を行った後にシステムファームウェア領域を決定し、当該領域にシステムファームウェアをロードし、ロードされたシステムファームウェアがＲＯＭに格納されたブートファームウェアを主記憶装置にロードし、ロードされたブートファームウェアがローダを外部記憶装置から主記憶装置にロードし、ロードされたローダがシステム制御プログラムを外部記憶装置から主記憶装置にロードして起動し、起動されたシステム制御プログラムが各種サービスを提供する情報処理装置のメモリダンプ採取方法において、
情報処理装置の電源投入後に、システムファームウェアが主記憶装置の各領域の領域情報を登録するためのメモリマップを作成し当該システムファームウェア領域を前記メモリマップに登録し、ローダがローダの少なくとも一部の領域をダンプ領域として前記メモリマップに登録し、システム制御プログラムがシステム制御プログラムの少なくとも一部の領域をダンプ領域として前記メモリマップに登録し、その後システム制御プログラムが各種サービスを提供している際に、情報処理装置がリセットされると、システムファームウェアはプロセッサを初期化し、前記メモリマップに登録されたダンプ領域を除く主記憶装置をテストした後、ブートファームウェアを主記憶装置にロードして起動し、起動されたブートファームウェアは前記メモリマップにダンプ領域が登録されている場合にはダンププログラムを外部記憶装置から主記憶装置にロードして起動し、起動されたダンププログラムは前記メモリマップに登録されているダンプ対象のデータを外部記憶装置に出力することを特徴とする情報処理装置のメモリダンプ採取方法。
【請求項６】
情報処理装置がリセットされ、システムファームウェアがプロセッサを初期化した後、システムファームウェアはメモリマップに登録されたシステムファームウェア領域情報からシステムファームウェアサイズを算出し、算出したサイズ分の領域をダンプ領域として確保し、確保した領域をシステムファームウェアダンプ領域としてメモリマップに登録し、当該システムファームウェアダンプ領域にシステムファームウェアをコピーすることを特徴とする請求項５記載の情報処理装置のメモリダンプ採取方法。
【請求項７】
メモリダンプ採取後にメモリマップに登録されたダンプ領域情報を開放し、引き続いてローダおよびシステム制御プログラムをロードすることを特徴とする請求項１又は２いずれか記載の情報処理装置のメモリダンプ採取方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は情報処理装置で実行するプログラムのダンプ技術に係り、特に情報処理装置のリセットが発生したときに主記憶装置上に保存されているダンプデータのメモリダンプ採取方法に関する。
【背景技術】
【０００２】
情報処理システムの障害発生時における一般的なメモリダンプは、システム制御プログラムに実装されるパニックルーチンで行われる。パニックルーチンはシステム制御プログラムが処理を継続できないと判断したときに起動されるものであり、回復不可能なハードウェア障害のマシンチェック割込み、ダンプボタンの押下に引き続くINIT割込み、システム制御プログラムの不当割込み、などが引き金になる。情報処理システム運用中に発生する致命的障害のほとんどはパニックルーチンの採取したダンプデータで原因追及される。
【０００３】
ところが、プログラムが意図しない情報処理装置のリセットを引き起こす様な障害の場合は、システム制御プログラムに制御が移行しないためにパニックルーチンが実行できず、結果、メモリダンプが採取されなくなる。また、パニックルーチンは、２重障害と言われるパニックルーチン実行中の新たな障害に対するリカバリ機能を実装しないのが一般的であるため、２重障害が発生するとメモリダンプが採取できない。さらに、システム制御プログラムの初期設定時に情報処理装置の障害が発生すると、パニックルーチンが実行可能な状態になっていない場合もあり、このときにもメモリダンプは採取されない。
【０００４】
パニックルーチンによるダンプ採取の問題を解決する手法として、主記憶装置上に保存されているデータを情報処理システムのリブート処理の過程でダンプするスタンドアロンダンプが知られている。スタンドアロンダンプならば、ハードウェアの一時的な障害はリセットされるのでダンプ採取に成功するケースは高まる。この様なことから、スタンドアロンダンプはメモリダンプを確実に採取する方法して有効なものである。ところが、情報処理システムの社会的重要度が高まっている状況であっても未だに、パーソナルコンピュータを代表とする情報処理システムではスタンドアロンダンプが実装されていないのが実情である。
【０００５】
第１の従来技術のスタンドアロンダンプは特許文献１に示されている。ここでは、通常運用では使用されないシステムダンプ採取プログラム専用のメモリ領域を予め確保しておき、ダンプ対象のアドレスとサイズをダンプリストに予め登録しておき、情報処理装置のリセット後にはシステムダンプ採取プログラムがシステムダンプ採取プログラム専用のメモリ領域で実行する方式を述べている。この方法は比較的規模が小さくてダンプ領域のアドレスとサイズを予め求めることが容易である情報処理システムには適用可能であるが、規模が大きい近年の情報処理システムには適用困難である。
【０００６】
第２の従来技術が特許文献２に示されている。ここには、通常運用では使用しないメモリ領域を使ってオペレーティングシステムを再起動し、その後で障害発生直前に使用していたメモリ領域をダンプする方法が述べられている。メモリ領域を２面持つ目的は、ダンプ採取を待たずにシステム運用を再開させることにある。この方式は、複数オペレーティングシステムを共存し得る情報処理システムで実現できるものであり、単一オペレーティングシステムの情報処理システムに広く適用できるわけではない。
【０００７】
第３の従来技術が特許文献３に示されている。ここには、メモリを通常使用領域とリザーブ領域の２つ分け、障害を起因とする情報処理装置のリセットのときには使用するメモリ領域を切り替えてシステムを運用する。メモリ領域を２面持つ目的は、ダンプ採取を待たずにシステム運用を再開することにある。しかし、メモリ領域のアドレスとサイズは予め決めておく必要がある。
【０００８】
第４の従来技術が特許文献４で示されている。ここで示されるスタンドアロンダンプでは、情報処理装置の実行モードをシステム運用モードとダンプ運用モードの２つに分け、ブートファームウェアがシステム運用モードとダンプ運用モードとでオペレーティングシステムが使用するメモリ領域を分離し、ダンプ運用モードのメモリ領域で実行するダンププログラムがシステム運用モードのときの領域をダンプする。
【０００９】
第５の従来技術が特許文献５で示されている。ここで示されるスタンドアロンダンプでは、ハードウェアレベルでメモリを２面実装し、システム運用中は両方のメモリを更新し、障害発生時は一方のメモリを使って動作しながらもう一方のメモリをダンプすると言うものである。
【００１０】
【特許文献１】特開平０８−０９５８３４号公報
【特許文献２】特開２００１―２９０６７８号公報
【特許文献３】特開２００４−２８０１４０号公報
【特許文献４】特開２００６−０７２９３１号公報
【特許文献５】特開２００４−１０２３９５号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
従来のスタンドアロンダンプ方式には以下に示す問題があった。
【００１２】
１）情報処理装置のリセットが発生する様な障害で全メモリをダンプする必要性は低く、オペレーティングシステムのカーネルに関するメモリ領域のダンプデータでも十分原因追求に役立つ。しかしながら、従来技術ではカーネルに関するメモリ領域のアドレスとサイズを確実に取得する手段がない。このことが、全てのメモリをダンプすることになっている１つの原因でもある。
【００１３】
２）情報処理システムではファームウェアで実装する機能が拡大しているため、ファームウェアに適用可能なスタンドアロンダンプの要求が高まってきている。しかし、従来技術のほとんどは、情報処理装置のリセット以降の処理でファームウェア領域を上書きしてしまう。メモリを完全に２重化する方式もあるが、ハードウェアレベルでの実装であるためにコスト面で適用する情報処理装置は限られる。
【００１４】
本発明は、上記実情に鑑みてなされたものであり、ローダおよびシステム制御プログラムが本当に必要なそれぞれのダンプ領域の領域情報をファームウェアとダンププログラムに確実に伝える手段と、ファームウェアのダンプ領域情報をダンププログラムに確実に伝える手段と、を提供することにある。
【課題を解決するための手段】
【００１５】
本発明のスタンドアロンダンプ方式は、情報処理システムを構成するファームウェア、ローダ、システム制御プログラム、ダンププログラムがメモリマップを介して互いにダンプデータの領域情報を共有可能とする。そうすることで、ローダとシステム制御プログラムはダンプデータの領域情報をメモリマップに登録するだけになり、ファームウェアとダンププログラムはメモリマップからダンプすべきメモリ領域を判断できる。
【００１６】
ファームウェア領域のデータをダンプするには、ファームウェアがメモリマップを参照して上書き可能なメモリ領域を見つけ出し、その領域にファームウェア領域のデータをコピーし、コピー先の領域をメモリマップに登録すればよい。このとき、情報処理装置のリセット直後に実行するシステムファームウェアは必ず固定メモリ領域を必要とする様に設計されているため、ファームウェア領域のデータをコピーする時点においてはリセット直前のファームウェア領域の一部は上書きされてしまう可能性がある。しかし、この領域は十分小さく、ファームウェアのスタンドアロンダンプの有効性を否定するものにはならない。
【００１７】
スタンドアロンダンプが終了した後にはダンプデータの領域を再利用できるように開放する必要があるが、これはメモリマップに登録されているダンプデータの領域情報を削除すればよい。
【発明の効果】
【００１８】
本発明によれば、ファームウェア、ローダ、システム制御プログラムのそれぞれのスタンドアロンダンプが、ただ一種類のダンププログラムによって実現され、さらに、システム制御プログラムの種類にもバージョンにも左右されることがないので、ダンププログラムをＲＯＭに格納することが可能になる。これによって、プログラムに依存しないスタンドアロンダンプ機能を実装するところの情報処理装置が提供可能になる。
【発明を実施するための最良の形態】
【００１９】
以下、本発明の一実施形態を図１から図４に基づいて説明する。
図１は、本発明の実施例に係る構成の主要部の例を示す構成図である。
【００２０】
情報処理装置１００は主記憶装置１０１、ＲＯＭ１０２、プロセッサ１０３、Ｉ／Ｏデバイス１０４を有し、ケーブル１０５を介して外部記憶装置１０６と接続している。外部記憶装置１０６はネットワーク上にあっても情報処理装置１００の内部にあってもよい。主記憶装置１０１はシステムファームウェア２００、ブートファームウェア２０１、ダンププログラム２０３、ローダ２０４、システム制御プログラム２０５、ダンプデータ２０６を記憶する。ＲＯＭにはシステムファームウェア２００、ブートファームウェア２０１の主記憶装置１０１上にロードされる前のオブジェクトコードが格納されている。外部記憶装置１０６にはダンププログラム２０３、ローダ２０４、システム制御プログラム２０５の主記憶装置１０１上にロードされる前のオブジェクトコードが格納されている。また、外部記憶装置１０５はダンププログラム２０３が採取したダンプデータを格納できる。
【００２１】
情報処理装置１００の電源が入ると、ＲＯＭ１０２上のシステムファームウェア１０７が最初に起動する。システムファームウェア１０７は、主記憶装置１０１の初期化を行った後にシステムファームウェア２００の領域を決定し、この領域にシステムファームウェア２００のコードを展開する。これ以後は、主記憶装置上でシステムファームウェア２００が実行し、メモリマップ２０２を作成した後にＲＯＭ１０２を読み出してブートファームウェア２０１のコードを主記憶装置１０１上に展開し、起動する。
【００２２】
ブートファームウェア２０１は、メモリマップ２０２に基づいて、主記憶装置１０１上の利用可能な領域にローダ２０４をロードし、起動する。ローダ２０４はシステム制御プログラム２０５をロードし、起動する。最後に起動されたシステム制御プログラム２０５は、システム構成情報やトレースデータをダンプデータ２０６に格納ながら、各種サービスを提供する。
【００２３】
図２は、本発明の実施例に係るメモリマップの構造を示している。メモリマップ２０２は、メモリマップアドレス２１０がポイントするところの主記憶装置１０１上に存在し、１つ以上のメモリマップエントリ２１２から成る。１つのメモリマップエントリ２１２は主記憶装置１０１上の１つの領域に一対一に対応するものであり、メモリタイプ２１３、物理アドレス２１４、仮想アドレス２１５、ページサイズ２１６、属性２１７でその領域がどの様な種類のものであるかを明示する。
【００２４】
メモリタイプ２１３は領域の種類を表すものであり、メモリタイプコード５（２２０）とメモリタイプコード６（２２１）はシステムファームウェア領域を、メモリタイプコード８（２２２）は利用可能な領域を、メモリタイプコード１３（２２３）はシステムファームウェアのコア領域を、メモリタイプコード１４（２２４）はシステムファームウェア２００のダンプデータ領域を、メモリタイプコード１５（２２５）はローダ２０４またはシステム制御プログラム２０５のシステムダンプデータ領域を、それぞれ明示できる。メモリマップ内には、同一メモリタイプ２１３を持つ複数のメモリマップエントリがあってもよい。
【００２５】
ローダ２０４は、システムファームウェア２００が提供するファームウェア関数を用いて、ローダ２０４の一部あるいは全ての領域をシステムダンプデータ領域(メモリタイプコード１５)としてメモリマップに登録する。同様に、システム制御プログラム２０５も、システムファームウェア２００が提供するファームウェア関数を用いて、システム制御プログラム２０５の一部の領域をシステムダンプデータ領域(メモリタイプコード１５)としてメモリマップに登録する。メモリマップ２０２の内容をローダ２０４およびシステム制御プログラム２０５が直接変更する方法も考えられるが、ファームウェア関数を用いる方がより安全である。
【００２６】
メモリタイプコード１５のメモリマップエントリ２１２がメモリマップ２０２に登録された状態で情報処理装置１００にリセットが要求されると、システムファームウェア２００とブートファームウェア２０１は、スタンドアロンダンプを採取するに必要な処理を遂行する。
【００２７】
次に、情報処理装置がリセットされたときの本実施例におけるスタンドアロンダンプの採取手順について説明する。図３は、本発明の実施例に係わるスタンドアロンダンプの採取手順を説明するためのフローチャートである。
【００２８】
情報処理装置がリセットされると、システムファームウェアはプロセッサの各種レジスタを初期化する(ステップ３００)。その後、ステップ３０１でメモリテストを行うが、このとき、システムダンプデータ領域を示すメモリマップエントリが存在するならば、当該領域はメモリテスト対象から外される(ステップ３０１)。システムファームウェアはＲＯＭに格納されているブートファームウェアのオブジェクトを主記憶装置に展開し、ブートファームウェアに制御を移行する(ステップ３０２)。このとき、ブートファームウェアにはメモリマップの先頭アドレスが渡される。
【００２９】
ブートファームウェアは、システムダンプデータ領域を示すメモリマップエントリがメモリマップ内に存在するかチェックし(ステップ３１０)、それが存在するならば外部記憶装置からダンププログラムをロードし、起動する。このとき、ダンププログラムにはメモリマップの先頭アドレスが渡される。ダンププログラムはダンプデータ領域のデータを外部記憶装置に出力する(ステップ３１１)。ブートファームウェアはダンププログラムの完了コードからダンプ採取が成功したかを判断し(ステップ３１２)、もし、リターンコードが成功を示すものであるならば、システムファームウェア関数を用いてシステムダンプ領域を示すメモリマップエントリを開放する(ステップ３１３)。ダンププログラムのリターンコードが失敗を示すものであるならば、ステップ３１４でオペレータの介入要求処理を行い、その後にステップ３１１に分岐する。
【００３０】
ブートファームウェアは上記ステップの処理を完了すると、外部記憶装置からローダをロードし、ローダを起動する(ステップ３２０)。
【００３１】
図４は、本発明の実施例のファームウェアダンプ領域に係わるシステムファームウェア処理を説明するためのフローチャートである。
【００３２】
情報処理装置がリセットされると、システムファームウェアはステップ３００のプロセッサの初期化後に、メモリマップのアドレスを取得する(ステップ４００)。メモリマップのアドレスを記憶するデータのアドレスは、ファームウェアが予め決めてある。システムファームウェアは、メモリマップからメモリタイプコード５（２２０）とメモリタイプコード６（２２１）を持つメモリマップエントリを検索し、メモリエントリに記憶されているページサイズを加算し、これをシステムファームウェアサイズとして記憶する(ステップ４０1)。
【００３３】
次に、システムファームウェアサイズを上回るページサイズを持つところの再利用可能領域(メモリタイプコード２２２)のメモリマップエントリを探し出す(ステップ４０２)。もし、これを満たすメモリマップエントリが見つかれば、再利用可能領域からシステムファームウェアサイズ分の領域を確保する(ステップ４０３)。確保した領域をファームウェアダンプデータ領域(メモリタイプコード１４)としてメモリマップを再編成する(ステップ４０４)。そして、システムファームウェアダンプデータ領域にシステムファームウェアのコード領域およびデータ領域の内容をコピーする(ステップ４０５)。その後、ステップ３０１でダンプ領域を除くメモリテストを行う。前記コピーされた内容は、ステップ３１１によって、外部記憶装置に出力される。
【図面の簡単な説明】
【００３４】
【図１】本発明の実施例に係る情報処理装置の構成図
【図２】メモリマップの構造を示す図
【図３】本発明の実施例に係るスタンドアロンダンプの採取手順を示すフローチャート
【図４】本発明の実施例に係るファームウェア領域の保存手順を示すフローチャート
【符号の説明】
【００３５】
１００  情報処理装置
１０１  主記憶装置
１０２  ＲＯＭ（Ｒｅａｄ Ｏｎｌｙ Ｍｅｍｏｒｙ）
１０３  プロセッサ
１０４  Ｉ／Ｏデバイス
１０５  Ｉ／Ｏケーブルケーブル
１０６  外部記憶装置
１０７  ＲＯＭ上のシステムファームウェア
２００  システムファームウェア
２０１  ブートファームウェア
２０２  メモリマップ
２０３  ダンププログラム
２０４  ローダ
２０５  システム制御プログラム
２０６  ダンプデータ
【図１】
2009075992.tif 000003
【図２】
2009075992.tif 000004
【図３】
2009075992.tif 000005
【図４】
2009075992.tif 000006