(57)【要約】    【課題】プログラムプロシージャを呼出し、スタック操作を行うためのさまざまな規約を有する複数のオブジェクトコードタイプの実行をスイッチングする方法及び装置を提供する。    【解決手段】コンピュータシステムは、ルーチン記述子と、スタックスイッチフレームと、第１のプロセッサからコードまたは呼出し規約のタイプを第２のプロセッサにスイッチングするモードスイッチング機構と、さまざまなコードタイプの命令を実行する手段とを特徴とする。ルーチン記述子はプログラムまたはコードセグメント及びそのコードタイプならびに呼出し規約を記述する。この命令に遭遇したときは、制御がモードスイッチング機構に移される。ルーチンが別のスタックモデルを有するルーチンを呼出したときは、上記モードスイッチング機構がこれら二つのスタックタイプ間の遷移を提供するためスタックスイッチフレームを使用する。【選択図】図１
2006331450.tif 000002
【特許請求の範囲】
【請求項１】
複数の呼出メカニズムを有するソフトウエアルーチンを実行する装置であって、該ソフトウエアルーチンは１または２以上のパラメータを持ち、第１パラメータはセレクタで、他のパラメータは該セレクタの値によって数、サイズ、内容、及びタイプを異にするもので、
メモリーと、
１または２以上のセレクタ値を特定する特定手段であって、これらセレクタ値は１または２以上のパラメータの具体的な構成に関係しているものと、
複数のルーチン記述子であって、これら複数のルーチン記述子の１つ１つにセレクタ値各々を関連づけ、関連づけられたセレクタ値と関係する特定のパラメータ構成でソフトウエアルーチンを実装するコードセグメントを参照するものと、
セレクタ値を特定する特定手段と、
上記メモリー中のテーブルであって複数のフィールドを備え、該フィールド中には、テーブル中のフィールドの値を取り出すためにプログラムを分岐するインストラクションを参照する第１フィールドと、他の複数のフィールドとが含まれ、これら他のフィールド各々は各々有効に特定されたセレクタ値を有してルーチン記述子と関連づけられているものと、
特定のセレクタ値に従って上記テーブル中のセレクタ値のフィールドから値を取り出す手段と、
該特定のセレクタ値のフィールドに関連づけられたルーチン記述子によって識別されたコードセグメントを実行する実行手段と、
を有することを特徴とする装置。
【請求項２】
プロセッサーとメモリーを備えた、１プロセッサー環境中の複数のオブジェクトコードタイプを実行する装置であって、これら複数のオブジェクトコードタイプは少なくとも第１のオブジェクトコードタイプと第２のオブジェクトコードタイプを有し、該第１及び第２のオブジェクトコードタイプは互換性がないものであって、
上記第１オブジェクトコードタイプを有する第１ソフトウエアルーチンを特定する特定手段と、
上記第２オブジェクトコードタイプを有する第２ソフトウエアルーチンを特定する特定手段と、
上記第１オブジェクトコードタイプから上記第２オブジェクトコードタイプへ切り換えるスイッチを指定する指定手段であって、上記第１ソフトウエアルーチンに透過的なものと、
上記第１ソフトウエアルーチンの実行中に上記指定手段に遭遇したとき上記第１オブジェクトコードタイプから上記第２オブジェクトコードタイプへ切り換えるスイッチ手段であって、この切替が上記第１ソフトウエアルーチンに透過的に実行されるものと、
上記第２ソフトウエアルーチンを実行する実行手段であって、上記第１オブジェクトコードタイプから第２オブジェクトコードタイプへ切り換えられたとき作動するように上記スイッチ手段に接続されたものと、
上記第２ソフトウエアルーチンの実行が終わったら上記第１オブジェクトコードタイプに戻る戻り手段であって、上記第１ソフトウエアルーチンの実行を再開するものと、
を有することを特徴とする装置。
【請求項３】
１プロセッサー環境中でさまざま異なるオブジェクトコードタイプの複数のソフトウエアルーチンを実行する装置であって、
ソフトウエアルーチンを記述するルーチン記述子と、
該ルーチン記述子中に置かれるモード間を差別化するミクストモード域と、
上記ミクストモード域を特定の所定値にセットするセット手段と、
上記ルーチン記述子中に置かれるプロシージャポインタであって、ソフトウエアルーチンを指定するものと、
上記ルーチン記述子に配置され、特定されたソフトウエアルーチンのオブジェクトコードタイプを指定する指示手段と、
上記特定されたソフトウェアルーチンのオブジェクトコードタイプを特定するために上記指示手段をセットするセット手段と、
上記特定されたソフトウエアルーチンが、当該特定されたソフトウェアルーチンと互換性のないオブジェクトコードタイプの他のソフトウエアルーチンから呼び出されるときに上記特定されたソフトウェアルーチンを実行する実行手段と、
を有することを特徴とする装置。
【請求項４】
同一のオブジェクトコードタイプだが互換性のない呼出メカニズムのソフトウエアルーチンを呼出すための複数のメカニズムを実行する装置であって、
プロセッサと、
該プロセッサがアクセスできるメモリーと、
第１ソフトウエアルーチンと第２ソフトウエアルーチンとを特定する特定手段であって、該第１ソフトウエアルーチンと第２ソフトウエアルーチンは同一のオブジェクトコードタイプを持ち、第１ソフトウエアルーチンは第１呼出メカニズムにより呼び出されることができ、第２ソフトウエアルーチンは第２呼出メカニズムにより呼び出されることができるが、これら第１呼出メカニズムと第２呼出メカニズムとは互換性がないものと、
上記第１ソフトウェアルーチンが上記第１呼出メカニズムを使用して上記第２ソフトウェアルーチンを呼び出そうとしたことに応答して、上記第２呼出メカニズムを利用して上記第２ソフトウェアルーチンを呼び出す第２呼出メカニズム利用手段であって、上記第２ソフトウエアルーチンを実行するものと、
上記第１モードへ戻す戻し手段であって、上記第２ソフトウエアルーチンの実行が完了したら作動するものと、
を有することを特徴とする装置。
【請求項５】
１ルーチン中に１ソフトウエアルーチンを呼び出す複数のメカニズムを実行する方法であって、
複数域を有するルックアップテーブルを作成し、
該複数域中にモード切り換えメカニズムを特定するため上記複数域中に第１域をセットし、
ルーチンにとって有効なセレクタ値をそれぞれ取り扱うコードまたはプログラムのセグメントを書き込み、
該コードまたはプログラムのセグメント各々のためのルーチン記述子を作成し、
それら各々のルーチン記述子のためのルックアップテーブル中に域をセットし、
セレクタ値に基づきルックアップテーブル中に具体的な域を探索し、
該具体的域により指定されたルーチン記述子により記述されたルーチンを実行する、
以上のステップを有することを特徴とする方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明はコンピュータシステム、より詳細にはコンパチブルでないオブジェクトコードで書かれたコードを実行するために同一プログラム中にミックスすることを可能にするコンピュータシステムに関する。
【背景技術】
【０００２】
新しいプロセッサ（コンピュータプロセッサ）が開発されると、それまでのプロセッサでは正しく実行されていた従来のアプリケーションやプログラム（以下、「アプリケーション」）は、当該新しいプロセッサでは正しく実行されないことが起こり得る。こうした古い、つまり新しいプロセッサにとっては非ネイティブなアプリケーションは、一般には新プロセッサで実行するために「移植」、つまり書き直されるか翻訳される。このアプリケーションの移植が実行されるまで、普通は新しいプロセッサの有益な諸特性を利用することができない。アプリケーションを移植するのに要求される作業量次第では、アプリケーションが新しいプロセッサから受けることができる利点よりも、その作業量に費やされる時間の方が大となるおそれもある。
【０００３】
普通、新しいプロセッサを有するコンピュータシステムは、古いプロセッサのために書かれた「古い」アプリケーションを動かすための別個の環境を有している。こうした環境は「コンパチビリティ  ボックス」と呼ばれる。こうしたシステムでは、コンパチビリティ  ボックスと新しいプロセッサ環境間に、「ネイティブ」環境と呼ばれるような相互作用は実質的に少しもない。その為に「古い」アプリケーションは、ネイティブの環境下であれば利用可能であった当該改良後の高い処理能力や、その他の有益な諸特性を全く利用することができない。
【０００４】
ある種のコンピュータシステムは、そのコンピュータシステムにとってネイティブなプロセッサ以外のプロセッサのために書かれたコードを実行するコンピュータシステムを可能にするエミュレータを有している。典型的には、こうしたエミュレータは１個のルーチン環境を前提にしているのであり、換言すれば、プログラム手続を呼出し、スタック操作を実行する規約がネイティブ及び非ネイティブつまりエミュレートされたコードの双方に共通していることを前提にしている。ＵＳＡ４８１３９７５はエミュレータおよびモードスイッチング機構に連動されていて具体的な指示があると作動する。ＵＳＡ４０８４２３５はエミュレーション装置に連動されていて、そこでオプションマスクがターゲットシステムの特徴や性質を定義するようになっている。こうしたエミュレータは典型的には、出された指示を変更させるだけであって、異なるルーチン呼出し及びスタック操作規約を有しているプログラムのオブジェクトコードの２種の異なるタイプを取り扱う構造になっていない。例えば、これらのエミュレータは，Ｍｏｔｏｒｏｌａ６８０００（以下「６８Ｋ」）のようなＣＩＳＣ（Ｃｏｍｐｌｅｘ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｃｏｍｐｕｔｅｒ）とか、（ＩＢＭ  ＰｏｗｅｒＰＣ  ＩＢＭ  ＲＩＳＣ  Ｓｙｓｔｅｍ／６０００のような）ＲＩＳＣ（Ｒｅｄｕｃｅｄ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｃｏｍｐｕｔｅｒ）（以下「ＲＩＳＣ」）を取り扱うには機能的に不十分であった。ＰｏｗｅｒＰＣ，ＩＢＭ  ＲＩＳＣ  Ｓｙｓｔｅｍ／６０００は、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ，  Ａｒｍｏｎｋ，  Ｎ．Ｙ．が登録した商標である。
【０００５】
ＣＩＳＣ機に関する背景知識についてはＡｄｄｉｓｏｎ−Ｗｅｓｌｅｙ  Ｐｕｂｌｉｓｈｉｎｇ  Ｃｏ．，１９８５−１９９１刊行の「Ｉｎｓｉｄｅ  Ｍａｃｉｎｔｏｓｈ」，  第１〜６巻を参照のこと。ＩＢＭ社のＲＩＳＣ  Ｓｙｓｔｅｍ／６０００機に関する背景知識はＩＢＭ  Ｊｏｕｒｎａｌ  ｏｆ  Ｒｅｓｅａｒｃｈ  ａｎｄ  Ｄｅｖｅｌｏｐｍｅｎｔ，  １９９０年１月刊行の第３４巻，  Ｎｏ．１のＧｒｅｇｏｒｙ  Ｆ．  Ｇｒｏｋｏｓｋｉによる「Ｍａｃｈｉｎｅ  ｏｒｇａｎｉｚａｔｉｏｎ  ｏｆ  ｔｈｅ  ＩＢＭ  ＲＩＳＣ  Ｓｙｓｔｅｍ／６０００  ｐｒｏｃｅｓｓｏｒ」  ｐｐ．３７−５８，  及びＲ．Ｒ．  ＯｈｅｌｅｒとＲ．Ｄ．Ｇｒｏｖｅｓによる「ＩＢＭ  ＲＩＳＣ  Ｓｙｓｔｅｍ／６０００  ｐｒｏｃｅｓｓｏｒ  ａｒｃｈｉｔｅｃｔｕｒｅ」  ｐｐ．２３−３６を参照のこと。
ＩＢＭ社のＲＩＳＣサブルーチンリンケージ規約に関する背景知識についてはニューヨーク州，  アーモンクのＩｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ，１９９２年９月刊行の「ＡＩＸ  ＸＬ  ＦＯＲＴＲＡＮ  Ｃｏｍｐｉｌｅｒ／６０００  Ｕｓｅｒ’ｓ  Ｇｕｉｄｅ  Ｖｅｒｓｉｏｎ  ２．３」  第１０章及びＩＢＭ  Ｊｏｕｒｎａｌ  ｏｆ  Ｒｅｓｅａｒｃｈ  ｏｆ  Ｄｅｖｅｌｏｐｍｅｎｔ，  １９９０年１月刊行の第３４巻，  Ｎｏ．  １，  ｐｐ．９８−１０４，  Ｍａｒｃ  Ａ．  Ａｕｓｌａｎｄｅｒによる  「Ｍａｎａｇｉｎｇ  ｐｒｏｇｒａｍｓ  ａｎｄ  ｌｉｂｒａｒｉｅｓ  ｉｎ  ＡＩＸ  Ｖｅｒｓｉｏｎ  ３  ｆｏｒ  ＲＩＳＣ  Ｓｙｓｔｅｍ／６０００  ｐｒｏｃｅｓｓｏｒｓ」  参照のこと。なお、ＡＩＸはＩｎｔｅｒｎａｔｉｏｎａｌ  ＢｕｓｉｎｅｓｓＭａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎの商標である。
【０００６】
６８Ｋ環境では手続ポインタは６８Ｋルーチンをアドレスするが、ＲＩＳＣのようなその他の環境下では手続ポインタは、データ構造とか、その他の情報中にそのルーチンのアドレスを含む実行可能なコードのような構造をアドレスする。ＲＩＳＣ  Ｓｙｓｔｅｍ／６０００環境では、構造はそのルーチンへの入口点のアドレスと、そのルーチンが拘束されるモジュールの内容を示すテーブルと、ポインタを必要とする言語環境を示すポインタとを有する。ＲＩＳＣコードが６８Ｋルーチンモデルに合うように一致させられているとすれば、ＲＩＳＣ指示セットの利点は何も利用され得ない。
【０００７】
従来のある種のコンピュータシステムで、１プロセッサ上にさまざまな呼出し規約をもつ２つ又は３つ以上のプログラミング言語を実行するには、各使用ごとにそのプログラミング言語を共通にするベースラインの呼出し規約に変更されている。その他の従来システムでは、プログラミング言語は、他の言語のさまざまな呼出し規約を明示的に取り扱うように構成されている。
【０００８】
典型的には、新しいネイティブプロセッサをサポートするだけでなく従来のコンピュータをエミュレートもするコンピュータシステムは、１時に１環境のみをサポートするにすぎない。換言すれば、同時進行するアプリケーションは同じプロセッサ環境またはモードで実行されている。例えば、多数のアプリケーションが同時に実行されるときは、そうしたアプリケーションのうちの一つだけが非ネイティブな処理環境用に書かれており、その他の全てのアプリケーションがネイティブ環境用に設計されていたとしても、それらアプリケーションの全部は、その一つの非ネイティブなアプリケーションに適した環境にエミュレートされて実行される。したがってこれらアプリケーションのどれ一つも、この新しいネイティブなプロセッサが提供してくれる利点を享受することができない。
【０００９】
なお、関連するその他の文献としては以下のものがある。
【特許文献１】特開平４−３２２３２７号公報
【特許文献２】特開平４−３３６３２７号公報
【特許文献３】特開平４−３０９１３５号公報
【特許文献４】特開昭６１−５２７６９号公報
【特許文献５】特開昭６３−１８０１２９号公報
【特許文献６】特開平２−８１２２７号公報
【非特許文献１】可児賢二・他、「Ｖシリーズマイクロコンピューター」、丸善株式会社、１９８７年４月３０日、ｐｐ．１０４−１０９（特許庁ＣＳＤＢ文献番号：単行本１９９７−００４０９−００１、ＩＳＢＮ：４−６２１−０３１５７−０）
【非特許文献２】「ユーザーズ・マニュアル  ＭＣ６８０４０  ＭＣ６８０４０ＵＭＪ／ＡＤ」，日本モトローラ株式会社、１９９２年１２月１日，第１版、ｐｐ．２２６、２２７、２３４−２４０（特許庁ＣＳＤＢ文献番号：マニュアル２０００−０３１８５−００１）
【発明の開示】
【発明が解決しようとする課題】
【００１０】
本発明は、１アプリケーションまたは１プログラムがどんなプロセッサモードにもアクセスすることができるよう複数のプロセッサモードをスイッチングする即応型機構を提供することが主目的である。
【００１１】
本発明のもう一つの目的は、特定のプロセッサモードに明示的にアクセスするアプリケーション用の機構を提供することにある。
【００１２】
本発明のもう一つの目的は、特定のプログラムセグメントを実行するのに適したプロセッサモードを同定する機構を提供することにある。
【００１３】
本発明のもう一つの目的は、ほぼ同時に多数の環境における多数のアプリケーションをサポートすることにある。
【００１４】
本発明のもう一つの目的は、部分的に複数のプロセッサをベースとしているシステムソフトウエアを実行するコンピュータシステムを可能にすることにある。
【００１５】
本発明のもう一つの目的は、第１のプロセッサモードから第２のプロセッサモードへプログラムコードを変更することなく変更するようにプログラムの実行を可能にすることにある。
【課題を解決するための手段】
【００１６】
本発明は特許請求の範囲に記載のとおりの構成を採用することにより上述の課題を解決する。以下、特許請求の範囲に記載の構成について補充的に説明を行なう。
【００１７】
本発明は、プログラム手続を呼出したり、スタック操作を行うためのさまざまに異なる規約を有する複数のオブジェクトコードタイプの実行間のスイッチングとなる方法及び装置を提供するものである。本発明はまた、１オブジェクトコードタイプになっている２つまたは３つ以上の異なる呼出し規約をスイッチングするのにも使われる。概説すれば、本発明によれば、コンピュータシステムは１又は２以上のコードタイプのための指示を実行する手段と、ルーチン記述子と、スタックスイッチフレームと、プロセッサタイプ又はコードタイプ、すなわち本書では単に「モード」と言うが、同士をスイッチングするモードスイッチング機構とを有する。本発明は、また、ルーチン記述子中に情報を作り出し、操作し、セッティングし、そして特定のルーチン記述子に関連する情報にアクセスするための機構を有している場合もある。指示を実行する手段としては、例えば、１個のＣＰＵと１個のエミュレータ、複数のＣＰＵ、または複数のオペレーションモードを有する１個のＣＰＵがある。指示実行手段は、さらに、指示を実行するのに使われる関連ソフトウエアを含む場合もある。
【００１８】
ルーチン記述子は、プログラムセグメント、またはそのプロセッサのようなコードの一部分もしくはコードタイプ及び呼出し規約の特徴を記述するものである。あるいは、ルーチン記述子は、実質的に同一な機能を行うが、異なるプロセッサタイプまたはコードタイプ及び呼出し規約に備えられている複数のプログラムセグメントを記述する場合もある。記述目的のため、「プロセッサ環境」という用語はプロセッサ及び／又はプログラムの環境を示すのに用いられる。ルーチン記述子は、違法命令や違法記憶アドレスのような具体的な所定の値に向けて設定された「ミックスモード」域も有している。ミックスモード域の値は、命令実行手段や行われているスイッチングオペレーションタイプの如何により変更されるものである。さらにルーチン記述子は、プログラムセグメントを呼出し、適切なスタック操作を行うための規約を示す「手続情報域」も有している。ミックスモード域は、モード中の少なくとも１モードに装備されていない、つまり違法な、命令を示す値に向けて設定されていてもよい。例えば、命令実行手段が１個のＣＰＵと１個のエミュレータである場合は、ミックスモード域はそのエミュレータによってだけ装備された命令に向けて設定され、その他のルーチン環境またはモードによって装備されていなくてよい。エミュレータがこの命令に遭遇すると、制御はそのモードスイッチング機構に移動させられる。
【００１９】
同様に命令実行手段が複数のＣＰＵの場合にも、ミックスモード域は少なくとも１個のＣＰＵに装備されていない命令に向けて設定されていてもよい。
【００２０】
しかし、ミックスモード域が合法命令に向けられる場合も起こり得る。例えば、１コードタイプに関する２または３以上の呼出し規約間をスイッチングするために本発明を実施したとき、「ミックスモード」域は、例えば、分岐命令またはトラップ命令のようなコードタイプの合法命令の実行がモードスイッチングオペレーションを行うことができるプログラムセグメントを呼び出すように、分岐命令またはトラップ命令のようなコードタイプの合法命令に向けることができる。
【００２１】
ルーチンが別のスタックモデルをもつルーチンを呼び出すとき、そのモードスイッチング機構は２つの異なるスタックタイプ間に遷移をもたらすスタックスイッチフレームを使う。適切なスタックスイッチフレームが呼出人のスタックフレームと被呼出人のスタックフレーム間のスタックに配置される。
【発明の効果】
【００２２】
本発明の１実施例のコンピュータシステムにおいては、異なるオブジェクトコードタイプのプログラムセグメントを有するか、または異なるプロセッサ用に設計されたアプリケーションは、各プログラムセグメントがそのコード及びプロセッサタイプに適したモードで実行されるように１個のプロセッサで実行することができる。したがってネイティブなコードはネイティブプロセッサの利点ある特徴の利益を享受し、同時に、非ネイティブなコードはほぼ通常通りに作動し、ネイティブコードの存在を知っていなくても、あるいはネイティブコードを修正しなくてもネイティブコードから明示的に利益を享受することができる。
【００２３】
本発明のもう一つの利点は、ネイティブなアプリケーションがプログラムセグメントまたはコードセグメントは複数のコードタイプのうちのどれかであることを知っているかもしれないが、従来の非ネイティブなアプリケーションシステムのソフトウエア又はプログラムセグメントの特徴に、その非ネイティブなアプリケーションシステムソフトウエア又はプログラムセグメントの正確なコードタイプを知らなくてもアクセスすることができることである。しかも非ネイティブなアプリケーション又はシステムソフトウエアは、それにアクセスするのにネイティブなアプリケーション用に修正される必要はない。
【００２４】
本発明はまた、第１タイプのコードが第２タイプのコードを実行できるようにし、あるいは実行されている実際のコードタイプについて予備知識なしでも第１タイプのコードが実行できるようにする。これは言わば、実質的にどんなタイプのコードでも、そのコードのコードタイプについて予め知っておらずに実質的に別のコードとなるコードで実行することを意味する。
【発明を実施するための最良の形態】
【００２５】
図１において、１０は少なくとも一つの中央処理装置（以下、「ＣＰＵ」）１２と、スタック１４と、そして記憶装置１６とを有するコンピュータの全体である。スタック１４は記憶装置１６内に配置されていることもある。あるいは、コンピュータ１０は１個または２個以上のレジスタ１７を有することもある。記憶装置１６は複数のコードセグメント即ちコード１８の各部を有している。図面上記憶装置１６は第１のコードセグメント１８ａ、第２のコードセグメント１８ｂ、及び第３のコードセグメント１８ｃを持っている。記憶装置１６は又、ルーチン記述子２０、及び好ましくは、コンピュータ１０が複数のＣＰＵ１２を持っているとき、又はコンピュータ１０が多数モードのＣＰＵ１個を持っているときは、エミュレータ２１をも持っている。
【００２６】
［ルーチン記述子］
図２に示すように、ルーチン記述子２０は好ましくはミックスモード域２８と選択域２９を有している。又、ルーチン記述子２０は手続情報域３０と、１つのペア３１又は２つのペア３１以上を有するリスト２７とを持っている。これら各ペア３１はコードタイプ域３２と手続ポインタ３３を有している。さらにルーチン記述子２０はインジケータ域３４、バージョン域３５及びカスタムパラメータ手続域３６をも有している。図２はルーチン記述子２０の具体化を簡単に図示したに過ぎない。ルーチン記述子２０内のこれら諸域の正確な配列はさまざまに変化し得る。
【００２７】
ミックスモード域２８は、ときとして第１域と呼ばれることもあるが、プロセッサモード間を識別する。アプリケーションがネイティブアプリケーションのとき、またはネイティブコードを実行する非ネイティブアプリケーションのときは、ミックスモード２８はエミュレータまたは少なくとも１つのプロセッサモードに違法な命令によってはじめて具体化される。例えばこの値は不使用の命令であることもあり、不使用のＡ−Ｔｒａｐあるいは不使用のＦ−ｌｉｎｅ命令であることもある、別言すれば、非ネイティブモードで合法命令でない値なら何でもなり得る。
【００２８】
あるいはミックスモード域２８は、プログラムまたはコードセグメントが複数のコードタイプのうちのどれかであることをネイティブなアプリケーションが知らないことができるように値を設定してもよい。ミックスモード域２８の前半はＲＩＳＣ命令に設定され、後半はＲＩＳＣ違法命令または分岐でもよい。命令はモードのスイッチング機構その他、例えばルーチン記述子を作ったり動かしたりするような機構を呼び出すのに使われる。
【００２９】
選択域２９は、ときとして第３域とも呼ばれるが、実行されるべきモードスイッチングオペレーションのタイプを示す値を有している。選択域２９は本発明の実施例に特有なサービスまたは機能を限定することができる。
【００３０】
好ましくは選択域２９はロード及び実行、実行、またはリターンオペレーションを表示する値を持っている。ロード及び実行オペレーションは非ネイティブなコードタイプに合致する方法で非ネイティブコードタイプのコードによってロードされるネイティブコードタイプのプログラムセグメントを可能にする。次に、選択域２９がロード及び実行オペレーションを指定すると、モードスイッチング機構が、リロケーション、ランタイムバインディング、初期化などのネイティブアプリケーションのコードタイプに特有のオペレーションを行う。
【００３１】
手続情報域３０は、ときとして第４域と呼ばれることもあるが、ルーチン記述子によって言及されたルーチンが使う呼出し規約やパラメータに関する情報を供給する。
【００３２】
リスト２７はルーチン記述子が実質的に同一機能を行うがさまざまなプロセッサ又はコードのタイプや呼出し規約を装備されている複数のプログラムセグメントの記述を可能にする。場合によっては、現在のルーチン又はプロセッサ環境にとって最適なプログラムやコードセグメントを選択できるように２つ又は３つ以上のコードタイプで書かれた同一機能を行うプログラム又はコードセグメントを持つことが望ましい。実行速度、あるいは利用可能な特徴やプロセッサその他のファクタは、どのプログラムまたはコードセグメントタイプを実行するかを決定するとき考慮される。
【００３３】
リスト２７がペア３１を一つ以上持っていてルーチン記述子が呼び出されたとき、好ましいコードタイプが複数のペア３１中のコードタイプ域３２から選択される。この好ましいとされるコードタイプは具体的なコンピュータシステム１０の利点を最大に利用するようなコードタイプである。こうしてルーチン記述子とそれに付随するプログラムセグメントは、本発明のさまざまな実施例である複数のコンピュータシステムに修正なしに呼び出すことができる。例えば、リスト２７が６８Ｋを表示しているコードタイプ域のあるペア３１とＲＩＳＣを表示しているコードタイプ域のあるもう一つのペア３１とを含むルーチン記述子２０が、６８Ｋだけしかないコンピュータと６８Ｋエミュレータを有しているＲＩＳＣコンピュータとの両方に実行できる二重６８Ｋ／ＲＩＳＣルーチン記述子のようなものである。６８Ｋだけのコンピュータでは、６８Ｋコードタイプが選択され、ＲＩＳＣコンピュータでは、そのより良いパフォーマンスその他の利点のためにＲＩＳＣコードタイプが選択される。選択基準はさまざまあり得るが、好ましくは選択はパフォーマンスおよびさまざまなコードタイプの利用可能性に基づき行われるのがよい。
【００３４】
コードタイプ域３２は、ときとして第１部とも呼ばれるが、ルーチンが書き込まれているコードまたはプロセッサのタイプを示す。
【００３５】
プロセッサポインタ３３は、ときとして第２部とも呼ばれるが、ルーチンの自然のコードのタイプに適した方法でルーチン記述子２０により記述されたルーチンを指し示す。
【００３６】
ルーチン記述子インジケータ域３４は、ときとして第５域とも呼ばれるが、メモリ１６のその部分をルーチン記述子として同定する。
【００３７】
バージョン域３５は、ときとして第６域とも呼ばれるが、ルーチン記述子のバージョンを示す。これはルーチン記述子の構造が新しいバージョンで変更された場合に有益である。
【００３８】
カスタムパラメータ手続域３６は、ときとして第７域とも呼ばれるが、ルーチン記述子が作られたとき付与される手続を指し示すのに使われる。この手続は呼出人ルーチンのコードタイプと被呼出人ルーチンのコードタイプ間の遷移［ｔｒａｎｓｉｔｉｏｎ］を如何に行うかを知っている。カスタムパラメータ手続域３６は一般に、手続情報域によって容易に定義できない特殊なケースを取り扱うのに用いられる。しかしルーチン記述子２０はカスタムパラメータ手続域３６を有していなくてもよいのであって、手続情報域３０はそうした特殊なケースを取り扱うのに使われてもよく、２オブジェクトコードタイプ間の遷移手続を間接的に同定する。
【００３９】
手続情報域３０の実際の内容は呼出されるルーチンによって使われる呼出し規約次第で決められる。各場合において、手続情報域３０（図３）は、そのルーチン、つまりパスカルとＣスタックベースのルーチン、レジスタベースのルーチン、スタックベースのディスパッチルーチン、そしてレジスタベースのディスパッチルーチンによって使われる呼出し規約を表示する呼出し規約域４０を有している。
【００４０】
呼出し規約は、一つのソフトウエアルーチンを援用するのに使われるメカニズムである。「コンピュータ操作に関するＩＢＭ辞典」（第９版、１９９１年）は、呼出し規約を「データ交換のためのルーチン及びサブルーチンに関する具体的方法」と定義している。「援用するメカニズム」という用語は、呼出し規約という言葉と差し替え自在に使うことができ、あるいは場合によっては、呼出し規約プラス実際の数字やパラメータのフォーマットに関する追加的知識からできあがっている。その違いは、呼出し規約がパラメータのどんな組合せにも適用できる一般的メカニズムしか記述しないのに対して、援用メカニズムはそのパラメータ、特に数字とサイズに関する知識を有していることである。
【００４１】
例えばパスカルとＣスタックベースのルーチンにつき、図４に示されるように、手続情報域３０は、ルーチンにより戻ってきたバイト数を示す結果サイズ域４２、及び各パラメータのサイズを記述しているパラメータサイズ域４３も有している。このパラメータサイズ域４３はゼロ値で終了するパラメータサイズ値のリストである。図５は、レジスタベースのルーチンのために手続情報域３０が、ネイティブインターフェイス内のパラメータと同じ順番にレジスタをリストするレジスタパラメータ域４４を有していることを示している。レジスタパラメータ域４４は１個または２個以上の入力パラメータ及び出力パラメータを有している。例えば、レジスタパラメータ域４４は２個の出力パラメータとそれに従う４個の入力パラメータを有するなどである。
【００４２】
図６は、スタックベースのディスパッチルーチン、すなわち単一の入口を経由してルーチンディスパッチャ（図示せず）にアクセスできるルーチンを示す。手続情報域３０は、そのルーチンによって戻ってくるバイト数を示す結果サイズ域４６、セレクタのサイズを示すセレクタサイズ域４７、及び各パラメータのサイズを記述しパラメータサイズ域４３と同一のフォーマットを有しているパラメータサイズ域４８を有する。
【００４３】
図７に示すように、レジスタベースのディスパッチルーチン、すなわちパラメータがレジスタ中にパスし、セレクタがスタック上にパスするルーチンにとって、手続情報域３０は、スタック上のセレクタサイズを示すセレクタサイズ域５０、及びレジスタパラメータ域４４と同じフォーマット中のパラメータを記述するレジスタパラメータ域５１も有している（図５）。
【００４４】
図８は上記以外の場合を取り扱うための手続情報域３０を示す。手続情報域３０は、呼出し規約域４０とユーザ定義可能域５２を有する。ユーザ定義可能域５２はルーチン記述子２０によって記述されるルーチンに適した方法で構成される。
【００４５】
図９に示すように、各パラメータのためにレジスタパラメータ域４４は、レジスタサブ域５３とパラメータサイズサブ域５４を有している。
【００４６】
「古」すなわち非ネイティブコードタイプのプログラムまたはコードセグメントがそれらと連動するルーチン記述子の存否を実行する。しかし「新」すなわち「ネイティブ」コードタイプのプログラムまたはコードセグメントは普通、それと関係するルーチン記述子を有している。
【００４７】
ルーチン記述子はプログラムセグメントが複数のコードタイプのいずれでもよい。プログラムセグメントが具体的なコードタイプであってその他のコードタイプではないことが知られているときは、サブルーチンまたはライブラリコールがミックスモード域２８を使わずに直接にモードスイッチング機構にアクセスするために使うことができる。
【００４８】
［アプリケーションインターフェイス］
ルーチン記述子は、プログラムがオブジェクトコードにコンパイルされ、オブジェクトコードセグメントをまとめて結合し実行可能なプログラムを形成するランタイムリンカーによって解読されるとき、静的に作り出すことができる。しかしそれ以外のときは、ルーチン記述子を動的に割り当てて放出し、ルーチン記述子中の情報にアクセスし、そしてルーチン記述子中の情報をセットするか変更することが好ましい。
【００４９】
したがって好ましくは、インターフェイスはルーチン記述子を作り出しリリースするアプリケーションの手段を提供する。例えばルーチン記述子を作り出す命令は好ましくは次のパラメータを受けるのがよい。すなわち、ルーチンのポインタ、手続タイプの同定、手続情報、及び任意選択可能なカスタムパラメータ手続ポインタ、現時点のモードを指し示すモードインジケータ、又は任意選択可能にそれが現時点のモードと違っていたら適当なプロセッサモード、及びルーチン記述子又はそれへのポインタを戻す。Ｃプログラミング言語においてのこの命令の実施は次のようになるであろう。
ＲｏｕｔｉｎｅＤｅｓｃｒｉｐｔｏｒ＝ＮｅｗＲｏｕｔｉｎｅＤｅｓｃｒｉｐｔｏｒ（ＰｒｏｃＰｔｒ  ｔｈｅＰｒｏｃ，ＰｒｏｃＩｎｆｏＴｙｐｅ  ｐｒｏｃＩｎｆｏ，ＣｏｄｅＴｙｐｅ  ｅｘｅｃｕｔｉｏｎＭｏｄｅ）
【００５０】
同様に、ルーチン記述子を出し、それに割り当てられた記憶装置を解放せよ、との命令は、ルーチン記述子またはそれのポインタを受ける。例えばこの命令は次のようにものである。
ＤｉｓｐｏｓｅＲｏｕｔｉｎｅＤｅｓｃｒｉｐｔｏｒ（ＲｏｕｔｉｎｅＤｅｓｃｒｉｐｔｏｒ  ＊ｔｈｅＲｏｕｔｉｎｅ）
【００５１】
インターェイスはまたアプリケーションがルーチン記述子に関する情報にアクセスすることを可能にする。例えば特定のルーチンにつきそれが書かれているコードのタイプ、それに関連する手続情報、あるいはそれに関連するカスタムパラメータ手続などを見つけ出す命令がある。例えばＧｅｔＣｏｄｅＴｙｐｅ（ＲｏｕｔｉｎｅＤｅｓｃｒｉｐｔｏｒ  ＊ｔｈｅＲｏｕｔｉｎｅ）が、記述されたルーチンが書かれているコードのタイプにアクセスするのに使われる。
【００５２】
さらにインターフェイスはアプリケーションがルーチン記述子中の情報を変更するのを可能にする。例えば命令は手続ポインタが変更されること、または、手続情報域が設定されることを可能にする。ＯＳＥｒｒ＝ＳｅｔＰｒｏｃＩｎｆｏ（ＲｏｕｔｉｎｅＤｅｓｃｒｉｐｔｏｒ  ＊ｔｈｅＲｏｕｔｉｎｅ，ＰｒｏｃＩｎｆｏＴｙｐｅ  ｐｒｏｃＩｎｆｏ）のような命令が、ルーチン記述子の手続情報域を所定のｐｒｏｃＩｎｆｏに変更する。
【００５３】
６８Ｋのような「古い」すなわち非ネイティブなコードタイプのプログラムセグメントまたはコードセグメントは、それがそのネイティブなコードを呼出していることを知らずにルーチン記述子を介してネイティブなプログラムセグメントまたはコードセグメントを呼出し得る。６８Ｋのこのような場合は、ルーチン記述子は、恰もそれが６８Ｋ手続ポインタであるかのように直接に呼出され、命令にパスされたパラメータはそのルーチンにパスされる。もしルーチンが６８Ｋならば、そのルーチン記述子は実際に６８Ｋ手続ポインタであって、それがポイントする手続が呼出される。もしルーチンがネイティブならば、あるいはそれが呼出人のルーチンの予定している呼出し規約とは違う６８Ｋルーチンならば、そのルーチン記述子はモードスイッチング機構をトリガーするミックスモード値を有するミックスモード域２８からスタートするネイティブまたは６８Ｋルーチン記述子である。
【００５４】
必須的に、ミックスモード域は有しており、非ネイティブコードタイプのコードとして扱われるので、ルーチン記述子２０の言及と、６８Ｋのような非ネイティブコードタイプのあるコードまたはプログラムセグメントの直接の言及とは相互交換可能である。非ネイティブコードタイプ環境では、ルーチン記述子は実行されるコードセグメントまたはプログラムセグメントとして扱われるが、新しい、即ちネイティブな、コードタイプ環境では、ルーチン記述子はデータにアクセスする手段によって使われるそうしたデータとして扱われる。このように、非ネイティブコードの言及はルーチン記述子にアクセスするための手段と交換することができる。
【００５５】
好ましくはアプリケーションインターフェイスはアプリケーションまたはプログラムセグメントがルーチン記述子を呼出すことを可能にする。この命令は所与のルーチン記述子によって記述されたルーチンを呼出し、何らかの結果をパスバックする。この命令の目的はアプリケーションまたはプログラムセグメントをして何らかのコードタイプのルーチンを呼出すことを可能にすることである。例えば、このメカニズムはネイティブコードがモードスイッチング機構にアクセスすることを可能にする。本発明の第１実施例では、ルーチン記述子を呼出す命令はルーチン記述子、手続情報、及びパラメータのリストを受け取る。例えば、ＣａｌｌＲｏｕｔｉｎｅＤｅｓｃｒｉｐｔｏｒ（ＲｏｕｔｉｎｅＤｅｓｃｒｉｐｔｏｒ  ＊ｔｈｅＲｏｕｔｉｎｅ，ＰｒｏｃＩｎｆｏＴｙｐｅ  ｐｒｏｃＩｎｆｏ，ｓｈｏｒｔｎｕｍＰａｒａｍｓ，．．．）が、所与のルーチン記述子によって記述されたルーチンを呼出すのに使うことができる。
【００５６】
しかしある種のＲＩＳＣ環境では、ルーチン呼出しがされたときかなりな量のパラメータ移動［ｓｈｉｆｔｉｎｇ］が起こり得る。ＣａｌｌＲｏｕｔｉｎｅＤｅｓｃｒｉｐｔｏｒ命令の実行中に、その命令の各パラメータは別個に設けられたレジスタ中に置かれ、手続情報パラメータがそのルーチン記述子によって記述されているルーチンのためパラメータをトランスフォームするのに使われる。そのルーチン記述子によって記述されているルーチンのための各パラメータは、次に、また別のレジスタに置かれる。しかし、ＣａｌｌＲｏｕｔｉｎｅＤｅｓｃｒｉｐｔｏｒを呼出すときにルーチン記述子によって記述されるルーチンのためのパラメータが置かれるレジスタは、そのルーチンがそのパラメータを見付け出すことを予定されているレジスタとは違うことがあり得る。このようにそのルーチンを実行するには、これらのパラメータは正しいレジスタ中に移動されていなければならない。このパラメータ移動［ｓｈｉｆｔｉｎｇ］は時間がかかるものであり、特にモードスイッチが実際に起こらないときは不必要、不具合なものである。
【００５７】
したがって好ましい実施例では、そうしたパラメータを記述している情報はルーチンが呼出される前はカプセルに封じ込められたものとしている。例えば、これを達成する命令は次のようなものである。ＳｅｔＵｐＭｉｘｅｄＭｏｄｅ（ＲｏｕｔｉｎｅＤｅｓｃｒｉｐｔｏｒ  ＊ｔｈｅＲｏｕｔｉｎｅ，ＰｒｏＩｎｆｏＴｙｐｅ  ｐｒｏｃＩｎｆｏ，＆ｐａｒａｍｅｔｅｒ  ｂｌｏｃｋ）  このＳｅｔＵｐＭｉｘｅｄＭｏｄｅ命令で始まるプログラムまたはコードセグメントと、そのルーチン記述子で同定されるプログラムまたはコードセグメントとが同じコードタイプのときは、ＳｅｔＵｐＭｉｘｅｄＭｏｄｅ命令はそのルーチン記述子によって同定されたプログラムまたはコードセグメントに有効なポインタを戻す。ＳｅｔＵｐＭｉｘｅｄＭｏｄｅ命令を出したプログラムまたはコードセグメントは次に、そのルーチン記述子によって同定されたルーチン、例えば（＊Ｐ）（ｐａｒａｍｅｔｅｒ１，ｐａｒａｍｅｔｅｒ２，．．．）を直接呼出し、これによってパラメータの移動量を減らしパフォーマンス速度を速める。
【００５８】
ＳｅｔＵｐＭｉｘｅｄＭｏｄｅ命令を開始するプログラムまたはコードセグメントがネイティブなコードタイプを持ち、そのルーチン記述子によって同定されるプログラムまたはコードセグメントが非ネイティブなコードタイプを有しているときは、ＳｅｔＵｐＭｉｘｅｄＭｏｄｅ命令は呼出されたときこのルーチンが＆ｐａｒａｍｅｔｅｒ  ｂｌｏｃｋパラメータで同定されたパラメータブロックのポインタを見つけることができるように、ポインタをルーチンに戻す。基本的にはパラメータブロックとは利用可能なメモリのブロックである。ルーチン記述子とＳｅｔＵｐＭｉｘｅｄＭｏｄｅ命令のパラメータとしてパスされた手続情報とはパラメータブロック中にストアされる。ＳｅｔＵｐＭｉｘｅｄＭｏｄｅ命令を開始するプログラムまたはコードセグメントは、次にルーチンを実行する。
【００５９】
［スタックスイッチフレーム］
図１０は、さまざまなスタックモデルと呼出し規約を有する異なる２プログラムセグメント間の遷移［ｔｒａｎｓｉｔｉｏｎ］を供給するスタックスイッチフレーム６０ａを示す。このスタックスイッチフレーム６０ａは、異なる２つのスタック規約間に遷移域を提供することによって異なる２タイプのスタックフレームが１つのスタックポインタ５８のある１つのスタックモデル上に共存することを可能にする。  あるプログラムセグメント（呼出人）が別のプログラムセグメント（被呼出人）を呼出すが、被呼出人が呼出人とは違うスタックモデルまたは呼出し規約を使うときは、スタックスイッチフレーム６０ａが呼出人のスタックフレーム６１と被呼出人のスタックフレーム６２間のスタック１４に位置される。呼出人のスタックフレーム６１は、そのコードまたはプロセスタイプに適したスタックフォーマットになっているのに対し、被呼出人のスタックフレーム６２は、その自分のコードまたはプロセスタイプに適したスタックフォーマットになっている。
【００６０】
スタックスイッチフレーム６０ａは、被呼出人のコードまたはプログラムセグメントが実行終了すると制御を即座に呼出人に戻すことができるようにされた呼出人のスタックフレーム６１に言及する情報を有する第１セグメント６３と、呼出人のフォーマットから被呼出人のフォーマットへ変更するパラメータがある第２セグメント６４と、期待される、つまり、被呼出人が取り扱うことができる１フォーマットでスタックスイッチフレーム６０ａを構成するのに適した内容を有する第３セグメント６５と、を有する。
【００６１】
図１１は、６８ＫルーチンがネイティブなＲＩＳＣルーチンを呼出すとき使われるスタックスイッチフレーム６０ｂを示す。スタック横に記された矢印は、スタックフレームがスタックに追加されていくにつれ増大していくスタックの増大方向を示している。スタックスイッチフレーム６０ｂは、好ましくは（６８Ｋパラメータから派生する）６８Ｋ入力パラメータ６６、広域変数の内容表（“ＴＯＣ”）［ｔａｂｌｅ  ｏｆ  ｃｏｎｔｅｎｔｓ］のポインタ６７、及び前記スタックフレームを再言及するポインタ６８を有している。ポインタ６８中のロービット［ｌｏｗ  ｂｉｔ］が１に設定され、スタックスイッチフレームであることを示している。スタックスイッチフレーム６０ｂは、被呼出人ルーチンが非揮発性レジスタ値を保存することができるように、保管レジスタ領域６９も有している。
【００６２】
図１２は、ＲＩＳＣルーチンが６８Ｋルーチンを呼出すとき使われるスタックスイッチフレーム６０ｃを示す。スタックスイッチフレーム６０ｃは、インジケータ７０、ＲＩＳＣレジスタ保管領域７２、保管された手続情報７４、ルーチン記述子領域７６、６８Ｋレジスタ保管領域７８、６８Ｋの結果スペース８０、６８Ｋのパラメータ８２、及びリターンアドレス８４を有している。インジケータ７０は、フレームポインタにとって非有効な値である値、つまり０、−１または奇数値にセットされる。ＲＩＳＣレジスタ保管領域７２は、モードスイッチが作動するたびにスタックにＲＩＳＣの非揮発性レジスタを保管するため使われる。ルーチン記述子領域７６は、好ましくは、ミックスモード域２８及び選択域２９（図２）を有している。６８Ｋの結果スペース８０及び６８Ｋパラメータ８２は、６８Ｋ被呼出人の呼出し規約に依存して、必要なときにスタック１４上にプッシュされる。６８Ｋパラメータ８２はＲＩＳＣ入力パラメータから派生し変換される。リターンアドレス８４は、６８Ｋコードが実行を完了したとき呼出されるルーチンのアドレスを含んでいる。
【００６３】
［モードスイッチング機構］
あるルーチンが異なるスタックモデルを持つ別のルーチンを呼出すときは、呼出人はスタック１４上のスタックフレームをプッシュする。するとモードスイッチング機構がスタック１４上のスタックスイッチフレームをプッシュする。するとスタックポインタ５８がスタックスイッチフレームの底をポイントするようにセットされる。もしそれがスタックスイッチフレーム６０ｃなら、６８Ｋスタックポインタがスタックスイッチフレームの底をもポイントするようセットされる。  スタックスイッチフレーム６０ｂは、スタックポインタ５８をポインタ６８の値にセットし、レジスタ１７のポインタ６８により言及された被呼出人のスタック中のロケーションに記憶されたリターンアドレスを記憶することにより、スタック１４からリリースされる。スタックスイッチフレーム６０ｃは、保管された非揮発性レジスタを復元し、スタックポインタをこれに従ってリセットすることによりリリースされる。
【００６４】
スタック１４は、スタック中にスタックスイッチフレーム６０ｂまたは６０ｃがあるとしてもフレームからフレームへとトラバースすることができる。スタックスイッチフレーム６０ｂにとって、ポインタ６８のロービットが１にセットされたら、それはスタックスイッチフレームであって、そのポインタ６８中の残りのビットは被呼出人のスタックフレームポインタをポイントする。もしスタックスイッチフレーム６０ｃにとって、インジケータ７０がフレームポインタにとって有効でない値に等しいなら、それはスイッチフレームである。
【００６５】
使用に当たっては、コードが実行されルーチンまたはファンクション呼出しが実行されるときは、その呼出しに関係するポインタは６８Ｋコードまたはルーチン記述子をポイントする。モードスイッチが作動するか否かを決定するのには、ルーチン記述子中のコードタイプ域が使われる。図１３〜図１６は６８ＫモードとＰｏｗｅｒＰＣ  ＲＩＳＣモード間をスイッチングするモードスイッチング機構について示す。図１３及び図１４は６８ＫモードからＲＩＳＣモードへスイッチングするときに関与するステップについて示し、図１５及び図１６はＲＩＳＣモードから６８Ｋモードへスイッチングするときに関与するステップについて示す。
【００６６】
図１３、図１４に示されるように、ミックスモード域２８がミックスモード値に等しいか、モードスイッチがそれ以外のものを表示しているときは、ルーチン記述子が有効なルーチン記述子であることを確認するため検査する。もしそれが有効なら、選択域がどちらのオペレーションが行われるべきかをみるため検査される。
【００６７】
もしそれが実行オペレーションなら、手続情報域がレジスタベースのルーチンか、スタックベースのルーチンかを判断するため解釈される。もしそれがレジスタベースのルーチンなら、スタックスイッチフレームが立てられる。もしＲＩＳＣルーチンがレジスタを修飾するか、レジスタ中の結果をリターンするなら、スイッチフレームがスタックスイッチフレーム上に保存されたスペースに６８Ｋレジスタからパラメータを移すことによってセットされる。次に、いずれの場合も、パラメータがＲＩＳＣレジスタに移される。
【００６８】
もしそれがスタックベースのルーチンなら、手続情報域によって定義されたパラメータ全てが６８Ｋスタックを取り払い［ｔａｋｅｎ  ｏｆｆ  ｔｈｅ  ６８Ｋ  ｓｔａｃｋ］、ＲＩＳＣレジスタ中におかれる。それからスタックスイッチフレームが立てられる。
【００６９】
図１４に示されるように、それがスタックベースのルーチンであろうとレジスタベースのルーチンであろうと、ルーチン記述子からのターゲットアドレスはＲＩＳＣコードへジャンプするために使われる。そのコードを実行後、ルーチンがレジスタベースかスタックベースかをみるため検査する。もしレジスタベースなら、出力パラメータをスタックスイッチフレームから６８Ｋレジスタに出力パラメータを戻す。しかしもしスタックベースなら、リターン値をコピーし、もし少しでも手続情報域に存在するなら、ＲＩＳＣレジスタから６８Ｋスタックへ戻す。いずれの場合も、スタックスイッチフレームをリリースして６８Ｋコードへジャンプして戻す。
【００７０】
図１３に示すように、もしそれがロードで実行オペレーションなら、非ネイティブコードによって既に行われたオペレーション以上のその他のローディングオペレーションが行われる。これらのローディングオペレーションは、例えば、リロケーション、ランタイムバインディング、初期化などを含む。次に手続情報が解釈され、実行オペレーションにつき記載したのと同じステップが行われる。
【００７１】
もしそれがリターンオペレーションなら、リターン結果が６８Ｋスタックから外され［ｐｕｌｌ  ｏｆｆ］、ネイティブなＲＩＳＣリターンレジスタに入力される。保管されていた非揮発性レジスタが復元され、スタックスイッチフレームがリリースされる。コントロールが次に呼出しコードに戻る。
【００７２】
図１５及び図１６は、ＲＩＳＣコードと６８Ｋコード間のスイッチング機構を示す。ルーチン記述子を上記の変形実施例のいずれかを使って呼出す。次にスタックスイッチフレームを割り当て、ＲＩＳＣ非揮発性レジスタの全てを後で記憶するためスタックスイッチフレーム中に保管する。
【００７３】
次にそれがレジスタベースかスタックベースかを決定し、それがレジスタベースなら、入力パラメータをネイティブなレジスタから引き出し、６８Ｋレジスタに入力する。
【００７４】
次に６８Ｋスタックフレームが立てられる。もし６８Ｋルーチンがある値をリターンするなら、そのためのスペースがスタックフレーム中に割り当てられる。ＲＩＳＣコードから入ってきたパラメータが６８Ｋスタックフレームに入力される。リターンアドレスがリターン値に等しい選択域を有している特別なルーチン記述子をポイントする値にセットされる。
【００７５】
ルーチンアドレスをルーチン記述子から取り出し、エミュレータが呼出される。エミュレータはそのコードを実行し、これが終了したとき、特別なルーチン記述子の始めとなるようにセットされたリターンアドレスを実行するべく試みる。エミュレータがそれを実行しようとすると、コントロールがモードスイッチング機構に戻される。モードスイッチング機構は選択域を検査するもので、リターンオペレーションと等しく、また、上述のような適当な動作をする。
【００７６】
［１オブジェクトコードタイプの多数の呼出し規約］
本発明はまた、１つのオブジェクトコードタイプ内の異なる呼出し規約間をスイッチングするのにも使うことができる。例えば本発明はＦＯＲＴＲＡＮとＰＡＳＣＡＬとをスイッチングするのに使うことができる。この場合、モードスイッチング機構は、実行またはコードタイプモードスイッチングは何も起こらないことを除けばほぼ同一で、むしろ呼出し規約の変形だけが行われる。また、スイッチングはコードタイプ間では発生せず呼出し規約間でだけしか発生しないので、スタックスイッチフレームも簡素化できる。
【００７７】
［１ルーチン内の多数の呼出し規約］
本発明はまた、ルーチン、つまり多数の呼出し規約を持っているコードまたはプログラムセグメントでも使うことができる。例えば、あるルーチンは第１のパラメータがセレクタ［ｓｅｌｅｃｔｏｒ］でその他のパラメータは数、大きさ、内容及びタイプのそれぞれでその選択値［ｓｅｌｅｃｔｏｒ  ｖａｌｕｅ］に左右されて変化するファンクションであることがある。図１７は記憶装置１６が複数の域９２のあるルックアップテーブル９０を有している好ましい実施例を示す。ルーチン記述子２０は有効な各選択値と関係し、そのルーチン記述子はその選択値に対応するプログラムまたはコードセグメントを照合する。ルックアップテーブル９０中の第１域９２ａは、ルーチンに対応するルックアップテーブル中の適切な域９２を探索［ｌｏｏｋ
ｕｐ］するプログラムセグメントまたはコードセグメントに分岐せよとする指示を有している。当該域９２は選択値と結合して、どのルーチン記述子を使用し、それによってどのコードセグメントまたはプログラムセグメントを実行するかを決定するのに使われる。
【００７８】
例えば、あるルーチンは１、２、または３という３つの異なる有効値を持つことができるセレクタの第１パラメータを持っていて、そのセレクタの値次第でそれぞれ従う１、２、または３のパラメータを持つことができる。即ち、もし選択値が１なら、１パラメータがそのセレクタに従うが、もし選択値が２なら、２つのパラメータがそのセレクタに従う。各選択値にとって、１ルーチン記述子２０は正しいパラメータ数だけそのルーチンを行うように１コードセグメントまたは１プログラムセグメントに関連している。
【００７９】
ルーチンがルックアップテーブル９０中に探索されると、どのルーチン記述子を使い、それによってどのコードセグメントまたはプログラムセグメントを実行するかを決定するため選択値が使われる。
【００８０】
最後に、上述実施例の技術的な特徴についてまとめておく。
【００８１】
第１の技術的な特徴は、１プロセッサ環境中にさまざまなオブジェクトコードタイプを有する複数のプログラムセグメントを実行する装置であって、つぎの構成要素を含むことを特徴とする装置にある。
（ａ）プロセッサー。
（ｂ）メモリー。
（ｃ）該プロセッサーがアクセスできるスタック。このスタックは、第１スタックフレームと第２スタックフレームを備え、該第１スタックフレームは第１オブジェクトコードタイプを有する第１コードセグメントに関係付けられ、第２スタックフレームは第２オブジェクトコードタイプを有する第２コードセグメントに関係付けられる。第１及び第２のオブジェクトコードタイプは互換性がないので第１及び第２のスタックフレームを異なるフォーマットになるようにされる。上記第１コードタイプは第１の呼出メカニズムに関係付けられ上記第２コードタイプは第２の呼出メカニズムに関係付けられ、これら第１及び第２の呼出メカニズムも互換性がないものとされている。
（ｄ）スタックスイッチフレーム。このスタックスイッチフレームは、上記スタックにおいて、上記第１及び第２スタックフレーム間に配置される。さらにこのスタックフレームスイッチは、第１スタックフレームを参照する第１セグメントと、第１スタックフレームのフォーマットから第２スタックフレームのフォーマットに変換されたパラメータを持つ第２セグメントと、スタックスイッチフレーム本体が第２スタックフレームにより参照可能なフォーマットになるようにする第３セグメント情報とを有するものと、
（ｅ）第１モードから第２モードへ切り換えるスイッチを示す指示手段。
（ｆ）複数のオブジェクトコードタイプのうちの１つを有するコードセグメントを実行する実行手段。
上記実行手段は、上記第１コードセグメントを上記第１モードで実行し、上記第２コードセグメントを上記第２モードで実行する。上記指示手段は、上記第１コードセグメントが上記第１呼出メカニズムを使って上記第２コードセグメントを呼び出したとき起動される。
（ｇ）第１モードから第２モードへ切り換えるスイッチ手段。このスイッチ手段は、上記指示手段によって作動される。
上記実行手段は、上記第１コードセグメントの実行時に上記スタック上に上記第１スタックフレームを割り当て、上記スイッチ手段が第１モードから第２モードへ切り換えたとき上記スタックスイッチフレームと上記第２スタックフレームを上記スタックに割り当てて上記第２呼出メカニズムを使って上記第２コードセグメントを実行する。
（ｈ）上記第１モードに戻る戻り手段。この戻り手段は、上記第２コードセグメントの実行を終えたら作動する。
【００８２】
第２の技術的な特徴は、同一のオブジェクトコードタイプを持つが互換性のない呼出メカニズムとなっている複数のソフトウエアルーチンを呼び出す複数のメカニズムを実行する装置であって、つぎの構成要素を含むことを特徴とする装置にある。
（ａ）プロセッサー。
（ｂ）上記プロセッサーがアクセスできるメモリー。
（ｃ）該プロセッサーがアクセスできるスタック。このスタックは、第１スタックフレームと第２スタックフレームを備え、該第１スタックフレームは第１オブジェクトコードタイプを有する第１コードセグメントに関係付けられ、第２スタックフレームは第２オブジェクトコードタイプを有する第２コードセグメントに関係付けられる。第１及び第２のオブジェクトコードタイプは互換性がないので第１及び第２のスタックフレームを異なるフォーマットになるようにされる。上記第１コードタイプは第１の呼出メカニズムに関係付けられ上記第２コードタイプは第２の呼出メカニズムに関係付けられ、これら第１及び第２の呼出メカニズムも互換性がないものとされている。
（ｄ）スタックスイッチフレーム。このスタックスイッチフレームは、上記スタックにおいて、上記第１及び第２スタックフレーム間に配置される。さらにこのスタックスイッチフレームは、第１スタックフレームを参照する第１セグメントと、第１スタックフレームのフォーマットから第２スタックフレームのフォーマットに変換されたパラメータを持つ第２セグメントと、スタックスイッチフレーム本体が第２スタックフレームにより参照可能なフォーマットになるようにする第３セグメントとを有する。
（ｅ）第１ソフトウエアルーチンと第２ソフトウエアルーチンを特定する特定手段。該第１ソフトウエアルーチンと第２ソフトウエアルーチンは同一のオブジェクトコードタイプを有し、第１ソフトウエアルーチンは第１呼出メカニズムで呼び出すことができ第２ソフトウエアルーチンは第２呼出メカニズムで呼び出すことができる。第１呼出メカニズムは第２呼出メカニズムと互換性がない。
（ｆ）上記第１ソフトウェアルーチンが上記第１呼出メカニズムを使用して上記第２ソフトウェアルーチンを呼び出そうとしたことに応答して、上記第２呼出メカニズムを利用して上記第２ソフトウェアルーチンを呼び出す第２呼出メカニズム利用手段。第２呼出メカニズム利用手段は、上記スタックスイッチフレームと上記第２スタックセグメントを上記スタックに割り当て、上記第２ソフトウエアルーチンを実行する。
（ｇ）上記第１モードに戻る戻り手段。この戻り手段は、上記第２ソフトウエアルーチンの実行を終えたら作動する。
【００８３】
第３の技術的な特徴は、複数の呼出メカニズムを有するソフトウエアルーチンを実行する装置であって、該ソフトウエアルーチンは１または２以上のパラメータを持ち、第１パラメータはセレクタで、他のパラメータは該セレクタの値によって数、サイズ、内容、及びタイプを異にするものであり：メモリーと；１または２以上のセレクタ値を特定する特定手段であって、これらセレクタ値は１または２以上のパラメータの具体的な構成に関係しているものと；複数のルーチン記述子であって、これら複数のルーチン記述子の１つ１つにセレクタ値各々を関連づけ、関連づけられたセレクタ値と関係する特定のパラメータ構成でソフトウエアルーチンを実装するコードセグメントを参照するものと；セレクタ値を特定する特定手段と；上記メモリー中のテーブルであって複数のフィールドを備え、該フィールド中には、テーブル中のフィールドの値を取り出すためにプログラムを分岐するインストラクションを参照する第１フィールドと、他の複数のフィールドとが含まれ、これら他のフィールド各々は各々有効に特定されたセレクタ値を有してルーチン記述子と関連づけられているものと；特定のセレクタ値に従って上記テーブル中のセレクタ値のフィールドから値を取り出す手段と；該特定のセレクタ値のフィールドに関連づけられたルーチン記述子によって識別されたコードセグメントを実行する実行手段とをを有することを特徴とする装置にある。
【００８４】
第４の技術的な特徴は、プロセッサーとメモリーを備えた、１プロセッサー環境中の複数のオブジェクトコードタイプを実行する装置であって、これら複数のオブジェクトコードタイプは少なくとも第１のオブジェクトコードタイプと第２のオブジェクトコードタイプを有し、該第１及び第２のオブジェクトコードタイプは互換性がないものであって：上記第１オブジェクトコードタイプを有する第１ソフトウエアルーチンを特定する特定手段と；上記第２オブジェクトコードタイプを有する第２ソフトウエアルーチンを特定する特定手段と；上記第１オブジェクトコードタイプから上記第２オブジェクトコードタイプへ切り換えるスイッチを指定する指定手段であって、上記第１ソフトウエアルーチンに透過的なものと；上記第１ソフトウエアルーチンの実行中に上記指定手段に遭遇したとき上記第１オブジェクトコードタイプから上記第２オブジェクトコードタイプへ切り換えるスイッチ手段であって、この切替が上記第１ソフトウエアルーチンに透過的に実行されるものと；上記第２ソフトウエアルーチンを実行する実行手段であって、上記第１オブジェクトコードタイプから第２オブジェクトコードタイプへ切り換えられたとき作動するように上記スイッチ手段に接続されたものと；上記第２ソフトウエアルーチンの実行が終わったら上記第１オブジェクトコードタイプに戻る戻り手段であって、上記第１ソフトウエアルーチンの実行を再開するものとを有することを特徴とする装置にある。
【００８５】
第５の技術的な特徴は、１プロセッサー環境中でさまざま異なるオブジェクトコードタイプの複数のソフトウエアルーチンを実行する装置であって；ソフトウエアルーチンを記述するルーチン記述子と；該ルーチン記述子中に置かれるモード間を差別化するミクストモード域と；上記ミクストモード域を特定の所定値にセットするセット手段と；上記ルーチン記述子中に置かれるプロシージャポインタであって、ソフトウエアルーチンを指定するものと；上記ルーチン記述子に配置され、特定されたソフトウエアルーチンのオブジェクトコードタイプを指定する指示手段と；上記特定されたソフトウェアルーチンのオブジェクトコードタイプを特定するために上記指示手段をセットするセット手段と；上記特定されたソフトウエアルーチンが、当該特定されたソフトウェアルーチンと互換性のないオブジェクトコードタイプの他のソフトウエアルーチンから呼び出されるときに上記特定されたソフトウェアルーチンを実行する実行手段とを有することを特徴とする装置にある。
【００８６】
第６の技術的な特徴は、同一のオブジェクトコードタイプだが互換性のない呼出メカニズムのソフトウエアルーチンを呼出すための複数のメカニズムを実行する装置であって：プロセッサと；該プロセッサがアクセスできるメモリーと；第１ソフトウエアルーチンと第２ソフトウエアルーチンとを特定する特定手段であって、該第１ソフトウエアルーチンと第２ソフトウエアルーチンは同一のオブジェクトコードタイプを持ち、第１ソフトウエアルーチンは第１呼出メカニズムにより呼び出されることができ、第２ソフトウエアルーチンは第２呼出メカニズムにより呼び出されることができるが、これら第１呼出メカニズムと第２呼出メカニズムとは互換性がないものと；上記第１ソフトウェアルーチンが上記第１呼出メカニズムを使用して上記第２ソフトウェアルーチンを呼び出そうとしたことに応答して、上記第２呼出メカニズムを利用して上記第２ソフトウェアルーチンを呼び出す第２呼出メカニズム利用手段であって、上記第２ソフトウエアルーチンを実行するものと；上記第１モードへ戻す戻し手段であって、上記第２ソフトウエアルーチンの実行が完了したら作動するものとを有することを特徴とする装置にある。
【００８７】
第７の技術的な特徴は、少なくとも１つのプロセッサとメモリーとを備えたコンピュータシステムにおけるプロセッサ環境中で複数のモードを実行する方法であって、該モード各々は該プロセッサにより実行することができる関連する一組の有効なインストラクションを持つものであり、以下のステップを有する方法にある。
（ａ）メモリーにルーチン記述子を割り当てるステップ。
（ｂ）ルーチン記述子のアドレスにポインタをセットするステップ。
（ｃ）第１モードでは無効なインストラクションに等しい内容にルーチン記述子中の第１域をセットするステップ。この第１域はルーチン記述子をポイントするポインタが第１域の内容をポイントするように配置されている。
（ｄ）ルーチン記述子中のプロシージャポインタ域の内容を第１モード以外のモードで実行できるソフトウエアルーチンのアドレスにセットするステップ。
（ｅ）上記第１域の内容を第１モードで実行するステップ。
（ｆ）第１モードでは無効なインストラクションを実行したときモードを切り換えて、該第１モードと異なる第２モードであってソフトウエアルーチンを実行できるものにするステップ。
（ｇ）第２モードへ切り換えた後、プロシージャポインタ域でアドレスされたルーチンを実行するステップ。
【００８８】
第７の技術的な特徴は、１ルーチン中に１ソフトウエアルーチンを呼び出す複数のメカニズムを実行する方法であって：複数域を有するルックアップテーブルを作成し；該複数域中にモード切り換えメカニズムを特定するため上記複数域中に第１域をセットし；ルーチンにとって有効なセレクタ値をそれぞれ取り扱うコードまたはプログラムのセグメントを書き込み；該コードまたはプログラムのセグメント各々のためのルーチン記述子を作成し；それら各々のルーチン記述子のためのルックアップテーブル中に域をセットし；セレクタ値に基づきルックアップテーブル中に具体的な域を探索し；該具体的域により指定されたルーチン記述子により記述されたルーチンを実行するステップを有することを特徴とする方法にある。
【図面の簡単な説明】
【００８９】
【図１】本発明に従ってミックスモードを実行するのに適した各構成部分を有するコンピュータシステムを示す。
【図２】ルーチン記述子を示す。
【図３】手続情報域の内容を示す。
【図４】手続情報域の内容を示す。
【図５】手続情報域の内容を示す。
【図６】手続情報域の内容を示す。
【図７】手続情報域の内容を示す。
【図８】手続情報域の内容を示す。
【図９】レジスタパラメータ域の内容を示す。
【図１０】スタックスイッチフレームの１構成を示す。
【図１１】スタックスイッチフレームの１構成を示す。
【図１２】スタックスイッチフレームの１構成を示す。
【図１３】６８ＫモードからＲＩＳＣモードへスイッチングするときに関係するステップを示す。
【図１４】図１３の続き（６８ＫモードからＲＩＳＣモードへスイッチングするときに関係するステップを示す。）
【図１５】ＲＩＳＣモードから６８Ｋモードへスイッチングするときに関係するステップを示す。
【図１６】図１５の続き（ＲＩＳＣモードから６８Ｋモードへスイッチングするときに関係するステップを示す。）
【図１７】多数の呼出し規約があるルーチンを取り扱うのに好ましい実施例を示す。
【符号の説明】
【００９０】
１２    ＣＰＵ  
１４    スタック
１６    記憶装置
２０    ルーチン記述子
４０    呼出し規約域
４２    結果サイズ域  
４４    レジスタパラメータ域
４６    結果サイズ域
４８    パラメータサイズ域
５０    セレクタサイズ域
５２    ユーザ定義可能域
【図１】
2006331450.tif 000003
【図２】
2006331450.tif 000004
【図３】
2006331450.tif 000005
【図４】
2006331450.tif 000006
【図５】
2006331450.tif 000007
【図６】
2006331450.tif 000008
【図７】
2006331450.tif 000009
【図８】
2006331450.tif 000010
【図９】
2006331450.tif 000011
【図１０】
2006331450.tif 000012
【図１１】
2006331450.tif 000013
【図１２】
2006331450.tif 000014
【図１３】
2006331450.tif 000015
【図１４】
2006331450.tif 000016
【図１５】
2006331450.tif 000017
【図１６】
2006331450.tif 000018
【図１７】
2006331450.tif 000019