(57)【特許請求の範囲】
【請求項１】
第１の所定のメモリの順番を使用するコンピュータシステム上で実行すべく構成されている第１プログラムを前記第１の所定のメモリの順番とは異なる第２の所定のメモリの順番を使用するコンピュータシステム上で実行可能な第２プログラムへ変換する方法において、
２以上である第１所定数の下位ビットからなりバイト単位でメモリアクセス可能なバイトアドレスと第２所定数の上位ビットからなりワード単位でメモリアクセス可能なワードアドレスとによって構成されるアドレスを有しているデータをバイト毎に処理する前記第１プログラム内の全ての命令を決定し、
前記データの各バイトアドレスの前記第１所定数の下位ビットの相補的ビットを発生し、
前記バイトアドレスの前記第１所定数の下位ビットを前記相補的ビットで置換させて前記データの各バイトに対して新たなバイトアドレスを発生する、
上記各ステップを有していることを特徴とする方法。
【請求項２】
請求項１において、更に、前記第１プログラムが前記第１の所定のメモリの順番を使用するコンピュータシステム上で実行すべく構成されているか否かを検知するステップを有していることを特徴とする方法。
【請求項３】
請求項１において、前記相補的ビットを発生する前に前記バイトアドレスと前記ワードアドレスとを分離させることを特徴とする方法。
【請求項４】
請求項１において、前記第１の所定のメモリの順番がビッグエンディアン順番及びリトルエンディアン順番の内の一方であり、且つ前記第２の所定のメモリの順番が他方の順番であることを特徴とする方法。
【請求項５】
第１の所定のメモリの順番を使用するコンピュータシステム上で実行すべく構成されている第１プログラムを前記第１の所定のメモリの順番とは異なる第２の所定のメモリの順番を使用するコンピュータシステム上で実行可能な第２プログラムへ変換する装置において、
２以上である第１所定数の下位ビットからなりバイト単位でメモリアクセス可能なバイトアドレスと第２所定数の上位ビットからなりワード単位でメモリアクセス可能なワードアドレスとによって構成されるアドレスを有しているデータをバイト毎に処理する前記第１プログラム内の全ての命令を決定する手段、
前記データの各バイトアドレスの前記第１所定数の下位ビットの相補的ビットを発生する手段、
前記バイトアドレスの前記第１所定数の下位ビットを前記相補的ビットで置換させて前記データの各バイトに対して新たなバイトアドレスを発生する手段、
を有していることを特徴とする装置。
【請求項６】
請求項５において、更に、
前記第１プログラムが前記第１の所定のメモリの順番を使用するコンピュータシステム上で実行すべく構成されているか否かを検知する手段、
前記バイトアドレスと前記ワードアドレスとを分離させる手段、
を有していることを特徴とする装置。
【請求項７】
請求項５において、前記第１の所定のメモリの順番がビッグエンディアン順番及びリトルエンディアン順番の内の一方であり、且つ前記第２の所定のメモリの順番が他方の順番であることを特徴とする装置。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明はデジタルコンピュータの分野に関するものである。更に詳細には、少なくとも２つの異なったバイト順番の内の何れかを使用するプログラムをコンピュータが稼動することを可能とする方法及び装置に関するものである。
【０００２】
【従来の技術】
異なったコンピュータシステムは、それらのメモリ内においてデータのワードを異なった態様で組織化することが知られている。あるコンピュータでは、最小桁ビットが最下位のアドレスに存在するようにデータのワードを格納する。このような装置は、所謂「リトルエンディアン（Ｌｉｔｔｌｅ  Ｅｎｄｉａｎ）」（尚、「ＬＥ」とも省略する）アーキテクチャを有している。その他のコンピュータは、最大桁ビット（又は、ある場合においては、符号ビット）を最下位のアドレスに存在させた状態でデータを格納する。これらの装置は「ビックエンディアン（Ｂｉｇ  Ｅｎｄｉａｎ）」（尚、「ＢＥ」とも省略する）アーキテクチャを有している。これらのデータ組織システムについてはより詳細に多数の文献に記載されている。そのような文献の１つとしては、Ｃｏｈｅｎ著「聖戦及び平和への希求に関し（Ｏｎ  Ｈｏｌｙ  Ｗａｒｓ  ａｎｄ  ａ  Ｐｌｅａ  ｆｏｒ  Ｐｅａｃｅ）」、コンピュータ、１０／８１、ｐｐ．４８−５４の文献がある。
【０００３】
マシンがＢＥであるか又はＬＥであるかということは、その特定のマシン内においては殆ど差異を生ずることはない。各アーキテクチャはそれ自身の支持者を有しているが、両方のアーキテクチャは等しく有利性のあるものであると一般的に理解されている。異なったアーキテクチャのマシンが相互作用を行なわねばならない場合、又は一方のタイプのマシンに対して書かれたソフトウエアが異なったタイプのマシン上で稼動される場合に、２つのアーキテクチャを使用することは問題となる。これらの状態においては、一方のアーキテクチャに従って一方のマシン内に格納されたデータ又はプログラムは、異なったアーキテクチャのマシンによって誤解されることがある。更に、データワードの一部にアクセスするか又は処理する命令は、著しく異なった結果を有することとなる。
【０００４】
リトルエンディアンマシンとビッグエンディアンマシンとの間の両立性が欠如するために、それらの間での適合性を改善するための多数の試みがなされている。これらの試みの殆どはハードウエア装置の形態となり、通常シフトレジスタと種々の論理ゲートの組合わせから構成されている。このようなハードウエアはＢＥ命令とＬＥ命令の両方が動作することを可能とするものではあるが、このようなハードウエアはコンピュータシステムに複雑性を加え且つその速度を減少させる。このような結果は不所望なものである。
【０００５】
【課題を解決するための手段】
本発明は、その実施形態の１つにおいては、殆どのマイクロプロセサと適合性がありＬＥマシン上でＢＥプログラムを稼動すること又はその逆を行なうことを可能とするソフトウエアモジュールを供給することにより従来技術の既知の欠点を解消している。
【０００６】
本モジュールは、オペレーティングシステムソフトウエアの一部であり、且つ４バイトのデータを有するコンピュータワードの場合、１個のワードのアドレスの下位２ビットと２進３とをＸＯＲ処理することは反対のバイト順番のマシンに対する所望のバイトをアドレスすることとなるという事実を使用している。本明細書では４バイトワードでの動作についてのみ説明するが、本発明は異なった数のバイトを有するワードと共に使用することが可能であることは勿論である。
【０００７】
本発明のソフトウエアでの実現及びハードウエアでの実現の両方が可能である。ソフトウエアで実現する場合には、何等付加的な又は特別なハードウエアを必要とするものではないが、同一の機能を達成するためにはハードワイヤードの装置よりも稼動速度は遅い。従って、ある状況下においては、本発明のハードウエアでの実現の場合が望ましい。ハードウエアでの実現の場合、１個のレジスタにおける１個のビットが、ビッグエンディアン又はリトルエンディアンを表わすためにセット状態とされるか又は非セット状態とされる。該ビットは、ある部分のワード命令がエンディアンであることが変更されねばならないことを表わしている。
【０００８】
【実施例】
本発明は、ＢＥ順番又はＬＥ順番の何れかに対して意図されているプログラムを単一のコンピュータでラン即ち稼動することを可能としている。エンディアンスイッチングと呼ばれる簡単な技術が、１つのコンピュータが、僅かな性能のオーバーヘッドでもって、異なったバイト順番のコンピュータを模倣することを可能としている。
【０００９】
殆どのコンピュータはワードアドレス型マシンである。平均的な条件下においては、データは、ワードの部分ではなく、ワードでアクセスされる。異なったバイト順番の２つのマシンは、ワードに関しては、極めて類似している。ワードを使用するか又は参照する動作に関して、ビッグエンディアンマシンとリトルエンディアンマシンとの間では、マシン動作は同一であり且つデータはワードで格納される。ワードを参照するにすぎないプログラムは、何れかのバイト順番のマシン上でラン即ち稼動する。
【００１０】
この原理は、図１に示したロードワード命令によって示され、その命令はＬＥマシン用のものである。ＢＥマシンが使用された場合には、同一のロードワード命令は同一の態様で機能する。この説明においては、１つのアドレスは、ワードアドレスとそれに続く２ビットバイトアドレスとから構成される一対のシンボル（記号）によって表現される。
【００１１】
ＢＥマシンとＬＥマシンとの間の差異は、本明細書においては、バイトメモリ操作を使用する場合のアドレスの下位２ビットの解釈によって示される。ＬＥマシンは、アドレスが下位２ビットとして００を有する場合に最小桁ビット（ＬＳＢ）を有する８ビットを選択する。ＢＥマシンは、同一のアドレスビットを使用する場合に、最大桁ビット（ＭＳＢ）を有する８ビットを選択する。あるＢＥマシンにおいては、選択されたバイトはそのデータに対する符号ビットを有している。
【００１２】
図２はＢＥマシン及びＬＥマシンの両方に対しロードバイト操作を示している。図２において、所望のバイトを有するワードは、ワードアドレスのみを使用するメモリから抽出され且つアライメントレジスタ内に配置される。両方のマシンにおいて、パワーアップ（始動）ルーチン期間中に初期化されるｒｅｓｅｔ−ｔｉｍｅ  ｓｅｔ ｅｎｄｉａｎフラッグを使用して、何れのタイプのマシンが使用されているかを表わし且つどの８ビットが該レジスタ内のＬＳＢ位置内に配置されるべきであるかを表わす。図２に示した如く、ＢＥメモリは符号及び最大桁ビットを最下位バイトアドレス内に配置させ、且つＬＥメモリは最小桁ビットを同一の位置内に配置させる。
【００１３】
図３は、最小桁ビット（ＬＳＢ）又は最大桁ビット（ＭＳＢ）の何れかから開始してバイトに番号付けをするために２つの下位アドレスビットを使用することにより、ＢＥマシン又はＬＥマシンの何れかを形成することが可能であるという原理を示している。図示例においては、ＢＥマシン用の下位２ビット００によってアドレスされるバイトは「Ｍ」を有しており、且つ２つの上位ビット１１は「Ｓ」を有するバイトをアドレスする。ＬＥマシンの場合、その状態は全く逆であり、即ち００によってアドレスされるバイトは「Ｓ」を有しており、且つ１１によってアドレスされるバイトは「Ｍ」を有している。図示した如く、何れかのマシンによって使用されるバイトアドレスと「１１」（２進３）とを排他的ＯＲ（ＸＯＲ）処理すると、反対のデータ順番規則を使用して同一のデータをアクセスするための正確なバイトアドレスが得られる。図４は、更に、与えられたアドレスのオフセットを単に変化させるだけで与えられたマシンを異なったバイト順番のマシンのように動作させることが可能であるという点において、これら２つのタイプのマシンがどのようにして実際に極めて類似しているものであるかということを示している。注意すべきことであるが、異なったマシンに対するオフセットは、この例の場合においては、互いに鏡像関係にある。
【００１４】
最初は、ワードに関してＢＥマシンとＬＥマシンとを同一のものとして取扱うことは誤ったもののように見える。一般的に、ＢＥマシン及びＬＥマシンの両方が同一のＡＳＣＩＩファイルから読取ることが可能であることが知られており、それらのマシンがワード長２進データを交換する場合に問題が発生する。連続的なバイトが１つのファイルに書込まれる場合、両方のタイプのマシンに対する結果は予想通りのものである。しかしながら、その組のバイトを単一のワードとして取扱う場合、その結果は、しばしば、誤ったものである。これらの矛盾は、各マシンの入力／出力（Ｉ／Ｏ）システムが、ワードをどのようにして一連のバイトへ分解するかということを知っているということを知ることにより説明することが可能である。全てのＩ／Ｏ操作はキャラクタ（文字）指向型である。各システム及びマシンは、その内部に、ワードをそのＩ／Ｏ装置の一部として組立て且つ分解するための手段が組込まれている。図５はファイル１５内の一連のキャラクタ、即ち文字列を示しており、且つこれらの文字がどのようにしてＢＥマシン２０及びＬＥマシン２５によって１つのワード内にマップされるかということを示している。この図が示す如く、マシンがＢＥであるか又はＬＥであるかということを確立するものは、どのようにしてプロセサが１つのワードからバイトを抽出するかということとどのようにしてＩ／Ｏシステムがワードを組立て且つ分解するかということとの組合わせである。
バイト順番のエミュレーション
前述した説明から明らかな如く、適切なバイト順番の取扱いは２つの事柄によって制御され、即ち、下位アドレスビットの解釈及びバイトストリームとメモリ内のワードとの間の変換のためのＩ／Ｏ規則である。これらの両方の事柄がハードウエアか又はソフトウエアの何れかで解決することが可能である場合には、何れのバイト順番においてもプログラムを稼動するマシンを形成することが可能である。
【００１５】
第一の決まりである下位アドレスビットの解釈は、本発明の好適実施例におけるコンピュータの一部としてソフトウエア内において実現されており、且つ第一のバイト順番の２個の下位ビットを２進３とＸＯＲ処理することにより１つのバイト順番におけるバイトアドレスは他方のバイト順番のバイトアドレスをシュミュレートさせることが可能であるという観察に依存している。このタスクを実施するためのソフトウエアは、プログラムのコンパイル時間において又はその後に機能する。例えば、バイト順番（ｂｙｔｅ  ｏｒｄｅｒ）を反転させるための本発明を包含するコンピュータは、ロードされるべきプログラムを読取り、且つどのようにしてバイトが１つのワードにパックされるかという異なった決まりを考慮に入れるために各部分的なワードメモリ参照を調節することが可能である。一貫性を持ってバイト順番を変化させるか乃至は再配列させるために変換プログラム内には３つの標準的なタイプのバイトアドレス動作用命令が設けられていなければならない。これらの３つの場合を図６に示してある。
【００１６】
ケース１においては、ベースレジスタが既にワード上に整合されていることが知られている。この場合においては、新たなベースアドレスの計算は、システムコンパイラによって実施され、それは、単に、オフセットと２進３とをＸＯＲ処理して適切な変位を与えるにすぎない。ケース２においては、オフセットが０であるか又はオフセットが存在せず、且つベース整合は未知である。このような態様でバイトがアドレスされる場合、ベースレジスタ内の値は２進３とＸＯＲ処理される。その結果は正しいオフセットとして使用される。ベース整合又はオフセット整合の何れもが知られていない場合には、図６（Ｃ）に示した３つの命令を使用して、新たな順番で正しいバイトをアドレスする。これらの命令は非常に高速で稼動し、従ってエキストラな命令を実施することがシステムの性能に影響を与えることは殆どない。
【００１７】
上述した如き３つの場合の全ては、低アドレスビットの適切な解釈を取扱っている。本発明の好適実施例はこれらのアドレス変換を達成するためにソフトウエアを使用しているが、システムプロセサに対するハードウエアの修正により同一の目的を達成することが可能である。あるプロセサでは、プロセサのバイト順番をシステムのリセット時においてセットすることを可能としている。この場合においては、ユーザモードプログラムを使用して、プログラム（タスク）毎にマシンのバイト順番を調節することは比較的簡単である。このことを行なうための最も簡単な方法は、前のプログラム又は最後のリセットにおける何れかにおいて特定されたバイト順番と同一であるか又は異なったバイト順番で新たなプロセスを稼動するか否かを表わすビットをステータスレジスタ内に定義することである。このフラッグをセットすることは、その新たなプログラムの期間中、バイト順番において不変的なシフトを発生させる。この技術がハードウエアで実現される場合には、システムは、異なった「エンディアン特性」を表わすビットがターンオンされたことを検知する。ワードの一部をアクセスする命令は変更されることはない。その代わりに、３２ビットアドレスバスは分岐経路を有している。アドレスの内の３０ビットはロードアライナレジスタ内に配置される。残りの２ビットは、２進３とＸＯＲ処理されて、正しいバイトアドレスを得る。次いで、これらの３０ビット及び２ビットはロードアライナにおいて再結合される。この方法は、システムの性能を劣化させることはない。なぜならば、プログラムは、リセットタイムフラッグが表示されたバイト順番へセットされた如くに正確に動作するからである。これらの操作は、システムがユーザモードにあり且つ逆エンディアンビットがオンである場合にのみ発生する。影響される命令は、ロード命令及びストア（格納）命令等である。
【００１８】
第二の変換、即ちワードのＩ／Ｏシステム内のバイトストリームへの及び該バイトストリームからの変換も、好適実施例においては、ソフトウエアにおいて達成される。読取られるか又は書込まれるデータの全てのバッファを一様にワードスワッピングすることにより、マシンの内蔵されている決まりを受付けることが可能である。ワードスワッピングは、２つの外側のバイトと２つの内側のバイトとを交換する操作である（即ち、バイト０と３とをスイッチし且つバイト１と２とをスイッチする）。ワードスワッピング及びそれを実現するのに必要なコードを図７に示してある。
エンディアンスイッチャ（Ｅｎｄｉａｎ  Ｓｗｉｔｃｈｅｒ）の構成
上に説明した両方の決まりを実現する幾つかの別の方法が可能である。バイトオーダ、即ちバイト順番でのエミュレーションのために本明細書で説明したハードウエアの修正を多くのマシンが有するものではないので、純粋なソフトウエアのエミュレーションについても検討する。
【００１９】
ＬＥプログラムとＢＥプログラムの両方で稼動するコンピュータがハードウエア修正を有するものでない場合には、変換プログラムを使用することが可能である。そのプログラムは、プログラムと初期化したデータの両方をワードスワッピングする。又、部分的なワードを適切にアドレスするためにコードを「再書込み」することが必要な場合がある。マシン内にプログラムをエンタする場合にその修正を行なうことが可能であり、且つその変更したプログラムはその変換した形態で格納することが可能である。
【００２０】
異なったバイトオーダ（バイト順番）装置のネットワークを有する環境においては、何れかのマシンに関して何れかのプログラムを実行することを所望する場合、そのバイト順番は実行の前に固定させることは不可能である。この場合、プログラムはその実行の一部として修正され、その変換はプログラムがシステムメモリ内に移動される場合に発生する。その変換プログラムの実行時間は小さく、且つ部分的ワードメモリ操作を修正するための作業量も比較的小さい。アドレス内の下位２ビットを解釈するためにマシンが前に説明したハードウエア修正を有している場合には、必要とされる唯一のプログラム修正は、プログラムと初期化データとをワードスワッピングすることである。アプリケーションプログラムが実際にロードされる迄ワードスワッピングが遅延される場合（要求に応じてのワードスワッピング）、変換プロセスのために必要とされるマシンのオーバーヘッドは、そのプログラムの稼動時間全体に亘って償却される。
【００２１】
Ｉ／Ｏシステム内のデータのバイトの直列化に関連するＢＥマシンとＬＥマシンとの間の差異は、データが出力バッファへ書込まれるか又はそれから読取られる場合に取扱われる。出力バッファ内の全てのデータは、ディスクから物理的なＩ／Ｏを読取った直後か又はディスクへ物理的なＩ／Ｏを書込む直前にワードスワッピングされる。
オペレーティングシステムのサポート
オペレーティングシステムは、反対のバイト順番をエミュレートし、且つ稼動中のプログラムのシステム仮定をエミュレートすることが可能でなければならない。このことは、適合性のあるシステムコールベクトル及び、多分、通過中のデータ構成の変換の両方を必要とする場合がある。全ての２進ロードモジュールは、そのバイト順番を、該モジュールの開始時にエンコードさせる。このことは、オペレーティングシステムに対して、プログラムのシステム仮定をエミュレートするために必要とされるアクションについて通知する。
【００２２】
ＵＮＩＸシステム間の類似性は、他のシステムのオペレーティングシステムインターフェースの多くのものを比較的容易にサポートすることを可能としている。システムコールベクトルにおいて適合性のない要素が存在する場合には、それらの要素は幾つかの方法で処理することが可能である。オペレーティングシステムが異なった「エンディアン特性」の２進数を識別し且つ別のベクトルを選択することが可能である。割当てたシステムコール内にオーバーラップが存在しないか又は僅かのオーバラップが存在するにすぎない場合には、反対のエンディアンシステムコールへのエントリは、通過中のデータ構成（存在する場合）を変化させ且つ元のシステムコールへ分岐することを可能とする。
【００２３】
プログラムは、入力／出力メカニズムが文字データをワードへ変換すると仮定するバイト順番でファイルとして格納される。従って、プログラムの組織は、そのプログラムが実行される前に変更されねばならない。前述した如く、このことは比較的容易である。なぜならば、ロードモジュール内の全ての命令及び全ての初期化データワードがスワッピングされるからである。バイトがスイッチされる１つの理由は、ネットワークインターフェースがバイト指向型であり、且つＢＥからＬＥへ移動し且つ帰還する場合に本質的にワードをスワッピングするからである。従って、補償が必要とされる。
【００２４】
図８はソフトウエアで反対のバイト順番をシュミュレートする場合の影響の推定を示している。前述した如く、ハードウエア拡張は、プログラムの計算部分の期間中に何等性能に悪影響を発生することはない。なぜならば、プログラムは、他のバイト順番のマシン上で稼動するように正確に稼動するからである。図８に示した如く、ソフトウエアのペナルティの範囲は２乃至８．８％である。入力／出力バッファの変換は、ある性能損失を発生する。これは単にファイルを読取る場合よりも、ファイルを読取り且つワードスワッピングするために１１．７％の程度一層長くなっている。
結論
図示し且つ本明細書において説明したソフトウエアはＬＥ又はＢＥマシンの何れかの上でプログラムを稼動することを可能とする。ディスク又はメモリ上に格納されたデータを包含する異なったバイト順番のシステム間のデータ交換は本発明の特定の示唆の範囲内のものではないが、本明細書の記載事項は、これらの転送によって示される問題を解消する場合にも有用なものである。
【００２５】
以上、本発明の具体的実施の態様について詳細に説明したが、本発明は、これら具体例にのみ限定されるべきものではなく、本発明の技術的範囲を逸脱することなしに種々の変形が可能であることは勿論である。
【図面の簡単な説明】
【図１】メモリからワードをローディングするプロセスを示した説明図。
【図２】命令を稼動するマシンのタイプに依存して「ロードバイト（Ｌｏａｄ  Ｂｙｔｅ）」命令がどのようにして異なったバイトをリコールするかを示した説明図。
【図３】ＸＯＲ命令を使用してどのようにバイト順番を変換することが可能であるかを示した説明図。
【図４】マシンのオフセットの変更がどのようにしてマシンの性質を変更することが可能であるかを示した説明図。
【図５】ファイルからのデータの転送がどのようにしてバイト順番に依存するかを示した説明図。
【図６】１つのタイプのマシンに対するロードをどのようにして異なったタイプのマシンに対するロードへ変換することが可能であるかを示した説明図。
【図７】ワード内のバイトのメモリ位置をスワッピングする状態を示した説明図。
【図８】バイト順番をエミュレートするために必要な可能なマシンのオーバーヘッドを示した説明図。
【図１】
0003556955.tif 000002
【図２】
0003556955.tif 000003
【図３】
0003556955.tif 000004
【図４】
0003556955.tif 000005
【図５】
0003556955.tif 000006
【図６】
0003556955.tif 000007
【図７】
0003556955.tif 000008
【図８】
0003556955.tif 000009