説明

キャッシュメモリ制御装置及び方法

【課題】キャッシュラインへのアクセスを許可されていないプロセスに対して秘匿性を確保しつつ、キャッシュラインに記憶された情報を複数のプロセス間で共有することができるキャッシュメモリ制御装置を提供する。
【解決手段】キャッシュメモリ制御装置100は、キャッシュメモリ管理部1を備え、キャッシュメモリ処理部1が、データのキャッシュを行うキャッシュメモリのキャッシュラインごとに、キャッシュラインへの書き込みに応じて、1つ以上のプロセスに対して該キャッシュラインに記憶されているデータへのアクセスの可否を識別する所有者情報を対応付けて記憶し、実行中のプロセスがキャッシュラインにアクセスすると、キャッシュメモリ管理部に記憶されている所有者情報に基づいて、実行中のプロセスに対してアクセスを許可する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンピュータ装置のキャッシュメモリ、特に複数のプロセス間におけるキャッシュラインのセキュリティに関する。
【背景技術】
【0002】
近年のコンピュータ装置は、利用目的が多様になっており、著作権保護を目的として音楽などの著作物データの不正コピーを防止するソフトウェアや、情報漏洩防止を目的として暗号化情報を取り扱うソフトウェアなどがコンピュータ装置上で利用されている。これらのソフトウェアは、解析や改ざんをされることでその目的を達成できなくなるため、これらのソフトウェアには、解析や改ざんを防止するために耐タンパ・ソフトウェア技術が利用されることが多い。
【0003】
耐タンパ・ソフトウェア技術には、プログラム自体をあらかじめ暗号化しておき、実行開始直前に復号化を行ってから実行開始する自己復号化技術や、プログラムの最終的な挙動を変えることなく、意味のない命令の挿入、又は、命令の順番の入れ替えによって解析を困難にするプログラム難読化技術などが含まれる。このような耐タンパ・ソフトウェア技術によって、プログラムの解析や改ざんをある程度困難にすることができる。
【0004】
しかし、不正コピーを防止するプログラムや、暗号化情報を取り扱うプログラムがプロセッサ上で実行される以上、プログラムの動作を逐一追いかけることによって解析が可能であり、この解析結果を利用することで改ざんも可能である.さらに、オープンソースOS(Operating System;オペレーティング・システム)の利用が近年増えつつあるが、オープンソースOSは、ユーザによりソースコードの変更及び解析などが容易に行えるため、悪意を持ったユーザによりソースコードの改造が行われると、上述の不正コピーを防止するプログラムや、暗号化情報を取り扱うプログラムを実行するプロセスが、任意の時点で実行を中断させられて、当該プロセスが使用している記憶領域内の情報に他のプロセス、例えば、OSの特権プロセスなどにより自由にアクセスされることにより、耐タンパ・ソフトウェア技術が無効化される恐れがある。
【0005】
このような問題を解決するための技術として、セキュア・プロセッサ又は耐タンパ・プロセッサと呼ばれる耐タンパ・ハードウェア技術が考案されている。セキュア・プロセッサは、プログラムをあらかじめ暗号化しておき、プロセッサ内部のキャッシュメモリ上でこれを復号化してから実行するプロセッサである。さらに、プロセスが利用する外部メモリ上のデータを、他のプロセスに対して秘匿する必要がない場合とある場合の2種類にわける。秘匿する必要のないデータは、通常のプロセッサと同様に外部メモリに書き込まれる.秘匿する必要のあるデータは、プロセッサによって暗号化されてから外部メモリに書き出され、外部メモリから読み込まれた後に復号化される。このときに利用される暗号鍵はプロセスごとに異なる。以上の対策によって、プログラム自体、及び外部メモリ上のデータは暗号化されており、OSを含む特権を有するプロセスであっても実行されるプログラムの解析や、プロセスが有するデータにアクセスすることを防ぐことができる。
【0006】
また、プロセッサ内部に設けられたキャッシュメモリは、通常のプロセッサの場合、一般にOSによって、プロセスごとに管理されている(特許文献1)。OSの機能を実行し、特権を有するプロセスは、当該プロセス自身が利用するキャッシュメモリだけでなく、他のプロセスが利用するキャッシュメモリにも自由にアクセスすることが可能である。一方で、セキュア・プロセッサは、キャッシュメモリへのアクセスの最小単位であるキャッシュラインごとの所有者識別機能を有しており、特権を有するプロセスのアクセスであっても所有者以外のプロセスからのアクセスを許可しない機能を有している。これによって、セキュア・プロセッサは、OSの機能を実行し、特権を有するプロセスを含む所有者以外のプロセスから、内部のキャッシュメモリに対してアクセスされることを防ぐことができる。
【0007】
しかし、上述のようなセキュア・プロセッサは、キャッシュラインの所有者以外のプロセスからのアクセスを制限する機能を有することで、複数プロセス間での情報の共有が困難となっている。具体的には、複数のプロセスが利用する外部メモリ領域は、外部メモリ領域それぞれが異なる鍵で暗号化されていること、キャッシュメモリは、それぞれのキャッシュラインの所有者が異なるためにアクセスが許可されないこと、これらにより、情報の共有が困難となっている。
複数プロセス間で情報の共有を行うためには、プロセス間で安全に鍵を共有してデータの送信側プロセスがこの鍵を利用してデータを暗号化し、プロセッサによって暗号化されない領域にデータを書き出し、データの受信側プロセスがデータを読み込んで、先に共有した鍵で復号化を行う、という長い手順が必要となり、通常のプロセッサにおいて、秘匿性のある情報の共有を行うと、データに対するアクセス速度が大幅に低下するという問題がある。
【0008】
この問題への対策として、外部メモリ領域に共通の暗号鍵を利用可能とする方法が考案されている (特許文献2)。外部メモリ上のデータを暗号化する鍵は、プロセスごとにセキュア・プロセッサによって自動的に作成され、プロセス単位で1つの鍵が利用されていた。非特許文献1では、1つのプロセスで利用する暗号化メモリ領域を分割し、分割された領域ごとに異なる暗号鍵を指定可能とすることで、特定のプロセスとの共通の暗号化メモリ領域を作成することを可能にした。この共通の暗号化メモリ領域により、セキュア・プロセッサにおけるメモリ共有の速度低下が軽減されている。
【先行技術文献】
【特許文献】
【0009】
【特許文献1】特開2007−011580号公報
【特許文献2】特許4074057号公報
【非特許文献】
【0010】
【非特許文献1】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.
【発明の概要】
【発明が解決しようとする課題】
【0011】
しかしながら、上述の特許文献2に記載された技術において、セキュア・プロセッサでは、外部メモリからキャッシュラインへの読み込みを行ったプロセスを所有者として設定を行い、所有者として設定されたプロセスのみがキャッシュラインに記憶されるデータを読み出す構成となっているために、複数プロセス間においてキャッシュライン上でデータの共有を行うことができない。
【0012】
このように、特許文献2に記載された技術では、キャッシュラインに記憶されたデータを、アクセスが許可されていない他のプロセス、例えば、特権を有するOSのプロセスなどによるアクセスを防ぎ秘匿性を確保しつつ、キャッシュラインに記憶された情報を複数のプロセス間で共有できないという問題がある。
【0013】
本発明は、上記問題を解決すべくなされたもので、その目的は、キャッシュラインへのアクセスを許可されていないプロセスに対して秘匿性を確保しつつ、キャッシュラインに記憶された情報を複数のプロセス間で共有することができるキャッシュメモリ制御装置を提供することにある。
【課題を解決するための手段】
【0014】
上記問題を解決するために、本発明は、データのキャッシュを行うキャッシュメモリのキャッシュラインごとに、前記キャッシュラインへの書き込みに応じて、1つ以上のプロセスに対して該キャッシュラインに記憶されているデータへのアクセスの可否を識別する所有者情報を対応付けて記憶すると共に、実行中のプロセスが前記キャッシュラインにアクセスすると、前記キャッシュメモリ管理部に記憶されている前記所有者情報に基づいて、前記実行中のプロセスに対してアクセスを許可するキャッシュメモリ管理部を備えたことを特徴とするキャッシュメモリ制御装置である。
【発明の効果】
【0015】
この発明によれば、キャッシュラインに対応する所有者情報に基づいて、データを共有する複数のプロセスを識別することにより、当該キャッシュラインに記憶されているデータを複数のプロセスで共有することが可能となる。また、所有者情報に基づいて識別されないプロセスは、キャッシュラインに記憶されているデータに対してアクセスの許可を得ることができず、データを読み出すことができないため、秘匿性を保つことができる。したがって、秘匿性を保ちつつ、複数のプロセス間でキャッシュラインに記憶されたデータの共有を行うことが可能となる。
【図面の簡単な説明】
【0016】
【図1】第1実施形態のキャッシュメモリ制御装置の構成を示す概略ブロック図である。
【図2】同実施形態におけるキャッシュメモリ制御装置において、複数のプロセス間で共有されるアドレス範囲を設定する動作を示すフローチャート図である。
【図3】同実施形態における実行中のプロセスがキャッシュラインにアクセスする際、キャッシュメモリ制御装置が当該アクセス可否の動作を示すフローチャートである。
【図4】第2実施形態におけるキャッシュメモリ制御装置の構成を示す概略ブロック図である。
【図5】第3実施形態におけるキャッシュメモリ制御装置の構成を示す概略ブロック図である。
【図6】同実施形態におけるキャッシュメモリ制御装置が、キャッシュメモリに記憶されているデータを外部メモリに書き出す動作を示すフローチャートである。
【図7】同実施形態におけるキャッシュメモリ制御装置が、外部メモリに記憶されているデータをキャッシュラインに書き込む動作を示すフローチャートである。
【図8】第1実施例におけるプロセッサの構成を示す概略ブロック図である。
【図9】同実施例におけるプロセッサにおいて、実行されるプロセスがキャッシュラインを共有するグループを設定する動作を示すシーケンス図である。
【図10】同実施例におけるグループIDテーブルに記憶されている情報を示す図である。
【図11】同実施例におけるプロセスAとプロセスBとの間で共有するアドレスを設定する動作例を示すシーケンス図である。
【図12】同実施例における共有範囲テーブルに記憶されている情報を示す図である。
【図13】同実施例における所有者情報付キャッシュメモリに記憶されている情報を示す図である。
【図14】同実施例におけるプロセッサにおいて、プロセスAがキャッシュにアクセスする動作を示したシーケンス図である。
【図15】同実施例におけるプロセッサにおいて、キャッシュラインに所有者情報の設定を行うシーケンス図である。
【図16】第2実施例におけるプロセッサの構成を示す概略ブロック図である。
【図17】第3実施例におけるプロセッサの構成を示す概略ブロック図である。
【図18】同実施例における暗号鍵テーブルに記憶されている情報を示す図である。
【発明を実施するための形態】
【0017】
(第1実施形態)
次に、発明を実施するための最良の形態について図面を参照して詳細に説明する。図1は、第1実施形態のキャッシュメモリ制御装置100の構成を示す概略ブロック図である。キャッシュメモリ制御装置100は、図示するように、キャッシュメモリ管理部1、アドレス指定部2、グループID管理部3、実行中プロセスID管理部4、及び、共有範囲管理部5を含んで構成される。
【0018】
キャッシュメモリ管理部1は、キャッシュメモリが有する各キャッシュラインにアクセス可能なプロセス、又は、グループを示す所有者情報をキャッシュラインごとに対応付けて記憶すると共に、キャッシュラインに対応するデータを記憶する。ここで、所有者情報とは、キャッシュラインを複数のプロセス間で共有しない場合、当該キャッシュラインにデータを書き込んだプロセスのプロセスIDであり、共有する場合、当該キャッシュラインにデータを書き込んだプロセスを含むグループのグループIDである。
また、キャッシュメモリ管理部1は、キャッシュラインに初めにデータが書き込まれるときに、該キャッシュラインに所有者情報を対応付けて記憶する。また、キャッシュメモリ管理部1は、プロセスがキャッシュラインに書き込まれたデータに対してアクセスをする場合、当該キャッシュラインに対応付けられた所有者情報と、実行中プロセスIDとを比較し、所有者情報と実行中プロセスIDとが一致、又は、所有者情報と実行中プロセスIDが属するグループIDとが一致する場合、すなわち、実行中プロセスが当該キャッシュラインの所有者であればアクセスを許可し、当該キャッシュラインの所有者でなければアクセスを拒否する。
【0019】
アドレス指定部2は、プロセスがメモリアクセスを行う際にそのアドレスを指定する。グループID管理部3は、プロセスIDを1つ以上含むグループと、グループに対応付けられたグループIDを作成し、管理する。実行中プロセスID管理部4は、現在実行されているプロセスのIDを管理し、実行されているプロセスが切り替わるとプロセスIDを変更する。また、実行中プロセスID管理部4は、実行中のプロセスのプロセスID(以下、実行中プロセスIDという。)をキャッシュメモリ管理部1と、グループID管理部3とに出力する。
【0020】
共有範囲管理部5は、複数のプロセス間で共有する記憶領域のアドレス範囲を管理し、当該複数のプロセスからなるグループごとに共有するアドレス範囲と、当該アドレス範囲にアクセスを許可するグループを一意に識別するグループIDとを記憶する。また、共有範囲管理部5は、アドレス指定部2により指定されたアドレスが共有するアドレス範囲に含まれる場合、当該アドレス範囲にアクセスが許されたグループIDを、キャッシュメモリ管理部1に出力すると共に、グループIDをグループID管理部に出力する。ここで、共有する記憶領域のアドレスは、当該記憶領域を共有する複数のプロセスにおいて、同一のアドレスを用いる。これにより、共有範囲管理部5は、複数のプロセス間において共有される記憶領域をグループIDにより管理する。
【0021】
次に、キャッシュメモリ制御装置100の動作を説明する。図2は、キャッシュメモリ制御装置100において、複数のプロセス間で共有されるアドレス範囲を設定する動作を示すフローチャート図である。
まず、共有範囲管理部5は、実行中のプロセスから入力される、共有範囲として設定されるアドレス範囲と、当該アドレス範囲にアクセス可能なグループIDとを記憶する(ステップS101)。
グループID管理部3は、実行中のプロセスから入力されるグループIDから、該グループIDに属するプロセスIDの一覧を読み出し、キャッシュメモリ管理部1に出力する(ステップS102)。
【0022】
キャッシュメモリ管理部1は、実行中プロセスID管理部4から入力される実行中プロセスIDが、ステップS102でグループID管理部3から入力されたプロセスIDの一覧に含まれるか否かを判定する(ステップS103)。
実行中プロセスIDが入力されたプロセスIDの一覧に含まれる場合(ステップS103:N)、共有範囲管理部5及びグループID管理部3に記憶された情報により、共有範囲が設定される(ステップS104)。
実行中プロセスIDが入力されたプロセスIDの一覧に含まれない場合(ステップS103:Y)、ステップS101において共有範囲管理部5が記憶したアドレス範囲及びグループは消去され、共有範囲の設定を無効にする(ステップS105)。
【0023】
次に、グループIDを登録する際の、キャッシュメモリ制御装置100の動作について説明する。
まず、グループID管理部3は、実行中のプロセスからグループIDと当該グループIDに含まれる1つ以上のプロセスIDの一覧とが入力され、入力されたグループIDが既に使用されているか否かを判定する。
グループID管理部3は、既にグループIDが使用されている場合、グループIDを新たに生成することはできないので、グループIDの作成を行わなかったことを示す情報をエラー情報として実行中のプロセスに出力する。また、グループID管理部3は、グループIDがまだ使用されていない場合、グループIDとグループIDに含まれるプロセスIDとを対応付けて記憶する。
キャッシュメモリ制御装置100は、上述のように、グループIDの登録を行う。
【0024】
次に、図3は、実行中のプロセスがキャッシュラインにアクセスする際、キャッシュメモリ制御装置100が当該アクセス可否の動作を示すフローチャートである。
まず、実行中のプロセスによりキャッシュラインへのアクセスが発生すると、アドレス指定部2は、実行中のプロセスから入力されるアドレスをキャッシュメモリ管理部1に出力する(ステップS201)。
キャッシュメモリ管理部1は、アドレス指定部2から入力されたアドレスに対応するキャッシュラインがキャッシュメモリ上に存在するか否かを判定する(ステップS202)。
【0025】
入力されたアドレスに対応するキャッシュラインがキャッシュメモリ上に存在する場合(ステップS202:N)、キャッシュメモリ管理部1は、ステップS202で判定したキャッシュラインの所有者情報を読み出す(ステップS203)。
さらに、キャッシュメモリ管理部1は、読み出した所有者情報と、実行中プロセスID管理部4から入力される実行中プロセスIDとが一致するか否かを判定する(ステップS204)。
所有者情報と実行中プロセスIDとが一致する場合(ステップS204:N)、キャッシュメモリ管理部1は、アクセス対象のキャッシュラインの所有者が、実行中のプロセスであることを確認できたのでキャッシュメモリへのアクセスを許可する(ステップS205)。
【0026】
一方、所有者情報と実行中プロセスIDとが一致しない場合(ステップS204:Y)、キャッシュメモリ管理部1は、ステップS203にて読み出した所有者情報をグループID管理部3に出力する。グループID管理部3は、キャッシュメモリ管理部1が出力した所有者情報がグループIDとして記憶されている否かを判定する(ステップS206)。
所有者情報がグループIDとして、グループID管理部3に記憶されていない場合(ステップS206:Y)、キャッシュメモリ管理部1は、実行中のプロセスによるキャッシュラインのアクセスを許可しない(ステップS212)。
【0027】
一方、所有者情報がグループIDとして、グループID管理部3に記憶されている場合(ステップS206:N)、グループID管理部3は、入力されたグループに含まれるプロセスIDに含まれるプロセスID(プロセスID一覧)を読み出して(ステップS207)、実行中プロセスIDが読み出したプロセスIDに含まれるか否かを判定する(ステップステップS208)。
実行中プロセスIDが読み出したプロセスIDに含まれない場合(ステップS208:Y)、キャッシュメモリ管理部1は、実行中のプロセスによるキャッシュラインのアクセスを許可しない(ステップS212)。
実行中プロセスIDが読み出したプロセスIDに含まれる場合(ステップS208:N)、グループID管理部3は、実行中のプロセスIDが、アクセス対象のキャッシュラインを所有するグループに含まれていることを、キャッシュメモリ管理部1に出力する。キャッシュメモリ管理部1は、キャッシュラインの所有者が実行中プロセスを含むグループであることが確認できたので、実行中プロセスによるキャッシュラインへのアクセスを許可する(ステップS205)。
【0028】
また、入力されたアドレスに対応するキャッシュラインがキャッシュメモリ上に存在しない場合(ステップS202:Y)、キャッシュメモリ管理部1は、実行中のプロセスによるキャッシュラインへのアクセスの種類を判定する(ステップS220)。
キャッシュラインへのアクセスが読み出しアクセスの場合(ステップS220:Y)、キャッシュメモリ管理部1は、外部メモリからキャッシュラインへの読み込みを行う(ステップS221)。
キャッシュラインへのアクセスが書き込みアクセスの場合(ステップS220:N)、キャッシュメモリ管理部1は、空きキャッシュラインを確保する(ステップS222)。
なお、ステップS221及びステップS222の詳細な動作は、公知のプロセッサにおけるキャッシュメモリの動作と同様である。
【0029】
続いて、共有範囲管理部5は、アドレス指定部2により指定されるアドレス、すなわち、実行中のプロセスによりアクセスされるアドレスが共有範囲に含まれるかどうかを判定する(ステップS223)。
アクセスされるアドレスが共有範囲に含まれない場合(ステップS223:N)、実行中のプロセスによりアクセスされるアドレスが共有範囲ではないので、共有範囲管理部5は、当該アドレスが共有範囲に含まれないことをキャッシュメモリ管理部1に出力する(ステップS224)。
キャッシュメモリ管理部1は、アクセスするキャッシュラインに、実行中プロセスID管理部4が出力する実行中プロセスIDを対応付けて記憶して、実行中のプロセスをアクセスするキャッシュラインの所有者として設定する(ステップS229)。
そして、キャッシュメモリ管理部1は、実行中のプロセスにキャッシュラインへのアクセスを許可する(ステップS205)。
【0030】
一方、アクセスされるアドレスが共有範囲に含まれる場合(ステップS223:Y)、共有範囲管理部5は、共有範囲に対応付けられているグループIDを読み出し、読み出したグループIDをグループID管理部3に出力する(ステップS225)。
グループID管理部3は、入力されたグループIDに対応して記憶されているプロセスIDを読み出し、読み出したプロセスIDに実行中プロセスIDが含まれているか否かを判定する(ステップS226、S227)。
実行中プロセスIDがグループIDに含まれていない場合(ステップS227:N)、キャッシュメモリ管理部1は、実行中のプロセスに対してキャッシュラインへのアクセスを許可しない(ステップS228)。
実行中プロセスIDがグループIDに含まれている場合(ステップS227:Y)、キャッシュメモリ管理部1は、アクセスするキャッシュラインにグループIDを対応付けて記憶して、実行中のプロセスを含んだグループをキャッシュラインの所有者として設定し(ステップS229)、実行中のプロセスにキャッシュラインへのアクセスを許可する(ステップS205)。
【0031】
上述のように、キャッシュメモリ制御装置100は、キャッシュメモリ管理部1が、キャッシュラインに所有者情報を対応付けて記憶することにより、アクセスする権利を有するプロセスのみに対してアクセスを許可する。これにより、キャッシュラインに対してアクセスする権利を有しないプロセスに対しては、キャッシュラインへのアクセスを拒否することで、データを共有しないプロセス間において、キャッシュラインに記憶されているデータの秘匿性を保つことが可能になる。また、キャッシュメモリ制御装置100を備えたプロセッサにおいては、外部に備えられたメモリにデータを一旦書き出してデータを共有することに比べ、キャッシュラインを介してプロセス間のデータ共有を行うことにより、プロセス間のデータ共有を高速に行うことができる。
【0032】
(第2実施形態)
次に、図4は、第2実施形態におけるキャッシュメモリ制御装置200の構成を示す概略ブロック図である。キャッシュメモリ制御装置200は、図示するように、キャッシュメモリ管理部1、アドレス指定部2、グループID管理部23、実行中プロセスID管理部4、共有範囲管理部5を含んで構成される。なお、キャッシュメモリ制御装置200において、グループID管理部23以外は、第1実施形態のキャッシュメモリ制御装置100と同じ構成であるため同じ符号1、2、4、5を付してその説明を省略する。グループID管理部23は、グループIDキャッシュ部23Aを含み、プロセスIDを1つ以上含むグループと、グループに対応付けられたグループIDを作成し、管理する。
【0033】
第1実施形態では、共有範囲管理部5がアクセス対象のアドレスに対応したグループIDを読み出す処理(ステップS207)と、当該グループIDに含まれているプロセスIDを読み出す処理(ステップS208)との2回の読み出し処理が行われており、冗長な処理になっている。そこで、本実施形態のキャッシュメモリ制御装置200は、グループID管理部23がグループIDキャッシュ部23Aを備え、実行中プロセスIDが含まれるグループIDをグループIDキャッシュ部23Aに記憶させることにより、問い合わせされたグループIDに実行中プロセスIDが含まれるか否かを判定するために要する時間を削減することができる。
また、グループID管理部23は、グループIDが作成、又は変更されたとき、あるいは、実行中プロセスIDが変化したとき、グループIDキャッシュ部23Aに記憶しているグループIDの一覧が更新される。
これにより、グループID管理部23は、実行中のプロセスがキャッシュラインにアクセスできるか否かを判定するために、グループIDキャッシュ部23Aに記憶されているグループIDの一覧の中に、指定されたグループIDが含まれているか検索する処理だけを行えばよく、グループIDの検索時間を削減することができる。
【0034】
(第3実施形態)
図5は、第3実施形態におけるキャッシュメモリ制御装置300の構成を示す概略ブロック図である。キャッシュメモリ制御装置300は、図示するように、キャッシュメモリ管理部31、アドレス指定部2、グループID管理部3、実行中プロセスID管理部4、共有範囲管理部5、暗号処理部6、暗号鍵管理部7、キャッシュメモリ8、及び、外部メモリ9を含み構成される。なお、キャッシュメモリ制御装置300において、第1実施形態のキャッシュメモリ制御装置100と同じ構成の部分は、同じ符号2〜5を付してその説明を省略する。
【0035】
キャッシュメモリ管理部31は、第1実施形態のキャッシュメモリ制御装置100に含まれるキャッシュメモリ管理部1が有する機能に加えて、アドレス指定部2から入力されたアドレスに対応するキャッシュメモリ8が有するキャッシュラインを特定して、当該キャッシュラインと暗号処理部6との間のデータの伝送を制御する。
暗号処理部6は、暗号鍵管理部7により指定された暗号鍵を用いて、実行中のプロセスにより指定されたデータを、暗号化又は復号を行う。暗号鍵管理部7は、プロセスID又はグループIDと、暗号鍵とを対応付けて記憶する。
暗号鍵管理部7は、キャッシュメモリ管理部31から入力されるプロセスID又はグループIDに対応付けて記憶している暗号鍵を暗号処理部6に出力する。キャッシュメモリ8は、外部メモリ9に記憶されているデータの一部を、当該データが記憶されているアドレスと対応付けて記憶する。外部メモリ9は、データを記憶する。また、外部メモリ9にはデータのみが記憶され、それぞれのデータに対応する所有者を示す情報は記憶しない。
【0036】
次に、図6は、キャッシュメモリ制御装置300が、キャッシュメモリ8に記憶されているデータを外部メモリ9に書き出す動作を示すフローチャートである。
まず、キャッシュメモリ管理部31は、アドレス指定部2を介して実行中のプロセスが指定したアドレスに対応するキャッシュラインの所有者情報を読み出し、読み出した所有者情報に含まれるプロセスID又はグループIDを暗号鍵管理部7に出力する。また、キャッシュメモリ管理部31は、アドレス指定部2を介して実行中のプロセスが指定したアドレスに対応するキャッシュメモリ8が有するキャッシュラインのデータを暗号処理部6に出力させる制御を行う(ステップS301)。
暗号鍵管理部7は、キャッシュメモリ管理部31から出力されたプロセスID又はグループIDに対応付けられた暗号鍵を暗号処理部6に出力する(ステップS302)。
暗号処理部6は、キャッシュメモリ8から出力されたデータに対して、暗号鍵管理部7から出力された暗号鍵を用いて暗号化を行う(ステップS303)。
暗号処理部6は、暗号化したデータを外部メモリ9に出力して書き込む(ステップS304)。
【0037】
上述のように、キャッシュメモリ制御装置300は、キャッシュラインに記憶されているデータを外部メモリ9に記憶させるとき、キャッシュラインに記憶されているデータを暗号鍵管理部7に記憶されている暗号鍵を用いて暗号化することにより、外部メモリに記憶されたデータにアクセスされたとしてもデータの内容の漏洩を防ぐことができる。
【0038】
次に、図7は、キャッシュメモリ制御装置300が、外部メモリ9に記憶されているデータをキャッシュラインに書き込む動作を示すフローチャートである。
まず、アドレス指定部2は、実行中のプロセスからデータを読み出すアドレスが入力され、入力されたアドレスをキャッシュメモリ管理部31に出力する(ステップS401)。
キャッシュメモリ管理部31は、アドレス指定部2から出力されたアドレスに対応したデータがキャッシュメモリ8に存在するか否かを判定する(ステップS402)。
キャッシュメモリ8にアドレスに対応したデータが存在する場合(ステップS402:Y)、キャッシュメモリ制御装置300は、実行中のプロセスによるキャッシュラインへのアクセスの可否を判定する(ステップS499)。
なお、ステップS499の動作は、図3に示した第1実施形態のステップS203〜S212と同じ動作である。
【0039】
一方、キャッシュメモリ8にアドレスに対応したデータが存在しない場合(ステップS402:N)、共有範囲管理部5は、アドレス指定部2が出力したアドレスが、共有範囲として設定されているか否かを判定する(ステップS403)。
アドレスが共有範囲として指定されていない場合(ステップS403:N)、共有範囲管理部5は、当該アドレスが共有範囲内に含まれないことを示す情報をキャッシュメモリ管理部31に出力する。キャッシュメモリ管理部31は、当該情報が入力されると、実行中プロセスIDを所有者情報として暗号鍵管理部7に出力する(ステップS410)。
一方、アドレスが共有範囲と指定されている場合(ステップS403:Y)、共有範囲管理部5は、当該アドレスに対応付けて記憶されているグループIDをグループID管理部3に出力する(ステップS404)。
グループID管理部3は、共有範囲管理部5から入力されたグループIDに含まれるプロセスIDの一覧を読み出し(ステップS405)、読み出したプロセスIDの一覧に実行中プロセスIDが含まれているか否かを判定する(ステップS406)。
【0040】
読み出したプロセスIDの一覧に実行中プロセスIDが含まれていない場合(ステップS406:Y)、グループID管理部3は、アドレスに対応するグループIDには実行中プロセスIDが含まれていないことを示す情報をキャッシュメモリ管理部31に出力する。キャッシュメモリ管理部31は、当該情報が入力されると、実行中プロセスIDを所有者情報として暗号鍵管理部7に出力する(ステップS410)。
一方、読み出したプロセスIDの一覧に実行中プロセスIDが含まれている場合(ステップS406:N)、グループID管理部3は、グループIDを所有者情報として暗号鍵管理部7に出力する(ステップS411)。
暗号鍵管理部7は、ステップS410においてキャッシュメモリ管理部31から出力されたプロセスID、又は、ステップS411においてグループID管理部3から出力されたグループIDに対応付けて記憶されている暗号鍵を暗号処理部6に出力する(ステップS412)。
暗号処理部6は、キャッシュメモリ管理部31から入力されたアドレスに記憶されたデータを外部メモリ9から読み出し、暗号鍵管理部7から入力された暗号鍵により、読み出したデータを復号する(ステップS413)。
続いて、暗号処理部6は、復号したデータをキャッシュメモリ管理部31に指示されたキャッシュメモリ8が有するキャッシュラインに書き込む(ステップS414)。
キャッシュメモリ管理部31は、ステップS414においてデータが書き込まれたキャッシュラインに対応する所有者情報として、ステップS410で特定されたプロセスID、又は、ステップS411で特定されたグループIDを対応付けて記憶する。(ステップS415)。
【0041】
上述のようにキャッシュメモリ制御装置300により、共有範囲として設定されたアドレスに対応する外部メモリ9に記憶されたデータは、当該データを共有するプロセスのプロセスIDを含むグループIDに対応付けられた暗号鍵により復号されるので、共有範囲のデータにアクセスが許可されたプロセスは、グループIDに対応付けられた暗号鍵を用いてデータを正しく復号し、データを用いることができる。一方、共有範囲のデータにアクセスが許可されていないプロセスは、正しい暗号鍵を用いて復号することができないため、外部メモリ9から読み出したデータを用いることができない。これにより、グループIDに含まれるプロセスIDに対応するプロセス間において、キャッシュメモリ8及び外部メモリ9を介してデータの共有が行えると共に、当該データにアクセスを許されていないプロセスに対しては、当該データの秘匿性を確保することができる。
【実施例】
【0042】
(第1実施例)
次に、図8は、第1実施例におけるプロセッサ800の構成を示す概略ブロック図である。プロセッサ800は、キャッシュメモリ管理部80、グループID管理部81、共有範囲管理部82、コンテキストスイッチ管理部831、プロセッサ・コア84を有する。
キャッシュメモリ管理部80は、キャッシュラインごとに所有者情報を対応付けて記憶する所有者情報付キャッシュメモリ801を制御する。所有者情報付キャッシュメモリ801の有するキャッシュライン802それぞれは、キャッシュラインの使用状態を示すフラグ803、対応する外部記憶のアドレスを示すタグ804、データ805、及び、当該キャッシュラインの所有者情報を示す所有者ID806のフィールドにより構成される。
【0043】
キャッシュメモリ管理部80は、ロード/ストア・ユニット841から入力されるアクセス情報に応じて、アクセス情報に含まれるアドレスに対応するデータを所有者情報付キャッシュメモリ801から読み出して、ロード/ストア・ユニット841に出力する。
グループID管理部81は、キャッシュラインを共有するグループを識別するグループID(GID)812と、当該グループに含まれるプロセスを識別するプロセスID(PID)813とを対応付けて記憶するグループIDテーブル811を制御する。
共有範囲管理部82は、キャッシュの共有を行う範囲の先頭アドレスと末尾アドレスとからなる共有範囲アドレス823と、当該範囲の共有を行うグループを識別するグループID(GID)824とを対応付けて記憶する共有範囲テーブル821を制御する。また、共有範囲管理部82は、ロード/ストア・ユニット841から入力されるアドレスが、実行中プロセスIDに対応付けられた共有範囲アドレスに含まれるか否かを判定し、共有範囲アドレスに含まれるとき、当該共有範囲アドレスに対応付けられたグループIDをキャッシュメモリ管理部80とグループID管理部81とに出力する。
【0044】
コンテキストスイッチ管理部831は、プロセッサ800上で実行されるOSから独立してコンテキストスイッチを行い、命令実行ユニット842からのコンテキストスイッチ指令が入力されると、実行コンテキストを切り替え、新たに実行中となるプロセスのプロセスIDを実行中プロセスID管理部83に出力する。
実行中プロセスID管理部83は、OSが行うプロセスIDの管理とは異なるプロセスIDの管理を行うものであり、コンテキストスイッチ管理部831により実行中のプロセスのプロセスIDを更新し、キャッシュメモリ管理部80と、グループID管理部81とに実行中のプロセスのプロセスIDを出力する。
プロセッサ・コア84は、入出力命令に対してデコードと制御を行うロード/ストア・ユニット841を備える命令実行ユニット842を有し、プログラム・コードの実行を行う。
【0045】
以下、プロセッサ800の動作を図を用いて説明する。なお、プロセッサ800上では、プロセスA、プロセスB、及び、プロセスPが実行され、プロセスAとプロセスBとの間ではキャッシュラインの共有が行われ、プロセスPは他のプロセスとキャッシュラインの共有を行わない場合について説明する。
【0046】
<グループの新規設定>
図9は、プロセッサ800において、実行されるプロセスがキャッシュラインを共有するグループを設定する動作を示すシーケンス図である。
まず、プロセスBは、自身を識別するプロセスID(ID_B)をプロセスAに送信する(ステップS901)。
プロセスAは、自身のプロセスとプロセスBとが含まれるグループのIDとしてグループID(ID_G)を作成し(ステップS902)、プロセスBから受信したプロセスID(ID_B)と、自身のプロセスID(ID_A)と、グループID(ID_G)とをグループID管理部81に出力する(ステップS903)。
【0047】
グループID管理部81は、グループIDに対応付けるプロセスIDの中に、実行中プロセスIDが含まれるか否かを判定して、実行中プロセスID(ID_A)が含まれるとき、入力されたグループID(ID_G)と、プロセスID(ID_A、ID_B)とを対応付けてグループIDテーブル811に記憶させる(ステップS904)。
グループID管理部81は、グループの登録が完了したことを示す情報をプロセスAに送信する(ステップS905)。
なお、グループID管理部81は、入力されたプロセスIDに実行中プロセスIDが含まれない場合や、登録するグループIDが既存の場合、グループIDテーブル811への記憶させずに、エラーを示す情報をプロセスAに出力する。プロセスAは、入力された当該情報に基づいて処理、例えば、例外処理などを行う。
図10は、図9の動作を行った後のグループIDテーブル811に記憶されている情報を示す図である。上述の動作により、グループIDテーブル811には、エントリ904に示されるように、グループID(ID_G)と、プロセスID(ID_A、ID_B)とが対応付けて記憶される。
【0048】
<共有範囲の設定>
図11は、プロセスAとプロセスBとの間で共有するアドレスを設定する動作例、及び、プロセスPがプロセスA及びプロセスBの共有アドレスの設定を試みて拒否される動作例を示すシーケンス図である。なお、プロセッサ800は、図9で説明したグループの新規設定が行われた後の状態として説明する。
まず、プロセスAは、グループID(ID_G)と、共有するアドレス0xA0000000−0xA0001000を示す情報とを共有範囲管理部82に送信する(ステップS1001、S1002)。
共有範囲管理部82は、受信したグループID(ID_G)をグループID管理部81に出力し、当該グループIDが実行中プロセスIDを含んでいるか否かを判定させる。ここで、グループID管理部81は、実行中プロセスID管理部83から実行中プロセスID(ID_A)を読み出し、共有範囲管理部82から入力されたグループID(ID_G)に実行中プロセスID(ID_A)が含まれるか否かを判定する。グループID管理部81は、グループID(ID_G)には、実行中プロセスID(ID_A)が含まれていることを示す情報を共有範囲管理部82に出力する(ステップS1003)。
【0049】
共有範囲管理部82は、共有範囲として、アドレス0xA0000000−0xA0001000と、グループID(ID_G)とを対応付けて共有範囲テーブル821に記憶し(ステップS1004)、共有範囲の登録が完了したことを示す情報をプロセスAに送信する(ステップS1005)。
【0050】
次に、プロセスPは、グループ(ID_G)において、共有範囲のアドレスを指定し(ステップS1101)、グループID(ID_G)と当該共有範囲のアドレスとを共有範囲管理部82に送信する(ステップS1102)。
【0051】
共有範囲管理部82は、ステップS1003と同様の動作により、グループID管理部81から実行中プロセスID(ID_P)が受信したグループID(ID_G)に含まれないことを示す情報を入力される(ステップS1102)。
共有範囲管理部82は、グループID管理部81から入力された情報により、共有範囲を共有範囲テーブル821に記憶せずに、プロセスPにエラーを示す情報を送信する(ステップS1103)。
【0052】
上述のように、キャッシュラインを共有するグループに含まれるプロセスは、共有範囲アドレスを設定することができ、キャッシュラインを共有するグループに含まれないプロセスは、当該グループに対して共有範囲アドレスの設定を拒否される動作を行う。
図12は、上述の図11の動作を行った後の共有範囲テーブル821に記憶されている情報を示す図である。共有範囲テーブル821には、図示するように、プロセスA(ID_A)が登録した共有範囲アドレスとグループID(ID_G)とが対応付けられたエントリ1006が記憶されている。
【0053】
<キャッシュアクセス動作>
図14は、プロセッサ800において、プロセスAがキャッシュにアクセスする動作を示したシーケンス図である。なお、プロセッサ800において、共有範囲テーブル821、グループIDテーブル811、及び、所有者情報付キャッシュメモリ801は、次の情報を記憶している。
グループIDテーブル811には、図10に示すように、プロセスA(ID_A)とプロセスB(ID_B)とを含むグループ(ID_G)、プロセスA(ID_A)とプロセスC(ID_C)とプロセスD(ID_D)とを含むグループ(ID_X)、プロセスB(ID_B)とプロセスC(ID_C)とを含むグループ(ID_Y)が記憶されている。
共有範囲テーブル821には、図12に示すように、共有アドレス範囲0xA0000000−0xA0001000とグループID(ID_G)とが対応付けられたエントリ1006が記憶されている。
所有者情報付キャッシュメモリ801には、図13に示すように、フラグ(valid)とタグ(0xA0000800の上位ビット)とデータと所有者ID(ID_G)とが対応付けられたエントリがキャッシュライン1101に記憶され、フラグ(valid)とタグ(0xA0001800の上位ビット)とデータと所有者ID(ID_A)とが対応付けられたエントリがキャッシュライン1102に記憶され、フラグ(valid)と、タグ(0xA0002800の上位ビット)と、データと所有者ID(ID_A)とが対応付けられたエントリがキャッシュライン1103に記憶されている。
【0054】
まず、プロセスAは、アドレス0xA0001800にアクセスする処理を開始し(ステップS1201)、当該アドレスをキャッシュメモリ管理部80に送信する(ステップS1202)。
キャッシュメモリ管理部80は、受信したアドレスを含むキャッシュラインが、所有者情報付キャッシュメモリ801に記憶されているか否かを判定し(ステップS1203)、受信したアドレスを含むキャッシュライン1102に対応付けて記憶されている所有者ID(ID_A)を所有者情報付キャッシュメモリ801から読み出す(ステップS1204)。
キャッシュメモリ管理部80は、実行中プロセスID管理部83から読み出した実行中プロセスID(ID_A)と読み出した所有者ID(ID_A)とが比較し、一致する場合は、キャッシュラインへのアクセスを許可する。キャッシュメモリへのアクセスがリード・アクセスのとき、当該キャッシュライン1102に記憶されているデータをロード/ストア・ユニット841に出力する。キャッシュメモリへのアクセスがライト・アクセスのとき、当該キャッシュライン1102に、ロード/ストア・ユニット841からのデータを書き込んで記憶させる(ステップS1205)。
【0055】
次に、プロセスAは、アドレス0xA0000800にアクセスする処理を開始し(ステップS1211)、当該アドレスをキャッシュメモリ管理部80に送信する(ステップS1212)。
キャッシュメモリ管理部80は、プロセスAからアドレス0xA0000800を受信し、受信したアドレスに対応するキャッシュラインを所有者情報付キャッシュメモリ801から検出し(ステップS1213)、検出したキャッシュライン1101の所有者ID(ID_G)を読み出す(ステップS1214)。
【0056】
キャッシュメモリ管理部80は、読み出した所有者ID(ID_G)と、実行中プロセスID管理部83から読み出した実行中プロセスID(ID_A)とを比較して、不一致であることを判定すると(ステップS1215)、キャッシュメモリ管理部80は、読み出した所有者ID(ID_G)をグループID管理部81に出力する(ステップS1216)。
グループID管理部81は、キャッシュメモリ管理部80が出力したグループID(ID_G)に含まれるプロセスIDの一覧をグループIDテーブル811から読み出して、実行中プロセスIDが含まれるか否かを判定する(ステップS1217)。
【0057】
グループID管理部81は、グループID(ID_G)に実行中プロセスID(ID_A)が含まれることエントリ904にて確認すると、グループID(ID_G)に実行中プロセスIDが含まれることをキャッシュメモリ管理部80に出力する(ステップS1218)。
キャッシュメモリ管理部80は、アドレス0xA0000800の所有者ID(ID_G)で示されるグループに実行中プロセスID(ID_A)が含まれることを確認すると、プロセスAに対してアドレス0xA0000800に対応するキャッシュライン1101に記憶されているデータへのアクセスを許可する(ステップS1219)。
【0058】
上述のように、プロセッサ800は、プロセスがキャッシュラインにアクセスする際、プロセスIDあるいはグループIDにより、キャッシュラインへのアクセスが許可されているか否かを判定し、キャッシュラインへのアクセスの可否を判定する。
なお、キャッシュメモリ管理部80は、キャッシュメモリへのアクセスを許可しない場合、OSなどのログにプロセスがアクセスを許可されていないメモリにアクセスしたことを記録しておいてもよい。このようにすることで、プロセスによる不正なアクセスが行われたことを検出することができる。
【0059】
ここで、プロセスAとキャッシュラインの共有をしていないプロセスPが、プロセスAが所有者となっているキャッシュラインにアクセスする場合について説明する。
一般的に、プロセスAとプロセスPとのメモリ領域は、分離して設けられるので、キャッシュメモリ管理部80が、プロセスPからのアクセス要求に対して、プロセスAが所有者となっているキャッシュラインがアクセス対象であるか否かを判定することはほとんどない。しかし、プロセスPが、プロセスAに対してメモリ領域の割り当てを行う権限を有する場合、プロセスPに割り当てられているメモリ領域をプロセスAに割り当てることができる。この場合に、例えば、プロセスAのアドレス0xA0000800にプロセスPからアクセスすると、キャッシュメモリ管理部80での検索では該当するキャッシュラインがヒットする。しかし、キャッシュラインの所有者はID_Gであり、実行中プロセスIDのID_Pとは異なるため、上述のような場合であってもプロセスPは、プロセスAが所有者のキャッシュラインにアクセスすることはできない。
【0060】
また、例えば、グループ(ID_G)に、プロセスPのプロセスID(ID_P)が含まれている期間に、プロセスPにより共有範囲が設定され、設定の後にグループ(ID_G)からプロセスPが削除された場合、グループID管理部81により、実行中プロセスID(ID_P)がグループID(ID_G)に含まれるか否かの判定が行われるので、プロセッサ800の構成において、所有者としてプロセスAが対応付けられているキャッシュラインへのプロセスPによる不正アクセスを排除することができる。
【0061】
<キャッシュラインに所有者情報の設定>
次に、図15は、プロセッサ800において、キャッシュラインに所有者情報の設定を行うシーケンス図である。
キャッシュラインに所有者情報を設定する動作は、外部のメモリに記憶されたデータを読み出す処理や、外部のメモリにデータを記憶させる処理において、空き(フラグがinvalid)のキャッシュラインに記憶させる場合と、使用されている(フラグがvalid)のキャッシュラインに記憶されているデータを外部メモリに書き出した後に、当該キャッシュラインにデータを記憶させる場合との2通りの動作がある。
【0062】
まず、共有範囲内にアクセスを行う場合について説明する。プロセスAは、アドレス0xA0000900にアクセスする処理を開始し(ステップS1301)、当該アドレスをキャッシュメモリ管理部80に送信する(ステップS1302)。
キャッシュメモリ管理部80は、受信したアドレスに対応するキャッシュラインが所有者情報付キャッシュメモリ801に存在するか否かを判定し(ステップS1303)、受信したアドレスに対応するキャッシュラインが存在しないとき、空きのキャッシュライン1104に対してデータを書き込む(ステップS1304)。
キャッシュメモリ管理部80は、受信したアドレスを共有範囲管理部82に出力する(ステップS1305)。
【0063】
共有範囲管理部82は、キャッシュメモリ管理部80から出力されたアドレスが、共有範囲テーブル821に共有範囲として設定されているか否かを判定し(ステップS1306)、当該アドレスが共有範囲に設定されていると(共有範囲テーブル821のエントリ1006)、当該共有範囲に対応するグループIDを共有範囲テーブル821から読み出してグループID管理部81に出力する(ステップS1307)。
グループID管理部81は、共有範囲管理部82から出力されたグループID(ID_G)に実行中プロセスIDが含まれているか否かをグループIDテーブル811を用いて判定し(ステップS1308)、グループID(ID_G)をキャッシュメモリ管理部80に出力する(ステップS1309)。
キャッシュメモリ管理部80は、グループID管理部81が出力したグループID(ID_G)をキャッシュライン1104の所有者情報として所有者情報付キャッシュメモリ801に記憶させる(ステップS1310)。
【0064】
次に、共有範囲外にアクセスを行う場合について説明する。プロセスAは、アドレス0xA0001200にアクセスする処理を開始し(ステップS1321)、当該アドレスをキャッシュメモリ管理部80に送信する(ステップS1322)。
キャッシュメモリ管理部80は、受信したアドレスに対応するキャッシュラインが所有者情報付キャッシュメモリ801に存在するか否かを判定し(ステップS1323)、受信したアドレスに対応するキャッシュラインが存在しないとき、空きのキャッシュライン1104に対してデータを書き込む(ステップS1324)。
キャッシュメモリ管理部80は、受信したアドレス共有範囲管理部82に出力する(ステップS1325)。
【0065】
共有範囲管理部82は、キャッシュメモリ管理部80から出力されたアドレスが、共有範囲テーブル821に共有範囲として設定されているか否かを判定し(ステップS1326)、当該アドレスが共有範囲に設定されていないと、共有範囲に設定されていないことを示す情報をキャッシュメモリ管理部80に出力する(ステップS1327)。
キャッシュメモリ管理部80は、共有範囲に設定されていないことを示す情報が入力されると、キャッシュライン1104の所有者情報として、実行中プロセスID(ID_A)を所有者情報付キャッシュメモリ801のキャッシュライン1104に記憶させる(ステップS1328)。
上述のように、プロセッサ800は、キャッシュラインの所有者情報としてプロセスID又はグループIDを記憶させて設定する。
【0066】
(第2実施例)
図16は、第2実施例におけるプロセッサ800Aの構成を示す概略ブロック図である。プロセッサ800Aは、第1実施例のプロセッサ800に比べ、グループID管理部81Aが異なる。なお、他の構成については、同じ符号を付して説明を省略する。また、グループID管理部81Aは、第1実施例のグループID管理部81と異なり、グループIDキャッシュ1401を有している。
まず、グループIDキャッシュ1401が記憶するデータの更新の動作について説明する。実行中プロセスID管理部83は、実行中のプロセスが切り替えられて実行中プロセスIDが変化すると、グループID管理部81は、グループIDキャッシュ1401に記憶されているデータを消去すると共に、新たな実行中プロセスIDをキーとしてグループIDテーブル811を検索し、実行中プロセスIDを含むグループIDをグループIDキャッシュ1401に記憶させる。
【0067】
例えば、グループIDテーブル811に記憶されている情報が図10に図示する状態であり、実行中プロセスIDがID_Aに変化したとき、グループID管理部81Aは、実行中プロセスID(ID_A)をキーとしてグループIDテーブル811を検索し、ヒットしてグループID(ID_G、ID_X)をグループIDキャッシュ1401に記憶させる。
また、グループを新規に作成する場合、グループID管理部81Aは、新規に作成されたグループIDをグループIDキャッシュ1401に記憶させる。
【0068】
次に、グループIDキャッシュ1401のデータを参照する動作について説明する。第1実施例においてグループID管理部81が、図14のステップS1219において、入力されたグループIDに実行中プロセスIDが含まれているか否かの判定をグループIDテーブル811を走査して検出していたのに対して、グループID管理部81Aは、入力されたグループIDがグループIDキャッシュ1401に記憶されているか否かを判定すればよく、グループIDテーブル811を走査する回数を削減することができる。
【0069】
(第3実施例)
図17は、第3実施例におけるプロセッサ800Bの構成を示す概略ブロック図である。プロセッサ800Bは、第1実施例のプロセッサ800に加え、暗号処理部1501、暗号鍵管理部1502、及び、暗号鍵テーブル1504を有し、外部メモリ1503に接続されている。他の構成については、同じ符号を付して説明を省略する。
暗号処理部1501は、キャッシュメモリ管理部80と、データを記憶する外部メモリ1503との間に設けられ、暗号鍵管理部1502から入力される暗号鍵により、キャッシュメモリ管理部80から外部メモリ1503にデータが書き出されるとき、当該データを暗号化し、外部メモリ1503から読み出されたデータをキャッシュメモリ管理部80に出力するとき、読み出されたデータを暗号鍵により復号する。
暗号鍵管理部1502は、入力されるプロセスID又はグループIDに対応する暗号鍵を暗号鍵テーブル1504から読み出して、読み出した暗号鍵を暗号処理部1501に出力すると共に、暗号鍵テーブル1504に該当するプロセスID又はグループIDが記憶されていないとき、暗号鍵を生成し、生成した暗号鍵と、プロセスID又はグループIDとを対応付けて暗号鍵テーブル1504に記憶させる。暗号鍵テーブル1504には、プロセスID又はグループIDと、暗号鍵とが対応付けられて記憶されている。
【0070】
次に、プロセッサ800Bの、第1実施例のプロセッサ800と異なる動作である、所有者情報付キャッシュメモリ801から外部メモリ1503へのデータの書き出し、及び、外部メモリ1503から所有者情報付キャッシュメモリ801へのデータの書き込みについて説明を行う。なお、第1実施例と同様に、プロセッサ800B上で、プロセスA、プロセスB、及び、プロセスPが実行され、プロセスAとプロセスBとの間ではキャッシュラインの共有が行われ、プロセスPは他のプロセスとキャッシュラインの共有を行わない場合について説明する。また、共有範囲テーブル821、グループIDテーブル811、及び、所有者情報付キャッシュメモリ801には、図10、図12、図13で示す情報が記憶されており、暗号鍵テーブル1504には、図18に図示するように、プロセスA(ID_A)、プロセスB(ID_B)、プロセスP(ID_P)、グループG(ID_G)それぞれに対応する暗号鍵が対応付けられて記憶されている。
【0071】
<外部メモリ1503への書き出し>
キャッシュメモリ管理部80において、所有者情報付キャッシュメモリ801に空きのキャッシュラインが存在せず、容量が不足した場合、以下のようにして、所有者情報付キャッシュメモリ801に記憶されているデータを外部メモリ1503に書き出す。
まず、キャッシュメモリ管理部80は、一般的な公知の方法を用いて外部メモリ1503に書き出すキャッシュラインを選択して、当該キャッシュラインに記憶されているデータを読み出し、読み出したデータを暗号処理部1501に出力する。また、キャッシュメモリ管理部80は、選択したキャッシュラインの所有者IDを読み出し、読み出した所有者IDを暗号鍵管理部1502に出力する。
【0072】
暗号鍵管理部1502は、キャッシュメモリ管理部80から出力された所有者IDに対応する暗号鍵を暗号鍵テーブル1504に記憶されているか否かを判定し、記憶されている場合、対応する暗号鍵を読み出し、読み出した暗号鍵を暗号処理部1501に出力する。一方、出力された所有者IDに対応する暗号鍵が記録されていない場合、暗号鍵管理部1502は、暗号鍵を生成して、生成した暗号鍵と、出力された所有者IDとを対応付けて暗号鍵テーブル1504に記憶させると共に、生成した暗号鍵を暗号処理部1501に出力する。
暗号処理部1501は、キャッシュメモリ管理部80から出力されたデータを、暗号鍵管理部1502から出力された暗号鍵により暗号化して、暗号化したデータを外部メモリ1503に記憶させる。
【0073】
例えば、所有者情報付キャッシュメモリ801に、図13に図示する情報が記憶されている場合に、キャッシュライン1101のデータを外部メモリ1503にデータを書き出す処理では、キャッシュメモリ管理部80は、所有者ID(ID_G)を暗号鍵管理部1502に出力すると共に、キャッシュライン1101に記憶されているデータを暗号処理部1501に出力する。暗号鍵管理部1502は、キャッシュメモリ管理部80から出力された所有者ID(ID_G)に対応する暗号鍵を読み出して、暗号処理部1501に出力する。暗号処理部1501は、キャッシュメモリ管理部80から出力されたデータを、暗号鍵管理部1502から出力されたID_Gに対応する暗号鍵により暗号化して、暗号化したデータを外部メモリ1503に出力して記憶させる。
【0074】
<所有者情報付キャッシュメモリ801へのデータの書き込み>
ロード/ストア・ユニット841がアクセスしたデータが、所有者情報付キャッシュメモリ801に記憶されていない場合、当該データを外部メモリ1503から読み出して、所有者情報付キャッシュメモリ801に書き込む動作が行われる。
まず、キャッシュメモリ管理部80は、ロード/ストア・ユニット841がアクセスを要求したアドレスが入力され、入力されたアドレスを共有範囲管理部82と暗号処理部1501に出力する。共有範囲管理部82は、キャッシュメモリ管理部80から出力されたアドレスを含み、かつ、実行中プロセスIDに対応付けられているエントリが共有範囲テーブル821に記憶されているか否かを検索し、記憶されている場合、当該エントリのグループIDをグループID管理部81に出力する。
【0075】
グループID管理部81は、共有範囲管理部82から出力されたグループIDがグループIDテーブル811に記憶されているか検索し、当該グループIDが記録されている場合、当該グループIDに実行中プロセスIDが含まれているか否かを判定する。グループID管理部81は、当該グループIDに実行中プロセスIDが含まれている場合、当該グループIDを暗号鍵管理部1502とキャッシュメモリ管理部80とに出力する。
暗号鍵管理部1502は、グループID管理部81がグループIDを出力した場合、当該グループIDに対応する暗号鍵を暗号鍵テーブル1504から読み出し、グループID管理部がグループIDを出力しない場合、実行中プロセスIDに対応する暗号鍵を暗号鍵テーブル1504から読み出して暗号処理部1501に出力する。
なお、暗号鍵管理部1502は、グループID又は実行中プロセスIDに対応する暗号鍵が暗号鍵テーブル1504に記憶されていない場合、暗号鍵を生成して暗号処理部1501に出力する。
【0076】
暗号処理部1501は、キャッシュメモリ管理部80が出力したアドレスに対応するデータを外部メモリ1503から読み出し、読み出したデータを暗号鍵管理部1502が出力した暗号鍵により復号してキャッシュメモリ管理部80に出力する。キャッシュメモリ管理部80は、復号されたデータを所有者情報付キャッシュメモリ801に出力して記憶させる。
このように、プロセス間で共有するデータについても、データを共有するグループを識別するグループIDで暗号鍵を管理することにより、暗号化したデータであっても共有することができ、データを共有しないプロセスがデータにアクセスすると暗号化したときに用いた暗号鍵と異なる暗号鍵で復号することになるので正しくデータを用いることができない。
上述のように動作することで、プロセッサ800Bは、プロセス間で共有するデータを外部メモリ1503に暗号化して記憶させるので、共有するデータの秘匿性を高くすることが可能になる。
【産業上の利用可能性】
【0077】
本発明によれば、音楽などの著作物データを取り扱う著作権保護機能付きソフトウェアを改ざんして不正にデータのコピーを行う攻撃を防ぐプロセッサといった用途に適用できる。また、情報漏洩防止を目的として暗号化情報を取り扱うソフトウェアを解析して暗号鍵を盗む攻撃を防ぐプロセッサといった用途にも適用可能である。
【符号の説明】
【0078】
1、31…キャッシュメモリ管理部
2…アドレス指定部
3、23…グループID管理部
4…実行中プロセスID管理部
5…共有範囲管理部
6…暗号処理部
7…暗号鍵管理部
8…キャッシュメモリ
9…外部メモリ
100、200、300…キャッシュメモリ制御装置
23A…グループIDキャッシュ部
80…キャッシュメモリ管理部、801…所有者情報付キャッシュメモリ
81、81A…グループID管理部、811…グループIDテーブル
82…共有範囲管理部、821…共有範囲テーブル
83…実行中プロセスID管理部、831…コンテキストスイッチ管理部
84…プロセッサ・コア、841…ロード/ストア・ユニット
842…命令実行ユニット
800、800A、800B…プロセッサ
1401…グループIDキャッシュ
1501…暗号処理部、1502…暗号鍵管理部、1503…外部メモリ
1504…暗号鍵テーブル

