(57)【要約】【課題】本発明はリターンステートをセーブするためのデータ処理装置および方法を提供する。【解決手段】このデータ処理装置はデータ処理命令を実行するための処理ユニットを備え、この処理ユニットは複数の作動モードを有し、各作動モードはそのモードに関連したデータを記憶するための対応するスタックを有する。処理ユニットは現在の作動モードからの処理ユニットのリターンステートデータを現在の作動モードと異なる作動モードに対応するスタックに書き込むよう、リターンステートデータ処理命令に応答自在である。このアプローチは公知の従来技術よりもコードサイズを大幅に縮小し、割り込みレイテンシーを改善する。【選択図】図６
2011216118.tif 000002
【特許請求の範囲】
【請求項１】
複数の作動モードを有し、各作動モードがその作動モードに関連するデータを記憶するための対応するスタックを有する、データ処理命令を実行するための処理ユニットを備え、
前記処理ユニットが現在の作動モードからの処理ユニットのリターンステートデータを現在の作動モードと異なる作動モードに対応するスタックに書き込むよう、リターンステートデータ処理命令に応答自在である、データ処理装置。
【請求項２】
前記リターンステートデータ処理命令が例外発生時に呼び出される、請求項１記載のデータ処理装置。
【請求項３】
例外が所定の組の例外のうちのいずれかである、請求項２記載のデータ処理装置。
【請求項４】
前記所定の組の例外が１つ以上の割り込みを含む、請求項３記載のデータ処理装置。
【請求項５】
各作動モードのための処理ユニットのリターンステートデータを記憶するための複数のリターンステートレジスタを含む、一組のレジスタを更に備え、前記処理ユニットが現在の作動モードからの処理ユニットのリターンステートデータを含むリターンステートレジスタにしかアクセスできないようになっている、前の請求項に記載のデータ処理装置。
【請求項６】
各スタックがそのスタック内のロケーションを識別する、そのスタックに関連するスタックポインタを有し、特定のスタックのための前記スタックポインタが対応する作動モードからしかアクセスできないようになっている、前の請求項に記載のデータ処理装置。
【請求項７】
前記レジスタの組が各スタックのためのスタックポインタを記憶するための複数のスタックポインタレジスタを含み、前記処理ユニットがその現在の作動モードに対応するスタックのためのスタックポインタを含むスタックポインタレジスタにしかアクセスできないようになっている、請求項５に依存した時の請求項６記載のデータ処理装置。
【請求項８】
前記リターンステートデータ処理命令が、処理ユニットのリターンステートデータを書き込むべきスタックを識別するためのスタック識別フィールドを含む、前の請求項に記載のデータ処理装置。
【請求項９】
前記スタック識別フィールドが前記処理ユニットのリターンステートデータを書き込むべきスタックのためのスタックポインタを特定するようになっており、よってリターンステートデータをそのスタックに書き込む際に前記処理ユニットがそのスタック内の適当なロケーションにアクセスできるようにする、請求項８記載のデータ処理装置。
【請求項１０】
前記リターンステートデータ処理命令が、オプションの更新フィールドを含み、この更新フィールドが一旦リターンステートデータをスタックに書き込んだ場合にスタックポインタを更新すべきことを示すようにセットされている、請求項９記載のデータ処理装置。
【請求項１１】
前記リターンステートデータ処理命令が、前記リターンステートデータを書き込むべきスタックのアドレスモードを識別するためのアドレスモードフィールドを含む、請求項８〜１０のいずれかに記載のデータ処理装置。
【請求項１２】
前記リターンステートデータ処理命令が前記リターンステートデータ処理命令を実行するための条件を特定するための条件フィールドを含み、よって条件が満たされた場合に前記リターンステートデータ処理命令が処理ユニットにしか実行できないようになっている、請求項８〜１１のいずれかに記載のデータ処理装置。
【請求項１３】
現在の作動モードが例外モードであり、異なる作動モードが特権作動モードである、前の請求項に記載のデータ処理装置。
【請求項１４】
現在の作動モードが例外モードであり、異なる作動モードが例外モードに入る前の処理ユニットの作動モードである、前の請求項に記載のデータ処理装置。
【請求項１５】
前記リターンステートデータが、セーブされたプログラムカウンタおよびセーブされたプロセッサステータスを含む、前の請求項に記載のデータ処理装置。
【請求項１６】
複数の作動モードを有し、各作動モードがその作動モードに関連するデータを記憶するための対応するスタックを有する、データ処理命令を実行するための処理ユニットを備えたデータ処理装置を作動させるための方法において、
現在の作動モードからの処理ユニットのリターンステートデータを現在の作動モードと異なる作動モードに対応するスタックに書き込むことにより、前記処理ユニットをリターンステートデータ処理命令に応答させる工程を備えた、データ処理装置を作動させる方法。
【請求項１７】
データ処理装置が請求項１６に記載の方法を実行するようになっている、コンピュータプログラム。
【請求項１８】
請求項１７記載のコンピュータプログラムを備えたキャリア媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はリターンステートをセーブするためのデータ処理装置および方法に関し、より詳細には、複数の作動モードを有する処理ユニットを内蔵し、各作動モードがそのモードに関連したデータを記憶する、対応するスタックを有する、データ処理装置内にリターンステートをセーブすることに関する。
【背景技術】
【０００２】
かかるデータ処理装置内では、そのときの作動モード（現在作動モード）に関連したスタックにリターンステートデータをセーブするようになっている命令を与えることが知られている。かかる命令が使用される代表的な例は、例外が発生する場合であり、この場合例外作動モードに関連したスタックにリターンステートデータがセーブされる。この手順は種々の理由から必要となり得る。例えばかかるデータ処理装置は一般にマルチタスクをサポートでき、別のタスクを実行できるようにコンテキストスイッチを実行すべき時に、その時のタスクの作動モードに関連するスタック（単数または複数）をスワップし、新しいタスクを実行できるようにしなければならない。スタックポインタを使ってスタックにアクセスするシステムでは種々のスタックのうちのスタックポインタ（単数または複数）をスワップすることによって通常このスワッピングが実行される。かかるデータ処理装置では一般にコンテキストスイッチングが生じたときにスワップするスタックにリターンステートデータをセーブしなければならない。
【０００３】
コンテキストスイッチングを容易にするためには、コンテキストスイッチング時に空でないすべてのスタックをスワップしなければならない。多数のスタックを有するプロセッサでは、これを行うには特定のタスクに属すスタックであれば、どのスタックもスワップしなければならない。更に、このようなアプローチを使用する場合、作動モードごとに１つの別個のスタックをタスクごとに維持しなければならないので、これによってメモリ消費量が増加し、各タスクに属す各スタックをスワップするのにかかる時間が長くなる。例えば、ＡＲＭリミティッド社によって製造されている現在のプロセッサは６つの作動モードに対応する６個の別個のスタックを有する。すなわちシステム／ユーザースタック、ＦＩＱ（高速割り込みリクエスト）スタック、スーパーバイザースタック、アボートスタック、ＩＲＱ（割り込みリクエスト）スタックおよび無定義スタックを有し、ここでＦＩＱおよびＩＲＱは２つの割り込み作動モードである。従って、上記アプローチを使用する場合、コンテキストスイッチは６個の別個のスタックをスワッピングしなければならず、各タスクは６個の別個のスタックのためのメモリをリザーブしなければならない。かかるアプローチの一例については図２Ａおよび２Ｂを参照して後に説明する。図２Ａおよび２Ｂはコンテキストスイッチングを生じさせない単一の高優先度の割り込みリクエスト用にＦＩＱモードが保留されていると見なした場合の代表的なシステムの一例を示しているので、これら図は６このスタックではなく５個のスタックを有するシステムを示している。
【０００４】
より一般的に使用される別のアプローチは、タスク間で種々の例外スタックを共用し、例外へのエントリー時に例外スタック上の任意のデータをユーザースタックまたは単一のプロセスごとの特権モードスタックへ転送することである。ＡＲＭリミティッド社によって現在製造されているプロセッサの前の例を参照すると、この例はＦＩＱスタック、アボートスタック、ＩＲＱスタックまたは無定義スタックからデータをユーザースタックまたはスーパーバイザースタックへ転送することに一致する。このアプローチはコンテキストスイッチングが必要とされ得るすべてのポイントですべての例外スタック（ＡＲＭプロセッサの例におけるＦＩＱ、スタック、アボートスタック、ＩＲＱスタックおよび無定義スタック）が空状態のままとなることを保証する。
【０００５】
例外へのエントリー時にセーブされるデータは通常、例外が生じたポイントからタスクが実行を続けるのに必要とされるデータである。このデータを「リターンステートデータ」と称す。
【０００６】
上記第２アプローチによれば、例外へのエントリー時に例外作動モードに関連したスタックにリターンステートがセーブされ、プロセッサのユーザーモードまたは特権モードに入り、次に例外作動モードに関連したスタックから、そのリターンステートデータが読み戻され、ユーザーモードまたは特権モードに関連したスタックにセーブされる。ユーザーモードまたは特権モードに入った後でユーザーモードまたは特権モードから単にリターンステートをセーブすることはできない。その理由は、このモードからリターンステートにアクセスすることはできないからである。このプロセスについては図３Ａおよび３Ｂの例を参照して後により詳細に説明する。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
例外作動モードに属すスタックにリターンステートデータをセーブし、モードを変更し、例外作動モードに属すスタックからリターンステートデータをリカバーし、ユーザーモードスタックまたは特権モードスタックにリターンステートデータをセーブするこのプロセスは、かなりの数の命令を必要とし、このことはデータ処理装置のコードサイズおよび性能に悪影響を与える。
【０００８】
更にこのプロセスは割り込みがディスエーブルされる時に割り込み取り扱いにおけるクリティカルポイントで必要とされるので、割り込みのレイテンシーをかなりの値にすることに留意すべきである。別の割り込みに到着し、リターンステートデータをセーブする前にリターンステートデータをオーバーライトする場合、ユーザーモードスタックまたは特権モードスタックにリターンステートデータをセーブするまで割り込みを再イネーブルすることはできないことに留意すべきである。
【０００９】
従って、例外発生時にリターンステートデータをセーブするためのより効率的な技術を提供することが望ましい。
【課題を解決するための手段】
【００１０】
第１の様相によれば、本発明は、複数の作動モードを有し、各作動モードがその作動モードに関連するデータを記憶するための対応するスタックを有する、データ処理命令を実行するための処理ユニットを備え、前記処理ユニットが現在の作動モードからの処理ユニットのリターンステートデータを現在の作動モードと異なる作動モードに対応するスタックに書き込むよう、リターンステートデータ処理命令に応答自在である、データ処理装置を提供するものである。
【００１１】
本発明によれば、処理ユニットが現在の作動モードからの処理ユニットのリターンステートデータを現在の作動モードと異なる作動モードに対応するスタックに書き込むようにするのに使用されるリターンステートデータ処理命令が提供される。
【００１２】
本発明はコードサイズを縮小し、性能を改善できることが判っている。本発明は種々の実現例で利用できるが、リアルタイムオペレーティングシステム、特に高速コンテキストスイッチングを必要とするリアルタイムオペレーティングシステム、例えばライナックスのようなマルチタスクオペレーティングシステムで特に有利である。
【００１３】
好ましい実施例では、例外の発生時にリターンステートデータ処理命令を呼び出す。
【００１４】
例外は任意の適当な例外でよく、例えばすべてのタイプの割り込み、すべてのタイプのアボート、無定義命令例外、アドレス例外、ソフトウェアの割り込みおよび発生され得る他の任意の例外を含む、データ処理装置内で発生する標準的な例外のうちのいずれかとなり得ることが理解できよう。特に好ましい実施例では、例外はデータアボート、プリフェッチアボート、アドレス例外、無定義命令、リセット、ソフトウェアの割り込み、割り込みリクエストまたは高速割り込みリクエストのうちの１つ以上である。
【００１５】
従って、好ましい実施例ではデータ処理命令を呼び出す命令は所定の組の例外のうちの任意のものであり、その所定の組の命令は１つ以上の割り込みを含み得る。
【００１６】
本発明の好ましい実施例によれば、例外ハンドラーの開始時に必要とされる命令数を少なくすることにより、コードサイズを縮小できることが判っている。更に好ましい実施例によれば、例外ハンドラーの開始時に必要とされるサイクル数を少なくすることによって性能を改善できる。これらサイクルは割り込みがディスエーブルされるクリティカルポイントで一般に発生するので、本発明は割り込みのレイテンシーを大幅に小さくできるという利点を有する。本発明の好ましい実施例は種々の実現例で利用できるが、リアルタイムのオペレーティングシステム、特に極めて小さい割り込みレイテンシーを必要とするオペレーティングシステム、例えばディスクドライブを制御するオペレーティングシステムで特に有利である。
【００１７】
好ましい実施例ではデータ処理装置は各作動モードのための処理ユニットのリターンステートデータを記憶するための複数のリターンステートレジスタを備えた、一組のレジスタを更に備え、前記処理ユニットが現在の作動モードからの処理ユニットのリターンステートデータを含むリターンステートレジスタにのみアクセスできるようになっている。このため、一旦作動モードが変更されると、元の例外モードに再エントリーすることによりリターンステートレジスタにアクセスすることができなくなるので、作動モードを変更する前にリターンステートを適当なスタックにセーブしなければならない。
【００１８】
スタックは種々の方法で実現できることが理解できよう。しかしながら、好ましい実施例では、各スタックはそのスタック内のロケーションを識別する、そのスタックに関連するスタックポインタを有し、特定のスタックのための前記スタックポインタは対応する作動モードからしかアクセスできないようになっている。従って、特定の作動モードでは処理ユニットは一般にスタックのスタックポインタにしかアクセスしないので、処理ユニットは一般に対応するスタックにしかアクセスできない。
【００１９】
データ処理ユニット内に一組のレジスタが設けられる好ましい実施例では、前記レジスタの組は各スタックのためのスタックポインタを記憶するための複数のスタックポインタレジスタを含み、前記処理ユニットはその現在の作動モードに対応するスタックのためのスタックポインタを含むスタックポインタレジスタにのみアクセスできるようになっている。従って、現在の処理モードとなっている処理ユニットは対応するスタックのためのスタックポインタを得るようにスタックポイントレジスタにのみアクセスできる。
【００２０】
本発明によって提供されるリターンステートデータ処理命令は種々のフォームをとり得ることが理解できよう。しかしながら好ましい実施例では、前記リターンステートデータ処理命令は、処理ユニットのリターンステートデータを書き込むべきスタックを識別するためのスタック識別フィールドを含む。
【００２１】
好ましい実施例において、各スタックがこれに関連するスタックポインタを有する場合、処理ユニットがデスティネイションスタック内の適当なロケーションにリターンステートデータを書き込むのにスタックポインタについて知っていなければならないことは明らかである。従って、好ましい実施例では、前記スタック識別フィールドが前記処理ユニットのリターンステートデータを書き込むべきスタックのためのスタックポインタを特定するようになっており、よってリターンステートデータをそのスタックに書き込む際に前記処理ユニットがそのスタック内の適当なロケーションにアクセスできるようにする。
【００２２】
更に好ましい実施例では、前記リターンステートデータ処理命令はオプションの更新フィールドを含み、一旦リターンステートデータがスタックに書き込まれた場合にこの更新フィールドはスタックポインタを更新すべきことを示すようにセットされる。一般にスタックポインタが更新されるが、スタックポインタを更新することが適当でない状況があり得るので、このオプションの更新フィールドはスタックポインタを現在の値に残すか、またはスタックポインタを更新し、スタックに書き込まれるリターンステートデータを適当に扱うかのいずれかをとり得るフレキシビリティを与えている。
【００２３】
好ましい実施例では、どのようにスタックポインタを更新するかを決定するために、異なるアドレスモードを使用する異なるタイプのスタックを設けることができる。４つの異なるスタックのタイプの例としては次のものがある。
フル昇順−スタックはメモリ内で上に成長し、スタックポインタはスタックにプッシュされた最終ワードをポイントする。
空昇順−スタックはメモリ内で上に成長し、スタックポインタはスタックにプッシュされた最終ワードの１つ上のワードをポイントする。
フル降順−スタックはメモリ内で下方に成長し、スタックポインタはスタックにプッシュされた最終ワードをポイントする。
空降順−スタックはメモリ内で下方に成長し、スタックポインタはスタックにプッシュされた最終ワードの１つ下のワードをポイントする。
【００２４】
従って、好ましい実施例では、前記リターンステートデータ処理命令は、前記リターンステートデータを書き込むべきスタックのアドレスモードを識別するためのアドレスモードフィールドを含む。
【００２５】
例外の発生およびその他のシステムステートに応じ、常にリターンステートデータ処理命令を呼び出さなければならないことがあったり、代わりに特定の条件が生じた場合にリターンステートデータ処理命令を呼び出すだけでよいことがある。従って、好ましい実施例によれば、前記リターンステートデータ処理命令は前記リターンステートデータ処理命令を実行するための条件を特定するための条件フィールドを含み、よって条件が満たされた場合に前記リターンステートデータ処理命令は処理ユニットにしか実行されないようになっている。
【００２６】
好ましい実施例では、例外が発生すると、処理ユニットは対応する例外作動モードにされ、従って一例として割り込みが生じた場合、処理ユニットは、割り込み作動モードとされ、 アボートが生じた場合、処理ユニットは、アボート作動モードとされ、同様な動作が行われる。従ってリターンステートデータ処理命令が実行されるときのそのときの作動モードは、例外作動モードである。好ましい実施例では、リターンステートデータを記憶するのにスタックが使用される異なる作動モードは、特権作動モード、例えばシステムワイドな特権作動モードである。別の実施例では、異なる作動モードは、例外モードに入る前の処理ユニットの作動モードでよい。
【００２７】
リターンステートデータは、種々の形態となり得る。しかしながら好ましい実施例では、前記リターンステートデータは、セーブされたプログラムカウンタおよびセーブされたプロセッサステータスを含み、これらはプログラムカウンタおよび現在の、すなわち例外作動モードに入るために出た作動モードのプロセッサのステータスとなっている。
【００２８】
第２の様相によれば、本発明は複数の作動モードを有し、各作動モードがその作動モードに関連するデータを記憶するための対応するスタックを有する、データ処理命令を実行するための処理ユニットを備えたデータ処理装置を作動させるための方法において、現在の作動モードのままで現在の作動モードからの処理ユニットのリターンステートデータを現在の作動モードと異なる作動モードに対応するスタックに書き込むことにより、前記処理ユニットをリターンステートデータ処理命令に応答させる工程を備えた、データ処理装置を作動させる方法を提供するものである。
第３の様相によれば、本発明は本発明の第３の様相に係わる方法を実行するように作動できる、コンピュータプログラムを提供するものである。本発明はかかるコンピュータプログラムを備えたキャリア媒体にも関する。キャリア媒体は、適当な任意にデバイス、例えばＣＤＲＯＭ，ディスケット等でよく、光ファイバー、無線信号等の伝送媒体でもよい。
【図面の簡単な説明】
【００２９】
【図１Ａ】各スタックが１つ以上の作動モードに関連しているマルチタスクを含むシステムコンフィギュレーションの一例を示す図である。
【図１Ｂ】図１Ａのシステムコンフィギュレーションにおける各作動モードに関連したレジスタを示す。
【図２Ａ】各タスクが５つの別個のスタックを有する場合の、３つのタスクを有する公知のシステムコンフィギュレーション例を示す。
【図２Ｂ】図２Ａに示されたシステムに関連するタスク制御ブロックの一部を示す。
【図３Ａ】各タスクが２つの別個のスタックを有するが、３つのタスクの間で３つの例外スタックを共用するようになっている３つのタスクを有する公知のシステムコンフィギュレーションを示す。
【図３Ｂ】図３Ａに示されたシステムに関連するタスク制御ブロックの一部を示す。
【図４Ａ】従来技術のアプローチに従った例外発生時に呼び出される命令のシーケンスを示す。
【図４Ｂ】従来技術のアプローチに従った例外発生時に呼び出される命令のシーケンスを示す。
【図４Ｃ】従来技術のアプローチに従った例外発生時に呼び出される命令のシーケンスを示す。
【図４Ｄ】従来技術のアプローチに従った例外発生時に呼び出される命令のシーケンスを示す。
【図４Ｅ】従来技術のアプローチに従った例外発生時に呼び出される命令のシーケンスを示す。
【図５Ａ】本発明の好ましい実施例に従って例外発生時に実行される命令のシーケンスを示す。
【図５Ｂ】本発明の好ましい実施例に従って例外発生時に実行される命令のシーケンスを示す。
【図５Ｃ】本発明の好ましい実施例に従って例外発生時に実行される命令のシーケンスを示す。
【図５Ｄ】本発明の好ましい実施例に従って例外発生時に実行される命令のシーケンスを示す。
【図６】本発明の好ましい実施例に係わるデータ処理装置を内蔵するシステムの構造例を示すブロック図である。
【発明を実施するための形態】
【実施例】
【００３０】
以下、添付図面に示された本発明の好ましい実施例を参照して、単なる例により本発明について更に説明する。
【００３１】
図１Ａおよび１Ｂは６つの作動モードおよびそれに対応する６つのスタックを有するシステム例を示すブロック図である。しかしながら、ＦＩＱモードはコンテキストスイッチングを生じさせない高優先度の割り込みに対してリザーブされているので、図には５つの作動モードおよびそれらに対応する５つのスタックしか示されておらず、次の説明ではこれらについてしか説明しない。従って、図１Ａを参照し、５つのスタック１００、１１０、１２０、１３０、１４０について説明する。各スタックは関連するスタックポインタレジスタ１０５、１１５、１２５、１３５、１４５を有し、各スタックポイントレジスタに対してはそのスタックに関連する作動モードからしかアクセスできない。５つの作動モード、すなわちユーザーモード、特権モード、割り込みモード、アボートモードおよび無定義モードの各々でアクセスできるレジスタを示す図１Ｂを参照すれば、このことが明らかとなる。図１Ｂから明らかなように、任意のモードから所定のレジスタにアクセス可能である。しかしながら、５つのモードに対するスタックポインタは本例ではＳＰ、ＳＰ＿ＳＶＣ、ＳＰ＿ＩＲＱ、ＳＰ＿ＡＢＴおよびＳＰ＿ＵＮＤと称する。特定の作動モードではプロセッサはその作動モードに関連するスタックに対するスタックポインタを含むレジスタにしかアクセスできない。従って、プロセッサはその作動モードに属すスタックにしかアクセスできない。
【００３２】
特権モードおよび例外モード（割り込み、アボートおよび無定義）の各々は関連したリターンステートデータを有し、このデータにはそのリターンステートに関連した作動モードからしかアクセスできない。図１Ｂを参照すると、リターンステートはＬＲ＿ＳＶＣ、ＬＲ＿ＩＲＱ、ＬＲ＿ＡＢＴ、ＬＲ＿ＵＮＤ、およびＳＰＳＲ＿ＳＶＣ、ＳＰＳＲ＿ＩＲＱ、ＳＰＳＲ＿ＡＢＴおよびＳＰＳＲ＿ＵＮＤ、「Ｌｉｎｋ  Ｒｅｇｉｓｔｅｒ」を意味するＬＲ、および「Ｓａｖｅｄ  Ｐｒｏｃｅｓｓｏｒ  Ｓｔａｔｕｓ  Ｒｅｇｉｓｔｅｒ」を意味するＳＰＳＲと称す。ユーザーモードもリンクレジスタを有しているが、このレジスタはユーザーモード用のリターンステートがない時にリターンステート情報を記憶するのには使用されない。その理由は、このユーザーモードは例外モードではないからである。すなわちユーザーモードにエントリーさせる例外はないので、ユーザーモードはリターンステートデータを記憶する必要はないからである。
【００３３】
図２Ａは従来技術の第１システムコンフィギュレーションをブロック図として示している。この例ではシステムは３つのタスクを有し、各タスクは５つの作動モードに対応する５つのスタックを有する。従って、タスク１はプロセススタック２００と、システムスタック２１０と、割り込みスタック２２０と、アボートスタック２３０と、無定義スタック２４０とを有し、タスク２はプロセススタック２０２と、システムスタック２１２と、割り込みスタック２２２と、アボートスタック２３２と、無定義スタック２４２とを有し、タスク３はプロセススタック２０４と、システムスタック２１４と、割り込みスタック２２４と、アボートスタック２３４と、無定義スタック２４４とを有する。
【００３４】
リターンステートデータは例外に対応するスタックにセーブされる。例えば割り込みの発生時に、タスクは割り込み作動モードとなり、割り込みスタックにリターンステート情報がセーブされる。図２Ａから判るように、これによってタスクごとに５つのスタックを維持しなければならないことによりメモリ消費量の点で更にオーバーヘッドが課される。
【００３５】
図２Ｂは各タスク用のタスク制御ブロックの一部を示し、１つのタスク制御ブロックはタスクがコンテキストスイッチングに必要なすべての情報をセーブするメモリの一領域となっている。５つのスタックの各々に対するスタックポインタはこの情報の一部として記憶しなければならないので、タスク１のための制御ブロック２５０は５つのスタックポインタを記憶しなければならず、タスク２のための制御ブロック２６０は５つのスタックポインタを記憶しなければならず、タスク３のための制御ブロック２７０は５つのスタックポインタを記憶しなければならない。従って、タスクごとに５つのスタックを設けなければならないので、各タスク制御ブロックに必要とされる付加的メモリによるメモリ消費量およびタスク制御ブロック内の付加的レジスタをセーブし、レストアするのにかかる追加時間による性能の双方の点で、更にオーバーヘッドが課されることが理解できよう。
【００３６】
この公知の技術を改良する目的で、より一般的に使用される第２のアプローチはタスク間で所定の例外スタックを共用するシステムを提供することであり、図３Ａにはかかるシステムの一例が示されている。図３Ａの例によれば、１つのタスク当たり２つのスタックを有し、３つのタスクの間でワイドな別の３スタック共用システムを有するシステムが示されている。図示するために、図３Ａに示されたシステムは図２Ａに示されたシステムと同じ５つの実行モードを有すると見なすが、他の実施例はそれよりも多いか少ない実行モードを有することが理解できよう。
【００３７】
例外発生時に対応する例外スタック上のデータは対応するタスクのユーザー／プロセススタックまたはシステムスタックのいずれかに転送され、コンテキストスイッチングが必要とされるすべてのポイントで共用される例外スタックのすべが空のままとなることを保証できる。この結果、対応するタスク制御ブロックにユーザー／プロセスモードおよびシステムモード用のスタックポインタを記憶するだけでよく、このことはタスク１、２および３のそれぞれに対するタスク制御ブロック３６０、３７０および３８０を示す図３Ｂによって示されている。
【００３８】
図３Ａおよび３Ｂから明らかなように、このアプローチを使用することによってメモリ消費および性能の点で大きな利点が得られる。図３Ａおよび３Ｂに示されたシステムはＮｔ×２＋３個のスタックを必要とするが、図２Ａおよび２Ｂに示されたシステムはＮｔ×５個のスタックを必要とする。ここでＮｔはシステムにおけるタスクの数である。更に図２Ａおよび２Ｂに示されたシステムはＮｔ×５個のワードのコンテキストブロック情報を必要とするが、図３Ａおよび３Ｂに示されたシステムはＮｔ×２個のワードのコンテキストブロック情報を必要とする。性能の点で、図２Ａおよび２Ｂに示されたシステム上のタスク間のコンテキストスイッチングは５つのワードのロードおよび記憶を必要とするが、図３Ａおよび３Ｂに示されたシステム上のタスク間のコンテキストスイッチングは２つのワードのロードおよび記憶を必要とする。
【００３９】
公知の技術を使用して図３Ａおよび３Ｂに示されたシステムを実現するのに、割り込みの開始時に必要なコードの一例を示すためにＡＲＭアセンブラで書かれたコードフラグメントを下記のように記載する。
【００４０】
;まず最初に、割り込みスタックにリターンステート（lrおよびspsrレジスタ
）をセーブする。リターンステートの他に一時的レジスタとして使用するため
にR0もセーブする。モードを切り換えるとすぐにリターンステートおよびセー
ブされたR0を割り込みスタックからローディングするので、スタックポインタ
はデクリメントしない。割り込みはディスエーブルされるので、モードを変え
た後にデータをセーブしてから、これを読み出すまでの間、割り込みをサービ
スできないことが判っているので、スタックポインタをデクリメントしないほ
うが安全である。
(D) SUB lr、lr、#4      ;リターンアドレスをポイントするようにLR＿IRQを調
節する
(M) STR lr、[sp、#-4]   ;割り込みスタックにLR＿IRQをセーブする
(D) MRS lr、spsr        ;SPSR＿IRQを読み出す
(M) STR lr、[sp、#-8]   ;割り込みスタックにSPSR＿IRQをセーブする
(M) STR r0、[sp、#-12]  ;割り込みスタックにROをセーブする
(D) MOV r0、sp          ;R0内の割り込みスタックポインタを取り込む
;次にプロセッサモードをシステム(SVC)モードに変える
(D) MRS lr、cpsr        ;現在のプロセッサステータスレジスタを読み出す
(D) BIC lr、lr、#0x1f   ;ビットクリア動作を使ってモードビットをマスクアウ
トする
(D) ORR lr、lr、#0x13   ;SVCモードのために正しいモードビットであればORする
(D) MSR cpsr＿c、lr     ;新しいモードをcpsrに書き込む
【００４１】
;次にSVCスタックにレジスタをセーブするので、このレジスタを一時的レジス
タとして使用できる。次にリターンステート情報および割り込みスタックから
セーブしたR0をリカバーし、これをSVCスタックにセーブする。
(D) SUB sp、sp、#8*4    ;まずSVCスタックにスペースを設ける
(M) STR r1、[sp、#2*4]  ;一時的レジスタとして使用するためにR1をセーブする
(M) LDR r1、[r0、#-4]   ;セーブしたLR＿IRQをR1にリカバーする
(M) STR r1、[sp、#7*4]  ;LR＿IRQをSVCスタックにセーブする
(M) LDR r1、[r0、#-8]   ;セーブしたSPSR＿IRQをR1にリカバーする
(M) STR r1、[sp、#0*4]  ;SPSR＿IRQをSVCスタックにセーブする
(M) LDR r1、[r0、#-12]  ;セーブしたR0を割り込みスタックからリカバーする
【００４２】
;このポイントでは割り込みを再イネーブルするのが安全である。この前のポ
イントではそのようにすることは安全でない。その理由は、割り込みスタック
からすべてのデータを回収する前に第２の割り込みのサービスが認められた場
合、オーバーライトされ得る割り込みスタック上に記憶されたデータがあるか
らである。
(D) MRS r0、cpsr        ;CPSRを読み出す
(D) BIC r0、r0、#0x80   ;割り込みディスエーブルビットをクリアする
(D) MSR cpsr＿c、r0     ;CPSRを戻すように書き込む
;***INTERRUPT RE-ENABLE***
;割り込みを再イネーブルする前のサイクルカウント＝11*D+9*Mとする
;プロセスコンテキストの残りのセーブを続けることができる
STR r1、[sp、#1*4]  ;IRQスタックからリカバーしたR0をセーブする
STR r2、[sp、#3*4]  ;SVCスタックにR0をセーブする
STR r3、[sp、#4*4]  ;SVCスタックにR3をセーブする
STR R12、[sp、#5*4] ;SVCスタックにR12をセーブする
STR lr、[spc、#6*4] ;SVCスタックにLR＿SVCをセーブする
....              ;次に割り込みを続け、サービスする
【００４３】
各命令の横にある括弧内の文字は、各命令に必要なメモリまたはデータサイクル数を示し、ここでＭは１つのメモリサイクルに等しく、Ｄは１つのデータサイクルに等しい。サイクルの数は割り込みを再イネーブルできるポイントである「***INTERRUPT RE-ENABLE***」と表示されたポイントまで示されている。割り込みハンドラーの開始時からこのポイントまでのサイクルの数は、割り込みのレイテンシーを決定し、サイクル数が多い場合、割り込みのレイテンシーが大きくなり、他方、サイクル数が少なければ割り込みのレイテンシーは小さくなる。上記コードフラグメント内には割り込みハンドラーの第１命令に制御信号を送るためにハードウェアが必要とする多くの付加的サイクルは示されていない。本発明の好ましい実施例を使用する場合でも使用しない場合でも、このサイクル数は同じであるので、本書では簡潔にするために省略されている。
【００４４】
上記コードフラグメントに示された種々の命令により実行されるプロセスの説明を容易にするために図４Ａ〜４Ｅを添付したので、次にこれら図について説明する。
【００４５】
この例では１つの割り込みの例外が生じたので、プロセッサは割り込み作動モードに入っており、このモードでプロセッサはレジスタ４２０にアクセスしたと見なす。図４Ａにおいてレジスタ４３０として識別されたリターンステートレジスタにはこの割り込み作動モードからのプロセッサのリターンステートデータが記憶される。特にこのリターンステートデータはレジスタＬＲ＿ＩＲＱおよびＳＰＳＲ＿ＩＲＱを含む。
【００４６】
図４Ａはスタックのうちの２つ、すなわち割り込み作動モードからアクセスできる割り込みスタック４００およびスーパーバイザースタック４１０を示しており、割り込み作動モードではプロセッサはスーパーバイザースタックポインタＳＰ＿ＳＶＣを含むレジスタにはアクセスできないので、割り込み作動モードからスーパーバイザースタック４１０にはアクセスできない。
【００４７】
実行しなければならない最初のプロセスは、リターンステート、すなわちレジスタ４３０の内容を割り込みスタック４００にセーブすることである。リターンステートのセーブの他に、割り込みスタック４００にはＲ０の内容もセーブされるので、レジスタＲ０を一時的レジスタとして使用できる。この動作は図４Ａで番号４３５によって表示されており、上記コードフラグメントに記載されている４つの命令によって実行される。開示した実現例ではリンクレジスタＬＲ＿ＩＲＱが正しくリターンアドレスをポイントするように、このリンクレジスタを調節しなければならないので、上記コードフラグメントに記載されている初期のＳＵＢ命令しか必要とされない。
【００４８】
従って、図４Ｂを参照すると、次に割り込みスタック４００にＬＲ＿ＲＩＱ、ＳＰＳＲ＿ＩＲＱおよびＲ０の内容が記憶されるポイントにある。割り込みスタック４００のスタックポインタＳＰ＿ＩＲＱはデクリメントされない。その理由は、割り込みスタックにセーブされたばかりのリターンステートおよびＲ０データはプロセスがモードを変えるとすぐに割り込みスタックからロードされるからである。スタックポインタはデクリメントしないほうが安全である。その理由は、この時点では割り込みはディスエーブルされているので、データをセーブしてからモードを変えた後にデータを読み出すまでの間に、別の割り込みにサービスすることは不可能であるからである。
【００４９】
図４Ｂに示されているように、次のステップは割り込みスタックのスタックポインタＳＰ＿ＩＲＱをレジスタＲ０に記憶することであり、このレジスタは一時的レジスタとして使用されている。割り込み作動モードから一旦出ると、これによってそのスタックポインタにアクセスすることが可能となる。
【００５０】
この時点でプロセッサモードはシステムモードに変化する。この変化は図４Ｂ内の参照番号４４５で表示された４つの命令によって実行される。従って、図４Ｃに示されるように、次にプロセッサはスーパーバイザー作動モードとなり、この作動モードでプロセッサはレジスタ４５０にアクセスする。作動モードの間ではレジスタＲ０が共用されるので、レジスタＲ０はまだ割り込みスタック４００のためのスタックポインタを含む。しかしながら、リターンステートはレジスタ４４０に記憶されている、スーパーバイザー作動モードからのプロセッサのリターンステートである。
【００５１】
次に、プロセスはスーパーバイザースタック上にレジスタのうちの１つの内容を記憶するので、この内容を一時的レジスタとして使用できる。この例ではレジスタＲ１の内容がスーパーバイザースタックに記憶される。次にプロセスは割り込みスタック４００からリターンステート情報およびセーブされたＲ０値をリカバーし、これをスーパーバイザースタック４１０にスタックする。これらプロセスは図４Ｃ内の番号４５５で表示された７つの命令によって実行される。特にスーパーバイザースタックポインタを８個の４バイトワードだけデクリメントするのにＳＵＢ命令が使用される。次に、スーパーバイザースタック４１０内の特定のロケーション内にＲ１の内容を記憶するのに、ＳＴＲ命令が使用される。次に、スーパーバイザースタック上の特定のロケーションにＬＲ＿ＩＲＱを記憶するのにＬＤＲおよびＳＴＲ命令が使用される。この場合次のＬＤＲおよびＳＴＲ命令がスーパーバイザースタック上の特定ロケーションにＳＰＳＲ＿ＩＲＱを記憶するのに使用される。この目的のためには一時的レジスタＲ１が使用されることが理解できよう。割り込みスタック４００に記憶されたＲ０の値を一時的レジスタＲ１に記憶するのに最後のＬＤＲ命令が使用される。しかしながら、スーパーバイザースタックにその値を記憶するのに必要な次のＳＴＲ命令は、すぐには使用されない。その理由は、この時点では割り込みを再イネーブルすることが安全であるからであり、割り込みのレイテンシーを最小にするために割り込みを再イネーブルすることに優先権が与えられる。前のポイントではイネーブルを再イネーブルすることは安全でないことに留意すべきである。その理由は、割り込みスタック４００からデータのすべてをリカバーする前に第２の割り込みのサービスが許可された場合に、オーバーライトされ得るデータが割り込みスタック４００に記憶されているからである。
【００５２】
従って、次に図４Ｄに移る。図４Ｄにおいて番号４６５で示され、前のコードフラグメントに含まれている３つの命令によって割り込みのイネーブル化が実行される。実際にはこれら命令はＳＰＳＲレジスタを読み出し、割り込みディスエーブルビットをクリアし、次に対応するデータをＳＰＳＲレジスタに戻すように書き込み、よって割り込みを再イネーブルする。
【００５３】
このポイントにおいて、次にプロセスコンテントの他の部分のセーブを続けることができる。このセーブは、図４Ｄ内の番号４７５によって示された５つのＳＴＲ命令によって実行される。特に最初のＳＴＲ命令はＲ１の内容をスーパーバイザースタック内の特定ロケーションに書き込むことに留意すべきである。このレジスタは実際に元のＲ０データ、すなわち図４Ｃにおいて実行される命令のうちの１つによりスーパーバイザースタック内に既に移動されたＲ１の内容を含む。次に、レジスタＲ２、Ｒ３、Ｒ１２およびＬＲ＿ＳＶＣの内容もスーパーバイザースタック４１０へ移動される。他のレジスタの内容もＡＴＰＣＳ（ＡＲＭサム手順コール規格）に従う、次にコールされるコードによって自動的にセーブされるので、（コードがＡＴＰＣＳに従わなければ）このポイントではスーパーバイザースタックに明示的にセーブする必要はない。
【００５４】
図４Ｅは次にこのポイントにおけるスーパーバイザースタック４１０の最終ステートを示している。図４Ｄおよび４Ｅでは、割り込みスタック４００は最初に図４Ａ内の割り込みスタックに移動したデータの３つの部分を含むものとして示されていることに留意すべきである。しかしながらこのデータはスーパーバイザースタックに記憶されているので冗長であり、よってすべての意図および目的に対し、割り込みスタック４００を空であると見なすことができることは明らかである。したがって、このポイントでは割り込みスタック４００を続け、これをサービスすることが安全である。この割り込みは別のタスクへのコンテキストスイッチングにより一般に生じる。
【００５５】
理解できるように、この公知の従来技術を使用した場合、割り込みハンドラーは割り込みを再イネーブルできるまでに１１のＤタイプのサイクルおよび９つのＭタイプのサイクルを必要とするので、これによって割り込みレイテンシーが比較的大きくなる。割り込みを再イネーブル化するまでに必要な命令の数も重要である。図４Ａ〜４Ｅと組み合わせて上記に添付したコードフラグメントから判るように、この従来技術のアプローチを使って割り込みを再イネーブル化できるまでに２０の命令を実行しなければならない。
【００５６】
以上で公知の従来技術に従って、図３Ａおよび３Ｂに示されているようなシステムを実現するために、割り込みのスタート時に必要なプロセスについて説明したので、次に本発明の好ましい実施例に従ってかかるシステムを実現するために割り込みのスタート時に必要なプロセスについて説明する。特に説明を助けるために、以下、本発明の好ましい実施例に従って図３Ａおよび３Ｂに示されているようなシステムを実現するのに割り込みのスタート時に必要なコードを示すコードフラグメントについて記載する。
【００５７】
;SRS命令を使ってSVCスタックに直接リターンステートをセーブする
(D) SUB lr、lr、#4         ;リターンアドレスをポイントするようにLR＿IRQを
調節する
(2M) SRSDB sp＿svc!        ;SVCスタックにリターンステータスをセーブする
;次にプロセッサをシステム（SVC）モードに変え、同時に割り込みを再イネー
ブルする。この時点ではSVCスタックにリターンステートがセーブされている
ので、割り込みを再イネーブルするのが安全である。従ってこの割り込みスタ
ックは空であり、割り込みスタックをコンテキストスイッチングすることなく
（すなわちタスクごとに別個の割り込みスタックを設けなくても）、コンテキ
ストスイッチングが可能である。
(D) MRS lr、cpsr           ;cpsrを読み出す
(D) BIC lr、lr、#0x1f+0x80 ;モードビットをマスクアウトし、割り込み
をクリアする
(D) ORR lr、lr、#0x13      ;またはSVCモード用のモードビットをマスクインす
る
(D) MSR cpsr＿c、lr        ;新しいモードおよび割り込みビットを書き戻す
;*** INTRERUPT RE-ENABLE ***
;割り込みを再イネーブルする前のサイクルカウント=5*D+2*Mとする
;プロセスコンテキスト
STMDB sp!,{r0~r3,r12,lr} 
....                 ;次に割り込みを続け、サービスする
【００５８】
前に説明した従来技術のコードフラグメントと同じように、括弧内の文字はサイクル数を示し、ＳＲＳＤＢ命令の横の文字２Ｍは２つのメモリサイクルであることを示す。
【００５９】
上記コードフラグメント内の種々の命令によって実行されるプロセスを略図で示す、図５Ａ〜５Ｄを参照して、以下、このコードフラグメントについて説明する。
【００６０】
図４Ａ〜４Ｅを参照して前に説明した例と同じように、この例では既に割り込みの例外が発生しており、よってプロセッサはレジスタ５２０にアクセスする割り込み作動モードに入っていると見なす。この割り込み作動モードからのプロセッサのリターンステートデータは図５Ａ内にレジスタ５３０として表示されているリターンステートデータ内に記憶される。図５Ａは割り込みスタック５００およびスーパーバイザースタック５１０も示している。
【００６１】
コードフラグメントはこれまで説明した従来技術のコードフラグメントに含まれる命令に同一のＳＵＢ命令でスタートするが、この命令はこれまで説明したように、割り込みリンクレジスタＬＲ＿ＩＲＱが正しいリターンアドレスをポイントすることを保証するのに必要である。
【００６２】
次に、好ましい実施例によって提供される新しい命令、すなわちＳＲＳ命令は割り込み作動モードで作動しながらリターンステートデータを直接スーパーバイザースタック５１０にセーブするために実行される。以下、この命令のフォーマットについて詳細に説明する。しかしながら、この例「Decrement Before」におけるスーパーバイザースタックのアドレスモードを表示するために、ＳＲＳ命令には文字ＤＢが添付されていることに留意されたい。この命令はリターンステートデータをセーブすべきスタックを識別するフィールドも含み、本例におけるこのフィールドはスーパーバイザースタック５１０のためのスタックポインタＳＰ＿ＳＶＣを含む。最後に、命令の終了部にあるイクスクラメーションマークは、一旦リターンステートデータがセーブされると、スタックポインタを更新しなければならないことを示している。
【００６３】
一旦ＳＲＳ命令が実行されると、割り込みスタックおよびスーパーバイザースタックの内容は図５Ｂに示されるようになる。特にスーパーバイザースタック５１０にはレジスタＬＲ＿ＩＲＱおよびＳＲＳＲ＿ＩＲＱの内容が追加され、スーパーバイザースタックポインタＳＰ＿ＳＶＣが更新されていることに留意すべきである。この段階では、割り込み作動モードからのリターンステートデータの内容はスーパーバイザースタックに記憶されているので、処理ユニットの作動モードをスーパーバイザーモードに変更することが可能である。更に、スーパーバイザースタック５１０にはこのリターンステートデータが直接記憶され、割り込みスタック５００は空のままであるので、この時点で割り込みを再イネーブル化することは安全である。割り込みスタック５００は空であるので、割り込みスタックをコンテキストスイッチングしなくても、すなわちタスクごとに別個の割り込みスタックを設けなくても、コンテキストスイッチングが認められる。従って、図３Ａおよび３Ｂに示されているようなシステム内でこのプロセスを使用できる。
【００６４】
作動モードおよび再イネーブル可能な割り込みを変更するのに使用される４つの命令は、図５Ｃでは参照番号５４０がついている。図５Ｃはスーパーバイザー作動モードからのリターンステートを含むレジスタ５６０を備えた、スーパーバイザー作動モードからアクセス可能なレジスタ５５０を示している。
【００６５】
このポイントにおいてプロセスはプロセスコンテキストの残りをセーブし続けることができる。スーパーバイザースタックのうちの順次ロケーション内に関連するレジスタを記憶できるので、単一のＳＴＭ命令を介してこの動作を実行することができる。図５Ｃではこの命令は参照番号５７０によって表示されており、スーパーバイザーレジスタ５５０とスーパーバイザースタック５１０との間の種々のラインによってプロセスが略図で示されている。ＳＴＭ命令に添付された文字ＤＢはスーパーバイザースタックがデクリメントビフォアアドレスモードで作動していることを示しており、ＳＴＭ命令内のスタックポインタＩＤの後のイクスクラメーションマークはスタックポインタを調節しなければならないことを示している。次に命令内で記憶すべきレジスタが識別される。
【００６６】
図５ＤはＳＴＭ命令を実行した後のスーパーバイザースタック５１０の内容を示す。スーパーバイザースタック５１０の内容はデータの順序が若干異なっているが、図４Ｅを参照して前に説明したスーパーバイザースタック４１０の内容と同じであることが理解できよう。従って、図５Ａ〜５Ｄを参照して説明した好ましい実施例のプロセスは図４Ａ〜４Ｅを参照して説明した従来技術のプロセスと同じ結果をもたらすことが理解できよう。従って、前記コードフラグメントから明らかなように、新しいＳＲＳ命令を含む好ましい実施例の技術によって、割り込みハンドラーは割り込みを再イネーブルできるようになるまでに５つのＤタイプのサイクルおよび２つのＭタイプのサイクルしかかからないよう保証できる。割り込みを再イネーブルできる前に必要な命令数を比較すると、好ましい実施例のアプローチを使用する割り込みハンドラーは従来技術のアプローチに従って実行するのに２０の命令が必要であるのに対して、割り込みを再イネーブルできる前に６つの命令を実行するだけでよい。
【００６７】
従って、全体に本発明の好ましい実施例のアプローチを使用すると、割り込みハンドラーはより少ないＤタイプのサイクル、より少ないＭタイプのサイクルおよびより少ない命令しか必要としない。低速メモリシステムではＭタイプのサイクルのほうがＤタイプのサイクルよりもより低速であり、更に命令が実行されるごとに命令自体をフェッチするのに実行される追加メモリフェッチが必要となり得ることにも留意すべきである。
【００６８】
従って、ＤタイプのサイクルよりもＭタイプのサイクルのほうが４倍低速であるシステム例を検討すると、このシステムは好ましい実施例の事実を使用した場合と使用しない場合とで割り込みハンドラーに対して次の性能指数を与える。次の式において、（Ｄ）はデータサイクル数を示し、（Ｍ）はメモリサイクル数を示し、（Ｉ）は実行される命令数を示し、命令の各々は付加的メモリフェッチを必要とする。
好ましい実施例の技術を利用しない場合：
１１（Ｄ）＋９（Ｍ）＊４＊２０（Ｉ）＊４＝１２７サイクルとなり、
好ましい実施例の技術を使用した場合：
５（Ｄ）＋２（Ｍ）＊４＋６（Ｉ）＊４＝３７サイクルとなる。
【００６９】
以上で本発明の好ましい実施例のアプローチを利用する利点について説明したので、次に新しいＳＲＳ命令についてより詳細に説明する。特に本発明の好ましい実施例のＳＲＳ命令の簡略バッカス−ナウアー記法を次のように示す。
2011216118.tif 000003
【００７０】
<COND>    説明                       条件
EQ      等しい                     Z
NE      等しくない                 !Z
CS      桁上げセット               C
HS      符号なし以上               C
CC      桁上げクリア               !C
LO      符号なし小                 !C
MI      マイナス                   N
PL      プラス                     !N
VS      オーバーフローセット       V
VC      オーバーフロークリア       !V
HI      符号なし大                 C & !Z
LS      符号なし以下               !C │ Z
GE      以上                      !(N ^ V)
LT      未満                       N ^ V
GT      より大                     !Z & !(N ^ V)
LE      以下                       Z │ (N ^ V)
AL      常時                       1
<addr＿mode>   説明
IA        これより後をインクリメント（EAに等価）
EA        空昇順（IAに等価）
IB        これより前をインクリメント（FAに等価）
FA        フル昇順（IBに等価）
DB        これより前をデクリメント（FDに等価）
FD        フル降順（DBに等価）
DA        これより後をデクリメント（EDに等価）
ED        空降順（DAに等価）
<fully＿qualified＿stack＿pointer>  説明
SP＿USER                 ユーザーモードスタックポインタ
SP＿FIQ                  高速割り込みリクエストスタッ
クポインタ
SP＿IRQ                  割り込みリクエストスタックポ
インタ
SP＿SVC                  スーパーバイザースタックポインタ
SP＿ABT                  アボートスタックポインタ
SP＿UND                  無定義スタックポインタ
【００７１】
当業者であれば、簡略バッカス−ナウアー記法に精通しているはずである。しかしながらここに簡単な説明をする。省略されたフォームでは、「｛....｝」内のアイテムはオプションアイテムを示し、アングル括弧「＜....＞」内のアイテムは図に示された記号の拡張と交換できる置換記号を示す。記号「│」はシンボルのリスト内のシンボルを分けるのに使用されており、これらシンボルのうちの１つを正確に置換記号として使用できることを示す「または」と解釈できる。
【００７２】
従って、ＳＲＳ命令はプロセッサでの利用できるモードのうちの１つに属すスタックを特定する、＜fully＿qualified＿stack＿pointer＞が指定するスタックへプロセッサのリターンステートをセーブすることが理解できよう。＜fully＿qualified＿stack＿pointer＞の後に「！」記号が続く場合、このことは動作が完了した後に＜fully＿qualified＿stack＿pointer＞が更新されることを示している。
【００７３】
ＡＲＭプロセッサの例を検討すると、６つの作動モードが得られる。すなわちユーザーモードと、スーパーバイザーモードと、アボートモードと、無定義モードと、２つの割り込みモード、すなわちＩＲＱおよびＦＩＱが得られる。従って、上記簡略バッカス−ナウアー記法に示めされているように、＜fully＿qualified＿stack＿pointer＞は値SP＿USER、SP＿FIQ、SP＿IRQ、SP＿SVC、SP＿ABTまたはSP＿UNDのうちのいずれかをとり得る。
【００７４】
＜COND＞は作動を実行させるのに真となっていなければならない多数の条件のうちの１つを特定する。プロセッサがアクセスできるＣＰＲレジスタは、以下、Ｎ、Ｚ、Ｖ、Ｃと称す４つのフラグを示す。最後の代数学的演算の結果が負の場合、フラグＮは１にセットされ、最後の代数学的演算の結果が０の場合、フラグＺは１にセットされ、最後の代数学的演算の結果がオーバーフローした場合、フラグＶは１にセットされ、最後の代数学的演算の結果が桁上げを生じさせた場合、フラグＣは１にセットされる。ＳＲＳ命令の上記簡略バッカス−ナウアー記法では、各値の説明と共に＜COND＞フィールドがとり得る種々の値およびＣＰＳＲレジスタで利用できるＮ、Ｚ、ＶおよびＣフラグに関し、このフィールドが何に一致するのかの判断を示すテーブルが提供される。したがって、このテーブルは実際にはＣＰＳＲレジスタ内に存在するＮ、Ｚ、ＶおよびＣフラグに基づき、命令を実行するかどうかをプロセッサがどのように判断するかを記述するものである。例として＜COND＞フィールドが値ＭＩにセットされている場合、プロセッサはフラグＮが１にセットされているかどうかを見るようにチェックし、１にセットされている場合、命令を実行し、そうでない場合、命令は実行されない。＜COND＞フィールドが特定されていない場合、このことは演算を常に実行すべきことを示す「ＡＬ」の＜COND＞を特定することと均等である。
【００７５】
＜addr＿mode＞フィールドは作動のためのアドレス指定モードを特定し、好ましい実施例で利用できる種々のアドレス指定モードは命令の簡略バッカス−ナウアー記法に関連して上記のように記載される。前に述べたように、＜fully＿qualified＿stack＿pointer＞はプロセッサの実行モードのうちの１つに属すスタックポインタの完全に許可された名称を特定する。
【００７６】
次は、簡略化バッカス−ナウアー記法から誘導できるＳＲＳ命令の例である。
ＳＲＳＤＢ        ＳＰ＿ＳＶＣ！
ＳＲＳＥＱＤＢ    ＳＰ＿ＳＶＣ！
ＳＲＳＥＱＤＢ    ＳＰ＿ＳＶＣ
【００７７】
図６は本発明の好ましい実施例に係わるデータ処理装置を内蔵するシステムを示すブロック図である。好ましい実施例ではデータ処理装置はＣＰＵ１０内に設けられたＣＰＵコア６０のある形態をとる。ＣＰＵコア６０はデータ処理命令を実行する処理ユニットおよびその処理ユニットがアクセスできる一組のレジスタ７０を内蔵する。ＣＰＵ１０は一般にＣＰＵコア６０と、多数の別のオプションの素子、例えばメモリ管理ユニット（ＭＭＵ）４５およびキャッシュ５０とを含む。
【００７８】
ＣＰＵ１０は一般にバス３０を介して他の素子に接続され、従って、リードオンリーメモリ（ＲＯＭ）４０およびランダムアクセスメモリ（ＲＡＭ）２０に接続できる。ＲＯＭ４０は特にＣＰＵコア６０が実行する命令８０を記憶するようになっている。本発明の好ましい実施例によれば、ＲＡＭ２０内には処理ユニットの各作動モードに対して設けられるスタック９０を記憶できる。
【００７９】
本発明の好ましい実施例のこれまでの説明から、好ましい実施例を使用する結果、多数の利点が得られることが理解できよう。第１に、本発明の好ましい実施例を使用することによってコードサイズを小さくできる。前に述べた例では、好ましい実施例を使用すると、どのように割り込みハンドラーの開始時における命令数を２０から６へ短縮できるかが示されている。更に好ましい実施例を使用する結果、一般に性能が改善される。再び上記例では、好ましい実施例は割り込みハンドラーの開始時のサイクルの数をどのようにして１２７から３７に少なくできるかも示されている。サイクル数が少なくなることによって割り込みレイテンシーも小さくできる。この理由は、これらサイクルは一般に割り込みがディスエーブルされるクリティカルなポイントで生じるからである。
【００８０】
好ましい実施例の技術を利用する更に別の驚くべき利点は、この技術を使ってプロセッサの電力消費量を低減できることである。この電力消費量は携帯電話およびパーソナルデジタルアシスタント（ＰＤＡ）などのバッテリー給電デバイスでは極めて重要なものである。これまで述べた例および説明に基づくシステムを検討し、高優先度の割り込みをサービスするのに１０マイクロ秒の割り込み応答時間を維持するのに、常にこのシステムが必要であると仮定すると、公知の従来のアプローチを使用するシステムの場合、１０マイクロ秒で１２７サイクルを実行できることを保証するためにシステムは充分な速度で作動しなければならないことが明らかである。しかしながら、システムが本発明の好ましい実施例の技術を使用する場合、１０マイクロ秒で３７サイクルを実行するのに充分な速度で作動するだけでよい。従って、次の式は必要とされる最低クロック速度を決定するものである。
好ましい実施例の技術を利用しない場合：
１.０Ｅ−５秒／１２７サイクル＝７.８７４Ｅ−０８秒／サイクル
１／７.８７４Ｅ−０８＝１.２７Ｅ＋７サイクル／秒＝１２.７ＭＨｚ
となる。
好ましい実施例の技術を利用した場合：
１.０Ｅ−５秒／３７サイクル＝２.７０１Ｅ−０８秒／サイクル
１／２.７０１Ｅ−０８＝３.７Ｅ＋６サイクル／秒＝３.７ＭＨｚ
となる。
【００８１】
プロセッサによって消費される電力はほぼ周波数に対して線形であるので、好ましい実施例の技術を利用するシステムは好ましい実施例の技術を利用しない同様なシステムの電力の約２９％（３.７÷１２.８×１００）しか利用しない。
【００８２】
以上で本発明の特定の実施例について説明したが、本発明はこの実施例だけに限定されるものではなく、本発明の範囲で多くの変形および追加を行うことが可能であることが明らかとなろう。例えば本発明の範囲から逸脱することなく、次の従属請求項の特徴と独立請求項の特徴とを種々組み合わせることができる。
【図１Ａ】
2011216118.tif 000004
【図１Ｂ】
2011216118.tif 000005
【図２Ａ】
2011216118.tif 000006
【図２Ｂ】
2011216118.tif 000007
【図３Ａ】
2011216118.tif 000008
【図３Ｂ】
2011216118.tif 000009
【図４Ａ】
2011216118.tif 000010
【図４Ｂ】
2011216118.tif 000011
【図４Ｃ】
2011216118.tif 000012
【図４Ｄ】
2011216118.tif 000013
【図４Ｅ】
2011216118.tif 000014
【図５Ａ】
2011216118.tif 000015
【図５Ｂ】
2011216118.tif 000016
【図５Ｃ】
2011216118.tif 000017
【図５Ｄ】
2011216118.tif 000018
【図６】
2011216118.tif 000019
【手続補正書】
【提出日】平成23年8月18日(2011.8.18)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数の作動モードを有し、各作動モードがその作動モードに関連するデータを記憶するための対応するスタックを有する、データ処理命令を実行するための処理ユニットを備え、
前記処理ユニットが現在の作動モードからの処理ユニットのリターンステートデータを現在の作動モードと異なる作動モードに対応するスタックに書き込むよう、リターンステートデータ処理命令に応答自在である、データ処理装置。