図1は本発明の好ましい実施例に係わるデータ処理装置を示すブロック図である。このデータ処理装置はプロセッサコア10を含み、このコア10内には命令のシーケンスを実行するようになっている代数論理ユニット(ALU)16が設けられている。このALU16が必要とするデータはレジスタバンク14内に記憶されており、このコア10にはプロセッサコアの作動を表示する診断データを捕捉できるようにする種々のモニタ機能が設けられている。一例として、どの作動をトレースすべきかを定める埋め込みトレースモジュール(ETM)22内の所定の制御レジスタ26の内容に応じてプロセッサコアの所定の作動のリアルタイムのトレースを発生するための埋め込みトレースモジュール(ETM)22が設けられている。これらトレース信号は一般にトレースバッファへ出力され、このトレースバッファから、これらトレース信号を後で分析できるようになっている。種々の周辺機器(図示されず)によって立ち上げられる複数の割り込みサービスを管理するためのベクトル化されたインターラプトコントローラ21が設けられている。
更に図1に示されるように、コア10内に設けることができる別のモニタ機能としてデバッグ機能がある。1つ以上のスキャンチェーン12に結合されているジョイントテストアクセスグループ(JTAG)コントローラ18を介してデータ処理装置の外部のデバッグアプリケーションがコア10と通信できるようになっている。スキャンチェーン12およびJTAGコントローラ18を介して外部デバッグアプリケーションへプロセッサコア10の種々の部分のステータスに関する情報を出力することができる。デバッグ機能を開始すべきか停止すべきかを識別する条件をレジスタ24内に記憶するのに、インサーキットエミュレータ(ICE)20が使用され、従って、このエミュレータは例えばブレークポイント、ウォッチポイントなどを記憶するのに使用される。
コア10はメモリ管理ロジック30を介してシステムバス40に結合されており、メモリ管理ロジック30はデータ処理装置のメモリ内のロケーションへアクセスするためにコア10が発生するメモリアクセスリクエストを管理するようになっている。システムバス40に直接接続されるメモリユニット、例えば密結合メモリ(TCM)36および図1に示されるキャッシュ38によって、メモリの所定部分を具現化できる。かかるメモリ、例えばダイレクトメモリアクセス(DMA)コントローラ32へアクセスするのに別のデバイスを設けてもよい。一般に、チップの種々の素子の所定の制御パラメータを定めるための種々の制御レジスタ34が設けられる。本明細書ではこれら制御レジスタをコプロセッサ15(CP15)のレジスタとも称す。
外部バスインターフェース42を介し、外部バス70(例えばARMリミティッド社によって開発された「高度マイクロコントローラバスアーキテクチャ」(AMBA)仕様に従って作動するバス)へコア10を含むチップを結合できる。これらデバイスはマスターデバイス、例えばデジタル信号プロセッサ(DSP)50またはダイレクトメモリアクセス(DMA)コントローラ52だけでなく、種々のスレーブデバイス、例えばブートROM47、スクリーンドライバ46、外部メモリ56、入出力(I/O)インターフェース60またはキー記憶ユニット64も含むことができる。図1に示されたこれら種々のスレーブデバイスをいずれもデータ処理装置の全メモリの内蔵部品と見なすことができる。例えばブートROM44は外部メモリ56のようにデータ処理装置のアドレス指定可能なメモリの一部を形成する。更に、スクリーンドライバ46、I/Oインターフェース60およびキー記憶ユニット64のようなデバイスはいずれも内部記憶素子、例えばレジスタまたはバッファ48、62、66をそれぞれ含み、これらバッファはいずれもデータ処理装置の全メモリの一部として別々にアドレス指定可能である。後により詳細に説明するように、メモリの一部、例えば外部メモリ56の一部を使ってメモリアクセスの制御に対応する情報を構成する1つ以上のページテーブル68を記憶する。
当業者であれば理解できるように、外部バス70には一般にアービッターおよびデコーダロジック54が設けられる。アービッターは多数のマスターデバイス、例えばコア10、DMA32、DSP50、DMA52などが発生する多数のメモリアクセスリクエストの間の仲裁をするのに使用され、一方、デコーダは特定のメモリアクセスリクエストを外部バス上のどのスレーブデバイスが取り扱うかを決定するのに使用される。
一部の実施例では、コア10を含むチップの外部に外部バスを設けることができるが、別の実施例では、外部バスはコア10と共にオンチップ状態で設けられる。このようにした場合、外部バス上の安全データは外部バスをオフチップにしたときよりもセキュリティを維持するのが容易となるという利点がある。外部バスがオフチップとされた場合、安全データのセキュリティを高めるのにデータ暗号化技術を使用できる。
図2は安全ドメインと非安全ドメインとを有する処理システムで作動する種々のプログラムを略図で示す。このシステムには少なくとも部分的にモニタモードで実行されるモニタプログラム72が設けられる。この実施例ではセキュリティステータスフラグはモニタモードでしか書き込みアクセスできず、このフラグはモニタプログラム72によって書き込みできる。モニタプログラム72は安全ドメインと非安全ドメインとの間のすべての変更を両方向に管理する役割を果たす。コアを外から見ると、モニタモードは常に安全であり、モニタプログラムは安全メモリ内にある。
非安全ドメイン内には非安全オペレーティングシステム74および複数の非安全アプリケーションプログラム76、78が設けられ、これらプログラムは非安全オペレーティングシステム74と共に協働して実行される。安全ドメインには、安全カーネルプログラム80が設けられている。この安全カーネルプログラム80は安全なオペレーティングシステムを形成すると見なすことができる。一般に、かかる安全なカーネルプログラム80は処理活動に不可欠な機能しか実行しないようになっており、安全カーネルプログラム80をできるだけ小さく、かつ簡単にするように、安全ドメイン内でこれら処理活動を行わなければならない。その理由は、このようにカーネルプログラムを小さく、かつ簡単にすることにより、プログラムをより安全にできるからである。安全カーネルプログラム80と組み合わせて複数の安全アプリケーション82、84が実行されるように示されている。
図3は、異なるセキュリティドメインに関連した処理モードのマトリックスを示す。この特定の例では、処理モードはセキュリティドメインに対して対称的であるので、モード1とモード2とは安全形式および非安全形式の双方で存在する。
モニタモードはシステム内のセキュリティアクセスの最高レベルを有し、この実施例では非安全ドメインと安全ドメインとの間にてシステムを両方向に切り替える権利が与えられた唯一のモードである。従って、すべてのドメインの切り替えはモニタモードへの切り替えおよびモニタモードでのモニタプログラム72の実行により行われる。
図4は、非安全ドメイン処理モード1、2、3、4および安全ドメイン処理モードa、b、cの別の組を略図で示す。図3の対称的な配置と対照的に、図4はセキュリティドメインのうちの一方または他方に処理モードの一部は存在できないことを示す。モニタモード86は非安全ドメインと安全ドメインとをまたがるように、再び示されており、このモニタモード86は安全処理モードと見なすことができる。このモードで安全ステータスフラグを変更することができ、モニタモードにあるモニタプログラム72は自らセキュリティステータスフラグをセットできる能力を有するので、このモニタモードは効果的にシステム全体のセキュリティを究極レベルにすることができる。
図5は、セキュリティドメインに関する処理モードの別の配置を略図で示す。この配置では、安全ドメインと非安全ドメインとの双方が識別されているだけでなく、別のドメインも識別されている。この別のドメインは、図示された安全ドメインまたは非安全ドメインのいずれとも相互に対話する必要がなく、また、それが属する部分のいずれに対する事項も問題とならないよう、システムの他の部分からアイソレートされたものにすることができる。
後に理解できるように、処理システム、例えばマイクロプロセッサには通常、レジスタバンク88が設けられ、このバンクにはオペランドの値を記憶できる。図6はレジスタバンクの一例のプログラマーのモデル図を示し、処理モードのうちの所定モードにある所定のレジスタ番号に対し、専用レジスタが設けられている。より詳細には、図6の例は(英国ケンブリッジのARMリミティッド社のARM7プロセッサに設けられているような)公知のARMレジスタバンクの拡張例であり、このARMレジスタバンクには専用のセーブされたプログラムステータスレジスタ、専用スタックポインタレジスタおよび各処理モードのための専用リンクレジスタR14が設けられている、しかし、このケースではモニタモードのプロビジョンによって拡張されている。図6に示されるように、高速割り込みモードは、この高速割り込みモードとなったときに他のモードからのレジスタの内容をセーブし、またリストアしなくてもよいように設けられた追加専用レジスタを有する。別の実施例では、このモニタモードに高速割り込みモードと同じように別の専用レジスタを設けることもでき、このようにしてセキュリティドメインの切り替えの処理速度をスピードアップし、かかる切り替えに関連するシステムの待ち時間を小さくすることができる。
図7は、別の実施例を略図で示しており、この実施例では安全ドメインおよび非安全ドメインでそれぞれ使用される2つの完全な別個のレジスタバンクとしてレジスタバンク88が設けられている。このようなレジスタバンクの配置方法は、非安全ドメインへの切り替えを行うときに安全ドメイン内で作動するレジスタに記憶された安全データにアクセスできるようになることを防止できる1つの方法である。しかしながら、このような配置は非安全ドメインと安全ドメインの双方においてアクセスできるレジスタ内にデータを入れる高速かつ効率的な機構を使用することによって可能となり、かつそのようにすることが望ましい、非安全ドメインから安全ドメインへデータが移動する可能性を阻害する。
安全レジスタバンクを設ける重要な利点は、ある世界から別の世界へ切り替える前にレジスタの内容をフラッシュしなくてもよいことである。待ち時間が重要な問題ではない場合、安全ドメインの世界のために二重のレジスタを有しない、より簡単なハードウェアシステムを、例えば図6により使用できる。モニタモードはあるドメインから他のドメインへ切り替える役割を果たす。少なくともモニタモードで実行中にはモニタプログラムにより内容のリストア、前のコンテクストのセーブだけでなく、レジスタのフラッシュが行われる。従って、このシステムは仮想化モデルのように作動する。このタイプの実施例については後に更に説明する。例えば、本明細書に説明するセキュリティの特徴を組み込んだARM7のプログラマーのモデルを参照すべきである。
プロセッサモード
安全な世界におけるコピーモードの代わりに、同じモードが安全ドメインと非安全ドメインの双方をサポートしている(図8参照)。モニタモードは(例えばコプロセッサコンフィギュレーションレジスタから記憶されているSビットが読み出されるように)コアのその時のステータスが安全ステータスであるのか、または非安全ステータスであるのかを知る。
図8において、SMI(ソフトウェアモニタ割り込み命令)が生じるときはいつも、コアはある世界から別の世界へ正しく切り替えるためのモニタモードに入る。
ユーザーモードからSMIが許可される図9を参照する:
1.スケジューラはスレッド1を起動する。
2.スレッド1は安全な機能(ファンクション)、=>SMI安全コールを実行しなければならず、コアはモニタモードに入る。ハードウェアの制御によりR14_monおよびSPSR_mon(モニタモードのためのセーブされたプロセッサステータスレジスタ)に現在のPCおよびSPSR(現在のプロセッサステータスレジスタ)が記憶され、IRQ/FIQ割り込みがディスエーブルされる。
3.モニタプログラムは次のタスクを実行する。
−Sビットをセットする(安全ステータスフラグ)
−安全アプリケーションの実行中に例外が生じても、非安全コンテクストが失われないよう、スタック内に少なくともR14_monおよびSPSR_monをセーブする。
−起動すべき新しいスレッド:安全スレッド1があるかどうかをチェックする。安全な世界においてスレッド1がアクティブであることを(一部の実施例におけるスレッドIDテーブルを介した)機構が示す。
−IRQ/FIQ割り込みを再イネーブルする。次に安全ユーザーモードで安全 アプリケーションがスタートできる。
4.スレッド1が終了するまでこれを実行し、モニタプログラムモードの「安全からのリータン」機能へのブランチ(SMI)を実行する。(コアがモニタモードに入ったときに、IRQ/FIQ割り込みをディスエーブルする。
5.「安全からのリータン」機能は次のタスクを実行する。
−スレッド1が終了したことを表示する(例えばスレッドIDテーブルの場合、テーブルからスレッド1を除く)。
−スタックから非安全コンテクストをリストア(復元)し、必要なレジスタをフラッシュし、よって一旦非安全ドメインへのリターンが行われると、安全データを読み出すことができなくなる。
−SUBS命令により非安全ドメインへ戻るように分岐し(これによってプログラムカウンタをカレントポイントにリストアし、ステータスフラグを更新する)、(リストアされたR14_monからの)PCおよび(SPSR_monらの)SPSRをリストアする。よって非安全ドメインにおけるリターンポイントはスレッド1における、前に実行されたSMIに続く命令となる。
6.終了するまでスレッド1が実行され、スケジューラへハンドを戻す。
特定の実施例によってはモニタプログラムと安全オペレーティングシステムとの間で上記機能の一部を分割してもよい。
別の実施例では、ユーザーモードでSMIが生じないようにすることが望ましい。
安全な世界への入口
リセット
ハードウェアのリセットが生じると、MMUはディスエーブルされ、ARMコア(プロセッサ)はSビットの組により安全スーパーバイザーモードへ分岐する。安全ブートが一旦終了すると、モニタモードに進むSMIを実行することができ、モニタは必要な場合に非安全な世界内のOS(非安全svcモード)へ切り替わることができる。これまでのOSを使用することが望ましい場合、このOSを使用することによってスーパーバイザーモードで簡単にブートすることができ、安全ステートを無視できる。
SMI命令
非安全ドメインにおける非安全モード(上記のようにこのモードはSMIを特権モードに制限することが望ましい)からこの命令(モード切り替えソフトウェア割り込み命令)を呼び出すことができるが、関連するベクトルによって決定される目標となる入口ポイントは常に固定されており、モニタモード内にある。これは実行すべき(例えば命令によってパスされたオペランドによって制御される)適当な安全な機能へ分岐するためのSMIハンドラーまでである。
図6のタイプのレジスタバンク内のレジスタバンクの共用レジスタを使って非安全な世界から安全な世界までパラメータの移動を行うことができる。非安全な世界でSMIが生じると、ARMコアはハードウェア内で次のアクションを行うことができる。
−モニタモードに入るSMIベクトルへのブランチ(モニタモードに入るので安全メモリではアクセスが認められる)。
−R14_monにPCをセーブし、SPSR_monへSPSRをセーブする。
−モニタプログラムを使ってSビットをセットする。
−モニタモードで安全な例外ハンドラーの実行をスタートする(マルチスレッドの場合、コンテクストをリストア/セーブ)。
−安全ユーザーモード(またはsvcモードのような別のモード)への分岐をし、適当な機能を実行する。
−コアがモニタモードにある間、IRQおよびFIQをディスエーブルする(待ち時間が増加する)。
安全な世界からの退出
安全な世界から出るのに2つの可能性がある。
−安全な機能を終了し、この機能を呼び出しした前の非安全モードに戻る場合。
−非安全な例外(例えばIRQ−FIQ−SMI)により安全な機能に割り込む。
安全な機能の正常終了
安全な機能が正常に終了すると、SMIの直後の命令で非安全な世界内のアプリケーションを再開しなければならない。安全ユーザーモードでは「安全な世界からのリターン」ルーチンに対応する適当なパラメータを有するモニタモードへリターンするSMI命令を実行する。この段階では、非安全な世界と安全な世界との間のデータの漏れを防止するようにレジスタをフラッシュし、次に非安全コンテクスト用の汎用レジスタをリストアし、非安全な世界内に持っていた値で非安全バンクレジスタを更新する。従って、R14_monおよびSPSR_monに適当な値が与えられ、「MOVS PC、R14」命令を実行することによってSMIの後で非安全アプリケーションを再開する。
非安全例外に起因する安全な機能からの退出
このケースでは、安全な機能を終了せず、非安全例外ハンドラーに進む前に安全コンテクストをセーブしなければならない、どの割り込みもこの要求が処理される。
安全な割り込み
安全な割り込みに対し、いくつかの可能性がある。
次の場合に応じた2つの可能な解決案が提案される。
−どんな種類の割り込みであるか(安全または非安全)
−IRQが生じたときにコアがどのモードとなっているか(安全な世界内か非安全な世界内か)
解決案1
この解決案では安全および非安全な割り込みをサポートするのに2つの別個のピンが必要とされる。
非安全な世界内にある間に、
−IRQが生じた場合、コアはARMコア、例えばARM7内のように、この割り込みを処理するのにコアはIRQモードとなる。
−SIRQが生じた場合、コアはモニタモードに進み、非安全コンテクストをセーブし、次に安全なIRQハンドラーに進み、安全な割り込みを取り扱う。
安全な世界内にある間に、
−SIRQが生じた場合、コアは安全IRQハンドラーに進む。コアは安全な世界を離れない。
−IRQが生じた場合、コアは安全コンテクストがセーブされるモニタモードに進み、次に非安全IRQハンドラーに進み、この非安全割り込みを扱う。
換言すれば、現在の世界に属さない割り込みが生じたとき、コアは直接モニタモードとなり、そうでない場合、そのときの世界に留まる(図10参照)。
安全な世界で生じるIRQ
図11A参照:
1.スケジューラはスレッド1を起動する。
2.スレッド1は安全な機能、=>SMI安全コールを実行しなければならず、コアはモニタモードに入る。R14_monおよびSPSR_monにそのときのPCおよびCPSRが記憶され、IRQ/FRQがディスエーブルされる。
3.モニタハンドラー(プログラム)は次のタスクを実行する:
−Sビットをセットする。
−安全アプリケーションの実行中に例外が生じた場合に、非安全コンテクストが失われることがないよう、スタック(更に可能な場合には他のレジスタもプッシュする)内に少なくともR14_monおよびSPSR_monをセーブする。
−起動する新しいスレッド、例えば安全なスレッド1があるかどうかをチェックする。一つの機構が安全な世界内でスレッド1がアクティブであることを(スレッドIDテーブルを介し)表示する。
−安全ユーザーモードで安全アプリケーションがスタートできる。次にIRQ/FIQをイネーブルし直す。
4.安全なスレッド1が実行されている間にIRQが生じる。コアはモニタモード(特定ベクトル)に直接ジャンプし、モニタモードでR14_monにそのときのPCを記憶し、SPSR_monにCPSRを記憶し(IRQ/FIQを次にディスエーブルする)。
5.安全コンテクストはセーブしなければならず、前の非安全コンテクストをリストアする。R14_IRQ/SPSR_IRQを適当な値で更新するように、モニタハンドラーはIRQモードとなり、次に制御信号を非安全なIRQハンドラーへ送る。
6.IRQハンドラーはIRQにサービスし、次に非安全な世界内で制御信号をスレッド1へ与える。SPSR_IRQおよびR14_IRQをSPSRおよびPCにリストアすることにより、スレッド1は割り込まれたSMI命令を指示する。
7.SMI命令を再実行する(2.と同じ命令)。
8.モニタハンドラーはそのスレッドが以前割り込まれたものであるかどうかを見て、スレッド1のコンテクストをリストアする。次にユーザーモードで安全スレッド1に分岐し、割り込まれた命令をポイントする。
9.安全スレッド1は終了するまで作動し、次にモニタモード(専用SMI)で「安全からのリターン」機能に分岐する。
10.「安全からのリターン」機能は次のタスクを実行する。
−安全なスレッド1が終了したことを表示するタスク(例えばスレッドIDテーブルの場合、このテーブルからスレッド1を除く)。
−スタックから非安全コンテクストをリストアし、必要なレジスタをフラッシュし、よって非安全な世界に一旦リターンすると、非安全データを読み出すことができるようにするタスク。
−SUBS命令で非安全な世界に戻るよう分岐し、(リストアされたR14_monから)PCをリストアし、(SPSR_monから)CPSRをリストアするタスク。従って、非安全な世界内のリターンポイントはスレッド1で前に実行されたSMIに続く命令でなければならない。
11.スレッド1は終了まで実行され、次にスレッド1は制御信号をスケジューラに戻す。
非安全な世界で生じるSIRQ
図11B参照:
1.スケジューラはスレッド1を起動する。
2.安全なスレッド1が実行されている間にSIRQが生じる。コアはモニタモード(特定ベクトル)に直接ジャンプし、モニタモードにおいてR14_monにそのときのPCを記憶し、SPSR_monにCPSRを記憶し、IRQ/FIQをディスエーブルする。
3.非安全コンテクストをセーブしなければならず、コアは安全なIRQハンドラーに進む。
4.IRQハンドラーはSIRQにサービスし、次に、適当なパラメータを有するSMIを使ってモニタモードハンドラーへ制御を戻す。
5.SUBS命令がコアを非安全な世界にリターンし、割り込まれたスレッド1を再開させるように、モニタハンドラーは非安全コンテクストをリストアする。
6.終了点までスレッド1が実行され、ハンドをスケジューラに戻す。
図11Aの機構は安全な世界に入るための決定方法を与えることができるという利点を有する。しかしながら、割り込み優先権に関連したある問題が生じる。すなわち安全割り込みハンドラー内でSIRQが実行されている間、より高い優先権を有する非安全なIRQが生じることがある。一旦非安全なIRQが終了すると、コアが安全な割り込みを再開できるように、SIRQイベントを再形成する必要が生じる。
解決案2
この機構(図12参照)では、2つの別個のピンまたは1つのピンだけで、安全な割り込みおよび非安全な割り込みをサポートできる。2つのピンを設けたことにより、割り込み待ち時間が下がる。
非安全な世界にある間に、
−IRQが生じた場合、コアはIRQモードに進み、ARM7システム内と同じようにこの割り込みを処理する。
−SIRQが生じた場合、コアはIRQハンドラーに進み、このハンドラーでSMI命令がコアをモニタモードに分岐させ、非安全コンテクストをセーブし、次に安全なIRQハンドラーに分岐し、安全な割り込みを取り扱う。
安全な世界にある間に、
−SIRQが生じた場合、コアは安全なIRQハンドラーに進む。コアは安全な世界から離れない。
−IRQが生じた場合、コアは安全なIRQハンドラーに進み、ここでSMI命令がコアをモニタモードに分岐させ(このモードで安全コンテクストがセーブされる)、次に非安全なIRQハンドラーに分岐し、この非安全な割り込みを取り扱う。
安全な世界で生じるIRQ
図13A参照:
1.スケジューラがスレッド1を起動する。
2.スレッド1は安全機能、=>SMI安全コールを実行しなければならず、コアはモニタモードに入る。R14_monおよびSPSR_monにそのときのPCおよびCPSRが記憶され、IRQ/FRQがディスエーブルされる。
3.モニタハンドラーは次のタスクを実行する:
−Sビットをセットする。
−安全なアプリケーションの実行中に例外が生じた場合に、スタック(最終的には他のレジスタ)内に少なくともR14_monおよびSPSR_monをセーブする。
−起動する新しいスレッド、例えば安全なスレッド1があるかどうかをチェックする。一つの機構が安全な世界内でスレッド1がアクティブであることを(スレッドIDテーブルを介し)表示する。
−安全なユーザーモードで安全なアプリケーションがスタートできる。次にIRQ/FIQをイネーブルし直す。
4.安全なスレッド1が実行されている間にIRQが生じる。コアは安全なIRQモードに直接ジャンプする。
5.コアはR14_irqにそのときのPCを記憶し、SPSR_irqにCPSRを記憶する。IRQハンドラーはこれが非安全な割り込みであることを検出し、適当なパラメータを有するモニタモードに入るためのSMIを実行する。
6.安全コンテクストはセーブしなければならず、前の非安全コンテクストをリストアする。モニタハンドラーはCPSRを読み出すことにより、SMIがどこから来たかを知る。モニタハンドラーはIRQモードに進み、R14_irq/SPSR_irqを読み出し、適当な安全なコンテクストをセーブすることもできる。更にIRQルーチンが一旦終了されると、リストアしなければならない非安全コンテクストをこれら同じレジスタにセーブすることもできる。
7.IRQハンドラーはIRQにサービスし、次に非安全な世界内で制御信号をスレッド1へ与える。SPSR_IRQおよびR14_IRQをSPSRおよびPCにリストアすることにより、スレッド1は割り込まれたSMI命令をポイントする。
8.SMI命令を再実行する(2.と同じ命令)。
9.モニタハンドラーはそのスレッドが以前割り込まれたものであるかどうかを見て、スレッド1のコンテクストをリストアする。次にユーザーモードで安全なスレッド1に分岐し、割り込まれた命令をポイントする。
10.安全なスレッド1は終了するまで作動し、次にモニタモード(専用SMI)で「安全からのリターン」機能に分岐する。
11.「安全からのリターン」機能は次のタスクを実行する。
−安全なスレッド1が終了したことを表示するタスク(例えばスレッドIDテーブルの場合、このテーブルからスレッド1を除く)。
−スタックから非安全コンテクストをリストアし、必要なレジスタをフラッシュし、よって非安全な世界に一旦リターンすると、非安全データを読み出すことができるようにするタスク。
−SUBS命令で非安全な世界に戻るよう分岐し、(リストアされたR14_monから)PCをリストアし、(SPSR_monから)CPSRをリストアするタスク。従って、非安全な世界内のリターンポイントはスレッド1で前に実行されたSMIに続く命令でなければならない。
12.スレッド1は終了まで実行され、次にスレッド1は制御信号をスケジューラに戻す。
非安全な世界で生じるSIRQ
図13B参照:
1.スケジューラはスレッド1を起動する。
2.安全なスレッド1が実行されている間にSIRQが生じる。
3.コアはIRQモードに直接ジャンプし、R14_irqにそのときのPCを記憶し、SPSR_irqにCPSRを記憶する。次にIRQをディスエーブルする。IRQハンドラーはこれがSIRQであることを検出し、適当なパラメータを有するSMI命令を実行する。
4.一旦、モニタモードとなると、非安全コンテクストをセーブしなければならず、次にコアは安全なIRQハンドラーへ進む。
5.安全なIRQハンドラーはSIRQのサービスルーチンをサービスし、次に、適当なパラメータを有するSMIを使って制御をモニタへ戻す。
6.SUBS命令がコアを非安全な世界にリターンさせ、割り込まれたIRQハンドラーを再開させるように、モニタハンドラーは非安全コンテクストをリストアする。
7.IRQハンドラーはSUBSを実行することにより、非安全なスレッドに戻ることができる。
8.終了点までスレッド1が実行され、ハンドをスケジューラに戻す。
図12の機構を用いると、入れ子式割り込みの場合にSIRQイベントを再形成する必要がなくなるが、安全な割り込みが実行される保証はない。
例外ベクトル
(仮想アドレスの見地から、物理ベクトルのテーブルは1つのベクトルテーブルとして見えるが)少なくとも2つの物理ベクトルのテーブルが維持され、一方のテーブルは非安全メモリ内の非安全な世界用のものであり、他方のテーブルは(非安全な世界からアクセスできない)安全メモリ内の安全な世界用のものである。安全な世界および非安全な世界で使用される仮想対物理メモリの異なるマッピングによって、同じ仮想メモリアドレスが物理メモリ内に記憶された異なるベクトルテーブルに効果的にアクセスできるようになる。モニタモードは物理メモリ内に第3のベクトルテーブルを提供するように、常にフラットなメモリマッピングを使用することができる。
割り込みが図12の機構に従う場合、各テーブルに対し、図14に示されるような次のベクトルが生じる。このベクトルの組は安全メモリと非安全メモリの双方で附勢される。
注。リセットエントリーは安全ベクトルテーブル内にしかない。非安全な世界内でリセットを実行するときは、安全メモリ内でリセットベクトルにアクセスできるように、コアのハードウェアはスーパーバイザーモードに入ること、およびSビットの設定を強制する。
図15は安全モード、非安全モードおよびモニタモードにそれぞれ適用できる3つの例外ベクトルのテーブルを示す。安全および非安全オペレーティングシステムの条件および特徴にマッチするように、これら例外ベクトルのテーブルに例外ベクトルをプログラムすることができる。例外ベクトルテーブルの各々はメモリ内にそのテーブルをポイントするベースアドレスを記憶するCP15内に関連するベクトルテーブルのベースアドレスレジスタを有することができる。例外が生じたときにハードウェアはシステムのそのときのステートに対応するベクトルテーブルのベクトルアドレスレジスタを参照し、使用すべきベクトルテーブルのベースアドレスを決定する。これとは異なり、異なるモードで適用される異なる仮想−物理メモリのマッピングを使用し、異なる物理メモリアドレスに記憶された3つの異なるベクトルテーブルを分離することができる。図16に示されるように、プロセッサコアに関連するシステム(コンフィギュレーションを制御する)コプロセッサ(CPU15)内に例外トラップマスクレジスタが設けられる。この例外トラップマスクレジスタはそれぞれの例外のタイプに関連するフラグを提供する。これらフラグはハードウェアがそのときのドメイン内に関連する例外用ベクトルに処理を向けるように作動するのか、または(安全モードのあるタイプである)モニタモードへの切り替えを強制し、モニタモードベクトルテーブル内のテーブルに従うのかのいずれかを表示する。例外トラップマスクレジスタ(例外制御レジスタ)はモニタモードからしか書き込みできない。非安全モードにあるときには例外トラップマスクレジスタに対する読み出しアクセスも防止するようにすることもできる。システムが安全なブートおよび後方へのコンパチビリティを保証するように、安全ベクトルテーブル内で指定された安全スーパーバイザーモードにおいてリセットベクトルへレジスタを常にジャンプさせるようになっている場合、図16の例外トラップマスクレジスタはリセットベクトルのためのフラグを含まないことが理解できよう。図15では、完全にするためにリセットベクトルは安全スーパーバイザーモードの安全ベクトルテーブル以外のベクトルテーブル内に示されていることが理解できよう。
図16は、例えば安全なブート中のモニタプログラムにより例外トラップマスクレジスタ内の異なる例外タイプに対するフラグがプログラム可能であることも示している。これとは異なり、ある実現例では、フラグの一部またはすべてを物理入力信号によって提供してもよい。例えば安全な割り込み信号を受信したときに、安全な割り込みフラグSIRQがモニタモードへのエントリーおよび対応するモニタモード安全割り込みリクエストベクトルの実行を常に強制するように、ハードによる配線をすることができる。図16は非安全ドメイン例外に関係する例外トラップレジスタの部分しか示しておらず、安全ドメイン例外に対してはプログラム可能なビットの同様な組が提供される。
1つのレベルではハードウェアは、例外制御レジスタのフラグに応じて現在のドメイン例外ハンドラーまたはモニタモード例外ハンドラーにより割り込みに対するサービスを調整するように働くことが上記記載から理解できようが、これは適用される第1レベルの制御にすぎない。例として、安全モードで例外が生じることができ、この安全モードの例外ベクトルは安全モード例外ハンドラーに従うことができるが、次にこの安全モード例外ハンドラーはその例外が非安全例外ハンドラーによって良好に取り扱いできる性質である旨を決定し、従ってSMI命令を使って非安全モードへの切り替えをし、非安全例外ハンドラーを呼び出す。ハードウェアが非安全例外ハンドラーを開始するように働くことができる場合、この逆も可能であるが、その場合、処理を安全例外ハンドラーまたはモニタモード例外ハンドラーに向ける命令を実行する。
図17は、新しいタイプの例外に関連した別の可能性のあるタイプの切り替えリクエストをサポートするためのシステムの作動を略図で示すフローチャートである。ステップ98では、ハードウェアは現在プログラムステータスレジスタ(CPSR)における表示としてのモニタモードを変えようと試みる命令を検出する。かかる試みが検出されると、新しいタイプの例外がトリガーされる。この例外を本明細書ではCPSR違反例外と称す。ステップ100におけるこのようなCPSR違反例外が発生する結果、モニタモードにおける適当な例外ベクトルを参照し、ステップ102でモニタプログラムが実行され、CPSR違反例外を取り扱う。
上記SMI命令のためのサポートに加え、図17に関連して説明した安全ドメインと非安全ドメインとの切り替えを開始するための機構を設けてもよいことが理解できよう。SMI命令によりすべての正当な試みを行うべきであるので、モードを切り替えようとする不正な試みに応答するように、このような例外機構を設けてもよい。これとは異なり、かかる機構を、安全ドメインと非安全ドメインとの切り替えを行うための正当な方法としてもよいし、現在のコードとの後方コンパティビリティを与えるようにかかる機構を設けてもよい。現在のコードは、例えば安全ドメインと非安全ドメインとを切り替えようとする不正な試みを真に行わない場合でも、正常な動作の一部として処理ステータスレジスタをクリアしようとする場合がある。
上記のように、プロセッサがモニタモードで作動中には一般に割り込みがディスエーブルされる。このようなディスエーブルはシステムの安全性を高めるために行われる。割り込みが発生すると、そのときのプロセッサのステータスが割り込み例外レジスタに記憶され、割り込み機能の完了時に割り込みポイントにて割り込まれた機能の処理を再開できる。このプロセスがモニタモードで許可された場合、このことはモニタモードのセキュリティを低下させ、よって安全なデータのリーク路を発生し得る。この理由から、モニタモードでは一般に割り込みはディスエーブルされる。しかしながら、モニタモード中の割り込みのディスエーブルの1つの結果として、割り込みの待ち時間が増す。
機能を実行するプロセッサのステートが記憶されていない場合、モニタモードで割り込みを認めることが可能となる。割り込みの後で機能が再開されない場合に限り、このことを行うことができる。従って、安全に再開できる機能のモニタモードに限り割り込みを認めることによって、モニタモードにおける割り込み待ち時間の問題は解決できる。この場合、モニタモードにおけるインターラプトの後では機能の処理に関連するデータは捨てられ記憶されていないが、割り込みが終了してしまった時、最初からその機能の処理を開始することがプロセッサに命令される。上記例では、プロセッサはモニタモードに切り替わったポイントに単に戻るだけであるので、このことは簡単なことである。機能を再スタートすることは、再スタートできることが確実な機能に対してしか可能でなく、このことは、繰り返し可能な結果を生じさせることに留意すべきである。機能を再スタートしたときに異なる結果が生じるように、プロセッサのステータスを機能が変更した場合、機能を再スタートすることはよい考えではない。この理由から、モニタモードでは安全に再スタートできる機能しか割り込みできず、他の機能に対しては割り込みがディスエーブルされる。
図18は本発明の実施例に従ってモニタモードで生じる割り込みの取り扱い方法を示す。非安全モードにおいて、タスクAの処理中にSMIが生じると、これによってプロセッサはモニタモードに切り替えられる。SMI命令は専用の非安全SMIベクトルを通してコアをモニタモードにする。PCのそのときのステートがセーブされ、Sビットがセットされ、割り込みがディスエーブルされる。一般に非安全モードのPCおよびCPSRをセーブするのにLR_monおよびSPSR_monが使用される。
次にモニタモードにおいて、機能Cが開始される。まず機能Cが行うことは割り込みをイネーブルすることであり、次に機能Cが処理される。機能Cの処理中に割り込みが生じた場合、他の割り込みがディスエーブルされ、その割り込みは取り込まれ、実行される。しかしながら、モニタモードインジケータは割り込みの後で機能を再開すべきでなく、むしろ再スタートすべきであることをプロセッサに示す。これとは異なり、別個の制御パラメータによりこのことをプロセッサに表示してもよい。従って、割り込みの後でLR_monおよびSPSR_monの値により割り込み例外ベクトルが更新され、プロセッサのその時のステートは記憶されない。
図8に示されるように、割り込みタスク、すなわちタスクBの完了後にプロセッサは割り込みレジスタにコピーされたSMI命令のアドレスを読み出し、SMIを実行し、機能Cの処理を再びスタートする。
上記プロセスは機能Cが再スタート可能な場合にしか、すなわち再スタートプロセスCが繰り返し可能な処理ステップを生じる場合にしか働かない。これは、機能Cがプロセッサのステータス、例えば将来の処理に影響を与え得るスタックポインタのいずれかを変更したケースではない。このように、繰り返し可能な機能はベキ等性(idempotence)を有すると言われている。べき等性を有しない機能の問題を扱う1つの方法は、コードの最初の部分がべき等性を有するように機能を定めるコードを再配置することであり、べき等性を有するようにコードを配置することが不可能となってしまうと、割り込みはディスエーブルされる。例えばコードCがスタックへの書き込みに関係している場合、少なくとも最初にスタックポインタを更新することなくこれを行うことは可能である。コードを安全に再スタートできると予想できないと判断された場合、機能Cのためのコードは割り込みをディスエーブルすることをプロセッサに命令でき、コードはスタックポインタを正しい位置へ更新できる。このことは図18に示されており、図では機能Cの処理によるある方法によって割り込みをディスエーブルしている。
図19は若干異なる例を示す。この例ではタスクCの処理による方法であり、追加の制御パラメータがセットされる。このことは、固定ルーチンが最初に実行されると、厳密にはベキ等性ではないタスクCのその後の部分が安全に再スタートできることを示している。この固定ルーチンはプロセッサの状態をタスクCのスタート時の状態にリストアするように働くので、タスクCを安全に再スタートし、タスクCは割り込みされなかった場合と同じ、タスクの終了時のプロセッサ状態を発生できる。一部の実施例では別の制御パラメータをセットした時点で、例えばスタックポインタが更新されるようなプロセッサのステートが変更される、短期間の間割り込みをディスエーブルする。これによってプロセッサを後でべき等性状態にリストアすることが可能となる。
追加の制御パラメータがセットされた後に割り込みが生じると、2つの態様が進行し得る。(F1にて即座に固定ルーチンを実行し、割り込みを処理することもできるし、または即座に割り込みを処理し、割り込みが完了した後にSMIを実行し、次にタスクCの再スタートをする前に(F2にて)固定ルーチンを実行する。理解できるように、これら実施例のいずれにおいても、モニタモードで固定ルーチンを実行するので、安全ドメインまたはモニタモードを認識していない非安全ドメインにおける実行は影響を受けない。
図9から判るように、コードCの最初の部分はべき等性を有し、割り込みの後で再スタートできる。固定ルーチンが最初に実行されていることを条件に、第2部分は再スタート可能であり、このことは追加の制御パラメータをセットすることによって表示される。コードの最終部分は再スタートできないので、このコードを処理する前に割り込みがディスエーブルされる。
図20は別の実施例と異なる別の例を示し、この場合、モニタモード中に割り込みがイネーブルされる。モニタモードで実行中の機能はこれら機能を安全に再スタートできなくなると直ちに、これら割り込みをディスエーブルするように働く。このことはモニタモードで割り込みされたすべての機能が再開されるのではなく、再スタートされる場合に限り可能である。
割り込み時に、所定のモードで実行中のすべての機能を再開するのではなく再スタートすることを保証できるようにするいくつかの方法がある。1つの方法として割り込みが割り込まれた命令のアドレスではなく、命令シーケンスのスタートのアドレスをセーブする新しいプロセッサ状態を加えることが挙げられる。この場合、モニタモードは常にこのステートで実行される。別の方法は、各機能のスタート時に機能のスタートのアドレスを割り込み例外レジスタへあらかじめロードし、割り込みの後のプロセッサのステートの割り込み例外レジスタへの書き込みをディスエーブルすることである。
図20に示された実施例では、割り込み機能の終了直後に機能の再スタートを行ってもよいし、また機能を安全に再スタートできるようにすることが求められている場合には、固定ルーチンの後で再スタートを行ってもよい。
以上で安全および非安全ドメイン、ならびにモニタモードを有するシステムを参照して、割り込み待ち時間を取り扱う上記方法について説明したが、特定の理由により再開すべきでない機能を有するシステムにも明らかに適用できる。一般に、かかる機能は割り込み待ち時間を増すような割り込みをディスエーブルすることによって作動する。再スタート可能なように機能を変え、割り込みの後でこれら機能を再スタートするようにプロセッサを制御することによって、機能処理の少なくとも一部の間で割り込みをイネーブルすることが可能となり、かつ割り込みの待ち時間を小さくすることに役立つ。例えば作動システムの正常なコンテクストの切り替えに役立つ。
安全および非安全メモリへのアクセス
図1を参照して説明するように、データ処理装置はメモリを有する。このメモリは特にTCM36、キャッシュ38、ROM44、スレーブデバイスのメモリおよび外部メモリ56を含む。例として図37を参照して説明するように、メモリは安全メモリと非安全なメモリとに区分されている。一般には製造時にはメモリの安全メモリ領域と非安全なメモリ領域との物理的な区別はないが、これら領域は安全ドメインで作動する際のデータ処理装置の安全なオペレーティングシステムによって定義されることが理解できよう。従って、メモリデバイスの任意の物理的部分を安全メモリとして割り当て、別の物理的部分を非安全メモリとして割り当てることができる。
図2〜5を参照して説明するように、処理システムは安全ドメインと非安全ドメインとを有する。安全ドメインには安全なカーネルプログラム80が設けられ、このプログラムは安全モードで実行される。安全ドメインと非安全ドメインとをまたがるモニタプログラム72も設けられ、このプログラムは少なくとも部分的にモニタモードで実行される。本発明の実施例では、モニタプログラムは一部はモニタモードで実行され、一部は安全モードで実行される。例えば図120に示されるように、特にスーパーバイザーモードSVCを含む複数の安全モードがある。
モニタプログラム72は安全ドメインと非安全ドメイン間のいずれの方向への変更を管理する役割を果たす。「プロセッサモード」の章において、図8および9を参照して、これら機能の一部について説明する。モニタプログラムは前記非安全モードから前記安全モードへの切り替えを開始するために、非安全モードで発生されるモード切り替えリクエストSMIおよび前記安全モードから前記非安全モードへの切り替えを開始するために、安全モードで発生されるモード切り替えリクエストSMIに対する責任がある。「世界間の切り替え」という章で説明するようにモニタモードでは安全および非安全ドメインの1つから別のドメインへのレジスタの少なくとも一部の切り替えが行われる。この切り替えでは一方のドメイン内に存在するレジスタのステートがセーブされ、他方のドメインにあるレジスタへ新しいステートの書き込み(またはレジスタ内に前にセーブされたステートのリストア)が行われる。本明細書で説明したように、かかる切り替えの実行時にあるレジスタへのアクセスをディスエーブルしてもよい。モニタモードではすべての割り込みをディスエーブルすることが望ましい。
モニタプログラムの実行が安全ドメインと非安全ドメインにまたがっているモニタモードでは、モニタプログラムが検証可能に安全であること、すなわちモニタプログラムが実現しようとしている機能だけを実現することが重要である。従って、モニタプログラムをできるだけ簡単にすることが有利となる。安全モードは安全ドメインでしか処理を実行できないようにできる。本発明の本実施例では、特権安全モード(単数または複数)およびモニタモードは同じ安全メモリおよび非安全メモリへのアクセスを認めている。特権安全モードが同じ安全メモリおよび非安全メモリを「見る」ことを保証することによって、そうしない場合にモニタモードでしか実現できない機能を安全モードに移し、モニタプログラムを簡略化できる。更に、これによって特権安全モードで作動するプロセスを直接モニタモードに切り替え、この逆への切り替えを行うことができる。特権安全モードからモニタモードへの切り替えが認められ、モニタモードでは非安全ドメインへの切り替えを行うことができる。非特権安全モードはSMIを使ってモニタモードに入らなければならない。システムはリセットの後で特権安全モードに入る。ドメイン間を移動する際にステートのセーブを容易にするためにモニタモードと特権安全モードとの切り替えが行われる。
別の実施例では、安全特権モード内からもモニタモード内からもSフラグへのアクセスが認められる。プログラムフローの制御を維持する間、安全特権モードがプロセッサをモニタモードに切り替えることが認められる場合、かかる安全特権モードは既にSフラグ(ビット)を変える能力を有効に有している。従って、Sフラグをモニタモード内でしか変更できないことによる別の複雑性は正当化されない。その代わりに1つ以上の安全特権モードによって変更できる別のコンフィギュレーションフラグと同じようにSフラグを記憶できる。現在の技術には1つ以上の安全特権モード内でSフラグを変更できるかかる実施例が含まれる。
前に説明した実施例に戻ると、本装置はモードを定め、モードの特権レベル、すなわちモードが可能にする機能の組を定めるプロセッサコア10を含む。従って、プロセッサコア10は安全モードおよびモニタモードによる安全および非安全メモリへのアクセス、およびモニタモードがアクセスを認めるすべてのメモリへの安全モードによるアクセスを許可し、かつ特権安全モードで作動中のプロセスが直接モニタモードに切り替わり、かつこの逆の切り替えを許可するように、公知の態様で配置されている。プロセッサコア10は次のことを認めるようになっていることが好ましい。
装置の一例では、メモリは安全メモリと非安全メモリとに区分され、安全メモリと非安全メモリとの双方はモニタモードおよび安全モードでしかアクセスできない。非安全メモリはモニタモード、安全モードおよび非安全モードでアクセスできることが好ましい。
本装置の別の例では、モニタモードおよび1つ以上の安全モードにおいて、安全モードに対して非安全メモリへのアクセスが否定され、非安全モードにおいて、安全モードおよびモニタモードに対し非安全メモリへのアクセスが否定される。従って、安全メモリはモニタモードおよび安全モードでしかアクセスされず、非安全メモリは非安全モードでしかアクセスされないので、セキュリティが高まる。
本装置の例では、安全モードである特権モードよりも特権の大きいモードとして見なすことができるモニタモードでは、装置のリセットまたはブートを行うことができる。しかしながら、本装置の多くの例は、安全モードとモニタモードとの間で認められる直接切り替えにより可能な安全モードにおいてリセットまたはブートをするようになっている。
図2を参照して説明したように、安全ドメインおよび安全モードでは、安全カーネル80(またはオペレーティングシステム)が機能し、安全カーネル80のもとで1つ以上の安全アプリケーションプログラム82、84を実行できる。安全モードで作動する安全カーネルおよび/または安全アプリケーションプログラム、または他のプログラムコードは、安全メモリおよび非安全メモリの双方へのアクセスが認められる。
以上で、プロセッサを有する装置を参照して本発明の例について説明したが、適当なプロセッサで実行される際に、この章で説明したように作動するようプロセッサを構成するコンピュータプログラムによって本発明を実施してもよい。
プログラマーのモデル図から検討した本技術の別の実施例について、次のように図21〜23を参照して説明する。
次の説明では、英国ケンブリッジのARMリミティッド社によって設計されたARMプロセッサに関連して理解しなければならない次の用語を使用することにする。
−Sビット: 専用CP15レジスタ内に含まれる安全ステートビット
−「安全/非安全ステート」: このステートはSビットの値によって定められ、コアが安全な世界にアクセスできる(安全ステートのときにはS=1)かどうかを表示するか、または非安全な世界だけに制限される(S=0)。モニタモード(更に参照)はSビットのステータスを無効にする。
−「非安全な世界」: セキュリティを必要としない非安全アプリケーションへアクセスできるすべてのハードウェア/ソフトウェアのグループのことである。
−「安全な世界」: 安全コードを実行しているときにしかアクセスできないすべてのハードウェア/ソフトウェア(コア、メモリ...)のグループのことである。
−モニタモード: 安全ステートと非安全ステートとの間でコアを切り替える役割を果たす新しいモードである。
簡単な要約
−コアは常に非安全な世界にアクセスできる。
−コアは安全な世界が安全ステートまたはモニタモードとなっているときにしか、安全な世界にアクセスできない。
−SMI: ソフトウェアモニタ割り込みのことであり、専用SMI例外ベクトルを通してコアをモニタモードにさせる新しい命令である。
−「スレッドID」: (OSによって制御される)各スレッドに関連する識別子である。OSが非安全な世界で実行されるあるタイプのOSに対しては、安全機能が呼び出される度に、パラメータとして現在のスレッドIDをパスし、呼び出している非安全アプリケーションに安全機能をリンクさせなければならない。従って、安全な世界は多数のスレッドをサポートできる。
−安全割り込みは安全周辺機器が発生する割り込みを定める。
プログラマーのモデル
カーボンコアの概観
本技術を使用するプロセッサのために本明細書で使用する用語である、カーボンアーキテクチャなる概念は、安全な世界と非安全な世界の2つに分離することから成る。安全な世界はどんなデータも非安全な世界にリークしてはならないようになっている。
提案する解決案では、安全ステートと非安全ステートは同じ(現行の)レジスタバンクを共用する。結果としてARMコアに存在する現在のすべてのモード(Abort、Undef、Irq、User、....)は各ステートで存在することになる。
コアは専用CP15レジスタで示される新しいステートビット、すなわちS(安全)ビットにより安全ステートで作動するのか非安全ステートで作動するのかを知る。
Sビットを変えること、すなわちあるステートから別のステートへ変更することをどの命令またはイベントに許可するかを制御することは、このシステムのセキュリティのキーとなる特徴である。現在の解決案は新しいモード、すなわち2つのステートの切り替えをスーパーバイズするモニタモードを加えることを提案するものである。適当なCP15レジスタに書き込むことにより、モニタモードはSビットが変更することが認められる唯一のモードとなる。
最後に、例外ハンドリングに対するある程度のフレキシビリティを加えることを提案する。リセットとは別にして、すべての例外はそれが生じたステートにおいて取り扱われるか、またはモニタモードに向けられる。このことは専用CP15レジスタを構成可能な状態にしておくことを必要とする。
次のパラグラフで、この解決案の詳細について検討する。
プロセッサのステートおよびモード
カーボンアーキテクチャの新しい特徴
安全または非安全ステート(Sビット)
カーボンコアの主な特徴は、コアが安全ステート(S=1)または非安全ステート(S=0)にあるかどうかを表示するSビットが存在していることである。安全ステートにあるとき、コアは安全な世界または非安全な世界内のどのデータにもアクセスできる。非安全なステートにあるとき、コアは非安全な世界へのアクセスだけに限定される。
この規則への唯一の例外は、Sビット情報を無効にするモニタモードに関連している。S=0であってもコアがモニタモードにあると、コアは安全特権アクセスを実行する。更に情報を望む場合には次のパラグラフであるモニタモードを参照されたい。
モニタモードでのみSビットを読み出し/書き込みできる。Sビットの値がどんな値であっても、他のモードがこれにアクセスしようとする場合、これを無視するか、または結果としてUndef(未定義)例外が生じる。
リセットを除くすべての例外は安全ステートビットに影響しない、リセット時にSビットがセットされ、スーパーバイザーモードでコアがスタートする。更に詳細な情報を望む場合にはブートの章を参照されたい。
安全/非安全ステートは分離しており、ARM/Thumb/Java(R)ステートと独立に作動する。
モニタモード
カーボンシステムの別の重要な特徴は、新しいモード、すなわちモニタモードを形成することである。このモードは安全ステートと非安全ステートとの間のコアの切り替えを制御するのに使用される。このモードは常に安全モードと見なされる。すなわちSビットの値がどんな値であっても、コアがモニタモードにあると、外部世界への安全特権アクセスを常に実行する。
任意の安全特権モード(すなわちS=1のときの特権モード)はCPSRモードビット(MSR、MOVSまたは等価的命令)を書き込むだけで、モニタモードに切り替わることができる。しかしながら、このことは非安全モードまたは安全ユーザーモードでは禁止される。このことが起きた場合、命令を無視するか、または例外を生じさせる。
専用CPSR違反例外に対するニーズがあり得る。非安全モードまたは安全ユーザーモードからCPSRを直接書き込むことにより、モニタモードへ切り替える試みによってこの例外が生じる。
モニタモードがアクティブであるときにリセットを除くすべての例外は実際にはディスエーブルされる。
・すべての割り込みをマスクする。
・すべてのメモリ例外は無視されるか、または致命的例外を生じさせる。
・無定義/SWI/SMIは無視されるか、または致命的例外を生じさせる。
モニタモードに入ると、システムモニタの作動中に他のタイプの例外が生じないよう、割り込みは自動的にディスエーブルされ、システムモニタが書かれる。
モニタモードはプライベートレジスタを有しなければならない。この解決案は、レジスタの最初の組、すなわちR13(sp_mon)、R14(lr_mon)およびSPSR(spsr_mon)しかコピーしないことを提案するものである。
モニタモードでは、MPUまたはパーティションチェッカー(モニタモードは常に安全特権外部アクセスを実行する)と同様、MMUもディスエーブルする(フラットアドレスマップ)。しかしながら、特別にプログラムされたMPU領域の属性(キャッシュ可能性、...)はアクティブなままとなる。モニタモードが使用できる別の例として、安全ドメインによってどんなマッピングも使用できる。
新しい命令
この提案は現在のARM命令セットに1つの新しい命令を加えることを求める。
モニタモードに入れ、固定SMI例ベクトルで分岐するSMI(ソフトウェアモニタ割り込み)命令が使用される。この命令は主に非安全ステートと安全ステートとの間のスワップをするためのモニタに対する表示をするのに使用される。
別の例として(またはそれに加えて)、モニタモードがモニタスタックからの/モニタスタックへの他のモードのステートのセーブ/リストアを可能にし、コンテクストの切り替え性能を改善するための新しい命令を加えることができる。
プロセッサモード
前のパラグラフで説明したように、コアには新しい1つのモード、すなわちモニタモードしか追加されない。現在のすべてのモードは利用できる状態のままであり、安全ステートおよび非安全ステートの双方で存在する。
実際にはカーボンユーザーは図21に示される構造を見ることになる。
プロセッサのレジスタ
この実施例は、安全な世界と非安全な世界とが同じレジスタバンクを共用することを提案するものである。このことは、ある世界からモニタモードを通して別の世界に切り替わるときに、システムモニタは第1の世界のコンテクストをセーブし、第2の世界のコンテクストを発生(またはリストア)する必要があることを意味する。
パラメータをパスすることは容易なタスクとなる。システムがSビットを一旦切り替えると、第1の世界におけるレジスタに含まれるデータは第2の世界内の同じレジスタによって利用できるようになる。
しかしながら、厳密に制御する必要がある、パラメータをパスさせるための専用の限られた数のレジスタとは別に、安全ステートから非安全ステートへパスする際に他のすべてのレジスタをフラッシュさせ、安全データがリークする危険性を防止する必要がある。このことは、モニタカーネルによって保証しなければならない。
安全ステートから非安全ステートへの切り替え時にレジスタを直接フラッシュさせるハードウェア機構または新しい命令を実現する可能性も1つの可能性である。
提案する別の解決案は安全ステートと非安全ステートとの間で2つの物理的に分離されたレジスタバンクを有する現在のレジスタバンクのすべて(またはほとんど)を複製することである。この解決案はレジスタに含まれる安全データと非安全データとを明瞭に分離できるという主な利点を有する。更に安全ステートと非安ステートとの間で高速コンテクスト切り替えも可能にできる。しかしながら、欠点として、非安全レジスタにアクセスできるようにする幾つかの専用の命令を作成しなければ、パラメータがレジスタを通過するようにさせることが困難となることが挙げられる。
図22はプロセッサモードに応じた利用可能なレジスタを示す。ここでプロセッサのステートがこの主題には影響しないことに留意されたい。
例外
安全な割り込み
現在の解決案
現在のコア内に、例えばIRQおよびFIQと同じ割り込みピンを持たせることが現在提案されている。(本明細書で後に記載する)例外トラップマスクレジスタに関連し、異なる種類の割り込みを実現し、取り扱うシステムのために、フレキシビリティを十分にする必要がある。
VIC増強
次のように、VIC(ベクトル化された割り込みコントローラ)を増強することができる。このVICはベクトル化された各アドレスに関連した1つの安全情報ビットを含むことができる。このビットはモニタまたは安全特権モードでしかプログラムできない。このことは、検討する割り込みを安全として処理し、よって安全サイドで取り扱うべきか否かを示している。
2つの新しいベクトルアドレスレジスタも増設し得る。一方のレジスタは非安全ステートで生じるすべての安全割り込みのためのものであり、他方は安全ステートで生じるすべての非安全割り込みに対するものである。
CP15に含まれるSビット情報は新しいVIC入力としてVCIにも利用できる。
次の表は入進割り込みのステータス(各割り込みラインに関連する、Sビットにより表示される安全ステートまたは非安全ステート)およびコアのステート(CP15内のSビット=VCIでのS入力信号)に応じた異なる可能なシナリオを要約したものである。
例外取り扱いコンフィギュラビリティ
カーボンフレキシビリティを改善するためにCP15では新しいレジスタ、例外トラップマスクが追加される。このレジスタは次のビットを含むことになる。
− ビット0:Undef(未定義)例外 (非安全ステート)
− ビット1:SWI例外 (非安全ステート)
− ビット2:プリフェッチアボート例外 (非安全ステート)
− ビット3:データアボート例外 (非安全ステート)
− ビット4:IRQ例外 (非安全ステート)
− ビット5:FIQ例外 (非安全ステート)
− ビット6:SMI例外 (非安全ステートと安全ステ
ートの双方)
− ビット16:未定義例外 (安全ステート)
− ビット17:SWI例外 (安全ステート)
− ビット18:プリフェッチアボート例 (安全ステート)
− ビット19:データアボート例外 (安全ステート)
− ビット20:IRQ例外 (安全ステート)
− ビット21:FIQ例外 (安全ステート)
リセット例外はこのレジスタ内に対応するビットを有しない。リセットによって常にコアはその専用ベクトルを通して安全スーパーバイザーモードに入る。
ビットがセットされると、対応する例外によってコアはモニタモードとなる。そうでない場合、例外が生じた世界内の対応するハンドラー内で例外が処理される。
レジスタはモニタモードでしか見ることができない。その他のモードではこのレジスタにアクセスしようとする命令は無視されることになる。
システムがモニタをサポートしているか否かに応じて、このレジスタはシステム固有の値に初期化しなければならない。この機能はVICによって制御できる。
例外ベクトルテーブル
別個の安全な世界と非安全な世界とが設けられるので、別個の安全例外ベクトルの表と非安全例外ベクトルのテーブルを必要とする。
更にモニタがある例外もトラップできるので、我々はモニタ専用の第3の例外ベクトルテーブルも必要とする。次のテーブルは3つの異なる例外ベクトルのテーブルを要約するものである。
モニタモードでは各例外が2つの異なる関連ベクトルを有するように、例外ベクトルを複製してもよい。
− 非安全ステートで生じる例外用のベクトル
− 安全ステートで生じる例外用のベクトル
モニタカーネルは例外が生じた元のステートをそれ以上検出する必要はないので、このことは例外の時間待ちを少なくする上で有効である。
この特徴は数個の例外に制限されることに注意する必要がある。SMIは安全ステートと非安全ステートとの切り替えを採用する最も適当な候補の1つである。
世界間の切り替え
ステートを切り替える時、モニタモードはそのモニタスタックに最初のステートのコンテクストをセーブし、モニタスタックから第2のステートのコンテクストをリストアしなければならない。
従って、モニタモードはプライベートレジスタ(r14SPSR、....)を含む他のモードのレジスタにアクセスしなければならない。
これを処理するために、提案される解決案はSPSRを書き込むだけで直接モニタモードに切り替える権利を安全ステートにある特権モードに与えることである。
かかるシステムでは、次のように世界間の切り替えが実行される。
− モニタモードに入る。
− Sビットをセットする。
− スーパーモードに切り替え−モニタスタックにスーパーバイザーレジスタをセーブする(当然ながらスーパーバイザーモードはモニタスタックポインタにアクセスしなければならないが、これは例えば共通レジスタ(R0〜R8)を使用することにより容易に実行できる)。
− システムモードへ切り替え−モニタスタックに(ユーザーモードと同じ)レジスタをセーブする。
− すべてのモードに対し、モニタスタックにIRQレジスタをセーブする。
− すべてのモードのすべてのプライベートレジスタがセーブされると、簡単なMSR命令(=CPSRモードフィールドにモニタの値を単に書き込む)によりモニタモードへ戻る。
次のその他の解決案を検討する。
− モニタが自身のスタックに他のモードのプライベートレジスタをセーブできるようにする新しい命令を追加する。
− 例えば(適当なアクセス権を有するために)モニタステートとなり、IRQ(または他の)プライベートレジスタを見るためにIRQ(または他の)モードとなることができる新しい「ステート」としてモニタを実現する。
基本的なシナリオ(図23)
1.スレッド1が非安全な世界(Sビット=0)で作動中である。
このスレッドは安全な機能、=>SMI命令を実行しなければならない。
2.このSMI命令は非安全SMIベクトルによりコアをモニタモードにする。
LR_monおよびSPSR_monを使用して非安全モードのPCおよびCPSRをセーブする。
システムは安全ステートであるが、この段階ではSビットは変化しないままである。
モニタカーネルがモニタに非安全コンテクストをセーブする。モニタはLR_monおよびSPSR_monもプッシュする。
次にモニタカーネルはCP15レジスタに書き込みをすることにより、「S」ビットを変える。
この実施例では、モニタカーネルは(例えばスレッドIDテーブルを更新することにより)安全な世界で「安全スレッド1」をスタートさせる道を維持する。
最後に、モニタモードから出て安全スーパーバイザーモードに切り替わる(LR_monおよびSPSR_monを更新した後のMOVS命令)。
3.安全カーネルが正しい安全メモリのロケーションへアプリケーションを送り(例えばMOVSを使って)、ユーザーモードに切り替わる。
4.安全ユーザーモードで安全機能が実行される。一旦終了すると安全機能は適当なSWIを実行することにより「退出」機能を呼び出しする。
5.SWI命令は専用SWIベクトルによりコアを安全svcモードにし、次にコアは「退出」機能を実行する。この「退出」機能はモニタモードに戻すよう切り替えるための「SMI」により終了する。
6.SMI命令は専用安全SMIベクトルによりコアをモニタモードにする。
安全SVCモードのPCおよびCPSRをセーブするのにLR_monおよびSPSR_monを使用する。
Sビットは変わらないままである(例えば安全ステート)。
安全なスレッド1が終了した事実をモニタカーネルが登録する(スレッドIDテーブルから安全なスレッド1のIDを除く)。
モニタカーネルがCP15レジスタに書き込むことにより「S」ビットを変え、非安全ステートに戻る。
モニタカーネルがモニタスタックから非安全コンテクストをリストアする。モニタカーネルはステップ2で前にセーブされたLR_monおよびCPSR_monもロードする。
最後に、モニタカーネルはSUBSによりモニタモードから出る。このSUBSは命令時に非安全ユーザーモードにコアを戻す。
7.スレッド1を正常に再開できる。
図6を参照する。安全ドメインと非安全ドメインの間ですべてのレジスタを共用する。モニタモードでは安全および非安全ドメインの一方から他方のドメインへレジスタを切り替える切り替えが行われる。この切り替えでは、上記「世界間の切り替え」の章でも説明したように、あるドメインで存在するレジスタのステートをセーブし、他のドメインにあるレジスタに新しいステートを書き込む(またはレジスタに前にセーブされたステートをリストアする)。
この切り替えを実行するのにかかる時間を短縮するのが好ましい。切り替えにかかる時間を短縮するために安全ドメインと非安全ドメインとの間の切り替え時に共用レジスタをディスエーブルし、内部に記憶されているデータの値を変えないように維持する。例えば非安全ドメインから安全ドメインへの切り替えを検討する。例えば図6に示されたFIQレジスタは安全な世界では必要でないと仮定する。従って、これらレジスタはディスエーブルされ、これらレジスタを安全ドメインに切り替え、これらレジスタの内容をセーブする必要はない。
レジスタのディスエーブル化はいくつかの方法で行うことができる。1つの方法はこれらレジスタを使用するモードをロックすることである。この方法は、モードのディスエーブルを指示するCP15レジスタ内の制御ビットを書き込むことによって行われる。
これとは異なり、再びCP15レジスタ内の制御ビットを書き込むことにより、命令に基づいて命令によるレジスタへのアクセスをディスエーブルしてもよい。CP15レジスタに書き込まれるビットはモードではなくレジスタに明らかに関係しているので、モードはディスエーブルされず、このモードにおけるレジスタへのアクセスがディスエーブルされる。
FIQレジスタは高速割り込みに関連するデータを記憶する。FIQレジスタ(単数または複数)がディスエーブルされ、高速割り込みが生じた場合、プロセッサはモニタ内で例外の信号を出す。この例外に応答し、モニタモードは、あるドメインに関連し、前記ディスエーブルされたレジスタに記憶されているデータ値をセーブし、かつ他のドメインに関連する新しいデータ値をそのレジスタにロードし、FIQモードレジスタを再イネーブルするようになっている。
モニタモードにおいてプロセッサがドメインを切り替える際にすべてのバンク状レジスタがディスエーブルされるようにプロセッサを構成してもよい。これとは異なり、ドメインを切り替える際に共用レジスタの所定の一部がディスエーブルされ、他のレジスタをプログラマーの選択でディスエーブルできるように、レジスタのディスエーブル化を選択的にしてもよい。
モニタモードでドメインを切り替える際に共用レジスタの1つ以上をディスエーブルし、共用レジスタの1つ以上の他のレジスタはあるドメインから出る際にセーブされたデータを有し、他のドメインにロードされる新しいデータを有するようにプロセッサを構成してもよい。この新しいデータをヌルデータとしてもよい。
図24は従来のARMコアに安全処理オプションを追加する原理を略図で示すものである。この図は現在のコアに安全処理オプションを追加することによって、安全処理オプションを含むプロセッサをどのように形成できるかを略図で示している。システムを既存の従来オペレーティングシステムと後方コンパーチブルにすべき場合、プロセッサの従来の非安全部分で作動する従来システムを考えることが直感的である。しかしながら、図の下方部分に略図に示され、後に詳細にされるように、実際には従来システムはシステムの安全部分で作動する。
図25は安全および非安全ドメインを有し、リセットを示すプロセッサを示し、図25は図2に類似している。図2は安全ドメインにおける処理を制御する安全OSシステムおよび非安全ドメインにおける処理を制御する非安全OSシステムによるセキュリティに応答するタイプのオペレーションを実行するようになっているプロセッサを示す。しかしながら、このプロセッサは伝統的な従来オペレーティングシステムと後方コンパーチブルでもあり、従ってプロセッサは従来オペレーティングシステムを使用してセキュリティに影響されないように作動できる。
図25に示されるように、リセットは安全ドメイン内であり、Sビット即ちセキュリティステータスフラグのセットと共にどんなタイプのオペレーションリセットも生じる。セキュリティに影響されないタイプのオペレーションの場合、安全ドメイン内でリセットが生じ、安全ドメイン内で処理が進む。しかしながら、処理を制御する従来のオペレーティングシステムはシステムのセキュリティの特徴については知らない。
図25に示されるように、処理をセキュリティに影響されるようにすべきか、または実際にセキュリティに影響されないようにすべきかに応じて、安全スーパーバイザーモード内の処理をスタートするアドレスを設定するようにリセットが実行される。一旦リセットが実行された場合、ブート機構またはリブート機構に存在する別のタスクが実行される。このブート機構について以下に説明する。
ブート機構
ブート機構は次の特徴を考慮しなければならない。
− 従来のOSとのコンパチビリティを維持すること
− ほとんどの特権モードにおいてシステムのセキュリティを保証するようにブートすること。
結果として安全スーパーバイザーモードでカーボンコアがブートする。
別のシステムは次のようになる。
− 従来のOSを実行するシステムに対してはSビットは考慮されず、コアはスーパーバイザーモードでブートするように見せる。
− カーボンの特徴を利用するシステムに対しては、コアは(潜在的にはモニタモードにスワップした後に)システム内のすべての安全保護を構成できなければならない安全特権モードでブートする。
上記ブート機構の詳細について、本発明の実施例のプロセッサはいずれのケースにおいても安全スーパーバイザーモードにおける処理をスタートさせるようにプロセッサをリセットする。セキュリティに影響されないタイプのオペレーションの場合、Sビットがセットされる(しかしながらオペレーティングシステムはこのことは知らない)ので、セキュリティはここでは問題とならないが、オペレーティングシステムは実際には安全ドメインで作動する。このことには、非安全ドメインからアクセスできないメモリ部分にこの状況でアクセスできるという利点がある。
すべてのケースにおける安全スーパーバイザーモードでのブートは、システムのセキュリティを保証するのに役立つので、セキュリティに影響されるシステムでは有利である。安全に影響されるシステムでは、安全スーパーバイザーモードでブートプログラムが記憶される場所をブート時に提供されるアドレスがポイントするので、このアドレスはシステムを安全システムとして構成し、モニタモードへの切り替えを可能にする。安全スーパーバイザーモードからモニタモードへの切り替えは一般に許可され、これによって適当な時間における安全システムがモニタモードでの処理を開始するのを可能にし、モニタモードのコンフィギュレーションを初期化できる。
図26は、ステップ1で、非安全オペレーティングシステムにより非安全スレッドNSAが実行されることを示している。ステップ2において、非安全スレッドNSAはステップ3でモニタモードプログラムを実行するモニタモードを通して安全ドメインを呼び出す。モニタモードプログラムはドメインを切り替えるためにSビットを変え、ステップ5で安全オペレーティングシステムに移る前に必要なコンテクストのセーブおよびコンテクストのリストアを実行する。次に、ステップ6で割り込みIRQを受ける前に対応する安全スレッドSAが実行される。この割り込み取り扱いハードウェアはステップ7におけるモニタモードへのリターンをトリガーし、このステップ7では割り込みを安全オペレーティングシステムによって取り扱うのか、非安全オペレーティングシステムによって取り扱うのかが判断される。この場合、割り込みはステップ9でスタートする非安全オペレーティングシステムによって取り扱われる。この割り込みが非安全オペレーティングシステムによって取り扱われた場合、ステップ11にて正常なスレッド切り替え動作の前に非安全スレッドNSAは非安全オペレーティングシステムにおける現在のタスクとして再開される。このスレッドの切り替えはタイミングイベントまたは同様なことの結果となり得る。ステップ12において、非安全オペレーティングシステムにより非安全ドメインで異なるスレッドNSAが実行され、次にステップ14にてモニタドメイン/プログラムにより安全ドメインへの呼び出しがなされる。ステップ7は安全スレッドが実行を終了したため、または通常のリクエストが残されたことに起因して残されるというよりも、割り込みの結果として安全オペレーティングシステムが最後にサスペンドされた旨を表示するための、別の機構で使用されたフラグを記憶する。従って、安全オペレーティングシステムは割り込みによってサスペンドされるので、ステップ10におけるモニタプログラムはリターンスレッドID(例えば非安全スレッドNSBだけでなく他のパラメータデータによってリクエストされる安全オペレーティングシステムによってスタートすべきスレッドの識別子)を指定する、ソフトウェア疑似割り込みを使って安全オペレーティングシステムを再入力する。ソフトウェア疑似割り込みのこれらパラメータはレジスタの値としてパスできる。
ステップ15において、ソフトウェア疑似割り込みはステップ15における安全オペレーティングシステムのリターン割り込みハンドラールーチンをトリガーする。このリターン割り込みハンドラールーチンはソフトウェア疑似割り込みのリターンスレッドIDを検査し、このIDがサスペンションの前に安全オペレーティングシステムが実行された最後のときに割り込まれた安全スレッドSAのスレッドIDに一致するかどうかを判断する。この場合、一致がないので、安全スレッドSAのコンテクストがセーブされた後で非安全スレッドNSBによって指定されたリターンスレッドへのスレッドの切り替えを実行するようステップ16で安全オペレーティングシステムがトリガーされる。この安全スレッドSAは、必要な場合に割り込みがなされたポイントから後で再スタートできる。
図27は図26に示されたタイプの挙動の別の例を略図で示す。この例ではirqを取り扱うために非安全オペレーティングシステムの制御により処理が進行するが、非安全スレッドの切り替えはないので、安全オペレーティングシステムのリターン割り込みハンドラーによってソフトウェア疑似割り込みが受信されると、リターン割り込みハンドラーはスレッド切り替えが不要であると判断し、ステップ15で安全スレッドSAを単に再開するだけである。
図28は、リターンスレッドハンドラーによって実行される処理を略図で示すフローチャートである。ステップ4002において、リターンスレッドハンドラーがスタートされる。ステップ4004において、ソフトウェア疑似割り込みからのリターンスレッド識別子が検査され、安全オペレーティングシステムがサスペンドされたときに現在実行中の安全スレッドと比較される。これらが一致した場合、処理はステップ4006に進み、このステップで安全スレッドが再開される。ステップ4004における規格が一致しなければ、処理はステップ4008に進み、ステップ4010で新しい安全スレッドへの切り替えが行われる前に(その後の再開のために)ステップ4008にて旧い安全スレッドのコンテクストがセーブされる。この新しいスレッドは既に途中となり得るので、ステップ4010は再開となる。
図29は、スレーブ安全オペレーティングシステムがマスター非安全オペレーティングシステムにより実行されるタスク切り替えに従うことができるようにする処理を略図で示す。マスター非安全オペレーティングシステムは他のオペレーティングシステムにその活動を伝え、コーディネートするための機構を有しない従来のオペレーティングシステムでよいので、マスターとしてしか作動しない。図29における最初の入力ポイントのように、非安全オペレーティングシステムは非安全スレッドNSAを実行する。この非安全スレッドNSAはソフトウェアの割り込みを使用する安全オペレーティングシステムにより実行すべき安全スレッドへの呼び出し、SMI呼び出しを行う。このSMI呼び出しはステップ2でモニタモードで実行されるモニタプログラムに進み、ステップ4にて安全オペレーティングシステムに呼び出しを送る前にステップ2にてモニタプログラムは必要なコンテクストセービングおよび切り替えを実行する。次に安全オペレーティングシステムは対応する安全スレッドSAをスタートさせる。この安全スレッドはタイマーイベントなどの結果として、モニタモードを介して非安全オペレーティングシステムへ制御をリターンしてもよい。ステップ9にて非安全スレッドNSAが再び制御を安全オペレーティングシステムへ送る際に、このNSAは元のオリジナル割り込みを再発行することによってこれを行う。ソフトウェア割り込みがNSAを識別する非安全スレッドID、起動すべき目標安全スレッドのスレッドID、すなわち安全スレッドSAを識別するスレッドIDだけでなく、他のパラメータも含む。
ステップ9で発生された呼び出しがモニタプログラムによってパスされ、安全オペレーティングシステムにより安全ドメイン内でステップ12で受信されると、オペレーティングシステムによりコンテクスト切り替えがあったかどうかを判断するように、非安全スレッドIDを検査できる。目標スレッドの安全スレッドIDも検査し、安全オペレーティングシステム下の正しいスレッドが新しいスレッドとして再スタートまたはスタートされたかどうかを見ることもできる。図29の例では、安全ドメインで安全オペレーティングシステムによりスレッド切り替えは必要とされない。
図30は図29に類似するが、非安全オペレーティングシステムの制御により非安全ドメイン内でステップ9でスレッドの切り替えが行われる点で異なっている。従って、ステップ11で安全オペレーティングシステムにソフトウェア割り込み呼び出しを行うのは別の非安全スレッドNSBである。ステップ14において、オペレーティングシステムは非安全スレッドNSBの別のスレッドIDを認識し、従って、安全スレッドSAのコンテクストをセーブし、安全スレッドSBをスタートさせるタスク切り替えを実行する。
図31は安全オペレーティングシステムのスレッドをスタートさせるか、または再開させるための呼び出しとして、ソフトウェア割り込みを受信したときに安全オペレーティングシステムが実行する処理を略図で示すフローチャートである。ステップ4010にて呼び出しが受信される。ステップ4014において、パラメータが安全オペレーティングシステムでの現在アクティブな安全スレッドと一致しているかどうかを判断するために呼び出しのパラメータが検査される。一致していれば、ステップ4016にてこの安全スレッドが再スタートされる。一致していなければ、処理はステップ4018へ進み、ここで新しくリクエストされたスレッドが利用できるかどうかの判断をされる。新しくリクエストされたスレッドが安全オペレーティングシステムで実行されている他のあるスレッドによって既に使用されている排他的リソースであるか、またはこのような排他的リソースを必要とするような理由により、利用できない場合がある。かかるケースでは、ステップ4020にて呼び出しが拒否され、非安全オペレーティングシステムへ適当なメッセージがリターンされる。ステップ4018において、新しいスレッドが利用できると判断された場合、処理はステップ4022へ進み、このステップにて旧い安全スレッドのコンテクストが後に起こり得る再開のためにセーブされる。
ステップ4024にて、安全オペレーティングシステムに対して行われたソフトウェア割り込み呼び出しで指定された新しい安全スレッドへの切り替えが行われる。
図32は異なる割り込みが異なるオペレーティングシステムにより処理される多数のオペレーティングシステムを有するシステム内で割り込みを取り扱う際に、優先権の反転ができるようにする作動を略図で示す。
安全オペレーティングシステムが安全スレッドSAを実行する状態で処理がスタートする。この処理は第1の割り込みInt1によって割り込みがされる。これによりモニタモード内のモニタプログラムがトリガーされ、割り込みを安全ドメインまたは非安全ドメインで処理するのか否かが判断される。この場合、割り込み安全ドメイン内で処理すべきであり、処理は安全オペレーティングシステムに戻り、割り込みInt1のための割り込み取り扱いルーチンがスタートされる。Int1のための割り込み取り扱いルーチンの実行の途中において、より高い優先権を有する別の割り込みInt2が受信される。従って、Int1のための割り込みハンドラーが停止され、割り込みInt2を取り扱うかどうかの判断をするために、モニタモードのモニタプログラムが使用される。この場合、割り込みInt2は非安全オペレーティングシステムにより処理すべきであるので、制御は非安全オペレーティングシステムに移り、Int2のための割り込みハンドラーがスタートされる。割り込みInt2のためのこの割り込みハンドラーが完了したときに、非安全オペレーティングシステムは安全ドメイン内でサービスがサスペンドされたペンディング中の割り込みInt1があることを示す情報を有していない。従って、非安全オペレーティングシステムはある別の処理、例えば別の非安全スレッドNSBのタスクの切り替えまたはスタートを実行できるが、元の割り込みInt1はサービスを受けないままである。
図33は図32の動作に関連した問題を解消できるようにした技術を示す。割り込みInt1が生じると、モニタプログラムはこの割り込みを非安全ドメインへ送り、このドメインでスタブ割り込みハンドラーが開始される。このスタブ割り込みハンドラーは比較的小さく、モニタモードを介して安全ドメインへ迅速に処理を戻し、安全ドメイン内で割り込みInt1のための割り込みハンドラーをトリガーする。この割り込みInt1は主に安全ドメイン内で処理され、安全ドメイン内で割り込みがペンディング中であることを非安全ドメインに示すための、あるタイプのプレイスホルダーとして、非安全ドメインにおけるスタブ割り込みハンドラーの開始を見なすことができる。
割り込みInt1のための安全ドメイン内の割り込みハンドラーは再び高い優先権のInt2を受ける。これによって前と同じように、非安全ドメインにおいてInt2のための割り込みハンドラーの実行がトリガーされる。しかしながらこの場合、Int2のための割り込みが終了したときに、非安全オペレーティングシステムは割り込みInt2のためのスタブ割り込みハンドラーがまだ未処理であることを示すデータを有しているので、このスタブ割り込みハンドラーを再開する。このスタブ割り込みハンドラーは安全ドメインへの呼び出しバックが行われたポイントで、あたかもサスペンドされているように見えるので、この呼び出しが再実行され、従って、安全ドメインへの切り替えが行われる。一旦安全ドメインへ戻ると、安全ドメイン自身は割り込みのInt1がサスペンドされたポイントで割り込みInt1のための割り込みハンドラーを見ずから再スタートできる。安全ドメイン内で割り込みInt1のための割り込みハンドラーが完了すると、非安全ドメインへの呼び出しバックが行われ、最初に実行中の安全スレッドSAが再開される前に、非安全ドメインにおいてスタブ割り込みハンドラーをクローズする。
図34は関連する優先権を有する異なるタイプの割り込みおよびこれら割り込みをどのように取り扱うことができるかを略図で示している。純粋に安全なドメインの割り込みハンドラーを使って高い優先権の割り込みを処理できるが、これを行うには非安全ドメインによって取り扱われるそれよりも高い優先権の割り込みがないことが条件となる。非安全ドメインで取り扱われ、その後の割り込みよりも高い優先権を有する割り込みがあると、それよりも低いすべての割り込みは純粋に非安全ドメイン内で取り扱うか、または図33に示されるスタブ割り込みハンドラー技術を利用し、安全ドメイン内で主要取り扱いが生じても非安全ドメインがこれら割り込みを追跡できるようにしなければならない。
前に述べたように、安全ドメインと非安全ドメインとの切り替えを実行するのにモニタモードが使用される。2つの異なるドメインの間でレジスタを共用する実施例では、このような共用を行うにはレジスタ内のステートをメモリにセーブし、メモリからそれらレジスタに宛て先ドメインのための新しいステートをロードする。2つのドメイン間で共用されないレジスタに対してはステートをセーブする必要はない。その理由は、これらレジスタは他のドメインによりアクセスされることがなく、ステート間の切り替えは安全ドメインと非安全ドメインとの切り替えの直接の結果として実現される(すなわちCP15レジスタのうちの1つに記憶されているSビットの値が、共用されないレジスタのどれを使用するかを判断する)からである。
モニタモード中に切り替える必要のあるステートの部分は、プロセッサによるメモリへのアクセスを制御するプロセッサコンフィギュレーションデータである。各ドメイン内には異なる表示のメモリがあるので、例えば安全データを記憶するための安全メモリにアクセスする安全ドメインがあり、非安全ドメインからこの安全メモリへはアクセスできないので、ドメインの切り替えを行う際にはプロセッサコンフィギュレーションデータを変える必要が生じることが明らかである。
図35に示されるように、CP15レジスタ35内にはこのプロセッサコンフィギュレーションデータが記憶されており、一実施例ではドメイン間でこれらレジスタが共用される。従って、安全ドメインと非安全ドメインとの間でモニタモードが切り替えられるとき、そのときにCP15レジスタ34内にあるプロセッサコンフィギュレーションデータはCP15レジスタからメモリへ切り替える必要があり、宛て先ドメインに関連するプロセッサコンフィギュレーションデータをCP15レジスタ34にロードする必要がある。
CP15レジスタ内にあるプロセッサコンフィギュレーションデータは一般に、システム内のメモリへのアクセスに直接的な効果を有するので、モニタモードで作動している間にこれら設定をプロセッサが更新する際に、これら設定は即座に有効となることは明らかである。しかしながら、このことは望ましいことではない。その理由は、モニタモード中にメモリのアクセスを制御するプロセッサコンフィギュレーションデータのスタティックな組をモニタモードが有することが望ましいからである。
従って図35に示されるように、本発明の一実施例では、プロセッサがモニタモードで作動している間にCP15レジスタ34内のプロセッサコンフィギュレーションデータを無効にするのに使用できる、モニタモード固有のプロセッサコンフィギュレーションデータ2000が設けられている。図35に示された実施例では、このことはマルチプレクサ2010を設けることによって達成され、マルチプレクサはCP15レジスタ内に記憶されたプロセッサコンフィギュレーションデータとモニタモード固有のプロセッサコンフィギュレーションデータ2000の双方を入力端で受信する。更にこのマルチプレクサ2010はプロセッサがそのときにモニタモードで作動しているのか否かを表示する制御信号をパス2015として受信する。プロセッサがモニタモードで作動していない場合、CP15レジスタ34内のプロセッサコンフィギュレーションデータがシステムに出力されるが、プロセッサがモニタモードで作動している場合、その代わりにマルチプレクサ2010はモニタモード固有のプロセッサコンフィギュレーションデータ2000を出力し、プロセッサがモニタモードで作動している間、一貫した組のプロセッサコンフィギュレーションデータが加えられることを保証する。
このモニタモード固有のプロセッサコンフィギュレーションデータをシステム内でハードコピーし、よってデータを処理できないようにすることができる。しかしながら、プロセッサが安全特権モードで作動しているときにモニタモード固有のプロセッサコンフィギュレーションデータは、プロセッサによってしか変えられないことを条件にセキュリティと妥協することなく、モニタモード固有のプロセッサコンフィギュレーションデータ2000をプログラム可能にすることができる。このようにすることによってモニタモード固有のプロセッサコンフィギュレーションデータの設定に関し、若干のフレキシビリティが認められる。モニタモード固有のプロセッサコンフィギュレーションデータがプログラムできるようになっている場合、このコンフィギュレーションデータをシステム内の適当な場所、例えばCP15レジスタ34内のレジスタの別個の組内に記憶することができる。
一般に、このモニタモード固有のプロセッサコンフィギュレーションデータはモニタモードでのプロセッサの作動に対し、極めて安全な環境を提供するように設定される。従って、上記実施例ではモニタモード固有のプロセッサコンフィギュレーションデータはプロセッサがモニタモードで作動中にメモリ管理ユニット30がディスエーブルすることを指定し、よって仮想アドレス−物理アドレス変換をディスエーブルする。ディスエーブルしなかった場合、この変換はメモリ管理ユニットにより実施される。かかる状況ではプロセッサはメモリアクセスリクエストを発生する際に常に物理アドレスを直接発生するようになっている。すなわちフラットなマッピングが使用される。これによって仮想アドレス−物理アドレスマッピングに対して不正な操作が行われたかどうかにかかわらず、プロセッサはモニタモードの作動中に確実にメモリにアクセスできる。
モニタモード固有のプロセッサコンフィギュレーションデータはプロセッサがモニタモードで作動中にプロセッサが安全データにアクセスできるようにすることも一般に指定する。このことは、ドメインステータスビット状をしたメモリ許可データによって指定することが好ましく、このドメインステータスビットは完全プロセッサコンフィギュレーションデータ内の対応するドメインステータスビット(Sビット)に対して指定されるのと同じ値を有する。従ってCP15レジスタ内に記憶されるドメインステータスビットの実際の値にかかわらず、この値はポインタモードが安全データにアクセスするのを保証するよう、ポインタモード固有のプロセッサコンフィギュレーションデータによって指定されるドメインステータスビットによって無効状態となる。
モニタモード固有のプロセッサコンフィギュレーションデータはメモリの部品へのアクセスを制御するのに使用される他のデータも指定できる。例えばモニタモード固有のプロセッサコンフィギュレーションデータはプロセッサがモニタモードで作動中にデータにアクセスするのにキャッシュ38を使用すべきでない旨を指定できる。
上記実施例ではプロセッサコンフィギュレーションデータを含むCP15レジスタのすべてが、ドメインの間で共用されると仮定されている。しかしながら別の実施例では、例えばプロセッサコンフィギュレーションデータの特定のアイテムを記憶するのに2つのレジスタが設けられるように、多数のCP15レジスタがバンク状となっている。すなわち1つのレジスタが非安全ドメインでアクセス可能であり、非安全ドメインのためのプロセッサコンフィギュレーションデータのそのアイテムの値を含み、他方のレジスタが安全ドメインでアクセス可能であり、安全ドメインのためのプロセッサコンフィギュレーションデータの値を含むようになっている。
バンク状ではない1つのCP15レジスタはSビットを含むレジスタであるが、基本的には所望すれば他方のCP15レジスタのいずれもバンク状にすることができる。かかる実施例ではモニタモードによるプロセッサコンフィギュレーションデータの切り替えは共用CP15レジスタがその共用されているレジスタに現在記憶されているプロセッサコンフィギュレーションデータをメモリに切り替え、宛て先ドメインに関連するプロセッサコンフィギュレーションデータを共用されているCP15レジスタにロードすることを行う。バンク状レジスタに対し、プロセッサコンフィギュレーションデータはメモリに記憶させる必要はなく、むしろ対応する共用されているCP15レジスタに記憶されているSビットの値を変えた結果として自動的に切り替えが行われる。
前に述べたように、モニタモードプロセッサコンフィギュレーションデータは対応するCP15レジスタに記憶されたデータを無効にするドメインステータスビットを含むが、安全ドメインで指定されたドメインステータスビットに対して使用された値と同じ値(すなわち上記実施例では1のSビット値)を有する。多数のCP15レジスタがバンク状となっているとき、このことは図35内のモニタモード固有のプロセッサコンフィギュレーションデータ2000の少なくとも一部をバンク状レジスタ内に記憶されている安全プロセッサコンフィギュレーションデータから発生できることを意味する。その理由は、このレジスタの内容は切り替え中にメモリへ書き込まれることがないからである。
従って、一例としてモニタモード固有のプロセッサコンフィギュレーションデータは無効にすべきドメインステータスビットを指定し、無効にしない場合、このビットはモニタモードではないときに使用され、一実施例ではこのビットは安全ドメインで使用された値と同じ値を有するので、このことはバンク状CP15レジスタのうちのいずれがアクセス可能であるかを選択する論理回路により、安全なバンク状CP15レジスタにアクセスできるようになることを意味する。モニタモード固有のプロセッサコンフィギュレーションデータの対応する部分として、モニタモードがこの安全プロセッサコンフィギュレーションデータを使用できることにより、リソースでのセーブを実現できる。その理由は、モニタモード固有のプロセッサコンフィギュレーションデータのアイテムに対してレジスタの別個の組を設ける必要がないからである。
図36は一方のドメインと他方のドメインとの間の切り替えが必要なときの、プロセッサコンフィギュレーションデータを切り替えるのに実行されるステップを示すフローチャートである。前に述べたように、ドメイン間の切り替えを誘導するのに、SMI命令が発生される。従って、ステップ2020ではSMI命令の発生が待たれる。SMI命令が受信されると、プロセッサはステップ2030に進み、このステップでプロセッサはモニタモードでのモニタプログラムの実行を開始する。これによってモニタモード固有のプロセッサコンフィギュレーションデータはマルチプレクサ2010へのパス2015上の制御回路の結果として使用され、マルチプレクサはそのモニタモード固有のプロセッサコンフィギュレーションデータを切り替える。前に述べたように、このデータはデータのうちの自ら含まれる組でもよいし、またデータの所定の部分はバンク状レジスタに記憶された安全プロセッサコンフィギュレーションデータから発生されたものでもよい。
その後、ステップ2040にてメモリへSMI命令を発生するドメインからそのときのステートがセーブされる。このセーブはそのドメインに対応するプロセッサコンフィギュレーションデータのステートを共用されているCP15レジスタからセーブすることを含む。一般に、かかるステートを記憶するのに、別にメモリの組の一部が設けられる。次に、ステップ2050にて、ステートポインタは宛て先ドメインのための対応するステートを含むメモリ部分へのポイントへ切り替えられる。従って、一般にステート情報を記憶するのにメモリの2つの部分が割り当てられる。すなわち非安全ドメインのためのステートを記憶するのに1つの部分が割り当てられ、安全ドメインに対するステートを記憶するのに別の部分が割り当てられる。
ステップ2050にて、ステートポインタが一旦切り替えられると、ステートポインタによってポイントされていたステートがステップ2060で対応する共用CP15レジスタへロードされる。このローディングでは宛て先ドメインのための対応するプロセッサコンフィギュレーションデータのロードが行われる。その後、ステップ2070にてモニタモードのようにモニタプログラムが附勢され、次にプロセッサは宛て先ドメインにおける必要なモードへ切り替わる。
図37は、本発明の一実施例のメモリ管理ロジック30の作動をより詳細に示す。このメモリ管理ロジックはメモリ管理ユニット(MMU)200と、メモリ保護ユニット(MPU)220とから成る。仮想アドレスを指定するコア10が発生するメモリアクセスリクエストはパス234を通してMMU200へ送られる。このMMU200は所定のアクセス制御機能、特に仮想アドレスに対応する物理アドレスの決定およびアクセス許可権を分析したり、領域の属性を決定したりする役割を果たす。
データ処理装置のメモリシステムは安全メモリと非安全メモリとから成り、安全メモリはコア10または他のデバイスが安全作動モードで作動し、従って安全ドメインで作動しているときに、コア10または1つ以上のマスターデバイスしかアクセスできないようになっている安全データを記憶するのに使用される。
図37に示された本発明の実施例では、非安全モードでコア10上で実行中のアプリケーションにより、安全メモリ内の安全データへアクセスしようとする試みの規制がMPU220内のパーティションチェッカー222によって実行され、このMPU220は本明細書で安全カーネルとも称される安全オペレーティングシステムによって管理されている。
本発明の好ましい実施例によれば、非安全メモリ、例えば外部メモリ56の非安全メモリ部分内に非安全ページテーブル58が設けられ、このテーブルはそのページテーブル内に定められた多数の非安全メモリ領域の各々に対して、対応するデスクリプタを記憶するのに使用される。このデスクリプタは情報を含み、この情報からMMU200はこのMMUが所定のアクセス制御機能を実行できるようにするのに必要なアクセス制御情報を発生でき、従って、図37を参照して説明した実施例では、仮想アドレス−物理アドレスマッピング、アクセス許可権および任意の領域属性に関する情報を提供する。
更に本発明の好ましい実施例によれば、メモリ領域のうちの安全メモリ内、例えば外部メモリ56の安全部分内に少なくとも1つの安全ページテーブル58が設けられ、このテーブルはこのテーブル内に定められた多数のメモリ領域に対して再び関連するデスクリプタを提供する。プロセッサが非安全モードで作動しているときに、メモリアクセスを管理するのに使用するための対応するデスクリプタを得るために、非安全ページテーブルが参照されるが、プロセッサが安全モードで作動しているときには安全ページテーブルからのデスクリプタが使用されることになる。
対応するページテーブルからMMUへのデスクリプタの検索は次のように進む。コア10が発生したメモリアクセスが仮想アドレスを指定した場合、多数の仮想アドレス部分のうちの1つに対し、対応するページテーブルから得られた対応する物理アドレス部分を記憶するマイクロTLB206内でルックアップが実行される。従って、マイクロTLB206は仮想アドレスの所定部分とマイクロTLB内に記憶された対応する仮想アドレス部分とを比較し、一致があるかどうかを判断する。比較された部分は一般に仮想アドレスの所定の数の最大桁ビットとなる。このビット数はページテーブル58内のページの粒度に応じて決まる。マイクロTLB206は比較的少数のエントリー、例えば8個のエントリーしか含まないので、マイクロTLB206内で実行されるルックアップは一般に比較的短時間である。
マイクロTLB206内で一致が見いだされない場合、ページテーブルから得られた多数のデスクリプタを含む主TLB208へパス242を通してメモリアクセスリクエストが送られる。後により詳細に説明するように、主TLB208内には非安全ページテーブルと安全ページテーブルの双方からのデスクリプタが共存することができ、主TLB内の各エントリーはそのエントリー内の対応するデスクリプタが安全ページテーブルから得られたものか、または非安全ページテーブルから得られたものかどうかを表示するように設定できる対応するフラグ(本明細書ではドメインフラグと称す)を有する。すべての安全作動モードがメモリアクセスリクエスト内に直接物理アドレスを指定する実施例では、主TLBが非安全デスクリプタしか記憶しないので、主TLBにはかかるフラグに対する必要性がないことが理解できよう。
主TLB208内では、メモリアクセスリクエスト内で発生された仮想アドレスの対応する部分が特定の作動モードに対応する主TLB208内のデスクリプタに関連する仮想アドレス部分のいずれかに対応するかどうかを判断するのに、同様なルックアッププロセスが実行される。従って、コア10が非安全モードで作動している場合、非安全ページテーブルから得られた主TLB208内のデスクリプタしかチェックされないが、一方、コア10が安全モードで作動している場合、安全ページテーブルから得られた主TLB内のデスクリプタしかチェックされない。
前記チェックプロセスの結果として、主TLB内で一致があった場合、対応するデスクリプタからアクセス制御情報が抽出され、パス242を通して送り戻される。特にデスクリプタの仮想アドレス部分および対応する物理アドレス部分がマイクロTLBのエントリー内に記憶できるように、パス242を通してマイクロTLB206へルーティングされ、アクセス許可ロジック202へアクセス許可権がロードされ、領域属性ロジック204へ領域属性がロードされる。このアクセス許可ロード202および領域属性ロジック204はマイクロTLBと別個のものでもよいし、またマイクロTLB内に内蔵されていてもよい。
このポイントでは、マイクロTLB206内で一致が生じるので、MMU200はメモリアクセスリクエストを処理できる。従って、マイクロTLB206は物理アドレスを発生し、この物理アドレスはパス208を通して対応するメモリへルーティングするためのシステムバス40へ出力できる。このメモリはオンチップメモリ、例えばTCM36、キャッシュ38などでもよいし、また外部バスインターフェース42を介してアクセスできる外部メモリユニットの1つのいずれかである。同時に、アクセス許可ロジック202がメモリアクセスを許可するかどうかを判断し、そのときの作動モードで特定のメモリロケーションへコアがアクセスするのを許可しないと判断した場合、パス230を通してコア10へアボート信号を発生する。例えばスーパーバイザーモードで作動しているコアによってしかアクセスできないものとして、安全メモリ内または非安全メモリ内のメモリの所定部分を指定してもよい。従って、コア10が、例えばユーザーモードのときにかかるメモリロケーションにアクセスしようとしている場合、アクセス許可ロジック202はコア10がそのときに適当なアクセス権を有しないことを検出し、パス230を通してアボート信号を発生する。これによってメモリアクセスがアボートされる。最後に、領域属性ロジック204は特定のメモリアクセスに対する領域属性、例えばアクセスがキャッシュ可能であるか、バッファ化できるかどうかを判断し、パス232を通してかかる信号を発生し、ここでかかる信号を使ってメモリアクセスリクエストの主題であるデータを例えばキャッシュ38内でキャッシュできるのか、書き込みアクセスの場合、書き込みデータをバッファ化できるのかどうかを判断する。
主TLB208内に一致がなかった場合、対応するページテーブル58にアクセスするのに変換テーブルウォークロジック210が使用され、パス248を通して必要なデスクリプタを検索し、次にパス246を通して主TLB208へデスクリプタを送り、TLBの内部に記憶できるようにする。CP15 34のレジスタには非安全ページテーブルと安全ページテーブルの双方のためのベースアドレスが記憶され、プロセッサコア10が作動しているそのときのドメイン、すなわち安全ドメインまたは非安全ドメインもCP15のレジスタ内にセットされる。このドメインステータスレジスタは非安全ドメインと安全ドメインとの間で切り替えが行われたときにモニタモードでセットされる。ドメインステータスレジスタの内容を本明細書ではドメインビットと称する。従って、変換テーブルウォークプロセスを実行しなければならない場合、変換テーブルウォークロジック210はコア10が実行しているのはどのドメインであるかについて知り、従って、対応するテーブルにアクセスするのにどのベースアドレスを使用するかについて知る。次に、適当なベーステーブル内の適当なエントリーにアクセスし、必要なデスクリプタを得るのに、ベースアドレスに対するオフセットとして仮想アドレスが使用される。
変換テーブルウォークロジック210によって一旦デスクリプタが検索され、主TLB208内に入れられると、主TLB内で一致が得られ、アクセス制御情報を検索するのに、前に述べたプロセスが呼び出され、この情報がマイクロTLB206、アクセス許可ロジック202および領域属性ロジック204内に記憶される。次に、MMU200によってメモリアクセスを行うことができる。
前に述べたように、好ましい実施例では主TLB208は安全ページテーブルおよび非安全ページテーブルの双方からのデスクリプタを記憶できるが、マイクロTLB206内に一旦対応する情報が記憶されると、メモリアクセスリクエストはMMU200によってしか処理されない。好ましい実施例では、主TLB208とマイクロTLB206との間の情報の転送はMPU220内に設けられたパーティションチェッカー222によってモニタされ、コア10が非安全モードで作動中の場合であって、主TLB内のデスクリプタからマイクロTLB206へアクセス制御情報が転送された場合に、安全メモリ内にある物理アドレスが発生される場合、このようなアクセス制御情報が転送されないことを保証している。
メモリ保護ユニットは安全オペレーティングシステムによって管理されており、このオペレーティングシステムは安全メモリと非安全メモリとの間のパーティションを定めるパーティション情報をCP15 34のレジスタ内に設定できるようになっている。このパーティションチェッカー222はパーティション情報を参照し、非安全モードでコア10による安全メモリへのアクセスを認めるマイクロTLB206へアクセス制御情報が転送されているかどうかを判断することができる。より詳細には、好ましい実施例では、CP15のドメインステータスレジスタ内でモニタモードによって設定されたドメインビットが表示するように、コア10が非安全作動モードで作動しているときに、パーティションチェッカー222は主TLB208からマイクロTLB206へ検索すべき物理アドレス部分を、パス242を通してモニタし、更にその物理アドレスに基づき、仮想アドレスに対して発生される物理アドレスが安全メモリ内にあるかどうかを判断するようになっている。かかる状況では、パーティションチェッカー222はパス230を通してコア10に対してアボート信号を発生し、メモリアドレスが発生するのを防止する。
更にパーティションチェッカー222がマイクロTLB206内に物理アドレス部分の記憶されるのを実際に防止するようにしてもよいし、これとは異なり、マイクロTLB206内に物理アドレス部分が記憶されるが、アボートプロセスの一部が例えばマイクロTLB206をフラッシングすることによってマイクロTLB206から正しくない物理アドレス部分を除くようにできることが理解できよう。
コア10がモニタモードを介して非安全モードと安全作動モードとの間で変化するときはいつも、モニタモードはプロセッサの動作を変えようとするドメインを表示するための、CP15ドメインステータスレジスタ内のドメインビットの値を変える。ドメイン間の変換プロセスの一部としてマイクロTLB206はフラッシングされ、従って、安全ドメインと非安全ドメインとの間の切り替え後の最初のメモリアクセスはマイクロTLB206内で不一致を発生させ、主TLB208から直接に、または対応するページテーブルからの対応するデスクリプタの検索により検索すべきアクセス情報を必要とする。
上記方法により、コアが非安全ドメインで作動しているときに、安全メモリへのアクセスを可能にするマイクロTLB206のアクセス制御情報への検索の試みがなされた場合、メモリアクセスのアボートが達成されることが理解できよう。
プロセッサコア10の作動モードではメモリアクセスリクエストは直接物理アドレスを指定するようになっており、その作動モードではMMU200がディスエーブルされ、パス236を通してMPU220へ物理アドレスが送られる。安全作動モードではアクセス許可ロジック224および領域属性ロジック226がCP15 34内のパーティション情報レジスタ内の対応する領域に対して識別された領域属性およびアクセス許可権利に基づき、必要なアクセス許可および領域属性分析を実行する。アクセスしたい安全メモリロケーションが所定の作動モード、例えば安全特権モードでしかアクセスできない安全メモリ部分内にある場合、別の作動モード、例えば安全ユーザーモードにあるコアによるアクセスの試みがなされると、MMUのアクセス許可ロジック202がかかる状況でアボート信号を発生したのと同じように、アクセス許可ロジック224がパス230を通してコアへアボート信号を発生する。同様に、領域属性ロジック226は、MMUの領域属性ロジック204が仮想アドレスで指定されたメモリアクセスリクエストに対してかかる信号を発生したのと同じように、キャッシュ可能およびバッファ可能な信号を発生する。アクセスが認められていると仮定した場合、アクセスリクエストがパス240を通ってシステムバス40に進み、このバスからリクエストは適当なメモリユニットへルーティングされる。
アクセスリクエストが物理アドレスを指定している場合の非安全アクセスに対し、アクセスリクエストはパス236を介してパーティションチェッカー222へルーティングされ、パーティションチェッカー222はCP15レジスタ34内のパーティション情報を参照してパーティションチェックを実行し、物理アドレスが安全メモリ内のロケーションを指定しているかを判断し、指定している場合に再びパス230を通してアボート信号が発生される。
次に図39および40のフローチャートを参照し、メモリ管理ロジックの上記処理についてより詳細に説明する。図39はステップ300が示すように、コア10で実行中のプログラムが仮想アドレスを発生する状況を示している。モニタモードによってセットされるCP15のドメインステータスレジスタ34内の対応するドメインビットは、コアがそのときに安全ドメインで作動中か、または非安全ドメインで作動中かを表示する。コアが安全ドメインで作動している場合、プロセスはステップ302へ分岐し、このステップで仮想アドレスの対応する部分がマイクロTLB内の仮想アドレス部分の1つに一致するかどうかを見るために、マイクロTLB206内でルックアップを実行する。ステップ302で一致している場合、プロセスは直接ステップ312へ分岐し、このステップでアクセス許可ロジック202が必要なアクセス許可分析を実行する。ステップ314では、アクセス許可の違反があるかどうかが判断され、違反がある場合、プロセスはステップ316に進み、ここでアクセス許可ロジック202がパス230を通してアボート信号を発生する。一致がなければ、すなわちかかるアクセス許可違反がなければ、プロセスはステップ314からステップ318へ進み、このステップ318でメモリアクセスが進む。特に領域属性ロジック204はパス232を通して必要なキャッシュ可能かつバッファ可能な属性を出力し、マイクロTLB206は先に述べたようにパス238を通して物理アドレスを発生する。
ステップ302においてマイクロTLBにおいて不一致があった場合、必要な安全デスクリプタが主TLB内にあるかどうかの判断をするために、ステップ304で主TLB内でルックアッププロセスが実行される。デスクリプタがなければ、ステップ306でページテーブルウォークプロセスが実行され、よって変換テーブルウォークロジック210は図37を参照して前に説明したように、安全ページテーブルから必要なデスクリプタを得る。次にこのプロセスはステップ308に進むか、または既に主TLB208内に安全デスクリプタがあった場合、ステップ30から直接ステップ308に進む。
ステップ308にて主TLBがタグのついた有効な安全デスクリプタを含むと判断されると、プロセスはステップ310に進み、このステップで物理アドレス部分を含むデスクリプタのサブセクションがマイクロTLBにロードされる。コア10はそのときに安全モードで作動しているのでパーティションチェッカー222がパーティションチェック機能を実行する必要はない。
次にプロセスはステップ312に進み、ここで前に述べたようにメモリアクセスの残りの部分が進行する。
非安全メモリアクセスの場合、ステップ300からステップ320にプロセスが進み、ステップ320にて非安全デスクリプタからの対応する物理アドレス部分が存在するかどうかの判断をするために、マイクロTLB206内でルックアッププロセスが実行される。存在する場合、プロセスは直接ステップ336に進み、このステップでアクセス許可ロジック202によりアクセス許可権がチェックされる。この時点では、対応する物理アドレス部分がマイクロTLB内にある場合、セキュリティの違反がないと見なすと考えるのが重要である。その理由は情報がマイクロTLB内に記憶される前にパーティションチェッカー222が情報を有効に規制し、よって状況がマイクロTLB内にある場合、この情報は適当な非安全情報であると考えられるからである。ステップ336でアクセス許可がチェックされると、ステップ338へ進み、違反があるかどうかの判断がされ、そこでアクセス許可が違反となると、ステップ316でアボート信号が発生される。違反がなければステップ318に進み、ここで前に述べたようにメモリアクセスの残りの部分が実行される。
ステップ320にてマイクロTLB内に一致がない場合、プロセスはステップ322へ進み、ここで対応する非安全デスクリプタがあるかどうかの判断をするために、主TLB208内でルックアッププロセスが実行される。デスクリプタがない場合、変換テーブルウォークロジック210によりステップ324でページテーブルウォークプロセスが実行され、非安全ページテーブルからの必要な非安全デスクリプタに関し、主TLB208内の検索が行われる。次に、プロセスはステップ326に進むか、またはステップ322で主TLB208内の一致が生じた場合、ステップ322からステップ326に直接進む。ステップ326にて、TLBが現在当該仮想アドレスに対する、タグの付いた有効な非安全デスクリプタを含むと判断され、次にステップ328にて(デスクリプタ内の物理アドレス部分とすると)メモリアクセスリクエストの仮想アドレスから発生された物理アドレスが、非安全メモリ内のロケーションをポイントするかどうかをパーティションチェッカー222がチェックする。ポイントしていない場合、すなわち物理アドレスが安全メモリ内のロケーションをポイントしている場合、ステップ330にてセキュリティの違反があったと判断され、プロセスはステップ332へ進み、パーティションチェッカー222により安全/非安全フォールトアボート信号が発生される。
しかしながら、セキュリティの違反がないとパーティションチェッカー222が判断した場合、プロセスはステップ334に進み、このステップで物理アドレス部分を含む対応するデスクリプタのサブセクションがマイクロTLBへロードされ、その後、ステップ336にて前に述べたようにメモリアクセスが処理される。
次に図40を参照し、物理アドレスを直接発生するメモリアクセスリクエストの取り扱いについて説明する。前に述べたように、このシナリオではMMU200が除勢される。このことは、CP15レジスタの対応するレジスタ内にMMUイネーブルビットをセットすることによって行うことが好ましく、このセットプロセスはモニタモードで実行される。従って、ステップ350ではコアは物理アドレスを発生し、このアドレスはパス236を通ってMPU220へ送られる。次にステップ352にて、MPUはそのときの作動モード、例えばユーザー、スーパーバイザーなどのモードを仮定した場合、リクエストされたメモリアクセスが進行できることを証明するための許可をチェックする。更にコアが非安全モードで作動している場合、パーティションチェッカー222は非安全メモリ内に物理アドレスがあるかどうかもステップ352でチェックする。次にステップ354にて、違反があるかどうかの判断がされる。すなわちアクセス許可処理が違反を明らかにしたかどうか、または非安全モードにおいてパーティションチェックプロセスが違反を識別したかどうかを判断する。これら違反のいずれかが生じた場合、プロセスはステップ356に進み、ここでMPU220によりアクセス許可フォールトアボート信号が発生される。所定の実施例では、2つのタイプのアボートには区別はないが、別の実施例ではアボート信号はアクセス許可フォールトまたはセキュリティのフォールトに関係しているかどうかを表示できる。
ステップ354にて違反が検出されない場合、プロセスはステップ358に進み、ここで物理アドレスによって識別されたロケーションへのメモリアクセスが行われる。
好ましい実施例では、モニタモードしか物理アドレスを直接発生しないようになっているので、他のすべてのケースではMMU200がアクティブとなり、前に述べたように、メモリアクセスリクエストの仮想アドレスからの物理アドレスの発生が生じる。
図38は、すべてのメモリアクセスリクエストが仮想アドレスを指定し、従って、いかなる作動モードでも直接物理アドレスが発生されない状況におけるメモリ管理ロジックの別の実施例も示す。このシナリオでは、別のMPU220は必要ではなく、その代わりにMMU200内にパーティションチェッカー222を組み込むことができることが理解できよう。この変化を別にすれば、図37および39を参照して前に説明したのと全く同じように処理が進む。
他の種々のオプションも可能であることが理解できよう。例えば安全モードおよび非安全モードの双方により、仮想アドレスを指定するメモリアクセスリクエストを発生でき、2つのMMU(1つは安全アクセスリクエスト用であり、他方は非安全アクセスリクエスト用である)を設けることができると仮定した場合、図37のMPU220を完全なMMUに置き換えできる。かかるケースでは、一方のMMUがその主TLBに非安全デスクリプタを記憶し、他方のMMUがその主TLBに安全デスクリプタを記憶するので、デスクリプタが安全であるか非安全であるかを定めるための2つのフラグを、各MMUの主TLBと共に使用することは不要となる。当然ながら、コアが非安全ドメイン内にある間、安全メモリへのアクセスが試みられているかをチェックするのにパーティションチェッカーがまだ必要である。
これとは異なり、すべてのメモリアクセスリクエストが直接物理アドレスを指定した場合、2つのMPU(一方は安全リクエスト用であり、他方は非安全リクエスト用である)を使用することを、別の実現例としてもよい。非安全アクセスリクエスト用に使用されるMPUは安全メモリへのアクセスが非安全モードでは認められないようにすることを保証するように、パーティションチェッカーによって規制されたアクセスリクエストを有する。
図37または図38の配置を設けることができる別の特徴として、パーティションチェッカー222があるパーティションチェックを実行し、変換テーブルウォークロジック210の活動を規制するようにできる。特にコアがそのときに非安全ドメインで作動している場合、変換テーブルウォークロジック210がページテーブルへのアクセスを求めているときはいつも、このロジックが安全ページテーブルではなく、非安全ページテーブルにアクセスしていることを、パーティションチェッカー222がチェックするようにできる。違反が検出された場合、アボート信号を発生することが望ましい。変換テーブルウォークロジック210はページテーブルベースアドレスとメモリアクセスリクエストが発生した仮想アドレスの所定ビットとを組み合わせることによって、一般にページテーブルルックアップを実行するので、このようなパーティションチェックは例えば屁何テーブルウォークロジック210が安全ページテーブルのベースアドレスではなく、非安全ページテーブルのベースアドレスを使用していることをチェックすることを必要とし得る。
図41は、コア10が非安全モードで作動しているときにパーティションチェッカー222によって実行されるプロセスを略図で示す。通常の動作では、非安全ページテーブルから得られるデスクリプタは非安全メモリにマッピングされたページしか記述しないことが理解できよう。しかしながら、ソフトウェアによる攻撃があった場合、このデスクリプタがメモリの非安全領域を安全領域の双方を含むセクションを記述するように、デスクリプタを不正操作することができる。従って、図41の例を検討すると、不正操作された非安全デスクリプタは非安全領域370、372、374、および安全領域376、378、380を含むページをカバーし得る。メモリアクセスリクエストの一部として発行された仮想アドレスは安全メモリ領域、例えば図41に示されるような安全メモリ領域376内の物理アドレスに対応する場合、パーティションチェッカー222はアクセスが生じないようにするためのアボート信号を発生するようになっている。従って、安全メモリへアクセスしようとする試みにおいて、非安全デスクリプタが不正に書き換えられた場合でも、パーティションチェッカー222はアクセスが行われるのを防止できる。これと対照的に、このデスクリプタを使って誘導された物理アドレスが非安全メモリ領域、例えば図41に示されるような領域374に対応する場合、マイクロTLB206にロードされたアクセス制御情報は単にこの非安全領域374を識別するだけである。従って、非安全メモリ領域374内のアクセスが生じることができるが、安全領域376、378または380のいずれへのアクセスも生じることはできない。従って、主TLB208が不正に書き換えされた非安全ページテーブルからのデスクリプタを含み得る場合であっても、マイクロTLBは非安全メモリ領域にアクセスできることになる物理アドレス部分しか含まないことが理解できよう。
前に述べたように、非安全モードと安全モードの双方が仮想アドレスを指定するメモリアクセスリクエストを発生できる実施例では、メモリは非安全メモリ内の非安全ページテーブルと安全メモリ内の安全ページテーブルとの双方を含むことが望ましい。非安全モードでは、変換テーブルウォークロジック210により非安全ページテーブルが参照されるが、他方、安全モードでは変換テーブルウォークロジック210により安全ページテーブルが参照される。図42は、これら2つのページテーブルを示す。図42に示されるように、例えば図1の外部メモリ56内に設けることができる非安全メモリ390は、ベースアドレス394を参照することにより、CP15レジスタ34内に指定された非安全ページテーブル395を内部に含む。同じように、図1の外部メモリ56内に設けることができる非安全メモリ400内には、安全ページテーブルのベースアドレス407により複製CP15レジスタ34内で指定される対応する安全ページテーブル405が設けられる。非安全ページテーブル395内の各デスクリプタは、非安全メモリ390内の対応する非安全ページを指定するが、安全ページテーブル405内の各デスクリプタは安全メモリ400内の対応する安全ページを定める。更に、後により詳細に説明するように、メモリの所定領域を共用メモリ領域410とし、これら領域に非安全モードと安全モードの双方によりアクセスできるようにすることができる。
図43は好ましい実施例に従い、主TLB208内で実行されるルックアップ方法をより詳細に示す。前に述べたように、主TLB208は対応するデスクリプタが安全ページテーブルからのものか、または非安全ページテーブルからのものかを識別するドメインフラグ425を含む。これによりルックアッププロセスを実行したときに、コア10が作動中の特定のドメインに対応するデスクリプタしかチェックされないように保証できる。図43は、安全な世界とも称される安全ドメインでコアが作動中の例を示す。図43から理解できるように、主TLB208のルックアップが実行されているときに、この結果、デスクリプタ440が無視され、デスクリプタ445だけがルックアッププロセスのための候補として識別される。
好ましい実施例によれば、プロセス固有のページテーブルからのデスクリプタを識別するための、本明細書においてASIDフラグとも称される別のプロセスIDフラグ430が設けられている。従って、プロセスP1、P2およびP3の各々はメモリ内に設けられた対応するページテーブルを有することができ、更に非安全動作および安全動作のために異なるページテーブルを有することができる。更に安全ドメインにおけるプロセスP1、P2、P3を非安全ドメインにおけるプロセスP1、P2、P3と完全に別個にすることができることが理解できよう。従って、図43に示されるように、主TLBのルックアップ208が必要なときに、ドメインをチェックする外に、ASIDフラグもチェックする。
従って、安全ドメインにおいてプロセスP1が実行されている図43における例では、ルックアッププロセスは主TLB208内の2つのエントリー450を識別し、2つのデスクリプタ内の仮想アドレス部分がメモリアクセスリクエストによって発生された仮想アドレスの対応する部分と一致するかどうかに応じて一致信号または不一致信号が発生される。一致している場合、対応するアクセス制御情報が抽出され、マイクロTLB206、アクセス許可ロジック202および領域属性ロジック204へ送られる。一致していない場合、不一致信号が発生され、変換テーブルウォークロジック210が使用され、安全プロセスP1用に設けられたページテーブルから必要なデスクリプタを探すように、主TLB208内の検索が行われる。当業者であれば理解できるように、TLBの内容を管理する技術は多数あるので、TLB208に記憶するのに新しいデスクリプタが検索され、主TLBが既に満杯となっているときには主TLBから取り出されるデスクリプタを決定し、新しいデスクリプタ、例えば最後に利用されたアプローチなどのための余裕を設けるために、公知の多数の技術のうちの1つを使用できる。
安全作動モードで使用される安全カーネルを非安全オペレーティングシステムと完全に別個に開発できることが理解できよう。しかしながら、あるケースでは安全カーネルと非安全オペレーティングシステムの開発とは密にリンクしていることがあり、かかる状況では安全アプリケーションは非安全デスクリプタを使用できるようにすることが適当である。これによって仮想アドレスを知るだけで安全アプリケーションが(表4のために)非安全データに直接アクセスできるようになる。当然ながらこのことは、特定のASIDに対して安全仮想マッピングと非安全仮想マッピングが排他的であると仮定している。かかるシナリオでは、安全デスクリプタと非安全デスクリプタとを区別するのに、前に導入されたタグ(すなわちドメインフラグ)は不要となる。その代わりに、利用できるデスクリプタのすべてと共にTLB内のルックアップが実行される。
好ましい実施例では、別個の安全デスクリプタと非安全デスクリプタによる主TLBのこのようなコンフィギュレーションと前に説明したコンフィギュレーションの選択をCP15制御レジスタ内に設けられた特定のビットによってセットできる。好ましい実施例では、このビットは安全カーネルによってしかセットされない。
安全アプリケーションが非安全仮想アドレスを利用することが直接認められている実施例では、非安全スタックポインタを安全ドメインから利用できるようにすることが可能である。このことは、非安全スタックポインタをCP15レジスタ34内の専用レジスタ内に識別させる非安全レジスタの値をコピーすることによって行うことができる。これによって安全アプリケーションによって理解される方式に従い、非安全アプリケーションがスタックを介してパラメータを送ることができるようになる。
前に述べたように、メモリを非安全部分と安全部分とに区分することができ、このような区分はパーティションチェッカー222に対して専用のCP15レジスタ34を使用する安全カーネルによって制御される。基本的な許可方法は、代表的なMPUデバイス内で定義できるような領域アクセスパーミッションに基づく。従って、メモリは複数の領域に分割され、各領域はそのベースアドレス、サイズ、メモリ属性およびアクセスの許可によって定義することが望ましい。更にオーバーラップ領域をプログラムする際に上方領域の属性が最高の優先権を有する。更に本発明の好ましい実施例によれば、対応する領域が安全メモリにあるのか、または非安全メモリ内にあるのかを定めるのに、新しい領域属性が提供される。この新しい領域属性は安全メモリとして保護すべきメモリ部分を定めるように、安全カーネルによって使用される。
ブートステージにおいて、図44に示されるように第1パーティションが実行される。この最初のパーティションは非安全な世界、非安全オペレーティングシステムおよび非安全アプリケーションに割り当てられたメモリ460の数量を決定する。この数量はパーティションに定められた非安全領域に対応する。この情報はメモリ管理のために非安全オペレーティングシステムによって利用される。安全として定められたメモリ462、464の他の部分は非安全オペレーティングシステムによって知られることはない。非安全な世界における保全性を保護するために、非安全メモリに安全特権モードだけのためのアクセス許可をプログラムすることができる。従って、安全アプリケーションは非安全アプリケーションの内容を破壊しない。図44から判るようにこのブートステージパーティションの後でメモリ460は非安全オペレーティングシステムによって使用できるようになり、メモリ462は安全カーネルによって使用できるようになり、メモリ464は安全アプリケーションによって使用できるようになる。
ブートステージパーティションが一旦実行されると、非安全メモリ460のメモリマッピングはMMU200を使用する非安全オペレーティングシステムにより取り扱われ、従って、通常の態様で一連の非安全ページを定義できる。これについては図45に示されている。
安全アプリケーションが非安全アプリケーションと共にメモリを共用する必要がある場合、安全カーネルはあるドメインから別のドメインへデータを人為的に転送するために、メモリの一部の権利を変えることができる。従って、図46に示されるように、安全カーネルは非安全ページの保全性をチェックした後に、そのページの権利を変え、よってそのページが共用メモリとしてアクセスできる安全ページ466となる。
メモリのパーティションを変えるときには、マイクロTLB206をフラッシングする必要がある。従って、このシナリオではその後に非安全アクセスが生じると、マイクロTLB206で不一致が生じるので、主TLB208から新しいデスクリプタがロードされる。この新しいデスクリプタは、マイクロTLBへの検索が試みられる場合のように、MPUのパーティションチェッカー222によってその後チェックされ、よってメモリの新しいパーティションと一致した状態となる。
好ましい実施例では、キャッシュ38には仮想インデックスがつけられ、物理タグがつけられる。従って、キャッシュ38でアクセスが実行される際に、まずマイクロTLB206でルックアップが実行されるので、アクセス許可、特に安全許可および非安全許可がチェックされる。従って、非安全アプリケーションによりキャッシュ38に安全データを記憶することはできない。キャッシュ38へのアクセスはパーティションチェッカー222により実行されるパーティションチェックの制御下にあるので、安全データへのアクセスは非安全モードでは実行できない。
しかしながら、生じ得る1つの問題は、非安全ドメインにおいてアプリケーションがキャッシュ動作レジスタを使用してキャッシュを無効にしたり、クリーンまたはフラッシングできることである。かかる動作がシステムのセキュリティに影響できないように保証する必要がある。例えば非安全オペレーティングシステムがキャッシュ38をクリーンにすることなくキャッシュ38を無効にしようとする場合、データを置換する前にこの外部メモリに安全な汚れたデータを書き込まなければならない。キャッシュにおいて、安全データにタグを付け、よって所望する場合、異なるように取り扱いできるようにすることが望ましい。
好ましい実施例において、アドレスによるラインを無効化する動作が非安全プログラムによって実行される場合、物理アドレスはパーティションチェッカー222によりチェックされ、キャッシュラインが安全キャッシュラインである場合、動作はクリーンおよび無効化動作となり、システムのセキュリティを維持することを保証できる。更に好ましい実施例では、非安全プログラムによって実行されるインデックスによるライン無効化動作のすべてはインデックスによるクリーンおよび無効化動作となる。同様に、非安全プログラムによって実行されるすべてを無効化する動作のすべては、すべてをクリーンかつ無効化する動作となる。
更に図1を参照すると、DMA32によるTCM36へのアクセスは、マイクロTLB206によって制御される。従って、DMA32が仮想アドレスを物理アドレスに変換するために、TLB内でルックアップを実行するときに、主TLBにおいて追加された、前に説明したフラグにより、必要なセキュリティチェックをあたかもアクセスリクエストがコア10によって発生されたかのように実行できるようになる。更に後述するように、好ましくはアービッター/デコーダブロック54内に位置する外部バス70にレプリカパーティションチェッカーが送られるので、DMA32が外部バスインターフェース42を介し、外部バス70に結合されたメモリに直接アクセスする場合、外部バスへ接続されたレプリカパーティションチェッカーがアクセスの有効性をチェックする。更に所定の好ましい実施例では、DMAコントローラ32を非安全ドメイン内で使用できるかどうかを定めるのにCPU15レジスタ34にビットを追加することができる。このビットは特権モードで作動しているときの安全カーネルによってしかセットできない。
TCM36を検討する際に、このTCM36に安全データを入れなければならない場合、注意深くこれを取り扱わなければならない。例えば非安全オペレーティングシステムがTCMメモリ36のための物理アドレスレンジをプログラムし、このアドレスレンジが外部安全メモリ部分とオーバーラップするようなシナリオを想像することができる。作動モードが安全モードに変わった場合、安全カーネルはデータをそのオーバーラップした部分に記憶させることができ、一般にTCM36は外部メモリよりも高い優先権を有するので、TCM36内に一般にデータが記憶される。非安全オペレーティングシステムがTCM36のための物理アドレス空間の設定を変え、よってメモリの非安全物理領域内に前の安全領域がマッピングされる場合に、非安全オペレーティングシステムは安全データにアクセスできることが理解できよう。その理由は、パーティションチェッカーがその領域を非安全領域と見てアボート信号をアサートしないからである。従って、要約すれば、TCMが通常のローカルRAMとして働き、スマートキャッシュとしては働かないようになっている場合、非安全オペレーティングシステムがTCMベースレジスタの非安全物理アドレスへ移動できる場合に、安全な世界のデータを読み出すことが可能である。
この種のシナリオを防止するために、好ましい実施例では安全特権作動モードでしかアクセスできないCP15レジスタ34内に制御ビットが設けられ、2つの可能性のあるコンフィギュレーションが提供される。第1コンフィギュレーションではこの制御ビットは「1」に制御され、この場合、TCMは安全特権モードによってしか制御できない。従って、CP15レジスタ34内のTCM制御レジスタに対して試みられる非安全アクセスにより、未定義命令例外が入力される。従って、この第1コンフィギュレーションでは安全モードと非安全モードの双方がTCMを利用できるが、TCMは安全特権モードによってしか制御されない。第2コンフィギュレーションでは制御ビットは0にセットされ、この場合、TCMは非安全オペレーティングシステムによって制御できる。この場合、TCMは非安全アプリケーションによってしか使用されない。TCMから安全データを記憶したりロードしたりすることはできない。従って、安全アクセスが実行されるときに、アドレスがTCMアドレスレンジに一致しているかどうかを見るために、TCMではルックアップは実行されない。
このシナリオにおいて、非安全オペレーティングシステムを変える必要がないように、デフォルトによりTCMを非安全オペレーティングシステムによってしか使用されないようにすることができる。
前に述べたように、MPU220内にパーティションチェッカー222を設ける他に、本発明の好ましい実施例は外部バス70に結合された類似のパーティションチェックブロックも設けている。この追加パーティションチェッカーは他のマスターデバイス、例えばデジタル信号プロセッサ(DSP)50、外部バスに直接結合されたDMAコントローラ52、外部バスインターフェース42などを介して外部バスに接続できるDMAコントローラ32によるメモリへのアクセスを規制するのに使用される。外部(またはデバイス)バスにパーティションチェックブロックを結合することしかできず、パーティションチェッカーをメモリ管理ロジック30として設けることはできない。かかる実施例では、オプションとしてメモリ管理ロジック30の一部としてパーティションチェッカーを設けることができる。かかる状況では、このパーティションチェッカーはデバイスバスに結合されたチェッカーの他に設けられた別のパーティションチェッカーと見なすことができる。
上記のように、全メモリシステムをいくつかのメモリユニットから構成でき、外部バス70上にこれら種々のメモリユニット、例えば外部メモリ56、ブートROM44または周辺デバイス、例えばスクリーンドライバー46内に設けられたバッファまたはレジスタ48、62、66、I/Oインターフェース60、キー記憶ユニット64などが存在し得る。更に、安全メモリとしてメモリシステムの異なる部分を構成する必要がある場合がある。例えばキー記憶ユニット64内のキーバッファ66を安全メモリとして取り扱わなければならないことが好ましい場合もある。外部バスに結合されたデバイスにより、かかる安全メモリへのアクセスを試みる場合、コア10を含むチップ内に設けられた前記メモリ管理ロジック30はかかるアクセスを規制できなくなる。
図47は、本明細書でデバイスバスとしても称す外部バスに結合された増設パーティションチェッカー492をどのように使用するかを示している。外部バスは、例えばデバイス470、472により外部バスへメモリアクセスリクエストが発生されるときはいつも、メモリアクセスリクエストは作動モード、例えば特権作動モード、ユーザー作動モードなどを定める所定の信号も外部バスに含む。本発明の好ましい実施例によれば、メモリアクセスリクエストはデバイスが安全モードで作動しているか、または非安全モードで作動しているかを識別するためのドメイン信号を外部バスに発生することにも関与する。このドメイン信号はハードウェアレベルで発生することが好ましく、好ましい実施例では、安全ドメインまたは非安全ドメインで作動できるデバイスは外部バス内のパス490にドメイン信号を出力するための所定のピンを含む。図解のために、このパス490は外部バス上の他の信号パス488と別個に示されている。
本明細書でSビットとも称するこのドメイン信号はメモリアクセスリクエストを発生するデバイスが安全ドメインで作動しているのか、または非安全ドメインで作動しているのかを識別する。この情報は外部バスに結合されているパーティションチェッカー492により受信される。パーティションチェッカー492はメモリのどの領域が安全であるか、または安全でないかを識別するパーティション情報にもアクセスを行うので、安全作動モードを識別するのにSビットがアサートされた場合にデバイスがメモリの安全部分にアクセスできるだけでよいように構成できる。
デフォルトによりSビットがアンアサートされ、従って、例えば図47に示されるデバイス472の様な既に存在する非安全デバイスがアサートされたSビットを出力せず、従ってメモリの安全部分がスクリーンドライバー480、I/Oインターフェース484のレジスタまたはバッファ482、486内にあるのか、または外部メモリ478内にあるのかにかかわらず、パーティションチェッカー492によるこのメモリの安全部分へのアクセス権は、このデバイスには付与されない。
図解のため、マスターデバイス、例えばデバイス470、472が発生するメモリアクセスリクエスト間の仲裁のために使用されるアービッターブロック476は、メモリアクセスリクエストのサービスをするのに適当なメモリデバイスを決定するのに使用されるデコーダ478およびパーティションチェッカー492と別個に示されている。しかしながら、所望すれば同じユニット内に1つ以上のこれら部品を組み込んでもよいことが理解できよう。
図48はパーティションチェッカー492が設けられておらず、代わりに各メモリデバイス474、480、484がSビットの値に応じて自己のメモリアクセスを規制するようになっている別の実施例を示す。従って、デバイス470が安全メモリとしてマークされたスクリーンドライバー480内のレジスタ482に対する非安全モードのメモリアクセスリクエストをアサートした場合、スクリーンドライバー480はSビットがアサートされていないと決定し、メモリアクセスリクエストを処理しない。従って、種々のメモリデバイスを適当に設計することにより、パーティションチェッカー492を外部バスと別個に設けなくてもよいようにできる。
図47および48の上記説明では、メモリアクセスリクエストを発生するデバイスが安全ドメインで作動しているのか、または非安全ドメインで作動しているのかを識別するのにSビットが使用される。別の見方をすれば、このSビットはメモリアクセスリクエストが安全ドメインに関係するのか、または非安全ドメインに関係するのかを表示すると見なすこともできる。
図37および38を参照して説明した実施例では、仮想アドレス−物理アドレス変換を実行するのに、ページテーブルの1つの組と共に単一のMMUが使用された。かかる方法では、物理アドレス空間は図49に示されるように、簡単な態様で一般に非安全メモリと安全メモリとにセグメント化される。ここで物理アドレス空間2100はメモリシステム内のメモリユニットのうちの1つ、例えば外部メモリ56に対してアドレスゼロでスタートし、アドレスYまで続くアドレス空間を含む。各メモリユニットに対し、アドレス指定可能なメモリは一般に2つの部分、すなわち非安全メモリとして割り当てられる第1部分2110と、安全メモリとして割り当てられる第2部分2120とに区分される。
このような方法を使用すると、特定のドメイン(単数または複数)にアクセスできない所定のアドレスが生じ、これらギャップはドメインで使用されるオペレーティングシステムに対して明らかとなることが理解できよう。安全ドメインで使用されるオペレーティングシステムは非安全ドメインの知識を有し、従ってこれと関係することはないが、非安全ドメイン内のオペレーティングシステムは理想的には安全ドメインが存在するとの知識を有しなくてもよいようにすべきであり、むしろ安全ドメインがそこに存在していなかったかのように作動すべきである。
別の問題として、非安全オペレーティングシステムは外部メモリに対するアドレス空間をアドレスゼロでスタートし、アドレスXまで続くものと見て、非安全オペレーティングシステムは安全カーネル、特にアドレスX+1からアドレスYまで続く安全メモリの存在について何も知る必要はないことが理解できよう。これと対照的に、安全カーネルはアドレスゼロで始まるアドレス空間を見ない。このことはオペレーティングシステムが一般に期待することではない。
図51には、物理アドレス空間の非安全オペレーティングシステムの視界から安全メモリ領域を完全に隠すことができるようにし、かつ安全ドメインにおける安全カーネルおよび非安全ドメインにおける非安全オペレーティングシステムが外部メモリのためのアドレス空間をアドレスゼロで開始するものと見ることができるようにすることによって、上記問題を解消した一実施例が略図で示されている。ここでは、物理アドレス空間2200をページレベルで安全セグメントまたは非安全セグメントのいずれかにセグメント化することができ、図51に示された例では、外部メモリ用のアドレス空間は2つの安全メモリ領域と2つの非安全メモリ領域から成る4つのセクション2210、2220、2230、2240にセグメント化された状態に示されている。
単一ページテーブル変換による仮想アドレス空間と物理アドレス空間との切り替えではなく、第1ページテーブルと第2ページテーブルとを参照して、アドレスの2つの別個の層の変換を実行し、プロセッサが安全ドメイン内にあるのか、または非安全ドメイン内にあるのかに応じて別々に構成できる中間アドレス空間の概念を導入できる。より詳細に説明すれば、図51に示されるように、物理アドレス空間内の2つの安全メモリ領域2210および2230をページテーブル2250の組内の安全ページテーブル内で設けられたデスクリプタを使用することにより、安全ドメインのための中間アドレス空間における単一領域2265にマッピングできる。プロセッサ上で作動しているオペレーティングシステムに関しては、オペレーティングシステムは中間アドレス空間を物理アドレス空間として見て、MMUを使って仮想アドレスを中間アドレス空間内の中間アドレスに変換する。
同様に非安全ドメインに対して中間アドレス空間2270を構成でき、この空間では物理アドレス空間内の2つの非安全メモリ領域2220と2240が、ページテーブル2250の組内の非安全ページテーブル内の対応するデスクリプタを介し、非安全ドメインのための中間アドレス空間内の非安全領域2275にマッピングされる。
一実施例では、図50Aに示されるように、2つの別個のMMUを使って中間アドレスを介した仮想アドレスの物理アドレスへの変換が取り扱われる。図50A内のMMU2150と2170の各々は、図37に示されたMMU200へ同じように構成されたものと見なすことができるが、図解を容易にするために、図50Aでは所定の細部は省略されている。
第1MMU2150はマイクロTLB2155と、主TLB2160と、変換テーブルウォークロジック2165とを含むが、同じように第2MMU2170はマイクロTLB2175と、主TLB2180と、変換テーブルウォークロジック2185とを含む。第1MMUはプロセッサが非安全ドメイン内で作動しているときには非安全オペレーティングシステムにより制御でき、またプロセッサが安全ドメイン内で作動しているときには安全カーネルにより制御できる。しかしながら、好ましい実施例では第2MMUは安全カーネルまたはモニタプログラムによってしか制御できない。
プロセッサコア10がメモリアクセスリクエストを発生する際に、このコアはパス2153を通して仮想アドレスをマイクロTLB2155へ発生する。このマイクロTLB2155は主TLB2160内に記憶されていたデスクリプタから検索された対応する中間アドレス部分を多数の仮想アドレス部分に対して記憶する。主TLB2160に記憶されていたデスクリプタは第1MMU2150に関連していたページアドレスの第1の組内のページテーブルから検索されたものである。マイクロTLB2155内で一致が検出された(ヒットした)場合、マイクロTLB2155はパス2153を通して受信された仮想アドレスに対応する中間アドレスをパス2157を通して発生できる。マイクロTLB2155内に一致がない場合、主TLB内で一致が検出されたかどうかを見るために、主TLB2160が参照される。一致が発見された場合、対応する仮想アドレス部分および対応する中間アドレス部分がマイクロTLB2155内に検索され、その後、パス2157を通して中間アドレスを発生できる。
マイクロTLB2155および主TLB2160内に一致がない場合、第1MMU2150によってアクセスできるページテーブルの第1の組内の所定のページテーブルから必要なデスクリプタのためのリクエストを発生するのに変換テーブルウォークロジック2165が使用される。一般に、安全ドメインと非安全ドメインの双方のための個々のプロセスに関連するページテーブルがあり、例えばCP15レジスタ34内の適当なレジスタから変換テーブルウォークロジック2165によってページテーブルのための中間ベースアドレスにアクセスできる。従って、変換テーブルウォークロジック2165は適当なページテーブルからデスクリプタをリクエストするために、パス2167を通して中間アドレスを発生できる。
第2MMU2170はパス2157を通してマイクロTLB2155によりパス2167を通って変換テーブルウォークロジック2165により中間アドレス出力を受信するようになっており、マイクロTLB2175内で一致が検出された場合、マイクロTLBはパス2192を通してメモリへ必要な物理アドレスを発生し、データバス2190を通して必要なデータを検索することができる。中間アドレスがパス2157を通して発生された場合、これによって必要なデータがコア10に戻され、一方、パス2167を通して発生された中間アドレスに対し、この発生によって必要なデスクリプタが第1MMU2150へ戻され、主TLB2160内に記憶できる。
マイクロTLB2175内で不一致が生じた場合、主TLB2180が参照され、主TLB内で一致が発見された場合、必要な中間アドレス部分および対応する物理アドレス部分がマイクロTLB2175へ戻され、マイクロTLB2175がパス2192を通して必要な物理アドレスを発生できるようにする。しかしながら、マイクロTLB2175でも主TLB2180でも一致がない場合、変換テーブルウォークロジック2185は、第2MMU2170に関連するページテーブルの第2の組内の対応するページテーブルから必要なデスクリプタに対し、パス2194を通してリクエストを出力する。ページテーブルのこの第2の組は中間アドレス部分と物理アドレス部分とを関連づけるデスクリプタを含み、一般に安全ドメインに対して少なくとも1つのページテーブルおよび非安全ドメインに対して1つのページテーブルが設けられる。パス2194を通してリクエストが発生されると、この結果、ページテーブルの第2の組から対応するデスクリプタが第2のMMU2170に戻され、主TLB2180内に記憶される。
次に、下記の特定の実施例により、図50Aに示された実施例の作動について説明する。この例では、略語VAは仮想アドレスを示し、IAは中間アドレスを示し、PAは物理アドレスを示す。
1)コアがVA=3000を発生する [IA=5000、PA=7000]
2)MMU1のマイクロTLBで不一致(失敗)
3)MMU1の主TLBで不一致
ページテーブル1のベースアドレス=8000IA [PA=10000]
4)MMU1内の変換テーブルウォークロジックがページテーブルルックアップを実行し、IA=8003を発生する
5)MMU2のマイクロTLB内で不一致
6)MMU2の主TLB内で不一致
ページテーブル2のベースアドレス=12000PA
7)MMU2内の変換テーブルウォークロジックがページテーブルルックアップを実行し、PA=12008を発生する
ページテーブルデータとして戻された「8000IA=10000PA」
8)MMU2の主TLBに記憶される
9)MMU2のマイクロTLBに記憶される
10)MMU2内のマイクロTLBで一致(ヒット)し、PA=10003を発生
ページテーブルデータとして戻された「3000VA=5000IA」
11)MMU1の主TLBに記憶される
12)MMU1のマイクロTLBに記憶される
13)MMU1内のマイクロTLBで一致し、
データアクセスを実行するのにIA=5000を発生する
14)MMU2のマイクロTLB内で不一致
15)MMU2の主TLB内で不一致
16)MMU2内の変換テーブルウォークロジックがページテーブルルックアップを実行し、PA=12005を発生する
ページテーブルデータとして戻された「5000IA=7000PA」
17)MMU2の主TLB内に記憶される
18)MMU2のマイクロTLB内に記憶される
19)MMU2内のマイクロTLBで一致し、
データアクセスを実行するのにPA=7000を発生する
20)物理アドレス7000にあるデータがコアに戻される
次のときにコアがメモリアクセスリクエスト(すなわちVA3001...)を発生する。
1)コアがVA=3001を発生する
2)MMU1のマイクロTLB内で一致すると、リクエストIA5001がMMU2に発生される
3)MMU2のマイクロTLBで一致すると、PA7001に対するリクエストがメモリに対して発生される
4)PA7001におけるデータがコアに戻される
上記例では双方のMMUのマイクロTLBおよび主TLBの双方で不一致となるので、この例は最悪ケースのシナリオを示している。一般にマイクロTLBまたは主TLBの少なくとも一方で一致が発見されることが予想されるので、データを検索するのにかかる時間を大幅に短縮できる。
次に図51を参照すると、物理アドレス空間の所定領域、好ましい実施例では安全領域内にページテーブル2250の第2の組が一般に設けられる。ページテーブルの第1の組は2つのタイプ、すなわち安全ページテーブルと非安全ページテーブルとに分割できる。非安全中間アドレス空間2275内の非安全ページテーブルと同じように、中間アドレス空間2265内では安全ページテーブルが次々に現れることが好ましい。しかしながら、物理アドレス空間内ではこれらページテーブルは次々に生じる必要はないので、例えばページテーブルの第1の組に対する安全ページテーブルが安全領域2210、2230内にわたって拡散されていてもよく、同じように非安全ページテーブルも非安全メモリ領域2220および2240にわたって拡散していてもよい。
上記のように、ページテーブルの2つの組の2レベルの方法を使用する主な利点の1つは、安全ドメインのオペレーティングシステムの非安全ドメインのオペレーティングシステムの双方に対し、物理アドレス空間をゼロからスタートするように配置できることであり、このことは、一般にオペレーティングシステムが期待することである。更に、安全メモリ領域を物理アドレス空間の非安全オペレーティングシステムの視界から完全に隠すことができる。この理由は、オペレーティングシステムは中間アドレスの連続シーケンスを有するように配置できる中間アドレス空間を物理アドレス空間として見るからである。
更にかかる解決方法を使用することによって、非安全メモリと安全メモリとの間でメモリの領域をスワップするプロセスをかなり簡潔にできる。このことは図52を参照して略図で示されている。図52から判るように、例えばメモリの単一ページとすることができるメモリ2300の領域が、非安全メモリ領域2220内に存在することができ、同様に安全メモリ領域2210内にはメモリ領域2310が存在し得る。しかしながらページテーブルの第2の組内で対応するデスクリプタを変えるだけで、これら2つのメモリ領域2300と2310とを容易にスワップすることができるので、領域2300は安全ドメインの中間アドレス空間内の領域2305にマッピングされた安全領域となり、次に領域2310は非安全ドメインの中間アドレス空間内の領域2315にマッピングされた非安全領域となる。このことは安全ドメインと非安全ドメインの双方においてオペレーティングシステムに対して完全にトランスペアレントに生じ得る。その理由は、物理アドレス空間の視界は実際には安全ドメインまたは非安全ドメインの中間アドレス空間であるからである。従って、この方法によって各オペレーティングシステム内で物理アドレス空間を再定義しなくてもよいようになる。
次に図50Bを参照し、図50Aの配置と異なる配置の2つのMMUも使用する、本発明の別の実施例について説明する。図50Bと図50Aを比較することから判るように、配置はほとんど同じであるが、この実施例では第1MMU2150が仮想アドレス−物理アドレス変換を実行するようになっており、第2MMUが中間アドレス−物理アドレス変換を実行するようになっている。従って、図50Aの実施例で使用される、第1MMU2150内のマイクロTLB2155から第2MMU2170内のマイクロTLB2175までのパス2157の代わりに、第1MMU内のマイクロTLBが図50Bに示されるようにパス2192を通して直接物理アドレスを出力するようになっている。次に、下記の特定の例により、図50Bに示された実施例の作動について説明する。この図は図50Aの実施例に対して前に説明したように、同じコアメモリのアクセスリクエストの処理を詳細に示している。
1)コアがVA=3000を発生する [IA=5000、PA=7000]
2)MMU1のマイクロTLBおよび主TLB内で不一致
ページテーブル1のベースアドレス=8000IA[PA=10000]
3)MMU1内の変換テーブルウォークロジックがページテーブルルックアップを実行し、
IA=8003を発生する
4)MMU2のマイクロTLBおよび主TLB内でIA8003が不一致
ページテーブル2のベースアドレス=12000PA
5)MMU2内の変換テーブルウォークロジックがページテーブルルックアップを実行し、
PA=12008を発生する
ページテーブルデータとして戻された[8000IA==10000PA]
6)MMU2の主およびマイクロTLBに「8000IA=10000PA」がマッピング記憶される
7)MMU2内のマイクロTLBはステップ(3)からPA10003へリクエストを変換でき、フェッチ信号を発生する
ページテーブルとして戻された「3000VA=5000IA」
注: この変換はMMU1によって一時記憶装置内に保持されるが、TLB内には直接記憶されない
8)次にMMU1の変換テーブルウォークロジックはIA=5000に対し、MMU2にリクエストを発生する
9)MMU2のマイクロTLBおよび主TLB内でIA=5000が不一致
10)MMU2内の変換テーブルウォークロジックがページテーブルルックアップを実行し、
PA=12005を発生する
ページテーブルデータとして戻された「5000IA=7000PA」
11)MMU2がマイクロTLBおよび主TLBに「5000IA=7000PA」を記憶する。この変換もMMU1に伝えられる
12a)MMU2がメモリへPA=7000のアクセスを発生する
12b)MMU2が「3000VA=5000IA」デスクリプタと、
「5000IA=7000PA」デスクリプタとを組み合わせ、「3000VA=7000PA」デスクリプタを発生し、このデスクリプタはMMU1の主TLBおよびマイクロTLBに記憶される
13)PA=7000にあるデータがコアに戻される
次にコアがメモリアクセスリクエスト(例えばVA=3001...)を発生する。
1)コアがVA=3001を発生する
2)MMU1、MMU2のマイクロTLB内での一致がPA=7001に対するリクエストを発生する
3)PA=7001におけるデータがコアに戻される
上記例と図50Aの例との比較から判るように、主な違いはMMU1が第1テーブルデスクリプタを直接記憶しないステップ7、およびMMU1もIA→PA変換を受信し、組み合わせを行わず、組み合わされたデスクリプタをそのTLBに記憶するステップ12B(ステップ12Aと12Bとは同時に生じ得る)にある。
従って、この別の実施例は仮想アドレスから物理アドレスへの変換をするのにまだページテーブルの2つの組を使用しているが、マイクロTLB2155と主TLB2160が直接仮想アドレス−物理アドレス変換を記憶することにより、マイクロTLB2155または主TLB2160のいずれかで一致が生じたときに、双方のMMUでルックアップを実行する必要がなくなることが理解できよう。かかるケースでは、第1MMUは第2MMUを参照することなく、コアからのリクエストを直接取り扱うことができる。
第2MMU2170がマイクロTLB2175および主TLB2180を含まないようにすることができると理解できよう。かかる場合、第2MMUによる取り扱い必要とするリクエストごとにページテーブルウォークロジック2185が使用される。これによって第2MMUの複雑性およびコストを減らすことができ、このことは第2MMUが比較的頻繁には必要とされないと仮定された場合に許容できる。リクエストごとに第1MMUを使用しなければならないので、第1MMUの作動速度を改善するのに第1MMU2150内にマイクロTLB2155および主TLB2160を設けることが一般に好ましい。
ページテーブル内のページはサイズが変わることがあり、従って変換のうちの2つの半分に対するデスクリプタが異なるサイズのページに関係するようにできることに留意すべきである。一般にMMU1のページはMMU2のページよりも少ないが、必ずしもこのようなケースとはならない。例えば、
テーブル1は0x40003000における4Kbを0x00081000にマッピングする。
テーブル2は0x00000000における1Mbを0x02000000にマッピングする。
ここで組み合わせ変換に対しては2つのサイズのうちの小さい方のサイズを使用しなければならないので、組み合わせデスクリプタは0x40003000における4Kbを0x02081000へマッピングする。
しかしながら、(図52を参照して前に説明したように)世界間でデータがスワップされる場合、例えば反対も真となり得る。
テーブル1は0xc0000000から0x00000000への1Mbをマッピングする。
テーブル1は0x00042000から0x02042000への4Kbマッピングする。次に、コアからのアドレス0xc0042010におけるルックアップによって、次のマッピング、すなわち0xc0042000から0x02042000への4Kbのマッピングを生じさせる。
すなわち組み合わせマッピングに対して2つのサイズのうちの小さい方のサイズが常に使用される。
第2のケースでは、このプロセスはあまり効率的ではなくなることに留意されたい。その理由は、テーブル1における(1Mb)のデスクリプタは繰り返しルックアップされ、異なる4Kbの領域に対するアクセスがされるときに廃棄されるからである。しかしながら、一般的なシステムではテーブル2のデスクリプタのほうがほとんどの時間で(第1の例と同じように)大きくなる。このほうがより効率的である(1Aの空間の適当な部分をポイントする別の4Kbのページに対して1Mbのマッピングを繰り返すことができる)。
図50Aおよび50Bに示されるような2つの別個のMMUを使用する別の例として、図53に示されるような1つのMMUを使用することもできる。この場合、主TLB2420で一致が生じると、MMUにより例外信号が発生され、この信号はコア10内でソフトウェアを作動させ、ページテーブルの2つの異なる組からのデスクリプタの組み合わせに基づき、仮想−物理アドレス変換を生じさせる。より詳細には、図53に示されるように、マイクロTLB2410および主TLB2420を含むMMU2400にコア10が結合されている。コア10がメモリアクセスリクエストを発生すると、パス2430を通して仮想アドレスが与えられ、マイクロTLB内で一致が発見された場合、対応する物理アドレスがパス2440を通して直接出力され、パス2450を通してコア10へデータが戻される。しかしながら、マイクロTLB2410内に一致がある場合、主TLB2420が参照され、主TLB内に対応するデスクリプタが含まれる場合、関連する仮想アドレス部分および対応する物理アドレス部分がマイクロTLB2410内へ検索され、その後、パス2440を通して物理アドレスを発生できる。しかしながら主TLBでも一致を生じた場合、パス2422を通してコアへ例外が発生される。次に、図54を参照し、かかる例外の受信からコア内で実行されるプロセスについて更に説明する。
図54に示されるように、ステップ2500でコアによりTLBの一致例外が検出された場合、コアはステップ2510でその例外に対する所定ベクトルでモニタモードとなる。これによって、図54に示されるステップの残りを実行するように、ページテーブルマージコードが作動させられる。
より詳細には、ステップ2520にてパス2430を通して発生され、マイクロTLB2410および主TLB2420の双方で不一致を生じさせた仮想アドレス(以下、フォールト仮想アドレスと称す)を検索し、その後、ステップ2530にてテーブルの第1の組内の適当なテーブルに対する中間ベースアドレスに応じて必要な第1デスクリプタに対する中間アドレスを決定する。(一般に仮想アドレスと中間ベースアドレスとの所定の組み合わせにより)一旦その中間アドレスが決定されると、次に第1デスクリプタに対する対応する物理アドレスを得るために、テーブルの第2の組内の対応するテーブルが参照される。その後、ステップ2550にて、メモリから第1デスクリプタをフェッチし、フォールト仮想アドレスに対する中間アドレスを決定することができる。
次にステップ2560にてフォールト仮想アドレスの中間アドレスに対する物理アドレスを生じさせる第2デスクリプタを探すために再び第2テーブルを参照する。その後、ステップ2570でフォールト仮想アドレスに対する物理アドレスを得るために第2デスクリプタをフェッチする。
一旦上記情報が得られると、プログラムは第1デスクリプタと第2デスクリプタとをマージし、必要な仮想アドレス−物理アドレス変換をする新しいデスクリプタを発生する。この操作はステップ2580で実行される。図50Bを参照して前に説明したのと同じように、ソフトウェアにより実行されるマージは再び組み合わせ変換に対する最小ページテーブルサイズを使用する。その後、ステップ2590にて主TLB2420内に新しいデスクリプタを記憶し、その後プロセスはステップ2590にて例外から戻る。
その後、コア10はパス2430を通してメモリアクセスリクエストに対して仮想アドレスを再発行するようになっており、この結果、マイクロTLB2410では不一致が生じるが、主TLB2420では一致が生じる。従って、仮想アドレス部分と対応する物理アドレス部分とをマイクロTLB2410へ検索することができ、その後、マイクロTLB2410がパス2440を通して物理アドレスを発生することができ、その結果、必要なデータがパス2450を通してコア10へ戻される。
図50Aおよび50Bを参照して前に説明した実施例とは別の実施例として、図53および54を参照してこれまで説明した原理を使用するソフトウェアにより、これら実施例における一方または双方のMMUを管理できる。
図50Aまたは50Bに示されるように、2つのMMUを使用するか、図53に示されるように1つのMMUを使用するかにかかわらず、モニタモード(または特権安全モード)で作動する際に、プロセッサによりページテーブルの第2の組が管理されることによって、これらページテーブルを安全にすることができる。この結果、プロセッサが非安全ドメインにあるときには、プロセッサは非安全メモリしか見ることができない。その理由は、非安全ドメイン内にあるときにプロセッサが見ることができるのは、ページテーブルの第2の組により非安全ドメインに対して発生される中間アドレス空間だけであるからである。この結果、図1に示されるメモリ管理ロジック30の一部として、パーティションチェッカーを設ける必要はない。しかしながら、システム内の他のバスマスターにより行われるアクセスをモニタするのに、外部バスにパーティションチェッカーが設けられる。
図37および図38を参照して前に説明した実施例では、MMU200に関連してパーティションチェッカー222が設けられていた。従って、キャッシュ38内でアクセスを実行すべきときに、マイクロTLB206内でまずルックアップが実行され、従って、アクセスパーミション、特に安全および非安全許可がチェックされていたはずである。従って、かかる実施例では非安全アプリケーションによりキャッシュ38内に安全データを記憶することはできない。キャッシュ38へのアクセスはパーティションチェッカー222により実行されるパーティションチェックによって制御されているので、非安全モードでは安全データへのアクセスを実行することはできない。
しかしながら、本発明の別の実施例では、システムバス40を通して行われるアクセスをモニタするためのパーティションチェッカー222は設けられず、その代わりに、データ処理装置が外部バス70に接続されたメモリユニットへのアクセスをモニタするよう、この外部バス70に結合された単一パーティションチェッカーを有するにすぎない。かかる実施例では、このことはプロセッサコア20が外部パーティションチェッカーによるアクセスの規制を行うことなく、システムバス40、例えばTCM36およびキャッシュ38に直接結合されたメモリユニットにアクセスでき、従って、非安全モードで作動中にプロセッサコア10がキャッシュ38またはTCM36内の安全データにアクセスできないように保証するのに、ある機構が必要であることを意味している。
図55は、本発明の一実施例に係わるデータ処理装置を示し、この実施例ではキャッシュ38および/またはTCM36がMMU200に関連してパーティションチェックロジックを設ける必要なく、これらへのアクセスを制御できるようにする機構が設けられている。図55に示されるように、コア10はMMU200を介してシステムバス40に結合されており、システムバス40にはキャッシュ38およびTCM36も結合されている。コア10、キャッシュ38およびTCM36は外部バスインターフェース42を介して外部バス70に結合されており、外部バス70は図55に示されるようにアドレスバス2620、制御バス2630およびデータバス2640から成る。
コア10、MMU200、キャッシュ38、TCM36および外部バスインターフェース42はこれらが外部バス70に接続された単一のデバイス(デバイスバスとも称される)を構成すると見なすことができ、このデバイスには他のデバイス、例えば安全周辺デバイス470または非安全周辺デバイス472も結合することができる。デバイスバス70には1つ以上のメモリユニット、例えば外部メモリ56も接続されている。更に、デバイスバス70にはバス制御ユニット2650が接続されており、この制御ユニットは一般にアービッタ2652と、デコーダ2654と、パーティションチェッカー2656とを含む。デバイスバスに接続された部品の作動を総合的に説明するために、前に説明した図47を参照しなければならない。前に説明した図47では、アービッタとデコーダとパーティションチェッカーとが別個のブロックとして示されていたが、これらを単一の制御部ロック2650内に設けたときでも、これら要素は同じように作動する。
図56には図55のMMU200がより詳細に示されている。図56と図37とを比較することにより、MMU200を図37のMMUと全く同じように構成できるが、主TLB208とマイクロTLB206との間でパス242を通して送られるデータをモニタするためのパーティションチェッカー222が設けられている点が異なっているにすぎない。プロセッサコア10が仮想アドレスを指定するメモリアクセスリクエストを発生する場合、このメモリアクセスリクエストはMMU200を通してルーティングされ、図37を参照して前に説明したように処理され、その結果、マイクロTLB260からパス238を通してシステムバス40に物理アドレスが出力される。これと対照的に、メモリアクセスリクエストが直接物理アドレスを指定する場合、このアクセスリクエストはMMU200をバイパスし、その代わりに直接パス236を介してシステムバス40へルーティングされる。一実施例では、プロセッサはモニタモードで作動しているときにしか、物理アドレスを直接指定するメモリアクセスリクエストを発生しない。
MMU200の前の説明から、特に図43の説明から思い出すことができるように、主TLB208は多数のデスクリプタ435を含み、各デスクリプタに対して対応するデスクリプタが安全ページテーブルからのものか、または非安全ページテーブルからのものかを識別するためのドメインフラグ425が設けられている。図55のMMU200内にはこれらデスクリプタ435および関連するドメインフラグ425が略図で示されている。
コア10がメモリアクセスリクエストを発生すると、この結果、メモリアクセスリクエストのための物理アドレスがシステムバス40に出力され、そのアドレスによって指定されたデータアイテムがキャッシュ内に記憶されているかどうかを判断するためのルックアッププロセスを一般にキャッシュ38が実行する。キャッシュ内で一致が生じた場合、すなわちアクセスリクエストを受けたデータアイテムがキャッシュ内に記憶されていないと判断された場合にはいつも、キャッシュによりラインフィル手順が開始され、メモリアクセスリクエストを受けたデータアイテムを含むデータのラインを外部メモリ56から検索する。特にキャッシュはEBI42を介し、デバイスバス70の制御バス2630にラインフィルリクエストを出力する。この場合、アドレスバス2620にはスタートアドレスが出力される。更に、パス2632を通して制御バス2630にHPROT信号が出力される。この信号はメモリアクセスリクエストが発生されたときにコアの作動モードを指定するドメイン信号を含む。従って、ラインプロセスをキャッシュ38による外部バス上の元のメモリアクセスリクエストの伝搬と見なすことができる。
このHPROT信号はパーティションチェッカー2656により受信され、従ってこの信号は外部メモリ56からの指定データをリクエストするデバイス(この場合、コア10およびキャッシュ38を内蔵するデバイス)がメモリアクセスリクエストの発生されたときに安全ドメインで作動中か、または非安全ドメインで作動中かをパーティションチェッカーに対して識別する。このパーティションチェッカー2650はメモリのどの領域が安全であるのか、または非安全であるのかを識別するパーティション情報にもアクセスし、従ってデバイスがリクエスト中のデータにアクセスできるかどうかを判断できる。従って、HPROT信号内のドメイン信号(本明細書ではSビットとも称す)が安全モードで作動中のデバイスにより、このデータへのアクセスがリクエストされたかどうかを識別するようにアサートされた場合にしか、デバイスがメモリの安全部分へアクセスできないようにパーティションチェッカーを構成できる。
例えばコアが非安全作動モードで作動しているとHPROT信号が識別したために、コア10がリクエストされたデータへアクセスできるとパーティションチェッカーが判断し、メモリの安全領域内にあるデータを外部メモリから検索することをラインフィルリクエストが求めている場合、パーティションチェッカー2656は制御バス2630へアボート信号を発生する。このアボート信号はパス2636を通してEBI42へ送り戻され、このEBI42からキャッシュ38へ戻されるので、その結果、アボート信号はパス2670を通してコア10へ発生される。しかしながら、アクセスが認められていないとパーティションチェッカー2656が判断した場合、パーティションチェッカーは外部メモリから検索されたデータが安全データであるか、または非安全データであるかを識別するSタグ信号を出力し、このSタグ信号はパス2634を介してEBI42へ送り戻され、次にこのEBIからキャッシュ38へ送られ、ラインフィルプロセスの主題であるキャッシュライン2600に関連する2602のセットを可能にする。
これと同時に、制御信号2650は、外部メモリがリクエストされたラインフィルデータを出力すること認可する。このデータはEBI42を介してパス2680を通ってキャッシュ38へ送り戻され、対応するキャッシュライン2600に記憶される。従って、このプロセスの結果としてキャッシュ38内の選択されたキャッシュラインは外部メモリ56からのデータアイテムで満たされる。これらデータアイテムはコア10からの元のメモリアクセスリクエストの主題であったデータアイテムを含む。コアからのメモリアクセスリクエストの主題であるデータアイテムは次にキャッシュ38からコアへ戻すことができるし、またはこれとは異なり、直接EBI42からパス2660を通してコア10へ与えることができる。
好ましい実施例では、上記ラインフィルプロセスの結果としてキャッシュラインへのデータの最初の記憶が行われるので、このキャッシュラインに関連したフラグ2606がパーティションチェッカー2656によって与えられる値に基づきセットされ、そのフラグがキャッシュ38に使用され、そのキャッシュライン2600内のデータアイテムへのその後のアクセスを直接制御できる。従って、コア10がキャッシュ38の特定のキャッシュライン2600内の一致を生じさせるメモリアクセスリクエストをその後発生する場合、キャッシュ38は関連するフラグ2602の値を検討し、その値とコア10のそのときの作動モードとを比較する。好ましい実施例では、CP15のドメインステータスレジスタ内のモニタモードによってセットされるドメインビットにより、コア10のそのときの作動モードが表示される。従って、プロセッサコア10が安全モードで作動しているときに、対応するフラグ2602が安全データであると識別するキャッシュラインのデータアイテムをプロセッサコア10によってしかアクセスできないように、キャッシュ38を構成できる。コアが非安全モードで作動中に、キャッシュ38内の安全データにコアがアクセスしようとする試みの結果、キャッシュ38はパス2670を通してアボート信号を発生する。
種々の方法でTCM36を設定できる。一実施例では、このTCMはキャッシュのように働くように設定でき、この実施例では複数のライン2610を含むようになっており、このラインの各々はキャッシュ38と同じようにラインに関連するフラグ2612を有する。次に、TCM36へのアクセスはキャッシュ38を参照して前に説明したのと全く同じように管理され、TCMの不一致の結果、ラインフィルプロセスが実行され、この結果、特定ライン2610にデータが検索され、パーティションチェッカー2656がライン2610に関連するフラグ2612に記憶するための必要なSタグの値を発生する。
別の実施例では、TCM36を外部メモリ56の延長として設定し、プロセッサによって頻繁に使用されるデータを記憶するように使用できる。その理由は、システムバスを介したTCMへのアクセスは外部メモリへのアクセスよりもかなり高速であるからである。かかる実施例では、TCM36はフラグ2612を使用せず、代わりにTCMへのアクセスを制御するのに別の機構が使用される。特に前に説明したように、かかる実施例では特権安全モードで実行中の場合にしかプロセッサによって密結合メモリを制御できないか、または少なくとも非安全モードで実行中のプロセッサによって制御できるかどうかを示すために、特権安全モードで作動中のプロセッサによってセットできる制御フラグを発生することができる。この制御フラグは安全オペレーティングシステムによってセットされ、実際にTCMを特権安全モードで制御するのか、または非安全モードで制御するのかを定める。従って、定めることができる1つのコンフィギュレーションはプロセッサが特権安全作動モードでしかTCMを制御しないようにすることである。かかる実施例では、TCM制御レジスタへ試みられる非安全アクセスによって、未定義命令例外が入力される。
別のコンフィギュレーションでは、プロセッサが非安全作動モードで作動中にこのプロセッサによってTCMを制御できる。かかる実施例ではTCMは非安全アプリケーションによってしか使用されない。TCMから安全データを記憶したり、ロードすることはできない。従って、安全アクセスの実行中にアドレスがTCMアドレスレンジと一致しているかどうかを見るためのルックアップはTCM内では実行されない。
図57はプロセッサコア10で作動中の非安全プログラムが仮想アドレス(ステップ2700)を発生するときの、図55の装置によって実行される処理を示すフローチャートである。まずステップ2705でマイクロTLB206内でルックアップが実行され、この結果、一致が生じた場合、マイクロTLBはステップ2730でアクセス許可をチェックする。図56を参照すると、このプロセスはアクセス許可ロジック202によって実行されるものと見なすことができる。
ステップ2705において、マイクロTLBのルックアップで一致が生じた場合、内部に記憶されている非安全デスクリプタの間でもルックアップが主TLB208で実行される(ステップ2710)。この結果一致が生じると、ステップ2715でページテーブルウォークプロセスが実行される(このプロセスは図37を参照して前に詳細に説明した)。その後、ステップ2720にて主TLBがタグの付いた有効な非安全デスクリプタを含むかどうかの判断がされる。ステップ2710におけるルックアップが一致を発生した場合、プロセスは直接ステップ2720に進む。
その後、ステップ2725において、マイクロTLBに物理アドレスを含むデスクリプタの部分がロードされ、その後、ステップ2730でマイクロTLBがアクセス許可をチェックする。
ステップ2730でアクセス許可の違反がないと判断された場合、プロセスはステップ2740に進み、ここでパス230を通して(図55に示されているパス2670に類似する)プロセッサコアにアボート信号が発生される。しかしながら、違反が検出されないと仮定した場合、ステップ2745でアクセスがキャッシュ可能なデータアイテムに関連しているかどうかの判断がされる。関連していなければ、ステップ2790で外部アクセスが開始され、外部メモリ56からのデータアイテムの検索が望まれる。ステップ2795にて、パーティションチェッカー2656は安全パーティション違反があるかどうか、すなわちプロセッサコア10が非安全モードで作動中に安全メモリ内のデータアイテムにアクセスすることを望んでいるかどうかを判断する。違反が検出された場合、パーティションチェッカー2656はステップ2775にてアボート信号を発生する。しかしながら、安全パーティション違反がない場合、プロセスはステップ2785に進み、ここでデータのアクセスが行われる。
ステップ2745にて、リクエストされているデータアイテムがキャッシュ可能であると判断された場合、キャッシュ内でステップ2750にてキャッシュルックアップが実行され、一致が検出された場合、キャッシュはステップ2755にて安全ラインタグ違反があるかどうかの判断をする。従って、この段階ではキャッシュはデータアイテムを含むキャッシュラインに関連するフラグ2602の値を検討し、そのフラグの値とコア10の作動モードとを比較し、リクエストされているデータアイテムにアクセスする権限がコアにあるかどうかの判断をする。安全ラインタグ違反が検出された場合、プロセスはステップ2760に進み、このステップで安全違反フォールトアボート信号がキャッシュ38により発生され、パス2670を通してコア10へ発生される。しかしながら、ステップ2755で非安全ラインタグ違反が検出されない場合、ステップ2785でデータアクセスが行われる。
ステップ2750でキャッシュルックアップが実行されるときにキャッシュの一致が生じた場合、ステップ2765でキャッシュラインフィルが開始される。ステップ2770でパーティションチェッカー2656は安全パーティション違反があるかどうかを検出し、違反が検出された場合、ステップ2775でアボート信号を発生する。しかしながら、安全パーティション違反が検出されなかった場合、キャッシュラインフィルはステップ2780に進み、この結果、進み2785でデータアクセスが完了する。
図57に示されるように、ステップ2705、2710、2715、2720、2725、2730および2735はMMU内で実行され、ステップ2745、2750、2755、2765、2780および2790はキャッシュにより実行され、ステップ2770および2795はパーティションチェッカーにより実行される。
図58は、コア上で実行中の安全プログラムが仮想アドレスを発生する場合(ステップ2800)に実行される同様なプロセスを示すフローチャートである。図58と図57とを比較すると、MMU内で実行されるステップ2805〜2835は図57を参照して前に説明したステップ2705〜2735に類似することが理解できよう。唯一の差はステップ2810にて主TLB内で実行されるルックアップが主TLB内に記憶された安全デスクリプタに関連して行われ、この結果、ステップ2820にて主TLBがタグの付いた有効な安全デスクリプタを含むことである。
キャッシュ内でキャッシュは安全ラインタグ違反を待たなくてよい。図58を参照して説明した実施例では、安全プログラムは安全データおよび非安全データの双方にアクセスできると仮定されている。従って、ステップ2850にてキャッシュルックアップ中に一致が生じた場合、プロセスはステップ2885にてデータアクセスに直接進む。
同様に、外部メモリへの外部アクセスが求められた場合(すなわちステップ2865または2890にて)、パーティションチェッカーはパーティションチェックを実行する必要はない。安全プログラムは安全データまたは非安全データのいずれかにアクセスできると考えられるからである。
キャッシュ内で実行されるステップ2845、2850、2865、2880および2890は、図57を参照して前に説明したステップ2745、2750、2765、2780および2790に類似している。
図59はプロセッサで実行される別のモードおよびアプリケーションを示す。点線は本発明の一実施例に係わるプロセッサのモニタ中に、異なるモードおよび/またはアプリケーションをどのように分離し、互いにアイソレートできるかを示している。
生じ得る障害を見つけ、どうして期待するようにアプリケーションが作動しないかを発見するためにプロセッサをモニタする能力は極めて有効であり、多くのプロセッサはかかる機能を提供できる。デバッグおよびトレース機能を含む種々の方法でモニタリングを実行することができる。
本技術に係わるプロセッサでは、停止デバッグモードおよびモニタデバッグモードを含むいくつかのモードでデバッグを作動させることができる。これらモードは割り込み的であり、そのときに作動しているプログラムをストップさせる。停止デバッグモードにおいて、ブレークポイントまたはウォッチポイントが生じると、コアを停止し、システムの他の部分からアイソレートし、コアはデバッグ状態に入る。入力時にコアは停止され、パイプラインはフラッシングされ、命令はプリフェッチされない。PCはフリーズされ、どの割り込み(IRQおよびFIQ)も無視される。(JTAGシリアルインターフェースを介し)コアの内部ステートだけでなくメモリシステムのステートも検査できる。このステートはそのときのモードを変更したり、レジスタの内容を変えたりすることができるように、プログラムの実行に対して侵入的である。一旦デバッグが終了されると、コアはデバッグTAP(テストアクセスポート)を通した再スタート命令においてスキャニングをすることによりデバッグステートから脱出する。次にプログラムは実行を再開する。
モニタデバッグモードでは、ブレークポイントまたはウォッチポイントはコアをアボートモードにし、それぞれプリフェッチベクトルまたはデータアボートベクトルを取り込む。この場合、コアはまだ機能モードにあり、停止デバッグモードと同じように停止されない。アボートハンドラーはデバッガーアプリケーションと通信し、プロセッサおよびコプロセッサのステートまたはダンプメモリにアクセスする。デバッグハードウェアをソフトウェアデバッガーの間をデバッグモニタプログラムがインターフェースするようになっている。デバッグステートおよび制御レジスタDSCRのビット11がセットされた場合(後の記載を参照)、割り込み(FIQおよびIRQ)を禁止できる。モニタデバッグモードでは、ベクトルのキャッチがデータアボートおよびプリフェッチアボートでディスエーブルされ、モニタデバッグモードに対して発生されたアボートの結果としてプロセッサが回復不能なステートになるのを防止できる。モニタデバッグモードはあるタイプのデバッグモードであり、安全な世界と非安全な世界との間の切り替えを監督するモードであるプロセッサのモニタモードには関連していないことに留意すべきである。
デバッグはある時間におけるプロセッサのステートのスナップショットを提供できる。デバッグはデバッグの開始リクエストが受信されたときに種々のレジスタにおける値を注目することによりこれを行う。これら値はスキャンチェーン(図67の541、544)に記録され、これら値はJTAGコントローラ(図1の18)を使ってシリアルに出力される。
コアをモニタする別の方法はトレースによる方法である。このトレースは割り込み的ではなく、コアが作動し続ける際のその後のステートを記録する。このトレースハう1の埋め込みトレースマクロセル(ETM)22、26で作動する。ETMはトレースポートを有し、このトレースポートを通してトレース情報が出力され、トレースポートは外部トレースポートアナライザによって分析される。
本技術の実施例のプロセッサは2つの別個のドメインで作動し、上記実施例ではこれらドメインは安全ドメインと非安全ドメインとを含む。しかしながら、モニタ機能の目的のために、当業者にはこれらドメインは任意の2つのドメインとすることができ、これらドメインの間ではデータをリークしてはならないことが明らかとなろう。本技術の実施例は2つのドメインの間でのデータのリークを防止することに関係しており、従来システム全体へのアクセスが認められるモニタ機能、例えばデバッグおよびトレースは、ドメイン間でデータがリークされる潜在的な原因となっている。
安全ドメインまたは世界および非安全ドメインまたは世界の上記例では、安全データは非安全な世界にとって利用できるものであってはならない。更に、デバッグが許可された場合、安全な世界では安全な世界内のデータの一部を制限するかまたは隠すことが有利である。図57におけるハッシュラインはデータアクセスをセグメント化し、異なるレベルの粒度を提供する可能な方法のいくつかの例を示している。図59では、ブロック500によりモニタモードが示されており、このモードはすべてのモードのうちで最も安全なものであり、安全な世界と非安全な世界の間の切り替えを制御するようになっている。モニタモード500の下にはスーパーバイザーモードがあり、このモードは安全スーパーバイザーモード510と非安全スーパーバイザーモード520とを含む。次に、アプリケーション522および524を有する非安全ユーザーモードおよびアプリケーション512、514および516を有する安全ユーザーモードがある。モニタモード(デバッグおよびトレース)は、(ハッシュライン501の左に対する)非安全モードをモニタするためにしか制御できない。これとは異なり、非安全ドメインまたは世界および安全ユーザーモードをモニタすること(502の下方にある501の左および右部分)が認められている。別の実施例では、非安全な世界および安全ユーザードメインで作動する所定のアプリケーションが認められており、この場合、ハッシュライン503による更なるセグメント化が行われる。かかる分割は異なるアプリケーションを作動し得る異なるユーザー間での安全データの漏れを防止することに役立つ。ある制御されるケースでは、システム全体をモニタすることが認められる。コアの次の部分は必要とされる粒度に従ってモニタ機能中にアクセスを制御する必要がある。
デバッグイベントでセットできる4つのレジスタがある。すなわち命令フォールトステータスレジスタ(IFSR)、データフォールトステータスレジスタ(DFSR)、フォールトアドレスレジスタ(FAR)および命令フォールトアドレスレジスタ(IFAR)がある。これらレジスタは一部の実施例では安全な世界から非安全な世界に入ったときに、データのリークを防止するためにフラッシングしなければならない。
PCサンプルレジスタ: デバッグTAPはスキャンチェーン7を通してPCにアクセスできる。安全な世界内でデバッグを行う際に、安全な世界で選択されたデバッグの粒度に応じてその値をマスクすることができる。非安全な世界または非安全な世界プラス安全ユーザーアプリケーションは、安全な世界でコアが実行されている間、PCの値を入手できない。
TLBエントリー: CP10を使い、マイクロTLBエントリーを読み出し、主TLBエントリーを読み出しかつ書き込みできる。主TLBおよびマイクロTLBのローディングおよびマッチングを制御することもできる。特に安全スレッドを知っているデバッグがMMU/MPUの補助を必要とする場合、この種の作動を厳密に制御しなければならない。
性能モニタ制御レジスタ: キャッシュの不一致、マイクロTLBの不一致、外部メモリリクエスト、実行される分岐命令などに関する情報を与える。デバッグステートでも非安全な世界はこのデータにアクセスしてはならない。安全な世界でデバッグがディスエーブルされた場合でも、安全な世界でカウンタは作動できるようになっていなければならない。
キャッシュシステムにおけるデバッギング: キャッシュシステムではデバッグは非割り込み的でなければならない。重要なことは、キャッシュと外部メモリとの間のコヒーレンスを維持することである。CP15を使ってキャッシュを無効にすることができるし、またはキャッシュをすべての領域で強制的に書き込みスルーとすることができる。いずれのケースにおいてもデバッグにおけるキャッシュの挙動の変更を認めることはセキュリティが脆弱になり得ることであり、これは制御しなければならない。
エンディアン性: デバッグにアクセスできる非安全な世界または安全ユーザーアプリケーションがエンディアン性を変更できるように認めるべきではない。エンディアン性を変更することは安全カーネルを誤作動させる可能性があり、エンディアン性のアクセスは粒度に従ってデバッグでは禁止される。
モニタ機能の開始時にコアの一部に対するモニタ機能のアクセスを制御できる。デバッグおよびトレースは種々の方法で初期化される。本技術の実施例は所定の条件下での初期化を認めるだけでコアの所定安全部分に対するモニタ機能のアクセスを制御するようになっている。
本技術の実施例は次の粒度によるモニタ機能への進入を制限しようとしている。
割り込み的なデバッグと観測可能な(トレース)デバッグとを別々に制御することにより;
安全ユーザーモードだけ、または全安全な世界におけるデバッグの進入を認めることにより;
安全ユーザーモードだけのデバッグを認め、更にスレッドID(アプリケーションの実行)を考慮することにより、モニタ機能への進入を制限する。
モニタ機能の開始を制御するためには、機能をどのように開始できるかについて知ることが重要である。図60はモニタ機能を開始する可能な方法、開始されるモニタ機能のタイプおよびかかる開始命令をプログラム化できるようにする方法を示す表である。
一般にソフトウェアまたはハードウェアを介し、例えばJTAGコントローラを介し、これらモニタ命令を入力できる。モニタ機能の開始を制御するために制御値が使用される。これら値は条件に応じたイネーブルビットを含むので、特定の条件が存在した場合、イネーブルビットがセットされた場合にしかモニタは開始が認められない。これらビットはICE530(図67参照)にある安全レジスタCP14(デバッグおよびステータス制御レジスタ、DSCR)に記憶される。
好ましい実施例では割り込み的および観測可能なデバッグをイネーブル/ディスエーブルするビットが4つ設けられ、これらビットは安全デバッグイネーブルビット、安全トレースイネーブルビット、安全ユーザーモードイネーブルビットおよび安全スレッドアウェアイネーブルビットを含む。これら制御値はモニタ機能のためのある程度の制御可能な粒度を提供するように働き、例えば特定のドメインからのデータの漏れをストップするように働くことができる。図61は、これらビットの概要およびこれらビットにどのようにアクセスできるかを示している。
これら制御ビットは安全ドメイン内のレジスタに記憶され、このレジスタへのアクセスは3つの可能性に限定される。ARMコプロセッサのMRC/MCR命令を介してソフトウェアのアクセスが行われ、これら命令は安全スーパーバイザーモードからしか認められない。これとは異なり、認証コードを使用することにより他のモードからのソフトウェアへのアクセスを行うことができる。更に別の方法は、更にハードウェアのアクセスに関連し、入力ポートを介したJTAGへの命令の書き込みに関係する。更にモニタ機能の利用性に関連する制御値を入力するのに使用される他に、この入力ポートはプロセッサの他の機能に関連する制御値を入力するのに使用できる。
次に、スキャンチェーンおよびJTAGに関連する別の詳細について説明する。
レジスタロジックセル
どの集積回路(IC)も2つの種類のロジックから成る。
・組み合わせロジックセル;AND、OR、INVゲートに類似する。かかるゲートまたはかかるゲートの組み合わせを使用し、1つまたは複数の入力信号に従い、ブール演算式を計算するのに使用される。
・レジスタロジックセル;ラッチ、フリップフロップに類似する。かかるセルは信号の値を記憶するのに使用される。図62は正のエッジでトリガーされるフリップフロップの図である。
クロック信号(CK)で正のエッジのイベントが生じると、出力(Q)は入力(D)の値を受信し、そうでない場合、出力(Q)はメモリにその状態を維持する。
スキャンチェーンセル
テストまたはデバッグのためには、レジスタロジックセルの機能アクセスをバイパスさせ、直接レジスタロジックセルの内容にアクセスすることが必要である。従って、レジスタセルは図63に示されるようにスキャンチェーンセル内に集積化されている。
機能モードではSE(スキャンイネーブル)がクリアされ、レジスターセルは単一のレジスターセルとして働く。テストまたはデバッグモードではSEがセットされ、D入力の代わりにSI入力(スキャン入力)から入力データが出ることができる。
スキャンチェーン
図64に示されるように、スキャンチェーンにおいてすべてのスキャンチェーンセルがチェーン化される。
機能モードではSEがクリアされ、すべてのレジスターセルに正常にアクセスすることができ、回路の他のロジックと相互作用することができる。テストまたはデバッグモードではSEがセットされ、スキャンチェーン内ですべてのレジスタが互いにチェーン化される。第1スキャンチェーンセルからデータが出ることができ、各クロックサイクルのカデンスにおいて他のスキャンチェーンシェルを通過するようにシフトできる。レジスタの内容を見るためにデータをシフトして出すこともできる。
TAPコントローラ
いくつかのスキャンチェーンを取り扱うのにデバッグTAPコントローラが使用される。TAPコントローラは特定のスキャンチェーンを選択できる。例えば「スキャンイン」および「スキャンアウト」信号を特定のスキャンチェーンへ送り、データはチェーン内にスキャンし、シフトし、またはスキャンアウトできる。このTAPコントローラはJTAGポートインターフェースにより外部から制御される。図65はTAPコントローラを略図で示す。
JTAGの選択可能なディスエーブルスキャンチェーンセル
セキュリティ上の理由から、デバッグモードまたはテストモードでもスキャンチェーンによって一部のレジスタにはアクセスできないようになっている。JADI(JTAGアクセスディスエーブル)と称される新しい入力信号は集積回路内のスキャンチェーン構造を変えることなく、スキャンチェーン全体からスキャンチェーンセルをダイナミックまたはスタティックに除去することを認めることができる。図66Aおよび66Bはこの入力を略図で示す。
機能モードまたはテストモード、またはデバッグモードのいずれかのときにJADIがアクティブでない(JADI=0)場合、スキャンチェーンは通常のように働く。JADIがアクティブ(JADI=1)であり、テストまたはデバッグモードとなっている場合(設計者によって選択された)一部のスキャンチェーンセルをスキャンチェーン構造から「除く」ことができる。同じ数のスキャンチェーンセルを維持するにはJTAG選択ディスエーブルスキャンチェーンセルはバイパスレジスタを使用する。スキャンアウト(SO)とスキャンチェーンセル出力(Q)とは異なることに留意されたい。
図67はJTAGの部品の一部を含むプロセッサを略図で示す。正常な動作では命令メモリ550はコアと通信し、所定の状況でレジスタCP14とも通信し、制御値をリセットする。このことは一般に安全スーパーバイザーモードからしか認められない。
デバッグが開始されると、デバッグTAP580を介して命令が入力され、この命令がコアを制御する。デバッグ内のコアはステップごとのモードで作動する。デバッグTAPは(JADIピンとして示されたJSDAENピンに入力されるアクセス制御信号、すなわち図45におけるJTAG ACCESS DISABLE INPUTに応じて)コアを介し、CP14にアクセスし、このように制御値もリセットできる。
アクセス制御信号JSDAENによりデバッグTAP580を介したCP14スペースレジスタへのアクセスが制御される。この制御はアクセス、特に書き込みアクセスを認めるためにJSDAENをハイレベルに設計しなければならないようになっている。プロセッサ全体が証明中のボード段階でJSDAENはハイレベルにセットされ、システム全体でデバッグがイネーブルされる。一旦システムがチェックされると、JSDAENピンをアースに接続できる。このことは、安全モードのデバッグをイネーブルする制御値へのアクセスは、そのときにデバッグTAP580を介して利用できないことを意味する。一般に製造モードにおけるプロセッサはアースに接続されたJSDAENを有する。従って、制御値へのアクセスは命令メモリ550を介してソフトウェアルートによってしか利用できない。認証コードが当てられることを条件に、このルートを介したアクセスは安全スーパーバイザーモードまたは別のモードに制限される(図68参照)。
デフォルトによるデバッグ(割り込み的または観測可能なトレース)は非安全な世界においてしか利用できないことに留意すべきである。安全な世界でデバッグを利用できるようにするには、制御値イネーブルビットをセットする必要がある。
この利点は非安全な世界において作動するように常にユーザーによってデバッグを開始できることである。従って、一般にデバッグの際に安全な世界へのアクセスはユーザーには利用できないが、このことは多くの場合には問題とならない。その理由は、この安全な世界へのアクセスは限定されており、利用できるようになる前にボード段階で安全な世界が完全に証明されているからである。従って、多くの場合、安全な世界のデバッグは不要となることが予測される。必要な場合、安全スーパーバイザーモードはCP14を書き込むソフトウェアルートによりデバッグを開始できる。
図68はデバッグ初期化の制御を略図で示す。この図では、コア600の一部は記憶素子601(この素子は前に説明したようにCP15レジスタでよい)を含み、この素子内にシステムが安全な世界であるか否かを表示する安全ステータスビットSが記憶されている。コア600はプロセッサが作動しているときのモード、例えばユーザーモードを表示するビットを含むレジスタ602と、現在コアで作動中のアプリケーションまたはスレッドを識別するコンテクスト識別子を発生するレジスタ603も含む。
ブレークポイントに達すると、レジスタ611に記憶されたブレークポイントとレジスタ612に記憶されたコアのアドレスとを比較するコンパレータ610が制御ロジック620へ信号を送る。制御ロジック620は安全ステートS、モード602およびスレッド(コンテクスト識別子)603を見て、これらと制御値およびレジスタCP14上に記憶された条件インジケータとを比較する。システムが安全な世界内で作動していない場合、「デバッグ進入」信号が630で出力される。しかしながら、システムが安全な世界で作動する場合、制御ロジック620はモード602を見る。このモードがユーザーモードであれば、ユーザーモードイネーブルビットおよびデバッグイネーブルビットがセットされているかどうかを見るためにチェックする。そうである場合、スレッドアウェアビットが初期化されていないことを条件に、デバッグが初期化される。これまでの説明は制御値の階層的性質を示すものである。
図68にはレジスタCP14に記憶された制御値を、どのように安全スーパーバイザーモードだけから変更できるのか(この実施例ではプロセッサは製造段階にあり、JSDAENはアースに接続されている)と共に、モニタ制御のスレッドアウェア部分も略図で示されている。安全ユーザーモードから認証コードを使って安全スーパーバイザーモードを入力し、次にCP14に制御値をセットできる。
スレッドに対してデバッグが可能なことをスレッドコンパレータ640が示すことを条件に、ブレークポイントに達したことをアドレスコンパレータ610が表示したときに、制御ロジック620は「デバッグ進入」信号を出力する。このことは、CP14にスレッドアウェア初期化ビットがセットされることを仮定している。ブレークポイントの後でスレッドアウェア初期化ビットがセットされあ場合、アドレスおよびコンテクスト識別子がブレークポイントおよび許容できるスレッドインジケータ内に表示された識別子に一致する場合にしか、デバッグまたはトレースに入ることはできない。モニタ機能の開始後にコンテクスト識別子がコンパレータ640により許容されたスレッドとして検出される間にしか、診断データの捕捉が続かない。アプリケーションの作動が認められない作動であることをコンテクスト識別子が示すと、診断データの捕捉が抑制される。
好ましい実施例では、粒度内にある程度の階層性があることに留意すべきである。実際に安全デバッグまたはトレースイネーブルビットが頂部にあり、その後、安全ユーザーモードイネーブルビットが続き、最後に安全スレッドアウェアイネーブルビットがある。これについては図69Aおよび69B(以下参照)に示されている。
「デバッグおよびステータス」レジスタ(CP14)内に保持された制御値はドメイン、モードおよび実行スレッドに従って安全デバッグ粒度を制御する。この値はスーパーバイザーモードの頂部にある。「デバッグおよびステータス制御」レジスタCP14が構成されると、このレジスタは安全スーパーバイザーモードまでなり、対応するブレークポイント、ウォッチポイントなどをプログラムし、コアをデバッグステートにする。
図69Aは割り込み的デバッグのための安全デバッグ粒度の概要を示す。リセット時のデフォルト値は灰色で示される。
観測可能なデバッグに関するデバッグ粒度についても同じである。図69Bは、この場合における安全デバッグ粒度の概要を示し、リセット時のデフォルト時も灰色で示される。
安全ユーザーモードデバッグイネーブルビットおよび安全スレッドアウェアデバッグイネーブルビットは割り込み的なデバッグと観測可能なデバッグの双方に対して共通に使用される。
レジスタCP14にはスレッドアウェア初期化ビットが記憶され、このビットはアプリケーションによる粒度が必要であるかどうかを表示する。スレッドアウェアビットが初期化されている場合、制御ロジックはアプリケーション識別子またはスレッド603がスレッドアウェア制御値に表示されたものであるかどうかを更にチェックする。そうである場合、デバッグが初期化される。ユーザーモードビットまたはデバッグイネーブルビットのいずれかがセットされないか、またはスレッドアウェアビットがセットされ、実行中のアプリケーションがスレッドアウェア制御値で表示されたアプリケーションでない場合、ブレークポイントが無視され、コアはこれまで行われてきたことを続け、デバッグは初期化されない。
モニタ機能の初期化を制御する他に、モニタ機能中の診断データの捕捉も同じように制御できる。これを行うために、コアは制御値の双方、すなわちレジスタCP14に記憶されているイネーブルビットおよびモニタ機能の作動中に関係する条件を検討し続けなければならない。
図70は実行中のモニタ機能の粒度を略図で示す。この場合、領域Aは診断データを捕捉することが許可された領域に関係し、領域Bは診断データを捕捉できないことをCP14内に記憶された制御値が表示する領域に関係する。
従って、デバッグが実行中であり、プログラムが領域A内で作動しているときに、デバッグ中に診断データがステップごとに出力される。作動が領域Bに切り替わり、ここで診断データの捕捉が認められていない場合、デバッグはステップごとに進行するのではなく、自動的に進行し、データは捕捉されない。このことは、プログラムの作動が領域Aに再進入するまで続き、再進入後、診断データの捕捉が再びスタートし、デバッグがステップごとに続けられる。
上記実施例では、安全ドメインがイネーブルされた場合、SMI命令は常に原子事象として見られ、診断データの捕捉が抑制される。
更に、スレッドアウェア初期化ビットがセットされた場合、アプリケーションに対する作動中のモニタ機能の粒度も生じる。
観測可能なデバッグまたはトレースに関し、このことはETMによって行われ、完全にデバッグから独立している。トレースがイネーブルされるとETMが通常のように作動し、ディスエーブルされると、ETMは安全な世界内にトレースを隠すか、または粒度に依存する安全な世界部分が選択される。イネーブルされていないときの安全ドメイン内のETM捕捉およびトレース診断データを回避する1つの方法は、SビットがハイレベルのときにETMをストールすることである。このことは、SビットとETMPWRDOWN信号とを組み合わせることによって行うことができるので、コアが安全な世界に入るときの最終の値にETMの値が保持される。従って、ETMはSMI命令をトレースしなければならず、コアが非安全な世界に戻るまでストールしなければならない。従って、ETMは非安全活動を見るにすぎない。
異なるモニタ機能の一部およびそれらの粒度の概要について下記に示す。
ボード段階における割り込み的デバッグ
ボード段階においてJSDAENピンが結ばれていないときに、ブートセッションをスタートする前のどこでも、デバッグをイネーブルする能力がある。同様に、安全スーパーバイザーモードにある場合、同様な権利を有する。
フォールトデバッグモードでデバッグを初期化する場合、すべてのレジスタ(非安全レジスタバンクおよび安全レジスタバンク)にアクセスでき、デバッグを制御するための専用のビットを除き、メモリ全体をダンプできる。どのモードからもどのドメインからもデバッグフォールトモードに入ることができる。安全メモリまたは非安全メモリにブレークポイントおよびウォッチポイントをセットできる。デバッグステートでは、MCR命令を介し、Sビットを変えるだけで安全な世界に入ることができる。
安全例外が生じたときにデバッグモードに入ることができるので、
SMIベクトルトラッピングイネーブル
安全データアボートベクトルトラッピングイネーブル
安全プリフェッチアボートベクトルトラッピングイネーブル
安全未定義ベクトルトラッピングイネーブル
である新しいビットによりベクトルトラップレジスタが拡張される。
モニタデバッグモードでは非安全な世界でSMIがコールされたときでもデバッグをどこでも認める場合、ステップごとのデバッグで安全な世界に入ることができる。安全ドメインでブレークポイントが生じると、安全アボートハンドラーは安全レジスタバンクおよび安全メモリをダンプするように作動できる。
安全な世界および非安全な世界における2つのアボートハンドラーは(PCを制御する関連するデバッグでの)デバッガーウィンドーが、安全な世界および非安全な世界の双方におけるレジスタのステートを示すことができるように、それらの情報をデバッガーアプリケーションへ与える。
図71Aは、コアがモニタデバッグモードに構成され、デバッグが安全な世界内でイネーブルされたときに何が生じるかを示している。図71Bはコアがモニタデバッグモードで構成され、デバッグが安全な世界でディスエーブルされたときに何が生じるかを示している。次に後者のプロセスについて説明する。
製造段階における割り込み的デバッグ
JSDAENが結ばれ、デバッグが非安全な世界に制限される製造ステージでは、安全スーパーバイザーが判断をしない場合、図71Bに示されたテーブルは、何が生じるかを示す。この場合、SMIは常に原子命令と見なすべきであるので、デバッグステートに入る前に常に安全機能が終了する。
デバッグ停止モードに入るには次の制限を受ける。
非安全な世界に限り、外部デバッグリクエストまたは内部デバッグリクエストが考慮される。安全な世界にある間、EDBGRQ(外部デバッグリクエスト)がアサートされるた場合、一旦安全機能が終了すれば、コアはデバッグ停止モードに入り、非安全な世界でコアが戻される。
安全メモリにブレークポイントまたはウォッチポイントをプログラムすることは全く効果がなく、プログラムされたアドレスが一致すると、コアが停止される。
ベクトルトラップレジスタ(この詳細を下記に示す)は非安全例外だけに関係する。前に説明したすべての拡張されたトラッピングイネーブルビットは効果がない。
一旦デバッグ停止モードに入ると次の制限が適用される。
安全デバッグをイネーブルしなければ、安全な世界への進入を強制するのにSビットを変更できない。
安全スーパーバイザーモードだけでしかデバッグが許可されていない場合、モードビットを変えることはできない。
安全デバッグを制御する専用ビットを変えることはできない。
(システムスピードアクセスにより)SMIをロードし、実行する場合、安全機能が完全に実行された場合にしかコアはデバッグステートに再進入しない。
モニタデバッグモードでは安全な世界でモニタを行うことができないので、安全アボートハンドラーはデバッグモニタプログラムをサポートする必要はない。非安全な世界ではステップバイステップが可能であるが、SMIが実行されるときは常に安全機能が完全に実行される。換言すれば、XWSIの「ステップオーバー」しか認められないが、他のすべての命令では「ステップイン」および「ステップオーバー」が可能である。こうしてXWSIは原子命令と見なされる。
安全デバッグが一旦ディスエーブルされた場合、次の制限がある。
モニタモードに入る前:
非安全な世界ではブレークポイントおよびウォッチポイントしか考慮しない。ビットSがセットされた場合、ブレークポイントおよびウォッチポイントがバイパスされる。安全メモリではブレークポイント/ウォッチポイントは効果を有しないので、セキュリティの問題ではないMCR/MRC(CP14)によってもウォッチポイントユニットにアクセス可能であることに留意されたい。
BKPTは通常、ブレークポイントをセットした命令を変えるのに使用される。これには非安全モードでしか可能にならないBKPT命令によりメモリ内でこの命令をオーバーライトすると仮定する。
ベクトルトラップレジスタは非安全例外にしか関係しない。前に説明したすべての拡張トラッピングイネーブルビットは効果を有しない。データアボートおよびプリフェッチアボートイネーブルビットはプロセッサが強制的に回復不能なステートになるのを防止するためにディスエーブルしなければならない。
JTAGを介し、停止モードに対するのと同じ制限を有する(Sビットは変更できない、など)。
一旦モニタモード(非安全アボートモード)となる。
非安全アボートハンドラーは非安全な世界をダンプでき、安全バンクレジスタだけでなく安全メモリにも視覚性を有しない。
原子SMI命令により安全機能を実行。
安全な世界に入ることを強制するためにSビットを変えることはできない。
安全スーパーバイザーモードでしかデバッグが許可されない場合、モードビットを変えることはできない。
外部デバッグリクエスト(EDBGRQ)が生じた場合、次のことに留意されたい。
非安全な世界ではコアはそのときの命令を終了し、即座に(フォールトモードで)デバッグステートに入る。
安全な世界ではコアはそのときの機能を終了し、非安全な世界に戻ったときにデバッグステートとなる。
新しいデバッグ条件はコアハードウェアを若干変更することを意味する。Sビットは注意深く制御しなければならず、セキュリティの理由からスキャンチェーンに安全ビットを挿入してはならない。
要約すれば、デバッグでは安全スーパーバイザーモードにおいてデバッグをイネーブルするときしかモードビットを変更できない。システムを変更する(TBLエントリーなどを変更する)ことにより、すべての安全な世界にアクセスするために安全ドメイン内のデバッグにだれもがアクセスしないようにする。このように、各スレッドは自己のコードしかデバッグできない。安全カーネルは安全状態に維持しなければならない。従って、コアが非安全な世界で作動中にデバッグに入るときには、以前と同じようにモードビットしか変更できない。
この技術の実施例は新しいベクトルトラップレジスタを使用するものである。このレジスタ内のビットの1つはハイレベルにセットされ、対応するベクトルがトリガーされた場合、プロセッサはあたかもブレークポイントが対応する例外ベクトルからフェッチされた命令でセットされたかのように、デバッグステートに入る。デバッグ制御レジスタにおける「安全世界イネーブル内デバッグ」ビットの値に従い、これらビットのふるまいは異なっていてもよい。
新しいベクトルトラップレジスタは次のビット、すなわちD_s_アボート、P_s_アボート、S_undef、SMI、FIQ、IRQ、Unaligned、D_アボート、P_アボート、SWIおよびUndefを含む。
・D_s_アボートビット: 安全な世界でデバッグがイネーブルされるとき、およびデバッグがデバッグフォールトモードに構成されたときにしか、このビットをセットしてはならない。モニタデバッグモードではこのビットは決してセットしてはならない。安全な世界内のデバッグがディスエーブルされた場合、このビットはどんな値にも影響しない。
・P_sアボートビット: D_s_アボートビットと同じである。
・S_Undefビット: 安全な世界でデバッグがイネーブルされるときにしか、このビットをセットしてはならない。安全な世界におけるデバッグがディスエーブルされた場合、このビットは値がどんな値でも影響を与えない。
・SMIビット: 安全な世界でデバッグがイネーブルされたときにしか、これをセットしてはならない。安全な世界におけるデバッグがディスエーブルされた場合、このビットはどんな値であっても影響を与えない。
・FIQ、IRQ、D_アボート、P_アボート、SWI、Undefビット: これらビットは非安全例外に対応するので、安全な世界におけるデバッグがディスエーブルされた場合でも有効である。D_アボートおよびP_アボートはモニタモードでハイレベルにアサートしてはならない。
・リセットビット: リセットが生じたときに安全な世界に入る場合、安全な世界におけるデバッグがイネーブルされたときにしかこのビットは有効とならず、有効でない場合、影響を与えない。
以上で本明細書に本発明の特定の実施例について説明したが、本発明はこれら実施例だけに限定されるものでなく、本発明の範囲内で大きな変形および追加を行うことができることは明らかである。例えば本発明の範囲から逸脱することなく、従属請求項の特徴事項と独立請求項の特徴事項とを種々に組み合わせることができる。