(57)【特許請求の範囲】
【請求項１】
複数の記憶領域からなる共有メモリと、
それぞれ独立した仮想アドレス空間をもち前記共有メモリ内の記憶領域を仮想アドレス空間内の仮想アドレスにマップする複数のプロセスを、処理装置により実行するプロセス実行部と、
前記プロセス実行部で実行されるプロセスごとに前記共有メモリ内の記憶領域と仮想アドレスとのマッピング関係を管理するデータを記憶装置に記憶するマッピング管理部と、
プロセス及び仮想アドレスが指定されると、前記マッピング管理部で記憶されたデータを参照して当該プロセスが当該仮想アドレスにマップしている記憶領域を特定し、特定した記憶領域に対するアクセスを前記処理装置により監視する共有メモリ監視部と、
記憶領域を指定する入力を入力装置により受け付ける記憶領域指定部と、
前記マッピング管理部で記憶されたデータを検索して、前記記憶領域指定部で指定された記憶領域を仮想アドレスにマップしているプロセス及び当該仮想アドレスを前記処理装置により抽出するプロセス検索部と、
前記プロセス検索部で抽出されたプロセス及び仮想アドレスを前記共有メモリ監視部に対して指定するアドレス指定部と
を備えることを特徴とする共有メモリデバッグ装置。
【請求項２】
前記プロセス実行部は、前記記憶領域指定部で記憶領域が指定されると指定された記憶領域を仮想アドレスにマップして当該仮想アドレスを前記プロセス検索部に通知する管理プロセスを、前記複数のプロセスの１つとして実行し、
前記プロセス検索部は、前記マッピング管理部で記憶されたデータを検索して、前記プロセス実行部で実行された管理プロセスから通知された仮想アドレスがマップされている記憶領域を特定し、特定した記憶領域を仮想アドレスにマップしているプロセス及び当該仮想アドレスを抽出することを特徴とする請求項１の共有メモリデバッグ装置。
【請求項３】
前記アドレス指定部は、前記プロセス実行部で実行されるプロセスが前記記憶領域指定部で指定された記憶領域を新たに仮想アドレスにマップした場合、当該プロセス及び当該仮想アドレスを前記共有メモリ監視部に対して指定することを特徴とする請求項１又は２の共有メモリデバッグ装置。
【請求項４】
複数の記憶領域からなる共有メモリを備えるコンピュータを、
それぞれ独立した仮想アドレス空間をもち前記共有メモリ内の記憶領域を仮想アドレス空間内の仮想アドレスにマップする複数のプロセスを、処理装置により実行するプロセス実行部と、
前記プロセス実行部で実行されるプロセスごとに前記共有メモリ内の記憶領域と仮想アドレスとのマッピング関係を管理するデータを記憶装置に記憶するマッピング管理部と、
プロセス及び仮想アドレスが指定されると、前記マッピング管理部で記憶されたデータを参照して当該プロセスが当該仮想アドレスにマップしている記憶領域を特定し、特定した記憶領域に対するアクセスを前記処理装置により監視する共有メモリ監視部と、
記憶領域を指定する入力を入力装置により受け付ける記憶領域指定部と、
前記マッピング管理部で記憶されたデータを検索して、前記記憶領域指定部で指定された記憶領域を仮想アドレスにマップしているプロセス及び当該仮想アドレスを前記処理装置により抽出するプロセス検索部と、
前記プロセス検索部で抽出されたプロセス及び仮想アドレスを前記共有メモリ監視部に対して指定するアドレス指定部
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、共有メモリデバッグ装置及びプログラムに関するものである。
【背景技術】
【０００２】
複数のプロセス（ＯＳ（オペレーティングシステム）上でメモリ上にロードされ、実行されるプログラムであり、ＯＳによってはタスクとも呼ばれる）からアクセス可能なメモリ上に誤ったデータが書き込まれ、それを参照した別のプロセスが誤動作をした場合、原因となる誤ったデータを書き込んだプロセスと命令箇所を特定するのは困難である。
【０００３】
そのため、従来のデータ書き込みを検出する方法では、特定のメモリアドレスへの書き込みを捕捉して、アクセスしたプロセスの情報を記録する、あるいは、アクセスしたプロセスを停止する等を行っていた（例えば、特許文献１、特許文献２参照）。
【０００４】
また、仮想アドレスが指定されると、そこへアクセスされたときにトラップを発生させる機能を備えたＣＰＵ（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ）も利用されている（例えば、非特許文献１参照）。このＣＰＵを用いたデバッグ機能もある（例えば、非特許文献２、非特許文献３参照）。
【０００５】
マルチプロセスをサポートしたＯＳには、共有メモリと呼ばれる複数のプロセスからアクセス可能で、プロセス間でデータを共有するための機構がある。この機構を備えたコンピュータでは、プロセスの実行時に、プロセスから共有したいメモリのＩＤ（識別子）を指定して、プロセス内の任意の仮想アドレスにマップ／アンマップすることができる（例えば、非特許文献４、非特許文献５参照）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平６−３５７４７号公報
【特許文献２】特開２００１−３３１３７６号公報
【非特許文献】
【０００７】
【非特許文献１】「Ｉｎｔｅｌ（Ｒ）６４  ａｎｄ  ＩＡ−３２  Ａｒｃｈｉｔｅｃｔｕｒｅｓ  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｅｒ’ｓ  Ｍａｎｕａｌ」、「Ｖｏｌｕｍｅ  ３Ａ：  Ｓｙｓｔｅｍ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｇｕｉｄｅ，  Ｐａｒｔ  １」、Ｉｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ、２０１０年３月、「Ｃｈａｐｔｅｒ  １６  Ｄｅｂｕｇｇｉｎｇ，  Ｐｒｏｆｉｌｉｎｇ  Ｂｒａｎｃｈｅｓ  ａｎｄ  Ｔｉｍｅ−Ｓｔａｍｐ  Ｃｏｕｎｔｅｒ」、インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｗｗｗ．ｉｎｔｅｌ．ｃｏｍ／Ａｓｓｅｔｓ／ｊａ＿ＪＰ／ＰＤＦ／ｍａｎｕａｌ／２５３６６８．ｐｄｆ＞
【非特許文献２】「Ｄｅｂｕｇｇｉｎｇ  ｗｉｔｈ  ＧＤＢ」、Ｆｒｅｅ  Ｓｏｆｔｗａｒｅ  Ｆｏｕｎｄａｔｉｏｎ，  Ｉｎｃ．、「５．１．２  Ｓｅｔｔｉｎｇ  Ｗａｔｃｈｐｏｉｎｔｓ」、インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｓｏｕｒｃｅｗａｒｅ．ｏｒｇ／ｇｄｂ／ｃｕｒｒｅｎｔ／ｏｎｌｉｎｅｄｏｃｓ／ｇｄｂ／Ｓｅｔ−Ｗａｔｃｈｐｏｉｎｔｓ．ｈｔｍｌ＃Ｓｅｔ−Ｗａｔｃｈｐｏｉｎｔｓ＞
【非特許文献３】「ＧＤＢ  Ｉｎｔｅｒｎａｌｓ」、Ｆｒｅｅ  Ｓｏｆｔｗａｒｅ  Ｆｏｕｎｄａｔｉｏｎ，  Ｉｎｃ．、「３．８．２  ｘ８６  Ｗａｔｃｈｐｏｉｎｔｓ」、インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｓｏｕｒｃｅｗａｒｅ．ｏｒｇ／ｇｄｂ／ｃｕｒｒｅｎｔ／ｏｎｌｉｎｅｄｏｃｓ／ｇｄｂｉｎｔ／Ａｌｇｏｒｉｔｈｍｓ．ｈｔｍｌ＃Ａｌｇｏｒｉｔｈｍｓ＞
【非特許文献４】Ｗ．リチャード・スティーブンス著、「ＵＮＩＸネットワークプログラミング  Ｖｏｌ．２  ＩＰＣ：プロセス間通信」、ピアソンエデュケーション、２０００年８月、「第４部  共有メモリ」、ｐ．２９１〜３３０
【非特許文献５】「Ｔｈｅ  Ｓｉｎｇｌｅ  ＵＮＩＸ（Ｒ）  Ｓｐｅｃｉｆｉｃａｔｉｏｎ」、Ｖｅｒｓｉｏｎ  ２、Ｔｈｅ  Ｏｐｅｎ  Ｇｒｏｕｐ、「ｓｈｍａｔ」、インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｗｗｗ．ｏｐｅｎｇｒｏｕｐ．ｏｒｇ／ｏｎｌｉｎｅｐｕｂｓ／００７９０８７９９／ｘｓｈ／ｓｈｍａｔ．ｈｔｍｌ＞
【発明の概要】
【発明が解決しようとする課題】
【０００８】
非特許文献１のように、仮想アドレスが指定されると、その仮想アドレスへのデータ書き込みを検出するＣＰＵを、共有メモリへのデータ書き込みを検出するために使用する場合、以下の課題があった。
（１）ＯＳ上では複数のプロセスが動作しており、それらの中には書き込み検出対象となる共有メモリを仮想空間にマップしているものもあれば、マップしていない（利用していない）ものもある。そのため、仮想空間にマップしているプロセスを選び出して、人手でデータ書き込み検出の設定をＣＰＵに行わなければならない。あるいは、それがアプリケーションプログラムのプロセスであれば、アプリケーションプログラム側でデータ書き込み検出の設定をＣＰＵに行わなければならない。
（２）複数のプロセスが同じ共有メモリをマップする場合でも、マップ先仮想アドレスはプロセスごとに異なるアドレスになる。そのため、データ書き込み検出対象の仮想アドレスがどこになるかを予め特定することができず、共有メモリのマップ後にマップされたアドレスを基に人手でデータ書き込み検出の設定をＣＰＵにしなければならない。
（３）プロセスがデータ書き込み検出対象の共有メモリを新たにマップした場合は、その共有メモリへの書き込み検出ができない。
【０００９】
本発明は、例えば、非特許文献１のように仮想アドレスが指定されるとメモリのアクセスを捕捉するＣＰＵを用いて、人手を介さず、アプリケーションプログラムにも手を加えることなく、共有メモリの特定部分へのデータ書き込みを検出することを目的とする。
【課題を解決するための手段】
【００１０】
本発明の一の態様に係る共有メモリデバッグ装置は、
複数の記憶領域からなる共有メモリと、
それぞれ独立した仮想アドレス空間をもち前記共有メモリ内の記憶領域を仮想アドレス空間内の仮想アドレスにマップする複数のプロセスを、処理装置により実行するプロセス実行部と、
前記プロセス実行部で実行されるプロセスごとに前記共有メモリ内の記憶領域と仮想アドレスとのマッピング関係を管理するデータを記憶装置に記憶するマッピング管理部と、
プロセス及び仮想アドレスが指定されると、前記マッピング管理部で記憶されたデータを参照して当該プロセスが当該仮想アドレスにマップしている記憶領域を特定し、特定した記憶領域に対するアクセスを前記処理装置により監視する共有メモリ監視部と、
記憶領域を指定する入力を入力装置により受け付ける記憶領域指定部と、
前記マッピング管理部で記憶されたデータを検索して、前記記憶領域指定部で指定された記憶領域を仮想アドレスにマップしているプロセス及び当該仮想アドレスを前記処理装置により抽出するプロセス検索部と、
前記プロセス検索部で抽出されたプロセス及び仮想アドレスを前記共有メモリ監視部に対して指定するアドレス指定部とを備える。
【発明の効果】
【００１１】
本発明の一の態様によれば、非特許文献１のように仮想アドレスが指定されるとメモリのアクセスを捕捉するＣＰＵを用いて、人手を介さず、アプリケーションプログラムにも手を加えることなく、共有メモリの特定部分へのデータ書き込みを検出することが可能となる。
【図面の簡単な説明】
【００１２】
【図１】実施の形態１に係る共有メモリデバッグ装置の構成を示すブロック図。
【図２】実施の形態１に係る共有メモリデバッグ装置のハードウェア構成の一例を示す図。
【図３】実施の形態１に係るＯＳの構成及びＯＳ上で実行されるプロセス群の例を示すブロック図。
【図４】実施の形態１に係るＯＳのプロセス管理及びプロセス検索処理で用いるデータの例を示す図。
【図５】実施の形態１に係る設定／管理プロセスの動作を示すフローチャート。
【図６】実施の形態１に係る捕捉設定処理の動作を示すフローチャート。
【図７】実施の形態１に係る捕捉設定処理の動作を示すフローチャート。
【発明を実施するための形態】
【００１３】
以下、本発明の実施の形態について、図を用いて説明する。
【００１４】
実施の形態１．
図１は、本実施の形態に係る共有メモリデバッグ装置１００の構成を示すブロック図である。
【００１５】
図１において、共有メモリデバッグ装置１００は、プロセス実行部１０１、マッピング管理部１０２、共有メモリ監視部１０３、記憶領域指定部１０４、プロセス検索部１０５、アドレス指定部１０６を備える。共有メモリデバッグ装置１００の各部の動作については後述する。
【００１６】
また、共有メモリデバッグ装置１００は、ＣＰＵ１９１、メモリ１９２、入力装置１９３、出力装置１９４等のハードウェアを備える。ハードウェアは共有メモリデバッグ装置１００の各部によって利用される。ＣＰＵ１９１は、処理装置の一例であり、共有メモリデバッグ装置１００の各部でデータや情報の演算、加工、読み取り、書き込み等を行うために利用される。ＣＰＵ１９１は、非特許文献１に示されているＣＰＵと同様に、仮想アドレスが指定されるとメモリ１９２内の該当する記憶領域へのアクセスを捕捉する機能をもっている。メモリ１９２は、記憶装置の一例であり、共有メモリデバッグ装置１００の各部でデータや情報を記憶するために利用される。メモリ１９２上では、１つの共有メモリ又は複数の共有メモリからなる共有メモリ群１１０が任意に設定（確保）される。入力装置１９３は、共有メモリデバッグ装置１００の各部でデータや情報を入力するために、出力装置１９４は、共有メモリデバッグ装置１００の各部でデータや情報を出力するために利用される。
【００１７】
図２は、共有メモリデバッグ装置１００のハードウェア構成の一例を示す図である。
【００１８】
図２において、共有メモリデバッグ装置１００は、コンピュータであり、ＬＣＤ９０１（Ｌｉｑｕｉｄ・Ｃｒｙｓｔａｌ・Ｄｉｓｐｌａｙ）、キーボード９０２（Ｋ／Ｂ）、マウス９０３、ＦＤＤ９０４（Ｆｌｅｘｉｂｌｅ・Ｄｉｓｋ・Ｄｒｉｖｅ）、ＣＤＤ９０５（Ｃｏｍｐａｃｔ・Ｄｉｓｃ・Ｄｒｉｖｅ）、プリンタ９０６といったハードウェアデバイスを備えている。これらのハードウェアデバイスはケーブルや信号線で接続されている。ＬＣＤ９０１の代わりに、ＣＲＴ（Ｃａｔｈｏｄｅ・Ｒａｙ・Ｔｕｂｅ）、あるいは、その他の表示装置が用いられてもよい。マウス９０３の代わりに、タッチパネル、タッチパッド、トラックボール、ペンタブレット、あるいは、その他のポインティングデバイスが用いられてもよい。
【００１９】
共有メモリデバッグ装置１００は、前述したように、ＣＰＵ１９１を備えている。ＣＰＵ１９１は、バス９１２を介してＲＯＭ９１３（Ｒｅａｄ・Ｏｎｌｙ・Ｍｅｍｏｒｙ）、メモリ１９２、通信ボード９１５、ＬＣＤ９０１、キーボード９０２、マウス９０３、ＦＤＤ９０４、ＣＤＤ９０５、プリンタ９０６、ＨＤＤ９２０（Ｈａｒｄ・Ｄｉｓｋ・Ｄｒｉｖｅ）と接続され、これらのハードウェアデバイスを制御する。ＨＤＤ９２０の代わりに、フラッシュメモリ、光ディスク装置、メモリカードリーダライタ、あるいは、その他の記録媒体が用いられてもよい。
【００２０】
メモリ１９２は、例えばＲＡＭ（Ｒａｎｄｏｍ・Ａｃｃｅｓｓ・Ｍｅｍｏｒｙ）で構成される。ＲＡＭ、ＲＯＭ９１３、ＦＤＤ９０４、ＣＤＤ９０５、ＨＤＤ９２０は、記憶装置の一例である。通信ボード９１５、キーボード９０２、マウス９０３、ＦＤＤ９０４、ＣＤＤ９０５は、入力装置１９３の一例である。また、通信ボード９１５、ＬＣＤ９０１、プリンタ９０６は、出力装置１９４の一例である。
【００２１】
通信ボード９１５は、ＬＡＮ（Ｌｏｃａｌ・Ａｒｅａ・Ｎｅｔｗｏｒｋ）等に接続されている。通信ボード９１５は、ＬＡＮに限らず、ＩＰ−ＶＰＮ（Ｉｎｔｅｒｎｅｔ・Ｐｒｏｔｏｃｏｌ・Ｖｉｒｔｕａｌ・Ｐｒｉｖａｔｅ・Ｎｅｔｗｏｒｋ）、広域ＬＡＮ、ＡＴＭ（Ａｓｙｎｃｈｒｏｎｏｕｓ・Ｔｒａｎｓｆｅｒ・Ｍｏｄｅ）ネットワークといったＷＡＮ（Ｗｉｄｅ・Ａｒｅａ・Ｎｅｔｗｏｒｋ）、あるいは、インターネットに接続されていても構わない。ＬＡＮ、ＷＡＮ、インターネットは、ネットワークの一例である。
【００２２】
ＨＤＤ９２０には、ＯＳ１２０、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。プログラム群９２３のプログラムは、ＣＰＵ１９１、ＯＳ１２０、ウィンドウシステム９２２により実行される。ＯＳ１２０、ウィンドウシステム９２２もプログラムであり、ＣＰＵ１９１により実行される。ＯＳ１２０、ウィンドウシステム９２２、プログラム群９２３には、本実施の形態の説明において「〜部」として説明する機能を実行するプログラムが含まれている。プログラムは、ＣＰＵ１９１により読み出され実行される。ファイル群９２４には、本実施の形態の説明において、「〜データ」、「〜情報」、「〜ＩＤ（識別子）」、「〜フラグ」、「〜結果」として説明するデータや情報や信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」や「〜テーブル」の各項目として含まれている。「〜ファイル」や「〜データベース」や「〜テーブル」は、ＨＤＤ９２０等の記録媒体に記憶される。ＨＤＤ９２０等の記録媒体に記憶されたデータや情報や信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ１９１によりメモリ１９２に読み出され、抽出、検索、参照、比較、演算、計算、制御、出力、印刷、表示といったＣＰＵ１９１の処理（動作）に用いられる。抽出、検索、参照、比較、演算、計算、制御、出力、印刷、表示といったＣＰＵ１９１の処理中、データや情報や信号値や変数値やパラメータは、メモリ１９２に一時的に記憶される。
【００２３】
本実施の形態の説明において用いるブロック図やフローチャートの矢印の部分は主としてデータや信号の入出力を示す。データや信号は、メモリ１９２、ＦＤＤ９０４のフレキシブルディスク（ＦＤ）、ＣＤＤ９０５のコンパクトディスク（ＣＤ）、ＨＤＤ９２０の磁気ディスク、光ディスク、ＤＶＤ（Ｄｉｇｉｔａｌ・Ｖｅｒｓａｔｉｌｅ・Ｄｉｓｃ）、あるいは、その他の記録媒体に記録される。また、データや信号は、バス９１２、信号線、ケーブル、あるいは、その他の伝送媒体により伝送される。
【００２４】
本実施の形態の説明において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜工程」、「〜手順」、「〜処理」であってもよい。即ち、「〜部」として説明するものは、素子、デバイス、基板、配線といったハードウェアのみで実現されていても構わないし、ＲＯＭ９１３に記憶されたファームウェアとハードウェアとの組み合わせで実現されていても構わない。あるいは、「〜部」として説明するものは、ソフトウェアとハードウェアとの組み合わせ、あるいは、ソフトウェアとファームウェアとハードウェアとの組み合わせで実現されていても構わない。ファームウェアとソフトウェアは、プログラムとして、フレキシブルディスク、コンパクトディスク、磁気ディスク、光ディスク、ＤＶＤ等の記録媒体に記憶される。プログラムはＣＰＵ１９１により読み出され、ＣＰＵ１９１により実行される。即ち、プログラムは、本実施の形態の説明で述べる「〜部」としてコンピュータを機能させるものである。あるいは、プログラムは、本実施の形態の説明で述べる「〜部」の手順や方法をコンピュータに実行させるものである。
【００２５】
図３は、ＯＳ１２０の構成及びＯＳ１２０上で実行されるプロセス群１５０（複数のプロセス）の例を示すブロック図である。
【００２６】
図３において、プロセス群１５０に含まれるプロセスＡ〜Ｄは、ＯＳ１２０上で実行中のプログラムである。プロセスＡ〜Ｄは、それぞれ独立した仮想空間（仮想アドレス空間）をもつ。そして、プロセスＡ〜Ｄは、メモリ１９２上に展開（記憶）されているか、あるいは、メモリ１９２上に展開可能な（例えばＨＤＤ９２０等の記録媒体に記憶されていて必要時にメモリ１９２に読み出される）オブジェクトを仮想空間にマップする。オブジェクトとしては、プロセスが実行する命令を格納しているファイル、プロセスが利用するデータを格納しているファイル等のほか、共有メモリ群１１０に含まれる共有メモリがある。以下では、共有メモリ群１１０に含まれる共有メモリの一例として、２つの共有メモリＸ，Ｙがメモリ１９２上に設定されているものとする。共有メモリＸ，Ｙは、それぞれ複数の記憶領域からなる。プロセス群１５０に含まれる少なくとも一部のプロセスは、共有メモリＸ，Ｙのいずれか又は両方を仮想空間にマップする。
【００２７】
本例では、プロセスＡとプロセスＤは同じ共有メモリＸをそれぞれのプロセスの仮想空間内にマップしている。つまり、プロセスＡとプロセスＤは共有メモリＸ内の各記憶領域を、それぞれの仮想空間内の各仮想アドレスにマップしている。このとき、プロセスＡとプロセスＤの仮想空間はそれぞれ独立して設定されているため、共有メモリＸ内の同じ記憶領域にマップされている仮想アドレスはプロセスＡとプロセスＤとの間で同じであるとは限らない。また、プロセスＢはプロセスＡ、プロセスＤとは異なる共有メモリＹをマップしている。つまり、プロセスＢは共有メモリＹ内の各記憶領域を、自己の仮想空間内の各仮想アドレスにマップしている。プロセスＣは共有メモリをマップしていない。
【００２８】
設定／管理プロセス１５１は、利用者が書き込み捕捉（検出）対象の仮想アドレスとデータ長を指定するために用いるプログラムであり、通常のプロセスＡ〜Ｄにはない共有メモリ指定処理１５２を含む。設定／管理プロセス１５１も、プロセス群１５０に含まれるプロセスの１つであり、プロセスＡ〜Ｄと同様に、独自の仮想空間をもっている。そして、共有メモリ群１１０に含まれる共有メモリを仮想空間にマップすることができる。
【００２９】
本例では、利用者が書き込み捕捉対象として共有メモリＸ内の記憶領域を指定した場合を想定している。そのため、設定／管理プロセス１５１は、共有メモリ指定処理１５２の動作により共有メモリＸを仮想空間内にマップしている。つまり、設定／管理プロセス１５１は共有メモリＸ内の各記憶領域を、自己の仮想空間内の各仮想アドレスにマップしている。共有メモリ指定処理１５２については後述する。
【００３０】
ＯＳ１２０は、一般的なＯＳと同様に、メモリ管理１２１、共有メモリ管理１２２、プロセス管理１２３、Ｉ／Ｏ管理１２４（インプット／アウトプット管理）、ネットワーク管理１２５等の各処理をカーネル内に含む。また、ＯＳ１２０は、捕捉対象の仮想アドレスにＣＰＵ１９１がアクセスしたときに発生するトラップ（割り込み）により呼び出される書き込みトラップ処理１２６をカーネル内に含む。さらに、ＯＳ１２０は、捕捉対象のプロセス実行時にＣＰＵ１９１に対して書き込み捕捉設定を行う捕捉設定処理１３０をカーネル内に含む。捕捉設定処理１３０は、プロセス検索処理１３１、アドレス指定処理１３２、マップ検出処理１３３からなる。これらの処理については後述する。
【００３１】
図４は、ＯＳ１２０のプロセス管理１２３及びプロセス検索処理１３１で用いるデータの例を示す図である。
【００３２】
図４において、プロセスを管理するデータ２０１は、プロセス群１５０に含まれる個々のプロセスを管理するデータ２０２の集合である。個々のプロセスを管理するデータ２０２としては、プロセスＡを管理するデータ２０２ａ、プロセスＢを管理するデータ２０２ｂ等のほか、設定／管理プロセス１５１を管理するデータ２０２’がある。プロセス管理１２３は、プロセスが起動されると、そのプロセスを管理するデータ２０２を生成し、メモリ１９２に記憶する。その後、プロセス管理１２３は、必要に応じて、そのプロセスを管理するデータ２０２を更新する。また、プロセス管理１２３は、プロセスが終了等すると、そのプロセスを管理するデータ２０２をメモリ１９２から削除する。
【００３３】
１つのプロセスを管理するデータ２０２には、そのプロセスの仮想空間を管理するデータ２０５へのポインタ２０３が含まれる。また、ＣＰＵ１９１により実行されていたプロセスが他のプロセスに切り替わるときは、プロセス実行時のＣＰＵ１９１のレジスタの内容が、個々のプロセスを管理するデータ２０２の中にＣＰＵレジスタ保存データ２０４として保持される。プロセス管理１２３は、そのプロセスが再びＣＰＵ１９１により実行される際に、ＣＰＵレジスタ保存データ２０４の内容をＣＰＵ１９１のレジスタに反映させる。
【００３４】
プロセスの仮想空間は、命令を保持する領域、データを保持する領域、スタックを保持する領域、共有メモリの領域等、複数の領域からなる。複数の共有メモリをマップしている場合は、共有メモリごとに領域が確保される。プロセスの仮想空間を管理するデータ２０５は、仮想空間に含まれる個々の領域を管理するデータ２０６の集合である。個々の領域を管理するデータ２０６としては、例えば共有メモリＸがマップされているのであれば、共有メモリＸの領域を管理するデータ２０６ｘがあり、共有メモリＹがマップされているのであれば、共有メモリＹの領域を管理するデータ２０６ｙがある。プロセス管理１２３は、プロセスが仮想空間内の領域にオブジェクトをマップすると、その領域を管理するデータ２０６を生成し、メモリ１９２に記憶する。このとき、プロセス管理１２３は、その領域を管理するデータ２０６に対するポインタ２０３を、該当するプロセスを管理するデータ２０２に設定する。
【００３５】
仮想空間内の１つの領域を管理するデータ２０６には、その領域の先頭仮想アドレス２０７、その領域のサイズ２０８（長さ）、その領域にマップしているオブジェクトを管理するデータ２１０へのポインタ２０９が含まれる。異なるプロセスが同一の共有メモリをマップしている場合、それぞれのプロセスの仮想空間内の当該共有メモリの領域を管理するデータ２０６からは、同一のオブジェクト（即ち、共有メモリ）を管理するデータ２１０がポイントされることになる（ポインタ２０９のポイント先が同一になる）。
【００３６】
仮想空間にマップしているオブジェクトを管理するデータ２１０は、オブジェクトを一意に特定するデータであり、このようなデータとしては、オブジェクトのＩＤやメモリ１９２内でのオブジェクトの位置（物理アドレス）等を使用することができる。プロセス管理１２３は、オブジェクトを管理するデータ２１０をメモリ１９２に記憶しておき、そのオブジェクトをプロセスがマップすると、そのオブジェクトを管理するデータ２１０に対するポインタ２０９を、そのプロセスの仮想空間内の該当する領域を管理するデータ２０６に設定する。
【００３７】
共有メモリ内オフセット２１１、データの長さ２１２、ターゲット識別ポインタ２１３は、順番に、書き込み検出対象の共有メモリ内のオフセット、当該オフセットからの書き込み検出対象とする範囲、その共有メモリを管理するデータ２１０へのポインタである。プロセス検索処理１３１は、後述する動作により、これらのデータを作成し、メモリ１９２に記憶する。
【００３８】
以下、共有メモリデバッグ装置１００の動作（本実施の形態に係る共有メモリデバッグ方法、本実施の形態に係るプログラムの処理手順）について説明する。
【００３９】
図１に示したプロセス実行部１０１は、プロセス群１５０に含まれる複数のプロセスをＣＰＵ１９１によりＯＳ１２０上で実行する。プロセス実行部１０１で実行されるプロセスとしては、図３に示したように、通常のプロセスＡ〜Ｄ等のほか、設定／管理プロセス１５１がある。
【００４０】
図１に示したマッピング管理部１０２は、ＯＳ１２０のプロセス管理１２３の動作により、プロセス実行部１０１で実行されるプロセスごとに共有メモリ群１１０に含まれる共有メモリ内の記憶領域と仮想アドレスとのマッピング関係を管理するデータをメモリ１９２に記憶する。例えばプロセスＡについて、マッピング管理部１０２で記憶されるデータ（マッピング関係を管理するデータ）としては、図４に示したように、プロセスＡを管理するデータ２０２ａのポインタ２０３が指し示すプロセスＡの仮想空間を管理するデータ２０５の中に、共有メモリＸの領域を管理するデータ２０６ｘがある。具体的には、共有メモリＸの領域を管理するデータ２０６ｘの中に、共有メモリＸ内の先頭の記憶領域がマップされた仮想アドレスである先頭仮想アドレス２０７と、共有メモリＸのサイズ２０８と、共有メモリＸを管理するデータ２１０へのポインタ２０９がある。プロセスＢ〜Ｄ等、設定／管理プロセス１５１についても、マッピング管理部１０２で記憶されるデータとしては、同様のデータがある。
【００４１】
図５は、設定／管理プロセス１５１の動作を示すフローチャートである。
【００４２】
ステップＳ１０１において、図１に示した記憶領域指定部１０４は、共有メモリ内の記憶領域を指定する入力を入力装置１９３により受け付ける。具体的には、まず、利用者が、ＬＣＤ９０１等の出力装置１９４により表示されたターミナルウィンドウに、書き込みの捕捉対象の共有メモリを指定するコマンドをキーボード９０２により入力する。このとき、コマンドのパラメータとして、利用者が書き込みを捕捉したい共有メモリＸのＩＤと、その先頭からのオフセットと、データの長さが指定される。そして、記憶領域指定部１０４が、入力されたコマンドを解析して、その解析結果に基づき、プロセス実行部１０１に設定／管理プロセス１５１を実行させる。
【００４３】
ステップＳ１０２において、プロセス実行部１０１で実行される設定／管理プロセス１５１は、記憶領域指定部１０４で指定された共有メモリ内の記憶領域を自己の仮想空間内の仮想アドレスにマップする。具体的には、設定／管理プロセス１５１の共有メモリ指定処理１５２が、ステップＳ１０１でＩＤが入力された共有メモリＸを設定／管理プロセス１５１の仮想空間にマップする。
【００４４】
ステップＳ１０３において、プロセス実行部１０１で実行される設定／管理プロセス１５１は、ステップＳ１０２でマップした仮想アドレスを、図１に示したプロセス検索部１０５に通知する。具体的には、設定／管理プロセス１５１の共有メモリ指定処理１５２が、ステップＳ１０２でマップした共有メモリＸの先頭仮想アドレスと、ステップＳ１０１で入力された共有メモリＸの先頭からのオフセットとデータの長さをＯＳ１２０の捕捉設定処理１３０に通知する。
【００４５】
ステップＳ１０３の実行後、図１に示したプロセス検索部１０５は、ＯＳ１２０の捕捉設定処理１３０の動作（後述するステップＳ２０１〜Ｓ２０５）により、マッピング管理部１０２で記憶されたデータを検索して、プロセス実行部１０１で実行された設定／管理プロセス１５１から通知された仮想アドレスがマップされている共有メモリ内の記憶領域を特定する。そして、プロセス検索部１０５は、捕捉設定処理１３０の動作（後述するステップＳ２０６）により、特定した記憶領域を仮想アドレスにマップしているプロセス及び当該仮想アドレスを抽出する。
【００４６】
図１に示したアドレス指定部１０６は、捕捉設定処理１３０の動作（後述するステップＳ２０７）により、プロセス検索部１０５で抽出されたプロセス及び仮想アドレスを共有メモリ監視部１０３に対して指定する。
【００４７】
図１に示した共有メモリ監視部１０３は、ＣＰＵ１９１がもつ、非特許文献１に示されているＣＰＵと同様の機能を利用して、プロセス及び仮想アドレスが指定されると、マッピング管理部１０２で記憶されたデータを参照して当該プロセスが当該仮想アドレスにマップしている記憶領域を特定し、特定した記憶領域に対するアクセス（書き込みだけでなく、読み出しを含めてもよい）を監視するトレース処理を開始する。具体的には、共有メモリ監視部１０３は、プロセス及び仮想アドレスが指定されると、指定されたプロセスの実行中に、指定された仮想アドレスを捕捉対象としてＣＰＵ１９１のデバッグレジスタに格納する。ＣＰＵ１９１は、前述した機能により、デバッグレジスタ内の仮想アドレスへのアクセスを検知すると、トラップを発生させる。これにより、ＯＳ１２０の書き込みトラップ処理１２６が呼び出され、書き込みトラップ処理１２６が、実行中のプロセスのＩＤや書き込みを行った命令のアドレス等をデバッグ用のログデータとしてメモリ１９２に記憶する。
【００４８】
なお、実行中のプロセスが他のプロセスに切り替わる際には、ＣＰＵ１９１のデバッグレジスタの内容が、切り替え前のプロセスのＣＰＵレジスタ保存データ２０４としてメモリ１９２に記憶される。そして、そのプロセスが再び実行される際には、ＣＰＵレジスタ保存データ２０４の内容がデバッグレジスタに戻される。
【００４９】
図６は、捕捉設定処理１３０の動作を示すフローチャートである。
【００５０】
ステップＳ２０１において、捕捉設定処理１３０のプロセス検索処理１３１は、ステップＳ１０３で設定／管理プロセス１５１から通知された、共有メモリＸの先頭仮想アドレスと共有メモリＸの先頭からのオフセットとデータの長さを受け取る。そして、プロセス検索処理１３１は、受け取った共有メモリＸの先頭からのオフセットとデータの長さを、それぞれメモリ１９２に記憶した共有メモリ内オフセット２１１とデータの長さ２１２に設定する。
【００５１】
ステップＳ２０２において、プロセス検索処理１３１は、プロセス管理１２３がメモリ１９２に記憶したプロセスを管理するデータ２０１から、設定／管理プロセス１５１を管理するデータ２０２’を取り出す。
【００５２】
ステップＳ２０３において、プロセス検索処理１３１は、ステップＳ２０２で取り出した設定／管理プロセス１５１を管理するデータ２０２’に含まれるポインタ２０３が指し示す設定／管理プロセス１５１の仮想空間を管理するデータ２０５を取得する。
【００５３】
ステップＳ２０４において、プロセス検索処理１３１は、ステップＳ２０３で取得した設定／管理プロセス１５１の仮想空間を管理するデータ２０５に含まれる各領域を管理するデータ２０６の先頭仮想アドレス２０７を調べ、ステップＳ２０１で受け取った共有メモリＸの先頭仮想アドレスと一致するものを探し出す。ここでは、プロセス検索処理１３１は、共有メモリＸの領域を管理するデータ２０６ｘを抽出する。
【００５４】
ステップＳ２０５において、プロセス検索処理１３１は、ステップＳ２０４で抽出した共有メモリＸの領域を管理するデータ２０６ｘに含まれるポインタ２０９が指し示す、仮想空間にマップしているオブジェクト（即ち、共有メモリＸ）を管理するデータ２１０を取得する。そして、プロセス検索処理１３１は、取得した共有メモリＸを管理するデータ２１０へのポインタを、メモリ１９２に記憶したターゲット識別ポインタ２１３に設定する。
【００５５】
ステップＳ２０６において、プロセス検索処理１３１は、各プロセスを管理するデータ２０２ａ，２０２ｂ，・・・に対して、そこから辿ることができる仮想空間内の各領域を管理するデータ２０６からオブジェクトを管理するデータ２１０を指し示すポインタ２０９が、ターゲット識別ポインタ２１３に一致するものを探し出す。探し出したプロセスを管理するデータ２０２全てが、書き込み捕捉対象の共有メモリＸをマップしているプロセスを管理するデータ２０２である。ここでは、プロセス検索処理１３１は、プロセスＡを管理するデータ２０２ａのほか、プロセスＤを管理するデータ２０２を抽出する。
【００５６】
ステップＳ２０７において、捕捉設定処理１３０のアドレス指定処理１３２は、ステップＳ２０６でプロセスを管理するデータ２０２が抽出されたプロセスＡとプロセスＤに対して、書き込み捕捉設定を行う。具体的には、まず、アドレス指定処理１３２は、プロセスＡの仮想空間内を管理するデータ２０５に含まれる共有メモリＸの領域を管理するデータ２０６ｘから先頭仮想アドレス２０７を取り出す。次に、アドレス指定処理１３２は、取り出した先頭仮想アドレス２０７に、ステップＳ２０１でメモリ１９２に記憶された共有メモリ内オフセットを加算することで、捕捉対象となる先頭の仮想アドレスを求める。そして、アドレス指定処理１３２は、求めた仮想アドレスと、ステップＳ２０１でメモリ１９２に記憶されたデータの長さ２１２を、プロセスＡが実行中であればＣＰＵ１９１のデバッグレジスタに書き込む。プロセスＡが実行中でなければプロセスＡを管理するデータ２０２ａのＣＰＵレジスタ保存データ２０４にデバッグレジスタ用のデータとして書き込む。アドレス指定処理１３２は、プロセスＤについても同様の動作を行う。
【００５７】
図１に示したアドレス指定部１０６は、プロセス実行部１０１で実行されるプロセスが記憶領域指定部１０４で指定された記憶領域を新たに仮想アドレスにマップした場合にも、捕捉設定処理１３０の動作（後述するステップＳ３０１〜Ｓ３０３）により、当該プロセス及び当該仮想アドレスを共有メモリ監視部１０３に対して指定する。
【００５８】
図７は、トレース処理中にプロセスが共有メモリを新たにマップしたときの捕捉設定処理１３０の動作を示すフローチャートである。
【００５９】
プロセスが共有メモリＸをマップすると、ステップＳ３０１において、共有メモリ管理１２２により捕捉設定処理１３０のマップ検出処理１３３が呼び出される。
【００６０】
ステップＳ３０２において、マップ検出処理１３３は、共有メモリＸを新たにマップしたプロセスを管理するデータ２０２に含まれるポインタ２０３が指し示すプロセスの仮想空間を管理するデータ２０５を取得する。そして、マップ検出処理１３３は、取得したプロセスの仮想空間を管理するデータ２０５に含まれる各領域を管理するデータ２０６のポインタ２０９を調べ、ターゲット識別ポインタ２１３と同一のオブジェクトを管理するデータ２１０を指し示しているものを探し出す。該当するものがない場合は何も行わない。該当するものがある場合、ステップＳ３０３に進む。
【００６１】
ステップＳ３０３において、捕捉設定処理１３０のアドレス指定処理１３２は、共有メモリＸを新たにマップしたプロセスに対して、ステップＳ２０７と同様に、書き込み捕捉設定を行う。
【００６２】
以上説明したように、本実施の形態に係る共有メモリデバッグ装置１００は、共有メモリへの書き込みをトレースする際に、ユーザから書き込み対象の共有メモリを特定するＩＤと、書き込みを検出したい共有メモリの先頭からのオフセットアドレスとデータ長を設定／管理プロセス１５１に対して指定する入力を受け付ける。そして、共有メモリデバッグ装置１００で実行される設定／管理プロセス１５１は、指定された共有メモリを自プロセスの仮想空間にマップし、マップした仮想アドレスと共有メモリの先頭からのオフセットアドレスとデータ長を、カーネル内の捕捉設定処理１３０に渡す。捕捉設定処理１３０は、設定／管理プロセス１５１がマップした共有メモリと同一の共有メモリをマップしているプロセスをＯＳ１２０のプロセスの仮想空間を管理するデータ２０５から検索し、マップしている仮想アドレスを求め、データ書き込み捕捉対象の仮想アドレスを計算し、データ書き込み捕捉の設定を行う。これにより、本実施の形態では、非特許文献１のように仮想アドレスが指定されるとメモリのアクセスを捕捉するＣＰＵ１９１を用いて、人手を介さず、アプリケーションプログラムにも手を加えることなく、共有メモリの特定部分へのデータ書き込みを検出することが可能となる。
【００６３】
また、本実施の形態において、捕捉設定処理１３０は、プロセスが共有メモリをマップしたとき、その共有メモリがトレース対象の共有メモリであるかを調べ、トレース対象の共有メモリである場合、マップした仮想アドレスを求め、データ書き込み捕捉対象の仮想アドレスを計算し、データ書き込み捕捉の設定を行う。これにより、本実施の形態では、新たに共有メモリをマップしたプロセスに対する捕捉設定を行うことができる。
【００６４】
なお、本実施の形態では、捕捉対象を先頭のアドレス（オフセットや仮想アドレス）とデータの長さとの組み合わせにより指定しているが、捕捉対象を先頭のアドレスと最後尾のアドレス（オフセットや仮想アドレス）との組み合わせにより指定しても構わない。即ち、捕捉対象の範囲をデータの長さで特定する代わりに、先頭と最後尾のアドレスで特定するようにしても構わない。
【００６５】
また、本実施の形態では、各プロセスを管理するデータ２０２と各プロセスの仮想空間を管理するデータ２０５との対応付け（リンク）を、各プロセスを管理するデータ２０２に含まれるポインタ２０３のみで示しているが、各プロセスの仮想空間を管理するデータ２０５に逆向きのポインタを含めてもよい。即ち、各プロセスの仮想空間を管理するデータ２０５が各プロセスを管理するデータ２０２を指し示すポインタを含んでいても構わない。
【００６６】
また、本実施の形態では、各プロセスの仮想空間内の各領域を管理するデータ２０６とオブジェクトを管理するデータ２１０との対応付け（リンク）を、各プロセスの仮想空間内の各領域を管理するデータ２０６に含まれるポインタ２０９のみで示しているが、オブジェクトを管理するデータ２１０に逆向きのポインタを含めてもよい。即ち、オブジェクトを管理するデータ２１０が各プロセスの仮想空間内の各領域を管理するデータ２０６を指し示すポインタを含んでいても構わない。この場合、ステップＳ２０６の処理が効率化できる。
【００６７】
また、本実施の形態では、利用者から捕捉対象の共有メモリのＩＤと先頭からのオフセットとデータの長さが指定されると、設定／管理プロセス１５１を実行して、捕捉対象の共有メモリの先頭仮想アドレスと先頭からのオフセットとデータの長さを捕捉設定処理１３０に通知しているが、利用者から指定された情報をそのまま捕捉設定処理１３０に通知しても構わない。即ち、捕捉対象の共有メモリを指定する情報として、設定／管理プロセス１５１の仮想空間内で、その共有メモリの先頭がマップされた仮想アドレスを通知する代わりに、共有メモリのＩＤを直接通知しても構わない。この場合、例えば、プロセス管理１２３は、共有メモリを管理するデータ２１０として、共有メモリのＩＤを記憶しておく。ステップＳ２０１については、本実施の形態と同様であるが、その後のステップＳ２０２〜Ｓ２０５は不要となる。ステップＳ２０６において、捕捉設定処理１３０のプロセス検索処理１３１は、ステップＳ２０１で捕捉対象として通知された共有メモリのＩＤへのポインタをターゲット識別ポインタ２１３に設定する。ステップＳ２０６及びＳ２０７については、本実施の形態と同様である。
【符号の説明】
【００６８】
１００  共有メモリデバッグ装置、１０１  プロセス実行部、１０２  マッピング管理部、１０３  共有メモリ監視部、１０４  記憶領域指定部、１０５  プロセス検索部、１０６  アドレス指定部、１１０  共有メモリ群、１２０  ＯＳ、１２１  メモリ管理、１２２  共有メモリ管理、１２３  プロセス管理、１２４  Ｉ／Ｏ管理、１２５  ネットワーク管理、１２６  書き込みトラップ処理、１３０  捕捉設定処理、１３１  プロセス検索処理、１３２  アドレス指定処理、１３３  マップ検出処理、１５０  プロセス群、１５１  設定／管理プロセス、１５２  共有メモリ指定処理、１９１  ＣＰＵ、１９２  メモリ、１９３  入力装置、１９４  出力装置、２０１，２０２，２０２’，２０２ａ，２０２ｂ，２０５，２０６，２０６ｘ，２０６ｙ，２１０  データ、２０３，２０９  ポインタ、２０４  ＣＰＵレジスタ保存データ、２０７  先頭仮想アドレス、２０８  サイズ、２１１  共有メモリ内オフセット、２１２  データの長さ、２１３  ターゲット識別ポインタ、９０１  ＬＣＤ、９０２  キーボード、９０３  マウス、９０４  ＦＤＤ、９０５  ＣＤＤ、９０６  プリンタ、９１２  バス、９１３  ＲＯＭ、９１５  通信ボード、９２０  ＨＤＤ、９２２  ウィンドウシステム、９２３  プログラム群、９２４  ファイル群。
【図１】
0005550581.tif 000002
【図２】
0005550581.tif 000003
【図３】
0005550581.tif 000004
【図４】
0005550581.tif 000005
【図５】
0005550581.tif 000006
【図６】
0005550581.tif 000007
【図７】
0005550581.tif 000008