(57)【要約】【課題】ユーザモードソフトウェアとカーネルモードソフトウェアとの双方で発生したトレースデータの時系列を維持することと、ユーザモードソフトウェアのトレースにかかるオーバヘッドを削減することとの双方を実現することを目的とする。【解決手段】ユーザ側トレースデータが発生した際、ユーザ側トレース制御部１３はカーネル側トレース制御情報６にメモリマッピングされたユーザ側トレース制御情報７を参照してトレースデータの蓄積要否を判定する。蓄積要と判定した場合、ユーザ側トレース制御部１３はユーザ側トレース出力代行部１２、カーネル側トレース出力部１０を介してユーザ側トレースデータをカーネル側トレースバッファ５に蓄積する。また、カーネル側トレースデータが発生した際、カーネル側トレース制御部１１はカーネル側トレース出力部１０を介してカーネル側トレースデータをカーネル側トレースバッファ５に蓄積する。【選択図】図１
2007328597.tif 000002
【特許請求の範囲】
【請求項１】
システムが提供する機能を実行するカーネルモードで使用するカーネル側メモリに記憶したカーネル側トレース制御情報に基づいて、システムが提供する機能を使用するユーザモードで動作するユーザモードソフトウェアプログラムの動作履歴を示すユーザ側トレースデータを記憶するコンピュータシステムであり、
ユーザモードで使用され、前記カーネル側メモリにおける前記カーネル側トレース制御情報の記憶域を示す制御情報アドレスを記憶したユーザ側メモリと、
前記カーネル側メモリにユーザ側トレースデータを記憶するカーネル側トレース出力部と、
前記ユーザ側メモリに記憶された前記制御情報アドレスが示す前記カーネル側メモリにおける記憶域に記憶された前記カーネル側トレース制御情報を参照し、参照した前記カーネル側トレース制御情報が示す蓄積要否フラグに基づいてユーザ側トレースデータの蓄積要否を判定するユーザ側トレース制御部と、
前記ユーザ側トレース制御部がユーザ側トレースデータの蓄積要と判定した場合に前記カーネル側トレース出力部を呼び出すユーザ側トレース出力代行部と
を備え、
前記カーネル側トレース出力部は前記ユーザ側トレース出力代行部から呼び出された際にユーザ側トレースデータを前記カーネル側メモリに記憶する
ことを特徴とするコンピュータシステム。
【請求項２】
システムが提供する機能を実行するカーネルモードで使用するカーネル側メモリに記憶したカーネル側トレース制御情報に基づいて、システムが提供する機能を使用するユーザモードで動作するユーザモードソフトウェアプログラムの動作履歴を示すユーザ側トレースデータを記憶するコンピュータシステムであり、
ユーザモードで使用され、前記カーネル側メモリに記憶された前記カーネル側トレース制御情報をコピーしたユーザ側トレース制御情報を記憶したユーザ側メモリと、
前記カーネル側メモリにユーザ側トレースデータを記憶するカーネル側トレース出力部と、
前記ユーザ側メモリに記憶された前記ユーザ側トレース制御情報を参照し、参照した前記ユーザ側トレース制御情報が示す蓄積要否フラグに基づいてユーザ側トレースデータの蓄積要否を判定するユーザ側トレース制御部と、
前記ユーザ側トレース制御部がユーザ側トレースデータの蓄積要と判定した場合に前記カーネル側トレース出力部を呼び出すユーザ側トレース出力代行部と
を備え、
前記カーネル側トレース出力部は前記ユーザ側トレース出力代行部から呼び出された際にユーザ側トレースデータを前記カーネル側メモリに記憶する
ことを特徴とするコンピュータシステム。
【請求項３】
前記コンピュータシステムは、さらに、
前記カーネル側トレース制御情報が示す蓄積要否フラグが変更された際に変更された前記カーネル側トレース制御情報が示す前記蓄積要否フラグをコピーして前記ユーザ側トレース制御情報が示す前記蓄積要否フラグを更新するトレース制御情報複写部
を備えたことを特徴とする請求項２記載のコンピュータシステム。
【請求項４】
システムが提供する機能を実行するカーネルモードで動作するカーネルモードソフトウェアプログラムの動作履歴を示すカーネル側トレースデータとシステムが提供する機能を使用するユーザモードで動作するユーザモードソフトウェアプログラムの動作履歴を示すユーザ側トレースデータとを記憶するコンピュータシステムであり、
カーネルモードで使用され、カーネル側トレースデータとユーザ側トレースデータとを記憶する第１のカーネル側メモリと、
ユーザモードで使用され、ユーザ側トレースデータを記憶する第１のユーザ側メモリと、
ユーザ側トレースデータが発生した際に発生した前記ユーザ側トレースデータを前記第１のユーザ側メモリに記憶するユーザ側トレース出力部と、
カーネル側トレースデータが発生した際に前記ユーザ側トレース出力部が前記第１のユーザ側メモリに記憶した前記ユーザ側トレースデータを前記第１のカーネル側メモリに移動するトレースデータ移動部と、
カーネル側トレースデータが発生した際に発生した前記カーネル側トレースデータを前記トレースデータ移動部が前記第１のカーネル側メモリに移動した前記ユーザ側トレースデータの後ろに記憶するカーネル側トレース出力部と
を備えたことを特徴とするコンピュータシステム。
【請求項５】
システムが提供する機能を実行するカーネルモードで動作するカーネルモードソフトウェアプログラムの動作履歴を示すカーネル側トレースデータとシステムが提供する機能を使用するユーザモードで動作するユーザモードソフトウェアプログラムの動作履歴を示すユーザ側トレースデータとを記憶するコンピュータシステムであり、
カーネルモードで使用され、カーネル側トレースデータとユーザ側トレースデータとを記憶する第１のカーネル側メモリと、
ユーザモードで使用され、ユーザ側トレースデータを記憶する第１のユーザ側メモリと、
ユーザ側トレースデータが発生した際に発生した前記ユーザ側トレースデータを前記第１のユーザ側メモリに記憶するユーザ側トレース出力部と、
ユーザモードからカーネルモードへの遷移の際に前記ユーザ側トレース出力部が前記第１のユーザ側メモリに記憶した前記ユーザ側トレースデータを前記第１のカーネル側メモリに移動するトレースデータ移動部と、
カーネル側トレースデータが発生した際に発生したカーネル側トレースデータを前記トレースデータ移動部が前記第１のカーネル側メモリに移動した前記ユーザ側トレースデータの後ろに記憶するカーネル側トレース出力部と
を備えたことを特徴とするコンピュータシステム。
【請求項６】
前記コンピュータシステムは、さらに、
カーネルモードで使用され、ユーザ側トレースデータの蓄積要否フラグを示すカーネル側トレース制御情報を記憶する第２のカーネル側メモリと、
ユーザモードで使用され、前記第２のカーネル側メモリにおける前記カーネル側トレース制御情報の記憶域を示す制御情報アドレスを記憶する第２のユーザ側メモリと、
前記第２のユーザ側メモリに記憶された前記制御情報アドレスが示す前記第２のカーネル側メモリにおける記憶域に記憶された前記カーネル側トレース制御情報を参照し、参照した前記カーネル側トレース制御情報が示す前記蓄積要否フラグに基づいてユーザ側トレースデータの蓄積要否を判定するユーザ側トレース制御部とを備え、
前記ユーザ側トレース出力部は、
前記ユーザ側トレース制御部がユーザ側トレースデータの蓄積要と判定した場合にユーザ側トレースデータを前記第１のユーザ側メモリに記憶する
ことを特徴とする請求項４〜請求項５いずれかに記載のコンピュータシステム。
【請求項７】
前記コンピュータシステムは、さらに、
カーネルモードで使用され、ユーザ側トレースデータの蓄積要否フラグを示すカーネル側トレース制御情報を記憶する第２のカーネル側メモリと、
ユーザモードで使用され、前記第２のカーネル側メモリに記憶された前記カーネル側トレース制御情報をコピーしたユーザ側トレース制御情報を記憶する第２のユーザ側メモリと、
前記第２のユーザ側メモリに記憶された前記ユーザ側トレース制御情報を参照し、参照した前記ユーザ側トレース制御情報が示す蓄積要否フラグに基づいてユーザ側トレースデータの蓄積要否を判定するユーザ側トレース制御部とを備え、
前記ユーザ側トレース出力部は、
前記ユーザ側トレース制御部がユーザ側トレースデータの蓄積要と判定した場合にユーザ側トレースデータを前記第１のユーザ側メモリに記憶する
ことを特徴とする請求項４〜請求項５いずれかに記載のコンピュータシステム。
【請求項８】
システムが提供する機能を実行するカーネルモードで使用するカーネル側メモリに記憶したカーネル側トレース制御情報に基づいて、システムが提供する機能を使用するユーザモードで動作するユーザモードソフトウェアプログラムの動作履歴を示すユーザ側トレースデータを記憶するコンピュータシステムのトレースデータ蓄積方法であり、
ユーザモードで使用されるユーザ側メモリが前記カーネル側メモリにおける前記カーネル側トレース制御情報の記憶域を示す制御情報アドレスを記憶する制御情報アドレス記憶処理と、
ユーザ側トレース制御部が前記ユーザ側メモリに記憶された前記制御情報アドレスが示す前記カーネル側メモリにおける記憶域に記憶された前記カーネル側トレース制御情報を参照し、参照した前記カーネル側トレース制御情報が示す蓄積要否フラグに基づいてユーザ側トレースデータの蓄積要否を判定するユーザ側トレース制御処理と、
ユーザ側トレース出力代行部が前記ユーザ側トレース制御部がユーザ側トレースデータの蓄積要と判定した場合にカーネル側トレース出力部を呼び出すユーザ側トレース出力代行処理と、
カーネル側トレース出力部が前記ユーザ側トレース出力代行部から呼び出された際にユーザ側トレースデータを前記カーネル側メモリに記憶するカーネル側トレース出力処理と
を実行することを特徴とするコンピュータシステムのトレースデータ蓄積方法。
【請求項９】
システムが提供する機能を実行するカーネルモードで使用するカーネル側メモリに記憶したカーネル側トレース制御情報に基づいて、システムが提供する機能を使用するユーザモードで動作するユーザモードソフトウェアプログラムの動作履歴を示すユーザ側トレースデータを記憶するコンピュータシステムのトレースデータ蓄積方法であり、
ユーザモードで使用されるユーザ側メモリが前記カーネル側メモリに記憶された前記カーネル側トレース制御情報をコピーしたユーザ側トレース制御情報を記憶するユーザ側トレース制御情報記憶処理と、
ユーザ側トレース制御部が前記ユーザ側メモリに記憶された前記ユーザ側トレース制御情報を参照し、参照した前記ユーザ側トレース制御情報が示す蓄積要否フラグに基づいてユーザ側トレースデータの蓄積要否を判定するユーザ側トレース制御処理と、
ユーザ側トレース出力代行部が前記ユーザ側トレース制御部がユーザ側トレースデータの蓄積要と判定した場合にカーネル側トレース出力部を呼び出すユーザ側トレース出力代行処理と、
カーネル側トレース出力部が前記ユーザ側トレース出力代行部から呼び出された際にユーザ側トレースデータを前記カーネル側メモリに記憶するカーネル側トレース出力処理と
を実行することを特徴とするコンピュータシステムのトレースデータ蓄積方法。
【請求項１０】
システムが提供する機能を実行するカーネルモードで動作するカーネルモードソフトウェアプログラムの動作履歴を示すカーネル側トレースデータとシステムが提供する機能を使用するユーザモードで動作するユーザモードソフトウェアプログラムの動作履歴を示すユーザ側トレースデータとを記憶するコンピュータシステムのトレースデータ蓄積方法であり、
ユーザトレース出力部がユーザ側トレースデータが発生した際に発生した前記ユーザ側トレースデータを第１のユーザ側メモリに記憶するユーザ側トレース出力処理と、
トレースデータ移動部がカーネル側トレースデータが発生した際に前記ユーザ側トレース出力部が前記第１のユーザ側メモリに記憶した前記ユーザ側トレースデータを第１のカーネル側メモリに移動するトレースデータ移動処理と、
カーネル側トレース出力部がカーネル側トレースデータが発生した際に発生した前記カーネル側トレースデータを前記トレースデータ移動部が前記第１のカーネル側メモリに移動した前記ユーザ側トレースデータの後ろに記憶するカーネル側トレース出力処理と
を実行することを特徴とするコンピュータシステムのトレースデータ蓄積方法。
【請求項１１】
システムが提供する機能を実行するカーネルモードで動作するカーネルモードソフトウェアプログラムの動作履歴を示すカーネル側トレースデータとシステムが提供する機能を使用するユーザモードで動作するユーザモードソフトウェアプログラムの動作履歴を示すユーザ側トレースデータとを記憶するコンピュータシステムのトレースデータ蓄積方法であり、
ユーザ側トレース出力部がユーザ側トレースデータが発生した際に発生した前記ユーザ側トレースデータを第１のユーザ側メモリに記憶するユーザ側トレース出力処理と、
トレースデータ移動部がユーザモードからカーネルモードへの遷移の際に前記ユーザ側トレース出力部が前記第１のユーザ側メモリに記憶した前記ユーザ側トレースデータを第１のカーネル側メモリに移動するトレースデータ移動処理と、
カーネル側トレース出力部がカーネル側トレースデータが発生した際に発生したカーネル側トレースデータを前記トレースデータ移動部が前記第１のカーネル側メモリに移動した前記ユーザ側トレースデータの後ろに記憶するカーネル側トレース出力処理と
を実行することを特徴とするコンピュータシステムのトレースデータ蓄積方法。
【請求項１２】
請求項８〜請求項１１いずれかに記載のコンピュータシステムのトレースデータ蓄積方法をコンピュータシステムに実行させるトレースデータ蓄積プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアのトレースデータを蓄積するコンピュータシステム、コンピュータシステムのトレースデータ蓄積方法およびトレースデータ蓄積プログラムに関するものである。
【背景技術】
【０００２】
汎用パーソナルコンピュータ（ＰＣ：Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）や組込み機器などのコンピュータシステム（以下、システムとする）においては、障害発生時にシステム全体のソフトウェアの動作履歴を把握するため、トレースデータを蓄積する。ただし、トレースデータ蓄積を行うとソフトウェアの動作が遅くなるため、トレースデータ蓄積をするか否かを表すスイッチ（蓄積要否フラグ）をシステム内に設け、製品リリース時にはトレースデータ蓄積機能を無効にしていた（例えば、特許文献１）。
ところが、上記システムのうち、メモリ保護機能を持つＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）上で動作するソフトウェアは、一般的にユーザモード（非特権モードともいう）とカーネルモード（特権モード、スーパバイザモードともいう）とのどちらかのモードで動作する。ユーザモードは、実行可能なＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）命令が制限され、かつメモリ保護機能が有効な状態である。アプリケーションソフトウェア（以下、アプリケーションとする）などがこのユーザモードで動作する。ユーザモードにおいては、一般的にアプリケーション毎にメモリ空間が割り当てられ、異なるメモリ空間で動作する他のアプリケーションのデータには直接アクセスできないようにＯＳによりメモリ保護されている。カーネルモードは、上述したＣＰＵ命令の制限を持たない状態であり、ＯＳ自身やデバイスドライバなどがこのカーネルモードで動作する。
このようなシステムにおいては、カーネルモード側に上記蓄積要否フラグとトレースデータを蓄積するためのトレースバッファとを具備し、ＯＳを介してユーザモードからカーネルモードへ動作モードを一旦遷移することにより、カーネルモード側の蓄積要否フラグやトレースバッファを用いて、ユーザモードソフトウェアのトレースデータを蓄積していた。
また他のシステムにおいては、蓄積要否フラグとトレースバッファとをユーザモードとカーネルモードとの双方に具備し、ユーザモードとカーネルモードとでおのおの個別にトレースデータを蓄積していた。
【特許文献１】特開２００２−１４９４４４号公報  （第２頁、段落［０００２］）
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかし、前者の場合、蓄積要否フラグがカーネルモード側に具備されているため、ユーザモードソフトウェアは、トレースデータ蓄積機能の有効・無効を蓄積要否フラグを参照して判定する度に、ＯＳのシステムコールを介してカーネルモードへ遷移する必要がある。そのため、前者のシステムにはユーザモードソフトウェアのトレース蓄積にかかるオーバヘッドが大きくなってしまうという課題があった。
また、後者の場合、ユーザモードソフトウェアとカーネルモードソフトウェアとがそれぞれのトレースバッファにトレースデータを蓄積するため、システム全体の動作履歴を把握するには、ユーザモードとカーネルモードとの双方で蓄積したトレースデータをマージし、発生順に並び替えてトレースデータを参照する必要がある。このトレースデータを発生順に並び替える方法として、システムに搭載された高精度ハードウェアタイマのカウンタ値をトレースデータに埋め込んでおくことが考えられる。ただし、実装コストや消費電力など制限の多い組込み機器などでは、高精度ハードウェアタイマを搭載していない、もしくは高精度ハードウェアタイマを常時利用できないという場合が多く、このトレースデータの発生順の並び替え方法は使えなかった。また、使用するハードウェアタイマが低精度である場合、ユーザモードのトレースデータとカーネルモードのトレースデータとが同一の発生時刻を示し、トレースデータを正確な発生順に並び替えられないということが考えられる。つまり、後者のシステムには、時系列のトレースデータを得るために、高コスト・高消費電力になるという課題があった。
【０００４】
この発明は、個々の動作モードおよびソフトウェアのトレースデータの時系列を維持するための特別なハードウェア装置を具備していないコンピュータシステムにおいて、例えば、上記のような課題点を解決するためになされたものである。
例えば、本発明は、ユーザモードソフトウェアとカーネルモードソフトウェアとの双方で発生したトレースデータの時系列を維持することと、ユーザモードソフトウェアのトレースにかかるオーバヘッドを削減することとの双方を実現することを目的とする。
【課題を解決するための手段】
【０００５】
本発明のコンピュータシステムは、システムが提供する機能を実行するカーネルモードで使用するカーネル側メモリに記憶したカーネル側トレース制御情報に基づいて、システムが提供する機能を使用するユーザモードで動作するユーザモードソフトウェアプログラムの動作履歴を示すユーザ側トレースデータを記憶するコンピュータシステムであり、ユーザモードで使用され、前記カーネル側メモリにおける前記カーネル側トレース制御情報の記憶域を示す制御情報アドレスを記憶したユーザ側メモリと、前記カーネル側メモリにユーザ側トレースデータを記憶するカーネル側トレース出力部と、前記ユーザ側メモリに記憶された前記制御情報アドレスが示す前記カーネル側メモリにおける記憶域に記憶された前記カーネル側トレース制御情報を参照し、参照した前記カーネル側トレース制御情報が示す蓄積要否フラグに基づいてユーザ側トレースデータの蓄積要否を判定するユーザ側トレース制御部と、前記ユーザ側トレース制御部がユーザ側トレースデータの蓄積要と判定した場合に前記カーネル側トレース出力部を呼び出すユーザ側トレース出力代行部とを備え、前記カーネル側トレース出力部は前記ユーザ側トレース出力代行部から呼び出された際にユーザ側トレースデータを前記カーネル側メモリに記憶することを特徴とする。
【発明の効果】
【０００６】
本発明によれば、例えば、ユーザモードソフトウェアとカーネルモードソフトウェアとの双方で発生したトレースデータの時系列を維持することと、ユーザモードソフトウェアのトレースにかかるオーバヘッドを削減することとの双方を実現するコンピュータシステム、コンピュータシステムのトレースデータ蓄積方法およびトレースデータ蓄積プログラムを提供することができる。
【発明を実施するための最良の形態】
【０００７】
実施の形態１．
実施の形態１では、カーネルモードのトレースデータとユーザモードのトレースデータとを蓄積するコンピュータシステムにおいて、カーネル側メモリに記憶したカーネル側トレース制御情報の記憶域を示す制御情報アドレスをユーザ側メモリに記憶することで、カーネルモードに遷移することなくユーザモードでトレースデータの蓄積要否を判定する実施形態を示す。
【０００８】
カーネルモードは特権モードやスーパバイザモードとも呼ばれるコンピュータシステムの動作モードの一つであり、コンピュータシステムが提供する機能である特定のＣＰＵ命令はカーネルモードでのみ実行される。
ユーザモードは、非特権モードとも呼ばれるコンピュータシステムの動作モードの一つであり、実行可能なＣＰＵ命令が制限され、また、カーネルモードで使用されるメモリやユーザモードで動作する他のソフトウェアプログラムが使用するメモリへのアクセスが制限される。そのため、制限されたＣＰＵ命令の実行および制限されたメモリへのアクセスが必要な場合、ユーザモードではシステムコールを行うことでＯＳを介してカーネルモードへ遷移して制限されたメモリへアクセスする。
【０００９】
以下、カーネルモードで使用されるメモリをカーネル側メモリ、カーネルモードで動作するソフトウェアプログラムをカーネルモードソフトウェア（または、カーネルモードソフトウェアプログラム）、カーネルモードで発生しカーネルモードソフトウェアの動作履歴を示すトレースデータをカーネル側トレースデータとする。
また、ユーザモードで使用されるメモリをユーザ側メモリ、ユーザモードで動作するソフトウェアプログラムをユーザモードソフトウェア（または、ユーザモードソフトウェアプログラム）、ユーザモードで発生しユーザモードソフトウェアの動作履歴を示すトレースデータをユーザ側トレースデータとする。
また、カーネル側トレースデータとユーザ側トレースデータとの少なくともいずれかを含むトレースデータをシステムトレースデータとする。
【００１０】
カーネル側メモリおよびユーザ側メモリは実メモリと仮想メモリとのいずれであってもよく、実メモリおよび仮想メモリの記憶域はバッファやメモリ空間ともいう。
また、特定の記憶域を示すアドレス（制御情報アドレス）を記憶する処理の一例としてメモリマッピングがあり、メモリマッピングでは主に仮想メモリのアドレスと実メモリのアドレスとを対応付けて記憶する。メモリマッピングを行うことにより、各アプリケーションは仮想メモリのアドレスを用いて実メモリにアクセスすることができる。以下で説明するメモリマッピングでは、ユーザ側トレース制御情報７（図１参照）の記憶域を示すアドレスとカーネル側トレース制御情報６（図１参照）の記憶域を示すアドレス（制御情報アドレス）とが対応付けられて、システムのメモリ保護ユニット（ＭＭＵ：Ｍｅｍｏｒｙ  Ｍａｎａｇｅｍｅｎｔ  Ｕｎｉｔ）の記憶域に記憶されるものとする。ここで、メモリマッピングによりユーザ側トレース制御情報７の記憶域を示すアドレスがカーネル側トレース制御情報６の記憶域を示す制御情報アドレスにＭＭＵの記憶域において対応付けられることも、ユーザ側メモリ１９２がカーネル側トレース制御情報６の記憶域を示す制御情報アドレスを記憶することに含めるものとする。
また、アプリケーションやアプリケーションプログラムなどと呼ばれるソフトウェアはユーザモードソフトウェアの一例であり、ＯＳはカーネルモードソフトウェアの一例である。
【００１１】
コンピュータシステムは、単に、コンピュータまたはシステムともいう。
ソフトウェアプログラムは、単に、ソフトウェアまたはプログラムともいう。
【００１２】
図１は、実施の形態１におけるコンピュータシステム１の構成図である。
図１において、コンピュータシステム１は、組込み機器など、コンピュータシステム１を有する又は使用する機械も意味するものとする。
ＯＳ実行部２はメモリ保護機能などの機能を持つＯＳを実行する。
ユーザモードソフトウェア実行部３は、アプリケーションソフトウェアなどのユーザモードで動作するユーザモードソフトウェアを実行する。
カーネルモードソフトウェア実行部４は、デバイスドライバなどのカーネルモードで動作するカーネルモードソフトウェアを実行する。
カーネル側トレースバッファ５（第１のカーネル側メモリ）はカーネルモードソフトウェア実行部４から出力されたカーネル側トレースデータとユーザモードソフトウェア実行部３から出力されたユーザ側トレースデータとのシステムトレースデータを蓄積する。
カーネル側トレース制御情報６は、トレースデータを蓄積するか否かの情報（以下、蓄積要否フラグとする）を含み、カーネル側メモリ１９４（第２のカーネル側メモリ）に記憶される。
ユーザ側トレース制御情報７はユーザモードのメモリ空間（ユーザ側メモリ１９２［第２のユーザ側メモリ］）にメモリマッピングされたカーネル側トレース制御情報６（制御情報アドレス）を示す。
カーネル側トレース初期化部８はカーネル側トレース制御情報６を初期化する。
トレース制御情報マップ部９は、カーネル側トレース初期化部８から呼び出され、カーネル側トレース制御情報６をユーザ側トレース制御情報７としてメモリマッピングする。
カーネル側トレース出力部１０はカーネル側トレースバッファ５へシステムトレースデータを書き込む。
カーネル側トレース制御部１１は、カーネル側トレース制御情報６を参照し、カーネル側トレース出力部１０を呼び出すか否かを判断する。
ユーザ側トレース出力代行部１２はカーネル側トレースバッファ５へユーザ側トレースデータを書き込むためにカーネル側トレース出力部１０を呼び出す。
ユーザ側トレース制御部１３は、ユーザ側トレース制御情報７を参照し、ユーザ側トレース出力代行部１２を呼び出すか否かを判断する。
【００１３】
カーネルモードソフトウェア実行部４、カーネル側トレース制御部１１、カーネル側トレース出力部１０、トレース制御情報マップ部９およびカーネル側トレース初期化部８は、ＣＰＵ９１１を用いて、ＯＳの拡張部であるカーネルモードソフトウェアもしくはＯＳとは独立したカーネルモードソフトウェアとして実行される。
【００１４】
図２は、実施の形態１におけるコンピュータシステム１のハードウェア資源の一例を示す図である。
図２において、コンピュータシステム１は、プログラムを実行するＣＰＵ９１１（中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう）を備えている。ＣＰＵ９１１は、バス９１２を介してＲＯＭ９１３、ＲＡＭ９１４、通信ボード９１５、磁気ディスク装置９２０と接続され、これらのハードウェアデバイスを制御する。
ＲＡＭ９１４は、揮発性メモリの一例である。ＲＯＭ９１３、磁気ディスク装置９２０の記憶媒体は、不揮発性メモリの一例である。これらは、記憶機器、記憶装置あるいは記憶部の一例である。
通信ボード９１５は、入出力機器、入出力装置あるいは入出力部の一例である。
【００１５】
通信ボード９１５は、有線または無線で、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネット、ＩＳＤＮ等のＷＡＮ（ワイドエリアネットワーク）、電話回線などの通信網に接続されている。
磁気ディスク装置９２０には、ＯＳ９２１（オペレーティングシステム）、プログラム群９２３、ファイル群９２４が記憶されている。プログラム群９２３のプログラムは、ＣＰＵ９１１、ＯＳ９２１により実行される。
【００１６】
上記プログラム群９２３には、実施の形態において「〜部」として説明する機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ９１１により読み出され実行される。
ファイル群９２４には、実施の形態において、「〜部」の機能を実行した際の「〜の判定結果」、「〜の計算結果」、「〜の処理結果」などの結果データ、「〜部」の機能を実行するプログラム間で受け渡しするデータ、その他の情報やデータや信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」の各項目として記憶されている。「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。例えば、ユーザ側トレース制御情報７、カーネル側トレース制御情報６、システムトレースデータなどが記録媒体に記憶される。ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示などのＣＰＵの動作に用いられる。抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示のＣＰＵの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
また、実施の形態において説明するフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号値は、ＲＡＭ９１４のメモリ、磁気ディスク装置９２０の磁気ディスク、その他の記録媒体に記録される。また、データや信号値は、バス９１２や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【００１７】
また、実施の形態において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」、「〜手段」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明するものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスクやその他の記録媒体に記憶される。プログラムはＣＰＵ９１１により読み出され、ＣＰＵ９１１により実行される。すなわち、トレースデータ蓄積プログラムは、「〜部」としてコンピュータを機能させるものである。あるいは、「〜部」の手順や方法をコンピュータに実行させるものである。
【００１８】
次に、コンピュータシステム１におけるトレースデータ蓄積方法の動作について説明する。
実施の形態１におけるコンピュータシステム１は以下に説明するシステム初期化処理（図３参照）、カーネル側トレース出力処理（図４参照）およびユーザ側トレース出力処理（図５参照）を実行することによりシステムトレースデータの蓄積を行う。
【００１９】
図３は、実施の形態１におけるコンピュータシステム１が実行するシステム初期化処理を示すフローチャートである。
まずは、コンピュータシステム１がトレース機能を起動する際に実行するシステムの初期化処理の動作について、図３に基づいて以下に説明する。
「〜部」として説明するコンピュータシステム１の各構成はＣＰＵ９１１を用いて以下の処理を実行する。
【００２０】
ＯＳ実行部２はシステム起動時もしくはトレース機能利用開始時にカーネル側トレース初期化部８を呼び出す（Ｓ１００）。
カーネル側トレース初期化部８は、ＯＳ実行部２から呼び出されると、カーネル側メモリ１９４においてカーネル側トレース制御情報６を初期化する（Ｓ１０１）。
また、カーネル側トレース初期化部８はカーネル側トレースバッファ５も初期化する（Ｓ１０２）。
次に、カーネル側トレース初期化部８はトレース制御情報マップ部９を呼び出す（Ｓ１０３）。
トレース制御情報マップ部９は、システム（通常はＣＰＵ９１１）が具備しているメモリ保護ユニットを用いて、もしくはＯＳ実行部２が提供するＭＭＵ操作に関するシステムコールを用いて、カーネル側トレース制御情報６をユーザモードのメモリ空間（ユーザ側メモリ１９２）にユーザ側トレース制御情報７としてメモリマッピングする（Ｓ１０４：制御情報アドレス記憶処理）。
【００２１】
なお、コンピュータシステム１は、ユーザモードソフトウェアが複数起動されユーザモードソフトウェア毎にメモリ空間を割り当てるなどにより、ユーザモードに複数のメモリ空間が存在する場合、全てのユーザモードソフトウェアで共通に使用するメモリ領域にカーネル側トレース制御情報６をメモリマッピングすればよい。また、コンピュータシステム１は個々のメモリ空間上にカーネル側トレース制御情報６をメモリマッピングしてもよい。なお、ＯＳ実行部２によって新たなユーザモードのメモリ空間が生成された場合には、トレース制御情報マップ部９はその都度呼び出され、新たに生成されたメモリ空間に対してもカーネル側トレース制御情報６をメモリマッピングするものとする。
【００２２】
図４は、実施の形態１におけるコンピュータシステム１が実行するカーネル側トレース出力処理を示すフローチャートである。
次に、カーネルモードソフトウェアのトレースデータ（カーネル側トレースデータ）を出力する際の動作について、図４に基づいて以下に説明する。
「〜部」として説明するコンピュータシステム１の各構成はＣＰＵ９１１を用いて以下の処理を実行する。
【００２３】
カーネルモードソフトウェア実行部４は、カーネルモードソフトウェアの実行に際して発生したカーネル側トレースデータを出力するために、カーネル側トレース制御部１１を呼び出す（Ｓ１１１）。
カーネル側トレース制御部１１では、カーネル側トレース制御情報６に含まれる蓄積要否フラグを参照してカーネル側トレースデータの蓄積要否を判定する（Ｓ１１２：カーネル側トレース制御処理）。
カーネル側トレースデータを蓄積すると判定した場合、カーネル側トレース制御部１１はカーネル側トレース出力部１０を呼び出す（Ｓ１１３）。
カーネル側トレース出力部１０はカーネル側トレースデータをカーネル側トレースバッファ５に書き込み、カーネルモードソフトウェア実行部４はカーネル側トレース出力処理を終了する。カーネル側トレース出力部１０は、カーネル側トレースデータの書き込みを、カーネル側トレースバッファ５において書き込み済みのシステムトレースデータの後ろに行って、システムトレースデータの時系列を確保する（Ｓ１１４：カーネル側トレース出力処理）。
Ｓ１１２において、カーネル側トレースデータを蓄積しないと判定した場合、カーネル側トレース制御部１１は呼び出し元であるカーネルモードソフトウェア実行部４に処理を戻し、カーネルモードソフトウェア実行部４はカーネル側トレース出力処理を終了する。
【００２４】
図５は、実施の形態１におけるコンピュータシステム１が実行するユーザ側トレース出力処理を示すフローチャートである。
次に、ユーザモードソフトウェアのトレースデータ（ユーザ側トレースデータ）を出力する際の動作について、図５に基づいて以下に説明する。
「〜部」として説明するコンピュータシステム１の各構成はＣＰＵ９１１を用いて以下の処理を実行する。
【００２５】
ユーザモードソフトウェア実行部３は、ユーザモードソフトウェアの実行に際して発生したユーザ側トレースデータを出力するために、ユーザ側トレース制御部１３を呼び出す（Ｓ１２１）。
ユーザ側トレース制御部１３では、ユーザ側メモリ１９２においてユーザ側トレース制御情報７を参照することにより、ユーザ側トレース制御情報７にメモリマッピングされたカーネル側トレース制御情報６に含まれる蓄積要否フラグを参照する。そして、ユーザ側トレース制御部１３は蓄積要否フラグに基づいてユーザ側トレースデータの蓄積要否を判定する（Ｓ１２２：ユーザ側トレース制御処理）。
ユーザ側トレースデータを蓄積すると判定した場合、ユーザ側トレース制御部１３はユーザ側トレース出力代行部１２を呼び出す（Ｓ１２３）。
ユーザ側トレース出力代行部１２は、ユーザ側トレースデータをカーネル側トレースバッファ５に書き込むために、ＯＳ実行部２を介してカーネル側トレース出力部１０を呼び出す（Ｓ１２４：ユーザ側トレース出力代行処理）。
そして、カーネル側トレース出力部１０はユーザ側トレースデータをカーネル側トレースバッファ５に書き込み、ユーザモードソフトウェア実行部３はユーザ側トレース出力処理を終了する。カーネル側トレース出力部１０は、ユーザ側トレースデータの書き込みを、カーネル側トレースバッファ５において書き込み済みのシステムトレースデータの後ろに行って、システムトレースデータの時系列を確保する（Ｓ１２５：ユーザ側トレース出力処理）。
Ｓ１２２において、ユーザ側トレースデータを蓄積しないと判定した場合、ユーザ側トレース制御部１３は呼び出し元であるユーザモードソフトウェア実行部３に処理を戻し、ユーザモードソフトウェア実行部３はユーザ側トレース出力処理を終了する。
【００２６】
本実施の形態において、以下の手段を備えたシステムトレースデータ蓄積方式について説明した。
（ａ）カーネルモードソフトウェアやオペレーティングシステムを動作させるカーネルモード側に具備した、トレースデータ蓄積をするか否かを表す蓄積要否フラグを含むカーネル側トレース制御情報６を、ユーザモードで動作するユーザモードソフトウェアが直接アクセス可能なメモリ空間であるユーザ側メモリ１９２にメモリマッピングするトレース制御情報マップ部９。
（ｂ）上記トレース制御情報マップ部９によってメモリマッピングされたユーザ側トレース制御情報７を直接参照し、ユーザ側トレースデータの蓄積をするか否かを判断するユーザ側トレース制御部１３。
（ｃ）上記ユーザ側トレース制御部１３によって蓄積要と判断された場合に呼び出され、カーネル側トレースバッファ５にユーザ側トレースデータを書き込むために、カーネル側トレース出力部１０を呼び出すユーザ側トレース出力代行部１２。
【００２７】
以上のように本実施の形態によれば、システムで唯一のカーネル側トレースバッファ５にユーザモードソフトウェアとカーネルモードソフトウェアとの双方のトレースデータを発生順に書き込むことにより、システムトレースデータの時系列を維持することができる。
また、本実施の形態では、カーネル側トレース制御情報６をユーザ側トレース制御情報７にメモリマッピングすることによって、カーネル側トレース制御情報６に含まれる蓄積要否フラグをユーザモードから直接参照可能にする。これにより、ユーザ側トレースデータの蓄積要否を判定するためにユーザモードからカーネルモードへ遷移する必要がなくなり、そのオーバヘッドを削減することができる。
また、本実施の形態では、ユーザモードソフトウェアが複数動作中であっても、カーネル側トレース制御情報６の蓄積要否フラグを書き換えるだけで、全てのユーザモードソフトウェアに対してシステムトレースデータの蓄積要否を変更することができる。
【００２８】
実施の形態２．
以上の実施の形態１では、トレース制御情報マップ部９によりカーネル側トレース制御情報６をユーザ側トレース制御情報７にメモリマッピングする実施形態を示したが、実施の形態２では、メモリマッピングを使わず、カーネル側トレース制御情報６の内容をユーザ側トレース制御情報７に複写する実施形態を示す。
以下、実施の形態１と異なる事項について説明し、説明しない事項は実施の形態１と同様である。
【００２９】
図６は、実施の形態２におけるコンピュータシステム１の構成図である。
図１と同一符号の構成は同一又は相当部分を示す。
【００３０】
図６において、トレース制御情報アドレス表１４はユーザ側トレース制御情報７のメモリアドレスを１つもしくは複数有し、カーネル側メモリ１９５に格納される。
トレース制御情報複写部１５は、トレース制御情報アドレス表１４をもとに、カーネル側トレース制御情報６をユーザ側トレース制御情報７に複写する。
トレース制御情報変更部１６はカーネル側トレース制御情報６を変更する機能とカーネル側トレース制御情報６を変更したことをトレース制御情報複写部１５に通知する機能とを具備する。
トレース制御情報アドレス登録部１７はトレース制御情報アドレス表１４にユーザ側トレース制御情報７のメモリアドレスを登録する。
ユーザ側トレース初期化部１８はユーザモードソフトウェア実行部３がユーザ側トレース制御部１３を呼び出す前に実行される。
【００３１】
トレース制御情報複写部１５、トレース制御情報変更部１６およびトレース制御情報アドレス登録部１７は、ＣＰＵ９１１を用いて、ＯＳの拡張部であるカーネルモードソフトウェアもしくはＯＳとは独立したカーネルモードソフトウェアとして実行される。
【００３２】
次に、コンピュータシステム１におけるトレースデータ蓄積方法の動作について説明する。
まずは、コンピュータシステム１がトレース機能を起動する際に実行するシステムの初期化処理の動作について説明する。コンピュータシステム１は以下に説明するカーネルモード初期化処理（図７参照）およびユーザモードソフトウェア初期化処理（図８参照）を実行することによりシステムの初期化を行う。
【００３３】
図７は、実施の形態２におけるコンピュータシステム１が実行するカーネルモード初期化処理を示すフローチャートである。
「〜部」として説明するコンピュータシステム１の各構成はＣＰＵ９１１を用いて以下の処理を実行する。
【００３４】
ＯＳ実行部２はシステム起動時もしくはトレース機能利用開始時にカーネル側トレース初期化部８を呼び出す（Ｓ２００）。
カーネル側トレース初期化部８は、ＯＳ実行部２から呼び出されると、カーネル側トレース制御情報６を初期化する（Ｓ２０１）。
また、カーネル側トレース初期化部８はカーネル側トレースバッファ５も初期化する（Ｓ２０２）。
さらに、カーネル側トレース初期化部８はトレース制御情報アドレス表１４も初期化する（Ｓ２０３）。
【００３５】
図８は、実施の形態２におけるコンピュータシステム１が実行するユーザモードソフトウェア初期化処理を示すフローチャートである。
「〜部」として説明するコンピュータシステム１の各構成はＣＰＵ９１１を用いて以下の処理を実行する。
【００３６】
ユーザモードソフトウェア実行部３は、ユーザ側トレースデータの蓄積を開始する際、ユーザ側トレース制御部１３を呼び出す前に一度、ユーザ側トレース初期化部１８を呼び出す（Ｓ２１１）。
ユーザ側トレース初期化部１８は、動作中のユーザモードソフトウェアの各々に対して、ユーザ側トレース制御情報７に使用するメモリをユーザ側メモリ１９２に確保し、確保したメモリにおいてユーザ側トレース制御情報７の初期化を行う（Ｓ２１２）。
次に、ユーザ側トレース初期化部１８は、ＯＳ実行部２を介して、全てのユーザ側トレース制御情報７のメモリアドレスをトレース制御情報アドレス登録部１７に通知する（Ｓ２１３）。
トレース制御情報アドレス登録部１７は通知されたユーザ側トレース制御情報７のメモリアドレスをトレース制御情報アドレス表１４に加える（Ｓ２１４）。
次に、トレース制御情報アドレス登録部１７はトレース制御情報複写部１５を呼び出す（Ｓ２１５）。
トレース制御情報複写部１５はトレース制御情報アドレス表１４を参照する（Ｓ２１６）。
そして、トレース制御情報複写部１５は、トレース制御情報アドレス表１４に登録されたすべてのメモリアドレスについて、ユーザ側トレース制御情報７にカーネル側トレース制御情報６を複写する（Ｓ２１７：ユーザ側トレース制御情報記憶処理）。
【００３７】
なお、ユーザモードソフトウェアが終了する際には、ユーザモードソフトウェア実行部３はユーザ側トレース初期化部１８を介して当該ユーザ側トレース制御情報７に使用したメモリを解放し、トレース制御情報アドレス登録部１７を介してトレース制御情報アドレス表１４に登録された当該ユーザ側トレース制御情報７のメモリアドレスを削除するものとする。
また、新たにユーザモードソフトウェアを起動する際には、コンピュータシステム１は新たに起動したユーザモードソフトウェアについて、上記処理（Ｓ２１１〜Ｓ２１７）を実行するものとする。
【００３８】
カーネルモードソフトウェアのトレースデータを出力する際の動作（カーネル側トレース出力処理）については、実施の形態１（図４）と同じであるため、説明を省略する。
【００３９】
ユーザモードソフトウェアのトレースデータを出力する際の動作（ユーザ側トレース出力処理）についても、実施の形態１（図５）と同じであるため、説明を省略する。
【００４０】
図９は、実施の形態２におけるコンピュータシステム１が実行するユーザ側トレース制御情報更新処理を示すフローチャートである。
次に、ユーザモードソフトウェアの実行中におけるシステムトレースデータの蓄積要否の変更について、図９に基づいて以下に説明する。
「〜部」として説明するコンピュータシステム１の各構成はＣＰＵ９１１を用いて以下の処理を実行する。
【００４１】
システムトレースデータの蓄積要否を変更する際、カーネルモードソフトウェア実行部４はカーネル側トレース制御部１１を呼び出す（Ｓ２２１）。
カーネル側トレース制御部１１はトレース制御情報変更部１６を呼び出す（Ｓ２２２）。
トレース制御情報変更部１６はカーネル側トレース制御情報６のシステムトレースデータの蓄積要否フラグを書き換える（Ｓ２２３）。
次に、トレース制御情報変更部１６はトレース制御情報複写部１５を呼び出す（Ｓ２２４）。
トレース制御情報複写部１５はトレース制御情報アドレス表１４を参照する（Ｓ２２５）。
そして、トレース制御情報複写部１５は、トレース制御情報アドレス表１４に登録されたすべてのメモリアドレスについて、ユーザ側トレース制御情報７にカーネル側トレース制御情報６を複写する（Ｓ２２６：トレース制御情報複写処理）。
【００４２】
本実施の形態において、以下の手段を備えたシステムトレースデータ蓄積方式について説明した。
（ａ）蓄積要否フラグを含むトレース制御情報を、ユーザモードのメモリ空間であるユーザ側メモリ１９２に確保して初期化し、そのユーザ側メモリ１９２のメモリアドレスをトレース制御情報アドレス登録部１７に通知するユーザ側トレース初期化部１８。
（ｂ）上記ユーザ側トレース初期化部１８によって確保・初期化されたユーザ側トレース制御情報７を直接参照し、ユーザ側トレースデータの蓄積をするか否かを判断するユーザ側トレース制御部１３。
（ｃ）上記ユーザ側トレース制御部１３によって蓄積要と判断された場合に呼び出され、カーネル側トレースバッファ５にユーザ側トレースデータを書き込むために、カーネル側トレース出力部１０を呼び出すユーザ側トレース出力代行部１２。
（ｄ）ユーザ側トレース初期化部１８から通知されたユーザ側トレース制御情報７のメモリアドレスをトレース制御情報アドレス表１４に登録するトレース制御情報アドレス登録部１７。
（ｅ）カーネル側トレース制御情報６を変更する機能を具備し、変更したことをトレース制御情報複写部１５に通知するトレース制御情報変更部１６。
（ｆ）トレース制御情報アドレス登録部１７によってトレース制御情報アドレス表１４が変更された時や、トレース制御情報変更部１６によってカーネル側トレース制御情報６が変更された時に呼び出され、カーネル側トレース制御情報６をトレース制御情報アドレス表１４に記載のメモリアドレス先のメモリに複写するトレース制御情報複写部１５。
【００４３】
以上のように本実施の形態によれば、システムで唯一のカーネル側トレースバッファ５にユーザモードソフトウェアとカーネルモードソフトウェアとの双方のトレースデータを発生順に書き込むことにより、システムトレースデータの時系列を維持することができる。
また、本実施の形態では、カーネル側トレース制御情報６をユーザ側トレース制御情報７に複写することによって、カーネル側トレース制御情報６に含まれる蓄積フラグをユーザモードから直接参照可能にする。これにより、ＭＭＵを直接操作するとＯＳとの間で不都合が生じる場合やＯＳがＭＭＵ操作に関するシステムコールを提供していない場合などにおいても、ユーザ側トレースデータの蓄積要否を判定するためにユーザモードからカーネルモードへ遷移する必要がなくなり、そのオーバヘッドを削減することができる。
また、本実施の形態では、新たに動作させたユーザモードソフトウェアについてもユーザ側トレースデータを時系列に蓄積することができ、ユーザモードソフトウェアの動作中にシステムトレースデータの蓄積要否を変更することができる。
【００４４】
実施の形態３．
以上の実施の形態１では、カーネル側トレースデータとユーザ側トレースデータとを蓄積する領域としてカーネル側トレースバッファ５を唯一具備することによりシステムトレースデータの時系列を維持する実施形態を示したが、実施の形態３では、カーネル側トレースバッファ５と１つのユーザ側トレースバッファとを具備してシステムトレースデータの時系列を維持する実施形態を示す。
以下、実施の形態１と異なる事項について説明し、説明しない事項は実施の形態１と同様である。
【００４５】
図１０は、実施の形態３におけるコンピュータシステム１の構成図である。
図１、図６と同一符号の構成は同一又は相当部分を示す。
【００４６】
図１０において、ユーザ側トレースバッファ１９（第１のユーザ側メモリ）はユーザモードソフトウェア実行部３から出力されたユーザ側トレースデータを蓄積する。
ユーザ側トレース出力部２０はユーザ側トレースバッファ１９へユーザ側トレースデータを書き込む。
トレースデータ移動部２１はユーザ側トレースバッファ１９からユーザ側トレースデータを取得し、取得したユーザ側トレースデータをカーネル側トレースバッファ５に書き込む。
【００４７】
トレースデータ移動部２１は、ＣＰＵ９１１を用いて、ＯＳの拡張部であるカーネルモードソフトウェアもしくはＯＳとは独立したカーネルモードソフトウェアとして実行される。
【００４８】
次に、コンピュータシステム１におけるトレースデータ蓄積方法の動作について説明する。
図１１は、実施の形態３におけるコンピュータシステム１が実行するシステム初期化処理を示すフローチャートである。
まずは、コンピュータシステム１がトレース機能を起動する際に実行するシステムの初期化処理の動作について、図１１に基づいて以下に説明する。
「〜部」として説明するコンピュータシステム１の各構成はＣＰＵ９１１を用いて以下の処理を実行する。
【００４９】
＜カーネルモード初期化処理：Ｓ３００〜Ｓ３０４＞
ＯＳ実行部２はシステム起動時もしくはトレース機能利用開始時にカーネル側トレース初期化部８を呼び出す（Ｓ３００）。
カーネル側トレース初期化部８は、ＯＳ実行部２から呼び出されると、カーネル側トレース制御情報６を初期化する（Ｓ３０１）。
また、カーネル側トレース初期化部８はカーネル側トレースバッファ５も初期化する（Ｓ３０２）。
次に、カーネル側トレース初期化部８はトレース制御情報マップ部９を呼び出す（Ｓ３０３）。
トレース制御情報マップ部９は、システム（通常はＣＰＵ９１１）が具備しているメモリ保護ユニット（ＭＭＵ）を用いて、もしくはＯＳ実行部２が提供するＭＭＵ操作に関するシステムコールを用いて、カーネル側トレース制御情報６をユーザモードのメモリ空間（ユーザ側メモリ１９２）にメモリマッピングする（Ｓ３０４：制御情報アドレス記憶処理）。
＜ユーザモード初期化処理：Ｓ３１１〜Ｓ３１４＞
次に、ユーザモードソフトウェア実行部３は、ユーザ側トレースデータの蓄積を開始する際、ユーザ側トレース制御部１３を呼び出す前に一度、ユーザ側トレース初期化部１８を呼び出す（Ｓ３１１）。
ユーザ側トレース初期化部１８はユーザ側トレースバッファ１９のメモリ確保・初期化を行う（Ｓ３１２）。
次に、ユーザ側トレース初期化部１８は、ＯＳ実行部２を介して、ユーザ側トレースバッファ１９のメモリアドレスをトレースデータ移動部２１に通知する（Ｓ３１３）。
トレースデータ移動部２１は通知されたユーザ側トレースバッファ１９のメモリアドレスを記憶する（Ｓ３１４）。
【００５０】
図１２は、実施の形態３におけるコンピュータシステム１が実行するカーネル側トレース出力処理を示すフローチャートである。
次に、カーネルモードソフトウェアのトレースデータ（カーネル側トレースデータ）を出力する際の動作について、図１２に基づいて以下に説明する。
「〜部」として説明するコンピュータシステム１の各構成はＣＰＵ９１１を用いて以下の処理を実行する。
【００５１】
カーネルモードソフトウェア実行部４は、カーネルモードソフトウェアの実行に際して発生したカーネル側トレースデータを出力するために、カーネル側トレース制御部１１を呼び出す（Ｓ３２１）。
カーネル側トレース制御部１１では、カーネル側トレース制御情報６に含まれる蓄積要否フラグを参照してカーネル側トレースデータの蓄積要否を判定する（Ｓ３２２：カーネル側トレース制御処理）。
カーネル側トレースデータを蓄積すると判定した場合、カーネル側トレース制御部１１はトレースデータ移動部２１を呼び出す（Ｓ３２３）。
トレースデータ移動部２１は、Ｓ３１４で記憶したメモリアドレスが示すユーザ側トレースバッファ１９からその時点で蓄積完了したユーザ側トレースデータを取得する（Ｓ３２４）。
そして、トレースデータ移動部２１は取得したユーザ側トレースデータをカーネル側トレースバッファ５へ書き込む。トレースデータ移動部２１は、ユーザ側トレースデータの書き込みを、カーネル側トレースバッファ５において書き込み済みのシステムトレースデータの後ろに行って、システムトレースデータの時系列を確保する（Ｓ３２５：ユーザ側トレースデータ移動処理）。
その後、カーネル側トレース制御部１１はカーネル側トレース出力部１０を呼び出す（Ｓ３２６）。
そして、カーネル側トレース出力部１０はカーネル側トレースデータをカーネル側トレースバッファ５に書き込み、カーネルモードソフトウェア実行部４はカーネル側トレース出力処理を終了する。カーネル側トレース出力部１０は、カーネル側トレースデータの書き込みを、カーネル側トレースバッファ５において書き込み済みのシステムトレースデータの後ろに行って、システムトレースデータの時系列を確保する（Ｓ３２７：カーネル側トレース出力処理）。
Ｓ３２２において、カーネル側トレースデータを蓄積しないと判定した場合、カーネル側トレース制御部１１は呼び出し元であるカーネルモードソフトウェア実行部４に処理を戻し、カーネルモードソフトウェア実行部４はカーネル側トレース出力処理を終了する。
【００５２】
図１３は、実施の形態３におけるコンピュータシステム１が実行するユーザ側トレース出力処理を示すフローチャートである。
次に、ユーザモードソフトウェアのトレースデータ（ユーザ側トレースデータ）を出力する際の動作について、図１３に基づいて以下に説明する。
「〜部」として説明するコンピュータシステム１の各構成はＣＰＵ９１１を用いて以下の処理を実行する。
【００５３】
ユーザモードソフトウェア実行部３は、ユーザモードソフトウェアの実行に際して発生したユーザ側トレースデータを出力するために、ユーザ側トレース制御部１３を呼び出す（Ｓ３３１）。
ユーザ側トレース制御部１３では、ユーザ側トレース制御情報７にメモリマッピングされたカーネル側トレース制御情報６に含まれる蓄積要否フラグを参照してユーザ側トレースデータの蓄積要否を判定する（Ｓ３３２：ユーザ側トレース制御処理）。
ユーザ側トレースデータを蓄積すると判定した場合、ユーザ側トレース制御部１３はユーザ側トレース出力部２０を呼び出す（Ｓ３３３）。
ユーザ側トレース出力部２０はユーザ側トレースデータをユーザ側トレースバッファ１９に書き込む。ユーザ側トレース出力部２０は、ユーザ側トレースデータの書き込みを、ユーザ側トレースバッファ１９において書き込み済みのユーザ側トレースデータの後ろに行って、ユーザ側トレースデータの時系列を確保する（Ｓ３３４：ユーザ側トレース出力処理）。
Ｓ３３２において、ユーザ側トレースデータを蓄積しないと判定した場合、ユーザ側トレース制御部１３は呼び出し元であるユーザモードソフトウェア実行部３に処理を戻し、ユーザモードソフトウェア実行部３はユーザ側トレース出力処理を終了する。
【００５４】
なお、ユーザモードソフトウェアが終了する際には、ユーザモードソフトウェア実行部３は、ユーザ側トレース初期化部１８を介して、ユーザ側トレースバッファ１９を解放し、トレースデータ移動部２１に記憶されているユーザ側トレースバッファ１９のメモリアドレスを無効にする。また、ユーザ側トレース初期化部１８は、ユーザ側トレースバッファ１９を解放する前に，ＯＳ実行部２を介してトレースデータ移動部２１に通知することで，ユーザ側トレースバッファ１９に残存するトレースデータをカーネル側トレースバッファ５に移動することができる。
また、Ｓ３２５において、トレースデータ移動部２１は、ユーザ側トレースバッファ１９のメモリアドレスが未通知または無効な場合、何も処理を行わない。
【００５５】
上記の説明ではコンピュータシステム１はユーザ側トレースデータの蓄積要否の判定を、実施の形態１と同様に、カーネル側トレース制御情報６をメモリマッピングしたユーザ側トレース制御情報７を使用しているが、コンピュータシステム１は、実施の形態２と同様に、カーネル側トレース制御情報６を複製したユーザ側トレース制御情報７を使用してもよい。
【００５６】
本実施の形態において、以下の手段を備えたシステムトレースデータ蓄積方式について説明した。
（ａ）ユーザ側トレースバッファ１９をユーザモードのメモリ空間に確保して初期化し、そのユーザ側トレースバッファ１９のメモリアドレスをトレースデータ移動部２１に通知するユーザ側トレース初期化部１８。
（ｂ）カーネルモードソフトウェア実行部４から呼び出された時、トレースデータ移動部２１を呼び出した後、カーネル側トレース出力部１０を呼び出すカーネル側トレース制御部１１。
（ｃ）カーネル側トレース制御部１１から呼び出され、事前にユーザ側トレース初期化部１８から通知されたユーザ側トレースバッファ１９から蓄積済みのユーザ側トレースデータを取得し、カーネル側トレースバッファ５に書込みを行うトレースデータ移動部２１。
【００５７】
以上のように本実施の形態によれば、カーネルモードソフトウェアのトレースデータをカーネル側トレースバッファ５に書き込む前に、それまでに蓄積されたユーザモードソフトウェアのトレースデータをカーネル側トレースバッファ５に書き込むことにより、システムトレースデータの時系列を維持することができる。
また、本実施の形態では、ユーザ側トレースデータの蓄積要否を判定するためにユーザモードからカーネルモードへ遷移する必要がなくなり、そのオーバヘッドを削減することができる。
また、本実施の形態では、カーネル側トレースデータが発生する間、ユーザ側トレースデータをユーザ側トレースバッファ１９に蓄積することで、ユーザ側トレースデータの発生の度にユーザモードからカーネルモードへ遷移する必要がなくなり、そのオーバヘッドを削減することができる。
また、本実施の形態において、ユーザ側トレースバッファ１９の領域に空きがなくなった場合にユーザ側トレース出力部２０がユーザ側トレースバッファ１９の領域不足をトレースデータ移動部２１に通知し、通知を受けたトレースデータ移動部２１がユーザ側トレースバッファ１９からカーネル側トレースバッファ５にユーザ側トレースデータを移動させることにより、領域不足でユーザ側トレースバッファ１９にユーザ側トレースデータを書き込めなくなることを防ぐことができる。
【００５８】
実施の形態４．
以上の実施の形態３では、システムトレースデータを蓄積する領域としてカーネル側トレースバッファ５とユーザ側トレースバッファ１９とを各々１つずつ具備する実施形態を示したが、実施の形態４では、カーネル側トレースバッファ５と、１つもしくは複数のユーザ側トレースバッファとを具備する実施形態を示す。
また、実施の形態３では、カーネル側トレースデータの発生の際、カーネル側トレースデータの蓄積前に、ユーザ側トレースバッファ１９に蓄積されているユーザ側トレースデータをカーネル側トレースバッファ５に移動することにより、システムトレースデータの時系列を維持する実施形態を示した。実施の形態４では、ユーザモードからカーネルモードへの遷移の際、カーネル側トレースデータの発生前に、ユーザ側トレースバッファ１９に蓄積されているユーザ側トレースデータをカーネル側トレースバッファ５に移動することにより、システムトレースデータの時系列を維持する実施形態を示す。
以下、実施の形態１と異なる事項について説明し、説明しない事項については実施の形態１と同様である。
【００５９】
図１４は、実施の形態４におけるコンピュータシステム１の構成図である。
図１、図６、図１０と同一符号は同一又は相当部分を示す。
【００６０】
図１４において、トレースバッファアドレス表２３はユーザ側トレースバッファ１９のメモリアドレスを１つもしくは複数有し、カーネル側メモリ１９６に格納される。
トレースバッファアドレス登録部２２はトレースバッファアドレス表２３にユーザ側トレースバッファ１９のメモリアドレスを登録する。
【００６１】
トレースバッファアドレス登録部２２は、ＣＰＵ９１１を用いて、ＯＳの拡張部であるカーネルモードソフトウェアもしくはＯＳとは独立したカーネルモードソフトウェアとして実行される。
【００６２】
次に、コンピュータシステム１におけるトレースデータ蓄積方法の動作について説明する。
まずは、コンピュータシステム１がトレース機能を起動する際に実行するシステムの初期化処理の動作について説明する。コンピュータシステム１は以下に説明するカーネルモード初期化処理（図１５参照）およびユーザモードソフトウェア初期化処理（図１６参照）を実行することによりシステムの初期化を行う。
【００６３】
図１５は、実施の形態４におけるコンピュータシステム１が実行するカーネルモード初期化処理を示すフローチャートである。
「〜部」として説明するコンピュータシステム１の各構成はＣＰＵ９１１を用いて以下の処理を実行する。
【００６４】
ＯＳ実行部２はシステム起動時もしくはトレース機能利用開始時にカーネル側トレース初期化部８を呼び出す（Ｓ４００）。
カーネル側トレース初期化部８は、ＯＳ実行部２から呼び出されると、カーネル側トレース制御情報６を初期化する（Ｓ４０１）。
また、カーネル側トレース初期化部８はカーネル側トレースバッファ５も初期化する（Ｓ４０２）。
さらに、カーネル側トレース初期化部８はトレースバッファアドレス表２３も初期化する（Ｓ４０３）。
【００６５】
図１６は、実施の形態４におけるコンピュータシステム１が実行するユーザモードソフトウェア初期化処理を示すフローチャートである。
「〜部」として説明するコンピュータシステム１の各構成はＣＰＵ９１１を用いて以下の処理を実行する。
【００６６】
ユーザモードソフトウェア実行部３は、ユーザ側トレースデータの蓄積を開始する際、ユーザ側トレース制御部１３を呼び出す前に一度、ユーザ側トレース初期化部１８を呼び出す（Ｓ４１１）。
ユーザ側トレース初期化部１８は、動作中のユーザモードソフトウェアの各々に対して、ユーザ側トレースバッファ１９のメモリ確保・初期化を行う（Ｓ４１２）。
次に、ユーザ側トレース初期化部１８は、ＯＳ実行部２を介して、全てのユーザ側トレースバッファ１９のメモリアドレスをトレースバッファアドレス登録部２２に通知する（Ｓ４１３）。
トレースバッファアドレス登録部２２は通知されたユーザ側トレース制御情報７のメモリアドレスをトレースバッファアドレス表２３に加える（Ｓ４１４）。
【００６７】
カーネルモードソフトウェアのトレースデータを出力する際の動作（カーネル側トレース出力処理）については、実施の形態１（図４）と同じであるため、説明を省略する。
【００６８】
ユーザモードソフトウェアのトレースデータを出力する際の動作（ユーザ側トレース出力処理）については、実施の形態３（図１３）と同じであるため、説明を省略する。
【００６９】
つまり、実施の形態４では、カーネル側トレースデータはカーネル側トレースバッファ５に蓄積され、ユーザ側トレースデータはユーザモードソフトウェア毎にユーザ側トレースバッファ１９に一時的に蓄積される。
【００７０】
図１７は、実施の形態４におけるコンピュータシステム１が実行するカーネル側トレースデータ移動処理を示すフローチャートである。
次に、ユーザ側トレースバッファ１９内に蓄積されたユーザ側トレースデータをカーネル側トレースバッファ５に移動する処理の動作について、図１７に基づいて以下に説明する。
「〜部」として説明するコンピュータシステム１の各構成はＣＰＵ９１１を用いて以下の処理を実行する。
【００７１】
動作モードがユーザモードからカーネルモードへ遷移する際、ＯＳ実行部２はトレースデータ移動部２１を呼び出す。ＯＳ実行部２がトレースデータ移動部２１を呼び出す契機としては、例えば、ユーザモードソフトウェア間での実行の切替え（一般にはプロセス切替え）時や、ユーザモードソフトウェア実行部３からのシステムコールの発行時や、ハードウェアからの割込み発生時が含まれる。なお、呼び出された際にトレースデータ移動部２１は、それまで動作していたユーザモードソフトウェアを識別可能な値もしくはそれまで動作していたユーザモードソフトウェアに対応するユーザ側トレースバッファ１９を識別可能な値として、例えばプロセスＩＤが、ＯＳ実行部２から通知されるものとする（Ｓ４２１）。
トレースデータ移動部２１は、ＯＳ実行部２からの通知を元にトレースバッファアドレス表２３を参照し、それまで動作していたユーザモードソフトウェアに対応するユーザ側トレースバッファ１９のメモリアドレスを取得する（Ｓ４２２）。
次に、トレースデータ移動部２１は、取得したメモリアドレスが示すユーザ側トレースバッファ１９から、その時点で蓄積されている当該ユーザモードソフトウェアのユーザ側トレースデータを取り出す（Ｓ４２３）。
そして、トレースデータ移動部２１は取り出したユーザ側トレースデータをカーネル側トレースバッファ５へ書き込む。トレースデータ移動部２１は、ユーザ側トレースデータの書き込みを、カーネル側トレースバッファ５において書き込み済みのシステムトレースデータの後ろに行って、システムトレースデータの時系列を確保する（Ｓ４２４：ユーザ側トレースデータ移動処理）。
【００７２】
つまり、実施の形態４におけるコンピュータシステム１は、プロセス切替え前のユーザモードソフトウェアのトレースデータを、プロセス切替え後のユーザモードソフトウェアにおいてトレースデータが発生する前に、カーネル側トレースバッファ５に蓄積するため、ユーザモードソフトウェア間におけるトレースデータの時系列を確保することができる。
また、実施の形態４におけるコンピュータシステム１は、カーネルモードへの遷移前に発生したユーザ側トレースデータを、モード遷移後にカーネルモードでトレースデータが発生する前に、カーネル側トレースバッファ５に蓄積するため、ユーザ側トレースデータとカーネル側トレースデータとの間における時系列を確保することができる。
【００７３】
なお、ユーザモードソフトウェアが終了する際には、ユーザモードソフトウェア実行部３はユーザ側トレース初期化部１８を介して当該ユーザ側トレースバッファ１９を解放し、トレースバッファアドレス登録部２２を介してトレースバッファアドレス表２３に登録された当該ユーザ側トレースバッファ１９のメモリアドレスを削除するものとする。また、ユーザ側トレース初期化部１８は、ユーザ側トレースバッファ１９を解放する前に，ＯＳ実行部２を介してトレースデータ移動部２１に通知することで，ユーザ側トレースバッファ１９に残存するトレースデータをカーネル側トレースバッファ５に移動することができる。
【００７４】
上記の説明ではコンピュータシステム１はユーザ側トレースデータの蓄積要否の判定を、実施の形態１と同様に、カーネル側トレース制御情報６をメモリマッピングしたユーザ側トレース制御情報７を使用しているが、コンピュータシステム１は、実施の形態２と同様に、カーネル側トレース制御情報６を複製したユーザ側トレース制御情報７を使用してもよい。
【００７５】
以上のように本実施の形態によれば、ＯＳ実行部２によってユーザモードからカーネルモードへ遷移する際に、それまでに蓄積されたユーザモードソフトウェアのトレースデータをカーネル側トレースバッファ５に書き込むことにより、システムトレースデータの時系列を維持することができる。
また、本実施の形態では、１つもしくは複数のユーザモードソフトウェアに対して、ユーザ側トレースデータの蓄積要否を判定するためにユーザモードからカーネルモードへ遷移する必要がなくなり、そのオーバヘッドを削減することができる。
また、本実施の形態では、ユーザモードからカーネルモードへ遷移する契機を利用してユーザ側トレースデータをカーネル側トレースバッファ５に蓄積することで、ユーザ側トレースデータをカーネル側トレースバッファ５に蓄積することだけを目的としてユーザモードからカーネルモードへ遷移する必要がなくなり、そのオーバヘッドを削減することができる。
【００７６】
本実施の形態において、以下の手段を備えたシステムトレースデータ蓄積方式について説明した。
（ａ）ユーザ側トレース初期化部１８によってメモリ確保・初期化されたユーザ側トレースバッファ１９のメモリアドレスをトレースバッファアドレス表２３に登録するトレースバッファアドレス登録部２２。
（ｂ）ＯＳ実行部２から呼び出され、トレースバッファアドレス表２３に記載のユーザ側トレースバッファ１９のうち、ＯＳ実行部２から通知されたユーザモードソフトウェアのユーザ側トレースバッファ１９に蓄積済みのユーザ側トレースデータを取得し、取得したユーザ側トレースデータをカーネル側トレースバッファ５に書込みするトレースデータ移動部２１。
【図面の簡単な説明】
【００７７】
【図１】実施の形態１におけるコンピュータシステム１の構成図。
【図２】実施の形態１におけるコンピュータシステム１のハードウェア資源の一例を示す図。
【図３】実施の形態１におけるコンピュータシステム１が実行するシステム初期化処理を示すフローチャート。
【図４】実施の形態１におけるコンピュータシステム１が実行するカーネル側トレース出力処理を示すフローチャート。
【図５】実施の形態１におけるコンピュータシステム１が実行するユーザ側トレース出力処理を示すフローチャート。
【図６】実施の形態２におけるコンピュータシステム１の構成図。
【図７】実施の形態２におけるコンピュータシステム１が実行するカーネルモード初期化処理を示すフローチャート。
【図８】実施の形態２におけるコンピュータシステム１が実行するユーザモードソフトウェア初期化処理を示すフローチャート。
【図９】実施の形態２におけるコンピュータシステム１が実行するユーザ側トレース制御情報更新処理を示すフローチャート。
【図１０】実施の形態３におけるコンピュータシステム１の構成図。
【図１１】実施の形態３におけるコンピュータシステム１が実行するシステム初期化処理を示すフローチャート。
【図１２】実施の形態３におけるコンピュータシステム１が実行するカーネル側トレース出力処理を示すフローチャート。
【図１３】実施の形態３におけるコンピュータシステム１が実行するユーザ側トレース出力処理を示すフローチャート。
【図１４】実施の形態４におけるコンピュータシステム１の構成図。
【図１５】実施の形態４におけるコンピュータシステム１が実行するカーネルモード初期化処理を示すフローチャート。
【図１６】実施の形態４におけるコンピュータシステム１が実行するユーザモードソフトウェア初期化処理を示すフローチャート。
【図１７】実施の形態４におけるコンピュータシステム１が実行するカーネル側トレースデータ移動処理を示すフローチャート。
【符号の説明】
【００７８】
１  コンピュータシステム、２  ＯＳ実行部、３  ユーザモードソフトウェア実行部、４  カーネルモードソフトウェア実行部、５  カーネル側トレースバッファ、６  カーネル側トレース制御情報、７  ユーザ側トレース制御情報、８  カーネル側トレース初期化部、９  トレース制御情報マップ部、１０  カーネル側トレース出力部、１１  カーネル側トレース制御部、１２  ユーザ側トレース出力代行部、１３  ユーザ側トレース制御部、１４  トレース制御情報アドレス表、１５  トレース制御情報複写部、１６  トレース制御情報変更部、１７  トレース制御情報アドレス登録部、１８  ユーザ側トレース初期化部、１９  ユーザ側トレースバッファ、２０  ユーザ側トレース出力部、２１  トレースデータ移動部、２２  トレースバッファアドレス登録部、２３  トレースバッファアドレス表、１９２  ユーザ側メモリ、１９４，１９５，１９６  カーネル側メモリ、９１１  ＣＰＵ、９１２  バス、９１３  ＲＯＭ、９１４  ＲＡＭ、９１５  通信ボード、９２０  磁気ディスク装置、９２１  ＯＳ、９２３  プログラム群、９２４  ファイル群。
【図１】
2007328597.tif 000003
【図２】
2007328597.tif 000004
【図３】
2007328597.tif 000005
【図４】
2007328597.tif 000006
【図５】
2007328597.tif 000007
【図６】
2007328597.tif 000008
【図７】
2007328597.tif 000009
【図８】
2007328597.tif 000010
【図９】
2007328597.tif 000011
【図１０】
2007328597.tif 000012
【図１１】
2007328597.tif 000013
【図１２】
2007328597.tif 000014
【図１３】
2007328597.tif 000015
【図１４】
2007328597.tif 000016
【図１５】
2007328597.tif 000017
【図１６】
2007328597.tif 000018
【図１７】
2007328597.tif 000019