(57)【要約】【課題】  情報処理装置の再起動の高速化を図る。【解決手段】  稼働状態の情報処理装置のメインメモリ12の記憶状態を表すデータ40を二次記憶装置13に退避する。情報処理装置の再起動時に、二次記憶装置13に退避したデータ40をメインメモリ12に転送して、稼働状態におけるメインメモリ12の記憶状態を復元する。退避するデータ40を生成する前に、メインメモリ12に割り当てられたキャッシュを解放する。【選択図】  図2
2014086052.tif 000002
【特許請求の範囲】
【請求項１】
情報処理装置のメインメモリの記憶状態を表すデータを二次記憶装置に退避する退避手段と、
前記情報処理装置の再起動時に、前記二次記憶装置に退避したデータを前記メインメモリに転送して、前記メインメモリの記憶状態を復元する復元手段と、
前記退避手段が退避するデータを生成する前に、前記メインメモリに割り当てられたキャッシュを解放する解放手段とを有することを特徴とする情報処理装置。
【請求項２】
さらに、解放しないキャッシュを指定するための指定手段を有し、
前記解放手段は、前記指定されたキャッシュの解放を行わないことを特徴とする請求項1に記載された情報処理装置。
【請求項３】
前記指定手段によるプロセスの指定により、前記プロセスが保有するキャッシュは前記解放しないキャッシュに指定されることを特徴とする請求項2に記載された情報処理装置。
【請求項４】
前記指定手段による優先度の指定により、前記優先度以上の優先度を有するプロセスが保有するキャッシュは前記解放しないキャッシュに指定されることを特徴とする請求項2または請求項3に記載された情報処理装置。
【請求項５】
前記指定手段による指定により、実行待ち状態のプロセスが保有するキャッシュは前記解放しないキャッシュに指定されることを特徴とする請求項2から請求項4の何れか一項に記載された情報処理装置。
【請求項６】
前記指定手段による指定により、リアルタイムプロセスが保有するキャッシュは前記解放しないキャッシュに指定されることを特徴とする請求項2から請求項5の何れか一項に記載された情報処理装置。
【請求項７】
前記指定手段による指定により、ユーザインタフェイスに関連するプロセスが保有するキャッシュは前記解放しないキャッシュに指定されることを特徴とする請求項2から請求項6の何れか一項に記載された情報処理装置。
【請求項８】
前記指定手段による指定により、複数のプロセスから参照されるキャッシュは前記解放しないキャッシュに指定されることを特徴とする請求項2から請求項7の何れか一項に記載された情報処理装置。
【請求項９】
前記指定手段によるファイルの指定により、前記ファイルに関連するキャッシュは前記解放しないキャッシュに指定されることを特徴とする請求項2から請求項8の何れか一項に記載された情報処理装置。
【請求項１０】
前記指定手段により解放しないキャッシュ量が指定された場合、前記解放手段は、前記キャッシュ量に達するまでアクセス頻度の低い順にキャッシュを解放することを特徴とする請求項2から請求項9の何れか一項に記載された情報処理装置。
【請求項１１】
前記退避するデータには、前記情報処理装置のマイクロプロセッサのレジスタのレジスタ情報、および、前記情報処理装置のハードウェアレジスタのレジスタ情報が含まれることを特徴とする請求項1から請求項10の何れか一項に記載された情報処理装置。
【請求項１２】
退避手段が、情報処理装置のメインメモリの記憶状態を表すデータを二次記憶装置に退避し、
復元手段が、前記情報処理装置の再起動時に、前記二次記憶装置に退避したデータを前記メインメモリに転送して、前記メインメモリの記憶状態を復元し、
解放手段が、前記退避手段が退避するデータを生成する前に、前記メインメモリに割り当てられたキャッシュを解放することを特徴とする情報処理方法。
【請求項１３】
コンピュータを、メインメモリの記憶状態を表すデータを二次記憶装置に退避する退避手段と、
再起動時に、前記二次記憶装置に退避したデータを前記メインメモリに転送して、前記メインメモリの記憶状態を復元する復元手段と、
前記退避手段が退避するデータを生成する前に、前記メインメモリに割り当てられたキャッシュを解放する解放手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置のハイバネーションに関する。
【背景技術】
【０００２】
情報処理装置の起動時間を短縮する手法にハイバネーションがある。ハイバネーションは、コンピュータの電源を切る直前のメインメモリに記憶状態をハードディスクなどの不揮発性メモリに退避する。次にコンピュータの電源を入れた時、退避した記憶内容をメインメモリに戻し、電源を切る直前の状態から作業を再開できるようにする機能である。
【０００３】
ハイバネーションを詳細に説明すると、コンピュータが動作中のメモリイメージと各種ハードウェアレジスタ設定をデータファイルとして二次記憶に退避する。当該データファイルは、スナップショットイメージまたはハイバネーションイメージと呼ばれる。コンピュータを再起動する際は、スナップショットイメージをメインメモリに展開し、ハードウェアレジスタを復元する。このようにすることで、システム起動時のページテーブルの構築や、各種サービス（常駐プログラム）の立上げの処理をスキップする。
【０００４】
ハイバネーションを用いた起動をより高速にする技術として特許文献1や特許文献2に記載された技術がある。
【０００５】
特許文献1の技術は、メモリ領域に優先度フラグを設け、優先度フラグがセットされているメモリ領域を優先的に復元した後、システムを再スタートする。優先度フラグがセットされていないメモリ領域は、再起動後、徐々に復元する。
【０００６】
特許文献2の技術は、メインメモリとして揮発性メモリと不揮発性メモリを備え、不揮発性メモリの優先度が低いページを二次記憶に退避し、揮発性メモリの優先度が高いページを不揮発性メモリに退避する。再起動時は、不揮発性メモリに退避した情報を用いて復帰処理を行う。
【０００７】
ハイバネーションを用いた起動処理をより高速化するには、スナップショットイメージのデータサイズを小さくすることが重要である。スナップショットイメージのデータサイズを小さくする方法として、スナップショットイメージの作成前に、メインメモリに割り当てられたキャッシュ領域をクリアし、メインメモリに割り当てられたスワップ対象領域をスワップアウトすることが考えられる。
【０００８】
しかし、再起動後、キャッシュがすべてクリアされた状態であったり、プロセスが使用中のメモリ領域がスワップアウトされた状態にあったりすると、起動後、暫くの間はスループット（単位時間当りの処理能力）が極端に低下する場合がある。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開2011-145933号公報
【特許文献２】特開2004-362426号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
本発明は、情報処理装置の再起動の高速化を図ることを目的とする。
【００１１】
また、再起動後のスループットの低下の抑制を図ることを他の目的とする。
【課題を解決するための手段】
【００１２】
本発明は、前記の目的を達成する一手段として、以下の構成を備える。
【００１３】
本発明にかかる情報処理装置は、情報処理装置のメインメモリの記憶状態を表すデータを二次記憶装置に退避する退避手段と、前記情報処理装置の再起動時に、前記二次記憶装置に退避したデータを前記メインメモリに転送して、前記メインメモリの記憶状態を復元する復元手段と、前記退避手段が退避するデータを生成する前に、前記メインメモリに割り当てられたキャッシュを解放する解放手段とを有することを特徴とする。
【００１４】
好ましくは、さらに、解放しないキャッシュを指定するための指定手段を有し、前記解放手段は、前記指定されたキャッシュの解放を行わないことを特徴とする。
【発明の効果】
【００１５】
本発明によれば、情報処理装置の再起動の高速化を図ることができる。
【００１６】
また、再起動後のスループットの低下の抑制を図ることができる。
【図面の簡単な説明】
【００１７】
【図１】実施例の情報処理装置の構成例を示すブロック図。
【図２】実施例の情報処理装置における通常の起動シーケンスからスナップショットイメージの取得までの流れを説明する図。
【図３】実施例の情報処理装置におけるハイバネーションを用いた起動シーケンスを説明する図。
【図４】スナップショットイメージの形式の概要を示す図。
【図５】スナップショットイメージの各要素の詳細例を説明する図。
【図６】スナップショットイメージの各要素に含まれる構造体メンバの詳細例を説明する図。
【図７】スナップショットイメージを使って再起動時にシステムを復元する仕組みを説明する図。
【図８】メモリ管理/ページ管理の概念を説明する図。
【図９】OSのメモリ管理/ページ管理の仕組みをより詳しく説明する図。
【図１０】プロセス管理機構の構造体メンバとメモリ管理機構の機能および構造体メンバの詳細例を説明する図。
【図１１】ハイバネ・ページ制御情報の詳細例を示す図。
【図１２】ハイバネ・ページ制御情報のメンバを説明する図。
【図１３】ハイバネ・ページ制御情報に含まれるフラグや変数を設定する処理を説明する図。
【図１４】指定したプロセスに属するページキャッシュはスナップショットイメージの取得時に解放しないように指定する処理を説明する図。
【図１５】スナップショットイメージの取得処理を説明する図。
【図１６】ハイバネーション起動処理を説明する図。
【図１７】ページの解放処理を説明するフローチャート。
【図１８】プロセスページ判定処理を説明するフローチャート。
【図１９】ファイルページ判定処理を説明するフローチャート。
【発明を実施するための形態】
【００１８】
以下、本発明にかかる実施例の情報処理を図面を参照して詳細に説明する。
【００１９】
［スナップショットイメージと起動の高速化の関係］
ハイバネーションを用いる場合の起動時間の九割近くは、二次記憶装置からメインメモリへのスナップショットイメージの転送に要する時間である。従って、スナップショットイメージのデータサイズを小さくすれば、コンピュータの起動を高速化することができる。
【００２０】
稼働状態のメインメモリの記憶状態に相当するスナップショットイメージのデータサイズを小さくする一方法として、スナップショットイメージを取得する際にメインメモリ内のキャッシュをクリアすることが有効である。これは高機能OSとして採用されるOSが、ファイルに関連する多量のキャッシュ（ページキャッシュ、バッファキャッシュ、inodeキャッシュ、ディレクトリエントリキャッシュなど）を構築することに起因する。これらキャッシュは、システムの稼働状態においては、スループットの向上に有効である一方、メモリ使用率を増加させ、スナップショットイメージのデータサイズを増加させる。
【００２１】
従って、起動時間が問題になるコンピュータ機器においては、スナップショットイメージの取得前にキャッシュを解放し、スナップショットイメージのデータサイズを削減して再起動時のデータ転送量を抑制すれば、さらに起動の高速化が実現可能である。
【００２２】
また、もう一つの方法として、キャッシュの他にメインメモリに確保されたスワップ可能なメモリ領域の解放がある。スワップ可能なメモリ領域は、プロセスが確保した、ファイルと関連付けられていない各種メモリ領域であり、多くの場合、無名ページ（アノニマスページ）や共有メモリとして利用されている。
【００２３】
スワップ可能なメモリ領域は、キャッシュのように単純に解放することはできないが、別途用意されるスワップ領域に退避して、当該メモリ領域を解放し、空きメモリとすることが可能である。従って、スナップショットイメージの取得前にスワップ可能なメモリ領域をスワップアウトして解放し、スナップショットイメージのデータサイズを削減して再起動時のデータ転送量を抑制すれば、さらに起動の高速化が実現可能である。
【００２４】
［装置の構成］
図1のブロック図により実施例の情報処理装置の構成例を示す。
【００２５】
図1において、マイクロプロセッサ(CPU)11は、情報処理装置のほぼすべてを管理する。メインメモリ12は、CPU11からアクセス可能なRAMなどである。外部記憶装置13は、例えばハードディスクドライブ(HDD)やフラッシュメモリである。デバイス14、15は、例えばキーボード、マウス、USBデバイス、ディスプレイなど、情報処理装置に接続される様々なデバイスである。
【００２６】
［起動シーケンス］
図2により実施例の情報処理装置における通常の起動シーケンスからスナップショットイメージ40の取得までの流れを説明する。
【００２７】
ハイバネーションを使わない通常の起動の場合、情報処理装置がパワーオンされると、通常のブートローダによるOSのロード、カーネル初期化、rootfsマウント、init起動、アプリケーション実行を経て起動処理が完了する。システム構成によるが、多くの場合、起動処理に30秒から1分、場合によっては数分かかる。
【００２８】
スナップショットイメージ40の取得は、アプリケーション実行段階で実施される。スナップショットイメージ40の取得が開始されると、メインメモリ12、ハードウェアレジスタ、CPUレジスタの記憶内容がスナップショットイメージ40として外部記憶装置13に退避され、その後、情報処理装置がパワーオフになる。
【００２９】
図3により実施例の情報処理装置におけるハイバネーションを用いた起動シーケンスを説明する。
【００３０】
ハイバネーションを用いた起動の場合、情報処理装置がパワーオンされると、スナップショットイメージ40として退避したデータをメインメモリ12に復元する。その後、CPUのレジスタ値の復元、デバイスのレジスタ値の復元、アプリケーションの復帰を経て、情報処理装置が前回の稼働時の状態に復帰する。システム構成によるが、ハイバネーションを用いた起動処理は、通常の起動処理と異なり、数秒で終了し、情報処理装置は即座に稼働状態に復帰可能である。
【００３１】
図4によりスナップショットイメージ40の形式の概要を示す。図4に示す形式は、ハイバネーションを用いた起動を実施する場合の一つの形式に過ぎず、ハードウェア構成やソフトウェア的な要因によって変わる場合がある。スナップショットイメージ40には、ヘッダ41、レジスタ情報42、ページメタデータ43、ページデータ44の各ブロックが存在する。
【００３２】
図5によりスナップショットイメージ40の各要素の詳細例を説明する。図6によりスナップショットイメージ40の各要素に含まれる構造体メンバの詳細例を説明する。
【００３３】
図6(a)はヘッダ41に含まれる構造体メンバの詳細例を示す。本実施例では32ビットハードウェアを想定しているため、図6(a)に示すように、多くのメンバが4バイト=32ビットで宣言されているが、64ビットや128ビット環境においてはそれに相応しいサイズがあり、実装環境に合わせて適宜変更される。
【００３４】
図6(b)はレジスタ情報42に含まれる構造体メンバの詳細例を示す。レジスタ情報42は、システムによって異なるが、本実施例ではr0からr15までの16個の32ビット汎用レジスタと、フラグレジスタ、プログラムカウンタ、スタックポインタ（以下、CPUレジスタ）をもつ32ビットCPUを想定している。レジスタ情報42に退避されたCPUレジスタの値が、システムの再起動時にCPU11に再設定され、情報処理装置は稼働時の状態に戻る。
【００３５】
図6(c)はページメタデータ43に含まれる構造体メンバの詳細例を示す。ページメタデータ43は、後述するページデータのメインメモリ12上の物理アドレスと連続するページ数を保持する。ページメタデータ43は、メインメモリの低位アドレスから高位アドレス方向に昇順に並んでいて、ページデータ44の並びと一対一に対応する。
【００３６】
ページデータ44は、スナップショットイメージ40を取得する処理において、メインメモリ12の解放されなかったページを集めたデータである。ページメタデータ43の説明において述べたように、ページデータ44は低位アドレスから高位アドレス方向に向かって昇順に並んでいる。実装によって、ページデータ44はデータ圧縮されていてもよいし、暗号化されていてもよい。その場合、ヘッダ41のメンバであるh_compressやh_encyptには、圧縮形式や暗号タイプを示す値がセットされ、再起動時の処理におけるページデータの復元において参照される。なお、データ圧縮および暗号化はソフトウェアで処理してもよいし、専用のハードウェアで処理してもよい。
【００３７】
図7によりスナップショットイメージ40を使って再起動時にシステムを復元する仕組みを説明する。
【００３８】
再起動時の起動処理において、まず、二次記憶装置13からスナップショットイメージ40のヘッダ41が読み出される。そして、ヘッダ41の先頭のh_idメンバがチェックされ、h_idメンバにスナップショットイメージを表す文字列が含まれるとスナップショットイメージ40を用いた起動処理が実行される。この場合、スナップショットイメージ40のページメタデータ43に従い、ページデータ44を（必要であれば伸長、復号し）DMA転送によりメインメモリ12に転送する。ページデータ44の転送終了後、CPUレジスタをレジスタ情報42で復元し、その後、デバイスのレジスタ値の復元して、情報処理装置を稼働時の状態に復帰させる。
【００３９】
［メモリ管理/ページ管理］
図8によりメモリ管理/ページ管理の概念を説明する。
【００４０】
メインメモリ12にはキャッシュ51が確保されている。OSに仮想記憶機構が実装されている場合、キャッシュ51はページ単位（多くの場合は4KB）であり、一般に「ページキャッシュ」と呼ばれる。
【００４１】
OSは、プロセスからファイルIO要求があると、まずページキャッシュ51を検索し、ページキャッシュ51があればそれを返す。ページキャッシュ51がなければ、OSは、二次記憶装置13からデータを読み出してページキャッシュ51をリフィルし、ページキャッシュ51のリフィルが終了するとプロセスにその結果を返す。この作業は、プロセスからの要求サイズがページサイズ以下であれば一回で済むが、ページサイズ以上であればその分（要求サイズ/ページサイズ+1）の作業回数になる。
【００４２】
OSは、各プロセスからの要求に従い、二次記憶装置13に格納されたファイル54のリードライトを行う。その結果、ページキャッシュ51にも同じ内容が保持され、二回目以降のアクセスに対してはページキャッシュ51を利用することでスループットが向上する。
【００４３】
メインメモリ12には共有メモリ52とアノニマスメモリ53が確保されている。これらメモリ領域もOSによってページ単位（多くの場合4KB）に割り当てられる。ただし、通常のページキャッシュ51と異なるのは、共有メモリ52とアノニマスメモリ53がファイルに関連付けられていない点である。OSは、システムの空きメモリが少なくなると、共有メモリ52とアノニマスメモリ53に割り当てたページをスワップ55に退避させ、ページを解放してシステムの空き領域に追加する。
【００４４】
共有メモリ52とアノニマスメモリ53のメモリ領域は、ページキャッシュ51と異なり、基本的に汚れている「ダーティページ」と呼ばれるページのため、OSによるメモリ回収処理によって単純に解放することができない。従って、共有メモリ52とアノニマスメモリ53の解放は、必ずスワップ55への書出しを伴い、処理コスト的に重い処理になる。
【００４５】
一方、ファイルに対するページキャッシュ51は、ファイルを読み出す限りは汚れていない「クリーンページ」と呼ばれるページであり、メモリ回収処理によって単純に解放すればよい。従って、ページキャッシュ51の解放は、より軽い処理であると言える。
【００４６】
図9によりOSのメモリ管理/ページ管理の仕組みをより詳しく説明する。OSは、各種資源を管理するために複数の管理機構をもつ。本実施例で利用する管理機構は、プロセス管理機構、ファイル管理機構、メモリ管理機構の三つである。図10によりプロセス管理機構の構造体メンバとメモリ管理機構の機能および構造体メンバの詳細例を説明する。
【００４７】
プロセス管理機構61は、プロセスに関するすべての管理を担い、プロセス管理のために、プロセスごとにプロセス管理構造61-1を割り当てる。図10(a)はプロセス管理構造61-1に含まれる、各プロセスの詳細な情報を保持する構造体メンバの詳細例を示す。
【００４８】
ファイル管理機構62は、システム内のファイルを一元的に管理する機構で、一般に、個々のファイルを管理するためにinodeを使用する。個々のプロセスがアクセスしているファイルのinodeは、プロセス管理機構61のプロセス管理構造61-1のポインタp_inodeが保持し、ポインタp_inodeはファイル管理機構62のinode情報62-1を指す。
【００４９】
inode情報62-1は、対応するファイルの様々な情報を保持し、ファイルアクセスのための基本構造である。ファイル管理機構62は、inode情報に基づき各種のファイル操作を行う。
【００５０】
メモリ管理機構63は、メインメモリ12をページ単位に管理する。ここでは、仮想記憶機構を使ったページ単位のメモリ管理や、各種のキャッシュ管理機構を備えることにする。図10(b)はページ管理機構63-2の機能を示す。
【００５１】
ページ管理機構63-2は、ページ管理のために、ページごとに一つのページ管理構造63-3を利用する。ページ管理構造63-3にはキャッシュ制御のために多くのメンバが含まれる。図10(c)は本実施例で使用するページ管理構造63-3のメンバを示す。
【００５２】
ページ管理構造63-3において、参照カウントref_countは、当該ページを参照するプロセスが増える度にページ管理機構63-2によって更新される。参照カウントref_countにより、複数のプロセスからアクセスされているページを特定することができる。
【００５３】
ポインタp_processは、当該ページを保有するプロセスのプロセス管理構造61-1へのポインタである。ポインタp_processにより、ページからプロセスを特定することができる。なお、ポインタp_processの値はNULLの場合がある。
【００５４】
ポインタp_inodeは、当該ページがファイルキャッシュとして使われている場合に設定され、その場合、ポインタp_inodeは該当ファイルのinode情報を指す。なお、ポインタp_inodeの値はNULLの場合がある。
【００５５】
ポインタlinkは、システム内のページをアクセス頻度ごとに並べたLRU (least recently used)リスト構造へのリンクポインタである。LRUリスト63-4は、アクセス頻度が高いページ順に並ぶように管理され、アクセス頻度が低いページはメモリ不足時の解放対象になる。また、本実施例におけるスナップショットイメージ作成処理においても、LRUリスト63-4をアクセス頻度の低い順に走査して解放するページの取捨選択を行う。
【００５６】
●ファイルアクセス
図9において、プロセスAから二次記憶装置13に格納されたファイル64のリード要求があったとする。この場合、以下の処理によってファイルアクセスが実現される。
【００５７】
OSは、まず、プロセスAの要求から対象ファイルのinode情報62-1を取り出す。inode情報が決まると、ファイル管理機構62は、メモリ管理機構63にinode情報62-1を渡し、inode情報62-1に対応するページ検索を要求する。
【００５８】
メモリ管理機構63は、要求されたファイルが既にキャッシュされているか否かを検索するため、自身のページ管理機構63-2を使ってページ検索を実行する。ページ管理機構63-2は、管理下のページを検索し、inode情報62-1に対応するページがあればそれを返す。さらに、当該ページに対するアクセスが発生したので、LRUリスト63-4を更新して、当該ページをよりアクセス頻度が高い位置に移動する。
【００５９】
他方、ページキャッシュにinode情報62-1に対応するページがない場合、メモリ管理機構63は、メインメモリ12にキャッシュに使用するページを確保し、当該ページにデバイスドライバ経由でファイル64のデータを読み出す。これによりキャッシュがリフィルされ、その結果を返す。さらに、生成したページキャッシュのページをLRUリスト63-4に追加し、以降、ファイル64のアクセス要求があった場合はページを返すのみで済むため、アクセススピードが向上する。
【００６０】
ページ管理機構63-2は、上記のページの管理だけではなく、ページの解放や、ページの参照カウントも管理する。ページの解放は、不要になったページキャッシュや、削除されたファイルのページキャッシュを削除するため、上位のファイル管理機構62やOSの他の機構から呼び出される。
【００６１】
LRUリスト63-4の管理には様々な手法があり、所定時間アクセスがないページをアクセス頻度が低い位置に移動させる仕組みを備えてもよい。また、CPU11のMMU (memory management unit)機構がページごとに参照履歴ビットをもつ場合、当該情報に基づきLRUリスト63-4を最適な状態に維持することもできる。OSは、これらの仕組みを使い、メモリ使用量が増大し空きメモリが減少した場合、LRUリスト63-4上でアクセス頻度が低いページを解放してシステムの空きメモリを維持するなどの処理を行う。以上のようなキャッシュ管理機構の仕組みを使ってキャッシュは維持されている。
【００６２】
なお、上記のキャッシュ制御の概要説明は、UNIX（登録商標）系の一般的なOSを例に挙げた。OSの実装によっては、上記と多少異なるページ管理を行う場合もある。しかし、本発明は、ページ管理機構を使ってプロセスが保有する優先度の低いページを解放するためのものであり、ページ管理ロジックの詳細は本発明の本質ではない。
【００６３】
●ページ解放の挙動指定
図9に示すハイバネ・ページ制御情報63-1は、本実施例においてページ制御を行うための情報である。図11によりハイバネ・ページ制御情報63-1の詳細例を示す。図12によりハイバネ・ページ制御情報63-1のメンバを説明する。なお、ハイバネ・ページ制御情報63-1のメンバであるフラグや変数は、システムの起動時にゼロクリアされ、その後、システムコールなどにより変更される。
【００６４】
図13によりハイバネ・ページ制御情報63-1に含まれるフラグや変数を設定する処理を説明する。ハイバネ・ページ制御情報63-1の設定は、システムコールなどを用いて、ユーザ空間の挙動設定プログラム71などから行われる。スナップショットイメージ40の取得前に、ハイバネ・ページ制御情報63-1を設定することにより、スナップショットイメージ40を取得する際のページ解放処理が変化する。また、ハイバネ・ページ制御情報63-1に何も設定しない場合（つまりゼロクリアされたまま）、可能な限りページを解放する指定と見做される。
【００６５】
ハイバネ・ページ制御情報63-1の殆どのメンバは単純なフラグや数値であり、システムコールによる設定処理は単純に値を設定すればよい。ただし、メンバfileについて、OSは以下の処理を実行する必要がある。
【００６６】
file構造体(sturct nofree_file)領域の確保と初期化を行い(S71)、既にファイル登録があれば、そのfile-＞nextに‘1’で確保した領域を設定する(S72)。システムコールで通知されたファイルの絶対パスをfile-＞nameに格納する(S73)。さらに、通知された絶対パスを使ってOSのファイル管理を通じてファイルに対応するinode情報62-1へのポインタを取得し、取得したポインタをfile-＞p_inodeに格納する(S74)。そして、file-＞nextをNULLにする(S75)。
【００６７】
以上のように、ページキャッシュを解放しないファイルに関する情報を保持しておくことで、後述するファイルページ判定処理時（図13）に迅速にページを解放するか否かの判定を行うことができる。
【００６８】
●キャッシュ非解放プロセスの指定
図14により指定したプロセスに属するページキャッシュはスナップショットイメージの取得時に解放しないように指定する処理を説明する。この指定処理は、図13に示したようなシステム全体のキャッシュを制御するフラグや変数を変更する処理ではなく、プロセス別の指定処理である。つまり、あるプロセスのページキャッシュを解放したくない場合、この指定処理を事前（スナップショットイメージの取得前）に実行する。
【００６９】
ユーザ空間の挙動設定プログラム71は、ページキャシュを解放したくないプロセスのプロセスIDを引数にしてシステムコールを実行する。これにより、OSは次の処理を実行する。
【００７０】
プロセスIDによって指定されるプロセスのプロセス管理構造61-1を取得し(S81)、取得したプロセス管理構造61-1のメンバno_free_cacheフラグに‘1’をセットする(S82)。これにより、当該プロセスに所属するページをスナップショットイメージの取得時に解放しないことを明示する。
【００７１】
●スナップショットイメージの取得処理
図15によりスナップショットイメージの取得処理を説明する。
【００７２】
ユーザ空間のハイバネーション開始指定プログラム91は、システムコールにより、OSに対してスナップショットイメージの取得の開始を通知する。この通知を受けたOSは次の処理を実行する。
【００７３】
システムで動作しているすべてのプロセスを停止し(S91)、以降、メモリ使用状態の変更を防ぐ。続いて、現時点でのCPUレジスタの設定値を退避し(S92)、デバイスレジスタの設定値を退避する(S93)。そして、詳細は後述するが、ページの解放処理を行う(S94)。これにより、不要なキャッシュが解放され、スナップショットイメージのデータサイズが小さくなる。
【００７４】
次に、メモリの回収処理を行う(S95)。これにより、使用状態のメモリイメージを図4に示すような形式のスナップショットイメージ40として、ファイルに書き出せるようにする。そして、生成したスナップショットイメージ40を二次記憶装置13に書き出し(S96)、システムの停止処理を行う(S97)。
【００７５】
●ハイバネーション起動処理
図16によりハイバネーション起動処理を説明する。
【００７６】
起動ボタンコントローラがシステムのリセットを発行するとブートローダが実行される。ブートローダは、まず、二次記憶装置13の所定領域に図7に示すスナップショットイメージ40が格納されている否かを判定する。この判定は、ヘッダ41の文字列h_idをチェックすることで行われる。ブートローダは、この判定により、スナップショットイメージ40の格納が確認できない場合は通常起動を行い、スナップショットイメージ40の格納が確認できた場合は次の処理を行う。
【００７７】
メモリの復元処理を行う(S101)。この処理は、図7に示したように、ページメタデータ43とページデータ44を参照しながらDMA転送によりメモリイメージを復元するものである。続いて、CPUレジスタの復元処理を行う(S102)。
【００７８】
CPUレジスタの復元処理が終了するとブートローダからOSへの復帰が実現し、OSは次の処理を行う。
【００７９】
デバイスレジスタの復元処理を行い(S103)、スナップショットイメージの取得処理におけるステップS91で停止されたプロセスの再開処理を行う(S104)。そして、スナップショットイメージの取得処理でハイバネーション開始指定プログラム91が発行したシステムコールからリターンしてアプリケーションの実行を再開する。
【００８０】
●ページの解放処理
図17のフローチャートによりページの解放処理(S94)を説明する。ページの解放処理は、メモリの回収処理(S95)を実行する前に呼び出され、不要なキャッシュを解放してスナップショットイメージ40をできる限りコンパクトにする処理である。
【００８１】
まず、図9に示すLRUリスト63-4を検索して処理対象のページ管理構造63-3を取り出す(S111)。LRUリスト63-4はアクセス頻度順にソートされているので、アクセス頻度の低いページ順に処理を行い、LRUリスト63-4に登録された全ページについて処理を終了した場合(S112)はページの解放処理を終了する。
【００８２】
次に、取り出したページ管理構造63-3から当該ページを保有するプロセスを特定するために、ページ管理構造63-3に含まれる、当該ページが所属するプロセス管理機構61へのポインタp_processがNULLか否かを判定する(S113)。ポインタp_processがNULLの場合、当該ページはプロセスに保有されていないと判断され、処理をステップS118に進める。また、ポインタp_processがNULLではない場合はプロセスページ判定処理(S114)を実行する。
【００８３】
プロセスページ判定処理(S114)の詳細は後述するが、プロセスページ判定処理の戻り値が‘1’の場合(S115)、当該ページは解放するページと判断されたことを意味し、ページ解放処理(S116)を実行する。また、プロセスページ判定処理の戻り値が‘0’の場合(S115)、当該ページは解放しないと判断されたことを意味し、ページ解放処理を実行せずに処理をステップS117に進める。
【００８４】
一方、当該ページがプロセスに保有されていないと判断された場合(S113)、当該ページがファイルキャッシュに使われているか否かを判定するために、ページ管理構造63-3に含まれるポインタp_inodeがNULLか否かを判定する(S118)。ポインタp_inodeがNULLの場合、当該ページはOSが特別な理由で確保したページと判断され、ページ解放処理の対象とせず、処理をステップS111に戻し、LRUリスト63-4から次の処理対象のページ管理構造63-3を取り出す。
【００８５】
他方、ポインタp_inodeがinode情報62-1を指す場合は当該ページがファイルキャッシュに使われていると判定することができ、ファイルページ判定処理(S119)を実行する。
【００８６】
ファイルページ判定処理(S119)の詳細は後述するが、ファイルページ判定処理の戻り値が‘1’の場合(S120)、当該ページは解放するページと判断されたことを意味し、ページ解放処理(S116)を実行する。また、ファイルページ判定処理の戻り値が‘0’の場合(S120)、当該ページは解放しないと判断されたことを意味し、ページ解放処理を実行せずに処理をステップS117に進める。
【００８７】
ステップS116において、OSのメモリ管理機構が用意するページ解放処理が呼び出される。ページ解放処理は、指定されたページのデータを必要に応じて書き出し、その後、空きメモリとして解放する。例えば対象ページがファイルキャッシュで汚れていれば、当該ページのデータをファイルの該当位置に書き出した後、当該ページを解放する。また、ファイルキャッシュで汚れていないページは単純に解放する。また、対象ページがアノニマスページで汚れていれば、当該ページのデータをスワップに書き出した後、当該ページを解放する。この処理は、OSのメモリ管理機構が提供する機能であり、詳細な説明は省略する。ページ解放処理が終了すると処理はステップS117に進む。
【００８８】
ステップS117において、必要なページ数が解放されたか否かを判定する。ハイバネ・ページ制御情報63-1のメンバであるpage_total変数に残すべきページキャッシュの値（キャッシュ量）が設定されている場合は、当該設定量に基づく比較により判定を行う。つまり、LRUリスト63-4に登録されたページ総数がpage_total変数の値より大きければ、さらにページを解放する必要があり、処理をステップS111に戻し、ページの解放処理を継続する。また、LRUリスト63-4に登録されたページ総数がpage_total変数の値より小さければ、必要なページの解放処理が終了したと判断してページの解放処理を終了する。
【００８９】
もし、page_total変数の値が0の場合は、残すべきページキャッシュの値が未指定と判断して、LRUリスト63-4に登録された解放可能なすべてのページを解放対象とするために処理をステップS111に戻し、ページの解放処理を継続する。
【００９０】
●プロセスページ判定処理
図18のフローチャートによりプロセスページ判定処理(S114)を説明する。
【００９１】
プロセスページ判定処理は、図17に示すページの解放処理から呼び出され、対象ページが解放対象か否かの判断を行う。判断結果は‘0’と‘1’の戻り値で示され、‘0’は解放対象としない判断結果を表し、‘1’は解放対象とする判断結果を表す。
【００９２】
まず、対象ページを保有するプロセス（以下、保有プロセス）のプロセス管理構造61-1を参照してフラグno_free_cacheが設定されているか否かを判定する(S121)。図14において説明したように、フラグno_free_cacheが設定されているプロセスに所属するページは解放しない指定である。従って、フラグno_free_cacheが設定されている（no_free_cache=‘1’）場合は、対象ページを解放対象としない判断結果‘0’を返し(S128)、処理終了する。
【００９３】
次に、保有プロセスのプロセス管理構造61-1の優先度niceの値と、ハイバネ・ページ制御情報63-1のpage_nofree_niceの値を比較する(S122)。図12に示すように、page_nofree_niceの値以上の優先度（niceの値）をもつプロセスが保有するページは解放しない。つまり、優先度が指定された優先度以上のプロセスが保有するページは解放しない。従って、優先度がpage_nofree_niceの値以上（nice≧page_nofree_nice）の場合は、対象ページを解放対象としない判断結果‘0’を返し(S128)、処理終了する。
【００９４】
次に、保有プロセスがRUNキューに登録されているか否か、および、ハイバネ・ページ制御情報63-1のフラグpage_nofree_activeが設定されているか否かを判定する(S123)。図12に示すように、フラグpage_nofree_activeが設定されている場合、実行待ち状態のプロセス（RUNキューに登録されいてるプロセス）が保有するページは解放しない。従って、保有プロセスがRUNキューに登録され、かつ、page_nofree_active=‘1’の場合は、対象ページを解放対象としない判断結果‘0’を返し(S128)、処理終了する。
【００９５】
次に、保有プロセスがリアルタイムプロセスか否か、および、ハイバネ・ページ制御情報63-1のフラグpage_nofree_realtimeが設定されているか否かを判定する(S124)。図12に示すように、フラグpage_nofree_realtimeが設定されている場合、リアルタイムプロセスが保有するページは解放しない。従って、リアルタイムプロセスであり、かつ、page_nofree_realtime=‘1’の場合は、対象ページを解放対象としない判断結果‘0’を返し(S128)、処理終了する。
【００９６】
次に、保有プロセスがユーザインタフェイス(UI)属性プロセスか否か、および、ハイバネ・ページ制御情報63-1のフラグpage_nofree_uiが設定されているか否かを判定する(S125)。図12に示すように、フラグpage_nofree_uiが設定されている場合、対話型プロセスが保有するページは解放しない。従って、UI属性プロセスであり、かつ、page_nofree_ui=‘1’の場合は、対象ページを解放対象としない判断結果‘0’を返し(S128)、処理終了する。
【００９７】
次に、ページ管理構造63-3のref_countを参照して対象ページが複数のプロセスから参照されているか否か、および、ハイバネ・ページ制御情報63-1のフラグpage_nofree_refが設定されているか否かを判定する(S126)。図12に示すように、フラグpage_nofree_refが設定されている場合、複数のプロセスから参照されているページ（ref_count＞1）は解放しない。従って、ref_count＞1、かつ、page_nofree_ref=‘1’の場合は、対象ページを解放対象としない判断結果‘0’を返し(S128)、処理終了する。
【００９８】
ステップS121からS126の判定のすべてが否の場合、対象ページを解放対象とする判断結果‘1’を返し(S127)、処理終了する。
【００９９】
●ファイルページ判定処理
図19のフローチャートによりファイルページ判定処理(S119)を説明する。
【０１００】
ファイルページ判定処理は、図17に示すページの解放処理から呼び出され、対象ページが解放対象か否かの判断を行う。判断結果は‘0’と‘1’の戻り値で示され、‘0’は解放対象としない判断結果を表し、‘1’は解放対象とする判断結果を表す。
【０１０１】
まず、ハイバネ・ページ制御情報63-1のfile構造体がNULLか否かを判定する(S131)。NULLではない場合、file構造体の先頭メンバからinode情報62-1へのポインタp_inode（図11参照）を取り出す(S132)。そして、取り出したポインタp_inodeと、対象ページのページ管理構造63-3のメンバであるポインタp_inodeが一致するか否かを判定する(S133)。両ポインタが一致する場合、対象ページはページキャッシュを解放しないファイルに属すと判断し、対象ページを解放対象としない判断結果‘0’を返し(S134)、処理終了する。
【０１０２】
また、両ポインタが一致しない場合は、file構造体の次のメンバへのポインタnext（図11参照）を参照し、nextがNULLか否かを判定する(S135)。nextがNULLではない場合は処理をステップS132に戻し、ポインタnextが指すメンバのポインタp_inodeの取り出し(S132)と、ポインタp_inodeに関する判定(S133)を繰り返す。
【０１０３】
ステップS131の判定においてfile構造体がNULLの場合、あるいは、ポインタが一致しないままfile構造体のポインタnextがNULLになった場合は、対象ページはページキャッシュを解放しないファイルに属さないと判断する。そして、対象ページを解放対象とする判断結果‘1’を返し(S136)、処理終了する。
【０１０４】
このように、ハイバネ・ページ制御情報63-1に設定されたページの解放を制御する情報に従いページが解放対象か否かの判定を行う。従って、ハイバネ・ページ制御情報63-1の設定により、再起動後のスループットを低下させる可能性が高いページは解放せずに、再起動後のスループットを低下させる可能性が低いページを解放するように、ページの解放処理が制御される。従って、スナップショットイメージのデータサイズを小さくして再起動の高速化を図るとともに、再起動後のスループットの低下を抑えることが可能になる。
【０１０５】
［その他の実施例］
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステムあるいは装置のコンピュータ（又はCPUやMPU等）がプログラムを読み出して実行する処理である。
【図１】
2014086052.tif 000003
【図２】
2014086052.tif 000004
【図３】
2014086052.tif 000005
【図４】
2014086052.tif 000006
【図５】
2014086052.tif 000007
【図６】
2014086052.tif 000008
【図７】
2014086052.tif 000009
【図８】
2014086052.tif 000010
【図９】
2014086052.tif 000011
【図１０】
2014086052.tif 000012
【図１１】
2014086052.tif 000013
【図１２】
2014086052.tif 000014
【図１３】
2014086052.tif 000015
【図１４】
2014086052.tif 000016
【図１５】
2014086052.tif 000017
【図１６】
2014086052.tif 000018
【図１７】
2014086052.tif 000019
【図１８】
2014086052.tif 000020
【図１９】
2014086052.tif 000021