(57)【特許請求の範囲】
【請求項１】
複数の処理を時分割で実行することが可能な第１の処理手段と、
複数の処理を時分割で実行することが可能な第２の処理手段と、
実行すべき処理を前記第１の処理手段と前記第２の処理手段のそれぞれに割り当てる割り当て手段とを有し、
実行すべき処理が予め決められた特定の処理である場合、前記割り当て手段は、前記第１の処理手段にすでに割り当てられている処理を前記第２の処理手段に割り当て直し、前記特定の処理を前記第１の処理手段に割り当て、前記特定の処理が終了するまで前記特定の処理ではない処理を前記第１の処理手段に新たに割り当てるのを制限することを特徴とする処理装置。
【請求項２】
少なくとも一つの処理を前記特定の処理として登録する登録手段を有することを特徴とする請求項１に記載の処理装置。
【請求項３】
前記特定の処理が終了した場合、前記割り当て手段は、前記第１の処理手段に前記特定の処理ではない処理を割り当て可能にすることを特徴とする請求項１または２に記載の処理装置。
【請求項４】
前記特定の処理の単位時間あたりの実行頻度を計測する計測手段を有し、
実行すべき処理が前記特定の処理である場合であって、かつ前記計測手段で計測した実行頻度が所定の値を超えた場合に、前記割り当て手段は、前記第１の処理手段にすでに割り当てられている処理を前記第２の処理手段に割り当て直すことを特徴とする請求項１乃至３のいずれか１項に記載の処理装置。
【請求項５】
前記特定の処理ではない処理の単位時間あたりの実行頻度を計測する第２の計測手段を有し、
前記第２の計測手段で計測した実行頻度が第２の所定の値を下回った場合に、前記割り当て手段は、前記第１の処理手段に前記特定の処理ではない処理を割り当て可能にすることを特徴とする請求項１乃至４のいずれか１項に記載の処理装置。
【請求項６】
前記第２の計測手段で計測した実行頻度が第２の所定の値を下回った場合に前記第１の処理手段に前記特定の処理ではない処理を割り当て可能にする機能を働かせるか否かを選択可能にする選択手段を有することを特徴とする請求項５項に記載の処理装置。
【請求項７】
前記第１の処理手段で実行されるべき処理の実行待ち行列と前記第２の処理手段で実行されるべき処理の待ち行列を有し、
前記割り当て手段は、前記第１の処理手段の実行待ち行列に並んでいる処理を前記第２の処理手段の待ち行列に移動することを特徴とする請求項１乃至６のいずれか１項に記載の処理装置。
【請求項８】
前記第１の処理手段及び前記第２の処理手段は、プログラムの実行単位である複数のタスクを時分割で実行可能なＣＰＵであり、
前記第１の処理手段及び前記第２の処理手段で実行される処理は、タスクによって行われる処理であることを特徴とする請求項１乃至７のいずれか１項に記載の処理装置。
【請求項９】
前記割り当て手段は、実行すべき処理が前記特定の処理であるかどうかを判定することを特徴とする請求項１乃至８のいずれか１項に記載の処理装置。
【請求項１０】
前記割り当て手段は、実行すべき処理が前記特定の処理である場合、前記特定の処理ではない処理を前記第１の処理手段に割り当てないモードに設定し、前記特定の処理が終了した場合、前記モードを解除することを特徴とする請求項１乃至９のいずれか１項に記載の処理装置。
【請求項１１】
複数の処理を時分割で実行することが可能な第１の処理手段と複数の処理を時分割で実行することが可能な第２の処理手段とのそれぞれに実行すべき処理を割り当てる割り当て方法であって、
実行すべき処理が予め決められた特定の処理である場合、前記第１の処理手段にすでに割り当てられている処理を前記第２の処理手段に割り当て直す第１の割り当てステップと、
実行すべき処理が前記特定の処理である場合、前記特定の処理を前記第１の処理手段に割り当てる第２の割り当てステップとを有し、
前記特定の処理が終了するまで前記特定の処理ではない処理を前記第１の処理手段に新たに割り当てるのを制限することを特徴とする割り当て方法。
【請求項１２】
複数の処理を時分割で実行することが可能な第１の処理手段と複数の処理を時分割で実行することが可能な第２の処理手段とのそれぞれに実行すべき処理を割り当てる、コンピュータにより読み取り可能なプログラムであって、
実行すべき処理が予め決められた特定の処理である場合、前記第１の処理手段にすでに割り当てられている処理を前記第２の処理手段に割り当て直す第１の割り当てステップと、
実行すべき処理が前記特定の処理である場合、前記特定の処理を前記第１の処理手段に割り当てる第２の割り当てステップとを前記コンピュータに実行させ、
前記特定の処理が終了するまで前記特定の処理ではない処理を前記第１の処理手段に新たに割り当てるのを制限することを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
複数の処理を時分割で実行することが可能な処理装置に関するものである。
【背景技術】
【０００２】
従来、タスクと呼ばれるプログラムの実行単位を並列に実行して、複数の機能を提供するデータ処理装置がある（例えば特許文献１、特許文献２）。ＣＰＵが一つである場合には、ＣＰＵが時分割で複数のタスクを実行するため、タスクの数が増大するのに従い、単位時間あたりにＣＰＵで実行されるタスクの数は減少する。その結果、一つのタスクで行われる処理にかかる時間は長くなる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００５−３０１８９０号公報
【特許文献２】特開２００７−１４９００１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
複数のＣＰＵあるいは単一パッケージに複数のＣＰＵコアを実装したマルチコアプロセッサを用いて、複数のタスクを物理的に並列に実行することにより、単位時間あたりに実行されるタスクの数を増やす方法がある。
【０００５】
しかしながら、この方法でも、ＣＰＵの数を超える多数のタスクが存在する場合には、ＣＰＵが一つである場合と同様に、複数のＣＰＵのそれぞれが時分割で複数のタスクを実行する。そのため、一つのタスクで行われる処理にかかる時間が長くなってしまうことがある。
【０００６】
データ処理装置の種類によっては、特定のタスクで行われる処理については、それにかかかる時間が長くなるのを避けたい場合がある。例えば、印刷ジョブに基づいて印刷を実行する印刷装置では、印刷ジョブから画像データを生成する処理に時間がかかってしまうと、印刷出力に時間がかかってしまう。従って、印刷ジョブから画像データを生成する処理にかかる時間が長くならないよう、多数のタスクが存在する場合でも、印刷ジョブから画像データを生成するタスクにはより多くの時間ＣＰＵを使えるようにしたい。
【０００７】
本発明はこのような課題を解決するため、その他の処理の実行を完全に停止してしまうことなく、特定の処理をより多く実行できるようにすることを目的とする。
【課題を解決するための手段】
【０００８】
本発明に係わる処理装置は、複数の処理を時分割で実行することが可能な第１の処理手段と、複数の処理を時分割で実行することが可能な第２の処理手段と、実行すべき処理を前記第１の処理手段と前記第２の処理手段のそれぞれに割り当てる割り当て手段とを有し、実行すべき処理が予め決められた特定の処理である場合、前記割り当て手段は、前記第１の処理手段にすでに割り当てられている処理を前記第２の処理手段に割り当て直し、前記特定の処理を前記第１の処理手段に割り当て、前記特定の処理が終了するまで前記特定の処理ではない処理を前記第１の処理手段に新たに割り当てるのを制限することを特徴とする。
【０００９】
また、本発明に係わる割り当て方法は、複数の処理を時分割で実行することが可能な第１の処理手段と複数の処理を時分割で実行することが可能な第２の処理手段とのそれぞれに実行すべき処理を割り当てる割り当て方法であって、実行すべき処理が予め決められた特定の処理である場合、前記第１の処理手段にすでに割り当てられている処理を前記第２の処理手段に割り当て直す第１の割り当てステップと、実行すべき処理が前記特定の処理である場合、前記特定の処理を前記第１の処理手段に割り当てる第２の割り当てステップとを有し、前記特定の処理が終了するまで前記特定の処理ではない処理を前記第１の処理手段に新たに割り当てるのを制限することを特徴とする。
【００１０】
また、本発明に係わるプログラムは、複数の処理を時分割で実行することが可能な第１の処理手段と複数の処理を時分割で実行することが可能な第２の処理手段とのそれぞれに実行すべき処理を割り当てる、コンピュータにより読み取り可能なプログラムであって、実行すべき処理が予め決められた特定の処理である場合、前記第１の処理手段にすでに割り当てられている処理を前記第２の処理手段に割り当て直す第１の割り当てステップと、実行すべき処理が前記特定の処理である場合、前記特定の処理を前記第１の処理手段に割り当てる第２の割り当てステップとを前記コンピュータに実行させ、前記特定の処理が終了するまで前記特定の処理ではない処理を前記第１の処理手段に新たに割り当てるのを制限することを特徴とする。
【発明の効果】
【００１１】
本発明によれば、複数の処理を時分割で実行することが可能な処理手段を複数有する処理装置において、他の処理の実行を完全に停止してしまうことなく、特定の処理をより多く実行できるようにすることができる。
【図面の簡単な説明】
【００１２】
【図１】データ処理装置の内部構成を示す図である。
【図２】タスク処理を説明するための概念図である。
【図３】タスク情報の一例を示す図である。
【図４】タスク投入処理を示すフローチャートである。
【図５】タスクスケジュール処理を示すフローチャートである。
【図６】マルチコアＣＰＵの内部構成の一例を示す図である。
【発明を実施するための形態】
【００１３】
本発明に係る実施形態を説明する。
【００１４】
図１は本発明を適用可能なデータ処理装置の内部構成を示す図である。データ処理装置は大きく分けてメインボード１００とサブボード１０８から構成されている。なお、メインボードとサブボードとに分けずにそれらを一つのボードにすることも可能であるが、下記では、データ処理装置がメインボード１００とサブボード１０８の２つのボードから構成される場合を説明する。
【００１５】
メインボード１００は、ＣＰＵ１０１、不揮発性メモリ１０２、揮発性メモリ１０３、バスコントローラ１０４、ディスクコントローラ１０５及びＵＳＢコントローラ１０６を備える。
【００１６】
ＣＰＵ１０１は起動プログラム及び他のプログラムを実行する演算装置である。ＣＰＵ１０１は複数のチップからなるマルチプロセッサとしてあるいは単一チップ内に複数の演算装置を組み込んだマルチコアプロセッサとして構成されている。図１ではそれぞれをＣＰＵ＃１及びＣＰＵ＃２としている。なお、ＯＳが複数のＣＰＵを扱うことが可能であれば、単体のＣＰＵをそれぞれ別々に複数個用意しても良い。下記では、複数のＣＰＵコアのそれぞれもＣＰＵと呼ぶ。
【００１７】
不揮発性メモリ（ＢＯＯＴ  ＲＯＭ）１０２は起動プログラムやＯＳ（オペレーティングシステム）を格納している。なお、ＯＳは後述のハードディスク装置１０７に格納されていても良い。揮発性メモリ（Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ）１０３はプログラムやデータを一時的に格納する。
【００１８】
バスコントローラ（Ｂｕｓ  Ｃｏｎｔｒｏｌｌｅｒ）１０４はサブボード１０８と接続し、サブボード１０８との間の通信を制御する。ディスクコントローラ（Ｄｉｓｋ  Ｃｏｎｔｒｏｌｌｅｒ）１０５はハードディスク装置（ＨＤＤ）１０７を制御する。ハードディスク装置１０７は各種アプリケーションプログラムや各種データを格納し、ディスクコントローラ１０５はそれらの書き込みや読み出しを制御する。ＵＳＢコントローラ（ＵＳＢ  Ｃｏｎｔｒｏｌｌｅｒ）１０６はＵＳＢメモリ等のＵＳＢデバイス（不図示）を制御する。
【００１９】
サブボード１０８は不揮発性メモリ１０９、ＣＰＵ１１０、揮発性メモリ１１１、バスコントローラ１１２、デバイスコントローラ１１３及びイメージプロセッサ１１４を備える。
【００２０】
不揮発性メモリ（ＢＯＯＴ  ＲＯＭ）１０９は起動プログラムを格納する。ＣＰＵ１１０は起動プログラムやその他のプログラムを実行する演算装置である。揮発性メモリ（Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ）１１１はプログラムやデータを一時的に格納する。
【００２１】
バスコントローラ（Ｂｕｓ  Ｃｏｎｔｒｏｌｌｅｒ）１１２はメインボード１００と接続し、メインボード１００との間の通信を制御する。デバイスコントローラ（Ｄｅｖｉｃｅ  Ｃｏｎｔｒｏｌｌｅｒ）１１３は画像処理デバイスを制御し、それぞれ異なる画像処理を画像処理デバイスに実行させる。図１では、画像処理デバイスとしてスキャン装置（Ｓｃａｎ  Ｅｎｇｉｎｅ）１１５、印刷装置（Ｐｒｉｎｔ  Ｅｎｇｉｎｅ）１１６、ファクシミリ装置（Ｆａｘ  Ｅｎｇｉｎｅ）１１７がデバイスコントローラ１１３と接続している。イメージプロセッサ（Ｉｍａｇｅ  Ｐｒｏｃｅｓｓｏｒ）１１４は画像データの生成などの画像形成処理を高速に実行する。
【００２２】
図２はＣＰＵ１０１で行われるタスク（プログラムの実行単位）の実行処理を説明するための概念図である。
【００２３】
同時に複数の処理を並行して実行できるＯＳ（マルチタスクＯＳ）では、タイムスライスと呼ばれる規定時間の間ＣＰＵを一つのタスクに占有させる制御を繰り返すことにより、マルチタスク動作を実現する。つまり、ＣＰＵは規定時間の間一つのタスクを実行して、複数のタスクを時分割で実行する。これをマルチタスクスケジューリングと呼ぶ。
【００２４】
図２では、ＣＰＵ＃１（２０１）においてネットワークタスク２０２が現在実行されており、ＣＰＵ＃２（２０４）においてはストレージタスク２０５が現在実行されている。
【００２５】
ＯＳの一部であるタスクスケジューラ２０７はタイムスライスの経過や割り込みの発生などに起因して、現在実行中のネットワークタスク２０２の実行状態をタスク情報として実行待ち行列２０３に退避する。つまり、実行待ち行列２０３にあるネットワークタスクのタスク情報はＣＰＵのレジスタ値などにより更新される。一方、実行待ち行列２０３にあるＵＩ制御タスクのタスク情報をＣＰＵ＃１に設定して、ＵＩ制御タスクをＣＰＵ＃１に実行させる。同様に、タスクスケジューラ２０７はタイムスライスの経過や割り込みの発生などに起因して、現在実行中のストレージタスク２０５の実行状態を実行待ち行列２０６のタスク情報に退避する。つまり、実行待ち行列２０６にあるストレージタスクのタスク情報はＣＰＵのレジスタ値などにより更新される。一方、実行待ち行列２０６にあるスキャンタスクのタスク情報をＣＰＵ＃２に設定して、スキャンタスクをＣＰＵ＃２に実行させる。このようなＣＰＵにおけるタスクの実行の切り替えをタスクスイッチと呼ぶ。タスク情報の詳細は後述する（図４）。
【００２６】
タスクスケジューラ２０７はプログラムとしては一つであるが、ＣＰＵ＃１及びＣＰＵ＃２のそれぞれで独立に実行されることにより、論理的には２つ存在することになる。よって、タスクスケジューラ＃１がＣＰＵ＃１でのタスクスケジューリングを制御し、タスクスケジューラ＃２がＣＰＵ＃２でのタスクスケジューリングを制御する。
【００２７】
このようなマルチタスクスケジューリングで、全てのタスクがタイムスライスを完全に使い切ると仮定した場合、実行待ち行列に配置されているタスクの数が多くになるにつれて、ある一つのタスクがＣＰＵで実行された後、次に実行されるまでの時間は長くなる。
【００２８】
例えば、ＰＤＬ処理タスクは、ローカルエリアネットワーク（ＬＡＮ）等を経由して情報処理装置から受信したプリントジョブをイメージデータに展開し、そのイメージデータをサブボード１０８のＣＰＵ１１０に送信する。そのあと、印刷装置１１６がＣＰＵ１１０、イメージプロセッサ１１４及びデバイスコントローラ１１３の制御の下、イメージデータに基づく画像を紙媒体に印刷する。実行待ち行列２０６に配置されたタスクの数が増えると、ＰＤＬ処理タスクが単位時間あたりにＣＰＵ＃２を占有できる回数（または時間）は減少するため、ＰＤＬ処理タスクがプリントジョブをイメージデータに展開するのに掛かる時間は長くなる。すると、データ処理装置の性能指標の一つであるＰＰＭ値（Ｐａｇｅ  Ｐｅｒ  Ｍｉｎｕｔｅ：１分間あたりの印刷ページ数）が下がる場合が生じてしまう。
【００２９】
図２の占有タスク２０８については後述する。
【００３０】
図３は、実行待ち行列２０３または２０６に配置されるタスクのタスク情報の一例を示す図である。複数のタスクのそれぞれごとに図３のようなタスク情報が存在する。
【００３１】
タスクＩＤ３０１はタスクを一意に識別する識別子である。タスク状態３０２はタスクの状態を示す。コード・アドレスリスト３０３はタスク自身の実行コードが配置されたメモリアドレス群を示す。データ・アドレスリスト３０４はタスクが用いるデータが配置されたメモリアドレス群を示す。レジスタ情報３０５はそのタスクを実行していたときのＣＰＵのレジスタ値を示す。
【００３２】
タスクスケジューラ２０７は実行待ち行列２０３または２０６に配置されているタスク情報を参照して、ＣＰＵのレジスタ値等の設定または操作をすることにより、タスクの切り替えを実行する。
【００３３】
下記では、図４及び図５のフローチャートを参照しながら、メインボード１００で行われるタスク制御処理を説明する。
【００３４】
図４は、メインボード１００がＣＰＵ＃１及びＣＰＵ＃２の２つのＣＰＵを有する場合にタスクスケジューラ２０７が実行するタスク投入処理を示すフローチャートである。ここでは、タスクスケジューラ２０７が、実行すべきタスクをＣＰＵ＃１及びＣＰＵ＃２のいずれかに割り当てる。
【００３５】
まず、タスクスケジューラ２０７は、あるタスクを実行するためにそのタスクを投入するにあたり、そのタスクが占有タスクであるかどうかを判定する（Ｓ４０１）。
【００３６】
占有タスクとは、ＣＰＵを連続的に占有しつづけることのできるタスクである。占有タスクが占有することになっているＣＰＵを占有ＣＰＵと呼ぶ。いずれのタスクを占有タスクにするか、いずれのＣＰＵを占有ＣＰＵにするかは指定可能であり、指定されたタスクを占有タスクとして登録し、指定されたＣＰＵを占有ＣＰＵとして登録する。図２の例では、ＰＤＬ処理タスクが占有タスク、ＣＰＵ＃２が占有ＣＰＵになっている。
【００３７】
タスクが占有タスクであれば、タスクスケジューラ２０７は、ＣＰＵ＃２で実行中のタスクについて実行待ち行列２０６中のタスク情報を更新する。さらにＣＰＵ＃２の実行待ち行列２０６に配置されている各タスクのタスク情報を別のＣＰＵであるＣＰＵ＃１の実行待ち行列２０３に移動する（Ｓ４０２）。図２の例では、ストレージタスク、スキャンタスク、ファックスタスク及びプリントタスクのそれぞれのタスク情報を実行待ち行列２０６から実行待ち行列２０３に移動する。
【００３８】
つぎに、タスクスケジューラ２０７は占有タスクであるＰＤＬ処理タスクのタスク情報をＣＰＵ＃２の実行待ち行列２０６に配置する（Ｓ４０３）。さらに、タスクスケジューラ２０７は占有タスク動作モードフラグに１を設定する（Ｓ４０４）。この占有タスク動作モードフラグは揮発性メモリ１０３に記憶されており、その初期値は０（零）である。
【００３９】
占有タスクではないとＳ４０１で判定した場合には、タスクスケジューラ２０７は占有タスク動作モードフラグが１であるかどうかを判定する（Ｓ４０５）。占有タスク動作モードフラグが１である場合には、占有タスクがＣＰＵ＃２を占有しているので、タスクスケジューラ２０７はタスクのタスク情報をＣＰＵ＃１の実行待ち行列２０３に配置する（Ｓ４０６）。占有タスク動作モードフラグが１ではない場合には、どちらのＣＰＵも占有タスクによって占有されていないので、タスクスケジューラ２０７は実行待ちのタスクが少ない方の実行待ち行列にタスクのタスク情報を配置する（Ｓ４０７）。実行待ちのタスクの数が実行待ち行列２０３と実行待ち行列２０６との間で同じである場合、タスクスケジューラ２０７は占有ＣＰＵではないＣＰＵ＃１の実行待ち行列２０３にタスクのタスク情報を配置するものとする。ただし、これに限るものではない。
【００４０】
図５は、タスクスケジューラ２０７が実行するタスクスケジュール処理を示すフローチャートである。タスクスケジュール処理では、タスクスケジューラ２０７は各ＣＰＵにて、実行待ち行列から一つのタスクを選択して、そのタスクをタイムスライスの間ＣＰＵに実行させるためのタスクスケジューリングを行う。
【００４１】
タスクスケジューラ２０７は、ＣＰＵで現在実行中のタスクの処理が完了したかどうかを判定する（Ｓ５０１）。そのタスクの処理が完了した場合には、タスクスケジューラ２０７はそのタスクのタスク情報を実行待ち行列から削除する（Ｓ５０２）。さらに、タスクスケジューラ２０７はそのタスクが占有タスクであるかどうかを判定する（Ｓ５０３）。タスクが占有タスクであれば、タスクスケジューラ２０７は占有タスク動作モードフラグに０（零）を設定する（Ｓ５０４）。
【００４２】
タスクの処理が完了していないとＳ５０１で判定した場合には、タスクスケジューラ２０７はタイムスライスが終了したかどうかを判定する（ステップＳ５０５）。タイムスライスが終了したかどうかの判断は、規定時間を初期値とするカウンタをデクリメントしていきながらカウンタが０になったかどうかを判定しても良いし、ハードウェアタイマで時間を計測して規定時間が経過したかどうかを判定しても良い。
【００４３】
タイムスライスが終了していなければ、そのタスクはＣＰＵを使用することができるので、タスクスケジューラ２０７はそのタスクをＣＰＵに実行させる（Ｓ５０８）。
【００４４】
一方、タイムスライスが終了している場合には、タスクスケジューラ２０７は、そのＣＰＵが規定時間の間ＣＰＵを使い果たしたと判断して、現在のＣＰＵのレジスタ値等をタスク情報として実行待ち行列に保存する（Ｓ５０６）。さらに、タスクスケジューラ２０７は新たなタスクをＣＰＵに実行させるため、実行待ち行列から一つのタスクを選択し、そのタスクのタスク情報をＣＰＵのレジスタ値として設定する（Ｓ５０７）。そして、タスクスケジューラ２０７はそのタスクをＣＰＵに実行させる（Ｓ５０８）。
【００４５】
上記のタスクスケジューラ２０７の処理により、占有タスクとして登録されたタスクの実行を開始する場合、占有ＣＰＵとして指定されたＣＰＵの実行待ち行列に配置されているタスクのタスク情報を他のＣＰＵの実行待ち行列に移動することができる。その際に占有タスク動作モードフラグに１を設定することにより、それ以降は、他のタスクを占有ＣＰＵに割り当てずに他のＣＰＵに割り当てることとなり、占有タスクをタスクの処理が完了するまで占有ＣＰＵで常に実行可能である。そのため、所望の実行性能を実現することができる。
【００４６】
占有タスクの処理が完了すると、占有タスク動作モードフラグに０（零）を設定することにより、それ以降は、タスクを実行待ちのタスクが少ない方のＣＰＵに配置することが可能となり、各ＣＰＵの負荷が平準化される。
【００４７】
図６はマルチコアＣＰＵの内部構成の一例を示す図である。図６（Ａ）は複数のＣＰＵでＬ２キャッシュを共有する形式を示す。図６（Ｂ）は複数のＣＰＵごとにＬ２キャッシュを分離する形式を示す。
【００４８】
本実施形態では、タスク情報を特定のＣＰＵの実行待ち行列から他方のＣＰＵの実行待ち行列に移動させることにより、特定のＣＰＵで特定のタスクを実行させている。そのため、実行待ち行列をＬ２キャッシュ上に構築し、さらにそのＬ２キャッシュを複数のＣＰＵで共有させることができれば（図６（Ａ）の形式）、他方のＣＰＵは比較的高速にタスク情報にアクセス可能である。一方、Ｌ２キャッシュを複数のＣＰＵがそれぞれ持つ場合（図６（Ｂ）の形式）、特定のＣＰＵ側のＬ２キャッシュには、このＣＰＵではもう使われることがないもののメモリにまだ書き込まれていない移動すべきタスク情報が存在する。他方のＣＰＵ側のＬ２キャッシュには、移動されたタスク情報を参照しようとしても、そのタスク情報が格納されていない。よって、アクセスが遅くなる可能性がある。このため、タスク情報を移動するのに先立ちＬ２キャッシュのフラッシュを行い、Ｌ２キャッシュからメモリへのデータの書き込みを確定させることで、他方のＣＰＵによるタスク情報へのアクセスの遅延を抑制することが望ましい。逆に、Ｌ２キャッシュを共有する場合には、他方のＣＰＵがＬ２キャッシュのタスク情報を参照可能であるため、タスク情報の移動時にはＬ２キャッシュのフラッシュを行わないことが望ましい。
【００４９】
以上説明したように、本実施形態によれば、ＣＰＵコア或いはＣＰＵを連続的に占有しつづけるタスクを占有タスクとして予め登録する。占有タスクの実行を開始するときには、占有タスクを特定のＣＰＵコア或いは特定のＣＰＵで実行させると共に、他のタスクは他のＣＰＵコア或いは他のＣＰＵで実行させるように制御する。そして、占有タスクの処理が完了した場合には、他のタスクを特定のＣＰＵコア或いは特定のＣＰＵでも実行可能にする。こうすることにより、複数のタスクが並列にＣＰＵで実行される場合においても、特定のタスクを優先的に実行して、データ処理装置における所定の性能（例えば、製品カタログなどで提示されている性能）を実現することができる。
【００５０】
〔第２の実施形態〕
上記の実施形態では、占有タスクとして登録されているタスクの実行を開始するときに、他のタスクのタスク情報を他のＣＰＵの実行待ち行列に移動していた。しかしながら、占有タスクの投入後、その占有タスクが他のタスクからのイベントを待つ状態（イベント待ち状態）になった場合、他のタスクからのイベント通知があるまで、別段処理を行わない。この場合は、占有タスクが占有ＣＰＵを独占しておく必要がないにもかかわらず、他のタスクは占有ＣＰＵを利用することができない。これでは、ＣＰＵの利用効率が下がる。
【００５１】
例えば、ＰＤＬ処理タスクが占有タスクであり、そのＰＤＬ処理タスクがジョブ管理タスクからプリントジョブを受信したことを示すジョブ到着イベントを通知されるのを待っている場合、ＰＤＬ処理タスクは処理を行わない。
【００５２】
このような課題に対処するべく、占有タスクの単位時間あたりの実行回数をカウントするカウンタを設けてもよい。このカウント値は揮発性メモリ１０３に記憶されるものとする。
【００５３】
タスクスケジューラ２０７はＳ４０１でタスクが占有タスクであると判定した場合、占有タスクの単位時間あたりの実行回数をカウントし始める。そのカウント値が第１の閾値（例えば５回）を下回っている間は、占有ＣＰＵの実行待ち行列に配置されている他のタスクのタスク情報を他のＣＰＵの実行待ち行列に移動させない。つまり、占有タスクの処理が本格的に開始するまで、他のタスクのタスク情報を移動させず、他のタスクを占有ＣＰＵで実行させる。なお、第１の閾値は適宜指定可能である。
【００５４】
第２の実施形態によれば、占有タスクの単位時間あたりの実行回数を計測し、これが予め指定された回数を下回っている間は、占有タスク以外のタスクのタスク情報を他のＣＰＵの実行待ち行列に移動させない。例えば、ＰＤＬ処理タスクがプリントジョブを受信しイメージデータへの展開を開始するまでは、他のタスクを占有ＣＰＵで実行可能にする。こうすることで、ＣＰＵの利用効率を下げないようにすることが可能である。
【００５５】
なお、占有タスクの単位時間あたりの実行頻度を計測するものであれば、単位時間あたりの実行回数のほか、単位時間あたりの実行時間でもよい。
【００５６】
〔第３の実施形態〕
上記の実施形態では、占有タスク以外の全てのタスクがＣＰＵ＃１に割り当てられるため、多数のタスクが並列に動作している場合には、ＣＰＵ＃１の負荷が多大になる。例えば、ローカルＵＩの制御を司るＵＩ制御タスクのように、ユーザからの指示を速やかに受信するとともにその指示に対して必要な情報を速やかに表示する必要があるタスクの処理が滞ると、操作性が著しく低下してしまう。
【００５７】
このような課題に対処するべく、占有タスク以外の特定のタスクの単位時間あたりの実行回数をカウントするカウンタを設けてもよい。このカウント値は揮発性メモリ１０３に記憶されるものとする。
【００５８】
占有タスク以外の特定のタスクがＵＩ制御タスクである場合には、タスクスケジューラ２０７はＳ４０１でタスクがＵＩ制御タスクであると判定するのに応じて、ＵＩ制御タスクの単位時間あたりの実行回数をカウントし始める。そのカウント値が第２の閾値（例えば３回）を下回った場合には、占有タスク動作モードを解除するべく、占有タスク動作モードフラグに０（零）を設定する。こうすることで、占有タスク以外のタスクの動作があまりにも遅くなった場合には、占有ＣＰＵで他のタスクも実行可能にする。第２の閾値は適宜指定可能である。
【００５９】
なお、一時的に操作性が低下しても印刷を高速に行わせたいケースも存在するので、第２の閾値に基づいて占有タスク動作モードを解除する機能を働かせるかどうかについてはそれを選択可能に構成することが望ましい。
【００６０】
また、ＵＩ制御タスクの単位時間あたりの実行頻度を計測するものであれば、単位時間あたりの実行回数でも、単位時間あたりの実行時間でもよい。
【００６１】
第３の実施形態によれば、占有タスク以外の特定のタスクの単位時間あたりの実行回数を計測し、これが予め指定された回数を下回った場合には占有タスク動作モードを解除する。こうすることで、例えば操作性が著しく低下するのを防止することができる。
【００６２】
〔その他の実施形態〕
上記の実施形態では、ＣＰＵコア或いはＣＰＵが２つの場合を説明してきたが、ＣＰＵコア或いはＣＰＵが３つ以上である場合でも、本発明は適用可能である。
【００６３】
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【符号の説明】
【００６４】
１００  メインボード
１０１  ＣＰＵ
１０２  不揮発性メモリ
１０３  揮発性メモリ
１０４  バスコントローラ
１０５  ディスクコントローラ
１０６  ＵＳＢコントローラ
１０７  ハードディスク装置
１０８  サブボード
１０９  不揮発性メモリ
１１０  ＣＰＵ
１１１  揮発性メモリ
１１２  バスコントローラ
１１３  デバイスコントローラ
１１４  イメージプロセッサ
１１５  スキャン装置
１１６  印刷装置
１１７  ファクシミリ装置
【図１】
0005631022.tif 000002
【図２】
0005631022.tif 000003
【図３】
0005631022.tif 000004
【図４】
0005631022.tif 000005
【図５】
0005631022.tif 000006
【図６】
0005631022.tif 000007