(第1実施例)
(システムの構成)
図1に示されるように、通信システム2は、PC(プリンタ10の周辺装置)6と、プリンタ10と、を備える。PC6及びプリンタ10は、LAN4を介して、相互に通信可能である。
(プリンタ10の構成)
プリンタ10は、操作部12と、表示部14と、印刷実行部16と、ネットワークインターフェイス18と、制御部20と、を備える。上記の各部12〜20は、バス線(符号省略)に接続されている。操作部12は、複数のキーによって構成される。ユーザは、操作部12を操作することによって、様々な指示をプリンタ10に与えることができる。表示部14は、様々な情報を表示するためのディスプレイである。印刷実行部16は、インクジェット方式、レーザ方式等の印刷機構を備え、制御装置20からの指示に従って印刷を実行する。ネットワークインターフェイス18は、LAN4に接続されている。
制御部20は、IC(Integrated Circuitの略)22と、メモリ30と、を備える。IC22は、2個のCPU24,26と、キャッシュメモリ28と、を備える。各CPU24,26は、メモリ30に格納されているプログラム48に従って、様々な処理を実行する。各CPU24,26は、並列的(同時的)に処理を実行可能である。
キャッシュメモリ28は、各CPU24,26が処理を実行する際に利用されるデータを、一時的に格納するためのメモリである。キャッシュメモリ28のメモリ容量(例えば32kByte)は、メモリ30のメモリ容量(例えば20MByte)と比較して、ごく小さい。一方で、各CPU24,26が、単位時間当りにキャッシュメモリ28に書き込み可能なデータサイズは、各CPU24,26が、単位時間当りにメモリ30に書き込み可能なデータサイズと比較して、極めて大きい。各CPU24,26が、単位時間当りに読み出し可能なデータサイズについても、同様である。即ち、各CPU24,26がキャッシュメモリ28のみを利用して処理を実行する場合、キャッシュメモリ28とメモリ30とを利用して処理を実行する場合と比較して、各CPU24,26の処理速度は高い。2個のCPU24,26が並列的に処理を実行する場合、2個のCPU24,26は、1個のキャッシュメモリ28を共同で利用する。
メモリ30は、ROM、RAM、ハードディスク等によって構成される。メモリ30は、プログラム記憶領域46と、共用メモリ領域50と、各種データの格納領域70〜74と、を備える。プログラム記憶領域46は、CPU24,26によって実行されるプログラム48を格納している。
共用メモリ領域50は、CPU24,26によって共用されるメモリ領域である。共用メモリ領域50は、共通処理ページカウンタ60(以下では「CPC(Common Process page Counterの略)60」と呼ぶ)と、共通設定データカウンタ62(以下では「CSC(Common Setting data Counterの略)62」と呼ぶ)と、設定コマンド処理フラグ64(以下では「SPF(Setting command Process Flagの略)64」と呼ぶ)と、ビットマップ生成処理フラグ66(以下では「BPF(Bitmap generating Process Flagの略)66」と呼ぶ)と、設定データ52と、中間コードデータテーブル54と、を格納している。
CPC60は、図3のPDL(Page Description Languageの略;ページ記述言語)処理の処理対象のページを示すカウンタである。CSC62は、どのページまでの設定データ(詳しくは後述する)が生成済みであるのかを示すカウンタである。SPF64は、いずれかのCPU24等が図4の設定コマンド処理を実行しているのか否かを示すフラグである。BPF66は、いずれかのCPU24等が図6のBMP(Bit Mapの略)処理を実行しているのか否かを示すフラグである。設定データ52は、CPU24等が後述の設定コマンドを実行することによって生成されるデータである。中間コードデータテーブル54は、中間コードデータを識別するためのデータ名を登録するためのテーブルである。
PDLデータ格納領域70には、PC6等から受信されるPDLデータを格納するための記憶領域である。中間コードデータ格納領域72は、中間コードデータを格納するための記憶領域である。中間コードデータは、CPU24等が図5の両方コマンド処理を実行することによって生成されるデータである。BMPデータ格納領域74は、ビットマップデータを格納するための記憶領域である。ビットマップデータは、CPU24等が図6のBMP処理を実行することによって生成されるデータである。
(PDLデータの構造)
PDLは、ページという概念を利用してデータを記述するためのあらゆる言語を含む概念である。PDLの例として、例えば、PDF(Portable Document Format)、PS(Post Script)等を挙げることができる。また、ワープロソフト、表計算ソフト、描画ソフト等で利用されている言語のうち、ページという概念を利用してデータを記述する言語も、PDLの一例である。
ユーザは、PC6に格納されているアプリケーションを利用して、PDLデータを生成することができる。そして、ユーザは、PDLデータによって表わされる画像の印刷を望む場合に、PDLデータをプリンタ10に送信するための操作をPC6の操作部に加えることができる。この場合、PC6は、PDLデータをプリンタ10に送信する。
図2には、複数ページ分のPDLデータの一例が示されている。1ページ目のPDLデータは、アルファベット「A」〜「E」を示す5行分のテキストデータを含む。1ページ目のPDLデータに含まれる1行目のテキストデータは、テキスト「A」を示す描画コマンドと、文字サイズ「10pt」を示す設定コマンドと、を含む。従って、プリンタ10は、1行目のテキストデータを読み込むことによって、文字サイズ「10pt」でテキスト「A」を記述すべきことを知ることができる。
1ページ目のPDLデータに含まれる2行目のテキストデータは、テキスト「B」を示す描画コマンドを含む。ただし、2行目のテキストデータは、文字サイズを示す設定コマンドを含まない。この場合、プリンタ10は、直前の行(本例では1行目)と同じ文字サイズ「10pt」でテキスト「B」を記述すべきことを知ることができる。同様に、1ページ目のPDLデータに含まれる3行目のテキストデータは、テキスト「C」を示す描画コマンドを含むが、文字サイズを示す設定コマンドを含まない。この場合、プリンタ10は、文字サイズ「10pt」でテキスト「C」を記述すべきことを知ることができる。このように、同じ文字サイズが2行以上に亘って継続して利用される場合には、後ろの行には、文字サイズを示す設定コマンドが記述されないことがあり得る。
同様に、プリンタ10は、1ページ目のPDLデータに含まれる4行目及び5行目のテキストデータを読み込むことによって、文字サイズ「20pt」でテキスト「D」、「E」を記述すべきことを知ることができる。
2ページ目のPDLデータは、アルファベット「F」〜「G」を示す3行分のテキストデータを含む。2ページ目のPDLデータに含まれる1行目のテキストデータは、テキスト「F」を示す描画コマンドを含むが、文字サイズを示す設定コマンドを含まない。この場合、プリンタ10は、直前のページ(即ち1ページ目)のPDLデータの最後の行(即ち「E」)と同じ文字サイズ「20Pt」でテキスト「F」を記述すべきことを知ることができる。このように、同じ文字サイズが2ページ以上に亘って継続して利用される場合には、後ろのページには、文字サイズを示す設定コマンドが記述されないことがあり得る。
同様に、プリンタ10は、2ページ目のPDLデータに含まれる2行目及び3行目のテキストデータを読み込むことによって、文字サイズ「20pt」でテキスト「G」を記述すべきこと、及び、文字サイズ「30pt」でテキスト「H」を記述すべきこと、を知ることができる。
なお、描画コマンドは、テキスト形式のデータに限られず、ベクトル形式のデータであってもよいし、画像形式のデータ(即ち、JPEG等のビットマップデータ)であってもよい。また、設定コマンドは、文字サイズに限られず、文字の書体(即ち、Times New Roman等)であってもよいし、文字の装飾(即ち、太字、網掛け等)であってもよいし、文字の色であってもよいし、ページのサイズ(即ち、A4、B4等の印刷媒体のサイズ)であってもよい。
また、後で詳しく説明するが、例えば、CPU24は、1ページ目のPDLデータを利用して、1ページ目の中間コードデータを生成し、次いで、1ページ目の中間コードデータを利用して、1ページ目のビットマップデータを生成する。そして、CPU24は、1ページ目のビットマップデータを印刷実行部16に供給する。これにより、印刷実行部16は、1ページ目のビットマップデータに基づいて、印刷を実行する。同様に、例えば、CPU26は、4ページ目のPDLデータを利用して、4ページ目の中間コードデータを生成し、次いで、4ページ目の中間コードデータを利用して、4ページ目のビットマップデータを生成する。そして、CPU26は、4ページ目のビットマップデータを印刷実行部16に供給する。
上述したように、本実施例では、プリンタ10は、PDLデータから、中間コードデータを経て、ビットマップデータを生成する。中間コードデータは、プリンタ10のベンダによって予め決められている中間言語で記述されたデータである。中間言語は、例えば、プリンタ10のベンダによって独自に開発された言語であってもよいし、公知の言語であってもよい。
中間コードデータを利用せずに、PDLデータからビットマップデータを直接的に生成する手法(以下では「直接的な手法」と呼ぶ)が考えられる。直接的な手法では、複数種類のPDLデータ(例えば、PS(Post Script)、PDF(Portable Document Format等)に従った印刷を実現するためには、複数種類のPDLデータのそれぞれについて、当該種類のPDLデータからビットマップデータを直接的に生成するためのプログラムが必要である。この場合、多くのプログラムを格納可能な大容量のメモリをプリンタに搭載しなければならない。
一方において、中間コードデータを利用する本実施例の構成では、複数種類のPDLデータのそれぞれについて、当該種類のPDLデータから、共通の中間言語で記述された中間コードデータを生成するためのプログラムが必要である。そして、中間コードデータからビットマップデータを生成するためのプログラムが必要である。この構成によると、複数種類のPDLデータについて、中間コードデータからビットマップデータを生成するためのプログラムを共通化することができる。従って、複数種類のPDLデータからビットマップデータを生成するためのトータルのプログラム量は、直接的な手法と比べて、少なくて済む。
(PDL処理;図3)
続いて、図3を参照しながら、各CPU24,26が実行するPDL処理について説明する。各CPU24,26は、PC6からPDLデータ(図2参照)を受信すると、PDL処理を並列的に実行する。即ち、CPU24がPDL処理を実行している間に、CPU26もPDL処理を実行可能である。以下では、CPU24を主体として各処理の内容を説明するが、CPU26も同様に処理を実行する。
S10において、CPU24は、共用メモリ領域50からCPC60(共通処理ページカウンタ(図1参照))の値を読み込み、CPC60の値を処理ページ番号として決定する。なお、CPC60の初期値は「1」である。例えば、CPU24が「M」を処理ページ番号として決定するということは、CPU24がMページ目のPDLデータをS14〜S26の処理対象として決定することを意味する。
次いで、S12において、CPU24は、S10で読み込まれたCPC60の値に「1」を加算して、新たなCPC60の値(例えば「2」)を算出する。そして、CPU24は、上記の新たなCPC60の値を共用メモリ領域50に書き込む。この結果、例えば、他のCPU26がS10の処理を実行する際に、上記の新たなCPC60の値(例えば「2」)を処理ページ番号として決定する。この例では、CPU26は、2ページ目のPDLデータをS14〜S26の処理対象として決定する。この説明から明らかなように、各CPU24,26は、複数ページ分のPDLデータのうちの1ページ目のPDLデータから昇順に、異なる1ページ分のPDLデータを利用して、S14〜S26の各処理を実行する。
次いで、S14において、CPU24は、共用メモリ領域50からCSC62(共通設定データカウンタ(図1参照))の値を読み込み、S10で決定された処理ページ番号「M」がCSC62の値より大きいのか否かを判断する。なお、CSC62の初期値は「1」である。処理ページ番号「M」がCSC62の値より大きい場合(S14でYESの場合)には、S16に進み、処理ページ番号「M」がCSC62の値に等しい場合(S14でNOの場合)には、S20に進む。なお、処理ページ番号「M」がCSC62の値より大きい場合(S14でYESの場合)は、処理ページ番号「M」が示すページの1ページ前までの設定データ(即ちM−1ページ目までの設定データ)が生成済みでないことを意味し、処理ページ番号「M」がCSC62の値に等しい場合(S14でNOの場合)は、処理ページ番号「M」が示すページの1ページ前までの設定データ(即ちM−1ページ目までの設定データ)が生成済みであることを意味する。
S16では、CPU24は、共用メモリ領域50からSPF64(設定コマンド処理フラグ(図1参照))の値を読み込み、SPF64の値が「1」であるのか否かを判断する。SPF64の値が「1」である場合(S16でYESの場合)には、S14に進み、SPF64の値が「0」である場合(S16でNOの場合)には、S18に進む。
SPF64の値が「1」である場合(S16でYESの場合)には、他のCPU26が、S18の設定コマンド処理を実行している。このような状況では、CPU24は、S18の設定コマンド処理を実行せずにS14に戻り、この結果、他のCPU26の設定コマンド処理が終了するまで待機する。
一方において、SPF64の値が「0」である場合(S16でNOの場合)には、他のCPU26が、S18の設定コマンド処理を実行していない。このような状況では、CPU24は、S18の設定コマンド処理を実行する。
(設定コマンド処理;図4)
設定コマンド処理では、S40において、CPU24は、共用メモリ領域50内のSPF64の値を「0」から「1」に変更する。次いで、S42において、CPU24は、共用メモリ領域50からCSC62の値を読み込み、CSC62の値(例えば「1」)を自己設定データカウンタ(以下では「OSC(Own Setting data Counter)」と呼ぶ)の値として決定する。さらに、CPU24は、OSCの値(例えば「1」)を、キャッシュメモリ28内に書き込む。OSCは、現在の設定コマンド処理の処理対象のページ番号(例えば「1」)を示すカウンタである。
次いで、S44において、CPU24は、共用メモリ領域50から設定データ52を読み込むことによって、設定データ52を取得する。後で説明するが、図4のS60又は図5のS98では、共用メモリ領域50に設定データ52が書き込まれる。例えば、S42で決定されたOSCの値が「N」である場合には、通常、共用メモリ領域50にN−1ページ目までの設定データ52が書き込まれている。従って、S44では、CPU24は、共用メモリ領域50からN−1ページ目までの設定データ52(例えば、文字サイズ「20pt」、文字の装飾「太字」、文字の色「黒」)を取得して、当該設定データ52をキャッシュメモリ28に書き込む。なお、OSCの値(即ち「N」)が「1」である場合には、共用メモリ領域50に未だに設定データが書き込まれていない。この場合、CPU24は、S44をスキップする。
次いで、S46において、CPU24は、S42で決定されたOSCの値が示す1ページ分のPDLデータを、PDLデータ格納領域70から読み込む。CPU24は、1ページ分のPDLデータを読み込む過程で、1個のコマンドを読み込む毎に、S48以降の処理を実行する。なお、以下では、S48以降の処理の処理対象の1個のコマンドのことを「特定のコマンド」と呼ぶ。例えば、S46で読み込まれるPDLデータが、図2の1ページ目のPDLデータである場合には、CPU24は、まず、1行目のテキストデータに含まれる描画コマンドであるテキスト「A」を特定のコマンドとして、S48以降の処理を実行する。その後、CPU24は、1行目のテキストデータに含まれる設定コマンドである文字サイズ「10pt」を特定のコマンドとして、S48以降の処理を実行する。
S48では、CPU24は、特定のコマンドがページの終了を示すコマンドであるのか否かを判断する。特定のコマンドがページの終了を示すコマンドである場合(S48でYESの場合)には、S58に進み、特定のコマンドがページの終了を示すコマンドでない場合(S48でNOの場合)には、S50に進む。
S50では、CPU24は、特定のコマンドが設定コマンドであるのか否かを判断する。特定のコマンドが設定コマンドである場合(S50でYESの場合)には、S52に進む。特定のコマンドが設定コマンドでない場合(S50でNOの場合)には、S54に進む。
S52では、CPU24は、設定コマンド(即ち特定のコマンド)を実行して、設定データを生成する。例えば、PC6から受信されたPDLデータが、特定の種類(例えばPS)のPDLで記述されたPDLデータである場合には、CPU24は、まず、当該特定の種類のPDLデータから中間コードデータを生成するためのプログラムを利用して、設定コマンドを記述しているプログラムコードを解析して、設定コマンドの内容(例えば文字サイズ「30pt」)を解釈する。次いで、CPU24は、解釈済みの内容に対応する設定データを、キャッシュメモリ28内に生成する。
例えば、図2の1ページ目のPDLデータが設定コマンド処理の処理対象である場合には、CPU24は、S46において、1行目のテキストデータに含まれる設定コマンド(文字サイズ「10pt」)を読み込むと、S52において、文字サイズ「10pt」に対応する設定データを、キャッシュメモリ28内に生成する。その後、CPU24は、S46において、4行目のテキストデータに含まれる設定コマンド(文字サイズ「20pt」)を読み込むと、S52において、文字サイズ「10pt」に対応する設定データに代えて、文字サイズ「20pt」に対応する設定データを、キャッシュメモリ28内に生成する。即ち、CPU24は、S52において、特定の設定の種類(上記の例では「文字サイズ」)に対応する新たな設定データを生成する際に、上記の特定の設定の種類に対応する古い設定データがキャッシュメモリ28内に既に記憶されている場合には、古い設定データを消去して、新たな設定データをキャッシュメモリ28内に記憶させる。但し、この場合、CPU24は、キャッシュメモリ28内の他の設定の種類に対応する設定データ(例えば、文字の装飾「太字」、文字の色「黒」)を変更しない。
また、例えば、図2の2ページ目のPDLデータが設定コマンド処理の処理対象である場合には、CPU24は、S46において、3行目のテキストデータに含まれる設定コマンド(文字サイズ「30pt」)を読み込むと、S52において、文字サイズ「20pt」に対応する設定データに代えて、文字サイズ「30pt」に対応する設定データを、キャッシュメモリ28内に生成する。
設定コマンドから設定データが生成されると、CPU24,26は、後の処理において、設定コマンドの内容を利用すべき際に、設定コマンドを再び実行する必要がなく、設定データを読み出せば足りる。上述したように、CPU24,26は、設定コマンドの内容を解釈するためには、特定の種類のPDLデータから中間コードデータを生成するためのプログラムを利用して、設定コマンドを記述しているプログラムコードを解析する必要があり、比較的に長時間を要する。これに対し、本実施例のように設定データを生成しておけば、CPUは、プログラムコードを解析する必要がなく、設定データを読み出せば、設定コマンドの内容を知ることができる。即ち、CPUは、後の処理において、設定コマンドの内容を比較的に短時間で取得することができる。
一方において、S54では、CPU24は、特定のコマンドが描画コマンドであるのか否かを判断する。特定のコマンドが描画コマンドである場合(S54でYESの場合)には、S46に戻る。即ち、CPU24は、描画コマンドを実行しない。一方において、特定のコマンドが描画コマンドでない場合(S54でNOの場合)には、S56に進み、CPU24は、コマンドに応じた処理を実行する。S56を終えると、S46に戻る。
また、S58では、CPU24は、共用メモリ領域50からCSC62の値を読み込む。そして、CPU24は、S42で決定されたOSCの値がCSC62の値以上であるのか否かを判断する。上述したように、S42では、OSCの値=CSC62の値と決定される。従って、S58では、通常、OSCの値とCSC62の値とが同じであるため、OSCの値がCSC62の値以上である(S58でYES)と判断され、S60に進む。但し、CPU24がS46〜S56の処理を実行している過程で、他のCPU26が後述の図5のS100の処理を実行して、CSC62の値がインクリメントされる可能性がある。この場合、OSCの値がCSC62の値より小さい(S58でNO)と判断され、S60及びS62をスキップしてS64に進む。
S60では、CPU24は、キャッシュメモリ28内の設定データを、共用メモリ領域50に書き込む。例えば、文字サイズ「20Pt」に対応する設定データが共用メモリ領域50内に記憶されており、文字サイズ「30Pt」に対応する設定データがキャッシュメモリ28内に記憶されている場合には、S60において、CPU24は、文字サイズ「20Pt」に対応する設定データに代えて、文字サイズ「30Pt」に対応する設定データを、共用メモリ領域50内に記憶させる。これにより、共用メモリ領域50内には、図4の設定コマンド処理の処理対象のページ(即ちCSC62の値が示すページ)までの設定データが記憶される。
次いで、S62において、CPU24は、OSCの値に「1」を加算して、新たなCSC62の値(例えば「2」)を算出する。そして、CPU24は、上記の新たなCSC62の値を共用メモリ領域50に書き込む。S62を終えると、S64において、CPU24は、共用メモリ領域50内のSPF64の値を「1」から「0」に変更する。これにより、設定コマンド処理が終了して、図3のS14に戻る。
図3のS14において、処理ページ番号「M」がCSC62の値に等しい(S14でNO)、即ち、処理ページ番号「M」が示すページの1ページ前までの設定データ(即ちM−1ページ目までの設定データ)が生成済みである、と判断される場合(S14でNOの場合)には、S20において、CPU24は、両方コマンド処理を実行する。
(両方コマンド処理;図5)
両方コマンド処理では、S80において、CPU24は、共用メモリ領域50から設定データを読み込むことによって、設定データを取得する。これにより、CPU24は、処理ページ番号「M」が示すページの1ページ前までの設定データ(即ちM−1ページ目までの設定データ)を取得することができる。例えば、処理ページ番号が「2」である場合には、CPU24は、図2の1ページ目のPDLデータまでの設定データ(即ち、文字サイズ「20Pt」)を取得することができる。CPU24は、共用メモリ領域50からM−1ページ目までの設定データを取得して、当該設定データをキャッシュメモリ28に書き込む。これにより、CPU24は、キャッシュメモリ28内のM−1ページ目までの設定データを用いて、両方コマンド処理(特に、S84〜S94の処理)を実行することができる。なお、処理ページ番号が「1」である場合には、共用メモリ領域50に未だに設定データが書き込まれていない。この場合、CPU24は、S80をスキップする。
次いで、S82において、CPU24は、図3のS10で決定された処理ページ番号「M」が示す1ページ分のPDLデータを、PDLデータ格納領域70から読み込む。CPU24は、1ページ分のPDLデータを読み込む過程で、1個のコマンドを読み込む毎に、S84以降の処理を実行する。S84〜S94の処理は、図4のS48〜S56の処理とほぼ同様である。但し、上述したように、図4の設定コマンド処理では、特定のコマンドが描画コマンドである場合(図4のS54でYESの場合)には、CPU24は、描画コマンドを実行しない。これに対し、両方コマンド処理では、特定のコマンドが描画コマンドである場合(図5のS90でYESの場合)には、S92において、CPU24は、描画コマンドを実行して中間コードデータを生成する。なお、本実施例では、中間コードデータは、ベクタ形式のデータである。
S92では、例えば、PC6から受信されたPDLデータが、特定の種類(例えばPS)の言語で記述されたPDLデータである場合には、CPU24は、まず、当該特定の種類のPDLデータから中間コードデータを生成するためのプログラムを利用して、描画コマンドを記述しているプログラムコードを解析して、描画コマンドの内容(例えば、テキスト「A」)を解釈する。次いで、CPU24は、キャッシュメモリ28内のM−1ページ目までの設定データに従って、解釈済みの内容に対応する中間コードデータを、キャッシュメモリ28内に生成する。
例えば、図2の2ページ目のPDLデータが両方コマンド処理の処理対象である場合には、CPU24は、S82において、1行目のテキストデータに含まれる描画コマンド(テキスト「F」)を読み込むと、S92において、キャッシュメモリ28内のM−1ページ目までの設定データ(文字サイズ「20pt」)に従って、文字サイズ「20pt」のテキスト「A」を示す中間コードデータを生成する。S92を終えると、S82に戻る。
また、S84において、特定のコマンドがページの終了を示すコマンドである場合(S84でYESの場合)には、S96において、CPU24は、共用メモリ領域50からCSC62の値を読み込む。そして、CPU24は、図3のS10で決定された処理ページ番号「M」がCSC62の値以上であるのか否かを判断する。上述したように、図3のS14では、処理ページ番号「M」=CSC62の値と判断される(S14でNOと判断される)。従って、図5のS96では、通常、処理ページ番号「M」とCSC62の値とが同じであるため、処理ページ番号「M」がCSC62の値以上である(S96でYES)と判断され、S98に進む。S98の処理は、図4のS60の処理と同様である。次いで、S100では、CPU24は、処理ページ番号「M」に「1」を加算して、新たなCSC62の値(例えば「3」)を算出して、S102に進む。
但し、CPU24がS82〜S94の処理を実行している過程で、他のCPU26が図4のS62の処理を実行して、CSC62の値がインクリメントされる可能性がある。この場合、処理ページ番号がCSC62の値より小さい(S96でNO)と判断され、S98〜S100をスキップして、S102に進む。S102では、CPU24は、キャッシュメモリ28内に生成された1ページ分の中間コードデータのデータ名(例えば「P2」)を決定し、決定済みのデータ名を、中間コードデータテーブル54に登録する。CPU24は、中間コードデータテーブル54に既に登録されているデータ名の1つ下に、決定済みのデータ名を登録する。なお、中間コードデータテーブル54にデータ名が登録されていない場合、CPU24は、中間コードデータテーブル54の最上位置に、決定済みのデータ名を登録する。次いで、S104では、CPU24は、生成された1ページ分の中間コードデータを、中間コードデータ格納領域72に格納させて、両方コマンド処理を終了する。この場合、図3のS22に進む。
図3のS22では、CPU24は、共用メモリ領域50からBPF66(ビットマップ生成処理フラグ(図1参照))の値を読み込み、BPF66の値が「1」であるのか否かを判断する。BPF66の値が「1」である場合(S22でYESの場合)には、S27に進み、BPF66の値が「0」である場合(S22でNOの場合)には、S23に進む。S23では、CPU24は、共用メモリ領域50内のBPF66の値を「0」から「1」に変更する。次いで、S24のビットマップ生成処理(以下では「BMP処理」と呼ぶ)に進む。
(BMP処理;図6)
BMP処理では、CPU24は、中間コードデータからビットマップデータを生成するためのプログラムを利用して、S20の両方コマンド処理で生成されたベクタ形式の1ページ分の中間コードデータから、多階調(例えば256階調)の1ページ分のビットマップデータを生成する。
最初に、S112において、CPU24は、中間コードデータ格納領域72から、中間コードデータテーブル54の最上位置に登録されているデータ名で特定される中間コードデータを、キャッシュメモリ28に読み込むことによって、中間コードデータを取得する。次いで、S114では、CPU24は、バンドエンドカウント値WEを、キャッシュメモリ28内に格納する。バンドエンドカウント値WEは、両方コマンド処理において、中間コードデータが生成される際に、特定されていてもよい。次いで、S116では、CPU24は、キャッシュメモリ28内に、バンドカウント値Wの値「0」を設定する。
次いで、S118では、CPU24は、バンドカウント値Wに対応する中間コードデータから、バンドカウント値Wに対応する中間コードデータによって表される画像をビットマップ形式で表すデータ(以下では「部分ビットマップデータ」と呼ぶ)を生成する。部分ビットマップデータは、キャッシュメモリ28に格納される。次いで、S120では、CPU24は、S112で取得された中間コードデータにおいて、S118の処理に利用されていない中間コードデータが残っているのか否かを判断する。具体的には、CPU24は、バンドカウント値Wが、バンドエンドカウント値WE未満であるのか否かを判断する。CPU24は、バンドカウント値Wがバンドエンドカウント値WE未満である場合、S118の処理に利用されていない中間コードデータが残っていると判断し(S120でYES)、S122に進む。S122では、CPU24は、バンドカウント値Wに「1」を加算して、新たなバンドカウント値Wを算出して、S118に戻る。
一方、CPU24は、バンドカウント値Wが、バンドエンドカウント値WEと等しい場合、S118の処理に利用されていない中間コードデータが残っていないと判断し(S120でNO)、S124に進む。S124では、CPU24は、S118〜S122の処理の繰り返しによって生成された複数個の部分ビットマップデータによって形成される1ページ分(印刷用紙1枚分(1個))のビットマップデータを、印刷実行部16に供給する。詳細には、CPU24は、ビットマップデータを、キャッシュメモリ28から読み出して、BMPデータ格納領域74に書き込む。印刷実行部16は、BMPデータ格納領域74に格納されているビットマップデータを用いて、当該ビットマップデータによって表される画像を、印刷用紙に印刷する。なお、CPU24は、S112で取得した中間コードデータのデータ名を、中間コードデータテーブル54から消去する。これにより、BMP処理が終了して、図3のS25に戻る。
S25では、CPU24は、BMP処理に利用されるべき中間コードデータが、中間コードデータ格納領域72に格納されているのか否かを判断する。CPU24は、中間コードデータテーブル54にデータ名が登録されている場合に、BMP処理に利用されるべき中間コードデータが、中間コードデータ格納領域72に格納されていると判断し(S25でYES)、S112に戻る。一方、CPU24は、中間コードデータテーブル54にデータ名が登録されていない場合に、BMP処理に利用されるべき中間コードデータが、中間コードデータ格納領域72に格納されていないと判断し(S25でNO)、S26に進む。S26では、CPU24は、共用メモリ領域50内のBPF66の値を、「1」から「0」に変更する。
次いで、S27では、CPU24は、PC6から受信されたPDLデータに含まれるデータのうち、S20の処理が実行されていないデータが残っているのか否かを判断する。ここでYESの場合にはS10に戻り、NOの場合にはS28に進む。
S28では、CPU24は、共用メモリ領域50内のBPF66の値が「1」であるのか否かを判断する。BPF66の値が「0」である場合(S28でNO)、PDL処理を終了する。S28において、BPF66の値が「0」である場合とは、CPU24がBMP処理において利用すべき中間コードデータが、中間コードデータ格納領域72に格納されておらず、CPU24が両方コマンド処理において利用すべきPDLデータが、PDLデータ格納領域70に格納されておらず、かつ、他のCPU26がBMP処理を実行していない場合である。この場合、CPU24は、PDL処理を終了する。
一方、BPF66の値が「1」である場合、S30に進む。S30では、CPU24は、BMP補助処理を実行する。具体的には、CPU24は、S30において、キャッシュメモリ28内の補助可能フラグ(図示省略)を、「0」から「1」に変更する。BMP処理を実行中である他のCPU26は、補助可能フラグが「0」から「1」に変更されると、図6のS112で取得された中間コードデータのうち、S118の処理が終了していない中間コードデータを、2分割する。
具体的には、まず、CPU26は、バンドエンドカウント値WE(例えば2000)から現在のバンドカウント値W(例えば200)を減算する(例えばWE−W=1800)。次いで、CPU26は、(WE−W)の値を2で除算して、各CPU24,26が処理すべき処理バンド数(例えば(WE−W)÷2=900)を算出する。そして、CPU26は、現在のバンドカウント値W(例えば200)に、処理バンド数(例えば900)を加算して、新たなバンドエンドカウント値WE´(1100)を算出する。次いで、CPU26は、新たなバンドエンドカウント値WE´に「1」を加算して、CPU24がBMP補助処理で利用すべきバンドカウント値W´(例えば1101)を算出する。さらに、CPU26は、CPU24がBMP補助処理で利用すべきバンドエンドカウント値として、元のバンドエンドカウント値WE(例えば2000)を決定する。
CPU24は、CPU24がBMP補助処理で利用すべきバンドカウント値W´(例えば1101)と、バンドエンドカウント値WE(例えば2000)と、が決定されると、キャッシュメモリ28を利用して、BMP補助処理を実行する。BMP補助処理では、CPU24は、最初に、キャッシュメモリ28内に、補助処理終了フラグ(図示省略)として、「0」を設定し、図6のS118〜S122の処理を実行する。S120でNOの場合、即ち、バンドカウント値W´とバンドエンドカウント値WEとが等しい場合、キャッシュメモリ28内の補助処理終了フラグを「0」から「1」に変更する。
CPU26は、CPU24のBMP補助処理と並行して、BMP処理を実行する。このとき、S120でNOの場合、CPU26は、キャッシュメモリ28内に、補助処理終了フラグが設定されている場合、補助処理終了フラグが「1」に変更されるまで待機する。CPU26は、キャッシュメモリ28内の補助処理終了フラグが「1」に変更されると、S124に進む。なお、CPU26は、キャッシュメモリ28内に、補助処理終了フラグが設定されていない場合には、待機せずに、S124に進む。
上述したように、本実施例では、CPU24,26は、キャッシュメモリ28を利用して、図3のPDL処理を実行する。上述したように、CPU24,26がキャッシュメモリ28のみを利用して処理を実行する場合、メモリ30を利用して処理を実行する場合と比較して、CPU24,26の処理速度は、高い。この結果、CPU24,26は、PDL処理を比較的に早く終了し得る。
(CPUが並列に実行する処理)
図7を参照して、7ページ分のPDLデータを利用して、CPU24,26が並列してPDL処理を実行する様子を説明する。図7では、下方に進むほど、時間が経過している。(P1)、(P2)等は、ページ番号を意味する。例えば、「(P1)設定コマンド処理」は、1ページ目のPDLデータを利用して、設定コマンド処理(図3のS18)を実行することを意味し、「(P1)両方コマンド処理」は、1ページ目のPDLデータを利用して、両方コマンド処理(図3のS20)を実行することを意味する。また、例えば、「(P1)BMP処理」は、1ページ目の中間コードデータを利用して、BMP処理(図3のS24)を実行することを意味する。
なお、図7では、どの処理で生成されたデータをどの処理で利用するのかを破線の矢印で示す。例えば、CPU24は、(P1)両方コマンド処理を実行し、次いで、(P1)両方コマンド処理で生成された中間コードデータを利用して、(P1)BMP処理を実行する。また、CPU24は、CPU26の(P2)両方コマンド処理によって生成された中間コードデータを利用して、(P2)BMP処理を実行する。
CPU24は、まず、図3のS10でCPU24の処理ページ番号「M1」として「1」を決定する。この場合、M1=1及びCSC62の値=1(初期値)であるために、CPU24は、図3のS14でNOと判断する。従って、CPU24は、キャッシュメモリ28を利用して、(P1)両方コマンド処理を実行する。
CPU24が(P1)両方コマンド処理を実行している間に、CPU26は、図3のS10でCPU26の処理ページ番号「M2」として「2」を決定する。この構成では、CPU26は、両方コマンド処理により中間コードデータの生成に未だ利用されていない1ページ分のPDLデータのうち、最もページ数の小さいPDLデータを利用して、両方コマンド処理を実行する。この場合、M2=2及びCSC62の値=1であるために、CPU26は、図3のS14でYESと判断する。そして、CPU26は、設定コマンドが未だに実行されていない最小ページである1ページ目のPDLデータを用いて、キャッシュメモリ28を利用して、(P1)設定コマンド処理を実行する。CPU26の(P1)設定コマンド処理は、描画コマンドが実行されないために、CPU24の(P1)両方コマンド処理よりも短時間で終了する。従って、CPU26は、(P1)設定コマンド処理の図4のS60において、1ページ目のPDLデータまでの設定データを、キャッシュメモリ28から共用メモリ領域50に記憶させる。
さらに、CPU26は、(P1)設定コマンド処理の図4のS62において、CSC62の値を「1」から「2」にインクリメントする。従って、(P1)設定コマンド処理を終えると、M2=2及びCSC62の値=2であるために、CPU26は、図3のS14でNOと判断し、キャッシュメモリ28を利用して、(P2)両方コマンド処理を実行する。この構成によると、CPU26は、2ページ目のPDLデータを利用した両方コマンド処理を実行する際に、CPU26自身によって生成された1ページ目までの設定データを利用することができる(図5のS80)。また、この構成によれば、CPU24が、1ページ目の設定データを生成していない場合に、CPU26は、1ページ目の設定データが、CPU24によって生成されるまで、(P2)両方コマンド処理の実行を待機せずに済む。
この場合、CPU26は、(P2)両方コマンド処理において、2ページ目のPDLデータまでの設定データを、共用メモリ領域50に記憶させる(図5のS98)。そして、CPU26は、(P2)両方コマンド処理の図5のS100において、CSC62の値を「2」から「3」にインクリメントする。
CPU24が(P1)両方コマンド処理を終了した段階で、CPU26は、(P2)両方コマンド処理を実行中であり、BPFは「0」である(図3のS22でNO)。この場合、CPU24は、(P1)両方コマンド処理に続いて、キャッシュメモリ28を利用して、(P1)BMP処理を実行する。
CPU26が(P2)両方コマンド処理を終了した段階で、CPU24は、(P1)BMP処理を実行している(図3のS22でYES)。このため、CPU26は、(P2)BMP処理を実行しない。CPU26は、図3のS10でCPU26の処理ページ番号「M2」として「3」を決定する。この段階では、共用メモリ領域50には、(P2)までの設定データが記憶されており、CSC62の値=「3」である。従って、CPU26は、図3のS14でNOと判断し、BMP処理を実行せずに、(P2)両方コマンド処理に続いて、(P3)両方コマンド処理を実行する。この構成によれば、CPU26は、CPU24がBMP処理を実行している間に、CPU24と同時的にBMP処理を実行する状況を回避することができる。また、CPU24がBMP処理を実行している間に、CPU26が両方コマンド処理を実行することによって、効率よく、PDLデータから中間コードデータを生成することができる。この結果、効率よく、PDLデータから中間コードデータを経て、ビットマップデータを生成することができる。なお、CPU26は、(P3)両方コマンド処理において生成された3ページ目のPDLデータの設定データを、共用メモリ領域50に記憶させる(図5のS98)。
CPU24が(P1)BMP処理を終了した段階で、CPU26は、(P3)両方コマンド処理を実行している。そして、中間コードデータテーブル54には、CPU26の(P2)両方コマンド処理によって、「P2」が登録されている(図5のS102、図3のS25でYES)。従って、CPU24は、(P1)BMP処理に続いて、両方コマンド処理を実行せずに、(P2)BMP処理を実行する。この構成によれば、CPU24は、生成済みの中間コードデータを利用して、比較的に早期にビットマップデータを生成することができる。この結果、CPU24は、ビットマップデータを、早期に印刷実行部16に供給することができる。このため、ユーザは、印刷結果を早期に取得することができる。
同様に、CPU24は、(P2)BMP処理に続いて、両方コマンド処理を実行せずに、(P3)BMP処理を実行する。CPU26は、(P3)両方コマンド処理に続いて、(P4)両方コマンド処理を実行する。
CPU24が(P3)BMP処理を終了した段階で、CPU26は、(P4)両方コマンド処理を実行している。この段階では、BMP処理において利用すべき中間コードデータが中間コードデータ格納領域72に格納されていない。そのため、CPU24は、図3のS25でNOと判断する。CPU24は、図3のS26で、BPFを「1」から「0」に変更して、BMP処理を終了して、図3のS10に戻る。CPU24は、CSC62の値=「4」であり、CPU24の処理ページ番号「M1」=「5」であることから、図3のS14でYESと判断して、(P4)設定コマンド処理を実行する。
CPU26は、(P4)両方コマンド処理において、CPU26の処理ページ番号「M2」=「4」であり、CSC62の値=「4」であるため、の図5のS96でYESと判断される。このため、CPU26は、4ページ目のPDLデータまでの設定データを、キャッシュメモリ28から共用メモリ領域50に記憶させる(図5のS98)。さらに、CPU26は、CSC62の値をインクリメントし、(P4)BMP処理を開始する。
CPU26は、CPU24が(P4)設定コマンド処理の実行中に、CSC62の値をインクリメントする。このため、CPU24は、4ページ目のPDLデータまでの設定データを、キャッシュメモリ28から共用メモリ領域50に記憶させずに、(P4)設定コマンド処理を終了する。次いで、CPU24は、(P5)両方コマンド処理を実行する。このとき、CPU24は、CPU26によって生成済みの4ページ目のPDLデータまでの設定データを、共用メモリ領域50から読み込んで、キャッシュメモリ28に書き込む。CPU24は、キャッシュメモリ28内の設定データを利用して、(P5)両方コマンド処理を実行する。なお、変形例では、CPU24は、(P4)設定コマンド処理によってキャッシュメモリ28内に生成した設定データを利用して、(P5)両方コマンド処理を実行してもよい。
この構成では、CPU24が、5ページ目のPDLデータを利用して、両方コマンド処理を開始すべきであり、かつ、CPU26が、1〜4ページ目のPDLデータを利用した両方コマンド処理を完了している場合に、CPU24は、CPU26によって生成された1〜4ページ目の設定データを利用して、5ページ目の両方コマンド処理を実行する。この構成によれば、CPU24は、5ページ目のPDLデータを利用して、両方コマンド生成処理を実行する際に、1ページ目から4ページ目までのPDLデータのそれぞれを利用した設定コマンド処理を実行しなくて済む。但し、CPU24,26の処理のタイミングによっては、CPU24は、4ページ目の設定データを生成する場合があり得る。
その後、上記と同様に、CPU24は、(P5)BMP処理と、(P6)設定コマンド処理と、(P7)両方コマンド処理と、を実行する。一方、CPU26は、(P4)BMP処理の終了後、(P5)設定コマンド処理と、(P6)両方コマンド処理と、(P6)BMP処理と、を実行する。
CPU24が、(P7)両方コマンド処理を終了したタイミングでは、CPU26は、(P6)BMP処理を実行している。この段階では、7ページ分のPDLデータの全てについて、両方コマンド処理が終了している(図3のS27でNO)。また、BPFは「1」である(図3のS28でYES)。この結果、CPU24は、(P6)BMP補助処理(図3のS30、図6のS118〜S122)を実行する。
CPU26が、(P6)BMP処理を終了した段階で、CPU24による(P7)両方コマンド処理で生成された中間コードデータが中間コードデータ格納領域72に格納されている。このため、CPU26は、図3のS25でYESと判断し、(P6)BMP処理に続いて、(P7)BMP処理を実行する。一方、CPU24は、(P6)BMP補助処理が終了すると、CPU26が(P7)BMP処理を実行するため(即ちBPF=1)に、図3のS28でYESと判断し、(P7)BMP補助処理を実行する。この構成では、CPU24は、CPU26が実行しているBMP処理において利用されている中間コードデータを利用して、CPU26と共に、ビットマップデータを生成する処理を実行する。この構成によれば、CPU26が単独で、(P6)BMP処理と(P7)BMP処理とを実行する場合と比較して、早期に、(P6)BMP処理と(P7)BMP処理とを完了することができる。
(本実施例の効果)
各CPU24,26がBMP処理を実行している間に利用されるメモリの容量は、各CPU24,26が設定コマンド処理を実行している間に利用されるメモリ容量よりも多く、両方コマンド処理を実行している間に利用されるメモリの容量よりも多い可能性が高い。上述したように、キャッシュメモリ28の容量は、比較的に小さい。仮に、CPU24,26が同時的に、別の中間コードデータを利用して、個別にBMP処理を実行する特定の状況では、BMP処理を実行している間に利用されるメモリの容量が、キャッシュメモリ28のメモリ容量を超える可能性がある。この状況では、メモリ30のメモリ領域を利用して、BMP処理が実行される。上述したように、各CPU24,26がキャッシュメモリ28のみを利用して処理を実行する場合、キャッシュメモリ28とメモリ30とを利用して処理を実行する場合と比較して、CPU24,26の処理速度は高い。このため、上記の特定の状況では、BMP処理が遅くなる可能性が高くなる。
本実施例では、一方のCPU(例えばCPU24)がBMP処理を実行している場合、他方のCPU(例えばCPU26)は、設定コマンド処理及び両方コマンド処理のどちらかの処理を実行する。このため、各CPU24,26は、CPU24,26のうちの一方が、Mページ目の中間コードデータを利用して、BMP処理を実行している場合、CPU24,26のうちの他方は、Mページ目の中間コードデータ以外の中間コードデータを利用して、BMP処理を実行しない。この構成によれば、CPU24,26によって、PDLデータからビットマップデータが生成される際に利用されるメモリ容量を低減し得る。このため、CPU24とCPU26とが、共に、キャッシュメモリ28を利用して処理を実行する構成において、CPU24とCPU26との処理中に、キャッシュメモリ28の容量を超えて、メモリ30が利用される状況を回避することができる。
(対応関係)
本実施例のプリンタ10が「制御装置」の一例であり、CPU24とCPU26とがそれぞれ、「第1のプロセッサ」と「第2のプロセッサ」との一例である。両方コマンド処理が、「中間コード生成処理」の一例であり、BMP処理が、「ビットマップ生成処理」の一例である。図3のS22でYESの場合が、「第1の場合」の一例であり、NOの場合が、「第2の場合」の一例である。
以上、本発明の具体例を詳細に説明したが、これらは例示にすぎず、特許請求の範囲を限定するものではない。特許請求の範囲に記載の技術には、以上に例示した具体例を様々に変形、変更したものが含まれる。上記の実施例の変形例を以下に列挙する。
(変形例1)上記の実施例では、CPUは2個であるが、CPUの個数に制限はない。即ち、プリンタ10は、3個以上(即ち複数個)のCPUを備えていてもよい。
(変形例2)上記の各実施例では、「制御装置」は、プリンタ10であるが、FAXデータの印刷を実行するFAX装置であってもよいし、印刷機能を備える多機能機であってもよい。
(変形例3)上記の各実施例では、プリンタ10が、複数個のCPU24,26を備えており、各CPU24,26が、図3のPDL処理を並列的に実行する。これに代えて、PC6が、複数個のプロセッサを備えており、各プロセッサが、図3のPDL処理を並列的に実行してもよい。この場合、各プロセッサは、図3のS24の処理を実行する際に、ビットマップデータをプリンタ10に供給してもよい。本変形例では、PC6が、それぞれ、「制御装置」の一例である。即ち、「制御装置」は、印刷実行部16を備えていなくてもよい。一般的に言うと、「制御装置」は、印刷のための制御装置であればよい。PDLデータを利用して、ビットマップデータを生成する装置であればよい。
(変形例4)上記の実施例では、1ページ分のPDLデータから、1ページ分の中間コードデータが生成され、1ページ分の中間コードデータから、1個のビットマップデータ(即ち印刷用紙1枚の片面のビットマップデータ)が生成される。しかしながら、複数ページ分の中間コードデータから、1個のビットマップデータが生成されてもよい。例えば、ユーザが、複数ページ分のPDLデータによって表される画像を、1枚の印刷用紙に印刷させるように、印刷設定を選択する場合、CPU24,26は、複数ページ分の中間コードデータから、1個のビットマップデータを生成してもよい。本変形例では、図3のS24のBMP処理を開始する前に、CPU24,26は、BMP生成処理によるビットマップデータの生成が未だ完了していない複数ページ分の中間コードデータが、中間コードデータ格納領域72に格納されているのか否かを判断してもよい。CPU24,26は、複数ページ分以上の中間コードデータが、中間コードデータ格納領域72に格納されている場合に、S24に進み、複数ページ分未満の中間コードデータしか、中間コードデータ格納領域72に格納されていない場合、S27に進んでもよい。
(変形例5)上記の実施例では、CPU24,26は、設定コマンド処理を実行する。しかしながら、CPU24,26は、設定コマンド処理を実行しなくてもよい。例えば、図7において、CPU24が(P1)両方コマンド処理を実行している間、CPU26は、待機していてもよい。CPU26は、CPU24によって、1ページ目の設定データが、共通メモリ領域に格納されると、(P2)両方コマンド処理を開始してもよい。
(変形例6)上記の実施例では、CPU24,26は、BMP補助処理を実行する。しかしながら、CPU24,26は、BMP補助処理を実行しなくてもよい。例えば、図7において、CPU24は、(P7)両方コマンド処理を終了した場合、PDL処理を終了してもよい。
また、本明細書または図面に説明した技術要素は、単独であるいは各種の組合せによって技術的有用性を発揮するものであり、出願時請求項記載の組合せに限定されるものではない。また、本明細書または図面に例示した技術は複数目的を同時に達成するものであり、そのうちの一つの目的を達成すること自体で技術的有用性を持つものである。