(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-08-05
(45)【発行日】2024-08-14
(54)【発明の名称】画像形成装置および画像形成装置のメモリ管理方法
(51)【国際特許分類】
G06F 12/02 20060101AFI20240806BHJP
【FI】
G06F12/02 510A
G06F12/02 530A
(21)【出願番号】P 2020211184
(22)【出願日】2020-12-21
【審査請求日】2023-10-11
(73)【特許権者】
【識別番号】000006747
【氏名又は名称】株式会社リコー
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(72)【発明者】
【氏名】澤田 夕暉
(72)【発明者】
【氏名】高橋 耶真人
(72)【発明者】
【氏名】土佐 茂
(72)【発明者】
【氏名】西崎 浩平
【審査官】北村 学
(56)【参考文献】
【文献】特開昭58-171780(JP,A)
【文献】特開平02-019938(JP,A)
【文献】特開平08-115252(JP,A)
【文献】特開平09-160823(JP,A)
【文献】特開平11-212859(JP,A)
【文献】特開2015-064658(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
IPC G06F 12/00 - 12/06
G06F 3/06
G06F 16/10
(57)【特許請求の範囲】
【請求項1】
メモリを使用して画像データの形成を制御する画像制御部と、
前記画像制御部で使用する前記メモリの使用領域毎および空き領域毎に、メモリ領域のメモリサイズとメモリアドレスとが格納されるノードが割り当てられるメモリ管理リストと、
所定範囲のメモリサイズ毎に割り当てられた複数の配列を有し、配列毎に、メモリアドレスが最小の空き領域に対応するノードを示すノード情報が格納される空きノード管理配列と、
前記画像制御部からのメモリ確保要求またはメモリ解放要求に応じて、前記メモリ管理リストと前記空きノード管理配列とを使用して、前記メモリに対するメモリ領域の確保または解放を管理するメモリ管理部と、
を有し、
前記メモリ管理部は、
前記メモリ確保要求に基づいて、前記メモリ確保要求に含まれるメモリサイズに対応する配列を探索し、探索により得た配列に保持されたノード情報に基づいてメモリ領域を確保し、
確保したメモリ領域に基づいて前記メモリ管理リストを更新し、
更新した前記メモリ管理リストに基づいて前記空きノード管理配列を更新する
画像形成装置。
【請求項2】
前記メモリ管理部は、前記メモリ確保要求に含まれるメモリサイズに対応する配列が、空き領域が存在しないことを示す未登録情報を保持する場合、前記メモリ確保要求に含まれるメモリサイズより大きいメモリサイズに対応する配列を順次探索し、探索により得た配列に保持されたノード情報に基づいてメモリ領域を確保する
請求項1に記載の画像形成装置。
【請求項3】
前記メモリ管理部は、前記空きノード管理配列を更新する場合、
メモリ領域の確保時に参照した配列に保持されているノード情報を未登録情報に書き換え、
メモリ領域の確保により前記メモリ管理リストに新たな空き領域に対応する新たなノードが登録された場合であって、新たな空き領域のメモリサイズに対応する配列に未登録情報が保持されている場合、新たな空き領域のメモリサイズに対応する配列に新たな空き領域に対応するノード情報を格納し、
メモリ領域の確保により前記メモリ管理リストに新たな空き領域に対応する新たなノードが登録された場合であって、新たな空き領域のメモリサイズに対応する配列にノード情報が保持されている場合、新たな空き領域のメモリアドレスが、新たな空き領域のメモリサイズに対応する配列に保持されているノード情報に対応する空き領域のメモリアドレスより小さいときに、新たな空き領域のメモリサイズに対応する配列に保持されているノード情報を、新たなノードのノード情報に書き換える
請求項1または請求項2に記載の画像形成装置。
【請求項4】
前記メモリ管理部は、前記空きノード管理配列を更新する場合、さらに、
メモリ領域の確保により前記メモリ管理リストに新たな空き領域に対応する新たなノード情報が登録された場合であって、新たな空き領域のメモリサイズに対応する配列より大きいメモリサイズに対応する配列に保持されるノード情報に対応する空き領域のメモリアドレスが、新たな空き領域のメモリアドレスより小さい場合、新たな空き領域のメモリサイズに対応する配列に保持されている未登録情報を維持する
請求項1ないし請求項3のいずれか1項に記載の画像形成装置。
【請求項5】
前記メモリ管理部は、前記空きノード管理配列を更新する場合、さらに、
新たな空き領域に対応するノードを示すノード情報を格納した配列より小さいメモリサイズに対応する配列に保持されているノード情報に対応する空き領域のメモリアドレスが、新たな空き領域のメモリアドレスより大きい場合、当該配列に保持されているノード情報を未登録情報に書き換える
請求項1ないし請求項4のいずれか1項に記載の画像形成装置。
【請求項6】
前記メモリ管理リストは、線形連結リストである
請求項1ないし請求項5のいずれか1項に記載の画像形成装置。
【請求項7】
メモリを使用して画像データの形成を制御する画像制御部と、前記画像制御部で使用する前記メモリの使用領域毎および空き領域毎に、メモリ領域のメモリサイズとメモリアドレスとが格納されるノードが割り当てられるメモリ管理リストと、所定範囲のメモリサイズ毎に割り当てられた複数の配列を有し、配列毎に、メモリアドレスが最小の空き領域に対応するノードを示すノード情報が格納される空きノード管理配列と、を有し、前記画像制御部からのメモリ確保要求またはメモリ解放要求に応じて、前記メモリ管理リストと前記空きノード管理配列とを使用して、前記メモリに対するメモリ領域の確保または解放を管理する画像形成装置のメモリ管理方法であって、
前記メモリ確保要求に基づいて、前記メモリ確保要求に含まれるメモリサイズに対応する配列を探索し、探索により得た配列に保持されたノード情報に基づいてメモリ領域を確保し、
確保したメモリ領域に基づいて前記メモリ管理リストを更新し、
更新した前記メモリ管理リストに基づいて前記空きノード管理配列を更新する
画像形成装置のメモリ管理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、画像形成装置および画像形成装置のメモリ管理方法に関する。
【背景技術】
【0002】
様々なサイズのデータを処理するシステムは、データのサイズに対応するメモリ領域を動的に割り当てる。例えば、メモリ領域を動的に割り付けるメモリ管理システムは、最多の要求サイズと要求サイズとの比較に基づいて、最適化空き領域サーチポインタが示す空き領域管理リストまたは空き領域管理リストチェインの先頭の空き領域管理リストから空き領域を探索する。そして、メモリ管理システムは、一定時間ごとに、アドレス的に連続しているが異なる複数の空き領域管理リストで別個に管理されている複数の空き領域を1つにマージする。さらに、メモリ管理システムは、空き領域のサイズをキーとして空き領域管理リストを昇順にソートする。この後、メモリ管理システムは、統計情報テーブルに基づいて、現時点で使用回数が最多の要求サイズのメモリ領域を管理する空き領域管理リストが示されるように最適化空き領域サーチポインタを再設定する(例えば、特許文献1参照)。
【0003】
また、別のメモリ管理システムは、論理パーテーション管理部と、物理パーテーション管理部と、変換部とを有する。論理パーテーション管理部は、論理アドレス空間における仮想メモリの割当と解放とを管理する。物理パーテーション管理部は、物理アドレス空間における実メモリの割当と解放とを管理する。変換部は、論理アドレス空間と物理アドレス空間との間のアドレス変換を行う。そして、物理パーテーション管理部は、物理パーテーションの未使用領域をサイズ毎に分類しておき、メモリ割当要求の際に当該割当要求のサイズを含む、分類された未使用領域から未使用領域を探索して選択する(例えば、特許文献2参照)。
【発明の概要】
【発明が解決しようとする課題】
【0004】
デジタル複合機等の画像形成装置は、画像データを制御するために画像制御デバイスとメインCPU(Central Processing Unit)のメモリとの間で画像データを高速に転送し、例えば、画像データ毎にメモリ領域の動的な確保と解放とを実施する。この際、メモリ領域の動的な確保と解放との管理を容易にするために、線形連結リストが使用される場合がある。
【0005】
しかしながら、線形連結リストを使用する場合、確保したいサイズの空き領域が見つかるまでリストの先頭から順次探索する必要がある。このため、確保されたメモリ領域の数が増加することでリストのノード数が増加した場合、確保できる空き領域を見つけるまでの時間が長くなるという問題がある。空き領域を見つけるまでの時間が掛かる場合、画像形成装置による画像処理速度が低下し、画像形成装置の性能が低下するおそれがある。
【0006】
開示の技術は、上記の課題に鑑みてなされたものであり、確保されたメモリ領域の数にかかわらずメモリ領域の確保に掛かる時間を短縮することで、画像形成装置による画像処理速度の低下を抑止することを目的とする。
【課題を解決するための手段】
【0007】
上記技術的課題を解決するため、本発明の一形態の画像形成装置は、メモリを使用して画像データの形成を制御する画像制御部と、前記画像制御部で使用する前記メモリの使用領域毎および空き領域毎に、メモリ領域のメモリサイズとメモリアドレスとが格納されるノードが割り当てられるメモリ管理リストと、所定範囲のメモリサイズ毎に割り当てられた複数の配列を有し、配列毎に、メモリアドレスが最小の空き領域に対応するノードを示すノード情報が格納される空きノード管理配列と、前記画像制御部からのメモリ確保要求またはメモリ解放要求に応じて、前記メモリ管理リストと前記空きノード管理配列とを使用して、前記メモリに対するメモリ領域の確保または解放を管理するメモリ管理部と、を有し、前記メモリ管理部は、前記メモリ確保要求に基づいて、前記メモリ確保要求に含まれるメモリサイズに対応する配列を探索し、探索により得た配列に保持されたノード情報に基づいてメモリ領域を確保し、確保したメモリ領域に基づいて前記メモリ管理リストを更新し、更新した前記メモリ管理リストに基づいて前記空きノード管理配列を更新する。
【発明の効果】
【0008】
確保されたメモリ領域の数にかかわらずメモリ領域の確保に掛かる時間を短縮することで、画像形成装置による画像処理速度の低下を抑止することができる。
【図面の簡単な説明】
【0009】
【
図1】第1の実施形態における画像形成装置の全体構成の一例を示す図である。
【
図2】
図1の画像処理部の機能構成の一例を示すブロック図である。
【
図3】
図2のメモリ管理リストおよび空きノード管理配列の一例を示す図である。
【
図4】
図2の画像制御部からのメモリ確保要求に基づいて、メモリ管理部が画像データ記憶領域にメモリ領域を確保する一例を示すシーケンス図である。
【
図5】
図2の画像制御部からの解放要求に基づいて、メモリ管理部が画像データ記憶領域からメモリ領域を解放する一例を示すシーケンス図である。
【
図6】
図2のメモリ管理リストおよび空きノード管理配列の別の例を示す図である。
【
図7】
図6の状態において、画像制御部20から100KBのメモリ確保要求が発行された場合の状態の変化の例を示す図である。
【
図8】
図7でのメモリ領域の確保後、さらに190KBのメモリ確保要求が発行された場合の状態の変化の例を示す図である。
【発明を実施するための形態】
【0010】
以下、図面を参照して実施の形態の説明を行う。なお、各図面において、同一構成部分には同一符号を付し、重複した説明を省略する場合がある。
【0011】
(第1の実施形態)
図1は、第1の実施形態における画像形成装置の全体構成の一例を示す図である。
図1に示す画像形成装置1は、例えば、複写機能、プリンタ機能、スキャナ機能およびファクシミリ機能等を有するデジタル複合機である。画像形成装置1は、図示しない操作部のアプリケーション切り替えキーにより、複写機能、プリンタ機能、スキャナ機能およびファクシミリ機能のいずれかに動作モードを切り替えることが可能である。なお、画像形成装置1は、複写機またはプリンタでもよい。
【0012】
例えば、画像形成装置1は、自動原稿送り装置(ADF;Auto Document Feeder)2、画像読み取り部3、書き込みユニット4、プリンタユニット5および画像処理部10を有する。プリンタユニット5は、感光体ドラム6(感光体)、現像装置7、搬送ベルト8および定着装置9等を有する。プリンタユニット5は、画像情報に基づいて紙媒体等に転写するトナー像を作成する。以下、画像形成装置1での画像形成の流れの一例として、動作モードが複写モードに設定されている場合について簡単に説明する。
【0013】
複写モードでは、複写の対象である複数枚の原稿が自動原稿送り装置2にセットされる。図示しない操作部のスタートボタンが押されると、自動原稿送り装置2は、原稿を1枚ずつ画像読み取り部3に送る。画像読み取り部3は、自動原稿送り装置2から順に送られる各原稿の画像情報を読み取る。読み取られた画像情報は、画像処理部10により処理される。
【0014】
書き込みユニット4は、画像処理部10により処理された画像情報を光情報に変換する。感光体ドラム6は、図示しない帯電器により一様に帯電された後、書き込みユニット4により変換された光情報を含むレーザ光により露光される。露光により、感光体ドラム6上には静電潜像が形成される。
【0015】
現像装置7は、感光体ドラム6上の静電潜像を現像し、感光体ドラム6上にトナー像を形成する。搬送ベルト8は、トナー像を転写紙等の媒体に転写する。定着装置9は、トナー像を転写紙上に定着させる。そして、原稿の画像が複写された転写紙は、排出部から排出される。
【0016】
図2は、
図1の画像処理部10の機能構成の一例を示すブロック図である。画像処理部10は、画像制御部20、メモリ管理部30およびメモリ40を有する。メモリ40には、メモリ管理リスト50、空きノード管理配列60および画像データ記憶領域70が割り当てられる。なお、メモリ管理リスト50および空きノード管理配列60は、画像データ記憶領域70が割り当てられるメモリと別のメモリに割り当てられてもよい。
【0017】
画像制御部20は、
図1の画像形成装置1内で処理する画像データの生成および出力等の処理を制御することで、画像の形成を制御する。画像制御部20は、画像データを処理する場合、画像データ記憶領域70に画像データの処理に使用するメモリ領域を確保するためのメモリ確保要求をメモリ管理部30に発行する。また、画像制御部20は、画像データの処理後、画像データ記憶領域70に確保していたメモリ領域を解放するためのメモリ解放要求をメモリ管理部30に発行する。
【0018】
メモリ管理部30は、画像制御部20からのメモリ確保要求に基づいて、メモリ管理リスト50および空きノード管理配列60を使用して、画像制御部20が使用する所定のメモリサイズのメモリ領域を画像データ記憶領域70に確保する。メモリ管理部30は、画像制御部20からのメモリ解放要求に基づいて、画像制御部20が使用していたメモリ領域を画像データ記憶領域70から解放する。また、メモリ管理部30は、メモリ領域の確保後およびメモリ領域の開放後に、メモリ管理リスト50および空きノード管理配列60を更新する更新処理をそれぞれ実施する。メモリ管理リスト50および空きノード管理配列60の例は、
図3で説明する。
【0019】
図3は、
図2のメモリ管理リスト50および空きノード管理配列60の一例を示す図である。
図3に示す例では、画像データ記憶領域70に割り当てられるメモリサイズは1GBであり、確保可能なメモリ領域の最小ブロックサイズは4KBである。画像データ記憶領域70の先頭のメモリアドレス(物理アドレス)は、0x4290_0000である。しかしながら、画像データ記憶領域70のサイズは、1GBに限定されず、最小ブロックサイズは4KBに限定されない。また、画像データ記憶領域70の先頭のメモリアドレスは、0x4290_0000に限定されない。なお、符号"0x"は、その後の数値が16進数であることを示し、符号"_"は、4バイトアドレスにおいて2バイトの区切りを示す。
【0020】
図3では、画像制御部20は、画像処理を実施するために、画像データ記憶領域70の12KBのメモリ領域と8Bのメモリ領域とを確保済み(使用中)である。12KBのメモリ領域のメモリアドレス範囲は、0x4290_0000~0x4290_2FFFである。8KBのメモリ領域のメモリアドレス範囲は、0x4290_4000~0x4290_5FFFである。画像データ記憶領域70において、確保済みのメモリ領域は、網掛けで示される。
【0021】
このため、メモリアドレス範囲が0x4290_3000~0x4290_3FFFの4KBのメモリ領域と、メモリアドレス範囲が0x4290_6000以降の"1048552KB(=1GBと24KBの差)"のメモリ領域は、確保されていない空き領域である。
【0022】
メモリ管理リスト50は、線形連結リストのデータ構造を有しており、
図3では、各ノード(配列)の情報が1行で表されている。各ノードは、自ノードに割り当てられたアドレス(仮想アドレス)と、状態と、メモリ領域の先頭アドレス(物理アドレス)と、メモリサイズと、次ノードに割り当てられたアドレス(仮想アドレス)とが格納される領域を有する。以下では、ノードに割り当てられた仮想アドレスは、ノードアドレスとも称される。
【0023】
"状態"は、各ノードにより管理されるメモリ領域が使用中であるか空きであるかを示す。"次ノード"の"NULL"は、次に連結されるノードがないことを示す未登録情報の一例である。
図3の下側に示すかぎ括弧内は、メモリ管理リスト50による線形連結リストのイメージを示す。
【0024】
空きノード管理配列60は、2のべき乗の範囲で示されるメモリサイズ(以下、空きサイズとも称する)に対応する複数の配列Emptyを有する。各配列Emptyには、対応する空きサイズのメモリ領域のうちで最も小さい物理アドレス(すなわち、先頭アドレスに近い物理アドレス)に対応するノードアドレスが格納される。
【0025】
例えば、空きノード管理配列60は、メモリ領域のメモリサイズの上限がそれぞれ8KB(=2^3)~1024MB(=2^20)の18個の配列Empty「0」~Empty[17]を有する。符号"^"は、べき乗を示す。なお、空きノード管理配列60の配列Emptyの数は、
図3に限定されず、画像データ記憶領域70の全体サイズに応じて変化する。例えば、画像データ記憶領域70の全体サイズが1MBの場合、8個の配列Empty[0]~Empty[7]が使用される。また、各配列Emptyに割り当てられるメモリサイズの範囲の上限は、2のべき乗に限定されない。但し、配列Emptyに割り当てられるメモリサイズは、メモリサイズが大きいほど、メモリサイズの範囲が大きく設定されることが好ましい。
【0026】
図3に示す状態では、メモリ管理リスト50により管理される空き領域のメモリサイズは、4KBと1048552KBの2つである。このため、メモリ管理リスト50における4KBの空き領域を管理するノードのノードアドレス(0xF556_CAFE)が、空きノード管理配列60の配列Empty[0]に格納される。また、メモリ管理リスト50における1048552KBの空き領域を管理するノードのノードアドレス(0xF556_FACE)が、空きノード管理配列60の配列Empty[17]に格納される。なお、空きノード管理配列60において、配列Emptyに対応する範囲のメモリサイズの空き領域が存在しない場合、当該配列Emptyには、"NULL"が格納される。以下では、メモリ管理リスト50において"空き"状態を示すノードは、空きノードとも称される。
【0027】
例えば、
図2の画像制御部20がメモリ確保要求をメモリ管理部30に発行した場合、メモリ管理部30は、要求されたメモリ領域のメモリサイズを含む、空きノード管理配列60の配列Emptyを参照する。メモリ管理部30は、参照した配列Emptyに格納されたノードアドレスが示すメモリ管理リスト50のノードを参照し、空き領域のメモリサイズを確認する。メモリ管理部30は、空き領域のメモリサイズが確保を要求されたメモリサイズ以上の場合、当該ノードで示される空き領域を使用してメモリ領域を確保する。
【0028】
メモリ管理部30は、ノードに保持されている空き領域のメモリサイズがメモリ確保要求により要求されたメモリサイズより小さい場合、当該ノードに保持されている空き領域ではメモリ領域を確保できないと判断する。そして、メモリ管理部30は、ノードアドレスが格納された配列Emptyを見つけるまで(すなわち、空きノードを見つけるまで)、配列Emptyの番号を順次インクリメントする。
【0029】
なお、メモリ管理部30は、要求されたメモリ領域のメモリサイズを含む、空きノード管理配列60の配列Emptyに"NULL"が格納されていた場合、当該メモリサイズを含む所定範囲のメモリサイズの空き領域がないと判定する。この場合にも、メモリ管理部30は、ノードアドレスが格納された配列Emptyを見つけるまで、配列Emptyの番号を順次インクリメントすることで、メモリ領域を確保することができる。
【0030】
メモリ管理部30は、メモリ領域の確保後、確保したメモリ領域に応じてメモリ管理リスト50および空きノード管理配列60を更新する。そして、メモリ管理部30は、メモリ領域の確保の完了を画像制御部20に応答する。メモリ管理部30によるメモリ領域の確保時のメモリ管理リスト50および空きノード管理配列60の管理の例は、
図4および
図6以降で説明される。
【0031】
なお、メモリ管理部30は、空きノード管理配列60の全ての配列Emptyを参照しても、確保可能な空き領域を見つけられない場合、メモリ領域を確保できないことを示すエラーを画像制御部20に応答する。この場合、画像制御部20は、例えば、所定時間の経過後、メモリ領域の確保をメモリ管理部30に再び要求する。なお、画像データ記憶領域70は、画像形成装置1がフル稼働する場合にもある程度の空き領域が存在するように設計されるため、画像形成装置1の故障等を除き、メモリ領域を確保できない不具合が発生する可能性は低い。
【0032】
このように、メモリ管理部30は、メモリ管理リスト50のノード数(配列数)にかかわらず、最大で18個の空きノード管理配列60の配列Emptyを参照することで、メモリ領域を確保することができる。なお、メモリ管理部30は、100KBのメモリ領域を確保する場合、100KBの空きサイズを含む配列Empty[4]から参照を開始してもよい。この場合、1つのメモリ領域を確保する場合の配列Emptyの参照数の平均を18個より少なくすることができる。
【0033】
これに対して、例えば、メモリ管理リスト50のみを参照して空き領域を探索し、メモリ領域を確保する場合、メモリ管理リスト50の次ノードアドレスを順番に参照していくため、空き領域を確保するまでの時間は、ノード数の増加に依存して増加する。例えば、画像形成装置1による画像のスキャン動作等では、画像を1ラインずつ走査して画像データを生成するため、メモリサイズの小さいメモリ領域が大量に確保された状態が発生しやすい。このような状況で、メモリ管理リスト50のみを参照して空き領域を探索する場合、メモリ領域を確保するまでに時間が掛かり、画像形成装置1の動作速度の低下の要因となる。
【0034】
一方、この実施形態では、メモリ管理部30は、空きノード管理配列60において小さいメモリサイズに対応する配列Emptyから順に参照していく。このため、メモリサイズの小さいメモリ領域が大量に確保されている場合に、メモリ領域を確保するまでの時間を、メモリ管理リスト50のみを参照する場合に比べて短縮することができる。さらに、既存のメモリ管理リスト50をそのまま利用でき、空きノード管理配列60の各配列Emptyのサイズは、ノードアドレスを格納する4バイトで済むため、メモリコスト、変更コストを抑えて、空き領域を高速で探索することができる。
【0035】
なお、メモリ管理部30は、メモリ領域の確保後、メモリ管理リスト50および空きノード管理配列60を更新する前に、メモリ領域の確保の完了を画像制御部20に応答してもよい。この場合、メモリ管理部30は、メモリ管理リスト50および空きノード管理配列60の更新処理を、画像処理部10による画像処理のバックグラウンドで実施することができ、更新処理に掛かる時間が画像処理の性能に影響することを防止できる。
【0036】
画像制御部20が、確保していたメモリ領域を解放するメモリ解放要求をメモリ管理部30に発行した場合、メモリ管理部30は、メモリ領域を解放した後、メモリ管理リスト50および空きノード管理配列60を更新する。メモリ管理部30によるメモリ領域の解放時のメモリ管理リスト50および空きノード管理配列60の管理の例は、
図5で説明される。
【0037】
図4は、
図2の画像制御部20からのメモリ確保要求に基づいて、メモリ管理部30が画像データ記憶領域70にメモリ領域を確保する一例を示すシーケンス図である。すなわち、
図4は、画像形成装置1のメモリ管理方法の一例を示す。
図4において、符号sdは、枠内がシーケンス図(Sequence Diagram)であることを示す。符号altは、条件分岐処理(alternative)を示し、符号loopは、反復処理を示す。実線の矢印は、メッセージを示し、破線の矢印は、応答を示す。
【0038】
画像制御部20は、例えば、画像処理を実施する場合、メモリ管理部30にメモリ確保要求を発行する(
図4(a))。メモリ管理部30は、メモリ確保要求に基づいて、空きノード管理配列60を探索し(空きノード取得要求)、空きノードの情報を取得する(
図4(b))。メモリ管理部30は、取得した空きノードの情報に基づいてメモリ領域を確保し、メモリ管理リスト50のノードを更新する(
図4(c))。
【0039】
例えば、メモリ管理部30は、確保したメモリ領域に対応するノードの"状態"を"空き"から"使用"に変更し、"メモリサイズ"を確保したメモリサイズに変更する。確保したメモリ領域のメモリサイズが、ノードに格納されているメモリサイズより小さい場合、空き領域が残る。この場合、メモリ管理部30は、メモリ管理リスト50に空きノードを追加し、追加した空きノードに残りの空き領域に対応する情報を登録する。次に、メモリ管理部30は、"使用"に変更したノードに対応する空きノード管理配列60の配列Emptyを"NULL"に変更することで、メモリ領域の確保前に存在していた空きノードを削除する(
図4(d))。
【0040】
画像制御部20は、メモリ管理リスト50のノードが更新された後、確保されたメモリ領域を使用して画像処理を実施可能である。このため、メモリ管理部30は、メモリ管理リスト50を更新したことに基づいて、画像制御部20に空き領域の確保を通知してもよい。メモリ管理部30による空きノード管理配列60の参照は、
図3に示す例では、最大で18回であり、メモリ管理リスト50の更新は、連結リストにノードを挿入することで完了する。このため、メモリ管理リスト50自体を探索する場合に比べて、メモリ領域の確保に要する時間を短縮することができる。
【0041】
メモリ管理部30は、空きノード管理配列60の空きノードの削除後、空きノード管理配列60の配列Emptyの情報を更新するためにノードを探索するループ処理を実施する(
図4(e))。空きノード管理配列60の更新処理では、メモリ管理部30は、メモリ領域の確保に使用したノードに保持されていたメモリサイズ、または新たに追加されたノードに保持されているメモリサイズに対応する配列Emptyから探索を開始する。そして、メモリ管理部30は、空きノード管理配列60へのノードアドレスの追加処理を実施する。メモリ管理部30は、追加処理において、空きノード管理配列60にノードを追加できるか否かを判定し、追加できるノードがある場合、対象の配列Emptyにノードアドレスを追加する(
図4(f))。
【0042】
ノードアドレスの追加の条件は、追加しようとしている空き領域よりメモリサイズが大きく、かつ、追加しようとしている空き領域の物理アドレスより小さい物理アドレスの空き領域が存在しないことである。換言すれば、追加しようとしているノードの空き領域よりメモリサイズの大きい空き領域の物理アドレスが、追加しようとしているノードの空き領域の物理アドレスより小さい場合、ノードアドレスは、配列Emptyに追加されない。追加しようとしているノードの空き領域よりメモリサイズの大きい空き領域の物理アドレスが、追加しようとしているノードの空き領域の物理アドレスより大きい場合、ノードアドレスは、配列Emptyに追加される。
【0043】
メモリ管理部30は、配列Emptyへのノードアドレスの追加処理の後、配列Emptyの更新処理を実施する(
図4(g))。更新処理では、配列Emptyに追加したノードアドレスのノードに登録された空き領域のメモリサイズより小さいメモリサイズの配列Emptyに、空き領域の物理アドレスが大きい空きノードが登録されている場合、そのノードアドレスは削除される。
【0044】
例えば、配列Empty[5]に200KBの空き領域のノードアドレスが追加されたとき、200KBの空き領域のメモリアドレスよりメモリアドレスが大きい128KBの空き領域に対応して配列Empty[4]に登録されているノードアドレスは削除される。これにより、メモリ領域の確保時に、メモリ空間の先頭に近い物理アドレスの領域を優先的に使用することができる。
【0045】
図5は、
図2の画像制御部20からの解放要求に基づいて、メモリ管理部30が画像データ記憶領域70からメモリ領域を解放する一例を示すシーケンス図である。
図4と同様の動作については、詳細な説明は省略する。
【0046】
画像制御部20は、例えば、画像処理が完了した場合、メモリ管理部30にメモリ解放要求を発行する(
図5(a))。メモリ管理部30は、メモリ解放要求に基づいてメモリ領域を解放し、メモリ管理リスト50のノードを更新する(
図5(b))。
【0047】
次に、メモリ管理部30は、解放したメモリ領域に応じて、空きノード管理配列60へのノードの追加処理を実施する。メモリ管理部は、追加処理において、空きノード管理配列60にノードを追加できるか否かを判定し、追加できるノードがある場合、対象の配列Emptyにノードアドレスを追加する(
図5(c))。メモリ管理部30は、配列Emptyへのノードアドレスの追加処理の後、配列Emptyの更新処理を実施する(
図5(d))。空きノード管理配列60へのノードの追加処理は、
図5の空きノード管理配列60へのノードの追加処理と同様である。
【0048】
図6は、
図2のメモリ管理リスト50および空きノード管理配列60の別の例を示す図である。
図3と同様の要素については詳細な説明は省略する。画像データ記憶領域70およびメモリ管理リスト50において、確保済み(使用中)のメモリ領域は、網掛けで示される。
【0049】
説明を分かりやすくするため、
図6では、メモリ管理リスト50の各ノード(行)の自ノードアドレスおよび次ノードアドレスをアルファベットで示す。画像データ記憶領域70のメモリサイズは、1024KB(=1MB)であり、確保可能なメモリ領域の最小ブロックサイズは1KBであるとする。このため、空きノード管理配列60の配列Emptyの数は、8個である。画像データ記憶領域70の各メモリ領域のメモリサイズの後の括弧内に示すアルファベットは、対応するメモリ管理リスト50のノードのノードアドレスを示す。
【0050】
空きノード管理配列60において、空き領域のメモリサイズが8KBまでの配列Empty[0]には、3つの3KBの空き領域のうち、最も物理アドレスが小さい空き領域に対応するノードのノードアドレスAが格納される。例えば、ノードアドレスAに対応する空き領域が画像処理用に確保された場合、配列Empty[0]には、物理アドレスが次に小さい空き領域に対応するノードのノードアドレスCが格納される。
【0051】
空き領域のメモリサイズが17KBから32KBまでの配列Empty[2]には、20KBの空き領域に対応するノードのノードアドレスGが格納される。空き領域のメモリサイズが257KBから512KBまでの配列Empty[6]には、300KBの空き領域に対応するノードのノードアドレスIが格納される。空き領域のメモリサイズが513KBから1024KBまでの配列Empty[7]には、520KBの空き領域に対応するノードのノードアドレスMが格納される。
【0052】
空き領域のメモリサイズが65KBから128KBまでの配列Empty[4]には、128KBの空き領域に対応するノードのノードアドレスKは登録されない。これは、128KBより大きく、かつ、128Kの空き領域の物理アドレスより小さい物理アドレスに割り当てられた300KBの空き領域があるためである。これにより、例えば、20KBより大きく、128KB以下のメモリ領域のメモリ確保要求が発行された場合、物理アドレスが小さい300KBの空き領域から優先してメモリ領域を確保することができる。
【0053】
物理アドレスが小さい空き領域からメモリ領域を順に確保することで、画像データ記憶領域70において物理アドレスが小さい上位側の領域からメモリ領域を確保することができる。これにより、画像データ記憶領域70の全体にわたってメモリ領域が分散して確保される可能性を低くすることができ、メモリ管理部30によるメモリ領域の管理を容易にすることができる。
【0054】
図7は、
図6の状態において、画像制御部20から100KBのメモリ確保要求が発行された場合の状態の変化の例を示す図である。すなわち、
図7は、画像形成装置1のメモリ管理方法の一例を示す。
図7に示す太枠は、状態が変化したことを示す。メモリ確保要求を受信したメモリ管理部30は、例えば、空きノード管理配列60を配列Empty[0]から順に探索し、確保するメモリ領域のメモリサイズに対応する配列Empty[6]を見つける。そして、メモリ管理部30は、
図6に示す配列Empty[6]に格納されたノードアドレスIで示されるノードに対応する空き領域を使用してメモリ領域を確保することを決定する。以下では、ノードアドレスIで示されるノードは、ノードIとも称される。
【0055】
確保するメモリ領域のメモリサイズに対応する配列Emptyを見つけるまでの最大の探索回数は、配列Emptyの総数である。
図7に示す例では、メモリ管理部30は、空きノード管理配列60を最大で8回探索することにより、メモリ領域の確保に使用する空き領域の情報が登録されたノードを見つけることができる。
【0056】
メモリ管理部30は、メモリ管理リスト50を更新し、ノードIに対応する300KBの空き領域を使用して100KBのメモリ領域を確保し、空き領域の残りを200KBとする(
図7(a))。
図7に示す例では、メモリ管理部30は、100KBの使用領域の情報をノードIに格納し、200KBの空き領域の情報を新たに追加したノードNに格納する。
【0057】
次に、メモリ管理部30は、空きノード管理配列60の配列Empty[6]に"NULL"を格納することで、配列Empty[6]に設定されていた空き情報を削除する(
図7(b))。
【0058】
次に、メモリ管理部30は、空きノード管理配列60の配列Emptyへのノードの追加処理を実施する。メモリ管理部30は、メモリ管理リスト50を探索し、新たに空き領域となった200KBよりメモリサイズが大きい空き領域で、物理アドレスが200KBの物理アドレスより小さい空き領域が存在するか否かを判定する。
図7に示す例では、200KBよりメモリサイズが大きい空き領域で、物理アドレスが200KBの物理アドレスより小さい空き領域が存在しないため、メモリ管理部30は、200KBの空き領域を配列Empty[5]に登録する(
図7(c))。
【0059】
もし、200KBよりメモリサイズが大きい空き領域で、200KBの空き領域の物理アドレスより物理アドレスが小さい空き領域が存在する場合、メモリ管理部30は、200KBの空き領域に対応するノード情報を配列Empty[5]に登録しない。これにより、空き領域のメモリサイズにかかわりなく、物理アドレスが小さい空き領域から優先して空き領域を確保することができる。
【0060】
なお、配列Empty[5]に新たな200KBの空き領域の物理アドレスより物理アドレスが小さい空き領域に対応するノード情報が保持されている場合、メモリ管理部30は、配列Empty[5]に既に登録されているノード情報を維持する。また、配列Empty[5]に新たな200KBの空き領域の物理アドレスより物理アドレスが大きい空き領域に対応するノード情報が保持されている場合、メモリ管理部30は、200KBの空き領域に対応するノード情報を配列Empty[5]に登録する。これによっても、空き領域のメモリサイズにかかわりなく、物理アドレスが小さい空き領域から優先して空き領域を確保することができる。
【0061】
次に、メモリ管理部30は、空きノード管理配列60の配列Emptyの更新処理を実施する。メモリ管理部30は、メモリ管理リスト50を探索し、新たに空き領域となった200KBよりメモリサイズが小さい空き領域で、200KBの空き領域の物理アドレスより物理アドレスが大きい空き領域が存在するか否かを判定する。メモリ管理部30は、新たに空き領域となった200KBよりメモリサイズが小さい空き領域で、物理アドレスが200KBの空き領域の物理アドレスより大きい空き領域が存在する場合、その空き領域に対応するノードを配列Emptyから削除する。
【0062】
これにより、例えば、次に100KBの空き領域を確保するメモリ確保要求があった場合、物理アドレスが大きい空き領域でなく、メモリアドレスが小さい200KBの空き領域から100KBを確保することができる。すなわち、物理アドレスが小さい空き領域から優先して空き領域を確保することができる。
【0063】
図7に示す例では、200KBよりメモリサイズが小さい空き領域で、200KBの空き領域の物理アドレスより物理アドレスが大きい空き領域128KB(ノードK)が存在する。しかしながら、ノードKに対応する配列Empty[4]は"NULL"に設定されているため、メモリ管理部30は、配列Empty[4]の情報の削除処理を実施しない。そして、メモリ管理部30は、配列Emptyの更新処理を終了し、100KBのメモリ領域を確保する処理を完了する。
【0064】
図8は、
図7でのメモリ領域の確保後、さらに190KBのメモリ確保要求が発行された場合の状態の変化の例を示す図である。すなわち、
図8は、画像形成装置1のメモリ管理方法の一例を示す。
図7と同様の処理については、詳細な説明は省略する。
【0065】
メモリ確保要求を受信したメモリ管理部30は、空きノード管理配列60を探索し、確保する190KBのメモリ領域のメモリサイズに適合する配列Empty[5]を見つける。メモリ管理部30は、
図7に示す配列Empty[5]に格納されたノードアドレスNで示されるノードNに対応する空き領域を使用してメモリ領域を確保することを決定する。
【0066】
メモリ管理部30は、メモリ管理リスト50を更新し、ノードNに対応する200KBの空き領域を使用して190KBのメモリ領域を確保し、空き領域の残りを10KBにする(
図8(a))。
図8に示す例では、メモリ管理部30は、190KBの使用領域の情報をノードNに格納し、10KBの空き領域の情報を新たに追加したノードOに格納する。
【0067】
次に、メモリ管理部30は、空きノード管理配列60の配列Empty[5]に"NULL"を格納することで、配列Empty[5]に設定されていた空き情報を削除する(
図8(b))。
【0068】
次に、メモリ管理部30は、空きノード管理配列60の配列Emptyへのノードの追加処理を実施する。メモリ管理部30は、メモリ管理リスト50を探索し、新たに空き領域となった10KBよりメモリサイズが大きい空き領域で、10KBの空き領域の物理アドレスより物理アドレスが小さい空き領域が存在するか否かを判定する。
図8に示す例では、10KBよりメモリサイズが大きい20KBの空き領域で、10KBの空き領域の物理アドレスより物理アドレスが小さい空き領域(ノードG)が存在する。このため、メモリ管理部30は、10KBの空き領域を配列Empty[1]に登録せず、配列Empty[1]の"NULL"を維持する(
図8(c))。
【0069】
また、メモリ管理部30は、空き領域として空きノード管理配列60に登録されていないノードC、E、O、Kを抽出し、ノードC、E、O、Kのノードアドレスが配列Emptyに登録可能か否かを判定する。ノードC、Eが示す空き領域のサイズ(3KB)に対応する配列Empty[0]にはノードAのノードアドレスが登録されている。また、ノードAが示す空き領域の物理アドレスは、ノードC、Emptyが示す空き領域の物理アドレスより小さい。このため、メモリ管理部30は、ノードC、Eのノードアドレスを登録できないと判定する。
【0070】
メモリ管理部30は、ノードOを追加処理で配列Empty[1]に登録しないと判定したため、登録の判定対象から除外する。ノードKが示す空き領域のサイズ(128KB)に対応する配列Empty[4]にはノードアドレスが登録されていない(NULL)。ノードKが示す空き領域のメモリサイズ(128KB)と物理アドレスとは、他の空きノードに対するメモリサイズと物理アドレスとの関係を満たす。このため、メモリ管理部30は、ノードKのノードアドレスの配列Empty[4]への登録を決定し、登録する(
図8(d))。
【0071】
なお、メモリ管理部30は、配列Empty[4]に既に登録されているノードがある場合、物理アドレスが小さい空き領域に対応するノードを優先的に配列Empty[4]に登録する。例えば、メモリ管理部30は、配列Empty[4]にノードKの128KBの空き領域より物理アドレスが小さい65KBから128KBの範囲内の空き領域に対応するノードが登録されている場合、ノードKを配列Empty[4]に登録しない。一方、メモリ管理部30は、配列Empty[4]にノードKの128KBの空き領域より物理アドレスが大きい65KBから128KBの範囲内の空き領域に対応するノードが登録されている場合、ノードKを配列Empty[4]に登録する。
【0072】
次に、メモリ管理部30は、空きノード管理配列60の配列Emptyの更新処理を実施する。メモリ管理部30は、メモリ管理リスト50を探索し、新たに空き領域となった10KBよりメモリサイズが小さい空き領域で、物理アドレスが10KBの物理アドレスより大きい空き領域が存在するか否かを判定する。
図8に示す例では、10KBよりメモリサイズが小さい空き領域で、物理アドレスが10KBの物理アドレスより大きい空き領域は存在しない。このため、メモリ管理部30は、配列Emptyの更新処理を終了し、190KBのメモリ領域を確保する処理を完了する。
【0073】
以上、この実施形態では、最大で18個の空きノード管理配列60の配列Emptyを参照することで、メモリ領域を確保することができる。したがって、メモリ管理リスト50自体を探索する場合に比べて、メモリ領域の確保に要する時間を短縮することができる。すなわち、確保されたメモリ領域の数にかかわらずメモリ領域の確保に掛かる時間を短縮することができ、画像形成装置による画像処理速度の低下を抑止することができる。
【0074】
メモリ管理部30は、空きノード管理配列60において小さいメモリサイズに対応する配列Emptyから順に参照していく。このため、メモリサイズの小さいメモリ領域が大量に確保されている場合に、メモリ領域を確保するまでの時間を、メモリ管理リスト50のみを参照する場合に比べて短縮することができる。
【0075】
さらに、既存のメモリ管理リスト50をそのまま利用することができ、空きノード管理配列60の各配列Emptyのサイズは、4バイトで済むため、メモリコスト、変更コストを抑えて、空き領域を高速で探索することができる。
【0076】
空きノード管理配列60の配列Emptyに"NULL"が格納されていた場合にも、メモリ管理部30は、ノードアドレスが格納された配列Emptyを見つけるまで、配列Emptyの番号を順次インクリメントすることで、メモリ領域を確保することができる。
【0077】
新たな空き領域より物理アドレスが小さい空き領域に対応するノード情報が対応する配列Emptyに保持されている場合、メモリ管理部30は、当該配列Emptyに既に登録されているノード情報を維持する。また、新たな空き領域より物理アドレスが大きい空き領域に対応するノード情報が、対応する配列Emptyに保持されている場合、メモリ管理部30は、当該配列Emptyを新たな空き領域に対応するノード情報に書き換える。これにより、空き領域のメモリサイズにかかわりなく、物理アドレスが小さい空き領域から優先して空き領域を確保することができる。
【0078】
確保したメモリ領域よりメモリサイズが大きい配列Emptyに対応する登録済みの空き領域の物理アドレスが、確保したメモリ領域の物理アドレスより小さい場合、メモリ管理部30は、確保したメモリ領域を配列Emptyに登録しない。確保したメモリ領域よりメモリサイズが小さい配列Emptyに対応する登録済みの空き領域の物理アドレスが、確保したメモリ領域の物理アドレスより大きい場合、メモリ管理部30は、登録済みの空き領域を確保している配列Emptyを"NULL"に書き換える。これにより、空き領域のメモリサイズにかかわりなく、物理アドレスが小さい空き領域から優先して空き領域を確保することができる。
【0079】
以上、各実施形態に基づき本発明の説明を行ってきたが、上記実施形態に示した要件に本発明が限定されるものではない。これらの点に関しては、本発明の主旨をそこなわない範囲で変更することができ、その応用形態に応じて適切に定めることができる。
【符号の説明】
【0080】
1 画像形成装置
2 自動原稿送り装置
3 画像読み取り部
4 書き込みユニット
5 プリンタユニット
6 感光体ドラム
7 現像装置
8 搬送ベルト
9 定着装置
10 画像処理部
20 画像制御部
30 メモリ管理部
40 メモリ
50 メモリ管理リスト
60 空きノード管理配列
70 画像データ記憶領域
【先行技術文献】
【特許文献】
【0081】
【文献】特開平9-016463号公報
【文献】特開2010-204762号公報