JP2014238767A - メモリ制御装置、メモリ制御方法及びプログラム - Google Patents

メモリ制御装置、メモリ制御方法及びプログラム Download PDF

Info

Publication number
JP2014238767A
JP2014238767A JP2013121897A JP2013121897A JP2014238767A JP 2014238767 A JP2014238767 A JP 2014238767A JP 2013121897 A JP2013121897 A JP 2013121897A JP 2013121897 A JP2013121897 A JP 2013121897A JP 2014238767 A JP2014238767 A JP 2014238767A
Authority
JP
Japan
Prior art keywords
memory
memory allocation
information
area
secured
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2013121897A
Other languages
English (en)
Other versions
JP2014238767A5 (ja
JP6155867B2 (ja
Inventor
裕紀 川上
Hironori Kawakami
裕紀 川上
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Casio Computer Co Ltd
Original Assignee
Casio Computer Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Casio Computer Co Ltd filed Critical Casio Computer Co Ltd
Priority to JP2013121897A priority Critical patent/JP6155867B2/ja
Publication of JP2014238767A publication Critical patent/JP2014238767A/ja
Publication of JP2014238767A5 publication Critical patent/JP2014238767A5/ja
Application granted granted Critical
Publication of JP6155867B2 publication Critical patent/JP6155867B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

【課題】限られたメモリ空間を効率的に活用しつつ、より高速なアクセスを実現する。【解決手段】データを確保するためのメモリ確保領域12Eと、メモリ確保領域12Eに確保されたデータに関するアクセス単位の情報をテーブル化して保持するメモリ確保情報テーブルレジスタ12Bと、メモリ確保領域12Eで直前に確保したデータの情報を保持する前のメモリ確保情報レジスタ12Cと、メモリ確保領域12Eで直前に解放したデータの情報を保持する前のメモリ解放情報レジスタ12Dと、メモリ確保情報テーブルレジスタ12Bの保持テーブルを参照し、前のメモリ確保情報レジスタ12C及び前のメモリ解放情報レジスタ12Dの各保持内容に基づいて、次にメモリ確保領域12Eにデータを確保する領域を探索するCPU11とを備える。【選択図】図1

Description

本発明は、限られたメモリ空間を有効に活用することが可能なメモリ制御装置、メモリ制御方法及びプログラムに関する。
メモリ領域の空き領域に対象情報を割り当てるメモリ領域制御装置において、要求の対象となる対象情報に空き領域を効率良く割り当てるべく、閾値アドレスを超えない範囲の領域についてベストフィット方式により空き領域を検索し、該検索した領域に空き領域がなければ該閾値アドレス以降の領域をファーストフィット方式で検索し、その検索された空き領域に対象情報を割り当て、割り当て後の対象情報の格納領域の最終アドレスを閾値アドレスとして設定するようにした技術が考えられている。(例えば、特許文献1)
特開2007−249708号公報
上記特許文献に記載された技術では、常にメモリ領域の最上位アドレス位置または最下位アドレス位置からベストフィット方式またはファーストフィット方式で空き領域の検索を開始するため、結果的に検索効率が低下する可能性があり得る。
本発明は上記のような実情に鑑みてなされたもので、その目的とするところは、限られたメモリ空間を効率的に活用しつつ、より高速なアクセスを実現することが可能なメモリ制御装置、メモリ制御方法及びプログラムを提供することにある。
本発明の一態様は、データを確保するための領域を有するメモリと、上記メモリに確保されたデータに関するアクセス単位の情報をテーブル化して保持する情報テーブル保持手段と、上記メモリで直前に確保したデータの情報を保持する前確保情報保持手段と、上記メモリで直前に解放したデータの情報を保持する前解放情報保持手段と、上記情報テーブル保持手段の保持するテーブルを参照し、上記前確保情報保持手段及び上記前解放情報保持手段の各保持内容に基づいて、次に上記メモリにデータを確保する領域を探索するメモリ制御手段とを具備したことを特徴とする。
本発明によれば、限られたメモリ空間を効率的に活用しつつ、より高速なアクセスを実現することが可能となる。
本発明の第1の実施形態に係るCPUとメモリの構成を示すブロック図。 同実施形態に係るメモリに設定される先頭メモリ確保番号レジスタの構成を示す図。 同実施形態に係るメモリに設定されるメモリ確保情報テーブルレジスタの構成を示す図。 同実施形態に係るメモリに設定される前のメモリ確保情報レジスタの構成を示す図。 同実施形態に係るメモリに設定される前のメモリ解放情報レジスタの構成を示す図。 同実施形態に係るCPUが実行するメモリに対する処理内容を示すフローチャート。 同実施形態に係るCPUがメモリ領域を確保する際の処理内容を示すフローチャート。 同実施形態に係るCPUがメモリ領域を解放する際の処理内容を示すフローチャート。 同実施形態に係るメモリの確保と解放に伴う各領域の遷移状態を示す図。 同実施形態に係るメモリの確保と解放に伴う各領域の遷移状態を示す図。 本発明の第2の実施形態に係るCPUとメモリの構成を示すブロック図。 同実施形態に係る先頭メモリ確保番号レジスタ、第2先頭メモリ確保番号レジスタ及び最後尾メモリ確保情報レジスタの構成を示す図。 同実施形態に係るメモリ確保情報テーブルレジスタの構成を示す図。 同実施形態に係る前のメモリ確保情報レジスタの構成を示す図。 同実施形態に係る前のメモリ解放情報レジスタの構成を示す図。 同実施形態に係るメモリ確保領域での探索走査の順序を示す図。 同実施形態に係るCPUが実行するメモリに対する処理内容を示すフローチャート。 同実施形態に係るCPUが小サイズのメモリ領域を確保する際の処理内容を示すフローチャート。 同実施形態に係るCPUが小サイズのメモリ領域を確保する際の処理内容を示すフローチャート。 同実施形態に係るCPUが大サイズのメモリ領域を確保する際の処理内容を示すフローチャート。 同実施形態に係るCPUがメモリ領域を解放する際の処理内容を示すフローチャート。
(第1の実施形態)
以下、本発明を各種電子機器に組み込まれる汎用のマイクロコンピュータシステムの一部に適用した第1の実施形態について図面を参照して詳細に説明する。
図1は、同実施形態に係るCPU11と接続されたデータ記憶用のメモリ12の構成を示す図である。同図で、メモリ12には、先頭メモリ確保番号レジスタ12A、メモリ確保情報テーブルレジスタ12B、前のメモリ確保情報レジスタ12C、前のメモリ解放情報レジスタ12D、及びメモリ確保領域12EがCPU11により設定される。
図2に示すように上記先頭メモリ確保番号レジスタ12Aは、先頭に位置するメモリ確保番号を保持する。
図3に示すように上記メモリ確保情報テーブルレジスタ12Bは、メモリ確保番号1〜Nに関してそれぞれ、メモリのアドレス、サイズ、前のメモリ確保番号(1〜N)、次のメモリ確保番号(1〜N)をテーブル化して保持する。
図4に示すように上記前のメモリ確保情報レジスタ12Cは、直前に確保したメモリ確保番号を保持する。
図5に示すように上記前のメモリ解放情報レジスタ12Dは、直前に解放したメモリ確保番号と、その確保番号に対応する最大の空き容量とを保持する。
メモリ確保領域12Eは、メモリ確保領域開始アドレスAから、メモリ確保領域サイズW分の範囲を有し、後述するように領域の確保と解放とをCPU11に制御されて、ワークメモリとしてデータの書込み/読出しを行なう領域である。
次に上記実施形態の動作について説明する。
以下図6乃至図8に示す処理は、CPU11がここでは図示しないプログラムメモリに記憶されている動作プログラムを読出し、上記メモリ12をワークメモリとして使用することで実行する内容である。
図6に示すようにCPU11は、動作プログラムによりメモリ12のメモリ確保領域12Eに対する確保または解放の要求があると、それがいずれの要求であるかを判断する(ステップS101)。
例えば初期状態から例えば20KBのサイズの確保を行なう場合、確保の要求であったと判断した時点でCPU11は図7に示すメモリ確保の処理を開始する。
図7においては、処理当初にメモリ確保情報テーブルレジスタ12Bで空いているものがあるか否かを判断する(ステップS201)。サイズが「0」となっているテーブルは、使用していないテーブルとして取扱う。
図9(1)はメモリ12の初期状態を示し、各レジスタ12A〜12Dが揃ってクリアされている状態を示す。
なお、上記ステップS201でメモリ確保情報テーブルレジスタ12Bでサイズ「0」となっている、空いているテーブルがないと判断した場合には、メモリ確保の数が多すぎてあらたな確保を行なうことができず、確保の失敗(エラー)として、この図7の処理を終了する。
上記ステップS201でメモリ確保情報テーブルレジスタ12Bの内容から空いているものがある(サイズが「0」のテーブルがある)と判断した場合、CPU11は次いで空いているメモリ確保番号の中から、例えば最も小さい値「1」を変数aに設定する(ステップS202)。
またCPU11は先頭メモリ確保番号レジスタ12Aの内容が「0」であるか否かを判断する(ステップS203)。
ここで先頭メモリ確保番号レジスタ12Aの保持内容が「0」であった場合、CPU11はメモリの確保情報が全く保持されていない状態であるとして、探索番号を示す変数mに「1」を、次の探索番号を示す変数nに「0」を、そして探索開始番号を示す変数Zに「1」を設定する(ステップS204)。
その後にCPU11は、探索番号を示す変数mの値「1」に基づく、図9(D)に示すメモリ確保情報テーブルレジスタ12Bの「1」番目のテーブルにおいて、メモリ領域の空き容量Δがすなわちメモリ確保領域12EのサイズWであるとして、今回のメモリ確保サイズSより大きいか否かにより、当該位置を確保できるかどうかを判断する(ステップS205)。
ここでメモリ領域の空き容量Δが今回のメモリ確保サイズSより小さいと判断した場合には、CPU11は空き容量がないものとして、確保の失敗(エラー)として、この図7の処理を終了する。
また空き容量Δが今回のメモリ確保サイズSより大きいと判断すると、CPU11はメモリ確保情報を示す変数mの値と、先頭メモリ確保番号レジスタ12Aの値とを書き換える(ステップS206)。
併せて、前のメモリ確保情報レジスタ12Cのメモリ確保番号に「1」を設定し(ステップS207)、今回確保したアドレス(メモリ確保番号「1」(=a)のアドレス)をCPU11に返して、実際のメモリ確保が実行される。
図9(2)がこのときのメモリ12の内容を例示する。メモリ確保領域12Eの開始アドレスAである「0x0000」番地から20KB分が確保された状態となる。
次に10KBのメモリ領域を確保する場合、CPU11は図7の上記ステップS201を介して上記ステップS202で空きのメモリ確保情報番号を示す変数aに空いているテーブルの番号「2」を設定する。
次にCPU11は、上記ステップS203で先頭メモリ確保番号レジスタ12Aの保持内容が「0」ではなく「1」であると判断し、前のメモリ解放情報レジスタ12Dの保持内容のサイズを参照し、今回のメモリ確保サイズSの方が大きいか否かにより、当該位置を確保できるかどうかを判断する(ステップS208)。
ここで前のメモリ解放情報レジスタ12Dの最大の空き容量を参照し、今回のメモリ確保サイズSの方が大きいと判断すると、探索番号を示す変数mに前のメモリ確保情報レジスタ12Cの保持値「1」を設定すると共に、探索開始番号を示す変数Zに上記変数mの値「1」を設定する(ステップS211)。
また上記ステップS208で前のメモリ解放情報レジスタ12Dの保持内容のサイズを参照し、今回のメモリ確保サイズSの方が小さいと判断した場合には、上記ステップS209と同様に、探索番号を示す変数mに前のメモリ解放情報レジスタ12Dのメモリ確保番号を設定すると共に、この探索開始番号を示す変数Zに上記変数mの値を設定する(ステップS209)。
さらにCPU11は、前のメモリ解放情報レジスタ12Dのメモリ番号を「0」とすることで、今回使用したことによるクリア設定を行なう(ステップS210)。
上記ステップS210またはS211の処理後、探索番号を示す変数mより、メモリ確保情報テーブルレジスタ12Bのメモリ確保番号mの次のメモリ確保番号を、変数nとして設定する(ステップS212)。
そして、探索番号mと次のnまでの空き容量Δを、次式
空き容量Δ=メモリ確保番号nのメモリアドレス−メモリ確保番号mのメモリアドレス
−メモリ確保番号mのサイズ …(1)
として算出する(ステップS213)。
但し、上記次のメモリ確保番号nが0の時、すなわちデータがなく、メモリ番号mが最後尾である場合は、
空き容量Δa=メモリ確保領域開始アドレスA+メモリ領域サイズW
−メモリ確保番号mのメモリアドレス−メモリ確保番号mのサイズ …(2)
空き容量Δb=先頭メモリ確保情報のメモリ確保番号のメモリアドレス
−メモリ確保領域開始アドレスA …(3)
として、ΔaとΔbのより大きい方を空き容量Δとする。
その後にCPU11は、算出した空き容量Δが、今回確保するメモリのサイズSよりも大きいか否かを判断する(ステップS214)。
ここで算出した空き容量Δが今回確保するメモリのサイズSよりも大きいと判断すると、CPU11はメモリ確保情報を示す変数a,m,nの値を書き換える(ステップS215)。すなわち、
メモリ確保情報テーブルレジスタ12Bのm番目のテーブルの次のメモリ確保番号(本来はn)に変数aの値を設定し、
メモリ確保情報テーブルレジスタ12Bのa番目のテーブルについて、
・アドレス=メモリ確保番号mのアドレス+メモリ確保番号mのサイズ
・サイズ =今回のメモリ確保サイズS
・前のメモリ確保番号=m
・次のメモリ確保番号=n
とし、さらにメモリ確保情報テーブルレジスタ12Bのn番目のテーブルの前のメモリ確保番号(本来はm)に変数aの値を設定する。
これにより、メモリ確保領域の物理的な順序は、
「メモリ確保領域m→メモリ確保領域n」の状態から、
「メモリ確保領域m→メモリ確保領域a→メモリ確保領域n」の状態となる。
併せて、CPU11は、前のメモリ確保情報レジスタ12Cのメモリ確保番号に、上記変数aの値を設定する(ステップS216)。
さらにCPU11は、このあらたに設定した変数aで示されるメモリ確保番号の前に位置するメモリ確保番号が「0」であるか否か、を判断する(ステップS217)。
ここで変数aで示されるメモリ確保番号の前に位置するメモリ確保番号が「0」であると判断した場合にのみ、先頭メモリ確保番号レジスタ12Aに変数aの値を設定した上で(ステップS218)、今回確保したアドレス(メモリ確保番号=aのアドレス)をCPU11に返して、実際のメモリ確保が実行される。
図9(3)がこのときのメモリ12の内容を例示する。メモリ確保領域12Eのアドレス「0x05000」番地から10KB分が確保された状態となる。
上記と同様にして図9(4)、図9(5)、図10(1)で示すようにメモリ確保領域12Eのアドレス位置を順次更新しながら30KB分、40KB分、10KB分の領域を順次確保していく。
なお、上記ステップS214において、算出した空き容量Δが今回確保するメモリのサイズSよりも大きくないと判断した場合、その時点の変数nの値が「0」であるか否かにより、次のメモリ確保番号でのメモリ領域を用いることが可能か否かを判断する(ステップS219)。
ここで変数nの値が「0」であると判断した場合、データがなく、メモリ確保番号m自体がメモリ確保領域12Eの最後尾であるため、CPU11は先頭メモリ確保番号レジスタ12Aの保持内容を探索番号の変数mの値としてあらためて設定する(ステップS220)。
但し、上記式(2)の空き容量Δaを選択した場合、CPU11はメモリ確保番号に探索番号の変数mを設定し、次のメモリ確保番号の変数をa(元はn)とすると共に、メモリ確保情報テーブルレジスタ12Bのメモリ確保番号aのテーブルに関し、
アドレス=メモリ確保番号mのアドレス+メモリ確保番号mのサイズ
サイズ =今回のメモリ確保サイズS
前のメモリ確保番号=m
次のメモリ確保番号=0(メモリ確保領域12Eの最後尾)
として設定する。
また上記式(3)の空き容量Δbを選択した場合、メモリ確保番号に探索番号の次の変数n、すなわち先頭メモリ確保番号を設定し、前のメモリ確保番号の変数をa(元はm)とすると共に、メモリ確保情報テーブルレジスタ12Bのメモリ確保番号aのテーブルに関し、
アドレス=メモリ確保領域開始アドレスA
サイズ =今回のメモリ確保サイズS
前のメモリ確保番号=0(先頭)
次のメモリ確保番号=n
とし、さらにメモリ確保情報テーブルレジスタ12Bのn番目のテーブルの前のメモリ確保番号(本来は0)に変数aの値を設定する。
さらに上記ステップS219において、変数nの値が「0」ではないと判断した場合、CPU11はその時点で次のメモリ確保番号として保持している変数nの値を探索番号の変数mの値としてあらためて設定する(ステップS221)。
上記ステップS220またはS221の処理後、CPU11は探索開始番号を示す変数Zの値が上記探索番号の変数mの値と等しいか否かを判断する(ステップS222)。
ここで変数Zの値が上記探索番号の変数mの値とが等しいと判断した場合には、あらたな確保を行なうことができず、確保の失敗(エラー)として、この図7の処理を終了する。
また上記ステップS222で変数Zの値が上記探索番号の変数mの値とが等しくないと判断した場合には、上記ステップS212からの処理に戻り、メモリ確保の探索番号の変数mに基づいて次の番号nの再設定処理を行なった上で、再度のメモリ確保に関する処理を続行する。
次に図10(2)に示すようにメモリ確保領域12Eのアドレス「0x05000」番地から10KB分を解放する場合、CPU11は上記図6のステップS101でメモリ確保ではなくメモリ解放の要求があったと判断すると、CPU11は図8に示すメモリ解放の処理を開始する。
図8においては、処理当初にメモリ確保情報テーブルレジスタ12Bでメモリアドレスを検索し、与えられたメモリ解放アドレスに該当するメモリ確保番号rを取得する(ステップS301)。ここでは、メモリ確保領域12Eのアドレス「0x05000」番地に関するメモリ確保情報テーブルレジスタ12Bの「2」番目のテーブルが該当するため、メモリ確保番号を示す変数rは「2」となる。
その後、前のメモリ解放情報レジスタ12Dの内容を参照し、メモリ確保番号rで示される領域のサイズの方が大きいか否かを判断する(ステップS302)。
メモリ確保番号rで示される領域のサイズの方が大きいと判断した場合にのみ、CPU11は、メモリ確保番号rの領域のサイズを用いて前のメモリ解放情報レジスタ12Dの内容を書き換える(ステップS303)。
ここでは、前のメモリ解放情報レジスタ12Dの最大の空き容量は「0」であり、CPU11はメモリ確保番号「2」で示される領域のサイズ10KBの方が大きいと判断し、上記ステップS303の処理により、前のメモリ解放情報レジスタ12Dの最大の空き容量をメモリ確保番号「2」の領域のサイズ10KBに書き換える。
次に、前のメモリ解放情報レジスタ12Dのメモリ確保番号が「0」であるか否かを判断する(ステップS304a)。
前のメモリ解放情報レジスタ12Dのメモリ確保番号が「0」ではなかった場合、その後、前のメモリ解放情報レジスタ12Dのメモリ確保番号に該当するアドレス値より、メモリ確保番号rのアドレス値の方が小さいか否かを判断する(ステップS304b)。
また上記ステップS304aにおいて、前のメモリ解放情報レジスタ12Dのメモリ確保番号が「0」であった場合、CPU11は上記ステップS304bの処理をスキップして、ステップS305へ飛ぶ。
前のメモリ解放情報レジスタ12Dのメモリ確保番号に該当するアドレス値より、メモリ確保番号rのアドレス値の方が小さいと判断した場合、CPU11はさらにメモリ確保番号rの前のメモリ確保番号が「0」であるか否かを判断する(ステップS305)。
メモリ確保番号rの前のメモリ確保番号が「0」ではなかった場合、CPU11はメモリ確保番号rの前のメモリ確保番号を用いて、前のメモリ解放情報レジスタ12Dのメモリ確保番号を書き換える(ステップS306)。
また上記ステップS305において、メモリ確保番号rの前のメモリ確保番号が「0」であった場合、次にCPU11はメモリ確保番号rの次のメモリ確保番号が「0」であるか否かを判断する(ステップS307)。
メモリ確保番号rの次のメモリ確保番号が「0」ではなかった場合、CPU11は次のメモリ解放情報のメモリ確保番号を用いて、前のメモリ解放情報レジスタ12Dのメモリ確保番号を書き換える(ステップS308)。
また上記ステップS307において、メモリ確保番号rの次のメモリ確保番号が「0」であった場合、CPU11はメモリ確保されている残りがないものとして、前のメモリ解放情報レジスタ12Dに関する内容をすべてクリアする(ステップS309)。
上記ステップS304bで前のメモリ解放情報レジスタ12Dのメモリ確保番号のアドレス値が、メモリ確保番号rのアドレス値以上であると判断した場合、または上記ステップS306またはステップS308またはステップS309での処理実行後、CPU11はメモリ確保番号rの前のメモリ確保番号をt、次のメモリ確保番号をuとすると、以下のように書き換えて、メモリ確保情報テーブルレジスタ12Bからメモリ確保番号rのデータを削除する(ステップS310)。すなわち、
・メモリ確保番号rの前のメモリ確保番号をt、次のメモリ確保番号をuとして、
・メモリ確保番号rのテーブルのクリア
・メモリ確保番号tの次のメモリ加来真穂番号=u
・メモリ確保番号uの前のメモリ確保番号=t
の各処理を一括して実行し、メモリ確保領域12Eのアドレス「0x05000」番地から10KB分のメモリ解放が実行される。
この時点で、図10(J)に示すようにメモリ確保領域12Eのアドレス「0x05000」から10KB分が解放されていると共に、図10(C)に示すように前のメモリ解放情報レジスタ12Dにはメモリ確保番号「1」及び最大の空き容量10KBの情報が保持され、図10(E)に示すようにメモリ確保情報テーブルレジスタ12Bの2番目のテーブルがクリアされている。
その後、さらに図10(3)に示すようにメモリ確保領域12Eのアドレス「0x0F000」番地から40KB分を解放する場合、CPU11は上記図6のステップS101でメモリ確保ではなくメモリ解放の要求があったと判断すると、CPU11は図8に示すメモリ解放の処理を開始する。
図8においては、処理当初にメモリ確保情報テーブルレジスタ12Bでメモリアドレスを検索し、与えられたメモリ解放アドレスに該当するメモリ確保番号rとして「4」を取得する(ステップS301)。
次にCPU11は、上記ステップS302で前のメモリ解放情報レジスタ12Dの内容から、今回解放しようとしているメモリ確保番号「4」の領域のサイズの方が大きいと判断すると、上記ステップS303でメモリ確保番号「4」の領域のサイズ40KBを用いて前のメモリ解放情報レジスタ12Dの最大の空き容量を書き換える。
次に、前のメモリ解放情報レジスタ12Dのメモリ確保番号が「0」であるか否かを判断し(ステップS304a)、前のメモリ解放情報レジスタ12Dのメモリ確保番号が「1」であるので、その後にCPU11は、上記ステップS304bにおいて、前のメモリ解放情報レジスタ12Dのメモリ確保番号「1」に該当するアドレス「0x00000」番地より、メモリ確保番号「4」のアドレス「0x0F000」番地の方が大きいと判断し、上記ステップS310に進む。
その後にCPU11は、上記ステップS310において、メモリ確保情報テーブルレジスタ12Bからメモリ確保番号「4」のデータを削除する。すなわち、
・メモリ確保番号「4」の前のメモリ確保番号を3、次のメモリ確保番号を5として、
・メモリ確保番号「4」のテーブルのクリア
・メモリ確保番号3の次のメモリ確保番号=5
・メモリ確保番号5の前のメモリ確保番号=3
の各処理を一括して実行し、メモリ確保領域12Eのアドレス「0x0F000」番地から40KB分のメモリ解放が実行される。
この時点で、図10(J)に示すようにメモリ確保領域12Eのアドレス「0x0F000」から40KB分が解放されていると共に、図10(C)に示すように前のメモリ解放情報レジスタ12Dにはメモリ確保番号「1」及び最大の空き容量40KBの情報が保持され、図10(G)に示すようにメモリ確保情報テーブルレジスタ12Bの4番目のテーブルがクリアされている。
その後に10KBのサイズの確保を行なう場合、確保の要求であったと判断した時点でCPU11は図7に示すメモリ確保の処理を開始する。
図7において、上記ステップS201でメモリ確保情報テーブルレジスタ12Bで空いているテーブルがあると判断すると、CPU11は次いで上記ステップS202で空きのメモリ確保情報番号を示す変数aに例えば先頭側の空いているテーブルの番号「2」を設定する。
続く上記ステップS203で、CPU11は先頭メモリ確保番号レジスタ12Aの内容が「0」ではないことを判断し、上記ステップS208に進んで前のメモリ解放情報レジスタ12Dの保持内容のサイズ40KBを参照し、今回のメモリ確保サイズS(=10KB)の方が小さいと判断すると、上記ステップS209で探索番号を示す変数mに前のメモリ解放情報レジスタ12Dのメモリ確保番号「1」を設定すると共に、探索開始番号を示す変数Zに上記変数mの値「1」を設定する。
さらにCPU11は、上記ステップS210で前のメモリ解放情報レジスタ12Dのメモリ確保番号を「0」とすることで、今回使用したことによるクリア設定を行なう。
上記ステップS210の処理後、CPU11は上記ステップS212で探索番号を示す変数「1」に該当するメモリ確保情報テーブル1の次のメモリ確保番号「3」を変数nとして設定する。
そして、CPU11は上記ステップS213で探索番号m(=「1」)と次のn(=「3」)までの空き容量Δが10KBであることを上記式(1)を用いて算出する。
その後にCPU11は、上記ステップS214で算出した空き容量10KBが、今回確保するメモリのサイズ10KB以内であると判断すると、上記ステップS215でメモリ確保を行なうために上記変数a,m,nの値を書き換える。
ここでは、上記ステップS202で設定した変数aの値「2」が、メモリ確保情報テーブルレジスタ12Bのm(=「1」)番目のテーブルの次のメモリ確保番号となるように設定すると共に、メモリ確保番号aの値「2」に基づくメモリ確保情報テーブルレジスタ12Bの2番目のテーブルについて、
・アドレス=メモリ確保番号m(=「1」)のアドレス
+メモリ確保番号m(=「1」)のサイズ
・サイズ =今回のメモリ確保サイズS
・前のメモリ確保番号=m(=「1」)
・次のメモリ確保番号=n(=「3」)
とし、さらにメモリ確保情報テーブルレジスタ12Bのn(=「3」)番目のテーブルの前のメモリ確保番号に変数aの値「2」を設定する。
続く上記ステップS216でCPU11は、前のメモリ確保情報レジスタ12Cの保持内容を変数aの値「2」に設定し、続く上記ステップS217で変数aの値「2」で示されるメモリ確保番号の前に位置するメモリ確保番号「1」が「0」ではないことを確認すると、今回確保したアドレス「0x05000」をCPU11に返して、実際のメモリ確保を実行する。
この時点で、図10(J)に示すようにメモリ確保領域12Eのアドレス「0x05000」から10KB分が再度確保されると共に、図10(C)に示すように前のメモリ解放情報レジスタ12Dはメモリ確保番号、最大の空き容量共にクリアされて「0」とされ、図10(E)に示すようにメモリ確保情報テーブルレジスタ12Bの2番目のテーブルが上記ステップS215での処理により設定されている。
その後に20KBのサイズの確保を行なう場合、確保の要求であったと判断した時点でCPU11は図7に示すメモリ確保の処理を開始する。
図7において、上記ステップS201でメモリ確保情報テーブルレジスタ12Bで空いているテーブルがあると判断すると、CPU11は次いで上記ステップS202で空きのメモリ確保情報番号を示す変数aに例えば先頭側の空いているテーブルの番号「4」を設定する。
続く上記ステップS203で、CPU11は先頭メモリ確保番号レジスタ12Aの内容が「0」ではないことを判断し、上記ステップS208に進んで前のメモリ解放情報レジスタ12Dの保持内容のサイズ「0」を参照し、今回のメモリ確保サイズS(=20KB)の方が大きいと判断すると、上記ステップS211で探索番号を示す変数mに前のメモリ確保情報レジスタ12Cのメモリ確保番号の保持値「2」を設定すると共に、探索開始番号を示す変数Zに上記変数mの値「2」を設定する。
上記ステップS211の処理後、CPU11は上記ステップS212で探索番号を示す変数「2」の次のメモリ確保番号「3」を変数nとして設定する。
そして、CPU11は上記ステップS213で探索番号mと次のnまでの空き容量Δが0KBであることを上記式(1)により算出する。
その後にCPU11は、上記ステップS214で算出した空き容量0KBが、今回確保するメモリのサイズ20KBに足りないことを判断すると、続くステップS210で変数nの値が「0」ではないことを確認した上で、上記ステップS221において探索番号mの値を同変数nの値「3」により更新設定する。
次いでCPU11は、上記ステップS222において変数Zの値「2」が探索番号の変数mの値「3」とが等しくないと判断し、上記ステップS212からの処理に戻る。
こうして上記ステップS212〜S214,S219,S221,S222の処理を繰返し実行することで、探索に用いる変数m,nの値を順次「+1」更新設定しながら、20KBの空き容量が確保可能なメモリ確保番号を探索する。
そして、変数mの値が「3」、nの値が「5」となった時点で、対応するメモリ確保領域12Eのアドレス「0x0F000」からの40KB分が空き容量として確保可能であることを上記ステップS214で判断すると、CPU11は上記ステップS215でメモリ確保を行なうために上記変数a,m,nの値を書き換える。
ここでは、上記ステップS202で設定した変数aの値「4」が、メモリ確保情報テーブルレジスタ12Bのm(=「3」)番目のテーブルの次のメモリ確保番号となるように設定すると共に、メモリ確保番号aの値「4」に基づくメモリ確保情報テーブルレジスタ12Bの4番目のテーブルについて、
・アドレス=メモリ確保番号m(=「3」)のアドレス
+メモリ確保番号m(=「3」)のサイズ
・サイズ =今回のメモリ確保サイズS(=20KB)
・前のメモリ確保番号=m(=「3」)
・次のメモリ確保番号=n(=「5」)
とし、さらにメモリ確保情報テーブルレジスタ12Bのn(=「5」)番目のテーブルの前のメモリ確保番号に変数aの値「4」を設定する。
続く上記ステップS216でCPU11は、前のメモリ確保情報レジスタ12Cの保持内容を変数aの値「4」に設定し、続く上記ステップS217で変数aの値「4」で示されるメモリ確保番号の前に位置するメモリ確保番号「3」が「0」ではないことを確認すると、今回確保したアドレス「0x0F000」をCPU11に返して、実際のメモリ確保を実行する。
この時点で、図10(J)に示すようにメモリ確保領域12Eのアドレス「0x0F000」から20KB分が再度確保されると共に、図10(C)に示すように前のメモリ解放情報レジスタ12Dはメモリ確保番号、最大の空き容量が共にクリアされて「0」とされ、図10(G)に示すようにメモリ確保情報テーブルレジスタ12Bの4番目のテーブルが上記ステップS215での処理により設定されている。
以上詳述した如く本実施形態によれば、先頭メモリ確保番号レジスタ12Aと、各メモリ確保領域毎の情報をテーブル化して保持するメモリ確保情報テーブルレジスタ12B、前のメモリ確保情報レジスタ12C、及び前のメモリ解放情報レジスタ12Dを用い、直前に確保または解放したメモリ確保領域の位置を参照して、次に確保または解放の処理を開始する位置を制御するようにしたので、限られたメモリ空間を効率的に活用しつつ、より高速なアクセスを実現することが可能となる。
(第2の実施形態)
以下、本発明を各種電子機器に組み込まれる汎用のマイクロコンピュータシステムの一部に適用した第2の実施形態について図面を参照して詳細に説明する。
図11は、同実施形態に係るCPU21と接続されたデータ記憶用のメモリ22の構成を示す図である。同図で、メモリ22には、先頭メモリ確保番号レジスタ22A、探索方向変更アドレス以降の先頭メモリ確保番号レジスタ(以下文中では「第2先頭メモリ確保番号レジスタ」と称する)22B、最後尾メモリ確保情報レジスタ22C、メモリ確保情報テーブルレジスタ22D、前のメモリ確保情報レジスタ22E、前のメモリ解放情報レジスタ22F、及びメモリ確保領域22GがCPU21により設定される。
図12(A)に示すように上記先頭メモリ確保番号レジスタ22Aは、先頭に位置するメモリ確保番号を保持する。
図12(B)に示すように上記第2先頭メモリ確保番号レジスタ22Bは、探索方向変更アドレス以降の先頭メモリ確保番号を保持する。
図12(C)に示すように上記最後尾メモリ確保情報レジスタ22Cは、最後尾のメモリ確保番号を保持する。
図13に示すように上記メモリ確保情報テーブルレジスタ22Dは、メモリ確保番号1〜Nに関してそれぞれ、メモリのアドレス、サイズ、前のメモリ確保番号(1〜N)、次のメモリ確保番号(1〜N)をテーブル化して保持する。
図14に示すように上記前のメモリ確保情報レジスタ22Eは、直前に確保したメモリ確保番号を保持する。
図15に示すように上記前のメモリ解放情報レジスタ22Fは、直前に解放したメモリ確保番号と、その確保番号に対応する最大の空き容量とを保持する。
図16に示すように上記メモリ確保領域22Gは、メモリ確保領域開始アドレスAから、メモリ確保領域サイズW分の範囲を有し、後述するように領域の確保と解放とをCPU21に制御されて、ワークメモリとしてデータの書込み/読出しを行なう領域である。
加えてメモリ確保領域22Gは、上記メモリ確保領域開始アドレスAから、確保サイズが小さい場合に優先して検索する領域として探索方向変更アドレスBを設定する。この探索方向変更アドレスB補設定することにより、確保サイズが大きい場合と小さい場合とでメモリ領域を確保する場合の検索を後述する動作のように切り換える。
次に上記実施形態の動作について説明する。
以下図17乃至図21に示す処理は、CPU21がここでは図示しないプログラムメモリに記憶されている動作プログラムを読出し、上記メモリ22をワークメモリとして使用することで実行する内容である。
図17に示すようにCPU21は、動作プログラムによりメモリ22のメモリ確保領域22Gに対する確保または解放の要求があると、それがいずれの要求であるかを判断する(ステップS401)。
ここで確保の要求であると判断した場合、CPU21はさらにそのメモリ確保の要求に対して、確保しようとするデータの領域サイズが予め設定された容量より大きいか否かを判断する(ステップS402)。
確保しようとするデータの領域サイズが予め設定された容量以下であると判断した場合、CPU21は小サイズ用のメモリ確保処理を開始する一方で、確保しようとするデータの領域サイズが予め設定された容量より大きいと判断した場合には、CPU21は大サイズ用のメモリ確保処理を開始する。
また上記ステップS401でメモリ確保の要求ではないと判断した場合、CPU21はメモリ確保領域22Gのアドレスを指定した上で当該アドレス以下の領域のメモリ解放の処理を開始する。
図18及び図19は、小さいサイズ用のメモリ確保の処理内容を示すフローチャートである。その処理当初に、CPU21はメモリ確保情報テーブルレジスタ22Dで空いているものがあるか否かを判断する(ステップS501)。サイズが「0」となっているテーブルは、使用していないテーブルとして取扱う。
ここで空いているテーブルがないと判断した場合には、メモリ確保の数が多すぎてあらたな確保を行なうことができず、確保の失敗(エラー)として、この図18及び図19の処理を終了する。
上記ステップS501でメモリ確保情報テーブルレジスタ22Dの内容から空いているものがある(サイズが「0」のテーブルがある)と判断した場合、CPU21は次いで空いているメモリ確保番号の中から、例えば最も小さい値「1」を変数aに設定する(ステップS502)。
またCPU21は先頭メモリ確保番号レジスタ22Aの内容が「0」であるか否かを判断する(ステップS503)。
ここで先頭メモリ確保番号レジスタ22Aの保持内容が「0」であった場合、CPU21はメモリの確保情報が全く保持されていない状態であるとして、探索番号を示す変数mに「1」を、次の探索番号を示す変数nに「0」を、そして探索開始番号を示す変数Zに「1」を設定する(ステップS504)。
その後にCPU21は、探索番号を示す変数mの値「1」に基づき、メモリ確保情報テーブルレジスタ22Dの「1」番目のテーブルにおいて、メモリ領域の空き容量Δがすなわちメモリ確保領域12EのサイズWであるとして、今回のメモリ確保サイズSより大きいか否かにより、当該位置を確保できるかどうかを判断する(ステップS505)。
ここでメモリ領域の空き容量Δが今回のメモリ確保サイズSより小さいと判断した場合には、CPU21は空き容量がないものとして、確保の失敗(エラー)として、この図7の処理を終了する。
また上記ステップS505で空き容量Δが今回のメモリ確保サイズSより大きいと判断すると、CPU21はメモリ確保情報を示す変数mの値、先頭メモリ確保番号レジスタ22Aの値、及び最後尾メモリ確保情報レジスタ22Cの値を書き換える(ステップS506)。すなわち、
メモリ確保情報テーブルレジスタ22Dの1番目のテーブルについて、
・アドレス=メモリ確保領域22Gの先頭アドレスA
・サイズ =今回のメモリ確保サイズS
・前のメモリ確保番号=0
・次のメモリ確保番号=0
とすると共に、前のメモリ確保情報レジスタ22Eの値、先頭メモリ確保番号レジスタ22Aの値、及び最後尾メモリ確保情報レジスタ22Cの値をいずれも「1」とする。
併せて、前のメモリ確保情報レジスタ22Eのメモリ確保番号に「1」を設定し(ステップS507)、今回確保したアドレス(メモリ確保番号「1」(=a)のアドレス)をCPU21に返して、実際のメモリ確保が実行される。
また上記ステップS503で先頭メモリ確保番号レジスタ22Aの保持内容が「0」ではないと判断した場合、すなわちメモリ22が初期化直後ではなく、すでにメモリ確保された領域が存在するものとして、CPU21は次に前のメモリ解放情報レジスタ22Fに保持されている最大の空き容量を参照し、今回のメモリ確保サイズSの方が大きいか否かにより、当該位置を確保できるかどうかを判断する(ステップS508)。
ここで今回のメモリ確保サイズSの方が小さいと判断すると、探索番号を示す変数mに前のメモリ解放情報レジスタ22Fのメモリ確保番号を設定すると共に、探索開始番号を示す変数Zに上記変数mの値を設定する(ステップS509)。
さらにCPU21は、前のメモリ解放情報レジスタ22Fのメモリ確保番号を「0」とすることで、今回使用したことによるクリア設定を行なう(ステップS510)。
また上記ステップS508で前のメモリ解放情報レジスタ22Fの保持内容の最大の空き容量を参照し、今回のメモリ確保サイズSの方が大きいと判断した場合には、上記ステップS509と同様に、探索番号を示す変数mに前のメモリ解放情報レジスタ22Fのメモリ確保番号を設定すると共に、この探索開始番号を示す変数Zに上記変数mの値を設定する(ステップS511)。
上記ステップS510またはS511の処理後、探索番号を示す変数mの次のメモリ確保番号を変数nとして設定する(ステップS512)。
そして、探索番号mと次のnまでの空き容量Δを、次式
(I:メモリ確保番号mのメモリアドレスが探索変更アドレスBよりも小さい場合)
(I-1:次のメモリ確保番号nが「0」(データがなく、メモリ番号mが最後尾)の場合)
空き容量Δ=メモリ確保領域開始アドレスA+メモリ確保領域のサイズW
−メモリ確保番号mのメモリアドレス−メモリ確保番号mのサイズ
…(4-1)
(I-2:次のメモリ確保番号nが探索方向変更アドレスBよりも大きい場合)
空き容量Δa=探索方向変更アドレスB−メモリ確保番号mのメモリアドレス
−メモリ確保番号mのサイズ
空き容量Δb=先頭メモリ確保番号のメモリアドレス−メモリ確保領域開始アドレスA
上記ΔaとΔbのうちの大きい方を空き容量Δとする …(4-2)
(I-3:上記以外)
空き容量Δ=メモリ確保番号nのメモリアドレス−メモリ確保番号mのメモリアドレス
−メモリ確保番号mのサイズ …(4-3)
(II:メモリ確保番号mのメモリアドレスが探索変更アドレスB以上の場合)
(II-1:次のメモリ確保番号nが「0」(データがなく、メモリ番号mが最後尾)の場合)
空き容量Δ=メモリ確保領域開始アドレスA+メモリ確保領域のサイズW
−メモリ確保番号mのメモリアドレス−メモリ確保番号mのサイズ
…(4-4)
(II-2:上記以外)
空き容量Δ=メモリ確保番号nのメモリアドレス−メモリ確保番号mのメモリアドレス
−メモリ確保番号mのサイズ …(4-5)
として算出する(ステップS513)。
その後にCPU21は、算出した空き容量Δが、今回確保するメモリのサイズSよりも大きいか否かを判断する(ステップS514)。
ここで算出した空き容量Δが今回確保するメモリのサイズSよりも大きいと判断すると、CPU21はメモリ確保情報を示す変数a,m,nの値を書き換える(ステップS515)。すなわち、
メモリ確保情報テーブルレジスタ22Dのm番目のテーブルの次のメモリ確保番号(本来はn)に変数aの値を設定し、
メモリ確保情報テーブルレジスタ22Dのa番目のテーブルについて、
・アドレス=メモリ確保番号mのアドレス+メモリ確保番号mのサイズ
・サイズ =今回のメモリ確保サイズS
・前のメモリ確保番号=m
・次のメモリ確保番号=n
とし、さらにメモリ確保情報テーブルレジスタ22Dのn番目の前のメモリ確保番号(本来はm)に変数aの値を設定する。
これにより、メモリ確保領域の物理的な順序は、
「メモリ確保領域m→メモリ確保領域n」の状態から、
「メモリ確保領域m→メモリ確保領域a→メモリ確保領域n」の状態となる。
但し、次のメモリ確保番号nが「0」(データなし)であり、メモリ確保番号mが前のメモリ確保情報レジスタ22Eの最後尾である場合には、以下のようにする。すなわち
(III:上記式(4−1)、(4−4)の場合)
メモリ確保情報テーブルレジスタ22Dのm番目のテーブルの次のメモリ確保番号(本来はn)に変数aの値を設定し、
メモリ確保情報テーブルレジスタ22Dのa番目のテーブルについて、
・アドレス=メモリ確保番号mのアドレス+メモリ確保番号mのサイズ
・サイズ =今回のメモリ確保サイズS
・前のメモリ確保番号=m
・次のメモリ確保番号=0(最後尾)
とする。
(IV:上記式(4−2)で空き容量Δbを選択した場合)
メモリ確保情報テーブルレジスタ22Dのa番目のテーブルについて、
・アドレス=メモリ確保領域開始アドレスA
・サイズ =今回のメモリ確保サイズS
・前のメモリ確保番号=0(先頭)
・次のメモリ確保番号=先頭メモリ確保番号レジスタ22Aのメモリ確保番号
とし、さらにメモリ確保情報テーブルレジスタ22Dの番号を先頭メモリ確保番号レジスタ22Aのメモリ確保番号とした情報の前のメモリ確保番号(本来は0)に変数aの値を設定する。
(VI:次のメモリ確保番号nのメモリアドレスが探索変更アドレスB以上の場合)
(VI-1:上記空き容量Δaの方が同Δbより大きい場合)
メモリ確保情報テーブルレジスタ22Dのm番目のテーブルの次のメモリ確保番号(本来はn)に変数aの値を設定し、
メモリ確保情報テーブルレジスタ22Dのa番目のテーブルについて、
・アドレス=メモリ確保番号mのアドレス+メモリ確保番号mのサイズ
・サイズ =今回のメモリ確保サイズS
・前のメモリ確保番号=m
・次のメモリ確保番号=n
とし、さらにメモリ確保情報テーブルレジスタ22Dのn番目の前のメモリ確保番号(本来はm)に変数aの値を設定する。
(VI-2:上記空き容量Δbの方が同Δaより大きい場合)
メモリ確保情報テーブルレジスタ22Dのa番目のテーブルについて、
・アドレス=メモリ確保領域開始アドレスA
・サイズ =今回のメモリ確保サイズS
・前のメモリ確保番号=0
・次のメモリ確保番号=先頭メモリ確保番号レジスタ22Aの値
とし、さらにメモリ確保情報テーブルレジスタ22Dの番号を先頭メモリ確保番号レジスタ22Aのメモリ確保番号とした情報の前のメモリ確保番号(本来は0)に変数aの値を設定する。
(VI-3:上記以外の場合)
メモリ確保情報テーブルレジスタ22Dのm番目のテーブルの次のメモリ確保番号(本来はn)に変数aの値を設定し、
メモリ確保情報テーブルレジスタ22Dのa番目のテーブルについて、
・アドレス=メモリ確保番号mのアドレス+メモリ確保番号mのサイズ
・サイズ =今回のメモリ確保サイズS
・前のメモリ確保番号=m
・次のメモリ確保番号=n
とし、さらにメモリ確保情報テーブルレジスタ22Dのn番目の前のメモリ確保番号(本来はm)に変数aの値を設定する。
(VII:メモリ確保番号mのメモリアドレスが探索変更アドレスB以上の場合)
(VII-1:次のメモリ確保番号nが「0」(データがなく、メモリ番号mが最後尾)の場合)
メモリ確保情報テーブルレジスタ22Dのm番目のテーブルの次のメモリ確保番号(本来は0)に変数aの値を設定し、
メモリ確保情報テーブルレジスタ22Dのa番目のテーブルについて、
・アドレス=メモリ確保番号mのアドレス+メモリ確保番号mのサイズ
・サイズ =今回のメモリ確保サイズS
・前のメモリ確保番号=m
・次のメモリ確保番号=0
とする。
(VII-2:上記以外の場合)
メモリ確保情報テーブルレジスタ22Dのm番目のテーブルの次のメモリ確保番号(本来はn)に変数aの値を設定し、
メモリ確保情報テーブルレジスタ22Dのa番目のテーブルについて、
・アドレス=メモリ確保番号mのアドレス+メモリ確保番号mのサイズ
・サイズ =今回のメモリ確保サイズS
・前のメモリ確保番号=m
・次のメモリ確保番号=n
とし、さらにメモリ確保情報テーブルレジスタ22Dのn番目の前のメモリ確保番号(本来はm)に変数aの値を設定する。
また、CPU21は、メモリ確保番号aのアドレスと、探索方向変更アドレスB以降の先頭メモリ確保番号のアドレスとを比較し、メモリ確保番号aのアドレスの方が小さい場合で、かつ、メモリ確保番号aのアドレスと、探索方向変更アドレスBと比較し、メモリ確保番号aのアドレスが大きい場合には、探索方向変更アドレスB以降の先頭メモリ確保番号を変数aの値に書き換える。
上記ステップS515の処理後、CPU21は、メモリ確保が成功したものとして、前のメモリ確保情報レジスタ22Eの保持内容を書き換えると共に、メモリ確保番号に上記変数aの値を設定する(ステップS516)。
さらにCPU21は、このあらたに設定した変数aで示されるメモリ確保番号の前に位置するメモリ確保番号が「0」であるか否かを判断する(ステップS217)。
ここで変数aで示されるメモリ確保番号の前に位置するメモリ確保番号が「0」となると判断した場合にのみ、先頭メモリ確保番号レジスタ22Aに変数aの値を設定した上で(ステップS518)、今回確保したアドレスをCPU21に返して、実際のメモリ確保が実行される。
また上記ステップS514において、算出した空き容量Δが今回確保するメモリのサイズSよりも大きくないと判断した場合、その時点の次のメモリ確保番号を示す変数nの値が「0」であるか否かにより、次のメモリ確保番号でのメモリ領域を用いることが可能か否かを判断する(ステップS519)。
ここで変数nの値が「0」であると判断した場合、データがなく、メモリ確保番号m自体がメモリ確保領域22Gの最後尾であるため、CPU21はあらたな確保を行なうことができないと判断し、確保の失敗(エラー)として、この図18及び図19の処理を終了する。
また上記ステップS519で変数nの値が「0」ではないと判断した場合、次にCPU21は、探索番号の変数mに対応するメモリ確保領域のアドレスが探索方向変更アドレスBより小さく、且つ変数nで示される次のメモリ確保領域のアドレスが探索方向変更アドレスBより大きいか否かを判断する(ステップS520)。
ここで探索番号の変数mに対応するメモリ確保領域のアドレスが探索方向変更アドレスBより小さく、且つ変数nで示される次のメモリ確保領域のアドレスが探索方向変更アドレスBより大きいと判断した場合、CPU21は先頭メモリ確保番号レジスタ22Aの保持内容を探索番号の変数mの値としてあらためて設定する(ステップS521)。
また上記ステップS520で探索番号の変数mに対応するメモリ確保領域のアドレスが探索方向変更アドレスB以上であるか、または変数nで示される次のメモリ確保領域のアドレスが探索方向変更アドレスBより小さいと判断した場合、CPU21はその時点で次のメモリ確保番号として保持している変数nの値を探索番号の変数mの値としてあらためて設定する(ステップS522)。
上記ステップS521またはS522の処理後、CPU21は探索開始番号を示す変数Zの値が上記探索番号の変数mの値と等しいか否かを判断する(ステップS523)。
ここで変数Zの値が上記探索番号の変数mの値とが等しくないと判断した場合には、上記ステップS512からの処理に戻り、メモリ確保の探索番号の変数mに基づいて次の番号nの再設定処理を行なった上で、再度のメモリ確保に関する処理を続行する。
また上記ステップS523において変数Zの値が上記探索番号の変数mの値とが等しいと判断した場合、探索方向変更アドレスB以降の先頭メモリ確保番号情報レジスタ22Bを確認し、当該番号が「0」であるか否かを判断する(ステップS524)。
ここで探索方向変更アドレスB以降の先頭メモリ確保番号情報レジスタ22Bが「0」であった場合、あらたな確保を行なうことができず、確保の失敗(エラー)として、この図18及び図19の処理を終了する。
また上記ステップS524において、先頭メモリ確保番号情報レジスタ22Bが「0」ではなかった場合、CPU21は、現在の探索位置から先頭メモリ確保番号情報レジスタ22Bを上記探索番号の変数mに設定した上で(ステップS525)、上記ステップS512からの処理に戻り、メモリ確保の探索番号の変数mに基づいて次の番号nの再設定処理を行なった上で、再度のメモリ確保に関する処理を続行する。
次に上記図17のステップS402において、確保しようとするデータの領域サイズが予め設定された容量より大きいと判断した場合の処理について説明する。
図20は、大きいサイズ用のメモリ確保の処理内容を示すフローチャートである。その処理当初に、CPU21はメモリ確保情報テーブルレジスタ22Dで空いているものがあるか否かを判断する(ステップS601)。サイズが「0」となっているテーブルは、使用していないテーブルとして取扱う。
ここで空いているテーブルがないと判断した場合には、メモリ確保の数が多すぎてあらたな確保を行なうことができないため、確保の失敗(エラー)として、この図20の処理を終了する。
上記ステップS601でメモリ確保情報テーブルレジスタ22Dの内容から空いているものがある(サイズが「0」のテーブルがある)と判断した場合、CPU21は次いで空いているメモリ確保番号の中から、例えば最も小さい値「1」を変数aに設定する(ステップS602)。
次にCPU21は、最後尾メモリ確保情報レジスタ22Cの内容を確認し、その内容が「0」であるか否かを判断する(ステップS603)。ここで最後尾メモリ確保情報レジスタ22Cの内容が「0」であると判断した場合、メモリ確保が1つも残っていないものとして、探索番号を示す変数mを「1」、次の探索番号を示す変数nを「0」(有効データなし)、メモリ探察開始番号の変数Zを「1」として設定する(ステップS604)。
その後にCPU21は、メモリ確保領域22GのサイズWを空き容量Δとして、その空き容量Δが、今回確保しようとしているメモリサイズSより大きいか否かを判断する(ステップS605)。
ここで空き容量Δが今回確保しようとしているメモリサイズS以下であると判断した場合には、メモリ確保が困難であるため、確保の失敗(エラー)として、この図20の処理を終了する。
また上記ステップS605で空き容量Δが今回確保しようとしているメモリサイズSより大きいと判断した場合、CPU21はメモリ確保番号1(=a)の値、前のメモリ確保情報レジスタ22Eの値、先頭メモリ確保番号レジスタ22Aの値、最後尾メモリ確保情報レジスタ22Cの値、探索方向変更アドレス以降の先頭メモリ確保番号の値を以下のように書き換える(ステップS606)。すなわち
メモリ確保情報テーブルレジスタ22Dの1番目のテーブルについて、
・アドレス=メモリ確保領域開始アドレスA+メモリ確保領域のサイズW
−今回のメモリ確保サイズS
・サイズ =今回のメモリ確保サイズS
・前のメモリ確保番号=0
・次のメモリ確保番号=0
とすると共に、
前のメモリ確保番号=1
先頭メモリ確保番号=1
最後尾メモリ確保番号=1
探索方向変更アドレス以降の先頭メモリ確保番号=1
とした上で、今回確保したアドレスをCPU21に返して、実際のメモリ確保を実行する。
また上記ステップS603において、最後尾メモリ確保情報レジスタ22Cの内容が「0」ではないと判断した場合、少なくとも1つはメモリ確保がなされているものとして、CPU21はその時点で最後尾メモリ確保情報レジスタ22Cに保持されている値を読出して探索番号の値mに設定する(ステップS607)。
その上でCPU21は、探索するテーブルのメモリ確保情報番号をmとして、前のメモリ確保情報番号pまでの空き容量Δを、以下のようにして求める。すなわち、
(VIII:最後尾メモリ確保番号が「0」の(1つも確保していない)場合)
空き容量Δ=メモリ確保領域のサイズWとする。
(IX:探索するメモリ確保番号mが最後尾メモリ確保番号の(1回目の探索である)場合)
(IX-1:前のメモリ確保情報pが「0」ではない場合)
空き容量Δa=メモリ確保領域開始アドレスA+メモリ確保領域のサイズW
−メモリ確保番号mのアドレス−メモリ確保番号mのサイズ
Δb=メモリ確保番号mのアドレス−メモリ確保番号pのアドレス
−メモリ確保番号pのサイズ
としてΔaとΔbの大きい方を空き容量Δとする。
(IX-2:前のメモリ確保情報pが「0」の場合)
空き容量Δa=メモリ確保領域開始アドレスA+メモリ確保領域のサイズW
−メモリ確保番号mのアドレス−メモリ確保番号mのサイズ
Δb=メモリ確保番号mのアドレス−メモリ確保領域開始アドレスA
としてΔaとΔbの大きい方を空き容量Δとする。
(X:上記VIII〜IX以外で、前のメモリ確保番号pが「0」の場合)
空き容量Δ=メモリ確保番号mのアドレス−メモリ確保領域開始アドレスA
とする。
(XI:上記VIII〜X以外の場合)
空き容量Δ=メモリ確保番号mのアドレス−メモリ確保番号pのアドレス
−メモリ確保番号pのサイズ
とする。
上記のようにして求めた空き容量Δを用い、CPU21は空き容量Δが今回のメモリ確保サイズSより大きいか否か、すなわちメモリ確保が可能か否かを判断する(ステップS610)。
ここで空き容量Δが今回のメモリ確保サイズSより大きく、メモリ確保が可能であると判断した場合、CPU21は今回のメモリ確保サイズSのメモリ確保を実行するために、上記ステップS602で設定したメモリ確保番号a、メモリ確保番号m、メモリ確保番号pの各変数を以下のように書き換える(ステップS611)。すなわち、
(XII:最後尾メモリ確保番号が「0」の(1つも確保していない)場合)
メモリ確保情報テーブルレジスタ22Dのa番目のテーブルについて、
・アドレス=メモリ確保領域開始アドレスA+メモリ確保領域のサイズW
・ −今回のメモリ確保サイズS
・サイズ =今回のメモリ確保サイズS
・前のメモリ確保番号=0
・次のメモリ確保番号=0
とする。
(XIII:探索するメモリ確保番号mが最後尾メモリ確保番号である場合)
(XIII-1:メモリ確保番号pが「0」ではない場合)
(XIII-1-1:上記IX-1で空き容量Δaの方が空き容量Δbよりも大きい場合)
メモリ確保情報テーブルレジスタ22Dのm番目のテーブルの次のメモリ確保番号(本来は0)に変数aの値を設定し、
メモリ確保情報テーブルレジスタ22Dのa番目のテーブルについて、
・アドレス=メモリ確保領域開始アドレスA+メモリ確保領域のサイズW
−今回のメモリ確保サイズS
・サイズ =今回のメモリ確保サイズS
・前のメモリ確保番号=m
・次のメモリ確保番号=0
とする。
(XIII-1-2:上記IX-1で空き容量Δbの方が空き容量Δaよりも大きい場合)
メモリ確保情報テーブルレジスタ22Dのp番目のテーブルの次のメモリ確保番号(本来はm)に変数aの値を設定し、
メモリ確保情報テーブルレジスタ22Dのa番目のテーブルについて、
・アドレス=メモリ確保番号mのアドレス−今回のメモリ確保サイズS
・サイズ =今回のメモリ確保サイズS
・前のメモリ確保番号=p
・次のメモリ確保番号=m
とし、さらにメモリ確保情報テーブルレジスタ22Dのm番目の前のメモリ確保番号(本来はp)に変数aの値を設定する。
(XIII-2:前のメモリ確保番号pが「0」の場合)
(XIII-2-1:上記IX-1で空き容量Δaの方が空き容量Δbよりも大きい場合)
メモリ確保情報テーブルレジスタ22Dのm番目のテーブルの次のメモリ確保番号(本来は0)に変数aの値を設定し、
メモリ確保情報テーブルレジスタ22Dのa番目のテーブルについて、
・アドレス=メモリ確保領域開始アドレスA+メモリ確保領域のサイズW
−今回のメモリ確保サイズS
・サイズ =今回のメモリ確保サイズS
・前のメモリ確保番号=m
・次のメモリ確保番号=0
とする。
(XIII-2-2:上記IX-1で空き容量Δbの方が空き容量Δaよりも大きい場合)
メモリ確保情報テーブルレジスタ22Dのa番目のテーブルについて、
・アドレス=メモリ確保番号mのアドレス−今回のメモリ確保サイズS
・サイズ =今回のメモリ確保サイズS
・前のメモリ確保番号=0
・次のメモリ確保番号=m
とし、メモリ確保情報テーブルレジスタ22Dのm番目の前のメモリ確保番号(本来は0)に変数aの値を設定する。
(XIV:前のメモリ確保番号pが「0」の場合)
メモリ確保情報テーブルレジスタ22Dのa番目のテーブルについて、
・アドレス=メモリ確保番号mのアドレス−今回のメモリ確保サイズS
・サイズ =今回のメモリ確保サイズS
・前のメモリ確保番号=0
・次のメモリ確保番号=m
とし、メモリ確保情報テーブルレジスタ22Dのm番目の前のメモリ確保番号(本来は0)に変数aの値を設定する。
(XV:上記以外の場合)
空き容量Δ=メモリ確保番号mのアドレス−メモリ確保番号pのアドレス
−メモリ確保番号pのサイズ
とし、メモリ確保情報テーブルレジスタ22Dのp番目のテーブルの次のメモリ確保番号(本来はm)に変数aの値を設定し、
メモリ確保情報テーブルレジスタ22Dのa番目のテーブルについて、
・アドレス=メモリ確保番号mのアドレス−今回のメモリ確保サイズS
・サイズ =今回のメモリ確保サイズS
・前のメモリ確保番号=p
・次のメモリ確保番号=m
とし、さらにメモリ確保情報テーブルレジスタ22Dのm番目の前のメモリ確保番号(本来はp)に変数aの値を設定する。
上記ステップS611での処理により、メモリ確保領域の物理的な確保順序は、それ以前の
「メモリ確保番号p→メモリ確保番号m」から、
「メモリ確保番号p→メモリ確保番号a→メモリ確保番号m」となる。
その後、上記ステップS606の処理に進んで、CPU21はメモリ確保番号1(=a)の値、前のメモリ確保情報レジスタ22Eの値、先頭メモリ確保番号レジスタ22Aの値、最後尾メモリ確保情報レジスタ22Cの値、探索方向変更アドレス以降の先頭メモリ確保番号の値を書き換え、今回確保したアドレスをCPU21に返して、実際のメモリ確保を実行する。
また上記ステップS610において、空き容量Δが今回のメモリ確保サイズS以下であり、メモリ確保ができないと判断した場合、CPU21は次いでその時点で前のメモリ確保情報番号pが「0」であるか否かを判断する(ステップS612)。
ここで前のメモリ確保情報番号pが「0」であった場合、それ以上の確保を行なうことができないため、確保の失敗(エラー)として、この図20の処理を終了する。
また上記ステップS612において前のメモリ確保情報番号pが「0」ではないと判断した場合、CPU21はその探索する前のメモリ確保情報番号pを用い、テーブルの探索番号mを前側に移動するよう設定した上で(ステップS613)、再び上記ステップS608からの処理を繰返し実行する。
上述した如く、確保しようとするデータの領域サイズが予め設定された容量より大きいと判断した場合には、常にメモリ確保領域22Gの最後尾から検索することで、小さい容量で確保されたメモリ領域から離れたアドレス位置から探索できるため、迅速にメモリ確保できる可能性を高めることができる。
なお上記動作では示さなかったが、別途さらにサイズが大きい場合用の第2の「前のメモリ確保情報」を設定してその内容を利用することも考えられる。
次に上記図17のステップS401において、メモリ22のメモリ確保領域22Gに対する解放の要求があると判断した場合、CPU21は図21に処理を実行する。
図21においては、処理当初にメモリ確保情報テーブルレジスタ22Dでメモリアドレスを検索し、与えられたメモリ解放アドレスに該当するメモリ確保番号rを取得する(ステップS701)。
次にCPU21は、上記ステップS701で得たメモリ確保番号rにより、メモリ確保情報テーブルレジスタ22Dのr番目のテーブルのアドレスが、探索方向変更アドレスBより小さいか否かを判断する(ステップS702)。
ここでr番目のテーブルのアドレスが、探索方向変更アドレスBより小さく、メモリ確保領域開始アドレスAと探索方向変更アドレスBで規定される範囲内にあると判断した場合、次にCPU21は前のメモリ解放情報レジスタ22Fに保持される、前に解放したメモリ領域のサイズ(最大の空き容量)より、今回のr番目のテーブルで保持するサイズの方が大きいか否かを判断する(ステップS703)。
このときに今回解放しようとしているメモリ確保番号rの領域のサイズの方が大きいと判断した場合にのみ、CPU21はメモリ確保番号rの領域のサイズを用いて前のメモリ解放情報レジスタ22Fの最大の空き容量を書き換える(ステップS704)。
次に、前のメモリ解放情報レジスタ22Dのメモリ確保番号が「0」であるか否かを判断する(ステップS705a)。
前のメモリ解放情報レジスタ22Dのメモリ確保番号が「0」ではなかった場合、その後にCPU21は、前のメモリ解放情報レジスタ22Dのメモリ確保番号に該当するアドレス値より、メモリ確保番号rのアドレス値の方が小さいか否かを判断する(ステップS705b)。
また上記ステップS705aにおいて、前のメモリ解放情報レジスタ22Dのメモリ確保番号が「0」であった場合、CPU21は上記ステップS705bの処理をスキップして、ステップS706へ飛ぶ。
前のメモリ解放情報レジスタ22Fのメモリ確保番号に該当するアドレス値より、メモリ確保番号rのアドレス値の方が小さいと判断した場合、CPU21はさらにメモリ確保番号rの前のメモリ確保番号が「0」であるか否かを判断する(ステップS706)。
メモリ確保番号rの前のメモリ確保番号が「0」ではなかった場合、CPU21はメモリ確保番号rの前のメモリ確保番号を用いて、前のメモリ解放情報レジスタ22Fのメモリ確保番号を書き換える(ステップS710)。
また上記ステップS706において、メモリ確保番号rの前のメモリ確保番号が「0」であった場合、次にCPU21はメモリ確保番号rの次のメモリ確保番号が「0」であるか否かを判断する(ステップS707)。
メモリ確保番号rの次のメモリ確保番号が「0」ではなかった場合、CPU21は次のメモリ解放情報のメモリ確保番号を用いて、前のメモリ解放情報レジスタ22Fのメモリ確保番号を書き換える(ステップS709)。
また上記ステップS707において、メモリ確保番号rの次のメモリ確保番号が「0」であった場合、CPU21はメモリ確保されている残りがないものとして、前のメモリ解放情報レジスタ22Fに関する内容をすべてクリアする(ステップS708)。
上記ステップS702でr番目のテーブルのアドレスが探索方向変更アドレスB以上であり、メモリ確保領域開始アドレスAと探索方向変更アドレスBで規定される範囲外にr番目のメモリ確保領域があると判断した場合、上記ステップS705で前のメモリ解放情報レジスタ22Fのメモリ確保番号のアドレス値がメモリ確保番号rのアドレス値以上であると判断した場合、または上記ステップS710またはステップS709またはステップS708での処理実行後、CPU21はメモリ確保番号rの前のメモリ確保番号をt、次のメモリ確保番号をuとすると、以下のように書き換えて、メモリ確保情報テーブルレジスタ22Dからメモリ確保番号rのデータを削除する(ステップS711)。すなわち、
・メモリ確保番号rの前のメモリ確保番号をt、次のメモリ確保番号をuとして、
・メモリ確保番号rのテーブルのクリア
・メモリ確保番号tの次のメモリ確保番号=u
・メモリ確保番号uの前のメモリ確保番号=t
の各処理を一括して実行し、今回のメモリ確保領域22Gのメモリ確保番号rに該当するメモリ確保領域の解放が実行される。
したがって、図16に示した如く、確保しようとしている領域のサイズが予め設定した値より小さい場合には、メモリ確保領域開始アドレスAと探索方向変更アドレスBとで規定される範囲を優先し、その前に解放したメモリ領域の情報を参照して、例えば図中に矢印S11で示すように探索開始位置のアドレスから探索方向変更アドレスBに向けて探索し、適切な解放領域がない場合には、さらに矢印S12で示すようにメモリ確保領域開始アドレスAから上記最初の探索開始位置のアドレスまでを探索する。そして、それでもまだ適切な解放領域がない場合には、矢印S13で示すように探索方向変更アドレスBからメモリ確保領域のサイズWの最後尾アドレスに向けて探索を行なうものとなる。
一方で、確保しようとしている領域のサイズが予め設定した値より大きい場合には、図中に矢印S21で示すように、上記メモリ確保領域開始アドレスAと探索方向変更アドレスBとで規定される範囲とは反対側にある、メモリ確保領域のサイズWの最後尾側のアドレスから順次探索を行なう。そのため、大きな確保領域が必要である場合でも確実、且つ軸即に確保を行なう領域の情報を取得することができる。
以上詳述した如く本実施形態によれば、メモリ確保領域22Gをメモリ確保領域開始アドレスAから探索方向変更アドレスBまでの領域とそれ以降の領域とに区分設定した上で、確保しようとしているサイズが予め設定したサイズより小さい場合には、上記第1の実施形態と同様に、上記メモリ確保領域開始アドレスAと探索方向変更アドレスBで規定される領域の範囲を優先して、直前に確保または解放したメモリ確保領域の位置を参照し、次に確保する位置を探索するよう制御する。
一方で、確保しようとしているサイズが予め設定したサイズより大きい場合には、メモリ確保領域22Gの上記メモリ確保領域開始アドレスAと探索方向変更アドレスBで規定される領域の範囲とは反対側にある、最後尾側から確保する位置を探索するよう制御するようにしたので、限られたメモリ空間を効率的に活用しつつ、確保するデータのサイズに適応してよりさらに高速なアクセスを実現することが可能となる。
その他、本発明は上述した実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。また、上述した実施形態で実行される機能は可能な限り適宜組み合わせて実施しても良い。上述した実施形態には種々の段階が含まれており、開示される複数の構成要件による適宜の組み合せにより種々の発明が抽出され得る。例えば、実施形態に示される全構成要件からいくつかの構成要件が削除されても、効果が得られるのであれば、この構成要件が削除された構成が発明として抽出され得る。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
請求項1記載の発明は、データを確保するための領域を有するメモリと、上記メモリに確保されたデータに関するアクセス単位の情報をテーブル化して保持する情報テーブル保持手段と、上記メモリで直前に確保したデータの情報を保持する前確保情報保持手段と、上記メモリで直前に解放したデータの情報を保持する前解放情報保持手段と、上記情報テーブル保持手段の保持するテーブルを参照し、上記前確保情報保持手段及び上記前解放情報保持手段の各保持内容に基づいて、次に上記メモリにデータを確保する領域を探索するメモリ制御手段とを具備したことを特徴とする。
請求項2記載の発明は、上記請求項1記載の発明において、上記メモリ制御手段は、確保しようとする領域が予め設定したサイズより大きいか否かを判断し、予め設定したサイズより大きくないと判断した場合には、上記メモリの一方の端部から所定の範囲内を優先し、上記前確保情報保持手段及び上記前解放情報保持手段の各保持内容に基づいて次にデータを確保する領域を探索し、予め設定したサイズより大きいと判断した場合には、上記メモリの他方の端部から次にデータを確保する領域を探索することを特徴とする。
請求項3記載の発明は、上記請求項1または2記載の発明において、上記情報テーブル保持手段は、上記メモリ内においてデータを確保した領域の先頭アドレスと、確保したデータのサイズと、当該確保したデータの前に確保した情報テーブルの番号と、当該確保したデータの次に確保した情報テーブルの番号とを保持することを特徴とする。
請求項4記載の発明は、上記請求項1または2記載の発明において、上記前確保情報保持手段は、上記メモリで直前に確保したデータの情報をテーブル化して保持する上記情報テーブル保持手段のテーブル番号を保持することを特徴とする。
請求項5記載の発明は、上記請求項1または2記載の発明において、上記前解放情報保持手段は、上記メモリで直前に解放したデータの情報をテーブル化して保持していた上記情報テーブル保持手段のテーブル番号の前に確保した情報テーブルの番号、または次に確保した情報テーブルの番号のいずれか一方と、解放したデータの最大サイズとを保持することを特徴とする。
請求項6記載の発明は、データを確保するための領域を有するメモリを備えた装置でのメモリ制御方法であって、上記メモリに確保されたデータに関するアクセス単位の情報をテーブル化して保持させる情報テーブル保持工程と、上記メモリで直前に確保したデータの情報を保持させる前確保情報保持工程と、上記メモリで直前に解放したデータの情報を保持させる前解放情報保持工程と、上記情報テーブル保持工程で保持したテーブルを参照し、上記前確保情報保持工程及び上記前解放情報保持工程での各保持内容に基づいて、次に上記メモリにデータを確保する領域を探索するメモリ制御工程とを有したことを特徴とする。
請求項7記載の発明は、上記請求項6記載の発明において、上記メモリ制御工程は、確保しようとする領域が予め設定したサイズより大きいか否かを判断し、予め設定したサイズより大きくないと判断した場合には、上記メモリの一方の端部から所定の範囲内を優先し、上記前確保情報保持工程及び上記前解放情報保持工程での各保持内容に基づいて次にデータを確保する領域を探索し、予め設定したサイズより大きいと判断した場合には、上記メモリの他方の端部から次にデータを確保する領域を探索することを特徴とする。
請求項8記載の発明は、データを確保するための領域を有するメモリを備えた装置が内蔵したコンピュータが実行するプログラムであって、上記コンピュータを、上記メモリに確保されたデータに関するアクセス単位の情報をテーブル化して保持する情報テーブル保持手段、上記メモリで直前に確保したデータの情報を保持する前確保情報保持手段、上記メモリで直前に解放したデータの情報を保持する前解放情報保持手段、及び上記情報テーブル保持手段の保持するテーブルを参照し、上記前確保情報保持手段及び上記前解放情報保持手段の各保持内容に基づいて、次に上記メモリにデータを確保する領域を探索するメモリ制御手段として機能させることを特徴とする。
請求項9記載の発明は、上記請求項8記載の発明において、上記メモリ制御手段は、確保しようとする領域が予め設定したサイズより大きいか否かを判断し、予め設定したサイズより大きくないと判断した場合には、上記メモリの一方の端部から所定の範囲内を優先し、上記前確保情報保持手段及び上記前解放情報保持手段の各保持内容に基づいて次にデータを確保する領域を探索し、予め設定したサイズより大きいと判断した場合には、上記メモリの他方の端部から次にデータを確保する領域を探索することを特徴とする。
11…CPU、12…メモリ、12A…先頭メモリ確保番号レジスタ、12B…メモリ確保情報テーブルレジスタ、12C…前のメモリ確保情報レジスタ、12D…前のメモリ解放情報レジスタ、12E…メモリ確保領域、21…CPU、22…メモリ、22A…先頭メモリ確保番号レジスタ、22B…第2先頭メモリ確保番号レジスタ、22C…最後尾メモリ確保情報レジスタ、22D…メモリ確保情報テーブルレジスタ、22E…前のメモリ確保情報レジスタ、22F…前のメモリ解放情報レジスタ、22G…メモリ確保領域。

Claims (9)

  1. データを確保するための領域を有するメモリと、
    上記メモリに確保されたデータに関するアクセス単位の情報をテーブル化して保持する情報テーブル保持手段と、
    上記メモリで直前に確保したデータの情報を保持する前確保情報保持手段と、
    上記メモリで直前に解放したデータの情報を保持する前解放情報保持手段と、
    上記情報テーブル保持手段の保持するテーブルを参照し、上記前確保情報保持手段及び上記前解放情報保持手段の各保持内容に基づいて、次に上記メモリにデータを確保する領域を探索するメモリ制御手段と
    を具備したことを特徴とするメモリ制御装置。
  2. 上記メモリ制御手段は、確保しようとする領域が予め設定したサイズより大きいか否かを判断し、予め設定したサイズより大きくないと判断した場合には、上記メモリの一方の端部から所定の範囲内を優先し、上記前確保情報保持手段及び上記前解放情報保持手段の各保持内容に基づいて次にデータを確保する領域を探索し、予め設定したサイズより大きいと判断した場合には、上記メモリの他方の端部から次にデータを確保する領域を探索することを特徴とする請求項1記載のメモリ制御装置。
  3. 上記情報テーブル保持手段は、上記メモリ内においてデータを確保した領域の先頭アドレスと、確保したデータのサイズと、当該確保したデータの前に確保した情報テーブルの番号と、当該確保したデータの次に確保した情報テーブルの番号とを保持することを特徴とする請求項1または2記載のメモリ制御装置。
  4. 上記前確保情報保持手段は、上記メモリで直前に確保したデータの情報をテーブル化して保持する上記情報テーブル保持手段のテーブル番号を保持することを特徴とする請求項1または2記載のメモリ制御装置。
  5. 上記前解放情報保持手段は、上記メモリで直前に解放したデータの情報をテーブル化して保持していた上記情報テーブル保持手段のテーブル番号の前に確保した情報テーブルの番号、または次に確保した情報テーブルの番号のいずれか一方と、解放したデータの最大サイズとを保持することを特徴とする請求項1または2記載のメモリ制御装置。
  6. データを確保するための領域を有するメモリを備えた装置でのメモリ制御方法であって、
    上記メモリに確保されたデータに関するアクセス単位の情報をテーブル化して保持させる情報テーブル保持工程と、
    上記メモリで直前に確保したデータの情報を保持させる前確保情報保持工程と、
    上記メモリで直前に解放したデータの情報を保持させる前解放情報保持工程と、
    上記情報テーブル保持工程で保持したテーブルを参照し、上記前確保情報保持工程及び上記前解放情報保持工程での各保持内容に基づいて、次に上記メモリにデータを確保する領域を探索するメモリ制御工程と
    を有したことを特徴とするメモリ制御方法。
  7. 上記メモリ制御工程は、確保しようとする領域が予め設定したサイズより大きいか否かを判断し、予め設定したサイズより大きくないと判断した場合には、上記メモリの一方の端部から所定の範囲内を優先し、上記前確保情報保持工程及び上記前解放情報保持工程での各保持内容に基づいて次にデータを確保する領域を探索し、予め設定したサイズより大きいと判断した場合には、上記メモリの他方の端部から次にデータを確保する領域を探索することを特徴とする請求項6記載のメモリ制御方法。
  8. データを確保するための領域を有するメモリを備えた装置が内蔵したコンピュータが実行するプログラムであって、
    上記コンピュータを、
    上記メモリに確保されたデータに関するアクセス単位の情報をテーブル化して保持する情報テーブル保持手段、
    上記メモリで直前に確保したデータの情報を保持する前確保情報保持手段、
    上記メモリで直前に解放したデータの情報を保持する前解放情報保持手段、及び
    上記情報テーブル保持手段の保持するテーブルを参照し、上記前確保情報保持手段及び上記前解放情報保持手段の各保持内容に基づいて、次に上記メモリにデータを確保する領域を探索するメモリ制御手段
    として機能させることを特徴とするプログラム。
  9. 上記メモリ制御手段は、確保しようとする領域が予め設定したサイズより大きいか否かを判断し、予め設定したサイズより大きくないと判断した場合には、上記メモリの一方の端部から所定の範囲内を優先し、上記前確保情報保持手段及び上記前解放情報保持手段の各保持内容に基づいて次にデータを確保する領域を探索し、予め設定したサイズより大きいと判断した場合には、上記メモリの他方の端部から次にデータを確保する領域を探索することを特徴とする請求項8記載のプログラム。
JP2013121897A 2013-06-10 2013-06-10 メモリ制御装置、メモリ制御方法及びプログラム Expired - Fee Related JP6155867B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2013121897A JP6155867B2 (ja) 2013-06-10 2013-06-10 メモリ制御装置、メモリ制御方法及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013121897A JP6155867B2 (ja) 2013-06-10 2013-06-10 メモリ制御装置、メモリ制御方法及びプログラム

Publications (3)

Publication Number Publication Date
JP2014238767A true JP2014238767A (ja) 2014-12-18
JP2014238767A5 JP2014238767A5 (ja) 2016-05-26
JP6155867B2 JP6155867B2 (ja) 2017-07-05

Family

ID=52135864

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013121897A Expired - Fee Related JP6155867B2 (ja) 2013-06-10 2013-06-10 メモリ制御装置、メモリ制御方法及びプログラム

Country Status (1)

Country Link
JP (1) JP6155867B2 (ja)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05158784A (ja) * 1991-12-03 1993-06-25 Fujitsu Ltd メモリの獲得・解放方法
JPH0991195A (ja) * 1995-09-25 1997-04-04 Kawasaki Steel Corp ブロックメモリ管理装置
JP2000163309A (ja) * 1998-11-24 2000-06-16 Nec Corp メモリ管理方法およびメモリ管理装置、並びに記録媒体
JP2000311110A (ja) * 1999-04-28 2000-11-07 Nec Corp メモリ管理装置
JP2005157714A (ja) * 2003-11-26 2005-06-16 Kyocera Mita Corp メモリ管理システム

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05158784A (ja) * 1991-12-03 1993-06-25 Fujitsu Ltd メモリの獲得・解放方法
JPH0991195A (ja) * 1995-09-25 1997-04-04 Kawasaki Steel Corp ブロックメモリ管理装置
JP2000163309A (ja) * 1998-11-24 2000-06-16 Nec Corp メモリ管理方法およびメモリ管理装置、並びに記録媒体
JP2000311110A (ja) * 1999-04-28 2000-11-07 Nec Corp メモリ管理装置
JP2005157714A (ja) * 2003-11-26 2005-06-16 Kyocera Mita Corp メモリ管理システム

Also Published As

Publication number Publication date
JP6155867B2 (ja) 2017-07-05

Similar Documents

Publication Publication Date Title
US10353586B2 (en) Memory device and host device
US20140181378A1 (en) Control device, control method, and program
JP4758794B2 (ja) メモリ領域割り当て制御装置、メモリ領域割り当て制御プログラム、及びメモリ領域割り当て制御方法
CN109189323B (zh) 扩容方法及设备
JP2006277737A (ja) アドレス予測機能をもつ不揮発性記憶装置
CN109447253B (zh) 显存分配的方法、装置、计算设备及计算机存储介质
CN108196870A (zh) 升级方法及装置
CN109508235B (zh) 一种内存池管理方法、装置及计算机可读存储介质
JP2006294023A (ja) ファイルシステム管理装置及び方法
US20120011166A1 (en) Skip list generation
JP5849794B2 (ja) ストレージ制御装置、ストレージ制御方法、及びストレージ制御プログラム
JP6155867B2 (ja) メモリ制御装置、メモリ制御方法及びプログラム
CN106293498B (zh) 一种数据拷贝的方法及设备
US11782637B2 (en) Prefetching metadata in a storage system
US20160139959A1 (en) Information processing system, method and medium
US20120136871A1 (en) Skip list generation
US20190155657A1 (en) Resource assignment method using cda protocol in distributed processing environment and distributed processing device applying the same
US7441093B2 (en) Segmentation management using a rolling window technique
JP2006079463A (ja) 時系列データ記録用バッファ管理方法、装置、システムおよびプログラム
WO2014203315A1 (ja) 情報処理装置、制御回路、制御プログラム、及び制御方法
CN111913812B (zh) 一种数据处理方法、装置、设备及存储介质
CN114996014A (zh) 基于ion分配器的内存分配方法、装置和电子设备
CN110659312B (zh) 数据处理的方法、装置、设备和计算机存储介质
JP4410271B2 (ja) メモリ制御装置
EP2085886A1 (en) Memory management device applied to shared-memory multiprocessor

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160404

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160404

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170118

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170131

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170303

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170509

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170522

R150 Certificate of patent or registration of utility model

Ref document number: 6155867

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees