[go: up one dir, main page]

JP2014157434A - プログラム生成方法、プログラム実行方法、プログラム生成装置、プログラム生成プログラム、プログラム実行装置およびプログラム実行プログラム - Google Patents

プログラム生成方法、プログラム実行方法、プログラム生成装置、プログラム生成プログラム、プログラム実行装置およびプログラム実行プログラム Download PDF

Info

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
Application number
JP2013027249A
Other languages
English (en)
Other versions
JP6103972B2 (ja
Inventor
Takashi Sakakura
隆史 坂倉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP2013027249A priority Critical patent/JP6103972B2/ja
Publication of JP2014157434A publication Critical patent/JP2014157434A/ja
Application granted granted Critical
Publication of JP6103972B2 publication Critical patent/JP6103972B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

【課題】プログラムの実行を早く開始できるようにすることを目的とする。
【解決手段】OS部144は、実行プログラム120の実行が開始される前に、実行プログラム120のプログラムコードのうちメイン関数を含む一部のプログラムコードと、実行プログラム120のプログラムコードのうち一部のプログラムコードを除いた残りのプログラムコードが記憶される補助記憶装置内の記憶領域を特定するための対応表と、をプロセス空間にマッピングする。プログラム実行部141は実行プログラム120を実行する。OS部144は、プログラム実行部141がプロセス空間にマッピングされていない残りのプログラムコードに含まれるプログラムコードを実行コードとして実行するときに、プロセス空間にマッピングされている対応表を用いて実行コードをプロセス空間にマッピングする。
【選択図】図8

Description

本発明は、例えば、プログラムの起動時間を短くするためのプログラム生成方法、プログラム実行方法、プログラム生成装置、プログラム生成プログラム、プログラム実行装置およびプログラム実行プログラムに関するものである。
CPU(Central Processing Unit)およびDRAM(Dynamic Random Access Memory)の急速な高性能化および大容量化に伴い、アプリケーションプログラムは、高機能になる一方で肥大化の一途を辿っている。特に、グラフィカルなユーザーインターフェース(GUI)を有するアプリケーションプログラムは、C++などの高級言語で記載され、総開発ステップ数が100万行を超えるものも珍しくない。
しかし、プログラムが巨大化すると、高速化したCPUおよびDRAMに比して処理遅延が依存として大きいファイルシステムを介するディスクI/Oがプログラムの起動時に多大な回数必要になる。一度立ち上がってしまえば、その操作性に問題はないが、プログラムの起動時間に対してユーザーの不満が募っていた。
そこで、ハードディスクに比べてI/O性能が格段に高いNAND型フラッシュメモリを使用する方法も考えられる。
しかし、フラッシュメモリはハードディスクに比べて依然として高価である。また、フラッシュメモリは、CMOS化(CMOS:Complementary Metal Oxide Semiconductor)において64キロバイトブロックでのデータ消去を必要とし、一つのブロックに対して10万回程度のデータの書き込みまたは消去を行うとビット情報を表す電荷膜の劣化によって使用できなくなることがある。
このため、ハードディスクの代わりにフラッシュメモリを使用した場合、アプリケーションの起動時間は大幅に短縮されるが、システムを構築するための選択として必ずしも良い選択にならない場合がある。
特許文献1または特許文献2には、アクセス例外が発生したときの例外発生ブロックが共有ライブラリの実行関数部分だった場合、共有ライブラリのファイルから実行関数部分を物理ブロックに読み出すとの記載がある。
また、特許文献1には、ネットワークを経由してOS(Operating System)及びプログラムを主記憶装置に読み出すとの記載がある。
また、利用機会が少ないと思われる共有ライブラリを遅延してロードするという工夫が常套的に行われている。
特開2010−257173号公報 特開平6−250924号公報
本発明は、例えば、起動に要する時間が短いプログラムを生成できるようにすることを目的とする。
本発明のプログラム生成方法は、
プログラム生成部が、プログラムの実行が開始される前に仮想空間にマッピングするプログラムコードとしてメイン関数を含む一部のプログラムコードを含み、前記プログラムの実行が開始される前に仮想空間にマッピングするデータとして前記一部のプログラムコードを除いた残りのプログラムコードが記憶される補助記憶装置内の記憶領域を特定するための記憶領域情報を含み、前記プログラムの実行が開始される前に仮想空間にマッピングしないデータとして前記残りのプログラムコードを含むファイルを前記プログラムとして生成する。
本発明によれば、例えば、起動に要する時間が短いプログラムを生成することができる。
実施の形態1における計算機システム100のハードウェア構成の一例を示す図である。 実施の形態1における計算機システム100のソフトウェア構成の一例を示す図である。 実施の形態1における実行プログラム120の構成例を示す図である。 実施の形態1における対応表122の一例を示す図である。 実施の形態1における実行プログラム120のプロセス空間130の一例を示す図である。 実施の形態1における実行プログラム120の実行時のページ割り付け方法を示す概要図である。 実施の形態1における実行プログラム120の実行時のページ割り付け方法を示す概要図である。 実施の形態1における計算機システム100の機能構成図である。 実施の形態1におけるプログラム実行処理を示すフローチャートである。 従来におけるプログラム実行時のページ割り付け方法の概要を示す図である。 実施の形態4におけるプロセス空間を示す図である。 実施の形態9における第一の実行プログラム120Aおよび第二の実行プログラム120Bを示す図である。 実施の形態9における第一のプロセス空間130Aと第二のプロセス空間130Bとを示す図である。
実施の形態1.
起動に要する時間が短いプログラムを生成し、プログラムを早く起動できるようにする形態について説明する。
図1は、実施の形態1における計算機システム100のハードウェア構成の一例を示す図である。
実施の形態1における計算機システム100のハードウェア構成の一例について、図1に基づいて説明する。
計算機システム100は、CPU101と、DRAM103と、ディスクコントローラ104と、ハードディスク105と、ネットワークコントローラ106とを備える。
CPU101は、バス108を介してDRAM103、ディスクコントローラ104およびネットワークコントローラ106と接続し、これらのハードウェアを制御する。
CPU101は、仮想メモリの仮想アドレスと物理メモリ(DRAM103)の物理アドレスとを相互に変換するメモリ管理ユニット(MMU102)を備える。
DRAM103は、プログラムを実行するための記憶領域として使用される主記憶装置(メモリ、物理メモリ、メインメモリともいう)である。
ハードディスク105は、プログラムまたはプログラムで使用するデータなどを記憶するための補助記憶装置である。
ディスクコントローラ104は、ハードディスク105を制御する装置である。
ネットワークコントローラ106は、ネットワーク107に接続するための装置である。
CPU101はCentral Processing Unitの略であり、DRAM103はDynamic Random Access Memoryの略である。
但し、計算機システム100のハードウェア構成は、図1に示した構成以外の構成であっても構わない。
図2は、実施の形態1における計算機システム100のソフトウェア構成の一例を示す図である。
実施の形態1における計算機システム100のソフトウェア構成の一例について、図2に基づいて説明する。
計算機システム100は、OS111と、コンパイラ113と、リンカ114と、プログラムソース115と、スタティックライブラリソース116と、共有ライブラリソース117と、実行プログラム120とを備える。
OS111は、実行プログラム120などのソフトウェアに対して計算機システム100の機能を提供するオペレーティングシステムである。
OS111は、実行プログラム120をハードディスク105またはネットワークから物理メモリにロードするプログラムローダー112を備える。
プログラムソース115は、実行プログラム120のソースコードである。
スタティックライブラリソース116は、スタティックライブラリ(例えば、標準ライブラリ)のソースコードである。
共有ライブラリソース117は、共有ライブラリのソースコードである。
コンパイラ113は、プログラムソース115と、スタティックライブラリソース116と、共有ライブラリソース117とをコンパイルするためのプログラムである。
以下、コンパイルされたプログラムソース115を「オブジェクトプログラム」という。
また、コンパイルされたスタティックライブラリソース116を「スタティックライブラリ」といい、コンパイルされた共有ライブラリソース117を「共有ライブラリ」という。
リンカ114は、オブジェクトプログラムと、スタティックライブラリと、共有ライブラリとを結合して実行プログラム120を生成するためのプログラムである。
実行プログラム120は、CPU101によって実行される実行形式のプログラムである。
図3は、実施の形態1における実行プログラム120の構成例を示す図である。
実施の形態1における実行プログラム120の構成例について、図3に基づいて説明する。
実行プログラム120は、エントリポイントテキスト121と、対応表122と、プログラムデータ123と、プログラムテキスト124とを備える。
エントリポイントテキスト121は、実行プログラム120のテキスト(プログラムコード、命令文、関数、ルーチンまたは機械語ともいう)のうちmain()関数を含む一部のテキストである。
エントリポイントテキスト121は、main()関数の他に、スタックポインタおよびヒープポインタを書き換える書き換えロジックと、メモリアクセス例外をハンドリングするシグナルハンドラとを含む。
エントリポイントテキスト121は、プログラムコードを格納するための.textセクションに格納される。
従来の実行プログラムでは、実行プログラム120の全てのテキストが.textセクションに格納される。
プログラムデータ123は、実行プログラム120に定義されているデータの実体である。
例えば、プログラムデータ123には、エントリポイントテキスト121に定義されているデータと、スタティックライブラリに定義されているデータとが含まれる。
プログラムテキスト124は、実行プログラム120のテキストのうちエントリポイントテキスト121を除く残りのテキストの実体である。
例えば、プログラムテキスト124にはスタティックライブラリが含まれる。
プログラムデータ123およびプログラムテキスト124は、コメントを格納するための.commentセクションに格納される。
対応表122は、仮想メモリ(仮想空間または仮想アドレス空間ともいう)のアドレスと、実行プログラム120の.commentセクションに格納されているプログラムデータ123またはプログラムテキスト124が記憶されている記憶領域と、を対応付ける情報である。仮想メモリのアドレスを「仮想アドレス」という。
対応表122は、プログラムに定義されているデータを格納するための.dataセクションに格納される。
従来の実行プログラムでは、プログラムデータ123が.dataセクションに格納される。また、従来の実行プログラムは対応表122を備えない。
図4は、実施の形態1における対応表122の一例を示す図である。
実施の形態1における対応表122について、図4に基づいて説明する。
対応表122は、仮想アドレスと、実行プログラム120の.comenntセクションに格納されているプログラムデータ123またはプログラムテキスト124が記憶されている記憶領域とを対応付ける情報である。
対応表122は、「仮想アドレス」「開始オフセット」「ページ数」を対応付ける。
「仮想アドレス」は、仮想メモリの記憶領域のうちプログラムデータ123またはプログラムテキスト124がマッピングされる先頭の記憶領域を識別するアドレスを示す。
「開始オフセット」は、ハードディスク105の記憶領域のうち実行プログラム120の.commentセクションに格納されているプログラムデータ123またはプログラムテキスト124が記憶されている先頭のページを識別するページ番号を示す。
「ページ数」は、プログラムデータ123またはプログラムテキスト124が記憶されているページの数を示す。
図5は、実施の形態1における実行プログラム120のプロセス空間130の一例を示す図である。
実施の形態1における実行プログラム120のプロセス空間130について、図5に基づいて説明する。
プロセス空間130は、実行プログラム120を実行するプロセス用に割り当てられた仮想空間である。
プロセス空間130は、テキスト領域131と、スタック領域132と、ヒープ領域133と、bss領域134と、データ領域135とを備える。
テキスト領域131は、エントリポイントテキスト121と、プログラムテキスト124とがマッピングされる記憶領域である。
スタック領域132は、プログラムデータ123のうち局所変数の変数値がマッピングされる記憶領域である。
ヒープ領域133は、実行プログラム120の実行中に動的に確保される記憶領域である。
bss領域134は、プログラムデータ123のうち初期値が定義されていない大域変数の変数値がマッピングされる記憶領域である。
データ領域135は、プログラムデータ123のうち初期値が定義されている大域変数の変数値がマッピングされる記憶領域である。また、データ領域135には対応表122(図4参照)がマッピングされる。
図6、図7は、実施の形態1における実行プログラム120の実行時のページ割り付け方法を示す概要図である。
実行プログラム120にプロセス空間130をマッピングし、プロセス空間130に対して物理ページを割り付けるページ割り付け方法の概要について、図6、図7に基づいて説明する。
実行プログラム120のプロセス空間130は複数の仮想ページで構成される。
プロセス空間130を構成する仮想ページのうち網掛けされている仮想ページは、実行プログラム120の一部がマッピングされ、物理メモリの記憶領域(物理ページ)が割り付けられた仮想ページを意味する。
プロセス空間130を構成する仮想ページのうち網掛けされていない仮想ページは、実行プログラム120がマッピングされておらず、物理ページが割り付けられていない仮想ページを意味する。
テキスト領域131は、3つの領域「main text」「Libc text」「hoge text」を備える。
「main text」は、テキスト領域131にマッピングされるテキスト(プログラムコード)のうち、エントリポイントテキスト121がマッピングされる領域である。
「Libc text」は、テキスト領域131にマッピングされるテキストのうち、スタティックライブラリのテキスト(プログラムテキスト124の一部)がマッピングされる領域である。
「hoge text」は、テキスト領域131にマッピングされるテキストのうち、プログラムテキスト124(スタティックライブラリを除く。例えば、共有ライブラリ)がマッピングされる領域である。
データ領域135は、3つの領域「main data」「Libc data」「hoge data」を備える。
「main data」は、データ領域135にマッピングされるデータのうちエントリポイントテキスト121に定義されているデータがマッピングされる領域である。また、「main data」には対応表122もマッピングされる。
「Libc data」は、データ領域135にマッピングされるデータのうちスタティックライブラリに定義されているデータがマッピングされる領域である。
「hoge data」は、データ領域135の残りのデータがマッピングされる領域である。
実行プログラム120の実行が開始される前に、プログラムローダー112は、エントリポイントテキスト121を「main text」を構成する仮想ページにマッピングする。そして、OS111の仮想記憶機能は、「main text」を構成する仮想ページに物理メモリの物理ページを割り付け、割り付けた物理ページにエントリポイントテキスト121をロードする。
また、プログラムローダー112は、対応表122を「main data」を構成する仮想ページにマッピングする。そして、OS111の仮想記憶機能は、「main data」を構成する仮想ページに物理メモリの物理ページを割り付け、割り付けた物理ページに対応表122をロードする。
プログラムローダー112は、実行プログラム120の実行が開始される前に、エントリポイントテキスト121および対応表122以外のテキストまたはデータをプロセス空間130にマッピングしない(図6参照)。
エントリポイントテキスト121および対応表122以外のテキストまたはデータは、実行プログラム120の実行が開始されてアクセス命令が発生したときに、メモリアクセス例外によってプロセス空間130にマッピングされ、物理メモリにロードされる(図7参照)。
図8は、実施の形態1における計算機システム100の機能構成図である。
実施の形態1における計算機システム100の機能構成について、図8に基づいて説明する。
計算機システム100(プログラム実行装置の一例)は、プログラム実行部141と、コンパイル部142と、リンク部143(プログラム生成部の一例)と、OS部144(開始前マッピング部、実行中マッピングの一例)と、シグナルハンドラ部145と、デバイスドライバ部146と、プログラム記憶部149とを備える。
プログラム実行部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などを記憶する。
図9は、実施の形態1におけるプログラム実行処理を示すフローチャートである。
実施の形態1におけるプログラム実行処理について、図9に基づいて説明する。
ここで、コンパイル部142およびリンク部143によって、実行プログラム120(図3参照)および対応表122(図4参照)が生成されているものとする。
S110において、OS部144は、実行プログラム120を実行するためのプロセス空間130(図5参照)を生成する。
S110の後、処理はS120に進む。
S120において、OS部144は、以下のようにエントリポイントテキスト121および対応表122をロードする。
OS部144は、実行プログラム120の.textセクションに格納されたエントリポイントテキスト121を、プロセス空間130のテキスト領域131にある「main text」の仮想ページにマッピングする。
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は、スタック領域132を指定するためのスタックポインタに「main text」の直後の仮想アドレスを設定する(図6の(1)参照)。
さらに、OS部144は、実行するプログラムコードを指定するためのエントリポインタに、エントリポイントテキスト121に含まれる書き換えロジックの仮想アドレスを設定する。書き換えロジックが実行された後、main()関数が実行される。但し、OS部144がエントリポインタにmain()関数の仮想アドレスを設定し、main()関数から書き換えロジックが呼び出されても構わない。
同様に、OS部144は、実行プログラム120の.dataセクションに格納された対応表122を、プロセス空間130のデータ領域135にある「main data」の仮想ページにマッピングする。
OS部144は、物理ページを「main data」の仮想ページに割り付ける(図6参照)。
そして、OS部144は、プログラム記憶部149から物理ページに対応表122をロードする。
また、OS部144は、ヒープ領域133を指定するためのヒープポインタに「main data」の直前の仮想アドレスを設定する(図6の(2)参照)。
S120の後、処理はS130に進む。
S130において、プログラム実行部141は、実行プログラム120の実行を開始する。つまり、プログラム実行部141は、エントリポインタに設定されている書き換えロジック(または、main()関数から呼び出された書き換えロジック)を実行する。
プログラム実行部141は、書き換えロジックを実行することによってスタック領域132の正しい仮想アドレスをスタックポインタに設定すると共に、ヒープ領域133の正しい仮想アドレスをヒープポインタに設定する。
つまり、プログラム実行部141は、スタックポインタに設定されている仮想アドレスをテキスト領域131の直後の仮想アドレスに更新し(図6の(3)参照)、ヒープポインタに設定されている仮想アドレスをbss領域134の直前の仮想アドレスに更新する(図6の(4)参照)。
これにより、既存のプログラムローダーに書き換えロジックの機能を追加しなくても、既存のプログラムローダーを計算機システム100のプログラムローダー112として使用することができる。
プログラム実行部141は、書き換えロジックの実行後、書き換えロジックの次のプログラムコードを実行する。
S130の後、処理はS140に進む。
S140において、仮想ページがマッピングされていなプログラムデータ123またはプログラムテキスト124にアクセスするアクセス命令(call、jump、load、storeなど)が実行される場合、OS部144は、アクセスされる仮想アドレスをシグナルハンドラ部145に通知することによって、メモリアクセス違反を発生させる。
以下、S140でアクセスされるプログラムデータ123またはプログラムテキスト124を「アクセス違反データ」とし、アクセス違反データの仮想アドレスを「アクセス違反アドレス」とする。
メモリアクセス違反が発生した場合(YES)、処理はS150に進む。
メモリアクセス違反が発生しない場合(NO)、処理はS170に進む。
S150において、シグナルハンドラ部145は、main()関数に定義されているシグナルハンドラを実行することによって以下のような処理を行う。
シグナルハンドラ部145は、対応表122(図4参照)から、アクセス違反アドレスと同じ仮想アドレスに対応付けられた開始オフセットおよびページ数を取得する。
そして、シグナルハンドラ部145は、取得した開始オフセットおよびページ数によって特定されるハードディスク105内のページ(アクセス違反データ)を、アクセス違反アドレスによって特定される仮想ページにマッピングし、仮想ページに物理ページを割り付ける。
例えば、アクセス違反アドレスが「0xc0077000」である場合、シグナルハンドラ部145は、対応表122から開始オフセット「114」およびページ数「56」を取得する。
そして、シグナルハンドラ部145は、ハードディスク105の「114」番目のページから「169」番目のページまでの「56」個のページを仮想ページにマッピングし、仮想ページに物理ページを割り付ける。
以下、S150で取得された開始オフセットを「対象開始オフセット」とし、S150で取得されたページ数を「対象ページ数」とする。
S150の後、処理はS160に進む。
S160において、OS部144は、シグナルハンドラ部145から対象開始オフセットおよび対象ページ数を取得する。
OS部144は、OS111のページング機能を用いて、ハードディスク105のセクタ(記憶領域)のうち対象開始オフセットおよび対象ページ数によって特定されるページに対応するセクタを特定する。
以下、特定したセクタを「対象セクタ」とし、特定したセクタを識別する識別子を「対象セクタ番号」とする。
OS部144は、アクセス違反アドレスと対象セクタ番号とをデバイスドライバ部146に通知する。
デバイスドライバ部146は、MMU102を用いてアクセス違反アドレスを物理アドレスに変換し、物理アドレスと対象セクタ番号とを含んだI/O命令をディスクコントローラ104に入力する。
ディスクコントローラ104は、I/O命令に従って、ハードディスク105の対象セクタに記憶されているアクセス違反データを、物理アドレスで識別される物理ページにロードする。
例えば、ディスクコントローラ104は、DMA(Direct Memory Access)機能を用いて、アクセス違反データのロードを行う。
S160の後、処理はS170に進む。
S170において、プログラム実行部141は、実行プログラム120の実行を続ける。
S170の後、処理はS171に進む。
S171において、実行プログラム120の実行が終了した場合(YES)、プログラム実行処理は終了する。
また、実行プログラム120の実行が終了しない場合(NO)、処理はS140に戻る。
以上のように、実施の形態1における計算機システム100は、プログラムの実行において必要なページのみを使用し、冗長なコピーを発生させない。結果として、巨大なアプリケーションになればなるほど、従来例に比較して高速に起動し、且つ、無駄なメモリ消費を抑えることができる。
実施の形態1において、計算機システム100が備えるハードディスク105に実行プログラム120を記憶しておく形態について説明した。
但し、実行プログラム120(または実行プログラム120の一部)はネットワーク107に接続された他の記憶装置に記憶しておいても構わない。この場合、計算機システム100はネットワーク107を介して他の記憶装置から実行プログラム120(または実行プログラム120の一部)を取得する。
図10は、従来におけるプログラム実行時のページ割り付け方法の概要を示す図である。
従来のプログラムの実行開始時におけるページ割り付け方法の概要について、図10に基づいて説明する。
従来、プログラムが実行される場合、プログラムの実行が開始される前に、プロセス空間および実行コンテキストが確保される。
また、プロセス空間のうちプログラムのテキスト用の領域「main text」およびスタティックライブラリのテキスト用の領域「Libc text」に物理ページが割り付けられ、プログラムのテキストおよびスタティックライブラリのテキストがロードされる。
また、プログラムのデータ用の領域「main data」、スタティックライブラリのデータ用の領域「Libc data」および共有ライブラリのデータ用の領域「hoge data」に物理ページが割り付けられ、プログラム、スタティックライブラリおよび共有ライブラリのデータがロードされる。
さらに、プログラムのプロセス空間とは別の仮想空間に設けられる共有ライブラリのテキスト用の領域「hoge text」に物理ページが割り付けられ、共有ライブラリのテキストがロードされる。
つまり、従来は、プログラムの実行が開始される前に、全てのプログラム、スタティックライブラリおよび共有ライブラリが物理メモリにロードされる。
なお、スタック領域はテキスト領域「main text」「Libc text」の直後に設けられ、bss領域はデータ領域「main data」「Libc data」「hoge data」の直前に設けられ、ヒープ領域はbss領域の直前に設けられる。
また、プログラムは、エントリポインタで指定されるmain()関数から順に実行される。
プログラムの実行が開始された後、物理メモリが不足した場合、共有ライブラリがハードディスクに退避される。
また、ハードディスクに退避された共有ライブラリが使用される場合、共有ライブラリをロードするためのロード関数が実行され、共有ライブラリがハードディスクから物理メモリにロードされる。
次に、ハードディスクから物理メモリにデータ(例えば、共有ライブラリ)をロードするファイルシステムについて説明する。
ファイルシステムは、ハードディスクの1セクタに相当する512バイトのバッファメモリをOSの機能で管理し、このOSのバッファメモリを用いてハードディスクから物理メモリに共有ライブラリをロードする。
つまり、ファイルシステムは、共有ライブラリをロードするためにread()またはwrite()などのOSのシステムコールが呼び出されると、ハードディスクのセクタ単位で共有ライブラリをバッファメモリにコピーすると共に、共有ライブラリをバッファメモリから物理メモリにコピーする。
但し、近年のファイルシステムは、OSのバッファメモリを使用する代わりに、物理メモリの1ページに相当するLibc用のデータバッファを使用する。Libcとは、C言語で用意された標準ライブラリである。
例えば、ファイルシステムは、共有ライブラリをロードするためのロード関数が実行されると、ハードディスク内のファイルうち共有ライブラリを含んだファイルをopen()関数でオープンし、共有ライブラリをread()関数でハードディスクから読み出し、読み出した共有ライブラリをLibc用のデータバッファにコピーする。
さらに、ファイルシステムは、共有ライブラリをLibc用のデータバッファからヒープ領域またはテキスト領域「hoge text」に割り付けられた物理メモリにコピーする。
つまり、ファイルシステムは、共有ライブラリを物理メモリにロードするために、物理メモリのページ毎に、1回のディスクI/O(ハードディスクからの読み出し)および2回のデータコピー(ハードディスクからデータバッファへのコピー、データバッファから物理メモリへのコピー)を行う。
実施の形態1において、例えば、以下のようなプログラム生成方法およびプログラム実行方法について説明した。括弧内に、対応する構成の符号または名称を記す。
プログラム生成部(143)が、プログラム(120)の実行が開始される前に仮想空間にマッピングするプログラムコードとしてメイン関数(main()関数)を含む一部のプログラムコード(121)を含み、前記プログラムの実行が開始される前に仮想空間にマッピングするデータとして前記一部のプログラムコードを除いた残りのプログラムコードが記憶される補助記憶装置(105)内の記憶領域を特定するための記憶領域情報(122)を含み、前記プログラムの実行が開始される前に仮想空間にマッピングしないデータとして前記残りのプログラムコード(124)を含むファイルを前記プログラムとして生成する。
開始前マッピング部(144)が、実行プログラムの実行が開始される前に、前記実行プログラムのプログラムコードのうちメイン関数を含む一部のプログラムコードと、前記実行プログラムのプログラムコードのうち前記一部のプログラムコードを除いた残りのプログラムコードが記憶される補助記憶装置内の記憶領域を特定するための記憶領域情報と、を仮想空間にマッピングする。
プログラム実行部(141)が、前記実行プログラムを実行する。
実行中マッピング部(144)が、前記プログラム実行部が前記開始前マッピング部によって仮想空間にマッピングされていない前記残りのプログラムコードに含まれるプログラムコードを実行コードとして実行するときに、前記開始前マッピング部によって仮想空間にマッピングされた前記記憶領域情報を用いて前記実行コードを仮想空間にマッピングする。
実施の形態1においてフローチャートなどに含まれている矢印は主としてデータや信号の入出力を示す。フローチャートなどに基づいて説明する処理はハードウェアを用いて実行される。
実施の形態1において「〜部」として説明するものは「〜回路」「〜装置」「〜ユニット」「〜ステップ」または「〜処理」に置き換えてもよい。すなわち、「〜部」として説明するものは、ファームウェア、ソフトウェア、ハードウェアまたはこれらの組み合わせのいずれで実装されても構わない。
以降の実施の形態では、実施の形態1における計算機システム100について説明を補足する。
実施の形態2.
実施の形態1で説明したように、計算機システム100は、オペレーティングシステムの仮想記憶機能をそのまま使用することによって、プログラムを実行するためのワーキングセット(メモリ領域)を管理することができる。
なお、計算機システム100は、仮想記憶装置として利用するバックストアの所在を制限しない。例えば、計算機システム100は、インターネットなどのネットワークに接続するサーバーを仮想記憶装置として用いても構わない。つまり、計算機システム100は、実行プログラム120をハードディスク105の代わりにサーバーから物理メモリにロードしても構わない。
実施の形態2において、例えば、以下のような計算機システム100について説明した。
計算機システム100は、ライブラリテキストおよびデータのページデータを実行プログラムファイルのレプリカとしてネットワーク上に配置し、当該ページデータをネットワーク経由で取得する。
実施の形態3.
実施の形態1で説明したように、計算機システム100は、オペレーティングシステムの仕様を問わないため、既存のオペレーティングシステムを使用することができる。
つまり、計算機システム100のリンカ114は、既存のCPU101、MMU102およびOS111によって実現される仮想記憶機構の実装に則って実装することが可能である。
例えば、計算機システム100は、インテル社またはAMD社のCPU101、マイクロソフト社またはHP社のOS111、HP社のPA−RISCインバーティッドテーブルアーキテクチャ、IBM社のサーバーなどを適用することが可能である。
実施の形態3において、例えば、以下のような計算機システム100について説明した。
計算機システム100は、実行プログラムを実行することによってスタックポインタとヒープポインタとを変更し、ライブラリのテキスト配置領域とデータ配置領域を確保する。これにより、計算機システム100は、既存システムのプログラムのローダー機能の変更を必要としない。
実施の形態4.
実施の形態1では、計算機システム100が実行プログラム120を一つのプロセス空間で実行される場合について説明した。
但し、計算機システム100は、実行プログラム120を複数のプロセス空間で実行することもできる。例えば、計算機システム100は、ウェブブラウザの実行プログラム120を複数のプロセス空間で実行することによって、ウェブブラウザとして機能するウィンドウを複数表示することもできる。
図11は、実施の形態4におけるプロセス空間を示す図である。
計算機システム100は、実行プログラム120の実行を開始するときに第一のプロセス空間を生成し、生成した第一のプロセス空間を用いて実行プログラム120を実行する。
さらに、計算機システム100は、第一のプロセス空間を用いて実行プログラム120を実行しているときに第二のプロセスを生成し、生成した第二のプロセス空間を用いて第一のプロセス空間とは別に実行プログラム120を実行する。
なお、第一のプロセス空間と第二のプロセス空間とで共有することができる領域「hoge text」は、第一のプロセス空間と第二のプロセス空間とは別の仮想領域に設けてもよい。
実施の形態4において、例えば、以下のような計算機システム100について説明した。
計算機システム100は、実行プログラムを2つ以上実行するとき、当該テキストが割り当てられている物理メモリのページを共有する。
実施の形態5.
共有ライブラリを利用する利点の一つとして、次のような事項が挙げられる。共有ライブラリが何らかの理由で更新されても共有ライブラリのAPI(Application Program Interface)に変更がない場合、更新された共有ライブラリを利用するアプリケーションプログラムをリコンパイルする必要が無い。
実施の形態1で説明した計算機システム100においても、APIの変更を除いた共有ライブラリの更新に伴ってアプリケーションプログラム(実行プログラム120)をリコンパイルする必要は無い。但し、計算機システム100は、更新後の共有ライブラリを利用するため、新たにリンカ114を実行することによって新たにアプリケーションプログラムを生成する必要がある。
実施の形態5において、例えば、以下のような計算機システム100について説明した。
計算機システム100は、共有ライブラリに変更があっても当該ライブラリのインクリメンタルな変更だけを行い、実行プログラムのリコンパイルを必要としない。
実施の形態6.
実施の形態1で説明した計算機システム100は、アプリケーションプログラム(実行プログラム120)を仮想空間に貼り付け、その実行に必要なページのみを有効化することによって、アプリケーションプログラムの起動時間の短縮およびメモリ消費の最適化を図るものである。
計算機システム100は既存のシステムに手を加えずに上記の効果を奏することができるが、既存のシステムに手を加えて計算機システム100を構築しても構わない。
実施の形態7.
計算機システム100は、実行プログラム120の実行時にメモリアクセス違反が発生した仮想アドレスを記憶し、記憶した仮想アドレスで識別される仮想領域に設定されるテキストまたはデータを.textセクションまたは.dataセクションに格納するように実行プログラム120を再構成してもよい。また、計算機システム100は、記憶した仮想アドレスに設定されるテキストまたはデータをアドレスの記憶番にソートしてもよい。
これにより、計算機システム100は、実行プログラム120の実行を開始する前に、実行プログラム120を実行中に使用する可能性が高いテキストまたはデータを物理メモリにロードすることができる。つまり、計算機システム100は、実行プログラム120の実行中に発生するメモリアクセス違反を抑制することができる。
実施の形態7において、例えば、以下のような計算機システム100について説明した。
計算機システム100は、テキスト及びデータのメモリアクセス違反が発生したアドレスを取得し、そのアドレスに該当するシンボル単位でテキスト及びデータをソートし、プログラムを再リンクする。
実施の形態8.
計算機システム100は、マイクロソフト社が提供するリンカを使用し、マイクロソフト社のPE実行ファイル形式を踏襲してアプリケーションプログラム(実行プログラム120)を生成してもよい。
計算機システム100は、マイクロソフト社のオペレーティングシステム「Windows(登録商標)」上で動作するすべてのアプリケーションプログラムに対して適用することが可能である。
例えば、「Windows(登録商標)」上で動作するアプリケーションプログラムを開発する開発者は、マイクロソフト社の「Visual Studio(登録商標)」などの開発環境を用いて従来通りにプログラムの作成および試験を行い、製品としてしかるべき品質のアプリケーションプログラムを開発すればよい。そして、開発者は、マイクロソフト社が提供するリンカを使用し、PE実行ファイル形式のアプリケーションプログラムを作成し、作成したアプリケーションプログラムを製品として出荷する。
実施の形態8において、例えば、以下のような計算機システム100について説明した。
計算機システム100は、実行プログラム形式を解釈可能なローダーを有する。
実施の形態9.
実施の形態1とは異なる実行プログラム120の形態について説明する。
実施の形態1と異なる事項について主に説明し、説明を省略する事項については実施の形態1と同様である。
図12は、実施の形態9における第一の実行プログラム120Aおよび第二の実行プログラム120Bを示す図である。
図12に示すように、リンク部143は、エントリポイントテキスト121と対応表122とから成る第一の実行プログラム120Aと、プログラムテキスト124とプログラムデータ123とから成る第二の実行プログラム120Bとを生成する。
エントリポイントテキスト121のmain()関数は、プロセス空間130をコピーするためのシステムコール(fork)と、コピーされたプロセス空間130にプログラムテキスト124およびプログラムデータ123をマッピングするマッピングロジックとを含んでいる。
図13は、実施の形態9における第一のプロセス空間130Aと第二のプロセス空間130Bとを示す図である。
図13において、OS部144は、第一の実行プログラム120A(図12参照)を実行するための第一のプロセス空間130Aを生成する。
OS部144は、第一の実行プログラム120Aのエントリポイントテキスト121を「main text」の仮想ページにマッピングし、対応表122を「main data」にマッピングする。
OS部144は、「main text」の仮想ページおよび「main data」の仮想ページに物理ページを割り付け、割り付けた物理ページにエントリポイントテキスト121および対応表122をロードする。
プログラム実行部141は、第一のプロセス空間130Aのエントリポイントテキスト121に含まれるmain()関数を実行する。
これにより、第一のプロセス空間130Aをコピーして第二のプロセス空間130Bが生成され、対応表122を用いて第二のプロセス空間130Bにプログラムテキスト124とプログラムデータ123とがマッピングされる。
その後、プログラム実行部141は、第二のプロセス空間130Bにマッピングされた第二の実行プログラム120Bを実行する。
実施の形態9において、エントリポイントテキスト121と対応表122とから成る最小の実行プログラムと、プログラムテキスト124とプログラムデータ123とから成る通常の実行プログラムとを生成することを説明した。
また、最小の実行プログラムのプロセス空間をコピーすることによって、通常のプログラムを実行するためのプロセス空間を生成することを説明した。
各実施の形態において、例えば、以下の事項を説明した。
従来のオペレーティングシステム機能により、共有ライブラリのテキストのメモリ上へのロード、利用プロセスへのデータコピーなどのサービスを回避し、スタティックライブラリを含め、全てのライブラリを当該実行プログラムの仮想アドレス空間の中に配置し、アドレスを解決して一つの実行プログラムとする。
リンカプログラムはmain()関数に先立って、全てのテキストが格納されるテキスト位置にスタックポインタを初期化する論理とライブラリ部分のデータを追加し、BSS格納に必要な位置にヒープポインタを更新する論理を追加する。
main()関数で記述されるプログラムは最小限である。
リンカプログラムは実行プログラムの.textセクションに当該プログラムのテキストを格納し、.dataセクションに当該プログラムのデータと、ライブラリプログラムのテキスト、データおよびBSSの対応表とを格納する。
また、対応表にポイントされるライブラリのテキストとデータは.commentセクションに格納する。
システムプログラムのローダーは.textセクションと.dataセクションとを確保したプロセス空間にロードする。
システムが当該プロセスに実行コンテキストを与えると、実行プログラムはスタックポインタおよびヒープポインタの更新論理により、ライブラリテキスト、データおよびBSSの格納領域を確保する。
プログラムの実行により、テキスト参照、あるいはデータ参照・書き込みでメモリアクセス違反の例外が発生する。
実行プログラムにはメモリアクセス違反の例外処理ハンドラが定義されている。
ハンドラは、メモリアクセス違反が発生したアドレスをもって対応表を参照し、.commentセクションにあるテキストあるいはデータを、当該アドレスを含むページにマップする。そして、システムのページング機構がファイルシステムを介してハードディスクコントローラにDMA I/O命令を発行する事により、実行プログラムファイルの当該ページ部分の内容がハードディスクの当該セクタから当該ページにDMAでデータ書き込みされる。
実行プログラムは、スタックポインタおよびヒープポインタを更新するタイミングで実行プログラムのライブラリテキストとデータの全域とをプロセス空間にマップしておいても良い。
前記実行プログラムのレプリカはネットワーク上に置かれていても良い。
巨大なアプリケーションの共有ライブラリはシステムの上で当該プログラムでのみ使用される物が多い。
しかしながら、同一のシステム上で複数の同一アプリケーションが複数利用されることがある。
この状況を鑑みて、実行プログラムは自身の同時複数実行がどれほどなされるか統計情報を取る。
統計情報から2以上同時に実行されることが多いと判断したときは、実行プログラムはライブラリ用テキストのページメモリを共有メモリとして確保する。
これにより、2つ目以降の実行プログラムはライブラリテキストのメモリ空間を共用することができる。
ライブラリ用の共有メモリ領域を使用する実行方式は実行プログラムのプロセス数に関わらず常に適用する運用も可能である。
リンカプログラムにより既存の共有ライブラリを実行プログラムに再構成する。
しかし、使用する共有ライブラリに変更が発生した場合は、リンカプログラムの再実行を行う。
各実施の形態は、既存システムの変更なしに奏効することを特徴とする。
しかし、CPUおよびDRAMの高性能化および大容量化によるプログラミングパラダイムの変化を否定するものではない。システムプログラム、特に実行時にプロセス空間の確保と実行プログラムのマッピングとを行うローダーを実装することも許容する。
計算機システム100はプログラム実行によってメモリアクセス違反を発生させたアドレスを記憶し、そのアドレスが含まれるシンボルと当該シンボルにより修飾されるテキスト及びデータをメモリアクセス違反の発生順に再リンクする。これにより、更に効率の高いページメモリ使用を可能にする。
各実施の形態により、巨大なアプリケーションの起動が非常に高速になる。
また、アプリケーションが自らメモリ使用を管理できるので、メモリ使用の制約が厳しい組み込みシステムにおけるアプリケーションにおいても、ワーキングセット管理をアプリケーション機能として実装することが可能である。
各実施の形態において、例えば、以下のようなプログラム生成方法およびプログラム実行方法について説明した。
実行形式のプログラムを生成するリンカと実行形式のプログラムをメモリ上にロードするローダーとから構成され、プログラムがライブラリテキスト、データまたはBSSを参照する際に発生するメモリアクセス例外によって、プログラムアドレス空間の当該部分のページメモリの確保および当該データのロードを行う。
リンカは、実行プログラム生成時に必要とするスタティックライブラリおよび共有ライブラリを一つのプログラムアドレス空間に配置し、共有ライブラリを含めてアドレス解決のみを行い、実行プログラムに格納されているロードアドレスと当該ライブラリのテキストおよびデータとを特定する手段である対応表をデータとして生成し、実行形式のプログラムを生成する。
ライブラリテキストおよびデータのページデータを実行プログラムファイルのレプリカとしてネットワーク上に配置し、当該ページデータをネットワーク経由で取得する。
実行プログラム自身がスタックポインタおよびヒープ領域ポインタを変更することによって、ライブラリのテキスト配置領域およびデータ配置領域を確保する。
これにより、既存システムのプログラムのローダー機能を変更する必要がない。
同一のシステム上にて、実行プログラムが2以上実行されるときは、当該テキストが割り当てられている物理メモリページを共有する。
ロードアドレスとテキストおよびデータとの対応表と、その内容を更新する手段とを有する。
共有ライブラリ部分に変更があっても当該ライブラリのインクリメンタルな変更のみで、実行プログラムの他のプログラムのリコンパイルは必要としない。
システムに実行プログラム形式を解釈可能なローダーを有する。
実行プログラムは、プログラムの実行によってテキスト及びデータのメモリアクセス違反を発生させたアドレス情報を取得し、そのアドレスに該当するシンボル単位でテキスト及びデータをソートし、テキスト及びデータを再リンクする。
100 計算機システム、101 CPU、102 MMU 103 DRAM、104 ディスクコントローラ、105 ハードディスク、106 ネットワークコントローラ、107 ネットワーク、108 バス、111 OS、112 プログラムローダー、113 コンパイラ、114 リンカ、115 プログラムソース、116 スタティックライブラリソース、117 共有ライブラリソース、120 実行プログラム、121 エントリポイントテキスト、122 対応表、123 プログラムデータ、124 プログラムテキスト、130 プロセス空間、131 テキスト領域、132 スタック領域、133 ヒープ領域、134 bss領域、135 データ領域、141 プログラム実行部、142 コンパイル部、143 リンク部、144 OS部、145 シグナルハンドラ部、146 デバイスドライバ部、149 プログラム記憶部。

Claims (16)

  1. プログラム生成部が、プログラムの実行が開始される前に仮想空間にマッピングするプログラムコードとしてメイン関数を含む一部のプログラムコードを含み、前記プログラムの実行が開始される前に仮想空間にマッピングするデータとして前記一部のプログラムコードを除いた残りのプログラムコードが記憶される補助記憶装置内の記憶領域を特定するための記憶領域情報を含み、前記プログラムの実行が開始される前に仮想空間にマッピングしないデータとして前記残りのプログラムコードを含むファイルを前記プログラムとして生成する
    ことを特徴とするプログラム生成方法。
  2. 開始前マッピング部が、実行プログラムの実行が開始される前に、前記実行プログラムのプログラムコードのうちメイン関数を含む一部のプログラムコードと、前記実行プログラムのプログラムコードのうち前記一部のプログラムコードを除いた残りのプログラムコードが記憶される補助記憶装置内の記憶領域を特定するための記憶領域情報と、を仮想空間にマッピングし、
    プログラム実行部が、前記実行プログラムを実行し、
    実行中マッピング部が、前記プログラム実行部が前記開始前マッピング部によって仮想空間にマッピングされていない前記残りのプログラムコードに含まれるプログラムコードを実行コードとして実行するときに、前記開始前マッピング部によって仮想空間にマッピングされた前記記憶領域情報を用いて前記実行コードを仮想空間にマッピングする
    ことを特徴とするプログラム実行方法。
  3. プログラム生成部が、プログラムを実行するための仮想空間を構成する領域のうちプログラムコードを設定するためのテキスト領域に設定するテキストセクションデータとして前記一部のプログラムコードを含むプログラムを前記実行プログラムとして生成し、
    前記開始前マッピング部は、前記プログラム生成部によって生成された前記実行プログラムの実行が開始される前に、前記実行プログラムに前記テキストセクションデータとして含まれる前記一部のプログラムコードを仮想空間の前記テキスト領域にマッピングする
    ことを特徴とする請求項2記載のプログラム実行方法。
  4. 前記一部のプログラムコードが、前記メイン関数とポインタ書き換え関数とを含み、
    前記ポインタ書き換え関数が、前記テキスト領域の隣に位置する第一の領域を指定するための第一のポインタに、前記残りのプログラムコードを前記テキスト領域に加えた場合の前記第一の領域を指定するアドレスを設定する関数である
    ことを特徴とする請求項3記載のプログラム実行方法。
  5. 前記プログラム生成部は、仮想空間を構成する領域のうちプログラムに定義されたデータを設定するためのデータ領域に設定するデータセクションデータとして前記記憶領域情報を含むプログラムを前記実行プログラムとして生成し、
    前記開始前マッピング部は、前記プログラム生成部によって生成された前記実行プログラムの実行が開始される前に、前記実行プログラムに前記データセクションデータとして含まれる前記記憶領域情報を仮想空間の前記データ領域にマッピングする
    ことを特徴とする請求項4記載のプログラム実行方法。
  6. 前記ポインタ書き換え関数が、前記テキスト領域と前記データ領域と前記第一の領域以外の第二の領域を指定するための第二のポインタに、前記実行プログラムに定義されたデータを前記データ領域に加えた場合の前記第二の領域を指定するアドレスを設定する関数である
    ことを特徴とする請求項5記載のプログラム実行方法。
  7. 前記プログラム実行部は、前記ポインタ書き換え関数を実行した後に前記メイン関数を実行する
    ことを特徴とする請求項4から請求項6いずれかに記載のプログラム実行方法。
  8. 前記補助記憶装置がネットワークに接続された装置であることを特徴とする請求項2から請求項7いずれかに記載のプログラム実行方法。
  9. 前記実行中マッピング部は、前記プログラム実行部によって第一の仮想空間を用いて前記実行プログラムが実行されると共に第二の仮想空間を用いて前記実行プログラムが実行される場合、前記第一の仮想空間を用いて実行される前記実行プログラムと前記第二の仮想空間を用いて実行される前記実行プログラムとが共有する第三の仮想空間に、前記残りのプログラムコードに含まれる少なくともいずれかのプログラムコードをマッピングする
    ことを特徴とする請求項2から請求項8いずれかに記載のプログラム実行方法。
  10. 前記プログラム生成部は、前記実行中マッピング部によってマッピングされた前記実行コードを前記一部のプログラムコードに含めて新たに前記実行プログラムを生成する
    ことを特徴とする請求項3から請求項7いずれかに記載のプログラム実行方法。
  11. プログラムの実行が開始される前に仮想空間にマッピングするプログラムコードとしてメイン関数を含む一部のプログラムコードを含み、前記プログラムの実行が開始される前に仮想空間にマッピングするデータとして前記一部のプログラムコードを除いた残りのプログラムコードが記憶される補助記憶装置内の記憶領域を特定するための記憶領域情報を含み、前記プログラムの実行が開始される前に仮想空間にマッピングしないデータとして前記残りのプログラムコードを含むファイルを前記プログラムとして生成するプログラム生成部
    を備えることを特徴とするプログラム生成装置。
  12. 請求項11記載のプログラム生成装置としてコンピュータを機能させるためのプログラム生成プログラム。
  13. 実行プログラムの実行が開始される前に、前記実行プログラムのプログラムコードのうちメイン関数を含む一部のプログラムコードと、前記実行プログラムのプログラムコードのうち前記一部のプログラムコードを除いた残りのプログラムコードが記憶される補助記憶装置内の記憶領域を特定するための記憶領域情報と、を仮想空間にマッピングする開始前マッピング部と、
    前記実行プログラムを実行するプログラム実行部と、
    前記プログラム実行部が前記開始前マッピング部によって仮想空間にマッピングされていない前記残りのプログラムコードに含まれるプログラムコードを実行コードとして実行するときに、前記開始前マッピング部によって仮想空間にマッピングされた前記記憶領域情報を用いて前記実行コードを仮想空間にマッピングする実行中マッピング部と
    を備えることを特徴とするプログラム実行装置。
  14. 請求項13記載のプログラム実行装置としてコンピュータを機能させるためのプログラム実行プログラム。
  15. プログラム生成部が、仮想空間をコピーすると共に仮想空間に第二のプログラムのプログラムコードをマッピングするメイン関数を含むプログラムコードであるエントリポイントテキストと、前記第二のプログラムのプログラムコードが記憶される補助記憶装置内の記憶領域を特定するための記憶領域情報と、を含む第一のプログラムを生成する
    ことを特徴とするプログラム生成方法。
  16. 開始前マッピング部が、第二のプログラムの実行が開始される前に、仮想空間をコピーすると共に仮想空間に前記第二のプログラムのプログラムコードをマッピングするメイン関数を含むプログラムコードであるエントリポイントテキストと、前記第二のプログラムのプログラムコードが記憶される補助記憶装置内の記憶領域を特定するための記憶領域情報と、を含む第一のプログラムを仮想空間にマッピングし、
    プログラム実行部が、前記第一のプログラムの前記メイン関数を実行することにより、前記第一のプログラム用の第一の仮想空間をコピーして第二の仮想空間を生成し、
    前記プログラム実行部が、前記記憶領域情報を用いて前記第二のプログラムのプログラムコードを前記第二の仮想空間にマッピングし、
    前記プログラム実行部が、前記第二の仮想空間を用いて前記第二のプログラムのプログラムコードを実行する
    ことを特徴とするプログラム実行方法。
JP2013027249A 2013-02-15 2013-02-15 プログラム生成方法、プログラム実行方法、プログラム実行装置およびプログラム実行プログラム Expired - Fee Related JP6103972B2 (ja)

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)

* Cited by examiner, † Cited by third party
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 コンパイルシステム、コンパイル方法およびプログラム

Patent Citations (2)

* Cited by examiner, † Cited by third party
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