説明

条件付で実行可能モジュールを縮小するシステムおよび方法

【課題】本発明の実施例は、実行可能な画像を縮小または最適化することに関するシステムおよび方法が結果として記憶空間の節約をもたらすことである。
【解決手段】少なくとも1つの実施例において、本発明は、実行可能な画像をターゲットプラットフォームのフラッシュメモリに格納する前に、該画像から不要なフィールドまたは情報を削除する。
ターゲットプラットフォームには関係ない情報を削除することにより、実行可能な画像がフラッシュメモリ上でとるスペースを少なくできる。画像はロード時に最適化されたヘッダ情報に基づき翻訳される。一実施例では、画像がさらに既知の方法で圧縮されることにより、さらなるスペースの節約をもたらす。他の実施例も記載され、クレームされる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施例は、概ねコード画像ファイルのフォーマット化に関し、詳しくは、画像をフラッシュメモリ内に格納する前に、共通のヘッダにおける不要なフィールドを削除することにより、フラッシュメモリに格納されるコード画像ファイルの長さを削減する(縮小する)ことに関する。
【背景技術】
【0002】
バイナリコード画像を記憶装置に格納する目的でフォーマットしかつ圧縮する様々なマシンが存在する。この場合、バイナリコード画像は、一般的に、実行ファイル画像であるか、または、パソコンやファームウエア、あるいは、タスクを実行するためにコンピュータプログラムが用いられる処理システムなどにおいて実行できる画像である。プロセッサで実行される画像は、標準形式でなければならない。それによって、ターゲットプロセッサファームウエアは、画像がフラッシュメモリから実行できるか、メモリにロードできるか、または、他のやり方で実行できることを認識する。実行ファイル画像に使用される既存のパソコンシステムにおける共通基準は、ポータブルで実行可能な共通のオブジェクトファイルフォーマット(PE/COFF)スペックであり、Microsoft Portable Executable and Common Object File Format Specification、 Revision 6.0、という1999年2月にマイクロソフト社から出されたものである。これは、ワールドワイド・ウェブhttp://www.microsoft.com/whdc/hwdev/hardware/PECOFF.mspxで確認することもできる。このフォーマットがポータブルなのは、フォーマット化されたファイルが異なるターゲットで実行できるように意図されて作られているからである。例えば、PE/COFF画像は、ウィンドウズXP環境とWIN/CE環境とのどちらでも実行可能であろう。ターゲットプロセッサは、PE/COFFフォーマットを認識しさえすれば、PE/COFFフォーマット化された画像を実行することができる。
【0003】
異なるプラットフォームで実行するためには、PE/COFF画像は、使用する可能性のあるターゲットプラットフォームおよびオペレーティングシステムに関する特定の情報を含んでいなくてはならない。そして、PE/COFF画像内の情報すべてが、使用する可能性のあるターゲットプラットフォームに関連するとも限らない。すべてのフィールドがすべてのプラットフォームに適用できるわけではない。
【0004】
例えば、PE/COFF画像は、デバイスドライバであるかもしれない。デバイスドライバは、フラッシュメモリの中にある場合もある。記憶装置の有効スペースを節約するためには、フラッシュメモリ内のデバイスドライバのサイズは縮小されることが望ましい。既存のシステムでのスペース節約方法は、画像内容の圧縮に限定されている場合が多い。あるケースでは、ヘッダを含む画像ファイル全体が圧縮される。
【0005】
デバイスドライバ画像は、通常、多数のコンピューティングプラットフォームで利用可能であるように開発される。実行可能ファイルは、ベンダの構成および開発/維持コストを削減する。その画像のヘッダは、おそらくポインタまたは仮想アドレスがあれば、別々のモジュール、または、ルーチンが異なるプラットフォームでも利用できることを示すことができるだろう。実行可能ファイルの中には、フラッシュメモリの実アドレスから実行されなければならないものもある。例えば、これらの実行ファイルは、XIP(eXecute In Place)と称し、移動させることはできない。他に、メモリに移動させることができる実行ファイルもある。この情報は、PE/COFF画像自体に含まれていてよい。
【0006】
既存のシステムでは、PE/COFF画像は、多数のプラットフォームに送られ、ターゲットプラットフォームのフラッシュメモリ内にロードされる。画像のタイプがXIPの場合、その画像はフラッシュメモリから実行されるべきなので、フラッシュメモリ上では圧縮できない。したがって、フラッシュメモリにある情報は、直接実行可能な命令とならなければならない。フラッシュメモリにロードされる前に圧縮される画像もある。関連技術の中には、フラッシュメモリに書き込む前に実行可能な画像を圧縮する様々な既知の方法がある。
【図面の簡単な説明】
【0007】
【図1】本発明の実施例に従う、PE/COFF画像を表わし、かつ、画像ヘッダを縮小する典型的な方法を示すブロック図である。
【0008】
【図2】本発明の実施例に従う、部分的に縮小または最適化されたPE/COFFセクションヘッダを表わすブロック図である。
【0009】
【図3】図2のセクションヘッダはそれらのデフォルト形式かまたは最適化されているかを示す表である。
【0010】
【図4−5】本発明の実施例を用いて節約されたスペースを示す。
【0011】
【図6】本発明の実施例に従う、縮小または最適化されたPE/COFF画像を用いる典型的な方法を示すフローチャートである。
【0012】
【図7】本発明の実施例に従う、プルーニングされたコード画像ファイルを再構築するための典型的なシステムを示すブロック図である。
【発明を実施するための最良の形態】
【0013】
本発明の特徴及び利点は、以下の詳細な説明から明らかになるであろう。
【0014】
本発明の実施例は、実行可能な画像を縮小または最適化することに関連し、その結果、記憶空間の節約をもたらすシステムおよび方法を含む。少なくとも1つの実施例において、本発明は、ターゲットプラットフォームのフラッシュメモリに格納する前に、不要なフィールドまたは情報を実行可能な画像ヘッダから削除することを目的とする。ターゲットプラットフォームにとって無関係な情報を削除することにより、実行ファイルがフラッシュメモリ内で占めるスペースを少なくすることができる。画像は、ロードされるとき、最適化されたヘッダ情報に基づき変換される。一実施例では、画像は、さらに既知の方法で圧縮されることにより、スペースをとらないようにされる。
【0015】
本発明において、明細書中の「1つの実施例」または「一実施例」は、実施例に関連して記載された特定の機能、構造、または、特徴が、本発明の少なくとも1つの実施例に含まれることを意味する。したがって、明細書中を通じて随所に見られる「一実施例では」という言い回しは、必ずしも同じ実施例を指すものではない。
【0016】
実行可能な画像のサイズを縮小するための方法には様々なものがある。説明を簡単にする目的で、以下の実施例ではPE/COFF画像を例にとって述べる。ここに記載するシステムおよび方法は、ELF画像またはMach−O形式の画像など、他の画像形式でも用いられることは、当業者にとっては明らかである。ELF(Executable and Linking Format)は、Linuxオペレーティングシステムで利用でき、元々はユニックス・システムズ・ラボラトリーズで開発されたものである。ELFについてのさらなる情報は、Linuxマニュアル参照ページhttp://www.gsp.com/cgi-in/man.cgi?section=5&topic=elf.で確認することができる。Mach-O形式は、アップルコンピュータのオペレーティングシステムで用いられている。Mach-O形式のさらなる情報は、Mach−Oランタイムアーキテクチャ、第3章、ォーマットリファレンス、アップルコンピュータ、2003年8月7日
http://developer.apple.com/documentation/DeveloperTools/Conceptual/MachORuntime/).
で確認することができる。
【0017】
本発明および方法の実施例は、実行可能な画像を効率的にプルーニングすることにより、画像サイズを縮小することができる。本発明の実施例は、圧縮されたアイテムを元の状態に復元するといった圧縮とは異なる。縮小される実行ファイルは、カスタマイズされたやり方で縮小され、ターゲットプラットフォームとは無関係ないくつかのデータまたはフィールドが削除される。プルーニングされた後の画像は、さらに既知の方法を用いて圧縮されることもできる。
【0018】
本発明の実施例は、フラッシュメモリにロードする前に、実行可能な画像から画像内容を削除することができる。不要なデータが削除され、利用可能な画像のサブセットがターゲットプラットフォームの基準として定義される。定義されたサブセットは、画像を圧縮しかつロードするために用いられる。その結果、画像が小さくなり、記憶装置のスペースの節約につながる。開示されたシステムおよび方法の実施例は、既存の圧縮技術に追加することもできる。さらに、開示されたシステムおよび方法は、すでに圧縮された画像に適用することもできる。
【0019】
図面、特に図1は、PE/COFF画像を表わす。PE/COFF画像は、COFFヘッダ110、PEヘッダ120、セクションヘッダ160、および、画像内容180を表わす。一実施例では、COFFヘッダ110は、machine 111、NumberofSections 112、TimeDateStamp 113、PtrToSymbol 114、NumSymbols 115、SizePEHdr 116、および、Characteristics 117の7つのフィールド(20バイト)を有する。以下の表1は、PE/COFFスペックに従うCOFFヘッダにおける各フィールドのオフセットおよび長さを示す。20バイトの7つのフィールドでは、ターゲットプラットフォームは、8バイトのみを用いるmachine 111、NumberofSections 112、SizePEHdr 116、および、Characteristics 117へのアクセスだけを必要とする場合もある。PEヘッダ120の最後のアドレスオフセットは、PEヘッダのサイズを特定するCOFFヘッダ110における値、すなわち、オフセット16のSizePEHdr116により決定される。セクションヘッダ160のサイズは、COFFヘッダのオフセット2の16ビット値(すなわちNumberofSections112)であり得るセクション数をそれらのセクションの長さで乗じることにより決定されることができる。この例では、デフォルトセクションは、40バイト長である。
【表1】

