"複数の作動モードを有し、各作動モードがその作動モードに関連するデータを記憶するための対応するスタックを有する、データ処理命令を実行するための処理ユニットを備え、前記処理ユニットが現在の作動モードからの処理ユニットのリターンステートデータを現在の作動モードと異なる作動モードに対応するスタックに書き込むよう、リターンステートデータ処理命令に応答自在である、データ処理装置。前記リターンステートデータ処理命令が例外発生時に呼び出される、請求項1記載のデータ処理装置。例外が所定の組の例外のうちのいずれかである、請求項2記載のデータ処理装置。前記所定の組の例外が1つ以上の割り込みを含む、請求項3記載のデータ処理装置。各作動モードのための処理ユニットのリターンステートデータを記憶するための複数のリターンステートレジスタを含む、一組のレジスタを更に備え、前記処理ユニットが現在の作動モードからの処理ユニットのリターンステートデータを含むリターンステートレジスタにしかアクセスできないようになっている、前の請求項に記載のデータ処理装置。各スタックがそのスタック内のロケーションを識別する、そのスタックに関連するスタックポインタを有し、特定のスタックのための前記スタックポインタが対応する作動モードからしかアクセスできないようになっている、前の請求項に記載のデータ処理装置。前記レジスタの組が各スタックのためのスタックポインタを記憶するための複数のスタックポインタレジスタを含み、前記処理ユニットがその現在の作動モードに対応するスタックのためのスタックポインタを含むスタックポインタレジスタにしかアクセスできないようになっている、請求項5に依存した時の請求項6記載のデータ処理装置。前記リターンステートデータ処理命令が、処理ユニットのリターンステートデータを書き込むべきスタックを識別するためのスタック識別フィールドを含む、前の請求項に記載のデータ処理装置。前記スタック識別フィールドが前記処理ユニットのリターンステートデータを書き込むべきスタックのためのスタックポインタを特定するようになっており、よってリターンステートデータをそのスタックに書き込む際に前記処理ユニットがそのスタック内の適当なロケーションにアクセスできるようにする、請求項8記載のデータ処理装置。前記リターンステートデータ処理命令が、オプションの更新フィールドを含み、この更新フィールドが一旦リターンステートデータをスタックに書き込んだ場合にスタックポインタを更新すべきことを示すようにセットされている、請求項9記載のデータ処理装置。前記リターンステートデータ処理命令が、前記リターンステートデータを書き込むべきスタックのアドレスモードを識別するためのアドレスモードフィールドを含む、請求項8~10のいずれかに記載のデータ処理装置。前記リターンステートデータ処理命令が前記リターンステートデータ処理命令を実行するための条件を特定するための条件フィールドを含み、よって条件が満たされた場合に前記リターンステートデータ処理命令が処理ユニットにしか実行できないようになっている、請求項8~11のいずれかに記載のデータ処理装置。現在の作動モードが例外モードであり、異なる作動モードが特権作動モードである、前の請求項に記載のデータ処理装置。現在の作動モードが例外モードであり、異なる作動モードが例外モードに入る前の処理ユニットの作動モードである、前の請求項に記載のデータ処理装置。前記リターンステートデータが、セーブされたプログラムカウンタおよびセーブされたプロセッサステータスを含む、前の請求項に記載のデータ処理装置。複数の作動モードを有し、各作動モードがその作動モードに関連するデータを記憶するための対応するスタックを有する、データ処理命令を実行するための処理ユニットを備えたデータ処理装置を作動させるための方法において、現在の作動モードからの処理ユニットのリターンステートデータを現在の作動モードと異なる作動モードに対応するスタックに書き込むことにより、前記処理ユニットをリターンステートデータ処理命令に応答させる工程を備えた、データ処理装置を作動させる方法。データ処理装置が請求項16に記載の方法を実行するようになっている、コンピュータプログラム。請求項17記載のコンピュータプログラムを備えたキャリア媒体。例外作動モードに属すスタックにリターンステートデータをセーブし、モードを変更し、例外作動モードに属すスタックからリターンステートデータをリカバーし、ユーザーモードスタックまたは特権モードスタックにリターンステートデータをセーブするこのプロセスは、かなりの数の命令を必要とし、このことはデータ処理装置のコードサイズおよび性能に悪影響を与える。更にこのプロセスは割り込みがディスエーブルされる時に割り込み取り扱いにおけるクリティカルポイントで必要とされるので、割り込みのレイテンシーをかなりの値にすることに留意すべきである。別の割り込みに到着し、リターンステートデータをセーブする前にリターンステートデータをオーバーライトする場合、ユーザーモードスタックまたは特権モードスタックにリターンステートデータをセーブするまで割り込みを再イネーブルすることはできないことに留意すべきである。従って、例外発生時にリターンステートデータをセーブするためのより効率的な技術を提供することが望ましい。第1の様相によれば、本発明は、複数の作動モードを有し、各作動モードがその作動モードに関連するデータを記憶するための対応するスタックを有する、データ処理命令を実行するための処理ユニットを備え、前記処理ユニットが現在の作動モードからの処理ユニットのリターンステートデータを現在の作動モードと異なる作動モードに対応するスタックに書き込むよう、リターンステートデータ処理命令に応答自在である、データ処理装置を提供するものである。本発明によれば、処理ユニットが現在の作動モードからの処理ユニットのリターンステートデータを現在の作動モードと異なる作動モードに対応するスタックに書き込むようにするのに使用されるリターンステートデータ処理命令が提供される。本発明はコードサイズを縮小し、性能を改善できることが判っている。本発明は種々の実現例で利用できるが、リアルタイムオペレーティングシステム、特に高速コンテキストスイッチングを必要とするリアルタイムオペレーティングシステム、例えばライナックスのようなマルチタスクオペレーティングシステムで特に有利である。好ましい実施例では、例外の発生時にリターンステートデータ処理命令を呼び出す。例外は任意の適当な例外でよく、例えばすべてのタイプの割り込み、すべてのタイプのアボート、無定義命令例外、アドレス例外、ソフトウェアの割り込みおよび発生され得る他の任意の例外を含む、データ処理装置内で発生する標準的な例外のうちのいずれかとなり得ることが理解できよう。特に好ましい実施例では、例外はデータアボート、プリフェッチアボート、アドレス例外、無定義命令、リセット、ソフトウェアの割り込み、割り込みリクエストまたは高速割り込みリクエストのうちの1つ以上である。従って、好ましい実施例ではデータ処理命令を呼び出す命令は所定の組の例外のうちの任意のものであり、その所定の組の命令は1つ以上の割り込みを含み得る。本発明の好ましい実施例によれば、例外ハンドラーの開始時に必要とされる命令数を少なくすることにより、コードサイズを縮小できることが判っている。更に好ましい実施例によれば、例外ハンドラーの開始時に必要とされるサイクル数を少なくすることによって性能を改善できる。これらサイクルは割り込みがディスエーブルされるクリティカルポイントで一般に発生するので、本発明は割り込みのレイテンシーを大幅に小さくできるという利点を有する。本発明の好ましい実施例は種々の実現例で利用できるが、リアルタイムのオペレーティングシステム、特に極めて小さい割り込みレイテンシーを必要とするオペレーティングシステム、例えばディスクドライブを制御するオペレーティングシステムで特に有利である。好ましい実施例ではデータ処理装置は各作動モードのための処理ユニットのリターンステートデータを記憶するための複数のリターンステートレジスタを備えた、一組のレジスタを更に備え、前記処理ユニットが現在の作動モードからの処理ユニットのリターンステートデータを含むリターンステートレジスタにのみアクセスできるようになっている。このため、一旦作動モードが変更されると、元の例外モードに再エントリーすることによりリターンステートレジスタにアクセスすることができなくなるので、作動モードを変更する前にリターンステートを適当なスタックにセーブしなければならない。スタックは種々の方法で実現できることが理解できよう。しかしながら、好ましい実施例では、各スタックはそのスタック内のロケーションを識別する、そのスタックに関連するスタックポインタを有し、特定のスタックのための前記スタックポインタは対応する作動モードからしかアクセスできないようになっている。従って、特定の作動モードでは処理ユニットは一般にスタックのスタックポインタにしかアクセスしないので、処理ユニットは一般に対応するスタックにしかアクセスできない。データ処理ユニット内に一組のレジスタが設けられる好ましい実施例では、前記レジスタの組は各スタックのためのスタックポインタを記憶するための複数のスタックポインタレジスタを含み、前記処理ユニットはその現在の作動モードに対応するスタックのためのスタックポインタを含むスタックポインタレジスタにのみアクセスできるようになっている。従って、現在の処理モードとなっている処理ユニットは対応するスタックのためのスタックポインタを得るようにスタックポイントレジスタにのみアクセスできる。本発明によって提供されるリターンステートデータ処理命令は種々のフォームをとり得ることが理解できよう。しかしながら好ましい実施例では、前記リターンステートデータ処理命令は、処理ユニットのリターンステートデータを書き込むべきスタックを識別するためのスタック識別フィールドを含む。好ましい実施例において、各スタックがこれに関連するスタックポインタを有する場合、処理ユニットがデスティネイションスタック内の適当なロケーションにリターンステートデータを書き込むのにスタックポインタについて知っていなければならないことは明らかである。従って、好ましい実施例では、前記スタック識別フィールドが前記処理ユニットのリターンステートデータを書き込むべきスタックのためのスタックポインタを特定するようになっており、よってリターンステートデータをそのスタックに書き込む際に前記処理ユニットがそのスタック内の適当なロケーションにアクセスできるようにする。更に好ましい実施例では、前記リターンステートデータ処理命令はオプションの更新フィールドを含み、一旦リターンステートデータがスタックに書き込まれた場合にこの更新フィールドはスタックポインタを更新すべきことを示すようにセットされる。一般にスタックポインタが更新されるが、スタックポインタを更新することが適当でない状況があり得るので、このオプションの更新フィールドはスタックポインタを現在の値に残すか、またはスタックポインタを更新し、スタックに書き込まれるリターンステートデータを適当に扱うかのいずれかをとり得るフレキシビリティを与えている。好ましい実施例では、どのようにスタックポインタを更新するかを決定するために、異なるアドレスモードを使用する異なるタイプのスタックを設けることができる。4つの異なるスタックのタイプの例としては次のものがある。フル昇順-スタックはメモリ内で上に成長し、スタックポインタはスタックにプッシュされた最終ワードをポイントする。空昇順-スタックはメモリ内で上に成長し、スタックポインタはスタックにプッシュされた最終ワードの1つ上のワードをポイントする。フル降順-スタックはメモリ内で下方に成長し、スタックポインタはスタックにプッシュされた最終ワードをポイントする。空降順-スタックはメモリ内で下方に成長し、スタックポインタはスタックにプッシュされた最終ワードの1つ下のワードをポイントする。従って、好ましい実施例では、前記リターンステートデータ処理命令は、前記リターンステートデータを書き込むべきスタックのアドレスモードを識別するためのアドレスモードフィールドを含む。例外の発生およびその他のシステムステートに応じ、常にリターンステートデータ処理命令を呼び出さなければならないことがあったり、代わりに特定の条件が生じた場合にリターンステートデータ処理命令を呼び出すだけでよいことがある。従って、好ましい実施例によれば、前記リターンステートデータ処理命令は前記リターンステートデータ処理命令を実行するための条件を特定するための条件フィールドを含み、よって条件が満たされた場合に前記リターンステートデータ処理命令は処理ユニットにしか実行されないようになっている。好ましい実施例では、例外が発生すると、処理ユニットは対応する例外作動モードにされ、従って一例として割り込みが生じた場合、処理ユニットは、割り込み作動モードとされ、アボートが生じた場合、処理ユニットは、アボート作動モードとされ、同様な動作が行われる。従ってリターンステートデータ処理命令が実行されるときのそのときの作動モードは、例外作動モードである。好ましい実施例では、リターンステートデータを記憶するのにスタックが使用される異なる作動モードは、特権作動モード、例えばシステムワイドな特権作動モードである。別の実施例では、異なる作動モードは、例外モードに入る前の処理ユニットの作動モードでよい。リターンステートデータは、種々の形態となり得る。しかしながら好ましい実施例では、前記リターンステートデータは、セーブされたプログラムカウンタおよびセーブされたプロセッサステータスを含み、これらはプログラムカウンタおよび現在の、すなわち例外作動モードに入るために出た作動モードのプロセッサのステータスとなっている。第2の様相によれば、本発明は複数の作動モードを有し、各作動モードがその作動モードに関連するデータを記憶するための対応するスタックを有する、データ処理命令を実行するための処理ユニットを備えたデータ処理装置を作動させるための方法において、現在の作動モードのままで現在の作動モードからの処理ユニットのリターンステートデータを現在の作動モードと異なる作動モードに対応するスタックに書き込むことにより、前記処理ユニットをリターンステートデータ処理命令に応答させる工程を備えた、データ処理装置を作動させる方法を提供するものである。第3の様相によれば、本発明は本発明の第3の様相に係わる方法を実行するように作動できる、コンピュータプログラムを提供するものである。本発明はかかるコンピュータプログラムを備えたキャリア媒体にも関する。キャリア媒体は、適当な任意にデバイス、例えばCDROM,ディスケット等でよく、光ファイバー、無線信号等の伝送媒体でもよい。以下、添付図面に示された本発明の好ましい実施例を参照して、単なる例により本発明について更に説明する。図1Aおよび1Bは6つの作動モードおよびそれに対応する6つのスタックを有するシステム例を示すブロック図である。しかしながら、FIQモードはコンテキストスイッチングを生じさせない高優先度の割り込みに対してリザーブされているので、図には5つの作動モードおよびそれらに対応する5つのスタックしか示されておらず、次の説明ではこれらについてしか説明しない。従って、図1Aを参照し、5つのスタック100、110、120、130、140について説明する。各スタックは関連するスタックポインタレジスタ105、115、125、135、145を有し、各スタックポイントレジスタに対してはそのスタックに関連する作動モードからしかアクセスできない。5つの作動モード、すなわちユーザーモード、特権モード、割り込みモード、アボートモードおよび無定義モードの各々でアクセスできるレジスタを示す図1Bを参照すれば、このことが明らかとなる。図1Bから明らかなように、任意のモードから所定のレジスタにアクセス可能である。しかしながら、5つのモードに対するスタックポインタは本例ではSP、SP_SVC、SP_IRQ、SP_ABTおよびSP_UNDと称する。特定の作動モードではプロセッサはその作動モードに関連するスタックに対するスタックポインタを含むレジスタにしかアクセスできない。従って、プロセッサはその作動モードに属すスタックにしかアクセスできない。特権モードおよび例外モード割り込み、アボートおよび無定義の各々は関連したリターンステートデータを有し、このデータにはそのリターンステートに関連した作動モードからしかアクセスできない。図1Bを参照すると、リターンステートはLR_SVC、LR_IRQ、LR_ABT、LR_UND、およびSPSR_SVC、SPSR_IRQ、SPSR_ABTおよびSPSR_UND、LinkRegisterを意味するLR、およびSavedProcessorStatusRegisterを意味するSPSRと称す。ユーザーモードもリンクレジスタを有しているが、このレジスタはユーザーモード用のリターンステートがない時にリターンステート情報を記憶するのには使用されない。その理由は、このユーザーモードは例外モードではないからである。すなわちユーザーモードにエントリーさせる例外はないので、ユーザーモードはリターンステートデータを記憶する必要はないからである。図2Aは従来技術の第1システムコンフィギュレーションをブロック図として示している。この例ではシステムは3つのタスクを有し、各タスクは5つの作動モードに対応する5つのスタックを有する。従って、タスク1はプロセススタック200と、システムスタック210と、割り込みスタック220と、アボートスタック230と、無定義スタック240とを有し、タスク2はプロセススタック202と、システムスタック212と、割り込みスタック222と、アボートスタック232と、無定義スタック242とを有し、タスク3はプロセススタック204と、システムスタック214と、割り込みスタック224と、アボートスタック234と、無定義スタック244とを有する。リターンステートデータは例外に対応するスタックにセーブされる。例えば割り込みの発生時に、タスクは割り込み作動モードとなり、割り込みスタックにリターンステート情報がセーブされる。図2Aから判るように、これによってタスクごとに5つのスタックを維持しなければならないことによりメモリ消費量の点で更にオーバーヘッドが課される。図2Bは各タスク用のタスク制御ブロックの一部を示し、1つのタスク制御ブロックはタスクがコンテキストスイッチングに必要なすべての情報をセーブするメモリの一領域となっている。5つのスタックの各々に対するスタックポインタはこの情報の一部として記憶しなければならないので、タスク1のための制御ブロック250は5つのスタックポインタを記憶しなければならず、タスク2のための制御ブロック260は5つのスタックポインタを記憶しなければならず、タスク3のための制御ブロック270は5つのスタックポインタを記憶しなければならない。従って、タスクごとに5つのスタックを設けなければならないので、各タスク制御ブロックに必要とされる付加的メモリによるメモリ消費量およびタスク制御ブロック内の付加的レジスタをセーブし、レストアするのにかかる追加時間による性能の双方の点で、更にオーバーヘッドが課されることが理解できよう。この公知の技術を改良する目的で、より一般的に使用される第2のアプローチはタスク間で所定の例外スタックを共用するシステムを提供することであり、図3Aにはかかるシステムの一例が示されている。図3Aの例によれば、1つのタスク当たり2つのスタックを有し、3つのタスクの間でワイドな別の3スタック共用システムを有するシステムが示されている。図示するために、図3Aに示されたシステムは図2Aに示されたシステムと同じ5つの実行モードを有すると見なすが、他の実施例はそれよりも多いか少ない実行モードを有することが理解できよう。例外発生時に対応する例外スタック上のデータは対応するタスクのユーザー/プロセススタックまたはシステムスタックのいずれかに転送され、コンテキストスイッチングが必要とされるすべてのポイントで共用される例外スタックのすべが空のままとなることを保証できる。この結果、対応するタスク制御ブロックにユーザー/プロセスモードおよびシステムモード用のスタックポインタを記憶するだけでよく、このことはタスク1、2および3のそれぞれに対するタスク制御ブロック360、370および380を示す図3Bによって示されている。図3Aおよび3Bから明らかなように、このアプローチを使用することによってメモリ消費および性能の点で大きな利点が得られる。図3Aおよび3Bに示されたシステムはNt×23個のスタックを必要とするが、図2Aおよび2Bに示されたシステムはNt×5個のスタックを必要とする。ここでNtはシステムにおけるタスクの数である。更に図2Aおよび2Bに示されたシステムはNt×5個のワードのコンテキストブロック情報を必要とするが、図3Aおよび3Bに示されたシステムはNt×2個のワードのコンテキストブロック情報を必要とする。性能の点で、図2Aおよび2Bに示されたシステム上のタスク間のコンテキストスイッチングは5つのワードのロードおよび記憶を必要とするが、図3Aおよび3Bに示されたシステム上のタスク間のコンテキストスイッチングは2つのワードのロードおよび記憶を必要とする。公知の技術を使用して図3Aおよび3Bに示されたシステムを実現するのに、割り込みの開始時に必要なコードの一例を示すためにARMアセンブラで書かれたコードフラグメントを下記のように記載する。まず最初に、割り込みスタックにリターンステートlrおよびspsrレジスタをセーブする。リターンステートの他に一時的レジスタとして使用するためにR0もセーブする。モードを切り換えるとすぐにリターンステートおよびセーブされたR0を割り込みスタックからローディングするので、スタックポインタはデクリメントしない。割り込みはディスエーブルされるので、モードを変えた後にデータをセーブしてから、これを読み出すまでの間、割り込みをサービスできないことが判っているので、スタックポインタをデクリメントしないほうが安全である。SUBlr、lr、4リターンアドレスをポイントするようにLR_IRQを調節するSTRlr、sp、4割り込みスタックにLR_IRQをセーブするMRSlr、spsrSPSR_IRQを読み出すSTRlr、sp、8割り込みスタックにSPSR_IRQをセーブするSTRr0、sp、12割り込みスタックにROをセーブするMOVr0、spR0内の割り込みスタックポインタを取り込む次にプロセッサモードをシステムモードに変えるMRSlr、cpsr現在のプロセッサステータスレジスタを読み出すBIClr、lr、0x1fビットクリア動作を使ってモードビットをマスクアウトするORRlr、lr、0x13SVCモードのために正しいモードビットであればORするMSRcpsr_c、lr新しいモードをcpsrに書き込む次にSVCスタックにレジスタをセーブするので、このレジスタを一時的レジスタとして使用できる。次にリターンステート情報および割り込みスタックからセーブしたR0をリカバーし、これをSVCスタックにセーブする。SUBsp、sp、84まずSVCスタックにスペースを設けるSTRr1、sp、24一時的レジスタとして使用するためにR1をセーブするLDRr1、r0、4セーブしたLR_IRQをR1にリカバーするSTRr1、sp、74LR_IRQをSVCスタックにセーブするLDRr1、r0、8セーブしたSPSR_IRQをR1にリカバーするSTRr1、sp、04SPSR_IRQをSVCスタックにセーブするLDRr1、r0、12セーブしたR0を割り込みスタックからリカバーするこのポイントでは割り込みを再イネーブルするのが安全である。この前のポイントではそのようにすることは安全でない。その理由は、割り込みスタックからすべてのデータを回収する前に第2の割り込みのサービスが認められた場合、オーバーライトされ得る割り込みスタック上に記憶されたデータがあるからである。MRSr0、cpsrCPSRを読み出すBICr0、r0、0x80割り込みディスエーブルビットをクリアするMSRcpsr_c、r0CPSRを戻すように書き込むINTERRUPTREENABLE割り込みを再イネーブルする前のサイクルカウント=11D9Mとするプロセスコンテキストの残りのセーブを続けることができるSTRr1、sp、14IRQスタックからリカバーしたR0をセーブするSTRr2、sp、34SVCスタックにR0をセーブするSTRr3、sp、44SVCスタックにR3をセーブするSTRR12、sp、54SVCスタックにR12をセーブするSTRlr、spc、64SVCスタックにLR_SVCをセーブする次に割り込みを続け、サービスする各命令の横にある括弧内の文字は、各命令に必要なメモリまたはデータサイクル数を示し、ここでMは1つのメモリサイクルに等しく、Dは1つのデータサイクルに等しい。サイクルの数は割り込みを再イネーブルできるポイントであるINTERRUPTREENABLEと表示されたポイントまで示されている。割り込みハンドラーの開始時からこのポイントまでのサイクルの数は、割り込みのレイテンシーを決定し、サイクル数が多い場合、割り込みのレイテンシーが大きくなり、他方、サイクル数が少なければ割り込みのレイテンシーは小さくなる。上記コードフラグメント内には割り込みハンドラーの第1命令に制御信号を送るためにハードウェアが必要とする多くの付加的サイクルは示されていない。本発明の好ましい実施例を使用する場合でも使用しない場合でも、このサイクル数は同じであるので、本書では簡潔にするために省略されている。上記コードフラグメントに示された種々の命令により実行されるプロセスの説明を容易にするために図4A~4Eを添付したので、次にこれら図について説明する。この例では1つの割り込みの例外が生じたので、プロセッサは割り込み作動モードに入っており、このモードでプロセッサはレジスタ420にアクセスしたと見なす。図4Aにおいてレジスタ430として識別されたリターンステートレジスタにはこの割り込み作動モードからのプロセッサのリターンステートデータが記憶される。特にこのリターンステートデータはレジスタLR_IRQおよびSPSR_IRQを含む。図4Aはスタックのうちの2つ、すなわち割り込み作動モードからアクセスできる割り込みスタック400およびスーパーバイザースタック410を示しており、割り込み作動モードではプロセッサはスーパーバイザースタックポインタSP_SVCを含むレジスタにはアクセスできないので、割り込み作動モードからスーパーバイザースタック410にはアクセスできない。実行しなければならない最初のプロセスは、リターンステート、すなわちレジスタ430の内容を割り込みスタック400にセーブすることである。リターンステートのセーブの他に、割り込みスタック400にはR0の内容もセーブされるので、レジスタR0を一時的レジスタとして使用できる。この動作は図4Aで番号435によって表示されており、上記コードフラグメントに記載されている4つの命令によって実行される。開示した実現例ではリンクレジスタLR_IRQが正しくリターンアドレスをポイントするように、このリンクレジスタを調節しなければならないので、上記コードフラグメントに記載されている初期のSUB命令しか必要とされない。従って、図4Bを参照すると、次に割り込みスタック400にLR_RIQ、SPSR_IRQおよびR0の内容が記憶されるポイントにある。割り込みスタック400のスタックポインタSP_IRQはデクリメントされない。その理由は、割り込みスタックにセーブされたばかりのリターンステートおよびR0データはプロセスがモードを変えるとすぐに割り込みスタックからロードされるからである。スタックポインタはデクリメントしないほうが安全である。その理由は、この時点では割り込みはディスエーブルされているので、データをセーブしてからモードを変えた後にデータを読み出すまでの間に、別の割り込みにサービスすることは不可能であるからである。図4Bに示されているように、次のステップは割り込みスタックのスタックポインタSP_IRQをレジスタR0に記憶することであり、このレジスタは一時的レジスタとして使用されている。割り込み作動モードから一旦出ると、これによってそのスタックポインタにアクセスすることが可能となる。この時点でプロセッサモードはシステムモードに変化する。この変化は図4B内の参照番号445で表示された4つの命令によって実行される。従って、図4Cに示されるように、次にプロセッサはスーパーバイザー作動モードとなり、この作動モードでプロセッサはレジスタ450にアクセスする。作動モードの間ではレジスタR0が共用されるので、レジスタR0はまだ割り込みスタック400のためのスタックポインタを含む。しかしながら、リターンステートはレジスタ440に記憶されている、スーパーバイザー作動モードからのプロセッサのリターンステートである。次に、プロセスはスーパーバイザースタック上にレジスタのうちの1つの内容を記憶するので、この内容を一時的レジスタとして使用できる。この例ではレジスタR1の内容がスーパーバイザースタックに記憶される。次にプロセスは割り込みスタック400からリターンステート情報およびセーブされたR0値をリカバーし、これをスーパーバイザースタック410にスタックする。これらプロセスは図4C内の番号455で表示された7つの命令によって実行される。特にスーパーバイザースタックポインタを8個の4バイトワードだけデクリメントするのにSUB命令が使用される。次に、スーパーバイザースタック410内の特定のロケーション内にR1の内容を記憶するのに、STR命令が使用される。次に、スーパーバイザースタック上の特定のロケーションにLR_IRQを記憶するのにLDRおよびSTR命令が使用される。この場合次のLDRおよびSTR命令がスーパーバイザースタック上の特定ロケーションにSPSR_IRQを記憶するのに使用される。この目的のためには一時的レジスタR1が使用されることが理解できよう。割り込みスタック400に記憶されたR0の値を一時的レジスタR1に記憶するのに最後のLDR命令が使用される。しかしながら、スーパーバイザースタックにその値を記憶するのに必要な次のSTR命令は、すぐには使用されない。その理由は、この時点では割り込みを再イネーブルすることが安全であるからであり、割り込みのレイテンシーを最小にするために割り込みを再イネーブルすることに優先権が与えられる。前のポイントではイネーブルを再イネーブルすることは安全でないことに留意すべきである。その理由は、割り込みスタック400からデータのすべてをリカバーする前に第2の割り込みのサービスが許可された場合に、オーバーライトされ得るデータが割り込みスタック400に記憶されているからである。従って、次に図4Dに移る。図4Dにおいて番号465で示され、前のコードフラグメントに含まれている3つの命令によって割り込みのイネーブル化が実行される。実際にはこれら命令はSPSRレジスタを読み出し、割り込みディスエーブルビットをクリアし、次に対応するデータをSPSRレジスタに戻すように書き込み、よって割り込みを再イネーブルする。このポイントにおいて、次にプロセスコンテントの他の部分のセーブを続けることができる。このセーブは、図4D内の番号475によって示された5つのSTR命令によって実行される。特に最初のSTR命令はR1の内容をスーパーバイザースタック内の特定ロケーションに書き込むことに留意すべきである。このレジスタは実際に元のR0データ、すなわち図4Cにおいて実行される命令のうちの1つによりスーパーバイザースタック内に既に移動されたR1の内容を含む。次に、レジスタR2、R3、R12およびLR_SVCの内容もスーパーバイザースタック410へ移動される。他のレジスタの内容もATPCSARMサム手順コール規格に従う、次にコールされるコードによって自動的にセーブされるので、コードがATPCSに従わなければこのポイントではスーパーバイザースタックに明示的にセーブする必要はない。図4Eは次にこのポイントにおけるスーパーバイザースタック410の最終ステートを示している。図4Dおよび4Eでは、割り込みスタック400は最初に図4A内の割り込みスタックに移動したデータの3つの部分を含むものとして示されていることに留意すべきである。しかしながらこのデータはスーパーバイザースタックに記憶されているので冗長であり、よってすべての意図および目的に対し、割り込みスタック400を空であると見なすことができることは明らかである。したがって、このポイントでは割り込みスタック400を続け、これをサービスすることが安全である。この割り込みは別のタスクへのコンテキストスイッチングにより一般に生じる。理解できるように、この公知の従来技術を使用した場合、割り込みハンドラーは割り込みを再イネーブルできるまでに11のDタイプのサイクルおよび9つのMタイプのサイクルを必要とするので、これによって割り込みレイテンシーが比較的大きくなる。割り込みを再イネーブル化するまでに必要な命令の数も重要である。図4A~4Eと組み合わせて上記に添付したコードフラグメントから判るように、この従来技術のアプローチを使って割り込みを再イネーブル化できるまでに20の命令を実行しなければならない。以上で公知の従来技術に従って、図3Aおよび3Bに示されているようなシステムを実現するために、割り込みのスタート時に必要なプロセスについて説明したので、次に本発明の好ましい実施例に従ってかかるシステムを実現するために割り込みのスタート時に必要なプロセスについて説明する。特に説明を助けるために、以下、本発明の好ましい実施例に従って図3Aおよび3Bに示されているようなシステムを実現するのに割り込みのスタート時に必要なコードを示すコードフラグメントについて記載する。SRS命令を使ってSVCスタックに直接リターンステートをセーブするSUBlr、lr、4リターンアドレスをポイントするようにLR_IRQを調節するSRSDBsp_svcSVCスタックにリターンステータスをセーブする次にプロセッサをシステムSVCモードに変え、同時に割り込みを再イネーブルする。この時点ではSVCスタックにリターンステートがセーブされているので、割り込みを再イネーブルするのが安全である。従ってこの割り込みスタックは空であり、割り込みスタックをコンテキストスイッチングすることなくすなわちタスクごとに別個の割り込みスタックを設けなくても、コンテキストスイッチングが可能である。MRSlr、cpsrcpsrを読み出すBIClr、lr、0x1f0x80モードビットをマスクアウトし、割り込みをクリアするORRlr、lr、0x13またはSVCモード用のモードビットをマスクインするMSRcpsr_c、lr新しいモードおよび割り込みビットを書き戻すINTRERUPTREENABLE割り込みを再イネーブルする前のサイクルカウント5D2MとするプロセスコンテキストSTMDBspr0r3r12lr次に割り込みを続け、サービスする前に説明した従来技術のコードフラグメントと同じように、括弧内の文字はサイクル数を示し、SRSDB命令の横の文字2Mは2つのメモリサイクルであることを示す。上記コードフラグメント内の種々の命令によって実行されるプロセスを略図で示す、図5A~5Dを参照して、以下、このコードフラグメントについて説明する。図4A~4Eを参照して前に説明した例と同じように、この例では既に割り込みの例外が発生しており、よってプロセッサはレジスタ520にアクセスする割り込み作動モードに入っていると見なす。この割り込み作動モードからのプロセッサのリターンステートデータは図5A内にレジスタ530として表示されているリターンステートデータ内に記憶される。図5Aは割り込みスタック500およびスーパーバイザースタック510も示している。コードフラグメントはこれまで説明した従来技術のコードフラグメントに含まれる命令に同一のSUB命令でスタートするが、この命令はこれまで説明したように、割り込みリンクレジスタLR_IRQが正しいリターンアドレスをポイントすることを保証するのに必要である。次に、好ましい実施例によって提供される新しい命令、すなわちSRS命令は割り込み作動モードで作動しながらリターンステートデータを直接スーパーバイザースタック510にセーブするために実行される。以下、この命令のフォーマットについて詳細に説明する。しかしながら、この例DecrementBeforeにおけるスーパーバイザースタックのアドレスモードを表示するために、SRS命令には文字DBが添付されていることに留意されたい。この命令はリターンステートデータをセーブすべきスタックを識別するフィールドも含み、本例におけるこのフィールドはスーパーバイザースタック510のためのスタックポインタSP_SVCを含む。最後に、命令の終了部にあるイクスクラメーションマークは、一旦リターンステートデータがセーブされると、スタックポインタを更新しなければならないことを示している。一旦SRS命令が実行されると、割り込みスタックおよびスーパーバイザースタックの内容は図5Bに示されるようになる。特にスーパーバイザースタック510にはレジスタLR_IRQおよびSRSR_IRQの内容が追加され、スーパーバイザースタックポインタSP_SVCが更新されていることに留意すべきである。この段階では、割り込み作動モードからのリターンステートデータの内容はスーパーバイザースタックに記憶されているので、処理ユニットの作動モードをスーパーバイザーモードに変更することが可能である。更に、スーパーバイザースタック510にはこのリターンステートデータが直接記憶され、割り込みスタック500は空のままであるので、この時点で割り込みを再イネーブル化することは安全である。割り込みスタック500は空であるので、割り込みスタックをコンテキストスイッチングしなくても、すなわちタスクごとに別個の割り込みスタックを設けなくても、コンテキストスイッチングが認められる。従って、図3Aおよび3Bに示されているようなシステム内でこのプロセスを使用できる。作動モードおよび再イネーブル可能な割り込みを変更するのに使用される4つの命令は、図5Cでは参照番号540がついている。図5Cはスーパーバイザー作動モードからのリターンステートを含むレジスタ560を備えた、スーパーバイザー作動モードからアクセス可能なレジスタ550を示している。このポイントにおいてプロセスはプロセスコンテキストの残りをセーブし続けることができる。スーパーバイザースタックのうちの順次ロケーション内に関連するレジスタを記憶できるので、単一のSTM命令を介してこの動作を実行することができる。図5Cではこの命令は参照番号570によって表示されており、スーパーバイザーレジスタ550とスーパーバイザースタック510との間の種々のラインによってプロセスが略図で示されている。STM命令に添付された文字DBはスーパーバイザースタックがデクリメントビフォアアドレスモードで作動していることを示しており、STM命令内のスタックポインタIDの後のイクスクラメーションマークはスタックポインタを調節しなければならないことを示している。次に命令内で記憶すべきレジスタが識別される。図5DはSTM命令を実行した後のスーパーバイザースタック510の内容を示す。スーパーバイザースタック510の内容はデータの順序が若干異なっているが、図4Eを参照して前に説明したスーパーバイザースタック410の内容と同じであることが理解できよう。従って、図5A~5Dを参照して説明した好ましい実施例のプロセスは図4A~4Eを参照して説明した従来技術のプロセスと同じ結果をもたらすことが理解できよう。従って、前記コードフラグメントから明らかなように、新しいSRS命令を含む好ましい実施例の技術によって、割り込みハンドラーは割り込みを再イネーブルできるようになるまでに5つのDタイプのサイクルおよび2つのMタイプのサイクルしかかからないよう保証できる。割り込みを再イネーブルできる前に必要な命令数を比較すると、好ましい実施例のアプローチを使用する割り込みハンドラーは従来技術のアプローチに従って実行するのに20の命令が必要であるのに対して、割り込みを再イネーブルできる前に6つの命令を実行するだけでよい。従って、全体に本発明の好ましい実施例のアプローチを使用すると、割り込みハンドラーはより少ないDタイプのサイクル、より少ないMタイプのサイクルおよびより少ない命令しか必要としない。低速メモリシステムではMタイプのサイクルのほうがDタイプのサイクルよりもより低速であり、更に命令が実行されるごとに命令自体をフェッチするのに実行される追加メモリフェッチが必要となり得ることにも留意すべきである。従って、DタイプのサイクルよりもMタイプのサイクルのほうが4倍低速であるシステム例を検討すると、このシステムは好ましい実施例の事実を使用した場合と使用しない場合とで割り込みハンドラーに対して次の性能指数を与える。次の式において、Dはデータサイクル数を示し、Mはメモリサイクル数を示し、Iは実行される命令数を示し、命令の各々は付加的メモリフェッチを必要とする。好ましい実施例の技術を利用しない場合:11D9M420I4=127サイクルとなり、好ましい実施例の技術を使用した場合:5D2M46I4=37サイクルとなる。以上で本発明の好ましい実施例のアプローチを利用する利点について説明したので、次に新しいSRS命令についてより詳細に説明する。特に本発明の好ましい実施例のSRS命令の簡略バッカス-ナウアー記法を次のように示す。説明条件EQ等しいZNE等しくないZCS桁上げセットCHS符号なし以上CCC桁上げクリアCLO符号なし小CMIマイナスNPLプラスNVSオーバーフローセットVVCオーバーフロークリアVHI符号なし大CZLS符号なし以下C│ZGE以上LT未満NVGTより大ZLE以下Z│AL常時1説明IAこれより後をインクリメントEAに等価EA空昇順IAに等価IBこれより前をインクリメントFAに等価FAフル昇順IBに等価DBこれより前をデクリメントFDに等価FDフル降順DBに等価DAこれより後をデクリメントEDに等価ED空降順DAに等価説明SP_USERユーザーモードスタックポインタSP_FIQ高速割り込みリクエストスタックポインタSP_IRQ割り込みリクエストスタックポインタSP_SVCスーパーバイザースタックポインタSP_ABTアボートスタックポインタSP_UND無定義スタックポインタ当業者であれば、簡略バッカス-ナウアー記法に精通しているはずである。しかしながらここに簡単な説明をする。省略されたフォームでは、{}内のアイテムはオプションアイテムを示し、アングル括弧<>内のアイテムは図に示された記号の拡張と交換できる置換記号を示す。記号│はシンボルのリスト内のシンボルを分けるのに使用されており、これらシンボルのうちの1つを正確に置換記号として使用できることを示すまたはと解釈できる。従って、SRS命令はプロセッサでの利用できるモードのうちの1つに属すスタックを特定する、<fully_qualified_stack_pointer>が指定するスタックへプロセッサのリターンステートをセーブすることが理解できよう。<fully_qualified_stack_pointer>の後に記号が続く場合、このことは動作が完了した後に<fully_qualified_stack_pointer>が更新されることを示している。ARMプロセッサの例を検討すると、6つの作動モードが得られる。すなわちユーザーモードと、スーパーバイザーモードと、アボートモードと、無定義モードと、2つの割り込みモード、すなわちIRQおよびFIQが得られる。従って、上記簡略バッカス-ナウアー記法に示めされているように、<fully_qualified_stack_pointer>は値SP_USER、SP_FIQ、SP_IRQ、SP_SVC、SP_ABTまたはSP_UNDのうちのいずれかをとり得る。<COND>は作動を実行させるのに真となっていなければならない多数の条件のうちの1つを特定する。プロセッサがアクセスできるCPRレジスタは、以下、N、Z、V、Cと称す4つのフラグを示す。最後の代数学的演算の結果が負の場合、フラグNは1にセットされ、最後の代数学的演算の結果が0の場合、フラグZは1にセットされ、最後の代数学的演算の結果がオーバーフローした場合、フラグVは1にセットされ、最後の代数学的演算の結果が桁上げを生じさせた場合、フラグCは1にセットされる。SRS命令の上記簡略バッカス-ナウアー記法では、各値の説明と共に<COND>フィールドがとり得る種々の値およびCPSRレジスタで利用できるN、Z、VおよびCフラグに関し、このフィールドが何に一致するのかの判断を示すテーブルが提供される。したがって、このテーブルは実際にはCPSRレジスタ内に存在するN、Z、VおよびCフラグに基づき、命令を実行するかどうかをプロセッサがどのように判断するかを記述するものである。例として<COND>フィールドが値MIにセットされている場合、プロセッサはフラグNが1にセットされているかどうかを見るようにチェックし、1にセットされている場合、命令を実行し、そうでない場合、命令は実行されない。<COND>フィールドが特定されていない場合、このことは演算を常に実行すべきことを示すALの<COND>を特定することと均等である。<addr_mode>フィールドは作動のためのアドレス指定モードを特定し、好ましい実施例で利用できる種々のアドレス指定モードは命令の簡略バッカス-ナウアー記法に関連して上記のように記載される。前に述べたように、<fully_qualified_stack_pointer>はプロセッサの実行モードのうちの1つに属すスタックポインタの完全に許可された名称を特定する。次は、簡略化バッカス-ナウアー記法から誘導できるSRS命令の例である。SRSDBSP_SVCSRSEQDBSP_SVCSRSEQDBSP_SVC図6は本発明の好ましい実施例に係わるデータ処理装置を内蔵するシステムを示すブロック図である。好ましい実施例ではデータ処理装置はCPU10内に設けられたCPUコア60のある形態をとる。CPUコア60はデータ処理命令を実行する処理ユニットおよびその処理ユニットがアクセスできる一組のレジスタ70を内蔵する。CPU10は一般にCPUコア60と、多数の別のオプションの素子、例えばメモリ管理ユニットMMU45およびキャッシュ50とを含む。CPU10は一般にバス30を介して他の素子に接続され、従って、リードオンリーメモリROM40およびランダムアクセスメモリRAM20に接続できる。ROM40は特にCPUコア60が実行する命令80を記憶するようになっている。本発明の好ましい実施例によれば、RAM20内には処理ユニットの各作動モードに対して設けられるスタック90を記憶できる。本発明の好ましい実施例のこれまでの説明から、好ましい実施例を使用する結果、多数の利点が得られることが理解できよう。第1に、本発明の好ましい実施例を使用することによってコードサイズを小さくできる。前に述べた例では、好ましい実施例を使用すると、どのように割り込みハンドラーの開始時における命令数を20から6へ短縮できるかが示されている。更に好ましい実施例を使用する結果、一般に性能が改善される。再び上記例では、好ましい実施例は割り込みハンドラーの開始時のサイクルの数をどのようにして127から37に少なくできるかも示されている。サイクル数が少なくなることによって割り込みレイテンシーも小さくできる。この理由は、これらサイクルは一般に割り込みがディスエーブルされるクリティカルなポイントで生じるからである。好ましい実施例の技術を利用する更に別の驚くべき利点は、この技術を使ってプロセッサの電力消費量を低減できることである。この電力消費量は携帯電話およびパーソナルデジタルアシスタントPDAなどのバッテリー給電デバイスでは極めて重要なものである。これまで述べた例および説明に基づくシステムを検討し、高優先度の割り込みをサービスするのに10マイクロ秒の割り込み応答時間を維持するのに、常にこのシステムが必要であると仮定すると、公知の従来のアプローチを使用するシステムの場合、10マイクロ秒で127サイクルを実行できることを保証するためにシステムは充分な速度で作動しなければならないことが明らかである。しかしながら、システムが本発明の好ましい実施例の技術を使用する場合、10マイクロ秒で37サイクルを実行するのに充分な速度で作動するだけでよい。従って、次の式は必要とされる最低クロック速度を決定するものである。好ましい実施例の技術を利用しない場合:10E-5秒/127サイクル=7874E-08秒/サイクル1/7874E-08=127E7サイクル/秒=127MHzとなる。好ましい実施例の技術を利用した場合:10E-5秒/37サイクル=2701E-08秒/サイクル1/2701E-08=37E6サイクル/秒=37MHzとなる。プロセッサによって消費される電力はほぼ周波数に対して線形であるので、好ましい実施例の技術を利用するシステムは好ましい実施例の技術を利用しない同様なシステムの電力の約2937÷128×100しか利用しない。以上で本発明の特定の実施例について説明したが、本発明はこの実施例だけに限定されるものではなく、本発明の範囲で多くの変形および追加を行うことが可能であることが明らかとなろう。例えば本発明の範囲から逸脱することなく、次の従属請求項の特徴と独立請求項の特徴とを種々組み合わせることができる。"