(第一実施形態)本発明において情報処理装置は、コンピュータ上でプログラムを実行することで実現でき、そのハードウェア構成を図2に示す。図2の本体部202のハードディスク202cには、情報処理装置の各機能を実現するためのプログラムや、模擬対象装置に関する情報を含む各種データが格納される。中央処理部(CPU)202aは、プログラム及び各種データを主記憶部202bにロードして実行し、これによりコンピュータシステム201は情報処理装置として動作する。なお、表示装置203は、本体部202からの指示により画面表示を行う。また、キーボード204は、このコンピュータシステム201にユーザの指示や文字情報を入力するためのものである。さらに、マウス205は、表示装置203上の任意の位置を指定することによりその位置に表示されていたアイコン等に応じた指示を入力するためのものである。
図1は、本実施形態による情報処理装置の構成図である。情報処理装置は、シミュレータ部101と、アクセスパターン分析部104を備えている。シミュレータ部101のCPUシミュレータ301は、模擬対象装置のCPU又は制御部の動作を模擬する。つまり、模擬対象装置の制御プログラムを実行して模擬対象装置の各部の制御動作を模擬する。CPUシミュレータ301は、メモリや模擬対象装置にアクセスを行う際、アクセス管理部302にアクセス情報を含むアクセス通知を行う。ここで、アクセス情報とは、アクセス対象のリソースを特定するリソース特定情報及びアクセス種別情報を含んでいる。なお、リソース特定情報とは、例えば、メモリへのアクセスの場合には、メモリのアドレスやデータの変数名等である。また、模擬対象装置へのアクセスの場合には、アクセスする機能に対応するレジスタのアドレスやハードウェア又は機能名である。また、アクセス種別情報とは、データの読み込み(以下、リードと記す)か、データの書き込み(以下、ライトと記す)を示す情報である。CPUシミュレータ301は、アクセス管理部302にアクセス通知を行った場合、模擬動作を一旦停止する。その後、アクセス管理部302から再開通知を受けることで、模擬動作を再開する。
メモリシミュレータ307は、模擬対象装置の制御部の主メモリの動作を模擬する。メモリシミュレータ307には、模擬対象装置の制御部の主メモリの各領域と1対1で対応する領域が定義される。CPUシミュレータ301は、制御プログラムの主メモリへのアクセス命令に従い、メモリシミュレータ307の対応領域にアクセスする。
装置シミュレータ306は、模擬対象装置の各機能の動作を模擬、つまり、模擬対象装置の制御部により制御される各機能の動作を模擬する。例えば、制御対象装置が画像形成装置である場合は、装置シミュレータ306は、画像形成を行うための各部材の動作を模擬する。
アクセス管理部302は、CPUシミュレータ301と、装置シミュレータ306と、メモリシミュレータ307との間でのデータの入出力を管理する。具体的には、伝達部303は、CPUシミュレータ301と、装置シミュレータ306と、メモリシミュレータ307との間で入出力されるデータを伝達する。伝達部303は、実際の装置においては、制御部のCPU、主メモリ及び入出力部を接続するバスに相当する。
アクセス情報取得部304は、CPUシミュレータ301がアクセス通知を行うと、アクセス情報を取得して、アクセスパターン分析部104にアクセス情報を含む更新通知を行う。再開処理部305は、アクセスパターン分析部104から分析終了通知を受け取ると、CPUシミュレータ301に対して再開通知を行う。
図3は、アクセス管理部302における処理のフローチャートである。アクセス管理部302は、S1において、CPUシミュレータ301からアクセス通知が行われるまで待機する。アクセス通知を受けると、S2において、伝達部303は、アクセス通知に含まれるアクセス情報に基づき、装置シミュレータ306又はメモリシミュレータ307にデータを伝達する。また、S3において、アクセス情報取得部304は、更新通知をアクセスパターン分析部104に行ってアクセス情報を通知する。アクセス管理部302は、S4において、アクセスパターン分析部104から分析終了通知を受けるまで待機する。分析終了通知を受信すると、再開処理部305は、CPUシミュレータ301に再開通知を行い、これによりCPUシミュレータ301は模擬処理を再開する。以後、アクセス管理部302は、S1からS5の処理を繰り返す。
図1に戻り、アクセスパターン分析部104について説明する。アクセスパターン分析部104は、アクセス情報の履歴を管理する履歴管理部105と、不適切アクセスを検出して警告処理を行う検出部108を備えている。履歴管理部105の履歴情報保存部106は、アクセス管理部302からアクセス情報を受け取ると、受け取ったアクセス情報に基づき、各リソースに対するアクセス種別の履歴(以後、履歴パターンと呼ぶ。)を示す履歴パターン情報を含む履歴情報107を保存する。アクセスパターン分析部104は、1回のアクセスを1ビットデータとして扱い、データリード、データライトに応じて、アクセス情報を“0”または“1”の2値で扱う。履歴パターンを示すコンピュータシステム201内のRAMデータは、プログラム動作検証開始時は、全て不定値である。履歴パターン情報の不定状態を扱うため、履歴パターン情報の不定値(無効値)をマスクするためのデータを用いる。具体的には、本例においてはマスクデータにおいて有効ビットを“0”、無効ビットを“1”で表すものとする。履歴パターンおよびマスクデータはどちらも所定ビット数のビット列であり、時間順序に従ってデータ管理をする。時間順序に従うとは、LSB側(ビット列において右側)、またはMSB側(ビット列において左側)いずれかが時間的により古い方を示すようにデータを扱うことである。履歴パターン情報は、履歴管理部105が扱う固定長のデータ数を超えると、最も古いデータをビット列から切り捨て、新しいデータを加える。履歴パターン情報は、例えば、8ビット固定長の履歴データと、当該履歴データと同じデータ長のマスクデータで構成される。本例では、履歴データにおいてデータリードを“0”、データライトを“1”で表し、MSB側(ビット列において左側)が時間的に古い方を示すものとしている。この場合、動作開始後、あるアドレスに対して、データライト後にデータリードが行われた場合、このアドレスの履歴データは、“mmmmmm10”となり、マスクデータは、“11111100”となる。なお、mは1でも0でもどちらでも良いことを示す。なお、上記表記は、特に断らない限り、以下の実施形態において共通とする。その後、同じアドレスにデータリードが行われたものとすると、履歴パターンは、履歴データ“mmmmmm100”及びマスクデータ“11111000”で表される。なお、上記例は、過去8回の履歴パターンを管理するものであったが、どの程度の回数の履歴を管理するかは任意であり、各アドレスに対して確保するデータの保存のための領域は、保存する履歴の長さに応じて変更される。さらに、履歴情報107として、各アドレスに対する履歴パターンが管理できれば、任意のデータ表現を使用することができる。
判定情報109は、予めユーザにより設定された検出すべきアクセス種別の時間順序を示す検出パターン情報を保存している。検出パターン情報も、上述した履歴パターンと同じ様に、アクセス種別の時間順序を固定長で示す検出データ及び当該検出データが示すアクセスを、判定に使用するか否かを示すマスクデータで表現することができる。検出データは、履歴パターンと同様、1回のアクセスを1ビットデータとして扱い、データリード、データライトに応じて、アクセス情報を“0”または“1”の2値で扱う。また、検出データおよびマスクデータは、ビット列であり時間順序に従ってデータ管理をする。例えば、ライト、リード、リードという3回のアクセスに対するパターンを検出したい場合、検出データを“mmmmm100”とし、マスクデータを“11111000”として、検出パターンを表現することができる。
比較部110は、更新通知を受け取り、履歴情報107が更新されると、更新されたリソースに対応する履歴パターンと、判定情報109が保持する検出パターン情報が示す検出パターンを比較して一致するか否かを判定する。例えば、検出データが“mmmmm100”であり、マスクデータが“11111000”である場合、最近の3回のアクセスが、ライト、リード、リードの順であれば、その前の5回のアクセスパターンに拘わらず一致が検出される。比較部110は、一致を検出すると警告出力部111に一致の検出を通知する。なお、データをビットデータにしてビット列で扱うことで、履歴パターンを表す履歴データ及びマスクデータと、検出パターンを表す履歴データ及びマスクデータとの排他的論理和といった論理演算により、簡易にアクセスパターンの一致を判定することができる。
警告出力部111は、検出パターンと、履歴パターンの一致が比較部110より通知されると、ユーザに警告を出力する。警告の出力は、例えば、検出パターンと一致したアドレスをディスプレイに表示することにより、或いは、外部ファイルとしてハードディスク等に出力することにより行われる。
続いて、図4を用いてより具体的に説明する。図4(a)に示すプログラムにおいて、関数test1及び外部割込み関数inttest2は共に、グローバル変数yの値を書き換えた後、変数yの値に応じて、以降の処理を決定している。ここで、関数test1において、変数yの書き換え、つまり、y=func1()の実行後、if文に至るまでの間は、外部割込みを禁止するプログラム仕様であるものとする。したがって、外部割込みが禁止されている場合、関数test1の開始から終了までの間における変数yへのアクセスパターンはライト、リード、つまり、“10”となる。しかしながら、実装漏れにより、割込みが禁止されなかったものとする。この場合において、y=func1()の実行後、if文に至るまでの間で外部割込みinttest2が発生すると、この場合の変数yへのアクセスパターンは、は“1100”となる。
この場合、検出パターンとして、“11”を設定することにより、連続するライトアクセスを検出することができる。図4(b)は、検出パターンとし直近の2回のアクセスが共にライトアクセスとなるパターンを検出するためのデータ例である。
CPUシミュレータ301が、y=func1()を実行することで、変数yに対するライトアクセスが発生し、よって、履歴情報107が保持する変数yに対するデータは、図4(c)のアクセス#1に示す様になる。検出パターンと履歴パターンは一致しないため、アクセスパターン分析部104は、単に、分析終了通知を行う。これにより、CPUシミュレータ301は、模擬動作を再開する。y=func1()の実行後、if文の実行までに、外部割込みが発生しない場合には、if文において、変数yのリードアクセスが発生する。このとき、履歴情報107が保持する変数yに対するデータは、図4(c)のアクセス#2に示す様になる。検出パターンと履歴パターンは一致しないため、アクセスパターン分析部104は、単に、分析終了通知を行う。これにより、CPUシミュレータ301は、模擬動作を再開する。
その後、関数test1が再度実行され、CPUシミュレータ301が、y=func1()を実行すると、変数yに対するライトアクセスが発生する。この場合、履歴情報107が保持する変数yに対するデータは、図4(c)のアクセス#3に示す様になる。検出パターンと履歴パターンは一致しないため、アクセスパターン分析部104は、単に、分析終了通知を行う。これにより、CPUシミュレータ301は、模擬動作を再開する。y=func1()の実行後、if文の実行までに、外部割込みにより関数inttest2が実行されたものとする。このとき、履歴情報107が保持する変数yに対するデータは、図4(c)のアクセス#4に示す様になる。履歴パターンの下位2ビットは、検出パターンと同じ“11”であり、比較部110は、パターンの一致を検出する。したがって、警告出力部111は警告の出力を行う。
以上、リソースに対するアクセス種別の履歴を保存し、アクセスが発生する度に、アクセスされたリソースへの履歴パターンと、予め設定する検出パターンの一致を判定して不適切アクセスを検出する。この構成により任意のパターンの不適切アクセスを検出することができる。したがって、プログラムの動作検証時に、プログラムの問題をユーザに通知することができ、検証効率を向上させることができる。
(第二実施形態)第一実施形態においては、アクセス種別の時間順序を検出の対象としていた。本実施形態では、連続するアクセス間の時間についての条件も加えることで、不適切アクセスをより詳細に検出するものである。以下、第一実施形態との相違点を中心に説明する。本実施形態の情報処理装置の機能ブロック図は図1に示す第一実施形態と同じであるが、各機能ブロックは、時間についての条件(時間条件)も取り扱う。
本実施形態において、CPUシミュレータ301は、アクセス通知時に、アクセス情報に加えて、経過サイクル数で示す時刻情報をアクセス管理部302に通知する。アクセス情報取得部304は、アクセス情報及び時刻情報をアクセスパターン分析部104に伝達する。
本実施形態において、判定情報109は、検出パターン情報に加えて時間条件情報も保持している。時間条件情報とは、検出パターン情報が示すアクセス種別の時間順序において、連続するアクセス間の時間についての条件を示す、つまり、検出対象とする時間の範囲を定義するものであり、時間を示す値tに対して以下の5つの定義方法が存在する。
(1)時間tと等しい
(2)時間t以上
(3)時間tより大きい
(4)時間t以下
(5)時間t未満
なお、時間は、例えば、CPUシミュレータ301におけるサイクル数で表す。
例えば、ライト、リードの順のアクセスであり、ライトとリード間の時間が3000サイクルより小さいパターンを検出したいとすると、検出パターンは、“10”であり、時間条件が“1−>2:t<3000”となる。ここで、“1−>2”は、直近のアクセスと、その前のアクセスとの時間間隔に対する時間条件であることを示している。図5は、本実施形態において判定情報109が保持する時間条件情報を説明する図である。なお、判定情報109が保持する検出パターン情報については第一実施形態と同様である。図5(a)に示す様に、アクセス#1〜#8と、その前のアクセスとの各時間#1〜#8について時間条件を設定するものとする。図5(b)は、この場合の時間条件情報のデータ構造の例である。図5(b)の基準時間は、検出する時間を判定する基準となる時間であり、判定関数は、検出する時間を判定するための基準時間に基づく範囲を決定するものである。例えば、図5(b)において、時間#1は、時間T1と等しい時間を条件とし、時間#2は、時間T2より大きいことを条件とし、時間#3は、時間T3以下を条件としている。なお、判定関数の値は、ポインタにより管理することもできる。なお、第一実施形態と同様に、マスクデータにより判定をマスクする時間間隔を選択することもできる。本実施形態において、基準時間が0である場合、そのデータはマスクされることを意味するものとする。
続いて、本実施形態における履歴情報107について説明する。なお、アクセス種別の履歴については第一実施形態と同様であるため、以下では、時間履歴情報について説明する。図6(a)は、各アドレス、つまりリソースに対する履歴パターンを示すデータ構造の概要を示す図である。なお、図6(a)においては、マスクデータは簡略化のため省略している。図6(a)において、プレ総サイクル数は、対応するアドレスに対する最新のアクセス時にCPUシミュレータ301から通知された時刻情報、つまり、経過サイクル数である。履歴情報保存部106は、更新通知を受けた場合、更新通知に含まれる時刻情報から、アクセスされたアドレスについてのプレ総サイクル数が示す時刻を減じることで、前回のアクセスから今回のアクセスまでの経過時間を求める。時間履歴更新ポインタは、対応するアドレスに新たなアクセスが発生した場合、経過時間を保存すべき位置を示している。図6(a)のアドレス0x0004は、時間履歴更新ポインタとして*pt4を保持している。図6(b)は、アドレス0x0004に対する時間履歴情報のデータ構造を示している。なお、図6(b)にはポインタ*pt4が示す位置を示している。例えば、アドレス0x0004に新たなアクセスが発生し、そのときのCPUシミュレータ301から通知された経過サイクル数が15000であるとすると、前回のアクセスからの経過時間は、プレ総サイクル数の値から1750となる。したがって、履歴情報保存部106は、図6(b)の*pt4の位置に1750を設定し、図6(a)のアドレス0x0004に対応するプレ総サイクル数の値を15000に更新し、時間履歴更新ポインタも図6(b)の時間#5が示す位置に更新する。さらに、履歴情報保存部106は、履歴データ及び図示しないマスクデータを、既に説明した通り更新する。なお、本実施形態において、図6(b)の時間履歴の値が0である場合、その履歴はマスクされていることを、つまり、判定情報109との比較には使用されことを意味するものとする。
比較部110は、第一実施形態と同じ履歴パターンと検出パターンの比較に加えて、時間履歴情報が示すアクセス間の時間間隔が、時間条件情報に合致するか否かを判定する。ここで、時間条件情報に合致するとは、時間条件情報が示す各アクセス間隔の条件の総てを時間履歴が満たしていることをいう。図7は、本実施形態において比較部110が実行する処理のフローチャートである。履歴情報107が更新されると、比較部110は、S11において、更新されたリソースについて、履歴パターン及び検出パターンを比較する。履歴パターンと検出パターンが一致する場合、比較部110は、S12において、更新されたリソースについて、履歴情報107が保持する時間履歴情報と、判定情報109が保持する時間条件情報を比較する。つまり、時間履歴情報が示す時間間隔の履歴が、時間条件情報が示す時間条件に合致するか否かを判定する。S12において合致する場合、比較部110は、S13において、警告出力部111に不適切アクセスの検出を通知して、警告出力部111に警告出力を行わせる。一方、S11又はS12において一致しない場合、処理を終了する。
例えば、あるアドレスへのアクセスにより、比較部110がS11においてパターンの一致を検出したものとする。また、当該アドレスに関し、履歴情報107の時間履歴が図8(a)に示す通りであり、判定情報109の時間条件が図8(b)に示す通りであるものとする。本実施形態において時間の値“0”はマスクされていることを示すため、判定情報109の時間条件は、時間#2に対する条件、つまり、その判定関数より時間の値が2000より大きいとの条件のみが有効である。図8(a)に示す様に時間#2の時間履歴は3000で2000より大きいため、比較部110は、S12において合致と判定することになる。
例えば、図4のプログラムに関し、アクセス種別の時間順序だけでは、正常なアクセスが不適切アクセスと検出される可能性がある。例えば、装置の起動時には、以下に示すような処理が一般的に行われている。
処理1:メモリ初期化
処理2:組み込みシステムのベース部分(OSやタスク等)の初期化及び起動
処理3:装置制御処理の実行開始
メモリ初期化がメモリに対する所定値の書込みのみで、読み出しを伴わない処理の場合、メモリ初期化終了時点で、総てのメモリ領域にはライトアクセスが1回だけ行われた状態となっている。その後、図4の関数test1を実行すると、変数yに対応するアドレスのアクセス種別は、ライトアクセスの連続となる。したがって、ライトアクセスが2回連続することを検出パターンとすると、メモリ初期化後の関数test1の実行は、正常な処理であるが、不適切アクセスと検出されることになる。
しかし、メモリ初期化後に実行される上記処理2は、通常、例えば、40000〜50000サイクル数程度の時間を要する。例えば、図4(a)のy=func1()の実行からif文の実行までが最大で100サイクルであり、関数inttest2の実行からy=func2()の実行までが最大で50サイクルであるものとする。この場合、例えば、連続するライトアクセス間に対して間隔が150サイクル以内との時間条件を追加することで、メモリ初期化後の関数test1の実行を不適切アクセスと検出することを防ぐことができる。なお、y=func1()の実行からif文の実行までに、割込み関数inttest2が呼び出された場合には、連続するライトアクセスが150サイクル以内で発生するため、不適切アクセスとして検出される。
以上、不適切アクセスを検出するための判定情報109に時間条件を設定することで不適切アクセスを的確に検出することができる。つまり、アクセス間の時間間隔の正当性も含めた動作検証を実施することができ、ソフトウエア動作検証の効率の向上をすることができる。
なお、実用上、アクセス間の時間条件を複数使用することは稀であり、特定のアクセス間の1つの時間条件を設ける場合が多いものと考えられる。よって、時間条件を1つに制限することで、効率的に処理を行うことができる。以下に、本実施形態の変形形態について説明する。例えば、ライト、リード、ライトの順のアクセスであって、最初のライトアクセスと、リードアクセスの間、つまり図5に示す時間#2が300サイクルより大きいとの時間条件を設定するものとする。この場合、判定情報109は、検出データとして“mmmmm101”を、マスクデータとして“11111000”を、時間データとして時間#2のみであることを示す“00000010”を、さらに、300より大きいとの時間条件を示す情報を保持する。また、各アクセスが発生する度に、履歴情報保存部106は、アクセスされたアドレスについて、前回のアクセスからの時間間隔を比較部110に通知する。比較部110は、通知された時間間隔が、時間条件である300より大きいか否かを判定し、大きい場合には1を、そうでない場合は0を履歴情報保存部106に通知する様に構成する。そして、履歴情報保存部106は、図6の時間履歴に代えて、時間条件を満足するか否かを2値で記録する。この構成により、図7のS12における時間条件の判定処理が簡略化され処理時間を短くすることができ、また、履歴情報107として保存すべきデータ量を削減できる。
(第三実施形態)あるアクセスパターンが複数回繰返された後、今まで繰返されていたアクセスパターンと異なるパターンでデータへのアクセスが行われた場合、処理が正しく行われていない可能性がある。本実施形態は、この様な不適切アクセスを効率よく捉えるものである。本実施形態においては、実用上必要十分な機能を満たす以下の3つの繰り返し種別を使用する。なお、以下の説明においてライトアクセスを“w”と、リードアクセスを“r”で表す。
種別1は、ある1つのアクセス種別の後に、2つ以内アクセス種別のパターンが所定回だけ繰り返すパターンである。なお、種別1において、最初の1つのアクセス種別を第1ブロックと呼び、その後の繰り返しパターンを第2ブロックと呼ぶ。また、第1のブロックのアクセス種別を第1のパターンと呼び、第2のブロックのアクセス種別の時間順序を第2のパターンと呼ぶ。種別1は、例えば、“w、rw、rw、・・・、rw”であり、この場合、最初の“w”が第1のパターンであり、その後に繰り返す“rw”が第2のパターンである。なお、繰り返し回数は1回であっても良い。
種別2は、2つ以内アクセス種別の組み合わせが所定回だけ繰り返した後、最後にある1つのアクセス種別が続くパターンである。なお、種別2において、最初に繰り返すパターンを第1ブロックと呼び、その後に続く1つのアクセス種別を第2ブロックと呼ぶ。また、第1のブロックのアクセス種別の時間順序を第1のパターンと呼び、第2のブロックのアクセス種別を第2のパターンと呼ぶ。種別2は、例えば、“rw、rw、・・・、rw、r”でありこの場合、最初に繰り返す“rw”が第1のパターンであり、最後の“r”が第2のパターンである。なお、繰り返し回数は1回であっても良い。
種別3は、2つ以内アクセス種別の組み合わせが所定回だけ繰り返すパターンである。検出パターン1は、例えば、“rw、rw、・・・、rw”であり、この繰り返しパターンを第1ブロックと呼ぶ。また、第1のブロックのアクセス種別の時間順序を第1のパターンと呼ぶ。
本実施形態における判定情報109は、検出パターンを第1ブロックと第2ブロックに分割し、各ブロックの検出パターンとその繰り返し回数で表現を行う。例えば、“wr、wr、wr、wr、wr、r”が検出パターンである場合、
第1ブロック:検出パターン“wr”、繰返し回数:5回
第2ブロック:検出パターン“r”、繰返し回数:1回
となる。
図9は、本実施形態において比較部110が管理するデータを示している。比較部110は、各アドレスについて、以下に説明する6つのデータを管理する。ブロック識別子は、現在の比較対象が、第1ブロックであるか第2ブロックであるかを示している。例えば、比較対象ブロックが第1ブロックである場合には“0”が、第2ブロックである場合には“1”が設定される。
更新位置ポインタは、新たなアクセスが発生したときに、そのアクセス種別を格納する履歴情報107の履歴データの位置を示すポインタである。また、比較開始位置ポインタは、履歴情報107の履歴データの検出パターンとの比較開始位置を示すポインタである。カウンタ#1は、第1ブロックについての一致回数のカウンタであり、カウンタ#2は、第2ブロックについての一致回数のカウンタである。
以下、具体例を用いて本実施形態の詳細について説明する。図10において、検出パターンは、“r、wr、wr”とする。つまり、第1ブロックが、繰り返し回数が1回の“r”であり、第2ブロックが、繰り返し回数が2回の“wr”である。図10において、“w”又は“r”が格納される四角は、履歴情報107が保持する履歴データである。また、Preで示す矢印は、更新位置ポインタが示す位置であり、Pcmpで示す矢印は、比較開始位置ポインタが示す位置である。さらに、比較ブロックは、比較対象のブロックのパターンを示している。つまり、なお、比較対象のブロックはブロック識別子で特定される。
図10(a)は、更新通知により、ライトアクセスが初めて行われた状態を示している。図10(a)において、PreとPcmpの差は1であり、比較ブロックの要素数と等しいため、比較部110は、履歴データの“w”と比較ブロックの“r”を比較する。結果は、不一致であるので、比較部110は、比較ブロックである第1ブロックに対応するカウンタ#1を“0”にクリアし、Pcmpを1つ後、つまり、図10(a)の1つ右側に移動させる。
新たな、リードアクセスの発生により、新たなデータが追加されると、図10(b)に示す状態となる。図10(b)において、PreとPcmpの差は1であり、比較ブロックの要素数と等しいため、比較部110は、履歴データの“w”と比較ブロックの“r”を比較する。比較部110は、履歴データ“r”が比較ブロックと同一であるため、カウンタ#1を1つカウントアップする。さらに、比較部110は、カウンタ#1をカウントアップしたことにより、第1ブロックの繰り返し回数とカウンタ#1の値を比較する。第1ブロックの繰り返し回数とカウンタ#1の値が等しいため、比較部110は、ブロック識別子の値を、第2ブロックを示す値に変更する。さらに、Pcmpを、比較ブロックの要素数、つまり、この場合は1だけ後に移動させる。
新たな、ライトアクセスの発生により、新たなデータが追加されると、図10(c)に示す状態となる。図10(c)において、PreとPcmpの差は1であり、比較ブロックの要素数より小さいため、比較部110は比較を行わない。新たな、リードアクセスの発生により、新たなデータが追加されると、図10(d)に示す状態となる。図10(d)において、PreとPcmpの差は2であり、比較ブロックの要素数と同じであるため、比較部110は、Pcmpから比較ブロックの要素数に等しい履歴データ“wr”と比較ブロックの“wr”を比較する。比較部110は、履歴データ“wr”が比較ブロックと同一であるため、カウンタ#2を1つカウントアップする。さらに、比較部110は、カウンタ#2をカウントアップしたことにより、第2ブロックの繰り返し回数とカウンタ#2の値を比較する。カウンタ#2の値は1であり、第2ブロックの繰り返し回数である2より小さいため、比較部110は、ブロック識別子の値をそのままとする。その後、Pcmpを、比較ブロックの要素数、つまり、この場合は2だけ後に移動させる。
新たな、ライトアクセスの発生により、新たなデータが追加されると、図10(e)に示す状態となる。図10(e)において、PreとPcmpの差は1であるため比較部110は比較を行わない。その後、新たな、リードアクセスの発生により、新たなデータが追加されると、図10(f)に示す状態となる。図10(f)において、PreとPcmpの差は2であり、比較ブロックの要素数と同じであるため、比較部110は、Pcmpから比較ブロックの要素数に等しい履歴データ“wr”と比較ブロックの“wr”を比較する。比較部110は、履歴データ“wr”が比較ブロックと同一であるため、カウンタ#2を1つカウントアップする。さらに、比較部110は、カウンタ#2をカウントアップしたことにより、第2ブロックの繰り返し回数とカウンタ#2の値を比較する。カウンタ#2の値は2であり、第2ブロックの繰り返し回数である2と等しいため、比較部110は、第1ブロック及び第2ブロック共に検出パターンの検出を行ったと判定する。よって、比較部110は、警告出力部111に不適切アクセスの検出を通知する。
図11は、他の具体例を示しており、検出パターンは、図10と同じく“r、wr、wr”とする。また、図11(a)に示す状態においては、第1ブロックの1回の繰り返しは検出済であり、第2ブロック“wr”についても既に1回検出している。新たなライトアクセスの発生により図11(a)に示す状態となったとき、比較部110は、Pcmpから比較ブロックの要素数に等しい履歴データ“rw”と比較ブロックの“wr”を比較する。比較部110は、不一致を検出するため、比較ブロックに対応するカウンタ#2を0に初期化する。さらに、比較部110は、ブロック識別子に第1ブロックを示す値を設定する。なお、Pcmpの移動は行わない。したがって、図11(b)に示す状態となる。
図11(b)においては、PcmpとPreとの差が比較ブロックの要素数以上であるため、比較部110は、Pcmpから比較ブロックの要素数に等しいデータを抽出して比較ブロックと比較する。比較部110は、抽出したデータ“r”が比較ブロックと同一であるため、カウンタ#1を1つカウントアップする。さらに、比較部110は、カウンタ#1をカウントアップしたことにより、第1ブロックの繰り返し回数とカウンタ#1の値を比較する。第1ブロックの繰り返し回数とカウンタ#1の値が等しいため、比較部110は、ブロック識別子の値を、第2ブロックを示す値に変更する。さらに、Pcmpを、比較ブロックの要素数、つまり、この場合は1だけ後に移動させる。したがって、図11(c)に示す状態となる。
その後、リードアクセスが発生すると、図11(c)に示す状態となる。この状態において比較部110は、比較ブロックとの一致を検出し、カウンタ#2を1にカウントアップする。さらに、その後、リードアクセス及びライトアクセスが発生すると、図11(d)に状態となる。この状態において比較部110は、第2ブロックとの2回目の一致を検出し、既に述べた様に、警告出力部111に通知を行う。
図12において、検出パターンは、“wr、wr、r”とする。つまり、第1ブロックが、繰り返し回数が2回の“wr”であり、第2ブロックが、繰り返し回数が1回の“r”である。
図12(a)は、ライトアクセスが2回連続で生じた後の状態であり、比較部110は比較ブロックとの一致を検出しない。したがって、カウンタ#1を0に設定して、Pcmpを1つだけ後に移動させる。図12(b)は、その後にリードアクセスが発生した後の状態である。比較部110は、比較ブロックとの一致を検出し、よって、カウンタ#1を1とする。また、一致の検出によりPcmpを比較ブロックの要素数である2だけ後に移動させる。なお、カウンタ#1の値は繰り返し回数の2に達していないため、ブロック識別子の変更は行わない。
その後、ライトアクセスとリードアクセスが発生して、図12(c)に示す状態となったものとする。比較部110は、比較ブロックとの一致を検出し、よって、カウンタ#1を2とする。また、一致の検出によりPcmpを比較ブロックの要素数である2だけ後に移動させる。さらに、カウンタ#1の値が繰り返し回数の2に達したため、ブロック識別子を第2ブロックに変更する。その後、リードアクセスが発生すると、図12(d)に示す状態となる。この状態において、比較部110は、比較ブロックとの一致を検出し、よって、カウンタ#2を1とする。さらに、カウンタ#1の値が繰り返し回数の1に達したため、比較部110は、警告出力部111に通知を行う。
図13において、検出パターンは、図12と同じく“wr、wr、r”とする。つまり、第1ブロックが、繰り返し回数が2回の“wr”であり、第2ブロックが、繰り返し回数が1回の“r”である。図13(a)に示す状態においては、第1ブロックの2回の繰り返しは検出済である。新たなライトアクセスの発生により図11(a)に示す状態となったとき、比較部110は、比較ブロックとの一致を検出しない。したがって、カウンタ#2を0に初期化する。さらに、比較部110は、ブロック識別子に第1ブロックを示す値を設定する。なお、Pcmpの移動は行わない。その後にリードアクセスが発生すると、図13(b)に示す状態となる。
図13(b)に示す状態において、比較部110は、比較ブロックとの一致を検出する。よって、カウンタ#1をカウントアップし、カウンタ#1は3になる。また、一致の検出によりPcmpを比較ブロックの要素数である2だけ後に移動させる。また、カウンタ#1の値が繰り返し回数の2を超えているため、ブロック識別子を第2ブロックに変更する。その後にリードアクセスが発生すると、図13(c)に示す状態となる。図13(c)に示す状態において、比較部110は、比較ブロックとの一致を検出する。よって、カウンタ#2を1にカウントアップする。この状態において比較部110は、第2ブロックとの1回目の一致を検出し、既に述べた様に、警告出力部111に通知を行う。
図14は、本実施形態において、比較部110が実行する比較処理のフローチャートである。なお、図14において、CountNは、比較ブロック、つまり、ブロック識別子が示すブロックに対応するカウンタを示す。具体的には、CountNは、ブロック識別子が第1ブロックを示しているときはカウンタ#1を、第2ブロックを示しているときはカウンタ#2を示している。処理の開始により、S21において、比較部110は、カウンタ#1及びカウンタ#2を初期化する。また、比較ブロックを第1ブロックに設定する。つまり、図9のブロック識別子に“0”を設定する。続いて、S22において、比較部110は、比較ブロックの要素数をαに代入する。続いて、S23において、更新位置ポインタPreから比較開始位置ポインタPcmpを減じた値が要素数α以上であるかを判定する。要素数未満である場合には、当該アドレスに対する新たなアクセスが発生するまで待機する。S23において更新位置ポインタPreから比較開始位置ポインタPcmpを減じた値が要素数以上になると、比較部110は、S24において、比較開始位置ポインタPcmpから要素数に等しいデータを抽出して比較ブロックとの比較を行う。比較部110は、S25にて比較結果を判定し、一致している場合には、S26においてCountNをカウントアップし、比較開始位置ポインタPcmpを要素数αだけ進める。
その後、比較部110は、S27において、CountNの値と比較ブロックの繰り返し回数を比較し、CountNが繰り返し回数未満であると、S23からの処理を繰り返す。一方、CountNが繰り返し回数以上であると、比較部110は、S28において、現在の比較ブロックが第2ブロックであるか否かを判定し、現在の比較ブロックが第2ブロックであると、検出パターンとの一致を検出して処理は終了する。一方、現在の比較ブロックが第1ブロックであると、S29において比較ブロックを第2ブロックに変更してS22からの処理を繰り返す。
一方、S25において、比較結果が不一致である場合、比較部110は、S30において、CountNを0にクリアし、S31において、現在の比較ブロックが、第2ブロックであるか否かを判定する。第2ブロックである場合、比較部110は、S33において比較ブロックを第1ブロックに変更し、第1ブロックである場合、比較部110は、S32において比較開始位置ポインタPcmpを1だけ進める。その後、比較部110は、S22からの処理を繰り返す。
以上の処理により、検出パターン1及び検出パターン2のアクセスを検出することができる。なお、検出パターン3は、図14の処理において、第2ブロックについての部分を省略すればよい。つまり、第2ブロックについては、要素数0として、S25における比較結果を常に一致とすればよい。
例えば、ある変数に対してライトとリードが繰返し行われる場合において、何らかの原因によりリード処理が行われない状態を、本実施形態では有利に検出することができる。この様に繰返しパターンを検出パターンとすることで、不適切アクセスとして検出したいパターンを、柔軟に設定でき、効率的に不適切アクセスを検出することができる。なお、第1ブロック及び第2ブロックの各パターンについて、1つ又は2つのパターンであるとしたが、1つ以上の任意数のパターンとすることができる。
(第四実施形態)第一実施形態から第三実施形態においては、検出処理の実行に条件を設けていなかった。しかしながら、パターンの一致を無条件に検出すると、ユーザにとって不要な情報が多数含まれ、本来検出したい不適切アクセスの特定が困難になり得る。本実施形態においては、検出を実行する条件である検出条件を設定して、検出条件に合致した場合に不適切アクセスを検出するための比較処理等を行う。このため、本実施形態においては、図15に示す様に、アクセス管理部302に、トリガ検出部308を設け、検出条件定義情報309を予め保存しておく。それ以外は図1と同様である。
検出条件定義情報309は検出条件を定義するものであり、検出条件としては、例えば、検出対象リソース範囲、検出対象実行コード範囲及び実行開始/終了トリガを含んでいる。検出対象リソース範囲は、所定のリソースに対するアクセスを検出対象とする場合に設定し、例えば、リソースを示すアドレスにてその範囲を指定する。検出対象実行コード範囲は、プログラム上の所定の範囲にある命令によるアクセスを検出対象とするものであり、例えば、アクセス命令のプログラムカウンタ等によりその範囲を指定する。検出の実行開始/終了トリガは、検出処理の開始、又は、終了条件を指定するパラメータで、条件は検出処理の開始、又は、終了のトリガとなるリソースで発生するイベントにより特定する。
図16は、検出条件定義情報309の例示的なデータ構造である。図16(a)は、検出対象リソース範囲であり、開始アドレス及び終了アドレスと、条件情報により検出対象のリソース範囲を特定している。ここで、条件情報とは、開始アドレスから終了アドレスの範囲を検出対象とするのか、開始アドレスから終了アドレス以外の範囲を検出対象とするのかを示す情報である。また、有効フラグ情報は、この条件が有効であるか否かを、つまり、この条件を利用するか否かを示している。図16(b)は、検出対象実行コード範囲であり、アドレスが例えば、プログラムカウンタの値等、プログラムのコード範囲を示している以外は図16(a)の検出対象リソース範囲と同様である。
図16(c)は実行開始/終了トリガであり、トリガ情報は、リソースの状態変化、つまりイベントを示す情報により規定され、トリガの発生により値が書き換えられるアドレス等を示す情報を含んでいる。また、トリガ条件とは、トリガが発生したと判定できる条件、例えば、値の範囲を含んでいる。また、種別情報は、開始又は終了を示す値を有している。種別情報が開始を示している場合には、検出開始のトリガを示す開始トリガ情報となる。一方、種別情報が終了を示している場合には、検出終了を示す終了トリガ情報となる。なお、有効フラグは、検出対象データ範囲と同様である。
トリガ検出部308は、CPUシミュレータ301、装置シミュレータ306及びメモリシミュレータ307間でのデータの入出力を監視し、検出条件定義情報309で定義される実行開始/終了トリガを検出する。トリガを検出した場合には、アクセス情報取得部304にトリガの検出を通知する。本実施形態において、アクセス情報取得部304は、CPUシミュレータ301によるリソースへのアクセスが、検出条件定義情報309で特定される条件を満たす場合に、アクセスパターン分析部104に更新通知を行う。具体的には、検出対象リソース範囲が指定されている場合には、アクセスが、検出対象リソース範囲で指定されるリソースである場合に更新通知を行う。また、検出対象実行コード範囲が指定されている場合には、アクセスが、検出対象実行コード範囲で指定されるコードの命令によるものである場合に更新通知を行う。また、開始トリガが指定されている場合には、実行開始トリガ検出後においてのみ更新通知を行う。さらに、終了トリガが指定されている場合には、終了トリガを検出前にのみ更新通知を行う。なお、複数の条件を組み合わせることも当然可能である。
続いて、本実施形態における不適切アクセス検出の画像形成装置への適用について説明する。図17は、模擬対象装置である画像形成装置の概略的な構成図である。なお、図17は、説明に必要な要素のみを示すものである。カートリッジ2003は、感光ドラム2004、一次帯電器2107、トナー容器2106を含む現像部といった、消耗材を1つのユニットにまとめたもので、制御プログラムにより寿命の測定が行われる仕組みとなっている。このため、カートリッジ2003には、トナー容器2106のトナーの量を検出するトナー残量センサ2105と、カートリッジメモリ2108が設けられている。
制御部2101は、CPUシミュレータ301の模擬対象であり、ドラムモータユニット2103を制御することで、カートリッジ2003のメカ機構を駆動する。また、制御部2101は、高圧ユニット2104を制御して、画像形成のための電圧をカートリッジ2003のトナー容器2106と一次帯電器2107に供給する。また、制御部2101には、ADコンバータ2111を介して、トナー残量センサ2105が検出するトナー容器2106のトナー残量を示す信号が入力される。さらに、制御部2101は、カートリッジメモリインタフェース2112を介してカートリッジメモリ2108に接続される。
制御部2101は、ドラムモータユニット2103を制御して、感光ドラム2004を回転させ、高圧ユニット2104を制御して、一次帯電器2107により、感光ドラム2004を帯電させる。制御部2101は、感光ドラム2004の寿命を、ドラムの回転時間と一次帯電器2107からの電圧の印加時間から所定の計算式によって求める。そのため、感光ドラム2004の回転時間、一次帯電器2107による電圧印加時間をメインメモリ2102内に保存する。
また、トナー残量センサ2105は、高圧ユニット2104から電圧が印加されることにより生じるトナー容器2106の電圧値を出力し、制御部2101は、この電圧値からトナー残量を求める。トナー残量を求める計算式はトナー残量の値によって変化させる。つまり、トナー残量の計算には、トナー残量自体が影響する。
カートリッジメモリ2108には、上記、感光ドラム2004の寿命や、トナー残量を計算するための各種データが保存されている。なお、カートリッジメモリ2108は、例えば、シリアル番号といった、識別情報を保持している。制御部2101は、メインメモリ2102が保持している識別情報と、カートリッジメモリ2108内の識別情報を比較することで、カートリッジ2003の交換を検出する。制御部2101は、カートリッジ2003の交換を検出すると、カートリッジメモリ2108内の上記各種データをメインメモリ2102に記憶する。なお、制御部2101は、例えば、カートリッジ交換用ドアの開閉を検出すると、カートリッジメモリ2108の識別情報と、メインメモリ2102の識別情報の比較を行う。
したがって、カートリッジメモリ2108の交換が検出された場合、メインメモリ2102が保存している各種データへのアクセスは、ライト、リードの順になる。しかし、制御プログラムに誤りがあり、カートリッジ交換後の各種データの初期化が正しく行われない場合、アクセスは、リード、ライトの順となる。
この場合、例えば、検出条件定義情報309には、検出対象リソース範囲として、メインメモリ2102の画像形成装置のトナー残量を計算するためのデータが保存されている領域を設定する。そして、実行開始トリガについては、メインメモリ2102において、カートリッジ識別情報が現在とは異なる値になったとの条件を設定する。例えば、メインメモリ2102において、カートリッジの識別情報を保存するアドレスが“0x0470”であり、現在のカートリッジの識別情報が“1234567890”であるものとする。この場合、図16(c)のトリガ情報には、0x0470”を、トリガ条件には“1234567890”以外の値との条件を、種別情報には“開始”を、有効フラグには“有効”を設定する。
以上の処理により、検出パターンとして、“mmmmmmmm0”を設定する、ここで、“0”は第一実施形態と同じくリードアクセスを意味する。これにより、カートリッジ交換後における最初の自己診断関係のデータへのアクセスにおいて、リードアクセスが発生していることを検出することができる。
初期化処理等において、処理すべきデータが多い場合、デバッガの実行トレース等を使用し、プログラムの処理フロー上で初期化処理を確認した場合、個々のデータに対する設定漏れを見逃す恐れがある。一方、メモリトレース等を使用して所定の条件におけるデータ設定状況を個々のデータに対して行うことは、作業工数が多くなり、見落とし等が生じ得る。本実施形態においては、個別のデータに着目することなく問題の見落としを防ぐことができ、問題の早期発見が可能となる。
なお、本実施形態においては、アクセス情報取得部304が検出条件定義情報309に基づきアクセスパターン分析部104に更新通知を行うか否かを判断している。しかしながら、検出条件定義情報309をアクセスパターン分析部104に設け、履歴情報保存部106が、検出条件定義情報309の検出条件に合致する場合にのみ履歴情報107にデータを保存する構成とすることもできる。さらに、検出条件のうち、検出対象リソース範囲については、そのリソース範囲についてのみ、比較部110が一致又は不一致を判定する構成とすることもできる。さらに、検出条件のうち、検出対象リソース範囲については、比較部110が一致を検出したとしても、そのデータが、検出対象ではない場合、警告出力部111が警告出力をマスクする構成とすることもできる。さらに、比較部110は、あるアドレスについて検出パターンに最初に一致したときに警告出力部111に警告出力を行わせ、以後の検出についてはマスクする構成としても良い。
なお、本実施形態は、第二実施形態に示す時間条件と組み合わせることも、第三実施形態に示す繰り返しパターンの検出を使用して行うことも当然可能である。
(第五実施形態)第一実施形態から第四実施形態は、CPUシミュレータ301及びアクセス管理部302を設ける構成であり、これらをコンピュータシステム201上で実現するものであった。本実施形態においては、CPUシミュレータ301の代わりに、ハードウェアで構成されたエミュレータを使用する。
図18は、本実施形態における情報処理装置の機能構成図である。本実施形態では、図2のコンピュータシステム201に加えて、インサーキットエミュレータ2201と、制御部を除いた制御対象装置2212がハードウェア構成として加わる。インサーキットエミュレータ2201は、第一実施形態から第四実施形態におけるCPUシミュレータ301及びメモリシミュレータ307に相当するものである。また、制御対象装置2212は、第一実施形態から第四実施形態における装置シミュレータ306に対応するものである。また、本実施形態では、コンピュータシステム201は、アクセスパターン分析部104及びエミュレータ制御部2202として機能する。そして、制御対象装置2212と、インサーキットエミュレータ2201と、エミュレータ制御部2202がシミュレータ部101を構成する。なお、制御対象装置2212を使用する代わりに、第一実施形態から第四実施形態と同様に、コンピュータシステム201を装置シミュレータ306として機能させる形態とすることもできる。
インサーキットエミュレータ2201の評価用CPU2203は、制御対象装置のCPUの動作を模擬するCPUコア2206を備えており、制御プログラムをメインメモリ2208に読み込んで実行する。つまり、CPUコア2206は、第一実施形態から第四実施形態のCPUシミュレータ301に相当する機能ブロックである。また、メインメモリ2208は、制御対象装置のメインメモリに対応し、第一実施形態から第四実施形態のメモリシミュレータ307に相当する機能ブロックである。周辺回路2207は制御対象装置のCPUの周辺回路と同様のものであり、制御対象装置2212とのインタフェースである。なお、上述した様に、制御対象装置2212は、その制御部を除く部分のみが利用される。
トレース部2205は、CPUコア2206によりリソースのアクセス情報を取得してトレース情報として記録する。トレース情報は一定の量の情報であり、新たな情報が取得されるごとに古い情報から破棄される。制御用CPU2204は、インサーキットエミュレータ2201のデバッグ機能を制御するもので、エミュレータ制御部2202と通信を行い、各種デバッグ処理を行う。具体的には、エミュレータ制御部2202からの指示に従い評価用CPU2203及びトレース部2205に対して各種設定、指示を行うと共に、必要に応じて評価用CPU2203、トレース部2205から取得した情報をエミュレータ制御部2202に通知する。制御用CPU2204による、トレース情報通知の条件は評価用CPU2203のプログラム実行に伴う各種イベントの発生で指定できる様に構成される。例えば、一定時間間隔、特定のプログラムカウンタの命令の実行、特定のアドレスのデータへのアクセス、ブレークの発生、ステップ実行の処理毎等である。
エミュレータ制御部2202のアクセス情報管理部2210は、インサーキットエミュレータ2201から所定の期間のトレース情報を取得してアクセス履歴情報2211に保持する。ここで、アクセス履歴情報2211は、装置制御プログラムの実行に伴い発生するリソースへのアクセスの履歴を、アクセス対象に関係なく発生順に時系列に並べた情報である。さらに、アクセス情報管理部2210は、アクセスパターン分析部104に対して、リソース毎のアクセス情報を、更新通知により通知する。つまり、アクセス毎に、アクセス情報をアクセスパターン分析部104に通知する。
本実施形態は、第一実施形態から第四実施形態と異なり、制御プログラムの実行等を、プログラムにより実現するCPUシミュレータ301ではなく、ハードウェアであるインサーキットエミュレータ2201を使用する。したがって、第一実施形態から第四実施形態の様に、アクセス発生の都度、アクセスパターン分析部104の分析が終了するまで装置制御プログラムの実行を停止することはできない。したがって、本実施形態では、エミュレータ制御部2202を設け、インサーキットエミュレータ2201からのトレース情報を蓄積すると共に、アクセスパターン分析部104に、発生順にアクセス情報を1つずつ通知している。なお、アクセスパターン分析部104での処理は、第一実施形態から第四実施形態と同様である。
まずインサーキットエミュレータ2201からのトレース情報取得処理について説明する。アクセス情報管理部2210は、制御用CPU2204に対し、周期的にトレース情報を通知する様に制御用CPUに要求する。この周期は、トレース情報が欠落しない間隔とし、トレース部2205が保持するトレース情報の量と、データアクセスの最小間隔から決定できる。これにより、制御用CPU2204は、指定された周期でトレース情報をエミュレータ制御部2202に通知する。アクセス情報管理部2210は、通知されたトレース情報をアクセス履歴情報2211に保存する。なお、このとき、以前に受け取ったトレース情報との重複部分は削除する。
本実施形態において、アクセス履歴情報2211は、図19に示す様なリングバッファである。アクセス履歴情報2211は、D0〜Dmax−1のmax個の領域を有し、データ入力のための更新領域ポインタと、データ出力のための参照領域ポインタとを備えている。各領域に保存される情報は、アクセス情報である。また、時間条件を設ける場合には、アクセス発生時の総サイクル数情報も含まれる。
アクセス情報管理部2210は、新たな情報の保存に際しては更新領域ポインタの示す領域から発生順に保存し、保存された情報に対応する数だけ更新領域ポインタを進める。また、アクセス情報管理部2210は、情報の参照に際しては参照領域ポインタの示す領域から参照し、参照する度に参照領域ポインタを1つ進める。ただし、参照領域ポインタと更新領域ポインタが同じ領域を示している場合には、参照データなしとし、参照領域ポインタを進めない。更新領域ポインタ、参照領域ポインタ共にDmax−1の次にはD0に戻る。
アクセス情報管理部2210における処理を図20のフローチャートに従い説明する。まず、S41で、アクセス情報管理部2210は、参照領域ポインタをD0の領域を示すように初期化する。次に、S42で、アクセス情報管理部2210は、参照領域ポインタと更新領域ポインタを比較し、一致する場合には、アクセスパターン分析部104に未通知のアクセス情報が存在しないと判断して待機する。S42で、参照領域ポインタが更新領域ポインタと一致しない場合、アクセスパターン分析部104に更新通知と共にアクセス情報を通知する。なお、ここで通知されるアクセス情報は、参照領域ポインタが示す情報である。その後、アクセス情報管理部2210は、S44でアクセスパターン分析部104からの分析終了通知を受信するまで待機する。アクセス情報管理部2210は、分析終了通知を受けると、S45において、参照領域ポインタを1つだけ進めて、S42からの処理を繰り返す。
以上の処理により、アクセスパターン分析部104での処理待ちを、アクセス情報管理部2210が吸収することになる。すなわち、評価用CPU2203による制御プログラムの実行と、アクセスパターン分析部104の不適切アクセスの検出処理を非同期に行うことができる。
これにより、評価用CPU2203におけるアクセスの発生間隔よりもアクセスパターン分析部104における検出処理時間が長くなった場合でも、評価用CPU2203による制御プログラムの実行を継続できる。なお、インサーキットエミュレータ2201で取得したトレース情報を使用する形態にて説明したが、命令実行履歴のトレース情報を使用することもできる。この場合、アクセス情報管理部2210は、制御プログラムの命令コード情報から取得したトレース情報を解析し、データアクセス履歴を検出した上でアクセス履歴情報2211に保存する。この場合、アクセスを行ったプログラムのプログラムカウンタを特定することも可能となり、警告情報としてプログラムの実行個所を示すことや、第四実施形態で説明した検出対象実行コード範囲の特定に利用できる。本実施形態においても、第四実施形態と同様に、検出条件に基づき、検出動作を制御することができる。
(その他の実施形態)また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。