説明

ロードモジュール作成装置及びロードモジュール作成方法及びロードモジュール作成プログラム

【課題】通常の入力に対するプログラム実行の高速化を実現することを目的とする。
【解決手段】頻度記録部121は、オブジェクトファイル132に含まれる関数の実行頻度を示す関数実行頻度情報141を記憶装置に記憶する。配置部122は、頻度記録部121により記憶された関数実行頻度情報141に基づき、各関数が当該実行頻度の高い順に配置されるように、ロードモジュール134における各関数の配置順序を処理装置で決定する。そして、配置部122は、当該配置順序を示す関数配置情報142を記憶装置に記憶する。ロードモジュール作成部123は、配置部122により記憶された関数配置情報142に基づき、オブジェクトファイル132を処理装置でリンクしてロードモジュール134を作成する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ロードモジュール作成装置及びロードモジュール作成方法及びロードモジュール作成プログラムに関するものである。
【背景技術】
【0002】
一般の計算機システムでは、プログラムは不揮発性の記憶媒体に記録されるが、そのままではCPU(Central・Processing・Unit)から直接アクセスして実行することができない。そこで、プログラムの実行に先立ってページ単位でRAM(Random・Access・Memory)にコピーして実行する。このRAMへのコピーをページングという。RAMを使い切った状態においてページングの要求があると、以前に使ったページを追い出して空き領域をつくり、実行するページをコピーして実行する。このとき、追い出すページを選択する方式としては、アクセスされなかった期間が最も長いページを追い出す方式が代表的である。
【0003】
限られたRAM容量のもと、プログラムの実行を高速化するためには、ページング回数の削減が有効である。実行プログラム内の関数や変数の配置を変更すると、発生するページングの回数に影響がある。従来技術として、関数の呼び出し関係の解析結果をもとに関数の配置を変更する方式が開示されている(例えば、特許文献1参照)。
【特許文献1】特開平3−77135号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
上記の従来技術においては、ソースコードから関数の呼び出し関係を解析し、呼び出し関係にある関数同士が同じページに配置されるように関数の配置順序を並べ替えて、ページング回数の削減を狙っている。しかしながら、ソースコード上で呼び出し関係にあっても、実行時には呼び出されない場合もある。例えば、プログラムへの入力が異常な場合にのみ呼び出される異常処理関数は、通常の典型的な入力では呼び出されず、呼び出されない関数を同じページに配置されるように並び替えてもプログラム実行を高速化する効果は得られない。つまり、従来は、実際には呼び出されない関数が同じページに配置され、そのために、実際に呼び出される関数が追い出されて別のページに配置される、という課題があった。
【0005】
本発明は、例えば、通常の入力に対するプログラム実行の高速化を実現することを目的とする。
【課題を解決するための手段】
【0006】
本発明の一の態様に係るロードモジュール作成装置は、
複数の関数を含むオブジェクトファイルをリンクしてロードモジュールを作成するロードモジュール作成装置において、
前記複数の関数の実行頻度を示す関数実行頻度情報を記憶装置に記憶する頻度記録部と、
前記頻度記録部により記憶された関数実行頻度情報に基づき、前記ロードモジュールにおける前記複数の関数の配置順序を処理装置で決定し、当該配置順序を示す関数配置情報を記憶装置に記憶する配置部と、
前記配置部により記憶された関数配置情報に基づき、前記オブジェクトファイルを処理装置でリンクして前記ロードモジュールを作成するロードモジュール作成部とを備えることを特徴とする。
【発明の効果】
【0007】
本発明の一の態様によれば、ロードモジュール作成装置において、配置部が、複数の関数の実行頻度を示す関数実行頻度情報に基づき、ロードモジュールにおける前記複数の関数の配置順序を決定し、ロードモジュール作成部が、当該配置順序を示す関数配置情報に基づき、オブジェクトファイルをリンクして前記ロードモジュールを作成することにより、通常の入力に対するプログラム実行の高速化を実現することが可能となる。
【発明を実施するための最良の形態】
【0008】
以下、本発明の実施の形態について、図を用いて説明する。
【0009】
実施の形態1.
図1は、本実施の形態に係るロードモジュール作成装置100の構成を示すブロック図である。
【0010】
図1において、ロードモジュール作成装置100は、コンパイラ110、リンカ120を備える。また、図示していないが、ロードモジュール作成装置100は、記憶装置、処理装置、入力装置、出力装置などのハードウェアを備えるものとする。
【0011】
ロードモジュール作成装置100は、例えば1つ又は複数のソースファイル131のユーザ入力を入力装置で受け付け、ソースファイル131を予め記憶装置に格納しておく。ソースファイル131では、複数の関数が定義される。
【0012】
ロードモジュール作成装置100において、コンパイラ110は、処理装置により動作し、記憶装置に格納されたソースファイル131から1つ又は複数のオブジェクトファイル132とマップファイル133を作成して記憶装置に格納する。オブジェクトファイル132には、ソースファイル131で定義された関数がシンボル情報として含まれる。マップファイル133には、各関数の名前、オブジェクトファイル132内での配置、サイズなどに関する情報が含まれる。
【0013】
ロードモジュール作成装置100において、リンカ120は、処理装置により動作し、記憶装置に格納されたオブジェクトファイル132とマップファイル133からロードモジュール134を作成して記憶装置に格納する。ロードモジュール134には、オブジェクトファイル132に含まれる関数が後述する関数配置処理により決定された順序で配置される。
【0014】
ロードモジュール作成装置100は、例えばコンパイラ110やリンカ120による処理の進行状況などを出力装置で画面表示する。また、ロードモジュール作成装置100は、記憶装置に格納されたロードモジュール134を処理装置により実行し、当該実行結果などを出力装置で画面表示する。
【0015】
リンカ120は、頻度記録部121、配置部122、ロードモジュール作成部123を備える。
【0016】
ロードモジュール作成装置100は、ソースファイル131以外にも、例えばシナリオファイル135のユーザ入力を入力装置で受け付け、シナリオファイル135を予め記憶装置に格納しておく。シナリオファイル135では、オブジェクトファイル132に含まれる関数に設定されるパラメータの設定値の組み合わせが定められる。各パラメータの設定値としては、ロードモジュール134に対して通常入力されるものを用いることが望ましい。
【0017】
リンカ120において、頻度記録部121は、オブジェクトファイル132からロードモジュール134(オブジェクトファイル132を実行可能な形式に変換した実行ファイルであればよい)を内部的に作成する。そして、頻度記録部121は、記憶装置に格納されたシナリオファイル135をもとにロードモジュール134を実行環境シミュレータで実行し、関数実行頻度を計測して関数実行頻度情報141を記憶装置に出力する。この処理を関数実行頻度計測処理(頻度記録処理の一例)という。このように、頻度記録部121は、少なくとも、オブジェクトファイル132に含まれる関数の実行頻度を示す関数実行頻度情報141を記憶装置に記憶する。本実施の形態では、頻度記録部121は、シナリオファイル135を入力し、オブジェクトファイル132を実行可能な形式に変換した実行ファイルを、シナリオファイル135を用いて処理装置で実行し、当該実行時における各関数の実行頻度を処理装置で計測する。そして、頻度記録部121は、当該実行頻度を示す関数実行頻度情報141を記憶装置に記憶する。
【0018】
リンカ120において、配置部122は、関数実行頻度情報141から各関数の配置順序を決定して関数配置情報142を記憶装置に出力する。この処理を関数配置処理(配置処理の一例)という。このように、配置部122は、頻度記録部121により記憶された関数実行頻度情報141に基づき、ロードモジュール134における各関数の配置順序を処理装置で決定する。そして、配置部122は、当該配置順序を示す関数配置情報142を記憶装置に記憶する。後述するが、本実施の形態では、配置部122は、頻度記録部121により記憶された関数実行頻度情報141に基づき、各関数が当該実行頻度の高い順に配置されるように、当該配置順序を決定する。
【0019】
リンカ120において、ロードモジュール作成部123は、関数配置情報142をもとにオブジェクトファイル132の関数配置を変更してロードモジュール134を作成する。この処理をロードモジュール作成処理という。このように、ロードモジュール作成部123は、配置部122により記憶された関数配置情報142に基づき、オブジェクトファイル132を処理装置でリンクしてロードモジュール134を作成する。
【0020】
本実施の形態では、ロードモジュール作成装置100が、通常の入力に対してプログラムを実行し、関数の実行頻度に関する情報を取得して、この情報に基づいて関数の配置を決定することにより、通常の入力に対するプログラム実行の高速化を実現することが可能となる。
【0021】
図2は、ロードモジュール作成装置100のハードウェア構成の一例を示す図である。
【0022】
図2において、ロードモジュール作成装置100は、コンピュータであり、CRT(Cathode・Ray・Tube)やLCD(液晶ディスプレイ)の表示画面を有する表示装置901、キーボード902(K/B)、マウス903、FDD904(Flexible・Disk・Drive)、CDD905(Compact・Disc・Drive)、プリンタ装置906などのハードウェアを備え、これらはケーブルや信号線で接続されている。
【0023】
ロードモジュール作成装置100は、プログラムを実行するCPU911を備えている。CPU911は、処理装置の一例である。CPU911は、バス912を介してROM913(Read・Only・Memory)、RAM914、通信ボード915、表示装置901、キーボード902、マウス903、FDD904、CDD905、プリンタ装置906、磁気ディスク装置920と接続され、これらのハードウェアデバイスを制御する。磁気ディスク装置920の代わりに、光ディスク装置、メモリカードリーダライタなどの記憶媒体が用いられてもよい。
【0024】
RAM914は、揮発性メモリの一例である。ROM913、FDD904、CDD905、磁気ディスク装置920の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置の一例である。通信ボード915、キーボード902、マウス903、FDD904、CDD905などは、入力装置の一例である。また、通信ボード915、表示装置901、プリンタ装置906などは、出力装置の一例である。
【0025】
通信ボード915は、LAN(ローカルエリアネットワーク)などに接続されている。通信ボード915は、LANに限らず、インターネット、あるいは、IP−VPN(Internet・Protocol・Virtual・Private・Network)、広域LAN、ATM(Asynchronous・Transfer・Mode)ネットワークなどのWAN(ワイドエリアネットワーク)などに接続されていても構わない。LAN、インターネット、WANは、ネットワークの一例である。
【0026】
磁気ディスク装置920には、OS921(オペレーティングシステム)、ウィンドウシステム922、プログラム群923、ファイル群924が記憶されている。プログラム群923のプログラムは、CPU911、OS921、ウィンドウシステム922により実行される。プログラム群923には、本実施の形態の説明において「〜部」として説明する機能を実行するプログラムが記憶されている。プログラムは、CPU911により読み出され実行される。また、ファイル群924には、本実施の形態の説明において、「〜データ」、「〜情報」、「〜ID(識別子)」、「〜フラグ」、「〜結果」として説明するデータや情報や信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」や「〜テーブル」の各項目として記憶されている。「〜ファイル」や「〜データベース」や「〜テーブル」は、ディスクやメモリなどの記憶媒体に記憶される。ディスクやメモリなどの記憶媒体に記憶されたデータや情報や信号値や変数値やパラメータは、読み書き回路を介してCPU911によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・制御・出力・印刷・表示などのCPU911の処理(動作)に用いられる。抽出・検索・参照・比較・演算・計算・制御・出力・印刷・表示などのCPU911の処理中、データや情報や信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
【0027】
また、本実施の形態の説明において用いるブロック図やフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号は、RAM914などのメモリ、FDD904のフレキシブルディスク(FD)、CDD905のコンパクトディスク(CD)、磁気ディスク装置920の磁気ディスク、その他光ディスク、ミニディスク(MD)、DVD(Digital・Versatile・Disc)などの記録媒体に記録される。また、データや信号は、バス912や信号線やケーブルその他の伝送媒体により伝送される。
【0028】
また、本実施の形態の説明において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜工程」、「〜手順」、「〜処理」であってもよい。即ち、「〜部」として説明するものは、ROM913に記憶されたファームウェアで実現されていても構わない。あるいは、ソフトウェアのみ、あるいは、素子・デバイス・基板・配線などのハードウェアのみ、あるいは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実現されていても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、DVDなどの記録媒体に記憶される。このプログラムはCPU911により読み出され、CPU911により実行される。即ち、プログラムは、本実施の形態の説明で述べる「〜部」としてコンピュータを機能させるものである。あるいは、本実施の形態の説明で述べる「〜部」の手順や方法をコンピュータに実行させるものである。
【0029】
図3は、ロードモジュール作成装置100が備えるリンカ120の動作(本実施の形態に係るロードモジュール作成方法)を示すフローチャートである。
【0030】
図3において、コンパイラ110は、既にソースファイル131からオブジェクトファイル132とマップファイル133を作成して磁気ディスク装置920(記憶装置の一例)に格納しているものとする。また、磁気ディスク装置920にはシナリオファイル135が格納されているものとする。
【0031】
ステップS101の関数実行頻度計測処理にて、リンカ120の頻度記録部121は、オブジェクトファイル132を磁気ディスク装置920から読み込んで実行可能なモジュールを内部的に作成し、それをCPU911(処理装置の一例)により内部的に実行して各関数の実行頻度を計測し、関数実行頻度情報141を出力する。ここでは、関数実行頻度情報141は、図4に例示するように、関数名と実行回数からなるデータである。頻度記録部121は、計測にあたっては実行環境に対する入力情報(ユーザ操作、受信データなど)が記述されたシナリオファイル135を磁気ディスク装置920から読み込んで、それに従って関数実行頻度計測処理を実行する。
【0032】
関数実行頻度計測処理にて、頻度記録部121は、オブジェクトファイル132から一時的にロードモジュール134を作成し、実行環境においてロードモジュール134を実行して関数実行頻度情報141を生成することも可能である。一時的なロードモジュール134を作成する際に、頻度記録部121は、オブジェクトファイル132の結合順序とマップファイル133から、ロードモジュール134内における各関数の先頭位置を計算し、これを用いて、実行環境のプロファイラ機能によって出力されるプログラムカウンタから実行中の関数を特定する。
【0033】
ステップS102の関数配置処理にて、リンカ120の配置部122は、関数実行頻度情報141を入力してCPU911により関数配置情報142を作成して出力する。ここでは、関数配置情報142は、図5に例示するように、関数名とページ番号からなるデータであり、ロードモジュール134をページサイズで区切った場合に、各関数が先頭から何番目のページに配置されるかを示す情報である。関数配置処理の詳細については図6を用いて説明する。
【0034】
ステップS103のロードモジュール作成処理にて、リンカ120のロードモジュール作成部123は、関数配置情報142をもとにCPU911によりオブジェクトファイル132の関数を並べ替えて配置し、シンボルの解決を行ってロードモジュール134を出力する。
【0035】
図6は、関数配置処理を示すフローチャートである。
【0036】
配置部122は、ステップS111では定数Pにページサイズを代入して初期化する。配置部122は、ステップS112では変数Nと変数Sを初期化する。変数Nはロードモジュール134をページサイズで区切った場合の各ページのページ番号を示すカウンタであり、変数SはN番目のページに配置済みの関数のサイズの合計である。ステップS113は各関数に対する処理を行うループの始まりであり、配置部122は、このループにて関数実行頻度情報141に記録された実行回数の多い関数から順に処理を行う。配置部122は、ステップS114では変数Sに処理対象の関数のサイズを加える。このとき、配置部122は、マップファイル133を磁気ディスク装置920から読み込んで関数のサイズを特定する。なお、マップファイル133には、関数名、オブジェクトファイル132内における各関数の先頭位置、関数のサイズなどのデータが含まれる。配置部122は、ステップS115では変数Sと定数Pを比較して変数Sが定数P以下であればステップS117にジャンプする。変数Sが定数Pより大きければN番目のページがいっぱいになったということであるから、配置部122は、ステップS116で変数Nを1増やして次のページを処理対象の関数の配置先とし、変数Sにその関数のサイズを代入する。一方、配置部122は、ステップS117では関数名とページ番号Nを関数配置情報142に追加する。配置部122は、ステップS118では関数実行頻度情報141の全ての関数に対して処理が終わったら、ループを終了する。
【0037】
以上のように、本実施の形態によれば、実行頻度の高い関数が少数のページに集められるため、通常のページングアルゴリズムを用いれば実行頻度の高いページほどRAM914に常駐する傾向が強くなり、実行頻度の低いページほどRAM914に常駐する傾向が弱くなるから、全体としてページフォルトの発生回数が削減されてロードモジュール134の実行速度が向上するとともに、OS921のページング処理負荷が軽減されてシステム全体の応答時間が短縮される。
【0038】
なお、以上の説明では、関数の実行頻度に着目してロードモジュール134作成時の関数の配置を決定したが、同様に、変数の参照(書き込みと読み出し)頻度に着目してロードモジュール134作成時の変数の配置を決定することも可能であり、関数の場合と同様の効果が得られる。
【0039】
この場合、リンカ120において、頻度記録部121は、少なくとも、関数実行頻度情報141に代えて、オブジェクトファイル132に含まれる変数の参照頻度を示す変数参照頻度情報を記憶装置に記憶する。本実施の形態の変形例として、頻度記録部121が、シナリオファイル135を入力し、オブジェクトファイル132を実行可能な形式に変換した実行ファイルを、シナリオファイル135を用いて処理装置で実行し、当該実行時における各変数の参照頻度を処理装置で計測するものとしてもよい。この例では、頻度記録部121は、当該参照頻度を示す変数参照頻度情報を記憶装置に記憶することになる。
【0040】
上記の場合、リンカ120において、配置部122は、頻度記録部121により記憶された変数参照頻度情報に基づき、ロードモジュール134における各変数の配置順序を処理装置で決定する。そして、配置部122は、関数配置情報142に代えて、当該配置順序を示す変数配置情報を記憶装置に記憶する。本実施の形態の変形例として、配置部122が、頻度記録部121により記憶された変数参照頻度情報に基づき、各変数が当該参照頻度の高い順に配置されるように、当該配置順序を決定するものとしてもよい。
【0041】
上記の場合、リンカ120において、ロードモジュール作成部123は、配置部122により記憶された変数配置情報に基づき、オブジェクトファイル132を処理装置でリンクしてロードモジュール134を作成する。
【0042】
以上のように、変数の参照頻度に着目してロードモジュール134作成時の変数の配置を決定する場合にも、本実施の形態によれば、参照頻度の高い変数が少数のページに集められるため、通常のページングアルゴリズムを用いれば参照頻度の高いページほどRAM914に常駐する傾向が強くなり、参照頻度の低いページほどRAM914に常駐する傾向が弱くなるから、全体としてページフォルトの発生回数が削減されてロードモジュール134の実行速度が向上するとともに、OS921のページング処理負荷が軽減されてシステム全体の応答時間が短縮される。
【0043】
以上、本実施の形態では、コンパイルしたオブジェクトファイル132をリンクしてロードモジュール134を作成する際に関数の配置を決定するロードモジュール作成方式であって、
(a)オブジェクトファイル132から実行時の関数実行頻度情報141を出力する関数実行頻度計測処理、
(b)関数実行頻度情報141から関数の配置順序を決定して関数配置情報142を出力する関数配置処理、
(c)関数配置情報142をもとにオブジェクトファイル132からロードモジュール134を作成するロードモジュール作成処理、
を実行するロードモジュール作成方式について説明した。
【0044】
また、本実施の形態では、コンパイルしたオブジェクトファイル132をリンクしてロードモジュール134を作成する際に変数の配置を決定するロードモジュール作成方式であって、
(a)オブジェクトファイル132から実行時の変数参照頻度情報を出力する変数参照頻度計測処理、
(b)変数参照頻度情報から変数の配置順序を決定して変数配置情報を出力する変数配置処理、
(c)変数配置情報をもとにオブジェクトファイル132からロードモジュール134を作成するロードモジュール作成処理、
を実行するロードモジュール作成方式について説明した。
【0045】
実施の形態2.
本実施の形態について、主に実施の形態1との差異を説明する。
【0046】
図7は、本実施の形態に係るロードモジュール作成装置100の構成を示すブロック図である。
【0047】
図7と図1の差異は、図1ではシナリオファイル135が1つであるのに対し、図7では複数のシナリオファイル135が与えられる点である。これらのシナリオファイル135では、オブジェクトファイル132に含まれる関数に設定されるパラメータの設定値の組み合わせとして互いに異なる組み合わせが定められる。つまり、各シナリオファイル135では、少なくとも1つのパラメータに他のシナリオファイル135と異なる設定値が定められている。
【0048】
リンカ120において、頻度記録部121は、各シナリオファイル135を入力し、オブジェクトファイル132を実行可能な形式に変換した実行ファイルを、各シナリオファイル135を用いて処理装置で実行し、当該実行時における各関数の実行頻度をシナリオファイル135ごとに処理装置で計測する。そして、頻度記録部121は、当該実行頻度をシナリオファイル135ごとに示す関数実行頻度情報141を記憶装置に記憶する。
【0049】
リンカ120において、配置部122は、頻度記録部121により記憶された関数実行頻度情報141に基づき、あるシナリオファイル135を用いたときにのみ実行される関数が同じシナリオファイル135を用いたときにのみ実行される他の関数と纏めて配置されるように、ロードモジュール134における各関数の配置順序を処理装置で決定する。そして、配置部122は、当該配置順序を示す関数配置情報142を記憶装置に記憶する。
【0050】
図7において、上記以外の構成要素については、図1と同じである。
【0051】
以下、ロードモジュール作成装置100が備えるリンカ120の動作(本実施の形態に係るロードモジュール作成方法)について、実施の形態1と同様に、図3を用いて説明する。
【0052】
図3において、コンパイラ110は、既にソースファイル131からオブジェクトファイル132とマップファイル133を作成して磁気ディスク装置920(記憶装置の一例)に格納しているものとする。また、磁気ディスク装置920には複数のシナリオファイル135が格納されているものとする。
【0053】
ステップS101の関数実行頻度計測処理にて、リンカ120の頻度記録部121は、オブジェクトファイル132を磁気ディスク装置920から読み込んで実行可能なモジュールを内部的に作成し、それをCPU911(処理装置の一例)により内部的に実行して各関数の実行頻度を計測し、関数実行頻度情報141を出力する。ここでは、関数実行頻度情報141は、図8に例示するように、関数名とシナリオごとの実行回数からなるデータである。頻度記録部121は、計測にあたっては実行環境に対する入力情報(ユーザ操作、受信データなど)が記述されたシナリオファイル135を磁気ディスク装置920から読み込んで、それに従って関数実行頻度計測処理を実行する。
【0054】
ステップS102の関数配置処理にて、リンカ120の配置部122は、関数実行頻度情報141を入力してCPU911により関数配置情報142を作成して出力する。ここでは、関数配置情報142は、図9に例示するように、関数名とページ番号からなるデータであり、ロードモジュール134をページサイズで区切った場合に、各関数が先頭から何番目のページに配置されるかを示す情報である。関数配置処理の詳細については図10を用いて説明する。
【0055】
ステップS103のロードモジュール作成処理にて、リンカ120のロードモジュール作成部123は、関数配置情報142をもとにCPU911によりオブジェクトファイル132の関数を並べ替えて配置し、シンボルの解決を行ってロードモジュール134を出力する。
【0056】
図10は、関数配置処理を示すフローチャートである。
【0057】
配置部122は、ステップS211では定数Pにページサイズを代入して初期化する。配置部122は、ステップS212では変数Nと変数Sを初期化する。変数Nはロードモジュール134をページサイズで区切った場合の各ページのページ番号を示すカウンタであり、変数SはN番目のページに配置済みの関数のサイズの合計である。ステップS213はシナリオごとに処理を行うループの始まりである。配置部122は、ステップS214ではシナリオ番号を変数Tに代入する。配置部122は、ステップS215ではシナリオTのときにのみ実行される関数を、実行回数の多い順に処理して、順にページに詰め込むように関数配置情報142に関数名と対応するページ番号を追加する。例えば、図8に例示した関数実行頻度情報141において、関数writeと関数readはシナリオ1のときにのみ実行されているのでページ番号1に配置される。同様に、関数setと関数fillと関数flashはシナリオ2のときにのみ実行されているのでページ番号2に配置される。このとき、もしシナリオ2のときにのみ実行されている関数のサイズの総和がページサイズを超える場合には実行回数の多い順に複数のページに分けて配置する。ステップS216はシナリオごとに処理を行うループの終わりである。配置部122は、ステップS217では上記ループの処理において関数配置情報142に追加されなかった関数を、実行関数の多い順に処理して、順にページに詰め込むように関数配置情報142に関数名と対応するページ番号を追加する。なお、ステップS215、S217にて配置部122が各関数の配置順序を決定する処理は、図6を用いて説明した実施の形態1における当該処理と同様である。
【0058】
以上のように、本実施の形態によれば、略同じタイミングで実行される頻度の高い関数、即ち、相互関連性の高い関数が同じページに集められるため、通常のページングアルゴリズムを用いれば実行頻度の高いページほどRAM914に常駐する傾向が強くなり、実行頻度の低いページほどRAM914に常駐する傾向が弱くなるから、全体としてページフォルトの発生回数が削減されてロードモジュール134の実行速度が向上するとともに、OS921のページング処理負荷が軽減されてシステム全体の応答時間が短縮される。
【0059】
なお、以上の説明では、関数の実行頻度に着目してロードモジュール134作成時の関数の配置を決定したが、本実施の形態においても、同様に、変数の参照(書き込みと読み出し)頻度に着目してロードモジュール134作成時の変数の配置を決定することも可能であり、関数の場合と同様の効果が得られる。
【0060】
以上、本発明の実施の形態について説明したが、これらのうち、2つ以上の実施の形態を組み合わせて実施しても構わない。あるいは、これらのうち、1つの実施の形態を部分的に実施しても構わない。あるいは、これらのうち、2つ以上の実施の形態を部分的に組み合わせて実施しても構わない。
【図面の簡単な説明】
【0061】
【図1】実施の形態1に係るロードモジュール作成装置の構成を示すブロック図である。
【図2】実施の形態1に係るロードモジュール作成装置のハードウェア構成の一例を示す図である。
【図3】実施の形態1に係るロードモジュール作成装置が備えるリンカの動作を示すフローチャートである。
【図4】実施の形態1に係る関数実行頻度情報の一例を示す表である。
【図5】実施の形態1に係る関数配置情報の一例を示す表である。
【図6】実施の形態1に係る関数配置処理を示すフローチャートである。
【図7】実施の形態2に係るロードモジュール作成装置の構成を示すブロック図である。
【図8】実施の形態2に係る関数実行頻度情報の一例を示す表である。
【図9】実施の形態2に係る関数配置情報の一例を示す表である。
【図10】実施の形態2に係る関数配置処理を示すフローチャートである。
【符号の説明】
【0062】
100 ロードモジュール作成装置、110 コンパイラ、120 リンカ、121 頻度記録部、122 配置部、123 ロードモジュール作成部、131 ソースファイル、132 オブジェクトファイル、133 マップファイル、134 ロードモジュール、135 シナリオファイル、141 関数実行頻度情報、142 関数配置情報、901 表示装置、902 キーボード、903 マウス、904 FDD、905 CDD、906 プリンタ装置、911 CPU、912 バス、913 ROM、914 RAM、915 通信ボード、920 磁気ディスク装置、921 OS、922 ウィンドウシステム、923 プログラム群、924 ファイル群。

【特許請求の範囲】
【請求項1】
複数の関数を含むオブジェクトファイルをリンクしてロードモジュールを作成するロードモジュール作成装置において、
前記複数の関数の実行頻度を示す関数実行頻度情報を記憶装置に記憶する頻度記録部と、
前記頻度記録部により記憶された関数実行頻度情報に基づき、前記ロードモジュールにおける前記複数の関数の配置順序を処理装置で決定し、当該配置順序を示す関数配置情報を記憶装置に記憶する配置部と、
前記配置部により記憶された関数配置情報に基づき、前記オブジェクトファイルを処理装置でリンクして前記ロードモジュールを作成するロードモジュール作成部とを備えることを特徴とするロードモジュール作成装置。
【請求項2】
前記頻度記録部は、前記複数の関数に設定されるパラメータの設定値の組み合わせを定めるシナリオファイルを入力し、前記オブジェクトファイルを実行可能な形式に変換した実行ファイルを、前記シナリオファイルを用いて処理装置で実行し、当該実行時における前記複数の関数の実行頻度を処理装置で計測し、当該実行頻度を示す関数実行頻度情報を記憶装置に記憶することを特徴とする請求項1に記載のロードモジュール作成装置。
【請求項3】
前記頻度記録部は、前記複数の関数に設定されるパラメータの設定値の組み合わせとして互いに異なる組み合わせを定める複数のシナリオファイルを入力し、前記実行ファイルを、各シナリオファイルを用いて処理装置で実行し、当該実行時における前記複数の関数の実行頻度をシナリオファイルごとに処理装置で計測し、当該実行頻度をシナリオファイルごとに示す関数実行頻度情報を記憶装置に記憶することを特徴とする請求項2に記載のロードモジュール作成装置。
【請求項4】
前記配置部は、前記頻度記録部により記憶された関数実行頻度情報に基づき、各関数が当該実行頻度の高い順に配置されるように、当該配置順序を決定することを特徴とする請求項1から3までのいずれかに記載のロードモジュール作成装置。
【請求項5】
前記配置部は、前記頻度記録部により記憶された関数実行頻度情報に基づき、あるシナリオファイルを用いたときにのみ実行される関数が同じシナリオファイルを用いたときにのみ実行される他の関数と纏めて配置されるように、当該配置順序を決定することを特徴とする請求項3に記載のロードモジュール作成装置。
【請求項6】
複数の変数を含むオブジェクトファイルをリンクしてロードモジュールを作成するロードモジュール作成装置において、
前記複数の変数の参照頻度を示す変数参照頻度情報を記憶装置に記憶する頻度記録部と、
前記頻度記録部により記憶された変数参照頻度情報に基づき、前記ロードモジュールにおける前記複数の変数の配置順序を処理装置で決定し、当該配置順序を示す変数配置情報を記憶装置に記憶する配置部と、
前記配置部により記憶された変数配置情報に基づき、前記オブジェクトファイルを処理装置でリンクして前記ロードモジュールを作成するロードモジュール作成部とを備えることを特徴とするロードモジュール作成装置。
【請求項7】
複数の関数を含むオブジェクトファイルをリンクしてロードモジュールを作成するロードモジュール作成方法において、
コンピュータの記憶装置が、前記複数の関数の実行頻度を示す関数実行頻度情報を記憶する第1ステップと、
コンピュータの処理装置が、前記第1ステップにより記憶された関数実行頻度情報に基づき、前記ロードモジュールにおける前記複数の関数の配置順序を決定する第2ステップと、
コンピュータの記憶装置が、前記第2ステップにより決定された配置順序を示す関数配置情報を記憶する第3ステップと、
コンピュータの処理装置が、前記第3ステップにより記憶された関数配置情報に基づき、前記オブジェクトファイルをリンクして前記ロードモジュールを作成する第4ステップとを備えることを特徴とするロードモジュール作成方法。
【請求項8】
複数の関数を含むオブジェクトファイルをリンクしてロードモジュールを作成するロードモジュール作成プログラムにおいて、
前記複数の関数の実行頻度を示す関数実行頻度情報を記憶装置に記憶する頻度記録処理と、
前記頻度記録処理により記憶された関数実行頻度情報に基づき、前記ロードモジュールにおける前記複数の関数の配置順序を処理装置で決定し、当該配置順序を示す関数配置情報を記憶装置に記憶する配置処理と、
前記配置処理により記憶された関数配置情報に基づき、前記オブジェクトファイルを処理装置でリンクして前記ロードモジュールを作成するロードモジュール作成処理とをコンピュータに実行させることを特徴とするロードモジュール作成プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate


【公開番号】特開2009−245151(P2009−245151A)
【公開日】平成21年10月22日(2009.10.22)
【国際特許分類】
【出願番号】特願2008−90814(P2008−90814)
【出願日】平成20年3月31日(2008.3.31)
【出願人】(000006013)三菱電機株式会社 (33,312)
【Fターム(参考)】