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