(57)【要約】【課題】プログラムの実行を早く開始できるようにすることを目的とする。【解決手段】ＯＳ部１４４は、実行プログラム１２０の実行が開始される前に、実行プログラム１２０のプログラムコードのうちメイン関数を含む一部のプログラムコードと、実行プログラム１２０のプログラムコードのうち一部のプログラムコードを除いた残りのプログラムコードが記憶される補助記憶装置内の記憶領域を特定するための対応表と、をプロセス空間にマッピングする。プログラム実行部１４１は実行プログラム１２０を実行する。ＯＳ部１４４は、プログラム実行部１４１がプロセス空間にマッピングされていない残りのプログラムコードに含まれるプログラムコードを実行コードとして実行するときに、プロセス空間にマッピングされている対応表を用いて実行コードをプロセス空間にマッピングする。【選択図】図８
2014157434.tif 000002
【特許請求の範囲】
【請求項１】
プログラム生成部が、プログラムの実行が開始される前に仮想空間にマッピングするプログラムコードとしてメイン関数を含む一部のプログラムコードを含み、前記プログラムの実行が開始される前に仮想空間にマッピングするデータとして前記一部のプログラムコードを除いた残りのプログラムコードが記憶される補助記憶装置内の記憶領域を特定するための記憶領域情報を含み、前記プログラムの実行が開始される前に仮想空間にマッピングしないデータとして前記残りのプログラムコードを含むファイルを前記プログラムとして生成する
ことを特徴とするプログラム生成方法。
【請求項２】
開始前マッピング部が、実行プログラムの実行が開始される前に、前記実行プログラムのプログラムコードのうちメイン関数を含む一部のプログラムコードと、前記実行プログラムのプログラムコードのうち前記一部のプログラムコードを除いた残りのプログラムコードが記憶される補助記憶装置内の記憶領域を特定するための記憶領域情報と、を仮想空間にマッピングし、
プログラム実行部が、前記実行プログラムを実行し、
実行中マッピング部が、前記プログラム実行部が前記開始前マッピング部によって仮想空間にマッピングされていない前記残りのプログラムコードに含まれるプログラムコードを実行コードとして実行するときに、前記開始前マッピング部によって仮想空間にマッピングされた前記記憶領域情報を用いて前記実行コードを仮想空間にマッピングする
ことを特徴とするプログラム実行方法。
【請求項３】
プログラム生成部が、プログラムを実行するための仮想空間を構成する領域のうちプログラムコードを設定するためのテキスト領域に設定するテキストセクションデータとして前記一部のプログラムコードを含むプログラムを前記実行プログラムとして生成し、
前記開始前マッピング部は、前記プログラム生成部によって生成された前記実行プログラムの実行が開始される前に、前記実行プログラムに前記テキストセクションデータとして含まれる前記一部のプログラムコードを仮想空間の前記テキスト領域にマッピングする
ことを特徴とする請求項２記載のプログラム実行方法。
【請求項４】
前記一部のプログラムコードが、前記メイン関数とポインタ書き換え関数とを含み、
前記ポインタ書き換え関数が、前記テキスト領域の隣に位置する第一の領域を指定するための第一のポインタに、前記残りのプログラムコードを前記テキスト領域に加えた場合の前記第一の領域を指定するアドレスを設定する関数である
ことを特徴とする請求項３記載のプログラム実行方法。
【請求項５】
前記プログラム生成部は、仮想空間を構成する領域のうちプログラムに定義されたデータを設定するためのデータ領域に設定するデータセクションデータとして前記記憶領域情報を含むプログラムを前記実行プログラムとして生成し、
前記開始前マッピング部は、前記プログラム生成部によって生成された前記実行プログラムの実行が開始される前に、前記実行プログラムに前記データセクションデータとして含まれる前記記憶領域情報を仮想空間の前記データ領域にマッピングする
ことを特徴とする請求項４記載のプログラム実行方法。
【請求項６】
前記ポインタ書き換え関数が、前記テキスト領域と前記データ領域と前記第一の領域以外の第二の領域を指定するための第二のポインタに、前記実行プログラムに定義されたデータを前記データ領域に加えた場合の前記第二の領域を指定するアドレスを設定する関数である
ことを特徴とする請求項５記載のプログラム実行方法。
【請求項７】
前記プログラム実行部は、前記ポインタ書き換え関数を実行した後に前記メイン関数を実行する
ことを特徴とする請求項４から請求項６いずれかに記載のプログラム実行方法。
【請求項８】
前記補助記憶装置がネットワークに接続された装置であることを特徴とする請求項２から請求項７いずれかに記載のプログラム実行方法。
【請求項９】
前記実行中マッピング部は、前記プログラム実行部によって第一の仮想空間を用いて前記実行プログラムが実行されると共に第二の仮想空間を用いて前記実行プログラムが実行される場合、前記第一の仮想空間を用いて実行される前記実行プログラムと前記第二の仮想空間を用いて実行される前記実行プログラムとが共有する第三の仮想空間に、前記残りのプログラムコードに含まれる少なくともいずれかのプログラムコードをマッピングする
ことを特徴とする請求項２から請求項８いずれかに記載のプログラム実行方法。
【請求項１０】
前記プログラム生成部は、前記実行中マッピング部によってマッピングされた前記実行コードを前記一部のプログラムコードに含めて新たに前記実行プログラムを生成する
ことを特徴とする請求項３から請求項７いずれかに記載のプログラム実行方法。
【請求項１１】
プログラムの実行が開始される前に仮想空間にマッピングするプログラムコードとしてメイン関数を含む一部のプログラムコードを含み、前記プログラムの実行が開始される前に仮想空間にマッピングするデータとして前記一部のプログラムコードを除いた残りのプログラムコードが記憶される補助記憶装置内の記憶領域を特定するための記憶領域情報を含み、前記プログラムの実行が開始される前に仮想空間にマッピングしないデータとして前記残りのプログラムコードを含むファイルを前記プログラムとして生成するプログラム生成部
を備えることを特徴とするプログラム生成装置。
【請求項１２】
請求項１１記載のプログラム生成装置としてコンピュータを機能させるためのプログラム生成プログラム。
【請求項１３】
実行プログラムの実行が開始される前に、前記実行プログラムのプログラムコードのうちメイン関数を含む一部のプログラムコードと、前記実行プログラムのプログラムコードのうち前記一部のプログラムコードを除いた残りのプログラムコードが記憶される補助記憶装置内の記憶領域を特定するための記憶領域情報と、を仮想空間にマッピングする開始前マッピング部と、
前記実行プログラムを実行するプログラム実行部と、
前記プログラム実行部が前記開始前マッピング部によって仮想空間にマッピングされていない前記残りのプログラムコードに含まれるプログラムコードを実行コードとして実行するときに、前記開始前マッピング部によって仮想空間にマッピングされた前記記憶領域情報を用いて前記実行コードを仮想空間にマッピングする実行中マッピング部と
を備えることを特徴とするプログラム実行装置。
【請求項１４】
請求項１３記載のプログラム実行装置としてコンピュータを機能させるためのプログラム実行プログラム。
【請求項１５】
プログラム生成部が、仮想空間をコピーすると共に仮想空間に第二のプログラムのプログラムコードをマッピングするメイン関数を含むプログラムコードであるエントリポイントテキストと、前記第二のプログラムのプログラムコードが記憶される補助記憶装置内の記憶領域を特定するための記憶領域情報と、を含む第一のプログラムを生成する
ことを特徴とするプログラム生成方法。
【請求項１６】
開始前マッピング部が、第二のプログラムの実行が開始される前に、仮想空間をコピーすると共に仮想空間に前記第二のプログラムのプログラムコードをマッピングするメイン関数を含むプログラムコードであるエントリポイントテキストと、前記第二のプログラムのプログラムコードが記憶される補助記憶装置内の記憶領域を特定するための記憶領域情報と、を含む第一のプログラムを仮想空間にマッピングし、
プログラム実行部が、前記第一のプログラムの前記メイン関数を実行することにより、前記第一のプログラム用の第一の仮想空間をコピーして第二の仮想空間を生成し、
前記プログラム実行部が、前記記憶領域情報を用いて前記第二のプログラムのプログラムコードを前記第二の仮想空間にマッピングし、
前記プログラム実行部が、前記第二の仮想空間を用いて前記第二のプログラムのプログラムコードを実行する
ことを特徴とするプログラム実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば、プログラムの起動時間を短くするためのプログラム生成方法、プログラム実行方法、プログラム生成装置、プログラム生成プログラム、プログラム実行装置およびプログラム実行プログラムに関するものである。
【背景技術】
【０００２】
ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）およびＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）の急速な高性能化および大容量化に伴い、アプリケーションプログラムは、高機能になる一方で肥大化の一途を辿っている。特に、グラフィカルなユーザーインターフェース（ＧＵＩ）を有するアプリケーションプログラムは、Ｃ＋＋などの高級言語で記載され、総開発ステップ数が１００万行を超えるものも珍しくない。
【０００３】
しかし、プログラムが巨大化すると、高速化したＣＰＵおよびＤＲＡＭに比して処理遅延が依存として大きいファイルシステムを介するディスクＩ／Ｏがプログラムの起動時に多大な回数必要になる。一度立ち上がってしまえば、その操作性に問題はないが、プログラムの起動時間に対してユーザーの不満が募っていた。
【０００４】
そこで、ハードディスクに比べてＩ／Ｏ性能が格段に高いＮＡＮＤ型フラッシュメモリを使用する方法も考えられる。
しかし、フラッシュメモリはハードディスクに比べて依然として高価である。また、フラッシュメモリは、ＣＭＯＳ化（ＣＭＯＳ：Ｃｏｍｐｌｅｍｅｎｔａｒｙ  Ｍｅｔａｌ  Ｏｘｉｄｅ  Ｓｅｍｉｃｏｎｄｕｃｔｏｒ）において６４キロバイトブロックでのデータ消去を必要とし、一つのブロックに対して１０万回程度のデータの書き込みまたは消去を行うとビット情報を表す電荷膜の劣化によって使用できなくなることがある。
このため、ハードディスクの代わりにフラッシュメモリを使用した場合、アプリケーションの起動時間は大幅に短縮されるが、システムを構築するための選択として必ずしも良い選択にならない場合がある。
【０００５】
特許文献１または特許文献２には、アクセス例外が発生したときの例外発生ブロックが共有ライブラリの実行関数部分だった場合、共有ライブラリのファイルから実行関数部分を物理ブロックに読み出すとの記載がある。
【０００６】
また、特許文献１には、ネットワークを経由してＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）及びプログラムを主記憶装置に読み出すとの記載がある。
【０００７】
また、利用機会が少ないと思われる共有ライブラリを遅延してロードするという工夫が常套的に行われている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０１０−２５７１７３号公報
【特許文献２】特開平６−２５０９２４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
本発明は、例えば、起動に要する時間が短いプログラムを生成できるようにすることを目的とする。
【課題を解決するための手段】
【００１０】
本発明のプログラム生成方法は、
プログラム生成部が、プログラムの実行が開始される前に仮想空間にマッピングするプログラムコードとしてメイン関数を含む一部のプログラムコードを含み、前記プログラムの実行が開始される前に仮想空間にマッピングするデータとして前記一部のプログラムコードを除いた残りのプログラムコードが記憶される補助記憶装置内の記憶領域を特定するための記憶領域情報を含み、前記プログラムの実行が開始される前に仮想空間にマッピングしないデータとして前記残りのプログラムコードを含むファイルを前記プログラムとして生成する。
【発明の効果】
【００１１】
本発明によれば、例えば、起動に要する時間が短いプログラムを生成することができる。
【図面の簡単な説明】
【００１２】
【図１】実施の形態１における計算機システム１００のハードウェア構成の一例を示す図である。
【図２】実施の形態１における計算機システム１００のソフトウェア構成の一例を示す図である。
【図３】実施の形態１における実行プログラム１２０の構成例を示す図である。
【図４】実施の形態１における対応表１２２の一例を示す図である。
【図５】実施の形態１における実行プログラム１２０のプロセス空間１３０の一例を示す図である。
【図６】実施の形態１における実行プログラム１２０の実行時のページ割り付け方法を示す概要図である。
【図７】実施の形態１における実行プログラム１２０の実行時のページ割り付け方法を示す概要図である。
【図８】実施の形態１における計算機システム１００の機能構成図である。
【図９】実施の形態１におけるプログラム実行処理を示すフローチャートである。
【図１０】従来におけるプログラム実行時のページ割り付け方法の概要を示す図である。
【図１１】実施の形態４におけるプロセス空間を示す図である。
【図１２】実施の形態９における第一の実行プログラム１２０Ａおよび第二の実行プログラム１２０Ｂを示す図である。
【図１３】実施の形態９における第一のプロセス空間１３０Ａと第二のプロセス空間１３０Ｂとを示す図である。
【発明を実施するための形態】
【００１３】
実施の形態１．
起動に要する時間が短いプログラムを生成し、プログラムを早く起動できるようにする形態について説明する。
【００１４】
図１は、実施の形態１における計算機システム１００のハードウェア構成の一例を示す図である。
実施の形態１における計算機システム１００のハードウェア構成の一例について、図１に基づいて説明する。
【００１５】
計算機システム１００は、ＣＰＵ１０１と、ＤＲＡＭ１０３と、ディスクコントローラ１０４と、ハードディスク１０５と、ネットワークコントローラ１０６とを備える。
ＣＰＵ１０１は、バス１０８を介してＤＲＡＭ１０３、ディスクコントローラ１０４およびネットワークコントローラ１０６と接続し、これらのハードウェアを制御する。
ＣＰＵ１０１は、仮想メモリの仮想アドレスと物理メモリ（ＤＲＡＭ１０３）の物理アドレスとを相互に変換するメモリ管理ユニット（ＭＭＵ１０２）を備える。
ＤＲＡＭ１０３は、プログラムを実行するための記憶領域として使用される主記憶装置（メモリ、物理メモリ、メインメモリともいう）である。
ハードディスク１０５は、プログラムまたはプログラムで使用するデータなどを記憶するための補助記憶装置である。
ディスクコントローラ１０４は、ハードディスク１０５を制御する装置である。
ネットワークコントローラ１０６は、ネットワーク１０７に接続するための装置である。
【００１６】
ＣＰＵ１０１はＣｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔの略であり、ＤＲＡＭ１０３はＤｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙの略である。
【００１７】
但し、計算機システム１００のハードウェア構成は、図１に示した構成以外の構成であっても構わない。
【００１８】
図２は、実施の形態１における計算機システム１００のソフトウェア構成の一例を示す図である。
実施の形態１における計算機システム１００のソフトウェア構成の一例について、図２に基づいて説明する。
【００１９】
計算機システム１００は、ＯＳ１１１と、コンパイラ１１３と、リンカ１１４と、プログラムソース１１５と、スタティックライブラリソース１１６と、共有ライブラリソース１１７と、実行プログラム１２０とを備える。
ＯＳ１１１は、実行プログラム１２０などのソフトウェアに対して計算機システム１００の機能を提供するオペレーティングシステムである。
ＯＳ１１１は、実行プログラム１２０をハードディスク１０５またはネットワークから物理メモリにロードするプログラムローダー１１２を備える。
【００２０】
プログラムソース１１５は、実行プログラム１２０のソースコードである。
スタティックライブラリソース１１６は、スタティックライブラリ（例えば、標準ライブラリ）のソースコードである。
共有ライブラリソース１１７は、共有ライブラリのソースコードである。
【００２１】
コンパイラ１１３は、プログラムソース１１５と、スタティックライブラリソース１１６と、共有ライブラリソース１１７とをコンパイルするためのプログラムである。
以下、コンパイルされたプログラムソース１１５を「オブジェクトプログラム」という。
また、コンパイルされたスタティックライブラリソース１１６を「スタティックライブラリ」といい、コンパイルされた共有ライブラリソース１１７を「共有ライブラリ」という。
【００２２】
リンカ１１４は、オブジェクトプログラムと、スタティックライブラリと、共有ライブラリとを結合して実行プログラム１２０を生成するためのプログラムである。
【００２３】
実行プログラム１２０は、ＣＰＵ１０１によって実行される実行形式のプログラムである。
【００２４】
図３は、実施の形態１における実行プログラム１２０の構成例を示す図である。
実施の形態１における実行プログラム１２０の構成例について、図３に基づいて説明する。
【００２５】
実行プログラム１２０は、エントリポイントテキスト１２１と、対応表１２２と、プログラムデータ１２３と、プログラムテキスト１２４とを備える。
【００２６】
エントリポイントテキスト１２１は、実行プログラム１２０のテキスト（プログラムコード、命令文、関数、ルーチンまたは機械語ともいう）のうちｍａｉｎ（）関数を含む一部のテキストである。
エントリポイントテキスト１２１は、ｍａｉｎ（）関数の他に、スタックポインタおよびヒープポインタを書き換える書き換えロジックと、メモリアクセス例外をハンドリングするシグナルハンドラとを含む。
エントリポイントテキスト１２１は、プログラムコードを格納するための．ｔｅｘｔセクションに格納される。
従来の実行プログラムでは、実行プログラム１２０の全てのテキストが．ｔｅｘｔセクションに格納される。
【００２７】
プログラムデータ１２３は、実行プログラム１２０に定義されているデータの実体である。
例えば、プログラムデータ１２３には、エントリポイントテキスト１２１に定義されているデータと、スタティックライブラリに定義されているデータとが含まれる。
【００２８】
プログラムテキスト１２４は、実行プログラム１２０のテキストのうちエントリポイントテキスト１２１を除く残りのテキストの実体である。
例えば、プログラムテキスト１２４にはスタティックライブラリが含まれる。
【００２９】
プログラムデータ１２３およびプログラムテキスト１２４は、コメントを格納するための．ｃｏｍｍｅｎｔセクションに格納される。
【００３０】
対応表１２２は、仮想メモリ（仮想空間または仮想アドレス空間ともいう）のアドレスと、実行プログラム１２０の．ｃｏｍｍｅｎｔセクションに格納されているプログラムデータ１２３またはプログラムテキスト１２４が記憶されている記憶領域と、を対応付ける情報である。仮想メモリのアドレスを「仮想アドレス」という。
対応表１２２は、プログラムに定義されているデータを格納するための．ｄａｔａセクションに格納される。
従来の実行プログラムでは、プログラムデータ１２３が．ｄａｔａセクションに格納される。また、従来の実行プログラムは対応表１２２を備えない。
【００３１】
図４は、実施の形態１における対応表１２２の一例を示す図である。
実施の形態１における対応表１２２について、図４に基づいて説明する。
【００３２】
対応表１２２は、仮想アドレスと、実行プログラム１２０の．ｃｏｍｅｎｎｔセクションに格納されているプログラムデータ１２３またはプログラムテキスト１２４が記憶されている記憶領域とを対応付ける情報である。
対応表１２２は、「仮想アドレス」「開始オフセット」「ページ数」を対応付ける。
「仮想アドレス」は、仮想メモリの記憶領域のうちプログラムデータ１２３またはプログラムテキスト１２４がマッピングされる先頭の記憶領域を識別するアドレスを示す。
「開始オフセット」は、ハードディスク１０５の記憶領域のうち実行プログラム１２０の．ｃｏｍｍｅｎｔセクションに格納されているプログラムデータ１２３またはプログラムテキスト１２４が記憶されている先頭のページを識別するページ番号を示す。
「ページ数」は、プログラムデータ１２３またはプログラムテキスト１２４が記憶されているページの数を示す。
【００３３】
図５は、実施の形態１における実行プログラム１２０のプロセス空間１３０の一例を示す図である。
実施の形態１における実行プログラム１２０のプロセス空間１３０について、図５に基づいて説明する。
【００３４】
プロセス空間１３０は、実行プログラム１２０を実行するプロセス用に割り当てられた仮想空間である。
プロセス空間１３０は、テキスト領域１３１と、スタック領域１３２と、ヒープ領域１３３と、ｂｓｓ領域１３４と、データ領域１３５とを備える。
テキスト領域１３１は、エントリポイントテキスト１２１と、プログラムテキスト１２４とがマッピングされる記憶領域である。
スタック領域１３２は、プログラムデータ１２３のうち局所変数の変数値がマッピングされる記憶領域である。
ヒープ領域１３３は、実行プログラム１２０の実行中に動的に確保される記憶領域である。
ｂｓｓ領域１３４は、プログラムデータ１２３のうち初期値が定義されていない大域変数の変数値がマッピングされる記憶領域である。
データ領域１３５は、プログラムデータ１２３のうち初期値が定義されている大域変数の変数値がマッピングされる記憶領域である。また、データ領域１３５には対応表１２２（図４参照）がマッピングされる。
【００３５】
図６、図７は、実施の形態１における実行プログラム１２０の実行時のページ割り付け方法を示す概要図である。
実行プログラム１２０にプロセス空間１３０をマッピングし、プロセス空間１３０に対して物理ページを割り付けるページ割り付け方法の概要について、図６、図７に基づいて説明する。
【００３６】
実行プログラム１２０のプロセス空間１３０は複数の仮想ページで構成される。
プロセス空間１３０を構成する仮想ページのうち網掛けされている仮想ページは、実行プログラム１２０の一部がマッピングされ、物理メモリの記憶領域（物理ページ）が割り付けられた仮想ページを意味する。
プロセス空間１３０を構成する仮想ページのうち網掛けされていない仮想ページは、実行プログラム１２０がマッピングされておらず、物理ページが割り付けられていない仮想ページを意味する。
【００３７】
テキスト領域１３１は、３つの領域「ｍａｉｎ  ｔｅｘｔ」「Ｌｉｂｃ  ｔｅｘｔ」「ｈｏｇｅ  ｔｅｘｔ」を備える。
「ｍａｉｎ  ｔｅｘｔ」は、テキスト領域１３１にマッピングされるテキスト（プログラムコード）のうち、エントリポイントテキスト１２１がマッピングされる領域である。
「Ｌｉｂｃ  ｔｅｘｔ」は、テキスト領域１３１にマッピングされるテキストのうち、スタティックライブラリのテキスト（プログラムテキスト１２４の一部）がマッピングされる領域である。
「ｈｏｇｅ  ｔｅｘｔ」は、テキスト領域１３１にマッピングされるテキストのうち、プログラムテキスト１２４（スタティックライブラリを除く。例えば、共有ライブラリ）がマッピングされる領域である。
【００３８】
データ領域１３５は、３つの領域「ｍａｉｎ  ｄａｔａ」「Ｌｉｂｃ  ｄａｔａ」「ｈｏｇｅ  ｄａｔａ」を備える。
「ｍａｉｎ  ｄａｔａ」は、データ領域１３５にマッピングされるデータのうちエントリポイントテキスト１２１に定義されているデータがマッピングされる領域である。また、「ｍａｉｎ  ｄａｔａ」には対応表１２２もマッピングされる。
「Ｌｉｂｃ  ｄａｔａ」は、データ領域１３５にマッピングされるデータのうちスタティックライブラリに定義されているデータがマッピングされる領域である。
「ｈｏｇｅ  ｄａｔａ」は、データ領域１３５の残りのデータがマッピングされる領域である。
【００３９】
実行プログラム１２０の実行が開始される前に、プログラムローダー１１２は、エントリポイントテキスト１２１を「ｍａｉｎ  ｔｅｘｔ」を構成する仮想ページにマッピングする。そして、ＯＳ１１１の仮想記憶機能は、「ｍａｉｎ  ｔｅｘｔ」を構成する仮想ページに物理メモリの物理ページを割り付け、割り付けた物理ページにエントリポイントテキスト１２１をロードする。
また、プログラムローダー１１２は、対応表１２２を「ｍａｉｎ  ｄａｔａ」を構成する仮想ページにマッピングする。そして、ＯＳ１１１の仮想記憶機能は、「ｍａｉｎ  ｄａｔａ」を構成する仮想ページに物理メモリの物理ページを割り付け、割り付けた物理ページに対応表１２２をロードする。
プログラムローダー１１２は、実行プログラム１２０の実行が開始される前に、エントリポイントテキスト１２１および対応表１２２以外のテキストまたはデータをプロセス空間１３０にマッピングしない（図６参照）。
【００４０】
エントリポイントテキスト１２１および対応表１２２以外のテキストまたはデータは、実行プログラム１２０の実行が開始されてアクセス命令が発生したときに、メモリアクセス例外によってプロセス空間１３０にマッピングされ、物理メモリにロードされる（図７参照）。
【００４１】
図８は、実施の形態１における計算機システム１００の機能構成図である。
実施の形態１における計算機システム１００の機能構成について、図８に基づいて説明する。
【００４２】
計算機システム１００（プログラム実行装置の一例）は、プログラム実行部１４１と、コンパイル部１４２と、リンク部１４３（プログラム生成部の一例）と、ＯＳ部１４４（開始前マッピング部、実行中マッピングの一例）と、シグナルハンドラ部１４５と、デバイスドライバ部１４６と、プログラム記憶部１４９とを備える。
プログラム実行部１４１は、実行プログラム１２０を実行する。
コンパイル部１４２は、コンパイラ１１３を実行することによって、プログラムソース１１５と、スタティックライブラリソース１１６と、共有ライブラリソース１１７とをコンパイルする。
リンク部１４３は、リンカ１１４を実行することによって、コンパイルされたプログラムソース１１５（オブジェクトプログラム）と、コンパイルされたスタティックライブラリソース１１６（スタティックライブラリ）と、コンパイルされた共有ライブラリソース１１７（共有ライブラリ）とを結合して実行プログラム１２０を生成する。
ＯＳ部１４４は、ＯＳ１１１を実行する。例えば、ＯＳ部１４４は、ＯＳ１１１のプログラムローダー１１２および仮想記憶機能（ページング機構を含む）を実行する。
シグナルハンドラ部１４５は、実行プログラム１２０のｍａｉｎ（）関数に定義されるシグナルハンドラを実行する。
デバイスドライバ部１４６は、ディスクコントローラ１０４を制御するためのデバイスドライバを実行する。
プログラム記憶部１４９は、ハードディスク１０５を用いて、プログラムソース１１５、スタティックライブラリソース１１６、共有ライブラリソース１１７または実行プログラム１２０などを記憶する。
【００４３】
図９は、実施の形態１におけるプログラム実行処理を示すフローチャートである。
実施の形態１におけるプログラム実行処理について、図９に基づいて説明する。
【００４４】
ここで、コンパイル部１４２およびリンク部１４３によって、実行プログラム１２０（図３参照）および対応表１２２（図４参照）が生成されているものとする。
【００４５】
Ｓ１１０において、ＯＳ部１４４は、実行プログラム１２０を実行するためのプロセス空間１３０（図５参照）を生成する。
Ｓ１１０の後、処理はＳ１２０に進む。
【００４６】
Ｓ１２０において、ＯＳ部１４４は、以下のようにエントリポイントテキスト１２１および対応表１２２をロードする。
【００４７】
ＯＳ部１４４は、実行プログラム１２０の．ｔｅｘｔセクションに格納されたエントリポイントテキスト１２１を、プロセス空間１３０のテキスト領域１３１にある「ｍａｉｎ  ｔｅｘｔ」の仮想ページにマッピングする。
ＯＳ部１４４は、実行プログラム１２０の．ｔｅｘｔセクションに格納されたエントリポイントテキスト１２１を、プロセス空間１３０のテキスト領域１３１にある「ｍａｉｎ  ｔｅｘｔ」の仮想ページにマッピングする。
ＯＳ部１４４は、物理メモリ（ＤＲＡＭ１０３）の物理ページを「ｍａｉｎ  ｔｅｘｔ」の仮想ページに割り付ける（図６参照）。
そして、ＯＳ部１４４は、プログラム記憶部１４９（ハードディスク１０５）からエントリポイントテキスト１２１を読み出し、読み出したエントリポイントテキスト１２１を物理ページに書き込む。つまり、ＯＳ部１４４は、エントリポイントテキスト１２１を物理ページにロードする。
【００４８】
また、ＯＳ部１４４は、スタック領域１３２を指定するためのスタックポインタに「ｍａｉｎ  ｔｅｘｔ」の直後の仮想アドレスを設定する（図６の（１）参照）。
【００４９】
さらに、ＯＳ部１４４は、実行するプログラムコードを指定するためのエントリポインタに、エントリポイントテキスト１２１に含まれる書き換えロジックの仮想アドレスを設定する。書き換えロジックが実行された後、ｍａｉｎ（）関数が実行される。但し、ＯＳ部１４４がエントリポインタにｍａｉｎ（）関数の仮想アドレスを設定し、ｍａｉｎ（）関数から書き換えロジックが呼び出されても構わない。
【００５０】
同様に、ＯＳ部１４４は、実行プログラム１２０の．ｄａｔａセクションに格納された対応表１２２を、プロセス空間１３０のデータ領域１３５にある「ｍａｉｎ  ｄａｔａ」の仮想ページにマッピングする。
ＯＳ部１４４は、物理ページを「ｍａｉｎ  ｄａｔａ」の仮想ページに割り付ける（図６参照）。
そして、ＯＳ部１４４は、プログラム記憶部１４９から物理ページに対応表１２２をロードする。
また、ＯＳ部１４４は、ヒープ領域１３３を指定するためのヒープポインタに「ｍａｉｎ  ｄａｔａ」の直前の仮想アドレスを設定する（図６の（２）参照）。
Ｓ１２０の後、処理はＳ１３０に進む。
【００５１】
Ｓ１３０において、プログラム実行部１４１は、実行プログラム１２０の実行を開始する。つまり、プログラム実行部１４１は、エントリポインタに設定されている書き換えロジック（または、ｍａｉｎ（）関数から呼び出された書き換えロジック）を実行する。
【００５２】
プログラム実行部１４１は、書き換えロジックを実行することによってスタック領域１３２の正しい仮想アドレスをスタックポインタに設定すると共に、ヒープ領域１３３の正しい仮想アドレスをヒープポインタに設定する。
つまり、プログラム実行部１４１は、スタックポインタに設定されている仮想アドレスをテキスト領域１３１の直後の仮想アドレスに更新し（図６の（３）参照）、ヒープポインタに設定されている仮想アドレスをｂｓｓ領域１３４の直前の仮想アドレスに更新する（図６の（４）参照）。
これにより、既存のプログラムローダーに書き換えロジックの機能を追加しなくても、既存のプログラムローダーを計算機システム１００のプログラムローダー１１２として使用することができる。
【００５３】
プログラム実行部１４１は、書き換えロジックの実行後、書き換えロジックの次のプログラムコードを実行する。
Ｓ１３０の後、処理はＳ１４０に進む。
【００５４】
Ｓ１４０において、仮想ページがマッピングされていなプログラムデータ１２３またはプログラムテキスト１２４にアクセスするアクセス命令（ｃａｌｌ、ｊｕｍｐ、ｌｏａｄ、ｓｔｏｒｅなど）が実行される場合、ＯＳ部１４４は、アクセスされる仮想アドレスをシグナルハンドラ部１４５に通知することによって、メモリアクセス違反を発生させる。
以下、Ｓ１４０でアクセスされるプログラムデータ１２３またはプログラムテキスト１２４を「アクセス違反データ」とし、アクセス違反データの仮想アドレスを「アクセス違反アドレス」とする。
メモリアクセス違反が発生した場合（ＹＥＳ）、処理はＳ１５０に進む。
メモリアクセス違反が発生しない場合（ＮＯ）、処理はＳ１７０に進む。
【００５５】
Ｓ１５０において、シグナルハンドラ部１４５は、ｍａｉｎ（）関数に定義されているシグナルハンドラを実行することによって以下のような処理を行う。
【００５６】
シグナルハンドラ部１４５は、対応表１２２（図４参照）から、アクセス違反アドレスと同じ仮想アドレスに対応付けられた開始オフセットおよびページ数を取得する。
そして、シグナルハンドラ部１４５は、取得した開始オフセットおよびページ数によって特定されるハードディスク１０５内のページ（アクセス違反データ）を、アクセス違反アドレスによって特定される仮想ページにマッピングし、仮想ページに物理ページを割り付ける。
【００５７】
例えば、アクセス違反アドレスが「０ｘｃ００７７０００」である場合、シグナルハンドラ部１４５は、対応表１２２から開始オフセット「１１４」およびページ数「５６」を取得する。
そして、シグナルハンドラ部１４５は、ハードディスク１０５の「１１４」番目のページから「１６９」番目のページまでの「５６」個のページを仮想ページにマッピングし、仮想ページに物理ページを割り付ける。
【００５８】
以下、Ｓ１５０で取得された開始オフセットを「対象開始オフセット」とし、Ｓ１５０で取得されたページ数を「対象ページ数」とする。
Ｓ１５０の後、処理はＳ１６０に進む。
【００５９】
Ｓ１６０において、ＯＳ部１４４は、シグナルハンドラ部１４５から対象開始オフセットおよび対象ページ数を取得する。
ＯＳ部１４４は、ＯＳ１１１のページング機能を用いて、ハードディスク１０５のセクタ（記憶領域）のうち対象開始オフセットおよび対象ページ数によって特定されるページに対応するセクタを特定する。
以下、特定したセクタを「対象セクタ」とし、特定したセクタを識別する識別子を「対象セクタ番号」とする。
【００６０】
ＯＳ部１４４は、アクセス違反アドレスと対象セクタ番号とをデバイスドライバ部１４６に通知する。
【００６１】
デバイスドライバ部１４６は、ＭＭＵ１０２を用いてアクセス違反アドレスを物理アドレスに変換し、物理アドレスと対象セクタ番号とを含んだＩ／Ｏ命令をディスクコントローラ１０４に入力する。
【００６２】
ディスクコントローラ１０４は、Ｉ／Ｏ命令に従って、ハードディスク１０５の対象セクタに記憶されているアクセス違反データを、物理アドレスで識別される物理ページにロードする。
例えば、ディスクコントローラ１０４は、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）機能を用いて、アクセス違反データのロードを行う。
Ｓ１６０の後、処理はＳ１７０に進む。
【００６３】
Ｓ１７０において、プログラム実行部１４１は、実行プログラム１２０の実行を続ける。
Ｓ１７０の後、処理はＳ１７１に進む。
【００６４】
Ｓ１７１において、実行プログラム１２０の実行が終了した場合（ＹＥＳ）、プログラム実行処理は終了する。
また、実行プログラム１２０の実行が終了しない場合（ＮＯ）、処理はＳ１４０に戻る。
【００６５】
以上のように、実施の形態１における計算機システム１００は、プログラムの実行において必要なページのみを使用し、冗長なコピーを発生させない。結果として、巨大なアプリケーションになればなるほど、従来例に比較して高速に起動し、且つ、無駄なメモリ消費を抑えることができる。
【００６６】
実施の形態１において、計算機システム１００が備えるハードディスク１０５に実行プログラム１２０を記憶しておく形態について説明した。
但し、実行プログラム１２０（または実行プログラム１２０の一部）はネットワーク１０７に接続された他の記憶装置に記憶しておいても構わない。この場合、計算機システム１００はネットワーク１０７を介して他の記憶装置から実行プログラム１２０（または実行プログラム１２０の一部）を取得する。
【００６７】
図１０は、従来におけるプログラム実行時のページ割り付け方法の概要を示す図である。
従来のプログラムの実行開始時におけるページ割り付け方法の概要について、図１０に基づいて説明する。
【００６８】
従来、プログラムが実行される場合、プログラムの実行が開始される前に、プロセス空間および実行コンテキストが確保される。
また、プロセス空間のうちプログラムのテキスト用の領域「ｍａｉｎ  ｔｅｘｔ」およびスタティックライブラリのテキスト用の領域「Ｌｉｂｃ  ｔｅｘｔ」に物理ページが割り付けられ、プログラムのテキストおよびスタティックライブラリのテキストがロードされる。
また、プログラムのデータ用の領域「ｍａｉｎ  ｄａｔａ」、スタティックライブラリのデータ用の領域「Ｌｉｂｃ  ｄａｔａ」および共有ライブラリのデータ用の領域「ｈｏｇｅ  ｄａｔａ」に物理ページが割り付けられ、プログラム、スタティックライブラリおよび共有ライブラリのデータがロードされる。
さらに、プログラムのプロセス空間とは別の仮想空間に設けられる共有ライブラリのテキスト用の領域「ｈｏｇｅ  ｔｅｘｔ」に物理ページが割り付けられ、共有ライブラリのテキストがロードされる。
つまり、従来は、プログラムの実行が開始される前に、全てのプログラム、スタティックライブラリおよび共有ライブラリが物理メモリにロードされる。
【００６９】
なお、スタック領域はテキスト領域「ｍａｉｎ  ｔｅｘｔ」「Ｌｉｂｃ  ｔｅｘｔ」の直後に設けられ、ｂｓｓ領域はデータ領域「ｍａｉｎ  ｄａｔａ」「Ｌｉｂｃ  ｄａｔａ」「ｈｏｇｅ  ｄａｔａ」の直前に設けられ、ヒープ領域はｂｓｓ領域の直前に設けられる。
また、プログラムは、エントリポインタで指定されるｍａｉｎ（）関数から順に実行される。
【００７０】
プログラムの実行が開始された後、物理メモリが不足した場合、共有ライブラリがハードディスクに退避される。
また、ハードディスクに退避された共有ライブラリが使用される場合、共有ライブラリをロードするためのロード関数が実行され、共有ライブラリがハードディスクから物理メモリにロードされる。
【００７１】
次に、ハードディスクから物理メモリにデータ（例えば、共有ライブラリ）をロードするファイルシステムについて説明する。
ファイルシステムは、ハードディスクの１セクタに相当する５１２バイトのバッファメモリをＯＳの機能で管理し、このＯＳのバッファメモリを用いてハードディスクから物理メモリに共有ライブラリをロードする。
つまり、ファイルシステムは、共有ライブラリをロードするためにｒｅａｄ（）またはｗｒｉｔｅ（）などのＯＳのシステムコールが呼び出されると、ハードディスクのセクタ単位で共有ライブラリをバッファメモリにコピーすると共に、共有ライブラリをバッファメモリから物理メモリにコピーする。
【００７２】
但し、近年のファイルシステムは、ＯＳのバッファメモリを使用する代わりに、物理メモリの１ページに相当するＬｉｂｃ用のデータバッファを使用する。Ｌｉｂｃとは、Ｃ言語で用意された標準ライブラリである。
例えば、ファイルシステムは、共有ライブラリをロードするためのロード関数が実行されると、ハードディスク内のファイルうち共有ライブラリを含んだファイルをｏｐｅｎ（）関数でオープンし、共有ライブラリをｒｅａｄ（）関数でハードディスクから読み出し、読み出した共有ライブラリをＬｉｂｃ用のデータバッファにコピーする。
さらに、ファイルシステムは、共有ライブラリをＬｉｂｃ用のデータバッファからヒープ領域またはテキスト領域「ｈｏｇｅ  ｔｅｘｔ」に割り付けられた物理メモリにコピーする。
つまり、ファイルシステムは、共有ライブラリを物理メモリにロードするために、物理メモリのページ毎に、１回のディスクＩ／Ｏ（ハードディスクからの読み出し）および２回のデータコピー（ハードディスクからデータバッファへのコピー、データバッファから物理メモリへのコピー）を行う。
【００７３】
実施の形態１において、例えば、以下のようなプログラム生成方法およびプログラム実行方法について説明した。括弧内に、対応する構成の符号または名称を記す。
プログラム生成部（１４３）が、プログラム（１２０）の実行が開始される前に仮想空間にマッピングするプログラムコードとしてメイン関数（ｍａｉｎ（）関数）を含む一部のプログラムコード（１２１）を含み、前記プログラムの実行が開始される前に仮想空間にマッピングするデータとして前記一部のプログラムコードを除いた残りのプログラムコードが記憶される補助記憶装置（１０５）内の記憶領域を特定するための記憶領域情報（１２２）を含み、前記プログラムの実行が開始される前に仮想空間にマッピングしないデータとして前記残りのプログラムコード（１２４）を含むファイルを前記プログラムとして生成する。
【００７４】
開始前マッピング部（１４４）が、実行プログラムの実行が開始される前に、前記実行プログラムのプログラムコードのうちメイン関数を含む一部のプログラムコードと、前記実行プログラムのプログラムコードのうち前記一部のプログラムコードを除いた残りのプログラムコードが記憶される補助記憶装置内の記憶領域を特定するための記憶領域情報と、を仮想空間にマッピングする。
プログラム実行部（１４１）が、前記実行プログラムを実行する。
実行中マッピング部（１４４）が、前記プログラム実行部が前記開始前マッピング部によって仮想空間にマッピングされていない前記残りのプログラムコードに含まれるプログラムコードを実行コードとして実行するときに、前記開始前マッピング部によって仮想空間にマッピングされた前記記憶領域情報を用いて前記実行コードを仮想空間にマッピングする。
【００７５】
実施の形態１においてフローチャートなどに含まれている矢印は主としてデータや信号の入出力を示す。フローチャートなどに基づいて説明する処理はハードウェアを用いて実行される。
実施の形態１において「〜部」として説明するものは「〜回路」「〜装置」「〜ユニット」「〜ステップ」または「〜処理」に置き換えてもよい。すなわち、「〜部」として説明するものは、ファームウェア、ソフトウェア、ハードウェアまたはこれらの組み合わせのいずれで実装されても構わない。
【００７６】
以降の実施の形態では、実施の形態１における計算機システム１００について説明を補足する。
【００７７】
実施の形態２．
実施の形態１で説明したように、計算機システム１００は、オペレーティングシステムの仮想記憶機能をそのまま使用することによって、プログラムを実行するためのワーキングセット（メモリ領域）を管理することができる。
なお、計算機システム１００は、仮想記憶装置として利用するバックストアの所在を制限しない。例えば、計算機システム１００は、インターネットなどのネットワークに接続するサーバーを仮想記憶装置として用いても構わない。つまり、計算機システム１００は、実行プログラム１２０をハードディスク１０５の代わりにサーバーから物理メモリにロードしても構わない。
【００７８】
実施の形態２において、例えば、以下のような計算機システム１００について説明した。
計算機システム１００は、ライブラリテキストおよびデータのページデータを実行プログラムファイルのレプリカとしてネットワーク上に配置し、当該ページデータをネットワーク経由で取得する。
【００７９】
実施の形態３．
実施の形態１で説明したように、計算機システム１００は、オペレーティングシステムの仕様を問わないため、既存のオペレーティングシステムを使用することができる。
つまり、計算機システム１００のリンカ１１４は、既存のＣＰＵ１０１、ＭＭＵ１０２およびＯＳ１１１によって実現される仮想記憶機構の実装に則って実装することが可能である。
例えば、計算機システム１００は、インテル社またはＡＭＤ社のＣＰＵ１０１、マイクロソフト社またはＨＰ社のＯＳ１１１、ＨＰ社のＰＡ−ＲＩＳＣインバーティッドテーブルアーキテクチャ、ＩＢＭ社のサーバーなどを適用することが可能である。
【００８０】
実施の形態３において、例えば、以下のような計算機システム１００について説明した。
計算機システム１００は、実行プログラムを実行することによってスタックポインタとヒープポインタとを変更し、ライブラリのテキスト配置領域とデータ配置領域を確保する。これにより、計算機システム１００は、既存システムのプログラムのローダー機能の変更を必要としない。
【００８１】
実施の形態４．
実施の形態１では、計算機システム１００が実行プログラム１２０を一つのプロセス空間で実行される場合について説明した。
但し、計算機システム１００は、実行プログラム１２０を複数のプロセス空間で実行することもできる。例えば、計算機システム１００は、ウェブブラウザの実行プログラム１２０を複数のプロセス空間で実行することによって、ウェブブラウザとして機能するウィンドウを複数表示することもできる。
【００８２】
図１１は、実施の形態４におけるプロセス空間を示す図である。
計算機システム１００は、実行プログラム１２０の実行を開始するときに第一のプロセス空間を生成し、生成した第一のプロセス空間を用いて実行プログラム１２０を実行する。
さらに、計算機システム１００は、第一のプロセス空間を用いて実行プログラム１２０を実行しているときに第二のプロセスを生成し、生成した第二のプロセス空間を用いて第一のプロセス空間とは別に実行プログラム１２０を実行する。
なお、第一のプロセス空間と第二のプロセス空間とで共有することができる領域「ｈｏｇｅ  ｔｅｘｔ」は、第一のプロセス空間と第二のプロセス空間とは別の仮想領域に設けてもよい。
【００８３】
実施の形態４において、例えば、以下のような計算機システム１００について説明した。
計算機システム１００は、実行プログラムを２つ以上実行するとき、当該テキストが割り当てられている物理メモリのページを共有する。
【００８４】
実施の形態５．
共有ライブラリを利用する利点の一つとして、次のような事項が挙げられる。共有ライブラリが何らかの理由で更新されても共有ライブラリのＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）に変更がない場合、更新された共有ライブラリを利用するアプリケーションプログラムをリコンパイルする必要が無い。
実施の形態１で説明した計算機システム１００においても、ＡＰＩの変更を除いた共有ライブラリの更新に伴ってアプリケーションプログラム（実行プログラム１２０）をリコンパイルする必要は無い。但し、計算機システム１００は、更新後の共有ライブラリを利用するため、新たにリンカ１１４を実行することによって新たにアプリケーションプログラムを生成する必要がある。
【００８５】
実施の形態５において、例えば、以下のような計算機システム１００について説明した。
計算機システム１００は、共有ライブラリに変更があっても当該ライブラリのインクリメンタルな変更だけを行い、実行プログラムのリコンパイルを必要としない。
【００８６】
実施の形態６．
実施の形態１で説明した計算機システム１００は、アプリケーションプログラム（実行プログラム１２０）を仮想空間に貼り付け、その実行に必要なページのみを有効化することによって、アプリケーションプログラムの起動時間の短縮およびメモリ消費の最適化を図るものである。
計算機システム１００は既存のシステムに手を加えずに上記の効果を奏することができるが、既存のシステムに手を加えて計算機システム１００を構築しても構わない。
【００８７】
実施の形態７．
計算機システム１００は、実行プログラム１２０の実行時にメモリアクセス違反が発生した仮想アドレスを記憶し、記憶した仮想アドレスで識別される仮想領域に設定されるテキストまたはデータを．ｔｅｘｔセクションまたは．ｄａｔａセクションに格納するように実行プログラム１２０を再構成してもよい。また、計算機システム１００は、記憶した仮想アドレスに設定されるテキストまたはデータをアドレスの記憶番にソートしてもよい。
これにより、計算機システム１００は、実行プログラム１２０の実行を開始する前に、実行プログラム１２０を実行中に使用する可能性が高いテキストまたはデータを物理メモリにロードすることができる。つまり、計算機システム１００は、実行プログラム１２０の実行中に発生するメモリアクセス違反を抑制することができる。
【００８８】
実施の形態７において、例えば、以下のような計算機システム１００について説明した。
計算機システム１００は、テキスト及びデータのメモリアクセス違反が発生したアドレスを取得し、そのアドレスに該当するシンボル単位でテキスト及びデータをソートし、プログラムを再リンクする。
【００８９】
実施の形態８．
計算機システム１００は、マイクロソフト社が提供するリンカを使用し、マイクロソフト社のＰＥ実行ファイル形式を踏襲してアプリケーションプログラム（実行プログラム１２０）を生成してもよい。
計算機システム１００は、マイクロソフト社のオペレーティングシステム「Ｗｉｎｄｏｗｓ（登録商標）」上で動作するすべてのアプリケーションプログラムに対して適用することが可能である。
例えば、「Ｗｉｎｄｏｗｓ（登録商標）」上で動作するアプリケーションプログラムを開発する開発者は、マイクロソフト社の「Ｖｉｓｕａｌ  Ｓｔｕｄｉｏ（登録商標）」などの開発環境を用いて従来通りにプログラムの作成および試験を行い、製品としてしかるべき品質のアプリケーションプログラムを開発すればよい。そして、開発者は、マイクロソフト社が提供するリンカを使用し、ＰＥ実行ファイル形式のアプリケーションプログラムを作成し、作成したアプリケーションプログラムを製品として出荷する。
【００９０】
実施の形態８において、例えば、以下のような計算機システム１００について説明した。
計算機システム１００は、実行プログラム形式を解釈可能なローダーを有する。
【００９１】
実施の形態９．
実施の形態１とは異なる実行プログラム１２０の形態について説明する。
実施の形態１と異なる事項について主に説明し、説明を省略する事項については実施の形態１と同様である。
【００９２】
図１２は、実施の形態９における第一の実行プログラム１２０Ａおよび第二の実行プログラム１２０Ｂを示す図である。
図１２に示すように、リンク部１４３は、エントリポイントテキスト１２１と対応表１２２とから成る第一の実行プログラム１２０Ａと、プログラムテキスト１２４とプログラムデータ１２３とから成る第二の実行プログラム１２０Ｂとを生成する。
エントリポイントテキスト１２１のｍａｉｎ（）関数は、プロセス空間１３０をコピーするためのシステムコール（ｆｏｒｋ）と、コピーされたプロセス空間１３０にプログラムテキスト１２４およびプログラムデータ１２３をマッピングするマッピングロジックとを含んでいる。
【００９３】
図１３は、実施の形態９における第一のプロセス空間１３０Ａと第二のプロセス空間１３０Ｂとを示す図である。
図１３において、ＯＳ部１４４は、第一の実行プログラム１２０Ａ（図１２参照）を実行するための第一のプロセス空間１３０Ａを生成する。
ＯＳ部１４４は、第一の実行プログラム１２０Ａのエントリポイントテキスト１２１を「ｍａｉｎ  ｔｅｘｔ」の仮想ページにマッピングし、対応表１２２を「ｍａｉｎ  ｄａｔａ」にマッピングする。
ＯＳ部１４４は、「ｍａｉｎ  ｔｅｘｔ」の仮想ページおよび「ｍａｉｎ  ｄａｔａ」の仮想ページに物理ページを割り付け、割り付けた物理ページにエントリポイントテキスト１２１および対応表１２２をロードする。
【００９４】
プログラム実行部１４１は、第一のプロセス空間１３０Ａのエントリポイントテキスト１２１に含まれるｍａｉｎ（）関数を実行する。
これにより、第一のプロセス空間１３０Ａをコピーして第二のプロセス空間１３０Ｂが生成され、対応表１２２を用いて第二のプロセス空間１３０Ｂにプログラムテキスト１２４とプログラムデータ１２３とがマッピングされる。
【００９５】
その後、プログラム実行部１４１は、第二のプロセス空間１３０Ｂにマッピングされた第二の実行プログラム１２０Ｂを実行する。
【００９６】
実施の形態９において、エントリポイントテキスト１２１と対応表１２２とから成る最小の実行プログラムと、プログラムテキスト１２４とプログラムデータ１２３とから成る通常の実行プログラムとを生成することを説明した。
また、最小の実行プログラムのプロセス空間をコピーすることによって、通常のプログラムを実行するためのプロセス空間を生成することを説明した。
【００９７】
各実施の形態において、例えば、以下の事項を説明した。
従来のオペレーティングシステム機能により、共有ライブラリのテキストのメモリ上へのロード、利用プロセスへのデータコピーなどのサービスを回避し、スタティックライブラリを含め、全てのライブラリを当該実行プログラムの仮想アドレス空間の中に配置し、アドレスを解決して一つの実行プログラムとする。
【００９８】
リンカプログラムはｍａｉｎ（）関数に先立って、全てのテキストが格納されるテキスト位置にスタックポインタを初期化する論理とライブラリ部分のデータを追加し、ＢＳＳ格納に必要な位置にヒープポインタを更新する論理を追加する。
【００９９】
ｍａｉｎ（）関数で記述されるプログラムは最小限である。
リンカプログラムは実行プログラムの．ｔｅｘｔセクションに当該プログラムのテキストを格納し、．ｄａｔａセクションに当該プログラムのデータと、ライブラリプログラムのテキスト、データおよびＢＳＳの対応表とを格納する。
また、対応表にポイントされるライブラリのテキストとデータは．ｃｏｍｍｅｎｔセクションに格納する。
【０１００】
システムプログラムのローダーは．ｔｅｘｔセクションと．ｄａｔａセクションとを確保したプロセス空間にロードする。
システムが当該プロセスに実行コンテキストを与えると、実行プログラムはスタックポインタおよびヒープポインタの更新論理により、ライブラリテキスト、データおよびＢＳＳの格納領域を確保する。
【０１０１】
プログラムの実行により、テキスト参照、あるいはデータ参照・書き込みでメモリアクセス違反の例外が発生する。
【０１０２】
実行プログラムにはメモリアクセス違反の例外処理ハンドラが定義されている。
ハンドラは、メモリアクセス違反が発生したアドレスをもって対応表を参照し、．ｃｏｍｍｅｎｔセクションにあるテキストあるいはデータを、当該アドレスを含むページにマップする。そして、システムのページング機構がファイルシステムを介してハードディスクコントローラにＤＭＡ  Ｉ／Ｏ命令を発行する事により、実行プログラムファイルの当該ページ部分の内容がハードディスクの当該セクタから当該ページにＤＭＡでデータ書き込みされる。
【０１０３】
実行プログラムは、スタックポインタおよびヒープポインタを更新するタイミングで実行プログラムのライブラリテキストとデータの全域とをプロセス空間にマップしておいても良い。
【０１０４】
前記実行プログラムのレプリカはネットワーク上に置かれていても良い。
【０１０５】
巨大なアプリケーションの共有ライブラリはシステムの上で当該プログラムでのみ使用される物が多い。
しかしながら、同一のシステム上で複数の同一アプリケーションが複数利用されることがある。
この状況を鑑みて、実行プログラムは自身の同時複数実行がどれほどなされるか統計情報を取る。
統計情報から２以上同時に実行されることが多いと判断したときは、実行プログラムはライブラリ用テキストのページメモリを共有メモリとして確保する。
これにより、２つ目以降の実行プログラムはライブラリテキストのメモリ空間を共用することができる。
【０１０６】
ライブラリ用の共有メモリ領域を使用する実行方式は実行プログラムのプロセス数に関わらず常に適用する運用も可能である。
【０１０７】
リンカプログラムにより既存の共有ライブラリを実行プログラムに再構成する。
しかし、使用する共有ライブラリに変更が発生した場合は、リンカプログラムの再実行を行う。
【０１０８】
各実施の形態は、既存システムの変更なしに奏効することを特徴とする。
しかし、ＣＰＵおよびＤＲＡＭの高性能化および大容量化によるプログラミングパラダイムの変化を否定するものではない。システムプログラム、特に実行時にプロセス空間の確保と実行プログラムのマッピングとを行うローダーを実装することも許容する。
【０１０９】
計算機システム１００はプログラム実行によってメモリアクセス違反を発生させたアドレスを記憶し、そのアドレスが含まれるシンボルと当該シンボルにより修飾されるテキスト及びデータをメモリアクセス違反の発生順に再リンクする。これにより、更に効率の高いページメモリ使用を可能にする。
【０１１０】
各実施の形態により、巨大なアプリケーションの起動が非常に高速になる。
また、アプリケーションが自らメモリ使用を管理できるので、メモリ使用の制約が厳しい組み込みシステムにおけるアプリケーションにおいても、ワーキングセット管理をアプリケーション機能として実装することが可能である。
【０１１１】
各実施の形態において、例えば、以下のようなプログラム生成方法およびプログラム実行方法について説明した。
実行形式のプログラムを生成するリンカと実行形式のプログラムをメモリ上にロードするローダーとから構成され、プログラムがライブラリテキスト、データまたはＢＳＳを参照する際に発生するメモリアクセス例外によって、プログラムアドレス空間の当該部分のページメモリの確保および当該データのロードを行う。
リンカは、実行プログラム生成時に必要とするスタティックライブラリおよび共有ライブラリを一つのプログラムアドレス空間に配置し、共有ライブラリを含めてアドレス解決のみを行い、実行プログラムに格納されているロードアドレスと当該ライブラリのテキストおよびデータとを特定する手段である対応表をデータとして生成し、実行形式のプログラムを生成する。
【０１１２】
ライブラリテキストおよびデータのページデータを実行プログラムファイルのレプリカとしてネットワーク上に配置し、当該ページデータをネットワーク経由で取得する。
【０１１３】
実行プログラム自身がスタックポインタおよびヒープ領域ポインタを変更することによって、ライブラリのテキスト配置領域およびデータ配置領域を確保する。
これにより、既存システムのプログラムのローダー機能を変更する必要がない。
【０１１４】
同一のシステム上にて、実行プログラムが２以上実行されるときは、当該テキストが割り当てられている物理メモリページを共有する。
【０１１５】
ロードアドレスとテキストおよびデータとの対応表と、その内容を更新する手段とを有する。
共有ライブラリ部分に変更があっても当該ライブラリのインクリメンタルな変更のみで、実行プログラムの他のプログラムのリコンパイルは必要としない。
【０１１６】
システムに実行プログラム形式を解釈可能なローダーを有する。
【０１１７】
実行プログラムは、プログラムの実行によってテキスト及びデータのメモリアクセス違反を発生させたアドレス情報を取得し、そのアドレスに該当するシンボル単位でテキスト及びデータをソートし、テキスト及びデータを再リンクする。
【符号の説明】
【０１１８】
１００  計算機システム、１０１  ＣＰＵ、１０２  ＭＭＵ  １０３  ＤＲＡＭ、１０４  ディスクコントローラ、１０５  ハードディスク、１０６  ネットワークコントローラ、１０７  ネットワーク、１０８  バス、１１１  ＯＳ、１１２  プログラムローダー、１１３  コンパイラ、１１４  リンカ、１１５  プログラムソース、１１６  スタティックライブラリソース、１１７  共有ライブラリソース、１２０  実行プログラム、１２１  エントリポイントテキスト、１２２  対応表、１２３  プログラムデータ、１２４  プログラムテキスト、１３０  プロセス空間、１３１  テキスト領域、１３２  スタック領域、１３３  ヒープ領域、１３４  ｂｓｓ領域、１３５  データ領域、１４１  プログラム実行部、１４２  コンパイル部、１４３  リンク部、１４４  ＯＳ部、１４５  シグナルハンドラ部、１４６  デバイスドライバ部、１４９  プログラム記憶部。
【図１】
2014157434.tif 000003
【図２】
2014157434.tif 000004
【図３】
2014157434.tif 000005
【図４】
2014157434.tif 000006
【図５】
2014157434.tif 000007
【図６】
2014157434.tif 000008
【図７】
2014157434.tif 000009
【図８】
2014157434.tif 000010
【図９】
2014157434.tif 000011
【図１０】
2014157434.tif 000012
【図１１】
2014157434.tif 000013
【図１２】
2014157434.tif 000014
【図１３】
2014157434.tif 000015