ONC+ 開発ガイド

データの標準形式

XDR のアプローチは、データを 1 つの標準形式に統一するというものです。すなわち、XDR では、1 つのバイト順序、1 つの浮動小数点形式 (IEEE)、というように標準形式が定義されています。どのマシンで実行するプログラムでも XDR を使用すれば、データがローカルデータ形式から XDR 標準データ形式に変換されるので、移植可能なデータを作成できます。同様に、どのマシンで実行するプログラムでも XDR を使用すれば、データが XDR 標準データ形式からローカルデータ形式に変換されるので、移植可能なデータを読み込むことができます。1 つの標準形式を使用することにより、移植可能データを作成し送信するプログラムと、移植可能データを受信し使用するプログラムとが完全に切り離されます。新たなマシンや新たな言語が加わっても、移植データを作成し使用する既存のプログラムグループには何の影響もありません。新たなマシンは、標準データ形式と自身のローカルデータ形式との変換方法を「学ぶ」ことにより、既存のプログラムグループとの通信が可能になります。新たなマシンでは、他のマシンのローカルデータ形式を学ぶ必要がありません。これと同様に、他のマシン上で実行中の既存のプログラムグループでも、新たなマシンのローカルデータ形式を学ぶ必要がありません。新たなマシンが生成した移植可能なデータは、既存プログラムが既に理解している標準データ形式に従っているので、そのまま読み込むことができるからです。

XDR の標準化アプローチには、さまざまな先例があります。たとえば、TCP/IP、UDP/IP、XNS、Ethernet、および、ISO の OSI 参照モデルの第 5 層より下のプロトコルはすべて標準プロトコルです。標準化アプローチの利点は単純であることです。XDR の場合も、一連の変換ルーチンを一度書いてしまえばそれをずっと使用できます。標準化アプローチには欠点もありますが、実際に使用するデータ伝送アプリケーションでは大きな問題ではありません。たとえば、バイト順序がリトルエンディアンの 2 つのマシン間で XDR 標準を使用して整数データを伝送するとします。送信側のマシンでは、整数データのバイト順をリトルエンディアンからビッグエンディアン(XDR のバイト順序) に変換し、受信側のマシンではその反対の変換を行います。この 2 つのマシンのバイト順序は同じなので、本来このような変換は不要ですが、重要なのは必要かどうかよりも、別の方法と比較したときのコストです。

標準データ形式とローカルデータ形式との変換に要する時間は重要ではありません。特に、分散型アプリケーションの場合は大した問題にはなりません。データ構造体を伝送する準備に要する時間のほとんどは、データ変換ではなく、データ構造体の各要素を取り出すのにかかります。たとえば、ツリー構造を伝送するには、葉の部分をすべてたどって、リーフレコード内の各要素をバッファにコピーして境界を合わせます。葉の部分を格納した記憶領域はその後解放しなければなりません。同様にツリー構造を受信するには、それぞれの葉の部分に対して記憶領域を割り当て、データをバッファからその記憶領域に移動して正しく境界を合わせ、葉と葉をリンクするポインタを設定します。どのマシンでも、標準データ形式との変換のあるなしに関係なく、データ構造体の走査とコピーのコストがかかります。分散型アプリケーションではこのような通信オーバヘッド、すなわち、送信側のプロトコル層を下ってネットワークを通り受信側のプロトコル層を上るのに時間がかかるため、標準データ形式とのデータ変換のオーバヘッドは相対的に小さくなります。