(57)【特許請求の範囲】
【請求項１】
主記憶装置への通電を継続しながら演算装置への通電を停止した省電力状態への遷移が可能な情報処理装置であって、
前記省電力状態への遷移に際して、前記演算装置の動作状態を示す動作状態情報を前記主記憶装置へ格納する動作状態情報処理部と、
前記主記憶装置において前記動作状態を示す情報が格納された記憶領域を示す格納先情報を前記主記憶装置とは異なる記憶媒体に格納する格納先情報処理部と、
前記動作状態情報及び前記格納先情報の格納処理の後に前記演算装置への通電を停止させる通電停止制御部と、
前記省電力状態からの復帰要因を検知する副演算装置によって設定された復帰処理識別情報を、前記演算装置への電源投入後における初期化処理に際して確認する復帰処理識別部と、
前記復帰処理識別情報が確認された場合、前記主記憶装置とは異なる記憶媒体に格納された前記格納先情報に基づいて前記動作状態情報を読み出す動作状態復元部とを含み、
前記格納先情報処理部は、前記格納先情報と共に、前記演算装置を前記動作状態復元部として機能させるための情報が前記主記憶装置において格納された記憶領域を示す動作状態復元部指定情報を前記主記憶装置とは異なる記憶媒体に格納し、
前記復帰処理識別情報が確認された場合、前記演算装置が前記動作状態復元部指定情報に基づいて前記主記憶装置にアクセスすることにより、前記動作状態復元部として機能することを特徴とする情報処理装置。
【請求項２】
前記省電力状態への遷移に際して、前記演算装置によって制御されるデバイスの動作状態を示すデバイス動作状態情報を前記主記憶装置へ格納するデバイス動作状態情報処理部と、
前記動作状態情報が読み出されて復元された後、前記デバイス動作状態情報を読み出すデバイス動作状態復元部とを含むことを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記動作状態情報処理部は、前記動作状態情報の格納に際して、前記演算装置を前記デバイス動作状態復元部として機能させるための情報が格納されたアドレスを示すデバイス動作状態復元部指定情報を、前記演算装置内の記憶領域に保存し、
前記動作状態情報は、前記アドレスを示す情報を含み、
前記動作状態情報が読み出されて復元された後、前記演算装置が前記演算装置内の記憶領域に保存された前記デバイス動作状態復元部指定情報に基づいて前記主記憶装置にアクセスすることにより、前記デバイス動作状態復元部として機能することを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記演算装置を前記デバイス動作状態復元部として機能させるための情報であるデバイス動作状態復元処理情報は、複数の前記デバイスに応じて複数用意されており、
前記動作状態情報処理部は、前記演算装置が複数の前記デバイス動作状態復元処理情報にアクセスする順番を、前記デバイスの動作状態を復元する際の複数の前記デバイスの優先順位を示す情報に基づいて変更することを特徴とする請求項３に記載の情報処理装置。
【請求項５】
主記憶装置への通電を継続しながら演算装置への通電を停止した省電力状態への遷移が可能な情報処理装置であって、
前記省電力状態への遷移に際して、前記演算装置の動作状態を示す動作状態情報を前記主記憶装置へ格納する動作状態情報処理部と、
前記主記憶装置において前記動作状態を示す情報が格納された記憶領域を示す格納先情報を前記主記憶装置とは異なる記憶媒体に格納する格納先情報処理部と、
前記動作状態情報及び前記格納先情報の格納処理の後に前記演算装置への通電を停止させる通電停止制御部と、
前記省電力状態からの復帰要因を検知する副演算装置によって設定された復帰処理識別情報を、前記演算装置への電源投入後における初期化処理に際して確認する復帰処理識別部と、
前記復帰処理識別情報が確認された場合、前記主記憶装置とは異なる記憶媒体に格納された前記格納先情報に基づいて前記動作状態情報を読み出す動作状態復元部とを含み、
前記省電力状態への遷移に際して、前記演算装置によって制御されるデバイスの動作状態を示すデバイス動作状態情報を前記主記憶装置へ格納するデバイス動作状態情報処理部と、
前記動作状態情報が読み出されて復元された後、前記デバイス動作状態情報を読み出すデバイス動作状態復元部とを含み、
前記動作状態情報処理部は、前記動作状態情報の格納に際して、前記演算装置を前記デバイス動作状態復元部として機能させるための情報が格納されたアドレスを示すデバイス動作状態復元部指定情報を、前記演算装置内の記憶領域に保存し、
前記動作状態情報は、前記アドレスを示す情報を含み、
前記動作状態情報が読み出されて復元された後、前記演算装置が前記演算装置内の記憶領域に保存された前記デバイス動作状態復元部指定情報に基づいて前記主記憶装置にアクセスすることにより、前記デバイス動作状態復元部として機能することを特徴とする情報処理装置。
【請求項６】
前記復帰処理識別部は、前記演算装置と前記副演算装置とが情報をやり取りするためのインタフェースに含まれるポートに設定された前記復帰処理識別情報を確認することを特徴とする請求項１乃至５いずれか１項に記載の情報処理装置。
【請求項７】
前記省電力状態への遷移に際して、現在時刻を取得して記憶媒体に格納する遷移前時刻処理部と、
前記動作状態情報が読み出されて復元された後の現在時刻を取得して、前記遷移前時刻処理部によって格納された時刻からの経過時間を計算し、タイマ処理に反映させる復帰後時刻処理部とを含むことを特徴とする請求項１乃至６いずれか１項に記載の情報処理装置。
【請求項８】
主記憶装置への通電を継続しながら演算装置への通電を停止した省電力状態への遷移が可能な情報処理装置であって、
前記省電力状態への遷移に際して、前記演算装置の動作状態を示す動作状態情報を前記主記憶装置へ格納する動作状態情報処理部と、
前記主記憶装置において前記動作状態を示す情報が格納された記憶領域を示す格納先情報を前記主記憶装置とは異なる記憶媒体に格納する格納先情報処理部と、
前記動作状態情報及び前記格納先情報の格納処理の後に前記演算装置への通電を停止させる通電停止制御部と、
前記省電力状態からの復帰要因を検知する副演算装置によって設定された復帰処理識別情報を、前記演算装置への電源投入後における初期化処理に際して確認する復帰処理識別部と、
前記復帰処理識別情報が確認された場合、前記主記憶装置とは異なる記憶媒体に格納された前記格納先情報に基づいて前記動作状態情報を読み出す動作状態復元部とを含み、前記省電力状態への遷移に際して、現在時刻を取得して記憶媒体に格納する遷移前時刻処理部と、
前記動作状態情報が読み出されて復元された後の現在時刻を取得して、前記遷移前時刻処理部によって格納された時刻からの経過時間を計算し、タイマ処理に反映させる復帰後時刻処理部とを含むことを特徴とする情報処理装置。
【請求項９】
主記憶装置への通電を継続しながら演算装置への通電を停止した省電力状態への遷移を制御する省電力制御方法であって、
前記省電力状態への遷移に際して、前記演算装置の動作状態を示す動作状態情報を前記主記憶装置へ格納し、
前記主記憶装置において前記動作状態を示す情報が格納された記憶領域を示す格納先情報を主記憶装置とは異なる記憶媒体に格納し、
前記動作状態情報及び前記格納先情報の格納処理の後に前記演算装置への通電を停止させ、
前記省電力状態からの復帰要因を検知する副演算装置によって設定された復帰処理識別情報を、前記演算装置への電源投入後における初期化処理に際して確認し、
前記復帰処理識別情報が確認された場合、前記主記憶装置とは異なる記憶媒体に格納された前記格納先情報に基づいて前記動作状態情報を読み出し、
前記格納先情報と共に、動作状態復元部指定情報を前記主記憶装置とは異なる記憶媒体に格納し、
前記復帰処理識別情報が確認された場合、前記演算装置が前記動作状態復元部指定情報に基づいて前記主記憶装置にアクセスすることを特徴とする省電力制御方法。
【請求項１０】
主記憶装置への通電を継続しながら演算装置への通電を停止した省電力状態への遷移を制御する省電力制御プログラムであって、
前記省電力状態への遷移に際して、前記演算装置の動作状態を示す動作状態情報を前記主記憶装置へ格納するステップと、
前記主記憶装置において前記動作状態を示す情報が格納された記憶領域を示す格納先情報を前記主記憶装置とは異なる記憶媒体に格納するステップと、
前記動作状態情報及び前記格納先情報の格納処理の後に前記演算装置への通電を停止させるステップと、
前記省電力状態からの復帰要因を検知する副演算装置によって設定された復帰処理識別情報を、前記演算装置への電源投入後における初期化処理に際して確認するステップと、
前記復帰処理識別情報が確認された場合、前記主記憶装置とは異なる記憶媒体に格納された前記格納先情報に基づいて前記動作状態情報を読み出すステップと、
前記格納先情報と共に、動作状態復元部指定情報を前記主記憶装置とは異なる記憶媒体に格納するステップと、
前記復帰処理識別情報が確認された場合、前記演算装置が前記動作状態復元部指定情報に基づいて前記主記憶装置にアクセスするステップと、
を情報処理装置に実行させることを特徴とする省電力制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、省電力制御方法、省電力制御プログラムに関し、特に、プロセッサへの電力供給の停止制御に関する。
【背景技術】
【０００２】
近年、省電力化の要求が高くなっており、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）等の演算装置が搭載された情報処理装置においては、装置の動作状態に応じて装置各部への電力供給を停止する省電力制御の機能が必須となっている。
【０００３】
このような省電力制御の一例として、ｘ８６系のＣＰＵを用いたＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）アーキテクチャの情報処理装置では、ＳＴＲ（Ｓｕｓｐｅｎｄ  Ｔｏ  ＲＡＭ）モードやサスペンドモードと呼ばれる省電力制御の機能が用いられている。
【０００４】
このＳＴＲモードにおいては、省電力状態においても主記憶装置であるＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）への通電を継続することにより、記憶された内容を維持するリフレッシュ動作が継続される。これにより、ＣＰＵへの通電が停止された場合であっても、情報処理装置の動作状態が保存され、省電力状態から復帰する際に、省電力状態に遷移する前の状態を迅速に復元することが可能となる（例えば、特許文献１参照）。
【０００５】
他方、サスペンドモードの実現をより容易にする技術として、リセットの際にジャンプコードの有無を確認し、ジャンプコードがある場合にはハードウェアの初期化をすることなくローダ処理を行う技術が提案されている（例えば、特許文献２参照）。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１に開示された技術は、ＰＣアーキテクチャを前提としたＳＴＲモードの技術であるため、アーキテクチャの異なる情報処理装置にそのまま採用することはできない。また、特許文献２に開示された技術は、サスペンドモードに対応するものではあるが、ソフトウェアリセットにおいてＣＰＵへの通電が維持されていることが前提となっており、ＣＰＵへの通電を停止する本件発明とはその趣旨が異なる。
【０００７】
本発明は、上記実情を考慮してなされたものであり、主記憶装置への通電を維持しつつ演算装置への通電を停止する省電力制御を、特定のアーキテクチャに限らず実現することを目的とする。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、本発明の一態様は、主記憶装置への通電を継続しながら演算装置への通電を停止した省電力状態への遷移が可能な情報処理装置であって、前記省電力状態への遷移に際して、前記演算装置の動作状態を示す動作状態情報を前記主記憶装置へ格納する動作状態情報処理部と、前記主記憶装置において前記動作状態を示す情報が格納された記憶領域を示す格納先情報を前記主記憶装置とは異なる記憶媒体に格納する格納先情報処理部と、前記動作状態情報及び前記格納先情報の格納処理の後に前記演算装置への通電を停止させる通電停止制御部と、前記省電力状態からの復帰要因を検知する副演算装置によって設定された復帰処理識別情報を、前記演算装置への電源投入後における初期化処理に際して確認する復帰処理識別部と、前記復帰処理識別情報が確認された場合、前記主記憶装置とは異なる記憶媒体に格納された前記格納先情報に基づいて前記動作状態情報を読み出す動作状態復元部とを含み、前記格納先情報処理部は、前記格納先情報と共に、前記演算装置を前記動作状態復元部として機能させるための情報が前記主記憶装置において格納された記憶領域を示す動作状態復元部指定情報を前記主記憶装置とは異なる記憶媒体に格納し、前記復帰処理識別情報が確認された場合、前記演算装置が前記動作状態復元部指定情報に基づいて前記主記憶装置にアクセスすることにより、前記動作状態復元部として機能することを特徴とする。
【０００９】
また、本発明の他の態様は、主記憶装置への通電を継続しながら演算装置への通電を停止した省電力状態への遷移を制御する省電力制御方法であって、前記省電力状態への遷移に際して、前記演算装置の動作状態を示す動作状態情報を前記主記憶装置へ格納し、前記主記憶装置において前記動作状態を示す情報が格納された記憶領域を示す格納先情報を主記憶装置とは異なる記憶媒体に格納し、前記動作状態情報及び前記格納先情報の格納処理の後に前記演算装置への通電を停止させ、前記省電力状態からの復帰要因を検知する副演算装置によって設定された復帰処理識別情報を、前記演算装置への電源投入後における初期化処理に際して確認し、前記復帰処理識別情報が確認された場合、前記主記憶装置とは異なる記憶媒体に格納された前記格納先情報に基づいて前記動作状態情報を読み出し、前記格納先情報と共に、動作状態復元部指定情報を前記主記憶装置とは異なる記憶媒体に格納し、前記復帰処理識別情報が確認された場合、前記演算装置が前記動作状態復元部指定情報に基づいて前記主記憶装置にアクセスすることを特徴とする。
【００１０】
また、本発明の更に他の態様は、主記憶装置への通電を継続しながら演算装置への通電を停止した省電力状態への遷移を制御する省電力制御プログラムであって、前記省電力状態への遷移に際して、前記演算装置の動作状態を示す動作状態情報を前記主記憶装置へ格納するステップと、前記主記憶装置において前記動作状態を示す情報が格納された記憶領域を示す格納先情報を前記主記憶装置とは異なる記憶媒体に格納するステップと、前記動作状態情報及び前記格納先情報の格納処理の後に前記演算装置への通電を停止させるステップと、前記省電力状態からの復帰要因を検知する副演算装置によって設定された復帰処理識別情報を、前記演算装置への電源投入後における初期化処理に際して確認するステップと、前記復帰処理識別情報が確認された場合、前記主記憶装置とは異なる記憶媒体に格納された前記格納先情報に基づいて前記動作状態情報を読み出すステップと、前記格納先情報と共に、動作状態復元部指定情報を前記主記憶装置とは異なる記憶媒体に格納するステップと、前記復帰処理識別情報が確認された場合、前記演算装置が前記動作状態復元部指定情報に基づいて前記主記憶装置にアクセスするステップと、を情報処理装置に実行させるさせることを特徴とする。
【発明の効果】
【００１１】
本発明によれば、主記憶装置への通電を維持しつつ演算装置への通電を停止する省電力制御を、特定のアーキテクチャに限らず実現することが可能となる。
【図面の簡単な説明】
【００１２】
【図１】本発明の実施形態に係る画像形成装置のハードウェア構成を示すブロック図である。
【図２】本発明の実施形態に係るソフトウェア構成を示す図である。
【図３】本発明の実施形態に係るサスペンドモードへの復帰動作を示すシーケンス図である。
【図４】本発明の実施形態に係る記憶媒体に格納された情報を示す図である。
【図５】本発明の実施形態に係るサスペンドモードからの復帰動作を示すシーケンス図である。
【図６】本発明の実施形態に係るサスペンドモードからの復帰動作を示すシーケンス図である。
【図７】本発明の実施形態に係るＣＰＵコンテキストの保存、復元処理を示すフローチャートである。
【図８】本発明の実施形態に係るタイマ処理を示すフローチャートである。
【図９】本発明の他の実施形態に係るフック関数のキューの概念を示す図である。
【図１０】本発明の他の実施形態に係るフック関数の起動順序の変更動作を示すフローチャートである。
【図１１】本発明の他の実施形態に係る起動優先度テーブルの例を示す図である。
【図１２】本発明の他の実施形態に係る比較対象キューの取り出し動作の例を示すフローチャートである。
【図１３】本発明の他の実施形態に係るフック関数のキューの概念を示す図である。
【図１４】本発明の他の実施形態に係る比較対象キューの挿入動作の例を示すフローチャートである。
【図１５】本発明の他の実施形態に係るフック関数のキューの概念を示す図である。
【発明を実施するための形態】
【００１３】
実施の形態1．
以下、図面を参照して、本発明の実施形態を詳細に説明する。本実施形態においては、プリンタ、スキャナ、ファクシミリ等の複数の機能が搭載された複合機（ＭＦＰ：Ｍｕｌｔｉ  Ｆｕｎｃｔｉｏｎ  Ｐｅｒｉｐｈｅｒａｌ）を、情報処理装置の例として説明する。
【００１４】
図１は、本実施形態に係る複合機１のハードウェア構成を示すブロック図である。図１に示すように、本実施形態に係る複合機１は、メインシステム１０及びサブシステム２０を含み、両者の間は所定のインタフェースによって接続されている。
【００１５】
メインシステム１０は複合機１全体の動作を制御するコントローラとしてのシステムであり、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１１、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１２、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１３、ＲＴＣ（Ｒｅａｌ  Ｔｉｍｅ  Ｃｌｏｃｋ）１４、ＮＶＲＡＭ（Ｎｏｎ−Ｖｏｌａｔｉｌｅ  ＲＡＭ）１５及びＩ／Ｆ１６がバス１７を介して接続されている。
【００１６】
また、サブシステム２０は、複合機１が有する機能を実現するエンジンとしてのシステムであり、ＣＰＵ２１、ＲＡＭ２２、ＲＯＭ２３、Ｉ／Ｆ２４及びエンジン２５がバス２６を介して接続されている。更に、サブシステム２０は、メインシステム１０に含まれるＣＰＵ１１への通電を停止して省電力状態に遷移させる機能及びメインシステム１０側のＣＰＵ１１への通電が停止されている状態において、復帰要因を検知する機能を有する。
【００１７】
ＣＰＵ１１、２１は演算手段であり、夫々メインシステム１０、サブシステム２０の動作を制御する。ここで、ＣＰＵ２１は、上述したように、ＣＰＵ１１への通電が停止された省電力状態において復帰要因を検知する機能をも担う。そのため、ＣＰＵ２１は、ＣＰＵ１１よりも消費電力の低いものが用いられる。
【００１８】
ＲＡＭ１２、２２は情報の高速な読み書きが可能な揮発性の記憶媒体であり、夫々ＣＰＵ１１、２１が情報を処理する際の作業領域として用いられる。ＲＯＭ１３、２３は、読み出し専用の不揮発性記憶媒体であり、ファームウェア等のプログラムが格納されている。
【００１９】
また、ＲＯＭ１３、２３には、夫々ＣＰＵ１１、２１が電源投入後にアクセスすることが予め定められたブートベクタが確保されており、ブートベクタ内にはＣＰＵ１１、２１の電源投入時における初期化処理を行うためのプログラムであるブートローダが格納されている。これにより、ＣＰＵ１１、２１に電源が投入された際には、必ずブートローダが起動する。
【００２０】
ＲＴＣ１４は実際の日時を計時するタイマである。ＮＶＲＡＭ１５は、情報の読み書きが可能な不揮発性の記憶媒体であり、装置の動作において一次的に保持しておくべき情報等が格納される。Ｉ／Ｆ１６、２４は、メインシステム１０とサブシステム２０との間で情報をやり取りするためのインタフェースであり、例えば、ＰＣＩｅ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｆａｃｅ  Ｅｘｐｒｅｓｓ）インタフェース等が用いられる。
【００２１】
エンジン２５は、複合機１に搭載される機能を実現するための構成であり、画像を読み取るスキャナデバイス、画像形成出力を行うプロッタデバイス、公衆電話回線を介してファクシミリ通信を行うファクシミリデバイス、ＴＣＰ／ＩＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ／Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）等によりネットワーク通信を行うネットワークデバイス等が含まれる。更に、エンジン２５にはＣＰＵ１１への電源供給を制御する機構が含まれる。
【００２２】
このようなハードウェア構成において、ＲＯＭ１３、２３や図示しないＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）若しくは光学ディスク等の記録媒体に格納されたプログラムがＲＡＭ１２、２２に読み出され、ＣＰＵ１１、２１がそれらのプログラムに従って演算を行うことにより、ソフトウェア制御部が構成される。このようにして構成されたソフトウェア制御部と、ハードウェアとの組み合わせによって、本実施形態に係る複合機１の機能を実現する機能ブロックが構成される。
【００２３】
次に、図２を参照して、本実施形態に係る複合機１のメインシステム１０におけるソフトウェア構成について説明する。図２に示すように、本実施形態に係るメインシステム１０のソフトウェア１００は、複数のアプリケーションと、プラットフォームとによって構成される。
【００２４】
アプリケーションとしては、コピーアプリ１３１、プリンタアプリ１３２、スキャナアプリ１３３、ファクシミリアプリ１３４及びネットワークファイルアプリ１３５が含まれる。コピーアプリ１３１は、複合機１をコピー機として動作させるためのアプリケーションである。プリンタアプリ１３２は、複合機１をプリンタとして動作させるためのアプリケーションである。スキャナアプリ１３３は、複合機１をスキャナとして動作させるためのアプリケーションである。
【００２５】
ファクシミリアプリ１３４は、複合機１をファクシミリとして動作させるためのアプリケーションである。ネットワークアプリ１３５は、ＨＴＭＬ（ＨｙｐｅｒＴｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）文書等を配信するためのＷｅｂサーバソフト、ＨＴＭＬ文書等を閲覧するためのＷｅｂブラウザ等を含み、複合機１をネットワークサーバやネットワーククライアントとして動作させるためのアプリケーションである。
【００２６】
ソフトウェア１００における上記のアプリケーション以外のモジュールは、アプリケーションからハードウェアへの処理要求に関する情報処理を実行するためのプラットフォームである。アプリケーションからの処理要求の受信には、予め定義されている関数により処理要求を受信するＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）１２２が用いられる。
【００２７】
プラットフォームには、ＳＣＳ（Ｓｙｓｔｅｍ  Ｃｏｎｔｒｏｌ  Ｓｅｒｖｉｃｅ）１２１等の諸々のコントロールサービスを含むＳＲＭ（Ｓｙｓｔｅｍ  Ｒｅｓｏｕｒｃｅ  Ｍａｎａｇｅｒ）１２０と、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）１１０が含まれる。
【００２８】
ＳＣＳ１２１等のコントロールサービスは、アプリケーションからハードウェアへの処理要求を解釈し、解釈結果に応じてハードウェアの獲得要求を生成する。ＳＣＳ１２１のプロセスは、省電力状態への遷移等、システムの管理に関する制御を行う。
【００２９】
ＳＲＭ１２０は、ハードウェアの獲得要求を調停して、調停結果に応じてハードウェアへの処理要求を実現するための制御を行う。具体的に言うと、ＳＲＭ１２０のプロセスは、獲得要求に係るハードウェアが利用可能か否か（他の獲得要求と競合しないか否か）を判定して、利用可能である場合にはその旨をコントロールサービスであるＳＣＳ１２１に通知する。さらには、獲得要求に係るハードウェアの利用スケジュールを作成して、作成結果に応じてハードウェアへの処理要求を実現するための制御を行う。
【００３０】
ＯＳ１１０は、上記の調停結果に応じてハードウェアを管理する。ＯＳ１１０は、図２に示すようにファイルシステム１１１、タイマ処理モジュール１１２、システムコールモジュール１１３及びドライバ１１４を含む。ファイルシステム１１１は、複合機１においてファイルを管理するための機能を提供する。タイマ処理モジュール１１２は、登録されたタイマ処理を実行するモジュールである。システムコールモジュール１１３は、ＯＳ１１０において、省電力制御を行うモジュールである。
【００３１】
ドライバ１１４は、ハードウェアを駆動するためのソフトウェア・モジュールである。本実施形態に係るドライバ１１４は、夫々のハードウェアに対応するレジスタ値等のコンテキストをＲＡＭ１２に格納するためのフック関数を含む。図２においては、図示の容易化のためにドライバ１１４を一のブロックで示しているが、複数のハードウェア・デバイス夫々に対応してドライバが設けられる。
【００３２】
このような構成において、本実施形態に係る要旨は、メインシステム１０のＲＡＭ１２への通電を継続したままＣＰＵ１１への通電を停止した省電力状態（以降、「サスペンドモード」とする）を実現することにある。以下、本実施形態の要旨に係る動作について説明する。
【００３３】
図３は、本実施形態に係る複合機１において、通常の状態からサスペンドモードに遷移する際の動作を示すシーケンス図である。図３に示すように、サスペンドモードへの遷移に際しては、先ずＳＣＳ１２１がアプリケーションの要求やユーザの操作に基づく要求に応じてＯＳ１１０のシステムコールモジュール１１３を呼び出す（Ｓ３０１）。
【００３４】
ＯＳ１１０においては、システムコールモジュール１１３が、起動するとまずドライバ１１４を介してＲＴＣ１４から現在時刻を取得する（Ｓ３０２）。即ち、Ｓ３０２においては、システムコールモジュール１１３が、サスペンドモードに遷移する前の現在時刻を取得して記憶する遷移前時刻処理部として機能する。尚、取得された時刻の情報は、ＲＡＭ１２やＮＶＲＡＭ１５に保存される。時刻を取得したシステムコールモジュール１１３は、ドライバ１１４に組み込まれた所定のフック関数を起動する（Ｓ３０３）。ドライバ１１４においては、Ｓ３０３において起動されたフック関数の処理により、レジスタ値等のコンテキスト（以降、「ドライバコンテキスト」とする）がＲＡＭ１２に保存される（Ｓ３０４）。
【００３５】
上記ドライバコンテキストは、ドライバ１１４によって制御される各種のデバイスの動作状態を示すデバイス動作状態情報である。即ち、Ｓ３０４においては、上記フック関数によって実現されるドライバ１１４のモジュールが、デバイス動作状態情報処理部として機能する。
【００３６】
Ｓ３０４において保存されるコンテキストとは、夫々のドライバが動作するために参照する引数であり、代表的なものは上述したようなレジスタ値である。尚、図２において説明したように、ドライバ１１４は複数のハードウェア・デバイス夫々に対応して設けられるため、Ｓ３０４の処理は、夫々のドライバ毎に実行される。
【００３７】
ドライバ１１４は、フック関数によるコンテキストの格納が完了すると、フック関数の完了をＯＳ１１０のシステムコールモジュール１１３に通知する（Ｓ３０５）。フック関数完了の通知を受けたシステムコールモジュール１１３は、キャッシュフラッシュを行い（Ｓ３０６）、ＣＰＵ１１の動作に係るコンテキスト（以降、「ＣＰＵコンテキスト」とする）をＲＡＭ１２に保存する（Ｓ３０７）。
【００３８】
ＣＰＵコンテキストとしては、ＣＰＵ１１のレジスタ値や、ＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ）等、ＣＰＵ１１の動作状態を示す動作状態情報である。即ち、Ｓ３０７において、システムコールモジュール１１３が動作状態情報をＲＡＭ１２に格納する動作状態情報処理部として機能する。
【００３９】
更に、ＣＰＵコンテキストには、ＣＰＵコンテキストを保存するための処理、即ち関数からの戻りアドレスが含まれる。この戻りアドレスとは、システムコールモジュール１１３に含まれる処理のうち、ＣＰＵコンテキストを保存するための処理を完了した後に実行する処理を記述するためのプログラムがＲＡＭ１２状において格納されているアドレスである。この戻りアドレスは、Ｓ３０７の処理を実行するための関数が呼び出された際に、ＣＰＵ１１のレジスタに保存され、レジスタ値としてＣＰＵコンテキストに含まれる。
【００４０】
システムコールモジュール１１３は、Ｓ３０７の処理から連続する処理として、Ｓ３０７においてＲＡＭ１２に格納されたＣＰＵコンテキストの、ＲＡＭ１２における格納場所を示すアドレスと、ＣＰＵコンテキストを復帰させる処理へのアドレスをＮＶＲＡＭ１５に格納する（Ｓ３０８）。即ち、Ｓ３０８において、システムコールモジュール１１３が、動作状態情報の格納先を示す格納先情報をＮＶＲＡＭ１５に格納する格納先情報処理部として機能する。
【００４１】
更に、システムコールモジュール１１３は、Ｓ３０７から連続する処理として、Ｓ３０８を完了した後、Ｉ／Ｆ１６を介して、サブシステム２０にＣＰＵ１１の電源オフの要求を行う（Ｓ３０９）。即ち、Ｓ３０９において、システムコールモジュール１１３が、演算装置であるＣＰＵ１１への通電を停止させる通電停止制御部として機能する。これにより、サブシステム２０において、ＣＰＵ２１がＲＡＭ２２にロードされたプログラムに従って演算を行うことによりエンジン２５を制御し、メインシステム１０のＣＰＵ１１への通電が停止されてサスペンドモードに遷移する。
【００４２】
上述したようにＳ３０７からＳ３０９の処理は、連続する処理として、例えば一の関数や、処理上で関連付けられている関数によって実行され、装置はサスペンドモードに遷移する。従って、上述した戻りアドレスは、サスペンドモードから復帰した後に参照されるアドレスとなる。
【００４３】
このような処理によりサスペンドモードに遷移した状態においても、ＲＡＭ１２への通電は継続されているため、ＲＡＭ１２に記憶された情報は維持されている。また、ＮＶＲＡＭ１５は不揮発性の記憶媒体であるため、記憶された情報は当然維持されている。サスペンドモードにおいてＲＡＭ１２及びＮＶＲＡＭ１５に記憶されている情報について、図４（ａ）、（ｂ）に示す。
【００４４】
図４（ａ）は、サスペンドモードにおいてＲＡＭ１２に格納されている情報を示す図である。図４（ａ）に示すように、サスペンドモードにおけるＲＡＭ１２には、ＣＰＵ１１を動作させるためにロードされた各種のプログラムと、Ｓ３０４において格納されたドライバコンテキストと、Ｓ３０７において格納されたＣＰＵコンテキストとが格納されている。
【００４５】
図４（ｂ）は、サスペンドモードにおいてＮＶＲＡＭ１５に格納されている情報を示す図である。図４（ｂ）に示すように、サスペンドモードにおけるＮＶＲＡＭ１５には、Ｓ３０８において格納されたＣＰＵコンテキストの格納アドレスと、ＣＰＵコンテキストの復帰処理のアドレスとが格納されている。
【００４６】
図４（ｂ）に示すＣＰＵコンテキスト格納アドレスとは、図４（ａ）に示すＣＰＵコンテキストのＲＡＭ１２におけるアドレスである。また、ＣＰＵコンテキスト復帰処理アドレスとは、ＲＡＭ１２に格納された各種プログラムのうち、ＯＳのシステムコールモジュール１１３におけるサスペンドモードからの復帰処理が記述されたプログラムコードが格納されているアドレスである。
【００４７】
次に、サスペンドモードからの復帰処理について、図５を参照して説明する。図５は、サブシステム２０によって電源投入処理が実行された後、ＣＰＵ１１による演算処理がＯＳ１１０のシステムコールモジュール１１３に移るまでの動作を示すシーケンス図である。
【００４８】
図５に示すように、サブシステム２０は、サスペンドモードからの復帰要因を検知すると（Ｓ５０１）、Ｉ／Ｆ２４の所定のポートに対してサスペンドモードからの復帰を示す値（以降、「復帰処理フラグ」とする）を書き込む。この復帰処理フラグが、復帰要因の検知によって設定される復帰処理識別情報として用いられる。Ｓ５０１においては、副演算装置であるＣＰＵ２１が所定のプログラムに従って動作することにより構成されるソフトウェア・モジュールが、復帰要因検知部として機能する。
【００４９】
これにより、Ｉ／Ｆ２４を介してＩ／Ｆ１６のポートにも復帰処理フラグが設定される（Ｓ５０２）。復帰処理フラグを設定した後、サブシステム２０は、エンジン２５を制御してＣＰＵ１１への電源供給を再開する（Ｓ５０３）。即ち、Ｓ５０２、Ｓ５０３においては、副演算装置であるＣＰＵ２１が所定のプログラムに従って動作することにより構成されるソフトウェア・モジュールが、電源投入処理部として機能する。
【００５０】
サブシステム２０の機能によって電源が投入されたＣＰＵ１１は、まずブートベクタからブートローダを読み出してＲＡＭ１２にロードする（Ｓ５０４）．これにより、ブートローダが起動する（Ｓ５０５）。ブートローダが起動すると、ブートローダとして動作するＣＰＵ１１は、まずＩ／Ｆ１６における復帰処理フラグのポートを確認し（Ｓ５０６）、サスペンドモードからの復帰処理であることを認識する。即ち、Ｓ５０６においては、ブートローダとして動作するＣＰＵ１１が、復帰処理識別部として機能する。
【００５１】
サスペンドモードからの復帰処理であることを認識したＣＰＵ１１は、動作するための最低限の初期化処理を実行し（Ｓ５０７）、ＮＶＲＡＭ１５に格納されている情報のうち、図４（ｂ）において説明した“ＣＰＵコンテキスト復帰処理アドレス”を確認する（Ｓ５０８）。そして、確認したアドレスにジャンプすることにより（Ｓ５０９）、システムコールモジュール１１３による動作に移る。
【００５２】
図６は、サスペンドモードからの復帰処理におけるシステムコールモジュール１１３の処理開始後の動作を示すシーケンス図である。図６に示すように、ＯＳ１１０のシステムコールモジュール１１３は、ブートローダからのアドレスジャンプにより動作を開始すると、ＮＶＲＡＭ１５に格納されている情報のうち、図４（ｂ）において説明した“ＣＰＵコンテキスト格納アドレス”を確認し（Ｓ６０１）、確認したアドレスに基づいてＲＡＭ１２にアクセスすることによりＣＰＵコンテキストを復元する（Ｓ６０２）。
【００５３】
即ち、Ｓ６０２においては、システムコールモジュール１１３が、動作状態復元部として機能する。また、図５のＳ５０８において参照された“ＣＰＵコンテキスト復帰処理アドレス”が、ＣＰＵ１１を動作状態復元部として機能させるための、システムコールモジュール１１３のプログラムコードが格納された記憶領域を示す動作状態復元部指定情報として用いられる。
【００５４】
ここで、図３のＳ３０７におけるＣＰＵコンテキスト保存の処理及び図６のＳ６０２におけるＣＰＵコンテキスト復元の処理の概念について図７に示す。図７は、ＣＰＵコンテキストの保存及び復元についての動作を示すフローチャートである。図７に示すように、Ｓ３０７〜Ｓ３０９の処理を実行するための関数が呼び出されると（Ｓ７０１）、ＣＰＵ１１は、戻りアドレスをレジスタに保存する（Ｓ７０２）。
【００５５】
その後、Ｓ３０７の処理によりＣＰＵコンテキストが保存され（Ｓ７０３）、Ｓ３０９の処理によりサスペンドモードへの遷移が完了する（Ｓ７０４）。復帰要因によりサスペンドモードから復帰して（Ｓ７０５）、図５のＳ５０１〜Ｓ５０９の処理が実行された後、図６のＳ６０１、Ｓ６０２の処理によりＣＰＵコンテキストが復元される（Ｓ７０６）。これにより、ＣＰＵ１１の制御状態が、サスペンドモードに遷移する以前の制御状態に復元される。
【００５６】
Ｓ７０６の処理によって復元されたＣＰＵコンテキストにはレジスタ値も含まれ、そのレジスタ値には上述した戻りアドレスも含まれる。これにより、ＣＰＵ１１は、レジスタ値によって以降の処理の戻りアドレスを確認する（Ｓ７０７）
【００５７】
図７に示したように、ＣＰＵコンテキストの復元によって戻りアドレスが確認されると、ＣＰＵ１１は、戻りアドレス以降に格納されているプログラムコードに従って処理を実行する。この戻りアドレスは、システムコールモジュール１１３における関数からの戻りアドレスであり、以降もＯＳ１１０のシステムコールモジュール１１３の処理が実行される。
【００５８】
戻りアドレス以降の処理として、ＯＳ１１０のシステムコールモジュール１１３はドライバ１１４に組み込まれた所定のフック関数を起動する（Ｓ６０３）。ドライバ１１４においては、Ｓ６０３において起動されたフック関数の処理により、レジスタ値等のドライバコンテキストをＲＡＭ１２から読み出して復元する（Ｓ６０４）。
【００５９】
これにより、ドライバを介して制御される各ハードウェアの制御状態が、サスペンドモードに遷移する以前の状態に復元される。即ち、Ｓ６０４においては、上記フック関数によって実現されるドライバ１１４のモジュール、即ち、フック関数に従って処理を行うＣＰＵ１１０が、デバイス動作状態復元部として機能する。換言すると、フックス関数は、演算装置であるＣＰＵ１１０を、デバイス動作状態復元部として機能させるためのデバイス動作状態復元処理情報である。また、上記戻りアドレスが、ＣＰＵ１１を上記デバイス動作状態復元部として機能させるためのプログラムコードの記憶領域を示すデバイス動作状態復元部指定情報として用いられる。
【００６０】
ドライバ１１４は、フック関数によるコンテキストの復元が完了すると、フック関数の完了をＯＳ１１０のシステムコールモジュール１１３に通知する（Ｓ６０５）。フック関数完了の通知を受けたシステムコールモジュール１１３は、ドライバ１１４を介してＲＴＣ１４から現在時刻を取得する（Ｓ６０６）。
【００６１】
Ｓ６０６において現在時刻を取得したシステムコールモジュール１１３は、図３のＳ３０２において格納した時刻から現在時刻を差し引いて、サスペンドモード中に経過した時間（以降、「ＳＴＲ移行中期間とする」）を算出すると、経過時間をＯＳ１１０のモノトニックタイマ（単純増分タイマ）に加算し、タイマ処理モジュール１１２を起動する（Ｓ６０７）。これにより、サスペンドモード中にタイムアウトとなってしまうタイマ処理を起動させることができる。即ち、Ｓ６０６、Ｓ６０７においては、システムコールモジュール１１３が、復帰後時刻処理部として機能する。
【００６２】
ここで、図８を参照して、Ｓ６０７の処理の詳細について説明する。図８に示すように、システムコールモジュール１１３は、上述したＳＴＲ移行中期間を算出すると（Ｓ８０１）、タイマ処理モジュール１１２に設定されている全てのタイマ処理について判断が完了したか否かを判断する（Ｓ８０２）。
【００６３】
Ｓ８０２の判断の結果、完了していなければ（Ｓ８０２／ＮＯ）、システムコールモジュール１１３は、タイマ処理モジュール１１２からタイマ処理を１つ取得し（Ｓ８０３）、タイマのカウント値にＳＴＲ以降中期間を加算する（Ｓ８０４）。Ｓ８０４の結果、タイマの発火時間が経過した場合（Ｓ８０５／ＹＥＳ）、システムコールモジュール１１３は、タイマ処理モジュール１１２にタイマ処理を実行させて（Ｓ８０６）、Ｓ８０２からの処理を繰り返す。
【００６４】
他方、発火時間が経過していなければ（Ｓ８０５／ＮＯ）、システムコールモジュール１１３は、Ｓ８０２からの処理を繰り返す。このような処理を繰り返すことにより、全タイマ処理についてＳ８０３以降の処理が完了したら（Ｓ８０２／ＹＥＳ）、処理を終了する。このような処理により、サスペンドモード中に発火時間が経過してしまったタイマ処理が漏れることなく実行される。
【００６５】
Ｓ６０８までの処理が完了すると、システムコールモジュール１１３は、ＳＣＳ１２１に対してシステムコールの完了を通知する（Ｓ６０８）。これにより、図３のＳ３０１において開始されたシステムコールの処理が完了し、複合機１は、サスペンドモードへの遷移を開始する前の状態に完全に復帰する。
【００６６】
本実施形態においては、装置全体の動作を制御するメインシステム１０側のＣＰＵ１１への通電が停止されている間、各機能の動作を制御するサブシステム２０側のＣＰＵ２１が復帰要因を検知して、サスペンドモードからの復帰動作が開始される。しかしながら、ＣＰＵ１１は通電が開始されると、ブートローダに従って予め定められた処理が実行されるため、サスペンドモードへの遷移前と遷移後とで処理状態の連続性を保つことが難しい。
【００６７】
これに対して、本実施形態に係るサブシステム２０は、ＣＰＵ１１への通電を再開する際に、Ｉ／Ｆ２４の所定のポートにサスペンドモードからの復帰処理であることを示すフラグを設定する。そして、ＣＰＵ１１のブートローダによる処理として、サブシステム２０との間で情報をやり取りするＩ／Ｆ１６のポートを確認する処理が含まれる。このため、ＣＰＵ１１は、通電が開始されてブートローダによる処理を実行する際、サスペンドモードからの復帰処理であることを認識することができ、それに応じた処理を実行することが可能となる。
【００６８】
また、本実施形態に係る複合機１のシステムコールモジュール１１３の機能により、サスペンドモードへの遷移前には、ＣＰＵコンテキストがＲＡＭ１２に保存されると共に、ＲＡＭ１２におけるＣＰＵコンテキストの保存アドレス及びＣＰＵコンテキストの復元処理が記述されたプログラムコードのアドレスがＮＶＲＡＭ１５に保存される。
【００６９】
そして、サスペンドモードからの復帰処理であることが認識された以降のブートローダの処理において、上述した復元処理が記述されたプログラムコードのアドレスへのジャンプが行われ、その結果ＣＰＵコンテキストの復帰処理が実行される。このような処理により、サスペンドモードへの遷移前と遷移後とで処理状態の連続性を保つことが可能となる。
【００７０】
尚、ＣＰＵコンテキストにはＴＬＢが含まれるため、ＣＰＵコンテキストが復元されるまでは、ＣＰＵ１１はサスペンドモードへの遷移前と同一の条件でＲＡＭ１２にアクセスすることができない。本実施形態においては、ＣＰＵコンテキストの格納アドレスをＮＶＲＡＭ１５に格納することにより、上記課題を解決している。
【００７１】
更に、上述したＣＰＵコンテキストのＲＡＭ１２への保存処理が開始される際、この処理を実現するための関数からの戻りアドレスがレジスタ値に格納され、ＣＰＵコンテキストとして格納される。そのため、ＣＰＵコンテキストが復元されると、この戻りアドレス以降のプログラムコードに従った処理が実行される。この処理により、より正確にサスペンドモードへの遷移前と遷移後とで処理状態の連続性を保つことが可能となる。
【００７２】
以上説明したように、本実施形態に係る省電力制御を用いることにより、主記憶装置であるＲＡＭ１２への通電を維持しつつ演算装置であるＣＰＵ１１への通電を停止する省電力制御を、特定のアーキテクチャに限らず実現することが可能となる
【００７３】
図１に示すようなメインシステム１０とサブシステム２０とが分かれているような構成は、スキャナ、プリンタ、複写機等の複数の画像処理機能を有する複合機であれば、一般的な構成である。従って、本実施形態に係る省電力制御方法を複合機に適用することは、大きな設計変更を伴うことなく可能であり、容易に実現することができる。この他、図１に示すようなメインシステム１０とサブシステム２０を有する情報処理装置であれば、複合機に限らず本実施形態を適用することが可能であり、上述したような効果を得ることが可能である。
【００７４】
実施の形態２．
実施の形態１においては、図３のＳ３０３において夫々のハードウェアに対応したドライバ１１４に組み込まれているフック関数が起動されてドライバコンテキストが保存され、図６のＳ６０２においてＣＰＵコンテキストが復元され、戻りアドレスに処理が移った後に、フック関数が起動されてドライバコンテキストが復元される態様について説明した。
【００７５】
ここで、実施の形態１における戻りアドレス以降の処理であるフック関数によるドライバコンテキストの復元に際しては、復元の順序を考慮する必要がある。例えば、ＰＣＩｅインタフェースに接続されているデバイスのドライバコンテキストの復元に際しては、ＰＣＩｅインタフェースが正しい設定内容で動作していることが前提となるため、ＰＣＩｅインタフェースの状態復元の後に行う必要がある。仮に逆の順序で復元を実行した場合、バスロックが発生して装置が不正に停止してしまう可能性もある。本実施形態においては、このような弊害を回避するため、フック関数の起動順序を調整する態様について説明する。
【００７６】
図９は、フック関数の動作順序を示すキューの概念を示す図である。図９に示すようなキューのエントリの情報は、システムコールモジュール１１３の制御に従ってＲＡＭ１２において確保された記憶領域に格納される。ＣＰＵ１１０は、図６のＳ６０３において、図９に示すようなキューのエントリの順序に従ってフック関数を動作させる。
【００７７】
図９に示すようにフック関数のキューのエントリは、“関数のアドレス”、“引数のアドレス”、“識別子”、“次のフック関数のアドレス”及び“前のフック関数のアドレス”の情報を含む。“関数のアドレス”は、そのエントリに係るフック関数のＲＡＭ１２上のアドレスを示す。“引数のアドレス”は、そのフック関数に渡すべき引数が格納されているＲＡＭ１２状のアドレスを示す。
【００７８】
“識別子”は、そのエントリに係るフック関数がどのデバイスのドライバに含まれるフック関数であるかを示す情報である。本実施形態においては、この“識別子”に基づいてフック関数の起動順が判断される。“次のフック関数”は、そのエントリに係るフック関数の直後に起動されるべきとして配置されているフック関数のアドレスを示す。“前のフック関数”は、そのエントリに係るフック関数の直前に起動されるべきとして配置されているフック関数のアドレスを示す。
【００７９】
ここで、本実施形態に係るＣＰＵ１１０は、システムコールモジュール１１３に従って図３のＳ３０３においてフック関数を起動する際、図９に示すキューのエントリ及びデバイスの起動優先度を示す情報に基づいて、キューの順序、即ちフック関数の起動順序を変更する。図１０は、本実施形態に係るフック関数の起動順序の変更動作を示すフローチャートである。
【００８０】
図１０に示すように、ＣＰＵ１１０は、判断対象とするキューのエントリを現在のキューの順序に従って選択すると共に（Ｓ１００１）、そのエントリとの間で順番を比較する比較対象のキューのエントリを同じく順序に従って選択する（Ｓ１００２）。２つのエントリを選択すると、ＣＰＵ１０は、夫々の“識別子”を参照し、夫々の“識別子”が同一であれば（Ｓ１００３／ＮＯ）、それは同一のフック関数であるため、起動順を判断する必要がなく、次の処理に進む。
【００８１】
他方、Ｓ１００３の判断において“識別子”が異なる場合（Ｓ１００３／ＹＥＳ）、次にＣＰＵ１１０は、両者の順序の入れ替えが必要であるか否かを判断する（Ｓ１００４）。Ｓ１００４において、ＣＰＵ１１０は、図１１に示すように、夫々のフック関数の元であるドライバ１１４が対応するデバイスの識別子と、その起動優先順位とが関連付けられた情報（以降、「起動優先度テーブル」とする）を参照し、判断対象及び比較対象のエントリに係る“識別子”に基づいて両者の順序の入れ替え要否を判断する。図１１に示す起動優先度テーブルは、例えば、システムコールモジュール１１３を構成する情報の一部として含まれている。この他、システムコールモジュール１１３が参照可能な情報として図示しないＨＤＤ等の補助記憶装置に格納されていても良い。
【００８２】
Ｓ１００４において、入れ替え不要であると判断した場合（Ｓ１００４／ＮＯ）、ＣＰＵ１１０は、Ｓ１００３において識別子が同一であった場合と同様に、次の処理に進む。他方、入れ替えが必要であると判断した場合（Ｓ１００４／ＹＥＳ）、ＣＰＵ１１０は、比較対象として選択しているエントリをキューの並び順の中から取り出し（Ｓ１００５）、判断対象として選択しているエントリの直前の順序に挿入する（Ｓ１００６）ことにより、キューの順序を入れ替える。Ｓ１００５及びＳ１００６の処理の詳細は後述する。
【００８３】
Ｓ１００６の処理を完了すると、ＣＰＵ１１０は、判断対象として選択しているエントリの順番をリセットし、再度キューの先頭のエントリを判断対象としてＳ１００１からの処理を繰り返す（Ｓ１００７）。
【００８４】
Ｓ１００３において識別子が同一であると判断した場合や、Ｓ１００４において入れ替えが不要であると判断した場合、ＣＰＵ１１０は、選択中の比較対象のエントリが、キューの最後尾であるか否かを判断し（Ｓ１００８）、最後尾でなければ（Ｓ１００８／ＮＯ）、Ｓ１００２に戻って次のエントリを比較対象として選択して処理を繰り返す。
【００８５】
選択中の比較対象のエントリがキューの最後尾であれば（Ｓ１００８／ＹＥＳ）、ＣＰＵ１１０は、選択中の判断対象のエントリがキューの最後尾であるか否かを判断し（Ｓ１００９）、最後尾でなければ、（Ｓ１００９／ＮＯ）、Ｓ１００１に戻って次のエントリを判断対象として選択して処理を繰り返す。そして、選択中の判断対象のエントリがキューの最後尾であれば（Ｓ１００９／ＹＥＳ）、フック関数のキューのエントリは、図１１に示す起動優先度テーブルに従って並べられているため、処理を終了する。
【００８６】
次に、図１０のＳ１００５における処理の詳細について、図１２を参照して説明する。尚、図１２においては、図９に示す３つのエントリのうち、一番左側、即ち最も先頭のエントリが判断対象であり、真ん中、即ち２番目のエントリが比較対象である場合を例とする。
【００８７】
図１２に示すように、ＣＰＵ１０は、比較対象として選択中のエントリに含まれる“前のフック関数”が“０”、即ち、比較対象として選択中のエントリがキューの先頭であるか否かを判断する（Ｓ１２０１）。その結果、“０”でない、即ち先頭でない場合（Ｓ１２０１／ＹＥＳ）、比較対象のエントリにおける“前のフック関数”によって指されているエントリ、即ち、比較対象の直前に配置されているエントリに含まれる“次のフック関数”の値を、比較対象のエントリに含まれる“次のフック関数”の値で上書きする（Ｓ１２０２）。
【００８８】
比較対象のエントリにおける“前のフック関数”が“０”であった場合、またはＳ１２０２の処理を完了すると、ＣＰＵ１１０は、比較対象として選択中のエントリに含まれる“次のフック関数”が“０”、即ち、比較対象として選択中のエントリがキューの最後尾であるか否かを判断する（Ｓ１２０３）。その結果、“０”でない、即ち最後尾でない場合（Ｓ１２０３／ＹＥＳ）、比較対象のエントリにおける“次のフック関数”によって指されているエントリ、即ち、比較対象の直後に配置されているエントリに含まれる“前のフック関数”の値を、比較対象のエントリに含まれる“前のフック関数”の値で上書きする（Ｓ１２０４）。
【００８９】
図１２に示すフローチャートの処理により、図９に示すような状態であったキューは、図１３に示す状態に変更される。図１３においては、判断対象のエントリを一点鎖線で示し、比較対象のエントリを破線で示している。図１３に示すように、図１２に示す処理によって、比較対象の前後に配置されていたエントリが接続され、比較対象のエントリが取り出された状態となる。比較対象のエントリにおける“次のフック関数”が“０”であった場合、またはＳ１２０４の処理を完了すると、ＣＰＵ１１０は処理を終了する。
【００９０】
次に、図１０のＳ１００６における処理の詳細について、図１４を参照して説明する。尚、図１４においても、図１２と同様に、図９に示す３つのエントリのうち、一番左側、即ち最も先頭のエントリが判断対象であり、真ん中、即ち２番目のエントリが比較対象である場合を例とし、図１３の状態まで処理が完了したことを前提として説明する。
【００９１】
図１４に示すように、ＣＰＵ１１０は、比較対象のエントリにおける“次のフック関数”を、判断対象として選択中のエントリを示すように、判断対象のエントリに係るフック関数のアドレスで上書きする（Ｓ１４０１）。次に、ＣＰＵ１１０は、比較対象のエントリにおける“前のフック関数”を、判断対象として選択中のエントリにおける“前のフック関数”の値で上書きする（Ｓ１４０２）。更に、ＣＰＵ１１０は、判断対象判断対象のエントリにおける“前のフック関数”を、比較対象のエントリに係るフック関数のアドレスで上書きする（Ｓ１４０３）。
【００９２】
そして、ＣＰＵ１１０は、Ｓ１４０２において上書きされた比較対象のエントリにおける“前のフック関数”が“０”であるか否か、即ち、比較対象のエントリが挿入された位置がキューの先頭であるか否かを判断し（Ｓ１４０４）、先頭であれば（Ｓ１４０４／ＮＯ）、比較対象のエントリが最初に処理されるようにキューの先頭アドレスを設定する（Ｓ１４０６）。
【００９３】
他方、Ｓ１４０４の判断において、比較対象のエントリが挿入された位置がキューの先頭ではない場合（Ｓ１４０４／ＹＥＳ）、ＣＰＵ１１０は、Ｓ１４０２において上書きされた比較対象のエントリにおける“前のフック関数”が示すエントリの“次のフック関数”を、比較対象のエントリに係るフック関数のアドレスで上書きする（Ｓ１４０５）。これにより、
【００９４】
図１３に示す状態を例とする場合、Ｓ１４０４の判断においては、比較対象のエントリに係る“前のフック関数”は“０”であると判断され、Ｓ１４０６の処理に進む。その結果、Ｓ１４０６の処理により、図１３に示すような状態であったキューは、図１５に示す状態に変更される。このような処理を繰り返すことにより、本実施形態に係るフック関数の起動順の変更が完了する。
【００９５】
以上説明したように、本実施形態に係る省電力制御においては、省電力状態からの復帰に際して、システムコールモジュール１１３として機能するＣＰＵ１１０が、図１１に示すようなデバイスの起動優先度を示す情報に基づき、接続されている複数のデバイスが不具合なく復帰されるように、ドライバコンテキストの読出しに係るフック関数の処理順序、即ち、ドライバコンテキストの復元に際して夫々のフック関数へアクセスする順番を変更する。これにより、デバイスの起動順によって生じる不具合を回避することが可能となる。
【００９６】
尚、本実施形態においては、図３のＳ３０３の処理の前、即ち、省電力状態に遷移する前に、フック関数のキューのエントリを並べ替える場合を例として説明した。省電力状態に遷移する前であれば、情報処理機能を通常通り用いることが可能であり、キューのエントリの並べ替えも容易に実現可能である。
【００９７】
他方、キューのエントリの並べ替えが意義を発揮するのは、図６のＳ６０３、即ち、省電力状態からの復帰時である。従って、Ｓ６０３の処理の前にキューのエントリを並べ替えることが可能であれば、そのタイミング、即ち、Ｓ６０２においてＣＰＵコンテキストが復元された後にフック関数のキューのエントリを並べ替えても良い。
【符号の説明】
【００９８】
１  複合機
１０  メインシステム
１１  ＣＰＵ
１２  ＲＡＭ
１３  ＲＯＭ
１４  ＲＴＣ
１５  ＮＶＲＡＭ
１６  Ｉ／Ｆ
１７  バス
２０  サブシステム
２１  ＣＰＵ
２２  ＲＡＭ
２３  ＲＯＭ
２４  Ｉ／Ｆ
２５  エンジン
１００  ソフトウェア
１１０  ＯＳ
１１１  ファイルシステム
１１２  タイマ処理モジュール
１１３  システムコールモジュール
１１４  ドライバ
１２０  ＳＲＭ
１２１  ＳＣＳ
１２２  ＡＰＩ
１３１  コピーアプリ
１３２  プリンタアプリ
１３３  スキャナアプリ
１３４  ファクシミリアプリ
１３５  ネットワークアプリ
【先行技術文献】
【特許文献】
【００９９】
【特許文献１】特表２００３−５１９８３０号公報
【特許文献２】特開２００３−２４８５８０号公報
【図１】
0006007642.tif 000002
【図２】
0006007642.tif 000003
【図３】
0006007642.tif 000004
【図４】
0006007642.tif 000005
【図５】
0006007642.tif 000006
【図６】
0006007642.tif 000007
【図７】
0006007642.tif 000008
【図８】
0006007642.tif 000009
【図９】
0006007642.tif 000010
【図１０】
0006007642.tif 000011
【図１１】
0006007642.tif 000012
【図１２】
0006007642.tif 000013
【図１３】
0006007642.tif 000014
【図１４】
0006007642.tif 000015
【図１５】
0006007642.tif 000016