(57)【要約】【課題】記録紙サイズが混在する場合にもフレームバッファメモリを複数のページで効率良く分割利用することのできるフレームバッファ管理方法を提供する。【解決手段】複数のバッファメモリ３０ａ、３０ｂを設け、各バッファメモリをリングバッファ的に使用するとともに、前回フレームバッファを取得したバッファメモリから今回要求されたサイズのフレームバッファを連続領域で取得できる場合は前回と同じバッファメモリからフレームバッファを取得し、前回フレームバッファを取得したバッファメモリから今回要求されたサイズのフレームバッファを連続領域で取得できない場合は前回と異なるバッファメモリからフレームバッファの取得を試みる。【選出図】図１【特許請求の範囲】
【請求項１】
イメージデータを格納するためのフレームバッファの取得および解放を管理するフレームバッファ管理方法において、
複数のバッファメモリを設け、
前回フレームバッファを取得したバッファメモリから今回要求されたサイズのフレームバッファを連続領域で取得できる場合は前回と同じバッファメモリからフレームバッファを取得し、前回フレームバッファを取得したバッファメモリから今回要求されたサイズのフレームバッファを連続領域で取得できない場合は前回と異なるバッファメモリからフレームバッファの取得を試みる
ことを特徴とするフレームバッファ管理方法。
【請求項２】
イメージデータを格納するためのフレームバッファの取得および解放を管理するフレームバッファ管理方法において、
複数のバッファメモリを設け、
前記各バッファメモリをリングバッファとして使用するとともに、
前回フレームバッファを取得したバッファメモリから今回要求されたサイズのフレームバッファを連続領域で取得できる場合は前回と同じバッファメモリからフレームバッファを取得し、前回フレームバッファを取得したバッファメモリから今回要求されたサイズのフレームバッファを連続領域で取得できない場合は前回と異なるバッファメモリからフレームバッファの取得を試みる
ことを特徴とするフレームバッファ管理方法。
【請求項３】
前記複数のバッファメモリを順序付けし、
前回と異なるバッファメモリからフレームバッファの取得を試みる際に、前回フレームバッファを取得したバッファメモリの次に順序付けされたものから順にバッファメモリを検索する
ことを特徴とする請求項１または２に記載のフレームバッファ管理方法。
【請求項４】
イメージデータを格納するためのフレームバッファの取得および解放を管理するフレームバッファ管理装置において、
複数のバッファメモリと、
前記バッファメモリからフレームバッファの取得とその解放を行なう管理手段とを備え、
前記管理手段は、前回フレームバッファを取得したバッファメモリから今回要求されたサイズのフレームバッファを連続領域で取得できる場合は前回と同じバッファメモリからフレームバッファを取得し、前回フレームバッファを取得したバッファメモリから今回要求されたサイズのフレームバッファを連続領域で取得できない場合は前回と異なるバッファメモリからフレームバッファの取得を試みる
ことを特徴とするフレームバッファ管理装置。
【請求項５】
イメージデータを格納するためのフレームバッファの取得および解放を管理するフレームバッファ管理装置において、
複数のバッファメモリと、
前記バッファメモリからフレームバッファの取得とその解放を行なう管理手段とを備え、  前記管理手段は、前記各バッファメモリをリングバッファとして使用するとともに、前回フレームバッファを取得したバッファメモリから今回要求されたサイズのフレームバッファを連続領域で取得できる場合は前回と同じバッファメモリからフレームバッファを取得し、前回フレームバッファを取得したバッファメモリから今回要求されたサイズのフレームバッファを連続領域で取得できない場合は前回と異なるバッファメモリからフレームバッファの取得を試みる
ことを特徴とするフレームバッファ管理装置。
【請求項６】
前記複数のバッファメモリを順序付けし、
前記管理手段は、前回と異なるバッファメモリからフレームバッファの取得を試みる際に、前回フレームバッファを取得したバッファメモリの次に順序付けされたものから順にバッファメモリを検索する
ことを特徴とする請求項４または５に記載のフレームバッファ管理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、イメージデータを格納するためのフレームバッファの取得および解放を管理するフレームバッファ管理方法およびフレームバッファ管理装置に関する。
【背景技術】
【０００２】
従来、ページプリンタなどの印刷装置では、ホストコンピュータ等から受信した印刷データを展開して作成したイメージデータを一旦ページ単位のフレームバッファに格納し、印刷部がこのフレームバッファからイメージデータを順次読み出して記録紙上に画像を形成するという手順で印刷処理が行なわれる。
【０００３】
フレームバッファは、当該ページプリンタで印刷可能な最大サイズの記録紙に対応した大きさを備えている。そこで、最大サイズより小さい記録紙に印刷するとき、フレームバッファの余った領域を他のページの格納に利用してフレームバッファ用のメモリ領域を有効活用するようにしたページプリンタが開示されている（たとえば、特許文献１参照。）。
【０００４】
また、フレームバッファの空きが不足した場合に、フレームバッファ上のイメージデータをハードディスク装置などの補助記憶装置に退避することでフレームバッファに空き領域を生成し、ここにイメージデータを展開して画像形成処理を継続可能にする技術がある（たとえば、特許文献２参照。）。
【０００５】
【特許文献１】特開平３−５３９６５号公報
【特許文献２】特開平６−１６８１８３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
小さいサイズの記録紙に印刷する際に１つのフレームバッファを複数のページ分のフレームバッファとして分割使用するものではフレームバッファをある程度有効利用することができる。しかし、記録紙には様々なサイズが存在するので、ページメモリの取得と解放を適切なアルゴリズムで行なわないと、空き領域が細切れになってフラグメンテーションが発生し、大きなサイズのフレームバッファが必要になった場合にそれをすぐに取得することが難しくなって、印刷処理が滞る場合が起きてしまう。
【０００７】
一方、ハードディスク装置などの補助記憶装置は、データの読み書き速度がフレームバッファに使用される半導体メモリに比べて一般に低速である。このため、空き領域が不足した場合にフレームバッファ上のイメージデータを補助記憶装置に退避すると、データの退避およびその復元に長い処理時間を要し、印刷のパフォーマンスが低下してしまう。また退避や復元に係る制御は複雑であった。
【０００８】
本発明は、上記の問題を解決しようとする課題にするものであり、記録紙サイズが混在する場合にもフレームバッファを複数のページで効率良く分割利用することのできるフレームバッファ管理方法及びフレームバッファ管理装置を提供することを目的としている。
【課題を解決するための手段】
【０００９】
請求項１に係る発明は、イメージデータを格納するためのフレームバッファの取得および解放を管理するフレームバッファ管理方法において、
複数のバッファメモリ（３０ａ、３０ｂ）を設け、
前回フレームバッファを取得したバッファメモリから今回要求されたサイズのフレームバッファを連続領域で取得できる場合は前回と同じバッファメモリからフレームバッファを取得し、前回フレームバッファを取得したバッファメモリから今回要求されたサイズのフレームバッファを連続領域で取得できない場合は前回と異なるバッファメモリからフレームバッファの取得を試みる
ことを特徴とするフレームバッファ管理方法である。
【００１０】
上記発明によれば、要求サイズのフレームバッファを前回と同じバッファメモリから取得できなくなった場合に初めて他のバッファメモリからの取得を試みる。これにより、大きいサイズのフレームバッファが必要になった場合にそれを他のバッファメモリから取得することが可能になる。各バッファメモリ内でフレームバッファを取得するためのアルゴリズムは任意でかまわない。たとえば、バッファメモリの先頭アドレスから空き領域を探してもよいし、バッファメモリをリングバッファのように使用して前回取得した次のアドレスから空き領域を探してもよい。
【００１１】
各バッファメモリは同一サイズであっても異なるサイズであってもよい。少なくとも１つのバッファメモリは、展開されるイメージデータの最大サイズ（プリンタにあっては、最大サイズの記録紙に対応する記憶容量）以上の記憶領域を備えたものとし、望ましくはその大きさの記憶領域をすべてのバッファメモリが備えるとよい。
【００１２】
バッファメモリの数は２以上であればいくつでもよい。バッファメモリが３つ以上存在する場合には、前回と異なるバッファメモリからフレームバッファの取得を試みる際の検索順序は、任意でも予め定めた特定の順序であってもよい。たとえば、バッファメモリを順序付けしておき、前回の取得したものを除いて先頭のものから順に検索したり、前回の次に順序付けされているものから順に複数のバッファメモリを一巡するよう検索したりするとよい。
【００１３】
請求項２に係る発明は、イメージデータを格納するためのフレームバッファの取得および解放を管理するフレームバッファ管理方法において、
複数のバッファメモリ（３０ａ、３０ｂ）を設け、
前記各バッファメモリをリングバッファとして使用するとともに、
前回フレームバッファを取得したバッファメモリから今回要求されたサイズのフレームバッファを連続領域で取得できる場合は前回と同じバッファメモリからフレームバッファを取得し、前回フレームバッファを取得したバッファメモリから今回要求されたサイズのフレームバッファを連続領域で取得できない場合は前回と異なるバッファメモリからフレームバッファの取得を試みる
ことを特徴とするフレームバッファ管理方法である。
【００１４】
上記発明によれば、前回と同じバッファメモリから要求サイズのフレームバッファを取得できなくなった場合に初めて他のバッファメモリからの取得を試みるとともに、各バッファメモリをリングバッファとして使用する。なお、フレームバッファとして物理的に連続する領域を取得する必要があるので、「リングバッファとして使用する」とは、記憶領域の先頭からフレームバッファを順次取得し、次に取得するフレームバッファがバッファメモリの後端を越えるときは、フレームバッファの先頭に戻ってそこから要求サイズのフレームバッファを取得するように使用することをいう。
【００１５】
通常、ページプリンタでは、展開手段がイメージデータをフレームバッファに格納したページ順に印刷手段がイメージデータをフレームバッファから読み出して印刷するので、取得された順にフレームバッファが解放される。したがって、各バッファメモリをリングバッファとして使用すれば、解放される領域が順次連続領域を形成して行くので、バッファメモリ内の空き領域が細切れにならず、大きなフレームバッファを確保し易くなる。
【００１６】
請求項３に係る発明は、前記複数のバッファメモリ（３０ａ、３０ｂ）を順序付けし、
前回と異なるバッファメモリからフレームバッファの取得を試みる際に、前回フレームバッファを取得したバッファメモリ（３０ａ、３０ｂ）の次に順序付けされたものから順にバッファメモリ（３０ａ、３０ｂ）を検索する
ことを特徴とする請求項１または２に記載のフレームバッファ管理方法である。
【００１７】
上記発明によれば、前回と同じバッファメモリから要求サイズのフレームバッファを取得できないとき、その次に順序付けされたバッファメモリを起点として複数のバッファメモリ（３０ａ、３０ｂ）を予め定めた順序に従って一巡するように検索してフレームバッファの取得を試みる。前回と同じバッファメモリから複数のバッファメモリ（３０ａ、３０ｂ）を巡回的に使用するので、最も昔にフレームバッファを取得したバッファメモリが次の検索対象になる。したがって、通常のページプリンタのように、取得した順にフレームバッファが解放される場合には、次に検索するバッファメモリが最もフレームバッファの解放が進んだものになるので、上記の順に検索することで、必要サイズのフレームバッファを取得するまでの処理時間が短縮される。
【００１８】
なお、取得した順にフレームバッファが解放され、かつ各バッファメモリのサイズが同一の場合には、前回と同じバッファメモリの次のバッファメモリから要求サイズのフレームバッファを取得できなかった時点でそれ以上の検索を中止し、取得不能で処理を終了してもよい。
【００１９】
請求項４に係る発明は、イメージデータを格納するためのフレームバッファの取得および解放を管理するフレームバッファ管理装置において、
複数のバッファメモリ（３０ａ、３０ｂ）と、
前記バッファメモリからフレームバッファの取得とその解放を行なう管理手段（２１）とを備え、  前記管理手段（２１）は、前回フレームバッファを取得したバッファメモリから今回要求されたサイズのフレームバッファを連続領域で取得できる場合は前回と同じバッファメモリからフレームバッファを取得し、前回フレームバッファを取得したバッファメモリから今回要求されたサイズのフレームバッファを連続領域で取得できない場合は前回と異なるバッファメモリからフレームバッファの取得を試みる
ことを特徴とするフレームバッファ管理装置である。
【００２０】
上記発明によれば、請求項１に記載の発明と同じく、要求サイズのフレームバッファを前回と同じバッファメモリから取得できなくなってから他のバッファメモリからの取得を試みる。これにより、大きいサイズのフレームバッファが必要になった場合にそれを他のバッファメモリから確保することが可能になる。
【００２１】
請求項５に係る発明は、イメージデータを格納するためのフレームバッファの取得および解放を管理するフレームバッファ管理装置において、
複数のバッファメモリ（３０ａ、３０ｂ）と、
前記バッファメモリからフレームバッファの取得とその解放を行なう管理手段（２１）とを備え、
前記管理手段（２１）は、前記各バッファメモリをリングバッファとして使用するとともに、前回フレームバッファを取得したバッファメモリから今回要求されたサイズのフレームバッファを連続領域で取得できる場合は前回と同じバッファメモリからフレームバッファを取得し、前回フレームバッファを取得したバッファメモリから今回要求されたサイズのフレームバッファを連続領域で取得できない場合は前回と異なるバッファメモリからフレームバッファの取得を試みる
ことを特徴とするフレームバッファ管理装置である。
【００２２】
上記発明によれば、請求項２に記載の発明と同じく、前回と同じバッファメモリから要求サイズのフレームバッファを取得できなくなってから他のバッファメモリからの取得を試みるとともに、各バッファメモリをリングバッファとして使用する。取得順に解放されるようにフレームバッファが使用される場合には、各バッファメモリをリングバッファとして使用することで、バッファメモリ内の空き領域が細切れにならずに大きなフレームバッファを確保し易くなる。
【００２３】
請求項６に係る発明は、前記複数のバッファメモリ（３０ａ、３０ｂ）を順序付けし、
前記管理手段（２１）は、前回と異なるバッファメモリからフレームバッファの取得を試みる際に、前回フレームバッファを取得したバッファメモリ（３０ａ、３０ｂ）の次に順序付けされたものから順にバッファメモリ（３０ａ、３０ｂ）を検索する
ことを特徴とする請求項４または５に記載のフレームバッファ管理装置である。
【００２４】
上記発明によれば、請求項３に記載の発明と同じく、前回と同じバッファメモリから要求サイズのフレームバッファを取得できないとき、その次に順序付けされたバッファメモリから順に検索して、フレームバッファの取得を試みるようになっている。
【発明の効果】
【００２５】
本発明に係るフレームバッファ管理方法およびフレームバッファ管理装置によれば、複数のバッファメモリを用意しておき、要求されたサイズのフレームバッファを前回と同じバッファメモリから取得できなくなったときに初めて前回と異なるバッファメモリからの取得を試みるので、大きいサイズのフレームバッファが必要になった場合にそれを他のバッファメモリから確保することが可能になり、記録紙サイズが混在する場合にもフレームバッファを複数のページで効率良く利用することができる。
【００２６】
またバッファメモリが有効利用される結果、フレームバッファを解放するために補助記憶装置にフレームバッファ上のイメージデータを退避したりこれを復元したりする処理の実行が不要もしくは頻度が低減し、印刷のパフォーマンス低下が防止される。
【００２７】
各バッファメモリをリングバッファとして使用するものでは、通常のページプリンタのようにフレームバッファが取得順に解放されると、解放される領域が順次連続領域を形成して行くので、バッファメモリ内の空き領域が細切れにならず、大きなフレームバッファを取得し易くなる。
【００２８】
前回と同じバッファメモリから要求サイズのフレームバッファを取得できないとき、その次に順序付けされたバッファメモリを起点として複数のバッファメモリを一巡するように検索してフレームバッファの取得を試みるものでは、通常のページプリンタのようにフレームバッファが取得順に解放されると、最もフレームバッファの解放が進んだバッファメモリから検索されるので、必要サイズのフレームバッファを取得するまでの処理時間が短縮される。
【発明を実施するための最良の形態】
【００２９】
以下、図面に基づき本発明の実施の形態を説明する。
【００３０】
図１は、本発明の実施の形態に係るフレームバッファ管理装置を含む印刷装置１０の構成を示している。印刷装置１０は、ＬＡＮ（ローカル・エリア・ネットワーク）などのネットワークを介してクライアントコンピュータ等の印刷データ送信装置から印刷データを受信し、これをイメージデータに展開し、対応する画像を記録紙に形成して出力する機能を備えている。
【００３１】
印刷装置１０は、制御部２０と、印刷部１１と、表示操作部１２と、補助記憶装置１３と、バッファメモリ３０と、通信部１４と、受信バッファ１５とを備えている。制御部２０は、当該装置全体の動作を統括制御する機能を果たし、図示省略のＣＰＵ（中央処理装置）とＲＯＭ（リード・オンリ・メモリ）とＲＡＭ（ランダム・アクセス・メモリ）とを主要部として構成されている。
【００３２】
印刷部１１は、電子写真プロセスによって記録紙上に画像を形成して出力する機能を果たす。印刷部１１は、記録紙の搬送装置と、感光体ドラムと、帯電装置と、レーザーユニットと、現像装置と、転写分離装置と、クリーニング装置と、定着装置とを有する、いわゆるレーザープリンタとして構成されている。表示操作部１２は、液晶ディスプレイと各種の操作スイッチから構成され、ユーザに各種の案内表示や状態表示を行なったり、ユーザから各種の入力操作を受け付けたりする機能を果たす。
【００３３】
通信部１４は、印刷データ送信装置から印刷データを受信する等の機能と、受信した印刷データを受信バッファ１５に格納する機能を果たす。補助記憶装置１３は、ハードディスク装置など大容量の記憶装置で構成され、印刷データやこれを展開した後のイメージデータを保存することができる。
【００３４】
制御部２０は、バッファ管理部２１とイメージ展開部２２としての機能を果たす。イメージ展開部２２は、通信部１４が受信した印刷データを解析してイメージデータに展開する。テキストデータのほか、各種のページディスクリプト言語に対応している。バッファメモリ３０は、イメージ展開部２２が展開したイメージデータを格納するメモリ領域である。ここでは第１バッファメモリ３０ａと第２バッファメモリ３０ｂの２つがあり、バッファ管理部２１はこれらの利用を管理する機能を果たす。印刷部１１は、バッファメモリ３０に格納されているイメージデータを読み出して、対応する画像を記録紙に形成して出力するようになっている。
【００３５】
第１バッファメモリ３０ａおよび第２バッファメモリ３０ｂは、ページ単位にイメージデータを格納するための１または２以上のフレームバッファとして使用される。第１バッファメモリ３０ａおよび第２バッファメモリ３０ｂはそれぞれ、印刷装置１０が印刷可能な最大サイズの記録紙に対応するイメージデータを格納し得る記憶容量を備えている。制御部２０は、印刷するページサイズに応じた大きさのフレームメモリをバッファメモリ３０から取得し、ここにイメージデータを展開して格納する。また印刷が完了したときそのページのイメージデータを格納していたフレームバッファを解放する。したがって、各バッファメモリ３０ａ、３０ｂから小さいフレームバッファを複数取得することができ、１つのバッファメモリを複数ページ分のフレームバッファとして分割使用することが可能になっている。
【００３６】
各バッファメモリ３０ａ、３０ｂには、それぞれを一意に特定するための識別情報としてのバッファＩＤを割り当ててある。ここではバッファＩＤとして第１バッファメモリ３０ａに「０」を、第２バッファメモリ３０ｂに「１」を付与してある。バッファＩＤは、バッファメモリを検索する際の順序を示す情報としても利用される。
【００３７】
バッファ管理部２１は、バッファメモリ３０ａ、３０ｂをリングバッファ的に使用するように管理する。バッファメモリ３０ａ、３０ｂのそれぞれについて、先頭アドレスと、後端アドレスと、読み出しアドレスと、書き込みアドレスと、読み出しアドレスの前方（後端アドレス側）にある取得済みのフレームバッファ数（前方フレーム数）と、読み出しアドレスの後方（先頭アドレス側）にある取得済みのフレームバッファ数（後方フレーム数）とを管理する。また前回フレームバッファを取得したバッファメモリのバッファＩＤ（最終取得バッファＩＤ）を記憶するようになっている。
【００３８】
図２は、フレームバッファが取得・解放される際のバッファメモリの状態変化の一例を示している。同図（ａ）に示す初期状態のバッファメモリ５１は、すべての領域が空き状態であり、読み出しアドレスと書き込みアドレスが共に先頭アドレスと一致し、前方フレーム数および後方フレーム数が共に「０」になっている。
【００３９】
同図（ｂ）に示すバッファメモリ５２は、１つ目のフレームバッファ５３を取得した状態を示している。フレームバッファ５３は、バッファメモリの先頭アドレスから取得され、書き込みアドレスは、取得したフレームバッファのサイズ分だけ加算される。また前方フレーム数は「＋１」されて「１」になる。
【００４０】
同図（ｃ）に示すバッファメモリ５４は、２つ目のフレームバッファ５５を取得した状態を示している、２つ目のフレームバッファ５５は、１つ目のフレームバッファ５３の前方（後端側）の空き領域よりもサイズが小さいので、１つ目のフレームバッファ５３の後端側に連続する領域に取得される。書き込みアドレスは、取得したフレームバッファのサイズ分だけ加算され、前方フレーム数は「＋１」されて「２」になる。
【００４１】
図３（ａ）に示すバッファメモリ５６は、図２（ｃ）の状態から１つ目のフレームバッファ５３が解放された様子を示している。読み出しアドレスが解放されたフレームバッファのサイズ分だけ加算され、前方フレーム数が「−１」されて「１」になっている。図３（ｂ）に示すバッファメモリ５７は、同図（ａ）に示す状態から３つ目のフレームバッファ５８を取得した様子を示している。３つ目のフレームバッファ５８は、２つ目のフレームバッファ５５の後端側にある空き領域５９よりもサイズが大きいので、当該バッファメモリ５７の先頭アドレスから取得される。これは、フレームバッファを物理的に連続領域として確保するためである。３つ目のフレームバッファ５８は、読み出しアドレスの後方（先頭側）に取得されたので、後方フレーム数は「＋１」されて「１」になる。
【００４２】
図４は、バッファメモリからフレームバッファを取得するためのフレーム取得メイン処理を示している。この処理では、今回要求されたサイズのバッファメモリが前回フレームバッファを取得したバッファメモリから取得可能か否かを調べ、可能な場合には前回と同じバッファメモリから取得する。一方、前回と同じバッファメモリから取得できないときは、次のバッファメモリから取得を試みるようになっている。このとき、前回フレームバッファを取得したバッファメモリの次に順序付けされているものから順に複数のバッファメモリが一巡するように検索される。
【００４３】
フレーム取得メイン処理には、その呼び出し元の処理からフレームバッファの要求サイズ（要求フレームサイズ）が引数として渡される。まず、記憶してある最終取得バッファＩＤを読み出してこれを変数ＩＤにセットする（ステップＳ１０１）。変数ＩＤとフレームバッファ数とを比較し前者が後者未満の場合は（ステップＳ１０２；Ｙ）、変数ＩＤと同じバッファＩＤのバッファメモリからフレームバッファの取得を試みるフレーム取得処理を実行する（ステップＳ１０３）。フレーム取得処理には、要求フレームサイズと変数ＩＤが引数として渡される。フレーム取得処理は、フレームバッファを取得できたときはその先頭アドレスを返り値として戻し、取得できないときは「ＮＵＬＬ」コードを返り値として戻すようになっている。
【００４４】
要求フレームサイズのフレームバッファを取得できたときは（ステップＳ１０４；Ｙ）処理を終了し（リターン）、取得できなかったときは（ステップＳ１０４；Ｎ）変数ＩＤを「＋１」して（ステップＳ１０５）ステップＳ１０２に戻る。すなわち、加算後の変数ＩＤがフレームバッファ数未満ならば変数ＩＤと同じバッファＩＤのバッファメモリからフレームバッファの取得を試みる（ステップＳ１０３）。なお、フレーム取得メイン処理は、最後に行なったフレーム取得処理の返り値と変数ＩＤを当該フレーム取得メイン処理の返り値として呼び出し元に戻すようになっている。
【００４５】
変数ＩＤがフレームバッファ数未満でないときは（ステップＳ１０２；Ｎ）、順序が末尾のバッファメモリまでフレームバッファの取得を試みたことになるので、変数ＩＤに「０」を代入し（ステップＳ１０６）、順序が先頭のバッファメモリに戻ってフレームバッファの取得を試みる。詳細には、変数ＩＤが最終取得バッファＩＤ未満か否かを判定し（ステップＳ１０７）、未満のときは（ステップＳ１０７；Ｙ）変数ＩＤが示すバッファメモリからフレームバッファを取得するようにフレーム取得処理を実行し（ステップＳ１０８）、取得できたときは（ステップＳ１０９；Ｙ）その時点で処理を終了する（リターン）。
【００４６】
取得できなかったときは（ステップＳ１０９；Ｎ）変数ＩＤを「＋１」して（ステップＳ１１０）、ステップＳ１０７に戻る。加算後の変数ＩＤが最終取得バッファＩＤ未満でなくなった場合は（ステップＳ１０７；Ｎ）、複数のバッファメモリを一巡しても要求サイズのフレームバッファを取得できなかったので、処理を終了する（リターン）。
【００４７】
図５は、フレーム取得処理の流れを示している。まず、返り値として使用されるフレームポインタに「ＮＵＬＬ」を代入しておく（ステップＳ２０１）。次に現在の読み出しアドレスが書き込みアドレス以下か否かを判断する（ステップＳ２０２）。読み出しアドレスが書き込みアドレス以下ならば、図６に示すように書き込みアドレスの後端側に空き領域７１が隣接して存在する。そこで、書き込みアドレスから後端までの空き領域７１が要求フレームサイズ以上あるときは（ステップＳ２０３；Ｙ）、書き込みアドレスを先頭とするフレームバッファを当該空き領域７１から取得する（ステップＳ２０４）。詳細には、返り値としてフレームポインタに書き込みアドレスを代入し、書き込みアドレスをこれに要求フレームサイズを加算した値に更新する。また読み出しアドレスよりも前方（後端側）にフレームバッファを取得したので、前方フレーム数を「＋１」する。
【００４８】
書き込みアドレスから後端までの空き領域７１が要求フレームサイズ以上無いときは（ステップＳ２０３；Ｎ）、図７に示すように、先頭アドレスから読み出しアドレスまでの間の空き領域７２から要求フレームサイズのフレームバッファが取得可能か否かを調べる（ステップＳ２０５）。空き領域７２が要求フレームサイズ以上あるときは（ステップＳ２０５；Ｙ）、当該バッファメモリの先頭アドレスからフレームバッファを取得する（ステップＳ２０６）。詳細には、返り値としてフレームポインタに先頭アドレスを代入し、書き込みアドレスを先頭アドレスに要求フレームサイズを加算した値に更新する。また読み出しアドレスの後方（先頭側）にフレームバッファを取得したので、後方フレーム数を「＋１」する。
【００４９】
読み出しアドレスが書き込みアドレス以下でないときは（ステップＳ２０２；Ｎ）、図８に示すように、書き込みアドレスから読み出しアドレスの手前までに空き領域７３が存在する。そこで、この空き領域７３が要求フレームサイズ以上存在するときは（ステップＳ２０７；Ｙ）、当該空き領域７３から要求フレームサイズのフレームバッファを取得する（ステップＳ２０８）。詳細には、返り値としてフレームポインタに書き込みアドレスを代入し、書き込みアドレスをこれに要求フレームサイズを加算した値に更新する。また読み出しアドレスの後方（先頭側）にフレームバッファを取得したので、後方フレーム数を「＋１」する。
【００５０】
図９は、フレームバッファを解放する処理の流れを示している。この処理には、解放するフレームバッファの属するバッファＩＤと解放するフレームバッファの先頭アドレス（解放フレームポインタ）と解放するフレームバッファのサイズ（解放フレームサイズ）とが呼び出し元の処理から引数として渡される。引数とされたバッファＩＤのバッファメモリに対して解放処理が行なわれる。
【００５１】
まず、解放フレームポインタの値が当該バッファメモリの読み出しアドレスと一致するか否かを調べ（ステップＳ３０１）、一致しないときは（ステップＳ３０１；Ｎ）、引数にエラーがあったことになるので、処理を終了する。なお、エラーコードなどを返り値として呼び出し元に戻すとよい。
【００５２】
解放フレームポインタの値が読み出しアドレスと一致するときは（ステップＳ３０１；Ｙ）読み出しアドレスをこれに解放フレームサイズを加算した値に更新し、かつ前方フレーム数を「−１」する。なお、取得時にフレームバッファが読み出しアドレスの後方（先頭側）にあった場合でも、読み出すときには、必ず読み出しアドレスの前方（後端側）に存在するので、解放時には前方フレーム数を減算する。
【００５３】
減算後も前方フレーム数が「０」でないときは（ステップＳ３０３；Ｎ）、後端側に隣接して取得済みのフレームバッファが存在し、かつこれが次に読み出されるフレームバッファになるので、ステップＳ３０２で解放のための処理は完了しており、そのままフレーム解放処理を終了する（リターン）。
【００５４】
減算の結果、前方フレーム数が「０」になったときは（ステップＳ３０３；Ｙ）、これ以上後端側に取得済みのフレームバッファが存在しないことになる。また今回解放したフレームバッファより先頭側に取得済みのフレームバッファが存在する場合でもそれらは当該バッファメモリの先頭アドレスから順に取得されているので、読み出しアドレスを当該バッファメモリの先頭アドレスに変更する（ステップＳ３０４）。
【００５５】
さらに後方フレーム数が「０」の場合は（ステップＳ３０５；Ｙ）、取得済みのフレームバッファが当該バッファメモリに１つも存在しないことになるので、書き込みアドレスを当該バッファメモリの先頭アドレスに更新してバッファメモリを初期状態に戻して（ステップＳ３０６）、フレーム解放処理を終了する（リターン）。
【００５６】
後方フレーム数が「０」でない場合は（ステップＳ３０５；Ｎ）、その数だけ取得済みのフレームバッファが当該バッファメモリに存在する。また読み出しアドレスは先頭アドレスに更新されているので、現存する取得済みのフレームバッファはすべて前方フレームになる。そこで後方フレーム数の値を前方フレーム数に代入し、かつ後方フレーム数を「０」にリセットして（ステップＳ３０７）、フレーム解放処理を終了する（リターン）。
【００５７】
ページプリンタでは、展開したイメージデータを格納したページ順に印刷部がイメージデータをフレームバッファから読み出して印刷するので、取得した順にフレームバッファが解放される。したがって、各バッファメモリを上記のようにリングバッファ的に使用することで、バッファメモリ内の空き領域が細切れにならず、大きなフレームバッファを確保し易くなる。また複数のバッファメモリを用意しておき、要求サイズのフレームバッファを前回と同じバッファメモリから取得できなくなってから他のバッファメモリからの取得を試みるので、大きいサイズのフレームバッファが必要になった場合にそれを他のバッファメモリから確保することが可能になる。
【００５８】
以上、本発明の実施の形態を図面によって説明してきたが、具体的な構成は実施の形態に示したものに限られるものではなく、本発明の要旨を逸脱しない範囲における変更や追加があっても本発明に含まれる。たとえば、実施の形態では、バッファメモリとして第１バッファメモリ３０ａと第２バッファメモリ３０ｂの２面を用意したが、３面あるいはそれ以上であってもかまわない。またバッファメモリ同士は同一サイズでなくてもよい。なお、少なくとも１つのバッファメモリは、最大サイズの記録紙に対応した大きさ以上に構成される。
【００５９】
実施の形態では、各処理の結果を返り値として呼び出し元に戻すようにしたが、呼び出し元から受け取ったアドレスポインタ等の示す領域に処理結果を格納するように構成してもよい。また本発明は、実施の形態で例示した印刷装置に限定されず、コピー機やファクシミリ装置など各種の画像形成装置に適用することができる。
【図面の簡単な説明】
【００６０】
【図１】本発明の実施の形態に係るフレームバッファ管理装置を適用した印刷装置の構成を示すブロック図である。
【図２】フレームバッファが取得・解放される際のバッファメモリの状況変化の一例を示す説明図である。
【図３】フレームバッファが取得・解放される際のバッファメモリの状況変化の一例であって図２の続きを示す説明図である。
【図４】本発明の実施の形態に係るフレームバッファ管理装置を適用した印刷装置が行なうフレーム取得メイン処理を示す流れ図である。
【図５】本発明の実施の形態に係るフレームバッファ管理装置を適用した印刷装置が行なうフレーム取得処理を示す流れ図である。
【図６】書き込みアドレスの後端側に空き領域が隣接して存在する状態のバッファメモリの一例を示す説明図である。
【図７】取得済みフレームバッファの両側に空き領域が存在する状態のバッファメモリの一例を示す説明図である。
【図８】書き込みアドレスから読み出しアドレスまでの間に空き領域が存在する状態のバッファメモリの一例を示す説明図である。
【図９】本発明の実施の形態に係るフレームバッファ管理装置を適用した印刷装置が行なうフレーム解放処理を示す流れ図である。
【符号の説明】
【００６１】
１０…印刷装置
１１…印刷部
１２…表示操作部
１３…補助記憶装置
１４…通信部
１５…受信バッファ
２０…制御部
２１…バッファ管理部
２２…イメージ展開部
３０…バッファメモリ
３０ａ…第１バッファメモリ
３０ｂ…第２バッファメモリ
５１…初期状態のバッファメモリ
５２…バッファメモリ
５３…１つ目のフレームバッファ
５４…バッファメモリ
５５…２つ目のフレームバッファ
５６…バッファメモリ
５７…バッファメモリ
５８…３つ目のフレームバッファ
５９…空き領域
７１…書き込みアドレスから後端までの空き領域
７２…先頭アドレスから読み出しアドレスまでの空き領域
７３…書き込みアドレスから読み出しアドレスまでの空き領域
【図１】
2005073004.tif 000002
【図２】
2005073004.tif 000003
【図３】
2005073004.tif 000004
【図４】
2005073004.tif 000005
【図５】
2005073004.tif 000006
【図６】
2005073004.tif 000007
【図７】
2005073004.tif 000008
【図８】
2005073004.tif 000009
【図９】
2005073004.tif 000010