(57)【要約】ここに開示されているのは、データを直列化する且つ非直列化するための、プラットフォーム−独立システムおよびデバイス−独立システムおよび方法である。データ構造において保存されたデータを直列化する方法は、データ構造のメモリレイアウトについての情報を表わす、データ構造記述子を生成することと、データ構造記述子に基づいて保存されたデータを直列化することと、を備える。データ構造記述子は、データ構造の各メンバに対応する、メモリオフセットおよびサイズを含んでいる、レイアウトアレイを含むことができる。データ構造においてストレージのためにシリアルで受信されたデータ(serially received data)を処理する方法は、シリアルデータストリームを受信すること、データ構造記述子に基づいてデータを保存するためにメモリを割り付けること、そして、データ構造記述子に基づいてデータストリームを非直列化すること、を備える。データ構造記述子は、データ構造の各メンバに対応する、メモリオフセットおよびサイズを含んでいる、レイアウトアレイを含むことができる。
2009535720.tif 000002
【特許請求の範囲】
【請求項１】
データ構造において保存される伝送用データを直列化する方法であって、
データ構造記述子を生成することと、なお、前記データ構造記述子は、前記データ構造のメモリレイアウトについての情報を表わしている；
前記データ構造記述子に基づいて、前記データ構造において保存された前記データを直列化することと；
を備える方法。
【請求項２】
前記データ構造は、少なくとも１つのメンバを含んでおり、また、データ構造記述子を生成することは、前記データ構造の前記少なくとも１つのメンバのそれぞれに対応する、レイアウトアレイを生成することを含む、請求項１に記載の方法。
【請求項３】
前記データ構造の各メンバに対応する、前記レイアウトアレイは、前記データ構造の前記メンバの、メモリオフセットおよびサイズを含む、請求項２に記載の方法。
【請求項４】
データ構造においてストレージのためにシリアルで受信されたデータを処理する方法であって、
シリアルデータストリームを受信することと、
データ構造記述子に基づいて前記データを保存するためにメモリを割り付けることと、
前記データ構造記述子に基づいて前記データストリームを非直列化することと、
を備える方法。
【請求項５】
前記データ構造は、少なくとも１つのメンバを含んでおり、また、前記データ構造記述子は、前記データ構造の各メンバに対応するレイアウトアレイを含む、請求項４に記載の方法。
【請求項６】
前記データ構造の各メンバに対応する前記レイアウトアレイは、前記データ構造の前記メンバの、メモリオフセットおよびサイズを含んでいる、請求項５に記載の方法。
【請求項７】
データ構造において保存される伝送用データを直列化するためのシステムであって、
データ構造記述子を生成するように、なお、前記データ構造記述子は前記データ構造のメモリレイアウトについての情報を表わしている；
前記データ構造記述子に基づいて、前記データ構造において保存された前記データを直列化するように；
構成されたプロセッサ、
を備えるシステム
【請求項８】
前記データ構造は、少なくとも１つのメンバを含んでおり、また、前記データ構造記述子は、前記データ構造の各メンバに対応する、レイアウトアレイを含む、請求項７に記載のシステム。
【請求項９】
前記データ構造の各メンバに対応する、前記レイアウトアレイは、前記データ構造の前記メンバの、メモリオフセットおよびサイズを含む、請求項８に記載のシステム。
【請求項１０】
データ構造においてストレージのために、シリアルで受信されたデータを処理するためのシステムであって、
シリアルデータストリームを受信するように、
データ構造記述子に基づいて前記データ構造のためにメモリを割り付けるように、
前記データ構造記述子に基づいて前記データストリームを非直列化するように、
構成されたプロセッサ、
を備えるシステム。
【請求項１１】
前記データ構造は、少なくとも１つのメンバを含んでおり、また、前記データ構造記述子は、前記データ構造の各メンバに対応するレイアウトアレイを含む、請求項１０に記載のシステム。
【請求項１２】
前記データ構造の各メンバに対応する前記レイアウトアレイは、前記データ構造の前記メンバの、モリオフセットおよびサイズを含んでいる、請求項１１に記載のシステム。
【請求項１３】
データ構造において保存される伝送用データを直列化する方法を実行するインストラクションを運ぶマシン可読メディアであって、前記方法は、
データ構造記述子を生成することと、なお、前記データ構造記述子は前記データ構造のメモリレイアウトについての情報を表している、
前記データ構造記述子に基づいて、前記データ構造において保存された前記データを直列化することと、
を備えている、
マシン可読メディア
【請求項１４】
前記データ構造は、少なくとも１つのメンバを含んでおり、また、データ構造記述子を生成する動作は、前記データ構造の少なくとも１つのメンバのそれぞれに対応する、レイアウトアレイを生成することを含む、請求項１３に記載のマシン可読メディア。
【請求項１５】
前記データ構造の各メンバに対応する、前記レイアウトアレイは、前記データ構造の前記メンバの、メモリオフセットおよびサイズを含む、請求項１４に記載のマシン可読メディア。
【請求項１６】
データ構造においてストレージのために、シリアルで受信されたデータを処理する方法を実行するためのインストラクションを運ぶマシン可読メディアであって、前記方法は、
シリアルデータストリームを受信することと、
データ構造記述子に基づいて、前記データを保存するためにメモリを割り付けることと、
前記データ構造記述子に基づいて、前記データストリームを非直列化することと、
を備える、
マシン可読メディア。
【請求項１７】
前記データ構造は、少なくとも１つのメンバを含んでおり、また、前記データ構造記述子は、前記データ構造の各メンバに対応する、レイアウトアレイを含む、請求項１６に記載のマシン可読メディア。
【請求項１８】
前記データ構造の各メンバに対応する、前記レイアウトアレイは、前記データ構造の前記メンバの、メモリオフセットおよびサイズを含む、請求項１７に記載のマシン可読メディア。
【発明の詳細な説明】
【優先権主張】
【０００１】
（米国特許法第１１９条の下の優先権主張）
本願は、ここでの譲受人に譲渡され、ここにおいて参照することによりここに明示的に組み込まれている、２００６年４月２７日に出願された「組込みシステムのためのポータブルオブジェクトの直列化方法(Portable Object Serialization Method for Embedded System)」と題された米国特許仮出願第６０／７９５，８４２号の優先権を主張する。
【背景】
【０００２】
（Ｉ．分野）
本発明は、ホストプロセッサとデバイスとの間で、バイナリデータをシリアルでトランスファする(transferring binary data serially)ためのシステムおよび方法に関し、より具体的には、プラットフォーム独立の方法(a platform-independent manner)で、データストリームを直列化または非直列化する(serializing and deserializing)ためのシステムおよび方法に関する。
【０００３】
（ＩＩ．背景）
遠隔デバイス(remote device)を制御し、遠隔デバイスと通信するために、デバイスドライバを実行する、ホストプロセッサの使用は、様々なアプリケーションにおいて、広く実行される。典型的に、バイナリデータストリーム(binary data stream)は、ホストプロセッサとデバイスとの間でしばしば交換される。しばしば、バイナリデータは、プログラミング言語Ｃでインプリメントされるストラクトデータタイプ(struct data type)のような、データ構造(a data structure)において、デバイスドライバ端(device driver end)、デバイス端(device end)、あるいは両方で、体系化される(organized)。デバイスドライバが、ホストにおけるデータ構造からデバイスにデータを受け渡すとき、デバイスドライバは、最初にデータを直列化し（すなわち、ホストメモリの中からデータを連続して読み取る）、そして、そのあと、一連のビット(a series of bits)として、シリアルストリームをデバイスに送信する。デバイスは、直列化されたデータを受信し、そして、そのあとで、データを非直列化する、すなわち、バイト、ワード、あるいは他のブロックにおいてそれを体系化する。最後に、デバイスは、デバイスメモリにおいて割り付けられたデータ構造において、データを保存する。同様の直列化−送信−非直列化プロシージャ(serialize-transmit-deserialize procedure)は、デバイスからデバイスドライバまで、他の方向において受け渡されたデータについて生じる。
【０００４】
直列化−送信−非直列化プロシージャを実行するために、データ構造は、送信端(sending end)において割り付けられたデータ構造に対応する、受信端(receiving end)において割り付けられる。受信端においてインプリメントされるの(implemented)は、受信されたデータを非直列化し、そのデータ構造を正確に投入する(populate)コードである。例えば、デバイスドライバがデータをデバイスに送信するとき、データのバイトあるいは他サイズの塊のデータ(bytes or other-sized chunks of data)がビッグエンディアンあるいはリトルエンディアンフォーマットなどで送信されようがされまいが、データ構造のエレメントがシリアルストリームに加えられる、順序(order)に関するいくつかのコンベンション(convention)を採用して、ドライバの直列化するルーチン(driver’s serializing routine)は、シリアル形態(serial form)に構造(structure)においてデータを変換する。そうすることは、データ構造のメモリにおいてのレイアウト、そして、直列化されたデータ構造のシリアルストリームにおいてレイアウトのアプリオリ知識を必要とし、デバイスがストリームを受信するとき、デバイスの非直列化するルーチン(device’s deserializing routine)は、ストリームを正確に非直列化するために、シリアルストリームにおいて、また、デバイスメモリにおいて、データの体系化および再アレンジメント(organization and arrangement)について、正確に説明されなくてはならない。デバイスの非直列化するルーチンは、さらに、例えば、様々なデータタイプが、バイト、ワード、あるいはダブルワード(double-words)として保存されようがされまいが、ドライバ端にあるデータストレージ(the data storage)の他のパラメータを正確に説明する必要がある。最後に、デバイスの非直列化するルーチンは、どのデータ構造が、デバイスローカルデータ体系化スキーム(the devices local data organization scheme)（データタイプの長さ、等）同様、受信されたデータを保存するため
に、メモリを適切に割り付けるのに適切なのかを、さらに知らなくてはならない。
【０００５】
したがって、そのようなシステムにおいては、ホスト端でホストプロセッサにおいて、あるいはデバイス端でデバイスプロセッサにおいて、インプリメントされたデータ構造の特定のパラメータを正確に説明するために、直列化および非直列化ルーチン(serialization and deserialization routines)をプログラムすることは必要である。デバイスドライバおよび／またはデバイスによってサポートされた、データ構造の数が大きい場合、サポートされたデータ構造のすべてのコピーを、サポートされたデータ構造のそれぞれから且つサポートされたデータ構造のそれぞれに、データを直列化するため且つ非直列化するため、のインストラクションに沿って、維持することは、デバイス端およびドライバ端の両方において、実行不可能な量のシステムリソースを費やす。例えば、そのようなシステムにおいては、デバイスあるいはデバイスドライバのいずれの変化は、データ構造、エンディアンネスおよびタイプの長さの体系化、および他のパラメータ、について、それらが正確に説明することを確実にするために、直列化および非直列化ルーチンを、再書き込みすることおよび／または再コンパイルをすることを必要とする。このアプローチは、誤りが生じやすく(error-prone)、スケーラブルでなく(unscalable)、また、基となるプロセッサ(underlying processor)が変更する場合、他のシステムでは使えない(not portable)。
【発明の開示】
【概要】
【０００６】
ここに開示されているのは、データを直列化し非直列化するための、プラットフォーム−およびデバイス−独立システムおよび方法である。一実施形態においては、データ構造において保存された伝送データのために直列化する方法は、データ構造のメモリレイアウトについての情報を表している、データ構造記述子(a data structure descriptor)を生成することと、そして、データ構造記述子に基づいて、データ構造において保存されたデータを直列化することと、を備えていることが示されている。方法のさらなる実施形態においては、データ構造は、少なくとも１つのメンバを含み、そして、データ構造記述子を生成することは、データ構造の少なくとも１つのメンバのそれぞれに対応する、レイアウトアレイを生成することを含む。さらに方法の別の実施形態において、データ構造の各メンバに対応するレイアウトアレイは、データ構造のメンバの、メモリオフセットおよびサイズ(a memory offset and a size)を含む。
【０００７】
さらなる実施形態において、データ構造においてストレージ(storage)のためにシリアルで受信されたデータを処理する方法は、シリアルデータストリームを受信すること、データ構造記述子に基づいてデータを保存するためにメモリを割り付けること、そして、データ構造記述子に基づいてデータストリームを非直列化すること、を備えるということが示されている。方法のさらなる実施形態において、データ構造は、少なくとも１つのメンバを含んでおり、データ構造記述子は、データ構造の各メンバに対応する、レイアウトアレイを含む。さらに、方法のさらなる実施形態において、データ構造の各メンバに対応するレイアウトアレイは、データ構造のメンバの、メモリオフセットおよびサイズを含む。
【０００８】
さらなる実施形態において、データ構造において保存された伝送データのために直列化するためのシステムは、データ構造のメモリレイアウトについての情報を表している、データ構造記述子を生成するように、また、データ構造記述子に基づいてデータ構造においてデータを直列化するように、構成されたプロセッサを備えているシステムが示されている。さらに、さらなる実施形態において、データ構造は、少なくとも１つのメンバを含んでおり、データ構造記述子は、データ構造の各メンバに対応する、レイアウトアレイを含む。さらに別の実施形態において、データ構造の各メンバに対応するレイアウトアレイは、データ構造のメンバの、メモリオフセットおよびサイズを含む。
【０００９】
さらなる実施形態において、データ構造においてストレージのためにシリアルで受信されたデータを処理するためのシステムが示されており、システムは、シリアルデータストリームを受信するように、データ構造記述子に基づいてデータ構造のためにメモリを割りつけるように、データ構造記述子に基づいてデータストリームを非直列化するように、構成されたプロセッサを備える。さらに、別の実施形態において、データ構造は、少なくとも１つのメンバを含み、データ構造記述子は、データ構造の各メンバに対応する、レイアウトアレイを含む。さらに別の実施形態において、データ構造の各メンバに対応する、レイアウトアレイは、データ構造のメンバの、メモリオフセットおよびサイズを含む。
【００１０】
さらなる実施形態において、データ構造において保存された伝送データのために直列化する方法を実行するためのインストラクションを運ぶマシン可読メディアは、データ構造記述子を生成することと、なお、データ構造記述子はデータ構造のメモリレイアウトについての情報を表している、そして、データ構造に基づいてデータ構造において保存されたデータを直列化することと、を備える方法で説明されている。さらなる実施形態において、データ構造は、少なくとも１つのメンバを含んでおり、データ構造記述子を生成することの動作(act)は、データ構造の少なくとも１つのメンバのそれぞれに対応する、レイアウトアレイを生成することを含む。さらに別の実施形態において、データ構造の各メンバに対応する、レイアウトアレイは、データ構造のメンバの、メモリオフセットおよびサイズを含んでいる。
【００１１】
さらなる実施形態において、データ構造においてストレージのためにシリアルで受信されたデータを処理する方法を実行するインストラクションを運ぶマシン可読メディアが説明されており、該方法は、シリアルデータストリームを受信すること、データ構造記述子に基づいてデータを保存するためにメモリを割りつけること、そして、データ構造記述子に基づいてデータストリームを非直列化することを備えている。さらに別の実施形態において、データ構造は、少なくとも１つのメンバを含んでおり、データ構造記述子は、データ構造の各メンバのレイアウトアレイを含む。さらに別の実施形態において、データ構造の各メンバに対応するレイアウトアレイは、データ構造のメンバの、メモリオフセットおよびサイズを含む。
【詳細な説明】
【００１２】
本発明による、システムおよび方法の例示的な実施形態は、スケーリングを行うように(to scale)図示されることを意図しない、添付図面に参照して、理解されるであろう。図面において、様々な図において図示される、それぞれの同一の、あるいはほぼ同一のコンポーネントは、同様のデジグネータ(designator)によって表されている。明確にする目的のために、すべてのコンポーネントは、すべての図面において、必ずしもラベルされていなくてもよい。
【００１３】
本発明の特徴および本質は、同様の参照文字が全体を通して対応して識別する図面と併せて、以下に記述される詳細な説明から、より明らかとなるであろう。
【００１４】
本発明は、その出願において、以下の説明において述べられた、あるいは図面において図示された、コンストラクションの詳細およびコンポーネントの配列に限定されていない。本発明は、他の実施形態が可能であり、また、様々な方法で、実施されていること、あるいは、実行されていることが可能である。さらに、ここで使用される専門語(phraseology)および用語(terminology)は、説明の目的のためであり、限定されるものとしてみなされるべきではない。「包括する(“including”)」、「備えている(“comprising”)」あるいは「有している(“having”)」、「含んでいる(“containing”)」、「伴っている(“involving”)」、および、ここでのそれらの変形の使用は、それにしたがって列挙された項目(items listed thereafter)、および、それらの等価物(equivalents)を、追加の項目同様、含有することを意味する。用語「例示的な(exemplary)」は、「例(example)、インスタンス(instance)、または例証(illustration)として機能している」を意味するように、ここでは使用されている。「例示的な」としてここに説明されるいずれの実施形態あるいは設計も、他の実施形態あるいは設計よりも、好ましいまたは有利であるとして、必ずしも解釈されるべきではない。
【００１５】
ここで説明される様々なプロセスは、適切にプログラムされたコンピューやシステム、例えば図１で図示されているような汎用コンピュータおよび／またはコンピューティングデバイス１０３、上でインプリメントされることができる、ということは認識されるべきである。コンピューティングデバイス１０３は、セルラ電話、携帯情報端末(personal digital assistant)、および／または、汎用コンピュータでない任意の他のポータブルあるいは非ポータブルコンピューティングシステム、のような専用あるいは汎用コンピューティングデバイスを含むことができる。
【００１６】
コンピューティングデバイス１０３は、プロセッサ１０５を含んでいる。「プロセッサ」１０５は、１以上のマイクロプロセッサ、中央処理装置(central processing units)（ＣＰＵｓ）、コンピューティングデバイス、マイクロコントローラ、デジタル信号プロセッサ、特定用途向け集積回路、あるいは、同様のデバイスあるいはそれらの任意の組み合わせを意味する。プロセッサは、Ｉｎｔｅｌ（Ｒ） Ｐｅｎｔｉｕｍ（登録商標）（Ｒ）、Ｃｅｎｔｒｉｎｏ（Ｒ）、および／またはＣｏｒｅ（Ｒ）プロセッサを含むことができる。典型的に、プロセッサ１０５は、インストラクション（例、メモリあるいは同様のデバイスから）を受信し、それらのインストラクションを実施するであろう、それによって、それらのインストラクションによって定義された１以上のプロセスを実行する。
【００１７】
したがって、プロセスの説明は、同様に、プロセスを実行するための装置の説明である。プロセスを実行する装置は、例えばプロセスを実行するのに適切である、プロセッサ１０５と、それらの入力デバイスおよび／または出力デバイス（例、キーボード１０７、マウス、トラックボール、マイクロホン、タッチスクリーン、印刷デバイス、ディスプレイスクリーン１０９、スピーカ、ネットワークインタフェース１１１）、を含むことができる。
【００１８】
さらに、そのような方法（他のタイプのデータ同様）をインプリメントするコンピュータプログラム（すなわち、インストラクションの集合(collection)）は、数多くの方法で、さまざまなメディア（例、マシン可読メディア）を使用して、保存され且つ送信されることができる。いくつかの実施形態において、ハードワイヤード回路(hard-wired circuitry)あるいはカスタムハードウェアは、様々な実施形態のプロセスをインプリメントできる、いくつかあるいはすべてのソフトウェアインストラクションの、代わりに、あるいは、組み合わせで、使用されることができる。したがって、ハードウェアおよびソフトウェアのさまざまな組み合わせは、ソフトウェアのみの代わりに使用されることができる。
【００１９】
いくつかの実施形態において、プロセッサ１０５は、例えばマイクロソフト社から入手可能な、Ｗｉｎｄｏｗｓ（登録商標）ベースのオペレーティングシステム（例、ＷｉｎｄｏｗｓＮＴ、Ｗｉｎｄｏｗｓ２０００（ＷｉｎｄｏｗｓＭＥ）、ＷｉｎｄｏｗｓＸＰ、ＷｉｎｄｏｗｓＶｉｓｔａ）、アップルコンピュータから入手可能な、ＭＡＣ  ＯＳシステムＸオペレーティングシステム、１以上のＬｉｎｕｘ（登録商標）ベースのオペレーティングシステムディストリビューション(distribution)（例、ＲｅｄＨａｔ社から入手可能なエンタプライズＬｉｎｕｘオペレーティングシステム）、サンマイクロシステムから入手可能なＳｏｌａｒｉｓオペレーティングシステム、あるいは、様々なソースから入手可能なＵＮＩＸ（登録商標）オペレーティングシステム、を含むことができる、オペレーティングシステムを実施することができる。多くの他のオペレーティングシステムは使用されることができ、そして、本発明は、任意の特定のオペレーティングシステムに限定されていない。
【００２０】
プロセッサとオペレーティングシステムは、共に、マシン可読メディア上で保存されたプログラムは、ＳｍａｌｌＴａｌｋ、Ｊａｖａ（登録商標）、Ｃ＋＋、Ａｄａ、ＰｙｔｈｏｎあるいはＣ＃（Ｃシャープ）のようなオブジェクト指向プログラミング言語(object-oriented programming language)、機能プログラミング言語(functional programming language)、ＪａｖａＳｃｒｉｐｔのようなスクリプトプログラミング言語、および／または、論理プログラミング言語(logical programming language)、を含んでいる、様々なプログラミング言語で書き込まれることができる、コンピュータプラットフォームを定義することができる。本発明の様々な態様は、プログラムされていない環境(non-programmed environment)（例、ブラウザプログラムのウィンドウで見るとき、ＧＵＩの態様をレンダする(render)、あるいは、他の機能を実行する、ＨＴＭＬ、ＸＭＬ、あるいは他のフォーマットで作られた文書）において、インプリメントされることができる。本発明のいくつかのインプリメンテーションは、相互ウェブベースのユーザインタフェース(an interactive web-based user interface)をユーザに提供するために、ＡＪＡＸとして集約的に知られている、複数のプログラミング言語および技術を使用して、インプリメントされることができる。
【００２１】
本発明の様々な実施形態は、１以上の通信ネットワーク（例、ＬＡＮ１１９、インターネット１２１）を通じて通信する、１以上のコンピューティングシステム（例、汎用コンピュータおよび／または他のコンピューティングデバイス１０３）を含んでいるネットワーク環境を含むことができる。コンピュータシステムは、任意の有線あるいは無線のメディア（例、インターネット１２１、ＬＡＮ１１９、ＷＡＮあるいはイーサネット（登録商標）、トークンリング(Token Ring)、電話線、ケーブル線、無線チャネル、光通信線、商用オンラインサービスプロバイダ、電子掲示板システム、衛星通信リンク、セルラ電話ネットワーク、ＷＩ−ＦＩネットワーク、Ｂｌｕｅｔｏｏｔｈ（登録商標）通信リンク、上記のいずれの組み合わせ）を介して、直接的あるいは非直接的に通信することができる。
【００２２】
本発明の様々な態様（例、マシン可読メディア上で保存され、そして、１以上のプロセッサによって実施されるプログラムエレメント）は、１以上のクライアントコンピュータシステムにサービスを供給するように構成された１以上のコンピュータシステムの中で分配される(distributed)ことができる。例えば、いくつかの実施形態においては、複数のコンピューティングシステムは、ＬＡＮあるいは他の通信ネットワークに接続された中央権限(central authority)として、体系化されることができる。これらのコンピューティングシステムは、遠隔コンピューティングシステムから、インターネット１２１を通じて、リクエストおよび他の情報を受信することができる。
【００２３】
いくつかの実施形態においては、サーバコンピュータ／集中型の権限(centralized authority)は、必要でないかもしれず、あるいは、望ましくないかもしれない。例えば、本発明は、一実施形態においては、中央権限なしに、１以上のコンピューティングデバイス上で実行されることができる。そのような実施形態においては、サーバあるいは汎用コンピュータ上で保存されるように説明されたデータによって実行されるように、ここに説明されているいずれの機能は、代わりに、１以上のそのようなコンピューティングデバイスによって実行されること、あるいは、１以上のそのようなコンピューティングデバイス上で保存されることができる。
【００２４】
用語「マシン可読メディア」(“machine-readable medium”)は、コンピュータ、プロセッサ、あるいは同様のデバイスによって読み取られることができる、データ（例、インストラクション、データ構造）を供給することに関係するいずれのメディアを示す。そのようなメディアは、非揮発性メディア、揮発性メディア、伝送メディアを含んでいる、しかしながら、限定されないで、多くの形態をとることができる。非揮発性メディアは、例えば、光あるいは磁気ディスク１１３および他の持続型メモリ(persistent memory)を、含む。揮発性メディアは、動的ランダムアクセスメモリ１１５（ＤＲＡＭ）を含み、それは、典型的に、コンピュータシステムのメインメモリを構成する(constitute)。伝送メディアは、プロセッサに結合されたシステムバス(system bus)１１７を備えるワイヤを含んでいる、共軸ケーブル、銅線および光ファイバを含む。伝送メディアは、音波、光波および電磁放射、例えば、無線周波数(radio frequency)（ＲＦ）および赤外線(infrared)（ＩＲ）データ通信の間に生成されるもの、を含むこと、あるいは、伝達する(convey)ことができる。マシン可読メディアの共通の形態は、例えば、フロッピー（登録商標）ディスク、フレキシブルディスク、ハードディスク、磁気テープ、任意の他の磁気メディア、ＣＤ−ＲＯＭ、ＤＶＤ、任意の他の光学メディア、パンチカード、紙テープ、ホールのパターンを備えた任意の他の物理媒体(any other physical medium with patterns of holes)、ＲＡＭ、ＰＲＯＭ、ＥＰＲＯＭ、フラッシュＥＥＰＲＯＭ、任意の他のメモリチップあるいはカートリッジ、搬送波、あるいはコンピュータが読み取ることができる任意の他のメディア、を含む。
【００２５】
マシン可読メディアの様々な形式は、プロセッサにデータ（例、インストラクションのシーケンス）を運ぶことに関係していてもよい(involved in)。例えば、データは、（ｉ）ＲＡＭからプロセッサに運ばれ、（ｉｉ）無線伝送メディア上で搬送され、（ｉｉｉ）イーサネット（登録商標）（あるいはＩＥＥＥ８０２．３）、ＳＡＰ、ＡＴＰ、Ｂｌｕｅｔｏｏｔｈ（登録商標）、およびＴＣＰ／ＩＰ、ＴＤＭＡ、ＣＤＭＡ、および３Ｇのような、多くのフォーマット、スタンダードあるいはプロトコルにしたがって、フォーマット化および／または送信され、および／または、（ｉｖ）プライバシーを確実にするために、あるいは詐欺を防ぐために、当技術分野においてよく知られたいずれの様々な方法において暗号化されることができる。
【００２６】
したがって、プロセスの説明は、同様に、プロセスを実行するためのプログラムを保存するマシン可読メディアの説明である。マシン可読メディアは、プロセスを実行するのに適切な、それらのプログラムエレメントを（任意の適切なフォーマットで）保存することができる。
【００２７】
プロセスが説明されるところで、いくつかの実施形態においては、プロセスは、いかなるユーザの介入(any user intervention)なしに、操作することができる。いくつかの実施形態においては、プロセスは、なんらかの人的介入（例、動作が人間のアシスタンスによって、あるいは、人間のアシスタンスで、実行される）を含む。
【００２８】
プロセスにおいて様々な動作の説明が、説明された動作が必ずしもすべて必要でないということを示さないように、装置の実施形態は、説明されたプロセスのうちのいくつか（しかしながら、必ずしもすべてでなくてもよい）を実行するのに操作可能な、1以上のコンピュータシステムを含むことができる。
【００２９】
同様に、プロセスにおいて様々な動作の説明が、すべての説明された動作が必ずしも必要でないということを示さないように、プログラムあるいはデータ構造を保存しているマシン可読メディアの実施形態は、実施されるとき、１以上のプロセッサに説明されたプロセスのうちのいくつか（必ずしもすべてでなくてもよい）を実行することをもたらすことができる、プログラムを保存しているマシン可読メディアを含む。
【００３０】
説明の目的のために、ホストプロセッサのデバイスドライバがデータ構造においてデータを直列化し、そして、それをデバイスに送り、デバイスがデータを非直列化し保存する、一実施形態が説明される。しかしながら、例示的な方法は、デバイスによってデバイスドライバに送られた、データにすぐに拡張される(readily be extended)ことができるということは、理解されるべきである。さらに、説明の実施形態において、直列化および非直列化コードはＣにおいてインプリメントされるということが仮定されるが、当業者は、方法は、データ構造も使用する他の言語においてインプリメントされることができるということはすぐに認識するであろう。
【００３１】
データストリームを直列化し、非直列化する
ここに説明されるシステムおよび方法において、直列化および非直列化ルーチンは、直列化され、あるいは、非直列化された、任意のデータ構造のいずれの与えられたプラットフォームに、メモリレイアウトを考慮に入れることができる。したがって、それらは、新しいデータ構造がインプリメントされるたびに、あるいは、コードが新しいプラットフォームにポートされる(ported)たびに、ルーチン(routines)を再度書き込む必要性なしに、直列化および／または非直列化のプロセスの間に(during)、なされる必要があるかもしれない、いずれのオフセットあるいは転換(conversions)を、自動的に処理できる。例えば、データ構造がＣにおいてインプリメントされる場合、メモリレイアウトのデータ構造記述子は、必要とされるときに、（例、コンパイル時間に）Ｃのsizeof()およびoffset()機能を使用して、生成されることができる。データ構造記述子は、そのあと、データ構造のすべてのパラメータを正確に説明する、直列化および／または非直列化のプロシージャを選択するために、直列化および／または非直列化ルーチンによって、使用されることができる。このように、単純な直列化および非直列化コードは、送信および受信側の両方で、プロセッサアーキテクチャあるいはコンパイラに固有である、パラメータを説明する必要性なしに、使用されることができる。さらに、直列化および非直列化コードは、各サポートされたデータ構造のコピーを保存し、且つ、各データ構造から読み取る、および／または、各データ構造に投入するために、直列化および非直列化コードを分ける、必要性を排除して、任意のデータ構造と同じである。
【００３２】
デバイスドライバが、データ構造のコンテンツ(contents)をデバイスに送信する必要があるとき、本発明の例示的な実施形態において、デバイスドライバは、シリアル伝送についての保存されたデータを処理する直列化ルーチンによって使用される、データ構造記述子を生成するために、データ構造についてのレイアウト情報を決定する。
【００３３】
データ構造に関連づけられたレイアウト情報は、データ構造の各エレメントの、サイズ（バイトの数）およびオフセット（バイトの数）を、典型的に含む。エレメントがビッグエンディアンあるいはリトルエンディアンフォーマット、あるいは他のパラメータで保存されようと、されなかろうと、ワード順序(word order)を示しているフラグ(flags)あるいは同様の記述子(descriptors)をさらに含むことができる。したがって、データ構造のメモリレイアウトは、データ構造記述子によって、説明されることができ、それは、{offset, size}ペア、{offset, size, byte-order}トリプレット、あるいは、同様の記述子の、アレイであってもよい。図２を参照して、データ構造記述子を決定するステップは、フローチャートのエレメント２０２によって表されている。いくつかの実施形態においては、データ構造記述子は、コンパイル時間に生成される。Ｃプログラミング言語でインプリメントされる一実施形態において、それぞれが直列化されるべきデータ構造のメンバでありうるので、標準機能offsetof()およびsizeof()を、ルーチンあるいはマクロ(macro)は呼び出すことができる。これらの標準機能は、データ構造記述子の「オフセット(offset)」および「サイズ(size)」コンポーネントを、それぞれ生成する。
【００３４】
データ構造記述子がいったん決定されると、システムは、使用されるべき直列化プロセスを、データ構造のコンテンツにしたがって、選択できる（ステップ２０４）。例示的な実施形態においては、基となるメモリレイアウト(the underlying memory layout)、プロセッサアーキテクチャ、あるいはコンパイリング詳細(compiling details)に関わらず、エレメント２０４を結果としてもたらすシリアルストリームが標準フォーマットを有するように、シリアルストリーム自体のフォーマットが標準化される。そのような実施形態において、直列化ルーチンコード(serialization routine code)は、直列化コードが入力データ構造から適切な標準化されたストリームを生成するように、データ構造のコンテンツによって制御される。例えば、直列化コードは、バイト順序フラグ(byte-order flag)が１である場合直列化プロセスにおいてバイト順序をリバースし(reversing)、バイト順序フラグが０である場合バイト順序をリバースせずに、バイト順序フラグに従って、スイッチする条件文(conditional statement that switches)を含むことができる。別の例として、直列化コードは、読み取られる現メンバに対応するデータ構造記述子の「サイズ」コンポーネントが２のとき、２バイトのメモリ読み取り機能を呼び出し、「サイズ」コンポーネントが４であるとき、４バイトのメモリ読み取り機能を呼び出す、条件文を含むことができる。
【００３５】
適切な直列化ルーチンを選択するために、データ構造記述子を使用した後で、次のステップは、データを直列化すること（ステップ２０６）で、それは、データ構造のすべてのメンバを、データ構造記述子のパラメータに従って選択された直列化プロセスを使用して、直列化されたストリームに、パックする(packing)ことによって実行される。最後に、いくつかの実施形態において、シリアルストリームは、伝送のために、送信機に受け渡されることができる。
【００３６】
図３は、図２に関連して上で説明されているのと類似した、プロセスによって生成され、且つ送信された、直列化されたデータストリーム(serialized data stream)を受信し、非直列化するための、プロセスの例示的な実施形態を図示する。上で説明された直列化プロセスを用いるように(as with)、非直列化は、どの端が特定のモーメントで(at a particular moment)データを受信しているかに依存して、ホストプロセッサあるいはデバイス端で、実行されることができる。
【００３７】
図３で図示された例示的な実施形態においては、受信端は、送信端によって送信されたシリアルデータを受信する（エレメント３０２）。データ構造記述子は、適切な非直列化プロシージャ、データシリアライゼーションに関して上で説明された方法に類似である、を選択する（ステップ３０４）ためにそれが使用される、非直列化ルーチンに受け渡されることができる。図２に関連して上で説明された直列化プロセスを用いるように、データ構造記述子は、コンパイル時間で生成されることができる。
【００３８】
したがって、正しい非直列化プロセスを選択するために、データ構造記述子において情報を使用して、非直列化ルーチンは、ローカルにインプリメントされたデータ構造(a locally implemented data structure)においてストレージのために、インカミングシリアルストリーム(incoming serial stream)を処理できる。非直列化ルーチンは、直列化されたデータを、データ構造記述子によって規定されたフォーマットに変換し、それらを割り付けられたメモリ(allocated memory)に保存して、パーズする(parses)（ステップ３０６および３０８）。
【００３９】
したがって、上で説明されたプロセスにおいて、直列化プログラムは、プロセッサ―特有および／またはコンパイラ―特有パラメータに依存することができる、データ構造の基となるメモリレイアウトに関わらず、同じシリアルフォーマット(serial format)に、データ構造においてデータを変換する。同様に、非直列化コードは、インカミングストリームを正確にパーズし、ローカルデータ構造においてデータを保存する。
【００４０】
これらの方法の利点は、直列化および非直列化ルーチンが、異なるデータ構造、異なるオフセット、異なるエンディアンネスなどを使用する、ホストプロセッサあるいはデバイス上でインプリメンテーションのために、再度書き込みされる必要がないということである。複数命題プロセッサ−(theses processor-)あるいはデバイス−特定の態様を、直列化および非直列化ルーチンにハードコードされる(hard-coding)代わりに、直列化および非直列化のプロセスは、データの長さ、オフセット、およびエンディアンネスの様々な組み合わせについて正確に説明する、コードに含まれることができ、適切なプロセスは、データ構造記述子の詳細(specifics)にしたがって、選択されている。
【００４１】
上述されるように、上記に述べられたメモリレイアウト記述子は、デバイスドライバおよびデバイスの両方によって、どの端が送り、どれが受信するかに依存して、使用されることができる。
【００４２】
例。ソフトウェアインプリメンテーションに関しては、ここに説明された技術は、ここに説明された機能を実行する、モジュール（例、プロシージャ、機能、等）でインプリメントされることができる。ソフトウェアコードは、メモリユニットに保存され、プロセッサによって実行されることができる。メモリユニットは、プロセッサ内あるいはプロセッサ外で、インプリメントされることができ、どのケースにおいても、当技術分野において知られるように、様々な手段を介して、プロセッサに通信的に結合されることができる。つづいて、説明された技術の例示的な実施形態をインプリメントするために、使用されることができる、いくつかの例示的なコードである。例は、説明された技術は、無線通信ネットワークにおいて使用のためにインプリメントされることができる、１つの方法を示す。
【数１】
2009535720.tif 000003
【００４３】
上の#includeコマンドは、Ｃで書かれたアプリケーションにおいて共通で使用される標準ヘッダーファイルを、無線ネットワーキングアプリケーションに特有のオブジェクトを定義する、netinet／in．hに沿って、ロードする。
【数２】
2009535720.tif 000004
【００４４】
上記のコードに定義されたデータ構造layout_tは、メモリオフセットを説明している１エレメント、オブジェクトサイズを説明している第２(the second describing and object size)、そして、データのバイト順序が変換を必要とするかどうかを示すフラグあるいは他の記述子である第３、の３つのエレメントベクトルである。データ構造layout_tのそれぞれの具体化(instantiation)は、それのオフセット、それのサイズ、およびそれのエンディアンネスといった、データ構造の単一メンバのメモリレイアウトを説明する。
【数３】
2009535720.tif 000005
【００４５】
上で提供される定義のそれぞれは、データ構造「タイプ」の特定メンバ「メンバ」のメモリレイアウト記述子を作るために（レイアウト記述子情報の端を示す、記述子layoutof_endを除く）、マクロを定義する。上で示される異なる定義は、データ構造記述子に含まれる必要がある情報、の異なる要件を有する、例示的なインプリメンテーションに利用可能である。例えば、定義layoutof(type, member)は、３ベクトルを生成し、それらのエレメントは、（１）データ構造「タイプ」のメンバ「メンバ」のオフセット、（２）データ構造「タイプ」のメンバ「メンバ」のサイズ、（３）バイト順序変換が必要であるということを示しているフラグ、である。定義layout_with_offset(type, member)は、追加的にメモリレイアウトをオフセットする必要があるところで、使用されることができ、それは、オフセット「オフセット」がデータ構造のメンバのオフセットに付け加えられる以外は、同じ３ベクトルを生成する。定義layout_no_endianおよびlayout_with_offset_no_endianは、バイト変換フラグ(byte-conversion flag)をセッティングすることなしに以外は、それぞれ、layoutofとlayout_with_offsetとして、同じ対応する３ベクトルを生成する。
【数４】
2009535720.tif 000006
【００４６】
上記の定義はメモリからデータを読み取り、そして、下で定義された直列化機能(serialize function)において使用される。memcpy_2は、メモリから２バイトのエレメントを読み取るために使用され、memcpy_4は、４バイトのエレメントのために使用される。
【数５】
2009535720.tif 000007
【００４７】
上記で定義された、serialize機能は、データ構造からデータを読み取り、そして、シリアルストリームにそれを書き込む。データ構造が正確に直列化されるということを確実にするために、データ構造のメモリレイアウト（layouts[]変数においてそれに受け渡される）についての情報を使用する。例えば、データ構造記述子のコンテント(content)に基づいて、htons、htonl、memcpy2、memcpy4、等を呼び出すかどうかを選択することによって、データ構造のメンバのサイズを、バイト順序同様、説明する。この例は、開示された技術の特徴を説明しており、直列化ルーチンは、データ構造記述子（いくつかの実施形態においてコンパイル時間に自動的に生成される、データ構造のメモリレイアウトについての情報）を入力としてみなしているので、直列化ルーチン自体は、プロセッサ依存であるいずれのメモリレイアウト特徴を含んでいる、基となるメモリレイアウトから独立しており、そして、直列化されたデータ構造に関わらず、同じように機能する。したがって、基となるデータ構造(the underlying data structures)が、いかなる理由で変更されるとき、あるいはプラットフォーム特定パラメータが変更するとき、直列化コードを再び書き込みする必要はない。
【数６】
2009535720.tif 000008
【００４８】
上記で定義されたdeserialize機能は、シリアルストリームからデータを読み取り、そして、適切なデータ構造にそれを非直列化する。serialize機能を用いるように、deserialize機能は、データ構造のメモリレイアウトについての情報（ある実施形態において、自動的にコンパイル時間に生成されている）を、入力としてとり、そして、シリアルストリームが正確にパーズされるということ、そして、データ構造が正確に投入されるということ、を確実にするために、それを使用しており、それは、例えば、データ構造のメンバのサイズを、バイト順序同様、説明する。直列化ルーチンを用いるように、deserialize機能は、データ構造のメモリレイアウトについての入力情報としてとるので、非直列化ルーチン自体は、基となるメモリレイアウトから独立しており、そして、投入されているデータ構造に関わらず、同じように機能する。したがって、基となるデータ構造が、いかなる理由で変更されるとき、あるいは、任意のプラットフォーム特定パラメータは変更するとき、非直列化コードを再び書き込む必要はない。
【００４９】
下で、直列化され且つ送信されるべきデータ構造がtclas構造である、一例が示されており、それは、ＩＥＥＥ８０２．１１ｅＤ１３．０標準基準において定義されるように、インターネットプロトコルバージョン４（ＩＰｖ４）についての無線ＬＡＮトラフィック分類である。この構造は、様々な長さの整数のリストであり、使用におけるＩＰのバージョン、ホストおよびデバイスのＩＰアドレス、通信中のホストポートおよびデバイスポートの識別子、区分化されたサービスコードポイント値(differentiated services code point)（ＤＣＳＰ）、およびプロトコル識別子、を表している。
【数７】
2009535720.tif 000009
【００５０】
上のコードは、tclasデータ構造の定義を含んでおり、そして、さらに、layout_t定義に関連して上で説明されるように、データ構造において各エレメントのメモリレイアウトを説明するlayout_t構造を活用する。
【数８】
2009535720.tif 000010
【００５１】
上記に示されたmain()ルーチンは、ｉｐｖ４データ構造を直列化するために、serializeルーチンを呼び出し、そして、そのあとで、それを非直列化するためにdeserializeルーチンを呼び出す。データが正確に直列化され、且つ非直列化されたということをオペレータがヴェリファイ(verify)できるように、診断mem_dump機能(the diagnostic mem_dump function)への呼び出しを含む。
【００５２】
上記に説明されたものは、１つ以上の実施形態の例を含んでいる。それは、もちろん、上述の実施形態を説明する目的のために、コンポーネントあるいは方法のすべての考えられる組み合わせを記述することは可能ではないが、当業者は、様々な実施形態の多くのさらなる組み合わせおよび並び替え(permutations)が可能であるということを認識することができる。したがって、説明された実施形態は、添付された特許請求の範囲の精神および範囲の中に入る、すべてのそのような変更、修正、および変形を包含するように意図されている。さらに、用語「含む(includes)」が、詳細な説明あるいは特許請求の範囲のいずれかにおいて使用されている範囲内において、そのような用語は、用語「備えている(comprising)」がトランジショナルワード(transitional word)として請求項において使用されるときに解釈されるように、用語「備えている(comprising)」と同様な方法で包括的であるように意図されている。
【図面の簡単な説明】
【００５３】
【図１】図１は、ここに説明されるシステムおよび方法がインプリメントされることができる、コンピュータシステムの概略的な表示である。
【図２】図２は、データ構造記述子を生成するため、また、伝送のためにデータ構造を直列化するため、のプロセスを図示している、フローチャートである。
【図３】図３は、データ構造記述子を使用して、データ構造を受信するため、また、非直列化するため、のプロセスを図示する、フローチャートである。
【図１】
2009535720.tif 000011
【図２】
2009535720.tif 000012
【図３】
2009535720.tif 000013
【国際調査報告】
2009535720.tif 000014
2009535720.tif 000015