説明

メモリ配置管理装置、メモリ配置管理方法、メモリ配置管理プログラム、およびプログラム作成システム

【課題】オブジェクトコードの変更によりそのサイズが変わる場合でも、メモリ配置上のオブジェクトコードのアドレスの修正を最小限にできる。
【解決手段】メモリ配置管理装置は、メモリ配置管理テーブル、管理テーブル更新部、および設定ファイル生成部を含む。管理テーブル更新部は、オブジェクトコードが更新される際、更新後のオブジェクトコードのオブジェクトサイズから変更後のオブジェクトコードに割り当てられるセグメントのセグメント数を計算し、変更後のセグメント数が変更前のセグメント数よりも大きいとき、変更後のオブジェクトコードを変更後のセグメント数以上の空き領域となるセグメントに移動し、変更後のセグメント数が変更前のセグメント数以下のとき、変更後のオブジェクトコードをその変更前のセグメント内に収めるようにメモリ配置管理テーブルを更新する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、メモリ配置管理装置、メモリ配置管理方法、メモリ配置管理プログラム、およびプログラム作成システムに関し、特にOS(Operating System:オペレーティングシステム)のオブジェクトコードのメモリ配置を管理するメモリ配置管理装置、メモリ配置管理方法、メモリ配置管理プログラム、およびプログラム作成システムに関する。
【背景技術】
【0002】
OSの障害解析のための情報採取方法として、OSの処理に、その障害解析のための情報採取処理(以下、「プローブ」とも呼ぶ。)を埋め込む方法がある。この方法に関連する技術について、図5を参照して説明する。
【0003】
図5に示す関連技術に係る方法では、コンピュータ100によるOS101の処理でその障害解析のための情報採取処理が必要な箇所(プローブ)に、あらかじめNOP(No Operation)命令を埋め込んでおく。そして、USB(Universal Serial Bus)メモリ等の外部記憶媒体110をコンピュータ100に挿入することを契機に、解析プログラム102が以下の処理をコンピュータに実行させることにより、情報採取が行われる。
【0004】
(1)インタプリタ103が、外部記憶媒体上の解析スクリプトに記載されているプローブアドレス、情報採取処理のアドレス、情報採取処理を読み込む。
【0005】
(2)情報採取処理を、パッチ領域に書き込む。
【0006】
(3)プローブ箇所のNOP命令を、情報採取処理のアドレスへのブランチ(分岐)命令に変更する。
【0007】
次に、解析プログラム102の上記処理が完了した後の、情報採取の流れを以下に示す。
【0008】
(4)OS101の処理がプローブアドレスまでくると、ブランチ命令に従い、パッチ領域の情報採取処理へブランチする。
【0009】
(5)情報採取処理が実行され、ログ出力処理が呼び出される。
【0010】
(6)ログ出力処理が実行され、(5)の情報採取処理で採取した情報が外部記憶媒体上のログファイル112に出力される。
【0011】
このように、通常運用時はプローブをNOP命令にしておき、情報採取時のみ情報採取処理へのブランチ命令に変更することで、通常運用時のオーバヘッドを抑えることができる。
【0012】
上記の関連技術に係る方法では、外部記憶媒体上の解析スクリプトに記載されているプローブアドレスは、マップファイルおよび逆アセンブルファイルの情報を元に計算する。マップファイルは、オブジェクトファイルのリンク時に生成されるファイルで、オブジェクトコードの先頭アドレスを特定できるものである。逆アセンブルファイルは、オブジェクトファイルを逆アセンブルすることにより生成されるファイルで、オブジェクトコードの先頭アドレスからの相対アドレスを特定できるものである。
【0013】
この場合、バージョンアップ等でOSのソースコードを修正すると、これに対応するオブジェクトコードが変わってしまうため、解析スクリプトに記載されているプローブアドレスを修正する必要がある。
【0014】
上記に関連して、特許文献1には、複数のオブジェクトモジュールを結合して1つの実行可能プログラムを生成するリンカ装置において、複数のオブジェクトモジュールの配置対象セグメント毎に所定サイズの空き領域を割り当て、オブジェクトモジュールの変更があった配置対象セグメントのみを再度リンクし、その対象配置セグメントの終わりに所定サイズの空き領域を付加するものが記載されている。
【先行技術文献】
【特許文献】
【0015】
【特許文献1】特開2000−155673号公報
【発明の概要】
【発明が解決しようとする課題】
【0016】
上記の関連技術に係る方法では、バージョンアップ等でOSのソースコードを修正した場合、修正したソースコードに対応するオブジェクトコードのサイズが変わることにより、メモリ配置が変わる。このため、プローブのアドレスが変わってしまい、解析スクリプトに記載したプローブアドレスを大幅に修正する必要が生じる。この例を図6(a)、(b)に示す。
【0017】
図6(a)、(b)の例では、オブジェクト名がオブジェクト1のオブジェクトコードのサイズと、オブジェクト名がオブジェクト2のオブジェクトコードのサイズとがいずれも大きくなったことにより、変更のないオブジェクト名がオブジェクト3のオブジェクトコード内のプローブのアドレスが変わっている。さらに、オブジェクト名がオブジェクト3のオブジェクトコードより高位のアドレスにプローブが埋め込まれていた場合、すべてのプローブのアドレスが変わってしまう。
【0018】
一方、特許文献1に記載のリンカ装置は、コードサイズの比率等を用いて、ユーザまたはシステムが空き領域のサイズを指定するため、空き領域の指定が必要となる。
【0019】
本発明の目的は、上記課題を解決し、オブジェクトコードの変更によりそのサイズが変わる場合でも、メモリ配置上のオブジェクトコードのアドレスの修正を最小限にできるメモリ配置管理装置、メモリ配置管理方法、メモリ配置管理プログラム、およびプログラム作成システムを提供することにある。
【課題を解決するための手段】
【0020】
本発明の第1の観点によれば、メモリ領域を予め設定された固定長サイズのセグメントに分割し、分割したセグメントにオブジェクトコードを割り当てて配置したときの当該オブジェクトコードが割り当てられたセグメントの先頭セグメント番号およびセグメント数を、当該オブジェクトコードが割り当てられていない空き領域となるセグメントの先頭セグメント番号およびセグメント数と共に管理するメモリ配置管理テーブルと、前記オブジェクトコードが更新される際、更新後のオブジェクトコードのオブジェクトサイズから変更後のオブジェクトコードに割り当てられるセグメントのセグメント数を計算し、変更後のセグメント数が変更前のセグメント数よりも大きいとき、変更後のオブジェクトコードを変更後のセグメント数以上の空き領域となるセグメントに移動し、変更後のセグメント数が変更前のセグメント数以下のとき、変更後のオブジェクトコードをその変更前のセグメント内に収めるように前記メモリ配置管理テーブルを更新する管理テーブル更新部と、更新された前記メモリ配置管理テーブルから、前記オブジェクトコードのメモリ配置を設定するためのオブジェクトアドレスを含むメモリ配置設定ファイルを生成する設定ファイル生成部とを有することを特徴とするメモリ配置管理装置が提供される。
【0021】
本発明の第2の観点によれば、メモリ配置管理テーブルが、メモリ領域を固定長サイズのセグメントに分割し、分割したセグメントにオブジェクトコードを割り当てて配置したときの当該オブジェクトコードが割り当てられたセグメントの先頭セグメント番号およびセグメント数を、当該オブジェクトコードが割り当てられていない空き領域となるセグメントの先頭セグメント番号およびセグメント数と共に管理し、管理テーブル更新部が、前記オブジェクトコードが更新される際、更新後のオブジェクトコードのオブジェクトサイズから変更後のオブジェクトコードに割り当てられるセグメントのセグメント数を計算し、変更後のセグメント数が変更前のセグメント数よりも大きいとき、変更後のオブジェクトコードを変更後のセグメント数以上の空き領域となるセグメントに移動し、変更後のセグメント数が変更前のセグメント数以下のとき、変更後のオブジェクトコードをその変更前のセグメント内に収めるように前記メモリ配置管理テーブルを更新し、設定ファイル生成部が、更新された前記メモリ配置管理テーブルから、前記オブジェクトコードのメモリ配置を設定するためのオブジェクトアドレスを含むメモリ配置設定ファイルを生成することを特徴とするメモリ配置管理方法が提供される。
【0022】
本発明の第3の観点によれば、コンピュータを、メモリ領域を固定長サイズのセグメントに分割し、分割したセグメントにオブジェクトコードを割り当てて配置したときの当該オブジェクトコードが割り当てられたセグメントの先頭セグメント番号およびセグメント数を、当該オブジェクトコードが割り当てられていない空き領域となるセグメントの先頭セグメント番号およびセグメント数と共に管理するメモリ配置管理テーブルと、前記オブジェクトコードが更新される際、更新後のオブジェクトコードのオブジェクトサイズから変更後のオブジェクトコードに割り当てられるセグメントのセグメント数を計算し、変更後のセグメント数が変更前のセグメント数よりも大きいとき、変更後のオブジェクトコードを変更後のセグメント数以上の空き領域となるセグメントに移動し、変更後のセグメント数が変更前のセグメント数以下のとき、変更後のオブジェクトコードをその変更前のセグメント内に収めるように前記メモリ配置管理テーブルを更新する管理テーブル更新部と、更新された前記メモリ配置管理テーブルから、前記オブジェクトコードのメモリ配置を設定するためのオブジェクトアドレスを含むメモリ配置設定ファイルを生成する設定ファイル生成部として機能させることを特徴とするメモリ配置管理プログラムが提供される。
【0023】
本発明の第4の観点によれば、上記に記載のメモリ配置管理装置と、オブジェクトコードをリンクして実行ファイルを生成し、当該オブジェクトコードのリンク時に前記メモリ配置管理装置により生成されたメモリ配置設定ファイルを用いて前記オブジェクトコードのメモリ配置を設定するリンカとを有することを特徴とするプログラム作成システムが提供される。
【発明の効果】
【0024】
本発明によれば、オブジェクトコードの変更によりそのサイズが変わる場合でも、メモリ配置上のオブジェクトコードのアドレスの修正を最小限にできる。
【図面の簡単な説明】
【0025】
【図1】本発明の実施の形態に係るメモリ配置管理装置の構成を示すブロック図である。
【図2】図1に示すメモリ配置管理装置において、オブジェクトコード変更前後のメモリ配置管理テーブルを示す図である。
【図3】図1に示すメモリ配置管理装置の動作を示すフローチャートである。
【図4】図1に示すメモリ配置管理装置を用いた場合のオブジェクトコード変更前後のメモリ配置を示す図である。
【図5】関連技術に係るOSの障害解析のための情報採取方法を説明するブロック図である。
【図6】関連技術を用いた場合のオブジェクトコード変更前後のメモリ配置を示す図である。
【発明を実施するための形態】
【0026】
以下、本発明に係るメモリ配置管理装置、メモリ配置管理方法、メモリ配置管理プログラム、およびプログラム作成システムの実施の形態について、図面を参照して詳細に説明する。
【0027】
図1は、本実施の形態に係るメモリ配置管理装置の構成を説明するものである。
【0028】
図1に示すメモリ配置管理装置50は、コンパイラ10、リンカ20、逆アセンブラ40と共にプログラムの作成及び修正を行うシステム(プログラム作成システム)を構成し、プログラミング言語で記述されたソースコード1をコンパイラ10によりコンパイルしてオブジェクトファイル2を生成し、生成したオブジェクトファイル2をリンカ20によりリンクして実行ファイル3を生成する際に用いられる。具体的には、メモリ配置管理ツール5と、メモリ配置設定ファイル6とを含む。
【0029】
メモリ配置設定ファイル6は、オブジェクトコードのメモリ配置を設定するための全オブジェクトコードのオブジェクト名と、オブジェクトアドレスとを記載したファイルである。リンカ20は、オブジェクトファイル2のリンク時にメモリ配置設定ファイル6を参照して、オブジェクトコードのメモリ配置を設定する。このため、メモリ配置設定ファイル6は、リンカ20が指定するフォーマットにする必要がある。例えば、ARMプロセッサ向けのコンパイラRVCTを使用する場合、メモリ配置設定ファイル6は、「スキャッタローディング記述ファイル」のフォーマットにする必要がある。
【0030】
メモリ配置管理ツール5は、メモリ領域を固定長サイズのセグメントに分割し、オブジェクトファイル2のオブジェクトコードをセグメント境界に割り当てて配置することにより、オブジェクトコードのメモリ配置を管理するためのツールである。
【0031】
このメモリ配置管理ツール5は、ソースコード1を変更したときに、変更後のソースコード1に対応するオブジェクトファイル2を逆アセンブラ40により逆アセンブルして得られる、変更したオブジェクトコードの逆アセンブルリスト4の情報(オブジェクト名41、オブジェクトサイズ42)から、メモリ配置設定ファイル6を生成する。
【0032】
具体的に、メモリ配置管理ツール5は、管理テーブル更新部51、設定ファイル生成部52、およびメモリ配置管理テーブル53を含む。
【0033】
メモリ配置管理テーブル53は、図2(a)、(b)に示すように、メモリ領域を予め設定された固定長サイズのセグメントに分割し、分割したセグメントにオブジェクトコードを割り当てて配置したときのオブジェクトコードの「オブジェクト名」、オブジェクトコードが割り当てられるセグメントの「先頭セグメント番号」、オブジェクトコードに割り当てられたセグメントの「セグメント数」を管理するための表である。
【0034】
具体的には、メモリ配置管理テーブル53は、オブジェクトコードが割り当てられたセグメントの場合、オブジェクトコードのオブジェクト名に対応付けて、先頭セグメント番号およびセグメント数を管理すると共に、空き領域となるセグメントの場合、オブジェクトコードのオブジェクト名をnullとし、nullに対応付けて、先頭セグメント番号およびセグメント数を管理する。
【0035】
管理テーブル更新部51は、オブジェクトコードが更新された際に、変更後のオブジェクトコードの逆アセンブルリスト4のオブジェクト名41およびオブジェクトサイズ42から、メモリ配置管理テーブル53のオブジェクト名、先頭セグメント番号、およびセグメント数を更新する。
【0036】
具体的には、管理テーブル更新部51は、更新後のオブジェクトコードのオブジェクトサイズから変更後のオブジェクトコードに割り当てられるセグメントのセグメント数を計算し、変更後のセグメント数が変更前のセグメント数よりも大きいとき、変更後のオブジェクトコードを変更後のセグメント数以上の空き領域となるセグメントに移動し、変更後のセグメント数が変更前のセグメント数以下のとき、変更後のオブジェクトコードをその変更前のセグメント内に収めるようにメモリ配置管理テーブル53を更新する。
【0037】
また、管理テーブル更新部51は、変更後のセグメント数が変更前のセグメント数より小さいとき、変更後のオブジェクトコードを、変更前のセグメントの内、先頭セグメントから変更後のセグメント数分のセグメントに収め、その残りのセグメントを空き領域とするようにメモリ配置管理テーブル53を更新する。
【0038】
管理テーブル生成部52は、オブジェクトコードが更新された際に、メモリ配置管理テーブル53のオブジェクト名、先頭セグメント番号、およびセグメント数を参照して、メモリ配置設定ファイル6を生成する。
【0039】
次に、本実施の形態の動作について説明する。
【0040】
図3は、オブジェクト名Aのオブジェクトコードを変更した時のメモリ配置管理テーブル53の更新処理を示すフローチャートである。以下、図3を参照して、オブジェクト名Aのオブジェクトコードが更新されたときの管理テーブル更新部51の動作について説明する。
【0041】
まず、管理テーブル更新部51は、メモリ配置管理テーブル53からオブジェクトコードのオブジェクト名がAに対応する行Tを検索し(ステップA1)、検索された行Tのセグメント数を取得して変数S1に代入する(ステップA2)。
【0042】
次に、管理テーブル更新部51は、オブジェクトファイル2の逆アセンブルにより生成された逆アセンブルリスト4からオブジェクト名Aのオブジェクトコードのオブジェクトサイズ42を取得し(ステップA3)、取得したオブジェクトサイズ42から、オブジェクトコードの変更後のセグメント数を計算し、変数S2に代入する(ステップA4)。セグメント数は、逆アセンブルリスト4から取得したオブジェクトサイズ42を、あらかじめ定義したセグメントサイズで割ることによって計算することができる。
【0043】
次に、管理テーブル更新部51は、S1<S2か否か判定し(ステップA5)、その結果、S1<S2の場合(変更後のオブジェクトコードのセグメント数が行Tのセグメント数より大きい場合)(ステップA5:Yes)、以下の処理を行う。
【0044】
すなわち、管理テーブル更新部51は、行Tのオブジェクト名をAからnullに変更し(ステップA6)、行Tの次行のオブジェクト名がnullか否か判定し(ステップA7)、その結果、行Tの次行のオブジェクト名がnullの場合(ステップA7:YES)、行Tと行Tの次行とを結合するため、行Tのセグメント数に行Tの次行のセグメント数を加算し、行Tの次行を削除する(ステップA8)。
【0045】
次に、管理テーブル更新部51は、メモリ配置管理テーブル53の先頭からセグメント数がS2以上、オブジェクト名がnullの行(この行を新たなTとする)を検索し(ステップA9)、検索された行Tのオブジェクト名をnullからAに変更し(ステップA10)、行Tのセグメント数を取得して変数S1に代入する(ステップA11)。
【0046】
次に、管理テーブル更新部51は、S1=S2か否か判定し(ステップA12)、その結果、S1=S2でない場合(変更後のオブジェクトコードのセグメント数が行Tのセグメント数より小さい場合)(ステップA12:No)、以下の処理を行う。
【0047】
すなわち、管理テーブル更新部51は、行Tのセグメント数をS2に変更し(ステップA13)、行Tの次行のオブジェクト名がnullか否か判定し(ステップA14)、その結果、Tの次行のオブジェクト名がnullでない場合(ステップA14:No)、行Tの次行に、オブジェクト名がnull、先頭セグメント番号が0、セグメント数が0の行を追加する(ステップA15)。
【0048】
最後に、管理テーブル更新部51は、行Tの次行の先頭セグメント番号に「行Tのセグメント番号+S2」を代入し、セグメント数に「S2−S1」を加算する(ステップA16)。
【0049】
次に、図2のようにオブジェクト名がオブジェクト2のオブジェクトコードのセグメント数が1から2に変更された場合の管理テーブル更新部51の動作を、図3を参照して説明する。
【0050】
まず、管理テーブル更新部51は、メモリ配置管理テーブル53からオブジェクト名がオブジェクト2の行(この行をTとする)を検索し(ステップA1)、検索された行Tのセグメント数1を取得してS1=1とする(ステップA2)。
【0051】
次に、管理テーブル更新部51は、逆アセンブルリスト4からオブジェクト2のオブジェクトサイズ42を取得し(ステップA3)、オブジェクトコードの変更後のセグメント数2を計算し、S2=2とする(ステップA4)。
【0052】
次に、管理テーブル更新部51は、S1<S2か否か判定し(ステップA5)、その結果、S1<S2となるため(ステップA5:Yes)、以下の処理を行う。
【0053】
すなわち、管理テーブル更新部51は、行Tのオブジェクト名をオブジェクト2からnullに変更し(ステップA6)、行Tの次行のオブジェクト名がnullか否か判定する(ステップA7)。その結果、行Tの次行のオブジェクト名はオブジェクト3であり、nullではないため(ステップA7:No)、管理テーブル更新部51は、メモリ配置管理テーブル53の先頭から、セグメント数S2(=2)以上、かつ、オブジェクト名がnullの行(この行を新たなTとする)を検索する(ステップA9)。
【0054】
次に、管理テーブル更新部51は、行Tのオブジェクト名をnullからオブジェクト2に変更し(ステップA10)、行Tのセグメント数2を取得してS1=2とする(ステップA11)。
【0055】
次に、管理テーブル更新部51は、S1=S2か否か判定し(ステップA12)、その結果、S1=S2となるため(ステップA12:Yes)、メモリ配置管理テーブル53の更新処理を終了する。
【0056】
以上のように、本実施の形態によれば、メモリ領域を固定長サイズのセグメントに分割し、オブジェクトコードをセグメント境界に配置する。そして、オブジェクトコードの変更により、割り当てられたセグメント内にオブジェクトコードが収まらなくなった場合は、オブジェクトコードを空き領域に移動し、割り当てられたセグメント内に収まる場合は、オブジェクトコードは移動しない。オブジェクトコードが移動するのは、オブジェクトコードが変更され、かつ、割り当てられたセグメント内に収まらない場合のみであり、その移動を最小限にすることができる。
【0057】
これにより、OSのソースコード1の修正によってオブジェクトコードが変更された場合に、変更の前後で、変更のない他のオブジェクトコード、例えばプローブ(障害解析のためOSに埋め込んだ情報採取処理)のアドレスが変わらないようにするメモリ配置を実現することができる。
【0058】
図4(a)、(b)は、前述した図6(a)、(b)と同じオブジェクトコードに対して、本実施の形態を適用した場合の例を示す。図6(a)、(b)の例では、オブジェクト名がオブジェクト2のオブジェクトコードは割り当てられたセグメント内に収まらなくなったため、空き領域に移動しており、オブジェクト名がオブジェクト1のオブジェクトコードは割り当てられたセグメント内に収まるため、移動しない。変更のないオブジェクト名がオブジェクト3のオブジェクトコード内のプローブのアドレスは変わっていない。
【0059】
従って、本実施の形態によれば、OSの処理を変更した際、解析スクリプトに記載されているプローブアドレスの修正を最小限にできる。その理由は、オブジェクトの変更により、変更後のオブジェクトコードが割り当てられたセグメントに収まらなくなった場合は、変更後のオブジェクトコードを空き領域に移動し、他のオブジェクトコードのアドレスが変わらないようにするためである。
【0060】
なお、オブジェクトコードをセグメント境界に配置することにより、オブジェクトコード間に空き領域ができるため、キャッシュメモリの利用効率が低くなる可能性がある。しかし、キャッシュラインサイズのセグメントに分割し、オブジェクトコードをキャッシュライン境界に配置することで、オブジェクトコードの先頭部分がセグメント境界を跨ぐことがなくなるため、キャッシュメモリの利用効率が高くなると考えられる。
【0061】
すなわち、本実施の形態では、セグメントのサイズをキャッシュラインのサイズとすることで、コードがキャッシュライン境界を跨ることがなくなり、キャッシュメモリの利用効率が高くなる。
【0062】
また、本実施の形態では、メモリ領域を固定長のセグメントに分割し、セグメント境界にコードを割り当てるだけで、自動的に空き領域のサイズが決まるため、空き領域の指定は不要である。
【0063】
上記のメモリ配置管理装置は、ハードウェア、ソフトウェア又はこれらの組合せにより実現することができる。この場合のハードウェア、ソフトウェア又はこれらの組合せによる構成は特に限定されるものではなく、上述した機能を実現可能なものであれば、いずれの形態でも適用可能である。
【0064】
上記の実施の形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限定されない。
【0065】
(付記1)メモリ領域を予め設定された固定長サイズのセグメントに分割し、分割したセグメントにオブジェクトコードを割り当てて配置したときの当該オブジェクトコードが割り当てられたセグメントの先頭セグメント番号およびセグメント数を、当該オブジェクトコードが割り当てられていない空き領域となるセグメントの先頭セグメント番号およびセグメント数と共に管理するメモリ配置管理テーブルと、前記オブジェクトコードが更新される際、更新後のオブジェクトコードのオブジェクトサイズから変更後のオブジェクトコードに割り当てられるセグメントのセグメント数を計算し、変更後のセグメント数が変更前のセグメント数よりも大きいとき、変更後のオブジェクトコードを変更後のセグメント数以上の空き領域となるセグメントに移動し、変更後のセグメント数が変更前のセグメント数以下のとき、変更後のオブジェクトコードをその変更前のセグメント内に収めるように前記メモリ配置管理テーブルを更新する管理テーブル更新部と、更新された前記メモリ配置管理テーブルから、前記オブジェクトコードのメモリ配置を設定するためのオブジェクトアドレスを含むメモリ配置設定ファイルを生成する設定ファイル生成部とを有することを特徴とするメモリ配置管理装置。
【0066】
(付記2)前記管理テーブル更新部は、変更後のセグメント数が変更前のセグメント数より小さいとき、変更後のオブジェクトコードを、変更前のセグメントの内、先頭セグメントから変更後のセグメント数分のセグメントに収め、その残りのセグメントを空き領域とするように前記メモリ配置管理テーブルを更新することを特徴とする付記1に記載のメモリ配置管理装置。
【0067】
(付記3)前記メモリ配置管理テーブルは、前記オブジェクトコードが割り当てられたセグメントの場合、当該オブジェクトコードのオブジェクト名に対応付けて、前記先頭セグメント番号およびセグメント数を管理すると共に、前記空き領域となるセグメントの場合、前記オブジェクトコードのオブジェクト名をnullとし、当該nullに対応付けて、前記先頭セグメント番号およびセグメント数を管理することを特徴とする付記1又は2に記載のメモリ配置管理装置。
【0068】
(付記4)前記セグメントの固定長サイズは、キャッシュメモリのキャッシュラインサイズに予め設定されることを特徴とする付記1から3のいずれかに記載のメモリ配置管理装置。
【0069】
(付記5)前記オブジェクトコードは、オペレーティングシステムを構成するオブジェクトコードであることを特徴とする付記1から4のいずれかに記載のメモリ配置管理装置。
【0070】
(付記6)前記オブジェクトコードは、前記オペレーティングシステムの障害解析のための情報採取処理を行うプローブが埋め込まれていることを特徴とする付記5に記載のメモリ配置管理装置。
【0071】
(付記7)メモリ配置管理テーブルが、メモリ領域を固定長サイズのセグメントに分割し、分割したセグメントにオブジェクトコードを割り当てて配置したときの当該オブジェクトコードが割り当てられたセグメントの先頭セグメント番号およびセグメント数を、当該オブジェクトコードが割り当てられていない空き領域となるセグメントの先頭セグメント番号およびセグメント数と共に管理し、管理テーブル更新部が、前記オブジェクトコードが更新される際、更新後のオブジェクトコードのオブジェクトサイズから変更後のオブジェクトコードに割り当てられるセグメントのセグメント数を計算し、変更後のセグメント数が変更前のセグメント数よりも大きいとき、変更後のオブジェクトコードを変更後のセグメント数以上の空き領域となるセグメントに移動し、変更後のセグメント数が変更前のセグメント数以下のとき、変更後のオブジェクトコードをその変更前のセグメント内に収めるように前記メモリ配置管理テーブルを更新し、設定ファイル生成部が、更新された前記メモリ配置管理テーブルから、前記オブジェクトコードのメモリ配置を設定するためのオブジェクトアドレスを含むメモリ配置設定ファイルを生成することを特徴とするメモリ配置管理方法。
【0072】
(付記8)前記管理テーブル更新部が、変更後のセグメント数が変更前のセグメント数より小さいとき、変更後のオブジェクトコードを、変更前のセグメントの内、先頭セグメントから変更後のセグメント数分のセグメントに収め、その残りのセグメントを空き領域とするように前記メモリ配置管理テーブルを更新することを特徴とする付記7に記載のメモリ配置管理方法。
【0073】
(付記9)前記メモリ配置管理テーブルが、前記オブジェクトコードが割り当てられたセグメントの場合、当該オブジェクトコードのオブジェクト名に対応付けて、前記先頭セグメント番号およびセグメント数を管理すると共に、前記空き領域となるセグメントの場合、前記オブジェクトコードのオブジェクト名をnullとし、当該nullに対応付けて、前記先頭セグメント番号およびセグメント数を管理することを特徴とする付記7又は8に記載のメモリ配置管理方法。
【0074】
(付記10)前記セグメントの固定長サイズは、キャッシュメモリのキャッシュラインサイズに予め設定されることを特徴とする付記7から9のいずれかに記載のメモリ配置管理方法。
【0075】
(付記11)前記オブジェクトコードは、オペレーティングシステムを構成するオブジェクトコードであることを特徴とする付記7から10のいずれかに記載のメモリ配置管理方法。
【0076】
(付記12)前記オブジェクトコードは、前記オペレーティングシステムの障害解析のための情報採取処理を行うプローブが埋め込まれていることを特徴とする付記11に記載のメモリ配置管理方法。
【0077】
(付記13)コンピュータを、メモリ領域を固定長サイズのセグメントに分割し、分割したセグメントにオブジェクトコードを割り当てて配置したときの当該オブジェクトコードが割り当てられたセグメントの先頭セグメント番号およびセグメント数を、当該オブジェクトコードが割り当てられていない空き領域となるセグメントの先頭セグメント番号およびセグメント数と共に管理するメモリ配置管理テーブルと、前記オブジェクトコードが更新される際、更新後のオブジェクトコードのオブジェクトサイズから変更後のオブジェクトコードに割り当てられるセグメントのセグメント数を計算し、変更後のセグメント数が変更前のセグメント数よりも大きいとき、変更後のオブジェクトコードを変更後のセグメント数以上の空き領域となるセグメントに移動し、変更後のセグメント数が変更前のセグメント数以下のとき、変更後のオブジェクトコードをその変更前のセグメント内に収めるように前記メモリ配置管理テーブルを更新する管理テーブル更新部と、更新された前記メモリ配置管理テーブルから、前記オブジェクトコードのメモリ配置を設定するためのオブジェクトアドレスを含むメモリ配置設定ファイルを生成する設定ファイル生成部として機能させることを特徴とするメモリ配置管理プログラム。
【0078】
(付記14)前記管理テーブル更新部は、変更後のセグメント数が変更前のセグメント数より小さいとき、変更後のオブジェクトコードを、変更前のセグメントの内、先頭セグメントから変更後のセグメント数分のセグメントに収め、その残りのセグメントを空き領域とするように前記メモリ配置管理テーブルを更新することを特徴とする付記13に記載のメモリ配置管理プログラム。
【0079】
(付記15)前記メモリ配置管理テーブルは、前記オブジェクトコードが割り当てられたセグメントの場合、当該オブジェクトコードのオブジェクト名に対応付けて、前記先頭セグメント番号およびセグメント数を管理すると共に、前記空き領域となるセグメントの場合、前記オブジェクトコードのオブジェクト名をnullとし、当該nullに対応付けて、前記先頭セグメント番号およびセグメント数を管理することを特徴とする付記13又は14に記載のメモリ配置管理プログラム。
【0080】
(付記16)前記セグメントの固定長サイズは、キャッシュメモリのキャッシュラインサイズに予め設定されることを特徴とする付記13から15のいずれかに記載のメモリ配置管理プログラム。
【0081】
(付記17)前記オブジェクトコードは、オペレーティングシステムを構成するオブジェクトコードであることを特徴とする付記13から16のいずれかに記載のメモリ配置管理プログラム。
【0082】
(付記18)前記オブジェクトコードは、前記オペレーティングシステムの障害解析のための情報採取処理を行うプローブが埋め込まれていることを特徴とする付記17に記載のメモリ配置管理プログラム。
【0083】
(付記19)付記1から6のいずれかに記載のメモリ配置管理装置と、オブジェクトコードをリンクして実行ファイルを生成し、当該オブジェクトコードのリンク時に前記メモリ配置管理装置により生成されたメモリ配置設定ファイルを用いて前記オブジェクトコードのメモリ配置を設定するリンカとを有することを特徴とするプログラム作成システム。
【0084】
(付記20)ソースコードをコンパイルして前記オブジェクトコードを生成するコンパイラと、前記オブジェクトコードを逆アセンブルして当該オブジェクトコードのオブジェクト名およびオブジェクトサイズを含む逆アセンブルリストを生成する逆アセンブラとをさらに有することを特徴とする付記19に記載のプログラム作成システム。
【0085】
以上、実施の形態を参照して本願発明を説明したが、本願発明は上記実施の形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【産業上の利用可能性】
【0086】
以上説明したように、本発明は、OSのオブジェクトコードのメモリ配置を管理するメモリ配置管理装置、メモリ配置管理方法、メモリ配置管理プログラム、およびプログラム作成システムの用途に利用可能である。
【符号の説明】
【0087】
1 ソースコード
2 オブジェクトコード
3 実行ファイル
4 逆アセンブルリスト
5 メモリ配置管理ツール
6 メモリ配置設定ファイル
10 コンパイラ
20 リンカ
40 逆アセンブラ
41 オブジェクト名
42 オブジェクトサイズ
50 メモリ配置管理装置
51 管理テーブル更新部
52 設定ファイル生成部
53 メモリ配置管理テーブル
100 コンピュータ
101 OS
102 解析プログラム
103 インタプリタ
110 外部記憶媒体
111 解析スクリプト
112 ログファイル

