(57)【要約】  例外を処理するためのデータ処理装置および方法が提供され、データ処理装置は、プログラムコードに応じてデータ処理動作を行うように構成される処理回路であって、例外処理を制御するための例外制御回路を備える処理回路を有する。データを記憶するために複数のレジスタが提供され、該レジスタは、第１サブセットのレジスタおよび第２サブセットのレジスタを含み、データを記憶するためにデータ保存も提供され、該データ保存は、セキュア領域および低セキュア領域を含む複数の領域を備え、セキュア領域は、セキュアドメインで動作するときには処理回路によってアクセスすることができ、低セキュアドメインで動作するときには処理回路によってアクセスすることができないデータを記憶するためのものである。処理回路によって行われるバックグラウンド処理による初期例外に応じて、例外制御回路は、例外に対応する例外処理ルーチンを行うために処理回路を起動させる前に、第１サブセットのレジスタからのデータの状態保存を行い、例外処理ルーチンは、第２サブセットのレジスタからのデータの状態保存を行う責任を持つ。セキュアドメインで処理回路によってバックグラウンド処理が行われた場合に、セキュアドメインから低セキュアドメインへの移行を行わせる第１の例外に応じて、例外制御回路は、低セキュアドメインで例外処理ルーチンを行うために処理回路を起動させる前に、第２サブセットのレジスタからのデータの追加的な状態保存を行う。本発明のハードウェア機構は、例外ハンドラを通してプロキシすることを必要とすることなく、セキュア例外の有効な処理を可能にする。
2015506525.tif 000002
【特許請求の範囲】
【請求項１】
データ処理装置であって、
プログラムコードに応じてデータ処理動作を行うように構成される処理回路であって、例外処理を制御するための例外制御回路を備える処理回路と、
データを記憶するように構成される複数のレジスタであって、第１サブセットのレジスタおよび第２サブセットのレジスタを含むレジスタと、
データを記憶するように構成されるデータ保存であって、セキュア領域およびより低セキュア領域を備える複数の領域を備え、前記セキュア領域は、セキュアドメインで動作するときには前記処理回路によってアクセスすることができ、より低セキュアドメインで動作するときには前記処理回路によってアクセスすることができないデータを記憶するためのものであるデータ保存と、を備え、
前記処理回路によって行われるバックグラウンド処理による初期例外に応じて、前記例外制御回路は、前記例外に対応する例外処理ルーチンを行うために前記処理回路を起動させる前に、前記第１サブセットのレジスタからのデータの状態保存を行うように構成され、前記例外処理ルーチンは、前記第２サブセットのレジスタからのデータの状態保存を行う責任を持ち、また、
前記セキュアドメインで前記処理回路によって前記バックグラウンド処理が行われた場合に、前記セキュアドメインから前記より低セキュアドメインへの移行を行わせる第１の例外に応じて、前記例外制御回路は、前記より低セキュアドメインで前記例外処理ルーチンを行うために前記処理回路を起動させる前に、前記第２サブセットのレジスタからの前記データの追加的な状態保存を行うように構成される、データ処理装置。
【請求項２】
前記第１の例外に応じて、前記例外制御回路は、前記例外処理ルーチンを行うために前記処理回路を起動させる前に、前記第２サブセットのレジスタをクリアするように構成される、請求項１に記載のデータ処理装置。
【請求項３】
前記第１の例外に応じて、前記データ処理装置は、前記例外制御回路が前記例外処理ルーチンを行うために前記処理回路を起動させる前に、前記第１サブセットのレジスタがセキュアデータを含まないことを確実にするように構成される、請求項２に記載のデータ処理装置。
【請求項４】
前記例外制御回路が、前記例外処理ルーチンを行うために前記処理回路を起動させる前に、前記追加的な状態保存を行った場合、前記例外処理ルーチンは、前記第２サブセットのレジスタの前記状態保存を行わない、先行する請求項のいずれか１つに記載のデータ処理装置。
【請求項５】
前記例外制御回路が、前記例外処理ルーチンを行うために前記処理回路を起動させる前に、前記追加的な状態保存を行った場合、前記例外処理ルーチンは、前記第２サブセットのレジスタの状態保存も行う、請求項１〜３のいずれか１つに記載のデータ処理装置。
【請求項６】
前記第１の例外は、前記バックグラウンド処理中に発生する前記初期例外を含む、先行する請求項のいずれか１つに記載のデータ処理装置。
【請求項７】
前記第１の例外は、前記初期例外が処理された後、かつ前記初期例外の前に行われている前記バックグラウンド処理に戻る前に処理されるテールチェイン例外を含む、請求項１〜５のいずれか１つに記載のデータ処理装置。
【請求項８】
前記初期例外が処理されたとき、かつ前記処理回路が前記初期例外の前に行われている前記バックグラウンド処理に戻る前に保留中であるさらなる例外に応じて、前記例外制御回路は、前記処理回路を前記バックグラウンド処理に戻す前に、テールチェイン例外として前記さらなる例外の処理を制御するように構成される、先行する請求項のいずれか１つに記載のデータ処理装置。
【請求項９】
前記例外制御回路は、その対応する例外処理ルーチンがまだ行われている現在の例外よりも低い優先度の新しい例外に応じて、前記処理回路を前記バックグラウンド処理に戻す前に、テールチェイン例外として前記新しい例外の処理を制御するように構成され、
前記例外制御回路は、前記現在の例外が前記セキュアドメインで実行される場合を除いて、前記新しい例外の処理を制御するときに、いかなるさらなる状態保存動作も行わないように構成され、前記新しい例外が、前記低セキュアドメインへの切り替えを示し、前記バックグラウンド処理が、前記セキュアドメインで行われ、そのすぐ後に、前記例外制御回路は、前記現在の例外のための前記例外処理ルーチンの完了に従って、前記第２サブセットのレジスタからの前記データの前記追加的な状態保存を行い、また、前記新しい例外に対応する前記例外処理ルーチンを行うために前記処理回路を起動させる前に、前記第２サブセットのレジスタがクリアされることを確実にするように構成される、先行する請求項のいずれか１つに記載のデータ処理装置。
【請求項１０】
前記例外制御回路は、その対応する例外処理ルーチンがまだ行われている現在の例外よりも低い優先度の新しい例外に応じて、前記処理回路を前記バックグラウンド処理に戻す前に、テールチェイン例外として前記新しい例外の処理を制御するように構成され、
前記例外制御回路は、前記現在の例外が前記低セキュアドメインで実行される場合を除いて、前記新しい例外の処理を制御するときに、いかなる状態復元動作も行わないように構成され、前記新しい例外が、前記セキュアドメインへの切り替えを示し、前記バックグラウンド処理が、前記セキュアドメインで行われ、そのすぐ後に、前記例外制御回路は、前記現在の例外のための前記例外処理ルーチンの完了に従って、前記新しい例外に対応する前記例外処理ルーチンを行うために前記処理回路を起動させる前に、前記第２サブセットのレジスタの中への前記データの状態復元動作を行うように構成される、先行する請求項のいずれか１つに記載のデータ処理装置。
【請求項１１】
前記第２サブセットのレジスタの前記追加的な状態保存を行っている間に、前記第１の例外よりも高い優先度を有する先取り例外が発生し、かつ、前記先取り例外が、前記セキュアドメインから前記低セキュアドメインへの移行を必要としない場合、前記例外制御回路は、前記先取り例外の前記例外処理ルーチンを処理するために前記処理回路を起動させる前に、前記追加的な状態保存を逆転させるように構成される、先行する請求項のいずれか１つに記載のデータ処理装置。
【請求項１２】
現在の例外が、前記セキュアドメインから前記低セキュアドメインへの移行を行わせない場合、および前記現在の例外と関連付けられる前記例外処理ルーチンの処理を開始する前に、前記現在の例外よりも高い優先度を有し、かつ前記セキュアドメインから前記低セキュアドメインへの移行を必要とする先取り例外が発生した場合、前記例外制御回路は、前記先取り例外の前記例外処理ルーチンを処理するために前記処理回路を起動させる前に、前記第２サブセットのレジスタからの前記データの前記追加的な状態保存を追加的に行うように構成される、先行する請求項のいずれか１つに記載のデータ処理装置。
【請求項１３】
前記例外処理回路が現在の例外に対応する前記例外処理ルーチンを行うために前記処理回路を起動させた後で、その例外処理ルーチンが完了する前に、先取り例外が発生した場合、前記先取り例外の前記例外処理ルーチンを行うために前記処理回路を起動させる前に、前記第１サブセットのレジスタの、または前記第１サブセットのレジスタおよび前記第２サブセットのレジスタの前記状態保存が必要とされるかどうかを決定するときに、前記例外制御回路は、前記バックグラウンド処理として前記現在の例外を扱うように構成される、先行する請求項のいずれか１つに記載のデータ処理装置。
【請求項１４】
前記データ保存は、前記セキュア領域にセキュアスタックを含み、前記より低セキュア領域により低セキュアスタックを含む複数のスタックを備える、先行する請求項のいずれか１つに記載のデータ処理装置。
【請求項１５】
前記第１サブセットのレジスタからのデータの前記状態保存、および前記第２サブセットのレジスタからのデータの前記追加的な状態保存において、前記例外制御回路は、前記バックグラウンド処理を行うときに前記処理回路が動作していた前記ドメインの前記セキュリティに対応する前記セキュアスタックおよび前記より低セキュアスタックのうちの１つに、前記データを保存するように構成される、請求項１４に記載のデータ処理装置。
【請求項１６】
前記複数のレジスタのうちのどれが、現在実行しているセキュアデータを記憶するためのコードによる使用に利用可能であるのかを示すセキュア構成値を記憶するためのセキュア構成の記憶場所をさらに備え、前記セキュアドメインから前記低セキュアドメインへの移行を行わせる例外に応じて、前記例外制御回路は、前記第２サブセットのレジスタ内に、前記セキュア構成値によって示される前記レジスタの１つ以上を含むように構成される、先行する請求項のいずれか１つに記載のデータ処理装置。
【請求項１７】
例外戻り値を記憶するための記憶場所をさらに備え、前記処理回路は、前記バックグラウンド処理からの初期例外の取得時に、前記データ処理装置が動作している前記ドメインを示すために、前記例外戻り値内のドメイン値を設定するように構成され、前記例外制御回路は、前記ドメイン値に依存して、前記レジスタのうちのどれが状態保存または状態復元動作を受けるべきかを決定する、先行する請求項のいずれか１つに記載のデータ処理装置。
【請求項１８】
データ処理装置であって、
プログラムコードに応じてデータ処理動作を行うためのデータ処理回路と、
複数のレジスタと、
データを記憶するためのデータ保存であって、各領域がセキュアレベルを有する複数の領域を備え、また、前記セキュアドメインで動作する前記データ処理回路によってアクセスすることができ、かつ、低セキュアドメインで動作する前記データ処理回路によってアクセスすることができない機密データを記憶するための少なくとも１つのセキュア領域、およびより低セキュアデータを記憶するためのより低セキュア領域を備えるデータ保存と、を備え、
前記データ保存は、少なくとも２つのスタック、すなわち、前記セキュア領域の中のセキュアスタックおよび前記より低セキュア領域の中のより低セキュアスタックを備え、
前記データ処理回路は、例外処理回路を備え、前記例外処理回路は、前記データ処理回路が前記セキュアドメインで実行しており、前記例外が、１組の前記レジスタをクリアするために低セキュア領域でプログラムコードを実行するように切り替えることを示すときに、例外の受け取りに応じるように構成され、前記１組の前記レジスタ内の前記レジスタは、前記実行のドメインおよび前記例外が取得される前記ドメインのセキュアレベルに依存する、データ処理装置。
【請求項１９】
前記データ処理回路はさらに、前記１組の前記レジスタに記憶された状態を、前記１組の前記レジスタをクリアする前に前記データ処理回路が実行している前記ドメインの前記スタックに保存するように構成される、請求項１８に記載のデータ処理装置。
【請求項２０】
前記データ処理装置は、前記複数のレジスタのうちのどれを、現在実行しているセキュア状態を記憶するためのコードによる使用に利用可能であるのかを示す値を記憶するためのセキュア構成の記憶場所を備え、前記データ処理回路は、前記セキュア構成値、ならびに前記実行のドメインおよび前記例外が取得される前記ドメインのセキュアレベルによって示される前記複数のレジスタに依存して、どのレジスタが前記１組のレジスタ内にあるのかを決定するように構成される、請求項１８に記載のデータ処理装置。
【請求項２１】
データ処理装置上でデータを処理する方法であって、前記データ処理装置は、プログラムコードに応じてデータ処理動作を行うための処理回路であって、例外処理を制御するための例外制御回路を備える前記処理回路と、データを記憶するための複数のレジスタであって、第１サブセットのレジスタおよび第２サブセットのレジスタを含む複数のレジスタと、データを記憶するためのデータ保存であって、セキュア領域および低セキュア領域を含む複数の領域を備え、前記セキュア領域は、セキュアドメインで動作するときには前記処理回路によってアクセスすることができ、より低セキュアドメインで動作するときには前記処理回路によってアクセスすることができないデータを記憶するためのものであるデータ保存と、を備え、前記方法は、
前記処理回路によって行われるバックグラウンド処理による初期例外に応じて、前記例外に対応する例外処理ルーチンを行うために前記処理回路を起動させる前に、前記第１サブセットのレジスタからのデータの状態保存を行うために、前記例外制御回路を利用することであって、前記例外処理ルーチンは、前記第２サブセットのレジスタからのデータの状態保存を行う責任を持つように利用することと、
前記セキュアドメインで前記処理回路によって前記バックグラウンド処理が行われた場合に、前記セキュアドメインから前記より低セキュアドメインへの移行を行わせる第１の例外に応じて、前記より低セキュアドメインで前記例外処理ルーチンを行うために前記処理回路を起動させる前に、前記第２サブセットのレジスタからの前記データの追加的な状態保存を行うために、前記例外制御回路を利用することと、
を含む、方法。
【請求項２２】
データ処理装置であって、
プログラムコードに応じてデータ処理動作を行うための処理手段であって、例外処理を制御するための例外制御手段を備える処理手段と、
データを記憶するための複数のレジスタ手段であって、第１サブセットのレジスタ手段および第２サブセットのレジスタ手段を含む複数のレジスタ手段と、
データを記憶するためのデータ保存手段であって、セキュア領域および低セキュア領域を含む複数の領域を備え、前記セキュア領域は、セキュアドメインで動作するときには前記処理手段によってアクセスすることができ、低セキュアドメインで動作するときには前記処理手段によってアクセスすることができないデータを記憶するためのものであるデータ保存手段と、を備え、
前記処理手段によって行われるバックグラウンド処理による初期例外に応じて、前記例外制御手段は、前記例外に対応する例外処理ルーチンを行うために前記処理手段を起動させる前に、前記第１サブセットのレジスタ手段からのデータの状態保存を行い、前記例外処理ルーチンは、前記第２サブセットのレジスタ手段からのデータの状態保存を行う責任を持ち、また、
前記セキュアドメインで前記処理手段によって前記バックグラウンド処理が行われた場合に、前記セキュアドメインから前記低セキュアドメインへの移行を行わせる第１の例外に応じて、前記例外制御手段は、前記低セキュアドメインで前記例外処理ルーチンを行うために前記処理手段を起動させる前に、前記第２サブセットのレジスタ手段からの前記データの追加的な状態保存を行う、データ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術分野は、データ処理の分野に関し、具体的には、機密データおよびコードの処理に関する。
【背景技術】
【０００２】
多くのデータ処理システムおよびアーキテクチャは、無許可の個人または過程による機密データおよびコードセクションをアクセスから隔離し、保護する方法を提供する。セキュリティを提供できることが重要であるが、この保護と関連付けられる性能および回路領域のオーバーヘッドがある。
【０００３】
マイクロコントローラ等の小型システムでは、これらのオーバーヘッドを低く保つことが非常に重要であり、したがって、セキュリティのレベルと性能との間のある妥協点を定めることが必要になり得る。
【０００４】
データおよびコードをセキュアに保つ１つの方法は、Trustzoneアーキテクチャを有する、英国CambridgeのＡＲＭ（登録商標）によって提供され、該アーキテクチャでは、セキュア状態および非セキュア状態（セキュアドメインおよび非セキュアドメインとも称される）があり、それらの状態間の移行のために例外命令が使用され、例外ハンドラがセキュア側のセキュリティを保護する。この手法は、高度なセキュリティを提供するが、セキュリティ状態を変更するために、ソフトウェア例外ハンドラの形態でのかなりのソフトウェアの介入が必要とされ、該ソフトウェアの介入は、システムの性能を低減させるとともに、全ての呼び出しが例外ハンドラを通してプロキシされなければならないので、セキュアソフトウェアのための外部アプリケーションプログラムインターフェースＡＰＩを開発するために必要とされる労力の量を増加させる。同様に、セキュアドメインにある間に発生し、非セキュアドメインでの処理を必要とする例外もまた、セキュア例外ハンドラを通してプロキシされる必要があり、これは、制御が非セキュア例外ハンドラに渡る前に、セキュア状態が保護されることを可能にする。
【０００５】
米国特許第７９６６４６６号および米国特許公開第２００８／０２５０２１６号は、代替のセキュアシステムを開示しているが、これは、データ保存がセキュア側および非セキュア側を有し、現在実行されているコードのこのデータ保存内の場所は、プロセッサが動作しているドメイン、したがって、アクセスが許可されたデータを決定する。
【発明の概要】
【課題を解決するための手段】
【０００６】
第１の態様から概観すると、本発明は、データ処理装置を提供し、該データ処理装置は、プログラムコードに応じてデータ処理動作を行うように構成される処理回路であって、例外処理を制御するための例外制御回路を備える処理回路と、データを記憶するように構成される複数のレジスタであって、第１サブセットのレジスタおよび第２サブセットのレジスタを含むレジスタと、データを記憶するように構成されるデータ保存であって、セキュア領域および低セキュア領域を備える複数の領域を備え、セキュア領域は、セキュアドメインで動作するときには処理回路によってアクセスすることができ、低セキュアドメインで動作するときには処理回路によってアクセスすることができないデータを記憶するためのものであるデータ保存と、を備え、処理回路によって行われるバックグラウンド処理による初期例外に応じて、例外制御回路は、例外に対応する例外処理ルーチンを行うために処理回路を起動させる前に、第１サブセットのレジスタからのデータの状態保存を行うように構成され、例外処理ルーチンは、第２サブセットのレジスタからのデータの状態保存を行う責任を持ち、また、セキュアドメインで処理回路によってバックグラウンド処理が行われた場合に、セキュアドメインから低セキュアドメインへの移行を行わせる第１の例外に応じて、例外制御回路は、低セキュアドメインで例外処理ルーチンを行うために処理回路を起動させる前に、第２サブセットのレジスタからのデータの追加的な状態保存を行うように構成される。
【０００７】
バックグラウンド処理中に例外が発生したときに、バックグラウンド処理は、データ値をレジスタに配置し得、よって、例外が終了したときにこれらのデータ値が保持され、復元されることを可能にするために、システムは、レジスタからデータ保存への（一般的に、データ保存に提供されるスタックへの）データの状態保存を行い得る。先に論じたように、いくつかのシステムについては、達成されるセキュリティのレベルと処理性能との間の妥協点を達成することが重要である。このことは、例外に応じて状態保存を行うときにも当てはまる。
【０００８】
性能的理由から、第１のサブセットおよび第２のサブセットのレジスタでデータの状態保存を行うことが有用であり得る。本発明によれば、第１のサブセットからのデータの状態保存は、例外処理ルーチンを起動させる前に、ハードウェアの例外制御回路によって行うことができる。対照的に、例外処理ルーチン（すなわち、ソフトウェア）は、第２サブセットのレジスタからのデータの状態保存を行う責任を持ち得る。
【０００９】
しかしながら、セキュリティの観点から、例外処理ルーチンの制御下で第２サブセットのレジスタの状態保存は、あるときには問題を含むことがあり得る。例外がセキュアドメインから低セキュアドメインへの移行を行わせた後に、セキュアドメインで行われるバックグラウンド処理が続く場合、例外処理ルーチンが、第２サブセットのレジスタに配置されるセキュアデータをセキュアドメインにある間に修正し得る。
【００１０】
このセキュリティ違反を防止するために、本発明によれば、セキュアドメインでバックグラウンド処理が行われた場合にセキュアドメインから低セキュア（本明細書では、非セキュアとも称される）ドメインへの移行を行わせる、第１の例外が発生した場合、例外制御回路は、低セキュアドメインで例外処理ルーチンを起動させる前に、第１サブセットのレジスタに加えて、第２サブセットのレジスタからのデータの追加的な状態保存を行う。例外処理ルーチンを起動させる前に、第２サブセットのレジスタの状態を保存するためのハードウェア機構を提供することによって、低セキュアドメインでのソフトウェアによるこのデータの修正を防止することができる。
【００１１】
したがって、本手法は、例外に応じて状態保存を行うときに、セキュリティと性能の間の改善されたバランスを達成することができる。本発明のハードウェア機構は、セキュア例外ハンドラを通してプロキシすることを必要とすることなく、低セキュア例外の有効な処理を可能にする。
【００１２】
第１の例外に応じて、例外制御回路は、一実施形態において、例外処理ルーチンを行うために処理回路を起動させる前に、第２のサブセットレジスタをクリアするように構成される。これは、セキュアドメインにある間には、より低セキュアドメインの例外処理ルーチンが、第２サブセットのレジスタに配置されるいかなるデータにもアクセスすることができないことを意味する。
【００１３】
さらに、一実施形態において、該第１の例外に応じて、データ処理装置は、例外制御回路が例外処理ルーチンを行うために処理回路を起動させる前に、第１サブセットのレジスタがセキュアデータを含まないことを確実にするように構成される。これを達成することができるいくつかの方法がある。例えば、ハードウェアまたはソフトウェアのいずれかは、第１サブセットのレジスタがいかなるセキュアデータも含まないように、第１サブセットのレジスタがクリアされることを確実にし得る。あるいは、第１サブセットのレジスタは、例外処理ルーチンを行うために処理回路が起動される前に、単に非セキュアデータを含むように操作することができる場合があり得、その場合、第１サブセットのレジスタをクリアすることを必要としない場合がある。
【００１４】
本出願において、「呼び出し元レジスタ」および「呼び出し先レジスタ」という用語は、それぞれ、第１サブセットのレジスタおよび第２サブセットのレジスタを示すために使用され得る。
【００１５】
例外処理ルーチンは、第２サブセットのレジスタ（呼び出し先レジスタ）からのデータの状態保存を行う責任を持つが、例外処理ルーチンが第２のサブセットからのデータの状態保存を実際に行うことが必ずしも不可欠であるというわけではない。例えば、例外制御回路が第２サブセットのレジスタの追加的な状態保存を既に行っていた場合、例外処理ルーチンは、これらのレジスタの状態保存を省略することができる。
【００１６】
あるいは、ハードウェアによって追加的な状態保存が既に実行された場合であっても、例外処理ルーチンが呼び出し先レジスタからのデータの状態保存を常時行うことがより容易であり得る。レジスタは、ハードウェアによって既にクリアされている場合があるので、例外処理ルーチンは、何らかの方法で以前に呼び出し先レジスタに保持されたいかなるセキュアデータ値へのアクセスも有さず、また、クリアしたデータ値をデータ保存の低セキュア領域に保存すること、およびその後で（例外が完了したときに）クリアしたデータ値を復元することと関連付けられるオーバーヘッドは、例外処理ルーチンが、ハードウェアが追加的な状態保存を既に行ったかどうかを検出することを可能にするための機構を提供することと関連付けられるオーバーヘッド未満であり得る。
【００１７】
第１サブセットのレジスタ（呼び出し元レジスタ）および第２のサブセットレジスタ（呼び出し先レジスタ）に関して、一実施形態では、例外ハンドラの前後に保存される必要があるレジスタの全てが第２のサブセットにあるように、第１サブセットのレジスタが、０個のレジスタを備えることが可能である。この場合、大部分の例外について、例外制御回路によっていかなる状態保存も行われず、例外処理ルーチンは、全てのレジスタを第２のサブセットに保存する責任を持つ。しかしながら、セキュアドメインから低セキュアドメインへの移行を行わせる第１の例外に応じて、追加的な状態保存は、低セキュアドメインの例外処理ルーチンによるこのデータへのアクセスを防止するために、例外制御回路を使用して、第２のサブセット（保存される必要がある全てのレジスタ）をハードウェアに保存し得る。
【００１８】
現在の例外が完了した時点で、さらなる例外を保留することが可能である。この場合、処理回路は、現在の例外の前に行われていたバックグラウンド処理に戻る前に、さらなる例外をサービスし得る。この状況は、「テールチェイニング」と称され、さらなる例外は、「テールチェイン」例外と称される。
【００１９】
追加的な状態保存を起動させる第１の例外は、処理回路がバックグラウンド処理を行っている間に発生する、初期例外であり得る。あるいは、第１の例外は、それ自体が、初期例外の後であるがバックグラウンド処理に戻る前に処理される、テールチェイン例外であり得る。
【００２０】
本出願において、「バックグラウンド処理」という用語は、より高い優先度の例外によって割り込まれた処理を示すために使用される。例外処理ルーチン自体がより高い優先度の例外（本明細書では、先取り例外と称される）によって割り込まれた場合、割り込まれた例外処理ルーチン自体が先取り例外のための「バックグラウンド処理」になり得、先取り例外は、次いで、割り込まれる前に例外処理ルーチンによって使用されているデータの状態保存を起動させ得る。
【００２１】
テールチェイニングが使用される一実施形態では、テールチェイン例外と関連して必要とされる状態保存の量を削減することが可能である。具体的には、一実施形態において、例外制御回路は、その対応する例外処理ルーチンがまだ行われている現在の例外よりも低い優先度の新しい例外に応じて、処理回路をバックグラウンド処理に戻す前に、テールチェイン例外として新しい例外の処理を制御するように構成される。さらに、例外制御回路は、該現在の例外が該セキュアドメインで実行される場合を除いて、新しい例外の処理を制御するときに、いかなるさらなる状態保存動作も行わないように構成され、該新しい例外が、該低セキュアドメインへの切り替えを示し、該バックグラウンド処理が、該セキュアドメインで行われる、そのすぐ後に、該例外制御回路は、該現在の例外のための例外処理ルーチンの完了に従って、該第２サブセットのレジスタからのデータの該追加的な状態保存を行い、また、新しい例外に対応する例外処理ルーチンを行うために処理回路を起動させる前に、該第２サブセットのレジスタがクリアされることを確実にするように構成される。先に述べたように、第１サブセットのレジスタをクリアすることは、実現例に依存して、必要である場合もあれば、必要でない場合もある。そのようなアプローチは、非セキュアのテールチェイン例外が、セキュアバックグラウンド処理における割り込みをそれ自体が行わせたセキュア例外に続くときに、データのセキュリティを維持することを可能にする。
【００２２】
さらに、テールチェイン例外を処理するときに、効率性を状態復元動作と関連させることもできる。例えば、一実施形態において、例外制御回路は、該現在の例外が該低セキュアドメインで実行される場合を除いて、新しい例外の処理を制御するときに、いかなる状態復元動作も行わないように構成され、該新しい例外が、該セキュアドメインへの切り替えを示し、該バックグラウンド処理が、該セキュアドメインで行われ、そのすぐ後に、該例外制御回路は、該現在の例外のための例外処理ルーチンの完了に従って、新しい例外に対応する例外処理ルーチンを行うために処理回路を起動させる前に、該第２サブセットのレジスタの中へのデータの状態復元動作を行うように構成される。
【００２３】
先に述べたように、現在の例外が処理されている間に発生するより高い優先度の例外は、先取り例外として処理される。現在の例外の処理においてそのような先取り例外が初期に発生した場合、具体的には、例外制御回路が、現在の例外に対して例外処理ルーチンを行うために処理回路を起動させる前に、先に述べた状態保存または追加的な状態保存動作をまだ処理している間、一実施形態では、例外制御回路の状態保存および追加的な状態保存動作が修正される可能性がある。具体的には、一実施形態において、第２サブセットのレジスタの追加的な状態保存を行っている間に、該第１の例外より高い優先度を有する先取り例外が発生し、かつ、先取り例外が、セキュアドメインから低セキュアドメインへの移行を必要としない場合、例外制御回路は、先取り例外の例外処理ルーチンを処理するために処理回路を起動させる前に、追加的な状態保存を逆転させるように構成される。
【００２４】
代替として、または加えて、現在の例外が、セキュアドメインから低セキュアドメインへの移行を行わせない場合、および現在の例外と関連付けられる例外処理ルーチンの処理が始まる前に、現在の例外よりも高い優先度を有し、かつセキュアドメインから低セキュアドメインへの移行を必要とする先取り例外が発生した場合、例外制御回路は、先取り例外の例外処理ルーチンを処理するために処理回路を起動させる前に、第２サブセットのレジスタからのデータの追加的な状態保存を追加的に行うように構成され得る。
【００２５】
例外制御回路が現在の例外に関して任意の必要とされる状態保存または追加的な状態保存を行った後、およびその現在の例外に対する例外処理ルーチンを行うために処理回路が起動された後、その例外処理ルーチンが完了する前に、先取り例外が発生した場合、一実施形態において、先取り例外の例外処理ルーチンを行うために処理回路を起動させる前に、該第１サブセットのレジスタの、または該第１サブセットのレジスタおよび該第２サブセットのレジスタの該状態保存が必要とされるかどうかを決定するときに、例外制御回路は、該バックグラウンド処理として現在の例外を扱うように構成される。
【００２６】
一実施形態において、データ保存は、セキュア領域にセキュアスタックを含み、低セキュア領域に低セキュアスタックを含む、複数のスタックを備える。そのような実施形態において、第１サブセットのレジスタからのデータの状態保存、および第２サブセットのレジスタからのデータの追加的な状態保存を行うときに、例外制御回路は、該バックグラウンド処理を行うときに処理回路が動作していたドメインのセキュリティに対応するセキュアスタックおよびより低セキュアスタックのうちの１つに、データを保存するように構成される。
【００２７】
一実施形態において、データ処理装置はさらに、該複数のレジスタのうちのどれが、現在実行しているセキュアデータを記憶するためのコードによる使用に利用可能であるのかを示す、セキュア構成値を記憶するためのセキュア構成の記憶場所を備え、セキュアドメインから低セキュアドメインへの移行を行わせる例外に応じて、例外制御回路は、該第２サブセットのレジスタ内に、該セキュア構成値によって示されるレジスタの１つ以上を含むように構成される。したがって、このことは、少なくとも第２サブセットのレジスタを形成するレジスタに関するいくらかの構成のし易さを可能にし、したがって、例外制御回路によって行われる追加的な状態保存動作をどのレジスタが受けるかについていくらかの構成のし易さを可能にする。
【００２８】
一実施形態において、データ処理装置はさらに、例外戻り値を記憶するための記憶場所を備え、該処理回路は、該バックグラウンド処理から初期例外の取得時に、該データ処理装置が動作しているドメインを示すために、該例外戻り値内のドメイン値を設定するように構成され、該例外制御回路は、該ドメイン値に依存して、該レジスタのうちのどれが状態保存または状態復元動作を受けるべきかを決定する。これは、例外制御回路が、任意の特定の状況において状態保存が必要とされるか、および／または追加的な状態保存が必要とされるか、を決定することを可能にするための単純な機構を提供する。
【００２９】
第２の態様から概観すると、本発明は、データ処理装置を提供し、該データ処理装置は、プログラムコードに応じてデータ処理動作を行うためのデータ処理回路と、複数のレジスタと、データを記憶するためのデータ保存であって、各領域がセキュアレベルを有する複数の領域を備え、また、該セキュアドメインで動作する該データ処理回路によってアクセスすることができ、かつ、低セキュアドメインで動作する該データ処理回路によってアクセスすることができない機密データを記憶するための少なくとも１つのセキュア領域、および低セキュアデータを記憶するためのより低セキュア領域を備えるデータ保存と、を備え、該データ保存は、少なくとも２つのスタック、すなわち、該セキュア領域の中のセキュアスタックおよび該低セキュア領域の中の低セキュアスタックを備え、該データ処理回路は、例外処理回路を備え、該例外処理回路は、該データ処理回路が該セキュアドメインで実行しており、該例外が、１組の該レジスタをクリアするためにより低セキュアドメインでプログラムコードを実行するように切り替えることを示すときに、例外の受け取りに応じるように構成され、該１組の該レジスタ内の該レジスタは、該実行のドメインおよび該例外が取得される該ドメインのセキュアレベルに依存する。
【００３０】
そのような一実施形態において、データ処理回路はさらに、該１組の該レジスタに記憶された状態を、該１組の該レジスタをクリアする前に該データ処理回路が実行している該ドメインの該スタックに保存するように構成される。
【００３１】
さらに、一実施形態において、データ処理装置は、該複数のレジスタのうちのどれを、現在実行しているセキュア状態を記憶するためのコードによる使用に利用可能であるのかを示す値を記憶するための、セキュア構成の記憶場所を備え、該データ処理回路は、該セキュア構成値、ならびに該実行のドメインおよび該例外が取得される該ドメインのセキュアレベルによって示される該複数のレジスタに依存して、どのレジスタが該１組のレジスタ内にあるのかを決定するように構成される。
【００３２】
第３の態様から概観すると、本発明は、データ処理装置上でデータを処理する方法を提供し、該データ処理装置は、プログラムコードに応じてデータ処理動作を行うための処理回路であって、例外処理を制御するための例外制御回路を備える処理回路と、データを記憶するための複数のレジスタであって、第１サブセットのレジスタおよび第２サブセットのレジスタを含む複数のレジスタと、データを記憶するためのデータ保存であって、セキュア領域および低セキュア領域を含む複数の領域を備え、セキュア領域は、セキュアドメインで動作するときには処理回路によってアクセスすることができ、低セキュアドメインで動作するときには処理回路によってアクセスすることができないデータを記憶するためのものであるデータ保存と、を備え、該方法は、処理回路によって行われるバックグラウンド処理による初期例外に応じて、例外に対応する例外処理ルーチンを行うために処理回路を起動させる前に、第１サブセットのレジスタからのデータの状態保存を行うために、例外制御回路を利用することであって、例外処理ルーチンは、第２サブセットのレジスタからのデータの状態保存を行う責任を持つように利用することと、セキュアドメインで処理回路によってバックグラウンド処理が行われた場合に、セキュアドメインからより低セキュアドメインへの移行を行わせる第１の例外に応じて、低セキュアドメインで例外処理ルーチンを行うために処理回路を起動させる前に、第２サブセットのレジスタからのデータの追加的な状態保存を行うために、例外制御回路を利用することと、を含む。
【００３３】
第４の態様から概観すると、本発明は、データ処理装置を提供し、該データ処理装置は、プログラムコードに応じてデータ処理動作を行うための処理手段であって、例外処理を制御するための例外制御手段を備える処理手段と、データを記憶するための複数のレジスタ手段であって、第１サブセットのレジスタ手段および第２サブセットのレジスタ手段を含むレジスタ手段と、データを記憶するためのデータ保存手段であって、セキュア領域および低セキュア領域を含む複数の領域を備え、セキュア領域は、セキュアドメインで動作するときには処理手段によってアクセスすることができ、低セキュアドメインで動作するときには処理手段によってアクセスすることができないデータを記憶するためのものであるデータ保存手段と、を備え、処理手段によって行われるバックグラウンド処理による初期例外に応じて、例外制御手段は、例外に対応する例外処理ルーチンを行うために処理手段を起動させる前に、第１サブセットのレジスタ手段からのデータの状態保存を行い、例外処理ルーチンは、第２サブセットのレジスタ手段からのデータの状態保存を行う責任を持ち、また、セキュアドメインで処理手段によってバックグラウンド処理が行われた場合、セキュアドメインからより低セキュアドメインへの移行を行わせる第１の例外に応じて、例外制御手段は、低セキュアドメインで例外処理ルーチンを行うために処理手段を起動させる前に、第２サブセットのレジスタ手段からのデータの追加的な状態保存を行う。
【図面の簡単な説明】
【００３４】
以下、単なる例として、添付図面に示されているその実施形態を参照して、本発明をさらに説明する。
【図１】セキュア領域および非セキュア領域を有するデータ保存を有する、一実施形態によるデータ処理装置を示す図である。
【図２】データ処理装置の１組のレジスタが、一実施形態に従って、どのように呼び出し元レジスタおよび呼び出し先レジスタに分割され得るのかを概略的に図示する図である。
【図３Ａ】一実施形態に従って、例外制御回路によって行われるスタッキング動作およびスタッキング解除動作を概略的に図示する図である。
【図３Ｂ】一実施形態に従って、例外制御回路によって行われるスタッキング動作およびスタッキング解除動作を概略的に図示する図である。
【図４】コード実行中の種々の異なるシナリオに対する例外（この実施例では、割り込み）の取得を概略的に示す図である。
【図５】一実施形態に従う、初期例外を受け取り、次いでさらなる例外を受け取ったときに保存される状態を示す表である。
【図６】例示的な実施形態について、例外を取得するために必要とされるドメインの移行に依存して、例外の取得時にその状態がスタックに保存されるレジスタを示す図である。
【図７Ａ】一実施形態に従う、２つの例示的なテールチェイニングシナリオを図示する図である。
【図７Ｂ】一実施形態に従う、２つの例示的なテールチェイニングシナリオを図示する図である。
【図８Ａ】一実施形態に従う、２つのさらなるテールチェイニングシナリオを図示する図である。
【図８Ｂ】一実施形態に従う、２つのさらなるテールチェイニングシナリオを図示する図である。
【図９Ａ】一実施形態に従う、２つの初期先取りシナリオを図示する図である。
【図９Ｂ】一実施形態に従う、２つの初期先取りシナリオを図示する図である。
【図１０】一実施形態に従って先取り例外を処理するときに使用することができる、分解手法を概略的に図示する図である。
【図１１】一実施形態に従ってセキュリティビットを含む例外戻り値を記憶するための、リンクレジスタの使用を概略的に図示する図である。
【図１２】一実施形態に従って例外の受け取り時に行われるスタッキング動作を図示するフロー図である。
【図１３】一実施形態に従って例外の完了時に行われるスタッキング解除動作を図示するフロー図である。
【発明を実施するための形態】
【００３５】
図１は、例えばマイクロコントローラであり得る、データ処理装置１０を示す。このデータ処理装置は、命令を処理するための処理回路２０と、処理回路２０によって処理されたデータを記憶するための、さらには、処理回路２０が実行するプログラムコードを記憶するためのデータ保存３０とを備える。
【００３６】
データ保存３０は、異なるセキュリティの２つの領域、すなわち、セキュア領域３２および非セキュア領域３４（本明細書において、低セキュア領域とも称される）を有する。セキュア領域３２に記憶されるデータは、それを実行しているときに、非セキュア領域３４に記憶されるコードにアクセスできない。
【００３７】
データ処理装置１０はまた、セキュア領域３２および非セキュア領域３４へのアクセスを制御するメモリ保護ユニットＭＰＵ４０も有する。この制御は、メモリ保護ユニットを通して行われ得るが、他の実施形態では、処理装置内の回路によってより分散した様式で行われ得、該処理装置は、現在実行されているコードが記憶されている領域を監視し、また、このことに依存して、メモリの異なる領域へのアクセスを制御する。
【００３８】
この実施形態において、処理回路２０を実行しているドメインのセキュリティは、現在実行されているコードが記憶されている領域から決定される（また、現在の動作のドメインを決定するための他の手法も可能である）。したがって、セキュアデータ保存３２に記憶されるセキュアプログラムコードは、セキュアドメインで実行され、データ値を記憶するためにセキュアスタック３６を使用する。同様に、非セキュアデータ保存３４に記憶される非セキュアコードは、非セキュアドメイン（本明細書において、低セキュアドメインとも称される）で実行され、実行中に、データ値を記憶するための非セキュアスタック３８を使用する。
【００３９】
処理回路２０は、実行される命令をフェッチするためのフェッチ回路２２を有する。また、これらの命令を復号化するための復号回路２４、および該命令を実行するための実行回路２６も有する。実行される命令は、メモリ保護ユニットＭＰＵ４０を介して、フェッチ回路２２によってデータ保存３０からフェッチされる。命令およびデータは、セキュア領域および非セキュア領域へのアクセスを制御し、非セキュア側からセキュアデータを隔離するＭＰＵ４０を介して検索される。
【００４０】
この実施形態では、データ処理中に使用される汎用レジスタを有するレジスタバンク６０がある。これらの汎用レジスタは、どの命令が次に実行されるのかを示すプログラムカウンタＰＣと、スタックのどの地点に現在のスタックフレームが位置するのかを示すスタックポインタＳＰとを有する。この実施形態では、セキュア側のスタックおよび非セキュア側のスタックがあるので、セキュアスタックポインタＳＳＰおよび非セキュアスタックポインタＮＳＰがあるが、どの時点においても、実行されているプログラムは、これらのうちの１つだけしか直接見ることができない。いくつかの実施形態において、各スタックについて複数のスタックポインタがあり得るが、同じく、どの時点においても、１つだけしか見ることができないことに留意されたい。また、レジスタバンク６０には、処理回路２０によって処理されているデータ値を記憶するための汎用レジスタもある。この実施形態において、これらは、Ｒ０〜Ｒ１２の記号が付される。
【００４１】
レジスタバンク６０はまた、例外を取得したとき、または関数が呼び出されたときに戻り値を記憶するために使用され得るリンクレジスタ６５も備える。戻り値は、システムが、戻りが例外戻りであるのか、関数戻りであるのかを決定すること、および例外および関数からの戻りに対して何の処理が必要とされるのかを決定することを可能にする。異なる種類の戻り値が使用され得、該戻り値としては、例外戻りを示し、バックグラウンド処理が処理されていたドメインのセキュリティレベルの指示等の情報を含むことができる、例外戻り（EXC_RETURN）値が挙げられ、プロセッサが、例外戻りをどのように処理するのか、例えば、状態を復元するときにどのスタックにアクセスするか、およびどれくらいのレジスタをロードする必要があるのかを決定することを可能にすることができる。
【００４２】
図１はまた、浮動小数点レジスタ等の追加的な特殊目的レジスタを有する追加的なレジスタバンク６４も示す。一実施形態において、追加的なレジスタバンク６４のレジスタのうちのどれかがセキュアデータを記憶することができるのかを識別するために、ある値をセキュア構成レジスタ（ＳＣＲ）６２に設定することができ、そしてその場合、それらのレジスタは、セキュアドメインから低セキュアドメインへの移行、およびその逆の移行を制御するときに管理する必要がある、（レジスタバンク６０のレジスタとともに）１組のレジスタの一部を形成するとみなされる。
【００４３】
説明される実施形態によれば、セキュリティドメイン間を移行するために使用することができる１つの機構は、例外機構である。この機構によれば、例外の発生時に、現在のソフトウェアルーチンの実行が一時的に停止され、代わりに、実行は、例外を処理するために使用される例外処理ルーチンに分岐し、該例外処理ルーチンは、例外発生のタイプに依存する。例外処理ルーチンが実行されると、例外発生の結果として一時的に停止させた元のソフトウェアルーチンに戻すために、次いで、例外戻りが使用される。
【００４４】
例外制御回路２８は、例外の取得を制御するために提供され、これらの例外が、高セキュアドメインからより低セキュアドメインへの移行をもたらす場合、これらのレジスタに記憶されるデータが非セキュア側で利用できるようになることを回避するために、例外を取得する前に、機密データを記憶し得る１組のレジスタがクリアされる。これらのレジスタのいくつかまたは全てに記憶される状態は、例外制御回路２８の制御下で、セキュアスタック上に記憶され、よって、例外からの戻り時にその状態を復元することができる。
【００４５】
図１において、データ保存３０は、単一のセキュア領域と、単一の非セキュア領域とを含むが、本明細書で説明される手法は、２つを超える異なるセキュリティ領域を備える異なる実現例にも等しく適用することができる。
【００４６】
また、図１は、例外制御回路２８が実行ステージ２６等の処理回路２０の他の部分から分離しているように示しているが、実際には、例外制御回路２８は、例外の処理を制御するために、処理回路２０のいくつかの要素を少なくとも部分的に再使用し得る。
【００４７】
図２では、セキュアドメインから低セキュアドメインへの移行、およびその逆の移行を制御するときに管理する必要がある１組のレジスタ１００が、概略的に図示される。説明される実施形態によれば、これらのレジスタのいくつかは、呼び出し元レジスタ１１０として定義されるが、レジスタの他のものは、呼び出し先レジスタ１２０として定義される。呼び出し元レジスタは、例外処理ルーチンを実行するドメインに関係なく、例外制御回路２８が、スタック上へ状態を保存する責任を常時持つレジスタである。デフォルトで、例外処理ルーチンは、次いで、呼び出し先レジスタを状態保存する責任を持つ。具体的には、例外処理ルーチンは、次いで、例外処理ルーチンを実行しているドメインと関連付けられるスタック上へ呼び出し元レジスタの状態を保存する。さらに、例外処理ルーチンは、次いで、例外戻りを発行する前に、（一般的に、スタックからの呼び出し先レジスタを関連するレジスタに戻すようにコピーすることによって）そのような呼び出し先レジスタの状態を復元する責任を持つ。
【００４８】
しかしながら、説明される実施形態によれば、例外がセキュアドメインからより低セキュアドメインへの移行を必要とし、バックグラウンド処理がセキュアドメインで行われた状況において、例外制御回路２８は、追加的に、処理回路が例外処理ルーチンの実行への移行を行わせる前に、セキュアスタック３６のスタックフレーム内の呼び出し先レジスタを状態保存する責任を持つ。
【００４９】
先に論じたように、ＳＣＲレジスタ６２の内容は、セキュアデータを記憶するためにどのレジスタが使用され得るか、およびしたがって、どのレジスタを１組のレジスタ１００内に含める必要があるのかを定義する。一実施形態において、ＳＣＲレジスタ６２の内容は、汎用レジスタ６０に加えて、追加的な特殊目的レジスタ６４のいずれかも１組のレジスタ１００内に含めるかどうかを識別する。
【００５０】
図３Ａは、３つの異なるシナリオについて、例外の発生時およびその後のその例外完了時の例外制御回路の動作を図示する。第１のシナリオは、バックグラウンド処理がセキュアドメインにおいて行われ、例外が、セキュアドメインで例外処理ルーチンによって処理される場合であり、第２のシナリオは、バックグラウンド処理が非セキュアドメインにおいて行われ、例外が、セキュアドメインで例外処理ルーチンによって処理される場合であり、そして第３のシナリオは、バックグラウンド処理が非セキュアドメインにおいて行われ、例外が、非セキュアドメインで例外処理ルーチンによって処理される場合である。
【００５１】
これらの３つのシナリオのそれぞれにおいて、バックグラウンド処理１３０が例外によって割り込まれたときに、例外制御回路２８は、例外を処理するために必要とされる例外処理ルーチン１４０を行うために処理回路を起動させる前に、地点１３５で、呼び出し元レジスタからのデータを、バックグラウンド処理が行われているドメインと関連付けられるスタック上にスタックするように構成される。例外の完了時に、地点１５０でバックグラウンド処理を再開する前に、例外制御回路はまた、地点１４５で、以前にスタックしたデータを関連スタックから呼び出し元レジスタに戻すようにスタック解除する。
【００５２】
例外処理ルーチンは、一般的に、例外処理ルーチン中にこれらのレジスタを再使用する前に、呼び出し先レジスタからのデータをスタックし、その後で、例外処理ルーチンの終了前に、そのデータを呼び出し先レジスタに戻すようにスタック解除する責任を持つ。
【００５３】
図３Ａの実施例において、呼び出し元レジスタは、特定の実現例に依存して、例外処理ルーチンが実行される前に、ハードウェアによってクリアされる場合もあれば、そうでない場合もある。一実施形態において、３つのシナリオは、例外を取得したときにドメインの移行をもたらさないか、または非セキュアドメインからセキュアドメインへの移行だけをもたらすか、のいずれか、および一実施形態において、セキュアドメインが非セキュアデータを見ることを許可されることを想定しているので、呼び出し元レジスタの内容はクリアされない。
【００５４】
図３Ｂは、バックグラウンド処理がセキュアドメインで処理されており、例外が非セキュア領域への移行を必要とするシナリオについて、例外の発生時およびその後のその例外の完了時の例外制御回路の動作を図示する。この実施例において、バックグラウンド処理１６０が例外によって割り込まれたときに、例外処理回路は、地点１６５で、呼び出し元レジスタからのデータをセキュアスタック上にスタックするように構成され、加えて、地点１７０で、呼び出し先レジスタからのデータをセキュアスタック上にスタックするように構成される。例外制御回路はまた、次いで、例外処理ルーチン１７５を行うために処理回路を起動させる前に、呼び出し元レジスタおよび呼び出し先レジスタの内容がクリアされることを確実にする。故に、このシナリオにおいて、非セキュア例外処理ルーチンは、呼び出し元レジスタまたは呼び出し先レジスタに以前に保持されたセキュアデータへのいかなるアクセスも有しない。
【００５５】
例外処理ルーチンの完了時に、地点１９０で、バックグラウンド処理を再開する前に、例外制御回路は、次いで、地点１８０で、以前にスタックした呼び出しデータをセキュアスタックから、呼び出し先レジスタに戻すようにスタック解除し、また、地点１８５で、以前にスタックしたセキュア呼び出しデータをセキュアスタックから呼び出し元レジスタに戻すようにスタック解除する。
【００５６】
特定の一実施形態において、非セキュア例外処理ルーチンは、それでも、呼び出し先レジスタの状態を通常通り保存するように構成することができるが、このシナリオにおいて、それらの呼び出し先レジスタは空であり、故に、例外処理ルーチンは、単にクリア値を非セキュアスタックに記憶するだけであり、この値は、後で、例外戻りを発行する前に、レジスタの中へ復元する。
【００５７】
上で説明されるように、アーキテクチャにおけるデフォルト位置として、レジスタ状態の一部は、例外（例えば、割り込み）が発生し、完了したきに、ハードウェアによって自動的に保存され、復元される。そのようなアーキテクチャを、レジスタ状態全体またはセキュアドメインが使用するレジスタ状態の少なくとも全てを保存し、クリアするように拡張することによって、割り込みがセキュアから非セキュアへの移行を行わせるイベントにおいて、ハードウェアは、例外の前後にセキュリティを維持することができる。
【００５８】
上の手法を使用することにより、例外制御回路に、呼び出し元レジスタおよび呼び出し先レジスタの全てを（単に、呼び出し元保存レジスタの代わりに）スタックにプッシュさせ、次いで、非セキュア状態に切り替え、例外処理ルーチン（割り込みの例では、割り込みベクトル）にジャンプする前にそれらの値をクリアするために、自動レジスタスタッキングシステムを拡張することによって、セキュア状態を通して割り込みをプロキシするための要件を取り除くことが可能である。割り込み待ち時間をできるだけ低く保つために、セキュア状態から非セキュア状態に移行するときに、追加的なレジスタ状態だけがスタック上へプッシュされる。これは、より高い優先度の例外（いわゆる、先取り例外）が例外処理中に発生したときに、またはテールチェイニング例外を処理するときに、いくらかの複雑さをもたらす。図４は、いくつかの実施例を示す。
【００５９】
第１の実施例において、バックグラウンドプログラムコードは、セキュア状態で実行され、第１のセキュア割り込みを受け取る。レジスタ（すなわち、呼び出し元レジスタ）のサブセットは、セキュアスタックに保存され、次いで（第１のセキュア割り込みが、適切な割り込みベクトルを介してまだ処理されている間に）非セキュアドメインで処理することを必要とする第２のより高い優先度の割り込みを受け取る。それは、非セキュアドメインでの処理を必要とするので、セキュアレジスタの中のどの情報も、新しい割り込みベクトルルーチンで見ることができてはならず、したがって、全てのセキュアレジスタ（呼び出し元レジスタおよび呼び出し先レジスタの双方）をセキュアスタックに保存し、次いで、この割り込みを取得する前にクリアしなければならない。第２の割り込みが完了したときに、処理は、完了していない初期のセキュア割り込みに戻り、第２の割り込みに応じてセキュアスタックにプッシュされたレジスタは、その時点で、セキュアスタックをポップすることによって復元される。次いで、この第１のセキュア割り込みを完了することができ、そのすぐ後に、スタックにプッシュされた元のサブセットを、次いで、セキュアバックグラウンド処理を再開する前に、セキュアスタックをポップすることによって復元することができる。
【００６０】
第２の実施例において、第２の割り込みは、第１の割り込みよりも低い優先度を有し、故に、第１の割り込みは、したがって、非セキュアの第２の割り込みを取得する前に完了する。第１の割り込みが完了すると、残りのレジスタ（すなわち、呼び出し先レジスタ）がセキュアスタックにプッシュされ、非セキュア割り込みを取得する前に、全てのレジスタがクリアされる。この時点で、呼び出し元レジスタおよび呼び出し先レジスタの双方がクリアされることが重要であるが、例外制御回路は、例えば呼び出し元レジスタが既に先にクリアされている場合があるので、実際には、この段階で全てのレジスタをクリアする必要がない場合がある。非セキュア割り込みの終了時点で、セキュアスタックにプッシュされたレジスタの全てが復元される。
【００６１】
第３の実施例は、セキュア割り込みを受け取り、そのすぐ後に、非セキュアスタックへのレジスタ（呼び出し元レジスタ）の部分的な保存がある非セキュアバックグラウンドコードを示す。次いで、より高い優先度を有する第２の非セキュア割り込みを受け取った場合、セキュアレジスタ（呼び出し元および呼び出し先）の全てを、セキュアスタックにプッシュし、それを取得することができるようになる前にクリアする必要がある。非セキュア割り込みが完了したときに、全てのセキュアレジスタがスタックからポップされることが必要であり、次いで、セキュア割り込みが完了したときに、非セキュアレジスタの元のサブセットがポップされる。
【００６２】
第４の実施例は、呼び出し元保存レジスタをセキュアスタックにプッシュさせるセキュア割り込みを受け取るが、この過程が完了する前に、第２のより高い優先度の非セキュア割り込みが発生するセキュアバックグラウンドコードを示す。この第２の割り込みは、呼び出し元レジスタがスタックされた後に、残りのレジスタ（すなわち、呼び出し先レジスタ）をセキュアスタック上へプッシュさせ、結果として、全てのレジスタのプッシュが行われる。全てのレジスタは、次いで、非セキュア割り込みを取得する前にクリアされる。この割り込み完了時に、呼び出し先保存レジスタが、セキュア割り込みを取得する前に、セキュアスタックからポップされる。セキュア割り込みが完了すると、元の呼び出し元レジスタがセキュアスタックからポップされる。
【００６３】
図５は、潜在的な割り込みおよび行うことが必要である状態保存を示す表を示す。これに関して、「サブセットをプッシュする」は、呼び出し元保存レジスタのサブセットをスタック上へプッシュすることであり、「残りをプッシュする」は、呼び出し先保存レジスタのサブセットをスタック上へプッシュすることであり、また、「全てをプッシュする」は、呼び出し元レジスタ状態および呼び出し先レジスタ状態の双方をスタック上へプッシュすることである。これに関して、いくつかのレジスタが機密データを記憶するために利用できず、それが分かっている場合、これらのレジスタは、スタック上へプッシュすることが必要でない場合がある。
【００６４】
表において、「例外エントリ」の欄は、初期割り込みの例外ベクトルへの分岐の前に、初期割り込みよりも高い優先度を有するさらなる割り込みが発生した場合に（本明細書において、初期先取りシナリオと称される）、どの状態がスタック上へプッシュされるのかを識別する。「例外戻り」の欄は、初期割り込み以下の優先度を有するさらなる割り込みが発生し、故に、初期割り込みが完了するまでさらなる割り込みが取得されない場合に（本明細書において、テールチェイニングシナリオと称される）、どの状態がプッシュ、ポップ、またはクリアされるのかを識別する。表で識別されるアクションは、一般的に、例外制御回路ハードウェア２８によって行われるアクションであり、バックグラウンド処理が非セキュアドメインで行われた状況において、セキュア割り込みに続く非セキュア割り込みのテールチェイニングと関連付けられる呼び出し元レジスタをクリアするアクション（「サブセットをクリアする」）は、実際には、例外制御回路ハードウェアではなく、ソフトウェアによって行われ得る。これはまた、バックグランド処理がセキュアドメインで行われ、ソフトウェアが呼び出し元レジスタをクリアするように構成することができるが、ハードウェアが、次いで、呼び出し先レジスタをプッシュおよびクリアする状況において、セキュア割り込みに続く非セキュア割り込みのテールチェイニングと関連付けられるレジスタクリアリング（「残りをプッシュ、全てクリア」動作の一部を形成する）の少なくとも一部にも当てはまり得る。
【００６５】
図５の表の概観によって明らかなように、セキュア状態から非セキュア状態に移行するときに、非セキュア側がレジスタを利用できないようにし、したがって、通常の呼び出し元保存レジスタ状態に加えて、追加的な保存およびクリアリングが行われるように、セキュア状態を保存することができる全てのレジスタの値をレジスタから取り除く必要がある。
【００６６】
図６は、一実施形態のスタックフレームを示し、より具体的には、同じまたは低セキュア状態から割り込みを取得したときに、スタックのスタックフレーム上へ保存されるレジスタの内容（図６の左側）、および低セキュア状態に移行したときに、スタックフレーム上へ保存される内容（図６の右側）を示す。これに関して、後者の場合、セキュア状態は、低セキュア状態が利用できてはならず、レジスタは、いかなる状態も保存したままにしておくことができないので、より多くのレジスタを保存し、クリアする必要がある。
【００６７】
図６は、特定の実施形態に従って、どのレジスタが呼び出し元レジスタであるとみなされるか、およびどのレジスタが呼び出し先レジスタであるとみなされるかを識別する。しかしながら、先に論じたように、正確にどのレジスタを呼び出し元レジスタおよび呼び出し先レジスタ内に含める必要があるのかは、実施形態によって異なり得、セキュア構成レジスタ６２の値によって示すことができ、よって、必要とされる状態の保存およびレジスタのクリアリングは、この値を使用することによって決定することができる。この値は、特定の装置のためのコンパイラによって設定され得、このことは、特定の装置を異なる方法で使用することを可能にし、いくらかの柔軟性を製品に提供する。他の実施形態において、この値は、例えばシステムが起動しているときに、ソフトウェアによって設定され得る。
【００６８】
上の説明から分かるように、例外制御回路は、例外が発生したときに、レジスタ状態の呼び出し元保存セクションをスタックに自動的にプッシュおよびポップし、また必要であれば、どのスタックポインタ、したがってどのスタックが使用されるのかを変更する。これは、セキュアドメインおよび低セキュアドメインを有するシステムにおいても、割り込み待ち時間の低減、割り込みジッタの低減、例外ハンドラをアセンブラの代わりにＣで書くことができること、例外エントリに対する例外のような最適化を可能にすること、およびテールチェイニング、といった利点を提示することを可能にする。
【００６９】
図７Ａおよび７Ｂは、いくつかの特定のテールチェイニング実施例のシナリオを図示する。図７Ａの実施例において、地点２５０で、セキュアバックグラウンド処理が行われているが、地点２５５で、初期例外が発生し、セキュアドメインで例外処理ルーチンを実行することを必要とする。故に、地点２５５で、例外制御回路が呼び出し元レジスタからのデータをセキュアスタック上へスタックし、そのすぐ後に地点２６０で、例外処理ルーチンが実行される。
【００７０】
地点２５７で、さらなる低優先度の例外が発生し、故に、その例外は、地点２６５で初期例外が完了するまで保留のままである。この時点で、例外制御回路は、さらなる例外を処理するためにセキュアドメインから非セキュアドメインへの移行が必要であると決定し、故に、その時点で、呼び出し先レジスタをスタックする。それはまた、地点２７０でさらなる例外を処理するために、非セキュアドメインで必要とされる例外処理ルーチンを行うために処理回路を起動させる前に、呼び出し先レジスタがクリアされていること（呼び出し元レジスタは、例えばソフトウェアによって、以前にクリアされている）も確実にする。地点２７５でのさらなる例外の完了時に、例外制御回路は、次いで、地点２８０でバックグラウンド処理を再開する前に、呼び出し元レジスタおよび呼び出し先レジスタの全ての内容をスタック解除する。
【００７１】
図７Ｂは、類似する実施例を図示するが、この実施例において、地点３００でのバックグラウンド処理は、非セキュアドメインで行われる。地点３０５で初期例外が発生したときに、例外制御回路は、次いで地点３１０で初期例外に対する例外処理ルーチンが行われる前に、図７Ａの実施例で行ったように、呼び出し元レジスタをスタックする。よって、地点３０７で発生したさらなる低優先度の例外は、地点３１５で初期例外の処理が終了するまで保留のままである。しかしながら、この時点で、バックグラウンド処理が非セキュアで行われたので、例外制御回路は、いかなるスタッキングも行わない。図５の表を参照して先に論じたように、この段階で行われ得る随意のステップは、呼び出し元レジスタをクリアすることであるが、このステップは、代替として、例外制御回路ハードウェアの代わりにソフトウェアによって行われ得る。その後に、地点３２０で、さらなる例外に対する例外処理ルーチンが非セキュアドメインで処理される。地点３２５でのさらなる例外の完了時に、例外制御回路は、地点３３０でバックグラウンド処理に戻る前に、呼び出し元レジスタをスタック解除する。
【００７２】
一実施形態において、図７Ａの実施例は一例に過ぎず、初期例外の完了に続いて、さらなる例外がテールチェイン例外として処理されたときに、例外制御回路がいくつかの追加的なスタッキングを行わなければならず、故に、スタッキングを行うことのオーバーヘッドが最小に保たれる一方で、テールチェイン例外を処理するときに、セキュアデータのセキュリティを保つ。
【００７３】
図８Ａおよび８Ｂは、２つのさらなるテールチェイニングの実施例を図示する。図８Ａの実施例において、地点３５０で、セキュアバックグラウンド処理が行われているが、地点３５５で、初期例外が発生し、非セキュアドメインで例外処理ルーチンを実行することを必要とする。故に、地点３５５で、例外処理回路が呼び出し元レジスタおよび呼び出し先レジスタからのデータをセキュアスタック上へスタックし、その後に地点３６０で、例外処理ルーチンが実行される。
【００７４】
地点３５７で、さらなる低優先度の例外が発生し、故に、その例外は、地点３６５で初期例外が完了するまで保留のままである。この時点で、例外制御回路は、地点３７０でさらなる例外を処理するために、セキュアドメインで必要とされる例外処理ルーチンを行うために処理回路を起動させる前に、さらなる例外を処理するために非セキュアドメインからセキュアドメインへの移行が必要であると決定し、それに応じて、その時点で呼び出し先レジスタをスタック解除する。地点３７５でのさらなる例外の完了時に、例外制御回路は、次いで、地点３８０でバックグラウンド処理を再開する前に、呼び出し元レジスタの内容をスタック解除する。
【００７５】
図８Ｂは、類似する実施例を図示するが、この実施例において、地点４００でのバックグラウンド処理は、非セキュアドメインで行われる。地点４０５で初期例外が発生したときに、例外制御回路は、次いで地点４１０で初期例外に対する例外処理ルーチンが行われる前に、呼び出し元レジスタをスタックする。よって、地点４０７で発生したさらなる低優先度の例外は、地点４１５で初期例外の処理が終了するまで保留のままである。しかしながら、この時点で、例外制御回路は、いかなるスタック動作も必要とされないと決定する。その後に、地点４２０で、さらなる例外に対する例外処理ルーチンがセキュアドメインで処理される。地点４２５でのさらなる例外の完了時に、例外制御回路は、地点４３０でバックグラウンド処理に戻る前に、呼び出し元レジスタをスタック解除する。
【００７６】
一実施形態において、図８Ａの実施例は、単純なテールチェイニング状況の一例に過ぎず、初期例外の完了に続いて、さらなる例外がテールチェイン例外として処理されたときに、例外制御回路がスタッキング解除動作を行わなければならず、故に、スタッキング解除を行うことのオーバーヘッドが同様に最小に保たれる一方で、テールチェイン例外を処理するときに、セキュアデータのセキュリティを保つ。
【００７７】
図９Ａおよび９Ｂは、一実施形態に従う、２つの初期先取りシナリオを図示する。図９Ａの実施例において、地点４５０で、セキュアドメインで行われるバックグラウンド処理は、優先度レベル１を有するが、レベル１０を有し、セキュアドメインでの処理を必要とする例外を受け取った時点で、例外制御回路は、地点４６０でのセキュア例外処理ルーチンへの移行に備えて、地点４５５で、呼び出し元レジスタのスタッキングを開始する。しかしながら、呼び出し元レジスタのスタッキングの完了前に、地点４６５で、より高い優先度レベル（この実施例では、優先度レベル１２）を有するさらなる例外を受け取り、非セキュアドメインへの移行を必要とする。図９Ａの右側に示されるように、この時点で、例外制御回路のスタッキング行動は、呼び出し元レジスタおよび呼び出し先レジスタの双方をスタックする（地点４７０を参照されたい）ように修正され、その後に、地点４７５で、非セキュアドメインでさらなる例外に対する例外処理コードを実行するために、処理回路が起動される。その後に、優先度レベル１０のセキュア例外を、次いで、テールチェイン例外として処理することができる。
【００７８】
図９Ｂの実施例において、地点５００で、セキュアドメインで行われるバックグラウンド処理は、優先度レベル１を有するが、レベル１０を有し、非セキュアドメインでの処理を必要とする処理を受け取った時点で、例外制御回路は、地点５１０での非セキュア例外処理ルーチンへの移行に備えて、地点５０５で、呼び出し元レジスタおよび呼び出し先レジスタのスタッキングを開始する。しかしながら、レジスタのスタッキングの完了前に、地点５１５で、より高い優先度レベル（この実施例では、優先度レベル１２）を有するさらなる例外を受け取り、セキュアドメインへの移行を必要とする。図９Ｂの右側に示されるように、この時点で、例外制御回路のスタッキング行動は、呼び出し元レジスタだけをスタックする（地点５２０を参照されたい）ように修正され、必要であれば、これは、（例えば、影響を受けた呼び出し先レジスタに対するデータをスタック解除することによって）既に行われた任意の呼び出し先レジスタスタッキングの効果を逆にすることを伴う。その後に、地点５２５で、セキュアドメインでのさらなる例外に対する例外処理コードを実行するために、処理回路が起動される。その後に、優先度レベル１０のセキュア例外を、次いで、テールチェイン例外として処理することができる。
【００７９】
図１０は、一実施形態に従って先取り例外を処理するときに使用することができる分解手法を概略的に図示する。図９Ａおよび９Ｂを参照して先に論じた実施例とは異なり、図１０の実施例では、先取り例外が発生するまでに、現在の例外と関連付けられる任意の状態保存が既に行われ、必要な例外処理ルーチンを実行するために処理回路が起動されていると仮定される。故に、この時点で、先取り例外を取得することを可能にするために、次いで、現在の例外処理ルーチンの処理を割り込ませることが必要である。
【００８０】
図１０で示されるように、そのようなシナリオにおいて、先取り例外の種々の階層は、バックグラウンド処理とみなされるものを変えることによって分解することができる。具体的には、移行５５０、５６０で示されるように、これらは、単純な事例５６５に分解することができ、故に、第１の例外を取得したときに、バックグラウンド処理は、セキュア処理Ｓ１であり、最終的に、第１の例外が完了したときに、バックグラウンド処理は再度Ｓ１に戻る。第２の例外の場合、先取り例外を取得した時点で、バックグラウンド処理の図は、点線の円５５５によって概略的に図示されるように変更され、よって、バックグラウンド処理は、非セキュア処理Ｎ２であるとみなされ、したがって、例外制御回路は、単純な事例５７０としてその先取り例外を扱う。したがって、例外Ｓ３を取得したときに、どの状態保存および／または復元が必要とされるのかを決定する目的で、例外制御回路は、バックグラウンド処理を非セキュア処理Ｎ２であるように扱う。
【００８１】
図１１で示されるように、一実施形態において、例外制御回路が、例外が戻るときにどのスタックをそのレジスタ状態から復元するべきか、および処理回路がどのドメインを戻すべきか、を決定することができるように、リンクレジスタ５９０は、戻りアドレスではなく、特別なEXC_RETURN値に設定され得る。このEXC_RETURN値は、セキュリティビットを含み得、該セキュリティビットは、例外を取得する前にバックグラウンド処理が行われていたときに処理回路があったドメインのセキュリティレベルを処理装置に示す。プログラムカウンタが戻る実際の位置は、他のレジスタ状態とともに、このドメインのスタックに記憶される。この場合、EXC_RETURN値は、復帰アドレスがスタック上にあり、これがどのスタックであるのかを示す。
【００８２】
一実施例において、リンクレジスタ５９０は、例外処理ルーチンが実行されている時間全体にわたってEXC_RETURN値を保つ必要はなく、代わりに、開始時にこの値に設定し、次いで、直後にスタックに移動させ得る。例外が完了すると、ソフトウェアは、EXC_RETURN値によって示されるアドレスに分岐するが、ＣＰＵは、該アドレスが有効な命令アドレスではないので、特別なイベントとみなす。
【００８３】
先取り例外を取得した場合、現在の例外に対するEXC_RETURN値は、新しいEXC_RETURN値が新しい先取り例外に対するリンクレジスタに設定される前に（セキュリティビットＳは、その処理が割り込まれている現在の例外のドメインを考慮して適切に設定される）、（先に論じた手順に従って）関連するスタックに記憶され得る。
【００８４】
図１２は、一実施形態に従って例外の受け取り時に行われるスタッキング動作を示すフロー図である。ステップ６００で、例外を受け取ったかどうかが決定され、受け取った場合、過程は、ステップ６０５に進み、そこでは、処理回路が現在バックグラウンド処理を行っているかどうかが決定され、それに応じて、この例外が、そのバックグラウンド処理からの初期例外となるかどうかが決定される。この例外が、バックグラウンド処理からの初期例外であると決定された場合、過程は、ステップ６１０に進み、そこでは、例外を取得したときにセキュアから非セキュアへの移行が必要とされるかどうか（すなわち、バックグラウンド処理がセキュアドメインで行われているかどうか、および必要とされる例外処理ルーチンを非セキュアドメインで実行することが必要となるかどうか）が決定される。当てはまる場合には、ステップ６１５で、呼び出し元レジスタおよび呼び出し先レジスタは、例外制御回路２８によってセキュアスタックに保存したそれらのデータを有する。そうでない場合は、呼び出し元レジスタだけが、例外制御回路によってステップ６２０でスタックしたそれらのデータを有し、どのスタックがこのデータを保存するのかは、バックグラウンド処理が行われているドメインによって決定される。本方法は、次いで、ステップ６００に戻る。
【００８５】
ステップ６０５で、ステップ６００で受け取った例外がバックグラウンド処理からの初期例外でなかった場合、処理は、ステップ６２５に進み、そこでは、ステップ６００で受け取ったこの新しい例外が、現在処理されている既存の例外よりも高い優先度であるかどうかが決定される。そうでない場合は、新しい例外がテールチェイン例外として扱われ、ステップ６３０で、現在の例外が終了したかどうかが決定される。現在の例外が終了すると、次いでステップ６３５で、Ｓビット５９５がEXC_RETURN値内に設定されているかどうかが決定される。設定されていない場合、過程は、ステップ６４０へ進み、そこでは、いかなるさらなるスタッキングも行われず、次いで、過程は、ステップ６００に戻る。
【００８６】
しかしながら、Ｓビットが設定されている場合は、バックグラウンド処理から処理例外を取得した時点で、処理回路がセキュアドメインで動作していたことを示し、ステップ６４５で、必要とされる例外処理ルーチンが行われるために、新しい例外がセキュアから非セキュアへの移行を必要とするかどうかが決定される。設定されていない場合は、同じくステップ６４０でいかなるさらなるスタッキングも行われず、過程は、ステップ６００に戻る。しかしながら、セキュアから非セキュアへの移行が必要とされる場合、過程は、ステップ６５０に進み、そこでは、過程が、次いで、ステップ６００に戻る前に、呼び出し先レジスタ内のデータもセキュアスタック内にスタックされる。
【００８７】
ステップ６２５で、新しい例外が現在の例外よりも高い優先度を有すると決定された場合、新しい例外が先取り例外として扱われる。次いで、ステップ６５５で、現在の例外に対してスタッキングがまだ行われているかどうかが決定される。行われている場合は、ステップ６６０で、図９Ａおよび９Ｂを参照して先に論じたように、スタッキングの挙動は、新しい例外に依存して修正される。その後に、本方法は、ステップ６００に戻る。
【００８８】
ステップ６５５で、現在の例外に対してスタッキングがもう行われておらず、代わりに、処理回路が、その現在の例外に対して関連する例外処理ルーチンの実行を開始した場合、過程は、ステップ６６５に進み、そこでは、現在の例外がバックグランド処理として扱われ、次いで、過程は、ステップ６１０に戻る。故に、ステップ６６５で、図１０を参照して先に論じた分解手法が行われる。
【００８９】
図１３は、一実施形態に従って例外の完了時に行われるスタッキング解除動作を示すフロー図である。ステップ７００で、例外が完了したかどうかが決定され、完了した場合、過程は、ステップ７０５に進み、そこでは、バックグラウンド処理がセキュアドメインで行われたかどうかが決定される。先に述べたように、これは、EXC_RETURN値内に記憶されるＳビット５９５を参照して決定することができる。戻された例外が先取り例外である場合は、先に論じたように、バックグラウンド処理は、先取り例外によって割り込まれた例外処理ルーチンであるとみなされる。
【００９０】
バックグラウンド処理がセキュアドメインで行われた場合は、ステップ７１０で、現在の例外の完了の結果として、非セキュアからセキュアへの移行が必要とされるかどうかが決定される。必要とされる場合は、ステップ７１５で、呼び出し先レジスタの内容がスタック解除され、その後に、過程は、ステップ７２０に進む。ステップ７１０で、非セキュアからセキュアへの移行が必要とされないことが決定された場合、過程は、ステップ７２０に直接進む。
【００９１】
ステップ７２０で、例外の完了の結果として、バックグラウンド処理に戻ることが必要とされるかどうかが決定され、必要とされない場合、過程は、ステップ７００に戻り、次の例外が完了するのを待つ。しかしながら、ステップ７２０で、バックグラウンド処理に戻ることが必要とされると決定された場合、過程は、ステップ７２５に進み、そこでは、過程がステップ７００に戻る前に、呼び出し元レジスタの内容がスタック解除される。
【００９２】
上で説明される実施形態の手法は、例外に応じて状態保存を行うときに、セキュリティと性能との間の改善されたバランスを達成することを可能にし、例外制御回路のハードウェア機構は、例外ハンドラを通してプロキシすることを必要とすることなく、セキュア例外の効果的な処理を可能にする。
【００９３】
本出願の主題は、本発明の譲受人に譲渡された同時係属の米国特許出願第１３／３６８，４１９号および英国特許出願第１２１７５３１．１号で論じられる主題に関連し、これらの文書の双方の内容全体が参照により本明細書に組み込まれる。
【００９４】
特定の実施形態を本明細書で説明してきたが、本発明は、それに限定されるものではなく、その実施形態への多くの変更および追加が本発明の範囲内で行われる場合があることが認識されるであろう。例えば、本発明の範囲を逸脱しない範囲で、以下の従属請求項の特徴の、独立請求項の特徴との種々の組み合わせを行うことができる。
【図１】
2015506525.tif 000003
【図２】
2015506525.tif 000004
【図３Ａ】
2015506525.tif 000005
【図３Ｂ】
2015506525.tif 000006
【図４】
2015506525.tif 000007
【図５】
2015506525.tif 000008
【図６】
2015506525.tif 000009
【図７Ａ】
2015506525.tif 000010
【図７Ｂ】
2015506525.tif 000011
【図８Ａ】
2015506525.tif 000012
【図８Ｂ】
2015506525.tif 000013
【図９Ａ】
2015506525.tif 000014
【図９Ｂ】
2015506525.tif 000015
【図１０】
2015506525.tif 000016
【図１１】
2015506525.tif 000017
【図１２】
2015506525.tif 000018
【図１３】
2015506525.tif 000019
【手続補正書】
【提出日】平成25年11月22日(2013.11.22)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本技術分野は、データ処理の分野に関し、具体的には、機密データおよびコードの処理に関する。
【背景技術】
【０００２】
多くのデータ処理システムおよびアーキテクチャは、無許可の個人または過程による機密データおよびコードセクションをアクセスから隔離し、保護する方法を提供する。セキュリティを提供できることが重要であるが、この保護と関連付けられる性能および回路領域のオーバーヘッドがある。
【０００３】
マイクロコントローラ等の小型システムでは、これらのオーバーヘッドを低く保つことが非常に重要であり、したがって、セキュリティのレベルと性能との間のある妥協点を定めることが必要になり得る。
【０００４】
データおよびコードをセキュアに保つ１つの方法は、Trustzoneアーキテクチャを有する、英国CambridgeのＡＲＭ（登録商標）によって提供され、該アーキテクチャでは、セキュア状態および非セキュア状態（セキュアドメインおよび非セキュアドメインとも称される）があり、それらの状態間の移行のために例外命令が使用され、例外ハンドラがセキュア側のセキュリティを保護する。この手法は、高度なセキュリティを提供するが、セキュリティ状態を変更するために、ソフトウェア例外ハンドラの形態でのかなりのソフトウェアの介入が必要とされ、該ソフトウェアの介入は、システムの性能を低減させるとともに、全ての呼び出しが例外ハンドラを通してプロキシされなければならないので、セキュアソフトウェアのための外部アプリケーションプログラムインターフェースＡＰＩを開発するために必要とされる労力の量を増加させる。同様に、セキュアドメインにある間に発生し、非セキュアドメインでの処理を必要とする例外もまた、セキュア例外ハンドラを通してプロキシされる必要があり、これは、制御が非セキュア例外ハンドラに渡る前に、セキュア状態が保護されることを可能にする。
【０００５】
米国特許第７９６６４６６号および米国特許公開第２００８／０２５０２１６号は、代替のセキュアシステムを開示しているが、これは、データ保存がセキュア側および非セキュア側を有し、現在実行されているコードのこのデータ保存内の場所は、プロセッサが動作しているドメイン、したがって、アクセスが許可されたデータを決定する。
【発明の概要】
【課題を解決するための手段】
【０００６】
第１の態様から概観すると、本発明は、データ処理装置を提供し、該データ処理装置は、プログラムコードに応じてデータ処理動作を行うように構成される処理回路であって、例外処理を制御するための例外制御回路を備える処理回路と、データを記憶するように構成されるデータ保存であって、セキュア領域および低セキュア領域を備える複数の領域を備え、セキュア領域は、セキュアドメインで動作するときには処理回路によってアクセスすることができ、低セキュアドメインで動作するときには処理回路によってアクセスすることができないデータを記憶するためのものであるデータ保存と、データを記憶するように構成される複数のレジスタであって、第１サブセットのレジスタおよび第２サブセットのレジスタを含み、前記処理回路上で実行する前記プログラムコードにアクセスすることが可能であり、例外に応じて、前記例外が処理されたときに当該レジスタからのデータの後からの復元を可能にするために、当該レジスタからのそのデータの状態保存が要求される複数のレジスタと、を備え、処理回路によって行われるバックグラウンド処理による初期例外に応じて、例外制御回路は、例外に対応する例外処理ルーチンを行うために処理回路を起動させる前に、第１サブセットのレジスタから前記データ保存へのデータの状態保存を行うように構成され、例外処理ルーチンは、第２サブセットのレジスタから前記データ保存へのデータの状態保存を行う責任を持ち、また、セキュアドメインで処理回路によってバックグラウンド処理が行われた場合に、セキュアドメインから低セキュアドメインへの移行を行わせる第１の例外に応じて、例外制御回路は、低セキュアドメインで例外処理ルーチンを行うために処理回路を起動させる前に、第２サブセットのレジスタから前記データ保存へのデータの追加的な状態保存を行うように構成される。
【０００７】
バックグラウンド処理中に例外が発生したときに、バックグラウンド処理は、データ値をレジスタに配置し得、よって、例外が終了したときにこれらのデータ値が保持され、復元されることを可能にするために、システムは、レジスタからデータ保存への（一般的に、データ保存に提供されるスタックへの）データの状態保存を行い得る。先に論じたように、いくつかのシステムについては、達成されるセキュリティのレベルと処理性能との間の妥協点を達成することが重要である。このことは、例外に応じて状態保存を行うときにも当てはまる。
【０００８】
性能的理由から、第１のサブセットおよび第２のサブセットのレジスタでデータの状態保存を行うことが有用であり得る。本発明によれば、第１のサブセットからのデータの状態保存は、例外処理ルーチンを起動させる前に、ハードウェアの例外制御回路によって行うことができる。対照的に、例外処理ルーチン（すなわち、ソフトウェア）は、第２サブセットのレジスタからのデータの状態保存を行う責任を持ち得る。
【０００９】
しかしながら、セキュリティの観点から、例外処理ルーチンの制御下で第２サブセットのレジスタの状態保存は、あるときには問題を含むことがあり得る。例外がセキュアドメインから低セキュアドメインへの移行を行わせた後に、セキュアドメインで行われるバックグラウンド処理が続く場合、例外処理ルーチンが、第２サブセットのレジスタに配置されるセキュアデータをセキュアドメインにある間に修正し得る。
【００１０】
このセキュリティ違反を防止するために、本発明によれば、セキュアドメインでバックグラウンド処理が行われた場合にセキュアドメインから低セキュア（本明細書では、非セキュアとも称される）ドメインへの移行を行わせる、第１の例外が発生した場合、例外制御回路は、低セキュアドメインで例外処理ルーチンを起動させる前に、第１サブセットのレジスタに加えて、第２サブセットのレジスタからのデータの追加的な状態保存を行う。例外処理ルーチンを起動させる前に、第２サブセットのレジスタの状態を保存するためのハードウェア機構を提供することによって、低セキュアドメインでのソフトウェアによるこのデータの修正を防止することができる。
【００１１】
したがって、本手法は、例外に応じて状態保存を行うときに、セキュリティと性能の間の改善されたバランスを達成することができる。本発明のハードウェア機構は、セキュア例外ハンドラを通してプロキシすることを必要とすることなく、低セキュア例外の有効な処理を可能にする。
【００１２】
第１の例外に応じて、例外制御回路は、一実施形態において、例外処理ルーチンを行うために処理回路を起動させる前に、第２のサブセットレジスタをクリアするように構成される。これは、セキュアドメインにある間には、より低セキュアドメインの例外処理ルーチンが、第２サブセットのレジスタに配置されるいかなるデータにもアクセスすることができないことを意味する。
【００１３】
さらに、一実施形態において、該第１の例外に応じて、データ処理装置は、例外制御回路が例外処理ルーチンを行うために処理回路を起動させる前に、第１サブセットのレジスタがセキュアデータを含まないことを確実にするように構成される。これを達成することができるいくつかの方法がある。例えば、ハードウェアまたはソフトウェアのいずれかは、第１サブセットのレジスタがいかなるセキュアデータも含まないように、第１サブセットのレジスタがクリアされることを確実にし得る。あるいは、第１サブセットのレジスタは、例外処理ルーチンを行うために処理回路が起動される前に、単に非セキュアデータを含むように操作することができる場合があり得、その場合、第１サブセットのレジスタをクリアすることを必要としない場合がある。
【００１４】
本出願において、「呼び出し元レジスタ」および「呼び出し先レジスタ」という用語は、それぞれ、第１サブセットのレジスタおよび第２サブセットのレジスタを示すために使用され得る。
【００１５】
例外処理ルーチンは、第２サブセットのレジスタ（呼び出し先レジスタ）からのデータの状態保存を行う責任を持つが、例外処理ルーチンが第２のサブセットからのデータの状態保存を実際に行うことが必ずしも不可欠であるというわけではない。例えば、例外制御回路が第２サブセットのレジスタの追加的な状態保存を既に行っていた場合、例外処理ルーチンは、これらのレジスタの状態保存を省略することができる。
【００１６】
あるいは、ハードウェアによって追加的な状態保存が既に実行された場合であっても、例外処理ルーチンが呼び出し先レジスタからのデータの状態保存を常時行うことがより容易であり得る。レジスタは、ハードウェアによって既にクリアされている場合があるので、例外処理ルーチンは、何らかの方法で以前に呼び出し先レジスタに保持されたいかなるセキュアデータ値へのアクセスも有さず、また、クリアしたデータ値をデータ保存の低セキュア領域に保存すること、およびその後で（例外が完了したときに）クリアしたデータ値を復元することと関連付けられるオーバーヘッドは、例外処理ルーチンが、ハードウェアが追加的な状態保存を既に行ったかどうかを検出することを可能にするための機構を提供することと関連付けられるオーバーヘッド未満であり得る。
【００１７】
第１サブセットのレジスタ（呼び出し元レジスタ）および第２のサブセットレジスタ（呼び出し先レジスタ）に関して、一実施形態では、例外ハンドラの前後に保存される必要があるレジスタの全てが第２のサブセットにあるように、第１サブセットのレジスタが、０個のレジスタを備えることが可能である。この場合、大部分の例外について、例外制御回路によっていかなる状態保存も行われず、例外処理ルーチンは、全てのレジスタを第２のサブセットに保存する責任を持つ。しかしながら、セキュアドメインから低セキュアドメインへの移行を行わせる第１の例外に応じて、追加的な状態保存は、低セキュアドメインの例外処理ルーチンによるこのデータへのアクセスを防止するために、例外制御回路を使用して、第２のサブセット（保存される必要がある全てのレジスタ）をハードウェアに保存し得る。
【００１８】
現在の例外が完了した時点で、さらなる例外を保留することが可能である。この場合、処理回路は、現在の例外の前に行われていたバックグラウンド処理に戻る前に、さらなる例外をサービスし得る。この状況は、「テールチェイニング」と称され、さらなる例外は、「テールチェイン」例外と称される。
【００１９】
追加的な状態保存を起動させる第１の例外は、処理回路がバックグラウンド処理を行っている間に発生する、初期例外であり得る。あるいは、第１の例外は、それ自体が、初期例外の後であるがバックグラウンド処理に戻る前に処理される、テールチェイン例外であり得る。
【００２０】
本出願において、「バックグラウンド処理」という用語は、より高い優先度の例外によって割り込まれた処理を示すために使用される。例外処理ルーチン自体がより高い優先度の例外（本明細書では、先取り例外と称される）によって割り込まれた場合、割り込まれた例外処理ルーチン自体が先取り例外のための「バックグラウンド処理」になり得、先取り例外は、次いで、割り込まれる前に例外処理ルーチンによって使用されているデータの状態保存を起動させ得る。
【００２１】
テールチェイニングが使用される一実施形態では、テールチェイン例外と関連して必要とされる状態保存の量を削減することが可能である。具体的には、一実施形態において、例外制御回路は、その対応する例外処理ルーチンがまだ行われている現在の例外よりも低い優先度の新しい例外に応じて、処理回路をバックグラウンド処理に戻す前に、テールチェイン例外として新しい例外の処理を制御するように構成される。さらに、例外制御回路は、該現在の例外が該セキュアドメインで実行される場合を除いて、新しい例外の処理を制御するときに、いかなるさらなる状態保存動作も行わないように構成され、該新しい例外が、該低セキュアドメインへの切り替えを示し、該バックグラウンド処理が、該セキュアドメインで行われる、そのすぐ後に、該例外制御回路は、該現在の例外のための例外処理ルーチンの完了に従って、該第２サブセットのレジスタからのデータの該追加的な状態保存を行い、また、新しい例外に対応する例外処理ルーチンを行うために処理回路を起動させる前に、該第２サブセットのレジスタがクリアされることを確実にするように構成される。先に述べたように、第１サブセットのレジスタをクリアすることは、実現例に依存して、必要である場合もあれば、必要でない場合もある。そのようなアプローチは、非セキュアのテールチェイン例外が、セキュアバックグラウンド処理における割り込みをそれ自体が行わせたセキュア例外に続くときに、データのセキュリティを維持することを可能にする。
【００２２】
さらに、テールチェイン例外を処理するときに、効率性を状態復元動作と関連させることもできる。例えば、一実施形態において、例外制御回路は、該現在の例外が該低セキュアドメインで実行される場合を除いて、新しい例外の処理を制御するときに、いかなる状態復元動作も行わないように構成され、該新しい例外が、該セキュアドメインへの切り替えを示し、該バックグラウンド処理が、該セキュアドメインで行われ、そのすぐ後に、該例外制御回路は、該現在の例外のための例外処理ルーチンの完了に従って、新しい例外に対応する例外処理ルーチンを行うために処理回路を起動させる前に、該第２サブセットのレジスタの中へのデータの状態復元動作を行うように構成される。
【００２３】
先に述べたように、現在の例外が処理されている間に発生するより高い優先度の例外は、先取り例外として処理される。現在の例外の処理においてそのような先取り例外が初期に発生した場合、具体的には、例外制御回路が、現在の例外に対して例外処理ルーチンを行うために処理回路を起動させる前に、先に述べた状態保存または追加的な状態保存動作をまだ処理している間、一実施形態では、例外制御回路の状態保存および追加的な状態保存動作が修正される可能性がある。具体的には、一実施形態において、第２サブセットのレジスタの追加的な状態保存を行っている間に、該第１の例外より高い優先度を有する先取り例外が発生し、かつ、先取り例外が、セキュアドメインから低セキュアドメインへの移行を必要としない場合、例外制御回路は、先取り例外の例外処理ルーチンを処理するために処理回路を起動させる前に、追加的な状態保存を逆転させるように構成される。
【００２４】
代替として、または加えて、現在の例外が、セキュアドメインから低セキュアドメインへの移行を行わせない場合、および現在の例外と関連付けられる例外処理ルーチンの処理が始まる前に、現在の例外よりも高い優先度を有し、かつセキュアドメインから低セキュアドメインへの移行を必要とする先取り例外が発生した場合、例外制御回路は、先取り例外の例外処理ルーチンを処理するために処理回路を起動させる前に、第２サブセットのレジスタからのデータの追加的な状態保存を追加的に行うように構成され得る。
【００２５】
例外制御回路が現在の例外に関して任意の必要とされる状態保存または追加的な状態保存を行った後、およびその現在の例外に対する例外処理ルーチンを行うために処理回路が起動された後、その例外処理ルーチンが完了する前に、先取り例外が発生した場合、一実施形態において、先取り例外の例外処理ルーチンを行うために処理回路を起動させる前に、該第１サブセットのレジスタの、または該第１サブセットのレジスタおよび該第２サブセットのレジスタの該状態保存が必要とされるかどうかを決定するときに、例外制御回路は、該バックグラウンド処理として現在の例外を扱うように構成される。
【００２６】
一実施形態において、データ保存は、セキュア領域にセキュアスタックを含み、低セキュア領域に低セキュアスタックを含む、複数のスタックを備える。そのような実施形態において、第１サブセットのレジスタからのデータの状態保存、および第２サブセットのレジスタからのデータの追加的な状態保存を行うときに、例外制御回路は、該バックグラウンド処理を行うときに処理回路が動作していたドメインのセキュリティに対応するセキュアスタックおよびより低セキュアスタックのうちの１つに、データを保存するように構成される。
【００２７】
一実施形態において、データ処理装置はさらに、該複数のレジスタのうちのどれが、現在実行しているセキュアデータを記憶するためのコードによる使用に利用可能であるのかを示す、セキュア構成値を記憶するためのセキュア構成の記憶場所を備え、セキュアドメインから低セキュアドメインへの移行を行わせる例外に応じて、例外制御回路は、該第２サブセットのレジスタ内に、該セキュア構成値によって示されるレジスタの１つ以上を含むように構成される。したがって、このことは、少なくとも第２サブセットのレジスタを形成するレジスタに関するいくらかの構成のし易さを可能にし、したがって、例外制御回路によって行われる追加的な状態保存動作をどのレジスタが受けるかについていくらかの構成のし易さを可能にする。
【００２８】
一実施形態において、データ処理装置はさらに、例外戻り値を記憶するための記憶場所を備え、該処理回路は、該バックグラウンド処理から初期例外の取得時に、該データ処理装置が動作しているドメインを示すために、該例外戻り値内のドメイン値を設定するように構成され、該例外制御回路は、該ドメイン値に依存して、該レジスタのうちのどれが状態保存または状態復元動作を受けるべきかを決定する。これは、例外制御回路が、任意の特定の状況において状態保存が必要とされるか、および／または追加的な状態保存が必要とされるか、を決定することを可能にするための単純な機構を提供する。
【００２９】
第２の態様から概観すると、本発明は、データ処理装置上でデータを処理する方法を提供し、該データ処理装置は、プログラムコードに応じてデータ処理動作を行うための処理回路であって、例外処理を制御するための例外制御回路を備える処理回路と、データを記憶するためのデータ保存であって、セキュア領域および低セキュア領域を含む複数の領域を備え、セキュア領域は、セキュアドメインで動作するときには処理回路によってアクセスすることができ、低セキュアドメインで動作するときには処理回路によってアクセスすることができないデータを記憶するためのものであるデータ保存と、データを記憶する用に構成される複数のレジスタであって、第１サブセットのレジスタおよび第２サブセットのレジスタを含み、処理回路上で実行するプログラムコードにアクセスすることが可能であり、例外に応じて、例外が処理されたときに当該レジスタからのデータの後からの復元を可能にするために、当該レジスタからのそのデータの状態保存が要求される複数のレジスタと、を備え、該方法は、処理回路によって行われるバックグラウンド処理による初期例外に応じて、例外に対応する例外処理ルーチンを行うために処理回路を起動させる前に、第１サブセットのレジスタからデータ保存へのデータの状態保存を行うために、例外制御回路を利用することであって、例外処理ルーチンは、第２サブセットのレジスタからデータ保存へのデータの状態保存を行う責任を持つように利用することと、セキュアドメインで処理回路によってバックグラウンド処理が行われた場合に、セキュアドメインからより低セキュアドメインへの移行を行わせる第１の例外に応じて、低セキュアドメインで例外処理ルーチンを行うために処理回路を起動させる前に、第２サブセットのレジスタからデータ保存へのデータの追加的な状態保存を行うために、例外制御回路を利用することと、を含む。
【００３０】
第３の態様から概観すると、本発明は、データ処理装置を提供し、該データ処理装置は、プログラムコードに応じてデータ処理動作を行うための処理手段であって、例外処理を制御するための例外制御手段を備える処理手段と、データを記憶するためのデータ保存手段であって、セキュア領域および低セキュア領域を含む複数の領域を備え、セキュア領域は、セキュアドメインで動作するときには処理手段によってアクセスすることができ、低セキュアドメインで動作するときには処理手段によってアクセスすることができないデータを記憶するためのものであるデータ保存手段と、データを記憶するように構成される複数のレジスタ手段であって、第１サブセットのレジスタ手段および第２サブセットのレジスタ手段を含み、処理手段上で実行するプログラムコードにアクセスすることが可能であり、例外に応じて、例外が処理されたときに当該レジスタ手段からのデータの後からの復元を可能にするために、当該レジスタ手段からのそのデータの状態保存が要求される複数のレジスタ手段と、を備え、処理手段によって行われるバックグラウンド処理による初期例外に応じて、例外制御手段は、例外に対応する例外処理ルーチンを行うために処理手段を起動させる前に、第１サブセットのレジスタ手段からデータ保存手段へのデータの状態保存を行い、例外処理ルーチンは、第２サブセットのレジスタ手段からデータ保存手段へのデータの状態保存を行う責任を持ち、また、セキュアドメインで処理手段によってバックグラウンド処理が行われた場合、セキュアドメインからより低セキュアドメインへの移行を行わせる第１の例外に応じて、例外制御手段は、低セキュアドメインで例外処理ルーチンを行うために処理手段を起動させる前に、第２サブセットのレジスタ手段からデータ保存手段へのデータの追加的な状態保存を行う。
【図面の簡単な説明】
【００３１】
以下、単なる例として、添付図面に示されているその実施形態を参照して、本発明をさらに説明する。
【００３２】
【図１】セキュア領域および非セキュア領域を有するデータ保存を有する、一実施形態によるデータ処理装置を示す図である。
【図２】データ処理装置の１組のレジスタが、一実施形態に従って、どのように呼び出し元レジスタおよび呼び出し先レジスタに分割され得るのかを概略的に図示する図である。
【図３Ａ】一実施形態に従って、例外制御回路によって行われるスタッキング動作およびスタッキング解除動作を概略的に図示する図である。
【図３Ｂ】一実施形態に従って、例外制御回路によって行われるスタッキング動作およびスタッキング解除動作を概略的に図示する図である。
【図４】コード実行中の種々の異なるシナリオに対する例外（この実施例では、割り込み）の取得を概略的に示す図である。
【００３３】
【図５】一実施形態に従う、初期例外を受け取り、次いでさらなる例外を受け取ったときに保存される状態を示す表である。
【図６】例示的な実施形態について、例外を取得するために必要とされるドメインの移行に依存して、例外の取得時にその状態がスタックに保存されるレジスタを示す図である。
【図７Ａ】一実施形態に従う、２つの例示的なテールチェイニングシナリオを図示する図である。
【図７Ｂ】一実施形態に従う、２つの例示的なテールチェイニングシナリオを図示する図である。
【図８Ａ】一実施形態に従う、２つのさらなるテールチェイニングシナリオを図示する図である。
【図８Ｂ】一実施形態に従う、２つのさらなるテールチェイニングシナリオを図示する図である。
【００３４】
【図９Ａ】一実施形態に従う、２つの初期先取りシナリオを図示する図である。
【図９Ｂ】一実施形態に従う、２つの初期先取りシナリオを図示する図である。
【図１０】一実施形態に従って先取り例外を処理するときに使用することができる、分解手法を概略的に図示する図である。
【図１１】一実施形態に従ってセキュリティビットを含む例外戻り値を記憶するための、リンクレジスタの使用を概略的に図示する図である。
【図１２】一実施形態に従って例外の受け取り時に行われるスタッキング動作を図示するフロー図である。
【図１３】一実施形態に従って例外の完了時に行われるスタッキング解除動作を図示するフロー図である。
【発明を実施するための形態】
【００３５】
図１は、例えばマイクロコントローラであり得る、データ処理装置１０を示す。このデータ処理装置は、命令を処理するための処理回路２０と、処理回路２０によって処理されたデータを記憶するための、さらには、処理回路２０が実行するプログラムコードを記憶するためのデータ保存３０とを備える。
【００３６】
データ保存３０は、異なるセキュリティの２つの領域、すなわち、セキュア領域３２および非セキュア領域３４（本明細書において、低セキュア領域とも称される）を有する。セキュア領域３２に記憶されるデータは、それを実行しているときに、非セキュア領域３４に記憶されるコードにアクセスできない。
【００３７】
データ処理装置１０はまた、セキュア領域３２および非セキュア領域３４へのアクセスを制御するメモリ保護ユニットＭＰＵ４０も有する。この制御は、メモリ保護ユニットを通して行われ得るが、他の実施形態では、処理装置内の回路によってより分散した様式で行われ得、該処理装置は、現在実行されているコードが記憶されている領域を監視し、また、このことに依存して、メモリの異なる領域へのアクセスを制御する。
【００３８】
この実施形態において、処理回路２０を実行しているドメインのセキュリティは、現在実行されているコードが記憶されている領域から決定される（また、現在の動作のドメインを決定するための他の手法も可能である）。したがって、セキュアデータ保存３２に記憶されるセキュアプログラムコードは、セキュアドメインで実行され、データ値を記憶するためにセキュアスタック３６を使用する。同様に、非セキュアデータ保存３４に記憶される非セキュアコードは、非セキュアドメイン（本明細書において、低セキュアドメインとも称される）で実行され、実行中に、データ値を記憶するための非セキュアスタック３８を使用する。
【００３９】
処理回路２０は、実行される命令をフェッチするためのフェッチ回路２２を有する。また、これらの命令を復号化するための復号回路２４、および該命令を実行するための実行回路２６も有する。実行される命令は、メモリ保護ユニットＭＰＵ４０を介して、フェッチ回路２２によってデータ保存３０からフェッチされる。命令およびデータは、セキュア領域および非セキュア領域へのアクセスを制御し、非セキュア側からセキュアデータを隔離するＭＰＵ４０を介して検索される。
【００４０】
この実施形態では、データ処理中に使用される汎用レジスタを有するレジスタバンク６０がある。これらの汎用レジスタは、どの命令が次に実行されるのかを示すプログラムカウンタＰＣと、スタックのどの地点に現在のスタックフレームが位置するのかを示すスタックポインタＳＰとを有する。この実施形態では、セキュア側のスタックおよび非セキュア側のスタックがあるので、セキュアスタックポインタＳＳＰおよび非セキュアスタックポインタＮＳＰがあるが、どの時点においても、実行されているプログラムは、これらのうちの１つだけしか直接見ることができない。いくつかの実施形態において、各スタックについて複数のスタックポインタがあり得るが、同じく、どの時点においても、１つだけしか見ることができないことに留意されたい。また、レジスタバンク６０には、処理回路２０によって処理されているデータ値を記憶するための汎用レジスタもある。この実施形態において、これらは、Ｒ０〜Ｒ１２の記号が付される。
【００４１】
レジスタバンク６０はまた、例外を取得したとき、または関数が呼び出されたときに戻り値を記憶するために使用され得るリンクレジスタ６５も備える。戻り値は、システムが、戻りが例外戻りであるのか、関数戻りであるのかを決定すること、および例外および関数からの戻りに対して何の処理が必要とされるのかを決定することを可能にする。異なる種類の戻り値が使用され得、該戻り値としては、例外戻りを示し、バックグラウンド処理が処理されていたドメインのセキュリティレベルの指示等の情報を含むことができる、例外戻り（EXC_RETURN）値が挙げられ、プロセッサが、例外戻りをどのように処理するのか、例えば、状態を復元するときにどのスタックにアクセスするか、およびどれくらいのレジスタをロードする必要があるのかを決定することを可能にすることができる。
【００４２】
図１はまた、浮動小数点レジスタ等の追加的な特殊目的レジスタを有する追加的なレジスタバンク６４も示す。一実施形態において、追加的なレジスタバンク６４のレジスタのうちのどれかがセキュアデータを記憶することができるのかを識別するために、ある値をセキュア構成レジスタ（ＳＣＲ）６２に設定することができ、そしてその場合、それらのレジスタは、セキュアドメインから低セキュアドメインへの移行、およびその逆の移行を制御するときに管理する必要がある、（レジスタバンク６０のレジスタとともに）１組のレジスタの一部を形成するとみなされる。
【００４３】
説明される実施形態によれば、セキュリティドメイン間を移行するために使用することができる１つの機構は、例外機構である。この機構によれば、例外の発生時に、現在のソフトウェアルーチンの実行が一時的に停止され、代わりに、実行は、例外を処理するために使用される例外処理ルーチンに分岐し、該例外処理ルーチンは、例外発生のタイプに依存する。例外処理ルーチンが実行されると、例外発生の結果として一時的に停止させた元のソフトウェアルーチンに戻すために、次いで、例外戻りが使用される。
【００４４】
例外制御回路２８は、例外の取得を制御するために提供され、これらの例外が、高セキュアドメインからより低セキュアドメインへの移行をもたらす場合、これらのレジスタに記憶されるデータが非セキュア側で利用できるようになることを回避するために、例外を取得する前に、機密データを記憶し得る１組のレジスタがクリアされる。これらのレジスタのいくつかまたは全てに記憶される状態は、例外制御回路２８の制御下で、セキュアスタック上に記憶され、よって、例外からの戻り時にその状態を復元することができる。
【００４５】
図１において、データ保存３０は、単一のセキュア領域と、単一の非セキュア領域とを含むが、本明細書で説明される手法は、２つを超える異なるセキュリティ領域を備える異なる実現例にも等しく適用することができる。
【００４６】
また、図１は、例外制御回路２８が実行ステージ２６等の処理回路２０の他の部分から分離しているように示しているが、実際には、例外制御回路２８は、例外の処理を制御するために、処理回路２０のいくつかの要素を少なくとも部分的に再使用し得る。
【００４７】
図２では、セキュアドメインから低セキュアドメインへの移行、およびその逆の移行を制御するときに管理する必要がある１組のレジスタ１００が、概略的に図示される。説明される実施形態によれば、これらのレジスタのいくつかは、呼び出し元レジスタ１１０として定義されるが、レジスタの他のものは、呼び出し先レジスタ１２０として定義される。呼び出し元レジスタは、例外処理ルーチンを実行するドメインに関係なく、例外制御回路２８が、スタック上へ状態を保存する責任を常時持つレジスタである。デフォルトで、例外処理ルーチンは、次いで、呼び出し先レジスタを状態保存する責任を持つ。具体的には、例外処理ルーチンは、次いで、例外処理ルーチンを実行しているドメインと関連付けられるスタック上へ呼び出し元レジスタの状態を保存する。さらに、例外処理ルーチンは、次いで、例外戻りを発行する前に、（一般的に、スタックからの呼び出し先レジスタを関連するレジスタに戻すようにコピーすることによって）そのような呼び出し先レジスタの状態を復元する責任を持つ。
【００４８】
しかしながら、説明される実施形態によれば、例外がセキュアドメインからより低セキュアドメインへの移行を必要とし、バックグラウンド処理がセキュアドメインで行われた状況において、例外制御回路２８は、追加的に、処理回路が例外処理ルーチンの実行への移行を行わせる前に、セキュアスタック３６のスタックフレーム内の呼び出し先レジスタを状態保存する責任を持つ。
【００４９】
先に論じたように、ＳＣＲレジスタ６２の内容は、セキュアデータを記憶するためにどのレジスタが使用され得るか、およびしたがって、どのレジスタを１組のレジスタ１００内に含める必要があるのかを定義する。一実施形態において、ＳＣＲレジスタ６２の内容は、汎用レジスタ６０に加えて、追加的な特殊目的レジスタ６４のいずれかも１組のレジスタ１００内に含めるかどうかを識別する。
【００５０】
図３Ａは、３つの異なるシナリオについて、例外の発生時およびその後のその例外完了時の例外制御回路の動作を図示する。第１のシナリオは、バックグラウンド処理がセキュアドメインにおいて行われ、例外が、セキュアドメインで例外処理ルーチンによって処理される場合であり、第２のシナリオは、バックグラウンド処理が非セキュアドメインにおいて行われ、例外が、セキュアドメインで例外処理ルーチンによって処理される場合であり、そして第３のシナリオは、バックグラウンド処理が非セキュアドメインにおいて行われ、例外が、非セキュアドメインで例外処理ルーチンによって処理される場合である。
【００５１】
これらの３つのシナリオのそれぞれにおいて、バックグラウンド処理１３０が例外によって割り込まれたときに、例外制御回路２８は、例外を処理するために必要とされる例外処理ルーチン１４０を行うために処理回路を起動させる前に、地点１３５で、呼び出し元レジスタからのデータを、バックグラウンド処理が行われているドメインと関連付けられるスタック上にスタックするように構成される。例外の完了時に、地点１５０でバックグラウンド処理を再開する前に、例外制御回路はまた、地点１４５で、以前にスタックしたデータを関連スタックから呼び出し元レジスタに戻すようにスタック解除する。
【００５２】
例外処理ルーチンは、一般的に、例外処理ルーチン中にこれらのレジスタを再使用する前に、呼び出し先レジスタからのデータをスタックし、その後で、例外処理ルーチンの終了前に、そのデータを呼び出し先レジスタに戻すようにスタック解除する責任を持つ。
【００５３】
図３Ａの実施例において、呼び出し元レジスタは、特定の実現例に依存して、例外処理ルーチンが実行される前に、ハードウェアによってクリアされる場合もあれば、そうでない場合もある。一実施形態において、３つのシナリオは、例外を取得したときにドメインの移行をもたらさないか、または非セキュアドメインからセキュアドメインへの移行だけをもたらすか、のいずれか、および一実施形態において、セキュアドメインが非セキュアデータを見ることを許可されることを想定しているので、呼び出し元レジスタの内容はクリアされない。
【００５４】
図３Ｂは、バックグラウンド処理がセキュアドメインで処理されており、例外が非セキュア領域への移行を必要とするシナリオについて、例外の発生時およびその後のその例外の完了時の例外制御回路の動作を図示する。この実施例において、バックグラウンド処理１６０が例外によって割り込まれたときに、例外処理回路は、地点１６５で、呼び出し元レジスタからのデータをセキュアスタック上にスタックするように構成され、加えて、地点１７０で、呼び出し先レジスタからのデータをセキュアスタック上にスタックするように構成される。例外制御回路はまた、次いで、例外処理ルーチン１７５を行うために処理回路を起動させる前に、呼び出し元レジスタおよび呼び出し先レジスタの内容がクリアされることを確実にする。故に、このシナリオにおいて、非セキュア例外処理ルーチンは、呼び出し元レジスタまたは呼び出し先レジスタに以前に保持されたセキュアデータへのいかなるアクセスも有しない。
【００５５】
例外処理ルーチンの完了時に、地点１９０で、バックグラウンド処理を再開する前に、例外制御回路は、次いで、地点１８０で、以前にスタックした呼び出しデータをセキュアスタックから、呼び出し先レジスタに戻すようにスタック解除し、また、地点１８５で、以前にスタックしたセキュア呼び出しデータをセキュアスタックから呼び出し元レジスタに戻すようにスタック解除する。
【００５６】
特定の一実施形態において、非セキュア例外処理ルーチンは、それでも、呼び出し先レジスタの状態を通常通り保存するように構成することができるが、このシナリオにおいて、それらの呼び出し先レジスタは空であり、故に、例外処理ルーチンは、単にクリア値を非セキュアスタックに記憶するだけであり、この値は、後で、例外戻りを発行する前に、レジスタの中へ復元する。
【００５７】
上で説明されるように、アーキテクチャにおけるデフォルト位置として、レジスタ状態の一部は、例外（例えば、割り込み）が発生し、完了したきに、ハードウェアによって自動的に保存され、復元される。そのようなアーキテクチャを、レジスタ状態全体またはセキュアドメインが使用するレジスタ状態の少なくとも全てを保存し、クリアするように拡張することによって、割り込みがセキュアから非セキュアへの移行を行わせるイベントにおいて、ハードウェアは、例外の前後にセキュリティを維持することができる。
【００５８】
上の手法を使用することにより、例外制御回路に、呼び出し元レジスタおよび呼び出し先レジスタの全てを（単に、呼び出し元保存レジスタの代わりに）スタックにプッシュさせ、次いで、非セキュア状態に切り替え、例外処理ルーチン（割り込みの例では、割り込みベクトル）にジャンプする前にそれらの値をクリアするために、自動レジスタスタッキングシステムを拡張することによって、セキュア状態を通して割り込みをプロキシするための要件を取り除くことが可能である。割り込み待ち時間をできるだけ低く保つために、セキュア状態から非セキュア状態に移行するときに、追加的なレジスタ状態だけがスタック上へプッシュされる。これは、より高い優先度の例外（いわゆる、先取り例外）が例外処理中に発生したときに、またはテールチェイニング例外を処理するときに、いくらかの複雑さをもたらす。図４は、いくつかの実施例を示す。
【００５９】
第１の実施例において、バックグラウンドプログラムコードは、セキュア状態で実行され、第１のセキュア割り込みを受け取る。レジスタ（すなわち、呼び出し元レジスタ）のサブセットは、セキュアスタックに保存され、次いで（第１のセキュア割り込みが、適切な割り込みベクトルを介してまだ処理されている間に）非セキュアドメインで処理することを必要とする第２のより高い優先度の割り込みを受け取る。それは、非セキュアドメインでの処理を必要とするので、セキュアレジスタの中のどの情報も、新しい割り込みベクトルルーチンで見ることができてはならず、したがって、全てのセキュアレジスタ（呼び出し元レジスタおよび呼び出し先レジスタの双方）をセキュアスタックに保存し、次いで、この割り込みを取得する前にクリアしなければならない。第２の割り込みが完了したときに、処理は、完了していない初期のセキュア割り込みに戻り、第２の割り込みに応じてセキュアスタックにプッシュされたレジスタは、その時点で、セキュアスタックをポップすることによって復元される。次いで、この第１のセキュア割り込みを完了することができ、そのすぐ後に、スタックにプッシュされた元のサブセットを、次いで、セキュアバックグラウンド処理を再開する前に、セキュアスタックをポップすることによって復元することができる。
【００６０】
第２の実施例において、第２の割り込みは、第１の割り込みよりも低い優先度を有し、故に、第１の割り込みは、したがって、非セキュアの第２の割り込みを取得する前に完了する。第１の割り込みが完了すると、残りのレジスタ（すなわち、呼び出し先レジスタ）がセキュアスタックにプッシュされ、非セキュア割り込みを取得する前に、全てのレジスタがクリアされる。この時点で、呼び出し元レジスタおよび呼び出し先レジスタの双方がクリアされることが重要であるが、例外制御回路は、例えば呼び出し元レジスタが既に先にクリアされている場合があるので、実際には、この段階で全てのレジスタをクリアする必要がない場合がある。非セキュア割り込みの終了時点で、セキュアスタックにプッシュされたレジスタの全てが復元される。
【００６１】
第３の実施例は、セキュア割り込みを受け取り、そのすぐ後に、非セキュアスタックへのレジスタ（呼び出し元レジスタ）の部分的な保存がある非セキュアバックグラウンドコードを示す。次いで、より高い優先度を有する第２の非セキュア割り込みを受け取った場合、セキュアレジスタ（呼び出し元および呼び出し先）の全てを、セキュアスタックにプッシュし、それを取得することができるようになる前にクリアする必要がある。非セキュア割り込みが完了したときに、全てのセキュアレジスタがスタックからポップされることが必要であり、次いで、セキュア割り込みが完了したときに、非セキュアレジスタの元のサブセットがポップされる。
【００６２】
第４の実施例は、呼び出し元保存レジスタをセキュアスタックにプッシュさせるセキュア割り込みを受け取るが、この過程が完了する前に、第２のより高い優先度の非セキュア割り込みが発生するセキュアバックグラウンドコードを示す。この第２の割り込みは、呼び出し元レジスタがスタックされた後に、残りのレジスタ（すなわち、呼び出し先レジスタ）をセキュアスタック上へプッシュさせ、結果として、全てのレジスタのプッシュが行われる。全てのレジスタは、次いで、非セキュア割り込みを取得する前にクリアされる。この割り込み完了時に、呼び出し先保存レジスタが、セキュア割り込みを取得する前に、セキュアスタックからポップされる。セキュア割り込みが完了すると、元の呼び出し元レジスタがセキュアスタックからポップされる。
【００６３】
図５は、潜在的な割り込みおよび行うことが必要である状態保存を示す表を示す。これに関して、「サブセットをプッシュする」は、呼び出し元保存レジスタのサブセットをスタック上へプッシュすることであり、「残りをプッシュする」は、呼び出し先保存レジスタのサブセットをスタック上へプッシュすることであり、また、「全てをプッシュする」は、呼び出し元レジスタ状態および呼び出し先レジスタ状態の双方をスタック上へプッシュすることである。これに関して、いくつかのレジスタが機密データを記憶するために利用できず、それが分かっている場合、これらのレジスタは、スタック上へプッシュすることが必要でない場合がある。
【００６４】
表において、「例外エントリ」の欄は、初期割り込みの例外ベクトルへの分岐の前に、初期割り込みよりも高い優先度を有するさらなる割り込みが発生した場合に（本明細書において、初期先取りシナリオと称される）、どの状態がスタック上へプッシュされるのかを識別する。「例外戻り」の欄は、初期割り込み以下の優先度を有するさらなる割り込みが発生し、故に、初期割り込みが完了するまでさらなる割り込みが取得されない場合に（本明細書において、テールチェイニングシナリオと称される）、どの状態がプッシュ、ポップ、またはクリアされるのかを識別する。表で識別されるアクションは、一般的に、例外制御回路ハードウェア２８によって行われるアクションであり、バックグラウンド処理が非セキュアドメインで行われた状況において、セキュア割り込みに続く非セキュア割り込みのテールチェイニングと関連付けられる呼び出し元レジスタをクリアするアクション（「サブセットをクリアする」）は、実際には、例外制御回路ハードウェアではなく、ソフトウェアによって行われ得る。これはまた、バックグランド処理がセキュアドメインで行われ、ソフトウェアが呼び出し元レジスタをクリアするように構成することができるが、ハードウェアが、次いで、呼び出し先レジスタをプッシュおよびクリアする状況において、セキュア割り込みに続く非セキュア割り込みのテールチェイニングと関連付けられるレジスタクリアリング（「残りをプッシュ、全てクリア」動作の一部を形成する）の少なくとも一部にも当てはまり得る。
【００６５】
図５の表の概観によって明らかなように、セキュア状態から非セキュア状態に移行するときに、非セキュア側がレジスタを利用できないようにし、したがって、通常の呼び出し元保存レジスタ状態に加えて、追加的な保存およびクリアリングが行われるように、セキュア状態を保存することができる全てのレジスタの値をレジスタから取り除く必要がある。
【００６６】
図６は、一実施形態のスタックフレームを示し、より具体的には、同じまたは低セキュア状態から割り込みを取得したときに、スタックのスタックフレーム上へ保存されるレジスタの内容（図６の左側）、および低セキュア状態に移行したときに、スタックフレーム上へ保存される内容（図６の右側）を示す。これに関して、後者の場合、セキュア状態は、低セキュア状態が利用できてはならず、レジスタは、いかなる状態も保存したままにしておくことができないので、より多くのレジスタを保存し、クリアする必要がある。
【００６７】
図６は、特定の実施形態に従って、どのレジスタが呼び出し元レジスタであるとみなされるか、およびどのレジスタが呼び出し先レジスタであるとみなされるかを識別する。しかしながら、先に論じたように、正確にどのレジスタを呼び出し元レジスタおよび呼び出し先レジスタ内に含める必要があるのかは、実施形態によって異なり得、セキュア構成レジスタ６２の値によって示すことができ、よって、必要とされる状態の保存およびレジスタのクリアリングは、この値を使用することによって決定することができる。この値は、特定の装置のためのコンパイラによって設定され得、このことは、特定の装置を異なる方法で使用することを可能にし、いくらかの柔軟性を製品に提供する。他の実施形態において、この値は、例えばシステムが起動しているときに、ソフトウェアによって設定され得る。
【００６８】
上の説明から分かるように、例外制御回路は、例外が発生したときに、レジスタ状態の呼び出し元保存セクションをスタックに自動的にプッシュおよびポップし、また必要であれば、どのスタックポインタ、したがってどのスタックが使用されるのかを変更する。これは、セキュアドメインおよび低セキュアドメインを有するシステムにおいても、割り込み待ち時間の低減、割り込みジッタの低減、例外ハンドラをアセンブラの代わりにＣで書くことができること、例外エントリに対する例外のような最適化を可能にすること、およびテールチェイニング、といった利点を提示することを可能にする。
【００６９】
図７Ａおよび７Ｂは、いくつかの特定のテールチェイニング実施例のシナリオを図示する。図７Ａの実施例において、地点２５０で、セキュアバックグラウンド処理が行われているが、地点２５５で、初期例外が発生し、セキュアドメインで例外処理ルーチンを実行することを必要とする。故に、地点２５５で、例外制御回路が呼び出し元レジスタからのデータをセキュアスタック上へスタックし、そのすぐ後に地点２６０で、例外処理ルーチンが実行される。
【００７０】
地点２５７で、さらなる低優先度の例外が発生し、故に、その例外は、地点２６５で初期例外が完了するまで保留のままである。この時点で、例外制御回路は、さらなる例外を処理するためにセキュアドメインから非セキュアドメインへの移行が必要であると決定し、故に、その時点で、呼び出し先レジスタをスタックする。それはまた、地点２７０でさらなる例外を処理するために、非セキュアドメインで必要とされる例外処理ルーチンを行うために処理回路を起動させる前に、呼び出し先レジスタがクリアされていること（呼び出し元レジスタは、例えばソフトウェアによって、以前にクリアされている）も確実にする。地点２７５でのさらなる例外の完了時に、例外制御回路は、次いで、地点２８０でバックグラウンド処理を再開する前に、呼び出し元レジスタおよび呼び出し先レジスタの全ての内容をスタック解除する。
【００７１】
図７Ｂは、類似する実施例を図示するが、この実施例において、地点３００でのバックグラウンド処理は、非セキュアドメインで行われる。地点３０５で初期例外が発生したときに、例外制御回路は、次いで地点３１０で初期例外に対する例外処理ルーチンが行われる前に、図７Ａの実施例で行ったように、呼び出し元レジスタをスタックする。よって、地点３０７で発生したさらなる低優先度の例外は、地点３１５で初期例外の処理が終了するまで保留のままである。しかしながら、この時点で、バックグラウンド処理が非セキュアで行われたので、例外制御回路は、いかなるスタッキングも行わない。図５の表を参照して先に論じたように、この段階で行われ得る随意のステップは、呼び出し元レジスタをクリアすることであるが、このステップは、代替として、例外制御回路ハードウェアの代わりにソフトウェアによって行われ得る。その後に、地点３２０で、さらなる例外に対する例外処理ルーチンが非セキュアドメインで処理される。地点３２５でのさらなる例外の完了時に、例外制御回路は、地点３３０でバックグラウンド処理に戻る前に、呼び出し元レジスタをスタック解除する。
【００７２】
一実施形態において、図７Ａの実施例は一例に過ぎず、初期例外の完了に続いて、さらなる例外がテールチェイン例外として処理されたときに、例外制御回路がいくつかの追加的なスタッキングを行わなければならず、故に、スタッキングを行うことのオーバーヘッドが最小に保たれる一方で、テールチェイン例外を処理するときに、セキュアデータのセキュリティを保つ。
【００７３】
図８Ａおよび８Ｂは、２つのさらなるテールチェイニングの実施例を図示する。図８Ａの実施例において、地点３５０で、セキュアバックグラウンド処理が行われているが、地点３５５で、初期例外が発生し、非セキュアドメインで例外処理ルーチンを実行することを必要とする。故に、地点３５５で、例外処理回路が呼び出し元レジスタおよび呼び出し先レジスタからのデータをセキュアスタック上へスタックし、その後に地点３６０で、例外処理ルーチンが実行される。
【００７４】
地点３５７で、さらなる低優先度の例外が発生し、故に、その例外は、地点３６５で初期例外が完了するまで保留のままである。この時点で、例外制御回路は、地点３７０でさらなる例外を処理するために、セキュアドメインで必要とされる例外処理ルーチンを行うために処理回路を起動させる前に、さらなる例外を処理するために非セキュアドメインからセキュアドメインへの移行が必要であると決定し、それに応じて、その時点で呼び出し先レジスタをスタック解除する。地点３７５でのさらなる例外の完了時に、例外制御回路は、次いで、地点３８０でバックグラウンド処理を再開する前に、呼び出し元レジスタの内容をスタック解除する。
【００７５】
図８Ｂは、類似する実施例を図示するが、この実施例において、地点４００でのバックグラウンド処理は、非セキュアドメインで行われる。地点４０５で初期例外が発生したときに、例外制御回路は、次いで地点４１０で初期例外に対する例外処理ルーチンが行われる前に、呼び出し元レジスタをスタックする。よって、地点４０７で発生したさらなる低優先度の例外は、地点４１５で初期例外の処理が終了するまで保留のままである。しかしながら、この時点で、例外制御回路は、いかなるスタック動作も必要とされないと決定する。その後に、地点４２０で、さらなる例外に対する例外処理ルーチンがセキュアドメインで処理される。地点４２５でのさらなる例外の完了時に、例外制御回路は、地点４３０でバックグラウンド処理に戻る前に、呼び出し元レジスタをスタック解除する。
【００７６】
一実施形態において、図８Ａの実施例は、単純なテールチェイニング状況の一例に過ぎず、初期例外の完了に続いて、さらなる例外がテールチェイン例外として処理されたときに、例外制御回路がスタッキング解除動作を行わなければならず、故に、スタッキング解除を行うことのオーバーヘッドが同様に最小に保たれる一方で、テールチェイン例外を処理するときに、セキュアデータのセキュリティを保つ。
【００７７】
図９Ａおよび９Ｂは、一実施形態に従う、２つの初期先取りシナリオを図示する。図９Ａの実施例において、地点４５０で、セキュアドメインで行われるバックグラウンド処理は、優先度レベル１を有するが、レベル１０を有し、セキュアドメインでの処理を必要とする例外を受け取った時点で、例外制御回路は、地点４６０でのセキュア例外処理ルーチンへの移行に備えて、地点４５５で、呼び出し元レジスタのスタッキングを開始する。しかしながら、呼び出し元レジスタのスタッキングの完了前に、地点４６５で、より高い優先度レベル（この実施例では、優先度レベル１２）を有するさらなる例外を受け取り、非セキュアドメインへの移行を必要とする。図９Ａの右側に示されるように、この時点で、例外制御回路のスタッキング行動は、呼び出し元レジスタおよび呼び出し先レジスタの双方をスタックする（地点４７０を参照されたい）ように修正され、その後に、地点４７５で、非セキュアドメインでさらなる例外に対する例外処理コードを実行するために、処理回路が起動される。その後に、優先度レベル１０のセキュア例外を、次いで、テールチェイン例外として処理することができる。
【００７８】
図９Ｂの実施例において、地点５００で、セキュアドメインで行われるバックグラウンド処理は、優先度レベル１を有するが、レベル１０を有し、非セキュアドメインでの処理を必要とする処理を受け取った時点で、例外制御回路は、地点５１０での非セキュア例外処理ルーチンへの移行に備えて、地点５０５で、呼び出し元レジスタおよび呼び出し先レジスタのスタッキングを開始する。しかしながら、レジスタのスタッキングの完了前に、地点５１５で、より高い優先度レベル（この実施例では、優先度レベル１２）を有するさらなる例外を受け取り、セキュアドメインへの移行を必要とする。図９Ｂの右側に示されるように、この時点で、例外制御回路のスタッキング行動は、呼び出し元レジスタだけをスタックする（地点５２０を参照されたい）ように修正され、必要であれば、これは、（例えば、影響を受けた呼び出し先レジスタに対するデータをスタック解除することによって）既に行われた任意の呼び出し先レジスタスタッキングの効果を逆にすることを伴う。その後に、地点５２５で、セキュアドメインでのさらなる例外に対する例外処理コードを実行するために、処理回路が起動される。その後に、優先度レベル１０のセキュア例外を、次いで、テールチェイン例外として処理することができる。
【００７９】
図１０は、一実施形態に従って先取り例外を処理するときに使用することができる分解手法を概略的に図示する。図９Ａおよび９Ｂを参照して先に論じた実施例とは異なり、図１０の実施例では、先取り例外が発生するまでに、現在の例外と関連付けられる任意の状態保存が既に行われ、必要な例外処理ルーチンを実行するために処理回路が起動されていると仮定される。故に、この時点で、先取り例外を取得することを可能にするために、次いで、現在の例外処理ルーチンの処理を割り込ませることが必要である。
【００８０】
図１０で示されるように、そのようなシナリオにおいて、先取り例外の種々の階層は、バックグラウンド処理とみなされるものを変えることによって分解することができる。具体的には、移行５５０、５６０で示されるように、これらは、単純な事例５６５に分解することができ、故に、第１の例外を取得したときに、バックグラウンド処理は、セキュア処理Ｓ１であり、最終的に、第１の例外が完了したときに、バックグラウンド処理は再度Ｓ１に戻る。第２の例外の場合、先取り例外を取得した時点で、バックグラウンド処理の図は、点線の円５５５によって概略的に図示されるように変更され、よって、バックグラウンド処理は、非セキュア処理Ｎ２であるとみなされ、したがって、例外制御回路は、単純な事例５７０としてその先取り例外を扱う。したがって、例外Ｓ３を取得したときに、どの状態保存および／または復元が必要とされるのかを決定する目的で、例外制御回路は、バックグラウンド処理を非セキュア処理Ｎ２であるように扱う。
【００８１】
図１１で示されるように、一実施形態において、例外制御回路が、例外が戻るときにどのスタックをそのレジスタ状態から復元するべきか、および処理回路がどのドメインを戻すべきか、を決定することができるように、リンクレジスタ５９０は、戻りアドレスではなく、特別なEXC_RETURN値に設定され得る。このEXC_RETURN値は、セキュリティビットを含み得、該セキュリティビットは、例外を取得する前にバックグラウンド処理が行われていたときに処理回路があったドメインのセキュリティレベルを処理装置に示す。プログラムカウンタが戻る実際の位置は、他のレジスタ状態とともに、このドメインのスタックに記憶される。この場合、EXC_RETURN値は、復帰アドレスがスタック上にあり、これがどのスタックであるのかを示す。
【００８２】
一実施例において、リンクレジスタ５９０は、例外処理ルーチンが実行されている時間全体にわたってEXC_RETURN値を保つ必要はなく、代わりに、開始時にこの値に設定し、次いで、直後にスタックに移動させ得る。例外が完了すると、ソフトウェアは、EXC_RETURN値によって示されるアドレスに分岐するが、ＣＰＵは、該アドレスが有効な命令アドレスではないので、特別なイベントとみなす。
【００８３】
先取り例外を取得した場合、現在の例外に対するEXC_RETURN値は、新しいEXC_RETURN値が新しい先取り例外に対するリンクレジスタに設定される前に（セキュリティビットＳは、その処理が割り込まれている現在の例外のドメインを考慮して適切に設定される）、（先に論じた手順に従って）関連するスタックに記憶され得る。
【００８４】
図１２は、一実施形態に従って例外の受け取り時に行われるスタッキング動作を示すフロー図である。ステップ６００で、例外を受け取ったかどうかが決定され、受け取った場合、過程は、ステップ６０５に進み、そこでは、処理回路が現在バックグラウンド処理を行っているかどうかが決定され、それに応じて、この例外が、そのバックグラウンド処理からの初期例外となるかどうかが決定される。この例外が、バックグラウンド処理からの初期例外であると決定された場合、過程は、ステップ６１０に進み、そこでは、例外を取得したときにセキュアから非セキュアへの移行が必要とされるかどうか（すなわち、バックグラウンド処理がセキュアドメインで行われているかどうか、および必要とされる例外処理ルーチンを非セキュアドメインで実行することが必要となるかどうか）が決定される。当てはまる場合には、ステップ６１５で、呼び出し元レジスタおよび呼び出し先レジスタは、例外制御回路２８によってセキュアスタックに保存したそれらのデータを有する。そうでない場合は、呼び出し元レジスタだけが、例外制御回路によってステップ６２０でスタックしたそれらのデータを有し、どのスタックがこのデータを保存するのかは、バックグラウンド処理が行われているドメインによって決定される。本方法は、次いで、ステップ６００に戻る。
【００８５】
ステップ６０５で、ステップ６００で受け取った例外がバックグラウンド処理からの初期例外でなかった場合、処理は、ステップ６２５に進み、そこでは、ステップ６００で受け取ったこの新しい例外が、現在処理されている既存の例外よりも高い優先度であるかどうかが決定される。そうでない場合は、新しい例外がテールチェイン例外として扱われ、ステップ６３０で、現在の例外が終了したかどうかが決定される。現在の例外が終了すると、次いでステップ６３５で、Ｓビット５９５がEXC_RETURN値内に設定されているかどうかが決定される。設定されていない場合、過程は、ステップ６４０へ進み、そこでは、いかなるさらなるスタッキングも行われず、次いで、過程は、ステップ６００に戻る。
【００８６】
しかしながら、Ｓビットが設定されている場合は、バックグラウンド処理から処理例外を取得した時点で、処理回路がセキュアドメインで動作していたことを示し、ステップ６４５で、必要とされる例外処理ルーチンが行われるために、新しい例外がセキュアから非セキュアへの移行を必要とするかどうかが決定される。設定されていない場合は、同じくステップ６４０でいかなるさらなるスタッキングも行われず、過程は、ステップ６００に戻る。しかしながら、セキュアから非セキュアへの移行が必要とされる場合、過程は、ステップ６５０に進み、そこでは、過程が、次いで、ステップ６００に戻る前に、呼び出し先レジスタ内のデータもセキュアスタック内にスタックされる。
【００８７】
ステップ６２５で、新しい例外が現在の例外よりも高い優先度を有すると決定された場合、新しい例外が先取り例外として扱われる。次いで、ステップ６５５で、現在の例外に対してスタッキングがまだ行われているかどうかが決定される。行われている場合は、ステップ６６０で、図９Ａおよび９Ｂを参照して先に論じたように、スタッキングの挙動は、新しい例外に依存して修正される。その後に、本方法は、ステップ６００に戻る。
【００８８】
ステップ６５５で、現在の例外に対してスタッキングがもう行われておらず、代わりに、処理回路が、その現在の例外に対して関連する例外処理ルーチンの実行を開始した場合、過程は、ステップ６６５に進み、そこでは、現在の例外がバックグランド処理として扱われ、次いで、過程は、ステップ６１０に戻る。故に、ステップ６６５で、図１０を参照して先に論じた分解手法が行われる。
【００８９】
図１３は、一実施形態に従って例外の完了時に行われるスタッキング解除動作を示すフロー図である。ステップ７００で、例外が完了したかどうかが決定され、完了した場合、過程は、ステップ７０５に進み、そこでは、バックグラウンド処理がセキュアドメインで行われたかどうかが決定される。先に述べたように、これは、EXC_RETURN値内に記憶されるＳビット５９５を参照して決定することができる。戻された例外が先取り例外である場合は、先に論じたように、バックグラウンド処理は、先取り例外によって割り込まれた例外処理ルーチンであるとみなされる。
【００９０】
バックグラウンド処理がセキュアドメインで行われた場合は、ステップ７１０で、現在の例外の完了の結果として、非セキュアからセキュアへの移行が必要とされるかどうかが決定される。必要とされる場合は、ステップ７１５で、呼び出し先レジスタの内容がスタック解除され、その後に、過程は、ステップ７２０に進む。ステップ７１０で、非セキュアからセキュアへの移行が必要とされないことが決定された場合、過程は、ステップ７２０に直接進む。
【００９１】
ステップ７２０で、例外の完了の結果として、バックグラウンド処理に戻ることが必要とされるかどうかが決定され、必要とされない場合、過程は、ステップ７００に戻り、次の例外が完了するのを待つ。しかしながら、ステップ７２０で、バックグラウンド処理に戻ることが必要とされると決定された場合、過程は、ステップ７２５に進み、そこでは、過程がステップ７００に戻る前に、呼び出し元レジスタの内容がスタック解除される。
【００９２】
上で説明される実施形態の手法は、例外に応じて状態保存を行うときに、セキュリティと性能との間の改善されたバランスを達成することを可能にし、例外制御回路のハードウェア機構は、例外ハンドラを通してプロキシすることを必要とすることなく、セキュア例外の効果的な処理を可能にする。
【００９３】
本出願の主題は、本発明の譲受人に譲渡された同時係属の米国特許出願第１３／３６８，４１９号および英国特許出願第１２１７５３１．１号で論じられる主題に関連し、これらの文書の双方の内容全体が参照により本明細書に組み込まれる。
【００９４】
特定の実施形態を本明細書で説明してきたが、本発明は、それに限定されるものではなく、その実施形態への多くの変更および追加が本発明の範囲内で行われる場合があることが認識されるであろう。例えば、本発明の範囲を逸脱しない範囲で、以下の従属請求項の特徴の、独立請求項の特徴との種々の組み合わせを行うことができる。
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データ処理装置であって、
プログラムコードに応じてデータ処理動作を行うように構成される処理回路であって、例外処理を制御するための例外制御回路を備える処理回路と、
データを記憶するように構成されるデータ保存であって、セキュア領域およびより低セキュア領域を備える複数の領域を備え、前記セキュア領域は、セキュアドメインで動作するときには前記処理回路によってアクセスすることができ、より低セキュアドメインで動作するときには前記処理回路によってアクセスすることができないデータを記憶するためのものであるデータ保存と、
データを記憶するように構成される複数のレジスタであって、第１サブセットのレジスタおよび第２サブセットのレジスタを含み、前記処理回路上で実行する前記プログラムコードにアクセスすることが可能であり、例外に応じて、前記例外が処理されたときに当該レジスタからのデータの後からの復元を可能にするために、当該レジスタからのそのデータの状態保存が要求される複数のレジスタと、を備え、
前記処理回路によって行われるバックグラウンド処理による初期例外に応じて、前記例外制御回路は、前記例外に対応する例外処理ルーチンを行うために前記処理回路を起動させる前に、前記第１サブセットのレジスタから前記データ保存へのデータの状態保存を行うように構成され、前記例外処理ルーチンは、前記第２サブセットのレジスタから前記データ保存へのデータの状態保存を行う責任を持ち、また、
前記セキュアドメインで前記処理回路によって前記バックグラウンド処理が行われた場合に、前記セキュアドメインから前記より低セキュアドメインへの移行を行わせる第１の例外に応じて、前記例外制御回路は、前記より低セキュアドメインで前記例外処理ルーチンを行うために前記処理回路を起動させる前に、前記第２サブセットのレジスタから前記データ保存への前記データの追加的な状態保存を行うように構成される、データ処理装置。
【請求項２】
前記第１の例外に応じて、前記例外制御回路は、前記例外処理ルーチンを行うために前記処理回路を起動させる前に、前記第２サブセットのレジスタをクリアするように構成される、請求項１に記載のデータ処理装置。
【請求項３】
前記第１の例外に応じて、前記データ処理装置は、前記例外制御回路が前記例外処理ルーチンを行うために前記処理回路を起動させる前に、前記第１サブセットのレジスタがセキュアデータを含まないことを確実にするように構成される、請求項２に記載のデータ処理装置。
【請求項４】
前記例外制御回路が、前記例外処理ルーチンを行うために前記処理回路を起動させる前に、前記追加的な状態保存を行った場合、前記例外処理ルーチンは、前記第２サブセットのレジスタの前記状態保存を行わない、先行する請求項のいずれか１つに記載のデータ処理装置。
【請求項５】
前記例外制御回路が、前記例外処理ルーチンを行うために前記処理回路を起動させる前に、前記追加的な状態保存を行った場合、前記例外処理ルーチンは、前記第２サブセットのレジスタの状態保存も行う、請求項１〜３のいずれか１つに記載のデータ処理装置。
【請求項６】
前記第１の例外は、前記バックグラウンド処理中に発生する前記初期例外を含む、先行する請求項のいずれか１つに記載のデータ処理装置。
【請求項７】
前記第１の例外は、前記初期例外が処理された後、かつ前記初期例外の前に行われている前記バックグラウンド処理に戻る前に処理されるテールチェイン例外を含む、請求項１〜５のいずれか１つに記載のデータ処理装置。
【請求項８】
前記初期例外が処理されたとき、かつ前記処理回路が前記初期例外の前に行われている前記バックグラウンド処理に戻る前に保留中であるさらなる例外に応じて、前記例外制御回路は、前記処理回路を前記バックグラウンド処理に戻す前に、テールチェイン例外として前記さらなる例外の処理を制御するように構成される、先行する請求項のいずれか１つに記載のデータ処理装置。
【請求項９】
前記例外制御回路は、その対応する例外処理ルーチンがまだ行われている現在の例外よりも低い優先度の新しい例外に応じて、前記処理回路を前記バックグラウンド処理に戻す前に、テールチェイン例外として前記新しい例外の処理を制御するように構成され、
前記例外制御回路は、前記現在の例外が前記セキュアドメインで実行される場合を除いて、前記新しい例外の処理を制御するときに、いかなるさらなる状態保存動作も行わないように構成され、前記新しい例外が、前記低セキュアドメインへの切り替えを示し、前記バックグラウンド処理が、前記セキュアドメインで行われ、そのすぐ後に、前記例外制御回路は、前記現在の例外のための前記例外処理ルーチンの完了に従って、前記第２サブセットのレジスタからの前記データの前記追加的な状態保存を行い、また、前記新しい例外に対応する前記例外処理ルーチンを行うために前記処理回路を起動させる前に、前記第２サブセットのレジスタがクリアされることを確実にするように構成される、先行する請求項のいずれか１つに記載のデータ処理装置。
【請求項１０】
前記例外制御回路は、その対応する例外処理ルーチンがまだ行われている現在の例外よりも低い優先度の新しい例外に応じて、前記処理回路を前記バックグラウンド処理に戻す前に、テールチェイン例外として前記新しい例外の処理を制御するように構成され、
前記例外制御回路は、前記現在の例外が前記低セキュアドメインで実行される場合を除いて、前記新しい例外の処理を制御するときに、いかなる状態復元動作も行わないように構成され、前記新しい例外が、前記セキュアドメインへの切り替えを示し、前記バックグラウンド処理が、前記セキュアドメインで行われ、そのすぐ後に、前記例外制御回路は、前記現在の例外のための前記例外処理ルーチンの完了に従って、前記新しい例外に対応する前記例外処理ルーチンを行うために前記処理回路を起動させる前に、前記第２サブセットのレジスタの中への前記データの状態復元動作を行うように構成される、先行する請求項のいずれか１つに記載のデータ処理装置。
【請求項１１】
前記第２サブセットのレジスタの前記追加的な状態保存を行っている間に、前記第１の例外よりも高い優先度を有する先取り例外が発生し、かつ、前記先取り例外が、前記セキュアドメインから前記低セキュアドメインへの移行を必要としない場合、前記例外制御回路は、前記先取り例外の前記例外処理ルーチンを処理するために前記処理回路を起動させる前に、前記追加的な状態保存を逆転させるように構成される、先行する請求項のいずれか１つに記載のデータ処理装置。
【請求項１２】
現在の例外が、前記セキュアドメインから前記低セキュアドメインへの移行を行わせない場合、および前記現在の例外と関連付けられる前記例外処理ルーチンの処理を開始する前に、前記現在の例外よりも高い優先度を有し、かつ前記セキュアドメインから前記低セキュアドメインへの移行を必要とする先取り例外が発生した場合、前記例外制御回路は、前記先取り例外の前記例外処理ルーチンを処理するために前記処理回路を起動させる前に、前記第２サブセットのレジスタからの前記データの前記追加的な状態保存を追加的に行うように構成される、先行する請求項のいずれか１つに記載のデータ処理装置。
【請求項１３】
前記例外処理回路が現在の例外に対応する前記例外処理ルーチンを行うために前記処理回路を起動させた後で、その例外処理ルーチンが完了する前に、先取り例外が発生した場合、前記先取り例外の前記例外処理ルーチンを行うために前記処理回路を起動させる前に、前記第１サブセットのレジスタの、または前記第１サブセットのレジスタおよび前記第２サブセットのレジスタの前記状態保存が必要とされるかどうかを決定するときに、前記例外制御回路は、前記バックグラウンド処理として前記現在の例外を扱うように構成される、先行する請求項のいずれか１つに記載のデータ処理装置。
【請求項１４】
前記データ保存は、前記セキュア領域にセキュアスタックを含み、前記より低セキュア領域により低セキュアスタックを含む複数のスタックを備える、先行する請求項のいずれか１つに記載のデータ処理装置。
【請求項１５】
前記第１サブセットのレジスタからのデータの前記状態保存、および前記第２サブセットのレジスタからのデータの前記追加的な状態保存において、前記例外制御回路は、前記バックグラウンド処理を行うときに前記処理回路が動作していた前記ドメインの前記セキュリティに対応する前記セキュアスタックおよび前記より低セキュアスタックのうちの１つに、前記データを保存するように構成される、請求項１４に記載のデータ処理装置。
【請求項１６】
前記複数のレジスタのうちのどれが、現在実行しているセキュアデータを記憶するためのコードによる使用に利用可能であるのかを示すセキュア構成値を記憶するためのセキュア構成の記憶場所をさらに備え、前記セキュアドメインから前記低セキュアドメインへの移行を行わせる例外に応じて、前記例外制御回路は、前記第２サブセットのレジスタ内に、前記セキュア構成値によって示される前記レジスタの１つ以上を含むように構成される、先行する請求項のいずれか１つに記載のデータ処理装置。
【請求項１７】
例外戻り値を記憶するための記憶場所をさらに備え、前記処理回路は、前記バックグラウンド処理からの初期例外の取得時に、前記データ処理装置が動作している前記ドメインを示すために、前記例外戻り値内のドメイン値を設定するように構成され、前記例外制御回路は、前記ドメイン値に依存して、前記レジスタのうちのどれが状態保存または状態復元動作を受けるべきかを決定する、先行する請求項のいずれか１つに記載のデータ処理装置。
【請求項１８】
データ処理装置上でデータを処理する方法であって、前記データ処理装置は、プログラムコードに応じてデータ処理動作を行うための処理回路であって、例外処理を制御するための例外制御回路を備える前記処理回路と、データを記憶するためのデータ保存であって、セキュア領域および低セキュア領域を含む複数の領域を備え、前記セキュア領域は、セキュアドメインで動作するときには前記処理回路によってアクセスすることができ、より低セキュアドメインで動作するときには前記処理回路によってアクセスすることができないデータを記憶するためのものであるデータ保存と、データを記憶するように構成される複数のレジスタであって、第１サブセットのレジスタおよび第２サブセットのレジスタを含み、前記処理回路上で実行する前記プログラムコードにアクセスすることが可能であり、例外に応じて、前記例外が処理されたときに当該レジスタからのデータの後からの復元を可能にするために、当該レジスタからのそのデータの状態保存が要求される複数のレジスタと、を備え、前記方法は、
前記処理回路によって行われるバックグラウンド処理による初期例外に応じて、前記例外に対応する例外処理ルーチンを行うために前記処理回路を起動させる前に、前記第１サブセットのレジスタから前記データ保存へのデータの状態保存を行うために、前記例外制御回路を利用することであって、前記例外処理ルーチンは、前記第２サブセットのレジスタから前記データ保存へのデータの状態保存を行う責任を持つように利用することと、
前記セキュアドメインで前記処理回路によって前記バックグラウンド処理が行われた場合に、前記セキュアドメインから前記より低セキュアドメインへの移行を行わせる第１の例外に応じて、前記より低セキュアドメインで前記例外処理ルーチンを行うために前記処理回路を起動させる前に、前記第２サブセットのレジスタから前記データ保存への前記データの追加的な状態保存を行うために、前記例外制御回路を利用することと、
を含む、方法。
【請求項１９】
データ処理装置であって、
プログラムコードに応じてデータ処理動作を行うための処理手段であって、例外処理を制御するための例外制御手段を備える処理手段と、
データを記憶するためのデータ保存手段であって、セキュア領域および低セキュア領域を含む複数の領域を備え、前記セキュア領域は、セキュアドメインで動作するときには前記処理手段によってアクセスすることができ、低セキュアドメインで動作するときには前記処理手段によってアクセスすることができないデータを記憶するためのものであるデータ保存手段と、
データを記憶するように構成される複数のレジスタ手段であって、第１サブセットのレジスタ手段および第２サブセットのレジスタ手段を含み、前記処理手段上で実行する前記プログラムコードにアクセスすることが可能であり、例外に応じて、前記例外が処理されたときに当該レジスタ手段からのデータの後からの復元を可能にするために、当該レジスタ手段からのそのデータの状態保存が要求される複数のレジスタ手段と、を備え、
前記処理手段によって行われるバックグラウンド処理による初期例外に応じて、前記例外制御手段は、前記例外に対応する例外処理ルーチンを行うために前記処理手段を起動させる前に、前記第１サブセットのレジスタ手段から前記データ保存手段へのデータの状態保存を行い、前記例外処理ルーチンは、前記第２サブセットのレジスタ手段から前記データ保存手段へのデータの状態保存を行う責任を持ち、また、
前記セキュアドメインで前記処理手段によって前記バックグラウンド処理が行われた場合に、前記セキュアドメインから前記低セキュアドメインへの移行を行わせる第１の例外に応じて、前記例外制御手段は、前記低セキュアドメインで前記例外処理ルーチンを行うために前記処理手段を起動させる前に、前記第２サブセットのレジスタ手段から前記データ保存手段への前記データの追加的な状態保存を行う、データ処理装置。
【国際調査報告】
2015506525.tif 000020
2015506525.tif 000021