(57)【特許請求の範囲】
【請求項１】
ホスト計算機とネットワークを介して接続されたストレージ装置が、前記ホスト計算機からのアクセス要求に基づいて、ディスク装置に格納されたファイルを提供するファイル提供方法であって、
前記ディスク装置には、複数の断片化されたデータと、前記複数のデータについてのメタデータと、が格納されており、
前記方法は、
前記ストレージ装置が、
前記複数のデータのうちの所定のデータ群を連結する際の当該所定のデータ群を構成する各データの連結順序を指定するシーケンス番号と、前記所定のデータ群を指定するストリーム番号と、前記ストリーム番号毎のアクセス権限と、を前記メタデータに設定し、
アクセス元のアクセス権限を満たしている前記ストリーム番号を選択し、
選択された前記ストリーム番号に対応するデータ群を構成する各データを前記ディスク装置から読み出し、
読み出された前記各データを、当該各データに設定された前記シーケンス番号に応じて連結し、
前記連結されて生成されたファイルをアクセス元に提供することを特徴とするファイル提供方法。
【請求項２】
前記ストレージ装置は、
基本となる第１のストリーム番号と、ストリーム番号の優先順序と、を設定し、
アクセス元のアクセス権限が前記第１のストリーム番号のアクセス権限を満たしているか否かを判定し、
その後、前記優先順序に従って、アクセス元のアクセス権限が各ストリーム番号のアクセス権限を満たしているか否かを判定し、
アクセス時間、アクセス元のクライアント、アクセス元プロセス名の少なくとも一つに基づいて、前記第１のストリーム番号を設定することを特徴とする請求項１に記載のファイル提供方法。
【請求項３】
前記ストレージ装置は、前記アクセス元によって指定された開始オフセット及び終了オフセット、又は、シーケンス番号に基づいて、新たなストリーム番号を設定することを特徴とする請求項１に記載のファイル提供方法。
【請求項４】
前記ストレージ装置は、前記アクセス元によって指定されたストリーム番号、開始オフセット及び終了オフセット、又は、シーケンス番号に基づいて、前記ストリーム番号を削除することを特徴とする請求項１に記載のファイル提供方法。
【請求項５】
前記ストレージ装置は、
基本となる第１のストリーム番号と、ストリーム番号の優先順序と、を設定し、
アクセス元から基本となる第１のストリーム番号の指示があるかを判定し、
前記第１のストリーム番号を、前記指示に係るストリーム番号に変更し、
アクセス元のアクセス権限が前記第１のストリーム番号のアクセス権限を満たしているか否かを判定し、
その後、前記優先順序に従って、アクセス元のアクセス権限が各ストリーム番号のアクセス権限を満たしているか否かを判定することを特徴とする請求項１に記載のファイル提供方法。
【請求項６】
前記ストレージ装置は、
前記アクセス元によって指定されたオフセット及び挿入データに基づいて、前記挿入データをファイルに挿入し、
前記オフセットの位置よりも後ろに格納されている既存データのシーケンス番号を、前記挿入データのデータ長に従って変更することを特徴とする請求項１に記載のファイル提供方法。
【請求項７】
前記ストレージ装置は、
前記アクセス元によって指定されたオフセット及びデータ長に基づいて、ファイル中のデータを切り詰め、
前記オフセットと前記データ長との和を算出し、前記算出された和の位置よりも後ろに格納されている既存データのシーケンス番号を、前記データ長に従って変更することを特徴とする請求項１に記載のファイル提供方法。
【請求項８】
ホスト計算機とネットワークを介して接続されたストレージ装置が、前記ホスト計算機からのアクセス要求に基づいて、ディスク装置に格納されたファイルを提供するファイル提供方法であって、
前記ディスク装置には、複数のファイルと、前記複数のファイルについてのメタファイルと、が格納されており、
前記ストレージ装置が、
前記複数のファイルのうちの所定のファイル群を連結する際の当該所定のファイル群を構成する各ファイルの連結順序を指定するシーケンス番号と、前記所定のファイル群を指定するストリーム番号と、前記ストリーム番号毎のアクセス権限と、を前記メタファイルに設定し、
アクセス元のアクセス権限を満たしている前記ストリーム番号を選択し、
選択された前記ストリーム番号に対応するファイル群を構成する各ファイルを前記ディスク装置から読み出し、
読み出された前記各ファイルを、当該各ファイルに設定された前記シーケンス番号に応じて連結し、
前記連結されて生成されたファイルをアクセス元に提供することを特徴とするファイル提供方法。
【請求項９】
ホスト計算機と通信するネットワークインターフェースと、ディスク装置と通信するディスクインターフェースと、制御部と、を備え、前記ホスト計算機からの要求に基づいて、前記ディスク装置に格納されたファイルデータを提供するストレージ装置であって、
前記ディスク装置には、複数の断片化されたデータと、前記複数のデータについてのメタデータと、が格納されており、
前記制御部は、
前記複数のデータのうちの所定のデータ群を連結する際の当該所定のデータ群を構成する各データの連結順序を指定するシーケンス番号と、前記所定のデータ群を指定するストリーム番号と、前記ストリーム番号毎のアクセス権限と、を前記メタデータに設定し、
アクセス元のアクセス権限を満たしている前記ストリーム番号を選択し、
選択された前記ストリーム番号に対応するデータ群を構成する各データを前記ディスク装置から読み出し、
読み出された前記各データを、当該各データに設定された前記シーケンス番号に応じて連結し、
前記連結された生成されたファイルをアクセス元に提供することを特徴とするストレージ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アクセス権限に応じてファイルのビューを細かく変化できるファイルシステムを提供するファイル提供方法、ストレージ装置及びファイル提供プログラムに関するものである。
【背景技術】
【０００２】
従来のファイルシステムやファイルサーバによるアクセス管理方法は、各ファイルにユーザのアクセス権限を設定し、そのアクセス権限に応じてファイルのコンテンツ全体のアクセスの可否を管理する。
【０００３】
ファイルのアクセス方法には様々な種類がある。例えば、従来のＵＮＩＸ(登録商標。以下同じ）の「パーミッション」によるアクセス管理がある。パーミッションは、読み込み（Ｒ）、書き込み（Ｗ）、実行（Ｘ）の三種類のアクセス方法のそれぞれに、許可／拒否を設定する。さらに各アクセス方法に、ユーザアカウント／グループアカウント／その他アカウントを関連付ける。このようにすることによって、ユーザのアクセスが管理される。
【０００４】
また、アクセス方法をより細分化したアクセス管理方法に「ＡＣＬ」（アクセスコントロールリスト）がある。ＡＣＬには様々な種類がある。主なＡＣＬには、ＰＯＳＩＸ  ＡＣＬ、ＮＴＦＳ  ＡＣＬ、ＮＦＳ  ＡＣＬがある。例えば、ＮＦＳ  ＡＣＬは、書き込み方法に、コンテンツの上書き（ＷＲＩＴＥ＿ＤＡＴＡ）、コンテンツの追記書き（ＡＰＰＥＮＤ＿ＤＡＴＡ）、名前つき属性の書き込み（ＷＲＩＴＥ＿ＮＡＭＥＤ＿ＡＴＴＲＳ）、基本属性の書き込み（ＷＲＩＴＥ＿ＡＴＴＲＩＢＵＴＥＳ）、ＡＣＬ情報の書き込み（ＷＲＩＴＥ＿ＡＣＬ）、所有者の権限変更（ＷＲＩＴＥ＿ＯＷＮＥＲ）の６つの方法を持ち、アクセス権限を細分化して管理できる（非特許文献１参照。）。
【０００５】
また、前述の方法以外に、ＷＯＲＭ（Ｗｒｉｔｅ  Ｏｎｃｅ  Ｒｅａｄ  Ｍａｎｙ）がある。ＷＯＲＭは、一度書き込みを実行したらその後は二度と編集できない権限である。現在ＷＯＲＭは標準化されておらず、各社でプロプライエタリとなっている。
【０００６】
また、アクセス権限を、コンテンツ全体ではなくコンテンツの部分的な範囲に粒度を細分化する方法がある。例えば、文章をセキュリティーレベル単位で領域を分割し、領域毎にパスワードによって保護する文章内領域アクセス制御方式が開示されている（特許文献１参照。）。
【０００７】
また、ＸＭＬのような構造化言語を用いて、アクセス権限を細かく管理したりアクセス権限によってファイルの見せ方を変える方法が開示されている。具体的には、構造化文書データベースからその論理構造に基づき所望の構成要素を検索するための検索要求文を用いて検索した結果得られた複数の構成要素を含む検索結果文書を表示した表示画面上の任意の表示領域が指定されたとき、その指定された表示領域に表示されているデータに対応する検索結果文書中の第１の構成要素を特定し、この第１の構成要素に関連付けられた検索要求文中の第２の記述部分の記述に基づき、構造化文書データベース中の第１の構成要素に対応する第２の構成要素を検索して、この第２の構成要素に対し、少なくとも該第２の構成要素にアクセスが制限されるユーザの範囲を定めてアクセス権限を設定する（特許文献２参照。）。
【０００８】
また、ファイルの仮想化という意味では、ファイルを細かく分割し、それを一つのファイルと見せるためのメタファイルを記述する（特許文献３参照。）。具体的には、一つの論理ファイルを複数のＩ／Ｏノード上の二次記憶装置に分割して格納し、ファイルの入出力を並行して行う。この論理ファイルを表すメタファイルを用意し、これによって論理ファイルと各Ｉ／Ｏノード上に格納されているファイルの実体とを結び付ける。このメタファイルを、全ての計算ノードから参照可能な二次記憶装置上に設ける。論理ファイルの生成時に、分割する数、分割するデータ長を指定することができるようにする。
【０００９】
また、別のファイル仮想化方法としては、ＨＰ−ＵＸの「ｃｄｆ」（ｃｏｎｔｅｘｔ  ｄｅｐｅｎｄｅｎｔ  ｆｉｌｅｓ）がある（非特許文献２参照。）。これによると、コンテキスト情報として登録された文字列とｃｄｆとして生成されたディレクトリ下にあるファイルのファイル名とがマッチしたものを実体として選択することによって、ファイルの仮想化を実現している。
【００１０】
なお、データベースにもアクセス権限によってテーブルの見せ方を変えることができるビューという機能がある。
【特許文献１】特開平１−２４３１７２号公報
【特許文献２】特開２００３−２８１１４９号公報
【特許文献３】特開平１０−２１４２５７号公報
【非特許文献１】http://www.ietf.org/rfc/rfc3530.txt?number=3530
【非特許文献２】http://www.informatik.uni-frankfurt.de/doc/man/hpux/cdf.4.html
【発明の開示】
【発明が解決しようとする課題】
【００１１】
個人情報保護法の制定や情報漏えいによる企業ブランドイメージ失墜などの社会的背景から情報セキュリティーに関する取り組みが重要となっている。一方、積極的に情報発信や情報共有をして企業を活性化させようという試みもある。これらはトレードオフの関係にあり、効果的な情報共有を実現しつつ機密情報へのアクセスを部外者から遮断するための取り組みが必要となる。
【００１２】
従来のファイルシステムでは、前述のパーミッションやＡＣＬによる管理方法を用いることによって、ファイル全体へのアクセスの可否を設定する。すなわち、アクセス制限はファイル単位程度の粒度である。従って、ファイルの中身（コンテンツ）の一部を部分的に公開（アクセス許可）したい場合には、オリジナルとは異なるファイルを作成する必要がある。すなわち、オリジナルのコンテンツを元に、情報を劣化させたコンテンツのファイルを作成し、それを公開する。この場合、コンテンツのメンテナンス性が非常に悪化してしまう。すなわち、オリジナルコンテンツのファイルに修正を加えた場合、情報を劣化させたコンテンツのファイルにも同様の修正を加える必要がある。また、ファイル数が公開レベルに応じて増えるため、ファイルの管理コストも増大する。
【００１３】
また、映像コンテンツにおいて、視聴者毎に異なった映像を提供したいという要求がある。この場合は、ファイルを分割して、視聴者毎に適切な分割ファイルを選択してそれを結合することによって実現できる。ただしこの場合は、上位のアプリケーションのプログラムやスクリプトによって、分割されたファイルをどのように選択するかを決定する必要がある。また、ＸＭＬ等の構造化言語によってファイルデータ内でのアクセス制限を実現する方式では、上位アプリケーションがＸＭＬなどの構造化言語を理解する必要がある。そのため、従来環境からの移行性はよくない。
【００１４】
このように、アクセス権限に応じてコンテンツのビューを部分的又は全体的に変える方法は、ファイルの管理コストが増大する。また、コンテンツのメンテナンス性が低下する。また従来ファイルシステム環境からの移行性がよくないといった課題があった。
【００１５】
この問題について具体的に説明する。
【００１６】
図２０及び図２１は、従来のファイルシステムによるファイルの提供方法の一例を示す説明図である。
【００１７】
図２０は、三種類のテキストファイルの例を示している。各々のファイルの内容は類似しているが一部分が異なっている。何れも今期の予算に関する内容である。ファイルＡは予算の具体的な金額を含む。ファイルＢは予算の具体的な金額ではなく、先記からの増減のみを含む。また、ファイルＣは予算の内容は含まず、■でマスクされる。この例の場合、「○○部の今期の予算は、」という部分と「円です。」という部分は各ファイルで共通である。ファイルＢの内容はファイルＡの情報を劣化させたものである。同様にファイルＣの内容はファイルＡ及びＢの情報をさらに劣化させたものである。
【００１８】
図２１は、図２０に示す３つのファイルを従来のファイルシステムに格納したときのファイルシステムボリュームの構造を示す。
【００１９】
メタデータ３０１ａはファイルＡに関する情報を示す。なお、メタデータは、各種属性を格納する領域、及び、どのファイルシステムブロックにデータが格納されているかを示す領域（エクステント）を含む。このエクステントは、先頭オフセット、ブロック数、ブロック番号を含む。
【００２０】
ファイルＡは、ファイルのデータ容量が少ないので一つのファイルシステムブロックに格納が可能である。そのため、ブロック数が１に設定されている。ブロック番号は０ｘ１２２を指しており、ファイルＡの実体であるユーザデータは、先頭オフセット０からブロック番号０ｘ１２２に格納されていることを示す。ブロック番号０ｘ１２２のユーザデータ３０２ａには「○○部の今期の予算は、１００Ｍ円です。」という文字列が格納されている。
【００２１】
同様に、ファイルＢは、メタデータ３０１ｂの含む内容によって、ユーザデータ３０２ｂが示されている。同様に、ファイルＣは、メタデータ３０１ｃの含む内容によって、ユーザデータ３０２ｃが示されている。
【００２２】
なお、メタデータ３０１ａ、３０１ｂ、３０１ｃの各種属性は、そのファイルのアクセス権限を含む。例えば、ファイルＡには会社役員に対応するユーザ又はグループのみアクセス可能である。また、ファイルＢには管理職に対応するユーザ又はグループのみアクセス可能である。また、ファイルＣには社員に対応するユーザ又はグループのみアクセス可能に設定する。
【００２３】
このように、従来のファイルシステムでは、ファイルの内容が類似していたとしても、アクセス権限毎にファイルの内容を異ならせるためには、ファイルの内容を異ならせる必要があった。この例では、三つのデータを作成して異なるファイルとして格納し、それぞれに適切なアクセス権限の情報を付与する。そのため、アクセス権限毎に異なるファイルを格納する必要がある。
【００２４】
本発明はこのような問題点に鑑みてなされたものであり、アクセス権限に応じてファイルのビューを細かく変化できるファイルシステムを提供するファイル提供方法、ストレージ装置及びファイル提供プログラムを提供することを目的とする。
【課題を解決するための手段】
【００２５】
本発明は、ホスト計算機とネットワークを介して接続されたストレージ装置が、前記ホスト計算機からのアクセス要求に基づいて、ディスク装置に格納されたファイルを提供するファイル提供方法であって、前記ディスク装置には、複数の断片化されたデータと、前記複数のデータについてのメタデータと、が格納されており、前記方法は、前記ストレージ装置が、前記複数のデータのうちの所定のデータ群を連結する際の当該所定のデータ群を構成する各データの連結順序を指定するシーケンス番号と、前記所定のデータ群を指定するストリーム番号と、前記ストリーム番号毎のアクセス権限と、を前記メタデータとして設定し、アクセス元のアクセス権限を満たしている前記ストリーム番号を選択し、選択された前記ストリーム番号に対応するデータ群を構成する各データを前記ディスク装置から読み出し、読み出された前記各データを、当該各データに設定された前記シーケンス番号に応じて連結し、前記連結されて生成されたファイルをアクセス元に提供することを特徴とする。
【発明の効果】
【００２６】
本発明によると、高度なアクセス管理と柔軟な情報共有が両立できる。また、ファイルの管理コストを低減し、コンテンツのメンテナンス性を向上する。さらに、従来のファイルシステム環境からの移行性を保ったまま、ユーザに応じたファイルビューを提供することができる。
【発明を実施するための最良の形態】
【００２７】
以下に、本発明の実施の形態を図面を参照して説明する。
【００２８】
図１は、本発明の第１の実施の形態の計算機システムによって実現されるファイルシステムの概要図である。
【００２９】
ファイルシステム１０１は、ホスト計算機１０からの要求を受けてファイルシステムボリューム１０９に格納されているファイルへのアクセスを提供する。
【００３０】
ファイルシステム１０１は、要求受付部１１０、要求処理部１１１、ストリーム管理部１０２、カレントオフセット１０７、Ｉ／Ｏ発行部１０８を含む。
【００３１】
ファイルシステムボリューム１０９は、ユーザデータ４０５及びメタデータ４０１を格納する。
【００３２】
要求受付部１１０は、ホスト計算機１０から要求を受信すると、その内容を解析して要求処理部１１１にシステムコールを発行する。要求処理部１１１は、要求受付部１１０からのシステムコールを処理する。要求処理部１１１の処理するシステムコールは、具体的には、従来のファイルシステムが備え、本発明によって改良されたシステムコールである「ｏｐｅｎ」、「ｒｅａｄ」、「ｗｒｉｔｅ」、「ｓｅｅｋ」と、本実施の形態のファイルシステムが備える「ｉｎｓｅｒｔ」、「ｃｕｔ」、「ｓｅｔｒａｃｌ」、「ｇｅｔｒａｃｌ」、「ｓｗｉｔｃｈ」、「ａｔｔａｃｈ＿ｓｔｒｅａｍ」、「ｄｅｔａｃｈ＿ｓｔｒｅａｍ」とを含む。これらのシステムコールの処理の詳細は後述する。
【００３３】
なお、この他にも従来のファイルシステムでサポートされているｃｌｏｓｅ等のシステムコール等をサポートするが、本発明の概要には関わらないため省略する。
【００３４】
ストリーム管理部１０２及びＩ／Ｏ処理部１０８は、ファイルシステムボリューム１０９とのインターフェースである。
【００３５】
カレントオフセット１０７は、現在ファイルのどの位置に対してアクセスするかを示す識別子である。これはファイルシステムの基本機能であるファイルディスクリプタによって設定される。カレントオフセット１０７はファイルのｏｐｅｎシステムコール単位で格納される。
【００３６】
なお、本実施の形態では、ファイルのｏｐｅｎシステムコール単位で格納する情報をさらに持つ。具体的には、ストリーム管理部１０２に、どのストリーム番号からアクセス権限をチェックするかを指定するデフォルトストリーム番号１０３と、どのストリーム番号に対して現在アクセスしようとしているかを示すカレントストリーム番号１０４と、どのシーケンス番号とそのどのオフセットに対し現在アクセスしようとしているかを示すカレントシーケンス番号１０５とカレントシーケンスオフセット１０６を含む。
【００３７】
ファイルシステムボリューム１０９は、ファイルシステム１０１が操作するデータが格納されている。このデータは、メタデータ４０１及びユーザデータ４０５を含む。
【００３８】
メタデータ４０１は、ファイルの管理情報を含む。ユーザデータ４０５は、メタデータ４０１によって示されるファイルの実体である。なお、図１では簡単のためファイルシステムボリューム１０９に一つのファイルだけが格納されている状態を示す。なお、実際には複数のファイルを格納することができる。
【００３９】
図２は、ファイルシステム１０１を実現する計算機システムの構成ブロック図である。
【００４０】
ストレージ装置２００７は外部ネットワーク２００８を介してホスト計算機１０と接続される。
【００４１】
ストレージ装置２００７は、プロセッサ２００１と、Ｉ／Ｏ制御部２００３と、主記憶２００５と、ネットワークコントローラ２００２と、ディスクコントローラ２００４と、補助記憶２００６とを含む。これら各構成は一又は複数含まれていてもよい。
【００４２】
ネットワークコントローラ２００２は、外部ネットワーク２００８を介してホスト計算機１０とデータを送受信する。
【００４３】
主記憶２００５は各種プログラムを保持する。このプログラムをプロセッサ２００１が読み込んで実行することによって、プログラムに規定された処理が実行される。より具体的には、プロセッサ２００１がプログラムを実行することによって、Ｉ／Ｏ発行部１０８の各処理が実現される。
【００４４】
また、主記憶２００５は、要求受付部１１０、要求処理部１１１、ストリーム管理部１０２及びＩ／Ｏ発行部１０８によって処理される各種情報を保持する。例えば、カレントオフセット１０７が格納される。また、主記憶２００５は、ファイルシステムボリューム１０９のデータのキャッシュメモリとして機能する。
【００４５】
Ｉ／Ｏ制御部２００３は、ストレージ装置２００７の各部の送受信するデータを仲介する。ディスクコントローラ２００４は、補助記憶２００６に格納されたデータを読み書きする。
【００４６】
補助記憶２００６は、ファイルシステムボリューム１０９を保持する。補助記憶２００６は、例えば一又は複数の磁気ディスク装置を含み、この一又は複数の磁気ディスク装置上にファイルシステムボリューム１０９が構成される。
【００４７】
次に、本実施の形態のファイルシステムについて説明する。
【００４８】
図３は、ファイルシステムボリューム１０９の具体的な内容の説明図である。
【００４９】
この図は、前述した図２０に示したコンテンツを、本実施の形態のファイルシステムによって提供する場合の管理構造を示す。
【００５０】
本実施の形態では、クライアントに提供するファイルを「ストリーム」という単位で管理する。ストリームとは、ファイルをいくつかのブロック毎に分割し、それを所定の順序に従って連結したものである。このストリームに関する情報は、メタデータ４０１に格納される。
【００５１】
メタデータ４０１は、各種属性４０１ａ、範囲指定アクセス制御４０２、ストリームアクセスプライオリティ４０３、デフォルトストリームルール４０４及びエクステント４２０を含む。
【００５２】
各種情報４０１ａは、従来のファイルシステムと同様に、ファイル単位のアクセス権限や、ファイル名、ファイル長さ等を保持する。
【００５３】
範囲限定アクセス制御４０２は、どのストリームのどの範囲にどのユーザのアクセスを許可するかを管理するための情報を保持する。
【００５４】
ストリームアクセスプライオリティ４０３は、アクセス権限を確認する場合に用いられる情報を保持する。具体的には、ファイルシステム１０１は、アクセス権限をチェックする際に、このストリームアクセスプライオリティ４０３を参照して、どのストリーム番号から権限をチェックするかを決定する。
【００５５】
デフォルトストリームルール４０４は、ストリームアクセスプライオリティ４０３によって優先して権限のチェックが実行されるデフォルトストリームを設定するための情報を保持する。
【００５６】
エクステント４２０は、そのメタデータ４０１によって示されるファイルの構造に関する情報を保持する。具体的には、エクステント４２０は、ファイルのストリーム番号、シーケンス番号、サブシーケンス番号、バイト数及びブロック番号を含む。シーケンス番号及びサブシーケンス番号は、メタデータ４０１によって示されるファイルの中のどの位置のデータであるかを相対的に示す指標である。
【００５７】
このメタデータ４０１によって、次のようにファイルが示される。
【００５８】
ストリーム番号が０のものをメインストリームと呼ぶ。ストリーム番号が１以上であるものをサブストリームと呼ぶ。メインストリームは、シーケンス番号及びサブシーケンス番号によって示されるデータの主となる構造を示す。サブストリームは、メインストリームのうちサブストリームに含まれる同一のシーケンス番号の代替となる。
【００５９】
より具体的には、［ストリーム番号−シーケンス番号−サブシーケンス番号］の組によって一つのデータが示される。そして、ストリーム番号が０のデータをシーケンス番号順に連結したものが、メインストリームに対応するビューとなる。
【００６０】
図３の例では、［０−１−１］と、［０−２−１］と、［０−３−１］とのデータを連結したものが、メインストリームに対応するビューとなる。これらは、それぞれブロック番号０ｘｆ０１、ブロック番号０ｘｆ０２及びブロック番号０ｘｆ１１のデータに対応する。このデータを連結したものが、図２０のファイルＡに対応するビューとなる。
【００６１】
また、ストリーム番号が１の場合は、メインストリームと同じシーケンス番号であるシーケンス番号２とサブシーケンス番号１とによって示されるデータが、メインストリームの代替となる。従って、［０−１−１］と、［１−２−１］と、［０−３−１］と、のデータを連結したものが、サブストリーム１に対応するビューとなる。これは図２０のファイルＢに対応するビューとなる。
【００６２】
同様に、［０−１−１］と、［２−２−１］と、［０−３−１］と、のデータを連結したものが、サブストリーム２に対応するビューとなる。これは図２０のファイルＣに対応するビューとなる。
【００６３】
このようにすることによって、図２０に示す三つのコンテンツは、ファイルとしては一つになる。このファイルは、メタデータ４０１と、断片化されたユーザデータ４０５ａ、４０５ｂ、４０５ｃ、４０５ｄ、４０５ｅとから構成される。
【００６４】
図４は、範囲限定アクセス制御４０２の詳細の説明図である。
【００６５】
範囲限定アクセス制御４０２は、ＩＤ種別４０２１、ＩＤ番号４０２２、ストリーム番号４０２３、シーケンス番号４０２４及び権限種類４０２５の各フィールドを含む一又は複数のエントリから構成されるリストである。
【００６６】
ＩＤ種別４０２１は、ＩＤ番号フィールドの値がユーザＩＤのものかグループＩＤのものかを示す識別子である。
【００６７】
ＩＤ番号４０２２は、ユーザやグループ毎に割り振られたユニークな番号であり、その値でどのユーザ又はどのグループに対するアクセス制御なのかを示す。なお、ＩＤ番号４０２２は、番号ではなくユーザ名や、グループ名に相当する文字列等の識別子を格納してもよい。
【００６８】
ストリーム番号４０２３及びシーケンス番号４０２４は、そのエントリが、どの範囲、すなわち、どのストリーム番号とどのシーケンス番号とに対するアクセス制御であるかを示す。なお、範囲を示すために、シーケンス番号ではなくファイルオフセットを格納してもよい。
【００６９】
権限種類４０２５は、読み込み権限（Ｒ）や書き込み権限（Ｗ）等の権限の種類を示す識別子である。図４では簡単のため二種類の権限しか示していないが、これ以外の種々の権限、例えばＷＯＲＭ権限等を格納してもよい。
【００７０】
ファイルシステム１０１は、この範囲限定アクセス制御４０２を参照することによって、対応するストリームのアクセス権限を取得できる。
【００７１】
図５は、ストリームアクセスプライオリティ４０３の詳細の説明図である。
【００７２】
ストリームアクセスプライオリティ４０３は、エクステント４２０に示されるストリームを参照する際に、アクセス権限をチェックする順位を示す。
【００７３】
図５の例では、ファイルシステム１０１は、ストリーム０、ストリーム１、ストリーム２の順でアクセス権限をチェックする。
【００７４】
図６は、デフォルトストリームルール４０４の詳細の説明図である。
【００７５】
デフォルトストリームルール４０４は、条件４０４１とデフォルトストリーム４０４２とを含む。
【００７６】
ファイルシステム１０１は、このデフォルトストリームルール４０４を参照して、条件４０４１に合致する場合は、デフォルトストリーム４０４２に示されたストリームをアクセス対象ストリームに設定する。
【００７７】
図６の例において、第一番目のエントリは、「client1」というクライアント名からのアクセスがあった場合は、デフォルトストリームを「１」に設定する。また、第二番目のエントリは、アクセス時間が１０時〜２２時の間であった場合は、デフォルトストリームを「２」に設定する。また、第三番目のエントリは、「ｓｍｂｄ」というプロセス名からのアクセスがあった場合は、デフォルトストリームを「２」に設定する。
【００７８】
次に、本実施の形態のファイルシステム１０１が提供するシステムコールを説明する。
【００７９】
図７は、ａｔｔａｃｈ＿ｓｔｒｅａｍシステムコールの処理のフローチャートである。
【００８０】
ａｔｔａｃｈ＿ｓｔｒｅａｍシステムコールは、既存のファイルに新しいストリームを追加（アタッチ）する。ファイルにストリームを追加することによって、アクセス権限に対応するビューが設定可能となる。
【００８１】
ａｔｔａｃｈ＿ｓｔｒｅａｍシステムコールは、開始オフセット及び終了オフセットを引数にとる。正常終了の場合は、アタッチできたストリーム番号が戻り値となる。異常終了の場合は、負値のエラー番号が戻り値となる。
【００８２】
ホスト計算機１０等からａｔｔａｃｈ＿ｓｔｒｅａｍ要求が送信されると、要求受付部１１０がこの要求を受信して、要求処理部１１１にａｔｔａｃｈ＿ｓｔｒｅａｍシステムコールを発行する。要求処理部１１１が、このａｔｔａｃｈ＿ｓｔｒｅａｍシステムコールを処理する（Ｓ８０１）。
【００８３】
まず、要求処理部１１１は、引数によって指定された開始オフセットと終了オフセットとの差を算出し、その差が少なくとも１バイト以上離れているか否かを判定する（Ｓ８０２）。
【００８４】
開始オフセットと終了オフセットとの差が０バイト又は負値である場合は、ストリームを追加できない。そのため、Ｓ８０５に処理を移し、要求受付部１１０にエラーを発行して処理を終了する。
【００８５】
開始オフセットと終了オフセットとの差が少なくとも１バイト以上離れている場合は、要求処理部１１１は、アタッチしようとしている開始オフセットの直後のストリーム数をチェックする（Ｓ８０３）。
【００８６】
ストリーム数が２以上である場合は、Ｓ８０４に処理を移す。ストリーム数が１の場合はＳ８０６に処理を移す。
【００８７】
Ｓ８０４では、要求処理部１１１は、引数によって指定された開始オフセット及び終了オフセットが既にアタッチされている他のストリームのアタッチ開始ポイント及びアタッチ終了ポイントと一致しているかをチェックする。
【００８８】
既存のアタッチ開始ポイント及びアタッチ終了ポイントと一致していない場合は、Ｓ８０５に処理を移してエラーを要求受付部１１０に発行して処理を終了する。既存のアタッチ開始ポイント及びアタッチ終了ポイントと一致する場合は、Ｓ８０８に処理を移す。
【００８９】
Ｓ８０６では、要求処理部１１１は、引数の終了オフセットが次の他ストリームのアタッチ開始ポイントを超えたか否かをチェックする。
【００９０】
次の他のストリームのアタッチ開始ポイントを超えている場合は、Ｓ８０５に処理を移してエラーを要求受付部１１０に発行して処理を終了する。次の他のストリームのアタッチ開始ポイントを超えていない場合はＳ８０７に処理を移す。
【００９１】
以上の処理によって、ストリームをまたがったアタッチをエラーとする。また、ストリームの開始ポイント及び終了ポイントに一致していないアタッチもエラーとする。
【００９２】
Ｓ８０７では、要求処理部１１１は、メインストリーム、すなわち、ストリーム番号が０であるデータに対して次のような処理を実行する。
【００９３】
まず、要求処理部１１１は、メインストリームを、（１）開始オフセット以前の領域、（２）開始オフセットから終了オフセットまでの領域、（３）終了オフセット以降の領域、の三つにブロックを分割する。（１）及び（３）は、既にブロックが分割されている状況もあるので、その場合には領域は四つ以上に分割される。そして、分割されたそれぞれの領域に適切なシーケンス番号を割り振る。この処理によって（２）に新しくシーケンス番号が割り当てられる。そのため、（３）の領域に対するシーケンス番号のずれを補正する。そして、これらの変更をメタデータ４０１に反映する。そして、Ｓ８０８に処理を移す。
【００９４】
Ｓ８０８では、要求処理部１１１は、該当の領域に対する最も若い（小さい）ストリーム番号を取得する。そして、エクステント４２０にエントリを追加する。このエントリは、取得したストリーム番号、適切なシーケンス番号及び適切なシーケンス番号を含む。さらに、サブシーケンス番号が１、バイト数が０である。
【００９５】
次に、Ｓ８０９では、要求処理部１１１は、ストリーム番号を戻り値として戻し、ａｔｔａｃｈ＿ｓｔｒｅａｍシステムコールを終了する。
【００９６】
図８は、ｄｅｔａｃｈ＿ｓｔｒｅａｍシステムコールの処理のフローチャートである。
【００９７】
ｄｅｔａｃｈ＿ｓｔｒｅａｍシステムコールは、ファイルに設定されたストリームを削除する。
【００９８】
ｄｅｔａｃｈ＿ｓｔｒｅａｍシステムコールは、ストリーム番号及びシーケンス番号を引数にとる。正常終了の場合は、アタッチできたストリーム番号が戻り値となる。異常終了の場合は、負値のエラー番号が戻り値となる。なお、シーケンス番号の代わりに開始オフセット及び終了オフセット引数としてもよい。
【００９９】
ホスト計算機１０等からｄｅｔａｃｈ＿ｓｔｒｅａｍ要求が送信されると、要求受付部１１０がこの要求を受信して、要求処理部１１１にｄｅｔａｃｈ＿ｓｔｒｅａｍシステムコールを発行する。要求処理部１１１が、このｄｅｔａｃｈ＿ｓｔｒｅａｍシステムコールを処理する（Ｓ９０１）。
【０１００】
まず、要求処理部１１１は、引数によって与えられたストリーム番号とシーケンス番号との組み合わせが、メタデータ４０１のエクステント４２０のエントリに存在するか否かをチェックする（Ｓ９０２）。
【０１０１】
エクステント４２０に当該エントリが存在しない場合はＳ９０３に処理を移し、エラーを要求受付部１１０に発行して処理を終了する。
【０１０２】
エクステント４２０に当該エントリが存在する場合は、Ｓ９０４に処理を移し、該当するシーケンス番号に対応する領域のデータブロックを開放する。
【０１０３】
次に、要求処理部１１１は、該当するシーケンス番号に対応する範囲限定アクセス制御４０２のエントリを削除する（Ｓ９０５）。
【０１０４】
次に、要求処理部１１１は、該当のシーケンス番号のエクステントエントリを削除する（Ｓ９０６）。
【０１０５】
次に、要求処理部１１１は、エントリ削除後の該当の領域のストリーム数が１であるか否かをチェックする（Ｓ９０７）。
【０１０６】
ストリーム数が１でない、すなわち２以上である場合は、処理を終了する（Ｓ９０９）。ストリーム数が１である場合は、Ｓ９０８に処理を移し、終了オフセット以降の領域に対するシーケンス番号のずれを補正する。すなわち、シーケンス番号が一つなくなった分のシーケンス番号を補正する。そしてこの変更をメタデータ４０１に反映する。ここでは、エクステント４２０と範囲限定アクセス制御４０２の両方に対して反映する。反映が終了すると、処理を終了する（Ｓ９０９）。
【０１０７】
図９は、ｓｈｏｗ＿ｓｔｒｅａｍシステムコールの処理のフローチャートである。
【０１０８】
ｓｈｏｗ＿ｓｔｒｅａｍシステムコールは、現在ファイルに設定されているストリームをクライアントに表示する。
【０１０９】
ホスト計算機１０等からｓｈｏｗ＿ｓｔｒｅａｍ要求が送信されると、要求受付部１１０がこの要求を受信して、要求処理部１１１にｓｈｏｗ＿ｓｔｒｅａｍシステムコールを発行する。要求処理部１１１が、このｓｈｏｗ＿ｓｔｒｅａｍシステムコールを処理する（Ｓ１００１）。
【０１１０】
要求処理部１１１は、ｓｈｏｗ＿ｓｔｒｅａｍシステムコールを受けると、ストリーム番号、シーケンス番号、そのシーケンス番号のアタッチ先のメインストリームの開始オフセット及び終了オフセットを、全ての組み合わせについて戻り値として返す（Ｓ１００２）。そして、処理を終了する（Ｓ１００３）。
【０１１１】
図１０は、ｓｅｔｒａｃｌシステムコールの処理のフローチャートである。
【０１１２】
ｓｅｔｒａｃｌシステムコールは、範囲限定アクセス制御４０２に新しい範囲限定アクセス制御情報エントリを追加する。
【０１１３】
ｓｅｔｒａｃｌシステムコールは、ストリーム番号、シーケンス番号、ユーザ若しくはグループＩＤ及び設定したいアクセス権限を引数にとる。正常終了の場合は、０が戻り値となる。異常終了の場合は、負値のエラー番号が戻り値となる。
【０１１４】
なお、シーケンス番号の代わりに開始オフセット及び終了オフセットを引数としてもよい。
【０１１５】
ホスト計算機１０等からｓｅｔｒａｃｌ要求が送信されると、要求受付部１１０がこの要求を受信して、要求処理部１１１にｓｅｔｒａｃｌシステムコールを発行する。要求処理部１１１が、このｓｅｔｒａｃｌシステムコールを処理する（Ｓ１１０１）。
【０１１６】
まず、要求処理部１１１は、引数によって指示されたストリーム番号とシーケンス番号との組み合わせが、メタデータ４０１のエクステント４２０に存在するか否かをチェックする（Ｓ１１０２）。
【０１１７】
エクステント４２０に当該ストリームが存在しない場合は、Ｓ１１０３に処理を移し、エラーを要求受付部１１０に発行して処理を終了する。
【０１１８】
エクステント４２０に当該ストリームが存在する場合は、Ｓ１１０４に処理を移し、引数で与えられた内容に従って、範囲限定アクセス制御４０２に新たに範囲限定アクセス制御情報のエントリを追加する。そして、処理を終了する（Ｓ１１０５）。
【０１１９】
図１１は、ｇｅｒａｃｌシステムコールの処理のフローチャートである。
【０１２０】
ｇｅｔｒａｒｃシステムコールは、範囲限定アクセス制御４０２のエントリの内容を出力する。
【０１２１】
ホスト計算機１０等からｇｅｔｒａｃｌ要求が送信されると、要求受付部１１０がこの要求を受信して、要求処理部１１１にｇｅｔｒａｃｌシステムコールを発行する。要求処理部１１１が、このｇｅｔｒａｃｌシステムコールを処理する（Ｓ１２０１）。
【０１２２】
要求処理部１１１は、ｇｅｔｒａｃｌシステムコールを受けると範囲限定アクセス制御４０２の全てのエントリの内容を、戻り値として返す（Ｓ１２０２）。そして、処理を終了する（Ｓ１２０３）。
【０１２３】
図１２は、ｏｐｅｎシステムコールの処理を示すフローチャートである。
【０１２４】
ｏｐｅｎシステムコールは、ファイルにアクセスする前段階の処理であり、そのファイルをアクセス可能状態に設定する。
【０１２５】
本実施形態のｏｐｅｎシステムコールは、従来のファイルシステムに用いられるｏｐｅｎシステムコールに、アクセス権限に関する処理を追加したものである。そのため、従来のファイルシステムに用いられるｏｐｅｎシステムコールと互換性がある。
【０１２６】
ｏｐｅｎシステムコールは、従来にもあったパス名、フラグに加え、デフォルトストリーム番号を引数にとる。ファイルディスクリプタ及びカレントストリーム番号が戻り値となる。
【０１２７】
ホスト計算機１０等からｏｐｅｎ要求が送信されると、要求受付部１１０がこの要求を受信して、要求処理部１１１にｏｐｅｎシステムコールを発行する。要求処理部１１１が、このｏｐｅｎシステムコールを処理する（Ｓ１６０１）。
【０１２８】
まず、要求処理部１１１は、従来のｏｐｅｎ処理を実行する。具体的には、アクセス権限チェック、パス名検索、ｏｐｅｎ毎に用意する必要のある構造体やファイルディスクリプタの生成などを実行する（Ｓ１６０２）。
【０１２９】
次に、要求処理部１１１は、引数にデフォルトストリーム番号が指定されているか否をチェックする（Ｓ１６０３）。
【０１３０】
デフォルトストリーム番号が指定されている場合は、Ｓ１６０４に処理を移し、引数に指定されたストリーム番号をデフォルトストリームに設定する。そして、Ｓ１６０８に処理を移す。
【０１３１】
引数にデフォルトストリーム番号が指定されていない場合は、Ｓ１６０５に処理を移し、メタデータ４０１のデフォルトストリームルール４０４にルールの指定があるか否かをチェックする。
【０１３２】
ルールの指定がある場合は、Ｓ１６０６に処理を移す。Ｓ１６０６では、要求処理部１１１は、デフォルトストリームルール４０４に指定された条件をチェックする。
【０１３３】
図６に示したデフォルトストリームルール４０４の例では、特定のクライアント（ｃｌｉｅｎｔ１）からのアクセスである場合はデフォルトストリームを１に設定する。また、ある特定の時間（１０時〜２２時）でのアクセスである場合はデフォルトストリームを２に設定する。また、ある特定のプロセス名（ｓｍｂｄ）からのアクセスである場合はデフォルトストリームを２に設定する。
【０１３４】
一方、ルールの指定がない場合は、Ｓ１６０７に処理を移す。Ｓ１６０７では、要求処理部１１１は、デフォルトストリーム番号を０に設定する。
【０１３５】
以上の処理によって、要求処理部１１１は、デフォルトストリームルール４０４の条件に合致した場合は、その条件に指定されたデフォルトストリームを設定する。条件に合致するものがない場合は、デフォルトストリーム番号を０に設定する。すなわち、ｏｐｅｎシステムコールに係るファイルは、何れかのデフォルトストリーム番号が設定される。
【０１３６】
次に、要求処理部１１１は、デフォルトストリーム、ストリームアクセスプライオリティの順に、オフセット０でのアクセス許可があるかを順次チェックする（Ｓ１６０８）。そして、アクセス許可のあるストリームがあるかを判定する（Ｓ１６０９）。
【０１３７】
アクセス許可のあるストリームがある場合はＳ１６１１に処理を移し、アクセス許可のあるストリームがない場合は、Ｓ１６１０に処理を移して、エラーを要求受付部１１０に発行して処理を終了する。
【０１３８】
Ｓ１６１１では、要求処理部１１１は、最初に見つかったアクセス許可のあるストリームをカレントストリームに設定する。また、このときカレントオフセット１０７、カレントシーケンス番号１０５、カレントシーケンスオフセット１０６を設定する。その後ｏｐｅｎシステムコールの処理終了する（Ｓ１６１２）。なお、処理の終了の際は、ファイルディスクリプタを戻り値として、カレントストリームを引数として戻す。
【０１３９】
このＳ１６０８の処理を具体的に説明する。
【０１４０】
デフォルトストリーム番号が１に設定されていて、ユーザＩＤが５、グループＩＤが２の属性を持つユーザからｏｐｅｎ要求アクセスがあったとする。まず、要求処理部１１１は、範囲限定アクセス制御４０２を参照して、デフォルトストリームであるストリーム１にそのユーザのアクセス権限があるかどうかをチェックする。図４に示す範囲限定アクセス制御４０２では、そのユーザに対して、ストリーム番号１でオフセット０（すなわちシーケンス番号が１）を許可するエントリは存在しない。そのため、アクセスは拒否される。そこで、次に、要求処理部１１１は、ストリームアクセスプライオリティ４０３を参照して、アクセス権限をチェックする。図５に示すストリームアクセスプライオリティ４０３の先頭にはストリーム０が指定されている。そこで、要求処理部１１１は、そのユーザがストリーム０でオフセット０に対してアクセス権限があるかどうかを、範囲限定アクセス制御４０２を参照してチェックする。ここで、４エントリ目にグループＩＤが２のユーザは、ストリーム番号０、シーケンス番号１の権限は「Ｒ」、すなわち読み込みが許可されている。そこで、要求処理部１１１は、アクセス許可のあるカレントストリームを０に設定する。
【０１４１】
なお、例えば、ユーザＩＤが６、グループＩＤが１０の属性を持つユーザからｏｐｅｎ要求があった場合は、オフセット０に対するアクセス権限がないためエラー終了する。
【０１４２】
図１３は、ｉｎｓｅｒｔシステムコールの処理のフローチャートである。
ｉｎｓｅｒｔシステムコールは、ファイルにデータを挿入する。ｉｎｓｅｒｔシステムコールは、ファイルディスクリプタ、挿入するバッファ、そのバッファのサイズ、及び、挿入データがカレントオフセットの左であるか右であるかを示すフラグを引数にとる。なお、このフラグはシーケンス番号の切り替わりポイントでのみ有効となり、省略した場合はカレントオフセットの右に挿入される。正常終了の場合は、挿入できたサイズが戻り値となる。異常終了の場合は、負値のエラー番号が戻り値となる。
【０１４３】
要求処理部１１１は、カレントストリーム番号とカレントシーケンス番号とカレントシーケンスオフセットが示す箇所とを用いて、データを挿入する。
【０１４４】
ホスト計算機１０等からｉｎｓｅｒｔ要求が送信されると、要求受付部１１０がこの要求を受信して、要求処理部１１１にｉｎｓｅｒｔシステムコールを発行する。要求処理部１１１が、このｉｎｓｅｒｔシステムコールを処理する（Ｓ１３０１）。
【０１４５】
まず、要求処理部１１１は、データを挿入しようとしているオフセットがファイルシステムブロックのアラインに合致しているか否かをチェックする（Ｓ１３０２）。
【０１４６】
データの挿入オフセットとアラインとが合致している場合はＳ１３０４に処理を移す。一方、アラインに合致していない場合、すなわち、異なるファイルシステムブロックをまたがった挿入である場合は、Ｓ１３０３に処理を移す。
【０１４７】
Ｓ１３０３では、要求処理部１１１は、挿入オフセットを含んだエクステントエントリについて、領域を新しく確保し、挿入オフセットからそのエクステントエントリの終了オフセットまでのデータを新しく確保した領域にコピーする。この際、新しく確保した領域の先頭からコピーする、すなわちアラインを合わせてコピーする。そして、挿入オフセット以降にコピーされた部分に対応するエクステントエントリを追加する。
【０１４８】
次に、要求処理部１１１は、挿入オフセットからその挿入オフセットを含むエクステントエントリの示すディスクブロックの最後まで、挿入データを上書きする（Ｓ１３０５）。
【０１４９】
次に、要求処理部１１１は、挿入するデータが、全て、エクステントエントリによって示されるブロックに書き込めたか否かをチェックする（Ｓ１３０６）。全てのデータが書き込めた場合は、Ｓ１３０７に処理を移し、エクステントエントリによって示されるブロックのうち、未使用の領域を開放する。また、ブロックの開放の有無にかかわらず、エクステントエントリのバイト数を、現在保持している有効なデータのバイト数に更新する。
【０１５０】
全てのデータが書き込めなかった場合は、Ｓ１３０８に処理を移し、書き込めなかった残りのデータに対応するブロックを新たに確保する。そして、新しく確保したブロックにデータを書き込む。そして、対応するエクステントエントリを追加する。
【０１５１】
Ｓ１３０２において、データ挿入オフセットとファイルシステムブロックのアラインとが合致した場合は、Ｓ１３０４に処理を移す。Ｓ１３０４では、要求処理部１１１は、まず、挿入オフセットを含むエクステントエントリを二つのエントリに分割する。そして、挿入データのサイズに相当するブロックを新たに確保し、確保されたブロックにデータを書き込む。また、新たに確保したブロックに対応するエクステントエントリを追加する。
【０１５２】
以上の処理によって挿入データが書き込まれる。
【０１５３】
その後、要求処理部１１１は、挿入オフセット以降のエクステントエントリについて、サブシーケンス番号を適切に更新する（Ｓ１３０９）。例えば、エクステントエントリが一つ追加された場合は、以降のエクステントエントリのサブシーケンス番号を、各々１だけ加算する。
【０１５４】
次に、要求処理部１１１は、カレントオフセットに挿入データのバイト数を加算する（Ｓ１３１０）。このとき、カレントシーケンスオフセットも同様に更新する。
【０１５５】
その後、要求処理部１１１は、挿入に成功したバイト数を戻り値として返し、ｉｎｓｅｒｔシステムコールの処理を終了する（Ｓ１３１１）。
【０１５６】
図１４は、ｃｕｔシステムコールの処理のフローチャートである。
【０１５７】
ｃｕｔシステムコールは、ファイルデータの一部分を切り詰める。ｃｕｔシステムコールは、ファイルディスクリプタ、切り詰める長さを引数にとる。戻り値は切り詰めに成功した長さである。
【０１５８】
ホスト計算機１０等からｃｕｔ要求が送信されると、要求受付部１１０がこの要求を受信して、要求処理部１１１にｃｕｔシステムコールを発行する。要求処理部１１１が、このｃｕｔシステムコールを処理する（Ｓ１４０１）。
【０１５９】
まず、要求処理部１１１は、切り詰め開始オフセット（カレントオフセット）と、切り詰め終了オフセット（カレントオフセットに切り詰める長さを加算した値）とが同じシーケンス番号であるかをチェックする（Ｓ１４０８）。
【０１６０】
切り詰め開始オフセットと切り詰め終了オフセットとが同一のシーケンス番号でない場合は、そのような切り詰めは不可能であるので、Ｓ１４０９に処理を移し、エラーを要求受付部１１０に発行して処理を終了する。
【０１６１】
切り詰め開始オフセットと切り詰め終了オフセットとが同一のシーケンス番号の場合は、Ｓ１４０２に処理を移す。
【０１６２】
Ｓ１４０２では、要求処理部１１１は、切り詰め終了オフセット以降の同一エクステントエントリのデータを、切り詰め開始オフセット（カレントオフセット）以降のエクステントエントリのブロックにコピーする。
【０１６３】
次に、要求処理部１１１は、全てのデータがコピーできたかをチェックする（Ｓ１４０３）。
【０１６４】
全てのデータがコピーできた場合は、要求処理部１１１は、そのエクステントエントリのうち使用されていないディスクブロックを開放する（Ｓ１４０４）。このとき、ディスクブロックの開放の有無にかかわらず、エクステントエントリのバイト数を更新する。
【０１６５】
一方、全てのデータがコピーできなかった場合は、要求処理部１１１は、書き込めなかった残りのデータに対応するブロックを新たに確保する。そして、新たに確保したブロックに残りのデータを書き込む（Ｓ１４０５）。このとき、新たに確保したブロックに対応するエクステントエントリを追加する。
【０１６６】
Ｓ１４０４又はＳ１４０５の処理が終了した後、要求処理部１１１は、ｃｕｔ終了オフセット以降のエクステントエントリについて、次のシーケンス番号になるまでサブシーケンス番号を適切に更新する（Ｓ１４０６）。その後、切り詰めたバイト数を戻り値として返し、ｃｕｔシステムコールの処理を終了する（Ｓ１４０７）。
【０１６７】
図１５は、ｗｒｉｔｅシステムコールの処理のフローチャートである。
【０１６８】
本実施の形態のｗｒｉｔｅシステムコールの処理は、他のストリームとの連続性への影響を避けるため、シーケンス番号を超えた書き込みを実行しない。
【０１６９】
ｗｒｉｔｅシステムコールの引数は、従来のｗｒｉｔｅシステムコールの引数と同様で、ファイルディスクリプタ、バッファ及び書き込みサイズを引数にとる。戻り値は、正常終了の場合は、成功した書き込みサイズが戻り、異常終了の場合は、負値のエラー番号が戻る。
【０１７０】
ホスト計算機１０等からｗｒｉｔｅ要求が送信されると、要求受付部１１０がこの要求を受信して、要求処理部１１１にｗｒｉｔｅシステムコールを発行する。要求処理部１１１が、このｗｒｉｔｅシステムコールを処理する（Ｓ１５０１）。
【０１７１】
まず、要求処理部１１１は、書き込みの範囲が、シーケンス番号の切り替わる部分をまたがっているか否かをチェックする（Ｓ１５０２）。シーケンス番号をまたがっていない場合は、Ｓ１５０３に処理を移し、従来の上書きｗｒｉｔｅ処理を実行する。すなわち、この場合は、シーケンス番号に関する処理は実行しない。
【０１７２】
一方、シーケンス番号をまたがっている場合には、要求処理部１１１は、まず、データの先頭からシーケンス番号の切り替わる部分までのデータを従来のｗｒｉｔｅ処理を実行してデータを上書きする（Ｓ１５０４）。
【０１７３】
次に、要求処理部１１１は、シーケンス番号の切り替わる部分を越えたデータに関して、まず、新しくブロックを確保し、新しく確保したブロックに残りのデータを書き込む（Ｓ１５０５）。そして、新しく確保したブロックに対応するエクステントエントリを追加する。また、そのシーケンス番号は、シーケンス番号の切り替わる部分の前、すなわち、開始オフセットと同じシーケンス番号の値を設定する。また、サブシーケンス番号は、書き込み箇所に応じて適切な値を使用する。
【０１７４】
Ｓ１５０３又はＳ１５０５の処理が終了した後、要求処理部１１１は、カレントオフセットを再計算する（Ｓ１５０６）。このとき、同時にカレントシーケンスオフセットも再計算する。
【０１７５】
その後、戻り値として書き込みが成功したバイト数を返して、ｗｒｉｔｅシステムコールの処理を終了する（Ｓ１５０７）。
【０１７６】
図１６は、ｓｗｉｔｃｈシステムコールの処理のフローチャートである。
【０１７７】
ｓｗｉｔｃｈシステムコールは、デフォルトストリームを切り替える。
【０１７８】
ｓｗｉｔｃｈシステムコールは、ファイルディスクリプタ及び設定したいデフォルトストリーム番号を引数にとる。正常終了の場合は、カレントストリーム番号が戻り値となる。失敗の場合は、負値のエラー番号が戻り値となる。
【０１７９】
ホスト計算機１０等からｓｗｉｔｃｈ要求が送信されると、要求受付部１１０がこの要求を受信して、要求処理部１１１にｓｗｉｔｃｈシステムコールを発行する。要求処理部１１１が、このｓｗｉｔｃｈシステムコールを処理する（Ｓ１７０１）。
【０１８０】
まず、要求処理部１１１は、引数によって指定されたストリーム番号をデフォルトストリームに設定する（Ｓ１７０２）。
【０１８１】
次に、要求処理部は、デフォルトストリームの変更によってカレントストリームに変更が生じる場合は、カレントシーケンス番号及びカレントシーケンスオフセットを再計算する（Ｓ１７０３）。
【０１８２】
その後、戻り値としてカレントストリーム番号を返して、ｓｗｉｔｃｈシステムコールの処理を終了する（Ｓ１７０４）。
【０１８３】
図１７は、ｒｅａｄシステムコールの処理のフローチャートである。
【０１８４】
ｒｅａｄシステムコールは、本実施の形態のストリームに対応したファイルデータの読み込み処理を実行する。ｒｅａｄシステムコールは、従来のｒｅａｄシステムコールと同様に、ファイルディスクリプタ、読み込み用バッファ及び読み込みサイズを引数にとる。
【０１８５】
ホスト計算機１０等からｒｅａｄ要求が送信されると、要求受付部１１０がこの要求を受信して、要求処理部１１１にｒｅａｄシステムコールを発行する。要求処理部１１１が、このｒｅａｄシステムコールを処理する（Ｓ１８０１）。
【０１８６】
まず、要求処理部１１１は、範囲限定アクセス制御４０２、ストリームアクセスプライオリティ４０３及びデフォルトストリームルール４０４を参照する。そして、ストリーム番号、シーケンス番号、開始オフセット、終了オフセットから構成されるエクステントのリストを取得する（Ｓ１８０２）。
【０１８７】
次に、要求処理部１１１は、取得したリストを参照して、読み込み範囲の全てにアクセス可能なストリームがあるか否かをチェックする（Ｓ１８０７）。アクセス可能なストリームは前述のｏｐｅｎの処理で説明したのと同様である。この処理を、指定された全ての読み込み範囲で実行する。
【０１８８】
読み込み範囲の少なくとも一部にアクセス許可がない領域がある場合は、Ｓ１８０８に処理を移し、エラーを要求受付部１１０に発行して処理を終了する。なお、エラー終了ではなく、アクセス可能な範囲のオフセットまでのデータの読み込みを実行してもよい。
【０１８９】
読み込み範囲の全てにアクセスが可能なストリームがある場合は、Ｓ１８０３に処理を移す。Ｓ１８０３では、要求処理部１１１は、取得したエクステントのリストから、ブロック番号順に並び替えたリストに変換する。
【０１９０】
次に、要求処理部１１１は、各ブロックに対して読み込み処理を実行する（Ｓ１８０４）。読み込みデータは要求元に送信される。
【０１９１】
次に、要求処理部１１１は、カレントオフセットに読み込んだバイト数を加算する（Ｓ１８０５）。このとき、カレントストリーム、カレントシーケンス番号及びカレントシーケンスオフセットも、読み込んだバイト数に応じて変更する。
【０１９２】
その後、読み込んだバイト数を戻り値として返し、ｒｅａｄシステムコールを終了する（Ｓ１８０６）。
【０１９３】
図１８は、ｓｅｅｋシステムコールの処理のフローチャートである。
【０１９４】
ｓｅｅｋシステムコールは、本実施形態のストリームに対応したカレントオフセットを変更する。ｓｅｅｋシステムコールは、従来のｓｅｅｋシステムコールと同様に、ファイルディスクリプタ、オフセット及びフラグを引数にとる。戻り値はｓｅｅｋ後のオフセットである。
【０１９５】
ホスト計算機１０等からｓｅｅｋ要求が送信されると、要求受付部１１０がこの要求を受信して、要求処理部１１１にｓｅｅｋシステムコールを発行する。要求処理部１１１が、このｓｅｅｋシステムコールを処理する（Ｓ１９０１）。
【０１９６】
まず、要求処理部１１１は、範囲限定アクセス制御４０２、ストリームアクセスプライオリティ４０３及びデフォルトストリームルール４０４を参照する。そして、ｓｅｅｋ後のオフセットのカレントストリームを設定する（Ｓ１９０２）。
【０１９７】
次に、要求処理部１１１は、カレントオフセットに引数によって指示されたオフセット値を加算する。そして、カレントシーケンスオフセット及びカレントシーケンス番号を、シーク後の値に更新する（Ｓ１９０３）。
【０１９８】
その後、オフセット値を戻り値として返し、ｓｅｅｋシステムコールを終了する（Ｓ１９０４）。
【０１９９】
以上のように、本発明の第１の実施の形態のファイルシステムは、ファイルデータをストリーム番号及びシーケンス番号によって管理する。また、各ストリームのアクセス権限を範囲限定アクセス制御４０２によって管理する。このようにすることによって、要求元のクライアントのアクセス権限に応じて、ファイルデータのビューを変更することが可能となる。
【０２００】
次に、本発明の第２の実施の形態について説明する。
【０２０１】
前述のように、第１の実施の形態では、各々のストリームをファイルのエクステントによって管理した。これに対して、第２の実施の形態では、各々のストリームを一つのファイルとして管理する。なお、第１の実施の形態と同一の構成には同一の符号を付し、その説明は省略する。
【０２０２】
図１９は、本発明の第２の実施の形態の計算機システムによって実現されるファイルシステムの概要図である。
【０２０３】
各ストリームを管理するファイルをメタファイルと呼ぶ。メタファイルはメタデータ２１０１とユーザデータ２１０２からなる。
【０２０４】
メタデータ２１０２は、従来のファイルシステムの各種属性４０１ａに加え、第１の実施の形態と同様に、範囲限定アクセス制御４０２、ストリームアクセスプライオリティ４０３、デフォルトストリームルール４０４を含む。
【０２０５】
メタデータ２１０１はエクステント４０５を含む。このエクステント４０５はメタデータに対応するユーザデータ２１０２の格納領域を示す。図１９の例では、エクステント４０５によって、ブロック番号０ｘ１０ｅｅは示されている。このブロック番号０ｘ１０ｅｅに格納されているユーザデータ２１０２には、ストリーム番号、シーケンス番号、サブシーケンス番号及びそれぞれに対応するファイル名がリスト形式で格納される。
【０２０６】
このように構成された第２の実施の形態のファイルシステムの処理は、ストリームを構成するシーケンスの内容がファイル単位であることを除いては、前述の第１の実施の形態のファイルシステムの処理と同一である。
【０２０７】
なお、第２の実施の形態では、範囲限定アクセス制御４０２をメタファイルのメタデータ２１０１が持つが、これを、メタファイルによって示される各ファイル固有のアクセス制限情報としてもよい。すなわち、ファイル固有のアクセス権限によってストリームのアクセス権限を決定するようにしてもよい。
【０２０８】
以上のように、本発明の第２の実施の形態のファイルシステムは、前述の第１の実施の形態と同様に、要求元のクライアントのアクセス権限に応じて、ファイルデータのビューを変更することが可能となる。とくに、ストリームを構成する各シーケンスをファイルとして管理するので、各シーケンス毎のアクセス権限を設定することで、より細かなアクセス制御が可能となる。
【産業上の利用可能性】
【０２０９】
本発明は、ファイルシステム、ＮＡＳ等に適用可能である。本発明の対象となるコンテンツとしては、ビデオ映像ファイル、ドキュメント、実行モジュール等が考えられる。ビデオ映像ファイルでは、複数映像ストリームを保持し、年齢や国や嗜好に応じて再生するストリームを切り替える。ドキュメントは、役職や所属組織に応じて適切な機密情報レベルのストリームを表示する。実行モジュールは、複数のアーキテクチャに応じたバイナリを保持し、適切なアーキテクチャのバイナリを実行する。
【図面の簡単な説明】
【０２１０】
【図１】本発明の第１の実施の形態の計算機システムによって実現されるファイルシステムの概要図である。
【図２】ファイルシステムを実現する計算機システムの構成ブロック図である。
【図３】ファイルシステムボリュームの具体的な内容の説明図である。
【図４】範囲限定アクセス制御の詳細の説明図である。
【図５】ストリームアクセスプライオリティの詳細の説明図である。
【図６】デフォルトストリームルールの詳細の説明図である。
【図７】ａｔｔａｃｈ＿ｓｔｒｅａｍシステムコールの処理のフローチャートである。
【図８】ｄｅｔａｃｈ＿ｓｔｒｅａｍシステムコールの処理のフローチャートである。
【図９】ｓｈｏｗ＿ｓｔｒｅａｍシステムコールの処理のフローチャートである。
【図１０】ｓｅｔｒａｃｌシステムコールの処理のフローチャートである。
【図１１】ｇｅｒａｃｌシステムコールの処理のフローチャートである。
【図１２】ｏｐｅｎシステムコールの処理を示すフローチャートである。
【図１３】ｉｎｓｅｒｔシステムコールの処理のフローチャートである、
【図１４】ｃｕｔシステムコールの処理のフローチャートである。
【図１５】ｗｒｉｔｅシステムコールの処理のフローチャートである。
【図１６】ｓｗｉｔｃｈシステムコールの処理のフローチャートである。
【図１７】ｒｅａｄシステムコールの処理のフローチャートである。
【図１８】ｓｅｅｋシステムコールの処理のフローチャートである。
【図１９】本発明の第２の実施の形態の計算機システムによって実現されるファイルシステムの概要図である。
【図２０】従来のファイルシステムによるファイルの提供方法の一例を示す説明図である。
【図２１】従来のファイルシステムによるファイルの提供方法の一例を示す説明図である。
【符号の説明】
【０２１１】
１０      ホスト計算機
１０１      ファイルシステム
１０２      ストリーム管理部
１０５      カレントシーケンス番号
１１０      要求受付部
１１１      要求処理部
２００１      プロセッサ
２００２      ネットワークコントローラ
２００３  Ｉ／Ｏ制御部
２００４      ディスクコントローラ
２００５      主記憶
２００７      ストレージ装置
２００８      外部ネットワーク
４０１      メタデータ
４０１ａ      各種属性
４０２      範囲限定アクセス制御
４０３      ストリームアクセスプライオリティ
４０４      デフォルトストリームルール
４０５ａ、４０５ｂ、４０５ｃ、４０５ｄ、４０５ｅ      ユーザデータ
【図１】
0004659537.tif 000002
【図２】
0004659537.tif 000003
【図３】
0004659537.tif 000004
【図４】
0004659537.tif 000005
【図５】
0004659537.tif 000006
【図６】
0004659537.tif 000007
【図７】
0004659537.tif 000008
【図８】
0004659537.tif 000009
【図９】
0004659537.tif 000010
【図１０】
0004659537.tif 000011
【図１１】
0004659537.tif 000012
【図１２】
0004659537.tif 000013
【図１３】
0004659537.tif 000014
【図１４】
0004659537.tif 000015
【図１５】
0004659537.tif 000016
【図１６】
0004659537.tif 000017
【図１７】
0004659537.tif 000018
【図１８】
0004659537.tif 000019
【図１９】
0004659537.tif 000020
【図２０】
0004659537.tif 000021
【図２１】
0004659537.tif 000022