【特許請求の範囲】
【請求項1】
データのキャッシュを行うキャッシュメモリのキャッシュラインに、複数のプロセスに対して該キャッシュラインに記憶されているデータへのアクセスを許可する所有者情報を記憶させ、
実行中のプロセスが前記キャッシュラインにアクセスすると、記憶されている前記所有者情報に基づいて、前記実行中のプロセスに対してアクセスを許可するキャッシュメモリ管理部
を備えたことを特徴とするキャッシュメモリ制御装置。
【請求項2】
前記所有者情報は、
前記キャッシュラインに記憶されているデータの所有者である前記プロセスを識別するプロセス識別情報、又は、当該キャッシュラインにアクセスを許されている複数の前記プロセスを含むグループを識別するグループ識別情報である
ことを特徴とする請求項1に記載のキャッシュメモリ制御装置。
【請求項3】
前記データが記憶されたメモリのアドレス範囲と、前記アドレス範囲へのアクセスが許可されたプロセスのグループを識別するグループ識別情報とを対応付けて記憶する共有範囲管理部を備え、
前記キャッシュメモリ管理部は、
実行中プロセスの前記プロセス識別情報が、前記キャッシュラインに対応する前記所有者識別情報と一致するか、あるいは、実行中プロセスの前記プロセス識別情報が、前記キャッシュラインに対応する前記グループ識別情報に含まれている場合、該実行中のプロセスが該キャッシュラインへのアクセスを許可する
ことを特徴とする請求項2に記載のキャッシュメモリ制御装置。
【請求項4】
前記プロセス識別情報、あるいは前記グループ識別情報に対応付けて暗号鍵を記憶する暗号鍵管理部と、
前記キャッシュラインに記憶されているデータの前記メモリへの書き出しを行う処理において、前記キャッシュラインの前記所有者情報に対応する暗号鍵を前記暗号鍵管理部から読み出し、読み出した暗号鍵で前記キャッシュラインのデータを暗号化して前記メモリへの書き出しを行い、
前記メモリに記憶されている暗号化されたデータの前記キャッシュラインへの書き込みを行う処理において、前記データが記憶されている前記メモリが前記共有範囲管理部の前記アドレス範囲に含まれている場合、当該アドレス範囲に対応するグループ識別情報に対応する暗号鍵を前記暗号鍵管理部から読み出し、読み出した暗号鍵で前記データを復号してキャッシュラインへの書き込みを行い、前記アドレス範囲に含まれていない場合、前記実行中プロセスに対応する暗号鍵を前記暗号鍵管理部から読み出し、読み出した暗号鍵で前記データを復号してキャッシュラインへの書き込みを行う暗号処理部と、
を備えたことを特徴とする請求項3に記載のキャッシュメモリ制御装置。
【請求項5】
データのキャッシュを行うキャッシュメモリのキャッシュラインごとに、複数のプロセスに対して該キャッシュラインに記憶されているデータへのアクセスを許可する所有者情報を記憶する過程と、
実行中のプロセスが前記キャッシュラインにアクセスすると、前記キャッシュメモリ管理部に記憶されている前記所有者情報に基づいて、前記実行中のプロセスに対してアクセスを許可する過程と、を有する
ことを特徴とするキャッシュメモリ制御方法。
【請求項6】
前記所有者情報は、
前記キャッシュラインに記憶されているデータの所有者である前記プロセスを識別するプロセス識別情報、又は、当該キャッシュラインにアクセスを許されている複数の前記プロセスを含むグループを識別するグループ識別情報である
ことを特徴とする請求項5に記載のキャッシュメモリ制御方法。
【請求項7】
前記データが記憶されたメモリのアドレス範囲と、前記アドレス範囲へのアクセスが許可されたプロセスのグループを識別するグループ識別情報とを対応付けて共有範囲管理部に記憶させる過程と、
実行中プロセスの前記プロセス識別情報が、前記キャッシュラインに対応する前記所有者識別情報と一致するか、あるいは、実行中プロセスの前記プロセス識別情報が、前記キャッシュラインに対応する前記グループ識別情報に含まれている場合、該実行中のプロセスが該キャッシュラインへのアクセスを許可する過程と、を有する
ことを特徴とする請求項6に記載のキャッシュメモリ制御方法。
【請求項8】
前記プロセス識別情報、あるいは前記グループ識別情報に対応付けて暗号鍵を暗号鍵管理部に記憶させる過程と、
前記キャッシュラインに記憶されているデータの前記メモリへの書き出しを行う処理において、前記キャッシュラインの前記所有者情報に対応する暗号鍵を前記暗号鍵管理部から読み出し、読み出した暗号鍵で前記キャッシュラインのデータを暗号化して前記メモリへの書き出しを行う過程と、
前記メモリに記憶されている暗号化されたデータの前記キャッシュラインへの書き込みを行う処理において、前記データが記憶されている前記メモリが前記共有範囲管理部の前記アドレス範囲に含まれている場合、当該アドレス範囲に対応するグループ識別情報に対応する暗号鍵を前記暗号鍵管理部から読み出し、読み出した暗号鍵で前記データを復号してキャッシュラインへの書き込みを行い、前記アドレス範囲に含まれていない場合、前記実行中プロセスに対応する暗号鍵を前記暗号鍵管理部から読み出し、読み出した暗号鍵で前記データを復号してキャッシュラインへの書き込みを行う過程と、を有する
ことを特徴とする請求項7に記載のキャッシュメモリ制御方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate


【公開番号】特開2010−231623(P2010−231623A)
【公開日】平成22年10月14日(2010.10.14)
【国際特許分類】
【出願番号】特願2009−80051(P2009−80051)
【出願日】平成21年3月27日(2009.3.27)
【出願人】(000004237)日本電気株式会社 (19,353)
【Fターム(参考)】