JP5550581B2 - 共有メモリデバッグ装置及びプログラム - Google Patents

共有メモリデバッグ装置及びプログラム Download PDF

Info

Publication number
JP5550581B2
JP5550581B2 JP2011032498A JP2011032498A JP5550581B2 JP 5550581 B2 JP5550581 B2 JP 5550581B2 JP 2011032498 A JP2011032498 A JP 2011032498A JP 2011032498 A JP2011032498 A JP 2011032498A JP 5550581 B2 JP5550581 B2 JP 5550581B2
Authority
JP
Japan
Prior art keywords
shared memory
virtual address
unit
storage area
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2011032498A
Other languages
English (en)
Other versions
JP2012173804A (ja
Inventor
孝之 伊藤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP2011032498A priority Critical patent/JP5550581B2/ja
Publication of JP2012173804A publication Critical patent/JP2012173804A/ja
Application granted granted Critical
Publication of JP5550581B2 publication Critical patent/JP5550581B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Description

本発明は、共有メモリデバッグ装置及びプログラムに関するものである。
複数のプロセス(OS(オペレーティングシステム)上でメモリ上にロードされ、実行されるプログラムであり、OSによってはタスクとも呼ばれる)からアクセス可能なメモリ上に誤ったデータが書き込まれ、それを参照した別のプロセスが誤動作をした場合、原因となる誤ったデータを書き込んだプロセスと命令箇所を特定するのは困難である。
そのため、従来のデータ書き込みを検出する方法では、特定のメモリアドレスへの書き込みを捕捉して、アクセスしたプロセスの情報を記録する、あるいは、アクセスしたプロセスを停止する等を行っていた(例えば、特許文献1、特許文献2参照)。
また、仮想アドレスが指定されると、そこへアクセスされたときにトラップを発生させる機能を備えたCPU(Central・Processing・Unit)も利用されている(例えば、非特許文献1参照)。このCPUを用いたデバッグ機能もある(例えば、非特許文献2、非特許文献3参照)。
マルチプロセスをサポートしたOSには、共有メモリと呼ばれる複数のプロセスからアクセス可能で、プロセス間でデータを共有するための機構がある。この機構を備えたコンピュータでは、プロセスの実行時に、プロセスから共有したいメモリのID(識別子)を指定して、プロセス内の任意の仮想アドレスにマップ/アンマップすることができる(例えば、非特許文献4、非特許文献5参照)。
特開平6−35747号公報 特開2001−331376号公報
「Intel(R)64 and IA−32 Architectures Software Developer’s Manual」、「Volume 3A: System Programming Guide, Part 1」、Intel Corporation、2010年3月、「Chapter 16 Debugging, Profiling Branches and Time−Stamp Counter」、インターネット<URL:http://www.intel.com/Assets/ja_JP/PDF/manual/253668.pdf> 「Debugging with GDB」、Free Software Foundation, Inc.、「5.1.2 Setting Watchpoints」、インターネット<URL:http://sourceware.org/gdb/current/onlinedocs/gdb/Set−Watchpoints.html#Set−Watchpoints> 「GDB Internals」、Free Software Foundation, Inc.、「3.8.2 x86 Watchpoints」、インターネット<URL:http://sourceware.org/gdb/current/onlinedocs/gdbint/Algorithms.html#Algorithms> W.リチャード・スティーブンス著、「UNIXネットワークプログラミング Vol.2 IPC:プロセス間通信」、ピアソンエデュケーション、2000年8月、「第4部 共有メモリ」、p.291〜330 「The Single UNIX(R) Specification」、Version 2、The Open Group、「shmat」、インターネット<URL:http://www.opengroup.org/onlinepubs/007908799/xsh/shmat.html>
非特許文献1のように、仮想アドレスが指定されると、その仮想アドレスへのデータ書き込みを検出するCPUを、共有メモリへのデータ書き込みを検出するために使用する場合、以下の課題があった。
(1)OS上では複数のプロセスが動作しており、それらの中には書き込み検出対象となる共有メモリを仮想空間にマップしているものもあれば、マップしていない(利用していない)ものもある。そのため、仮想空間にマップしているプロセスを選び出して、人手でデータ書き込み検出の設定をCPUに行わなければならない。あるいは、それがアプリケーションプログラムのプロセスであれば、アプリケーションプログラム側でデータ書き込み検出の設定をCPUに行わなければならない。
(2)複数のプロセスが同じ共有メモリをマップする場合でも、マップ先仮想アドレスはプロセスごとに異なるアドレスになる。そのため、データ書き込み検出対象の仮想アドレスがどこになるかを予め特定することができず、共有メモリのマップ後にマップされたアドレスを基に人手でデータ書き込み検出の設定をCPUにしなければならない。
(3)プロセスがデータ書き込み検出対象の共有メモリを新たにマップした場合は、その共有メモリへの書き込み検出ができない。
本発明は、例えば、非特許文献1のように仮想アドレスが指定されるとメモリのアクセスを捕捉するCPUを用いて、人手を介さず、アプリケーションプログラムにも手を加えることなく、共有メモリの特定部分へのデータ書き込みを検出することを目的とする。
本発明の一の態様に係る共有メモリデバッグ装置は、
複数の記憶領域からなる共有メモリと、
それぞれ独立した仮想アドレス空間をもち前記共有メモリ内の記憶領域を仮想アドレス空間内の仮想アドレスにマップする複数のプロセスを、処理装置により実行するプロセス実行部と、
前記プロセス実行部で実行されるプロセスごとに前記共有メモリ内の記憶領域と仮想アドレスとのマッピング関係を管理するデータを記憶装置に記憶するマッピング管理部と、
プロセス及び仮想アドレスが指定されると、前記マッピング管理部で記憶されたデータを参照して当該プロセスが当該仮想アドレスにマップしている記憶領域を特定し、特定した記憶領域に対するアクセスを前記処理装置により監視する共有メモリ監視部と、
記憶領域を指定する入力を入力装置により受け付ける記憶領域指定部と、
前記マッピング管理部で記憶されたデータを検索して、前記記憶領域指定部で指定された記憶領域を仮想アドレスにマップしているプロセス及び当該仮想アドレスを前記処理装置により抽出するプロセス検索部と、
前記プロセス検索部で抽出されたプロセス及び仮想アドレスを前記共有メモリ監視部に対して指定するアドレス指定部とを備える。
本発明の一の態様によれば、非特許文献1のように仮想アドレスが指定されるとメモリのアクセスを捕捉するCPUを用いて、人手を介さず、アプリケーションプログラムにも手を加えることなく、共有メモリの特定部分へのデータ書き込みを検出することが可能となる。
実施の形態1に係る共有メモリデバッグ装置の構成を示すブロック図。 実施の形態1に係る共有メモリデバッグ装置のハードウェア構成の一例を示す図。 実施の形態1に係るOSの構成及びOS上で実行されるプロセス群の例を示すブロック図。 実施の形態1に係るOSのプロセス管理及びプロセス検索処理で用いるデータの例を示す図。 実施の形態1に係る設定/管理プロセスの動作を示すフローチャート。 実施の形態1に係る捕捉設定処理の動作を示すフローチャート。 実施の形態1に係る捕捉設定処理の動作を示すフローチャート。
以下、本発明の実施の形態について、図を用いて説明する。
実施の形態1.
図1は、本実施の形態に係る共有メモリデバッグ装置100の構成を示すブロック図である。
図1において、共有メモリデバッグ装置100は、プロセス実行部101、マッピング管理部102、共有メモリ監視部103、記憶領域指定部104、プロセス検索部105、アドレス指定部106を備える。共有メモリデバッグ装置100の各部の動作については後述する。
また、共有メモリデバッグ装置100は、CPU191、メモリ192、入力装置193、出力装置194等のハードウェアを備える。ハードウェアは共有メモリデバッグ装置100の各部によって利用される。CPU191は、処理装置の一例であり、共有メモリデバッグ装置100の各部でデータや情報の演算、加工、読み取り、書き込み等を行うために利用される。CPU191は、非特許文献1に示されているCPUと同様に、仮想アドレスが指定されるとメモリ192内の該当する記憶領域へのアクセスを捕捉する機能をもっている。メモリ192は、記憶装置の一例であり、共有メモリデバッグ装置100の各部でデータや情報を記憶するために利用される。メモリ192上では、1つの共有メモリ又は複数の共有メモリからなる共有メモリ群110が任意に設定(確保)される。入力装置193は、共有メモリデバッグ装置100の各部でデータや情報を入力するために、出力装置194は、共有メモリデバッグ装置100の各部でデータや情報を出力するために利用される。
図2は、共有メモリデバッグ装置100のハードウェア構成の一例を示す図である。
図2において、共有メモリデバッグ装置100は、コンピュータであり、LCD901(Liquid・Crystal・Display)、キーボード902(K/B)、マウス903、FDD904(Flexible・Disk・Drive)、CDD905(Compact・Disc・Drive)、プリンタ906といったハードウェアデバイスを備えている。これらのハードウェアデバイスはケーブルや信号線で接続されている。LCD901の代わりに、CRT(Cathode・Ray・Tube)、あるいは、その他の表示装置が用いられてもよい。マウス903の代わりに、タッチパネル、タッチパッド、トラックボール、ペンタブレット、あるいは、その他のポインティングデバイスが用いられてもよい。
共有メモリデバッグ装置100は、前述したように、CPU191を備えている。CPU191は、バス912を介してROM913(Read・Only・Memory)、メモリ192、通信ボード915、LCD901、キーボード902、マウス903、FDD904、CDD905、プリンタ906、HDD920(Hard・Disk・Drive)と接続され、これらのハードウェアデバイスを制御する。HDD920の代わりに、フラッシュメモリ、光ディスク装置、メモリカードリーダライタ、あるいは、その他の記録媒体が用いられてもよい。
メモリ192は、例えばRAM(Random・Access・Memory)で構成される。RAM、ROM913、FDD904、CDD905、HDD920は、記憶装置の一例である。通信ボード915、キーボード902、マウス903、FDD904、CDD905は、入力装置193の一例である。また、通信ボード915、LCD901、プリンタ906は、出力装置194の一例である。
通信ボード915は、LAN(Local・Area・Network)等に接続されている。通信ボード915は、LANに限らず、IP−VPN(Internet・Protocol・Virtual・Private・Network)、広域LAN、ATM(Asynchronous・Transfer・Mode)ネットワークといったWAN(Wide・Area・Network)、あるいは、インターネットに接続されていても構わない。LAN、WAN、インターネットは、ネットワークの一例である。
HDD920には、OS120、ウィンドウシステム922、プログラム群923、ファイル群924が記憶されている。プログラム群923のプログラムは、CPU191、OS120、ウィンドウシステム922により実行される。OS120、ウィンドウシステム922もプログラムであり、CPU191により実行される。OS120、ウィンドウシステム922、プログラム群923には、本実施の形態の説明において「〜部」として説明する機能を実行するプログラムが含まれている。プログラムは、CPU191により読み出され実行される。ファイル群924には、本実施の形態の説明において、「〜データ」、「〜情報」、「〜ID(識別子)」、「〜フラグ」、「〜結果」として説明するデータや情報や信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」や「〜テーブル」の各項目として含まれている。「〜ファイル」や「〜データベース」や「〜テーブル」は、HDD920等の記録媒体に記憶される。HDD920等の記録媒体に記憶されたデータや情報や信号値や変数値やパラメータは、読み書き回路を介してCPU191によりメモリ192に読み出され、抽出、検索、参照、比較、演算、計算、制御、出力、印刷、表示といったCPU191の処理(動作)に用いられる。抽出、検索、参照、比較、演算、計算、制御、出力、印刷、表示といったCPU191の処理中、データや情報や信号値や変数値やパラメータは、メモリ192に一時的に記憶される。
本実施の形態の説明において用いるブロック図やフローチャートの矢印の部分は主としてデータや信号の入出力を示す。データや信号は、メモリ192、FDD904のフレキシブルディスク(FD)、CDD905のコンパクトディスク(CD)、HDD920の磁気ディスク、光ディスク、DVD(Digital・Versatile・Disc)、あるいは、その他の記録媒体に記録される。また、データや信号は、バス912、信号線、ケーブル、あるいは、その他の伝送媒体により伝送される。
本実施の形態の説明において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜工程」、「〜手順」、「〜処理」であってもよい。即ち、「〜部」として説明するものは、素子、デバイス、基板、配線といったハードウェアのみで実現されていても構わないし、ROM913に記憶されたファームウェアとハードウェアとの組み合わせで実現されていても構わない。あるいは、「〜部」として説明するものは、ソフトウェアとハードウェアとの組み合わせ、あるいは、ソフトウェアとファームウェアとハードウェアとの組み合わせで実現されていても構わない。ファームウェアとソフトウェアは、プログラムとして、フレキシブルディスク、コンパクトディスク、磁気ディスク、光ディスク、DVD等の記録媒体に記憶される。プログラムはCPU191により読み出され、CPU191により実行される。即ち、プログラムは、本実施の形態の説明で述べる「〜部」としてコンピュータを機能させるものである。あるいは、プログラムは、本実施の形態の説明で述べる「〜部」の手順や方法をコンピュータに実行させるものである。
図3は、OS120の構成及びOS120上で実行されるプロセス群150(複数のプロセス)の例を示すブロック図である。
図3において、プロセス群150に含まれるプロセスA〜Dは、OS120上で実行中のプログラムである。プロセスA〜Dは、それぞれ独立した仮想空間(仮想アドレス空間)をもつ。そして、プロセスA〜Dは、メモリ192上に展開(記憶)されているか、あるいは、メモリ192上に展開可能な(例えばHDD920等の記録媒体に記憶されていて必要時にメモリ192に読み出される)オブジェクトを仮想空間にマップする。オブジェクトとしては、プロセスが実行する命令を格納しているファイル、プロセスが利用するデータを格納しているファイル等のほか、共有メモリ群110に含まれる共有メモリがある。以下では、共有メモリ群110に含まれる共有メモリの一例として、2つの共有メモリX,Yがメモリ192上に設定されているものとする。共有メモリX,Yは、それぞれ複数の記憶領域からなる。プロセス群150に含まれる少なくとも一部のプロセスは、共有メモリX,Yのいずれか又は両方を仮想空間にマップする。
本例では、プロセスAとプロセスDは同じ共有メモリXをそれぞれのプロセスの仮想空間内にマップしている。つまり、プロセスAとプロセスDは共有メモリX内の各記憶領域を、それぞれの仮想空間内の各仮想アドレスにマップしている。このとき、プロセスAとプロセスDの仮想空間はそれぞれ独立して設定されているため、共有メモリX内の同じ記憶領域にマップされている仮想アドレスはプロセスAとプロセスDとの間で同じであるとは限らない。また、プロセスBはプロセスA、プロセスDとは異なる共有メモリYをマップしている。つまり、プロセスBは共有メモリY内の各記憶領域を、自己の仮想空間内の各仮想アドレスにマップしている。プロセスCは共有メモリをマップしていない。
設定/管理プロセス151は、利用者が書き込み捕捉(検出)対象の仮想アドレスとデータ長を指定するために用いるプログラムであり、通常のプロセスA〜Dにはない共有メモリ指定処理152を含む。設定/管理プロセス151も、プロセス群150に含まれるプロセスの1つであり、プロセスA〜Dと同様に、独自の仮想空間をもっている。そして、共有メモリ群110に含まれる共有メモリを仮想空間にマップすることができる。
本例では、利用者が書き込み捕捉対象として共有メモリX内の記憶領域を指定した場合を想定している。そのため、設定/管理プロセス151は、共有メモリ指定処理152の動作により共有メモリXを仮想空間内にマップしている。つまり、設定/管理プロセス151は共有メモリX内の各記憶領域を、自己の仮想空間内の各仮想アドレスにマップしている。共有メモリ指定処理152については後述する。
OS120は、一般的なOSと同様に、メモリ管理121、共有メモリ管理122、プロセス管理123、I/O管理124(インプット/アウトプット管理)、ネットワーク管理125等の各処理をカーネル内に含む。また、OS120は、捕捉対象の仮想アドレスにCPU191がアクセスしたときに発生するトラップ(割り込み)により呼び出される書き込みトラップ処理126をカーネル内に含む。さらに、OS120は、捕捉対象のプロセス実行時にCPU191に対して書き込み捕捉設定を行う捕捉設定処理130をカーネル内に含む。捕捉設定処理130は、プロセス検索処理131、アドレス指定処理132、マップ検出処理133からなる。これらの処理については後述する。
図4は、OS120のプロセス管理123及びプロセス検索処理131で用いるデータの例を示す図である。
図4において、プロセスを管理するデータ201は、プロセス群150に含まれる個々のプロセスを管理するデータ202の集合である。個々のプロセスを管理するデータ202としては、プロセスAを管理するデータ202a、プロセスBを管理するデータ202b等のほか、設定/管理プロセス151を管理するデータ202’がある。プロセス管理123は、プロセスが起動されると、そのプロセスを管理するデータ202を生成し、メモリ192に記憶する。その後、プロセス管理123は、必要に応じて、そのプロセスを管理するデータ202を更新する。また、プロセス管理123は、プロセスが終了等すると、そのプロセスを管理するデータ202をメモリ192から削除する。
1つのプロセスを管理するデータ202には、そのプロセスの仮想空間を管理するデータ205へのポインタ203が含まれる。また、CPU191により実行されていたプロセスが他のプロセスに切り替わるときは、プロセス実行時のCPU191のレジスタの内容が、個々のプロセスを管理するデータ202の中にCPUレジスタ保存データ204として保持される。プロセス管理123は、そのプロセスが再びCPU191により実行される際に、CPUレジスタ保存データ204の内容をCPU191のレジスタに反映させる。
プロセスの仮想空間は、命令を保持する領域、データを保持する領域、スタックを保持する領域、共有メモリの領域等、複数の領域からなる。複数の共有メモリをマップしている場合は、共有メモリごとに領域が確保される。プロセスの仮想空間を管理するデータ205は、仮想空間に含まれる個々の領域を管理するデータ206の集合である。個々の領域を管理するデータ206としては、例えば共有メモリXがマップされているのであれば、共有メモリXの領域を管理するデータ206xがあり、共有メモリYがマップされているのであれば、共有メモリYの領域を管理するデータ206yがある。プロセス管理123は、プロセスが仮想空間内の領域にオブジェクトをマップすると、その領域を管理するデータ206を生成し、メモリ192に記憶する。このとき、プロセス管理123は、その領域を管理するデータ206に対するポインタ203を、該当するプロセスを管理するデータ202に設定する。
仮想空間内の1つの領域を管理するデータ206には、その領域の先頭仮想アドレス207、その領域のサイズ208(長さ)、その領域にマップしているオブジェクトを管理するデータ210へのポインタ209が含まれる。異なるプロセスが同一の共有メモリをマップしている場合、それぞれのプロセスの仮想空間内の当該共有メモリの領域を管理するデータ206からは、同一のオブジェクト(即ち、共有メモリ)を管理するデータ210がポイントされることになる(ポインタ209のポイント先が同一になる)。
仮想空間にマップしているオブジェクトを管理するデータ210は、オブジェクトを一意に特定するデータであり、このようなデータとしては、オブジェクトのIDやメモリ192内でのオブジェクトの位置(物理アドレス)等を使用することができる。プロセス管理123は、オブジェクトを管理するデータ210をメモリ192に記憶しておき、そのオブジェクトをプロセスがマップすると、そのオブジェクトを管理するデータ210に対するポインタ209を、そのプロセスの仮想空間内の該当する領域を管理するデータ206に設定する。
共有メモリ内オフセット211、データの長さ212、ターゲット識別ポインタ213は、順番に、書き込み検出対象の共有メモリ内のオフセット、当該オフセットからの書き込み検出対象とする範囲、その共有メモリを管理するデータ210へのポインタである。プロセス検索処理131は、後述する動作により、これらのデータを作成し、メモリ192に記憶する。
以下、共有メモリデバッグ装置100の動作(本実施の形態に係る共有メモリデバッグ方法、本実施の形態に係るプログラムの処理手順)について説明する。
図1に示したプロセス実行部101は、プロセス群150に含まれる複数のプロセスをCPU191によりOS120上で実行する。プロセス実行部101で実行されるプロセスとしては、図3に示したように、通常のプロセスA〜D等のほか、設定/管理プロセス151がある。
図1に示したマッピング管理部102は、OS120のプロセス管理123の動作により、プロセス実行部101で実行されるプロセスごとに共有メモリ群110に含まれる共有メモリ内の記憶領域と仮想アドレスとのマッピング関係を管理するデータをメモリ192に記憶する。例えばプロセスAについて、マッピング管理部102で記憶されるデータ(マッピング関係を管理するデータ)としては、図4に示したように、プロセスAを管理するデータ202aのポインタ203が指し示すプロセスAの仮想空間を管理するデータ205の中に、共有メモリXの領域を管理するデータ206xがある。具体的には、共有メモリXの領域を管理するデータ206xの中に、共有メモリX内の先頭の記憶領域がマップされた仮想アドレスである先頭仮想アドレス207と、共有メモリXのサイズ208と、共有メモリXを管理するデータ210へのポインタ209がある。プロセスB〜D等、設定/管理プロセス151についても、マッピング管理部102で記憶されるデータとしては、同様のデータがある。
図5は、設定/管理プロセス151の動作を示すフローチャートである。
ステップS101において、図1に示した記憶領域指定部104は、共有メモリ内の記憶領域を指定する入力を入力装置193により受け付ける。具体的には、まず、利用者が、LCD901等の出力装置194により表示されたターミナルウィンドウに、書き込みの捕捉対象の共有メモリを指定するコマンドをキーボード902により入力する。このとき、コマンドのパラメータとして、利用者が書き込みを捕捉したい共有メモリXのIDと、その先頭からのオフセットと、データの長さが指定される。そして、記憶領域指定部104が、入力されたコマンドを解析して、その解析結果に基づき、プロセス実行部101に設定/管理プロセス151を実行させる。
ステップS102において、プロセス実行部101で実行される設定/管理プロセス151は、記憶領域指定部104で指定された共有メモリ内の記憶領域を自己の仮想空間内の仮想アドレスにマップする。具体的には、設定/管理プロセス151の共有メモリ指定処理152が、ステップS101でIDが入力された共有メモリXを設定/管理プロセス151の仮想空間にマップする。
ステップS103において、プロセス実行部101で実行される設定/管理プロセス151は、ステップS102でマップした仮想アドレスを、図1に示したプロセス検索部105に通知する。具体的には、設定/管理プロセス151の共有メモリ指定処理152が、ステップS102でマップした共有メモリXの先頭仮想アドレスと、ステップS101で入力された共有メモリXの先頭からのオフセットとデータの長さをOS120の捕捉設定処理130に通知する。
ステップS103の実行後、図1に示したプロセス検索部105は、OS120の捕捉設定処理130の動作(後述するステップS201〜S205)により、マッピング管理部102で記憶されたデータを検索して、プロセス実行部101で実行された設定/管理プロセス151から通知された仮想アドレスがマップされている共有メモリ内の記憶領域を特定する。そして、プロセス検索部105は、捕捉設定処理130の動作(後述するステップS206)により、特定した記憶領域を仮想アドレスにマップしているプロセス及び当該仮想アドレスを抽出する。
図1に示したアドレス指定部106は、捕捉設定処理130の動作(後述するステップS207)により、プロセス検索部105で抽出されたプロセス及び仮想アドレスを共有メモリ監視部103に対して指定する。
図1に示した共有メモリ監視部103は、CPU191がもつ、非特許文献1に示されているCPUと同様の機能を利用して、プロセス及び仮想アドレスが指定されると、マッピング管理部102で記憶されたデータを参照して当該プロセスが当該仮想アドレスにマップしている記憶領域を特定し、特定した記憶領域に対するアクセス(書き込みだけでなく、読み出しを含めてもよい)を監視するトレース処理を開始する。具体的には、共有メモリ監視部103は、プロセス及び仮想アドレスが指定されると、指定されたプロセスの実行中に、指定された仮想アドレスを捕捉対象としてCPU191のデバッグレジスタに格納する。CPU191は、前述した機能により、デバッグレジスタ内の仮想アドレスへのアクセスを検知すると、トラップを発生させる。これにより、OS120の書き込みトラップ処理126が呼び出され、書き込みトラップ処理126が、実行中のプロセスのIDや書き込みを行った命令のアドレス等をデバッグ用のログデータとしてメモリ192に記憶する。
なお、実行中のプロセスが他のプロセスに切り替わる際には、CPU191のデバッグレジスタの内容が、切り替え前のプロセスのCPUレジスタ保存データ204としてメモリ192に記憶される。そして、そのプロセスが再び実行される際には、CPUレジスタ保存データ204の内容がデバッグレジスタに戻される。
図6は、捕捉設定処理130の動作を示すフローチャートである。
ステップS201において、捕捉設定処理130のプロセス検索処理131は、ステップS103で設定/管理プロセス151から通知された、共有メモリXの先頭仮想アドレスと共有メモリXの先頭からのオフセットとデータの長さを受け取る。そして、プロセス検索処理131は、受け取った共有メモリXの先頭からのオフセットとデータの長さを、それぞれメモリ192に記憶した共有メモリ内オフセット211とデータの長さ212に設定する。
ステップS202において、プロセス検索処理131は、プロセス管理123がメモリ192に記憶したプロセスを管理するデータ201から、設定/管理プロセス151を管理するデータ202’を取り出す。
ステップS203において、プロセス検索処理131は、ステップS202で取り出した設定/管理プロセス151を管理するデータ202’に含まれるポインタ203が指し示す設定/管理プロセス151の仮想空間を管理するデータ205を取得する。
ステップS204において、プロセス検索処理131は、ステップS203で取得した設定/管理プロセス151の仮想空間を管理するデータ205に含まれる各領域を管理するデータ206の先頭仮想アドレス207を調べ、ステップS201で受け取った共有メモリXの先頭仮想アドレスと一致するものを探し出す。ここでは、プロセス検索処理131は、共有メモリXの領域を管理するデータ206xを抽出する。
ステップS205において、プロセス検索処理131は、ステップS204で抽出した共有メモリXの領域を管理するデータ206xに含まれるポインタ209が指し示す、仮想空間にマップしているオブジェクト(即ち、共有メモリX)を管理するデータ210を取得する。そして、プロセス検索処理131は、取得した共有メモリXを管理するデータ210へのポインタを、メモリ192に記憶したターゲット識別ポインタ213に設定する。
ステップS206において、プロセス検索処理131は、各プロセスを管理するデータ202a,202b,・・・に対して、そこから辿ることができる仮想空間内の各領域を管理するデータ206からオブジェクトを管理するデータ210を指し示すポインタ209が、ターゲット識別ポインタ213に一致するものを探し出す。探し出したプロセスを管理するデータ202全てが、書き込み捕捉対象の共有メモリXをマップしているプロセスを管理するデータ202である。ここでは、プロセス検索処理131は、プロセスAを管理するデータ202aのほか、プロセスDを管理するデータ202を抽出する。
ステップS207において、捕捉設定処理130のアドレス指定処理132は、ステップS206でプロセスを管理するデータ202が抽出されたプロセスAとプロセスDに対して、書き込み捕捉設定を行う。具体的には、まず、アドレス指定処理132は、プロセスAの仮想空間内を管理するデータ205に含まれる共有メモリXの領域を管理するデータ206xから先頭仮想アドレス207を取り出す。次に、アドレス指定処理132は、取り出した先頭仮想アドレス207に、ステップS201でメモリ192に記憶された共有メモリ内オフセットを加算することで、捕捉対象となる先頭の仮想アドレスを求める。そして、アドレス指定処理132は、求めた仮想アドレスと、ステップS201でメモリ192に記憶されたデータの長さ212を、プロセスAが実行中であればCPU191のデバッグレジスタに書き込む。プロセスAが実行中でなければプロセスAを管理するデータ202aのCPUレジスタ保存データ204にデバッグレジスタ用のデータとして書き込む。アドレス指定処理132は、プロセスDについても同様の動作を行う。
図1に示したアドレス指定部106は、プロセス実行部101で実行されるプロセスが記憶領域指定部104で指定された記憶領域を新たに仮想アドレスにマップした場合にも、捕捉設定処理130の動作(後述するステップS301〜S303)により、当該プロセス及び当該仮想アドレスを共有メモリ監視部103に対して指定する。
図7は、トレース処理中にプロセスが共有メモリを新たにマップしたときの捕捉設定処理130の動作を示すフローチャートである。
プロセスが共有メモリXをマップすると、ステップS301において、共有メモリ管理122により捕捉設定処理130のマップ検出処理133が呼び出される。
ステップS302において、マップ検出処理133は、共有メモリXを新たにマップしたプロセスを管理するデータ202に含まれるポインタ203が指し示すプロセスの仮想空間を管理するデータ205を取得する。そして、マップ検出処理133は、取得したプロセスの仮想空間を管理するデータ205に含まれる各領域を管理するデータ206のポインタ209を調べ、ターゲット識別ポインタ213と同一のオブジェクトを管理するデータ210を指し示しているものを探し出す。該当するものがない場合は何も行わない。該当するものがある場合、ステップS303に進む。
ステップS303において、捕捉設定処理130のアドレス指定処理132は、共有メモリXを新たにマップしたプロセスに対して、ステップS207と同様に、書き込み捕捉設定を行う。
以上説明したように、本実施の形態に係る共有メモリデバッグ装置100は、共有メモリへの書き込みをトレースする際に、ユーザから書き込み対象の共有メモリを特定するIDと、書き込みを検出したい共有メモリの先頭からのオフセットアドレスとデータ長を設定/管理プロセス151に対して指定する入力を受け付ける。そして、共有メモリデバッグ装置100で実行される設定/管理プロセス151は、指定された共有メモリを自プロセスの仮想空間にマップし、マップした仮想アドレスと共有メモリの先頭からのオフセットアドレスとデータ長を、カーネル内の捕捉設定処理130に渡す。捕捉設定処理130は、設定/管理プロセス151がマップした共有メモリと同一の共有メモリをマップしているプロセスをOS120のプロセスの仮想空間を管理するデータ205から検索し、マップしている仮想アドレスを求め、データ書き込み捕捉対象の仮想アドレスを計算し、データ書き込み捕捉の設定を行う。これにより、本実施の形態では、非特許文献1のように仮想アドレスが指定されるとメモリのアクセスを捕捉するCPU191を用いて、人手を介さず、アプリケーションプログラムにも手を加えることなく、共有メモリの特定部分へのデータ書き込みを検出することが可能となる。
また、本実施の形態において、捕捉設定処理130は、プロセスが共有メモリをマップしたとき、その共有メモリがトレース対象の共有メモリであるかを調べ、トレース対象の共有メモリである場合、マップした仮想アドレスを求め、データ書き込み捕捉対象の仮想アドレスを計算し、データ書き込み捕捉の設定を行う。これにより、本実施の形態では、新たに共有メモリをマップしたプロセスに対する捕捉設定を行うことができる。
なお、本実施の形態では、捕捉対象を先頭のアドレス(オフセットや仮想アドレス)とデータの長さとの組み合わせにより指定しているが、捕捉対象を先頭のアドレスと最後尾のアドレス(オフセットや仮想アドレス)との組み合わせにより指定しても構わない。即ち、捕捉対象の範囲をデータの長さで特定する代わりに、先頭と最後尾のアドレスで特定するようにしても構わない。
また、本実施の形態では、各プロセスを管理するデータ202と各プロセスの仮想空間を管理するデータ205との対応付け(リンク)を、各プロセスを管理するデータ202に含まれるポインタ203のみで示しているが、各プロセスの仮想空間を管理するデータ205に逆向きのポインタを含めてもよい。即ち、各プロセスの仮想空間を管理するデータ205が各プロセスを管理するデータ202を指し示すポインタを含んでいても構わない。
また、本実施の形態では、各プロセスの仮想空間内の各領域を管理するデータ206とオブジェクトを管理するデータ210との対応付け(リンク)を、各プロセスの仮想空間内の各領域を管理するデータ206に含まれるポインタ209のみで示しているが、オブジェクトを管理するデータ210に逆向きのポインタを含めてもよい。即ち、オブジェクトを管理するデータ210が各プロセスの仮想空間内の各領域を管理するデータ206を指し示すポインタを含んでいても構わない。この場合、ステップS206の処理が効率化できる。
また、本実施の形態では、利用者から捕捉対象の共有メモリのIDと先頭からのオフセットとデータの長さが指定されると、設定/管理プロセス151を実行して、捕捉対象の共有メモリの先頭仮想アドレスと先頭からのオフセットとデータの長さを捕捉設定処理130に通知しているが、利用者から指定された情報をそのまま捕捉設定処理130に通知しても構わない。即ち、捕捉対象の共有メモリを指定する情報として、設定/管理プロセス151の仮想空間内で、その共有メモリの先頭がマップされた仮想アドレスを通知する代わりに、共有メモリのIDを直接通知しても構わない。この場合、例えば、プロセス管理123は、共有メモリを管理するデータ210として、共有メモリのIDを記憶しておく。ステップS201については、本実施の形態と同様であるが、その後のステップS202〜S205は不要となる。ステップS206において、捕捉設定処理130のプロセス検索処理131は、ステップS201で捕捉対象として通知された共有メモリのIDへのポインタをターゲット識別ポインタ213に設定する。ステップS206及びS207については、本実施の形態と同様である。
100 共有メモリデバッグ装置、101 プロセス実行部、102 マッピング管理部、103 共有メモリ監視部、104 記憶領域指定部、105 プロセス検索部、106 アドレス指定部、110 共有メモリ群、120 OS、121 メモリ管理、122 共有メモリ管理、123 プロセス管理、124 I/O管理、125 ネットワーク管理、126 書き込みトラップ処理、130 捕捉設定処理、131 プロセス検索処理、132 アドレス指定処理、133 マップ検出処理、150 プロセス群、151 設定/管理プロセス、152 共有メモリ指定処理、191 CPU、192 メモリ、193 入力装置、194 出力装置、201,202,202’,202a,202b,205,206,206x,206y,210 データ、203,209 ポインタ、204 CPUレジスタ保存データ、207 先頭仮想アドレス、208 サイズ、211 共有メモリ内オフセット、212 データの長さ、213 ターゲット識別ポインタ、901 LCD、902 キーボード、903 マウス、904 FDD、905 CDD、906 プリンタ、912 バス、913 ROM、915 通信ボード、920 HDD、922 ウィンドウシステム、923 プログラム群、924 ファイル群。

Claims (4)

  1. 複数の記憶領域からなる共有メモリと、
    それぞれ独立した仮想アドレス空間をもち前記共有メモリ内の記憶領域を仮想アドレス空間内の仮想アドレスにマップする複数のプロセスを、処理装置により実行するプロセス実行部と、
    前記プロセス実行部で実行されるプロセスごとに前記共有メモリ内の記憶領域と仮想アドレスとのマッピング関係を管理するデータを記憶装置に記憶するマッピング管理部と、
    プロセス及び仮想アドレスが指定されると、前記マッピング管理部で記憶されたデータを参照して当該プロセスが当該仮想アドレスにマップしている記憶領域を特定し、特定した記憶領域に対するアクセスを前記処理装置により監視する共有メモリ監視部と、
    記憶領域を指定する入力を入力装置により受け付ける記憶領域指定部と、
    前記マッピング管理部で記憶されたデータを検索して、前記記憶領域指定部で指定された記憶領域を仮想アドレスにマップしているプロセス及び当該仮想アドレスを前記処理装置により抽出するプロセス検索部と、
    前記プロセス検索部で抽出されたプロセス及び仮想アドレスを前記共有メモリ監視部に対して指定するアドレス指定部と
    を備えることを特徴とする共有メモリデバッグ装置。
  2. 前記プロセス実行部は、前記記憶領域指定部で記憶領域が指定されると指定された記憶領域を仮想アドレスにマップして当該仮想アドレスを前記プロセス検索部に通知する管理プロセスを、前記複数のプロセスの1つとして実行し、
    前記プロセス検索部は、前記マッピング管理部で記憶されたデータを検索して、前記プロセス実行部で実行された管理プロセスから通知された仮想アドレスがマップされている記憶領域を特定し、特定した記憶領域を仮想アドレスにマップしているプロセス及び当該仮想アドレスを抽出することを特徴とする請求項1の共有メモリデバッグ装置。
  3. 前記アドレス指定部は、前記プロセス実行部で実行されるプロセスが前記記憶領域指定部で指定された記憶領域を新たに仮想アドレスにマップした場合、当該プロセス及び当該仮想アドレスを前記共有メモリ監視部に対して指定することを特徴とする請求項1又は2の共有メモリデバッグ装置。
  4. 複数の記憶領域からなる共有メモリを備えるコンピュータを、
    それぞれ独立した仮想アドレス空間をもち前記共有メモリ内の記憶領域を仮想アドレス空間内の仮想アドレスにマップする複数のプロセスを、処理装置により実行するプロセス実行部と、
    前記プロセス実行部で実行されるプロセスごとに前記共有メモリ内の記憶領域と仮想アドレスとのマッピング関係を管理するデータを記憶装置に記憶するマッピング管理部と、
    プロセス及び仮想アドレスが指定されると、前記マッピング管理部で記憶されたデータを参照して当該プロセスが当該仮想アドレスにマップしている記憶領域を特定し、特定した記憶領域に対するアクセスを前記処理装置により監視する共有メモリ監視部と、
    記憶領域を指定する入力を入力装置により受け付ける記憶領域指定部と、
    前記マッピング管理部で記憶されたデータを検索して、前記記憶領域指定部で指定された記憶領域を仮想アドレスにマップしているプロセス及び当該仮想アドレスを前記処理装置により抽出するプロセス検索部と、
    前記プロセス検索部で抽出されたプロセス及び仮想アドレスを前記共有メモリ監視部に対して指定するアドレス指定部
    として機能させるためのプログラム。
JP2011032498A 2011-02-17 2011-02-17 共有メモリデバッグ装置及びプログラム Expired - Fee Related JP5550581B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2011032498A JP5550581B2 (ja) 2011-02-17 2011-02-17 共有メモリデバッグ装置及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2011032498A JP5550581B2 (ja) 2011-02-17 2011-02-17 共有メモリデバッグ装置及びプログラム

Publications (2)

Publication Number Publication Date
JP2012173804A JP2012173804A (ja) 2012-09-10
JP5550581B2 true JP5550581B2 (ja) 2014-07-16

Family

ID=46976688

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011032498A Expired - Fee Related JP5550581B2 (ja) 2011-02-17 2011-02-17 共有メモリデバッグ装置及びプログラム

Country Status (1)

Country Link
JP (1) JP5550581B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101729097B1 (ko) 2014-06-09 2017-04-24 한국전자통신연구원 복수의 가상 머신에서 수행되는 응용 프로그램들간 참조 데이터를 공유하는 방법 및 이를 위한 참조 데이터 관리 장치 및 시스템

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63223929A (ja) * 1987-03-13 1988-09-19 Nec Corp アドレス識別方法
JPH0540653A (ja) * 1991-08-07 1993-02-19 Hitachi Ltd デバツグ装置及びデバツグ方法
JPH05143391A (ja) * 1991-11-21 1993-06-11 Toshiba Corp 仮想記憶方式のコンピユータにおけるメモリトレース方法
JP4676289B2 (ja) * 2005-09-14 2011-04-27 パナソニック株式会社 デバッグシステム及び方法

Also Published As

Publication number Publication date
JP2012173804A (ja) 2012-09-10

Similar Documents

Publication Publication Date Title
US9164840B2 (en) Managing a solid state drive (‘SSD’) in a redundant array of inexpensive drives (‘RAID’)
US10067813B2 (en) Method of analyzing a fault of an electronic system
CN108132890B (zh) 存储芯片的垃圾回收方法、装置、设备及存储介质
JP2012527046A (ja) リアルタイムでlunをファイルに、またはファイルをlunに変換すること
CN110168508B (zh) 监测断点出现的存储器位置的方法、计算机系统和介质
CN111782656B (zh) 数据读写方法及装置
JP2015505623A (ja) ステージング・エリアを管理するためのコンピュータ実施プロセス、コンピュータ・プログラム製品、装置
CN111736945B (zh) 基于智能网卡的虚拟机热迁移方法、装置、设备及介质
TW201415216A (zh) 測試日誌擷取系統及方法
JP2015069437A (ja) トレース方法、処理プログラム、および情報処理装置
CN114765051A (zh) 内存测试方法及装置、可读存储介质、电子设备
US9122791B2 (en) Identifying a storage location for a storage address requested during debugging
US9507657B2 (en) Investigation program, information processing apparatus, and information processing method
US20180157605A1 (en) Configuration of a memory controller for copy-on-write
US8261050B2 (en) Vital product data collection during pre-standby and system initial program load
US20120284478A1 (en) Managing storage extents and the obtaining of storage blocks within the extents
US20110202903A1 (en) Apparatus and method for debugging a shared library
JP5550581B2 (ja) 共有メモリデバッグ装置及びプログラム
US20160062841A1 (en) Database and data accessing method thereof
US20210397635A1 (en) Information processing device, information processing system, and computer-readable recording medium storing information processing program
CN107766385B (zh) 一种转换虚拟磁盘文件格式的方法与设备
JP5936241B2 (ja) 解析システム、解析方法およびプログラム
JP4867451B2 (ja) キャッシュメモリ装置及びそれに用いるキャッシュメモリ制御方法並びにそのプログラム
JP2014146074A (ja) 制御装置、ログ格納方法及び制御プログラム
JP2006079485A (ja) 電子計算機における障害解析用情報収集方式

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20131009

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140410

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20140422

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140520

R150 Certificate of patent or registration of utility model

Ref document number: 5550581

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees