(57)【要約】【課題】複数のＣＰＵコアにより起動処理の複数のプログラムモジュールを円滑に実行して、情報処理装置の起動の遅延を抑制する。【解決手段】複数のプログラムモジュールの起動条件を取得し、起動条件に基づいて、複数のＣＰＵコアによる複数のプログラムモジュールの起動順序を判断する。複数のＣＰＵコアにより、起動順序に従って、起動可能なプログラムモジュールを実行して、複数のプログラムモジュールを起動する。起動処理中に変化する複数のＣＰＵコアの負荷を示す負荷情報を更新し、更新された負荷情報に基づいて、複数のＣＰＵコアによるプログラムモジュールの起動を制限する。【選択図】  図１
2015099554.tif 000002
【特許請求の範囲】
【請求項１】
複数のＣＰＵコアにより起動処理の複数のプログラムモジュールを実行する情報処理装置であって、
前記複数のプログラムモジュールの起動条件を取得する起動条件取得手段と、
前記起動条件に基づいて、前記複数のＣＰＵコアによる前記複数のプログラムモジュールの起動順序を判断する判断手段と、
前記複数のＣＰＵコアにより、前記起動順序に従って、起動可能な前記プログラムモジュールを実行して、前記複数のプログラムモジュールを起動する起動手段と、
前記起動処理中に変化する前記複数のＣＰＵコアの負荷を示す負荷情報を更新する更新手段と、
前記更新手段により更新された前記負荷情報に基づいて、前記複数のＣＰＵコアによる前記プログラムモジュールの起動を制限する制限手段と、
を備えた情報処理装置。
【請求項２】
請求項１に記載された情報処理装置において、
前記制限手段は、前記負荷情報に基づいて、前記プログラムモジュールを実行する前記複数のＣＰＵコアにより次の前記プログラムモジュールを実行可能か否か判定する判定手段を有し、前記判定手段の判定結果に基づいて、前記複数のＣＰＵコアによる前記次のプログラムモジュールの起動を制限する情報処理装置。
【請求項３】
請求項２に記載された情報処理装置において、
前記制限手段は、前記判定手段により実行可能でないと判定されたときに、前記次のプログラムモジュールの実行を停止する手段と、前記判定手段より実行可能であると判定されたときに、前記次のプログラムモジュールの実行の停止を解除する手段と、を有する情報処理装置。
【請求項４】
請求項１ないし３のいずれかに記載された情報処理装置において、
前記判断手段は、前記起動条件に基づいて、前記複数のプログラムモジュールの間の依存関係を特定する手段と、前記依存関係に基づいて、前記複数のプログラムモジュールの起動順序を判断する手段と、を有する情報処理装置。
【請求項５】
請求項１ないし４のいずれかに記載された情報処理装置において、
前記更新手段により更新された前記負荷情報に基づいて、前記起動処理中におけるスレッドの生成を制限する手段を備えた情報処理装置。
【請求項６】
請求項１ないし５のいずれかに記載された情報処理装置において、
前記複数のＣＰＵコアにより使用されるメモリの使用率を取得する使用率取得手段と、
前記メモリの使用率に基づいて、前記複数のＣＰＵコアによる前記プログラムモジュールの起動を制限し、前記複数のＣＰＵコアによる前記メモリの使用を規制する規制手段と、
を備えた情報処理装置。
【請求項７】
請求項６に記載された情報処理装置において、
前記メモリの使用率に基づいて、前記起動処理中におけるスレッドの生成を制限する手段を備えた情報処理装置。
【請求項８】
請求項１ないし７のいずれかに記載された情報処理装置において、
前記更新手段は、所定の前記プログラムモジュールを実行するように指定された所定の前記ＣＰＵコアの負荷情報を更新する手段を有し、
前記制限手段は、前記所定のＣＰＵコアの負荷情報に基づいて、前記所定のＣＰＵコアによる前記所定のプログラムモジュールの起動を制限する手段を有する情報処理装置。
【請求項９】
複数のＣＰＵコアにより起動処理の複数のプログラムモジュールを実行する情報処理装置のコンピュータを、請求項１ないし８のいずれかに記載された情報処理装置の各手段として機能させるためのプログラム。
【請求項１０】
複数のＣＰＵコアにより起動処理の複数のプログラムモジュールを実行する情報処理装置の起動方法であって、
前記複数のプログラムモジュールの起動条件を取得する工程と、
前記起動条件に基づいて、前記複数のＣＰＵコアによる前記複数のプログラムモジュールの起動順序を判断する工程と、
前記複数のＣＰＵコアにより、前記起動順序に従って、起動可能な前記プログラムモジュールを実行して、前記複数のプログラムモジュールを起動する工程と、
前記起動処理中に変化する前記複数のＣＰＵコアの負荷を示す負荷情報を更新する工程と、
前記更新された負荷情報に基づいて、前記複数のＣＰＵコアによる前記プログラムモジュールの起動を制限する工程と、
を有する情報処理装置の起動方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のＣＰＵ（Central Processing Unit）コアを備えた情報処理装置、情報処理装置の起動方法、及び、プログラムに関する。
【背景技術】
【０００２】
複数のＣＰＵコアを有するマルチコアＣＰＵは、情報処理装置において広く採用されており、近年では、種々の機器に組み込まれた情報処理装置（組み込みシステム）においても普及している。これら情報処理装置では、マルチコアＣＰＵを有効に利用して、各種処理を最適化することが望まれている。特に、ユーザビリティの観点から、電源をオンにしてからユーザが使用可能になるまでの情報処理装置の起動時間を短縮して、情報処理装置を速く起動することが強く求められている。
【０００３】
そこで、従来、マルチコアＣＰＵを利用して、分割されたカーネルイメージを順次実行することで、起動の高速化を図るオペレーティングシステムの起動方法が知られている（特許文献１参照）。
しかしながら、特許文献１に記載された従来の起動方法では、カーネル起動以前のオペレーティングシステムの起動のみを速くしており、カーネル起動後にマルチコアＣＰＵを有効に利用できずに、情報処理装置の起動が遅延する虞がある。
【０００４】
これに対し、従来、カーネル起動後に、マルチコアＣＰＵにより、起動処理の複数のプログラムモジュールを同時に実行して、起動時間の短縮を図る情報処理装置が知られている。
図１５は、従来の情報処理装置による起動処理の手順を示す図であり、ＵＮＩＸ（登録商標）又はＬｉｎｕｘ（登録商標）が搭載された情報処理装置による周知の起動処理の例を示している。
【０００５】
まず、比較のため、複数のプログラムモジュールを同時に実行しない情報処理装置の起動処理について説明する。図１５Ａに示す起動処理では、情報処理装置の起動時に、ＵＮＩＸのｉｎｉｔ（ここでは、ＳｙｓＶｉｎｉｔ）プログラムが起動する。ｉｎｉｔプログラムは、情報処理装置の起動処理を行うプログラムである。このプログラムに基づくｉｎｉｔプロセスにより、情報処理装置が初期化され、起動処理の複数のプログラムモジュールが逐次実行される。これにより、複数のプログラムモジュール（ここでは、Syslog、D-Bus、Avahi、Bluetooth（登録商標））が逐次起動する。
【０００６】
図１５Ｂに示す起動処理では、ｉｎｉｔプログラムであるＵｐｓｔａｒｔが起動して、複数のプログラムモジュールが実行される。その際、例えば、ＵＳＢ（Universal Serial Bus）デバイスの準備完了前に、ＵＳＢに関連するプログラムモジュールが起動されると、そのメモリへのロードによりリソースが消費されて、他のプログラムモジュールの起動が阻害される。また、他のプログラムモジュールが起動しなければ、機能しないプログラムモジュールもある。そこで、ここでは、複数のプログラムモジュールの起動が制御されて、情報処理装置に発生するイベント等をトリガーにして、プログラムモジュールが実行される。これにより、無駄なプログラムモジュールの起動によるリソースの競合を抑制しつつ、一部のプログラムモジュール（ここでは、AvahiとBluetooth）を同時に実行する。
【０００７】
図１５Ｃに示す起動処理では、Ｌｉｎｕｘのｓｙｓｔｅｍｄが起動して、複数のプログラムモジュールが実行される。ｓｙｓｔｅｍｄは、Ｕｐｓｔａｒｔを発展させたｉｎｉｔプログラムであり、複数のプログラムモジュールを同時に実行して、情報処理装置の起動時間を短縮する。ここでは、Syslog、D-Bus、Avahi、及び、Bluetoothが同時に実行されて起動する。
【０００８】
ここで、プログラムモジュールの起動時には、例えば、ＣＰＵコアにより使用されるメモリが確保されて、プログラムモジュールが記憶装置からメモリにロードされ、プログラムモジュールがＣＰＵコアにより実行される。このように、プログラムモジュールの起動処理は、情報処理装置の各リソースを消費して、リソースに負荷をかける処理である。
【０００９】
これに対し、ｓｙｓｔｅｍｄでは、起動条件を満たす複数のプログラムモジュールが無差別に同時に実行されるため、リソースの競合が生じることがある。その結果、複数のＣＰＵコアにより、起動処理の複数のプログラムモジュールを円滑に実行できずに、情報処理装置の起動が遅延する虞がある。特に、充分な容量のメモリと多くのＣＰＵコアを備えたサーバに比べて、リソースが制限される組み込みシステムでは、リソースの競合が生じ易く、複数のプログラムモジュールの同時実行による影響が大きくなる。
【発明の概要】
【発明が解決しようとする課題】
【００１０】
本発明は、前記従来の問題に鑑みなされたもので、その目的は、複数のＣＰＵコアにより起動処理の複数のプログラムモジュールを円滑に実行して、情報処理装置の起動の遅延を抑制することである。
【課題を解決するための手段】
【００１１】
本発明は、複数のＣＰＵコアにより起動処理の複数のプログラムモジュールを実行する情報処理装置であって、前記複数のプログラムモジュールの起動条件を取得する起動条件取得手段と、前記起動条件に基づいて、前記複数のＣＰＵコアによる前記複数のプログラムモジュールの起動順序を判断する判断手段と、前記複数のＣＰＵコアにより、前記起動順序に従って、起動可能な前記プログラムモジュールを実行して、前記複数のプログラムモジュールを起動する起動手段と、前記起動処理中に変化する前記複数のＣＰＵコアの負荷を示す負荷情報を更新する更新手段と、前記更新手段により更新された前記負荷情報に基づいて、前記複数のＣＰＵコアによる前記プログラムモジュールの起動を制限する制限手段と、を備えた情報処理装置である。
【発明の効果】
【００１２】
本発明によれば、複数のＣＰＵコアにより起動処理の複数のプログラムモジュールを円滑に実行して、情報処理装置の起動の遅延を抑制することができる。
【図面の簡単な説明】
【００１３】
【図１】本実施形態の情報処理装置による起動処理の概略を示す図である。
【図２】本実施形態の画像形成装置のハードウエア構成を示すブロック図である。
【図３】本実施形態の画像形成装置のソフトウエア構成を示すブロック図である。
【図４】本実施形態の起動処理モジュールの構成図である。
【図５】本実施形態のターゲットリストの一例を示す図である。
【図６】本実施形態の起動スクリプトの一例を示す図である。
【図７】本実施形態の複数のプログラムモジュールの間の依存関係を示す図である。
【図８】本実施形態の複数のプログラムモジュールの起動順序を示す図である。
【図９】本実施形態のプログラムモジュールの起動調整部を示すブロック図である。
【図１０】本実施形態の起動処理モジュールによる処理手順を示すフローチャートである。
【図１１】本実施形態の起動処理モジュールによるプログラムモジュールの起動手順を示すフローチャートである。
【図１２】本実施形態の起動調整部の処理手順を示すフローチャートである。
【図１３】本実施形態の起動処理モジュールのスリープ状態を解除する手順を示すフローチャートである。
【図１４】本実施形態のスレッドの生成処理の手順を示すフローチャートである。
【図１５】従来の情報処理装置による起動処理の手順を示す図である。
【発明を実施するための形態】
【００１４】
本発明の情報処理装置と情報処理装置の起動方法の一実施形態について、図面を参照して説明する。
本実施形態の情報処理装置は、少なくとも１つのマルチコアＣＰＵを備えている。マルチコアＣＰＵは、複数のＣＰＵコア（プロセッサコア）を有するマルチコアプロセッサであり、複数のＣＰＵコアにより、複数の処理を同時に実行する。情報処理装置の起動時には、マルチコアＣＰＵの複数のＣＰＵコアにより、情報処理装置の起動処理の複数のプログラムモジュールが実行されて、情報処理装置が起動される。プログラムモジュールは、情報処理装置の起動処理において実行される各種のプログラムであり、それぞれＣＰＵコアによりプロセスとして実行（起動）される。
【００１５】
図１は、本実施形態の情報処理装置による起動処理の概略を示す図であり、３つのＣＰＵコアを備えた情報処理装置による起動処理の例を示している。
図示のように、情報処理装置の起動時に、起動処理を行うプログラム（ここでは、ｉｎｉｔプログラム）が起動して、このプログラムに基づくｉｎｉｔプロセスにより、起動処理の複数のプログラムモジュールＡ〜Ｈが実行される。複数のプログラムモジュールＡ〜Ｈは、右に向かう白抜き矢印（白矢印）で示すように、３つのＣＰＵコアにより、所定の順序で実行されて起動する。
【００１６】
なお、図１において、通常の矢印（黒矢印）は、始点にある白矢印のプログラムモジュールと終点にある白矢印のプログラムモジュールの間に依存関係があることを示している。依存関係とは、プログラムモジュールが他のプログラムモジュールに依存するときのプログラムモジュールの間の関係である。例えば、プログラムモジュールが他のプログラムモジュールの起動を条件に起動可能になるとき、又は、プログラムモジュールの起動が他のプログラムモジュールにより規制されるときに、プログラムモジュールの間に依存関係が生じる。
【００１７】
本実施形態の情報処理装置は、複数のプログラムモジュール（プロセス）の実行（起動）を制御して、可能な限りＣＰＵコアの数と同じ数のプログラムモジュールを実行する。また、複数のプログラムモジュールの間の依存関係に基づいて、複数のプログラムモジュールの起動順序を制御しつつ、複数のＣＰＵコアの負荷に対応して、プログラムモジュールの起動を制限する。ここでは、３つのＣＰＵコアにより、３つのプログラムモジュールを同時に実行できるが、プログラムモジュールＣはプログラムモジュールＢに依存し、プログラムモジュールＤ、ＥはプログラムモジュールＡに依存する。そのため、まず、プログラムモジュールＡ、Ｂが実行される。
【００１８】
プログラムモジュールＡの起動が完了したときに、プログラムモジュールＤ、Ｅが起動可能になり、プログラムモジュールＢとともに、プログラムモジュールＤ、Ｅが実行される。続いて、プログラムモジュールＢの起動が完了したときに、プログラムモジュールＣが起動可能になり、プログラムモジュールＤ、Ｅとともに、プログラムモジュールＣが実行される。プログラムモジュールＥの起動が完了したときには、ここでは、プログラムモジュールＦが実行される。また、プログラムモジュールＤの起動が完了したときに、プログラムモジュールＧが実行され、プログラムモジュールＣの起動が完了したときに、プログラムモジュールＨが実行される。
【００１９】
このように、情報処理装置は、複数のプログラムモジュールを無差別に同時に実行することなく、複数のプログラムモジュールの起動順序を制御する。また、リソース（ここでは、ＣＰＵリソース）の状況に対応して、同時に実行するプログラムモジュールの数が制限され、ＣＰＵコアの数以下の数のプログラムモジュールが実行される。これにより、リソースの競合を緩和して、リソースの競合による起動処理の遅延を抑制し、情報処理装置の起動時間を短縮する。以下、この情報処理装置について、情報処理装置が組み込まれた画像形成装置を例にとり、具体的に説明する。ここでは、画像形成装置は、ファクシミリ、プリンタ、コピー、スキャナ等の複数の機能を有する複合機（ＭＦＰ：Multi-Function Peripheral）である。
【００２０】
図２は、本実施形態の画像形成装置１のハードウエア構成を示すブロック図である。
図示のように、情報処理装置の一例である画像形成装置１は、エンジン１１と、拡張スロット用ボード１２と、コントローラ１３と、ＵＳＢＩ／Ｆ（インターフェース）１４を備えている。エンジン１１は、画像形成装置１のエンジン、例えば、プリンタエンジン、スキャナエンジン、ファクシミリエンジンである。拡張スロット用ボード１２は、ＰＣＩ（Peripheral Component Interconnect）スロットである２つのスロット（ａ）２１、スロット（ｂ）２２を有し、コントローラ１３に接続される。コントローラ１３は、エンジン１１を含む画像形成装置１の全体を制御する。ＵＳＢＩ／Ｆ１４は、各種のＵＳＢデバイスと接続される。
【００２１】
次に、コントローラ１３が有する構成について説明する。マルチコアＣＰＵ２３は、複数のＣＰＵコア（図示せず）を有するＣＰＵであり、ＯＳ（オペレーティングシステム）、及び、各種のプログラムを実行して、画像形成装置１の各部を制御する。ＡＳＩＣ（Application Specific Integrated Circuit）（Ａ）２４は、マルチコアＣＰＵ２３により制御されて、各種の画像処理を行う。例えば、ＡＳＩＣ（Ａ）２４により、外部装置から受信した印刷データが画像データに変換される。ＭＥＭ（メモリ）２５は、画像データを記憶するラインメモリであるとともに、画像形成装置１のメインメモリであり、プログラムのワークエリアとしても使用される。
【００２２】
ＨＤＤ（ハードディスクドライブ）２６は、画像データ、管理情報、フォントデータ、ＯＳ、及び、プログラム等を記憶する記憶装置である。ＳＤ（Secure Digital）２７は、不揮発性メモリの一例であるＳＤメモリカードであり、ＳＤメモリカードスロットに挿入されている。ＬＯＧＩＣ２８は、ＰＣＩ信号からローカルバス信号を作り出すＩＣ（Integrated Circuit）である。ＲＯＭ（Read Only Memory）（Ａ）２９とＲＯＭ（Ｂ）３０は、画像形成装置１の電源がオンになったときに実行されるプログラム（例えば、ＢＩＯＳ（Basic Input/Output System））を記憶する。
【００２３】
ＮＶＲＡＭ（Nonvolatile Random Access Memory）３１は、不揮発性メモリの一例であり、画像形成装置１の設定等を記憶する。スロット（Ａ）３２、スロット（Ｂ）３３、及び、スロット（Ｃ）３４は、ＰＣＩスロットである。ＡＳＩＣ（Ｂ）３５は、ＡＳＩＣ（Ａ）２４とＰＣＩで接続され、画像形成装置１の電源を制御する。操作部３６は、表示画面を有するユーザインターフェースであり、ユーザによる画像形成装置１への操作を受け付ける。
【００２４】
画像形成装置１の起動時には、電源のオンにより、ＡＳＩＣ（Ｂ）３５にリセット信号が入力され、ＡＳＩＣ（Ｂ）３５が電源を制御して画像形成装置１の各部に電力を供給する。また、画像形成装置１の各部にもリセット信号が入力される。続いて、マルチコアＣＰＵ２３がＲＯＭ（Ａ）２９に記憶された初期化プログラムを実行して、初期化プログラムにより、画像形成装置１の各部が初期化される。その後、画像形成装置１は、マルチコアＣＰＵ２３により、汎用ＯＳを起動し、各種のプログラムとアプリケーションを起動する。
【００２５】
図３は、本実施形態の画像形成装置１のソフトウエア構成を示すブロック図である。
図示のように、画像形成装置１は、PRINT-APL（プリントアプリケーション）４１、COPY-APL（コピーアプリケーション）４２、FAX-APL（ＦＡＸアプリケーション）４３、SCAN-APL（スキャナアプリケーション）４４、及び、NETWORK-APL（ネットワークアプリケーション）４５を有する。これらアプリケーションは、ジョブの実行条件を設定するためのＵＩ（User Interface）画面を操作部３６の表示画面に表示し、操作部３６により、ユーザの設定を受け付ける。なお、アプリケーションとは、汎用ＯＳ５５よりも上位の階層に位置するプログラムの呼称であり、組み込みプログラムの一種である。
【００２６】
サービス−ＡＰＩ４６は、上記したアプリケーションがサービス層のサービスを読み出すためのＡＰＩ（Application Programming Interface）である。サービス層には、ＥＣＳ（エンジンコントロールサービス）４７、ＭＣＳ（メモリコントロールサービス）４８、ＯＣＳ（オペレーションパネルコントロールサービス）４９、ＦＣＳ（ＦＡＸコントロールサービス）５０、ＮＣＳ（ネットワークコントロールサービス）５１、ＳＣＳ（システムコントロールサービス）５２、及び、ＳＲＭ（システムリソースマネジャー）５３がある。
【００２７】
起動処理モジュール５４は、画像形成装置１の起動処理を行うプログラム（ｉｎｉｔプログラム）であり、後述するように、画像形成装置１の起動時に、ｉｎｉｔプロセスを実行する。汎用ＯＳ５５は、ＵＮＩＸ、又は、Ｌｉｎｕｘ等のＯＳである。エンジンコマンドＩ／Ｆ５６は、汎用ＯＳ５５がエンジン１１と通信するためのプログラミングインターフェースである。ハードウエア５７は、コントローラ１３のハードウエアリソース（マルチコアＣＰＵ２３、ＭＥＭ２５等）を示している。
【００２８】
図４は、本実施形態の起動処理モジュール５４の構成図である。
図示のように、起動処理モジュール５４が起動すると、画像形成装置１の機能実現手段である起動処理モジュール５４により、ターゲットリスト６１と起動スクリプト６２が取得される。ターゲットリスト６１と起動スクリプト６２は、ＨＤＤ２６のファイルシステムに予め記憶されており、起動処理モジュール５４は、ＨＤＤ２６から読み出したターゲットリスト６１と起動スクリプト６２に基づいて、画像形成装置１の起動処理を行う。
【００２９】
図５は、本実施形態のターゲットリスト６１の一例を示す図である。
図示のように、ターゲットリスト６１は、画像形成装置１の起動処理において起動するプログラムモジュールのリストであり、プログラムモジュール（ここでは、Ａｐｐ１、Ａｐｐ２）が起動の優先順位に対応して順に記述される。Ａｐｐ１、Ａｐｐ２は、プログラムモジュールの一種であるアプリケーションである。複数のプログラムモジュールがあるときには、上位のプログラムモジュールほど起動の優先順位が高く、図５に示す例では、Ａｐｐ１がＡｐｐ２よりも優先して起動される。以下では、ターゲットリスト６１に記述されたプログラムモジュールを、他のプログラムモジュールと特に区別する必要があるときには、ターゲットプログラムモジュールという。
【００３０】
なお、ターゲットリスト６１には、アプリケーションに限定されず、種々のプログラムモジュールが記述される。また、ターゲットリスト６１には、最終的に起動するターゲットプログラムモジュール（Ａｐｐ１、Ａｐｐ２）のみが記述される。従って、ターゲットプログラムモジュールを起動するために事前に起動されるプログラムモジュールがあるときでも、そのプログラムモジュールは、ターゲットリスト６１には記述されない。
【００３１】
起動スクリプト６２（図４参照）は、画像形成装置１の起動処理のための複数のプログラムモジュールの詳細が記述されたスクリプトであり、複数のプログラムモジュール毎に予め作成される。また、起動スクリプト６２には、各プログラムモジュールの起動条件も記述されている。起動条件は、各プログラムモジュールを実行して起動するための条件（実行条件）であり、プログラムモジュールの種類に対応して様々な条件が設定される。記憶手段であるＨＤＤ２６は、起動スクリプト６２、及び、起動スクリプト６２に含まれる複数のプログラムモジュールのそれぞれの起動条件を記憶する。
【００３２】
図６は、本実施形態の起動スクリプト６２の一例を示す図であり、一般的なセクションからなる起動スクリプト６２を示している。
図示のように、起動スクリプト６２（ここでは、somedaemon.script）は、起動処理モジュール５４がプログラムモジュールの起動の動作を決定してプログラムモジュールを起動するためのテキストになっている。例えば、「unit」セクションにおいて、「Description」は、起動するプログラムモジュール名を指定している。また、「Requires」は、プログラムモジュールを起動するための事前条件（起動条件の一例）を示しており、ここでは、プログラムモジュールは、「/somedir」がマウントされたことを条件に起動する。他のプログラムモジュールの起動が条件になるときには、その旨が「Requires」に記述される。
【００３３】
「Effect」は、起動スクリプト６２の実行により生じる画像形成装置１のイベントを表しており、プログラムモジュールの事後条件を規定する。「Effect="created /var/XXX"」は、「var」というディレクトリに「XXX」というファイルが作成されることを示している。「Effect」のイベントが他の起動スクリプト６２の「Requires」で要求されているときに、プログラムモジュールの間に依存関係が生じる。例えば、プログラムモジュールＭの起動スクリプト６２の「Requires」が、プログラムモジュールＮの起動スクリプト６２の「Effect」のイベントを起動条件（事前条件）とするときには、プログラムモジュールＭはプログラムモジュールＮに依存する。このように、起動処理モジュール５４は、起動スクリプト６２に基づいて、プログラムモジュールの間の依存関係を判断して特定する。
【００３４】
「service」セクションの「ExecStart」には、起動するプログラムモジュールと、その記憶場所（path）が記述されており、シェルスクリプトが記述されることもある。画像形成装置１の起動処理において（図４参照）、起動処理モジュール５４は、複数のプログラムモジュールの起動スクリプト６２に基づいて、各プログラムモジュールを実行して、複数のプログラムモジュールを起動する。
【００３５】
起動処理モジュール５４のメイン６３は、起動処理モジュール５４のメインルーチンであり、起動処理モジュール５４が行う処理の全体を管理するとともに、ＣＰＵコアによりプログラムモジュールを実行させて、プログラムモジュールの起動を開始する。また、起動処理モジュール５４の起動により、メイン６３は、ＨＤＤ２６からターゲットリスト６１と起動スクリプト６２を取得し、以下のサブルーチンの処理結果に基づいて、各プログラムモジュールを起動する。
【００３６】
起動スクリプト解析部６４は、ターゲットリスト６１に基づいて、ターゲットプログラムモジュールの起動に必要な起動スクリプト６２を取得する。この起動スクリプト６２は、ターゲットプログラムモジュールの起動スクリプト６２に加えて、ターゲットプログラムモジュールの起動に必要な１以上のプログラムモジュールの起動スクリプト６２を含む。
【００３７】
起動スクリプト６２は、取得データ（内部データ）としてＭＥＭ２５に記憶され、起動スクリプト解析部６４により解析される。具体的には、起動スクリプト６２に記述されたプログラムモジュールの起動条件に基づいて、起動スクリプト解析部６４は、プログラムモジュールの起動に、他のプログラムモジュールの起動が必要であることを特定する。或いは、起動スクリプト解析部６４は、プログラムモジュールの起動に、画像形成装置１のデバイス（ハードウエアを含む）の起動が必要であることを特定する。
【００３８】
このように、起動スクリプト解析部６４は、起動条件取得手段、及び、依存関係特定手段として機能する。画像形成装置１の起動処理において、起動スクリプト解析部６４は、起動スクリプト６２から複数のプログラムモジュールのそれぞれの起動条件を取得して、起動条件に基づいて、複数のプログラムモジュールの間の依存関係を特定する。また、起動スクリプト解析部６４は、プログラムモジュールの起動条件に基づいて、プログラムモジュールの起動に関連して監視すべき画像形成装置１のリソースを特定する。
【００３９】
プログラム状態監視部６５は、画像形成装置１の起動処理において、複数のプログラムモジュールの状態を監視する。例えば、起動スクリプト解析部６４が、プログラムモジュールＰの起動にプログラムモジュールＱの起動が必要であり、プログラムモジュールＱの起動にプログラムモジュールＲの起動が必要であると特定したとする。この場合に、プログラム状態監視部６５は、プログラムモジュールＰを起動するために、プログラムモジュールＱ、Ｒの実行状態（実行状況）を監視し、プログラムモジュールＱ、Ｒの起動が完了したか否かを判断する。
【００４０】
デバイス監視部６６は、プログラムモジュールの起動に必要な画像形成装置１のデバイスを監視する。例えば、起動スクリプト解析部６４が、プログラムモジュールの起動に、ＨＤＤ２６をマウントすることが必要だと特定したときには、デバイス監視部６６は、ＨＤＤ２６の状態を監視して、ＨＤＤ２６がマウントされたか否かを判断する。起動スクリプト解析部６４が、プログラムモジュールの起動に、ＵＳＢＩ／Ｆ１４をRead状態にすることが必要だと特定したときには、デバイス監視部６６は、ＵＳＢＩ／Ｆ１４の状態を監視して、ＵＳＢＩ／Ｆ１４がReady状態になったか否かを判断する。
【００４１】
リソース監視部６７は、プログラムモジュールの起動に関連する画像形成装置１のリソースを監視する。例えば、ファイルの作成が起動条件として起動スクリプト６２に記述されているときには、起動スクリプト解析部６４は、ファイルが記憶されるＭＥＭ２５が監視するリソースであると特定する。この場合には、リソース監視部６７は、ＭＥＭ２５にファイルが記憶されたか否かを監視する。
【００４２】
次に、起動処理モジュール５４により、ターゲットプログラムモジュール（図５参照）である２つのアプリケーション（Ａｐｐ１、Ａｐｐ２）を起動する手順について説明する。
図７は、本実施形態の複数のプログラムモジュールの間の依存関係を示す図であり、プログラムモジュールの起動条件となるデバイスの状態も示している。
図７において、矢印は、プログラムモジュールを起動する際の依存関係を示している。矢印の終点にあるプログラムモジュールは、矢印の始点にあるプログラムモジュールの起動を条件として起動し、或いは、矢印の始点にあるデバイスの状態が実現したことを条件として起動する。
【００４３】
図示のように、一部の矢印には、矢印の終点にあるプログラムモジュールの起動条件（事前条件）となるイベントが記載されている。この起動条件は、起動スクリプト６２の「Effect」と「Requires」の記述に対応する。例えば、ＫＭＭからＳＣＳに向かう矢印の記載「create/var/XXX」は、ＫＭＭが起動することで、「var」というディレクトリに「XXX」というファイルが作成されることを示している。ＳＣＳは、「create/var/XXX」を条件に起動可能になる。また、ｕｓｂｄから延びる矢印には、「attached id＝XXX」と記載されている。「attached」は、ｕｓｂｄの起動により、汎用ＯＳ５５においてＵＳＢドライバが有効になり、ＵＳＢデバイスと接続されたことを意味する。「id」は、ポートＩＤを意味しており、何番目のＵＳＢポートにＵＳＢデバイスがつながっているかを示している。ＯＣＳと指紋認証モジュールは、「attached id＝XXX」を条件に起動可能になる。
【００４４】
ＵＳＢデバイスがＵＳＢＩ／Ｆ１４に接続されたときに、ＵＳＢデバイスの接続が、起動したｕｓｂｄにより検知されて、デバイス監視部６６に通知される。或いは、デバイス監視部６６が、ｕｓｂｄの状態を監視して、ＵＳＢデバイスの接続を検知する。これにより、デバイス監視部６６は、ＵＳＢデバイスがRead状態になり使用可能であると判断する。ＵＳＢデバイスとして、操作部デバイスがＵＳＢＩ／Ｆ１４に接続されて、ＯＣＳの起動条件が満たされたときに、起動処理モジュール５４のメイン６３が、操作部デバイスを管理するＯＣＳを起動する。また、ＵＳＢデバイスとして、指紋認証用デバイスがＵＳＢＩ／Ｆ１４に接続されて、指紋認証モジュールの起動条件が満たされたときに、メイン６３が指紋認証モジュールを起動する。
【００４５】
以上の各依存関係を含むプログラムモジュールの間の依存関係に伴い、図７に示す例では、Ａｐｐ１を起動するために、ＳＣＳ、ＮＣＳ、ＯＣＳの起動が必要であり、ＳＣＳを起動するために、ＫＭＭを起動することが必要である。また、ＯＣＳを起動するために、ｕｓｂｄを起動することが必要であり、ｕｓｂｄを起動するために、ＵＳＢＩ／Ｆ１４がReady状態であることが必要である。これに対し、Ａｐｐ２は、ＨＤＤ２６がマウントされていることを条件に起動可能になり、デバイス監視部６６によりＨＤＤ２６がマウントされたと判断された後に、起動される。
【００４６】
画像形成装置１の起動処理において、起動処理モジュール５４の起動スクリプト解析部６４は、複数のプログラムモジュールを実行して起動する順序（起動順序）を判断する判断手段として機能する。起動スクリプト解析部６４は、起動スクリプト６２から取得した複数のプログラムモジュールの起動条件に基づいて、マルチコアＣＰＵ２３の複数のＣＰＵコアによる複数のプログラムモジュールの起動順序を判断する。その際、起動スクリプト解析部６４は、起動条件に基づいて、複数のプログラムモジュールの間の依存関係を特定し、特定された依存関係に基づいて、複数のプログラムモジュールの起動順序を判断する。
【００４７】
具体的には、起動スクリプト解析部６４は、起動スクリプト６２に記述されたプログラムモジュールの起動条件に基づいて、プログラムモジュールを起動するために事前に起動する必要があるプログラムモジュールやデバイスを特定する。これにより、プログラムモジュール（第１プログラムモジュール）の起動に必要な１以上の他のプログラムモジュール（第２プログラムモジュール）を特定する。
【００４８】
ここでは、起動スクリプト解析部６４は、ターゲットリスト６１から優先順位に従ってプログラムモジュール名を取得し、各ターゲットプログラムモジュールの起動スクリプト６２を取得して、起動条件である事前条件を確認する。事前条件があるときには、その事前条件を満たすために起動が必要なプログラムモジュールを、起動スクリプト６２に基づいて特定する。また、事前条件が要求するイベントを事後条件とするプログラムモジュールを、起動スクリプト６２から検索する。このように、事前条件と事後条件を順に辿ることで、ターゲットプログラムモジュール（Ａｐｐ１、Ａｐｐ２）の起動に必要な全てのプログラムモジュールを特定するとともに、起動対象の複数のプログラムモジュールの起動順序を判断する。
【００４９】
画像形成装置１の起動処理において、起動処理モジュール５４のメイン６３は、プログラムモジュールの起動を制御して複数のプログラムモジュールを起動する起動手段（起動制御手段）として機能する。メイン６３は、複数のＣＰＵコアにより、起動スクリプト解析部６４により判断された起動順序に従って、起動条件を満たす起動可能なプログラムモジュールを順次実行する。これにより、起動対象の複数のプログラムモジュールが、起動順序に従って順次起動される。
【００５０】
図８は、本実施形態の複数のプログラムモジュールの起動順序を示す図であり、プログラムモジュールの起動条件となるデバイスの状態も示している。また、図８は、図７に示す複数のプログラムモジュールの依存関係に基づく起動順序を示すシーケンス図であり、２つのＣＰＵコアにより、複数のプログラムモジュールを起動する例を示している。
図８において、右に向かう矢印は、各プログラムモジュールのプロセスによりＣＰＵコアが専有されて、各プログラムモジュールが起動中であることを示している。ただし、矢印の終端が、プロセスの終了を示しているわけではなく、実際のプロセスは、動作や処理によっては間欠的にＣＰＵコアを専有することがある。
【００５１】
図示のように、上記した図７に示す依存関係に基づいて、起動スクリプト解析部６４は、Ａｐｐ１を起動するために、最初にＫＭＭとＮＣＳを起動すると判断し、かつ、ＵＳＢＩ／Ｆ１４がReady状態であることが必要であると判断する。その結果、メイン６３は、複数のＣＰＵコアによりＫＭＭとＮＣＳを実行して、ＫＭＭとＮＣＳの起動を開始する（ｔ１）。同時に、プログラム状態監視部６５が、ＫＭＭとＮＣＳの実行状態を監視する。また、デバイス監視部６６は、ＵＳＢＩ／Ｆ１４の状態を監視し、ＵＳＢＩ／Ｆ１４がReady状態になったと判断する（ｔ２）。続いて、プログラム状態監視部６５によりＫＭＭの起動が完了したと判断されたときに、メイン６３は、ｕｓｂｄの起動を開始する（ｔ３）。
【００５２】
複数のＣＰＵコアにかかる負荷は、ＫＭＭの起動が完了した時点では、次のプログラムモジュールを起動可能な状態（負荷状態）まで低下しており、ｕｓｂｄの起動開始により、再び元の状態に戻る。以降も、プログラムモジュールの起動完了と、プログラムモジュールの起動開始に対応して、複数のＣＰＵコアの負荷が変化する。
【００５３】
プログラム状態監視部６５によりＮＣＳの起動が完了したと判断されたときに、メイン６３は、ＳＣＳの起動を開始する（ｔ４）。続いて、プログラム状態監視部６５によりｕｓｂｄの起動が完了したと判断されたときに、メイン６３は、ＯＣＳの起動を開始する（ｔ５）。また、デバイス監視部６６は、Ａｐｐ２の起動に必要なデバイスとしてＨＤＤ２６を監視しており、ＨＤＤ２６がReady状態になったときに、ＨＤＤ２６がマウントされたと判断する（ｔ６）。
【００５４】
次に、プログラム状態監視部６５によりＳＣＳとＯＣＳの起動が完了したと判断されたときに、メイン６３は、起動条件が満たされたＡｐｐ１の起動を開始する（ｔ７）。最後に、プログラム状態監視部６５によりＡｐｐ１の起動が完了したと判断されたときに、メイン６３は、起動条件が満たされたＡｐｐ２の起動を開始する（ｔ８）。Ａｐｐ２の起動完了により（ｔ９）、ターゲットリスト６１に記述された全てのターゲットプログラムモジュールの起動が完了する。
【００５５】
本実施形態の画像形成装置１は、以上の起動処理の間、複数のＣＰＵコアの負荷とメモリの使用率に基づいて、複数のＣＰＵコアによるプログラムモジュールの起動を調整する。これにより、複数のプログラムモジュールの同時起動によるリソースの競合を緩和する。このプログラムモジュールの起動調整処理は、起動処理モジュール５４にとっては煩雑な処理である。そのため、画像形成装置１の汎用ＯＳ５５（カーネル）が、機能実現手段としてプログラムモジュールの起動調整部（起動調整モジュール）を有し、起動調整部の機能を提供する。画像形成装置１のリソース情報を有する汎用ＯＳ５５により、起動調整処理を行うことで、起動調整の判断と起動調整処理が迅速に実行される。起動処理モジュール５４のメイン６３がシステムコールを発行したときに、汎用ＯＳ５５の起動調整部が呼び出されてプログラムモジュールの起動調整処理を行う。
【００５６】
図９は、本実施形態のプログラムモジュールの起動調整部７０を示すブロック図である。
図示のように、起動調整部７０は、複数のＣＰＵコアの負荷情報を更新する負荷情報更新部７１と、プログラムモジュールの起動を制限する起動制限部７２と、メモリの使用率を更新する使用率更新部７３と、メモリの使用を規制する使用規制部７４を有する。
【００５７】
負荷情報更新部７１は、複数のＣＰＵコアの負荷を示す負荷情報を取得する取得手段であり、かつ、負荷情報を更新する更新手段である。負荷情報は、プログラムモジュールを実行する複数のＣＰＵコアにかかる負荷を示す情報であり、画像形成装置１の起動処理中に、複数のＣＰＵコアの負荷に対応して変化する。負荷情報更新部７１は、複数のＣＰＵコアにより複数のプログラムモジュールを起動する間に、複数のＣＰＵコアの負荷情報を繰り返し更新する。画像形成装置１の起動処理中に、負荷情報更新部７１により、負荷情報が所定のタイミングで更新されて、最新の負荷情報が取得される。
【００５８】
負荷情報は、例えば、プログラムモジュールを実行しているＣＰＵコアの数情報、複数のＣＰＵコアの負荷率、複数のＣＰＵコアの使用率、又は、ロードアベレージからなる。ここでは、負荷情報は、ロードアベレージであり、負荷情報更新部７１により、算出されて取得される。ロードアベレージは、ＵＮＩＸ系のＯＳが提供するＣＰＵに加わる負荷の大きさを示す指標であり、実行待ちのプログラムモジュール（プロセス）の平均数を反映した値になる。即ち、ロードアベレージは、実行したくても他のプログラムモジュールが実行中で実行できないプログラムモジュールが平均で何個くらいあるのかを示す値になっている。一般的なＵＮＩＸ系のＯＳにおいては、例えば、実行されるプログラムモジュールが入るキュー（実行キュー）のエントリ数の過去の平均値を算出することで、ロードアベレージが求められる。
【００５９】
これに対し、複数のＣＰＵコアを有するマルチコアＣＰＵ２３では、ＣＰＵコア毎にキューがある。そのため、各ＣＰＵコアに紐付いたキューの実行中のタスクの数を合計して、複数のＣＰＵコアにより実行するタスクの総数を取得し、複数回分の総数の平均値を算出する。この平均値がロードアベレージとなり、ロードアベレージをＣＰＵコアの数で割った値が複数のＣＰＵコアの使用率になる。
【００６０】
ここで、画像形成装置１の起動処理は数秒で終わることもあるため、起動処理中のロードアベレージの変化を正確に把握するためには、従来よりも短い時間のロードアベレージを取得する必要がある。そこで、本実施形態の負荷情報更新部７１は、１００ｍｓ（ミリ秒）程度の所定時間（例えば、５０〜１５０ｍｓ）の間におけるロードアベレージを算出する。例えば、複数のＣＰＵコアにより実行するプログラムモジュールの総数を１０ｍｓ毎に取得し、１０回分の総数の平均値を算出する。これにより、１００ｍｓの間におけるロードアベレージが算出される。
【００６１】
このように算出されたロードアベレージは、ＣＰＵリソースに要求される処理の量（処理量）に対応して変化し、１つのＣＰＵコアにより処理可能な処理量を１とした場合のＣＰＵリソースに対する要求処理量を反映した値になる。例えば、１つのプログラムモジュールが１つのＣＰＵコアを専有し続けると、ロードアベレージは次第に１に近づく。２つのプログラムモジュールが２つのＣＰＵコアを専有し続けると、ロードアベレージは２に近づく。１つのＣＰＵコアにより２つのプログラムモジュールを実行する場合に、一方のプログラムモジュールがＣＰＵコアを専有し、かつ、他方のプログラムモジュールが実行待ちの状態では、ロードアベレージは２に近づく。また、ロードアベレージが、画像形成装置１が有するＣＰＵコアの数よりも約１小さくなれば、ＣＰＵリソースに空きができたと判断される。
【００６２】
起動制限部７２は、負荷情報の一例であるロードアベレージに基づいて、複数のＣＰＵコアによるプログラムモジュールの起動（実行）を制限する制限手段である。調整手段である起動調整部７０は、起動制限部７２により、複数のＣＰＵコアにより実行するプログラムモジュールの数を制限して、複数のＣＰＵコアによるプログラムモジュールの起動を調整する。ここでは、起動制限部７２は、ロードアベレージに基づいて、複数のＣＰＵコアによるプログラムモジュールの起動を制限するか否かを判定する判定手段を有し、判定手段の判定結果に基づいて、複数のＣＰＵコアによるプログラムモジュールの起動を制限する。
【００６３】
具体的には、起動制限部７２の判定手段は、負荷情報更新部７１により更新されたロードアベレージに基づいて、プログラムモジュールを実行する複数のＣＰＵコアにより次のプログラムモジュール（新たなプログラムモジュール）を実行可能か否か判定する。これにより、新たなプログラムモジュールの起動を制限するか否かが判定され、起動制限部７２は、判定手段の判定結果に基づいて、複数のＣＰＵコアによる次のプログラムモジュールの起動を制限する。次のプログラムモジュールは、実行中のプログラムモジュールの次に実行される１以上の起動可能なプログラムモジュールであり、複数のプログラムモジュールの起動順序に基づいて特定される。
【００６４】
また、起動制限部７２は、判定手段の判定結果に基づいて、次のプログラムモジュールの実行を停止する停止手段、及び、次のプログラムモジュールの実行の停止を解除する解除手段を有する。起動制限部７２の停止手段は、判定手段により次のプログラムモジュールは実行可能でないと判定されたときに、次のプログラムモジュールの実行を一旦停止する。起動制限部７２の解除手段は、次のプログラムモジュールの実行を停止した後、判定手段により次のプログラムモジュールは実行可能であると判定されたときに、停止手段による次のプログラムモジュールの実行の停止を解除する。これにより、解除手段は、複数のＣＰＵコアにより次のプログラムモジュールを実行させる。
【００６５】
使用率更新部７３は、複数のＣＰＵコアにより使用されるメモリの使用率を取得する取得手段であり、かつ、メモリの使用率を更新する更新手段である。メモリは、プログラムモジュールを実行する複数のＣＰＵコアにより使用されてデータが読み書きされるメインメモリ（ここでは、ＭＥＭ２５）であり、メモリの使用率は、メモリの容量の使用率である。メモリの使用率は、メモリの使用中の容量ＷＡをメモリの使用可能な全容量ＷＢで割った値（ＷＡ／ＷＢ）になり、画像形成装置１の起動処理中に、メモリの使用量に対応して変化する。使用率更新部７３は、これら２つの容量ＷＡ、ＷＢに基づいて、メモリの使用率を算出して取得する。また、使用率更新部７３は、複数のＣＰＵコアにより複数のプログラムモジュールを起動する間に、メモリの使用率を繰り返し更新する。画像形成装置１の起動処理中に、使用率更新部７３により、メモリの使用率が所定のタイミングで更新されて、最新のメモリの使用率が取得される。
【００６６】
規制手段である使用規制部７４は、メモリの使用率に基づいて、複数のＣＰＵコアによるプログラムモジュールの起動（実行）を制限し、複数のＣＰＵコアによるメモリの使用を規制する。従って、使用規制部７４は、プログラムモジュールの起動を制限する制限手段でもあり、メモリの使用率が規定値以上になったときに、プログラムモジュールの起動を制限する。起動調整部７０は、使用規制部７４により、複数のＣＰＵコアにより実行するプログラムモジュールの数を制限して、複数のＣＰＵコアによるプログラムモジュールの起動、及び、メモリの使用率を調整する。
【００６７】
ここでは、使用規制部７４は、メモリの使用率に基づいて、複数のＣＰＵコアによるプログラムモジュールの起動を制限するか否かを判定する判定手段を有し、判定手段の判定結果に基づいて、複数のＣＰＵコアによるプログラムモジュールの起動を制限する。判定手段によりプログラムモジュールの起動を制限すると判定されたときに、使用規制部７４により、新たなプログラムモジュールの起動が停止される。
【００６８】
次に、複数のプログラムモジュールの起動手順を、複数のフローチャートに基づいて説明する。
図１０は、本実施形態の起動処理モジュール５４による処理手順を示すフローチャートである。図１０に示す手順は、ｉｎｉｔプログラムの起動により、汎用ＯＳ５５がｉｎｉｔプロセスを開始することでスタートする。
【００６９】
図示のように、まず、起動処理モジュール５４のメイン６３が、ＨＤＤ２６に記憶されたターゲットリスト６１と複数のプログラムモジュールの起動スクリプト６２を読み込み（Ｓ１０）、ターゲットリスト６１と起動スクリプト６２をＭＥＭ２５に記憶する。続いて、起動スクリプト解析部６４は、起動スクリプト６２に記述されたプログラムモジュールの起動条件を取得し、起動条件に基づいて、プログラムモジュールの起動条件に関連する画像形成装置１のデバイスを特定して、監視すべきデバイスを抽出する。抽出されたデバイスは、監視対象のデバイスとしてＭＥＭ２５の監視デバイスリストに登録される（Ｓ１１）。デバイス監視部６６は、監視デバイスリストに登録されたデバイスを監視して、各デバイスの状態を判断する。
【００７０】
また、起動スクリプト解析部６４は、プログラムモジュールの起動条件に基づいて、プログラムモジュールの起動に関連する画像形成装置１のリソースを特定し、監視すべきリソースを抽出する。抽出されたリソースは、監視対象のリソースとしてＭＥＭ２５の監視リソースリストに登録される（Ｓ１２）。リソース監視部６７は、監視リソースリストに登録されたリソースを監視して、各リソースの状態を判断する。その後、起動処理モジュール５４は、プログラムモジュールの起動処理を実行する（Ｓ１３）。
【００７１】
図１１は、本実施形態の起動処理モジュール５４によるプログラムモジュールの起動手順を示すフローチャートである。
図示のように、まず、起動処理モジュール５４のメイン６３が、ターゲットリスト６１から、優先順位に従って、１つのプログラムモジュール名を取得する（Ｓ２０）。起動スクリプト解析部６４は、プログラムモジュール名に対応するターゲットプログラムモジュールの起動スクリプト６２を取得し、起動スクリプト６２に記述されたターゲットプログラムモジュールの起動条件を取得する。
【００７２】
また、起動スクリプト解析部６４は、ターゲットプログラムモジュールの起動条件に基づいて、ターゲットプログラムモジュールの起動に他のプログラムモジュールの起動が必要か否かを判断する。判断の結果、他のプログラムモジュールの起動が必要なときには、起動スクリプト解析部６４は、ターゲットプログラムモジュールの起動に必要な１以上のプログラムモジュールを特定する。その際、起動スクリプト解析部６４は、各プログラムモジュールの起動スクリプト６２及び起動条件を取得し、起動条件に基づいて、全ての起動対象のプログラムモジュールを特定する。
【００７３】
起動対象のプログラムモジュールが複数あるときには、起動スクリプト解析部６４は、取得された複数のプログラムモジュールの起動条件に基づいて、複数のＣＰＵコアによる複数のプログラムモジュールの起動順序を判断する。続いて、メイン６３は、複数のＣＰＵコアにより、起動順序に従って、起動可能なプログラムモジュールを実行して、複数のプログラムモジュールを順次起動する。その際、まず、メイン６３は、複数の起動対象のプログラムモジュールから、起動順序に基づいて、ＣＰＵコアにより起動するプログラムモジュールを特定する（Ｓ２１）。
【００７４】
次に、特定されたプログラムモジュールの起動を制限する必要があるか否かを判定するため、メイン６３が、上記したシステムコール（リソース条件待ちシステムコール）を発行する（Ｓ２２）。このシステムコールにより、汎用ＯＳ５５の起動調整部７０（図９参照）が呼び出されて、プログラムモジュールの起動を制限するか否かを判定する。画像形成装置１のリソース（ＣＰＵリソース、メモリリソース）が所定のリソース条件を満たすときには、プログラムモジュールの起動を制限する必要はなく、プログラムモジュールの起動を制限しないと判定される。また、リソースがリソース条件を満たさないときには、プログラムモジュールの起動を制限する必要があり、プログラムモジュールの起動を制限すると判定される。起動調整部７０は、リソースがリソース条件を満たして、プログラムモジュールの起動を制限する必要がなくなるまで、新たなプログラムモジュールの起動を停止する。
【００７５】
ここでは、ユーザは、ロードアベレージのチェック処理を行うか否か、及び、メモリのチェック処理を行うか否かを、画像形成装置１に対して予め設定する。ユーザにより一方又は両方のチェック処理を行うと設定されているときに、起動調整部７０は、リソース条件待ち処理を行い、プログラムモジュールの起動を調整する。その際、起動調整部７０の起動制限部７２が、ロードアベレージに基づいて、複数のＣＰＵコアが画像形成装置１のＣＰＵリソースに要求されるリソース条件を満たすか否かを判定する。また、起動調整部７０の使用規制部７４が、メモリの使用率に基づいて、メモリが画像形成装置１のメモリリソースに要求されるリソース条件を満たすか否かを判定する。
【００７６】
図１２は、本実施形態の起動調整部７０の処理手順を示すフローチャートである。
図示のように、まず、起動調整部７０は、ユーザによる設定に基づいて、複数のＣＰＵコアの負荷情報であるロードアベレージのチェック処理を行うか否かを判断する（Ｓ３０）。その結果、ロードアベレージのチェック処理を行わないときには（Ｓ３０、Ｎｏ）、起動調整部７０は、ユーザによる設定に基づいて、メモリのチェック処理を行うか否かを判断する（Ｓ３１）。メモリのチェック処理を行わないときには（Ｓ３１、Ｎｏ）、起動調整部７０による処理が終了する。
【００７７】
ロードアベレージのチェック処理を行うときには（Ｓ３０、Ｙｅｓ）、負荷情報更新部７１が、複数のＣＰＵコアのロードアベレージを取得し、起動制限部７２が、ロードアベレージが規定値よりも小さいか否かを判定する（Ｓ３２）。ロードアベレージが規定値よりも小さいときには（Ｓ３２、Ｙｅｓ）、起動制限部７２は、複数のＣＰＵコアによる新たなプログラムモジュールの起動を制限しないと判定する。なお、ロードアベレージの規定値には、複数のＣＰＵコアにより新たなプログラムモジュールを円滑に起動可能なロードアベレージの上限値が予め設定され、例えば、ＣＰＵコアの数よりも小さい所定値が設定される。
【００７８】
ロードアベレージが規定値以上であるときには（Ｓ３２、Ｎｏ）、起動制限部７２は、複数のＣＰＵコアによる新たなプログラムモジュールの起動を制限すると判定して、起動処理モジュール５４をスリープ状態（プログラムモジュールの実行待ち状態）に移行させる。これにより、起動処理モジュール５４がスリープして、新たなプログラムモジュールの起動が制限される。この起動処理モジュール５４のスリープは、ロードアベレージが規定値よりも小さくなるのを待つスリープ（ロードアベレージ条件待ちスリープ）である（Ｓ３３）。起動制限部７２は、起動処理モジュール５４による新たなプログラムモジュールの起動処理を停止し、ＣＰＵコアによる新たなプログラムモジュールの実行を停止する。
【００７９】
続いて、メモリのチェック処理を行うときには（Ｓ３１、Ｙｅｓ）、使用率更新部７３が、メモリの使用率を取得し、使用規制部７４が、メモリの使用率が規定値よりも小さいか否かを判定する（Ｓ３４）。メモリの使用率が規定値よりも小さいときには（Ｓ３４、Ｙｅｓ）、使用規制部７４は、新たなプログラムモジュールの起動を制限せず、複数のＣＰＵコアによるメモリの使用を規制しないと判定する。なお、メモリの使用率の規定値には、複数のＣＰＵコアにより新たなプログラムモジュールを円滑に起動可能なメモリの使用率の上限値が予め設定される。
【００８０】
メモリの使用率が規定値以上であるときには（Ｓ３４、Ｎｏ）、使用規制部７４は、新たなプログラムモジュールの起動を制限して、複数のＣＰＵコアによるメモリの使用を規制すると判定し、起動処理モジュール５４をスリープ状態に移行させる。これにより、起動処理モジュール５４がスリープして、新たなプログラムモジュールの起動が制限され、メモリの使用が規制される。この起動処理モジュール５４のスリープは、メモリの使用率が規定値よりも小さくなるのを待つスリープ（メモリ使用率条件待ちスリープ）である（Ｓ３５）。使用規制部７４は、起動処理モジュール５４による新たなプログラムモジュールの起動処理を停止し、ＣＰＵコアによる新たなプログラムモジュールの実行を停止する。
【００８１】
起動調整部７０が起動処理モジュール５４をスリープ状態に移行しないときには、起動処理モジュール５４は、プログラムモジュールの起動処理（図１１参照）を再開する。これに対し、起動調整部７０が起動処理モジュール５４をスリープ状態に移行したときには、ロードアベレージとメモリの使用率が各規定値よりも小さくなるまで、起動処理モジュール５４がスリープ状態に維持される。その状態で、起動調整部７０は、所定時間間隔で、ロードアベレージとメモリの使用率を更新して、起動処理モジュール５４のスリープ状態を解除するか否かを判断する。なお、この起動調整部７０による判断は、ハードウエアタイマーにより所定時間間隔で読み出される割り込みハンドラにより、起動調整部７０と同様に行うようにしてもよい。
【００８２】
図１３は、本実施形態の起動処理モジュール５４のスリープ状態を解除する手順を示すフローチャートである。
図示のように、まず、負荷情報更新部７１は、ロードアベレージの算出に用いる情報を更新して、ロードアベレージを新たに算出し、複数のＣＰＵコアのロードアベレージを更新する（Ｓ４０）。続いて、起動制限部７２は、負荷情報更新部７１により更新されたロードアベレージに基づいて、新たなプログラムモジュールの起動を制限するか否かを判定する。
【００８３】
ロードアベレージが規定値以上であるときには（Ｓ４１、Ｎｏ）、起動制限部７２は、新たなプログラムモジュールが実行可能でなく、新たなプログラムモジュールの起動を制限すると判定する。これに伴い、起動処理モジュール５４がロードアベレージ条件待ちスリープであるときには、起動制限部７２は、起動処理モジュール５４のロードアベレージ条件待ちスリープを維持する。ロードアベレージが規定値よりも小さいときには（Ｓ４１、Ｙｅｓ）、起動制限部７２は、新たなプログラムモジュールが実行可能であり、新たなプログラムモジュールの起動を制限しないと判定する。これに伴い、起動処理モジュール５４がロードアベレージ条件待ちスリープであるときには、起動制限部７２は、起動処理モジュール５４のロードアベレージ条件待ちスリープを解除し（Ｓ４２）、新たなプログラムモジュールの実行の停止を解除する。
【００８４】
次に、使用率更新部７３は、メモリの使用率の算出に用いる情報を更新して、メモリの使用率を新たに算出し、複数のＣＰＵコアにより使用されるメモリの使用率を更新する（Ｓ４３）。続いて、使用規制部７４は、使用率更新部７３により更新されたメモリの使用率に基づいて、新たなプログラムモジュールの起動を制限するか否かを判定する。
【００８５】
メモリの使用率が規定値以上であるときには（Ｓ４４、Ｎｏ）、使用規制部７４は、新たなプログラムモジュールの起動を制限すると判定する。これに伴い、起動処理モジュール５４がメモリ使用率条件待ちスリープであるときには、使用規制部７４は、起動処理モジュール５４のメモリ使用率条件待ちスリープを維持する。メモリの使用率が規定値よりも小さいときには（Ｓ４４、Ｙｅｓ）、使用規制部７４は、新たなプログラムモジュールの起動を制限しないと判定する。これに伴い、起動処理モジュール５４がメモリ使用率条件待ちスリープであるときには、使用規制部７４は、起動処理モジュール５４のメモリ使用率条件待ちスリープを解除し（Ｓ４５）、新たなプログラムモジュールの実行の停止を解除する。
【００８６】
起動調整部７０は、起動処理モジュール５４の全てのスリープ状態が解除されるまで、以上の手順を所定時間間隔で繰り返す。これにより、起動調整部７０は、新たなプログラムモジュールの起動を制限して、複数のＣＰＵコアによるプログラムモジュールの起動を調整する。起動処理モジュール５４の全てのスリープ状態が解除されたときに、起動処理モジュール５４は、プログラムモジュールの起動処理を再開する。これに伴い（図１１参照）、起動処理モジュール５４のメイン６３は、ＣＰＵコアにより、起動順序に基づいて特定されたプログラムモジュールを実行して（Ｓ２３）、プログラムモジュールを起動する。
【００８７】
ＣＰＵコアにより実行されるプログラムモジュールは、未実行な、かつ、起動条件を満たす起動可能なプログラムモジュールである。プログラムモジュールの起動条件が満たされていないときには、メイン６３は、プログラムモジュールの起動条件が満たされた後に、ＣＰＵコアによりプログラムモジュールを実行する。また、プログラム状態監視部６５は、ＣＰＵコアにより実行したプログラムモジュールを、ＭＥＭ２５の実行済みリストに登録する。従って、メイン６３がＣＰＵコアにより実行するプログラムモジュールは、ＣＰＵコアにより実行中でなく、かつ、実行済みリストに登録されていないプログラムモジュールである。
【００８８】
次に、メイン６３は、起動対象の全てのプログラムモジュールを実行して、起動対象のプログラムモジュールがなくなったか否かを判断する（Ｓ２４）。起動対象のプログラムモジュールがまだあるときには（Ｓ２４、Ｎｏ）、メイン６３は、起動対象の全てのプログラムモジュールを実行するまで、以上の手順（Ｓ２１〜Ｓ２４）を繰り返す。起動対象の全てのプログラムモジュールを実行したときには（Ｓ２４、Ｙｅｓ）、メイン６３は、ターゲットリスト６１に記述された全てのターゲットプログラムモジュールを実行したか否かを判断する（Ｓ２５）。全てのターゲットプログラムモジュールを実行していないときには（Ｓ２５、Ｎｏ）、メイン６３は、全てのターゲットプログラムモジュールを実行するまで、以上の手順（Ｓ２０〜Ｓ２５）を繰り返す。
【００８９】
複数のプログラムモジュールの起動開始から起動終了までの間には、新たなプログラムモジュールの起動の度に、リソース条件待ちシステムコールが発行される（Ｓ２２）。これに伴い、起動制限部７２は、負荷情報更新部７１により更新された最新のロードアベレージに基づいて、複数のＣＰＵコアによる新たなプログラムモジュールの起動を制限するか否かを判定する。その結果、新たなプログラムモジュールの起動を制限すると判定されたときに、起動制限部７２は、複数のＣＰＵコアによる新たなプログラムモジュールの起動を制限する。また、使用規制部７４は、使用率更新部７３により更新された最新のメモリの使用率に基づいて、複数のＣＰＵコアによる新たなプログラムモジュールの起動を制限するか否かを判定する。その結果、新たなプログラムモジュールの起動を制限すると判定されたときに、使用規制部７４は、複数のＣＰＵコアによる新たなプログラムモジュールの起動を制限し、複数のＣＰＵコアによるメモリの使用を規制する。
【００９０】
これにより、プログラムモジュールの起動が調整されつつ、複数のプログラムモジュールが起動順序に従って起動される。全てのターゲットプログラムモジュールを実行したときに（Ｓ２５、Ｙｅｓ）、起動処理モジュール５４は、複数のプログラムモジュールの起動処理を終了する。また、ターゲットリスト６１に記述された全てのターゲットプログラムモジュールが起動することで、画像形成装置１の起動処理も終了し、画像形成装置１が起動する。
【００９１】
以上説明したように、本実施形態の画像形成装置１、及び、画像形成装置１の起動方法では、画像形成装置１の起動処理中に、リソースの競合を緩和して、マルチコアＣＰＵ２３の複数のＣＰＵコアを有効に利用することができる。また、複数のＣＰＵコアにより起動処理の複数のプログラムモジュールを円滑に実行して、画像形成装置１の起動の遅延を抑制することができる。画像形成装置１の起動時間を短縮して、画像形成装置１を速く起動することもできる。負荷情報更新部７１により更新されたロードアベレージに基づいてプログラムモジュールの起動を制限することで、起動処理中における複数のＣＰＵコアの負荷の変動に的確に対応して、画像形成装置１の起動処理を円滑に行うことができる。
【００９２】
この画像形成装置１では、メモリの使用率に基づいて、プログラムモジュールの起動を制限し、複数のＣＰＵコアによるメモリの使用を規制する。そのため、複数のＣＰＵコアの使用に伴うメモリの競合を緩和して、複数のプログラムモジュールを円滑に実行でき、画像形成装置１の起動の遅延をより確実に抑制することができる。特に、組み込みシステムでは、メモリの容量が切り詰められているため、メモリの使用率に基づいてプログラムモジュールの起動を制限することで、大きな効果が得られる。また、スワップを行うように設定されているときには、スワップによりＨＤＤ２６へのアクセスが発生するため、複数のプログラムモジュールの起動が大幅に遅延することがある。これに対し、メモリの使用率に基づいてプログラムモジュールの起動を制限することで、スワップの発生、及び、複数のプログラムモジュールの起動の遅延を抑制することができる。
【００９３】
なお、プログラムモジュールの起動を制限した際には、所定時間、ロードアベレージ又はメモリの使用率が規定値よりも小さいときに、プログラムモジュールの起動の制限を解除するようにしてもよい。これにより、ロードアベレージ又はメモリの使用率の変動が激しいときでも、複数のＣＰＵコア又はメモリの状態に正確に対応して、複数のプログラムモジュールを円滑に実行することができる。また、複数のプログラムモジュールは、ロードアベレージがＣＰＵコアの数を超えない範囲で実行するようにしてもよい。
【００９４】
画像形成装置１の設定により、所定のプログラムモジュールが所定のＣＰＵコアにより実行するように指定されているときには、ＣＰＵコア毎のロードアベレージに基づいて、プログラムモジュールの起動を制限するようにしてもよい。この場合には、負荷情報更新部７１は、所定のプログラムモジュールを実行するように指定された所定のＣＰＵコアのロードアベレージを取得して更新する。起動制限部７２は、更新された所定のＣＰＵコアのロードアベレージに基づいて、所定のプログラムモジュールの起動を制限するか否かを判定して、所定のＣＰＵコアによる所定のプログラムモジュールの起動を制限する。このようにすることで、所定のプログラムモジュールを所定のＣＰＵコアにより円滑に実行することができる。
【００９５】
ＣＰＵコアは、プログラムモジュールだけでなく、画像形成装置１の起動処理中に生成されるスレッドも実行する。そのため、スレッドの生成によっても、複数のＣＰＵコアのロードアベレージとメモリの使用率が変化するとともに、リソースの競合が生じることがある。従って、リソースの競合をより緩和するためには、スレッドの生成も制限するのが好ましい。これに対し、画像形成装置１は、ユーザの設定により、プログラムモジュールの起動制限と同様に、スレッドの生成を制限するようになっている。
【００９６】
図１４は、本実施形態のスレッドの生成処理の手順を示すフローチャートである。
ここでは、図示のように、起動処理の複数のプログラムモジュールを起動する間に、スレッドの生成を要求するときには、まず、リソース条件待ちシステムコールが発行され（Ｓ５０）、リソース条件待ち処理が開始する。このリソース条件待ち処理は、既に説明した図１２、図１３に示す処理と同様であるため説明は省略する。
【００９７】
ただし、リソース条件待ち処理において、ロードアベレージとメモリの使用率のそれぞれに基づいて、新たなスレッドの生成を制限するか否かが判定される。その結果、新たなスレッドの生成を制限すると判定されたときに、画像形成装置１が有するスレッド生成部（図示せず）がスリープ状態に移行する。これにより、画像形成装置１の起動処理中において、スレッド生成部による新たなスレッドの生成が制限される。また、ロードアベレージとメモリの使用率のそれぞれに基づいて、スレッド生成部のスリープ状態が解除されたときに、スレッド生成部により、スレッド生成処理が実行されて、新たなスレッドが生成される（Ｓ５１）。
【００９８】
画像形成装置１は、スレッドの生成処理に関する上記した各処理を行う手段、例えば、負荷情報更新部７１により更新されたロードアベレージに基づいて、起動処理中におけるスレッドの生成を制限する手段を備えている。また、画像形成装置１は、使用率更新部７３により更新されたメモリの使用率に基づいて、起動処理中におけるスレッドの生成を制限する手段も備えている。これら各スレッド生成制限手段により、複数のＣＰＵコアによるプログラムモジュールの実行に伴うスレッドの生成が制限される。スレッドの生成を制限することで、リソースの競合がより緩和して、複数のプログラムモジュールを円滑に実行することができる。
【００９９】
以上、マルチコアＣＰＵ２３を備えた画像形成装置１について説明したが、画像形成装置１は、マルチコアＣＰＵ２３に替えて、複数のシングルコアＣＰＵを備えていてもよい。シングルコアＣＰＵは、１つのＣＰＵコアを有するＣＰＵであり、複数のシングルコアＣＰＵのＣＰＵコアは、マルチコアＣＰＵ２３の複数のＣＰＵコアと同様に機能する。この場合には、画像形成装置１は、複数のシングルコアＣＰＵのＣＰＵコアにより、情報を処理して、複数のプログラムモジュールを実行する。
【０１００】
本実施形態では、ロードアベレージとメモリの使用率の両方に基づいて、プログラムモジュールの起動を制限するが、ロードアベレージとメモリの使用率のいずれか一方に基づいて、プログラムモジュールの起動を制限するようにしてもよい。即ち、ロードアベレージのみに基づいて、或いは、メモリの使用率のみに基づいて、プログラムモジュールの起動を制限してもよい。
【０１０１】
また、本発明は、情報処理装置である画像形成装置１のコンピュータを、以上説明した画像形成装置１の各手段として機能させるためのプログラムとして実現することもできる。情報処理装置は、情報を処理する各種の装置であり、例えば、パーソナルコンピュータ、サーバ、又は、組み込みシステムであってもよい。組み込みシステムとして、情報処理装置は、各種の機器、例えば、画像処理装置、撮影装置、表示装置、事務機器、通信装置、携帯装置、情報処理端末、通信端末に組み込まれる。
【符号の説明】
【０１０２】
１・・・画像形成装置、１１・・・エンジン、１２・・・拡張スロット用ボード、１３・・・コントローラ、２３・・・マルチコアＣＰＵ、２６・・・ＨＤＤ、５４・・・起動処理モジュール、６１・・・ターゲットリスト、６２・・・起動スクリプト、６３・・・メイン、６４・・・起動スクリプト解析部、６５・・・プログラム状態監視部、６６・・・デバイス監視部、６７・・・リソース監視部、７０・・・起動調整部、７１・・・負荷情報更新部、７２・・・起動制限部、７３・・・使用率更新部、７４・・・使用規制部。
【先行技術文献】
【特許文献】
【０１０３】
【特許文献１】特開２００９−１０４４４３号公報
【図１】
2015099554.tif 000003
【図２】
2015099554.tif 000004
【図３】
2015099554.tif 000005
【図４】
2015099554.tif 000006
【図５】
2015099554.tif 000007
【図６】
2015099554.tif 000008
【図７】
2015099554.tif 000009
【図８】
2015099554.tif 000010
【図９】
2015099554.tif 000011
【図１０】
2015099554.tif 000012
【図１１】
2015099554.tif 000013
【図１２】
2015099554.tif 000014
【図１３】
2015099554.tif 000015
【図１４】
2015099554.tif 000016
【図１５】
2015099554.tif 000017