(57)【要約】【課題】キャッシュラインへのアクセスを許可されていないプロセスに対して秘匿性を確保しつつ、キャッシュラインに記憶された情報を複数のプロセス間で共有することができるキャッシュメモリ制御装置を提供する。【解決手段】キャッシュメモリ制御装置１００は、キャッシュメモリ管理部１を備え、キャッシュメモリ処理部１が、データのキャッシュを行うキャッシュメモリのキャッシュラインごとに、キャッシュラインへの書き込みに応じて、１つ以上のプロセスに対して該キャッシュラインに記憶されているデータへのアクセスの可否を識別する所有者情報を対応付けて記憶し、実行中のプロセスがキャッシュラインにアクセスすると、キャッシュメモリ管理部に記憶されている所有者情報に基づいて、実行中のプロセスに対してアクセスを許可する。【選択図】図１
2010231623.tif 000002
【特許請求の範囲】
【請求項１】
データのキャッシュを行うキャッシュメモリのキャッシュラインに、複数のプロセスに対して該キャッシュラインに記憶されているデータへのアクセスを許可する所有者情報を記憶させ、
実行中のプロセスが前記キャッシュラインにアクセスすると、記憶されている前記所有者情報に基づいて、前記実行中のプロセスに対してアクセスを許可するキャッシュメモリ管理部
を備えたことを特徴とするキャッシュメモリ制御装置。
【請求項２】
前記所有者情報は、
前記キャッシュラインに記憶されているデータの所有者である前記プロセスを識別するプロセス識別情報、又は、当該キャッシュラインにアクセスを許されている複数の前記プロセスを含むグループを識別するグループ識別情報である
ことを特徴とする請求項１に記載のキャッシュメモリ制御装置。
【請求項３】
前記データが記憶されたメモリのアドレス範囲と、前記アドレス範囲へのアクセスが許可されたプロセスのグループを識別するグループ識別情報とを対応付けて記憶する共有範囲管理部を備え、
前記キャッシュメモリ管理部は、
実行中プロセスの前記プロセス識別情報が、前記キャッシュラインに対応する前記所有者識別情報と一致するか、あるいは、実行中プロセスの前記プロセス識別情報が、前記キャッシュラインに対応する前記グループ識別情報に含まれている場合、該実行中のプロセスが該キャッシュラインへのアクセスを許可する
ことを特徴とする請求項２に記載のキャッシュメモリ制御装置。
【請求項４】
前記プロセス識別情報、あるいは前記グループ識別情報に対応付けて暗号鍵を記憶する暗号鍵管理部と、
前記キャッシュラインに記憶されているデータの前記メモリへの書き出しを行う処理において、前記キャッシュラインの前記所有者情報に対応する暗号鍵を前記暗号鍵管理部から読み出し、読み出した暗号鍵で前記キャッシュラインのデータを暗号化して前記メモリへの書き出しを行い、
前記メモリに記憶されている暗号化されたデータの前記キャッシュラインへの書き込みを行う処理において、前記データが記憶されている前記メモリが前記共有範囲管理部の前記アドレス範囲に含まれている場合、当該アドレス範囲に対応するグループ識別情報に対応する暗号鍵を前記暗号鍵管理部から読み出し、読み出した暗号鍵で前記データを復号してキャッシュラインへの書き込みを行い、前記アドレス範囲に含まれていない場合、前記実行中プロセスに対応する暗号鍵を前記暗号鍵管理部から読み出し、読み出した暗号鍵で前記データを復号してキャッシュラインへの書き込みを行う暗号処理部と、
を備えたことを特徴とする請求項３に記載のキャッシュメモリ制御装置。
【請求項５】
データのキャッシュを行うキャッシュメモリのキャッシュラインごとに、複数のプロセスに対して該キャッシュラインに記憶されているデータへのアクセスを許可する所有者情報を記憶する過程と、
実行中のプロセスが前記キャッシュラインにアクセスすると、前記キャッシュメモリ管理部に記憶されている前記所有者情報に基づいて、前記実行中のプロセスに対してアクセスを許可する過程と、を有する
ことを特徴とするキャッシュメモリ制御方法。
【請求項６】
前記所有者情報は、
前記キャッシュラインに記憶されているデータの所有者である前記プロセスを識別するプロセス識別情報、又は、当該キャッシュラインにアクセスを許されている複数の前記プロセスを含むグループを識別するグループ識別情報である
ことを特徴とする請求項５に記載のキャッシュメモリ制御方法。
【請求項７】
前記データが記憶されたメモリのアドレス範囲と、前記アドレス範囲へのアクセスが許可されたプロセスのグループを識別するグループ識別情報とを対応付けて共有範囲管理部に記憶させる過程と、
実行中プロセスの前記プロセス識別情報が、前記キャッシュラインに対応する前記所有者識別情報と一致するか、あるいは、実行中プロセスの前記プロセス識別情報が、前記キャッシュラインに対応する前記グループ識別情報に含まれている場合、該実行中のプロセスが該キャッシュラインへのアクセスを許可する過程と、を有する
ことを特徴とする請求項６に記載のキャッシュメモリ制御方法。
【請求項８】
前記プロセス識別情報、あるいは前記グループ識別情報に対応付けて暗号鍵を暗号鍵管理部に記憶させる過程と、
前記キャッシュラインに記憶されているデータの前記メモリへの書き出しを行う処理において、前記キャッシュラインの前記所有者情報に対応する暗号鍵を前記暗号鍵管理部から読み出し、読み出した暗号鍵で前記キャッシュラインのデータを暗号化して前記メモリへの書き出しを行う過程と、
前記メモリに記憶されている暗号化されたデータの前記キャッシュラインへの書き込みを行う処理において、前記データが記憶されている前記メモリが前記共有範囲管理部の前記アドレス範囲に含まれている場合、当該アドレス範囲に対応するグループ識別情報に対応する暗号鍵を前記暗号鍵管理部から読み出し、読み出した暗号鍵で前記データを復号してキャッシュラインへの書き込みを行い、前記アドレス範囲に含まれていない場合、前記実行中プロセスに対応する暗号鍵を前記暗号鍵管理部から読み出し、読み出した暗号鍵で前記データを復号してキャッシュラインへの書き込みを行う過程と、を有する
ことを特徴とする請求項７に記載のキャッシュメモリ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ装置のキャッシュメモリ、特に複数のプロセス間におけるキャッシュラインのセキュリティに関する。
【背景技術】
【０００２】
近年のコンピュータ装置は、利用目的が多様になっており、著作権保護を目的として音楽などの著作物データの不正コピーを防止するソフトウェアや、情報漏洩防止を目的として暗号化情報を取り扱うソフトウェアなどがコンピュータ装置上で利用されている。これらのソフトウェアは、解析や改ざんをされることでその目的を達成できなくなるため、これらのソフトウェアには、解析や改ざんを防止するために耐タンパ・ソフトウェア技術が利用されることが多い。
【０００３】
耐タンパ・ソフトウェア技術には、プログラム自体をあらかじめ暗号化しておき、実行開始直前に復号化を行ってから実行開始する自己復号化技術や、プログラムの最終的な挙動を変えることなく、意味のない命令の挿入、又は、命令の順番の入れ替えによって解析を困難にするプログラム難読化技術などが含まれる。このような耐タンパ・ソフトウェア技術によって、プログラムの解析や改ざんをある程度困難にすることができる。
【０００４】
しかし、不正コピーを防止するプログラムや、暗号化情報を取り扱うプログラムがプロセッサ上で実行される以上、プログラムの動作を逐一追いかけることによって解析が可能であり、この解析結果を利用することで改ざんも可能である．さらに、オープンソースＯＳ（Operating System；オペレーティング・システム）の利用が近年増えつつあるが、オープンソースＯＳは、ユーザによりソースコードの変更及び解析などが容易に行えるため、悪意を持ったユーザによりソースコードの改造が行われると、上述の不正コピーを防止するプログラムや、暗号化情報を取り扱うプログラムを実行するプロセスが、任意の時点で実行を中断させられて、当該プロセスが使用している記憶領域内の情報に他のプロセス、例えば、ＯＳの特権プロセスなどにより自由にアクセスされることにより、耐タンパ・ソフトウェア技術が無効化される恐れがある。
【０００５】
このような問題を解決するための技術として、セキュア・プロセッサ又は耐タンパ・プロセッサと呼ばれる耐タンパ・ハードウェア技術が考案されている。セキュア・プロセッサは、プログラムをあらかじめ暗号化しておき、プロセッサ内部のキャッシュメモリ上でこれを復号化してから実行するプロセッサである。さらに、プロセスが利用する外部メモリ上のデータを、他のプロセスに対して秘匿する必要がない場合とある場合の２種類にわける。秘匿する必要のないデータは、通常のプロセッサと同様に外部メモリに書き込まれる．秘匿する必要のあるデータは、プロセッサによって暗号化されてから外部メモリに書き出され、外部メモリから読み込まれた後に復号化される。このときに利用される暗号鍵はプロセスごとに異なる。以上の対策によって、プログラム自体、及び外部メモリ上のデータは暗号化されており、ＯＳを含む特権を有するプロセスであっても実行されるプログラムの解析や、プロセスが有するデータにアクセスすることを防ぐことができる。
【０００６】
また、プロセッサ内部に設けられたキャッシュメモリは、通常のプロセッサの場合、一般にＯＳによって、プロセスごとに管理されている（特許文献１）。ＯＳの機能を実行し、特権を有するプロセスは、当該プロセス自身が利用するキャッシュメモリだけでなく、他のプロセスが利用するキャッシュメモリにも自由にアクセスすることが可能である。一方で、セキュア・プロセッサは、キャッシュメモリへのアクセスの最小単位であるキャッシュラインごとの所有者識別機能を有しており、特権を有するプロセスのアクセスであっても所有者以外のプロセスからのアクセスを許可しない機能を有している。これによって、セキュア・プロセッサは、ＯＳの機能を実行し、特権を有するプロセスを含む所有者以外のプロセスから、内部のキャッシュメモリに対してアクセスされることを防ぐことができる。
【０００７】
しかし、上述のようなセキュア・プロセッサは、キャッシュラインの所有者以外のプロセスからのアクセスを制限する機能を有することで、複数プロセス間での情報の共有が困難となっている。具体的には、複数のプロセスが利用する外部メモリ領域は、外部メモリ領域それぞれが異なる鍵で暗号化されていること、キャッシュメモリは、それぞれのキャッシュラインの所有者が異なるためにアクセスが許可されないこと、これらにより、情報の共有が困難となっている。
複数プロセス間で情報の共有を行うためには、プロセス間で安全に鍵を共有してデータの送信側プロセスがこの鍵を利用してデータを暗号化し、プロセッサによって暗号化されない領域にデータを書き出し、データの受信側プロセスがデータを読み込んで、先に共有した鍵で復号化を行う、という長い手順が必要となり、通常のプロセッサにおいて、秘匿性のある情報の共有を行うと、データに対するアクセス速度が大幅に低下するという問題がある。
【０００８】
この問題への対策として、外部メモリ領域に共通の暗号鍵を利用可能とする方法が考案されている （特許文献２)。外部メモリ上のデータを暗号化する鍵は、プロセスごとにセキュア・プロセッサによって自動的に作成され、プロセス単位で１つの鍵が利用されていた。非特許文献１では、１つのプロセスで利用する暗号化メモリ領域を分割し、分割された領域ごとに異なる暗号鍵を指定可能とすることで、特定のプロセスとの共通の暗号化メモリ領域を作成することを可能にした。この共通の暗号化メモリ領域により、セキュア・プロセッサにおけるメモリ共有の速度低下が軽減されている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００７−０１１５８０号公報
【特許文献２】特許４０７４０５７号公報
【非特許文献】
【００１０】
【非特許文献１】David Lie, Chandramohan Thekkath, Mark Mitchell, Patrick Lincoln, Dan Boneh, John Mitchell, and Mark Horowitz, " Architectural Support for Copy and Tamper Resistant Software", Proceedings of the ninth international conference on Architectural support for programming languages and operating systems 2000, November 2000.
【発明の概要】
【発明が解決しようとする課題】
【００１１】
しかしながら、上述の特許文献２に記載された技術において、セキュア・プロセッサでは、外部メモリからキャッシュラインへの読み込みを行ったプロセスを所有者として設定を行い、所有者として設定されたプロセスのみがキャッシュラインに記憶されるデータを読み出す構成となっているために、複数プロセス間においてキャッシュライン上でデータの共有を行うことができない。
【００１２】
このように、特許文献２に記載された技術では、キャッシュラインに記憶されたデータを、アクセスが許可されていない他のプロセス、例えば、特権を有するＯＳのプロセスなどによるアクセスを防ぎ秘匿性を確保しつつ、キャッシュラインに記憶された情報を複数のプロセス間で共有できないという問題がある。
【００１３】
本発明は、上記問題を解決すべくなされたもので、その目的は、キャッシュラインへのアクセスを許可されていないプロセスに対して秘匿性を確保しつつ、キャッシュラインに記憶された情報を複数のプロセス間で共有することができるキャッシュメモリ制御装置を提供することにある。
【課題を解決するための手段】
【００１４】
上記問題を解決するために、本発明は、データのキャッシュを行うキャッシュメモリのキャッシュラインごとに、前記キャッシュラインへの書き込みに応じて、１つ以上のプロセスに対して該キャッシュラインに記憶されているデータへのアクセスの可否を識別する所有者情報を対応付けて記憶すると共に、実行中のプロセスが前記キャッシュラインにアクセスすると、前記キャッシュメモリ管理部に記憶されている前記所有者情報に基づいて、前記実行中のプロセスに対してアクセスを許可するキャッシュメモリ管理部を備えたことを特徴とするキャッシュメモリ制御装置である。
【発明の効果】
【００１５】
この発明によれば、キャッシュラインに対応する所有者情報に基づいて、データを共有する複数のプロセスを識別することにより、当該キャッシュラインに記憶されているデータを複数のプロセスで共有することが可能となる。また、所有者情報に基づいて識別されないプロセスは、キャッシュラインに記憶されているデータに対してアクセスの許可を得ることができず、データを読み出すことができないため、秘匿性を保つことができる。したがって、秘匿性を保ちつつ、複数のプロセス間でキャッシュラインに記憶されたデータの共有を行うことが可能となる。
【図面の簡単な説明】
【００１６】
【図１】第１実施形態のキャッシュメモリ制御装置の構成を示す概略ブロック図である。
【図２】同実施形態におけるキャッシュメモリ制御装置において、複数のプロセス間で共有されるアドレス範囲を設定する動作を示すフローチャート図である。
【図３】同実施形態における実行中のプロセスがキャッシュラインにアクセスする際、キャッシュメモリ制御装置が当該アクセス可否の動作を示すフローチャートである。
【図４】第２実施形態におけるキャッシュメモリ制御装置の構成を示す概略ブロック図である。
【図５】第３実施形態におけるキャッシュメモリ制御装置の構成を示す概略ブロック図である。
【図６】同実施形態におけるキャッシュメモリ制御装置が、キャッシュメモリに記憶されているデータを外部メモリに書き出す動作を示すフローチャートである。
【図７】同実施形態におけるキャッシュメモリ制御装置が、外部メモリに記憶されているデータをキャッシュラインに書き込む動作を示すフローチャートである。
【図８】第１実施例におけるプロセッサの構成を示す概略ブロック図である。
【図９】同実施例におけるプロセッサにおいて、実行されるプロセスがキャッシュラインを共有するグループを設定する動作を示すシーケンス図である。
【図１０】同実施例におけるグループＩＤテーブルに記憶されている情報を示す図である。
【図１１】同実施例におけるプロセスＡとプロセスＢとの間で共有するアドレスを設定する動作例を示すシーケンス図である。
【図１２】同実施例における共有範囲テーブルに記憶されている情報を示す図である。
【図１３】同実施例における所有者情報付キャッシュメモリに記憶されている情報を示す図である。
【図１４】同実施例におけるプロセッサにおいて、プロセスＡがキャッシュにアクセスする動作を示したシーケンス図である。
【図１５】同実施例におけるプロセッサにおいて、キャッシュラインに所有者情報の設定を行うシーケンス図である。
【図１６】第２実施例におけるプロセッサの構成を示す概略ブロック図である。
【図１７】第３実施例におけるプロセッサの構成を示す概略ブロック図である。
【図１８】同実施例における暗号鍵テーブルに記憶されている情報を示す図である。
【発明を実施するための形態】
【００１７】
（第１実施形態）
次に、発明を実施するための最良の形態について図面を参照して詳細に説明する。図１は、第１実施形態のキャッシュメモリ制御装置１００の構成を示す概略ブロック図である。キャッシュメモリ制御装置１００は、図示するように、キャッシュメモリ管理部１、アドレス指定部２、グループＩＤ管理部３、実行中プロセスＩＤ管理部４、及び、共有範囲管理部５を含んで構成される。
【００１８】
キャッシュメモリ管理部１は、キャッシュメモリが有する各キャッシュラインにアクセス可能なプロセス、又は、グループを示す所有者情報をキャッシュラインごとに対応付けて記憶すると共に、キャッシュラインに対応するデータを記憶する。ここで、所有者情報とは、キャッシュラインを複数のプロセス間で共有しない場合、当該キャッシュラインにデータを書き込んだプロセスのプロセスＩＤであり、共有する場合、当該キャッシュラインにデータを書き込んだプロセスを含むグループのグループＩＤである。
また、キャッシュメモリ管理部１は、キャッシュラインに初めにデータが書き込まれるときに、該キャッシュラインに所有者情報を対応付けて記憶する。また、キャッシュメモリ管理部１は、プロセスがキャッシュラインに書き込まれたデータに対してアクセスをする場合、当該キャッシュラインに対応付けられた所有者情報と、実行中プロセスＩＤとを比較し、所有者情報と実行中プロセスＩＤとが一致、又は、所有者情報と実行中プロセスＩＤが属するグループＩＤとが一致する場合、すなわち、実行中プロセスが当該キャッシュラインの所有者であればアクセスを許可し、当該キャッシュラインの所有者でなければアクセスを拒否する。
【００１９】
アドレス指定部２は、プロセスがメモリアクセスを行う際にそのアドレスを指定する。グループＩＤ管理部３は、プロセスＩＤを１つ以上含むグループと、グループに対応付けられたグループＩＤを作成し、管理する。実行中プロセスＩＤ管理部４は、現在実行されているプロセスのＩＤを管理し、実行されているプロセスが切り替わるとプロセスＩＤを変更する。また、実行中プロセスＩＤ管理部４は、実行中のプロセスのプロセスＩＤ（以下、実行中プロセスＩＤという。）をキャッシュメモリ管理部１と、グループＩＤ管理部３とに出力する。
【００２０】
共有範囲管理部５は、複数のプロセス間で共有する記憶領域のアドレス範囲を管理し、当該複数のプロセスからなるグループごとに共有するアドレス範囲と、当該アドレス範囲にアクセスを許可するグループを一意に識別するグループＩＤとを記憶する。また、共有範囲管理部５は、アドレス指定部２により指定されたアドレスが共有するアドレス範囲に含まれる場合、当該アドレス範囲にアクセスが許されたグループＩＤを、キャッシュメモリ管理部１に出力すると共に、グループＩＤをグループＩＤ管理部に出力する。ここで、共有する記憶領域のアドレスは、当該記憶領域を共有する複数のプロセスにおいて、同一のアドレスを用いる。これにより、共有範囲管理部５は、複数のプロセス間において共有される記憶領域をグループＩＤにより管理する。
【００２１】
次に、キャッシュメモリ制御装置１００の動作を説明する。図２は、キャッシュメモリ制御装置１００において、複数のプロセス間で共有されるアドレス範囲を設定する動作を示すフローチャート図である。
まず、共有範囲管理部５は、実行中のプロセスから入力される、共有範囲として設定されるアドレス範囲と、当該アドレス範囲にアクセス可能なグループＩＤとを記憶する（ステップＳ１０１）。
グループＩＤ管理部３は、実行中のプロセスから入力されるグループＩＤから、該グループＩＤに属するプロセスＩＤの一覧を読み出し、キャッシュメモリ管理部１に出力する（ステップＳ１０２）。
【００２２】
キャッシュメモリ管理部１は、実行中プロセスＩＤ管理部４から入力される実行中プロセスＩＤが、ステップＳ１０２でグループＩＤ管理部３から入力されたプロセスＩＤの一覧に含まれるか否かを判定する（ステップＳ１０３）。
実行中プロセスＩＤが入力されたプロセスＩＤの一覧に含まれる場合（ステップＳ１０３：Ｎ）、共有範囲管理部５及びグループＩＤ管理部３に記憶された情報により、共有範囲が設定される（ステップＳ１０４）。
実行中プロセスＩＤが入力されたプロセスＩＤの一覧に含まれない場合（ステップＳ１０３：Ｙ）、ステップＳ１０１において共有範囲管理部５が記憶したアドレス範囲及びグループは消去され、共有範囲の設定を無効にする（ステップＳ１０５）。
【００２３】
次に、グループＩＤを登録する際の、キャッシュメモリ制御装置１００の動作について説明する。
まず、グループＩＤ管理部３は、実行中のプロセスからグループＩＤと当該グループＩＤに含まれる１つ以上のプロセスＩＤの一覧とが入力され、入力されたグループＩＤが既に使用されているか否かを判定する。
グループＩＤ管理部３は、既にグループＩＤが使用されている場合、グループＩＤを新たに生成することはできないので、グループＩＤの作成を行わなかったことを示す情報をエラー情報として実行中のプロセスに出力する。また、グループＩＤ管理部３は、グループＩＤがまだ使用されていない場合、グループＩＤとグループＩＤに含まれるプロセスＩＤとを対応付けて記憶する。
キャッシュメモリ制御装置１００は、上述のように、グループＩＤの登録を行う。
【００２４】
次に、図３は、実行中のプロセスがキャッシュラインにアクセスする際、キャッシュメモリ制御装置１００が当該アクセス可否の動作を示すフローチャートである。
まず、実行中のプロセスによりキャッシュラインへのアクセスが発生すると、アドレス指定部２は、実行中のプロセスから入力されるアドレスをキャッシュメモリ管理部１に出力する（ステップＳ２０１）。
キャッシュメモリ管理部１は、アドレス指定部２から入力されたアドレスに対応するキャッシュラインがキャッシュメモリ上に存在するか否かを判定する（ステップＳ２０２）。
【００２５】
入力されたアドレスに対応するキャッシュラインがキャッシュメモリ上に存在する場合（ステップＳ２０２：Ｎ）、キャッシュメモリ管理部１は、ステップＳ２０２で判定したキャッシュラインの所有者情報を読み出す（ステップＳ２０３）。
さらに、キャッシュメモリ管理部１は、読み出した所有者情報と、実行中プロセスＩＤ管理部４から入力される実行中プロセスＩＤとが一致するか否かを判定する（ステップＳ２０４）。
所有者情報と実行中プロセスＩＤとが一致する場合（ステップＳ２０４：Ｎ）、キャッシュメモリ管理部１は、アクセス対象のキャッシュラインの所有者が、実行中のプロセスであることを確認できたのでキャッシュメモリへのアクセスを許可する（ステップＳ２０５）。
【００２６】
一方、所有者情報と実行中プロセスＩＤとが一致しない場合（ステップＳ２０４：Ｙ）、キャッシュメモリ管理部１は、ステップＳ２０３にて読み出した所有者情報をグループＩＤ管理部３に出力する。グループＩＤ管理部３は、キャッシュメモリ管理部１が出力した所有者情報がグループＩＤとして記憶されている否かを判定する（ステップＳ２０６）。
所有者情報がグループＩＤとして、グループＩＤ管理部３に記憶されていない場合（ステップＳ２０６：Ｙ）、キャッシュメモリ管理部１は、実行中のプロセスによるキャッシュラインのアクセスを許可しない（ステップＳ２１２）。
【００２７】
一方、所有者情報がグループＩＤとして、グループＩＤ管理部３に記憶されている場合（ステップＳ２０６：Ｎ）、グループＩＤ管理部３は、入力されたグループに含まれるプロセスＩＤに含まれるプロセスＩＤ（プロセスＩＤ一覧）を読み出して（ステップＳ２０７）、実行中プロセスＩＤが読み出したプロセスＩＤに含まれるか否かを判定する（ステップステップＳ２０８）。
実行中プロセスＩＤが読み出したプロセスＩＤに含まれない場合（ステップＳ２０８：Ｙ）、キャッシュメモリ管理部１は、実行中のプロセスによるキャッシュラインのアクセスを許可しない（ステップＳ２１２）。
実行中プロセスＩＤが読み出したプロセスＩＤに含まれる場合（ステップＳ２０８：Ｎ）、グループＩＤ管理部３は、実行中のプロセスＩＤが、アクセス対象のキャッシュラインを所有するグループに含まれていることを、キャッシュメモリ管理部１に出力する。キャッシュメモリ管理部１は、キャッシュラインの所有者が実行中プロセスを含むグループであることが確認できたので、実行中プロセスによるキャッシュラインへのアクセスを許可する（ステップＳ２０５）。
【００２８】
また、入力されたアドレスに対応するキャッシュラインがキャッシュメモリ上に存在しない場合（ステップＳ２０２：Ｙ）、キャッシュメモリ管理部１は、実行中のプロセスによるキャッシュラインへのアクセスの種類を判定する（ステップＳ２２０）。
キャッシュラインへのアクセスが読み出しアクセスの場合（ステップＳ２２０：Ｙ）、キャッシュメモリ管理部１は、外部メモリからキャッシュラインへの読み込みを行う（ステップＳ２２１）。
キャッシュラインへのアクセスが書き込みアクセスの場合（ステップＳ２２０：Ｎ）、キャッシュメモリ管理部１は、空きキャッシュラインを確保する（ステップＳ２２２）。
なお、ステップＳ２２１及びステップＳ２２２の詳細な動作は、公知のプロセッサにおけるキャッシュメモリの動作と同様である。
【００２９】
続いて、共有範囲管理部５は、アドレス指定部２により指定されるアドレス、すなわち、実行中のプロセスによりアクセスされるアドレスが共有範囲に含まれるかどうかを判定する（ステップＳ２２３）。
アクセスされるアドレスが共有範囲に含まれない場合（ステップＳ２２３：Ｎ）、実行中のプロセスによりアクセスされるアドレスが共有範囲ではないので、共有範囲管理部５は、当該アドレスが共有範囲に含まれないことをキャッシュメモリ管理部１に出力する（ステップＳ２２４）。
キャッシュメモリ管理部１は、アクセスするキャッシュラインに、実行中プロセスＩＤ管理部４が出力する実行中プロセスＩＤを対応付けて記憶して、実行中のプロセスをアクセスするキャッシュラインの所有者として設定する（ステップＳ２２９）。
そして、キャッシュメモリ管理部１は、実行中のプロセスにキャッシュラインへのアクセスを許可する（ステップＳ２０５）。
【００３０】
一方、アクセスされるアドレスが共有範囲に含まれる場合（ステップＳ２２３：Ｙ）、共有範囲管理部５は、共有範囲に対応付けられているグループＩＤを読み出し、読み出したグループＩＤをグループＩＤ管理部３に出力する（ステップＳ２２５）。
グループＩＤ管理部３は、入力されたグループＩＤに対応して記憶されているプロセスＩＤを読み出し、読み出したプロセスＩＤに実行中プロセスＩＤが含まれているか否かを判定する（ステップＳ２２６、Ｓ２２７）。
実行中プロセスＩＤがグループＩＤに含まれていない場合（ステップＳ２２７：Ｎ）、キャッシュメモリ管理部１は、実行中のプロセスに対してキャッシュラインへのアクセスを許可しない（ステップＳ２２８）。
実行中プロセスＩＤがグループＩＤに含まれている場合（ステップＳ２２７：Ｙ）、キャッシュメモリ管理部１は、アクセスするキャッシュラインにグループＩＤを対応付けて記憶して、実行中のプロセスを含んだグループをキャッシュラインの所有者として設定し（ステップＳ２２９）、実行中のプロセスにキャッシュラインへのアクセスを許可する（ステップＳ２０５）。
【００３１】
上述のように、キャッシュメモリ制御装置１００は、キャッシュメモリ管理部１が、キャッシュラインに所有者情報を対応付けて記憶することにより、アクセスする権利を有するプロセスのみに対してアクセスを許可する。これにより、キャッシュラインに対してアクセスする権利を有しないプロセスに対しては、キャッシュラインへのアクセスを拒否することで、データを共有しないプロセス間において、キャッシュラインに記憶されているデータの秘匿性を保つことが可能になる。また、キャッシュメモリ制御装置１００を備えたプロセッサにおいては、外部に備えられたメモリにデータを一旦書き出してデータを共有することに比べ、キャッシュラインを介してプロセス間のデータ共有を行うことにより、プロセス間のデータ共有を高速に行うことができる。
【００３２】
（第２実施形態）
次に、図４は、第２実施形態におけるキャッシュメモリ制御装置２００の構成を示す概略ブロック図である。キャッシュメモリ制御装置２００は、図示するように、キャッシュメモリ管理部１、アドレス指定部２、グループＩＤ管理部２３、実行中プロセスＩＤ管理部４、共有範囲管理部５を含んで構成される。なお、キャッシュメモリ制御装置２００において、グループＩＤ管理部２３以外は、第１実施形態のキャッシュメモリ制御装置１００と同じ構成であるため同じ符号１、２、４、５を付してその説明を省略する。グループＩＤ管理部２３は、グループＩＤキャッシュ部２３Ａを含み、プロセスＩＤを１つ以上含むグループと、グループに対応付けられたグループＩＤを作成し、管理する。
【００３３】
第１実施形態では、共有範囲管理部５がアクセス対象のアドレスに対応したグループＩＤを読み出す処理（ステップＳ２０７）と、当該グループＩＤに含まれているプロセスＩＤを読み出す処理（ステップＳ２０８）との２回の読み出し処理が行われており、冗長な処理になっている。そこで、本実施形態のキャッシュメモリ制御装置２００は、グループＩＤ管理部２３がグループＩＤキャッシュ部２３Ａを備え、実行中プロセスＩＤが含まれるグループＩＤをグループＩＤキャッシュ部２３Ａに記憶させることにより、問い合わせされたグループＩＤに実行中プロセスＩＤが含まれるか否かを判定するために要する時間を削減することができる。
また、グループＩＤ管理部２３は、グループＩＤが作成、又は変更されたとき、あるいは、実行中プロセスＩＤが変化したとき、グループＩＤキャッシュ部２３Ａに記憶しているグループＩＤの一覧が更新される。
これにより、グループＩＤ管理部２３は、実行中のプロセスがキャッシュラインにアクセスできるか否かを判定するために、グループＩＤキャッシュ部２３Ａに記憶されているグループＩＤの一覧の中に、指定されたグループＩＤが含まれているか検索する処理だけを行えばよく、グループＩＤの検索時間を削減することができる。
【００３４】
（第３実施形態）
図５は、第３実施形態におけるキャッシュメモリ制御装置３００の構成を示す概略ブロック図である。キャッシュメモリ制御装置３００は、図示するように、キャッシュメモリ管理部３１、アドレス指定部２、グループＩＤ管理部３、実行中プロセスＩＤ管理部４、共有範囲管理部５、暗号処理部６、暗号鍵管理部７、キャッシュメモリ８、及び、外部メモリ９を含み構成される。なお、キャッシュメモリ制御装置３００において、第１実施形態のキャッシュメモリ制御装置１００と同じ構成の部分は、同じ符号２〜５を付してその説明を省略する。
【００３５】
キャッシュメモリ管理部３１は、第１実施形態のキャッシュメモリ制御装置１００に含まれるキャッシュメモリ管理部１が有する機能に加えて、アドレス指定部２から入力されたアドレスに対応するキャッシュメモリ８が有するキャッシュラインを特定して、当該キャッシュラインと暗号処理部６との間のデータの伝送を制御する。
暗号処理部６は、暗号鍵管理部７により指定された暗号鍵を用いて、実行中のプロセスにより指定されたデータを、暗号化又は復号を行う。暗号鍵管理部７は、プロセスＩＤ又はグループＩＤと、暗号鍵とを対応付けて記憶する。
暗号鍵管理部７は、キャッシュメモリ管理部３１から入力されるプロセスＩＤ又はグループＩＤに対応付けて記憶している暗号鍵を暗号処理部６に出力する。キャッシュメモリ８は、外部メモリ９に記憶されているデータの一部を、当該データが記憶されているアドレスと対応付けて記憶する。外部メモリ９は、データを記憶する。また、外部メモリ９にはデータのみが記憶され、それぞれのデータに対応する所有者を示す情報は記憶しない。
【００３６】
次に、図６は、キャッシュメモリ制御装置３００が、キャッシュメモリ８に記憶されているデータを外部メモリ９に書き出す動作を示すフローチャートである。
まず、キャッシュメモリ管理部３１は、アドレス指定部２を介して実行中のプロセスが指定したアドレスに対応するキャッシュラインの所有者情報を読み出し、読み出した所有者情報に含まれるプロセスＩＤ又はグループＩＤを暗号鍵管理部７に出力する。また、キャッシュメモリ管理部３１は、アドレス指定部２を介して実行中のプロセスが指定したアドレスに対応するキャッシュメモリ８が有するキャッシュラインのデータを暗号処理部６に出力させる制御を行う（ステップＳ３０１）。
暗号鍵管理部７は、キャッシュメモリ管理部３１から出力されたプロセスＩＤ又はグループＩＤに対応付けられた暗号鍵を暗号処理部６に出力する（ステップＳ３０２）。
暗号処理部６は、キャッシュメモリ８から出力されたデータに対して、暗号鍵管理部７から出力された暗号鍵を用いて暗号化を行う（ステップＳ３０３）。
暗号処理部６は、暗号化したデータを外部メモリ９に出力して書き込む（ステップＳ３０４）。
【００３７】
上述のように、キャッシュメモリ制御装置３００は、キャッシュラインに記憶されているデータを外部メモリ９に記憶させるとき、キャッシュラインに記憶されているデータを暗号鍵管理部７に記憶されている暗号鍵を用いて暗号化することにより、外部メモリに記憶されたデータにアクセスされたとしてもデータの内容の漏洩を防ぐことができる。
【００３８】
次に、図７は、キャッシュメモリ制御装置３００が、外部メモリ９に記憶されているデータをキャッシュラインに書き込む動作を示すフローチャートである。
まず、アドレス指定部２は、実行中のプロセスからデータを読み出すアドレスが入力され、入力されたアドレスをキャッシュメモリ管理部３１に出力する（ステップＳ４０１）。
キャッシュメモリ管理部３１は、アドレス指定部２から出力されたアドレスに対応したデータがキャッシュメモリ８に存在するか否かを判定する（ステップＳ４０２）。
キャッシュメモリ８にアドレスに対応したデータが存在する場合（ステップＳ４０２：Ｙ）、キャッシュメモリ制御装置３００は、実行中のプロセスによるキャッシュラインへのアクセスの可否を判定する（ステップＳ４９９）。
なお、ステップＳ４９９の動作は、図３に示した第１実施形態のステップＳ２０３〜Ｓ２１２と同じ動作である。
【００３９】
一方、キャッシュメモリ８にアドレスに対応したデータが存在しない場合（ステップＳ４０２：Ｎ）、共有範囲管理部５は、アドレス指定部２が出力したアドレスが、共有範囲として設定されているか否かを判定する（ステップＳ４０３）。
アドレスが共有範囲として指定されていない場合（ステップＳ４０３：Ｎ）、共有範囲管理部５は、当該アドレスが共有範囲内に含まれないことを示す情報をキャッシュメモリ管理部３１に出力する。キャッシュメモリ管理部３１は、当該情報が入力されると、実行中プロセスＩＤを所有者情報として暗号鍵管理部７に出力する（ステップＳ４１０）。
一方、アドレスが共有範囲と指定されている場合（ステップＳ４０３：Ｙ）、共有範囲管理部５は、当該アドレスに対応付けて記憶されているグループＩＤをグループＩＤ管理部３に出力する（ステップＳ４０４）。
グループＩＤ管理部３は、共有範囲管理部５から入力されたグループＩＤに含まれるプロセスＩＤの一覧を読み出し（ステップＳ４０５）、読み出したプロセスＩＤの一覧に実行中プロセスＩＤが含まれているか否かを判定する（ステップＳ４０６）。
【００４０】
読み出したプロセスＩＤの一覧に実行中プロセスＩＤが含まれていない場合（ステップＳ４０６：Ｙ）、グループＩＤ管理部３は、アドレスに対応するグループＩＤには実行中プロセスＩＤが含まれていないことを示す情報をキャッシュメモリ管理部３１に出力する。キャッシュメモリ管理部３１は、当該情報が入力されると、実行中プロセスＩＤを所有者情報として暗号鍵管理部７に出力する（ステップＳ４１０）。
一方、読み出したプロセスＩＤの一覧に実行中プロセスＩＤが含まれている場合（ステップＳ４０６：Ｎ）、グループＩＤ管理部３は、グループＩＤを所有者情報として暗号鍵管理部７に出力する（ステップＳ４１１）。
暗号鍵管理部７は、ステップＳ４１０においてキャッシュメモリ管理部３１から出力されたプロセスＩＤ、又は、ステップＳ４１１においてグループＩＤ管理部３から出力されたグループＩＤに対応付けて記憶されている暗号鍵を暗号処理部６に出力する（ステップＳ４１２）。
暗号処理部６は、キャッシュメモリ管理部３１から入力されたアドレスに記憶されたデータを外部メモリ９から読み出し、暗号鍵管理部７から入力された暗号鍵により、読み出したデータを復号する（ステップＳ４１３）。
続いて、暗号処理部６は、復号したデータをキャッシュメモリ管理部３１に指示されたキャッシュメモリ８が有するキャッシュラインに書き込む（ステップＳ４１４）。
キャッシュメモリ管理部３１は、ステップＳ４１４においてデータが書き込まれたキャッシュラインに対応する所有者情報として、ステップＳ４１０で特定されたプロセスＩＤ、又は、ステップＳ４１１で特定されたグループＩＤを対応付けて記憶する。（ステップＳ４１５）。
【００４１】
上述のようにキャッシュメモリ制御装置３００により、共有範囲として設定されたアドレスに対応する外部メモリ９に記憶されたデータは、当該データを共有するプロセスのプロセスＩＤを含むグループＩＤに対応付けられた暗号鍵により復号されるので、共有範囲のデータにアクセスが許可されたプロセスは、グループＩＤに対応付けられた暗号鍵を用いてデータを正しく復号し、データを用いることができる。一方、共有範囲のデータにアクセスが許可されていないプロセスは、正しい暗号鍵を用いて復号することができないため、外部メモリ９から読み出したデータを用いることができない。これにより、グループＩＤに含まれるプロセスＩＤに対応するプロセス間において、キャッシュメモリ８及び外部メモリ９を介してデータの共有が行えると共に、当該データにアクセスを許されていないプロセスに対しては、当該データの秘匿性を確保することができる。
【実施例】
【００４２】
（第１実施例）
次に、図８は、第１実施例におけるプロセッサ８００の構成を示す概略ブロック図である。プロセッサ８００は、キャッシュメモリ管理部８０、グループＩＤ管理部８１、共有範囲管理部８２、コンテキストスイッチ管理部８３１、プロセッサ・コア８４を有する。
キャッシュメモリ管理部８０は、キャッシュラインごとに所有者情報を対応付けて記憶する所有者情報付キャッシュメモリ８０１を制御する。所有者情報付キャッシュメモリ８０１の有するキャッシュライン８０２それぞれは、キャッシュラインの使用状態を示すフラグ８０３、対応する外部記憶のアドレスを示すタグ８０４、データ８０５、及び、当該キャッシュラインの所有者情報を示す所有者ＩＤ８０６のフィールドにより構成される。
【００４３】
キャッシュメモリ管理部８０は、ロード／ストア・ユニット８４１から入力されるアクセス情報に応じて、アクセス情報に含まれるアドレスに対応するデータを所有者情報付キャッシュメモリ８０１から読み出して、ロード／ストア・ユニット８４１に出力する。
グループＩＤ管理部８１は、キャッシュラインを共有するグループを識別するグループＩＤ（ＧＩＤ）８１２と、当該グループに含まれるプロセスを識別するプロセスＩＤ（ＰＩＤ）８１３とを対応付けて記憶するグループＩＤテーブル８１１を制御する。
共有範囲管理部８２は、キャッシュの共有を行う範囲の先頭アドレスと末尾アドレスとからなる共有範囲アドレス８２３と、当該範囲の共有を行うグループを識別するグループＩＤ（ＧＩＤ）８２４とを対応付けて記憶する共有範囲テーブル８２１を制御する。また、共有範囲管理部８２は、ロード／ストア・ユニット８４１から入力されるアドレスが、実行中プロセスＩＤに対応付けられた共有範囲アドレスに含まれるか否かを判定し、共有範囲アドレスに含まれるとき、当該共有範囲アドレスに対応付けられたグループＩＤをキャッシュメモリ管理部８０とグループＩＤ管理部８１とに出力する。
【００４４】
コンテキストスイッチ管理部８３１は、プロセッサ８００上で実行されるＯＳから独立してコンテキストスイッチを行い、命令実行ユニット８４２からのコンテキストスイッチ指令が入力されると、実行コンテキストを切り替え、新たに実行中となるプロセスのプロセスＩＤを実行中プロセスＩＤ管理部８３に出力する。
実行中プロセスＩＤ管理部８３は、ＯＳが行うプロセスＩＤの管理とは異なるプロセスＩＤの管理を行うものであり、コンテキストスイッチ管理部８３１により実行中のプロセスのプロセスＩＤを更新し、キャッシュメモリ管理部８０と、グループＩＤ管理部８１とに実行中のプロセスのプロセスＩＤを出力する。
プロセッサ・コア８４は、入出力命令に対してデコードと制御を行うロード／ストア・ユニット８４１を備える命令実行ユニット８４２を有し、プログラム・コードの実行を行う。
【００４５】
以下、プロセッサ８００の動作を図を用いて説明する。なお、プロセッサ８００上では、プロセスＡ、プロセスＢ、及び、プロセスＰが実行され、プロセスＡとプロセスＢとの間ではキャッシュラインの共有が行われ、プロセスＰは他のプロセスとキャッシュラインの共有を行わない場合について説明する。
【００４６】
＜グループの新規設定＞
図９は、プロセッサ８００において、実行されるプロセスがキャッシュラインを共有するグループを設定する動作を示すシーケンス図である。
まず、プロセスＢは、自身を識別するプロセスＩＤ（ＩＤ＿Ｂ）をプロセスＡに送信する（ステップＳ９０１）。
プロセスＡは、自身のプロセスとプロセスＢとが含まれるグループのＩＤとしてグループＩＤ（ＩＤ＿Ｇ）を作成し（ステップＳ９０２）、プロセスＢから受信したプロセスＩＤ（ＩＤ＿Ｂ）と、自身のプロセスＩＤ（ＩＤ＿Ａ）と、グループＩＤ（ＩＤ＿Ｇ）とをグループＩＤ管理部８１に出力する（ステップＳ９０３）。
【００４７】
グループＩＤ管理部８１は、グループＩＤに対応付けるプロセスＩＤの中に、実行中プロセスＩＤが含まれるか否かを判定して、実行中プロセスＩＤ（ＩＤ＿Ａ）が含まれるとき、入力されたグループＩＤ（ＩＤ＿Ｇ）と、プロセスＩＤ（ＩＤ＿Ａ、ＩＤ＿Ｂ）とを対応付けてグループＩＤテーブル８１１に記憶させる（ステップＳ９０４）。
グループＩＤ管理部８１は、グループの登録が完了したことを示す情報をプロセスＡに送信する（ステップＳ９０５）。
なお、グループＩＤ管理部８１は、入力されたプロセスＩＤに実行中プロセスＩＤが含まれない場合や、登録するグループＩＤが既存の場合、グループＩＤテーブル８１１への記憶させずに、エラーを示す情報をプロセスＡに出力する。プロセスＡは、入力された当該情報に基づいて処理、例えば、例外処理などを行う。
図１０は、図９の動作を行った後のグループＩＤテーブル８１１に記憶されている情報を示す図である。上述の動作により、グループＩＤテーブル８１１には、エントリ９０４に示されるように、グループＩＤ（ＩＤ＿Ｇ）と、プロセスＩＤ（ＩＤ＿Ａ、ＩＤ＿Ｂ）とが対応付けて記憶される。
【００４８】
＜共有範囲の設定＞
図１１は、プロセスＡとプロセスＢとの間で共有するアドレスを設定する動作例、及び、プロセスＰがプロセスＡ及びプロセスＢの共有アドレスの設定を試みて拒否される動作例を示すシーケンス図である。なお、プロセッサ８００は、図９で説明したグループの新規設定が行われた後の状態として説明する。
まず、プロセスＡは、グループＩＤ（ＩＤ＿Ｇ）と、共有するアドレス０ｘＡ０００００００−０ｘＡ０００１０００を示す情報とを共有範囲管理部８２に送信する（ステップＳ１００１、Ｓ１００２）。
共有範囲管理部８２は、受信したグループＩＤ（ＩＤ＿Ｇ）をグループＩＤ管理部８１に出力し、当該グループＩＤが実行中プロセスＩＤを含んでいるか否かを判定させる。ここで、グループＩＤ管理部８１は、実行中プロセスＩＤ管理部８３から実行中プロセスＩＤ（ＩＤ＿Ａ）を読み出し、共有範囲管理部８２から入力されたグループＩＤ（ＩＤ＿Ｇ）に実行中プロセスＩＤ（ＩＤ＿Ａ）が含まれるか否かを判定する。グループＩＤ管理部８１は、グループＩＤ（ＩＤ＿Ｇ）には、実行中プロセスＩＤ（ＩＤ＿Ａ）が含まれていることを示す情報を共有範囲管理部８２に出力する（ステップＳ１００３）。
【００４９】
共有範囲管理部８２は、共有範囲として、アドレス０ｘＡ０００００００−０ｘＡ０００１０００と、グループＩＤ（ＩＤ＿Ｇ）とを対応付けて共有範囲テーブル８２１に記憶し（ステップＳ１００４）、共有範囲の登録が完了したことを示す情報をプロセスＡに送信する（ステップＳ１００５）。
【００５０】
次に、プロセスＰは、グループ（ＩＤ＿Ｇ）において、共有範囲のアドレスを指定し（ステップＳ１１０１）、グループＩＤ（ＩＤ＿Ｇ）と当該共有範囲のアドレスとを共有範囲管理部８２に送信する（ステップＳ１１０２）。
【００５１】
共有範囲管理部８２は、ステップＳ１００３と同様の動作により、グループＩＤ管理部８１から実行中プロセスＩＤ（ＩＤ＿Ｐ）が受信したグループＩＤ（ＩＤ＿Ｇ）に含まれないことを示す情報を入力される（ステップＳ１１０２）。
共有範囲管理部８２は、グループＩＤ管理部８１から入力された情報により、共有範囲を共有範囲テーブル８２１に記憶せずに、プロセスＰにエラーを示す情報を送信する（ステップＳ１１０３）。
【００５２】
上述のように、キャッシュラインを共有するグループに含まれるプロセスは、共有範囲アドレスを設定することができ、キャッシュラインを共有するグループに含まれないプロセスは、当該グループに対して共有範囲アドレスの設定を拒否される動作を行う。
図１２は、上述の図１１の動作を行った後の共有範囲テーブル８２１に記憶されている情報を示す図である。共有範囲テーブル８２１には、図示するように、プロセスＡ（ＩＤ＿Ａ）が登録した共有範囲アドレスとグループＩＤ（ＩＤ＿Ｇ）とが対応付けられたエントリ１００６が記憶されている。
【００５３】
＜キャッシュアクセス動作＞
図１４は、プロセッサ８００において、プロセスＡがキャッシュにアクセスする動作を示したシーケンス図である。なお、プロセッサ８００において、共有範囲テーブル８２１、グループＩＤテーブル８１１、及び、所有者情報付キャッシュメモリ８０１は、次の情報を記憶している。
グループＩＤテーブル８１１には、図１０に示すように、プロセスＡ（ＩＤ＿Ａ）とプロセスＢ（ＩＤ＿Ｂ）とを含むグループ（ＩＤ＿Ｇ）、プロセスＡ（ＩＤ＿Ａ）とプロセスＣ（ＩＤ＿Ｃ）とプロセスＤ（ＩＤ＿Ｄ）とを含むグループ（ＩＤ＿Ｘ）、プロセスＢ（ＩＤ＿Ｂ）とプロセスＣ（ＩＤ＿Ｃ）とを含むグループ（ＩＤ＿Ｙ）が記憶されている。
共有範囲テーブル８２１には、図１２に示すように、共有アドレス範囲０ｘＡ０００００００−０ｘＡ０００１０００とグループＩＤ（ＩＤ＿Ｇ）とが対応付けられたエントリ１００６が記憶されている。
所有者情報付キャッシュメモリ８０１には、図１３に示すように、フラグ（ｖａｌｉｄ）とタグ（０ｘＡ００００８００の上位ビット）とデータと所有者ＩＤ（ＩＤ＿Ｇ）とが対応付けられたエントリがキャッシュライン１１０１に記憶され、フラグ（ｖａｌｉｄ）とタグ（０ｘＡ０００１８００の上位ビット）とデータと所有者ＩＤ（ＩＤ＿Ａ）とが対応付けられたエントリがキャッシュライン１１０２に記憶され、フラグ（ｖａｌｉｄ）と、タグ（０ｘＡ０００２８００の上位ビット）と、データと所有者ＩＤ（ＩＤ＿Ａ）とが対応付けられたエントリがキャッシュライン１１０３に記憶されている。
【００５４】
まず、プロセスＡは、アドレス０ｘＡ０００１８００にアクセスする処理を開始し（ステップＳ１２０１）、当該アドレスをキャッシュメモリ管理部８０に送信する（ステップＳ１２０２）。
キャッシュメモリ管理部８０は、受信したアドレスを含むキャッシュラインが、所有者情報付キャッシュメモリ８０１に記憶されているか否かを判定し（ステップＳ１２０３）、受信したアドレスを含むキャッシュライン１１０２に対応付けて記憶されている所有者ＩＤ（ＩＤ＿Ａ）を所有者情報付キャッシュメモリ８０１から読み出す（ステップＳ１２０４）。
キャッシュメモリ管理部８０は、実行中プロセスＩＤ管理部８３から読み出した実行中プロセスＩＤ（ＩＤ＿Ａ）と読み出した所有者ＩＤ（ＩＤ＿Ａ）とが比較し、一致する場合は、キャッシュラインへのアクセスを許可する。キャッシュメモリへのアクセスがリード・アクセスのとき、当該キャッシュライン１１０２に記憶されているデータをロード／ストア・ユニット８４１に出力する。キャッシュメモリへのアクセスがライト・アクセスのとき、当該キャッシュライン１１０２に、ロード／ストア・ユニット８４１からのデータを書き込んで記憶させる（ステップＳ１２０５）。
【００５５】
次に、プロセスＡは、アドレス０ｘＡ００００８００にアクセスする処理を開始し（ステップＳ１２１１）、当該アドレスをキャッシュメモリ管理部８０に送信する（ステップＳ１２１２）。
キャッシュメモリ管理部８０は、プロセスＡからアドレス０ｘＡ００００８００を受信し、受信したアドレスに対応するキャッシュラインを所有者情報付キャッシュメモリ８０１から検出し（ステップＳ１２１３）、検出したキャッシュライン１１０１の所有者ＩＤ（ＩＤ＿Ｇ）を読み出す（ステップＳ１２１４）。
【００５６】
キャッシュメモリ管理部８０は、読み出した所有者ＩＤ（ＩＤ＿Ｇ）と、実行中プロセスＩＤ管理部８３から読み出した実行中プロセスＩＤ（ＩＤ＿Ａ）とを比較して、不一致であることを判定すると（ステップＳ１２１５）、キャッシュメモリ管理部８０は、読み出した所有者ＩＤ（ＩＤ＿Ｇ）をグループＩＤ管理部８１に出力する（ステップＳ１２１６）。
グループＩＤ管理部８１は、キャッシュメモリ管理部８０が出力したグループＩＤ（ＩＤ＿Ｇ）に含まれるプロセスＩＤの一覧をグループＩＤテーブル８１１から読み出して、実行中プロセスＩＤが含まれるか否かを判定する（ステップＳ１２１７）。
【００５７】
グループＩＤ管理部８１は、グループＩＤ（ＩＤ＿Ｇ）に実行中プロセスＩＤ（ＩＤ＿Ａ）が含まれることエントリ９０４にて確認すると、グループＩＤ（ＩＤ＿Ｇ）に実行中プロセスＩＤが含まれることをキャッシュメモリ管理部８０に出力する（ステップＳ１２１８）。
キャッシュメモリ管理部８０は、アドレス０ｘＡ００００８００の所有者ＩＤ（ＩＤ＿Ｇ）で示されるグループに実行中プロセスＩＤ（ＩＤ＿Ａ）が含まれることを確認すると、プロセスＡに対してアドレス０ｘＡ００００８００に対応するキャッシュライン１１０１に記憶されているデータへのアクセスを許可する（ステップＳ１２１９）。
【００５８】
上述のように、プロセッサ８００は、プロセスがキャッシュラインにアクセスする際、プロセスＩＤあるいはグループＩＤにより、キャッシュラインへのアクセスが許可されているか否かを判定し、キャッシュラインへのアクセスの可否を判定する。
なお、キャッシュメモリ管理部８０は、キャッシュメモリへのアクセスを許可しない場合、ＯＳなどのログにプロセスがアクセスを許可されていないメモリにアクセスしたことを記録しておいてもよい。このようにすることで、プロセスによる不正なアクセスが行われたことを検出することができる。
【００５９】
ここで、プロセスＡとキャッシュラインの共有をしていないプロセスＰが、プロセスＡが所有者となっているキャッシュラインにアクセスする場合について説明する。
一般的に、プロセスＡとプロセスＰとのメモリ領域は、分離して設けられるので、キャッシュメモリ管理部８０が、プロセスＰからのアクセス要求に対して、プロセスＡが所有者となっているキャッシュラインがアクセス対象であるか否かを判定することはほとんどない。しかし、プロセスＰが、プロセスＡに対してメモリ領域の割り当てを行う権限を有する場合、プロセスＰに割り当てられているメモリ領域をプロセスＡに割り当てることができる。この場合に、例えば、プロセスＡのアドレス０ｘＡ００００８００にプロセスＰからアクセスすると、キャッシュメモリ管理部８０での検索では該当するキャッシュラインがヒットする。しかし、キャッシュラインの所有者はＩＤ＿Ｇであり、実行中プロセスＩＤのＩＤ＿Ｐとは異なるため、上述のような場合であってもプロセスＰは、プロセスＡが所有者のキャッシュラインにアクセスすることはできない。
【００６０】
また、例えば、グループ（ＩＤ＿Ｇ）に、プロセスＰのプロセスＩＤ（ＩＤ＿Ｐ）が含まれている期間に、プロセスＰにより共有範囲が設定され、設定の後にグループ（ＩＤ＿Ｇ）からプロセスＰが削除された場合、グループＩＤ管理部８１により、実行中プロセスＩＤ（ＩＤ＿Ｐ）がグループＩＤ（ＩＤ＿Ｇ）に含まれるか否かの判定が行われるので、プロセッサ８００の構成において、所有者としてプロセスＡが対応付けられているキャッシュラインへのプロセスＰによる不正アクセスを排除することができる。
【００６１】
＜キャッシュラインに所有者情報の設定＞
次に、図１５は、プロセッサ８００において、キャッシュラインに所有者情報の設定を行うシーケンス図である。
キャッシュラインに所有者情報を設定する動作は、外部のメモリに記憶されたデータを読み出す処理や、外部のメモリにデータを記憶させる処理において、空き（フラグがｉｎｖａｌｉｄ）のキャッシュラインに記憶させる場合と、使用されている（フラグがｖａｌｉｄ）のキャッシュラインに記憶されているデータを外部メモリに書き出した後に、当該キャッシュラインにデータを記憶させる場合との２通りの動作がある。
【００６２】
まず、共有範囲内にアクセスを行う場合について説明する。プロセスＡは、アドレス０ｘＡ００００９００にアクセスする処理を開始し（ステップＳ１３０１）、当該アドレスをキャッシュメモリ管理部８０に送信する（ステップＳ１３０２）。
キャッシュメモリ管理部８０は、受信したアドレスに対応するキャッシュラインが所有者情報付キャッシュメモリ８０１に存在するか否かを判定し（ステップＳ１３０３）、受信したアドレスに対応するキャッシュラインが存在しないとき、空きのキャッシュライン１１０４に対してデータを書き込む（ステップＳ１３０４）。
キャッシュメモリ管理部８０は、受信したアドレスを共有範囲管理部８２に出力する（ステップＳ１３０５）。
【００６３】
共有範囲管理部８２は、キャッシュメモリ管理部８０から出力されたアドレスが、共有範囲テーブル８２１に共有範囲として設定されているか否かを判定し（ステップＳ１３０６）、当該アドレスが共有範囲に設定されていると（共有範囲テーブル８２１のエントリ１００６）、当該共有範囲に対応するグループＩＤを共有範囲テーブル８２１から読み出してグループＩＤ管理部８１に出力する（ステップＳ１３０７）。
グループＩＤ管理部８１は、共有範囲管理部８２から出力されたグループＩＤ（ＩＤ＿Ｇ）に実行中プロセスＩＤが含まれているか否かをグループＩＤテーブル８１１を用いて判定し（ステップＳ１３０８）、グループＩＤ（ＩＤ＿Ｇ）をキャッシュメモリ管理部８０に出力する（ステップＳ１３０９）。
キャッシュメモリ管理部８０は、グループＩＤ管理部８１が出力したグループＩＤ（ＩＤ＿Ｇ）をキャッシュライン１１０４の所有者情報として所有者情報付キャッシュメモリ８０１に記憶させる（ステップＳ１３１０）。
【００６４】
次に、共有範囲外にアクセスを行う場合について説明する。プロセスＡは、アドレス０ｘＡ０００１２００にアクセスする処理を開始し（ステップＳ１３２１）、当該アドレスをキャッシュメモリ管理部８０に送信する（ステップＳ１３２２）。
キャッシュメモリ管理部８０は、受信したアドレスに対応するキャッシュラインが所有者情報付キャッシュメモリ８０１に存在するか否かを判定し（ステップＳ１３２３）、受信したアドレスに対応するキャッシュラインが存在しないとき、空きのキャッシュライン１１０４に対してデータを書き込む（ステップＳ１３２４）。
キャッシュメモリ管理部８０は、受信したアドレス共有範囲管理部８２に出力する（ステップＳ１３２５）。
【００６５】
共有範囲管理部８２は、キャッシュメモリ管理部８０から出力されたアドレスが、共有範囲テーブル８２１に共有範囲として設定されているか否かを判定し（ステップＳ１３２６）、当該アドレスが共有範囲に設定されていないと、共有範囲に設定されていないことを示す情報をキャッシュメモリ管理部８０に出力する（ステップＳ１３２７）。
キャッシュメモリ管理部８０は、共有範囲に設定されていないことを示す情報が入力されると、キャッシュライン１１０４の所有者情報として、実行中プロセスＩＤ（ＩＤ＿Ａ）を所有者情報付キャッシュメモリ８０１のキャッシュライン１１０４に記憶させる（ステップＳ１３２８）。
上述のように、プロセッサ８００は、キャッシュラインの所有者情報としてプロセスＩＤ又はグループＩＤを記憶させて設定する。
【００６６】
（第２実施例）
図１６は、第２実施例におけるプロセッサ８００Ａの構成を示す概略ブロック図である。プロセッサ８００Ａは、第１実施例のプロセッサ８００に比べ、グループＩＤ管理部８１Ａが異なる。なお、他の構成については、同じ符号を付して説明を省略する。また、グループＩＤ管理部８１Ａは、第１実施例のグループＩＤ管理部８１と異なり、グループＩＤキャッシュ１４０１を有している。
まず、グループＩＤキャッシュ１４０１が記憶するデータの更新の動作について説明する。実行中プロセスＩＤ管理部８３は、実行中のプロセスが切り替えられて実行中プロセスＩＤが変化すると、グループＩＤ管理部８１は、グループＩＤキャッシュ１４０１に記憶されているデータを消去すると共に、新たな実行中プロセスＩＤをキーとしてグループＩＤテーブル８１１を検索し、実行中プロセスＩＤを含むグループＩＤをグループＩＤキャッシュ１４０１に記憶させる。
【００６７】
例えば、グループＩＤテーブル８１１に記憶されている情報が図１０に図示する状態であり、実行中プロセスＩＤがＩＤ＿Ａに変化したとき、グループＩＤ管理部８１Ａは、実行中プロセスＩＤ（ＩＤ＿Ａ）をキーとしてグループＩＤテーブル８１１を検索し、ヒットしてグループＩＤ（ＩＤ＿Ｇ、ＩＤ＿Ｘ）をグループＩＤキャッシュ１４０１に記憶させる。
また、グループを新規に作成する場合、グループＩＤ管理部８１Ａは、新規に作成されたグループＩＤをグループＩＤキャッシュ１４０１に記憶させる。
【００６８】
次に、グループＩＤキャッシュ１４０１のデータを参照する動作について説明する。第１実施例においてグループＩＤ管理部８１が、図１４のステップＳ１２１９において、入力されたグループＩＤに実行中プロセスＩＤが含まれているか否かの判定をグループＩＤテーブル８１１を走査して検出していたのに対して、グループＩＤ管理部８１Ａは、入力されたグループＩＤがグループＩＤキャッシュ１４０１に記憶されているか否かを判定すればよく、グループＩＤテーブル８１１を走査する回数を削減することができる。
【００６９】
（第３実施例）
図１７は、第３実施例におけるプロセッサ８００Ｂの構成を示す概略ブロック図である。プロセッサ８００Ｂは、第１実施例のプロセッサ８００に加え、暗号処理部１５０１、暗号鍵管理部１５０２、及び、暗号鍵テーブル１５０４を有し、外部メモリ１５０３に接続されている。他の構成については、同じ符号を付して説明を省略する。
暗号処理部１５０１は、キャッシュメモリ管理部８０と、データを記憶する外部メモリ１５０３との間に設けられ、暗号鍵管理部１５０２から入力される暗号鍵により、キャッシュメモリ管理部８０から外部メモリ１５０３にデータが書き出されるとき、当該データを暗号化し、外部メモリ１５０３から読み出されたデータをキャッシュメモリ管理部８０に出力するとき、読み出されたデータを暗号鍵により復号する。
暗号鍵管理部１５０２は、入力されるプロセスＩＤ又はグループＩＤに対応する暗号鍵を暗号鍵テーブル１５０４から読み出して、読み出した暗号鍵を暗号処理部１５０１に出力すると共に、暗号鍵テーブル１５０４に該当するプロセスＩＤ又はグループＩＤが記憶されていないとき、暗号鍵を生成し、生成した暗号鍵と、プロセスＩＤ又はグループＩＤとを対応付けて暗号鍵テーブル１５０４に記憶させる。暗号鍵テーブル１５０４には、プロセスＩＤ又はグループＩＤと、暗号鍵とが対応付けられて記憶されている。
【００７０】
次に、プロセッサ８００Ｂの、第１実施例のプロセッサ８００と異なる動作である、所有者情報付キャッシュメモリ８０１から外部メモリ１５０３へのデータの書き出し、及び、外部メモリ１５０３から所有者情報付キャッシュメモリ８０１へのデータの書き込みについて説明を行う。なお、第１実施例と同様に、プロセッサ８００Ｂ上で、プロセスＡ、プロセスＢ、及び、プロセスＰが実行され、プロセスＡとプロセスＢとの間ではキャッシュラインの共有が行われ、プロセスＰは他のプロセスとキャッシュラインの共有を行わない場合について説明する。また、共有範囲テーブル８２１、グループＩＤテーブル８１１、及び、所有者情報付キャッシュメモリ８０１には、図１０、図１２、図１３で示す情報が記憶されており、暗号鍵テーブル１５０４には、図１８に図示するように、プロセスＡ（ＩＤ＿Ａ）、プロセスＢ（ＩＤ＿Ｂ）、プロセスＰ（ＩＤ＿Ｐ）、グループＧ（ＩＤ＿Ｇ）それぞれに対応する暗号鍵が対応付けられて記憶されている。
【００７１】
＜外部メモリ１５０３への書き出し＞
キャッシュメモリ管理部８０において、所有者情報付キャッシュメモリ８０１に空きのキャッシュラインが存在せず、容量が不足した場合、以下のようにして、所有者情報付キャッシュメモリ８０１に記憶されているデータを外部メモリ１５０３に書き出す。
まず、キャッシュメモリ管理部８０は、一般的な公知の方法を用いて外部メモリ１５０３に書き出すキャッシュラインを選択して、当該キャッシュラインに記憶されているデータを読み出し、読み出したデータを暗号処理部１５０１に出力する。また、キャッシュメモリ管理部８０は、選択したキャッシュラインの所有者ＩＤを読み出し、読み出した所有者ＩＤを暗号鍵管理部１５０２に出力する。
【００７２】
暗号鍵管理部１５０２は、キャッシュメモリ管理部８０から出力された所有者ＩＤに対応する暗号鍵を暗号鍵テーブル１５０４に記憶されているか否かを判定し、記憶されている場合、対応する暗号鍵を読み出し、読み出した暗号鍵を暗号処理部１５０１に出力する。一方、出力された所有者ＩＤに対応する暗号鍵が記録されていない場合、暗号鍵管理部１５０２は、暗号鍵を生成して、生成した暗号鍵と、出力された所有者ＩＤとを対応付けて暗号鍵テーブル１５０４に記憶させると共に、生成した暗号鍵を暗号処理部１５０１に出力する。
暗号処理部１５０１は、キャッシュメモリ管理部８０から出力されたデータを、暗号鍵管理部１５０２から出力された暗号鍵により暗号化して、暗号化したデータを外部メモリ１５０３に記憶させる。
【００７３】
例えば、所有者情報付キャッシュメモリ８０１に、図１３に図示する情報が記憶されている場合に、キャッシュライン１１０１のデータを外部メモリ１５０３にデータを書き出す処理では、キャッシュメモリ管理部８０は、所有者ＩＤ（ＩＤ＿Ｇ）を暗号鍵管理部１５０２に出力すると共に、キャッシュライン１１０１に記憶されているデータを暗号処理部１５０１に出力する。暗号鍵管理部１５０２は、キャッシュメモリ管理部８０から出力された所有者ＩＤ（ＩＤ＿Ｇ）に対応する暗号鍵を読み出して、暗号処理部１５０１に出力する。暗号処理部１５０１は、キャッシュメモリ管理部８０から出力されたデータを、暗号鍵管理部１５０２から出力されたＩＤ＿Ｇに対応する暗号鍵により暗号化して、暗号化したデータを外部メモリ１５０３に出力して記憶させる。
【００７４】
＜所有者情報付キャッシュメモリ８０１へのデータの書き込み＞
ロード／ストア・ユニット８４１がアクセスしたデータが、所有者情報付キャッシュメモリ８０１に記憶されていない場合、当該データを外部メモリ１５０３から読み出して、所有者情報付キャッシュメモリ８０１に書き込む動作が行われる。
まず、キャッシュメモリ管理部８０は、ロード／ストア・ユニット８４１がアクセスを要求したアドレスが入力され、入力されたアドレスを共有範囲管理部８２と暗号処理部１５０１に出力する。共有範囲管理部８２は、キャッシュメモリ管理部８０から出力されたアドレスを含み、かつ、実行中プロセスＩＤに対応付けられているエントリが共有範囲テーブル８２１に記憶されているか否かを検索し、記憶されている場合、当該エントリのグループＩＤをグループＩＤ管理部８１に出力する。
【００７５】
グループＩＤ管理部８１は、共有範囲管理部８２から出力されたグループＩＤがグループＩＤテーブル８１１に記憶されているか検索し、当該グループＩＤが記録されている場合、当該グループＩＤに実行中プロセスＩＤが含まれているか否かを判定する。グループＩＤ管理部８１は、当該グループＩＤに実行中プロセスＩＤが含まれている場合、当該グループＩＤを暗号鍵管理部１５０２とキャッシュメモリ管理部８０とに出力する。
暗号鍵管理部１５０２は、グループＩＤ管理部８１がグループＩＤを出力した場合、当該グループＩＤに対応する暗号鍵を暗号鍵テーブル１５０４から読み出し、グループＩＤ管理部がグループＩＤを出力しない場合、実行中プロセスＩＤに対応する暗号鍵を暗号鍵テーブル１５０４から読み出して暗号処理部１５０１に出力する。
なお、暗号鍵管理部１５０２は、グループＩＤ又は実行中プロセスＩＤに対応する暗号鍵が暗号鍵テーブル１５０４に記憶されていない場合、暗号鍵を生成して暗号処理部１５０１に出力する。
【００７６】
暗号処理部１５０１は、キャッシュメモリ管理部８０が出力したアドレスに対応するデータを外部メモリ１５０３から読み出し、読み出したデータを暗号鍵管理部１５０２が出力した暗号鍵により復号してキャッシュメモリ管理部８０に出力する。キャッシュメモリ管理部８０は、復号されたデータを所有者情報付キャッシュメモリ８０１に出力して記憶させる。
このように、プロセス間で共有するデータについても、データを共有するグループを識別するグループＩＤで暗号鍵を管理することにより、暗号化したデータであっても共有することができ、データを共有しないプロセスがデータにアクセスすると暗号化したときに用いた暗号鍵と異なる暗号鍵で復号することになるので正しくデータを用いることができない。
上述のように動作することで、プロセッサ８００Ｂは、プロセス間で共有するデータを外部メモリ１５０３に暗号化して記憶させるので、共有するデータの秘匿性を高くすることが可能になる。
【産業上の利用可能性】
【００７７】
本発明によれば、音楽などの著作物データを取り扱う著作権保護機能付きソフトウェアを改ざんして不正にデータのコピーを行う攻撃を防ぐプロセッサといった用途に適用できる。また、情報漏洩防止を目的として暗号化情報を取り扱うソフトウェアを解析して暗号鍵を盗む攻撃を防ぐプロセッサといった用途にも適用可能である。
【符号の説明】
【００７８】
１、３１…キャッシュメモリ管理部
２…アドレス指定部
３、２３…グループＩＤ管理部
４…実行中プロセスＩＤ管理部
５…共有範囲管理部
６…暗号処理部
７…暗号鍵管理部
８…キャッシュメモリ
９…外部メモリ
１００、２００、３００…キャッシュメモリ制御装置
２３Ａ…グループＩＤキャッシュ部
８０…キャッシュメモリ管理部、８０１…所有者情報付キャッシュメモリ
８１、８１Ａ…グループＩＤ管理部、８１１…グループＩＤテーブル
８２…共有範囲管理部、８２１…共有範囲テーブル
８３…実行中プロセスＩＤ管理部、８３１…コンテキストスイッチ管理部
８４…プロセッサ・コア、８４１…ロード／ストア・ユニット
８４２…命令実行ユニット
８００、８００Ａ、８００Ｂ…プロセッサ
１４０１…グループＩＤキャッシュ
１５０１…暗号処理部、１５０２…暗号鍵管理部、１５０３…外部メモリ
１５０４…暗号鍵テーブル
【図１】
2010231623.tif 000003
【図２】
2010231623.tif 000004
【図３】
2010231623.tif 000005
【図４】
2010231623.tif 000006
【図５】
2010231623.tif 000007
【図６】
2010231623.tif 000008
【図７】
2010231623.tif 000009
【図８】
2010231623.tif 000010
【図９】
2010231623.tif 000011
【図１０】
2010231623.tif 000012
【図１１】
2010231623.tif 000013
【図１２】
2010231623.tif 000014
【図１３】
2010231623.tif 000015
【図１４】
2010231623.tif 000016
【図１５】
2010231623.tif 000017
【図１６】
2010231623.tif 000018
【図１７】
2010231623.tif 000019
【図１８】
2010231623.tif 000020