トップ :: G 物理学 :: G06 計算;計数




【発明の名称】 バッファ管理方法及びデータ処理装置
【発明者】 【氏名】須藤 日出夫

【要約】 【課題】連続する未使用のブロックの検出を必要とするたび毎に、未使用のブロックの個数を計数することから、未使用の連続ブロックの検出に多大な時間を要する。

【解決手段】少なくとも1つのブロックが使用されている使用状態から未使用状態に変化することにより生じた、連続する未使用のブロックのうちの少なくとも一つのブロックに対応する情報領域に、連続する当該ブロックの個数を示す個数情報を書き込み、バッファにデータを書き込むために複数のブロックが必要であると判断されたときに、管理テーブルの情報領域の個数情報に基づいて、書き込むべき連続する未使用のブロックを指定する。
【特許請求の範囲】
【請求項1】 データを処理するためのデータ処理装置であって外部からのデータを内部処理のために一時的に格納するためのメモリー領域が複数のブロックに区画されたバッファと、それぞれが対応する各前記ブロックがデータの格納のために使用されているか否かを表す使用情報が書き換え可能に書き込まれる複数の情報領域から成る管理テーブルとを備えるデータ処理装置において前記バッファを管理する方法であって、少なくとも1つの前記ブロックが使用されている使用状態から未使用状態に変化することにより生じた、連続する未使用のブロックのうちの少なくとも一つのブロックに対応する前記情報領域に、連続する当該ブロックの個数を示す個数情報を書き込む書込ステップと、前記バッファにデータを書き込むために複数のブロックが必要であると判断されたときに、前記管理テーブルの前記情報領域の個数情報に基づいて、書き込むべき連続する未使用のブロックを指定する指定ステップとを含むことを特徴とするバッファ管理方法。
【請求項2】 前記指定ステップは、前記した連続する未使用のブロックの先頭ブロックを特定するための先頭ブロック情報および連続する未使用の該ブロックの個数を示すブロック数情報を予め格納する管理レジスタが提供する前記先頭ブロック情報および前記ブロック数情報を参照して、前記データを書き込むべき連続する未使用のブロックを指定することを特徴とする請求項1記載のバッファ管理方法。
【請求項3】 前記書込ステップは、連続する未使用のブロックに隣り合う他の未使用なブロックを包含することにより、新たな連続する未使用のブロックを生成し、該ブロックの先頭ブロックの前記個数情報を書き換えることを備えることを特徴とする請求項1記載のバッファ管理方法。
【請求項4】 前記した未使用のブロックの包含による新たな連続する未使用なブロックの生成は、データを格納すべく指定された連続する未使用のブロックの個数の履歴に応じて実行されることを特徴とする請求項3記載のバッファ管理方法。
【請求項5】 前記した未使用なブロックの包含による新たな連続する未使用なブロックの生成は、未使用の複数のブロックの分布に応じて実行されることを特徴とする請求項3記載のバッファ管理方法。
【請求項6】 前記指定ステップは、連続する未使用のブロックのうち、その先頭または後尾に単独の未使用のブロックの生成を回避して、必要な個数のブロックを指定することを特徴とする請求項1記載のバッファ管理方法。
【請求項7】 データを処理すべく、外部からのデータを内部処理のために一時的に格納するためのメモリー領域が複数のブロックに区画されたバッファと、それぞれが対応する各前記ブロックがデータの格納のために使用されているか否かを表す使用情報が書き換え可能に書き込まれる複数の情報領域から成る管理テーブルとを備えるデータ処理装置であって、それぞれが前記バッファ及び前記管理テーブルのために用いられる複数の記憶部を含み、各記憶部の前記バッファに用いられる領域および前記管理テーブルに用いられる領域の配置は、各記憶部でそれぞれ互いに同一であることを特徴とするデータ処理装置。
【請求項8】 前記各記憶部における前記バッファに用いられる領域および前記管理テーブルに用いられる領域におけるそれぞれの前記ブロックおよび情報領域の配置は、各記憶部でそれぞれ互いに同一であることを特徴とする請求項7記載のデータ処理装置。
【請求項9】 前記情報領域は、連続するブロックが使用されている使用状態から未使用状態に変化したときに、連続する未使用のブロックのうちの少なくとも一つのブロックに対応する前記情報領域に連続する当該ブロックの個数を示す個数情報を書き込まれることを特徴とする請求項7記載のデータ処理装置。
【請求項10】 さらに、連続するブロックが格納された使用状態から未使用状態に変化したときに、連続する当該ブロックのうちの少なくとも一つのブロックに対応する前記情報領域に連続する未使用の前記ブロックの個数を示す個数情報を書き込み、かつ前記バッファにデータを書き込むために複数のブロックが必要であると判断されたときに、前記管理テーブルの前記情報領域の個数情報に基づいて、書き込むべき連続する未使用のブロックを指定する制御部を含むことを特徴とする請求項7記載のデータ処理装置。
【発明の詳細な説明】【0001】
【発明の属する技術分野】本発明は、プリンタのようなデータ処理装置に処理すべきデータを一時的に格納するために組み込まれるバッファを管理するバッファ管理方法および該管理方法を使用するデータ処理装置に関する。
【0002】
【従来の技術】プリンタは、コンピュータから受信する印刷用、制御用、監視用等の様々な種類のデータを円滑に処理すべく、複数のアプリケーション・プログラムを有する。受信されたデータは、その種類に応じたアプリケーション・プログラムによって処理される。しかしながら、アプリケーション・プログラムがデータを処理するタイミングは互いに異なることから、先に受信されたデータが後に受信されたデータよりも先に処理されるとは限らない。そこで、このようなタイミングの相違を補完すべく、バッファが用いられている。
【0003】バッファは、複数のブロックから構成される。プリンタが受信したデータは、バッファの未使用のブロックに次々に格納され、また、ブロックに格納された受信データがアプリケーション・プログラムによって処理のために読み出されると、そのブロックは、未使用状態に戻る。しかしながら、データの読み出し時の相違に起因して、使用中のブロックと未使用のブロックとが入り交じって存在する虫食い状態が生じ、未使用状態のブロックの連続性は損なわれやすい。
【0004】データの高速処理には、データを連続するブロックに格納することが望ましい。そこで、従来、データの書込みに複数のブロックを要する場合、各ブロックが使用中か否かを個々にチェックすることにより、未使用のブロックを見つけ出し、さらに、見つけ出された未使用のブロックのうち連続する未使用のブロックの個数を計数することにより、必要な個数の連続する未使用のブロックを検出する。
【0005】
【発明が解決しようとする課題】しかしながら、このような従来の方法では、連続する未使用のブロックの検出を必要とするたび毎に、連続する未使用のブロックの個数を計数する必要があり、そのために未使用の連続ブロックの検出に多大な時間を要するという問題があった。
【0006】
【課題を解決するための手段】上記の問題を解決するために、本発明に係るバッファ管理方法は、データを処理するためのデータ処理装置であって外部からのデータを内部処理のために一時的に格納するためのメモリー領域が複数のブロックに区画されたバッファと、それぞれが対応する各ブロックがデータの格納のために使用されているか否かを表す使用情報が書き換え可能に書き込まれる複数の情報領域から成る管理テーブルとを備えるデータ処理装置において、少なくとも1つのブロックが使用されている使用状態から未使用状態に変化することにより生じた、連続する未使用のブロックのうちの少なくとも一つのブロックに対応する情報領域に、連続するブロックの個数を示す個数情報を書き込む書込ステップと、バッファにデータを書き込むために複数のブロックが必要であると判断されたときに、管理テーブルの情報領域の個数情報に基づいて、書き込むべき連続する未使用のブロックを指定する指定ステップとを含むことを特徴とする。
【0007】指定ステップでは、連続する未使用のブロックの先頭ブロックを特定するための先頭ブロック情報および連続する未使用のブロックの個数を示すブロック数情報を予め格納する管理レジスタが提供する先頭ブロック情報およびブロック数情報を参照して、データを書き込むべき連続する未使用のブロックを指定することが望ましい。
【0008】書込ステップは、連続する未使用のブロックに隣り合う他の未使用なブロックを包含することにより、新たな連続する未使用のブロックを生成し、ブロックの先頭ブロックの個数情報を書き換えることを備えることが望ましい。未使用のブロックの包含による新たな連続する未使用なブロックの生成は、データを格納すべく指定された連続する未使用のブロックの個数の履歴に応じて実行されること、及び未使用の複数のブロックの分布に応じて実行されることがさらに望ましい。
【0009】指定ステップでは、連続する未使用のブロックのうち、その先頭または後尾に単独の未使用のブロックの生成を回避して、必要な個数のブロックを指定することが望ましい。
【0010】また、本発明に係るデータ処理装置は、データを処理すべく、外部からのデータを内部処理のために一時的に格納するためのメモリー領域が複数のブロックに区画されたバッファと、それぞれが対応する各ブロックがデータの格納のために使用されているか否かを表す使用情報が書き換え可能に書き込まれる複数の情報領域から成る管理テーブルとを備えるデータ処理装置であって、それぞれがバッファ及び管理テーブルのために用いられる複数の記憶部を含み、各記憶部のバッファに用いられる領域および管理テーブルに用いられる領域の配置は、各記憶部でそれぞれ互いに同一であることを特徴とする。
【0011】各記憶部におけるバッファに用いられる領域および管理テーブルに用いられる領域におけるそれぞれのブロックおよび情報領域の配置は、各記憶部でそれぞれ互いに同一であることが望ましい。
【0012】情報領域は、連続するブロックが使用されている使用状態から未使用状態に変化したときに、連続する未使用のブロックのうちの少なくとも一つのブロックに対応する情報領域に連続するブロックの個数を示す個数情報を書き込まれることが望ましい。
【0013】さらに、連続するブロックが格納された使用状態から未使用状態に変化したときに、連続するブロックのうちの少なくとも一つのブロックに対応する情報領域に連続する未使用のブロックの個数を示す個数情報を書き込み、かつバッファにデータを書き込むために複数のブロックが必要であると判断されたときに、管理テーブルの情報領域の個数情報に基づいて、書き込むべき連続する未使用のブロックを指定する制御部を含むことが望ましい。
【0014】
【発明の実施の形態】本発明のバッファ管理方法を使用したデータ処理装置として、具体例のプリンタについて説明する。図1は、具体例のプリンタの構成を示す。プリンタ1は、図1に示されているように、記憶ユニット2、制御ユニット3及びプリンタ機能ユニット4を含む。記憶ユニット2は、プリンタ1に接続されたコンピュータやワークステーション(図示せず)から受信するデータを一時的に格納する。制御ユニット3は、記憶ユニット2およびプリンタ機能ユニット4を制御する。プリンタ機能ユニット4は、印刷に必要な種々の処理を行う。
【0015】記憶ユニット2は、記憶部2A〜2Cを有する。記憶部2A〜2Cは、互いに同一な構成を有することから、説明を簡略にすべく、以下、記憶部2Aのみを詳述する。記憶部2Aは、バッファ20、管理テーブル21、先頭ブロック管理レジスタ22及び記憶部管理レジスタ23を有する。
【0016】図2は、バッファの構成を示す。バッファ20は、プリンタ1が受信したデータを格納するために用いられ、図2に示されているように、区画された複数のブロックB0〜B31から構成されている。受信したデータは、1または2以上の、データが格納されていないすなわち未使用のブロックに格納される。データの格納に2以上のブロックを必要とするときには、離散する複数のブロックにデータを分割して格納してもよく、また、連続するブロックに一括して格納してもよい。データの高速処理の観点からは、後者が望ましい。
【0017】図3は、管理テーブルの構成を示す。管理テーブル21は、該管理テーブルに対応するバッファ20の使用状況を管理するために設けられている。管理テーブル21は、図3に示されているように、バッファ20のブロックB0〜B31に対応する複数の情報領域i0〜i31から構成されている。
【0018】図4は、情報領域の構成を示す。各情報領域iには、該情報領域に対応するブロックの使用および未使用に拘わらず、当該ブロックについての情報が書き込まれる。すなわち、情報領域iには、図4に示されているように、リンク・ポインタLP、ブロック個数BN、使用/未使用フラグFL、ブロック・アドレスBA、データ・サイズDS及びデータ・ポインタDPの各情報が格納されている。
【0019】リンク・ポインタLPは、従来から知られているように、使用中および未使用のそれぞれのブロック同士を関連付けるために用いられる。具体的には、リンク・ポインタLPは、相互に離れた位置にある使用中のブロックの検索を容易とすべく、これらのブロックを関連付け、また相互に離れた位置にある未使用のブロックの検索を容易とすべく、これらのブロックを関連付ける。
【0020】ブロック個数BNは、連続する使用中のブロックの個数または連続する未使用のブロックの個数を示す。連続するブロックの場合、当該ブロックの個数は、少なくとも、その先頭に位置する先頭ブロックに対応する情報領域中のブロック個数BNによって示される。なお、連続しないブロック、すなわち、単独のブロックの場合、ブロック個数BNは、「1」を示す。
【0021】使用/未使用フラグFL、ブロック・アドレスBAおよびデータ・サイズDSは、従来知られている機能を果たすべく用いられる。すなわち、使用/未使用フラグFLは、当該情報領域に対応するブロックが使用されているか否かを示す。使用されているときには、「使用中」を示し、使用されていないときには、「未使用」を示す。ブロック・アドレスBAは、当該情報領域に対応するブロックのアドレスを示す。より具体的には、例えば、当該ブロックの領域が有する複数のアドレスのうち先頭のアドレスを示す。データ・サイズDSは、当該情報領域に対応するブロックに格納されているデータの大きさを示す。したがって、プリンタ1が受信したデータが1ブロックより大きいか否かに拘わらず、データ・サイズDSは、ブロックの大きさ以下である。
【0022】データ・ポインタDPは、受信データが複数のブロックにまたがって記憶されているときに該ブロックを示す。制御ユニット3は、受信データの先頭部分が記憶されたブロックについての読み出しを行った後、該ブロックのデータ・ポインタDPを参照することにより受信データの次の部分が記憶されたブロックについて読み出しを行うというように、データ・ポインタDPに従ってブロックからの読み出しを次々に行うことにより、ブロック・サイズより大きい受信データの読み出しを行うことができる。
【0023】図5は、バッファの使用状態の例を示す。図5において、斜線が施されたブロックは使用中であることを示す。例えば、ブロックB8、B9、B13は使用中であり、ブロックB0〜B7、B10〜B12、B14は未使用であることを示す。
【0024】図6は、使用中のブロック同士および未使用のブロック同士のそれぞれの関係を示す。先頭ブロック管理レジスタ22は、該管理レジスタに対応するバッファ20における使用中のブロックのうち先頭に位置する使用中のブロックおよび未使用のブロックのうち先頭に位置する未使用のブロックを管理するために用いられる。先頭ブロック管理レジスタ22は、使用中ブロック・ポインタ22Aにより、先頭位置にある使用中のブロックを示し、また、未使用ブロック・ポインタ22Bにより先頭位置にある未使用のブロックを示す。
【0025】図5に示されるバッファ20の使用状態について、図6に示されているように、使用中ブロック・ポインタ22Aは、バッファ20内の先頭に位置する使用中のブロックである「ブロックB8」を示し、ブロックB8に対応する情報領域i8中のリンク・ポインタLPは、後に続く離れた位置にある使用中のブロックである「ブロックB13」を示し、ブロックB13に対応する情報領域i13中のリンク・ポインタLPは、後に続く離れた位置にある使用中のブロックである「ブロックB15」を示し、ブロックB15に対応する情報領域i15中のリンク・ポインタLPは、後に続く離れた位置にある使用中のブロックである「ブロックB21」を示す。
【0026】また、ブロックB8に対応する情報領域i8中のブロック個数BNは、使用中の2個のブロックB8、B9の存在を表すべく「2」であり、ブロックB13に対応する情報領域i13中のブロック個数BNは、使用中の1個のブロックB13の存在を表すべく「1」であり、ブロックB15に対応する情報領域i15中のブロック個数BNは、使用中の2個のブロックB15、B16の存在を表すべく「2」である。
【0027】他方、未使用ブロック・ポインタ22Bは、バッファ20内の先頭に位置する未使用のブロックである「ブロックB0」を示し、ブロックB0に対応する情報領域i0中のリンク・ポインタLPは、後に続く離れた位置にある未使用のブロックである「ブロックB10」を示し、ブロックB10に対応する情報領域i10中のリンク・ポインタLPは、後に続く離れた位置にある未使用のブロックである「ブロックB14」を示し、ブロックB14に対応する情報領域i14中のリンク・ポインタLPは、後に続く離れた位置にある未使用のブロックB17を示す。
【0028】また、ブロックB0に対応する情報領域i0中のブロック個数BNは、未使用の8個のブロックB0〜B7の存在を表すべく「8」であり、ブロックB10に対応する情報領域i10中のブロック個数BNは、未使用の3個のブロックB10〜B12の存在を表すべく「3」であり、ブロックB14に対応する情報領域i14中のブロック個数BNは、未使用の1個のブロックB14の存在を表すべく「1」である。
【0029】このような使用中ブロック・ポインタ22A、未使用ブロック・ポインタ22Bおよびリンク・ポインタLPにより、使用中または未使用のブロックを容易に検索することができる。また、このようなブロック個数BNにより、ブロックの個数を容易に認識することが可能になる。
【0030】図7は、記憶部管理レジスタを示す。記憶部管理レジスタ23は、記憶部2A自身及び記憶部2Aと記憶部2Bとの関係を示すべく、図7に示されているように、未使用ブロック数23A、使用ブロック数23B及び後続記憶部ポインタ23Cを有する。未使用ブロック数23A及び使用ブロック数23Bは、記憶部2Aのバッファ20内のブロックB0〜B31のうち使用中のブロックの個数、及び未使用のブロックの個数をそれぞれ示す。後続記憶部ポインタ23Cは、記憶部2Aに続く記憶部2Bの位置を示す。より具体的には、記憶部2Bの領域の先頭のアドレス、すなわち、記憶部2Bのバッファ20のブロックB0の先頭のアドレスを示す。
【0031】記憶部2A〜2Cが、バッファ20及び管理テーブル21の領域をそれぞれ同様に割り当てられ、かつ図7に示される記憶部管理レジスタ23を備えることから、制御ユニット3は、これらの記憶部2A〜2Cを何ら管理手順を異にすることなく、単一の管理手順により管理することが可能になる。さらに、例えば、記憶部2Cの後段に記憶部2A〜2Cと同様なバッファ20、管理テーブル21、記憶部管理レジスタ23が割り当てられた記憶部を増設したときには、その記憶部を記憶部2A〜2Cを管理する手順と同様な手順で管理することが可能になる。
【0032】図8は、具体例のプリンタのバッファの指定手順を示す。以下、図5のバッファの使用状態の例を前提に、図8に沿って動作を説明する。説明及び理解を容易とすべく、受信したデータを格納するために5個の連続する未使用のブロックが必要である場合を想定する。
【0033】ステップS100:データの書き込みに必要な個数の未使用ブロックを確保すべく、制御ユニット3は、未使用のブロックを検索する。この未使用ブロックの検索のために、制御ユニット3は、先頭ブロック管理レジスタ22中の未使用ブロック・ポインタ22Bを参照する。図6に示されるように未使用ブロック・ポインタ22BがブロックB0を示すことから、制御ユニット3は、ブロックB0がバッファ20内の最も若いアドレスを有する未使用のブロックであると認識する。
【0034】制御ユニット3は、次に、管理テーブル21の対応する情報領域iのブロック個数BNを参照する。ブロックB0のブロック個数BNが8を示すことから、制御ユニット3は、ブロックB0を連続するブロック中の先頭ブロックとする当該連続するブロックの個数が8個であることを認識する。言い換えれば、ブロックB0〜B7が未使用であることを知る。
【0035】ステップS110:制御ユニット3は、ステップS100で認識したブロックの個数が、データを格納するために必要な個数以上であるか否かを判断する。制御ユニット3は、連続する未使用のブロックB0〜B7の個数が8個であり、また、データを格納するために必要なブロックの個数が5個であることから、連続する未使用のブロックB0〜B7の個数が、データを格納するために必要なブロックの個数以上であると判断する。
【0036】ステップS120:制御ユニット3は、ステップS110で、連続する未使用のブロックの個数が、データを格納するために必要な個数以上であると判断したとき、その連続する未使用のブロックをデータの格納のためのブロックとして指定する。ここで、制御ユニット3は、連続する8個の未使用のブロックB0〜B7のうち、例えば、連続する5個の未使用のブロックB0〜B4をデータを格納するためのブロックとして指定し、また、残りの3個のブロックB5〜B7を未使用のままに維持する。すなわち、前者のブロック列の先頭ブロックであるブロックB0及び後尾のブロックであるブロックB4のブロック個数BNを「5」に書き換え、また、後者のブロック列の先頭ブロックであるブロックB5及び後尾のブロックであるブロックB7のブロック個数BNを「3」に書き換える。
【0037】ステップS130:制御ユニット3は、ステップS110で、連続する未使用のブロックの個数が、データを格納するために必要な個数未満であると判断したとき、例えば、当該連続する未使用のブロックよりも後方に位置する他の連続する未使用のブロックを検索する。すなわち、制御ユニット3は、データを格納するために必要なブロックの個数未満であると判断された連続する未使用のブロックの先頭ブロックのリンク・ポインタLPを参照して、当該連続するブロックの後に離れて位置する未使用のブロックを認識し、認識したブロックのブロック個数BNを参照することによりブロックの個数を認識する。
【0038】データを格納するために必要なブロックの個数以上であると判断したときには、その連続する未使用のブロックをデータの格納のためのブロックとして指定する。他方、データを格納するために必要なブロックの個数未満であると判断したときには、上記と同様に、当該ブロックのリンク・ポインタLPを参照することにより、当該ブロックの後に離れて位置するブロックを検索する。
【0039】このような検索の繰り返しによっても、必要とするブロックの個数以上の未使用のブロックを指定できないときには、制御ユニット3は、必要なブロックの個数未満の個数の連続する未使用のブロックを指定し、かつ不足分に相当する個数の他の未使用のブロックを指定する。
【0040】なお、データを格納するために必要なブロックの個数以上の連続する未使用のブロックを繰り返し検索することなく、直ちに、必要なブロックの個数未満の未使用のブロック及び不足分の個数の未使用のブロックを検索し、それらのブロックを指定してもよい。
【0041】ステップS140:制御ユニット3は、ステップS120の処理に続いて、ブロックB0〜B4の先頭ブロックB0及び後尾ブロックB4の使用/未使用フラグFLをそれぞれ「使用中」に書き換える。また、ブロックB5〜B7の先頭ブロックB5の使用/未使用フラグFLを「未使用」に書き換える。
【0042】ステップS150:制御ユニット3は、ステップS140の処理に続き、受信データを、ブロックB0を先頭とするブロックB0〜B5に格納することから、使用中ブロック・ポインタ22Aを「ブロックB0」に書き換え、また、ブロックB0のリンク・ポインタLPを「ブロックB8」に書き換える。さらに、未使用ブロック・ポインタ22Bを「ブロックB5」に書き換え、ブロックB5のリンク・ポインタLPを「ブロックB10」に書き換える。これにより、先頭ブロック管理レジスタ22及び情報領域iは、図10の状態から図11の状態へ移行する。
【0043】図9は、具体例のプリンタのバッファの指定の解除手順を示す。以下、図5に示すバッファの使用状態の例を前提に、図9に沿って動作を説明する。説明及び理解を容易とすべく、図5に示されているように、連続する2個の使用中のブロックB8、B9に格納されたデータが読み出され、それらのブロックB8、B9の指定を解除する必要が生じたことを想定する。
【0044】ステップS200:制御ユニット3は、指定を解除すべきブロックに続くブロックが使用中か否かを判断する。すなわち、制御ユニット3は、ブロックB9の後に続くブロックB10の使用/未使用フラグFLを参照して、ブロックB10が使用中か否かを判断する。
【0045】ステップS210:指定を解除すべきブロックの後に続くブロックが「未使用」であるときには、制御ユニット3は、当該後に続くブロックのブロック個数BNを参照して、指定を解除すべきブロックと当該後に続くブロックとを連結する。すなわち、制御ユニット3は、ブロックB10のブロック個数BNを参照して、ブロックB10を先頭ブロックとする3個の連続する未使用のブロックB10〜B12が存在することを認識し、ブロックB8、B9及びブロックB10〜B12を連結し、これにより、新たに5個の連続する未使用のブロックB8〜B12を生成する。
【0046】ステップS220:制御ユニット3は、連結後の新たに生成された連続するブロックの先頭ブロックのブロック個数BNを書き換える。すなわち、制御ユニット3は、先頭ブロックであるブロックB8のブロック個数BNを「2」から「5」に書き換え、また、後尾ブロックであるブロックB12のブロック個数BNを「3」から「5」に書き換える。
【0047】ステップS230:制御ユニット3は、指定を解除したブロックの使用/未使用フラグFLを「未使用」に書き換える。すなわち、制御ユニット3は、ブロックB8、B9の使用/未使用フラグFLを「使用中」から「未使用」に書き換える。
【0048】ステップS240:制御ユニット3は、連結後の新たに生成された連続するブロックについて、リンク・ポインタLPを書き換える。すなわち、制御ユニット3は、「ブロックB10」を示しているブロックB0のリンク・ポインタLPを「ブロックB8」に書き換え、また、ブロックB8のリンク・ポインタLPの「ブロックB13」を「ブロックB14」に書き換える。この結果、未使用のブロックまたは連続する未使用のブロックの先頭ブロックが、ブロックB0、ブロックB8、ブロックB14のように関連付けられる。
【0049】また、制御ユニット3は、使用中ブロック・ポインタ22Aを「ブロックB13」に書き換える。この結果、使用中のブロックまたは連続する使用中のブロックの先頭ブロックが、ブロックB13、B15、ブロックB21のように関連付けられる。これにより、先頭ブロック管理レジスタ22及び情報領域iは、図10の状態から図12の状態に移行する。
【0050】ステップS250:制御ユニット3は、ステップS200での判断の結果、後に続くブロックが「使用中」であるときには、制御ユニット3は、ステップS210の連結やステップS220のブロックの個数の書き換えを行うことなく、指定を解除すべきブロックの使用/未使用フラグFLを「使用中」から「未使用」に書き換える。この結果、ブロックB8、B9の先頭ブロックであるブロックB8のブロック個数BNは、「2」に維持される。
【0051】ステップS260:制御ユニット3は、ステップS250で使用/未使用フラグFLを書き換えた後、指定を解除すべきブロックについて、リンク・ポインタLPを書き換える。すなわち、制御ユニット3は、「ブロックB8」を示している使用中ブロック・ポインタ22Aを「ブロックB8」から「ブロックB13」に書き換え、ブロックB8、B9の前に位置する連続する未使用のブロックB0〜B7の先頭ブロックであるブロックB0のリンク・ポインタLPを「ブロックB10」から「ブロックB8」に書き換える。
【0052】この結果、未使用のブロックまたは連続する未使用のブロックの先頭ブロックが、ブロックB0、ブロックB8、ブロックB14のように関連付けられる。また、使用中のブロックまたは使用中の連続するブロックの先頭ブロックが、ブロックB10、ブロックB13、ブロックB15のように関連付けられる。これにより、先頭ブロック管理レジスタ22及び情報領域iは、図13の状態から図14の状態へ移行する。
【0053】上述したように、具体例のプリンタでのバッファ管理方法によれば、データを格納するために使用していたブロックB8、B9の指定を解除するときに、連結後の未使用のブロックB8〜B12の個数「5」を、先頭ブロックであるブロックB8のブロック個数BNとして書き換え、または、未使用になった連結されないブロックB8、B9の個数「2」を先頭ブロックであるブロックB8のブロック個数BNとして維持する。このように、新たに他のデータを格納する必要が生じる前に、連続する未使用のブロックの個数を予め計数し、その個数を記憶しておき、データ格納時に、予め計数されかつ記憶された未使用ブロックの個数を参照することにより、データの格納の必要が生じた後にブロックの個数を計数していた従来のバッファ管理方法に比較して迅速に行うことが可能になる。
【0054】上述した具体例のバッファ管理方法では、制御ユニット3は、未使用になったブロックB8、B9に連結する未使用のブロックを、前記した後方のブロックB10〜B12に限らず、その前方のブロックとすることができる。例えば、図5に示す例では、制御ユニット3は、ブロックB8、B9の前に隣接する未使用のブロックB0〜B7と連結することが望ましい。制御ユニット3は、この連結により、連続する未使用のブロックB0〜B12を生成する。
【0055】具体的には、制御ユニット3は、指定を解除すべきブロック列の先頭ブロックの前に位置するブロックの使用/未使用フラグFLに基づき、該ブロックが使用中であるか未使用であるかを判断する。さらに、該ブロックのブロック個数BNすなわち、該ブロックを含むブロック列の長さに基づき、該ブロック列の先頭ブロックの位置を得る。制御ユニット3は、さらに、未使用ブロック・ポインタ22B及びリンク・ポインタLPについて必要な書き換えを行う。
【0056】すなわち、上記の例では、制御ユニット3は、ブロックB7の使用/未使用フラグFLを参照することによりブロックB7が未使用であることを認識し、次に、ブロックB7のブロック個数BNを参照することによりブロックB7を後尾ブロックとする8個のブロック、すなわちブロックB0〜B7から構成されるブロック列を認識する。制御ユニット3は、さらに、未使用ブロック・ポインタ22Bが示すブロックB0と該ブロック列の先頭ブロックB0とを比較する。両者が一致することから、ブロックB0のリンク・ポインタLPを該ブロックB0を含むブロック列の後に離れて位置する未使用のブロックであるブロックB14を示すべく「ブロックB14」に書き換え、また、先頭ブロックであるブロックB0のブロック個数BN及び後尾ブロックであるブロックB12のブロック個数BNを「13」に書き換える。このようにして、先頭ブロック管理レジスタ及び情報領域iは、図12の状態から図15の状態に移行する。
【0057】図16は、先頭ブロック管理レジスタの他の例を示す。図6に示した具体例のバッファ管理方法では、先頭ブロック管理レジスタ22は、図6に示される使用中ブロック・ポインタ22Aおよび未使用ブロック・ポインタ22Bを用いている。図16に示す例では、使用中ブロック・ポインタ22Aを用いることなく、しかも未使用ブロック・ポインタとして、引き続く未使用ブロック個数情報を含む未使用ブロックポインタすなわち連続ポインタが用いられている。図16に示される連続ポインタは、8個のポインタ、すなわち、8連続ポインタ22−8〜1連続ポインタ22−1の例を示す。8連続ポインタ22−8〜1連続ポインタ22−1は、バッファ20内における連続する未使用ブロック個数毎で、各連続ブロックの先頭ブロックのアドレスが最も若い、8個〜1個のそれぞれの連続する未使用のブロックの先頭ブロックを示す。例えば、3連続ポインタ22−3は、バッファ20における3個の連続の未使用ブロック群のうち最先に位置する未使用ブロックB10〜B12の先頭ブロックである「ブロックB10」を示し、さらに、ブロックB10に対応する情報領域i10中のリンク・ポインタLPは、ブロックB10の後の離れた位置にある連続する3個の未使用のブロックB28〜B30の先頭ブロックである「ブロックB29」を示す。また、1連続ポインタとは、単独のブロックを意味する。また、図16の管理レジスタで「NULL」は、連続ポインタのブロック数に該当する未使用ブロックが存在しないことを意味する。
【0058】制御ユニット3は、例えば、データを格納するために3個の連続する未使用のブロックを必要とするときに、図8のステップS100で、3連続ポインタ22−3を参照することにより、ブロック列B10〜B12を見つけ出す。このように、図6に示した例におけるような未使用ブロック・ポインタ22Bの参照及びブロック個数BNの参照という2回の参照を行うことなく、3連続ポインタ22−3の参照という1回の参照を行うだけで、3個の連続する未使用のブロックB10〜B12を見つけ出すことが可能になることから、ブロックの指定をより迅速に行うことができる。
【0059】3連続ポインタ22−3が、3個の連続する未使用のブロックが存在しないことを示す「NULL」であるときには、制御ユニット3は、順次、4連続ポインタ22−4および5〜8個の連続する未使用のブロックを次々に検索する。
【0060】このような検索によっても、所望の3〜8個の連続する未使用のブロックを見つけ出すことができないときには、制御ユニット3は、さらに、2〜1連続ポインタ22−2〜22−1を順番に参照することにより、所望の総個数の未使用ブロックを確保するために、2〜1個の連続する未使用のブロックを検索することが望ましい。
【0061】ところで、データを孤立する複数の未使用のブロックに分割することは、データの高速処理に好ましくない。特に、未使用のブロックが単独で存在することを回避することが望ましい。そこで、データの格納のためのブロックの指定により他のブロックが孤立するという事態を回避すべく、例えば3個のブロックを確保する必要がある場合、3個の連続する未使用のブロックが存在しないときには、単独の1つの未使用ブロックを生成しないために、4個の連続する未使用のブロックを検索することなく、所望個数よりも2以上大きい個数の連続する未使用のブロック、例えば、5個の連続する未使用のブロックを検索することが望ましい。さらに、5個の連続する未使用のブロックを見つけたときには、当該ブロックの先頭ブロックまたは後尾ブロックから起算して所望の3個のブロックを指定することにより、連続未使用ブロックの両端のそれぞれに単独の未使用ブロックを生成させないために、指定されない2個の未使用のブロックが連続するようにすることが望ましい。
【0062】図1に沿って説明した具体例のバッファ管理方法では、制御ユニット3は、指定を解除すべきブロックB8、B9に隣接するブロックB10〜B12が未使用であるときには、それらのブロック同士を連結する。しかし、連結により新たな連続するブロックB8〜B12を生成することがバッファの管理上必ずしも望ましいとは限らない。そこで、制御ユニット3は、例えば、過去に何個の連続する未使用のブロックを指定したかという履歴、または何個のブロックがどのように使用中であるかという現在の使用分布に従って連結すべき否かを判断することが望ましい。以下、これらの履歴及び使用分布について説明する。
【0063】図17は、履歴に基づく連結の判断に用いる判断テーブルを示す。判断テーブル30は、制御ユニット3に設けられており、指定を解除すべきブロックについて連結を行うべきか否か判断するために用いられる。判断テーブル30は、図17に示されているように、平均指定ブロック数、残ブロック数及び処理から構成されている。平均指定ブロック数は、データの格納のために過去に指定された所望ブロックの個数の平均を示す。平均指定ブロック数は、具体的には、所定時間内に指定されたブロックの個数の総計をその指定の回数で除算することにより算出される。残ブロック数は、各バッファ20内の総ブロックB0〜B31の個数に対する、単独および連続の未使用のブロックの個数の割合を示す。処理は、制御ユニット3が、指定を解除されたブロック及び隣接するブロックを連結するか否かであり、これは、指定を解除すべきブロックの個数に左右されない。
【0064】制御ユニット3は、図9のステップS210で、連結を直ちに行うことなく、図17の判断テーブル30を参照することにより、連結の要否を判断する。ここで、例えば、平均指定ブロック数が「2」であり、残ブロック数が「29%」であるときには、制御ユニット3は、指定を解除すべきブロックと隣接するブロックとを連結しない。また、平均指定ブロック数が「7」であり、残ブロック数が「50%」であるときには、制御ユニット3は、指定を解除すべきブロックと隣接するブロックとを連結する。このように、制御ユニット3は、図17の判断テーブル30に基づき、指定を解除すべきブロックと隣接するブロックとを連結すべきか否かを判断し、その判断の結果に従って両ブロックを連結しまたは連結しない。したがって、過去に指定されたブロックの個数から判断して必要とする連続個数の蓋然性が高まるほど、その要求を満たすべく連結処理が行われることから、ブロックの指定の解除をより迅速に行うことができる。
【0065】図18は、ブロックの使用分布を示す。使用分布31として、管理テーブル21の情報領域iのブロック個数BNを用いることができる。図5に示すバッファ20の使用状況下での使用分布が図18に示されており、ブロックB0〜B31に対応する情報領域i0〜i31中のブロック個数BNは、連続する使用中または未使用のブロックの個数を示す。連続しない、すなわち単独のブロックについては、そのブロック個数は、「1」である。また、ブロック個数BNは、「未使用」を「+」で表し、「使用中」を「−」で表す。
【0066】例えば、図5に示されるように、8個のブロックB0〜B7が未使用であることから、ブロックB0〜B7に対応する情報領域i0〜i7中のブロック個数BNは、それぞれ、+8、+8、+8、+8、+8、+8、+8、+8を示す。また、2個のブロックB8、B9が使用中であることから、ブロックB8、B9に対応する情報領域i8、i9中のブロック個数BNは、それぞれ、−2、−2を示す。これらのブロック個数BNを用いて、バッファ20の使用分布を数値で示す分散値を算出する。分散値は、連続するブロックのブロック個数BNの数値とブロックの個数との積を合計することにより得られる。
【0067】例えば、連続するブロックの最大個数を8個に制限するという条件の下で、ブロックB0〜B31の全てが未使用であるときの分散値は、(8×8)×4=256である。また、図5の使用状態であるバッファ20の分散値は、図18に示される数値を用いて、{(8×8)+(3×3)+(1×1)+(4×4)+(6×6)+(3×3)}−{(2×2)+(1×1)+(2×2)+(1×1)+(1×1)}=123と求めることができる。バッファ20については、上記のような条件の下に、使用中のブロックと未使用のブロックのばらつき程度が同様であるとき、すなわち、分散値が100〜150の範囲にあるときには、連結を行うことが望ましい。
【0068】制御ユニット3は、図9のステップS210で、図18の使用分布31として機能する管理テーブル21のブロック個数BNを用いて分散値を算出し、その得られた分散値が100〜150の範囲であるか否かに基づき、連結の要否を判断する。このように、ブロックB0〜B31の使用状況を数値で示す分散値を用いて連結の要否を判断することにより不要な連結を回避することが可能になることから、ブロックの指定の解除をより迅速に行うことができる。
【0069】
【発明の効果】本発明のバッファ管理方法では、前記したように、連続する未使用のブロックが生じたときに、このブロックの個数を示す個数情報を先頭に位置する先頭ブロックに対応する情報領域に書き込み、データを書き込むための連続する複数の未使用のブロックが必要であるときには、予め先頭ブロックに書き込まれた前記個数情報に基づいて、データを書き込むべき連続する未使用のブロックを指定する。したがって、本発明に係る前記管理方法によれば、前記個数情報に基づき未使用ブロックを指定できることから、連続する未使用のブロックの検出を必要とするたび毎に従来のような計数を行う必要はなく、従来に比して、連続する未使用のブロックの指定を迅速に行うことが可能になる。
【0070】本発明のデータ処理装置によれば、データを一時的に格納するためのバッファのための領域およびバッファの使用状況を示す管理テーブルのための領域が、各記憶部でそれぞれ互いに同一に配置されることから、記憶部の数や位置に左右されることなく、バッファ及び管理テーブルを容易に使用することが可能になる。
【出願人】 【識別番号】591044164
【氏名又は名称】株式会社沖データ
【出願日】 平成12年10月3日(2000.10.3)
【代理人】 【識別番号】100082050
【弁理士】
【氏名又は名称】佐藤 幸男
【公開番号】 特開2002−108697(P2002−108697A)
【公開日】 平成14年4月12日(2002.4.12)
【出願番号】 特願2000−303296(P2000−303296)