(57)【要約】【課題】限られたメモリ空間を効率的に活用し、メモリ使用効率の向上を実現する。【解決手段】データ確保領域３１を有するメモリ３０を制御するメモリ制御装置２０において、前記データ確保領域３１の中の使用メモリ領域の情報を管理する使用メモリ領域管理手段２１と、前記データ確保領域３１の中の空きメモリ領域の情報を管理する空きメモリ領域管理手段２２と、前記データ確保領域３１の中でアドレスが不連続な複数のメモリ領域のアドレスを仮想的に連続するアドレスとして生成する仮想アドレス生成手段２３と、前記使用メモリ領域管理手段２１が管理する使用メモリ領域の情報と前記空きメモリ領域管理手段２２が管理する空きメモリ領域の情報と前記仮想アドレス生成手段２３が生成する仮想アドレスに基づいて、前記アドレスが不連続な複数のメモリ領域を仮想的にアドレスが連続する１つのメモリ領域として制御するメモリ制御手段２４とを備える。【選択図】図１
2015064658.tif 000002
【特許請求の範囲】
【請求項１】
データを確保するためのデータ確保領域を有するメモリを制御するメモリ制御装置であって、
前記データ確保領域の中の使用メモリ領域の情報を管理する使用メモリ領域管理手段と、
前記データ確保領域の中の空きメモリ領域の情報を管理する空きメモリ領域管理手段と、
前記データ確保領域の中でアドレスが不連続な複数のメモリ領域のアドレスを仮想的に連続するアドレスとして生成する仮想アドレス生成手段と、
前記使用メモリ領域管理手段が管理する使用メモリ領域の情報と前記空きメモリ領域管理手段が管理する空きメモリ領域の情報と前記仮想アドレス生成手段が生成する仮想アドレスに基づいて、前記アドレスが不連続な複数のメモリ領域を仮想的にアドレスが連続する１つのメモリ領域として制御するメモリ制御手段と、
を備えたことを特徴とするメモリ制御装置。
【請求項２】
前記使用メモリ領域管理手段は、使用されているメモリ領域を管理するテーブル番号と、使用されているメモリ領域の先頭アドレスと、使用されているメモリ領域のサイズと、前記アドレスが不連続な複数のメモリ領域を仮想的にアドレスが連続する１つのメモリ領域として管理しているかを示すフラグと、使用されているメモリ領域の終端を示すターミネーターを、使用メモリ領域の情報として管理することを特徴とする請求項１に記載のメモリ制御装置。
【請求項３】
前記空きメモリ領域管理手段は、空いているメモリ領域を管理するテーブル番号と、空いているメモリ領域の先頭アドレスと、空いているメモリ領域のサイズと、空いているモリ領域の終端を示すターミネーターを、空きメモリ領域の情報として管理することを特徴とする請求項１に記載のメモリ制御装置。
【請求項４】
前記メモリは揮発性のメモリであることを特徴とする請求項１乃至３の何れか１項に記載のメモリ制御装置。
【請求項５】
データを確保するためのデータ確保領域を有するメモリを制御するメモリ制御方法であって、
前記データ確保領域の中の使用メモリ領域の情報を管理する使用メモリ領域管理ステップと、
前記データ確保領域の中の空きメモリ領域の情報を管理する空きメモリ領域管理ステップと、
前記データ確保領域の中でアドレスが不連続な複数のメモリ領域のアドレスを仮想的に連続するアドレスとして生成する仮想アドレス生成ステップと、
前記使用メモリ領域管理ステップで管理する使用メモリ領域の情報と前記空きメモリ領域管理ステップで管理する空きメモリ領域の情報と前記仮想アドレス生成ステップで生成する仮想アドレスに基づいて、前記アドレスが不連続な複数のメモリ領域を仮想的にアドレスが連続する１つのメモリ領域として制御するメモリ制御ステップと、
を含むことを特徴とするメモリ制御方法。
【請求項６】
データを確保するためのデータ確保領域を有するメモリを備えた装置が有するコンピュータを、
前記データ確保領域の中の使用メモリ領域の情報を管理する使用メモリ領域管理手段、
前記データ確保領域の中の空きメモリ領域の情報を管理する空きメモリ領域管理手段、
前記データ確保領域の中でアドレスが不連続な複数のメモリ領域のアドレスを仮想的に連続するアドレスとして生成する仮想アドレス生成手段、
前記使用メモリ領域管理手段が管理する使用メモリ領域の情報と前記空きメモリ領域管理手段が管理する空きメモリ領域の情報と前記仮想アドレス生成手段が生成する仮想アドレスに基づいて、前記アドレスが不連続な複数のメモリ領域を仮想的にアドレスが連続する１つのメモリ領域として制御するメモリ制御手段、
として機能させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、限られたメモリ空間を有効に活用することが可能なメモリ制御装置、メモリ制御方法及びプログラムに関する。
【背景技術】
【０００２】
メモリの空き領域に対象情報（データ）を動的に割り当てるメモリ制御装置において、要求の対象となる対象情報に空き領域を効率良く割り当てるべく、閾値アドレスを超えない範囲の領域についてベストフィット方式により空き領域を検索し、該検索した領域に空き領域がなければ該閾値アドレス以降の領域をファーストフィット方式で検索し、その検索された空き領域に対象情報を割り当て、割り当て後の対象情報の格納領域の最終アドレスを閾値アドレスとして設定するようにした技術が考えられている（例えば、特許文献１）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００７−２４９７０８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
前記特許文献１に記載された技術では、図２で示すような、例えば、メモリの一部分に１０２４ＫＢのデータ確保領域サイズを持つデータ確保領域３１が存在し、メモリ領域の確保と解放を繰り返していくと、例えば、図３で示すように、データ確保領域３１の中に空き領域が歯抜けで存在するということが起こり得る。
【０００５】
図３の例では０ｘ０５０００番地からの１０ＫＢの空き容量、０ｘ０Ｆ０００番地からの４０ＫＢの空き容量、０ｘ１Ｂ８００番地からの１０ＫＢの空き容量が存在しており、空き容量をトータルすると６０ＫＢの空き容量を持つことになるが、前記特許文献１に記載された従来技術では、この状態において４０ＫＢを越えるメモリ領域を確保しようとすると、割り当て不可になるという課題がある。
【０００６】
本発明は前記のような実情に鑑みてなされたもので、その目的とするところは、限られたメモリ空間を効率的に活用し、メモリ使用効率を向上させることが可能なメモリ制御装置、メモリ制御方法及びプログラムを提供することにある。
【課題を解決するための手段】
【０００７】
前記課題を解決するため、本発明のメモリ制御装置は、データを確保するためのデータ確保領域を有するメモリを制御するメモリ制御装置であって、前記データ確保領域の中の使用メモリ領域の情報を管理する使用メモリ領域管理手段と、前記データ確保領域の中の空きメモリ領域の情報を管理する空きメモリ領域管理手段と、前記データ確保領域の中でアドレスが不連続な複数のメモリ領域のアドレスを仮想的に連続するアドレスとして生成する仮想アドレス生成手段と、前記使用メモリ領域管理手段が管理する使用メモリ領域の情報と前記空きメモリ領域管理手段が管理する空きメモリ領域の情報と前記仮想アドレス生成手段が生成する仮想アドレスに基づいて、前記アドレスが不連続な複数のメモリ領域を仮想的にアドレスが連続する１つのメモリ領域として制御するメモリ制御手段と、を備えたことを特徴とする。
【発明の効果】
【０００８】
本発明によれば、限られたメモリ空間を効率的に活用し、メモリ使用効率の向上を実現することが可能となる。
【図面の簡単な説明】
【０００９】
【図１】本発明の実施形態に係るＣＰＵとメモリ制御装置とメモリの構成を示すブロック図。
【図２】メモリ内に設定されるデータ確保領域の概念図。
【図３】メモリ領域の確保と解放を繰り返した後のデータ確保領域を示す図。
【図４】本発明の実施形態に係る使用領域管理テーブルの構成を示す図。
【図５】使用領域管理テーブルの一例を示す図。
【図６】本発明の実施形態に係る空き領域管理テーブルの構成を示す図。
【図７】空き領域管理テーブルの一例を示す図。
【図８】本発明の実施形態に係るメモリ制御装置がメモリ領域を確保する際の処理内容を示すフローチャート。
【図９】図８のフローチャートにおける使用領域管理テーブル作成処理の詳細を示すフローチャート。
【図１０】図３のデータ確保領域の状態から６０ＫＢのメモリ領域を確保した場合のデータ確保領域を示す図。
【図１１】図３のデータ確保領域の状態から６０ＫＢのメモリ領域を確保した場合の使用領域管理テーブルを示す図。
【図１２】本発明の実施形態に係るメモリ制御装置がデータ書き込み（バースト書き込み）を行なう際の処理内容を示すフローチャート。
【図１３】本発明の実施形態に係るメモリ制御装置がデータ書き込み（１データ書き込み）を行なう際の処理内容を示すフローチャート。
【図１４】本発明の実施形態に係るメモリ制御装置がデータ読み出し（バースト読み出し）を行なう際の処理内容を示すフローチャート。
【図１５】本発明の実施形態に係るメモリ制御装置がデータ読み出し（１データ読み出し）を行なう際の処理内容を示すフローチャート。
【図１６】図１３、図１５のフローチャートにおける仮想アドレス生成処理の詳細を示すフローチャート。
【発明を実施するための形態】
【００１０】
以下、本発明を各種電子機器に組み込まれる汎用のマイクロコンピュータシステムの一部に適用した実施形態について図面を参照して詳細に説明する。
【００１１】
図１は、本実施形態に係るＣＰＵ１０とデータ記憶用のメモリ３０とＣＰＵ１０の指示を受けてメモリ３０を制御するメモリ制御装置２０の構成を示すブロック図である。同図においてメモリ３０には、データ確保領域３１が設定されている。また、メモリ制御装置２０は、使用メモリ領域管理部２１、空きメモリ領域管理部２２、仮想アドレス生成部２３、メモリ制御部２４を備えている。
【００１２】
図２は、メモリ３０内に設定されるデータ確保領域３１の概念図であり、本実施形態では、例えば、データ確保領域開始アドレス０ｘ０００００からデータ確保領域終了アドレス０ｘＦＦＦＦＦまで、データ確保領域サイズ０ｘ１０００００（１０２４ＫＢ）のデータ確保領域が設定されている。
【００１３】
図３は、メモリ領域の確保と解放を繰り返した後のデータ確保領域３１を示す図であり、例えば、０ｘ０００００〜０ｘ０４ＦＦＦまで２０ＫＢの使用領域、０ｘ０５０００〜０ｘ０７７ＦＦまで１０ＫＢの空き領域、０ｘ０７８００〜０ｘ０ＥＦＦＦまで３０ＫＢの使用領域、０ｘ０Ｆ０００〜０ｘ１８ＦＦＦまで４０ＫＢの空き領域、０ｘ１９０００〜０ｘ１Ｂ７ＦＦまで１０ＫＢの使用領域、０ｘ１Ｂ８００〜０ｘ１ＤＦＦＦまで１０ＫＢの空き領域、０ｘ１Ｅ０００〜０ｘＦＦＦＦＦまで９０４ＫＢの使用領域となっており、空き領域が歯抜けで存在していることを示している。
【００１４】
図４は、メモリ制御装置２０が備える使用メモリ領域管理部２１が管理する使用領域管理テーブル２１Ｔの構成を示す図である。使用領域管理テーブル２１Ｔは、メモリ領域の確保動作が行われる毎に振られる使用領域管理番号、確保した領域の先頭アドレスを示す使用領域先頭アドレス、確保したデータサイズを示す使用領域サイズ、更に、後述する仮想アドレスフラグと、１つの使用領域の終了を示すターミネーターから構成されている。
【００１５】
図５は、図３で示すメモリ領域の確保と解放を繰り返した後の使用領域管理テーブル２１Ｔの状況を示す図である。図５（１）は０ｘ０００００〜０ｘ０４ＦＦＦまで２０ＫＢの使用領域を管理している使用領域管理テーブル２１Ｔ、図５（２）は０ｘ０７８００〜０ｘ０ＥＦＦＦまで３０ＫＢの使用領域を管理している使用領域管理テーブル２１Ｔ、図５（３）は０ｘ１９０００〜０ｘ１Ｂ７ＦＦまで１０ＫＢの使用領域を管理している使用領域管理テーブル２１Ｔ、図５（４）は０ｘ１Ｅ０００〜０ｘＦＦＦＦＦまで９０４ＫＢの使用領域を管理している使用領域管理テーブル２１Ｔを示している。
【００１６】
図６は、メモリ制御装置２０が備える空きメモリ領域管理部２２が管理する空き領域管理テーブル２２Ｔの構成を示す図である。空き領域管理テーブル２２Ｔは、メモリ領域の解放動作が行われる毎に振られる空き領域管理番号、解放された領域の先頭アドレスを示す空き領域先頭アドレス、解放されたデータサイズを示す空き領域サイズと、空き領域の終了を示すターミネーターから構成されている。
【００１７】
図７は、空き領域管理テーブル２２Ｔの一例を示しており、図７（１）はデータ確保領域３１がまだメモリ領域の確保がされておらず、１０２４ＫＢの領域全てが空いている状態の空き領域管理テーブル２２Ｔ、図７（３）はデータ確保領域３１が全てメモリ領域の確保がされて１０２４ＫＢの領域全てが使用されている状態の空き領域管理テーブル２２Ｔを示している。また、図７（２）は図３で示すメモリ領域の確保と解放を繰り返した後の空き領域管理テーブル２２Ｔの状況を示す図であり、０ｘ０５０００〜０ｘ０７７ＦＦまで１０ＫＢの空き領域、０ｘ０Ｆ０００〜０ｘ１８ＦＦＦまで４０ＫＢの空き領域、０ｘ１Ｂ８００〜０ｘ１ＤＦＦＦまで１０ＫＢの空き領域を管理している空き領域管理テーブル２２Ｔを示している。
【００１８】
次に、図３で示すようなメモリ領域の確保と解放が繰り返され、歯抜け状態でトータル６０ＫＢの空き領域がある状態において、ＣＰＵ１０から６０ＫＢのメモリ確保の要求があった場合のメモリ制御装置２０中のメモリ制御部２４の動作を図８のフローチャートを用いて説明する。
【００１９】
メモリ制御部２４は、先ず、ＣＰＵ１０からメモリ確保の要求を受けると確保するデータサイズを取得する（ステップＳ１０）。今、ＣＰＵ１０は６０ＫＢのメモリ確保要求を行っているので、確保するデータサイズは６０ＫＢである。次に、カウンタａに１を（ステップＳ１１）、Ｓ（空き領域サイズ）に０を（ステップＳ１２）、仮想アドレスフラグに０を（ステップＳ１３）をセットする。
【００２０】
この状態で、Ｓ＋ａ番目の空き領域管理テーブルの空き領域サイズを算出した結果をＳにセットする（ステップＳ１４）。図７（２）で示すように１番目の空き領域管理テーブルの空き領域サイズは１０ＫＢであり、Ｓは１０ＫＢとなる。
【００２１】
次に、Ｓは確保するデータサイズ以上か否かチェックする（ステップＳ１５）。現時点では、Ｓ＝１０ＫＢ、確保するデータサイズ＝６０ＫＢであり、ステップＳ１５の結果はＮｏとなるので、仮想アドレスフラグに１をセットする（ステップＳ２０）。
【００２２】
更に、カウンタａをインクリメントし（ステップＳ２１）、空き領域管理テーブルがまだ有るかチェックする（ステップＳ２２）。現時点では、まだターミネーター（０ｘＦＦＦＦＦＦ）は現れず、ステップＳ２２の結果はＮｏとなるので、ステップＳ１４に戻り、Ｓ＋２番目の空き領域管理テーブルの空き領域サイズを算出した結果をＳにセットする。図７（２）で示すように２番目の空き領域管理テーブルの空き領域サイズは４０ＫＢであり、Ｓは５０ＫＢとなる。
【００２３】
次に、Ｓは確保するデータサイズ以上か否かチェックする（ステップＳ１５）。現時点では、Ｓ＝５０ＫＢ、確保するデータサイズ＝６０ＫＢであり、ステップＳ１５の結果はＮｏとなるので、先程と同様に、ステップＳ２０、ステップＳ２１、ステップＳ２２Ｎｏを繰り返し、ステップＳ１４に戻り、Ｓ＋３番目の空き領域管理テーブルの空き領域サイズを算出した結果をＳにセットする。図７（２）で示すように３番目の空き領域管理テーブルの空き領域サイズは１０ＫＢであり、Ｓは６０ＫＢとなる。
【００２４】
この状態で、Ｓが確保するデータサイズ以上か否かチェックすると（ステップＳ１５）、Ｓ＝６０ＫＢ、確保するデータサイズ＝６０ＫＢであり、ステップＳ１５の結果はＹｅｓとなり、使用領域管理テーブルの作成を行なう（ステップＳ１６）。使用領域管理テーブルの作成処理については、後で詳しく説明する。
【００２５】
更に、空き領域管理テーブル２２Ｔを更新する。今回の確保処理では、空いていた６０ＫＢの領域が全て確保されたので、空き領域管理テーブル２２Ｔは、図７（３）で示す状態となる。
【００２６】
そして、確保した領域の先頭アドレス０ｘ０５０００（ステップＳ１８）と、使用領域管理番号をＣＰＵ１０に返送して（ステップＳ１９）領域確保の処理を終了する。図１０は、６０ＫＢの領域確保終了後のデータ確保領域３１の状態を示している。
【００２７】
今回の領域確保処理では、ＣＰＵ１０からのメモリ確保の要求は６０ＫＢであったので、領域確保は可能であったが、６０ＫＢを超えるサイズの要求があった場合は、Ｓが確保するデータサイズ以上になる前に、ステップＳ２２でターミネーターが検出され、ステップＳ２２の結果がＹｅｓとなり、領域確保失敗をＣＰＵ１０に返送して（ステップＳ２３）領域確保の処理を終了する。
【００２８】
図９は、図８のフローチャートにおける使用領域管理テーブル作成処理の詳細を示すフローチャートであり、ステップＳ１５でＳが確保するデータサイズ以上になると、使用領域管理テーブル作成処理が実行される。
【００２９】
使用領域管理テーブル作成処理では、先ず、使用領域管理テーブル２１Ｔで空いている使用領域管理番号をサーチする（ステップＳ１００）。データ確保領域３１が図３で示す状態では、使用領域管理テーブルは４つ作成されており（図５参照）、空いている使用領域管理番号は５となる。
【００３０】
このサーチした番号５を使用領域管理テーブル２１Ｔの使用領域管理番号にセットし（ステップＳ１０１）、Ｗ（使用領域サイズ）に０をセットする（ステップＳ１０２）。
【００３１】
次に、ａは１より大きいか否かをチェックする（ステップＳ１０３）。今回の例ではａは３であり、ステップＳ１０３はＹｅｓとなり、ｂに１をセットする（ステップＳ１０４）。そして、１番目の空き領域先頭アドレス０ｘ０５０００を使用領域管理テーブル２１Ｔの使用領域先頭アドレスにセットし（ステップＳ１０５）、ｂ＝ａか否かをチェックする（ステップＳ１０６）。
【００３２】
今回の例ではａは３であり、現時点ではｂは１なので、ステップＳ１０６はＮｏとなり、Ｗ＋ｂ番目の空き領域管理テーブルの空き領域サイズを算出した結果をＷにセットする（ステップＳ１０７）。図７（２）で示すように１番目の空き領域管理テーブルの空き領域サイズは１０ＫＢであり、Ｗは１０ＫＢとなる。この算出した空き領域サイズは１０ＫＢを使用領域管理テーブル２１Ｔの使用領域サイズにセットし（ステップＳ１０８）、ｂをインクリメントして（ステップＳ１０９）、ステップＳ１０５に戻る。
【００３３】
ステップＳ１０５からステップＳ１０９を繰り返す間でｂ＝ａとなると（ステップＳ１０６がＹｅｓ）、確保するデータサイズ−Ｗを算出し、算出した結果を使用領域管理テーブル２１Ｔの使用領域サイズにセットし（ステップＳ１１０）、現時点の仮想アドレスフラグ１（ステップＳ１１１）と、ターミネーター（０ｘＦＦＦＦＦＦ）を使用領域管理テーブル２１Ｔにセットして（ステップＳ１１２）、使用領域管理テーブル作成処理（図８のステップＳ１６）を終了する。図１１は、６０ＫＢの領域確保終了後の使用領域管理テーブル２１Ｔの状態を示している。
【００３４】
今回の使用領域管理テーブル作成処理では、ａは３であったのでステップＳ１０３はＹｅｓとなり、Ｓ１０４以降の処理を実行したが、１番目の空き容量サイズが確保するデータサイズより大きい場合は、ａ＝１でステップＳ１０３はＮｏとなり、１番目の空き領域先頭アドレス０ｘ０５０００を使用領域管理テーブル２１Ｔの使用領域先頭アドレスにセットし（ステップＳ１１３）、確保するデータサイズを使用領域管理テーブル２１Ｔの使用領域サイズにセットし（ステップＳ１１４）、現時点の仮想アドレスフラグ０（ステップＳ１１１）と、ターミネーター（０ｘＦＦＦＦＦＦ）を使用領域管理テーブル２１Ｔにセットして（ステップＳ１１２）、使用領域管理テーブル作成処理を終了する。
【００３５】
図１２は、図８の領域確保処理実行後にＣＰＵ１０がバースト書き込みによるデータ書き込みを行なう際の処理内容を示すフローチャートである。バースト書き込みは、ＣＰＵ１０が、例えば、メモリ３０のデータ確保領域３１以外の所定の領域に書き込みを行なうデータを事前に用意しておき、書き込みデータサイズと、データが用意されているアドレスと、領域確保処理を実行した際に返送されてきた使用領域管理番号を、メモリ制御装置２０にセットすることにより実行される。
【００３６】
メモリ制御部２４は、書き込みデータサイズと（ステップＳ３０）、書き込みデータが用意されているアドレスと（ステップＳ３１）、使用領域管理番号（ステップＳ３２）を取得する。次に、取得した使用領域管理番号をｃにセットし（ステップＳ３３）、書き込みデータが用意されているアドレスから書き込みデータを取得すると（ステップＳ３４）、ｃ番の使用領域管理テーブル２１Ｔが管理している領域に、取得した書き込みデータを、データサイズ分書き込みを行なう（ステップＳ３５）。
【００３７】
図１３は、図８の領域確保処理実行後にＣＰＵ１０が１データ書き込みによるデータ書き込みを行なう際の処理内容を示すフローチャートである。１データ書き込みは、ＣＰＵ１０が書き込みを行なう１データと、データを書き込むアドレスと、領域確保処理を実行した際に返送されてきた使用領域管理番号を、メモリ制御装置２０にセットすることにより実行される。
【００３８】
メモリ制御部２４は、書き込みアドレスを取得し（ステップＳ４０）、取得した書き込みアドレスをＡにセットする（ステップＳ４１）。次に、使用領域管理番号を取得し（ステップＳ４２）、取得した番号の使用領域管理テーブル２１Ｔをサーチする（ステップＳ４３）。
【００３９】
サーチした使用領域管理テーブル２１Ｔの仮想アドレスフラグが１か０であるかをチェックし（ステップＳ４４）、仮想アドレスフラグが１でなければ（ステップＳ４４がＮｏ）、Ａ番地のアドレスに書き込みデータを１データ書きこんで（ステップＳ４６）、１データ書き込み処理を終了する。
【００４０】
ステップＳ４４で、仮想アドレスフラグが１であれば（ステップＳ４４がＹｅｓ）、仮想アドレス生成部２３で仮想アドレスを生成する。図１６は、図１３のフローチャートにおける仮想アドレス生成部２３が実行する仮想アドレス生成処理の詳細を示すフローチャートである。
【００４１】
仮想アドレス生成処理では、先ず、ｎに１をセットする（ステップＳ２００）。そして、下記（１）式で求めたアドレスをＢにセットする（ステップＳ２０１）。
2015064658.tif 000003
【００４２】
そして、ＢがＡより大きいか否かをチェックし（ステップＳ２０２）、ＢがＡより大きければ（ステップＳ２０２がＹｅｓ）、Ａ番地を、書き込みを行なうアドレスとして、図１３のステップＳ４６に戻る。
【００４３】
ステップＳ２０２において、ＢがＡ以下の場合（ステップＳ２０２がＮｏ）、ｎをインクリメントし（ステップＳ２０３）、前記（１）式を再演算し、新たなＢを求める（ステップＳ２０４）。
【００４４】
そして、ＢがＡより大きいか否かをチェックし（ステップＳ２０５）、ＢがＡ以下の場合（ステップＳ２０５がＮｏ）、ＢがＡより大きくなるまでステップＳ２０３からステップＳ２０５を繰り返す。
【００４５】
ＢがＡより大きければ（ステップＳ２０５がＹｅｓ）、下記（２）式で仮想アドレスを算出してＡにセットし（ステップＳ２０６）、Ａ番地を、書き込みを行なうアドレスとして、図１３のステップＳ４６に戻る。
Ａ←ｎ番目の使用領域先頭アドレス＋Ａ−（１番目の使用領域先頭アドレス＋
2015064658.tif 000004
【００４６】
そして、Ａ番地のアドレスに書き込みデータを１データ書きこんで（図１３のステップＳ４６）、１データ書き込み処理を終了する。
【００４７】
図１４は、ＣＰＵ１０がバースト読みだしによるデータ読み出しを行なう際の処理内容を示すフローチャートである。バースト読みだしは、ＣＰＵ１０が、例えば、メモリ３０のデータ確保領域３１以外の所定の領域に読み出したデータを格納する領域を事前に用意しておき、用意されている領域のアドレスと、領域確保処理を実行した際に返送されてきた使用領域管理番号を、メモリ制御装置２０にセットすることにより実行される。
【００４８】
メモリ制御部２４は、用意されている領域のアドレスと（ステップＳ５０）、使用領域管理番号（ステップＳ５１）を取得する。次に、取得した使用領域管理番号をｃにセットし（ステップＳ５２）、ターミネーターが見つかるまで、ｃ番の使用領域管理テーブル２１Ｔが管理している使用領域先頭アドレスから使用領域サイズ分のデータを読み出して、用意されている領域のアドレスに書き込む（ステップＳ５３）。
【００４９】
図１５は、ＣＰＵ１０が１データ読み出しによるデータ読み出しを行なう際の処理内容を示すフローチャートである。１データ読み出しは、ＣＰＵ１０がデータを読み出すアドレスと、領域確保処理を実行した際に返送されてきた使用領域管理番号を、メモリ制御装置２０にセットすることにより実行される。
【００５０】
メモリ制御部２４は、読み出しアドレスを取得し（ステップＳ６０）、取得した読み出しアドレスをＡにセットする（ステップＳ６１）。次に、使用領域管理番号を取得し（ステップＳ６２）、取得した番号の使用領域管理テーブル２１Ｔをサーチする（ステップＳ６３）。
【００５１】
サーチした使用領域管理テーブル２１Ｔの仮想アドレスフラグが１か０であるかをチェックし（ステップＳ６４）、仮想アドレスフラグが１でなければ（ステップＳ６４がＮｏ）、Ａ番地のアドレスのデータを１データ読み出して（ステップＳ６６）、１データ読み出し処理を終了する。
【００５２】
ステップＳ６４で、仮想アドレスフラグが１であれば（ステップＳ６４がＹｅｓ）、仮想アドレス生成部２３で仮想アドレスを生成する。図１６は、図１５のフローチャートにおける仮想アドレス生成部２３が実行する仮想アドレス生成処理の詳細を示すフローチャートであり、１データ書き込みで説明した仮想アドレス生成処理と同様の処理である。
【００５３】
仮想アドレス生成処理では、先ず、ｎに１をセットする（ステップＳ２００）。そして、前記（１）式で求めたアドレスをＢにセットする（ステップＳ２０１）。
【００５４】
そして、ＢがＡより大きいか否かをチェックし（ステップＳ２０２）、ＢがＡより大きければ（ステップＳ２０２がＹｅｓ）、Ａ番地を、読み出しを行なうアドレスとして、図１５のステップＳ６６に戻り、Ａ番地のアドレスにから１データ読み出して（図１５のステップＳ６６）、１データ読み出し処理を終了する。
【００５５】
ステップＳ２０２において、ＢがＡ以下の場合（ステップＳ２０２がＮｏ）、ｎをインクリメントし（ステップＳ２０３）、前記（１）式を再演算し、新たなＢを求める（ステップＳ２０４）。
【００５６】
そして、ＢがＡより大きいか否かをチェックし（ステップＳ２０５）、ＢがＡ以下の場合（ステップＳ２０５がＮｏ）、ＢがＡより大きくなるまでステップＳ２０３からステップＳ２０５を繰り返す。
【００５７】
ＢがＡより大きくなれば（ステップＳ２０５がＹｅｓ）、前記（２）式で仮想アドレスを算出してＡにセットし（ステップＳ２０６）、Ａ番地を、読み出しを行なうアドレスとして、図１５のステップＳ６６に戻り、Ａ番地のアドレスから１データ読み出して（図１５のステップＳ６６）、１データ読み出し処理を終了する。
【００５８】
前記実施形態で説明したように、本発明では、使用領域管理テーブル２１Ｔと、空き領域管理テーブル２２Ｔを用いて、データ確保領域３１中でアドレスが不連続な複数の空き領域を、仮想的にアドレスが連続する１つの空き領域として制御するようにしたので、限られたメモリ空間を効率的に活用し、メモリ使用効率を向上させることが可能となる。
【００５９】
更に、本発明では、仮想アドレス生成部２３を用いて、ＣＰＵ１０がメモリアクセスの為に与えるアドレスを、仮想的に連続するアドレスとして生成するとようにしたので、ＣＰＵ１０のプログラムにおいては、特別なアドレス変換処理を加える必要がない。
【００６０】
また、前記の実施形態では、メモリ制御装置２０をＡＳＩＣ（Application Specific Integrated Circuit）等のハードウェアとして構成した場合について説明したが、ＯＳ（Operating System）の機能としてソフトウェアで実現しても良い。
【００６１】
その他、本発明は前記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。また、前記実施形態で実行される機能は可能な限り適宜組み合わせて実施しても良い。前記実施形態には種々の段階が含まれており、開示される複数の構成要件による適宜の組み合せにより種々の発明が抽出され得る。例えば、実施形態に示される全構成要件からいくつかの構成要件が削除されても、効果が得られるのであれば、この構成要件が削除された構成が発明として抽出され得る。以下に、本出願の当初の特許請求の範囲に記載された発明を付記する。
［付記］
［請求項１］
データを確保するためのデータ確保領域を有するメモリを制御するメモリ制御装置であって、
前記データ確保領域の中の使用メモリ領域の情報を管理する使用メモリ領域管理手段と、
前記データ確保領域の中の空きメモリ領域の情報を管理する空きメモリ領域管理手段と、
前記データ確保領域の中でアドレスが不連続な複数のメモリ領域のアドレスを仮想的に連続するアドレスとして生成する仮想アドレス生成手段と、
前記使用メモリ領域管理手段が管理する使用メモリ領域の情報と前記空きメモリ領域管理手段が管理する空きメモリ領域の情報と前記仮想アドレス生成手段が生成する仮想アドレスに基づいて、前記アドレスが不連続な複数のメモリ領域を仮想的にアドレスが連続する１つのメモリ領域として制御するメモリ制御手段と、
を備えたことを特徴とするメモリ制御装置。
［請求項２］
前記使用メモリ領域管理手段は、使用されているメモリ領域を管理するテーブル番号と、使用されているメモリ領域の先頭アドレスと、使用されているメモリ領域のサイズと、前記アドレスが不連続な複数のメモリ領域を仮想的にアドレスが連続する１つのメモリ領域として管理しているかを示すフラグと、使用されているメモリ領域の終端を示すターミネーターを、使用メモリ領域の情報として管理することを特徴とする請求項１に記載のメモリ制御装置。
［請求項３］
前記空きメモリ領域管理手段は、空いているメモリ領域を管理するテーブル番号と、空いているメモリ領域の先頭アドレスと、空いているメモリ領域のサイズと、空いているモリ領域の終端を示すターミネーターを、空きメモリ領域の情報として管理することを特徴とする請求項１に記載のメモリ制御装置。
［請求項４］
前記メモリは揮発性のメモリであることを特徴とする請求項１乃至３の何れか１項に記載のメモリ制御装置。
［請求項５］
データを確保するためのデータ確保領域を有するメモリを制御するメモリ制御方法であって、
前記データ確保領域の中の使用メモリ領域の情報を管理する使用メモリ領域管理ステップと、
前記データ確保領域の中の空きメモリ領域の情報を管理する空きメモリ領域管理ステップと、
前記データ確保領域の中でアドレスが不連続な複数のメモリ領域のアドレスを仮想的に連続するアドレスとして生成する仮想アドレス生成ステップと、
前記使用メモリ領域管理ステップで管理する使用メモリ領域の情報と前記空きメモリ領域管理ステップで管理する空きメモリ領域の情報と前記仮想アドレス生成ステップで生成する仮想アドレスに基づいて、前記アドレスが不連続な複数のメモリ領域を仮想的にアドレスが連続する１つのメモリ領域として制御するメモリ制御ステップと、
を含むことを特徴とするメモリ制御方法。
［請求項６］
データを確保するためのデータ確保領域を有するメモリを備えた装置が有するコンピュータを、
前記データ確保領域の中の使用メモリ領域の情報を管理する使用メモリ領域管理手段、
前記データ確保領域の中の空きメモリ領域の情報を管理する空きメモリ領域管理手段、
前記データ確保領域の中でアドレスが不連続な複数のメモリ領域のアドレスを仮想的に連続するアドレスとして生成する仮想アドレス生成手段、
前記使用メモリ領域管理手段が管理する使用メモリ領域の情報と前記空きメモリ領域管理手段が管理する空きメモリ領域の情報と前記仮想アドレス生成手段が生成する仮想アドレスに基づいて、前記アドレスが不連続な複数のメモリ領域を仮想的にアドレスが連続する１つのメモリ領域として制御するメモリ制御手段、
として機能させることを特徴とするプログラム。
【符号の説明】
【００６２】
１０        ＣＰＵ
２０        メモリ制御装置
２１        使用メモリ領域管理部
２１Ｔ      使用領域管理テーブル
２２        空きメモリ領域管理部
２２Ｔ      空き領域管理テーブル
２３        仮想アドレス生成部
２４        メモリ制御部
３０        メモリ
３１        データ確保領域
【図１】
2015064658.tif 000005
【図２】
2015064658.tif 000006
【図３】
2015064658.tif 000007
【図４】
2015064658.tif 000008
【図５】
2015064658.tif 000009
【図６】
2015064658.tif 000010
【図７】
2015064658.tif 000011
【図８】
2015064658.tif 000012
【図９】
2015064658.tif 000013
【図１０】
2015064658.tif 000014
【図１１】
2015064658.tif 000015
【図１２】
2015064658.tif 000016
【図１３】
2015064658.tif 000017
【図１４】
2015064658.tif 000018
【図１５】
2015064658.tif 000019
【図１６】
2015064658.tif 000020