(57)【特許請求の範囲】
【請求項１】
データ処理装置においてメモリのクラッシュダンプを実行する方法であって、
起動時にアロケートされたメモリを使用して、第２のルーチンによってダンプされるデータのメモリロケーションを前記ダンプされるデータの物理ページ番号を用いてアクセスし、当該仮想ページ番号を用いてアクセスされるときに、前記第２のルーチンを実行するためのデータのメモリロケーションを特定するクラッシュダンプページフォールトハンドラが起動される、第１のルーチンを実行することと、
前記特定されたメモリロケーションを含まないメモリ範囲から前記第２のルーチンにおいて前記ダンプされるデータが移動されるメモリをアロケートすることと、
前記アロケートされたメモリを使用して前記第２のルーチンを実行することと
を含み、
前記第１のルーチンは、
ディスクに対するいかなる入出力も行われないように変更されたクラッシュダンプであるダミークラッシュダンプルーチン
を含み、
前記第２のルーチンは、
クラッシュダンプルーチン
を含む
方法。
【請求項２】
前記ダミークラッシュダンプルーチンは、前記クラッシュダンプルーチンよりも小さなデータサイズを使用する
請求項１に記載の方法。
【請求項３】
前記ダミークラッシュダンプルーチンの前記実行は、カーネルクラッシュによってトリガされる
請求項１に記載の方法。
【請求項４】
前記データ処理装置は、
仮想メモリ管理システム
を備え、
前記データのメモリロケーションを特定する前記ダミークラッシュダンプルーチンを実行することは、
前記ダミークラッシュダンプルーチンによってアクセスされる仮想ページアドレスに対応する物理ページアドレスの記録を作成すること
を含む
請求項１に記載の方法。
【請求項５】
前記ダミークラッシュダンプルーチンを実行することは、
仮想ページアドレスが前記ダミークラッシュダンプルーチンによってアクセスされるときにクラッシュダンプページフォールトハンドラを起動すること
をさらに含み、
前記仮想ページアドレスに対応する前記物理ページアドレスを保存することは、前記クラッシュダンプページフォールトハンドラによって実行される
請求項４に記載の方法。
【請求項６】
前記装置のページテーブルのすべての変換を無効としてマーキングすることであって、前記ダミークラッシュダンプルーチンの期間中に前記クラッシュダンプページフォールトハンドラを起動する、マーキングすること
をさらに含む請求項５に記載の方法。
【請求項７】
前記特定されたメモリロケーションを含まないメモリ範囲を特定することと、
前記クラッシュダンプルーチンの実行用メモリを前記メモリ範囲からアロケートする前に、前記メモリ範囲のデータを不揮発性ストレージに保存することと
をさらに含む請求項１に記載の方法。
【請求項８】
前記クラッシュダンプルーチンの実行用メモリをアロケートすることは、
少なくとも１つの圧縮バッファ用のメモリをアロケートすること
を含む請求項１に記載の方法。
【請求項９】
前記クラッシュダンプルーチンの実行用メモリをアロケートすることは、
並列Ｉ／Ｏの実行用の複数のバッファをアロケートすること
を含む請求項１に記載の方法。
【請求項１０】
前記クラッシュダンプルーチンを実行することは、
圧縮アルゴリズム、並列Ｉ／Ｏオペレーションアルゴリズム、暗号化アルゴリズムおよびネットワークを介して不揮発性ストレージに書き込むアルゴリズムの１つ以上を実行すること
を含む
請求項１に記載の方法。
【請求項１１】
データ処理装置においてメモリのクラッシュダンプをコンピュータに実行させるプログラムであって、
起動時にアロケートされたメモリを使用して、第２のルーチンによってダンプされるデータのメモリロケーションを前記ダンプされるデータの物理ページ番号を用いてアクセスし、第２のルーチンを実行するためのデータに仮想ページ番号を用いてアクセスし、当該仮想ページ番号を用いてアクセスされるときに、前記第２のルーチンを実行するためのデータのメモリロケーションを特定するクラッシュダンプページフォールトハンドラが起動される、第１のルーチンを実行する処理ユニットと、
前記特定されたメモリロケーションを含まないメモリ範囲から前記第２のルーチンにおいて前記ダンプされるデータが移動されるメモリをアロケートするメモリアロケータと
を前記コンピュータに実行させ、
前記処理ユニットは、前記メモリアロケータによってアロケートされた前記メモリを使用して前記第２のルーチンを、前記コンピュータにさらに実行させ
前記第１のルーチンは、
ディスクに対するいかなる入出力も行われないように変更されたクラッシュダンプであるダミークラッシュダンプルーチン
を前記コンピュータに実行させ、
前記第２のルーチンは、
クラッシュダンプルーチン
を前記コンピュータに実行させる
プログラム。
【請求項１２】
前記処理ユニットは、低メモリ動作モードで、前記ダミークラッシュダンプルーチンを、前記コンピュータに実行させるように構成される
請求項１１に記載のプログラム。
【請求項１３】
前記処理ユニットは、前記コンピュータに、仮想メモリアドレスを使用して、前記データ処理装置のメモリにアドレスさせ、
前記プログラムは、
前記コンピュータに、前記ダミークラッシュダンプルーチンの期間中にアクセスされる仮想アドレスに対応する物理アドレスを保存させる内部メモリ
をさらに備える
請求項１１に記載のプログラム。
【請求項１４】
前記ページフォールトハンドラは、前記ダミークラッシュダンプルーチンの期間中にアクセスされた仮想アドレスに対応する物理アドレスを、前記コンピュータに保存させる
請求項１１に記載のプログラム。
【請求項１５】
前記処理ユニットは、前記コンピュータに、前記データ処理装置のページテーブルのすべての変換を無効としてマーキングさせ、前記ダミークラッシュダンプルーチンの期間中に前記クラッシュダンプページフォールトハンドラを起動させる
請求項１４に記載のプログラム。
【請求項１６】
前記メモリアロケータは、前記コンピュータに、前記特定されたメモリロケーションを含まないメモリ範囲を特定させ、
前記処理ユニットは、前記コンピュータに、実際のダンプの実行用メモリを前記メモリ範囲からアロケートする前に、前記メモリ範囲のデータを、不揮発性ストレージに保存させる
請求項１１に記載のプログラム。
【請求項１７】
カーネルを構成する
請求項１１に記載のプログラム。
【請求項１８】
メモリと、
カーネルと、
前記カーネルのクラッシュ時に、前記メモリの第２の部分のクラッシュダンプに使用される前記メモリの第１の部分をアロケートするメモリアロケータと、
前記カーネルのクラッシュ時に前記メモリの前記第２の部分を不揮発性ストレージに保存するクラッシュダンプモジュールと、
を備える装置であって、
前記クラッシュダンプモジュールは、前記カーネルのクラッシュ時に、ディスクに対するいかなる入出力も行われないように変更されたクラッシュダンプであるダミークラッシュダンプルーチンを、起動時にアロケートされたメモリを使用して実行して、クラッシュダンプルーチンによってダンプされるデータに、前記ダンプされるデータのメモリロケーションである物理ページ番号を用いてアクセスし、クラッシュダンプルーチンを実行するのに使用されるカーネルデータ構造体に仮想ページ番号を用いてアクセスし、当該仮想ページ番号を用いてアクセスされるときに、前記カーネルデータ構造体のメモリロケーションを特定するクラッシュダンプページフォールトハンドラが起動されるようにさらに動作し、
前記メモリアロケータは、前記特定されたカーネルデータ構造体を含まないメモリ範囲を特定して、前記特定されたメモリ範囲から前記クラッシュダンプにおいて前記第２の部分のデータが移動される前記メモリの前記第１の部分をアロケートする
装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クラッシュダンプルーチンを実行するメモリがクラッシュ時にアロケートされるデータ処理装置においてクラッシュダンプを実行できるようにする方法およびその装置に関する。
【背景技術】
【０００２】
ほとんどのオペレーティングシステムは、エンジニアが後にクラッシュの原因を特定することをより容易にするために、クラッシュ時に物理メモリのコンテンツを不揮発性ストレージに保存するためのプロシージャを有する。
このプロシージャは、通常、カーネルのサブシステムによって実行される。
たとえば、カーネルが実行しているプログラムの１つにおける致命的エラーの結果として、カーネルのクラッシュ時に、クラッシュダンプルーチンは、物理メモリのコンテンツを読み出し、そのコンテンツを、専用内部ディスクのような安定したストレージに書き込むか、または、ネットワークを介して外部デバイスに書き込む。
エンジニアは、後に、記憶されたデータであるダンプに対してカーネルデバッガを実行することができる。
【０００３】
クラッシュダンプを実行するためには、メモリが必要である。
従来では、メモリの或るエリアが、この目的のためにシステムの起動時にアロケートされる。
しかしながら、クラッシュを実行するためのメモリ全体が起動時にアロケートされると、アロケートされたメモリは、ランタイム中に他の目的に使用することができない。
この結果、利用可能なメモリ資源の使用は非効率的なものとなる。
この問題は、圧縮、並列入出力、および、ネットワークを介したダンプを利用する、より高度化されたクラッシュダンプルーチンを使用するオペレーティングシステムではさらに悪化する。
その理由は、それらのオペレーティングシステムは、より高いメモリ要件を有し、したがって、さらに多くのメモリがランタイム中に他の目的で利用不能となるからである。
加えて、クラッシュダンプを実行するのに必要なメモリ量の特定は、いくつかの状況では、起動時よりもクラッシュ時の方が容易である。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
上記問題を克服する試みが行われてきた。
たとえば、ＨＰ−ＵＸＴＭオペレーティングシステムは、ランタイム時ではなくクラッシュ時にダンプを実行するためのメモリをアロケートする。
クラッシュ時に使用するメモリを見つけるためにこのオペレーティングシステムによって使用される技法は、メモリの各ページがどのようなタイプのデータを記憶するのかを経過監視することを伴う。
カーネルは、物理メモリの各ページをその使用に従って分類し、クラッシュ時には、再利用するのに安全であるページのクラスに属するページを容易に特定することができる。
この技法に関する問題は、各ページが属するクラスを経過監視するための記録が、利用可能なメモリの大きな部分を占めるということである。
【課題を解決するための手段】
【０００５】
本願にかかる方法は、上述した背景からなされ、データ処理装置においてメモリのクラッシュダンプを実行する方法であって、第２のルーチンによって使用されるデータのメモリロケーションを特定する第１のルーチンを実行することと、前記特定されたメモリロケーションを含まないメモリ範囲から前記第２のルーチンの実行用メモリをアロケートすることと、前記アロケートされたメモリを使用して前記第２のルーチンを実行することと、を含み、前記第１のルーチンは、ダミークラッシュダンプルーチンを含み、前記第２のルーチンは、クラッシュダンプルーチンを含む。
【０００６】
次に、添付図面を参照して、本発明の実施形態を例として説明する。
【発明を実施するための最良の形態】
【０００７】
図１は、サーバまたはワークステーション等の処理システム１の概略図である。
この処理システム１は、プロセッサ２、たとえばダイナミックＲＡＭの形態のメインメモリ３、ハードディスク４、および、追加の不揮発性ディスク５を備える。
これらは、バス６によって相互接続されている。
不揮発性ディスク５は、クラッシュ時に物理データを保存するのに使用することができる。
システムは、当業者に明らかなように、通常、システムのオペレーションに必要な他のさまざまな入出力（Ｉ／Ｏ）サブシステム７も含む。
プロセッサは、中央処理装置ＣＰＵ８、内部キャッシュメモリ９、変換索引バッファＴＬＢ１０、および、中央バス６とインターフェースするためのバスインターフェースモジュール１１を備える。
【０００８】
図１は例示にすぎず、本発明は、単一のプロセッサのみを有するシステムに限定されるものではないことが理解されるべきである。
本発明は、複数のプロセッサを有するシステムでも実施することができる。
その上、不揮発性ディスク５は、中央バス６の代わりにＩ／Ｏサブシステム７に接続することもできる。
不揮発性ディスク５は、たとえば、ネットワークを介してアクセスすることができ、リモートロケーションに配置することができる。
【０００９】
図２は、ソフトウェアとハードウェアとの間の相互関係を示すコンピュータシステムの高レベルの概観である。
このシステムは、ハードウェアレベル１２、カーネル１３、および、ユーザレベル１４を含む。
ハードウェアレベル１２は、図１に示すハードウェアシステム構成要素を含み、カーネル１３は、ハードウェアを制御するオペレーティングシステムの部分であり、ユーザレベル１４は、コンピュータ上で実行されているアプリケーションプログラムを含む。
プロセッサは、１つまたは複数のプロセスを実行する。
これらプロセスは、実行中のプログラムとして定義することができる。
通常、プロセス自体は多数のスレッドとして実行される。
ここで、スレッドは、オペレーティングシステムスケジューラによって実行のためにスケジューリングすることができるプロセス内のエンティティである。
また、カーネル１３は、以下でより詳細に説明するクラッシュダンプサブシステム１５も含む。
【００１０】
図１に示すキャッシュ９、メインメモリ３、および、ハードディスク４は、すべて、プログラム命令およびデータを記憶することができる。
これらプログラム命令およびデータは通常、合わせてデータと総称される。
データは、Ｉ／Ｏサブシステム７を通じてアクセスされる外部デバイスにも記憶することができる。
カーネル１３のタスクの１つは、メモリ資源へのアクセスを管理することである。
プロセスまたはスレッドを実行するには、そのプロセスまたはスレッドに必要なデータが、ＣＰＵ８に利用可能であるように、実行時にメインメモリ３に存在しなければならない。
メインメモリ３は、物理メモリとも呼ばれる。
カーネル１３自体が、起動時にメモリにロードされると、カーネル１３は、所望のプロセスまたはスレッドを実行するのに必要な他のあらゆるデータが物理メモリ３に確実に移されるようにする。
しかしながら、ＲＡＭの量は限られており、特定のプログラムに関連付けられるすべてのデータが、ＲＡＭで最初から利用可能にされている場合、システムは、限られた個数のプログラムしか実行することができない。
したがって、ＨＰ−ＵＸＴＭ等の現代のオペレーティングシステムは仮想メモリ管理システムを作動させ、それによって、カーネルは、データおよび命令を、必要なときにハードディスク４または外部メモリデバイスからＲＡＭ３へ移動させ、もはや必要でないときに戻すことができる。
利用可能な全メモリは、仮想メモリと呼ばれ、物理メモリのサイズを超えることができる。
仮想メモリ空間の一部は、物理メモリ内に対応するアドレスを有する。
仮想メモリ空間の残りは、ハードディスク４および／または外部メモリデバイス上のアドレスにマッピングされる。
以下では、特に指定のない限り、ハードディスクからＲＡＭへデータをロードすると言うときはいずれも、他の任意の外部メモリデバイスからＲＡＭへデータをロードすることも指すものと解釈されるべきである。
【００１１】
プログラムがコンパイルされるとき、コンパイラは、メモリ内のロケーションを表す、プログラムコードの仮想アドレスを生成する。
オペレーティングシステムが、その後、そのプログラムを実行している間に仮想アドレスにアクセスしようと試みるとき、システムは、特定のアドレスが物理アドレスに対応しているか否かをチェックする。
特定のアドレスが物理アドレスに対応している場合には、システムは、対応している物理アドレスのデータにアクセスする。
仮想アドレスが物理アドレスに対応していない場合には、システムは、ハードディスク４からデータを取り出し、そのデータを物理メモリ３に移動させる。
システムは、その後、通常の方法で物理メモリのデータにアクセスする。
物理メモリに十分に利用可能なメモリがない場合には、使用済みメモリを解放しなければならず、解放されるアドレスに保存されているデータおよび命令は、ハードディスク４へ移動される。
通例、物理メモリから移動されるデータは、しばらくの間使用されていないデータである。
【００１２】
ページは、仮想アドレスにマッピングすることができる物理メモリの最小単位である。
たとえば、ＨＰ−ＵＸ（商標）システムでは、ページサイズは４ＫＢである。
したがって、仮想ページは、仮想ページ番号ＶＰＮによって参照される一方、物理ページは、物理ページ番号ＰＰＮによって参照される。
必要な場合にのみ仮想メモリをメインメモリに移すプロセスは、デマンドページングと呼ばれる。
【００１３】
図３を参照すると、さまざまな種類のメモリとデータが記憶される場所とを管理するために、ＨＰ−ＵＸ（商標）等のオペレーティングシステムは、ページディレクトリ（ＰＤＩＲ）１６と呼ばれるテーブルをメモリに保持する。
ＰＤＩＲ１６は、現在メモリにあるすべてのページを経過監視する。
ページが或る仮想アドレス空間でマッピングされるとき、そのページには、ＰＤＩＲのエントリがアロケートされる。
ＰＤＩＲは、メモリの物理ページをその仮想アドレスにリンクする。
ＰＤＩＲ１６の全てのエントリは、物理ページ番号を有するフィールド１７、仮想ページ番号を有するフィールド１８、および、メモリのページに関する少なくとも１ビットの補助情報を有する少なくとも１つのフィールド１９を含む。
【００１４】
ＰＤＩＲ１６は、ＲＡＭ３に保存される。
システムを高速化するために、ＰＤＩＲのサブセットが、プロセッサ２のＴＬＢ１０に記憶される。
ＴＬＢは、仮想アドレスを物理アドレスに変換する。
したがって、各エントリは、仮想ページ番号および物理ページ番号の双方を含む。
【００１５】
本発明は、図３に示すハッシュページテーブルの配列の使用に限定されるものではなく、線形階層ページテーブル等の他のタイプのページテーブルを使用するシステムにも適用可能である。
【００１６】
図４を参照すると、ＣＰＵ８は、メモリページにアクセスしたいとき、最初に、ＶＰＮをインデックスとして使用してＴＬＢ１０を調べる。
ＰＰＮがＴＬＢ１０で見つかる場合、これはＴＬＢヒットと呼ばれ、プロセッサは、必要なページがメインメモリ３にあることを知る。
次に、ページからの必要なデータを、ＣＰＵ８によって使用されるキャッシュ９にロードすることができる。
キャッシュコントローラ（図示せず）は、必要なデータをキャッシュ９にロードするプロセスを制御することができる。
キャッシュコントローラは、必要なデータがキャッシュ９にすでに存在するか否かをチェックする。
必要なデータがキャッシュに存在しない場合には、キャッシュコントローラは、ＲＡＭからデータを取り出して、そのデータをキャッシュに移動させることができる。
キャッシュ９は、物理的にインデックスすることもできるし、仮想的にインデックスすることもできる。
【００１７】
ページ番号がＴＬＢで見つからない場合、これはＴＬＢミスと呼ばれ、必要なページがＰＤＩＲ１６に存在するか否かを調べるために、ＰＤＩＲ１６がチェックされる。
必要なページがＰＤＩＲ１６に存在する場合、これはＰＤＩＲヒットと呼ばれ、物理ページ番号が、ＴＬＢ１０にロードされ、ＣＰＵによってページにアクセスするための命令が再開される。
必要なページが存在しない場合、これは通常ＰＤＩＲミスと呼ばれ、これは、必要なページが物理メモリ３に存在せず、ハードディスク４または外部デバイスからメモリに必要なページを移す必要があることを示す。
ハードディスク４からメインメモリ３にページを移すプロセスは、当該技術分野で既知のように、ソフトウェアページフォールトハンドラ２０によって対処され、これによって、対応するＶＰＮ／ＰＰＮエントリがＰＤＩＲ１６およびＴＬＢ１０に作成される。
関連ページが物理メモリにロードされると、ＣＰＵによるアクセスルーチンが再開され、関連データをキャッシュにロードすることができ、ＣＰＵ８が使用することができる。
【００１８】
オペレーティングシステムのクラッシュ時に、物理メモリのデータをディスクに保存することによって、物理メモリのデータを後に解析でき、クラッシュの原因を特定することができるようにすることが多くの場合望ましい。
システムは、その後、再起動することができる。
クラッシュ時にデータをディスクに保存するプロセスを、以下では、クラッシュダンプと呼ぶ。
保存されたデータは、特定のプロセスのメモリイメージ、すなわちそのプロセスのアドレス空間の部分のメモリイメージをプロセッサレジスタの値等の他の情報と共に含むことができる。
クラッシュダンプは、カーネルのクラッシュダンプサブシステム１５で実行され、他のあらゆるアプリケーションと同様に、そのオペレーション用のメモリを必要とする。
このメモリは、物理メモリ３からアロケートしなければならない。
高性能クラッシュダンプアルゴリズムは、圧縮、並列Ｉ／Ｏ、暗号化、および、データをダンプするためのリモートストレージロケーションへのアクセスを含む。
高性能クラッシュダンプは、圧縮辞書、暗号化辞書、圧縮バッファ、および、Ｉ／Ｏバッファ用に大量のメモリを必要とする。
【００１９】
図５は、カーネル用の物理メモリ、クラッシュダンプ用の物理メモリ、および、ユーザプロセス用の物理メモリのアロケーションを示している。
少量のメモリが、起動時にカーネルによって確保される。
この量２１の一部は、カーネルテキスト、すなわちカーネルの必須プロセスを実行するための命令、および、初期データを含む。
カーネルテキストおよび初期データは、オペレーティングシステムがシャットダウンするまでメモリに存在しなければならず、ユーザプロセスに必要なページ用のスペースを空けるためにスワップアウトすることができない。
起動時に確保されたメモリの別の部分２２は、クラッシュダンプ用にアロケートされる。
起動時にカーネルによって確保されていないメモリ２３は、ランタイム中に仮想メモリページをマッピングするのに使用することができる。
カーネルは、物理メモリマップの形態でメモリのすべての利用可能な範囲の記録を保持する。
この物理メモリマップは、構造体のアレイであり、このアレイでは、各構造体は、メモリの利用可能な範囲の物理開始アドレスと、そのアドレスからの連続する、利用可能な物理ページの個数とを指定する。
このメモリの一部は、メモリが必要とされるときにカーネルプロセス用にアロケートされる。
その結果、カーネルデータ構造体のすべてが、連続するメモリアドレスに配置されることにはならない。
したがって、システムは、クラッシュ時に重要なカーネルデータ構造体を記憶するページのロケーションを容易に特定することができず、クラッシュダンプを実行するためにどのページを再利用してはいけないのかを容易に判断することができない。
【００２０】
起動時にクラッシュダンプ用にアロケートされるメモリ２２の量は、本発明によれば、実際のダンプを実行するのに必要なメモリよりもはるかに少なく、且つ、従来のダンプでアロケートされる量よりもはるかに少ない。
本発明によれば、ダンプに必要なメモリの大部分は、ランタイム中に他のプロセスが使用するのに利用可能なメモリから、クラッシュ後にアロケートされる。
以下では、クラッシュ時にメモリをアロケートするプロセスをより詳細に説明する。
【００２１】
図６を参照すると、起動時にクラッシュダンプ用にアロケートされるメモリ２２は、初期圧縮バッファ２４と、初期Ｉ／Ｏバッファ２５と、圧縮辞書、暗号化辞書、および、他の必要なデータを記憶するためのメモリエリア２６と、ダンプを実行するのに必要なデータ構造体を含むメモリロケーションのリストを記憶するためのアレイ２７とを含む。
このアレイは、以下では、クラッシュダンプメモリ使用リストと呼ぶ。
このリストは、図９に関して説明するように、クラッシュ時にポピュレートされる。
また、メモリ２２は、内部資源マップ２８と、特別なクラッシュダンプページフォールトハンドラ２９用の命令と、クラッシュダンプによって使用されるＩ／Ｏドライバ３０用の命令と、内部メモリアロケータ３１用の命令とを含む。
本発明が、ページング可能カーネルを有する装置で実施される場合、すなわち、カーネルデータおよびコードを要求に応じてページングすることができる装置で実施される場合、メモリ２２のデータ構造体の少なくとも一部を、起動時ではなくクラッシュ時に物理メモリにロードすることができることが理解されるべきである。
【００２２】
図７を参照すると、システムのクラッシュ時に、カーネルは、ダンプサブシステム１５に、２段階のクラッシュダンプを実行するように命令する。
最初に、ステップ７．１において、クラッシュダンプを正しく実行するためにダミークラッシュダンプが実行され、クラッシュダンプによって内部で使用されるページが特定される。
次に、ステップ７．２において、リアルダンプが、このダンプを実行するのに必要なページを含まないメモリ範囲からアロケートされたメモリを使用して実行される。
双方のダンプルーチンは、物理メモリマップをループするが、実際には、第２のダンプのみがメモリを不揮発性ストレージ５に保存する。
ダミークラッシュダンプは、図８および図９に関してより詳細に説明する。
リアルダンプは、図１０および図１１に関してより詳細に説明する。
【００２３】
図８を参照すると、ステップ８．１において、ダミークラッシュダンプルーチンは初期化される。
ダミークラッシュダンプルーチンは、不揮発性ディスク５に対するいかなる入力も出力も行われないように変更されたクラッシュダンプである。
ダミークラッシュダンプルーチンは、すべてのドライバＩ／Ｏルーチンを起動し、Ｉ／Ｏが行われないことを除いて、ダンプアルゴリズムを通じて完全に反復適用される。
また、ダミーダンプは、低メモリ動作モードで実行することもできる。
これは、ダンプ時間の削減、圧縮、暗号化等のダンプアルゴリズムによって提供される特別な改良を犠牲にして、はるかに小さなデータサイズが使用されることを意味する。
【００２４】
ステップ８．２において、カーネルページフォールトハンドラが、特定のクラッシュダンプページフォールトハンドラ２９と取り替えられる。
ステップ８．３において、補助情報を含むＰＤＩＲ１６のビット１９が、ＰＤＩＲ１６のすべての変換を無効としてマーキングするのに使用される。
ＴＬＢ１０も、ＰＤＩＲ１６の変更を反映するように更新される。
ステップ８．２およびステップ８．３の目的は、図９に関してより詳細に説明する。
【００２５】
ステップ８．４において、クラッシュダンプサブシステム１５は、物理メモリマップにリストされたページの第１のセットのページ番号を取り出す。
次に、ステップ８．５において、取り出されたページからのデータが圧縮バッファ２４に読み込まれ、ステップ８．６において、データが圧縮される。
ダンプ用にアロケートされたメモリが比較的小さいことを考慮すると、一時に圧縮されるページ数も小さくなければならない。
次に、ステップ８．７において、圧縮されたデータが、圧縮バッファから入出力バッファ２５にコピーされる。
ステップ８．８において、Ｉ／Ｏドライバ３０が起動されるが、入出力バッファのデータは、ディスク５に実際に書き込まれることは決してない。
たとえば、一実施形態では、Ｉ／Ｏドライバ３０は、当該技術分野で既知のように、ダイレクトメモリアクセス（ＤＭＡ）コントローラに、データを書き込むように命令することができる。
しかしながら、ダンプがダミーダンプであるときは、Ｉ／Ｏドライバ３０は、データを書き込むための命令をＤＭＡコントローラに渡すことは決してない。
【００２６】
次に、ステップ８．９において、カーネルサブシステム１５は、このルーチンが、物理メモリマップのすべてのページをループしたか否かをチェックする。
このルーチンが、すべてのページをループしていない場合には、物理メモリマップのすべてのページが処理されるまで、ステップ８．３〜８．９が繰り返される。
物理メモリマップのすべてのページが処理されると、このルーチンはステップ８．１０で終了する。
【００２７】
すべての物理メモリを必ずしもダンプしなければならないとは限らない。
たとえば、未使用のページ、ユーザプロセスページ、および、カーネルコードページは、デフォルトではダンプされない場合がある。
いくつかのオペレーティングシステムでは、クラッシュダンプサブシステム１５は、ユーザ設定をチェックして、ダンプに含まれるデータを特定することができる。
代替的には、物理メモリマップが、どのページをダンプすべきかの表示を含むことができる。
たとえば、システムは、各ページではなく、各メモリ範囲が何に使用されるのかを経過監視することができ、或るタイプのデータを含むか、または、あるプロセスに関連付けられるメモリ範囲のみをダンプに含めることができる。
図８のステップは、ダンプされるデータを含むページについてのみビジットされる。
【００２８】
ステップ８．１〜８．１０の全体を通じて、ダンプされるデータ以外のデータ構造体を含めて、クラッシュダンプデータ構造体および他のカーネルデータ構造体がアクセスされる。
ダミーダンプは、リアルダンプと同様のルーチンを起動するので、アクセスされるカーネルメモリおよびカーネルデータ構造体は、リアルダンプにも必要とされる。
したがって、カーネルメモリおよびカーネルデータ構造体を記憶するページは、リアルダンプを実行するためのメモリをアロケートするのに使用するには安全ではない。
ダンプされるデータは、物理メモリマップに記憶されている、そのデータに関連付けられる物理ページ番号を使用してアクセスされるのに対して、カーネルメモリおよびカーネルデータ構造体は、図３を参照して説明したように、それらに関連付けられる仮想ページ番号を使用してアクセスされる。
しかしながら、ＰＤＩＲ１６における物理ページ番号と仮想ページ番号との間の変換は、無効としてマーキングされているので、クラッシュダンプサブシステムを使用して、ページがそのページの仮想ページ番号を使用して最初にアクセスされるとき、特別なクラッシュダンプフォールトハンドラ２９が起動される。
このクラッシュダンプフォールトハンドラ２９は、変換がＴＬＢ１０において無効としてマーキングされていることが分かった場合も起動される。
【００２９】
より詳細には、図９を参照して、仮想ページ番号がダミークラッシュダンプルーチンによってアクセスされるごとに、ステップ９．１において、ＣＰＵはＴＬＢまたはＰＤＩＲにおいてＶＰＮを検索する。
ステップ９．２において、対応するＰＰＮが見つけられ、ステップ９．３において、ＰＤＩＲ１６の補助ビット１９またはＴＬＢの補助ビットが、変換が有効であるか否かを示すか否かがチェックされる。
変換が無効である場合、プロセスは、ステップ９．４に続き、クラッシュダンプフォールトハンドラ２９が起動される。
ステップ９．５において、特別なクラッシュダンプフォールトハンドラは、ＰＰＮがクラッシュダンプメモリ使用リスト２７に存在するか否かをチェックする。
物理ページ番号が含まれていない場合には、ステップ９．６において、物理ページ番号が保存され、次に、ステップ９．７において、ＰＤＩＲ１６の変換が有効としてマーキングされる。
次に、アドレスを変換するための命令が再開され、ステップ９．２において、ＣＰＵは物理ページ番号を見つけ、ステップ９．３において、変換が有効であることをチェックし、ステップ９．８において終了する。
【００３０】
ステップ９．５において、たとえば、仮想エイリアシングと呼ばれる、物理ページ番号が、同じ物理ページ番号にマッピングされた別の仮想ページ番号を通じてダミーダンプルーチンですでにアクセスされていたことから、その物理ページ番号がクラッシュダンプメモリ使用リスト２７にすでにあると判断された場合、プロセスは、ステップ９．７に直接続き、変換が有効としてマーキングされ、そのページにアクセスするための命令が再開される。
【００３１】
上述したように、ダンプされる実際の物理ページは、そのページの物理アドレスを使用してアクセスされ、変換は実行されない。
したがって、これらのアクセスは、ページフォールトにはならない。
代替的には、ページは、そのページの仮想ページ番号を使用してアクセスすることもできるが、補助ビット１９がチェックされないように、または、変換の無効フラグが無視されるように、メモリにアクセスするためのプロセスを変更することができる。
したがって、これらのページへのアクセスは、ページフォールトにならず、物理ページ番号は、リスト２９に記憶されない。
その結果、クラッシュダンプメモリ使用リスト２９は、ダンプのルーチンを実行するためにクラッシュダンプサブシステム１５によって使用されるページの物理ページ番号しか含まない。
クラッシュダンプページフォールトハンドラを起動することなくダンプされるページにアクセスする方法は、さまざまな既知の方法で実施することができ、本明細書では詳細に説明しない。
【００３２】
図１０を参照すると、次に、ステップ１０．１において、リアルダンプが初期化される。
ステップ１０．２において、カーネルページフォールトハンドラがリストアされる。
ステップ１０．３において、ＰＤＩＲテーブル１６に残っているすべての無効なエンティティが有効としてマーキングされる。
次に、ステップ１０．４において、当該技術分野で既知のように、ダンプを実行するメモリ要求が特定され、ステップ１０．５において、図１１に関してより詳細に説明するように、メモリをアロケートするために再利用することができるメモリ範囲が特定される。
【００３３】
再利用するのに安全なメモリ範囲にすでに記憶されているデータは、そのメモリを、クラッシュダンプサブシステム１５にアロケートすることができるようになる前にダンプしなければならない。
ステップ１０．６において、ダンプ用に再利用するのに安全なメモリ範囲のデータが、不揮発性ストレージ５に保存される。
このデータのダンプは、初期圧縮バッファ２４および初期Ｉ／Ｏバッファ２５を使用して行われる。
次に、クラッシュダンプサブシステム１５がそのデータのダンプを再び試みないように、ページが、物理メモリマップにダンプされたものとしてマーキングされる。
この時点で、メモリ範囲は、再利用されるように解放され、ステップ１０．７において、初期圧縮バッファおよび初期入出力バッファに取って代わるより大きな圧縮バッファおよび入出力バッファが、メモリ範囲からアロケートされる。
並列ダンプがカーネルによってサポートされている場合には、複数の入出力バッファを作成することができる。
加えて、マルチスレッド化された圧縮ダンプが、カーネルによってサポートされている場合には、複数の圧縮バッファを作成することができる。
【００３４】
次に、ステップ１０．８において、メインダンプが開始される。
このダンプは、ここでは、十分なメモリが利用可能であるので、通常モードで行うことができる。
ステップ１０．８において、ダンプされる物理メモリマップのページの次のセットが特定され、ステップ１０．９において、それらのページに含まれるデータが、新しくアロケートされた圧縮バッファに移動される。
次に、ステップ１０．１０において、データが圧縮され、ステップ１０．１１において入出力バッファにコピーされる。
ステップ１０．１２において、ドライバルーチン３０が起動される。
この時、ステップ１０．１３において、ドライバルーチンは、ＤＭＡコントローラに、Ｉ／Ｏバッファのデータを不揮発性クラッシュダンプディスク５に書き込むように命令する。
次に、ページは、物理メモリマップにダンプされたものとしてマーキングされる。
ステップ１０．１４において、ダンプされたものとしてマーキングされてないページが物理メモリマップに残っているか否かがチェックされる。
残っている場合には、物理メモリマップのすべてのページがダンプされるまで、残っているページについて、ステップ１０．８〜１０．１４が繰り返される。
すべてのページがダンプされると、ステップ１０．１５において、ダンプは終了する。
【００３５】
ここで、図１１に関してステップ１０．５をより詳細に説明する。
ステップ１１．１において、クラッシュダンプサブシステム１５が、内部クラッシュダンプメモリアロケータルーチン３１を起動する。
ステップ１１．２において、メモリアロケータは物理メモリマップにアクセスする。
図５に示すように、メモリの部分２１は、起動時にメモリにロードされるカーネルの静的データセグメントおよびテキストセグメントを含む。
メモリのこの部分のデータは、カーネルを実行するのに必要とされ、メモリの一部はクラッシュダンプを実行するのに再利用することができるが、この部分２１の再利用を回避することが最も安全である。
したがって、ステップ１１．３において、メモリアロケータは、メモリエリア２１において起動時にメモリにロードされるカーネルの静的データセグメントおよびテキストセグメントを通じて反復適用され、カーネルの静的データセグメントおよびテキストセグメントに使用される物理ページの最大値を特定し、ステップ１１．４において、メモリアロケータは、カーネルの静的データセグメントおよびテキストセグメントに使用される物理ページの最大値よりも上で、クラッシュダンプメモリ使用リスト２７内のいかなるページも含まない最も広いページ範囲を検索する。
次に、メモリアロケータは、特定された範囲を有するそれ自身の資源マップ２８を初期化する。
次に、図１０のステップ１０．６および１０．７に関して説明したように、特定された範囲のデータは、ダンプおよび再利用することができる。
【００３６】
図１１に関して説明したプロセスは、再利用するのに安全なメモリ範囲を特定するためのプロセスの単なる一例を構成するにすぎないことが理解されるべきである。
このプロセスの詳細は変更可能である。
たとえば、ステップ１１．３は、実行されない場合があり、カーネルの静的データセグメントおよびテキストセグメント用に確保されたメモリの部分２１を、クラッシュダンプルーチン用に再利用するのに安全なメモリ範囲を得るために検索することもできる。
【００３７】
一実施形態では、ダミークラッシュダンプルーチンおよびリアルクラッシュダンプルーチンは、ソフトウェアを使用して実施される。
カーネルは、ダンプがダミーダンプであるのか、または、リアルダンプであるのかを示す変数と、ダンプされるデータを特定するのに使用される資源マップを指し示す変数との２つの変数を取り入れるクラッシュダンプ関数をコールすることができる。
ダンプがダミーダンプであるのか、または、リアルダンプであるのかを示す変数の値に応じて、初期バッファがアクセスされるのか、または、クラッシュ時にアロケートされたバッファがアクセスされるのかが決定される。
この関数は、変数をドライバルーチンにも渡すことができる。
ドライバルーチンは、変数の値に基づいて、ＤＭＡコントローラに、ダンプされるデータを不揮発性ストレージに書き込むように命令するか否かを決定する。
実際のダンプ用のメモリは、Ｃの関数malloc()を使用してアロケートすることができる。
この関数malloc()は、当該技術分野において既知である。
一実施形態では、特別なcrashdump_malloc()関数を提供することができる。
この関数は、内部クラッシュダンプメモリ資源マップからメモリをアロケートするように記述することができる。
【００３８】
クラッシュダンプを実行するための、本発明の一実施形態によるアルゴリズムを以下に提供する。
【００３９】
Dumpsys(FakeDump, PhysicalMemoryMap[])
If (FakeDumpがTRUEである)
カーネルページフォールトハンドラをクラッシュダンプ固有のハンドラであるcrashdump_pagefault_handler()に取り替え、変換を無効としてマーキングする
Else
カーネルページフォールトハンドラをリストアし、変換を有効としてマーキングする
通常モード（すなわち、マルチスレッド化されたモード）で動作するためのクラッシュダンプ中のメモリ要求「MemReq」を特定する
「MemReq」に添ってアロケートするのに再利用することができるメモリ範囲を特定する。
メモリ資源マップcrashdump_malloc_rmap_init()を初期化する
初期バッファBFC_XおよびDRV_Xを使用して、再利用に特定されたメモリの範囲をディスクに保存（ダンプ）する
より大きなバッファ（並列ダンプ用の多くのインスタンス）をアロケートする
crashdump_malloc(BFC_Y)
crashdump_malloc(DRV_Y)
crashdump_rmap[]の範囲をダンプされたものとしてマーキングするか、または、PhysicalMemoryMap[]からそれらの範囲を除去する
DumpLoop:   すべてのデータがダンプされるまでPhysicalMemoryMap[]をループする
Begin
If (FakeDumpがTRUEである)
ダンプされるメモリエリアMA_Xを特定する
Else
ダンプされるメモリエリアMA_Yを特定する
If (FakeDumpがTRUEである)
ダンプされるメモリエリアMA_Xから圧縮バッファBFC_XにデータDA_Xを読み込む
Else
ダンプされるメモリエリアMA_Yから圧縮バッファBFC_YにデータDA_Yを読み込む
If (FakeDumpがTRUEである)
圧縮バッファBFC_Xを使用してデータを圧縮する
Else
圧縮バッファBFC_Yを使用してデータを圧縮する
If (FakeDumpがTRUEである)
圧縮されたデータをBFC_XからDRV_Xへコピーする
Else
圧縮されたデータをBFC_YからDRV_Yへコピーする
ドライバ書き込みルーチンを起動し、圧縮されたデータをディスクに書き込む：
If (FakeDumpがTRUEである)
DriverWrite(FakeWrite = TRUE, DRV_X)
Else
DriverWrite(FakeWrite = FALSE, DRV_Y)
If (すべての必要なデータがダンプされた)
Exit
Else
GoTo DumpLoop
End
【００４０】
上記アルゴリズムでは、DriverWrite()は、FakeWriteがFALSEであるときにのみＤＭＡを開始する。
【００４１】
一実施形態におけるページフォールトハンドラのアルゴリズムを以下に提供する。
【００４２】
crashdump_pagefault_handler()
プロセッサの特別なレジスタからフォールト仮想アドレス「fva」を取得する
フォールト仮想アドレス「fva」に対応する物理ページ「pfn」を取得する
If (pfnがcrashdump_memory_usage[]に存在しない)
「pfn」をcrashdump_memory_usage[]に保存する
【００４３】
メモリアロケータによって実行される関数のアルゴリズムを以下に提供する。
【００４４】
crashdump_malloc_rmap_init()
カーネルの静的データセグメント、テキストセグメントを通じて反復適用され、使用される物理ページの最大値kernel_static_phys_maxを特定する
カーネルの物理メモリマップを反復し、kernel_static_phys_maxよりも上で検索を開始して、crashdump_memory_usage[]に存在しない最も広いページ範囲を特定する
上記範囲を有する資源マップcrashdump_rmap[]を初期化する
crashdump_malloc()
crashdump_rmap[]からメモリをアロケートする
【００４５】
上記特定の実施形態に関して本発明を説明してきたが、変形が可能である。
【００４６】
たとえば、ＰＤＩＲ１６において補助情報を含むビット１９を無効としてマーキングする代わりに、ダンプに必要なカーネルデータ構造体を含むページを、他の或るページ保護メカニズムを使用してフォールトハンドラを起動することによってログ記録することができる。
たとえば、ページテーブルの無効／有効ビットの代わりに、メモリの特定のブロックに関連付けられる保護キーまたはタスク識別子を使用することができる。
たとえばPA-RISCTMプロセッサで使用される保護キーおよびタスク識別子は、当該技術分野で既知であるので、ここでは詳細に説明しない。
【００４７】
その上、いくつかのオペレーティングシステムでは、クラッシュダンプルーチンは、リアルモードで実行されることに留意すべきである。
換言すれば、いかなるアクセスチェックまたは保護チェックも行われない。
その場合、ＣＰＵがアクセスチェックおよび保護チェックを行うように、ダミーダンプは、仮想モードで実行することができ、実際のダンプは、フェールセーフオペレーションのリアルモードまたは物理モードで実行することができる。
【００４８】
加えて、メモリは、ページに分割される必要はない。
メモリの他のタイプのセグメンテーションも可能である。
【００４９】
本発明は、ダンプの目的で、システムクラッシュ後にメモリをアロケートするメカニズムを提供する。
その上、このメカニズムが必要とするメモリの記録保持（book keeping）は、従来技術よりも少ない。
その上、本発明によるメモリをアロケートするメカニズムを使用することによって、クラッシュダンプルーチンを開始するために起動中またはランタイム中に確保しなければならないメモリは、少量のみである。
その結果、装置は、従来技術よりも効率的にメモリを使用する。
【００５０】
ダミークラッシュダンプを実行するのに要する時間は、クラッシュダンププロセスが完了するのに要する時間を大幅に延ばさないことに留意すべきである。
その理由は、データを不揮発性ディスクに書き込む、多くの時間を要するタスクが、ダミークラッシュダンプルーチンでは行われないからである。
【００５１】
その上、クラッシュダンププロセスが完了するのに要する時間は、時に、ダミークラッシュダンプの一部としての圧縮または暗号化を行わないことによって、さらに削減することができる。
本発明によるクラッシュダンププロセスに要する時間は、ダミークラッシュダンプで使用されるより小さなデータサイズで実際のダンプが行われた場合よりも短い。
したがって、本発明によって、クラッシュダンプが完了するのに要する時間を大幅に延ばすことなくメモリのより効率的な使用が可能になる。
【００５２】
圧縮を含むようにクラッシュダンプアルゴリズムを説明してきたが、本発明は、圧縮が使用されないときにも利点を有する。
たとえば暗号化または並列Ｉ／Ｏを使用することから、かなりの量のメモリを使用するクラッシュダンプアルゴリズムを有するいかなるシステムも、ダンプを実行するのに必要なすべてのメモリが起動時にアロケートされる場合には、メモリの使用が非効率的になる。
本発明によれば、必要なメモリの大部分は、起動時ではなくクラッシュ時にアロケートすることができる。
ランタイム中に他のプロセスに使用されるメモリをクラッシュ時に再利用することができ、メモリはより効率的に使用される。
【図面の簡単な説明】
【００５３】
【図１】データ処理システムの概略図である。
【図２】ソフトウェアとハードウェアとの間の相互関係を示すコンピュータシステムの高レベルの概観を示す図である。
【図３】仮想メモリアドレスを物理メモリアドレスに変換するためのページディレクトリの構造を示す図である。
【図４】仮想メモリ管理システムにおいて仮想アドレスと物理アドレスとの間の変換に使用されるメカニズムを示す図である。
【図５】データ処理システムにおける物理メモリの一般的なパーティションを示す図である。
【図６】クラッシュダンプを実行するために最初にアロケートされたメモリの使用の概略図である。
【図７】本発明による２ステップクラッシュダンプを示すフローチャートである。
【図８】ダミークラッシュダンプルーチンを示すフローチャートである。
【図９】クラッシュダンプ用に再利用するのに安全でないメモリを特定するためのプロセスを示すフローチャートである。
【図１０】クラッシュダンプルーチンを実行するためのプロセスを示すフローチャートである。
【図１１】クラッシュダンプに再利用するのに安全なメモリ範囲を特定するためのプロセスを示すフローチャートである。
【符号の説明】
【００５４】
１・・・処理システム，
２・・・プロセッサ，
３・・・メインメモリ，
４・・・ハードディスク，
５・・・不揮発性ディスク
６・・・バス，
７・・・他のＩ／Ｏ，
９・・・キャッシュ，
１１・・・バスインターフェース，
１２・・・ハードウェア，
１３・・・カーネル，
１４・・・アプリケーションプログラム，
１５・・・クラッシュダンプサブシステム，
１９・・・補助情報，
２０・・・ページフォールトハンドラ，
２１・・・初期カーネルテキストおよび初期カーネルデータ，
２２・・・ダンプ用のメモリ，
２３・・・利用可能なメモリ，
２４・・・圧縮バッファ，
２５・・・Ｉ／Ｏバッファ，
２６・・・辞書等，
２７・・・クラッシュダンプメモリ使用リスト，
２８・・・資源マップ，
２９・・・ページフォールトハンドラ，
３０・・・Ｉ／Ｏドライバ，
３１・・・メモリアロケータ，
【図１】
0005255348.tif 000002
【図２】
0005255348.tif 000003
【図３】
0005255348.tif 000004
【図４】
0005255348.tif 000005
【図５】
0005255348.tif 000006
【図６】
0005255348.tif 000007
【図７】
0005255348.tif 000008
【図８】
0005255348.tif 000009
【図９】
0005255348.tif 000010
【図１０】
0005255348.tif 000011
【図１１】
0005255348.tif 000012