(57)【要約】【課題】パイプラインにより実行するタスクによって利用される情報を安全に管理することのできるマイクロプロセッサを提供する。【解決手段】パイプラインによりプログラムを実行するマイクロプロセッサであって、複数のユニット１１２１〜１１２５が第１のタスクを実行しているときに、第２のタスクへの切替命令が発行され場合に、第１のタスクの実行が完了した後に、タスクレジスタ１１５の値を第２のタスクを実行するときに利用される第２のレジスタ情報に切り替えるタスクレジスタ管理手段１３１と、第２のレジスタ情報に切り替えた後に、タスク識別情報レジスタ１１４の値を第２のタスク識別子に切り替え、また各ユニット１１２１〜１１２５に対し第２タスクの実行を許可するタスク管理手段１６１とを備えたことを特徴とする。【選択図】        図１
2006023902.tif 000002
【特許請求の範囲】
【請求項１】
パイプライン方式によりタスクを実行するマイクロプロセッサであって、
第１のタスクを実行する複数のユニットと、
前記マイクロプロセッサが前記第１のタスクを識別する第１のタスク識別情報を保持するタスク識別情報レジスタと、
前記複数のユニットが第１のタスクを実行するときに利用する第１のレジスタ情報を保持するタスクレジスタと、
前記複数のユニットのうち命令実行ユニットが前記第１のタスクを実行しているときに第２のタスクへの切替命令が発行された場合に前記第１のタスクを実行しているユニットに既にエントリされている前記第１のタスクの実行が総て完了したことを検出するタスク完了検出手段と、
前記タスク完了検出手段が前記第１のタスクの実行が完了したことを検出した場合に、前記タスクレジスタの値を前記第２のタスクを実行するときに利用する第２のレジスタ情報に切り替えるタスクレジスタ管理手段と、
前記タスクレジスタ管理手段が前記第２のレジスタ情報に切り替えた場合に、前記タスク識別情報レジスタの値を前記第２のタスクを識別する第２のタスク識別情報に切り替え、前記各ユニットに対し前記第２のタスクの実行を許可するタスク管理手段と
を備えたことを特徴とするマイクロプロセッサ。
【請求項２】
前記切替命令が発行されてから前記タスクレジスタ管理手段が前記第２のレジスタ情報への切り替えが完了するまでの間に、前記ユニットに対して命令フェッチの待ち合わせを設定するタスク設定手段をさらに備えたことを特徴とするマイクロプロセッサ。
【請求項３】
前記切替命令が発行されたときに、前記複数のユニットのうち命令を実行する実行ユニットが実行していた前記第１のタスクに対して切替フラグを付与する切替フラグ付与手段をさらに備え、
前記実行ユニットは、前記第１のタスクを当該第１のタスクとともに、前記切替フラグ付与手段によって付与された前記切替フラグを次のユニットに受け渡し、
前記タスク完了検出手段は、前記パイプラインの最終ユニットが前記切替フラグを取得した場合に、前記第１のタスクの実行が完了したことを検出することを特徴とする請求項１または２に記載のマイクロプロセッサ。
【請求項４】
パイプラインによりプログラムを実行するマイクロプロセッサであって、
タスクを実行する複数のユニットと、
各ユニットが実行している前記タスクを識別するタスク識別情報を、対応するユニットを認識可能な形式で保持するタスク識別情報レジスタと、
前記ユニットから所定の処理要求を取得した場合に、前記タスク識別情報レジスタが前記ユニットに対して保持している前記タスク識別情報を特定するタスク識別情報特定手段と、
前記タスク識別情報特定手段が特定した前記タスク識別情報に基づいて、前記処理要求にかかる処理を制御する制御手段と
を備えたことを特徴とするマイクロプロセッサ。
【請求項５】
前記複数のユニットが前記タスクを実行するときに利用するレジスタ情報を保持するタスクレジスタをさらに備え、
前記タスク識別情報特定手段は、前記ユニットから前記レジスタ情報へのアクセス要求を取得した場合に、前記タスク識別情報レジスタが保持している前記ユニットの前記タスク識別情報を特定し、
前記制御手段は、前記タスク識別情報特定手段が特定した前記タスク識別情報に基づいて前記タスクレジスタに保持されている前記レジスタ情報へのアクセスを制御することを特徴とする請求項４に記載のマイクロプロセッサ。
【請求項６】
前記制御手段は、前記タスクレジスタが保持している前記レジスタ情報に対応付けて予め設定されたタスク識別情報以外のタスク識別情報に対応する前記ユニットから前記タスクレジスタへのアクセスを禁止することを特徴とする請求項５に記載のマイクロプロセッサ。
【請求項７】
前記タスクレジスタを複数備え、
前記タスクレジスタが保持する前記レジスタ情報を識別するレジスタ情報識別情報と、前記タスク識別情報とを対応付けて保持するレジスタテーブルをさらに備え、
前記制御手段は、前記レジスタテーブルにおいて前記タスク識別情報に対応付けられた前記レジスタ情報識別情報で識別される前記レジスタ情報以外のレジスタ情報を保持する前記タスクレジスタへのアクセスを禁止することを特徴とする請求項６に記載のマイクロプロセッサ。
【請求項８】
前記レジスタ情報識別情報と前記タスク識別情報をと対応付けて前記レジスタテーブルに設定するレジスタテーブル設定手段をさらに備え、
前記レジスタテーブルは、前記レジスタテーブル設定手段によって設定された前記レジスタ情報識別情報と、前記タスク識別情報とを対応付けて保持することを特徴とする請求項７に記載のマイクロプロセッサ。
【請求項９】
前記複数のユニットが前記タスクを実行するときに利用する情報を保持するメモリをさらに備え、
前記タスク識別情報特定手段は、前記ユニットから前記メモリへのアクセス要求を取得した場合に、前記タスク識別情報レジスタが保持している前記ユニットの前記タスク識別情報を特定し、
前記制御手段は、前記タスク識別情報特定手段が特定した前記タスク識別情報に基づいて前記メモリに保持されている前記メモリ情報へのアクセスを制御することを特徴とする請求項４に記載のマイクロプロセッサ。
【請求項１０】
パイプラインによりプログラムを実行するマイクロプロセッサであって、
タスクを実行する複数のユニットと、
各ユニットが利用するレジスタセットを識別するレジスタ情報識別情報を、対応するユニットを認識可能な形式で保持するレジスタ情報識別情報レジスタと、
前記ユニットから所定の処理要求を取得した場合に、前記レジスタ情報識別情報レジスタが前記ユニットに対して保持している前記レジスタ情報識別情報を特定するレジスタ情報識別情報特定手段と、
前記レジスタ情報識別情報特定手段が特定した前記レジスタ情報識別情報に基づいて、メモリアクセス処理要求にかかる処理を制御する制御手段と
を備えたことを特徴とするマイクロプロセッサ。
【請求項１１】
前記複数のユニットが前記タスクを実行するときに利用する情報を保持するメモリを備え、
前記タスク識別子情報と前記タスクレジスタの対応付けをするタスク識別情報テーブル設定手段と、
レジスタ識別情報とタスク識別情報を対応付けて保持するタスク識別情報テーブルと、
前記ユニットから前記メモリへのアクセス要求を取得した場合に、前記タスク識別情報テーブルにおいて前記レジスタ識別情報に対応付けられた前記タスク識別情報を特定するタスク識別情報特定手段と
をさらに備え、
前記制御手段はタスク識別情報特定手段が特定したタスク識別情報を用いてメモリアクセスを制御することを特徴とする
請求項９に記載のマイクロプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パイプラインによりタスクを実行するマイクロプロセッサに関するものである。
【背景技術】
【０００２】
近年、オープンシステムが普及してきている。オープンシステムにおいては、パーソナルコンピュータ（ＰＣ）などの一般ユーザ向けコンピュータのハードウェアやオペレーティングシステム（ＯＳ）のソースコードが開示されている。エンドユーザは、ソースコード等を利用してオペレーティングプログラムを変更、改良し、所望のプログラムを得ることができる。
【０００３】
その一方で、アプリケーションプログラムが扱う情報の著作権や、プログラム自体の著作権を保護する必要がある。このためには、プログラムの秘密を守る仕組み、すなわちプログラムの改変を防止する仕組みが必要となる。アプリケーションプログラムに対する攻撃としては、ＯＳのプログラムを改変して、アプリケーションプログラムを攻撃することが想定される。従って、ＯＳに対してアプリケーションプログラムに対する攻撃を防ぐための処理を施すだけでは、第三者の侵入を防ぐことは困難である。このため、プログラムの秘密を守ることのできるハードウェアが必要である。一般に、ＯＳを改変することに比べてハードウェアを改変することはエンドユーザにとって極めて困難だからである。
【０００４】
このような特徴を備えたハードウェア、特にマイクロプロセッサとして、耐タンパプロセッサが既に提案されている（例えば、「特許文献１」参照）。耐タンパプロセッサは、マルチタスク環境でプログラムと当該プログラムにおいて利用される情報とを暗号化する機能を備えている。これにより、プログラムや情報が第三者に漏洩したり、プログラム等が改変されたりすることを防止している。
【０００５】
また、近年、命令実行機能を有効活用するために、メモリアクセスの待ち時間が生じたときに別スレッドの命令を実行して空き時間をなくし、スループットを向上させる技術がある。その技術の１つとして、1つの物理プロセッサを２つの仮想プロセッサとして認識させる、ハイパー・スレッディング・テクノロジがある（例えば、「非特許文献１」参照）。
【０００６】
この技術では、命令実行機能は仮想プロセッサ間で共有されるが、レジスタやＴＬＢなど、それぞれに必要な資源はプロセッサ毎に有している。そして、切り替えに応じて適切なものが選択される。また、メモリアクセスの待ち時間中には待ち対象でないスレッドが動作し、それ以外では各スレッドを交互に実行する。
【０００７】
以上の処理を行うために、命令に書かれたレジスタ番号を物理的なレジスタ番号に変更するためのレジスタ・リネーム機能を有している。また、各仮想プロセッサはレジスタをリネームするためのレジスタ・エイリアス・テーブル（ＲＡＴ）を保持している。
【０００８】
【特許文献１】特開２００１−２３０７７０号公報
【非特許文献１】Ｄｅｂｏｒａｈ  Ｔ．  Ｍａｒｒ  ｅｔ  ａｌ．，“ハイパー・スレッディング・テクノロジのアーキテクチャとマイクロアーキテクチャ”, インテル・テクノロジ・ジャーナル (２００２年２月)
【発明の開示】
【発明が解決しようとする課題】
【０００９】
タスクの秘密保護を実現するためには、ある保護タスクの持つリソース、例えば、レジスタやメモリに対して、他のタスクからの不正な参照を禁止する必要がある。例えば、悪意の第三者がＯＳを利用して保護対象のタスクにアクセスすることが可能である。
【００１０】
そこで、従来は、命令実行ユニットは、割り込み／タスク再開命令が発生すると、プロセッサハードウェアにより、割り込み／再開前のタスクのレジスタセットの内容を退避させ、割り込み／再開後のタスクのレジスタセットの内容を復帰させていた。同時に、タスクＩＤレジスタの値を更新する。これにより、他のタスクが保護タスクのレジスタセットの内容やメモリ情報をアクセスすることを禁止することができる。
【００１１】
ところが、高性能プロセッサの多くは、同時に複数の命令が並列処理実行するパイプラインで構成されている。パイプラインにおいては、割り込み／再開前後のそれぞれのタスクに属する命令が混在する期間が生じる。
【００１２】
命令が混在する間に、レジスタの参照や書き換えがあった場合には、保護タスクのレジスタ内容を安全かつ適切に制御することができない。例えば、割り込み直後にレジスタの切り替えを行うと、割り込み前のタスクが割り込み後のタスクのレジスタに対して書き込みを行う場合もある。
【００１３】
また、割り込み直後にタスクＩＤレジスタの値を更新すると、割り込み前のタスクが割り込み後のタスクＩＤレジスタの値を用いてキャッシュアクセスやメモリアクセスを行う場合もある。また、異なるタスクＩＤを用いてキャッシュやメモリにアクセスすることにより、タスクに対応する鍵とは異なる鍵によって暗号・復号された値によって読み出し、書き出しが行われる。
【００１４】
また、タスクに対応したレジスタセットの切替を行う方法としては、ハイパー・スレッディング・テクノロジ等において命令実行機能を有効に活用するために利用されるレジスタ・リネーム機能を利用し、タスク毎にＲＡＴを保持する方法が考えられる。
【００１５】
しかしながら、この技術を利用したとしても、タスクＩＤレジスタがただ１つであるため、割り込み／再開前のタスクと割り込み／再開後のタスクが共存するとき、上記タスクＩＤレジスタの値と、割り込み／再開前か割り込み／再開後のタスクＩＤの値のどちらかに不整合が起きてしまう。それにより、異なるタスクＩＤレジスタを用いたキャッシュアクセスの制御やメモリアクセスを防ぐことができないという問題があった。
【００１６】
本発明は、上記に鑑みてなされたものであって、パイプラインによりタスクを実行するマイクロプロセッサにおいてタスクに関連する情報のセキュリティを向上させることを目的とする。
【課題を解決するための手段】
【００１７】
上述した課題を解決し、目的を達成するために、本発明は、パイプライン方式によりタスクを実行するマイクロプロセッサであって、第１のタスクを実行する複数のユニットと、前記マイクロプロセッサが前記第１のタスクを識別する第１のタスク識別情報を保持するタスク識別情報レジスタと、前記複数のユニットが第１のタスクを実行するときに利用する第１のレジスタ情報を保持するタスクレジスタと、前記複数のユニットのうち命令実行ユニットが前記第１のタスクを実行しているときに第２のタスクへの切替命令が発行された場合に、前記第１のタスクを実行しているユニットに既にエントリされている前記第１のタスクの実行が総て完了したことを検出するタスク完了検出手段と、前記タスク完了検出手段が前記第１のタスクの実行が完了したことを検出した場合に、前記タスクレジスタの値を、前記第２のタスクを実行するときに利用する第２のレジスタ情報に切り替えるタスクレジスタ管理手段と、前記タスクレジスタ管理手段が前記第２のレジスタ情報に切り替えた場合に、前記タスク識別情報レジスタの値を、前記第２のタスクを識別する第２のタスク識別情報に切り替え、前記各ユニットに対し前記第２のタスクの実行を許可するタスク管理手段とを備えたことを特徴とする。
【００１８】
また、本発明は、パイプラインによりプログラムを実行するマイクロプロセッサであって、タスクを実行する複数のユニットと、各ユニットが実行している前記タスクを識別するタスク識別情報を、対応するユニットを認識可能な形式で保持するタスク識別情報レジスタと、前記ユニットから所定の処理要求を取得した場合に、前記タスク識別情報レジスタが前記ユニットに対して保持している前記タスク識別情報を特定するタスク識別情報特定手段と、前記タスク識別情報特定手段が特定した前記タスク識別情報に基づいて、前記処理要求にかかる処理を制御する制御手段とを備えたことを特徴とする。
【００１９】
また、本発明は、パイプラインによりプログラムを実行するマイクロプロセッサであって、タスクを実行する複数のユニットと、各ユニットが利用するレジスタセットを識別するレジスタ情報識別情報を、対応するユニットを認識可能な形式で保持するレジスタ情報識別情報レジスタと、前記ユニットから所定の処理要求を取得した場合に、前記レジスタ情報識別情報レジスタが前記ユニットに対して保持している前記レジスタ情報識別情報を特定するレジスタ情報識別情報特定手段と、前記レジスタ情報識別情報特定手段が特定した前記レジスタ情報識別情報に基づいて、メモリアクセス処理要求にかかる処理を制御する制御手段とを備えたことを特徴とする。
【発明の効果】
【００２０】
本発明にかかるマイクロプロセッサにおいては、タスク完了検出手段は、複数のユニットのうち命令実行ユニットが第１のタスクを実行しているときに第２のタスクへの切替命令が発行された場合に、第１のタスクを実行しているユニットに既にエントリされている第１のタスクの実行が総て完了したことを検出し、タスクレジスタ管理手段は、
タスク完了検出手段が前記第１のタスクの実行が完了したことを検出した場合に、第１のタスクを実行するときに利用していた前記第１のレジスタ情報と、前記第２のタスクを実行するときに利用する第２のレジスタ情報とを切り替え、タスク管理手段は、タスクレジスタ管理手段が第２のレジスタ情報に切り替えた後に、第１のタスク識別情報と、第２のタスクを識別する第２のタスク識別情報とを切り替え、各ユニットに対し第２のタスクの実行を許可するので、第１のタスクと第２のタスクが同時にいずれかのユニットにエントリされることがなく、所定のタスクが、他のタスクにおいて利用される情報にアクセスするのを防止することができ、タスクが利用すべき情報のセキュリティを向上させることができるという効果を奏する。
【発明を実施するための最良の形態】
【００２１】
以下に、本発明にかかるマイクロプロセッサの実施の形態を図面に基づいて詳細に説明する。なお、この実施の形態によりこの発明が限定されるものではない。
【００２２】
（実施の形態１）
図１は、実施の形態１のマイクロプロセッサの全体構成を示す図である。図１は、本実施の形態にかかるシステム全体を示す図である。プロセッサ１０１は、プロセッサコア１１１と、キャッシュコントローラ１２１と、セキュアコンテキストスイッチ部１３１と、バスインターフェースユニット（ＢＩＵ）１４１と、タスク管理部１６１とを備えている。
【００２３】
ＢＩＵ１４１は、鍵テーブル１４２と暗号復号器１４３とを有している。ＢＩＵ１４１は、キャッシュコントローラ１２１からタスクＩＤとアクセス種別を取得する。ここで、タスクＩＤとは、プロセッサコア１１１が実行すべきタスクを識別する識別情報である。また、アクセス種別とは、アクセスする対象の情報がプログラムであるかデータであるかを識別する識別情報である。
【００２４】
図２は、鍵テーブル１４２のデータ構成を模式的に示している。鍵テーブル１４２は、タスクＩＤに対応付けて、プログラム、データ、コンテキストをそれぞれ暗号・復号するための暗号復号鍵であるプログラム鍵、データ鍵、コンテキスト鍵を保持している。
【００２５】
ＢＩＵ１４１は、鍵テーブル１４２を利用して、キャッシュコントローラ１２１から取得したタスクＩＤおよびアクセス種別から暗号復号鍵を選択する。そして、選択した暗号復号鍵を利用して、対象となるプログラムまたはデータを暗号化又は復号化する。そして、復号化した命令またはデータをキャッシュコントローラ１２１に出力する。
【００２６】
キャッシュコントローラ１２１は、命令キャッシュ１２２とデータキャッシュ１２３を有している。キャッシュコントローラ１２１は、プロセッサコア１１１からの命令によりＢＩＵ１４１を介して命令またはデータを取得する。
【００２７】
命令キャッシュ１２２は、ＢＩＵ１４１から取得した平文の命令を保持している。図３は、命令キャッシュ１２２のデータ構成を模式的に示している。命令キャッシュ１２２は、命令に対応付けて、タスクＩＤタグと、アドレスタグとを保持している。タスクＩＤタグは、当該命令の復号化にかかるタスクの識別情報である。また、アドレスタグは、当該命令の格納されているアドレスを示す情報である。命令キャッシュ１２２はまた、アドレスや、タスクＩＤに基づいて、各命令へのアクセスを制御する。
【００２８】
データキャッシュ１２３は、ＢＩＵ１４１から取得した平文のデータに対応するタスクＩＤを保持している。データキャッシュ１２３のデータ構成は、図３を参照しつつ説明した命令キャッシュ１２２のデータ構成と同様である。データキャッシュ１２３はまた、アドレスやタスクＩＤに基づいて、各データへのアクセスを制御する。
【００２９】
説明を図１に戻す。プロセッサコア１１１は、５段パイプライン１１２と命令実行同期機能１１６と、カレントタスクＩＤレジスタ１１４と、レジスタセット１１５とを有している。
【００３０】
カレントタスクＩＤレジスタ１１４は、５段パイプライン１１２において実行されているタスクの識別情報を保持する。レジスタセット１１５は、５段パイプライン１１２において実行されているタスクが利用すべき情報を保持している。ここで、カレントタスクＩＤレジスタ１１４は、特許請求の範囲に記載のタスク識別情報レジスタに相当する。また、レジスタセット１１５は、特許請求の範囲に記載のタスクレジスタに相当する。
【００３１】
５段パイプライン１１２は、プログラムカウンタ（ＰＣ）１１２０と、命令フェッチユニット（ＩＦＵ）１１２１と、デコードユニット（ＤＥＣ）１１２２と、実行ユニット（ＥＸＵ）１１２３と、メモリアクセスユニット（ＭＥＭ）１１２４と、レジスタ書込ユニット（ＷＢＵ）１１２５とを有している。さらに、５段パイプライン１１２は、ＥＸＵ切替フラグレジスタ１１３３と、ＭＥＭ切替フラグレジスタ１１３４と、ＷＢＵ切替フラグレジスタ１１３５とを有している。５段パイプライン１１２は、キャッシュコントローラ１２１から命令を取得し、取得した命令を実行する。
【００３２】
プログラムカウンタ１１２０は、命令フェッチ先のアドレスを保持する。命令フェッチユニット１１２１は、命令フェッチを行う。デコードユニット１１２２は、命令のデコードを行う。実行ユニット１１２３は、デコードユニット１１２２によってデコードされた命令を実行する。メモリアクセスユニット１１２４は、キャッシュコントローラ１２１にアクセスし、データを読み書きする。レジスタ書込ユニット１１２５は、レジスタセット１１５にデータを書き込む。
【００３３】
ＥＸＵ切替フラグレジスタ１１３３、ＭＥＭ切替フラグレジスタ１１３４、およびＷＢＵ切替フラグレジスタ１１３５には、それぞれパイプラインの各ユニット１１２３，１１２４，１１２５が実行しているタスクに対応する切替フラグが設定される。切替フラグは、「０」および「１」の２つの値をとる。切替フラグ「１」は、タスク切替がされた場合における切替前の最後の命令であることを示す。
【００３４】
例えば、ＥＸＵ切替フラグレジスタ１１３３は、割り込み時およびタスク再開時に切替フラグ「１」が設定される。そして、ＥＸＵ切替フラグレジスタ１１３３に設定された切替フラグの内容がパイプラインに連動して、ＭＥＭ切替フラグレジスタ１１３４およびＷＢＵ切替フラグレジスタ１１３５に伝達される。すなわち、ＷＢＵ切替フラグレジスタ１１３５の切替フラグが「１」か否かによって、割り込み前のタスクが完了したか否かを判断することができる。
【００３５】
図４は、命令実行同期機能１１６が保持する状態遷移図である。命令実行同期機能１１６は、ＩＤＬＥ状態４１１、ＷＡＩＴ１状態４１２およびＷＡＩＴ２状態４１３の間を遷移する。命令実行同期機能１１６は、各状態において各ユニットの同期を取る。
【００３６】
割り込みの発生またはタスク再開命令が発行されると、命令実行同期機能１１６は、ＩＤＬＥ状態４１１からＷＡＩＴ１状態４１２に移行する。この場合、命令フェッチユニット１１２１に対して命令フェッチの待ち合わせを要求する。すなわち、割り込みまたはタスク再開命令にかかるタスクの読込みを禁止する。
【００３７】
また、命令実行同期機能１１６は、タスク実行完了通知を受けると、ＷＡＩＴ１状態４１２からＷＡＩＴ２状態４１３に移行する。この場合、レジスタセット１１５の値を切り替えるべくレジスタ切替要求をセキュアコンテキストスイッチ部１３１に出力する。
【００３８】
また、命令実行同期機能１１６は、タスク切替完了通知を受けると、ＷＡＩＴ２状態４１３からＩＤＬＥ状態４１１に移行する。この場合、命令フェッチユニット１１２１に対して命令フェッチの待ち合わせ要求を停止する。そして、タスク管理部１６１は、切り替え後のタスクのタスクＩＤをカレントタスクＩＤレジスタ１１４に設定する。
【００３９】
なお、本実施の形態にかかる命令実行同期機能１１６とＷＢＵ切替フラグレジスタ１１３５は、特許請求の範囲に記載のタスク完了検出手段に相当する。すなわち、命令実行同期機能１１６とＷＢＵ切替フラグレジスタ１１３５は、協働して、特許請求の範囲に記載のタスク完了検出手段の処理を行う。
【００４０】
セキュアコンテキストスイッチ部１３１は、コンテキストを保持するためのコンテキストバッファ１３２とレジスタセット１１５の間の制御を行うコンテキスト制御部１３３を有する。コンテキスト制御部１３３は、命令実行同期機能１１６のレジスタ切り替え要求により、プロセッサコア１１１にあるレジスタセット１１５を読み出してコンテキストバッファ１３２に保持させる。また、割り込み／復帰後のタスクに対応したコンテキストをコンテキストバッファ１３２からプロセッサコア１１１にあるレジスタセット１１５に復帰させる。ここで、本実施の形態にかかるセキュアコンテキストスイッチ部１３１は、特許請求の範囲に記載のタスクレジスタ管理手段に相当する。
【００４１】
タスク管理部１６１は、プロセッサコア１１１が実行しているタスクを管理する。タスク管理部１６１は、レジスタの内容を切り替えが完了した場合に、カレントタスクＩＤレジスタ１１４にタスクＩＤを設定する。ここで、本実施の形態にかかるタスク管理部１６１は、特許請求の範囲に記載のタスク管理手段に相当する。
【００４２】
以下、５段パイプライン１１２において保護タスク１が実行されているときに、割り込み処理が発生した場合のプロセッサ１０１の処理について説明する。
【００４３】
図５は、５段パイプライン１１２が保護タスク１を実行している様子を模式的に示している。図中の左側には各時刻におけるプログラムカウンタ１１２０の値、カレントタスクＩＤレジスタ１１４の値、命令実行同期機能１１６の状態を示している。
【００４４】
まず、プロセッサコア１１１は、初期化処理において命令実行同期機能１１６の状態をＩＤＬＥ状態４１１にする。次に、保護タスク１の実行開始時に、タスク管理部１６１はカレントタスクＩＤレジスタ１１４に「１」を、プログラムカウンタ１１２０に開始アドレスを設定する。ここで、タスクＩＤ「１」は、保護タスク１を識別するタスクＩＤである。
【００４５】
図３に示す時刻ｔ１においては、プログラムカウンタ１１２０はアドレスＥに、カレントタスクＩＤレジスタの値は「１」になっている。命令フェッチユニット１１２１は、プログラムカウンタ１１２０の値とカレントタスクＩＤレジスタ１１４を参照し、アドレスＥにある保護タスク１の命令の読出要求をキャッシュコントローラ１２１に送る(ステップＳ２１１１)。
【００４６】
また、デコードユニット１１２２は、読み出したアドレスＤの命令を解読する(ステップＳ２１１２)。実行ユニット１１２３は、アドレスＣに対応する保護タスク１の命令を実行する(ステップＳ２１１３)。メモリアクセスユニット１１２４は、アドレスＢに対応する保護タスク１の命令によってメモリアクセスを実行する(ステップＳ２１１４)。
【００４７】
レジスタ書込ユニット１１２５は、アドレスＡに対応する保護タスク１の命令によりレジスタセット１１５に対し、情報を書き込む。このように、パイプラインの最終ユニットであるレジスタ書込ユニット１１２５の処理が完了すると、アドレスＡに対応する保護タスク１の実行が完了する(ステップＳ２１１５)。
【００４８】
時刻ｔ２においては、プログラムカウンタ１１２０がアドレスＦに変わる。そして、命令フェッチユニット１１２１は、アドレスＦにある保護タスクの命令を読み出す(ステップＳ２１２１)。デコードユニット１１２２、実行ユニット１１２３、メモリアクセスユニット１１２４はそれぞれ実行し、各命令はパイプラインの次のステージに移る(ステップＳ２１２２〜ステップＳ２１２４)。レジスタ書込ユニット１１２５は、アドレスＢに対応する保護タスク１の命令の実行を完了する(ステップＳ２１２５)。同様に、時刻ｔ３以降において各ユニットはプログラムカウンタに設定された値にしたがってタスクを実行していく。
【００４９】
図６は、図５を参照しつつ説明した時刻ｔ３における処理が開始する前に、何らかの要因により割り込みが発生した場合に、５段パイプライン１１２がタスクを実行する様子を模式的に示している。割り込み前に実行されていた保護タスク１を前タスクと称す。また、割り込みに係るタスクを後タスクと称す。
【００５０】
この場合、５段パイプライン１１２は、時刻ｔ３において、プログラムカウンタ１１２０にＯＳの割込みハンドラの先頭アドレスＸを設定する。そして、プロセッサコア１１１は、命令フェッチユニット１１２１とデコードユニット１１２２に設定されている命令を無効にする(ステップＳ２２３１、ステップＳ２２３２)。
【００５１】
さらに、実行ユニット１１２３に対応するＥＸＵ切替フラグレジスタ１１３３に「１」をセットする(ステップＳ２２３３)。切替フラグ「１」は、前タスクにおける最後の命令であることを示す。また、切替フラグ「１」は、パイプラインと連動し、メモリアクセスユニット１１２４、レジスタ書込ユニット１１２５に移行する。
【００５２】
ここで、割り込みが発生した場合の、５段パイプライン１１２、命令実行同期機能１１６、セキュアコンテキストスイッチ部１３１、およびキャッシュコントローラ１２１の処理について説明する。図７は、割り込みが発生した場合の、５段パイプライン１１２、命令実行同期機能１１６、セキュアコンテキストスイッチ部１３１、およびキャッシュコントローラ１２１の処理を示すフローチャートである。
【００５３】
５段パイプライン１１２は、割り込みが発生すると、命令実行同期機能１１６に対して割込み発生を通知する(ステップＳ３００）。命令実行同期機能１１６は、図４にしたがってＩＤＬＥ状態４１１からＷＡＩＴ１状態４１２に移行する(ステップＳ３０２)。次に、命令フェッチユニット１１２１に対して命令フェッチの待ち合わせを要求する(ステップＳ３０４)。命令フェッチの待ち合わせ要求はＩＤＬＥ状態４１１に戻るまで行われる。
【００５４】
なお、割込み発生の通知と同時に、タスク管理部１６１は、プログラムカウンタ１１２０を更新し、命令フェッチユニット１１２１は後タスクへの命令フェッチ要求を行おうとする。しかし、５段パイプライン１１２は、ステップＳ３０４における命令実行同期機能１１６の命令フェッチの待ち合わせ要求を取得しているため、命令フェッチ待ち状態となる。
【００５５】
命令フェッチ待ち合わせ要求により、後タスクへの命令フェッチができないため、図６の時刻ｔ３において、命令フェッチユニット１１２１はプログラムカウンタ１１２０を進めずにパイプラインにはＮＵＬＬ命令を埋めて、パイプラインに残っている前タスクの命令を実行する(ステップＳ２２３１，ステップＳ２２４１，ステップＳ２２５１)。ここで、ＮＵＬＬ命令は、実行してもレジスタやメモリへの影響を与えない命令である。
【００５６】
図７において、５段パイプライン１１２に残っている前タスクがデータストア命令の場合、タスクＩＤ「１」を指定してデータＤ１のメモリ書込要求をキャッシュコントローラ１２１に送る(ステップＳ３１０)。キャッシュコントローラ１２１はデータをデータキャッシュ１２３内に書き込むとプロセッサコア１１１に対してＡＣＫを返す(ステップＳ３１２)。
【００５７】
図６の時刻ｔ５において、切替フラグ「１」に対応する命令がレジスタ書込ユニット１１２５に到達する。これにより、前タスクの実行が完了し、レジスタセット１１５の切替が可能になる(ステップＳ２２５１〜ステップＳ２２５５)。
【００５８】
このとき、図７において５段パイプライン１１２は、命令実行同期機能１１６に対して前タスク実行完了通知を送る(ステップＳ３２０)。命令実行同期機能１１６は、図４にしたがってＷＡＩＴ１状態４１２からＷＡＩＴ２状態４１３に移行する(ステップＳ３２２)。そして、セキュアコンテキストスイッチ部１３１に対して、レジスタ切替要求を送る(ステップＳ３２４)。
【００５９】
セキュアコンテキストスイッチ部１３１は、レジスタセット１１５から値を読み出しコンテキストバッファ１３２にレジスタを退避させる。または、暗号化して外部メモリ１０２にレジスタを退避させる。さらに、外部メモリ１０２から読み出し復号化したコンテキストやコンテキストバッファ１３２から読み出したコンテキストをレジスタセット１１５に復帰させる(ステップＳ３２６)。
【００６０】
レジスタの値の切り替えが完了すると、命令実行同期機能１１６に対して、レジスタ切り替え完了通知を行う(ステップＳ３２８)。命令実行同期機能１１６は、図４にしたがってＷＡＩＴ２状態４１３からＩＤＬＥ状態４１１に移行する(ステップＳ３３０)。さらに、命令フェッチユニット１１２１に対して命令フェッチの待ち合わせ要求を停止する(ステップＳ３３２)。また、このときタスク管理部１６１はカレントタスクＩＤレジスタ１１４に「０」を設定する。ここで、タスクＩＤ「０」は、割り込みにかかるタスク、すなわち、後タスクのタスクＩＤである。
【００６１】
図６の時刻ｔ６に示すように、命令フェッチユニット１１２１は、命令フェッチの待ち合わせ要求がある間は、ＮＵＬＬ命令を設定し続ける(ステップＳ２２６１〜ステップＳ２２６５)。そして、切替完了通知が発行され、命令フェッチの待ち合わせ要求がなくなると、図６の時刻ｔ７に示すように、命令フェッチユニット１１２１はカレントタスクＩＤ「０」を指定し、アドレスＸに対応する命令読出要求を命令実行同期機能１１６に送る(ステップＳ２２７１〜ステップＳ２２７５)。
【００６２】
命令フェッチユニット１１２１がアドレスＸに対する命令読出要求を出力すると図７に示すように、命令実行同期機能１１６は、５段パイプライン１１２から命令フェッチ要求を受け取り(ステップＳ３４０)、キャッシュコントローラ１２１に対して命令読出要求を送る(ステップＳ３４２)。キャッシュコントローラ１２１は、キャッシュ内にアドレスＸに命令がなければ、外部メモリ１０２からＢＩＵ１４１を経由して平文のまま命令を読み出し、キャッシュに書き込む。キャッシュコントローラ１２１はキャッシュから読み出した命令をプロセッサコア５１１内部に送る(ステップＳ３４４)。以上で、割込処理が完了する。
【００６３】
このように、本実施の形態にかかるプロセッサコア１１１は、割込み割り込み前にすでに５段パイプライン１１２に登録されていた前タスクの実行が完了し、前タスクのレジスタ情報と後タスクのレジスタ情報を切り替えるまで、後タスクの命令フェッチを待ち合わせる。これにより、他タスクからのレジスタアクセスを防止する。
また、レジスタ情報の切り替え完了と同時に、カレントタスクＩＤを切り替える。これにより、タスクに対応したタスクＩＤによるキャッシュアクセスを行えるため、キャッシュコントローラ１２１によるアクセス制御が有効に機能する。
したがって、保護対象となっているタスクのレジスタ情報やメモリ領域を、ＯＳやタスクから保護することができる。
【００６４】
また、割り込み要求に対するレジスタの値やカレントタスクＩＤの切替等の処理を総てハードウェアによって実行するので、第三者がＯＳを介してレジスタ情報やメモリ情報等を読み書きするの防止することができる。
【００６５】
図６および図７を参照しつつ、割り込みが発生した場合の処理について説明したが、割り込みからタスクの再開命令が発行された場合の復帰処理も、図６を参照しつつ説明した処理と同様である。
【００６６】
なお、実施の形態１においては、５段パイプライン１１２が５段のパイプラインを有する場合について説明したが、パイプラインの段数は、これに限定されるものではなく、５段よりも多くともよく、また少なくともよい。
【００６７】
また、実施の形態１においては、プロセッサコア１１１は、１つのレジスタセット１１５を有したが、これにかえてレジスタセット１１５を複数有してもよい。複数のレジスタセット１１５を有する場合には、あらかじめ切替後の後タスクのレジスタ値を別のレジスタセットに復帰させておき、切替前に実行されている前タスク実行完了後にレジスタセットを切り替えてもよい。これにより、タスク切り替え中のレジスタの退避、復帰する必要がなくなる。したがって、レジスタセットの退避、復帰によるストール時間を軽減できる。
【００６８】
（実施の形態２）
次に実施の形態２にかかるプロセッサ１０１について説明する。図８は、実施の形態２にかかるプロセッサコア５１１の構成を示すブロック図である。
【００６９】
プロセッサコア５１１は、５段パイプライン５１２と、第１レジスタセット５１５１と、第２レジスタセット５１５２と、レジスタアクセス制御機能５１６と、レジスタセットテーブル５１４とを有している。
【００７０】
５段パイプライン５１２は、命令フェッチ先のアドレスを保持するプログラムカウンタ５１２０と、命令フェッチユニット５１２１と、デコードユニット５１２２と、実行ユニット５１２３と、メモリアクセスユニット５１２４と、レジスタ書込ユニット５１２５とを有している。また、各ユニット５１２１〜５１２５は、タスクＩＤレジスタ５１３１〜５１３５を有している。タスクＩＤレジスタ５１３１〜５１３５は、各ユニット５１２１〜５１２５が実行しているタスクの識別情報を保持している。
【００７１】
ここで、本実施の形態にかかるタスクＩＤレジスタは、特許請求の範囲にかかるタスク識別情報レジスタに相当する。また、本実施の形態にかかるレジスタアクセス制御機能５１６は、特許請求の範囲に記載のタスク識別情報特定手段および制御手段に相当する。また、本実施の形態にかかるキャッシュコントローラ１２１は、特許請求の範囲に記載のタスク識別情報特定手段および制御手段に相当する。
【００７２】
各ユニット５１２１〜５１２５は、それぞれバス７１１〜７１５によってレジスタアクセス制御機能５１６に接続している。また、命令フェッチユニット５１２１とメモリアクセスユニット５１２４は、それぞれバス７２０，７２２によってキャッシュコントローラ１２１に接続している。
【００７３】
レジスタセットテーブル５１４は、タスクＩＤとレジスタＩＤとを対応付けて保持している。ここで、レジスタＩＤとは、レジスタセットを識別する識別情報である。本実施の形態におけるレジスタセットテーブル５１４には、第１レジスタセット５１５１を識別するレジスタＩＤ「１」がタスクＩＤ「０」に対応付けられている。また第２レジスタセット５１５２を識別するレジスタＩＤ「２」がタスクＩＤ「１」に対応付けられている。
【００７４】
レジスタアクセス制御機能５１６は、レジスタセットテーブル５１４を利用して、各ユニット５１２１〜５１２５から第１レジスタセット５１５１および第２レジスタセット５１５２へのアクセスを制御する。具体的には、アクセス制御機能５１６は、５段パイプライン５１２の各ユニット５１２１〜５１２５から第１レジスタセット５１５１および第２レジスタセット５１５２へのアクセス要求を受け取る。そして、アクセス要求の要求元のユニットのタスクＩＤレジスタに保持されているタスクＩＤを特定する。
【００７５】
さらに、レジスタセットテーブル５１４において、タスクＩＤに対応付けられているレジスタＩＤを特定する。そして、アクセス要求元から特定したレジスタＩＤへのアクセスを許可する。また、レジスタセットテーブル５１４において対応付けられていないレジスタセットへのアクセスを禁止する。
【００７６】
これにより、複数のユニットにおいて、異なるタスクが実行されている場合であっても、各タスクから対応するレジスタセット以外のレジスタセットへのアクセスを禁止することができる。
【００７７】
以下、５段パイプライン５１２において保護タスク１が実行されているときに、割り込み処理が発生した場合のプロセッサ１０１の処理について説明する。ここで、保護タスク１、すなわち前タスクのタスクＩＤを「１」、割り込みにかかる後タスクのタスクＩＤを「０」とする。割り込みにかかる後タスクは、ＯＳによるタスクであるものとする。
【００７８】
図９は、プロセッサコア５１１が第１保護タスクを実行している様子を模式的に示している。図中の左側には各時刻におけるプログラムカウンタ５１２０の値を示している。
【００７９】
プロセッサコア５１１は、まずレジスタセットテーブル５１４にＯＳや平文に対応するタスクＩＤ「０」と第１レジスタセット５１５１を識別するレジスタＩＤ「１」を登録しておく。
【００８０】
保護タスク実行開始時に、タスク管理部１６１は命令フェッチユニット５１２１のタスクＩＤレジスタ５１３１に「１」を設定する。また、レジスタセットテーブル５１４に、タスクＩＤ「１」と第２レジスタセット５１５２を識別するレジスタＩＤ「２」を登録する。
【００８１】
図９に示す時刻１０においては、命令フェッチユニット５１２１は、プログラムカウンタ５１２０の値を参照し、アドレスＥにある保護タスク１の命令の読出要求をキャッシュコントローラ１２１に送る(ステップＳ６１１１)。
【００８２】
以下、ステップＳ６１１２〜ステップＳ６１１５において各ユニット５１２２〜５１２５が行う処理は、実施の形態１において図５を参照しつつ説明した時刻ｔ１における各ユニット１１２２〜１１２５の処理と同様である。
【００８３】
ステップＳ６１１１において、命令フェッチユニット５１２１は、保護タスク１を実行する場合アドレスＥと命令フェッチユニット５１２１のタスクＩＤレジスタ５１３１が保持している保護タスク１のタスクＩＤ「１」を用いてキャッシュコントローラ１２１に命令フェッチを要求する。
【００８４】
キャッシュコントローラ１２１は、アドレスＥ、タスクＩＤ「１」に対応する命令を命令キャッシュ１２２または外部メモリ１０２から取得する。そして、取得した命令をプロセッサコア５１１に送る(ステップＳ６１１１，ステップＳ６１２１)。
【００８５】
読み出した命令とタスクＩＤは、パイプライン上で同期している。例えば、命令キャッシュ１２２から読み出した命令は、命令フェッチユニット５１２１に保持され、当該命令に対応するタスクＩＤは、命令フェッチユニット５１２１のタスクＩＤレジスタ５１３１に保持される。そして、当該命令がデコードユニット５１２２に移行すると、当該命令に対応するタスクＩＤもデコードユニット５１２２のタスクＩＤレジスタ５１３２に移行する。
【００８６】
各ユニット５１２１〜５１２５がレジスタセット５１５１，５１５２にアクセスするときは、各ユニット５１２１〜５１２５のタスクＩＤレジスタ５１３１〜５１３５の値を用いてレジスタアクセス制御機能５１６にアクセス要求を行う。
【００８７】
レジスタアクセス制御機能５１６は、レジスタセットテーブル５１４とタスクＩＤから対応するレジスタセットを選択する。すなわち、第１レジスタセット５１５１または第２レジスタセット５１５２を選択する。そして、レジスタアクセス制御機能５１６は、選択したレジスタセット５１５１，５１５２にアクセス要求を行う。
【００８８】
具体的には、例えば、時刻ｔ１０においては、レジスタアクセス制御機能５１６は、デコードユニット５１２２からのアクセス要求に対してはデコードユニットにあるタスクＩＤレジスタ５１３２の値に従ってレジスタセット５１５１または５１５２にアクセス要求を行う(ステップＳ６１１２)。また、レジスタアクセス制御機能５１６は、レジスタ書込ユニット５１２５からのアクセス要求に対してはレジスタ書き込みユニットにあるタスクＩＤレジスタ５１３５の値に従ってレジスタセット５１５１または５１５２にアクセス要求を行う(ステップＳ６１１５)。
【００８９】
このように、５段パイプライン５１２の各ユニット５１２１〜５１２５は、それぞれタスクＩＤレジスタ５１３１〜５１３５の値を用いてレジスタアクセス制御機能５１６へアクセスする。したがって、５段パイプライン５１２に異なるタスクが存在しているときに異なるタスクから同時にレジスタアクセスが発生した場合であっても、各タスクに対応したレジスタセット５１５１，５１５２にアクセスすることができる。したがって、各タスクがアクセスを許可されていないレジスタセットにアクセスするのを防止することができる。
【００９０】
また、各ユニット５１２１〜５１２５がキャッシュコントローラ１２１にアクセスするときは、各ユニット５１２１〜５１２５のタスクＩＤレジスタ５１３１〜５１３５の値を通知して、アクセス要求を行う。
【００９１】
具体的には、例えば時刻ｔ１０においては、メモリアクセスユニット５１２４は、メモリアクセスユニットにあるタスクＩＤ「１」を通知してキャッシュコントローラ１２１にアクセス要求を行う(ステップＳ６１１４)。
このように、５段パイプライン５１２の各ユニット５１２１〜５１２５は、それぞれタスクＩＤレジスタ５１３１〜５１３５の値を用いてキャッシュメモリへアクセスする。したがって、５段パイプライン５１２に異なるタスクが存在しているときに異なるタスクから同時にメモリアクセスが発生した場合であっても、キャッシュコントローラ１２１は各タスクに対応したタスク識別子を用いたアクセス制御することができる。したがって、各タスクがアクセスを許可されていないキャッシュメモリの平文データにアクセスするのを防止することができる。
【００９２】
以上のように、保護タスク１を実行している間は、各ユニット５１２１〜５１２５のタスクＩＤレジスタ５１３１〜５１３５は、保護タスク１のタスクＩＤ「１」を保持している。そして、レジスタセットテーブル５１４においてタスクＩＤ「１」に対応付けられている第１レジスタセット５１５１に対するアクセスが許可される。
【００９３】
また、命令フェッチユニット５１２１およびメモリアクセスユニット５１２４は、タスクＩＤ「１」を指定して、メモリアクセスを行う。例えば、時刻ｔ１０においては、命令フェッチユニット５１２１は、バス７２０を介してキャッシュコントローラ１２１に対して、タスクＩＤ「１」を指定して、アドレスＥにデータの読出要求を行う(ステップＳ６１１１)。
【００９４】
また、メモリアクセスユニット５１２４は、バス７２２を介してキャッシュコントローラ１２１に対してタスクＩＤ「１」を指定してアドレスＢのアクセス要求を行う(ステップＳ６１１４)。
【００９５】
いずれの場合も、キャッシュコントローラ１２１においてアクセス要求が示すアドレスにタスクＩＤ「１」が対応付けられている場合には、対応するデータが読み出される。なお、アクセス要求が示すアドレスに、指定されたタスクＩＤが対応付けられていない場合には、かかるデータのアクセスを禁止する。このように、タスクＩＤに基づいて、各ユニットからのデータのアクセスが制限される。
【００９６】
図１０は、図９を参照しつつ説明した時刻ｔ１２における処理が開始する前に、何らかの要因により割り込みが発生した場合に、５段パイプライン１１２がタスクを実行する様子を模式的に示している。このとき、５段パイプライン５１２は、命令フェッチユニット５１２１、デコードユニット５１２２の命令を無効にする(ステップＳ６２３１,ステップＳ６２３２)。さらに、タスク管理部１６１は、命令フェッチユニット５１２１のタスクＩＤレジスタ５１３１にタスクＩＤ「０」を設定する。
【００９７】
図１１は、図１０のステップＳ６２５２においてデコードユニット５１２２がレジスタアクセス制御機能５１６に対してレジスタへの読出要求を行う場合の処理を示すフローチャートである。この場合、デコードユニット５１２２ではＯＳタスクの命令が実行されており、そのユニットにあるタスクＩＤレジスタ５１３２は「０」に設定されている。そのため、デコードユニット５１２２は、バス７１２を介してタスクＩＤ「０」を指定してレジスタアクセス制御機能５１６に対してレジスタアクセス要求を送る(ステップＳ７００)。
【００９８】
レジスタアクセス制御機能５１６は、レジスタアクセス要求を取得すると、レジスタセットテーブル５１４において、レジスタアクセス要求に含まれるタスクＩＤ「０」に対応するレジスタを特定する。すなわち、第１レジスタセット５１５１を選択する。そして、第１レジスタセット５１５１に対して読出要求を行う(ステップＳ７０２)。レジスタアクセス制御機能５１６は、第１レジスタセット５１５１からレジスタ情報を取得すると(ステップＳ７０４)、レジスタ情報をデコードユニット５１２２に送る(ステップＳ７０６)。
【００９９】
図１２は、図１０の時刻ｔ１３におけるステップＳ６２４５において、レジスタ書き込みユニット５１２５がレジスタアクセス制御機能５１６に対してレジスタへの書込要求を行う場合の処理を示すフローチャートである。このとき、レジスタ書込ユニット５１２５では保護タスク１の命令が実行されており、そのユニットにあるタスクＩＤレジスタ５１３５は「１」に設定されている。レジスタ書込ユニット５１２５は、バス７１５を介してレジスタ書込ユニット５１２５のタスクＩＤレジスタ５１３５に設定されたタスクＩＤ「１」を指定したレジスタアクセス要求をレジスタアクセス制御機能５１６に送る(ステップＳ７１０)。
【０１００】
レジスタアクセス制御機能５１６は、レジスタアクセス要求を取得すると、レジスタセットテーブル５１４において、レジスタアクセス要求に含まれるタスクＩＤ「１」に対応するレジスタセットを特定する。すなわち、第２レジスタセット５１５２を選択する。そして、第２レジスタセット５１５２に対して書込要求を行う(ステップＳ７１２)。
【０１０１】
第２レジスタセット５１５２は、書き込みが完了すると、レジスタアクセス制御機能５１６に対して完了通知を送る(ステップＳ７１４)。レジスタアクセス制御機能５１６は、完了通知を第２レジスタセット５１５２に送る(ステップＳ７１６)。
このように、デコードユニット５１２２は、タスクＩＤ「０」を保持しているので、レジスタセットテーブル５１４においてタスクＩＤ「０」に対応付けられている第１レジスタセット５１５１にアクセスすることができる。しかし、第２レジスタセット５１５２にはアクセスすることができない。また、レジスタ書込ユニット５１２５は、タスクＩＤ「１」を保持しているので、レジスタセットテーブルにおいてタスクＩＤ「１」に対応付けられている第２レジスタセット５１５２にアクセスすることができる。しかし、第１レジスタセット５１５１にはアクセスすることができない。このように、各ユニットから第１レジスタセット５１５１，第２レジスタセット５１５２へのアクセスを、各ユニットのタスクＩＤレジスタが保持しているタスクＩＤの値によって制御するので、他のタスクからレジスタ情報にアクセスするのを防止することができる。
【０１０２】
図１３は、図１０の時刻ｔ１３におけるステップＳ６２４１において、命令フェッチユニット５１２１が命令フェッチを行う場合の処理を示すフローチャートである。このとき、命令フェッチユニット５１２１ではＯＳタスクの命令が実行されており、そのユニットにあるタスクＩＤレジスタ５１３１は「０」に設定されている。命令フェッチユニット５１２１は、バス７２０を介してキャッシュコントローラ１２１に対して、タスクＩＤ「０」を指定して、アドレスＹへのアクセス要求を行う(ステップＳ７２０)。
【０１０３】
キャッシュコントローラ１２１は、アクセス要求を取得すると、命令キャッシュ１２２においてアクセス要求された命令を検索する。命令キャッシュ１２２にアドレスＹ、タスクＩＤ「０」に対応する命令が保持されていない場合には(ステップＳ７２２，Ｎｏ)、ＢＩＵ１４１に対してアドレスＹ、タスクＩＤ「０」を指定してメモリアクセス要求を行う(ステップＳ７２４)。
【０１０４】
ＢＩＵ１４１は、外部メモリ１０２に対してアドレスＹに対応する命令の読出要求を送る(ステップＳ７２６)。そして、ＢＩＵ１４１は、外部メモリ１０２から命令を取得し(ステップＳ７２８)、キャッシュコントローラ１２１に送る(ステップＳ７３０)。
【０１０５】
本実施の形態においては、鍵テーブル１４２においてタスクＩＤ「０」に対応する命令は、暗号化されていない平文命令として外部メモリ１０２に保持されているので、暗号復号器１４３による復号化を行わずにキャッシュコントローラ１２１に送る。なお、タスクＩＤに対応する命令が暗号化された状態で外部メモリ１０２に保持されているときは、暗号復号器１４３は、当該命令を復号化し、平文命令としてキャッシュコントローラ１２１に送る。
【０１０６】
キャッシュコントローラ１２１は、ＢＩＵ１４１から取得した命令を命令キャッシュ１２２に書き込む(ステップＳ７３２)。さらに、キャッシュコントローラ１２１は、命令キャッシュ１２２から読み出した命令をプロセッサコア５１１に送る(ステップＳ７３４)。
【０１０７】
なお、ステップＳ７２２において、命令キャッシュ１２２にアクセス要求された命令が保持されていた場合には(ステップＳ７２２，Ｙｅｓ)、ステップＳ７３４へ進む。
【０１０８】
図１４は、図１０の時刻ｔ１３におけるステップＳ６２４４において、メモリアクセスユニット５１２４がメモリアクセスを行う場合の処理を示すフローチャートである。このとき、メモリアクセスユニット５１２４では保護タスク１の命令が実行されており、そのユニットにあるタスクＩＤレジスタ５１３４は「１」に設定されている。メモリアクセスユニット５１２４は、バス７２２を介してキャッシュコントローラ１２１に対して、タスクＩＤ「１」を指定して、アドレスＰへのデータのアクセス要求を行う(ステップＳ７４０)。
【０１０９】
キャッシュコントローラ１２１は、アクセス要求を取得すると、データキャッシュ１２３においてアクセス要求されたデータを検索する。データキャッシュ１２３にアドレスＰ、タスクＩＤ「１」に対応する命令がない場合には(ステップＳ７４２，Ｎｏ)、ＢＩＵ１４１に対してアドレスＰ、タスクＩＤ「１」を指定してメモリアクセス要求を行う(ステップＳ７４４)。
【０１１０】
ＢＩＵ１４１は、外部メモリ１０２に対してアドレスＰに対応するデータの読出要求を送る(ステップＳ７４６)。そして、ＢＩＵ１４１は、外部メモリ１０２からアドレスＰに対応するデータＥ[ＤＡＴＡ(Ｐ)]を取得する(ステップＳ７４８)。ＢＩＵ１４１は、鍵テーブル１４２からタスクＩＤ「１」に対応する鍵を選択する。
【０１１１】
そして、暗号復号器１４３で読み出したデータＥ[ＤＡＴＡ(Ｐ)]を復号して、平文データＤＡＴＡ(Ｐ)を得る(ステップＳ７５０)。ＢＩＵ１４１は、平文データをキャッシュコントローラ１２１に送る(ステップＳ７５２)。
【０１１２】
キャッシュコントローラ１２１は、ＢＩＵ１４１から取得した平文データをデータキャッシュ１２３に書き込む(ステップＳ７５４)。さらに、平文データをプロセッサコア５１１に送る(ステップＳ７５６)。
【０１１３】
一方、ステップＳ７４２において、データキャッシュ１２３にアクセス要求されたデータが保持されていた場合には(ステップＳ７４２，Ｙｅｓ)、ステップＳ７５６に進む。以上で、図１０の時刻ｔ１３におけるステップＳ６２４４における処理が完了する。
【０１１４】
このように、命令フェッチユニット５１２１は、タスクＩＤ「０」を保持しているので、タスクＩＤ「０」を用いてキャッシュメモリ１２１にアクセスする。また、メモリアクセスユニット５１２４は、タスクＩＤ「１」を保持しているので、タスクＩＤ「１」を用いてキャッシュメモリ１２１にアクセスする。キャッシュメモリ１２１は、平文の命令やデータへのアクセスを、タスクＩＤの値によって制御するため、他のタスクから平文の命令やデータにアクセスするのを防止することができる。
また、本実施の形態においては、割り込み前に既に５段パイプライン５１２に登録された前タスクが完了する前に、割り込みにかかる後タスクの実行を開始することができる。したがって、応答性を向上させることができる。また、スループットを向上させることができる。
【０１１５】
なお、実施の形態２においては、各ユニットのタスクＩＤレジスタは、各ユニットが実行しているタスクのタスクＩＤを保持したが、これにかえて、各ユニットが実行しているタスクのアクセス先のレジスタＩＤを保持してもよい。この場合、メモリアクセス時のタスクＩＤを特定するため、レジスタＩＤとタスクＩＤのタスクＩＤ対応表を保持する必要がある。そして、各ユニットのレジスタＩＤとそのタスクＩＤ対応表からタスクＩＤを選択して、メモリにアクセスする。この場合にも、同様に各ユニットからのレジスタやメモリへのアクセスを制御することができる。
【０１１６】
以上、本発明を実施の形態を用いて説明したが、上記実施の形態に多様な変更または改良を加えることができる。
【図面の簡単な説明】
【０１１７】
【図１】実施の形態１のマイクロプロセッサの全体構成を示す図である。
【図２】鍵テーブル１４２のデータ構成を模式的に示す図である。
【図３】命令キャッシュ１２２のデータ構成を模式的に示す図である。
【図４】命令実行同期機能１１６が保持する状態遷移図である。
【図５】５段パイプライン１１２が第１保護タスクを実行している様子を模式的に示す図である。
【図６】図５を参照しつつ説明した時刻ｔ３における処理が開始する前に、何らかの要因により割り込みが発生した場合に、５段パイプライン１１２がタスクを実行する様子を模式的に示す図である。
【図７】割り込みが発生した場合の、５段パイプライン１１２、命令実行同期機能１１６、セキュアコンテキストスイッチ部１３１、およびキャッシュコントローラ１２１の処理を示すフローチャートである。
【図８】実施の形態２にかかるプロセッサコア５１１の構成を示すブロック図である。
【図９】プロセッサコア５１１が第１保護タスクを実行している様子を模式的に示す図である。
【図１０】図９を参照しつつ説明した時刻ｔ１２における処理が開始する前に、何らかの要因により割り込みが発生した場合に、５段パイプライン１１２がタスクを実行する様子を模式的に示す図である。
【図１１】図１０のステップＳ６２５２においてデコードユニット５１２２がレジスタアクセス制御機能５１６に対してレジスタへの読出要求を行う場合の処理を示すフローチャートである。
【図１２】図１０の時刻ｔ１３におけるステップＳ６２４５において、レジスタ書き込みユニット５１２５がレジスタアクセス制御機能５１６に対してレジスタへの書込要求を行う場合の処理を示すフローチャートである。
【図１３】図１０の時刻ｔ１３におけるステップＳ６２４１において、命令フェッチユニット５１２１が命令フェッチを行う場合の処理を示すフローチャートである。
【図１４】図１０の時刻ｔ１３におけるステップＳ６２４４において、メモリアクセスユニット５１２４がメモリアクセスを行う場合の処理を示すフローチャートである。
【符号の説明】
【０１１８】
１０１  プロセッサ
１０２  外部メモリ
１１１，５１１  プロセッサコア
１１２，５１２  ５段パイプライン
１１４  カレントタスクＩＤレジスタ
１１５  レジスタセット
１１６  命令実行同期機能
１２１  キャッシュコントローラ
１２２  命令キャッシュ
１２３  データキャッシュ
１３１  セキュアコンテキストスイッチ部
１３２  コンテキストバッファ
１３３  コンテキスト制御部
１４２  鍵テーブル
１４３  暗号復号器
１６１  タスク管理部
５１４  レジスタセットテーブル
５１６  レジスタアクセス制御機能
１１２０，５１２０  プログラムカウンタ
１１２１，５１２１  命令フェッチユニット
１１２２，５１２２  デコードユニット
１１２３，５１２３  実行ユニット
１１２４，５１２４  メモリアクセスユニット
１１２５，５１２５  レジスタ書込ユニット
１１３３  ＥＸＵ切替フラグレジスタ
１１３４  ＭＥＭ切替フラグレジスタ
１１３５  ＷＢＵ切替フラグレジスタ
５１３１〜５１３５  タスクＩＤレジスタ
５１５１  第１レジスタセット
５１５２  第２レジスタセット
【図１】
2006023902.tif 000003
【図２】
2006023902.tif 000004
【図３】
2006023902.tif 000005
【図４】
2006023902.tif 000006
【図５】
2006023902.tif 000007
【図６】
2006023902.tif 000008
【図７】
2006023902.tif 000009
【図８】
2006023902.tif 000010
【図９】
2006023902.tif 000011
【図１０】
2006023902.tif 000012
【図１１】
2006023902.tif 000013
【図１２】
2006023902.tif 000014
【図１３】
2006023902.tif 000015
【図１４】
2006023902.tif 000016