(57)【要約】【課題】広い範囲のメモリ領域やアプリケーションに割り当てられたメモリ領域でのメモリアクセスをトレースすることが可能な技術を提供する。【解決手段】プログラム２からメモリの割り当て要求を受けると，ＯＳ１は，メモリ領域４からプログラム２に割り当てるメモリ領域を獲得し，獲得したメモリ領域を検査対象メモリ領域としてＭＭＵ３によりアクセス禁止状態にする。また，その検査対象メモリ領域に対応するトレースデータ域１２を確保する。検査対象メモリ領域に対するアクセスが発生すると，ＭＭＵ３によりアクセス例外が発生し，トレース処理部１０において，アクセス例外が発生した検査対象メモリ領域に対応するトレースデータ域１２に，採取したトレース情報を記録する。【選択図】図１
2006018705.tif 000002
【特許請求の範囲】
【請求項１】
検査対象となるメモリ領域へのアクセスに関する情報であるトレース情報を記録するメモリアクセストレースシステムであって，
検査対象となるメモリ領域の指定を入力する手段と，
前記検査対象となるメモリ領域を，メモリ管理ユニットによってアクセス禁止状態または書込み禁止状態にする手段と，
トレース情報を記録するための領域であるトレースデータ域を獲得する手段と，
前記検査対象となるメモリ領域へのアクセスによりアクセス例外が発生した場合に，トレース情報を採取する手段と，
前記採取されたトレース情報を前記トレースデータ域に記録する手段とを備える
ことを特徴とするメモリアクセストレースシステム。
【請求項２】
検査対象となるメモリ領域へのアクセスに関する情報であるトレース情報を記録するメモリアクセストレースシステムであって，
メモリの割り当て要求を受ける手段と，
前記メモリの割り当て要求に応じて，メモリ領域を割り当てる手段と，
前記割り当てたメモリ領域を検査対象となるメモリ領域として，メモリ管理ユニットによってアクセス禁止状態または書込み禁止状態にする手段と，
トレース情報を記録するための領域であるトレースデータ域を獲得する手段と，
前記検査対象となるメモリ領域へのアクセスによりアクセス例外が発生した場合に，トレース情報を採取する手段と，
前記採取されたトレース情報を前記トレースデータ域に記録する手段とを備える
ことを特徴とするメモリアクセストレースシステム。
【請求項３】
請求項１または請求項２に記載されたメモリアクセストレースシステムにおいて，
トレース情報を採取するための条件を入力する手段を備え，
前記トレース情報を採取する手段は，前記トレース情報を採取するための条件が満たされる場合にのみ，前記トレース情報を採取する
ことを特徴とするメモリアクセストレースシステム。
【請求項４】
検査対象となるメモリ領域へのアクセスに関する情報であるトレース情報を記録するメモリアクセストレース方法であって，
検査対象となるメモリ領域の指定を入力する過程と，
前記検査対象となるメモリ領域を，メモリ管理ユニットによってアクセス禁止状態または書込み禁止状態にする過程と，
トレース情報を記録するための領域であるトレースデータ域を獲得する過程と，
前記検査対象となるメモリ領域へのアクセスによりアクセス例外が発生した場合に，トレース情報を採取する過程と，
前記採取されたトレース情報を前記トレースデータ域に記録する過程とを有する
ことを特徴とするメモリアクセストレース方法。
【請求項５】
検査対象となるメモリ領域へのアクセスに関する情報であるトレース情報を記録するメモリアクセストレース方法であって，
メモリの割り当て要求を受ける過程と，
前記メモリの割り当て要求に応じて，メモリ領域を割り当てる過程と，
前記割り当てたメモリ領域を検査対象となるメモリ領域として，メモリ管理ユニットによってアクセス禁止状態または書込み禁止状態にする過程と，
トレース情報を記録するための領域であるトレースデータ域を獲得する過程と，
前記検査対象となるメモリ領域へのアクセスによりアクセス例外が発生した場合に，トレース情報を採取する過程と，
前記採取されたトレース情報を前記トレースデータ域に記録する過程とを有する
ことを特徴とするメモリアクセストレース方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，検査対象となるメモリ領域へのメモリアクセスをトレースする技術に関するものであり，特に，メモリ管理ユニットのメモリ保護機能を利用して検査対象メモリ領域へのメモリアクセスをトレースするメモリアクセストレースシステムおよびメモリアクセストレース方法に関するものである。
【背景技術】
【０００２】
メモリ管理ユニット（以下，ＭＭＵ（Memory Management Unit）という）は，メモリのマッピングや保護を目的としたメモリ管理のためのハードウェアである。このＭＭＵが備える重要な機能の１つに，メモリ保護機能がある。
【０００３】
ＭＭＵにおけるメモリ保護機能とは，プログラムによってアクセスできるメモリ領域を制限する機能である。例えば，オペレーティング・システム（ＯＳ）本体などが格納されているシステム領域にアプリケーションがアクセスできると，システムの破壊を招いてしまう可能性がある。ＭＭＵのメモリ保護機能により，システム領域にアプリケーションがアクセスできないように制限すると，アプリケーションが暴走したとしても，システムへの影響を最小限に抑えることができる。
【０００４】
ＭＭＵのメモリ保護機能を利用してメモリへの書込みをトレースすることにより，不当なメモリアクセスを検知する技術がある（例えば，特許文献１参照）。特許文献１に記載された技術では，指定された検査対象アドレスを含むページに対してＭＭＵによって書込み禁止属性を設定し，書込み保護例外が発生した場合にはそのトレース情報を記録し，書込み保護例外の発生が検査対象アドレスへのアクセスであった場合にその変更値があらかじめ設定されている例外停止条件を満たすかを判断し，条件を満たす場合にはデバッグ対象プログラムを停止させている。
【０００５】
また，メモリ領域に対してアクセス禁止を設定することにより不当なメモリアクセスを検知する他の技術として，例えば，特許文献２に記載された技術がある。特許文献２に記載された技術では，アプリケーションからの要求により割り当てられたメモリ領域の終端に接する隣接メモリ領域をアクセス不可属性に設定し，アプリケーションが割り当てられたメモリ領域を超えて隣接メモリ領域に対してアクセスしたときに発生する例外割り込みを契機に，コンテキスト情報をログファイルに記録したり，アプリケーションを強制終了させたりしている。
【特許文献１】特開２００２−１４８４３号公報
【特許文献２】特開２００２−５５８５１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
特許文献１に記載された技術では，検査対象アドレスに対してアクセスがあるか，検査対象アドレスを含むページに対してアクセスがある場合にのみ，トレースを行っている。しかし，不当なメモリアクセスは常に同じアドレスで発生するわけではないので，広い範囲のメモリ領域でメモリアクセスをトレースしたい場合などには多数の検査対象アドレスの指定を行わなければならず，あまり現実的ではない。
【０００７】
また，特許文献２に記載された技術では，アプリケーションに対して割り当てられたメモリ領域にはアクセス禁止が設定されないため，アプリケーションに割り当てられたメモリ領域へのメモリアクセスをトレースすることはできない。
【０００８】
本発明は，上記の問題点の解決を図り，広い範囲のメモリ領域でのメモリアクセスをトレースすることが可能となり，また，アプリケーションに割り当てられたメモリ領域でのメモリアクセスをトレースすることが可能となるメモリアクセストレースシステムおよびメモリアクセストレース方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明は，上記の課題を解決するため，ある範囲で指定された検査対象メモリ領域をＭＭＵのメモリ保護機能でアクセス禁止状態にし，その検査対象メモリ領域へのアクセスがあったときに発生するアクセス例外を契機に，アクセスされたデータ，アクセスされたメモリのアドレス，アクセスを行った命令のアドレス，アクセスがリードアクセスであるかライトアクセスであるか等のトレース情報を採取し，記録することを特徴とする。
【００１０】
これにより，広い範囲の検査対象となるメモリ領域に対してのメモリアクセスをトレースすることが可能となり，広い範囲のメモリ領域での不当メモリアクセスを検知することが可能となる。
【００１１】
また，プログラムに対してＯＳが動的にメモリを割り当てるときに，動的に割り当てられるメモリ領域を検査対象メモリ領域としてＭＭＵのメモリ保護機能でアクセス禁止状態にし，その検査対象メモリ領域へのアクセスがあったときに発生するアクセス例外を契機にトレース情報を採取し，記録することを特徴とする。
【００１２】
これにより，プログラムに対して動的に割り当てられたメモリ領域に対してのメモリアクセスをトレースすることが可能となり，プログラムに対して動的に割り当てられたメモリ領域での不当メモリアクセスを検知することが可能となる。
【００１３】
また，あらかじめトレース情報の採取条件を設定し，条件が満たされる場合にのみトレース情報を採取し，記録することを特徴とする。このとき，例えばライトアクセス時にのみトレース情報を採取したい場合には，ＭＭＵによって検査対象メモリ領域をライトアクセス禁止状態に設定し，ライトアクセス時にのみアクセス例外が発生するようにしてもよいし，または，検査対象メモリ領域をアクセス禁止状態に設定し，アクセス例外が発生してからそのアクセスがライトアクセスであるかを判断するようにしてもよい。
【００１４】
これにより，必要な条件に合ったトレース情報のみを採取することが可能となり，必要最小限の資源で不当メモリアクセスを検知することが可能となる。
【発明の効果】
【００１５】
本発明によって，固定アドレスではない，広い範囲のメモリ領域を検査対象として不当メモリアクセスを検知することができるようになり，障害調査の効率を上げることができるようになる。
【００１６】
また，割り当てによって動的に変化するメモリ領域を検査対象として不当メモリアクセスを検知することができるようになり，障害調査の効率を上げることができるようになる。
【００１７】
また，トレース情報の採取をあらかじめ指定した条件に合うものだけに限定することができるようになるので，トレース情報量の増大化を抑え，少ない資源で不当メモリアクセスを検知できるようになる。
【発明を実施するための最良の形態】
【００１８】
以下，本発明の実施の形態について，図を用いて説明する。
【００１９】
〔実施の形態１〕
図１は，本発明の実施の形態におけるメモリアクセストレースシステムの構成例（１）を示す図である。メモリアクセストレースシステムは，ＯＳ実行手段（以下，単に「ＯＳ」という）１，検索対象のプログラムを実行するプログラム実行手段（以下，単に「プログラム」という）２，ＭＭＵ（メモリ管理ユニット）３，メモリ領域４から構成される。また，ＯＳ１は，アクセス禁止例外ハンドラ１１と，複数のトレースデータ域１２から構成されるトレース処理部１０を備える。
【００２０】
プログラム２は，システムコールによって，ＯＳ１に対してメモリの割り当てを要求する。このときプログラム２は，メモリの割り当て要求と同時に，検査対象メモリ領域（この場合はプログラム２に割り当てられるメモリ領域）を一意に識別するための識別ＩＤや，トレース情報を記録するための領域であるトレースデータ域１２をメモリ領域４から獲得するときのサイズであるトレース域のサイズなども指定する。これにより，検査対象メモリ領域ごとにトレースデータ域１２のサイズを指定することが可能となる。
【００２１】
本実施の形態において，メモリの割り当て要求時にＯＳ１がプログラム２から受け付けるシステムコールは，例えば次のようになる。
【００２２】
char  *mem＿trace(id,trace＿size,size,option) 
int      id;
size＿t  trace＿size; 
size＿t  size;
char     *option; 
このシステムコールの例において，idには，検査対象メモリ領域を一意に識別するための識別ＩＤを指定し， trace＿sizeには，トレース情報を記録するための領域であるトレースデータ域１２をメモリ領域４から獲得するときのサイズを指定し，sizeには，割り当てを要求するメモリのサイズを指定する。
【００２３】
また，optionによってトレース情報の採取条件を指定することにより，採取するトレース情報を必要なものだけに制限することもできる。検査対象メモリ領域ごとにトレース情報の採取条件を指定することが可能である。optionで指定するトレース情報の採取条件には，例えば，次のようなものがある。
（ａ）readonly    ：リードアクセス時にのみトレースを行う。
（ｂ）writeonly   ：ライトアクセス時にのみトレースを行う。
（ｃ）range m n   ：ｍ〜ｎの範囲以外の値がアクセスされた場合にのみトレースを行う。
（ｄ）boundary n  ：ｎバウンダリの値がアクセスされた場合にのみトレースを行う。
（ｅ）inst a b    ：ａアドレス〜ｂアドレスの間の命令を実行しているときに検査対象メモリ領域に対してアクセスがあった場合にのみトレースを行う。
【００２４】
このようなoptionは，例えば，次のように指定する。
【００２５】
char *option[][]= ｛
"writeonly",
"boundary 4"
｝; 
このoptionの指定の例では，ライトアクセス時であって４バウンダリ（アドレスが４の倍数）の値がアクセスされた場合にのみトレースを行うようにトレース情報の採取条件が指定されている。
【００２６】
ＯＳ１は，システムコールによってプログラム２からメモリの割り当ての要求を受けると，メモリ領域４から指定されたサイズのメモリ領域を獲得してプログラム２に割り当て，同時に，プログラム２に割り当てたメモリ領域を検査対象メモリ領域としてアクセス禁止状態にするように，ＭＭＵ３に依頼する。ＭＭＵ３は，ＯＳ１からの依頼により，検査対象メモリ領域をアクセス禁止状態にする。
【００２７】
また，ＯＳ１は，指定されたサイズのトレースデータ域１２をメモリ領域４から獲得する。獲得したトレースデータ域１２の先頭には，ヘッダ情報を設けて識別ＩＤ，検査対象メモリ領域のアドレス情報，トレース情報の採取条件等を記録する。また，獲得したトレースデータ域１２は，トレース処理部１０においてチェーン構造にしておく。
【００２８】
図２は，トレースデータ域のデータ構造の例を示している。トレースデータ域１２は，例えば図２に示すように，管理情報を記憶するヘッダ部と，採取したトレース情報が格納されるデータ格納域のデータ部とからなり，ヘッダ部には，トレースデータ域の識別ＩＤ，データ格納域のサイズ，検査対象メモリ領域のアドレスおよびサイズ等の検査対象メモリ領域情報，トレース情報採取条件，およびトレースデータ域１２が複数設けられる場合の次のトレースデータ域へのポインタ等の情報が格納される。
【００２９】
図３は，本実施の形態１におけるＯＳの処理フローチャートである。まず，プログラム２からシステムコールによってメモリの割り当て要求を受けると（ステップＳ１０），そのシステムコールで指定された識別ＩＤが，すでに他のトレースデータ域１２のヘッダ情報に記録されている識別ＩＤと重複しているかを確認し（ステップＳ１１），重複していればエラー復帰する（ステップＳ１２）。
【００３０】
ステップＳ１１において識別ＩＤが重複していなければ，割り当てが要求されたメモリのサイズと指定されたトレースデータ域１２のサイズの分だけ，充分にメモリ領域４に空きがあるかを確認し（ステップＳ１３），空きがなければエラー復帰する（ステップＳ１２）。
【００３１】
ステップＳ１３においてメモリ領域４に充分な空きがあれば，プログラム２への割り当てメモリ領域とトレースデータ域１２とを，メモリ領域４から獲得する（ステップＳ１４）。また，ＭＭＵ３を制御して獲得した割り当てメモリ領域を検査対象メモリ領域としてアクセス禁止状態にする（ステップＳ１５）。
【００３２】
また，獲得したトレースデータ域１２の先頭にヘッダ情報を設定し，指定された識別ＩＤ，獲得した検査対象メモリ領域のアドレス情報，指定されたトレース情報の採取条件等を記録する（ステップＳ１６）。また，獲得したトレースデータ域１２を，トレース処理部１０のトレースデータ域１２のチェーンに繋ぐ（ステップＳ１７）。その後，獲得した検査対象メモリ領域の先頭アドレスを復帰情報として，プログラム２に復帰する（ステップＳ１８）。
【００３３】
以上のようなプログラム２に対するメモリの割り当てが終了すると，検査対象メモリ領域へのアクセス時にトレース情報の採取が行われる。
【００３４】
ＭＭＵ３は，アクセス禁止状態にしている検査対象メモリ領域へのアクセスを検知すると，アクセス例外を発生させ，この割込みによってトレース処理部１０のアクセス禁止例外ハンドラ１１が起動される。
【００３５】
アクセス禁止例外ハンドラ１１は，アクセス例外が発生した検査対象メモリ領域のアドレスをもとに，トレースデータ域１２のチェーンから該当するトレースデータ域１２を検出し，検出したトレースデータ域１２にトレース情報を記録する。このとき，トレース情報の採取条件が指定されているときには，その採取条件を満たす場合にのみ，検出したトレースデータ域１２にトレース情報を記録する。
【００３６】
ここで，トレースデータ域１２に記録するトレース情報には，例えば，
（１）検査対象メモリ領域へのアクセスがリードアクセスであるのかライトアクセスであるのかを示す情報，
（２）検査対象メモリ領域からリードされるデータ，または，検査対象メモリ領域にライトされるデータ，
（３）リードされる検査対象メモリ領域のアドレス，または，ライトされる検査対象メモリ領域のアドレス，
（４）検査対象メモリ領域からリードを行う命令のアドレス，または，検査対象メモリ領域にライトを行う命令のアドレス，
などがある。
【００３７】
図４は，本実施の形態におけるトレース処理フローチャートである。トレース処理部１０は，ＭＭＵ３からアクセス例外の発生による割込みを受けると（ステップＳ２０），そのアクセス例外発生時のレジスタをスタック等に退避する（ステップＳ２１）。
【００３８】
アクセス例外が発生した検査対象メモリ領域のアドレスと各トレースデータ域１２のヘッダ部における検査対象メモリ領域情報とを比較することにより，該当するトレースデータ域１２を検索する（ステップＳ２２）。該当するトレースデータ域１２が検出されたかを確認し（ステップＳ２３），検出されなければ，通常のアドレス例外処理を行う（ステップＳ２４）。
【００３９】
ステップＳ２３において該当するトレースデータ域１２が検出され，かつ，あらかじめ指定されたトレース情報の採取条件を満たす場合には（ステップＳ２５），発生したアクセス例外についてトレース情報を採取し（ステップＳ２６），検出されたトレースデータ域１２に採取したトレース情報をデータ格納域に追加記録する（ステップＳ２７）。
【００４０】
スタック等に退避したレジスタを利用し，アクセス例外となっていなければ本来実行されるはずであった命令と同じ結果が得られるように命令を発行する処理を行う（ステップＳ２８）。
【００４１】
その後，アクセス例外が発生した命令の次の命令を実行できるように復帰位置を変更し（ステップＳ２９），スタック等に退避していたレジスタを復元し（ステップＳ３０），アクセス例外から復帰する（ステップＳ３１）。
【００４２】
以上説明したような検査対象メモリ領域へのアクセス情報のトレース処理を行い，トレースデータ域１２にトレース情報を蓄積する。
【００４３】
メモリ破壊が原因でシステムが停止した場合には，トレース処理部１０のトレースデータ域１２のチェーンを追うことにより，各トレースデータ域１２の識別ＩＤから該当するトレースデータ域１２を検出する。検出されたトレースデータ域１２のトレース情報を解析することにより，メモリ破壊の原因を追求することができる。
【００４４】
特にメモリ破壊が起こらずに，プログラム２が割り当てメモリ領域（検査対象メモリ領域）の解放をＯＳ１に要求すると，ＯＳ１は，解放が要求された割り当てメモリ領域（検査対象メモリ領域）をメモリ領域４に解放する。また，その検査対象メモリ領域に対応するトレースデータ域１２をトレース処理部１０のトレースデータ域１２のチェーンから検出し，検出されたトレースデータ域１２をチェーンから外して解放する。
【００４５】
〔実施の形態２〕
次に，入力されたコマンド等により，プログラム２に対して動的に割り当てられたメモリ領域へのアクセスに関してトレースを行う形態について説明する。
【００４６】
図５は，本発明の実施の形態におけるメモリアクセストレースシステムの構成例（２）を示す図である。図５のメモリアクセストレースシステムは，図１のメモリアクセストレースシステムに，さらに，トレース設定部５を備える。トレース設定部５は，プログラム２におけるあるプロセスによるメモリの割り当て要求に対して割り当てるメモリ領域を検査対象メモリ領域とする指定を受け付け，その指定情報をＯＳ１に通知する。プロセスによるメモリの割り当て要求に対して割り当てるメモリ領域を検査対象メモリ領域とする指定を，ＯＳ１が直接に受け付けてもよい。受け付けた指定情報は，保持しておく。
【００４７】
プロセスによるメモリの割り当て要求に対して割り当てるメモリ領域を検査対象メモリ領域とする指定は，例えば，次のようなコマンドで受ける。
【００４８】
memtrace  [option]  識別ID  トレース域のサイズ  プロセスID
このコマンドの例において，識別ＩＤには，検査対象メモリ領域を一意に識別するためのＩＤを指定し，トレース域のサイズには，トレース情報を記録するための領域であるトレースデータ域１２をメモリ領域４から獲得するときのサイズを指定し，プロセスＩＤには，メモリの割り当て要求を行うプロセスを一意に識別するためのＩＤを指定する。
【００４９】
コマンドで指定された識別ＩＤが，すでに他のトレースデータ域１２のヘッダ情報に記録されている識別ＩＤであるか，または，他のコマンドですでに指定された識別ＩＤである場合には，エラーを通知する。
【００５０】
また，optionによってトレース情報の採取条件を指定することにより，採取するトレース情報を必要なものだけに制限することもできる。optionで指定するトレース情報の採取条件は，例えば，実施の形態１におけるシステムコールの例で説明したものと同じものでよい。
【００５１】
ＯＳ１は，プログラム２のあるプロセスからメモリの割り当て要求を受けると，そのメモリの割り当て要求を行ったプロセスがあらかじめ前述のコマンド等により指定されたプロセスであるかを確認し，指定されたプロセスであれば，メモリ領域４からプロセスが要求するサイズのメモリ領域を獲得してそのプロセスに割り当て，同時に，プロセスに割り当てたメモリ領域を検査対象メモリ領域としてアクセス禁止状態にするように，ＭＭＵ３に依頼する。ＭＭＵ３は，ＯＳ１からの依頼により，検査対象メモリ領域をアクセス禁止状態にする。
【００５２】
また，ＯＳ１は，あらかじめ前述のコマンド等で指定されたサイズのトレースデータ域１２をメモリ領域４から獲得する。獲得したトレースデータ域１２の先頭には，ヘッダ情報を設けて識別ＩＤ，検査対象メモリ領域のアドレス情報，トレース情報の採取条件等を記録する。また，獲得したトレースデータ域１２は，図２に示したように，トレース処理部１０においてチェーン構造にしておく。
【００５３】
図６は，本実施の形態２におけるＯＳの処理フローチャートである。まず，プログラム２のあるプロセスからシステムコールによってメモリの割り当て要求を受けると（ステップＳ４０），メモリの割り当て要求を行ったプロセスがあらかじめコマンドで指定されたプロセスＩＤに該当するプロセスであるかを確認し（ステップＳ４１），該当するプロセスでなければ，通常のメモリ割り当て処理を行う（ステップＳ４２）。
【００５４】
ステップＳ４１において該当するプロセスであれば，割り当てが要求されたメモリのサイズとあらかじめコマンドで指定されたトレースデータ域１２のサイズの分だけ，充分にメモリ領域４に空きがあるかを確認し（ステップＳ４３），空きがなければエラー復帰する（ステップＳ４４）。
【００５５】
ステップＳ４３においてメモリ領域４に充分な空きがあれば，プロセスへの割り当てメモリ領域とトレースデータ域１２とを，メモリ領域４から獲得する（ステップＳ４５）。また，ＭＭＵ３を制御して獲得した割り当てメモリ領域を検査対象メモリ領域としてアクセス禁止状態にする（ステップＳ４６）。
【００５６】
獲得したトレースデータ域１２の先頭にヘッダ情報を設定し，あらかじめコマンドで指定された識別ＩＤ，獲得した検査対象メモリ領域のアドレス情報，あらかじめコマンドで指定されたトレース情報の採取条件等を記録する（ステップＳ４７）。また，獲得したトレースデータ域１２を，トレース処理部１０のトレースデータ域１２のチェーンに繋ぐ（ステップＳ４８）。その後，獲得した検査対象メモリ領域の先頭アドレスを復帰情報として，メモリ割り当て要求元へ復帰する（ステップＳ４９）。
【００５７】
以上のようなプログラム２のプロセスに対するメモリの割り当てが終了すると，検査対象メモリ領域へのアクセス時におけるトレース情報の採取が行われる。
【００５８】
ＭＭＵ３は，アクセス禁止状態にしている検査対象メモリ領域へのアクセスを検知すると，アクセス例外を発生させ，この割込みによって，トレース処理部１０のアクセス禁止例外ハンドラ１１に制御が渡される。
【００５９】
アクセス禁止例外ハンドラ１１は，アクセス例外が発生した検査対象メモリ領域のアドレスをもとに，トレースデータ域１２のチェーンから該当するトレースデータ域１２を検出し，検出したトレースデータ域１２にトレース情報を記録する。このとき，トレース情報の採取条件が指定されているときには，その採取条件を満たす場合にのみ，検出したトレースデータ域１２にトレース情報を記録する。
【００６０】
トレース処理の具体的な処理の流れについては，実施の形態１で説明した図４のフローチャートが示す処理の流れと同様である。このような検査対象メモリ領域へのアクセス情報のトレース処理を行い，トレースデータ域１２にトレース情報を蓄積する。
【００６１】
メモリ破壊が原因でシステムが停止した場合には，トレース処理部１０のトレースデータ域１２のチェーンを追うことにより，各トレースデータ域１２の識別ＩＤから該当するトレースデータ域１２を検出する。検出されたトレースデータ域１２のトレース情報を解析することにより，メモリ破壊の原因を追求することができる。
【００６２】
特にメモリ破壊が起こらずに，プログラム２のプロセスが割り当てメモリ領域（検査対象メモリ領域）の解放をＯＳ１に要求すると，ＯＳ１は，解放が要求された割り当てメモリ領域（検査対象メモリ領域）をメモリ領域４に解放する。また，その検査対象メモリ領域に対応するトレースデータ域１２をトレース処理部１０のトレースデータ域１２のチェーンから検出し，検出されたトレースデータ域１２をチェーンから外してメモリ領域４に解放する。
【００６３】
〔実施の形態３〕
次に，プログラム２へのメモリの割り当てに関係なく，コマンド等により検査対象メモリ領域（この場合は検査の対象として指定されたメモリ領域）の指定を受け，その検査対象メモリ領域に対してアクセスが発生した場合にトレースを行う形態について説明する。検査対象メモリ領域は，広い範囲で指定することが可能である。ここでは，図５のメモリアクセストレースシステムの構成をそのまま用いて説明する。
【００６４】
トレース設定部５は，検査対象メモリ領域の指定を受け付け，その指定情報をＯＳ１に通知する。検査対象メモリ領域の指定を，ＯＳ１が直接に受け付けてもよい。検査対象メモリ領域の指定は，例えば，次のようなコマンドで受ける。
【００６５】
memtrace  [option]  識別ID  トレース域のサイズ  先頭アドレス  最終アドレス
このコマンドの例において，識別ＩＤには，検査対象メモリ領域を一意に識別するためのＩＤを指定し，トレース域のサイズには，トレース情報を記録するための領域であるトレースデータ域１２をメモリ領域４から獲得するときのサイズを指定し，先頭アドレスには，検査対象メモリ領域の先頭アドレスを指定し，最終アドレスには，検査対象メモリ領域の最終アドレスを指定する。
【００６６】
また，optionによってトレース情報の採取条件を指定することにより，採取するトレース情報を必要なものだけに制限することもできる。optionで指定するトレース情報の採取条件は，例えば，実施の形態１におけるシステムコールの例で説明したものと同じものでよい。
【００６７】
ＯＳ１は，検査対象メモリ領域の指定を受けると，その検査対象メモリ領域をアクセス禁止状態にするように，ＭＭＵ３に依頼する。ＭＭＵ３は，ＯＳ１からの依頼により，検査対象メモリ領域をアクセス禁止状態にする。
【００６８】
また，ＯＳ１は，指定されたサイズのトレースデータ域１２をメモリ領域４から獲得する。獲得したトレースデータ域１２の先頭には，ヘッダ情報を設けて識別ＩＤ，検査対象メモリ領域のアドレス情報，トレース情報の採取条件等を記録する。また，獲得したトレースデータ域１２は，トレース処理部１０においてチェーン構造にしておく。
【００６９】
図７は，本実施の形態３におけるＯＳの処理フローチャートである。まず，検査対象メモリ領域の指定コマンドを受けると（ステップＳ５０），コマンドで指定された識別ＩＤが，すでに他のトレースデータ域１２のヘッダ情報に記録されている識別ＩＤと重複しているかを確認し（ステップＳ５１），重複していればエラー通知し（ステップＳ５２），処理を終了する。
【００７０】
ステップＳ５１において識別ＩＤが重複していなければ，コマンドで指定されたトレースデータ域１２のサイズの分だけ，充分にメモリ領域４に空きがあるかを確認し（ステップＳ５３），空きがなければエラー通知し（ステップＳ５２），処理を終了する。
【００７１】
ステップＳ５３においてメモリ領域４に充分な空きがあれば，トレースデータ域１２をメモリ領域４から獲得する（ステップＳ５４）。また，ＭＭＵ３を制御して，コマンドで指定された検査対象メモリ領域をアクセス禁止状態にする（ステップＳ５５）。
【００７２】
獲得したトレースデータ域１２の先頭にヘッダ情報を設定し，指定された識別ＩＤ，指定された検査対象メモリ領域のアドレス情報，指定されたトレース情報の採取条件等を記録する（ステップＳ５６）。また，獲得したトレースデータ域１２を，トレース処理部１０のトレースデータ域１２のチェーンに繋ぎ（ステップＳ５７），処理を終了する。
【００７３】
以上のような検査対象メモリ領域の指定後に，検査対象メモリ領域へのアクセス時におけるトレース情報の採取が行われる。
【００７４】
ＭＭＵ３は，アクセス禁止状態にしている検査対象メモリ領域へのアクセスを検知すると，アクセス例外を発生させ，その割込みによりトレース処理部１０のアクセス禁止例外ハンドラ１１に制御が渡される。
【００７５】
アクセス禁止例外ハンドラ１１は，アクセス例外が発生した検査対象メモリ領域のアドレスをもとに，トレースデータ域１２のチェーンから該当するトレースデータ域１２を検出し，検出したトレースデータ域１２にトレース情報を記録する。このとき，トレース情報の採取条件が指定されているときには，その採取条件を満たす場合にのみ，検出したトレースデータ域１２にトレース情報を記録する。
【００７６】
トレース処理の具体的な処理の流れについては，実施の形態１で説明した図４のフローチャートが示す処理の流れと同様である。このような検査対象メモリ領域へのアクセス情報のトレース処理を行い，トレースデータ域１２にトレース情報を蓄積する。
【００７７】
メモリ破壊が原因でシステムが停止した場合には，トレース処理部１０のトレースデータ域１２のチェーンを追うことにより，各トレースデータ域１２の識別ＩＤから該当するトレースデータ域１２を検出する。検出されたトレースデータ域１２のトレース情報を解析することにより，メモリ破壊の原因を追求することができる。
【図面の簡単な説明】
【００７８】
【図１】本発明の実施の形態におけるメモリアクセストレースシステムの構成例（１）を示す図である。
【図２】トレースデータ域のデータ構造の例を示す図である。
【図３】本実施の形態１におけるＯＳの処理フローチャートである。
【図４】本実施の形態におけるトレース処理フローチャートである。
【図５】本発明の実施の形態におけるメモリアクセストレースシステムの構成例（２）を示す図である。
【図６】本実施の形態２におけるＯＳの処理フローチャートである。
【図７】本実施の形態３におけるＯＳの処理フローチャートである。
【符号の説明】
【００７９】
１  ＯＳ実行手段（ＯＳ）
２  プログラム実行手段（プログラム）
３  ＭＭＵ
４  メモリ領域
５  トレース設定部
１０  トレース処理部
１１  アクセス禁止例外ハンドラ
１２  トレースデータ域
【図１】
2006018705.tif 000003
【図２】
2006018705.tif 000004
【図３】
2006018705.tif 000005
【図４】
2006018705.tif 000006
【図５】
2006018705.tif 000007
【図６】
2006018705.tif 000008
【図７】
2006018705.tif 000009