説明

メモリアクセストレースシステムおよびメモリアクセストレース方法

【課題】広い範囲のメモリ領域やアプリケーションに割り当てられたメモリ領域でのメモリアクセスをトレースすることが可能な技術を提供する。
【解決手段】プログラム2からメモリの割り当て要求を受けると,OS1は,メモリ領域4からプログラム2に割り当てるメモリ領域を獲得し,獲得したメモリ領域を検査対象メモリ領域としてMMU3によりアクセス禁止状態にする。また,その検査対象メモリ領域に対応するトレースデータ域12を確保する。検査対象メモリ領域に対するアクセスが発生すると,MMU3によりアクセス例外が発生し,トレース処理部10において,アクセス例外が発生した検査対象メモリ領域に対応するトレースデータ域12に,採取したトレース情報を記録する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は,検査対象となるメモリ領域へのメモリアクセスをトレースする技術に関するものであり,特に,メモリ管理ユニットのメモリ保護機能を利用して検査対象メモリ領域へのメモリアクセスをトレースするメモリアクセストレースシステムおよびメモリアクセストレース方法に関するものである。
【背景技術】
【0002】
メモリ管理ユニット(以下,MMU(Memory Management Unit)という)は,メモリのマッピングや保護を目的としたメモリ管理のためのハードウェアである。このMMUが備える重要な機能の1つに,メモリ保護機能がある。
【0003】
MMUにおけるメモリ保護機能とは,プログラムによってアクセスできるメモリ領域を制限する機能である。例えば,オペレーティング・システム(OS)本体などが格納されているシステム領域にアプリケーションがアクセスできると,システムの破壊を招いてしまう可能性がある。MMUのメモリ保護機能により,システム領域にアプリケーションがアクセスできないように制限すると,アプリケーションが暴走したとしても,システムへの影響を最小限に抑えることができる。
【0004】
MMUのメモリ保護機能を利用してメモリへの書込みをトレースすることにより,不当なメモリアクセスを検知する技術がある(例えば,特許文献1参照)。特許文献1に記載された技術では,指定された検査対象アドレスを含むページに対してMMUによって書込み禁止属性を設定し,書込み保護例外が発生した場合にはそのトレース情報を記録し,書込み保護例外の発生が検査対象アドレスへのアクセスであった場合にその変更値があらかじめ設定されている例外停止条件を満たすかを判断し,条件を満たす場合にはデバッグ対象プログラムを停止させている。
【0005】
また,メモリ領域に対してアクセス禁止を設定することにより不当なメモリアクセスを検知する他の技術として,例えば,特許文献2に記載された技術がある。特許文献2に記載された技術では,アプリケーションからの要求により割り当てられたメモリ領域の終端に接する隣接メモリ領域をアクセス不可属性に設定し,アプリケーションが割り当てられたメモリ領域を超えて隣接メモリ領域に対してアクセスしたときに発生する例外割り込みを契機に,コンテキスト情報をログファイルに記録したり,アプリケーションを強制終了させたりしている。
【特許文献1】特開2002−14843号公報
【特許文献2】特開2002−55851号公報
【発明の開示】
【発明が解決しようとする課題】
【0006】
特許文献1に記載された技術では,検査対象アドレスに対してアクセスがあるか,検査対象アドレスを含むページに対してアクセスがある場合にのみ,トレースを行っている。しかし,不当なメモリアクセスは常に同じアドレスで発生するわけではないので,広い範囲のメモリ領域でメモリアクセスをトレースしたい場合などには多数の検査対象アドレスの指定を行わなければならず,あまり現実的ではない。
【0007】
また,特許文献2に記載された技術では,アプリケーションに対して割り当てられたメモリ領域にはアクセス禁止が設定されないため,アプリケーションに割り当てられたメモリ領域へのメモリアクセスをトレースすることはできない。
【0008】
本発明は,上記の問題点の解決を図り,広い範囲のメモリ領域でのメモリアクセスをトレースすることが可能となり,また,アプリケーションに割り当てられたメモリ領域でのメモリアクセスをトレースすることが可能となるメモリアクセストレースシステムおよびメモリアクセストレース方法を提供することを目的とする。
【課題を解決するための手段】
【0009】
本発明は,上記の課題を解決するため,ある範囲で指定された検査対象メモリ領域をMMUのメモリ保護機能でアクセス禁止状態にし,その検査対象メモリ領域へのアクセスがあったときに発生するアクセス例外を契機に,アクセスされたデータ,アクセスされたメモリのアドレス,アクセスを行った命令のアドレス,アクセスがリードアクセスであるかライトアクセスであるか等のトレース情報を採取し,記録することを特徴とする。
【0010】
これにより,広い範囲の検査対象となるメモリ領域に対してのメモリアクセスをトレースすることが可能となり,広い範囲のメモリ領域での不当メモリアクセスを検知することが可能となる。
【0011】
また,プログラムに対してOSが動的にメモリを割り当てるときに,動的に割り当てられるメモリ領域を検査対象メモリ領域としてMMUのメモリ保護機能でアクセス禁止状態にし,その検査対象メモリ領域へのアクセスがあったときに発生するアクセス例外を契機にトレース情報を採取し,記録することを特徴とする。
【0012】
これにより,プログラムに対して動的に割り当てられたメモリ領域に対してのメモリアクセスをトレースすることが可能となり,プログラムに対して動的に割り当てられたメモリ領域での不当メモリアクセスを検知することが可能となる。
【0013】
また,あらかじめトレース情報の採取条件を設定し,条件が満たされる場合にのみトレース情報を採取し,記録することを特徴とする。このとき,例えばライトアクセス時にのみトレース情報を採取したい場合には,MMUによって検査対象メモリ領域をライトアクセス禁止状態に設定し,ライトアクセス時にのみアクセス例外が発生するようにしてもよいし,または,検査対象メモリ領域をアクセス禁止状態に設定し,アクセス例外が発生してからそのアクセスがライトアクセスであるかを判断するようにしてもよい。
【0014】
これにより,必要な条件に合ったトレース情報のみを採取することが可能となり,必要最小限の資源で不当メモリアクセスを検知することが可能となる。
【発明の効果】
【0015】
本発明によって,固定アドレスではない,広い範囲のメモリ領域を検査対象として不当メモリアクセスを検知することができるようになり,障害調査の効率を上げることができるようになる。
【0016】
また,割り当てによって動的に変化するメモリ領域を検査対象として不当メモリアクセスを検知することができるようになり,障害調査の効率を上げることができるようになる。
【0017】
また,トレース情報の採取をあらかじめ指定した条件に合うものだけに限定することができるようになるので,トレース情報量の増大化を抑え,少ない資源で不当メモリアクセスを検知できるようになる。
【発明を実施するための最良の形態】
【0018】
以下,本発明の実施の形態について,図を用いて説明する。
【0019】
〔実施の形態1〕
図1は,本発明の実施の形態におけるメモリアクセストレースシステムの構成例(1)を示す図である。メモリアクセストレースシステムは,OS実行手段(以下,単に「OS」という)1,検索対象のプログラムを実行するプログラム実行手段(以下,単に「プログラム」という)2,MMU(メモリ管理ユニット)3,メモリ領域4から構成される。また,OS1は,アクセス禁止例外ハンドラ11と,複数のトレースデータ域12から構成されるトレース処理部10を備える。
【0020】
プログラム2は,システムコールによって,OS1に対してメモリの割り当てを要求する。このときプログラム2は,メモリの割り当て要求と同時に,検査対象メモリ領域(この場合はプログラム2に割り当てられるメモリ領域)を一意に識別するための識別IDや,トレース情報を記録するための領域であるトレースデータ域12をメモリ領域4から獲得するときのサイズであるトレース域のサイズなども指定する。これにより,検査対象メモリ領域ごとにトレースデータ域12のサイズを指定することが可能となる。
【0021】
本実施の形態において,メモリの割り当て要求時にOS1がプログラム2から受け付けるシステムコールは,例えば次のようになる。
【0022】
char *mem_trace(id,trace_size,size,option)
int id;
size_t trace_size;
size_t size;
char *option;
このシステムコールの例において,idには,検査対象メモリ領域を一意に識別するための識別IDを指定し, trace_sizeには,トレース情報を記録するための領域であるトレースデータ域12をメモリ領域4から獲得するときのサイズを指定し,sizeには,割り当てを要求するメモリのサイズを指定する。
【0023】
また,optionによってトレース情報の採取条件を指定することにより,採取するトレース情報を必要なものだけに制限することもできる。検査対象メモリ領域ごとにトレース情報の採取条件を指定することが可能である。optionで指定するトレース情報の採取条件には,例えば,次のようなものがある。
(a)readonly :リードアクセス時にのみトレースを行う。
(b)writeonly :ライトアクセス時にのみトレースを行う。
(c)range m n :m〜nの範囲以外の値がアクセスされた場合にのみトレースを行う。
(d)boundary n :nバウンダリの値がアクセスされた場合にのみトレースを行う。
(e)inst a b :aアドレス〜bアドレスの間の命令を実行しているときに検査対象メモリ領域に対してアクセスがあった場合にのみトレースを行う。
【0024】
このようなoptionは,例えば,次のように指定する。
【0025】
char *option[][]= {
"writeonly",
"boundary 4"
};
このoptionの指定の例では,ライトアクセス時であって4バウンダリ(アドレスが4の倍数)の値がアクセスされた場合にのみトレースを行うようにトレース情報の採取条件が指定されている。
【0026】
OS1は,システムコールによってプログラム2からメモリの割り当ての要求を受けると,メモリ領域4から指定されたサイズのメモリ領域を獲得してプログラム2に割り当て,同時に,プログラム2に割り当てたメモリ領域を検査対象メモリ領域としてアクセス禁止状態にするように,MMU3に依頼する。MMU3は,OS1からの依頼により,検査対象メモリ領域をアクセス禁止状態にする。
【0027】
また,OS1は,指定されたサイズのトレースデータ域12をメモリ領域4から獲得する。獲得したトレースデータ域12の先頭には,ヘッダ情報を設けて識別ID,検査対象メモリ領域のアドレス情報,トレース情報の採取条件等を記録する。また,獲得したトレースデータ域12は,トレース処理部10においてチェーン構造にしておく。
【0028】
図2は,トレースデータ域のデータ構造の例を示している。トレースデータ域12は,例えば図2に示すように,管理情報を記憶するヘッダ部と,採取したトレース情報が格納されるデータ格納域のデータ部とからなり,ヘッダ部には,トレースデータ域の識別ID,データ格納域のサイズ,検査対象メモリ領域のアドレスおよびサイズ等の検査対象メモリ領域情報,トレース情報採取条件,およびトレースデータ域12が複数設けられる場合の次のトレースデータ域へのポインタ等の情報が格納される。
【0029】
図3は,本実施の形態1におけるOSの処理フローチャートである。まず,プログラム2からシステムコールによってメモリの割り当て要求を受けると(ステップS10),そのシステムコールで指定された識別IDが,すでに他のトレースデータ域12のヘッダ情報に記録されている識別IDと重複しているかを確認し(ステップS11),重複していればエラー復帰する(ステップS12)。
【0030】
ステップS11において識別IDが重複していなければ,割り当てが要求されたメモリのサイズと指定されたトレースデータ域12のサイズの分だけ,充分にメモリ領域4に空きがあるかを確認し(ステップS13),空きがなければエラー復帰する(ステップS12)。
【0031】
ステップS13においてメモリ領域4に充分な空きがあれば,プログラム2への割り当てメモリ領域とトレースデータ域12とを,メモリ領域4から獲得する(ステップS14)。また,MMU3を制御して獲得した割り当てメモリ領域を検査対象メモリ領域としてアクセス禁止状態にする(ステップS15)。
【0032】
また,獲得したトレースデータ域12の先頭にヘッダ情報を設定し,指定された識別ID,獲得した検査対象メモリ領域のアドレス情報,指定されたトレース情報の採取条件等を記録する(ステップS16)。また,獲得したトレースデータ域12を,トレース処理部10のトレースデータ域12のチェーンに繋ぐ(ステップS17)。その後,獲得した検査対象メモリ領域の先頭アドレスを復帰情報として,プログラム2に復帰する(ステップS18)。
【0033】
以上のようなプログラム2に対するメモリの割り当てが終了すると,検査対象メモリ領域へのアクセス時にトレース情報の採取が行われる。
【0034】
MMU3は,アクセス禁止状態にしている検査対象メモリ領域へのアクセスを検知すると,アクセス例外を発生させ,この割込みによってトレース処理部10のアクセス禁止例外ハンドラ11が起動される。
【0035】
アクセス禁止例外ハンドラ11は,アクセス例外が発生した検査対象メモリ領域のアドレスをもとに,トレースデータ域12のチェーンから該当するトレースデータ域12を検出し,検出したトレースデータ域12にトレース情報を記録する。このとき,トレース情報の採取条件が指定されているときには,その採取条件を満たす場合にのみ,検出したトレースデータ域12にトレース情報を記録する。
【0036】
ここで,トレースデータ域12に記録するトレース情報には,例えば,
(1)検査対象メモリ領域へのアクセスがリードアクセスであるのかライトアクセスであるのかを示す情報,
(2)検査対象メモリ領域からリードされるデータ,または,検査対象メモリ領域にライトされるデータ,
(3)リードされる検査対象メモリ領域のアドレス,または,ライトされる検査対象メモリ領域のアドレス,
(4)検査対象メモリ領域からリードを行う命令のアドレス,または,検査対象メモリ領域にライトを行う命令のアドレス,
などがある。
【0037】
図4は,本実施の形態におけるトレース処理フローチャートである。トレース処理部10は,MMU3からアクセス例外の発生による割込みを受けると(ステップS20),そのアクセス例外発生時のレジスタをスタック等に退避する(ステップS21)。
【0038】
アクセス例外が発生した検査対象メモリ領域のアドレスと各トレースデータ域12のヘッダ部における検査対象メモリ領域情報とを比較することにより,該当するトレースデータ域12を検索する(ステップS22)。該当するトレースデータ域12が検出されたかを確認し(ステップS23),検出されなければ,通常のアドレス例外処理を行う(ステップS24)。
【0039】
ステップS23において該当するトレースデータ域12が検出され,かつ,あらかじめ指定されたトレース情報の採取条件を満たす場合には(ステップS25),発生したアクセス例外についてトレース情報を採取し(ステップS26),検出されたトレースデータ域12に採取したトレース情報をデータ格納域に追加記録する(ステップS27)。
【0040】
スタック等に退避したレジスタを利用し,アクセス例外となっていなければ本来実行されるはずであった命令と同じ結果が得られるように命令を発行する処理を行う(ステップS28)。
【0041】
その後,アクセス例外が発生した命令の次の命令を実行できるように復帰位置を変更し(ステップS29),スタック等に退避していたレジスタを復元し(ステップS30),アクセス例外から復帰する(ステップS31)。
【0042】
以上説明したような検査対象メモリ領域へのアクセス情報のトレース処理を行い,トレースデータ域12にトレース情報を蓄積する。
【0043】
メモリ破壊が原因でシステムが停止した場合には,トレース処理部10のトレースデータ域12のチェーンを追うことにより,各トレースデータ域12の識別IDから該当するトレースデータ域12を検出する。検出されたトレースデータ域12のトレース情報を解析することにより,メモリ破壊の原因を追求することができる。
【0044】
特にメモリ破壊が起こらずに,プログラム2が割り当てメモリ領域(検査対象メモリ領域)の解放をOS1に要求すると,OS1は,解放が要求された割り当てメモリ領域(検査対象メモリ領域)をメモリ領域4に解放する。また,その検査対象メモリ領域に対応するトレースデータ域12をトレース処理部10のトレースデータ域12のチェーンから検出し,検出されたトレースデータ域12をチェーンから外して解放する。
【0045】
〔実施の形態2〕
次に,入力されたコマンド等により,プログラム2に対して動的に割り当てられたメモリ領域へのアクセスに関してトレースを行う形態について説明する。
【0046】
図5は,本発明の実施の形態におけるメモリアクセストレースシステムの構成例(2)を示す図である。図5のメモリアクセストレースシステムは,図1のメモリアクセストレースシステムに,さらに,トレース設定部5を備える。トレース設定部5は,プログラム2におけるあるプロセスによるメモリの割り当て要求に対して割り当てるメモリ領域を検査対象メモリ領域とする指定を受け付け,その指定情報をOS1に通知する。プロセスによるメモリの割り当て要求に対して割り当てるメモリ領域を検査対象メモリ領域とする指定を,OS1が直接に受け付けてもよい。受け付けた指定情報は,保持しておく。
【0047】
プロセスによるメモリの割り当て要求に対して割り当てるメモリ領域を検査対象メモリ領域とする指定は,例えば,次のようなコマンドで受ける。
【0048】
memtrace [option] 識別ID トレース域のサイズ プロセスID
このコマンドの例において,識別IDには,検査対象メモリ領域を一意に識別するためのIDを指定し,トレース域のサイズには,トレース情報を記録するための領域であるトレースデータ域12をメモリ領域4から獲得するときのサイズを指定し,プロセスIDには,メモリの割り当て要求を行うプロセスを一意に識別するためのIDを指定する。
【0049】
コマンドで指定された識別IDが,すでに他のトレースデータ域12のヘッダ情報に記録されている識別IDであるか,または,他のコマンドですでに指定された識別IDである場合には,エラーを通知する。
【0050】
また,optionによってトレース情報の採取条件を指定することにより,採取するトレース情報を必要なものだけに制限することもできる。optionで指定するトレース情報の採取条件は,例えば,実施の形態1におけるシステムコールの例で説明したものと同じものでよい。
【0051】
OS1は,プログラム2のあるプロセスからメモリの割り当て要求を受けると,そのメモリの割り当て要求を行ったプロセスがあらかじめ前述のコマンド等により指定されたプロセスであるかを確認し,指定されたプロセスであれば,メモリ領域4からプロセスが要求するサイズのメモリ領域を獲得してそのプロセスに割り当て,同時に,プロセスに割り当てたメモリ領域を検査対象メモリ領域としてアクセス禁止状態にするように,MMU3に依頼する。MMU3は,OS1からの依頼により,検査対象メモリ領域をアクセス禁止状態にする。
【0052】
また,OS1は,あらかじめ前述のコマンド等で指定されたサイズのトレースデータ域12をメモリ領域4から獲得する。獲得したトレースデータ域12の先頭には,ヘッダ情報を設けて識別ID,検査対象メモリ領域のアドレス情報,トレース情報の採取条件等を記録する。また,獲得したトレースデータ域12は,図2に示したように,トレース処理部10においてチェーン構造にしておく。
【0053】
図6は,本実施の形態2におけるOSの処理フローチャートである。まず,プログラム2のあるプロセスからシステムコールによってメモリの割り当て要求を受けると(ステップS40),メモリの割り当て要求を行ったプロセスがあらかじめコマンドで指定されたプロセスIDに該当するプロセスであるかを確認し(ステップS41),該当するプロセスでなければ,通常のメモリ割り当て処理を行う(ステップS42)。
【0054】
ステップS41において該当するプロセスであれば,割り当てが要求されたメモリのサイズとあらかじめコマンドで指定されたトレースデータ域12のサイズの分だけ,充分にメモリ領域4に空きがあるかを確認し(ステップS43),空きがなければエラー復帰する(ステップS44)。
【0055】
ステップS43においてメモリ領域4に充分な空きがあれば,プロセスへの割り当てメモリ領域とトレースデータ域12とを,メモリ領域4から獲得する(ステップS45)。また,MMU3を制御して獲得した割り当てメモリ領域を検査対象メモリ領域としてアクセス禁止状態にする(ステップS46)。
【0056】
獲得したトレースデータ域12の先頭にヘッダ情報を設定し,あらかじめコマンドで指定された識別ID,獲得した検査対象メモリ領域のアドレス情報,あらかじめコマンドで指定されたトレース情報の採取条件等を記録する(ステップS47)。また,獲得したトレースデータ域12を,トレース処理部10のトレースデータ域12のチェーンに繋ぐ(ステップS48)。その後,獲得した検査対象メモリ領域の先頭アドレスを復帰情報として,メモリ割り当て要求元へ復帰する(ステップS49)。
【0057】
以上のようなプログラム2のプロセスに対するメモリの割り当てが終了すると,検査対象メモリ領域へのアクセス時におけるトレース情報の採取が行われる。
【0058】
MMU3は,アクセス禁止状態にしている検査対象メモリ領域へのアクセスを検知すると,アクセス例外を発生させ,この割込みによって,トレース処理部10のアクセス禁止例外ハンドラ11に制御が渡される。
【0059】
アクセス禁止例外ハンドラ11は,アクセス例外が発生した検査対象メモリ領域のアドレスをもとに,トレースデータ域12のチェーンから該当するトレースデータ域12を検出し,検出したトレースデータ域12にトレース情報を記録する。このとき,トレース情報の採取条件が指定されているときには,その採取条件を満たす場合にのみ,検出したトレースデータ域12にトレース情報を記録する。
【0060】
トレース処理の具体的な処理の流れについては,実施の形態1で説明した図4のフローチャートが示す処理の流れと同様である。このような検査対象メモリ領域へのアクセス情報のトレース処理を行い,トレースデータ域12にトレース情報を蓄積する。
【0061】
メモリ破壊が原因でシステムが停止した場合には,トレース処理部10のトレースデータ域12のチェーンを追うことにより,各トレースデータ域12の識別IDから該当するトレースデータ域12を検出する。検出されたトレースデータ域12のトレース情報を解析することにより,メモリ破壊の原因を追求することができる。
【0062】
特にメモリ破壊が起こらずに,プログラム2のプロセスが割り当てメモリ領域(検査対象メモリ領域)の解放をOS1に要求すると,OS1は,解放が要求された割り当てメモリ領域(検査対象メモリ領域)をメモリ領域4に解放する。また,その検査対象メモリ領域に対応するトレースデータ域12をトレース処理部10のトレースデータ域12のチェーンから検出し,検出されたトレースデータ域12をチェーンから外してメモリ領域4に解放する。
【0063】
〔実施の形態3〕
次に,プログラム2へのメモリの割り当てに関係なく,コマンド等により検査対象メモリ領域(この場合は検査の対象として指定されたメモリ領域)の指定を受け,その検査対象メモリ領域に対してアクセスが発生した場合にトレースを行う形態について説明する。検査対象メモリ領域は,広い範囲で指定することが可能である。ここでは,図5のメモリアクセストレースシステムの構成をそのまま用いて説明する。
【0064】
トレース設定部5は,検査対象メモリ領域の指定を受け付け,その指定情報をOS1に通知する。検査対象メモリ領域の指定を,OS1が直接に受け付けてもよい。検査対象メモリ領域の指定は,例えば,次のようなコマンドで受ける。
【0065】
memtrace [option] 識別ID トレース域のサイズ 先頭アドレス 最終アドレス
このコマンドの例において,識別IDには,検査対象メモリ領域を一意に識別するためのIDを指定し,トレース域のサイズには,トレース情報を記録するための領域であるトレースデータ域12をメモリ領域4から獲得するときのサイズを指定し,先頭アドレスには,検査対象メモリ領域の先頭アドレスを指定し,最終アドレスには,検査対象メモリ領域の最終アドレスを指定する。
【0066】
また,optionによってトレース情報の採取条件を指定することにより,採取するトレース情報を必要なものだけに制限することもできる。optionで指定するトレース情報の採取条件は,例えば,実施の形態1におけるシステムコールの例で説明したものと同じものでよい。
【0067】
OS1は,検査対象メモリ領域の指定を受けると,その検査対象メモリ領域をアクセス禁止状態にするように,MMU3に依頼する。MMU3は,OS1からの依頼により,検査対象メモリ領域をアクセス禁止状態にする。
【0068】
また,OS1は,指定されたサイズのトレースデータ域12をメモリ領域4から獲得する。獲得したトレースデータ域12の先頭には,ヘッダ情報を設けて識別ID,検査対象メモリ領域のアドレス情報,トレース情報の採取条件等を記録する。また,獲得したトレースデータ域12は,トレース処理部10においてチェーン構造にしておく。
【0069】
図7は,本実施の形態3におけるOSの処理フローチャートである。まず,検査対象メモリ領域の指定コマンドを受けると(ステップS50),コマンドで指定された識別IDが,すでに他のトレースデータ域12のヘッダ情報に記録されている識別IDと重複しているかを確認し(ステップS51),重複していればエラー通知し(ステップS52),処理を終了する。
【0070】
ステップS51において識別IDが重複していなければ,コマンドで指定されたトレースデータ域12のサイズの分だけ,充分にメモリ領域4に空きがあるかを確認し(ステップS53),空きがなければエラー通知し(ステップS52),処理を終了する。
【0071】
ステップS53においてメモリ領域4に充分な空きがあれば,トレースデータ域12をメモリ領域4から獲得する(ステップS54)。また,MMU3を制御して,コマンドで指定された検査対象メモリ領域をアクセス禁止状態にする(ステップS55)。
【0072】
獲得したトレースデータ域12の先頭にヘッダ情報を設定し,指定された識別ID,指定された検査対象メモリ領域のアドレス情報,指定されたトレース情報の採取条件等を記録する(ステップS56)。また,獲得したトレースデータ域12を,トレース処理部10のトレースデータ域12のチェーンに繋ぎ(ステップS57),処理を終了する。
【0073】
以上のような検査対象メモリ領域の指定後に,検査対象メモリ領域へのアクセス時におけるトレース情報の採取が行われる。
【0074】
MMU3は,アクセス禁止状態にしている検査対象メモリ領域へのアクセスを検知すると,アクセス例外を発生させ,その割込みによりトレース処理部10のアクセス禁止例外ハンドラ11に制御が渡される。
【0075】
アクセス禁止例外ハンドラ11は,アクセス例外が発生した検査対象メモリ領域のアドレスをもとに,トレースデータ域12のチェーンから該当するトレースデータ域12を検出し,検出したトレースデータ域12にトレース情報を記録する。このとき,トレース情報の採取条件が指定されているときには,その採取条件を満たす場合にのみ,検出したトレースデータ域12にトレース情報を記録する。
【0076】
トレース処理の具体的な処理の流れについては,実施の形態1で説明した図4のフローチャートが示す処理の流れと同様である。このような検査対象メモリ領域へのアクセス情報のトレース処理を行い,トレースデータ域12にトレース情報を蓄積する。
【0077】
メモリ破壊が原因でシステムが停止した場合には,トレース処理部10のトレースデータ域12のチェーンを追うことにより,各トレースデータ域12の識別IDから該当するトレースデータ域12を検出する。検出されたトレースデータ域12のトレース情報を解析することにより,メモリ破壊の原因を追求することができる。
【図面の簡単な説明】
【0078】
【図1】本発明の実施の形態におけるメモリアクセストレースシステムの構成例(1)を示す図である。
【図2】トレースデータ域のデータ構造の例を示す図である。
【図3】本実施の形態1におけるOSの処理フローチャートである。
【図4】本実施の形態におけるトレース処理フローチャートである。
【図5】本発明の実施の形態におけるメモリアクセストレースシステムの構成例(2)を示す図である。
【図6】本実施の形態2におけるOSの処理フローチャートである。
【図7】本実施の形態3におけるOSの処理フローチャートである。
【符号の説明】
【0079】
1 OS実行手段(OS)
2 プログラム実行手段(プログラム)
3 MMU
4 メモリ領域
5 トレース設定部
10 トレース処理部
11 アクセス禁止例外ハンドラ
12 トレースデータ域

