(57)【特許請求の範囲】
【請求項１】
情報処理装置であって、
ストレージ部に記憶された異なるファイルシステムに属する複数のファイルを、共通化
した仮想ファイルシステムにより管理する仮想管理部と、
電源が遮断されても情報を記憶し続ける不揮発記憶部に、前記仮想ファイルシステムの
管理情報およびデータ情報を、再起動後に読み出し可能に記憶させる不揮発記憶管理部と
、
を備え、
前記不揮発記憶管理部は、
前記不揮発記憶部に、ファイルシステムまたは前記情報処理装置を識別する識別情報を
記憶させ、
前記不揮発記憶部に記憶された前記識別情報に基づき、前記不揮発記憶部に記憶された
前記仮想ファイルシステムの管理情報およびデータ情報の読み出し可能とする
情報処理装置。
【請求項２】
前記不揮発記憶管理部は、前記不揮発記憶部に、前記ストレージ部に記憶された前記仮
想ファイルシステムの管理情報およびデータ情報を、再起動後に読み出し可能にキャッシ
ュさせる
請求項１に記載の情報処理装置。
【請求項３】
前記不揮発記憶管理部は、前記不揮発記憶部に、前記仮想ファイルシステムの管理情報
および前記データ情報を、予め定められたアドレスに記憶されたデータから辿ることがで
きるようにキャッシュさせる
請求項２に記載の情報処理装置。
【請求項４】
前記仮想ファイルシステムの管理情報は、複数のストレージ部を管理する複数のファイ
ルシステムのそれぞれ毎に、対応するファイルシステムの全体を管理するための全体管理
情報を含み、
前記全体管理情報は、対応するマウント情報から辿ることが可能である
請求項３に記載の情報処理装置。
【請求項５】
前記仮想ファイルシステムの管理情報は、ファイル毎に、対応するファイルを管理する
ためのファイル管理情報を含み、
前記ファイル管理情報は、対応する前記全体管理情報から辿ることが可能である
請求項４に記載の情報処理装置。
【請求項６】
前記データ情報は、対応する前記ファイル管理情報から辿ることが可能である
請求項５に記載の情報処理装置。
【請求項７】
前記不揮発記憶管理部は、
前記不揮発記憶部の予め定められたアドレスから辿ることが可能な位置に、前記識別情
報を書き込み、
前記不揮発記憶部に記憶された前記識別情報と、前記情報処理装置が保有する前記識別
情報とが一致した場合に、前記不揮発記憶部に記憶された前記仮想ファイルシステムの管
理情報および前記データ情報を読み出す
請求項１から６の何れか１項に記載の情報処理装置。
【請求項８】
前記全体管理情報は、対応するファイルシステムを識別するファイルシステム識別情報
を含み、
前記仮想管理部は、前記ストレージ部に記憶された前記全体管理情報に含まれる前記フ
ァイルシステム識別情報と、前記不揮発記憶部に記憶された前記全体管理情報に含まれる
前記ファイルシステム識別情報とが一致する場合に、前記不揮発記憶部に記憶された前記
仮想ファイルシステムの管理情報および前記データ情報を読み出す
請求項４から６の何れか１項に記載の情報処理装置。
【請求項９】
前記不揮発記憶管理部は、
前記不揮発記憶部の予め定められたアドレスから辿ることが可能な位置に、前記情報処
理装置を識別する固有識別情報を書き込み、
前記不揮発記憶部に記憶された前記固有識別情報と前記情報処理装置が保有する前記固
有識別情報とが一致した場合に、前記不揮発記憶部に記憶された前記仮想ファイルシステ
ムの管理情報および前記データ情報を読み出す
請求項８に記載の情報処理装置。
【請求項１０】
前記仮想管理部は、
前記仮想ファイルシステムの管理情報および前記データ情報を前記不揮発記憶部にキャ
ッシュさせる不揮発キャッシュモードに設定されている場合、前記仮想ファイルシステム
の管理情報および前記データ情報を、再起動後に読み出し可能に前記不揮発記憶部にキャ
ッシュさせる
請求項８または９に記載の情報処理装置。
【請求項１１】
前記仮想管理部は、
前記不揮発記憶部に記憶された前記仮想ファイルシステムの管理情報および前記データ
情報を再使用するリカバーモードに設定されている場合、前記ストレージ部のマウント時
において、前記不揮発記憶部に記憶された前記仮想ファイルシステムの管理情報および前
記データ情報を、マウントされた前記ストレージ部に記憶されたファイルを管理するため
に使用する
請求項８から１０の何れか１項に記載の情報処理装置。
【請求項１２】
前記仮想管理部は、
前記仮想ファイルシステムの管理情報および前記データ情報を前記ストレージ部に書き
戻すライトバックモードに設定されている場合、前記ストレージ部のアンマウント時にお
いて、前記不揮発記憶部に記憶されている前記仮想ファイルシステムの管理情報および前
記データ情報を前記ストレージ部に書き戻す
請求項８から１１の何れか１項に記載の情報処理装置。
【請求項１３】
前記ストレージ部を、複数のブロック分まとめてデータが書き込まれるブロックデバイ
スとして制御するブロックデバイス制御部をさらに備え、
前記不揮発記憶管理部は、前記ブロックデバイスの論理ブロックアドレスと、前記スト
レージ部の論理ブロックアドレスとの対応を示すアドレス変換テーブルを、前記不揮発記
憶部に再起動後に読み出し可能にキャッシュさせる
請求項１から１２の何れか１項に記載の情報処理装置。
【請求項１４】
プログラムを実行するプロセッサと、
前記プロセッサとメモリバスを介して接続され、電源が遮断されても情報を記憶し続け
る不揮発性メモリと、
ファイルシステムにより管理されるファイルを記憶し、電源が遮断されても情報を記憶
し続けるストレージデバイスと、
を備え、
前記不揮発性メモリは、前記不揮発記憶部として機能し、
前記プロセッサは、プログラムを実行することにより、前記仮想管理部と前記不揮発記
憶管理部として機能する
請求項１から１３の何れか１項に記載の情報処理装置。
【請求項１５】
前記不揮発性メモリは、前記プロセッサからバイト単位でアクセスされ、
前記ストレージデバイスは、前記プロセッサから前記バイト単位より大きいデータ単位
でアクセスされる
請求項１４に記載の情報処理装置。
【請求項１６】
前記プロセッサとメモリバスで接続され、電源が遮断されると情報を消去する揮発性メ
モリをさらに備え、
前記揮発性メモリは、電源が遮断された後に情報を復元しない揮発記憶部として機能し
、
前記プロセッサは、前記ストレージ部に記憶されたデータを前記揮発記憶部にキャッシ
ュさせる揮発記憶管理部としてさらに機能する
請求項１５に記載の情報処理装置。
【請求項１７】
前記不揮発記憶管理部は、
前記不揮発記憶部の予め定められたアドレスから辿ることが可能な位置に、保存された
データを識別するためのデータ識別情報を書き込み、
前記不揮発記憶部に記憶された前記データ識別情報と、前記情報処理装置の前記不揮発
記憶部以外に保存された前記データ識別情報とが一致した場合に、前記不揮発記憶部に記
憶された情報を読み出す
請求項１に記載の情報処理装置。
【請求項１８】
電源が遮断されても情報を記憶し続ける不揮発記憶部を備える情報処理装置の情報処理
方法であって、
ストレージ部に記憶された異なるファイルシステムに属する複数のファイルを、共通化
した仮想ファイルシステムにより管理するステップと、
前記不揮発記憶部に、前記仮想ファイルシステムの管理情報およびデータ情報を再起動
後に読み出し可能に記憶させるステップと、
前記不揮発記憶部に、ファイルシステムまたは前記情報処理装置を識別する識別情報を
記憶させるステップと、
前記不揮発記憶部に記憶された前記識別情報に基づき、前記不揮発記憶部に記憶された
前記仮想ファイルシステムの管理情報およびデータ情報の読み出し可能とするステップと
、
を実行させる情報処理装置の情報処理方法。
【請求項１９】
電源が遮断されても情報を記憶し続ける不揮発記憶部を備える情報処理装置を、
ストレージ部に記憶された異なるファイルシステムに属する複数のファイルを、共通化
した仮想ファイルシステムにより管理する仮想管理部と、
前記不揮発記憶部に、前記仮想ファイルシステムの管理情報およびデータ情報を、再起
動後に読み出し可能に記憶させる不揮発記憶管理部と
して機能させ、
前記不揮発記憶管理部は、
前記不揮発記憶部に、ファイルシステムまたは前記情報処理装置を識別する識別情報を
記憶させ、
前記不揮発記憶部に記憶された前記識別情報に基づき、前記不揮発記憶部に記憶された
前記仮想ファイルシステムの管理情報およびデータ情報の読み出し可能とする
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、情報処理装置、情報処理方法およびプログラムに関する。
【背景技術】
【０００２】
近年、スピン注入メモリ（ＳＴＴ−ＲＡＭ）等のバイト単位でアクセスが可能な不揮発性メモリが注目されている。このような不揮発性メモリは、プロセッサのメモリバスに接続して用いることができる。また、情報処理装置には、複数のストレージデバイスを接続することができる。
【０００３】
バイト単位でアクセスが可能な不揮発性メモリが接続されたプロセッサを備える情報処理装置は、電源が突然遮断するといった障害が発生した場合であっても、直前まで不揮発性メモリに記憶していたデータを保持することができる。しかしながら、このような情報処理装置では、予め不揮発性メモリの使用方法が固定的に決まっており、複数のストレージ部の情報を保持させることはできなかった。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】Sheng  Qiu  and  A.  L.  Narasimha  Reddy,  “NVMFS:  A  Hybrid  File  System  for  Improving  Random  Write  in  NAND-flash  SSD”,  2013  IEEE  29th  Symposium  on  Mass  Storage  Systems  and  Technologies  (MSST),  pp.  1-5,  May  2013.
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明が解決しようとする課題は、障害発生等により再起動した場合において、データを効率良く復旧することにある。
【課題を解決するための手段】
【０００６】
実施形態の情報処理装置は、ストレージ部に記憶された異なるファイルシステムに属する複数のファイルを、共通化した仮想ファイルシステムにより管理する仮想管理部と、電源が遮断されても情報を記憶し続ける不揮発記憶部に、前記仮想ファイルシステムの管理情報およびデータ情報を、再起動後に読み出し可能に記憶させる不揮発記憶管理部と、を備え、前記不揮発記憶管理部は、前記不揮発記憶部に、ファイルシステムまたは前記情報処理装置を識別する識別情報を記憶させ、前記不揮発記憶部に記憶された前記識別情報に基づき、前記不揮発記憶部に記憶された前記仮想ファイルシステムの管理情報およびデータ情報の読み出し可能とする。
【図面の簡単な説明】
【０００７】
【図１】第１の実施形態に係る情報処理装置のハードウェアの構成図。
【図２】第１の実施形態に係る情報処理装置の機能ブロック図。
【図３】ストレージ部に記憶されるデータを示す図。
【図４】不揮発記憶部に記憶される情報を示す図。
【図５】確保処理のフローチャート。
【図６】解放処理のフローチャート。
【図７】フォーマット時の処理のフローチャート。
【図８】情報処理装置の起動時の処理のフローチャート。
【図９】仮想ファイルシステムの主記憶装置に保持するデータ構造を示す図。
【図１０】不揮発記憶部およびストレージ部等に記憶される情報を示す図。
【図１１】スーパーブロック情報を示す図。
【図１２】ｉノード情報を示す図。
【図１３】ｉノード情報の他の例を示す図。
【図１４】アプリケーションとオペレーティングシステムとの関係を示す図。
【図１５】ストレージ部のアンマウント処理のフローチャート。
【図１６】ストレージ部のマウント処理のフローチャート。
【図１７】ハッシュリストを不揮発記憶部に記憶した場合の情報を示す図。
【図１８】パーティション毎の不揮発記憶部の占有率の一例を示す図。
【図１９】第２の実施形態に係る情報処理装置のハードウェアの構成図。
【図２０】第２の実施形態に係る情報処理装置の機能ブロック図。
【図２１】第２の実施形態における不揮発記憶部等に記憶される情報を示す図。
【図２２】第３の実施形態に係る情報処理装置の機能ブロック図。
【図２３】第３の実施形態に係る情報処理装置の書き込み処理を示す図。
【図２４】状態ビットマップを示す図。
【図２５】ＬＢＡ変換テーブルを示す図。
【図２６】ブロックデバイス情報を示す図。
【図２７】ブロックデバイスの作成処理のフローチャート。
【発明を実施するための形態】
【０００８】
以下、図面を参照しながら実施形態に係る情報処理装置について詳細に説明する。本実施形態に係る情報処理装置は、仮想ファイルシステムの管理情報およびデータ情報のキャッシュを、再起動後に利用可能とすることを目的としている。
【０００９】
（第１の実施形態）
図１は、第１の実施形態に係る情報処理装置１０のハードウェアの構成を示す図である。情報処理装置１０は、プロセッサ２１と、不揮発性メモリ２２と、ネットワークインタフェース２３と、少なくとも１つのストレージデバイス２４とを備える。
【００１０】
プロセッサ２１は、ＣＰＵ（Central  Processing  Unit）等の演算制御ユニットである。プロセッサ２１は、プログラムを実行する。プロセッサ２１は、プログラムを実行することにより、不揮発性メモリ２２を主記憶装置として用いて、演算処理および制御処理等をする。
【００１１】
プロセッサ２１は、ＭＭＵ（メモリ管理ユニット）を含む。ＭＭＵは、アドレス変換機能、メモリ保護機能およびキャッシュ制御機能を有する。アドレス変換機能は、仮想アドレスを物理アドレスに変換する機能である。メモリ保護機能は、特定のアドレスへのアクセスを禁止し、禁止したアドレスへのアクセスが発生した場合には例外を発生させる機能である。キャッシュ制御機能は、ストレージデバイス２４から読み出したデータおよびストレージデバイス２４に書き込んだデータを、主記憶装置にキャッシュさせる機能である。
【００１２】
不揮発性メモリ２２は、電源が遮断されても情報を記憶し続ける記憶装置である。不揮発性メモリ２２は、プロセッサ２１からバイト単位でアクセスされ、プロセッサ２１の主記憶装置として機能する。不揮発性メモリ２２は、一例として、ＤＩＭＭ（Dual  Inline  Memory  Module）スロット等のメモリスロットに装着され、メモリバス２５を介してプロセッサ２１のＭＭＵと接続される。
【００１３】
不揮発性メモリ２２は、一例として、スピン注入メモリ（ＳＴＴ−ＲＡＭ）、相変化メモリ（ＰＣＭ）、抵抗変化メモリ（ＲｅＲＡＭ）またはバッテリーバックアップＤＩＭＭ等である。バッテリーバックアップＤＩＭＭは、ＤＲＡＭ（Dynamic  Random  Access  Memory）と、スーパーキャパシタと、ＮＡＮＤフラッシュメモリとを含む。バッテリーバックアップＤＩＭＭは、電源遮断およびフリーズ等の障害発生時において、スーパーキャパシタに蓄えられた電力によりＤＲＡＭに記憶された内容をＮＡＮＤフラッシュメモリに書き出し、復旧時においてＮＡＮＤフラッシュメモリの内容をＤＲＡＭに書き戻す。これにより、バッテリーバックアップＤＩＭＭは、障害発生直前にＤＲＡＭに記憶されていたデータを、再起動後に復旧させることができる。不揮発性メモリ２２は、このようなデバイスに限らず、プロセッサ２１からメモリバス２５を介してアクセス可能であり、障害発生直前に記憶していたデータを再起動後に復旧できるデバイスであれば、どのようなデバイスであってもよい。
【００１４】
ネットワークインタフェース２３は、プロセッサ２１からの制御に従って、ネットワークを介して他の情報処理装置と通信する。ネットワークインタフェース２３は、ＰＣＩ  Ｅｘｐｒｅｓｓ等のＩ／Ｏバス２６を介してプロセッサ２１と接続される。ネットワークインタフェース２３は、イーサーネット等のプロトコルで他の情報処理装置と通信する。
【００１５】
それぞれのストレージデバイス２４は、電源が遮断されても情報を記憶し続ける記憶装置である。ストレージデバイス２４は、一例として、不揮発性メモリ２２よりも大容量であり、低速なデバイスである。ストレージデバイス２４は、ＮＡＮＤフラッシュメモリで構成されるＳＳＤ（Solid  State  Drive）またはＨＤＤ（Hard  Disk  Drive）等である。ストレージデバイス２４は、ＲＡＩＤ（Redundant  Arrays  of  Inexpensive  Disks/Redundant  Arrays  of  Independent  Disks）コントローラ等を用いて、複数のデバイスを仮想的に１つのデバイスとみなした装置であってもよい。
【００１６】
それぞれのストレージデバイス２４は、ＰＣＩ  Ｅｘｐｒｅｓｓ等のＩ／Ｏバス２６を介してプロセッサ２１と接続される。ストレージデバイス２４は、例えば、ＮＶＭ  Ｅｘｐｒｅｓｓ等のプロトコルによりプロセッサ２１からアクセスされる。ストレージデバイス２４は、一例として、バイト単位より大きいセクタと呼ばれるデータ単位（例えば、５１２バイト）で、プロセッサ２１からアクセスされる。
【００１７】
図２は、第１の実施形態に係る情報処理装置１０の機能ブロックの構成を示す図である。情報処理装置１０は、不揮発記憶部３１と、揮発記憶部３２と、少なくとも１つのストレージ部３３と、通信部３４と、アプリケーション３５と、オペレーティングシステム３６とを備える。
【００１８】
不揮発記憶部３１は、不揮発性メモリ２２により実現される。不揮発記憶部３１は、電源が遮断されても情報を記憶し続けるメモリ領域である。揮発記憶部３２は、不揮発性メモリ２２により実現される。揮発記憶部３２は、電源が遮断された後において情報を復元しないメモリ領域である。不揮発記憶部３１および揮発記憶部３２は、プロセッサ２１の主記憶領域として機能する。不揮発記憶部３１および揮発記憶部３２は、不揮発性メモリ２２のアドレスで領域が分けられてもよいし、プロセッサ２１の制御により設定されて、状況に応じて領域が変更されてもよい。
【００１９】
それぞれのストレージ部３３は、何れかのストレージデバイス２４により実現される。ストレージ部３３は、電源が遮断されても情報を記憶し続けるストレージ領域、すなわち補助記憶装置の領域である。
【００２０】
それぞれのストレージ部３３は、記憶しているデータが、ファイルシステムにより管理される。ファイルシステムは、ストレージ部３３に記憶されているデータを、ファイルと呼ばれる単位で管理する。それぞれのストレージ部３３は、フォーマット時において、例えばユーザによりファイルシステムが設定され、設定されたファイルシステムに応じた管理情報等が書き込まれる。
【００２１】
なお、ストレージデバイス２４が複数のパーティションに分割されている場合には、それぞれのパーティションが１つのストレージ部３３として機能する。また、ストレージデバイス２４がパーティションに分割されていない場合には、記憶領域全体が１つのストレージ部３３として機能する。なお、パーティションに分割した場合、ストレージデバイス２４には、パーティションテーブルと呼ばれる情報が書き込まれる。パーティションテーブルには、それぞれのパーティションの先頭位置、終端位置およびパーティションのタイプ等が格納される。
【００２２】
通信部３４は、ネットワークインタフェース２３により実現される。通信部３４は、ネットワークを介して他の情報処理装置と通信する。
【００２３】
アプリケーション３５は、プロセッサ２１がアプリケーションプログラムを実行することにより実現される機能ブロックである。本実施形態においては、アプリケーション３５は、本装置をデータベースとして機能させる。すなわち、アプリケーション３５は、他の情報処理装置または他のアプリケーションから要求されたデータをストレージ部３３から読み出して返信したり、他の情報処理装置または他のアプリケーションから送信されたデータをストレージ部３３に書き込んだりする。なお、データベースは一例であり、アプリケーション３５は、何であってもよい。
【００２４】
オペレーティングシステム３６は、プロセッサ２１がオペレーティングシステムプログラムを実行することにより実現される機能ブロックである。オペレーティングシステム３６は、本装置を制御および管理するための基本的な機能を担う。オペレーティングシステム３６は、一例として、ユーザに対してユーザインタフェースを提供する。また、オペレーティングシステム３６は、一例として、アプリケーション３５に対して、ハードウェアへのアクセスのためのインタフェースを提供する。
【００２５】
オペレーティングシステム３６は、通信制御部４１と、プロトコル処理部４２と、ストレージ制御部４３と、少なくとも１つの個別管理部４４と、仮想管理部４５と、不揮発記憶管理部４６と、揮発記憶管理部４７とを有する。
【００２６】
通信制御部４１は、通信部３４を制御する。プロトコル処理部４２は、通信制御部４１を介してデータを送受信するためのプロトコルに従った処理をする。プロトコル処理部４２は、一例として、ＴＣＰ／ＩＰのプロトコルに従った処理をする。
【００２７】
ストレージ制御部４３は、それぞれのストレージ部３３を制御する。ストレージ制御部４３は、ストレージデバイス２４を制御するためのソフトウェアプログラムであるデバイスドライバを、オペレーティングシステム３６に組み込むことにより実現される。
【００２８】
ストレージ制御部４３は、ストレージデバイス２４に搭載されているコントローラおよびバスの種類に応じて固有の処理を行う。ストレージ制御部４３は、個別管理部４４または仮想管理部４５等から、データの読み出しまたはデータの書き込みのリクエストを受ける。ストレージ制御部４３は、受け付けたリクエストに応じて、ストレージデバイス２４に対してアクセスをする。
【００２９】
ストレージデバイス２４は、レジスタインタフェースおよび割り込みインタフェースを有し、プロセッサ２１の主記憶装置（本実施形態では、不揮発性メモリ２２）にアクセスすることができる。ストレージ制御部４３は、初期化時において、揮発記憶部３２にディスクリプタの領域を確保し、ディスクリプタの領域のアドレスおよび長さをストレージデバイス２４にレジスタインタフェースで通知する。データの書き込みまたは読み出しのリクエストを受けると、ストレージ制御部４３は、ディスクリプタに、読み出しまたは書き込みの種別、ストレージ部３３上のデータの位置、主記憶装置である不揮発性メモリ２２上のデータの位置を含め、ストレージデバイス２４に転送を指示する。ストレージデバイス２４は、ストレージ制御部４３から転送の指示を受けると、ディスクリプタにアクセスして内容を読み出し、その内容に従って、ストレージ部３３から主記憶装置へ、または、主記憶装置からストレージ部３３へデータをＤＭＡ（Direct  Memory  Access）転送する。そして、ストレージデバイス２４は、ＤＭＡ転送が完了すると、ストレージ制御部４３に処理の完了を割り込みにより通知する。
【００３０】
ストレージデバイス２４は、セクタと呼ばれる例えば５１２バイト単位で、データを読み出しまたは書き込む。このため、ストレージ制御部４３は、ストレージ部３３に記憶されたデータをバイト単位で書き換える場合、ストレージ部３３から５１２バイト単位のデータを主記憶装置に読み出し、主記憶装置上でデータをバイト単位で書き換え、書き換え後の５１２バイト単位のデータをストレージ部３３に書き戻す。
【００３１】
それぞれの個別管理部４４は、対応するファイルシステムに基づき、対応するストレージ部３３に記憶されるデータをファイル単位で管理する。ストレージ部３３に記憶されるファイルの管理方法は、それぞれのストレージ部３３に適用されたファイルシステムによって異なる。
【００３２】
それぞれの個別管理部４４は、一例として、ＦＡＴ、ＮＴＦＳ、ｅｘｔ２、ｅｘｔ３、ｅｘｔ４、ＸＦＳ、ＪＦＳ、ＲＡＭＦＳ、ＮＦＳまたはｐｒｏｃ疑似ファイルシステム等のファイルシステムによって、対応するストレージ部３３のデータを管理する。なお、個別管理部４４は、これら以外のファイルシステムに基づきデータを管理してもよい。
【００３３】
なお、ファイルシステムは、例えば４ＫＢなどのブロックと呼ばれる単位でデータを管理したり、エクステントと呼ばれる開始位置と長さとのセットでデータを管理したりする。
【００３４】
また、ファイルシステムは、全体管理情報（本実施形態においては、スーパーブロック情報）、ファイル管理情報（本実施形態においては、ｉノード情報）およびデータ情報等を管理する。全体管理情報（スーパーブロック情報）は、ファイルシステムの全体を管理するための情報である。ファイル管理情報（ｉノード情報）は、ファイルシステムの属するファイル毎に設けられ、対応するファイルを管理するための情報である。データ情報は、ファイルの実体データを含む情報である。
【００３５】
仮想管理部４５は、異なるファイルシステムに属する複数のファイルを、共通化した仮想ファイルシステムにより管理する。仮想ファイルシステムは、複数のファイルシステムを共通して扱うためのフレームワークである。すなわち、仮想管理部４５は、複数のストレージ部３３上に記憶されるデータを、ファイル単位で共通化して管理する。これにより、仮想管理部４５は、複数のファイルシステムを扱うことができるように抽象化されたインタフェースを、アプリケーション３５に提供することができる。従って、アプリケーション３５は、どのファイルシステムを利用しているかを認識することなく、同一の方法でそれぞれのファイルにアクセスすることができる。
【００３６】
例えば、仮想管理部４５は、アプリケーション３５に対して、ファイル操作を行うＡＰＩ（Application  Programming  Interface）を提供する。仮想管理部４５は、一例として、ｏｐｅｎシステムコール、ｒｅａｄシステムコール、ｗｒｉｔｅシステムコール、ｌｓｅｅｋシステムコール、ｆｓｙｎｃシステムコール、ｍｍａｐシステムコール、ｍｕｎｍａｐシステムコール、ｍｓｙｎｃシステムコールおよびｃｌｏｓｅシステムコールを提供する。
【００３７】
ｏｐｅｎシステムコールは、ファイルを開いて、ファイルを操作するためのファイルディスクリプタを取得するためのシステムコールである。ｒｅａｄシステムコールは、指定したデータを読み出すためのシステムコールである。ｗｒｉｔｅシステムコールは、指定したデータを書き込むためのシステムコールである。ｌｓｅｅｋシステムコールは、ファイル位置を移動するためのシステムコールである。ｆｓｙｎｃシステムコールは、ファイルキャッシュの同期を指示するためのシステムコールである。ｍｍａｐシステムコールは、ファイルのデータ情報を主記憶装置にマッピングするためのシステムコールである。ｍｕｎｍａｐシステムコールは、ｍｍａｐシステムコールによるマッピングを解除するためのシステムコールである。ｍｓｙｎｃシステムコールは、ｍｍａｐシステムコールでマッピングした領域のファイルキャッシュの同期を指示するためのシステムコールである。ｃｌｏｓｅシステムコールは、ｏｐｅｎシステムコールで取得したファイルディスクリプタを解放するためのシステムコールである。
【００３８】
また、仮想管理部４５は、ＡＰＩを通じたアクセスに応じて、それぞれの個別管理部４４に対して指示を行う。仮想管理部４５は、一例として、ｉノード情報の確保と解放、ｉノード情報のストレージ部３３からの読み出しと書き込み、および、スーパーブロック情報のストレージ部３３への書き込み等をそれぞれの個別管理部４４に対して指示する。仮想管理部４５は、インタフェースも抽象化して統一されたインタフェースを用いて、それぞれの個別管理部４４との間でやり取りする。
【００３９】
また、仮想管理部４５は、仮想ファイルシステムの管理情報およびデータ情報を、主記憶領域である不揮発記憶部３１にキャッシュする。これにより、仮想管理部４５は、ストレージ部３３に毎回アクセスしなくてよく、データへのアクセスを高速化することができる。より具体的には、仮想管理部４５は、仮想ファイルシステムの管理情報として、スーパーブロック情報（全体管理情報）およびｉノード情報（ファイル管理情報）を、不揮発記憶部３１にキャッシュさせる。
【００４０】
また、仮想管理部４５は、仮想ファイルシステムの管理情報として、抽象化した管理情報と、ファイルシステム固有の管理情報に分離して、それぞれを管理する。具体的には、仮想管理部４５は、共通の形式で表したファイルシステム共通のスーパーブロック情報およびファイルシステム共通のｉノード情報と、それぞれのファイルシステム固有の形式で表したファイルシステム固有のスーパーブロック情報およびファイルシステム固有のｉノード情報とを管理する。
【００４１】
また、仮想管理部４５は、ファイルのデータ情報を、通常の主記憶領域のデータの管理単位であるページサイズでキャッシュさせる。この単位は、ページキャッシュと呼ばれる場合もある。ページサイズは、アーキテクチャ毎に異なるが、一般的には４ＫＢである。
【００４２】
不揮発記憶管理部４６および揮発記憶管理部４７は、不揮発性メモリ２２の記憶領域を管理する。具体的には、不揮発記憶管理部４６は、仮想管理部４５またはアプリケーション３５等からの要求に応じて、不揮発記憶部３１に使用領域を確保し、または、使用領域を解放する。また、揮発記憶管理部４７は、仮想管理部４５またはアプリケーション３５等からの要求に応じて、揮発記憶部３２に使用領域を確保し、または、使用領域を解放する。なお、不揮発記憶管理部４６および揮発記憶管理部４７は、一例として、不揮発記憶部３１が不揮発性メモリ２２の前半領域を使用し、揮発記憶部３２が後半領域を使用するといったように、アドレスにより使用領域を分けてもよいし、互いに連携して使用領域を分けてもよい。
【００４３】
ここで、不揮発記憶管理部４６は、不揮発記憶部３１に、仮想ファイルシステムの管理情報（スーパーブロック情報およびｉノード情報）およびデータ情報を、再起動後に読み出し可能にキャッシュさせる。より具体的には、不揮発記憶管理部４６は、不揮発記憶部３１に、仮想ファイルシステムの管理情報およびファイルのデータ情報を、予め定められたアドレスに記憶されたデータから辿ることができるようにキャッシュさせる。
【００４４】
これにより、不揮発記憶管理部４６は、障害発生等により情報処理装置１０が再起動した場合において、不揮発記憶部３１の予め定められたアドレスからデータを読み出すことにより、異なるファイルシステムにより管理される複数のファイルのキャッシュデータを効率良く復旧することができる。
【００４５】
図３は、ストレージ部３３に記憶されるデータの配置の一例を示す図である。図３に示す例では、ストレージ部３３は、ブロック単位でデータを管理するファイルシステムにより管理されている。
【００４６】
ストレージ部３３には、先頭にブートブロックが配置される。ストレージ部３３には、ブートブロックに続いて、複数のブロックグループが順次に配置される。ブートブロックは、ブートセクタとも呼ばれる。ブートブロックには、オペレーティングシステム３６を起動させるためのプログラムが格納される。
【００４７】
それぞれのグループブロックは、スーパーブロック、グループディスクリプタ、ブロックビットマップ、ｉノードビットマップ、ｉノードテーブル、および、データブロックを含む。スーパーブロックには、スーパーブロック情報が格納される。スーパーブロック情報は、ファイルシステム全体のｉノードの数、フォーマット時に指定されたファイルシステムのブロックのサイズ、ファイルシステム全体のサイズ、未使用ブロック、未使用のｉノードの数、並びに、ブロックグループあたりのブロック数およびｉノード数等の情報を含む。なお、スーパーブロック情報は、全てのグループブロックに含まれる。しかし、通常、先頭のブロックグループのスーパーブロック情報のみが使用される。
【００４８】
グループディスクリプタには、ブロックグループに関する情報が格納される。具体的には、グループディスクリプタには、ブロックグループ内のブロックビットマップ、ｉノードビットマップ、ｉノードテーブル、データブロックのファイルシステムの先頭から数えたブロック番号、未使用ｉノード数および未使用データブロック数等が格納される。
【００４９】
ブロックビットマップには、データブロックの使用または未使用を管理するための情報が格納される。ｉノードビットマップには、ｉノードテーブルの使用または未使用を管理するための情報が格納される。
【００５０】
ｉノードテーブルには、それぞれのファイルのｉノード情報を含む配列が格納される。ｉノード情報は、対応するファイルを管理するための情報である。ｉノード情報は、一例として、ファイルの長さ、ファイルの所有のユーザＩＤ、最終更新時および最終参照時、データブロック番号の配列等を含む。データブロックは、ファイルのデータ情報を格納する。データブロックは、ｉノードテーブルのデータブロック番号の配列から参照される。なお、ストレージ部３３は、他のファイルシステムに従って管理される場合には、他の配置でデータを記憶する。
【００５１】
図４は、不揮発記憶部３１に記憶される情報の配置を示す図である。不揮発記憶管理部４６は、再起動後に不揮発記憶部３１に記憶されたデータを読み出し可能なように、不揮発記憶部３１の使用領域を管理する。
【００５２】
不揮発記憶管理部４６は、不揮発記憶部３１の予め定められたアドレス（例えば、先頭アドレス等の特定番地）から、所定の長さの不揮発オブジェクト識別情報を書き込む。不揮発オブジェクト識別情報は、本装置（情報処理装置１０）が保有する固有識別情報である。不揮発オブジェクト識別情報は、情報処理装置１０の製造番号の情報またはネットワークインタフェースのＭＡＣ（Media  Control  Access）アドレスであってもよいし、これらの値を用いてハッシュ関数などにより生成した値であってもよい。不揮発記憶部３１の予め定められたアドレスに不揮発オブジェクト識別情報を書き込むことにより、不揮発記憶管理部４６は、再起動時に、外部からアドレスの指定を受けずに、不揮発オブジェクト識別情報を読み出すことができる。
【００５３】
不揮発記憶管理部４６は、不揮発オブジェクト識別情報に続く領域に、不揮発オブジェクトグループテーブルを書き込む。また、不揮発記憶管理部４６は、不揮発オブジェクトグループテーブルに続く領域に、複数の不揮発オブジェクトグループを書き込む。不揮発オブジェクトグループは、不揮発オブジェクトが格納される領域である。
【００５４】
ここで、不揮発オブジェクトとは、不揮発記憶部３１に記憶される情報である。より具体的には、不揮発オブジェクトは、スーパーブロック情報、ｉノード情報、および、ファイルのデータ情報等である。
【００５５】
不揮発オブジェクトは、タイプ毎に、グループ化して不揮発記憶部３１に記憶される。１つの不揮発オブジェクトグループには、予め定められた個数の、同一タイプの不揮発オブジェクトが格納される。なお、１つの不揮発オブジェクトグループに予め定められた個数の不揮発オブジェクトが格納された後には、以後の同一タイプの不揮発オブジェクトは、他の新たな不揮発オブジェクトグループに格納される。
【００５６】
不揮発オブジェクトグループテーブルは、それぞれの不揮発オブジェクトグループに対応したグループ情報を格納する。グループ情報は、対応する不揮発オブジェクトグループに関する情報を含む。より具体的には、グループ情報は、不揮発オブジェクトグループに含まれる不揮発オブジェクトのタイプと、不揮発オブジェクトグループのサイズと、不揮発オブジェクトグループの開始位置とを含む。
【００５７】
不揮発オブジェクトのタイプには、ファイルシステム共通のスーパーブロック情報等を識別する情報が格納される。不揮発オブジェクトグループのサイズには、例えば、４０９６バイトといった情報が格納される。不揮発オブジェクトグループの開始位置は、例えば、１０２４００番地といった情報が格納される。
【００５８】
なお、グループ情報は、さらに、不揮発オブジェクトのサイズを含んでもよい。ただし、不揮発オブジェクトのサイズは、不揮発オブジェクトのタイプから一義的に定まる。例えば、ファイルシステム共通のスーパーブロック情報のサイズは、例えば５１２バイトである。
【００５９】
不揮発記憶管理部４６は、十分な数の不揮発オブジェクトグループが生成されることを前提として、不揮発記憶部３１における不揮発オブジェクトグループテーブルの記録領域を予め確保してもよい。また、不揮発記憶管理部４６は、不揮発オブジェクトグループの数が初期設定した数を超えた場合には、不揮発記憶部３１上の他の領域を連結リスト構造で拡張して、不揮発オブジェクトグループテーブルの記憶領域としてもよい。
【００６０】
不揮発オブジェクトグループは、不揮発オブジェクトビットマップと、不揮発オブジェクトデータ領域とを含む。不揮発オブジェクトデータ領域には、予め定められた個数の使用領域（エントリ）が形成されている。それぞれの使用領域には、不揮発オブジェクトが格納される。
【００６１】
不揮発オブジェクトビットマップは、不揮発オブジェクトデータ領域のそれぞれの使用領域について、使用中であるかまたは未使用であるかを示す。例えば、不揮発オブジェクトビットマップは、それぞれの使用領域に対応する複数のビットを含む。それぞれのビットは、一例として、対応する使用領域を不揮発オブジェクトが使用中である（不揮発オブジェクトが格納されている）場合には１を示し、対応する使用領域を不揮発オブジェクトが使用していない（不揮発オブジェクトが格納されていない）場合には０を示す。
【００６２】
図５は、確保処理を示すフローチャートである。不揮発記憶管理部４６は、不揮発記憶部３１に不揮発オブジェクトを記憶させる場合、その不揮発オブジェクトを格納する使用領域を不揮発記憶部３１に確保する。確保の指示を受けた場合、不揮発記憶管理部４６は、図５に示す手順で確保処理を実行する。
【００６３】
まず、不揮発記憶管理部４６は、不揮発オブジェクト識別情報が有効であるか否かを判断する（Ｓ１１１）。具体的には、不揮発記憶管理部４６は、不揮発記憶部３１の予め定められたアドレスに記憶された不揮発オブジェクト識別情報を読み出す。なお、不揮発オブジェクト識別情報は、不揮発性メモリ２２が最初に使用される場合には、例えば０のような取り得ない値に初期化されている。また、不揮発オブジェクト識別情報は、不揮発性メモリ２２が本装置により使用されていた場合には、本装置が保有する固有識別情報が設定されている。そして、不揮発記憶管理部４６は、読み出した不揮発オブジェクト識別情報と、本装置である情報処理装置１０が保有する固有識別情報とが一致するか否かを判断する。不揮発記憶管理部４６は、一致する場合には不揮発オブジェクト識別情報が有効、一致しない場合には不揮発オブジェクト識別情報が有効ではないと判断する。
【００６４】
不揮発オブジェクト識別情報が有効ではない場合（固有識別情報と一致しない場合）（Ｓ１１１のＮｏ）、不揮発記憶管理部４６は、不揮発オブジェクトグループテーブルを初期化する（Ｓ１１２）。具体的には、不揮発記憶管理部４６は、不揮発オブジェクトグループテーブルのそれぞれの不揮発オブジェクトグループのタイプを、未使用を示す値とする。続いて、不揮発記憶管理部４６は、不揮発記憶部３１に記憶された不揮発オブジェクト識別情報を、本装置が保有する固有識別情報に設定する（Ｓ１１３）。そして、不揮発記憶管理部４６は、ステップＳ１１３の処理を終えると、処理をステップＳ１１６に進める。
【００６５】
不揮発オブジェクト識別情報が有効である場合（固有識別情報と一致した場合）（Ｓ１１１のＹｅｓ）、不揮発記憶管理部４６は、不揮発オブジェクトグループテーブルを読み出し、不揮発オブジェクトグループテーブルの中に、確保しようとしている不揮発オブジェクトと一致するタイプの不揮発オブジェクトグループが存在するか否かを判断する（Ｓ１１４）。
【００６６】
確保しようとしている不揮発オブジェクトと一致するタイプの不揮発オブジェクトグループが存在する場合（Ｓ１１４のＹｅｓ）、不揮発記憶管理部４６は、その不揮発オブジェクトグループの中の不揮発オブジェクトビットマップを読み出す。そして、不揮発記憶管理部４６は、不揮発オブジェクトビットマップの中に、未使用の使用領域を示すビットが存在するか否かを判断する（Ｓ１１５）。
【００６７】
確保しようとしている不揮発オブジェクトと一致するタイプの不揮発オブジェクトグループが存在しない場合（Ｓ１１４のＮｏ）、または、不揮発オブジェクトビットマップの中に未使用の使用領域を示すビットが存在しない場合（Ｓ１１５のＮｏ）、不揮発記憶管理部４６は、処理をステップＳ１１６に進める。また、確保しようとしている不揮発オブジェクトと一致するタイプの不揮発オブジェクトビットマップの中に未使用の使用領域を示すビットが存在する場合には（Ｓ１１５のＹｅｓ）、不揮発記憶管理部４６は、その不揮発オブジェクトグループを確保して、処理をステップＳ１１７に進める。
【００６８】
ステップＳ１１６において、不揮発記憶管理部４６は、不揮発オブジェクトグループテーブルのグループ情報における不揮発オブジェクトのタイプが未使用となっている何れかの不揮発オブジェクトグループを、確保指示を受けた不揮発オブジェクトを格納するための不揮発オブジェクトグループとして確保する。さらに、不揮発記憶管理部４６は、不揮発オブジェクトグループテーブルに、確保した不揮発オブジェクトグループに関するグループ情報（不揮発オブジェクトのタイプ、不揮発オブジェクトグループのサイズおよび不揮発オブジェクトグループの開始位置）を設定する（Ｓ１１６）。不揮発記憶管理部４６は、ステップＳ１１６の処理を終えると、処理をステップＳ１１７に進める。
【００６９】
ステップＳ１１７において、不揮発記憶管理部４６は、確保した不揮発オブジェクトグループにおける未使用領域の何れかを、確保指示を受けた不揮発オブジェクトを格納する使用領域として確保する。さらに、不揮発記憶管理部４６は、確保した不揮発オブジェクトグループに含まれる不揮発オブジェクトビットマップを操作して、確保した使用領域のビットを未使用から使用中に書き換える（Ｓ１１７）。そして、不揮発記憶管理部４６は、ステップＳ１１７を終えると、本フローを終了する。
【００７０】
以上のように、不揮発記憶管理部４６は、不揮発記憶部３１に記憶された固有識別情報と本装置が保有する固有識別情報とが一致することを条件として、不揮発オブジェクト（仮想ファイルシステムの管理情報およびデータ情報等）を不揮発記憶部３１から読み出す。反対に、不揮発記憶管理部４６は、不揮発記憶部３１に記憶された固有識別情報と本装置が保有する固有識別情報とが一致しない場合には、不揮発記憶部３１を初期化する。これにより、不揮発記憶管理部４６は、不揮発性メモリ２２が一度も使用されていない場合、不揮発性メモリ２２が他の情報処理装置で使用された場合または不揮発性メモリ２２の内容が破壊されている場合等に、不揮発性メモリ２２に記憶されている無効なデータが読み出されることを防止することができる。
【００７１】
なお、不揮発記憶管理部４６は、ステップＳ１１２およびステップＳ１１３の処理において、不揮発オブジェクト識別情報を書き換えた後に不揮発オブジェクトグループテーブルを初期化するのではなく、不揮発オブジェクトグループテーブルを初期化した後に不揮発オブジェクト識別情報を書き換える。これにより、不揮発記憶管理部４６は、不揮発オブジェクト識別情報を書き換えた直後に電源等が遮断された場合に無効なデータが読み出されてしまうことを回避することができる。
【００７２】
また、不揮発記憶管理部４６は、ステップＳ１１１の処理において、不揮発オブジェクトの確保指示を受ける毎に不揮発オブジェクト識別情報が有効であるか否かを判断せず、例えば起動後の最初に確保指示を受けた場合に判断をしてもよい。また、不揮発記憶管理部４６は、判定結果が有効であった場合には、判定結果を所定期間保存しておいてもよい。
【００７３】
図６は、解放処理を示すフローチャートである。不揮発記憶管理部４６は、不揮発記憶部３１に記憶された不揮発オブジェクトを無効化する場合等、その不揮発オブジェクトを格納している使用領域を解放する。解放指示を受けた場合、不揮発記憶管理部４６は、図６に示す手順で解放処理を実行する。
【００７４】
まず、不揮発記憶管理部４６は、不揮発オブジェクトグループテーブルを走査して、解放指示を受けた不揮発オブジェクトのために確保された使用領域を含む不揮発オブジェクトグループを検出する（Ｓ１２１）。続いて、不揮発記憶管理部４６は、検出した不揮発オブジェクトグループの不揮発オブジェクトビットマップにおける対応するビットを、使用中を示す値から未使用を示す値に書き換える（Ｓ１２２）。これにより、不揮発記憶管理部４６は、揮発オブジェクトデータ領域における、解放指示を受けた不揮発オブジェクトの使用領域を解放することができる。
【００７５】
続いて、不揮発記憶管理部４６は、対応するビットを使用中を示す値から未使用を示す値に書き換えた結果、その不揮発オブジェクトビットマップの全てのビットが、未使用を示す値となったか否かを判断する（Ｓ１２３）。何れかのビットが使用中を示す値である場合（Ｓ１２３のＮｏ）、不揮発記憶管理部４６は、本フローを終了する。
【００７６】
全てのビットが未使用を示す値となった場合（Ｓ１２３のＹｅｓ）、不揮発記憶管理部４６は、不揮発オブジェクトグループテーブルの該当するエントリの不揮発オブジェクトのタイプを、未使用を示す値に変更する（Ｓ１２４）。そして、不揮発記憶管理部４６は、ステップＳ１２４の処理を終了すると、本フローを終了する。
【００７７】
図７は、ストレージデバイス２４のフォーマット時の処理を示すフローチャートである。例えば、ストレージデバイス２４が接続された時等において、情報処理装置１０は、図７に示す手順で処理を実行する。
【００７８】
オペレーティングシステム３６は、ストレージデバイス２４が接続された場合、ストレージデバイス２４がフォーマット済みか否かを判断する（Ｓ１２８）。フォーマットされていない場合（Ｓ１２８のＮｏ）、オペレーティングシステム３６は、ストレージデバイス２４を指定されたファイルシステムでフォーマットする（Ｓ１２９）。この場合において、オペレーティングシステム３６は、ストレージデバイス２４をユーザの指定に従って複数のパーティションに分割し、それぞれのパーティションを、指定されたファイルシステムでフォーマットしてもよい。
【００７９】
フォーマットがされると、ストレージデバイス２４には、ストレージ部３３が形成され、オペレーティングシステム３６により認識が可能な状態となる。また、フォーマット後のストレージ部３３のスーパーブロック情報には、ファイルシステムを識別するためのファイルシステム識別情報が格納される。例えば、スーパーブロック情報には、ＲＦＣ４１２２で定義される方式で生成されたファイルシステムのＵＵＩＤ（Universally  Unique  Identifier）が格納される。
【００８０】
フォーマット済みである場合（Ｓ１２８のＹｅｓ）またはステップＳ１２９でフォーマットが完了した場合、オペレーティングシステム３６は、処理を終了する。
【００８１】
図８は、情報処理装置１０の起動時の処理を示すフローチャートである。起動時において、情報処理装置１０は、図８に示す手順で処理を実行する。
【００８２】
まず、不揮発記憶管理部４６は、不揮発オブジェクト識別情報が有効であるか否かを判断する（Ｓ１３１）。具体的には、不揮発記憶管理部４６は、不揮発記憶部３１の予め定められたアドレスに記憶された不揮発オブジェクト識別情報を読み出す。そして、不揮発記憶管理部４６は、読み出した不揮発オブジェクト識別情報と、本装置である情報処理装置１０が保有する固有識別情報とが一致するか否かを判断する。不揮発記憶管理部４６は、一致する場合には不揮発オブジェクト識別情報が有効、一致しない場合には不揮発オブジェクト識別情報が有効ではないと判断する。
【００８３】
不揮発オブジェクト識別情報が有効ではない場合（Ｓ１３１のＮｏ）、不揮発記憶管理部４６は、不揮発オブジェクトグループテーブルを初期化する（Ｓ１３２）。続いて、不揮発記憶管理部４６は、不揮発記憶部３１に記憶された不揮発オブジェクト識別情報を、本装置が保有する装置固有の識別情報に設定する（Ｓ１３３）。
【００８４】
不揮発オブジェクト識別情報が有効であった場合（Ｓ１３１のＹｅｓ）またはステップＳ１３３の処理が完了した場合、オペレーティングシステム３６は、ＳＳＤまたはＨＤＤ等のストレージデバイス２４を認識して、ストレージ部３３をマウントする（Ｓ１３４）。ストレージ部３３をマウントする場合、オペレーティングシステム３６は、ユーザの指示等に従って、ターゲットデバイス、マウントポイントおよびマウントオプションを設定する。
【００８５】
オペレーティングシステム３６は、ターゲットデバイスとして、ストレージ部３３のパーティション等を特定する。オペレーティングシステム３６は、マウントオプションで、不揮発キャッシュモード、リカバーモードおよびライトバックモードの設定を受け付ける。
【００８６】
不揮発キャッシュモードは、仮想ファイルシステムの管理情報（共通のスーパーブロック情報および共通のｉノード情報）およびデータ情報を不揮発記憶部３１にキャッシュさせるモードである。不揮発キャッシュモードに設定されている場合、仮想管理部４５は、仮想ファイルシステムの管理情報およびデータ情報を、再起動後に読み出し可能に不揮発記憶部３１にキャッシュさせる。また、不揮発キャッシュモードに設定されていない場合、不揮発記憶管理部４６は機能せず、揮発記憶管理部４７が仮想ファイルシステムの管理情報およびデータ情報を揮発記憶部３２にキャッシュさせる。
【００８７】
リカバーモードは、不揮発記憶部３１に記憶された仮想ファイルシステムの管理情報およびデータ情報を再使用するモードである。リカバーモードに設定されている場合、仮想管理部４５は、ストレージ部３３のマウント時において、不揮発記憶部３１に記憶された仮想ファイルシステムの管理情報およびデータ情報を、マウントされたストレージ部３３に記憶されたファイルを管理するために使用する。また、リカバーモードに設定されていない場合、仮想管理部４５は、ストレージ部３３のマウント時において、不揮発記憶部３１に記憶された仮想ファイルシステムの管理情報およびデータ情報を解放して無効化する。そして、仮想管理部４５は、マウントされたストレージ部３３に記憶された仮想ファイルシステムの管理情報およびデータ情報を、不揮発記憶部３１に新たにキャッシュさせる。
【００８８】
ライトバックモードは、仮想ファイルシステムの管理情報およびデータ情報をストレージ部３３に書き戻すモードである。不揮発記憶管理部４６は、ライトバックモードに設定されている場合、ストレージ部３３のアンマウント時において、不揮発記憶部３１に記憶されている仮想ファイルシステムの管理情報およびデータ情報をストレージ部３３に書き戻す。そして、不揮発記憶管理部４６は、不揮発記憶部３１に記憶されている仮想ファイルシステムの管理情報およびデータ情報を解放して無効化する。また、ライトバックモードに設定されていない場合、不揮発記憶管理部４６は、ストレージ部３３のアンマウント時において、書き戻しは行わずに、不揮発記憶部３１に記憶されている仮想ファイルシステムの管理情報およびデータ情報を有効にした状態とする。
【００８９】
なお、本実施形態においては、特段説明をしない場合には、情報処理装置１０は、不揮発キャッシュモード、および、リカバーモードが設定されており、ライトバックモードは設定されていない。
【００９０】
そして、マウント時において、仮想管理部４５は、指定されたターゲットデバイスであるストレージ部３３のスーパーブロック情報を読み出す。仮想管理部４５は、読み出したスーパーブロック情報から、フォーマット時に設定したファイルシステム識別情報を読み出す。
【００９１】
そして、仮想管理部４５は、ストレージ部３３に記憶されたファイルシステム識別情報と、不揮発記憶部３１に記憶されたスーパーブロック情報に含まれるファイルシステム識別情報とを比較する。不揮発記憶管理部４６は、ストレージ部３３に記憶されたファイルシステム識別情報と、不揮発記憶部３１に記憶されたスーパーブロック情報に含まれるファイルシステム識別情報とが一致することを条件として、不揮発記憶部３１に記憶された情報を、マウントされたストレージ部３３に記憶されたファイルを管理するために使用可能とする。情報処理装置１０は、ステップＳ１３４の処理を終了すると、本フローを終了してマウントされたストレージ部３３へのアクセスを可能とする。
【００９２】
図９は、仮想ファイルシステムの主記憶装置に保持するデータ構造を示す図である。仮想管理部４５は、複数の異なるファイルシステムを共通して扱うためのフレームワークである仮想ファイルシステムにより、複数のストレージ部３３に記憶されるデータをファイル単位で管理する。
【００９３】
具体的には、仮想管理部４５は、図９に示されるような、vfs_mnt_start、vfs_mnt_list、vfs_mnt、vfs_sb、vfs_inode、data_memを、不揮発オブジェクトとして不揮発記憶部３１に記憶させることにより、データを管理する。vfs_sb、vfs_inode、data_memは、ストレージ部３３のキャッシュの情報を含んでいる。
【００９４】
vfs_mnt_startは、スタートポイントである。vfs_mnt_listは、マウント情報リストである。vfs_mntは、マウント情報である。仮想管理部４５は、本装置にマウントされたストレージ部３３毎にvfs_mntを設定する。すなわち、仮想管理部４５は、仮想ファイルシステムが共通して管理するファイルシステム毎にvfs_mntを設定する。
【００９５】
仮想管理部４５は、１つのvfs_mnt_startを設定する。仮想管理部４５は、vfs_mntのそれぞれに対応してvfs_mnt_listを設定する。vfs_mnt_listは、対応するvfs_mntへのポインタを含む。なお、ポインタとは、他の不揮発オブジェクトのアドレス、または、指し示す不揮発オブジェクトが存在しないことを示す情報である。
【００９６】
それぞれのvfs_mnt_listは、vfs_mnt_startから直列にポインタにより辿られるリストを構成する。すなわち、vfs_mnt_startおよびvfs_mnt_listは、vfs_mntを探索するための情報として機能する。具体的には、vfs_mnt_startは、最初のvfs_mnt_listへのポインタを含む。それぞれのvfs_mnt_listは、次のvfs_mnt_listへのポインタを含む。最後のvfs_mnt_listは、次が存在しないことを表す値（例えば、０を指すポインタであるＮＵＬＬ）を示すポインタを含む。これにより、仮想管理部４５は、vfs_mnt_startからvfs_mnt_listを順次に辿って、不揮発記憶部３１に記憶された不揮発オブジェクトの中から、目的のvfs_mntを迅速に見つけ出すことができる。
【００９７】
vfs_mntは、マウント識別情報、および、vfs_sbへのポインタを含む。マウント識別情報は、ストレージ部３３を識別する情報であり、ターゲットデバイスおよびマウントポイント等の情報を含む。
【００９８】
vfs_sbは、ファイルシステム共通のスーパーブロック情報構造体である。仮想管理部４５は、基本的に１つのマウント情報vfs_mntに対応して、１つのvfs_sbを設定する。ただし、同じストレージ部３３を複数個所にマウントする場合、複数のvfs_mntから１つのvfs_sbを指すように設定してもよい。
【００９９】
vfs_sbは、ファイルシステム識別情報、ｉノードリスト構造体、および、ファイルシステム共通のスーパーブロック情報（全体管理情報）を含む。ファイルシステム識別情報は、ファイルシステム識別情報等を格納する。ｉノードリスト構造体は、ファイルシステム共通のｉノード情報を探索させるための情報である。ファイルシステム共通のスーパーブロック情報は、異なるファイルシステムで共通の方式で記述された情報であって、対応するファイルシステムの全体を管理するための情報である。
【０１００】
vfs_inodeは、ファイルシステム共通のｉノード情報構造体である。仮想管理部４５は、対応するファイルシステムに属するファイル毎に、vfs_inodeを設定する。
【０１０１】
vfs_inodeは、ｉノードリスト構造体、ファイルシステム共通のｉノード情報（ファイル管理情報）、およびdata_memへのポインタの配列を含む。ファイルシステム共通のｉノード情報は、異なるファイルシステムで共通の方式で記述された情報であって、対応するファイルを管理するための情報である。data_memへのポインタの配列には、１または複数のdata_memへポインタを含む。
【０１０２】
vfs_sbおよびそれぞれのvfs_inodeに含まれるｉノードリスト構造体は、vfs_sbから直列にポインタにより辿られるリストを構成する。すなわち、ｉノードリスト構造体は、目的のvfs_inodeを探索するための情報として機能する。具体的には、ｉノードリスト構造体は、次のvfs_inodeへのポインタ（next）および前のvfs_sbまたはvfs_inodeへのポインタ（prev）を含む。vfs_sbに含まれる前へのポインタ（prev）、および、最後のvfs_inodeに含まれる次へのポインタ（next）は、前または次が存在しないことを表す値（例えば、０を指すポインタであるＮＵＬＬ）を示す。これにより、仮想管理部４５は、ｉノードリスト構造体を前後に辿って、不揮発記憶部３１に記憶された不揮発オブジェクトの中から、目的のvfs_inodeを迅速に見つけ出すことができる。
【０１０３】
data_memは、対応するファイルのデータ情報を格納する構造体である。data_memは、ファイルのデータ情報をページ単位で格納する。仮想管理部４５は、１つのファイルに対して、複数のdata_memを設けてもよい。
【０１０４】
仮想管理部４５は、このような構成の不揮発オブジェクトを不揮発記憶部３１に記憶させることにより、全てのストレージ部３３上に記憶されるファイルのデータ情報を読み出すことができる。また、スタートポイントは、不揮発記憶部３１の予め定められたアドレスから読み出される不揮発オブジェクトグループテーブルから読み出すことができる。また、仮想管理部４５は、マウント情報から下位に不揮発オブジェクトを探索することにより、対応するストレージ部３３を管理するファイルシステムに属する、スーパーブロック情報、ｉノード情報およびデータ情報を探索することができる。
【０１０５】
以上のように、仮想管理部４５は、スタートポイントから順にポインタおよびリストを辿ることにより、ファイルシステム共通のスーパーブロック情報（全体管理情報）、ファイルシステム共通のｉノード情報（ファイル管理情報）およびデータ情報を、不揮発記憶部３１における予め定められたアドレスに記憶されたデータから辿って読み出すことができる。
【０１０６】
図１０は、不揮発記憶部３１、揮発記憶部３２およびストレージ部３３に記憶される情報の関係を示す図である。仮想管理部４５は、vfs_mnt_start、vfs_mnt_list、vfs_mnt、vfs_sb、fs_sb_mem、vfs_inode、fs_inode_mem、data_memを、不揮発オブジェクトとして不揮発記憶部３１に記憶させる。
【０１０７】
fs_sb_memは、vfs_sbと対応付けて不揮発記憶部３１に記憶される。fs_sb_memは、対応するストレージ部３３に記憶されたファイルを管理するためのファイルシステム固有のスーパーブロック情報を含む構造体である。fs_inode_memは、ファイルシステム固有のｉノード情報およびファイルシステム共通のｉノード情報（vfs_inode）とを含む構造体である。
【０１０８】
また、仮想管理部４５は、それぞれのストレージ部３３に、fs_sb_str、fs_inode_str、data_strを記憶させる。fs_sb_strは、ファイルシステム固有のスーパーブロック情報およびファイルシステム共通のスーパーブロック情報を含む構造体である。fs_inode_strは、ファイルシステム固有のｉノード情報およびファイルシステム共通のｉノード情報を含む構造体である。data_strは、ファイルのデータ情報を含む構造体である。
【０１０９】
ここで、仮想管理部４５は、ストレージ部３３に記憶されたfs_sb_strと、不揮発記憶部３１に記憶されたキャッシュであるvfs_sbおよびfs_sb_memとを対応付けてして管理する。また、仮想管理部４５は、ストレージ部３３に記憶されたfs_inode_strと、不揮発記憶部３１に記憶されたキャッシュであるfs_inode_memとを対応付けてして管理する。また、仮想管理部４５は、ストレージ部３３に記憶されたdata_strと、不揮発記憶部３１に記憶されたキャッシュであるdata_memとを対応付けてして管理する。
【０１１０】
なお、仮想管理部４５は、不揮発記憶部３１に不揮発オブジェクトを記憶させる場合、不揮発記憶管理部４６を用いて、図５に示した手順で対応する不揮発オブジェクトの使用領域を確保する。これにより、仮想管理部４５は、以後、ストレージ部３３にアクセスせずに、対応する不揮発オブジェクトを不揮発記憶部３１から読み出すことができる。また、仮想管理部４５は、不揮発オブジェクトを無効化する場合、不揮発記憶管理部４６を用いて、図６に示した手順で対応する不揮発オブジェクトの使用領域を解放する。
【０１１１】
また、仮想管理部４５は、ストレージ部３３のマウント時において、vfs_mnt_start、vfs_mnt_listおよびvfs_mntの使用領域を確保して記憶させる。なお、仮想管理部４５は、vfs_mnt_startについては、他の何れかのストレージ部３３が既にマウントされている場合には、既に存在するvfs_mnt_listから、今回確保したvfs_mnt_listへのポインタを設定する。
【０１１２】
また、仮想管理部４５は、ストレージ部３３のアンマウント時において、vfs_mnt_listおよびvfs_mntの使用領域を解放する。また、全てのストレージ部３３がアンマウントされる場合には、仮想管理部４５は、vfs_mnt_startの使用領域も解放してもよい。
【０１１３】
また、仮想管理部４５は、揮発記憶管理部４７を用いて、揮発記憶部３２に、vfs_mnt_hashを記憶させる。vfs_mnt_hashは、ファイルのパス名の探索を行うために用いられるハッシュリストである。仮想管理部４５は、ストレージ部３３をマウントした場合、対応するマウント情報vfs_mntへのポインタ等をハッシュリストに含めることにより、マウント情報vfs_mntをハッシュリストvfs_mnt_hashに接続する。これにより、仮想管理部４５は、マウント情報vfs_mntから辿ることができる各ストレージ部３３のファイルシステムに属する不揮発オブジェクトを、読み出し可能とすることができる。
【０１１４】
図１１は、不揮発記憶部３１に記憶されるスーパーブロック情報と、ストレージ部３３に記憶されるスーパーブロック情報の関係を示す図である。
【０１１５】
不揮発記憶部３１には、vfs_sbとfs_sb_memとが記憶される。vfs_sbは、ファイルシステム共通のスーパーブロック情報を含む構造体である。fs_sb_memは、ファイルシステム固有のスーパーブロック情報を含む構造体である。vfs_sbは、fs_sb_memへのポインタを含む。fs_sb_memへのポインタは、vfs_sbとfs_sb_memとを対応付けることができる。
【０１１６】
仮想管理部４５は、マウント時において、ストレージ部３３上のfs_sb_strから共通および固有のスーパーブロック情報のそれぞれを読み出し、vfs_sbおよびfs_sb_memの使用領域を確保し、読み出した共通および固有のスーパーブロック情報のそれぞれを不揮発記憶部３１にキャッシュさせる。仮想管理部４５は、vfs_sbとfs_sb_memとを別々の使用領域として確保する。これにより、仮想管理部４５は、fs_sb_memを独自の大きさに定義することができる。
【０１１７】
仮想管理部４５は、このように不揮発記憶部３１にスーパーブロック情報をキャッシュさせることにより、ストレージ部３３に毎回アクセスをすることなくスーパーブロック情報を更新することができる。この結果、仮想管理部４５は、スーパーブロック情報に対するアクセスを高速化することができる。
【０１１８】
図１２は、不揮発記憶部３１に記憶されるｉノード情報と、ストレージ部３３に記憶されるｉノード情報の関係を示す図である。
【０１１９】
不揮発記憶部３１には、fs_inode_memが記憶される。また、fs_inode_memには、vfs_inodeが含まれる。fs_inode_memは、ファイルシステム固有のｉノード情報を含む構造体である。vfs_inodeは、ファイルシステム共通のｉノード情報を含む構造体である。vfs_inodeは、vfs_sbへのポインタを含んでもよい。これにより、仮想管理部４５は、ｉノード情報からスーパーブロック情報を参照することができる。
【０１２０】
仮想管理部４５は、ファイルの参照時等に、既にキャッシュされていなければ、ストレージ部３３上のfs_inode_strから共通および固有のｉノード情報のそれぞれを読み出し、fs_inode_memおよびvfs_inodeの使用領域を確保し、読み出した共通および固有のｉノード情報のそれぞれを不揮発記憶部３１にキャッシュさせる。
【０１２１】
また、ファイルが存在しない場合で新規にファイルを作成する場合には、仮想管理部４５は、fs_inode_memおよびvfs_inodeの使用領域を確保して、共通および固有のｉノード情報のそれぞれを不揮発記憶部３１に書き込む。この時、スーパーブロックの情報から空いているｉノードの情報を探索し、fs_inodeの場所を決定する。
【０１２２】
仮想管理部４５は、このように不揮発記憶部３１にｉノード情報をキャッシュさせることにより、ストレージ部３３に毎回アクセスをすることなくｉノード情報を更新することができる。この結果、仮想管理部４５は、ｉノード情報に対するアクセスを高速化することができる。
【０１２３】
図１３は、不揮発記憶部３１に記憶されるｉノード情報と、ストレージ部３３に記憶されるｉノード情報の関係の他の例を示す図である。
【０１２４】
不揮発記憶部３１には、vfs_inodeがfs_inode_mem内に含まれるのではなく、vfs_inodeがfs_inode_memとは別個に記憶されてもよい。この場合、vfs_inodeには、fs_inode_memへのポインタを含む。
【０１２５】
データ情報であるdata_memとdata_strは、不揮発記憶部３１にdata_mem、ストレージ部３３にdata_strが記憶される。data_strは、ストレージ部３３のデータブロックにあたる。data_memは、対応するdata_strを迅速に得るために、data_strの位置に関する情報を記憶してもよい。
【０１２６】
図１４は、アプリケーション３５とオペレーティングシステム３６との関係を示す図である。
【０１２７】
データベース機能を実現するアプリケーション３５は、他の情報処理装置からネットワークを介してデータの読み出しまたはデータの書き込みのリクエストを受けると、ファイルにデータを読み出しまたは書き込む。そして、アプリケーション３５は、読み出しまたは書き込みの結果をレスポンスに含めて、他の情報処理装置にネットワークを介して返す。なお、アプリケーション３５は、他の情報処理装置に代えて、本装置内で動作する他のアプリケーションから読み出しまたはデータの書き込みのリクエストを受けてもよい。
【０１２８】
アプリケーション３５は、このようなファイルの操作等をオペレーティングシステム３６が提供するＡＰＩを介して行う。ストレージ部３３におけるデータベースが記憶されている位置は、設定ファイル等にファイルのパス名等で記述されている。アプリケーション３５は、起動時に設定ファイルを読み込み、データベースが記憶されているファイルのパスを取得する。
【０１２９】
アプリケーション３５は、ファイルのパスと、アクセスモード（読み出しのみ可能、書き込みのみ可能、読み書き可能等）を指定し、ｏｐｅｎシステムコールでファイルを開く。この場合、まず、仮想管理部４５は、不揮発記憶部３１にキャッシュされているスーパーブロック情報から該当するｉノード情報を探索する。
【０１３０】
不揮発記憶部３１のキャッシュに該当するｉノード情報が存在しない場合、仮想管理部４５は、ストレージ部３３からｉノード情報を読み出し、読み出したｉノード情報を不揮発記憶管理部４６を介して不揮発記憶部３１にキャッシュさせる。該当するｉノード情報が不揮発記憶部３１にキャッシュされると、仮想管理部４５は、揮発記憶管理部４７を介して揮発記憶部３２にファイルディスクリプタと呼ばれる、アプリケーション３５の識別情報の領域を確保する。このファイルディスクリプタは、ｏｐｅｎシステムコールの戻り値として、アプリケーション３５に渡される。アプリケーション３５は、以降このファイルディスクリプタを用いて、該当するファイルに対する操作を行う。
【０１３１】
また、アプリケーション３５は、ｒｅａｄシステムコール、ｗｒｉｔｅシステムコールまたはｍｍａｐシステムコールを用いてファイルにアクセスすることもできる。
【０１３２】
アプリケーション３５は、ｒｅａｄシステムコールでファイルからデータ情報を読み出すことができる。ファイルからデータ情報を読み出す場合、アプリケーション３５は、ファイルディスクリプタと、読み出し先バッファのアドレスおよび長さとを引数に指定して、ｒｅａｄシステムコールを呼び出す。ｒｅａｄシステムコールを受けた場合、仮想管理部４５は、該当するファイルのｉノード情報のデータ情報へのポインタ配列を参照して、読み出そうとしたデータ情報が不揮発記憶部３１にキャッシュされているかを調べる。
【０１３３】
キャッシュされている場合、仮想管理部４５は、不揮発記憶部３１にキャッシュされていたデータ情報をアプリケーション３５が指定した読み出し先バッファの位置に指定された長さ分コピーする。キャッシュされていない場合、仮想管理部４５は、ストレージ部３３からデータ情報を読み出し、読み出したデータ情報を不揮発記憶部３１にキャッシュしてから、アプリケーション３５が指定した読み出し先バッファの位置に指定された長さ分コピーする。なお、不揮発記憶管理部４６は、データ情報をページ単位で不揮発記憶部３１にキャッシュさせる。
【０１３４】
また、アプリケーション３５は、ｗｒｉｔｅシステムコールでファイルにデータ情報を書き込むことができる。ファイルにデータ情報を書き込む場合、アプリケーション３５は、ファイルディスクリプタと、書き込み対象のデータ情報を格納したバッファのアドレスおよび長さとを引数にしてｗｒｉｔｅシステムコールを呼び出す。ｗｒｉｔｅシステムコールを受けた場合、仮想管理部４５は、該当するファイルのｉノード情報のデータ情報へのポインタ配列を参照して、書き込もうとしているデータ情報が不揮発記憶部３１にキャッシュされているかを調べる。
【０１３５】
キャッシュされている場合、仮想管理部４５は、不揮発記憶部３１にキャッシュされていたデータ情報の位置に、アプリケーション３５が指定したバッファの位置から指定された長さ分コピーする。キャッシュされていない場合、仮想管理部４５は、ストレージ部３３からデータ情報を読み出し、読み出したデータ情報を不揮発記憶部３１にキャッシュしてから、読み出したデータ情報の位置に、アプリケーション３５が指定したバッファの位置から指定された長さ分コピーする。なお、不揮発記憶管理部４６は、データ情報をページ単位で不揮発記憶部３１にキャッシュさせる。
【０１３６】
また、アプリケーション３５は、ｍｍａｐシステムコールでファイルのデータ情報にアクセスすることもできる。ｍｍａｐシステムコールでファイルのデータ情報にアクセスする場合、アプリケーション３５は、メモリマップするデータ情報のアドレスおよび長さと、メモリ保護の種別と、フラグとを引数にしてｍｍａｐシステムコールを呼び出す。アプリケーション３５は、メモリ保護の種別により、マッピングのメモリ保護をどのように行うかを指定する。アプリケーション３５は、一例として、実行可能、読み書き可能、書き込み可能等を組み合わせた情報をメモリ保護の種別として指定する。アプリケーション３５は、フラグにより、マッピングしたデータ情報を共有するか等を指定する。
【０１３７】
ｍｍａｐシステムコールを受けた場合、仮想管理部４５では、マッピングされたアドレスにアクセスがあった場合にページフォルトが発生するように、ＭＭＵを設定する。ページフォルトのハンドラには、対応するデータ情報をストレージ部３３からページ単位で読み出し、読み出したデータ情報をキャッシュするように設定されている。例えば、マッピングされたアドレスからデータ情報を読み出したり、マッピングされたアドレスにデータ情報を書き込んだりすると、対応するデータ情報がキャッシュされていない場合、ＭＭＵは、ページフォルトを発生する。そして、データ情報をキャッシュした後に、ＭＭＵは、キャッシュしたデータ情報に対して読み出しまたは書き込みを実行する。対応するデータ情報がキャッシュされている場合、ＭＭＵは、キャッシュされているデータ情報に対して読み出しまたは書き込みを実行する。
【０１３８】
なお、本実施形態においては、オペレーティングシステム３６は、ストレージ部３３へのデータの同期を実行するｆｓｙｎｃシステムコールおよびｍｓｙｎｃシステムコールをサポートしている。しかし、オペレーティングシステム３６は、ｆｓｙｎｃシステムコールおよびｍｓｙｎｃシステムコールが呼び出されても、ストレージ部３３への書き戻しは行わず、プロセッサ２１から不揮発性メモリ２２のデータを順番通りに書き出す処理を行う。
【０１３９】
例えばサービスを計画的に停止する場合等において、ユーザは、データベースの機能を提供しているアプリケーション３５を停止する。アプリケーション３５が停止されると、オペレーティングシステム３６は、ｏｐｅｎシステムコールでアプリケーション３５が参照している全てのファイルについて、ｃｌｏｓｅシステムコールが呼び出された場合と同等の処理を実行する。そして、マウントしていたストレージ部３３のファイルを参照していたアプリケーション３５が全て無くなると、ユーザは、そのストレージ部３３をアンマウントすることができる。
【０１４０】
図１５は、ストレージ部３３のアンマウント時の処理を示すフローチャートである。アンマウント時において、仮想管理部４５は、図１５に示す手順で処理を実行する。
【０１４１】
まず、仮想管理部４５は、不揮発キャッシュモードに設定されているか否かを判断する（Ｓ１５１）。不揮発キャッシュモードに設定されていない場合（Ｓ１５１のＮｏ）、仮想管理部４５は、処理をステップＳ１５３に進める。不揮発キャッシュモードに設定されている場合（Ｓ１５１のＹｅｓ）、仮想管理部４５は、さらに、ライトバックモードに設定されているか否かを判断する（Ｓ１５２）。ライトバックモードに設定されている場合（Ｓ１５２のＹｅｓ）、仮想管理部４５は、処理をステップＳ１５３に進める。
【０１４２】
不揮発キャッシュモードが設定されていない場合（Ｓ１５１のＮｏ）、または、ライトバックモードに設定されている場合（Ｓ１５２のＹｅｓ）、ステップＳ１５３において、仮想管理部４５は、不揮発記憶部３１にキャッシュされている仮想ファイルシステムの管理情報およびデータ情報をストレージ部３３に書き戻す（Ｓ１５３）。すなわち、仮想管理部４５は、不揮発記憶部３１に記憶されているスーパーブロック情報、ｉノード情報およびデータ情報を、ストレージ部３３に書き戻す。そして、仮想管理部４５は、不揮発記憶管理部４６を用いてこれらの使用領域を解放し、処理を終了する。これにより、情報処理装置１０は、不揮発性メモリ２２を例えば取り外すことができる。
【０１４３】
一方、不揮発キャッシュモードが設定されていて、かつ、ライトバックモードに設定されていない場合（Ｓ１５２のＮｏ）、仮想管理部４５は、不揮発記憶部３１にキャッシュされているデータを書き戻しせず、不揮発記憶部３１にキャッシュされているデータをそのまま残存させる。これにより、情報処理装置１０は、アンマウント時の処理時間を短縮することができる。また、情報処理装置１０は、ストレージ部３３を再度マウントする場合における処理時間も短縮することができる。
【０１４４】
図１６は、ストレージ部３３のマウント時の処理を示すフローチャートである。マウント時において、仮想管理部４５は、図１６に示す手順で処理を実行する。
【０１４５】
まず、仮想管理部４５は、不揮発キャッシュモードが設定されているか否かを判断する（Ｓ１６１）。不揮発キャッシュモードが設定されていない場合（Ｓ１６１のＮｏ）、仮想管理部４５は、マウント情報、スーパーブロック情報、ｉノード情報およびデータ情報等を、揮発記憶管理部４７を用いて揮発記憶部３２にキャッシュするように設定する（Ｓ１６２）。続いて、仮想管理部４５は、マウント情報およびスーパーブロック情報等の使用領域を揮発記憶管理部４７を用いて揮発記憶部３２に確保し（Ｓ１６３）、本フローを終了する。このように不揮発キャッシュモードが設定されていない場合、仮想管理部４５は、再起動後に復元できないように、スーパーブロック情報等およびデータ情報をキャッシュさせることができる。
【０１４６】
不揮発キャッシュモードが設定されている場合（Ｓ１６１のＹｅｓ）、仮想管理部４５は、マウント情報、スーパーブロック情報、ｉノード情報およびデータ情報等を、不揮発記憶管理部４６を用いて、不揮発記憶部３１にキャッシュするように設定する（Ｓ１６４）。このように不揮発キャッシュモードが設定されている場合、仮想管理部４５は、再起動後に復元可能なようにスーパーブロック情報等およびデータ情報をキャッシュさせることができる。
【０１４７】
Ｓ１６４に続いて、仮想管理部４５は、マウントしたストレージ部３３に記憶されているスーパーブロック情報に含まれるファイルシステム識別情報（ＵＵＩＤ）と、不揮発記憶部３１に記憶されているスーパーブロック情報に含まれるファイルシステム識別情報とを読み出す。そして、仮想管理部４５は、マウントしたストレージ部３３上のファイルシステム識別情報と、不揮発記憶部３１上のファイルシステム識別情報とが一致するか否かを判断する（Ｓ１６５）。
【０１４８】
なお、不揮発記憶部３１に複数のファイルシステムに属するスーパーブロック情報が記憶されている場合、仮想管理部４５は、マウント情報のリストを辿り、全てのファイルシステムに属するスーパーブロック情報から、ファイルシステム識別情報を読み出す。そして、仮想管理部４５はストレージ部３３上のファイルシステム識別情報と、不揮発記憶部３１上の何れかのファイルシステム識別情報とが一致するか否かを判断する。
【０１４９】
判断の結果、ファイルシステム識別情報が一致する場合、不揮発記憶部３１には、マウントしたストレージ部３３のファイルシステムに属するスーパーブロック情報等およびデータ情報が既にキャッシュされている。一方、判断の結果、ファイルシステム識別情報が一致しない場合、不揮発記憶部３１には、マウントしたストレージ部３３のファイルシステムに属するスーパーブロック情報等およびデータ情報が、未だキャッシュされていない。
【０１５０】
何れのファイルシステム識別情報も一致しない場合（Ｓ１６５のＮｏ）、仮想管理部４５は、処理をステップＳ１６８に進める。ファイルシステム識別情報が一致する場合（Ｓ１６５のＹｅｓ）、仮想管理部４５は、さらに、リカバーモードが設定されているか否かを判断する（Ｓ１６６）。そして、リカバーモードが設定されている場合（Ｓ１６６のＹｅｓ）、仮想管理部４５は、処理をステップＳ１６７に進める。リカバーモードが設定されていない場合（Ｓ１６６のＮｏ）、仮想管理部４５は、処理をステップＳ１６９に進める。
【０１５１】
ステップＳ１６７において、仮想管理部４５は、ファイルシステム識別情報が一致したスーパーブロック情報に対応するマウント情報を、揮発記憶部３２に記憶されているハッシュリストに接続する。これにより、仮想管理部４５は、このスーパーブロック情報を読み出し可能とすることができる。さらに、仮想管理部４５は、このスーパーブロック情報から辿ることができるｉノード情報およびデータ情報も読み出し可能とすることができる。
【０１５２】
すなわち、仮想管理部４５は、不揮発記憶部３１に既にキャッシュされている、マウントしたストレージ部３３のファイルシステムに属するスーパーブロック情報、ｉノード情報およびデータ情報等を有効にすることができる。これにより、仮想管理部４５は、不揮発記憶部３１に記憶されたスーパーブロック情報、ｉノード情報およびデータ情報を、マウントされたストレージ部３３に記憶されたファイルを管理するために使用することができる。
【０１５３】
ステップＳ１６８において、仮想管理部４５は、不揮発記憶管理部４６を用いて、マウント情報リスト、マウント情報およびスーパーブロック情報の使用領域を、不揮発記憶部３１に確保する（Ｓ１６８）。なお、仮想管理部４５は、スタートポイントの使用領域が未だ確保されていない場合には、スタートポイントも確保する。
【０１５４】
これにより、仮想管理部４５は、マウントしたストレージ部３３のファイルシステムに属するスーパーブロック情報等が未だ不揮発記憶部３１にキャッシュされていない場合に、マウントしたストレージ部３３上のスーパーブロック情報等を不揮発記憶部３１上に新たにキャッシュさせることができる。さらに、仮想管理部４５は、マウントしたストレージ部３３上のスーパーブロック情報を不揮発記憶部３１上にキャッシュさせることにより、ストレージ部３３のスーパーブロック情報に含まれるファイルシステム識別情報と、不揮発記憶部３１の何れかのファイルシステム共通のスーパーブロック情報とを一致させることができる。
【０１５５】
仮想管理部４５は、ステップＳ１６８の処理の後に、ステップＳ１６７に処理を進める。そして、ステップＳ１６７において、仮想管理部４５は、マウント情報とハッシュリストとを接続し、不揮発記憶部３１上に新たにキャッシュさせたスーパーブロック情報等を有効にする。
【０１５６】
また、ステップＳ１６９において、仮想管理部４５は、不揮発記憶部３１上の、マウントしたストレージ部３３のファイルシステムに属するスーパーブロック情報、ｉノード情報およびデータ情報等を全て無効化する（Ｓ１６９）。具体的には、仮想管理部４５は、マウントしたストレージ部３３のファイルシステム識別情報と一致するファイルシステム識別情報を含むスーパーブロック情報から、ポインタおよびリストを辿り、スーパーブロック情報、ｉノード情報およびデータ情報を検出する。そして、仮想管理部４５は、検出したこれらの情報の使用領域を解放する。
【０１５７】
ステップＳ１６９に続いて、仮想管理部４５は、不揮発記憶管理部４６を用いて、スーパーブロック情報等の使用領域を不揮発記憶部３１に新たに確保する（Ｓ１７０）。なお、仮想管理部４５は、スタートポイント、マウント情報リストおよびマウント情報については、過去に記憶されていた使用領域を再利用してもよいし、過去に記憶されていた使用領域を解放してから再度確保してもよい。そして、仮想管理部４５は、ステップＳ１７０の処理の後に、ステップＳ１６７に処理を進める。そして、ステップＳ１６７において、仮想管理部４５は、マウント情報とハッシュリストとを接続し、不揮発記憶部３１上に新たにキャッシュさせたスーパーブロック情報等を有効にする。
【０１５８】
仮想管理部４５は、ステップＳ１６７の処理を終了すると、本フローを終了する。
【０１５９】
以上のように、仮想管理部４５は、マウント時において、ストレージ部３３上のファイルシステム識別情報と不揮発記憶部３１上のファイルシステム識別情報とが一致することを条件として、不揮発記憶部３１にキャッシュされていたスーパーブロック情報等およびデータ情報を、マウントしたストレージ部３３のファイルの管理のために有効にする。これにより、仮想管理部４５は、マウントしたストレージ部３３のためにキャッシュされていたデータを適切に有効にすることができる。
【０１６０】
なお、電源遮断、ソフトウェアのフリーズ、ハードウェアのエラー等の障害が発生した場合、仮想管理部４５は、再起動後にマウント処理を行う。この場合、障害が発生する直前までストレージ部３３が正常にマウントされていたので、不揮発記憶部３１には、ストレージ部３３に記憶されているファイルシステム識別情報と一致するファイルシステム識別情報を含むスーパーブロック情報が、残っている。従って、この場合には、不揮発キャッシュモードおよびリカバーモードを設定することにより、仮想管理部４５は、仮想ファイルシステムのキャッシュを障害直前の状態にまで復旧することができる。
【０１６１】
また、仮想管理部４５は、マウント時において、ｉノード情報およびデータ情報を辿り、壊れている情報が存在するか否かをチェックしてもよい。そして、仮想管理部４５は、壊れている情報を無効化してもよい。これにより、仮想管理部４５は、壊れていない情報のみを不揮発記憶部３１にキャッシュさせた状態とすることができる。
【０１６２】
また、情報処理装置１０のオペレーティングシステム３６は、不揮発オブジェクトを削除する専用の削除処理部を有してもよい。削除処理部は、不揮発記憶部３１に記憶されているスーパーブロック情報からファイルシステム識別情報を読み出して一覧を表示し、何れかのファイルシステムをユーザに選択させる。削除処理部は、選択されたファイルシステムに属する不揮発オブジェクト（マウント情報リスト、マウント情報、スーパーブロック情報、ｉノード情報、データ情報等）をポインタおよびリスト等を辿って検出し、不揮発記憶管理部４６を用いて検出した不揮発オブジェクトの使用領域を解放する。これにより、削除処理部は、マウントする予定のないストレージ部３３を管理するファイルシステムに属する不揮発オブジェクトを削除することができる。
【０１６３】
なお、仮想管理部４５は、不揮発記憶部３１にキャッシュされた情報が一定量を超えると、一部の情報をストレージ部３３に書き戻す。これにより、仮想管理部４５は、不揮発記憶部３１をオーバーフローさせずに使用することができる。仮想管理部４５は、一例として、ＬＲＵ（Least  Recently  Used）と呼ばれる方式を用いて、何れの情報を書き戻すかを判断してもよい。ＬＲＵでは、最近使用されていないエントリをアクセスタイミングおよびフラグ等を用いて判断し、最近使用されていないエントリをストレージ部３３に書き戻す方式である。
【０１６４】
また、本実施形態においては、仮想管理部４５は、ハッシュリストvfs_mnt_hashを揮発記憶管理部４７を用いて揮発記憶部３２に記憶させている。これに代えて、仮想管理部４５は、ハッシュリストvfs_mnt_hashを不揮発記憶管理部４６を用いて不揮発記憶部３１に記憶させてもよい。この場合、図１７に示すように、仮想管理部４５は、スタートポイントvfs_mnt_startおよびマウント情報リストvfs_mnt_listを設定しなくてもよい。ただし、この場合、仮想管理部４５は、起動時にハッシュリストvfs_mnt_hashが確保された時点において、ハッシュリストに接続されているマウント情報からストレージ部３３を特定し、ファイルシステム識別情報が一致するか否かを確認しなければならない。
【０１６５】
以上のように、第１の実施形態に係る情報処理装置１０によれば、仮想ファイルシステムの管理情報およびデータ情報を不揮発記憶部３１に再起動後も読み出し可能にキャッシュすることにより、障害が発生した場合にも障害直前の状態まで、異なる複数のファイルシステムにより管理されるファイルを復元することができる。
【０１６６】
また、第１の実施形態に係る情報処理装置１０によれば、不揮発記憶部３１の占有領域を、それぞれのストレージ部３３へのアクセス頻度に応じて動的に変更することができる。例えば、図１８に示すように、情報処理装置１０は、第１のストレージデバイス２４−１および第２のストレージデバイス２４−２を有するとする。
【０１６７】
また、第１のストレージデバイス２４−１は、２つのパーティションに分けて使用され、第１のストレージ部３３−１および第２のストレージ部３３−２として機能するとする。また、第２のストレージデバイス２４−２は、２つのパーティションに分けて使用され、第３のストレージ部３３−３および第４のストレージ部３３−４として機能するとする。また、第２のストレージ部３３−２は、データベースのデータを記憶し、第１のストレージ部３３−１、第３のストレージ部３３−３および第４のストレージ部３３−４は、設定ファイル、プログラムおよびログ等を記憶するとする。
【０１６８】
このような場合において、仮想管理部４５は、仮想ファイルシステムの管理情報およびデータ情報におけるアクセス頻度の低いデータから順に不揮発記憶部３１から削除し、アクセス頻度が高いデータを不揮発記憶部３１に優先的にキャッシュさせる。従って、仮想管理部４５は、データベースへのアクセスが頻繁にあると、図１８に示すように、アクセス頻度の高い第２のストレージ部３３−２に記憶されているデータを、アクセス頻度の低い他のストレージ部３３に記憶されているデータよりも優先してキャッシュさせることができる。
【０１６９】
上述の実施形態においては、ストレージ部３３において、スーパーブロック情報にファイルシステムの識別情報を記憶したが、これはストレージ部３３のパーティション情報に記憶してもよい。
【０１７０】
上記の実施形態においては、不揮発オブジェクト識別情報とファイルシステム識別情報の２つを用いた例を示したが、不揮発オブジェクト識別情報をファイルシステム識別情報に統合して、ファイルシステム識別情報だけを用いてもよい。
【０１７１】
（第２の実施形態）
図１９は、第２の実施形態に係る情報処理装置１０のハードウェアの構成を示す図である。なお、第２の実施形態は、第１の実施形態と略同一の機能および構成を有するので、第１の実施形態と略同一の機能および構成を有する部材に同一の符号を付けて、相違点を除き詳細な説明を省略する。
【０１７２】
本実施形態に係る情報処理装置１０は、第１の実施形態の構成要素に加えて、揮発性メモリ５１をさらに備える。揮発性メモリ５１は、プロセッサ２１とメモリバス２５で接続され、電源が遮断されると情報を消去する。揮発性メモリ５１は、一例として、ＤＲＡＭである。
【０１７３】
図２０は、第２の実施形態に係る情報処理装置１０の機能ブロックの構成を示す図である。本実施形態において、揮発記憶部３２は、揮発性メモリ５１により実現される。
【０１７４】
図２１は、第２の実施形態における、不揮発記憶部３１、揮発記憶部３２およびストレージ部３３に記憶される情報の関係を示す図である。
【０１７５】
第２の実施形態において、揮発記憶部３２は、アプリケーション３５のデータ、仮想ファイルシステム以外のオペレーティングシステム（ＯＳ）のデータを記憶する。また、仮想管理部４５は、仮想ファイルシステムの管理情報のうちの、ファイルの探索を高速化するための情報等の不揮発性が必要ない情報を、揮発記憶管理部４７を用いて揮発記憶部３２に記憶させてもよい。例えば、仮想管理部４５は、ディレクトリエントリおよびファイルディスクリプタに関する情報等を、揮発記憶管理部４７を用いて揮発記憶部３２に記憶させてもよい。
【０１７６】
揮発性メモリ５１は、一般に、不揮発性メモリ２２よりもビット単価が低く、応答速度も速い。従って、第２の実施形態に係る情報処理装置１０によれば、コストを低くし、さらに、処理速度を速くしつつ、第１の実施形態と同様の効果を得ることができる。
【０１７７】
第２の実施形態において、例えばデータの書き込みが少ないストレージ部３３などにおいて、マウント時のオプションとして不揮発キャッシュモードを設定して、揮発メモリにキャッシュすることで、コストの高い不揮発性メモリ２２を他の必要な領域に効率的に使用することができる。
【０１７８】
（第３の実施形態）
図２２は、第３の実施形態に係る情報処理装置１０の機能ブロックの構成を示す図である。なお、第３の実施形態は、第２の実施形態と略同一の機能および構成を有するので、第２の実施形態と略同一の機能および構成を有する部材に同一の符号を付けて、相違点を除き詳細な説明を省略する。
【０１７９】
本実施形態に係る情報処理装置１０は、第２の実施形態の機能構成に加えて、ブロックデバイス制御部６１をさらに備える。
【０１８０】
ブロックデバイス制御部６１は、ストレージ部３３に対して新たな論理アドレスを構築し、仮想的な１つのログ構造のブロックデバイスを構成する。ブロックデバイス制御部６１は、ブロックデバイスに記憶されるデータをブロック単位で管理する。ブロックデバイス制御部６１は、個別管理部４４または仮想管理部４５等から、ブロックデバイスに対するブロック単位のデータの書き込みまたはブロック単位のデータの読み出しのリクエストを受ける。ブロックデバイス制御部６１は、受け付けたリクエストに応じて、ブロックデバイスに対してアクセスをする。ブロックデバイス制御部６１は、このようなブロックデバイスを制御するためのソフトウェアプログラムであるデバイスドライバを、オペレーティングシステム３６に組み込むことにより実現される。
【０１８１】
ＳＳＤまたはＨＤＤ等は、一般的に、ランダムアクセスで書き込むよりもシーケンシャルアクセスで書き込む方が高い性能を発揮する。例えば、ＳＳＤまたはＨＤＤ等は、一般的なページサイズである４ＫＢ単位でデータが書き込まれるよりも、１２８ページ分まとめた５１２ＫＢ単位でデータが書き込まれる方が、高速に処理することができる。ブロックデバイス制御部６１は、このようにデータをまとめてストレージ部３３に書き込む機能を実現し、ストレージ部３３へのアクセスを高速化する。また、ＳＳＤにおいては、シーケンシャルアクセスで書き込む方が、ＮＡＮＤフラッシュメモリの書き換え回数を減らし、ＳＳＤの寿命を延ばすことができる。
【０１８２】
また、ブロックデバイス制御部６１は、ファイルシステムよりも下層で動作するので、様々なファイルシステムにより管理されるデータをストレージ部３３に高速に書き込むことができる。また、ブロックデバイス制御部６１は、データを更新する場合には、ストレージ部３３のデータを上書きするのではなく、ストレージ部３３の別の新たな領域にデータを書き込む。これにより、ブロックデバイス制御部６１は、常時、シーケンシャルにデータを書き込むことができる。
【０１８３】
図２３は、第３の実施形態に係る情報処理装置１０の書き込み処理を説明するための図である。図２４は、状態ビットマップの一例を示す図である。図２５は、ＬＢＡ変換テーブルの一例を示す図である。
【０１８４】
個別管理部４４は、ブロックデバイス制御部６１に対して、ファイルシステムにおけるデータの管理単位であるブロック単位でデータの書き込みのリクエストを送信する。ブロックは、例えば１ＫＢ、２ＫＢまたは４ＫＢ等のファイルシステムのフォーマット時にユーザによって設定されたデータサイズである。本実施形態においては、ブロックは、一例として、４ＫＢである。
【０１８５】
ブロックデバイス制御部６１は、一定数の書き込みのリクエストを受け取るまで、書き込み処理を待機する。ブロックデバイス制御部６１は、一例として、４ＫＢのブロックの書き込みのリクエストが、１２８個揃うまで待機する。まとまった一定数のブロックをブロックセットと呼ぶ。本実施形態においては、まとまった１２８個のブロックをブロックセットと呼ぶ。ブロックデバイス制御部６１は、ブロックセットの単位でストレージ部３３にデータを書き込む。
【０１８６】
ブロックデバイス制御部６１は、状態ビットマップと、ＬＢＡ変換テーブル（アドレス変換テーブル）とを用いて、ストレージ部３３への書き込みおよび読み出しを制御する。状態ビットマップは、揮発記憶部３２に記憶される。ＬＢＡ変換テーブルは、不揮発記憶部３１に記憶される。
【０１８７】
状態ビットマップは、図２４に示すように、それぞれのブロックセットに含まれるそれぞれのブロックが使用中であるか未使用であるかを示すマップである。ストレージ部３３は、全体をブロックセットのサイズの領域に分割して管理され、分割されたそれぞれの領域にユニークなブロックセット番号が割り当てられている。状態ビットマップは、ブロックセット番号により、ブロックセットの位置を特定する。また、状態ビットマップは、それぞれのブロックセット番号に対応したエントリを有する。それぞれのエントリは、１つのブロックセットに含まれるブロックの個数分のビットを有する。それぞれのビットは、ブロックセット内のブロックの位置に対応している。それぞれのビットは、例えば値が１である場合には対応するブロックが使用中であり、値が０である場合には対応するブロックが未使用であることを表す。
【０１８８】
ブロックデバイスを最初に作成する時に、ブロックデバイス制御部６１は、状態ビットマップ内の全てのエントリの全てのビットを、未使用を表す０に初期化する。ブロックデバイス制御部６１は、ブロックセットを書き込む場合、全てのビットが未使用を表す０であるエントリを探し、全てのビットが０であるエントリに対応するブロックセット番号の位置に、ブロックセットを書き込む。ブロックセットを書き込んだ場合、ブロックデバイス制御部６１は、対応するブロックセット番号のエントリに含まれる全てのビットを使用中を表す１に書き換える。
【０１８９】
ＬＢＡ変換テーブルは、図２５に示すように、ブロック単位で、ブロックデバイスで使用する論理ブロックアドレスと、ストレージ部３３の論理ブロックアドレスとを対応付けている。ＬＢＡ変換テーブルを用いることにより、ブロックデバイス制御部６１は、ブロックデバイスにおける特定の論理ブロックアドレスのブロックが、ストレージ部３３のどの位置に記憶されているかを管理することができる。なお、ブロックデバイス制御部６１は、ＬＢＡ変換テーブルで用いるブロックの単位を、ファイルシステムとは独立に設定してもよい。本実施形態においては、ＬＢＡ変換テーブルで用いるブロックの単位は、一例として、ファイルシステムのブロック単位と同じ４ＫＢである。
【０１９０】
ブロックデバイスにおける指定された論理ブロックアドレスからデータを読み出す場合、ブロックデバイス制御部６１は、ＬＢＡ変換テーブルを参照してブロックデバイスの指定された論理ブロックアドレスに対応するストレージ部３３の論理ブロックアドレスを特定する。そして、ブロックデバイス制御部６１は、ストレージ部３３における特定した位置からデータを読み出す。
【０１９１】
ブロックデバイスにおける指定された論理ブロックアドレスにデータを書き込む場合、ブロックデバイス制御部６１は、状態ビットマップを参照してストレージ部３３上における何れのデータも書き込まれていない新たな領域を特定し、データを書き込む。そして、ブロックデバイス制御部６１は、ＬＢＡ変換テーブルにおける、ブロックデバイスの指定された論理ブロックアドレスに対応するストレージ部３３の論理ブロックアドレスの内容を、実際にデータを書き込んだ新たな領域の論理ブロックアドレスに書き換える。
【０１９２】
このように、ブロックデバイス制御部６１は、ストレージ部３３のデータを書き換える場合、上書きせずに新たな領域にデータを書き込む。これにより、ブロックデバイス制御部６１は、シーケンシャルにデータを書き込むことができる。
【０１９３】
また、ブロックデバイス制御部６１は、所定のタイミングで、ガベージコレクションを実行する。ガベージコレクションでは、ブロックデバイス制御部６１は、状態ビットマップを走査し、使用中のブロックが少ないブロックセットを再利用する。具体的には、ブロックデバイス制御部６１は、使用中のブロックが１個であるエントリ、使用中のブロックが２個であるエントリ、…といったように使用中のブロックが少ない順にブロックセットを探索し、探索されたブロックセットの中の使用中のブロックを検出していく。そして、ブロックデバイス制御部６１は、使用中のブロックの数が１ブロックセット分（例えば１２８ブロック分）検出されたところで、検出されたブロックを１つのブロックセットにまとめる。
【０１９４】
このようなガベージコレクションを実行することにより、ブロックデバイス制御部６１は、ストレージ部３３における新たに書き込みが可能な領域（全てのブロックが未使用のブロックセット）を形成することができる。ブロックデバイス制御部６１は、このようなガベージコレクションを、例えば全てのブロックセットのうち未使用ブロックセットの数が一定割合以下（例えば、４分の１以下）となった場合に実行してもよい。また、ブロックデバイス制御部６１は、状態ビットマップを更新した結果使用中のブロックが少ないブロックセットが発生した場合に、このブロックセットを、近隣の他のブロックセットと合成してもよい。
【０１９５】
つぎに、ブロックデバイス制御部６１が書き込み要求を受けた場合の具体的な処理例について説明する。
【０１９６】
例えば、図２３に示すように、仮想管理部４５は、個別管理部４４に対して、仮想ファイルシステムの管理情報およびデータ情報等のストレージ部３３への書き込みを指示する。また、これを受けた個別管理部４４は、ブロックデバイス制御部６１に対して、ブロックデバイスの先頭から数えた番号でBlock  ＃４、Block  ＃３９１、Block  ＃２１、…、Block  ＃２７５、…というように書き込み要求をしたとする。
【０１９７】
この場合、ブロックデバイス制御部６１は、１２８ブロック分の書き込みの要求を受け取るまで、これらの書き込み要求を保持する。ブロックデバイス制御部６１は、１２８ブロック分の書き込み要求を受け取ると、これらを１つのブロックセットとしてまとめてストレージ部３３に書き込む。この場合、ブロックデバイス制御部６１は、状態ビットマップを参照して書き込み位置を決定する。ブロックデバイス制御部６１は、状態ビットマップのブロックセット番号０から全てのビットが０であるエントリを探す。図２４の例の場合、ブロックセット番号５が全て０である。従って、ブロックデバイス制御部６１は、ブロックセット番号５の位置にブロックセットを書き込むことを決定する。ブロックデバイス制御部６１は、状態ビットマップにおけるブロックセット番号５の全ビットを使用中を示す１に書き換え、ストレージ部３３におけるブロックセット番号５の位置にブロックセットを書き込む。なお、ブロックのサイズが４ＫＢであるので、ブロックセット番号５の位置は、先頭から数えると７６８ブロック目となる。
【０１９８】
ブロックデバイス制御部６１は、ストレージ部３３への書き込みが完了すると、ＬＢＡ変換テーブルを更新する。書き込んだブロックの先頭のブロックは、ブロックデバイスの論理ブロックアドレスが４である。ブロックデバイス制御部６１は、ＬＢＡ変換テーブルの、ブロックデバイスの論理ブロックアドレスが４のエントリのストレージ部３３の論理ブロックアドレスを、過去に書き込まれていた２５７から今回書き込んだ位置である７６８に書き換える。
【０１９９】
そして、ブロックデバイス制御部６１は、参照されなくなったストレージ部３３の２５７番目のブロックについて状態ビットマップを更新する。２５７番目のブロックはブロックセット番号２の０ビット目に該当する。従って、ブロックデバイス制御部６１は、ブロックセット番号２の０ビット目のビットを１から０に更新する。ブロックデバイス制御部６１は、３９１番目のブロック、２１番目のブロック、…、２７５番目のブロックに対しても、同様に処理を行う。
【０２００】
一方、ブロックデバイス制御部６１が読み出し要求を受けた場合は、具体的には次のように処理がされる。
【０２０１】
個別管理部４４は、ブロックデバイス制御部６１に対して、ブロックデバイスの論理アドレス４０９６（論理ブロックアドレス１）の読み出し要求を与えたとする。この場合、ブロックデバイス制御部６１は、ＬＢＡ変換テーブルを参照して、ブロックデバイスの論理ブロックアドレス１をストレージ部３３の論理ブロックアドレス９９８に変換する。ストレージ部３３の論理ブロックアドレス９９８に対応する論理アドレスは、９９８×４０９６＝４０８７８０８となる。従って、ブロックデバイス制御部６１は、ストレージ制御部４３に対して、論理アドレス４０８７８０８を指定して読み出しリクエストを与える。
【０２０２】
図２６は、第３の実施形態に係る不揮発記憶部３１に記憶されるブロックデバイスに関連するブロックデバイス情報の関係を示す図である。不揮発記憶管理部４６は、ブロックデバイス情報を再起動後も復元可能なよう不揮発記憶部３１に記憶させる。具体的には、不揮発記憶管理部４６は、ブロックデバイス情報に含まれる各情報が、スタートポイントから辿ることが可能に不揮発記憶部３１に記憶される。
【０２０３】
ブロックデバイス情報は、blkdev_startと、blkdev_listと、blkdevとを含む。blkdev_startは、ブロックデバイス情報のスタートポイント構造体である。blkdev_listは、ブロックデバイス情報リスト構造体である。blkdevは、ブロックデバイス識別情報構造体である。ブロックデバイス情報は、作成されたブロックデバイス毎にblkdevを含む。また、ブロックデバイス情報は、それぞれのblkdevに対応してblkdev_listを含む。
【０２０４】
blkdev_startは、最初のblkdev_listへのポインタを含む。blkdev_listは、次のエントリのblkdev_listへのポインタと、対応するblkdevへのポインタを含む。blkdevは、ブロックデバイス識別情報とＬＢＡ変換テーブルとを含む。
【０２０５】
ブロックデバイス情報は、不揮発記憶部３１のＬＢＡ変換テーブルと、ストレージ部３３との対応を判断するために用いられる情報である。ブロックデバイス識別情報は、一例として、ブロックデバイスの作成時に生成したＵＵＩＤである。ＵＵＩＤは、ストレージ部３３の先頭と、blkdevとに格納される。ブロックデバイス制御部６１は、ストレージ部３３の先頭のＵＵＩＤとblkdevのＵＵＩＤとが一致することを条件として、不揮発記憶部３１に記憶されているブロックデバイス情報を有効にする。これにより、ブロックデバイス制御部６１は、異なるブロックデバイス情報に基づきブロックデバイスを管理することを防ぐことができる。
【０２０６】
図２７は、ブロックデバイスの作成時の処理を示すフローチャートである。ブロックデバイスの作成指示をユーザ等から受け取った場合、ブロックデバイス制御部６１は、図２７に示す処理を実行する。
【０２０７】
まず、ブロックデバイス制御部６１は、指定されたストレージ部３３からブロックデバイス識別情報（例えばＵＵＩＤ）を取得する。また、ブロックデバイス制御部６１は、不揮発記憶管理部４６を介して不揮発記憶部３１にアクセスして、blkdev_startからblkdev_listを辿り、blkdevのブロックデバイス識別情報に格納されているＵＵＩＤを取得して、ストレージ部３３上のブロックデバイス識別情報と比較する（ステップＳ１８１）。
【０２０８】
ブロックデバイス識別情報が一致しない場合（ステップＳ１８１のＮｏ）、ブロックデバイス制御部６１は、不揮発記憶管理部４６を介して、不揮発記憶部３１に、blkdev_start、blkdev_list、blkdevの領域を確保する。そして、ブロックデバイス制御部６１は、blkdevのＬＢＡ変換テーブルを、例えばブロックデバイスの論理ブロックアドレスとストレージ部３３の論理ブロックアドレスとが同一の値となるように初期化する（Ｓ１８２）。さらに、ブロックデバイス制御部６１は、ブロックデバイス識別情報を生成して、ストレージ部３３の先頭と、blkdevとに記憶させて、blkdev_start、blkdev_list、blkdevの間のポインタを接続する。
【０２０９】
ブロックデバイス識別情報が一致した場合（ステップＳ１８１のＹｅｓ）、ブロックデバイス制御部６１は、作成したブロックデバイスが、ブロックデバイス識別情報が一致したblkdevを参照するように設定する（Ｓ１８３）。これにより、ブロックデバイス制御部６１は、ブロックデバイス識別情報が一致したblkdevのＬＢＡ変換テーブルを用いて、ブロックデバイスを実現することができる。
【０２１０】
Ｓ１８３に続いて、ブロックデバイス制御部６１は、状態ビットマップを復元する（Ｓ１８４）。ブロックデバイス制御部６１は、最初に状態ビットマップを全て０に初期化し、不揮発記憶部３１に記憶されているＬＢＡ変換テーブルを先頭から走査していき、ストレージ部３３の論理ブロックアドレスに対応するブロックが使用されているか否かを調査する。ブロックデバイス制御部６１は、ブロックが使用されていれば、対応するビットを１に設定する。このような処理をすることにより、ブロックデバイス制御部６１は、状態ビットマップの状態を復元することができる。
【０２１１】
ブロックデバイス制御部６１は、ステップＳ１８２またはステップＳ１８４の処理を終えると、本フローを終了する。
【０２１２】
なお、本実施形態において、状態ビットマップは、揮発記憶部３２に記憶される。しかし、状態ビットマップは、不揮発記憶部３１に、再起動後も復元可能なように記憶されてもよい。これにより、ブロックデバイス制御部６１は、再度、ブロックデバイスが作成された場合に、ＬＢＡ変換テーブルを走査することなく状態ビットマップを復元することができる。
【０２１３】
また、ブロックデバイス制御部６１は、例えば複数のストレージデバイス２４または複数のパーティションを組み合わせて新たな論理アドレスを構築し、仮想的な１つのブロックデバイスを構成してもよい。また、情報処理装置１０は、複数のブロックデバイス制御部６１を有して、複数のブロックデバイスを併行に動作させてもよい。例えば、一方がログ構造書き込みをするブロックデバイスであり、他方が複数のストレージデバイス２４を仮想的に１つにしたブロックデバイスであってもよい。また、この場合、複数のブロックデバイスを併行に動作させる場合、ストレージ制御部４３は、それぞれのブロックデバイス制御部６１からリクエストを受けてストレージデバイス２４にアクセスする。
【０２１４】
また、本実施形態においては、ブロックデバイスの作成時にＬＢＡ変換テーブルを不揮発記憶部３１に記憶させて、以後、ブロックデバイスが解放されても、不揮発記憶部３１にＬＢＡ変換テーブルを記憶させ続ける例を示した。これに代えて、ブロックデバイス制御部６１は、ブロックデバイスを解放するときに、ＬＢＡ変換テーブルをストレージ部３３に書き戻してもよい。これにより、ブロックデバイスを作成しない場合、不揮発記憶部３１のブロックデバイス情報が記憶されていた領域に他の情報を記憶させることができる。本実施形態においては、ブロックデバイス制御部６１は、不揮発記憶管理部４６を介して不揮発記憶部３１にアクセスしていたが、ストレージ制御部４３から不揮発記憶管理部４６を介して不揮発記憶部３１にアクセスしてもよい。
【０２１５】
以上のように、第３の実施形態に係る情報処理装置１０によれば、不揮発記憶部３１にＬＢＡ変換テーブルを記憶し、ログ構造で高速な書き込みが可能なブロックデバイスを実現することができる。これにより、第３の実施形態に係る情報処理装置１０によれば、仮想ファイルシステムの管理情報およびデータ情報等をキャッシュして不揮発記憶部３１の空き容量が少なくなった場合も、ストレージ部３３に高速にデータを書き戻して、不揮発記憶部３１の空き容量を増やすことができる。
【０２１６】
なお、以上のような情報処理装置１０は、例えば、汎用のコンピュータ装置を基本ハードウェアとして用いることでも実現することが可能である。すなわち、ストレージ制御部４３、個別管理部４４、仮想管理部４５、不揮発記憶管理部４６および揮発記憶管理部４７は、コンピュータ装置に搭載されたプロセッサ２１にプログラムを実行させることにより実現することができる。このとき、情報処理装置１０は、上記のプログラムをコンピュータ装置にあらかじめインストールすることで実現してもよいし、ＣＤ−ＲＯＭなどの記憶媒体に記憶して、あるいはネットワークを介して上記のプログラムを配布して、このプログラムをコンピュータ装置に適宜インストールすることで実現してもよい。
【０２１７】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０２１８】
１０  情報処理装置
２１  プロセッサ
２２  不揮発性メモリ
２３  ネットワークインタフェース
２４  ストレージデバイス
２５  メモリバス
２６  Ｉ／Ｏバス
３１  不揮発記憶部
３２  揮発記憶部
３３  ストレージ部
３４  通信部
３５  アプリケーション
３６  オペレーティングシステム
４１  通信制御部
４２  プロトコル処理部
４３  ストレージ制御部
４４  個別管理部
４５  仮想管理部
４６  不揮発記憶管理部
４７  揮発記憶管理部
５１  揮発性メモリ
６１  ブロックデバイス制御部
【図１】
0006450598.tif 000002
【図２】
0006450598.tif 000003
【図３】
0006450598.tif 000004
【図４】
0006450598.tif 000005
【図５】
0006450598.tif 000006
【図６】
0006450598.tif 000007
【図７】
0006450598.tif 000008
【図８】
0006450598.tif 000009
【図９】
0006450598.tif 000010
【図１０】
0006450598.tif 000011
【図１１】
0006450598.tif 000012
【図１２】
0006450598.tif 000013
【図１３】
0006450598.tif 000014
【図１４】
0006450598.tif 000015
【図１５】
0006450598.tif 000016
【図１６】
0006450598.tif 000017
【図１７】
0006450598.tif 000018
【図１８】
0006450598.tif 000019
【図１９】
0006450598.tif 000020
【図２０】
0006450598.tif 000021
【図２１】
0006450598.tif 000022
【図２２】
0006450598.tif 000023
【図２３】
0006450598.tif 000024
【図２４】
0006450598.tif 000025
【図２５】
0006450598.tif 000026
【図２６】
0006450598.tif 000027
【図２７】
0006450598.tif 000028