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