(57)【要約】【課題】  メモリの使用量を低減するとともにプログラムを簡素化するのに好適なメモリ管理装置を提供する。【解決手段】  領域確保要求を入力したときは、メモリ管理テーブル４００に基づいて、領域確保要求に含まれる領域サイズ情報により特定されるサイズの未使用領域を候補領域として検索する。そして、候補領域の下位アドレス方向に隣接する隣接領域に対応するオーバラップフラグをメモリ管理テーブル４００から読み出し、読み出したオーバラップフラグに基づいて、隣接領域が重複確保を許可した領域であるか否かを判定する。その結果、重複確保を許可した領域であると判定したときは、隣接領域と重複して使用領域を確保する。【選択図】  図９
2005100262.tif 000002
【特許請求の範囲】
【請求項１】
メモリの使用状態を管理するメモリ管理テーブルに基づいて前記メモリの使用可能なメモリ領域のなかから必要な使用領域を確保する使用領域確保手段と、前記使用領域確保手段で確保した使用領域へのアクセス情報を含む領域管理情報を前記メモリ管理テーブルに登録する領域管理情報登録手段とを備えるメモリ管理装置であって、
前記領域管理情報は、前記メモリ領域の重複確保を許可するか否かを示すオーバラップ情報を含み、
前記使用領域確保手段は、前記メモリ管理テーブルに基づいて、前記メモリ領域のなかから重複確保可能な使用領域を検索し、索出した重複確保可能な使用領域と重複して前記使用領域を確保するようになっていることを特徴とするメモリ管理装置。
【請求項２】
請求項１において、
前記使用領域確保手段は、
前記使用領域の必要サイズを示す領域サイズ情報を含む領域確保要求に応じて、前記メモリ管理テーブルに基づいて、前記メモリの使用可能なメモリ領域のなかから、当該領域確保要求に含まれる領域サイズ情報により特定されるサイズの領域を候補領域として検索する候補領域検索手段と、
前記候補領域検索手段で索出した候補領域にアドレス上で隣接する隣接領域に対応するオーバラップ情報を前記メモリ管理テーブルから読み出し、読み出したオーバラップ情報に基づいて、前記隣接領域が重複確保を許可した領域であるか否かを判定する隣接領域判定手段と、
前記隣接領域判定手段が重複確保を許可した領域であると判定したときは、前記隣接領域と重複して前記使用領域を確保する使用領域重複確保手段とを有することを特徴とするメモリ管理装置。
【請求項３】
請求項２において、
前記領域確保要求は、前記オーバラップ情報を含み、
前記使用領域確保手段は、さらに、
前記領域確保要求に含まれるオーバラップ情報に基づいて、要求される使用領域が重複確保を許可した領域であるか否かを判定する要求領域判定手段と、
前記要求領域判定手段が重複確保を許可した領域でないと判定したときは、前記候補領域検索手段で索出した候補領域を前記使用領域として確保する使用領域非重複確保手段とを有し、
前記使用領域重複確保手段は、前記要求領域判定手段および前記隣接領域判定手段がいずれも重複確保を許可した領域であると判定したときは、前記隣接領域と重複して前記使用領域を確保するようになっていることを特徴とするメモリ管理装置。
【請求項４】
請求項３において、
前記領域管理情報登録手段は、前記使用領域確保手段で確保した使用領域へのアクセス情報および前記領域確保要求に含まれるオーバラップ情報を含む領域管理情報を前記メモリ管理テーブルに登録するようになっていることを特徴とするメモリ管理装置。
【請求項５】
請求項２において、
前記領域確保要求は、前記メモリ領域を仮想多次元空間的な領域として確保するか否かを示す多次元アライン情報を含み、
前記使用領域確保手段は、前記領域確保要求に含まれる多次元アライン情報に基づいて、要求される使用領域が仮想多次元空間的な領域であるか否かを判定し、仮想多次元空間的な領域であると判定したときは、仮想多次元空間の最大空間サイズを考慮した多次元空間メモリ領域として前記使用領域を確保し、仮想多次元空間的な領域でないと判定したときは、前記使用領域を通常領域として確保するようになっていることを特徴とするメモリ管理装置。
【請求項６】
請求項５において、
前記領域管理情報は、前記多次元アライン情報を含み、
前記領域確保要求は、前記オーバラップ情報を含み、
前記使用領域確保手段は、さらに、
前記領域確保要求に含まれるオーバラップ情報に基づいて、要求される使用領域が重複確保を許可した領域であるか否かを判定する第１要求領域判定手段と、
前記領域確保要求に含まれる多次元アライン情報に基づいて、要求される使用領域が仮想多次元空間的な領域であるか否かを判定する第２要求領域判定手段と、
前記隣接領域に対応する多次元アライン情報を前記メモリ管理テーブルから読み出し、読み出した多次元アライン情報に基づいて、前記隣接領域が仮想多次元空間的な領域であるか否かを判定する第２隣接領域判定手段とを有し、
前記使用領域重複確保手段は、前記第１要求領域判定手段および前記隣接領域判定手段がいずれも重複確保を許可した領域であると判定し、かつ、前記第２要求領域判定手段および前記第２隣接領域判定手段がいずれも仮想多次元空間的な領域であると判定したときは、前記隣接領域と重複して前記使用領域を前記多次元空間メモリ領域として確保するようになっていることを特徴とするメモリ管理装置。
【請求項７】
請求項６において、
前記領域管理情報登録手段は、前記使用領域確保手段で確保した使用領域へのアクセス情報、並びに、前記領域確保要求に含まれる多次元アライン情報およびオーバラップ情報を含む領域管理情報を前記メモリ管理テーブルに登録するようになっていることを特徴とするメモリ管理装置。
【請求項８】
請求項２ないし７のいずれかにおいて、
前記領域管理情報は、前記メモリ領域の重複回数を示すオーバラップカウンタを含み、
前記領域管理情報登録手段は、前記隣接領域に対応するオーバラップカウンタおよび前記使用領域重複確保手段で確保した使用領域に対応するオーバラップカウンタを前記メモリ管理テーブルから読み出し、読み出したそれらオーバラップカウンタを比較して値が大きい方を加算するようになっており、
さらに、前記使用領域を使用可能なメモリ領域として解放する使用領域解放手段を備え、
前記使用領域解放手段は、
領域解放要求に応じて、前記メモリ管理テーブルに基づいて、前記メモリの使用領域のなかから当該領域解放要求に係る使用領域を解放対象領域として検索する解放対象領域検索手段と、
前記解放対象領域検索手段で索出した解放対象領域に対応するオーバラップカウンタを減算し、前記オーバラップカウンタの値が所定値となったときは、前記解放対象領域を使用可能なメモリ領域として解放する重複領域解放手段とを有することを特徴とするメモリ管理装置。
【請求項９】
メモリの使用状態を管理するメモリ管理テーブルに基づいて前記メモリの使用可能なメモリ領域のなかから必要な使用領域を確保する使用領域確保手段、および前記使用領域確保手段で確保した使用領域へのアクセス情報を含む領域管理情報を前記メモリ管理テーブルに登録する領域管理情報登録手段として実現される処理をコンピュータに実行させるためのメモリ管理プログラムであって、
前記領域管理情報は、前記メモリ領域の重複確保を許可するか否かを示すオーバラップ情報を含み、
前記使用領域確保手段は、前記メモリ管理テーブルに基づいて、前記メモリ領域のなかから重複確保可能な使用領域を検索し、索出した重複確保可能な使用領域と重複して前記使用領域を確保するようになっていることを特徴とするメモリ管理プログラム。
【請求項１０】
メモリの使用状態を管理するメモリ管理テーブルに基づいて前記メモリの使用可能なメモリ領域のなかから必要な使用領域を確保する使用領域確保ステップと、前記使用領域確保ステップで確保した使用領域へのアクセス情報を含む領域管理情報を前記メモリ管理テーブルに登録する領域管理情報登録ステップとを含むメモリ管理方法であって、
前記領域管理情報は、前記メモリ領域の重複確保を許可するか否かを示すオーバラップ情報を含み、
前記使用領域確保ステップは、前記メモリ管理テーブルに基づいて、前記メモリ領域のなかから重複確保可能な使用領域を検索し、索出した重複確保可能な使用領域と重複して前記使用領域を確保することを特徴とするメモリ管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリ管理テーブルに基づいてメモリの使用状態を管理するシステムおよびプログラム、並びに方法に係り、特に、メモリの使用量を低減するとともにプログラムを簡素化するのに好適なメモリ管理装置およびメモリ管理プログラム、並びにメモリ管理方法に関する。
【背景技術】
【０００２】
リアルタイムＯＳ（Operating System）（以下、ＲＴＯＳという。）は、複数のタスクを並列に実行する。ＲＴＯＳが実装されたマイコンシステムにおいてメモリ管理機能は、通常、ＲＴＯＳの一機能として実現されている。Ｃ言語のmalloc関数やfree関数に代表されるメモリ確保関数およびメモリ解放関数も、ＲＴＯＳ上のメモリ関数をラッピングするかたちで実装されることが多い。
【０００３】
ＲＴＯＳで実行される各タスクは、メモリ確保関数を呼び出して処理に必要なメモリ領域を獲得する。メモリ確保関数は、メモリ管理テーブルに基づいてメモリの使用可能なメモリ領域のなかから必要な使用領域を確保し、確保した使用領域の先頭ポインタをメモリ管理テーブルに登録するとともに要求元タスクに引き渡す。
また、メモリ領域を仮想２次元空間的にリード／ライトする技術としては、例えば、特許文献１に開示されたメモリの使用方法があった。
【０００４】
特許文献１記載の発明は、仮想最小２次元メモリ空間を、縦横方向に配列した所定の２次元メモリ空間を想定し、仮想最小２次元メモリ空間の各アドレスを、仮想最小２次元メモリ空間との関係で決まるｎ個の物理的なメモリの所定の各アドレスにあらかじめ割り当てておく。データの読み出しの際には、仮想最小２次元メモリ空間上の読出アドレスを指定するとともに、指定された読出アドレスを基準にデータの横方向または縦方向の読出方向を指定すると、その両指定に応じて、仮想最小２次元メモリ空間上の縦方向または横方向に並ぶ連続データを、ｎ個の各メモリの対応するアドレスからそれぞれ読み出す。
【特許文献１】特開２００２−２２２１１７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上記従来のＲＴＯＳにあっては、異なるタスクでデータを共有する必要がある場合は、それらタスクで同一の使用領域を共有することがある。しかしながら、異なるタスクがそれぞれ独立の用途でメモリ領域を使用する場合は、各タスクごとに異なる使用領域を割り当てるようになっているため、メモリの使用量が増大するという問題があった。
また、特許文献１記載の発明にあっては、２次元メモリ空間として使用領域を確保するためには、タスク側のプログラムで２次元メモリ空間の最大幅を計算して必要なサイズをメモリ確保関数に要求しなければならないため、上記問題のほかに、プログラムが煩雑となるという問題もあった。
【０００６】
そこで、本発明は、このような従来の技術の有する未解決の課題に着目してなされたものであって、メモリの使用量を低減するとともにプログラムを簡素化するのに好適なメモリ管理装置およびメモリ管理プログラム、並びにメモリ管理方法を提供することを目的としている。
【課題を解決するための手段】
【０００７】
本発明者等は、鋭意検討を重ねた結果、異なるタスクがそれぞれ独立の用途でメモリ領域を使用する場合であっても、それらタスクがメモリ領域を同時に使用することがない場合は、それらのメモリ領域を重複して確保しても処理上問題がないことを見出した。
〔発明１〕  上記目的を達成するために、発明１のメモリ管理装置は、
メモリの使用状態を管理するメモリ管理テーブルに基づいて前記メモリの使用可能なメモリ領域のなかから必要な使用領域を確保する使用領域確保手段と、前記使用領域確保手段で確保した使用領域へのアクセス情報を含む領域管理情報を前記メモリ管理テーブルに登録する領域管理情報登録手段とを備えるメモリ管理装置であって、
前記領域管理情報は、前記メモリ領域の重複確保を許可するか否かを示すオーバラップ情報を含み、
前記使用領域確保手段は、前記メモリ管理テーブルに基づいて、前記メモリ領域のなかから重複確保可能な使用領域を検索し、索出した重複確保可能な使用領域と重複して前記使用領域を確保するようになっていることを特徴とする。
【０００８】
このような構成であれば、メモリ管理テーブルにはオーバラップ情報が登録されているので、使用領域確保手段により、メモリ管理テーブルに基づいて、メモリ領域のなかから重複確保可能な使用領域が検索され、索出された重複確保可能な使用領域と重複して使用領域が確保される。そして、領域管理情報登録手段により、確保された使用領域へのアクセス情報を含む領域管理情報がメモリ管理テーブルに登録される。
【０００９】
これにより、異なるタスクがメモリ領域を同時に使用することがない場合は、一方のタスクが使用するメモリ領域についてオーバラップ情報により重複確保を許可しておけば、使用領域が重複して確保されるので、従来に比して、メモリの使用量を低減することができるという効果が得られる。
ここで、メモリは、ＲＡＭ等の半導体記憶手段に限らず、ＦＤ、ＨＤ等の磁気記憶型記憶手段、ＣＤ−Ｒ（Compact Disk-Recordable）等の光学的読取方式記憶手段、ＭＯ等の磁気記憶型／光学的読取方式記憶手段であって、電子的、磁気的、光学的等の読み取り方法のいかんにかかわらず、データ読書可能な記憶手段であればあらゆる記憶手段が含まれる。以下、発明９のメモリ管理プログラム、および発明１０のメモリ管理方法において同じである。
【００１０】
〔発明２〕  さらに、発明２のメモリ管理装置は、発明１のメモリ管理装置において、
前記使用領域確保手段は、
前記使用領域の必要サイズを示す領域サイズ情報を含む領域確保要求に応じて、前記メモリ管理テーブルに基づいて、前記メモリの使用可能なメモリ領域のなかから、当該領域確保要求に含まれる領域サイズ情報により特定されるサイズの領域を候補領域として検索する候補領域検索手段と、
前記候補領域検索手段で索出した候補領域にアドレス上で隣接する隣接領域に対応するオーバラップ情報を前記メモリ管理テーブルから読み出し、読み出したオーバラップ情報に基づいて、前記隣接領域が重複確保を許可した領域であるか否かを判定する隣接領域判定手段と、
前記隣接領域判定手段が重複確保を許可した領域であると判定したときは、前記隣接領域と重複して前記使用領域を確保する使用領域重複確保手段とを有することを特徴とする。
【００１１】
このような構成であれば、領域サイズ情報を含む領域確保要求が与えられると、候補領域検索手段により、メモリ管理テーブルに基づいて、メモリの使用可能なメモリ領域のなかから、その領域確保要求に含まれる領域サイズ情報により特定されるサイズの領域が候補領域として検索される。そして、隣接領域判定手段により、索出された候補領域にアドレス上で隣接する隣接領域に対応するオーバラップ情報がメモリ管理テーブルから読み出され、読み出されたオーバラップ情報に基づいて、隣接領域が重複確保を許可した領域であるか否かが判定される。その結果、隣接領域が重複確保を許可した領域であると判定されると、使用領域重複確保手段により、隣接領域と重複して使用領域が確保される。
【００１２】
これにより、隣接領域と重複して使用領域が確保されるので、アドレス上で連続した領域を使用領域として確保することができる。したがって、メモリへのアクセスを効率的に行うことができるという効果が得られる。
〔発明３〕  さらに、発明３のメモリ管理装置は、発明２のメモリ管理装置において、
前記領域確保要求は、前記オーバラップ情報を含み、
前記使用領域確保手段は、さらに、
前記領域確保要求に含まれるオーバラップ情報に基づいて、要求される使用領域が重複確保を許可した領域であるか否かを判定する要求領域判定手段と、
前記要求領域判定手段が重複確保を許可した領域でないと判定したときは、前記候補領域検索手段で索出した候補領域を前記使用領域として確保する使用領域非重複確保手段とを有し、
前記使用領域重複確保手段は、前記要求領域判定手段および前記隣接領域判定手段がいずれも重複確保を許可した領域であると判定したときは、前記隣接領域と重複して前記使用領域を確保するようになっていることを特徴とする。
【００１３】
このような構成であれば、オーバラップ情報を含む領域確保要求が与えられると、要求領域判定手段により、領域確保要求に含まれるオーバラップ情報に基づいて、要求される使用領域が重複確保を許可した領域であるか否かが判定される。その結果、要求される使用領域が重複確保を許可した領域でないと判定されると、使用領域非重複確保手段により、索出された候補領域が使用領域として確保される。これに対し、要求される使用領域および隣接領域がいずれも重複確保を許可した領域であると判定されると、使用領域重複確保手段により、隣接領域と重複して使用領域が確保される。
【００１４】
これにより、重複確保を許可することを明示した領域同士が重複して確保されるので、タスク間でアクセスが競合する可能性を低減することができるという効果が得られる。
〔発明４〕  さらに、発明４のメモリ管理装置は、発明３のメモリ管理装置において、
前記領域管理情報登録手段は、前記使用領域確保手段で確保した使用領域へのアクセス情報および前記領域確保要求に含まれるオーバラップ情報を含む領域管理情報を前記メモリ管理テーブルに登録するようになっていることを特徴とする。
【００１５】
このような構成であれば、領域管理情報登録手段により、確保された使用領域へのアクセス情報および領域確保要求に含まれるオーバラップ情報を含む領域管理情報がメモリ管理テーブルに登録される。
これにより、タスクのプログラムにおいて、重複確保を許可することを示すオーバラップ情報を含む領域確保要求を与えるだけで、使用領域が重複して確保されるので、タスクのプログラムを比較的簡素化することができるという効果が得られる。
【００１６】
〔発明５〕  さらに、発明５のメモリ管理装置は、発明２のメモリ管理装置において、
前記領域確保要求は、前記メモリ領域を仮想多次元空間的な領域として確保するか否かを示す多次元アライン情報を含み、
前記使用領域確保手段は、前記領域確保要求に含まれる多次元アライン情報に基づいて、要求される使用領域が仮想多次元空間的な領域であるか否かを判定し、仮想多次元空間的な領域であると判定したときは、仮想多次元空間の最大空間サイズを考慮した多次元空間メモリ領域として前記使用領域を確保し、仮想多次元空間的な領域でないと判定したときは、前記使用領域を通常領域として確保するようになっていることを特徴とする。
【００１７】
このような構成であれば、多次元アライン情報を含む領域確保要求が与えられると、使用領域確保手段により、領域確保要求に含まれる多次元アライン情報に基づいて、要求される使用領域が仮想多次元空間的な領域であるか否かが判定される。その結果、要求される使用領域が仮想多次元空間的な領域であると判定されると、仮想多次元空間の最大空間サイズを考慮した多次元空間メモリ領域として使用領域が確保される。これに対し、要求される使用領域が仮想多次元空間的な領域でないと判定されると、使用領域が通常領域として確保される。
【００１８】
これにより、タスクのプログラムにおいて、通常領域を確保することができるほか、仮想多次元空間の最大空間サイズを計算することなく、メモリ領域を仮想多次元空間的な領域として確保することを示す多次元アライン情報を含む領域確保要求を与えるだけで、仮想多次元空間の最大空間サイズを考慮した多次元空間メモリ領域が確保されるので、従来に比して、タスクのプログラムを比較的簡素化することができるという効果が得られる。
【００１９】
〔発明６〕  さらに、発明６のメモリ管理装置は、発明５のメモリ管理装置において、
前記領域管理情報は、前記多次元アライン情報を含み、
前記領域確保要求は、前記オーバラップ情報を含み、
前記使用領域確保手段は、さらに、
前記領域確保要求に含まれるオーバラップ情報に基づいて、要求される使用領域が重複確保を許可した領域であるか否かを判定する第１要求領域判定手段と、
前記領域確保要求に含まれる多次元アライン情報に基づいて、要求される使用領域が仮想多次元空間的な領域であるか否かを判定する第２要求領域判定手段と、
前記隣接領域に対応する多次元アライン情報を前記メモリ管理テーブルから読み出し、読み出した多次元アライン情報に基づいて、前記隣接領域が仮想多次元空間的な領域であるか否かを判定する第２隣接領域判定手段とを有し、
前記使用領域重複確保手段は、前記第１要求領域判定手段および前記隣接領域判定手段がいずれも重複確保を許可した領域であると判定し、かつ、前記第２要求領域判定手段および前記第２隣接領域判定手段がいずれも仮想多次元空間的な領域であると判定したときは、前記隣接領域と重複して前記使用領域を前記多次元空間メモリ領域として確保するようになっていることを特徴とする。
【００２０】
このような構成であれば、オーバラップ情報および多次元アライン情報を含む領域確保要求が与えられると、第１要求領域判定手段により、領域確保要求に含まれるオーバラップ情報に基づいて、要求される使用領域が重複確保を許可した領域であるか否かが判定される。また、第２要求領域判定手段により、領域確保要求に含まれる多次元アライン情報に基づいて、要求される使用領域が仮想多次元空間的な領域であるか否かが判定される。さらに、第２隣接領域判定手段により、隣接領域に対応する多次元アライン情報がメモリ管理テーブルから読み出され、読み出された多次元アライン情報に基づいて、隣接領域が仮想多次元空間的な領域であるか否かが判定される。それらの結果、要求される使用領域および隣接領域がいずれも重複確保を許可した領域でかつ仮想多次元空間的な領域であると判定されると、使用領域重複確保手段により、隣接領域と重複して使用領域が多次元空間メモリ領域として確保される。
【００２１】
これにより、重複確保を許可することおよび仮想多次元空間的な領域として確保することを明示した領域同士が重複して確保されるので、タスク間でアクセスが競合する可能性および不適切な形式の使用領域を使用する可能性を低減することができるという効果が得られる。
〔発明７〕  さらに、発明７のメモリ管理装置は、発明６のメモリ管理装置において、
前記領域管理情報登録手段は、前記使用領域確保手段で確保した使用領域へのアクセス情報、並びに、前記領域確保要求に含まれる多次元アライン情報およびオーバラップ情報を含む領域管理情報を前記メモリ管理テーブルに登録するようになっていることを特徴とする。
【００２２】
このような構成であれば、領域管理情報登録手段により、確保された使用領域へのアクセス情報、並びに、領域確保要求に含まれる多次元アライン情報およびオーバラップ情報を含む領域管理情報がメモリ管理テーブルに登録される。
これにより、タスクのプログラムにおいて、メモリ領域を仮想多次元空間的な領域として確保することを示す多次元アライン情報および重複確保を許可することを示すオーバラップ情報を含む領域確保要求を与えるだけで、仮想多次元空間の最大空間サイズを考慮した多次元空間メモリ領域が確保されるとともに使用領域が重複して確保されるので、タスクのプログラムをさらに簡素化することができるという効果が得られる。
【００２３】
〔発明８〕  さらに、発明８のメモリ管理装置は、発明２ないし７のいずれかのメモリ管理装置において、
前記領域管理情報は、前記メモリ領域の重複回数を示すオーバラップカウンタを含み、
前記領域管理情報登録手段は、前記隣接領域に対応するオーバラップカウンタおよび前記使用領域重複確保手段で確保した使用領域に対応するオーバラップカウンタを前記メモリ管理テーブルから読み出し、読み出したそれらオーバラップカウンタを比較して値が大きい方を加算するようになっており、
さらに、前記使用領域を使用可能なメモリ領域として解放する使用領域解放手段を備え、
前記使用領域解放手段は、
領域解放要求に応じて、前記メモリ管理テーブルに基づいて、前記メモリの使用領域のなかから当該領域解放要求に係る使用領域を解放対象領域として検索する解放対象領域検索手段と、
前記解放対象領域検索手段で索出した解放対象領域に対応するオーバラップカウンタを減算し、前記オーバラップカウンタの値が所定値となったときは、前記解放対象領域を使用可能なメモリ領域として解放する重複領域解放手段とを有することを特徴とする。
【００２４】
このような構成であれば、使用領域を確保する場合は、領域管理情報登録手段により、隣接領域に対応するオーバラップカウンタおよび確保された使用領域に対応するオーバラップカウンタがメモリ管理テーブルから読み出され、読み出されたそれらオーバラップカウンタが比較されて値が大きい方が加算される。
次に、メモリ領域を解放する場合は、領域解放要求が与えられると、解放対象領域検索手段により、メモリ管理テーブルに基づいて、メモリの使用領域のなかからその領域解放要求に係る使用領域が解放対象領域として検索される。そして、重複領域解放手段により、索出された解放対象領域に対応するオーバラップカウンタが減算され、オーバラップカウンタの値が所定値になると、解放対象領域が使用可能なメモリ領域として解放される。
【００２５】
これにより、重複して確保した使用領域同士を互いに影響を与えることなく解放することができるという効果が得られる。
〔発明９〕  一方、上記目的を達成するために、発明９のメモリ管理プログラムは、
メモリの使用状態を管理するメモリ管理テーブルに基づいて前記メモリの使用可能なメモリ領域のなかから必要な使用領域を確保する使用領域確保手段、および前記使用領域確保手段で確保した使用領域へのアクセス情報を含む領域管理情報を前記メモリ管理テーブルに登録する領域管理情報登録手段として実現される処理をコンピュータに実行させるためのメモリ管理プログラムであって、
前記領域管理情報は、前記メモリ領域の重複確保を許可するか否かを示すオーバラップ情報を含み、
前記使用領域確保手段は、前記メモリ管理テーブルに基づいて、前記メモリ領域のなかから重複確保可能な使用領域を検索し、索出した重複確保可能な使用領域と重複して前記使用領域を確保するようになっていることを特徴とする。
【００２６】
このような構成であれば、コンピュータによってプログラムが読み取られ、読み取られたプログラムに従ってコンピュータが処理を実行すると、発明１のメモリ管理装置と同等の作用および効果が得られる。
〔発明１０〕  一方、上記目的を達成するために、発明１０のメモリ管理方法は、
メモリの使用状態を管理するメモリ管理テーブルに基づいて前記メモリの使用可能なメモリ領域のなかから必要な使用領域を確保する使用領域確保ステップと、前記使用領域確保ステップで確保した使用領域へのアクセス情報を含む領域管理情報を前記メモリ管理テーブルに登録する領域管理情報登録ステップとを含むメモリ管理方法であって、
前記領域管理情報は、前記メモリ領域の重複確保を許可するか否かを示すオーバラップ情報を含み、
前記使用領域確保ステップは、前記メモリ管理テーブルに基づいて、前記メモリ領域のなかから重複確保可能な使用領域を検索し、索出した重複確保可能な使用領域と重複して前記使用領域を確保することを特徴とする。
【００２７】
これにより、発明１のメモリ管理装置と同等の効果が得られる。
【発明を実施するための最良の形態】
【００２８】
以下、本発明の実施の形態を図面を参照しながら説明する。図１ないし図１０は、本発明に係るメモリ管理装置およびメモリ管理プログラム、並びにメモリ管理方法の実施の形態を示す図である。
本実施の形態は、本発明に係るメモリ管理装置およびメモリ管理プログラム、並びにメモリ管理方法を、図１に示すように、メモリ管理テーブル４００に基づいて２次元メモリ２０の使用状態を管理する場合について適用したものである。
【００２９】
まず、本発明を適用するメモリ管理装置１００の構成を図１を参照しながら説明する。
図１は、メモリ管理装置１００の構成を示す機能ブロック図である。
メモリ管理装置１００は、図１に示すように、並列に実行可能な複数のタスク１０と、２次元メモリ２０と、メモリ管理テーブル４００を格納したメモリ３０と、メモリ管理テーブル４００に基づいて２次元メモリ２０の使用状態を管理するメモリ管理部４０とで構成されている。
【００３０】
次に、２次元メモリ２０の構成を図２を参照しながら詳細に説明する。
図２は、２次元メモリ２０の構成を示す図である。
２次元メモリ２０は、図２に示すように、横ｎバイト、縦ｍバイトの仮想２次元空間的なメモリ領域を有している。データの読み出しの際には、仮想最小２次元メモリ空間上の読出アドレスを指定するとともに、指定された読出アドレスを基準にデータの横方向または縦方向の読出方向を指定したときは、その両指定に応じて、仮想最小２次元メモリ空間上の縦方向または横方向に並ぶ連続データを、ｎ個の各メモリの対応するアドレスからそれぞれ読み出す。
【００３１】
なお、２次元メモリ２０は、公知のものを利用することができ、より具体的な構成は、例えば、特許文献１に記載されている。
次に、メモリ管理テーブル４００の構成を図３ないし図５を参照しながら詳細に説明する。
図３は、メモリ管理テーブル４００のデータ構造を示す図である。
【００３２】
メモリ管理テーブル４００は、最新のレコードを末尾に登録していくキュー形式のリストであり、各使用領域ごとまたは各未使用領域ごとに領域管理情報を１レコードとして登録する。ここで、使用領域とは、いずれかのタスク１０により確保されているメモリ領域をいい、未使用領域とは、いずれのタスク１０にも確保されていないメモリ領域をいう。
各レコードは、図３に示すように、レコード番号（No.）を登録するフィールド４０２と、２次元メモリ２０のアドレス上で断続した複数の使用領域を１つの使用領域として利用する場合に後方の使用領域に対応するレコード番号（Next pointer）を登録するフィールド４０４と、２次元メモリ２０のアドレス上で断続した複数の使用領域を１つの使用領域として利用する場合に前方の使用領域に対応するレコード番号（Prev pointer）を登録するフィールド４０６とを含んで構成されている。また、使用領域または未使用領域のステータス情報（Status）を登録するフィールド４０８と、メモリ領域の重複回数を示すオーバラップカウンタ（Overlap Counter）を登録するフィールド４１０と、使用領域または未使用領域の先頭ポインタ（Start Address）を登録するフィールド４１２と、使用領域または未使用領域のサイズ（Size）を登録するフィールド４１４とを含んで構成されている。
【００３３】
図４は、フィールド４０８のデータ構造を示す図である。
フィールド４０８は、図４に示すように、メモリ領域の重複確保を許可するか否かを示すオーバラップフラグ（Overlap）を登録するフィールド４２０と、メモリ領域を仮想２次元空間的な領域として確保するか否かを示す２Ｄアラインフラグ（2DAlign）を登録するフィールド４２２と、メモリ領域が使用領域および未使用領域のうちいずれかであるかを示す使用状態フラグ(Vacancy)を登録するフィールド４２４とを含んで構成されている。
【００３４】
メモリ領域は、図４に示すように、６つの状態を取り得る。それぞれの状態をＡ〜Ｆで表すとすると、状態Ａは、複数のタスク１０でメモリ領域の重複確保を許可し、２次元メモリ空間の最大幅を考慮した領域（以下、２Ｄ領域という。）として使用領域を確保でき、現在いずれかのタスク１０が確保している使用領域であることを示している。状態Ｂは、複数のタスク１０でメモリ領域の重複確保を許可し、通常領域として使用領域を確保でき、現在いずれかのタスク１０が確保している使用領域であることを示している。
【００３５】
状態Ｃは、複数のタスク１０でメモリ領域の重複確保を許可せず、２Ｄ領域として使用領域を確保でき、現在いずれかのタスク１０が確保している使用領域であることを示している。状態Ｄは、複数のタスク１０でメモリ領域の重複確保を許可せず、通常領域として使用領域を確保でき、現在いずれかのタスク１０が確保している使用領域であることを示している。
【００３６】
状態Ｅは、複数のタスク１０でメモリ領域の重複確保を許可せず、２Ｄ領域として使用領域を確保でき、現在いずれのタスク１０にも確保されていない未使用領域であることを示している。状態Ｆは、複数のタスク１０でメモリ領域の重複確保を許可せず、通常領域として使用領域を確保でき、現在いずれのタスク１０にも確保されていない未使用領域であることを示している。
【００３７】
なお、メモリ管理テーブル４００は、初期状態では、状態Ｆの未使用領域についての領域管理情報を一つだけ登録している。
図５は、２次元メモリ２０の使用状態を示す図である。
２次元メモリ２０は、ｎ個の各メモリの対応するアドレスから連続データを読取可能であるため、図５に示すように、使用領域の先頭アドレスがｎの整数倍となるように使用領域を確保する。
【００３８】
図５の例では、上段のアドレス０を先頭としたメモリ領域は、状態Ｄとなっている。これは、複数のタスク１０でメモリ領域の重複確保を許可せず、通常領域として使用領域を確保でき、現在タスク１が確保している使用領域であることを示している。また、下段のアドレス２ｎを先頭としたメモリ領域は、状態Ｂとなっている。これは、複数のタスク１０でメモリ領域の重複確保を許可し、通常領域として使用領域を確保でき、現在タスク１，２が確保している使用領域であることを示している。
【００３９】
次に、メモリ管理部４０の構成を図１、図６および図７を参照しながら詳細に説明する。
メモリ管理部４０は、図１に示すように、メモリ管理テーブル４００に基づいて２次元メモリ２０の使用可能なメモリ領域のなかから必要な使用領域を確保する使用領域確保部４２と、使用領域確保部４２で確保した使用領域についての領域管理情報をメモリ管理テーブル４００に登録する領域管理情報登録部４４と、使用領域を使用可能なメモリ領域として解放する使用領域解放部４６とで構成されている。
【００４０】
使用領域確保部４２は、使用領域の必要サイズを示す領域サイズ情報、オーバラップフラグおよび２Ｄアラインフラグを含む領域確保要求を入力したときは、領域確保要求に含まれる領域サイズ情報、オーバラップフラグおよび２Ｄアラインフラグに基づいて、２次元メモリ２０の使用可能なメモリ領域のなかからタスク１０が必要とする使用領域を確保する。
【００４１】
図６は、使用領域を確保する場合におけるメモリ領域の状態遷移を示す図である。
使用領域確保部４２は、メモリ管理テーブル４００を更新して状態Ｅまたは状態Ｆのメモリ領域を状態Ａ、状態Ｂ、状態Ｃおよび状態Ｄのいずれかに変更することにより使用領域を確保する。図６において、状態Ｅのメモリ領域は、状態Ｂまたは状態Ｄに遷移する。すなわち、通常領域として確保可能な未使用領域は、重複確保可能な通常領域として使用するか、重複確保不能な通常領域として使用することができる。また、状態Ｆのメモリ領域は、状態Ａ、状態Ｂ、状態Ｃおよび状態Ｄのいずれかに遷移する。すなわち、２Ｄ領域として確保可能な未使用領域は、重複確保可能な２Ｄ領域または通常領域として使用するか、重複確保不能な２Ｄ領域または通常領域として使用することができる。
【００４２】
図７は、メモリ領域を重複確保する場合を示す図である。
使用領域確保部４２は、メモリ管理テーブル４００に基づいて、領域確保要求に含まれる領域サイズ情報により特定されるサイズの未使用領域を候補領域として検索し、索出した候補領域の下位アドレス方向に隣接する隣接領域の状態に基づいて、隣接領域と重複して使用領域を確保する。
【００４３】
図７（ａ）の例では、状態Ａの使用領域が状態Ｆの未使用領域の下位アドレス方向に隣接している。タスク１０が状態Ａの使用領域を確保することを要求した場合、状態Ｆの未使用領域を候補領域として索出したとすると、その使用領域は、隣接領域と重複して確保される。
図７（ｂ）の例では、状態Ｂの使用領域が状態Ｆの未使用領域の下位アドレス方向に隣接している。タスク１０が状態Ａの使用領域を確保することを要求した場合、状態Ｆの未使用領域を候補領域として索出したとすると、その使用領域は、隣接領域と重複することなく確保される。
【００４４】
図７（ｃ）の例では、状態Ａの使用領域が状態Ｆの未使用領域の上位アドレス方向に隣接している。タスク１０が状態Ａの使用領域を確保することを要求した場合、状態Ｆの未使用領域を候補領域として索出したとすると、その使用領域は、隣接領域および候補領域を結合して状態Ａの一つの使用領域として確保される。
図７（ｄ）の例では、状態Ａの使用領域が状態Ｆの未使用領域の上位アドレス方向に隣接している。タスク１０が状態Ｂの使用領域を確保することを要求した場合、状態Ｆの未使用領域を候補領域として索出したとすると、その使用領域は、隣接領域および候補領域を結合して状態Ａの一つの使用領域として確保される。
【００４５】
使用領域解放部４６は、領域解放要求を入力したときは、２次元メモリ２０の使用領域のなかから領域解放要求に係る使用領域を解放対象領域として検索し、索出した解放対象領域を使用可能なメモリ領域として解放する。また、未使用領域を他の形式の未使用領域として解放する。
図８は、使用領域を解放する場合におけるメモリ領域の状態遷移を示す図である。
【００４６】
使用領域解放部４６は、メモリ管理テーブル４００を更新して状態Ａ、状態Ｂ、状態Ｃ、状態Ｄ、状態Ｅまたは状態Ｆのメモリ領域を状態Ｅおよび状態Ｆのいずれかに変更することにより使用領域を確保する。図８において、状態Ａ、状態Ｃまたは状態Ｆのメモリ領域は、状態Ｆに遷移する。すなわち、２Ｄ領域として確保した使用領域または２Ｄ領域として確保可能な未使用領域は、２Ｄ領域として確保可能な未使用領域として解放することができる。また、状態Ｂまたは状態Ｄのメモリ領域は、状態Ｅに遷移する。すなわち、通常領域として確保した使用領域は、通常領域として確保可能な未使用領域として解放することができる。また、状態Ｅは、状態Ｅおよび状態Ｆのいずれかに遷移する。すなわち、通常領域として確保可能な未使用領域は、２Ｄ領域または通常領域として確保可能な未使用領域として解放することができる。
【００４７】
メモリ管理部４０は、ＣＰＵ、ＲＯＭ、ＲＡＭおよびＩ／Ｆ等をバス接続した一般的なコンピュータと同一機能を有して構成し、ＣＰＵは、ＲＯＭの所定領域に格納されている所定のプログラムを起動させ、そのプログラムに従って、図９および図１０のフローチャートに示す使用領域確保処理および使用領域解放処理をそれぞれ時分割で実行するようになっている。
【００４８】
初めに、使用領域確保処理を図９を参照しながら詳細に説明する。
図９は、使用領域確保処理を示すフローチャートである。
使用領域確保処理は、使用領域確保部４２および領域管理情報登録部４４として実現される処理であって、ＣＰＵにおいて実行されると、図９に示すように、まず、ステップＳ１００に移行するようになっている。
【００４９】
ステップＳ１００では、領域確保要求を入力したか否かを判定し、領域確保要求を入力したと判定したとき(Yes)は、ステップＳ１０２に移行するが、そうでないと判定したとき(No)は、領域確保要求を入力するまでステップＳ１００で待機する。
ステップＳ１０２では、領域サイズ情報を引数として入力し、ステップＳ１０４に移行して、オーバラップフラグを引数として入力し、ステップＳ１０６に移行して、２Ｄアラインフラグを引数として入力し、ステップＳ１０８に移行する。
【００５０】
ステップＳ１０８では、引数として入力した２Ｄアラインフラグに基づいて、タスク１０が要求する使用領域（以下、要求領域という。）が２Ｄ領域であるか否かを判定し、２Ｄ領域であると判定したとき(Yes)は、ステップＳ１１０に移行する。
ステップＳ１１０では、引数として入力したオーバラップフラグに基づいて、要求領域が重複確保を許可した領域であるか否かを判定し、重複確保を許可した領域であると判定したとき(Yes)は、ステップＳ１１２に移行する。
【００５１】
ステップＳ１１２では、メモリ管理テーブル４００に基づいて、２次元メモリ２０の使用可能なメモリ領域のなかから、引数として入力した領域サイズ情報により特定されるサイズ以上の未使用領域（状態Ｆ）を候補領域として検索し、索出した候補領域を必要十分なサイズに分割し、ステップＳ１１４に移行する。
ステップＳ１１４では、メモリ管理テーブル４００に基づいて、分割後の候補領域の下位アドレス方向に隣接する隣接領域を検索し、ステップＳ１１６に移行して、索出した隣接領域に対応するステータス情報をメモリ管理テーブル４００から読み出し、ステップＳ１１８に移行する。
【００５２】
ステップＳ１１８では、読み出したステータス情報に含まれる２Ｄアラインフラグおよび使用状態フラグに基づいて、隣接領域が２Ｄ領域または未使用領域（状態Ｆ）であるか否かを判定し、２Ｄ領域または未使用領域であると判定したとき(Yes)は、ステップＳ１２０に移行する。
ステップＳ１２０では、読み出したステータス情報に含まれるオーバラップフラグに基づいて、隣接領域が重複確保を許可した領域であるか否かを判定し、重複確保を許可した領域であると判定したとき(Yes)は、ステップＳ１２２に移行する。
【００５３】
ステップＳ１２２では、隣接領域と重複して使用領域を２Ｄ領域として確保し、ステップＳ１２４に移行して、引数として入力したオーバラップフラグおよび２Ｄアラインフラグを含む領域管理情報をメモリ管理テーブル４００に登録し、ステップＳ１２６に移行する。
ステップＳ１２６では、隣接領域に対応するオーバラップカウンタおよび確保した使用領域に対応するオーバラップカウンタをメモリ管理テーブル４００から読み出し、読み出したそれらオーバラップカウンタを比較して値が大きい方を「１」加算し、ステップＳ１２８に移行して、確保した使用領域の先頭ポインタを要求元のタスク１０に引き渡し、一連の処理を終了して元の処理に復帰させる。
【００５４】
一方、ステップＳ１２０で、隣接領域が重複確保を許可した領域でないと判定したとき(No)は、ステップＳ１３０に移行して、隣接領域と重複することなく分割後の候補領域を２Ｄ領域の使用領域として確保し、ステップＳ１３２に移行して、引数として入力したオーバラップフラグおよび２Ｄアラインフラグを含む領域管理情報をメモリ管理テーブル４００に登録し、ステップＳ１２８に移行する。
【００５５】
一方、ステップＳ１１８で、隣接領域が２Ｄ領域または未使用領域でないと判定したとき(No)は、ステップＳ１３０に移行する。
一方、ステップＳ１１０で、要求領域が重複確保を許可した領域でないと判定したとき(No)は、ステップＳ１３４に移行して、メモリ管理テーブル４００に基づいて、２次元メモリ２０の使用可能なメモリ領域のなかから、引数として入力した領域サイズ情報により特定されるサイズ以上の未使用領域（状態Ｆ）を候補領域として検索し、索出した候補領域を必要十分なサイズに分割し、ステップＳ１３０に移行する。
【００５６】
一方、ステップＳ１０８で、要求領域が２Ｄ領域でないと判定したとき(No)は、ステップＳ１３６に移行する。
ステップＳ１３６では、引数として入力したオーバラップフラグに基づいて、要求領域が重複確保を許可した領域であるか否かを判定し、重複確保を許可した領域であると判定したとき(Yes)は、ステップＳ１３８に移行する。
【００５７】
ステップＳ１３８では、メモリ管理テーブル４００に基づいて、２次元メモリ２０の使用可能なメモリ領域のなかから、引数として入力した領域サイズ情報により特定されるサイズ以上の未使用領域（状態Ｅ，Ｆ）を候補領域として検索し、索出した候補領域を必要十分なサイズに分割し、ステップＳ１４０に移行する。
ステップＳ１４０では、メモリ管理テーブル４００に基づいて、分割後の候補領域の下位アドレス方向に隣接する隣接領域を検索し、ステップＳ１４２に移行して、索出した隣接領域に対応するステータス情報をメモリ管理テーブル４００から読み出し、ステップＳ１４４に移行する。
【００５８】
ステップＳ１４４では、読み出したステータス情報に含まれる２Ｄアラインフラグおよび使用状態フラグに基づいて、隣接領域が通常領域または未使用領域（状態Ｅ，Ｆ）であるか否かを判定し、通常領域または未使用領域であると判定したとき(Yes)は、ステップＳ１４６に移行する。
ステップＳ１４６では、読み出したステータス情報に含まれるオーバラップフラグに基づいて、隣接領域が重複確保を許可した領域であるか否かを判定し、重複確保を許可した領域であると判定したとき(Yes)は、ステップＳ１４８に移行する。
【００５９】
ステップＳ１４８では、隣接領域と重複して使用領域を通常領域として確保し、ステップＳ１２４に移行する。
一方、ステップＳ１４６で、隣接領域が重複確保を許可した領域でないと判定したとき(No)は、ステップＳ１５０に移行して、隣接領域と重複することなく分割後の候補領域を通常領域の使用領域として確保し、ステップＳ１３２に移行する。
【００６０】
一方、ステップＳ１４４で、隣接領域が通常領域または未使用領域でないと判定したとき(No)は、ステップＳ１５０に移行する。
一方、ステップＳ１３６で、要求領域が重複確保を許可した領域でないと判定したとき(No)は、ステップＳ１５２に移行して、メモリ管理テーブル４００に基づいて、２次元メモリ２０の使用可能なメモリ領域のなかから、引数として入力した領域サイズ情報により特定されるサイズ以上の未使用領域（状態Ｅ，Ｆ）を候補領域として検索し、索出した候補領域を必要十分なサイズに分割し、ステップＳ１５０に移行する。
【００６１】
次に、使用領域解放処理を図１０を参照しながら詳細に説明する。
図１０は、使用領域解放処理を示すフローチャートである。
使用領域解放処理は、使用領域解放部４６として実現される処理であって、ＣＰＵにおいて実行されると、図１０に示すように、まず、ステップＳ２００に移行するようになっている。
【００６２】
ステップＳ２００では、領域解放要求を入力したか否かを判定し、領域解放要求を入力したと判定したとき(Yes)は、ステップＳ２０２に移行するが、そうでないと判定したとき(No)は、領域解放要求を入力するまでステップＳ２００で待機する。
ステップＳ２０２では、メモリ管理テーブル４００に基づいて、２次元メモリ２０の使用領域のなかから、領域解放要求に係る使用領域を解放対象領域として検索し、ステップＳ２０４に移行して、解放対象領域に対応するオーバラップカウンタを「１」減算し、ステップＳ２０６に移行する。
【００６３】
ステップＳ２０６では、オーバラップカウンタの値が「０」であるか否かを判定し、オーバラップカウンタの値が「０」であると判定したとき(Yes)は、ステップＳ２０８に移行して、索出した解放対象領域を使用可能なメモリ領域として解放し、一連の処理を終了して元の処理に復帰させる。
一方、ステップＳ２０６で、オーバラップカウンタの値が「０」でないと判定したとき(No)は、一連の処理を終了して元の処理に復帰させる。
【００６４】
次に、本実施の形態の動作を説明する。
まず、タスク１０が状態Ａの使用領域を確保する場合を説明する。
状態Ａの使用領域を確保する場合、タスク１０のプログラムでは、メモリ領域を２Ｄ領域として確保することを示す２Ｄアラインフラグ、重複確保を許可することを示すオーバラップフラグ、および領域サイズ情報を含む領域確保要求をメモリ管理部４０に出力する。
【００６５】
メモリ管理部４０では、領域確保要求が入力されると、ステップＳ１０８を経て、領域確保要求に含まれる２Ｄアラインフラグに基づいて、要求領域が２Ｄ領域であるか否かが判定される。ここで、タスク１０は、状態Ａの使用領域の確保を要求しているので、要求領域が２Ｄ領域であると判定される。
次いで、ステップＳ１１０を経て、領域確保要求に含まれるオーバラップフラグに基づいて、要求領域が重複確保を許可した領域であるか否かが判定される。ここで、タスク１０は、状態Ａの使用領域の確保を要求しているので、要求領域が重複確保を許可した領域であると判定される。
【００６６】
次いで、ステップＳ１１２を経て、メモリ管理テーブル４００に基づいて、領域確保要求に含まれる領域サイズ情報により特定されるサイズの未使用領域が候補領域として検索される。その結果、候補領域が索出されると、ステップＳ１１４を経て、メモリ管理テーブル４００に基づいて、候補領域の下位アドレス方向に隣接する隣接領域が検索される。その結果、隣接領域が索出されると、ステップＳ１１６を経て、隣接領域に対応するステータス情報がメモリ管理テーブル４００から読み出される。
【００６７】
次いで、ステップＳ１１８，Ｓ１２０を経て、読み出されたステータス情報に基づいて、隣接領域が２Ｄ領域または未使用領域であるか否かが判定されるとともに、隣接領域が重複確保を許可した領域であるか否かが判定される。
隣接領域が状態Ａまたは状態Ｆである場合は、ステップＳ１１８，Ｓ１２０の判定処理において、隣接領域が２Ｄ領域または未使用領域で、かつ、重複確保を許可した領域であると判定されるので、ステップＳ１２２を経て、隣接領域と重複して使用領域が２Ｄ領域として確保される。
【００６８】
そして、ステップＳ１２４〜Ｓ１２８を経て、確保された使用領域についての領域管理情報がメモリ管理テーブル４００に登録され、隣接領域に対応するオーバラップカウンタおよび確保された使用領域に対応するオーバラップカウンタのうち大きい方が「１」加算され、確保された使用領域の先頭ポインタが要求元のタスク１０に引き渡される。
一方、隣接領域が状態Ｃである場合は、ステップＳ１１８，Ｓ１２０の判定処理において、隣接領域が２Ｄ領域で、かつ、重複確保を許可しない領域であると判定されるので、ステップＳ１３０を経て、隣接領域と重複することなく候補領域が２Ｄ領域の使用領域として確保される。
【００６９】
そして、ステップＳ１３２，Ｓ１２８を経て、確保された使用領域についての領域管理情報がメモリ管理テーブル４００に登録され、確保された使用領域の先頭ポインタが要求元のタスク１０に引き渡される。
一方、隣接領域が状態Ｂ、状態Ｄまたは状態Ｅである場合は、ステップＳ１１８の判定処理において、隣接領域が２Ｄ領域または未使用領域でないと判定されるので、ステップＳ１３０を経て、隣接領域と重複することなく候補領域が２Ｄ領域の使用領域として確保される。
【００７０】
そして、ステップＳ１３２，Ｓ１２８を経て、確保された使用領域についての領域管理情報がメモリ管理テーブル４００に登録され、確保された使用領域の先頭ポインタが要求元のタスク１０に引き渡される。
次に、タスク１０が状態Ｂの使用領域を確保する場合を説明する。
状態Ｂの使用領域を確保する場合、タスク１０のプログラムでは、メモリ領域を通常領域として確保することを示す２Ｄアラインフラグ、重複確保を許可することを示すオーバラップフラグ、および領域サイズ情報を含む領域確保要求をメモリ管理部４０に出力する。
【００７１】
メモリ管理部４０では、領域確保要求が入力されると、ステップＳ１０８を経て、領域確保要求に含まれる２Ｄアラインフラグに基づいて、要求領域が２Ｄ領域であるか否かが判定される。ここで、タスク１０は、状態Ｂの使用領域の確保を要求しているので、要求領域が２Ｄ領域でないと判定される。
次いで、ステップＳ１３６を経て、領域確保要求に含まれるオーバラップフラグに基づいて、要求領域が重複確保を許可した領域であるか否かが判定される。ここで、タスク１０は、状態Ｂの使用領域の確保を要求しているので、要求領域が重複確保を許可した領域であると判定される。
【００７２】
次いで、ステップＳ１３８を経て、メモリ管理テーブル４００に基づいて、領域確保要求に含まれる領域サイズ情報により特定されるサイズの未使用領域が候補領域として検索される。その結果、候補領域が索出されると、ステップＳ１４０を経て、メモリ管理テーブル４００に基づいて、候補領域の下位アドレス方向に隣接する隣接領域が検索される。その結果、隣接領域が索出されると、ステップＳ１４２を経て、隣接領域に対応するステータス情報がメモリ管理テーブル４００から読み出される。
【００７３】
次いで、ステップＳ１４４，Ｓ１４６を経て、読み出されたステータス情報に基づいて、隣接領域が通常領域または未使用領域であるか否かが判定されるとともに、隣接領域が重複確保を許可した領域であるか否かが判定される。
隣接領域が状態Ｂ、状態Ｅまたは状態Ｆである場合は、ステップＳ１４４，Ｓ１４６の判定処理において、隣接領域が通常領域または未使用領域で、かつ、重複確保を許可した領域であると判定されるので、ステップＳ１４８を経て、隣接領域と重複して使用領域が通常領域として確保される。
【００７４】
そして、ステップＳ１２４〜Ｓ１２８を経て、確保された使用領域についての領域管理情報がメモリ管理テーブル４００に登録され、隣接領域に対応するオーバラップカウンタおよび確保された使用領域に対応するオーバラップカウンタのうち大きい方が「１」加算され、確保された使用領域の先頭ポインタが要求元のタスク１０に引き渡される。
一方、隣接領域が状態Ｄである場合は、ステップＳ１４４，Ｓ１４６の判定処理において、隣接領域が通常領域で、かつ、重複確保を許可しない領域であると判定されるので、ステップＳ１５０を経て、隣接領域と重複することなく候補領域が通常領域の使用領域として確保される。
【００７５】
そして、ステップＳ１３２，Ｓ１２８を経て、確保された使用領域についての領域管理情報がメモリ管理テーブル４００に登録され、確保された使用領域の先頭ポインタが要求元のタスク１０に引き渡される。
一方、隣接領域が状態Ａまたは状態Ｃである場合は、ステップＳ１４４の判定処理において、隣接領域が通常領域でないと判定されるので、ステップＳ１５０を経て、隣接領域と重複することなく候補領域が通常領域の使用領域として確保される。
【００７６】
そして、ステップＳ１３２，Ｓ１２８を経て、確保された使用領域についての領域管理情報がメモリ管理テーブル４００に登録され、確保された使用領域の先頭ポインタが要求元のタスク１０に引き渡される。
次に、タスク１０が状態Ｃの使用領域を確保する場合を説明する。
状態Ｃの使用領域を確保する場合、タスク１０のプログラムでは、メモリ領域を２Ｄ領域として確保することを示す２Ｄアラインフラグ、重複確保を許可しないことを示すオーバラップフラグ、および領域サイズ情報を含む領域確保要求をメモリ管理部４０に出力する。
【００７７】
メモリ管理部４０では、領域確保要求が入力されると、ステップＳ１０８を経て、領域確保要求に含まれる２Ｄアラインフラグに基づいて、要求領域が２Ｄ領域であるか否かが判定される。ここで、タスク１０は、状態Ｃの使用領域の確保を要求しているので、要求領域が２Ｄ領域であると判定される。
次いで、ステップＳ１１０を経て、領域確保要求に含まれるオーバラップフラグに基づいて、要求領域が重複確保を許可した領域であるか否かが判定される。ここで、タスク１０は、状態Ｃの使用領域の確保を要求しているので、要求領域が重複確保を許可した領域でないと判定される。
【００７８】
次いで、ステップＳ１３４を経て、メモリ管理テーブル４００に基づいて、領域確保要求に含まれる領域サイズ情報により特定されるサイズの未使用領域が候補領域として検索される。その結果、候補領域が索出されると、ステップＳ１３０を経て、隣接領域と重複することなく候補領域が２Ｄ領域の使用領域として確保される。
そして、ステップＳ１３２，Ｓ１２８を経て、確保された使用領域についての領域管理情報がメモリ管理テーブル４００に登録され、確保された使用領域の先頭ポインタが要求元のタスク１０に引き渡される。
【００７９】
次に、タスク１０が状態Ｄの使用領域を確保する場合を説明する。
状態Ｄの使用領域を確保する場合、タスク１０のプログラムでは、メモリ領域を通常領域として確保することを示す２Ｄアラインフラグ、重複確保を許可しないことを示すオーバラップフラグ、および領域サイズ情報を含む領域確保要求をメモリ管理部４０に出力する。
【００８０】
メモリ管理部４０では、領域確保要求が入力されると、ステップＳ１０８を経て、領域確保要求に含まれる２Ｄアラインフラグに基づいて、要求領域が２Ｄ領域であるか否かが判定される。ここで、タスク１０は、状態Ｄの使用領域の確保を要求しているので、要求領域が２Ｄ領域でないと判定される。
次いで、ステップＳ１３６を経て、領域確保要求に含まれるオーバラップフラグに基づいて、要求領域が重複確保を許可した領域であるか否かが判定される。ここで、タスク１０は、状態Ｄの使用領域の確保を要求しているので、要求領域が重複確保を許可した領域でないと判定される。
【００８１】
次いで、ステップＳ１５２を経て、メモリ管理テーブル４００に基づいて、領域確保要求に含まれる領域サイズ情報により特定されるサイズの未使用領域が候補領域として検索される。その結果、候補領域が索出されると、ステップＳ１５０を経て、隣接領域と重複することなく候補領域が通常領域の使用領域として確保される。
そして、ステップＳ１３２，Ｓ１２８を経て、確保された使用領域についての領域管理情報がメモリ管理テーブル４００に登録され、確保された使用領域の先頭ポインタが要求元のタスク１０に引き渡される。
【００８２】
次に、タスク１０が使用領域を使用する場合を説明する。
使用領域については、重複することなく確保した使用領域である場合は、特別に複数のタスク１０間の同期をとることなく使用する。これに対し、重複して確保した使用領域である場合は、その使用領域の使用に先立ってセマフォを獲得してから使用する。
次に、重複確保した使用領域を解放する場合を説明する。
【００８３】
重複確保した使用領域を解放する場合、タスク１０のプログラムでは、領域解放要求をメモリ管理部４０に出力する。
メモリ管理部４０では、領域解放要求が入力されると、ステップＳ２０２を経て、メモリ管理テーブル４００に基づいて、領域解放要求に係る使用領域が解放対象領域として検索される。その結果、解放対象領域が索出されると、ステップＳ２０４に移行して、解放対象領域に対応するオーバラップカウンタが「１」減算される。
【００８４】
そして、減算の結果、オーバラップカウンタの値が「０」になると、ステップＳ２０８を経て、解放対象領域が使用可能なメモリ領域として解放される。その際、隣接領域が未使用領域である場合は、解放対象領域および隣接領域が一つの未使用領域として結合される。
なお、減算の結果、オーバラップカウンタの値が「０」よりも大きいと、解放対象領域は、他のタスク１０で使用されている可能性があるため、解放されることはない。
【００８５】
このようにして、本実施の形態では、メモリ管理テーブル４００に基づいて、領域確保要求に含まれる領域サイズ情報により特定されるサイズの未使用領域を候補領域として検索し、候補領域の下位アドレス方向に隣接する隣接領域に対応するオーバラップフラグをメモリ管理テーブル４００から読み出し、読み出したオーバラップフラグに基づいて、隣接領域が重複確保を許可した領域であるか否かを判定し、重複確保を許可した領域であると判定したときは、隣接領域と重複して使用領域を確保するようになっている。
【００８６】
これにより、異なるタスク１０がメモリ領域を同時に使用することがない場合は、一方のタスク１０が使用するメモリ領域についてオーバラップフラグにより重複確保を許可しておけば、使用領域が重複して確保されるので、従来に比して、２次元メモリ２０の使用量を低減することができる。
また、隣接領域と重複して使用領域が確保されるので、アドレス上で連続した領域を使用領域として確保することができる。したがって、２次元メモリ２０へのアクセスを効率的に行うことができる。
【００８７】
さらに、本実施の形態では、領域確保要求に含まれるオーバラップフラグに基づいて、要求領域が重複確保を許可した領域であるか否かを判定し、要求領域および隣接領域がいずれも重複確保を許可した領域であると判定したときは、隣接領域と重複して使用領域を確保し、重複確保を許可した領域でないと判定したときは、候補領域を使用領域として確保するようになっている。
【００８８】
これにより、重複確保を許可することを明示した領域同士が重複して確保されるので、タスク１０間でアクセスが競合する可能性を低減することができる。
さらに、本実施の形態では、領域確保要求に含まれる２Ｄアラインフラグに基づいて、要求領域が２Ｄ領域であるか否かを判定し、２Ｄ領域であると判定したときは、２Ｄ領域として使用領域を確保し、２Ｄ領域でないと判定したときは、使用領域を通常領域として確保するようになっている。
【００８９】
これにより、タスク１０のプログラムにおいて、通常領域を確保することができるほか、２次元メモリ空間の最大幅を計算することなく、メモリ領域を２Ｄ領域として確保することを示す２Ｄアラインフラグを含む領域確保要求を与えるだけで、２Ｄ領域が確保されるので、従来に比して、タスク１０のプログラムを比較的簡素化することができる。
さらに、本実施の形態では、領域確保要求に含まれるオーバラップフラグに基づいて、要求領域が重複確保を許可した領域であるか否かを判定し、領域確保要求に含まれる２Ｄアラインフラグに基づいて、要求領域が２Ｄ領域であるか否かを判定し、隣接領域に対応する２Ｄアラインフラグをメモリ管理テーブル４００から読み出し、読み出した２Ｄアラインフラグに基づいて、隣接領域が２Ｄ領域であるか否かを判定し、要求領域および隣接領域がいずれも重複確保を許可した領域であると判定し、かつ、要求領域および隣接領域がいずれも２Ｄ領域であると判定したときは、隣接領域と重複して使用領域を２Ｄ領域として確保するようになっている。
【００９０】
これにより、重複確保を許可することおよび２Ｄ領域として確保することを明示した領域同士が重複して確保されるので、タスク１０間でアクセスが競合する可能性および不適切な形式の使用領域を使用する可能性を低減することができる。
さらに、本実施の形態では、確保した使用領域への先頭ポインタ、並びに、領域確保要求に含まれる２Ｄアラインフラグおよびオーバラップフラグを含む領域管理情報をメモリ管理テーブル４００に登録するようになっている。
【００９１】
これにより、タスク１０のプログラムにおいて、メモリ領域を２Ｄ領域として確保することを示す２Ｄアラインフラグおよび重複確保を許可することを示すオーバラップフラグを含む領域確保要求を与えるだけで、２Ｄ領域が確保されるとともに使用領域が重複して確保されるので、タスク１０のプログラムをさらに簡素化することができる。
さらに、本実施の形態では、隣接領域に対応するオーバラップカウンタおよび確保した使用領域に対応するオーバラップカウンタをメモリ管理テーブル４００から読み出し、読み出したそれらオーバラップカウンタを比較して値が大きい方を加算し、メモリ管理テーブル４００に基づいて、領域解放要求に係る使用領域を解放対象領域として検索し、解放対象領域に対応するオーバラップフラグをメモリ管理テーブル４００から読み出し、読み出したオーバラップフラグに基づいて、解放対象領域が重複確保を許可した領域であるか否かを判定し、重複確保を許可した領域であると判定したときは、解放対象領域に対応するオーバラップカウンタを減算し、オーバラップカウンタの値が所定値となったときは、解放対象領域を使用可能なメモリ領域として解放するようになっている。
【００９２】
これにより、重複して確保した使用領域同士を互いに影響を与えることなく解放することができる。
上記実施の形態において、２次元メモリ２０は、発明１、２、８ないし１０のメモリに対応し、先頭ポインタは、発明１、４、７、９または１０のアクセス情報に対応し、オーバラップフラグは、発明１ないし４、６、７、９または１０のオーバラップ情報に対応している。また、２Ｄアラインフラグは、発明５ないし７の多次元アライン情報に対応し、２Ｄ領域は、発明５または６の多次元空間メモリ領域に対応し、ステップＳ１００〜Ｓ１２２，Ｓ１３０，Ｓ１３４〜Ｓ１５２は、発明１ないし７若しくは９の使用領域確保手段、または発明１０の使用領域確保ステップに対応している。
【００９３】
また、上記実施の形態において、ステップＳ１２４〜Ｓ１２８，Ｓ１３２は、発明１、４、７ないし９の領域管理情報登録手段、または発明１０の領域管理情報登録ステップに対応し、ステップＳ１０８は、発明６の第２要求領域判定手段に対応し、ステップＳ１１０，Ｓ１３６は、発明３の要求領域判定手段、または発明６の第１要求領域判定手段に対応している。また、ステップＳ１１２，Ｓ１３４，Ｓ１３８，Ｓ１５２は、発明２または３の候補領域検索手段に対応し、ステップＳ１１８は、発明６の第２隣接領域判定手段に対応し、ステップＳ１２０，Ｓ１４６は、発明２、３または６の隣接領域判定手段に対応している。
【００９４】
また、上記実施の形態において、ステップＳ１２２，Ｓ１４８は、発明２、３、６または８の使用領域重複確保手段に対応し、ステップＳ１３０，Ｓ１５０は、発明３の使用領域非重複確保手段に対応し、ステップＳ２００〜Ｓ２０８は、発明８の使用領域解放手段に対応している。また、ステップＳ２０２は、発明８の解放対象領域検索手段に対応し、ステップＳ２０４〜Ｓ２０８は、発明８の重複領域解放手段に対応している。
【００９５】
なお、上記実施の形態においては、２次元メモリ２０を用いて構成したが、これに限らず、通常のメモリ（２次元メモリに対して言えば１次元メモリ）その他の拡張メモリを用いて構成することもできる。
また、上記実施の形態において、図９および図１０のフローチャートに示す処理をハードウェアおよびソフトウェアで実現したが、これに限らず、それらの処理をハードウェアのみで実現することもできる。
【００９６】
また、上記実施の形態において、図９および図１０のフローチャートに示す処理を実行するにあたってはいずれも、ＲＯＭにあらかじめ格納されている制御プログラムを実行する場合について説明したが、これに限らず、これらの手順を示したプログラムが記憶された記憶媒体から、そのプログラムをＲＡＭに読み込んで実行するようにしてもよい。
ここで、記憶媒体とは、ＲＡＭ、ＲＯＭ等の半導体記憶媒体、ＦＤ、ＨＤ等の磁気記憶型記憶媒体、ＣＤ、ＣＤＶ、ＬＤ、ＤＶＤ等の光学的読取方式記憶媒体、ＭＯ等の磁気記憶型／光学的読取方式記憶媒体であって、電子的、磁気的、光学的等の読み取り方法のいかんにかかわらず、コンピュータで読み取り可能な記憶媒体であれば、あらゆる記憶媒体を含むものである。
【００９７】
また、上記実施の形態においては、本発明に係るメモリ管理装置およびメモリ管理プログラム、並びにメモリ管理方法を、図１に示すように、メモリ管理テーブル４００に基づいて２次元メモリ２０の使用状態を管理する場合について適用したが、これに限らず、本発明の主旨を逸脱しない範囲で他の場合にも適用可能である。
【図面の簡単な説明】
【００９８】
【図１】メモリ管理装置１００の構成を示す機能ブロック図である。
【図２】２次元メモリ２０の構成を示す図である。
【図３】メモリ管理テーブル４００のデータ構造を示す図である。
【図４】フィールド４０８のデータ構造を示す図である。
【図５】２次元メモリ２０の使用状態を示す図である。
【図６】使用領域を確保する場合におけるメモリ領域の状態遷移を示す図である。
【図７】メモリ領域を重複確保する場合を示す図である。
【図８】使用領域を解放する場合におけるメモリ領域の状態遷移を示す図である。
【図９】使用領域確保処理を示すフローチャートである。
【図１０】使用領域解放処理を示すフローチャートである。
【符号の説明】
【００９９】
１００…メモリ管理装置，１０…タスク，２０…２次元メモリ，３０…メモリ，４０…メモリ管理部，４２…使用領域確保部，４４…領域管理情報登録部，４６…使用領域解放部，４００…メモリ管理テーブル
【図１】
2005100262.tif 000003
【図２】
2005100262.tif 000004
【図３】
2005100262.tif 000005
【図４】
2005100262.tif 000006
【図５】
2005100262.tif 000007
【図６】
2005100262.tif 000008
【図７】
2005100262.tif 000009
【図８】
2005100262.tif 000010
【図９】
2005100262.tif 000011
【図１０】
2005100262.tif 000012