(57)【要約】  データ・ブロックを記憶するための記憶素子を備える装置が提供され、各々のデータ・ブロックは、そのデータ・ブロックに関連付けられた、そのデータ・ブロックがケイパビリティを指定しているかどうかを識別するケイパビリティ・メタデータを有し、少なくとも１つのケイパビリティ・タイプは有界ポインタである。次に、複数の記憶素子を識別するバルク・ケイパビリティ・メタデータ操作に応答するように処理回路が配置され、複数の記憶素子に記憶されている各々のデータ・ブロックに関連付けられたケイパビリティ・メタデータに対する操作を実施する。したがってこれは、指定された単一の操作を介して、複数のケイパビリティ・メタデータに対する問合せ及び／又は修正操作の実施を可能にし、したがってこのようなケイパビリティ・メタデータに対するより有効なアクセスを提供する。
2019516181.tif 000002
【特許請求の範囲】
【請求項１】
データ・ブロックを記憶するための記憶素子であって、各々のデータ・ブロックが、前記データ・ブロックに関連付けられた、前記データ・ブロックがケイパビリティを指定しているかどうかを識別するケイパビリティ・メタデータを有し、少なくとも１つのケイパビリティ・タイプが有界ポインタである、記憶素子と、
複数の前記記憶素子を識別するバルク・ケイパビリティ・メタデータ操作に応答して、前記複数の記憶素子に記憶されている各々のデータ・ブロックに関連付けられた前記ケイパビリティ・メタデータに対する操作を実施する処理回路と、
を備える装置。
【請求項２】
前記バルク・ケイパビリティ・メタデータ操作がバルク問合せ操作であり、前記処理回路が、前記バルク問合せ操作に応答して、前記複数の前記記憶素子に記憶されている各々のデータ・ブロックに関連付けられた前記ケイパビリティ・メタデータを獲得し、且つ、前記獲得したケイパビリティ・メタデータを含む出力データを生成する、請求項１に記載の装置。
【請求項３】
前記バルク・ケイパビリティ・メタデータ操作がバルク修正操作であり、前記処理回路が、前記バルク修正操作に応答して、前記バルク修正操作のために指定された修正データにしたがって、前記複数の前記記憶素子に記憶されている各々のデータ・ブロックに関連付けられた前記ケイパビリティ・メタデータを修正する、請求項１に記載の装置。
【請求項４】
前記バルク修正操作が、前記複数の前記記憶素子に記憶されている各々のデータ・ブロックに関連付けられた前記ケイパビリティ・メタデータを、各々のデータ・ブロックがケイパビリティを指定していることを識別するようセットする、請求項３に記載の装置。
【請求項５】
前記バルク修正操作が、前記複数の前記記憶素子に記憶されている各々のデータ・ブロックに関連付けられた前記ケイパビリティ・メタデータを、各々のデータ・ブロックがケイパビリティ以外のデータを指定していることを識別するようクリアする、請求項３に記載の装置。
【請求項６】
前記修正データが、前記バルク修正操作によってアクセスされるケイパビリティ・メタデータ毎に、前記ケイパビリティ・メタデータに関して実施されることになる前記修正を識別する、請求項３に記載の装置。
【請求項７】
前記修正データが、
（ｉ）前記ケイパビリティ・メタデータを、前記関連するデータ・ブロックがケイパビリティを指定していることを識別するようセットする、
（ｉｉ）前記ケイパビリティ・メタデータを、前記関連するデータ・ブロックがケイパビリティ以外のデータを指定していることを識別するようクリアする、及び
（ｉｉｉ）前記ケイパビリティ・メタデータを不変のままにする、
の修正のうちの少なくとも２つのうちの１つを識別する前記バルク修正操作によってアクセスされるケイパビリティ・メタデータ毎に修正値を提供する、請求項６に記載の装置。
【請求項８】
前記処理回路が、条件が合致することを条件として前記バルク・ケイパビリティ・メタデータ操作を実施するように手配される、請求項１から７までのいずれか一項に記載の装置。
【請求項９】
前記条件が、
（ｉ）前記処理回路が所定の特権状態で動作している、
（ｉｉ）前記処理回路が所定の特権状態で動作している場合に設定することができる構成記憶素子が、前記バルク・ケイパビリティ・メタデータ操作が許可されていることを示す値を有している、
（ｉｉｉ）前記バルク・ケイパビリティ・メタデータ操作を指定している要求がバルク操作ケイパビリティを識別し、且つ、前記バルク・ケイパビリティ・メタデータ操作が許可されていることを前記バルク操作ケイパビリティが示している、
の条件のうちの少なくとも１つが真である場合に、合致したと決定される、請求項８に記載の装置。
【請求項１０】
前記記憶素子がメモリ・ロケーションである、請求項１から９までのいずれか一項に記載の装置。
【請求項１１】
前記複数のメモリ・ロケーションが有界ポインタへの参照によって指定され、前記処理回路が、前記複数のメモリ・ロケーションが前記有界ポインタによって識別されたアドレスの許容可能な範囲内に存在していることが決定されたときに、前記バルク・ケイパビリティ・メタデータ操作を実施するように手配される、請求項１０に記載の装置。
【請求項１２】
前記記憶素子が前記処理回路にアクセスすることができるケイパビリティ・レジスタである、請求項１から１１までのいずれか一項に記載の装置。
【請求項１３】
一連の命令に応答して、前記一連の命令によって要求される操作を前記処理回路に実施させるように、前記処理回路に発行するための制御信号を生成する復号回路をさらに備え、前記復号回路が、バルク・ケイパビリティ・メタデータ命令を受け取ったことに応答して、前記バルク・ケイパビリティ・メタデータ命令によって要求される前記バルク・ケイパビリティ・メタデータ操作を前記処理回路に実施させるために、前記処理回路に発行するための制御信号を生成する、請求項１から１２までのいずれか一項に記載の装置。
【請求項１４】
前記記憶素子がメモリ・ロケーションであり、前記バルク・ケイパビリティ・メタデータ命令が、その関連するケイパビリティ・メタデータが前記バルク・ケイパビリティ・メタデータ操作の対象になることになるメモリ・ロケーションの連続したシリーズを識別するアドレスを提供するレジスタを指定する、請求項１３に記載の装置。
【請求項１５】
前記バルク・ケイパビリティ・メタデータ命令が、前記連続したシリーズ中のメモリ・ロケーションの数を識別するフィールドを含む、請求項１４に記載の装置。
【請求項１６】
前記フィールドが、前記連続したシリーズ中のメモリ・ロケーションの前記数を示す値を含むレジスタに対する参照、及び前記連続したシリーズ中のメモリ・ロケーションの前記数を示す即値のうちの１つを提供する、請求項１５に記載の装置。
【請求項１７】
前記連続したシリーズ中のメモリ・ロケーションの数が前記装置の特性から暗黙的である、請求項１４に記載の装置。
【請求項１８】
前記特性が、前記処理回路にアクセスすることができるキャッシュのキャッシュ・ライン長である、請求項１７に記載の装置。
【請求項１９】
前記記憶素子がケイパビリティ・レジスタであり、前記バルク・ケイパビリティ・メタデータ命令が、その関連するケイパビリティ・メタデータが前記バルク・ケイパビリティ・メタデータ操作の対象になることになる前記ケイパビリティ・レジスタを識別するレジスタ識別子フィールドを含み、前記レジスタ識別子フィールドが、前記ケイパビリティ・レジスタを識別するために即値及びレジスタ識別子のうちの少なくとも１つを提供する、請求項１３に記載の装置。
【請求項２０】
前記レジスタ識別子フィールドが、
−前記ケイパビリティ・レジスタを識別するために使用されるマスク値、
−前記ケイパビリティ・レジスタを識別するために組み合わせて使用されるベース識別子及びカウント値、
のうちの１つを提供する、請求項１９に記載の装置。
【請求項２１】
前記バルク・ケイパビリティ・メタデータ命令がバルク問合せ命令であり、前記処理回路が、前記バルク問合せ命令を復号する際に前記復号回路によって生成される前記制御信号に応答してバルク問合せ操作を実施するように手配され、
前記バルク問合せ命令が宛先レジスタを識別し、前記処理回路が、前記バルク問合せ操作に応答して、前記複数の前記記憶素子に記憶されている各々のデータ・ブロックに関連付けられた前記ケイパビリティ・メタデータを獲得し、且つ、前記宛先レジスタに記憶するために、前記獲得したケイパビリティ・メタデータを含む出力データを生成する、
請求項１３に従属する場合の請求項１から２０までのいずれか一項に記載の装置。
【請求項２２】
前記バルク・ケイパビリティ・メタデータ命令がバルク修正命令であり、前記処理回路が、前記バルク修正命令を復号する際に前記復号回路によって生成される前記制御信号に応答してバルク修正操作を実施するように手配され、
前記バルク修正命令が修正データを識別する出所フィールドを識別し、前記処理回路が、前記バルク修正操作に応答して、前記出所フィールドによって識別された前記修正データに依存して、前記複数の前記記憶素子に記憶されている各々のデータ・ブロックに関連付けられた前記ケイパビリティ・メタデータを修正する、
請求項１３に従属する場合の請求項１から２１までのいずれか一項に記載の装置。
【請求項２３】
前記出所フィールドが、前記修正データを識別するために即値及びレジスタ識別子のうちの少なくとも１つを提供する、請求項２２に記載の装置。
【請求項２４】
前記複数の前記記憶素子に記憶されている各々のデータ・ブロックに関連付けられた前記ケイパビリティ・メタデータを獲得するために、前記処理回路がバルク問合せ操作を前記バルク・ケイパビリティ・メタデータ操作として実施するように手配され、前記処理回路が、ケイパビリティ非認識記憶デバイスに記憶するために、前記獲得したケイパビリティ・メタデータを含むデータを出力するようにさらに手配される、請求項１から２３までのいずれか一項に記載の装置。
【請求項２５】
ケイパビリティ非認識記憶デバイスから獲得される修正メタデータに依存して、前記複数の前記記憶素子に記憶されている各々のデータ・ブロックに関連付けられた前記ケイパビリティ・メタデータを修正するために、前記処理回路がバルク修正操作を前記バルク・ケイパビリティ・メタデータ操作として実施するように手配される、請求項１から２４までのいずれか一項に記載の装置。
【請求項２６】
前記処理回路が直接メモリ・アクセス（ＤＭＡ）回路であり、
前記バルク・ケイパビリティ・メタデータ操作がプロセッサ・コアによって指定され、メモリ・ロケーションの連続したシリーズに対して前記バルク・ケイパビリティ・メタデータ操作を実現するように、前記ＤＭＡ回路に１つ又は複数のトランザクションを発行させる、請求項１から１２までのいずれか一項に記載の装置。
【請求項２７】
データ・ブロックを記憶素子に記憶するステップであって、各々のデータ・ブロックが、前記データ・ブロックに関連付けられた、前記データ・ブロックがケイパビリティを指定しているかどうかを識別するケイパビリティ・メタデータを有し、少なくとも１つのケイパビリティ・タイプが有界ポインタであるステップと、
複数の前記記憶素子を識別するバルク・ケイパビリティ・メタデータ操作に応答して、前記複数の記憶素子に記憶されている各々のデータ・ブロックに関連付けられた前記ケイパビリティ・メタデータに対する操作を処理回路に実施させるステップと、
を含む、ケイパビリティ・メタデータに対する操作を実施する方法。
【請求項２８】
データ・ブロックを記憶するための記憶素子手段であって、各々のデータ・ブロックが、前記データ・ブロックに関連付けられた、前記データ・ブロックがケイパビリティを指定しているかどうかを識別するケイパビリティ・メタデータを有し、少なくとも１つのケイパビリティ・タイプが有界ポインタである、記憶素子手段と、
複数の前記記憶素子手段を識別するバルク・ケイパビリティ・メタデータ操作に応答して、前記複数の記憶素子手段に記憶されている各々のデータ・ブロックに関連付けられた前記ケイパビリティ・メタデータに対する操作を実施するための処理手段と、
を備える装置。
【請求項２９】
請求項１から２６までのいずれか一項に記載の装置に対応するプログラム命令のための仮想計算機実行環境を提供するようにコンピュータを制御するためのコンピュータ・プログラムを非一時的形態で記憶するコンピュータ・プログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本技法は、ケイパビリティ・メタデータ（capability metadata）に対する操作を実施するための装置及び方法に関する。
【背景技術】
【０００２】
特定のケイパビリティが所与のプロセスに対して定義され、定義されたケイパビリティ外の操作を実行しようと試みられた場合エラーをトリガすることができるケイパビリティ・ベース・アーキテクチャの関心が高まっている。ケイパビリティは様々な形態を取ることができるが、ケイパビリティの１つのタイプは有界ポインタ（bounded pointer）である（「ファット・ポインタ」と呼ぶことも可能である）。有界ポインタの場合、ポインタ値は、例えばアクセスされるデータ値又は実行される命令のアドレスを識別することができるか、又はこのポインタ値を使用してこれらのアドレスを決定することができる。しかしながらポインタ値は、ポインタ値を使用する際にアドレスの許容可能範囲を示す関連する範囲情報を有することも可能である。これは、例えばポインタから決定されるアドレスが特定の境界内に留まって挙動の安全性又は機能的適切性を維持することを保証するために有用であり得る。さらに、有界ポインタのポインタ値と関連して特定の許可／制限情報を指定することができる。有界ポインタのための範囲情報及び何らかの許可／制限情報はケイパビリティ情報と呼ぶことができ、ケイパビリティ・ベース・アーキテクチャにおいては、このような有界ポインタ（その関連するケイパビリティ情報を含む）はケイパビリティと呼ぶことができる。
【０００３】
ケイパビリティ・ベース・アーキテクチャにおいては、装置の記憶素子に記憶されている個々のデータ・ブロックと関連してケイパビリティ・メタデータを記憶することが知られている。ケイパビリティ・メタデータを使用して、関連するデータ・ブロックがケイパビリティを指定しているかどうか、又はその代わりにケイパビリティを表さないデータ（本明細書においては汎用データとも呼ばれる）を含んでいるかどうかを識別することができる。望ましい場合、ケイパビリティ・メタデータは特定の追加情報を指定することも可能である。
【０００４】
個別のデータ・ブロックにアクセスする場合、データ・ブロックがケイパビリティを表しているか、又は汎用データを表しているかどうかを決定するために関連するケイパビリティ・メタデータを参照することができる。しかしながらケイパビリティ・ベース・アーキテクチャを使用しているシステム内のケイパビリティ・メタデータにアクセスし、且つ、取り扱うための改良された機構を提供することが望ましいであろう。
【発明の概要】
【課題を解決するための手段】
【０００５】
第１の実例の構成では、データ・ブロックを記憶するための記憶素子であって、各々のデータ・ブロックが、そのデータ・ブロックに関連付けられた、データ・ブロックがケイパビリティを指定しているかどうかを識別するケイパビリティ・メタデータを有し、少なくとも１つのケイパビリティ・タイプが有界ポインタである、記憶素子と、複数の記憶素子を識別するバルク・ケイパビリティ・メタデータ操作に応答して、複数の記憶素子に記憶されている各々のデータ・ブロックに関連付けられたケイパビリティ・メタデータに対する操作を実施する処理回路と、を備える装置が提供される。
【０００６】
別の実例の構成では、データ・ブロックを記憶素子に記憶するステップであって、各々のデータ・ブロックが、そのデータ・ブロックに関連付けられた、データ・ブロックがケイパビリティを指定しているかどうかを識別するケイパビリティ・メタデータを有し、少なくとも１つのケイパビリティ・タイプが有界ポインタであるステップと、複数の記憶素子を識別するバルク・ケイパビリティ・メタデータ操作に応答して、複数の記憶素子に記憶されている各々のデータ・ブロックに関連付けられたケイパビリティ・メタデータに対する操作を処理回路に実施させるステップと、を含む、ケイパビリティ・メタデータに対する操作を実施する方法が提供される。
【０００７】
さらに他の実例の構成では、データ・ブロックを記憶するための記憶素子手段であって、各々のデータ・ブロックが、そのデータ・ブロックに関連付けられた、データ・ブロックがケイパビリティを指定しているかどうかを識別するケイパビリティ・メタデータを有し、少なくとも１つのケイパビリティ・タイプは有界ポインタである、記憶素子手段と、複数の記憶素子手段を識別するバルク・ケイパビリティ・メタデータ操作に応答して、複数の記憶素子手段に記憶されている各々のデータ・ブロックに関連付けられたケイパビリティ・メタデータに対する操作を実施するための処理手段と、を備える装置が提供される。
【０００８】
さらに他の実例の構成では、上で考察した第１の実例の構成による装置に対応するプログラム命令のための仮想計算機実行環境を提供するようにコンピュータを制御するためのコンピュータ・プログラムを非一時的形態で記憶するコンピュータ・プログラム製品が提供される。
【０００９】
本技法は、ほんの一例として、添付の図面に示されている本技法の実施例を参照してさらに説明される。
【図面の簡単な説明】
【００１０】
【図１】一実施例による装置のブロック図である。
【図２】有界ポインタ記憶素子のセット内のポインタ値を設定、又はこれにアクセスしようと試みられた場合エラーをトリガすることができる命令であって、そのポインタ値が、関連する範囲情報によって示される範囲の外のアドレスを指定するのに使用される命令のタイプの実例を示す。
【図３】一実施例による、有界ポインタに関連したタグ・ビットの使用を示す。
【図４】一実施例による、有界ポインタの形態を取るケイパビリティ内に提供される様々なフィールドを、関連するケイパビリティ・メタデータ情報と共に概略的に示す。
【図５Ａ】メモリ内の記憶素子上でバルク・タグ問合せ操作を実施するために、一実施例に従って提供することができる、ある命令内に提供されるフィールドを示す。
【図５Ｂ】メモリ内の記憶素子上でバルク・タグ問合せ操作を実施するために、一実施例に従って提供することができる、別の命令内に提供されるフィールドを示す。
【図６Ａ】ある実施例による、キャッシュのキャッシュ・ライン内の各々のデータ・ブロックと関連してタグ・ビット（ケイパビリティ・メタデータの実例）を記憶することができる方法を示す。
【図６Ｂ】別の実施例による、キャッシュのキャッシュ・ライン内の各々のデータ・ブロックと関連してタグ・ビット（ケイパビリティ・メタデータの実例）を記憶することができる方法を示す。
【図７】一実施例による、装置内のケイパビリティ・レジスタの形態を取る記憶素子上でバルク・タグ問合せ操作を実施するために使用される命令内に提供されるフィールドを概略的に示す。
【図８Ａ】メモリ内のメモリ・ロケーションの形態を取る記憶素子上でバルク・タグ修正操作を実施するために、一実施例に従って使用することができる命令のある形態内に提供されるフィールドを示す。
【図８Ｂ】メモリ内のメモリ・ロケーションの形態を取る記憶素子上でバルク・タグ修正操作を実施するために、一実施例に従って使用することができる命令の別の形態内に提供されるフィールドを示す。
【図８Ｃ】ケイパビリティ・レジスタの形態の記憶素子上でバルク・タグ修正操作を実施するために、一実施例に従って使用することができる命令内に提供されるフィールドを示す。
【図９Ａ】一実施例による、バルク・タグ問合せ操作を実施することによって獲得される被問合せタグ値、又はバルク・タグ修正操作中に適用されるタグ値の指示のいずれかを保持するように、汎用レジスタを埋めることができる、ある方法を示す。
【図９Ｂ】一実施例による、バルク・タグ問合せ操作を実施することによって獲得される被問合せタグ値、又はバルク・タグ修正操作中に適用されるタグ値の指示のいずれかを保持するように、汎用レジスタを埋めることができる、別の方法を示す。
【図１０】一実施例による、図９Ａに示されているような汎用レジスタ内の情報が、バルク・タグ修正操作を実施している間、解釈され得る方法の４つの実例を概略的に示す。
【図１１】一実施例による、バルク・タグ命令によって指定されたバルク・タグ操作を進めることが許可されるか否かを決定するために一実施例における処理回路によって実施することができるプロセスを示す流れ図である。
【図１２Ａ】一実施例による、図１１のステップ４５５を実現するために実施することができるステップを示す流れ図である。
【図１２Ｂ】一実施例による、図１１のステップ４５５を実現するために実施することができるステップを示す流れ図である。
【図１２Ｃ】一実施例による、図１１のステップ４５５を実現するために実施することができるステップを示す流れ図である。
【図１３】一実施例による、ケイパビリティを認識する記憶素子とケイパビリティ非認識の補助記憶装置の間で転送されるケイパビリティに関する分解プロセスと再構成プロセスの両方を概略的に示す。
【図１４】一実施例による、図１３の分解プロセスを概略的に示す流れ図である。
【図１５】一実施例による、図１３のケイパビリティの再構成のプロセスを概略的に示す流れ図である。
【図１６】代替実施例による、プロセッサ・パイプラインがバルク・タグ問合せ又は修正操作をＤＭＡ回路にオフロードして、ＤＭＡ回路に一連のトランザクションを介してそのバルク・タグ問合せ又は修正操作を実現させる装置である。
【図１７】一実施例による、装置の仮想計算機実施態様を概略的に示す。
【発明を実施するための形態】
【００１１】
添付の図を参照して実施例を考察する前に、実施例についての以下の説明が提供される。
【００１２】
既に言及したように、特定のケイパビリティが所与のプロセスに対して定義され、定義されたケイパビリティ外の操作を実行しようと試みられた場合エラーをトリガすることができるケイパビリティ・ベース・アーキテクチャの関心が高まっている。様々なタイプのケイパビリティを定義することができるが、ケイパビリティの１つのタイプは有界ポインタである（一実施例では、ポインタ値と関連する範囲及び許可情報の両方を組み込む）。このようなケイパビリティ・ベース・アーキテクチャを採用する装置は、典型的には、ケイパビリティを記憶するために使用される記憶素子（本明細書においては有界ポインタ記憶素子とも呼ばれる）を有することになる。記憶素子はレジスタ（本明細書においては有界ポインタ・レジスタ又はケイパビリティ・レジスタとも呼ばれる）であっても、及び／又は汎用メモリ中のメモリ・ロケーション、例えばスタックメモリ上の場所であってもよい。所望のケイパビリティにアクセスし、且つ、そのケイパビリティに依存している操作を実施するために、特定の命令を使用してこのような記憶素子を参照することができる。例えば有界ポインタを考えると、このような命令を実行することにより有界ポインタを回収することができ、次にその中のポインタ値を使用して、命令を実行している間に要求されるメモリ内のアドレスを導出することができる。ポインタ値を直接使用してメモリ・アドレスを識別することができ、或いはポインタ値を使用して、例えばポインタ値へのオフセットの追加によってメモリ・アドレスを導出することができる。次に、メモリ・アドレスが範囲情報によって指定された範囲内であり、且つ、許可情報中で指定されたすべての許可が合致することを条件として操作を進めることが許可されることになる。
【００１３】
ケイパビリティ・メタデータは、データ・ブロックがケイパビリティを表しているかどうか、又はその代わりに汎用データを表しているかどうかを識別するために、記憶素子に記憶されている個々のデータ・ブロックと関連して提供することができる。本明細書において説明される実施例によれば、装置は、バルク・ケイパビリティ・メタデータ操作を実施して、複数の記憶素子に関連付けられたケイパビリティ・メタデータのバルク問合せ及び／又は修正を許可するように配置される。
【００１４】
より詳細には、一実施例では、データ・ブロックを記憶するための記憶素子を備える装置が提供され、個々のデータ・ブロックは、そのデータ・ブロックに関連付けられた、前記データ・ブロックがケイパビリティを指定しているかどうかを識別するケイパビリティ・メタデータを有し、少なくとも１つのケイパビリティ・タイプは有界ポインタである。処理回路は、次に、複数の前記記憶素子を識別するバルク・ケイパビリティ・メタデータ操作に応答して、複数の記憶素子に記憶されている個々のデータ・ブロックに関連付けられたケイパビリティ・メタデータに対する操作を実施する。
【００１５】
説明される実施例によれば、特定のケイパビリティ・メタデータ及び／又は関連するデータ・ブロックをターゲットにした操作に応答して個別のケイパビリティ・メタデータにアクセスするのではなく、バルク・ケイパビリティ・メタデータ操作を指定して複数の記憶素子を識別することができる。処理回路は、次に、このようなバルク・ケイパビリティ・メタデータ操作に応答して、複数の記憶素子に記憶されている個々のデータ・ブロックに関連付けられたケイパビリティ・メタデータに対する操作を実施することができる。バルク・ケイパビリティ・メタデータ操作は、複数のケイパビリティ・メタデータを直接ターゲットにしており、操作中に関連するデータ・ブロックにアクセスする必要はない。したがってこれは、その関連するケイパビリティ・メタデータがアクセスされる複数の記憶素子を識別する単一のバルク要求に応答して、複数のケイパビリティ・メタデータに対する操作を実施するためのとりわけ有効な機構を提供する。
【００１６】
このような操作は様々な状況において有用であり得る。例えば操作は、ケイパビリティ認識記憶素子とケイパビリティ非認識補助記憶装置の間でメモリをページングする場合、又は固有ケイパビリティ・サポートが不足しているネットワーク内で仮想計算機を移行させる場合に有用であり得る。バルク・ケイパビリティ・メタデータ操作を提供することにより、このような操作の効率及び性能を著しく改善することができる。
【００１７】
バルク・ケイパビリティ・メタデータ操作は様々な形態を取ることができるが、一実施例ではバルク問合せ操作であり、処理回路は、バルク問合せ操作に応答して、複数の前記記憶素子に記憶されている個々のデータ・ブロックに関連付けられたケイパビリティ・メタデータを獲得し、且つ、獲得したケイパビリティ・メタデータを含む出力データを生成する。したがってこのようなバルク問合せ操作を実施する場合、識別された複数の記憶素子に関連する様々なケイパビリティ・メタデータが回収され、且つ、１つに集められて出力データを形成する。次に、様々な目的のために出力データを使用することができ、例えば汎用レジスタに出力データを書き込むことができ、汎用レジスタから出力データを補助記憶装置などのケイパビリティ非認識実体に書き出すことができ、或いは実際にいくつかの実施例では、このような補助記憶装置に出力データを直接書き込むことができる。
【００１８】
しかしながらバルク・ケイパビリティ・メタデータ操作はバルク問合せ操作である必要はない。代替実施例では、バルク・ケイパビリティ・メタデータ操作はバルク修正操作であり、処理回路は、バルク修正操作に応答して、バルク修正操作のために指定された修正データに基づいて、前記複数の前記記憶素子に記憶されている個々のデータ・ブロックに関連付けられたケイパビリティ・メタデータを修正する。したがってこのような実施例では、修正データを指定することができ、次にこの修正データを使用して、識別された複数の記憶素子の各々に関連付けられたケイパビリティ・メタデータが選択的に更新され、したがって識別された単一の操作に応答して複数のケイパビリティ・メタデータを更新するための極めて有効な機構を提供する。
【００１９】
バルク修正操作は様々な形態を取ることができる。一実施例では、バルク修正操作は、複数の記憶素子に記憶されている個々のデータ・ブロックに関連付けられたケイパビリティ・メタデータをセットして、個々のデータ・ブロックがケイパビリティを指定していることを識別することができ、或いは別法として個々のデータ・ブロックに関連付けられたケイパビリティ・メタデータをクリアして、個々のデータ・ブロックがケイパビリティ以外のデータ（本明細書においては汎用データとも呼ばれる）を指定していることを識別することができる。
【００２０】
代替実施例では、修正データは、バルク修正プロセスによってアクセスされるケイパビリティ・メタデータ毎に、そのケイパビリティ・メタデータに関して実施されることになる修正を識別することができる。したがってこのような実施例では、個々のケイパビリティ・メタデータに関して同じ修正を実施する必要はないが、その代わりにより細かい細分性で修正を指定することができる。
【００２１】
一実施例では、修正データは、以下の修正、即ち（ｉ）ケイパビリティ・メタデータをセットして、関連するデータ・ブロックがケイパビリティを指定していることを識別する、（ｉｉ）ケイパビリティ・メタデータをクリアして、関連するデータ・ブロックがケイパビリティ以外のデータを指定していることを識別する、及び（ｉｉｉ）ケイパビリティ・メタデータを不変のままにする、のうちの少なくとも２つのうちの１つを識別するバルク修正操作によってアクセスされるケイパビリティ・メタデータ毎に修正値を提供する。このような手法は、個別のケイパビリティ・メタデータがバルク修正プロセスの間に更新される方法に関して著しい柔軟性を提供する。
【００２２】
いくつかの実施例では、バルク・ケイパビリティ・メタデータ操作は無条件で実施することができるが、代替実施例では、処理回路は、条件が合致することを条件としてバルク・ケイパビリティ・メタデータ操作を実施するように配置することができる。バルク・ケイパビリティ・メタデータ操作の実施を条件付きにすることを可能にすることにより、これはプロセスの安全性を強化することができる。例えば、とりわけバルク修正操作を考えると、複数の記憶素子のためのケイパビリティ・メタデータを修正する能力は強力なツールであり、このようなバルク修正を実施する能力をある特定のシナリオに強制することが望ましいことがあり得ることは認識されよう。
【００２３】
例えば一実施例では、以下の条件、即ち（ｉ）処理回路が所定の特権状態で動作している、（ｉｉ）処理回路が所定の特権状態で動作している場合に設定することができる構成記憶素子が、バルク・ケイパビリティ・メタデータ操作が許可されることを示す値を有している、（ｉｉｉ）バルク・ケイパビリティ・メタデータ操作を指定している要求がバルク操作ケイパビリティを識別し、且つ、バルク・ケイパビリティ・メタデータ操作が許可されることをバルク操作ケイパビリティが示している、のうちの少なくとも１つが真である場合、条件が合致したことを決定することができる。このような手法により、必要に応じてバルク・ケイパビリティ・メタデータ操作を実施することができるシナリオを有効に強制することが可能である。
【００２４】
そのケイパビリティ・メタデータがバルク・ケイパビリティ・メタデータ操作によって取り扱われる記憶素子は様々な形態を取ることができる。例えば記憶素子は、一実施例では、処理回路にアクセスすることができるメモリ・ロケーションであってもよい。
【００２５】
一実施例では、有界ポインタを参照することによって複数のメモリ・ロケーションを指定することができ、処理回路は、複数のメモリ・ロケーションが有界ポインタによって識別されたアドレスの許容可能な範囲内に存在していることが決定されると、バルク・ケイパビリティ・メタデータ操作を実施するように配置される。したがってバルク・ケイパビリティ・メタデータ操作の実施が例えば既に考察した技法のうちの任意の技法を使用して条件付きにされるかどうかに無関係に、有界ポインタをも使用してメモリ・ロケーションが指定される場合、その関連するケイパビリティ・メタデータがバルク・ケイパビリティ・メタデータ操作によって取り扱われる複数のメモリ・ロケーションが、有界ポインタによって識別されたアドレスの許容可能な範囲内に存在することを保証することによって追加レベルのチェックを実施することができる。
【００２６】
いくつかのバルク・ケイパビリティ・メタデータ操作はメモリ・ロケーションに関して実現することができるが、代替実施例では、或いは追加として、処理回路にアクセスすることができるケイパビリティ・レジスタに関連付けられたケイパビリティ・メタデータに関して特定のバルク・ケイパビリティ・メタデータ操作を適用することも可能である。このようなケイパビリティ・レジスタは、ケイパビリティ、例えば既に言及した有界ポインタを記憶するように配置することができ、個々のケイパビリティ・レジスタは、個々のケイパビリティ・レジスタに関連付けられた、そのケイパビリティ・レジスタの現在の内容が実際にケイパビリティを表しているかどうか、又はその代わりに汎用データとして扱われるかどうかを識別するためのケイパビリティ・メタデータを有することになる。
【００２７】
バルク・ケイパビリティ・メタデータ操作を指定することができる多くの方法が存在している。しかしながら一実施例では、単一の命令を使用して個々のバルク・ケイパビリティ・メタデータ操作が指定される。例えば一実施例では、装置は、一連の命令に応答して処理回路に発行するための制御信号を生成し、前記一連の命令によって要求される操作を処理回路に実施させる復号回路をさらに備えることができる。復号回路は、バルク・ケイパビリティ・メタデータ命令を受け取ったことに応答して、前記バルク・ケイパビリティ・メタデータ命令によって要求されるバルク・ケイパビリティ・メタデータ操作を処理回路に実施させるために、処理回路に発行するための制御信号を生成するように配置することができる。したがって処理回路は、例えば、復号された命令によって要求される操作を実施するために復号回路によって生成される制御信号に応答するプロセッサ・コアであってもよい。復号回路がバルク・ケイパビリティ・メタデータ命令を復号すると、処理回路は、結果として得られる生成された制御信号に応答して、要求されるバルク・ケイパビリティ・メタデータ操作を実施することになる。このような手法は、単一の命令による、メモリ・ロケーション又はレジスタのいずれかであってもよい識別された複数の記憶素子に関連付けられた複数のケイパビリティ・メタデータに対して実施されるバルク問合せ及び／又は修正操作の指定を可能にすることにより、有意な性能及び符号密度利点を提供することができることは認識されよう。
【００２８】
そのケイパビリティ・メタデータがバルク・ケイパビリティ・メタデータ操作によってアクセスされ／取り扱われることになる複数の記憶素子を命令内で指定することができる多くの方法が存在している。例えば一実施例では、記憶素子はメモリ・ロケーションであり、バルク・ケイパビリティ・メタデータ命令は、その関連するケイパビリティ・メタデータがバルク・ケイパビリティ・メタデータ操作の対象になることになるメモリ・ロケーションの連続したシリーズを識別するアドレスを提供するレジスタを指定する。レジスタによって指定されるアドレスは様々な形態を取ることができるが、一実施例では例えば開始アドレスであってもよい。
【００２９】
連続したシリーズ中のメモリ・ロケーションの数を識別することができる様々な方法が存在している。例えば一実施例では、バルク・ケイパビリティ・メタデータ命令は、連続したシリーズ中のメモリ・ロケーションの数を識別するフィールドを含むことができる。したがってこのような例では、命令は、バルク・ケイパビリティ・メタデータ操作の対象になることになるメモリ・ロケーションの数を明確に識別することができる。
【００３０】
メモリ・ロケーションの数を識別するフィールドは様々な形態を取ることができる。例えばフィールドは、連続したシリーズ中のメモリ・ロケーションの数を示す値を含むレジスタに対する参照を提供することができる。別法として、連続したシリーズ中のメモリ・ロケーションの数を直接示す即値をフィールドの中で指定することも可能である。
【００３１】
代替実施例では、バルク・ケイパビリティ・メタデータ命令が連続したシリーズ中のメモリ・ロケーションの数を明確に識別することが要求されない場合がある。例えば一実施例では、メモリ・ロケーションのその数は装置の特性から暗黙的であり得る。メモリ・ロケーションの数を定義する装置の特性は様々な形態を取ることができるが、一実施例では特性は、処理回路にアクセスすることができるキャッシュのキャッシュ・ライン長である。このような手法は、例えばプロセッサのデータ・キャッシュの構造の利用を可能にすることになる。詳細には、このようなキャッシュがキャッシュ・ライン中に位置している個々のデータ・ブロックのためのケイパビリティ・メタデータを使用してキャッシュ・ライン情報を強化する場合、このような命令の使用を通してこのようなケイパビリティ・メタデータに対する管理操作を加速する可能性が存在することになり、これは、例えばケイパビリティ認識メモリ・システムと補助記憶装置の間、又はその逆の間でケイパビリティを移動させるために使用されるページング・コードの最適化に有用であり得る。
【００３２】
一実施例では、バルク・ケイパビリティ・メタデータ命令は、複数の記憶素子としてケイパビリティ・レジスタを識別する。このような実施例では、バルク・ケイパビリティ・メタデータ命令は、その関連するケイパビリティ・メタデータがバルク・ケイパビリティ・メタデータ操作の対象になることになるケイパビリティ・レジスタを識別するレジスタ識別子フィールドを含むことができ、前記レジスタ識別子フィールドは、ケイパビリティ・レジスタを識別するために即値及びレジスタ識別子のうちの少なくとも１つを提供する。複数のケイパビリティ・レジスタに関連付けられたケイパビリティ・メタデータに対するこのようなバルク操作を実施する場合、典型的には、レジスタをレジスタの連続したシーケンスにする要求事項は存在しないことになり、したがって個別のレジスタが識別される方法に関して著しい柔軟性が存在する。例えばマスク値を使用して、即値として、又はマスク値を含むレジスタを参照して、関連するレジスタを識別することが可能である。別法として、ベース・レジスタ識別子とカウント値の組合せを使用してレジスタを識別することも可能であり、ベース・レジスタ識別子又はカウント値のいずれかが汎用レジスタを参照して指定され、ベース・レジスタ識別子及びカウント値以外は、例えば即値によって指定される。
【００３３】
バルク・ケイパビリティ・メタデータ命令は様々な形態を取ることができる。一実施例では、バルク・ケイパビリティ・メタデータ命令はバルク問合せ命令の形態を取り、処理回路は、バルク問合せ命令を復号する際に復号回路によって生成される制御信号に応答してバルク問合せ操作を実施するように配置される。バルク問合せ命令は宛先レジスタを識別することができ、処理回路は、バルク問合せ操作に応答して、複数の前記記憶素子に記憶されている個々のデータ・ブロックに関連付けられたケイパビリティ・メタデータを獲得し、且つ、宛先レジスタに記憶するために、獲得したケイパビリティ・メタデータを含む出力データを生成する。したがって単一の命令に応答して、複数の記憶素子に関連付けられたケイパビリティ・メタデータを１つに集めて単一の宛先レジスタ内に記憶することができる。
【００３４】
いくつかの例では、バルク・ケイパビリティ・メタデータ命令はバルク修正命令であってもよく、処理回路は、バルク修正命令を復号する際に復号回路によって生成される制御信号に応答してバルク修正操作を実施するように配置される。バルク修正命令は、修正データを識別する出所フィールドを識別することができ、処理回路は、バルク修正操作に応答して、出所フィールドによって識別された修正データに基づいて、複数の前記記憶素子に記憶されている個々のデータ・ブロックに関連付けられたケイパビリティ・メタデータを修正する。
【００３５】
出所フィールドは、様々な方法で修正データを識別することができる。例えば出所フィールドは、修正データを識別するために即値及び／又はレジスタ識別子を提供することができる。一実施例では、記憶素子がメモリ・ロケーションである場合、汎用レジスタは、修正データを含むことが識別される。しかしながら記憶素子がケイパビリティ・レジスタである場合、一実施例では、修正データを識別するために即値及びレジスタ識別子のうちのいずれか又は両方を指定することができる。さらに他の実施例では、記憶素子がメモリ・ロケーションである場合、即値及びレジスタ識別子のうちのいずれか又は両方を使用して修正データを識別することができる。
【００３６】
処理回路がバルク問合せ操作をバルク・ケイパビリティ・メタデータ操作として実施するように配置される一実施例では、処理回路は、ケイパビリティ非認識記憶デバイスに記憶するために、獲得したケイパビリティ・メタデータを含むデータを出力するようにさらに配置することができる。処理回路は、ケイパビリティ非認識記憶デバイスに記憶するためにそのデータを直接出力することができ、或いは最初にその出力データを汎用レジスタに記憶することができ、汎用レジスタからその出力データをケイパビリティ非認識記憶デバイス上に送ることができる。
【００３７】
処理回路がバルク修正操作をバルク・ケイパビリティ・メタデータ操作として実施するように配置される一実施例では、使用される修正データはケイパビリティ非認識記憶デバイスから獲得することができる。一実施例では、修正データはケイパビリティ非認識記憶デバイスから直接獲得することができるが、代替実施例では、修正データは最初にケイパビリティ非認識記憶デバイスから汎用レジスタに書き込むことができ、次にバルク修正操作を実施している間、汎用レジスタから修正データが処理回路によって参照される。
【００３８】
処理回路が関連する復号回路によって復号される命令を実行するプロセッサ・コアである代替として、処理回路は、代替実施例では直接メモリ・アクセス（ＤＭＡ：ｄｉｒｅｃｔ  ｍｅｍｏｒｙ  ａｃｃｅｓｓ）回路であってもよい。このような実施例では、プロセッサ・コアによってバルク・ケイパビリティ・メタデータ操作を指定し、ＤＭＡ回路に１つ又は複数のトランザクションを発行させて、メモリ・ロケーションの連続したシリーズ上でバルク・ケイパビリティ・メタデータ操作を実現することができる。したがってこのような実施例では、プロセッサ・パイプラインがメモリに対するアクセスを有し、メモリもまたＤＭＡ回路にアクセスすることができる場合、プロセッサ・パイプラインはバルク・ケイパビリティ・メタデータ操作をＤＭＡ回路にオフロードすることができ、ＤＭＡ回路は、次に、要求された操作をＤＭＡ回路と関連するメモリ・ロケーションとの間の一連のトランザクションを介して実現する。したがってこのような実施例では、バルク・ケイパビリティ・メタデータ操作はバス・プロトコル・レベルとして効果的に表現され、メモリの領域に関連する一組のケイパビリティ・メタデータへのＤＭＡ回路によるアクセス／取扱いを許容する。
【００３９】
次に特定の実施例について、図を参照して説明する。
【００４０】
図１は、命令を処理するための処理パイプライン４を備えるデータ処理装置２の実例を概略的に示したものである。この実例では、処理パイプライン４は、フェッチ段６、復号段８、発行段１０、実行段１２及びライト・バック段１４を含む多数のパイプライン段を含むが、段の他のタイプ又は組合せを提供することができることは認識されよう。いくつかの実施例では、例えばレジスタ改名を実施するための改名段を含むことも可能である。処理される命令は段から段へ移動し、ある命令が１つの段で保留中である間、別の命令は、パイプライン４の異なる段で保留中であってもよい。
【００４１】
フェッチ段６は、レベル１（Ｌ１）命令キャッシュ２０から命令を取り込む。フェッチ段６は、通常、連続する命令アドレスから命令を逐次取り込むことができる。しかしながらフェッチ段は、分岐命令の結果を予測するための分岐予測器２２を有することも可能であり、フェッチ段６は、分岐がとられると予測されると、（非逐次）分岐ターゲット・アドレスから命令を取り込むことができ、或いは分岐がとられないと予測されると、次の逐次アドレスから命令を取り込むことができる。分岐予測器２２は、特定の分岐がとられる可能性が高いか否かを予測するための情報を記憶するための１つ又は複数の分岐履歴テーブルを含むことができる。例えば分岐履歴テーブルは、その前に実行された分岐の実際の結果を追跡するための、或いは分岐のためになされた予測の確信を表すためのカウンタを含むことができる。分岐予測器２２は、分岐命令のその前のターゲット・アドレスをキャッシュするための分岐ターゲット・アドレス・キャッシュ（ＢＴＡＣ：ｂｒａｎｃｈ  ｔａｒｇｅｔ  ａｄｄｒｅｓｓ  ｃａｃｈｅ）２４を含むことも可能であり、したがってこれらを同じ分岐命令の後続するターゲット・アドレス上で予測することができる。
【００４２】
取り込まれた命令は、命令を復号して復号された命令を生成する復号段８に引き渡される。復号された命令は、実行段１２を制御して適切な処理操作を実行するための制御情報を含むことができる。キャッシュ２０から取り込まれるいくつかのもっと複雑な命令に対して、復号段８は、これらの命令を複数の復号された命令にマップすることができ、これはマイクロ操作（μ操作又はｕ操作）として知られているものと思われる。したがってＬ１命令キャッシュ２０から取り込まれる命令と、パイプラインの後段によって見られる命令の間には１対１の関係が存在しない場合がある。一般に、本出願における「命令」の参照は、マイクロ操作を含むものとして解釈されたい。
【００４３】
復号された命令は、命令を実行するために要求されるオペランドが利用可能であるかどうかを決定し、且つ、オペランドを利用することができる場合、実行するための命令を発行する発行段１０に引き渡される。いくつかの実施例は順序正しい処理をサポートすることができ、したがって命令は、Ｌ１命令キャッシュ２０から命令が取り込まれたプログラム順序に対応する順序で実行するために発行される。他の実施例は狂った順序の実行をサポートすることができ、したがって命令は、プログラム順序とは異なる順序で実行段１２に発行することができる。狂った順序の処理は、オペランドを待機している間に早い段階の命令が立往生している間、そのオペランドを利用することができるプログラム順序におけるもっと後の命令を最初に実行することができるため、性能を改善するのに有用であり得る。
【００４４】
発行段１０は、命令が実行されて様々なデータ処理操作を実行する実行段１２に命令を発行する。例えば実行段は、整数値に対して算術又は論理操作を実行するための算術／論理ユニット（ＡＬＵ：ａｒｉｔｈｍｅｔｉｃ／ｌｏｇｉｃ  ｕｎｉｔ）３０、浮動小数点形態で表される値に対して操作を実行するための浮動小数点（ＦＰ：ｆｌｏａｔｉｎｇ−ｐｏｉｎｔ）ユニット３２、及びデータ値をレベル１（Ｌ１）データ・キャッシュ３６からレジスタ４０にロードするためのロード操作、又はデータ値をレジスタ４０からＬ１データ・キャッシュ３６に記憶するための記憶操作を実行するためのロード／記憶ユニット３４を含む多数の実行ユニット３０、３２、３４を含むことができる。これらは、提供され得る実行ユニットのタイプの単なるいくつかの実例にすぎず、多くの他の種類のタイプもまた提供され得ることは認識されよう。処理操作を実行するために、実行段１２は、一組のレジスタ４０からデータ値を読み出すことができる。次に、実行された命令の結果をライト・バック段１４によってレジスタ４０にライト・バックすることができる。
【００４５】
Ｌ１命令キャッシュ２０及びＬ１データ・キャッシュ３６は、複数のレベルのキャッシュを含むキャッシュ階層の一部であってもよい。例えばレベル２（Ｌ２）キャッシュ４４を提供することも可能であり、任意選択で他のレベルのキャッシュを提供することも可能である。この実例では、Ｌ２キャッシュ４４は、Ｌ１命令キャッシュ２０とＬ１データ・キャッシュ３６の間で共有されるが、他の実例は、個別のＬ２命令キャッシュ及びデータ・キャッシュを有することができる。取り込まれる命令がＬ１命令キャッシュ２０に存在しない場合、Ｌ２キャッシュ４４から命令を取り込むことができ、同様に命令がＬ２キャッシュ４４に存在しない場合、主メモリ５０から命令を取り込むことができる。同様に、ロード命令に応答して、データがＬ１データ・キャッシュ３６に存在しない場合、Ｌ２キャッシュ４４からデータを取り込むことができ、必要に応じてメモリ５０からデータを取り込むことができる。任意の知られているスキームを使用してキャッシュ階層を管理することができる。
【００４６】
プログラム命令及びデータ値を参照するためにパイプライン４によって使用されるアドレスは仮想アドレスであってもよいが、少なくとも主メモリ５０及び任意選択で少なくともいくつかのレベルのキャッシュ階層は物理的にアドレス指定することもできる。したがってトランスレーション・ルックアサイド・バッファ５２（ＴＬＢ：ｔｒａｎｓｌａｔｉｏｎ  ｌｏｏｋａｓｉｄｅ  ｂｕｆｆｅｒ）は、パイプライン４によって使用される仮想アドレスをキャッシュ又はメモリにアクセスするために使用される物理アドレスに翻訳するために提供することができる。例えばＴＬＢ５２は、仮想アドレス空間の対応するページの仮想ページ・アドレス、及び対応するページ内の仮想アドレスを物理アドレスに翻訳するために仮想ページ・アドレスがマップされるべき対応する物理ページ・アドレスを個々に指定する多数のエントリを含むことができる。例えば仮想アドレスを物理アドレスにマッピングする場合、仮想及び物理ページ・アドレスは、対応する仮想及び物理アドレスの最も重要な部分に対応し、残りの最も重要ではない部分は不変のままにし得る。アドレス翻訳情報と同様、個々のＴＬＢエントリも、アドレスの特定のページがパイプライン４の特定のモードでアクセス可能であるかどうかの指示などのアクセス許可を指定するいくつかの情報をも含むことができる。いくつかの実施例では、ＴＬＢエントリは、アドレスの対応するページの他の特性、例えば読出し又は書込み操作に応答して更新されるキャッシュ階層のレベルを定義するキャッシュ・ポリシー情報（例えばキャッシュがライト・バック・モード又はライト・スルー・モードで動作するべきかどうか）、又はデータ・アクセスがパイプライン４によって発行された順序と比較して、対応するページ内のアドレスへのデータ・アクセスをメモリ・システムによって整理し直すことができるかどうかを定義する情報などをも定義することができる。
【００４７】
図１は単一レベルＴＬＢ５２を示しているが、ＴＬＢの階層は、レベル１（ＬＩ）ＴＬＢ５２が多数の新しくアクセスされたページ内のアドレスを翻訳するためのＴＬＢエントリを含ことができるように提供することができ、レベル２（Ｌ２）ＴＬＢは、より多くのページのためのエントリを記憶するために提供することができることは認識されよう。要求されたエントリがＬ１ＴＬＢに存在しない場合、Ｌ２ＴＬＢからエントリを取り込むことができ、或いは階層中の他のＴＬＢから取り込むことができる。アクセスされるページのための要求されたエントリがどのＴＬＢにも存在しない場合、ページ・テーブル・ウォークを実施してメモリ５０内のページ・テーブルにアクセスすることができる。この技法には任意の知られているＴＬＢ管理スキームを使用することができる。
【００４８】
また、いくつかのシステムは複数のレベルのアドレス翻訳をサポートすることができ、したがって例えば第１のＴＬＢ（又はＴＬＢの階層）を使用して仮想アドレスを中間アドレスに翻訳することができ、１つ又は複数の他のＴＬＢを使用する第２のレベルのアドレス翻訳は、次に、中間アドレスをキャッシュ又はメモリにアクセスするために使用される物理アドレスに翻訳することができることも認識されよう。これは、例えばオペレーティング・システムによって第１のレベルのアドレス翻訳を管理することができ、ハイパーバイザによって第２のレベルのアドレス翻訳を管理することができる仮想化をサポートするために有用であり得る。
【００４９】
図１に示されているように、装置２は、一組の有界ポインタ・レジスタ６０を有することができる。その一組の有界ポインタ・レジスタは、図１では一組の汎用データ・レジスタ４０とは物理的に個別のものとして示されているが、一実施例では、同じ物理記憶装置を使用して、汎用データ・レジスタ及び有界ポインタ・レジスタの両方を提供することができる。
【００５０】
個々の有界ポインタ・レジスタ６０は、アクセスされるデータ値のアドレスを決定するために使用することができるポインタ値６２、及び対応するポインタ６２を使用する際にアドレスの許容可能範囲を指定する範囲情報６４を含む。有界ポインタ・レジスタ６０は、ポインタの使用に対する１つ又は複数の制限／許可を定義することができる制限情報６６（本明細書においては許可情報とも呼ばれる）を含むことも可能である。例えば制限６６を使用して、ポインタ６２を使用することができる命令のタイプ、又はポインタを使用することができるパイプライン４のモードを制限することができる。したがって範囲情報６４及び制限情報６６は、その範囲内でポインタ６２の使用が許容されるケイパビリティを定義すると見なすことができる。定義されたケイパビリティ外のポインタ６２を使用しようと試みられると、エラーをトリガすることができる。範囲情報６４は、例えばポインタが特定の知られている境界内に留まり、感知可能情報又は安全保護情報を含み得るメモリ・アドレス空間の他の領域へ漂遊しないことを保証するために有用であり得る。汎用データ・レジスタ及び有界ポインタ・レジスタの両方のために同じ物理記憶装置が使用される実施例の場合、一実施例では、ポインタ値６２は例えば対応する汎用レジスタのために使用される記憶位置と同じ記憶位置に記憶することができる。
【００５１】
図２は、許容可能範囲を使用してデータ又は命令に対する無許可アクセスを保護する命令のタイプの実例を示したものである。図２の一番上の部分に示されているように、特定の有界ポインタ・レジスタＰＲ１は、所与のポインタ値６２、及びこの実例では許容可能範囲の下部境界を画定する下部境界アドレス６８、及び許容可能範囲の上部境界を画定する上部境界アドレス６９を使用して指定されている範囲情報６４を含む。例えば境界６８、６９は、アドレス８００００〜８１０００の範囲を画定するために設定される。特定の命令が有界ポインタ・レジスタＰＲ１を参照し、ポインタ６２から決定されるアドレスがこの範囲外である場合、エラーをトリガすることができる。
【００５２】
例えば図２の部分Ａに示されているように、いくつかのシステムでは、ポインタ・レジスタ６０内のポインタ６２の値を範囲情報６４によって指定された範囲外の値に設定しようと試みられた場合エラーをトリガすることができる（ここではポインタがアドレスを直接指定することが仮定されている）。これは、ポインタ６２が指定された範囲外の何らかの値を取ることを回避し、したがってポインタを使用したすべてのアクセスは、許容された範囲内に安全に存在していることが保証され得る。別法として、図２の部分Ｂに示されているように、ポインタ６２のアドレスによって識別され、そのアドレスが指定された範囲外に存在する場合の位置へ命令がアクセスしようと試みるとエラーをトリガすることも可能である。したがって指定された範囲外の値へのポインタ６２の設定を依然として許容することができるが、ポインタ・アドレス（又はポインタから導出されるアドレス）におけるデータ・アクセスが試みられると、アドレスが許容された範囲外に存在している場合、エラーをトリガすることができる。他のシステムは、図２の部分Ａ及びＢに示されている両方のタイプの命令に応答してエラーをトリガすることができる。
【００５３】
範囲情報６４は異なる方法で設定することができる。例えば安全保護コード又はオペレーティング・システム或いはハイパーバイザは、所与のポインタのために許容される範囲を指定することができる。例えば命令設定アーキテクチャは、所与のポインタ６２のための範囲情報６４を設定又は修正するための多くの命令を含むことができ、これらの命令の実行は、特定のソフトウェア又は特定のモード或いはプロセッサ４の除外状態に制限することができる。範囲情報６４を設定又は修正するための任意の知られている技法を使用することができる。
【００５４】
ポインタを参照する特定の命令を実行する際に実行段１２で使用することができる一組の有界ポインタ記憶素子６０に加えて、命令がレベル１命令キャッシュ２０から取り込まれている際に、フェッチ段６でプログラム・カウンタ・ケイパビリティ（ＰＣＣ：ｐｒｏｇｒａｍ  ｃｏｕｎｔｅｒ  ｃａｐａｂｉｌｉｔｙ）レジスタ８０をも使用して同様の機能性を提供することができる。詳細には、プログラム・カウンタ・ポインタはフィールド８２に記憶することができ、ＰＣＣ８０は、一組の有界ポインタ記憶素子６０中のポインタの各々を使用して提供される範囲情報及び制限情報と同様、範囲情報８４及び任意の適切な制限情報８６をも提供する。
【００５５】
図３は、タグ・ビットを個別のデータ・ブロックと関連して使用して、これらのデータ・ブロックがケイパビリティ（即ち有界ポインタ及び関連する制限情報）を表しているかどうか、又は通常のデータを表しているかどうかを識別する方法を概略的に示したものである。詳細には、メモリ・アドレス空間１１０は、典型的には特定のサイズを有することになる一連のデータ・ブロック１１５を記憶することになる。単に実例による説明を目的として、この実例では、個々のデータ・ブロックは１２８ビットを含むことが仮定されている。個々のデータ・ブロック１１５と関連して、一実例では、タグ・ビットと呼ばれる、関連するデータ・ブロックがケイパビリティを表していることを識別するためにセットされ、関連するデータ・ブロックが通常のデータを表し、したがってケイパビリティとして扱われ得ないことを示すためにクリアされる単一ビットフィールドであるタグフィールド１２０が提供される。セット状態又はクリア状態と関連する実際の値は実施例に応じて様々であり得るが、単に実例による説明として、一実施例では、タグ・ビットが１の値を有している場合、それは、関連するデータ・ブロックがケイパビリティであることを示し、タグ・ビットが０の値を有している場合、それは、関連するデータ・ブロックが通常のデータを含んでいることを示すことは認識されよう。
【００５６】
ケイパビリティが図３に示されているケイパビリティ・レジスタ１００などの有界ポインタ・レジスタ６０（本明細書においてはケイパビリティ・レジスタとも呼ばれる）のうちの１つにロードされると、タグ・ビットはケイパビリティ情報と共に移動する。したがってケイパビリティがケイパビリティ・レジスタ１００中にロードされると、ポインタ１０２、範囲情報１０４及び制限情報１０６（以下、許可情報と呼ばれる）は、ケイパビリティ・レジスタ中にロードされることになる。さらに、そのケイパビリティ・レジスタと関連して、又はケイパビリティ・レジスタ内の特定のビットフィールドとして、その内容がケイパビリティを表していることを識別するようにタグ・ビット１０８がセットされることになる。同様に、ケイパビリティがメモリにストア・バックされると、関連するタグ・ビット１２０が、ケイパビリティが記憶されているデータ・ブロックと関連してセットされることになる。このような手法によれば、ケイパビリティと通常のデータとを区別することができ、したがって通常のデータがケイパビリティとして使用され得ないことを保証することができる。
【００５７】
図３では、タグ・ビットを含むタグフィールドが参照されているが、より一般的な実施例では、タグ・ビットは、個々のケイパビリティと結合することができるケイパビリティ・メタデータの実例である。したがって図４に示されているように、システムの記憶素子に記憶されているケイパビリティ１５０（ケイパビリティ・レジスタ６０又はメモリ・アドレス空間１１０内のメモリ・ロケーションのうちの１つであろうとなかろうと）は、ケイパビリティ１５０に関連付けられたケイパビリティ・メタデータ１５５を有することができる。ケイパビリティ・メタデータは、関連するデータ・ブロック１５０が実際にケイパビリティを表しているかどうか、又はその代わりに汎用データとして解釈すべきかどうかを識別することになり、一実施例では、その情報は、ケイパビリティ・メタデータ１５５内のタグ・ビットとして符号化されることになる。ケイパビリティ・メタデータは、一実施例ではタグ・ビットのみを含むことができるが、代替実施例では、必要に応じて追加情報を含むことも可能である。例えばデータのタイプはさらに細分することができ、ケイパビリティ・メタデータは、例えば特定の特権レベル、細粒度化された許可、例えば読出しのみ、等々による所有権を示す。
【００５８】
ケイパビリティは様々な形態を取ることができるが、図４に示されている実施例ではケイパビリティは有界ポインタである。示されているように、有界ポインタは、ポインタ値１６０、範囲情報１６５及び許可属性１７０で構成されている。範囲情報及び許可属性は、集合的に有界ポインタの属性と呼ぶことができる。
【００５９】
一実施例では、図１に示されている実行パイプライン１２は、識別された複数の記憶素子上でバルク・ケイパビリティ・メタデータ操作を実施するために命令を実行するように配置され、識別された複数の記憶素子に記憶されている個々のデータ・ブロックに関連付けられたケイパビリティ・メタデータに対する操作が実施されることになる。バルク・ケイパビリティ・メタデータ操作は様々な形態を取ることができる。例えばバルク・ケイパビリティ・メタデータ操作の一形態はバルク問合せ操作であってもよいが、バルク・ケイパビリティ・メタデータ操作の別の実例形態はバルク修正操作であってもよい。
【００６０】
図５Ａ及び５Ｂは、メモリ・システム内の一連のメモリ・ロケーションに関連付けられたケイパビリティ・メタデータに対してバルク問合せ操作を実施するために、実行段１２によって実行することができる２つの異なるタイプの命令内に提供することができるフィールドを示したものである。これらのメモリ・ロケーションは、図１に示されているメモリ５０内に存在していても、或いはキャッシュ３６、４４のレベルのうちの１つに存在していてもよい。
【００６１】
図５Ａに示されているように、一連の制御信号を生成するために復号段８によって復号するために、ＣＱｕｅｒｙＴａｇｓＭ命令と呼ばれる命令を図１のレベル１命令キャッシュ２０を介して取り込むことができ、これらの一連の制御信号は、引き続いて実行段１２を制御して、命令によって識別された複数のデータ・ブロックに関連付けられた複数のタグ・ビットに対して問合せ操作を実施することになる（この実施例では、例えば図３を参照して既に考察したように、個々のケイパビリティ・メタデータはタグ・ビットを含むことが仮定されている）。図５Ａに示されているように、演算コードフィールド２０５は、命令をＣＱｕｅｒｙＴａｇｓＭ命令として識別する。フィールド２１０を使用してアドレスが識別され、このアドレスから、そのタグ・ビットが問い合わされることになる複数のメモリ・ロケーションを決定することができる。一実施例では、そのアドレスは、一連のメモリ・ロケーションのための開始アドレスであり、その開始アドレスは、ケイパビリティ・レジスタ６０のうちの１つ、又は汎用レジスタ４０のうちの１つのいずれかの中で指定することができ、フィールド２１０は、そのレジスタのための識別子を含む。一実施例では、アドレスは、ケイパビリティメモリ・ロケーション、即ち図３のメモリ・アドレス空間１１０内に示されているデータ・ブロック１１５のうちの１つの開始に整列されることになる。代替実施例では、整列した方法で開始アドレスを指定する要求事項は存在しないこともあり、その代わりに指定されたアドレスを整列させないすべてのビットは無視することができ、したがってフィールド２１０の中で指定されたアドレスを整列したアドレスに効果的に変換することができる。
【００６２】
図５Ａの命令の実例では、そのタグ・ビットが問い合わされるメモリ・ロケーションの数がフィールド２１５の使用を通して命令内で明確に定義される。一実施例では、フィールド２１５は、問い合わされることになるタグの数をその内容が識別する汎用レジスタを識別することができる。別法として、即値をフィールド２１５内で指定して、問い合わされることになるタグの数を直接識別することも可能である。
【００６３】
次に、汎用レジスタ４０を識別するために他のフィールド２２０が提供され、このフィールド２２０の中に問合せ結果が出力されることになる。したがって識別されたメモリ・ロケーションの各々のためのタグ・ビットを回収するために一連の操作を実行段１２が実施すると、次にこれらのタグ・ビットがまとめて出力データ値中に照合され、この出力データ値が出力されて汎用レジスタ４０のうちの１つに記憶される。
【００６４】
望ましい場合、命令２００内で（また、実際、本明細書において説明されている任意の命令内で）、ソース・レジスタのうちの１つを宛先レジスタと同じになるように指定することができる。したがって例えば汎用レジスタがフィールド２１５の中に指定されて、問い合わされることになるタグの数を識別する場合、問合せ結果が書き込まれるレジスタになるようにその同じ汎用レジスタを指定することができる（例えばフィールド２１５、２２０を結合して単一のフィールドを形成することができる）。これは、命令の符号化空間要求事項に対する強制を低減することができる。
【００６５】
図５Ａの命令２００の実例では、そのタグが問い合わされることになるメモリ・ロケーションの数を明確に設定することができるが、代替実施例では、その数は暗黙的であってもよく、したがって例えば命令が実行される装置の特性から導出することができる。図５Ｂにこのような命令の実例が示されており、「ＤＣ＿ＣＱｕｅｒｙＴａｇｓＭ」命令２２５が示されている。演算コード２３０は命令をＤＣ＿ＣＱｕｅｒｙＴａｇｓＭ命令として識別するが、フィールド２３５は、図５Ａの命令２００内のフィールド２１０と同じ目的を果たし、したがってそのタグ・ビットが問い合わされることになる一連のメモリ・ロケーションのための開始アドレスを識別する。しかしながらこの実例では、問い合わせるタグの数を識別するための個別のフィールドは存在せず、その代わりにバルク問合せ操作中にアクセスされるタグの数は、図１に示されているレベル１データ・キャッシュ３６などの関連するデータ・キャッシュのキャッシュ・ライン長から決定される（命令名に使用されている「ＤＣ」という用語には、これがバルク問合せ命令の一タイプであることを伝えることが意図されており、問合せタグの数はデータ・キャッシュのキャッシュ・ライン・サイズで決まる）。キャッシュ・ライン・サイズは、例えばプロセッサが利用することができるシステム・レジスタのうちの１つの中で指定することができる（参照数表示９０によって図１に指示されている）。
【００６６】
一実施例では、フィールド２３５の中で指定された開始アドレスは、キャッシュ・ライン長細分性に整列され、その結果として、命令が実行されると、キャッシュ・ライン内に保持されているデータ・ブロックの各々に関連付けられたタグ・ビットが問い合わされ、且つ、次にフィールド２４０内に指定されている汎用レジスタ中に出力される出力値中に照合される。別法として、フィールド２３５の中で指定された開始アドレスがキャッシュ・ライン長細分性に整列されない場合、代替実施例では、アドレスを非整列にさせるアドレス内のビットは無視することができ、したがってアドレスを整列したアドレスに効果的に変換することができる。
【００６７】
図６Ａ及び６Ｂは、個々のデータ・ブロックに関連付けられたタグ・ビットをデータ・キャッシュのデータＲＡＭ（ランダム・アクセス・メモリ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））内の個々のキャッシュ・ラインのキャッシュ・ライン情報内に組み込むことができる２つの実例方法を示したものである。図６Ａに示されている実例では、データＲＡＭ２５０は複数のキャッシュ・ライン２５５を含み、個々のキャッシュ・ラインは、複数のデータ・ブロック（例えば実例として図３に示されている複数の１２８ビット・データ・ブロック）を含む。図６Ａに示されている実例では、個々のタグ・ビットは、個々のデータ・ブロックの終わりに加えられている（別法として、個々のタグ・ビットは、個々のデータ・ブロックの始めに存在させることも可能である）。したがって必要なタグ・ビット情報を組み込むべくキャッシュ・ラインの有効長が延長される。
【００６８】
図６Ａに示されている実施例では、様々なタグ・ビットがそれらの対応するデータ・ブロックを使用して配置されているが、図６Ｂに示されている代替実例では、様々なタグ・ビットは、すべてデータＲＡＭ２６０の個々のキャッシュ・ライン２６５の最後の部分２７０の中に含まれている。したがって個々のキャッシュ・ライン中のデータ・ブロックは順々に加えられており、タグ・ビット情報はキャッシュ・ラインの終わりで照合される（代替実施例では、タグ・ビット情報は、キャッシュ・ライン内の任意の適切なポイントで照合することができ、例えばキャッシュ・ラインの始まりで照合することができることは認識されよう）。図６Ａ及び６Ｂは、タグ・ビット情報をキャッシュ・ライン・コンテンツ内に含むことができる単なる２つの実例配置にすぎないこと、任意の他の適切なスキームを採用することができることは認識されよう。
【００６９】
図５Ａ及び５Ｂに示されている命令には、一連のメモリ・ロケーションに関連付けられたタグ・ビットに対して操作することが意図されているが、装置は、バルク・タグ問合せ操作を実施するためにケイパビリティ・レジスタに対して操作する命令の実行をサポートすることも可能である。図７にこのような命令の１つが示されており、とりわけ命令ＣＱｕｅｒｙＴａｇｓＲ３００が指定されており、この命令ＣＱｕｅｒｙＴａｇｓＲ３００は、一連のケイパビリティ・レジスタに関連する複数のタグ・ビットの問合せを実施するように配置されている（これらの命令がメモリ・ロケーションに関して操作していることを示す図５Ａ及び５Ｂの命令の末尾の「Ｍ」の述語と対照してみると、命令の末尾の「Ｒ」の述語は、それがケイパビリティ・レジスタに対して操作していることを指示している）。
【００７０】
フィールド３０５は、命令をＣＱｕｅｒｙＴａｇｓＲ命令として識別する演算コードを含む。次に、フィールド３１０を使用して、そのタグ・ビットが問い合わされることになる複数のケイパビリティ・レジスタが識別される。その複数のケイパビリティ・レジスタがフィールド３１０内で識別される方法は実施例によって様々である。例えばそれらの複数のケイパビリティ・レジスタは、問い合わされることになる複数のレジスタをその内容が識別する汎用レジスタを参照して識別することができ、或いはフィールド３１０内に特に組み込まれた即値によって識別することができる。実際、汎用レジスタと即値の組合せを使用して、問い合わされることになるレジスタを指定することができる。
【００７１】
図７の下半分にフィールド３１０内のレジスタを識別する２つの実例方法が概略的に示されている。第１の実例では、例えば汎用レジスタの内容又は即値のいずれかによって指定することができるマスク値３２０が提供される。マスク値を使用して、問い合わされることになるレジスタを直接識別することができる。例えばマスク値の個々のビットは、レジスタ・ファイル内の１つのレジスタに対応することが可能であり、そのビットがセットであるか又はクリアであるかどうかが、そのレジスタがそのタグ・ビットを問い合わさせることになるかどうかを決定する。例えば個々のセット・ビットは、そのタグ・ビットが問い合わされることになるレジスタを識別することができる。装置内に複数の個別のレジスタ・ファイルが存在する場合、任意選択のレジスタ・ファイル識別子３２５を指定して、マスク値３２０を適用するレジスタ・ファイルを識別することができる。このようなマスク値の使用を通して、そのタグ・ビットが問い合わされることになる任意の複数のケイパビリティ・レジスタを指定することができることは認識されよう。
【００７２】
図７には代替配置もまた示されており、フィールド３１０は、実際に２つのサブフィールド、即ちベース・レジスタ識別子を識別する第１のサブフィールド３３０、及びカウント値を識別する第２のサブフィールド３３５を組み込むことができる。組合せでは、これらのフィールドを使用して、ベース・レジスタ識別子によって識別されるレジスタから始まる一連の複数のレジスタを識別することができる。サブフィールド３３０、３３５のうちの一方は、汎用レジスタを使用してその内容を識別することができ、もう一方は、例えば即値を提供することができる。この場合も、複数のレジスタ・ファイルが装置内に提供される場合、任意選択の他のフィールド３４０を使用して、そのレジスタが操作されることになる特定のレジスタ・ファイルを識別することができる。
【００７３】
図５Ａ及び５Ｂの命令と同様、図７の命令３００は、問合せ結果が書き込まれることになる汎用レジスタが識別されるフィールド３１５を含む。
【００７４】
図５Ａ、５Ｂ及び７の実例では、命令は、複数の記憶素子に関連付けられたタグ・ビットを回収し、次にこれらのタグ・ビットを出力して汎用レジスタに記憶するためにバルク問合せ操作を実施させるバルク問合せ命令である。装置内に提供することができる別のタイプの命令は、バルク修正命令であり、復号段８によって生成される制御信号に応答して実行段１２で実行されると、識別された個々の記憶素子に関連付けられたタグ・ビットがバルク修正命令によって指定された修正データに従って選択的に修正されることになる。
【００７５】
図８Ａ、８Ｂ及び８Ｃに３つのこのようなバルク・タグ修正命令が示されており、これらは概ね、それぞれ図５Ａ、５Ｂ及び７の等価バルク問合せ命令に対応している。
【００７６】
詳細には、図８Ａは、一連のメモリ・ロケーションに関連付けられたタグ・ビットに対してバルク・タグ修正操作を実施するために使用することができるＣＭｏｄＴａｇｓＭ命令３５０を示したものであり、メモリ・ロケーションの数、したがって操作されることになるタグ・ビットの数が命令内で明確に識別される。したがって演算コード３５５は命令をＣＭｏｄＴａｇｓＭ命令として識別し、一方、フィールド３６０、３６５は、概ね図５Ａの命令２００のフィールド２１０、２１５に対応している。したがってこれらの２つのフィールドは、集合的に開始アドレス及び修正されることになるタグの数を識別する。次にフィールド３７０は修正データを含む汎用レジスタを識別し、したがってバルク・タグ修正操作中に適用されることになる更新されたタグ値の指示を提供する。なされることになるタグ・ビット修正を、フィールド３７０内で識別される汎用レジスタ内に指定されるビットを使用して決定することができる方法に関するさらなる詳細については、図１０を参照して後で考察される。
【００７７】
図８Ｂは、この場合も一連のメモリ・ロケーションに関連付けられたタグ・ビットに対してバルク・タグ修正を実施するために使用することができるＤＣ＿ＣＭｏｄＴａｇｓＭ命令３７５のフォーマットを示したものであるが、この実例では、操作されることになるタグ・ビットの数は、装置の特性、詳細には装置のデータ・キャッシュのうちの１つの中のキャッシュ・ラインのキャッシュ・ライン長から暗黙的である。演算コード３８０は命令をＤＣ＿ＣＭｏｄＴａｇｓＭ命令として識別し、一方、フィールド３８５は、図５Ｂの命令２２５のフィールド２３５と同じ目的を果たし、したがって一連のメモリ・ロケーションのための開始アドレスを識別する。フィールド３９０はフィールド３７０と同じ目的を果たし、したがってタグ値がバルク・タグ修正操作中に更新される方法をその内容が識別する汎用レジスタを識別する。
【００７８】
図８Ａ及び８Ｂの命令は、一連のメモリ・ロケーション上でバルク・タグ修正操作を実施させるが、図８Ｃに示されている命令は、その代わりに一組のケイパビリティ・レジスタ６０内の複数のケイパビリティ・レジスタに関連付けられたタグ・ビットに対して操作する。詳細には、図８ＣはＣＭｏｄＴａｇｓＲ命令４００を示しており、演算コード４０５は、命令をＣＭｏｄＴａｇｓＲ命令として識別する。フィールド４１０は、図７の命令３００のフィールド３１０と同じ目的を果たし、したがってそのタグ・ビットがバルク修正操作の対象になることになる複数のレジスタを識別する。次にフィールド４１５は、タグ値がバルク・タグ修正操作中に修正される方法を識別する。フィールド４１５は、単に、図８Ａ及び図８Ｂに示されている命令のフィールド３７０、３９０と同じ方法で汎用レジスタに対する参照を含むことができるが、代替実施例では、フィールド４１５は即値を指定することも可能であり、或いは即値と汎用レジスタの組合せを使用して、なされることになる修正を識別することも可能である。原理上、図８Ａ及び８Ｂに示されている命令のフィールド３７０、３９０は、汎用レジスタと即値の組合せをも使用して、なされることになる更新を識別することができるが、即値と組み合わせた汎用レジスタの使用は、バルク・タグ修正操作を施すために指定することができるケイパビリティ・レジスタの不連続の性質が与えられると、ケイパビリティ・レジスタ・コンテンツ上でバルク・タグ修正を実施する場合により有効であり得ることが分かっている。
【００７９】
バルク・タグ問合せ操作を実施する場合に、問合せ結果のために識別される汎用レジスタ内にタグ・ビットが記憶される方法、又は修正データ・ビットがバルク・タグ修正操作のために識別される汎用レジスタ内で表現される方法は、様々な形態を取ることができる。図９Ａはパックド・フォーマットを示したものであり、最下位ビットから始まる個々のビットは、問い合わされるタグ・ビット（レジスタを使用してバルク・タグ問合せ操作の結果が蓄積される場合）又は個別の修正データ（汎用レジスタをソース・レジスタとして使用して、バルク・タグ修正操作中に使用される修正データを識別する場合）を識別する。したがって汎用レジスタ４２０内に一連のビット４２５が提供される。レジスタ内のアクティブ・ビットの数は、そのタグ・ビットが問い合わされているか又は修正されている記憶素子の数で決まることになり、したがってレジスタ４２０のより高いビットのうちのいくつかは使用されないことがある。図９Ａでは、最下位ビット位置から始まるパックド・フォーマットが示されているが、代替実施例では、そのパックド・フォーマットは最上位ビットから始まり、したがって最下位ビットの特定の数は使用されないことがあり得ることは認識されよう。
【００８０】
図９Ｂは、汎用レジスタ４３０が情報の一連のブロックを含む代替手法を示したものであり、この実例では、一連の個別のバイト及び個々のバイト中の特定のビット４３５を使用して、（バルク・タグ問合せ操作の実例では）問い合わされるタグ・ビットのうちの１つ、又は（バルク・タグ修正操作の実例では）修正データのうちの１つが識別される。個々のバイト内の他のビットは、必要に応じて他の情報のために使用することができ、或いは使用されないこともある。
【００８１】
図１０は、バルク・タグ修正操作を実施している間に個別のタグ・ビットに対してなされることになる更新を修正データ・ビットを使用して識別することができる方法をより詳細に示す線図である。実例による説明のために図９Ａのパックド・フォーマットが示されているが、この原理は、図９Ｂのアンパックド・フォーマットにも等しく適用される。一連のビット４２５を解釈するための４つの実例オプションが図１０に示されている。個々のビット４２５は、修正されることになるタグ・ビットのうちの１つに対応している。オプションＡによれば、ビット４２５が論理０値にある場合、対応するタグ・ビットは、関連するデータ・ブロックがケイパビリティを表していないことを識別するためにクリアされる。それとは逆にビット４２５が論理１値にある場合、対応するタグ・ビットは、関連するデータ・ブロックがケイパビリティとして解釈されるべきであることを識別するためにセットされる。対応するデータ・ブロックがケイパビリティであることを識別するためにタグ・ビットが論理１にセットされ、関連するデータ・ブロックがケイパビリティではないことを識別するために論理０値にクリアされる実施例では、更新は、移動操作を介して効果的に実施することができ、それによりバルク・タグ更新操作の間、レジスタ４２０内の関連するビット４２５の内容が対応するタグ・ビット中へ移動される。
【００８２】
オプションＢは、ビット４２５が論理０値にある場合、対応するタグ・ビットは非修正状態のままにされるシナリオを示したものである。したがってその対応するタグ・ビットは、それが既にセットされている場合、セット状態で保持されることになるが、さもなければクリア状態で保持されることになる。それとは逆にビット４２５が論理１値を有している場合、これは、タグ・ビットがクリアされることになる。一実施例では、このオプションは、ＢＩＣ（ＢＩｔ  Ｃｌｅａｒ）操作の使用を通して実現することができる。
【００８３】
オプションＣによれば、ビット４２５が論理０値にある場合、対応するタグ・ビットは非修正状態のままにされ、一方、ビット４２５が論理１値にある場合、タグ・ビットがセットされる。このオプションは、一実施例ではＯＲＲ操作の使用を通して実現することができる。
【００８４】
オプションＤは、原理上、必要に応じて使用することができる他のオプションを示したものであるが、他のオプションＡ乃至Ｃよりケイパビリティ・タグ・ビットの修正に対する実際的な用途が少ないかもしれない。オプションＤによれば、ビット４２５が論理０値を有している場合、対応するタグ・ビットは非修正状態のままにされ、一方、タグ・ビット４２５が論理１値を有している場合、対応するタグ・ビットの値が交換され、したがってそれが既にセットされている場合はクリアされ、それが既にクリアされている場合はセットされる。このような操作は、一実施例ではＸＯＲ操作によって実現することができる。
【００８５】
一実施例では、バルク・タグ操作の実施は無条件であってもよいが、代替実施例では、装置は、バルク・タグ操作を進めることが許可される前に、特定の条件が合致しなければならないように配置することができる。図１１は、バルク・タグ命令の実行の許可に先立って１つ又は複数のチェックが実施される実例実施態様を示す流れ図である。ステップ４５０で、バルク・タグ命令が受け取られたかどうかが決定される。ステップ４５５で、次に指定された命令によって要求されたバルク操作の実行が許可されるかどうかが決定される。詳細には、実例として図１２Ａ乃至１２Ｃを参照して後で考察されるように、バルク・タグ命令のうちの少なくともいくつかを実行し得る際に様々な制限を課すことができる。
【００８６】
制限はすべてのタイプのバルク・タグ命令に等しく適用することができ、或いはより面倒な制限を特定のタイプのバルク・タグ命令の使用に課すことができる。例えばいくつかの実施態様では、極めて厳しい制限をバルク・タグ修正命令の使用に課すことが適切であり、一方、バルク・タグ問合せ命令の使用は、それほど強くは強制されないようである。これは、データ・ブロックに関連付けられたタグ・ビットを修正する能力に対する厳格な制御が汎用データをケイパビリティに変換する能力に課されない場合、ケイパビリティ・ベース・アーキテクチャによってもたらされる安全保護が潜在的に妥協され得るため、このような制御がしばしば重要であることによるものである。詳細には、バルク・タグ修正命令の実行は、それが、データの複数のブロックと関連してタグ・ビットを設定することによる複数のケイパビリティの生成を可能にし得るため、潜在的に極めて強力なツールである。
【００８７】
ステップ４５５で、命令によって要求されたバルク操作が許可されないことが決定されると、ステップ４６５でフォールト状態が生じることが決定される。これは、例えば例外を取ることによってプロセッサにフォールトを立てさせることを含み得る。
【００８８】
命令によって要求されたバルク操作が許可されることが決定されると、任意選択でステップ４６０で、任意の他の必要なチェックを実施することができる。例えば有界ポインタを使用して、一連のメモリ・ロケーションに対して実施されることになるバルク・タグ操作のための開始アドレスを識別する場合、バルク・タグ命令によって識別された一連のメモリ・ロケーションが許容可能範囲内であること、任意の許可属性が満たされることを保証するために、有界ポインタの範囲及び許可属性がチェックされることになる。ステップ４６０で実施することができる他のチェックの別の実例として、任意のメモリ管理ユニット（ＭＭＵ：ｍｅｍｏｒｙ  ｍａｎａｇｅｍｅｎｔ  ｕｎｉｔ）アクセス許可をチェックして、これらのアクセス許可が満たされていることを保証することができる。他のチェックを実施して、決定されたメモリ・アドレス範囲に関してメモリ・フォールトが生じていないことを保証することができる。他の必要なチェックのうちの何らかのチェックに合格しなかった場合、プロセスは再びステップ４６５へ進行し、そこでフォールト状態が生じる。しかしながらさもなければプロセスはステップ４７０へ進行し、指定されたバルク・タグ命令によって要求されたバルク操作が実施される。
【００８９】
図１２Ａ乃至１２Ｃは、バルク・タグ命令の使用に課すことができるいくつかの実例制限を示したものであり、詳細には図１２Ａ乃至１２Ｃの各々は、図１１のステップ４５５を異なる実施例の中で実現するために取り得るステップを示している。最初に図１２Ａを考察すると、ステップ５００で、バルク・タグ命令によって要求されたバルク操作が識別される。次にステップ５０５で、プロセッサが所定の高い特権状態で動作しているかどうかが決定される。所定の高い特権状態は、実施例に応じて様々な形態を取ることができるが、例えば仮想計算機タイプ環境を考えると、所定の高い特権状態はハイパーバイザ・レベルであってもよい。プロセッサが所定の高い特権状態で動作していないことが決定されると、プロセスはステップ５１５へ進行し、そこでフォールトが生じる。ステップ５１５は図１１のステップ４６５に対応している。しかしながらプロセッサが所定の高い特権状態にある場合、ステップ５１０で、実施する必要がある任意の他のチェック（図１１のステップ４６０を参照して既に考察したチェックなど）の対象になるバルク操作が実施される。
【００９０】
図１２Ｂは代替手法を示したものであり、ステップ５２０、５３０及び５３５は、図１２Ａのステップ５００、５１０及び５１５に対応しているが、試験５０５は試験５２５によって置き換えられており、詳細には、識別されたバルク操作の実施を許可するために特権構成レジスタが設定されているかどうかが決定される。特権構成レジスタは、例えば、所定の特権状態で動作している場合にプロセッサによる設定が可能なレジスタであってもよく、したがってその値は、その所定の特権状態で動作しているプロセッサによってのみ修正することができる。識別されたバルク操作が許可されていることを構成レジスタの内容が示していると仮定すると、プロセスはステップ５３０へ進行するが、さもなければステップ５３５でフォールトが立てられる。
【００９１】
既に言及したように、異なるタイプのバルク・タグ操作には異なる制限を課すことができる。したがって異なる特権構成レジスタ又は特権構成レジスタ内の異なるフィールドを使用して、異なるタイプのバルク操作のための許可を識別することができる。したがって例えば特権構成レジスタは、バルク・タグ問合せ操作が許可され、しかしバルク・タグ修正操作は許可されないことを識別することができる。
【００９２】
図１２Ｃは、バルク操作ケイパビリティが定義される別の代替手法を示したものである。既に言及したように、ケイパビリティは、プロセッサが利用することができる一組の権利を効果的に識別し、ほとんどのケイパビリティは既に説明した有界ポインタの形態を取ることができるが、すべてのケイパビリティが有界ポインタである必要はない。その代わりにケイパビリティは、特定の機能性との関係で特定の権利を単に識別するものとして定義され得る。したがって例えばケイパビリティ・レジスタ６０のうちの１つの中に保持され、バルク・タグ操作のための入力として指定され得るバルク操作ケイパビリティが定義され得る。したがってバルク・タグ命令は、既に考察した様々な他のオペランドの指定に加えて、例えばそのオペランドのうちの１つとしてバルク操作ケイパビリティを識別することができる。このような配置では、以下のステップ５４０で、要求されたバルク操作が識別され、ステップ５４５で、バルク・タグ命令によって識別されたバルク操作ケイパビリティが関連するケイパビリティ・レジスタから回収され、次にその内容を決定するために解析される。次にステップ５５０で、バルク操作ケイパビリティが識別されたバルク操作の実施を許可するかどうかが決定される。識別されたバルク操作の実施が許可される場合、プロセスはステップ５５５へ進行し、さもなければステップ５６０でフォールトが立てられる。
【００９３】
バルク操作ケイパビリティは、任意の形態のバルク・タグ操作が許可されるか否かを示すためにセットされる許可ビットを有することができ、或いはその代わりにバルク・タグ修正操作及びバルク・タグ問合せ操作のための異なる許可ビットを提供することができる。
【００９４】
バルク操作ケイパビリティは、一連のメモリ・ロケーションに対して実施されることになるバルク・タグ操作に関してチェックすることができる範囲情報を識別することも可能であり、その範囲情報が合致しない場合、ステップ５６０で再びフォールトが立てられる。しかしながら一実施例では、このような範囲情報はバルク操作ケイパビリティ内では要求されず、その代わりに図５Ａ、５Ｂ、８Ａ又は８Ｂを参照して既に考察した命令フォーマットを採用する場合、ケイパビリティ・レジスタを使用して一連のメモリ・ロケーションの開始アドレスを識別することができ、そのケイパビリティ・レジスタの範囲情報を図１１の後続するステップ４６０の一部としてチェックすることができる。
【００９５】
例えば図３を参照して既に考察したように、ケイパビリティがメモリとケイパビリティ・レジスタの間で移動されると、タグ・ビットは、ケイパビリティと共に移動して、データの関連するブロックが実際にケイパビリティであることを識別する。しかしながらいくつかの実施態様では、例えばメモリ内のすべてのケイパビリティ情報を保持するためには空間が不十分であるため、或いはハイバーネーションをサポートする場合、ケイパビリティをメモリからディスクなどの補助記憶装置中に記憶する必要があり得る。一実施例では、これには、個々のケイパビリティを個別のデータ及びタグ部分に分解し、且つ、タグを補助記憶装置内のデータとして扱う必要がある。これは図１３に概略的に示されており、図３を参照して既に説明した手法によれば、ケイパビリティがケイパビリティ・レジスタ６００とメモリ６０５の間で移動されると、タグ・ビット６１５は個々のデータ・ブロック６１０と共に移動する。したがってメモリ６０５内のデータの個々のブロックは、ケイパビリティ又は汎用データのいずれかを表しているものとして識別することができる。データ・ブロックが補助記憶装置６２５へ移動されると、分解プロセス６２０を使用してケイパビリティがデータ６２４及びタグ情報６２２に分解され、タグ情報はデータとして扱われる。したがって補助記憶装置内では、情報は単にデータとして存続し、補助記憶装置はケイパビリティ非認識である。
【００９６】
補助記憶装置に記憶されているデータからケイパビリティを再構成する場合、再構成プロセス６３０を実施する必要があり、この再構成プロセス６３０は、ケイパビリティの使用を通して利用することができる安全保護が妥協されないことを保証するために強制され得る。図１５を参照して後でより詳細に考察されるように、既に説明したバルク・タグ修正命令は、このようなケイパビリティ再構成目的のために使用することができ、これらの命令の使用は、図１１を参照して既に考察した方法論の使用を通して強制され得る（例えば図１２Ａ乃至１２Ｃを参照して既に説明した技法を使用して図１１のステップ４５５を実現する）。再構成操作を実施することができることは、再構成操作６３０が要求される時点で決定されると仮定すると、ステップ６３０でケイパビリティを再構成し、且つ、共用メモリ６０５中にライト・バックすることができる（後でより詳細に考察されるように、一実施例では再構成は、再構成されたケイパビリティが次に共用メモリ６０５中に出力される前に、ケイパビリティ・レジスタを使用して生じる）。
【００９７】
図１４は分解プロセスを示す流れ図であり、図１４の右側の略図は、この流れ図に示されているステップの各々によって実施されるプロセスをさらに示したものである。
【００９８】
ステップ６５０で、複数の記憶位置のためのタグ値を汎用レジスタ中に集めるためにバルク・タグ問合せ命令が実行される。したがって図１４の右側に示されているように、メモリ・アドレス空間６６５内のメモリ・ロケーションの連続したシーケンスのためにタグ・ビットがアクセスされ、且つ、回収され、次に汎用レジスタ６７０内に記憶するために照合され得る。
【００９９】
次にステップ６５５で、その汎用レジスタ６７０の内容が補助記憶装置６７５に書き出される。この時点で補助記憶装置は、そのデータを単に汎用データとして扱い、ケイパビリティには気がつかない。
【０１００】
ステップ６６０で、次に標準書出し操作を使用して、その関連するタグ・ビットがステップ６５０におけるバルク・タグ問合せ操作の対象になった一連のメモリ・ロケーション内のデータ・ブロックの各々が補助記憶装置６７５に書き出される。一実施例では、実施態様は、メモリ・アドレス空間からレジスタ中へのこれらのデータ・ブロックのローディング、及びその後のレジスタから補助記憶装置へのそれらの書出しを含むことになる。
【０１０１】
図１５は、一実施例による図１３の再構成操作６３０を示す流れ図である。図１４の場合と同様、図１５の右側の略図は、図１５のステップの各々で実施される操作を示したものである。ステップ７００で、一連のロード操作を使用して複数のデータ・ブロックが補助記憶装置７２０からケイパビリティ・レジスタ７２５内の対応する複数のセットのケイパビリティ・レジスタ中にロードされ、これらのケイパビリティ・レジスタに関連付けられたタグ・ビットは、データ・ブロックが現在ケイパビリティを表していないことを識別するために論理０値にクリアされる。
【０１０２】
次にステップ７０５で、ロード操作を使用して、複数のタグ値、詳細にはケイパビリティ・レジスタ７２５中にロードされたデータ・ブロックの各々と結合されることになるタグ値を表すデータが補助記憶装置７２０から汎用レジスタ７３０中にロードされる。
【０１０３】
次にステップ７１０で、例えば図８Ｃを参照して既に考察したバルク・タグ修正命令を実行することによってバルク・タグ修正プロセスが実施され、識別されたケイパビリティ・レジスタは、ケイパビリティ・レジスタ７２５のセットからの関連するケイパビリティ・レジスタである。命令は、バルク・タグ修正操作の間に使用されることになる修正データを含むものとして汎用レジスタ７３０をも識別する。図１１の上記考察によれば、識別されたバルク・タグ修正操作を進めることが許可されることをチェックするために、ステップ７１０を実施している間に１つ又は複数のチェックを実施することができる。しかしながらこれらのチェックに合格したと仮定すると、ステップ７１０でバルク・タグ修正操作を実施することにより、関連するケイパビリティ・レジスタ７２５の各々に関連付けられたタグ値が汎用レジスタ７３０に保持されているデータに基づいて修正されることになる。これは、複数のデータ・ブロックがケイパビリティとして識別されることになる（一実施例では、すべてのデータ・ブロックが、それらがケイパビリティであることを識別するためにセットされるそれらのタグ・ビットを有することができる）。したがってステップ７１０を実施している間に、補助記憶装置７２０から回収された情報からケイパビリティが効果的に再生成される。次にステップ７１５で、ケイパビリティ・レジスタ・コンテンツをそれらの関連するタグ・ビットと共にメモリ・アドレス空間７３５へ移動させることができる。
【０１０４】
図１５を参照して考察した実施例では、タグを更新するために使用される修正データは最初に汎用レジスタ７３０中に記憶されるが、代替実施例では、タグ値をメモリから関連するケイパビリティ・レジスタ・タグ位置中に直接ロードすることができるようにバルク・タグ修正操作を修正することができる。同様の方法で操作を提供して、ケイパビリティ・タグ情報を汎用データのブロックとしてケイパビリティ・レジスタからメモリ中に直接記憶することができる（介在する汎用レジスタを使用することなく）。
【０１０５】
図１６は、バルク・タグ問合せ操作又はバルク・タグ修正操作を実施するためにプロセッサ・コアがバルク・タグ命令を実行するのではなく、プロセッサ・コアがそのタスクを関連するＤＭＡ回路にオフロードすることができる代替実施例を示したものである。詳細には、図１６に示されているように、プロセッサ・パイプライン７５０は、メモリ管理ユニット７５５を介して１つ又は複数のレベルのキャッシュ７６０と接続され、次に相互接続７６５を介してメモリ７７０と接続される。ＭＭＵ７５５は、図１を参照して既に考察したＴＬＢ構造５２を組み込むことができ、したがってプロセッサ・パイプラインによって発行される仮想アドレスをキャッシュ／メモリ・システム上に送られる物理アドレスに変換することができる。この実施例によれば、プロセッサ・パイプラインがバルク・タグ問合せ又は修正操作の実施を希望する場合、プロセッサ・パイプラインは、点線の経路７８０を介してＤＭＡ回路７７５に適切な要求を発行して、ＤＭＡ回路による、要求された操作のタイプの識別及びそのタグ・ビットがバルク・タグ操作の対象になることになる一連のメモリ・アドレスの識別を可能にする十分な情報を提供することができる。ＤＭＡ回路は、次に、バルク・タグ問合せ又は修正操作を実現するために、相互接続７６５を介してメモリ・システム７７０に一連のトランザクション７８０を発行する。個々のトランザクションは、メモリ７７０からＤＭＡ回路７７５へ戻す少なくとも１つの応答と共に、ＤＭＡ回路からメモリへの要求の発行を含むことになる。バルク・タグ問合せ操作の場合、応答は、問い合わされたタグ情報を組み込むことができる。バルク・タグ修正操作の場合、ＤＭＡ回路によって発行される要求には、メモリ中のタグ・ビットを更新するために要求される必要な修正データが付随することになり、応答は、メモリ・システムからの、修正が実施されたことを確認するための肯定応答信号の形態を取ることになる。
【０１０６】
この実施例によれば、バルク・タグ問合せ／修正操作は、プロセッサ・パイプライン７５０の代わりにＤＭＡ回路７７５などのバス・マスタ・デバイスによるこのような操作の実施を可能にするバス・プロトコル・レベルで表現される。
【０１０７】
図１７は、使用することができる仮想計算機実施態様を示したものである。既に説明した実施例は、関係する技法をサポートする特定の処理ハードウェアを動作させるため装置及び方法によって本技法を実現するが、ハードウェア・デバイスのいわゆる仮想計算機実施態様を提供することも可能である。これらの仮想計算機実施態様は、典型的には、仮想計算機プログラム８１０をサポートするホスト・オペレーティング・システム８２０を動作させるホスト・プロセッサ８３０上で動作する。合理的な速度で実行する仮想計算機実施態様を提供するためには、しばしば強力な大型プロセッサが必要であるが、このような手法は、両立性又は再使用の理由で別のプロセッサに特有のコードを動作させたい場合などの特定の状況において正当化され得る。仮想計算機プログラム８１０は、仮想ハードウェア・インタフェースをゲスト・プログラム８００に提供し、この仮想ハードウェア・インタフェースは、仮想計算機プログラム８１０によってモデル化されているデバイスである実ハードウェアによって提供されることになるハードウェア・インタフェースと同じハードウェア・インタフェースである。したがって上で説明したバルク・タグ／バルク・ケイパビリティ・メタデータ命令を含むプログラム命令は、仮想計算機プログラム８１０を使用してゲスト・プログラム８００内から実行して、仮想計算機ハードウェアとのそれらの相互作用をモデル化することができる。ゲスト・プログラム８００はベア・メタル・プログラムであっても、或いは別法としてゲスト・プログラム８００は、ホストＯＳ８２０が仮想計算機アプリケーション８１０を動作させる方法と同様の方法でアプリケーションを動作させるゲスト・オペレーティング・システムであってもよい。異なるタイプの仮想計算機が存在し、いくつかのタイプでは仮想計算機は、ホストＯＳ８２０を必要とすることなく、ホスト・ハードウェア８３０上で直接動作することも認識されよう。
【０１０８】
上で説明した実施例から、このような実施例は、ケイパビリティ・アーキテクチャ中のタグ・ビットなどのケイパビリティ・メタデータへのより最適なアクセスを可能にすることは認識されよう。説明された操作は様々なシナリオに有用であり、例えばメモリを補助記憶装置からタグ付きメモリ・ロケーションへ、又はこれらのタグ付きメモリ・ロケーションから補助記憶装置へページングする場合、或いは固有ケイパビリティ・サポートが不足しているネットワーク内で仮想計算機を移行させる場合に有用であり得る。説明された実施例は、ケイパビリティ位置の範囲の問合せ、又はバルク中における取扱いを許可するために実行することができる多くの命令を提示している。２つの個別のグループの命令が説明されており、１つはバルク中の操作のケイパビリティメモリ・ロケーションへの適用であり、もう１つはバルク中の操作のケイパビリティ・レジスタ位置への適用である。
【０１０９】
本出願においては、「ように構成された」という語は、定義された操作を実行することができる構成を装置の要素が有していることを意味するために使用されている。この文脈においては、「構成」は、ハードウェア又はソフトウェアの相互接続の配置又は方法を意味している。例えば装置は、定義された操作を提供する専用ハードウェアを有することができ、或いはプロセッサ又は他の処理デバイスは、機能を実施するようにプログラムすることができる。「ように構成された」は、定義された操作を提供するために装置要素を何らかの方法で変更する必要があることを意味していない。
【０１１０】
以上、本明細書において、添付の図面を参照して本発明の例証実施例について詳細に説明したが、本発明はこれらの厳密な実施例に限定されないこと、当業者によって、添付の特許請求の範囲で定義されている本発明の範囲及び精神を逸脱することなく様々な変更、追加及び修正をそれらに加えることができることを理解されたい。例えば独立請求項の特徴を使用して、本発明の範囲を逸脱することなく従属請求項の特徴の様々な組合せを実施することができる。
【図１】
2019516181.tif 000003
【図２】
2019516181.tif 000004
【図３】
2019516181.tif 000005
【図４】
2019516181.tif 000006
【図５Ａ】
2019516181.tif 000007
【図５Ｂ】
2019516181.tif 000008
【図６Ａ】
2019516181.tif 000009
【図６Ｂ】
2019516181.tif 000010
【図７】
2019516181.tif 000011
【図８Ａ】
2019516181.tif 000012
【図８Ｂ】
2019516181.tif 000013
【図８Ｃ】
2019516181.tif 000014
【図９Ａ】
2019516181.tif 000015
【図９Ｂ】
2019516181.tif 000016
【図１０】
2019516181.tif 000017
【図１１】
2019516181.tif 000018
【図１２Ａ】
2019516181.tif 000019
【図１２Ｂ】
2019516181.tif 000020
【図１２Ｃ】
2019516181.tif 000021
【図１３】
2019516181.tif 000022
【図１４】
2019516181.tif 000023
【図１５】
2019516181.tif 000024
【図１６】
2019516181.tif 000025
【図１７】
2019516181.tif 000026
【国際調査報告】
2019516181.tif 000027
2019516181.tif 000028
2019516181.tif 000029