(57)【特許請求の範囲】
【請求項１】
一つの連続したメモリ空間において２つのメモリ管理を行うことができるメモリ管理方法において、
アプリケーションプログラムに対して割り当て済みの領域が他の領域の新規割り当てあるいは他の領域のサイズ変更に伴い再配置されることがなく、かつメモリ空間は予め定めたサイズの単位ブロックを単位として管理されると共に、アプリケーションプログラムに対して割り当てる領域のサイズは前記単位ブロックの整数倍に設定された静的なメモリ管理を行う第１のメモリ管理方式と、
アプリケーションプログラムに対して割り当て済みの領域が他の領域の新規割り当てあるいは他の領域のサイズ変更に伴い移動再配置されることがある動的なメモリ管理を行う第２のメモリ管理方式とを備え、
前記第１のメモリ管理方式は、前記メモリ空間の一端から前記単位ブロックを単位として割り当て領域を配置し、前記第２のメモリ管理方式は、前記メモリ空間の他端から割り当て領域を配置し、
前記第１のメモリ管理方式は、新規割り当てあるいはサイズ変更を実行するために必要な空きブロックが無かった場合には前記第２のメモリ管理方式に対して領域の整頓の要求を出し、前記第２のメモリ管理方式は、前記第１のメモリ管理方式からの領域の整頓の要求に応じて割り当て済みの領域を前記他端側に詰めるように移動配置することを特徴とするメモリ管理方法。
【請求項２】
一つの連続したメモリ空間において２つのメモリ管理を行うことができるメモリ管理装置において、
アプリケーションプログラムに対して割り当て済みの領域が他の領域の新規割り当てあるいは他の領域のサイズ変更に伴い再配置されることがなく、かつメモリ空間は予め定めたサイズの単位ブロックを単位として管理されると共に、アプリケーションプログラムに対して割り当てる領域のサイズは前記単位ブロックの整数倍に設定された静的なメモリ管理を行う第１のメモリ管理手段と、
アプリケーションプログラムに対して割り当て済みの領域が他の領域の新規割り当てあるいは他の領域のサイズ変更に伴い移動再配置されることがある動的なメモリ管理を行う第２のメモリ管理手段とを備え、
前記第１のメモリ管理手段は、前記メモリ空間の一端から前記単位ブロックを単位として割り当て領域を配置し、前記第２のメモリ管理手段は、前記メモリ空間の他端から割り当て領域を配置し、
前記第１のメモリ管理手段は、新規割り当てあるいはサイズ変更を実行するために必要な空きブロックが無かった場合には前記第２のメモリ管理手段に対して領域の整頓の要求を出し、前記第２のメモリ管理手段は、前記第１のメモリ管理手段からの領域の整頓の要求に応じて割り当て済みの領域を前記他端側に詰めるように移動配置することを特徴とするメモリ管理装置。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、パーソナルコンピュータ、プリンタ等の情報処理機器に搭載されたメモリを管理するメモリ管理方法及び装置に関するものである。
【０００２】
【従来の技術】
従来、パーソナルコンピュータ、プリンタ等の情報処理機器におけるメモリ管理は、基本的にアプリケーションプログラムから要求されたプログラムサイズに相当するメモリ領域の割り当て、割り当て済みの領域のサイズ変更、及び割り当て済み領域の解放といった処理を、保有するメモリ空間において行っている。
【０００３】
従来のメモリ管理方法について図１１（ａ）〜（ｉ）を参照して説明する。ここでは、割り当て済み領域がメモリ空間中を移動することが可能なメモリ管理方法（以下、動的メモリ管理方法、また、その割り当てられた領域を動的な属性を持つ領域という）について説明する。アプリケーションプログラムに割り当てられるＲＡＭ等のメモリの連続したメモリ領域１００において、図１１（ａ）に示すように、下位アドレスから上位アドレスに向かう順に既に領域D1，D2，D3，D4（それぞれのサイズをSD1 ，SD2 ，SD3 ，SD4 とする）が割り当て済みで、領域F1，F2，F3，F4，F5（それぞれのサイズをSF1 ，SF2 ，SF3 ，SF4 ，SF5 とする）が空いているとする。いま、アプリケーションプログラムよりサイズSD5 の領域割り当て要求があった場合、サイズSD5 と、空き領域F1〜F5のそれぞれのサイズ（SF1 〜SF5 ）とを比較する。その結果、領域F4のサイズSF4 がサイズSD5 の領域の確保に十分ならば、図１１（ｂ）に示すように、領域F4にサイズSD5 のプログラムを割り当て、この領域をD5とし、領域F4の余った空き領域をF6（サイズSF6=SF4-SD5 ）とする。
【０００４】
しかし、割り当てようとする領域のサイズSD5 と、空き領域F1からF4のそれぞれの大きさを比較し、十分な領域が見つからなかった場合、既に割り当て済みの領域D1〜D4を、下位アドレス側に移動することにより、図１１（ｃ）に示すように、新たな空き領域F7（サイズSF7=SF1+SF2+SF3+SF4+SF5 ）を作り出し、空き領域F7にサイズSD5 の領域を割り当て、図１１（ｄ）に示すように、ここをD5とし、D5を割り当ることにより余った空き領域をF8（サイズSF8=SF7-SD5 ） とする。
【０００５】
また、図１１（ａ）の状態で割り当て済みの領域D2のサイズをSD2 からSD2Lに拡大する場合、例えば、SD2L＞SD2+SF3 かつSD2L≦SD2+SF3+SF4 ならば、図１１（ｅ）に示すように、領域D3を上位アドレス方向、つまり領域D4側へ移動することにより空き領域F9を作り出し、図１１（ｆ）に示すように、領域D2を拡大することによりサイズSD2Lの領域を新たに割り当てる。さらに、図１１（ａ）に示す状態で、SD2L＞SD2+SF1+SF2+SF3+SF4 かつSD2L＞SD2+SF1+SF2+SF3+SF4+SF5 のような場合では、まず、図１１（ｇ）に示すように、領域D1，D2を下位アドレス方向に移動し、領域D3，D4を上位アドレス方向に移動することにより、連続した空き領域F11 を作り出し、図１１（ｈ）に示すように、領域D2を拡大したD2L を新たに割り当て、D2L を割り当てることにより余った空き領域をF12 とする。また、図１１（ａ）の状態で領域D2を解放した場合、図１１（ｉ）に示すように新たな連続の空き領域F13 （サイズSF13=SF2+SD2+SF3）が作り出される。
【０００６】
【発明が解決しようとする課題】
しかしながら、上記のような従来のメモリ管理方法においては、総ての領域がアプリケーションプログラムに対し移動可能な動的な属性で割り当てられている場合、メモリの空き領域の合計が０になるまで、新たな領域の割り当て、領域サイズの変更等が可能であったが、プログラムにおける処理の効率化から割り当て済みの領域がメモリ空間中を移動不可な静的な属性で領域を割り当てることがある。例えば、図１１（ａ）に示すように、既に領域D1，D2，D3，D4にそれぞれプログラムが割り当て済みで、領域F1，F2，F3，F4，F5が空いている。領域D3が移動不可な静的属性で領域を割り当てられているとする。このとき、前出のようなD2のサイズをSD2 からSD2Lに大きくする要求がなされた場合、SD2L＞SD2+SF1+SF2+SF3+SF4+SF5 にも関わらず、領域D3が移動不可なために図１１（ｇ）に示したような空き領域F11 が作り出せない。そのためにD2のサイズの拡大は不可能である。つまり、移動不可な静的属性を持つ領域がメモリ空間の中央付近に存在すると、空き領域が十分存在するにも関わらずメモリの新規割り当て、割り当てサイズの変更が不可能な場合が発生する。また、上述のような不都合から、割り当てられたプログラムの移動の頻度が増えたり、記憶されたプログラムが細分化されてメモリ空間の空き領域を効率よく使用できないといった問題が生じていた。
【０００７】
本発明は、上述した問題点を解決するためになされたものであり、一つの連続したメモリ空間において、領域の静的又は動的の割り当て属性の違いよってメモリ空間への割り当て領域を分離することにより、メモリの使用効率を高め、メモリ空き領域の新たな領域の割り当てや割り当て済み領域のサイズの変更を効率よく行うことが可能なメモリ管理方法及び装置を提供することを目的とする。
【０００８】
【課題を解決するための手段】
上記目的を達成するために請求項１の発明のメモリ管理方法は、一つの連続したメモリ空間において２つのメモリ管理を行うことができるメモリ管理方法において、アプリケーションプログラムに対して割り当て済みの領域が他の領域の新規割り当てあるいは他の領域のサイズ変更に伴い再配置されることがなく、かつメモリ空間は予め定めたサイズの単位ブロックを単位として管理されると共に、アプリケーションプログラムに対して割り当てる領域のサイズは前記単位ブロックの整数倍に設定された静的なメモリ管理を行う第１のメモリ管理方式と、アプリケーションプログラムに対して割り当て済みの領域が他の領域の新規割り当てあるいは他の領域のサイズ変更に伴い移動再配置されることがある動的なメモリ管理を行う第２のメモリ管理方式とを備え、前記第１のメモリ管理方式は、前記メモリ空間の一端から前記単位ブロックを単位として割り当て領域を配置し、前記第２のメモリ管理方式は、前記メモリ空間の他端から割り当て領域を配置し、前記第１のメモリ管理方式は、新規割り当てあるいはサイズ変更を実行するために必要な空きブロックが無かった場合には前記第２のメモリ管理方式に対して領域の整頓の要求を出し、前記第２のメモリ管理方式は、前記第１のメモリ管理方式からの領域の整頓の要求に応じて割り当て済みの領域を前記他端側に詰めるように移動配置するものである。
また、請求項２の発明のメモリ管理装置は、一つの連続したメモリ空間において２つのメモリ管理を行うことができるメモリ管理装置において、アプリケーションプログラムに対して割り当て済みの領域が他の領域の新規割り当てあるいは他の領域のサイズ変更に伴い再配置されることがなく、かつメモリ空間は予め定めたサイズの単位ブロックを単位として管理されると共に、アプリケーションプログラムに対して割り当てる領域のサイズは前記単位ブロックの整数倍に設定された静的なメモリ管理を行う第１のメモリ管理手段と、アプリケーションプログラムに対して割り当て済みの領域が他の領域の新規割り当てあるいは他の領域のサイズ変更に伴い移動再配置されることがある動的なメモリ管理を行う第２のメモリ管理手段とを備え、前記第１のメモリ管理手段は、前記メモリ空間の一端から前記単位ブロックを単位として割り当て領域を配置し、前記第２のメモリ管理手段は、前記メモリ空間の他端から割り当て領域を配置し、前記第１のメモリ管理手段は、新規割り当てあるいはサイズ変更を実行するために必要な空きブロックが無かった場合には前記第２のメモリ管理手段に対して領域の整頓の要求を出し、前記第２のメモリ管理手段は、前記第１のメモリ管理手段からの領域の整頓の要求に応じて割り当て済みの領域を前記他端側に詰めるように移動配置するものである。
【０００９】
【作用】
上記請求項１又は請求項２のメモリ管理方法又は装置においては、アプリケーョンプログラムからのメモリの割り当て要求に応じて、静的なメモリ管理を行う第１のメモリ管理方式又は手段はメモリ空間の一端から前記単位ブロックを単位として割り当て領域を配置し、また、動的なメモリ管理を行う第２のメモリ管理方式又は手段はメモリ空間の他端から割り当て領域を配置する。そして、第１のメモリ管理方式又は手段は、新規割り当てあるいはサイズ変更を実行するために必要な空きブロックが無かった場合には第２のメモリ管理方式又は手段に対して領域の整頓の要求を出し、第２のメモリ管理方式又は手段は、第１のメモリ管理方式又は手段からの領域の整頓の要求に応じて割り当て済みの領域を前記他端側に詰めるように移動配置する。これにより、メモリの空き領域の新たな領域の割り当てや割り当て済み領域のサイズ変更を効率よく行うことができるものであり、しかも、アプリケーションプログラムに対して割り当てる領域のサイズを前記単位ブロックの整数倍としたので、細分化された領域がメモリ空間中に点在して大きな空き領域を作り出せないといったことがなくなり、また、メモリ空間の細分化が抑制され、効率よくメモリ管理を行え、大きな空き領域を確保することができる。
【００１０】
【００１１】
【実施例】
以下、本発明を具体化した一実施例を図面を参照して説明する。図１は、本実施例のメモリ管理装置をプリンタコントローラに実装した場合の概略ブロック図である。メモリ管理装置は、ホストコンピュータ１から送られてきた印刷命令等を処理しプリンタエンジン２に処理された印刷イメージを転送するプリンタコントローラ３に搭載され、本発明によるメモリ管理方法はこのプリンタコントローラ３全体を制御するＣＰＵ４により実行される。プリンタコントローラ３は、前記ＣＰＵ４の他に、プリンタエンジン２を制御するための制御プログラム及びフォントデータを格納したＲＯＭ５と、ＲＡＭ６と、ホストコンピュータ１などの外部装置との通信を行う入出力インターフェース７と、プリンタエンジン２との通信を行うプリンタエンジンインターフェース８と、これらを相互に接続するバス９とから構成される。
【００１２】
上記構成のメモリ管理装置において、ＣＰＵ４は、ＲＯＭ５に格納されているプリンタ制御プログラムに含まれるメモリ管理プログラムに基づいてＲＡＭ６のメモリ領域を管理し、プリンタ制御プログラムからの要求により、ＲＡＭ６のメモリ空間に領域を割り当てる。例えば、ホストコンピュータ１から送られてくる印刷データを一時的に蓄える受信バッファとしての領域や、印字データを処理する途中で生成される中間データを蓄える領域などは静的属性領域に割り当て、一時的に蓄えられる（キャッシュされる）フォントデータなどは動的属性領域に割り当てるようにしている。
【００１３】
図２は、図１のＲＡＭ６の記憶領域の概念を示す図である。メモリは連続したメモリ空間６０を想定する。メモリ空間６０は、一番下位アドレスをMemLoEnd６１、一番上位のアドレスをMemHiEnd６２で示し、メモリの上位アドレスから下位アドレスへ向かう方向に静的属性を持つ領域が割り当てられ、下位アドレスから上位アドレスへ向かう方向に動的属性を持つ領域が割り当てられる。以降、前者を静的メモリ管理、後者を動的メモリ管理という。図示するメモリ空間６０の中で、ハッチングで示した領域は既に割り当てられている領域であり、ハッチングが無い部分は割り当てられていない空き領域である。
【００１４】
静的メモリ管理は、アプリケーションプログラム（本実施例では、プリンタ制御プログラム）が必要とするサイズの領域をMemStEnd６２から、順番にMemLoEnd６１方向に向かって割り当てる。メモリ空間６０にはMemHiEnd６２の直前に静的メモリ管理のための管理領域６３が確保され、管理領域６３の直前をMemStEnd６４で示す。MemStEnd６４とStAreaBottom６５の間の領域６６が、静的メモリ管理で使用されている領域である。StAreaBottom６５で示すアドレスが、静的メモリ管理によって割り当てられている領域の先端であり、StAreaBottom６５は、領域の割り当て、解放によって移動する。
【００１５】
動的メモリ管理は、アプリケーションプログラムが必要とするサイズの領域をMemLoEnd６１から、順番にMemStEnd６４方向に向かって割り当てる。MemLoEnd６１とDyAreaTop ６７の間の領域６８が動的メモリ管理で使用されている領域である。DyAreaTop ６７で示すアドレスが動的メモリ管理によって割り当てられている領域の先端であり、DyAreaTop ６７は、領域の割り当て、解放によって移動する。また、DyAreaTop ６７とStAreaBottom６５の領域６９は、静的・動的メモリ管理のどちらにも管理されていない未使用の空き領域である。
【００１６】
次に、静的メモリ管理の基本的な機能（領域の割り当て、割り当て済み領域のサイズ変更、割り当て済み領域の開放）について、図３から図６を用いて説明する。図３は、静的な属性に割り当てられている空間周辺を示したメモリ空間６０の概念図である。静的メモリ管理においては、使用可能な空間（MemLoEnd６１〜MemStEnd６４）をある一定のサイズで分割しておく。この一つ一つを単位ブロックと呼ぶ。単位ブロックのサイズは、数百バイトから数Ｋバイトの間で、効率の良いサイズをあらかじめ設定しておく。個々の単位ブロックのそれぞれの情報は、管理領域６３に記憶される。静的メモリ管理においては、この単位ブロックを割り当て単位として管理を行い、アプリケーションプログラムから要求されたサイズを満たす単位ブロックの整数倍の領域が割り当てられる。
【００１７】
図４は、静的メモリ管理における領域の割り当てについてのフローチャートである。領域の割り当て処理において、ＣＰＵ４は、アプリケーションプログラムからの要求サイズに対して、単位ブロックがいくつ必要か計算し（Ｓ１）、計算された単位ブロック数を使用可能な空間DyAreaTop ６７からMemStEnd６４の中から検索し（Ｓ２）、空きブロックが見つかれば（Ｓ３でＹＥＳ）、その空きブロックに関する管理領域６３の管理情報を更新し（Ｓ４）、空きブロックの先頭アドレスをアプリケーションプログラムに返して（Ｓ５）、終了する。一方、Ｓ３において、十分な空きブロックが見つからなかった場合には（Ｓ３でＮＯ）、動的メモリ管理に対して領域の整頓の要求を出す（Ｓ６）。
【００１８】
Ｓ６における動的メモリ管理においては、割り当て済みの動的プログラムに使用している領域を、MemLoEnd６１方向に移動して詰めて行くことにより、DyAreaTop ６７がMemLoEnd６１方向に移動し、その結果、DyAreaTop ６７とStAreaBottom６５の間の未割り当ての空き領域６９が広がる。その未割り当て領域に十分な空きブロックがあれば（Ｓ７でＹＥＳ）、その空きブロックに関する情報を更新し（Ｓ４）、見付かった空きブロックの先頭アドレスをアプリケーションプログラムに返して（Ｓ５）、終了する。Ｓ７において十分な空きブロックが見つからなかった場合には（Ｓ７でＮＯ）、割り当て失敗となり、終了する。
【００１９】
図５は、静的メモリ管理における割り当て済み領域のサイズ変更についてのフローチャートである。この処理においては、既に割り当て済みの領域のサイズをアプリケーションプログラムの要求に応じて変更する。要求サイズに応じて、単位ブロックがいくつ必要か計算し（Ｓ１１）、今までの割り当て済みブロック数と今回の要求に対する必要ブロックサイズを比較し、割り当てブロックの拡大が必要か否かを調べる（Ｓ１２）。Ｓ１２で今回の要求サイズが今までの割り当てサイズよりも小さく、拡大の必要がないと判断されれば（Ｓ１２でＮＯ）、今までの割り当て済み領域を縮小し、それに伴い管理領域６３の管理情報も更新し（Ｓ１３）、終了する。
【００２０】
一方、Ｓ１２において拡大の必要があれば、今まで割り当てられていたブロックの前後のブロックの状況を検索し（Ｓ１４）、今まで割り当てられていたブロックと前後の空きブロックで十分な領域が確保できるようであれば（Ｓ１５でＹＥＳ）、今まで割り当てられていたブロックと前後の空きブロックで必要なブロックを新しく割り当て（Ｓ１６）、新しい割り当てに伴い管理領域６３の管理情報を更新し（Ｓ１７）、必要ならば今までのブロック内のデータを新しく割り当てられたブロックにコピーし（Ｓ１８）、新しく割り当てられたブロックの先頭アドレスをアプリケーションプログラム側に返し（Ｓ１９）、終了する。
【００２１】
Ｓ１５において、前後の空きブロックでは空き領域が不十分な場合（Ｓ１５でＮＯ）、十分な空きブロックを使用可能な空間DyAreaTop ６７からMemStEnd６４の中から検索し（Ｓ２０）、新たに割り当て可能か否かを判断し（Ｓ２１）、可能であれば（Ｓ２１でＹＥＳ）、その領域のブロックを新規に割り当てるブロックとして割り当て（Ｓ２２）、今までのブロック内のデータを新しく割り当てられたブロックにコピーし（Ｓ２３）、今までのブロック及び、新しいブロックの管理情報を更新し（Ｓ２４）、新規に割り当てるブロックの先頭アドレスをアプリケーションプログラム側に返し（Ｓ２５）、終了する。
【００２２】
Ｓ２１において、十分な空きブロックが無かった場合（Ｓ２１でＮＯ）、上述した図４のＳ６と同様に動的メモリ管理に対して領域の整頓の要求を出す（Ｓ２６）。動的メモリ管理においては、割り当て済みの領域をMemLoEnd６１方向に移動して、詰めて行くことにより、DyAreaTop ６７がMemLoEnd６１方向に移動して、その結果、DyAreaTop ６７とStAreaBottom６５の間の未割り当て領域が広がる。十分な空きブロックがあれば（Ｓ２７でＹＥＳ）、Ｓ２２以降の処理に移る。Ｓ２７において、十分な空きブロックが見つからなかった場合には（Ｓ２７でＮＯ）、サイズ変更失敗となり、終了する。
【００２３】
図６は、静的メモリ管理における割り当て済み領域の開放についてのフローチャートである。この処理においては、アプリケーションプログラムから指示されたブロックを開放して空きブロックとし、管理領域６３の管理情報等を更新し（Ｓ３１）、終了する。
【００２４】
動的メモリ管理について、図７から図１０を用いて説明する。図７は、動的な属性に割り当てられている空間周辺を示したメモリ空間６０の概念図である。動的メモリ管理ではメモリの下位アドレスから領域の割り当てを行う。動的メモリ管理において使用可能なメモリ空間は、メモリの下位アドレスMemLoEnd６１から静的メモリ管理が使用している空間の下限を示すStAreaBottom６５までである。動的メモリ管理で割り当てられた領域は、新たな空き領域の確保のために移動することがある。そのために、アプリケーションプログラム側では割り当てられた領域の先頭アドレスでは管理できない。そこで、割り当てられた領域の先頭アドレスを別の領域７５に一度記憶しておき、アプリケーションプログラムからは、その記憶された領域を介して、割り当てられた領域の先頭アドレスを得る。割り当てられた領域の先頭アドレスをまとめて記憶しておく領域７５をポインタ記憶領域と呼ぶ。ポインタ記憶領域７５は、動的メモリ管理において移動の対象とならないように、静的メモリ管理で管理される領域に確保される。
【００２５】
また、アプリケーションプログラムから要求されたサイズの領域が割り当てられるが、割り当てられる領域それぞれに、管理領域が付随している。図７には割り当て済みの一つの領域８０を拡大しており、アプリケーションプログラムに対して割り当てられた領域８０ａの直前にこの領域８０ａを管理するための管理情報領域８０ｂが付加されている。この管理情報領域８０ｂには、領域８０のサイズ、領域８０の前後に存在する領域の先頭アドレス、それらの領域の割り当て済み・未割り当ての属性などが記憶されている。
【００２６】
図８は、動的メモリ管理における領域の割り当てについてのフローチャートである。領域の割り当て処理において、アプリケーションプログラムからの要求サイズに対して、そのサイズと管理情報領域とを加えた大きさを満足する空き領域をMemLoEnd６１からStAreaBottom６５の間で検索し（Ｓ４１）、十分な空き領域があれば（Ｓ４２でＹＥＳ）、その領域を割り当て、その領域に関する管理情報及びその領域の前後領域の管理情報を管理情報領域８０ｂにて更新する（Ｓ４３）。そして、割り当てる領域の先頭アドレスをポインタ記憶領域７５に書き込み（Ｓ４４）、ポインタ記憶領域７５内の書き込まれたアドレスをアプリケーションプログラムに返して（Ｓ４５）、終了する。
【００２７】
一方、Ｓ４２において、十分な空き領域が見つからなかった場合には（Ｓ４２でＮＯ）、動的メモリ管理によって管理されている領域（MemLoEnd６１からDyAreaTop ６７の間）の整頓を行う（Ｓ４６）。すなわち、割り当て済みの領域をMemLoEnd６１方向に移動して、詰めてゆくことにより、DyAreaTop ６７がMemLoEnd６１の方向に移動して、その結果、DyAreaTop ６７とStAreaBottom６５の間の未割り当ての空き領域６９が広がり、その空き領域６９に、十分な空き領域が存在すれば（Ｓ４７でＹＥＳ）、処理はＳ４３に移る。十分な空き領域が存在しなければ（Ｓ４７でＮＯ）、割り当て失敗となり、終了する。
【００２８】
図９は、動的メモリ管理における割り当て済み領域のサイズ変更についてのフローチャートである。この処理においては、既に割り当て済みの領域のサイズをアプリケーションプログラムの要求に応じて変更する。要求サイズと今までの割り当てサイズとを比較し（Ｓ５１）、今回のサイズが今までよりも小さく、領域拡大の必要がなければ（Ｓ５１でＮＯ）、今までの割り当て済み領域を縮小し、それに伴い管理情報も更新し（Ｓ５２）、終了する。
【００２９】
Ｓ５１において領域拡大の必要があれば（Ｓ５１でＹＥＳ）、今まで割り当てられていた領域の前後の領域の状況を検索し（Ｓ５３）、今まで割り当てられていた領域と前後の空き領域で十分な領域が確保できるようであれば（Ｓ５４でＹＥＳ）、今まで割り当てられていた領域と前後の空き領域で必要な領域を新しく割り当て（Ｓ５５）、新しい割り当てに伴い管理情報を更新し（Ｓ５６）、今までの領域内のデータを新しく割り当てられた領域にコピーし（Ｓ５７）、ポインタ記憶領域７５に書き込まれていた割り当て領域の先頭アドレスを新しく割り当てる領域の先頭アドレスに書き換え（Ｓ５８）、ポインタ記憶領域７５に書き込まれたアドレスをアプリケーションプログラムに返し（Ｓ５９）、終了する。
【００３０】
Ｓ５４において、十分な空き領域が無かった場合（Ｓ５４でＮＯ）、MemLoEnd６１からStAreaBottom６５の間で十分な空き領域を検索し（Ｓ６０）、十分な空き領域があり、新たに割り当て可能であれば（Ｓ６１でＹＥＳ）、その領域を新規に割り当てる領域とし（Ｓ６２）、今まで割り当てられていた領域の内部のデータを新しく割り当てる領域にコピーし（Ｓ６３）、今まで割り当てられていた領域を未使用にし、新しく割り当てる領域の管理情報を更新し（Ｓ６４）、ポインタ記憶領域７５に書き込まれていた割り当て領域の先頭アドレスを新しく割り当てる領域の先頭アドレスに書き換え（Ｓ６５）、ポインタ記憶領域７５の書き込まれたアドレスをアプリケーションプログラムに返し（Ｓ６６）、終了する。
【００３１】
Ｓ６１において、十分な空き領域が見つからなかった場合は（Ｓ６１でＮＯ）、上述した図８のＳ４６と同様に動的メモリ管理によって管理している領域（MemLoEnd６１からDyAreaTop ６７の間）の整頓を行う（Ｓ６７）。すなわち、割り当て済みの領域をMemLoEnd６１方向に移動して、詰めていくことにより、DyAreaTop ６７がMemLoEnd６１方向に移動して、その結果、DyAreaTop ６７とStAreaBottom６５の間の未割り当て領域が広がる。その未割り当て領域に、十分な空き領域が存在すれば（Ｓ６８でＹＥＳ）、処理はＳ６２に移る。十分な空き領域が存在しなければ（Ｓ６８でＮＯ）、割り当て失敗となり、終了する。
【００３２】
図１０は、動的メモリ管理における割り当て済み領域の開放についてのフローチャートである。この処理においては、アプリケーションプログラムから指示された領域を開放して空き領域とし、管理情報等を更新し（Ｓ７１）、終了する。
【００３３】
本実施例によるメモリ管理方法及び装置によれば、メモリ空間６０を管理する際、静的メモリ管理はメモリ空間６０の上位アドレスMemHiEnd６２からMemLoEnd６１へ向かう方向に静的な属性を持つ領域を割り当て（図４〜図６の処理）、動的メモリ管理はメモリ空間６０の下位アドレスMemLoEnd６１からMemHiEnd６２へ向かう方向に動的な属性を持つ領域を割り当てる（図８〜図１０の処理）ことにより２つの異なる属性の領域が分離され、メモリ空間６０を有効に利用することができる。また、静的メモリ管理で管理される領域６６は、一定のサイズのブロックに分割され、領域をこのブロックの整数倍として割り当てるようにしたことで、一定サイズ以下にメモリ空間６０が細分化されることはなく、効率的なメモリ管理が行える。
【００３４】
また、動的メモリ管理で管理される領域６８の割り当ては、動的属性で割り当てられる領域の先頭アドレス情報をポインタ記憶領域７５を介してアプリケーションプログラムに返すようにしているので（図８のＳ４３〜Ｓ４５、図９のＳ６４〜Ｓ６６及びＳ５６〜Ｓ５９、図１０のＳ７１）、動的属性を持つ領域のサイズ変更、他の動的属性を持つ領域の割り当て、他の動的属性を持つ領域のサイズ変更、静的メモリ管理からの領域の整頓要求が行われても、割り当て済み領域が自由にメモリ空間中を移動可能であるために、メモリ管理の自由度が大きく、メモリ使用の高効率化を図ることができ、適正にメモリ管理を行うことができる。
【００３５】
なお、本発明は上記実施例構成に限られず種々の変形が可能である。例えば、上記実施例では、静的プログラム領域６６は使い易いバイト数の単位ブロックに任意に分割しておくことで一層メモリ空間６０を効率よく使用することができる。また、実施例では上位アドレスから下位アドレスへ向かう方向に静的メモリ管理による管理、下位アドレスから上位アドレスへ向かう方向に動的メモリ管理による管理を行うようにしたが、静的メモリ管理で下位アドレスから上位アドレスへ向かう方向に、動的メモリ管理で上位アドレスから下位アドレスへ向かう方向に領域を割り当てるようにしてもよい。
【００３６】
【発明の効果】
以上のように請求項１又は２の発明に係るメモリ管理方法又は装置によれば、メモリ空間を静的属性を持つ領域と、動的属性を持つ領域とに分離し、静的属性を持つ領域を管理する静的メモリ管理はメモリ空間の一端から他端へ向かう方向に単位ブロックを単位として領域を割り当て、動的属性を持つ領域を管理する動的メモリ管理は他端から一端へ向かう方向に領域を割り当てる。そして、第１のメモリ管理方式又は手段は、新規割り当てあるいはサイズ変更を実行するために必要な空きブロックが無かった場合には第２のメモリ管理方式又は手段に対して領域の整頓の要求を出し、第２のメモリ管理方式又は手段は、第１のメモリ管理方式又は手段からの領域の整頓の要求に応じて割り当て済みの領域を前記他端側に詰めるように移動配置することにより、動的属性で割り当てられた領域間に静的属性で割り当てられた領域が存在することがなく、空き領域を広げて他の動的属性の領域の割り当てやサイズ変更が自在となり、従って、効率の良いメモリ管理が実現できる。しかも、メモリ空間を予め所定サイズの単位ブロックに分割しておき、アプリケーションプログラムに対して単位ブロックの整数倍で割り当て、割り当てられた領域の先頭アドレスを固定するようにしているので、不規則なサイズによるメモリ空間の細分化を防ぐことが可能となり、空き領域の確保が容易となり、メモリ空間を効率よく管理することができる。
【図面の簡単な説明】
【図１】本発明の一実施例によるメモリ管理方法が用いられるメモリ管理装置の概略構成を示すブロック図である。
【図２】本メモリ管理方法におけるメモリ空間の概念を示した図である。
【図３】本メモリ管理方法の静的属性を持つ領域の管理におけるメモリ空間の概念を示した図である。
【図４】静的属性を持つ領域の管理における領域の割り当て処理を示したフローチャートである。
【図５】静的属性を持つ領域の管理における割り当て済み領域のサイズ変更処理を示したフローチャートである。
【図６】静的属性を持つ領域の管理における割り当て済み領域の解放処理を示したフローチャートである。
【図７】本メモリ管理方法の動的属性を持つ領域の管理におけるメモリ空間の概念を示した図である。
【図８】動的属性を持つ領域の管理における領域の割り当て処理を示したフローチャートである。
【図９】動的属性を持つ領域の管理における割り当て済み領域のサイズ変更処理を示したフローチャートである。
【図１０】動的属性を持つ領域の管理における割り当て済み領域の解放処理を示したフローチャートである。
【図１１】従来のメモリ管理方法におけるメモリ空間の動きを示した概念図である。
【符号の説明】
３  プリンタコントローラ（メモリ管理装置）
４  ＣＰＵ（制御装置）
５  ＲＯＭ
６  ＲＡＭ（メモリ）
６０  メモリ空間
６１  MemLoEnd（最下位アドレス）
６２  MemHiEnd（最上位アドレス）
６３  管理領域
６６  静的なメモリ管理で使用されている領域
６８  動的なメモリ管理で使用されている領域
７５  ポインタ記憶領域
８０ｂ  管理情報領域
【図１】
0003610528.tif 000002
【図２】
0003610528.tif 000003
【図３】
0003610528.tif 000004
【図４】
0003610528.tif 000005
【図５】
0003610528.tif 000006
【図６】
0003610528.tif 000007
【図７】
0003610528.tif 000008
【図８】
0003610528.tif 000009
【図９】
0003610528.tif 000010
【図１０】
0003610528.tif 000011
【図１１】
0003610528.tif 000012