(57)【要約】【課題】高速に処理されるべきオブジェクトをＲＡＭに優先的に配置して処理速度の向上を図る。【解決手段】リンカーがマップ情報を生成するために参照する配置指示情報に基づいて、各オブジェクトの各配置可能領域に対する配置優先度を設定し、第１の配置可能領域がＲＡＭに形成され、第１の配置可能領域に対して各オブジェクトの何れもが配置可能である場合、配置指示情報に配置可能領域が指示されないオブジェクトに対して高速に処理されるべき順位を示すタスク優先度に基づき、ＲＡＭに対する重み付け優先度を算出して第１の配置可能領域に対する配置優先度に付加し、この配置優先度に基づいてオブジェクトの組み合わせをＲＡＭから先に決定する。【選択図】図１
2011076516.tif 000002
【特許請求の範囲】
【請求項１】
相対的に処理速度が低速な少なくとも１つの低速メモリー、および相対的に処理速度が高速な少なくとも１つの高速メモリーの何れかに配置する各オブジェクトのサイズとアドレスを、リンカーが生成したマップ情報に基づき取得するマッピング情報取得機能と、
前記オブジェクトを再配置するための領域であって、予め定義された配置可能領域のアドレスとサイズとを取得する配置可能領域情報取得機能と、
前記リンカーが前記マップ情報を生成するために参照する配置指示情報に基づいて、各オブジェクトの各配置可能領域に対する配置優先度を設定し、前記配置可能領域が前記高速メモリーに形成され、前記配置可能領域に対して各オブジェクトの何れもが配置可能である場合、前記配置指示情報に前記配置可能領域が明示されていないオブジェクトが高速に処理されるべき順位を示すタスク優先度に基づき、前記高速メモリーに対する前記オブジェクトの重み付け優先度を算出し、算出した前記重み付け優先度を前記配置可能領域に対する前記配置優先度に付加する配置優先度設定機能と、
前記配置可能領域に配置可能なオブジェクトであって、その累計サイズが前記配置可能領域のサイズを超えないような前記オブジェクトの組み合わせを、前記配置優先度に基づいて、前記高速メモリーに形成された前記配置可能領域から優先して決定する組み合わせ決定機能と、
前記組み合わせに含まれる前記オブジェクトを前記配置可能領域に配置する指示となるように前記配置指示情報を更新する配置指示情報更新機能と、をコンピューターに実現させることを特徴とする配置指示情報更新プログラム。
【請求項２】
請求項１に記載の配置指示情報更新プログラムにおいて、
前記組み合わせ決定機能は、前記各オブジェクトの前記各配置可能領域に対する前記配置優先度の高低を品物の価値とし、前記オブジェクトのサイズを前記品物の大きさとし、前記配置可能領域のサイズをナップザックの大きさとして、ナップザック問題を解くことにより、前記配置可能領域に再配置するオブジェクトの組み合わせを決定することを特徴とする配置指示情報更新プログラム。
【請求項３】
請求項１乃至２のいずれかに記載の配置指示情報更新プログラムにおいて、
前記組み合わせ決定機能は、最初に、前記高速メモリーに対して前記オブジェクトの組み合わせを決定し、前記高速メモリーの容量が不足する場合、残りの前記オブジェクトの組み合わせを前記低速メモリーに対して決定することを特徴とする配置指示情報更新プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンパイラーが生成したオブジェクトをリンカーが結合する際に、リンカーが参照する、オブジェクトの配置指示情報を更新するプログラムに関する。
【背景技術】
【０００２】
従来、プログラムをコンパイルして生成したオブジェクトを、性質が互いに異なる複数のメモリーに配置する際に、プログラムの実行頻度に応じて最適なメモリーに配置する技術が知られている（特許文献１）。性質が異なる例として、メモリー種別（ＲＯＭ／ＲＡＭ）が異なること、読み書き速度が異なること、消費電力が異なることなどが挙げられている。
静的ライブラリーやコンパイル済みのオブジェクトを、リンカーによってメモリー内の予め決められた領域に配置させるために、配置指示情報をリンク処理前に準備しておく必要がある。配置指示情報は、メモリー内のどの領域にどのオブジェクトを配置しようとするかを指定したものである。リンカーはこの配置指示情報を参照してリンク処理を実行する。リンク処理が実行されると、リンカーは、オブジェクトを配置するアドレスと、オブジェクトのサイズとが、オブジェクトごとに示されたマップ情報を生成し、静的ライブラリーやコンパイル済みオブジェクトを配置指示情報の記載通りに配置する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００３−３３０７３０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、配置指示情報はハードウェアの特性等を考慮して記載されていないため、配置指示情報の指示に従ってオブジェクトをメモリーに配置した場合、高速処理が必要なオブジェクトが、ＲＯＭ等の遅い読み込み速度のメモリーに配置されてしまい、オブジェクトの処理速度が低下するという問題があった。
【０００５】
本発明では、オブジェクトをメモリーの配置可能領域に配置する場合、高速な処理が必要なオブジェクトを高速に処理可能なメモリーに配置し、処理速度の向上を図ることを目的とする。
【課題を解決するための手段】
【０００６】
本発明は、上述の課題の少なくとも一部を解決するためになされたものであり、以下の形態または適用例として実現することが可能である。
【０００７】
［適用例１］
本適用例にかかる配置指示情報更新プログラムは、相対的に処理速度が低速な少なくとも１つの低速メモリー、および相対的に処理速度が高速な少なくとも１つの高速メモリーの何れかに配置する各オブジェクトのサイズとアドレスを、リンカーが生成したマップ情報に基づき取得するマッピング情報取得機能と、前記オブジェクトを再配置するための領域であって、予め定義された配置可能領域のアドレスとサイズとを取得する配置可能領域情報取得機能と、前記リンカーが前記マップ情報を生成するために参照する配置指示情報に基づいて、各オブジェクトの各配置可能領域に対する配置優先度を設定し、前記配置可能領域が前記高速メモリーに形成され、前記配置可能領域に対して各オブジェクトの何れもが配置可能である場合、前記配置指示情報に前記配置可能領域が明示されていないオブジェクトが高速に処理されるべき順位を示すタスク優先度に基づき、前記高速メモリーに対する前記オブジェクトの重み付け優先度を算出し、算出した前記重み付け優先度を前記配置可能領域に対する前記配置優先度に付加する配置優先度設定機能と、前記配置可能領域に配置可能なオブジェクトであって、その累計サイズが前記配置可能領域のサイズを超えないような前記オブジェクトの組み合わせを、前記配置優先度に基づいて、前記高速メモリーに形成された前記配置可能領域から優先して決定する組み合わせ決定機能と、前記組み合わせに含まれる前記オブジェクトを前記配置可能領域に配置する指示となるように前記配置指示情報を更新する配置指示情報更新機能と、をコンピューターに実現させることを特徴とする。
【０００８】
本発明によると、配置指示情報に基づいて、低速メモリー、および高速メモリーの何れかにオブジェクトを配置する際に、配置可能領域が高速メモリーに形成され、その配置可能領域に対して各オブジェクトの何れもが配置可能である場合、配置指示情報に配置可能領域が明示されていないオブジェクトに対して高速に処理されるべき順位を示すタスク優先度に基づき、高速メモリーに対する重み付け優先度を算出し、算出した重み付け優先度を各オブジェクトの各配置可能領域に対する配置優先度に加算し、重み付け優先度を加算した配置優先度に基づいて、オブジェクトの組み合わせを高速メモリーから先に決定する。従って、高速に処理されるべき順位を示すタスク優先度が加算されることにより、配置優先度が上昇したオブジェクトから順に、高速に処理可能な高速メモリーに配置されるため、メモリーでの処理に要する時間が短縮し、オブジェクトの処理速度の向上を図ることができる。
【０００９】
［適用例２］
上記適用例にかかる配置指示情報更新プログラムにおいて、前記組み合わせ決定機能は、前記各オブジェクトの前記各配置可能領域に対する前記配置優先度の高低を品物の価値とし、前記オブジェクトのサイズを前記品物の大きさとし、前記配置可能領域のサイズをナップザックの大きさとして、ナップザック問題を解くことにより、前記配置可能領域に再配置するオブジェクトの組み合わせを決定することが好ましい。
【００１０】
本発明によると、少ない計算コストで最適な組み合わせを決定することができる。
【００１１】
［適用例３］
上記適用例にかかる配置指示情報更新プログラムにおいて、前記組み合わせ決定機能は、最初に、前記高速メモリーに対して前記オブジェクトの組み合わせを決定し、前記高速メモリーの容量が不足する場合、残りの前記オブジェクトの組み合わせを前記低速メモリーに対して決定しても良い。
【図面の簡単な説明】
【００１２】
【図１】本発明にかかる配置指示情報更新プログラムの構成を示すブロック図。
【図２】（ａ）はエラーが発生しない場合のscatファイルの例を示し、（ｂ）はその場合のマップファイルの例を示し、（ｃ）はその場合のメモリーを示す図。
【図３】（ａ）はエラーが発生する場合のscatファイルの例を示し、（ｂ）はその場合のマップファイルの例を示し、（ｃ）はその場合のメモリーを示す図。
【図４】配置指示情報更新処理を示すフローチャート。
【図５】現状配置情報取得処理を示すフローチャート。
【図６】配置優先度設定処理を示すフローチャート。
【図７】組み合わせ決定処理を示すフローチャート。
【図８】未決定オブジェクトの配置領域決定処理を示すフローチャート。
【図９】領域情報構造体を示す図。
【図１０】オブジェクト情報構造体を示す図。
【図１１】オブジェクト情報構造体を示す図。
【図１２】オブジェクト情報構造体を示す図。
【図１３】属性テーブルを示す図。
【図１４】オブジェクト情報構造体を示す図。
【図１５】タスク優先度が定義されているファイルを示す図。
【図１６】オブジェクト情報構造体を示す図。
【図１７】オブジェクト情報構造体を示す図。
【図１８】オブジェクト情報構造体を示す図。
【図１９】新たに出力されるscatファイルの例を示す図。
【図２０】変形例で用いるscatファイルを示す図。
【図２１】領域情報構造体を示す図。
【図２２】オブジェクト情報構造体を示す図。
【図２３】オブジェクト情報構造体を示す図。
【図２４】オブジェクト情報構造体を示す図。
【図２５】属性テーブルを示す図。
【図２６】オブジェクト情報構造体を示す図。
【図２７】オブジェクト情報構造体を示す図。
【図２８】オブジェクト情報構造体を示す図。
【図２９】オブジェクト情報構造体を示す図。
【発明を実施するための形態】
【００１３】
以下、配置指示情報更新プログラムについて図面を参照して説明する。
【００１４】
（実施形態）
【００１５】
ここでは、下記の順序に従って本発明の実施の形態について説明する。
（１）配置指示情報更新プログラムの概要と構成：
（２）配置指示情報更新処理：
（２−１）変数初期化：
（２−２）現状配置情報取得処理：
（２−３）配置優先度設定処理：
（２−４）組み合わせ決定処理：
（２−５）scatファイル出力：
（３）変形例
【００１６】
（１）配置指示情報更新プログラムの概要と構成：
図１は、本発明にかかる配置指示情報更新プログラム２３の構成を示すブロック図である。コンピューター１０は、ＲＡＭ，ＲＯＭ，ＣＰＵ等を備える制御部２０と、ＨＤＤ３０を備えており、ＲＯＭまたはＨＤＤ３０に記録された様々なプログラムを制御部２０で実行することができる。本実施形態においては、コンパイルプログラム（以降、コンパイラーという）２１と、リンクプログラム（以降、リンカーという）２２と、配置指示情報更新プログラム２３を実行することができる。
【００１７】
コンパイラー２１は、ユーザーが作成したソースコードをコンパイルしてオブジェクトコードを生成し、オブジェクトコードを含んだオブジェクトファイル３０ａを生成する機能を有している。リンカー２２は、生成された複数のオブジェクトファイル３０ａ（以下、単にオブジェクトという）をメモリーの所定の領域に配置するリンク処理機能を有している。リンカー２２は、このリンク処理を実行する際、scatファイル（旧）３０ｂと呼ばれる、各オブジェクトの配置の仕方を指定する配置指示情報が含まれたファイルを参照する。scatファイル（旧）３０ｂにおいては、オブジェクトを配置可能なメモリー内の領域（配置可能領域）が先頭アドレスとサイズによって表されており、各配置可能領域に配置しようとするオブジェクトが指定されている。図２（ａ）はscatファイルの記述例を示している。図２（ａ）のscatファイルでは、0x40000000番地から0x6000000バイト分の領域にa.oとb.oとc.oとの３つのオブジェクトを配置し、0x47000000番地から0x2000000バイト分の領域にオブジェクトd.oを配置することを指定している。
【００１８】
リンカー２２は、scatファイル（旧）３０ｂを参照してリンク処理を実行する過程で、マップファイル３０ｃを生成する。マップファイル３０ｃには、リンク処理の対象となるオブジェクトのオブジェクト名と、オブジェクトのサイズ・配置アドレス・属性との対応が記述されている。オブジェクトの属性は、プログラム（ＴＥＸＴ）、初期値付き変数（ＤＡＴＡ）、初期値なし変数（ＢＳＳ）などが該当する。図２（ｂ）はマップファイル３０ｃの一例を示している。
【００１９】
scatファイルが誤りなく記述されていれば、リンカー２２は、そのscatファイルの配置指示情報に基づいてオブジェクトをメモリーに配置するとともに、マップファイル３０ｃを生成することができる。「誤りなく」というのは、配置しようとする領域に対して配置しようとするオブジェクトの累計サイズが超過しないように配置指示情報が記述されていることを意味する。具体例を、図２（ａ），２（ｂ）を用いて説明する。
【００２０】
ここで、0x40000000番地から0x6000000バイト分の領域を領域Ａと呼び、0x46000000番地から0x1000000バイト分の領域を領域Ｂ、0x47000000番地から0x2000000バイト分の領域を領域Ｃと呼ぶ。この例で用いる４つのオブジェクトa.o，b.o，c.o，d.oを配置可能な領域（配置可能領域）は領域Ａと領域Ｃであり、領域Ｂはこれらのオブジェクトの配置禁止領域であるとする。また、本実施形態では、領域ＡはＲＯＭに形成され、領域Ｂおよび領域ＣはＲＡＭに形成されている。尚、周知のように、ＲＯＭは、相対的に処理速度が低速な低速メモリーの１つであり、ＲＡＭは相対的に処理速度が高速な高速メモリーの１つである。
図２（ｂ）のマップファイルを参照すると、a.o，b.o，c.o，d.oの各オブジェクトのサイズは順に0x2000000，0x2000000，0x2000000，0x1000000バイトであることがわかる。したがって領域Ａに配置しようとするオブジェクトa.oとb.oとc.oの累計サイズが領域Ａのサイズを超えず、かつ、領域Ｃに配置しようとするオブジェクトd.oの累計サイズも領域Ｃのサイズを超えないため、リンクエラーは発生せず、図２（ａ）に示された配置指示通りにオブジェクトが配置される（図２（ｃ）参照）。
【００２１】
他方で、scatファイル（旧）３０ｂに誤りがある場合、リンクエラーとなりリンカー２２はメモリー上の所定の位置にオブジェクトを配置せず、マップファイル３０ｃのみを生成する。scatファイルに誤りがある場合とは、配置しようとする領域に対して配置しようとするオブジェクトの累計サイズが超えてしまう場合である。ここで、リンクエラーが発生する状況を説明する。scatファイルにおけるオブジェクトの配置指定の記述方法としては、先に説明した図２（ａ）のように、配置しようとする領域に対して直接的にオブジェクト名を記述する方法の他に、ワイルドカード（＊）を用いて記述する方法がある。
【００２２】
直接的にオブジェクト名を記述されている場合、リンカー２２はその領域にそのオブジェクトを配置しようとする。そのため、配置しようとする領域に対して直接的にオブジェクト名が記述されている場合であって、それらの直接的にオブジェクト名が記述されているオブジェクトの累計サイズが配置しようとする領域のサイズを超える場合に、リンクエラーが発生する。なお、ワイルドカード（＊）を用いて記述する場合は、直接的にオブジェクト名で列挙されているオブジェクト以外を列挙していることと等価である。直接的にオブジェクト名で列挙されていないオブジェクトについては、ある特定の領域に優先的に配置させたいという意図は、直接的にオブジェクト名を記載して列挙しているオブジェクトより低い。
【００２３】
図３（ａ）は、リンクエラーが発生するscatファイルの例を示している。各領域のサイズやアドレス、領域名、リンク処理の対象とする４つのオブジェクト（a.o，b.o，c.o，d.o）のサイズは、図２の例と同じであり、更に、２つのオブジェクトa2.o，a3.oを加える。a2.oおよびa3.oのサイズは、共に0x500000バイトである。
ここで、領域Ｃのサイズは、0x2000000バイトであるが、図３（ａ）のscatファイルでは、領域Ｃにc.oとd.oの２つのオブジェクトを配置するように記載されており、領域Ｃにあふれが生じる（図３（ｃ）参照）。また、領域Ａにはa.oと*.oが記述されている。つまり、領域Ａにはa.oを優先的に配置しようとすると共に、a.o以外のオブジェクトも配置可能であることを意味する。この結果、領域Ａには、a.o，b.o，a2.oおよびa3.oが配置される。このようなscatファイルを参照してリンカー２２がリンク処理を実行すると、例えば図３（ｂ）に示すようなマップファイルが出力される。制御部２０は、リンクエラーが発生したときのマップファイルを解析すると、オブジェクトのあふれが発生している領域を検出することができる。
【００２４】
配置指示情報更新プログラム２３は、リンカー２２においてオブジェクトのあふれが発生しないようにオブジェクトを配置した場合、高速に処理したいオブジェクトであるにも関わらず、ＲＯＭに配置されたために処理速度が低下してしまうことがないように、高速に処理したいオブジェクトがＲＡＭに配置されるべくオブジェクトを再配置し、scatファイル（旧）３０ｂに記載されているオブジェクトの配置指示情報を修正し、新しいscatファイル（旧）３０ｂを出力する機能を有している。その機能を実現するために配置指示情報更新プログラム２３は、マッピング情報取得部２３ａ、配置優先度設定部２３ｂ、配置可能領域情報取得部２３ｃ、組み合わせ決定部２３ｄおよび配置指示情報更新部２３ｅを備えている。また、配置優先度設定部２３ｂは、タスクの優先度に応じて、オブジェクトをＲＡＭに配置する重み付け優先度（以降、ＲＡＭ優先度という）を設定する重み付け設定部２４を備える。各部の詳細は、配置指示情報更新処理の説明と合わせて後述する。
【００２５】
（２）配置指示情報更新処理：
次に、上述の構成における配置指示情報更新処理を説明する。配置指示情報更新処理は、処理速度の低下が著しいような場合に、リンカー２２が参照したscatファイル（旧）３０ｂやリンカー２２が出力したマップファイル３０ｃ等に基づいて、処理速度の向上を図れるようなscatファイルを新しく生成する処理である。以降の処理ステップにおける具体例の説明には、上述の図３のケースを用いるものとする。
【００２６】
図４は配置指示情報更新処理の流れを示すフローチャートである。まず、制御部２０は、この処理で使用する変数を初期化する（ステップＳ１００）。以降、順に、現状配置情報取得処理（ステップＳ１０５）、配置優先度設定処理（ステップＳ１１０）、組み合わせ決定処理（ステップＳ１２０）、scatファイル出力処理（ステップＳ１２５）を実行する。
【００２７】
（２−１）変数初期化：
ステップＳ１００で初期化される変数について説明する。配置指示情報更新処理では、オブジェクト情報構造体３０ｅ、領域情報構造体３０ｆおよび属性テーブル３０ｄの３つのデータ構造体を用いる。オブジェクト情報構造体３０ｅは、個々のオブジェクトに関する情報を格納するデータ構造体であり、オブジェクトファイル名・属性（ＴＥＸＴ，ＤＡＴＡ，ＢＳＳ等）・サイズ・現割り当て領域・新割り当て領域・領域毎の優先度配列をメンバーに持つ。ステップＳ１００では各メンバーに「−１」を設定して初期化する。
【００２８】
領域情報構造体３０ｆは、領域毎にサイズの過不足状況を保持するためのデータ構造体であり、領域ごとに、領域の先導アドレス，サイズ，配置しようとするオブジェクトの累計サイズをメンバーに持つ。ステップＳ１００では、例えば「−１」を設定して初期化する。属性テーブル３０ｄは、ＴＥＸＴ，ＤＡＴＡ，ＢＳＳ等のオブジェクトの属性ごとに、各領域に対する配置可否配列をメンバーに持つ。具体的には、その属性を持つオブジェクトを各領域に配置可能であるか（＋１）、または配置を禁止するか（−１）を示す値が設定されている。ステップＳ１００では、予めユーザーによって定義された初期値（＋１／−１）を設定する。
【００２９】
（２−２）現状配置情報取得処理：
図５は、現状配置情報取得処理を示すフローチャートである。制御部２０は、配置可能領域情報取得機能を有する配置可能領域情報取得部２３ｃの処理を実行することにより、オブジェクトの配置に割り当てる複数の領域のアドレスとサイズを取得し、領域情報構造体３０ｆにそれぞれ設定する（ステップＳ２００）。具体的には、例えば、制御部２０はscatファイル（旧）３０ｂを解析し、各領域の先頭アドレスとサイズを取得し、領域情報構造体３０ｆの「先頭アドレス」と「サイズ」にそれぞれ設定する。それらの領域をアドレスの若い順に領域Ａ，領域Ｂ，領域Ｃと呼ぶことにする。
【００３０】
続いて、制御部２０は、マッピング情報取得機能を有するマッピング情報取得部２３ａの処理を実行することによりマップファイル３０ｃを解析する（ステップＳ２０５）。解析の結果、制御部２０は、マップファイルに記載されている、オブジェクト名と、オブジェクトのアドレス・サイズ・属性との対応をオブジェクトごとに取得する。制御部２０は、各オブジェクトについて、そのオブジェクトを配置しようとしているアドレスから、オブジェクトを配置しようとしている領域を判定し、オブジェクト情報構造体３０ｅの「現割り当て領域」にその領域の識別子を設定する（ステップＳ２１０）。続いて、制御部２０は、各オブジェクトのサイズをオブジェクト情報構造体３０ｅの各オブジェクトに対応する「サイズ」に格納する（ステップＳ２１５）。なお、各オブジェクトのオブジェクト名や属性もオブジェクト情報構造体３０ｅの各オブジェクトに対応する「オブジェクト名」や「属性」に設定される。
【００３１】
続いて、制御部２０は、マップファイル３０ｃに記載されている全てのオブジェクトについてオブジェクト情報構造体３０ｅへの設定の完了を判定し（ステップＳ２２０）、完了を判定した場合（ステップＳ２２０でＹ）、各領域に配置しようとするオブジェクトの累計サイズを計算し、領域情報構造体３０ｆの各領域に対応する「累計サイズ」に設定する（ステップＳ２２５）。他方で、未完了の場合（ステップＳ２２０でＮ）、ステップＳ２０５に戻る。ここで、図９および図１０は、現状配置情報取得処理を終了した時点での領域情報構造体３０ｆの設定内容とオブジェクト情報構造体３０ｅの設定内容とを示している。ここで図９に記載されている「ＲＯＭ／ＲＡＭ」は、領域がＲＯＭ（０）であるか、または、ＲＡＭ（＋１）であるかを示す。
【００３２】
（２−３）配置優先度設定処理：
図６は、配置優先度設定機能を有する配置優先度設定部２３ｂによる処理を示すフローチャートである。この処理は、scatファイル（旧）３０ｂと属性テーブル３０ｄとに基づいて、各オブジェクトについて、各領域に対する配置優先度を設定する処理である。まず制御部２０は、scatファイル（旧）３０ｂの内容を解析する（ステップＳ３００）。scatファイルでは、領域ごとにその領域に配置しようとするオブジェクトを、直接的にオブジェクト名を列挙するかあるいはワイルドカードによって記述している。解析の結果、任意の領域Ｘに対して列挙されている文字列が現状配置情報取得処理で取得したオブジェクト名の中のいずれかと一致しているか、否かを判定し（ステップＳ３０５）、一致している場合（ステップＳ３０５でＹ）は、オブジェクトを、領域Ｘに最も優先度高く配置することを示す「＋２」を、オブジェクト情報構造体３０ｅのオブジェクトの「優先度配列」の領域Ｘに設定する（ステップＳ３１０）。具体的には、ステップＳ３１０の処理を実行すると、オブジェクトa.oについては、領域Ａに「＋２」、オブジェクトc.o，d.oについては領域Ｃに「＋２」が設定される（図１１参照）。
【００３３】
他方で、制御部２０は、任意の領域Ｘに対して列挙されている文字列が、オブジェクト名と一致しない場合（ステップＳ３０５でＮ）、その文字がワイルドカードを意味する「*.o」と一致するか、否かを判定する（ステップＳ３１５）。「*.o」と一致する場合（ステップＳ３１５でＹ）は、直接的にオブジェクト名で記述する場合よりも配置優先度が低いことを示す「＋１」を、領域Ｘについて直接的にオブジェクト名で記述されていない全てのオブジェクトに対応するオブジェクト情報構造体３０ｅの「優先度配列」の領域Ｘに設定する（ステップＳ３２０）。具体的には、「*.o」が記述されている領域Ａについて、直接的にオブジェクト名で記述されているa.o以外の全てのオブジェクトであるb.o，c.o，d.o，a2.oおよびa3.oに対応するオブジェクト情報構造体３０ｅの領域Ａに「＋１」を設定する（図１２参照）。
【００３４】
すなわち、本実施形態において、配置優先度として設定されうる「＋２」は、そのオブジェクトをその領域に優先的に配置することを示している。「＋１」は、そのオブジェクトをその領域に配置可能である（別の領域に配置してもよい）ことを意味している。初期値でもある「−１」は、そのオブジェクトをその領域に配置することを禁止することを示している。属性テーブル３０ｄに設定されている「＋１」と「−１」についても上記と同じ意味を持つ。他方で、「*.o」と一致しない場合（ステップＳ３１５でＮ）は、次の工程（ステップＳ３２５）に進む。
【００３５】
制御部２０は、scatファイルに記述されているすべてのオブジェクト名文字列あるいはワイルドカード文字列について、オブジェクト情報構造体３０ｅへの設定が完了したか否かを判定し（ステップＳ３２５）、完了するまで以上の処理を繰り返す。設定が完了すると（ステップＳ３２５でＹ）、制御部２０は、scatファイルに記載されていた領域の優先度配列に未設定箇所があるか否かを判定する（ステップＳ３３０）。具体的には、ステップＳ３３０を実行する時点で、オブジェクト情報構造体３０ｅは、図１２に示す状態であり、オブジェクトa.o，b.o，a2.oおよびa3.oに関する領域Ｃへの配置優先度を表す値が設定されていない。すなわち、初期値「−１」のままで、新たに値が設定されていない。また、領域Ｂは、属性テーブル３０ｄで予め定義されているように配置禁止領域であるので除外される。このように、未設定箇所があると判定した場合（ステップＳ３３０でＹ）、制御部２０は、属性テーブル３０ｄを参照し、未設定箇所を埋める（ステップＳ３３５）。他方で、未設定箇所がないと判定した場合（ステップＳ３３０でＮ）、次の工程（ステップＳ３４０）に進む。
【００３６】
ここで、属性テーブル３０ｄは、ＴＥＸＴやＤＡＴＡ，ＢＳＳなどのオブジェクトの属性ごとに、各領域についてその領域に配置可能であるか（＋１）、または配置を禁止するか（−１）を示す値が設定されたデータ構造体である。設定値は予めユーザーによって定義されており、その設定値に基づいてステップＳ１００において初期化されている。図１３は属性テーブル３０ｄの例を示している。
【００３７】
制御部２０は、オブジェクト情報構造体３０ｅを参照し、オブジェクトa.o，b.o，a2.oおよびa3.oの属性「ＴＥＸＴ」を取得する。図１３の属性テーブル３０ｄでは、属性がＴＥＸＴであるオブジェクトは領域Ｃへは配置可能（＋１）であるため、領域Ｃに対応するオブジェクトa.o，b.o，a2.oおよびa3.oの変数に「＋１」が設定される（図１４参照）。
【００３８】
次に、制御部２０は、タスク優先度が定義されているファイルを読み込む（ステップＳ３４０）。尚、この工程（ステップＳ３４０）以降は、重み付け設定部２４による処理を示す。本実施形態では、タスク優先度は、図１５に示すように、X.cと命名されたソースコードファイルと、X.hと命名されたヘッダーファイルで定義されている。この中で、X.cには、タスク毎の属性情報（タスクＩＤ、優先度、エントリー関数名）が記述されている。また、各行の行末には、「/* A.txt */」のようにコメント文の様態で、オブジェクト名を定義するファイル名（A.txt）が記述されている。例えば、A.txtには、a.o，a2.oおよびa3.oは、タスクＡに関連するオブジェクトであることが記述されている。同様に、B.txt，C.txtおよびD.txtには、それぞれタスクＢ，タスクＣおよびタスクＤに関連するオブジェクトに関する情報が記述されている。また、各タスクの優先度の順序は、X.hに記述されているように、タスクＡが１であり、タスクＢ，タスクＣおよびタスクＤよりも高い。
【００３９】
次に、制御部２０は、オブジェクト毎のＲＡＭ優先度を計算する（ステップＳ３４５）。ＲＡＭ優先度は、タスク優先度に応じて計算される。本実施形態では、タスク優先度の高いものほど数値が低いため、反転させると共に、scatファイルに記述されている記述優先度よりも小さくすべく、数値が０以上であって１以下になるように正規化する。即ち、ＲＡＭ優先度は以下の数式で示すことができる。
ＲＡＭ優先度＝反転した優先度／優先度最大値＝（優先度最大値−タスク優先度）／優先度最大値・・・・・（式１）
例えば、A.txtのオブジェクトでは、反転した優先度は、TPRI_MAX−TPRI_A＝５−１＝４であり、ＲＡＭ優先度は４／５になる。同様に、B.txtのオブジェクトではＲＡＭ優先度は３／５になり、C.txtのオブジェクトではＲＡＭ優先度は２／５になり、D.txtのオブジェクトではＲＡＭ優先度は１／５になる。
【００４０】
次に、制御部２０は、scatファイルにおいて、ワイルドカード（＊）でファイル名が記述され、該当する領域がＲＡＭであるか、否かを判定する（ステップＳ３５０）。ここで、判定の結果、１つのＲＡＭ領域においてオブジェクトの指定がワイルドカードで記述されている場合（ステップＳ３５０でＹ）、計算したＲＡＭ優先度を優先度配列に加える（ステップＳ３５５）。例えば、図３（ａ）および図３（ｃ）に示すように、領域ＣはＲＡＭ領域であり、ワイルドカードで記述されているため、オブジェクトb.o，a2.oおよびa3.oには、ＲＡＭ優先度（オブジェクト順に、３／５，４／５，４／５）が付加される。これにより、優先度が重み付けされる。他方で、１つのＲＡＭ領域においてオブジェクトの指定がワイルドカードで記述されていない場合（ステップＳ３５０でＮ）、次の工程（ステップＳ３６０）に進む。
制御部２０は、scatファイルに記述されているすべてのオブジェクトについて、ＲＡＭ優先度を計算して優先度配列への設定が完了したか、否かを判定し（ステップＳ３６０）、完了するまで以上の処理を繰り返す（図１６参照）。他方で、優先度配列への設定が完了した場合（ステップＳ３６０でＹ）、一連の処理を終了する。以上の処理において、配置優先度設定処理で設定した値は、後述するナップザック問題のパラメーターとして用いられる。
【００４１】
（２−４）組み合わせ決定処理：
図４に戻り、制御部２０は、組み合わせ決定機能を有する組み合わせ決定部２３ｄの処理を実行する（ステップＳ１２０）。図７は、組み合わせ決定処理を示すフローチャートである。制御部２０は、配置可能領域に対して、前述の配置優先度設定処理で優先度配列に設定した値を品物の価値とし、各オブジェクトのサイズを品物の大きさ、配置可能領域のサイズをナップザックの大きさとしてナップザック問題を解く（ステップＳ４０５）。
【００４２】
ナップザック問題は、大きさｗと価値ｖを持った品物がＮ個あり、これらを大きさＷのナップザックに入れる場合に、大きさの合計がＷを超えず、価値の合計が最大となるような品物の組み合わせを求める問題である。本実施形態では、この問題を計算機上で解くにあたり動的計算法を利用した周知のアルゴリズムを採用する。最適な組み合わせを総当たり的に調べると、組み合わせ調査回数は、２N回となるが、動的計算法を利用したアルゴリズムを採用すると調査回数はＮＷ回となり、最適な組み合わせを決定するまでの計算量を減らすことができる。
【００４３】
具体的には、ＲＡＭである領域Ｃから先にナップザック問題を解く。すなわち、サイズはa.o，b.o，c.o，d.o，a2.o，a3.oの順に、0x2000000バイト，0x2000000バイト，0x2000000バイト，0x1000000バイト，0x500000バイト，0x500000バイトであり、領域Ｃに対するオブジェクトの配置優先度として、a.o，b.o，c.o，d.o，a2.o，a3.oの順に＋１，＋１＋３／５，＋２，＋２，＋１＋４／５，＋１＋４／５の価値を持った、オブジェクト４個を、サイズが0x2000000バイトの領域Ｃに、サイズを超えずできるだけ価値の合計が最大となるように配置できる組み合わせを求める。その結果、上記条件を満たす組み合わせとして、オブジェクトd.o，a2.o，a3.oが選ばれる。制御部２０は、オブジェクト情報構造体３０ｅのオブジェクトd.o，a2.o，a3.oの「新割り当て領域」にＣを設定する（図１７参照）。尚、ＲＡＭである領域Ｃへの配置可能な容量が不足する場合、ＲＯＭであるＡに設定しても良い。
【００４４】
続いて制御部２０は、配置領域未決定オブジェクトの配置領域決定処理を実行する（ステップＳ４１０）。図８は、未決定オブジェクトの配置領域決定処理を示すフローチャートである。制御部２０は、未決定オブジェクトが存在するか否かを判定し（ステップＳ５００）、存在する場合（ステップＳ５００でＹ）は、配置可能領域が存在するか否かを判定する（ステップＳ５０５）。具体的には、ステップＳ４０５で領域Ｃにオブジェクトd.oが割り当てられることが決まっても、未決定オブジェクトは存在する。また、オブジェクト情報構造体３０ｅ（図１７）を参照すると、オブジェクトc.oに対応する領域Ａには「＋１」が設定されており、すなわちオブジェクトd.oは領域Ｃ以外に領域Ａにも配置可能であることが示されている。
【００４５】
配置可能領域が存在する場合（ステップＳ５０５でＹ）、制御部２０は、ナップザック問題の対象にまだなっていない領域であるかを判定する（ステップＳ５１０）。ナップザック問題未対象領域である場合（ステップＳ５１０でＹ）は、ナップザック問題未対象領域に対してナップザック問題を解く（ステップＳ５１５）。具体的には、領域Ａはナップザック問題の対象とまだしていないため、ステップＳ５１５では、ＲＡＭの次にＲＯＭである領域Ａに対してナップザック問題を解く。対象とするオブジェクトは配置領域が確定していないオブジェクトである。すなわち、サイズがa.o，b.o，c.oの順に、0x2000000バイト，0x2000000バイト，0x2000000バイトであり、領域Ａに対するオブジェクトの配置優先度として、a.o，b.o，c.oの順に、＋２，＋１，＋１の価値を持った、オブジェクト３個を、サイズが0x6000000バイトの領域Ａに、サイズを超えずできるだけ価値の合計が最大となるように配置できる組み合わせを求める。その結果、領域Ａに割り当てるオブジェクトの組み合わせとしてa.o，b.o，c.oを決定し、制御部２０は、オブジェクト情報構造体３０ｅのa.o，b.o，c.oの「新割り当て領域」に領域Ａを設定する（図１８参照）。
【００４６】
ステップＳ５００で、未決定オブジェクトがもう存在しないと判定された場合（ステップＳ５００でＮ）は、図７のステップＳ４０５に進む。ステップＳ５０５で配置可能領域が存在しないと判定された場合（ステップＳ５０５でＮ）は、未決定オブジェクトの配置領域決定処理を終了する。なお、ステップＳ５１０でナップザック問題未対象領域でない場合（ステップＳ５１０でＮ）は、ステップＳ５０５の処理に戻って、ナップザック問題未対象領域を探す。
【００４７】
（２−５）scatファイル出力：
ステップＳ１２０の組み合わせ決定処理を終えると、制御部２０は、配置指示情報更新機能を有する配置指示情報更新部２３ｅの処理を行い、各配置可能領域に割り当てられたオブジェクトの組み合わせに基づいて、処理速度の向上が図れる新しいscatファイル（新）３０ｇを出力する（ステップＳ１２５）。具体的には、制御部２０は、領域情報構造体３０ｆの領域毎の「サイズ」と、オブジェクト情報構造体３０ｅの各オブジェクトの「新割り当て領域」を参照して、各領域に配置しようとするオブジェクトを列挙したscatファイル（新）３０ｇを生成する。より具体的には、領域Ａに対してオブジェクト名a.o，b.oおよびc.oを列挙し、領域Ｃに対してオブジェクト名d.o，a2.oおよびa3.oを列挙したscatファイルを生成する（図１９参照）。
【００４８】
（３）変形例：
次に、変形例として、図２０のscatファイルに示すように、オブジェクトa.o，b.oおよびa2.oのみが指定されている場合の処理を以下に示す。
【００４９】
オブジェクトは、「（２）配置指示情報更新処理」の場合と同様であり、a.o，b.o，c.o，d.o，a2.o，ａ3.oの６オブジェクトを想定し、それぞれのサイズは、順に、0x2000000バイト，0x2000000バイト，0x2000000バイト，0x1000000バイト，0x500000バイト，0x500000バイトである。
制御部２０は、変数初期化処理（ステップＳ１００）を行った後、現状配置情報取得処理（ステップＳ１０５）を行う。この結果、領域情報構造体３０ｆの設定内容とオブジェクト情報構造体３０ｅは、図２１および図２２に示すようになる。
次に、制御部２０は、配置優先度設定処理（ステップＳ１１０）を行う。ここで、図２３は、オブジェクトを、領域Ｘに最も優先度高く配置することを示す「＋２」を、オブジェクト情報構造体３０ｅのオブジェクトの「優先度配列」の領域Ｘに設定する処理（ステップＳ３１０）が実行された後の領域情報構造体３０ｆの設定内容を示す。また、図２４は、任意の領域Ｘに対して列挙されている文字列が、「*.o」と一致する場合は、直接的にオブジェクト名で記述する場合よりも配置優先度が低いことを示す「＋１」を、領域Ｘについて直接的にオブジェクト名で記述されていない全てのオブジェクトに対応するオブジェクト情報構造体３０ｅの「優先度配列」の領域Ｘに設定する工程（ステップＳ３２０）が実行された後の領域情報構造体３０ｆの設定内容を示す。
【００５０】
ここで、図２５は本変形例における属性テーブル３０ｄを示す。この属性テーブル３０ｄに従い、属性が「ＴＥＸＴ」である場合に配置可能（＋１）を反映させると、領域情報構造体３０ｆの設定内容は図２６に示すようになる。
次に、制御部２０は、ＲＡＭ優先度を計算する処理（ステップＳ３４５）を実行し、scatファイルにおいて、ワイルドカード（＊）でファイル名が記述され、該当する領域がＲＡＭであるか、否かを判定する工程（ステップＳ３５０）と、判定の結果、１つのＲＡＭ領域においてオブジェクトの指定がワイルドカードで記述されている場合、計算したＲＡＭ優先度を優先度配列に加える工程（ステップＳ３５５）を実行する。この結果、領域情報構造体３０ｆの設定内容は図２７に示すようになる。
【００５１】
次に、制御部２０は、組み合わせ決定処理（ステップＳ１２０）を実行し、最初に、ＲＡＭである領域Ｃについてナップザック問題を解く。即ち、領域Ｃに対するオブジェクトの配置優先度として、a.o，b.o，c.o，d.o，a2.o，a3.oの順に＋１，＋１，＋１＋２／５，＋１＋１／５，＋１，＋１＋４／５の価値を持った、オブジェクト４個を、サイズが0x2000000バイトの領域Ｃに、サイズを超えずできるだけ価値の合計が最大となるように配置できる組み合わせを求める。その結果、上記条件を満たす組み合わせとして、オブジェクトd.o，a2.o，a3.oが選ばれる。制御部２０は、オブジェクト情報構造体３０ｅのオブジェクトd.o，a2.o，a3.oの「新割り当て領域」にＣを設定する（図２８参照）。
次に、制御部２０は、ＲＯＭである領域Ａに、サイズを超えずできるだけ価値の合計が最大となるように配置できる組み合わせを求める。その結果、領域Ａに割り当てるオブジェクトの組み合わせとしてa.o，b.o，c.oを決定し、制御部２０は、オブジェクト情報構造体３０ｅのa.o，b.o，c.oの「新割り当て領域」に領域Ａを設定する（図２９参照）。
【００５２】
以上述べたように、配置指示情報更新処理を実行することによって新たに生成されたscatファイル（新）３０ｇをリンカー２２に参照させてリンク処理を実行させると、scatファイル（新）３０ｇに記載された通りにオブジェクトをメモリー内に配置する。即ち、ハードウェアの特性とソフトウェアの仕様を考慮して、オブジェクトを最適にＲＡＭ／ＲＯＭに分散配置できるため、オブジェクトの処理速度向上を図ることができる。
【００５３】
本発明の実施形態について、図面を参照して説明したが、具体的な構成は、この実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。例えば、高速メモリーとしてのＲＡＭ、および低速メモリーとしてのＲＯＭは、それぞれ１つに限定されるものではなく、ＲＡＭとＲＯＭの少なくとも１つは、複数個で構成されても良い。また、メモリーは、ＲＯＭ／ＲＡＭに限定されるものではなく、内蔵メモリーと外付けメモリーの場合や、半導体メモリーと仮想メモリーの場合のように、処理速度が異なる２つのメモリーであればどのような性質でも良い。
また、本実施形態で示したプログラムは、一部がソフトウェアであり一部がハードウェアであったりするなど、適宜、変更可能である。さらに、このソフトウェアプログラムを記録する記録媒体としても発明は成立する。むろん、その記録媒体は、磁気記録媒体であってもよいし光磁気記録媒体であってもよいし、今後開発されるいかなる記録媒体においても全く同様に考えることができる。
【符号の説明】
【００５４】
１０…コンピューター、２０…制御部、２１…コンパイラー、２２…リンカー、２３…配置指示情報更新プログラム、２３ａ…マッピング情報取得部、２３ｂ…配置優先度設定部、２３ｃ…配置可能領域情報取得部、２３ｄ…組み合わせ決定部、２３ｅ…配置指示情報更新部、２４…重み付け設定部、３０…ＨＤＤ、３０ａ…オブジェクトファイル、３０ｂ…scatファイル（旧）、３０ｃ…マップファイル、３０ｄ…属性テーブル、３０ｅ…オブジェクト情報構造体、３０ｆ…領域情報構造体、３０ｇ…scatファイル（新）。
【図１】
2011076516.tif 000003
【図２】
2011076516.tif 000004
【図３】
2011076516.tif 000005
【図４】
2011076516.tif 000006
【図５】
2011076516.tif 000007
【図６】
2011076516.tif 000008
【図７】
2011076516.tif 000009
【図８】
2011076516.tif 000010
【図９】
2011076516.tif 000011
【図１０】
2011076516.tif 000012
【図１１】
2011076516.tif 000013
【図１２】
2011076516.tif 000014
【図１３】
2011076516.tif 000015
【図１４】
2011076516.tif 000016
【図１５】
2011076516.tif 000017
【図１６】
2011076516.tif 000018
【図１７】
2011076516.tif 000019
【図１８】
2011076516.tif 000020
【図１９】
2011076516.tif 000021
【図２０】
2011076516.tif 000022
【図２１】
2011076516.tif 000023
【図２２】
2011076516.tif 000024
【図２３】
2011076516.tif 000025
【図２４】
2011076516.tif 000026
【図２５】
2011076516.tif 000027
【図２６】
2011076516.tif 000028
【図２７】
2011076516.tif 000029
【図２８】
2011076516.tif 000030
【図２９】
2011076516.tif 000031