【特許請求の範囲】
【請求項1】
メモリ領域を予め設定された固定長サイズのセグメントに分割し、分割したセグメントにオブジェクトコードを割り当てて配置したときの当該オブジェクトコードが割り当てられたセグメントの先頭セグメント番号およびセグメント数を、当該オブジェクトコードが割り当てられていない空き領域となるセグメントの先頭セグメント番号およびセグメント数と共に管理するメモリ配置管理テーブルと、
前記オブジェクトコードが更新される際、更新後のオブジェクトコードのオブジェクトサイズから変更後のオブジェクトコードに割り当てられるセグメントのセグメント数を計算し、変更後のセグメント数が変更前のセグメント数よりも大きいとき、変更後のオブジェクトコードを変更後のセグメント数以上の空き領域となるセグメントに移動し、変更後のセグメント数が変更前のセグメント数以下のとき、変更後のオブジェクトコードをその変更前のセグメント内に収めるように前記メモリ配置管理テーブルを更新する管理テーブル更新部と、
更新された前記メモリ配置管理テーブルから、前記オブジェクトコードのメモリ配置を設定するためのオブジェクトアドレスを含むメモリ配置設定ファイルを生成する設定ファイル生成部とを有することを特徴とするメモリ配置管理装置。
【請求項2】
前記管理テーブル更新部は、変更後のセグメント数が変更前のセグメント数より小さいとき、変更後のオブジェクトコードを、変更前のセグメントの内、先頭セグメントから変更後のセグメント数分のセグメントに収め、その残りのセグメントを空き領域とするように前記メモリ配置管理テーブルを更新することを特徴とする請求項1に記載のメモリ配置管理装置。
【請求項3】
前記メモリ配置管理テーブルは、前記オブジェクトコードが割り当てられたセグメントの場合、当該オブジェクトコードのオブジェクト名に対応付けて、前記先頭セグメント番号およびセグメント数を管理すると共に、前記空き領域となるセグメントの場合、前記オブジェクトコードのオブジェクト名をnullとし、当該nullに対応付けて、前記先頭セグメント番号およびセグメント数を管理することを特徴とする請求項1又は2に記載のメモリ配置管理装置。
【請求項4】
前記セグメントの固定長サイズは、キャッシュメモリのキャッシュラインサイズに予め設定されることを特徴とする請求項1から3のいずれかに記載のメモリ配置管理装置。
【請求項5】
前記オブジェクトコードは、オペレーティングシステムを構成するオブジェクトコードであることを特徴とする請求項1から4のいずれかに記載のメモリ配置管理装置。
【請求項6】
前記オブジェクトコードは、前記オペレーティングシステムの障害解析のための情報採取処理を行うプローブが埋め込まれていることを特徴とする請求項5に記載のメモリ配置管理装置。
【請求項7】
メモリ配置管理テーブルが、メモリ領域を固定長サイズのセグメントに分割し、分割したセグメントにオブジェクトコードを割り当てて配置したときの当該オブジェクトコードが割り当てられたセグメントの先頭セグメント番号およびセグメント数を、当該オブジェクトコードが割り当てられていない空き領域となるセグメントの先頭セグメント番号およびセグメント数と共に管理し、
管理テーブル更新部が、前記オブジェクトコードが更新される際、更新後のオブジェクトコードのオブジェクトサイズから変更後のオブジェクトコードに割り当てられるセグメントのセグメント数を計算し、変更後のセグメント数が変更前のセグメント数よりも大きいとき、変更後のオブジェクトコードを変更後のセグメント数以上の空き領域となるセグメントに移動し、変更後のセグメント数が変更前のセグメント数以下のとき、変更後のオブジェクトコードをその変更前のセグメント内に収めるように前記メモリ配置管理テーブルを更新し、
設定ファイル生成部が、更新された前記メモリ配置管理テーブルから、前記オブジェクトコードのメモリ配置を設定するためのオブジェクトアドレスを含むメモリ配置設定ファイルを生成することを特徴とするメモリ配置管理方法。
【請求項8】
コンピュータを、
メモリ領域を固定長サイズのセグメントに分割し、分割したセグメントにオブジェクトコードを割り当てて配置したときの当該オブジェクトコードが割り当てられたセグメントの先頭セグメント番号およびセグメント数を、当該オブジェクトコードが割り当てられていない空き領域となるセグメントの先頭セグメント番号およびセグメント数と共に管理するメモリ配置管理テーブルと、
前記オブジェクトコードが更新される際、更新後のオブジェクトコードのオブジェクトサイズから変更後のオブジェクトコードに割り当てられるセグメントのセグメント数を計算し、変更後のセグメント数が変更前のセグメント数よりも大きいとき、変更後のオブジェクトコードを変更後のセグメント数以上の空き領域となるセグメントに移動し、変更後のセグメント数が変更前のセグメント数以下のとき、変更後のオブジェクトコードをその変更前のセグメント内に収めるように前記メモリ配置管理テーブルを更新する管理テーブル更新部と、
更新された前記メモリ配置管理テーブルから、前記オブジェクトコードのメモリ配置を設定するためのオブジェクトアドレスを含むメモリ配置設定ファイルを生成する設定ファイル生成部として機能させることを特徴とするメモリ配置管理プログラム。
【請求項9】
請求項1から6のいずれかに記載のメモリ配置管理装置と、
オブジェクトコードをリンクして実行ファイルを生成し、当該オブジェクトコードのリンク時に前記メモリ配置管理装置により生成されたメモリ配置設定ファイルを用いて前記オブジェクトコードのメモリ配置を設定するリンカとを有することを特徴とするプログラム作成システム。
【請求項10】
ソースコードをコンパイルして前記オブジェクトコードを生成するコンパイラと、
前記オブジェクトコードを逆アセンブルして当該オブジェクトコードのオブジェクト名およびオブジェクトサイズを含む逆アセンブルリストを生成する逆アセンブラとをさらに有することを特徴とする請求項9に記載のプログラム作成システム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate


【公開番号】特開2012−247908(P2012−247908A)
【公開日】平成24年12月13日(2012.12.13)
【国際特許分類】
【出願番号】特願2011−117975(P2011−117975)
【出願日】平成23年5月26日(2011.5.26)
【出願人】(000004237)日本電気株式会社 (19,353)
【Fターム(参考)】