(57)【要約】【課題】オペレーティングシステムの起動後に復帰すべきプログラム位置を設定して、起動時にはそのプログラム位置に速やかに復帰させる。【解決手段】実行状態保持部１２は、コンピュータがプログラムを実行する際の実行状態を保持する。復帰点設定部１７がスナップショットスイッチの押下等によって復帰点を設定すると、実行状態退避部１３は実行状態保持部１２に保持されている実行状態を退避する。起動モード設定部１６に高速起動モードが設定された状態で起動部１５において起動が行われると、転送制御部１１は実行状態退避部１３に退避されている実行状態を実行状態保持部１２に転送させる。また、復帰点の設定または高速起動の際には、コールバック関数テーブルに登録されているコールバック関数が実行される。【選択図】図１
2007249418.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータとそのコンピュータがプログラムを実行する際の実行状態を保持する実行状態保持手段とを備える情報処理装置において、
当該情報処理装置の起動の後に復帰すべきプログラム位置を前記起動の前に設定する復帰点設定手段と、
前記復帰点設定手段によって設定された前記復帰すべきプログラム位置の実行の際に前記実行状態保持手段に保持されている実行状態を前記起動の前に退避する実行状態退避手段と、
前記起動が行われると前記実行状態退避手段に退避されている実行状態を前記実行状態保持手段に転送する転送手段と
を具備することを特徴とする情報処理装置。
【請求項２】
前記実行状態は、前記情報処理装置におけるレジスタの内容およびオペレーティングシステムにより管理されるメモリの内容を含む
ことを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記復帰点設定手段は、所定の操作が行われた際のプログラム位置を前記復帰すべきプログラム位置として設定することを特徴とする請求項１記載の情報処理装置。
【請求項４】
前記実行状態退避手段は、不揮発性メモリを備えることを特徴とする請求項１記載の情報処理装置。
【請求項５】
前記復帰点設定手段による設定時または当該情報処理装置の起動時に実行すべきコールバック関数を登録するコールバック関数登録手段をさらに具備することを特徴とする請求項１記載の情報処理装置。
【請求項６】
当該情報処理装置の起動時の起動モードとしてＮ個（Ｎは２以上の整数）のモードのうちの１個のモードを設定する起動モード設定手段をさらに具備し、
前記実行状態退避手段は、前記実行状態保持手段に保持されている実行状態をＮ個退避し、
前記転送手段は、前記実行状態退避手段に退避されているＮ個の実行状態から前記起動モードに応じて１個の実行状態を前記実行状態保持手段に転送する
ことを特徴とする請求項１記載の情報処理装置。
【請求項７】
当該情報処理装置の起動時の起動モードとしてＮ個（Ｎは２以上の整数）のモードのうちの１個のモードを設定する起動モード設定手段と、
予め設定されたＮ個の処理の中から前記起動モードに応じて１個の処理を選択して実行する起動処理手段と
をさらに具備することを特徴とする請求項１記載の情報処理装置。
【請求項８】
コンピュータとそのコンピュータがプログラムを実行する際の実行状態を保持する実行状態保持手段とを備える情報処理装置において、
当該情報処理装置の起動の後に復帰すべきプログラム位置を前記起動の前に設定する復帰点設定手段と、
前記復帰点設定手段によって設定された前記復帰すべきプログラム位置の実行の際に前記実行状態保持手段に保持されている実行状態を前記起動の前に退避する実行状態退避手段と
を具備することを特徴とする情報処理装置。
【請求項９】
コンピュータとそのコンピュータがプログラムを実行する際の実行状態を保持する実行状態保持手段とを備える情報処理装置において、
当該情報処理装置の起動の後に復帰すべきプログラム位置を前記起動の前に設定する手順と、
前記復帰すべきプログラム位置の実行の際に前記実行状態保持手段に保持されている実行状態を前記起動の前に退避する手順と、
前記起動が行われると前記退避されている実行状態を前記実行状態保持手段に転送する手順と
を具備することを特徴とする情報処理装置の起動方法。
【請求項１０】
コンピュータとそのコンピュータがプログラムを実行する際の実行状態を保持する実行状態保持手段とを備える情報処理装置において、
当該情報処理装置の起動の後に復帰すべきプログラム位置を前記起動の前に設定する手順と、
前記復帰すべきプログラム位置の実行の際に前記実行状態保持手段に保持されている実行状態を前記起動の前に退避する手順と、
前記起動が行われると前記退避されている実行状態を前記実行状態保持手段に転送する手順と
をコンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置に関し、特に起動を高速に行う情報処理装置およびその起動方法ならびに当該方法をコンピュータに実行させるプログラムに関する。
【背景技術】
【０００２】
オペレーティングシステムは、ハードウェアを抽象化してアプリケーションプログラムの動作環境を提供する基本ソフトウェアである。情報処理装置の電源スイッチがオンにされると、ブートローダの働きによってオペレーティングシステムのカーネルがローディングされ、オペレーティングシステムが起動する。近年のオペレーティングシステムの高機能化により、このオペレーティングシステムの起動には例えば数十秒程度の時間を要するようになっている。
【０００３】
オペレーティングシステムを高速に起動させるために、従来、様々な手法が試みられている。例えば、電源プラグが挿入された直後にオペレーティングシステムのカーネルをメモリにローディングして伸張処理を施しておいて、電源スイッチがオンにされた際にオペレーティングシステムのカーネルをメモリ上で速やかに実行させる技術が提案されている（例えば、特許文献１参照。）。
【特許文献１】特開２００５−１４９２２５号公報（図１）
【発明の開示】
【発明が解決しようとする課題】
【０００４】
上述の従来技術では、オペレーティングシステムのローディングに要する時間を短縮できるものの、オペレーティングシステムの実行に要する時間は依然として残ることになる。
【０００５】
また、情報処理装置の電源スイッチがオンにされた後にオペレーティングシステムが起動されて復帰すべきプログラム位置は、情報処理装置の性質によって異なる場合があり、任意のプログラム位置を設定できることが望ましい。
【０００６】
そこで、本発明は、オペレーティングシステムの起動後に復帰すべきプログラム位置を設定して、起動時にはそのプログラム位置に速やかに復帰させることを目的とする。
【課題を解決するための手段】
【０００７】
本発明は、上記課題を解決するためになされたものであり、その第１の側面は、コンピュータとそのコンピュータがプログラムを実行する際の実行状態を保持する実行状態保持手段とを備える情報処理装置において、当該情報処理装置の起動の後に復帰すべきプログラム位置を上記起動の前に設定する復帰点設定手段と、上記復帰点設定手段によって設定された上記復帰すべきプログラム位置の実行の際に上記実行状態保持手段に保持されている実行状態を上記起動の前に退避する実行状態退避手段と、上記起動が行われると上記実行状態退避手段に退避されている実行状態を上記実行状態保持手段に転送する転送手段とを具備することを特徴とする情報処理装置である。これにより、予め設定された復帰すべきプログラム位置の実行状態を、起動時に速やかに復帰させるという作用をもたらす。
【０００８】
なお、上記実行状態は、上記情報処理装置におけるレジスタの内容およびオペレーティングシステムにより管理されるメモリの内容を含み得る。対象となるレジスタはプロセッサによって異なるが、例えば、ＣＰＵの汎用レジスタ、タイマレジスタ、ＵＡＲＴレジスタ、クロックコントローラーレジスタ、割込みコントローラーレジスタ、ＧＰＩＯレジスタおよびＣＰＵ特殊レジスタ値などが挙げられる。
【０００９】
また、この第１の側面において、上記復帰点設定手段は、所定の操作が行われた際のプログラム位置を上記復帰すべきプログラム位置として設定することができる。例えば、スナップショットスイッチのようにユーザが直接指示できるスイッチボタンなどによる復帰点の設定を想定することができる。
【００１０】
また、この第１の側面において、上記実行状態退避手段は不揮発性メモリを備えることができる。これにより、電源がオフになった後でもその退避内容を維持させるという作用をもたらす。
【００１１】
また、この第１の側面において、上記復帰点設定手段による設定時または当該情報処理装置の起動時に実行すべきコールバック関数を登録するコールバック関数登録手段をさらに具備してもよい。これにより、復帰点の設定や起動をトリガとして、
予め登録されたコールバック関数を実行させるという作用をもたらす。
【００１２】
また、この第１の側面において、当該情報処理装置の起動時の起動モードとしてＮ個（Ｎは２以上の整数）のモードのうちの１個のモードを設定する起動モード設定手段をさらに具備し、上記実行状態退避手段が上記実行状態保持手段に保持されている実行状態をＮ個退避し、上記転送手段が上記実行状態退避手段に退避されているＮ個の実行状態から上記起動モードに応じて１個の実行状態を上記実行状態保持手段に転送するようにしてもよい。これにより、予め設定されたＮ個の実行状態の１つを選択して、起動時に速やかに復帰させるという作用をもたらす。
【００１３】
また、この第１の側面において、当該情報処理装置の起動時の起動モードとしてＮ個（Ｎは２以上の整数）のモードのうちの１個のモードを設定する起動モード設定手段と、  予め設定されたＮ個の処理の中から上記起動モードに応じて１個の処理を選択して実行する起動処理手段とをさらに具備してもよい。これにより、予め設定されたＮ個の処理の中から１つを選択して、起動時に実行させるという作用をもたらす。
【００１４】
また、本発明の第２の側面は、コンピュータとそのコンピュータがプログラムを実行する際の実行状態を保持する実行状態保持手段とを備える情報処理装置において、当該情報処理装置の起動の後に復帰すべきプログラム位置を上記起動の前に設定する復帰点設定手段と、上記復帰点設定手段によって設定された上記復帰すべきプログラム位置の実行の際に上記実行状態保持手段に保持されている実行状態を上記起動の前に退避する実行状態退避手段とを具備することを特徴とする情報処理装置である。これにより、起動時に速やかに復帰させるために、復帰すべきプログラム位置の実行状態を予め退避させるという作用をもたらす。
【００１５】
また、本発明の第３の側面は、コンピュータとそのコンピュータがプログラムを実行する際の実行状態を保持する実行状態保持手段とを備える情報処理装置において、当該情報処理装置の起動の後に復帰すべきプログラム位置を上記起動の前に設定する手順と、上記復帰すべきプログラム位置の実行の際に上記実行状態保持手段に保持されている実行状態を上記起動の前に退避する手順と、上記起動が行われると上記退避されている実行状態を上記実行状態保持手段に転送する手順とを具備することを特徴とする情報処理装置の起動方法もしくはこれらの手順をコンピュータに実行させることを特徴とするプログラムである。これにより、予め設定された復帰すべきプログラム位置の実行状態を、起動時に速やかに復帰させるという作用をもたらす。
【発明の効果】
【００１６】
本発明によれば、オペレーティングシステムの起動後に復帰すべきプログラム位置を設定して、起動時にはそのプログラム位置に速やかに復帰させることができるという優れた効果を奏し得る。
【発明を実施するための最良の形態】
【００１７】
次に本発明の実施の形態について図面を参照して詳細に説明する。
【００１８】
図１は、本発明の実施の形態における情報処理装置の機能構成例を示す図である。この機能構成は、転送制御部１１と、実行状態保持部１２と、実行状態退避部１３と、コールバック関数テーブル１４と、起動部１５と、起動モード設定部１６と、復帰点設定部１７とを備えている。
【００１９】
実行状態保持部１２は、コンピュータがプログラムを実行する際の実行状態を保持するものである。ここで、実行状態とは、情報処理装置におけるレジスタの内容およびオペレーティングシステムにより管理されるメモリの内容をいう。情報処理装置におけるレジスタは、例えばＣＰＵ（Central Processing Unit）のレジスタや周辺回路のレジスタなどを含む。この実行状態保持部１２は、例えばＳＤＲＡＭ（Synchronous Dynamic Random Access Memory）などの揮発性メモリにより構成される。
【００２０】
実行状態退避部１３は、実行状態保持部１２に保持されている実行状態を退避するものである。この実行状態退避部１３は、例えばフラッシュメモリ（flash memory）などの不揮発性メモリにより構成される。これにより、電源がオフになった後であっても実行状態をそのまま維持することができる。
【００２１】
転送制御部１１は、実行状態保持部１２に保持されている実行状態を実行状態退避部１３に退避させ、または、実行状態退避部１３に退避されている実行状態を実行状態保持部１２に転送させるものである。
【００２２】
コールバック関数テーブル１４は、復帰点設定部１７による復帰点の設定時または起動部１５による起動時に実行すべきコールバック関数を登録するものである。コールバック関数は、他のプログラムに対して自身の提供する関数を呼び出すようにするための仕組みである。アプリケーションプログラムやデバイスドライバが予めコールバック関数テーブル１４にコールバック関数へのポインタを登録しておくことにより、実行状態の退避時やコンピュータの起動時にそのコールバック関数を実行することができる。
【００２３】
起動部１５は、情報処理装置の電源がオンになった際にオペレーティングシステムを起動させるものである。起動モード設定部１６は、起動部１５によるオペレーティングシステムの起動の際の起動モードを設定するものであり、例えば起動モード切替スイッチとして実現することが考えられる。本発明の実施の形態では、この起動モードとして、オペレーティングシステムのカーネルをローディングしてこれを実行させる通常起動モードに加えて、オペレーティングシステムを高速に起動させる高速起動モードを設ける。
【００２４】
起動モード設定部１６が高速起動モードに設定されている状態で情報処理装置の電源がオンになると、起動部１５は実行状態退避部１３に退避されている実行状態を実行状態保持部１２に転送するように転送制御部１１に対して指示する。これにより、転送制御部１１は実行状態退避部１３に退避されている実行状態を実行状態保持部１２に転送させて、オペレーティングシステムの起動後の実行状態を復元する。
【００２５】
復帰点設定部１７は、高速起動モードで情報処理装置の電源がオンにされた際に復帰すべきプログラム位置を復帰点として設定するものである。この復帰点設定部１７は、例えばスナップショットスイッチとして実現することが考えられる。すなわち、このスナップショットスイッチが押下されると、転送制御部１１は実行状態保持部１２に保持されている実行状態を実行状態退避部１３に退避させる。
【００２６】
図２は、本発明の実施の形態における情報処理装置１００の一構成例を示す図である。この情報処理装置１００は、ＣＰＵ１１０と、ＳＤＲＡＭ１２０と、フラッシュメモリ１３０と、周辺Ｉ／Ｏ（Peripheral Input/Output）１４０と、ＧＰＩＯ（General-Purpose Input/Output）１５０と、起動モード切替スイッチ１６０と、スナップショットスイッチ１７０と、システムバス１９０とを備えている。
【００２７】
ＣＰＵ１１０は情報処理装置１００の主な処理を行うプロセッサであり、そのアーキテクチャは特に限定されるものではない。ＳＤＲＡＭ１２０は、ＣＰＵ１１０の動作に必要な作業領域を保持するものである。ここでは、ＳＤＲＡＭ１２０を一例として挙げているが、これに限定されるものではなく、これ以外のＲＡＭを用いてもよい。
【００２８】
フラッシュメモリ１３０は、ＳＤＲＡＭ１２０の退避領域を保持する書込み可能な不揮発性メモリである。ここでは、フラッシュメモリ１３０を一例として挙げているが、これに限定されるものではなく、これ以外の不揮発性メモリであってもよい。
【００２９】
周辺Ｉ／Ｏ１４０は、情報処理装置１００の周辺処理を行うものであり、例えばタイマーや割込コントローラなどが含まれる。
【００３０】
ＧＰＩＯ１５０は、情報処理装置１００の入出力処理を行う汎用Ｉ／Ｏである。本発明の実施の形態においては、起動モード切替スイッチ１６０およびスナップショットスイッチ１７０の入力を受け付けて、これらスイッチの状態をソフトウェアから判別できるようにする。
【００３１】
起動モード切替スイッチ１６０は、起動モードを切り替えるスイッチである。本発明の実施の形態においては、起動時に通常起動モードまたは高速起動モードの何れかを設定する。
【００３２】
スナップショットスイッチ１７０は、実行状態保持部１２に保持されている実行状態を実行状態退避部１３に退避（スナップショット）させるトリガとなるスイッチである。高速起動モードにおいては、このスナップショットスイッチ１７０が押下された瞬間の実行状態を示すように起動される。
【００３３】
システムバス１９０は、ＣＰＵ１１０、ＳＤＲＡＭ１２０、フラッシュメモリ１３０、周辺Ｉ／Ｏ１４０およびＧＰＩＯ１５０を相互に接続するバスである。
【００３４】
また、ＣＰＵ１１０にはインサーキットエミュレータ（ＩＣＥ）１０２が接続されている。このインサーキットエミュレータ１０２は、ＣＰＵ１１０のデバッガとして機能するものであり、ここではＣＰＵ１１０のレジスタやＳＤＲＡＭ１２０の内容の読出しおよび書込みを行うために用いられる。このインサーキットエミュレータ１０２にはホストＰＣ１０１が接続され、このホストＰＣ１０１を介してインサーキットエミュレータ１０２の操作が行われるようになっている。なお、インサーキットエミュレータ１０２は転送制御部１１の一実現例であり、同等の機能を有する他のソフトウェアによって実現してもよい。
【００３５】
図３は、本発明の実施の形態における情報処理装置のソフトウェア構成例を示す図である。この構成例は、ｍ個（ｍは正の整数）のアプリケーション２１０−１乃至ｍと、ｍ個の高速起動デーモンＡＰＩ（Application Program Interface）２２０−１乃至ｍと、高速起動デーモン２３０と、キードライバ２４０と、ｎ個（ｎは正の整数）のデバイスドライバ２５０−１乃至ｎと、高速起動ドライバ２６０と、ＯＳカーネル２７０と、高速起動ローダ２８０と、メモリスナップショットプログラム２９０とを備えている。
【００３６】
アプリケーション２１０−１乃至ｍは、ＣＰＵ１１０上で動作するアプリケーションプログラムである。これらアプリケーション２１０−１乃至ｍは、高速起動デーモン２３０に対してコールバック通知登録要求を行う。そのため、予めスナップショット取得用コールバック関数および高速起動用コールバック関数が用意されている必要がある。
【００３７】
高速起動デーモンＡＰＩ２２０−１乃至ｍは、高速起動デーモン２３０を呼び出すためにアプリケーション２１０−１乃至ｍに対してそれぞれ提供されるアプリケーションプログラムインターフェースである。この高速起動デーモンＡＰＩ２２０−１乃至ｍは、対応するアプリケーション２１０−１乃至ｍが高速起動デーモン２３０に対してコールバック通知登録要求およびコールバック通知削除要求を行うために使用される。なお、高速起動デーモンＡＰＩ２２０−１乃至ｍの機能はそれぞれ同様であり、アプリケーション２１０−１乃至ｍが一つのＡＰＩを共用しても構わない。
【００３８】
高速起動デーモン２３０は、スナップショット取得時においては登録されたすべてのアプリケーション２１０−１乃至ｍに対してスナップショット取得用コールバック処理の実行指令を行い、高速起動時においては登録されたすべてのアプリケーション２１０−１乃至ｍに対して高速起動用コールバック処理の実行指令を行うためのデーモンである。
【００３９】
キードライバ２４０は、スナップショットスイッチ１７０の押下を検出するためのソフトウェアである。このキードライバ２４０のために、予めスナップショット取得用コールバック関数および高速起動用コールバック関数が用意されている必要がある。
【００４０】
デバイスドライバ２５０−１乃至ｎは、周辺機器（デバイス）を管理するためのソフトウェアである。これらデバイスドライバ２５０−１乃至ｎは、高速起動ドライバ２６０に対してコールバック関数登録を行う。そのため、予めスナップショット取得用コールバック関数および高速起動用コールバック関数が用意されている必要がある。なお、アプリケーション２１０−１乃至ｍはシステムコール（高速起動デーモンＡＰＩ２２０−１乃至ｍ）を経由してレジスタ操作を行うが、このデバイスドライバ２５０−１乃至ｎは担当するレジスタを直接操作することができる。
【００４１】
高速起動ドライバ２６０は、スナップショット取得時においては登録されたすべてのデバイスドライバ２５０−１乃至ｎに対してスナップショット取得用コールバック関数の実行を行い、高速起動時においては登録されたすべてのデバイスドライバ２５０−１乃至ｎに対して高速起動用コールバック関数の実行を行うためのソフトウェアである。
【００４２】
ＯＳカーネル２７０は、オペレーティングシステムの基本機能を有するソフトウェアである。本発明の実施の形態では、オペレーティングシステムとしてＬｉｎｕｘ（登録商標）を想定して説明するが、これに限定されるものではない。
【００４３】
メモリスナップショットプログラム２９０は、レジスタをＳＤＲＡＭ１２０に退避するとともにＳＤＲＡＭ１２０の内容をフラッシュメモリ１３０に退避するためのプログラムである。このメモリスナップショットプログラム２９０はＣＰＵ１１０のレジスタを保存するため、アセンブラで記述される必要がある。
【００４４】
なお、オペレーティングシステムは論理アドレス上で動作し（メモリ管理ユニット（ＭＭＵ）オン状態）、メモリスナップショットプログラム２９０は物理アドレス上で動作する（ＭＭＵオフ状態）。すなわち、オペレーティングシステムからメモリスナップショットプログラム２９０にジャンプする際には、物理アドレスメモリに対応する論理アドレスへジャンプした後にＭＭＵオフ状態となる。したがって、メモリスナップショットプログラム２９０は、論理アドレスと物理アドレスが同一のアドレスになるように配置される必要がある。
【００４５】
高速起動ローダ２８０は、情報処理装置の電源がオンになった後に最初に動作するローダである。この高速起動ローダ２８０は、高速起動モードにおいてはメモリスナップショットプログラム２９０が取得した起動イメージを使ってオペレーティングシステムを起動させる。この高速起動ローダ２８０はオペレーティングシステムとは独立して存在し、一般的なファームウェアソフトとしてフラッシュメモリ１３０上で動作する。
【００４６】
この高速起動ローダ２８０は、ＣＰＵ１１０からは仮想アドレス空間と物理アドレス空間が同じ空間に見えている必要がある。起動時は物理アドレス空間で起動するが、オペレーティングシステムを起動する際には論理アドレスに切り替えて、オペレーティングシステム内の高速起動ドライバ２６０のエントリーポイントへジャンプするからである。
【００４７】
図４は、本発明の実施の形態における情報処理装置のメモリマップの一例を示す図である。図４（ａ）は、ＳＤＲＡＭ１２０のメモリマップであり、ＯＳ使用領域１２１と、レジスタ退避領域１２２とを備える。
【００４８】
ＯＳ使用領域１２１は、オペレーティングシステムが使用するための領域であり、プログラムコードやデータが保存される。図１で説明したコールバック関数テーブル１４もこの領域に保持される。オペレーティングシステムが動作しているＣＰＵ１１０からから見た場合、この領域は仮想アドレス空間として認識される。一方、高速起動ローダ２８０が動作しているＣＰＵ１１０から見た場合、この領域は物理アドレス空間として認識される。
【００４９】
レジスタ退避領域１２２は、メモリスナップショットプログラム２９０がＣＰＵ１１０やＧＰＩＯ１５０等のレジスタを保存するために使用する保存用領域である。このレジスタ退避領域１２２はオペレーティングシステムとは独立して存在し、オペレーティングシステムが直接このレジスタ退避領域１２２にアクセスすることはない。
【００５０】
図４（ｂ）は、フラッシュメモリ１３０のメモリマップであり、高速起動ローダ１３１と、メモリスナップショットプログラム１３２と、ＯＳカーネルイメージ１３３と、ファイルシステム１３４と、ＯＳ使用領域のＳＤＲＡＭイメージ１３５と、レジスタ退避領域のＳＤＲＡＭイメージ１３６とを備える。
【００５１】
高速起動ローダ１３１は高速起動ローダ２８０の格納領域である。高速起動ローダ２８０は情報処理装置の電源がオンになった直後に実行されるため、このフラッシュメモリ１３０内に格納される必要がある。
【００５２】
メモリスナップショットプログラム１３２は、メモリスナップショットプログラム２９０の格納領域である。このメモリスナップショットプログラム１３２はオペレーティングシステム内のドライバによって実現することも可能であるが、本発明の実施の形態においてはオペレーティングシステムとは独立した形態としている。また、このメモリスナップショットプログラム１３２は、オペレーティングシステムから見て論理アドレスと物理アドレスが同一アドレスになるように配置される必要がある。
【００５３】
ＯＳカーネルイメージ１３３は、オペレーティングシステムのカーネルイメージである。Ｌｉｎｕｘの場合、ＸＩＰと呼ばれるフラッシュメモリ上で動作する方式と、ＳＤＲＡＭにコードおよびデータを転送しておいてＳＤＲＡＭ上で実行する方式がある。本発明の実施の形態においては後者を想定して説明するが、特にこれに限定されるものではない。
【００５４】
ファイルシステム１３４は、オペレーティングシステムで用いられるファイルシステムである。このファイルシステムのフォーマットにはｅｘｔ２やＸＦＳなど種々あるが、特に限定されるものではない。
【００５５】
ＯＳ使用領域のＳＤＲＡＭイメージ１３５は、高速起動時のＳＤＲＡＭイメージを保存しておくエリアである。これはＳＤＲＡＭ１２０のＯＳ使用領域１２１に格納されていた内容であるが、ＳＤＲＡＭ１２０の内容は電源オフ時に消失してしまうため、フラッシュメモリ１３０上に退避しておく必要がある。高速起動時は、ＯＳ使用領域のＳＤＲＡＭイメージ１３５からＯＳ使用領域１２１へ転送して、ＳＤＲＡＭ１２０の内容を復帰する。
【００５６】
レジスタ退避領域のＳＤＲＡＭイメージ１３６は、高速起動時のＣＰＵ１１０や周辺Ｉ／Ｏ１４０等のレジスタの値を保存しておく領域である。これはＳＤＲＡＭ１２０のレジスタ退避領域１２２に格納されていた内容であるが、ＳＤＲＡＭ１２０の内容は電源オフ時に消失してしまうため、フラッシュメモリ１３０上に置く必要がある。高速起動時は、レジスタ退避領域のＳＤＲＡＭイメージ１３６からレジスタ退避領域１２２へ転送して、転送したデータ内容を参照してＣＰＵ１１０や周辺Ｉ／Ｏ１４０等のレジスタの内容を復帰する。
【００５７】
なお、このレジスタ退避領域のＳＤＲＡＭイメージ１３６は、本発明の実施の形態では便宜上オペレーティングシステムの管理外の独立した領域にあるものとしている。また、ＣＰＵ１１０から見た場合、この領域は仮想アドレス空間と物理アドレス空間が同じ空間に見えている必要がある。
【００５８】
上述のように、高速起動ローダ２８０には主として通常起動モードと高速起動モードの２つの動作モードがあり、これらの起動モードは起動モード切替スイッチ１６０により切り替えることができる。通常起動モードでは、情報処理装置のリセット後はＳＤＲＡＭ１２０および関連する周辺Ｉ／Ｏ１４０が初期化され、ＯＳカーネルイメージ１３３がＯＳ使用領域１２１へ転送された後、ＯＳ使用領域１２１内にあるオペレーティングシステムのエントリーポイントへジャンプすることにより起動が行われる。
【００５９】
一方、高速起動モードでは、情報処理装置のリセット後はＳＤＲＡＭ１２０および関連する周辺Ｉ／Ｏ１４０が初期化され、ＯＳ使用領域のＳＤＲＡＭイメージ１３５およびレジスタ退避領域のＳＤＲＡＭイメージ１３６がそれぞれＯＳ使用領域１２１およびレジスタ退避領域１２２に転送され、レジスタ退避領域１２２の内容に基づいてＣＰＵ１１０や周辺Ｉ／Ｏ１４０等のレジスタ内容が復帰された後、ＯＳ使用領域１２１内にあるオペレーティングシステムのエントリーポイントへジャンプすることにより起動が行われる。
【００６０】
なお、高速起動モードにおいて、本発明の実施の形態ではレジスタ退避領域のＳＤＲＡＭイメージ１３６をレジスタ退避領域１２２へ転送して転送後のレジスタ退避領域１２２を参照してレジスタの内容を復帰しているが、これを転送せずにレジスタ退避領域のＳＤＲＡＭイメージ１３６を直接参照してレジスタの内容を復帰しても構わない。
【００６１】
次に本発明の実施の形態における情報処理装置の全体の動作の流れについて図面を参照して説明する。ここでは、全体の動作を、スナップショット取得準備処理、スナップショット取得処理、高速起動処理およびソフトウェアの終了（シャットダウン）処理の４つに分けて説明する。
【００６２】
図５は、本発明の実施の形態におけるスナップショット取得準備処理の一例を示す図である。まず、起動モード切替スイッチ１６０が通常起動モードに設定された状態で情報処理装置の電源が投入されると、ハードウェアリセット後に高速起動ローダ２８０が起動される。高速起動ローダ２８０は、起動モード切替スイッチ１６０に従って、一般的なオペレーティングシステムのブートシーケンスに沿った起動を行う（３１１）。
【００６３】
このブートシーケンスにおいて、高速起動ドライバ２６０がインストールされる（３１２）。なお、ここにいうインストールとは、ＯＳカーネル２７０の起動後にオペレーティングシステムに対してモジュール（ここではドライバ）を結び付けて動作可能な状態にすることをいう。
【００６４】
続いて、スナップショットスイッチ１７０の押下を検出可能なキードライバ２４０がインストールされ、このキードライバ２４０が、高速起動ドライバ２６０に対してコールバック関数（スナップショット取得用コールバック関数および高速起動用コールバック関数）の登録を行う（３１３）。なお、キードライバ２４０は、スナップショット取得用コールバック関数および高速起動用コールバック関数の実装が完了していることが必要である。
【００６５】
そして、ｎ個のデバイスドライバ２５０−１乃至ｎが昇順に（すなわち、デバイスドライバ２５０−１から２５０−ｎの順に）インストールされて、高速起動ドライバに対してコールバック関数の登録を行う（３１４、３１５）。なお、これらデバイスドライバ２５０−１乃至ｎは、スナップショット取得用コールバック関数および高速起動用コールバック関数の実装が完了していることが必要である。
【００６６】
キードライバ２４０およびデバイスドライバ２５０−１乃至ｎのコールバック関数の登録が終了すると、高速起動デーモン２３０が起動される。高速起動デーモン２３０は、キードライバ２４０をオープンして、スナップショットスイッチ１７０が押下されるのを検知する状態になる（３１６）。また、メモリスナップショットプログラム２９０がＳＤＲＡＭ１２０にロードされる（３１７）。
【００６７】
続いて、アプリケーション２１０−１乃至ｍが昇順に（すなわち、アプリケーション２１０−１から２１０−ｎの順に）起動されて、それぞれ対応する高速起動デーモンＡＰＩ２２０−１乃至ｍのコールバック通知登録要求ＡＰＩを用いた登録処理の呼び出しが行われる（３２１、３２３）。なお、ここで登録処理の呼び出しが行われるためには、スナップショット取得用コールバック関数および高速起動用コールバック関数の実装が完了している必要がある。高速起動デーモンＡＰＩ２２０−１乃至ｍは、高速起動デーモン２３０に対してコールバック通知の登録を伝達する（３２２、３２４）。
【００６８】
図６は、本発明の実施の形態におけるスナップショット取得処理の一例を示す図である。スナップショットスイッチ１７０が押下されると、キードライバ２４０は高速起動デーモン２３０に対してその旨を通知する（３３１）。
【００６９】
高速起動デーモン２３０は、高速起動デーモンＡＰＩ２２０−１乃至ｍに対して降順に（すなわち、高速起動デーモンＡＰＩ２２０−ｍから２２０−１の順に）スナップショット取得用コールバック処理実行要求を伝達する（３３２、３３６）。高速起動デーモンＡＰＩ２２０−１乃至ｍは、高速起動デーモン２３０からの要求に応じて、アプリケーション２１０−１乃至ｍのスナップショット取得用コールバック処理を実行する（３３３、３３７）。なお、このスナップショット取得用コールバック処理の内容としては、例えば、スナップショット取得のために区切りのよいプログラム位置までプログラムを実行させる処理を含み得る。また、処理を降順に行うのは、処理間の依存性を満たすためである。
【００７０】
アプリケーション２１０−１乃至ｍのスナップショット取得用コールバック処理が完了すると、その呼び出し元に戻る（３３４、３３８）。これにより、高速起動デーモンＡＰＩ２２０−１乃至ｍは、高速起動デーモン２３０に対して、スナップショット取得用コールバック処理が完了したことを伝達する（３３５、３３９）。
【００７１】
高速起動デーモンＡＰＩ２２０−１乃至ｍからのスナップショット取得用コールバック処理の完了通知（３３５、３３９）を全て受け取ると、高速起動デーモン２３０は高速起動ドライバ２６０に対して、コマンドの発行を行う（３４１）。高速起動ドライバ２６０は、デバイスドライバ２５０−１乃至ｎに対して降順に（すなわち、デバイスドライバ２５０−ｎから２５０−１の順に）スナップショット取得用コールバック関数を実行する（３４２、３４４）。デバイスドライバ２５０−１乃至ｎのスナップショット取得用コールバック関数が完了すると、その呼び出し元に戻る（３４３、３４５）。なお、このスナップショット取得用コールバック処理の内容としては、例えば、関連するレジスタや変数をＳＤＲＡＭ１２０に退避する処理を含み得る。また、関数の実行を降順に行うのは、関数間の依存性を満たすためである。
【００７２】
また、高速起動ドライバ２６０は、キードライバ２４０に対してスナップショット取得用コールバック関数を実行する（３４６）。キードライバ２４０のスナップショット取得用コールバック関数が完了すると、その呼び出し元に戻る（３４７）。
【００７３】
これらのスナップショット取得用コールバック関数が完了すると、高速起動ドライバ２６０からメモリスナップショットプログラム２９０の先頭番地にジャンプする（３４９）。ジャンプ後、メモリスナップショットプログラム２９０によってＣＰＵ１１０や周辺Ｉ／Ｏ１４０等のレジスタの内容がＳＤＲＡＭ１２０のレジスタ退避領域１２２に退避される。そして、ＳＤＲＡＭ１２０のＯＳ使用領域１２１およびレジスタ退避領域１２２がインサーキットエミュレータ１０２によってホストＰＣ１０１に保存され、その後、再びインサーキットエミュレータ１０２によってそれぞれＯＳ使用領域のＳＤＲＡＭイメージ１３５およびレジスタ退避領域のＳＤＲＡＭイメージ１３６に退避される。その後、情報処理装置の電源はオフにされる。
【００７４】
図７は、本発明の実施の形態における高速起動処理の一例を示す図である。高速起動の際には、起動モード切替スイッチ１６０が高速起動モードに設定された状態で情報処理装置の電源がオンにされる。ハードウェアリセット後、高速起動ローダ２８０が起動される。
【００７５】
高速起動ローダ２８０は、起動モード切替スイッチ１６０に従って、高速起動モードによる起動を行う。高速起動ローダ２８０は、ＳＤＲＡＭ１２０および関連する周辺Ｉ／Ｏ１４０の初期化を行い、ＯＳ使用領域のＳＤＲＡＭイメージ１３５およびレジスタ退避領域のＳＤＲＡＭイメージ１３６をそれぞれＯＳ使用領域１２１およびレジスタ退避領域１２２に転送して、その転送後に高速起動ドライバ２６０の呼び出し元にジャンプする（３５１）。
【００７６】
高速起動ドライバ２６０は、キードライバ２４０の高速起動用コールバック関数を実行する（３５２）。そして、キードライバ２４０の高速起動用コールバック関数が完了すると、その呼び出し元に戻る（３５３）。
【００７７】
また、高速起動ドライバ２６０は、デバイスドライバ２５０−１乃至ｎの高速起動用コールバック関数を昇順に（すなわち、デバイスドライバ２５０−１から２５０−ｎの順に）実行する（３５４、３５６）。そして、デバイスドライバ２５０−１乃至ｎの高速起動用コールバック関数が完了すると、その呼び出し元に戻る（３５５、３５７）。
【００７８】
デバイスドライバ２５０−１乃至ｎの高速起動用コールバック関数が完了すると、コマンドは完了し、高速起動ドライバ２６０から高速起動デーモン２３０の呼び出し元に戻る（３５８）。
【００７９】
高速起動デーモン２３０は、高速起動デーモンＡＰＩ２２０−１乃至ｍに対して昇順に（すなわち、高速起動デーモンＡＰＩ２２０−１から２２０−ｍの順に）高速起動用コールバック処理実行要求を伝達する（３６１、３６５）。高速起動デーモンＡＰＩ２２０−１乃至ｍは、高速起動デーモン２３０からの要求に応じて、アプリケーション２１０−１乃至ｍの高速起動用コールバック処理を実行する（３６２、３６６）。
【００８０】
アプリケーション２１０−１乃至ｍの高速起動用コールバック処理が完了すると、その呼び出し元に戻る（３６３、３６７）。これにより、高速起動デーモンＡＰＩ２２０−１乃至ｍは、高速起動デーモン２３０に対して、高速起動用コールバック処理が完了したことを伝達する（３６４、３６８）。
【００８１】
図８は、本発明の実施の形態におけるソフトウェア終了処理の一例を示す図である。シャットダウンの際には、アプリケーション２１０−１乃至ｍが降順に（すなわち、アプリケーション２１０−ｎから２１０−１の順に）、それぞれ対応する高速起動デーモンＡＰＩ２２０−１乃至ｍのコールバック通知削除要求ＡＰＩを用いて、削除処理の呼び出しを行う（３７１、３７３）。高速起動デーモンＡＰＩ２２０−１乃至ｍは、高速起動デーモン２３０に対してコールバック通知の削除を伝達する（３７２、３７４）。その後、アプリケーション２１０−１乃至ｍは終了する。
【００８２】
高速起動デーモン２３０はキードライバ２４０をクローズする（３７５）。そして、高速起動デーモンＡＰＩ２２０−１乃至ｍからのコールバック通知の削除通知（３７２、３７４）を全て受け取ると、高速起動デーモン２３０は終了する。
【００８３】
また、デバイスドライバ２５０−１乃至ｎは、高速起動ドライバ２６０に対して降順に（すなわち、デバイスドライバ２５０−ｎから２５０−１の順に）コールバック関数の削除を行う（３７６、３７７）。さらに、キードライバ２４０は、高速起動ドライバ２６０に対してコールバック関数の削除を行う（３７８）。登録された全てのデバイスドライバ２５０−１乃至ｎおよびキードライバ２４０が削除されると、高速起動ドライバ２６０は削除される。
【００８４】
次に本発明の実施の形態における情報処理装置のソフトウェアによる処理手順について図面を参照して説明する。
【００８５】
図９は、本発明の実施の形態における高速起動デーモンＡＰＩ２２０−１乃至ｍの全体の処理手順の一例を示す図である。
【００８６】
まず、対応するアプリケーション２１０−１乃至ｍから、アプリケーション用コールバック通知登録要求ＡＰＩが呼び出される（ステップＳ５１０）。そして、高速起動デーモン２３０から要求があるまで待機する（ステップＳ５２１）。この間、アプリケーション２１０−１乃至ｍが本来行うべき処理を実行してもよい。
【００８７】
高速起動デーモン２３０から要求があれば（ステップＳ５２１）、その要求条件に従って（ステップＳ５２２）処理が行われる。すなわち、スナップショット取得用コールバック処理実行要求であればスナップショット取得用コールバック処理（ステップＳ５３０）が行われ、高速起動用コールバック処理実行要求であれば高速起動用コールバック処理（ステップＳ５４０）が行われる。これらコールバック処理において異常終了が検出されなければ、再び高速起動デーモン２３０からの要求待ちとなる。
【００８８】
対応するアプリケーション２１０−１乃至ｍが終了する場合には（ステップＳ５２３）、アプリケーション用コールバック通知削除要求ＡＰＩ（ステップＳ５５０）が呼び出される。
【００８９】
図１０は、本発明の実施の形態におけるアプリケーション用コールバック通知登録要求ＡＰＩ（ステップＳ５１０）の処理手順の一例を示す図である。
【００９０】
アプリケーション用コールバック通知登録要求ＡＰＩが呼び出されると、高速起動デーモンＡＰＩ２２０−１乃至ｍはコールバック関数（スナップショット取得用コールバック関数および高速起動用コールバック関数）をコールバック関数テーブル１４に保存する（ステップＳ５１１）。
【００９１】
そして、高速起動デーモンＡＰＩ２２０−１乃至ｍは、そのアプリケーション用コールバック通知登録要求およびその要求元のアプリケーション２１０−１乃至ｍのアプリケーション情報を高速起動デーモン２３０に伝達する（ステップＳ５１２）。ここで、アプリケーション情報とは、アプリケーションを一意に区別することができる情報であり、例えばプロセス識別子（ＰＩＤ）を用いることができる。
【００９２】
図１１は、本発明の実施の形態におけるスナップショット取得用コールバック処理（ステップＳ５３０）の処理手順の一例を示す図である。
【００９３】
スナップショット取得用コールバック処理実行要求が呼び出されると、高速起動デーモンＡＰＩ２２０−１乃至ｍはスナップショット取得用コールバック関数を実行する（ステップＳ５３１）。
【００９４】
そして、高速起動デーモンＡＰＩ２２０−１乃至ｍは、そのコールバック関数の実行結果およびその要求元のアプリケーション情報を高速起動デーモン２３０に伝達する（ステップＳ５３２）。
【００９５】
図１２は、本発明の実施の形態における高速起動用コールバック処理（ステップＳ５４０）の処理手順の一例を示す図である。
【００９６】
高速起動用コールバック処理実行要求が呼び出されると、高速起動デーモンＡＰＩ２２０−１乃至ｍは高速起動用コールバック関数を実行する（ステップＳ５４１）。
【００９７】
そして、高速起動デーモンＡＰＩ２２０−１乃至ｍは、そのコールバック関数の実行結果およびその要求元のアプリケーション情報を高速起動デーモン２３０に伝達する（ステップＳ５４２）。
【００９８】
図１３は、本発明の実施の形態におけるアプリケーション用コールバック通知削除要求ＡＰＩ（ステップＳ５５０）の処理手順の一例を示す図である。
【００９９】
アプリケーション用コールバック通知削除要求ＡＰＩが呼び出されると、高速起動デーモンＡＰＩ２２０−１乃至ｍはアプリケーション用コールバック通知削除要求およびその要求元のアプリケーション２１０−１乃至ｍのアプリケーション情報を高速起動デーモン２３０に伝達する（ステップＳ５５１）。
【０１００】
そして、高速起動デーモンＡＰＩ２２０−１乃至ｍは、コールバック関数をコールバック関数テーブル１４から削除する（ステップＳ５５２）。
【０１０１】
図１４は、本発明の実施の形態における高速起動デーモン２３０の全体の処理手順の一例を示す図である。
【０１０２】
高速起動デーモン２３０がインストールされると、初期化処理（ステップＳ６１０）が行われる。そして、高速起動デーモン２３０は、高速起動デーモンＡＰＩ２２０−１乃至ｍから要求がなされるまで（ステップＳ６２１）、または、スナップショットスイッチ１７０が押下されるまで（ステップＳ６２３）待機する。
【０１０３】
スナップショットスイッチ１７０が押下されると（ステップＳ６２３）、スナップショット取得用処理（ステップＳ６７０）が行われ、その後、高速起動用処理（ステップＳ６８０）が行われる。
【０１０４】
また、高速起動デーモンＡＰＩ２２０−１乃至ｍから要求があれば（ステップＳ６２１）、その要求条件に従って（ステップＳ６２２）処理が行われる。すなわち、アプリケーション用コールバック通知登録要求であればアプリケーション用コールバック通知登録処理（ステップＳ６３０）が行われ、アプリケーション用コールバック通知削除要求であればアプリケーション用コールバック通知削除処理（ステップＳ６４０）が行われ、スナップショット取得用コールバック処理実行終了通知であればスナップショット取得用コールバック処理実行終了通知確認（ステップＳ６５０）が行われ、また、高速起動用コールバック処理実行終了通知であれば高速起動用コールバック処理実行終了通知確認（ステップＳ６６０）が行われる。これらコールバック処理において異常終了が検出されなければ、再び高速起動デーモンＡＰＩ２２０−１乃至ｍからの要求待ち、もしくは、スナップショットスイッチ１７０の押下待ちとなる。
【０１０５】
図１５は、本発明の実施の形態における初期化処理（ステップＳ６１０）の処理手順の一例を示す図である。
【０１０６】
まず、高速起動デーモン２３０は、アプリケーション登録数のカウンタを「０」にクリアする（ステップＳ６１１）。また、高速起動デーモン２３０は、状態フラグ１および２をそれぞれ「１」に設定する（ステップＳ６１２）。状態フラグ１は、スナップショットが取得されてから次に高速起動モードによって起動されるまでの間に「０」になるフラグであり、これ以外の状態では「１」を示す。状態フラグ２は、スナップショット取得用処理（ステップＳ６７０）とスナップショット取得用コールバック処理実行終了通知確認（ステップＳ６５０）の間の同期、および、高速起動用処理（ステップＳ６８０）と高速起動用コールバック処理実行終了通知確認（ステップＳ６６０）の間の同期に用いられるフラグである。
【０１０７】
さらに、高速起動デーモン２３０は、変数ｎｕｍの値を「０」にクリアする（ステップＳ６１３）。変数ｎｕｍは、正常終了したコールバック関数の数を計数するカウンタである。
【０１０８】
そして、高速起動デーモン２３０は、メモリスナップショットプログラム２９０をＳＤＲＡＭ１２０にロードする（ステップＳ６１４）。また、高速起動デーモン２３０は、高速起動ドライバ２６０をオープンする（ステップＳ６１５）。さらに、高速起動デーモン２３０は、高速起動デーモンＡＰＩ２２０−１乃至ｍからの要求を待つプロセス（ステップＳ６２１）を生成する（ステップＳ６１６）とともに、スナップショットスイッチ１７０の押下を待つプロセス（ステップＳ６２３）を生成する（ステップＳ６１７）。その後、高速起動デーモン２３０は、キードライバ２４０をオープンし、スナップショットスイッチ１７０の押下を検出できるようにして（ステップＳ６１８）、初期化処理を終了する。
【０１０９】
図１６は、本発明の実施の形態におけるアプリケーション用コールバック通知登録処理（ステップＳ６３０）の処理手順の一例を示す図である。
【０１１０】
アプリケーションを格納する領域に空きがなく（ステップＳ６３１）、もしくは、状態フラグ１が「１」に設定されていなければ（ステップＳ６３２）、高速起動デーモン２３０は要求元の高速起動デーモンＡＰＩ２２０−１乃至ｍに対して異常終了した旨を伝達する（ステップＳ６３６）。
【０１１１】
一方、アプリケーションを格納する領域に空きが有り（ステップＳ６３１）、かつ、状態フラグ１が「１」に設定されていれば（ステップＳ６３２）、高速起動デーモン２３０は要求元の高速起動デーモンＡＰＩ２２０−１乃至ｍから伝達されたアプリケーション情報をコールバック関数テーブル１４に保存する（ステップＳ６３３）。そして、高速起動デーモン２３０は、アプリケーション登録数のカウンタを「１」加算して（ステップＳ６３４）、要求元の高速起動デーモンＡＰＩ２２０−１乃至ｍに対して正常終了した旨を伝達する（ステップＳ６３５）。
【０１１２】
図１７は、本発明の実施の形態におけるアプリケーション用コールバック通知削除処理（ステップＳ６４０）の処理手順の一例を示す図である。
【０１１３】
指定されたアプリケーション情報が登録されてなく（ステップＳ６４１）、もしくは、状態フラグ１が「１」に設定されていなければ（ステップＳ６４２）、高速起動デーモン２３０は要求元の高速起動デーモンＡＰＩ２２０−１乃至ｍに対して異常終了した旨を伝達する（ステップＳ６４６）。
【０１１４】
一方、指定されたアプリケーション情報が登録されており（ステップＳ６４１）、かつ、状態フラグ１が「１」に設定されていれば（ステップＳ６４２）、高速起動デーモン２３０は要求元の高速起動デーモンＡＰＩ２２０−１乃至ｍから伝達されたアプリケーション情報を削除する（ステップＳ６４３）。そして、高速起動デーモン２３０は、アプリケーション登録数のカウンタを「１」減算して（ステップＳ６４４）、要求元の高速起動デーモンＡＰＩ２２０−１乃至ｍに対して正常終了した旨を伝達する（ステップＳ６４５）。
【０１１５】
図１８は、本発明の実施の形態におけるスナップショット取得用処理（ステップＳ６７０）の処理手順の一例を示す図である。
【０１１６】
高速起動デーモン２３０は、状態フラグ１を「０」にクリアする（ステップＳ６７１）。アプリケーション登録数のカウンタが「０」より大きければ（ステップＳ６７２）、高速起動デーモン２３０はそのアプリケーション登録数を変数ｉに設定する（ステップＳ６７３）。そして、高速起動デーモン２３０は、変数ｉを「１」ずつ減算させながら（ステップＳ６７６）、変数ｉが「１」以上である限り（ステップＳ６７４）、高速起動デーモンＡＰＩ２２０−ｉに対してスナップショット取得用コールバック処理の実行指令を伝達する（ステップＳ６７５）。すなわち、高速起動デーモン２３０は、アプリケーションの登録順とは逆順に、スナップショット取得用コールバック処理の実行指令を、該当する高速起動デーモンＡＰＩ２２０−１乃至ｍに対して順次伝達する。
【０１１７】
一方、アプリケーション登録数のカウンタが「０」より大きくなければ（ステップＳ６７２）、高速起動デーモン２３０は、高速起動デーモンＡＰＩ２２０−１乃至ｍの何れかからの要求を待つプロセス（ステップＳ６２１）に対して、スナップショット取得用コールバック処理の実行完了を伝達する（ステップＳ６７７）。
【０１１８】
ステップＳ６７７の処理の後、もしくは、ステップＳ６７４において変数ｉが「１」以上でなくなった場合、高速起動デーモン２３０は、状態フラグ２を「０」にクリアして（ステップＳ６７８、同期点Ａ）、スナップショット取得用コールバック処理実行終了通知確認（ステップＳ６５０）によって状態フラグ２が「１」に設定されるのを待機する（ステップＳ６７９、同期点Ｂ）。
【０１１９】
図１９は、本発明の実施の形態におけるスナップショット取得用コールバック処理実行終了通知確認（ステップＳ６５０）の処理手順の一例を示す図である。
【０１２０】
指定されたアプリケーション情報が登録されてなく（ステップＳ６５１）、もしくは、コールバック処理が正常終了していなければ（ステップＳ６５２）、高速起動デーモン２３０は異常終了する。
【０１２１】
一方、指定されたアプリケーション情報が登録されており（ステップＳ６５１）、かつ、コールバック処理が正常終了していれば（ステップＳ６５２）、高速起動デーモン２３０は変数ｎｕｍを「１」加算する（ステップＳ６５３）。その結果、変数ｎｕｍがアプリケーション登録数のカウンタ値と一致していなければ（ステップＳ６５４）、他にも実行終了を待機すべきスナップショット取得用コールバック処理が存在するため、そのままスナップショット取得用コールバック処理実行終了通知確認の処理を正常終了する。一方、変数ｎｕｍがアプリケーション登録数のカウンタ値と一致していれば（ステップＳ６５４）、最後のスナップショット取得用コールバック処理が終了したことになるため、高速起動ドライバ２６０に対してコマンドを発行して（ステップＳ６５５）、その復帰を待つ。
【０１２２】
その後、高速起動モードによって起動が行われると、高速起動ドライバ２６０に対するコマンドから復帰する（ステップＳ６５６）。高速起動デーモン２３０は、メモリスナップショットプログラム２９０を再度、ＳＤＲＡＭ１２０にロードする（ステップＳ６５７）。そして、高速起動デーモン２３０は、状態フラグ２が「０」にクリアされていることを確認する（ステップＳ６５８、同期点Ａ）。もし、状態フラグ２が「０」にクリアされていなければ、スナップショット取得用処理（ステップＳ６７０）によって状態フラグ２が「０」にクリアされるのを待機する。状態フラグ２が「０」にクリアされた後には、高速起動デーモン２３０は再度、状態フラグ２を「１」に設定する（ステップＳ６５９、同期点Ｂ）。
【０１２３】
図２０は、本発明の実施の形態における高速起動用処理（ステップＳ６８０）の処理手順の一例を示す図である。
【０１２４】
アプリケーション登録数のカウンタが「０」より大きければ（ステップＳ６８１）、高速起動デーモン２３０は変数ｉを「１」に設定する（ステップＳ６８２）。そして、高速起動デーモン２３０は、変数ｉを「１」ずつ加算させながら（ステップＳ６８５）、変数ｉがアプリケーション登録数のカウンタ値以下である限り（ステップＳ６８３）、高速起動デーモンＡＰＩ２２０−ｉに対して高速起動用コールバック処理の実行指令を伝達する（ステップＳ６８４）。すなわち、高速起動デーモン２３０は、アプリケーションの登録順に、高速起動用コールバック処理の実行指令を、該当する高速起動デーモンＡＰＩ２２０−１乃至ｍに対して順次伝達する。
【０１２５】
一方、アプリケーション登録数のカウンタが「０」より大きくなければ（ステップＳ６８１）、高速起動デーモン２３０は、高速起動デーモンＡＰＩ２２０−１乃至ｍの何れかからの要求を待つプロセス（ステップＳ６２１）に対して、高速起動用コールバック処理の実行完了を伝達する（ステップＳ６８６）。
【０１２６】
ステップＳ６８６の処理の後、もしくは、ステップＳ６８３において変数ｉがアプリケーション登録数のカウンタ値以下でなくなった場合、高速起動デーモン２３０は、状態フラグ２を「０」にクリアして（ステップＳ６８７、同期点Ｃ）、高速起動用コールバック処理実行終了通知確認（ステップＳ６６０）によって状態フラグ２が「１」に設定されるのを待機する（ステップＳ６８８、同期点Ｄ）。状態フラグ２が「１」に設定されると、高速起動デーモン２３０は、状態フラグ１を「１」に設定する（ステップＳ６８９）。
【０１２７】
図２１は、本発明の実施の形態における高速起動用コールバック処理実行終了通知確認（ステップＳ６６０）の処理手順の一例を示す図である。
【０１２８】
指定されたアプリケーション情報が登録されてなく（ステップＳ６６１）、もしくは、コールバック処理が正常終了していなければ（ステップＳ６６２）、高速起動デーモン２３０は異常終了する。
【０１２９】
一方、指定されたアプリケーション情報が登録されており（ステップＳ６６１）、かつ、コールバック処理が正常終了していれば（ステップＳ６６２）、高速起動デーモン２３０は変数ｎｕｍを「１」減算する（ステップＳ６６３）。その結果、変数ｎｕｍが「０」でなければ（ステップＳ６６４）、他にも実行終了を待機すべき高速起動用コールバック処理が存在するため、そのまま高速起動用コールバック処理実行終了通知確認の処理を正常終了する。一方、変数ｎｕｍが「０」であれば（ステップＳ６６４）、最後の高速起動用コールバック処理が終了したことになるため、高速起動デーモン２３０は状態フラグ２の内容を調べる。すなわち、高速起動デーモン２３０は、状態フラグ２が「０」にクリアされていることを確認する（ステップＳ６６８、同期点Ｃ）。もし、状態フラグ２が「０」にクリアされていなければ、高速起動用処理（ステップＳ６８０）によって状態フラグ２が「０」にクリアされるのを待機する。状態フラグ２が「０」にクリアされた後には、高速起動デーモン２３０は再度、状態フラグ２を「１」に設定する（ステップＳ６６９、同期点Ｄ）。
【０１３０】
図２２は、本発明の実施の形態における高速起動ドライバ２６０の全体の処理手順の一例を示す図である。
【０１３１】
高速起動ドライバ２６０がインストールされると、初期化関数（ステップＳ７１０）が実行される。そして、高速起動ドライバ２６０は、他のドライバ（２４０、２５０−１乃至ｎ）またはアプリケーション２１０−１乃至ｍから要求があるまで待機し、その要求条件に従って（ステップＳ７２１）関数が実行される。すなわち、ドライバ用コールバック関数登録要求であればドライバ用コールバック関数登録関数（ステップＳ７３０）が実行され、ドライバ用コールバック関数削除要求であればドライバ用コールバック関数削除関数（ステップＳ７４０）が実行され、オープン要求であればオープン関数（ステップＳ７５０）が実行され、クローズ要求であればクローズ関数（ステップＳ７６０）が実行され、コマンド処理要求であればコマンド処理関数（ステップＳ７７０）が実行され、削除要求であれば終了関数（ステップＳ７９０）が実行される。これら関数が実行されると、高速起動ドライバ２６０は、再び他のドライバ（２４０、２５０−１乃至ｎ）またはアプリケーション２１０−１乃至ｍからの要求を待機する。但し、終了関数によって正常終了が検出されると、高速起動ドライバ２６０はその処理を終了する。
【０１３２】
図２３は、本発明の実施の形態における初期化関数（ステップＳ７１０）の処理手順の一例を示す図である。
【０１３３】
高速起動ドライバ２６０は、コールバック関数テーブル１４をクリアして初期化する（ステップＳ７１１）。また、高速起動ドライバ２６０は、コールバック関数テーブル１４におけるコールバック関数登録数のカウンタ値を「０」にクリアする（ステップＳ７１２）。
【０１３４】
そして、高速起動ドライバ２６０は、高速起動ドライバ２６０のオープンビットを「０」にクリアする（ステップＳ７１３）。なお、このオープンビットは、高速起動ドライバ２６０を排他的に（同時に１つだけ）実行することを保証するためのものである。
【０１３５】
さらに、高速起動ドライバ２６０は、ドライバの利用度数を「０」にクリアする（ステップＳ７１４）。なお、この利用度数は、オペレーティングシステム内部のドライバの利用度数を示すものであり、これが「１」以上であればドライバを削除できないことを意味する。
【０１３６】
図２４は、本発明の実施の形態におけるドライバ用コールバック関数登録関数（ステップＳ７３０）の処理手順の一例を示す図である。
【０１３７】
コールバック関数テーブル１４に空きがなければ（ステップＳ７３１）、このドライバ用コールバック関数登録関数は異常終了する。一方、コールバック関数テーブル１４に空きがあれば（ステップＳ７３１）、高速起動ドライバ２６０は、コールバック関数テーブル１４にコールバック関数を保存する（ステップＳ７３２）。そして、高速起動ドライバ２６０は、コールバック関数登録数のカウンタ値を「１」加算して（ステップＳ７３３）、ドライバの利用度数を「１」加算する（ステップＳ７３４）。
【０１３８】
図２５は、本発明の実施の形態におけるドライバ用コールバック関数削除関数（ステップＳ７４０）の処理手順の一例を示す図である。
【０１３９】
指定されたアプリケーション情報が登録されていなければ（ステップＳ７４１）、このドライバ用コールバック関数登録関数は異常終了する。一方、指定されたアプリケーション情報が登録されていれば（ステップＳ７４１）、高速起動ドライバ２６０は、コールバック関数テーブル１４からコールバック関数を削除する（ステップＳ７４２）。そして、高速起動ドライバ２６０は、コールバック関数登録数のカウンタ値を「１」減算して（ステップＳ７４３）、ドライバの利用度数を「１」減算する（ステップＳ７４４）。
【０１４０】
図２６は、本発明の実施の形態におけるオープン関数（ステップＳ７５０）の処理手順の一例を示す図である。
【０１４１】
高速起動ドライバ２６０のオープンビットが「０」にクリアされていなければ（ステップＳ７５１）、このオープン関数は異常終了する。一方、高速起動ドライバ２６０のオープンビットが「０」にクリアされていれば（ステップＳ７５１）、高速起動ドライバ２６０はオープンビットを「１」に設定して（ステップＳ７５２）、ドライバの利用度数を「１」加算する（ステップＳ７５３）。
【０１４２】
図２７は、本発明の実施の形態におけるクローズ関数（ステップＳ７６０）の処理手順の一例を示す図である。
【０１４３】
高速起動ドライバ２６０は、高速起動ドライバ２６０のオープンビットを「０」にクリアするとともに（ステップＳ７６１）、ドライバの利用度数を「１」減算する（ステップＳ７６２）。
【０１４４】
図２８は、本発明の実施の形態におけるコマンド処理関数（ステップＳ７７０）の処理手順の一例を示す図である。
【０１４５】
高速起動ドライバ２６０は、割込みを無効にして、他の割込み要求を受け付けないようにする（ステップＳ７７１）。また、高速起動ドライバ２６０は、コールバック関数テーブル１４のコールバック関数登録数のカウンタ値を変数ｉに設定する（ステップＳ７７２）。
【０１４６】
そして、高速起動ドライバ２６０は、変数ｉを「１」ずつ減算させながら（ステップＳ７７５）、変数ｉが「１」以上である限り（ステップＳ７７３）、キードライバ２４０（ｉ＝１の場合）またはデバイスドライバ２５０−（ｉ−１）（ｉ＞１の場合）のスナップショット取得用コールバック関数を実行する（ステップＳ７７４）。すなわち、高速起動ドライバ２６０は、コールバック関数の登録順とは逆順にスナップショット取得用コールバック関数を順次実行する。
【０１４７】
ステップＳ７７３において変数ｉが「１」以上でなくなった場合、高速起動ドライバ２６０は、メモリスナップショットプログラム２９０の先頭番地にジャンプして（ステップＳ７７６）、その復帰を待つ。
【０１４８】
その後、高速起動モードによって起動が行われると、高速起動ローダ２８０から復帰する（ステップＳ７８１）。高速起動ドライバ２６０は、変数ｉに「１」を設定する（ステップＳ７８２）。そして、高速起動ドライバ２６０は、変数ｉを「１」ずつ加算させながら（ステップＳ７８５）、変数ｉがコールバック関数テーブル１４のコールバック関数登録数のカウンタ値以下である限り（ステップＳ７８３）、キードライバ２４０（ｉ＝１の場合）またはデバイスドライバ２５０−（ｉ−１）（ｉ＞１の場合）の高速起動用コールバック関数を実行する（ステップＳ７８４）。すなわち、高速起動ドライバ２６０は、コールバック関数の登録順に高速起動用コールバック関数を順次実行する。
【０１４９】
そして、ステップＳ７８３において変数ｉがコールバック関数テーブル１４のコールバック関数登録数のカウンタ値以下でなくなった場合、高速起動ドライバ２６０は、割込みを有効にして、他の割込み要求を受け付けるようにする（ステップＳ７８６）。
【０１５０】
図２９は、本発明の実施の形態における終了関数（ステップＳ７９０）の処理手順の一例を示す図である。
【０１５１】
高速起動ドライバ２６０は、ドライバの利用度数が「０」であれば正常終了として高速起動ドライバ２６０を削除し、ドライバの利用度数が「０」でなければ終了関数を異常終了する（ステップＳ７９１）。
【０１５２】
図３０は、本発明の実施の形態におけるメモリスナップショットプログラム２９０の処理手順の一例を示す図である。
【０１５３】
メモリスナップショットプログラム２９０は、スタックにＣＰＵ１１０のレジスタを保存する（ステップＳ８１１）。一般にプロセッサはスタックに積む（Ｐｕｓｈ）命令を命令セットとして有している。保存すべきレジスタはプロセッサに依存するが、ここでは汎用レジスタを想定する。レジスタを保存するのは、高速起動時にジャンプするエントリーアドレスをレジスタに格納するからである。なお、オペレーティングシステムによってはスタックサイズの大きさが保証されない場合があるため、必要最低限以外のレジスタはレジスタ退避領域１２２に保存する。
【０１５４】
メモリスナップショットプログラム２９０は、高速起動ローダ２８０の定める特定のアドレスにスタックポインタ値を保存した後、スタックポインタをレジスタ退避領域１２２にセットする（ステップＳ８１２）。すなわち、ステップＳ８１３以降で保存するレジスタの値は、レジスタ退避領域１２２に保存されるようになる。
【０１５５】
メモリスナップショットプログラム２９０は、スタックにＣＰＵ特殊レジスタを保存する（ステップＳ８１３）。この特殊レジスタは汎用レジスタ以外のレジスタであり、その種類はＣＰＵに依存する。ここでは、メモリ管理ユニット（ＭＭＵ）や、メモリ管理ユニットのテーブルなどが格納されるレジスタを想定している。
【０１５６】
メモリスナップショットプログラム２９０は、スタックにＧＰＩＯ関連レジスタを保存する（ステップＳ８１４）。保存対象となるレジスタはそのシステムに依存するが、本発明の実施の形態における最低限の機能を果たすレジスタ群を保存すると仮定する。本発明の実施の形態ではスイッチ等の入力のためにＧＰＩＯを使用するため、ＧＰＩＯ関連のレジスタを保存することを想定している。
【０１５７】
メモリスナップショットプログラム２９０は、スタックに割込コントローラ関連レジスタを保存する（ステップＳ８１５）。保存対象となるレジスタはそのシステムに依存するが、本発明の実施の形態における最低限の機能を果たすレジスタ群を保存すると仮定する。本発明の実施の形態では割込みを使用するため、割込コントローラ関連のレジスタを保存することを想定している。
【０１５８】
メモリスナップショットプログラム２９０は、スタックにクロックコントローラー関連レジスタを保存する（ステップＳ８１６）。保存対象となるレジスタはそのシステムに依存するが、本発明の実施の形態における最低限の機能を果たすレジスタ群を保存すると仮定する。本発明の実施の形態ではクロックコントローラーを使用するため、クロックコントローラー関連のレジスタを保存することを想定している。
【０１５９】
メモリスナップショットプログラム２９０は、スタックにＵＡＲＴ（Universal Asynchronous Receiver Transmitter）関連レジスタを保存する（ステップＳ８１７）。保存対象となるレジスタはそのシステムに依存するが、本発明の実施の形態における最低限の機能を果たすレジスタ群を保存すると仮定する。本発明の実施の形態ではＵＡＲＴを使用するため、ＵＡＲＴ関連のレジスタを保存することを想定している。
【０１６０】
メモリスナップショットプログラム２９０は、スタックにタイマー関連レジスタを保存する（ステップＳ８１８）。保存対象となるレジスタはそのシステムに依存するが、本発明の実施の形態における最低限の機能を果たすレジスタ群を保存すると仮定する。本発明の実施の形態ではタイマーを使用するため、タイマー関連のレジスタを保存している。
【０１６１】
メモリスナップショットプログラム２９０は、ＣＰＵ１１０のキャッシュメモリのライトバック（コピーバック）を行う（ステップＳ８１９）。プロセッサによってはライトバック用の命令を有している場合もあるが、そのような命令を有していない場合であっても複数の命令を組み合わせてライトバックを行うことができる。ここで、ライトバックを行うのは、必要なデータがＳＤＲＡＭ１２０に反映されずに高速起動が正しく行われなくなることを防止するためである。
【０１６２】
メモリスナップショットプログラム２９０は、高速起動ローダ２８０の定める特定の絶対アドレスにスタックポインタ値を保存する（ステップＳ８２１）。
【０１６３】
メモリスナップショットプログラム２９０は、ＳＤＲＡＭ１２０の内容を保存する（ステップＳ８２２）。具体的には、ＳＤＲＡＭ１２０のＯＳ使用領域１２１およびレジスタ退避領域１２２を、例えばインサーキットエミュレータ１０２によってホストＰＣ１０１に保存する。なお、このとき、メモリ管理ユニットが搭載されている場合はメモリ管理ユニットをオフにして、全て物理アドレスにおいて操作する必要がある。
【０１６４】
メモリスナップショットプログラム２９０は、保存されたＳＤＲＡＭ１２０の内容をフラッシュメモリ１３０に書き込む（ステップＳ８２３）。具体的には、ステップＳ８２２においてホストＰＣ１０１に保存されたＳＤＲＡＭ１２０の内容を、例えばインサーキットエミュレータ１０２によって、フラッシュメモリ１３０のＯＳ使用領域のＳＤＲＡＭイメージ１３５およびレジスタ退避領域のＳＤＲＡＭイメージ１３６にそれぞれ書き込む。
【０１６５】
これにより、情報処理装置の電源をオフにすることができる（ステップＳ８２４）。
【０１６６】
図３１は、本発明の実施の形態における高速起動ローダ２８０の処理手順の一例を示す図である。
【０１６７】
高速起動ローダ２８０は、ＧＰＩＯの初期化を行う（ステップＳ９１１）。本発明の実施の形態では起動モードの判別にＧＰＩＯを使用するからである。また、同様に、高速起動ローダ２８０は、ＵＡＲＴ、クロックおよびＳＤＲＡＭ１２０の初期化を行う（ステップＳ９１２乃至９１４）。これらは、フラッシュメモリ１３０からＳＤＲＡＭ１２０への転送の準備として必要な処理である。
【０１６８】
高速起動ローダ２８０は、ステップＳ８２１において保存したスタックポインタ値を取得する（ステップＳ９１５）。
【０１６９】
そして、高速起動ローダ２８０は、起動モード切替スイッチ１６０の状態をＧＰＩＯ１５０経由で読み取り、起動モードが通常起動モードであるか高速起動モードであるかを判別する（ステップＳ９１６）。起動モードが通常起動モードであれば、高速起動ローダ２８０は、オペレーティングシステムのカーネルイメージ１３３をＳＤＲＡＭ１２０のＯＳ使用領域１２１へ転送する（ステップＳ９１７）。そして、高速起動ローダ２８０は、オペレーティングシステムのエントリーポイントへジャンプし、オペレーティングシステムを通常起動する（ステップＳ９１８）。
【０１７０】
一方、起動モードが高速起動モードであれば（ステップＳ９１６）、高速起動ローダ２８０は、高速起動モードでの起動を開始する。高速起動ローダ２８０は、フラッシュメモリ１３０からＳＤＲＡＭ１２０へデータ転送する（ステップＳ９１９）。具体的には、フラッシュメモリ１３０のＯＳ使用領域のＳＤＲＡＭイメージ１３５からＳＤＲＡＭ１２０のＯＳ使用領域１２１へ、フラッシュメモリ１３０のレジスタ退避領域のＳＤＲＡＭイメージ１３６からＳＤＲＡＭ１２０のレジスタ退避領域１２２へ、それぞれ転送する。なお、転送方法はソフトウェアによって転送しても構わないが、ＤＭＡ（Direct Memory Access）等のハードウェア転送機能を備えているのであれば、それらの機能を用いた方がより高速に転送することができる。
【０１７１】
高速起動ローダ２８０は、スタックからタイマレジスタ値、ＵＡＲＴレジスタ値、クロックコントローラーレジスタ値、割込みコントローラーレジスタ値、ＧＰＩＯレジスタ値およびＣＰＵ特殊レジスタ値を取得して、それぞれを復帰させる（ステップＳ９２１乃至９２６）。
【０１７２】
そして、高速起動ローダ２８０は、ステップＳ８１２で保存したスタックポインタ値を取得して、スタックポインタを復帰させる（ステップＳ９２７）。また、高速起動ローダ２８０は、スタックからＣＰＵ１１０のレジスタ値を取得して、レジスタ値を復帰させる（ステップＳ９２８）。
【０１７３】
その後、高速起動ローダ２８０は、高速起動ドライバ２６０へジャンプする（ステップＳ９２９）。これは、全体的な流れで見れば、ステップＳ７７６でメモリスナップショットプログラム２９０へ関数コールした戻りアドレスと同じ番地にジャンプすることを意味する。
【０１７４】
このように、本発明の実施の形態によれば、スナップショットスイッチ１７０が押下された際のＳＤＲＡＭ１２０の内容を復帰点（復帰すべきプログラム位置）の実行状態としてフラッシュメモリ１３０に退避しておいて、起動時にフラッシュメモリ１３０からＳＤＲＡＭ１２０にその内容を復帰させることによって情報処理装置の高速起動を行うことができる。
【０１７５】
すなわち、本発明の実施の形態によれば、従来のハイバーネーションなどのように前回処理終了時の状態を退避するものとは異なり、任意に設定された復帰点の実行状態を退避しておいて、速やかに復帰させることができる。これにより、例えば工場出荷時に任意の実行状態を設定しておいて、これに従ってユーザの起動画面を速やかに表示することが可能となる。
【０１７６】
次に本発明の実施の形態の変形例について図面を参照して説明する。
【０１７７】
図３２は、本発明の実施の形態の第１の変形例におけるフラッシュメモリ１３０のメモリマップを示す図である。
【０１７８】
この第１の変形例では、フラッシュメモリ１３０にｎ個のＯＳ使用領域のＳＤＲＡＭイメージ１３５−１乃至ｎおよびｎ個のレジスタ退避領域のＳＤＲＡＭイメージ１３６−１乃至ｎの領域が備えられている。すなわち、フラッシュメモリ１３０にｎ組のＳＤＲＡＭイメージを保持しておいて、高速起動の際にこれらのうち１組を選択して利用するものである。
【０１７９】
そのため、この第１の変形例では、起動モード切替スイッチ１６０において、通常起動モードと高速起動モードを切り替えるとともに、高速起動モードのパラメータとしてｎ種類のモード（高速起動モード＃１乃至ｎ）を起動状態パラメータ保存領域１３７に設定できるようにする。そして、高速起動ローダ２８０においてこのパラメータを判別して、それに応じたＳＤＲＡＭイメージをＳＤＲＡＭ１２０に復帰させる。なお、起動モード切替スイッチ１６０を多機能化し、ｎ種類のモード（高速起動モード＃１乃至ｎ）の判別に使用することができるようにしてもよい。
【０１８０】
図３３は、本発明の実施の形態の第１の変形例における高速起動ローダ２８０の処理手順の一例を示す図である。
【０１８１】
この第１の変形例では、図３１の処理手順と比べて、高速起動モードにおけるデータ転送の処理が異なっている。すなわち、高速起動モードのパラメータを判別して、起動モードが高速起動モード＃ｉ（ｉは正の整数）であれば、フラッシュメモリ１３０におけるＯＳ使用領域のＳＤＲＡＭイメージ１３５−ｉおよびレジスタ退避領域のＳＤＲＡＭイメージ１３６−ｉをＳＤＲＡＭ１２０に転送する。
【０１８２】
このように、本発明の実施の形態の第１の変形例によれば、複数の起動イメージをフラッシュメモリ１３０に設けて、高速起動モードのパラメータに応じて復帰させる起動イメージを切り替えることができる。複数の起動イメージを切り替えることにより、起動の際、ユーザに対して最初に提供するインターフェースを起動モード切替スイッチ１６０に応じて変更することができる。例えば、デジタルスチルカメラの初期画面をユーザの指定によって、撮影モード画面または閲覧モード画面の何れかに設定することができるようになる。
【０１８３】
図３４は、本発明の実施の形態の第２の変形例におけるフラッシュメモリ１３０のメモリマップを示す図である。
【０１８４】
この第２の変形例では、フラッシュメモリ１３０に起動状態パラメータ保存領域１３７が備えられている。すなわち、この起動状態パラメータ保存領域１３７の内容に応じて高速起動後の追加処理を選択して実行するものである。
【０１８５】
図３５は、本発明の実施の形態の第２の変形例における高速起動デーモン２３０の高速起動用処理（ステップＳ６８０）の処理手順の一例を示す図である。
【０１８６】
この第２の変形例では、図２０の処理手順に加えて、起動状態パラメータ保存領域１３７の内容を判別して（ステップＳ６９１）、それに応じた追加処理を行う手順が備えられている（ステップＳ６９２−１乃至ｎ）。この追加処理では、ファイルシステム１３４上にあるスクリプトまたはコマンドが実行され、ＯＳ使用領域のＳＤＲＡＭイメージ１３５およびレジスタ退避領域のＳＤＲＡＭイメージ１３６だけでは復帰しきれない、その起動モード特有の機能が実現される。なお、起動モード切替スイッチ１６０を多機能化し、ｎ種類の処理（追加処理＃１乃至ｎ）の判別に使用することができるようにしてもよい。
【０１８７】
このように、本発明の実施の形態の第２の変形例によれば、１つの起動イメージをフラッシュメモリ１３０に設けて、起動状態パラメータ保存領域１３７の内容に応じて追加処理を切り替えることができる。例えば、ＬＣＤ（Liquid Crystal Display）の初期化処理は共用して、デバイスの追加処理を別々に行う場合に、特に有用である。
【０１８８】
なお、本発明の実施の形態は本発明を具現化するための一例を示したものであり、以下に示すように特許請求の範囲における発明特定事項とそれぞれ対応関係を有するが、これに限定されるものではなく本発明の要旨を逸脱しない範囲において種々の変形を施すことができる。
【０１８９】
すなわち、請求項１において、実行状態保持手段は例えば実行状態保持部１２に対応する。また、復帰点設定手段は例えば復帰点設定部１７に対応する。また、実行状態退避手段は例えば実行状態退避部１３に対応する。また、転送手段は例えば転送制御部１１に対応する。
【０１９０】
また、請求項５において、コールバック関数登録手段は例えばコールバック関数テーブル１４に対応する。
【０１９１】
また、請求項６において、起動モード設定手段は例えば起動モード設定部１６に対応する。
【０１９２】
また、請求項７において、起動モード設定手段は例えば起動モード設定部１６に対応する。また、起動処理手段は例えば起動部１５に対応する。
【０１９３】
また、請求項８において、実行状態保持手段は例えば実行状態保持部１２に対応する。また、復帰点設定手段は例えば復帰点設定部１７に対応する。また、実行状態退避手段は例えば実行状態退避部１３に対応する。
【０１９４】
また、請求項９において、情報処理装置の起動の後に復帰すべきプログラム位置を起動の前に設定する手順は例えばステップＳ６７０に対応する。また、復帰すべきプログラム位置の実行の際に実行状態保持手段に保持されている実行状態を起動の前に退避する手順は例えばステップＳ８１１乃至８２３に対応する。また、起動が行われると退避されている実行状態を実行状態保持手段に転送する手順
は例えばステップＳ９１９乃至９２８に対応する。
【０１９５】
なお、本発明の実施の形態において説明した処理手順は、これら一連の手順を有する方法として捉えてもよく、また、これら一連の手順をコンピュータに実行させるためのプログラム乃至そのプログラムを記憶する記録媒体として捉えてもよい。
【図面の簡単な説明】
【０１９６】
【図１】本発明の実施の形態における情報処理装置の機能構成例を示す図である。
【図２】本発明の実施の形態における情報処理装置１００の一構成例を示す図である。
【図３】本発明の実施の形態における情報処理装置のソフトウェア構成例を示す図である。
【図４】本発明の実施の形態における情報処理装置のメモリマップの一例を示す図である。
【図５】本発明の実施の形態におけるスナップショット取得準備処理の一例を示す図である。
【図６】本発明の実施の形態におけるスナップショット取得処理の一例を示す図である。
【図７】本発明の実施の形態における高速起動処理の一例を示す図である。
【図８】本発明の実施の形態におけるソフトウェア終了処理の一例を示す図である。
【図９】本発明の実施の形態における高速起動デーモンＡＰＩ２２０−１乃至ｍの全体の処理手順の一例を示す図である。
【図１０】本発明の実施の形態におけるアプリケーション用コールバック通知登録要求ＡＰＩの処理手順の一例を示す図である。
【図１１】本発明の実施の形態におけるスナップショット取得用コールバック処理の処理手順の一例を示す図である。
【図１２】本発明の実施の形態における高速起動用コールバック処理の処理手順の一例を示す図である。
【図１３】本発明の実施の形態におけるアプリケーション用コールバック通知削除要求ＡＰＩの処理手順の一例を示す図である。
【図１４】、本発明の実施の形態における高速起動デーモン２３０の全体の処理手順の一例を示す図である。
【図１５】本発明の実施の形態における初期化処理の処理手順の一例を示す図である。
【図１６】本発明の実施の形態におけるアプリケーション用コールバック通知登録処理の処理手順の一例を示す図である。
【図１７】本発明の実施の形態におけるアプリケーション用コールバック通知削除処理の処理手順の一例を示す図である。
【図１８】本発明の実施の形態におけるスナップショット取得用処理の処理手順の一例を示す図である。
【図１９】本発明の実施の形態におけるスナップショット取得用コールバック処理実行終了通知確認の処理手順の一例を示す図である。
【図２０】本発明の実施の形態における高速起動用処理の処理手順の一例を示す図である。
【図２１】本発明の実施の形態における高速起動用コールバック処理実行終了通知確認の処理手順の一例を示す図である。
【図２２】本発明の実施の形態における高速起動ドライバ２６０の全体の処理手順の一例を示す図である。
【図２３】本発明の実施の形態における初期化関数の処理手順の一例を示す図である。
【図２４】本発明の実施の形態におけるドライバ用コールバック関数登録関数の処理手順の一例を示す図である。
【図２５】本発明の実施の形態におけるドライバ用コールバック関数削除関数の処理手順の一例を示す図である。
【図２６】本発明の実施の形態におけるオープン関数の処理手順の一例を示す図である。
【図２７】本発明の実施の形態におけるクローズ関数の処理手順の一例を示す図である。
【図２８】本発明の実施の形態におけるコマンド処理関数の処理手順の一例を示す図である。
【図２９】本発明の実施の形態における終了関数の処理手順の一例を示す図である。
【図３０】本発明の実施の形態におけるメモリスナップショットプログラム２９０の処理手順の一例を示す図である。
【図３１】本発明の実施の形態における高速起動ローダ２８０の処理手順の一例を示す図である。
【図３２】本発明の実施の形態の第１の変形例におけるフラッシュメモリ１３０のメモリマップを示す図である。
【図３３】本発明の実施の形態の第１の変形例における高速起動ローダ２８０の処理手順の一例を示す図である。
【図３４】本発明の実施の形態の第２の変形例におけるフラッシュメモリ１３０のメモリマップを示す図である。
【図３５】本発明の実施の形態の第２の変形例における高速起動デーモン２３０の高速起動用処理の処理手順の一例を示す図である。
【符号の説明】
【０１９７】
１１  転送制御部
１２  実行状態保持部
１３  実行状態退避部
１４  コールバック関数テーブル
１５  起動部
１６  起動モード設定部
１７  復帰点設定部
１００  情報処理装置
１０１  ホストＰＣ
１０２  インサーキットエミュレータ（ＩＣＥ）
１１０  ＣＰＵ
１２０  ＳＤＲＡＭ
１３０  フラッシュメモリ
１４０  周辺Ｉ／Ｏ
１５０  ＧＰＩＯ
１６０  起動モード切替スイッチ
１７０  スナップショットスイッチ
１９０  システムバス
２１０−１乃至ｍ  アプリケーション
２２０−１乃至ｍ  高速起動デーモンＡＰＩ
２３０  高速起動デーモン
２４０  キードライバ
２５０−１乃至ｎ  デバイスドライバ
２６０  高速起動ドライバ
２７０  ＯＳカーネル
２８０  高速起動ローダ
２９０  メモリスナップショットプログラム
【図１】
2007249418.tif 000003
【図２】
2007249418.tif 000004
【図３】
2007249418.tif 000005
【図４】
2007249418.tif 000006
【図５】
2007249418.tif 000007
【図６】
2007249418.tif 000008
【図７】
2007249418.tif 000009
【図８】
2007249418.tif 000010
【図９】
2007249418.tif 000011
【図１０】
2007249418.tif 000012
【図１１】
2007249418.tif 000013
【図１２】
2007249418.tif 000014
【図１３】
2007249418.tif 000015
【図１４】
2007249418.tif 000016
【図１５】
2007249418.tif 000017
【図１６】
2007249418.tif 000018
【図１７】
2007249418.tif 000019
【図１８】
2007249418.tif 000020
【図１９】
2007249418.tif 000021
【図２０】
2007249418.tif 000022
【図２１】
2007249418.tif 000023
【図２２】
2007249418.tif 000024
【図２３】
2007249418.tif 000025
【図２４】
2007249418.tif 000026
【図２５】
2007249418.tif 000027
【図２６】
2007249418.tif 000028
【図２７】
2007249418.tif 000029
【図２８】
2007249418.tif 000030
【図２９】
2007249418.tif 000031
【図３０】
2007249418.tif 000032
【図３１】
2007249418.tif 000033
【図３２】
2007249418.tif 000034
【図３３】
2007249418.tif 000035
【図３４】
2007249418.tif 000036
【図３５】
2007249418.tif 000037