(57)【要約】      （修正有）【課題】メモリリークや異常データ書き込みなどの、ＣＰＵが管理するメモリ領域に発生する異常状態を検知することができるメモリ検査システムを提供する。【解決手段】メモリ領域を管理するために用いるメモリ管理情報がメモリ領域内のデータの更新を許容する旨を表す属性を含んでいるにも関わらず、メモリ領域に記憶されているデータのハッシュ値の時間変化がない場合、メモリ領域の利用に異常が発生している可能性があると判定する。【選択図】図１
2011203839.tif 000002
【特許請求の範囲】
【請求項１】
稼働中のオペレーティングシステムがメモリ空間を管理するために用いるメモリ管理情報のうち、検査対象のメモリ領域の利用に係る属性を示す属性情報を取得する属性情報取得手段と、
検査対象のメモリ領域に記憶されているデータの実体を示すデータ情報を逐次取得するデータ情報取得手段と、
前記属性情報取得手段によって取得された属性情報を参照し、前記データ情報取得手段によって第１時刻に取得された第１のデータ情報と、前記データ情報取得手段によって第２時刻に取得された第２のデータ情報とに基づいて、検査対象のメモリ領域の利用に異常が発生している可能性の有無を判定し、判定結果に応じた処理を実行する判定処理手段とを備える
ことを特徴とするメモリ検査システム。
【請求項２】
前記メモリ管理情報は、１又は複数のページ毎に利用に係る属性を管理する情報を含み、
前記属性情報は、検査対象のメモリ領域を構成する１又は複数のページについての利用に係る属性を示し、
前記メモリ検査システムは、メモリ内のページ単位のデータ毎に、当該データの実体を反映したハッシュ値を生成するハッシュ値生成手段を備え、
前記データ情報取得手段が取得する前記データ情報は、検査対象のメモリ領域を構成する各ページについて前記ハッシュ値生成手段によって生成されたハッシュ値により構成され、
前記判定処理手段は、前記第１のデータ情報と前記第２のデータ情報との比較を行うことにより前記判定を行い、異常が発生している可能性があると判定したときには、異常が発生している可能性がある旨を表すための所定の信号を出力する
ことを特徴とする請求項１記載のメモリ検査システム。
【請求項３】
前記判定処理手段は、検査対象のメモリ領域に係る前記属性情報により示される属性が、メモリ領域内のデータの更新を許容する旨を表す属性である場合において、検査対象のメモリ領域を構成する各ページについての、前記第１のデータ情報を構成するハッシュ値と前記第２のデータ情報を構成するハッシュ値とが、いずれも同一であるときには異常が発生している可能性があると判定する
ことを特徴とする請求項２記載のメモリ検査システム。
【請求項４】
前記判定処理手段は、
前記データ情報取得手段がデータ情報を第１時刻に取得した後、データ情報を取得する毎に各取得時を逐次第２時刻と定めて、検査対象のメモリ領域に係る前記属性情報により示される属性が、メモリ領域内のデータの更新を許容する旨を表す属性である場合において、検査対象のメモリ領域を構成する各ページについての、前記第１時刻に取得された第１のデータ情報を構成するハッシュ値と当該第２時刻に取得された前記第２のデータ情報を構成するハッシュ値とが、いずれも同一であるという事象が生じたか否かを逐次判別し、
当該事象が生じた数をカウントし、当該事象が生じた数が所定値になったときには異常が発生している可能性があると判定する
ことを特徴とする請求項２記載のメモリ検査システム。
【請求項５】
前記判定処理手段は、
前記データ情報取得手段がデータ情報を第１時刻に取得した後、データ情報を取得する毎に各取得時を逐次第２時刻と定めて、検査対象のメモリ領域に係る前記属性情報により示される属性が、メモリ領域内のデータの更新を許容する旨を表す属性である場合において、検査対象のメモリ領域を構成する各ページについての、前記第１時刻に取得された第１のデータ情報を構成するハッシュ値と当該第２時刻に取得された前記第２のデータ情報を構成するハッシュ値とが、各ページについて同一であるという事象が生じたか否かを逐次判別し、
各ページについて当該事象が生じた数をカウントし、各ページについて当該事象が生じた数が所定値になったときには異常が発生している可能性があると判定する
ことを特徴とする請求項２記載のメモリ検査システム。
【請求項６】
前記判定処理手段は、検査対象のメモリ領域に係る前記属性情報により示される属性が、メモリ領域内のデータの更新を許容しない旨を表す属性である場合において、検査対象のメモリ領域を構成するいずれかのページについての、前記第１のデータ情報を構成するハッシュ値と前記第２のデータ情報を構成するハッシュ値とが同一でないときには異常が発生している可能性があると判定する
ことを特徴とする請求項２記載のメモリ検査システム。
【請求項７】
前記メモリ管理情報は、前記オペレーティングシステムによりメモリ空間を構成する各ページがプログラムに対して割り当てられているか否かを識別可能な情報を含み、
前記属性情報は、検査対象のメモリ領域を構成する各ページがプログラムに対して割り当てられているか否かを識別可能な情報を含み、
前記判定処理手段は、検査対象のメモリ領域を構成するページのうち、対応する前記属性情報により示される属性がプログラムに対して割り当てられていない旨を示すページについては、当該ページについての、前記第１のデータ情報を構成するハッシュ値と前記第２のデータ情報を構成するハッシュ値とが同一でないときには異常が発生している可能性があると判定する
ことを特徴とする請求項２記載のメモリ検査システム。
【請求項８】
前記属性情報取得手段は、前記属性情報を逐次取得し、
前記データ情報取得手段は、前記データ情報を所定時間間隔で取得し、
前記判定処理手段は、前記属性情報により示され得るメモリ領域の属性各々と、当該属性のメモリ領域内のデータが前記所定時間のうちに更新されない確率とを対応付けた確率情報を記憶する記憶部を有し、
前記判定処理手段は、前記所定時間間隔で第２時刻を定めるとともに当該第２時刻の前記所定時間前の時刻を第１時刻と定めて、検査対象のメモリ領域を構成するいずれかのページについての、前記第１のデータ情報を構成するハッシュ値と前記第２のデータ情報を構成するハッシュ値とが同一でないという事象が生じたか否かを逐次判別し、当該事象が生じた数と、逐次取得された検査対象のメモリ領域に係る前記属性情報により示される属性に対応する確率とに基づいて、異常が発生している可能性があると判定する
ことを特徴とする請求項２記載のメモリ検査システム。
【請求項９】
稼働中のオペレーティングシステムがメモリ空間を管理するために用いるメモリ管理情報のうち、検査対象のメモリ領域の利用に係る属性を示す属性情報をメモリから読み出す属性情報取得ステップと、
検査対象のメモリ領域に記憶されているデータの実体を示すデータ情報を逐次取得するデータ情報取得ステップと、
前記属性情報取得ステップによって取得された属性情報と、前記データ情報取得ステップによって第１時刻に取得された第１のデータ情報と、前記データ情報取得ステップによって第２時刻に取得された第２のデータ情報とに基づいて、検査対象のメモリ領域の利用に異常が発生している可能性の有無を判定し、判定結果に応じた処理を実行する判定処理ステップとを含む
ことを特徴とするメモリ検査方法。
【請求項１０】
メモリの検査をするための検査処理をコンピュータに実行させるためのメモリ検査用プログラムであって、
前記検査処理は、
稼働中のオペレーティングシステムがメモリ空間を管理するために用いるメモリ管理情報のうち、検査対象のメモリ領域の利用に係る属性を示す属性情報をメモリから読み出す属性情報取得ステップと、
検査対象のメモリ領域に記憶されているデータの実体を示すデータ情報を逐次取得するデータ情報取得ステップと、
前記属性情報取得ステップによって取得された属性情報と、前記データ情報取得ステップによって第１時刻に取得された第１のデータ情報と、前記データ情報取得ステップによって第２時刻に取得された第２のデータ情報とに基づいて、検査対象のメモリ領域の利用に異常が発生している可能性の有無を判定し、判定結果に応じた処理を実行する判定処理ステップとを含む
ことを特徴とするメモリ検査用プログラム。
【請求項１１】
メモリの検査をするための検査処理をコンピュータに実行させるためのメモリ検査用プログラムを記録した記録媒体であって、
前記検査処理は、
稼働中のオペレーティングシステムがメモリ空間を管理するために用いるメモリ管理情報のうち、検査対象のメモリ領域の利用に係る属性を示す属性情報をメモリから読み出す属性情報取得ステップと、
検査対象のメモリ領域に記憶されているデータの実体を示すデータ情報を逐次取得するデータ情報取得ステップと、
前記属性情報取得ステップによって取得された属性情報と、前記データ情報取得ステップによって第１時刻に取得された第１のデータ情報と、前記データ情報取得ステップによって第２時刻に取得された第２のデータ情報とに基づいて、検査対象のメモリ領域の利用に異常が発生している可能性の有無を判定し、判定結果に応じた処理を実行する判定処理ステップとを含む
ことを特徴とする記録媒体。
【請求項１２】
稼働中のオペレーティングシステムがメモリ空間を管理するために用いるメモリ管理情報のうち、検査対象のメモリ領域の利用に係る属性を示す属性情報を取得する属性情報取得部と、
検査対象のメモリ領域に記憶されているデータの実体を示すデータ情報を逐次取得するデータ情報取得部と、
前記属性情報取得部によって取得された属性情報と、前記データ情報取得部によって第１時刻に取得された第１のデータ情報と、前記データ情報取得部によって第２時刻に取得された第２のデータ情報とに基づいて、検査対象のメモリ領域の利用に異常が発生している可能性の有無を判定し、判定結果に応じた処理を実行する判定処理部とを備える
ことを特徴とする集積回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータシステムにおけるメモリ領域の使用に係る異常を検査するメモリ検査システムに関する。
【背景技術】
【０００２】
ＣＰＵ（Central Processing Unit）とメモリとを含むコンピュータシステムは、メモリに記憶されているプログラムをＣＰＵに実行させることで、様々な機能を実現する。
プログラムは、ＯＳ（Operating System）の機能等を利用して処理に必要なメモリ領域を確保し、その処理が終了すると、ＯＳの機能等を利用して確保したメモリ領域を解放する。
【０００３】
このとき、プログラムに不具合が含まれている等の理由で、プログラムによって確保されたメモリ領域が解放されない場合には、新たなプログラムに割り当てることができるメモリ領域が減少するという現象（以下、「メモリリーク」という。）が発生する。
【０００４】
コンピュータシステムは、メモリ領域の解放漏れを内包するプログラムを実行し続けると、ついには新たなプログラムに割り当てることができるメモリ領域がなくなってしまい、新たなプログラムを実行させることができなくなる。
【０００５】
上記メモリリークを検出するための技術として、以下の技術が知られている。
従来技術１：コンピュータシステムが、メモリの初期化時に全てのメモリ領域に初期値を書き込み、プログラムによるメモリ領域の解放毎にそのメモリ領域に初期値を書き込み、メモリチェック時に初期値が書き込まれていないメモリ領域の有無を調べる技術（特許文献１参照）。
【０００６】
従来技術２：コンピュータシステムが、メモリ領域が確保されるタイミングでタイマを起動し、そのメモリ領域が解放されるタイミングでそのタイマを停止し、そのメモリ領域が確保されていると想定される期間以上起動し続けているタイマの有無を調べる技術（特許文献２参照）。
【０００７】
従来技術３：コンピュータシステムが、過去のメモリ使用量の平均値と現在のメモリ使用量とから、メモリ使用量の増加量を算出し、算出したメモリ使用量の増加量に基づいて、メモリリークの発生を推定する技術（特許文献３参照）。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００７−３２３１６７号公報
【特許文献２】特開２００９−９８９１０号公報
【特許文献３】特開２００５−２５０７５１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
一方、メモリを共有しているＣＰＵ以外のデバイスがある場合において、ＣＰＵ上で実行されるプログラムによって確保されているメモリ領域へ、ＣＰＵ以外のデバイスによって誤ってデータの書き込みが行われる（以下、この現象を「異常データ書き込み」という。）と、そのプログラムは、その領域を用いて行う処理を正常に実行することができない。
【００１０】
そこで、本発明は、上述の従来技術１、従来技術２、従来技術３とは異なるアプローチによって、前述のメモリリークや異常データ書き込みといった、ＣＰＵが管理するメモリ領域に発生する異常状態（以下、メモリアクセス処理の欠陥という）を検知することができるメモリ検査システムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
上記課題を解決するために本発明に係るメモリ検査システムは、稼働中のオペレーティングシステムがメモリ空間を管理するために用いるメモリ管理情報のうち、検査対象のメモリ領域の利用に係る属性を示す属性情報を取得する属性情報取得手段と、検査対象のメモリ領域に記憶されているデータの実体を示すデータ情報を逐次取得するデータ情報取得手段と、前記属性情報取得手段によって取得された属性情報を参照し、前記データ情報取得手段によって第１時刻に取得された第１のデータ情報と、前記データ情報取得手段によって第２時刻に取得された第２のデータ情報とに基づいて、検査対象のメモリ領域の利用に異常が発生している可能性の有無を判定し、判定結果に応じた処理を実行する判定処理手段とを備えることを特徴とする。
【発明の効果】
【００１２】
上述の構成を備える本発明に係るメモリ検査システムは、データ情報の時間変動とメモリ情報との矛盾から、メモリアクセス処理の欠陥が生じていることを検知してそれに応じて必要な処理が行い得るという効果を有する。
【００１３】
また、前記メモリ管理情報は、１又は複数のページ毎に利用に係る属性を管理する情報を含み、前記属性情報は、検査対象のメモリ領域を構成する１又は複数のページについての利用に係る属性を示し、前記メモリ検査システムは、メモリ内のページ単位のデータ毎に、当該データの実体を反映したハッシュ値を生成するハッシュ値生成手段を備え、前記データ情報取得手段が取得する前記データ情報は、検査対象のメモリ領域を構成する各ページについて前記ハッシュ値生成手段によって生成されたハッシュ値により構成され、前記判定処理手段は、前記第１のデータ情報と前記第２のデータ情報との比較を行うことにより前記判定を行い、異常が発生している可能性があると判定したときには、異常が発生している可能性がある旨を表すための所定の信号を出力することを特徴とするとしてもよい。
【００１４】
このような構成にすることによって、データの実体を示すデータ情報が、そのデータ自身のデータ量よりも少ないデータ量であるハッシュ値とすることができる。
従って、データ情報を記憶するために必要なメモリ領域を小さくすることができるという効果を有する。
【００１５】
また、前記判定処理手段は、検査対象のメモリ領域に係る前記属性情報により示される属性が、メモリ領域内のデータの更新を許容する旨を表す属性である場合において、検査対象のメモリ領域を構成する各ページについての、前記第１のデータ情報を構成するハッシュ値と前記第２のデータ情報を構成するハッシュ値とが、いずれも同一であるときには異常が発生している可能性があると判定することを特徴とするとしてもよい。
【００１６】
このような構成にすることによって、メモリリークが発生している可能性があるページを検知することができるという効果を有する。
また、前記判定処理手段は、前記データ情報取得手段がデータ情報を第１時刻に取得した後、データ情報を取得する毎に各取得時を逐次第２時刻と定めて、検査対象のメモリ領域に係る前記属性情報により示される属性が、メモリ領域内のデータの更新を許容する旨を表す属性である場合において、検査対象のメモリ領域を構成する各ページについての、前記第１時刻に取得された第１のデータ情報を構成するハッシュ値と当該第２時刻に取得された前記第２のデータ情報を構成するハッシュ値とが、いずれも同一であるという事象が生じたか否かを逐次判別し、当該事象が生じた数をカウントし、当該事象が生じた数が所定値になったときには異常が発生している可能性があると判定することを特徴とするとしてもよい。
【００１７】
このような構成にすることによって、メモリリークが発生している可能性があるページの数が所定数より多くなって、コンピュータシステムが破綻してしまう可能性が高くなる場合に、コンピュータシステムの破綻を回避するための処理を行うことができるようになるという効果を有する。
【００１８】
また、前記判定処理手段は、前記データ情報取得手段がデータ情報を第１時刻に取得した後、データ情報を取得する毎に各取得時を逐次第２時刻と定めて、検査対象のメモリ領域に係る前記属性情報により示される属性が、メモリ領域内のデータの更新を許容する旨を表す属性である場合において、検査対象のメモリ領域を構成する各ページについての、前記第１時刻に取得された第１のデータ情報を構成するハッシュ値と当該第２時刻に取得された前記第２のデータ情報を構成するハッシュ値とが、各ページについて同一であるという事象が生じたか否かを逐次判別し、各ページについて当該事象が生じた数をカウントし、各ページについて当該事象が生じた数が所定値になったときには異常が発生している可能性があると判定することを特徴とするとしてもよい。
【００１９】
このような構成にすることによって、メモリリークが発生している可能性があるとされた回数が所定数より多くなるページの存在に起因してコンピュータシステムが破綻してしまう可能性が高くなる場合に、コンピュータシステムの破綻を回避するための処理を行うことができるようになるという効果を有する。
【００２０】
また、前記判定処理手段は、検査対象のメモリ領域に係る前記属性情報により示される属性が、メモリ領域内のデータの更新を許容しない旨を表す属性である場合において、検査対象のメモリ領域を構成するいずれかのページについての、前記第１のデータ情報を構成するハッシュ値と前記第２のデータ情報を構成するハッシュ値とが同一でないときには異常が発生している可能性があると判定することを特徴とするとしてもよい。
【００２１】
このような構成にすることによって、異常データ書き込みが発生している可能性があるページを検知することができるという効果を有する。
また、前記メモリ管理情報は、前記オペレーティングシステムによりメモリ空間を構成する各ページがプログラムに対して割り当てられているか否かを識別可能な情報を含み、前記属性情報は、検査対象のメモリ領域を構成する各ページがプログラムに対して割り当てられているか否かを識別可能な情報を含み、前記判定処理手段は、検査対象のメモリ領域を構成するページのうち、対応する前記属性情報により示される属性がプログラムに対して割り当てられていない旨を示すページについては、当該ページについての、前記第１のデータ情報を構成するハッシュ値と前記第２のデータ情報を構成するハッシュ値とが同一でないときには異常が発生している可能性があると判定することを特徴とするとしてもよい。
【００２２】
このような構成にすることによって、プログラムが割り当てられていないページに対して異常データ書き込みが発生している可能性を検知することができるという効果を有する。
【００２３】
また、前記属性情報取得手段は、前記属性情報を逐次取得し、前記データ情報取得手段は、前記データ情報を所定時間間隔で取得し、前記判定処理手段は、前記属性情報により示され得るメモリ領域の属性各々と、当該属性のメモリ領域内のデータが前記所定時間のうちに更新されない確率とを対応付けた確率情報を記憶する記憶部を有し、前記判定処理手段は、前記所定時間間隔で第２時刻を定めるとともに当該第２時刻の前記所定時間前の時刻を第１時刻と定めて、検査対象のメモリ領域を構成するいずれかのページについての、前記第１のデータ情報を構成するハッシュ値と前記第２のデータ情報を構成するハッシュ値とが同一でないという事象が生じたか否かを逐次判別し、当該事象が生じた数と、逐次取得された検査対象のメモリ領域に係る前記属性情報により示される属性に対応する確率とに基づいて、異常が発生している可能性があると判定することを特徴とするとしてもよい。
【００２４】
このような構成にすることによって、確率を、例えば、過去の事例の統計処理等で算出された適切な値としておけば、精度良くメモリアクセス処理の欠陥を検知することができるという効果を有する。
【図面の簡単な説明】
【００２５】
【図１】映像復号装置１００の主要なハードウエア構成を示すブロック図
【図２】ＣＰＵ１１１が管理するメモリ空間を示す図
【図３】ＣＰＵ１１１上で動作しているモジュールを示す図
【図４】メモリ管理情報のデータ構成を示す図
【図５】データ情報のデータ構成を示す図
【図６】ルール情報のデータ構成を示す図
【図７】データ情報生成処理を示すフローチャート
【図８】欠陥検知処理を示すフローチャートその１
【図９】欠陥検知処理を示すフローチャートその２
【図１０】時刻ｔ０と時刻ｔ０＋Δｔと時刻ｔ０＋２＊Δｔとに生成されたデータ情報を示す図
【図１１】時刻ｔ０＋Δｔにおける、各種配列の値を示す図
【図１２】時刻ｔ０＋２＊Δｔにおける、各種配列の値を示す図
【図１３】変形ルール情報のデータ構成を示す図
【図１４】第１変形欠陥検知処理を示すフローチャートその１
【図１５】第１変形欠陥検知処理を示すフローチャートその２
【図１６】第１変形欠陥検知処理を示すフローチャートその３
【図１７】時刻ｔ０と時刻ｔ０＋Δｔと時刻ｔ０＋２＊Δｔとに生成されたデータ情報を示す図
【図１８】時刻ｔ０＋Δｔにおける、各種配列の値を示す図その１
【図１９】時刻ｔ０＋Δｔにおける、各種配列の値を示す図その２
【図２０】時刻ｔ０＋２＊Δｔにおける、各種配列の値を示す図その１
【図２１】時刻ｔ０＋２＊Δｔにおける、各種配列の値を示す図その２
【図２２】第２変形欠陥検知処理を示すフローチャートその１
【図２３】第２変形欠陥検知処理を示すフローチャートその２
【図２４】補足におけるルール情報のデータ構造を示す図
【発明を実施するための形態】
【００２６】
＜実施の形態１＞
以下、本発明に係るメモリ検査システムの一実施形態として、ハードディスク装置に記憶されているＭＰＥＧ（Moving Picture Experts Group）方式で符号化されたデータを復号する機能と、内蔵するＣＰＵが管理するメモリ空間内にメモリアクセス処理の欠陥が発生している場合に、そのメモリアクセス処理の欠陥の発生を検知して、メモリアクセス処理の欠陥が発生している旨の信号を、例えばモニタ等の外部装置に出力する映像復号装置について説明する。
【００２７】
この映像復号装置は、内蔵するＣＰＵが管理するメモリ空間内にメモリアクセス処理の欠陥が発生している場合に、そのメモリアクセス処理の欠陥の発生を検知して、メモリアクセス処理の欠陥が発生している旨の信号を外部に出力する。
【００２８】
以下、本実施の形態１に係る映像復号装置の構成について図面を参照しながら説明する。
＜構成＞
図１は、映像復号装置１００の主要なハードウエア構成を示すブロック図である。
【００２９】
同図に示す通り、映像復号装置１００は、システムＬＳＩ（Large Scale Integration）１１０と、外部バス１２０と、ハードディスク装置１３０と、メインメモリ１４０と、通信装置１５０と、入力装置１６０と、リモコン１７０とから構成される。
【００３０】
システムＬＳＩ１１０は、ＭＭＵ（Memory Management Unit）１１８を内蔵するＣＰＵ１１１と、ＡＶ出力ポート１１２と、周辺回路１１３と、内部バス１１４と、ＤＳＰ（Digital Signal Processor）１１５と、ＲＯＭ１１６と、入出力ポート１１７とを集積した集積回路であって、外部バス１２０と接続する。
【００３１】
ＣＰＵ１１１は、内部バス１１４と接続し、ＲＯＭ１１６、メインメモリ１４０、又はハードディスク装置１３０に記憶されているＯＳやアプリケーションプログラムを実行することで、ＡＶ出力ポート１１２、周辺回路１１３、内部バス１１４、ＤＳＰ１１５、ＲＯＭ１１６、入出力ポート１１７、外部バス１２０、ハードディスク装置１３０、メインメモリ１４０、通信装置１５０、入力装置１６０等を制御して、様々な機能、例えば、ハードディスク装置１３０から符号化されたデータを読み出し、読み出したデータをＤＳＰ１１５に復号させて、復号したデータをＡＶ出力ポート１１２から出力するという機能等を実現する。
【００３２】
また、ＣＰＵ１１１は、稼働中のＯＳがＭＭＵ１１８を用いることによって、ＣＰＵ１１１上で実行されるＯＳやアプリケーションプログラムの使用対象であるメモリ空間を管理する機能を実現する。
【００３３】
図２は、ＣＰＵ１１１が管理するメモリ空間を示す図である。
同図に示されるように、ＣＰＵ１１１は、物理アドレス0x0000 0000〜0xFFFF FFFFのメモリ空間を管理する。
【００３４】
ＣＰＵ１１１は、物理アドレス0x0100 0000〜0x1FFF FFFFの領域と、物理アドレス0x4000 0000〜0x7FFF FFFFの領域と、物理アドレス0x8200 0000〜0x87FF FFFFの領域と、物理アドレス0x8A00 0000〜0xDFFF FFFFの領域とをアクセス禁止領域として管理し、物理アドレス0x0000 0000〜0x00FF FFFFの領域と物理アドレス0x8000 0000〜0x81FF FFFFの領域とを、それぞれ、ＲＯＭ１１６に割り当てられるＲＯＭ領域１、ＲＯＭ領域２として管理し、物理アドレス0x2000 0000〜0x3FFF FFFFの領域と物理アドレス0x8800 0000〜0x89FF FFFFの領域とを、それぞれ、メインメモリ１４０に割り当てられるＲＡＭ領域１、ＲＡＭ領域２として管理し、物理アドレス0xE000 0000〜0xFFFF FFFFの領域をＣＰＵ１１１のレジスタに割り当てられるレジスタ領域として管理する。
【００３５】
再び図１に戻って、映像復号装置１００のハードウエア構成の説明を続ける。
ＤＳＰ１１５は、内部バス１１４に接続し、ＣＰＵ１１１によって制御され、ＭＰＥＧ方式で符号化されたデータを復号する機能を有する。
【００３６】
周辺回路１１３は、内部バス１１４に接続し、ＣＰＵ１１１によって制御され、タイマ機能等を有する。
ＲＯＭ１１６は、内部バス１１４に接続し、ＣＰＵ１１１の動作を規定するプログラムと、ＣＰＵ１０１が利用するデータとを記憶している。
【００３７】
ＡＶ出力ポート１１２は、内部バス１１４に接続し、ＣＰＵ１１１によって制御され、内部バス１１４上の信号を外部に出力する機能を有する。
入出力ポート１１７は、内部バス１１４と外部バス１２０とに接続し、内部バス１１４と外部バス１２０との信号のやり取りを仲介する機能を有する。
【００３８】
ハードディスク装置１３０は、外部バス１２０に接続し、ＣＰＵ１１１によって制御され、内蔵するハードディスクにデータを書き込む機能と、内蔵するハードディスクに書き込まれているデータを読み出す機能とを有する。
【００３９】
メインメモリ１４０は、外部バス１２０に接続し、ＣＰＵ１１１が実行するプログラムを一時的に記憶し、ＣＰＵ１１１がプログラムを実行することに伴って発生するデータを一時的に記憶し、ＤＳＰ１１５がＭＰＥＧ方式で符号化されたデータを復号することに伴って発生するデータを一時的に記憶する。
【００４０】
通信装置１５０は、外部バス１２０とネットワーク１８０とに接続し、ＣＰＵ１１１によって制御され、ネットワーク１８０に接続される外部装置と通信する機能を有する。
リモコン１７０は、ユーザから映像復号装置１００を操作する操作コマンドを受け付け、受け付けた操作コマンドを入力装置１６０に送信する機能を有する。
【００４１】
入力装置１６０は、外部バス１２０に接続し、ＣＰＵ１１１によって制御され、リモコン１７０から送信される操作コマンドを受信し、受信した操作コマンドを外部バス１２０、入出力ポート１１７、内部バス１１４を介してＣＰＵ１１１に出力する機能を有する。
【００４２】
以下、上記構成を備える映像復号装置１００によって実現される機能について説明する。
映像復号装置１００によって実現される主な機能には、（１）ハードディスク装置１３０に記憶されているＭＰＥＧ方式で符号化されたデータを読み出して復号し、復号したデータをＡＶ出力ポート１１２から外部へ出力するデコード機能と、（２）ＣＰＵ１１１が管理するメモリ空間内にメモリアクセス処理の欠陥が発生している場合に、そのメモリアクセス処理の欠陥を検知し、メモリアクセス処理の欠陥が検知された旨の信号をＡＶ出力ポート１１２から外部へ出力するメモリアクセス処理の欠陥検出機能とがある。
【００４３】
ここで、メモリアクセス処理の欠陥が発生している場合とは、（１）ＣＰＵ１１１上で実行されているプログラムによって確保されているメモリ空間内の領域に、ＣＰＵ１１１以外のデバイス、例えばＤＳＰ１１５によってデータ書き込みが行われる場合（異常データ書き込みが発生している場合）と、（２）ＣＰＵ上で実行されるプログラムが、例えばそのプログラムに含まれている不具合によって、メモリ領域を使用する処理が終了しているにも関わらず、そのメモリ領域を解放しない場合（メモリリークが発生している場合）とである。
【００４４】
このメモリアクセス処理の欠陥検出機能は、映像復号装置１００によって実現される特徴的な機能であるので、以下、このメモリアクセス処理の欠陥検出機能について、図面を参照しながら詳細に説明する。
【００４５】
＜メモリアクセス処理の欠陥検出機能＞
図３は、映像復号装置１００がメモリアクセス処理の欠陥検出機能を実現している場合において、ＣＰＵ１１１によってＯＳとアプリケーションプログラムとが実行されることによって、ＣＰＵ１１１上で機能的に動作しているモジュールを示す図である。
【００４６】
同図に示されるように、ＣＰＵ１１１上では、監視モジュール３６０と、データ情報生成モジュール３７０と、ＯＳ３４０内のモジュールであるメモリ管理モジュール３５０とが動作している。
【００４７】
メモリ管理モジュール３５０は、メモリ空間を管理しているモジュールであって、ＣＰＵ１１１上で動作しているプログラムによるメモリ領域の確保要求に応じてメモリ管理情報を作成する機能と、記憶するメモリ管理情報に基づいて、メモリ空間を４０９６Ｂｙｔｅのページ単位で管理する機能とを有する。
【００４８】
図４は、メモリ管理モジュール３５０によって記憶されているメモリ管理情報のデータ構成を示す図である。
同図に示されるように、メモリ管理情報は、各ページの開始アドレス４０１と、そのページの属性を示すページ属性とが対応付けられたものである。
【００４９】
ページ属性とは、ＣＰＵ１１１上で動作しているモジュールからのメモリ領域の確保要求に応じて、メモリ管理モジュール３５０によって各ページに対応付けられる属性であって、ページ属性には、（１）使用中：Ｋ、（２）使用中：Ｃ、（３）使用中：Ｄ（４）未使用の４つの種類がある。
【００５０】
メモリ管理モジュール３５０は、プログラムからメモリ領域の確保要求があった場合においてそのメモリ領域を確保することが可能であるとき、そのメモリ領域に含まれるページに、「使用中：Ｋ」、「使用中：Ｃ」、又は「使用中：Ｄ」のうちのいずれか１つのページ属性を対応付け、プログラムからメモリ領域の解放要求があった場合においてそのメモリ領域を解放することが可能であるとき、そのメモリ領域に含まれるページに、「未使用」の属性を対応付ける。
【００５１】
ページ属性「使用中：Ｋ」は、そのページが、ＯＳのカーネルのオブジェクトコードやＯＳのカーネルによって使用される定数を記憶するために確保されたメモリ領域に含まれていることを示す属性である。
【００５２】
ページ属性「使用中：Ｃ」は、そのページが、ＯＳのカーネル以外のオブジェクトコードやＯＳのカーネル以外によって使用される定数を記憶するために確保されたメモリ領域に含まれていることを示す属性である。
【００５３】
ページ属性「使用中：Ｄ」は、そのページが、変数等を記憶するために確保されたメモリ領域に含まれていることを示す属性である。
ページ属性「未使用」は、そのページが、プログラムによって確保されたメモリ領域に含まれないことを示す属性である。
【００５４】
例えば、開始アドレス４０１が0x2001 0000のページは、ＯＳのカーネルによって確保された領域であって、「使用中：Ｋ」のページ属性が対応付けられ、0x2001 1000のページは、メモリ管理モジュールＤによって確保されたメモリ領域であって、「使用中：Ｄ」のページ属性が対応付けられている。
【００５５】
再び図３に戻って、ＣＰＵ１１１上で動作しているモジュールの説明を続ける。
データ情報生成モジュール３７０は、メインメモリ１４０の物理アドレス0x2000 0000〜0x3FFF FFFFのメモリ領域に記憶されているデータに対して、４０９６Ｂｙｔｅのページ毎に、３２ビット右シフトＣＲＣ（Cyclic Redundancy Check）方式による４Ｂｙｔｅのハッシュ値を生成する機能と、算出したハッシュ値を物理アドレスの開始アドレスとを対応付けたものであるデータ情報を生成して生成して記憶する機能とを有する。
【００５６】
このデータ情報を生成して記憶する機能は、データ情報生成モジュール３７０がデータ情報生成処理を実行することで実現されるが、このデータ情報生成処理については、後程図面を用いて詳細に説明する。
【００５７】
図５は、データ情報生成モジュール３７０によって記憶されるデータ情報のデータ構成を示す図である。
同図に示されるように、データ情報は、ページの開始アドレス５０１と、そのページの４Ｂｙｔｅのハッシュ値とが対応付けられたものである。
【００５８】
再び図３に戻って、ＣＰＵ１１１上で動作しているモジュールの説明を続ける。
監視モジュール３６０は、ルール情報（後述）を記憶する機能と、メモリ管理モジュール３５０からメモリ管理情報を取得し、データ情報生成モジュール３７０からデータ情報を取得し、取得したメモリ管理情報と、取得したデータ情報と、記憶するルール情報とから、メインメモリ１４０の物理アドレス0x2000 0000〜0x3FFF FFFFのメモリ領域にメモリアクセス処理の欠陥が発生しているか否かを検知する機能とを有する。
【００５９】
このメモリアクセス処理の欠陥が発生しているか否かを検知する機能は、監視モジュール３６０が欠陥検知処理を行うことによって実現される。この欠陥検知処理については、後程図面を用いて詳細に説明する。
【００６０】
図６は、監視モジュール３６０が記憶するルール情報のデータ構成を示す図である。
同図に示されるように、ページ属性６０１のそれぞれに、ルール「変化しない」もしくは、ルール「変化する」のいずれか一方となるルール６０２を対応付けたものである。
【００６１】
ここで、ルール６０２は、対応するページにメモリアクセス処理の欠陥が発生しているか否かを判定するためのルールである。
ルール「変化しない」は、対応するページに記憶されているデータが変化しない場合に、そのページにメモリアクセス処理の欠陥が発生していないと判断し、対応するページに記憶されているデータが変化する場合に、そのページにメモリアクセス処理の欠陥が発生していると判断するというルールである。
【００６２】
ルール「変化する」は、対応するページに記憶されているデータが変化する場合に、そのページにメモリアクセス処理の欠陥が発生していないと判断し、対応するページに記憶されているデータが変化しない場合に、そのページにメモリアクセス処理の欠陥が発生していると判断するというルールである。
【００６３】
「使用中：Ｋ」、「使用中：Ｃ」、又は「未使用」のページ属性が対応付けられているページについては、そのページにメモリアクセス処理の欠陥が発生しない限り、記憶されているデータは変化することがないという仮定と、「使用中：Ｄ」のページ属性が対応付けられているページについては、そのページにメモリアクセス処理の欠陥が発生しない限り、記憶されているデータは変化するものであるという仮定とに基づいて、ルール情報は、「使用中：Ｋ」、「使用中：Ｃ」、及び「未使用」であるページ属性にルール「変化しない」が対応付けられ、「使用中」であるページ属性には、ルール「変化する」が対応付けられている。
【００６４】
以上のように構成される映像復号装置１００の行う動作について、以下、図面を参照しながら説明する。
＜動作＞
ここでは、映像復号装置１００の行う動作のうち、特徴的な動作である、データ情報生成モジュール３７０が行うデータ情報生成処理と、監視モジュール３６０が行う欠陥検知処理とについて説明する。
【００６５】
＜データ情報生成処理＞
図７は、データ情報生成モジュール３７０が行うデータ情報生成処理を示すフローチャートである。
【００６６】
このデータ情報生成処理は、監視対象であるメモリ領域に含まれる４０９６Ｂｙｔｅからなるページのそれぞれに対して、３２ビット右シフトＣＲＣ方式で４Ｂｙｔｅのハッシュ値を生成して記憶するという処理である。
【００６７】
ここでは、監視対象であるメモリ領域が、アドレス0x2000 0000〜0x3FFF FFFFの領域であるものとして説明する。
データ情報生成処理は、データ情報生成モジュール３７０が起動されることによりその処理を開始する。
【００６８】
データ情報生成モジュール３７０が起動されると、データ情報生成モジュール３７０は、監視対象メモリ領域の開始アドレスを格納する変数top、監視対象メモリ領域の終了アドレスの次のアドレスを格納する変数end、ハッシュ値を格納するためのメモリ領域の開始アドレスを格納する変数hint、ハッシュ値のバイト数を格納する変数sigsize、ページのバイト数を格納する変数pagesizeを初期化して初期値を代入する（ステップＳ７００）。
【００６９】
すなわち、変数topに0x2000 0000を代入し、変数endに0x4000 0000を代入し、変数hintに0x8900 0000を代入し、変数sigsizeに４を代入し、変数pagesizeに４０９６を代入する。
【００７０】
次に、データ情報生成モジュール３７０は、現在着目しているページの開始アドレスを格納する変数ptrに変数topの値を代入し、現在着目しているページのハッシュ値を書き込む４Ｂｙｔｅのメモリ領域の開始アドレスを格納する変数houtに変数hintの値を代入し、周辺回路１１３のタイマ機能を用いて時間の計測を開始する（ステップＳ７１０）。
【００７１】
ステップＳ７１０の処理を終えると、データ情報生成モジュール３７０は、変数ptrの値が、変数endの値よりも小さいか否かを調べる（ステップＳ７２０）。
ステップＳ７２０において、変数ptrの値が変数endの値よりも小さい場合に（ステップＳ７２０：Ｙｅｓ）、データ情報生成モジュール３７０は、変数ptrの値で示される開始アドレスのページに対して３２ビット右シフトＣＲＣ方式でハッシュ値を生成し、生成したハッシュ値を変数sに格納する（ステップＳ７３０）。
【００７２】
変数sにハッシュ値が格納されると、データ情報生成モジュール３７０は、変数houtで示される開始アドレスから４Ｂｙｔｅのメモリ領域に変数sの値を格納する（ステップＳ７４０）。
【００７３】
ステップＳ７４０の処理を終えると、データ情報生成モジュール３７０は、変数houtの値をsigsizeの値だけインクリメントして、変数ptrの値をpagesizeの値だけインクリメントする（ステップＳ７５０）。
【００７４】
ステップＳ７５０の処理を終えると、データ情報生成モジュール３７０は、再びステップＳ７２０の処理に戻って、変数ptrの値が変数endの値以上になるまで、ステップＳ７２０〜ステップＳ７５０の処理を繰り返す。
【００７５】
この繰り返し処理によって、データ情報生成モジュール３７０は、アドレス0x2000 0000〜0x4000 0000のメモリ領域の全てのページについてのハッシュ値を生成し、生成したハッシュ値をアドレス0x8900 0000を開始アドレスとするメモリ領域に格納する。
【００７６】
ステップＳ７２０の処理において、変数ptrの値が変数endの値以上の場合に（ステップＳ７２０：Ｎｏ）、データ情報生成モジュール３７０は、変数hintの値を監視モジュール３６０に出力する（ステップＳ７６０）ことで、監視モジュール３６０が行う欠陥検知処理におけるステップＳ８１０以降の処理（後述）を起動させる。
【００７７】
ステップＳ７６０の処理を終えると、データ情報生成モジュール３７０は、前回タイマを起動してから所定時間Δｔ（例えば１時間）経過するまで待機し（ステップＳ７７０）、所定時間Δｔ（例えば１時間）経過すると、再びステップＳ７１０の処理に戻って、ステップＳ７１０以降の処理を行う。
【００７８】
＜欠陥検知処理＞
図８、図９は、監視モジュール３６０が行う欠陥検知処理を示すフローチャートである。
【００７９】
この欠陥検知処理は、監視対象であるメモリ領域に含まれる４０９６Ｂｙｔｅからなるページのそれぞれに対して、データ情報の時間変動がメモリ管理情報に矛盾しているか否かを調べ、矛盾している場合に、監視対象であるメモリ領域が異常状態であると判定する処理である。
【００８０】
欠陥検知処理は、監視モジュール３６０が起動されることによりその処理を開始する。
監視モジュール３６０が起動されると、監視モジュール３６０は、前回データ情報生成モジュールから取得したハッシュ値を格納する配列prv_hint[]、今回データ情報生成モジュールから取得したハッシュ値を格納する配列cur_hint[]、ページ属性を格納する配列pge_prop[]を初期化して初期値を代入する（ステップＳ８００）。
【００８１】
ステップＳ８００の処理を終えると、監視モジュール３６０は、データ情報生成モジュール３７０から変数hintの値が入力されるのを待つ（ステップＳ８１０）。
ステップＳ８１０において、変数hintの値が入力されると（ステップＳ８１０：Ｙｅｓ）、監視モジュール３６０は、hintの値を開始アドレスとする４Ｂｙｔｅのメモリ領域に格納されている値を、配列cur_hint[]に４Ｂｙｔｅ毎に順に０ｘ２００００回格納する（ステップＳ８２０）。
【００８２】
ステップＳ８２０の処理が終了すると、監視モジュール３６０は、メモリ管理情報を参照して、物理アドレス0x2000 0000〜0x4000 0000のアドレスのページのページ属性を、配列pge_prop[]に物理アドレス0x2000 0000に対応するページから順に０ｘ２００００回格納する（ステップＳ８３０）。
【００８３】
例えば、ページ属性が「使用中：Ｋ」を示す値を０、ページ属性が「使用中：Ｃ」を示す値を１、ページ属性が「使用中：Ｄ」を示す値を２、ページ属性が「未使用」を示す値を３とすれば、ページ属性が「使用中：Ｋ」であれば、配列pge_prop[]に０を格納し、ページ属性が「使用中：Ｃ」であれば、配列pge_prop[]に１を格納し、ページ属性が「使用中：Ｄ」であれば、配列pge_prop[]に２を格納し、ページ属性が「未使用」であれば、配列pge_prop[]に３を格納する。
【００８４】
ステップＳ８３０の処理が終わると、監視モジュール３６０は、配列prv_hint[]と、配列cur_hint[]と、配列pge_prop[]と、メモリアクセス処理の欠陥が検知されたか否かを示す値を格納する変数resultとを引数として、サブルーチンを起動する（ステップＳ８４０）。
【００８５】
サブルーチンが起動されると、サブルーチンはパラメータである引数を受領し（ステップＳ９００：図９参照）、着目しているページのインデックスを格納する変数indexと、最後のページのインデックスを格納する変数last_indexとを初期化して初期値を代入する（ステップＳ９０５）。
【００８６】
すなわち、変数indexに最初のページを示す０を代入し、変数last_indexに最後のページを示すcur_hint[]の最後のインデックスを代入する。
ステップＳ９０５の処理が終わると、サブルーチンは、変数indexの値が変数last_indexの値以下であるか否かを調べる（ステップＳ９１０）。
【００８７】
ステップＳ９１０において、変数indexの値が変数last_indexの値以下である場合に（ステップＳ９１０：Ｙｅｓ）、サブルーチンは、ルール情報からpage_prop[index]で示されるページ属性のルールを取得し、取得したルールを示す値を変数ruleに格納する（ステップＳ９１５）。
【００８８】
例えば、ルールが「変化しない」を示す値を０、ルールが「変化する」を示す値を１とすると、ルールが「変化しない」であれば、配列page_prop[index]に０を格納し、ルールが「変化する」であれば、配列page_prop[index]に１を格納する。
【００８９】
ステップＳ９１５の処理が終わると、サブルーチンは、変数ruleに格納された値が「変化しない」を示すものであるかを調べる（ステップＳ９２０）。
ステップＳ９２０において、変数ruleに格納された値が「変化しない」を示すものであった場合に（ステップＳ９２０：Ｙｅｓ）、サブルーチンは、配列cur_hint[index]の値と配列prv_hint[index]の値とが等しいか否かを調べる（ステップＳ９２５）。
【００９０】
ステップＳ９２０において、変数ruleに格納された値が「変化する」を示すものであった場合に（ステップＳ９２０：Ｎｏ）、サブルーチンは、配列cur_hint[index]の値と配列prv_hint[index]の値とが等しくないか否かを調べる（ステップＳ９３０）。
【００９１】
ステップＳ９２５において、配列cur_hint[index]の値と配列prv_hint[index]の値とが等しい場合（ステップＳ９２５：Ｙｅｓ）と、ステップＳ９３０において、配列cur_hint[index]の値と配列prv_hint[index]の値とが等しくない場合（ステップＳ９３０：Ｙｅｓ）とに、サブルーチンは、変数indexの値を１だけインクリメントして（ステップＳ９３５）、再びステップＳ９１０の処理に戻って、ステップＳ９１０以降の処理を繰り返す。
【００９２】
ステップＳ９２５において配列cur_hint[index]の値と配列prv_hint[index]の値とが等しくない場合（ステップＳ９２５：Ｎｏ）と、ステップＳ９３０において配列cur_hint[index]の値と配列prv_hint[index]の値とが等しい場合（ステップＳ９３０：Ｎｏ）とに、サブルーチンは、変数resultに監視対象のメモリ領域が「異常状態」である旨を示す値、例えば１を格納する（ステップＳ９４０）。
【００９３】
ステップＳ９１０において、変数indexの値が変数last_indexの値以下でない場合に（ステップＳ９１０：Ｎｏ）、サブルーチンは、変数resultに監視対象のメモリ領域が「正常状態」である旨を示す値、例えば０を格納する（ステップＳ９４５）。
【００９４】
ステップＳ９４０の処理が終了した場合と、ステップＳ９４５の処理が終了した場合とに、サブルーチンは、監視モジュール３６０に変数resultを返して（ステップＳ９５０）動作を終える。
【００９５】
監視モジュール３６０は、ステップＳ８４０（図８参照）の処理において、サブルーチンから変数resultの値を返されると、変数resultの値が「異常状態」を示すか否かを調べる（ステップＳ８５０）。
【００９６】
ステップＳ８５０において、変数resultの値が「異常状態」を示す場合に（ステップＳ８５０：Ｙｅｓ）、監視モジュール３６０は、メモリアクセス処理の欠陥が検知された旨の信号をＡＶ出力ポート１１２から外部に出力する（ステップＳ８６０）。
【００９７】
ステップＳ８６０の処理が終了した場合と、ステップＳ８５０において、変数resultの値が「正常状態」を示す場合とに（ステップＳ８５０：Ｎｏ）、監視モジュール３６０は、配列prv_hint[]の値に配列cur_hint[]の値を代入し（ステップＳ８７０）、再びステップＳ８１０の処理に戻って、ステップＳ８１０以降の処理を行う。
【００９８】
以下、具体的事例を用いて、上述の欠陥検知処理の説明を行う。
＜欠陥検知処理の具体的動作例＞
この事例は、開始アドレスが0x3FFF E000のページに時刻ｔ０＋Δｔと時刻ｔ０＋２＊Δｔとの間の時刻において、ＣＰＵ１１１以外のデバイス、例えばＤＳＰ１１５によって不正なデータの書き込みが行われ、ページ属性が「未使用」であるにも関わらず、そのページに記憶されているデータが、時刻ｔ０＋Δｔと時刻ｔ０＋２＊Δｔとにおいて変動する事例である。
【００９９】
ここでΔｔとは、データ情報生成モジュール３７０がデータ情報を生成する時間間隔のことであり、例えば１時間である。
図１０は、欠陥検知処理の具体的事例において、データ情報生成モジュール３７０によって、時刻ｔ０と時刻ｔ０＋Δｔと時刻ｔ０＋２＊Δｔとに生成されたデータ情報を示す図である。
【０１００】
同図に示されるように、開始アドレス１００１が0x2001 1000と0x2001 4000と0x2001 5000と0x2001 7000と0x2001 8000と0x2001 A000とであるページのハッシュ値が、時刻ｔ０と時刻ｔ０＋Δｔとで変化しており、開始アドレス１００１が0x2001 1000と0x2001 4000と0x2001 5000と0x2001 7000と0x2001 8000と0x2001 A000と0x3FFF E000であるページのハッシュ値が、時刻ｔ０＋Δｔと時刻ｔ０＋２＊Δｔとで変化している。
【０１０１】
また、欠陥検知処理の具体的事例において、メモリ管理モジュールは、時刻ｔ０と時刻ｔ０＋Δｔと時刻ｔ０＋２＊Δｔとにおいて、図４に示されるメモリ管理情報を用いてメモリを管理しているものとする。
【０１０２】
上述の事例について、以下、時刻ｔ０＋Δｔの直前の時刻から時刻ｔ０＋２＊Δｔを少し過ぎた時刻までの期間に、監視モジュール３６０の行う欠陥検知処理の動作について説明する。
【０１０３】
時刻ｔ０＋Δｔの直前の時刻において、監視モジュール３６０は、配列prv_hint[]に時刻ｔ０における各ページのハッシュ値が格納された状態でデータ情報生成モジュール３７０から変数hintの値が入力されるのを待っている（ステップＳ８１０〜ステップＳ８１０：Ｎｏ）。
【０１０４】
監視モジュール３６０は、時刻ｔ０＋Δｔになると、データ情報生成モジュール３７０からhintの値が入力される（ステップＳ８１０：Ｙｅｓ）ので、時刻ｔ０＋Δｔにおける各ページのハッシュ値を配列cur_hint[]に格納し（ステップＳ８２０）、時刻ｔ０＋Δｔにおける各ページのページ属性を示す値を配列pge_prop[]に格納し（ステップＳ８３０）、配列page_prop[]と配列cur_hint[]の値と配列pre_hint[]とを引数としてサブルーチンを起動する（ステップＳ８４０）。
【０１０５】
図１１は、時刻ｔ０＋Δｔにおける、配列page_prop[]の値１１０１と配列cur_hint[]の値１１０２と配列pre_hint[]の値１１０３とを示す図である。
同図に示されるように、配列page_prop[]の値１１０１によって示されるページ属性が「使用中：Ｋ」、「使用中：Ｃ」、及び「未使用」であるページは、配列pre_hint[]の値１１０３（時刻ｔ０におけるハッシュ値）と配列cur_hint[]の値１１０２（時刻ｔ０＋Δｔにおけるハッシュ値）とがそれぞれ互いに等しくなっており、ページ属性が「使用中：Ｄ」であるページは、配列pre_hint[]の値１１０３と配列cur_hint[]の値１１０２とがそれぞれ互いに異なっている。
【０１０６】
サブルーチンは、上述の引数を受け取って（ステップＳ９００）、変数を初期化する（ステップＳ９０５）と、各ページに対して、ステップＳ９１０〜ステップＳ９３５の処理を行う。
【０１０７】
ルール情報（図６参照）によると、ページ属性が「使用中：Ｋ」、「使用中：Ｃ」、及び「未使用」であるページは、ルール「変化しない」に対応付けられ、ページ属性が「使用中：Ｄ」であるページは、ルール「変化する」に対応付けられているため、全てのページについて、ステップＳ９２５において配列cur_hint[index]の値と配列prv_hint[index]の値とが等しい（ステップＳ９２５：Ｙｅｓ）となるか、ステップＳ９３０において配列cur_hint[index]の値と配列prv_hint[index]の値とが等しくない（ステップＳ９３０：Ｙｅｓ）となる。
【０１０８】
従って、サブルーチンは、変数indexの値が変数last_indexの値と等しくなるまでステップＳ９１０〜ステップＳ９３５の処理を繰り返し、変数indexの値が変数last_indexの値より大きくなると（ステップＳ９１０：Ｙｅｓ）、変数resultに「正常状態」を示す値を格納して（ステップＳ９４５）、監視モジュールに変数resultを返す（ステップＳ９５０）。
【０１０９】
監視モジュール３６０は、変数resultの値が「正常状態」を示すので（ステップＳ８５０：Ｙｅｓ）、配列prv_hint[]の値に配列cur_hint[]の値を代入し（ステップＳ８７０）、データ情報生成モジュール３７０から変数hintの値が入力されるのを待つ（ステップＳ８１０〜ステップＳ８１０：Ｎｏ）。
【０１１０】
監視モジュール３６０は、時刻ｔ０＋２＊Δｔになると、データ情報生成モジュール３７０からhintの値が入力され（ステップＳ８１０：Ｙｅｓ）、時刻ｔ０＋２＊Δｔにおける各ページのハッシュ値を配列cur_hint[]に格納し（ステップＳ８２０）、時刻ｔ０＋２＊Δｔにおける各ページのページ属性を示す値を配列pge_prop[]に格納し（ステップＳ８３０）、配列page_prop[]と配列cur_hint[]の値と配列pre_hint[]とを引数としてサブルーチンを起動する（ステップＳ８４０）。
【０１１１】
図１２は、時刻ｔ０＋２＊Δｔにおける、配列page_prop[]の値１２０１と配列cur_hint[]の値１２０２と配列pre_hint[]の値１２０３とを示す図である。
同図に示されるように、ページ１２００は、ページ属性が「未使用」であるにも関わらず、配列pre_hint[]の値１２０３（時刻ｔ０＋Δｔにおけるハッシュ値）と配列cur_hint[]の値１２０２（時刻ｔ０＋２＊Δｔにおけるハッシュ値）とが互いに異なっている。
【０１１２】
ページ１２００を除けば、配列page_prop[]の値１２０１によって示されるページ属性が「使用中：Ｋ」、「使用中：Ｃ」、及び「未使用」であるページは、配列pre_hint[]の値１２０３と配列cur_hint[]の値１２０２とがそれぞれ互いに等しくなっており、ページ属性が「使用中：Ｄ」であるページは、配列pre_hint[]の値１２０３と配列cur_hint[]の値１２０２とがそれぞれ互いに異なっている。
【０１１３】
サブルーチンは、上述の引数を受け取って（ステップＳ９００）、変数を初期化する（ステップＳ９０５）と、各ページに対して、ステップＳ９１０〜ステップＳ９３５の処理を行う。
【０１１４】
サブルーチンは、ページ１２００になるまでの全てのページについて、ステップＳ９２５において配列cur_hint[index]の値と配列prv_hint[index]の値とが等しい（ステップＳ９２５：Ｙｅｓ）となるか、ステップＳ９３０において配列cur_hint[index]の値と配列prv_hint[index]の値とが等しくない（ステップＳ９３０：Ｙｅｓ）となる。
【０１１５】
従って、サブルーチンは、ページ１２００になるまでステップＳ９１０〜ステップＳ９３５の処理を繰り返す。
ページ１２００になると、サブルーチンは，ステップＳ９２０において、変数ruleに格納された値が「変化しない」を示すものであって（ステップＳ９２０：Ｙｅｓ）、配列cur_hint[index]の値と配列prv_hint[index]の値とが等しくない（ステップＳ９２５：Ｎｏ）ので、変数resultに監視対象のメモリ領域が「異常状態」である旨を示す値を格納して（ステップＳ９４５）、監視モジュールに変数resultを返す（ステップＳ９５０）。
【０１１６】
監視モジュール３６０は、変数resultの値が「異常状態」を示すので（ステップＳ８５０：Ｎｏ）、メモリアクセス処理の欠陥が検知された旨の信号をＡＶ出力ポート１１２から外部に出力し（ステップＳ８６０）、配列prv_hint[]の値に配列cur_hint[]の値を代入し（ステップＳ８７０）、データ情報生成モジュール３７０から変数hintの値が入力されるのを待つ（ステップＳ８１０〜ステップＳ８１０：Ｎｏ）。
【０１１７】
上述の映像復号装置１００によれば、データ情報の時間変動がメモリ管理情報に矛盾していることを検知し、検査対象のメモリ領域にメモリアクセス処理の欠陥が検知された旨の信号を外部に出力することができる。
＜実施の形態２＞
以下、本発明に係るメモリ検査システムの一実施形態として、実施の形態１に係る映像復号装置１００の一部を変形した実施の形態２に係る第１変形映像復号装置について説明する。
【０１１８】
映像復号装置１００は、データ情報の時間変動がメモリ管理情報に矛盾していることを１度でも検知すると、監視対象であるメモリ領域が異常状態であると判定するが、この第１変形映像復号装置は、データ情報の時間変動がメモリ管理情報に矛盾していることを継続的に検知し続けると、監視対象であるメモリ領域が異常状態であると判定する。
【０１１９】
第１変形映像復号装置は、映像復号装置１００と同一のハードウエア構成をしている。
しかしながら、第１変形映像復号装置における、ＲＯＭ１１６に記憶されているＣＰＵ１１１の動作を規定するプログラムの一部と、映像復号装置１００における、ＲＯＭ１１６に記憶されているＣＰＵ１１１の動作を規定するプログラムの一部とが、互いに異なっているため、映像復号装置１００の機能であるメモリアクセス処理の欠陥検出機能は、第１変形メモリアクセス処理の欠陥検出機能に変形されている。
【０１２０】
映像復号装置１００では、メモリ領域の検出機能を実現している場合に、ＣＰＵ１１１上で機能的に動作しているモジュールは、メモリ管理モジュール３５０、監視モジュール３６０、データ情報生成モジュール３７０とであったが、第１変形映像復号装置では、これらのうち、監視モジュール３６０が、第１変形監視モジュールに変形されている。
【０１２１】
以下、実施の形態２に係る第１変形映像復号装置について、映像復号装置１００との相違点を中心に、図面を用いて説明する。
＜第１変形監視モジュール＞
第１変形監視モジュールは、変形ルール情報（後述）を記憶する機能と、メモリ管理モジュール３５０からメモリ管理情報を取得し、データ情報生成モジュール３７０からデータ情報を取得し、取得したメモリ管理情報と、取得したデータ情報と、記憶する変形ルール情報とから、メインメモリ１４０の物理アドレス0x2000 0000〜0x3FFF FFFFのメモリ領域にメモリアクセス処理の欠陥が発生しているか否かを検知する機能を有する。
【０１２２】
このメモリアクセス処理の欠陥が発生しているか否かを検知する機能は、第１変形監視モジュールが第１変形欠陥検知処理を行うことによって実現されるが、この第１変形欠陥検知処理については、後程図面を用いて詳細に説明する。
【０１２３】
図１３は、第１変形監視モジュールが記憶する変形ルール情報のデータ構成を示す図である。
同図に示されるように、ページ属性１３０１のそれぞれに、ルール「変化しない」もしくは、ルール「変化する」のいずれか一方となるルールＡ１３０２と、１以下の数値であるルールＢ１３０３とを対応付けたものである。
【０１２４】
ここで、ルールＡ１３０２は、対応するページにメモリアクセス処理の欠陥が発生しているか否かを判定するための第１のルールである。
ルール「変化しない」は、対応するページに記憶されているデータが変化しない場合に、そのページにメモリアクセス処理の欠陥が発生していない可能性があると判断し、対応するページに記憶されているデータが変化する場合に、そのページにメモリアクセス処理の欠陥が発生している可能性があると判断するというルールである。
【０１２５】
ルール「変化する」は、対応するページに記憶されているデータが変化する場合に、そのページにメモリアクセス処理の欠陥が発生していない可能性があると判断し、対応するページに記憶されているデータが変化しない場合に、そのページにメモリアクセス処理の欠陥が発生している可能性があると判断するというルールである。
【０１２６】
「使用中：Ｋ」、「使用中：Ｃ」、又は「未使用」のページ属性が対応付けられているページについては、そのページにメモリアクセス処理の欠陥が発生しない限り、記憶されているデータは変化することがないという仮定と、「使用中：Ｄ」のページ属性が対応付けられているページについては、そのページにメモリアクセス処理の欠陥が発生しない限り、記憶されているデータは変化するものであるという仮定とに基づいて、ルール情報は、「使用中：Ｋ」、「使用中：Ｃ」、及び「未使用」であるページ属性にルール「変化しない」が対応付けられ、「使用中」であるページ属性には、ルール「変化する」が対応付けられている。
【０１２７】
また、ルールＢ１３０３は、対応するページ属性１３０１が、時間Δｔ（例えば１時間）の間に変化しない確率であって、対応するページにメモリアクセス処理の欠陥が発生しているか否かを判定するための第２のルールである。
【０１２８】
この変化しない確率は、例えば、予め実験によって測定されたデータに基づいて決定されている。
＜第１変形欠陥検知処理＞
図１４、図１５、図１６は、第１変形監視モジュールが行う第１変形欠陥検知処理を示すフローチャートである。
【０１２９】
この第１変形欠陥検知処理は、監視対象であるメモリ領域に含まれる４０９６Ｂｙｔｅからなるページのそれぞれに対して、データ情報の時間変動がメモリ管理情報に矛盾しているか否かを調べ、矛盾を継続的に検知し続けると、監視対象であるメモリ領域が異常状態であると判定する処理である。
【０１３０】
ここでは、監視対象であるメモリ領域が、実施の形態１と同様にアドレス0x2000 0000〜0x3FFF FFFFの領域であるものとして説明する。
第１変形欠陥検知処理は、第１変形監視モジュールが起動されることによりその処理を開始する。
【０１３１】
第１変形監視モジュールが起動されると、第１変形監視モジュールは、前回データ情報生成モジュールから取得したハッシュ値を格納する配列prv_hint[]、今回データ情報生成モジュールから取得したハッシュ値を格納する配列cur_hint[]、ページ属性を格納する配列pge_prop[]、対応するページにメモリアクセス処理の欠陥が発生していない確からしさを示す指標を格納する配列chg_prob[]を初期化して初期値を代入し（ステップＳ１４００）、メモリアクセス処理の欠陥が発生していることを判定するための値を格納する変数chk_bndに０．１を代入して初期化する（ステップＳ１４１０）。
【０１３２】
ステップＳ１４１０の処理を終えると、第１変形監視モジュールは、データ情報生成モジュール３７０から変数hintの値が入力されるのを待つ（ステップＳ１４２０）。
ステップＳ１４２０において、変数hintの値が入力されると（ステップＳ１４２０：Ｙｅｓ）、第１変形監視モジュールは、hintの値を開始アドレスとする４Ｂｙｔｅのメモリ領域に格納されている値を、配列cur_hint[]に４Ｂｙｔｅ毎に順に０ｘ２００００回格納する（ステップＳ１４３０）。
【０１３３】
ステップＳ１４３０の処理が終了すると、第１変形監視モジュールは、メモリ管理情報を参照して、物理アドレス0x2000 0000〜0x4000 0000のアドレスのページのページ属性を、配列pge_prop[]に物理アドレス0x2000 0000に対応するページから順に０ｘ２００００回格納する（ステップＳ１４４０）。
【０１３４】
例えば、ページ属性が「使用中：Ｋ」を示す値を０、ページ属性が「使用中：Ｃ」を示す値を１、ページ属性が「使用中：Ｄ」を示す値を２、ページ属性が「未使用」を示す値を３とすれば、ページ属性が「使用中：Ｋ」であれば、配列pge_prop[]に０を格納し、ページ属性が「使用中：Ｃ」であれば、配列pge_prop[]に１を格納し、ページ属性が「使用中：Ｄ」であれば、配列pge_prop[]に２を格納し、ページ属性が「未使用」であれば、配列pge_prop[]に３を格納する。
【０１３５】
ステップＳ１４４０の処理が終わると、第１変形監視モジュールは、配列prv_hint[]と、配列cur_hint[]と、配列pge_prop[]と、配列chg_probと、メモリアクセス処理の欠陥が検知されたか否かを示す値を格納する変数resultとを引数として、サブルーチンを起動する（ステップＳ１４５０）。
【０１３６】
サブルーチンが起動されると、サブルーチンはパラメータである引数を受領し（ステップＳ１５００：図１５参照）、着目しているページのインデックスを格納する変数indexと、最後のページのインデックスを格納する変数last_indexとを初期化して初期値を代入する（ステップＳ１５１０）。
【０１３７】
すなわち、変数indexに最初のページを示す０を代入し、変数last_indexに最後のページを示すcur_hint[]の最後のインデックスを代入する。
ステップＳ１５１０の処理が終わると、サブルーチンは、変数indexの値が変数last_indexの値以下であるか否かを調べる（ステップＳ１５２０）。
【０１３８】
ステップＳ１５２０において、変数indexの値が変数last_indexの値以下である場合に（ステップＳ１５２０：Ｙｅｓ）、サブルーチンは、ルール情報からpage_prop[index]で示されるページ属性のルール１とルール２とを取得し、取得したルール１を示す値を変数ruleに格納し、取得したルール２を示す値を変数probに格納する（ステップＳ１５３０）。
【０１３９】
例えば、ルールが「変化しない」を示す値を０、ルールが「変化する」を示す値を１とすると、ルールが「変化しない」であれば、配列page_prop[index]に０を格納し、ルールが「変化する」であれば、配列page_prop[index]に１を格納する。
【０１４０】
ステップＳ１５３０の処理が終わると、サブルーチンは、配列chg_prob[index]の値と、１から変数probの値を減算した値とを乗算し、変数cur_probに代入する（ステップＳ１５４０）。
【０１４１】
ステップＳ１５４０の処理が終わると、サブルーチンは、変数ruleに格納された値が「変化しない」を示すものであるかを調べる（ステップＳ１５５０）。
ステップＳ１５５０において、変数ruleに格納された値が「変化しない」を示すものであった場合に（ステップＳ１５５０：Ｙｅｓ）、サブルーチンは、配列cur_hint[index]の値と配列prv_hint[index]の値とが等しいか否かを調べる（ステップＳ１５６０）。
【０１４２】
ステップＳ９２０において、変数ruleに格納された値が「変化する」を示すものであった場合に（ステップＳ１５５０：Ｎｏ）、サブルーチンは、配列cur_hint[index]の値と配列prv_hint[index]の値とが等しくないか否かを調べる（ステップＳ１５７０）。
【０１４３】
ステップＳ１５６０において、配列cur_hint[index]の値と配列prv_hint[index]の値とが等しい場合（ステップＳ１５６０：Ｙｅｓ）と、ステップＳ１５７０において、配列cur_hint[index]の値と配列prv_hint[index]の値とが等しくない場合（ステップＳ１５７０：Ｙｅｓ）とに、サブルーチンは、変数probの値を配列chg_prob[index]に代入する（ステップＳ１６００：図１６参照）。
【０１４４】
ステップＳ１５６０において配列cur_hint[index]の値と配列prv_hint[index]の値とが等しくない場合（ステップＳ１５６０：Ｎｏ）と、ステップＳ１５７０において配列cur_hint[index]の値と配列prv_hint[index]の値とが等しい場合（ステップＳ１５７０：Ｎｏ）とに、サブルーチンは、変数cur_probの値と変数chk_bndの値とを比較する（ステップＳ１６２０）。
【０１４５】
ステップＳ１６２０において、変数cur_probの値が変数chk_bndの値以上であった場合に（ステップＳ１６２０：Ｙｅｓ）、サブルーチンは、変数cur_probの値を配列chg_prob[index]に代入する（ステップＳ１６３０）。
【０１４６】
ステップＳ１６００の処理が終了した場合と、ステップＳ１６３０の処理が終了した場合とに、サブルーチンは、変数indexの値を１だけインクリメントして（ステップＳ１６１０）、再びステップＳ１５２０の処理に戻って、ステップＳ１５２０以降の処理を繰り返す。
【０１４７】
ステップＳ１６２０において、変数cur_probの値が変数chk_bndの値未満であった場合に（ステップＳ１６２０：Ｎｏ）、サブルーチンは、変数resultに監視対象のメモリ領域が「異常状態」である旨を示す値、例えば１を格納する（ステップＳ１６４０）。
【０１４８】
ステップＳ１５２０において、変数indexの値が変数last_indexの値以下でない場合に（ステップＳ１５２０：Ｎｏ）、サブルーチンは、変数resultに監視対象のメモリ領域が「正常状態」である旨を示す値、例えば０を格納する（ステップＳ１６５０）。
【０１４９】
ステップＳ１６４０の処理が終了した場合と、ステップＳ１６５０の処理が終了した場合とに、サブルーチンは、第１変形監視モジュールに変数resultを返して（ステップＳ１６６０）動作を終える。
【０１５０】
第１変形監視モジュールは、ステップＳ１４５０（図１４参照）の処理において、サブルーチンから変数resultの値を返されると、変数resultの値が「異常状態」を示すか否かを調べる（ステップＳ１４６０）。
【０１５１】
ステップＳ１４６０において、変数resultの値が「異常状態」を示す場合に（ステップＳ１４６０：Ｙｅｓ）、第１変形監視モジュールは、メモリアクセス処理の欠陥が検知された旨の信号をＡＶ出力ポート１１２から外部に出力する（ステップＳ１４７０）。
【０１５２】
ステップＳ１４７０の処理が終了した場合と、ステップＳ１４６０において、変数resultの値が「正常状態」を示す場合とに（ステップＳ１４６０：Ｎｏ）、第１変形監視モジュールは、配列prv_hint[]の値に配列cur_hint[]の値を代入し（ステップＳ１４８０）、再びステップＳ１４２０の処理に戻って、ステップＳ１４２０以降の処理を行う。
【０１５３】
以下、具体的事例を用いて、上述の第１変形欠陥検知処理の説明を行う。
＜第１変形欠陥検知処理の具体的動作例＞
この事例は、開始アドレスが0x2001 8000のページに時刻ｔ０と時刻ｔ０＋Δｔとの間の時刻においてメモリリークが発生し、ページ属性が「使用中：Ｄ」であるにも関わらず、そのページに記憶されているデータが、時刻ｔ０と時刻ｔ０＋Δｔと時刻ｔ０＋２＊Δｔとにおいて変動しない事例である。
【０１５４】
ここでΔｔとは、データ情報生成モジュール３７０がデータ情報を生成する時間間隔のことであり、例えば１時間である。
図１７は、第１変形欠陥検知処理の具体的事例において、データ情報生成モジュール３７０によって、時刻ｔ０と時刻ｔ０＋Δｔと時刻ｔ０＋２＊Δｔとに生成されたデータ情報を示す図である。
【０１５５】
同図に示されるように、開始アドレス１００１が0x2001 1000と0x2001 4000と0x2001 5000と0x2001 8000と0x2001 A000とであるページのハッシュ値が、時刻ｔ０と時刻ｔ０＋Δｔと時刻ｔ０＋２＊Δｔで変化している。
【０１５６】
また、第１変形欠陥検知処理の具体的事例において、メモリ管理モジュールは、時刻ｔ０と時刻ｔ０＋Δｔと時刻ｔ０＋２＊Δｔとにおいて、図４に示されるメモリ管理情報を用いてメモリを管理しているものとする。
【０１５７】
上述の事例について、以下、時刻ｔ０＋Δｔの直前の時刻から時刻ｔ０＋２＊Δｔを少し過ぎた時刻までの期間に、第１変形監視モジュールの行う第１変形欠陥検知処理の動作について説明する。
【０１５８】
時刻ｔ０＋Δｔの直前の時刻において、第１変形監視モジュールは、配列prv_hint[]に時刻ｔ０における各ページのハッシュ値が格納された状態でデータ情報生成モジュール３７０から変数hintの値が入力されるのを待っている（ステップＳ１４２０〜ステップＳ１４２０：Ｎｏ）。
【０１５９】
第１変形監視モジュールは、時刻ｔ０＋Δｔになると、データ情報生成モジュール３７０からhintの値が入力される（ステップＳ１４２０：Ｙｅｓ）ので、時刻ｔ０＋Δｔにおける各ページのハッシュ値を配列cur_hint[]に格納し（ステップＳ１４３０）、時刻ｔ０＋Δｔにおける各ページのページ属性を示す値を配列pge_prop[]に格納し（ステップＳ１４４０）、配列page_prop[]と配列cur_hint[]の値と配列pre_hint[]と配列chg_prob[]とを引数としてサブルーチンを起動する（ステップＳ１４５０）。
【０１６０】
図１８は、時刻ｔ０＋Δｔにおける、配列page_prop[]の値１８０１と配列cur_hint[]の値１８０２と配列pre_hint[]の値１８０３とを示す図である。
同図に示されるように、ページ１８００は、ページ属性が「使用中：Ｄ」であるにも関わらず、配列pre_hint[]の値１８０３（時刻ｔ０におけるハッシュ値）と配列cur_hint[]の値１８０２（時刻ｔ０＋Δｔにおけるハッシュ値）とが互いに同じである。
【０１６１】
ページ１８００を除けば、配列page_prop[]の値１８０３によって示されるページ属性が「使用中：Ｋ」、「使用中：Ｃ」、及び「未使用」であるページは、配列pre_hint[]の値１８０３と配列cur_hint[]の値１８０２とがそれぞれ互いに等しくなっており、ページ属性が「使用中：Ｄ」であるページは、配列pre_hint[]の値１８０３と配列cur_hint[]の値１８０２とがそれぞれ互いに異なっている。
【０１６２】
サブルーチンは、上述の引数を受け取って（ステップＳ１５００）、変数を初期化する（ステップＳ１５１０）と、各ページに対して、ステップＳ１５２０〜ステップＳ１６１０の処理を行う。
【０１６３】
サブルーチンは、ページ１８００になるまでの各ページについて、ステップＳ１５６０において配列cur_hint[index]の値と配列prv_hint[index]の値とが等しい（ステップＳ１５６０：Ｙｅｓ）となるか、ステップＳ１５７０において配列cur_hint[index]の値と配列prv_hint[index]の値とが等しくない（ステップＳ１５７０：Ｙｅｓ）となる。
【０１６４】
従って、サブルーチンは、ページ１８００になるまでの各ページについて、ステップＳ１５２０〜ステップＳ６１０の処理においてステップＳ１６００の処理を実行する。
ページ１８００になると、サブルーチンは、ステップＳ１５５０において、変数ruleに格納された値が「変化する」を示すものであって（ステップＳ１５５０：Ｎｏ）、配列cur_hint[index]の値と配列prv_hint[index]の値とが等しい（ステップＳ１５７０：Ｎｏ）ので、変数cur_probの値と変数chk_bndの値とを比較する（ステップＳ１６２０）。
【０１６５】
変数cur_probの値は、ステップＳ１５４０において、配列chg_prob[index]の値が０．７で変数probが０．７であるため（図１３のルール情報を参照）、０．２１であり、変数chk_bndの値よりも大きいので（ステップＳ１６２０：Ｙｅｓ）、サブルーチンは、変数cur_probの値０．２１を配列chg_prob[index]に代入する（ステップＳ１６３０）。
【０１６６】
ページ１８００より後の各ページについては、ページ１８００になるまでの各ページと同様に、ステップＳ１５２０〜ステップＳ１６１０の処理においてステップＳ１６００の処理を実行し、変数indexの値と変数last_indexの値とが等しくなると（ステップＳ１５２０：Ｎｏ）、変数resultに「正常状態」を示す値を格納して（ステップＳ１６５０）、監視モジュールに変数resultを返す（ステップＳ１６６０）。
【０１６７】
図１９は、時刻ｔ０＋Δｔにおける、配列page_prop[]の値１９０１と配列cur_hint[]の値１９０２とステップＳ１５００における配列chg_prob[]の値１９０３とステップＳ１６６０における配列chg_prob[]の値１９０４とを示す図である。
【０１６８】
同図に示されるように、ページ１８００以外の全てのページは、ステップＳ１５００における配列chg_prob[]の値１９０３とステップＳ１６６０における配列chg_prob[]の値１９０４とが互いに等しくなっていて、ページ１８００は、ステップＳ１６６０における配列chg_prob[]の値１９０４がステップＳ１５００における配列chg_prob[]の値１９０３よりも小さくなっている。
【０１６９】
ページ１８００において、ステップＳ１６６０における配列chg_prob[]の値１９０４がステップＳ１５００における配列chg_prob[]の値１９０３よりも小さくなる現象は、ページ１８００が、ページ属性が「使用中：Ｄ」であるにも関わらず、時刻ｔ０におけるハッシュ値Ｓ９が、時刻ｔ０＋Δｔになっても変化していないことを反映したものである。
【０１７０】
第１変形監視モジュールは、変数resultの値が「正常状態」を示すので（ステップＳ１４６０：Ｙｅｓ）、配列prv_hint[]の値に配列cur_hint[]の値を代入し（ステップＳ１４８０）、データ情報生成モジュール３７０から変数hintの値が入力されるのを待つ（ステップＳ１４２０〜ステップＳ１４２０：Ｎｏ）。
【０１７１】
時刻ｔ０＋２＊Δｔになると、データ情報生成モジュール３７０からhintの値が入力される（ステップＳ１４２０：Ｙｅｓ）ので、第１変形監視モジュールは、時刻ｔ０＋２＊Δｔにおける各ページのハッシュ値を配列cur_hint[]に格納し（ステップＳ１４３０）、時刻ｔ０＋２＊Δｔにおける各ページのページ属性を示す値を配列pge_prop[]に格納し（ステップＳ１４４０）、配列page_prop[]と配列cur_hint[]の値と配列pre_hint[]と配列chg_prob[]とを引数としてサブルーチンを起動する（ステップＳ１４５０）。
【０１７２】
図２０は、時刻ｔ０＋２＊Δｔにおける、配列page_prop[]の値２００１と配列cur_hint[]の値２００２と配列pre_hint[]の値２００３とを示す図である。
同図に示されるように、ページ１８００は、ページ属性が「使用中：Ｄ」であるにも関わらず、配列pre_hint[]の値２００３（時刻ｔ０＋Δｔにおけるハッシュ値）と配列cur_hint[]の値２００２（時刻ｔ０＋２＊Δｔにおけるハッシュ値）とが互いに同じである。
【０１７３】
ページ１８００を除けば、配列page_prop[]の値２００３によって示されるページ属性が「使用中：Ｋ」、「使用中：Ｃ」、及び「未使用」であるページは、配列pre_hint[]の値２００３と配列cur_hint[]の値２００２とがそれぞれ互いに等しくなっており、ページ属性が「使用中：Ｄ」であるページは、配列pre_hint[]の値２００３と配列cur_hint[]の値２００２とがそれぞれ互いに異なっている。
【０１７４】
サブルーチンは、上述の引数を受け取って（ステップＳ１５００）、変数を初期化する（ステップＳ１５１０）と、各ページに対して、ステップＳ１５２０〜ステップＳ１６１０の処理を行う。
【０１７５】
サブルーチンは、ページ１８００になるまでの各ページについて、ステップＳ１５６０において配列cur_hint[index]の値と配列prv_hint[index]の値とが等しい（ステップＳ１５６０：Ｙｅｓ）となるか、ステップＳ１５７０において配列cur_hint[index]の値と配列prv_hint[index]の値とが等しくない（ステップＳ１５７０：Ｙｅｓ）となる。
【０１７６】
従って、サブルーチンは、ページ１８００になるまでの各ページについて、ステップＳ１５２０〜ステップＳ６１０の処理においてステップＳ１６００の処理を実行する。
ページ１８００になると、サブルーチンは、ステップＳ１５５０において、変数ruleに格納された値が「変化する」を示すものであって（ステップＳ１５５０：Ｎｏ）、配列cur_hint[index]の値と配列prv_hint[index]の値とが等しい（ステップＳ１５７０：Ｎｏ）ので、変数cur_probの値と変数chk_bndの値とを比較する（ステップＳ１６２０）。
【０１７７】
変数cur_probの値は、ステップＳ１５４０において、配列chg_prob[index]の値が０．２１で変数probが０．７であるため、０．０６３であり、変数chk_bndの値よりも小さいので（ステップＳ１６２０：Ｎｏ）、変数resultに監視対象のメモリ領域が「異常状態」である旨を示す値を格納して（ステップＳ１６４０）、監視モジュールに変数resultを返す（ステップＳ１６６０）。
【０１７８】
図２１は、時刻ｔ０＋２＊Δｔにおける、配列page_prop[]の値２１０１と配列cur_hint[]の値２１０２とステップＳ１５００における配列chg_prob[]の値２１０３とステップＳ１６６０における配列chg_prob[]の値２１０４とを示す図である。
【０１７９】
同図に示されるように、ページ１８００は、ステップＳ１６６０における配列chg_prob[]の値２１０４がステップＳ１５００における配列chg_prob[]の値２１０３よりも小さくなっており、ついには、変数chk_bndの値０．１よりも小さくなっている。
【０１８０】
ページ１８００において、ステップＳ１６６０における配列chg_prob[]の値２１０４がステップＳ１５００における配列chg_prob[]の値２１０３よりも小さくなり、ついには、変数chk_bndの値より小さくなる現象は、ページ１８００が、ページ属性が「使用中：Ｄ」であるにも関わらず、時刻ｔ０におけるハッシュ値Ｓ９が、時刻ｔ０＋Δｔになっても変化せず、さらに、時刻ｔ０＋２＊Δｔになっても変化していないことを反映したものである。
【０１８１】
第１変形監視モジュールは、変数resultの値が「異常状態」を示すので（ステップＳ１４６０：Ｎｏ）、メモリアクセス処理の欠陥が検知された旨の信号をＡＶ出力ポート１１２から外部に出力し（ステップＳ１４７０）、配列prv_hint[]の値に配列cur_hint[]の値を代入し（ステップＳ１４８０）、データ情報生成モジュール３７０から変数hintの値が入力されるのを待つ（ステップＳ１４２０〜ステップＳ１４２０：Ｎｏ）。
【０１８２】
上述の第１変形映像復号装置によれば、データ情報の時間変動がメモリ管理情報に矛盾していることを継続的に検知し続けると、検査対象のメモリ領域にメモリアクセス処理の欠陥が検知された旨の信号を外部に出力することができる。
＜実施の形態３＞
以下、本発明に係るメモリ検査システムの一実施形態として、実施の形態２に係る第１変形映像復号装置の一部を変形した実施の形態３に係る第２変形映像復号装置について説明する。
【０１８３】
第１変形映像復号装置は、データ情報の時間変動がメモリ管理情報に矛盾していることを継続的に検知し続けると、監視対象であるメモリ領域が異常状態であると判定するが、第２変形映像復号装置は、データ情報の時間変動がメモリ管理情報に矛盾していることを継続的に検知するページの数を計測し、そのページの数が許容範囲を超える場合に、監視対象であるメモリ領域が異常状態であると判定する。
【０１８４】
第２変形映像復号装置は、第１変形映像復号装置と同一のハードウエア構成をしている。
しかしながら、第２変形映像復号装置における、ＲＯＭ１１６に記憶されているＣＰＵ１１１の動作を規定するプログラムの一部と、第１変形映像復号装置における、ＲＯＭ１１６に記憶されているＣＰＵ１１１の動作を規定するプログラムの一部とが、互いに異なっているため、第１変形映像復号装置の機能である第１変形メモリアクセス処理の欠陥検出機能は、第２変形メモリアクセス処理の欠陥検出機能に変形されている。
【０１８５】
第１変形映像復号装置では、メモリ領域の検出機能を実現している場合に、ＣＰＵ１１１上で機能的に動作しているモジュールは、メモリ管理モジュール３５０、監視モジュール３６０、第１変形データ情報生成モジュールとであったが、第２変形映像復号装置では、これらのうち、第１変形監視モジュールが、第２変形監視モジュールに変形されている。
【０１８６】
以下、実施の形態３に係る第２変形映像復号装置について、第１変形映像復号装置との相違点を中心に、図面を用いて説明する。
＜第２変形監視モジュール＞
第２変形監視モジュールは、図１３に示される変形ルール情報を記憶する機能と、メモリ管理モジュール３５０からメモリ管理情報を取得し、データ情報生成モジュール３７０からデータ情報を取得し、取得したメモリ管理情報と、取得したデータ情報と、記憶する変形ルール情報とから、メインメモリ１４０の物理アドレス0x2000 0000〜0x3FFF FFFFのメモリ領域にメモリアクセス処理の欠陥が発生しているか否かを検知する機能を有する。
【０１８７】
このメモリアクセス処理の欠陥が発生しているか否かを検知する機能は、第２変形監視モジュールが第２変形欠陥検知処理を行うことによって実現される。
以下、この第２変形欠陥検知処理について、図面を参照しながら説明する。
【０１８８】
＜第２変形欠陥検知処理＞
図１４、図２２、図２３は、第２変形監視モジュールが行う第２変形欠陥検知処理を示すフローチャートである。
【０１８９】
この第２変形欠陥検知処理は、監視対象であるメモリ領域に含まれる４０９６Ｂｙｔｅからなるページのそれぞれに対して、データ情報の時間変動がメモリ管理情報に継続的に矛盾し続けているか否かを調べ、継続的に矛盾しているページの数が許容範囲を超えると、監視対象であるメモリ領域が異常状態であると判定する処理である。
【０１９０】
ここでは、監視対象であるメモリ領域が、実施の形態２と同様にアドレス0x2000 0000〜0x3FFF FFFFの領域であるものとして説明する。
第２変形欠陥検知処理は、第２変形監視モジュールが起動されることによりその処理を開始する。
【０１９１】
第２変形欠陥検知処理のうち、ステップＳ１４００〜ステップＳ１４５０においてサブルーチンを起動するまでの処理は、第１変形欠陥検知処理のステップＳ１４００〜ステップＳ１４５０においてサブルーチンを起動するまでの処理と同じであるので、ここでは説明を省略する。
【０１９２】
サブルーチンが起動されると、サブルーチンはパラメータである引数を受領し（ステップＳ２２００：図２２参照）、継続的に矛盾状態であるページの数を格納する変数countと、着目しているページのインデックスを格納する変数indexと、最後のページのインデックスを格納する変数last_indexとを初期化して初期値を代入する（ステップＳ２２１０）。
【０１９３】
すなわち、変数countに０を代入し、変数indexに最初のページを示す０を代入し、変数last_indexに最後のページを示すcur_hint[]の最後のインデックスを代入する。
ステップＳ２２２０の処理から、ステップＳ２３００の処理又はステップＳ２３２０の処理までは、第１変形欠陥検知処理のステップＳ１５２０の処理から、ステップＳ１６００の処理又はステップＳ１６２０処理までと同じであるので、ここでは説明を省略する。
【０１９４】
ステップＳ２３２０において、変数cur_probの値が変数chk_bndの値以上であった場合に（ステップＳ２３２０：Ｙｅｓ）、サブルーチンは、変数cur_probの値を配列chg_prob[index]に代入する（ステップＳ２３３０）。
【０１９５】
ステップＳ２３２０において、変数cur_probの値が変数chk_bndの値未満であった場合に（ステップＳ２３２０：Ｎｏ）、サブルーチンは、変数countの値を１だけインクリメントする（ステップＳ２３４０）。
【０１９６】
ステップＳ２３００の処理が終了した場合と、ステップＳ２３３０の処理が終了した場合と、ステップＳ２３４０の処理が終了した場合とに、サブルーチンは、変数indexの値を１だけインクリメントして（ステップＳ２３１０）、再びステップＳ２２２０の処理に戻って、ステップＳ２２２０以降の処理を繰り返す。
【０１９７】
ステップＳ２２２０において、変数indexの値が変数last_indexの値以下でない場合に（ステップＳ２２２０：Ｎｏ）、サブルーチンは、変数countの値が許容範囲内（例えば１０以下）であるか否かを調べる（ステップＳ２３５０）。
【０１９８】
ステップＳ２３５０において、変数countの値が許容範囲内であれば（ステップＳ２３５０：Ｙｅｓ）、サブルーチンは、変数resultに監視対象のメモリ領域が「正常状態」である旨を示す値、例えば０を格納する（ステップＳ２３６０）。
【０１９９】
ステップＳ２３５０において、変数countの値が許容範囲内でなければ（ステップＳ２３５０：Ｎｏ）、サブルーチンは、変数resultに監視対象のメモリ領域が「異常状態」である旨を示す値、例えば１を格納する（ステップＳ２３７０）。
【０２００】
ステップＳ２３６０の処理が終了した場合と、ステップＳ２３７０の処理が終了した場合とに、サブルーチンは、第２変形監視モジュールに変数resultを返して（ステップＳ２３８０）動作を終える。
【０２０１】
第２変形監視モジュールは、ステップＳ１４５０の処理において、サブルーチンから変数resultの値を返されると、ステップＳ１４６０の処理以降の処理を行う。
ステップＳ１４６０の処理以降の処理は、第１変形欠陥検知処理のステップＳ１４６０の処理以降の処理と同じなので、ここでは説明を省略する。
【０２０２】
上述の第２変形映像復号装置によれば、データ情報の時間変動がメモリ管理情報に矛盾していることを継続的に検知するページの数が許容範囲を超えると、検査対象のメモリ領域にメモリアクセス処理の欠陥が検知された旨の信号を外部に出力することができる。
＜補足＞
以上、本発明に係るメモリ検査システムの一実施形態として、実施の形態１、実施の形態２、実施の形態３において、３つの映像復号装置の例について説明したが、以下のように変形することも可能であり、本発明は上述した実施の形態で示した通りのメモリ検査システムに限られないことはもちろんである。
（１）実施の形態１において、メモリ検査システムの一実施形態としてＭＰＥＧ方式で符号化されたデータを復号する機能を有する映像復号装置１００を例として説明したが、データ情報の時間変動がメモリ管理情報に矛盾していることを検知する機能を備えていれば、例えば、携帯電話機、カーナビゲーション機器、テレビ受像機、ＰＤＡ（Personal Digital Assistant）等であってもよく、必ずしも映像復号装置である必要はない。
（２）実施の形態１において、システムＬＳＩ１１０がＣＰＵを１つ含んでいる構成の例について説明したが、ＣＰＵの数は必ずしも１つに限定されるものではなく、複数のＣＰＵを含んでいても構わない。
（３）実施の形態１において、システムＬＳＩ１１０は、ＣＰＵ１１１と、ＡＶ出力ポート１１２と、周辺回路１１３と、内部バス１１４と、ＤＳＰ１１５と、ＲＯＭ１１６と、入出力ポート１１７とを集積した集積回路であるとしたが、必ずしも１つの集積回路に集積されている必要はなく、同様の機能を実現することができるものであれば、複数の回路によって構成されていても構わない。
【０２０３】
また、システムＬＳＩ１１０は、ＣＰＵ１１１、ＡＶ出力ポート１１２、周辺回路１１３、内部バス１１４、ＤＳＰ１１５、ＲＯＭ１１６、入出力ポート１１７以外の回路、例えば、メインメモリ１４０や外部バス１２０等といった回路をも含めて集積されている構成であっても構わない。
（４）実施の形態１において、ＣＰＵ１１１はＭＭＵ１１８を内蔵する構成について説明したが、ＯＳがＣＰＵ１１１上で稼働することによって、ＣＰＵ１１１がメモリ空間を管理することができれば、必ずしもＣＰＵ１１１はＭＭＵ１１８を内蔵している必要はない。
（５）実施の形態１において、メモリ管理モジュール３５０は、メモリ空間の管理を４０９６Ｂｙｔｅのページを単位として管理する機能を有する例について説明したが、例えば、１０２４Ｂｙｔｅのサイズのページを単位としてメモリ空間を管理する機能を有するとか、メモリ空間全体を一括で管理する機能を有するといったように、メモリ空間の管理を行う機能を有していれば、必ずしも４０９６Ｂｙｔｅのサイズのページを単位としてメモリ空間の管理を行う機能を有している必要はない。
（６）実施の形態１において、ページ属性には、「使用中：Ｋ」、「使用中：Ｃ」、「使用中：Ｄ」、「未使用」の４つの属性がある例について説明したが、ページを管理するためにそのページに対応付ける属性であれば、これら４種類のページ属性以外の属性が含まれていても構わないし、３つ以下の属性しか含まれていなくても構わない
（７）実施の形態１において、データ情報生成モジュール３７０は、３２ビット右シフトＣＲＣ方式による４Ｂｙｔｅのハッシュ値を生成する例について説明したが、例えば、ＳＨＡ（Secure Hash Algorithm）−１方式による２０Ｂｙｔｅのハッシュ値を生成するといったように、ページに記憶されているデータの実体を示すハッシュ値を生成することができれば、必ずしも３２ビット右シフトＣＲＣ方式による４Ｂｙｔｅのハッシュ値を生成する必要はないし、さらには、ハッシュ値の替わりに、ページに記憶されているデータそのものを用いるとしても構わない。
（８）実施の形態１において、サブルーチンは、ステップＳ１５４０の処理において、変数cur_probに代入する値として、配列chg_prob[index]の値と、１から変数probの値を減算した値との乗算結果の値である例について説明したが、変数cur_probに代入する値が、対応するページのデータ情報の時間変動が連続してメモリ管理情報に矛盾している回数を反映するものであれば、必ずしも配列chg_prob[index]の値と、１から変数probの値を減算した値との乗算結果の値である必要はない。
（９）実施の形態１において、監視モジュール３６０は、ステップＳ８５０において、変数resultの値が「異常状態」を示す場合に（ステップＳ８５０：Ｙｅｓ）、メモリアクセス処理の欠陥が検知された旨の信号をＡＶ出力ポート１１２から外部に出力するとしたが、検知されたメモリアクセス処理の欠陥に適切に対処する処理であれば、必ずしも、メモリアクセス処理の欠陥が検知された旨の信号をＡＶ出力ポート１１２から外部に出力する構成である必要はなく、例えば、ネットワーク１８０を介して所定のアドレスの外部機器にメモリアクセス処理の欠陥が検知された旨の信号を送信する処理を行うことで、所定のアドレスの外部機器に、映像復号装置１００にメモリアクセス処理の欠陥が発生した旨を通知するとしても構わないし、例えば、映像復号装置１００を再起動させる処理を行うことで、例えば、ハードディスク装置１３０に対する不正アクセスによるハードディスク装置１３０に記録されているデータの破壊を予防するとしても構わない。
（１０）また、実施の形態２において、第１変形監視モジュールが記憶する変形ルール情報のルールＢの数値は、時間に応じて変動するとしてもよい。
【０２０４】
図２４は、変形ルール情報のルールＢの数値が時間に応じて変動する例における、変形ルール情報のデータ構成を示す図である。
ここで、ルールＢ−ａ２４０３は、第１変形映像復号装置が起動してから所定時間（例えば３時間）以内の時刻における対応するページ属性２４０１が、時間Δｔ（例えば１時間）の間に変化しない確率であって、ルールＢ−ｂ２４０４は、第１変形映像復号装置が起動してから所定時間（例えば３時間）以降の時刻における対応するページ属性２４０１が、時間Δｔ（例えば１時間）の間に変化しない確率である。
【０２０５】
このようにすることによって、第１変形映像復号装置が起動してから所定時間（例えば３時間）以内の時刻における対応するページ属性２４０１が、時間Δｔ（例えば１時間）の間に変化しない確率と、第１変形映像復号装置が起動してから所定時間（例えば３時間）以降の時刻における対応するページ属性２４０１が、時間Δｔ（例えば１時間）の間に変化しない確率とが互いに異なる場合であっても、精度良くメモリアクセス処理の欠陥を検出できるようになる。
（１１）また、実施の形態１において、データ情報生成モジュール３７０は、hintの値を監視モジュール３６０に出力する前に、監視モジュール３６０のコードやデータが破壊されていないかを検証するとしてもよい。
【０２０６】
このようにすることによって、メモリ検査システムの信頼性をより高くことができる。
（１２）また、ＣＰＵ１１１上で実行されるプログラムを、コンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、ＣＤ―ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ）、半導体メモリなどに記録したり、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク等を経由して伝送してもよい。
【０２０７】
このようにすることで、ＣＰＵ１１１上で実行されるプログラムを、コンピュータシステムにインストールして、実施形態で示したメモリ検査システムとして機能させることができる。
【産業上の利用可能性】
【０２０８】
本発明は、ＯＳが稼働するＣＰＵとメモリと含むコンピュータシステムを有する情報処理装置に広く利用することができる。
【符号の説明】
【０２０９】
１００  映像復号装置
１１０  システムＬＳＩ
１１１  ＣＰＵ
１１２  ＡＶ出力ポート
１１３  周辺回路
１１４  内部バス
１１５  ＤＳＰ
１１６  ＲＯＭ
１１７  入出力ポート
１２０  外部バス
１３０  ハードディスク装置
１４０  メインメモリ
１５０  通信装置
１６０  入力装置
１７０  リモコン
１８０  ネットワーク
【図１】
2011203839.tif 000003
【図２】
2011203839.tif 000004
【図３】
2011203839.tif 000005
【図４】
2011203839.tif 000006
【図５】
2011203839.tif 000007
【図６】
2011203839.tif 000008
【図７】
2011203839.tif 000009
【図８】
2011203839.tif 000010
【図９】
2011203839.tif 000011
【図１０】
2011203839.tif 000012
【図１１】
2011203839.tif 000013
【図１２】
2011203839.tif 000014
【図１３】
2011203839.tif 000015
【図１４】
2011203839.tif 000016
【図１５】
2011203839.tif 000017
【図１６】
2011203839.tif 000018
【図１７】
2011203839.tif 000019
【図１８】
2011203839.tif 000020
【図１９】
2011203839.tif 000021
【図２０】
2011203839.tif 000022
【図２１】
2011203839.tif 000023
【図２２】
2011203839.tif 000024
【図２３】
2011203839.tif 000025
【図２４】
2011203839.tif 000026