(57)【特許請求の範囲】
【請求項１】
メモリ領域を予め設定された固定長サイズのセグメントに分割し、分割したセグメントにオブジェクトコードを割り当てて配置したときの当該オブジェクトコードが割り当てられたセグメントの先頭セグメント番号およびセグメント数を、当該オブジェクトコードが割り当てられていない空き領域となるセグメントの先頭セグメント番号およびセグメント数と共に管理するメモリ配置管理テーブルと、
前記オブジェクトコードが更新される際、更新後のオブジェクトコードのオブジェクトサイズから変更後のオブジェクトコードに割り当てられるセグメントのセグメント数を計算し、変更後のセグメント数が変更前のセグメント数よりも大きいとき、変更後のオブジェクトコードを変更後のセグメント数以上の空き領域となるセグメントに移動し、変更後のセグメント数が変更前のセグメント数以下のとき、変更後のオブジェクトコードをその変更前のセグメント内に収めるように前記メモリ配置管理テーブルを更新する管理テーブル更新部と、
更新された前記メモリ配置管理テーブルから、前記オブジェクトコードのメモリ配置を設定するためのオブジェクトアドレスを含むメモリ配置設定ファイルを生成する設定ファイル生成部とを有することを特徴とするメモリ配置管理装置。
【請求項２】
前記管理テーブル更新部は、変更後のセグメント数が変更前のセグメント数より小さいとき、変更後のオブジェクトコードを、変更前のセグメントの内、先頭セグメントから変更後のセグメント数分のセグメントに収め、その残りのセグメントを空き領域とするように前記メモリ配置管理テーブルを更新することを特徴とする請求項１に記載のメモリ配置管理装置。
【請求項３】
前記メモリ配置管理テーブルは、前記オブジェクトコードが割り当てられたセグメントの場合、当該オブジェクトコードのオブジェクト名に対応付けて、前記先頭セグメント番号およびセグメント数を管理すると共に、前記空き領域となるセグメントの場合、前記オブジェクトコードのオブジェクト名をｎｕｌｌとし、当該ｎｕｌｌに対応付けて、前記先頭セグメント番号およびセグメント数を管理することを特徴とする請求項１又は２に記載のメモリ配置管理装置。
【請求項４】
前記セグメントの固定長サイズは、キャッシュメモリのキャッシュラインサイズに予め設定されることを特徴とする請求項１から３のいずれかに記載のメモリ配置管理装置。
【請求項５】
前記オブジェクトコードは、オペレーティングシステムを構成するオブジェクトコードであることを特徴とする請求項１から４のいずれかに記載のメモリ配置管理装置。
【請求項６】
前記オブジェクトコードは、前記オペレーティングシステムの障害解析のための情報採取処理を行うプローブが埋め込まれていることを特徴とする請求項５に記載のメモリ配置管理装置。
【請求項７】
メモリ配置管理テーブルが、メモリ領域を固定長サイズのセグメントに分割し、分割したセグメントにオブジェクトコードを割り当てて配置したときの当該オブジェクトコードが割り当てられたセグメントの先頭セグメント番号およびセグメント数を、当該オブジェクトコードが割り当てられていない空き領域となるセグメントの先頭セグメント番号およびセグメント数と共に管理し、
管理テーブル更新部が、前記オブジェクトコードが更新される際、更新後のオブジェクトコードのオブジェクトサイズから変更後のオブジェクトコードに割り当てられるセグメントのセグメント数を計算し、変更後のセグメント数が変更前のセグメント数よりも大きいとき、変更後のオブジェクトコードを変更後のセグメント数以上の空き領域となるセグメントに移動し、変更後のセグメント数が変更前のセグメント数以下のとき、変更後のオブジェクトコードをその変更前のセグメント内に収めるように前記メモリ配置管理テーブルを更新し、
設定ファイル生成部が、更新された前記メモリ配置管理テーブルから、前記オブジェクトコードのメモリ配置を設定するためのオブジェクトアドレスを含むメモリ配置設定ファイルを生成することを特徴とするメモリ配置管理方法。
【請求項８】
コンピュータを、
メモリ領域を固定長サイズのセグメントに分割し、分割したセグメントにオブジェクトコードを割り当てて配置したときの当該オブジェクトコードが割り当てられたセグメントの先頭セグメント番号およびセグメント数を、当該オブジェクトコードが割り当てられていない空き領域となるセグメントの先頭セグメント番号およびセグメント数と共に管理するメモリ配置管理テーブルと、
前記オブジェクトコードが更新される際、更新後のオブジェクトコードのオブジェクトサイズから変更後のオブジェクトコードに割り当てられるセグメントのセグメント数を計算し、変更後のセグメント数が変更前のセグメント数よりも大きいとき、変更後のオブジェクトコードを変更後のセグメント数以上の空き領域となるセグメントに移動し、変更後のセグメント数が変更前のセグメント数以下のとき、変更後のオブジェクトコードをその変更前のセグメント内に収めるように前記メモリ配置管理テーブルを更新する管理テーブル更新部と、
更新された前記メモリ配置管理テーブルから、前記オブジェクトコードのメモリ配置を設定するためのオブジェクトアドレスを含むメモリ配置設定ファイルを生成する設定ファイル生成部として機能させることを特徴とするメモリ配置管理プログラム。
【請求項９】
請求項１から６のいずれかに記載のメモリ配置管理装置と、
オブジェクトコードをリンクして実行ファイルを生成し、当該オブジェクトコードのリンク時に前記メモリ配置管理装置により生成されたメモリ配置設定ファイルを用いて前記オブジェクトコードのメモリ配置を設定するリンカとを有することを特徴とするプログラム作成システム。
【請求項１０】
ソースコードをコンパイルして前記オブジェクトコードを生成するコンパイラと、
前記オブジェクトコードを逆アセンブルして当該オブジェクトコードのオブジェクト名およびオブジェクトサイズを含む逆アセンブルリストを生成する逆アセンブラとをさらに有することを特徴とする請求項９に記載のプログラム作成システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリ配置管理装置、メモリ配置管理方法、メモリ配置管理プログラム、およびプログラム作成システムに関し、特にＯＳ（Operating System：オペレーティングシステム）のオブジェクトコードのメモリ配置を管理するメモリ配置管理装置、メモリ配置管理方法、メモリ配置管理プログラム、およびプログラム作成システムに関する。
【背景技術】
【０００２】
ＯＳの障害解析のための情報採取方法として、ＯＳの処理に、その障害解析のための情報採取処理（以下、「プローブ」とも呼ぶ。）を埋め込む方法がある。この方法に関連する技術について、図５を参照して説明する。
【０００３】
図５に示す関連技術に係る方法では、コンピュータ１００によるＯＳ１０１の処理でその障害解析のための情報採取処理が必要な箇所（プローブ）に、あらかじめＮＯＰ（Ｎｏ Operation）命令を埋め込んでおく。そして、ＵＳＢ（Universal Serial Bus）メモリ等の外部記憶媒体１１０をコンピュータ１００に挿入することを契機に、解析プログラム１０２が以下の処理をコンピュータに実行させることにより、情報採取が行われる。
【０００４】
（１）インタプリタ１０３が、外部記憶媒体上の解析スクリプトに記載されているプローブアドレス、情報採取処理のアドレス、情報採取処理を読み込む。
【０００５】
（２）情報採取処理を、パッチ領域に書き込む。
【０００６】
（３）プローブ箇所のＮＯＰ命令を、情報採取処理のアドレスへのブランチ（分岐）命令に変更する。
【０００７】
次に、解析プログラム１０２の上記処理が完了した後の、情報採取の流れを以下に示す。
【０００８】
（４）ＯＳ１０１の処理がプローブアドレスまでくると、ブランチ命令に従い、パッチ領域の情報採取処理へブランチする。
【０００９】
（５）情報採取処理が実行され、ログ出力処理が呼び出される。
【００１０】
（６）ログ出力処理が実行され、（５）の情報採取処理で採取した情報が外部記憶媒体上のログファイル１１２に出力される。
【００１１】
このように、通常運用時はプローブをＮＯＰ命令にしておき、情報採取時のみ情報採取処理へのブランチ命令に変更することで、通常運用時のオーバヘッドを抑えることができる。
【００１２】
上記の関連技術に係る方法では、外部記憶媒体上の解析スクリプトに記載されているプローブアドレスは、マップファイルおよび逆アセンブルファイルの情報を元に計算する。マップファイルは、オブジェクトファイルのリンク時に生成されるファイルで、オブジェクトコードの先頭アドレスを特定できるものである。逆アセンブルファイルは、オブジェクトファイルを逆アセンブルすることにより生成されるファイルで、オブジェクトコードの先頭アドレスからの相対アドレスを特定できるものである。
【００１３】
この場合、バージョンアップ等でＯＳのソースコードを修正すると、これに対応するオブジェクトコードが変わってしまうため、解析スクリプトに記載されているプローブアドレスを修正する必要がある。
【００１４】
上記に関連して、特許文献１には、複数のオブジェクトモジュールを結合して１つの実行可能プログラムを生成するリンカ装置において、複数のオブジェクトモジュールの配置対象セグメント毎に所定サイズの空き領域を割り当て、オブジェクトモジュールの変更があった配置対象セグメントのみを再度リンクし、その対象配置セグメントの終わりに所定サイズの空き領域を付加するものが記載されている。
【先行技術文献】
【特許文献】
【００１５】
【特許文献１】特開２０００−１５５６７３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１６】
上記の関連技術に係る方法では、バージョンアップ等でＯＳのソースコードを修正した場合、修正したソースコードに対応するオブジェクトコードのサイズが変わることにより、メモリ配置が変わる。このため、プローブのアドレスが変わってしまい、解析スクリプトに記載したプローブアドレスを大幅に修正する必要が生じる。この例を図６（ａ）、（ｂ）に示す。
【００１７】
図６（ａ）、（ｂ）の例では、オブジェクト名がオブジェクト１のオブジェクトコードのサイズと、オブジェクト名がオブジェクト２のオブジェクトコードのサイズとがいずれも大きくなったことにより、変更のないオブジェクト名がオブジェクト３のオブジェクトコード内のプローブのアドレスが変わっている。さらに、オブジェクト名がオブジェクト３のオブジェクトコードより高位のアドレスにプローブが埋め込まれていた場合、すべてのプローブのアドレスが変わってしまう。
【００１８】
一方、特許文献１に記載のリンカ装置は、コードサイズの比率等を用いて、ユーザまたはシステムが空き領域のサイズを指定するため、空き領域の指定が必要となる。
【００１９】
本発明の目的は、上記課題を解決し、オブジェクトコードの変更によりそのサイズが変わる場合でも、メモリ配置上のオブジェクトコードのアドレスの修正を最小限にできるメモリ配置管理装置、メモリ配置管理方法、メモリ配置管理プログラム、およびプログラム作成システムを提供することにある。
【課題を解決するための手段】
【００２０】
本発明の第１の観点によれば、メモリ領域を予め設定された固定長サイズのセグメントに分割し、分割したセグメントにオブジェクトコードを割り当てて配置したときの当該オブジェクトコードが割り当てられたセグメントの先頭セグメント番号およびセグメント数を、当該オブジェクトコードが割り当てられていない空き領域となるセグメントの先頭セグメント番号およびセグメント数と共に管理するメモリ配置管理テーブルと、前記オブジェクトコードが更新される際、更新後のオブジェクトコードのオブジェクトサイズから変更後のオブジェクトコードに割り当てられるセグメントのセグメント数を計算し、変更後のセグメント数が変更前のセグメント数よりも大きいとき、変更後のオブジェクトコードを変更後のセグメント数以上の空き領域となるセグメントに移動し、変更後のセグメント数が変更前のセグメント数以下のとき、変更後のオブジェクトコードをその変更前のセグメント内に収めるように前記メモリ配置管理テーブルを更新する管理テーブル更新部と、更新された前記メモリ配置管理テーブルから、前記オブジェクトコードのメモリ配置を設定するためのオブジェクトアドレスを含むメモリ配置設定ファイルを生成する設定ファイル生成部とを有することを特徴とするメモリ配置管理装置が提供される。
【００２１】
本発明の第２の観点によれば、メモリ配置管理テーブルが、メモリ領域を固定長サイズのセグメントに分割し、分割したセグメントにオブジェクトコードを割り当てて配置したときの当該オブジェクトコードが割り当てられたセグメントの先頭セグメント番号およびセグメント数を、当該オブジェクトコードが割り当てられていない空き領域となるセグメントの先頭セグメント番号およびセグメント数と共に管理し、管理テーブル更新部が、前記オブジェクトコードが更新される際、更新後のオブジェクトコードのオブジェクトサイズから変更後のオブジェクトコードに割り当てられるセグメントのセグメント数を計算し、変更後のセグメント数が変更前のセグメント数よりも大きいとき、変更後のオブジェクトコードを変更後のセグメント数以上の空き領域となるセグメントに移動し、変更後のセグメント数が変更前のセグメント数以下のとき、変更後のオブジェクトコードをその変更前のセグメント内に収めるように前記メモリ配置管理テーブルを更新し、設定ファイル生成部が、更新された前記メモリ配置管理テーブルから、前記オブジェクトコードのメモリ配置を設定するためのオブジェクトアドレスを含むメモリ配置設定ファイルを生成することを特徴とするメモリ配置管理方法が提供される。
【００２２】
本発明の第３の観点によれば、コンピュータを、メモリ領域を固定長サイズのセグメントに分割し、分割したセグメントにオブジェクトコードを割り当てて配置したときの当該オブジェクトコードが割り当てられたセグメントの先頭セグメント番号およびセグメント数を、当該オブジェクトコードが割り当てられていない空き領域となるセグメントの先頭セグメント番号およびセグメント数と共に管理するメモリ配置管理テーブルと、前記オブジェクトコードが更新される際、更新後のオブジェクトコードのオブジェクトサイズから変更後のオブジェクトコードに割り当てられるセグメントのセグメント数を計算し、変更後のセグメント数が変更前のセグメント数よりも大きいとき、変更後のオブジェクトコードを変更後のセグメント数以上の空き領域となるセグメントに移動し、変更後のセグメント数が変更前のセグメント数以下のとき、変更後のオブジェクトコードをその変更前のセグメント内に収めるように前記メモリ配置管理テーブルを更新する管理テーブル更新部と、更新された前記メモリ配置管理テーブルから、前記オブジェクトコードのメモリ配置を設定するためのオブジェクトアドレスを含むメモリ配置設定ファイルを生成する設定ファイル生成部として機能させることを特徴とするメモリ配置管理プログラムが提供される。
【００２３】
本発明の第４の観点によれば、上記に記載のメモリ配置管理装置と、オブジェクトコードをリンクして実行ファイルを生成し、当該オブジェクトコードのリンク時に前記メモリ配置管理装置により生成されたメモリ配置設定ファイルを用いて前記オブジェクトコードのメモリ配置を設定するリンカとを有することを特徴とするプログラム作成システムが提供される。
【発明の効果】
【００２４】
本発明によれば、オブジェクトコードの変更によりそのサイズが変わる場合でも、メモリ配置上のオブジェクトコードのアドレスの修正を最小限にできる。
【図面の簡単な説明】
【００２５】
【図１】本発明の実施の形態に係るメモリ配置管理装置の構成を示すブロック図である。
【図２】図１に示すメモリ配置管理装置において、オブジェクトコード変更前後のメモリ配置管理テーブルを示す図である。
【図３】図１に示すメモリ配置管理装置の動作を示すフローチャートである。
【図４】図１に示すメモリ配置管理装置を用いた場合のオブジェクトコード変更前後のメモリ配置を示す図である。
【図５】関連技術に係るＯＳの障害解析のための情報採取方法を説明するブロック図である。
【図６】関連技術を用いた場合のオブジェクトコード変更前後のメモリ配置を示す図である。
【発明を実施するための形態】
【００２６】
以下、本発明に係るメモリ配置管理装置、メモリ配置管理方法、メモリ配置管理プログラム、およびプログラム作成システムの実施の形態について、図面を参照して詳細に説明する。
【００２７】
図１は、本実施の形態に係るメモリ配置管理装置の構成を説明するものである。
【００２８】
図１に示すメモリ配置管理装置５０は、コンパイラ１０、リンカ２０、逆アセンブラ４０と共にプログラムの作成及び修正を行うシステム（プログラム作成システム）を構成し、プログラミング言語で記述されたソースコード１をコンパイラ１０によりコンパイルしてオブジェクトファイル２を生成し、生成したオブジェクトファイル２をリンカ２０によりリンクして実行ファイル３を生成する際に用いられる。具体的には、メモリ配置管理ツール５と、メモリ配置設定ファイル６とを含む。
【００２９】
メモリ配置設定ファイル６は、オブジェクトコードのメモリ配置を設定するための全オブジェクトコードのオブジェクト名と、オブジェクトアドレスとを記載したファイルである。リンカ２０は、オブジェクトファイル２のリンク時にメモリ配置設定ファイル６を参照して、オブジェクトコードのメモリ配置を設定する。このため、メモリ配置設定ファイル６は、リンカ２０が指定するフォーマットにする必要がある。例えば、ＡＲＭプロセッサ向けのコンパイラＲＶＣＴを使用する場合、メモリ配置設定ファイル６は、「スキャッタローディング記述ファイル」のフォーマットにする必要がある。
【００３０】
メモリ配置管理ツール５は、メモリ領域を固定長サイズのセグメントに分割し、オブジェクトファイル２のオブジェクトコードをセグメント境界に割り当てて配置することにより、オブジェクトコードのメモリ配置を管理するためのツールである。
【００３１】
このメモリ配置管理ツール５は、ソースコード１を変更したときに、変更後のソースコード１に対応するオブジェクトファイル２を逆アセンブラ４０により逆アセンブルして得られる、変更したオブジェクトコードの逆アセンブルリスト４の情報（オブジェクト名４１、オブジェクトサイズ４２）から、メモリ配置設定ファイル６を生成する。
【００３２】
具体的に、メモリ配置管理ツール５は、管理テーブル更新部５１、設定ファイル生成部５２、およびメモリ配置管理テーブル５３を含む。
【００３３】
メモリ配置管理テーブル５３は、図２（ａ）、（ｂ）に示すように、メモリ領域を予め設定された固定長サイズのセグメントに分割し、分割したセグメントにオブジェクトコードを割り当てて配置したときのオブジェクトコードの「オブジェクト名」、オブジェクトコードが割り当てられるセグメントの「先頭セグメント番号」、オブジェクトコードに割り当てられたセグメントの「セグメント数」を管理するための表である。
【００３４】
具体的には、メモリ配置管理テーブル５３は、オブジェクトコードが割り当てられたセグメントの場合、オブジェクトコードのオブジェクト名に対応付けて、先頭セグメント番号およびセグメント数を管理すると共に、空き領域となるセグメントの場合、オブジェクトコードのオブジェクト名をｎｕｌｌとし、ｎｕｌｌに対応付けて、先頭セグメント番号およびセグメント数を管理する。
【００３５】
管理テーブル更新部５１は、オブジェクトコードが更新された際に、変更後のオブジェクトコードの逆アセンブルリスト４のオブジェクト名４１およびオブジェクトサイズ４２から、メモリ配置管理テーブル５３のオブジェクト名、先頭セグメント番号、およびセグメント数を更新する。
【００３６】
具体的には、管理テーブル更新部５１は、更新後のオブジェクトコードのオブジェクトサイズから変更後のオブジェクトコードに割り当てられるセグメントのセグメント数を計算し、変更後のセグメント数が変更前のセグメント数よりも大きいとき、変更後のオブジェクトコードを変更後のセグメント数以上の空き領域となるセグメントに移動し、変更後のセグメント数が変更前のセグメント数以下のとき、変更後のオブジェクトコードをその変更前のセグメント内に収めるようにメモリ配置管理テーブル５３を更新する。
【００３７】
また、管理テーブル更新部５１は、変更後のセグメント数が変更前のセグメント数より小さいとき、変更後のオブジェクトコードを、変更前のセグメントの内、先頭セグメントから変更後のセグメント数分のセグメントに収め、その残りのセグメントを空き領域とするようにメモリ配置管理テーブル５３を更新する。
【００３８】
管理テーブル生成部５２は、オブジェクトコードが更新された際に、メモリ配置管理テーブル５３のオブジェクト名、先頭セグメント番号、およびセグメント数を参照して、メモリ配置設定ファイル６を生成する。
【００３９】
次に、本実施の形態の動作について説明する。
【００４０】
図３は、オブジェクト名Ａのオブジェクトコードを変更した時のメモリ配置管理テーブル５３の更新処理を示すフローチャートである。以下、図３を参照して、オブジェクト名Ａのオブジェクトコードが更新されたときの管理テーブル更新部５１の動作について説明する。
【００４１】
まず、管理テーブル更新部５１は、メモリ配置管理テーブル５３からオブジェクトコードのオブジェクト名がＡに対応する行Ｔを検索し（ステップＡ１）、検索された行Ｔのセグメント数を取得して変数Ｓ１に代入する（ステップＡ２）。
【００４２】
次に、管理テーブル更新部５１は、オブジェクトファイル２の逆アセンブルにより生成された逆アセンブルリスト４からオブジェクト名Ａのオブジェクトコードのオブジェクトサイズ４２を取得し（ステップＡ３）、取得したオブジェクトサイズ４２から、オブジェクトコードの変更後のセグメント数を計算し、変数Ｓ２に代入する（ステップＡ４）。セグメント数は、逆アセンブルリスト４から取得したオブジェクトサイズ４２を、あらかじめ定義したセグメントサイズで割ることによって計算することができる。
【００４３】
次に、管理テーブル更新部５１は、Ｓ１＜Ｓ２か否か判定し（ステップＡ５）、その結果、Ｓ１＜Ｓ２の場合（変更後のオブジェクトコードのセグメント数が行Ｔのセグメント数より大きい場合）（ステップＡ５：Ｙｅｓ）、以下の処理を行う。
【００４４】
すなわち、管理テーブル更新部５１は、行Ｔのオブジェクト名をＡからｎｕｌｌに変更し（ステップＡ６）、行Ｔの次行のオブジェクト名がｎｕｌｌか否か判定し（ステップＡ７）、その結果、行Ｔの次行のオブジェクト名がｎｕｌｌの場合（ステップＡ７：ＹＥＳ）、行Ｔと行Ｔの次行とを結合するため、行Ｔのセグメント数に行Ｔの次行のセグメント数を加算し、行Ｔの次行を削除する（ステップＡ８）。
【００４５】
次に、管理テーブル更新部５１は、メモリ配置管理テーブル５３の先頭からセグメント数がＳ２以上、オブジェクト名がｎｕｌｌの行（この行を新たなＴとする）を検索し（ステップＡ９）、検索された行Ｔのオブジェクト名をｎｕｌｌからＡに変更し（ステップＡ１０）、行Ｔのセグメント数を取得して変数Ｓ１に代入する（ステップＡ１１）。
【００４６】
次に、管理テーブル更新部５１は、Ｓ１＝Ｓ２か否か判定し（ステップＡ１２）、その結果、Ｓ１＝Ｓ２でない場合（変更後のオブジェクトコードのセグメント数が行Ｔのセグメント数より小さい場合）（ステップＡ１２：Ｎｏ）、以下の処理を行う。
【００４７】
すなわち、管理テーブル更新部５１は、行Ｔのセグメント数をＳ２に変更し（ステップＡ１３）、行Ｔの次行のオブジェクト名がｎｕｌｌか否か判定し（ステップＡ１４）、その結果、Ｔの次行のオブジェクト名がｎｕｌｌでない場合（ステップＡ１４：Ｎｏ）、行Ｔの次行に、オブジェクト名がｎｕｌｌ、先頭セグメント番号が０、セグメント数が０の行を追加する（ステップＡ１５）。
【００４８】
最後に、管理テーブル更新部５１は、行Ｔの次行の先頭セグメント番号に「行Ｔのセグメント番号＋Ｓ２」を代入し、セグメント数に「Ｓ２−Ｓ１」を加算する（ステップＡ１６）。
【００４９】
次に、図２のようにオブジェクト名がオブジェクト２のオブジェクトコードのセグメント数が１から２に変更された場合の管理テーブル更新部５１の動作を、図３を参照して説明する。
【００５０】
まず、管理テーブル更新部５１は、メモリ配置管理テーブル５３からオブジェクト名がオブジェクト２の行（この行をＴとする）を検索し（ステップＡ１）、検索された行Ｔのセグメント数１を取得してＳ１＝１とする（ステップＡ２）。
【００５１】
次に、管理テーブル更新部５１は、逆アセンブルリスト４からオブジェクト２のオブジェクトサイズ４２を取得し（ステップＡ３）、オブジェクトコードの変更後のセグメント数２を計算し、Ｓ２＝２とする（ステップＡ４）。
【００５２】
次に、管理テーブル更新部５１は、Ｓ１＜Ｓ２か否か判定し（ステップＡ５）、その結果、Ｓ１＜Ｓ２となるため（ステップＡ５：Ｙｅｓ）、以下の処理を行う。
【００５３】
すなわち、管理テーブル更新部５１は、行Ｔのオブジェクト名をオブジェクト２からｎｕｌｌに変更し（ステップＡ６）、行Ｔの次行のオブジェクト名がｎｕｌｌか否か判定する（ステップＡ７）。その結果、行Ｔの次行のオブジェクト名はオブジェクト３であり、ｎｕｌｌではないため（ステップＡ７：Ｎｏ）、管理テーブル更新部５１は、メモリ配置管理テーブル５３の先頭から、セグメント数Ｓ２（＝２）以上、かつ、オブジェクト名がｎｕｌｌの行（この行を新たなＴとする）を検索する（ステップＡ９）。
【００５４】
次に、管理テーブル更新部５１は、行Ｔのオブジェクト名をｎｕｌｌからオブジェクト２に変更し（ステップＡ１０）、行Ｔのセグメント数２を取得してＳ１＝２とする（ステップＡ１１）。
【００５５】
次に、管理テーブル更新部５１は、Ｓ１＝Ｓ２か否か判定し（ステップＡ１２）、その結果、Ｓ１＝Ｓ２となるため（ステップＡ１２：Ｙｅｓ）、メモリ配置管理テーブル５３の更新処理を終了する。
【００５６】
以上のように、本実施の形態によれば、メモリ領域を固定長サイズのセグメントに分割し、オブジェクトコードをセグメント境界に配置する。そして、オブジェクトコードの変更により、割り当てられたセグメント内にオブジェクトコードが収まらなくなった場合は、オブジェクトコードを空き領域に移動し、割り当てられたセグメント内に収まる場合は、オブジェクトコードは移動しない。オブジェクトコードが移動するのは、オブジェクトコードが変更され、かつ、割り当てられたセグメント内に収まらない場合のみであり、その移動を最小限にすることができる。
【００５７】
これにより、ＯＳのソースコード１の修正によってオブジェクトコードが変更された場合に、変更の前後で、変更のない他のオブジェクトコード、例えばプローブ（障害解析のためＯＳに埋め込んだ情報採取処理）のアドレスが変わらないようにするメモリ配置を実現することができる。
【００５８】
図４（ａ）、（ｂ）は、前述した図６（ａ）、（ｂ）と同じオブジェクトコードに対して、本実施の形態を適用した場合の例を示す。図６（ａ）、（ｂ）の例では、オブジェクト名がオブジェクト２のオブジェクトコードは割り当てられたセグメント内に収まらなくなったため、空き領域に移動しており、オブジェクト名がオブジェクト１のオブジェクトコードは割り当てられたセグメント内に収まるため、移動しない。変更のないオブジェクト名がオブジェクト３のオブジェクトコード内のプローブのアドレスは変わっていない。
【００５９】
従って、本実施の形態によれば、ＯＳの処理を変更した際、解析スクリプトに記載されているプローブアドレスの修正を最小限にできる。その理由は、オブジェクトの変更により、変更後のオブジェクトコードが割り当てられたセグメントに収まらなくなった場合は、変更後のオブジェクトコードを空き領域に移動し、他のオブジェクトコードのアドレスが変わらないようにするためである。
【００６０】
なお、オブジェクトコードをセグメント境界に配置することにより、オブジェクトコード間に空き領域ができるため、キャッシュメモリの利用効率が低くなる可能性がある。しかし、キャッシュラインサイズのセグメントに分割し、オブジェクトコードをキャッシュライン境界に配置することで、オブジェクトコードの先頭部分がセグメント境界を跨ぐことがなくなるため、キャッシュメモリの利用効率が高くなると考えられる。
【００６１】
すなわち、本実施の形態では、セグメントのサイズをキャッシュラインのサイズとすることで、コードがキャッシュライン境界を跨ることがなくなり、キャッシュメモリの利用効率が高くなる。
【００６２】
また、本実施の形態では、メモリ領域を固定長のセグメントに分割し、セグメント境界にコードを割り当てるだけで、自動的に空き領域のサイズが決まるため、空き領域の指定は不要である。
【００６３】
上記のメモリ配置管理装置は、ハードウェア、ソフトウェア又はこれらの組合せにより実現することができる。この場合のハードウェア、ソフトウェア又はこれらの組合せによる構成は特に限定されるものではなく、上述した機能を実現可能なものであれば、いずれの形態でも適用可能である。
【００６４】
上記の実施の形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限定されない。
【００６５】
（付記１）メモリ領域を予め設定された固定長サイズのセグメントに分割し、分割したセグメントにオブジェクトコードを割り当てて配置したときの当該オブジェクトコードが割り当てられたセグメントの先頭セグメント番号およびセグメント数を、当該オブジェクトコードが割り当てられていない空き領域となるセグメントの先頭セグメント番号およびセグメント数と共に管理するメモリ配置管理テーブルと、前記オブジェクトコードが更新される際、更新後のオブジェクトコードのオブジェクトサイズから変更後のオブジェクトコードに割り当てられるセグメントのセグメント数を計算し、変更後のセグメント数が変更前のセグメント数よりも大きいとき、変更後のオブジェクトコードを変更後のセグメント数以上の空き領域となるセグメントに移動し、変更後のセグメント数が変更前のセグメント数以下のとき、変更後のオブジェクトコードをその変更前のセグメント内に収めるように前記メモリ配置管理テーブルを更新する管理テーブル更新部と、更新された前記メモリ配置管理テーブルから、前記オブジェクトコードのメモリ配置を設定するためのオブジェクトアドレスを含むメモリ配置設定ファイルを生成する設定ファイル生成部とを有することを特徴とするメモリ配置管理装置。
【００６６】
（付記２）前記管理テーブル更新部は、変更後のセグメント数が変更前のセグメント数より小さいとき、変更後のオブジェクトコードを、変更前のセグメントの内、先頭セグメントから変更後のセグメント数分のセグメントに収め、その残りのセグメントを空き領域とするように前記メモリ配置管理テーブルを更新することを特徴とする付記１に記載のメモリ配置管理装置。
【００６７】
（付記３）前記メモリ配置管理テーブルは、前記オブジェクトコードが割り当てられたセグメントの場合、当該オブジェクトコードのオブジェクト名に対応付けて、前記先頭セグメント番号およびセグメント数を管理すると共に、前記空き領域となるセグメントの場合、前記オブジェクトコードのオブジェクト名をｎｕｌｌとし、当該ｎｕｌｌに対応付けて、前記先頭セグメント番号およびセグメント数を管理することを特徴とする付記１又は２に記載のメモリ配置管理装置。
【００６８】
（付記４）前記セグメントの固定長サイズは、キャッシュメモリのキャッシュラインサイズに予め設定されることを特徴とする付記１から３のいずれかに記載のメモリ配置管理装置。
【００６９】
（付記５）前記オブジェクトコードは、オペレーティングシステムを構成するオブジェクトコードであることを特徴とする付記１から４のいずれかに記載のメモリ配置管理装置。
【００７０】
（付記６）前記オブジェクトコードは、前記オペレーティングシステムの障害解析のための情報採取処理を行うプローブが埋め込まれていることを特徴とする付記５に記載のメモリ配置管理装置。
【００７１】
（付記７）メモリ配置管理テーブルが、メモリ領域を固定長サイズのセグメントに分割し、分割したセグメントにオブジェクトコードを割り当てて配置したときの当該オブジェクトコードが割り当てられたセグメントの先頭セグメント番号およびセグメント数を、当該オブジェクトコードが割り当てられていない空き領域となるセグメントの先頭セグメント番号およびセグメント数と共に管理し、管理テーブル更新部が、前記オブジェクトコードが更新される際、更新後のオブジェクトコードのオブジェクトサイズから変更後のオブジェクトコードに割り当てられるセグメントのセグメント数を計算し、変更後のセグメント数が変更前のセグメント数よりも大きいとき、変更後のオブジェクトコードを変更後のセグメント数以上の空き領域となるセグメントに移動し、変更後のセグメント数が変更前のセグメント数以下のとき、変更後のオブジェクトコードをその変更前のセグメント内に収めるように前記メモリ配置管理テーブルを更新し、設定ファイル生成部が、更新された前記メモリ配置管理テーブルから、前記オブジェクトコードのメモリ配置を設定するためのオブジェクトアドレスを含むメモリ配置設定ファイルを生成することを特徴とするメモリ配置管理方法。
【００７２】
（付記８）前記管理テーブル更新部が、変更後のセグメント数が変更前のセグメント数より小さいとき、変更後のオブジェクトコードを、変更前のセグメントの内、先頭セグメントから変更後のセグメント数分のセグメントに収め、その残りのセグメントを空き領域とするように前記メモリ配置管理テーブルを更新することを特徴とする付記７に記載のメモリ配置管理方法。
【００７３】
（付記９）前記メモリ配置管理テーブルが、前記オブジェクトコードが割り当てられたセグメントの場合、当該オブジェクトコードのオブジェクト名に対応付けて、前記先頭セグメント番号およびセグメント数を管理すると共に、前記空き領域となるセグメントの場合、前記オブジェクトコードのオブジェクト名をｎｕｌｌとし、当該ｎｕｌｌに対応付けて、前記先頭セグメント番号およびセグメント数を管理することを特徴とする付記７又は８に記載のメモリ配置管理方法。
【００７４】
（付記１０）前記セグメントの固定長サイズは、キャッシュメモリのキャッシュラインサイズに予め設定されることを特徴とする付記７から９のいずれかに記載のメモリ配置管理方法。
【００７５】
（付記１１）前記オブジェクトコードは、オペレーティングシステムを構成するオブジェクトコードであることを特徴とする付記７から１０のいずれかに記載のメモリ配置管理方法。
【００７６】
（付記１２）前記オブジェクトコードは、前記オペレーティングシステムの障害解析のための情報採取処理を行うプローブが埋め込まれていることを特徴とする付記１１に記載のメモリ配置管理方法。
【００７７】
（付記１３）コンピュータを、メモリ領域を固定長サイズのセグメントに分割し、分割したセグメントにオブジェクトコードを割り当てて配置したときの当該オブジェクトコードが割り当てられたセグメントの先頭セグメント番号およびセグメント数を、当該オブジェクトコードが割り当てられていない空き領域となるセグメントの先頭セグメント番号およびセグメント数と共に管理するメモリ配置管理テーブルと、前記オブジェクトコードが更新される際、更新後のオブジェクトコードのオブジェクトサイズから変更後のオブジェクトコードに割り当てられるセグメントのセグメント数を計算し、変更後のセグメント数が変更前のセグメント数よりも大きいとき、変更後のオブジェクトコードを変更後のセグメント数以上の空き領域となるセグメントに移動し、変更後のセグメント数が変更前のセグメント数以下のとき、変更後のオブジェクトコードをその変更前のセグメント内に収めるように前記メモリ配置管理テーブルを更新する管理テーブル更新部と、更新された前記メモリ配置管理テーブルから、前記オブジェクトコードのメモリ配置を設定するためのオブジェクトアドレスを含むメモリ配置設定ファイルを生成する設定ファイル生成部として機能させることを特徴とするメモリ配置管理プログラム。
【００７８】
（付記１４）前記管理テーブル更新部は、変更後のセグメント数が変更前のセグメント数より小さいとき、変更後のオブジェクトコードを、変更前のセグメントの内、先頭セグメントから変更後のセグメント数分のセグメントに収め、その残りのセグメントを空き領域とするように前記メモリ配置管理テーブルを更新することを特徴とする付記１３に記載のメモリ配置管理プログラム。
【００７９】
（付記１５）前記メモリ配置管理テーブルは、前記オブジェクトコードが割り当てられたセグメントの場合、当該オブジェクトコードのオブジェクト名に対応付けて、前記先頭セグメント番号およびセグメント数を管理すると共に、前記空き領域となるセグメントの場合、前記オブジェクトコードのオブジェクト名をｎｕｌｌとし、当該ｎｕｌｌに対応付けて、前記先頭セグメント番号およびセグメント数を管理することを特徴とする付記１３又は１４に記載のメモリ配置管理プログラム。
【００８０】
（付記１６）前記セグメントの固定長サイズは、キャッシュメモリのキャッシュラインサイズに予め設定されることを特徴とする付記１３から１５のいずれかに記載のメモリ配置管理プログラム。
【００８１】
（付記１７）前記オブジェクトコードは、オペレーティングシステムを構成するオブジェクトコードであることを特徴とする付記１３から１６のいずれかに記載のメモリ配置管理プログラム。
【００８２】
（付記１８）前記オブジェクトコードは、前記オペレーティングシステムの障害解析のための情報採取処理を行うプローブが埋め込まれていることを特徴とする付記１７に記載のメモリ配置管理プログラム。
【００８３】
（付記１９）付記１から６のいずれかに記載のメモリ配置管理装置と、オブジェクトコードをリンクして実行ファイルを生成し、当該オブジェクトコードのリンク時に前記メモリ配置管理装置により生成されたメモリ配置設定ファイルを用いて前記オブジェクトコードのメモリ配置を設定するリンカとを有することを特徴とするプログラム作成システム。
【００８４】
（付記２０）ソースコードをコンパイルして前記オブジェクトコードを生成するコンパイラと、前記オブジェクトコードを逆アセンブルして当該オブジェクトコードのオブジェクト名およびオブジェクトサイズを含む逆アセンブルリストを生成する逆アセンブラとをさらに有することを特徴とする付記１９に記載のプログラム作成システム。
【００８５】
以上、実施の形態を参照して本願発明を説明したが、本願発明は上記実施の形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【産業上の利用可能性】
【００８６】
以上説明したように、本発明は、ＯＳのオブジェクトコードのメモリ配置を管理するメモリ配置管理装置、メモリ配置管理方法、メモリ配置管理プログラム、およびプログラム作成システムの用途に利用可能である。
【符号の説明】
【００８７】
１  ソースコード
２  オブジェクトコード
３  実行ファイル
４  逆アセンブルリスト
５  メモリ配置管理ツール
６  メモリ配置設定ファイル
１０  コンパイラ
２０  リンカ
４０  逆アセンブラ
４１  オブジェクト名
４２  オブジェクトサイズ
５０  メモリ配置管理装置
５１  管理テーブル更新部
５２  設定ファイル生成部
５３  メモリ配置管理テーブル
１００  コンピュータ
１０１  ＯＳ
１０２  解析プログラム
１０３  インタプリタ
１１０  外部記憶媒体
１１１  解析スクリプト
１１２  ログファイル
【図１】
0005660386.tif 000002
【図２】
0005660386.tif 000003
【図３】
0005660386.tif 000004
【図４】
0005660386.tif 000005
【図５】
0005660386.tif 000006
【図６】
0005660386.tif 000007