(57)【要約】【課題】複数の個別記憶アドレス領域内に記憶された可変長命令を実行する。【解決手段】可変長命令の実行をサポートするシステムにおいて、プログラムは個別記憶領域内に記憶され、可変長命令は２つの個別記憶領域の間の間隔にまたがる。このような可変長命令の実行が試みられると、アボート・ハンドラが開始され、記憶領域の１つの終了部分を他の記憶領域の開始部分と共に個別のフィックス・アップ記憶領域に複写し、そこでこれらが連結されるよう機能する。それから、フィックス・アップ記憶領域からのこの可変長命令の実行がトリガされる。この実行は、制御がシングル・ステップ例外ハンドラに戻される前に、ハードウェアが間隔にまたがる単一の命令のみを実行するようにするシングル・ステップ・フラグのセットによって制限される。シングル・ステップ例外ハンドラは、プログラム・フローを間隔にまたがる可変長命令の後の後続記憶領域内の点に戻す。【選択図】図４
2004110827.tif 000002
【特許請求の範囲】
【請求項１】
　データ処理装置のメモリ内の複数の個別記憶アドレス領域に記憶された可変長命令のシーケンスを実行する方法であって、
　（ｉ）２つの個別記憶アドレス領域にまたがる可変長命令を実行しようとする試みを検知するステップであって、前記２つの個別記憶アドレス領域は現在記憶アドレス領域および後続記憶アドレス領域である前記検知するステップと、
　（ｉｉ）前記現在記憶アドレス領域の終了部分と前記後続記憶アドレス領域の開始部分とから命令データを連結して前記メモリのフィックス・アップ記憶アドレス領域に記憶し、前記可変長命令を含む連結命令データを形成するステップと、
　（ｉｉｉ）前記フィックス・アップ記憶アドレス領域内の前記連結命令データ内からの前記現在可変長命令を実行するようプログラム実行フローを変更するステップと、
　（ｉｖ）前記後続記憶アドレス領域内からの前記可変長命令に続く命令を実行するようプログラム実行フローを復元するステップと、
を含む前記方法。
【請求項２】
　請求項１に記載の方法において、前記検知ステップがハードウェア制御の下で実行される、前記方法。
【請求項３】
　請求項１に記載の方法において、前記連結、変更および復元ステップが、ソフトウェア制御の下で実行される、前記方法。
【請求項４】
　請求項１に記載の方法において、可変長命令が、実行される前に前記メモリから命令バッファに取出される、前記方法。
【請求項５】
　請求項４に記載の方法において、前記可変長命令が前記命令バッファから読取られる際に、前記検知ステップが実行される、前記方法。
【請求項６】
　請求項４に記載の方法において、可変長命令の前記命令バッファへの取出しが、ハードウェア制御の下で連続する記憶アドレスから命令データを取出すことによって実行される、前記方法。
【請求項７】
　請求項６に記載の方法において、前記現在記憶アドレス領域の終点を越えた記憶アドレスからバッファ記憶位置への取出しが試みられた時、前記バッファ記憶位置が有効な命令データを含んでいないとしてマークされる、前記方法。
【請求項８】
　請求項７に記載の方法において、前記検知ステップが、有効な命令データを含んでいないとしてマークされたバッファ記憶位置に少なくとも部分的に記憶された命令を実行しようとする試みを検知するステップを含む、前記方法。
【請求項９】
　請求項１に記載の方法において、プログラム・カウンタ値が、実行されるべき可変長命令の位置を特定する、前記方法。
【請求項１０】
　請求項９に記載の方法において、前記変更および復元ステップが、前記プログラム・カウンタ値を修正することによって動作する、前記方法。
【請求項１１】
　請求項１に記載の方法において、更に、シングル・ステップ・フラグをセットするステップを含み、前記シングル・ステップ・フラグが、可変長命令のハードウェア実行形式を単一の可変長命令に制限するよう機能する、前記方法。
【請求項１２】
　請求項１１に記載の方法において、前記シングル・ステップ・フラグが、前記復元ステップを実行するために制御がソフトウェアに戻される前に、可変長命令のハードウェア実行形式を、前記連結命令データからの単一の可変長命令に制限するよう機能する、前記方法。
【請求項１３】
　請求項１１に記載の方法において、前記単一の可変長命令のハードウェア実行の際、前記シングル・ステップ・フラグがハードウェア制御の下でクリアされる、前記方法。
【請求項１４】
　請求項１１に記載の方法において、前記シングル・ステップ・フラグがコプロセッサ・レジスタ内に記憶される、前記方法。
【請求項１５】
　請求項１に記載の方法において、更に、前記現在可変長命令に続く後続可変長命令の前記後続記憶領域内の開始アドレスを計算するステップを含む、前記方法。
【請求項１６】
　請求項１５に記載の方法において、前記計算ステップが、前記後続記憶領域の開始アドレスと、前記現在可変長命令の実行形式に続く前記後続可変長命令を指す前記フィックス・アップ記憶領域内のプログラム・カウンタ値と、を入力として使用する、前記方法。
【請求項１７】
　請求項１６に記載の方法において、更に、前記変更ステップの前に前記後続記憶領域の前記開始アドレスを記憶するステップを含む、前記方法。
【請求項１８】
　請求項１に記載の方法において、前記可変長命令が、前記データ処理装置によってネイティブ命令として実行されるジャバカード・バイトコード命令である、前記方法。
【請求項１９】
　請求項１８に記載の方法において、前記データ処理装置がまた、更なる命令セットの命令の実行形式をサポートし、前記連結、変更および復元ステップが前記更なる命令セットの命令の制御の下で実行される、前記方法。
【請求項２０】
　請求項１９に記載の方法において、前記変更および復元ステップが、特定された記憶アドレス位置から開始するジャバ・バイトコードの実行形式に切換えるよう機能する状態切換分岐命令を使用して実行される、前記方法。
【請求項２１】
　請求項１に記載の方法において、実行されるべきプログラムが、前記メモリ内の断片化された記憶領域内に記憶される、前記方法。
【請求項２２】
　メモリ内の複数の個別記憶アドレス領域内に記憶された可変長命令のシーケンスを実行するための装置であって、
　（ｉ）２つの個別記憶アドレス領域にまたがる可変長命令を実行しようとする試みを検知する検知器であって、前記２つの個別記憶アドレス領域は、現在記憶アドレス領域および後続記憶アドレス領域である前記検知器と、
　（ｉｉ）前記現在記憶アドレス領域の終了部分と前記後続記憶アドレス領域の開始部分とから命令データを連結して前記メモリのフィックス・アップ記憶アドレス領域に記憶し、前記可変長命令を含む連結命令データを形成する連結論理と、
　（ｉｉｉ）前記フィックス・アップ記憶アドレス領域内の前記連結命令データ内から前記現在可変長命令を実行するよう、プログラム実行フローを変更する変更論理と、
　（ｉｖ）前記後続記憶アドレス領域内からの前記可変長命令に続く命令を実行する、プログラム実行フローを復元する復元論理と、
を含む前記装置。
【請求項２３】
　請求項２２に記載の装置において、前記検知器が非プログラマブル・ハードウェアである、前記装置。
【請求項２４】
　請求項２２に記載の装置において、更に前記連結論理、前記変更論理および前記復元論理が、ソフトウェア制御の下で動作するプログラマブル・ハードウェアを含む、前記装置。
【請求項２５】
　請求項２２に記載の装置において、可変長命令が、実行される前に前記メモリから命令バッファに取出される、前記装置。
【請求項２６】
　請求項２５に記載の装置において、前記可変長命令が前記命令バッファから読取られる際に、前記検知器が動作する、前記装置。
【請求項２７】
　請求項２５に記載の装置において、可変長命令の前記命令バッファへの取出しが、ハードウェア制御の下で連続する記憶アドレスから命令データを取出すことによって実行される、前記装置。
【請求項２８】
　請求項２７に記載の装置において、前記現在記憶アドレス領域の終点を越えた記憶アドレスからバッファ記憶位置への取出しが試みられた時、前記バッファ記憶位置が有効な命令データを含んでいないとしてマークされる、前記装置。
【請求項２９】
　請求項２８に記載の装置において、前記検知器が、有効な命令データを含んでいないとしてマークされたバッファ記憶位置に少なくとも部分的に記憶された命令を実行しようとする試みを検知するよう動作する、前記装置。
【請求項３０】
　請求項２２に記載の装置において、プログラム・カウンタ値が、実行されるべき可変長命令の位置を特定する、前記装置。
【請求項３１】
　請求項３０に記載の装置において、前記変更論理および前記復元論理が、前記プログラム・カウンタ値を修正することによって動作する、前記装置。
【請求項３２】
　請求項２２に記載の装置において、シングル・ステップ・フラグをセットすることを含み、前記シングル・ステップ・フラグが、可変長命令のハードウェア実行形式を単一の可変長命令に制限するよう機能する、前記装置。
【請求項３３】
　請求項３２に記載の装置において、前記シングル・ステップ・フラグが、前記復元論理を実行するために制御がソフトウェアに戻される前に、可変長命令のハードウェア実行形式を、前記連結命令データからの単一の可変長命令に制限するよう機能する、前記装置。
【請求項３４】
　請求項３２に記載の装置において、前記単一の可変長命令のハードウェア実行の際、前記シングル・ステップ・フラグがハードウェア制御の下でクリアされる、前記装置。
【請求項３５】
　請求項３２に記載の装置において、前記シングル・ステップ・フラグがコプロセッサ・レジスタ内に記憶される、前記装置。
【請求項３６】
　請求項２２に記載の装置において、前記現在可変長命令に続く後続可変長命令の前記後続記憶領域内の開始アドレスを計算するよう動作する計算論理を含む、前記装置。
【請求項３７】
　請求項３６に記載の装置において、前記計算論理が、前記後続記憶領域の開始アドレスと、前記現在可変長命令の実行形式に続く前記後続可変長命令を指す前記フィックス・アップ記憶領域内のプログラム・カウンタ値と、を入力として使用する、前記装置。
【請求項３８】
　請求項３７に記載の装置において、前記変更の前に前記後続記憶領域の前記開始アドレスを記憶することを含む、前記装置。
【請求項３９】
　請求項２２に記載の装置において、前記可変長命令が、前記データ処理装置によってネイティブ命令として実行されるジャバカード・バイトコード命令である、前記装置。
【請求項４０】
　請求項３９に記載の装置において、前記データ処理装置がまた、更なる命令セットの命令の実行形式をサポートし、前記連結、変更および復元論理が前記更なる命令セットの命令の制御の下で実行される、前記装置。
【請求項４１】
　請求項４０に記載の装置において、前記変更論理および前記復元論理が、特定された記憶アドレス位置から開始するジャバ・バイトコードの実行形式に切換えるよう機能する状態切換分岐命令を使用する、前記装置。
【請求項４２】
　請求項２２に記載の装置において、実行されるべきプログラムが、前記メモリ内の断片化された記憶領域内に記憶される、前記装置。
【請求項４３】
　データ処理装置のメモリ内の複数の個別記憶アドレス領域内に記憶された可変長命令のシーケンスを実行するよう動作するデータ処理装置を制御するための、コンピュータ・プログラム製品であって、
　該コンピュータ・プログラム製品は、２つの個別記憶アドレス領域にまたがる可変長命令を実行しようとする試みの後に動作するコードを含み、前記２つの個別記憶アドレス領域は、現在記憶アドレス領域および後続記憶アドレス領域であって、
　前記コードが、
　（ｉ）前記現在記憶アドレス領域の終了部分と前記後続記憶アドレス領域の開始部分とから命令データを連結して前記メモリのフィックス・アップ記憶アドレス領域に記憶し、前記可変長命令を含む連結命令データを形成する連結コードと、
　（ｉｉ）前記フィックス・アップ記憶アドレス領域内の前記連結命令データ内からの前記現在可変長命令を実行するようプログラム実行フローを変更するよう動作する変更コードと、
　（ｉｉｉ）前記可変長命令に続く命令を前記後続記憶アドレス領域内から実行するようプログラム実行フローを復元するよう動作する復元コードと、
を含む前記コンピュータ・プログラム製品。
【請求項４４】
　請求項４３に記載のコンピュータ・プログラム製品において、２つの個別記憶アドレス領域にまたがる可変長命令を実行しようとする前記試みの検知が、ハードウェア制御の下で実行される、前記コンピュータ・プログラム製品。
【請求項４５】
　請求項４３に記載のコンピュータ・プログラム製品において、可変長命令が、実行される前に前記メモリから命令バッファに取出される、前記コンピュータ・プログラム製品。
【請求項４６】
　請求項４５に記載のコンピュータ・プログラム製品において、前記可変長命令が前記命令バッファから読取られる際に、前記検知が行なわれる、前記コンピュータ・プログラム製品。
【請求項４７】
　請求項４５に記載のコンピュータ・プログラム製品において、可変長命令の前記命令バッファへの取出しが、ハードウェア制御の下で連続する記憶アドレスから命令データを取出すことによって実行される、前記コンピュータ・プログラム製品。
【請求項４８】
　請求項４７に記載のコンピュータ・プログラム製品において、前記現在記憶アドレス領域の終点を越えた記憶アドレスからバッファ記憶位置への取出しが試みられた時、前記バッファ記憶位置が有効な命令データを含んでいないとしてマークされる、前記コンピュータ・プログラム製品。
【請求項４９】
　請求項４８に記載のコンピュータ・プログラム製品において、前記検知が、有効な命令データを含んでいないとしてマークされたバッファ記憶位置に少なくとも部分的に記憶された命令を実行しようとする試みの検知することを含む、前記コンピュータ・プログラム製品。
【請求項５０】
　請求項４３に記載のコンピュータ・プログラム製品において、プログラム・カウンタ値が、実行されるべき可変長命令の位置を特定する、前記コンピュータ・プログラム製品。
【請求項５１】
　請求項５０に記載のコンピュータ・プログラム製品において、前記変更コードおよび前記復元コードが、前記プログラム・カウンタ値を修正することによって動作する、前記コンピュータ・プログラム製品。
【請求項５２】
　請求項４３に記載のコンピュータ・プログラム製品において、更に、シングル・ステップ・フラグをセットするよう動作するセッティング・コードを含み、前記シングル・ステップ・フラグが、可変長命令のハードウェア実行を単一の可変長命令に制限するよう機能する、前記コンピュータ・プログラム製品。
【請求項５３】
　請求項５２に記載のコンピュータ・プログラム製品において、前記シングル・ステップ・フラグが、前記復元コードを実行するために制御がソフトウェアに戻される前に、可変長命令のハードウェア実行形式を、前記連結命令データからの単一の可変長命令に制限するよう機能する、前記コンピュータ・プログラム製品。
【請求項５４】
　請求項５２に記載のコンピュータ・プログラム製品において、前記単一の可変長命令のハードウェア実行の際、前記シングル・ステップ・フラグがハードウェア制御の下でクリアされる、前記コンピュータ・プログラム製品。
【請求項５５】
　請求項５２に記載のコンピュータ・プログラム製品において、前記シングル・ステップ・フラグがコプロセッサ・レジスタ内に記憶される、前記コンピュータ・プログラム製品。
【請求項５６】
　請求項４３に記載のコンピュータ・プログラム製品において、前記現在可変長命令に続く後続可変長命令の前記後続記憶領域内の開始アドレスを計算するよう動作する計算コードを含む、前記コンピュータ・プログラム製品。
【請求項５７】
　請求項５６に記載のコンピュータ・プログラム製品において、前記後続記憶領域の開始アドレスと、前記計算コードが、前記現在可変長命令の実行形式に続く前記後続可変長命令を指す前記フィックス・アップ記憶領域内のプログラム・カウンタ値と、を入力として使用する、前記コンピュータ・プログラム製品。
【請求項５８】
　請求項５７に記載のコンピュータ・プログラム製品において、前記変更の前に前記後続記憶領域の前記開始アドレスを記憶することを含む、前記コンピュータ・プログラム製品。
【請求項５９】
　請求項４３に記載のコンピュータ・プログラム製品において、前記可変長命令が、前記データ処理装置によってネイティブ命令として実行されるジャバカード・バイトコード命令である、前記コンピュータ・プログラム製品。
【請求項６０】
　請求項５９に記載の装置において、前記データ処理装置がまた、更なる命令セットの命令の実行形式をサポートし、前記連結、変更および復元コードが前記更なる命令セットの命令の制御の下で実行される、前記コンピュータ・プログラム製品。
【請求項６１】
　請求項６０に記載のコンピュータ・プログラム製品において、前記変更コードおよび前記復元コードが、特定された記憶アドレス位置から開始するジャバ・バイトコードの実行形式に切換えるよう機能する状態切換分岐命令を使用する、前記コンピュータ・プログラム製品。
【請求項６２】
　請求項４３に記載のコンピュータ・プログラム製品において、実行されるべきプログラムが、前記メモリ内の断片化された記憶領域内に記憶される、前記コンピュータ・プログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
　本発明は、データ処理システムの分野に関するものである。特に、本発明は、複数の記憶アドレス領域内に記憶された可変長命令、例えばメモリ内で断片化されたプログラムを、実行するよう動作可能なデータ処理システムに関するものである。
【背景技術】
【０００２】
　可変長命令を実行するデータ処理システムが提供されているのは知られている。このようなシステムの例として、ＡＲＭリミテッドによって製造されたジャゼル（Jazelle）が使用可能なプロセッサがある。これらのプロセッサは、様々なバイト長のジャバ（Java(R)）・バイトコードで形成されているプログラムを実行することができる。このようなシステムにおいて、ある状況においては、可変長命令から成るプログラムを複数の異なる記憶領域に記憶できるようにする、つまりプログラムをメモリ内で断片化することが望ましい。安全なシステムにおいては、このような断片化は、該当するコンピュータ・プログラムの所在を不明瞭にする方法として望ましいであろう。他の状況においては、それは、それぞれが個別であってもそのメモリの全部分を満たすことによって、使用可能なメモリをよりよく使用するために望ましい。
【０００３】
　付随する図面の図１は、このようなシステムにおいて発生する可能性のある問題を示している。特に図１は、２つのオペランドＯｐｄＸＯｐｄＸ’が続くバイトコードＢＣＸを含み、長さ３バイトの可変長プログラム命令を示している。この３バイトの命令は２つの個別記憶領域にまたがり、第１のバイトは現在記憶領域にあり、第２および第３のバイトは後続記憶領域にある。このような可変長命令を実行するための標準ハードウェアは、可変長命令の全てのバイトが連続して隣接する記憶アドレスにおいて見つかると推測する。図１に示される場合において、標準ハードウェアは、可変長命令の第２および第３のバイトはその可変長命令の第１のバイトに直に続くであろうと推測するが、実際にはそれらのバイトは第１のバイトとは離れた個別の記憶領域にある。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
　本発明は、メモリ内に断片的に記憶されたプログラムの可変長命令をサポートすることに関する問題を認識し、これらの問題に対する解決方法を提供する。
【課題を解決するための手段】
【０００５】
　１つの観点から見ると、本発明は、データ処理装置のメモリ内の複数の個別記憶アドレス領域に記憶された可変長命令のシーケンスを実行する方法を提供する。本方法は、以下のステップを含む。
（ｉ）２つの個別記憶アドレス領域にまたがる可変長命令を実行しようとする試みを検知するステップであって、これら２つの個別記憶アドレス領域は、現在記憶アドレス領域および後続記憶アドレス領域であるステップと、
（ｉｉ）現在記憶アドレス領域の終了部分と後続記憶アドレス領域の開始部分との命令データを連結してメモリのフィックス・アップ記憶アドレス領域に記憶し、可変長命令を含む連結命令データを形成するステップと、
（ｉｉｉ）フィックス・アップ記憶アドレス領域内の連結命令データ内からの現在可変長命令を実行するようプログラム実行フローを変更するステップと、
（ｉｖ）可変長命令に続く命令を後続記憶アドレス領域内から実行するようプログラム実行フローを復元するステップ。
【０００６】
　本発明は、境界にまたがる可変長命令を含む個別記憶領域の部分から命令データを連結し、この連結データをフィックス・アップ記憶領域内に記憶する、解決方法を提供する。該当する可変長命令を、このフィックス・アップ領域内の位置から実行することができ、個別記憶領域の間の間隔に続く通常の記憶領域に戻ることができるプログラム・フローが当該位置に続いている。このことは、間隔のまたがりに続く命令の開始アドレスを、間隔にまたがる命令が実行されるまで知ることができない、可変長命令を含む断片化されたプログラム・コードを処理するための機構を提供し、このような機能をサポートするのに必要なソフトウェア・オーバヘッドを低減されたレベルに保つ。特に、本発明の好ましい実施例において、検知ステップはハードウェア制御の下で実行することができ、連結、変更および復元ステップはソフトウェア制御の下で実行することができる。一方、間隔にまたがる可変長命令の実際の実行は、ハードウェアにおいて実行することができる。
【０００７】
　本発明は特に、可変長命令が実行される前にメモリから命令バッファに取出されるシステムにおいて使用するのに適している。このような構成は、個別記憶領域にまたがる命令の識別を、その命令がメモリから命令バッファに取出される際に行うことができ、その命令を実行しようとする試みの検知を、命令バッファから可変長命令を読取ろうとする試みがなされた際に行うことができるので、便利である。
【０００８】
　さらに、好ましい実施例においては、命令バッファのためのハードウェアは、命令バッファが、通常は連続する記憶アドレスから命令データを取出すよう動作し、現在記憶アドレス領域の終点を越えて延びるバッファ・メモリ位置は無効データを含むと識別して、このようなバッファ・メモリ位置から実行するような試みがなされた時は適切な修正動作が取られるようにすることによって、簡素化される。
【０００９】
　プログラム・フローを変更し復元するための機構は、好ましい実施例においては、実行されるべき次のプログラム命令を特定するのに使用されるプログラム・カウンタ値を操作することによって、便宜的に提供される。
【００１０】
　可変長命令をフィックス・アップ記憶領域から実行するための制御は、好ましい実施例においては、シングル・ステップ・フラグを使用して便宜的に提供される。シングル・ステップ・フラグは、プログラム・フローがフィックス・アップ記憶領域に変更される前にセットされ、プログラム・フローを復元するステップのために制御がソフトウェアに戻される前に、単一の命令のみがそのフィックス・アップ記憶領域から実行されるよう機能する。制御がソフトウェアに戻されるとき同時に、シングル・ステップ・フラグがハードウェアによってクリアされることが望ましい。
【００１１】
　シングル・ステップ・フラグは様々な異なる場所に記憶することができ、プログラム・フローをフィックス・アップ記憶領域に変更する役割を持つソフトウェアによるプログラム制御の下でアクセスすることのできる、コプロセッサ・レジスタ内に提供することが便利であることが、理解されるであろう。
【００１２】
　個別記憶領域の間の間隔にまたがる可変長命令に伴う問題は、実行されるべき次の命令の開始点が、間隔にまたがる命令が少なくとも解読されその長さが決定されるまで、知ることができないことである。本発明の好ましい実施例は、後続記憶領域の開始アドレスと、現在可変長命令がフィックス・アップ記憶領域内から実行された後に決定されるフィックス・アップ記憶領域内の後続命令に対するプログラム・カウンタ値と、を入力として使用して、後続記憶領域内の後続可変長命令の記憶アドレスを計算することによって、この問題を処理する。この動作を便宜的にサポートするために、好ましい実施例は、後続記憶領域の開始アドレスをプログラム・フローがフィックス・アップ記憶領域に変更される前に記憶し、この情報を、プログラム・フローが後続記憶領域内の正しい点に復元される際に復元ステップにおいて使用される入口点を計算するために使用することができる。
【００１３】
　本技術は、多様な型の可変長命令と共に使用することができることが理解されるであろうが、本技術は、可変長命令が、ネイティブ命令として実行されるジャバカード・バイトコード命令である場合に、特に有用である。これらの命令は、より抽象的な性質により、物理的システムのメモリ内において断片化される可能性がより高いからである。ジャバカード・バイトコード・プログラムの断片化を処理するために、データ処理装置によって実行することができるさらなる命令セットを使用して、連結、変更および復元ステップがソフトウェア制御の下で実行されることが望ましい。従って、データ処理装置がジャバカード・バイトコードをサポートすることができる一方、メモリ・アドレッシングおよびメモリ・アクセス書込み、のような問題の物理的レベルでの管理は、関係する物理的ハードウェアにより密接に関連する異なる命令セットにおいて書かれたソフトウェアを使用して、下位オペレーティング・システムにおいて制御することができる。
【００１４】
　さらなる命令セットと共にジャバカード・バイトコードの実行をサポートするシステムの場合、変更および復元ステップは、プログラム・フローを制御するために便宜的に操作することができる、特定された記憶アドレス位置から開始するジャバカード・モードへ実行を切換えるよう機能する状態切換分岐命令によって、便宜的に実行することができる。
【００１５】
　他の観点からみると、本発明は、メモリ内の複数の個別記憶アドレス領域内に記憶された可変長命令のシーケンスを実行するための装置を提供する。本装置は、以下の装置を含む。
（ｉ）２つの個別記憶アドレス領域にまたがる可変長命令を実行しようとする試みを検知する検知器であって、２つの個別記憶アドレス領域は、現在記憶アドレス領域および後続記憶アドレス領域である検知器
（ｉｉ）現在記憶アドレス領域の終了部分と後続記憶アドレス領域の開始部分との命令データを連結してメモリのフィックス・アップ記憶アドレス領域に記憶し、可変長命令を含む連結命令データを形成する連結論理
（ｉｉｉ）フィックス・アップ記憶アドレス領域内の連結命令データ内から現在可変長命令を実行するよう、プログラム実行フローを変更する変更論理
（ｉｖ）可変長命令に続く命令を後続記憶アドレス領域内から実行するように、プログラム実行フローを復元する復元論理
【００１６】
　さらなる観点から見ると、本発明は、データ処理装置のメモリ内の複数の個別記憶アドレス領域内に記憶された可変長命令のシーケンスを実行するよう動作するデータ処理装置を制御するための、コンピュータ・プログラム製品を提供する。本コンピュータ・プログラム製品は、以下の機能を含む。
　２つの個別記憶アドレス領域にまたがる可変長命令を実行しようとする試みの後に動作するコードであって、２つの個別記憶アドレス領域は現在記憶アドレス領域および後続記憶アドレス領域であるコードである。そして、本コードは以下の機能を含む。
（ｉ）現在記憶アドレス領域の終了部分と後続記憶アドレス領域の開始部分との命令データを連結してメモリのフィックス・アップ記憶アドレス領域に記憶し、可変長命令を含む連結命令データを形成する連結コード
（ｉｉ）フィックス・アップ記憶アドレス領域内の連結命令データ内から現在可変長命令を実行するようプログラム実行フローを変更するよう動作する変更コード
（ｉｉｉ）可変長命令に続く命令を後続記憶アドレス領域内から実行するようにプログラム実行フローを復元するよう動作する復元コード
【００１７】
　本発明の上記および他の目的、特徴および利点は、付随する図面と関連して読まれる、好ましい実施例の以下の詳細な記述から明白となるであろう。
【発明を実施するための最良の形態】
【００１８】
　図２は、ＰＣＴ公開特許出願ＷＯ−Ａ−０２／２９５０７（ネイティブ・ジャバ・プロセッサの説明のために本公開文献を参照することができる）に記述されているようなデータ処理システム内で、命令デコーダ・バッファがどのように制御されるかを示す流れ図である。特に、命令デコーダ・バッファは、スロットが、メモリから取出された命令データで再度満たすために使用可能になるまで、ステップ２において待機する。このようなスロットが使用可能になると、処理はステップ４に進み、次の３２ビット命令データ・ワードが取出される。命令データ・ワード内に含まれるジャバカード・バイトコード命令は（ジャバカードは、スマートカードと共に使用されるように適合されたジャバの特別バージョンである）可変長であるので、このような３２ビット命令データ・ワードは、１以上のジャバカード・バイトコード命令あるいはジャバカード・バイトコード命令のいくつかを含むことができることが理解されるであろう。
【００１９】
　ステップ６において、ステップ４において開始された取出しがメモリ・アボートを起こしたかどうかが決定される。このようなアボートは、様々な理由で起こり得るが、典型的な理由は、保護エラーあるいはメモリ・ページ・テーブル境界の横切りあるいは他の（例えば断片化による）原因によるものである。
【００２０】
　メモリ・アボートが起こっていない場合、処理はステップ８に進み、取出された命令データ・ワードが命令デコーダ・バッファ内の使用可能スロット内に記憶され、処理はステップ２に戻る。
【００２１】
　メモリ・アボートがステップ６において検知された場合、処理はステップ１０に進み、命令デコーダ・バッファ内のスロットがアボート・メモリ取出しフラグでマークされ、処理はステップ２に戻る。このようなアボート・メモリ取出しフラグは、ジャバカード・バイトコード・デコーダがその命令データにアクセスしようとする場合、取出しが試みられた時にアボートが起こったのでそのデータは有効ではなく、従ってメモリ・アボート処理ルーチンが開始されなければならないと、ジャバカード・バイトコード・デコーダに示す機能を提供する。メモリ・アボート・ハンドラは、メモリ・アボートを受けたバイトコードを実行するよう試みられた場合にのみトリガされる。
【００２２】
　図３Ａおよび図３Ｂは、記憶アドレス空間における間隔にまたがる可変長命令を処理するための処理を示す流れ図である。ステップ１２において、ジャバカード・デコーダは、命令デコード・バッファから次の命令のためのバイトを読取る。ステップ１４は、これらのバイトのいずれかがメモリ・アボート・フラグでマークされているかどうかを識別する。どのバイトもメモリ・アボート・フラグでマークされていない場合、これらのバイトは有効データを含み、処理はステップ１６に進み、読取られたバイトコードによって特定された可変長命令が実行される。ステップ１２、１４および１６は、高速で効率的に実行されるように、ハードウェア制御の下で実行される。
【００２３】
　ステップ１４における決定が、読取られているバイトのいずれかがメモリ・アボートでマークされているという決定である場合、ステップ１８が開始され、メモリ・アボート・ハンドラを開始する。このメモリ・アボート・ハンドラは、個別記憶領域の間のプログラムの断片化によるメモリ・アボートを含む、多様な異なる型のメモリ・アボートを処理することができる。この流れ図の残りの部分は、他の型のアボートではなくこのような断片化によって引起されたアボートを、メモリ・アボート・ハンドラがどのように処理するかを示している。ステップ１８において開始されたアボート・ハンドラは、異なる型のメモリ・アボートを処理するために、他のアルゴリズムおよび機構に処理をすることができることが理解されるであろう。
【００２４】
　ステップ２０において、ソフトウェアにおけるメモリ・アボート・ハンドラは、フィックス・アップ記憶領域内の固定位置に対する現在可変長命令の開始におけるバイトコードを含む現在命令データ・ワードの複写を制御する。これに続きステップ２２において、プログラム・フローという意味で続く直続の命令データ・ワードが、フィックス・アップ記憶領域内の直続の位置に複写されるつまり、物理的あるいは論理的記憶空間においては個別である。従って、２つの命令データ・ワードは連結され、フィックス・アップ・メモリ内に隣接して置かれる。
【００２５】
　後続記憶領域の開始の識別は、様々な方法で行うことができるが、メモリ管理装置情報あるいは、例えば物理アドレス・マッピングへの仮想アドレスを特定する他の情報を調べるような、メモリ・アボート・ハンドラによって決定することができることが、理解されるであろう。
【００２６】
　ステップ２４において、実行する必要があり且つ個別記憶領域の間の間隔にまたがる現在可変長命令の開始アドレスが、フィックス・アップ記憶領域内で計算される。例として、現在記憶領域の終端における命令データ・ワード内の最終バイトにおいて開始する現在可変長命令が知られていた場合、フィックス・アップ記憶領域内で必要なプログラム・カウンタＰＣ値は、フィックス・アップ・メモリ内の連結データの第１のワード内の最終バイトを指す。
【００２７】
　ステップ２６において、メモリ・アボート・ハンドラは、後続記憶領域の開始アドレスを既知の位置に記憶するよう機能する。この開始アドレスは、間隔にまたがる可変長命令が実行された後に、後続記憶領域内のコードへの正しい入口点を決定するために、後に必要となる。
【００２８】
　ステップ２８において、シングル・ステップ・フラグが、ジャバカード・デコーダを制御しているコプロセッサＣＰ１４のレジスタ内にセットされる。このような制御レジスタは通常、ソフトウェア制御の下で便宜的にアクセス可能であり（例えば、命令を記憶するコプロセッサ・レジスタ）、ハードウェアに構成情報を渡すためにプログラムを使用することができる。
【００２９】
　メモリ・アボート・ハンドラの制御の下の最終ステップとして、ステップ３０は、フィックス・アップ・メモリ内の現在可変長命令の開始を示すプログラム・カウンタ値と共に、メモリ・アボート・ハンドラが書かれたネイティブＡＲＭコードからジャバカード実行形式に切換える状態（モード）切換分岐命令ＢＸＪを生成するよう機能する。この時点で、制御はハードウェアに戻される。
【００３０】
　ステップ３２において、関連するＰＣ値を有するＢＸＪ命令によって起動されたハードウェアは、命令デコーダ・バッファを、フィックス・アップ・メモリから取出された２つの命令データ・ワードで満たすよう機能する。フィックス・アップ・メモリが、ハードウェアに渡されたＰＣ値によって指示される記憶アドレスであるからである。ＰＣ値はまた、可変長ジャバカード命令のバイトコードが開始する第１の命令データ・ワード内の位置を指し、このジャバカード可変長命令の実行はステップ３４において実行される。
【００３１】
　ジャバカード・デコーダ・ハードウェアは、ステップ２８でセットされたシングル・ステップ・フラグに応答し、ステップ３６においてシングル・ステップ・フラグをクリアしステップ３８においてシングル・ステップ例外ハンドラを開始する前に、単一のジャバカード命令のみを実行する。
【００３２】
　シングル・ステップ例外ハンドラは、ＡＲＭ命令ルーチンのようなソフトウェアに制御を再び戻す。シングル・ステップ例外ハンドラは、フィックス・アップ記憶領域内からの単一の命令の実行の後、後続記憶領域内の適切な位置にプログラム・フローを戻すよう機能する。
【００３３】
　ステップ４０において、シングル・ステップ例外ハンドラは、ステップ２６において記憶された後続記憶領域アドレスと、ステップ３４においてハードウェアが個別記憶領域の間の間隔にまたがる命令を実行した後に戻されたプログラム・カウンタＰＣ値と、を読取るよう機能する。ハードウェアは、命令を実行するたびにＰＣ値自体を更新し、従って、このハードウェアは、後続可変長命令が開始する後続記憶領域の開始からのオフセットが決定されるように、個別記憶領域の間の間隔にまたがる命令の長さを指示するのに効果的に使用することができることが理解されるであろう。特に、いくつかの実施例においては、ＰＣ値の最下位のビットを、後続可変長命令が見つけられる後続記憶領域の開始からのオフセットを指示するのに使用することができる。
【００３４】
　ステップ４２において、シングル・ステップ例外ハンドラは、ステップ４０において決定されたように後続記憶領域内の後続命令を指すＰＣ値と共に、ジャバカード実行状態に再び切換えるＢＸＪ命令を生成する。処理はそれから、ステップ１２に戻る。
【００３５】
　図４は、図３Ａおよび図３Ｂに関連して記述された処理を概要的に示している。
【００３６】
　現在記憶領域４４および個別後続記憶領域４６が図示されている。現在記憶領域４４は、ページ・テーブル境界で終結し、このページ・テーブル境界を越えて命令データを読もうとする試みは、メモリ・アボートを起こす。図示されているように、現在記憶領域４４内で到達する最後の可変長命令のＰＣ値が示され、この現在可変長命令は実際は３バイトの長さであり、従って、後続記憶領域４６の最初の２つのバイトは現在可変長命令の１部分を形成する。
【００３７】
　図示されているように、その領域の最後の３２ビット命令データ・ワードを構成する現在記憶領域４４の終了部分は、その領域の最初の３２ビット命令ワードを構成する後続記憶領域４６の開始部分と共に、メモリ・アボート・ハンドラの制御の下でフィックス・アップ記憶領域４８に複写され、そこで連結される。現在記憶領域４４内からのプログラム・カウンタＰＣは、フィックス・アップ記憶領域４８内のプログラム・カウンタＰＣ’に変換される。ＢＸＪモード切換分岐命令はそれから、ジャバカード・モードへ切換え、ジャバカード・デコーダを起動するよう開始される。ＰＣ’値は、ＡＲＭモードにおいて通常にアドレスされるようにＡＲＭレジスタの汎用バンク内のＢＸＪ命令等のための通常の位置内に記憶されたＲ１４値として、ジャバカード・デコーダに渡される。
【００３８】
　ジャバカード・デコーダは起動されると、現在連結されている２つの命令データ・ワードを、フィックス・アップ・メモリ４８から命令デコーダ・バッファに複写する。それから、プログラム・カウンタ値位置ＰＣ’において開始するジャバカード命令が実行され、命令デコーダ・バッファ内の双方のスロットからのバイトが使用される。ＢＸＪ命令によって制御がジャバカード・デコーダに渡される前に、メモリ・アボート・ハンドラは、シングル・ステップ例外ハンドラ・ソフトウェア・ルーチンを開始する前に単一の命令のみを実行するようジャバ・デコーダを制限する、ジャバ・デコーダのためのシングル・ステップ・フラグをセットする。従って、現在記憶領域４４と後続記憶領域４６にまたがる単一の命令の後、処理はシングル・ステップ例外ハンドラ５０に渡る。シングル・ステップ例外ハンドラ５０は、メモリ・アボート・ハンドラによって規定位置に記憶された後続領域開始アドレスの記憶された値を、単一の命令の実行の後にジャバカード・デコーダによって計算されたプログラム・カウンタ値ＰＣ後続’と共に使用して、後続記憶領域４６内の真のＰＣ後続値を計算する。これが計算されると、後続記憶領域４６内の命令の実行が、後続記憶領域４６内の最初の全可変長命令と共に開始されるように、他のＢＸＪ命令が、後続記憶領域４６内のＰＣ後続値をジャバカード・デコーダに戻される変数として使用して生成される。従って、後続記憶領域４６からの２つの最初の命令データ・ワードが命令デコーダ・バッファに複写され、ジャバカード実行が再開される。
【００３９】
　図５は、上記の技術を実行することができるハードウェアを概要的に示している。図５はかなり簡便化されており、明瞭化のために、本技術に含まれていない複数の回路要素を省略していることを理解されたい。システム５２は、メモリ５４、マイクロプロセッサ実行エンジン５６、ジャバカード・デコーダ５８、ＡＲＭ命令デコーダ６０、コプロセッサ６２、および、命令デコーダ・バッファ６４を含む。ジャバカード・バイトコードの実行は、上記ＰＣＴ公開特許出願ＷＯ−Ａ−０２／２９５０７に記述された方法で行うことができる。特に、メモリ５４から読取られたジャバカード・バイトコードは、命令デコーダ・バッファ６４を通してジャバカード・デコーダ５８に送られ、そこで、所望の処理を行うためにマイクロプロセッサ実行エンジン５６を制御する制御信号を生成するために、使用される。ＡＲＭモードにおいて、ＡＲＭデコーダ６０はメモリ５４からＡＲＭ命令を受取り、マイクロプロセッサ実行エンジン５６を制御するために、それ自身の制御信号を生成する。
【００４０】
　図示されるように、メモリ５４は、記憶領域の間の間隔にまたがるよう許可された可変長命令を持つジャバカード・プログラムの異なる部分を記憶する、複数の個別記憶領域ＡおよびＢを含む。メモリ５４内にはまた、間隔にまたがる可変長命令の全バーションを再構築し、命令をフィックス・アップ記憶領域外で実行することができるように、個別記憶領域の終了部分および開始部分の連結を行うことができる、フィックス・アップ記憶領域がある。後続記憶領域の開始アドレスのような情報のための記憶装置もまたメモリ５４内に提供され、上記のシングル・ステップ例外ハンドラによって、後続記憶領域内の正しい点に処理を戻すために使用される。メモリ５４内にはまた、図示されていないが、メモリ・アボート処理コードとシステム５２が必要とする他のサポート・コードとが記憶されている。このメモリ・アボート処理コード、サポート・コードおよびシングル・ステップ例外ハンドラは、通常、ＡＲＭデコーダ６０によって解読されるＡＲＭコードの形式で提供される。
【００４１】
　図示されるように、コプロセッサ６２は、ジャバカード・デコーダ５８に結合し、ジャバカード・デコーダ５８に関連する複数の構成パラメータを記憶する。これらのパラメータの多くは、ジャバカード・バイトコードが実行されているとみなされるジャバ仮想マシーンの初期化と関連する。図示されるように、コプロセッサ６２内のレジスタのひとつは、シングル・ステップ例外ハンドラをトリガしシングル・ステップ・フラグをクリアする前に、単一のジャバカード命令のみを実行するジャバカード・デコーダが設定により制限されるときは、シングル・ステップ・フラグとして機能するフラグを含む。
【００４２】
　メモリの断片化を処理するための上記技術と関連してこのシングル・ステップ・フラグの使用を記述してきたが、シングル・ステップ・フラグは、ジャバカード命令が記憶領域にまたがらない場合にも、デバッギング・エイドとして使用することができる。従って、ジャバカード命令は、一時に１つ実行することができ、この時制御は、シングル・ステップ例外ハンドラとして機能するが、実際はデバッグに関連する適切なコードに渡される。
【００４３】
　上記技術は、命令を実行するための方法および命令を実行するための装置の形で記述されてきたことが理解されるであろう。しかし、本発明の重要な部分は、メモリ・アボート・ハンドラおよびシングル・ステップ例外ハンドラとして機能するコンピュータ・コードの形で実現されることが理解されるであろう。この特定目的コードは、それ自身の価値によって商品として別々に供給することができ、本発明の実施例とみなすことができる。
【００４４】
　上記の実施例は、本発明の技術をハードウェアおよびソフトウェアの混合において実現するシステムに関するものであることが理解されるであろう。特に、ソフトウェアは、メモリ・アボート・ハンドラおよびシングル・ステップ例外ハンドラの形で提供され、本技術のためのハードウェア・サポートは、シングル・ステップ・フラグおよびジャバカード・デコーダのシングル・ステップ・フラグへの応答の形で提供されている。しかし、本発明の他の実施例はソフトウェアの形でのみ実現することができることが理解されるであろう。
【００４５】
　例として、メモリ・アボートの検知を同様の方法で行うことができ、それから、ソフトウェア内の可変長命令の断片化を十分に処理するメモリ・アボート・ハンドラがトリガされる。このようなソフトウェア・プログラムの最初の部分は、メモリ・アボートを、断片化された可変長命令に関連すると識別し、その可変長命令の異なる部分をフィックス・アップ記憶領域に複写し、全可変長命令を含む命令データ・ワードの連結されたセットを形成して、上記のメモリ・アボート・ハンドラの機能を提供する。このソフトウェア実現において、可変長命令である単一の命令を実行するためにハードウェアに制御を戻す代わりに、ソフトウェアはこの命令をエミュレートすることができる。このエミュレーションの一部として、最初のバイトによって可変長命令の長さを特定する参照用テーブルが使用される。ソフトウェアはこの長さを知ることができ、従って、後続記憶領域内の後続可変長命令の開始アドレスを計算するのに使用することができる。ソフトウェアはそれから、計算された記憶アドレスにおいて開始する後続記憶領域にプログラム・フローを復元する。
【００４６】
　本発明の好ましい実施例を、付随する図面を参照しながら詳細に記述してきたが、本発明はこれらの実施例に限定されるものではなく、本出願の請求項によって定義される本発明の範囲および精神から逸脱することなく、この分野の技術者によって様々な変更および修正を行うことができることを理解されたい。
【図面の簡単な説明】
【００４７】
【図１】個別記憶領域にまたがる可変長命令の概要図である。
【図２】可変長命令が解読される前に、命令データとしてメモリから取出される可変長命令をバッファに入れるために使用される命令バッファの制御を示す流れ図である。
【図３Ａ】個別記憶領域にまたがる可変長命令が見つかった時に、処理がどのように実行されるかを示す流れ図である。
【図３Ｂ】個別記憶領域にまたがる可変長命令が見つかった時に、処理がどのように実行されるかを示す流れ図である。
【図４】図３Ａおよび図３Ｂに関連して記述された動作を異なる方法で示した図である。
【図５】図２から図４までに関連して記述された技術を使用することのできるシステムを示した、ハードウェア概要図である。
【符号の説明】
【００４８】
　４４　現在記憶領域
　４６　後続記憶領域
　４８　フィックス・アップ・メモリ
　５０　シングル・ステップ例外ハンドラ
　５２　システム
　５４　メモリ
　５６　マイクロプロセッサ実行エンジン
　５８　ジャバカード・デコーダ
　６０　ＡＲＭ命令デコーダ
　６２　コプロセッサ
　６４　命令デコーダ・バッファ
【図１】
2004110827.tif 000003
【図２】
2004110827.tif 000004
【図３Ａ】
2004110827.tif 000005
【図３Ｂ】
2004110827.tif 000006
【図４】
2004110827.tif 000007
【図５】
2004110827.tif 000008