(57)【特許請求の範囲】
【請求項１】
ハイバネーションファイルを作成する際に、記憶手段の空き領域情報を格納する格納工程と、
前記ハイバネーションファイルを用いてハイバネーション起動をする際に、前記空き領域情報を参照する参照工程と、
前記空き領域情報から得た空き領域にブートローダをコピーするコピー工程と、
前記空き領域にコピーにしたブートローダに処理を遷移させる遷移工程と、を備えることを特徴とする起動高速化方法。
【請求項２】
前記ブートローダが使用するメモリ領域を、前記空き領域情報から得た空き領域内に変更する変更工程をさらに備えることを特徴とする請求項１記載の起動高速化方法。
【請求項３】
前記空き領域情報は、複数の空き領域を示すことを特徴とする請求項１記載の起動高速化方法。
【請求項４】
前記空き領域情報は、ハイバネーションを行うためのハイバネーションファイル内に設定されていることを特徴とする請求項１記載の起動高速化方法。
【請求項５】
ハイバネーションファイルを作成する際に、記憶手段の空き領域情報を格納する格納手段と、
前記ハイバネーションファイルを用いてハイバネーション起動をする際に、前記空き領域情報を参照する参照手段と、
前記空き領域情報から得た空き領域にブートローダをコピーするコピー手段と、
前記空き領域にコピーにしたブートローダに処理を遷移させる遷移手段と、を備えることを特徴とする情報処理装置。
【請求項６】
ハイバネーションファイルを作成する際に、記憶手段の空き領域情報を格納する格納工程と、
前記ハイバネーションファイルを用いてハイバネーション起動をする際に、前記空き領域情報を参照する参照工程と、
前記空き領域情報から得た空き領域にブートローダをコピーするコピー工程と、
前記空き領域にコピーにしたブートローダに処理を遷移させる遷移工程と、をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は電源をＯＮにしたときに用いて好適な起動高速化方法、情報処理装置及びプログラムに関する。
【背景技術】
【０００２】
組込み機器では、電源ＯＮ後、ユーザが使用可能になるまでに一定の起動時間が必要である。例えば、組込み機器内にLinux（登録商標）などのオペレーティングシステムを用いている場合、次のようなステップを踏んで起動処理が行われる。
【０００３】
電源ＯＮ後、ＲＯＭに格納された一般にブートローダと称される起動用プログラムがＲＡＭ上にコピーされる。ブートローダは、ブートに必要な組込み機器上のデバイスの初期化を行う。次に、ＵＳＢメモリなどの二次記憶装置からカーネルイメージをＲＡＭ上にコピーし、カーネルイメージのスタートアドレス（一般にエントリポイントと称される）に処理を遷移させる。カーネルイメージ内に処理が遷移した後、カーネルイメージ内では、組込み機器に備わる各種デバイスを使用可能にするため、デバイスドライバの初期化処理が行われる。また、カーネルはルートファイルシステムをマウントし、ライブラリを参照可能にし、アプリケーションを実行可能な状態にする。その後、各種アプリケーションを実行し、ユーザインターフェースを表示し、ユーザが組込み機器を操作可能な状態にする。
【０００４】
このように、ユーザが組込み機器を使用可能になるまでには、組込み機器内部で多くの処理が行われ、一定の起動時間を要する。組込み機器が備えるＣＰＵの性能、ＲＡＭの容量、デバイスの数や種類に拠るが、起動時間はおおよそ数秒から、３０秒ほどかかることもある。
【０００５】
ユーザが組込み機器を使用できるようになるまでの時間は短いほうが望ましい。そこで、起動を高速化する方法の１つとして、ハイバネーションを応用した方法が取り入れられてきている。ハイバネーションとは、元々、ノートＰＣや産業機械の障害復旧用などに用いられてきた技術である。この方法によれば、まず、機器の起動後のＲＡＭ上のデータ、ＣＰＵやデバイスのレジスタ情報を二次記憶装置に記録する。そして、次回の機器起動時に、この記録しておいたＲＡＭ上のデータ、レジスタ情報を書き戻すことにより、アプリケーションが起動した状態に復帰することができる方法である。このように、カーネルの初期化、及びデバイスの初期化を、前記した通常の起動手順どおり行ったあとに、二次記憶装置に記録しておいた、電源ＯＦＦ前にＲＡＭ上にあったデータなどを復帰させている。このため、通常のハイバネーションでは、概して通常の起動よりも起動時間が多くかかる。
【０００６】
そこで、ハイバネーションを応用した起動高速化方法とは、機器起動時に、前記したような通常の起動手順（カーネル初期化、デバイス初期化）を踏まず、前述した二次記憶装置に記録したデータをＲＡＭに復帰させる。そして、最小限のカーネルの初期化、デバイスの初期化処理を行う。これにより、各種初期化処理を削減、あるいは簡略化して高速に起動させる方法である。
【０００７】
以下、ハイバネーションを応用した従来の起動高速化方法について、簡単に説明する。
電源をＯＮにするとき、ＲＡＭ上には何もデータはないため、電源ＯＮ後、ＲＯＭ上の固定アドレスに処理が遷移する。ＲＯＭ上の固定アドレスには、ブートローダの開始命令が配置されている。ＲＯＭ上のブートローダはＣＰＵで実行され、ＲＯＭ上でブートローダを実行することも可能であるが、処理が遅くなり機能上制限されるため、ブートローダは自分自身のイメージをＲＡＭにコピーし、コピー先に処理を遷移させる。
【０００８】
図３（ａ）は、電源ＯＮ後、ＲＡＭにブートローダがコピーされた後の状態を示す図である。領域３０１の箇所がコピー先である。領域３０１にコピーされ、処理を遷移されたブートローダは、記録装置に関するデバイスの初期化処理を行ったあと、記録装置に記録されたハイバネーションファイルの構成情報を読み込み、ハイバネーションファイル内の各情報のサイズと位置とを取得する。ここでハイバネーションファイルが無い場合は、ハイバネーションファイルを用いず、通常の起動に遷移してもよい。その場合、ハイバネーションファイルを応用した高速起動は実行されないこととなる。
【０００９】
ハイバネーションファイルから情報を取得した後、ブートローダは構成情報より得たデータより、アドレス情報を読み込む。そして、アドレス情報の全てのデータを参照し、ブートローダ自身が配置されている領域３０１とアドレス情報２０３内のデータの領域とを比較し、重複していないか否かチェックする。ここで、重複している場合、後にデータイメージ情報をＲＡＭ上に展開する際にブートローダ自身が上書きされてしまいブートローダの実行が停止されてしまうため、重複しない位置にブートローダ自身をコピーして処理を遷移する。
【００１０】
図３（ｂ）は、領域３０４とブートローダが配置されている領域３０１とが重複した場合の一例を示す図である。前述したように重複してしまう場合、ブートローダを重複しない領域３０６にコピーして遷移する。その後、領域３０６で実行されるブートローダは、データイメージ情報のデータをアドレス情報に記述されたＲＡＭ上のアドレスに展開する。図３（ｂ）では、領域３０２〜３０５がＲＡＭ上に展開されたデータの領域である。最後にレジスタ情報２０２を読み込み、必要なレジスタの値をＣＰＵやデバイスのレジスタに書き込み、処理をカーネルに遷移させる。ブートローダの処理はここまでであり、以降、カーネルにおいて、ＣＰＵの復旧、デバイスの復旧、アプリケーションの復旧が行われる。このようにして、ハイバネーションを応用した高速起動が行われる。
【発明の概要】
【発明が解決しようとする課題】
【００１１】
しかしながら、電源ＯＮ後にハイバネーションファイルからＲＡＭ上に復元する際、ＲＡＭ上にあるブートローダ自体が、復元されたＲＡＭ上にあったデータにより上書きされることがある。これを回避するために、ＲＡＭ上の空き領域を特定し、そこにブートローダを移動する必要があった。この空き領域を特定するためには、ハイバネーションファイル内のアドレス情報を全て参照し、使用されていない空き領域を求めなければならず、そのための計算時間が多くかかるという課題があった。例えば、Linuxにおいて、電源ＯＦＦ時のＲＡＭ上のデータが１６メガバイトであったとすると、使用しているページ（１つ４キロバイトと仮定）は最低４０００個となる。電源ＯＮ時、ブートローダがＲＡＭ上の空き領域を求めるためには、最低４０００個のアドレスと比較してブートローダ自身が置かれているアドレスと重複しないかチェックしなければならない。このため装置の起動に時間がかかる要因の１つとなっていた。
【００１２】
本発明は前述の問題点に鑑み、アドレス情報を全て参照して空き領域を求める手間を不要にすることを目的としている。
【課題を解決するための手段】
【００１３】
本発明の起動高速化方法は、ハイバネーションファイルを作成する際に、記憶手段の空き領域情報を格納する格納工程と、前記ハイバネーションファイルを用いてハイバネーション起動をする際に、前記空き領域情報を参照する参照工程と、前記空き領域情報から得た空き領域にブートローダをコピーするコピー工程と、前記空き領域にコピーにしたブートローダに処理を遷移させる遷移工程と、を備えることを特徴とする。
【発明の効果】
【００１４】
本発明によれば、ブートローダがハイバネーションファイル内のアドレス情報を全て参照して空き領域を求める手間が不要となり、起動時間が短縮できる。
【図面の簡単な説明】
【００１５】
【図１】実施形態に係る情報処理装置のハード構成例を示すブロック図である。
【図２】ハイバネーションファイルの一例を示す図である。
【図３】ブートローダ自身をコピーする概要を示す図である。
【図４】ハイバネーションファイルの構成情報の概要の一例を示す図である。
【図５】ブートローダ自身をコピーし、遷移する処理手順の一例を示すフローチャートである。
【図６】ブートローダが使用する領域のアドレスをコピーし、遷移する処理手順の一例を示すフローチャートである。
【図７】ブートローダが使用する領域をコピーする概要を示す図である。
【図８】ハイバネーションファイルの構成情報の概要の一例を示す図である。
【発明を実施するための形態】
【００１６】
（第１の実施形態）
以下、本発明の第１の実施形態における起動高速化方法について図面を参照しながら説明する。
図１は、本実施形態に係る情報処理装置のハード構成例を示すブロック図である。
図１において、ＣＰＵ（Central Processing Unit）１０１は情報処理装置１００全体を制御する。ＲＡＭ（Random Access Memory）１０２は、外部装置などから供給されるプログラムやデータを一時記録する一次記憶装置である。ＲＯＭ（Read Only Memory）１０３はプログラムやパラメータを格納する。
【００１７】
バス１０４は、各ユニットを通信可能に接続するシステムバスである。入力インターフェース１０５は、ユーザの操作を受け、データを入力するポインティングデバイス、キーボード、リモコンなどの入力デバイスとのインターフェースである。出力インターフェース１０６は、情報処理装置１００の保持するデータや供給されたデータを表示するためのモニタ、ＴＶなどとのインターフェースである。記録装置１０７は情報処理装置１００に固定して設置されたハードディスクやメモリカードなどの、読み書き可能な不揮発性の記録メディア（二次記憶装置）である。
【００１８】
図２は、ハイバネーションを実行するにあたり、装置の電源ＯＦＦ直前に作成され、電源ＯＮ時に使用されるハイバネーションファイル２００の一例を示す図である。ハイバネーションファイルは、情報処理装置１００がハイバネーションを行って、電源ＯＦＦする際に、以下の順で作成される。まず、アプリケーションとデバイスとを停止する。そして、停止したアプリケーションやデバイスの保存すべきデータを、ＲＡＭ１０２上に記録する。次に、ＣＰＵ１０１やデバイスの保存すべきレジスタの値をＲＡＭ１０２上に記録する。次に、ＲＡＭ１０２上にデータがある箇所（アドレス）を記録する。最後に、ＲＡＭ１０２上に記録したデータとそのアドレス、レジスタの値を１つにまとめ、その構成情報を付加して１ファイルとする。
【００１９】
図２において、構成情報２０１は、ハイバネーションファイル２００の構成について記述された情報である。例えば、ハイバネーションファイル２００全体のサイズや、ハイバネーションファイル２００内の各情報のサイズや位置、作成日時、各情報が圧縮されているか否かといった情報が記述される。レジスタ情報２０２には、ＣＰＵ１０１やデバイスのレジスタの値が格納される。アドレス情報２０３には、後述のデータイメージ情報２０４の情報がＲＡＭ１０２上のどこにあったか、という情報が格納される。データイメージ情報２０４には、ＲＡＭ１０２上にあったデータそのものが格納される。
【００２０】
さらに、Linux（登録商標）においては、ＲＡＭ１０２上のデータはページという固定単位（多くは４キロバイト）で管理されているため、アドレス情報２０３、データイメージ情報２０４をそれに適した形式にすることが可能である。例えば、アドレス情報２０３には、ＲＡＭ１０２上で使用された全てのページの開始アドレスを持ち、データイメージ情報２０４にはアドレス情報２０３に記録された順にＲＡＭ１０２上の各ページのデータが格納されるようにすることが可能である。
【００２１】
ハイバネーションファイルを作成する際には、ハイバネーションファイル２００内に空き領域情報を記述する。例えば、図４に示すように、構成情報２０１の枠内に、空き領域の開始アドレス４０１とその空き領域のサイズ４０２とを記述する。ここで、空き領域のサイズ４０２の値はブートローダプログラムおよびプログラムが使用するメモリより大きいことが必要である。
【００２２】
また、空き領域の特定手段には特に依存しない。例えば、Linuxでは使用中のページの総計をハイバネーションファイル作成用に集計するので、その使用中のページ以外は空き領域と見なすことができる。他に、ＲＡＭ１０２上のメモリイメージを固定する前に、ブートローダ用の領域を、メモリアロケーション命令を用いて確保する。その領域を使用中のページとしてカウントせず、空き領域としてハイバネーションファイルに記述してもよい。
【００２３】
また、図４に、空き領域の開始アドレス４０１と空き領域のサイズ４０２とを格納する例を示したが、他のものであってももちろん問題ない。例えば、空き領域の開始アドレスと終了アドレスとを格納してもよい。また、Linuxであれば、連続する複数のページの開始アドレスと、ページ１つのサイズと、連続する複数のページの個数とであってもよい。ページ１つのサイズが、例えば４キロバイト固定と仮定できるなら、ページ１つのサイズをハイバネーションファイルに含めなくても問題ない。
【００２４】
また、図４に、空き領域情報をハイバネーションファイル２００の構成情報２０１に含めた例を示したが、ブートローダが参照でき、他の処理に不都合が生じなければハイバネーションファイル２００内の他の箇所に含めても問題ない。例えば、レジスタ情報２０２の箇所に含めてもよいし、アドレス情報２０３に含めてもよいし、データイメージ情報２０４の箇所に含めてもよい。また、独立した情報を示す項目として、別個、ハイバネーションファイル２００に含まれるようにしてもよい。但し、含めたデータをブートローダが空き領域情報と認識可能でなければならない。例えば、データイメージ情報２０４に含めた場合、そこにある空き領域情報をデータイメージとして扱ってはならない。
【００２５】
また、図２に示したハイバネーションファイル２００内に空き領域情報が含まれなくても、ブートローダが参照可能であれば構わない。例えば、記録装置１０７がハードディスクドライブであった場合、特定のセクタや、パーティションにあるファイルシステム外の箇所に、空き領域情報が記述されていても、ブートローダが参照できればよい。
【００２６】
次に、図５を参照しながら、装置の電源ＯＮ時にブートローダが空き領域情報を参照し、ＲＡＭ１０２にデータイメージ情報２０４を書き戻す際に上書きされない位置にブートローダ自身をコピーし、遷移する方法について説明する。
図５は、ブートローダ自身をコピーし、遷移する処理手順の一例を示すフローチャートである。
図５のステップＳ５０１において処理を開始すると、ステップＳ５０２において、ブートローダは、図２に示したハイバネーションファイル２００もしくは記録装置１０７を参照し、図４に示したような空き領域情報を参照して読み込む。
【００２７】
次に、ステップＳ５０３において、ステップＳ５０２で取得した空き領域情報から得た空き領域と、ブートローダ自身が存在する領域とが全て重複するか否かをチェックする。このチェックの結果、ブートローダ自身が存在する領域が空き領域内に全て収まる場合は、ブートローダ自身をコピーせずとも、ＲＡＭ１０２にデータイメージ情報２０４を書き戻した際に上書きされない。よって、コピーして遷移する必要はないため、ステップＳ５０６に遷移し終了する。一方、ステップＳ５０３のチェックの結果、１箇所でも重複しない部分が存在する場合は、上書きされる箇所があることとなるので、ステップＳ５０４に遷移する。
【００２８】
次に、ステップＳ５０４において、ブートローダ自身を空き領域にコピーする。そして、ステップＳ５０５において、コピー元のブートローダから、コピー先のブートローダに遷移する。具体的には、ジャンプ命令を用いて、ステップＳ５０５の処理の後に設けたポイントにジャンプする。ジャンプ後、ステップＳ５０６に遷移して処理を終了する。なお、ジャンプ後は、ブートローダは上書きされないため、データイメージ情報２０４をＲＡＭ１０２に書き戻す、レジスタ情報２０２を書き戻す、といった、通常のハイバネーションを応用した高速起動の処理を行うことができる。
【００２９】
また、ステップＳ５０５において、コピー元のブートローダから、コピー先のブートローダのエントリポイントにジャンプしてもよい。その場合、図５で示したフローチャートの処理をコピー先のブートローダが再度行うことになるが、ステップＳ５０３のチェックでは必ずＹＥＳとなるため、コピー先のブートローダを再度コピーすることはない。また、この場合、ステップＳ５０３でＹＥＳとなっているため、データイメージ情報２０４をＲＡＭ１０２に書き戻した際、ブートローダが上書きされることはもちろん無い。
【００３０】
以上説明したように、空き領域情報を作成し、ブートローダがそれを参照するようにしたので、ブートローダが空き領域を求める手間が無くなり、起動時間が短縮される。
【００３１】
（第２の実施形態）
第１の実施形態においては、ブートローダ自身が空き領域情報を参照して、コピーし遷移する方法について説明した。本実施形態では、ブートローダが使用する領域について空き領域情報を参照する場合について説明する。なお、本実施形態に係る情報処理装置の構成については図１と同様であるため、説明は省略する。
【００３２】
ここで、ブートローダが使用する領域とは、例えば、ハイバネーションファイルが圧縮コマンドやアルゴリズム、例えばgzip、bzip2、compressなどで圧縮されていた場合、ブートローダがそれを解凍するために用いる作業用領域などである。ブートローダが使用する領域がデータイメージと重複した場合、例えば、データイメージをＲＡＭに書き戻したあと、ブートローダの作業用領域として上書きしてしまい、データイメージが破壊されてしまう。本実施形態では、それを回避する方法について図６及び図７を参照しながら説明する。
【００３３】
図６のステップＳ５０１、Ｓ５０２、及びＳ５０６は、図５と同様であるため、説明は省略する。
図６のステップＳ６０１においては、ステップＳ５０２で取得した空き領域情報と、ブートローダが使用する領域とが重複するか否かをチェックする。このチェックの結果、ブートローダが使用する領域が全て空き領域内にある場合は、ステップＳ５０６に遷移して処理を終了する。一方、そうでない場合は、ステップＳ６０２に遷移する。
【００３４】
図７（ａ）において、ＲＡＭ１０２上にブートローダが領域７０１に配置されているものとする。ここで、領域７０２は空き領域であり、領域７０３は、領域７０１に存在するブートローダが使用する領域であるものする。図７（ａ）に示す例では、領域７０３は空き領域７０２と重複しないため、データイメージを上書きする可能性がある。この場合、図６ではステップＳ６０２に遷移することとなる。
【００３５】
ステップＳ６０２においては、ブートローダが使用する領域が空き領域内となるように、アドレスを書き換える。例えば、図７（ｂ）に示すように、領域７０１に存在するブートローダが使用する領域７０３を、領域７０２に示す空き領域内の領域７０４を指すようにアドレスを書き換える。プログラムにおいては、変数で保持していた領域７０３の開始アドレス（さらに、場合によっては終了アドレス）を、領域７０４を指すように変更する。そして、ステップＳ５０６に遷移して処理を終了する。
【００３６】
以上のようにして、ブートローダが、例えば解凍などの処理の際に使用する領域を、空き領域情報から取得した空き領域内から割り当てるようにする。これにより、空き領域を求める手間を無くし、ブートローダ自身以外の領域を用いる関連作業を処理することが可能となる。
【００３７】
（第３の実施形態）
第１及び第２の実施形態においては、空き領域情報は、ＲＡＭ１０２上の連続した１つの領域を示していたが、本実施形態では、ブートローダの実行に不都合がない範囲で、複数の連続した領域としてもよい。
【００３８】
例えば、ブートローダ自身及びブートローダが使用するメモリ領域全てが連続して格納できる空き領域を複数用意し、そのうちの１つを用いてもよい。ブートローダが使用するメモリ領域としては、例えば、スタックや、圧縮プログラムによって圧縮されたハイバネーションファイルを解凍するための作業用領域が挙げられる。
【００３９】
また、ブートローダ自身用の領域と、ブートローダが使用する領域とに分けられた空き領域情報であってもよい。この場合、１つ１つの空き領域は、そこに配置される予定の領域より大きければよい。つまり、ブートローダ自身を割り当てる予定の空き領域は、ブートローダ自身を配置可能な大きさであればよい。
【００４０】
また、空き領域が２つある場合は、例えば、図８に示すように格納される。図８に示す例では、構成情報２０１に、１つめの空き領域に関する情報（第１の空き領域の開始アドレス８０１及び第１の空き領域のサイズ８０２）が格納される。さらに、２つめの空き領域に関する情報（第２の空き領域の開始アドレス８０３及び第２の空き領域のサイズ８０４）が格納される。なお、図８では、開始アドレスとサイズがペアになるように示したが、開始アドレスのみ、サイズのみでまとめて格納しても、個別の空き領域の情報として識別可能であればよい。また、第１の実施形態で説明したように、ページを利用した表現であってもよい。また、空き領域が２つある例を示したが、３つ以上であっても図８と同様に処理可能である。
【００４１】
（その他の実施形態）
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【符号の説明】
【００４２】
１０１  ＣＰＵ
１０２  ＲＡＭ
１０３  ＲＯＭ
【図１】
0005683186.tif 000002
【図２】
0005683186.tif 000003
【図３】
0005683186.tif 000004
【図４】
0005683186.tif 000005
【図５】
0005683186.tif 000006
【図６】
0005683186.tif 000007
【図７】
0005683186.tif 000008
【図８】
0005683186.tif 000009