(57)【特許請求の範囲】
【請求項１】
コンピュータ・システム内にコヒーレント・アクセラレータ・プロセッサ・インタフェース（ＣＡＰＩ）アダプタのためのブロック・エクステント粒度の許可モデルの処理を実装するための方法であって、
前記ＣＡＰＩアダプタに許可テーブルおよびファイル・システム許可機能を提供することと、
前記ファイル・システム許可機能が、エクステント粒度レベルでのデータ・アクセスを各ＣＡＰＩクライアントに許可して、アプリケーションが前記ＣＡＰＩアダプタ内で未許可のデータにアクセスすることを回避することと、
前記許可テーブルの各許可エントリが、前記各ＣＡＰＩクライアントのために、ＣＡＰＩクライアント識別子（ＩＤ）、前記ＣＡＰＩクライアントにリソース所有権を割り当てるＣＡＰＩサーバ・レジスタ空間、および許容される機能のＣＡＰＩセットを規定することと、
前記ＣＡＰＩクライアントに前記ファイル・システム許可機能が許可ハンドルを返すことと、
前記ＣＡＰＩクライアントが各コマンド内に前記許可ハンドルを設定することと、
前記ＣＡＰＩアダプタが、前記許可ハンドルを使用して前記各コマンドを検証することとを含み、
前記許可ハンドルは各エクステントに対して割り当てられ、
前記ＣＡＰＩアダプタは、前記許可ハンドルを使用して許可エントリの場所を特定し、該許可エントリの内容によりコマンドを検証する、
方法。
【請求項２】
前記ＣＡＰＩサーバ・レジスタ空間が、初期化機能を行うために使用されるＣＡＰＩサーバ・レジスタを含み、前記ＣＡＰＩクライアントＩＤがＣＡＰＩサーバ・レジスタの特定のコピーへのインデックスを提供する、請求項１に記載の方法。
【請求項３】
前記ファイル・システム許可機能が、前記各ＣＡＰＩクライアントのための仮想アドレスを前記ＣＡＰＩサーバ・レジスタ空間にマッピングすることによって、それぞれのＣＡＰＩクライアントに対するそれぞれのＣＡＰＩサーバ・レジスタへのアクセスを実施することを含む、請求項１又は２に記載の方法。
【請求項４】
複数のＣＡＰＩクライアントのうち１つまたは複数を主所有者ＣＡＰＩクライアントとして特定することを含む、請求項１乃至３のいずれかに記載の方法。
【請求項５】
前記主所有者ＣＡＰＩクライアントが親ＣＡＰＩクライアントであり、前記親ＣＡＰＩクライアントが前記ＣＡＰＩアダプタに新しい子ＣＡＰＩクライアントについて通知し、前記新しい子ＣＡＰＩクライアントのための前記ＣＡＰＩサーバ・レジスタ空間を特定し、前記新しい子ＣＡＰＩクライアントのために許容されるＣＡＰＩ機能を特定することを含む、請求項４に記載の方法。
【請求項６】
前記ＣＡＰＩアダプタが、ＣＡＰＩサーバ・レジスタ空間に送られた各コマンドに許容される機能を、前記コマンド内の前記許可ハンドルを使用して実施することを含む、請求項１に記載の方法。
【請求項７】
コヒーレント・アクセラレータ・プロセッサ・インタフェース（ＣＡＰＩ）アダプタにブロック・エクステント粒度の許可モデルの処理を実装するためのシステムであって、
許可テーブルおよびファイル・システム許可機能を含む前記ＣＡＰＩアダプタを含み、
前記ファイル・システム許可機能が、エクステント粒度でのデータ・アクセスをＣＡＰＩクライアントに許可して、アプリケーションが前記ＣＡＰＩアダプタ内で未許可のデータにアクセスすることを回避し、
前記許可テーブルの各許可エントリが、前記ＣＡＰＩクライアントのために、ＣＡＰＩクライアント識別子（ＩＤ）、前記ＣＡＰＩクライアントにリソース所有権を割り当てるＣＡＰＩサーバ・レジスタ空間、および許容される機能のＣＡＰＩセットを規定し、
前記ＣＡＰＩクライアントに前記ファイル・システム許可機能が許可ハンドルを返し、
前記ＣＡＰＩクライアントが各コマンド内に前記許可ハンドルを設定し、
前記ＣＡＰＩアダプタが、前記許可ハンドルを使用して前記各コマンドを検証し、
前記許可ハンドルは各エクステントに対して割り当てられ、
前記ＣＡＰＩアダプタは、前記許可ハンドルを使用して許可エントリの場所を特定し、該許可エントリの内容によりコマンドを検証する、
システム。
【請求項８】
コンピュータ可読媒体に記憶された制御コードを含み、前記制御コードが前記ファイル・システム許可機能を含む、請求項７に記載のシステム。
【請求項９】
前記ＣＡＰＩサーバ・レジスタ空間が、初期化機能を行うために使用されるＣＡＰＩサーバ・レジスタを含み、前記ＣＡＰＩクライアントＩＤがＣＡＰＩサーバ・レジスタの特定のコピーへのインデックスを提供する、請求項７又は８に記載のシステム。
【請求項１０】
プロセッサ、ファイル・システム、および前記ＣＡＰＩアダプタに関連する許可機能を管理するハイパーバイザを含む、前記ＣＡＰＩアダプタに結合されたプロセッサ・コンプレックスを含む、請求項７乃至９のいずれかに記載のシステム。
【請求項１１】
コヒーレント・アクセラレータ・プロセッサ・インタフェース（ＣＡＰＩ）、およびペリフェラル・コンポーネント・インターコネクト・エクスプレス（ＰＣＩＥ）を備えるトランスポート機構を含む、請求項１０に記載のシステム。
【請求項１２】
前記ファイル・システム許可機能が、前記各ＣＡＰＩクライアントのための仮想アドレスを前記ＣＡＰＩサーバ・レジスタ空間にマッピングすることによって、それぞれのＣＡＰＩクライアントに対するそれぞれのＣＡＰＩサーバ・レジスタへのアクセスを実施する、請求項７乃至１１のいずれかに記載のシステム。
【請求項１３】
主所有者ＣＡＰＩクライアントとして特定された、複数のＣＡＰＩクライアントのうち１つまたは複数を含み、前記主所有者ＣＡＰＩクライアントが親ＣＡＰＩクライアントであり、前記親ＣＡＰＩクライアントが前記ＣＡＰＩアダプタに新しい子ＣＡＰＩクライアントについて通知し、前記新しい子ＣＡＰＩクライアントのための前記ＣＡＰＩサーバ・レジスタ空間を特定し、前記新しい子ＣＡＰＩクライアントのために許容されるＣＡＰＩ機能を特定する、請求項７乃至１２のいずれかに記載のシステム。
【請求項１４】
前記ＣＡＰＩアダプタが、ＣＡＰＩサーバ・レジスタ空間に送られた各コマンドに許容される機能を、前記コマンド内の前記許可ハンドルを使用して実施することを含む、請求項７乃至１３のいずれかに記載のシステム。
【請求項１５】
エクステント粒度でのデータ・アクセスをＣＡＰＩクライアントに許可する前記ファイル・システム許可機能が、ブロック・デバイスまたは論理ユニット（ＬＵＮ）のリソース空間サブセットを含む各エクステントを含む、請求項７乃至１４のいずれかに記載のシステム。
【請求項１６】
コンピュータ・システム内にコヒーレント・アクセラレータ・プロセッサ・インタフェース（ＣＡＰＩ）アダプタのためのブロック・エクステント粒度の許可モデルの処理を実装するためのコンピュータ・プログラムであって、プログラム命令が具現化され、前記プログラム命令が、請求項１乃至６のいずれかの方法を行うようにコンピュータによって実行可能である、コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般にデータ処理の分野に関し、より詳細には、コヒーレント・アクセラレータ・プロセッサ・インタフェース（ＣＡＰＩ：Coherent Accelerator Processor Interface）にブロック・エクステント粒度の許可モデルの処理を実装するための方法、コンピュータ・システムおよびコンピュータ・プログラムに関する。
【背景技術】
【０００２】
恒久的な二次ストレージは、実質的にすべてのコンピュータ・システムの構成要素である。このストレージは通常、ハード・ディスク・ドライブまたはフラッシュ・ストレージ・デバイスなどのブロック・デバイスである。ホスト・コンピュータ・システムをハード・ディスク・ドライブ、固体ドライブ、テープ・ドライブ、コンパクト・ディスク・ドライブなどの周辺ストレージＩ／Ｏデバイスに接続するために、ストレージ・アダプタが使用されることが多い。
【０００３】
従来のコンピュータ・システムでは、ブロック・デバイスに対してデータの読み出しまたは書き込みを行う必要のあるアプリケーションは、要求されたデータのブロックを読み出すか書き込むためにオペレーティング・システム（ＯＳ）またはファイル・システム（ＦＳ）あるいはその両方の呼び出しを行う。オペレーティング・システムまたはファイル・システムはコンピュータ・システムの「信頼できる」部分であり、読み出し／書き込みリクエストの一部として、そのアプリケーションが要求されたデータのブロックへのアクセスを許容されることを確認または許可する。許可に成功すると、ＯＳは読み出し／書き込みリクエストのコマンドを作成し、そのコマンドをホスト・バス・アダプタ（ＨＢＡ）に送ってサービスする。ＨＢＡが受信することができるのはＯＳからのコマンドのみなので、ＨＢＡには、要求されたブロック範囲が許可済みであり、そのコマンドを実行しても安全であることが分かっている。
【０００４】
ＩＢＭは、オープンパワー・ファウンデーション（OpenPOWER Foundation）の一部として、新しいブロック・デバイスＩ／Ｏモデルを導入した。この新しいブロック・デバイスＩ／Ｏモデルは、コヒーレント・アクセラレータ・プロセッサ・インタフェース（ＣＡＰＩ）技術を使用する。ＣＡＰＩでは、アプリケーションが入出力アダプタ（ＩＯＡ）に対する読み出し／書き込みのコマンドを作成し、そのコマンドをＯＳ／ＦＳを迂回して、したがって従来の許可も迂回して、直接ＩＯＡに送ることができる。許可が行われなければ、アプリケーションが、そのアプリケーションにアクセスが許容されるべきではないデータを取得できるようになる。例えば、第１の競合者および第２の競合者の専有データが含まれているサーバシステムで、許可が行われなければ、第１の競合者が第２の競合者のデータにアクセスできるようになる。
【０００５】
ＯＳ／ＦＳの外部でのブロック・デバイス許可のための現在の技術は、ブロック・デバイスまたは論理ユニット（ＬＵＮ）の粒度レベルでのゾーニングなどのアウトオブバンド技法を使用する。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
コヒーレント・アクセラレータ・プロセッサ・インタフェース（ＣＡＰＩ）アダプタのための許可をコンピュータ・システム内に実装するための実効的な機構への需要が存在する。望ましくは、そのような機構は、ＩＯ操作を行うための多くのホストＣＰＵ要件を迂回して、実効的で効率的なＣＰＡＩアダプタの利用を可能にする。
【課題を解決するための手段】
【０００７】
本発明の主要な態様は、アプリケーションが未許可データにアクセスすることを回避するために、コヒーレント・アクセラレータ・プロセッサ・インタフェース（ＣＡＰＩ）アダプタにブロック・エクステント粒度の許可を実装するための方法、システムおよびコンピュータ・プログラム製品を提供することである。本発明のその他の重要な態様は、ほとんど負の影響のない、また、従来技術の配置にある多くの短所を克服する、そのような方法、システムおよびコンピュータ・プログラム製品を提供することである。
【０００８】
端的に言えば、コヒーレント・アクセラレータ・プロセッサ・インタフェース（ＣＡＰＩ）アダプタにブロック・エクステント粒度の許可モデルの処理を実装するための方法、システムおよびコンピュータ・プログラム製品が提供される。ＣＡＰＩアダプタは、クライアントにあるエクステント粒度でのデータ・アクセスを許可するため、および、アプリケーションがＣＡＰＩアダプタ内で未許可のデータにアクセスすることを回避するために、許可テーブルおよびファイル・システム許可機能を含む。許可テーブルの各エントリは、そのＣＡＰＩクライアントのために、ＣＡＰＩクライアント識別子（ＩＤ）、ＣＡＰＩクライアントにリソース所有権を割り当てるＣＡＰＩサーバ・レジスタ空間、および許容される機能のＣＡＰＩセットを規定する。
【０００９】
本発明の特徴によれば、ＣＡＰＩサーバ・レジスタ空間は、ＣＡＰＩアダプタ・システム・バス・アドレス空間内の各エクステント、すなわち、ある範囲の論理ブロック・アドレスについて、クライアント許可を定めるＣＡＰＩサービス・レジスタを含む。
【００１０】
本発明は、前述およびその他の目的および利点と共に、図面に示される本発明の好ましい実施形態の下記の詳細な説明によって、最もよく理解され得る。
【図面の簡単な説明】
【００１１】
【図１】好ましい実施形態によって、ＣＡＰＩアダプタにコヒーレント・アクセラレータ・プロセッサ・インタフェース（ＣＡＰＩ）許可を実装するためのコンピュータの例およびＣＡＰＩ許可ハンドルの配列要素の例を示す図である。
【図２】好ましい実施形態によって、ＣＡＰＩアダプタにコヒーレント・アクセラレータ・プロセッサ・インタフェース（ＣＡＰＩ）許可を実装するためのコンピュータの例およびＣＡＰＩ許可ハンドルの配列要素の例を示す図である。
【図３】好ましい実施形態によって、ＣＡＰＩアダプタにコヒーレント・アクセラレータ・プロセッサ・インタフェース（ＣＡＰＩ）許可を実装するためのコンピュータの例およびＣＡＰＩ許可ハンドルの配列要素の例を示す図である。
【図４】好ましい実施形態による、コマンドを検証するＣＡＰＩ許可操作の例を示す図である。
【図５】好ましい実施形態による、コマンドを検証するＣＡＰＩ許可操作の例を示す図である。
【図６】好ましい実施形態によるＣＡＰＩ許可モデルおよび許可処理操作を含む、読み出しコマンドの例を示す図である。
【図７】好ましい実施形態によるＣＡＰＩ許可モデルおよび許可処理操作を含む、読み出しコマンドの例を示す図である。
【図８】好ましい実施形態によるＣＡＰＩ許可モデルおよび許可処理操作を含む、読み出しコマンドの例を示す図である。
【図９】好ましい実施形態によるＣＡＰＩ許可モデルおよび許可処理操作を含む、読み出しコマンドの例を示す図である。
【図１０】好ましい実施形態によるＣＡＰＩ許可モデルおよび許可処理操作を含む、読み出しコマンドの例を示す図である。
【図１１】好ましい実施形態によるＣＡＰＩ許可モデルおよび許可処理操作を含む、読み出しコマンドの例を示す図である。
【図１２】好ましい実施形態による、ＣＡＰＩ許可モデル処理操作の例を示す図である。
【図１３】好ましい実施形態による、ＣＡＰＩ許可初期化処理操作の例を示す図である。
【図１４】好ましい実施形態による、ＣＡＰＩ許可処理操作の例を示す図である。
【図１５】好ましい実施形態による、ＣＡＰＩ許可コマンド・フロー処理操作の例を示す図である。
【図１６】好ましい実施形態による、ＣＡＰＩ許可実施処理操作の例を示す図である。
【図１７】好ましい実施形態による、ＣＡＰＩ許可機構および処理操作の例を示す図である。
【図１８】好ましい実施形態による、ＣＡＰＩ許可削除処理操作の例を示す図である。
【図１９】好ましい実施形態による、ＣＡＰＩ許可読み出しコマンド処理操作の例を示す図である。
【図２０】好ましい実施形態による、ＣＡＰＩ許可読み出しコマンド処理操作の例を示す図である。
【図２１】好ましい実施形態によるコンピュータ・プログラム製品を示すブロック図である。
【発明を実施するための形態】
【００１２】
下記の、本発明の実施形態の詳細な説明では、添付図面を参照し、その図面には本発明が実践され得るようにする実施形態の例が示される。他の実施形態が利用されてもよく、また本発明の範囲を逸脱することなく構造的変更が加えられてもよいことが理解される。
【００１３】
本明細書で使用される用語は、特定の実施形態のみを説明することを目的とし、本発明を限定することは意図されない。本明細書で使用されるとき、単数形「ａ」、「ａｎ」、および「ｔｈｅ」は、文脈によって明確に断りのない限り、複数形も含む。また、用語「備える」または「備えている」あるいはその両方は、本明細書で使用するとき、述べられた特徴、完全体、ステップ、操作、要素、または構成要素あるいはその組合せの存在を明確に示すが、１つまたは複数の他の特徴、完全体、ステップ、操作、要素、構成要素またはそれらのグループあるいはその組合せの存在または追加を除外しない。
【００１４】
本発明の特徴によれば、好ましい実施形態によって、ＣＡＰＩアダプタにコヒーレント・アクセラレータ・プロセッサ・インタフェース（ＣＡＰＩ）許可を実装するための方法、システム、およびコンピュータ・プログラム製品が提供される。
【００１５】
図面を参照すると、図１および２に、好ましい実施形態によって、ＣＡＰＩアダプタ１０２にコヒーレント・アクセラレータ・プロセッサ・インタフェース（ＣＡＰＩ）許可を実装するためのコンピュータ・システムの例が、全体として参照文字１００で示されている。コンピュータ・システム１００は、システム・メモリ１０６に結合された１つまたは複数のプロセッサ１０４または中央処理ユニット（ＣＰＵ）１０４（１つが示されている）を含み、このプロセッサ１０４またはＣＰＵ１０４は、Ｉ／Ｏハブまたはコヒーレント・アタッチ・プロセッサ・プロキシ（ＣＡＰＰ）１０８およびペリフェラル・コンポーネント・インターコネクト・エクスプレス（Peripheral Component Interconnect Express：ＰＣＩエクスプレスまたはＰＣＩＥ）接続によってＣＡＰＩアダプタ１０２に結合されている。ＣＡＰＩアダプタ１０２は許可テーブル１１２を含み、このテーブルは好ましい実施形態によって許可を実装する複数の許可エントリを含む。
【００１６】
図２に示されるように、好ましい実施例によれば、コンピュータ・システム１００はストレージ・スタック１２０の例を含み、このスタックは、ＣＡＰＩ／ＰＣＩＥインタフェース・ブロック１３０によってＣＡＰＩアダプタ１０２に結合された、ユーザＣＡＰＩクライアント１２２、ファイル・システム１２６を含むオペレーティング・システム１２４、およびハイパーバイザ１２８を含み、ＣＡＰＩアダプタ１０２はファイル・システム許可機能１３２を含む。ＣＡＰＩ／ＰＣＩＥインタフェース・ブロック１３０はＣＡＰＩトランスポート機構を含み、この機構は、システム・トランスポート機構またはＰＣＩＥの上に重ねられている。ＣＡＰＩクライアント１２２はユニークなシステム・エントリであり、ＣＡＰＩアダプタ機能にアクセスするための許可の、別途特定されたセットを有する。
【００１７】
また図３を参照すると、許可テーブル１１２は好ましい実施形態による許可を実装する許可エントリ１４０を含む。図示された許可エントリ１４０の例は、好ましい実施形態によれば、ＣＡＰＩクライアント・ユーザＩＤ１５０、リソースならびにエクステントの情報を含むＣＡＰＩサーバ・レジスタ空間１５２、および、許容されるアクセス・タイプを含めた許容される機能のＣＡＰＩセット１５４を含む。
【００１８】
本発明の特徴によれば、ＣＡＰＩサーバ・レジスタ空間１５２は、コマンドを開始させるために使用できるレジスタの複数のコピーを含むＣＡＰＩアダプタ・システム・バス・アドレス空間である。各コピーは、ＣＡＰＩサーバ・レジスタと呼ばれる。各ＣＡＰＩサーバ・レジスタは、その特定のＣＡＰＩサーバ・レジスタに以前から許可されているアダプタ機能にのみアクセスできる。
【００１９】
本発明の特徴によれば、ＣＡＰＩクライアントＩＤは、ＣＡＰＩサーバ・レジスタの特定のコピーへのインデックスである。ＣＡＰＩクライアントのうち１つまたは複数が、マスタ・クライアントとして特定される。マスタ・クライアントのためのＣＡＰＩサーバ・レジスタは、ＣＡＰＩアダプタの初期化機能を実行するために使用され、これらの特定のＣＡＰＩサーバ・レジスタは、すべてのＣＡＰＩアダプタ機能にアクセスすることができる。
【００２０】
図４および５を参照すると、好ましい実施形態による、コマンドを検証するＣＡＰＩ許可操作の例が示されている。図４に、コマンドを検証するＣＡＰＩ許可操作の例が、全体として参照文字２００で示されている。図５のブロック２２２に示されるように、ホストにより検証が行われ、許可されたコンテキストのみが図４に示される所与のＭＭＩＯ空間２０２に書き込んでもよい。図４で、ＩＯアダプタ・リクエスト制御ブロック（ＩＯＡＲＣＢ）２０６は、許可ハンドル２０８を含む。図５のブロック２２２に示されるように、図４の許可エントリ１４０で示される、信頼できるハンドル・データはＣＡＰＩサーバＩＤ２１４ならびにリソースおよび範囲２１２を含む。ブロック２２４に示されるように、ＭＭＩＯ空間２０２が、ＣＡＰＩサーバＩＤ２１４によってインデクシングされる。ブロック２２６に示されるように、図４に示されるプロセス要素２１６がＣＡＰＩサーバＩＤによってインデクシングされる。ブロック２２８に示されるように、プロセス要素２１６はホスト実効アドレスを物理アドレスに変換するために必要な情報を含む。
【００２１】
図６、７、８、９、１０および１１を参照すると、好ましい実施形態によるＣＡＰＩ許可モデルおよび読み出しコマンドのための許可処理操作を含む、読み出しコマンド操作の例が示されている。
【００２２】
図６に、読み出しコマンドのためのＣＡＰＩ許可操作の例が、全体として参照文字３００で示されている。ＣＡＰＩ許可操作３００の例は、ユーザ３０２、ＯＳ３０４、ハイパーバイザ３０６、およびＣＡＰＩアダプタ１０２で示されている。図７のブロック３１０に示されるように、ＯＳが「所有者」コンテキストであると仮定する。ブロック３１２に示されるように、ユーザが、ファイル／ｈｄｉｓｋを「開く」ためにシステムコールを行う。ブロック３１４に示されるように、ＯＳが、ユーザのコンテキストをコンテキスト・リストに追加するためにハイパーコールを行う。ブロック３１６に示されるように、ハイパーバイザが、ユーザのコンテキストをコンテキスト・リストに追加する。ブロック３１８に示されるように、ハイパーバイザが、そのコンテキストをアダプタに追加するためにＣＡＰＩ処理を行う。
【００２３】
図８に、読み出しコマンドのためのＣＡＰＩ許可操作の例が、全体として参照文字３２０で示されている。ＣＡＰＩ許可操作３２０の例は、ユーザ３０２、ＯＳ３０４、ハイパーバイザ３０６、およびＣＡＰＩアダプタ１０２で示されている。図９で、ブロック３２２に示されるように、ハイパーバイザがユーザのＣＡＰＩ  ＩＤを返す。ブロック３２４に示されるように、許可を追加するために、ＯＳがアダプタに対して「許可作成」のリクエストを行い、ＯＳがユーザＣＡＰＩ  ＩＤを提供し、次に、リソースおよびエクステントを提供する。ブロック３２６に示されるように、アダプタが各エクステントに許可ハンドルを割り当て、ＣＡＰＩ  ＩＤおよびエクステント情報を記入する。ブロック３２８に示されるように、アダプタがオペレーティング・システムに新しいユーザ許可ハンドルを返す。
【００２４】
図１０に、読み出しコマンドのためのＣＡＰＩ許可操作の例が、全体として参照文字３３０で示されている。ＣＡＰＩ許可操作３３０の例は、ユーザ３０２、ＯＳ３０４、ハイパーバイザ３０６、およびＣＡＰＩアダプタ１０２で示されている。図１１で、ブロック３３４に示されるように、ＯＳがユーザに許可ハンドルを返す。ブロック３３４に示されるように、ユーザがアダプタに、読み出しを発行するよう求めるリクエストを送る。ブロック３３６に示されるように、アダプタがＣＡＰＩ  ＩＤを使用して、どのコンテキストを使用するか特定する。ブロック３４０に示されるように、アダプタがそのコンテキストを使用して、ホスト・リクエスト・アドレスを変換する。
【００２５】
ブロック３４２に示されるように、アダプタがＩＯアダプタ・リクエスト制御ブロック（ＩＯＡＲＣＢ）をフェッチする。ブロック３４４に示されるように、アダプタがＩＯＡＲＣＢから許可ハンドルを取得する。ブロック３４６に示されるように、アダプタが、その許可ハンドルが現行バージョンであるか（全ビットが一致するか）確認する。
【００２６】
ブロック３４８に示されるように、アダプタが、その許可ハンドルが使用されたＣＡＰＩ  ＩＤのためのものであるか確認する。ブロック３５０に示されるように、アダプタが、そのリクエストの範囲が許容されている（許可ハンドル・データ内のデータ）か確認する。ブロック３５２に示されるように、アダプタが読み出しを行う。ブロック３５４に示されるように、アダプタがアドレスを変換して、データをホストへ（ユーザのメモリ内へ）送る。ブロック３５６に示されるように、アダプタはキューを書き込むか、メモリ位置を書き込むか、割り込みを生成するか、または何らかの所望の完了通知を行う。
【００２７】
本発明の特徴によって、図１２に関して示され、記載されるように、ＣＡＰＩ許可モデルは、権利の分割実施に基づく。
【００２８】
図１２を参照すると、好ましい実施形態によるＣＡＰＩ許可モデル操作の例が示され、ブロック４００で開始する。ブロック４０２に示されるように、信頼できるＯＳが、どのＣＡＰＩサーバ・レジスタがどのクライアントによってアクセス可能であるかを実施する。これは、例えば、クライアントの仮想アドレスをＣＡＰＩサーバ・レジスタ空間にマッピングすることによって実現される。ブロック４０４に示されるように、親クライアント（初期には主所有者クライアント（Master Owning Client））がＣＡＰＩアダプタ１０２に、どの機能が子のＣＡＰＩサーバに許容されるかを通知する。ブロック４０６に示されるように、親クライアントが、新しい子のＣＡＰＩサーバ・レジスタ空間に送ることを許容される機能、コマンド、エクステントを特定する１つまたは複数のコマンドを、以前から許可されているＣＡＰＩサーバ・レジスタ空間に送る。ブロック４０８に示されるように、アダプタが、要求されたそれぞれの許可要素に適した不透明の許可ハンドル・トークンを生成して返す。許可ハンドルは、実装ごとに固有の方法で、読み出し／書き込みコマンドの許可パフォーマンスを最適化するように符号化される。ブロック４１０に示されるように、アダプタは、ＣＡＰＩサーバ・レジスタ空間に送られた各コマンドで許容される機能を実施する。ブロック４１０で、クライアントは適切な「許可ハンドル」をコマンド内にセットし、アダプタはその「許可ハンドル」を使用して、そのコマンドが受信側ＣＡＰＩサーバ・レジスタ空間による実行を許容されていることを検証する。
【００２９】
図１３を参照すると、好ましい実施形態によるＣＡＰＩ許可初期化処理操作の例が示され、ブロック５００で開始する。ブロック５０２に示されるように、アダプタのリセットが完了し、信頼できるＯＳのブート・プロセスがアダプタをＣＡＰＩモードに移行させ、主所有者クライアント・コンポーネント、および、その主所有者クライアントに割り当てられたアダプタＣＡＰＩサーバ・レジスタ空間を特定する。ブロック５０４に示されるように、主所有者クライアントは、アダプタの制御下で、すべてのデバイスおよび機能に対してデフォルトで許可される。ブロック５０６に示されるように、主所有者クライアントは信頼できるとして特定される。ブロック５０８に示されるように、信頼できるＯＳは、主所有者クライアントが、その所有者クライアントに割り当てられたＣＡＰＩサーバ・レジスタ空間にアクセスするためのアドレス・マッピングを作成する。このアドレス・マッピングは、他のどのようなクライアントまたはアプリケーションにも与えられない。
【００３０】
ブロック５１０に示されるように、これで、主所有者クライアントがアダプタにコマンドを送れるようになる。ブロック５１２に示されるように、他のクライアントまたはアプリケーションは、主所有者クライアントのサーバ・レジスタ空間へのアドレス・マッピングをもたないので、それらのレジスタを介してアダプタにコマンドを送ることはできない。
【００３１】
図１４を参照すると、好ましい実施形態によるＣＡＰＩ許可処理操作の例が示され、ブロック６００で開始する。ブロック６０２に示されるように、アプリケーション・クライアントは、ファイル・システムからのファイルに対する許可を要求する。ブロック６０４に示されるように、ファイル・システムはリクエストを検証して、ファイルを含む各エクステントの位置を判断し、システムＣＡＰＩ許可マネージャからの各エクステントに対する許可を要求する。ブロック６０６に示されるように、システムＣＡＰＩ許可マネージャは、どのＣＡＰＩアダプタが各エクステントにサービスを行う必要があるか判断し、要求元アプリケーション・クライアントに（子）クライアントＩＤおよびＣＡＰＩサーバ・レジスタ範囲を割り当てるようにＣＡＰＩクライアント・マネージャに要求し、以前から許可されているＣＡＰＩ親クライアント（初期にはマスタ・クライアント）に、子ＩＤおよびエクステントのリストを許可するように要求する。ブロック６０８に示されるように、ＣＡＰＩ親クライアントは親のＣＡＰＩサーバ・レジスタを介して「許可作成」コマンドをＣＡＰＩアダプタに送る。パラメータは、ＣＡＰＩ子クライアントＩＤ、エクステントのリスト、および他のコマンド／アダプタ・リソースのリストであり、エクステントのリストは各エクステントについてＣＡＰＩ親許可ハンドル、エクステント開始ＬＢＡおよびブロック数を含み、他のコマンド／アダプタ・リソースのリストは各コマンド／リソースについてＣＡＰＩ親許可ハンドルを含む。ブロック６１０に示されるように、ＣＡＰＩアダプタは、親許可ハンドルおよびＣＡＰＩサーバ・レジスタ範囲が特定のエクステント／コマンド／リソースに対して有効であることを検証し、要求された、それぞれの検証済みエクステント／コマンド／リソースに新しい子許可ハンドルを割り当てることによって許可リストを作成し、その許可リストを親クライアントに返す。ブロック６１２に示されるように、親クライアントは許可リストを許可マネージャに返す。ブロック６１４に示されるように、許可マネージャは許可リストおよび子クライアントＩＤをファイル・システムに返し、ファイル・システムは許可リストおよび子クライアントＩＤをアプリケーション・クライアントに返す。
【００３２】
図１５を参照すると、好ましい実施形態によるＣＡＰＩ許可コマンド・フロー処理操作の例が示され、ブロック７００で開始する。ブロック７０２に示されるように、アプリケーション・クライアントがコマンドを作成する。パラメータは、開始ＬＢＡおよびＬＢＡの数、ならびに子の許可ハンドルを含む。ブロック７０４に示されるように、アプリケーション・クライアントはそのコマンドを、そのアプリケーション・クライアントのＣＡＰＩサーバ・レジスタを介して直接ＣＡＰＩアダプタに送る。ブロック７０６に示されるように、ＣＡＰＩアダプタは、許可ハンドルおよび受信側ＣＡＰＩサーバ・レジスタ・アドレスを使用して、要求側クライアントがコマンドの実行を許可されていることを検証する。ブロック７０８に示されるように、ＣＡＰＩアダプタはコマンドを実行し、完了通知をアプリケーション・クライアントに送る。
【００３３】
図１６を参照すると、好ましい実施形態によるＣＡＰＩ許可実施処理操作の例が示され、ブロック８００で開始する。ブロック８０２に示されるように、個々のクライアント／アプリケーションのためにアドレス空間マッピングを作成する、信頼できるＯＳによって、ＣＡＰＩアダプタ・サーバ・レジスタ空間へのアクセスが実施される。ブロック８０４に示されるように、アダプタは、各コマンドで渡された許可ハンドルが要求側クライアントに属すること、および、そのクライアントが要求されたコマンド／機能／エクステントに対して許可されていることを検証することによって、そのコマンドにアクセス権を実施する。
【００３４】
図１７を参照すると、好ましい実施形態によるＣＡＰＩ許可機構および処理操作の例が示され、ブロック９００で開始する。ブロック９０２に示されるように、許可ハンドルを、ルックアップ・テーブル・インデックスを含む複数のフィールドとして符号化する。ルックアップ・テーブル・インデックス・フィールドのサイズは、有効となる可能性のある許可ハンドルの数を最大化するように、実装によって選択されるべきである。許可ハンドルは実装固有の符号化を含み、このフィールドのサイズは失効した証明書の検出が可能である最小のサイズにすべきである。ブロック９０４に示されるように、複数の許可エントリを含む許可テーブルを作成する。各許可エントリは許可ハンドル、ＣＡＰＩサーバ・レジスタＩＤ、エクステントの論理開始ブロック・アドレス、エクステントの論理ブロック・アドレスの範囲を含む。ブロック９０６に示されるように、コマンドを受信したときの許可処理は、受信したコマンドに含まれる許可ハンドルからルックアップ・テーブル・インデックスを抽出することを含む。そのルックアップ・テーブル・インデックスを使用して、許可エントリの場所を特定する。許可エントリのＣＡＰＩサーバ・レジスタＩＤを受信側のＣＡＰＩサーバ・レジスタＩＤと比較する。許可エントリの許可ハンドルを、受信したコマンドに含まれる許可ハンドルと比較する。いずれかが一致しない場合には、その結果、コマンドが拒絶される。
【００３５】
図１８を参照すると、好ましい実施形態によるＣＡＰＩ許可削除処理操作の例が示され、ブロック１０００で開始する。ブロック１００２に示されるように、アプリケーション子クライアント（または、その系列の親、祖父母など）が、「許可削除」コマンドをクライアントのＣＡＰＩサーバ・レジスタを介してＣＡＰＩアダプタに送る。パラメータは、ＣＡＰＩ子クライアントＩＤ、およびエクステントのリストである。各エクステントについて、ＣＡＰＩ子許可ハンドル、エクステントの開始ＬＢＡおよびブロック数、ならびに、他のコマンド／アダプタ・リソースのリストを含む。各コマンド／リソースについて、ＣＡＰＩ子許可ハンドルを含む。ブロック１００４に示されるように、ＣＡＰＩアダプタは、要求元が系列内の親または子のいずれかであることを検証し、リスト内の許可を削除する。
【００３６】
図１９および図２０を参照すると、好ましい実施形態によるＣＡＰＩ許可読み出しコマンド処理操作の例が示されている。図１９に、読み出しコマンドのためのＣＡＰＩ許可操作が、全体として参照文字１１００で示されている。ＣＡＰＩ許可操作１１００の例は、ユーザ１１０２、ＯＳ１１０４、ファイル・システム１１０６、ハイパーバイザ１１０８、およびＣＡＰＩアダプタ１０２で示される。図２０のブロック１１０２に示されるように、ＯＳがファイル・システムおよびハイパーバイザに指示してファイルを開く。ブロック１１０４に示されるように、ハイパーバイザがＣＡＰＩ  ＩＤを提供し、ファイル・システムが許可チェックを行って許可情報およびファイル・ハンドル（ＦＨ）を返す。ブロック１１０６に示されるように、ＯＳが（ファイル・システムの指示により）許可作成リクエストを発行する。ブロック１１０８に示されるように、Ｌｓｅｅｋはユーザのファイル・システムのみを取り扱う。ブロック１１１０に示されるように、読み出しは、直接ＣＡＰＩアダプタに対して行われる。ブロック１１１２に示されるように、ＣＡＰＩアダプタは、ＣＡＰＩ  ＩＤ、許可ハンドル（ＡＨ）、エクステント（ファイル・システム許可）を検証する。ブロック１１１４に示されるように、ＣＡＰＩアダプタがその操作を行い、応答する。
【００３７】
図２１を参照すると、本発明の工業製品またはコンピュータ・プログラム製品１２００が示されている。コンピュータ・プログラム製品１２００は、フロッピー（Ｒ）・ディスク、光学読み取り可能なコンパクト・ディスクもしくはＣＤ−ＲＯＭの形での大容量読み出し専用メモリ、テープ、または別の同様のコンピュータ・プログラム製品などの記録媒体１２０２を含む、非一時的コンピュータ可読ストレージ媒体に有形に具現化されている。記録媒体１２０２は、図１および２のシステム１００内の好ましい実施形態のＣＡＰＩアダプタ１０２にコヒーレント・アクセラレータ・プロセッサ・インタフェース（ＣＡＰＩ）許可を実装するための方法を行うために、媒体１２０２上にプログラム手段１２０４、１２０６、１２０８、および１２１０を記憶する。
【００３８】
記録されたプログラム手段１２０４、１２０６、１２０８および１２１０により定められた一連のプログラム命令または１つもしくは複数の相互に関係するモジュールの論理アセンブリが、コンピュータ・システム１００に、コヒーレント・アクセラレータ・プロセッサ・インタフェース（ＣＡＰＩ）許可を好ましい実施形態のＣＡＰＩアダプタ１０２に実装するように命じる。
【００３９】
本発明について、図面に示される本発明の実施形態の詳細を参照しながら説明してきた。それらの詳細は、添付の特許請求の範囲で請求される本発明の範囲を限定することを意図しない。
【図１】
0006490213.tif 000002
【図２】
0006490213.tif 000003
【図３】
0006490213.tif 000004
【図４】
0006490213.tif 000005
【図５】
0006490213.tif 000006
【図６】
0006490213.tif 000007
【図７】
0006490213.tif 000008
【図８】
0006490213.tif 000009
【図９】
0006490213.tif 000010
【図１０】
0006490213.tif 000011
【図１１】
0006490213.tif 000012
【図１２】
0006490213.tif 000013
【図１３】
0006490213.tif 000014
【図１４】
0006490213.tif 000015
【図１５】
0006490213.tif 000016
【図１６】
0006490213.tif 000017
【図１７】
0006490213.tif 000018
【図１８】
0006490213.tif 000019
【図１９】
0006490213.tif 000020
【図２０】
0006490213.tif 000021
【図２１】
0006490213.tif 000022