(57)【要約】【課題】メモリダンプ機能を有する情報処理装置に関し、エラー発生時の再起動時間を短縮化するための技術を提供する。【解決手段】情報処理装置１００は、メモリダンプ機能を有しており、メモリコントローラ１８と、複数の揮発性のメモリと、ＣＰＵ１１とを備える。メモリコントローラ１８は、揮発性のメモリへのメモリアドレスの割り当て状況をアドレス割り当てレジスタ１９により保持している。ＣＰＵ１１は、エラー発生等により情報処理装置１００が再起動した場合に、メモリコントローラ１８を初期化する処理を行い、アドレス割り当てレジスタ１９に記憶される情報に基づいて、ダンプ対象のデータを記憶する揮発性のメモリに対し、再起動前とは異なるメモリアドレスを割り当てて、ダンプ用のプログラムを実行することで、ダンプ対象のデータを不揮発メモリ１４に保存する。【選択図】図１
2015090512.tif 000002
【特許請求の範囲】
【請求項１】
メモリダンプ機能を有する情報処理装置であって、
揮発性のメモリと、
前記揮発性のメモリにアドレスを割り当てて、前記揮発性のメモリへのアクセスを制御するメモリコントローラと、
アクセス対象のメモリアドレスを指定して、前記メモリコントローラを介して前記揮発性のメモリにアクセスするプロセッサとを備え、
前記メモリコントローラは、
前記情報処理装置の起動中に値を保持する記憶部と、
前記メモリコントローラの動作を制御する制御部とを含み、
前記メモリコントローラの前記記憶部は、前記揮発性のメモリに割り当てられたメモリアドレスを示す割り当て情報を記憶し、
前記プロセッサは、前記情報処理装置が再起動した場合に、前記記憶部に記憶される前記割り当て情報に基づいて、ダンプ対象のデータを記憶する前記揮発性のメモリに対し、再起動前とは異なるメモリアドレスを割り当てる、情報処理装置。
【請求項２】
前記プロセッサは、第１の範囲の前記メモリアドレスを、ダンプ対象のデータを記憶するためのメモリ領域として指定し、第２の範囲の前記メモリアドレスを、ダンプ対象ではないデータのメモリ領域として指定して前記メモリコントローラに前記揮発性のメモリへのアクセスを指示するよう構成され、前記情報処理装置が再起動した場合に、前記割り当て情報に基づいて、前記ダンプ対象のデータを記憶するメモリに対し、前記第２の範囲のメモリアドレスを割り当てて前記割り当て情報を更新する、請求項１に記載の情報処理装置。
【請求項３】
前記情報処理装置の前記揮発性のメモリは、第１のメモリバンクと第２のメモリバンクとを含み、
前記メモリコントローラの前記記憶部は、前記第１のメモリバンクと前記第２のメモリバンクそれぞれに割り当てられたメモリアドレスを前記割り当て情報として記憶し、
前記プロセッサは、前記情報処理装置が再起動した場合に、前記割り当て情報に基づいて、前記第１のメモリバンクに再起動前に前記ダンプ対象のデータが記憶されていた場合に、前記第１のメモリバンクに、前記第２の範囲のメモリアドレスを割り当てて前記割り当て情報を更新し、前記第２のメモリバンクに再起動前に前記ダンプ対象のデータが記憶されていた場合に、前記第２のメモリバンクに、前記第２の範囲のメモリアドレスを割り当てて前記割り当て情報を更新する、請求項２に記載の情報処理装置。
【請求項４】
前記プロセッサは、前記情報処理装置が再起動した場合に、前記ダンプ対象のデータをダンプするためのプログラムを実行することにより、前記第２の範囲のメモリアドレスを指定して前記メモリコントローラに対し前記揮発性のメモリへのアクセスを行い、前記第２の範囲のメモリアドレスに記憶されるデータのダンプを実行する、請求項２または３に記載の情報処理装置。
【請求項５】
前記プロセッサは、前記プログラムを実行することにより、前記第２の範囲のメモリアドレスに記憶されるデータのダンプの実行後、カーネルプログラムに対し、前記第２の範囲のメモリアドレスを、アプリケーション用のメモリ領域として使用可能であることを通知する、請求項４に記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリダンプ機能を有する情報処理装置に関し、特に、エラー発生時の再起動時間を短縮するための技術に関する。
【背景技術】
【０００２】
情報処理装置は、プログラムの実行によりエラー等が発生した場合に、その発生要因の特定を容易にするため、揮発メモリのデータをダンプする機能を有している。例えば、特開２００８−２４２９９９号公報（特許文献１）は、メモリをダンプしながら、プログラムを迅速に再起動するための技術を記載している。
【０００３】
特許文献１に記載された情報処理装置は、ＣＰＵ（Central  Processing  Unit）により実行されるアプリケーションプログラムの起動処理中に、メモリへのアクセス要求を取得し、取得したアクセス要求に含まれる、アクセス対象の記憶領域を指定する領域指定情報と、アクセス要求の取得順とを記憶する。この情報処理装置は、プログラムの起動処理終了後、実行中のプログラムの実行を停止し、その停止後、領域指定情報と、アクセス要求の取得順とを読み出し、取得順に、各領域指定情報が示す記憶領域の内容をダンプし、ダンプ中にプログラムを起動する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００８−２４２９９９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
情報処理装置が再起動した後、ブートローダの起動時に、カーネルプログラムの読み込みによって、エラー時のワーク変数が上書きされ得る。そのため、カーネルプログラムのメモリへの読み込み前に、揮発性のメモリの記憶内容を、不揮発性メモリ等に保存すること（メモリダンプ）が必要となる。このメモリダンプに時間を要すると、情報処理装置の再起動に要する時間が長くなるため、メモリダンプを迅速に行うことが望ましい。
【０００６】
そこで、本発明は、情報処理装置において、エラー発生時等の再起動時に、メモリダンプを迅速に行うことで、情報処理装置の再起動時間を短縮する技術を提供することを目的とする。
【課題を解決するための手段】
【０００７】
一実施形態に従う情報処理装置は、メモリダンプ機能を有しており、揮発性のメモリと、揮発性のメモリにアドレスを割り当てて、揮発性のメモリへのアクセスを制御するメモリコントローラと、アクセス対象のメモリアドレスを指定して、メモリコントローラを介して揮発性のメモリにアクセスするプロセッサとを備える。メモリコントローラは、情報処理装置の起動中に値を保持する記憶部と、メモリコントローラの動作を制御する制御部とを含む。メモリコントローラの記憶部は、揮発性のメモリに割り当てられたメモリアドレスを示す割り当て情報を記憶する。プロセッサは、情報処理装置が再起動した場合に、記憶部に記憶される割り当て情報に基づいて、ダンプ対象のデータを記憶する揮発性のメモリに対し、再起動前とは異なるメモリアドレスを割り当てる。
【発明の効果】
【０００８】
上記一実施形態によると、情報処理装置が再起動した場合に、ダンプ対象のデータを記憶する揮発性のメモリに割り当てられるメモリアドレスをメモリコントローラが変更する。そのため、ダンプの対象となる、エラー発生前のメモリの状態が、エラー発生後の再起動時にメモリへの書き込みで上書きされることなく、メモリの記憶内容を保持することができる。例えば、情報処理装置の再起動後、アプリケーションの実行により、再起動前にカーネルが使用していたメモリ領域のダンプや検証を行うことができる。そのため、メモリダンプ機能を有する情報処理装置の再起動時間の長期化を抑止することができる。
【０００９】
この発明の上記および他の目的、特徴、局面および利点は、添付の図面と関連して理解されるこの発明に関する次の詳細な説明から明らかとなるであろう。
【図面の簡単な説明】
【００１０】
【図１】実施の形態１の情報処理装置１００の構成を示すブロック図である。
【図２】アドレス割り当てレジスタ１９に記憶される、揮発性のメモリへ割り当てられたメモリアドレスの設定値を示す図である。
【図３】ＣＰＵ１１がバスを介して各デバイスにアクセスする際の、ソフトウェアにおけるコードや変数のメモリへの割り当ての例を示す図である。
【図４】情報処理装置１００におけるブートローダの動作を示すフローチャートである。
【図５】ＣＰＵ１１による、メモリコントローラ１８を初期化する処理を示すフローチャートである。
【図６】カーネルの動作を示すフローチャートである。
【図７】メモリダンプ用のアプリケーションの処理を示すフローチャートである。
【図８】ブートローダ、カーネル、メモリダンプ用のアプリケーションその他の動作によるメモリの使用状態およびフラグの値の推移を示す図である。
【発明を実施するための形態】
【００１１】
以下、図面を参照しつつ、本発明の実施の形態について説明する。以下の説明では、同一の部品には同一の符号を付してある。それらの名称および機能も同じである。したがって、それらについての詳細な説明は繰り返さない。
【００１２】
＜実施の形態１＞
＜構成＞
図１は、実施の形態１の情報処理装置１００の構成を示すブロック図である。図１に示すように、情報処理装置１００は、ＣＰＵ１１と、電源キー１２と、電源ＩＣ１３と、不揮発メモリ１４と、ディスプレイ１５と、ブートＲＯＭ(Read  Only  Memory）１６と、内蔵ＲＡＭ（Random  Access  Memory）１７と、メモリコントローラ１８と、第１のＤＤＲ（Double  Data  Rate）メモリ２１と、第２のＤＤＲメモリ２２とを備える。ＣＰＵ１１、不揮発メモリ１４、ブートＲＯＭ１６、内蔵ＲＡＭ１７およびメモリコントローラ１８等の各デバイスがバスに接続されている。
【００１３】
ＣＰＵ１１は、不揮発メモリ１４、ブートＲＯＭ１６および内蔵ＲＡＭ１７等の各種のメモリに記憶されるプログラムを読み込んで実行することにより、情報処理装置１００の動作を制御する。
【００１４】
電源キー１２は、情報処理装置１００の電源をオンまたはオフにする入力操作をユーザから受け付けるための物理的な入力装置である。
【００１５】
電源ＩＣ１３は、情報処理装置１００の各回路に対する電力の供給を制御する。電源ＩＣ１３は、情報処理装置１００のバスに接続される。また、電源ＩＣ１３は、電源キー１２と接続される。情報処理装置１００は、情報処理装置１００の電源がオフの状態で電源キー１２によって入力操作を受け付けると、情報処理装置１００の各デバイスに電源が入力され、ＣＰＵ１１へのリセット信号が解除されてＣＰＵ１１が動作を開始する。また、情報処理装置１００の電源がオンの状態で電源キー１２によって入力操作を受け付けると、電源ＩＣ１３は、ＣＰＵ１１に対し、電源キー１２への入力が行われたことによるイベントを示す割り込み信号を入力する。
【００１６】
不揮発メモリ１４は、例えばＮＯＲ型のフラッシュメモリによって構成され、情報処理装置１００が使用するデータおよびプログラムを記憶する。不揮発メモリ１４は、ＮＯＲ型のフラッシュメモリ、マスクＲＯＭその他のデバイスを、直接、バスに接続する形態によって実現してもよいし、あるいは制御用のブロックを介してＮＡＮＤ型のフラッシュメモリ、ＭＭＣ（Multi  Media  Card）デバイス、ハードディスクドライブなどのデバイスを接続する形態で実現してもよい。
【００１７】
ディスプレイ１５は、メニュー画面においてアイコンや背景画像などを表示し、アプリケーションの動作によって静止画や動画などを表示する。ディスプレイ１５は、例えばＬＣＤ（Liquid  Crystal  Display）や有機ＥＬ（electroluminescence）ディスプレイによって実現される。バスには、ディスプレイ１５を駆動するためのディスプレイコントローラが接続され、このディスプレイコントローラと、ディスプレイ１５とが接続される。
【００１８】
ブートＲＯＭ１６は、情報処理装置１００のコントローラ等の初期化手順を行うことなく使用可能なＲＯＭである。情報処理装置１００は、ＣＰＵ１１のリセットが解除されると、ブートＲＯＭ１６に割り当てられたアドレスからデータを読み出してプログラムの実行を開始する。
【００１９】
内蔵ＲＡＭ１７は、揮発性の記憶領域であり、コントローラを介さずにＣＰＵ１１が直接読み書きすることができる。内蔵ＲＡＭ１７は、例えば、情報処理装置１００のハードウェア上の特定のレジスタによって実現してもよい。内蔵ＲＡＭ１７は、情報処理装置１００の電源がオフにならない限り、情報処理装置１００がリセット等により再起動した場合も、値を保持する。
【００２０】
メモリコントローラ１８は、揮発性のメモリである第１のＤＤＲメモリ２１および第２のＤＤＲメモリ２２と接続される。メモリコントローラ１８は、バスを介してＣＰＵ１１からメモリアドレスの指定を受けて、メモリコントローラ１８に接続される揮発性のメモリ（第１のＤＤＲメモリ２１と第２のＤＤＲメモリ２２）へのアクセスを制御する。図１に示すように、メモリコントローラ１８は、ハードウェアとしてアドレス割り当てレジスタ１９を有する。アドレス割り当てレジスタ１９は、メモリコントローラ１８に接続される揮発性のメモリ（第１のＤＤＲメモリ２１と第２のＤＤＲメモリ２２）に割り当てる物理アドレスを記憶する。メモリコントローラ１８は、バス側からのメモリアドレスの指定に対し、指定されるメモリアドレスの下位ビットと、アドレス割り当てレジスタ１９に保持される値とに基づいて、複数の揮発性のメモリ（第１のＤＤＲメモリ２１と第２のＤＤＲメモリ２２）のうちアクセス対象のメモリを選択してメモリに対する読み出しまたは書き込みを行う。
【００２１】
第１のＤＤＲメモリ２１と第２のＤＤＲメモリ２２とは、揮発性のメモリであり、メモリコントローラ１８に接続される。実施の形態１では、揮発性のメモリとしてＤＤＲメモリの例を示しているが、ＤＤＲメモリに限られない。
【００２２】
＜データ構造＞
図２および図３を参照し、情報処理装置１００の処理において用いられるデータのデータ構造を説明する。図２は、アドレス割り当てレジスタ１９に記憶される、揮発性のメモリへ割り当てられたメモリアドレスの設定値を示す図である。
【００２３】
アドレス割り当てレジスタ１９は、揮発性のメモリ（第１のＤＤＲメモリ２１と第２のＤＤＲメモリ２２）それぞれを示すレジスタ識別１９Ａと、各メモリに割り当てるメモリアドレスの設定値を示す設定値１９Ｂとを対応付けて記憶する。例えば、メモリコントローラ１８は、アドレス割り当てレジスタ１９として、２つのＤＤＲメモリに対して、スタートアドレスとエンドアドレスとを示す２つずつのレジスタを有する。
【００２４】
メモリコントローラ１８は、メモリコントローラ１８が接続するバス側から指定されたアドレスが、アドレス”0x00000000”からアドレス”0x1FFFFFFF”の範囲に含まれる場合は、アドレス割り当てレジスタ１９に記憶される値を参照し、その指定されたアドレスに対応する物理的なメモリデバイスが第１のＤＤＲメモリ２１（ＤＤＲ１）であると決定し、第１のＤＤＲメモリ２１へアクセスする。また、メモリコントローラ１８は、バス側から指定されたアドレスが、アドレス0x20000000”からアドレス”0x3FFFFFFF”の範囲に含まれる場合は、アドレス割り当てレジスタ１９に記憶される値を参照し、その指定されたアドレスに対応する物理的なメモリデバイスが第２のＤＤＲメモリ２２（ＤＤＲ２）であると決定し、第２のＤＤＲメモリ２２へアクセスする。
【００２５】
図３は、ＣＰＵ１１がバスを介して各デバイスにアクセスする際の、ソフトウェアにおけるコードや変数のメモリへの割り当ての例を示す図である。例えば、図３に示すように、ＣＰＵ１１によるアドレス”0x60001000”からアドレス”0xFFFEFFFF”のアドレス空間は、ＣＰＵ１１とメモリコントローラ１８とのデータの入出力（Ｉ／Ｏ空間）に割り当てられているメモリアドレスを示す。アドレス割り当てレジスタ１９（図３の例では、アドレス割り当てレジスタ３９として示す）は、このＩ／Ｏ空間であるアドレス”0x60001000”からアドレス”0xFFFEFFFF”のメモリ空間に配置される。ＣＰＵ１１が、このＩ／Ｏ空間のアドレス割り当てレジスタ３９を書き換えることで、メモリコントローラ１８の動作を制御する。なお、情報処理装置１００の電源ＩＣ１３、ディスプレイ１５等のデバイスを制御するためのレジスタも、このアドレス空間に配置される。
【００２６】
アドレス”0x00000000”からアドレス”0x3FFFFFFF”のアドレス空間は、揮発性のメモリ（第１のＤＤＲメモリ２１と第２のＤＤＲメモリ２２）に対応するメモリアドレスを示す。ブートローダ４０は、ブートローダ４０から読み出されて起動されるカーネルコード３１を、アドレス”0x00000000”からアドレス”0x1FFFFFFF”の範囲の物理アドレスに配置する。また、カーネルコード３１がプログラムの実行時に使用するメモリ領域であるカーネル用ワークメモリ３２を、アドレス”0x00000000”からアドレス”0x1FFFFFFF”の範囲の物理アドレスに配置する。これらカーネル用ワークメモリ３２等のデータは、情報処理装置１００のエラー発生時等に、ダンプの対象とするデータである。また、アドレス”0x20000000”からアドレス”0x3FFFFFFF”の範囲のアドレス空間は、カーネルが動作を開始した後、カーネルにより動作されるアプリケーションのコードおよびワーク領域であるアプリケーション用メモリ３３を含む。
【００２７】
アドレス”0x40000000”からアドレス”0x5FFFFFFF”のアドレス空間は、不揮発メモリ１４に対応するメモリアドレスを示す。このアドレス空間において、各種メモリにおいて動作させるカーネルのコード（格納されたカーネル３４）およびアプリケーションのコード（格納されたアプリケーション３５）等のデータが記憶される。
【００２８】
アドレス”0x60000000”からアドレス”0x60000FFF”のアドレス空間は、内蔵ＲＡＭ１７に対応するメモリアドレスを示す。このアドレス空間において、アドレス割り当てフラグ３６、リセットフラグ３７およびダンプフラグ３８等のデータが記憶される。これらデータは、情報処理装置１００の再起動時に、ブートローダ４０、メモリコントローラ１８の初期化時の処理等において参照されるデータである。例えば、リセットフラグ３７は、情報処理装置１００にリセットがかかったか否かを示すフラグである。なお、各種フラグは、ハードウェアにより実現されるレジスタに格納される値であってもよく、この場合にはＩ／Ｏ空間において各種フラグが配置される。なお、リセットフラグ３７は、値”０”または値”１”の２値をとるものとする。実施の形態１の情報処理装置１００では、例えば、ブートローダ４０の処理時点でリセットフラグ３７が値”０”である場合は、情報処理装置１００が電源オフ、または電源キーにより起動してきたばかりの状態であると判定する。すなわち、情報処理装置１００がリセットして起動したものではないことを示す。また、リセットフラグ３７が値”１”である場合は、情報処理装置１００が、エラー発生等により、リセットして起動した状態であること（ブートローダによる起動を経た後であること）を示す。なお、リセットフラグ３７は、ブートローダ４０による起動をした後、通常の動作を行っている場合は、値”１”をとることとし、情報処理装置１００の電源がオフされるまでの間、書き換えられることはないこととする。ＣＰＵ１１は、ブートローダによる処理時にリセットフラグ３７を参照することで、リセットを介した起動であるか否かを判定することができる。
【００２９】
また、アドレス割り当てフラグ３６は、揮発性のメモリである第１のＤＤＲメモリ２１と第２のＤＤＲメモリ２２とに対して、どの物理アドレスが割り当てられたかを、メモリコントローラ１８の初期化処理時等において判断する処理に使用するためのフラグである。例えば、アドレス割り当てフラグ３６は、２値をとるものとし、アドレス割り当てフラグ３６が値”０”である場合は、第１のＤＤＲメモリ２１にアドレス”0x00000000”からアドレス”0x1FFFFFFF”を割り当てて、第２のＤＤＲメモリ２２にアドレス”0x20000000”からアドレス”0x3FFFFFFF”を割り当てた状態であることを示し、アドレス割り当てフラグ３６が値”１”である場合は、第２のＤＤＲメモリ２２にアドレス”0x00000000”からアドレス”0x1FFFFFFF”を割り当てて、第１のＤＤＲメモリ２１にアドレス”0x20000000”からアドレス”0x3FFFFFFF”を割り当てた状態であることを示すものとする。なお、アドレス割り当てフラグ３６は、ハードウェアにより実現されるレジスタに格納される値であってもよい。この場合、Ｉ／Ｏ空間においてアドレス割り当てフラグ３６が配置される。
【００３０】
また、ブートローダ４０とカーネルコード３１との両方から読み書き可能なＲＡＭ（本実施形態では、内蔵ＲＡＭ１７）において、情報処理装置１００がメモリダンプを行うか否かを示すダンプフラグ３８を保持する。本実施形態では、ダンプフラグ３８は、ダンプが必要であるか否かに応じて２値の値をとることとする。
【００３１】
アドレス”0xFFFF0000”以降の一定のメモリ領域からなるアドレス空間は、ブートＲＯＭ１６に対応するメモリアドレスを示す。ブートローダ４０のコードは、ブートＲＯＭ１６に配置される。ＣＰＵ１１は、リセット信号が解除されると、ブートローダ４０の先頭から処理を開始する。
【００３２】
＜動作＞
図４から図８を参照し、情報処理装置１００の再起動時の動作について説明する。図４は、情報処理装置１００におけるブートローダの動作を示すフローチャートである。ＣＰＵ１１は、再起動時等において、ブートＲＯＭ１６内にあるリセットベクタ（0xFFFF0000）から処理を開始する。なお、ブートローダ４０を動作させるためのワークメモリは、例えば内蔵ＲＡＭ１７に配置する。
【００３３】
ステップＳ４０１において、ＣＰＵ１１は、メモリコントローラ１８を初期化する処理を行う。この処理について、詳しくは後述するが、ＣＰＵ１１は、メモリコントローラ１８の初期化の処理により、揮発性のメモリ（第１のＤＤＲメモリ２１および第２のＤＤＲメモリ２２）へのアクセスが可能となるよう設定を行う。
【００３４】
ステップＳ４０３において、ＣＰＵ１１は、不揮発メモリ１４からカーネルコード３１を読み出して、揮発性のメモリへカーネルコード３１をコピーする。
【００３５】
ステップＳ４０５において、ＣＰＵ１１は、ブートローダ４０から、コピーされたカーネルへジャンプし、カーネルコード３１の処理を開始する。
【００３６】
図５は、ＣＰＵ１１による、メモリコントローラ１８を初期化する処理を示すフローチャートである。図５に示す各処理は、図４のステップＳ４０１の処理に対応する。
【００３７】
ステップＳ５０１において、ＣＰＵ１１は、リセットフラグ３７を参照し、リセットフラグ３７が値”０”である場合は（ステップＳ５０１において、リセットフラグが値「０」）、リセットによる起動ではなく電源投入時の起動であるため、揮発性のメモリのダンプは不要と判断し、ステップＳ５０３の処理を行い、そうでなければ（リセットフラグが値「１」）ステップＳ５０９の処理を行う。
【００３８】
ステップＳ５０３において、ＣＰＵ１１は、第１のＤＤＲメモリ２１に対して第１のメモリ空間（アドレス”0x00000000”からアドレス”0x1FFFFFFF”の範囲）の物理アドレスを設定し、第２のＤＤＲメモリ２２に対して第２のメモリ空間（アドレス”0x20000000”からアドレス”0x3FFFFFFF”の範囲）の物理アドレスを設定してアドレス割り当てレジスタ３９を更新する。
【００３９】
ステップＳ５０５において、ＣＰＵ１１は、アドレス割り当てフラグ３６を値”0x0”に設定する。この設定は、ダンプ対象のデータが第１のメモリ空間に配置されることを示している。
【００４０】
ステップＳ５０７において、ＣＰＵ１１は、ダンプは不要と判断し、ダンプフラグ３８を値”0x0”と設定する。
【００４１】
ステップＳ５０９において、ＣＰＵ１１は、アドレス割り当てフラグ３６を参照し、アドレス割り当てフラグ３６が値「0x1」であればステップＳ５１１の処理を行い、アドレス割り当てフラグ３６が値”0x0”であればステップＳ５１７の処理を行う。
【００４２】
ステップＳ５１１において、ＣＰＵ１１は、第１のＤＤＲメモリ２１に対して第１のメモリ空間（アドレス”0x00000000”からアドレス”0x1FFFFFFF”の範囲）の物理アドレスを設定し、第２のＤＤＲメモリ２２に対して第２のメモリ空間（アドレス”0x20000000”からアドレス”0x3FFFFFFF”の範囲）の物理アドレスを設定してアドレス割り当てレジスタ３９を更新する。
【００４３】
ステップＳ５１３において、ＣＰＵ１１は、アドレス割り当てフラグ３６を値”0x0”に設定する。
【００４４】
ステップＳ５１５において、ＣＰＵ１１は、ダンプは必要と判断し、ダンプフラグ３８を値”0x1”と設定する。
【００４５】
ステップＳ５１７において、ＣＰＵ１１は、第２のＤＤＲメモリ２２に対して第１のメモリ空間（アドレス”0x00000000”からアドレス”0x1FFFFFFF”の範囲）の物理アドレスを設定し、第１のＤＤＲメモリ２１に対して第２のメモリ空間（アドレス”0x20000000”からアドレス”0x3FFFFFFF”の範囲）の物理アドレスを設定してアドレス割り当てレジスタ３９を更新する。
【００４６】
ステップＳ５１９において、ＣＰＵ１１は、アドレス割り当てフラグ３６を値”0x1”に設定する。
【００４７】
ステップＳ５２１において、ＣＰＵ１１は、ダンプは必要と判断し、ダンプフラグ３８を値”0x1”に設定する。
【００４８】
ステップＳ５２３において、ＣＰＵ１１は、リセットフラグ３７をオン（値”0x1”）に設定する。
【００４９】
図６は、カーネルの動作を示すフローチャートである。図６に示す処理は、図４に示すステップＳ４０５以降の処理に対応する。
【００５０】
ステップＳ６０１において、ＣＰＵ１１は、カーネルの動作により、複数のアプリケーションを情報処理装置１００で動作させるため、カーネル用ワークメモリ３２を初期化する。
【００５１】
ステップＳ６０３において、ＣＰＵ１１は、カーネルの動作により、ユーザインタフェース（User  Interface）用のアプリケーションを不揮発メモリ１４からカーネル用ワークメモリ３２へロードし、このアプリケーションを起動する。
【００５２】
ステップＳ６０５において、ＣＰＵ１１は、カーネルの動作により、ダンプ対象のデータを揮発性のメモリ（第１のＤＤＲメモリ２１と第２のＤＤＲメモリ２２）から、例えば不揮発メモリ１４へダンプするためのアプリケーションを不揮発メモリ１４からカーネル用ワークメモリ３２へロードし、このアプリケーションを起動する。ここまでの処理において、カーネルは、アドレス”0x00000000”からアドレス”0x1FFFFFFF”の範囲のメモリ空間をメモリとして使用している。
【００５３】
ステップＳ６０７において、ＣＰＵ１１は、カーネルの動作により、処理すべきイベントが発生するまで待機し（ステップＳ６０９）、処理すべきイベントが発生した場合は、その内容に応じた処理を行う。
【００５４】
例えば、電源キー１２に対する入力を示すイベントが発生した場合、ステップＳ６１１において、ＣＰＵ１１は、リセットフラグ３７を値”0x0”として、情報処理装置１００の電源が正常にオフにされたことを示すフラグ状態とした後、ステップＳ６１３において、電源ＩＣ１３の設定を変更して情報処理装置１００の電源をオフにする。
【００５５】
また、ステップＳ６０７において、エラーの発生を示すイベントが発生した場合、ステップＳ６１５において、ＣＰＵ１１は、ハードウェアリセットを行いブートローダ４０をブートＲＯＭ１６から読み出して実行する。
【００５６】
図７は、メモリダンプ用のアプリケーションの処理を示すフローチャートである。ＣＰＵ１１は、カーネルの動作により、メモリダンプ用のアプリケーションをステップＳ６０５の処理において起動する。
【００５７】
ステップＳ７０１において、ＣＰＵ１１は、メモリダンプ用のアプリケーションの起動後、ワーク変数を初期化する。
【００５８】
ステップＳ７０３において、ＣＰＵ１１は、ダンプフラグ３８を参照し、メモリダンプが必要であるか否かを判断する。メモリダンプが必要である場合、ＣＰＵ１１は、ステップＳ７０５の処理を行い、そうでない場合は、ステップＳ７０７の処理を行う。
【００５９】
ステップＳ７０５において、ＣＰＵ１１は、第２のメモリ空間（アドレス”0x20000000”からアドレス”0x3FFFFFFF”の範囲）の物理アドレスを指定して、メモリコントローラ１８を介して、指定したアドレスのデータを不揮発メモリ１４へダンプイメージとして保存する。なお、ダンプイメージを保存する場合、ＣＰＵ１１は、ダンプ対象のデータに対し、圧縮、暗号化その他の処理を施してもよい。また、ＣＰＵ１１は、ダンプイメージを不揮発メモリ１４へ保存せず、例えばカーネル内の特定の変数を読み出すなど、予め定めた手順に従ってメモリの内容を読み出して、その解析結果を不揮発メモリ１４等に保存してもよいし、解析結果とダンプイメージとを不揮発メモリ１４等に保存してもよい。メモリダンプが完了すると、ＣＰＵ１１は、ステップＳ７０７の処理を行う。
【００６０】
ステップＳ７０７において、ＣＰＵ１１は、メモリダンプ用のアプリケーションから、カーネルに対し、第２のメモリ空間（アドレス”0x20000000”からアドレス”0x3FFFFFFF”の範囲）の物理アドレスが使用可能であることを通知する。この通知により、カーネルは、第２のメモリ空間に示されるメモリ領域を、アプリケーション用のメモリとして使用可能であるとして以降の処理を行う。
【００６１】
ステップＳ７０９において、ＣＰＵ１１は、ダンプフラグ３８をオフにする。
以上のように動作することで、カーネルが動作しているメモリアドレスは、第１のメモリ空間（アドレス”0x00000000”からアドレス”0x1FFFFFFF”の範囲）の物理アドレスとなる。また、メモリダンプ用のアプリケーションがダンプの対象とするメモリアドレスの範囲は、第２のメモリ空間（アドレス”0x20000000”からアドレス”0x3FFFFFFF”の範囲）の物理アドレスとなる。これらのメモリ空間に対し、第１のＤＤＲメモリ２１と第２のＤＤＲメモリ２２のうちいずれが割り当てられているかは、アドレス割り当てフラグ３６の値をもとにブートローダ４０の動作によって決定されるが、カーネルやメモリダンプ用のアプリケーションは、第１のＤＤＲメモリ２１と第２のＤＤＲメモリ２２のメモリアドレスの割り当て状況を意識せず、定められたアドレスに対してメモリダンプ等の動作を行うことができる。
【００６２】
図８は、ブートローダ、カーネル、メモリダンプ用のアプリケーションその他の動作によるメモリの使用状態およびフラグの値の推移を示す図である。図８において、横軸は、時間的な推移を示している。図８では、情報処理装置１００の電源がオンとなり、ブートローダが読み出され、メモリダンプ用のアプリケーションによる処理が行われ、その後、エラーが発生して再起動し、ブートローダが読み出され、メモリダンプ用のアプリケーションによる処理が行われていることを示している。
【００６３】
リセットフラグ３７は、情報処理装置１００の電源オンの直後において値”0x0”となっており、カーネルの動作によってメモリコントローラ１８の初期化が行われることにより、値”0x1”となる（ステップＳ５２３）。以降、リセットフラグ３７は、情報処理装置１００にエラーが発生し、再起動した場合も値を保持し続ける。
【００６４】
ダンプフラグ３８は、情報処理装置１００にエラーが発生し、再起動した場合に、ブートローダによるメモリコントローラ１８の初期化の処理において、値”0x1”が設定され（ステップＳ５２１）、ダンプの完了により値”0x0”が設定される（ステップＳ７０９）。
【００６５】
アドレス割り当てフラグ３６は、情報処理装置１００にエラーが発生し、再起動した場合に、第１のＤＤＲメモリ２１と第２のＤＤＲメモリ２２とに割り当てるメモリアドレスが変更されたことを示している（ステップＳ５１９）。
【００６６】
第１のＤＤＲメモリ２１（ＤＤＲメモリ１）は、情報処理装置１００の電源オンの後、ブートローダによるメモリアドレスの割り当てにより使用可能となる（ステップＳ５０３）。また、情報処理装置１００にエラー発生後、再起動時にメモリアドレスの割り当てが行われ、第１のＤＤＲメモリ２１に第２のメモリ空間（アドレス”0x20000000”からアドレス”0x3FFFFFFF”の範囲）の物理アドレスが割り当てられると（ステップＳ５１７）、ダンプ対象のデータ８２が、メモリダンプ用のアプリケーションによって不揮発メモリ１４にダンプされる（ステップＳ７０５）。メモリダンプ用のアプリケーションが、第２のメモリ空間のデータのメモリダンプが完了することで、カーネルに対し、この第２のメモリ空間の使用可能が通知される（ステップＳ５０７）。
【００６７】
情報処理装置１００の電源オンの後、ブートローダがメモリダンプ用のアプリケーションを起動し（ステップＳ６０５）、このメモリダンプ用のアプリケーションが、カーネルに対し、メモリ空間の使用可能を通知する（ステップＳ７０７）。これにより、カーネルは、第２のＤＤＲメモリ２２（ＤＤＲメモリ２）を使用可能となる。情報処理装置１００にエラー発生後、再起動時にメモリアドレスの割り当てが行われ、第２のＤＤＲメモリ２２に第１のメモリ空間（アドレス”0x00000000”からアドレス”0x1FFFFFFF”の範囲）の物理アドレスが割り当てられる（ステップＳ５１７）。
【００６８】
＜実施の形態２＞
実施の形態２の情報処理装置１００は、３つ以上の揮発性のメモリをメモリコントローラ１８に接続する。実施の形態２として、このような場合を以下に説明する。
【００６９】
実施の形態２において、メモリコントローラ１８に３つの揮発性のメモリを接続する場合、情報処理装置１００は、アドレス割り当てレジスタ１９において、各揮発性のメモリに対応して、メモリアドレスの設定値を記憶する。
【００７０】
また、３つ以上の揮発性のメモリをメモリコントローラ１８に接続する場合、ＣＰＵ１１は、メモリコントローラ１８の初期化の処理において、リセットフラグ３７とアドレス割り当てフラグ３６の値に応じて、３つ以上の揮発性のメモリのうち、いくつかのメモリのみからなるサブセットの中で物理アドレスを入れ替えることとすることができる。また、全ての揮発性のメモリの間で順に物理アドレスの割り当てを入れ替えることとしてもよい。
【００７１】
＜実施の形態３＞
実施の形態３の情報処理装置１００において、メモリコントローラ１８は、アクセスする揮発性のメモリを決定するために、メモリコントローラ１８が接続するバス側の特定のアドレス線やチップセレクト線に基づいて、揮発性のメモリへのアクセスを制御する。
【００７２】
例えば、バスに、アドレス線／データ線の他に、チップセレクト線ＣＳ−Ａおよびチップセレクト線ＣＳ−Ｂが含まれており、これらチップセレクト線が、メモリコントローラ１８と接続されているとする。ＣＰＵ１１は、揮発性のメモリにアクセスする際に、指定するアドレスに応じてチップセレクト線の出力を決定する。例えば、上記の各実施形態と同様に、アドレス”0x00000000”からアドレス”0x3FFFFFFF”のアドレス空間は、揮発性のメモリ（第１のＤＤＲメモリ２１と第２のＤＤＲメモリ２２）に対応するメモリアドレスとする。ＣＰＵ１１は、例えば、アドレス”0x00000000”からアドレス”0x1FFFFFFF”の範囲のアドレスを指定して揮発性のメモリへアクセスする場合に、チップセレクト線ＣＳ−Ａの出力を出力”Ｈ”にし、チップセレクト線ＣＳ−Ｂの出力を出力”Ｌ”とする。また、ＣＰＵ１１は、アドレス0x20000000”からアドレス”0x3FFFFFFF”の範囲のアドレスを指定して揮発性のメモリへアクセスする場合に、チップセレクト線ＣＳ−Ａの出力を出力”Ｌ”にし、チップセレクト線ＣＳ−Ｂの出力を出力”Ｈ”とする。ＣＰＵ１１は、これら以外のアドレスへのアクセスを行う場合は、チップセレクト線ＣＳ−Ａ、ＣＳ−Ｂの出力を、ともに出力”Ｌ”にする。メモリコントローラと接続する第１のＤＤＲメモリ２１と第２のＤＤＲメモリ２２とは、それぞれアドレス線／データ線の他に、１本のチップセレクト線を有し、このチップセレクト線に入力”Ｈ”が入力された場合にのみ、揮発性のメモリの読み出し／書き込みを行うとする。
【００７３】
メモリコントローラ１８は、アドレス割り当てレジスタ１９を含み、アドレス割り当てレジスタ１９は、揮発性のメモリの数に対応して値を保持する。例えば、揮発性のメモリが２つの場合は、アドレス割り当てレジスタ１９は、例えば値”０”または値”１”のいずれかを記憶する。アドレス割り当てレジスタ１９の記憶値は、揮発性のメモリに割り当てられたアドレス空間において、それぞれの揮発性のメモリに割り当てられたメモリアドレスの範囲を示す。
【００７４】
例えば、アドレス割り当てレジスタ１９の値が”０”の場合、第１のＤＤＲメモリ２１に、アドレス”0x00000000”からアドレス”0x1FFFFFFF”の範囲のアドレスが割り当てられ、第２のＤＤＲメモリ２２に、アドレス”0x20000000”からアドレス”0x3FFFFFFF”の範囲のアドレスが割り当てられているとする。また、アドレス割り当てレジスタ１９の値が”１”の場合、第２のＤＤＲメモリ２２に、アドレス”0x00000000”からアドレス”0x1FFFFFFF”の範囲のアドレスが割り当てられ、第１のＤＤＲメモリ２１に、アドレス”0x20000000”からアドレス”0x3FFFFFFF”の範囲のアドレスが割り当てられているとする。
【００７５】
メモリコントローラ１８は、チップセレクト線ＣＳ−ＡおよびＣＳ−Ｂの出力と、アドレス割り当てレジスタの値とに基づいて、第１のＤＤＲメモリ２１と第２のＤＤＲメモリ２２へのアクセスを制御する。チップセレクト線ＣＳ−ＡおよびＣＳ−Ｂの出力がともに出力”Ｌ”である場合は、バスから揮発性のメモリにアクセスしている状態ではないため、揮発性のメモリは読み出し／書き込みの動作を行わない。また、チップセレクト線ＣＳ−ＡおよびＣＳ−Ｂがともに出力”Ｈ”となるような、バスから２つのチップセレクト線が同時に出力されることは禁止されているとする。アドレス割り当てレジスタ１９の値が”０”の場合、メモリコントローラ１８は、チップセレクト線ＣＳ−Ａの出力が出力”Ｈ”であれば第１のＤＤＲメモリ２１を選択し、チップセレクト線ＣＳ−Ｂの出力が出力”Ｈ”であれば第２のＤＤＲメモリ２２を選択する。また、アドレス割り当てレジスタ１９の値が”１”の場合、メモリコントローラ１８は、チップセレクト線ＣＳ−Ａの出力が出力”Ｈ”であれば第２のＤＤＲメモリ２２を選択し、チップセレクト線ＣＳ−Ｂの出力が出力”Ｈ”であれば第１のＤＤＲメモリ２１を選択する。
【００７６】
＜まとめ＞
各実施の形態で説明した情報処理装置は、エラー発生後の再起動時に、初回の起動かエラーの発生による起動かを確認し、エラー発生による再起動の場合には、揮発性のメモリに対し、エラーの発生の前後で異なるメモリアドレスを割り当てる。これにより、エラー発生前のメモリの状態が、エラー発生後のメモリで上書きされることなく保持することができる。情報処理装置は、起動後、アプリケーションの実行により、カーネルが使用する全メモリ領域のダンプや検証を行うことが可能となり、エラー発生時点でカーネルが使用しているメモリの状態を不足なく取得することができる。ダンプにより保存されたデータは、エラー発生原因の解析に有効に利用することができる。
【００７７】
情報処理装置は、再起動時にエラー発生前後のメモリアドレスの割り当てを変更することでダンプ対象のデータの上書きを抑止しているため、ブートローダの起動時間は変わらず、エラー発生後の再起動時間が長期化することもない。
【００７８】
また、情報処理装置は、ダンプの対象となるデータを保持するメモリに対し、エラー発生時のメモリダンプや検証を行った後、そのメモリが使用可能であることをカーネルへ通知する。情報処理装置が起動し、メモリダンプ等の処理を終えて通常の動作を行っている状態において、情報処理装置が使用可能なメモリの総量が、情報処理装置に搭載されるメモリの総量に一致し、メモリを有効に使用することができる。また、メモリダンプを行うためにメモリを二重化する等の措置もする必要がなくなる。
【００７９】
また、情報処理装置は、メモリコントローラがメモリにメモリアドレスを割り当てるため、ソフトウェア側から指定するメモリアドレスを一定にすることができる。すなわち、情報処理装置のシステム上で動作するアプリケーションは、ダンプ対象のデータが保持されるメモリアドレスをソフトウェアが判別する必要がなくなる。
【００８０】
本発明の情報処理装置は、プロセッサと、その上で実行されるプログラムにより実現される。本発明を実現するプログラムは、通信インタフェースを介してネットワークを利用したサーバとの送受信等により提供される。
【００８１】
今回開示された実施の形態はすべての点で例示であって制限的なものでないと考えられるべきである。この発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【００８２】
１１  ＣＰＵ、１２  電源キー、１３  電源ＩＣ、１４  不揮発メモリ、１５  ディスプレイ、１６  ブートＲＯＭ、１７  内蔵ＲＡＭ、１８  メモリコントローラ、１９  アドレス割り当てレジスタ、２１  第１のＤＤＲメモリ、２２  第２のＤＤＲメモリ、３１  カーネルコード、３２  カーネル用ワークメモリ、３３  アプリケーション用メモリ、３４  格納されたカーネル、３５  格納されたアプリケーション、３６  アドレス割り当てフラグ、３７  リセットフラグ、３８  ダンプフラグ、３９  アドレス割り当てレジスタ、４０  ブートローダ、１００  情報処理装置。
【図１】
2015090512.tif 000003
【図２】
2015090512.tif 000004
【図３】
2015090512.tif 000005
【図４】
2015090512.tif 000006
【図５】
2015090512.tif 000007
【図６】
2015090512.tif 000008
【図７】
2015090512.tif 000009
【図８】
2015090512.tif 000010