IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ アーム・リミテッドの特許一覧

<>
  • 特許-例外を処理するための装置及び方法 図1
  • 特許-例外を処理するための装置及び方法 図2
  • 特許-例外を処理するための装置及び方法 図3A
  • 特許-例外を処理するための装置及び方法 図3B
  • 特許-例外を処理するための装置及び方法 図3C
  • 特許-例外を処理するための装置及び方法 図4
  • 特許-例外を処理するための装置及び方法 図5
  • 特許-例外を処理するための装置及び方法 図6
  • 特許-例外を処理するための装置及び方法 図7
  • 特許-例外を処理するための装置及び方法 図8
  • 特許-例外を処理するための装置及び方法 図9A
  • 特許-例外を処理するための装置及び方法 図9B
  • 特許-例外を処理するための装置及び方法 図9C
  • 特許-例外を処理するための装置及び方法 図10
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-10-22
(45)【発行日】2024-10-30
(54)【発明の名称】例外を処理するための装置及び方法
(51)【国際特許分類】
   G06F 21/71 20130101AFI20241023BHJP
   G06F 21/52 20130101ALI20241023BHJP
   G06F 9/48 20060101ALI20241023BHJP
【FI】
G06F21/71
G06F21/52
G06F9/48 350A
【請求項の数】 24
(21)【出願番号】P 2022532806
(86)(22)【出願日】2020-11-03
(65)【公表番号】
(43)【公表日】2023-03-23
(86)【国際出願番号】 GB2020052781
(87)【国際公開番号】W WO2021116652
(87)【国際公開日】2021-06-17
【審査請求日】2023-10-27
(31)【優先権主張番号】1918214.6
(32)【優先日】2019-12-11
(33)【優先権主張国・地域又は機関】GB
(73)【特許権者】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】グロカット、トーマス クリストファー
【審査官】石坂 知樹
(56)【参考文献】
【文献】特表2015-506525(JP,A)
【文献】特表2017-505492(JP,A)
【文献】特開2004-171564(JP,A)
【文献】米国特許出願公開第2013/0212700(US,A1)
【文献】米国特許出願公開第2004/0139346(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 21/71
G06F 21/52
G06F 9/48
(57)【特許請求の範囲】
【請求項1】
対応する例外に応答して実行される複数の例外処理ルーチンを含むプログラムコードを実行するために、少なくとも1つのセキュリティドメインにおいて動作可能である処理回路と、
前記プログラムコードを実行するときに前記処理回路によってアクセスされるデータを記憶するための複数のレジスタであって、前記レジスタが、レジスタの第1のサブセットと、前記第1のサブセットと重複しないレジスタの第2のサブセットと含む、複数のレジスタと、
バックグラウンド処理からの所与の例外の発生に応答して、前記所与の例外に対応する所与の例外処理ルーチンを実行するために前記処理回路をトリガする前に前記複数のレジスタからのデータを保存するための状態保存動作をトリガするための例外制御回路と、
前記複数の例外処理ルーチンのうちの例外処理ルーチンをカテゴリー化するために使用される構成情報を記憶するための構成ストレージと
を備える装置であって、
前記例外制御回路は、前記所与の例外処理ルーチンが、前記所与の例外処理ルーチンが実行される前記セキュリティドメイン内で第1のカテゴリー又は第2のカテゴリーにあるかを、前記構成情報を参照して判定するように配置されており、前記例外制御回路は、前記状態保存動作をトリガするときに、前記所与の例外処理ルーチンが前記第1のカテゴリーにあるときにレジスタの前記第1のサブセットからの前記データを保存することをトリガし、前記所与の例外処理ルーチンが前記第2のカテゴリーにあるときにレジスタの前記第1のサブセット及びレジスタの前記第2のサブセットの両方からの前記データを保存することをトリガするように配置されている、装置。
【請求項2】
少なくとも前記所与の例外処理ルーチンが前記第2のカテゴリーにあるときに、前記例外制御回路は、前記所与の例外処理ルーチンを実行するために前記処理回路をトリガする前に、そのデータが前記状態保存動作中に保存されている前記レジスタのクリアをトリガするように更に配置されている、
請求項1に記載の装置。
【請求項3】
前記第1のカテゴリーは、信頼された例外処理ルーチンを指示し、前記第2のカテゴリーは、信頼されないとして扱われる例外処理ルーチンを指示する、請求項1又は2に記載の装置。
【請求項4】
前記処理回路は、非特権状態及び特権状態で動作可能であり、前記処理回路は、前記非特権状態にある間に、信頼されない前記例外処理ルーチンの少なくとも本体を実行するように動作可能である、請求項3に記載の装置。
【請求項5】
前記構成ストレージは、1つ以上の例外処理ルーチンについて、構成情報の対応する項目を記憶するように配置されている、請求項1~4のいずれか一項に記載の装置。
【請求項6】
構成情報の前記項目は、前記対応する例外処理ルーチンが信頼されていることを指示するために第1の値にセットされ、前記対応する例外処理ルーチンが信頼されないとして扱われることを指示するために第2の値にセットされる、請求項5に記載の装置。
【請求項7】
前記構成ストレージは、閾値優先度を識別するように配置されており、
例外のそれぞれは、関連付けられた優先度を有し、
前記例外制御回路は、前記所与の例外の前記関連付けられた優先度から導出された値と前記閾値優先度から導出された値との比較に依存して、前記所与の例外処理ルーチンが前記第1のカテゴリー又は前記第2のカテゴリーにあるかを判定するように配置されている、
請求項1~4のいずれか一項に記載の装置。
【請求項8】
前記例外制御回路は、前記例外の前記関連付けられた優先度が前記閾値優先度未満であるときに、前記所与の例外処理ルーチンが前記第2のカテゴリーにあると判定するように配置されている、請求項7に記載の装置。
【請求項9】
前記例外制御回路は、レジスタの前記第2のサブセットからの前記データが保存されたかどうかを識別するために、ステータスフラグをセットするように配置されている、請求項1~8のいずれか一項に記載の装置。
【請求項10】
前記例外制御回路は、レジスタの前記第2のサブセット内のデータが復元される必要があるかどうかを判定するために、例外復帰の際に前記ステータスフラグを参照するように配置されている、
請求項9に記載の装置。
【請求項11】
前記例外制御回路は、前記状態保存動作をトリガするときに、前記データをスタックデータ構造に保存させるように配置されている、請求項1~10のいずれか一項に記載の装置。
【請求項12】
前記所与の例外処理ルーチンが実行された後に及び前記バックグラウンド処理に復帰する前に実行される更なる例外処理ルーチンに対応するテールチェーニングされた例外に応答して、前記例外制御回路は、前記更なる例外処理ルーチンが前記第1のカテゴリー又は前記第2のカテゴリーにあるかを、前記構成情報を参照して判定するように配置されており、
前記例外制御回路が、前記更なる例外処理ルーチンが前記第2のカテゴリーにありレジスタの前記第2のサブセットからの前記データがまだ保存されていないと判定したときに、前記例外制御回路は、前記更なる例外処理ルーチンを実行するために前記処理回路をトリガする前にレジスタの前記第2のサブセットからの前記データを保存することをトリガするように配置されている、
請求項1~11のいずれか一項に記載の装置。
【請求項13】
前記例外制御回路は、前記テールチェーニングされた例外のための前記更なる例外処理ルーチンを実行するために前記処理回路をトリガする前に、そのデータが保存されている前記レジスタのクリアをトリガするように更に配置されている、請求項12に記載の装置。
【請求項14】
前記例外制御回路は、前記ステータスフラグを参照するように更に配置されており、これにより、前記例外制御回路が、前記テールチェーニングされた例外のための前記更なる例外処理ルーチンが前記第2のカテゴリーにあると判定したときに、前記例外制御回路は、前記ステータスフラグが、レジスタの前記第2のサブセットからの前記データが既に保存されていることを指示するときに、当該データを保存することをトリガすることをスキップするように配置されている、請求項9に従属するときの請求項12又は13に記載の装置。
【請求項15】
前記バックグラウンド処理は、例外処理ルーチン以外のプログラムコードの実行を含み、前記所与の例外は、初期例外である、請求項1~14のいずれか一項に記載の装置。
【請求項16】
前記バックグラウンド処理は、現在の例外処理ルーチンの実行を含み、前記所与の例外は、前記現在の例外処理ルーチンに対応する前記例外よりも高い優先度のプリエンプティブな例外である、請求項1~14のいずれか一項に記載の装置。
【請求項17】
前記処理回路は、セキュアドメイン及び低セキュアドメインを少なくとも含む複数のセキュリティドメインのうちの1つにおいて前記プログラムコードを実行するように配置されており、
前記例外制御回路は、前記バックグラウンド処理から前記所与の例外処理ルーチンの実行に移行するときにセキュリティドメインにおける変更が発生するかどうかとは独立して、前記所与の例外処理ルーチンが前記第1のカテゴリー又は前記第2のカテゴリーにあるかを、前記構成情報を参照して判定するように配置されている、
請求項1~16のいずれか一項に記載の装置。
【請求項18】
前記構成ストレージは、セキュリティドメインのそれぞれについて、当該セキュリティドメインに関連付けられた前記複数の例外処理ルーチンをカテゴリー化するために使用される構成情報を記憶するように配置されており、
前記例外制御回路は、前記所与の例外処理ルーチンが実行される前記セキュリティドメインについて提供された前記構成情報を参照して、前記所与の例外処理ルーチンが前記第1のカテゴリー又は前記第2のカテゴリーにあるかを判定するように配置されている、
請求項17に記載の装置。
【請求項19】
所与のセキュリティドメイン内で、前記処理回路は、非特権状態及び特権状態を含む複数の状態のうちの1つでデータ処理を実施するように配置されている、請求項17又は18に記載の装置。
【請求項20】
前記例外制御回路は、前記バックグラウンド処理が前記セキュアドメインにおいて前記処理回路によって実施された状況において、前記セキュアドメインから前記低セキュアドメインへの移行を引き起こす最初の例外である例外を識別することに応答して、当該識別された例外に対応する例外処理ルーチンを実行するために前記処理回路をトリガする前にレジスタの前記第2のサブセットからの前記データを保存することをトリガするように更に配置されている、
請求項17~19のいずれか一項に記載の装置。
【請求項21】
前記例外制御回路は、前記ステータスフラグを参照するように更に配置されており、これにより、前記識別された例外に応答して、前記例外制御回路は、前記ステータスフラグが、レジスタの前記第2のサブセットからの前記データが既に保存されていることを指示するときに、当該データを保存することをトリガすることをスキップするように配置されている、請求項9に従属するときの請求項20に記載の装置。
【請求項22】
装置内での例外を処理する方法であって、
少なくとも1つのセキュリティドメインにおいて動作可能である処理回路により、対応する例外に応答して実行される複数の例外処理ルーチンを含むプログラムコードを実行することと、
前記プログラムコードを実行するときに前記処理回路によってアクセスされるデータを複数のレジスタに記憶することであって、前記レジスタは、レジスタの第1のサブセットと、前記第1のサブセットと重複しないレジスタの第2のサブセットと含む、記憶することと、
バックグラウンド処理からの所与の例外の発生に応答して、前記所与の例外に対応する所与の例外処理ルーチンを実行するために前記処理回路をトリガする前に前記複数のレジスタからのデータを保存するための状態保存動作をトリガするために、例外制御回路を用いることと、
前記複数の例外処理ルーチンのうちの例外処理ルーチンをカテゴリー化するために使用される構成情報を記憶することと、
前記所与の例外処理ルーチンが、前記所与の例外処理ルーチンが実行される前記セキュリティドメイン内で第1のカテゴリー又は第2のカテゴリーにあるかを、前記構成情報を参照して判定することと、
前記例外制御回路に、前記状態保存動作をトリガするときに、前記所与の例外処理ルーチンが前記第1のカテゴリーにあるときにレジスタの前記第1のサブセットからの前記データを保存することをトリガさせ、前記所与の例外処理ルーチンが前記第2のカテゴリーにあるときにレジスタの前記第1のサブセット及びレジスタの前記第2のサブセットの両方からの前記データを保存することをトリガさせることと
を含む方法。
【請求項23】
対応する例外に応答して実行される複数の例外処理ルーチンを含むプログラムコードを実行するために、少なくとも1つのセキュリティドメインにおいて動作可能である処理プログラムロジックと、
前記プログラムコードを実行するときに前記処理プログラムロジックによってアクセスされるデータを記憶するための複数のレジスタデータ構造を維持するためのデータ構造エミュレーティングプログラムロジックであって、前記レジスタデータ構造は、データ構造の第1のサブセットと、前記第1のサブセットと重複しないデータ構造の第2のサブセットとを含む、データ構造エミュレーティングプログラムロジックと、
バックグラウンド処理からの所与の例外の発生に応答して、前記所与の例外に対応する所与の例外処理ルーチンを実行するために前記処理プログラムロジックをトリガする前に前記複数のレジスタデータ構造からのデータを保存するための状態保存動作をトリガするための例外制御プログラムロジックと
を含む、命令実行環境を提供するようにホストデータ処理装置を制御するためのコンピュータプログラムであって、
前記データ構造エミュレーティングプログラムロジックは、前記複数の例外処理ルーチンのうちの例外処理ルーチンをカテゴリー化するために使用される構成情報を記憶するための構成データ構造を維持するように更に配置されており、
前記例外制御プログラムロジックは、前記所与の例外処理ルーチンが、前記所与の例外処理ルーチンが実行される前記セキュリティドメイン内で第1のカテゴリー又は第2のカテゴリーにあるかを、前記構成情報を参照して判定するように配置されており、前記データ構造エミュレーティングプログラムロジックは、前記状態保存動作をトリガするときに、前記所与の例外処理ルーチンが前記第1のカテゴリーにあるときにデータ構造の前記第1のサブセットからの前記データを保存することをトリガし、前記所与の例外処理ルーチンが前記第2のカテゴリーにあるときにデータ構造の前記第1のサブセット及びデータ構造の前記第2のサブセットの両方からの前記データを保存することをトリガするように配置されている、コンピュータプログラム。
【請求項24】
請求項23に記載のコンピュータプログラムを記憶するコンピュータ可読媒体。

【発明の詳細な説明】
【背景技術】
【0001】
本技法は、例外を処理するための装置及び方法に関する。
【0002】
プロセッサがプログラムコードを実行しているときに、プロセッサは、典型的には、プログラムコードを実行するときにプロセッサによって使用されるデータを記憶するために使用される複数のレジスタへのアクセスを有する。バックグラウンド処理からの例外を取る際に、ハードウェアでの例外制御回路を設けることが知られており、例外制御回路は、例外を処理するための例外処理ルーチンを実行するためにプロセッサをトリガする前に、レジスタの第1のサブセットからのデータの状態保存を実施するように配置されている(arranged to)。このような手法を取ることによって、例外処理ルーチンは、レジスタの第1のサブセット内のデータの状態保存を実施する必要なしに、これらのレジスタを使用することができ、例外処理ルーチンが、第1のサブセット内にない任意の追加のレジスタと相互作用する必要がある場合に、これらのレジスタについて状態保存を実施する必要がある。
【0003】
例外を取るときに、典型的には、例外処理ルーチンは、バックグラウンドコードと同じ又はより高レベルの特権で実行される場合があり、したがって、第1のサブセット外のレジスタのコンテンツ(すなわち、例外制御回路ハードウェアによる状態保存を受けていないレジスタ内のデータ)が例外処理ルーチンに可視であることが可能であることは、問題でないと考えられていた。しかしながら、近代のシステムにおいて、例えば、信頼されない例外処理ルーチンは、サードパーティベンダーによって提供されているため、信頼されない例外処理ルーチンの使用もサポートすることが望ましくなっている。このような場合に、信頼されない例外処理ルーチンが、信頼されない例外処理ルーチンがアクセスすべきでないデータへのアクセスを得ることを回避するための処置が取られる必要がある。しかしながら、割り込み待ち時間がまた、近代のシステムにおいて重要な問題になっており、したがって、割り込み待ち時間問題を緩和しつつ、信頼された例外処理ルーチン及び信頼されない例外処理ルーチンの両方の使用をサポートするシステムを提供することが望ましい。
【発明の概要】
【0004】
第1の例示的な配置(arrangement)では、対応する例外に応答して実行される複数の例外処理ルーチンを含むプログラムコードを実行するために、少なくとも1つのセキュリティドメインにおいて動作可能である処理回路と、プログラムコードを実行するときに処理回路によってアクセスされるデータを記憶するための複数のレジスタであって、レジスタが、レジスタの第1のサブセットと、第1のサブセットと重複しないレジスタの第2のサブセットと含む、複数のレジスタと、バックグラウンド処理からの所与の例外の発生に応答して、所与の例外に対応する所与の例外処理ルーチンを実行するために処理回路をトリガする前に複数のレジスタからのデータを保存するための状態保存動作をトリガするための例外制御回路と、複数の例外処理ルーチンのうちの例外処理ルーチンをカテゴリー化するために使用される構成情報を記憶するための構成ストレージとを備える装置であって、例外制御回路は、所与の例外処理ルーチンが、所与の例外処理ルーチンが実行されるセキュリティドメイン内で第1のカテゴリー又は第2のカテゴリーにあるかを、構成情報を参照して判定するように配置されており、例外制御回路は、状態保存動作をトリガするときに、所与の例外処理ルーチンが第1のカテゴリーにあるときにレジスタの第1のサブセットからのデータを保存することをトリガし、所与の例外処理ルーチンが第2のカテゴリーにあるときにレジスタの第1のサブセット及びレジスタの第2のサブセットの両方からのデータを保存することをトリガするように配置されている、装置が提供されている。
【0005】
別の例示的な配置では、装置内での例外を処理する方法であって、少なくとも1つのセキュリティドメインにおいて動作可能である処理回路により、対応する例外に応答して実行される複数の例外処理ルーチンを含むプログラムコードを実行することと、プログラムコードを実行するときに処理回路によってアクセスされるデータを複数のレジスタに記憶することであって、レジスタは、レジスタの第1のサブセットと、第1のサブセットと重複しないレジスタの第2のサブセットと含む、記憶することと、バックグラウンド処理からの所与の例外の発生に応答して、所与の例外に対応する所与の例外処理ルーチンを実行するために処理回路をトリガする前に複数のレジスタからのデータを保存するための状態保存動作をトリガするために、例外制御回路を用いることと、複数の例外処理ルーチンのうちの例外処理ルーチンをカテゴリー化するために使用される構成情報を記憶することと、所与の例外処理ルーチンが、所与の例外処理ルーチンが実行されるセキュリティドメイン内で第1のカテゴリー又は第2のカテゴリーにあるかを、構成情報を参照して判定することと、例外制御回路に、状態保存動作をトリガするときに、所与の例外処理ルーチンが第1のカテゴリーにあるときにレジスタの第1のサブセットからのデータを保存することをトリガさせ、所与の例外処理ルーチンが第2のカテゴリーにあるときにレジスタの第1のサブセット及びレジスタの第2のサブセットの両方からのデータを保存することをトリガさせることとを含む方法が提供されている。
【0006】
より更なる例示的な配置では、対応する例外に応答して実行される複数の例外処理ルーチンを含むプログラムコードを、少なくとも1つのセキュリティドメインにおいて実行するための処理手段と、プログラムコードを実行するときに処理手段によってアクセスされるデータを記憶するための複数のレジスタ手段であって、レジスタ手段の第1のサブセットと、第1のサブセットと重複しないレジスタ手段の第2のサブセットと含む複数のレジスタ手段と、バックグラウンド処理からの所与の例外の発生に応答して、所与の例外に対応する所与の例外処理ルーチンを実行するために処理手段をトリガする前に複数のレジスタ手段からのデータを保存するための状態保存動作をトリガするための例外制御手段と、複数の例外処理ルーチンのうちの例外処理ルーチンをカテゴリー化するために使用される構成情報を記憶するための構成記憶手段とを備える装置であって、所与の例外処理ルーチンが、所与の例外処理ルーチンが実行されるセキュリティドメイン内で第1のカテゴリー又は第2のカテゴリーにあるかを、構成情報を参照して判定するための、及び、状態保存動作をトリガするときに、所与の例外処理ルーチンが第1のカテゴリーにあるときにレジスタの第1のサブセットからのデータを保存することをトリガするための、及び、所与の例外処理ルーチンが第2のカテゴリーにあるときにレジスタの第1のサブセット及びレジスタの第2のサブセットの両方からのデータを保存するための例外制御手段、装置が提供されている。
【0007】
また更なる例示的な配置では、対応する例外に応答して実行される複数の例外処理ルーチンを含むプログラムコードを実行するために、少なくとも1つのセキュリティドメインにおいて動作可能である処理プログラムロジックと、プログラムコードを実行するときに処理プログラムロジックによってアクセスされるデータを記憶するための複数のレジスタデータ構造を維持するためのデータ構造エミュレーティングプログラムロジックであって、レジスタデータ構造は、データ構造の第1のサブセットと、第1のサブセットと重複しないデータ構造の第2のサブセットとを含む、データ構造エミュレーティングプログラムロジックと、バックグラウンド処理からの所与の例外の発生に応答して、所与の例外に対応する所与の例外処理ルーチンを実行するために処理プログラムロジックをトリガする前に複数のレジスタデータ構造からのデータを保存するための状態保存動作をトリガするための例外制御プログラムロジックとを含む、命令実行環境を提供するようにホストデータ処理装置を制御するためのコンピュータプログラムであって、データ構造エミュレーティングプログラムロジックは、複数の例外処理ルーチンのうちの例外処理ルーチンをカテゴリー化するために使用される構成情報を記憶するための構成データ構造を維持するように更に配置されており、例外制御プログラムロジックは、所与の例外処理ルーチンが、所与の例外処理ルーチンが実行されるセキュリティドメイン内で第1のカテゴリー又は第2のカテゴリーにあるかを、構成情報を参照して判定するように配置されており、データ構造エミュレーティングプログラムロジックは、状態保存動作をトリガするときに、所与の例外処理ルーチンが第1のカテゴリーにあるときにデータ構造の第1のサブセットからのデータを保存することをトリガし、所与の例外処理ルーチンが第2のカテゴリーにあるときにデータ構造の第1のサブセット及びデータ構造の第2のサブセットの両方からのデータを保存することをトリガするように配置されている、コンピュータプログラムが提供されている。このようなコンピュータプログラムを記憶するためにコンピュータ可読媒体が提供され得、コンピュータ可読媒体は、非一時的又は一時的な形態であり得る。
【図面の簡単な説明】
【0008】
本技法について、添付の図面に示す本技法の例を参照して、例示としてのみ更に説明する。
図1】1つの例示的な配置による、データ処理システムの例を概略的に示す。
図2】1つの例示的な配置による、図1の処理回路の動作の異なるドメイン及びモードの例を示す。
図3A図1の構成ストレージの異なる例示的な実装を示す。
図3B図1の構成ストレージの異なる例示的な実装を示す。
図3C図1の構成ストレージの異なる例示的な実装を示す。
図4】1つの例示的な配置による、バックグラウンド処理からの例外を取る際に実施されるステップを示すフロー図である。
図5】1つの例示的な実装での、図4のステップ105を実装するために実施され得る一連のステップを示すフロー図である。
図6】1つの例示的な配置での、例外復帰処理を実装するために実施されるステップを示すフロー図である。
図7】1つの例示的な配置での、図6のステップ230を実装するために実施される一連のステップをより詳細に示すフロー図である。
図8】1つの例示的な配置での、プリエンプション処理を示すフロー図である。
図9A】具体的な例示的なシナリオについての呼び出し元レジスタ及び呼び出し先レジスタの状態保存の処理を示す。
図9B】具体的な例示的なシナリオについての呼び出し元レジスタ及び呼び出し先レジスタの状態保存の処理を示す。
図9C】具体的な例示的なシナリオについての呼び出し元レジスタ及び呼び出し先レジスタの状態保存の処理を示す。
図10】使用され得るシミュレータ例を示す。
【発明を実施するための形態】
【0009】
前述のように、近代のシステムにおいて、いくつかの例外処理ルーチンは、信頼されない例外処理ルーチンである場合があり得、例えば、信頼されない例外処理ルーチンは、サードパーティベンダーによって提供されているため、代わりに、信頼されない1つ以上の例外処理ルーチンの使用を可能にすることが望ましいことがある。このような信頼されない例外処理ルーチンに適応するために、信頼されたソフトウェアラッパーを提供することが可能であり得、このため、例外処理ルーチンへのエントリの際に、信頼されない例外処理ルーチンの本体が実行されることを可能にする前にいくつかの初期タスクを実施するために、ラッパーソフトウェアが最初に実行される。同様に、ラッパーソフトウェアは、このような例外処理ルーチンから復帰する前にいくつかの追加の動作を実施するために、実行され得る。このようなラッパーソフトウェアによって実施され得る動作の例として、ラッパーソフトウェアは、状態保存がハードウェアでの例外制御回路によって実施された前述の第1のサブセット内にない少なくともいくつかの他のレジスタの状態を保存するための役割を果たし得る。ラッパーはまた、例外処理ルーチンの本体を実行する前にレジスタをクリアすることができ、これによって、バックグラウンド処理に関連付けられたレジスタコンテンツのうちのいずれもが、信頼されない例外処理ルーチンに可視でないことを確実にする。ラッパーソフトウェアはまた、信頼されない本体の完了の後に及び例外からの復帰の前にこのようなレジスタのコンテンツを復元するために使用され得る。
【0010】
しかしながら、近代のシステムにおいて、割り込み待ち時間が重要な問題となっており、ラッパーソフトウェアによる前述のステップの実施は、割り込み待ち時間に著しく影響を与え得る。したがって、割り込み待ち時間問題を緩和しつつ、信頼された例外処理ルーチン及び信頼されない例外処理ルーチンの両方の使用をサポートするシステムを提供することが望ましい。
【0011】
本明細書に記載の技法によれば、対応する例外に応答して実行される複数の例外処理ルーチンを含むプログラムコードを実行するために、少なくとも1つのセキュリティドメインにおいて動作可能である処理回路を有する装置が提供されている。処理回路は、例えば、少なくともセキュアドメイン及び低セキュアドメインを含むいくつかの異なるセキュリティドメインのうちの1つにおいて動作可能であり得、メモリへのアクセスは、処理回路がどのセキュリティドメインにおいて動作しているかに依存して制御され得る。しかしながら、処理回路が複数のセキュリティドメインにおいて動作可能である必要がなく、本明細書に記載の一般的な技法は、単一のセキュリティドメインのみがあるシステムにおいても使用され得ることに留意されたい。
【0012】
処理回路に加えて、装置は、プログラムコードを実行するときに処理回路によってアクセスされるデータを記憶するために使用される複数のレジスタを有し、レジスタは、レジスタの第1のサブセットと、第1のサブセットと重複しないレジスタの第2のサブセットとを含むように配置されている。更に、バックグラウンド処理からの所与の例外の発生に応答して、所与の例外に対応する所与の例外処理ルーチンを実行するために処理回路をトリガする前に複数のレジスタからのデータを保存するための状態保存動作をトリガするための例外制御回路が設けられている。特に、デフォルトでは、例外制御回路は、レジスタの第1のサブセットに関して状態保存動作をトリガするが、本明細書で更に考察するように、所与の例外を処理するためにトリガされる例外処理ルーチンに依存して、例外制御回路ハードウェアはまた、レジスタの第2のサブセットに関して状態保存をトリガすることができる。
【0013】
特に、装置は、複数の例外処理ルーチンのうちの例外処理ルーチンをカテゴリー化するために使用される構成情報を記憶するための構成ストレージを更に有する。構成ストレージ内に提供されている構成情報は、全ての例外処理ルーチンをカテゴリー化するために使用されてもよく、又は代替として、例外処理ルーチンのサブセットがあってもよく、例外処理ルーチンのサブセットは、実際に常に所定のカテゴリーにあり、したがって、例外処理ルーチンのサブセットについての構成ストレージ内の構成情報は、必要とされない。
【0014】
更に、例外制御回路は、所与の例外処理ルーチンが、所与の例外処理ルーチンが実行されるセキュリティドメイン内で第1のカテゴリー又は第2のカテゴリーにあるかを、構成情報を参照して判定するように配置されている。次いで、状態保存動作をトリガするときに、例外制御回路は、所与の例外処理ルーチンが第1のカテゴリーにあるときにレジスタの第1のサブセットからのデータを保存することをトリガし、所与の例外処理ルーチンが第2のカテゴリーにあるときにレジスタの第1のサブセット及びレジスタの第2のサブセットの両方からのデータを保存することをトリガするように配置されている。データは、様々な方法で保存されてもよいが、1つの例示的な実装では、データは、メモリ内のスタックに保存され、したがって、このような保存動作は、本明細書では「スタッキングする」と称され得る。更に、レジスタ内への当該データのその後の復元は、「アンスタッキングする」と称され得る。
【0015】
このような手法は、信頼された例外処理ルーチン及び信頼されない例外処理ルーチンの両方の使用をサポートするシステムにおいて著しい性能利益を提供することができる。例えば、第1のカテゴリーは、信頼された例外処理ルーチンを指示するために使用され得、第2のカテゴリーは、信頼されないとして扱われる例外処理ルーチンを指示するために使用される。使用される構成情報の形態に依存して、いくつかの事例では、信頼された例外処理ルーチンは、第2のカテゴリーにあると識別され、したがって信頼されないとして扱われることが可能であり得る。しかしながら、これは、セキュリティリスクを引き起こさず、例外制御回路が、レジスタの第2のサブセットからのデータが実際に必要でない状況において、レジスタの第2のサブセットからのデータも保存することを単に意味する。
【0016】
信頼されない例外処理ルーチンを第2のカテゴリーにあると識別することによって、これは、例外制御回路ハードウェアが、レジスタの第1のサブセットの状態のみでなく、レジスタの第2のサブセットの状態も保存するための役割を果たすことを確実にすることができる。これは、信頼されない例外処理ルーチンに関連付けされて使用され得る前述の信頼されたラッパーソフトウェアによって必要とされるタスクを著しく低減することができ、これによって、このような信頼されない例外処理ルーチンの処理における割り込み待ち時間を著しく低減することができる。いくつかの実装では、レジスタのハードウェア状態保存は、他の例外エントリタスク、例えば、例外ハンドラのアドレスのフェッチ、及び実行される例外ハンドラの第1の命令のフェッチなどと並行して、少なくとも部分的に実施され得る。このような実装は、状態保存が例外ハンドラ自体によって行われなければならないシステムよりも、著しい割り込み待ち時間利点を有することができる。
【0017】
更に、例外制御回路ハードウェアが、第1のサブセットレジスタ及びレジスタの第2のサブセットの両方からの状態の保存を単に常にトリガしないことを確実にすることによって、これは、信頼された例外処理ルーチンに関して、性能への影響を回避する。特に、第1のカテゴリーにあるとして識別される信頼された例外処理ルーチンについては、例外制御回路は、例外処理ルーチンが信頼されていることを考慮すれば、レジスタの第1のサブセットからのデータを保存することを単にトリガし続け、したがって、保存される必要がない任意の更なるレジスタからのデータを保存することをトリガしない。したがって、このような手法は、例外制御ハードウェアが、そうでなければソフトウェアによって保存される必要がある状態を保存することを可能にすることによって、信頼されない例外処理ルーチンに関連付けられた待ち時間を低減しつつ、信頼された例外処理ルーチンの速度を維持する。
【0018】
1つの例示的な配置では、少なくとも所与の例外処理ルーチンが第2のカテゴリーにあるときに、例外制御回路は、所与の例外処理ルーチンを実行するために処理回路をトリガする前に、そのデータが状態保存動作中に保存されているレジスタのクリアをトリガするように更に配置されている。前述のように、例外処理ルーチンが第2のカテゴリーにあるとしてカテゴリー化される場合に、例外処理ルーチンは、信頼されないとして扱われ、したがって、例外制御回路は、バックグラウンド処理において存在したレジスタの状態を保存することをトリガするのみでなく、これらのレジスタのコンテンツのクリアもトリガし、このため、これらのコンテンツは、処理回路が例外処理ルーチンの実行を開始するときに、当該例外処理ルーチンに可視でないことが適切である。所望の場合に、例えば、動作を簡単にするために、例外制御回路は、保存されるレジスタのコンテンツをクリアすることを常にトリガするように配置されてもよく、したがって、例えば、例外制御回路はまた、第1のカテゴリーの例外処理ルーチンを実行するために処理回路を移行させる前にレジスタの第1のサブセットの状態を保存するときに、レジスタの第1のサブセットのコンテンツのクリアをトリガすることができる。
【0019】
処理回路が、信頼されない例外処理ルーチンを実行するように配置され得るいくつかの方法がある。しかしながら、1つの例示的な実装では、処理回路は、非特権状態及び特権状態で動作可能であり、処理回路は、非特権状態にある間に、信頼されない例外処理ルーチンの少なくとも本体を実行するように動作可能である。したがって、例えば、前述のラッパーソフトウェアは、特権状態にある間に、処理回路によって実行され得、次いで、処理回路は、信頼されない例外処理ルーチンの本体を実行するために、非特権状態に移行し得る。例外制御回路は、信頼されない例外処理ルーチンを実行するために処理回路をトリガする前にレジスタの第1のサブセット及び第2のサブセットの両方の状態を保存することをトリガするため、バックグラウンド処理が特権状態又は非特権状態にあったかに関係なく、前述の技法は、このような信頼されない例外処理ルーチンの本体が、バックグラウンド処理中にレジスタのうちのいずれかに記憶されたデータにアクセスしないことを確実にする。いくつかの実装では、バックグラウンド状態及び例外ハンドラは、異なる相互に信頼しないソフトウェアプロセスに属し得るため、非特権バックグラウンド状態を非特権例外ハンドラから保護することは、重要なセキュリティ特性であり得る。
【0020】
構成ストレージは、様々な方法で組織化され得るが、1つの例では、構成ストレージは、1つ以上の例外処理ルーチンについて、構成情報の対応する項目を記憶するように配置されている。1つの特定の例示的な実装では、例外処理ルーチンのそれぞれについて、構成情報の対応する項目が提供され得る。しかしながら、代替として、前述のように、1つ以上の特定の例外処理ルーチンのカテゴリーは、例えばフォルトハンドラ又はスーパーバイザコール(Supervisor Call、SVC)、効率的にハードウェアにより実現されてもよく(hardwired)、これらの場合に、構成情報は、例外処理ルーチンのカテゴリーを判定するために、参照される必要がないことがある。このようなフォルトハンドラ及びスーパーバイザコール例外は、オペレーティングシステムに関連付けられてもよく、したがって、第1のカテゴリーの一部分であるとして常に信頼され得、扱い可能であり得る。
【0021】
このような実装では、1つ以上の例外処理ルーチンについて、構成情報の対応する項目は、構成ストレージに記憶されている場合に、当該構成情報は、様々な形態を取り得る。しかしながら、1つの例示的な実装では、構成情報の項目は、対応する例外処理ルーチンが信頼されていることを指示するために第1の値にセットされ、対応する例外処理ルーチンが信頼されないとして扱われることを指示するために第2の値にセットされる。したがって、構成ストレージ内の構成情報の関連する項目を参照して、例外制御回路は、所与の例外処理ルーチンが第1のカテゴリー又は第2のカテゴリーにあるかを容易に判定することができ、したがって、レジスタのコンテンツに関して適切な状態保存動作を実施することができる。
【0022】
しかしながら、構成ストレージが個々の例外処理ルーチンについて構成情報の対応する項目を記憶することは要件でない。例えば、いくつかの実装では、非常に多数の例外処理ルーチンがサポートされ得、したがって、このような構成ストレージについてのサイズ要件が大きいことがある。ストレージ要件を低減しようとするために、1つの例示的な実装では、構成情報の代替形態が記憶されており、構成情報の代替形態は、任意の例外処理ルーチンについて、例外処理ルーチンが第1のカテゴリー又は第2のカテゴリーにあるかを評価するときに、参照され得る。特に、多くのシステムにおいて、信頼されない例外処理ルーチンには、本来、信頼された例外処理ルーチンよりも低い優先度が与えられていることに留意されたい。このような手法は、例えば、非特権例外処理ルーチンによるサービス妨害(Denial of Service、DoS)攻撃を防止することを支援する。したがって、このような実装では、例外に関連付けられた優先度情報は、関連付けられた例外処理ルーチンが信頼されている又は信頼されないかを推測するために、プロキシとして使用され得る。したがって、1つのこのような例示的な実装では、構成ストレージは、閾値優先度を識別するように配置されており、例外のそれぞれは、関連付けられた優先度を有する。次いで、例外制御回路は、所与の例外の関連付けられた優先度から導出された値と閾値優先度から導出された値との比較に依存して、所与の例外処理ルーチンが第1のカテゴリー又は第2のカテゴリーにあるかを判定するように配置され得る。単一の情報、すなわち閾値優先度は、記憶され得、次いで、例外のそれぞれを評価するときに使用され得るため、これは、構成ストレージに関して、著しく低減されたストレージ要件を提供する。更に、例外を処理するシステムにおいて、優先度は、これらの例外に起因して異なることが一般的であり、したがって、例外のそれぞれについての優先度情報は既に存在する。別の実装では、閾値優先度は固定され得、構成ストレージは、例外のそれぞれに関連付けられた優先度フィールドから作成されている。
【0023】
1つの例示的な配置では、例外制御回路は、例外の関連付けられた優先度が閾値優先度未満であるときに、所与の例外処理ルーチンが第2のカテゴリーにあると判定するように配置されている。実装に依存して、優先度の例外は、より高い数値の優先度に起因してより高くてもよいが、代替の実装では、優先度の例外は、より低い数値の優先度に起因してより高くてもよいことに留意されたい。したがって、例えば、このような代替の実装では、2の優先度を有する例外は、4の優先度を有する例外よりも高い優先度の割り込みと考えられ得る。
【0024】
前述のように、優先度は、例外処理ルーチンが信頼されている又は信頼されないかについての良好なプロキシとしてしばしば使用され得る。閾値優先度の設定により、信頼された例外処理ルーチンをトリガする優先度の低い例外がある状況が生じる場合に、当該例外処理ルーチンを信頼されないとして扱うことは、問題ある挙動を生じさせず、レジスタの第2のサブセットの状態が実際には必要でない状況において、当該状態が例外制御回路ハードウェアによって保存されることに起因して、当該例外処理ルーチンを信頼されないとして扱うことは、単に、性能へのわずかな影響を有する。この状況は低い優先度のハンドラについてのみ発生するため、性能へのこの小さな影響は重要ではない可能性がある。更に、信頼されない例外処理ルーチンに実際に関連付けられた高い優先度の例外がある稀な事象では、これは、当該例外処理ルーチンに関連付けられて提供される信頼されたラッパーソフトウェアが、レジスタの第2のサブセットの状態を保存し、例外処理ルーチンの信頼されない本体に移行する前にレジスタから当該状態をクリアするように配置されている配置によって対処され得る。
【0025】
1つの例示的な実装では、例外制御回路は、レジスタの第2のサブセットからのデータが保存されたかどうかを識別するために、ステータスフラグをセットするように配置されている。ステータスフラグがセットされ得るいくつかの方法がある。例えば、1つの実装では、ステータスフラグは、例外エントリの際に例外復帰アドレスを取り込むために使用されるリンクレジスタ内の追加のビットとして提供される。いくつかの実装では、アドレス空間の一部分は、確保されており、実行可能でない。したがって、アドレス空間のこのような部分内のアドレスへの分岐は、ハードウェアがバックグラウンド状態への例外復帰を実施するための要求のような特別な状態をシグナリングするために使用され得る。1つの例示的な実装では、例外へのエントリの際に、リンクレジスタ内に取り込まれた例外復帰アドレスは、確保された非実行可能アドレス空間内のアドレスを指定するダミー復帰アドレスにセットされ得、代わりに、実際の復帰アドレスは、スタックに保存され、次いで、ステータスフラグは、ダミー復帰アドレスと共にリンクレジスタ内に含まれ得る。
【0026】
したがって、例外が取られた時に、例外制御回路は、したがって、レジスタの第1のサブセットのみ又はレジスタの第1のサブセット及びレジスタの第2のサブセットの両方が状態保存動作を受けるかを決定するために、関連付けられた例外処理ルーチンをカテゴリー化し、レジスタの第2のサブセットの状態が保存されたかどうかを識別するための指示は、リンクレジスタ内に追加され得る。次いで、このステータスフラグの場所は、経時的に移動し、例えば、当該情報は、おそらくしばらく他のレジスタを介して、リンクレジスタからメモリ内のスタックに移動し得ることに留意されたい。しかしながら、ステータスフラグが保存されるたびに、当該ステータスフラグの値は、レジスタの第2のサブセットのコンテンツがスタッキング又はアンスタッキングされる必要があるかを判定するためのステップを取るときに、例外制御回路によって適時に参照され得る。
【0027】
更に、ステータスフラグは、レジスタの第2の対象からのデータが例外制御回路によって保存されたかどうかを識別することができるいくつかの方法があることに留意されたい。例えば、ステータスフラグは、当該情報を直接符号化することができる。しかしながら、代替の配置では、ステータスフラグ値は、いくつかのデフォルト状態保存規則からの逸脱があるかどうかを識別するために使用されてもよく、このため、再び、例外制御回路は、レジスタの第2のサブセット内のデータが以前の状態保存動作を受けたか否かを判定するときに、当該値を参照することができる。
【0028】
例外制御回路がステータスフラグを参照することが有用であり得るいくつかの事例がある。例えば、例外制御回路は、レジスタの第2のサブセットの状態が復元される(アンスタッキングされる)必要があるかどうかを判定するために、例外復帰の際にステータスフラグを参照するように配置され得る。したがって、バックグラウンド処理に復帰するときに、ステータスフラグが、レジスタの第2のサブセットが状態保存動作を受けたことを指示する場合に、例外制御回路は、レジスタの第1のサブセットの状態を復元することのみでなく、レジスタの第2の対象の状態を復元することもトリガするように配置されてもよい。
【0029】
レジスタ内のデータが例外制御回路による前述の状態保存動作を受けるときに、レジスタの現在のデータコンテンツが保存され得るいくつかの場所がある。しかしながら、1つの例示的な配置では、例外制御回路は、状態保存動作をトリガするときに、データをスタックデータ構造、例えば、メモリ内のスタックに保存させるように配置されている。典型的には、スタックポインタは、このようなスタック内の特定の場所、例えばスタック場所の先頭などを識別するために維持され、当該スタックポインタは、新しいデータをスタックに追加するときに、又はデータをスタックから取得するときに使用され得る。他の実装では、スタックは、スタックの先頭がスタックの末尾よりもメモリ内の低位アドレスにある降順スタックであり得る。
【0030】
バックグラウンド処理から取られた例外の処理に加えて、装置はまた、テールチェーニングされた例外を処理するように配置されており、テールチェーニングされた例外は、現在の例外処理ルーチンが既に実行中である間に、及びテールチェーニングされた例外が、現在の例外処理ルーチンによって処理されている現在の例外よりも低い優先度を有し、結果として、現在の例外処理ルーチンが終了するまで処理されない場合に、発生する例外である。しかしながら、テールチェーニングされた例外を処理するために例外を取るためにのみバックグラウンド処理に復帰するのではなく、代わりに、装置は、テールチェーニングされた例外を処理するために、現在の例外処理ルーチンの完了から更なる例外処理ルーチンの処理に直接移行するように配置されてもよい。代替として、2つの例外が、同時に発生し得、例外処理回路は、より高い優先度の例外ハンドラが終了するときに、より低い優先度の例外にテールチェーニングする前に、より高い優先度の例外の処理をトリガするように配置されてもよい。テールチェーニングされる例外がいつ保留されたかに関わらず、テールチェーニングは、バックグラウンドコードの処理に復帰する代わりに、例外ハンドラが復帰するときに、保留中の例外を入力することであるとして見なされ得る。
【0031】
したがって、所与の例外処理ルーチンが実行された後に及びバックグラウンド処理に復帰する前に実行される更なる例外処理ルーチンに対応するテールチェーニングされた例外に応答して、例外制御回路は、更なる例外処理ルーチンが第1のカテゴリー又は第2のカテゴリーにあるかを、構成情報を参照して判定するように配置され得る。次いで、例外制御回路が、更なる例外処理ルーチンが第2のカテゴリーにありレジスタの第2のサブセットからのデータがまだ保存されていないと判定したときに、例外制御回路は、更なる例外処理ルーチンを実行するために処理回路をトリガする前にレジスタの第2のサブセットからのデータを保存することをトリガするように更に配置され得る。例外制御回路がレジスタの第2のサブセットからのデータが既に保存されているかどうかを判定することができるいくつかの方法があり、例えば、例外制御回路は、前述のステータスフラグを参照することができる。
【0032】
例外制御回路がバックグラウンド処理からの例外を処理するときに配置され得る方法と同様に、例外制御回路は、テールチェーニングされた例外のための更なる例外処理ルーチンを実行するために処理回路をトリガする前に、そのデータが保存されているレジスタのクリアをトリガするように更に配置され得る。いくつかの実装では、テールチェーニングされた例外に移行する間にレジスタが保存されなかった場合でも、レジスタのクリアは、テールチェーニングのときに発生し得る。例えば、以前の例外又は例外の組み合わせへのエントリが、レジスタの第1のサブセット及び第2のサブセットの両方を保存させた場合に、レジスタを再び保存する必要がないことがある。しかしながら、このような場合に、レジスタは、クリアされる必要があり得え、このため、1つの例外ハンドラによってレジスタ内に残された値は、次の例外ハンドラにさらされない。
【0033】
前述のステータスフラグの維持によって、著しい性能改善が、レジスタの第2のサブセットの状態が既に保存されている状況における当該状態の不必要な再保存を回避することによって、テールチェーニングされた例外を処理するときに、達成され得る。特に、例外制御回路は、ステータスフラグを参照するように更に配置され得、これにより、例外制御回路が、テールチェーニングされた例外のための更なる例外処理ルーチンが第2のカテゴリーにあると判定したときに、例外制御回路は、ステータスフラグが、レジスタの第2のサブセットからのデータが既に保存されていることを指示するときに、当該データを保存することをトリガすることをスキップするように配置されている。したがって、このような手法は、非常に効率的な実装をもたらすことができる。
【0034】
バックグラウンド処理は、様々な形態を取り得、例えば、バックグラウンド処理は、例外処理ルーチン以外のプログラムコードの実行を含むことができ、このような状況において、前述の所与の例外は、初期例外である。しかしながら、代替として又は加えて、バックグラウンド処理は、現在の例外処理ルーチンの実行を含むことができ、所与の例外は、現在の例外処理ルーチンに対応する例外よりも高い優先度のプリエンプティブな例外であり得る。このようなシナリオでは、現在の例外処理ルーチンの処理は、より高い優先度の例外が処理されることを可能にするために割り込まれ、この事例では、現在の例外処理ルーチン自体は、バックグラウンド処理として扱われ、トリガされる例外処理ルーチン(すなわち、プリエンプティブな例外に関連付けられた例外処理ルーチン)のカテゴリー化の前述の機構は、現在の例外処理ルーチンに関連付けられた関連する状態を保存するために、レジスタの第1のサブセットのみ又はレジスタの第1のサブセット及びレジスタの第2のサブセットが状態保存動作を受けるかを決定するために実施される。
【0035】
1つの例示的な実装では、処理回路は、セキュアドメイン及び低セキュアドメインを少なくとも含む複数のセキュリティドメインのうちの1つにおいてプログラムコードを実行するように配置されている。次いで、例外制御回路は、バックグラウンド処理から所与の例外処理ルーチンの実行に移行するときにセキュリティドメインにおける変更が発生するかどうかとは独立して、所与の例外処理ルーチンが第1のカテゴリー又は第2のカテゴリーにあるかを、構成情報を参照して判定するように配置されている。したがって、例外処理ルーチンがカテゴリー化される方法は、セキュリティドメインにおける変更が、バックグラウンド処理から当該例外処理ルーチンに移行するときに発生するかどうかに依存しない。1つの例示的な実装では、セキュリティドメインのそれぞれについて、構成情報の異なるバンク化されたバージョンがあり、このため、所与の例外処理ルーチンを評価するときに、処理回路が当該例外処理ルーチンを実行するドメインは、構成情報に影響し得る。しかしながら、カテゴリー化全体は、バックグラウンド処理に関連付けられたセキュリティドメインとは独立し、したがって、バックグラウンド処理からの例外を取ることによるセキュリティドメインにおける変更があるかどうかとは独立する。
【0036】
前述のように、構成ストレージは、セキュリティドメインのそれぞれについて、当該セキュリティドメインに関連付けられた複数の例外処理ルーチンをカテゴリー化するために使用される構成情報を記憶するように配置され得る。いくつかの例外処理ルーチンは、複数のセキュリティドメインにおいて実行されることが可能であってもよく、いくつかの例外処理ルーチンは、特定のセキュリティドメインにおいてのみ実行可能であってもよく、したがって、構成ストレージは、このような例外処理ルーチンが実行されるセキュリティドメインについての例外処理ルーチンに関連付けたれた構成情報を維持する必要のみがある。これは、セキュリティドメインのそれぞれにおける例外処理ルーチンのそれぞれについて構成ビットを提供する必要を回避するため、別個の構成情報が例外処理ルーチンのそれぞれについて提供される実装において有用であり得る。
【0037】
しかしながら、前述の代替の実装では、構成情報は、実際には、例外処理ルーチンのそれぞれについて提供されず、代わりに、閾値優先度などの包括的な情報が提供され、このような事例では、構成ストレージは、セキュリティドメインのそれぞれについて閾値優先度を提供することができ、このため、関連する閾値優先度は、所与の例外処理ルーチンが実行されるセキュリティドメインを考慮して、参照される。
【0038】
要約すると、しかしながら、構成情報は、複数のセキュリティドメインをサポートするシステムの存在下で、構成ストレージ内に配置されており、例外制御回路は、所与の例外処理ルーチンが実行されるセキュリティドメインについて提供された構成情報を参照して、所与の例外処理ルーチンが第1のカテゴリー又は第2のカテゴリーにあるかを判定するように配置され得る。
【0039】
処理回路がプログラムコードを複数の異なるセキュリティドメインにおいて実行し得る状況において、次いで、所与のセキュリティドメイン内で、処理回路は、非特権状態及び特権状態を含む複数の状態のうちの1つでデータ処理を実施するように配置され得る。いくつかの実装では、処理回路は、例外ハンドラを実行するためのハンドラモード及びスレッドモードを含む複数のモードで動作可能であり得る。ハンドラモードでの実行は、常に特権状態にあり得、スレッドモードでの実行が特権状態又は非特権状態にあるかは、構成値に依存し得る。
【0040】
処理回路がプログラムコードを複数の異なるセキュリティドメインにおいて実行するように配置されている実装では、次いで、例外制御回路はまた、例外処理ルーチンの実行をトリガする前に、そのデータが保存される必要があるレジスタを決定するときに、追加のチェックを実施するように配置され得る。例えば、セキュアドメインのセキュリティが損なわれないことを確実とするために、次いで、構成ストレージ内の構成情報に基づいて例外処理ルーチンをカテゴリー化しようとする前述のチェックとは独立して、例外制御回路はまた、レジスタの第2のサブセット内のデータが保存される必要があるかどうかを判定するときに、セキュリティドメインにおける移行を考慮することができる。特に、例外制御回路は、バックグラウンド処理がセキュアドメインにおいて処理回路によって実施された状況において、セキュアドメインから低セキュアドメインへの移行を引き起こす最初の例外である例外を識別することに応答して、当該識別された例外に対応する例外処理ルーチンを実行するために処理回路をトリガする前にレジスタの第2のサブセットからのデータを保存すること及びレジスタをクリアすることをトリガするように更に配置され得る。このような手法は、セキュアドメインのデータが、低セキュアドメインにおいて動作する例外処理ルーチンに意図せずに使用可能にされることを確実にすることができる。
【0041】
バックグラウンド処理がセキュアドメインにおいて処理回路によって実施された状況において、セキュアドメインから低セキュアドメインへの移行を引き起こす最初の例外である識別された例外は、様々な形態を取り得る。例えば、識別された例外は、バックグラウンド処理からの移行を引き起こしている前述の所与の例外であり得、又は代替としてテールチェーニングされた例外であり得る。例えば、バックグラウンド処理からの移行を引き起こした所与の例外はまた、セキュアドメインにおいてで処理されており、その後のテールチェーニングされた例外であり得、その後のテールチェーニングされた例外は、次いで、非セキュアドメインにおいて処理され、したがって、セキュアドメインから低セキュアドメインへの移行を引き起こす最初の例外となる。
【0042】
例外制御回路が、レジスタの第2のサブセットからのデータを保存するかどうかを決定するために追加のチェックを実施することができるこのような実装では、例外制御回路は、前述のステータスフラグを参照するように更に配置され得、これにより、識別された例外に応答して、例外制御回路は、ステータスフラグが、レジスタの第2のサブセットからのデータが既に保存されていることを指示するときに、データを保存することをトリガすることをスキップするように配置され得る。したがって、再び、ステータスフラグの使用は、例外の処理中に様々なレジスタの状態の保存及び復元を処理するときに、改善された効率を確実にすることができる。
【0043】
ここで、特定の例について、図を参照して説明する。
【0044】
図1は、メモリシステム26からフェッチされた命令に応答してデータ処理を実施するための処理回路4を含むデータ処理システム2の例を概略的に示す。メモリシステム26は、キャッシュ(例えば、1つ以上のレベルのデータキャッシュ及び/又は命令キャッシュ)と、メインメモリとを含み得る。いくつかのより大きなシステムにおいて、メインメモリは、単一のタイプのメモリ、例えばDRAMを含むことができ、いくつかの小さなシステム(例えば、マイクロコントローラ)において、メインメモリは、プログラムコード及び定数値を記憶するためのフラッシュメモリなどの異なるタイプのメモリと、実行中に変更されるスタック及び他の値を記憶するためのSRAMとを含み得る。処理回路4は、処理パイプラインを有し、処理パイプラインは、いくつかのパイプラインステージを含む、いくつかのパイプラインステージは、例えば、実行される命令をメモリシステム26からフェッチするためのフェッチステージ12と、データ処理を実施するように残りのパイプラインステージを制御するための制御信号を生成するために、フェッチングされた命令を復号化するための復号化ステージ14と、データ処理動作を実施するために、復号化された命令を実行するための実行ステージ16とを含む。レジスタ6は、命令を実行するときに処理回路4によってアクセスされるソースデータ(ソースオペランド)を記憶し、これらの命令の実行によって生成された結果データ(デスティネーションオペランド)を記憶するために、設けられている。更に、制御レジスタ18は、処理回路4の動作を制御するために使用される制御情報を記憶するために設けられ得る。
【0045】
図1に示すパイプラインステージは、簡単に示されており、他のタイプのパイプラインステージがまた設けられ得、例えば、レジスタリネームを実施するためのリネームステージ、実行を待機する命令の待ち行列を作成し(queueing)、命令の必要とされるソースオペランドが使用可能であるときに実行するために命令を発行するための発行ステージ、及び命令のコミットメントを処理し、結果をレジスタ6に書き戻すための書き戻しステージなどが設けられ得ることが理解されよう。パイプラインは、順番とおりの又は順不同のパイプラインであり得る。
【0046】
処理回路がプログラムコードを実行している間に、対応する例外処理ルーチンを実行させるために、1つ以上の例外が発生し得る。例外が、対応する例外処理ルーチンが実行されることを可能にするようにバックグラウンド処理を一時的に停止させるときに、典型的には、バックグラウンド処理に関連付けられてレジスタ6に現在記憶されているデータのうちの少なくとも一部のデータを保存することが必要であり、このため、処理回路がバックグラウンド処理の実施に復帰するときに、当該データは、その後、レジスタ内に復元され得る。このようなデータは、その後の使用のために、様々な方法で保存され得るが、1つの例示的な配置では、メモリシステム26内のスタック28に保存される。
【0047】
例外制御回路30が、例外を取ることを制御するために設けられている。所与の例外に応答して、例外制御回路は、所与の例外に対応する所与の例外処理ルーチンを実行するために、処理回路4をトリガする前に、レジスタ6からのデータを保存するための状態保存動作の実施を引き起こすように配置されている。本明細書でより詳細に考察するように、例外制御回路30に応答して、正確にどのレジスタの状態がスタック28に保存される(このような保存動作は、本明細書でスタッキング動作とも称される)かは、所与の例外処理ルーチンが例外制御回路30によってどのようにカテゴリー化されるかに依存し、例外制御回路30をこのカテゴリー化プロセスで支援するために、例外制御回路30は、例外処理ルーチンをカテゴリー化するために使用される構成情報を記憶する構成ストレージ32にアクセスする。図1に示すように、いくつかの実装では、例外制御回路は、レジスタ及びメモリ階層に直接アクセスし得る。しかしながら、他の実装では、例外制御回路は、例外制御回路の代わりに状態保存を実施するために処理回路をトリガすることによって、状態保存を間接的に実施し得る。この方法レジスタ及びメモリ階層への接続の数は、最小にされ得、回路面積及び電力を節約する。
【0048】
図1に示すように、レジスタ6は、レジスタの第1のサブセット(本明細書では呼び出し元レジスタ8と称される)と、第1のサブセットと重複しないレジスタの第2のサブセット(本明細書では呼び出し先レジスタ10と称される)とを含むと考えられ得る。デフォルトでは、例外制御回路30は、バックグラウンド処理からの例外を処理するときに呼び出し元レジスタを直接又は間接的に保存(スタッキング)するための役割を果たし、呼び出し先レジスタの保存(スタッキング)は、所与の例外に応答して処理回路によって実行される所与の例外処理ルーチンの役割である。
【0049】
しかしながら、前述のように、本明細書に記載のシステムは、信頼された例外ハンドラの実行のみでなく、信頼されない例外ハンドラの実行もサポートし、信頼されない例外ハンドラを実行するときに、信頼されない例外ハンドラのコードがバックグラウンド処理に属するデータにアクセスしないことを確実とするために、信頼されない例外ハンドラのコードを実行する前に、レジスタ(呼び出し元及び呼び出し先の両方)の全ての状態がスタック28に保存され、レジスタからクリアされることが必要である。信頼されたラッパーソフトウェアは、例外ハンドラのコードの信頼されない本体が、当該本体がアクセスすべきでないデータにアクセスしないことを確実にするための必要とされるステップを実施するために、信頼されない例外ハンドラコードへのエントリの際に及びこれから出る際に、使用され得、したがって、例えば、信頼されたラッパーソフトウェアは、例えば、バックグラウンド処理に関連付けられた呼び出し先レジスタを保存及びクリアするために使用され得る。しかしながら、割り込み待ち時間は、重要な問題となっており、ラッパーソフトウェアを使用するこのようなステップの実施は、このような信頼されない例外ハンドラコードについての割り込み待ち時間を著しく増加させ得る。
【0050】
本明細書でより詳細に考察するように、この問題を緩和するために、例外制御回路30は、所与の例外に関連付けられた所与の例外処理ルーチンが信頼されている、又は信頼されないとして扱われるかを、構成ストレージ32内の構成情報を参照して判定するように配置されている。所与の例外処理ルーチンが信頼されないとして扱われる事象では、例外制御回路ハードウェア30は、呼び出し元レジスタのみでなく、呼び出し先レジスタも保存し、所与の例外処理ルーチンを実行するために処理回路をトリガする前に、保存されたレジスタのコンテンツをクリアするように配置され得る。これは、レジスタの保存及びクリアが信頼されたラッパーソフトウェアによって実施される必要を回避することによって、このような信頼されない例外処理ルーチンについての割り込み待ち時間を著しく低減することができる。更に、信頼された例外処理ルーチンと信頼されないとして扱われる例外処理ルーチンとを区別しようとするために構成情報を使用することによって、これは、例外制御回路30が、全てのレジスタの状態を常に保存する必要がなく、信頼された例外処理ルーチンについて、呼び出し元レジスタのみを保存し続けることができ、したがって、(しばしば、タイムクリティカルルーチンであり得る)このような信頼された例外処理ルーチンにおける性能への影響を回避することを確実にする。
【0051】
前述の技法は、様々なシステムにおいて用いられ得る。例えば、前述の技法は、単一のセキュリティドメインにおいて動作するシステム内で用いられ得るが、当該システムにおいて、処理回路は、特権状態及び非特権状態の両方で動作可能であり、構成情報は、例外制御回路が、その本体が非特権状態の処理回路によって実行されるこれらの例外処理ルーチンを信頼されないとして扱うように、例外をカテゴリー化しようとすることを可能にする。代替として、前述の技法は、セキュアドメイン及び低セキュアドメインを有し、セキュリティドメインのそれぞれにおいて単一の処理状態のみを有するシステム内で用いられ得、当該システムにおいて、構成情報は、例外制御回路が、低セキュアドメインにおいて処理回路によって実行されるこれらの例外処理ルーチンを信頼されているとして扱うように、例外をカテゴリー化しようとすることを可能にし得る。
【0052】
しかしながら、本明細書で考察する例のために、システムにおいて、処理回路は、セキュアドメイン及び低セキュアドメインを含む複数のセキュリティドメインにおいて動作することが可能であり、セキュリティドメインのそれぞれ内で、処理回路は、非特権状態及び特権状態を含む複数の処理状態で動作することが可能であると考えられる。次いで、所与の例外処理ルーチンが実行されるセキュリティドメイン内で所与の例外処理ルーチンをカテゴリー化するために使用される構成情報が指定され得る。したがって、構成情報は、セキュアドメインと低セキュアドメインとの間で変化し得るが、任意の特定のセキュリティドメイン内で、構成情報は、信頼された例外処理ルーチンと信頼されないとして扱われる例外処理ルーチン(例えば、前述の例のように、処理回路が非特権状態にある間にその本体が実行される例外処理ルーチンは、信頼されないと考えられ得る)とを区別しようとするために使用され得る。
【0053】
このようなシステム2において、システムはまた、メモリシステム26へのアクセスが許可されているかどうかを、メモリアドレス空間の様々な領域について指定された属性データに基づいてチェックするためのメモリアクセスチェック回路20を含み得る。メモリアクセスチェック回路は、セキュリティドメインを定義するデータを記憶するためのセキュリティ属性ユニット(Security Attribute Unit、SAU)24を含み得、セキュリティドメインを定義するデータは、メモリアドレス空間の対応する領域のそれぞれに関連付けられたセキュリティドメインを定義する。セキュリティ属性データに基づいて、セキュリティ属性ユニット24は、処理回路の動作の現在のセキュリティドメインと、メモリアクセスのターゲットアドレスを含む領域に関連付けられたセキュリティドメインとに依存して、メモリアクセスが許可されているかどうかをチェックすることができる。他の実装では、SAU 24は、セキュリティドメインを定義するデータを直接記憶しなくてもよいが、代わりに、メモリアクセスチェックを実施するために、他の場所に記憶されたセキュリティドメインを定義するデータにアクセスすることができる。いくつかのシステムにおいて、セキュリティドメインを定義するデータは、メモリシステム26に記憶されてもよく、又はシステム2内の他の場所で構成レジスタに記憶されてもよい。
【0054】
処理回路4は、動作の現在のセキュリティドメインにおいて動作してもよく、動作の現在のセキュリティドメインは一般に、現在実行されている命令のアドレスに関連付けられたセキュリティドメインに対応し得る(例えば、ドメイン間の移行を処理するときに、いくつかの例外があり得る)。命令が、SAU 24によって1つのドメインにおいてあるとして指定された領域内のアドレスから異なるドメインに関連付けられた領域内のアドレスに分岐するときに、これは、処理回路4が動作している現在のセキュリティドメインの移行をトリガし得る。他の実装では、このような分岐は、現在のセキュリティドメインの移行を直接トリガしなくてもよいが、代わりに、ゲートウェイ命令が存在するかどうかなどの追加のセキュリティチェックをトリガすることができる。これらの実装では、ゲートウェイ命令自体が、現在のセキュリティドメインにおける変更をトリガし得る。いくつかの他のタイプのセキュリティドメイン移行については、特別な分岐命令が、命令によって指定されたアドレスにおいて、及び異なるセキュリティ状態で、命令の実行に分岐するために使用され得る。一般に、セキュアドメインにおいて動作している間に、処理回路は、セキュアドメイン及び低セキュアドメインの両方に関連付けられたメモリ領域内のデータにアクセスすることができ、低セキュアドメインにおいて動作するときに、処理回路は、低セキュアドメインに関連付けられた領域内のデータにアクセスすることができるが、SAU 24がセキュアドメインに関連付けられているとして指定するアドレス空間の領域内のデータにアクセスすることが許可されなくてもよい。これは、低セキュアドメインにおいて動作するコードからの認証されていないアクセスに対する機微なデータの保護を可能にする。
【0055】
また、メモリアクセスチェック回路は、メモリシステム26へのメモリアクセスがアクセス許可を満たすかどうかをチェックするメモリ保護ユニット(Memory Protection Unit、MPU)22を含み得、アクセス許可は、例えば、処理回路4のどの特権レベルがメモリの所与の領域にアクセスすることが可能にされているかを指定してもよく、アドレス空間のメモリ領域が、読み取り動作及び書き込み動作の両方によってアクセスされ得る、又は書き込みが禁止されている読み取り専用領域であるかを指定してもよい。MPU 22によって使用されるアクセス許可は、(アプリケーションなどの)より下位の特権のプロセスが、メモリのどの領域に、どのように(読み取り専用又は読み取り/書き込み)アクセスすることが可能にされているかを制御するために、例えば、(ハイパーバイザ又はオペレーティングシステムなどの)より上位の特権のプロセスによって指定され得る。MPU 22によって提供される許可は、SAU 24によって提供される許可に直交し得、このため、可能にされる所与のメモリアクセスについて、これは、MPU 22及びSAU 24の両方について定義されたアクセス許可に基づいてチェックに合格するべきである。MPU 22は、図1に単一のエンティティとして示されているが、いくつかの例では、別個のセキュアMPU 22及び低セキュアMPU 22が設けられてもよく、別個のセキュアMPU 22及び低セキュアMPU 22はそれぞれ、セキュリティドメインのうちの1つに関連付けられており、このため、異なるメモリアクセス許可が、現在のドメインがセキュアドメイン又は低セキュアドメインであるかに依存して、メモリの所与の領域について指定され得る(例えば、領域は、低セキュアドメインにおいて読み取り専用であるが、セキュアドメインにおいて読み取り可能及び書き込み可能である)。
【0056】
したがって、図2に示すように、処理回路4は、少なくともセキュアドメイン(S)及び低セキュアドメイン(LS)を含むいくつかのセキュリティドメインのうちの1つにおいてデータ処理を実施することをサポートすることができる。図2は、2つのセキュリティドメインのみを有するシステムを示すが、異なるレベルのセキュリティに関連付けられた3つ以上のドメインを提供することが可能である。
【0057】
また、所与のセキュリティドメイン内で、図2に示すように、処理回路は、ハンドラモード(H)及びスレッドモード(T)を含むいくつかのモードのうちの1つでデータ処理を実施し得る。ハンドラモードは、典型的には、例外処理のために使用され、したがって、例えば、信頼された例外処理ルーチンは、ハンドラモードで実行され得る。スレッドモードは、典型的には、異なるスレッド、例えば、異なるアプリケーションスレッドを実行するために使用される。しかしながら、加えて、信頼されない例外処理ルーチンの本体は、スレッドモードでスレッドとして実行され得、1つの例示的な実装では、関連付けられたラッパーコードは、ハンドラモードで実行される。ハンドラモードHで動作するときに、処理回路4は、デフォルトでは、より上位の特権の動作モードを有すると想定され、このため、メモリ及び制御レジスタへのアクセスは、より下位の特権レベル以外のあるレベルの特権レベルに従って制御され、スレッドモードTでは、処理回路は、制御レジスタに記憶された他のアーキテクチャ状態に依存して、いくつかの異なる特権レベルのうちの1つを有し得る。
【0058】
したがって、図2に示すように、セキュリティドメインと処理回路4が動作しているモードとの組み合わせは、処理が処理回路4によってどのように実施されるかの態様を判定し得る。図2は、これらのモードの4つの異なる組み合わせを示し、当該組み合わせは、
セキュアスレッドモード(セキュアドメインとスレッドモードとの組み合わせの省略表現)
低セキュアスレッドモード(低セキュアドメインとスレッドモードとの組み合わせ)
セキュアハンドラモード(セキュアドメインとハンドラモードとの組み合わせ)及び
低セキュアハンドラモード(低セキュアドメインとハンドラモードとの組み合わせ)を含む。
【0059】
構成ストレージ32内に提供される構成情報は、様々な形態を取ることができる。図3Aは、別個の構成情報が、可能な例外処理ルーチンの少なくともサブセットのそれぞれについて提供される例を示す。1つの例示的な実装では、エントリは、全ての例外処理ルーチンについて提供され得るが、他の実装では、1つ以上の特定の例外処理ルーチンのカテゴリー化は、所定のカテゴリー化であり、したがって、構成ストレージのエントリ内に取り込む必要がない場合があり得る。例えば、ある重要な例外は、第1のカテゴリーにあるとして常に見なされ得、したがって、例外制御回路30は、構成ストレージ内の構成情報を参照する必要なしに、例外自体のタイプに基づいて、当該判定を行うことができる。
【0060】
例外処理ルーチンについての対応する構成情報が構成ストレージに提供されている例外処理ルーチンのそれぞれについて、当該構成ストレージ30内のエントリが、割り当てられ、当該エントリは、例外処理ルーチンを識別するために使用される第1のフィールド35と、当該例外処理ルーチンが第1のカテゴリー又は第2のカテゴリーにあるかを識別するために使用される第2のフィールド40とを有する。他の実装では、第2のフィールド40の列は、例外番号によってインデックス付けされてもよく、したがって、第1のフィールド35のための別個のストレージは、必要でないことがある。このフィールド40に提供される情報は、様々な形態を取ることができるが、1つの例では、当該情報は、単一ビットのフィールドであり、単一ビットのフィールドは、例外処理ルーチンが第2のカテゴリーにあるときを識別するようにセットされ、例外処理回路が第1のカテゴリーにあるときにクリアされる。したがって、このような実装では、フィールド40がセットされたときに、これは、例外制御回路30が、呼び出し元レジスタを単に保存するのではなく、レジスタ状態の全てを保存することとなることを指示する。
【0061】
複数のセキュリティドメインがある実装では、次いで、構成ストレージは、セキュリティドメインのそれぞれについて複製され得る。しかしながら、いくつかの例外処理ルーチンは、あるセキュリティドメインに特有であり得、したがって、このような例外処理ルーチンについてのエントリは、関連するセキュリティドメインについて維持された例外処理ルーチンの表内に作成される必要のみがあることが理解されよう。いくつかの実装では、セキュアドメイン又は低セキュアドメインのいずれかをターゲットにするように構成され得る例外があり得る。このような場合に、構成ストレージの複製されたフィールド40のうちの1つのみが使用される(当該1つの複製されたフィールド40は、例外のターゲットセキュリティドメインに依存する)ため、これらの例外について構成ストレージを複製することは、浪費的であり得る。このような実装では、構成可能なターゲットセキュリティドメインは、1つの例外について、単一のフィールド40のみに提供されてもよく、代わりに、例外がセキュアドメインをターゲットにするように構成されている場合に、所与の例外についてのフィールド40へのアクセスは、低セキュアドメインから禁止され得る。
【0062】
いくつかの事例では、システムによってサポートされた多数の異なる例外処理ルーチンがあり得、このような事例では、例外処理ルーチンのそれぞれについて構成情報を取り込むために必要とされる構成ストレージ32のサイズは、比較的大きいことがある。しかしながら、いくつかの実装では、より効率的な形態の構成ストレージが使用され得る。例えば、1つの例示的な実装では、信頼されない例外処理ルーチンには、典型的に、信頼された例外処理ルーチンよりも低い優先度を割り当てられている場合があり、したがって、関連付けられた例外の優先レベルは、例外処理ルーチンが信頼されている又は信頼されないとして扱われるべきかの指示のためのプロキシとして使用され得る。このような状況において、構成ストレージ30は、図3Bに示すように、閾値優先度指示を記憶するように配置されてもよい。複数のセキュリティドメインがある実装では、異なる閾値優先度が、セキュリティドメインのそれぞれについて指示され得る。したがって、関連付けられた所与の例外によって指示された、バックグラウンド処理から所与の例外処理ルーチンへの移行を考えるときに、所与の例外の優先度は、関連付けられた例外処理ルーチンが第1のカテゴリー又は第2のカテゴリーにあるとして見なされるべきかを判定するために、構成ストレージ32内の閾値優先度指示と比較され得る。異なる閾値優先度が異なるセキュリティドメインについて提供される状況において、所与の例外の優先度と比較される適切な閾値優先度を判定するときに、所与の例外処理ルーチンが実行されるセキュリティドメインが考慮され得る。
【0063】
第3の例示的な実装によれば、閾値優先度は、固定され得、構成ストレージは、図3Cに示すように、構成可能な優先度を、例外のそれぞれについて記憶するように配置され得る。したがって、構成ストレージ32内のエントリのそれぞれは、例外処理ルーチンを識別するための第1のフィールド45と、当該例外の優先度を識別する第2のフィールド50とを提供するように配置されてもよい。他の実装では、第2のフィールド50の列は、例外番号によってインデックス付けされてもよく、したがって、第1のフィールド45のための別個のストレージは、必要でないことがある。異なるセキュリティドメインについてエントリを複製する必要があるか否かに関して図3Aに関連して前述でなされた説明は、図3Cの実装に等しく当てはまる。
【0064】
1つの特定の実装では、所与の例外の関連付けられた優先度が閾値優先度未満であるときに、関連付けられた例外処理ルーチンが、第2のカテゴリーにある、すなわち、信頼されない例外処理ルーチンとして扱われると判定される。結果として、これは、所与の例外処理ルーチンを実行するために処理回路をトリガする前に呼び出し元レジスタ及び呼び出し先レジスタの両方の状態の保存及びクリアをトリガするために、例外制御回路30をトリガする。しかしながら、優先度が同じである又は閾値優先度よりも大きい場合に、例外処理ルーチンは、第1のカテゴリーにあると考えられ、例外制御回路は、所与の例外処理ルーチンを実行するために処理回路をトリガする前に、呼び出し元レジスタの状態を単に保存(及び、任意選択でクリア)する。他の実装では、例外の優先度が閾値以下である場合に、例外は、第2のカテゴリーにある(呼び出し元レジスタ及び呼び出し先レジスタの両方が保存される必要がある場合)と考えられ得る。このようなシステムにおいて、例外の優先度が閾値よりも大きい場合に、例外は第1のカテゴリーにあると考えられ得る。
【0065】
他の実装では、入力されるべき例外の優先度は、当該優先度が閾値と比較される前に修正され得る。閾値優先度はまた、比較前に、このような修正を受けてもよい。例外の優先度を修正することは、優先度をある範囲内にあるように制限する形態、又は優先度を1つの優先度範囲から別の優先度範囲にマッピングする形態を取ることができる。これらの種類の優先度修正は、低セキュアドメインについての最も高い優先度の例外でも、セキュアドメインに関連付けられたセキュリティクリティカル例外をプリエンプトすることができないことを確実にするために、複数のセキュリティドメインを有するシステムにおいて有用であり得る。しかしながら、異なる比較が使用され得る、並びに/又は様々な優先度修正及び再マッピングスキームが適用され得るが、これらは、例外の修正/再マッピングされた優先度が、関連付けられた例外ハンドラが信頼されているとして扱われるべきかどうかについてのプロキシとして使用されることを妨げないことが理解されよう。
【0066】
優先度構成フィールドを例外のそれぞれについて提供することは、非常に高価であるが、これは近代のシステムにおいて一般的に使用されるプロセスであり、したがって、例外処理ルーチンをカテゴリー化するために当該既存の情報を再使用することは、追加のコストを追加せず、したがって、前述のカテゴリー化を実施するための非常に効率的な機構を提供することができる。
【0067】
図4は、バックグラウンド処理からの例外の処理を示すフロー図である。ステップ100で、バックグラウンド処理からの例外が発生したかどうかが判定される。バックグラウンド処理は、例えば、処理回路による例外処理ルーチン以外のプログラムコードの実行、例えば、特定のアプリケーションスレッドの実行を含み得、この事象では、例外は、当該バックグラウンド処理からの初期例外である。しかしながら、バックグラウンド処理自体が、特定の例外処理ルーチンの実行である場合がしばしばあり得、ステップ100で検出された例外は、現在の例外処理ルーチンに対応する例外よりも高い優先度のプリエンプティブな例外である。この事例では、ステップ100で検出されたより高い優先度の例外によって必要とされる例外処理ルーチンを実行するために、現在の例外処理ルーチンに割り込む(したがって、バックグラウンド処理として扱う)必要がある。
【0068】
バックグラウンド処理からの例外がステップ100で検出された状況において、次いで、ステップ105で、例外制御回路30は、必要とされる例外処理ルーチン(すなわち、ステップ100で検出された例外を処理するために必要とされる例外処理ルーチン)が第1のカテゴリー又は第2のカテゴリーにあるかを、構成ストレージ32を参照して判定するように配置されている。前述のように、構成ストレージ32内に維持された構成情報は、信頼された例外処理ルーチンが、典型的には、第1のカテゴリーにあると考えられ、第2のカテゴリーにある例外処理ルーチンは、信頼されない例外処理ルーチンであるとして見なされるような情報である。閾値優先度指示が使用される実装では、次いで、いくつかの事例では、信頼された例外処理ルーチンが、実際には、当該例外処理ルーチンが第2のカテゴリーにあるとして考えられるのに十分に低い優先度を有し、したがって、信頼されないと考えられる場合があり得る。これは、システムの動作において不正確な挙動を引き起こさないが、呼び出し元レジスタに加えて呼び出し先レジスタを保存及びクリアさせることによって、わずかな性能ペナルティを単に招く。更に、システムが、特に高い優先度の信頼されない例外処理ルーチンを提供した場合があった場合に、次いで、構成ストレージを参照して行われた判定は、例外処理ルーチンが、第1のカテゴリーにある、したがって、信頼されているとして識別し得、この事象では、例外制御回路は、呼び出し元レジスタ状態を単に保存する。しかしながら、処理モードで提供される前述のラッパーソフトウェアが、次いで、実行を信頼されない例外処理ルーチンの本体に引き渡す前に、呼び出し先レジスタを保存及びクリアするために使用され得る。
【0069】
ステップ110で、必要とされる例外処理ルーチンが第1のカテゴリーにあるかどうかが判定され、そうである場合に、プロセスはステップ115に進む。いくつかの実装では、ステップ115は、必要とされないが、他の実装では、他のチェックがまた、呼び出し先レジスタが保存される必要があるかどうかを判定するために、例外制御回路30によって実施されることが可能であり得る。特定の例として、その内容全体が参照により本明細書に組み込まれている同一所有者の米国特許第9,202,071号に記載されているように、例外制御回路は、バックグラウンド処理がセキュアドメインにおいてあり、例外処理ルーチンが低セキュアドメインにおいて実行される状況を検出するように配置されてもよく、この事例では、例外制御回路は、呼び出し元レジスタに加えて、呼び出し先レジスタも保存するように配置されてもよい。当該機能を組み込む実装では、次いで、当該同じ例外制御回路30が、特定のセキュリティドメイン内の個々の例外処理ルーチンのカテゴリー化に基づいて、本明細書に記載の技法を実装するために使用され得る。前述の考察から明らかなように、このようなカテゴリー化は、例外を取ることから生じるセキュリティドメインにおける移行があるかどうかとは独立して、発生する。
【0070】
ステップ115で、呼び出し先レジスタが保存されるべきであることを指示する他のチェックがない場合に、次いで、プロセスはステップ120に進み、ステップ120で、呼び出し元レジスタのみが、スタック28に保存される。複数のセキュリティドメインを用いるシステムにおいて、異なるスタックが、セキュリティドメインのそれぞれについて提供され得、呼び出し元レジスタからのデータは、適切なスタックに置かれる。したがって、バックグラウンド処理がセキュアドメインにおいてある場合に、次いで、呼び出し元レジスタからのデータは、セキュアスタックに保存され、バックグラウンド処理が低セキュアドメインにおいてある場合に、次いで、呼び出し元レジスタからのデータは低セキュアスタックに保存される。ステップ120によって示すように、所望の場合に、例外制御回路は、任意選択で、呼び出し元レジスタをクリアすることができる。しかしながら、他の事例では、必要とされる例外処理ルーチンが、第1のカテゴリーにあると判定されている、すなわち、信頼されていると考えられることを考慮すれば、呼び出し元レジスタをクリアすることは不要であると考えられ得る。ステップ122で、ステータスフラグは、呼び出し元レジスタのみがスタックに保存されたことを識別するために、クリアされる。
【0071】
ステップ110で、必要とされる例外処理ルーチンが第2のカテゴリーにある、すなわち信頼されないと判定された場合に、次いで、プロセスはステップ130に進み、ステップ130で、例外制御回路30は、呼び出し元レジスタ及び呼び出し先レジスタからのデータをスタックに保存することをトリガし、これらのレジスタをクリアさせるように配置されている。レジスタは、状態が保存された後にクリアされてもよく、又は1つの実装では、レジスタのそれぞれは、レジスタのデータがスタックに保存されたときに、クリアされてもよい。図4に示すように、ステップ130はまた、ステップ115の「はい」の経路から到達されてもよく、すなわち、必要とされる例外処理ルーチンは第1のカテゴリーにあるが、例外制御回路によって実施されたある他のチェックが、呼び出し先レジスタを保存することが適切であると判定する状況において、到達されてもよい。再び、システムが複数のセキュリティドメインにおける実行をサポートする場合に、レジスタ状態が保存されているスタックは、バックグラウンド処理が実施されているセキュリティドメインに属するスタックである。
【0072】
ステップ130に続いて、次いで、ステップ135で、ステータスフラグは、呼び出し先レジスタがスタックに保存されたことを指示するようにセットされる。ステータスフラグがセットされ得るいくつかの方法がある。例えば、ステータスフラグは、処理が例外処理ルーチンの完了後に復帰すべき復帰アドレスを指示するために使用されるリンクレジスタ内に記憶された情報内の追加のビットとして提供され得る。他の実装では、リンクレジスタ内に記憶された情報は、例外復帰値である。例外復帰値は、確保された非実行可能アドレスであり、当該非実行可能アドレスは、当該非実行可能アドレスに分岐されたときに、例外復帰プロセスをトリガする。しかしながら、両方の場合に、リンクレジスタ内に初期に記憶された情報は、その後、リンクレジスタからシステム内の他のストレージ構造に移動され得、したがって、例えば、メモリシステム内のスタックのうちの1つに、又は別のレジスタ内に最終的にある。
【0073】
ステップ135に続いて、又は例外処理ルーチンが第1のカテゴリーにある事象ではステップ122に続いて、次いで、ステップ125で、例外制御回路30は、必要とされる例外処理ルーチンを実行するために、処理回路をトリガする。
【0074】
図5は、構成ストレージが、図3Bに示す形態を取り、したがって、閾値優先度指示を提供する状況における図4のステップ105の実施を示すフロー図である。ステップ150で、ステップ100で検出された例外の優先度が判定され、セキュリティドメインであるとして、対応する例外処理ルーチンが実行される。
【0075】
ステップ155で、次いで、例外制御回路は、例外処理ルーチンが実行されるセキュリティドメインに適用可能である閾値優先度を構成ストレージから得る。前述のように、構成ストレージ32は、所望の場合に、セキュリティドメインのそれぞれについて異なる閾値優先度を記憶することができ、したがって、ステップ155で、適切な閾値優先度が判定される。
【0076】
ステップ160で、例外の優先度が閾値優先度を下回るかどうかが判定され、そうでない場合に、ステップ165で、例外処理ルーチンが第1のタイプにあると判定される。しかしながら、例外の優先度が閾値優先度を下回る場合に、次いで、ステップ170で、例外処理ルーチンが第2のタイプにあると判定される。
【0077】
図6は、例外処理ルーチンの完了の際に実施される例外復帰処理を示すフロー図である。ステップ200で、例外復帰点が到達されたかどうか、すなわち、現在の例外処理ルーチンの処理が完了したかどうかが判定される。いくつかの実装では、これは、確保された非実行可能な例外復帰アドレスに分岐することによって指示され、確保された非実行可能な例外復帰アドレスは、前述のステータスフラグを含み得る。これがそうであるときに、プロセスはステップ205に進み、ステップ205で、前述のステータスフラグの値が判定される。前述のように、これは、リンクレジスタ内で使用可能であり得るが、いくつかの事例では、当該リンクレジスタのコンテンツは、システム内の他の場所、例えば、スタックのうちの1つにしばらく移動されており、したがって、この段階では、関連する情報は、ステータスフラグの値を判定するため、スタックから取得され得る。
【0078】
ステップ210で、例外復帰がバックグラウンド処理に復帰するか否かが判定される。処理がバックグラウンド処理に復帰すると想定すると、次いで、ステップ215で、ステータスフラグが、呼び出し先レジスタが保存されたことを指示するかどうかが判定される。1つの例示的な実装では、ステータスフラグ情報は、呼び出し先レジスタが保存されたか否かを直接識別する。しかしながら、代替の実装では、ステータスフラグ情報は、逸脱がデフォルトスタッキング規則から発生したかどうかを符号化することができ、当該情報を知ることにより、呼び出し先レジスタが保存されたかどうかが、任意の特定の状況において判定され得る。
【0079】
呼び出し先レジスタが保存されていない事象では、次いで、プロセスはステップ220に進む。ステップ220で、例外制御回路30は、呼び出し元レジスタのアンスタッキングをトリガする、すなわち、以前に呼び出し元レジスタから保存されたデータを関連するスタックから得るように配置されており、当該データを呼び出し元レジスタに復元するように配置されている。この時点で、次いで、処理回路は、バックグラウンド処理を再開するようにトリガされる。
【0080】
ステップ215で、呼び出し先レジスタが保存されたと判定された場合に、次いで、プロセスはステップ225に進み、ステップ225で、例外制御回路30は、呼び出し元レジスタ及び呼び出し先レジスタの両方のアンスタッキングをトリガするように配置されている。再び、これは、呼び出し元レジスタ及び呼び出し先レジスタに関して以前に保存されたデータを関連するスタックから読み取ることと、当該データを関連するレジスタに復元することとによって達成される。再び、次いで、処理回路は、バックグラウンド処理に復帰するようにトリガされる。
【0081】
しかしながら、処理が、例外復帰の際に、バックグラウンド処理に復帰する場合が常にあるわけではない。特に、別の例外が、この時点で保留中であり得、これは、完了したばかりの例外処理ルーチンよりも低い優先度を有する例外であり、したがって、当該例外処理ルーチンをプリエンプトしなかった例外である。したがって、保留中の例外がバックグラウンド処理よりも高い優先度を有する場合に、単に、直ちに取られる別の例外についてバックグラウンド処理に復帰するのではなく、テールチェーニングの機構が、現在の例外処理ルーチンが完了するのを待機していた保留中の例外の実行を開始するために用いられ得る。したがって、ステップ210で、処理が、例外復帰の際に、バックグラウンド処理に復帰しないと判定された場合に、次いで、ステップ230で、ステータスフラグ値は、テールチェーニングされた例外に関連付けられた例外処理ルーチンを実施する前に、バックグラウンドレジスタのコンテンツの更なるスタッキングが必要とされるかどうかを決定するために使用される。
【0082】
図7は、テールチェーニングされた例外が、例外復帰の際に、どのように処理されるかを示すフロー図であり、したがって、1つの例示的な実装では、図6のステップ230のプロセスが、どのように実装され得るかを示す。ステップ250で、構成ストレージ32は、テールチェーニングされた例外のための必要とされる例外処理ルーチンが第1のカテゴリー又は第2のカテゴリーにあるかを判定するために、例外制御回路30によって参照される。ステップ255で、テールチェーニングされた例外が第2のカテゴリーにあるかどうかが判定され、そうである場合に、当該必要とされる例外処理ルーチンは信頼されないとして扱われ、プロセスはステップ260に進む。
【0083】
ステップ260で、ステータスフラグが、呼び出し先レジスタが既に保存されていることを指示するかどうかが判定される。特に、必要とされる例外処理ルーチンは第2のカテゴリーにあり、したがって、信頼されないとして扱われるため、呼び出し先レジスタ状態が保存される必要があるが、当該状態は、以前の例外に応答する例外制御回路の以前のアクションにより、既に保存されている場合があり得る。ステップ260で、ステータスフラグが、呼び出し先レジスタがまだ保存されていないことを指示すると判定された場合に、次いで、ステップ265で、呼び出し先レジスタは、例外制御回路30によってスタックに保存され、呼び出し先レジスタはクリアされる。特に、呼び出し先レジスタのコンテンツは、バックグラウンド処理が実行されていたセキュリティドメインに関連付けられたスタックに保存される。加えて、ステップ270で、呼び出し元レジスタのコンテンツがクリアされる。次いで、プロセスはステップ285に進み、ステップ285で、処理回路は、テールチェーニングされた例外のための必要とされる例外処理ルーチンを実行するためにトリガされる。ステップ260で、呼び出し先レジスタが既に保存されているとステータスフラグから判定された場合に、次いで、ステップ265はバイパスされ得、代わりに、呼び出し先レジスタは、ステップ267で、単にクリアされ得る。次いで、プロセスはステップ270に進む。
【0084】
それは、ステップ255で、テールチェーニングされた例外のための必要とされる例外処理ルーチンが第1のカテゴリーにあると判定される、例外ハンドリングルーチンは、信頼されていることが分かる。更に、必要とされる例外処理ルーチンが、テールチェーニングされた例外に応答して実施されるため、例外制御回路30は、以前の例外と関連して、呼び出し元レジスタの状態を関連するスタックに既に保存していることが分かる。したがって、ステップ280で呼び出し元レジスタを任意選択でクリアする以外に更なるアクションは必要とされず、プロセスは、ステップ285に直接進むことができ、ステップ285で、処理回路は、テールチェーニングされた例外のための必要とされる例外処理ルーチンを実行するためにトリガされる。
【0085】
しかしながら、図4に関連して前述したように、いくつかの実装では、例外制御回路30はまた、呼び出し先レジスタの状態を保存することが必要とされるかどうかを判定するために追加のチェックを実施し得、したがって、ステップ275で、例外制御回路は、他のチェックが、呼び出し先レジスタが保存されるべきであることを指示するかどうかを判定し得る。そうである場合に、プロセスはステップ260に進むことができるが、そうでなければ、プロセスはステップ280に進むことができる。
【0086】
例外制御回路が追加のチェックを実施し得る実装の例として、セキュアドメイン及び低セキュアドメインを含む複数のセキュリティドメインを用いるシステムにおいて、次いで、バックグラウンドがセキュアドメインにおいて処理されており例外処理ルーチンが低セキュアドメインにおいて実行される状況において、このような低セキュア例外処理ルーチンが最初に実行されるときに、呼び出し先レジスタが保存されることが適切である。これは、バックグラウンド処理から取られた初期例外は、セキュアドメインにおいて処理される例外に関することであり得る。したがって、テールチェーニングされた例外を処理するときに、バックグラウンド処理がセキュアドメインにおいてあった状況において、テールチェーニングされた例外のための必要とされる例外処理ルーチンが、低セキュアドメインへの移行を引き起こす最初の例外であるどうかをまたチェックすることが適切であり得、この事例では、呼び出し先レジスタが、まだスタッキングされておらず、そうでなければ、テールチェーニングされた例外のための必要とされる例外処理ルーチンが第2のカテゴリーにあると判定されたことにより、スタッキングされなかった場合に、呼び出し先レジスタをスタッキングすることが適切であり得る。
【0087】
図8は、1つの例示的な実装による、プリエンプションがどのように処理されるかを示すフロー図である。プリエンプションは、現在の例外処理ルーチンを実行している間に例外が生じたときに、当該新たに到着する例外が、現在実行されている例外処理ルーチンに関連付けられた優先度よりも高い優先度を有する状況において、発生する。現在の例外処理ルーチンの処理中に生じるこのようなより高い優先度の例外は、プリエンプティブな例外と称される。ステップ300で、プリエンプティブな例外が検出された場合に、次いで、プロセスはステップ305に進み、ステップ305で、現在の例外処理ルーチンは、バックグラウンド処理として扱われ、プリエンプティブな例外は、当該バックグラウンド処理からの例外として扱われる。結果として、ステップ310で、前述の図4のプロセスが、プリエンプティブな例外を処理するために例外処理ルーチンを実行する前にスタックに保存されるレジスタ状態を判定するために実施される。したがって、実際に、バックグラウンド処理のネスト化レベルがあり得、図4のプロセスは、例外がこのようなバックグラウンド処理から取られるたびに、実装される。これの例について、図9Cを参照して以下で考察する。
【0088】
図9A図9Cは、構成ストレージ32に記憶された構成情報が閾値優先度を提供する状況における、様々な例示的なシナリオにおける例外の処理を示す。図9Aは、例外がバックグラウンド処理から発生し、例外が閾値優先度よりも低い優先度を有する例を示す。前述のように、優先度を推測するために使用される優先度値は、様々な形態を取ることができる。例えば、1つの実装では、より低い優先度値がより低い優先度を指示する場合があり得るが、1つの特定の例示的な実装では、より低い優先度値が実際にはより高い優先度を指示する場合が実際にある。同様に、前述のように、優先度は、比較される前に修正及び/又は再マッピングされることがあり得る。優先度値がどのように符号化及び処理されているかに関わらず、例外に関連付けられた得られた優先度の知識と、得られた閾値優先度の知識とに基づいて、例外の得られた優先度が、得られた閾値優先度を下回るか否かが判定され得ることが理解されよう。
【0089】
図9Aの例では、割り込みが、バックグラウンド処理の処理中に点350で受信されて、例外制御回路30に、バックグラウンド処理から必要とされる例外処理ルーチンの実行への移行を処理させる。点350と点355との間の移行中、例外制御回路30は、閾値優先度を得るために構成ストレージ32を参照し、例外の優先度が閾値優先度を下回るか否かを評価する。この例では、例外の優先度が閾値優先度を下回ると判定され、したがって、例外制御回路は、呼び出し元及び呼び出し先レジスタをメモリシステム26内の関連するスタック28にスタッキングすることをトリガし、呼び出し先レジスタがスタッキングされたことを識別するために、ステータスフラグをセットする。
【0090】
図9Aの例では、例外処理ルーチンの本体は、非特権の状態で実行されることが想定され、1つの例示的な実装では、ラッパーソフトウェアは、例外処理ルーチンの本体への移行及び例外処理ルーチンの本体からの移行を処理するために、例外処理ルーチンの本体に関連付けられている。バックグラウンドコードは、前述のスレッドモード内で、特権状態又は非特権状態で実行され得、1つの例示的な実装では、バックグラウンドコードが非特権状態又は特権状態にあるかに関わらず、点355での例外処理ルーチンエントリは、処理回路が特権状態のハンドラモードで動作する状態で発生し、したがって、ラッパーソフトウェアは、特権状態で実行され、特権ラッパーと称され得ることに留意されたい。
【0091】
例外制御回路ハードウェア30が、呼び出し先レジスタ及び呼び出し元レジスタをスタッキングしたため、次いで、特権ラッパーソフトウェアは、呼び出し先レジスタをスタッキングするステップを取る必要がなく、代わりに、実行を例外処理ルーチンの非特権本体に引き渡す前に、必要とされる他の追加のステップを取る必要が単にある。同様に、点360と点365との間の例外処理ルーチンの本体の実行に続いて、特権ラッパーは、バックグラウンド処理へ戻る移行を管理するために例外制御回路30に引き渡す前に必要なステップを取るために再び使用され、例外制御回路ハードウェアが、呼び出し先レジスタのアンスタッキングに関するステップのプロセスを担うため、再び、特権ラッパーは、呼び出し先レジスタのアンスタッキングに関するステップを取る必要がない。結果として、例外処理ルーチンの実施に関連付けられた割り込み待ち時間が、著しく低減され得る。
【0092】
点370と点375との間の移行中、例外制御回路は、ステータスフラグがセットされたことを検出し、呼び出し元レジスタ及び呼び出し先レジスタの両方をアンスタッキングする。この時点で、次いで、例外制御回路は、ステータスフラグをクリアすることができる。前述のように、ステータスフラグの記憶場所は、例外復帰が例外制御回路によって処理される時間により、変化し得る。例えば、例外エントリの際に、例外制御回路は、ステータスフラグをリンクレジスタ内のビットとしてセットしていることがあるが、リンクレジスタコンテンツは、この間に移動している可能性があり、リンクレジスタコンテンツは、例えば、スタック自体の上に最終的にあり得、したがって、例外制御回路は、どのレジスタがアンスタッキングされる必要があるかについての評価を例外復帰中に行うときに、関連する場所からステータスフラグにアクセスする。前述のように、いくつかの実装では、ステータスフラグは、例外復帰値にセットされ、この値は、確保された非実行可能アドレスであり、例外復帰プロセスは、例外復帰値に分岐する試みをトリガする。このような場合に、例外復帰値に分岐する行動はまた、ステータスフラグを中間記憶場所(例えば、スタック)から例外処理回路に渡す効果を有する。
【0093】
いくつかの実装では、ステータスフラグが例外復帰値内にフィールドを形成する事例では、例外復帰値は、例外復帰の際に消費され、したがって、この時点で存在しなくなるため、例外復帰の際にステータスフラグを実際にクリアする必要がないことがある。
【0094】
図9Bは、2つの割り込みがバックグラウンド処理の処理中に点400で同時に受信される第2の例示的なシナリオを示す。この事例では、ノンマスクト割り込み(Non-Masked Interrupt、NMI)及び標準的な割り込み(IRQ)の両方が受信され、NMIは、より高い優先度を有するため、NMIは、最初に処理される。点400と点405との間に、例外制御回路30は、NMIの優先度を閾値優先度に対して評価し、NMIが閾値優先度よりも高い優先度を有すると判定する。結果として、例外制御回路は、呼び出し元レジスタを単にスタッキングする。図4を参照して前述したように、例外制御回路はまた、呼び出し先レジスタがスタッキングされるべきかどうかを判定するために、追加のチェックを実施することがあり得るが、本考察のために、実施されるこのような更なるチェックは、呼び出し先レジスタがスタッキングされる必要がないという判定をもたらすことが想定される。
【0095】
点405と点410との間で、NMI例外処理ルーチンが、NMIを処理するために実行される。この事例では、処理回路が特権状態で動作する状態で、例外処理ルーチン全体がハンドラモードで実行されていると想定される。
【0096】
ステップ410で、NMIを処理する例外処理ルーチンが完了し、テールチェーニングされた例外、すなわち、元のIRQ割り込みがあると判定される。図9Bに示す例では、NMI及びIRQ割り込みは、正確に同時に受信されたが、図9Bに示す処理はまた、IRQ例外がNMIの処理中に点410の前に任意の点で発生した場合に、生じることに留意されたい。
【0097】
点410と点415との間に、例外制御回路30は、IRQ割り込みの優先度が閾値優先度を超える又は下回るかを判定し、この事例では、IRQ割り込みの優先度が閾値優先度を下回ると判定する。したがって、前述の図7を参照すると、ステップ255で、IRQ割り込みを処理するために実行される例外処理ルーチンは第2のカテゴリーにあると判定され、次いでステップ260で、ステータスフラグが、呼び出し先レジスタが既に保存されていることを指示しないと判定される。特に、呼び出し元レジスタのみが点400と点405との間の移行中に保存されたことが想起される。したがって、ここで、例外制御回路は、呼び出し先レジスタのスタッキング、レジスタのクリアをトリガし、呼び出し先レジスタが保存されたことを指示するために、ステータスフラグをセットする。
【0098】
IRQ割り込みを処理するために必要とされる例外処理ルーチンが、次いで、点415と点430との間で実施され、図9Aの前述の考察によれば、例外処理ルーチンの本体は、点420と点425との間で、スレッドをスレッドモードで実行することによって非特権状態で処理されることが想定され、当該非特権スレッドへの移行及び当該非特権スレッドからの移行は、ハンドラモードで実行する特権ラッパーソフトウェアによって管理されることが想定される。
【0099】
点430で、例外処理ルーチンの実行が完了したと考えられ、したがって、この時点で、例外制御回路30は、更なるテールチェーニングされた例外がないと判定し、処理が点435でバックグラウンド処理に復帰するべきであると判定する。バックグラウンド処理への移行中に、例外制御回路は、ステータスフラグがセットされたことを検出し、したがって、呼び出し元レジスタ及び呼び出し先レジスタの両方のアンスタッキングをトリガする。必要な場合に、例外制御回路はまた、この時点でステータスフラグをクリアすることができるが、前述のように、ステータスフラグが例外復帰の後に存在しなくなることがあるため、これは必要でないことがある。
【0100】
図9Cは、プリエンプション例を示し、プリエンプション例において、割り込みのための例外処理ルーチンの実行中に、より高い優先度の割り込みが受信される。特に、点450では、標準IRQ割り込みが受信され、点450と点455との間で、例外制御回路30は、当該割り込みの優先度が閾値優先度を下回ると判定し、したがって、バックグラウンド処理のための呼び出し元レジスタ及び呼び出し先レジスタの両方のスタッキングをトリガし、呼び出し元レジスタ及び呼び出し先レジスタの両方が保存されたことを指示するために、IRQ割り込みに関連付けられたステータスフラグをセットする。前述のように、次いで、これらのレジスタのコンテンツは、典型的には、IRQ割り込みを処理するために実行される例外処理ルーチンに引き渡す前にクリアされる。図9Cの例示のために、IRQ割り込みを処理するために使用される例外処理ルーチンが特権状態又は非特権状態で実行されるかは重要でなく、したがって、関連付けられたラッパーソフトウェアがあるか否かは重要でない。しかしながら、例外処理ルーチンの処理中のある点で、NMIは、点460で受信され、これは、IRQ割り込みよりも高い優先度を有する。したがって、NMIは、プリエンプティブな例外として扱われ、NMI例外が処理されている間に、IRQ割り込みのための例外処理ルーチンの処理は、停止される。
【0101】
特に、図9Cに示すように、点460と点465との間で、例外制御回路は、NMIの優先度が閾値優先度を超えることを検出し、したがって、IRQ割り込みを処理する例外処理ルーチンによって使用されている呼び出し元レジスタの状態をスタッキングする。例外制御回路はまた、NMIに関連付けられたステータスフラグ値をクリアし、IRQ例外処理ルーチンは、この時点での新しいバックグラウンド処理として扱われる。
【0102】
NMIを処理するために使用される例外処理ルーチンが、点465と点470との間で実施され、その後、バックグラウンド処理へ例外復帰があると判定される(この事象では、バックグラウンド処理は、IRQを処理していた例外処理ルーチンである)。点470と点475との間で、例外制御回路は、呼び出し元レジスタのみがスタッキングされたと、NMIのためのステータスフラグから判定し、したがって、IRQ割り込みのための例外処理ルーチンに属する呼び出し元レジスタのアンスタッキングのみをトリガする。
【0103】
点475と点480との間で、IRQ割り込みを処理するために使用される例外処理ルーチンが完了し、次いでステップ480で、バックグラウンド処理(元のバックグラウンド処理)への復帰があることが検出される。したがって、例外制御回路は、IRQ割り込みのためのステータスフラグがセットされたと判定し、したがって、点480と点485との間で、バックグラウンド処理に属する呼び出し元レジスタ及び呼び出し先レジスタの両方をアンスタッキングし、その後、バックグラウンド処理が再開される。
【0104】
図10は、使用され得るシミュレータ実装を示す。前述の例は、当該技法をサポートする特定の処理ハードウェアを動作させるための装置及び方法の観点で、本発明を実装するが、本明細書に記載の例による命令実行環境を提供することも可能であり、命令実行環境は、コンピュータプログラムの使用により実装される。このようなコンピュータプログラムは、コンピュータプログラムがハードウェアアーキテクチャのソフトウェアベースの実装を提供する限り、シミュレータとしばしば称される。様々なシミュレータコンピュータプログラムは、エミュレータ、仮想マシン、モデル、及び動的バイナリトランスレータを含むバイナリトランスレータを含む。典型的には、シミュレータ実装は、ホストプロセッサ515で実行してもよく、ホストプロセッサ515は、任意選択で、ホストオペレーティングシステム510を実行し、ホストオペレーティングシステム510は、シミュレータプログラム505をサポートする。いくつかの配置では、複数の層のシミュレーションが、ハードウェアと提供された命令実行環境との間にあってもよく、及び/又は、同じホストプロセッサに提供された複数の異なる命令実行環境があってもよい。史上、強力なプロセッサが、合理的な速度で実行するシミュレータ実装を提供するために必要とされてきたが、このような手法は、ある状況において、例えば、互換性又は再使用の理由から別のプロセッサにネイティブなコードを実行することが望まれるときに、正当化され得る。例えば、シミュレータ実装は、ホストプロセッサハードウェアによってサポートされていない追加の機能を有する命令実行環境を提供してもよく、又は典型的には異なるハードウェアアーキテクチャに関連付けられた命令実行環境を提供してもよい。シミュレーションの概要は、「Some Efficient Architecture Simulation Techniques」、Robert Bedichek、1990年冬、USENIX Conference、第53~63頁に記載されている。
【0105】
例が、特定のハードウェア構築又は特徴を参照して前述されている程度に、シミュレーションされた実装では、同等の機能が、好適なソフトウェア構築又は特徴によって提供されてもよい。例えば、特定の回路は、シミュレーションされた実装では、コンピュータプログラムロジックとして設けられてもよい。同様に、レジスタ又はキャッシュなどのメモリハードウェアは、シミュレーションされた実装では、ソフトウェアデータ構造として設けられてもよい。また、ハードウェア装置2内のメモリ26にアクセスするために使用される物理アドレス空間は、シミュレートされたアドレス空間としてエミュレートされ得、シミュレートされたアドレス空間は、ホストオペレーティングシステム510によって使用される仮想アドレス空間に、シミュレータ505によってマッピングされている。前述の例で言及されているハードウェア要素のうちの1つ以上がホストハードウェア(例えば、ホストプロセッサ515)に存在する配置では、いくつかのシミュレートされた実装は、好適な場合に、ホストハードウェアを使用してもよい。
【0106】
シミュレータプログラム505は、(非一時的媒体であってもよい)コンピュータ読み取り可能な記憶媒体に記憶されてもよく、(アプリケーション、オペレーティングシステム、及びハイパーバイザを含み得る)ターゲットコード500への仮想ハードウェアインタフェース(命令実行環境)を提供し、仮想ハードウェアインタフェースは、シミュレータプログラム505によってモデル化されたハードウェアアーキテクチャのハードウェアインタフェースと同じである。したがって、ターゲットコード500のプログラム命令は、シミュレータプログラム505を使用して命令実行環境内から実行されてもよく、このため、前述の装置2のハードウェア特徴を実際には有さないホストコンピュータ515は、これらの特徴をエミュレートすることができる。シミュレータプログラムは、処理パイプライン4の挙動をエミュレートするための処理プログラムロジック520と、図1のハードウェア装置2の例外制御回路30の挙動をエミュレートするための例外制御プログラムロジック525とを含むことができる。システム2のアーキテクチャレジスタ6はまた、ターゲットアーキテクチャのアーキテクチャレジスタをホストハードウェア515によって使用されるメモリ空間にマッピングするための、シミュレータコード505によって維持されたデータ構造エミュレーティングプログラムロジック530を使用して、エミュレートされてもよい。このようなデータ構造エミュレートプログラムロジック530はまた、ホストハードウェア515によって使用されるメモリ空間内に好適な記憶場所を提供することによって、システム2の構成ストレージ32をエミュレートするために使用され得る。したがって、実行される例外処理ルーチンのカテゴリー化に基づいて、呼び出し元レジスタ及び呼び出し先レジスタをスタッキング及びアンタッキングするための本明細書に記載の技法は、図10の例では、シミュレータプログラム505によってソフトウェアで実施され得る。
【0107】
本明細書に記載の技法の使用により、低い割り込み待ち時間が、呼び出し元レジスタのスタッキング及びアンタッキングのみでなく呼び出し先レジスタのスタッキング及びアンタッキングも管理するために例外制御回路ハードウェアを選択的に使用することにより維持されることを可能にしつつ、信頼された例外処理ルーチン及び信頼されない例外処理ルーチンの両方の使用をサポートするシステムが提供され得る。好適な構成情報の使用により、例外制御回路は、信頼された例外処理ルーチンと信頼されない例外処理ルーチンとを区別しようとすることができ、例外制御回路が信頼されないとして扱うべきと判定した例外処理ルーチンに関連付けられた呼び出し元レジスタ及び呼び出し先レジスタの両方をスタッキングしようとするのみであることができる。これは、信頼された例外処理ルーチンの性能の速度に悪影響を与えることなく、信頼されない例外処理ルーチンの処理に関連付けられた待ち時間を低減する。
【0108】
本出願において、「~ように構成された(configured to...)」という用語は、装置の要素が、定義された動作を実施することができる構成を有することを意味するために使用される。この文脈において、「構成」とは、ハードウェア又はソフトウェアの相互接続の配置又は様式を意味する。例えば、装置は、定義された動作を提供する専用ハードウェアを有してもよく、又はプロセッサ若しくは他の処理デバイスが、機能を実施するようにプログラムされてもよい。「ように構成された」は、装置要素が、定義された動作を提供するために任意の方法で変更される必要があることを意味しない。
【0109】
本発明の例示的な例が、添付の図面を参照して本明細書で詳細に説明されているが、本発明は、これらの精密な例に限定されないこと、並びに添付の特許請求の範囲によって定義されている本発明の範囲及び精神から逸脱することなく、当業者によって様々な変更、追加、及び修正が、当業者によってこれらの例に実施され得ることが理解されよう。例えば、独立請求項の特徴の様々な組み合わせは、本発明の範囲から逸脱することなく、従属請求項の特徴でなされてもよい。

図1
図2
図3A
図3B
図3C
図4
図5
図6
図7
図8
図9A
図9B
図9C
図10