(57)【特許請求の範囲】
【請求項１】
制御プログラムを実行する実行手段を含み、前記制御プログラムの実行により前記実行手段がリソースにアクセスする場合、該リソースを特定するリソース特定情報及び該アクセスのアクセス種別がデータの読み込みであるか書き込みであるかを示す情報を含むアクセス情報を出力するシミュレータ手段と、
前記アクセス情報を受け取り、各リソースに対するアクセス種別の履歴を示す履歴パターン情報を保存する履歴情報保存手段と、
検出すべきアクセス種別の時間順序を示す検出パターン情報を保持し、前記履歴情報保存手段が前記アクセス情報を受け取ることにより、該アクセス情報のリソース特定情報が示すリソースの履歴パターン情報を更新すると、該リソースの履歴パターン情報と、前記検出パターン情報を比較することで、前記検出パターン情報が示すアクセス種別の時間順序でのリソースへのアクセスを検出する検出手段と、
を備えていることを特徴とする情報処理装置。
【請求項２】
前記シミュレータ手段は、前記アクセス情報と共に時刻情報を出力し、
前記履歴情報保存手段は、前記時刻情報から、各リソースについて、連続するアクセス間の時間を判定して時間履歴情報として保存し、
前記検出手段は、前記検出パターン情報が示すアクセス種別の時間順序に関し、連続するアクセス間の時間についての条件を示す時間条件情報を保持しており、前記履歴情報保存手段がリソースの履歴パターン情報を更新すると、該リソースの時間履歴情報と、前記時間条件情報をさらに比較することで、前記検出パターン情報が示すアクセス種別の時間順序でのアクセスであり、かつ、連続するアクセス間の時間が、前記時間条件情報が示す条件に合致しているアクセスを検出することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記履歴パターン情報は、アクセス種別の履歴を示す固定長の履歴データ及び該履歴データの各履歴が有効であるか無効であるかを示すマスクデータで構成され、
前記検出パターン情報は、アクセス種別の時間順序を示す固定長の検出データ及び該検出データが示すアクセス種別の時間順序のうち、前記履歴データとの比較に使用しない時間順序の位置を示すマスクデータで構成され、
前記履歴データ及び前記検出データは、アクセス種別としてデータの読み込みと書き込みとを１ビットデータで表し、前記アクセス種別を示す前記固定長のビット列における一方の側から他方の側へと時間順序が古くなり、
前記履歴情報保存手段は、受け取るアクセス情報が前記固定長を超えると、時間順序の最も古いデータをビット列から切り捨て、新しいデータを加えるように前記履歴データを管理し、
前記検出手段は、前記履歴パターン情報と前記検出パターン情報との論理演算により、前記検出パターン情報が示すアクセス種別の時間順序でのリソースへのアクセスを検出することを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
前記検出パターン情報は、１つ以上のアクセス種別のパターンを示す第１のパターンと、１つ以上のアクセス種別のパターンを示す第２のパターンと、前記第２のパターンの繰り返し回数とを示す情報を含むことを特徴とする請求項１から３のいずれか１項に記載の情報処理装置。
【請求項５】
前記検出パターン情報は、１つ以上のアクセス種別のパターンと、その繰り返し回数とを示す情報を含むことを特徴とする請求項１から３のいずれか１項に記載の情報処理装置。
【請求項６】
前記シミュレータ手段は、アクセスするリソースが予め定められたリソースである場合にアクセス情報を出力することを特徴とする請求項１から５のいずれか１項に記載の情報処理装置。
【請求項７】
前記履歴情報保存手段は、前記アクセス情報のリソース特定情報が示すリソースが、予め定められたリソースである場合に履歴パターン情報を保存することを特徴とする請求項１から５のいずれか１項に記載の情報処理装置。
【請求項８】
前記検出手段は、予め定められたリソースについて、前記検出パターン情報が示すアクセス種別の時間順序でのアクセスを検出することを特徴とする請求項１から５のいずれか１項に記載の情報処理装置。
【請求項９】
前記シミュレータ手段は、リソースへのアクセスが、前記制御プログラムの予め定められた部分の実行により生じた場合にアクセス情報を出力することを特徴とする請求項１から８のいずれか１項に記載の情報処理装置。
【請求項１０】
前記シミュレータ手段は、リソースの状態変化を示す開始トリガ情報を保持しており、前記開始トリガ情報が示すリソースの状態変化の検出後に生じるリソースへのアクセスについて、アクセス情報を出力することを特徴とする請求項１から９のいずれか１項に記載の情報処理装置。
【請求項１１】
前記シミュレータ手段は、リソースの状態変化を示す終了トリガ情報を保持しており、前記終了トリガ情報が示すリソースの状態変化の検出前に生じるリソースへのアクセスについて、アクセス情報を出力することを特徴とする請求項１から１０のいずれか１項に記載の情報処理装置。
【請求項１２】
前記実行手段は、
前記制御プログラムを実行するエミュレータと、
前記エミュレータが前記制御プログラムの実行によりアクセスしたリソースについてのアクセス情報を、アクセスの発生順に保存し、前記保存したアクセス情報から１つのアクセス情報を前記発生順に前記履歴情報保存手段に通知するエミュレータ制御手段と、
を備え、
前記エミュレータ制御手段は、１つのアクセス情報を前記履歴情報保存手段に出力し、前記検出手段から履歴パターン情報と検出パターン情報の比較が終了したことの通知を受けた後において、当該１つのアクセス情報の次のアクセス情報を前記履歴情報保存手段に通知することを特徴とする請求項１から１１のいずれか１項に記載の情報処理装置。
【請求項１３】
請求項１から１２のいずれか１項に記載の情報処理装置としてコンピュータを機能させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、装置の制御プログラムの動作検証を行う情報処理装置に関する。
【背景技術】
【０００２】
装置の制御プログラムの開発においては、バグの発生を防ぐことが重要である。しかしながら、制御プログラムには、制御対象装置の複数のユニットを並列に処理するマルチタスク処理や割込み処理が多用されており、処理の複雑さからバグの発生を防ぐことは難しい。また、制御プログラムに対しては、限られた資源で効率的な処理が要求されるため、プログラムの視認性を向上させる様に冗長度を高くすることは制限される。したがって、制御プログラムにおいて、データ及び周辺ハードウエア（リソース）へのアクセス手順が設計通りに実装（コーディング）されているかの検証が困難となり、適切でないアクセスによる問題が残存する場合も生じ得る。
【０００３】
このため、特許文献１は、複数ＣＰＵでのプログラム動作をＣＰＵ毎に別スレッドでシミュレーションすることで、同一リソースに対する重複アクセスを検出することを開示している。特許文献２は、制御プログラムの実行に伴う変数領域のメモリに対するアクセスを検証することを開示している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−０３２１９７号公報
【特許文献２】特開２０００−０２９７３９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
リソースへの不適切なアクセスのパターンは様々なものが想定される。例えば、制御対象装置に対する制御レジスタにデータの読み出しと書き込みを交互に行わなければならない仕様である場合に、制御レジスタに対する交互パターン以外のアクセスは不適切アクセスである。また、所定の条件の発生により所定のデータを初期化する必要がある場合において、所定の条件の発生後であって、所定のデータの初期化前にこのデータにアクセスすることは、不適切アクセスである。しかしながら、特許文献１は、同一リソースへの重複アクセスの検出を開示するのみである。また、特許文献２の構成では、データ参照とデータ設定のいずれが先に行われたかを検証可能であるが、それ以外のアクセスの検証はできない。
【０００６】
本発明は、装置の制御プログラムの動作検証を行い、リソースへの不適切なアクセスを検出する情報処理装置と、当該情報処理装置としてコンピュータを機能させるプログラムを提供するものである。
【課題を解決するための手段】
【０００７】
本発明による情報処理装置は、制御プログラムを実行する実行手段を含み、前記制御プログラムの実行により前記実行手段がリソースにアクセスする場合、該リソースを特定するリソース特定情報及び該アクセスのアクセス種別がデータの読み込みであるか書き込みであるかを示す情報を含むアクセス情報を出力するシミュレータ手段と、前記アクセス情報を受け取り、各リソースに対するアクセス種別の履歴を示す履歴パターン情報を保存する履歴情報保存手段と、検出すべきアクセス種別の時間順序を示す検出パターン情報を保持し、前記履歴情報保存手段が前記アクセス情報を受け取ることにより、該アクセス情報のリソース特定情報が示すリソースの履歴パターン情報を更新すると、該リソースの履歴パターン情報と、前記検出パターン情報を比較することで、前記検出パターン情報が示すアクセス種別の時間順序でのリソースへのアクセスを検出する検出手段と、を備えていることを特徴とする。
【発明の効果】
【０００８】
ユーザが定義した任意の検出パターンにより、不適切なアクセスを容易に発見できるようになる。
【図面の簡単な説明】
【０００９】
【図１】一実施形態による情報処理装置の機能構成図。
【図２】一実施形態による情報処理装置のハードウェア構成図。
【図３】一実施形態によるアクセス管理部における処理のフローチャート。
【図４】一実施形態による不適切アクセス検出の説明図。
【図５】一実施形態による時間条件情報の説明図。
【図６】時間履歴情報のデータ構造の概要を示す図。
【図７】一実施形態において比較部が実行する処理のフローチャート。
【図８】一実施形態における時間条件情報が示す条件との合致の判定の説明図。
【図９】一実施形態において比較部が管理するデータを示す図。
【図１０】一実施形態における比較部での検出パターンの検出処理を説明する図。
【図１１】一実施形態における比較部での検出パターンの検出処理を説明する図。
【図１２】一実施形態における比較部での検出パターンの検出処理を説明する図。
【図１３】一実施形態における比較部での検出パターンの検出処理を説明する図。
【図１４】一実施形態において比較部が実行する比較処理のフローチャート。
【図１５】一実施形態によるアクセス管理部の構成図。
【図１６】一実施形態による検出条件定義情報を示す図。
【図１７】模擬対象装置である画像形成装置の機能構成図。
【図１８】一実施形態における情報処理装置の機能構成図。
【図１９】一実施形態におけるトレース情報のデータ構造を示す図。
【図２０】一実施形態におけるアクセス情報管理部での処理のフローチャート。
【発明を実施するための形態】
【００１０】
（第一実施形態）本発明において情報処理装置は、コンピュータ上でプログラムを実行することで実現でき、そのハードウェア構成を図２に示す。図２の本体部２０２のハードディスク２０２ｃには、情報処理装置の各機能を実現するためのプログラムや、模擬対象装置に関する情報を含む各種データが格納される。中央処理部（ＣＰＵ）２０２ａは、プログラム及び各種データを主記憶部２０２ｂにロードして実行し、これによりコンピュータシステム２０１は情報処理装置として動作する。なお、表示装置２０３は、本体部２０２からの指示により画面表示を行う。また、キーボード２０４は、このコンピュータシステム２０１にユーザの指示や文字情報を入力するためのものである。さらに、マウス２０５は、表示装置２０３上の任意の位置を指定することによりその位置に表示されていたアイコン等に応じた指示を入力するためのものである。
【００１１】
図１は、本実施形態による情報処理装置の構成図である。情報処理装置は、シミュレータ部１０１と、アクセスパターン分析部１０４を備えている。シミュレータ部１０１のＣＰＵシミュレータ３０１は、模擬対象装置のＣＰＵ又は制御部の動作を模擬する。つまり、模擬対象装置の制御プログラムを実行して模擬対象装置の各部の制御動作を模擬する。ＣＰＵシミュレータ３０１は、メモリや模擬対象装置にアクセスを行う際、アクセス管理部３０２にアクセス情報を含むアクセス通知を行う。ここで、アクセス情報とは、アクセス対象のリソースを特定するリソース特定情報及びアクセス種別情報を含んでいる。なお、リソース特定情報とは、例えば、メモリへのアクセスの場合には、メモリのアドレスやデータの変数名等である。また、模擬対象装置へのアクセスの場合には、アクセスする機能に対応するレジスタのアドレスやハードウェア又は機能名である。また、アクセス種別情報とは、データの読み込み（以下、リードと記す）か、データの書き込み（以下、ライトと記す）を示す情報である。ＣＰＵシミュレータ３０１は、アクセス管理部３０２にアクセス通知を行った場合、模擬動作を一旦停止する。その後、アクセス管理部３０２から再開通知を受けることで、模擬動作を再開する。
【００１２】
メモリシミュレータ３０７は、模擬対象装置の制御部の主メモリの動作を模擬する。メモリシミュレータ３０７には、模擬対象装置の制御部の主メモリの各領域と１対１で対応する領域が定義される。ＣＰＵシミュレータ３０１は、制御プログラムの主メモリへのアクセス命令に従い、メモリシミュレータ３０７の対応領域にアクセスする。
【００１３】
装置シミュレータ３０６は、模擬対象装置の各機能の動作を模擬、つまり、模擬対象装置の制御部により制御される各機能の動作を模擬する。例えば、制御対象装置が画像形成装置である場合は、装置シミュレータ３０６は、画像形成を行うための各部材の動作を模擬する。
【００１４】
アクセス管理部３０２は、ＣＰＵシミュレータ３０１と、装置シミュレータ３０６と、メモリシミュレータ３０７との間でのデータの入出力を管理する。具体的には、伝達部３０３は、ＣＰＵシミュレータ３０１と、装置シミュレータ３０６と、メモリシミュレータ３０７との間で入出力されるデータを伝達する。伝達部３０３は、実際の装置においては、制御部のＣＰＵ、主メモリ及び入出力部を接続するバスに相当する。
【００１５】
アクセス情報取得部３０４は、ＣＰＵシミュレータ３０１がアクセス通知を行うと、アクセス情報を取得して、アクセスパターン分析部１０４にアクセス情報を含む更新通知を行う。再開処理部３０５は、アクセスパターン分析部１０４から分析終了通知を受け取ると、ＣＰＵシミュレータ３０１に対して再開通知を行う。
【００１６】
図３は、アクセス管理部３０２における処理のフローチャートである。アクセス管理部３０２は、Ｓ１において、ＣＰＵシミュレータ３０１からアクセス通知が行われるまで待機する。アクセス通知を受けると、Ｓ２において、伝達部３０３は、アクセス通知に含まれるアクセス情報に基づき、装置シミュレータ３０６又はメモリシミュレータ３０７にデータを伝達する。また、Ｓ３において、アクセス情報取得部３０４は、更新通知をアクセスパターン分析部１０４に行ってアクセス情報を通知する。アクセス管理部３０２は、Ｓ４において、アクセスパターン分析部１０４から分析終了通知を受けるまで待機する。分析終了通知を受信すると、再開処理部３０５は、ＣＰＵシミュレータ３０１に再開通知を行い、これによりＣＰＵシミュレータ３０１は模擬処理を再開する。以後、アクセス管理部３０２は、Ｓ１からＳ５の処理を繰り返す。
【００１７】
図１に戻り、アクセスパターン分析部１０４について説明する。アクセスパターン分析部１０４は、アクセス情報の履歴を管理する履歴管理部１０５と、不適切アクセスを検出して警告処理を行う検出部１０８を備えている。履歴管理部１０５の履歴情報保存部１０６は、アクセス管理部３０２からアクセス情報を受け取ると、受け取ったアクセス情報に基づき、各リソースに対するアクセス種別の履歴（以後、履歴パターンと呼ぶ。）を示す履歴パターン情報を含む履歴情報１０７を保存する。アクセスパターン分析部１０４は、１回のアクセスを１ビットデータとして扱い、データリード、データライトに応じて、アクセス情報を“０”または“１”の２値で扱う。履歴パターンを示すコンピュータシステム２０１内のＲＡＭデータは、プログラム動作検証開始時は、全て不定値である。履歴パターン情報の不定状態を扱うため、履歴パターン情報の不定値（無効値）をマスクするためのデータを用いる。具体的には、本例においてはマスクデータにおいて有効ビットを“０”、無効ビットを“１”で表すものとする。履歴パターンおよびマスクデータはどちらも所定ビット数のビット列であり、時間順序に従ってデータ管理をする。時間順序に従うとは、ＬＳＢ側（ビット列において右側）、またはＭＳＢ側（ビット列において左側）いずれかが時間的により古い方を示すようにデータを扱うことである。履歴パターン情報は、履歴管理部１０５が扱う固定長のデータ数を超えると、最も古いデータをビット列から切り捨て、新しいデータを加える。履歴パターン情報は、例えば、８ビット固定長の履歴データと、当該履歴データと同じデータ長のマスクデータで構成される。本例では、履歴データにおいてデータリードを“０”、データライトを“１”で表し、ＭＳＢ側（ビット列において左側）が時間的に古い方を示すものとしている。この場合、動作開始後、あるアドレスに対して、データライト後にデータリードが行われた場合、このアドレスの履歴データは、“ｍｍｍｍｍｍ１０”となり、マスクデータは、“１１１１１１００”となる。なお、ｍは１でも０でもどちらでも良いことを示す。なお、上記表記は、特に断らない限り、以下の実施形態において共通とする。その後、同じアドレスにデータリードが行われたものとすると、履歴パターンは、履歴データ“ｍｍｍｍｍｍ１００”及びマスクデータ“１１１１１０００”で表される。なお、上記例は、過去８回の履歴パターンを管理するものであったが、どの程度の回数の履歴を管理するかは任意であり、各アドレスに対して確保するデータの保存のための領域は、保存する履歴の長さに応じて変更される。さらに、履歴情報１０７として、各アドレスに対する履歴パターンが管理できれば、任意のデータ表現を使用することができる。
【００１８】
判定情報１０９は、予めユーザにより設定された検出すべきアクセス種別の時間順序を示す検出パターン情報を保存している。検出パターン情報も、上述した履歴パターンと同じ様に、アクセス種別の時間順序を固定長で示す検出データ及び当該検出データが示すアクセスを、判定に使用するか否かを示すマスクデータで表現することができる。検出データは、履歴パターンと同様、１回のアクセスを１ビットデータとして扱い、データリード、データライトに応じて、アクセス情報を“０”または“１”の２値で扱う。また、検出データおよびマスクデータは、ビット列であり時間順序に従ってデータ管理をする。例えば、ライト、リード、リードという３回のアクセスに対するパターンを検出したい場合、検出データを“ｍｍｍｍｍ１００”とし、マスクデータを“１１１１１０００”として、検出パターンを表現することができる。
【００１９】
比較部１１０は、更新通知を受け取り、履歴情報１０７が更新されると、更新されたリソースに対応する履歴パターンと、判定情報１０９が保持する検出パターン情報が示す検出パターンを比較して一致するか否かを判定する。例えば、検出データが“ｍｍｍｍｍ１００”であり、マスクデータが“１１１１１０００”である場合、最近の３回のアクセスが、ライト、リード、リードの順であれば、その前の５回のアクセスパターンに拘わらず一致が検出される。比較部１１０は、一致を検出すると警告出力部１１１に一致の検出を通知する。なお、データをビットデータにしてビット列で扱うことで、履歴パターンを表す履歴データ及びマスクデータと、検出パターンを表す履歴データ及びマスクデータとの排他的論理和といった論理演算により、簡易にアクセスパターンの一致を判定することができる。
【００２０】
警告出力部１１１は、検出パターンと、履歴パターンの一致が比較部１１０より通知されると、ユーザに警告を出力する。警告の出力は、例えば、検出パターンと一致したアドレスをディスプレイに表示することにより、或いは、外部ファイルとしてハードディスク等に出力することにより行われる。
【００２１】
続いて、図４を用いてより具体的に説明する。図４（ａ）に示すプログラムにおいて、関数ｔｅｓｔ１及び外部割込み関数ｉｎｔｔｅｓｔ２は共に、グローバル変数ｙの値を書き換えた後、変数ｙの値に応じて、以降の処理を決定している。ここで、関数ｔｅｓｔ１において、変数ｙの書き換え、つまり、ｙ＝ｆｕｎｃ１（）の実行後、ｉｆ文に至るまでの間は、外部割込みを禁止するプログラム仕様であるものとする。したがって、外部割込みが禁止されている場合、関数ｔｅｓｔ１の開始から終了までの間における変数ｙへのアクセスパターンはライト、リード、つまり、“１０”となる。しかしながら、実装漏れにより、割込みが禁止されなかったものとする。この場合において、ｙ＝ｆｕｎｃ１（）の実行後、ｉｆ文に至るまでの間で外部割込みｉｎｔｔｅｓｔ２が発生すると、この場合の変数ｙへのアクセスパターンは、は“１１００”となる。
【００２２】
この場合、検出パターンとして、“１１”を設定することにより、連続するライトアクセスを検出することができる。図４（ｂ）は、検出パターンとし直近の２回のアクセスが共にライトアクセスとなるパターンを検出するためのデータ例である。
【００２３】
ＣＰＵシミュレータ３０１が、ｙ＝ｆｕｎｃ１（）を実行することで、変数ｙに対するライトアクセスが発生し、よって、履歴情報１０７が保持する変数ｙに対するデータは、図４（ｃ）のアクセス＃１に示す様になる。検出パターンと履歴パターンは一致しないため、アクセスパターン分析部１０４は、単に、分析終了通知を行う。これにより、ＣＰＵシミュレータ３０１は、模擬動作を再開する。ｙ＝ｆｕｎｃ１（）の実行後、ｉｆ文の実行までに、外部割込みが発生しない場合には、ｉｆ文において、変数ｙのリードアクセスが発生する。このとき、履歴情報１０７が保持する変数ｙに対するデータは、図４（ｃ）のアクセス＃２に示す様になる。検出パターンと履歴パターンは一致しないため、アクセスパターン分析部１０４は、単に、分析終了通知を行う。これにより、ＣＰＵシミュレータ３０１は、模擬動作を再開する。
【００２４】
その後、関数ｔｅｓｔ１が再度実行され、ＣＰＵシミュレータ３０１が、ｙ＝ｆｕｎｃ１（）を実行すると、変数ｙに対するライトアクセスが発生する。この場合、履歴情報１０７が保持する変数ｙに対するデータは、図４（ｃ）のアクセス＃３に示す様になる。検出パターンと履歴パターンは一致しないため、アクセスパターン分析部１０４は、単に、分析終了通知を行う。これにより、ＣＰＵシミュレータ３０１は、模擬動作を再開する。ｙ＝ｆｕｎｃ１（）の実行後、ｉｆ文の実行までに、外部割込みにより関数ｉｎｔｔｅｓｔ２が実行されたものとする。このとき、履歴情報１０７が保持する変数ｙに対するデータは、図４（ｃ）のアクセス＃４に示す様になる。履歴パターンの下位２ビットは、検出パターンと同じ“１１”であり、比較部１１０は、パターンの一致を検出する。したがって、警告出力部１１１は警告の出力を行う。
【００２５】
以上、リソースに対するアクセス種別の履歴を保存し、アクセスが発生する度に、アクセスされたリソースへの履歴パターンと、予め設定する検出パターンの一致を判定して不適切アクセスを検出する。この構成により任意のパターンの不適切アクセスを検出することができる。したがって、プログラムの動作検証時に、プログラムの問題をユーザに通知することができ、検証効率を向上させることができる。
【００２６】
（第二実施形態）第一実施形態においては、アクセス種別の時間順序を検出の対象としていた。本実施形態では、連続するアクセス間の時間についての条件も加えることで、不適切アクセスをより詳細に検出するものである。以下、第一実施形態との相違点を中心に説明する。本実施形態の情報処理装置の機能ブロック図は図１に示す第一実施形態と同じであるが、各機能ブロックは、時間についての条件（時間条件）も取り扱う。
【００２７】
本実施形態において、ＣＰＵシミュレータ３０１は、アクセス通知時に、アクセス情報に加えて、経過サイクル数で示す時刻情報をアクセス管理部３０２に通知する。アクセス情報取得部３０４は、アクセス情報及び時刻情報をアクセスパターン分析部１０４に伝達する。
【００２８】
本実施形態において、判定情報１０９は、検出パターン情報に加えて時間条件情報も保持している。時間条件情報とは、検出パターン情報が示すアクセス種別の時間順序において、連続するアクセス間の時間についての条件を示す、つまり、検出対象とする時間の範囲を定義するものであり、時間を示す値ｔに対して以下の５つの定義方法が存在する。
（１）時間ｔと等しい
（２）時間ｔ以上
（３）時間ｔより大きい
（４）時間ｔ以下
（５）時間ｔ未満
なお、時間は、例えば、ＣＰＵシミュレータ３０１におけるサイクル数で表す。
【００２９】
例えば、ライト、リードの順のアクセスであり、ライトとリード間の時間が３０００サイクルより小さいパターンを検出したいとすると、検出パターンは、“１０”であり、時間条件が“１−＞２：ｔ＜３０００”となる。ここで、“１−＞２”は、直近のアクセスと、その前のアクセスとの時間間隔に対する時間条件であることを示している。図５は、本実施形態において判定情報１０９が保持する時間条件情報を説明する図である。なお、判定情報１０９が保持する検出パターン情報については第一実施形態と同様である。図５（ａ）に示す様に、アクセス＃１〜＃８と、その前のアクセスとの各時間＃１〜＃８について時間条件を設定するものとする。図５（ｂ）は、この場合の時間条件情報のデータ構造の例である。図５（ｂ）の基準時間は、検出する時間を判定する基準となる時間であり、判定関数は、検出する時間を判定するための基準時間に基づく範囲を決定するものである。例えば、図５（ｂ）において、時間＃１は、時間Ｔ１と等しい時間を条件とし、時間＃２は、時間Ｔ２より大きいことを条件とし、時間＃３は、時間Ｔ３以下を条件としている。なお、判定関数の値は、ポインタにより管理することもできる。なお、第一実施形態と同様に、マスクデータにより判定をマスクする時間間隔を選択することもできる。本実施形態において、基準時間が０である場合、そのデータはマスクされることを意味するものとする。
【００３０】
続いて、本実施形態における履歴情報１０７について説明する。なお、アクセス種別の履歴については第一実施形態と同様であるため、以下では、時間履歴情報について説明する。図６（ａ）は、各アドレス、つまりリソースに対する履歴パターンを示すデータ構造の概要を示す図である。なお、図６（ａ）においては、マスクデータは簡略化のため省略している。図６（ａ）において、プレ総サイクル数は、対応するアドレスに対する最新のアクセス時にＣＰＵシミュレータ３０１から通知された時刻情報、つまり、経過サイクル数である。履歴情報保存部１０６は、更新通知を受けた場合、更新通知に含まれる時刻情報から、アクセスされたアドレスについてのプレ総サイクル数が示す時刻を減じることで、前回のアクセスから今回のアクセスまでの経過時間を求める。時間履歴更新ポインタは、対応するアドレスに新たなアクセスが発生した場合、経過時間を保存すべき位置を示している。図６（ａ）のアドレス０ｘ０００４は、時間履歴更新ポインタとして＊ｐｔ４を保持している。図６（ｂ）は、アドレス０ｘ０００４に対する時間履歴情報のデータ構造を示している。なお、図６（ｂ）にはポインタ＊ｐｔ４が示す位置を示している。例えば、アドレス０ｘ０００４に新たなアクセスが発生し、そのときのＣＰＵシミュレータ３０１から通知された経過サイクル数が１５０００であるとすると、前回のアクセスからの経過時間は、プレ総サイクル数の値から１７５０となる。したがって、履歴情報保存部１０６は、図６（ｂ）の＊ｐｔ４の位置に１７５０を設定し、図６（ａ）のアドレス０ｘ０００４に対応するプレ総サイクル数の値を１５０００に更新し、時間履歴更新ポインタも図６（ｂ）の時間＃５が示す位置に更新する。さらに、履歴情報保存部１０６は、履歴データ及び図示しないマスクデータを、既に説明した通り更新する。なお、本実施形態において、図６（ｂ）の時間履歴の値が０である場合、その履歴はマスクされていることを、つまり、判定情報１０９との比較には使用されことを意味するものとする。
【００３１】
比較部１１０は、第一実施形態と同じ履歴パターンと検出パターンの比較に加えて、時間履歴情報が示すアクセス間の時間間隔が、時間条件情報に合致するか否かを判定する。ここで、時間条件情報に合致するとは、時間条件情報が示す各アクセス間隔の条件の総てを時間履歴が満たしていることをいう。図７は、本実施形態において比較部１１０が実行する処理のフローチャートである。履歴情報１０７が更新されると、比較部１１０は、Ｓ１１において、更新されたリソースについて、履歴パターン及び検出パターンを比較する。履歴パターンと検出パターンが一致する場合、比較部１１０は、Ｓ１２において、更新されたリソースについて、履歴情報１０７が保持する時間履歴情報と、判定情報１０９が保持する時間条件情報を比較する。つまり、時間履歴情報が示す時間間隔の履歴が、時間条件情報が示す時間条件に合致するか否かを判定する。Ｓ１２において合致する場合、比較部１１０は、Ｓ１３において、警告出力部１１１に不適切アクセスの検出を通知して、警告出力部１１１に警告出力を行わせる。一方、Ｓ１１又はＳ１２において一致しない場合、処理を終了する。
【００３２】
例えば、あるアドレスへのアクセスにより、比較部１１０がＳ１１においてパターンの一致を検出したものとする。また、当該アドレスに関し、履歴情報１０７の時間履歴が図８（ａ）に示す通りであり、判定情報１０９の時間条件が図８（ｂ）に示す通りであるものとする。本実施形態において時間の値“０”はマスクされていることを示すため、判定情報１０９の時間条件は、時間＃２に対する条件、つまり、その判定関数より時間の値が２０００より大きいとの条件のみが有効である。図８（ａ）に示す様に時間＃２の時間履歴は３０００で２０００より大きいため、比較部１１０は、Ｓ１２において合致と判定することになる。
【００３３】
例えば、図４のプログラムに関し、アクセス種別の時間順序だけでは、正常なアクセスが不適切アクセスと検出される可能性がある。例えば、装置の起動時には、以下に示すような処理が一般的に行われている。
処理１：メモリ初期化
処理２：組み込みシステムのベース部分（ＯＳやタスク等）の初期化及び起動
処理３：装置制御処理の実行開始
メモリ初期化がメモリに対する所定値の書込みのみで、読み出しを伴わない処理の場合、メモリ初期化終了時点で、総てのメモリ領域にはライトアクセスが１回だけ行われた状態となっている。その後、図４の関数ｔｅｓｔ１を実行すると、変数ｙに対応するアドレスのアクセス種別は、ライトアクセスの連続となる。したがって、ライトアクセスが２回連続することを検出パターンとすると、メモリ初期化後の関数ｔｅｓｔ１の実行は、正常な処理であるが、不適切アクセスと検出されることになる。
【００３４】
しかし、メモリ初期化後に実行される上記処理２は、通常、例えば、４００００〜５００００サイクル数程度の時間を要する。例えば、図４（ａ）のｙ＝ｆｕｎｃ１（）の実行からｉｆ文の実行までが最大で１００サイクルであり、関数ｉｎｔｔｅｓｔ２の実行からｙ＝ｆｕｎｃ２（）の実行までが最大で５０サイクルであるものとする。この場合、例えば、連続するライトアクセス間に対して間隔が１５０サイクル以内との時間条件を追加することで、メモリ初期化後の関数ｔｅｓｔ１の実行を不適切アクセスと検出することを防ぐことができる。なお、ｙ＝ｆｕｎｃ１（）の実行からｉｆ文の実行までに、割込み関数ｉｎｔｔｅｓｔ２が呼び出された場合には、連続するライトアクセスが１５０サイクル以内で発生するため、不適切アクセスとして検出される。
【００３５】
以上、不適切アクセスを検出するための判定情報１０９に時間条件を設定することで不適切アクセスを的確に検出することができる。つまり、アクセス間の時間間隔の正当性も含めた動作検証を実施することができ、ソフトウエア動作検証の効率の向上をすることができる。
【００３６】
なお、実用上、アクセス間の時間条件を複数使用することは稀であり、特定のアクセス間の１つの時間条件を設ける場合が多いものと考えられる。よって、時間条件を１つに制限することで、効率的に処理を行うことができる。以下に、本実施形態の変形形態について説明する。例えば、ライト、リード、ライトの順のアクセスであって、最初のライトアクセスと、リードアクセスの間、つまり図５に示す時間＃２が３００サイクルより大きいとの時間条件を設定するものとする。この場合、判定情報１０９は、検出データとして“ｍｍｍｍｍ１０１”を、マスクデータとして“１１１１１０００”を、時間データとして時間＃２のみであることを示す“００００００１０”を、さらに、３００より大きいとの時間条件を示す情報を保持する。また、各アクセスが発生する度に、履歴情報保存部１０６は、アクセスされたアドレスについて、前回のアクセスからの時間間隔を比較部１１０に通知する。比較部１１０は、通知された時間間隔が、時間条件である３００より大きいか否かを判定し、大きい場合には１を、そうでない場合は０を履歴情報保存部１０６に通知する様に構成する。そして、履歴情報保存部１０６は、図６の時間履歴に代えて、時間条件を満足するか否かを２値で記録する。この構成により、図７のＳ１２における時間条件の判定処理が簡略化され処理時間を短くすることができ、また、履歴情報１０７として保存すべきデータ量を削減できる。
【００３７】
（第三実施形態）あるアクセスパターンが複数回繰返された後、今まで繰返されていたアクセスパターンと異なるパターンでデータへのアクセスが行われた場合、処理が正しく行われていない可能性がある。本実施形態は、この様な不適切アクセスを効率よく捉えるものである。本実施形態においては、実用上必要十分な機能を満たす以下の３つの繰り返し種別を使用する。なお、以下の説明においてライトアクセスを“ｗ”と、リードアクセスを“ｒ”で表す。
【００３８】
種別１は、ある１つのアクセス種別の後に、２つ以内アクセス種別のパターンが所定回だけ繰り返すパターンである。なお、種別１において、最初の１つのアクセス種別を第１ブロックと呼び、その後の繰り返しパターンを第２ブロックと呼ぶ。また、第１のブロックのアクセス種別を第１のパターンと呼び、第２のブロックのアクセス種別の時間順序を第２のパターンと呼ぶ。種別１は、例えば、“ｗ、ｒｗ、ｒｗ、・・・、ｒｗ”であり、この場合、最初の“ｗ”が第１のパターンであり、その後に繰り返す“ｒｗ”が第２のパターンである。なお、繰り返し回数は１回であっても良い。
【００３９】
種別２は、２つ以内アクセス種別の組み合わせが所定回だけ繰り返した後、最後にある１つのアクセス種別が続くパターンである。なお、種別２において、最初に繰り返すパターンを第１ブロックと呼び、その後に続く１つのアクセス種別を第２ブロックと呼ぶ。また、第１のブロックのアクセス種別の時間順序を第１のパターンと呼び、第２のブロックのアクセス種別を第２のパターンと呼ぶ。種別２は、例えば、“ｒｗ、ｒｗ、・・・、ｒｗ、ｒ”でありこの場合、最初に繰り返す“ｒｗ”が第１のパターンであり、最後の“ｒ”が第２のパターンである。なお、繰り返し回数は１回であっても良い。
【００４０】
種別３は、２つ以内アクセス種別の組み合わせが所定回だけ繰り返すパターンである。検出パターン１は、例えば、“ｒｗ、ｒｗ、・・・、ｒｗ”であり、この繰り返しパターンを第１ブロックと呼ぶ。また、第１のブロックのアクセス種別の時間順序を第１のパターンと呼ぶ。
【００４１】
本実施形態における判定情報１０９は、検出パターンを第１ブロックと第２ブロックに分割し、各ブロックの検出パターンとその繰り返し回数で表現を行う。例えば、“ｗｒ、ｗｒ、ｗｒ、ｗｒ、ｗｒ、ｒ”が検出パターンである場合、
第１ブロック：検出パターン“ｗｒ”、繰返し回数：５回
第２ブロック：検出パターン“ｒ”、繰返し回数：１回
となる。
【００４２】
図９は、本実施形態において比較部１１０が管理するデータを示している。比較部１１０は、各アドレスについて、以下に説明する６つのデータを管理する。ブロック識別子は、現在の比較対象が、第１ブロックであるか第２ブロックであるかを示している。例えば、比較対象ブロックが第１ブロックである場合には“０”が、第２ブロックである場合には“１”が設定される。
【００４３】
更新位置ポインタは、新たなアクセスが発生したときに、そのアクセス種別を格納する履歴情報１０７の履歴データの位置を示すポインタである。また、比較開始位置ポインタは、履歴情報１０７の履歴データの検出パターンとの比較開始位置を示すポインタである。カウンタ＃１は、第１ブロックについての一致回数のカウンタであり、カウンタ＃２は、第２ブロックについての一致回数のカウンタである。
【００４４】
以下、具体例を用いて本実施形態の詳細について説明する。図１０において、検出パターンは、“ｒ、ｗｒ、ｗｒ”とする。つまり、第１ブロックが、繰り返し回数が１回の“ｒ”であり、第２ブロックが、繰り返し回数が２回の“ｗｒ”である。図１０において、“ｗ”又は“ｒ”が格納される四角は、履歴情報１０７が保持する履歴データである。また、Ｐｒｅで示す矢印は、更新位置ポインタが示す位置であり、Ｐｃｍｐで示す矢印は、比較開始位置ポインタが示す位置である。さらに、比較ブロックは、比較対象のブロックのパターンを示している。つまり、なお、比較対象のブロックはブロック識別子で特定される。
【００４５】
図１０（ａ）は、更新通知により、ライトアクセスが初めて行われた状態を示している。図１０（ａ）において、ＰｒｅとＰｃｍｐの差は１であり、比較ブロックの要素数と等しいため、比較部１１０は、履歴データの“ｗ”と比較ブロックの“ｒ”を比較する。結果は、不一致であるので、比較部１１０は、比較ブロックである第１ブロックに対応するカウンタ＃１を“０”にクリアし、Ｐｃｍｐを１つ後、つまり、図１０（ａ）の１つ右側に移動させる。
【００４６】
新たな、リードアクセスの発生により、新たなデータが追加されると、図１０（ｂ）に示す状態となる。図１０（ｂ）において、ＰｒｅとＰｃｍｐの差は１であり、比較ブロックの要素数と等しいため、比較部１１０は、履歴データの“ｗ”と比較ブロックの“ｒ”を比較する。比較部１１０は、履歴データ“ｒ”が比較ブロックと同一であるため、カウンタ＃１を１つカウントアップする。さらに、比較部１１０は、カウンタ＃１をカウントアップしたことにより、第１ブロックの繰り返し回数とカウンタ＃１の値を比較する。第１ブロックの繰り返し回数とカウンタ＃１の値が等しいため、比較部１１０は、ブロック識別子の値を、第２ブロックを示す値に変更する。さらに、Ｐｃｍｐを、比較ブロックの要素数、つまり、この場合は１だけ後に移動させる。
【００４７】
新たな、ライトアクセスの発生により、新たなデータが追加されると、図１０（ｃ）に示す状態となる。図１０（ｃ）において、ＰｒｅとＰｃｍｐの差は１であり、比較ブロックの要素数より小さいため、比較部１１０は比較を行わない。新たな、リードアクセスの発生により、新たなデータが追加されると、図１０（ｄ）に示す状態となる。図１０（ｄ）において、ＰｒｅとＰｃｍｐの差は２であり、比較ブロックの要素数と同じであるため、比較部１１０は、Ｐｃｍｐから比較ブロックの要素数に等しい履歴データ“ｗｒ”と比較ブロックの“ｗｒ”を比較する。比較部１１０は、履歴データ“ｗｒ”が比較ブロックと同一であるため、カウンタ＃２を１つカウントアップする。さらに、比較部１１０は、カウンタ＃２をカウントアップしたことにより、第２ブロックの繰り返し回数とカウンタ＃２の値を比較する。カウンタ＃２の値は１であり、第２ブロックの繰り返し回数である２より小さいため、比較部１１０は、ブロック識別子の値をそのままとする。その後、Ｐｃｍｐを、比較ブロックの要素数、つまり、この場合は２だけ後に移動させる。
【００４８】
新たな、ライトアクセスの発生により、新たなデータが追加されると、図１０（ｅ）に示す状態となる。図１０（ｅ）において、ＰｒｅとＰｃｍｐの差は１であるため比較部１１０は比較を行わない。その後、新たな、リードアクセスの発生により、新たなデータが追加されると、図１０（ｆ）に示す状態となる。図１０（ｆ）において、ＰｒｅとＰｃｍｐの差は２であり、比較ブロックの要素数と同じであるため、比較部１１０は、Ｐｃｍｐから比較ブロックの要素数に等しい履歴データ“ｗｒ”と比較ブロックの“ｗｒ”を比較する。比較部１１０は、履歴データ“ｗｒ”が比較ブロックと同一であるため、カウンタ＃２を１つカウントアップする。さらに、比較部１１０は、カウンタ＃２をカウントアップしたことにより、第２ブロックの繰り返し回数とカウンタ＃２の値を比較する。カウンタ＃２の値は２であり、第２ブロックの繰り返し回数である２と等しいため、比較部１１０は、第１ブロック及び第２ブロック共に検出パターンの検出を行ったと判定する。よって、比較部１１０は、警告出力部１１１に不適切アクセスの検出を通知する。
【００４９】
図１１は、他の具体例を示しており、検出パターンは、図１０と同じく“ｒ、ｗｒ、ｗｒ”とする。また、図１１（ａ）に示す状態においては、第１ブロックの１回の繰り返しは検出済であり、第２ブロック“ｗｒ”についても既に１回検出している。新たなライトアクセスの発生により図１１（ａ）に示す状態となったとき、比較部１１０は、Ｐｃｍｐから比較ブロックの要素数に等しい履歴データ“ｒｗ”と比較ブロックの“ｗｒ”を比較する。比較部１１０は、不一致を検出するため、比較ブロックに対応するカウンタ＃２を０に初期化する。さらに、比較部１１０は、ブロック識別子に第１ブロックを示す値を設定する。なお、Ｐｃｍｐの移動は行わない。したがって、図１１（ｂ）に示す状態となる。
【００５０】
図１１（ｂ）においては、ＰｃｍｐとＰｒｅとの差が比較ブロックの要素数以上であるため、比較部１１０は、Ｐｃｍｐから比較ブロックの要素数に等しいデータを抽出して比較ブロックと比較する。比較部１１０は、抽出したデータ“ｒ”が比較ブロックと同一であるため、カウンタ＃１を１つカウントアップする。さらに、比較部１１０は、カウンタ＃１をカウントアップしたことにより、第１ブロックの繰り返し回数とカウンタ＃１の値を比較する。第１ブロックの繰り返し回数とカウンタ＃１の値が等しいため、比較部１１０は、ブロック識別子の値を、第２ブロックを示す値に変更する。さらに、Ｐｃｍｐを、比較ブロックの要素数、つまり、この場合は１だけ後に移動させる。したがって、図１１（ｃ）に示す状態となる。
【００５１】
その後、リードアクセスが発生すると、図１１（ｃ）に示す状態となる。この状態において比較部１１０は、比較ブロックとの一致を検出し、カウンタ＃２を１にカウントアップする。さらに、その後、リードアクセス及びライトアクセスが発生すると、図１１（ｄ）に状態となる。この状態において比較部１１０は、第２ブロックとの２回目の一致を検出し、既に述べた様に、警告出力部１１１に通知を行う。
【００５２】
図１２において、検出パターンは、“ｗｒ、ｗｒ、ｒ”とする。つまり、第１ブロックが、繰り返し回数が２回の“ｗｒ”であり、第２ブロックが、繰り返し回数が１回の“ｒ”である。
【００５３】
図１２（ａ）は、ライトアクセスが２回連続で生じた後の状態であり、比較部１１０は比較ブロックとの一致を検出しない。したがって、カウンタ＃１を０に設定して、Ｐｃｍｐを１つだけ後に移動させる。図１２（ｂ）は、その後にリードアクセスが発生した後の状態である。比較部１１０は、比較ブロックとの一致を検出し、よって、カウンタ＃１を１とする。また、一致の検出によりＰｃｍｐを比較ブロックの要素数である２だけ後に移動させる。なお、カウンタ＃１の値は繰り返し回数の２に達していないため、ブロック識別子の変更は行わない。
【００５４】
その後、ライトアクセスとリードアクセスが発生して、図１２（ｃ）に示す状態となったものとする。比較部１１０は、比較ブロックとの一致を検出し、よって、カウンタ＃１を２とする。また、一致の検出によりＰｃｍｐを比較ブロックの要素数である２だけ後に移動させる。さらに、カウンタ＃１の値が繰り返し回数の２に達したため、ブロック識別子を第２ブロックに変更する。その後、リードアクセスが発生すると、図１２（ｄ）に示す状態となる。この状態において、比較部１１０は、比較ブロックとの一致を検出し、よって、カウンタ＃２を１とする。さらに、カウンタ＃１の値が繰り返し回数の１に達したため、比較部１１０は、警告出力部１１１に通知を行う。
【００５５】
図１３において、検出パターンは、図１２と同じく“ｗｒ、ｗｒ、ｒ”とする。つまり、第１ブロックが、繰り返し回数が２回の“ｗｒ”であり、第２ブロックが、繰り返し回数が１回の“ｒ”である。図１３（ａ）に示す状態においては、第１ブロックの２回の繰り返しは検出済である。新たなライトアクセスの発生により図１１（ａ）に示す状態となったとき、比較部１１０は、比較ブロックとの一致を検出しない。したがって、カウンタ＃２を０に初期化する。さらに、比較部１１０は、ブロック識別子に第１ブロックを示す値を設定する。なお、Ｐｃｍｐの移動は行わない。その後にリードアクセスが発生すると、図１３（ｂ）に示す状態となる。
【００５６】
図１３（ｂ）に示す状態において、比較部１１０は、比較ブロックとの一致を検出する。よって、カウンタ＃１をカウントアップし、カウンタ＃１は３になる。また、一致の検出によりＰｃｍｐを比較ブロックの要素数である２だけ後に移動させる。また、カウンタ＃１の値が繰り返し回数の２を超えているため、ブロック識別子を第２ブロックに変更する。その後にリードアクセスが発生すると、図１３（ｃ）に示す状態となる。図１３（ｃ）に示す状態において、比較部１１０は、比較ブロックとの一致を検出する。よって、カウンタ＃２を１にカウントアップする。この状態において比較部１１０は、第２ブロックとの１回目の一致を検出し、既に述べた様に、警告出力部１１１に通知を行う。
【００５７】
図１４は、本実施形態において、比較部１１０が実行する比較処理のフローチャートである。なお、図１４において、ＣｏｕｎｔＮは、比較ブロック、つまり、ブロック識別子が示すブロックに対応するカウンタを示す。具体的には、ＣｏｕｎｔＮは、ブロック識別子が第１ブロックを示しているときはカウンタ＃１を、第２ブロックを示しているときはカウンタ＃２を示している。処理の開始により、Ｓ２１において、比較部１１０は、カウンタ＃１及びカウンタ＃２を初期化する。また、比較ブロックを第１ブロックに設定する。つまり、図９のブロック識別子に“０”を設定する。続いて、Ｓ２２において、比較部１１０は、比較ブロックの要素数をαに代入する。続いて、Ｓ２３において、更新位置ポインタＰｒｅから比較開始位置ポインタＰｃｍｐを減じた値が要素数α以上であるかを判定する。要素数未満である場合には、当該アドレスに対する新たなアクセスが発生するまで待機する。Ｓ２３において更新位置ポインタＰｒｅから比較開始位置ポインタＰｃｍｐを減じた値が要素数以上になると、比較部１１０は、Ｓ２４において、比較開始位置ポインタＰｃｍｐから要素数に等しいデータを抽出して比較ブロックとの比較を行う。比較部１１０は、Ｓ２５にて比較結果を判定し、一致している場合には、Ｓ２６においてＣｏｕｎｔＮをカウントアップし、比較開始位置ポインタＰｃｍｐを要素数αだけ進める。
【００５８】
その後、比較部１１０は、Ｓ２７において、ＣｏｕｎｔＮの値と比較ブロックの繰り返し回数を比較し、ＣｏｕｎｔＮが繰り返し回数未満であると、Ｓ２３からの処理を繰り返す。一方、ＣｏｕｎｔＮが繰り返し回数以上であると、比較部１１０は、Ｓ２８において、現在の比較ブロックが第２ブロックであるか否かを判定し、現在の比較ブロックが第２ブロックであると、検出パターンとの一致を検出して処理は終了する。一方、現在の比較ブロックが第１ブロックであると、Ｓ２９において比較ブロックを第２ブロックに変更してＳ２２からの処理を繰り返す。
【００５９】
一方、Ｓ２５において、比較結果が不一致である場合、比較部１１０は、Ｓ３０において、ＣｏｕｎｔＮを０にクリアし、Ｓ３１において、現在の比較ブロックが、第２ブロックであるか否かを判定する。第２ブロックである場合、比較部１１０は、Ｓ３３において比較ブロックを第１ブロックに変更し、第１ブロックである場合、比較部１１０は、Ｓ３２において比較開始位置ポインタＰｃｍｐを１だけ進める。その後、比較部１１０は、Ｓ２２からの処理を繰り返す。
【００６０】
以上の処理により、検出パターン１及び検出パターン２のアクセスを検出することができる。なお、検出パターン３は、図１４の処理において、第２ブロックについての部分を省略すればよい。つまり、第２ブロックについては、要素数０として、Ｓ２５における比較結果を常に一致とすればよい。
【００６１】
例えば、ある変数に対してライトとリードが繰返し行われる場合において、何らかの原因によりリード処理が行われない状態を、本実施形態では有利に検出することができる。この様に繰返しパターンを検出パターンとすることで、不適切アクセスとして検出したいパターンを、柔軟に設定でき、効率的に不適切アクセスを検出することができる。なお、第１ブロック及び第２ブロックの各パターンについて、１つ又は２つのパターンであるとしたが、１つ以上の任意数のパターンとすることができる。
【００６２】
（第四実施形態）第一実施形態から第三実施形態においては、検出処理の実行に条件を設けていなかった。しかしながら、パターンの一致を無条件に検出すると、ユーザにとって不要な情報が多数含まれ、本来検出したい不適切アクセスの特定が困難になり得る。本実施形態においては、検出を実行する条件である検出条件を設定して、検出条件に合致した場合に不適切アクセスを検出するための比較処理等を行う。このため、本実施形態においては、図１５に示す様に、アクセス管理部３０２に、トリガ検出部３０８を設け、検出条件定義情報３０９を予め保存しておく。それ以外は図１と同様である。
【００６３】
検出条件定義情報３０９は検出条件を定義するものであり、検出条件としては、例えば、検出対象リソース範囲、検出対象実行コード範囲及び実行開始／終了トリガを含んでいる。検出対象リソース範囲は、所定のリソースに対するアクセスを検出対象とする場合に設定し、例えば、リソースを示すアドレスにてその範囲を指定する。検出対象実行コード範囲は、プログラム上の所定の範囲にある命令によるアクセスを検出対象とするものであり、例えば、アクセス命令のプログラムカウンタ等によりその範囲を指定する。検出の実行開始／終了トリガは、検出処理の開始、又は、終了条件を指定するパラメータで、条件は検出処理の開始、又は、終了のトリガとなるリソースで発生するイベントにより特定する。
【００６４】
図１６は、検出条件定義情報３０９の例示的なデータ構造である。図１６（ａ）は、検出対象リソース範囲であり、開始アドレス及び終了アドレスと、条件情報により検出対象のリソース範囲を特定している。ここで、条件情報とは、開始アドレスから終了アドレスの範囲を検出対象とするのか、開始アドレスから終了アドレス以外の範囲を検出対象とするのかを示す情報である。また、有効フラグ情報は、この条件が有効であるか否かを、つまり、この条件を利用するか否かを示している。図１６（ｂ）は、検出対象実行コード範囲であり、アドレスが例えば、プログラムカウンタの値等、プログラムのコード範囲を示している以外は図１６（ａ）の検出対象リソース範囲と同様である。
【００６５】
図１６（ｃ）は実行開始／終了トリガであり、トリガ情報は、リソースの状態変化、つまりイベントを示す情報により規定され、トリガの発生により値が書き換えられるアドレス等を示す情報を含んでいる。また、トリガ条件とは、トリガが発生したと判定できる条件、例えば、値の範囲を含んでいる。また、種別情報は、開始又は終了を示す値を有している。種別情報が開始を示している場合には、検出開始のトリガを示す開始トリガ情報となる。一方、種別情報が終了を示している場合には、検出終了を示す終了トリガ情報となる。なお、有効フラグは、検出対象データ範囲と同様である。
【００６６】
トリガ検出部３０８は、ＣＰＵシミュレータ３０１、装置シミュレータ３０６及びメモリシミュレータ３０７間でのデータの入出力を監視し、検出条件定義情報３０９で定義される実行開始／終了トリガを検出する。トリガを検出した場合には、アクセス情報取得部３０４にトリガの検出を通知する。本実施形態において、アクセス情報取得部３０４は、ＣＰＵシミュレータ３０１によるリソースへのアクセスが、検出条件定義情報３０９で特定される条件を満たす場合に、アクセスパターン分析部１０４に更新通知を行う。具体的には、検出対象リソース範囲が指定されている場合には、アクセスが、検出対象リソース範囲で指定されるリソースである場合に更新通知を行う。また、検出対象実行コード範囲が指定されている場合には、アクセスが、検出対象実行コード範囲で指定されるコードの命令によるものである場合に更新通知を行う。また、開始トリガが指定されている場合には、実行開始トリガ検出後においてのみ更新通知を行う。さらに、終了トリガが指定されている場合には、終了トリガを検出前にのみ更新通知を行う。なお、複数の条件を組み合わせることも当然可能である。
【００６７】
続いて、本実施形態における不適切アクセス検出の画像形成装置への適用について説明する。図１７は、模擬対象装置である画像形成装置の概略的な構成図である。なお、図１７は、説明に必要な要素のみを示すものである。カートリッジ２００３は、感光ドラム２００４、一次帯電器２１０７、トナー容器２１０６を含む現像部といった、消耗材を１つのユニットにまとめたもので、制御プログラムにより寿命の測定が行われる仕組みとなっている。このため、カートリッジ２００３には、トナー容器２１０６のトナーの量を検出するトナー残量センサ２１０５と、カートリッジメモリ２１０８が設けられている。
【００６８】
制御部２１０１は、ＣＰＵシミュレータ３０１の模擬対象であり、ドラムモータユニット２１０３を制御することで、カートリッジ２００３のメカ機構を駆動する。また、制御部２１０１は、高圧ユニット２１０４を制御して、画像形成のための電圧をカートリッジ２００３のトナー容器２１０６と一次帯電器２１０７に供給する。また、制御部２１０１には、ＡＤコンバータ２１１１を介して、トナー残量センサ２１０５が検出するトナー容器２１０６のトナー残量を示す信号が入力される。さらに、制御部２１０１は、カートリッジメモリインタフェース２１１２を介してカートリッジメモリ２１０８に接続される。
【００６９】
制御部２１０１は、ドラムモータユニット２１０３を制御して、感光ドラム２００４を回転させ、高圧ユニット２１０４を制御して、一次帯電器２１０７により、感光ドラム２００４を帯電させる。制御部２１０１は、感光ドラム２００４の寿命を、ドラムの回転時間と一次帯電器２１０７からの電圧の印加時間から所定の計算式によって求める。そのため、感光ドラム２００４の回転時間、一次帯電器２１０７による電圧印加時間をメインメモリ２１０２内に保存する。
【００７０】
また、トナー残量センサ２１０５は、高圧ユニット２１０４から電圧が印加されることにより生じるトナー容器２１０６の電圧値を出力し、制御部２１０１は、この電圧値からトナー残量を求める。トナー残量を求める計算式はトナー残量の値によって変化させる。つまり、トナー残量の計算には、トナー残量自体が影響する。
【００７１】
カートリッジメモリ２１０８には、上記、感光ドラム２００４の寿命や、トナー残量を計算するための各種データが保存されている。なお、カートリッジメモリ２１０８は、例えば、シリアル番号といった、識別情報を保持している。制御部２１０１は、メインメモリ２１０２が保持している識別情報と、カートリッジメモリ２１０８内の識別情報を比較することで、カートリッジ２００３の交換を検出する。制御部２１０１は、カートリッジ２００３の交換を検出すると、カートリッジメモリ２１０８内の上記各種データをメインメモリ２１０２に記憶する。なお、制御部２１０１は、例えば、カートリッジ交換用ドアの開閉を検出すると、カートリッジメモリ２１０８の識別情報と、メインメモリ２１０２の識別情報の比較を行う。
【００７２】
したがって、カートリッジメモリ２１０８の交換が検出された場合、メインメモリ２１０２が保存している各種データへのアクセスは、ライト、リードの順になる。しかし、制御プログラムに誤りがあり、カートリッジ交換後の各種データの初期化が正しく行われない場合、アクセスは、リード、ライトの順となる。
【００７３】
この場合、例えば、検出条件定義情報３０９には、検出対象リソース範囲として、メインメモリ２１０２の画像形成装置のトナー残量を計算するためのデータが保存されている領域を設定する。そして、実行開始トリガについては、メインメモリ２１０２において、カートリッジ識別情報が現在とは異なる値になったとの条件を設定する。例えば、メインメモリ２１０２において、カートリッジの識別情報を保存するアドレスが“０ｘ０４７０”であり、現在のカートリッジの識別情報が“１２３４５６７８９０”であるものとする。この場合、図１６（ｃ）のトリガ情報には、０ｘ０４７０”を、トリガ条件には“１２３４５６７８９０”以外の値との条件を、種別情報には“開始”を、有効フラグには“有効”を設定する。
【００７４】
以上の処理により、検出パターンとして、“ｍｍｍｍｍｍｍｍ０”を設定する、ここで、“０”は第一実施形態と同じくリードアクセスを意味する。これにより、カートリッジ交換後における最初の自己診断関係のデータへのアクセスにおいて、リードアクセスが発生していることを検出することができる。
【００７５】
初期化処理等において、処理すべきデータが多い場合、デバッガの実行トレース等を使用し、プログラムの処理フロー上で初期化処理を確認した場合、個々のデータに対する設定漏れを見逃す恐れがある。一方、メモリトレース等を使用して所定の条件におけるデータ設定状況を個々のデータに対して行うことは、作業工数が多くなり、見落とし等が生じ得る。本実施形態においては、個別のデータに着目することなく問題の見落としを防ぐことができ、問題の早期発見が可能となる。
【００７６】
なお、本実施形態においては、アクセス情報取得部３０４が検出条件定義情報３０９に基づきアクセスパターン分析部１０４に更新通知を行うか否かを判断している。しかしながら、検出条件定義情報３０９をアクセスパターン分析部１０４に設け、履歴情報保存部１０６が、検出条件定義情報３０９の検出条件に合致する場合にのみ履歴情報１０７にデータを保存する構成とすることもできる。さらに、検出条件のうち、検出対象リソース範囲については、そのリソース範囲についてのみ、比較部１１０が一致又は不一致を判定する構成とすることもできる。さらに、検出条件のうち、検出対象リソース範囲については、比較部１１０が一致を検出したとしても、そのデータが、検出対象ではない場合、警告出力部１１１が警告出力をマスクする構成とすることもできる。さらに、比較部１１０は、あるアドレスについて検出パターンに最初に一致したときに警告出力部１１１に警告出力を行わせ、以後の検出についてはマスクする構成としても良い。
【００７７】
なお、本実施形態は、第二実施形態に示す時間条件と組み合わせることも、第三実施形態に示す繰り返しパターンの検出を使用して行うことも当然可能である。
【００７８】
（第五実施形態）第一実施形態から第四実施形態は、ＣＰＵシミュレータ３０１及びアクセス管理部３０２を設ける構成であり、これらをコンピュータシステム２０１上で実現するものであった。本実施形態においては、ＣＰＵシミュレータ３０１の代わりに、ハードウェアで構成されたエミュレータを使用する。
【００７９】
図１８は、本実施形態における情報処理装置の機能構成図である。本実施形態では、図２のコンピュータシステム２０１に加えて、インサーキットエミュレータ２２０１と、制御部を除いた制御対象装置２２１２がハードウェア構成として加わる。インサーキットエミュレータ２２０１は、第一実施形態から第四実施形態におけるＣＰＵシミュレータ３０１及びメモリシミュレータ３０７に相当するものである。また、制御対象装置２２１２は、第一実施形態から第四実施形態における装置シミュレータ３０６に対応するものである。また、本実施形態では、コンピュータシステム２０１は、アクセスパターン分析部１０４及びエミュレータ制御部２２０２として機能する。そして、制御対象装置２２１２と、インサーキットエミュレータ２２０１と、エミュレータ制御部２２０２がシミュレータ部１０１を構成する。なお、制御対象装置２２１２を使用する代わりに、第一実施形態から第四実施形態と同様に、コンピュータシステム２０１を装置シミュレータ３０６として機能させる形態とすることもできる。
【００８０】
インサーキットエミュレータ２２０１の評価用ＣＰＵ２２０３は、制御対象装置のＣＰＵの動作を模擬するＣＰＵコア２２０６を備えており、制御プログラムをメインメモリ２２０８に読み込んで実行する。つまり、ＣＰＵコア２２０６は、第一実施形態から第四実施形態のＣＰＵシミュレータ３０１に相当する機能ブロックである。また、メインメモリ２２０８は、制御対象装置のメインメモリに対応し、第一実施形態から第四実施形態のメモリシミュレータ３０７に相当する機能ブロックである。周辺回路２２０７は制御対象装置のＣＰＵの周辺回路と同様のものであり、制御対象装置２２１２とのインタフェースである。なお、上述した様に、制御対象装置２２１２は、その制御部を除く部分のみが利用される。
【００８１】
トレース部２２０５は、ＣＰＵコア２２０６によりリソースのアクセス情報を取得してトレース情報として記録する。トレース情報は一定の量の情報であり、新たな情報が取得されるごとに古い情報から破棄される。制御用ＣＰＵ２２０４は、インサーキットエミュレータ２２０１のデバッグ機能を制御するもので、エミュレータ制御部２２０２と通信を行い、各種デバッグ処理を行う。具体的には、エミュレータ制御部２２０２からの指示に従い評価用ＣＰＵ２２０３及びトレース部２２０５に対して各種設定、指示を行うと共に、必要に応じて評価用ＣＰＵ２２０３、トレース部２２０５から取得した情報をエミュレータ制御部２２０２に通知する。制御用ＣＰＵ２２０４による、トレース情報通知の条件は評価用ＣＰＵ２２０３のプログラム実行に伴う各種イベントの発生で指定できる様に構成される。例えば、一定時間間隔、特定のプログラムカウンタの命令の実行、特定のアドレスのデータへのアクセス、ブレークの発生、ステップ実行の処理毎等である。
【００８２】
エミュレータ制御部２２０２のアクセス情報管理部２２１０は、インサーキットエミュレータ２２０１から所定の期間のトレース情報を取得してアクセス履歴情報２２１１に保持する。ここで、アクセス履歴情報２２１１は、装置制御プログラムの実行に伴い発生するリソースへのアクセスの履歴を、アクセス対象に関係なく発生順に時系列に並べた情報である。さらに、アクセス情報管理部２２１０は、アクセスパターン分析部１０４に対して、リソース毎のアクセス情報を、更新通知により通知する。つまり、アクセス毎に、アクセス情報をアクセスパターン分析部１０４に通知する。
【００８３】
本実施形態は、第一実施形態から第四実施形態と異なり、制御プログラムの実行等を、プログラムにより実現するＣＰＵシミュレータ３０１ではなく、ハードウェアであるインサーキットエミュレータ２２０１を使用する。したがって、第一実施形態から第四実施形態の様に、アクセス発生の都度、アクセスパターン分析部１０４の分析が終了するまで装置制御プログラムの実行を停止することはできない。したがって、本実施形態では、エミュレータ制御部２２０２を設け、インサーキットエミュレータ２２０１からのトレース情報を蓄積すると共に、アクセスパターン分析部１０４に、発生順にアクセス情報を１つずつ通知している。なお、アクセスパターン分析部１０４での処理は、第一実施形態から第四実施形態と同様である。
【００８４】
まずインサーキットエミュレータ２２０１からのトレース情報取得処理について説明する。アクセス情報管理部２２１０は、制御用ＣＰＵ２２０４に対し、周期的にトレース情報を通知する様に制御用ＣＰＵに要求する。この周期は、トレース情報が欠落しない間隔とし、トレース部２２０５が保持するトレース情報の量と、データアクセスの最小間隔から決定できる。これにより、制御用ＣＰＵ２２０４は、指定された周期でトレース情報をエミュレータ制御部２２０２に通知する。アクセス情報管理部２２１０は、通知されたトレース情報をアクセス履歴情報２２１１に保存する。なお、このとき、以前に受け取ったトレース情報との重複部分は削除する。
【００８５】
本実施形態において、アクセス履歴情報２２１１は、図１９に示す様なリングバッファである。アクセス履歴情報２２１１は、Ｄ０〜Ｄｍａｘ−１のｍａｘ個の領域を有し、データ入力のための更新領域ポインタと、データ出力のための参照領域ポインタとを備えている。各領域に保存される情報は、アクセス情報である。また、時間条件を設ける場合には、アクセス発生時の総サイクル数情報も含まれる。
【００８６】
アクセス情報管理部２２１０は、新たな情報の保存に際しては更新領域ポインタの示す領域から発生順に保存し、保存された情報に対応する数だけ更新領域ポインタを進める。また、アクセス情報管理部２２１０は、情報の参照に際しては参照領域ポインタの示す領域から参照し、参照する度に参照領域ポインタを１つ進める。ただし、参照領域ポインタと更新領域ポインタが同じ領域を示している場合には、参照データなしとし、参照領域ポインタを進めない。更新領域ポインタ、参照領域ポインタ共にＤｍａｘ−１の次にはＤ０に戻る。
【００８７】
アクセス情報管理部２２１０における処理を図２０のフローチャートに従い説明する。まず、Ｓ４１で、アクセス情報管理部２２１０は、参照領域ポインタをＤ０の領域を示すように初期化する。次に、Ｓ４２で、アクセス情報管理部２２１０は、参照領域ポインタと更新領域ポインタを比較し、一致する場合には、アクセスパターン分析部１０４に未通知のアクセス情報が存在しないと判断して待機する。Ｓ４２で、参照領域ポインタが更新領域ポインタと一致しない場合、アクセスパターン分析部１０４に更新通知と共にアクセス情報を通知する。なお、ここで通知されるアクセス情報は、参照領域ポインタが示す情報である。その後、アクセス情報管理部２２１０は、Ｓ４４でアクセスパターン分析部１０４からの分析終了通知を受信するまで待機する。アクセス情報管理部２２１０は、分析終了通知を受けると、Ｓ４５において、参照領域ポインタを１つだけ進めて、Ｓ４２からの処理を繰り返す。
【００８８】
以上の処理により、アクセスパターン分析部１０４での処理待ちを、アクセス情報管理部２２１０が吸収することになる。すなわち、評価用ＣＰＵ２２０３による制御プログラムの実行と、アクセスパターン分析部１０４の不適切アクセスの検出処理を非同期に行うことができる。
【００８９】
これにより、評価用ＣＰＵ２２０３におけるアクセスの発生間隔よりもアクセスパターン分析部１０４における検出処理時間が長くなった場合でも、評価用ＣＰＵ２２０３による制御プログラムの実行を継続できる。なお、インサーキットエミュレータ２２０１で取得したトレース情報を使用する形態にて説明したが、命令実行履歴のトレース情報を使用することもできる。この場合、アクセス情報管理部２２１０は、制御プログラムの命令コード情報から取得したトレース情報を解析し、データアクセス履歴を検出した上でアクセス履歴情報２２１１に保存する。この場合、アクセスを行ったプログラムのプログラムカウンタを特定することも可能となり、警告情報としてプログラムの実行個所を示すことや、第四実施形態で説明した検出対象実行コード範囲の特定に利用できる。本実施形態においても、第四実施形態と同様に、検出条件に基づき、検出動作を制御することができる。
【００９０】
（その他の実施形態）また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１】
0005863332.tif 000002
【図２】
0005863332.tif 000003
【図３】
0005863332.tif 000004
【図４】
0005863332.tif 000005
【図５】
0005863332.tif 000006
【図６】
0005863332.tif 000007
【図７】
0005863332.tif 000008
【図８】
0005863332.tif 000009
【図９】
0005863332.tif 000010
【図１０】
0005863332.tif 000011
【図１１】
0005863332.tif 000012
【図１２】
0005863332.tif 000013
【図１３】
0005863332.tif 000014
【図１４】
0005863332.tif 000015
【図１５】
0005863332.tif 000016
【図１６】
0005863332.tif 000017
【図１７】
0005863332.tif 000018
【図１８】
0005863332.tif 000019
【図１９】
0005863332.tif 000020
【図２０】
0005863332.tif 000021