(57)【要約】ソフトウエアのアトム化は、きめ細かく、個別にアドレス可能な方法でコード及びデータを定義しているアトムを、アトム・データベースからメモリにロードすることによって、オンデマンドで、アトム化されたコンピュータ・プログラム・コード及びデータをロードする方法を提供する。アトムは、アトム識別子、コンピュータ・プログラム・コード又はデータ情報、ならびに、コンピュータ・プログラム・コード又はデータ参照情報を含む。参照情報をメモリアドレスに変換して、コンピュータ・プログラム・コード又はデータを変更する。本発明は、自動的及び明示的双方によるデータの遅延ロードを提供する。遅延ロードされたコードによってデータが参照される場合には、そのデータは自動的に遅延ロードされる。
2005537533.tif 000002
【特許請求の範囲】
【請求項１】
アトム化されたコンピュータ・プログラム・コード及びデータを、オンデマンドでロードする方法であって、
きめ細かく、個別にアドレス可能な方法で、コード又はデータを定義しているアトムを、アトム・データベースからメモリへロードし、そのアトムは、
アトム識別子、
コンピュータ・プログラム・コード又はデータ情報、
コンピュータ・プログラム・コード又はデータ参照情報
を含み、かつ
参照側アトム識別子を、メモリアドレスに変換することによって、コンピュータ・プログラム・コード又はデータ情報を変更する
ことを含む方法。
【請求項２】
請求項１の方法であって、メモリアドレスが、参照されるアトムをロードし、かつその参照されるアトムへジャンプするスタブ・ルーチンのメモリアドレスである方法。
【請求項３】
請求項２の方法であって、スタブ・ルーチンのメモリアドレスに、更新されたメモリアドレスを上書きして参照されるアトムを直接参照するする方法。
【請求項４】
請求項２の方法であって、参照されるアトムを参照する全てのロードされたアトムに対して、スタブ・ルーチンのメモリアドレスを上書きする方法。
【請求項５】
請求項１の方法であって、変更のステップは、
実際に実行時にアクセスされるまで、参照されるデータ・アトムをロードしないようにメモリアドレスをエンコードすることをさらに含む方法。
【請求項６】
請求項５の方法であって、エンコードのステップは、
参照側アトム識別子に２を乗じ、参照側アトム識別子に１を増分して遅延データ・アトム識別子を生成することを含む方法。
【請求項７】
請求項１の方法であって、
ディスク・ベースのアトム・データベースを、前回のアトム・ロード経験の実行時パターン解析に基づいて、効率的なアクセスのため並べ換えるステップをさらに含む方法。
【請求項８】
請求項１の方法であって、
コンピュータ・プログラム・コード又はデータ情報、ならびに、コンピュータ・プログラム・コード又はデータ参照情報を置き換えることによって、情報アトム・データベース中の少なくとも一つのアトムを更新するステップをさらに含む方法。
【請求項９】
請求項１の方法であって、
アトム・データベース中のアトム群に、新しいアトムを加えるステップをさらに含む方法。
【請求項１０】
請求項１の方法であって、
アトム・データベース中のアトム群から、選定したアトムを削除するステップをさらに含む方法。
【請求項１１】
請求項１の方法であって、ロード・ステップは、
圧縮されたフォーマットで保存されているコンピュータ・プログラム・コード又はデータ情報を解凍することをさらに含む方法。
【請求項１２】
請求項１の方法であって、あらかじめ定めた使用限度に基づいて、ロードされたアトムをメモリから除去する方法。
【請求項１３】
請求項１の方法であって、ロードされたアトムが参照する全てのアトムをロードする前に、ロード済アトムの実行を開始する方法。
【請求項１４】
請求項１の方法であって、
事前又は遅延ロード技法を有効化するために、コンピュータ・プログラム・コード又はデータ参照情報を変更するステップをさらに含む方法。
【請求項１５】
請求項１４の方法であって、変更のステップで、前回のアトム・ロード経験での実行時パターンの解析に基づきロード技法を決定する方法。
【請求項１６】
請求項１の方法であって、読み取り専用バッファを経由して、ロードされたアトムを複数の実行可能プロセスが共用する方法。
【請求項１７】
コンピュータ・プログラム・コード及びデータをアトム化する方法であって、
個別にアドレス可能なコード及びデータを定義しているオブジェクトコード・フォーマットのコンピュータ・プログラム・コード及びデータを受け取り、
オブジェクトコード・フォーマットのコンピュータ・プログラム・コード及びデータから、コンピュータ・プログラム・コード及びデータ情報を抽出し、
オブジェクトコード・フォーマットのコンピュータ・プログラム・コード及びデータから、コンピュータ・プログラム・コード及びデータ参照情報を抽出し、
アトム識別子を使用するために、コンピュータ・プログラム・コード及びデータ参照情報を変更し、ならびに
コンピュータ・プログラム・コード及びデータ情報、ならびに、コンピュータ・プログラム・コード及びデータ参照情報を、
アトム識別子、
コンピュータ・プログラム・コード又はデータ情報、及び
コンピュータ・プログラム・コード又はデータ参照情報
を含むアトムの中に格納する
ことを含む方法。
【請求項１８】
アトム化されたコンピュータ・プログラム・コード及びデータを、オンデマンドでロードする装置であって、
アトム識別子、
コンピュータ・プログラム・コード又はデータ情報、及び
コンピュータ・プログラム・コード又はデータ参照情報
を含むアトムと
きめ細かく、個別にアドレス可能な方法で、コード又はデータを定義しているアトムを、アトム・データベースからメモリ中にロードし、参照側アトムの識別子をメモリアドレスに変換することによって、コンピュータ・プログラム・コード又はデータ情報を変更するアトム管理プログラムユニット、
とを含む装置。
【請求項１９】
コンピュータ・プログラム・コード及びデータをアトム化する装置であって、
個別にアドレス可能なコード及びデータを定義しているオブジェクトコード・フォーマットのコンピュータ・プログラム・コード及びデータを受け取るレシーバ、
オブジェクトコード・フォーマットのコンピュータ・プログラム・コード及びデータから、コンピュータ・プログラム・コード及びデータ情報を抽出し、オブジェクトコード・フォーマットのコンピュータ・プログラム・コード及びデータから、コンピュータ・プログラム・コード及びデータ参照情報を抽出するエクストラクタ、
アトム識別子を使うために、コンピュータ・プログラム・コード及びデータ参照情報を変更するモデファイヤ、ならびに
コンピュータ・プログラム・コード及びデータ情報とコンピュータ・プログラム・コード及びデータ参照情報とを、
アトム識別子、
コンピュータ・プログラム・コード又はデータ情報、及び
コンピュータ・プログラム・コード又はデータ参照情報
を含むアトムに格納する格納ユニット、
を含む装置。
【請求項２０】
アトム化されたコンピュータ・プログラム・コード及びデータをオンデマンドでロードする装置であって、
きめ細かく、個別にアドレス可能な方法で、コード又はデータを定義しているアトムであって、
アトム識別子、
コンピュータ・プログラム・コード又はデータ情報、及び
コンピュータ・プログラム・コード又はデータ参照情報
を含むアトムを、アトム・データベースからメモリへロードする手段と、
参照側アトム識別子をメモリアドレスに変換することによってコンピュータ・プログラム・コード又はデータ情報を変更する手段、
とを含む装置。
【請求項２１】
コンピュータ・プログラム・コード及びデータをアトム化する装置であって、
個別にアドレス可能なコード及びデータを定義するオブジェクトコード・フォーマットのコンピュータ・プログラム・コード及びデータを受け取る手段、
オブジェクトコード・フォーマットのコンピュータ・プログラム・コード及びデータから、コンピュータ・プログラム・コード及びデータ情報を抽出する手段、
オブジェクトコード・フォーマットのコンピュータ・プログラム・コード及びデータから、コンピュータ・プログラム・コード及びデータ参照情報を抽出する手段、
アトム識別子を使うために、コンピュータ・プログラム・コード及びデータ参照情報を変更する手段、及び
アトム識別子、
コンピュータ・プログラム・コード又はデータ情報、及び
コンピュータ・プログラム・コード又はデータ参照情報
を含むアトム中にコンピュータ・プログラム・コード及びデータ情報、ならびに、コンピュータ・プログラム・コード及びデータ参照情報を格納する手段、
を含む装置。
【請求項２２】
コンピュータ・プログラム製品であって、
アトム化されたコンピュータ・プログラム・コード及びデータをオンデマンドでロードするためのコンピュータ使用可能媒体、
きめ細かく、個別にアドレス可能な方法で、コード又はデータを定義しているアトムであって、
アトム識別子、
コンピュータ・プログラム・コード又はデータ情報、及び
コンピュータ・プログラム・コード又はデータ参照情報
を含むアトムを、アトム・データベースからメモリへロードするための命令、及び
参照側アトム識別子をメモリアドレスに変換することによって、コンピュータ・プログラム・コード又はデータ情報を変更するための命令
を含み、コンピュータ使用可能媒体上に具現されるコンピュータ・プログラム命令のセット
を含む製品。
【請求項２３】
コンピュータ・プログラム製品であって、
コンピュータ・プログラム・コード及びデータをアトム化するためのコンピュータ使用可能媒体と、
個別にアドレス可能な方法で、コード又はデータを定義しているオブジェクトコード・フォーマットのコンピュータ・プログラム・コード及びデータを受け取るための命令、
オブジェクトコード・フォーマットのコンピュータ・プログラム・コード及びデータからコンピュータ・プログラム・コード及びデータ情報を抽出するための命令、
オブジェクトコード・フォーマットのコンピュータ・プログラム・コード及びデータからコンピュータ・プログラム・コード及びデータ参照情報を抽出するための命令、
アトム識別子を使うために、コンピュータ・プログラム・コード及びデータ参照情報を変更するための命令、ならびに
アトム識別子、
コンピュータ・プログラム・コード又はデータ情報、ならびに
コンピュータ・プログラム・コード又はデータ参照情報
を含むアトム中にコンピュータ・プログラム・コード及びデータ情報及びコンピュータ・プログラム・コード及びデータ参照情報を格納するための命令、
を含み、コンピュータ使用可能媒体上に具現されるコンピュータ・プログラム命令のセット
を含む製品。
【請求項２４】
アトム化されたコンピュータ・プログラム・コード及びデータをオンデマンドでロードするためのコード・セグメントを含む搬送波上に具現されるコンピュータ・データ信号であって、
きめ細かく、個別にアドレス可能な方法で、コード又はデータを定義しているアトムであって、
アトム識別子、
コンピュータ・プログラム・コード又はデータ情報、及び
コンピュータ・プログラム・コード又はデータ参照情報
を含むアトムを、アトム・データベースからメモリへロードするための命令、及び
参照側アトム識別子をメモリアドレスに変換することによって、コンピュータ・プログラム・コード又はデータ情報を変更するための命令
を含むコンピュータ・データ信号。
【請求項２５】
コンピュータ・プログラム・コード及びデータをアトム化するためのコード・セグメントを含む搬送波上に具現されるコンピュータ・データ信号であって、
個別にアドレス可能コード及びデータを定義するオブジェクトコード・フォーマットのコンピュータ・プログラム・コード及びデータを受け取るための命令、
オブジェクトコード・フォーマットのコンピュータ・プログラム・コード及びデータからコンピュータ・プログラム・コード及びデータ情報を抽出するための命令、
オブジェクトコード・フォーマットのコンピュータ・プログラム・コード及びデータからコンピュータ・プログラム・コード及びデータ参照情報を抽出するための命令、
アトム識別子を使うために、コンピュータ・プログラム・コード及びデータ参照情報を変更するための命令、ならびに
アトム識別子、
コンピュータ・プログラム・コード又はデータ情報、及び
コンピュータ・プログラム・コード又はデータ参照情報
を含むアトム中にコンピュータ・プログラム・コード及びデータ情報、ならびに、コンピュータ・プログラム・コード及びデータ参照情報を格納するための命令
を含むコンピュータ・データ信号。
【請求項２６】
データ処理システム上で実行されるコンピュータ・プログラムがアクセスするデータを格納するためのメモリであって、
アトム・データベースを表現するデータ構造がそのメモリに格納され、このデータ構造は、
ヘッダと、
アトム・マップを含み、このアトム・マップには、
アトム・マップ・ヘッダと、
アトム・マップ本体とが含まれ、このアトム・マップ本体には、
アトム・オフセット・シーケンスを参照するアトム・マップ配列が含まれ、このアトム・オフセット・シーケンスには、
第１アトム・ファイル・オフセット、
デルタコードされたファイル・オフセット配列が含まれ、
アトムフラッグ、
アトム数情報
エンコードされたアトム参照
エンコードされたロウ・アトム・バイト
を含むアトムを参照する
メモリ。
【請求項２７】
請求項２６のメモリであって、アトム・マップが、アトム識別子を記号による名前でマッピングするメモリ。
【発明の詳細な説明】
【技術分野】
【０００１】
関係出願
本出願は、２００２年６月３日に登録された米国特許出願第１０／１６１，９６４号の継続である。参考のため、前記出願の教示内容全体を本文書に組み込む。
【背景技術】
【０００２】
発明の背景
コンピュータ・ソフトウエアは、一般に、翻訳言語システム又はコンパイル言語システムとして作成される。翻訳言語システムは、高レベルのプログラム・ステートメントを実行可能な様式に変換し、その高レベルのステートメント群を全部変換（コンパイル）してから実行するのでなく、むしろ、ステートメントを一つずつ実行する。Ｂａｓｉｃ、ＬＩＳＰ及びＡＰＬは、一般に翻訳言語として実行される。コンパイル言語システムは、高レベルのプログラム・ステートメントを、実行の前に中間的なフォーマットであるオブジェクトコードに変換する。コンパイル言語システムでは、プログラム・ステートメントはソースコード・プログラム言語（例、Ｃ、Ｃ＋＋）で書かれる。ソースコードには、コンピュータが直接実行できない高レベル言語又はアセンブリ言語で書かれ、人間が判読できるプログラム・ステートメントが含まれている。このソースコードは、コンパイラで処理され、コンパイラは、構文意味規則に従って、ソースコードをオブジェクトコード（例、．ＯＢＪファイル）に転換する。次に、リンカを使ってオブジェクトコードを連結し実行可能なコンピュータ・プログラム（例、．ＥＸＥファイル）を作成する。
【０００３】
実行可能コンピュータ・プログラムは、ディスクへの格納やコンピュータ・メモリへのロードの双方の面から、非常に大きなサイズになることがある。ダイナミック・リンク・ライブラリ（「ＤＬＬ」）は、メインの実行可能コンピュータ・プログラムと別に、実行可能ルーチン及びデータを保管するメカニズムを提供する。実行可能ルーチンは、実行可能コンピュータ・プログラムがそれを必要とする場合だけに、ロードすることができる。ＤＬＬは、ルーチンやデータを使うときだけメモリを使用することによって、そのスペースを節約する。また、ＤＬＬは、実行可能コンピュータ・プログラムや他のＤＬＬと別個に、コンピュータ・コード及びデータ及び編成と管理を提供する。このことにより、プログラマは、呼び出し側のコンピュータ・プログラムや他のいっさいのＤＬＬの動作に影響を与えずに、あるＤＬＬ中の特定のルーチンだけの変更や改善を行うことができる。さらに、ＤＬＬを複数のコンピュータ・プログラムの間で共用することができる。ＤＬＬ自体が、かなり大きくなることがあり、ダウンロード、更新及びロードの面から、ＤＬＬが非常にきめの粗いものにならないように、多くの場合、複数の実行可能ルーチンをそのＤＬＬ内の単一モジュールに編成する。
【０００４】
大きなＤＬＬや他のコード／データの更新にかかる転送時間を最小化する技術が存在する。差異検出アルゴリズム（例、ｒｓｙｎｋ）を使ったファイル転送プロトコルは、転送時間を短縮することができる。これらのアルゴリズムは、ソース及びターゲット・ファイルをデータのブロックにまとめ、そのブロックを分析し、ソースとターゲット・ファイルとが一致しないブロックだけを転送する。
【０００５】
コード及びデータの双方を、通信媒体を通して、また、ディスクからメモリへ転送する時間を短縮するために圧縮技法を使うこともできる。内蔵プロセッサ・システムは、特に実行コードのサイズの影響を受けやすいが、これは、実行コードの圧縮を実施するように装備されている。圧縮されたコードの「ワイヤ」表現を使うことができるが、このコードは、実行の前に解凍しなければならない。他の技術で、圧縮されたコードを直接実行できるものがある（例、「バイト・コード化ＲＩＳＣ」や「ＢＲＩＳＣ」仮想計算機）。
【０００６】
カール（商標）言語は、割付け、スクリプト及びプログラム能力を一つの統合された環境にまとめている。この十分な機能を有する言語を、クライアント側の実行と組み合わせて、カール（商標）技術は、高速で、効率的、高機能アプリケーションをウエブを通して配信し、双方向性のウエブ・サービス能力を可能として、クライアントとサーバが相互運用できるようにしている。カール（商標）のコンテントは、カール（商標）プラグイン及びカール（商標）ランタイム環境によって補強されたウエブブラウザを使って表示される。カール（商標）ランタイム環境は、おおよそ同等量のコードとデータがコンパイルされている多くのランタイム環境とは異なったものとなっている。カール（商標）ランタイム環境は、多数のＤＬＬを使って実行される。
【発明の開示】
【課題を解決するための手段】
【０００７】
本発明の要約
従来の技法を使ったコンピュータ・システムの実行（例、ＥＸＥ及びＤＬＬ）には多くの問題がある。これらのコンピュータ・システムは、きめの粗い実行可能ルーチン及びデータを使っているために、長い立ち上げ時間を要し、多すぎるメモリを使用し、更新するのが面倒である。ソフトウエア・アトムを作成、実行するソフトウエア・アトム化を使って、実行可能コンピュータ・ソフトウエアを編成し管理するためのきめ細かな方法を提供する。
【０００８】
アトムは、アトムｉｄ（識別子）で固有に識別されるコードの断片又はデータ要素である。一般的にコードアトムはソース言語（例、Ｃ／Ｃ＋＋）プロシージャに類似している。データ・アトムは、データ要素であり、どんなサイズにでもすることができる。必要時にアトムをメモリに取入れ、不要になればスワップアウトすることができる。
【０００９】
ひとつの方法では、コードやデータを、きめ細かく、個別にアドレス可能な方法で定義しているアトムを、アトム・データベースからメモリにロードすることによって、オンデマンドで、アトム化されたコンピュータ・プログラム・コード及びデータをロードする方法を提供する。アトムは、アトム識別子、コンピュータ・プログラム・コード又はデータ情報、ならびに、コンピュータ・プログラム・コード又はデータ参照情報を含む。コンピュータ・プログラム・コード又はデータ情報のロードは、それぞれの参照を適切なアドレスに変換し、そのアドレスを該当するオフセット位置のアトム本体に挿入することにより完了する。
【００１０】
アトム識別子ベースの参照をスタブ・ルーチンのメモリアドレスに変換することにより、コードの遅延ロード、すなわちオンデマンド・ロードが行われる。スタブ・ルーチンは、参照されたアトムをロードし、それにジャンプする。コンピュータ・プログラム・コード又はデータ参照情報を変更することにより、アトムのロード・タイプを変更して、事前あるいは遅延ロード技法を使用することができる。前回のアトム・ロード経験での実行時パターンの分析に基づいて、このアトムのロード・タイプを決めることができる。ロードされると、アトムは、読み出し専用バッファを経由して、複数の実行可能プロセスの間で共用される。
【００１１】
スタブを通して、ターゲット・アトムを参照する全てのアトムに「バックパッチング」技法を適用できる。アトムの参照は、呼び出しを行ったルーチン内のソース・オフセット、呼び出されたアトムの宛て先アトムｉｄ、及び呼び出されたアトム内の宛て先オフセットにより定義される。スタブ・ルーチンがターゲット・アトムをロードすると、そのスタブ・ルーチンのメモリアドレスに、参照されたアトムのメモリアドレスを上書きすることができる。
【００１２】
データの遅延ロード、すなわちオンデマンド・ロードは、コードの遅延ロードが行われれば自動的に、また、参照されたデータアトムが実行時に実際にアクセスされるまでロードされないように参照側アトムの識別子をエンコードすることにより明示的に実施される。データを参照するコードのロードを、呼び出しがあるまで遅らせることができるので、そのコードが参照するデータも同様に遅延される、すなわち、自動的にデータの遅延ロードが行われる。明示による遅延データには、そのデータが遅延ロードされるようにマークするため、一般的にはプログラマの対応が必要となる（例、コンパイラ指示文を使う）。一つの実施例においては、参照側アトム識別子に２を乗じ、参照側アトム識別子に１を増分して遅延データ・アトムを生成するという特有のエンコード・アルゴリズムを使って、明示で遅延データを参照する。
【００１３】
本発明の他の実施例として、アトム管理プログラムにより最適化を行うことがある。効率的アクセスのため、前回のアトムロード経験での実行時パターンの分析に基づいて、ディスク中のアトム・データベースの並び換えを実施することができる。コンピュータ・プログラム・コードやデータ情報を圧縮フォーマットで格納することができる。この圧縮により、アトムを格納するため必要なディスク・スペースの削減はもとより、アトムをロードする時間を短縮できる。あらかじめ定めた使用量限度に基づいて、ロードされているアトムを除去するというごみ処理的方法によりメモリを節約することができる。ロードされたアトムは、そのアトムが参照する全てのアトムがロードされる前に実行が開始され、同時並行的な実行環境が提供される。
【００１４】
コンピュータ・プログラム・コード又はデータ情報、ならびに、コンピュータ・プログラム・コード又はデータ参照情報を置き換えることにより、アトム・データベース中のアトムの一部を更新することができる。
【００１５】
コード及びデータアトムは、エクストラクタを使って、プログラミング言語オブジェクト（例、．ｏｂｊファイル）から作成することができる。また、アトム管理プログラムにより処理可能なアトムを生成する他のどのようなプロセスを使っても、アトムを作成することができる。本発明の一つの実施例において、コンピュータ・プログラム・コード及びデータをアトム化する方法には、個別にアドレス可能なコード及びデータを定義するオブジェクトコード・フォーマットのコンピュータ・プログラム・コード及びデータを受け取ること、ならびに、オブジェクトコード・フォーマットで格納されたコンピュータ・プログラム・コード及びデータから、コンピュータ・プログラム・コード及びデータ情報を抽出することが含まれる。また、オブジェクトコード・フォーマットで格納されたコンピュータ・プログラム・コード及びデータから、コンピュータ・プログラム・コード及びデータ参照情報も抽出される。
コンピュータ・プログラム・コード及びデータ参照情報は、アトム識別子を使うために変更され、アトム（アトム識別子、コンピュータ・プログラム・コード及びデータ情報、ならびに、コンピュータ・プログラム・コード及びデータ参照情報を含む）の中に格納される。
【００１６】
本発明の一つの実施例において、データ処理装置上で実行されるコンピュータ・プログラムがアクセスするためのデータを格納するメモリが定義され、このメモリはデータ構造により定義されたアトムを格納することができる。このデータ構造には、ヘッダとアトム・マップが含まれる。アトム・マップには、アトム・マップ・ヘッダ及びアトム・マップ配列が含まれる。アトム・マップ配列には、アトム・オフセット・シーケンスが含まれ、アトム・オフセット・シーケンスは、アトム（アトム識別子、コンピュータ・プログラム・コード及び／又はデータ情報、ならびに、コンピュータ・プログラム・コード及び／又はデータ参照情報を含む）を参照する。アトム・マップもまたアトム識別子に記号名を割り付けることができる。
【００１７】
本発明の実施例では、コード及びデータが最小（アドレス可能）単位レベルで取り扱われるので、より速いコンピュータ・プログラム立ち上げ時間、より少ない実行コード（例、プラグイン、ランタイム）ダウンロード量、より小さなディスク使用領域、より小さなメモリ使用領域、及び、非常に小サイズの更新ファイルを提供する。このアトムのきめ細かいアプローチにより、必要なコードとデータを正しくロードし、実行ファイル内の近隣に所在するというだけの理由で他のコードやデータをロードすることがないようにできる。
アトム化により、アトムが生成する、きめ細かく個別にアドレス可能なユニットに基づき、コードとデータへのランダム・アクセスを最適化できる。コード及びデータが、きめ細かく、個別にアドレス可能なユニットにアトム化されているので、これらは小サイズになることが多く、従って後で更新が必要な場合に、パッチがより容易になる。
【００１８】
本発明の詳細な説明
本発明の最良の実施形態を以下に説明する。最良の実施形態は、カール（商標）ランタイム環境で実施されるコンピュータ・プログラムをアトム化し、アトム化されたカール（商標）ランタイムの適切な部分を実行して、カール（商標）言語、スクリプト又は非カールプログラムで書かれたソフトウエアを処理するのに適している。
【００１９】
図１は、その中で、本発明の一実施形態が実行されるコンピュータ・システムの図である。クライアント・コンピュータ５０及びサーバ・コンピュータ６０はコンピュータ・プログラムをアトム化し、実行するための処理、保管、及びインプット／アウトプット手段を備えている。また、クライアント・コンピュータ５０は、通信ネットワーク７０を通して、他のクライアント・コンピュータ５０及びサーバ・コンピュータ６０を含め、他のコンピュータ・デバイスにリンクすることができる。通信ネットワーク７０は、現在、相互の通信にＴＣＰ／ＩＰプロトコル一式を使っており、世界的なコンピュータの集合であるインターネット・ネットワーク及びゲートウェイの一部であってもよい。インターネットは、主要なノード及びホストコンピュータの間の高速データ通信ラインの基幹を提供しており、何千もの商業用、行政用、教育用及びその他のコンピュータ・ネットワークを構成し、データ及びメッセージを送信している。本発明の他の実施例では、単独動作のコンピュータでも、処理、保管及びインプット／アウトプット手段、及びアトム化されたコンピュータ・プログラムを実施することができる。
【００２０】
図２は、図１のコンピュータ・システム中のコンピュータ（例、５０、６０）の内部構造図である。各コンピュータは、システム・バス２００を含んでおり、バスは、コンピュータの各構成部分の間のデータ転送に使われるハードウエア・ラインのセットである。バス２００は、基本的には、コンピュータ・システムの様々の要素（例、プロセッサ、ディスク記憶装置、メモリ、インプット／アウトプット・ポート、ネットワーク・ポートなど）を接続する共用の経路であり、これら要素間での情報転送を可能にしている。システム・バス２００には、様々なインプット及びアウトプット装置（例、ディスプレー、プリンタ、スピーカなど）をコンピュータに接続するためのＩ／Ｏデバイス・インタフェース２０２が取り付けられている。ネットワーク・インタフェース２０６は、コンピュータがネットワークにつながれた他の様々な装置（例、ネットワーク７０）に接続することを可能にしている。メモリ２０８は、本発明の実施例を実行するために用いられるコンピュータ・ソフトウエア命令（例、アトム・エクストラクタ１５０及びアトム管理プログラム１６０）及びデータ構造（例、アトム・データベース１２０）のための揮発性記憶装置を備えている。ディスク記憶装置２１０は、本発明の実施例を実行するために用いられるコンピュータ・ソフトウエア命令（例、アトム・エクストラクタ１５０及びアトム管理プログラム１６０）及びデータ構造（例、アトム・データベース１２０）のための非揮発性記憶装置を備えている。
【００２１】
セントラル・プロセッサ・ユニット２０４も、システム・バス７００に取り付けられており、コンピュータ命令（例、アトム・エクストラクタ１５０及びアトム管理プログラム１６０）を実行して、コンピュータがコンピュータ・プログラムをアトム化し、アトム化されたプログラムを実行できるようにしている。
【００２２】
図３は、コンピュータ・プログラムを作成しロードして、実行時のアウトプットを表示するための従来方式のプロセスの図解である。プログラマによって、ソースコード・プログラム言語（例、Ｃ、Ｃ＋＋）を使って、ソースコードが作成される。コンパイラ１０４がソースコードを処理し、オブジェクトコード１０６ファイルを作成する。リンカ１０８を使って一つ以上のオブジェクトコード１０６ファイルが連結され、リンカ・セクション１０９が作成される。リンカ・セクション１０９が組み合わされて実行コード１１０ファイルが作成される。実行コード１１０を単独動作の実行可能プログラム（例、．ＥＸＥファイル）としても、あるいはコードの共用ライブラリ（例、．ＤＬＬファイル）としてリンクすることもできる。実行コード１１０は、実行時表示１１４生成の実行のため、ローダ１１２によってメモリにロードされる。
【００２３】
図４は、実行時のアウトプットを表示するためのコンピュータプログラムを作成しロードするためのソフトウエア・アトム化プロセスの図解である。従来方式のプロセスでは、コンピュータ・プログラマーが、ソースコード・プログラム言語（例、Ｃ、Ｃ＋＋）を使ってソースコード１０２を作成する。コンパイラ１０４がソースコードを処理し、オブジェクトコード１０６ファイルを作成する。ソースコード１０２が、通常のやり方でオブジェクトコード１０６ファイルにコンパイルされた後、アトム・エクストラクタ１５０が、アトム１３０を識別するためオブジェクトコード１０６を処理する。きめ細かく、個別にアドレス可能なアトム１３０は、それぞれ固有のアトムｉｄ１３２を付与され、アトム・データベース１２０に格納される。きめの細かいアトム１３０はどのような整数バイトの数のコード及びデータの定義にも対応できる。コード及びデータへの参照は、アトムｉｄ参照に変換される。例えば、コード内のプロシージャ呼び出しは、アトムｉｄ１３２を通しての他のアトム１３０呼び出しに変換される。また、データ参照も、アトムｉｄ１３２を通してのデータアトム参照に変換される。
【００２４】
アトム・エクストラクタ１５０は、オブジェクトコード・ファイル１０６を探査し、このコードからアトム１３０を作成する。オブジェクトコード１０６からアトム１３０を抽出するために必要な情報は、従来方式のローダが、プロシージャをロードして呼び出し、読み取り専用データを最適化するために同じ情報を必要とするという事実によって、既にオブジェクト・ファイルの中に具現されている。オブジェクトコード・ファイル１０６から複数のデータを抽出するために必要な情報として、様々なデータ量の区分けが必要となる。この区分けは、いくつかの従来方式コンパイラ（例、ｇｃｃ）で自動的に実施できるが、プログラマが、ソースコード（例、コンパイラ指示文）の中に直接にデータ量を標識することにより明示で実施することもできる。実行時に、アトム管理プログラム１６０が、アトム・データベース１２０中のアトム１３０にアクセスし、これらアトムをメモリにロードして実行する。ロードされたアトム１３０を実行すると、実行時表示１１４やプログラムされた他のいっさいの結果を提示することができる。アトム管理プログラム１６０は、静的コード解析又は動的プロフィールに基づいて、アトム１３０をロードする最適の順序を決めることができる。コンパイラに、オブジェクトコード・ファイル１０６内の区分けされたセクション生成をさせることにより、手作業による分解及び解析の必要を避けて、アトム化のプロセスを自動的に実施することができる。コンパイラの使用はコード及びデータの区分けされたセクションを生成するための一つのオプションを提供するが、これに替えて、他のプログラムを使ってソース・ファイルを処理し、アトム１３０を作成することもできる。
【００２５】
図５は、アトム抽出プロセスの説明図である。ステップ３０２で、コンピュータ・プログラム・コード及び／又はデータをオブジェクトコード・フォーマットで受け取る。ステップ３０４で、オブジェクトコード・フォーマットのコンピュータ・プログラム・コード及び／又はデータからコンピュータ・プログラム・コード及び／又はデータ情報を抽出する。ステップ３０６で、オブジェクトコード・フォーマットのコンピュータ・プログラム・コード及び／又はデータからコンピュータ・プログラム・コード及び／又はデータ参照情報を抽出する。ステップ３０８で、コンピュータ・プログラム・コード及び／又はデータ参照情報を、アトム識別子を用いるように変更する。最後にステップ３１０で、コンピュータ・プログラム・コード及び／又はデータ情報、ならびに、コンピュータ・プログラム・コード及び／又はデータ参照情報を、アトム（アトム識別子、コンピュータ・プログラム・コード及び／又はデータ情報、ならびに、コンピュータ・プログラム・コード及び／又はデータ参照情報を含む）に格納する。
【００２６】
図６は、アトム・データベース及びアトムの図である。概念的には、アトム・データベース１２０を、アトム１３０の有向グラフと見ることができる。アトム・バイト１３４（ノード）は、アトムｉｄ１３２（ノードｉｄ）により識別され、アトム参照１３６（エッジ）によりリンクされる。アトム・データベース１２０はアトム１３０を格納する。それぞれのアトム１３０は、固有のアトムｉｄ１３２により識別される。各アトム１３０のコード及び／又はデータはアトム・バイト１３４として表現される。アトム・バイト１３４及びアトム参照１３６を含め、アトムを圧縮することができる。特定の環境下では、解凍がディスク読み取り時間よりも早く、圧縮と解凍のプロセスは、メモリ及びディスク記憶装置のスペースを節減させるだけでなく、大幅な性能向上をもたらす。
【００２７】
図７は、アトム管理プログラムの図である。本発明の実施例では、実行時に共用ライブラリ（ＤＬＬ）をロードする従来方式のメカニズムをバイパスし、その代わりに、もっと効率のよいアトム・メカニズムを使って、例えば、４Ｋブロックのメモリに替えてアトム１３０の細かさでロードする。アトム管理プログラム１６０は、必要に応じアトム・データベース１２０からアトム１３０をロードする。アトム管理プログラム１６０は、ホストのメモリを割り当て、アトム１３０をバッファ内で管理する。アトム・エクストラクタ１５０は、アトム管理プログラム１６０のために、プロシージャ呼び出しを、アトム１３０を通した間接的なものに変更しており、この管理プログラムが、メモリ中に既存のアトム１３０を探し出し、まだロードされていないものについてはアトム・データベース１２０からロードする。
【００２８】
このバッファ管理により、メモリ使用の限度設定、ホスト・スワッピング及びスラッシングの低減、ならびに、立ち上げ時間の短縮を含め、いくつかの利点が得られる。メモリ使用限度設定では、メモリ使用限度をどのような特定のサイズにも設定できる。例えば、コード・アトム１３０に対して、きっちり８ＭＢのメモリを保持することを選び、新しいアトム１３０が必要な場合には、古いものをスワップアウトすることができる。本発明の実施例においては、メモリ使用を制限することによって、ホスト・スワッピング及びスラッシングを低減する、したがって、ホストは、メモリの過剰使用を管理するためにそのメモリ管理メカニズムを使用する必要がない。ホストのメモリ管理は、それが汎用型であって特定の必要性あわせたものでないので、本質的に効率が悪い。必要なコードをきっちりとロードし、単に共用ライブラリ内の「近隣」にあるというだけで、必ずしも他のコードをロードしないことにより、メモリ消費を削減する。アトム管理プログラム１６０立ち上げ時間を短縮する。このアトム管理プログラム１６０は、最初の一つのアトム１３０をロードして実行することになる。新たなアトム１３０が必要になるとそれらをロードして実行する。したがって、全体のコード・セットがメモリ中にロードされるのを待たないで、コードは直ちに実行される。本発明の実施例では、ダウンロードが完了する前に、ダウンロードされたコード・アトム１３０の実行が開始される（まだ、送信されて来ていない分のアトム１３０の利用可能性に制限される）。
【００２９】
アトム管理プログラム１６０は、３つのバッファを管理する、すなわち、読み取り専用コード・バッファ１７０、読み取り専用データ・バッファ１８０（例、定数）及び読み書きデータ・バッファ１９０（例、グローバル・データ）である。読み書きデータのサイズは不定なことがあり、また、アトム・データベース１２０から再ロードができないことがあるので、そのサイズを限定できず、そこで、その管理にホストの仮想メモリ・システムを使用することがある。
【００３０】
アトム１３０のワーキング・セットの中のアトム１３０の関係が、例えば、それらの全てが「すぐに」必要となるといったような関係にあることが判定可能な場合には、一度に一つずつのアトム１３０をこれらバッファにロードするのは、そのセットを同時にロードするよりも非効率的である。ワーキング・セット同調プログラムを使って、どのアトム１３０が一つの「ワーキング・グループ」を形成しているかを判定する。ワーキング・セット同調プログラムは、アトム化された環境における情報を収集するように構成されている。情報が収集されると、アトム・データベース１２０内の、アトム１３０の相互の関係を示す指向性のようなこれら情報をうまく利用するメカニズムが使われる。本発明の実施例は、ディスク上のアトム１３０を、特定のロード・シーケンスに一致するよう順序付けする能力を備えており、これにより、より速いロードを提供する。
【００３１】
アトム管理プログラムが、読み取り専用コード・バッファ１７０を管理することにより、確実なローディング最適化が行われる。一つのアトム１３０が他のアトム１３０に対しプロシージャ呼び出しを行う場合、一般的には、アトム管理プログラム１６０を通してスタブを使い、間接的に呼び出しを行う。呼び出し側のコードのメモリ内イメージをターゲット・アトム１３０に直接ジャンプ（「リンク・スナッピング」）するように変更すれば、このプロシージャ呼び出しはより速くなる。しかしながら、いったんリンクがスナップされると、そのリンクを無効にしなければ、アトム管理プログラム１６０は、ターゲット・アトム１３０を移動させたり、スワップアウトすることができない。頻繁に呼び出しを受けるアトム１３０に対しては、これは価値のあるトレードオフとなり得る。アトム管理プログラム１６０は、各種ツールを使って、どのアトム１３０が直接呼び出しに値し、それらアトム１３０をメモリ内へ繋止しておくのがよいかを判断する。リンク・スナッピングについての解析は、実行時にコード／データをメモリ内に収納して行うことができ、もしくは、コンパイル時に特定のアトム参照１３６を、実行時に使用しないスタブに標識することで行うこともできる。
【００３２】
複数のプログラムが同じアトム・データベース１２０にアクセスし、コード及び／又はデータを共用することができる。ホストのプロセッサが、ホストの各種処理の間でのメモリの共用に対応していれば、専用コード・バッファ１７０及び読み取り専用データ・バッファ１８０もこれらホスト処理作業の間で共用することができる。
【００３３】
図８は、アトム管理プロセスの説明図である。ステップ３２２で、アトム管理プロセスは、アトム（アトム識別子、コンピュータ・プログラム・コード及び／又はデータ情報、ならびに、コンピュータ・プログラム・コード及び／又はデータ参照情報を含む）をアトム・データベースからメモリにロードすることにより、アトム化されたコンピュータ・プログラム・コード及び／又はデータを管理する。ステップ３２４で、コンピュータ・プログラム・コード及び／又はデータ参照情報は、アトム識別子とオフセットの使用から、メモリアドレスの使用へと変更される。
【００３４】
図９は、アトム・データベースのデータ構造図である。アトム・データベース１２０はアトム１３０を格納する。一つのアトム１３０は、コンパイルされたプロシージャやストリング定数のような単一のデータに対応する。アトム１３０は、それらが必要なときに、アトム・データベース１２０からメモリにロードされる。これによりメモリ使用領域が削減され、ディスクＩ／Ｏが低減される。アトム・データベース１２０は、アトムｉｄ１３２の値（整数）によるアトム１３０のマッピングである。アトムｉｄ１３２を、アトム１３０を識別する３１ビットの整数で表現することができる。アトム１３０はどのような順序でもロードできる。アトム・データベース１２０のディスク上の表現は、スペースを節約し、アトム１３０をメモリにロードするのに必要なＩ／Ｏを最小化するように最適化される。また、アトム・データベース１２０は、アトムｉｄ１３２の値から、シンボル及びデバッギング情報のような関連するアトム１３０と結びついた情報へのマッピングを提供する。一つのアトム・データベース１２０は、いくつかの別個のセクションで構成される一つのファイルであり、各セクションのサイズは可変であり、これらセクションにはＤＢ−ヘッダ３５０及びアトム・マップ３６０が含まれている。様々の実施例において、このアトム・マップ３６０は、本体−アトム−マップ、記号−アトム−マップ、カテゴリ−アトム−マップ及び／又は記述−アトム−マップの形をとることがある。ＤＢ−ヘッダ３５０を冒頭に配置しなければならないが、他のアトム・マップ・セクションの順序、位置及び数は任意である。このＤＢ−ヘッダ３５０には、他の各セクションに対するファイル・オフセットが含まれている。存在する各セクションは、きっちり１回現れなければならない。
【００３５】
ＤＢ−ヘッダ３５０はデータベース・ファイルの最冒頭にあるものである。これは、マジック−ナンバー、バージョン−ナンバー、ＣＰＵ−タイプ、ＯＳ−タイプ、本体−アトム−マップ−オフセット、記号−アトム−マップ−オフセット、カテゴリ−アトム−マップ−オフセット及び記述−アトム−マップ−オフセットを含め、そのファイルについてのいくつかのグローバル情報及び及び他のセクションの所在場所を包含している。
【００３６】
マジック・ナンバーは、このファイルをアトム・データベース１２０として識別し、また、ファイル中の他の全ての多バイト・ナンバーのエンディアン格納方式を定義する。このマジック・ナンバーは、データベースがリトルエンディアン・バイト順序で格納される場合には、次の４つのバイトで構成される、０ｘＤ７  ０ｘ１５  ０ｘＦＦ  ０ｘ３１。ビッグエンディアン・ファイルについては、バイトは次のように保存される、０ｘ３１  ０ｘＦＦ  ０ｘ１５  ０ｘＤ７。このバイト・シーケンスに特別な意味はない。データベース・ファイルは、常に、プロセッサが保持しているコードの生来のエンディアン方式（バイト順序）にそって格納されることになる。これにより、実行時に、無駄の多いバイト−スワッピングの必要が回避される。ただし、マジック・ナンバーは、プラットフォーム間共通のツールがアトム・データベース１２０を操作できるように、エンディアン方式を明確に規定する。
【００３７】
バージョン−ナンバーは、データベースに使われているファイル・フォーマットのバージョンを示す。
【００３８】
ＣＰＵタイプは、データベース作成の対象となったＣＰＵのタイプを示す（例、ペンティアム（登録商標）、パワーＰＣなど）。
【００３９】
ＯＳ−タイプはデータベース作成の対象となったオペレーティング・システムのタイプである（例、Ｗｉｎ３２、Ｌｉｎｕｘ、ＭａｃＯＳ  Ｘなど）。
【００４０】
本体−アトム−マップ−オフセットは、ファイルの開始点に対する、本体−アトム−マップ・セクション開始位置のファイル・オフセットである。
【００４１】
記号−アトム−マップ−オフセットは、ファイルの開始点に対する、記号−アトム−マップ・セクション開始位置のファイル・オフセットである。
【００４２】
カテゴリ−アトム−マップ−オフセットは、ファイルの開始点に対する、カテゴリ−アトム−マップ・セクション開始位置のファイル・オフセットである。
【００４３】
記述−アトム−マップ−オフセットは、ファイルの開始点に対する、記述−アトム−マップ・セクション開始位置のファイル・オフセットである。
【００４４】
図１０は、アトム・マップ・ヘッダデータ構造の図である。一つのアトム−マップ３６０は、一つのアトム−マップ−ヘッダ３７０と一つのアトム−マップ−配列を包含している。アトム−マップは３６０は、アトムｉｄ１３２をファイル・オフセットにマップし、そこではそのアトムｉｄ１３２に関連するいくつかの情報を見出すことができる。アトム−マップ３６０の表現は、どのようなアトムｉｄ１３２のセットに対しても機能するが、これは、複数アトムｉｄ１３２の連続した並びに最適化され、そこで例えば、ある複数アトムｉｄ１３２｛１２、２３、２４、２１６｝に対するアトム−マップ３６０は、複数アトムｉｄ１３２｛１０、１１、１２、１３｝に対するものよりも多くのスペースを取ることになる。アトム−マップ３６０セクションは、デフォルト−アトム−シーケンス−デルタ３７２、アトム−オフセット−シーケンス−配列−サイズ３７４、アトム−オフセット−シーケンス−配列−オフセット３７６及びアトム−マップ−データ−オフセット３７８を含むアトム−マップ−ヘッダ３７０から開始される。
【００４５】
アトム−マップ３６０の中で、デフォルト−アトム−シーケンス−デルタ３７２のフィールドを使うことができ、この中には、連続したアトムｉｄ１３２に対応するデータについてのファイル・オフセットのシーケンスが含まれる。これらのシーケンスは、スペースを節約するために、アトム−マップ３６０の中に「デルタコード」されている。デルタコードは、数字のシーケンスを引き続きの一対の数字の差として格納する技法である。多くのシーケンスではこのデルタ値は小さく、多くのエンコード方式においてゼロに近い数字は、よりコンパクトに格納できるので、多くの場合、デルタ・シーケンスは、元のシーケンスよりも少ないスペースで済むことになる。例えば、｛１０００、１０１１、１０１２、１０１３、１０１５、１０１６｝のデルタコード・バージョンは、｛１０００、１、１、１、２，１｝のように見える。通常デルタ値は小さな正数であるが、上手に選んだ定数、すなわちデフォルト−アトム−シーケンス−デルタ３７２を、各数値から差し引くことにより、さらにゼロに近づけることができる。例えば、元の数値シーケンスが｛１０００，１０５０，１０５０，１１０４，１１６５，１２０２｝であったと仮定する。このシーケンスをデルタコード化すると｛１０００，５０，５４，６１，３７｝が得られる。デフォルト−アトム−シーケンス−デルタ３７２を５０に等しくすれば、このシーケンスはさらに｛１０００，０，４，１１、−１３｝に調整されることになる。最終的に得られる数字がゼロに近くなるので、そのシーケンスをさらにコンパクトにエンコードすることができる。ハフマン・コーディングや算術コーディング方式を使用することもできる。
【００４６】
アトム−オフセット−シーケンス−配列−サイズ３７４は、シーケンスのアトム−マップ３６０配列中のエントリの数である。
【００４７】
アトム−オフセット−シーケンス−配列−オフセット３７６は、データベース・ファイル中のアトム−マップ３６０セクションの開始点に対する、シーケンスのアトム−マップ３６０配列のファイル・オフセットである。
【００４８】
アトム−マップ−データ−オフセット３７８は、データベース１２０ファイル中のアトム−マップ３６０セクションの開始点に対する、アトム−マップ３６０のデータの開始位置のファイル・オフセットである。
【００４９】
アトム−マップ３６０（例、本体−アトム−マップ、記号−アトム−マップ、カテゴリ−アトム−マップ及び記述−アトム−マップ）はアトム−マップ−配列３８０を包含する。それぞれのアトム−マップ−配列３８０要素は、ファイル・オフセットの圧縮シーケンス（すなわち、アトム−オフセット−シーケンス３９０）への参照である。それぞれのアトム−オフセット−シーケンス３９０は、連続したアトムｉｄ１３２の一つのグループに属する情報に対する圧縮ファイル・オフセットを包含している。
【００５０】
図１１は、アトム・マップ配列データ構造の図である。アトム−マップ−配列３８０は、第一−ｉｄ３８２、シーケンス−サイズ３８４及びシーケンス−オフセット３８６の要素を含む。第一−ｉｄ３８２は、、シーケンス中の最初のアトム１３０のアトムｉｄ１３２である。シーケンス−サイズ３８４は、アトム−オフセット−シーケンス３９０中のアトム１３０の数である。シーケンス中のアトム１３０は、第一−ｉｄ３８２から始まる連続したアトムｉｄ１３２を保持している。シーケンス−オフセット３８６は、データベース１２０ファイル中のアトム−マップ３６０セクションの開始点に対する、アトム−オフセット−シーケンス３９０の開始位置のファイル・オフセットである。アトム−マップ−配列３８０は、各シーケンスの最初のアトム１３０のアトムｉｄ１３２によって分類される。これにより、二分探索を実施してアトムｉｄ１３２をそれが包含するシーケンスにマップすることが可能となる。そこで、包含するシーケンスを走査することにより、所望のアトム１３０に対するファイル・オフセットが得られることになる。
【００５１】
図１２は、アトム・オフセット・シーケンスデータ構造の図である。アトム−オフセット−シーケンス３９０は、第一−アトム−ファイル−オフセット３９２及びデルタ−コード−ファイル−オフセット３９４を含むファイル・オフセットのデルタコード配列である。それぞれのファイル・オフセットが、アトム−マップ−データ−オフセット３７８に追加され、その結果は、アトム−マップ３６０セクションの開始点に関連付けて解釈される。一つの長いシーケンスの方が、シーケンスあたりの固定付帯部分が削減されるので、同じ数のファイル・オフセットを包含するより小さな二つのシーケンスよりも少ないスペースしか取らない。しかしながら、より長いシーケンスは、より長い探索時間を要する。そこで、アトム−マップ３６０は、一般的に、厳密に必要とされる数よりも多くのシーケンスに分割され、シーケンスの長さ及び探索時間に合理的な限界を設ける。ただし、シーケンスのサイズに対する固定された限界はない。
【００５２】
第一−アトム−ファイル−オフセット３９２は、シーケンス中の最初のアトム１３０のファイル・オフセットである。シーケンスの残りの部分は、この値から始まるデルタのシリーズである。
【００５３】
デルタ−コード−ファイル−オフセット３９４は、ファイル・オフセットのシーケンスをエンコードしたバイトのブロックで、この中で、連続したアトムｉｄ１３２に属するデータを見出すことができる。
【００５４】
エンコーダは、ファイル・オフセットのシーケンスから、シーケンスのエンコードを開始する。これらは、アトム−マップ−データ−オフセット３７８に加えるべきバイト・オフセットを表す。例えば、元のファイル・オフセット・シーケンスが｛１０００，１０５０，１１０４，１１６５，１６４５，７６０｝であったと仮定する。このアトム１３０は、ファイルの中で必ずしも順序正しく整理されていないのに注目すること。まず、このシーケンスをデルタコード化して｛１０００，５０，５４、６１，４８０、−８８５｝を得る。デフォルト−アトム−シーケンス−デルタ３７２を５０に等しいとした場合には、さらに｛１０００，０，４，１１，４３０、−９３５｝と調整されることになる。最終的に、シーケンス中のそれぞれの数字（冒頭より後のもの、冒頭は、第一−アトム−ファイル−オフセット３９２に格納される）が可変サイズの整数としてエンコードされる。このエンコードによりバイト・シーケンス｛０ｘ００  ０ｘ０４  ０ｘ０Ｂ  ０ｘ８３、０ｘ２Ｅ  ０ｘＦ８  ０ｘ５９｝が得られる。ある種の整数は、小さな値に対してはより少ないバイトを使う可変サイズ・エンコード方式により格納される。符号付き整数は、７ビット値のシーケンスとしてコード化される。これらの値は、データベースの全体的エンディアン方式のいかんにかかわらず、ビッグエンディアン・バイト順序（最上位のバイトを最初に置く）で格納される。各バイトの上位ビットは、引き続きのバイトがあるかどうかを示す特別なフラッグである。最初のバイトの７番目のビット（数値データの最上位ビット）は、符号拡張である。符号の付かない整数は、７ビット値のシーケンスとしてエンコードされる。これらの値は、データベースの全体的エンディアン方式のいかんにかかわらず、ビッグエンディアン・バイト順序（最上位のバイトを最初に置く）で格納される。各バイトの上位ビットは、引き続きのバイトがあるかどうかを示す特別なフラッグである。結果として得られた値は、ゼロ拡張される。
【００５５】
特定のタイプの情報をアトムｉｄ１３２と結び付けるために、アトム・マップ３６０が使われる。例えば、コード／データ本体情報、記号情報、カテゴリ情報及び記述情報に対して、アトム・マップ３６０を使うことができる。
【００５６】
本体−アトム−マップは、通常のアトムについては、組合わせて最終的に通常のアトム本体を形成できる、アトム参照１３６及びアトム・バイト１３４についての圧縮された情報を、また、特別目的のアトムについては、その特別目的アトムのそれぞれの特殊型に対応する情報を含めて、各アトムｉｄ１３２を、そのアトムｉｄ１３２をロードするために必要な情報のブッロクにマップする。
【００５７】
このブロックの最初のバイトは、アトム−フラッグ３９６のセットをエンコードするために使われる。アトム−フラッグ３９６の下位３ビットの値に特別目的識別子（例、「７」の値を示す３つのオン−ビット）が含まれていない場合には、そのアトム１３０は、通常アトムであり、含まれていれば、特別目的アトムである。通常アトムの本体のロードの速度を上げるために、一つのアトム１３０のアトム参照１３６及びアトム・バイト１３４の双方は、アトム・データベース１２０ファイルの中に連続的に格納される。アトム・データベース１２０のサイズを小さくし、それにより、これをロードする速度を向上できるように、通常アトム本体のアトム参照１３６及びアトム・バイト１３４は、様々なやり方で圧縮されている。
【００５８】
図１３は、エンコードされたアトム・データ構造の図である。通常−アトムに対する情報のブロックは、アトム−フラッグ３９６、アトム−数−情報３９７、コード化−アトム−参照３９８、及びコード化−ロウ−アトム・バイト３９９で構成されている。
【００５９】
アトム−フラッグ３９６は、フラッグ・バイトの様々なビットを使って、アトムの圧縮タイプを規定している。本発明の実施例は、多種類の圧縮タイプに対応している。アトム−フラッグ３９６倍の他のビットは、そのアトムをどのバッファにロードすべきかを規定している（例、読み取り専用コード・バッファ、読み取り専用データ・バッファ、読み書きデータ・バッファ）。さらに、他のビットは、アトムがロードされたときに必要となるアラインメントのログベース２を定義している（例、これらのビットに格納された値「３」は、ロードされたときにアトム１３０をｍｏｄ８バイトに整列させることになる）。
【００６０】
アトム−数−情報３９７は、コード化−アトム−参照３９８ブロックに、どのくらい多くの参照が出現することになるか、及び、どのくらい多くのロウ・バイトがコード化−ロウ−アトム・バイト３９９から抽出されることになるかについての情報を包含するバイトのブロックである。このエントリは、参照の数、及び抽出すべきロウ・バイトの数の両方を判断する。概念上のアトム・バイト１３４及びアトム参照１３６は、それぞれ、コード化−アトム−参照３９８、及びコード化−ロウ−アトム・バイト３９９としてエンコードされる。
【００６１】
図１４は、エンコードされたアトム参照データ構造の図である。各コード化−アトム−参照３９８は、そのアトム１３０から他のアトム１３０への参照を記述したバイトのブロックである。例えば、アトム１３０が、他のアトム１３０が表現する他のプロシージャを呼び出すプロシージャを表している場合、後者のアトム１３０は、コード化−アトム−参照３９８内に記述されることになろう。アトム管理プログラム１６０が、アトム１３０をロードする際に、このコード化−アトム−参照３９８の配列を使ってそれらのアトム１３０を結合する。
【００６２】
アトム−数−情報３９７は、コード化−アトム−参照３９８がエンコードしたアトム参照の数である。
【００６３】
各コード化−アトム−参照３９８には、アトム−参−タイプ４０２、ソース−オフセット−デルタ４０４、デスト−オフセット４０６及びデスト−アトムｉｄ４０８が含まれている。
【００６４】
アトム−参−タイプ４０２は、一つのアトム１３０から他のアトム１３０への参照のいろいろなタイプの参照方式を定義する。全てのプラットフォームが、全てのタイプを使うことはない。正当なアトム−参−タイプ４０２には、事前−絶対−３２、事前−相対−３２、遅延−絶対−コード−３２、遅延−相対−コード−３２、及び遅延−絶対−３２が含まれる。事前−絶対−３２は、アトム管理プログラム１６０に、参照されたアトム１３０を直ちにロードさせ、その絶対アドレスを保存させる。
【００６５】
事前−相対−３２は、事前−絶対−３２と類似しているが、参照されたアトム１３０に対する相対オフセットを保存する。相対オフセットはその参照の開始点から測られる。
【００６６】
遅延−絶対−３２は、コードを包含するアトム１３０に対する絶対アドレス（例、３２−ビット）を定義する。これは、参照されたアトム１３０が、最初の呼び出しを受けるまで実際にロードされない点で「遅延」である。アトム管理プログラム１６０は、参照をコード・スタブに向けて設定し、これが、参照されたアトム１３０を初めての呼び出し時に遅延ロードすることによって、遅延させたローディングを管理する。
【００６７】
遅延−相対−３２は、事遅延−絶対−３２と類似しているが、参照されたアトム１３０に対する相対オフセットを保存する。相対オフセットはその参照の開始点から測られる。
【００６８】
データの遅延ロード、すなわちオンデマンド・ロードは、コードの遅延ロードにより自動的に行われ、明示的には、参照されたデータアトムが実行時に実際にアクセスされるまで、これをロードしないように参照側アトムの識別子をエンコードすることにより行われる。データを参照するコードのロードを、呼び出しがあるまで遅らせることができるので、そのコードが参照するデータも同様に遅延される、すなわち、自動的にデータの遅延ロードが行われる。明示での遅延データには、一般的に、そのデータが遅延ロードされるようにマークするためプログラマの対応が必要となる（例、コンパイラ指示文）。一つの実施例においては、参照側のアトムの識別子に２を乗じ、参照側アトム識別子に１を増分して遅延データアトム識別子を生成するという特有のエンコード・アルゴリズムを使って、明示で遅延データを参照する。
【００６９】
遅延−相対−３２は、他のアトム１３０に対する絶対（例、３２−ビット）アドレスを定義する。これは、参照されたアトム１３０が、実際には明示的にロードされない点で「遅延」である。それよりむしろ、アトム管理プログラム１６０は、エンコードされたアドレス（２×参照されたアトムｉｄ）＋１を保存することによって、この参照をリンクする。このエンコードされたアドレスは常に奇数であることに注意すること。遅延コード参照はジャンプ・スタブを用いることができるが、これと違って、遅延データ参照には、アトム管理プログラム１６０が実行しているプログラムの協力が必要である。プログラムが、奇数ポインタ値をチェックし、それらが遅延データ参照であることを認知しなければならない。そこで、プログラムは、所望のアトム１３０を、アトム管理プログラム１６０の中に呼び戻して、これをロードする必要があり、一般的には、その参照に最終的なアドレスを上書きすることになろう。当然ながら、遅延してロードされたデータが、偶数のアラインメントを保持していることが判明していなければならず、このようなポインタが奇数であれば紛らわしくなる。
【００７０】
ソース−オフセット−デルタ４０４は、ある参照が出現するまでのバイトの数をアトム１３０中に特定する。この値は、先行する参照の終端からのデルタとして表示される。一番最初の参照は、あたかも先行する参照の終端が、ソース−オフセット０に存在するかのようにして、エンコードされる。参照は、常にそれらのソース−オフセットにより分類されて格納されるので、この配列の中のデルタ値は、常に非負である。例えば、あるアトム１３０がバイト・オフセット０，４，８，１２，２０に、４バイトの参照を保持していた場合、これらの参照に対するソース−オフセット−デルタのフィールドには０，０，０，４とエンコードされることになろう。
【００７１】
デスト−オフセット４０６は、参照された（デスト）アトム１３０中に参照点のバイト数のオフセットをエンコードする。
【００７２】
デスト−アトム−ｉｄ４０８は、この参照点を持つアトム１３０に対するアトム−ｉｄ１３２である。
【００７３】
コード化−ロウ−アトム・バイト３９９は、「結合できなかった」他のアトム１３０へのいっさいの参照を保持するために必要なスペースを持ち、残りのバイトをアトム圧縮タイプが規定した方法で圧縮した、アトム１３０に対するアトム・バイト１３４を表現するバイトのブロックである。このアトム・バイト中の参照を除去して、ロウ・バイトを生成することができる、というのは、コード化された参照情報部分には、ソース・オフセット（どこで参照が行われたかを識別する）、行先ｉｄ（ターゲット・アトムを識別する）及び行先オフセット（ターゲット・アトムの参照点のバイトの数を識別する）が含まれているからである。例えば、アトム・バイト１３４が、一つのＣストリング定数を表示している場合、この配列はストリング中の文字のシーケンスを、おそらくは圧縮して保持することになろう。これに換えて、アトム・バイト１３４が、４つのデータ・バイトで構成され、その後に４バイトの他のアトムへの参照、その後方にさらに８つデータ・バイトが配置されている場合、コード化−ロウ−アトム・バイト３９９は、この１２のデータ・バイトだけを、おそらく圧縮して包含することになろう。参照の４バイトは、ロード作業の間に所定位置に「つなぎ入れられ」、全体がロードされたアトム・バイト１３４は、１６バイトを取ることになる。
【００７４】
特別目的アトムは、特別目的識別子（例、その下位３ビットが値「７」に設定されている）を含むアトム−フラッグ３９６により定義される。アトム−フラッグ３９６の残りのビットは、その特別目的アトムが、ｄｌｌ−参−アトムであるか、又はｄｌｌ−アトムであるかを規定する。
【００７５】
ｄｌｌ−参−アトムは、アトム−フラッグ、ｄｌｌ−アトム−ｉｄ及びｄｌｌ−記号の３つのフィールドで構成される。ｄｌｌ−参−アトムは、外部のＤＬＬ中の記号に対応している（例えば、ｐｒｉｎｔｆ（）のようなライブラリ関数に対するアトム１３０）これらのアトム１３０は、ＤＬＬ及びそのＤＬＬ中で調べる記号のペアして表現されている。ｄｌｌ−アトム−ｉｄは、ｄｌｌ−記号を調べるべきＤＬＬを指定しているｄｌｌ−アトムのｉｄを明確化している。
【００７６】
ｄｌｌ−アトムは、アトム−フラッグ・フィールド及びｄｌｌ−パス−ネーム・フィールドで構成されている。ｄｌｌ−アトムは、ｄｌｌ−参−アトムと関連付けられ、ｄｌｌ−参−アトムがその中で記号調べるべきＤＬＬを指定するために使用される。ｄｌｌ−パス−ネームは、ｄｌｏｐｅｎ、ＬｏａｄＬｉｂｒａｒｙや同様な機能へパスするのに適切なパスネームを規定する。これは、Ｃストリング（０で終了するバイトのシーケンス）として格納される。
【００７７】
記号−アトム−マップは、アトムｉｄ１３２をテキスト形式記号にマップし、これにより関連するアトム１３０へ名前を使ったアクセスが可能となる。記号化は、ユーザに親しみやすいやり方で、アトム１３０を参照するために有用である。例えば、アトム識別子の値が５７のアトム１３０を参照する場合に、プログラマにとって、そのアトム識別子の値（例、「５７」）で参照するよりも、名前（例、「ｐｒｉｎｔｆ」で参照する方がやり易い。
【００７８】
カテゴリ−アトム−マップは、アトムｉｄ１３２から、固定された意味論のないテキスト形式カテゴリへのアトム−マップ３６０である。カテゴリ−アトム−マップは、開発者がアトムを固有にカテゴリ化できるようにする。他の使用例として、文字列のアトム１３０の識別、国際化のためのアトム１３０の識別、及び、他の多くの目的のために、カテゴリを使ってアトムを標識することができる。
【００７９】
記述−アトム−マップは、アトムｉｄ１３２から、固定された意味論のないテキスト形式記述へのアトム−マップ３６０である。アトム・ベースのシステムを開発／デバッグするに際して、開発者にとって有用なデバッグ情報を保存するために、記述−アトム−マップを使うことができる。
【００８０】
アトム参照の参照タイプを、その参照の使用状況の分析に基づいて、静的にあるいは動的に変更することができる。一般的に、アトム参照１３６のデフォルト状態は、実際のアトム・バイトを、実行時に実際にそれが必要になるまで遅らせるために「遅延型」となっている。「事前型」参照は、呼び出し側のアトム１３０がロードされた時に、それが実際に必要となるかどうかにかかわらず、参照される側のデータ／コードをロードする。多くの場合、実行時に実行される任意のアトム１３０内のランタイム・コードパスは、そのアトム１３０内の全ての命令を実行するわけではない。呼び出しを受けない又は参照されないアトム１３０をロードすることは、メモリ及び処理資源の浪費となることがある。
【００８１】
コードに対する遅延参照の処理には、参照されるアトム１３０が最初に呼び出された時に、それを遅延してロードするコード・スタブに指向させることが含まれる。データに対する遅延参照の処理には、参照されるアトムｉｄを（２×参照されるアトムｉｄ）＋１で定義される変更アトムｉｄとして格納しておくことが含まれる。
【００８２】
遅延コード参照が実行／アクセスされたならば、コード・スタブを使う間接化技法を回避するための最適化を実施することができる。この最適化には、参照側のコードが、ロードされたアトム１３０を直接参照するように「バックパッチング」することが含まれる。バックパッチングにより、スタブ使用の替わりに、メモリ中のコード・アトム１３０に直接ジャンプする。最初に実際呼び出しをした側に対して、バックパッチングを実施することができ、また、参照されるアトム１３０が呼び出された場合に、そこに直接ジャンプするといったやり方を、ロードされたどのようなアトム１３０に対しても適用できる。コード・スタブを、バックパッチングがされなかったいっさいのロード・アトムに使うためにメモリ中に残しておくことができる。本発明の実施例では、アトム・レベルでの特定のロード処置（例、遅延又は事前）を達成するため、コード・アトム１３０及びデータアトム１３０参照への標識を提供する。
【００８３】
図１５は、５つのコード・プロシージャと３つのデータ要素のシステム例図である。この例では、プロシージャＰ１は、プロシージャＰ２とＰ３を呼び出しており、また、プロシージャＰ１はデータ要素Ｄ１にもアクセスし、Ｄ１はデータ要素Ｄ２にアクセスしている。プロシージャＰ２は、プロシージャＰ４を呼び出し、データ要素Ｄ３にアクセスしている。プロシージャＰ３は、データ要素Ｄ１にアクセスし、プロシージャＰ５を呼び出している。本発明の一つの実施例に従って、それぞれのプロシージャ｛Ｐ１、Ｐ２、Ｐ３、Ｐ４、Ｐ５｝は、個別にアドレス可能な単一のアトムとして定義されている。同様に、各データ要素｛Ｄ１、Ｄ２、Ｄ３｝は、個別にアドレス可能な単一のアトムとして定義されている。実行時に、Ｐ１がロードされると直ちにＤ１がロードされ，これによりＤ２がロードされる。Ｐ２及びＰ３への参照が遅延型であれば、Ｐ２及びＰ３のためのスタブが作成されることになり、これらプロシージャ実際に呼び出されることがあれば、その時まで、それらのコードの実際のロードを延期することができる。いくつかのコード・プロシージャ（例、エラー処理プログラム）は、通常の実行パスの間は呼び出しを受けない可能性が高い。このような場合には、ロードを遅らせることにより、処理作業及びメモリが節約されることになる。コードの遅延ロード（例、Ｐ２）に基づく、データの自動的な遅延ロード（例、Ｄ３）により、プロセッサ及びメモリの両方が節約できる。
【００８４】
データ・アトム参照を、データ要素と同様な能力を備えるようにエンコードできる。明示でのデータの遅延ロードはさらに多くの節約をもたらす（例、Ｄ３のロードを、Ｐ２がロードされた後に延ばすことさえできる）。
【００８５】
参照されるアトムのアトム識別子を変更することによって、アトム管理プログラム１６０は、データ要素／アトムのロードを、それが実際に参照されるまで延期することができる。コード・アトムと同様に、いくつかのデータ・アトム（例、エラー・メッセージ）は、通常の実行パスの間は参照されない可能性が高い。データ・アトムの遅延／延期ロードも処理作業及びメモリを節約する。
【００８６】
従来型のシステム（例、Ｌｉｎｕｘ  ＤＬＬ）はコード・スタブを備えているが、これらのシステムは、立ち上げ時に、可能性がある全ての参照に対するスタブを作成する。それにひきかえ、本発明の実施例では、ロードされたアトム１３０に、実際に参照された各アトムに対するスタブだけを作成する。図１３を参照すると、Ｐ１をロードするとＰ２及びＰ３に対するスタブは作成されるが、Ｐ４に対しては作成されない。従来型のシステムでは、一般的に立ち上げ時に全てのデータ要素をロードする。例えば、ある従来型のシステムにおいては、Ｄ１、Ｄ２及びＤ３の全てが立ち上げ時にロードされることになろう。それにひきかえ、本発明の実施例では、Ｄ２がロードされる時だけにＤ３がロードされるか、又は、実際に使われた時だけにＤ３がロードされる。ロードに関して、データとコードを同様なやり方で取り扱える柔軟性により、多くの性能向上がもたらされる。このことは、コードに対し相対的に大きな割合のデータを保持するシステムについて、特にあてはまる。
【００８７】
図１６ａは、データ・アトムの例図である。このデータ・アトム１３０は、そのアトムｉｄ１３２、アトム・バイト１３４及びアトム参照１３６を例示するために、概念的に表したものである。データ・アトム１６００１（図１５中のＤ１に類似）には、人の名前（「Ｍａｒｙ  Ｓｍｉｔｈ」）への参照（ポインタ）、及びＭａｒｙの年齢（４７）を表す整数の２項目のデータ（アトム・バイト１３４）が含まれている。参照欄（アトム参照１３６）はアトム１６００２への参照である。アトム１６００２（図１５中のＤ２に類似）は文字列「Ｍａｒｙ  Ｓｍｉｔｈ」（アトム・バイト１３２）を表すデータ・アトム１３０であり、アトム１６００２は他のいっさいのアトムを参照していない。
【００８８】
図１６ｂは、コード・アトムの例図である。このコード・アトム１３０は、そのアトムｉｄ１３２、アトム・バイト１３４及びアトム参照１３６を例示するために、概念的に表したものである。コード・アトム１５０００（図１５中のＰ５に類似）は、ｐｒｉｎｔ＿ｐｅｒｓｏｎ（）プロシージャに対する実行コードを表しており、人名と年齢をプリントする。コード・アトム１６０００（図１５中のＰ３に類似）は、Ｍａｒｙの名前と年齢をプリントするために、ｐｒｉｎｔ＿ｐｅｒｓｏｎ（）プロシージャを呼び出すプロシージャを表している。コード・アトム１６０００は、データ・アトム１６００１を参照することによって、Ｍａｒｙについてのデータを参照し、コード・アトム１５０００、ｐｒｉｎｔ＿ｐｅｒｓｏｎ（）への参照を通してｐｒｉｎｔ＿ｐｅｒｓｏｎ（）機能を呼び出す。したがって、アトム１６０００として表されたアトムは、１５０００（ｐｒｉｎｔ＿ｐｅｒｓｏｎ（）プロシージャのためのコード・アトム）へのコード・アトム参照１３６と、アトム１６００１（Ｍａｒｙのデータについてのデータ・アトム）へのデータ・アトム参照との２つのアトム参照１３６を包含している。
【００８９】
本発明は、特に、その最良の実施形態に関して、提示し、記述したものであるが、当業者は、添付した特許の請求範囲に含まれる本発明の要旨から外れない範囲で、その形態や細部に多様な変更を加えることができることを理解していよう。
【００９０】
特に、いくつかの別個のセクションを持つアトム・データベース１２０の説明をしているが、当業者は、本発明の教示の範囲内で、アトム１３０の様々の用途を示すセクションを追加したり、除去することが可能なことを容易に認知するであろう。さらに、本発明の教示の範囲内で、実際のディスクのエンコード方式を変えることができる。
【００９１】
本発明の実施例は、カール（商標）ランタイムの実行に適してはいるが、本発明開示中のどの点においても、本発明の使用をカール（商標）ランタイムに限定するものでない。本発明の実施形態は、どのようなソフトウエア・プログラムにも応用できる。
【図面の簡単な説明】
【００９２】
前記及び他の本発明の対象、特質、ならびに利点は、様々な図を通して同じ参照文字が同一の部分を示している添付図面での説明により、発明を実施するための最良の形態を以下にさらに詳しく明示する。これらの図面は、必ずしも寸法合わせされておらず、本発明の原理を説明することに重点が置かれている。
【図１】図１は、その中で、本発明の実施例が実行されるコンピュータ・システムの図である。
【図２】図２は、図１のコンピュータ・システム中のコンピュータの内部構造図である。
【図３】図３は、コンピュータプログラムを作成しロードして、実行時のアウトプットを表示するための従来方式のプロセスの説明図である。
【図４】図４は、実行時のアウトプットを表示するためのコンピュータプログラムを作成しロードするためのソフトウエア・アトム化プロセスの説明図である。
【図５】図５は、アトム抽出プロセスの説明図である。
【図６】図６は、アトム・データベース及びアトムの図である。
【図７】図７は、アトム管理プログラムの図である。
【図８】図８は、アトム管理プロセスの説明図である。
【図９】図９は、アトム・データベースのデータ構造図である。
【図１０】図１０は、アトム・マップ・ヘッダデータ構造の図である。
【図１１】図１１は、アトム・マップ配列データ構造の図である。
【図１２】図１２は、アトム・オフセット・シーケンスデータ構造の図である。
【図１３】図１３は、エンコードされたアトム・データ構造の図である。
【図１４】図１４は、エンコードされたアトム参照データ構造の図である。
【図１５】図１５は、４つのコード・プロシージャと３つのデータ要素のシステムの例図である。
【図１６ａ】図１６ａは、データ・アトムの例図である。
【図１６ｂ】図１６ｂは、コード・アトムの例図である。
【図１】
2005537533.tif 000003
【図２】
2005537533.tif 000004
【図３】
2005537533.tif 000005
【図４】
2005537533.tif 000006
【図５】
2005537533.tif 000007
【図６】
2005537533.tif 000008
【図７】
2005537533.tif 000009
【図８】
2005537533.tif 000010
【図９】
2005537533.tif 000011
【図１０】
2005537533.tif 000012
【図１１】
2005537533.tif 000013
【図１２】
2005537533.tif 000014
【図１３】
2005537533.tif 000015
【図１４】
2005537533.tif 000016
【図１５】
2005537533.tif 000017
【図１６ａ】
2005537533.tif 000018
【図１６ｂ】
2005537533.tif 000019