IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ キヤノン株式会社の特許一覧

特許7549460画像形成装置、その制御方法、及びプログラム
<>
  • 特許-画像形成装置、その制御方法、及びプログラム 図1
  • 特許-画像形成装置、その制御方法、及びプログラム 図2
  • 特許-画像形成装置、その制御方法、及びプログラム 図3
  • 特許-画像形成装置、その制御方法、及びプログラム 図4
  • 特許-画像形成装置、その制御方法、及びプログラム 図5
  • 特許-画像形成装置、その制御方法、及びプログラム 図6
  • 特許-画像形成装置、その制御方法、及びプログラム 図7
  • 特許-画像形成装置、その制御方法、及びプログラム 図8
  • 特許-画像形成装置、その制御方法、及びプログラム 図9
  • 特許-画像形成装置、その制御方法、及びプログラム 図10
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-09-03
(45)【発行日】2024-09-11
(54)【発明の名称】画像形成装置、その制御方法、及びプログラム
(51)【国際特許分類】
   G06F 9/451 20180101AFI20240904BHJP
   G06F 9/445 20180101ALI20240904BHJP
   G06F 9/455 20180101ALI20240904BHJP
   G06F 3/12 20060101ALI20240904BHJP
【FI】
G06F9/451
G06F9/445
G06F9/455 150
G06F3/12 311
G06F3/12 329
【請求項の数】 16
(21)【出願番号】P 2020072372
(22)【出願日】2020-04-14
(65)【公開番号】P2021170173
(43)【公開日】2021-10-28
【審査請求日】2023-03-17
(73)【特許権者】
【識別番号】000001007
【氏名又は名称】キヤノン株式会社
(74)【代理人】
【識別番号】110003281
【氏名又は名称】弁理士法人大塚国際特許事務所
(72)【発明者】
【氏名】佐々木 英史
【審査官】北川 純次
(56)【参考文献】
【文献】特開2019-175399(JP,A)
【文献】特開2018-129003(JP,A)
【文献】特開2019-153079(JP,A)
【文献】特開2019-101866(JP,A)
【文献】特開2019-219866(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/44-9/455
G06F 3/12
(57)【特許請求の範囲】
【請求項1】
1以上の機能を提供する画像形成装置であって、
ユーザインタフェースを介して、それぞれが対応する機能の要求を受け付ける1以上の第1モジュールと、
前記1以上の第1モジュールのそれぞれに対応する機能を実行する1以上の第2モジュールと、
前記1以上の第1モジュールが受け付けた要求を、対応する前記第2モジュールへ通知する第1制御部と、
前記第1制御部からの通知に従って、対応する前記第2モジュールを制御する第2制御部と
を備え、
前記1以上の第1モジュールは、前記画像形成装置の起動時から起動され、
前記1以上の第2モジュールは、オペレーティングシステムからは独立した実行環境のコンテナとして生成され、前記第2制御部からの指示により起動状態が制御されることを特徴とする画像形成装置。
【請求項2】
前記第2制御部は、対応する機能のコンテナ管理情報に従って、前記1以上の第2モジュールの起動状態を制御することを特徴と請求項1に記載の画像形成装置。
【請求項3】
前記コンテナ管理情報には、さらに、コンテナごとに、ハードウェア資源の割り当てに関する情報が含まれることを特徴とする請求項2に記載の画像形成装置。
【請求項4】
前記第2制御部は、
対応する機能の前記コンテナ管理情報が本体連動起動と設定されていることを示す場合には、前記第1モジュールを起動する際に対応する前記第2モジュールを生成して起動し、
対応する機能の前記コンテナ管理情報が本体連動起動と設定されていることを示さない場合には、対応する前記第2モジュールを、前記第1モジュールが対応する機能の要求を受け付けた際に起動することを特徴とする請求項2又は3に記載の画像形成装置。
【請求項5】
前記第2制御部は、
前記ユーザインタフェースを介して対応する機能の設定が開始されると、対応する前記第2モジュールを生成して起動することをと特徴とする請求項4に記載の画像形成装置。
【請求項6】
前記第2制御部は、
前記画像形成装置のトレイにシートが載置されたことを検知すると、実行が予測される1以上の機能に対応する前記第2モジュールを生成して起動することを特徴とする請求項4又は5に記載の画像形成装置。
【請求項7】
人を検知する人感センサをさらに備え、
前記第2制御部は、
前記画像形成装置から所定の範囲において前記人感センサによって人が検知されると、実行が予測される1以上の機能に対応する前記第2モジュールを生成して起動することを特徴とする請求項4乃至6の何れか1項に記載の画像形成装置。
【請求項8】
前記第1モジュールは、
対応する機能の要求として該機能に対する制御コマンドを受信した際に、前記第2制御部から、対応するコンテナの状態を取得し、取得した前記コンテナの状態に従って前記第2制御部へ指示を行うことを特徴とする請求項1乃至7の何れか1項に記載の画像形成装置。
【請求項9】
前記コンテナの状態には、コンテナが生成されていない未存在状態、コンテナが起動さていない未起動状態、コンテナが起動している起動状態、及びコンテナが停止されている停止状態が少なくとも含まれることを特徴とする請求項8に記載の画像形成装置。
【請求項10】
前記第2制御部は、前記第1制御部からの通知に従って、現在ログインしているユーザがログアウトした場合、対応する機能のジョブ終了後に該機能のジョブが投入されずに一定時間が経過した場合、他のコンテナを起動する際にハードウェア資源が所定値未満となり、かつ、使用頻度が低いコンテナである場合、又は、致命的なエラーが発生した場合に、対応するコンテナを前記起動状態から前記停止状態へ一時停止させることを特徴とする請求項9に記載の画像形成装置。
【請求項11】
前記第1モジュールは、前記ユーザインタフェースとして、対応する機能の設定画面を制御することを特徴とする請求項1乃至10の何れか1項に記載の画像形成装置。
【請求項12】
前記第1モジュールは、対応する前記第2モジュールの少なくとも一部の機能を有することを特徴とする請求項1乃至11の何れか1項に記載の画像形成装置。
【請求項13】
前記第2モジュールは、
前記画像形成装置への前記要求を一時的にスプールする機能、及び、前記画像形成装置への前記要求が実行可能であるか否かを判断する機能の少なくとも1つを含むことを特徴とする請求項1乃至12の何れか1項に記載の画像形成装置。
【請求項14】
前記要求が実行可能であるか否かを判別する機能は、
前記画像形成装置が備えるハードウェアを利用する他の機能の稼働状態に基づいて、実行可能か否かを判断することを特徴とする請求項13に記載の画像形成装置。
【請求項15】
ユーザインタフェースを介して、それぞれが対応する機能の要求を受け付ける1以上の第1モジュールと、前記1以上の第1モジュールのそれぞれに対応する機能を実行する1以上の第2モジュールと、を有する画像形成装置の制御方法であって、
第1制御部が、前記1以上の第1モジュールが受け付けた要求を、対応する前記第2モジュールへ通知する第1制御工程と、
第2制御部が、前記第1制御部からの通知に従って、対応する前記第2モジュールを制御する第2制御工程と
を含み、
前記1以上の第1モジュールは、前記画像形成装置の起動時から起動され、
前記1以上の第2モジュールは、オペレーティングシステムからは独立した実行環境のコンテナとして生成され、前記第2制御部からの指示により起動状態が制御されることを特徴とする画像形成装置の制御方法。
【請求項16】
ユーザインタフェースを介して、それぞれが対応する機能の要求を受け付ける1以上の第1モジュールと、前記1以上の第1モジュールのそれぞれに対応する機能を実行する1以上の第2モジュールと、を有する画像形成装置の制御方法における各工程をコンピュータに実行させるためのプログラムであって、前記制御方法は、
第1制御部が、前記1以上の第1モジュールが受け付けた要求を、対応する前記第2モジュールへ通知する第1制御工程と、
第2制御部が、前記第1制御部からの通知に従って、対応する前記第2モジュールを制御する第2制御工程と
を含み、
前記1以上の第1モジュールは、前記画像形成装置の起動時から起動され、
前記1以上の第2モジュールは、オペレーティングシステムからは独立した実行環境のコンテナとして生成され、前記第2制御部からの指示により起動状態が制御されることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、機内アプリケーションが利用するリソースをコンテナ技術を用いて管理する画像形成装置、その制御方法、及びプログラムに関する。
【背景技術】
【0002】
画像形成装置に対するニーズが多様化する中で、必要となる機内アプリケーションが増加している。機内アプリケーションが増加すると、必要となるCPU資源、メモリ資源、ストレージ資源などのハードウェア資源も増加し、結果的には、ハードウェアコストも増加する。こうした中で、画像形成装置に搭載されたハードウェア資源を、多様化するニーズに対して有効活用できる手法が必要となっている。近年、サーバ分野では仮想化技術やコンテナ技術によるハードウェア資源を有効活用する技術が普及してきている。仮想化技術は、物理デバイス上で動作するホストOS上に論理デバイスを構築し、論理デバイス上でサービスやアプリケーションを動かすためのゲストOSを動作させる技術である。一方、コンテナ技術は、物理デバイス上で動作するホストOSの資源の一部を、独立した実行環境(コンテナ)に割り当ててサービスやアプリケーションを動かす技術である。いずれも、ハードウェア資源をそれぞれのサービスやアプリケーションの稼働時に動的に割り当てることで、限られたハードウェア資源を有効活用しようとしている。
【0003】
例えば、特許文献1には、仮想化技術を用いた組み込み機器の、ハードウェア資源を有効活用する技術が提案されている。詳細には、ユーザ(端末装置)からの要求に対して、ユーザ振り分け部が、当該要求に対する処理を1つ以上の仮想マシンVM(Virtual Machine)に振り分ける技術が提案されている。仮想マシンVMは起動後に事前に待機状態に移行し、要求を受け付けたタイミングで稼働状態にすることで、要求を受け付けてから処理を開始するまでの時間を短縮している。
【先行技術文献】
【特許文献】
【0004】
【文献】特開2018-129003号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、上記従来技術には以下に記載する課題がある。ニーズの多様化に対抗してリソースを有効活用すべく、組み込み機器にコンテナ技術を搭載することが考えられる。しかし、ユーザインタフェースを伴う画像形成装置ではリアルタイムの応答を確保する必要がある。例えば、上記従来技術では、仮想マシンVM上で動作するアプリケーションは、ユーザインタフェースを提供する機能も包含している。即ち、設定画面や確認画面などをユーザに表示するだけでも、仮想マシンVMを稼働状態へ移行させ、そのうえで、画面提供をするアプリケーションを動かさなければならない。そのため、リソースがごく限られている組み込み機器に適用した場合、画面表示を要求してから、実際に表示されるまでの間に、少なからず待ち時間が生じる。人間工学では、1秒以上かかるような場合には、ユーザに応答性が低下していると認識させると言われており、待ち時間をいかに少なくするのかが重要となる。
【0006】
特に、画像形成装置の中には、ホーム画面(又は、ポータル画面)と呼ばれるアプリケーション選択画面を備えているものがある。ユーザは、ホーム画面から1つの機能を表現したアイコンを選択することで、当該アイコンと関連付けられたアプリケーションの設定画面や実行画面を表示する機能を有している。なお、上記従来技術では、アプリケーション選択画面からアプリケーションを選択した後にアプリケーションを含む仮想マシンを停止状態から稼働状態へ移行させることとなる。停止状態から稼働状態へ移行させる処理は、アプリケーションが要するメモリ量やストレージ性能によっても異なるが、数秒程度を要する虞がある。
【0007】
代替手法として、ユーザがログインをしたタイミングで、仮想マシンVMを稼働状態にしておくことも考えられる。これにより、アプリケーションを選択した際のアプリケーションの応答性を改善することができる。しかし、この場合には、ユーザがログイン要求をしてからログインが完了するまでに、数十秒程度の時間が必要となってしまう。さらに、多くのアプリケーションを稼働状態にすることで、本来のハードウェア資源の有効活用も実現困難となる。
【0008】
本発明は、上述の課題の少なくとも一つに鑑みて成されたものであり、組み込みデバイスにコンテナ技術を好適に適用して、ハードウェア資源を有効に活用するとともに、ユーザの操作に対する応答性を担保する仕組みを提供する。
【課題を解決するための手段】
【0009】
本発明は、例えば、1以上の機能を提供する画像形成装置であって、ユーザインタフェースを介して、それぞれが対応する機能の要求を受け付ける1以上の第1モジュールと、前記1以上の第1モジュールのそれぞれに対応する機能を実行する1以上の第2モジュールと、前記1以上の第1モジュールが受け付けた要求を、対応する前記第2モジュールへ通知する第1制御部と、前記第1制御部からの通知に従って、対応する前記第2モジュールを制御する第2制御部とを備え、前記1以上の第1モジュールは、前記画像形成装置の起動時から起動され、前記1以上の第2モジュールは、オペレーティングシステムからは独立した実行環境のコンテナとして生成され、前記第2制御部からの指示により起動状態が制御されることを特徴とする。
【発明の効果】
【0010】
本発明によれば、組み込みデバイスにコンテナ技術を好適に適用して、ハードウェア資源を有効に活用するとともに、ユーザの操作に対する応答性を担保することができる。
【図面の簡単な説明】
【0011】
図1】一実施形態に係る画像形成装置100のハードウェア構成を示す図。
図2】一実施形態に係る画像形成装置100のソフトウェア構成を示す図。
図3】一実施形態に係る制御コマンド/制御レスポンスのフォーマットの一例を示す図。
図4】一実施形態に係る制御コマンドと制御レスポンス識別子の定義の一例を示す図。
図5】一実施形態に係るデバイス・ジョブ制御部211によるコンテナ制御の流れを示す図。
図6】一実施形態に係るコンテナ制御に際して参照されるDockerfile512、及びコンテナ管理情報DB501の一例を示す図。
図7】一実施形態に係るデバイス・ジョブ制御部211によるアプリ制御の流れを示す図。
図8】一実施形態に係るデバイス・ジョブ制御部211のフローチャート。
図9】一実施形態に係る仮受信部212~215のフローチャート。
図10】一実施形態に係るコンテナ制御部221のフローチャート。
【発明を実施するための形態】
【0012】
以下、添付図面を参照して実施形態を詳しく説明する。なお、以下の実施形態は特許請求の範囲に係る発明を限定するものでない。実施形態には複数の特徴が記載されているが、これらの複数の特徴の全てが発明に必須のものとは限らず、また、複数の特徴は任意に組み合わせられてもよい。さらに、添付図面においては、同一若しくは同様の構成に同一の参照番号を付し、重複した説明は省略する。
【0013】
<画像形成装置のハードウェア構成>
以下では、本発明の一実施形態について説明する。まず、図1を参照して、本実施形態に係る画像形成装置100のハードウェア構成について説明する。
【0014】
画像形成装置100は、PC151と接続される。画像形成装置100は、PC151を介してユーザからの操作指示を受け付けることができる。また、画像形成装置100は、USBメディア152を始めとするUSBデバイスを接続することができ、接続されたUSBデバイスと通信できる。画像形成装置100は、NW HUB153を始めとするネットワークデバイスと接続される。例えば、画像形成装置100は、PC151と直接ネットワーク接続をしてもよい。或いは、画像形成装置100は、ルータやスイッチなどを始めとする種々のネットワークデバイスを介して間接的にネットワーク接続する構成を適用することができる。
【0015】
画像形成装置100は、コントローラ基板110、電源スイッチ130、操作部ユニット131、プリンタユニット132、スキャナユニット133、及びFAXユニット134を備える。画像形成装置100は、PC151やUSBメディア152、NW HUB153、FAX回線154などを介して、本体外に存在するデバイスと通信を行う機能を有する。コントローラ基板110は、画像形成装置100を制御するためのコントローラボードである。コントローラ基板110は、CPU111、ROM112、RAM113、及び内蔵ストレージ114を備える。また、コントローラ基板110は、画像形成装置100内のユニット等と通信するために、操作部ユニットI/F121、プリンタユニットI/F122、スキャナユニットI/F123、及びFAXユニットI/F124を備える。さらに、コントローラ基板110は、画像形成装置100外と通信するために、USB-DI/F141、USB-H I/F142、及びLAN I/F 143を備える。
【0016】
CPU111は、画像形成装置100の種々の機能を提供するための中央演算プロセッサである。CPU111は、ROM112や内蔵ストレージ114に格納されたプログラムやプログラムに関連したデータをRAM113上に展開し、当該プログラムを実行することによって、画像形成装置100の種々の機能をユーザに対して提供する。ROM112は、電源スイッチ130が押下され、コントローラ基板110に電源投入されたタイミングで、CPU111が実行する初期プログラムが格納される記憶領域である。初期プログラムは、後述するRAM113や内蔵ストレージ114を始めとするコントローラ基板110上の各種デバイスを利用可能にするための一連の処理を含む。
【0017】
RAM113は、CPU111が実行するプログラムや、プログラムが利用するデータを一時的に格納したりするための、記憶領域である。RAM113は、後述する内蔵ストレージ114に比べると、速度は高速にアクセス可能である反面、容量は数分の一程度と小さい。そのため、RAM113は、内蔵ストレージ114に対するアクセスを一時的にため込むディスクキャッシュに用いられることもある。内蔵ストレージ114は、画像形成装置100が機能提供するためのプログラムや、プログラムが利用するデータを保存するための、記憶領域である。内蔵ストレージ114は、RAM113に比べると、容量は非常に大きい分、アクセス速度は数分の一程度と遅い。そのため、内蔵ストレージ114は、プログラムが利用するメモリが不足した場合に、一時的にメモリの代替領域(スワップ領域)に用いられることもある。
【0018】
操作部ユニットI/F121は、電源スイッチ130や操作部ユニット131と通信を行うためのインタフェースである。プリンタユニットI/F122は、プリンタユニット132と通信を行うためのインタフェースである。スキャナユニットI/F123は、スキャナユニット133と通信を行うためのインタフェースである。FAXユニットI/F124は、FAXユニット134と通信を行うためのインタフェースである。USB-D I/F141は、PC151と通信を行うためのインタフェースである。USB-H I/F142は、各種USBデバイスと通信を行うためのインタフェースである。図1では、USBメディア152と接続する例を示している。LAN I/F 143は、有線ネットワークを用いて外部デバイスと通信を行うためのインタフェースである。図1では、NW HUB153に接続し、その先に接続されている不図示の外部デバイスと間接的に接続されている例を示している。
【0019】
電源スイッチ130は、画像形成装置100に対する電源投入や、電源切断などを指示するためのユニットである。電源スイッチ130は、例えばシーソースイッチを適用することができる。或いは、タクトスイッチを適用することができる。また、電源スイッチ130を、後述する高速復帰の電源切断モードへ突入したり、高速復帰の電源切断モードから復帰したりするためのイベントトリガーとして用いてもよい。
【0020】
操作部ユニット131は、画像形成装置100に対するユーザからの指示を受け付けたり、ユーザに対して情報や警告を報知するためのユニットである。例えば、操作部ユニット131は画像によって情報を報知するためにLCDパネルを備えてもよい。操作部ユニット131は音によって情報を報知するためにブザーを備えてもよい。操作部ユニット131は光によって情報を報知するためにLEDを備えてもよい。また、操作部ユニット131はユーザの指示を受け付けるための物理キーやタッチパネルを備えてもよい。その他、操作部ユニット131はジェスチャー入力を受け付けるためのカメラなどを備えてもよい。
【0021】
プリンタユニット132は、ユーザの指示に基づいて、画像形成装置100が物理用紙に情報を印字するためのユニットである。本発明を実施する上で、プリンタユニット132には、様々な印字機能を有するユニットを適用できる。様々な印字機能としては、例えば、カラー/モノクロ印刷、片面/両面印刷、ステイプル/針なしステイプルなどが含まれる。プリンタユニット132において、印字対象となる出力媒体は一般的な用紙にとどまらず、フィルムなどの媒体を対象にすることもできる。プリンタユニット132において、印字時に用いる色材はトナーのみならず、インクなどを用いることもできる。或いは、立体物を出力するプリンタユニットを備えた画像形成装置に対しても、本発明を適用することができる。
【0022】
スキャナユニット133は、ユーザの指示に基づいて、画像形成装置100が物理用紙に印字された情報を読み取るためのユニットである。本発明を実施する上で、スキャナユニット133には、様々な読み取り機能を有するユニットを適用できる。例:自動両面読み取り/1パス両面読み取り/カラー読み取り。
【0023】
FAXユニット134は、ユーザの指示に基づいて、画像形成装置100が機内に格納した画像データを、FAX回線154を介して外部のデバイスへ送信するためのユニットである。また、画像形成装置100が外部のデバイスから送信された画像データをFAX回線154を介して受信するためのユニットでもある。
【0024】
<ソフトウェア構成>
次に、図2を参照して、本実施形態に係る画像形成装置100のソフトウェア構成について説明する。コントローラ基板110上のCPU111は、内蔵ストレージ114に格納された本体ファーム200をRAM113上に展開し、当該本体ファーム200の内容に従って機能を実行する。
【0025】
本体ファーム200は、操作部制御部201、デバイス・ジョブ制御部211、及びコンテナ制御部221を備える。また、本体ファーム200は、USB-D制御部207、USB-H制御部208、及びLAN制御部209を備える。操作部制御部201は、UIアプリ部202~205の制御を行う制御モジュール(第1モジュール)である。UIアプリ部には、例えばコピー機能を提供するためのコピーUIアプリ部202が含まれる。さらに、UIアプリ部には、SendUIアプリ部203、FAXUIアプリ部204、WebブラウザUIアプリ部205、及びUSBDIRECT UIアプリ部206が含まれる。
【0026】
コピーUIアプリ部202は、操作部制御部201を介して、ユーザからの指示に基づき、スキャナユニット133で読み取った画像データを、プリンタユニット132で複写するためのコピー機能に関するアプリケーション操作部である。コピーUIアプリ部202は、部数の指定や両面指定、ステイプルの有無などを選択する機能を有し、これらの設定を行う設定画面を表示制御する。SendUIアプリ部203は、ユーザからの指示に基づき、スキャナユニット133で読み取った画像データを、LAN制御部209を介して、外部デバイスへ送信するためのスキャン機能に関するアプリケーション操作部である。SendUIアプリ部203は、送信する宛先などを指定する機能を有する。FAXUIアプリ部204は、ユーザからの指示に基づき、スキャナユニット133で読み取った画像データを、FAXユニット制御部282を介して、外部デバイスへ送信するためのFAX機能に関するアプリケーション操作部である。また、FAXUIアプリ部204は、外部デバイスからFAXユニット制御部282に対して画像データが送信された場合に、その内容を表示したり、プリンタユニット132で印字したりする機能を有する。WebブラウザUIアプリ部205は、LAN制御部209を介して外部デバイスから取得したWebページをユーザへ表示したり、当該Webページ上のコンテンツへの操作を受け付けたりする機能に関するアプリケーション操作部である。USB Direct UIアプリ部206は、ユーザからの指示に従い、USB-D制御部207を介して外部USBデバイスに記録されている印刷データを読み出し、プリンタユニット132で印字するための機能に関するアプリケーション操作部である。本発明では、202~205のアプリケーション操作部が、それぞれのアプリケーションの実行部241~255とは独立して起動や動作が可能な構成をとる。つまり、本実施形態では、画像形成装置100が提供する各機能を実現する各アプリケーションについて、そのUIを制御するアプリケーション操作部と、各機能を実行するための実行部とが独立して設けられる構成となる。
【0027】
デバイス・ジョブ制御部211は、画像形成装置100全体を制御するための制御モジュール(第1制御部)である。本実施形態においては、各UIアプリ部202~206からの指示に基づき、各ジョブ仮受信部212~215や、FAXジョブ受信部216に当該指示を伝達する役割などを担う。また、本実施形態においては、USB-D制御部207とUSB-D I/F141を介してPC151から指示を受け付けることもできる。さらに、本実施形態においては、LAN制御部209とLAN I/F143を介して、NW HUB153を始めとする、不図示の外部デバイスから指示を受け付けることもできる。なお、デバイス・ジョブ制御部211は、コンテナ化していないアプリケーションに対しての指示をジョブ受信部へ伝達することもある。例えば、FAXに関する処理に関しては、FAXジョブ受信部216へ伝達する。FAXジョブ受信部216は、FAXジョブ実行部281に指示を伝達して実行する。これは、FAXの送受信に関する処理に関しては、画像形成装置100が動作中には常時動かすことが求められるため、コンテナの上ではなく直接動作する形態をとる。このように、本実施形態によれば、全ての機能アプリケーションに対して一律でコンテナ技術を適用するのではなく、画像形成装置100が提供する機能の特性に合わせて適用を行う。
【0028】
コンテナ制御部221は、コンテナ222~225(第2モジュール)の制御を行う制御モジュール(第2制御部)である。例えば、本体ファームウェア200はコピー機能を実行するためのコピーコンテナ222を備える。コピーコンテナ222は、画像形成装置100のオペレーティングシステムからは独立した実行環境のコンテナ(第2モジュール)として生成され、コピージョブ仮受信部212からの指示を受け付けるためのコピージョブ本受信部231と、受け付けた指示を実行するためのコピージョブ実行部241とを備える。コピージョブ実行部241は、プリンタユニット制御部271とプリンタユニットI/F122を介して、プリンタユニット132に印字指示を行う。同様に、コピージョブ実行部241は、スキャナユニット制御部272とスキャナユニットI/F123を介して、スキャナユニット133に画像読み取り指示を行う。
【0029】
また、本体ファームウェア200はSend機能を実行するためのSendコンテナ223、PDL機能を実行するためのPDLコンテナ224、及びWebブラウザ機能を実行するためのWebブラウザコンテナ225を備える。Sendコンテナ223は、Sendジョブ仮受信部213からの指示を受け付けるためのSendジョブ本受信部232と、受け付けた指示を実行するためのSendジョブ実行部242を備える。PDLコンテナ224は、PDLジョブ仮受信部214からの指示を受け付けるためのPDLジョブ本受信部233と、受け付けた指示を実行するためのPDLジョブ実行部243を備える。Webブラウザコンテナ225は、Webブラウザジョブ仮受信部215からの指示を受け付けるためのWebブラウザジョブ本受信部234と、受け付けた指示を実行するためのWebブラウザジョブ実行部244を備える。
【0030】
また、本体ファーム200は、プリンタユニット制御部271、スキャナユニット制御部272、及びFAXユニット制御部282を備える。これらは、それぞれのユニットを制御するためのモジュールである。
【0031】
<制御コマンド/制御レスポンス>
次に、図3を参照して、本実施形態に係る制御コマンド/制御レスポンスのフォーマットの一例について説明する。本実施形態では、説明を簡略化するために、本体内外で流通する、制御を実行する要求を意味する制御コマンドと、制御を実行した結果を意味する制御レスポンスを同一フォーマットで表現している。しかし本発明を限定する意図はなく、当該制御コマンド/制御レスポンスの形式や内容に関しては種々の内容を適用することができる。なお、本実施形態においては、制御コマンド/制御レスポンスは、ネットワークバイトオーダーの順番に従ってデータが配置されているものとする。
【0032】
先頭+0hに位置する、制御コマンドバージョンは、当該データの制御コマンド及び制御レスポンスのバージョンを意味する。ここでは、0xC0CaFF01としている。これは画像形成装置100が受信した制御コマンドが、サポートしているバージョンであるかを判別することに利用できる。
【0033】
先頭+4hに位置する、制御コマンド/制御レスポンス識別子は、本制御コマンド/制御レスポンスの内容を意味する識別子である。制御コマンド識別子/制御レスポンス識別子はともに最大32bitデータで表現する。なお、本実施形態では将来の拡張性を考慮して、上位16bit/2バイトは予約とし、下位16bit/2バイトで表現されるデータを用いる。制御コマンド識別子/制御レスポンス識別子については、図4を用いて詳細を説明する。
【0034】
先頭+8hに位置する、ユーザ識別子は当該制御コマンドを送信した結果である制御レスポンスを受け取ろうとする送受信先を意味する識別子である。例えば、機器内外のどのアプリケーションやモジュールであるかを特定することのできる識別子となる。
【0035】
先頭+10hに位置する、制御コマンド/制御レスポンスの固有データ長と、先頭+18hに位置する、制御コマンド/制御レスポンスの固有データボディ部は、制御コマンド/制御レスポンス識別子で表現しきれない情報を表現するための情報である。制御コマンドは様々な目的や用途で使われるため、全ての制御コマンド/制御レスポンスで共通的に利用可能なフォーマットを定義することは難しい。そこで、本実施形態においては、制御コマンド識別子に基づいて当該制御コマンド/制御レスポンスの固有データを伝達することのできる、データ長及びボディ部(中身)を伝達する形態をとる。
【0036】
<制御コマンド>
以下では、図4乃至図7を参照してデバイス・ジョブ制御部211が扱う各種の制御コマンドについて説明する。まず、図4を参照して、本実施形態に係る制御コマンド/制御レスポンス識別子の定義の一例を説明する。制御コマンド識別子は、対象となるモジュールを特定するためのターゲットオプションを表現する下位バイトと、当該対象モジュールに対してどのような指示をするのかを特定するための制御コマンド種別を表現する上位バイトとを含む。
【0037】
(ターゲットオプション)
ターゲットオプションは、指示対象となっている各アプリケーションを表現する情報である。例えばコピーアプリケーションに対する指示にはCC_TARGET_COPY(0x10)を割り当てる。Sendアプリケーションに対する指示にはCC_TARGET_SEND(0x20)を割り当てる。PDLアプリケーションに対する指示にはCC_TARGET_PDL(0x30)を割り当てる。ウェブブラウザアプリケーションには、CC_TARGET_WEBBROW(0x40)を割り当てる。FAXアプリにはCC_TARGET_FAX(0x50)を割り当てる。本実施形態においては、画像形成装置100にこれらの予め組み込まれたアプリケーションに加えて、ユーザが任意でインストールしたアプリケーションを対象にすることもできる。例えば、本実施形態では0x80から0xFEまでの範囲内をユーザアプリケーション用に割り当てており、インストールしたタイミングで任意の数値を割り当てることもできる。さらに、デバイス本体への指示に対して、CC_TARGET_DEVICE(0xFF)を割り当てる。これ以外にも、デバイスに備えられたフィーダーなどを始めとする外付けオプションに指示するべく、ターゲットオプションを拡張できる。
【0038】
制御コマンド種別には、受信部に対する制御コマンド識別子、コンテナに対する制御コマンド識別子、アプリケーションに対する制御コマンド識別子、及び、デバイスに対する制御コマンド識別子が含まれる。また、制御レスポンス識別子は、汎用制御レスポンス識別子と、コンテナ状態制御レスポンス識別子とに分けられる。
【0039】
(受信部制御コマンド)
受信部に対する制御コマンド識別子は、0xF0~0xFFから始まる。本実施形態では、受信部起動指示(CC_RECEPTOR_CMD_START、0xF000)は受信部に対する起動指示を意味する。例えば、0xF010のコマンド識別子は、CC_TARGET_COPYと、CC_RECEPTOR_CMD_STARTのORであることから、コピーアプリケーションの受信部起動を意味する制御コマンド識別子となる。
【0040】
(コンテナ制御コマンド)
コンテナに対する制御コマンド識別子は、0xC0~0xCFから始まる。図5及び図6を用いてその詳細を説明する。ここで、図5を参照して、デバイス・ジョブ制御部211によるコンテナ制御の流れを説明する。本実施形態では、docker(登録商標)ライブラリを、コンテナ制御ライブラリとして適用した例を説明する。なお、図5に示す構成は、本実施形態に係る画像形成装置100に含まれるソフトウェア構成(図2)の一部を示すものであり、以下の説明に関連しない構成については省略している。
【0041】
機器内外からデバイス・ジョブ制御部211に対して、制御コマンド識別子が0xC010である制御コマンドが送信された場合について説明する。デバイス・ジョブ制御部211は、当該制御コマンド識別子のターゲットオプションを表現する下位バイトが0x10であることから、コピーアプリケーションに対する制御コマンドを受信したと判別する。そして、デバイス・ジョブ制御部211はコピージョブ仮受信部212に対して、当該制御コマンドを通知する。コピージョブ仮受信部212は、当該制御コマンド識別子が0xC0から始まるため、コンテナ生成指示を行う制御コマンドと判断し、コンテナ制御部221へ対して、当該制御コマンドを通知する。
【0042】
コンテナ制御部221は、当該制御コマンド識別子からコピーアプリケーションに対するコンテナ生成指示であると判断する。コンテナ制御部221は、当該コンテナ管理情報DB501を参照してDockerfile512の中から該当するDockerfileを選択して、Docker engine511に対しコンテナ生成指示を行う。その結果、Docker engine511は、コピーコンテナ222を生成する。
【0043】
ここで、図6を参照して、本実施形態で利用している、Dockerfile512、及びコンテナ管理情報DB501について補足説明を行う。図6は、コンテナ制御に際して参照されるDockerfile512、及び、コンテナ管理情報DB501に格納されるコンテナ管理情報600の例である。図6に示すDockerfile512は、コピーアプリケーションのためのコンテナを定義するDockerfileである。「#」から始まる行は説明を容易にするためのコメント行である。
【0044】
4行目のFROMは、コンテナ生成をする際のDockerイメージが、プライベートレジストリ513上のappimage:1.0(504)であることを意味する。本実施形態においては、各コンテナのベースとなるDockerイメージを画像形成装置100内に保持している前提で説明を行っている。なお、本発明の実施においてはこの制約はなく、例えば、他の画像形成装置のレジストリを参照してもよいし、公開されているパブリックなレジストリを参照してもよい。
【0045】
6行目のRUNは、コンテナ生成時に実行するコマンドとして、ワークディレクトリ/var/copyを生成することを意味する。また、8行目のWORKDIRは、コンテナ生成時に実行するコマンドとして、/var/copyに作業ディレクトリを移動することを意味する。10行目のRUNは、コンテナ生成時に実行するコマンドとして、pkg-managerコマンドを、引数”install”と、”copyserver”とを伴って実行することを意味する。これにより、コピーコンテナ222上でpkg-managerコマンドが実行されたことで、パッケージマネージャー551経由でパッケージレポジトリ552上から、copyserverアプリケーションがインストールされる。なお、それぞれのコンテナは独立したストレージとして実装する以外に、例えばベースとなるイメージから更新差分のみを記録し、それらを透過的に表現するファイルシステムを用いて表現することもできる。
【0046】
12行目のEXPOSEは、コンテナ上で制御コマンドを受け取るために開放されるポート番号が20001であることを示す。15行目のCMDは、コンテナを動作させたときに、”/apps/copyserver”を実行することを意味する。18行目のSTOPSIGNALは、コンテナ終了時にCMDで起動しているプログラムへシグナルSIGTERMを通知することを意味する。これによって、プログラムはコンテナ終了を検知することができる。
【0047】
ここでは、コピーアプリケーションのためのコピーコンテナ222を例としてDockerfileの説明を行ったが、その他のアプリケーションとコンテナについても同様である。ここでは説明を簡略化するために、その他のアプリケーションについては説明を省略する。
【0048】
600は、コンテナ管理情報DB501で管理されているコンテナ管理情報である。ここでは説明上、DB、即ちデータベースという名称を用いている。当該コンテナに関する情報を管理することができればリレーショナルデーターベース以外のものを用いて当該情報を管理してもよい。例えば、単純なテキストファイルを管理書式として用いることもできる。601は各コンテナ管理情報の管理番号を示す。602はコンテナの名称を示す。603は本体連動起動を行うか否かを示す。本体連動起動とは、画像形成装置100(本体)に連動してコンテナを生成して起動することを意味する。なお、本体連動起動以外のコンテナは、種々のタイミングで生成されてもよい。例えば、ユーザインタフェースを介して対応する機能の設定が開始されると、対応するコンテナが生成されて起動してもよい。また、画像形成装置100の不図示のトレイにシートが載置されたことが検知されると、実行が予測される1以上の機能に対応するコンテナが生成されて起動されてもよい。この場合、例えば、コピー機能、スキャン機能、及びFAX機能に関連するコンテナの少なくとも1つが生成されて起動されてもよい。さらに、画像形成装置100が不図示の人感センサを備える場合においては、画像形成装置100から所定の範囲において人感センサによって人が検知されると、実行が予測される1以上の機能に対応するコンテナが生成され起動されてもよい。604はdockerを動かしているホスト側が制御コマンド通信用にどのポートを用いるのかを示す。605はコンテナ間でのCPUリソース配分の優先度を示す。606はメモリリソース配分の最大値を示す。607はスワップメモリを含んだメモリリソース配分の最大値を示す。
【0049】
610はコピーアプリケーションのコンテナ管理情報(コピーコンテナ222に関する情報)を示す。610に示すように、コピーコンテナ222の名称602は”copyserver”である。また、コピーコンテナ222では本体連動起動が「する」と設定されているため、画像形成装置100の電源が投入されたタイミングで、同時にコピーコンテナ222は起動する。なお、ここでは、コピー機能、Send機能、及びPDL機能が本体連動起動すると設定されているが、本発明を限定する意図はない。当該画像形成装置の使用環境や管理者の意図に応じて変更されうる設定である。コピーコンテナ222のhost port603は、20016ポートが割り当てられている。コピーコンテナ222のcpu-shares604には、512と設定されている。コピーコンテナ222のメモリ606には、256MBが設定されており、即ち、256MBまで利用可能であることを示す。コピーコンテナ222のメモリスワップ607には、256MBが設定されており、即ち、スワップメモリを含むメモリが256MBまで利用可能であることを示す。つまり、メモリ606との差分がないため、スワップメモリは利用しないものとしている。例えばこの値が1280MBであれば、256MBとの差分である1024MBまでスワップファイルを利用できることを意味する。同様に、Sendアプリケーション、PDLアプリケーション、Webブラウザアプリケーションについても、それぞれのコンテナ管理情報が当該コンテナ管理情報DB501上で管理される。このように、コンテナ管理情報600には、コンテナごとに、ハードウェア資源(ホストポート、CPUの使用、メモリ、及びメモリスワップ)の割り当てに関する情報が含まれる
図5の説明に戻る。コンテナ制御部221がdocker engine511に対して行うコンテナ制御には、コンテナ生成指示、コンテナ起動指示、及びコンテナ停止指示が含まれる。さらに、コンテナ制御には、コンテナ復帰指示、コンテナ設定変更指示、コンテナ終了指示、コンテナ破棄指示、及びコンテナ状態取得指示も含まれる。
【0050】
コンテナ生成指示(CC_CONTAINER_CMD_CREATE、0xC000)は、前述したDockerfile512と、コンテナ管理情報600とに基づいて、コンテナを生成する指示である。コンテナ起動指示(CC_CONTAINER_CMD_START、0xC100)は、コンテナ上でアプリケーションを起動する指示である。コンテナ停止指示(CC_CONTAINER_CMD_PAUSE、0xC200))は、コンテナを起動状態から停止状態へ一時停止させる指示である。上記コンテナ停止指示は、例えば、現在ログインしているユーザがログアウトした場合や、対応する機能のジョブ終了後に同機能のジョブが投入されずに一定時間が経過した場合に行われる。さらに、コンテナ停止指示は、他のコンテナを起動する際にハードウェア資源が所定値未満となり、そのタイミングで使用頻度が低い場合や、致命的なエラーが発生した場合などにも行われる。コンテナ復帰指示(CC_CONTAINER_CMD_UNPAUSE、0xC300)は、一時停止したコンテナを再度活動状態にする指示である。また、装置が省電力モードやスリープモードへ移行した際に、少なくとも1つのコンテナを一時停止するようにしてもよい。コンテナ復帰指示は、基本的には停止状態のコンテナに対して機能実行の要求を受け付けたタイミングや装置の省電力モード等からの復帰時となる。コンテナ設定変更(CC_CONTAINER_CMD_UPDATE、0xC700)は、コンテナに割り振るCPUリソースやメモリリソースなどのリソース設定を変更する指示である。コンテナ終了指示(CC_CONTAINER_CMD_STOP、0xCD00)は、コンテナ上のアプリケーションを終了させる指示である。コンテナ破棄指示(CC_CONTAINER_CMD_REMOVE、0xCE00)は、コンテナを破棄する指示である。コンテナ破棄指示は、例えば常駐させないコンテナにおいてジョブを実行した後に、当該コンテナを破棄する場合に行われる。コンテナ状態取得指示(CC_CONTAINER_CMD_GET_STATUS,0xCF00)は、コンテナの状態を取得する指示である。
【0051】
(アプリケーション制御コマンド)
図4に示すように、アプリケーションに対する制御コマンド識別子は、0xA0~0xAFから始まる。ここで、図7を参照して、本実施形態に係るデバイス・ジョブ制御部211によるアプリケーションに対するアプリケーション制御コマンドについて説明する。以下では、機器内外からデバイス・ジョブ制御部211に対し、制御コマンド識別子が0xA110である制御コマンドが送信された場合を例に説明する。
【0052】
デバイス・ジョブ制御部211は、当該制御コマンド識別子のターゲットオプションを表現する下位バイトが0x10であることから、コピーアプリケーションに対する制御コマンドを受信したと判別する。そして、デバイス・ジョブ制御部211はコピージョブ仮受信部212に対して、当該制御コマンドを通知する。コピージョブ仮受信部212は、当該制御コマンド識別子が0xA1から始まることを検知し、アプリケーション実行指示を行う制御コマンドであることを判別し、コピージョブ本受信部231に対して当該制御コマンドを通知する。
【0053】
なお、この際、コピージョブ仮受信部212は、コンテナ管理情報DB501のコピーコンテナ222に関する管理情報610を参照することで、コピーアプリケーションに割り当てられた制御コマンド通信用ポートが20016であることを認識する。そして、コピージョブ仮受信部212は、20016ポートに対して、制御コマンドを送信する。20016ポートに対する通信は、docker engine511が受け付け、さらにコピーコンテナ222上に対して20001ポートへ送信する。コピージョブ本受信部231は20001ポートに送信された制御コマンドを読み取り、コピージョブ実行部241へ通知することで、コピージョブが実行される。それぞれのコンテナ222~225は、コンテナ管理情報DB501のコンテナ管理情報600に記載されたリソース配分に従って動作をしている。
【0054】
なお、本発明において、画像形成装置100は、すべてのコンテナを同時に常時動作させておく必要はない。例えば、本実施形態では、ユーザが明確に利用する意思を示したタイミング、例えばWebブラウザUIアプリ部205を操作したタイミングで、Webブラウザコンテナ225を起動する。また、本実施形態では本体連動起動として常時動作させているアプリケーションについてもユーザ設定に従って常時動作させないようにしてもよい。その場合は、上記Webブラウザと同様にユーザが明確に利用する意思を示したタイミングで対応するコンテナが起動される。
【0055】
図5の説明に戻る。各仮受信部212~215が各本受信部231~234に対して行うアプリケーション指示には、実行指示、一時停止指示、キャッシュメモリフラッシュ要求指示、及びキャンセル指示が含まれる。実行指示(CC_APPLICATION_CMD_EXECU‘TE、0xA100)は、当該アプリケーションにおいてジョブを実行する指示である。一時停止指示(CC_APPLICATION_CMD_STOP,0xA500)は、当該アプリケーションで実行中のジョブを一時停止する指示である。キャッシュメモリフラッシュ要求指示(CC_APPLICATION_CMD_C_FLUSH,0xA700)は、当該アプリケーション実行中に保持したメモリ上のキャッシュを破棄する指示である。これにより、アプリケーションが利用するメモリ使用量を削減することができる。キャンセル指示(CC_APPLICATION_CMD_CANCEL、0xAF00)は、当該アプリケーションで実行中のジョブをキャンセルする指示である。
【0056】
(デバイス制御コマンド)
図4に示すように、デバイスに対する制御コマンド識別子は、0xD0~0xDFから始まる。デバイス制御コマンドには、例えば、機器内外からデバイスの電力制御などの指示を受け付けるための制御コマンドを含むことができる。デバイス制御コマンド識別子には、スリープ復帰指示、スリープ突入指示、パネル点灯指示、パネル消灯指示、高速復帰電源断指示、及び電源切断指示がある。
【0057】
スリープ突入指示(CC_DEVICE_CMD_WAKEUP,0xD000)は、消費電力を抑える省電力モードへデバイスの状態を移行する指示である。スリープ復帰指示(CC_DEVICE_CMD_SLEEP、0xD100)は、省電力モードから通常モードへデバイスの状態を移行する指示である。パネル消灯指示(CC_DEVICE_CMD_PANELOFF、0xD200)は、操作部ユニット131に備えられた操作部パネルの画面表示を停止する指示である。パネル点灯指示(CC_DEVICE_CMD_PANELON,0xD300)は、操作部ユニット131に備えられた操作部パネルの画面表示を実行する指示である。高速復帰電源断指示(CC_DEVICE_CMD_QUICKOFF、0xD400)は、通常モードから高速復帰電源断モードへデバイスの状態を移行する指示である。画像形成装置100が高速復帰電源断モードに突入した場合、電源スイッチ130の操作によってのみ、画像形成装置100は通常モードへ復帰できる。電源切断指示(CC_DEVICE_CMD_POWEROFF,0xDF00)は、デバイスの電源を切断する指示である。
【0058】
なお、本実施形態に係る画像形成装置100では、プリンタユニット132、スキャナユニット133、及びFAXユニット134等の電力制御を細かに制御することで、画像形成装置100全体の消費電力を抑える。例えば、プリンタユニット132に対して、待機中の消費電力量の異なる2種類のモードを備え、本体ファーム200からの指示に従ってモードを使い分けるなどの工夫を行うこともできる。本実施形態では、デバイスのこれら電力制御は一般的な画像形成装置における電力制御と同様の処理となることから、詳細な説明については割愛する。
【0059】
(汎用制御レスポンス識別子)
図4に示すように、汎用制御レスポンス識別子には、成功レスポンス識別子(CC_RESPONSE_OK、0x0000)と、失敗レスポンス識別子が含まれる(CC_RESPONSE_NG,0x0001)。これらは、種々の制御コマンドに対する処理が成功したか失敗したかを通知するために用いられる。
【0060】
(コンテナ状態制御レスポンス識別子)
図4に示すように、コンテナ状態制御レスポンス識別子は、コンテナ未存在状態制御レスポンス、コンテナ未起動状態制御レスポンス、コンテナ起動状態レスポンス、コンテナ停止状態レスポンスが含まれる。さらに、コンテナ状態制御レスポンス識別子には、コンテナ再起動中レスポンス、コンテナ終了中レスポンス、コンテナ削除中レスポンス、及び、コンテナ停止失敗中レスポンスが含まれる。
【0061】
コンテナ未存在状態制御レスポンス(CC_RESPONSE_NONEXISTS,0x8000)とは、対象となったアプリケーションを動かすためのコンテナが存在していない状態であることを示す。コンテナ未起動状態制御レスポンス(CC_RESPONSE_CREATED、0x0000)は、対象となったコンテナは存在しているが、起動していない状態であることを示す。コンテナ起動状態レスポンス(CC_RESPONSE_RUNNING,0x0001)は、対象となったコンテナが存在し、起動している状態であることを示す。コンテナ停止状態レスポンス(CC_RESPONSE_PAUSED,0x0002)は、対象となったコンテナが存在し、起動しているが、停止指示を受け付けたことを示す。コンテナ再起動中レスポンス(CC_RESPONSE_RESTARTING,0x0003)は、コンテナに対する再起動要求を実行中であることを示す。コンテナ終了中レスポンス(CC_RESPONSE_EXITED,0x0004)は、コンテナが終了状態にあることを示す。コンテナ削除中レスポンス(CC_RESPONSE_REMOVING,0x0005)は、コンテナに対する削除要求を実行中であることを示す。コンテナ停止失敗中レスポンス(CC_RESPONSE_DEAD、0x0006)は、対象となってコンテナが存在し、起動しているが、停止指示の要求に対して停止処理が失敗した状態であることを示す。
【0062】
<デバイス・ジョブ制御部の処理手順>
次に、図8を参照して、本実施形態に係るデバイス・ジョブ制御部211の処理手順について説明する。以下で説明する処理は、例えばCPU111がROM112や内蔵ストレージ114に格納された制御プログラムをRAM113に読み出して実行することにより実現される。
【0063】
S801はループ処理を示し、デバイス・ジョブ制御部211は、全ての仮受信部212~215、及び、受信部216に対して、以下のS802乃至S805の処理を繰り返し実行する。S802で、デバイス・ジョブ制御部211は、それぞれの受信部に対して、受信部起動コマンドを送信する。続いて、S803で、デバイス・ジョブ制御部211は、それぞれの受信部からレスポンスを受信する。S804で、デバイス・ジョブ制御部211はレスポンスが失敗であるかを判断する。失敗である場合はS805に進み、デバイス・ジョブ制御部211は、致命エラーが発生したことを記録し、繰り返しの処理を継続する。一方、失敗でない場合はそのまま繰り返しの処理を継続する。以上のS802乃至S805の処理を繰り返すことで、デバイス・ジョブ制御部211は、全仮受信部212~215、及び、受信部216に対して起動指示を行う。全ての処理が終了するとS806に進む。
【0064】
S806で、デバイス・ジョブ制御部211は、致命エラーが発生したか否かを判断し、致命エラーが発生している場合にはS808に進み、そうでない場合はS807に進む。S808で、デバイス・ジョブ制御部211は、操作部制御部201に対して、致命エラー発生に伴うエラー表示要求を通知し、処理を終了させる。一方、S807で、デバイス・ジョブ制御部211は、致命エラーが発生しなかった場合には、操作部制御部201に対して、起動指示を行う。操作部制御部201は、当該起動指示を受けて、UIアプリ部202~206の起動を行い、S831に進む。なお、UIアプリ部202~206は、プログラムの更新を容易にするためにも、操作部制御部201から呼び出される外部プログラムの形態で実現することが望ましい。
【0065】
S831で、デバイス・ジョブ制御部211は、機器内外から送信されたコマンドを受信する。そして、S832で、デバイス・ジョブ制御部211は、受信したコマンドの種別に応じて、処理を分岐する。受信したコマンド種別がアプリ制御コマンドであれば、S833に進み、デバイス・ジョブ制御部211は当該制御コマンドからターゲットアプリケーションを特定する。続いて、S834で、デバイス・ジョブ制御部211は、ターゲットアプリケーションの仮受信部又は受信部に対して、当該制御コマンドを送信する。仮受信部又は受信部は後述する通り、当該コマンドに対する処理が行われ、制御レスポンスを送信する。S835で、デバイス・ジョブ制御部211は、ターゲットアプリケーションからレスポンスを受信する。そして、S836で、デバイス・ジョブ制御部211は、S831で受信した制御コマンドのユーザ識別子に記録されている送信元に対して、当該受信したレスポンスを送信する。
【0066】
一方、S832で受信したコマンド種別がデバイス制御コマンドと判断するとS851に進み、デバイス・ジョブ制御部211はコマンド種別に応じて処理を分岐する。コマンド種別がスリープ復帰コマンドであればS852に進み、デバイス・ジョブ制御部211は、スリープ復帰処理を実行する。同様に、S853乃至S856において、デバイス・ジョブ制御部211は、スリープ突入コマンド、パネル点灯コマンド、パネル消灯コマンド、又は高速復帰電源断コマンドに対して、それぞれの処理を実行する。その後、S857で、デバイス・ジョブ制御部211はこれらのコマンド実行の結果をレスポンスとして取得する。続いて、S858で、デバイス・ジョブ制御部211は、S831で受信した制御コマンドのユーザ識別子に記録されている送信元に対して、当該デバイス制御を行ったレスポンスを送信する。そして、また新たなコマンドを受信すべく、処理をS831に戻す。
【0067】
また、S851でコマンド種別が電源断コマンドであると判断するとS891に進み、デバイス・ジョブ制御部211は、電源切断処理を実行し、処理を終了する。その結果、画像形成装置100は完全な電源断状態となる。
【0068】
以上の制御により、デバイス・ジョブ制御部211は、受信した制御コマンドに対して制御コマンドに含まれるターゲットに応じて、アプリケーションの仮受信部・受信部に対して、制御コマンドを転送したり、或いは、デバイスを制御したりできる。
【0069】
<仮受信部の処理手順>
次に、図9を参照して、本実施形態に係る仮受信部212~215の処理手順について説明する。ここでは、コピージョブ仮受信部212を代表として説明をする。そして、他の仮受信部213~215については、コピージョブ仮受信部212と同様の振る舞いをするため、説明は割愛する。以下で説明する処理は、例えばCPU111がROM112や内蔵ストレージ114に格納された制御プログラムをRAM113に読み出して実行することにより実現される。
【0070】
S901で、コピージョブ仮受信部212は、デバイス・ジョブ制御部211から仮受信部起動コマンドを受信する。続いて、S902で、コピージョブ仮受信部212は、仮受信部の起動処理を実行する。例えば、仮受信部の起動処理では、事前にメモリを確保したり、関連するハードウェアの設定をしたりする。その後、S903で、コピージョブ仮受信部212は起動処理が成功したかを判断する。起動処理が成功した場合にはS904に進み、コピージョブ仮受信部212はデバイス・ジョブ制御部211へ成功レスポンスを通知し、以後アプリ制御コマンドに対する処理を繰り返すべく、処理をS911に進める。一方、起動処理が失敗した場合にはS905に進み、コピージョブ仮受信部212はデバイス・ジョブ制御部211へ失敗レスポンスを通知し、処理を終了する。
【0071】
S911で、コピージョブ仮受信部212は、デバイス・ジョブ制御部211からアプリ制御コマンドを受信する。続いて、S912で、S911で受信したアプリ制御コマンドを実行するために、コピージョブ仮受信部212は、コンテナ制御部221に対して、コンテナ状態取得コマンドを送信する。さらに、S913で、コピージョブ仮受信部212は、コンテナ制御部221から、コンテナ状態制御レスポンスを取得する。
【0072】
次に、S914で、コピージョブ仮受信部212は、受信したコンテナ状態に応じて処理を切り替える。コンテナ状態がコンテナ未起動状態(CC_RESPONSE_CREATED)だった場合はS921に進み、コピージョブ仮受信部212は、コンテナ制御部221にコンテナ起動コマンド(CC_CONTAINER_CMD_START)を送信する。続いて、S922で、コピージョブ仮受信部212は、コンテナ制御部221からコンテナ起動コマンドのレスポンスを受信する。以上により、当該アプリケーションを動かすためのコンテナはコンテナ起動状態(CC_RESPONSE_RUNNING)へ移行する。そして、S929に進み、コピージョブ仮受信部212は一定時間待機した後、再度コンテナ状態時取得処理を繰り返すべく処理をS912に戻す。
【0073】
S914でコンテナ状態がコンテナ停止状態(CC_RESPONSE_PAUSED)だった場合はS923に進む。S923で、コピージョブ仮受信部212は、コンテナ制御部221に対して、コンテナ復帰コマンド(CC_CONTAINER_CMD_UNPAUSE)を送信する。続いて、S924で、コピージョブ仮受信部212は、コンテナ制御部221からコンテナ復帰コマンドのレスポンスを受信する。以上により、当該アプリケーションを動かすためのコンテナはコンテナ起動状態(CC_RESPONSE_RUNNING)へ移行する。そして、S929に進み、コピージョブ仮受信部212は一定時間待機した後、再度コンテナ状態時取得処理を繰り返すべく処理をS912に戻す。
【0074】
S914でコンテナ状態がコンテナ稼働状態(CC_RESPONSE_RUNNING)だった場合はS941に進む。S941で、コピージョブ仮受信部212は、コピージョブ本受信部231に対して、S911で受信したアプリ制御コマンドを送信する。続いて、S942で、コピージョブ仮受信部212は、コピージョブ本受信部231からアプリ制御コマンドに対するレスポンスを受信する。さらに、S943で、コピージョブ仮受信部212は、S911で受信したアプリ制御コマンドの送信元へS942で受信したレスポンスを送信し、処理をS911に戻す。
【0075】
S914でコンテナ状態が、上記以外の状態だった場合はS931へ進み、コピージョブ仮受信部212は、操作部制御部201へ致命エラーを通知する。そして、S932で、コピージョブ仮受信部212は、S911で受信したアプリ制御コマンドの送信元へ失敗レスポンスを送信し、処理を終了する。
【0076】
以上の制御により、コピージョブ仮受信部212は、コピーコンテナ222の状態にかかわらず、コピージョブに関するアプリ制御コマンドを常時受け付けることができる。さらに、コピージョブ仮受信部212は、コピーコンテナ222に対するコンテナ起動コマンドやコンテナ復帰コマンドをコンテナ制御部221へ送信することで、受信したアプリ制御コマンドを実行するためのコンテナ環境を準備することができる。
【0077】
<コンテナ制御部の処理手順>
次に、図10を参照して、本実施形態に係るコンテナ制御部221の処理手順について説明する。以下で説明する処理は、例えばCPU111がROM112や内蔵ストレージ114に格納された制御プログラムをRAM113に読み出して実行することにより実現される。
【0078】
S1001はループ処理を示し、コンテナ制御部221は、管理をしている全コンテナ222~225を対象に、S1002乃至S1007、S1011乃至S1014、及びS1021の処理を繰り返す。S1002で、コンテナ制御部221は、docker engine511に対して、コンテナ状態取得コマンドを実行する。続いてS1003で、コンテナ制御部221は、docker engine511から状態取得コマンドのレスポンスを取得する。そして、S1004で、コンテナ制御部221は、取得したレスポンスによって処理を切り替える。
【0079】
S1004で取得したレスポンスが、コンテナが未存在である場合はS1005に進み、コンテナ制御部221は、docker engine511に対して、コンテナ生成コマンドを実行する。続いて、S1006で、コンテナ制御部221は、docker engine511からコンテナ生成コマンドのレスポンスを取得する。そして、S1007で、コンテナ制御部221は、取得したレスポンスによって処理を切り替える。取得したレスポンスがコンテナ生成に失敗した場合はS1021に進み、コンテナ制御部221は致命エラー発生を記録して、繰り返しの処理を継続する。
【0080】
一方、S1004でコンテナの状態取得コマンドのレスポンスがコンテナ未存在ではない、或いは、S1007でコンテナ生成コマンドのレスポンスが成功だった場合はS1011に進む。S1011で、コンテナ制御部221は、当該コンテナが本体連動起動か否かによって処理を切り替える。本体連動起動となっている場合はS1012に進み、コンテナ制御部221は、docker engine511に対してコンテナ起動コマンドを実行する。続いて、S1013で、コンテナ制御部221は、docker engine511からコンテナ起動コマンドのレスポンスを取得する。そして、S1014で、コンテナ制御部221は、取得したレスポンスによって、処理を切り替える。ここで、コンテナ起動コマンドが失敗した場合はS1021に進み、コンテナ制御部221は致命エラー発生を記録し、繰り返しの処理を継続する。一方、S1011で本体連動起動になっていない場合、或いは、S1014でコンテナ起動コマンドが失敗ではない場合は、そのまま繰り返しの処理を継続する。
【0081】
以上の処理を繰り返すことで、コンテナ制御部221が管理している全コンテナ222~225が生成される。そして、コンテナ管理情報DB501のコンテナ管理情報600上で本体連動起動が指定されているコンテナは、コンテナ起動状態(即ち、CC_RESPONSE_RUNNING、0x0001と同等)となる。そして、本体連動起動が指定されていないコンテナは、コンテナ未起動状態(即ち、CC_RESPONSE_CREATED、0x0000と同等)となる。繰り返し処理が終了すると、S1041に進む。
【0082】
S1041で、コンテナ制御部221は、管理をしている全コンテナ222~225を対象としたコンテナ起動処理において、S1021での致命エラーが記録されたか否かによって処理を切り替える。致命エラーが記録されている場合はS1042へ進み、コンテナ制御部221は、操作部制御部201に対して、致命エラー表示要求を通知し、処理を終了する。
【0083】
一方、致命エラーが記録されていない場合はS1050に進み、コンテナ制御部221は、コンテナ制御コマンドの受信処理を開始し、機内外から、コンテナ制御コマンドを受信する。続いて、S1051で、コンテナ制御部221は、受信したコンテナ制御コマンドに応じて、処理を切り替える。
【0084】
S1051で受信したコンテナ制御コマンドがコンテナ生成コマンドである場合にはS1052に進み、コンテナ制御部221は、docker engine511に対して、コンテナ生成コマンドを実行する。受信したコンテナ制御コマンドがコンテナ起動コマンドである場合にはS1053に進み、コンテナ制御部221は、docker engine511に対して、コンテナ起動コマンドを実行する。受信したコンテナ制御コマンドがコンテナ停止コマンドである場合にはS1054に進み、コンテナ制御部221は、docker engine511に対して、コンテナ停止コマンドを実行する。受信したコンテナ制御コマンドがコンテナ復帰コマンドである場合にはS1055に進み、コンテナ制御部221は、docker engine511に対して、コンテナ復帰コマンドを実行する。受信したコンテナ制御コマンドがコンテナ設定変更コマンドである場合にはS1056に進み、コンテナ制御部221は、docker engine511に対して、コンテナ設定変更コマンドを実行する。受信したコンテナ制御コマンドがコンテナ終了コマンドである場合にはS1057に進み、コンテナ制御部221は、docker engine511に対して、コンテナ復帰コマンドを実行する。受信したコンテナ制御コマンドがコンテナ破棄コマンドである場合にはS1058に進み、コンテナ制御部221は、docker engine511に対して、コンテナ破棄コマンドを実行する。各コマンドを実行するとそれぞれS1061に進む。
【0085】
S1061で、コンテナ制御部221は、docker engine511で実行した各種コマンドに対するレスポンスを受信する。続いて、S1062で、コンテナ制御部221は、受信したレスポンスによって処理を切り替える。コマンドのレスポンスが成功だった場合にはS1063に進み、コンテナ制御部221は、コンテナ制御コマンドに対するレスポンスを成功レスポンスとし、S1091に進む。一方、コマンドのレスポンスが失敗だった場合にはS1064に進み、コンテナ制御部221は、コンテナ制御コマンドに対するレスポンスを失敗レスポンスとし、S1091に進む。
【0086】
また、S1051で受信したコンテナ制御コマンドがコンテナ状態取得コマンドである場合にはS1071に進み、コンテナ制御部221は、docker engine511に対して、コンテナ存在確認コマンドを実行する。続いて、S1072で、コンテナ制御部221は、docker engine511から上記S1071のコンテナ存在確認コマンドのレスポンスを取得する。そして、S1073で、コンテナ制御部221は、コンテナが存在するかによって処理を切り替える。当該コンテナが存在する場合は、S1075に進み、コンテナ制御部221は、docker engine511に対して、コンテナ状態取得コマンドを実行する。続いて、S1076で、コンテナ制御部221は、docker engine511からコンテナ状態取得コマンドのレスポンスを取得する。そして、S1077で、コンテナ制御部221は、コンテナ制御コマンドに対するレスポンスを、コンテナ状態取得コマンドのレスポンスに基づいて設定し、処理をS1091に進める。例えば、docker engine511上で当該コンテナが起動状態(RUNNING)であれば、コマンド制御コマンドに対するレスポンスは、コンテナ起動状態(CC_RESPONSE_RUNNING,0x0001)となる。一方、S1073でコンテナが存在しない場合にはS1074に進み、コンテナ制御部221は、コンテナ制御レスポンスにコンテナ無しを設定し、処理をS1091に進める。
【0087】
S1091で、コンテナ制御部221は、S1050で受信した制御コマンドの送信元へ、以上の処理で決定したコンテナ制御コマンドのレスポンスを送信し、処理をS1050に戻す。
【0088】
以上の制御により、コンテナ制御部221は、機内で流通するコンテナ制御コマンドに基づき、コンテナを制御するためのdocker engine511に対して適切なコマンドを発行し、各コンテナを制御することができる。当該構成を用いることにより、コンテナ制御部221に対してコンテナ制御コマンドを送信し、コンテナ制御コマンドのレスポンスを受信する各アプリケーションは、コンテナを実現するライブラリの種別を意識する必要がなくなる。例えば、本実施例では、一般的なコンテナ管理ライブラリdockerを用いて説明をしているが、それ以外のコンテナ管理ライブラリを用いてシステムを構築することもできる。各コンテナ管理ライブラリごとに、アプリケーションが発行するべきコンテナ制御コマンドを使い分けるのは非常に手間である。そのため、コンテナ制御部221のようにコンテナ制御全般を受け持つブリッジモジュールを導入することで、コンテナライブラリ毎の振る舞いの違いを吸収することもできる。
【0089】
<まとめ>
ある機能を実現するアプリケーションの一般的なデザインパターンとして、モデル/ビュー/コントローラからなるMVCが広く知られている。ビューはモデルが示す情報に基づいて表示画面を作成するモジュールである。コントローラは、ユーザからの操作を受け付けて、モデルへ通知するモジュールである。モデルはユーザによって操作された内容に基づき、ビューを更新するモジュールである。MVCモデルはユーザインタフェースを伴うソフトウェアにおいて、マルチプラットフォームでの再利用性を高めたりするために採用されることも少なくないデザインパターンである。
【0090】
しかし、従来のMVCの考え方だけでは、コンテナ上で動作するアプリケーションの規模は非常に大きくなり、リソースの効率的な活用をするには扱いにくい。具体的には、MVCすべてのモジュールをコンテナ上で動かすと、操作要求に応じてコンテナを稼働するのに時間を要し、また、必要となるリソースも大きくなるという課題がある。これは、従来の考え方は、あるアプリケーションを起動状態とすることは、ユーザに対して全機能を提供可能にすることと同義としていたためである。
【0091】
本発明では、当該MVCの考え方を発展させ、ビューとコントローラに相当する部分はコンテナの外に設け、モデルに相当する部分をコンテナ内で管理する、組み込みアプリケーション用の管理手法を提案している。これにより、あるアプリケーションにおいて、ユーザからの操作要求を受け付ける部分と、ユーザからの操作要求を実行する部分とに分割できる。そして、部分ごとに起動するか否かを切り替えることで、リソースの効果的な活用を実現することができる。例えば、ビューとコントローラに相当する部分は常時起動させることで、ユーザからの操作を本体ファームにおいてリアルタイムに応答できる。また、コンテナ上で必要に応じてモデルに相当するアプリケーション実行部分を起動することで、複数のアプリケーションを搭載していても、システム全体で要求されるリソースを削減することができる。
【0092】
上述の構成を実現すべく、本実施形態に係る1以上の機能を提供する画像形成装置は、ユーザインタフェースを介して、それぞれが対応する機能の要求を受け付ける1以上の第1モジュールと、1以上の第1モジュールのそれぞれに対応する機能を実行する1以上の第2モジュールとを備える。また、本画像形成装置は、1以上の第1モジュールが受け付けた要求を、対応する第2モジュールへ通知する第1制御部と、当該通知に従って、対応する第2モジュールを制御する第2制御部とを備える。さらに、本画像形成装置によれば、1以上の第1モジュールは、画像形成装置の起動時から常時起動され、1以上の第2モジュールは、オペレーティングシステムからは独立した実行環境のコンテナとして生成され、第2制御部からの指示により起動状態が制御される。これにより、本実施形態によれば、組み込みデバイスにコンテナ技術を好適に適用して、ハードウェア資源を有効に活用するとともに、ユーザの操作に対する応答性を担保することができる。
【0093】
<変形例>
本発明は上記実施形態に限らず様々な変形が可能である。本発明によれば、仮受信部212~215が制御コマンドを本受信部へ通知する以外の処理や機能を実現してもよい。例えば、仮受信部212~215は、それぞれのアプリケーションが利用するプリンタユニット制御部271やスキャナユニット制御部272に対して通信を行い、ジョブ受け付け可否(実行可能であるか否か)を判断する機能を有していてもよい。この場合、スキャナユニット制御部272がSendジョブ実行部242によって利用されている状態であっても、PDLジョブ実行部243はプリンタユニット制御部271を利用して印字処理を実行することができる。しかし、コピージョブ実行部241は、スキャナユニット制御部272が利用中である場合には、ジョブ実行の予約はできるが、即時実行はできない。これらのジョブ受け付け可否を判断する機能は、それぞれの実行部241~244に備える構成のほかに、仮受信部212~215が備える構成をとってもよい。
【0094】
また、それぞれのジョブ実行部241~244が備える機能の一部を、仮受信部212~215が備えてもよい。例えば、PDLジョブ実行部243は、LAN制御部209から通知された印刷データをRAM113や内蔵ストレージ114上に一時スプールする機能を有する場合がある。しかし、コンテナ制御部221によってPDLコンテナ224が起動状態にならないと、データ受信を開始できず、印刷開始がそれだけ遅延する可能性がある。そこで、PDLジョブ仮受信部214は、コンテナ制御部221がPDLコンテナ224の起動/復帰処理を実行している間に、印刷データをRAM113や内蔵ストレージ114上に一時的にスプールしてもよい。そしてPDLジョブ実行部243は、ジョブ実行開始時にPDLジョブ仮受信部214が既に受信した印刷データを含めて処理を実行する。これにより、コンテナの起動や復帰を待つことなく、画像形成装置100は印刷データのスプールを開始することができ、処理遅延を軽減することができる。
【0095】
<その他の実施形態>
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
【0096】
発明は上記実施形態に制限されるものではなく、発明の精神及び範囲から離脱することなく、様々な変更及び変形が可能である。従って、発明の範囲を公にするために請求項を添付する。
【符号の説明】
【0097】
111:CPU、211:デバイス・ジョブ制御部、221:コンテナ制御部、511:Docker engine
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10