JP2014157434A - プログラム生成方法、プログラム実行方法、プログラム生成装置、プログラム生成プログラム、プログラム実行装置およびプログラム実行プログラム - Google Patents
プログラム生成方法、プログラム実行方法、プログラム生成装置、プログラム生成プログラム、プログラム実行装置およびプログラム実行プログラム Download PDFInfo
- Publication number
- JP2014157434A JP2014157434A JP2013027249A JP2013027249A JP2014157434A JP 2014157434 A JP2014157434 A JP 2014157434A JP 2013027249 A JP2013027249 A JP 2013027249A JP 2013027249 A JP2013027249 A JP 2013027249A JP 2014157434 A JP2014157434 A JP 2014157434A
- Authority
- JP
- Japan
- Prior art keywords
- program
- execution
- virtual space
- code
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 103
- 238000013507 mapping Methods 0.000 claims description 25
- 230000008569 process Effects 0.000 abstract description 73
- 230000006870 function Effects 0.000 description 37
- 230000003068 static effect Effects 0.000 description 24
- 238000010586 diagram Methods 0.000 description 19
- 239000000872 buffer Substances 0.000 description 10
- 230000008859 change Effects 0.000 description 10
- 238000012545 processing Methods 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 3
- 238000011161 development Methods 0.000 description 2
- 238000004904 shortening Methods 0.000 description 2
- 230000004913 activation Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 230000006866 deterioration Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 229910044991 metal oxide Inorganic materials 0.000 description 1
- 150000004706 metal oxides Chemical class 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Landscapes
- Stored Programmes (AREA)
Abstract
【解決手段】OS部144は、実行プログラム120の実行が開始される前に、実行プログラム120のプログラムコードのうちメイン関数を含む一部のプログラムコードと、実行プログラム120のプログラムコードのうち一部のプログラムコードを除いた残りのプログラムコードが記憶される補助記憶装置内の記憶領域を特定するための対応表と、をプロセス空間にマッピングする。プログラム実行部141は実行プログラム120を実行する。OS部144は、プログラム実行部141がプロセス空間にマッピングされていない残りのプログラムコードに含まれるプログラムコードを実行コードとして実行するときに、プロセス空間にマッピングされている対応表を用いて実行コードをプロセス空間にマッピングする。
【選択図】図8
Description
しかし、フラッシュメモリはハードディスクに比べて依然として高価である。また、フラッシュメモリは、CMOS化(CMOS:Complementary Metal Oxide Semiconductor)において64キロバイトブロックでのデータ消去を必要とし、一つのブロックに対して10万回程度のデータの書き込みまたは消去を行うとビット情報を表す電荷膜の劣化によって使用できなくなることがある。
このため、ハードディスクの代わりにフラッシュメモリを使用した場合、アプリケーションの起動時間は大幅に短縮されるが、システムを構築するための選択として必ずしも良い選択にならない場合がある。
プログラム生成部が、プログラムの実行が開始される前に仮想空間にマッピングするプログラムコードとしてメイン関数を含む一部のプログラムコードを含み、前記プログラムの実行が開始される前に仮想空間にマッピングするデータとして前記一部のプログラムコードを除いた残りのプログラムコードが記憶される補助記憶装置内の記憶領域を特定するための記憶領域情報を含み、前記プログラムの実行が開始される前に仮想空間にマッピングしないデータとして前記残りのプログラムコードを含むファイルを前記プログラムとして生成する。
起動に要する時間が短いプログラムを生成し、プログラムを早く起動できるようにする形態について説明する。
実施の形態1における計算機システム100のハードウェア構成の一例について、図1に基づいて説明する。
CPU101は、バス108を介してDRAM103、ディスクコントローラ104およびネットワークコントローラ106と接続し、これらのハードウェアを制御する。
CPU101は、仮想メモリの仮想アドレスと物理メモリ(DRAM103)の物理アドレスとを相互に変換するメモリ管理ユニット(MMU102)を備える。
DRAM103は、プログラムを実行するための記憶領域として使用される主記憶装置(メモリ、物理メモリ、メインメモリともいう)である。
ハードディスク105は、プログラムまたはプログラムで使用するデータなどを記憶するための補助記憶装置である。
ディスクコントローラ104は、ハードディスク105を制御する装置である。
ネットワークコントローラ106は、ネットワーク107に接続するための装置である。
実施の形態1における計算機システム100のソフトウェア構成の一例について、図2に基づいて説明する。
OS111は、実行プログラム120などのソフトウェアに対して計算機システム100の機能を提供するオペレーティングシステムである。
OS111は、実行プログラム120をハードディスク105またはネットワークから物理メモリにロードするプログラムローダー112を備える。
スタティックライブラリソース116は、スタティックライブラリ(例えば、標準ライブラリ)のソースコードである。
共有ライブラリソース117は、共有ライブラリのソースコードである。
以下、コンパイルされたプログラムソース115を「オブジェクトプログラム」という。
また、コンパイルされたスタティックライブラリソース116を「スタティックライブラリ」といい、コンパイルされた共有ライブラリソース117を「共有ライブラリ」という。
実施の形態1における実行プログラム120の構成例について、図3に基づいて説明する。
エントリポイントテキスト121は、main()関数の他に、スタックポインタおよびヒープポインタを書き換える書き換えロジックと、メモリアクセス例外をハンドリングするシグナルハンドラとを含む。
エントリポイントテキスト121は、プログラムコードを格納するための.textセクションに格納される。
従来の実行プログラムでは、実行プログラム120の全てのテキストが.textセクションに格納される。
例えば、プログラムデータ123には、エントリポイントテキスト121に定義されているデータと、スタティックライブラリに定義されているデータとが含まれる。
例えば、プログラムテキスト124にはスタティックライブラリが含まれる。
対応表122は、プログラムに定義されているデータを格納するための.dataセクションに格納される。
従来の実行プログラムでは、プログラムデータ123が.dataセクションに格納される。また、従来の実行プログラムは対応表122を備えない。
実施の形態1における対応表122について、図4に基づいて説明する。
対応表122は、「仮想アドレス」「開始オフセット」「ページ数」を対応付ける。
「仮想アドレス」は、仮想メモリの記憶領域のうちプログラムデータ123またはプログラムテキスト124がマッピングされる先頭の記憶領域を識別するアドレスを示す。
「開始オフセット」は、ハードディスク105の記憶領域のうち実行プログラム120の.commentセクションに格納されているプログラムデータ123またはプログラムテキスト124が記憶されている先頭のページを識別するページ番号を示す。
「ページ数」は、プログラムデータ123またはプログラムテキスト124が記憶されているページの数を示す。
実施の形態1における実行プログラム120のプロセス空間130について、図5に基づいて説明する。
プロセス空間130は、テキスト領域131と、スタック領域132と、ヒープ領域133と、bss領域134と、データ領域135とを備える。
テキスト領域131は、エントリポイントテキスト121と、プログラムテキスト124とがマッピングされる記憶領域である。
スタック領域132は、プログラムデータ123のうち局所変数の変数値がマッピングされる記憶領域である。
ヒープ領域133は、実行プログラム120の実行中に動的に確保される記憶領域である。
bss領域134は、プログラムデータ123のうち初期値が定義されていない大域変数の変数値がマッピングされる記憶領域である。
データ領域135は、プログラムデータ123のうち初期値が定義されている大域変数の変数値がマッピングされる記憶領域である。また、データ領域135には対応表122(図4参照)がマッピングされる。
実行プログラム120にプロセス空間130をマッピングし、プロセス空間130に対して物理ページを割り付けるページ割り付け方法の概要について、図6、図7に基づいて説明する。
プロセス空間130を構成する仮想ページのうち網掛けされている仮想ページは、実行プログラム120の一部がマッピングされ、物理メモリの記憶領域(物理ページ)が割り付けられた仮想ページを意味する。
プロセス空間130を構成する仮想ページのうち網掛けされていない仮想ページは、実行プログラム120がマッピングされておらず、物理ページが割り付けられていない仮想ページを意味する。
「main text」は、テキスト領域131にマッピングされるテキスト(プログラムコード)のうち、エントリポイントテキスト121がマッピングされる領域である。
「Libc text」は、テキスト領域131にマッピングされるテキストのうち、スタティックライブラリのテキスト(プログラムテキスト124の一部)がマッピングされる領域である。
「hoge text」は、テキスト領域131にマッピングされるテキストのうち、プログラムテキスト124(スタティックライブラリを除く。例えば、共有ライブラリ)がマッピングされる領域である。
「main data」は、データ領域135にマッピングされるデータのうちエントリポイントテキスト121に定義されているデータがマッピングされる領域である。また、「main data」には対応表122もマッピングされる。
「Libc data」は、データ領域135にマッピングされるデータのうちスタティックライブラリに定義されているデータがマッピングされる領域である。
「hoge data」は、データ領域135の残りのデータがマッピングされる領域である。
また、プログラムローダー112は、対応表122を「main data」を構成する仮想ページにマッピングする。そして、OS111の仮想記憶機能は、「main data」を構成する仮想ページに物理メモリの物理ページを割り付け、割り付けた物理ページに対応表122をロードする。
プログラムローダー112は、実行プログラム120の実行が開始される前に、エントリポイントテキスト121および対応表122以外のテキストまたはデータをプロセス空間130にマッピングしない(図6参照)。
実施の形態1における計算機システム100の機能構成について、図8に基づいて説明する。
プログラム実行部141は、実行プログラム120を実行する。
コンパイル部142は、コンパイラ113を実行することによって、プログラムソース115と、スタティックライブラリソース116と、共有ライブラリソース117とをコンパイルする。
リンク部143は、リンカ114を実行することによって、コンパイルされたプログラムソース115(オブジェクトプログラム)と、コンパイルされたスタティックライブラリソース116(スタティックライブラリ)と、コンパイルされた共有ライブラリソース117(共有ライブラリ)とを結合して実行プログラム120を生成する。
OS部144は、OS111を実行する。例えば、OS部144は、OS111のプログラムローダー112および仮想記憶機能(ページング機構を含む)を実行する。
シグナルハンドラ部145は、実行プログラム120のmain()関数に定義されるシグナルハンドラを実行する。
デバイスドライバ部146は、ディスクコントローラ104を制御するためのデバイスドライバを実行する。
プログラム記憶部149は、ハードディスク105を用いて、プログラムソース115、スタティックライブラリソース116、共有ライブラリソース117または実行プログラム120などを記憶する。
実施の形態1におけるプログラム実行処理について、図9に基づいて説明する。
S110の後、処理はS120に進む。
OS部144は、実行プログラム120の.textセクションに格納されたエントリポイントテキスト121を、プロセス空間130のテキスト領域131にある「main text」の仮想ページにマッピングする。
OS部144は、物理メモリ(DRAM103)の物理ページを「main text」の仮想ページに割り付ける(図6参照)。
そして、OS部144は、プログラム記憶部149(ハードディスク105)からエントリポイントテキスト121を読み出し、読み出したエントリポイントテキスト121を物理ページに書き込む。つまり、OS部144は、エントリポイントテキスト121を物理ページにロードする。
OS部144は、物理ページを「main data」の仮想ページに割り付ける(図6参照)。
そして、OS部144は、プログラム記憶部149から物理ページに対応表122をロードする。
また、OS部144は、ヒープ領域133を指定するためのヒープポインタに「main data」の直前の仮想アドレスを設定する(図6の(2)参照)。
S120の後、処理はS130に進む。
つまり、プログラム実行部141は、スタックポインタに設定されている仮想アドレスをテキスト領域131の直後の仮想アドレスに更新し(図6の(3)参照)、ヒープポインタに設定されている仮想アドレスをbss領域134の直前の仮想アドレスに更新する(図6の(4)参照)。
これにより、既存のプログラムローダーに書き換えロジックの機能を追加しなくても、既存のプログラムローダーを計算機システム100のプログラムローダー112として使用することができる。
S130の後、処理はS140に進む。
以下、S140でアクセスされるプログラムデータ123またはプログラムテキスト124を「アクセス違反データ」とし、アクセス違反データの仮想アドレスを「アクセス違反アドレス」とする。
メモリアクセス違反が発生した場合(YES)、処理はS150に進む。
メモリアクセス違反が発生しない場合(NO)、処理はS170に進む。
そして、シグナルハンドラ部145は、取得した開始オフセットおよびページ数によって特定されるハードディスク105内のページ(アクセス違反データ)を、アクセス違反アドレスによって特定される仮想ページにマッピングし、仮想ページに物理ページを割り付ける。
そして、シグナルハンドラ部145は、ハードディスク105の「114」番目のページから「169」番目のページまでの「56」個のページを仮想ページにマッピングし、仮想ページに物理ページを割り付ける。
S150の後、処理はS160に進む。
OS部144は、OS111のページング機能を用いて、ハードディスク105のセクタ(記憶領域)のうち対象開始オフセットおよび対象ページ数によって特定されるページに対応するセクタを特定する。
以下、特定したセクタを「対象セクタ」とし、特定したセクタを識別する識別子を「対象セクタ番号」とする。
例えば、ディスクコントローラ104は、DMA(Direct Memory Access)機能を用いて、アクセス違反データのロードを行う。
S160の後、処理はS170に進む。
S170の後、処理はS171に進む。
また、実行プログラム120の実行が終了しない場合(NO)、処理はS140に戻る。
但し、実行プログラム120(または実行プログラム120の一部)はネットワーク107に接続された他の記憶装置に記憶しておいても構わない。この場合、計算機システム100はネットワーク107を介して他の記憶装置から実行プログラム120(または実行プログラム120の一部)を取得する。
従来のプログラムの実行開始時におけるページ割り付け方法の概要について、図10に基づいて説明する。
また、プロセス空間のうちプログラムのテキスト用の領域「main text」およびスタティックライブラリのテキスト用の領域「Libc text」に物理ページが割り付けられ、プログラムのテキストおよびスタティックライブラリのテキストがロードされる。
また、プログラムのデータ用の領域「main data」、スタティックライブラリのデータ用の領域「Libc data」および共有ライブラリのデータ用の領域「hoge data」に物理ページが割り付けられ、プログラム、スタティックライブラリおよび共有ライブラリのデータがロードされる。
さらに、プログラムのプロセス空間とは別の仮想空間に設けられる共有ライブラリのテキスト用の領域「hoge text」に物理ページが割り付けられ、共有ライブラリのテキストがロードされる。
つまり、従来は、プログラムの実行が開始される前に、全てのプログラム、スタティックライブラリおよび共有ライブラリが物理メモリにロードされる。
また、プログラムは、エントリポインタで指定されるmain()関数から順に実行される。
また、ハードディスクに退避された共有ライブラリが使用される場合、共有ライブラリをロードするためのロード関数が実行され、共有ライブラリがハードディスクから物理メモリにロードされる。
ファイルシステムは、ハードディスクの1セクタに相当する512バイトのバッファメモリをOSの機能で管理し、このOSのバッファメモリを用いてハードディスクから物理メモリに共有ライブラリをロードする。
つまり、ファイルシステムは、共有ライブラリをロードするためにread()またはwrite()などのOSのシステムコールが呼び出されると、ハードディスクのセクタ単位で共有ライブラリをバッファメモリにコピーすると共に、共有ライブラリをバッファメモリから物理メモリにコピーする。
例えば、ファイルシステムは、共有ライブラリをロードするためのロード関数が実行されると、ハードディスク内のファイルうち共有ライブラリを含んだファイルをopen()関数でオープンし、共有ライブラリをread()関数でハードディスクから読み出し、読み出した共有ライブラリをLibc用のデータバッファにコピーする。
さらに、ファイルシステムは、共有ライブラリをLibc用のデータバッファからヒープ領域またはテキスト領域「hoge text」に割り付けられた物理メモリにコピーする。
つまり、ファイルシステムは、共有ライブラリを物理メモリにロードするために、物理メモリのページ毎に、1回のディスクI/O(ハードディスクからの読み出し)および2回のデータコピー(ハードディスクからデータバッファへのコピー、データバッファから物理メモリへのコピー)を行う。
プログラム生成部(143)が、プログラム(120)の実行が開始される前に仮想空間にマッピングするプログラムコードとしてメイン関数(main()関数)を含む一部のプログラムコード(121)を含み、前記プログラムの実行が開始される前に仮想空間にマッピングするデータとして前記一部のプログラムコードを除いた残りのプログラムコードが記憶される補助記憶装置(105)内の記憶領域を特定するための記憶領域情報(122)を含み、前記プログラムの実行が開始される前に仮想空間にマッピングしないデータとして前記残りのプログラムコード(124)を含むファイルを前記プログラムとして生成する。
プログラム実行部(141)が、前記実行プログラムを実行する。
実行中マッピング部(144)が、前記プログラム実行部が前記開始前マッピング部によって仮想空間にマッピングされていない前記残りのプログラムコードに含まれるプログラムコードを実行コードとして実行するときに、前記開始前マッピング部によって仮想空間にマッピングされた前記記憶領域情報を用いて前記実行コードを仮想空間にマッピングする。
実施の形態1において「〜部」として説明するものは「〜回路」「〜装置」「〜ユニット」「〜ステップ」または「〜処理」に置き換えてもよい。すなわち、「〜部」として説明するものは、ファームウェア、ソフトウェア、ハードウェアまたはこれらの組み合わせのいずれで実装されても構わない。
実施の形態1で説明したように、計算機システム100は、オペレーティングシステムの仮想記憶機能をそのまま使用することによって、プログラムを実行するためのワーキングセット(メモリ領域)を管理することができる。
なお、計算機システム100は、仮想記憶装置として利用するバックストアの所在を制限しない。例えば、計算機システム100は、インターネットなどのネットワークに接続するサーバーを仮想記憶装置として用いても構わない。つまり、計算機システム100は、実行プログラム120をハードディスク105の代わりにサーバーから物理メモリにロードしても構わない。
計算機システム100は、ライブラリテキストおよびデータのページデータを実行プログラムファイルのレプリカとしてネットワーク上に配置し、当該ページデータをネットワーク経由で取得する。
実施の形態1で説明したように、計算機システム100は、オペレーティングシステムの仕様を問わないため、既存のオペレーティングシステムを使用することができる。
つまり、計算機システム100のリンカ114は、既存のCPU101、MMU102およびOS111によって実現される仮想記憶機構の実装に則って実装することが可能である。
例えば、計算機システム100は、インテル社またはAMD社のCPU101、マイクロソフト社またはHP社のOS111、HP社のPA−RISCインバーティッドテーブルアーキテクチャ、IBM社のサーバーなどを適用することが可能である。
計算機システム100は、実行プログラムを実行することによってスタックポインタとヒープポインタとを変更し、ライブラリのテキスト配置領域とデータ配置領域を確保する。これにより、計算機システム100は、既存システムのプログラムのローダー機能の変更を必要としない。
実施の形態1では、計算機システム100が実行プログラム120を一つのプロセス空間で実行される場合について説明した。
但し、計算機システム100は、実行プログラム120を複数のプロセス空間で実行することもできる。例えば、計算機システム100は、ウェブブラウザの実行プログラム120を複数のプロセス空間で実行することによって、ウェブブラウザとして機能するウィンドウを複数表示することもできる。
計算機システム100は、実行プログラム120の実行を開始するときに第一のプロセス空間を生成し、生成した第一のプロセス空間を用いて実行プログラム120を実行する。
さらに、計算機システム100は、第一のプロセス空間を用いて実行プログラム120を実行しているときに第二のプロセスを生成し、生成した第二のプロセス空間を用いて第一のプロセス空間とは別に実行プログラム120を実行する。
なお、第一のプロセス空間と第二のプロセス空間とで共有することができる領域「hoge text」は、第一のプロセス空間と第二のプロセス空間とは別の仮想領域に設けてもよい。
計算機システム100は、実行プログラムを2つ以上実行するとき、当該テキストが割り当てられている物理メモリのページを共有する。
共有ライブラリを利用する利点の一つとして、次のような事項が挙げられる。共有ライブラリが何らかの理由で更新されても共有ライブラリのAPI(Application Program Interface)に変更がない場合、更新された共有ライブラリを利用するアプリケーションプログラムをリコンパイルする必要が無い。
実施の形態1で説明した計算機システム100においても、APIの変更を除いた共有ライブラリの更新に伴ってアプリケーションプログラム(実行プログラム120)をリコンパイルする必要は無い。但し、計算機システム100は、更新後の共有ライブラリを利用するため、新たにリンカ114を実行することによって新たにアプリケーションプログラムを生成する必要がある。
計算機システム100は、共有ライブラリに変更があっても当該ライブラリのインクリメンタルな変更だけを行い、実行プログラムのリコンパイルを必要としない。
実施の形態1で説明した計算機システム100は、アプリケーションプログラム(実行プログラム120)を仮想空間に貼り付け、その実行に必要なページのみを有効化することによって、アプリケーションプログラムの起動時間の短縮およびメモリ消費の最適化を図るものである。
計算機システム100は既存のシステムに手を加えずに上記の効果を奏することができるが、既存のシステムに手を加えて計算機システム100を構築しても構わない。
計算機システム100は、実行プログラム120の実行時にメモリアクセス違反が発生した仮想アドレスを記憶し、記憶した仮想アドレスで識別される仮想領域に設定されるテキストまたはデータを.textセクションまたは.dataセクションに格納するように実行プログラム120を再構成してもよい。また、計算機システム100は、記憶した仮想アドレスに設定されるテキストまたはデータをアドレスの記憶番にソートしてもよい。
これにより、計算機システム100は、実行プログラム120の実行を開始する前に、実行プログラム120を実行中に使用する可能性が高いテキストまたはデータを物理メモリにロードすることができる。つまり、計算機システム100は、実行プログラム120の実行中に発生するメモリアクセス違反を抑制することができる。
計算機システム100は、テキスト及びデータのメモリアクセス違反が発生したアドレスを取得し、そのアドレスに該当するシンボル単位でテキスト及びデータをソートし、プログラムを再リンクする。
計算機システム100は、マイクロソフト社が提供するリンカを使用し、マイクロソフト社のPE実行ファイル形式を踏襲してアプリケーションプログラム(実行プログラム120)を生成してもよい。
計算機システム100は、マイクロソフト社のオペレーティングシステム「Windows(登録商標)」上で動作するすべてのアプリケーションプログラムに対して適用することが可能である。
例えば、「Windows(登録商標)」上で動作するアプリケーションプログラムを開発する開発者は、マイクロソフト社の「Visual Studio(登録商標)」などの開発環境を用いて従来通りにプログラムの作成および試験を行い、製品としてしかるべき品質のアプリケーションプログラムを開発すればよい。そして、開発者は、マイクロソフト社が提供するリンカを使用し、PE実行ファイル形式のアプリケーションプログラムを作成し、作成したアプリケーションプログラムを製品として出荷する。
計算機システム100は、実行プログラム形式を解釈可能なローダーを有する。
実施の形態1とは異なる実行プログラム120の形態について説明する。
実施の形態1と異なる事項について主に説明し、説明を省略する事項については実施の形態1と同様である。
図12に示すように、リンク部143は、エントリポイントテキスト121と対応表122とから成る第一の実行プログラム120Aと、プログラムテキスト124とプログラムデータ123とから成る第二の実行プログラム120Bとを生成する。
エントリポイントテキスト121のmain()関数は、プロセス空間130をコピーするためのシステムコール(fork)と、コピーされたプロセス空間130にプログラムテキスト124およびプログラムデータ123をマッピングするマッピングロジックとを含んでいる。
図13において、OS部144は、第一の実行プログラム120A(図12参照)を実行するための第一のプロセス空間130Aを生成する。
OS部144は、第一の実行プログラム120Aのエントリポイントテキスト121を「main text」の仮想ページにマッピングし、対応表122を「main data」にマッピングする。
OS部144は、「main text」の仮想ページおよび「main data」の仮想ページに物理ページを割り付け、割り付けた物理ページにエントリポイントテキスト121および対応表122をロードする。
これにより、第一のプロセス空間130Aをコピーして第二のプロセス空間130Bが生成され、対応表122を用いて第二のプロセス空間130Bにプログラムテキスト124とプログラムデータ123とがマッピングされる。
また、最小の実行プログラムのプロセス空間をコピーすることによって、通常のプログラムを実行するためのプロセス空間を生成することを説明した。
従来のオペレーティングシステム機能により、共有ライブラリのテキストのメモリ上へのロード、利用プロセスへのデータコピーなどのサービスを回避し、スタティックライブラリを含め、全てのライブラリを当該実行プログラムの仮想アドレス空間の中に配置し、アドレスを解決して一つの実行プログラムとする。
リンカプログラムは実行プログラムの.textセクションに当該プログラムのテキストを格納し、.dataセクションに当該プログラムのデータと、ライブラリプログラムのテキスト、データおよびBSSの対応表とを格納する。
また、対応表にポイントされるライブラリのテキストとデータは.commentセクションに格納する。
システムが当該プロセスに実行コンテキストを与えると、実行プログラムはスタックポインタおよびヒープポインタの更新論理により、ライブラリテキスト、データおよびBSSの格納領域を確保する。
ハンドラは、メモリアクセス違反が発生したアドレスをもって対応表を参照し、.commentセクションにあるテキストあるいはデータを、当該アドレスを含むページにマップする。そして、システムのページング機構がファイルシステムを介してハードディスクコントローラにDMA I/O命令を発行する事により、実行プログラムファイルの当該ページ部分の内容がハードディスクの当該セクタから当該ページにDMAでデータ書き込みされる。
しかしながら、同一のシステム上で複数の同一アプリケーションが複数利用されることがある。
この状況を鑑みて、実行プログラムは自身の同時複数実行がどれほどなされるか統計情報を取る。
統計情報から2以上同時に実行されることが多いと判断したときは、実行プログラムはライブラリ用テキストのページメモリを共有メモリとして確保する。
これにより、2つ目以降の実行プログラムはライブラリテキストのメモリ空間を共用することができる。
しかし、使用する共有ライブラリに変更が発生した場合は、リンカプログラムの再実行を行う。
しかし、CPUおよびDRAMの高性能化および大容量化によるプログラミングパラダイムの変化を否定するものではない。システムプログラム、特に実行時にプロセス空間の確保と実行プログラムのマッピングとを行うローダーを実装することも許容する。
また、アプリケーションが自らメモリ使用を管理できるので、メモリ使用の制約が厳しい組み込みシステムにおけるアプリケーションにおいても、ワーキングセット管理をアプリケーション機能として実装することが可能である。
実行形式のプログラムを生成するリンカと実行形式のプログラムをメモリ上にロードするローダーとから構成され、プログラムがライブラリテキスト、データまたはBSSを参照する際に発生するメモリアクセス例外によって、プログラムアドレス空間の当該部分のページメモリの確保および当該データのロードを行う。
リンカは、実行プログラム生成時に必要とするスタティックライブラリおよび共有ライブラリを一つのプログラムアドレス空間に配置し、共有ライブラリを含めてアドレス解決のみを行い、実行プログラムに格納されているロードアドレスと当該ライブラリのテキストおよびデータとを特定する手段である対応表をデータとして生成し、実行形式のプログラムを生成する。
これにより、既存システムのプログラムのローダー機能を変更する必要がない。
共有ライブラリ部分に変更があっても当該ライブラリのインクリメンタルな変更のみで、実行プログラムの他のプログラムのリコンパイルは必要としない。
Claims (16)
- プログラム生成部が、プログラムの実行が開始される前に仮想空間にマッピングするプログラムコードとしてメイン関数を含む一部のプログラムコードを含み、前記プログラムの実行が開始される前に仮想空間にマッピングするデータとして前記一部のプログラムコードを除いた残りのプログラムコードが記憶される補助記憶装置内の記憶領域を特定するための記憶領域情報を含み、前記プログラムの実行が開始される前に仮想空間にマッピングしないデータとして前記残りのプログラムコードを含むファイルを前記プログラムとして生成する
ことを特徴とするプログラム生成方法。 - 開始前マッピング部が、実行プログラムの実行が開始される前に、前記実行プログラムのプログラムコードのうちメイン関数を含む一部のプログラムコードと、前記実行プログラムのプログラムコードのうち前記一部のプログラムコードを除いた残りのプログラムコードが記憶される補助記憶装置内の記憶領域を特定するための記憶領域情報と、を仮想空間にマッピングし、
プログラム実行部が、前記実行プログラムを実行し、
実行中マッピング部が、前記プログラム実行部が前記開始前マッピング部によって仮想空間にマッピングされていない前記残りのプログラムコードに含まれるプログラムコードを実行コードとして実行するときに、前記開始前マッピング部によって仮想空間にマッピングされた前記記憶領域情報を用いて前記実行コードを仮想空間にマッピングする
ことを特徴とするプログラム実行方法。 - プログラム生成部が、プログラムを実行するための仮想空間を構成する領域のうちプログラムコードを設定するためのテキスト領域に設定するテキストセクションデータとして前記一部のプログラムコードを含むプログラムを前記実行プログラムとして生成し、
前記開始前マッピング部は、前記プログラム生成部によって生成された前記実行プログラムの実行が開始される前に、前記実行プログラムに前記テキストセクションデータとして含まれる前記一部のプログラムコードを仮想空間の前記テキスト領域にマッピングする
ことを特徴とする請求項2記載のプログラム実行方法。 - 前記一部のプログラムコードが、前記メイン関数とポインタ書き換え関数とを含み、
前記ポインタ書き換え関数が、前記テキスト領域の隣に位置する第一の領域を指定するための第一のポインタに、前記残りのプログラムコードを前記テキスト領域に加えた場合の前記第一の領域を指定するアドレスを設定する関数である
ことを特徴とする請求項3記載のプログラム実行方法。 - 前記プログラム生成部は、仮想空間を構成する領域のうちプログラムに定義されたデータを設定するためのデータ領域に設定するデータセクションデータとして前記記憶領域情報を含むプログラムを前記実行プログラムとして生成し、
前記開始前マッピング部は、前記プログラム生成部によって生成された前記実行プログラムの実行が開始される前に、前記実行プログラムに前記データセクションデータとして含まれる前記記憶領域情報を仮想空間の前記データ領域にマッピングする
ことを特徴とする請求項4記載のプログラム実行方法。 - 前記ポインタ書き換え関数が、前記テキスト領域と前記データ領域と前記第一の領域以外の第二の領域を指定するための第二のポインタに、前記実行プログラムに定義されたデータを前記データ領域に加えた場合の前記第二の領域を指定するアドレスを設定する関数である
ことを特徴とする請求項5記載のプログラム実行方法。 - 前記プログラム実行部は、前記ポインタ書き換え関数を実行した後に前記メイン関数を実行する
ことを特徴とする請求項4から請求項6いずれかに記載のプログラム実行方法。 - 前記補助記憶装置がネットワークに接続された装置であることを特徴とする請求項2から請求項7いずれかに記載のプログラム実行方法。
- 前記実行中マッピング部は、前記プログラム実行部によって第一の仮想空間を用いて前記実行プログラムが実行されると共に第二の仮想空間を用いて前記実行プログラムが実行される場合、前記第一の仮想空間を用いて実行される前記実行プログラムと前記第二の仮想空間を用いて実行される前記実行プログラムとが共有する第三の仮想空間に、前記残りのプログラムコードに含まれる少なくともいずれかのプログラムコードをマッピングする
ことを特徴とする請求項2から請求項8いずれかに記載のプログラム実行方法。 - 前記プログラム生成部は、前記実行中マッピング部によってマッピングされた前記実行コードを前記一部のプログラムコードに含めて新たに前記実行プログラムを生成する
ことを特徴とする請求項3から請求項7いずれかに記載のプログラム実行方法。 - プログラムの実行が開始される前に仮想空間にマッピングするプログラムコードとしてメイン関数を含む一部のプログラムコードを含み、前記プログラムの実行が開始される前に仮想空間にマッピングするデータとして前記一部のプログラムコードを除いた残りのプログラムコードが記憶される補助記憶装置内の記憶領域を特定するための記憶領域情報を含み、前記プログラムの実行が開始される前に仮想空間にマッピングしないデータとして前記残りのプログラムコードを含むファイルを前記プログラムとして生成するプログラム生成部
を備えることを特徴とするプログラム生成装置。 - 請求項11記載のプログラム生成装置としてコンピュータを機能させるためのプログラム生成プログラム。
- 実行プログラムの実行が開始される前に、前記実行プログラムのプログラムコードのうちメイン関数を含む一部のプログラムコードと、前記実行プログラムのプログラムコードのうち前記一部のプログラムコードを除いた残りのプログラムコードが記憶される補助記憶装置内の記憶領域を特定するための記憶領域情報と、を仮想空間にマッピングする開始前マッピング部と、
前記実行プログラムを実行するプログラム実行部と、
前記プログラム実行部が前記開始前マッピング部によって仮想空間にマッピングされていない前記残りのプログラムコードに含まれるプログラムコードを実行コードとして実行するときに、前記開始前マッピング部によって仮想空間にマッピングされた前記記憶領域情報を用いて前記実行コードを仮想空間にマッピングする実行中マッピング部と
を備えることを特徴とするプログラム実行装置。 - 請求項13記載のプログラム実行装置としてコンピュータを機能させるためのプログラム実行プログラム。
- プログラム生成部が、仮想空間をコピーすると共に仮想空間に第二のプログラムのプログラムコードをマッピングするメイン関数を含むプログラムコードであるエントリポイントテキストと、前記第二のプログラムのプログラムコードが記憶される補助記憶装置内の記憶領域を特定するための記憶領域情報と、を含む第一のプログラムを生成する
ことを特徴とするプログラム生成方法。 - 開始前マッピング部が、第二のプログラムの実行が開始される前に、仮想空間をコピーすると共に仮想空間に前記第二のプログラムのプログラムコードをマッピングするメイン関数を含むプログラムコードであるエントリポイントテキストと、前記第二のプログラムのプログラムコードが記憶される補助記憶装置内の記憶領域を特定するための記憶領域情報と、を含む第一のプログラムを仮想空間にマッピングし、
プログラム実行部が、前記第一のプログラムの前記メイン関数を実行することにより、前記第一のプログラム用の第一の仮想空間をコピーして第二の仮想空間を生成し、
前記プログラム実行部が、前記記憶領域情報を用いて前記第二のプログラムのプログラムコードを前記第二の仮想空間にマッピングし、
前記プログラム実行部が、前記第二の仮想空間を用いて前記第二のプログラムのプログラムコードを実行する
ことを特徴とするプログラム実行方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013027249A JP6103972B2 (ja) | 2013-02-15 | 2013-02-15 | プログラム生成方法、プログラム実行方法、プログラム実行装置およびプログラム実行プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013027249A JP6103972B2 (ja) | 2013-02-15 | 2013-02-15 | プログラム生成方法、プログラム実行方法、プログラム実行装置およびプログラム実行プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2014157434A true JP2014157434A (ja) | 2014-08-28 |
JP6103972B2 JP6103972B2 (ja) | 2017-03-29 |
Family
ID=51578284
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2013027249A Expired - Fee Related JP6103972B2 (ja) | 2013-02-15 | 2013-02-15 | プログラム生成方法、プログラム実行方法、プログラム実行装置およびプログラム実行プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP6103972B2 (ja) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS63626A (ja) * | 1986-06-19 | 1988-01-05 | Casio Comput Co Ltd | プログラム管理装置 |
JP2002222088A (ja) * | 2001-01-25 | 2002-08-09 | Nec Corp | コンパイルシステム、コンパイル方法およびプログラム |
-
2013
- 2013-02-15 JP JP2013027249A patent/JP6103972B2/ja not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS63626A (ja) * | 1986-06-19 | 1988-01-05 | Casio Comput Co Ltd | プログラム管理装置 |
JP2002222088A (ja) * | 2001-01-25 | 2002-08-09 | Nec Corp | コンパイルシステム、コンパイル方法およびプログラム |
Also Published As
Publication number | Publication date |
---|---|
JP6103972B2 (ja) | 2017-03-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11188638B2 (en) | Fine-grained memory address space layout randomization | |
US10157268B2 (en) | Return flow guard using control stack identified by processor register | |
JP5255348B2 (ja) | クラッシュダンプ用のメモリアロケーション | |
US8281293B2 (en) | Copy-on-write optimization of immutable objects for objects oriented languages | |
US9213623B2 (en) | Memory allocation with identification of requesting loadable kernel module | |
US10496534B2 (en) | Manual memory management using lazy patching | |
US20160092674A1 (en) | Aslr map obfuscation | |
US10296353B2 (en) | Protecting basic input/output (BIOS) code | |
JP2017045477A (ja) | 仮想ディスクストレージ技術 | |
KR101650424B1 (ko) | 기점 가상 머신으로부터 목적지 가상 머신으로의 동작 전송 | |
Tang et al. | Exploring control flow guard in windows 10 | |
CN114327777B (zh) | 确定全局页目录的方法、装置、电子设备及存储介质 | |
JP2013520744A (ja) | 最小ブートイメージの生成方法及びその装置 | |
JP5778296B2 (ja) | 仮想計算機システム、仮想化機構、及びデータ管理方法 | |
US10228993B2 (en) | Data dump for a memory in a data processing system | |
JP2008269474A (ja) | 情報処理装置およびアクセス制御方法 | |
JP2022545012A (ja) | メモリー・アパーチャのフラッシュ・オーダーを使用したデーター保存 | |
US9298472B2 (en) | High-speed restart method, information processing device, and program | |
JP7025104B2 (ja) | 情報処理装置、方法およびプログラム | |
CN102597972A (zh) | 虚拟计算机系统、区域管理方法及程序 | |
US6782446B2 (en) | Method to prevent corruption of page tables during flash EEPROM programming | |
US10496433B2 (en) | Modification of context saving functions | |
JP6103972B2 (ja) | プログラム生成方法、プログラム実行方法、プログラム実行装置およびプログラム実行プログラム | |
JP6691294B2 (ja) | 情報処理装置、ダイナミックリンクプログラムおよびプログラム再開方法 | |
US9110793B2 (en) | Inner process |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20151217 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20161025 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20161115 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20161214 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20170131 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20170228 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6103972 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
LAPS | Cancellation because of no payment of annual fees |