【特許請求の範囲】
【請求項1】
検査対象となるメモリ領域へのアクセスに関する情報であるトレース情報を記録するメモリアクセストレースシステムであって,
検査対象となるメモリ領域の指定を入力する手段と,
前記検査対象となるメモリ領域を,メモリ管理ユニットによってアクセス禁止状態または書込み禁止状態にする手段と,
トレース情報を記録するための領域であるトレースデータ域を獲得する手段と,
前記検査対象となるメモリ領域へのアクセスによりアクセス例外が発生した場合に,トレース情報を採取する手段と,
前記採取されたトレース情報を前記トレースデータ域に記録する手段とを備える
ことを特徴とするメモリアクセストレースシステム。
【請求項2】
検査対象となるメモリ領域へのアクセスに関する情報であるトレース情報を記録するメモリアクセストレースシステムであって,
メモリの割り当て要求を受ける手段と,
前記メモリの割り当て要求に応じて,メモリ領域を割り当てる手段と,
前記割り当てたメモリ領域を検査対象となるメモリ領域として,メモリ管理ユニットによってアクセス禁止状態または書込み禁止状態にする手段と,
トレース情報を記録するための領域であるトレースデータ域を獲得する手段と,
前記検査対象となるメモリ領域へのアクセスによりアクセス例外が発生した場合に,トレース情報を採取する手段と,
前記採取されたトレース情報を前記トレースデータ域に記録する手段とを備える
ことを特徴とするメモリアクセストレースシステム。
【請求項3】
請求項1または請求項2に記載されたメモリアクセストレースシステムにおいて,
トレース情報を採取するための条件を入力する手段を備え,
前記トレース情報を採取する手段は,前記トレース情報を採取するための条件が満たされる場合にのみ,前記トレース情報を採取する
ことを特徴とするメモリアクセストレースシステム。
【請求項4】
検査対象となるメモリ領域へのアクセスに関する情報であるトレース情報を記録するメモリアクセストレース方法であって,
検査対象となるメモリ領域の指定を入力する過程と,
前記検査対象となるメモリ領域を,メモリ管理ユニットによってアクセス禁止状態または書込み禁止状態にする過程と,
トレース情報を記録するための領域であるトレースデータ域を獲得する過程と,
前記検査対象となるメモリ領域へのアクセスによりアクセス例外が発生した場合に,トレース情報を採取する過程と,
前記採取されたトレース情報を前記トレースデータ域に記録する過程とを有する
ことを特徴とするメモリアクセストレース方法。
【請求項5】
検査対象となるメモリ領域へのアクセスに関する情報であるトレース情報を記録するメモリアクセストレース方法であって,
メモリの割り当て要求を受ける過程と,
前記メモリの割り当て要求に応じて,メモリ領域を割り当てる過程と,
前記割り当てたメモリ領域を検査対象となるメモリ領域として,メモリ管理ユニットによってアクセス禁止状態または書込み禁止状態にする過程と,
トレース情報を記録するための領域であるトレースデータ域を獲得する過程と,
前記検査対象となるメモリ領域へのアクセスによりアクセス例外が発生した場合に,トレース情報を採取する過程と,
前記採取されたトレース情報を前記トレースデータ域に記録する過程とを有する
ことを特徴とするメモリアクセストレース方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate


【公開番号】特開2006−18705(P2006−18705A)
【公開日】平成18年1月19日(2006.1.19)
【国際特許分類】
【出願番号】特願2004−197531(P2004−197531)
【出願日】平成16年7月5日(2004.7.5)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】