【0020】
この例では、PEヘッダ120は、以下のフールドを含む:Signature121、MajorVersion122、MinorVersion123、SizeOfCode124、SizeOfInitdData125、SizeOfUnInitdData126、EntryPoint127、BaseOfCode128、BaseOfData129、ImageBase130、SectionAlignment131、FileAlignment132、MajorOSVersion133、MinorOSVersion134、MajorImageVersion135、MinorImageVersion136、MajorSubVersion137、MinorSubVersion138、Win32Version139、ImageSize140、HeaderSize141、CheckSum142、Subsystem143、DllChar144、StackReserveSz145、StackCommitSz146、HeapReserveSz147、HeapCommitSz148、LoaderFlags149、および、NumberOfRVASz150。この例では、PEヘッダ120は、108バイトを含む。いくつかのプラットフォームでは、PEヘッダ120の、Signature121、SizeOfCode124、EntryPoint127、BaseOfCode128、ImageBase130、および、Subsystem143の22バイトのみが必要とされる。したがって、PEヘッダは、86バイトから22バイトに減らすことができる。
【0021】
この例では、セクションヘッダ160は、各セクションごとに1つずつ、以下の多くのフィールドのセットを含む:Name161、Virtsize162、VirAddr163、RawDataSz164、PointertoRawData165、PointertoRelocations166、PointertoLineNums167、NumofRelocs168、NumofLineNums169、および、Characteristics170(合計40バイト)。いくつかのプラットフォームでは、Name161、RawDataSz164、PointertoRawData165、PointertoRelocations166、および、NumofRelocs168の合計21バイトのフィールドのみが使用される。フィールド名は、32セクション、すなわち1つのオーバーヘッドバイトおよびデータの32ビットを考慮して予め割り当てられてられることもできる。したがって、未使用のフィールドを削除すると、セクションあたり19バイト節約できることになる。
【0022】
一実施例では、第1番目のセクションヘッダは、常にネームフィールドである。多くのケースでは、第1番目のセクションは、0値になる(通常は無効な)第1のバイトを示し、残りの4バイトは、32ビットマスクとなり、そのセクションは、そうでないセクションと比べ最適化/縮小される。また、第1番目のセクションを最適化しないこともできる。その場合、第1番目のセクションは、0である第1のバイトを持たない。言い換えれば、ネームフィールドは、PE/COFFスペックに適合し、その中に何らかの実際のネームをもつ8バイトのフィールドである。この状況では、最適化される次のセクションヘッダは、残りのセクションの状態を表わす指標となり、次のセクションヘッダは、ネームフィールド(5バイト)を有するようになる。この場合、第1番目のnセクションヘッダは最適化されず、n+1のセクションヘッダは、ネームフィールドにビットマスクを有するようになる。ネームフィールドのセクションヘッダに一旦マスクが現れると、次に最適化されるセクションヘッダにネームフィールドを有している必要はもはやない。いくつかの実施例では、すべてのセクションヘッダで一貫したネームフィールドを用いることもできる。本明細書においては、使用されるバイト、および、必要なフィールドは、例示目的のみで用いられている。他のシステムでは、ヘッダの異なる形式を使用するか、または、異なるフィールドを必要とする場合もある。
【0023】
図2は、4つのセクション210、220、230、および、240を有する画像における不要なフィールドを削除するべく縮小されるPE/COFFセクションヘッダを示す。この例では、セクションヘッダ1、3、および、4(210、230、および、240)は最適化されるかまたは縮小される。セクションヘッダ2は、フォーマット基準により定義されたデフォルトフィールドを使用する。図2に示すように、セクション1(210)は、ネームフィールド161を含むが、セクション3および4(230および240)は、ネームフィールド161を含まない。最適化されたセクションヘッダのそれぞれは、さらに、図1で示したような4つのフィールド164、165、166、および、168を含む。ネームフィールド161は、以下により詳細に説明するような特別に重要な意味をもつ。
【0024】
一実施例では、ネームフィールド161は、第1のセクションヘッダ210で使用される。そして、どのセクションヘッダが最適化され、また、そのセクションヘッダが完全なデフォルトフォーマットを使用するかを識別する。図3は、以降のセクションを最適化するかまたは縮小するか、あるいは、デフォルトフォーマットを使用するかを定義する表300を示す。例えば、一実施例では、画像は、1−nのn個のセクションを有する。第1のセクション301は、最適化される。第2のセクション303は、デフォルトフォーマットを使用する。第3および第4のセクション(305および307)は、最適化され、その結果、第nのセクション309もうまく最適化する。いくつかの実施例では、この表は、マスクワードで実行することもでき、1ビット(1b)は、セクションが最適化されることを示し、かつ、0ビット(0b)は、セクションがデフォルトフォーマットを使用することを示す。このマスクまたはヘッダは、画像ファイルにプリペンドされているか、または、画像内の既知の他の予め決められたオフセットに配置されていてもよい。例えば、画像内の未使用のフィールド、すなわち、ネームフィールド161に配置してもよい。この例では、図3に示すようなセクション1−4は、1011bで表わされ、ここでは、第1のセクション301に対して最下位ビットが用いられる。
【0025】
「最適化」という用語は、画像がロードされるプラットフォームによって決まる特定の意味をもつ。画像を処理した後、それをメモリにロードするエージェントまたはリコンストラクタがあってもよい。エージェントは、このビットマスクに基づき、セクションを翻訳する。したがって、セクションが最適化されると、エージェントは、バイトがいくつあってどのフィールドがセクションで使用されるのかがわかるようになる。一実施例では、セクション1(301)のネームフィールド161は、図3の表を格納するためのビットマップとして用いられる。その結果、エージェントは、画像ファイルにさらにオーバヘッドをかけることなく、デフォルトセクションおよび最適化されるセクションを識別することができる。例えば、ゼロバイトから始まるネームフィールド161は、最適化表を格納するために使用されたネームフィールドとして翻訳されてもよい。第1のバイトが0でない場合、エージェントは、画像をデフォルト/レガシーフォーマットとして読み込む。
【0026】
既存のシステムでは、PE/COFF画像中に16セクション以上あることはあまりない。したがって、最適化テーブルを保持するべくネームフィールド161を使用する実施例では、マスク情報を伝達するのには2バイトしか必要としない。PE/COFFスペックでは、ネームフィールドは8バイトとして定義される。一実施例では、32セクションまでを考慮に入れて表には4バイト用意されている。したがって、ネームフィールドには5バイトだけ使用される。一実施例では、第1のバイトは、このフィールドが表として使用されるか、4バイトが表に使用されるか、ネームフィールドの残りの3バイトは他の目的でも使用できるかまたは削除されるのかを示すフラグとなる。
【0027】
図4を参照すると、処理済みのPE/COFF画像400が表わされている。一実施例では、PE/COFFヘッダは、129バイト(図1参照)から30バイト(401)にまで引き下げられている。セクションヘッダ領域403は、40*nバイトから21*nバイトにまで引き下げられている(nは、セクション数を示す)。一見するとスペースの節約がそう重要なこととは思われないかもしれないが、フラッシュメモリは、多数の画像を含むことがある。フラッシュメモリにロードされる多くの画像に対しスペースの節約が有効であれば、追加の画像のためにより多くのスペースが利用できるようになるか、または、フラッシュカードのサイズを縮小することもできる。スペースの節約は、各プラットフォームが異なるフィールドセットを必要とするような、ターゲットプラットフォームによっても変わることがある。ELFおよびMach−Oなど、PE/COFF以外の画像フォーマットのスペースの節約も、フォーマットおよびターゲットプラットフォームによって変わる。
【0028】
図5は、開示されたシステムおよび方法の実施例を用いてのスペース節約を表わすフラッシュメモリを示す。一実施例によれば、処理510の前と処理520の後に全体のフラッシュ画像が表われる。処理510なしのフラッシュ画像は、XIPコード専用の65536バイト511と、非XIPコード専用の458752バイト513とを含む。本発明の実施例によれば、ラッシュメモリで処理された画像では、XIP画像は、圧縮されないが、プルーニングされることはできる。したがって、従来の方法は、画像のこの領域に65536バイト必要であるが、プルーニングされるかまたは最適化されたXIP領域は、61180バイト521ですむようになる。同様に、この例では、非XIPコードは、従来のフォーマットを用いて458752バイト513必要である場合もあるが、プルーニング後は、450403バイト523だけで足りるようになる。従来の方法では、XIPコードが圧縮できないと、スペースの節約もできない点に注意すべきである。
【0029】
図6を参照すると、本実施例に従う、処理されるかまたはプルーニングされた画像をロードする典型的な方法600を表わすフローチャートが示されている。ブートまたはシステムの電源オンと同時に、実行可能な画像がフラッシュメモリからロードされる(ブロック601)。ブロック603において、ファームウェアモジュールがフラッシュメモリから取り出されるかどうかの決定がなされる。何も取り出されない場合、ブロック603においてファームウェアモジュールがフラッシュメモリから取り出されるべきかどうかの決定がなされるまで、ブロック605において通常のオペレーションでの処理が続けられる。
【0030】
フラッシュメモリからファームウェアモジュールが取り出された場合、画像/モジュールを格納するため、ブロック607において十分な大きさのメモリバッファが割り当てられる。画像のサイズは、画像に格納されており、プルーニングがされていなければ、そのサイズがPEヘッダに格納される。プルーニングされていない画像に対しては、その画像サイズはPEヘッダから決定されるか、または、デフォルトまたは最適化情報から計算される。ブロック609において先頭ヘッダファイルが再構築される。典型的なPE/COFF画像では、オリジナルPEおよびCOFFヘッダがシード情報により再構築され、プルーニングされた情報のギャップを満たす。言い換えれば、画像がメモリにあるときにオリジナルサイズのヘッダが再構築されると、その画像は、データが全くプルーニングされていない場合と同じだけのスペースをとる。それによって、レガシーソフトウェアは、画像を読み取ることができる。いくつかの実施例では、PE/COFF(または他のフォーマット)ヘッダは、プルーニングされるが、セクションヘッダデータは一部分だけプルーニングされるかまたは全くプルーニングされない。
【0031】
一実施例では、第1のセクションヘッダは、最適化(プルーニング)マスクによりネームフィールドをオーバーロードする。ブロック611において、画像がプルーニングされているかの決定がなされる。この例では、この決定は、第1のセクションのネームフィールドを見てなされる。第1のバイトがゼロの場合、画像はプルーニングされており、マスクは、ネームフィールド内にある。 ネームフィールドの第1のバイトがゼロでない場合、画像はデフォルトフォーマットになり、1セクションずつ従来のやり方でロードされることもできる。画像ファイルがプルーニングされていない場合、ブロック613において、第1のセクションヘッダは、割り当てられたメモリバッファにコピーされる。ブロック615で決定されたように、より多くのセクションヘッダがロードされた場合、処理はブロック611へと続き、ブロック613において、次のセクションヘッダがメモリにコピーされる。ブロック611においてなされた決定は、一回だけ行われ、その後フラグはセクションヘッダを通じてルーピングするべく設定され得ることは、当業者にとって明らかである。フローチャート600におけるループ(611、613、615)は例示にすぎず、他の様々なやり方で実行することもできる。
【0032】
ブロック611で示すように、画像がプルーニングされている場合、一実施例では、次の4バイトがビットマスクとして用いられ、ブロック619において、各ヘッダが最適化されているか、または、デフォルトフォーマットであるかどうかが決定される。ブロック621では、現在のセクションヘッダがビットマスクにおいて識別された最適化ヘッダどうかが決定される。そうでない場合、ブロック625において、セクションヘッダは、割り当てられたメモリにコピーされ、処理は、次のセクションヘッダへと続く。
【0033】
セクションヘッダは、最適化またはプルーニングされている場合には再構築されなくてはならない。完全な画像形式を予測するレガシープログラムと適合するべく、ブロック623において、セクションヘッダが再構築される。フィールドの残りは、PE/COFFなどの画像形式で定義されたオフセットに対応する位置に移動される。プルーニングまたは削除されたフィールドは、シードデータで満たされるか、または、ブランクのまま、オリジナルファイル形式のそのフィールドのオフセット位置にコピーされる。したがって、再構築されたセクションヘッダは、レガシーソフトウェアに適合すべくデフォルトフォーマットで現れるようになる。シードフィールド(前にプルーニングされている)は、ターゲットプラットフォームには必要ないと定義され、それらのフィールドのいずれのデータも無視される。すべてのセクションが割り当てられたメモリにコピーされるまで処理は続けられる。
【0034】
すべてのセクションヘッダが一旦メモリにロードされると、ブロック617において、画像ファイルの残りがメモリにロードされる。表示され得る追加画像をロードすべく、ブロック603において処理が続けられる。
【0035】
画像がXIPであれば、メインメモリにはロードされず、フラッシュメモリから直接実行されなければならない。一般的に、XIPファイルはフラッシュメモリから実行されるものであるが、通常特にポータブルではないので、正確な互換性は必要とされない。大抵、それらは、システム初期化のごく早期に使用され、プラットフォームが一旦資源豊富な状態になってしまえば、すなわち、メモリが見つけられ使用されているときは、参照されない。XIP画像をどのように扱うかは、実施形態によって特有である。
【0036】
図7を参照すると、プルーニングされたコード画像ファイルを再構築する典型的なシステム700が示されている。一実施例では、プロセッサ701は、システムメモリ703を有し、フラッシュメモリ705に有効に結合される。プレブート間の様々な時間において、フラッシュメモリからコード画像ファイル715を取り出す必要がある場合もある。一実施例では、フラッシュメモリ705内には、1つまたはそれ以上のコード画像ファイル715が存在する。コード画像ファイルは、先に述べたような方法に従いプルーニングまたは縮小されているプルーニング画像ファイル715bであってよく、あるいは、コード画像ファイルは、オリジナルコード画像ファイル715aであってよい。コード画像ファイル715は、プルーニングの有無に関わらず、圧縮されてよい。コード画像715bがプルーニングされている場合、BIOS711は、プルーニングされた画像715bのヘッダを再構築すべく、画像リコンストラクタ721に制御を移管してよい。再構築されたコード画像713は、レガシーコードで処理されることができる形式でシステムメモリ703内に配置される。ここでは、レガシーコードは、画像が最初からプルーニングされていたことを必ずしもわかっていなくてよい。オリジナル画像からプルーニングされたデータはどれもこのターゲットプラットフォームにとっては必要でないため、レガシーコードは、再構築された画像を処理することができる。
【0037】
ここで説明する技術は、特定のハードウェアまたはソフトウェア構成に制限されるものではなく、あらゆるコンピュータ、一般電子機器、または、処理環境においても適用性を見出すことができる。
また、ここで説明する技術は、ハードウェア、ソフトウェア、または、それらの組合せにおいても実施できる。さらに、モバイルまたはステーショナリコンピュータ、パーソナル携帯情報機器、セットトップボックス、携帯電話、ポケットベル、一般電子機器(DVDプレーヤ、パーソナル・ビデオレコーダ、パーソナル・ビデオプレーヤ、衛星受信機、ステレオレシーバ、ケーブルTV受信機を含む)、および、プロセッサ、プロセッサにより読み取り可能な記憶媒体(揮発および不揮発メモリ、および/または記憶素子など)、少なくとも1つの入力デバイス、および、1つまたはそれ以上の入力デバイスを含む他の電子機器においても実施できる。プログラムコードは、入力デバイスを用いて入力されたデータに適用されることにより、記述された関数を実行し、かつ、出力情報を生成する。出力情報は、1つまたは他の出力デバイスに適用されることもできる。本発明がマルチプロセッサシステム、ミニコンピュータ、メインフレームコンピュータ、個別の一般電子機器など様々なシステム構成により実施できることは当業者にとって明らかなことである。本発明はまた、通信ネットワークを介し接続される遠隔処理装置により実行できる分散コンピューティング環境においても実施可能である。
【0038】
各プログラムが、高度なプロシージャまたはオブジェクト指向プログラミング言語で実行されることにより、処理システムとの通信が実現する。また、必要であれば、プログラムはアセンブリまたはマシン言語で実行することもできる。いずれの場合でも、言語はコンパイルまたは翻訳されることができる。
【0039】
プログラム命令を用いることにより、命令によりプログラムされた汎用または専用処理システムは、本明細書中に記載された動作を実行することができる。一方で、動作は、それらを実行するためのハードワイヤードロジックを含む特定のハードウェアコンポーネント、または、プログラムされたコンピュータ要素とカスタムハードウェアコンポーネントとの組合せにより実行することもできる。本明細書中に記載された方法は、処理システムをプログラムするよう用いることができる命令を格納したマシンアクセス可能な媒体を含むコンピュータプログラム製品、または、方法を実行する他の電子デバイスとして提供することもできる。ここで使用した「マシンアクセス可能な媒体」という用語は、マシンで実行するための命令シーケンスを格納またはエンコードすることが可能であり、また、マシンが本明細書中に記載された方法のいずれか1つを実行できるようにする媒体を当然含む。したがって、「マシンアクセス可能な媒体」とは、固体メモリ、光磁気ディスク、および、データ信号をエンコードする搬送波も当然含むが、これに制限されるものではない。さらに、プログラム、手順、プロセス、アプリケーション、モジュール、ロジック、などいずれの形にせよ、ソフトウェアが動作を起こすまたは結果を生じさせるように説明するのは技術的に一般的なことである。このような表現は、処理システムでソフトウェアを実行することにより、プロセッサに結果を生じる動作を行わせるということを分かりやすく説明する1つの手法に過ぎない。
【0040】
以上、本発明の一側面を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更又は改良を加えることができる。その様な変更又は改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。

