(57)【特許請求の範囲】
【請求項１】
揮発性メモリと、
ハイバネーションイメージを保持する不揮発性メモリと、
前記揮発性メモリに展開するカーネルの初期化をしている間に、前記不揮発性メモリに保持されている前記ハイバネーションイメージの一部を、前記カーネルの初期化に利用しない領域へ読み込む読み込み手段と、
前記カーネルの初期化の後に残りのハイバネーションイメージを前記揮発性メモリに読み込んでシステムを起動させる起動手段とを有することを特徴とする情報処理装置。
【請求項２】
前記揮発性メモリに、前記カーネルの初期化に利用するカーネル管理領域と前記カーネルの初期化に利用しないカーネル管理外領域とを割り当てるメモリ管理手段をさらに有することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記起動手段は、前記不揮発性メモリに前記ハイバネーションイメージが退避されていない場合は通常起動を行うことを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
前記不揮発性メモリに前記ハイバネーションイメージを退避させる退避手段をさらに有することを特徴とする請求項１乃至３のいずれか１項に記載の情報処理装置。
【請求項５】
退避手段は、ファイルシステムに依存しない型式のファイルのハイバネーションイメージを前記不揮発性メモリに退避することを特徴とする請求項１乃至４のいずれか１項に記載の情報処理装置。
【請求項６】
前記メモリ管理手段は、前記カーネル管理領域のサイズを、前記カーネルの初期化に最低限必要なサイズ以上とすることを特徴とする請求項２に記載の情報処理装置。
【請求項７】
前記読み込み手段は、ＤＭＡコントローラを用い、前記不揮発性メモリに保持されている前記ハイバネーションイメージを前記カーネルの初期化に利用しない領域へ読み込むことを特徴とする請求項１乃至６のいずれか１項に記載の情報処理装置。
【請求項８】
揮発性メモリと、ハイバネーションイメージを保持する不揮発性メモリと、を有する情報処理装置の起動方法であって、
前記揮発性メモリに展開するカーネルの初期化をしている間に、前記不揮発性メモリに保持されている前記ハイバネーションイメージの一部を、前記カーネルの初期化に利用しない領域へ読み込む読み込み工程と、
前記カーネルの初期化の後に残りのハイバネーションイメージを前記揮発性メモリに読み込んでシステムを起動させる起動工程とを有することを特徴とする起動方法。
【請求項９】
揮発性メモリと、ハイバネーションイメージを保持する不揮発性メモリと、を備えるコンピュータを、
前記揮発性メモリに展開するカーネルの初期化をしている間に、前記不揮発性メモリに保持されている前記ハイバネーションイメージの一部を、前記カーネルの初期化に利用しない領域へ読み込む読み込み手段と、
前記カーネルの初期化の後に残りのハイバネーションイメージを前記揮発性メモリに読み込んでシステムを起動させる起動手段として機能させることを特徴とするプログラム。
【発明の詳細な説明】
【発明の詳細な説明】
【０００１】
【技術分野】
【０００２】
本発明は、ハイバネーション機構を有する情報処理装置を高速起動する技術に関する。
【背景技術】
【０００３】
近年、情報処理装置において待機状態の消費電力を低減することができるハイバネーションが注目されている。
ハイバネーションとは、システム中断機構である。システムが起動している状態でメモリやＣＰＵレジスタの情報（以下では、「ハイバネーションイメージ」と称する）をハードディスクなどの不揮発性記憶装置に退避する。その後電源を切っても、次回起動時は当該ハイバネーションイメージを読み込むことで以前と同じ状態に復帰する（以下では、「ハイバネーション起動」と称する）。ハイバネーションは、システムの起動時間短縮を目的として用いられることもある。
ハイバネーション起動は大きく２種類に分類される。ＢＩＯＳ機能もしくはブートローダ機能により復帰を行う方式と、オペレーティングシステムのカーネル機能により復帰を行う方式が存在する。
カーネル機能によるハイバネーション起動では、カーネルの初期化をほぼ全て行った後、予め不揮発性記憶装置に記憶されたハイバネーションイメージを読み込むことで状態の復帰を行う。ＢＩＯＳによるハイバネーションと比較すると、通常の起動シーケンスを実行することでデバイスの初期化を行う為、汎用性に優れており、様々な機器のデバイスドライバをハイバネーションに対応させることが容易である。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１０−１５７０１７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、カーネル機能によるハイバネーションは、ＢＩＯＳやブートローダによるハイバネーションと比較すると、起動シーケンスに伴う処理時間を要することから、起動時間が長くなってしまう。
そこで、特許文献１のように、ハイバネーション起動時に初期化不要なデバイスを初期化対象から外すことで、起動時間を短縮するものがある。しかしながら、初期化対象から外すデバイスの選別をしなければならず、汎用性を欠いてしまう。
一般的に、ＤＭＡコントローラを用いると、特定の処理と並行し記憶装置間で情報を読み書きすることができる。ハイバネーション起動に本機構を組み込むことができると、カーネル初期化と並行して事前にハイバネーションイメージを読み込むことが可能になり、ハイバネーション起動時間を短縮することができる。ただし、Ｌｉｎｕｘ（登録商標）などの複雑なメモリ管理機構を備えたカーネル上では、ＤＭＡコントローラがカーネル管理のメモリ領域の任意のアドレスにデータを書き込むことができない。そのため、従来のハイバネーション起動方式では、カーネル初期化と並行してハイバネーションイメージを並行して読み込むことが困難である。
【課題を解決するための手段】
【０００６】
本発明に係る情報処理装置は、揮発性メモリと、ハイバネーションイメージを保持する不揮発性メモリと、前記揮発性メモリに展開するカーネルの初期化をしている間に、前記不揮発性メモリに保持されている前記ハイバネーションイメージの一部を、前記カーネルの初期化に利用しない領域へ読み込む読み込み手段と、前記カーネルの初期化の後に残りのハイバネーションイメージを前記揮発性メモリに読み込んでシステムを起動させる起動手段とを有することを特徴とする。
【発明の効果】
【０００７】
本発明によればカーネルの初期化と並行してハイバネーションイメージを先読みすることができるので、従来に比べシステムの高速な起動が可能になる。
【図面の簡単な説明】
【０００８】
【図１】情報処理装置の構成を示す概略図である。
【図２】本発明のハイバネーション機構の機能構成を示す概略図である。
【図３】ハイバネーションイメージの生成処理を示すフローチャートである。
【図４】ハイバネーションイメージのフォーマットを示す図である。
【図５】システムの起動処理を示すフローチャートである。
【図６】カーネルとＤＭＡコントローラのアクセス領域の差異について示す図である。
【図７】ハイバネーションイメージ復帰処理を示すフローチャートである。
【発明を実施するための形態】
【０００９】
＜実施形態１＞
図１は、本発明の１実施形態を適用可能な情報処理装置の利用例を示す図である。
【００１０】
図１において、１０１はＣＰＵであり、１０２はダイレクトメモリアクセスコントローラ（以下、ＤＭＡＣと称す）である。１０３はメモリでありＤＲＡＭ等の安価で大容量な揮発性メモリ（ＳＤＲＡＭなど）を含む、ＣＰＵ１０１もしくはＤＭＡＣ１０２によってデータの読み書きが行われる。１０４は入出力制御部（以下、Ｉ／Ｏコントローラと称す）であり、１０５は不揮発性記憶装置（フラッシュメモリ、ＨＤＤ、ＳＳＤなどの不揮発性メモリ）である。
【００１１】
ＣＰＵ１０１は不図示のＲＯＭのプログラムをメモリ１０３に展開し、メモリ１０３からプログラムをフェッチして後述の処理を実行する。
【００１２】
ハイバネーションにより生成されるハイバネーションイメージは、不揮発性記憶装置１０５に保存され、Ｉ／Ｏコントローラ１０４を介して読み書きが行われる。１０６はその他のデバイスであり、ＣＰＵ１０１によって初期化される。デバイス１０６は複数あってもよい。
【００１３】
図２は、本発明のハイバネーション機構の構成を示す図である。２０１ａ、２０１ｂ、２０１ｃはどれも同一のメモリである。ここで、２０１ａはハイバネーションイメージ退避時のメモリであり、２０１ｂは並行読み込み時のメモリであり、２０１ｃは並行読み込み後におけるハイバネーションイメージ復帰時のメモリである。２０２はハイバネーションイメージを記憶する為の不揮発性記憶装置である。不揮発性記憶装置２０２は、カーネルコードやハイバネーションイメージ、スワップデータを保持する。
【００１４】
２０３は退避部である。ユーザがシステム中断状態への移行を要求すると、退避部２０３は、ハイバネーションイメージ及びスワップデータをメモリ２０１ａのデータを不揮発性記憶装置２０２へ出力する。
【００１５】
２０４はメモリ制限部であり、２０５はメモリ初期化機構である。メモリ制限部２０４はメモリ初期化機構２０５に対してオペレーティングシステムが使用可能なメモリ領域サイズを制限し、メモリ初期化機構２０５はこの情報をもとにメモリ２０１ｂの初期化を行う。２０６はカーネル初期化機構である。カーネル初期化機構２０６は、不揮発性記憶装置に格納されているカーネルコードに基づいて、メモリ２０１ｂのメモリ初期化機構２０５によって初期化された領域であるカーネル管理領域を用いてカーネルの初期化を行う。
【００１６】
２０７は並行読み込み部であり、２０８はＤＭＡＣである。並行読み込み部２０７は、ＤＭＡＣ２０８を用いることでカーネル初期化機構２０６の初期化処理と並行し、不揮発性記憶装置２０２に保存されたハイバネーションイメージを読み込む。なお、初期化処理中の並行読み込み部２０７におけるＤＭＡＣ２０８のハイバネーションイメージ出力先は、メモリ初期化機構２０５によって初期化されていない領域である、カーネル管理外領域に限定される。
【００１７】
２０９は復帰部である。復帰部２０９は、不揮発性記憶装置２０２からメモリ２０１ｃへ、並行読み込み部２０７によって読み込んでいないハイバネーションイメージを、カーネル管理外領域と、カーネル管理領域へ読み込む。復帰部２０９が各ハイバネーションイメージを読み込むことで、メモリ２０１ｃは一部のデータを除きメモリ２０１ａの状態に復元される。
【００１８】
本実施形態では、Ｌｉｎｕｘ（登録商標）のバージョン２．６．１８を従来手法として、ハイバネーション起動の高速化について説明する。
【００１９】
まず、本実施形態におけるハイバネーションイメージ生成の流れを示す。
【００２０】
図３は、システム中断状態への移行が要求されてからシステムを停止するまでの流れを示したフローチャートである。ステップＳ３００でプロセススケジューラの停止、ステップＳ３０１で各デバイスの停止、ステップＳ３０２でスワップアウト、ステップＳ３０３でＣＰＵレジスタの退避を行う。ステップＳ３０４で、ハイバネーションイメージ生成中であるかどうかを判定する。通常はハイバネーションイメージ生成中であるためステップＳ３０５へ遷移する。ここで、ステップＳ３０８へ遷移するケースはハイバネーション起動によりシステムがステップＳ３０３直後の状態に復元されたケースでありその詳細については後述する。ステップＳ３０５でハイバネーションイメージの出力、ステップＳ３０６で各デバイスの再開、ステップＳ３０７でシステムの停止を行う。一方、ステップＳ３０８では各デバイスの再開、ステップＳ３０９でプロセススケジューラの再開を行う。ステップＳ３０６とステップＳ３０８の処理内容は同一である。
【００２１】
ユーザ（又はユーザアプリケーション）は、仮想ファイルシステムへアクセスすることで、システム中断状態への移行を要求する。ステップＳ３００、ステップＳ３０１、ステップＳ３０２、ステップＳ３０６、ステップＳ３０７、ステップＳ３０８、ステップＳ３０９の実行には、Ｌｉｎｕｘ（登録商標）にもある従来どおりの機能を用いる。
【００２２】
ステップＳ３０２では、メモリに展開しているプロセスに関するデータを予めメモリから不揮発性記憶装置のスワップ領域へスワップアウトすることで、作業領域の確保し、ハイバネーションイメージサイズを縮小させ、起動時間を短縮する。スワップアウトサイズは、予めユーザ（又はユーザアプリケーション）が仮想ファイルシステムにアクセスして指定する。
【００２３】
ステップＳ３０３は、専用の関数の中で行う。そして、関数から抜ける際に値の書き戻しが必要なＣＰＵ汎用データレジスタの値を、パラメータとしてメモリ上の変数へ退避する。ｘ８６プロセッサでは、ｅｓｐ、ｅｂｘ、ｅｂｐ、ｅｓｉ、ｅｄｉが相当する。復帰時にはメモリ及び上記ＣＰＵレジスタを書き戻して関数から抜けることで、システム停止前に実行している関数に復帰することができる。
【００２４】
ステップＳ３０５では、メモリ上に残っているデータをハイバネーションイメージとして不揮発性記憶装置へ出力する。図４は、ハイバネーションイメージのフォーマットを示した図である。識別子４００は、有効なハイバネーションイメージであるかどうかを示す。カーネル管理外メモリ４０１は、カーネル管理外領域に含まれるデータ数を示す。データ総数４０２は、カーネル管理領域及びカーネル管理外領域の両方の領域に含まれるデータ数の合計を示す。アドレス４０３は、ハイバネーションイメージのアドレス群を格納する。データ４０４は、ハイバネーションイメージのデータ群を格納する。４００〜４０３はヘッダ部、４０４はデータ部である。
【００２５】
データ４０４は、メモリ１０３上のデータをページ単位で格納する。ただし、カーネルのコード領域及びハイバネーション処理に関するグローバル変数（以下、ハイバネーショングローバル変数と称す）、スワップアウトしたデータについては含めない。なお、アドレス４０３とデータ４０４は対応関係にあり、データ４０４のＮ番目に格納されたデータの配置先は、アドレス４０３のＮ番目に格納されたアドレスとなる。アドレス４０３の情報の個数と、データ４０４の情報の個数は、それぞれデータ数４０２と等しい。
【００２６】
アドレス４０３及びデータ４０４に対応づけて格納するデータは、前方にカーネル管理外領域のデータを、後方にカーネル管理領域のデータを配置することが好ましい。これは、カーネル初期化時にカーネル管理メモリへの復帰をさせないことが目的である。並行読み込み部では、読み込み可能なデータ数をカーネル管理外データ数４０１に制限することでデータ４０４の前方のデータのみ読み込むようにし、カーネル管理メモリへの読み込みを行わないようにする。
【００２７】
ハイバネーションイメージの格納は、ハイバネーション起動の都合上、パーティションとして定義されていない領域（非パーティション領域）へ、特定のセクタから順に行う。このセクタ番号は、予めカーネルのコード領域に直接設定しておくことが好ましい。また、デバイスを停止しているためＬｉｎｕｘ（登録商標）の機能を用いて不揮発性記憶装置へデータを出力することができない。そのため、専用の出力機構をカーネルのコード領域に追記し、これを利用して不揮発性記憶装置への出力を行う。
【００２８】
次に、本実施形態におけるハイバネーション起動の流れを示す。
【００２９】
図５は、情報処理装置がＯＮになりシステムが起動するまでのフローチャートである。ステップＳ５００では、ＢＩＯＳの初期化を行う。ステップＳ５０１では、ブートローダがカーネルのロード及び展開を行う。ステップＳ５０２では、不記憶性記憶装置１０５にハイバネーションイメージが存在するかどうかを確認する。ハイバネーションイメージが存在する場合、ステップＳ５０３ａでカーネルの初期化を行い、ステップＳ５０４でハイバネーションイメージを復帰し、ハイバネーション起動を完了する。ステップＳ５０３ａでは、カーネル初期化と並行してＤＭＡＣによる並行読み込みを行う。ハイバネーションイメージが存在しない場合は、通常起動するためにステップＳ５０３ｂでカーネルの初期化を行い、システムの起動を完了する。なお、ステップＳ５０２とステップＳ５０４はカーネル初期化処理の一部として実行されてもよい。
【００３０】
ステップＳ５０２では、ＤＭＡＣを初期化し、ハイバネーションイメージ格納先となる不揮発性記憶装置の特定セクタを先頭とする領域からメモリ１０３へハイバネーションイメージのヘッダ部を読み込み、ＣＰＵ１０１の処理によってハイバネーションイメージの有無を確認する。なお、ヘッダ部の読み込み先は、復帰時に上書きされることを避けるため、ハイバネーショングローバル変数へ行うことが好ましい。識別子４００に所定の情報が書き込まれている場合、ハイバネーションイメージが不揮発性記憶装置に格納されていると判定できる。そして、不揮発性記憶装置の識別子４００の情報をクリアしてハイバネーション起動を開始する。一方で、ハイバネーションイメージが不揮発性記憶装置に格納されていないと判定される場合、ステップＳ５０３ｂにおいてカーネル初期化を行い、システムを通常起動する。
【００３１】
Ｌｉｎｕｘ（登録商標）独自のハイバネーション機構では、カーネル機能の初期化を完了した後にハイバネーションイメージの読み込みを行うため、カーネル機能を用いてハイバネーションイメージを読み込む際に不揮発性記憶装置のパーティション情報やファイル情報を利用することができる。しかし、本実施形態の手法では、カーネル初期化の開始と並行してハイバネーションイメージの読み込みを開始するため、前述のパーティション情報を利用することはできない。従って、パーティション情報では区切られない領域（パーティション情報によって定義しない領域）を不揮発性記憶装置に設け、ファイルシステムに依存しない型式の独自フォーマットのデータにしたハイバネーションイメージをこの領域に格納することが好ましい。
【００３２】
ステップＳ５０３ａのカーネルの初期化は、ステップＳ５０３ｂのハイバネーションイメージを利用しない初期化と比べて大きく２点異なる。
【００３３】
まず１点目の相違点は、初期化をするシステム（カーネル）が利用可能なメモリサイズに制限を加える点である。Ｌｉｎｕｘ（登録商標）におけるメモリ管理機構による初期化では、ＢＩＯＳから得られたメモリマップをもとにメモリの初期化を行う。一方、本実施形態では、Ｌｉｎｕｘ（登録商標）の機能を用いてメモリの初期化を行う前にメモリマップの書き換えを行う。
【００３４】
メモリマップの書き換えでは、特定の値（アドレス）を指定することにより、その値（アドレス）までのメモリ領域のみをカーネルに使用させるように設定することができる。この値として、カーネルの初期化（システム初期化）を完了する為の作業領域としての最低限必要なサイズ以上を指定することが好ましい。変更した領域サイズ（メモリマップ）は、システム復帰後の動作に影響を与えないので特別な処理により戻す必要はない。これは、ハイバネーションイメージを読み込むことによって、領域サイズに関するデータが上書きされるためである。上述で説明したカーネルに使用させるメモリ領域（以降、カーネル管理領域）を設定するための情報は、カーネルのコード領域に直接設定しておくことが好ましい。
【００３５】
以上の処理により、カーネル管理領域とカーネル管理外領域の２種類の領域をメモリ１０３に確保する。なお制限サイズ比べて十分なサイズのメモリが搭載されている場合、カーネル管理領域のサイズは制限サイズと等しくなり、そしてメモリの全体サイズからカーネル管理領域を差し引いたサイズがカーネル管理外領域に相当する（さらに別の領域を設けてもよい）。しかし、制限サイズと比べメモリが十分に搭載されていない場合、カーネル管理外領域は確保しない。
【００３６】
次に２点目の相違点は、カーネル初期化と並行して、ハイバネーションイメージを不揮発性記憶装置１０５からメモリ１０３へ読み込む点である。
【００３７】
並行読み込みの手段としてＤＭＡＣ（ＤＭＡコントローラ）を用い、ハイバネーションイメージの退避直前メモリ配置を復元するように、ハイバネーションイメージをメモリに読み込む。ただし、全メモリ領域にハイバネーションイメージを一度に復帰しようとすると、カーネル管理領域はカーネル初期化において利用されるため、初期化処理に利用するコードが上書きされてしまう恐れがある。その為、並行読み込み部の段階では、メモリの初期化を行わなかったカーネル管理外領域にのみハイバネーションイメージを読み込む。従って、カーネル管理外領域が確保されていない場合、並行読み込みは行わない。
【００３８】
この並行読み込みについて示したものが図６である。６００はメモリであり、カーネル管理領域６００ａとカーネル管理外領域６００ｂを有する。６０１はＣＰＵ１０１によって実行されているカーネルであり、ＣＰＵ１０１によってカーネル管理領域６００ａにのみアクセスする。６０２はＤＭＡＣ、６０３は不揮発性記憶装置であり、ＤＭＡＣ６０２はカーネルによる初期化中はカーネル管理外領域６００ｂにのみハイバネーションイメージを転送する。
【００３９】
ＤＭＡＣ６０２は、データ転送に用いるパラメータ（転送元アドレス、転送先アドレス、データサイズ）をＣＰＵ１０１により指定すると、一定サイズを上限として不揮発性記憶装置６０３からメモリへＣＰＵとは非同期に転送を行う。出力完了後は、ＣＰＵ１０１により再び新たなパラメータを指定する必要がある。そこで、ＤＭＡＣ６０２が所定サイズの転送を完了したことをトリガとしてＣＰＵ１０１に割り込みをかけるように設定し、アドレス４０３をもとに次に読むべきデータを指定して新たな読み込みを実行することが好ましい。また、Ｌｏｃａｌ  ＡＰＩＣ（Ａｄｖａｎｃｅｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｉｎｔｅｒｒｕｐｔ  Ｃｏｎｔｒｏｌｌｅｒ）タイマを利用して一定時間ごとに割り込みを発生させ、ＣＰＵがＤＭＡＣの読み込み状況を確認し、読み込みが完了していればアドレス４０３をもとに次に読むべきデータを指定して新たな読み込みを実行するようにしてもよい。
【００４０】
ＤＭＡＣ６０２によるハイバネーションイメージの並行読み込みは、カーネル管理外領域に読む込むべき全てのハイバネーションイメージを読み込み終えるか、カーネルによる初期化終了後にハイバネーションイメージをカーネル管理領域・管理外領域を問わず読み込み始める直前まで継続して行われる。
【００４１】
ただし、ＡＴＡ（Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ）の初期化中はＤＭＡ転送を行うことができない。そのため、ＡＴＡの初期化前にＤＭＡ転送の完了を待ちＤＭＡ転送を一時停止し、ＡＴＡの初期化後にＤＭＡ転送を再開する。
【００４２】
ステップＳ５０４では、不揮発性記憶装置６０３のハイバネーションイメージのうちのメモリ６００に読み込んでいない部分をメモリ６００へ読み込む。
【００４３】
図７は、ステップＳ５０４の詳細であり、本実施形態におけるハイバネーションイメージ復帰処理の流れである。ステップＳ７００でプロセススケジューラの停止、ステップＳ７０１でデバイスの停止、ステップＳ７０２でスタックの切り替え、ステップＳ７０３でＤＭＡＣによる並行読み込みの停止、ステップＳ７０４でＣＰＵ１０１によるハイバネーションイメージの読み込み、ステップＳ７０５でＣＰＵレジスタの復帰を行う。
【００４４】
ステップＳ７０２では、カーネル初期化用のスタックからハイバネーションイメージ復帰用のスタックに切り替えを行う。ハイバネーションイメージ復帰用のスタックは、復帰中に内容が上書きされないよう、ハイバネーションイメージ復帰中に利用されないメモリ領域を指定する。なお、スタックの復帰はＳ７０５で行う。ステップＳ７０３では、動作中のＤＭＡＣが停止するまで待機を行う。既に並行読み込みが完了している場合、待機は行わない。
【００４５】
ステップＳ７０４では、カーネル管理外領域に読み込むべきハイバネーションイメージの未読み込み部分と、カーネル管理領域に読み込むべきハイバネーションイメージの部分を読み込む。この処理を、ＤＭＡ転送済みカウンタがデータ数４０２と等しくなるまで繰り返す。
【００４６】
ステップＳ７０５は、専用の関数の中で行う。まず、ＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ）が有ればＴＬＢフラッシュを行う。ｘ８６プロセッサでこれを行うには、ＣＲ３レジスタの値を一度他のレジスタに退避し、再び退避した値でＣＲ３レジスタを上書きする。そして、ＣＰＵ退避時に用いた変数から汎用データレジスタへデータを復帰する。さらに、不揮発性記憶装置２０２へスワップアウトしたスワップデータについても復帰させる。
【００４７】
上記関数から抜けること、ハイバネーショングローバル変数やメモリの未使用領域を除き、ステップＳ３０３直後と同一の状態へ復帰することができる。ステップＳ３０４では、ハイバネーションイメージ生成中ではないため判定結果が偽となりＳ３０８へ遷移する。この判定には、ハイバネーショングローバル変数を用いる。ステップＳ３０８で各デバイスを再開し、ステップＳ３０９でプロセススケジューラの再開を行い、ハイバネーション起動を完了する。
【００４８】
ステップＳ３０２でスワップアウトしたデータについては、システム復帰後にストレージからメモリへ読み込む。例えば、Ｌｉｎｕｘ（登録商標）が備えるスワップ機構同様、ページフォルト発生に応じてスワップデータをメモリへ書き戻す。なお、カーネル初期化中にハイバネーションイメージの全てを並行してメモリに転送できるような場合には、ステップＳ７０３をスキップしカーネル管理領域についてはカーネルのメモリ管理機能で解放する等してもよい。
【００４９】
以上のように本実施形態では、ハイバネーションイメージを利用して、システムを再び起動する際に、カーネルによる初期化と並行してハイバネーションイメージの部分を読み込むことにより、従来の方法と比べて高速にシステムを復元することができる。また、本実施形態によればハイバネーション起動において、メモリ管理機構によるメモリの初期化時間を短縮することもできる。
【００５０】
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１】
0005783809.tif 000002
【図２】
0005783809.tif 000003
【図３】
0005783809.tif 000004
【図４】
0005783809.tif 000005
【図５】
0005783809.tif 000006
【図６】
0005783809.tif 000007
【図７】
0005783809.tif 000008