(57)【特許請求の範囲】
【請求項１】
プログラムを実行するプログラム実行手段と、
このプログラム実行手段がアクセスする記憶手段と、
前記プログラム実行手段が前記記憶手段をアクセスする際に呼び出され、
該呼び出された時刻を記録テーブルに順次記録するアクセス時刻記録手段と、
このアクセス時刻記録手段によって記録された前記時刻の前後の時間間隔に基づき前記記憶手段へのアクセスの頻度が異常であるかを判定する第１の判定手段と、
この第１の判定手段による判定結果を記録テーブルに記録する記録手段と、
この記録手段によって記録された前記記録テーブルを出力する判定結果出力手段と、を含むアクセス監視手段を備えることを特徴とするプログラム開発支援装置。
【請求項２】
請求項１に記載されたプログラム開発支援装置において、
前記プログラム実行手段は、１の機能のプログラム実行処理において前記アクセス監視手段を複数回呼び出し、この呼び出し毎に前記１の機能のプログラム実行処理の実行箇所を示す実行ポインタを前記アクセス監視手段に与え、
前記アクセス監視手段は、さらに、
前記プログラム実行手段から与えられた前記実行ポインタを前記記録テーブルに順次記録するポインタ記録手段と、
このポインタ記録手段によって記録されたそれぞれの前記実行ポインタの値の差分値に基づき前記記憶手段へのアクセスの頻度が異常であるかを判定する第２の判定手段と、を備え、
前記記録手段は前記第１の判定手段および前記第２の判定手段による判定結果を前記記録テーブルに記録することを特徴とするプログラム開発支援装置。
【請求項３】
請求項１に記載されたプログラム開発支援装置において、
前記アクセス監視手段は、さらに、前記記憶手段をアクセスするアクセス実行手段を備え、
該アクセス実行手段は前記第１の判定手段による判定結果が正常のとき前記記憶手段をアクセスし、
前記第１の判定手段による判定結果が異常のとき前記記憶手段のアクセスを未実行とすることを特徴とするプログラム開発支援装置。
【請求項４】
請求項２に記載されたプログラム開発支援装置において、
前記アクセス監視手段は、さらに、前記記憶手段をアクセスするアクセス実行手段を備え、
該アクセス実行手段は前記第１の判定手段および前記第２の判定手段の両方の判定結果が正常のときのみ前記記憶手段をアクセスし、
前記第１の判定手段もしくは前記第２の判定手段のいずれか一方の判定結果が異常のとき前記記憶手段のアクセスを未実行とすることを特徴とするプログラム開発支援装置。
【請求項５】
請求項２又は請求項４に記載されたプログラム開発支援装置において、
前記実行ポインタ値は前記プログラム実行手段が備えるＣＰＵのプログラムカウンタであることを特徴とするプログラム開発支援装置。
【請求項６】
請求項１〜請求項５のいずれか１項に記載されたプログラム開発支援装置において、
前記記憶手段はデータの書き換えが可能な不揮発性メモリであることを特徴とするプログラム開発支援装置。
【請求項７】
請求項１〜請求項５のいずれか１項に記載されたプログラム開発支援装置において、
前記記録テーブルは該プログラム開発支援装置に着脱可能な外部記憶手段に保存されることを特徴とするプログラム開発支援装置。
【請求項８】
プログラムを実行するプログラム実行手段と、このプログラム実行手段がアクセスする記憶手段と、を備えたコンピュータに実行させるプログラム開発支援プログラムであって、
前記プログラム実行手段が前記記憶手段をアクセスする際に呼び出され、
該呼び出された時刻を記録テーブルに順次記録するアクセス時刻記録機能と、
このアクセス時刻記録機能によって記録された前記時刻の前後の時間間隔に基づき前記記憶手段へのアクセスの頻度が異常であるかを判定する第１の判定機能と、
この第１の判定機能による判定結果を記録テーブルに記録する記録機能と、
この記録機能によって記録された前記記録テーブルを出力する判定結果出力機能と、を含むアクセス監視機能を前記コンピュータに実行させるプログラム開発支援プログラム。
【請求項９】
請求項８に記載されたプログラム開発支援装置プログラムにおいて、
前記プログラム実行手段は、１の機能のプログラム実行処理において前記アクセス監視機能を複数回呼び出し、この呼び出し毎に前記１の機能のプログラム実行処理の実行箇所を示す実行ポインタを前記アクセス監視機能に与え、
前記アクセス監視機能は、さらに、
前記プログラム実行手段から与えられた前記実行ポインタを前記記録テーブルに順次記録するポインタ記録機能と、
このポインタ記録機能によって記録されたそれぞれの前記実行ポインタの値の差分値に基づき前記記憶手段へのアクセスの頻度が異常であるかを判定する第２の判定手段と、を備え、
前記記録機能は前記第１の判定機能および前記第２の判定機能による判定結果を前記記録テーブルに記録することを特徴とするプログラム開発支援プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置のメモリのアクセスを監視し、その監視結果を出力するプログラム開発支援装置、そしてそのプログラムに関する。
【背景技術】
【０００２】
近年、情報処理装置に搭載されるソフトウェアの大規模化・多様化に伴い、情報処理装置の利便性が向上される一方、その性能や品質を高水準に保つことが要求されている。例えば、特許文献１には、ソフトウェアの問題箇所の検出精度を向上させるためのソースコード問題予測プログラムが開示されている。このソースコード問題予測プログラムは、プログラムのソースコードに含まれる関数の呼出し関係、繰返し構造、条件分岐構造に関する制御構造情報を抽出し、この制御構造情報からプログラムの実行時に高頻度で繰返し実行される特定領域を予測し、この特定領域を呼び出す関数が存在するか調べ、存在した特定の関数を特定領域への実行頻度に基づいてランク付けするように構成されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００７−１７９４８８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
一般的に、情報処理装置は各種データを記録するための外部メモリおよびプログラムを実行するプロセッサを具備している。プロセッサが外部メモリをアクセスするアクセス時間はプロセッサに搭載されるキャッシュメモリなどの内部メモリ、もしくは作業メモリとして搭載されるＳＤＲＡＭなどへのアクセス時間に比べて時間がかかる。
【０００５】
プロセッサが高頻度で外部メモリをアクセスした場合、外部メモリへのアクセス時間の増加に伴い、プロセッサの主機能である演算処理に影響が出て、情報処理装置の性能に支障がでるという問題が起こり得る。また、外部メモリがフラッシュメモリなどのデータの書き換えが可能な不揮発性メモリの場合には、その高頻度なアクセスによりその寿命を著しく短くすることも考えられる。
【０００６】
このような問題はプログラム設計上では論理的に正しいことから、そのプログラムを運用して初めて不具合が明らかになることもある。
本発明は上記問題を鑑みて考案されたものであり、その課題はコンピュータの性能の低下を引き起こすようなバグやアクセス資源の劣化を故意に導くようなバグの修正箇所を明確にしてその修正を促し、プログラムの開発効率を向上させることが可能なプログラム開発支援装置やプログラムを提供することにある。
【課題を解決するための手段】
【０００７】
上記のような課題を解決する方法として、本発明は以下のように構成される。
請求項１に係る発明は、プログラムを実行するプログラム実行手段と、このプログラム実行手段がアクセスする記憶手段と、プログラム実行手段が記憶手段をアクセスする際に呼び出され、該呼び出された時刻を記録テーブルに順次記録するアクセス時刻記録手段と、このアクセス時刻記録手段によって順次記録された時刻の前後の時間間隔に基づき記憶手段へのアクセスの頻度が異常であるかを判定する第１の判定手段と、この第１の判定手段による判定結果を記録テーブルに記録する記録手段と、この記録手段によって記録された記録テーブルを出力する判定結果出力手段と、を含むアクセス監視手段と、を備えるように構成する。
【０００８】
請求項２に係る発明は、請求項１に記載されたプログラム開発支援装置において、プログラム実行手段は、１の機能のプログラム実行処理においてアクセス監視手段を複数回呼び出し、この呼び出し毎に１の機能のプログラム実行処理の実行箇所を示す実行ポインタをアクセス監視手段に与え、アクセス監視手段は、さらに、プログラム実行手段から与えられた実行ポインタを記録テーブルに順次記録するポインタ記録手段と、このポインタ記録手段によって記録されたそれぞれの実行ポインタの値の差分値に基づき記憶手段へのアクセスの頻度が異常であるかを判定する第２の判定手段と、を備え、記録手段は第１の判定手段および第２の判定手段による判定結果を記録テーブルに記録するように構成する。
【０００９】
請求項３に係る発明は、請求項１に記載されたプログラム開発支援装置において、アクセス監視手段は、さらに、記憶手段をアクセスするアクセス実行手段を備え、該アクセス実行手段は第１の判定手段による判定結果が正常のとき記憶手段をアクセスし、第１の判定手段による判定結果が異常のとき記憶手段のアクセスを未実行とするように構成する。
【００１０】
請求項４に係る発明は、請求項２に記載されたプログラム開発支援装置において、アクセス監視手段は、さらに、記憶手段をアクセスするアクセス実行手段を備え、該アクセス実行手段は第１の判定手段および第２の判定手段の両方の判定結果が正常のときのみ記憶手段をアクセスし、第１の判定手段もしくは第２の判定手段のいずれか一方の判定結果が異常のとき記憶手段のアクセスを未実行とするように構成する。
【００１１】
請求項５に係る発明は、請求項２又は請求項４に記載されたプログラム開発支援装置において、実行ポインタ値をプログラム実行手段が備えるＣＰＵのプログラムカウンタで構成する。
【００１２】
請求項６に係る発明は、請求項１〜請求項５のいずれか１項に記載されたプログラム開発支援装置において、記憶手段をデータの書き換えが可能な不揮発性メモリで構成する。
請求項７に係る発明は、請求項１〜請求項５のいずれか１項に記載されたプログラム開発支援装置において、記録テーブルは該プログラム開発支援装置に着脱可能な外部記憶手段に保存されるように構成する。
【００１３】
請求項８に係る発明は、プログラムを実行するプログラム実行手段と、このプログラム実行手段がアクセスする記憶手段と、を備えたコンピュータに実行させるプログラム開発支援プログラムであって、プログラム実行手段が記憶手段をアクセスする際に呼び出され、該呼び出された時刻を記録テーブルに順次記録するアクセス時刻記録機能と、このアクセス時刻記録機能によって順次記録された時刻の前後の時間間隔に基づき記憶手段へのアクセスの頻度が異常であるかを判定する第１の判定機能と、この第１の判定機能による判定結果を記録テーブルに記録する記録機能と、この記録機能によって記録された記録テーブルを出力する判定結果出力機能と、を含むアクセス監視機能をコンピュータに実行させるように構成する。
【００１４】
請求項９に係る発明は、請求項８に記載されたプログラム開発支援装置プログラムにおいて、プログラム実行手段は、１の機能のプログラム実行処理においてアクセス監視機能を複数回呼び出し、この呼び出し毎に１の機能のプログラム実行処理の実行箇所を示す実行ポインタをアクセス監視機能に与え、アクセス監視機能は、さらに、プログラム実行手段から与えられた実行ポインタを記録テーブルに順次記録するポインタ記録機能と、このポインタ記録機能によって記録されたそれぞれの実行ポインタの値の差分値に基づき記憶手段へのアクセスの頻度が異常であるかを判定する第２の判定手段と、を備え、記録機能は第１の判定機能および第２の判定機能による判定結果を記録テーブルに記録するように構成する。
【発明の効果】
【００１５】
本発明によれば、プログラム実行手段は記憶手段をアクセスする際、アクセス監視手段を呼び出す。該アクセス監視手段はプログラム実行手段に呼び出される度に、記憶手段へのアクセス要求時刻を記録テーブルに順次記録し、この記録された時刻情報の前後の時間間隔に基づき記憶手段へのアクセスの頻度が異常であるかを判定する。また、アクセス監視手段は、プログラム実行手段がアクセス監視手段を呼び出す際のプログラム実行ポインタを記録テーブルに記録し、この記録された実行ポインタの差分値に基づき記憶手段へのアクセスの頻度が異常であるかを判定する。さらに、アクセス監視手段はこれら判定結果を記録テーブルに記録し、出力する。
【００１６】
このように構成することにより、本発明は所定のアドレス領域に配置される記憶部（フラッシュメモリ等）への高頻度なアクセスを監視し、該監視結果（プログラムカウンタなど）を記録し出力するので、プログラムの適正な修正を促すことができる。よって、プログラム開発者などのユーザは、プログラムカウンタなどを基にバグとなり得るプログラムの異常個所を容易に特定できるためプログラムの開発効率が飛躍的に向上する。
【００１７】
また、本発明のアクセス監視手段は第１の判定手段および第２の判定手段よる判定結果が共に正常判定のときのみ記憶手段をアクセスし、第１の判定手段又は第２の判定手段のいずれか一方の判定結果が異常判定のときは記憶手段のアクセスを未実行とする。
【００１８】
このように構成することにより、フラッシュメモリなどへの高頻度なアクセスを抑制し短命化を阻止することができる。
【図面の簡単な説明】
【００１９】
【図１】本発明の一例を示すプログラム開発支援装置の構成図
【図２】図１のプログラム開発支援装置の動作説明用の機能相関図
【図３】図１のメモリアクセス監視プログラムの処理を示すフローチャート
【図４】メモリアクセス監視プログラムが保存した監視結果の一例
【図５】図３のフローチャートに従って監視結果が更新されることを説明する図
【発明を実施するための形態】
【００２０】
以下、本発明の好適な実施形態について図１〜図５を基に説明する。なお、これらの図面は本発明の一実施形態を説明するための図面であって、これらの図面によって本発明が限定されるものではない。
【実施例】
【００２１】
図１は、本発明の一例を示すプログラム開発支援装置の構成図である。プログラム開発支援装置１００は、アプリケーションプログラム１０３、アプリケーションプログラムを実行するＣＰＵ１０１を備える。また、プログラム開発支援装置１００はアプリケーションプログラム１０３によるアクセス対象メモリ１０６へのアクセス頻度を監視するメモリアクセス監視プログラム１０４を備える。さらに、プログラム開発支援装置１００はメモリアクセス監視プログラム１０４の監視結果を保存する監視結果保存用メモリ１０５を備える。なお、本発明においてはＣＰＵ１０１およびアプリケーションプログラム１０３を総じてプログラム実行手段と定義し、アクセス対象メモリ１０６を記憶手段と定義している。また、メモリアクセス監視プログラム１０４をアクセス監視手段と定義しており、メモリアクセス監視プログラム１０４の監視結果である監視結果１０５ａを記録テーブルとして定義している。
【００２２】
メモリアクセス監視プログラム１０４には、アクセス時刻記録手段、第１の判定手段、そして、記録手段および判定結果出力手段が含まれる。アクセス時刻記録手段は、アプリケーションプログラム１０３による呼び出された時刻を、監視結果１０５ａに順次記録するプログラムである。第１の判定手段判は、アクセス時刻記録手段よって記録された時刻情報の前後の時間間隔に基づき、メモリへのアクセス頻度が異常であるかを判定するプログラムである。また、記録手段は、第１の判定手段による判定結果を監視結果１０５ａに記録するプログラムである。判定結果出力手段は不図示の表示装置などに監視結果１０５ａを出力するプログラムである。
【００２３】
また、メモリアクセス監視プログラム１０４には、さらにポインタ記録手段、そして第２の判定手段が備えられている。ポインタ記録手段はアプリケーションプログラム１０３がメモリアクセス監視プログラムを呼び出した（すなわちメモリアクセスを要求したとき）のプログラム実行ポインタを監視結果１０５ａに記録するプログラムである。このプログラムはその実行の都度、前述プログラム実行ポインタを監視結果１０５ａに順次記録する。また、第２の判定手段はポインタ記録手段によって記録されたそれぞれの実行ポインタ値の差分値に基づいて、アプリケーションプログラム１０３によるメモリへのアクセス頻度が異常であるかを判定するプログラムである。
【００２４】
また、前述記録手段は第１の判定手段による判定結果のみならず、第２の判定手段による判定結果も監視結果１０５ａに記録することができる。
なお、アプリケーションプログラム１０３およびメモリアクセス監視プログラム１０４はプログラム保存用メモリ１０２に保持されているが、それぞれのプログラムは別媒体のメモリに保持されていても構わない。
【００２５】
また、アクセス監視対象メモリ１０６は、ＣＰＵ１０１によってアクセスされる書き換えが可能な記憶手段であり、プログラム開発支援装置１００に備え付け、もしくは着脱可能なフラッシュメモリや外部記憶装置などである。なお、アクセス監視対象メモリ１０６はＣＰＵ１０１の内部に搭載されるキャッシュメモリ（不図示）やプログラム保存用メモリ１０２などのローカルメモリに比べて、そのアクセスに時間を要するものである。
【００２６】
図２は図１に示すアプリケーションプログラム１０３とメモリアクセス監視プログラム１０４の動作を説明するための相関図である。
アプリケーションプログラム１０３は処理１０３ａを実行するプログラムである。アプリケーションプログラム１０３は処理１０３ａの実行の過程でメモリアクセス監視プログラム１０４を呼び出す（コールする）ことにより、所定アドレスに配置されたメモリをアクセスするように構成されている。すなわち、アプリケーションプログラム１０３はメモリアクセス監視プログラム１０４をコールことによって、メモリへのアクセスを要求する。
【００２７】
この例の場合、アプリケーションプログラム１０３は時点Ｐ０と時点Ｐ１、そして時点Ｐ２の３箇所でメモリアクセス監視プログラム１０４をコールしている。このコールの際、アプリケーションプログラム１０３はアクセス先のアドレス、データサイズ、そしてリード／ライトなどを含めたコマンドを引数としてメモリアクセス監視処理１０４に与えている。
【００２８】
このようにしてコールされたメモリアクセス監視プログラム１０４は引数として与えられたアドレス先のメモリをアクセスする。このアクセスの際、メモリアクセス監視プログラム１０４は保存用メモリ１０５にその監視結果（図４の監視結果１０５ａ）を記録する。そして、メモリアクセス監視プログラム１０４は、記録された監視結果を不図示の表示装置などに出力することによってプログラム開発者にプログラムの修正を促す。
【００２９】
なお、メモリアクセス監視プログラム１０４は、引数として与えられたアドレスがアクセス監視対象メモリ１０６の配置アドレスであったならば、そのアクセスを監視し監視結果を記録する。一方、引数として与えられたアドレスがアクセス監視対象メモリ以外であったならば、メモリアクセス監視プログラム１０４はそのアクセスを監視せずアクセス対象のメモリをアクセスして処理を終了する。
【００３０】
このように構成する理由は、プログラム開発支援装置には複数の記憶媒体が搭載されていることもあり、全ての記憶媒体に対するアクセスの頻度を監視して保存するよりも、複数の記憶媒体の内の所定の記憶媒体のみのアクセスの頻度を監視した方がＣＰＵ１０１の負荷が軽減されるからである。従って、メモリアクセス監視プログラム１０４にはアクセス監視対象メモリ１０６が配置されるアドレスの割付情報（アドレス範囲）が予め登録されている。そしてコールされる度にメモリアクセス監視プログラム１０４は、そのアクセス先がアクセス監視対象メモリ１０６であるか否かをチェックしている。
【００３１】
なお、このような構成以外として、メモリアクセス監視プログラム１０４はアクセス監視対象メモリ１０６をアクセスするための専用プログラムとして構成されても良い。この場合にメモリアクセス監視プログラム１０４は、アプリケーションプログラム１０３からコールされる度に、アクセス先がアクセス監視対象メモリ１０６であるかのチェックを行わず、監視結果を保存用メモリ１０５に記録する。
【００３２】
また、監視結果保存用メモリ１０５には図４のような監視結果１０５ａが記録されている。この監視結果１０５ａの「呼出元ＰＣ」は、アプリケーションプログラム１０３がメモリアクセス監視プログラム１０４を呼び出したときのＣＰＵ１０１のプログラムカウンタである。
【００３３】
例えばインデックス０の「呼出元ＰＣ」欄は０ｘ１２３４５６７８である。これは、プログラムカウンタが０ｘ１２３４５６７８のときにアプリケーションプログラム１０３がメモリアクセス監視プログラム１０４を呼び出したことを意味する。
【００３４】
一方、インデックス１の「呼出元ＰＣ」欄は０ｘ１２３４ＡＢＣＤなので、プログラムカウンタが０ｘ１２３４ＡＢＣＤのときにアプリケーションプログラム１０３がメモリアクセス監視プログラム１０４を呼び出したことを意味する。
【００３５】
従って、監視結果１０５ａの「呼出元ＰＣ」欄には、アプリケーションプログラム１０３がメモリアクセス監視プログラム１０４をコールした都度のプログラムカウンタが縦方向に順次記録されている。
【００３６】
また、「呼出異常」はアクセスの要求が高頻度に実行されたか否かを示すステータス情報である。ＴＲＵＥは高頻度にアクセス要求が実行されたため異常であることを示し、ＦＡＬＳＥは正常であることを意味する。この例の場合、インデックス０の「呼出異常」欄は「ＴＲＵＥ」なので、従前にこのインデックに該当するメモリアクセスが高頻度に行われた（要求された）ため異常であることが示されている。
【００３７】
また、「呼出時刻」は、アプリケーションプログラム１０３によるメモリ監視プログラム１０４のコール時刻が順次記録されたものである。この例の場合、インデックス０の「呼出時刻」欄には１００,１０２,１０４,・・・,２００のように最新の時刻が一番右に、その左に向けて過去のアクセス時刻が順次記録されている。この記録された時刻値は１の位が０．１ｍｓを表しており、１００と１０２との差を時間で表現すると０．２ｍｓである。
【００３８】
図３はメモリアクセス監視プログラム１０４の動きを示すフローチャートである。
メモリアクセス監視プログラム１０４はアプリケーションプログラム１０３によって呼び出されることは前述説明した通りである。さらに、アプリケーションプログラム１０３はメモリアクセス監視プログラム１０４の呼出の際のＣＰＵ１０１のプログラムカウンタと時刻情報とを不図示の記憶手段に退避している。メモリアクセス監視プログラム１０４は、これら退避されたプログラムカウンタおよび時刻情報を参照することができることを付け加えておく。
【００３９】
ステップＳ１において、メモリアクセス監視プログラム１０４はアプリケーションプログラム１０３によって退避されたプログラムカウンタを参照し、該プログラムカウンタと図４に示される「呼出元ＰＣ」欄に記録された値との一致を、インデックス０から順番にチェックする。一致が確認されると、メモリアクセス監視プログラム１０４はステップＳ１を抜け、ステップＳ２に移行する。一方、全てのインデックスにおいて一致が確認されなかったならば、メモリアクセス監視プログラム１０４は新たなインデックスを追加し、上述アプリケーションプログラム１０３によって退避されたプログラムカウンタを該追加したインデックスの「呼出元ＰＣ」欄に登録し、ステップＳ２に移行する。
【００４０】
すなわち、アプリケーションプログラム１０３がメモリアクセス監視プログラム１０４をコールする毎に、そのプログラムカウンタと「呼出元ＰＣ」欄に記録済みの値がチェックされる。一方、未だそのプログラムカウンタが監視結果１０５ａの「呼出元ＰＣ」欄に記録されてない場合には、新たなインデックスが追加され、追加されたインデックスの「呼出元ＰＣ」欄にプログラムカウンタ値が新たに記録される。このようにしてアプリケーションプログラム１０３の実行過程における所定のプログラムカウンタ値に対応したインデックスが都度記録されていく。
【００４１】
ステップＳ２に移行したメモリアクセス監視プログラム１０４は、前述アプリケーションプログラム１０３によって退避された時刻情報を参照し、この時刻情報を該当するインデックス（前述ステップＳ１にてプログラムカウンタの一致が確認されたインデックス、もしくは、新たに追加されたインデックス）の「呼出時刻」欄に追加して更新し、ステップＳ３に移行する。
【００４２】
ステップＳ３に移行したメモリアクセス監視プログラム１０４は、更新された監視結果１０５ａに基づき、アクセス監視対象メモリ１０６へのアクセス要求が異常であるか判定する。この判定が異常ならば、メモリアクセス監視プログラム１０４は処理をステップＳ４に移行し、正常ならば処理をステップＳ５に移行する。
【００４３】
ここで、このステップＳ３における正常／異常判定について説明する。メモリアクセス監視プログラム１０４は監視結果１０５aを参照し、以下の判定１、もしくは判定２を条件としてアクセス監視対象メモリ１０６へのアクセスを判定する。
【００４４】
（判定１）「呼出時刻」欄に記録された時刻情報の今回値（一番右の値）と前回値（今回値の左の値）を差し引いて、その値が１０ミリ秒以内であれば異常、１０ミリ秒を超過（１０ミリ秒は含まれない）していれば正常と判定する。
【００４５】
（判定２）各インデックスそれぞれの「呼出元ＰＣ」欄に登録されたプログラムカウンタの値が１６以下である場合に異常、１７以上であれば正常と判定する。
すなわち、メモリアクセス監視プログラム１０４はアクセス時刻の差分を算出してその間隔時間をチェックすること、もしくはプログラムカウンタの接近をチェックすることで、アクセス監視対象メモリ１０６へのアクセス頻度を検出し、正常／異常の判定を行っている。
【００４６】
ステップＳ３の判定で正常判定したメモリアクセス監視プログラム１０４はステップＳ５に移行し、アクセス監視対象メモリ１０６へのアクセスを実行してそのアクセス結果を戻り値としてアプリケーションプログラム１０６に与え、処理を終了する。
【００４７】
例えば、アプリケーションプログラム１０６がアクセス監視対象メモリ１０６の１００番地から１６バイト分のデータ読み出しを要求した場合、メモリアクセス監視プログラム１０４はアクセス監視対象メモリ１０６の１００番地から１６バイト分の値を読み取り、その値を戻り値としてアプリケーションプログラム１０６に与え、処理を終了する。
【００４８】
また、アプリケーションプログラム１０６がアクセス監視対象メモリ１０６の２００番地を先頭に３２バイト分のデータ書き込みを要求した場合、メモリアクセス監視プログラム１０４はアプリケーションプログラム１０６から与えられた３２バイトのデータを、アクセス監視対象メモリ１０６の２００番地を先頭アドレスとして３２バイト書き込み、その書き込みが成功したか否かを戻り値としてアプリケーションプログラム１０６に与え、処理を終了する。
【００４９】
一方、ステップＳ３の判定で異常判定したメモリアクセス監視プログラム１０４は、ステップＳ４に移行し、監視結果１０５ａの該当インデックスの「呼出異常」欄を「ＴＲＵＥ」に更新する。この更新により、アプリケーションプログラム１０３によるアクセス監視対象メモリ１０６へのアクセスが異常である旨を記録する。そして、メモリアクセス監視プログラム１０４は、このアクセスが異常であり、アクセス不可であるという結果を戻り値としてアプリケーションプログラム１０３に与え、処理を終了する。このとき、メモリアクセス監視プログラム１０４はアクセス監視対象メモリ１０６に対して実際のアクセスを行わない。
【００５０】
図５は、監視結果１０５ａが図３のフローチャートの実行に従って更新されることを説明する図である。図５に示す監視結果１０５ａのインデックス０は、図２の処理１０３aの時点Ｐ０でのアクセス監視対象メモリ１０６へのアクセスである。また、時点Ｐ１でのアクセスがインデックス１であり、時点Ｐ２でのアクセスがインデックス２である。すなわち、時点Ｐ０でのＣＰＵ１０１のプログラムカウンタは「０ｘ１２３４５６７８」であり、時点Ｐ１でのＣＰＵ１０１のプログラムカウンタは「０ｘ１２３４ＡＢＣＤ」である。また、時点Ｐ２でのＣＰＵ１０１のプログラムカウンタは「０ｘ１２３４ＡＡＡＦ」ということになる。
【００５１】
この例では、アプリケーションプログラム１０２がアクセス監視対象メモリ１０６を時点Ｐ２おいて高頻度にアクセスするような不具合（バグ）があったとしている。このとき監視結果１０５ａの「呼出異常」が更新される動きを説明している。
（図５中段の監視結果１０５ａ）
インデックス１の「呼出時刻」欄に最新アクセス時刻値２０１が追加されている。これは図３のステップＳ２が実行された結果である。「呼出異常」欄はＦＡＬＳＥであり、この段階では正常を意味している。
（図５下段の監視結果１０５ａ）
インデックス１の「呼出異常」欄のステータスがＴＲＵＥに更新されている。これは図３のステップＳ４が実行された結果であり、この過程においてアクセスが異常と判定されたものである。図３のステップＳ３では、追加された時刻値２０１とその前のアクセス時刻値１３９とを基に、そのアクセスの頻度がメモリアクセス監視プログラム１０４によって求められ、正常／異常が判定される。この場合、最新アクセス時刻値が２０１であり、前のアクセス時刻値が１３９である。従って、差は２０１−１３９＝６２であり、時間に換算すると６．２ｍｓである。よって、当該アクセス監視対象メモリ１０６へのアクセス要求は１０ｍｓ以内で複数回あったため、アクセス頻度が高く異常と判定されている。そして、監視結果１０５ａの「呼出時刻」欄がステップＳ４の処理で異常ステータスに更新されている。なお、この際、実際のメモリアクセスは行われない。
【００５２】
すなわち、図３のステップＳ３の判定は「呼出時刻」欄にトレンド的に記録されたそれぞれの時刻値の前後関係において、その間隔が１００以下（時間換算１０ｍｓ以下）の値が存在すれば異常であり、１０１（時間換算１０．１ｍｓ）以上であれば正常である。
【００５３】
このように、アプリケーションプログラム１０３はアクセス監視対象メモリ１０６をアクセスする際、メモリアクセス監視プログラム１０４を呼び出す。呼び出されたメモリアクセス監視プログラム１０４は、その呼び出された時間間隔および／またはプログラムカウンタによる実行ポインタの差によってアクセスの頻度を求め、正常か異常かを判定している。判定の結果が正常であればそのままアクセス監視対象メモリ１０６をアクセスし、判定の結果が異常ならばアクセス監視対象メモリ１０６をアクセスしない（このようなアクセス制御は不図示であるがアクセス実行手段によって行われる）。
【００５４】
また、本発明において、上述判定１が第１の判定手段に相当し、上述判定２が第２の判定手段に相当する。また、本発明は判定１もしくは判定２のいずれか一方を図３のステップＳ３に適用させることができる。もしくは、本発明のステップＳ３に判定１と判定２の両方を適用しても良い。この場合、判定１と判定２の両方が正常と判定されることによりステップＳ３が「正常」判定され、いずれか一方の判定が異常ならば「異常」判定される。すなわち、判定１と判定２の両方の判定をステップＳ３に適用した本発明は、メモリへのアクセス要求が行われる時間間隔およびメモリへのアクセス要求が行われるプログラムカウンタの間隔値を基に高頻度なメモリアクセスを検出し、異常の判定を行っている。
【００５５】
また、図３のステップＳ３の判定処理としては、その都度、正常／異常を判定するようにしてもよいが、複数回分のアクセスをロギングし、複数回に１回の割合で正常／異常を判定するようにすればＣＰＵ１０１の判定処理の負荷を軽減することができる。
【００５６】
また、図３のステップＳ１がポインタ記録手段に相当し、図３のステップＳ２がアクセス時刻記録手段に相当している。
また、図３のステップＳ４が記録手段に相当しており、該記憶手段は、上述判定１のみがステップＳ３に適用されれば、判定１のみの判定結果を判定結果１０５ａに記録する。一方、上述判定２のみがステップＳ３に適用されれば、記憶手段は判定２のみの判定結果を判定結果１０５ａに記録することになる。また、判定１と判定２の両方の判定がステップＳ３に適用された場合、記録手段は判定１と判定２の両方の判定が「正常」という条件にて、判定結果１０５ａに正常という判定結果を記録することになる。
【００５７】
また、図３のステップＳ３が異常判定された場合、そのときの実際のメモリアクセスは拒否されるが、次のアプリケーション起動時のメモリアクセス時刻が、異常と判定された時刻から１０ｍｓを超過していれば、そのときのアクセスにおける判定は正常判定される。すなわち一旦異常判定されても、所定の時間経過後のアクセスでは、異常ステータスが解除され、アクセスが再開される。このようにして、本発明はアプリケーションプログラム１０３によるメモリのアクセス機能を維持するとともに、高頻度なメモリのアクセスを抑制している。
【００５８】
また、本発明の実施例にて説明した各種プログラムは、コンピュータで読み取り可能なフレキシブルディスク、光磁気ディスク、ＲＯＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、ＣＤ（Compact Disc）、ＤＶＤ（Digital Versatile Disc）、ＢＤ（Blu-ray Disc）等の記憶媒体に記憶され、パソコンなどにインストールされてその機能が提供されることもある。
【００５９】
以上のように構成することにより、本発明は所定のアドレス領域に配置される記憶部（メモリ）への高頻度なアクセスを監視し、該監視結果（プログラムカウンタなど）を記録し出力するので、プログラムの適正な修正を促すことができる。よって、プログラムカウンタなどを基にプログラムの異常個所が容易に特定できるためプログラムの開発効率が飛躍的に向上する。
【符号の説明】
【００６０】
１００    プログラム開発支援装置
１０１    ＣＰＵ
１０２    プログラム保存用メモリ
１０３    アプリケーションプログラム
１０４    メモリアクセス監視プログラム
１０５    監視結果保存用メモリ
１０５ａ  監視結果
１０６    アクセス監視対象メモリ
１０７    バス
【図１】
0005703968.tif 000002
【図２】
0005703968.tif 000003
【図３】
0005703968.tif 000004
【図４】
0005703968.tif 000005
【図５】
0005703968.tif 000006