【特許請求の範囲】
【請求項1】
画像をロードする方法であって、
十分なサイズのメモリバッファを割り当てることにより、実行可能な画像ファイルを保持する段階と、
前記画像ファイルがプルーニングされているかどうかを決定する段階と、
前記画像を実行すべく前記メモリバッファにロードする段階と、
を含む、方法。
【請求項2】
前記画像ファイルをロードする段階は、
該画像ファイルに対応する各セクションヘッダに対し、
前記画像ファイルがプルーニングされていた場合、
現在のセクションヘッダがプルーニングされているかどうかを決定することと、もしされてされていれば、前記プルーニングされた現在のセクションヘッダから現在の標準フォーマットセクションヘッダを再構築し、かつ、該再構築されたセクションヘッダを前記メモリバッフにロードすることと、 前記現在のセクションヘッダがプルーニングされていない場合、 前記現在のセクションヘッダを前記メモリバッファにロードすることと、
前記画像ファイルがプルーニングされていない場合、前記各セクションヘッダを前記メモリバッファにロードすることと、
をさらに含む、請求項1に記載の方法。
【請求項3】
前記画像ファイルがプルーニングされているかどうかを決定する段階は、
ビットマスクを取り出すことと、
前記画像ファイルに対応する複数のセクションヘッダを識別し、かつ、前記ビットマスクを用いて前記各識別されたセクションヘッダがプルーニングされているかどうかを決定することと、
をさらに含む、請求項1に記載の方法。
【請求項4】
前記ビットマスクは、前記画像ファイルに対応する前記複数のセクションヘッダの第1のセクションヘッダのネームフィールドに配置される、請求項3に記載の方法。
【請求項5】
前記画像ファイルをロードする段階は、
前記メモリバッファに複数のセクションヘッダをロードすることと、
前記メモリバッファに前記画像の内容をロードすることと、
をさらに含む、請求項1に記載の方法。
【請求項6】
前記メモリバッファにロードされた前記複数のセクションヘッダのそれぞれは、デフォルトフォーマットセクションヘッダおよび再構築されたセクションヘッダの1つを含む、請求項5に記載の方法。
【請求項7】
前記画像内容は、eXecute In Place(XIP)コードとして識別される、請求項5に記載の方法。
【請求項8】
前記画像内容は圧縮される、請求項5に記載の方法。
【請求項9】
前記画像ファイルは、第1のターゲットプラットフォームの第1の予め決められたフォーマットにプルーニングされ、また、第2のターゲットプラットフォームの第2の予め決められたフォーマットにプルーニングされる、請求項1に記載の方法。
【請求項10】
画像ファイルをロードする命令を含むマシンアクセス可能な媒体であって、前記命令によりマシンは、
十分なサイズのメモリバッファを割り当てることにより、実行可能な画像ファイルを保持することと、
前記画像ファイルがプルーニングされているかどうかを決定することと、
前記画像ファイルを実行すべく前記メモリバッファにロードすることと、
を実行する、マシンアクセス可能な媒体。
【請求項11】
前記画像ファイルをロードするための命令によりマシンは、
前記画像ファイルに対応する各セクションヘッダに対し、
前記画像がプルーニングされている場合、
現在のセクションヘッダがプルーニングされているかどうかを決定することと、
そうであれば、前記プルーニングされた現在のセクションヘッダから現在の標準フォーマットセクションヘッダを再構築し、かつ、前記現在のセクションヘッダがプルーニングされていなければ、前記現在のセクションヘッダを前記メモリバッファにロードすることと、
前記画像ファイルがプルーニングされていなければ、前記各セクションヘッダを前記メモリバッファにロードすることと、
をさらに実行する、請求項10に記載の媒体。
【請求項12】
前記画像ファイルがプルーニングされているかどうかを決定するための命令により、前記マシンは、
ビットマスクを取り出すことと、
前記画像ファイルに対応する複数のセクションヘッダを識別し、かつ、前記ビットマスクを使用して前記各識別されたセクションヘッダがプルーニングされているかどうかを決定することと、
をさらに実行する、請求項10に記載の媒体。
【請求項13】
前記ビットマスクは、前記画像ファイルに対応する前記複数のセクションヘッダの第1のセクションヘッダのネームフィールドに配置される、請求項12に記載の媒体。
【請求項14】
前記画像ファイルにロードされた命令により、前記マシンは、
前記メモリバッファに複数のセクションヘッダをロードすることと、
前記メモリバッファに前記画像の内容をロードすることと、
をさらに実行する、請求項10に記載の媒体。
【請求項15】
前記メモリバッファにロードされる前記複数のセクションヘッダのそれぞれは、デフォルトフォーマットセクションヘッダ、および、再構築されたセクションヘッダの1つを含む、請求項14に記載の媒体。
【請求項16】
前記画像内容は、eXecute In Place(XIP)コードとして識別される、請求項14に記載の媒体。
【請求項17】
前記画像内容は圧縮される、請求項14に記載の媒体。
【請求項18】
画像ファイルをロードするためのシステムであって、
ターゲットプラットフォームにおけるプロセッサであって、システムメモリを有し、かつ、フラッシュメモリデバイスと有効に結合されるプロセッサと、
前記フラッシュメモリデバイスに格納される少なくとも1つの実行可能な画像ファイルと、
プルーニングされた画像ファイルを再構築し、かつ、該再構築された画像ファイルをシステムメモリにロードするリコンストラクタと、
を含むシステム。
【請求項19】
前記リコンストラクタは、前記少なくとも1つの実行可能なファイルのそれぞれがプルーニングされているかどうかを決定し、もしされていれば、該プルーニングされた実行可能ファイルに対応するセクションヘッダがプルーニングされているかを決定し、セクションヘッダがプルーニングされていれば、該プルーニングされたセクションヘッダをターゲットプラットフォームに適合するフォーマットで再構築する、請求項18に記載のシステム。
【請求項20】
前記フラッシュメモリデバイスに格納された実行可能な画像の少なくとも1つの実行可能な画像ファイルは、前記ターゲットプラットフォームに適合するフォーマットにプルーニングされている、請求項18に記載のシステム。
【請求項21】
再構築された画像ファイルがシステムメモリに一旦ロードされると、該画像ファイルは、オリジナル画像ファイルからプルーニングされたものではないように動作する、請求項18に記載のシステム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate


【公表番号】特表2007−535241(P2007−535241A)
【公表日】平成19年11月29日(2007.11.29)
【国際特許分類】
【出願番号】特願2007−509506(P2007−509506)
【出願日】平成17年4月8日(2005.4.8)
【国際出願番号】PCT/US2005/012128
【国際公開番号】WO2005/109848
【国際公開日】平成17年11月17日(2005.11.17)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.ウィンドウズ
2.Linux
【出願人】(591003943)インテル・コーポレーション (1,101)
【Fターム(参考)】