(58)【調査した分野】(Int.Cl.,DB名)
前記指定手段による優先度の指定により、前記優先度以上の優先度を有するプロセスが保有するキャッシュは前記解放しないキャッシュに指定されることを特徴とする請求項1または請求項2に記載された情報処理装置。
前記指定手段により解放しないキャッシュ量が指定された場合、前記解放手段は、前記キャッシュ量に達するまでアクセス頻度の低い順にキャッシュを解放することを特徴とする請求項1から請求項8の何れか一項に記載された情報処理装置。
前記退避するデータには、前記情報処理装置のマイクロプロセッサのレジスタのレジスタ情報、および、前記情報処理装置のハードウェアレジスタのレジスタ情報が含まれることを特徴とする請求項1から請求項9の何れか一項に記載された情報処理装置。
【発明を実施するための形態】
【0018】
以下、本発明にかかる実施例の情報処理を図面を参照して詳細に説明する。
【0019】
[スナップショットイメージと起動の高速化の関係]
ハイバネーションを用いる場合の起動時間の九割近くは、二次記憶装置からメインメモリへのスナップショットイメージの転送に要する時間である。従って、スナップショットイメージのデータサイズを小さくすれば、コンピュータの起動を高速化することができる。
【0020】
稼働状態のメインメモリの記憶状態に相当するスナップショットイメージのデータサイズを小さくする一方法として、スナップショットイメージを取得する際にメインメモリ内のキャッシュをクリアすることが有効である。これは高機能OSとして採用されるOSが、ファイルに関連する多量のキャッシュ(ページキャッシュ、バッファキャッシュ、inodeキャッシュ、ディレクトリエントリキャッシュなど)を構築することに起因する。これらキャッシュは、システムの稼働状態においては、スループットの向上に有効である一方、メモリ使用率を増加させ、スナップショットイメージのデータサイズを増加させる。
【0021】
従って、起動時間が問題になるコンピュータ機器においては、スナップショットイメージの取得前にキャッシュを解放し、スナップショットイメージのデータサイズを削減して再起動時のデータ転送量を抑制すれば、さらに起動の高速化が実現可能である。
【0022】
また、もう一つの方法として、キャッシュの他にメインメモリに確保されたスワップ可能なメモリ領域の解放がある。スワップ可能なメモリ領域は、プロセスが確保した、ファイルと関連付けられていない各種メモリ領域であり、多くの場合、無名ページ(アノニマスページ)や共有メモリとして利用されている。
【0023】
スワップ可能なメモリ領域は、キャッシュのように単純に解放することはできないが、別途用意されるスワップ領域に退避して、当該メモリ領域を解放し、空きメモリとすることが可能である。従って、スナップショットイメージの取得前にスワップ可能なメモリ領域をスワップアウトして解放し、スナップショットイメージのデータサイズを削減して再起動時のデータ転送量を抑制すれば、さらに起動の高速化が実現可能である。
【0024】
[装置の構成]
図1のブロック図により実施例の情報処理装置の構成例を示す。
【0025】
図1において、マイクロプロセッサ(CPU)11は、情報処理装置のほぼすべてを管理する。メインメモリ12は、CPU11からアクセス可能なRAMなどである。外部記憶装置13は、例えばハードディスクドライブ(HDD)やフラッシュメモリである。デバイス14、15は、例えばキーボード、マウス、USBデバイス、ディスプレイなど、情報処理装置に接続される様々なデバイスである。
【0026】
[起動シーケンス]
図2により実施例の情報処理装置における通常の起動シーケンスからスナップショットイメージ40の取得までの流れを説明する。
【0027】
ハイバネーションを使わない通常の起動の場合、情報処理装置がパワーオンされると、通常のブートローダによるOSのロード、カーネル初期化、rootfsマウント、init起動、アプリケーション実行を経て起動処理が完了する。システム構成によるが、多くの場合、起動処理に30秒から1分、場合によっては数分かかる。
【0028】
スナップショットイメージ40の取得は、アプリケーション実行段階で実施される。スナップショットイメージ40の取得が開始されると、メインメモリ12、ハードウェアレジスタ、CPUレジスタの記憶内容がスナップショットイメージ40として外部記憶装置13に退避され、その後、情報処理装置がパワーオフになる。
【0029】
図3により実施例の情報処理装置におけるハイバネーションを用いた起動シーケンスを説明する。
【0030】
ハイバネーションを用いた起動の場合、情報処理装置がパワーオンされると、スナップショットイメージ40として退避したデータをメインメモリ12に復元する。その後、CPUのレジスタ値の復元、デバイスのレジスタ値の復元、アプリケーションの復帰を経て、情報処理装置が前回の稼働時の状態に復帰する。システム構成によるが、ハイバネーションを用いた起動処理は、通常の起動処理と異なり、数秒で終了し、情報処理装置は即座に稼働状態に復帰可能である。
【0031】
図4によりスナップショットイメージ40の形式の概要を示す。
図4に示す形式は、ハイバネーションを用いた起動を実施する場合の一つの形式に過ぎず、ハードウェア構成やソフトウェア的な要因によって変わる場合がある。スナップショットイメージ40には、ヘッダ41、レジスタ情報42、ページメタデータ43、ページデータ44の各ブロックが存在する。
【0032】
図5によりスナップショットイメージ40の各要素の詳細例を説明する。
図6によりスナップショットイメージ40の各要素に含まれる構造体メンバの詳細例を説明する。
【0033】
図6(a)はヘッダ41に含まれる構造体メンバの詳細例を示す。本実施例では32ビットハードウェアを想定しているため、
図6(a)に示すように、多くのメンバが4バイト=32ビットで宣言されているが、64ビットや128ビット環境においてはそれに相応しいサイズがあり、実装環境に合わせて適宜変更される。
【0034】
図6(b)はレジスタ情報42に含まれる構造体メンバの詳細例を示す。レジスタ情報42は、システムによって異なるが、本実施例ではr0からr15までの16個の32ビット汎用レジスタと、フラグレジスタ、プログラムカウンタ、スタックポインタ(以下、CPUレジスタ)をもつ32ビットCPUを想定している。レジスタ情報42に退避されたCPUレジスタの値が、システムの再起動時にCPU11に再設定され、情報処理装置は稼働時の状態に戻る。
【0035】
図6(c)はページメタデータ43に含まれる構造体メンバの詳細例を示す。ページメタデータ43は、後述するページデータのメインメモリ12上の物理アドレスと連続するページ数を保持する。ページメタデータ43は、メインメモリの低位アドレスから高位アドレス方向に昇順に並んでいて、ページデータ44の並びと一対一に対応する。
【0036】
ページデータ44は、スナップショットイメージ40を取得する処理において、メインメモリ12の解放されなかったページを集めたデータである。ページメタデータ43の説明において述べたように、ページデータ44は低位アドレスから高位アドレス方向に向かって昇順に並んでいる。実装によって、ページデータ44はデータ圧縮されていてもよいし、暗号化されていてもよい。その場合、ヘッダ41のメンバであるh_compressやh_encyptには、圧縮形式や暗号タイプを示す値がセットされ、再起動時の処理におけるページデータの復元において参照される。なお、データ圧縮および暗号化はソフトウェアで処理してもよいし、専用のハードウェアで処理してもよい。
【0037】
図7によりスナップショットイメージ40を使って再起動時にシステムを復元する仕組みを説明する。
【0038】
再起動時の起動処理において、まず、二次記憶装置13からスナップショットイメージ40のヘッダ41が読み出される。そして、ヘッダ41の先頭のh_idメンバがチェックされ、h_idメンバにスナップショットイメージを表す文字列が含まれるとスナップショットイメージ40を用いた起動処理が実行される。この場合、スナップショットイメージ40のページメタデータ43に従い、ページデータ44を(必要であれば伸長、復号し)DMA転送によりメインメモリ12に転送する。ページデータ44の転送終了後、CPUレジスタをレジスタ情報42で復元し、その後、デバイスのレジスタ値の復元して、情報処理装置を稼働時の状態に復帰させる。
【0039】
[メモリ管理/ページ管理]
図8によりメモリ管理/ページ管理の概念を説明する。
【0040】
メインメモリ12にはキャッシュ51が確保されている。OSに仮想記憶機構が実装されている場合、キャッシュ51はページ単位(多くの場合は4KB)であり、一般に「ページキャッシュ」と呼ばれる。
【0041】
OSは、プロセスからファイルIO要求があると、まずページキャッシュ51を検索し、ページキャッシュ51があればそれを返す。ページキャッシュ51がなければ、OSは、二次記憶装置13からデータを読み出してページキャッシュ51をリフィルし、ページキャッシュ51のリフィルが終了するとプロセスにその結果を返す。この作業は、プロセスからの要求サイズがページサイズ以下であれば一回で済むが、ページサイズ以上であればその分(要求サイズ/ページサイズ+1)の作業回数になる。
【0042】
OSは、各プロセスからの要求に従い、二次記憶装置13に格納されたファイル54のリードライトを行う。その結果、ページキャッシュ51にも同じ内容が保持され、二回目以降のアクセスに対してはページキャッシュ51を利用することでスループットが向上する。
【0043】
メインメモリ12には共有メモリ52とアノニマスメモリ53が確保されている。これらメモリ領域もOSによってページ単位(多くの場合4KB)に割り当てられる。ただし、通常のページキャッシュ51と異なるのは、共有メモリ52とアノニマスメモリ53がファイルに関連付けられていない点である。OSは、システムの空きメモリが少なくなると、共有メモリ52とアノニマスメモリ53に割り当てたページをスワップ55に退避させ、ページを解放してシステムの空き領域に追加する。
【0044】
共有メモリ52とアノニマスメモリ53のメモリ領域は、ページキャッシュ51と異なり、基本的に汚れている「ダーティページ」と呼ばれるページのため、OSによるメモリ回収処理によって単純に解放することができない。従って、共有メモリ52とアノニマスメモリ53の解放は、必ずスワップ55への書出しを伴い、処理コスト的に重い処理になる。
【0045】
一方、ファイルに対するページキャッシュ51は、ファイルを読み出す限りは汚れていない「クリーンページ」と呼ばれるページであり、メモリ回収処理によって単純に解放すればよい。従って、ページキャッシュ51の解放は、より軽い処理であると言える。
【0046】
図9によりOSのメモリ管理/ページ管理の仕組みをより詳しく説明する。OSは、各種資源を管理するために複数の管理機構をもつ。本実施例で利用する管理機構は、プロセス管理機構、ファイル管理機構、メモリ管理機構の三つである。
図10によりプロセス管理機構の構造体メンバとメモリ管理機構の機能および構造体メンバの詳細例を説明する。
【0047】
プロセス管理機構61は、プロセスに関するすべての管理を担い、プロセス管理のために、プロセスごとにプロセス管理構造61-1を割り当てる。
図10(a)はプロセス管理構造61-1に含まれる、各プロセスの詳細な情報を保持する構造体メンバの詳細例を示す。
【0048】
ファイル管理機構62は、システム内のファイルを一元的に管理する機構で、一般に、個々のファイルを管理するためにinodeを使用する。個々のプロセスがアクセスしているファイルのinodeは、プロセス管理機構61のプロセス管理構造61-1のポインタp_inodeが保持し、ポインタp_inodeはファイル管理機構62のinode情報62-1を指す。
【0049】
inode情報62-1は、対応するファイルの様々な情報を保持し、ファイルアクセスのための基本構造である。ファイル管理機構62は、inode情報に基づき各種のファイル操作を行う。
【0050】
メモリ管理機構63は、メインメモリ12をページ単位に管理する。ここでは、仮想記憶機構を使ったページ単位のメモリ管理や、各種のキャッシュ管理機構を備えることにする。
図10(b)はページ管理機構63-2の機能を示す。
【0051】
ページ管理機構63-2は、ページ管理のために、ページごとに一つのページ管理構造63-3を利用する。ページ管理構造63-3にはキャッシュ制御のために多くのメンバが含まれる。
図10(c)は本実施例で使用するページ管理構造63-3のメンバを示す。
【0052】
ページ管理構造63-3において、参照カウントref_countは、当該ページを参照するプロセスが増える度にページ管理機構63-2によって更新される。参照カウントref_countにより、複数のプロセスからアクセスされているページを特定することができる。
【0053】
ポインタp_processは、当該ページを保有するプロセスのプロセス管理構造61-1へのポインタである。ポインタp_processにより、ページからプロセスを特定することができる。なお、ポインタp_processの値はNULLの場合がある。
【0054】
ポインタp_inodeは、当該ページがファイルキャッシュとして使われている場合に設定され、その場合、ポインタp_inodeは該当ファイルのinode情報を指す。なお、ポインタp_inodeの値はNULLの場合がある。
【0055】
ポインタlinkは、システム内のページをアクセス頻度ごとに並べたLRU (least recently used)リスト構造へのリンクポインタである。LRUリスト63-4は、アクセス頻度が高いページ順に並ぶように管理され、アクセス頻度が低いページはメモリ不足時の解放対象になる。また、本実施例におけるスナップショットイメージ作成処理においても、LRUリスト63-4をアクセス頻度の低い順に走査して解放するページの取捨選択を行う。
【0056】
●ファイルアクセス
図9において、プロセスAから二次記憶装置13に格納されたファイル64のリード要求があったとする。この場合、以下の処理によってファイルアクセスが実現される。
【0057】
OSは、まず、プロセスAの要求から対象ファイルのinode情報62-1を取り出す。inode情報が決まると、ファイル管理機構62は、メモリ管理機構63にinode情報62-1を渡し、inode情報62-1に対応するページ検索を要求する。
【0058】
メモリ管理機構63は、要求されたファイルが既にキャッシュされているか否かを検索するため、自身のページ管理機構63-2を使ってページ検索を実行する。ページ管理機構63-2は、管理下のページを検索し、inode情報62-1に対応するページがあればそれを返す。さらに、当該ページに対するアクセスが発生したので、LRUリスト63-4を更新して、当該ページをよりアクセス頻度が高い位置に移動する。
【0059】
他方、ページキャッシュにinode情報62-1に対応するページがない場合、メモリ管理機構63は、メインメモリ12にキャッシュに使用するページを確保し、当該ページにデバイスドライバ経由でファイル64のデータを読み出す。これによりキャッシュがリフィルされ、その結果を返す。さらに、生成したページキャッシュのページをLRUリスト63-4に追加し、以降、ファイル64のアクセス要求があった場合はページを返すのみで済むため、アクセススピードが向上する。
【0060】
ページ管理機構63-2は、上記のページの管理だけではなく、ページの解放や、ページの参照カウントも管理する。ページの解放は、不要になったページキャッシュや、削除されたファイルのページキャッシュを削除するため、上位のファイル管理機構62やOSの他の機構から呼び出される。
【0061】
LRUリスト63-4の管理には様々な手法があり、所定時間アクセスがないページをアクセス頻度が低い位置に移動させる仕組みを備えてもよい。また、CPU11のMMU (memory management unit)機構がページごとに参照履歴ビットをもつ場合、当該情報に基づきLRUリスト63-4を最適な状態に維持することもできる。OSは、これらの仕組みを使い、メモリ使用量が増大し空きメモリが減少した場合、LRUリスト63-4上でアクセス頻度が低いページを解放してシステムの空きメモリを維持するなどの処理を行う。以上のようなキャッシュ管理機構の仕組みを使ってキャッシュは維持されている。
【0062】
なお、上記のキャッシュ制御の概要説明は、UNIX(登録商標)系の一般的なOSを例に挙げた。OSの実装によっては、上記と多少異なるページ管理を行う場合もある。しかし、本発明は、ページ管理機構を使ってプロセスが保有する優先度の低いページを解放するためのものであり、ページ管理ロジックの詳細は本発明の本質ではない。
【0063】
●ページ解放の挙動指定
図9に示すハイバネ・ページ制御情報63-1は、本実施例においてページ制御を行うための情報である。
図11によりハイバネ・ページ制御情報63-1の詳細例を示す。
図12によりハイバネ・ページ制御情報63-1のメンバを説明する。なお、ハイバネ・ページ制御情報63-1のメンバであるフラグや変数は、システムの起動時にゼロクリアされ、その後、システムコールなどにより変更される。
【0064】
図13によりハイバネ・ページ制御情報63-1に含まれるフラグや変数を設定する処理を説明する。ハイバネ・ページ制御情報63-1の設定は、システムコールなどを用いて、ユーザ空間の挙動設定プログラム71などから行われる。スナップショットイメージ40の取得前に、ハイバネ・ページ制御情報63-1を設定することにより、スナップショットイメージ40を取得する際のページ解放処理が変化する。また、ハイバネ・ページ制御情報63-1に何も設定しない場合(つまりゼロクリアされたまま)、可能な限りページを解放する指定と見做される。
【0065】
ハイバネ・ページ制御情報63-1の殆どのメンバは単純なフラグや数値であり、システムコールによる設定処理は単純に値を設定すればよい。ただし、メンバfileについて、OSは以下の処理を実行する必要がある。
【0066】
file構造体(sturct nofree_file)領域の確保と初期化を行い(S71)、既にファイル登録があれば、そのfile->nextに‘1’で確保した領域を設定する(S72)。システムコールで通知されたファイルの絶対パスをfile->nameに格納する(S73)。さらに、通知された絶対パスを使ってOSのファイル管理を通じてファイルに対応するinode情報62-1へのポインタを取得し、取得したポインタをfile->p_inodeに格納する(S74)。そして、file->nextをNULLにする(S75)。
【0067】
以上のように、ページキャッシュを解放しないファイルに関する情報を保持しておくことで、後述するファイルページ判定処理時(
図13)に迅速にページを解放するか否かの判定を行うことができる。
【0068】
●キャッシュ非解放プロセスの指定
図14により指定したプロセスに属するページキャッシュはスナップショットイメージの取得時に解放しないように指定する処理を説明する。この指定処理は、
図13に示したようなシステム全体のキャッシュを制御するフラグや変数を変更する処理ではなく、プロセス別の指定処理である。つまり、あるプロセスのページキャッシュを解放したくない場合、この指定処理を事前(スナップショットイメージの取得前)に実行する。
【0069】
ユーザ空間の挙動設定プログラム71は、ページキャシュを解放したくないプロセスのプロセスIDを引数にしてシステムコールを実行する。これにより、OSは次の処理を実行する。
【0070】
プロセスIDによって指定されるプロセスのプロセス管理構造61-1を取得し(S81)、取得したプロセス管理構造61-1のメンバno_free_cacheフラグに‘1’をセットする(S82)。これにより、当該プロセスに所属するページをスナップショットイメージの取得時に解放しないことを明示する。
【0071】
●スナップショットイメージの取得処理
図15によりスナップショットイメージの取得処理を説明する。
【0072】
ユーザ空間のハイバネーション開始指定プログラム91は、システムコールにより、OSに対してスナップショットイメージの取得の開始を通知する。この通知を受けたOSは次の処理を実行する。
【0073】
システムで動作しているすべてのプロセスを停止し(S91)、以降、メモリ使用状態の変更を防ぐ。続いて、現時点でのCPUレジスタの設定値を退避し(S92)、デバイスレジスタの設定値を退避する(S93)。そして、詳細は後述するが、ページの解放処理を行う(S94)。これにより、不要なキャッシュが解放され、スナップショットイメージのデータサイズが小さくなる。
【0074】
次に、メモリの回収処理を行う(S95)。これにより、使用状態のメモリイメージを
図4に示すような形式のスナップショットイメージ40として、ファイルに書き出せるようにする。そして、生成したスナップショットイメージ40を二次記憶装置13に書き出し(S96)、システムの停止処理を行う(S97)。
【0075】
●ハイバネーション起動処理
図16によりハイバネーション起動処理を説明する。
【0076】
起動ボタンコントローラがシステムのリセットを発行するとブートローダが実行される。ブートローダは、まず、二次記憶装置13の所定領域に
図7に示すスナップショットイメージ40が格納されている否かを判定する。この判定は、ヘッダ41の文字列h_idをチェックすることで行われる。ブートローダは、この判定により、スナップショットイメージ40の格納が確認できない場合は通常起動を行い、スナップショットイメージ40の格納が確認できた場合は次の処理を行う。
【0077】
メモリの復元処理を行う(S101)。この処理は、
図7に示したように、ページメタデータ43とページデータ44を参照しながらDMA転送によりメモリイメージを復元するものである。続いて、CPUレジスタの復元処理を行う(S102)。
【0078】
CPUレジスタの復元処理が終了するとブートローダからOSへの復帰が実現し、OSは次の処理を行う。
【0079】
デバイスレジスタの復元処理を行い(S103)、スナップショットイメージの取得処理におけるステップS91で停止されたプロセスの再開処理を行う(S104)。そして、スナップショットイメージの取得処理でハイバネーション開始指定プログラム91が発行したシステムコールからリターンしてアプリケーションの実行を再開する。
【0080】
●ページの解放処理
図17のフローチャートによりページの解放処理(S94)を説明する。ページの解放処理は、メモリの回収処理(S95)を実行する前に呼び出され、不要なキャッシュを解放してスナップショットイメージ40をできる限りコンパクトにする処理である。
【0081】
まず、
図9に示すLRUリスト63-4を検索して処理対象のページ管理構造63-3を取り出す(S111)。LRUリスト63-4はアクセス頻度順にソートされているので、アクセス頻度の低いページ順に処理を行い、LRUリスト63-4に登録された全ページについて処理を終了した場合(S112)はページの解放処理を終了する。
【0082】
次に、取り出したページ管理構造63-3から当該ページを保有するプロセスを特定するために、ページ管理構造63-3に含まれる、当該ページが所属するプロセス管理機構61へのポインタp_processがNULLか否かを判定する(S113)。ポインタp_processがNULLの場合、当該ページはプロセスに保有されていないと判断され、処理をステップS118に進める。また、ポインタp_processがNULLではない場合はプロセスページ判定処理(S114)を実行する。
【0083】
プロセスページ判定処理(S114)の詳細は後述するが、プロセスページ判定処理の戻り値が‘1’の場合(S115)、当該ページは解放するページと判断されたことを意味し、ページ解放処理(S116)を実行する。また、プロセスページ判定処理の戻り値が‘0’の場合(S115)、当該ページは解放しないと判断されたことを意味し、ページ解放処理を実行せずに処理をステップS117に進める。
【0084】
一方、当該ページがプロセスに保有されていないと判断された場合(S113)、当該ページがファイルキャッシュに使われているか否かを判定するために、ページ管理構造63-3に含まれるポインタp_inodeがNULLか否かを判定する(S118)。ポインタp_inodeがNULLの場合、当該ページはOSが特別な理由で確保したページと判断され、ページ解放処理の対象とせず、処理をステップS111に戻し、LRUリスト63-4から次の処理対象のページ管理構造63-3を取り出す。
【0085】
他方、ポインタp_inodeがinode情報62-1を指す場合は当該ページがファイルキャッシュに使われていると判定することができ、ファイルページ判定処理(S119)を実行する。
【0086】
ファイルページ判定処理(S119)の詳細は後述するが、ファイルページ判定処理の戻り値が‘1’の場合(S120)、当該ページは解放するページと判断されたことを意味し、ページ解放処理(S116)を実行する。また、ファイルページ判定処理の戻り値が‘0’の場合(S120)、当該ページは解放しないと判断されたことを意味し、ページ解放処理を実行せずに処理をステップS117に進める。
【0087】
ステップS116において、OSのメモリ管理機構が用意するページ解放処理が呼び出される。ページ解放処理は、指定されたページのデータを必要に応じて書き出し、その後、空きメモリとして解放する。例えば対象ページがファイルキャッシュで汚れていれば、当該ページのデータをファイルの該当位置に書き出した後、当該ページを解放する。また、ファイルキャッシュで汚れていないページは単純に解放する。また、対象ページがアノニマスページで汚れていれば、当該ページのデータをスワップに書き出した後、当該ページを解放する。この処理は、OSのメモリ管理機構が提供する機能であり、詳細な説明は省略する。ページ解放処理が終了すると処理はステップS117に進む。
【0088】
ステップS117において、必要なページ数が解放されたか否かを判定する。ハイバネ・ページ制御情報63-1のメンバであるpage_total変数に残すべきページキャッシュの値(キャッシュ量)が設定されている場合は、当該設定量に基づく比較により判定を行う。つまり、LRUリスト63-4に登録されたページ総数がpage_total変数の値より大きければ、さらにページを解放する必要があり、処理をステップS111に戻し、ページの解放処理を継続する。また、LRUリスト63-4に登録されたページ総数がpage_total変数の値より小さければ、必要なページの解放処理が終了したと判断してページの解放処理を終了する。
【0089】
もし、page_total変数の値が0の場合は、残すべきページキャッシュの値が未指定と判断して、LRUリスト63-4に登録された解放可能なすべてのページを解放対象とするために処理をステップS111に戻し、ページの解放処理を継続する。
【0090】
●プロセスページ判定処理
図18のフローチャートによりプロセスページ判定処理(S114)を説明する。
【0091】
プロセスページ判定処理は、
図17に示すページの解放処理から呼び出され、対象ページが解放対象か否かの判断を行う。判断結果は‘0’と‘1’の戻り値で示され、‘0’は解放対象としない判断結果を表し、‘1’は解放対象とする判断結果を表す。
【0092】
まず、対象ページを保有するプロセス(以下、保有プロセス)のプロセス管理構造61-1を参照してフラグno_free_cacheが設定されているか否かを判定する(S121)。
図14において説明したように、フラグno_free_cacheが設定されているプロセスに所属するページは解放しない指定である。従って、フラグno_free_cacheが設定されている(no_free_cache=‘1’)場合は、対象ページを解放対象としない判断結果‘0’を返し(S128)、処理終了する。
【0093】
次に、保有プロセスのプロセス管理構造61-1の優先度niceの値と、ハイバネ・ページ制御情報63-1のpage_nofree_niceの値を比較する(S122)。
図12に示すように、page_nofree_niceの値以上の優先度(niceの値)をもつプロセスが保有するページは解放しない。つまり、優先度が指定された優先度以上のプロセスが保有するページは解放しない。従って、優先度がpage_nofree_niceの値以上(nice≧page_nofree_nice)の場合は、対象ページを解放対象としない判断結果‘0’を返し(S128)、処理終了する。
【0094】
次に、保有プロセスがRUNキューに登録されているか否か、および、ハイバネ・ページ制御情報63-1のフラグpage_nofree_activeが設定されているか否かを判定する(S123)。
図12に示すように、フラグpage_nofree_activeが設定されている場合、実行待ち状態のプロセス(RUNキューに登録されいてるプロセス)が保有するページは解放しない。従って、保有プロセスがRUNキューに登録され、かつ、page_nofree_active=‘1’の場合は、対象ページを解放対象としない判断結果‘0’を返し(S128)、処理終了する。
【0095】
次に、保有プロセスがリアルタイムプロセスか否か、および、ハイバネ・ページ制御情報63-1のフラグpage_nofree_realtimeが設定されているか否かを判定する(S124)。
図12に示すように、フラグpage_nofree_realtimeが設定されている場合、リアルタイムプロセスが保有するページは解放しない。従って、リアルタイムプロセスであり、かつ、page_nofree_realtime=‘1’の場合は、対象ページを解放対象としない判断結果‘0’を返し(S128)、処理終了する。
【0096】
次に、保有プロセスがユーザインタフェイス(UI)属性プロセスか否か、および、ハイバネ・ページ制御情報63-1のフラグpage_nofree_uiが設定されているか否かを判定する(S125)。
図12に示すように、フラグpage_nofree_uiが設定されている場合、対話型プロセスが保有するページは解放しない。従って、UI属性プロセスであり、かつ、page_nofree_ui=‘1’の場合は、対象ページを解放対象としない判断結果‘0’を返し(S128)、処理終了する。
【0097】
次に、ページ管理構造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)、処理終了する。
【0098】
ステップS121からS126の判定のすべてが否の場合、対象ページを解放対象とする判断結果‘1’を返し(S127)、処理終了する。
【0099】
●ファイルページ判定処理
図19のフローチャートによりファイルページ判定処理(S119)を説明する。
【0100】
ファイルページ判定処理は、
図17に示すページの解放処理から呼び出され、対象ページが解放対象か否かの判断を行う。判断結果は‘0’と‘1’の戻り値で示され、‘0’は解放対象としない判断結果を表し、‘1’は解放対象とする判断結果を表す。
【0101】
まず、ハイバネ・ページ制御情報63-1のfile構造体がNULLか否かを判定する(S131)。NULLではない場合、file構造体の先頭メンバからinode情報62-1へのポインタp_inode(
図11参照)を取り出す(S132)。そして、取り出したポインタp_inodeと、対象ページのページ管理構造63-3のメンバであるポインタp_inodeが一致するか否かを判定する(S133)。両ポインタが一致する場合、対象ページはページキャッシュを解放しないファイルに属すと判断し、対象ページを解放対象としない判断結果‘0’を返し(S134)、処理終了する。
【0102】
また、両ポインタが一致しない場合は、file構造体の次のメンバへのポインタnext(
図11参照)を参照し、nextがNULLか否かを判定する(S135)。nextがNULLではない場合は処理をステップS132に戻し、ポインタnextが指すメンバのポインタp_inodeの取り出し(S132)と、ポインタp_inodeに関する判定(S133)を繰り返す。
【0103】
ステップS131の判定においてfile構造体がNULLの場合、あるいは、ポインタが一致しないままfile構造体のポインタnextがNULLになった場合は、対象ページはページキャッシュを解放しないファイルに属さないと判断する。そして、対象ページを解放対象とする判断結果‘1’を返し(S136)、処理終了する。
【0104】
このように、ハイバネ・ページ制御情報63-1に設定されたページの解放を制御する情報に従いページが解放対象か否かの判定を行う。従って、ハイバネ・ページ制御情報63-1の設定により、再起動後のスループットを低下させる可能性が高いページは解放せずに、再起動後のスループットを低下させる可能性が低いページを解放するように、ページの解放処理が制御される。従って、スナップショットイメージのデータサイズを小さくして再起動の高速化を図るとともに、再起動後のスループットの低下を抑えることが可能になる。
【0105】
[その他の実施例]
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステムあるいは装置のコンピュータ(又はCPUやMPU等)がプログラムを読み出して実行する処理である。