揮発性メモリと、ハイバネーションイメージを保持する不揮発性メモリと、前記揮発性メモリに展開するカーネルの初期化と並行して、前記不揮発性メモリに保持されている前記ハイバネーションイメージの一部を、前記カーネルの初期化に利用しない領域へ読み込む読み込み手段と、前記カーネルの初期化の後に残りのハイバネーションイメージを前記揮発性メモリに読み込んでシステムを起動させる起動手段とを有することを特徴とする情報処理装置。前記揮発性メモリに、前記カーネルの初期化に利用するカーネル管理領域と前記カーネルの初期化に利用しないカーネル管理外領域とを割り当てるメモリ管理手段をさらに有することを特徴とする請求項1に記載の情報処理方法。前記起動手段は、前記不揮発性メモリに前記ハイバネーションイメージが退避されていない場合は通常起動を行うことを特徴とする請求項1又は2に記載の情報処理装置。前記不揮発性メモリに前記ハイバネーションイメージを退避させる退避手段をさらに有することを特徴とする請求項1乃至3のいずれか1項に記載の情報処理装置。退避手段は、ファイルシステムに依存しない型式のファイルのハイバネーションイメージを前記不揮発性メモリに退避することを特徴とする請求項1乃至4のいずれか1項に記載の情報処理装置。前記メモリ管理手段は、前記カーネル管理領域のサイズを、前記カーネルの初期化に最低限必要なサイズ以上とすることを特徴とする請求項2に記載の情報処理装置。前記読み込み手段は、DMAコントローラを用い、前記不揮発性メモリに保持されている前記ハイバネーションイメージを前記カーネルの初期化に利用しない領域へ読み込むことを特徴とする請求項1乃至6のいずれか1項に記載の情報処理装置。揮発性メモリと、ハイバネーションイメージを保持する不揮発性メモリと、を有する情報処理装置の起動方法であって、前記揮発性メモリに展開するカーネルの初期化と並行して、前記不揮発性メモリに保持されている前記ハイバネーションイメージの一部を、前記カーネルの初期化に利用しない領域へ読み込む読み込み工程と、前記カーネルの初期化の後に残りのハイバネーションイメージを前記揮発性メモリに読み込んでシステムを起動させる起動工程とを有することを特徴とする起動方法。揮発性メモリと、ハイバネーションイメージを保持する不揮発性メモリと、を備えるコンピュータを、前記揮発性メモリに展開するカーネルの初期化と並行して、前記不揮発性メモリに保持されている前記ハイバネーションイメージの一部を、前記カーネルの初期化に利用しない領域へ読み込む読み込み手段と、前記カーネルの初期化の後に残りのハイバネーションイメージを前記揮発性メモリに読み込んでシステムを起動させる起動手段として機能させることを特徴とするプログラム。しかし、カーネル機能によるハイバネーションは、BIOSやブートローダによるハイバネーションと比較すると、起動シーケンスに伴う処理時間を要することから、起動時間が長くなってしまう。そこで、特許文献1のように、ハイバネーション起動時に初期化不要なデバイスを初期化対象から外すことで、起動時間を短縮するものがある。しかしながら、初期化対象から外すデバイスの選別をしなければならず、汎用性を欠いてしまう。一般的に、DMAコントローラを用いると、特定の処理と並行し記憶装置間で情報を読み書きすることができる。ハイバネーション起動に本機構を組み込むことができると、カーネル初期化と並行して事前にハイバネーションイメージを読み込むことが可能になり、ハイバネーション起動時間を短縮することができる。ただし、Linux登録商標などの複雑なメモリ管理機構を備えたカーネル上では、DMAコントローラがカーネル管理のメモリ領域の任意のアドレスにデータを書き込むことができない。そのため、従来のハイバネーション起動方式では、カーネル初期化と並行してハイバネーションイメージを並行して読み込むことが困難である。本発明に係る情報処理装置は、揮発性メモリと、ハイバネーションイメージを保持する不揮発性メモリと、前記揮発性メモリに展開するカーネルの初期化と並行して、前記不揮発性メモリに保持されている前記ハイバネーションイメージの一部を、前記カーネルの初期化に利用しない領域へ読み込む読み込み手段と、前記カーネルの初期化の後に残りのハイバネーションイメージを前記揮発性メモリに読み込んでシステムを起動させる起動手段とを有することを特徴とする。本発明によればカーネルの初期化と並行してハイバネーションイメージを先読みすることができるので、従来に比べシステムの高速な起動が可能になる。<実施形態1>図1は、本発明の1実施形態を適用可能な情報処理装置の利用例を示す図である。図1において、101はCPUであり、102はダイレクトメモリアクセスコントローラ以下、DMACと称すである。103はメモリでありDRAM等の安価で大容量な揮発性メモリSDRAMなどを含む、CPU101もしくはDMAC102によってデータの読み書きが行われる。104は入出力制御部以下、I/Oコントローラと称すであり、105は不揮発性記憶装置フラッシュメモリ、HDD、SSDなどの不揮発性メモリである。CPU101は不図示のROMのプログラムをメモリ103に展開し、メモリ103からプログラムをフェッチして後述の処理を実行する。ハイバネーションにより生成されるハイバネーションイメージは、不揮発性記憶装置105に保存され、I/Oコントローラ104を介して読み書きが行われる。106はその他のデバイスであり、CPU101によって初期化される。デバイス106は複数あってもよい。図2は、本発明のハイバネーション機構の構成を示す図である。201a、201b、201cはどれも同一のメモリである。ここで、201aはハイバネーションイメージ退避時のメモリであり、201bは並行読み込み時のメモリであり、201cは並行読み込み後におけるハイバネーションイメージ復帰時のメモリである。202はハイバネーションイメージを記憶する為の不揮発性記憶装置である。不揮発性記憶装置202は、カーネルコードやハイバネーションイメージ、スワップデータを保持する。203は退避部である。ユーザがシステム中断状態への移行を要求すると、退避部203は、ハイバネーションイメージ及びスワップデータをメモリ201aのデータを不揮発性記憶装置202へ出力する。204はメモリ制限部であり、205はメモリ初期化機構である。メモリ制限部204はメモリ初期化機構205に対してオペレーティングシステムが使用可能なメモリ領域サイズを制限し、メモリ初期化機構205はこの情報をもとにメモリ201bの初期化を行う。206はカーネル初期化機構である。カーネル初期化機構206は、不揮発性記憶装置に格納されているカーネルコードに基づいて、メモリ201bのメモリ初期化機構205によって初期化された領域であるカーネル管理領域を用いてカーネルの初期化を行う。207は並行読み込み部であり、208はDMACである。並行読み込み部207は、DMAC208を用いることでカーネル初期化機構206の初期化処理と並行し、不揮発性記憶装置202に保存されたハイバネーションイメージを読み込む。なお、初期化処理中の並行読み込み部207におけるDMAC208のハイバネーションイメージ出力先は、メモリ初期化機構205によって初期化されていない領域である、カーネル管理外領域に限定される。209は復帰部である。復帰部209は、不揮発性記憶装置202からメモリ201cへ、並行読み込み部207によって読み込んでいないハイバネーションイメージを、カーネル管理外領域と、カーネル管理領域へ読み込む。復帰部209が各ハイバネーションイメージを読み込むことで、メモリ201cは一部のデータを除きメモリ201aの状態に復元される。本実施形態では、Linux登録商標のバージョン2.6.18を従来手法として、ハイバネーション起動の高速化について説明する。まず、本実施形態におけるハイバネーションイメージ生成の流れを示す。図3は、システム中断状態への移行が要求されてからシステムを停止するまでの流れを示したフローチャートである。ステップS300でプロセススケジューラの停止、ステップS301で各デバイスの停止、ステップS302でスワップアウト、ステップS303でCPUレジスタの退避を行う。ステップS304で、ハイバネーションイメージ生成中であるかどうかを判定する。通常はハイバネーションイメージ生成中であるためステップS305へ遷移する。ここで、ステップS308へ遷移するケースはハイバネーション起動によりシステムがステップS303直後の状態に復元されたケースでありその詳細については後述する。ステップS305でハイバネーションイメージの出力、ステップS306で各デバイスの再開、ステップS307でシステムの停止を行う。一方、ステップS308では各デバイスの再開、ステップS309でプロセススケジューラの再開を行う。ステップS306とステップS308の処理内容は同一である。ユーザ又はユーザアプリケーションは、仮想ファイルシステムへアクセスすることで、システム中断状態への移行を要求する。ステップS300、ステップS301、ステップS302、ステップS306、ステップS307、ステップS308、ステップS309の実行には、Linux登録商標にもある従来どおりの機能を用いる。ステップS302では、メモリに展開しているプロセスに関するデータを予めメモリから不揮発性記憶装置のスワップ領域へスワップアウトすることで、作業領域の確保し、ハイバネーションイメージサイズを縮小させ、起動時間を短縮する。スワップアウトサイズは、予めユーザ又はユーザアプリケーションが仮想ファイルシステムにアクセスして指定する。ステップS303は、専用の関数の中で行う。そして、関数から抜ける際に値の書き戻しが必要なCPU汎用データレジスタの値を、パラメータとしてメモリ上の変数へ退避する。x86プロセッサでは、esp、ebx、ebp、esi、ediが相当する。復帰時にはメモリ及び上記CPUレジスタを書き戻して関数から抜けることで、システム停止前に実行している関数に復帰することができる。ステップS305では、メモリ上に残っているデータをハイバネーションイメージとして不揮発性記憶装置へ出力する。図4は、ハイバネーションイメージのフォーマットを示した図である。識別子400は、有効なハイバネーションイメージであるかどうかを示す。カーネル管理外メモリ401は、カーネル管理外領域に含まれるデータ数を示す。データ総数402は、カーネル管理領域及びカーネル管理外領域の両方の領域に含まれるデータ数の合計を示す。アドレス403は、ハイバネーションイメージのアドレス群を格納する。データ404は、ハイバネーションイメージのデータ群を格納する。400~403はヘッダ部、404はデータ部である。データ404は、メモリ103上のデータをページ単位で格納する。ただし、カーネルのコード領域及びハイバネーション処理に関するグローバル変数以下、ハイバネーショングローバル変数と称す、スワップアウトしたデータについては含めない。なお、アドレス403とデータ404は対応関係にあり、データ404のN番目に格納されたデータの配置先は、アドレス403のN番目に格納されたアドレスとなる。アドレス403の情報の個数と、データ404の情報の個数は、それぞれデータ数402と等しい。アドレス403及びデータ404に対応づけて格納するデータは、前方にカーネル管理外領域のデータを、後方にカーネル管理領域のデータを配置することが好ましい。これは、カーネル初期化時にカーネル管理メモリへの復帰をさせないことが目的である。並行読み込み部では、読み込み可能なデータ数をカーネル管理外データ数401に制限することでデータ404の前方のデータのみ読み込むようにし、カーネル管理メモリへの読み込みを行わないようにする。ハイバネーションイメージの格納は、ハイバネーション起動の都合上、パーティションとして定義されていない領域非パーティション領域へ、特定のセクタから順に行う。このセクタ番号は、予めカーネルのコード領域に直接設定しておくことが好ましい。また、デバイスを停止しているためLinux登録商標の機能を用いて不揮発性記憶装置へデータを出力することができない。そのため、専用の出力機構をカーネルのコード領域に追記し、これを利用して不揮発性記憶装置への出力を行う。次に、本実施形態におけるハイバネーション起動の流れを示す。図5は、情報処理装置がONになりシステムが起動するまでのフローチャートである。ステップS500では、BIOSの初期化を行う。ステップS501では、ブートローダがカーネルのロード及び展開を行う。ステップS502では、不記憶性記憶装置105にハイバネーションイメージが存在するかどうかを確認する。ハイバネーションイメージが存在する場合、ステップS503aでカーネルの初期化を行い、ステップS504でハイバネーションイメージを復帰し、ハイバネーション起動を完了する。ステップS503aでは、カーネル初期化と並行してDMACによる並行読み込みを行う。ハイバネーションイメージが存在しない場合は、通常起動するためにステップS503bでカーネルの初期化を行い、システムの起動を完了する。なお、ステップS502とステップS504はカーネル初期化処理の一部として実行されてもよい。ステップS502では、DMACを初期化し、ハイバネーションイメージ格納先となる不揮発性記憶装置の特定セクタを先頭とする領域からメモリ103へハイバネーションイメージのヘッダ部を読み込み、CPU101の処理によってハイバネーションイメージの有無を確認する。なお、ヘッダ部の読み込み先は、復帰時に上書きされることを避けるため、ハイバネーショングローバル変数へ行うことが好ましい。識別子400に所定の情報が書き込まれている場合、ハイバネーションイメージが不揮発性記憶装置に格納されていると判定できる。そして、不揮発性記憶装置の識別子400の情報をクリアしてハイバネーション起動を開始する。一方で、ハイバネーションイメージが不揮発性記憶装置に格納されていないと判定される場合、ステップS503bにおいてカーネル初期化を行い、システムを通常起動する。Linux登録商標独自のハイバネーション機構では、カーネル機能の初期化を完了した後にハイバネーションイメージの読み込みを行うため、カーネル機能を用いてハイバネーションイメージを読み込む際に不揮発性記憶装置のパーティション情報やファイル情報を利用することができる。しかし、本実施形態の手法では、カーネル初期化の開始と並行してハイバネーションイメージの読み込みを開始するため、前述のパーティション情報を利用することはできない。従って、パーティション情報では区切られない領域パーティション情報によって定義しない領域を不揮発性記憶装置に設け、ファイルシステムに依存しない型式の独自フォーマットのデータにしたハイバネーションイメージをこの領域に格納することが好ましい。ステップS503aのカーネルの初期化は、ステップS503bのハイバネーションイメージを利用しない初期化と比べて大きく2点異なる。まず1点目の相違点は、初期化をするシステムカーネルが利用可能なメモリサイズに制限を加える点である。Linux登録商標におけるメモリ管理機構による初期化では、BIOSから得られたメモリマップをもとにメモリの初期化を行う。一方、本実施形態では、Linux登録商標の機能を用いてメモリの初期化を行う前にメモリマップの書き換えを行う。メモリマップの書き換えでは、特定の値アドレスを指定することにより、その値アドレスまでのメモリ領域のみをカーネルに使用させるように設定することができる。この値として、カーネルの初期化システム初期化を完了する為の作業領域としての最低限必要なサイズ以上を指定することが好ましい。変更した領域サイズメモリマップは、システム復帰後の動作に影響を与えないので特別な処理により戻す必要はない。これは、ハイバネーションイメージを読み込むことによって、領域サイズに関するデータが上書きされるためである。上述で説明したカーネルに使用させるメモリ領域以降、カーネル管理領域を設定するための情報は、カーネルのコード領域に直接設定しておくことが好ましい。以上の処理により、カーネル管理領域とカーネル管理外領域の2種類の領域をメモリ103に確保する。なお制限サイズ比べて十分なサイズのメモリが搭載されている場合、カーネル管理領域のサイズは制限サイズと等しくなり、そしてメモリの全体サイズからカーネル管理領域を差し引いたサイズがカーネル管理外領域に相当するさらに別の領域を設けてもよい。しかし、制限サイズと比べメモリが十分に搭載されていない場合、カーネル管理外領域は確保しない。次に2点目の相違点は、カーネル初期化と並行して、ハイバネーションイメージを不揮発性記憶装置105からメモリ103へ読み込む点である。並行読み込みの手段としてDMACDMAコントローラを用い、ハイバネーションイメージの退避直前メモリ配置を復元するように、ハイバネーションイメージをメモリに読み込む。ただし、全メモリ領域にハイバネーションイメージを一度に復帰しようとすると、カーネル管理領域はカーネル初期化において利用されるため、初期化処理に利用するコードが上書きされてしまう恐れがある。その為、並行読み込み部の段階では、メモリの初期化を行わなかったカーネル管理外領域にのみハイバネーションイメージを読み込む。従って、カーネル管理外領域が確保されていない場合、並行読み込みは行わない。この並行読み込みについて示したものが図6である。600はメモリであり、カーネル管理領域600aとカーネル管理外領域600bを有する。601はCPU101によって実行されているカーネルであり、CPU101によってカーネル管理領域600aにのみアクセスする。602はDMAC、603は不揮発性記憶装置であり、DMAC602はカーネルによる初期化中はカーネル管理外領域600bにのみハイバネーションイメージを転送する。DMAC602は、データ転送に用いるパラメータ転送元アドレス、転送先アドレス、データサイズをCPU101により指定すると、一定サイズを上限として不揮発性記憶装置603からメモリへCPUとは非同期に転送を行う。出力完了後は、CPU101により再び新たなパラメータを指定する必要がある。そこで、DMAC602が所定サイズの転送を完了したことをトリガとしてCPU101に割り込みをかけるように設定し、アドレス403をもとに次に読むべきデータを指定して新たな読み込みを実行することが好ましい。また、LocalAPICAdvancedProgrammableInterruptControllerタイマを利用して一定時間ごとに割り込みを発生させ、CPUがDMACの読み込み状況を確認し、読み込みが完了していればアドレス403をもとに次に読むべきデータを指定して新たな読み込みを実行するようにしてもよい。DMAC602によるハイバネーションイメージの並行読み込みは、カーネル管理外領域に読む込むべき全てのハイバネーションイメージを読み込み終えるか、カーネルによる初期化終了後にハイバネーションイメージをカーネル管理領域管理外領域を問わず読み込み始める直前まで継続して行われる。ただし、ATAAdvancedTechnologyAttachmentの初期化中はDMA転送を行うことができない。そのため、ATAの初期化前にDMA転送の完了を待ちDMA転送を一時停止し、ATAの初期化後にDMA転送を再開する。ステップS504では、不揮発性記憶装置603のハイバネーションイメージのうちのメモリ600に読み込んでいない部分をメモリ600へ読み込む。図7は、ステップS504の詳細であり、本実施形態におけるハイバネーションイメージ復帰処理の流れである。ステップS700でプロセススケジューラの停止、ステップS701でデバイスの停止、ステップS702でスタックの切り替え、ステップS703でDMACによる並行読み込みの停止、ステップS704でCPU101によるハイバネーションイメージの読み込み、ステップS705でCPUレジスタの復帰を行う。ステップS702では、カーネル初期化用のスタックからハイバネーションイメージ復帰用のスタックに切り替えを行う。ハイバネーションイメージ復帰用のスタックは、復帰中に内容が上書きされないよう、ハイバネーションイメージ復帰中に利用されないメモリ領域を指定する。なお、スタックの復帰はS705で行う。ステップS703では、動作中のDMACが停止するまで待機を行う。既に並行読み込みが完了している場合、待機は行わない。ステップS704では、カーネル管理外領域に読み込むべきハイバネーションイメージの未読み込み部分と、カーネル管理領域に読み込むべきハイバネーションイメージの部分を読み込む。この処理を、DMA転送済みカウンタがデータ数402と等しくなるまで繰り返す。ステップS705は、専用の関数の中で行う。まず、TLBTranslationLookasideBufferが有ればTLBフラッシュを行う。x86プロセッサでこれを行うには、CR3レジスタの値を一度他のレジスタに退避し、再び退避した値でCR3レジスタを上書きする。そして、CPU退避時に用いた変数から汎用データレジスタへデータを復帰する。さらに、不揮発性記憶装置202へスワップアウトしたスワップデータについても復帰させる。上記関数から抜けること、ハイバネーショングローバル変数やメモリの未使用領域を除き、ステップS303直後と同一の状態へ復帰することができる。ステップS304では、ハイバネーションイメージ生成中ではないため判定結果が偽となりS308へ遷移する。この判定には、ハイバネーショングローバル変数を用いる。ステップS308で各デバイスを再開し、ステップS309でプロセススケジューラの再開を行い、ハイバネーション起動を完了する。ステップS302でスワップアウトしたデータについては、システム復帰後にストレージからメモリへ読み込む。例えば、Linux登録商標が備えるスワップ機構同様、ページフォルト発生に応じてスワップデータをメモリへ書き戻す。なお、カーネル初期化中にハイバネーションイメージの全てを並行してメモリに転送できるような場合には、ステップS703をスキップしカーネル管理領域についてはカーネルのメモリ管理機能で解放する等してもよい。以上のように本実施形態では、ハイバネーションイメージを利用して、システムを再び起動する際に、カーネルによる初期化と並行してハイバネーションイメージの部分を読み込むことにより、従来の方法と比べて高速にシステムを復元することができる。また、本実施形態によればハイバネーション起動において、メモリ管理機構によるメモリの初期化時間を短縮することもできる。また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェアプログラムを、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータまたはCPUやMPU等がプログラムを読み出して実行する処理である。