(57)【要約】【課題】通常の入力に対するプログラム実行の高速化を実現することを目的とする。【解決手段】頻度記録部１２１は、オブジェクトファイル１３２に含まれる関数の実行頻度を示す関数実行頻度情報１４１を記憶装置に記憶する。配置部１２２は、頻度記録部１２１により記憶された関数実行頻度情報１４１に基づき、各関数が当該実行頻度の高い順に配置されるように、ロードモジュール１３４における各関数の配置順序を処理装置で決定する。そして、配置部１２２は、当該配置順序を示す関数配置情報１４２を記憶装置に記憶する。ロードモジュール作成部１２３は、配置部１２２により記憶された関数配置情報１４２に基づき、オブジェクトファイル１３２を処理装置でリンクしてロードモジュール１３４を作成する。【選択図】図１
2009245151.tif 000002
【特許請求の範囲】
【請求項１】
複数の関数を含むオブジェクトファイルをリンクしてロードモジュールを作成するロードモジュール作成装置において、
前記複数の関数の実行頻度を示す関数実行頻度情報を記憶装置に記憶する頻度記録部と、
前記頻度記録部により記憶された関数実行頻度情報に基づき、前記ロードモジュールにおける前記複数の関数の配置順序を処理装置で決定し、当該配置順序を示す関数配置情報を記憶装置に記憶する配置部と、
前記配置部により記憶された関数配置情報に基づき、前記オブジェクトファイルを処理装置でリンクして前記ロードモジュールを作成するロードモジュール作成部とを備えることを特徴とするロードモジュール作成装置。
【請求項２】
前記頻度記録部は、前記複数の関数に設定されるパラメータの設定値の組み合わせを定めるシナリオファイルを入力し、前記オブジェクトファイルを実行可能な形式に変換した実行ファイルを、前記シナリオファイルを用いて処理装置で実行し、当該実行時における前記複数の関数の実行頻度を処理装置で計測し、当該実行頻度を示す関数実行頻度情報を記憶装置に記憶することを特徴とする請求項１に記載のロードモジュール作成装置。
【請求項３】
前記頻度記録部は、前記複数の関数に設定されるパラメータの設定値の組み合わせとして互いに異なる組み合わせを定める複数のシナリオファイルを入力し、前記実行ファイルを、各シナリオファイルを用いて処理装置で実行し、当該実行時における前記複数の関数の実行頻度をシナリオファイルごとに処理装置で計測し、当該実行頻度をシナリオファイルごとに示す関数実行頻度情報を記憶装置に記憶することを特徴とする請求項２に記載のロードモジュール作成装置。
【請求項４】
前記配置部は、前記頻度記録部により記憶された関数実行頻度情報に基づき、各関数が当該実行頻度の高い順に配置されるように、当該配置順序を決定することを特徴とする請求項１から３までのいずれかに記載のロードモジュール作成装置。
【請求項５】
前記配置部は、前記頻度記録部により記憶された関数実行頻度情報に基づき、あるシナリオファイルを用いたときにのみ実行される関数が同じシナリオファイルを用いたときにのみ実行される他の関数と纏めて配置されるように、当該配置順序を決定することを特徴とする請求項３に記載のロードモジュール作成装置。
【請求項６】
複数の変数を含むオブジェクトファイルをリンクしてロードモジュールを作成するロードモジュール作成装置において、
前記複数の変数の参照頻度を示す変数参照頻度情報を記憶装置に記憶する頻度記録部と、
前記頻度記録部により記憶された変数参照頻度情報に基づき、前記ロードモジュールにおける前記複数の変数の配置順序を処理装置で決定し、当該配置順序を示す変数配置情報を記憶装置に記憶する配置部と、
前記配置部により記憶された変数配置情報に基づき、前記オブジェクトファイルを処理装置でリンクして前記ロードモジュールを作成するロードモジュール作成部とを備えることを特徴とするロードモジュール作成装置。
【請求項７】
複数の関数を含むオブジェクトファイルをリンクしてロードモジュールを作成するロードモジュール作成方法において、
コンピュータの記憶装置が、前記複数の関数の実行頻度を示す関数実行頻度情報を記憶する第１ステップと、
コンピュータの処理装置が、前記第１ステップにより記憶された関数実行頻度情報に基づき、前記ロードモジュールにおける前記複数の関数の配置順序を決定する第２ステップと、
コンピュータの記憶装置が、前記第２ステップにより決定された配置順序を示す関数配置情報を記憶する第３ステップと、
コンピュータの処理装置が、前記第３ステップにより記憶された関数配置情報に基づき、前記オブジェクトファイルをリンクして前記ロードモジュールを作成する第４ステップとを備えることを特徴とするロードモジュール作成方法。
【請求項８】
複数の関数を含むオブジェクトファイルをリンクしてロードモジュールを作成するロードモジュール作成プログラムにおいて、
前記複数の関数の実行頻度を示す関数実行頻度情報を記憶装置に記憶する頻度記録処理と、
前記頻度記録処理により記憶された関数実行頻度情報に基づき、前記ロードモジュールにおける前記複数の関数の配置順序を処理装置で決定し、当該配置順序を示す関数配置情報を記憶装置に記憶する配置処理と、
前記配置処理により記憶された関数配置情報に基づき、前記オブジェクトファイルを処理装置でリンクして前記ロードモジュールを作成するロードモジュール作成処理とをコンピュータに実行させることを特徴とするロードモジュール作成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ロードモジュール作成装置及びロードモジュール作成方法及びロードモジュール作成プログラムに関するものである。
【背景技術】
【０００２】
一般の計算機システムでは、プログラムは不揮発性の記憶媒体に記録されるが、そのままではＣＰＵ（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ）から直接アクセスして実行することができない。そこで、プログラムの実行に先立ってページ単位でＲＡＭ（Ｒａｎｄｏｍ・Ａｃｃｅｓｓ・Ｍｅｍｏｒｙ）にコピーして実行する。このＲＡＭへのコピーをページングという。ＲＡＭを使い切った状態においてページングの要求があると、以前に使ったページを追い出して空き領域をつくり、実行するページをコピーして実行する。このとき、追い出すページを選択する方式としては、アクセスされなかった期間が最も長いページを追い出す方式が代表的である。
【０００３】
限られたＲＡＭ容量のもと、プログラムの実行を高速化するためには、ページング回数の削減が有効である。実行プログラム内の関数や変数の配置を変更すると、発生するページングの回数に影響がある。従来技術として、関数の呼び出し関係の解析結果をもとに関数の配置を変更する方式が開示されている（例えば、特許文献１参照）。
【特許文献１】特開平３−７７１３５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
上記の従来技術においては、ソースコードから関数の呼び出し関係を解析し、呼び出し関係にある関数同士が同じページに配置されるように関数の配置順序を並べ替えて、ページング回数の削減を狙っている。しかしながら、ソースコード上で呼び出し関係にあっても、実行時には呼び出されない場合もある。例えば、プログラムへの入力が異常な場合にのみ呼び出される異常処理関数は、通常の典型的な入力では呼び出されず、呼び出されない関数を同じページに配置されるように並び替えてもプログラム実行を高速化する効果は得られない。つまり、従来は、実際には呼び出されない関数が同じページに配置され、そのために、実際に呼び出される関数が追い出されて別のページに配置される、という課題があった。
【０００５】
本発明は、例えば、通常の入力に対するプログラム実行の高速化を実現することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一の態様に係るロードモジュール作成装置は、
複数の関数を含むオブジェクトファイルをリンクしてロードモジュールを作成するロードモジュール作成装置において、
前記複数の関数の実行頻度を示す関数実行頻度情報を記憶装置に記憶する頻度記録部と、
前記頻度記録部により記憶された関数実行頻度情報に基づき、前記ロードモジュールにおける前記複数の関数の配置順序を処理装置で決定し、当該配置順序を示す関数配置情報を記憶装置に記憶する配置部と、
前記配置部により記憶された関数配置情報に基づき、前記オブジェクトファイルを処理装置でリンクして前記ロードモジュールを作成するロードモジュール作成部とを備えることを特徴とする。
【発明の効果】
【０００７】
本発明の一の態様によれば、ロードモジュール作成装置において、配置部が、複数の関数の実行頻度を示す関数実行頻度情報に基づき、ロードモジュールにおける前記複数の関数の配置順序を決定し、ロードモジュール作成部が、当該配置順序を示す関数配置情報に基づき、オブジェクトファイルをリンクして前記ロードモジュールを作成することにより、通常の入力に対するプログラム実行の高速化を実現することが可能となる。
【発明を実施するための最良の形態】
【０００８】
以下、本発明の実施の形態について、図を用いて説明する。
【０００９】
実施の形態１．
図１は、本実施の形態に係るロードモジュール作成装置１００の構成を示すブロック図である。
【００１０】
図１において、ロードモジュール作成装置１００は、コンパイラ１１０、リンカ１２０を備える。また、図示していないが、ロードモジュール作成装置１００は、記憶装置、処理装置、入力装置、出力装置などのハードウェアを備えるものとする。
【００１１】
ロードモジュール作成装置１００は、例えば１つ又は複数のソースファイル１３１のユーザ入力を入力装置で受け付け、ソースファイル１３１を予め記憶装置に格納しておく。ソースファイル１３１では、複数の関数が定義される。
【００１２】
ロードモジュール作成装置１００において、コンパイラ１１０は、処理装置により動作し、記憶装置に格納されたソースファイル１３１から１つ又は複数のオブジェクトファイル１３２とマップファイル１３３を作成して記憶装置に格納する。オブジェクトファイル１３２には、ソースファイル１３１で定義された関数がシンボル情報として含まれる。マップファイル１３３には、各関数の名前、オブジェクトファイル１３２内での配置、サイズなどに関する情報が含まれる。
【００１３】
ロードモジュール作成装置１００において、リンカ１２０は、処理装置により動作し、記憶装置に格納されたオブジェクトファイル１３２とマップファイル１３３からロードモジュール１３４を作成して記憶装置に格納する。ロードモジュール１３４には、オブジェクトファイル１３２に含まれる関数が後述する関数配置処理により決定された順序で配置される。
【００１４】
ロードモジュール作成装置１００は、例えばコンパイラ１１０やリンカ１２０による処理の進行状況などを出力装置で画面表示する。また、ロードモジュール作成装置１００は、記憶装置に格納されたロードモジュール１３４を処理装置により実行し、当該実行結果などを出力装置で画面表示する。
【００１５】
リンカ１２０は、頻度記録部１２１、配置部１２２、ロードモジュール作成部１２３を備える。
【００１６】
ロードモジュール作成装置１００は、ソースファイル１３１以外にも、例えばシナリオファイル１３５のユーザ入力を入力装置で受け付け、シナリオファイル１３５を予め記憶装置に格納しておく。シナリオファイル１３５では、オブジェクトファイル１３２に含まれる関数に設定されるパラメータの設定値の組み合わせが定められる。各パラメータの設定値としては、ロードモジュール１３４に対して通常入力されるものを用いることが望ましい。
【００１７】
リンカ１２０において、頻度記録部１２１は、オブジェクトファイル１３２からロードモジュール１３４（オブジェクトファイル１３２を実行可能な形式に変換した実行ファイルであればよい）を内部的に作成する。そして、頻度記録部１２１は、記憶装置に格納されたシナリオファイル１３５をもとにロードモジュール１３４を実行環境シミュレータで実行し、関数実行頻度を計測して関数実行頻度情報１４１を記憶装置に出力する。この処理を関数実行頻度計測処理（頻度記録処理の一例）という。このように、頻度記録部１２１は、少なくとも、オブジェクトファイル１３２に含まれる関数の実行頻度を示す関数実行頻度情報１４１を記憶装置に記憶する。本実施の形態では、頻度記録部１２１は、シナリオファイル１３５を入力し、オブジェクトファイル１３２を実行可能な形式に変換した実行ファイルを、シナリオファイル１３５を用いて処理装置で実行し、当該実行時における各関数の実行頻度を処理装置で計測する。そして、頻度記録部１２１は、当該実行頻度を示す関数実行頻度情報１４１を記憶装置に記憶する。
【００１８】
リンカ１２０において、配置部１２２は、関数実行頻度情報１４１から各関数の配置順序を決定して関数配置情報１４２を記憶装置に出力する。この処理を関数配置処理（配置処理の一例）という。このように、配置部１２２は、頻度記録部１２１により記憶された関数実行頻度情報１４１に基づき、ロードモジュール１３４における各関数の配置順序を処理装置で決定する。そして、配置部１２２は、当該配置順序を示す関数配置情報１４２を記憶装置に記憶する。後述するが、本実施の形態では、配置部１２２は、頻度記録部１２１により記憶された関数実行頻度情報１４１に基づき、各関数が当該実行頻度の高い順に配置されるように、当該配置順序を決定する。
【００１９】
リンカ１２０において、ロードモジュール作成部１２３は、関数配置情報１４２をもとにオブジェクトファイル１３２の関数配置を変更してロードモジュール１３４を作成する。この処理をロードモジュール作成処理という。このように、ロードモジュール作成部１２３は、配置部１２２により記憶された関数配置情報１４２に基づき、オブジェクトファイル１３２を処理装置でリンクしてロードモジュール１３４を作成する。
【００２０】
本実施の形態では、ロードモジュール作成装置１００が、通常の入力に対してプログラムを実行し、関数の実行頻度に関する情報を取得して、この情報に基づいて関数の配置を決定することにより、通常の入力に対するプログラム実行の高速化を実現することが可能となる。
【００２１】
図２は、ロードモジュール作成装置１００のハードウェア構成の一例を示す図である。
【００２２】
図２において、ロードモジュール作成装置１００は、コンピュータであり、ＣＲＴ（Ｃａｔｈｏｄｅ・Ｒａｙ・Ｔｕｂｅ）やＬＣＤ（液晶ディスプレイ）の表示画面を有する表示装置９０１、キーボード９０２（Ｋ／Ｂ）、マウス９０３、ＦＤＤ９０４（Ｆｌｅｘｉｂｌｅ・Ｄｉｓｋ・Ｄｒｉｖｅ）、ＣＤＤ９０５（Ｃｏｍｐａｃｔ・Ｄｉｓｃ・Ｄｒｉｖｅ）、プリンタ装置９０６などのハードウェアを備え、これらはケーブルや信号線で接続されている。
【００２３】
ロードモジュール作成装置１００は、プログラムを実行するＣＰＵ９１１を備えている。ＣＰＵ９１１は、処理装置の一例である。ＣＰＵ９１１は、バス９１２を介してＲＯＭ９１３（Ｒｅａｄ・Ｏｎｌｙ・Ｍｅｍｏｒｙ）、ＲＡＭ９１４、通信ボード９１５、表示装置９０１、キーボード９０２、マウス９０３、ＦＤＤ９０４、ＣＤＤ９０５、プリンタ装置９０６、磁気ディスク装置９２０と接続され、これらのハードウェアデバイスを制御する。磁気ディスク装置９２０の代わりに、光ディスク装置、メモリカードリーダライタなどの記憶媒体が用いられてもよい。
【００２４】
ＲＡＭ９１４は、揮発性メモリの一例である。ＲＯＭ９１３、ＦＤＤ９０４、ＣＤＤ９０５、磁気ディスク装置９２０の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置の一例である。通信ボード９１５、キーボード９０２、マウス９０３、ＦＤＤ９０４、ＣＤＤ９０５などは、入力装置の一例である。また、通信ボード９１５、表示装置９０１、プリンタ装置９０６などは、出力装置の一例である。
【００２５】
通信ボード９１５は、ＬＡＮ（ローカルエリアネットワーク）などに接続されている。通信ボード９１５は、ＬＡＮに限らず、インターネット、あるいは、ＩＰ−ＶＰＮ（Ｉｎｔｅｒｎｅｔ・Ｐｒｏｔｏｃｏｌ・Ｖｉｒｔｕａｌ・Ｐｒｉｖａｔｅ・Ｎｅｔｗｏｒｋ）、広域ＬＡＮ、ＡＴＭ（Ａｓｙｎｃｈｒｏｎｏｕｓ・Ｔｒａｎｓｆｅｒ・Ｍｏｄｅ）ネットワークなどのＷＡＮ（ワイドエリアネットワーク）などに接続されていても構わない。ＬＡＮ、インターネット、ＷＡＮは、ネットワークの一例である。
【００２６】
磁気ディスク装置９２０には、ＯＳ９２１（オペレーティングシステム）、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。プログラム群９２３のプログラムは、ＣＰＵ９１１、ＯＳ９２１、ウィンドウシステム９２２により実行される。プログラム群９２３には、本実施の形態の説明において「〜部」として説明する機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ９１１により読み出され実行される。また、ファイル群９２４には、本実施の形態の説明において、「〜データ」、「〜情報」、「〜ＩＤ（識別子）」、「〜フラグ」、「〜結果」として説明するデータや情報や信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」や「〜テーブル」の各項目として記憶されている。「〜ファイル」や「〜データベース」や「〜テーブル」は、ディスクやメモリなどの記憶媒体に記憶される。ディスクやメモリなどの記憶媒体に記憶されたデータや情報や信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・制御・出力・印刷・表示などのＣＰＵ９１１の処理（動作）に用いられる。抽出・検索・参照・比較・演算・計算・制御・出力・印刷・表示などのＣＰＵ９１１の処理中、データや情報や信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
【００２７】
また、本実施の形態の説明において用いるブロック図やフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号は、ＲＡＭ９１４などのメモリ、ＦＤＤ９０４のフレキシブルディスク（ＦＤ）、ＣＤＤ９０５のコンパクトディスク（ＣＤ）、磁気ディスク装置９２０の磁気ディスク、その他光ディスク、ミニディスク（ＭＤ）、ＤＶＤ（Ｄｉｇｉｔａｌ・Ｖｅｒｓａｔｉｌｅ・Ｄｉｓｃ）などの記録媒体に記録される。また、データや信号は、バス９１２や信号線やケーブルその他の伝送媒体により伝送される。
【００２８】
また、本実施の形態の説明において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜工程」、「〜手順」、「〜処理」であってもよい。即ち、「〜部」として説明するものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。あるいは、ソフトウェアのみ、あるいは、素子・デバイス・基板・配線などのハードウェアのみ、あるいは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実現されていても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、ＤＶＤなどの記録媒体に記憶される。このプログラムはＣＰＵ９１１により読み出され、ＣＰＵ９１１により実行される。即ち、プログラムは、本実施の形態の説明で述べる「〜部」としてコンピュータを機能させるものである。あるいは、本実施の形態の説明で述べる「〜部」の手順や方法をコンピュータに実行させるものである。
【００２９】
図３は、ロードモジュール作成装置１００が備えるリンカ１２０の動作（本実施の形態に係るロードモジュール作成方法）を示すフローチャートである。
【００３０】
図３において、コンパイラ１１０は、既にソースファイル１３１からオブジェクトファイル１３２とマップファイル１３３を作成して磁気ディスク装置９２０（記憶装置の一例）に格納しているものとする。また、磁気ディスク装置９２０にはシナリオファイル１３５が格納されているものとする。
【００３１】
ステップＳ１０１の関数実行頻度計測処理にて、リンカ１２０の頻度記録部１２１は、オブジェクトファイル１３２を磁気ディスク装置９２０から読み込んで実行可能なモジュールを内部的に作成し、それをＣＰＵ９１１（処理装置の一例）により内部的に実行して各関数の実行頻度を計測し、関数実行頻度情報１４１を出力する。ここでは、関数実行頻度情報１４１は、図４に例示するように、関数名と実行回数からなるデータである。頻度記録部１２１は、計測にあたっては実行環境に対する入力情報（ユーザ操作、受信データなど）が記述されたシナリオファイル１３５を磁気ディスク装置９２０から読み込んで、それに従って関数実行頻度計測処理を実行する。
【００３２】
関数実行頻度計測処理にて、頻度記録部１２１は、オブジェクトファイル１３２から一時的にロードモジュール１３４を作成し、実行環境においてロードモジュール１３４を実行して関数実行頻度情報１４１を生成することも可能である。一時的なロードモジュール１３４を作成する際に、頻度記録部１２１は、オブジェクトファイル１３２の結合順序とマップファイル１３３から、ロードモジュール１３４内における各関数の先頭位置を計算し、これを用いて、実行環境のプロファイラ機能によって出力されるプログラムカウンタから実行中の関数を特定する。
【００３３】
ステップＳ１０２の関数配置処理にて、リンカ１２０の配置部１２２は、関数実行頻度情報１４１を入力してＣＰＵ９１１により関数配置情報１４２を作成して出力する。ここでは、関数配置情報１４２は、図５に例示するように、関数名とページ番号からなるデータであり、ロードモジュール１３４をページサイズで区切った場合に、各関数が先頭から何番目のページに配置されるかを示す情報である。関数配置処理の詳細については図６を用いて説明する。
【００３４】
ステップＳ１０３のロードモジュール作成処理にて、リンカ１２０のロードモジュール作成部１２３は、関数配置情報１４２をもとにＣＰＵ９１１によりオブジェクトファイル１３２の関数を並べ替えて配置し、シンボルの解決を行ってロードモジュール１３４を出力する。
【００３５】
図６は、関数配置処理を示すフローチャートである。
【００３６】
配置部１２２は、ステップＳ１１１では定数Ｐにページサイズを代入して初期化する。配置部１２２は、ステップＳ１１２では変数Ｎと変数Ｓを初期化する。変数Ｎはロードモジュール１３４をページサイズで区切った場合の各ページのページ番号を示すカウンタであり、変数ＳはＮ番目のページに配置済みの関数のサイズの合計である。ステップＳ１１３は各関数に対する処理を行うループの始まりであり、配置部１２２は、このループにて関数実行頻度情報１４１に記録された実行回数の多い関数から順に処理を行う。配置部１２２は、ステップＳ１１４では変数Ｓに処理対象の関数のサイズを加える。このとき、配置部１２２は、マップファイル１３３を磁気ディスク装置９２０から読み込んで関数のサイズを特定する。なお、マップファイル１３３には、関数名、オブジェクトファイル１３２内における各関数の先頭位置、関数のサイズなどのデータが含まれる。配置部１２２は、ステップＳ１１５では変数Ｓと定数Ｐを比較して変数Ｓが定数Ｐ以下であればステップＳ１１７にジャンプする。変数Ｓが定数Ｐより大きければＮ番目のページがいっぱいになったということであるから、配置部１２２は、ステップＳ１１６で変数Ｎを１増やして次のページを処理対象の関数の配置先とし、変数Ｓにその関数のサイズを代入する。一方、配置部１２２は、ステップＳ１１７では関数名とページ番号Ｎを関数配置情報１４２に追加する。配置部１２２は、ステップＳ１１８では関数実行頻度情報１４１の全ての関数に対して処理が終わったら、ループを終了する。
【００３７】
以上のように、本実施の形態によれば、実行頻度の高い関数が少数のページに集められるため、通常のページングアルゴリズムを用いれば実行頻度の高いページほどＲＡＭ９１４に常駐する傾向が強くなり、実行頻度の低いページほどＲＡＭ９１４に常駐する傾向が弱くなるから、全体としてページフォルトの発生回数が削減されてロードモジュール１３４の実行速度が向上するとともに、ＯＳ９２１のページング処理負荷が軽減されてシステム全体の応答時間が短縮される。
【００３８】
なお、以上の説明では、関数の実行頻度に着目してロードモジュール１３４作成時の関数の配置を決定したが、同様に、変数の参照（書き込みと読み出し）頻度に着目してロードモジュール１３４作成時の変数の配置を決定することも可能であり、関数の場合と同様の効果が得られる。
【００３９】
この場合、リンカ１２０において、頻度記録部１２１は、少なくとも、関数実行頻度情報１４１に代えて、オブジェクトファイル１３２に含まれる変数の参照頻度を示す変数参照頻度情報を記憶装置に記憶する。本実施の形態の変形例として、頻度記録部１２１が、シナリオファイル１３５を入力し、オブジェクトファイル１３２を実行可能な形式に変換した実行ファイルを、シナリオファイル１３５を用いて処理装置で実行し、当該実行時における各変数の参照頻度を処理装置で計測するものとしてもよい。この例では、頻度記録部１２１は、当該参照頻度を示す変数参照頻度情報を記憶装置に記憶することになる。
【００４０】
上記の場合、リンカ１２０において、配置部１２２は、頻度記録部１２１により記憶された変数参照頻度情報に基づき、ロードモジュール１３４における各変数の配置順序を処理装置で決定する。そして、配置部１２２は、関数配置情報１４２に代えて、当該配置順序を示す変数配置情報を記憶装置に記憶する。本実施の形態の変形例として、配置部１２２が、頻度記録部１２１により記憶された変数参照頻度情報に基づき、各変数が当該参照頻度の高い順に配置されるように、当該配置順序を決定するものとしてもよい。
【００４１】
上記の場合、リンカ１２０において、ロードモジュール作成部１２３は、配置部１２２により記憶された変数配置情報に基づき、オブジェクトファイル１３２を処理装置でリンクしてロードモジュール１３４を作成する。
【００４２】
以上のように、変数の参照頻度に着目してロードモジュール１３４作成時の変数の配置を決定する場合にも、本実施の形態によれば、参照頻度の高い変数が少数のページに集められるため、通常のページングアルゴリズムを用いれば参照頻度の高いページほどＲＡＭ９１４に常駐する傾向が強くなり、参照頻度の低いページほどＲＡＭ９１４に常駐する傾向が弱くなるから、全体としてページフォルトの発生回数が削減されてロードモジュール１３４の実行速度が向上するとともに、ＯＳ９２１のページング処理負荷が軽減されてシステム全体の応答時間が短縮される。
【００４３】
以上、本実施の形態では、コンパイルしたオブジェクトファイル１３２をリンクしてロードモジュール１３４を作成する際に関数の配置を決定するロードモジュール作成方式であって、
（ａ）オブジェクトファイル１３２から実行時の関数実行頻度情報１４１を出力する関数実行頻度計測処理、
（ｂ）関数実行頻度情報１４１から関数の配置順序を決定して関数配置情報１４２を出力する関数配置処理、
（ｃ）関数配置情報１４２をもとにオブジェクトファイル１３２からロードモジュール１３４を作成するロードモジュール作成処理、
を実行するロードモジュール作成方式について説明した。
【００４４】
また、本実施の形態では、コンパイルしたオブジェクトファイル１３２をリンクしてロードモジュール１３４を作成する際に変数の配置を決定するロードモジュール作成方式であって、
（ａ）オブジェクトファイル１３２から実行時の変数参照頻度情報を出力する変数参照頻度計測処理、
（ｂ）変数参照頻度情報から変数の配置順序を決定して変数配置情報を出力する変数配置処理、
（ｃ）変数配置情報をもとにオブジェクトファイル１３２からロードモジュール１３４を作成するロードモジュール作成処理、
を実行するロードモジュール作成方式について説明した。
【００４５】
実施の形態２．
本実施の形態について、主に実施の形態１との差異を説明する。
【００４６】
図７は、本実施の形態に係るロードモジュール作成装置１００の構成を示すブロック図である。
【００４７】
図７と図１の差異は、図１ではシナリオファイル１３５が１つであるのに対し、図７では複数のシナリオファイル１３５が与えられる点である。これらのシナリオファイル１３５では、オブジェクトファイル１３２に含まれる関数に設定されるパラメータの設定値の組み合わせとして互いに異なる組み合わせが定められる。つまり、各シナリオファイル１３５では、少なくとも１つのパラメータに他のシナリオファイル１３５と異なる設定値が定められている。
【００４８】
リンカ１２０において、頻度記録部１２１は、各シナリオファイル１３５を入力し、オブジェクトファイル１３２を実行可能な形式に変換した実行ファイルを、各シナリオファイル１３５を用いて処理装置で実行し、当該実行時における各関数の実行頻度をシナリオファイル１３５ごとに処理装置で計測する。そして、頻度記録部１２１は、当該実行頻度をシナリオファイル１３５ごとに示す関数実行頻度情報１４１を記憶装置に記憶する。
【００４９】
リンカ１２０において、配置部１２２は、頻度記録部１２１により記憶された関数実行頻度情報１４１に基づき、あるシナリオファイル１３５を用いたときにのみ実行される関数が同じシナリオファイル１３５を用いたときにのみ実行される他の関数と纏めて配置されるように、ロードモジュール１３４における各関数の配置順序を処理装置で決定する。そして、配置部１２２は、当該配置順序を示す関数配置情報１４２を記憶装置に記憶する。
【００５０】
図７において、上記以外の構成要素については、図１と同じである。
【００５１】
以下、ロードモジュール作成装置１００が備えるリンカ１２０の動作（本実施の形態に係るロードモジュール作成方法）について、実施の形態１と同様に、図３を用いて説明する。
【００５２】
図３において、コンパイラ１１０は、既にソースファイル１３１からオブジェクトファイル１３２とマップファイル１３３を作成して磁気ディスク装置９２０（記憶装置の一例）に格納しているものとする。また、磁気ディスク装置９２０には複数のシナリオファイル１３５が格納されているものとする。
【００５３】
ステップＳ１０１の関数実行頻度計測処理にて、リンカ１２０の頻度記録部１２１は、オブジェクトファイル１３２を磁気ディスク装置９２０から読み込んで実行可能なモジュールを内部的に作成し、それをＣＰＵ９１１（処理装置の一例）により内部的に実行して各関数の実行頻度を計測し、関数実行頻度情報１４１を出力する。ここでは、関数実行頻度情報１４１は、図８に例示するように、関数名とシナリオごとの実行回数からなるデータである。頻度記録部１２１は、計測にあたっては実行環境に対する入力情報（ユーザ操作、受信データなど）が記述されたシナリオファイル１３５を磁気ディスク装置９２０から読み込んで、それに従って関数実行頻度計測処理を実行する。
【００５４】
ステップＳ１０２の関数配置処理にて、リンカ１２０の配置部１２２は、関数実行頻度情報１４１を入力してＣＰＵ９１１により関数配置情報１４２を作成して出力する。ここでは、関数配置情報１４２は、図９に例示するように、関数名とページ番号からなるデータであり、ロードモジュール１３４をページサイズで区切った場合に、各関数が先頭から何番目のページに配置されるかを示す情報である。関数配置処理の詳細については図１０を用いて説明する。
【００５５】
ステップＳ１０３のロードモジュール作成処理にて、リンカ１２０のロードモジュール作成部１２３は、関数配置情報１４２をもとにＣＰＵ９１１によりオブジェクトファイル１３２の関数を並べ替えて配置し、シンボルの解決を行ってロードモジュール１３４を出力する。
【００５６】
図１０は、関数配置処理を示すフローチャートである。
【００５７】
配置部１２２は、ステップＳ２１１では定数Ｐにページサイズを代入して初期化する。配置部１２２は、ステップＳ２１２では変数Ｎと変数Ｓを初期化する。変数Ｎはロードモジュール１３４をページサイズで区切った場合の各ページのページ番号を示すカウンタであり、変数ＳはＮ番目のページに配置済みの関数のサイズの合計である。ステップＳ２１３はシナリオごとに処理を行うループの始まりである。配置部１２２は、ステップＳ２１４ではシナリオ番号を変数Ｔに代入する。配置部１２２は、ステップＳ２１５ではシナリオＴのときにのみ実行される関数を、実行回数の多い順に処理して、順にページに詰め込むように関数配置情報１４２に関数名と対応するページ番号を追加する。例えば、図８に例示した関数実行頻度情報１４１において、関数ｗｒｉｔｅと関数ｒｅａｄはシナリオ１のときにのみ実行されているのでページ番号１に配置される。同様に、関数ｓｅｔと関数ｆｉｌｌと関数ｆｌａｓｈはシナリオ２のときにのみ実行されているのでページ番号２に配置される。このとき、もしシナリオ２のときにのみ実行されている関数のサイズの総和がページサイズを超える場合には実行回数の多い順に複数のページに分けて配置する。ステップＳ２１６はシナリオごとに処理を行うループの終わりである。配置部１２２は、ステップＳ２１７では上記ループの処理において関数配置情報１４２に追加されなかった関数を、実行関数の多い順に処理して、順にページに詰め込むように関数配置情報１４２に関数名と対応するページ番号を追加する。なお、ステップＳ２１５、Ｓ２１７にて配置部１２２が各関数の配置順序を決定する処理は、図６を用いて説明した実施の形態１における当該処理と同様である。
【００５８】
以上のように、本実施の形態によれば、略同じタイミングで実行される頻度の高い関数、即ち、相互関連性の高い関数が同じページに集められるため、通常のページングアルゴリズムを用いれば実行頻度の高いページほどＲＡＭ９１４に常駐する傾向が強くなり、実行頻度の低いページほどＲＡＭ９１４に常駐する傾向が弱くなるから、全体としてページフォルトの発生回数が削減されてロードモジュール１３４の実行速度が向上するとともに、ＯＳ９２１のページング処理負荷が軽減されてシステム全体の応答時間が短縮される。
【００５９】
なお、以上の説明では、関数の実行頻度に着目してロードモジュール１３４作成時の関数の配置を決定したが、本実施の形態においても、同様に、変数の参照（書き込みと読み出し）頻度に着目してロードモジュール１３４作成時の変数の配置を決定することも可能であり、関数の場合と同様の効果が得られる。
【００６０】
以上、本発明の実施の形態について説明したが、これらのうち、２つ以上の実施の形態を組み合わせて実施しても構わない。あるいは、これらのうち、１つの実施の形態を部分的に実施しても構わない。あるいは、これらのうち、２つ以上の実施の形態を部分的に組み合わせて実施しても構わない。
【図面の簡単な説明】
【００６１】
【図１】実施の形態１に係るロードモジュール作成装置の構成を示すブロック図である。
【図２】実施の形態１に係るロードモジュール作成装置のハードウェア構成の一例を示す図である。
【図３】実施の形態１に係るロードモジュール作成装置が備えるリンカの動作を示すフローチャートである。
【図４】実施の形態１に係る関数実行頻度情報の一例を示す表である。
【図５】実施の形態１に係る関数配置情報の一例を示す表である。
【図６】実施の形態１に係る関数配置処理を示すフローチャートである。
【図７】実施の形態２に係るロードモジュール作成装置の構成を示すブロック図である。
【図８】実施の形態２に係る関数実行頻度情報の一例を示す表である。
【図９】実施の形態２に係る関数配置情報の一例を示す表である。
【図１０】実施の形態２に係る関数配置処理を示すフローチャートである。
【符号の説明】
【００６２】
１００  ロードモジュール作成装置、１１０  コンパイラ、１２０  リンカ、１２１  頻度記録部、１２２  配置部、１２３  ロードモジュール作成部、１３１  ソースファイル、１３２  オブジェクトファイル、１３３  マップファイル、１３４  ロードモジュール、１３５  シナリオファイル、１４１  関数実行頻度情報、１４２  関数配置情報、９０１  表示装置、９０２  キーボード、９０３  マウス、９０４  ＦＤＤ、９０５  ＣＤＤ、９０６  プリンタ装置、９１１  ＣＰＵ、９１２  バス、９１３  ＲＯＭ、９１４  ＲＡＭ、９１５  通信ボード、９２０  磁気ディスク装置、９２１  ＯＳ、９２２  ウィンドウシステム、９２３  プログラム群、９２４  ファイル群。
【図１】
2009245151.tif 000003
【図２】
2009245151.tif 000004
【図３】
2009245151.tif 000005
【図４】
2009245151.tif 000006
【図５】
2009245151.tif 000007
【図６】
2009245151.tif 000008
【図７】
2009245151.tif 000009
【図８】
2009245151.tif 000010
【図９】
2009245151.tif 000011
【図１０】
2009245151.tif 000012