JP6177355B2 - 擬似乱数生成操作を実施するための命令 - Google Patents
擬似乱数生成操作を実施するための命令 Download PDFInfo
- Publication number
- JP6177355B2 JP6177355B2 JP2015562431A JP2015562431A JP6177355B2 JP 6177355 B2 JP6177355 B2 JP 6177355B2 JP 2015562431 A JP2015562431 A JP 2015562431A JP 2015562431 A JP2015562431 A JP 2015562431A JP 6177355 B2 JP6177355 B2 JP 6177355B2
- Authority
- JP
- Japan
- Prior art keywords
- operand
- instruction
- value
- register
- memory
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 230000006870 function Effects 0.000 claims description 107
- 238000000034 method Methods 0.000 claims description 57
- 238000004590 computer program Methods 0.000 claims description 20
- 239000000463 material Substances 0.000 claims description 17
- 238000010899 nucleation Methods 0.000 claims description 9
- 238000003860 storage Methods 0.000 description 80
- 238000012545 processing Methods 0.000 description 39
- 238000004422 calculation algorithm Methods 0.000 description 37
- 238000013519 translation Methods 0.000 description 17
- 230000014616 translation Effects 0.000 description 17
- 238000004364 calculation method Methods 0.000 description 13
- 238000010586 diagram Methods 0.000 description 12
- 239000003607 modifier Substances 0.000 description 12
- 230000007246 mechanism Effects 0.000 description 10
- 230000008569 process Effects 0.000 description 10
- 238000004891 communication Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 7
- 238000007667 floating Methods 0.000 description 7
- 230000008901 benefit Effects 0.000 description 6
- 230000000875 corresponding effect Effects 0.000 description 6
- 238000006243 chemical reaction Methods 0.000 description 5
- 230000000295 complement effect Effects 0.000 description 5
- 230000008859 change Effects 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 230000015572 biosynthetic process Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 230000007774 longterm Effects 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 238000007781 pre-processing Methods 0.000 description 3
- 230000003139 buffering effect Effects 0.000 description 2
- 238000004883 computer application Methods 0.000 description 2
- 125000004122 cyclic group Chemical group 0.000 description 2
- 230000001934 delay Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 238000006073 displacement reaction Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000012884 algebraic function Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 150000001875 compounds Chemical class 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000036541 health Effects 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000002250 progressing effect Effects 0.000 description 1
- 238000005215 recombination Methods 0.000 description 1
- 230000006798 recombination Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 229920000638 styrene acrylonitrile Polymers 0.000 description 1
- 210000003813 thumb Anatomy 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/58—Random or pseudo-random number generators
- G06F7/582—Pseudo-random number generators
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/06—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
- H04L9/0643—Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/58—Random or pseudo-random number generators
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30018—Bit or string instructions
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/06—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
- H04L9/065—Encryption by serially and continuously modifying data stream elements, e.g. stream cipher systems, RC4, SEAL or A5/3
- H04L9/0656—Pseudorandom key sequence combined element-for-element with data sequence, e.g. one-time-pad [OTP] or Vernam's cipher
- H04L9/0662—Pseudorandom key sequence combined element-for-element with data sequence, e.g. one-time-pad [OTP] or Vernam's cipher with particular pseudorandom sequence generator
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0861—Generation of secret information including derivation or calculation of cryptographic keys or passwords
- H04L9/0869—Generation of secret information including derivation or calculation of cryptographic keys or passwords involving random numbers or seeds
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2209/00—Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
- H04L2209/24—Key scheduling, i.e. generating round keys or sub-keys for block encryption
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Optimization (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Pure & Applied Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Power Engineering (AREA)
- Executing Machine-Instructions (AREA)
- Storage Device Security (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Detection And Correction Of Errors (AREA)
Description
1つ又は複数の態様は、一般に、コンピューティング環境内での処理に関し、具体的には、コンピュータ用途又は他のタイプの用途に用いられる擬似乱数の生成と関連した処理に関する。
擬似乱数は、乱数のように見えるが、真に乱数ではない数である。擬似乱数は、統計的に乱数をもたらす決定論的計算プロセスによって生成される数である。これらの数は決定論的プロセスによって生成されるので、開始点が既知であれば、後日所与の数列を再現することができる。つまり、特定の関数及びシード値が与えられると、関数により同じ数列が生成される。
擬似乱数は、例として、シミュレーション、暗号作成法、及びプロシージャル生成(procedural generation)などの多数のコンピュータ用途に用いられる。これらの用途に用いることができる、擬似乱数を生成するための種々の実装が存在する。これらの実装として、例えば、ライブラリ・サブルーチン、並びに、IBM(登録商標)z/Architecture対応プロセッサなどの幾つかのプロセッサ上で利用可能なCipher Message with Chaining命令の限定機能が挙げられる
「z/Architecture Principles of Operation」、IBM(登録商標)出版番号SA22−7832−09、第10版、2012年9月
「Power ISA(商標) Version 2.06 Revision B」、インターナショナル・ビジネス・マシーンズ・コーポレーション、2010年7月23日
「Intel(登録商標) 64 and IA−32 Architectures Developer’s Manual:Vol. 2B,Instructions Set Reference,A−L」、注文番号253666−045US、2013年1月
「Intel(登録商標) 64 and IA−32 Architectures Developer’s Manual:Vol. 2B,Instructions Set Reference,M−Z」、注文番号253667−045US、2013年1月
「Recommendation for Random Number Generation Using Deterministic Random Bit Generators」、National Institute of Standards and Technology(NIST)、NIST Special Publication 800−90A、2012年1月
「Secure Hash Standard(SHS)」、Federal Information Processing Standards Publication、FIPS PUB 180−4、National Institute of Standards and Technology Gaithersburg、MD、2012年3月
マシン命令を実行するための方法、システム、及びコンピュータ・プログラムを提供する。
特許請求されるような、マシン命令を実行するための方法、システム及びコンピュータ・プログラムを提供することにより、従来技術の欠点が克服され、利点がもたらされる。
1つ又は複数の態様に関連する方法及システムも、本明細書で説明され、特許請求される。さらに、1つ又は複数の態様に関連するサービスも説明され、本明細書で特許請求され得る。
1つ又は複数の態様の技術を通じて、付加的な特徴及び利点が実現される。他の実施形態及び態様は、本明細書で詳細に説明され、特許請求される本発明の一部と見なされる。
1つ又は複数の態様が、具体的に示され、本明細書の最後にある特許請求の範囲において例として明確に特許請求される。上記及び他の目的、特徴、並びに利点は、添付図面と併せて用いられる以下の詳細な説明から明らかである。
1つ又は複数の態様の技術を通じて、付加的な特徴及び利点が実現される。他の実施形態及び態様は、本明細書で詳細に説明され、特許請求される本発明の一部と見なされる。
1つ又は複数の態様が、具体的に示され、本明細書の最後にある特許請求の範囲において例として明確に特許請求される。上記及び他の目的、特徴、並びに利点は、添付図面と併せて用いられる以下の詳細な説明から明らかである。
一態様において、擬似乱数を生成するためのマシン命令が提供される。Perform Pseudorandom Number Operation命令と呼ばれるこの命令は、擬似乱数の生成に用いられる1つ又は複数のシード値をインスタンス化し、1つ又は複数のシード値を再シードし、及び/又は擬似乱数を生成するための能力を含む。一例として、命令は、国立標準技術研究所(National Institute of Standards and Technology、NIST)が指定する512ビット・セキュア・ハッシュ・アルゴリズム(SHA−512)を用いる。この命令は、擬似乱数生成に関する最新のNIST推奨に準拠する。しかしながら、性能上の理由から、この命令は、NISTにより指定されるような左から右(left-to-right)方式ではなく、右から左(right-to-left)方式で動作する。さらに別の実施形態においては、この命令は、代替エンコーディング(alternate encoding)アルゴリズム(技術とも呼ばれる)を用いるように拡張可能である。
1つ又は複数の態様を組み込み、用いるためのコンピューティング環境の一実施形態が、図1を参照して説明される。コンピューティング環境100は、例えば1つ又は複数のバス108及び/又は他の接続を介して互いに結合された、例えば、プロセッサ102(例えば中央演算処理ユニット)、メモリ104(例えば主メモリ)、並びに1つ又は複数の入力/出力(I/O)デバイス、及び/又はインターフェース106を含む。
一例において、プロセッサ102は、インターナショナル・ビジネス・マシーンズ・コーポレーションにより提供されるz/Architectureに基づいており、同じくインターナショナル・ビジネス・マシーンズ・コーポレーションにより提供される、System zサーバなどのサーバの一部であり、z/Architectureを実装する。z/Architectureの一実施形態は、非特許文献1に記載されている。一例において、プロセッサは、同じくインターナショナル・ビジネス・マシーンズ・コーポレーションにより提供される、z/OSなどのオペレーティング・システムを実行する。IBM(登録商標)、z/Architecture(登録商標)及びZ/OS(登録商標)は、米国ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーションの登録商標である。本明細書で使用される他の名称は、インターナショナル・ビジネス・マシーンズ・コーポレーション又は他の会社の登録商標、商標、又は製品名である場合がある。
さらに別の実施形態において、プロセッサ102は、インターナショナル・ビジネス・マシーンズ・コーポレーションにより提供されるPower Architectureに基づいている。Power Architectureの一実施形態は、非特許文献2に記載されている。Power Architecture(登録商標)は、インターナショナル・ビジネス・マシーンズ・コーポレーションの登録商標である。
さらに別の実施形態において、プロセッサ102は、Intel Corporationにより提供されるIntelアーキテクチャに基づいている。Intelアーキテクチャの一実施形態は、非特許文献3及び非特許文献4に記載されている。Intel(登録商標)は、カリフォルニア州サンタクララ所在のIntel Corporationの登録商標である。
プロセッサ102は、命令を実行するのに用いられる複数の機能コンポーネントを含む。図2に示されるように、これらの機能コンポーネントは、例えば、実行される命令をフェッチするための命令フェッチ・コンポーネント120、フェッチされた命令をデコードし、デコードされた命令のオペランドを取得するための命令デコード・ユニット122、デコードされた命令を実行するための命令実行コンポーネント124、必要に応じて、命令の実行のためにメモリにアクセスするためのメモリ・アクセス・コンポーネント126、及び実行された命令の結果を提供するためのライトバック・コンポーネント130を含む。これらのコンポーネントの1つ又は複数は、態様に応じて、シード/生成コンポーネント136の少なくとも一部を含むこと又はこれにアクセスすることにより、擬似乱数シード及び/又は生成機能を提供する。この機能は、以下でさらに詳細に説明される。
プロセッサ102はまた、一実施形態において、機能コンポーネントの1つ又は複数により用いられる1つ又は複数のレジスタ140を含む。
1つ又は複数の態様を組み込み、用いるためのコンピューティング環境の別の実施形態が、図3を参照して説明される。この例において、コンピューティング環境200は、例えば1つ又は複数のバス208及び/又は他の接続を介して互いに結合された、例えば、ネイティブ中央演算処理プロセッサ(CPU)202、メモリ204、並びに1つ又は複数の入力/出力デバイス及び/又はインターフェース206を含む。例として、コンピューティング環境200は、ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーションにより提供されるPowerPCプロセッサ、pSeiesサーバ、又はxSeriesサーバ、及びカリフォルニア州Palo Alto所在のHewlett Packard Co.により提供されるIntel Itanium IIプロセッサを伴うHP Superdome、及び/又はインターナショナル・ビジネス・マシーンズ・コーポレーション、Hewlett Packard、Intel、Oracle、又はその他により提供されるアーキテクチャに基づいた他のマシンを含むことができる。
ネイティブ中央演算処理ユニット202は、環境内での処理の際に用いられる、1つ又は複数の汎用レジスタ及び/又は1つ又は複数の専用レジスタなどの1つ又は複数のネイティブ・レジスタ210を含む。これらのレジスタは、任意の特定の時点における環境の状態を表す情報を含む。
さらに、ネイティブ中央演算処理ユニット202は、メモリ204内に格納された命令及びコードを実行する。1つの特定の例において、中央演算処理ユニットは、メモリ204内に格納されたエミュレータ・コード212を実行する。このコードにより、1つのアーキテクチャにおいて構成されたコンピューティング環境が、別のアーキテクチャをエミュレートすることが可能になる。例えば、エミュレータ・コード212により、PowerPCプロセッサ、pSeriesサーバ、xSeriesサーバ、HP Superdomeサーバ又は他のものなどの、z/Architecture以外のアーキテクチャに基づいたマシンが、z/Architectureをエミュレートし、z/Architectureに基づいて開発されたソフトウェア及び命令を実行することが可能になる。
エミュレータ・コード212に関する更なる詳細が、図4を参照して説明される。メモリ204内に格納されたゲスト命令250が、ネイティブCPU202のもの以外のアーキテクチャで実行されるように開発されたソフトウェア命令(例えば、マシン命令に相関する)を含む。例えば、ゲスト命令250は、z/Architectureプロセッサ102上で実行されるように設計されているが、代わりに、例えばIntel Itanium IIプロセッサとすることができるネイティブCPU202上でエミュレートされることもある。一例において、エミュレータ・コード212は、メモリ204から1つ又は複数のゲスト命令250を取得し、取得された命令に対してローカル・バッファリングを随意的に提供するための命令フェッチ・ルーチン252を含む。エミュレータ・コード212また、取得されたゲスト命令のタイプを判断し、ゲスト命令を1つ又は複数の対応するネイティブ命令256に変換するための命令変換ルーチン254も含む。この変換は、例えば、ゲスト命令により実施される機能を識別することと、その機能を実施するためのネイティブ命令を選択することとを含む。
さらに、エミュレータ212は、ネイティブ命令を実行させるためのエミュレーション制御ルーチン260を含む。エミュレーション制御ルーチン260は、ネイティブCPU202に、1つ又は複数の以前に取得されたゲスト命令をエミュレートするネイティブ命令のルーチンを実行させ、こうした実行の最後に、次のゲスト命令又はゲスト命令のグループの取得をエミュレートするために、制御を命令フェッチ・ルーチンに戻させることができる。ネイティブ命令256の実行は、データをメモリ204からレジスタ内にロードすること、データをレジスタから再びメモリに格納すること、又は変換ルーチンによって求められるような何らかのタイプの算術演算又は論理演算を実施することを含むことができる。
各ルーチンは、例えば、メモリ内に格納され、ネイティブ中央演算処理ユニット202によって実行される、ソフトウェアで実装される。他の例において、1つ又は複数のルーチン又は演算は、ファームウェア、ハードウェア、ソフトウェア、又はそれらの幾つかの組み合わせで実装される。エミュレートされるプロセッサのレジスタは、ネイティブCPUのレジスタ210又はメモリ204内の位置を使用して、エミュレートすることができる。実施形態において、ゲスト命令250、ネイティブ命令256、及びエミュレータ・コード212は、同一のメモリ内に存在してもよく、又は、異なるメモリ・デバイスの間に分配されてもよい。
本明細書で用いられる場合、ファームウェアとは、例えば、プロセッサのマイクロコード、ミリコード、及び/又はマクロコードを含む。ファームウェアは、例えば、上位レベルのマシン・コードの実装に用いられるハードウェア・レベルの命令及び/又はデータ構造体を含む。一実施形態において、ファームウェアは、例えば、典型的には、信頼できるソフトウェアを含むマイクロコードとして供給される専用コード、又は基礎をなすハードウェアに特有のマイクロコードを含み、システム・ハードウェアへのオペレーティング・システムのアクセスを制御する。
一例において、取得され、変換され、実行されるゲスト命令250は、本明細書で説明されるPerform Pseudorandom Number Operation命令である。1つのアーキテクチャ(例えば、z/Architecture)のものであるこの命令が、メモリからフェッチされ、変換され、別のアーキテクチャ(例えば、PowerPC、pSeries、xSeries、Intelなど)のネイティブ命令256のシーケンスとして表される。次に、これらのネイティブ命令が実行される。
命令の明示及び暗黙フィールドを含むPerform Pseudorandom Number Operation命令、並びに、中央演算処理ユニット(ネイティブのシステム又はエミュレートされたシステム内の)による実行に関する詳細が、本明細書で説明される。Perform Pseudorandom Number Operation命令は、擬似乱数を生成するための生成操作、並びに、擬似乱数の生成に用いられる1つ又は複数のシード値をインスタンス化又は再シードするためのシード操作を含む。シード値は、命令によりアクセスされるパラメータ・ブロック内に格納される。
最初に図5を参照すると、Perform Pseudorandom Number Operation命令の一実施形態が説明される。一例において、Perform Pseudorandom Number Operation命令300は、perform pseudorandom number操作を示すためのオペコード(例えば、ξB93Cξ)を有するオペコード・フィールド302(例えば、ビット0−15)と、少なくとも1つの第1のレジスタ(R1)を指示するために用いられる第1のレジスタ・フィールド304(例えば、ビット24−27)と、少なくとも1つの第2のレジスタ(R2)を指示するために用いられる第2のレジスタ・フィールド306(例えば、ビット28−31)とを含む。フィールド304−306の各々は、一例において、オペコード・フィールドから分離し、独立している。さらに、一実施形態においては、これらは互いに分離し、独立しているが、他の実施形態においては、1つより多くのフィールドを組み合わせてもよい。
一例において、オペコード・フィールド302により指示されるオペコードの選択されたビット(例えば、最初の2ビット)は、命令の長さを指定する。この特定の例において、選択されたビットは、長さが2ハーフワード(halfword)であることを示す。さらに、命令の形式は、拡張されたオペコード・フィールドを伴うレジスタ・アンド・レジスタ操作(register−and−register operation)である。この形式では、R1フィールドにより指示されるレジスタのコンテンツは、第1オペランドと呼ばれる。第1オペランドを含むレジスタは、第1オペランド位置と呼ばれることもある。さらに、R2フィールドは第2オペランドを収容するレジスタを指示し、R2は、R1フィールドと同じレジスタを指示し得る。
命令において符号化されたR1及びR2に加えて、命令の1つの実装は、例えば、汎用レジスタ0(GR0)及び汎用レジスタ1(GR1)を含む1つ又は複数の暗黙レジスタを用いる。図6−図11を参照して、レジスタの各々が以下でさらに説明される。
最初に図6を参照すると、汎用レジスタ0(320)の一形式の一実施形態が説明される。一例において、汎用レジスタ0は、修飾子(M)ビット322(例えば、ビット56)と、機能コード(function code、FC)・フィールド324(例えば、ビット57−63)とを含む。機能コード・フィールドは、実施される機能を指定する機能コードを含む。一例において、割り当てられた機能コードは、16の割り当てられたパラメータ・ブロック・サイズを有する、クエリ機能についてのコード0と、240の割り当てられたパラメータ・ブロック・サイズを有する、SHA−512−DRNG(Deterministic Random Number Generator、決定論的乱数生成器)機能についてのコード3とを含む。汎用レジスタ0のビット57−63が、割り当てられていない又はインストールされていない機能コードを指示する場合、指定例外が認識される。
クエリ機能(機能コード0)は、これらに限定されるものではないが、他の乱数又は擬似乱数生成機能を含む、他の機能の可用性を示す手段を提供する。クエリ機能に関して、R1及びR2フィールド、並びに汎用レジスタ1のコンテンツは無視される。
この実施形態においては、クエリ機能以外の機能について、ビット56は、実施される特定の操作を示すために用いられる修飾子ビットである。例えば、修飾子ビットがゼロの場合、生成操作が実施され、修飾子ビットが1の場合、シード操作が実施される。修飾子ビットは、クエリ機能に関して無視される。1つの実施において、汎用レジスタ0の全ての他のビットは無視される。さらに別の実施形態においては、他の機能が提供される場合、それらが修飾子ビットを使用することも又は使用しないこともある。
図12及び図13を参照して、機能コード及び修飾子ビットの使用がさらに説明される。最初に、図12を参照すると、Perform Pseudorandom Number Operation命令が取得され(ステップ379)、実行される。実行の際、一実施形態において、汎用レジスタ0において指定された機能コードが取得される(ステップ380)。機能コードに基づいて、実施される機能に関して判断がなされる(ステップ382)。例として、機能は、クエリ機能、又はSHA−512−DRNG機能などの乱数生成器機能、又は他のタイプの乱数生成器機能、又は他の機能とすることができる。
その後、機能コードによって指定された機能が修飾子インジケータを用いるかどうかについての判断がなされる(問い合わせ384)。修飾子インジケータが用いられない場合、次に、処理は、指示された機能の実施を続行する(ステップ386)。他の場合には、修飾子インジケータが取得され(ステップ388)、処理は、修飾子インジケータに基づいて進行する(ステップ390)。
図13を参照して、修飾子インジケータの使用の一実施形態がさらに説明される。最初に、修飾子インジケータの値に関する判断がなされる(問い合わせ392)。機能コードがSHA−512−DRNG機能を示す1つの特定の例において、修飾子インジケータの値が0であるか又は1であるかの判断がなされる。
修飾子ビットの値が0であるとき、次に、SHA−512−DRNG機能の生成操作が実施される(ステップ394)。これは、例えば、第1オペランドの各メモリ・ブロックについて、512ビット・セキュア・ハッシュ技術及びパラメータ・ブロック内の1つ又は複数のシード値を用いてハッシュ値を生成することと、生成されたハッシュ値の少なくとも一部を第1オペランドに格納することとを含む。
他の場合には、修飾子ビットの値が1であれば、次に、シード操作が実施される(ステップ396)。これは、例えば、再シード・カウンタの値に基づき、命令の第2オペランドに含まれる情報を用いて形成されるシード材料を取得することと、シード材料及び512ビット・セキュア・ハッシュ技術を用いて1つ又は複数のシード値を提供することと、シード値をパラメータ・ブロック内に格納することとを含む。
機能コードが他のタイプの乱数生成器機能を表す他の実施形態において、同じ修飾子ビット値を用いて、その乱数生成器機能について生成操作が実施されるのか、又はシード操作が実施されるのかを判断することができる。付加的に、さらに別の実施形態において、他のタイプの機能を指定する他のタイプの機能コードについて、修飾子インジケータの値は、本明細書で記載されるものとは異なる機能を指定する場合がある。多数の変形が可能である。
命令レジスタの説明を続けると、図7を参照して、汎用レジスタ1(330)の一形式の一実施形態が説明される。一例において、クエリ機能以外の機能について、汎用レジスタ1は、命令によってアクセスされ、使用されるストレージ内のパラメータ・ブロックの左端バイトの論理アドレス332を含む。汎用レジスタ1内のパラメータ・ブロック・アドレスの長さ及び位置は、アドレッシング・モードに依存する。24ビット・アドレッシング・モードにおいては、汎用レジスタ1のビット位置40−63のコンテンツがアドレスを構成し、ビット位置0−38のコンテンツは無視される。31ビット・アドレッシング・モードにおいては、汎用レジスタ1のビット位置33−63のコンテンツがアドレスを構成し、ビット位置0−32のコンテンツは無視される。64ビットのアドレッシング・モードにおいては、汎用レジスタ1のビット位置0−63のコンテンツがアドレスを構成する。アクセス・レジスタ・モードにおいては、アクセス・レジスタ1が、パラメータ・ブロックを含むアドレス空間を指定する。
図8は、R1フィールド304(図5)によって指示されるR1のコンテンツ(340)の一例を示す。特に、生成操作に関しては、R1フィールドは、汎用レジスタの偶数・奇数の対を指定し、汎用レジスタ0以外の偶数番号レジスタを指定することになり、他の場合には、指定例外が認識される。汎用レジスタR1のコンテンツは、第1オペランドのメモリ内の位置を指定する。特に、R1のコンテンツは、第1オペランドの左端バイトのアドレス342を指定する。第1オペランドの長さ352(図9)は、汎用レジスタR1+1(350)において指定される。R2フィールドは、生成操作から無視される。
シード操作に関して、R2フィールド306(図5)は汎用レジスタの偶数・奇数の対を指定し、汎用レジスタ0以外の偶数番号レジスタを指定することになり、他の場合には、指定例外が認識される。汎用レジスタR2(360、図10)のコンテンツは、第2オペランドのメモリ内の位置を指定する。特に、R2のコンテンツは、第2オペランドの左端バイトのアドレス362を指定する。第2オペランドの長さ372(図11)は、汎用レジスタR2+1(370)において指定される。R1フィールドは、シード操作から無視される。
生成操作が指定されるか又はシード操作が指定されるかに関係なく、ストレージ・オペランドを指示する偶数番号汎用レジスタ(それぞれR1又はR2)のコンテンツは、アドレッシング・モードに従う。24ビット・アドレッシング・モードにおいては、レジスタのビット位置40−63のコンテンツがストレージ・オペランドのアドレスを構成し、ビット位置0−39のコンテンツは無視される。31ビットのアドレッシング・モードにおいては、レジスタのビット位置33−63のコンテンツがストレージ・オペランドのアドレスを構成し、ビット位置0−32のコンテンツは無視される。64ビットのアドレッシング・モードにおいては、レジスタのビット位置0−63のコンテンツがアドレスを構成する。アクセス・レジスタ・モードにおいては、それぞれのアクセス・レジスタ(R1又はR2)は、ストレージ・オペランドを含むアドレス空間を指定する。
生成操作が指定されるか又はシード操作が指定されるかに関係なく、24ビット・アドレッシング・モード及び31ビット・アドレッシング・モードのいずれにおいても、奇数番号汎用レジスタ(それぞれR1+1又はR2+1)のビット位置32−63のコンテンツは、ストレージ・オペランド内のバイト数を指定する32ビットの符号なし2進整数を形成する。64ビット・アドレッシング・モードにおいては、レジスタのビット位置0−63のコンテンツは、ストレージ・オペランド内のバイト数を指定する64ビットの符号なし2進整数を形成する。
生成操作に関しては、命令の完了時に、汎用レジスタR1+1において第1オペランドの長さが更新される。24ビット・アドレッシング・モード及び31ビット・アドレッシング・モードのいずれにおいても、更新された値は、汎用レジスタR1+1のビット位置32−63のコンテンツに置き換わり、汎用レジスタR1+1のビット位置0−31のコンテンツは変更されないままである。64ビットのアドレッシング・モードでは、更新された値は、汎用レジスタR1+1のコンテンツに置き換わる。
パラメータ・ブロックがストレージ・オペランドのいずれかの部分とオーバーラップする場合、結果は予測不能である。
ストレージ・オペランドの長さがゼロであるとき、ストレージ・オペランドの位置についてのアクセス例外は認識されない。しかしながら、ストレージ・オペランドの長さがゼロであるときでも、パラメータ・ブロックにアクセスされる。生成操作に関しては、ストレージ・オペランドの長さがゼロであるとき、汎用レジスタR1+1は変更されず、条件コード0が設定される。
他のCPU及びI/Oサブシステムにより観察されるように、パラメータ・ブロック及びストレージ・オペランドへの参照は複数のアクセス参照とすることができ、これらの位置へのアクセスは、必ずしもブロック・コンカレント(block concurrent)ではなく、これらのアクセス又は参照のシーケンスは不定である。
生成操作に関して、PER(例えば、z/Architectureに基づくプロセッサ上で実施されるProgram Event Recording)ストレージ変更イベントが認識されると、イベントが報告される前に、4Kより少ない付加的なバイトが第1オペランドの位置に格納される。第1オペランドの位置及び格納されるパラメータ・ブロックの部分の両方について、PERストレージ変更イベントが認識されると、PERアクセス識別(PAID)及びPER ASCE ID(Program Event Recording address space control element identification:AI)において、これらの2つの位置のどちらが示されるかは予測不能である。同様に、第1オペランドの位置及びパラメータ・ブロックの両方について、PERゼロ・アドレス・検出イベントが認識されると、PAID及びAIにおいて、これらの2つの位置のどちらが識別されるかは予測不能である。
生成操作に関して、命令の単一の実行で処理されるよりも第1オペランドの多くの部分について、アクセス例外を報告することができる。しかしながら、第1オペランドを含んでいない位置についても、又は処理される現在の位置から4Kバイトを超える位置についても、アクセス例外は認識されない。
生成操作に関して、正常完了により操作が終了すると、条件コード0が設定され、汎用レジスタR1+1内の結果の値はゼロとなる。部分完了により操作が終了すると、条件コード3が設定され、汎用レジスタR1+1内の結果の値は非ゼロとなる。
1つの実施においては、Perform Pseudorandom Number Operation命令の機能コードが0であり、クエリ機能を示す場合、128ビットの状況ワード(status word)402(図14)が、命令と関連したパラメータ・ブロック400内に格納される。このフィールドのビット0−127は、それぞれ、Perform Pseudorandom Number Operation命令の機能コード0−127に対応する。ビットが1である場合、対応する機能がインストールされ、そうでない場合には、機能はインストールされない。例えば、SHA−512 DRNG機能がインストールされる場合、機能コード3に対応するビット3が1に設定される。
クエリ機能の実行が完了すると、条件コード0が設定され、条件コード3は、この機能に適用されない。
1つの実施においては、Perform Pseudorandom Number Operation命令の機能コードが3である場合、決定論的乱数生成器(DRNG)機能が実施される。修飾子ビット、即ち汎用レジスタ0のビット56に応じて、DRNG機能は、各々が512ビット・セキュア・ハッシュ・アルゴリズム(SHA−512)を用いて、決定論的乱数生成操作又は決定論的擬似乱数シード操作を実施する。
決定論的乱数ビット生成としても知られる決定論的擬似乱数生成は、例えば、非特許文献5に定められる。さらに、セキュア・ハッシュ・アルゴリズムの説明は、例えば、全体が引用により本明細書に組み入れられる非特許文献6に見出される。
DRNG機能に用いられるパラメータ・ブロックの一実施形態が、図15に示される。パラメータ・ブロック420は、決定論的乱数生成器の内部状態を表し、例えば、以下を含む。:
予約される:パラメータ・ブロックのバイト0−3、16、及び128が予約される。
再シード・カウンタ422:パラメータ・ブロックのバイト4−7は、パラメータ・ブロックが最後にインスタンス化又は再シードされて以来、命令が条件コード0で完了した回数を示す、32ビットの符号なし2進整数を含む。
予約される:パラメータ・ブロックのバイト0−3、16、及び128が予約される。
再シード・カウンタ422:パラメータ・ブロックのバイト4−7は、パラメータ・ブロックが最後にインスタンス化又は再シードされて以来、命令が条件コード0で完了した回数を示す、32ビットの符号なし2進整数を含む。
再シード・カウンタがゼロを含む場合、以下が適用される。
*シード操作の実行により、パラメータ・ブロックは、再シード・カウンタを1の値に設定するなど、初期値でインスタンス化される。
*生成操作の実行により、指定例外が認識される。
*シード操作の実行により、パラメータ・ブロックは、再シード・カウンタを1の値に設定するなど、初期値でインスタンス化される。
*生成操作の実行により、指定例外が認識される。
再シード・カウンタが非ゼロ値を含む場合、パラメータ・ブロックはインスタンス化されると考えられ、以下が適用される。:
*シード操作の実行により、パラメータ・ブロックは、再シード・カウンタを1の値に設定するなど、再シードされる。
*条件コード0をもたらす生成操作の実行により、再シード・カウンタが1だけインクリメントされ、再シード・カウンタ・フィールドのビット位置0のいずれの繰り上がり(carry out)も無視される。
*シード操作の実行により、パラメータ・ブロックは、再シード・カウンタを1の値に設定するなど、再シードされる。
*条件コード0をもたらす生成操作の実行により、再シード・カウンタが1だけインクリメントされ、再シード・カウンタ・フィールドのビット位置0のいずれの繰り上がり(carry out)も無視される。
ストリーム・バイト424:パラメータ・ブロックのバイト8−15は、64ビットの符号なし2進整数を含む。ストリーム・バイト・フィールドは、パラメータ・ブロックをインスタンス化するとき(即ち、再シード・カウンタがゼロであるとき)、シード操作の実行によりゼロに設定され、このフィールドは、パラメータ・ブロックが既にインスタンス化されている場合、シード操作の実行によって変更されない。
生成操作の部分又は完全完了により、ストリーム・バイト・フィールドのコンテンツが、第1オペランド内に格納されたバイト数だけインクリメントされ、ストリーム・バイト・フィールドのビット位置0のいずれの繰り上がりも無視される。
値(V)426:パラメータ・ブロックのバイト17−127は、例えば、パラメータ・ブロックにより表わされる乱数生成器の内部状態を示す888ビットの値を含む。Vは、パラメータ・ブロックをインスタンス化する際にシード操作の実行により、初期化される。Vは、(a)再シード・カウンタが非ゼロである場合にシード操作の実行、又は(b)条件コード0で終了する生成操作の実行によって更新される。
定数(C)428:パラメータ・ブロックのバイト129−239は、例えば、ブロックにより表される乱数生成器の内部状態を示す888ビットの値を含む。Cは、シード操作の実行により初期化され、生成操作により検査される。
同じパラメータ・ブロックの形式が、生成操作及びシード操作の両方(インスタンス化及び再シードを含む)により用いられる。全桁ゼロを含むパラメータ・ブロックは、インスタンス化されていないと考えられる。プログラムは、パラメータ・ブロックをインスタンス化するためにシード操作を発行する前に、パラメータ・ブロックをゼロにしなければならず、その後、プログラムは、ゼロにする以外、パラメータ・ブロックのコンテンツを変更してはならず、そうでなければ、命令により、予測できない結果がもたらされる場合がある。
DRNG機能(本明細書ではSHA−512−DRNG機能とも呼ばれる)のシード操作及び生成操作に関する更なる詳細が、以下に説明される。
シード操作
SHA−512−DRNGシード操作は、512ビット・セキュア・ハッシュ・アルゴリズムを用いて、決定論的擬似乱数生成のパラメータ・ブロックをインタスタンス化又は再シードする。一実施形態において、操作は、中央演算処理ユニットにより実施されるが、他の実施形態においては、他のコンポーネント又はコプロセッサにより実施される。
SHA−512−DRNGシード操作は、512ビット・セキュア・ハッシュ・アルゴリズムを用いて、決定論的擬似乱数生成のパラメータ・ブロックをインタスタンス化又は再シードする。一実施形態において、操作は、中央演算処理ユニットにより実施されるが、他の実施形態においては、他のコンポーネント又はコプロセッサにより実施される。
パラメータ・ブロックのバイト4−7の再シード・カウンタがゼロであるか又は非ゼロであるかに応じて、それぞれ、インタスタンス化操作又は再シード操作が実施される。インスタンス化及び再シードの更なる詳細は、図面を参照して以下に説明される。図面において、示される記号/略語は、次の意味を有する。:<#>:バイト単位のフィールドの長さ;R2+1:0−512バイトの範囲のストレージ内のオペランド2の長さ;#ビット:SHA−512アルゴリズムにより生成されるビットの32ビットカウント−888ビット(378hex(16進数));ct:8ビット・カウンタ(例えば、ハッシュ導関数により用いられるm);z:ゼロの8ビット・フィールド。
インスタンス化操作に関しては、図16に示されるように、ストレージ500a内の第2オペランドは、エントロピー入力、ノンス、及び随意的な個別化文字列(personalization string)の1つ又は複数を含み、その各々を以下で説明する。この情報は、シード材料502aを形成するために用いられる。
一例として、エントロピー入力は、決定論的乱数ビット生成器(DeterministicRandom Bit Generator、DRBG)機構についての評価された最小量の予測不能性を提供する入力ビット文字列である。DRBG機構は、乱数ビット生成器(random bit generator、RBG)の一部であり、RBGをインスタンス化及びアンインスタンス化(uninstantiate)し、擬似乱数ビットを生成し、随意的にRBGを再シードし、DRBG機構の健全性(health)をテストするための機能を含む。
乱数ビット生成器(RBG)は、統計的に独立し、バイアス付きでないように見える2進ビットのシーケンスを出力するデバイス、アルゴリズム、技術、又は機構である。RBGの一例は、DRBGである。DRBGは、例えば、例えば、DRBG機構を含み、(少なくとも最初に)エントロピー入力のソースにアクセスできるRBGである。DRBGは、他の可能な入力と共に、シードと呼ばれる秘密の初期値からビット・シーケンスを生成する。
シードは、DRBG機構への入力として用いられるビットの文字列である。シードは、DRBGの内部状態の一部を決定し、そのエントロピーはDRBGの安全性強度をサポートするのに十分なものとなる。エントロピーは、閉鎖系における無秩序、ランダム性、又は変動性の尺度である。最小エントロピー(min-entropy)は、1つの実施において用いられる尺度である。
ランダム変数Xの最小エントロピー(ビット単位)は、Xの観察の各々が少なくともmビットの情報を提供する特性を有する最大値mである(即ち、Xの最小エントロピーは、Xの潜在的な観察の情報コンテンツについての最大下限である)。ランダム変数の最小エントロピーは、そのエントロピー上の下限である。最小エントロピーについての正確な式は、確率p1、...、pnを有する離散型分布に関して、−(log2 max pi)である。最小エントロピーは、ランダム変数の予測不能性の最悪尺度(worst case measure)として用いられることが多い。
ノンスは、例えば、使用ごとに新たに生成されるランダム値、タイムスタンプ、シーケンス番号、又はこれらの何らかの組み合わせである、多くても無視できるほどの再現可能性を有する時間変化値(time-varying value)である。
個別化文字列は、秘密エントロピー入力及び(場合により)ノンスと組み合わされてシードを生成する、随意のビット文字列である。
再シード操作に関して(再シードは、DRBG機構の内部状態に影響を与える付加的なビットを獲得する)、ストレージ500b(図17)内の第2オペランドは、シード材料502bを形成するのに用いられる、エントロピー入力及び随意的な付加的な入力を含む。随意的な付加的な入力は、例として時間値又は他の任意の値などの、更なるランダム性を付加する任意の所望の情報とすることができる。
図16に示されるように、インスタンス化操作を実施するとき、シード材料は、第2オペランドのみを用いて形成される。例えば、第2オペランドの入力値を連結してシード材料を形成する。しかしながら、再シード操作を実施するときに、シード材料は、図17に示されるように、例えば、値01(16進数)(504)、パラメータ・ブロックのVフィールド506のコンテンツ、及び第2オペランド500bのコンテンツの連結から形成される。
インスタンス化操作又は再シード操作において、1つ又は複数のシード値が初期化/更新される。1つのこうしたシード値は、図18を参照して説明されるように形成されるVnewである。一実施形態において、1バイトのカウンタ600a、888の4バイト値(602a)、シード材料604a(上述のように形成される)、及びパディング606aが連結され、初期ハッシュ値(IHV)(初期チェイニング値(ICV)とも呼ばれる)610aと共に、SHA−512アルゴリズム608aへの入力として用いられる。一実施形態において、パディングは、80(16進数)の値であり、ゼロの0−127バイトと連結され、パディングを含まないSHA−512アルゴリズムへの入力のビット単位の長さ(即ち、1バイト・カウンタ、888の4バイト値、及びシード材料の長さ)を指示する、16バイトの2進整数と連結される。初期ハッシュ値は、例えば、64バイト値であり、こうした値の例は、以下にさらに説明される。
SHA−512アルゴリズムを2回呼び出して、2つの64バイトのハッシュ結果612a、612bを形成し、1バイトのカウンタ600aは、SHA−512アルゴリズムの第1の呼び出しについての値1を含み、且つ、第2の呼び出しについての値2(600b)を含む。第2の呼び出しはまた、888の4バイト値(602b)、シード材料604b、及びパディング606bを、IHV610bと共に、SHA−512アルゴリズム608bへの入力として使用して、64バイトのハッシュ結果612bを形成する。この例では、602bは602aと同じ値であり、604bは604aと同じであり、606bは606aと同じであり、610bは610aと同じである。しかしながら、例えば他の技術についての他の実施形態においては、値が互いに異なることがある。
2つの64バイトのハッシュ結果612a、612bは互いに連結され、この例では、128バイトの連結の左端の111バイトが、パラメータ・ブロック内の新しい値フィールド(Vnew)614を形成する。
Vnewフィールドの形成と同様に、インスタンス化操作又は再シード操作のいずれかの間に、新しい定数フィールド(Cnew)が形成される。Cnewは、パラメータ・ブロック内に格納された別のシード値である。図19に示されるように、1バイトのカウンタ700a、888の4バイト値(702a)、ゼロの1バイト値704a、Vnewフィールド706a、及びパディング708aが連結され、IHV711aと共に、SHA−512アルゴリズム710aの入力として用いられる。パディングは、例えば、80(16進数)の値であり、ゼロの122バイトと連結され、パディングを含まない、SHA−512アルゴリズムへの入力のビット単位の長さ(即ち、1バイトのカウンタ、888の4バイト値、ゼロの1バイト値、及びVnewフィールドの長さ)を指示する16バイトの2進整数と連結される。IHV711aは、一実施形態においては、IHV610a又はIHV610bと同じ値である。
SHA−512アルゴリズムを2回呼び出して、2つの64バイトのハッシュ結果712a、712bを形成し、1バイトのカウンタ700aは、SHA−512アルゴリズムの第1の呼び出しについての値1を含み、且つ、第2の呼び出しについての値2(700b)を含む。第2の呼び出しはまた、888の4バイト値(702b)、ゼロの1バイト値(704b)、Vnewフィールド706b、及びパディング708bを、IHV711bと共に、SHA−512アルゴリズム710bへの入力として用いる。この例では、702bは702aと同じ値であり、704bは704aと同じであり、706bは706aと同じであり、708bは708aと同じであり、711bは711aと同じである。しかしながら、例えば他の技術についての他の実施形態においては、値が互いに異なることがある。
2つの64バイトのハッシュ結果712a、712bは互いに連結され、この例では、128バイトの連結の左端の111バイトが、パラメータ・ブロック内の新しい定数フィールド(Cnew)714を形成する。
インスタンス化操作又は再シード操作のいずれかにおいて、パラメータ・ブロック内の再シード・カウンタ・フィールド720は、1の値に設定される。インスタンス化操作にのみにおいて、パラメータ・ブロック内のストリーム・バイト・フィールド722はゼロに設定され、ストリーム・バイト・フィールドは、再シード操作によって変更されないままである。
SHA−512−DRNGシード操作の実行が完了すると、条件コード0が設定され、条件コード3は、シード操作に適用されない。
生成操作
SHA−512−DRNG生成操作は、上述のように、インスタンス化又は再シードされたパラメータ・ブロック、並びに512ビット・セキュア・ハッシュ・アルゴリズムを用いて、擬似乱数を生成する。一実施形態において、操作は、中央演算処理ユニットにより実施されるが、他の実施形態においては、他のコンポーネント又はコプロセッサにより実施される。
SHA−512−DRNG生成操作は、上述のように、インスタンス化又は再シードされたパラメータ・ブロック、並びに512ビット・セキュア・ハッシュ・アルゴリズムを用いて、擬似乱数を生成する。一実施形態において、操作は、中央演算処理ユニットにより実施されるが、他の実施形態においては、他のコンポーネント又はコプロセッサにより実施される。
汎用レジスタR1+1内の第1オペランドの長さが非ゼロである場合、第1オペランドは、右端ブロックが64未満のバイトを含むことがあることを除いて、右から左への順序で64バイト・ブロックの単位で格納される。任意の右端の部分ブロックを含む、格納されるブロック数は、汎用レジスタR1+1内の第1オペランドの長さを最大で64の倍数まで丸め、その値を64で除算することによって求められる。第1オペランドのブロックは、左から右へと0からn−1まで番号付けされ、ここでn−1は右端ブロックを表す。
図20−図21を参照して説明されるように、1つの実施において、第1オペランドの位置の各ブロックについて、以下の手順が実施され、右端(n−1)ブロックで始まり、左へ進む。図21(及び図22)において、<#>は、バイト単位でのフィールドの長さを表す。
最初に図20を参照すると、第1オペランドの位置のブロックについて、ハッシュ値が生成される(ステップ801)。ハッシュ値を生成する一実施形態が、図21を参照して説明される。
1.図21を参照すると、パラメータ・ブロック800からの値(V)802が、処理されるブロック数806に加算され804、加算によるいずれのオーバーフローも無視される。
2.この加算の111バイトの和808は、17バイトのパディング810と連結され、IHV811と共に、SHA−512アルゴリズム812への入力として用いられ、64バイトのハッシュ値814をもたらす。SHA−512アルゴリズムに与えられる17バイトのパディングは、例えば、80(16進数)の値であり、その後に888の16バイトの2進整数値(ビット単位のVの長さ)が続く。IHV811は、IHV610a、610b、711a、又は711bの1つと同じであるか、又は、例えば他の技術についての別の実施形態においては、異なる値を有することがある。
3.図20に戻ると、ハッシュ値を作成した後で、汎用レジスタR1+1内の第1オペランドの長さが64の倍数である場合(問い合わせ803)、次に、結果の64バイトのハッシュ値は、第1オペランドの位置のそれぞれのブロック内に格納され(ステップ805)、汎用レジスタR1+1内の長さは、64だけデクリメントされる(ステップ807)。
第1オペランドの長さが64の倍数でない場合(問い合わせ803)、次に、結果の64バイトのハッシュ値の左端のmバイトは、第1オペランドの右端の部分ブロック(partialblock)内に格納され、ここで、mは、第1オペランドの長さを64で除算した余りを表す(ステップ809)。この場合、汎用レジスタR1+1内の長さは、mだけデクリメントされる(ステップ807)。
4.全ブロック(full block)が格納されるか又は部分ブロックが格納されるかに関係なく、パラメータ・ブロック800のバイト8−15のストリーム・バイト・フィールド816(図21)は、第1オペランドの位置内に格納されるバイト数だけインクリメントされる(ステップ811)(図20)。
上記のプロセスは、汎用レジスタR1+1内の第1オペランドの長さがゼロになるまで(正常完了(normal completion)と呼ばれる)、又は、CPUにより決定されるブロック数が処理されるまで(部分完了(partial completion)と呼ばれる)、繰り返される820a−820n(問い合わせ813)(図20)。CPUにより決定されるブロック数はモデル依存であり、命令が実行される度に、異なる数になることがある。CPUにより決定されるブロック数は通常、非ゼロである。特定の異例の状況においては、この数がゼロであることがあり、進行せずに条件コード3を設定することができる。しかしながら、CPUは、この進行しないケースが無限に再発するのを防ぐ。
生成操作の実施に基づき、第1オペランドは擬似乱数を含む。
汎用レジスタR1+1内の第1オペランドの長さが最初にゼロである場合、第1オペランドの位置に格納することなく、正常完了が行われるが、図22を参照して説明されるように、パラメータ・ブロックは更新される。さらに、擬似乱数生成プロセスが正常完了のために終了した場合、図22を参照して説明されるように、パラメータ・ブロックは更新される。
図22を参照すると、一実施形態において、パラメータ・ブロックは、以下のように更新される。:
1.03(16進数)の1バイト値(902)、パラメータ・ブロック900からの111バイト値(V)904、及びパディングの144バイト(906)が連結され、IHV909と共に、SHA−512アルゴリズム908への入力として用いられ、64バイトのハッシュ値910をもたらす。パディングは、例えば80(16進数)の値であり、ゼロの127バイトと連結され、パディングを含まないSHA−512アルゴリズムへの入力のビット単位の長さ(即ち、03(16進数)の1バイト値及びVフィールドの長さ)を指示する16バイトの2進整数と連結される。一実施形態において、IHV909は、IHV610a、610b、711a、711b、又は811の1つと等しいか、又は、例えば他の技術についての別の実施形態においては、異なる値であることがある。
2.パラメータ・ブロック900内の4バイトの再シード・カウンタ・フィールド912及び111バイトの値(V)904及び定数(C)914フィールドの値と、64バイトのハッシュ値(上記の計算からの)910とが加算される(920)。加算によるいずれのオーバーフローも無視され、結果の111バイトの和922が、パラメータ・ブロック900内の値フィールド(Vnew)904に置き換わる。
3.パラメータ・ブロック900内の4バイトの再シード・カウンタ・フィールド912が、1だけインクリメントされる。
4.条件コード0が設定される。
1.03(16進数)の1バイト値(902)、パラメータ・ブロック900からの111バイト値(V)904、及びパディングの144バイト(906)が連結され、IHV909と共に、SHA−512アルゴリズム908への入力として用いられ、64バイトのハッシュ値910をもたらす。パディングは、例えば80(16進数)の値であり、ゼロの127バイトと連結され、パディングを含まないSHA−512アルゴリズムへの入力のビット単位の長さ(即ち、03(16進数)の1バイト値及びVフィールドの長さ)を指示する16バイトの2進整数と連結される。一実施形態において、IHV909は、IHV610a、610b、711a、711b、又は811の1つと等しいか、又は、例えば他の技術についての別の実施形態においては、異なる値であることがある。
2.パラメータ・ブロック900内の4バイトの再シード・カウンタ・フィールド912及び111バイトの値(V)904及び定数(C)914フィールドの値と、64バイトのハッシュ値(上記の計算からの)910とが加算される(920)。加算によるいずれのオーバーフローも無視され、結果の111バイトの和922が、パラメータ・ブロック900内の値フィールド(Vnew)904に置き換わる。
3.パラメータ・ブロック900内の4バイトの再シード・カウンタ・フィールド912が、1だけインクリメントされる。
4.条件コード0が設定される。
部分完了によって擬似乱数生成プロセスが終了した場合、汎用レジスタR1+1内の第1オペランド長は非ゼロの64の倍数を含み、パラメータ・ブロック内の再シード・カウンタ及び値(V)フィールドは更新されず、条件コード3が設定される。
1つの特定の実施形態において、以下の条件のいずれかが存在する場合、指定例外が認識され、他のアクションは取られない。:
1.汎用レジスタ0のビット57−63が、割り当てられていない又はインストールされていない機能コードを指定する。
2.以下の特別な条件が生成操作に当てはまる。
−R1フィールドが奇数番号レジスタ又は汎用レジスタ0を指示する。
−パラメータ・ブロック内の再シード・カウンタがゼロである。
3.以下の特別な条件がシード操作に当てはまる。
−R2フィールドが奇数番号レジスタ又は汎用レジスタ0を指示する(シード操作のみ)。
−汎用レジスタR2+1内の長さが512を上回る。
条件コード
0 正常完了
1 −−
2 −−
3 部分完了(生成操作のみ)
プログラム例外
*アクセス(ストア、オペランド1、生成操作;フェッチ、オペランド2、シード操作;フェッチ・アンド・ストア、パラメータ・ブロック)
*操作(message−security−assist extension5(z/Architectureの)がインストールされていない場合)
*指定
*トランザクション制約
1.汎用レジスタ0のビット57−63が、割り当てられていない又はインストールされていない機能コードを指定する。
2.以下の特別な条件が生成操作に当てはまる。
−R1フィールドが奇数番号レジスタ又は汎用レジスタ0を指示する。
−パラメータ・ブロック内の再シード・カウンタがゼロである。
3.以下の特別な条件がシード操作に当てはまる。
−R2フィールドが奇数番号レジスタ又は汎用レジスタ0を指示する(シード操作のみ)。
−汎用レジスタR2+1内の長さが512を上回る。
条件コード
0 正常完了
1 −−
2 −−
3 部分完了(生成操作のみ)
プログラム例外
*アクセス(ストア、オペランド1、生成操作;フェッチ、オペランド2、シード操作;フェッチ・アンド・ストア、パラメータ・ブロック)
*操作(message−security−assist extension5(z/Architectureの)がインストールされていない場合)
*指定
*トランザクション制約
ここで、SHA−512アルゴリズムの更なる詳細の一実施形態が説明される。
SHA−512
SHA−512は、lビットの長さを有するメッセージMをハッシュするために用いることができ、ここで0≦l<2128である。このアルゴリズムは、1)80個の64ビット・ワードのメッセージスケジュール、2)それぞれ64ビットの8つの作業変数、及び3)8つの64ビット・ワードのハッシュ値を用いる。SHA−512の最終結果は、512ビットのメッセージダイジェスト(message digest)である。
SHA−512は、lビットの長さを有するメッセージMをハッシュするために用いることができ、ここで0≦l<2128である。このアルゴリズムは、1)80個の64ビット・ワードのメッセージスケジュール、2)それぞれ64ビットの8つの作業変数、及び3)8つの64ビット・ワードのハッシュ値を用いる。SHA−512の最終結果は、512ビットのメッセージダイジェスト(message digest)である。
メッセージスケジュールのワードは、W0、W1、...、W79と表記される。8つの作業変数は、a、b、c、d、e、f、g及びhと表記される。ハッシュ値のワードは、
と表記され、これらは初期ハッシュ値H(0)を保持し、各々の連続する中間ハッシュ値(各々のメッセージブロックが処理された後の)H(i)に置き換えられ、最終ハッシュ値H(N)で終了する。SHA−512はまた、2つの一時的ワードT1及びT2も用いる。
と表記され、これらは初期ハッシュ値H(0)を保持し、各々の連続する中間ハッシュ値(各々のメッセージブロックが処理された後の)H(i)に置き換えられ、最終ハッシュ値H(N)で終了する。SHA−512はまた、2つの一時的ワードT1及びT2も用いる。
SHA−512アルゴリズムは、以下のパラメータの1つ又は複数を用いることができる。:
a、b、c、...、h ハッシュ値H(i)の計算に用いられるwビットのワードである作業変数。
H(i) i番目のハッシュ値。H(0)が初期ハッシュ値であり、H(N)は「最終」ハッシュ値であり、メッセージダイジェストを求めるのに用いられる。
i番目のハッシュ値のj番目のワードであり、ここで、
はハッシュ値iの左端ワードである。
Kt ハッシュ計算の反復tに用いられる定数値。
SHA−512は、80個の定数64ビット・ワードのシーケンス、即ち、
を用いる。これらのワードは、最初の80個の素数の立方根の小数部の最初の64ビットを表す。16進数においては、これらの定数ワードは(左から右へ)、以下の通りである。
k パディング・ステップの際にメッセージに付加されたゼロの数。
l メッセージMのビット単位の長さ。
m メッセージブロックM(i)内のビット数。SHA−512においては、各メッセージブロックは1024ビットを有し、これは16個の64ビット・ワードのシーケンスとして表される。
M ハッシュされるメッセージ。
M(i) mビットのサイズを有するメッセージブロックi。
i番目のメッセージブロックのj番目のワードであり、ここで、
は、メッセージブロックiの左端ワードである。
n ワードが操作される際にローテート又はシフトされるビット数。
N パディングされたメッセージ内のブロック数。
T ハッシュ計算に用いられる一時的wビット・ワード。
w 1ワード内のビット数。
Wt メッセージスケジュールのt番目のwビット・ワード。
a、b、c、...、h ハッシュ値H(i)の計算に用いられるwビットのワードである作業変数。
H(i) i番目のハッシュ値。H(0)が初期ハッシュ値であり、H(N)は「最終」ハッシュ値であり、メッセージダイジェストを求めるのに用いられる。
i番目のハッシュ値のj番目のワードであり、ここで、
はハッシュ値iの左端ワードである。
Kt ハッシュ計算の反復tに用いられる定数値。
SHA−512は、80個の定数64ビット・ワードのシーケンス、即ち、
を用いる。これらのワードは、最初の80個の素数の立方根の小数部の最初の64ビットを表す。16進数においては、これらの定数ワードは(左から右へ)、以下の通りである。
k パディング・ステップの際にメッセージに付加されたゼロの数。
l メッセージMのビット単位の長さ。
m メッセージブロックM(i)内のビット数。SHA−512においては、各メッセージブロックは1024ビットを有し、これは16個の64ビット・ワードのシーケンスとして表される。
M ハッシュされるメッセージ。
M(i) mビットのサイズを有するメッセージブロックi。
i番目のメッセージブロックのj番目のワードであり、ここで、
は、メッセージブロックiの左端ワードである。
n ワードが操作される際にローテート又はシフトされるビット数。
N パディングされたメッセージ内のブロック数。
T ハッシュ計算に用いられる一時的wビット・ワード。
w 1ワード内のビット数。
Wt メッセージスケジュールのt番目のwビット・ワード。
さらに、以下の記号の1つ又は複数が、セキュア・ハッシュ・アルゴリズム仕様において用いられ、それぞれがwビット・ワードに対して操作される。
∧ ビット単位の論理積演算。
∨ ビット単位の論理和(「包含的論理和」)演算。
¬ ビット単位の補数演算。
+ 2wを法とする加算。
<< 左シフト演算であり、ここでx<<nは、ワードxの左端のnビットを廃棄し、次に、結果にn個のゼロを右にパディングすることにより得られる。
>> 右シフト演算であり、ここでx>>nは、ワードxの右端のnビットを廃棄し、次に、結果にn個のゼロを左にパディングすることにより得られる。
∧ ビット単位の論理積演算。
∨ ビット単位の論理和(「包含的論理和」)演算。
¬ ビット単位の補数演算。
+ 2wを法とする加算。
<< 左シフト演算であり、ここでx<<nは、ワードxの左端のnビットを廃棄し、次に、結果にn個のゼロを右にパディングすることにより得られる。
>> 右シフト演算であり、ここでx>>nは、ワードxの右端のnビットを廃棄し、次に、結果にn個のゼロを左にパディングすることにより得られる。
さらに、以下の演算の1つ又は複数が、セキュア・ハッシュ・アルゴリズム仕様において用いられる。
ROTLn(x) 左ローテート(循環左シフト)演算、ここで、xはwビット・ワードであり、nは0≦n<wである整数であり、ROTLn(x)=(x<<n)∨(x>>w−n)によって定められる。
ROTRn(x) 右ローテート(循環右シフト)演算、ここで、xはwビット・ワードであり、nは0≦n<wである整数であり、ROTRn(x)=(x>>n)∨(x<<w−n)によって定められる。
SHRn(x) 右シフト演算、ここで、xはwビット・ワードであり、nは0≦n<wである整数であり、SHRn(x)=x>>nによって定められる。
ROTLn(x) 左ローテート(循環左シフト)演算、ここで、xはwビット・ワードであり、nは0≦n<wである整数であり、ROTLn(x)=(x<<n)∨(x>>w−n)によって定められる。
ROTRn(x) 右ローテート(循環右シフト)演算、ここで、xはwビット・ワードであり、nは0≦n<wである整数であり、ROTRn(x)=(x>>n)∨(x<<w−n)によって定められる。
SHRn(x) 右シフト演算、ここで、xはwビット・ワードであり、nは0≦n<wである整数であり、SHRn(x)=x>>nによって定められる。
演算x+yは、以下のように定められる。ワードx及びyは、整数X及びYを表し、ここで、0≦X<2w及び0≦Y<2wである。正の整数U modVについて、U及びVは、UをVで除算したときの余りとする。Z=(X+Y)mod 2wを計算する。次に、0≦Z<2wである。Zに対する整数をワードzに変換し、z=x+yを定める。
3.右シフト演算SHRn(x)、ここで、xはwビット・ワードであり、nは0≦n<wである整数であり、SHRn(x)=x>>nによって定められる。
4.右ローテート(循環右シフト)演算ROTRn(x)、ここで、xはwビット・ワードであり、nは0≦n<wである整数であり、ROTRn(x)=(x>>n)∨(x<<w−n)によって定められる。
よって、ROTRn(x)は、xをn位置だけ右に循環シフト(ローテート)するのに等しい。
5.以下の同値関係に留意されたい、ここで、wは各々の関係において一定である。
3.右シフト演算SHRn(x)、ここで、xはwビット・ワードであり、nは0≦n<wである整数であり、SHRn(x)=x>>nによって定められる。
4.右ローテート(循環右シフト)演算ROTRn(x)、ここで、xはwビット・ワードであり、nは0≦n<wである整数であり、ROTRn(x)=(x>>n)∨(x<<w−n)によって定められる。
よって、ROTRn(x)は、xをn位置だけ右に循環シフト(ローテート)するのに等しい。
5.以下の同値関係に留意されたい、ここで、wは各々の関係において一定である。
付加的に、SHA−512は、6つの論理関数の1つ又は複数を使用し、ここで、各々の関数は、x、y、及びzとして表される64ビット・ワードに演算を行う。各々の関数の結果は、新しい64ビット・ワードである。
SHA−512は2つの段階:即ち、前処理及びハッシュ計算で説明される。
SHA−512は2つの段階:即ち、前処理及びハッシュ計算で説明される。
SHA−512の前処理
前処理には、メッセージをパディングすること、パディングされたメッセージを構文解析してmビットのブロックにすること、及びハッシュ計算に使用される初期値を設定することが含まれる。初期化、パディング、及び構文解析を以下に説明する。
前処理には、メッセージをパディングすること、パディングされたメッセージを構文解析してmビットのブロックにすること、及びハッシュ計算に使用される初期値を設定することが含まれる。初期化、パディング、及び構文解析を以下に説明する。
最初の8つの素数の立方根の小数部の最初の64ビットを取ることによって、ワードが得られる。
メッセージのパディング
このパディングの目的は、パディングされたメッセージが、アルゴリズムに応じて、512又は1024ビットの倍数になることを保証することである。パディングは、ハッシュ計算がメッセージで始まる前に挿入することができ、又は、パディングを含むブロックを処理する前のハッシュ計算中の他のいかなる時点でも挿入することができる。
このパディングの目的は、パディングされたメッセージが、アルゴリズムに応じて、512又は1024ビットの倍数になることを保証することである。パディングは、ハッシュ計算がメッセージで始まる前に挿入することができ、又は、パディングを含むブロックを処理する前のハッシュ計算中の他のいかなる時点でも挿入することができる。
ビット単位でのメッセージMの長さを、lビットと仮定する。メッセージの最後にビット「1」を付加し、その後にk個のゼロビットが続き、ここで、kは、
に対する正の最小解である。次に、2進表現を用いて表された数lに等しい128ビットブロックを付加する。例えば、(8ビットASCII)メッセージ「abc」は、8×3=24の長さを有し、従って、このメッセージは、1024ビットのパディングされたメッセージになるように、1ビット、次に896−(24+1)=871個のゼロビット、次にメッセージの長さでパディングされる。
ここで、パディングされたメッセージの長さは、1024ビットの倍数となる。
に対する正の最小解である。次に、2進表現を用いて表された数lに等しい128ビットブロックを付加する。例えば、(8ビットASCII)メッセージ「abc」は、8×3=24の長さを有し、従って、このメッセージは、1024ビットのパディングされたメッセージになるように、1ビット、次に896−(24+1)=871個のゼロビット、次にメッセージの長さでパディングされる。
ここで、パディングされたメッセージの長さは、1024ビットの倍数となる。
メッセージの構文解析
メッセージ及びそのパディングは、構文解析されてN個のmビットブロックになる。
SHA−512に関して、メッセージ及びそのパディングは、構文解析されてN個の1024ビット・ブロック、M(1)、...、M(N)にされる。入力ブロックの1024ビットは16個の64ビットワードとして表すことができるので、メッセージブロックiの最初の64ビットは、
次の64ビットは、
と表記され、
まで以下同様である。
メッセージ及びそのパディングは、構文解析されてN個のmビットブロックになる。
SHA−512に関して、メッセージ及びそのパディングは、構文解析されてN個の1024ビット・ブロック、M(1)、...、M(N)にされる。入力ブロックの1024ビットは16個の64ビットワードとして表すことができるので、メッセージブロックiの最初の64ビットは、
次の64ビットは、
と表記され、
まで以下同様である。
SHA−512のハッシュ計算
ハッシュ計算は、パディングされたメッセージからメッセージスケジュールを生成し、関数、定数、及びワード演算と共にそのスケジュールを用いて、一連のハッシュ値を反復生成する。ハッシュ計算により生成される最終ハッシュ値は、メッセージダイジェストを求めるのに用いられる。
ハッシュ計算は、パディングされたメッセージからメッセージスケジュールを生成し、関数、定数、及びワード演算と共にそのスケジュールを用いて、一連のハッシュ値を反復生成する。ハッシュ計算により生成される最終ハッシュ値は、メッセージダイジェストを求めるのに用いられる。
SHA−512のハッシュ計算は、本明細書で説明されるように、関数及び定数を用い、加算(+)は264を法として実施される。
各メッセージブロックM(1)、M(2)、...、M(N)は、以下のステップを用いてイン・オーダー式に処理される。:
For i=1 to N:
{
1.メッセージスケジュール{Wt}を準備する。:
2.8つの作業変数a、b、c、d、e、f、g、及びhを(i−1)番目のハッシュ値で初期化する。:
4.i番目の中間ハッシュ値H(i)を計算する。
For i=1 to N:
{
1.メッセージスケジュール{Wt}を準備する。:
2.8つの作業変数a、b、c、d、e、f、g、及びhを(i−1)番目のハッシュ値で初期化する。:
4.i番目の中間ハッシュ値H(i)を計算する。
上述されたのは、最初に擬似乱数生成器をシード又は再シードし、及び/又は生成操作を実施して、擬似乱数を生成するためのCPU命令の一例である。この命令は、擬似乱数を生成する高性能の手段を提供し、NIST規格に適合し、代替的生成技術に拡張可能である。命令の右から左への処理(即ち、生成操作における)は、特定の情報を保存する必要がないため、特定の性能の利点をもたらす。
一例において、命令は、各々が開始、再シード、及び/又は生成を実施するのに用いられる異なるアルゴリズムに対応する、付加的な機能コードを指定することによって拡張可能である。異なるアルゴリズムは、NIST規格に適合する他のアルゴリズムを含むことができる。他のアルゴリズムの例として、HMAC_DRBG(ハッシュベースのメッセージ認証コード_DRBG)、CTR_DRBG(Counter−DRBG)、及びDUAL_EC_DRBG(Dual_Elliptic Curve_DRBG)が挙げられる。さらに、機能コードは、512、256、又はその他のような異なるハッシュ又はキーの長さを識別するために用いることができる。従って、一例において、機能コードは、アルゴリズムの表示、及びハッシュ又はキーの長さの表示を含むことができ、それにより、本明細書で説明されるSHA−512技術に加えて多くの可能性が提供される。さらに、機能コードは、他のタイプの機能を指定することもできる。多くの可能性が存在する。
本明細書において、メモリ、主メモリ、ストレージ、及び主ストレージは、明示的に又は文脈によって別様に示されない限り、互換的に使用される。
当業者により認識されるように、態様は、システム、方法、又はコンピュータ・プログラム製品として具体化することができる。従って、態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコード等を含む)、又はソフトウェアの態様とハードウェアの態様とを組み合わせた実施形態の形を取ることができ、これらは全て、本明細書において、一般的に「回路」、「モジュール」又は「システム」と呼ぶことができる。さらに、態様は、コンピュータ可読プログラム・コードが組み込まれた、1つ又は複数のコンピュータ可読媒体内に具体化されたコンピュータ・プログラム製品の形を取ることができる。
1つ又は複数のコンピュータ可読媒体のいずれの組み合わせを用いることもできる。コンピュータ可読媒体は、コンピュータ可読ストレージ媒体とすることができる。コンピュータ可読ストレージ媒体は、これらに限定されるものではないが、例えば、電子、磁気、光学、電磁気、赤外線又は半導体のシステム、装置又はデバイス、又は上記のいずれかの適切な組み合わせとすることができる。コンピュータ可読ストレージ媒体のより具体的な例(非網羅的なリスト)として、以下のもの、即ち、1つ又は複数の配線を有する電気的接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み出し専用メモリ(ROM)、消去可能なプログラム可能読み出し専用メモリ(EPROM又はフラッシュメモリ)、光ファイバ、ポータブル・コンパクト・ディスク読み出し専用メモリ(CD−ROM)、光記憶装置、磁気記憶装置、又は上記のいずれかの適切な組み合わせが挙げられる。本明細書の文脈において、コンピュータ可読ストレージ媒体は、命令実行システム、装置若しくはデバイスによって用いるため、又はそれらと接続して用いるためにプログラムを収容又は格納することができるいずれかの有形媒体とすることができる。
ここで図23を参照すると、一例において、コンピュータ・プログラム製品1000は、例えば、1つ又は複数の態様を提供し、容易にするように、コンピュータ可読プログラム・コード手段又は論理1004をその上に格納するための1つ又は複数の非一時的(non−transitory)コンピュータ可読ストレージ媒体1002を含む。
コンピュータ可読媒体上に具体化されたプログラム・コードは、これらに限られるものではないが、無線、有線、光ファイバ・ケーブル、RF等、又は上記のいずれかの適切な組み合わせを含む、適切な媒体を用いて伝送することができる。
態様に関する操作を実行するためのコンピュータ・プログラム・コードは、Java、SmallTalk、C++等のようなオブジェクト指向型プログラミング言語、及び、「C」プログラミング言語、アセンブラ、又は同様のプログラミング言語のような従来の手続き型プログラミング言語を含む、1つ又は複数のプログラミング言語のいずれかの組み合わせで書くことができる。プログラム・コードは、完全にユーザのコンピュータ上で実行される場合もあり、スタンドアロンのソフトウェア・パッケージとして、一部がユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。最後のシナリオにおいては、遠隔コンピュータは、ローカル・エリア・ネットワーク(LAN)若しくは広域ネットワーク(WAN)を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部コンピュータへの接続がなされる場合もある(例えば、インターネット・サービス・プロバイダを用いたインターネットを通じて)。
態様は、1つ又は複数の実施形態による方法、装置(システム)及びコンピュータ・プログラム製品のフローチャート図及び/又はブロック図を参照して、本明細書で説明される。フローチャート図及び/又はブロック図の各ブロック、並びにフローチャート図及び/又はブロック図内のブロックの組み合わせは、コンピュータ・プログラム命令によって実装できることが理解されるであろう。これらのコンピュータ・プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えてマシンを製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャート及び/又はブロック図の1つ以上のブロックにおいて指定された機能/動作を実装するための手段を作り出すようにすることができる。
これらのコンピュータ・プログラム命令はまた、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイスを特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、それにより、そのコンピュータ可読媒体内に格納された命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実装する命令を含む製品を製造するようにすることもできる。
コンピュータ・プログラム命令はまた、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、一連の動作ステップをコンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で行わせてコンピュータ実施のプロセスを生成し、それにより、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実行するためのプロセスを提供するようにもすることもできる。
図面内のフローチャート及びブロック図は、種々の実施形態によるシステム、方法及びコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能及び動作を示す。この点に関して、フローチャート又はブロック図内の各ブロックは、指定された論理機能を実装するための1つ又は複数の実行可能命令を含むモジュール、セグメント、又はコードの部分を表すことができる。幾つかの代替的な実装において、ブロック内に記載された機能は、図面内に記載された順序とは異なる順序で行われ得ることにも留意すべきである。例えば、連続して示された2つのブロックが、関与する機能に応じて、実際には、実質的に同時に実行されることもあり、ときにはブロックが逆順に実行されることもある。また、ブロック図及び/又はフローチャート図の各ブロック、並びにブロック図及び/又はフローチャート図内のブロックの組み合わせは、指定された機能又は動作を行う専用ハードウェア・ベースのシステムによって、又は専用ハードウェアとコンピュータ命令との組み合わせによって実装できることにも留意されたい。
上記に加えて、1つ又は複数の態様は、顧客環境の管理を提供するサービス・プロバイダにより、供与し、提供し、配置し、管理し、サービスを行うことなどができる。例えば、サービス・プロバイダは、1つ又は複数の顧客に対して1つ又は複数の態様を実施するコンピュータ・コード及び/又はコンピュータ・インフラストラクチャを作成し、保持し、サポートすることなどができる。見返りとして、サービス・プロバイダは、例として、予約申し込み及び/又は報酬契約の下で顧客から支払いを受けることができる。付加的に又は代替的に、サービス・プロバイダは、1つ又は複数の第三者に対する広告コンテンツの販売から支払いを受けることができる。
一態様において、1つ又は複数の態様を実施するために、アプリケーションを配置することができる。一例として、アプリケーションの配置は、1つ又は複数の態様を実施するように動作可能なコンピュータ・インフラストラクチャを提供することを含む。
更に別の態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含む、コンピュータ・インフラストラクチャを配置することが可能であり、そこでは、コードは、コンピューティング・システムと協働して、1つ又は複数の態様を実施することができる。
更に別の態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含む、コンピュータ・インフラストラクチャを統合するためのプロセスを提供することができる。コンピュータ・システムは、コンピュータ可読媒体を含み、ここで、コンピュータ媒体は1つ又は複数の態様を含む。コードは、コンピュータ・システムと協働して、1つ又は複数の態様を実施することができる。
種々の実施形態が上述されたが、これらは例にすぎない。例えば、他のアーキテクチャのコンピューティング環境が、1つ又は複数の態様を組み込み、用いることが可能である。さらに、1つ又は複数の態様から逸脱することなく、命令に対する変更をなすことができる。さらに他のレジスタを用いることもできる。付加的に、他の実施形態(例えば他の技術についての)では、連結又は他の計算において、他の値を用いることもできる。他の変形も可能である。
さらに、他のタイプのコンピューティング環境が、1つ又は複数の態様から利益を得ることができる。一例として、システム・バスを通してメモリ要素に直接的に又は間接的に結合された少なくとも2つのプロセッサを含む、プログラム・コードを格納及び/又は実行するのに適したデータ処理システムが使用可能である。メモリ要素は、例えば、プログラム・コードの実際の実行時に用いられるローカル・メモリと、大容量記憶装置と、実行時に大容量記憶装置からコードを取得しなければならない回数を減少させるために少なくとも幾つかのプログラム・コードの一時的なストレージを提供するキャッシュ・メモリとを含む。
入力/出力即ちI/O装置(キーボード、ディスプレイ、ポインティング装置、DASD、テープ、CD、DVD、親指ドライブ、及び他のメモリ媒体等を含むが、これらに限定されるものではない)は、直接的に、又は介在するI/Oコントローラを通して、システムに結合することができる。データ処理システムが、介在するプライベート・ネットワーク又は公衆ネットワークを通して、他のデータ処理システム又は遠隔プリンタ若しくはストレージ装置に結合できるように、ネットワーク・アダプタをシステムに結合することもできる。モデム、ケーブル・モデム及びイーサネット・カードは、利用可能なタイプのネットワーク・アダプタのほんの数例にすぎない。
図24を参照すると、1つ又は複数の態様を実装するためのホスト・コンピュータ・システム5000の代表的なコンポーネントが描かれている。代表的なホスト・コンピュータ5000は、コンピュータ・メモリ(即ち、中央ストレージ)5002と通信状態にある1つ又は複数のCPU5001に加えて、ストレージ媒体デバイス5011及び他のコンピュータ又はSAN等と通信するためのネットワーク5010へのI/Oインターフェースを含む。CPU5001は、アーキテクチャ化された(architected)命令セット及びアーキテクチャ化された機能を有するアーキテクチャに準拠している。CPU5001は、プログラム・アドレス(仮想アドレス)をメモリの実アドレスに変換するための動的アドレス変換(Dynamic Address Translation、DAT)5003を有することができる。DATは、一般的に、変換をキャッシュに入れるための変換ルックアサイド・バッファ(TLB)5007を含むので、コンピュータ・メモリ5002のブロックへの後のアクセスは、アドレス変換の遅延を必要としない。一般的に、コンピュータ・メモリ5002とプロセッサ5001との間に、キャッシュ5009が用いられる。キャッシュ5009は、1つより多いCPUが利用可能な大容量のキャッシュと、大型のキャッシュと各CPUとの間のより小型でより高速な(下位レベルの)キャッシュとを有する階層とすることができる。幾つかの実装において、下位レベルのキャッシュは、命令のフェッチ及びデータ・アクセスのために別個の下位レベル・キャッシュを与えるように分割される。一実施形態においては、キャッシュ5009を介して、命令フェッチ・ユニット5004により、命令がメモリ5002からフェッチされる。命令は、命令デコード・ユニット5006でデコードされ、命令実行ユニット5008にディスパッチされる(幾つかの実施形態においては他の命令と共に)。一般的には、例えば、算術演算実行ユニット、浮動小数点実行ユニット、及び分岐命令実行ユニットなどの幾つかの実行ユニット5008が用いられる。命令は、実行ユニットにより実行され、必要に応じて命令が指定したレジスタ又はメモリからオペランドにアクセスする。メモリ5002からオペランドにアクセスする(ロード又はストアする)場合、典型的には、ロード/ストア・ユニット5005が、実行される命令の制御下でアクセスを処理する。命令は、ハードウェア回路又は内部のマイクロコード(ファームウェア)において、又はその両方の組み合わせによって実行することができる。
既述のように、コンピュータ・システムは、ローカル(又は主)ストレージ内の情報、並びに、アドレッシング、保護、参照、及び変更の記録を含む。アドレッシングの幾つかの態様は、アドレスの形式、アドレス空間の概念、種々のタイプのアドレス、及び1つのタイプのアドレスを別のタイプのアドレスに変換する方法を含む。主ストレージの一部は、永続的に割り当てられた記憶位置を含む。主ストレージは、システムに、データの直接アドレス指定可能な高速アクセス・ストレージを与える。データ及びプログラムを処理できるようになる前に、(入力装置から)データ及びプログラムの両方が、主ストレージにロードされる。
主ストレージは、キャッシュと呼ばれることもある、1つ又は複数のより小さくより高速アクセスのバッファ・ストレージを含むことができる。キャッシュは、典型的には、CPU又はI/Oプロセッサと物理的に関連付けられる。物理的構成及び別個のストレージ媒体を使用することの影響は、性能に対するものを除き、通常、プログラムにより観察することはできない。
命令及びデータ・オペランドについて、別個のキャッシュを保持することができる。キャッシュ内の情報は、キャッシュ・ブロック又はキャッシュ・ライン(又は短縮してライン)と呼ばれる、整数境界(integral boundary)上にある連続したバイト内に保持される。モデルは、キャッシュ・ラインのサイズをバイトで返す、EXTRACT CACHE ATTRIBUTE命令を提供することができる。モデルはまた、データ若しくは命令キャッシュへのストレージのプリフェッチ、又は、キャッシュからのデータの解放に影響を与える、PREFETCH DATA及びPREFETCH DATA RELATIVE LONG命令を提供することができる。
ストレージは、長い水平方向のビットの文字列と考えられる。大部分の操作において、ストレージへのアクセスは、左から右への順序で進む。ビットの文字列は、8ビット単位で分割される。この8ビットの単位は1バイトと呼ばれ、全ての情報の形式の基本構成要素(building block)である。ストレージ内の各々のバイト位置は、負でない一意の整数により識別され、この整数がそのバイト位置のアドレスであり、即ち、簡単にバイト・アドレスである。隣接するバイト位置は、連続するアドレスを有し、左の0で始まって、左から右への順序で進む。アドレスは、符号なしの2進整数であり、24ビット、31ビット、又は64ビットである。
情報は、ストレージとCPU又はチャネル・サブシステムとの間で、一度に1バイトずつ、又は1バイト・グループずつ伝送される。特に断りのない限り、例えばz/Architectureにおいては、ストレージ内のバイト・グループは、グループの左端のバイトによりアドレス指定される。グループ内のバイト数は、実行される操作により暗黙に指定されるか又は明示的に指定される。CPU操作に用いられる場合、バイト・グループはフィールドと呼ばれる。例えばz/Architectureにおいては、バイト・グループの中の各々において、ビットは、左から右の順序で番号が付けられる。z/Architectureにおいては、左端ビットは「上位(high-order)」ビットと呼ばれることがあり、右端ビットは「下位(low-order)」ビットと呼ばれることがある。しかしながら、ビット数は、ストレージ・アドレスではない。バイトだけを、アドレス指定することができる。ストレージ内の1つのバイトの個々のビットに対して操作を行うためには、そのバイト全体にアクセスされる。1バイトの中のビットには、左から右に0から7までの番号が付けられる(例えばz/Architectureにおいて)。1つのアドレスの中のビットには、24ビット・アドレスの場合は8−31若しくは40−63の番号を付けることができ、又は、31ビット・アドレスの場合は1−31若しくは33−63の番号を付けることができ、64ビット・アドレスの場合は0−63の番号が付けられる。複数のバイトから成る他のいずれかの固定長形式の中では、その形式を構成するビットには、0から始まる連続番号が付けられる。エラー検出のため及び好ましくは訂正のために、各バイト又はバイト・グループと共に、1つ又は複数の検査ビットが伝送されることがある。このような検査ビットは、マシンにより自動的に生成されるものであり、プログラムが直接制御することはできない。記憶容量は、バイト数で表わされる。ストレージ・オペランド・フィールドの長さが命令のオペレーション・コードで暗黙的に指定される場合、そのフィールドは固定長を有すると言われ、固定長は、1バイト、2バイト、4バイト、8バイト、又は16バイトとすることができる。一部の命令では、より長いフィールドが暗黙的に指定されることもある。ストレージ・オペランド・フィールドの長さが暗黙的に指定されず明示的に記述される場合は、そのフィールドは可変長を有すると言われる。可変長オペランドは、1バイトのインクリメントにより変化し得る(又は、一部の命令では、2バイトの倍数若しくは他の倍数)。情報がストレージ内に置かれるとき、ストレージへの物理パスの幅が格納されるフィールドの長さを上回り得るとしても、指定されたフィールド内に含まれるバイト位置のコンテンツのみが置き換えられる。
特定の情報単位は、ストレージ内の整数境界上にあることになる。そのストレージ・アドレスがバイトでの単位での長さの倍数であるとき、境界は、情報単位に関して整数のものであると言われる。整数境界上にある2バイト、4バイト、8バイト、及び16バイトのフィールドには、特別な名称が与えられる。ハーフワードは、2バイト境界上にある2個の連続したバイトのグループであり、これは、命令の基本的な構成要素である。ワードは、4バイト境界上にある4個の連続したバイトのグループである。ダブルワード(doubleword)は、8バイト境界上にある8個の連続したバイトのグループである。クワッドワード(quadword)は、16バイト境界上にある16個の連続したバイトのグループである。ストレージ・アドレスが、ハーフワード、ワード、ダブルワード、及びクワッドワードを示す場合、そのアドレスの2進表現は、それぞれ、右端の1個、2個、3個、又は4個のビットが0になる。命令は、2バイトの整数境界上にあることになる。大部分の命令のストレージ・オペランドは、境界合わせ(boundary alignment)要件をもたない。
命令及びデータ・オペランドに対して別個のキャッシュを実装するデバイスにおいては、後に命令をフェッチするキャッシュ・ライン内にプログラムが格納される場合には、その格納が、後にフェッチされる命令を変更するかどうかに関係なく、著しい遅延が生じることがある。
一実施形態において、本発明は、ソフトウェア(ライセンス内部コード、ファームウェア、マイクロコード、ミリコード、ピココードなどと呼ばれる場合もあるが、そのいずれも1つ又は複数の態様と整合性がある)により実施することができる。図24を参照すると、1つ又は複数の態様を具体化するソフトウェア・プログラム・コードには、ホスト・システム5000のプロセッサ5001により、CD−ROMドライブ、テープドライブ、又はハードドライブといった長期ストレージ媒体デバイス5011からアクセスすることができる。ソフトウェア・プログラム・コードは、ディスケット、ハードドライブ、又はCD−ROMといった、データ処理システムと共に用いるための種々の周知の媒体のいずれかの上で具体化することができる。コードは、こうした媒体上に分散させても、又はコンピュータ・メモリ5002からユーザに分散させても、又は、こうした他のシステムのユーザが使用するために、ネットワーク5010上の1つのコンピュータ・システムのストレージから他のコンピュータ・システムに分散させてもよい。
ソフトウェア・プログラム・コードは、種々のコンピュータ・コンポーネント及び1つ又は複数のアプリケーション・プログラムの機能及び相互作用を制御するオペレーティング・システムを含む。プログラム・コードは、通常、ストレージ媒体デバイス5011から相対的により高速のコンピュータ・ストレージ5002にページングされ、そこでプロセッサ5001による処理のために利用可能になる。ソフトウェア・プログラム・コードをメモリ内、物理的媒体上で具体化し、及び/又は、ネットワークを介してソフトウェア・コードを分散させる技術及び方法は周知であり、ここではこれ以上論じない。プログラム・コードは、有形の媒体(これらに限定されるものではないが、電子メモリ・モジュール(RAM)、フラッシュメモリ、コンパクトディスク(CD)、DVD、磁気テープなどを含む)上に作成され格納されたとき、「コンピュータ・プログラム製品」と呼ばれることが多い。コンピュータ・プログラム製品媒体は、典型的には、処理回路による実行のために、好ましくはコンピュータ・システム内の処理回路によって読み取り可能である。
図25は、1つ又は複数の態様を実施することができる代表的なワークステーション又はサーバ・ハードウェア・システムを示す。図25のシステム5020は、随意的な周辺機器を含む、パーソナル・コンピュータ、ワークステーション、又はサーバなどの代表的なベース・コンピュータ・システム5021を含む。ベース・コンピュータ・システム5021は、1つ又は複数のプロセッサ5026と、周知の技術に従ってプロセッサ5026とシステム5021の他のコンポーネントを接続し、これらの間の通信を可能にするために用いられるバスとを含む。バスは、プロセッサ5026を、ハードドライブ(例えば、磁気媒体、CD、DVD、及びフラッシュメモリのいずれかを含む)又はテープドライブを含むことができる、メモリ5025及び長期ストレージ5027に接続する。システム5021はまた、バスを介して、マイクロプロセッサ5026を、キーボード5024、マウス5023、プリンタ/スキャナ5030、及び/又はタッチ・センシティブ・スクリーン、デジタル化された入力パッド等のいずれかのユーザ・インターフェース機器とすることができる他のインターフェース機器といった、1つ又は複数のインターフェース機器に接続する、ユーザ・インターフェース・アダプタを含むこともできる。バスはまた、ディスプレイ・アダプタを介して、LCDスクリーン又はモニタなどのディスプレイ装置5022をマイクロプロセッサ5026にも接続する。
システム5021は、ネットワーク5029と通信する5028ことができるネットワーク・アダプタを介して、他のコンピュータ又はコンピュータ・ネットワークと通信することができる。例示的なネットワーク・アダプタは、通信チャネル、トークン・リング、イーサネット又はモデムである。或いは、システム5021は、CDPD(セルラー・デジタル・パケット・データ)カードのような無線インターフェースを用いて通信することもできる。システム5021は、ローカル・エリア・ネットワーク(LAN)若しくは広域ネットワーク(WAN)、又はシステム5021内のこうした他のコンピュータと関連付けることができ、又は、別のコンピュータ等とのクライアント/サーバ構成におけるクライアントとすることができる。これらの構成の全て、並びに、適切な通信ハードウェア及びソフトウェアは、当技術分野において周知である。
図26は、1つ又は複数の態様を実施することができるデータ処理ネットワーク5040を示す。データ処理ネットワーク5040は、各々が複数の個々のワークステーション5041、5042、5043、5044を含むことができる、無線ネットワーク及び有線ネットワークのような複数の個々のネットワークを含むことができる。さらに、当業者であれば理解するように、1つ又は複数のLANを含ませることができ、そこで、LANは、ホスト・プロセッサに結合された複数のインテリジェント・ワークステーションを含むことができる。
さらに図26を参照すると、ネットワークはまた、ゲートウェイ・コンピュータ(クライアント・サーバ5046)、又はアプリケーション・サーバ(データ・リポジトリにアクセスすることができ、且つ、ワークステーション5045から直接アクセスすることもできる遠隔サーバ5048)のような、メインフレーム・コンピュータ又はサーバを含むこともできる。ゲートウェイ・コンピュータ5046は、各々の個々のネットワークへの入口点として働く。ゲートウェイは、1つのネットワーク・プロトコルを別のものに接続するときに必要とされる。ゲートウェイ5046は、通信リンクによって別のネットワーク(例えば、インターネット5047)に結合できることが好ましい。ゲートウェイ5046はまた、通信リンクを用いて、1つ又は複数のワークステーション5041、5042、5043、5044に直接結合することもできる。ゲートウェイ・コンピュータは、インターナショナル・ビジネス・マシーンズ・コーポレーションから入手可能なIBM eServer(商標)System zサーバを用いて実装することができる。
図25及び図26を同時に参照すると、1つ又は複数の態様を具体化することができるソフトウェア・プログラム・コードには、一般的に、CD−ROMドライブ又はハードドライブといった長期ストレージ媒体5027から、システム5020のプロセッサ5026によってアクセスすることができる。ソフトウェア・プログラム・コードは、ディスケット、ハードドライブ、又はCD−ROMといった、データ処理システムと共に用いるための種々の周知の媒体のいずれかの上で具体化することができる。コードは、そのような媒体上で分散させても、又はメモリからユーザ5050、5051に分散させても、或いは、こうした他のシステムのユーザが用いるために、ネットワーク上の1つのコンピュータ・システムのストレージから他のコンピュータ・システムに分散させてもよい。
或いは、プログラム・コードをメモリ5025内で具体化し、プロセッサ・バスを用いてプロセッサ5026によってプログラム・コードにアクセスすることができる。このようなプログラム・コードは、種々のコンピュータ・コンポーネント及び1つ又は複数のアプリケーション・プログラム5032の機能及び相互作用を制御するオペレーティング・システムを含む。プログラム・コードは、通常、ストレージ媒体5027から高速メモリ5025にページングされ、そこでプロセッサ5026による処理のために利用可能になる。ソフトウェア・プログラム・コードをメモリ内、物理的媒体上で具体化し、及び/又は、ネットワークを介してソフトウェア・コードを配布する技術及び方法は周知であり、ここではこれ以上論じない。プログラム・コードは、作成され、有形の媒体(これらに限定されるものではないが、電子メモリ・モジュール(RAM)、フラッシュメモリ、コンパクトディスク(CD)、DVD、磁気テープなどを含む)に格納されたとき、「コンピュータ・プログラム製品」と呼ばれることが多い。コンピュータ・プログラム製品媒体は、典型的には、処理回路による実行のために、好ましくはコンピュータ・システム内の処理回路によって読み取り可能である。
プロセッサが最も容易に利用できるキャッシュ(通常、プロセッサの他のキャッシュよりも高速で小さい)は、最下位(L1又はレベル1)のキャッシュであり、メインストア(主メモリ)は、最上位レベルのキャッシュ(3つのレベルがある場合にはL3)である。最下位レベルのキャッシュは、実行されるマシン命令を保持する命令キャッシュ(I−キャッシュ)と、データ・オペランドを保持するデータ・キャッシュ(D−キャッシュ)とに分割されることが多い。
図27を参照すると、プロセッサ5026についての例示的なプロセッサの実施形態が示される。典型的には、メモリ・ブロックをバッファに入れてプロセッサ性能を向上させるために、1つ又は複数のレベルのキャッシュ5053が用いられる。キャッシュ5053は、用いられる可能性が高いメモリ・データのキャッシュ・ラインを保持する高速バッファである。典型的なキャッシュ・ラインは、64バイト、128バイト、又は256バイトのメモリ・データである。データをキャッシュに入れるのではなく、命令をキャッシュに入れるために、別個のキャッシュが用いられることが多い。キャッシュ・コヒーレンス(メモリ及びキャッシュ内のラインのコピーの同期)は、多くの場合、当技術分野において周知の種々の「スヌープ(snoop)」アルゴリズムによって与えられる。プロセッサ・システムの主メモリ・ストレージ5025は、キャッシュと呼ばれることが多い。4つのレベルのキャッシュ5053を有するプロセッサ・システムにおいて、主ストレージ5025は、典型的にはより高速であり、且つ、コンピュータ・システムが利用できる不揮発性ストレージ(DASD、テープ等)の一部だけを保持するので、レベル5(L5)のキャッシュと呼ばれることがある。主ストレージ5025は、オペレーティング・システムによって主ストレージ5025との間でページングされるデータのページを「キャッシュに入れる」。
プログラム・カウンタ(命令カウンタ)5061は、実行される現行の命令のアドレスを常時監視している。z/Architectureプロセッサのプログラム・カウンタは64ビットであり、従来のアドレッシング制限をサポートするために、31ビット又は24ビットに切り捨てることができる。プログラム・カウンタは、典型的には、コンテキスト・スイッチの際に持続するように、コンピュータのPSW(プログラム状況ワード)内で具体化される。従って、例えば、オペレーティング・システムにより、プログラム・カウンタ値を有する進行中のプログラムに割り込みをかけることが可能である(プログラム環境からオペレーティング・システム環境へのコンテキスト・スイッチ)。プログラムのPSWは、プログラムがアクティブでない間、プログラム・カウンタ値を保持し、オペレーティング・システムが実行されている間、オペレーティング・システムの(PSW内の)プログラム・カウンタが用いられる。典型的には、プログラム・カウンタは、現行の命令のバイト数に等しい量だけインクリメントされる。RISC(縮小命令セット・コンピューティング)命令は、典型的には固定長であり、CISC(複合命令セット・コンピューティング)命令は、典型的には可変長である。IBM(登録商標) z/Architectureの命令は、2バイト、4バイト、又は6バイトの長さを有するCISC命令である。例えば、コンテキスト・スイッチ操作又は分岐命令の分岐成立(Branch taken)操作により、プログラム・カウンタ5061が変更される。コンテキスト・スイッチ操作において、現行のプログラム・カウンタ値は、実行されるプログラムについての他の状態情報(条件コードのような)と共にプログラム状況ワード内に保存され、実行される新しいプログラム・モジュールの命令を指し示す新しいプログラム・カウンタ値がロードされる。分岐成立操作を行い、分岐命令の結果をプログラム・カウンタ5061にロードすることにより、プログラムが判断を下すこと又はプログラム内でループすることを可能にする。
典型的には、プロセッサ5026の代わりに命令をフェッチするために、命令フェッチ・ユニット5055が用いられる。フェッチ・ユニットは、「次の順次命令(next sequential instruction)」、分岐成立命令のターゲット命令、又はコンテキスト・スイッチの後のプログラムの最初の命令のいずれかをフェッチする。今日の命令フェッチ・ユニットは、プリフェッチされた命令を用いることができる可能性に基づいて、命令を投機的にプリフェッチするプリフェッチ技術を用いることが多い。例えば、フェッチ・ユニットは、次の順次命令を含む16バイトの命令と、付加的なバイトの更なる順次命令とをフェッチすることができる。
次いで、フェッチされた命令が、プロセッサ5026によって実行される。1つの実施形態において、フェッチされた命令は、フェッチ・ユニットのディスパッチ・ユニット5056に渡される。ディスパッチ・ユニットは命令をデコードし、デコードされた命令についての情報を適切なユニット5057、5058、5060に転送する。実行ユニット5057は、典型的には、命令フェッチ・ユニット5055からデコードされた算術命令についての情報を受け取り、命令の操作コードに従ってオペランドに関する算術演算を行う。オペランドは、好ましくは、メモリ5025、アーキテクチャ化レジスタ5059、又は実行される命令の即値フィールドのいずれかから、実行ユニット5057に与えられる。実行の結果は、格納された場合には、メモリ5025、レジスタ5059、又は他のマシン・ハードウェア(制御レジスタ、PSWレジスタなどのような)内に格納される。
プロセッサ5026は、典型的には、命令の機能を実行するための1つ又は複数の実行ユニット5057、5058、5060を有する。図28を参照すると、実行ユニット5057は、インターフェース論理5071を介して、アーキテクチャ化された汎用レジスタ5059、デコード/ディスパッチ・ユニット5056、ロード・ストア・ユニット5060、及び他のプロセッサ・ユニット5065と通信することができる。実行ユニット5057は、幾つかのレジスタ回路5067、5068、5069を用いて、算術論理演算ユニット(ALU)5066が動作する情報を保持することができる。ALUは、加算(add)、減算(subtract)、乗算(multiply)、及び除算(divide)などの算術演算、並びに、論理積(and)、論理和(or)、及び排他的論理和(XOR)、ローテート(rotate)及びシフト(shift)のような論理関数を実行する。ALUは、設計に依存する専用の演算をサポートすることが好ましい。他の回路は、例えば条件コード及び回復サポート論理を含む、他のアーキテクチャ化ファシリティ5072を提供することができる。典型的には、ALU演算の結果は、出力レジスタ回路5070に保持され、この出力レジスタ回路5070が、結果を種々の他の処理機能に転送することができる。多数のプロセッサ・ユニットの構成が存在し、本説明は、一実施形態の代表的な理解を与えることのみを意図している。
例えばADD命令は、算術及び論理機能を有する実行ユニット5057で実行され、一方、例えば浮動小数点命令は、特化された浮動小数点能力を有する浮動小数点実行部で実行される。実行ユニットは、オペランドに対して操作コードが定めた関数を行うことにより、命令が特定したオペランドに対して動作することが好ましい。例えば、ADD命令は、命令のレジスタ・フィールドによって特定された2つのレジスタ5059内に見出されるオペランドに対して、実行ユニット5057により実行することができる。
実行ユニット5057は、2つのオペランドに対して算術加算を実行し、結果を第3のオペランドに格納し、ここで第3のオペランドは、第3のレジスタであっても又は2つのソース・レジスタのいずれかであってもよい。実行ユニットは、シフト、ローテート、論理積、論理和、及び排他的論理和のような種々の論理関数、並びに、加算、減算、乗算、除法のいずれかを含む、種々の代数関数を実行することができる算術論理演算ユニット(ALU)5066を用いることが好ましい。スカラー演算のために設計されたALU5066もあり、浮動小数点のために設計されたものALU5066もある。データは、アーキテクチャに応じて、ビッグエンディアン(最下位のバイトが最も高いバイト・アドレスである)、又はリトルエンディアン(最下位のバイトが最も低いバイト・アドレスである)とすることができる。IBM(登録商標) z/Architectureは、ビッグエンディアンである。符号付きフィールドは、アーキテクチャに応じて、符号及び大きさ、1の補数、又は2の補数とすることができる。2の補数における負の値又は正の値は、ALU内で加法しか必要としないため、ALUが減算能力を設計する必要がないという点で、2の補数は有利である。数値は、通常、省略表現で記述され、12ビット・フィールドは、4,096バイトブロックのアドレスを定め、通常、例えば4Kバイト(キロバイト)ブロックのように記述される。
図29を参照すると、分岐命令を実行するための分岐命令情報が、典型的には、分岐ユニット5058に送られ、この分岐ユニット5058は、多くの場合、分岐履歴テーブル5082のような分岐予測アルゴリズムを用いて、他の条件付き演算が完了する前に分岐の結果を予測する。条件付き演算が完了する前に、現行の分岐命令のターゲットがフェッチされ、投機的に実行される。条件付き演算が完了すると、投機的に実行された分岐命令は、条件付き演算の条件及び投機された結果に基づいて、完了されるか又は破棄される。典型的な分岐命令は、条件コードを試験し、条件コードが分岐命令の分岐要件を満たす場合、ターゲット・アドレスに分岐することができ、ターゲット・アドレスは、例えば、命令のレジスタ・フィールド又は即値フィールド内に見出されるものを含む幾つかの数に基づいて計算することができる。分岐ユニット5058は、複数の入力レジスタ回路5075、5076、5077と、出力レジスタ回路5080とを有するALU5074を用いることができる。分岐ユニット5058は、例えば、汎用レジスタ5059、デコード・ディスパッチ・ユニット5056、又は他の回路5073と通信することができる。
例えば、オペレーティング・システムによって開始されるコンテキスト・スイッチ、コンテキスト・スイッチを発生させるプログラム例外又はエラー、コンテキスト・スイッチを発生させるI/O割り込み信号、或いは、(マルチスレッド環境における)複数のプログラムのマルチスレッド活動を含む様々な理由により、命令のグループの実行に割り込みがかけられることがある。コンテキスト・スイッチ動作は、現在実行中のプログラムについての状態情報を保存し、次いで、起動される別のプログラムについての状態情報をロードすることが好ましい。状態情報は、例えば、ハードウェア・レジスタ又はメモリ内に保存することができる。状態情報は、実行される次の命令を指し示すプログラム・カウンタ値と、条件コードと、メモリ変換情報と、アーキテクチャ化されたレジスタのコンテンツとを含むことが好ましい。コンテキスト・スイッチの活動は、ハードウェア回路、アプリケーション・プログラム、オペレーティング・システム・プログラム、又はファームウェア・コード(マイクロコード、ピココード、又はライセンス内部コード(LIC))単独で又はその組み合わせで実施することができる。
プロセッサは、命令により定義された方法に従ってオペランドにアクセスする。命令は、命令の一部の値を用いて即値オペランドを与えることができ、汎用レジスタ又は専用レジスタ(例えば、浮動小数点レジスタ)のいずれかを明示的に指し示す1つ又は複数のレジスタ・フィールドを与えることができる。命令は、操作コード・フィールドによって、オペランドとして識別されるインプライド・レジスタ(implied register)を用いることができる。命令は、オペランドのためのメモリ位置を用いることができる。z/Architectureの長変位ファシリティ(long displacement facility)により例示されるように、オペランドのメモリ位置を、レジスタ、即値フィールド、又はレジスタと即値フィールドの組み合わせによって与えることができ、命令は、基底レジスタ、指標レジスタ、及び即値フィールド(変位フィールド)を定め、これらが、例えば互いに加算されてメモリ内のオペランドのアドレスをもたらす。ここでの位置(location)は、典型的には、特に断りのない限り、主メモリ(主ストレージ)内の記憶位置を意味する。
図30を参照すると、プロセッサは、ロード/ストア・ユニット5060を用いて、ストレージにアクセスする。ロード/ストア・ユニット5060は、メモリ5053内のターゲット・オペランドのアドレスを取得し、オペランドをレジスタ5059又は別のメモリ5053の記憶位置にロードすることによってロード操作を行うことができ、或いは、メモリ5053内のターゲット・オペランドのアドレスを取得し、レジスタ5059又は別のメモリ5053の記憶位置から取得したデータをメモリ5053内のターゲット・オペランドの記憶位置に格納することによって、ストア操作を行うことができる。ロード/ストア・ユニット5060は、投機的なものであってもよく、命令シーケンスに対してアウト・オブ・オーダー式の順序でメモリにアクセスすることができるが、プログラムに対して、命令がイン・オーダー式に実行されたという外観を維持することになる。ロード/ストア・ユニット5060は、汎用レジスタ5059、デコード/ディスパッチ・ユニット5056、キャッシュ/メモリ・インターフェース5053、又は他の要素5083と通信することができ、ストレージ・アドレスを計算し、且つ、パイプライン処理を順に行って操作をイン・オーダー式に保持するための、種々のレジスタ回路、ALU5085、及び制御論理5090を含む。一部の動作は、アウト・オブ・オーダー式とすることができるが、ロード/ストア・ユニットは、アウト・オブ・オーダー式動作が、プログラムに対して、当技術分野において周知のようなイン・オーダー式に実行されたように見えるようにする機能を提供する。
好ましくは、アプリケーション・プログラムが「見ている」アドレスは、仮想アドレスと呼ばれることが多い。仮想アドレスは、「論理アドレス」及び「実効アドレス」と呼ばれることもある。これらの仮想アドレスは、これらに限定されるものではないが、単に仮想アドレスをオフセット値にプリフィックス付加すること、1つ又は複数の変換テーブルを介して仮想アドレスを変換することを含む、種々の動的アドレス変換(DAT)技術の1つによって、物理的メモリ位置にリダイレクトされるという点で仮想のものであり、変換テーブルは、少なくともセグメント・テーブル及びページ・テーブルを単独で又は組み合わせて含むことが好ましく、セグメント・テーブルは、ページ・テーブルを指し示すエントリを有することが好ましい。z/Architectureでは、領域第1テーブル、領域第2テーブル、領域第3テーブル、セグメント・テーブル、及び随意的なページ・テーブルを含む、変換の階層が提供される。アドレス変換の性能は、仮想アドレスを関連した物理的メモリ位置にマッピングするエントリを含む変換ルックアサイド・バッファ(TLB)を用いることにより改善されることが多い。DATが変換テーブルを用いて仮想アドレスを変換したときに、エントリが作成される。次いで、後に仮想アドレスを用いることで、低速の順次変換テーブル・アクセスではなく、高速のTLBのエントリを用いることが可能になる。TLBの内容は、LRU(Least Recently Used)を含む種々の置換アルゴリズムによって管理することができる。
プロセッサがマルチプロセッサ・システムのプロセッサである場合には、各プロセッサは、コヒーレンシのために、I/O、キャッシュ、TLB、及びメモリといった共有リソースをインターロック状態に保持する責任を負う。キャッシュ・コヒーレンシを保持する際に、一般的には「スヌープ」技術が用いられる。スヌープ環境においては、共有を容易にするために、各キャッシュ・ラインを、共有状態、排他的状態、変更状態、無効状態等のいずれか1つの状態にあるものとしてマーク付けすることができる。
I/Oユニット5054(図27)は、プロセッサに、例えば、テープ、ディスク、プリンタ、ディスプレイ、及びネットワークを含む周辺機器に取り付けるための手段を与える。I/Oユニットは、ソフトウェア・ドライバによってコンピュータ・プログラムに提示されることが多い。IBM(登録商標) System zのようなメインフレームにおいては、チャネル・アダプタ及びオープン・システム・アダプタが、オペレーティング・システムと周辺機器との間に通信をもたらすメインフレームのI/Oユニットである。
さらに、他のタイプのコンピューティング環境が、1つ又は複数の態様から利益を得ることができる。一例として、環境は、特定のアーキテクチャ(例えば、命令実行、アドレス変換などのアーキテクチャ化された機能、及びアーキテクチャ化されたレジスタを含む)又はそのサブセットをエミュレートする(例えば、プロセッサ及びメモリを有するネイティブ・コンピュータ・システム上で)エミュレータ(例えば、ソフトウェア又は他のエミュレーション機構)を含むことができる。このような環境においては、エミュレータを実行しているコンピュータが、エミュレートされる機能とは異なるアーキテクチャを有することができたとしても、エミュレータの1つ又は複数のエミュレーション機能により、1つ又は複数の態様が実施され得る。一例として、エミュレーション・モードにおいては、エミュレートされる特定の命令又は操作がデコードされ、適切なエミュレーション機能が構築され、個々の命令又は操作を実施する。
エミュレーション環境においては、ホスト・コンピュータは、例えば、命令及びデータを格納するためのメモリと、メモリから命令をフェッチし、随意的に、フェッチされた命令のためのローカル・バッファリングを提供するための命令フェッチ・ユニットと、フェッチされた命令を受信し、フェッチされた命令のタイプを判断するための命令デコード・ユニットと、命令を実行するための命令実行ユニットとを含む。実行は、データをメモリからレジスタ内にロードすること、データをレジスタから再びメモリに格納すること、又はデコード・ユニットにより判断されるように、何らかのタイプの算術演算又は論理演算を実行することを含むことができる。一例においては、各ユニットは、ソフトウェアで実装される。例えば、ユニットが実行する演算は、エミュレータ・ソフトウェア内の1つ又は複数のサブルーチンとして実装される。
より具体的には、メインフレームにおいて、アーキテクチャ化されたマシン命令は、通常、プログラマによって、多くの場合コンパイラ・アプリケーションを介して、今日では「C」プログラマによって用いられる。ストレージ媒体内に格納されたこれらの命令は、z/ArchitectureのIBM(登録商標)サーバにおいて、又は代替的に他のアーキテクチャを実行するマシンにおいて、ネイティブに実行することができる。これらの命令は、既存の及び将来のIBM(登録商標)メインフレーム・サーバにおいて、及び、IBM(登録商標)の他のマシン(例えば、Power Systemsサーバ及びSystem x(登録商標)サーバ)上で、エミュレートすることができる。これらの命令は、IBM(登録商標)、Intel(登録商標)、AMD(登録商標)などによって製造されたハードウェアを用いて種々のマシン上でLinux(登録商標)を実行しているマシンにおいて実行することができる。Z/Architecture下でそのハードウェア上で実行することに加えて、Linuxを用いること、並びに、一般に実行がエミュレーション・モードにある、Hercules、又はFSI(Fundamental Software,Inc)によるエミュレーションを用いるマシンを用いることもできる。エミュレーション・モードにおいては、ネイティブ・プロセッサによって、エミュレーション・ソフトウェアが実行され、エミュレートされたプロセッサのアーキテクチャをエミュレートする。
ネイティブ・プロセッサは、一般的に、エミュレートされたプロセッサのエミュレーションを実行するためにファームウェア又はネイティブ・オペレーティング・システムのいずれかを含むエミュレーション・ソフトウェアを実行する。エミュレーション・ソフトウェアは、エミュレートされたプロセッサ・アーキテクチャの命令のフェッチと実行を担当する。エミュレーション・ソフトウェアは、エミュレートされたプログラム・カウンタを維持し、命令境界を常時監視している。エミュレーション・ソフトウェアは、一度に1つ又は複数のエミュレートされたマシン命令をフェッチし、ネイティブ・プロセッサにより実行するために、その1つ又は複数のエミュレートされたマシン命令を、対応するネイティブマシン命令のグループに変換することができる。これらの変換された命令は、より速い変換を達成できるようにキャッシュに入れることができる。それにも関わらず、エミュレーション・ソフトウェアは、エミュレートされたプロセッサ・アーキテクチャのアーキテクチャ規則を維持して、オペレーティング・システム及びエミュレートされたプロセッサのために書かれたアプリケーションが正確に動作することを保証しなければならない。さらに、エミュレーション・ソフトウェアは、これらに限られるものではないが、制御レジスタ、汎用レジスタ、浮動小数点レジスタ、例えばセグメント・テーブル及びページ・テーブルを含む動的アドレス変換機能、割り込み機構、コンテキスト・スイッチ機構、時刻(Time of Day、TOD)クロック、及びI/Oサブシステムへのアーキテクチャ化インターフェースを含む、エミュレートされたプロセッサのアーキテクチャによって識別されるリソースを提供し、オペレーティング・システム又はエミュレートされたプロセッサ上で実行するように設計されたアプリケーション・プログラムが、エミュレーション・ソフトウェアを有するネイティブ・プロセッサ上で実行できるようにしなければならない。
エミュレートされた特定の命令がデコードされ、個々の命令の機能を実行するためのサブルーチンが呼び出される。エミュレートされたプロセッサ1の機能をエミュレートするエミュレーション・ソフトウェア機能は、例えば、「C」サブルーチン又はドライバにおいて、或いは、1つ又は複数の実施形態の説明を理解した後で当業者の技術の範囲内にあるような特定のハードウェアのためにドライバを提供する他の何らかの方法で実装される。種々のソフトウェア及びハードウェア・エミュレーションの特許には、これらに限られるものではないが、Beausoleil他による「Multiprocessor for Hardware Emulation」という名称の特許文献1、Scalzi他による「Preprocessing of Stored Target Routines for Emulating Incompatible Instructions on a Target Processor」という名称の特許文献2、Davidian他による「Decoding Guest Instruction to Directly Access Emulation Routines that Emulate the Guest Instructions」という名称の特許文献3、Gorishek他による「Symmetrical Multiprocessing Bus and Chipset Used for Coprocessor Support Allowing Non−Native Code to Run in a System」という名称の特許文献4、Lethin他による「Dynamic Optimizing Object Code Translator for Architecture Emulation and Dynamic Optimizing Object Code Translation Method」という名称の特許文献5、Eric Trautによる「Method for Emulating Guest Instructions on a Host Computer Through Dynamic Recompilation of Host Instructions」という名称の特許文献6、及び他の多くが挙げられ、これらの参考文献は、当業者が利用可能なターゲット・マシンのための異なるマシン用に設計された命令形式のエミュレーションを達成する様々な既知の方法を示す。
図31において、ホスト・アーキテクチャのホスト・コンピュータ・システム5000’をエミュレートする、エミュレートされたホスト・コンピュータ・システム5092の一例が提供される。エミュレートされたホスト・コンピュータ・システム5092では、ホスト・プロセッサ(CPU)5091は、エミュレートされたホスト・プロセッサ(又は仮想ホスト・プロセッサ)であり、且つ、ホスト・コンピュータ5000’のプロセッサ5091のものとは異なるネイティブな命令セット・アーキテクチャを有するエミュレーション・プロセッサ5093を含む。エミュレートされたホスト・コンピュータ・システム5092は、エミュレーション・プロセッサ5093がアクセス可能なメモリ5094を有する。例示的な実施形態において、メモリ5094は、ホスト・コンピュータ・メモリ5096の部分と、エミュレーション・ルーチン5097の部分とに区分化される。ホスト・コンピュータ・メモリ5096は、ホスト・コンピュータ・アーキテクチャに従い、エミュレートされたホスト・コンピュータ・システム5092のプログラムに利用可能である。エミュレーション・プロセッサ5093は、エミュレートされたプロセッサ5091のもの以外のアーキテクチャのアーキテクチャ化された命令セットのネイティブ命令を実行し、このネイティブ命令はエミュレーション・ルーチン・メモリ5097から取得されたものであり、且つ、エミュレーション・プロセッサ5093は、シーケンス及びアクセス/デコード・ルーチンにおいて取得される1つ又は複数の命令を用いることにより、ホスト・コンピュータ・メモリ5096の中のプログラム由来の実行のためのホスト命令にアクセスすることができ、このシーケンス及びアクセス/デコード・ルーチンは、アクセスされたホスト命令をデコードして、アクセスされたホスト命令の機能をエミュレートするためのネイティブ命令実行ルーチンを判断することができる。ホスト・コンピュータ・システム5000’のアーキテクチャのために定められた、例えば、汎用レジスタ、制御レジスタ、動的アドレス変換、及びI/Oサブシステムのサポート、並びにプロセッサ・キャッシュといったファシリティを含む他のファシリティを、アーキテクチャ化ファシリティ・ルーチンによってエミュレートすることができる。エミュレーション・ルーチンは、エミュレーション・ルーチンの性能を高めるために、エミュレーション・プロセッサ5093において利用可能な(汎用レジスタ、及び仮想アドレスの動的変換といった)機能を利用することもできる。ホスト・コンピュータ5000’の機能をエミュレートする際にプロセッサ5093を補助するために、専用のハードウェア及びオフ・ロード・エンジンを設けることもできる。
本明細書で用いられる用語は、特定の実施形態を説明する目的のためのものにすぎず、本発明を限定することを意図したものではない。本明細書で用いられる場合、単数形「1つの(a)」、「1つの(an)」及び「その(the)」は、文脈が特に明示しない限り、複数形も同様に含むことを意図したものである。「含む(comprise)」及び/又は「含んでいる(comprising)」という用語は、本明細書で用いられる場合、記述された特徴、整数、ステップ、動作、要素、及び/又はコンポーネントの存在を指示するが、1つ又は複数の他の特徴、整数、ステップ、動作、要素、コンポーネント、及び/又はそれらの群の存在又は追加を排除するものではないこともさらに理解されるであろう。
下記の特許請求の範囲におけるすべての機能付き手段(ミーンズ・プラス・ファンクション)又は機能付き工程(ステップ・プラス・ファンクション)の対応する構造、材料、動作、及び均等物は、もしあれば、その機能を、明確に請求されている他の特許請求された要素と組み合わせて実行するためのあらゆる構造、材料、又は動作を含むことが意図されている。1つ又は複数の態様の説明は、例証及び説明のために提示されたものであり、網羅的であること又は本発明を開示された形態に限定することを意図したものではない。当業者には、1つ又は複数の態様の範囲及び趣旨から逸脱しない多くの修正及び変形が明らかとなるであろう。実施形態は、1つ又は複数の態様の原理及び実際の適用を最も良く説明し、その他の当業者が企図される特定の使用に適した種々の修正を伴う種々の実施形態について1つ又は複数の態様を理解できるように、選択され、説明された。
100、200:コンピューティング環境
102、5026:プロセッサ
104、204、5025:メモリ
106、206:入力/出力デバイス及び/又はインターフェース
108、208:バス
202:ネイティブ中央演算処理ユニット(CPU)
210:ネイティブ・レジスタ
212:エミュレータ・コード
250:ゲスト命令
252:命令フェッチ・ユニット
254:命令変換ルーチン
256:ネイティブ命令
260:エミュレーション制御ルーチン
300:Perform Pseudorandom Number Operation命令
302:オペコード・フィールド
304:第1のレジスタ・フィールド
306:第2のレジスタ・フィールド
320:汎用レジスタ0
322:修飾子(M)ビット
324:機能コード(FC)・フィールド
330:汎用レジスタ1
332:論理アドレス
340:汎用レジスタR1
342、362:アドレス
350:汎用レジスタR1+1
352、372:長さ
360:汎用レジスタR2
370:汎用レジスタR2+1
400、420、800、900:パラメータ・ブロック
402:状況ワード
422、:再シード・カウンタ
424:ストリーム・バイト
426:値(V)
428:定数(C)
500a、500b:ストレージ
502a、502b、604a、604b:シード材料
600a、700a:1バイトのカウンタ
602a、602b、702a、702b:888の4バイト値
606a、606b、708a、708b、810、906:パディング
608a、608b、710a、812、908:SHA−512アルゴリズム
610a、610b、711a、711b、811、909:初期ハッシュ値(IHV)
612a、612b、712a、712b:ハッシュ結果
814、910:ハッシュ値
614、706a、706b:新しい値フィールド(Vnew)
704a、704b:ゼロの1バイト値
714:新しい定数フィールド(Cnew)
1000:コンピュータ・プログラム製品
102、5026:プロセッサ
104、204、5025:メモリ
106、206:入力/出力デバイス及び/又はインターフェース
108、208:バス
202:ネイティブ中央演算処理ユニット(CPU)
210:ネイティブ・レジスタ
212:エミュレータ・コード
250:ゲスト命令
252:命令フェッチ・ユニット
254:命令変換ルーチン
256:ネイティブ命令
260:エミュレーション制御ルーチン
300:Perform Pseudorandom Number Operation命令
302:オペコード・フィールド
304:第1のレジスタ・フィールド
306:第2のレジスタ・フィールド
320:汎用レジスタ0
322:修飾子(M)ビット
324:機能コード(FC)・フィールド
330:汎用レジスタ1
332:論理アドレス
340:汎用レジスタR1
342、362:アドレス
350:汎用レジスタR1+1
352、372:長さ
360:汎用レジスタR2
370:汎用レジスタR2+1
400、420、800、900:パラメータ・ブロック
402:状況ワード
422、:再シード・カウンタ
424:ストリーム・バイト
426:値(V)
428:定数(C)
500a、500b:ストレージ
502a、502b、604a、604b:シード材料
600a、700a:1バイトのカウンタ
602a、602b、702a、702b:888の4バイト値
606a、606b、708a、708b、810、906:パディング
608a、608b、710a、812、908:SHA−512アルゴリズム
610a、610b、711a、711b、811、909:初期ハッシュ値(IHV)
612a、612b、712a、712b:ハッシュ結果
814、910:ハッシュ値
614、706a、706b:新しい値フィールド(Vnew)
704a、704b:ゼロの1バイト値
714:新しい定数フィールド(Cnew)
1000:コンピュータ・プログラム製品
Claims (12)
- マシン命令を実行する方法であって、前記方法は、
プロセッサにより、実行するためのマシン命令を取得するステップであって、前記マシン命令は、コンピュータ・アーキテクチャに従ったコンピュータ実行のために定められており、前記マシン命令は、
perform pseudorandom number操作を識別するためのオペコードを提供するオペコード・フィールドと、
前記マシン命令により用いられる第1オペランドのメモリ内の位置を指定するためのレジスタを識別するのに用いられるレジスタ・フィールドと、
を含む、取得するステップと、
前記マシン命令を実行するステップと、
を含み、前記実行するステップは、
前記マシン命令と関連したレジスタの修飾子(M)フィールドを取得することと、
前記Mフィールドが第1の値を有することに基づいて、決定論的擬似乱数生成操作を実施することと、
を含み、前記決定論的擬似乱数生成操作は、
前記第1オペランドの1つ又は複数のメモリ・ブロックの各メモリ・ブロックについて、512ビット・セキュア・ハッシュ技術及び前記マシン命令のパラメータ・ブロックの少なくとも1つのシード値を用いてハッシュ値を生成することと、
前記生成されたハッシュ値の少なくとも一部を前記第1オペランドの対応するメモリ・ブロック内に格納することであって、前記生成されたハッシュ値は疑似乱数の少なくとも一部である、格納することと、
を含む方法。 - 前記マシン命令は、前記マシン命令により用いられる第2オペランドのメモリ内の位置を指定するための別のレジスタを識別するのに用いられる別のレジスタ・フィールドをさらに含み、前記方法は、
前記マシン命令を別の時に実行するステップをさらに含み、前記マシン命令を別の時に実行するステップは、
前記Mフィールドが第2の値を有することに基づいて、決定論的擬似乱数シード操作を実施することを含み、前記決定論的擬似乱数シード操作は、
前記第2オペランド内に含まれる情報に基づいてシード材料を取得することと、
前記512ビット・セキュア・ハッシュ技術及び前記シード材料を用いて、1つ又は複数のシード値を提供することと、
前記1つ又は複数のシード値を前記マシン命令と関連した前記パラメータ・ブロック内に格納することと、
を含む、請求項1に記載の方法。 - 前記実行するステップは、前記マシン命令と関連した前記レジスタから、実施される機能を指定するための機能コードを取得することと、前記機能コードが特定の値であることに基づいて、前記修飾子フィールドを取得することとを含み、前記パラメータ・ブロックは、前記マシン命令と関連した別のレジスタを用いて特定される、請求項1に記載の方法。
- 前記パラメータ・ブロックは、前記パラメータ・ブロックが最後にインスタンス化又は再シードされて以来、前記マシン命令が特定の条件コードで完了した回数を示すための再シード・カウンタと、前記生成操作に基づいて格納されたバイト数を追跡するためのストリーム・バイト・フィールドと、前記パラメータ・ブロックにより表される乱数生成器の内部状態を示すための値と、シード操作の実行によって初期化される一定値とを含むように構成される、請求項1に記載の方法。
- 前記格納することは、前記第1オペランドに右から左に格納することを含む、請求項1に記載の方法。
- 前記1つ又は複数のメモリ・ブロックの1つのメモリ・ブロックについて、前記生成されたハッシュ値を生成することは、
前記パラメータ・ブロックの前記少なくとも1つのシード値のシード値と処理される前記メモリ・ブロックのブロック数とを加算して和を提供することと、
前記和をパディングと結合して入力を提供することと、
前記入力及び前記512ビット・セキュア・ハッシュ技術を用いて前記生成されたハッシュ値を提供することと、
を含む、請求項1に記載の方法。 - 前記生成することは、前記第1オペランドの長さに基づいて求められるメモリ・ブロックの数についての前記生成されたハッシュ値を生成することと、右端のメモリ・ブロックから開始することとを含む、請求項6に記載の方法。
- 前記1つの生成されたハッシュ値を格納することは、
前記マシン命令の選択されたレジスタ内に示されるような前記第1オペランドの長さが定められた数の倍数かどうかを判断することと、
前記長さが前記定められた数の倍数であることに基づいて、前記1つの生成されたハッシュ値を前記第1オペランドの前記対応するメモリ・ブロック内に格納することと、
前記長さが前記定められた数の倍数でないことに基づいて、前記1つの生成されたハッシュ値の部分を前記第1オペランドの前記対応するメモリ・ブロック内に格納することと、
を含む、請求項1に記載の方法。 - 前記部分は、前記1つの生成されたハッシュ値の左端のバイト数を含む、請求項8に記載の方法。
- 前記方法は、
前記格納することに基づき、前記第1オペランド内に格納されたバイト数に基づいて前記第1オペランドの前記長さを調整することと、
前記第1オペランド内に格納されたバイト数に基づいて前記パラメータ・ブロックのストリーム・バイト・フィールドを更新することと、
を含む、請求項8に記載の方法。 - 請求項1乃至10のいずれか1項に記載の前記方法の全てのステップを実行するように適合された手段を含むシステム。
- 請求項1乃至10のいずれか1項に記載の前記方法の全てのステップをコンピュータに実行させるためのコンピュータ・プログラム。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/828,057 US8873750B2 (en) | 2013-03-14 | 2013-03-14 | Instruction for performing a pseudorandom number generate operation |
US13/828,057 | 2013-03-14 | ||
PCT/IB2014/058916 WO2014140957A1 (en) | 2013-03-14 | 2014-02-11 | Instruction for performing a pseudorandom number generate operation |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2016517562A JP2016517562A (ja) | 2016-06-16 |
JP6177355B2 true JP6177355B2 (ja) | 2017-08-09 |
Family
ID=51527092
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2015562431A Active JP6177355B2 (ja) | 2013-03-14 | 2014-02-11 | 擬似乱数生成操作を実施するための命令 |
Country Status (6)
Country | Link |
---|---|
US (5) | US8873750B2 (ja) |
JP (1) | JP6177355B2 (ja) |
CN (1) | CN105190535B (ja) |
DE (1) | DE112014000329T5 (ja) |
GB (1) | GB2526040B (ja) |
WO (1) | WO2014140957A1 (ja) |
Families Citing this family (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9201629B2 (en) | 2013-03-14 | 2015-12-01 | International Business Machines Corporation | Instruction for performing a pseudorandom number seed operation |
US8873750B2 (en) | 2013-03-14 | 2014-10-28 | International Business Machines Corporation | Instruction for performing a pseudorandom number generate operation |
US20160112200A1 (en) * | 2014-10-17 | 2016-04-21 | 21, Inc. | Cryptographic hashing circuitry having improved scheduling efficiency |
WO2017048256A1 (en) * | 2015-09-17 | 2017-03-23 | Hewlett Packard Enterprise Development Lp | Efficiently storing initialization vectors |
US9396248B1 (en) * | 2016-01-04 | 2016-07-19 | International Business Machines Corporation | Modified data query function instantiations |
US10489152B2 (en) | 2016-01-28 | 2019-11-26 | International Business Machines Corporation | Stochastic rounding floating-point add instruction using entropy from a register |
US10671347B2 (en) | 2016-01-28 | 2020-06-02 | International Business Machines Corporation | Stochastic rounding floating-point multiply instruction using entropy from a register |
US10235138B2 (en) * | 2016-09-30 | 2019-03-19 | International Business Machines Corporation | Instruction to provide true random numbers |
US10348506B2 (en) * | 2016-09-30 | 2019-07-09 | International Business Machines Corporation | Determination of state of padding operation |
US9680653B1 (en) * | 2016-10-13 | 2017-06-13 | International Business Machines Corporation | Cipher message with authentication instruction |
US11175893B2 (en) * | 2017-10-17 | 2021-11-16 | Blue ArmorTechnologies, LLC | Statistical object generator |
GB2568660B (en) * | 2017-10-20 | 2020-10-14 | Graphcore Ltd | Generating Random Numbers Based on a Predetermined Probaility Distribution in an Execution Unit |
US11012425B2 (en) | 2018-12-28 | 2021-05-18 | Micron Technology, Inc. | Replay protection nonce generation |
US11316747B2 (en) * | 2019-02-06 | 2022-04-26 | Simudyne Ltd. | Method and system for efficient multi agent computer simulation |
US11157240B2 (en) * | 2019-02-15 | 2021-10-26 | International Business Machines Corporation | Perform cryptographic computation scalar multiply instruction |
US11733971B2 (en) * | 2019-03-01 | 2023-08-22 | Simudyne, Ltd. | System and method of managing pseudo-random number generation in a multiprocessor environment |
US10970070B2 (en) * | 2019-03-29 | 2021-04-06 | Arm Limited | Processing of iterative operation |
CN110083386B (zh) * | 2019-04-04 | 2024-03-19 | 平安普惠企业管理有限公司 | 随机数产生控制方法、装置、计算机设备及存储介质 |
CN111831639B (zh) * | 2019-04-19 | 2024-01-30 | 北京车和家信息技术有限公司 | 一种全局唯一id生成方法及装置、车辆管理系统 |
US11218320B2 (en) * | 2019-06-28 | 2022-01-04 | Intel Corporation | Accelerators for post-quantum cryptography secure hash-based signing and verification |
US11636224B2 (en) * | 2019-12-19 | 2023-04-25 | Micro Focus Llc | Generating hash values for input strings |
CN111124713B (zh) * | 2019-12-24 | 2024-03-26 | 北京安兔兔科技有限公司 | 设备系统函数调用方法、装置、终端设备和存储介质 |
CN113867789A (zh) * | 2020-06-30 | 2021-12-31 | 上海寒武纪信息科技有限公司 | 计算装置、集成电路芯片、板卡、电子设备和计算方法 |
US11669331B2 (en) * | 2021-06-17 | 2023-06-06 | International Business Machines Corporation | Neural network processing assist instruction |
CN115567199B (zh) * | 2022-09-15 | 2023-04-14 | 北京海泰方圆科技股份有限公司 | 一种随机数种子生成方法、装置、电子设备及存储介质 |
CN118153703B (zh) * | 2024-03-06 | 2024-09-13 | 正则量子(北京)技术有限公司 | 一种基于字处理的量子随机数后处理方法及装置 |
Family Cites Families (80)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4162519A (en) * | 1975-01-20 | 1979-07-24 | Nixdorf Computer Ag | Data processor with address allocation to operations |
US5493687A (en) * | 1991-07-08 | 1996-02-20 | Seiko Epson Corporation | RISC microprocessor architecture implementing multiple typed register sets |
US5365551A (en) * | 1992-12-15 | 1994-11-15 | Micron Technology, Inc. | Data communication transceiver using identification protocol |
EP0582083A1 (en) | 1992-08-05 | 1994-02-09 | Motorola, Inc. | A method and apparatus for generating pseudo-random numbers |
AU6629894A (en) | 1993-05-07 | 1994-12-12 | Apple Computer, Inc. | Method for decoding guest instructions for a host computer |
US5416783A (en) * | 1993-08-09 | 1995-05-16 | Motorola, Inc. | Method and apparatus for generating pseudorandom numbers or for performing data compression in a data processor |
US5551013A (en) | 1994-06-03 | 1996-08-27 | International Business Machines Corporation | Multiprocessor for hardware emulation |
US6324558B1 (en) * | 1995-02-14 | 2001-11-27 | Scott A. Wilber | Random number generator and generation method |
US5790825A (en) | 1995-11-08 | 1998-08-04 | Apple Computer, Inc. | Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions |
US5778069A (en) | 1996-04-10 | 1998-07-07 | Microsoft Corporation | Non-biased pseudo random number generator |
US5830064A (en) * | 1996-06-21 | 1998-11-03 | Pear, Inc. | Apparatus and method for distinguishing events which collectively exceed chance expectations and thereby controlling an output |
WO1998047259A2 (en) * | 1997-03-10 | 1998-10-22 | Fielder Guy L | File encryption method and system |
AUPO799197A0 (en) * | 1997-07-15 | 1997-08-07 | Silverbrook Research Pty Ltd | Image processing method and apparatus (ART01) |
US6061703A (en) * | 1997-05-15 | 2000-05-09 | International Business Machines Corporation | Pseudorandom number generator with normal and test modes of operation |
US6104810A (en) * | 1997-05-15 | 2000-08-15 | International Business Machines Corporation | Pseudorandom number generator with backup and restoration capability |
US7249108B1 (en) * | 1997-07-15 | 2007-07-24 | Silverbrook Research Pty Ltd | Validation protocol and system |
JPH1153173A (ja) * | 1997-08-07 | 1999-02-26 | Nec Corp | 擬似乱数発生方法及び装置 |
US6009261A (en) | 1997-12-16 | 1999-12-28 | International Business Machines Corporation | Preprocessing of stored target routines for emulating incompatible instructions on a target processor |
US6308255B1 (en) | 1998-05-26 | 2001-10-23 | Advanced Micro Devices, Inc. | Symmetrical multiprocessing bus and chipset used for coprocessor support allowing non-native code to run in a system |
US6463582B1 (en) | 1998-10-21 | 2002-10-08 | Fujitsu Limited | Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method |
US6253223B1 (en) * | 1999-06-08 | 2001-06-26 | General Instrument Corporation | Robust random number generator |
US6507808B1 (en) * | 1999-06-23 | 2003-01-14 | International Business Machines Corporation | Hardware logic verification data transfer checking apparatus and method therefor |
US7685423B1 (en) * | 2000-02-15 | 2010-03-23 | Silverbrook Research Pty Ltd | Validation protocol and system |
GB0013356D0 (en) * | 2000-06-01 | 2000-07-26 | Tao Group Ltd | A method of validating an encrypted message |
US7333947B2 (en) * | 2000-11-13 | 2008-02-19 | Anoto Ab | Network-based system |
ATE348359T1 (de) * | 2001-01-16 | 2007-01-15 | Ericsson Telefon Ab L M | Zufallszahlengenerator basierend auf komprimierung |
US6968460B1 (en) * | 2001-05-10 | 2005-11-22 | Advanced Micro Devices, Inc. | Cryptographic randomness register for computer system security |
US6862605B2 (en) * | 2001-08-15 | 2005-03-01 | Scott A. Wilber | True random number generator and entropy calculation device and method |
US20030059045A1 (en) * | 2001-09-26 | 2003-03-27 | Ruehle Michael D. | Hash-based pseudo-random number generator |
US7219112B2 (en) | 2001-11-20 | 2007-05-15 | Ip-First, Llc | Microprocessor with instruction translator for translating an instruction for storing random data bytes |
US7958374B2 (en) * | 2002-03-19 | 2011-06-07 | Shansun Technology Company | Digital information protecting method and apparatus, and computer accessible recording medium |
US20030188044A1 (en) * | 2002-03-28 | 2003-10-02 | International Business Machines Corporation | System and method for verifying superscalar computer architectures |
US7082449B2 (en) * | 2002-05-03 | 2006-07-25 | Sun Microsystems, Inc. | Method and apparatus for generating pseudo-random numbers |
US6865660B2 (en) * | 2002-06-28 | 2005-03-08 | Micron Technology, Inc. | Method and apparatus for generating deterministic, non-repeating, pseudo-random addresses |
US7209561B1 (en) | 2002-07-19 | 2007-04-24 | Cybersource Corporation | System and method for generating encryption seed values |
CN1714377A (zh) * | 2002-10-07 | 2005-12-28 | 小林朗 | 用于生成伪随机数的方法及伪随机数生成器 |
US7123590B2 (en) * | 2003-03-18 | 2006-10-17 | Qualcomm Incorporated | Method and apparatus for testing a wireless link using configurable channels and rates |
US7257718B2 (en) | 2003-05-12 | 2007-08-14 | International Business Machines Corporation | Cipher message assist instructions |
US7298843B2 (en) | 2003-08-01 | 2007-11-20 | Hewlett-Packard Development Company, L.P. | Method and apparatus for seeding a random number generator |
DE10339999B4 (de) * | 2003-08-29 | 2005-07-14 | Infineon Technologies Ag | Pseudozufallszahlengenerator |
JPWO2005073842A1 (ja) * | 2004-01-30 | 2007-09-13 | 日本ビクター株式会社 | 擬似乱数生成装置および擬似乱数生成プログラム |
US8374284B2 (en) * | 2004-02-12 | 2013-02-12 | Apple, Inc. | Universal decoder |
US7401234B2 (en) * | 2004-03-01 | 2008-07-15 | Freescale Semiconductor, Inc. | Autonomous memory checker for runtime security assurance and method therefore |
FR2867928B1 (fr) * | 2004-03-16 | 2006-06-09 | Medialive | Procede et systeme hautement securises pour la distribution de flux audiovisuels |
DE102004013480B4 (de) * | 2004-03-18 | 2013-01-24 | Infineon Technologies Ag | Zufallszahlengenerator und Verfahren zum Erzeugen von Zufallszahlen |
US20060294312A1 (en) * | 2004-05-27 | 2006-12-28 | Silverbrook Research Pty Ltd | Generation sequences |
JP2006337429A (ja) | 2005-05-31 | 2006-12-14 | Nippon Telegr & Teleph Corp <Ntt> | マスク生成関数演算装置、そのプログラム及び記録媒体 |
JP4546339B2 (ja) * | 2005-06-29 | 2010-09-15 | キヤノン株式会社 | 乱数生成装置及び乱数生成方法 |
JP4718455B2 (ja) * | 2005-09-09 | 2011-07-06 | 三菱電機株式会社 | 擬似乱数生成装置及び擬似乱数生成方法及び擬似乱数生成プログラム |
US7852162B2 (en) * | 2005-10-27 | 2010-12-14 | FortressGB | Pseudo random noise device based on a random frequency modulated oscillator |
DE602006002242D1 (de) * | 2006-02-15 | 2008-09-25 | Jaycrypto Ltd | Verfahren und Vorrichtung zum Erzeugen von Initialwerten für einen Zufallszahlengenerator |
CN101473298A (zh) * | 2006-06-20 | 2009-07-01 | Nxp股份有限公司 | 随机数发生器系统、产生随机数的方法 |
DE102006030888B4 (de) * | 2006-07-04 | 2009-06-25 | Infineon Technologies Ag | Verfahren und Vorrichtung zum Erzeugen eines Startwertes für einen Pseudo-Zufallszahlengenerator |
US8102999B2 (en) * | 2006-08-18 | 2012-01-24 | Medtronic, Inc. | Secure telemetric link |
US8107622B2 (en) | 2006-09-07 | 2012-01-31 | Fortress Gb Ltd. | System and method to preclude message modification in data authentication systems through efficent use of feedback in cryptographic functions |
US7904494B2 (en) | 2006-12-08 | 2011-03-08 | International Business Machines Corporation | Random number generator with random sampling |
US8015224B1 (en) * | 2006-12-27 | 2011-09-06 | Marvell International Ltd. | Entropy source for random number generation |
US8595273B2 (en) | 2007-01-24 | 2013-11-26 | International Business Machines Corporation | Hash algorithm using randomization function |
JP4258551B2 (ja) * | 2007-01-25 | 2009-04-30 | 日本電気株式会社 | 認証システム、認証方法、及び認証プログラム |
US20080263117A1 (en) * | 2007-04-23 | 2008-10-23 | Gregory Gordon Rose | Initial seed management for pseudorandom number generator |
US8726041B2 (en) * | 2007-05-09 | 2014-05-13 | Sony Corporation | Methods and apparatus for generating a random number in one or more isolated processors |
US8130956B2 (en) * | 2007-08-02 | 2012-03-06 | International Business Machines Corporation | Efficient and low power encrypting and decrypting of data |
US8458460B2 (en) | 2007-09-27 | 2013-06-04 | Intel Corporation | Digest generation from instruction op-codes |
US8130955B2 (en) * | 2007-12-21 | 2012-03-06 | Spansion Llc | Random number generation through use of memory cell activity |
US8873570B2 (en) | 2008-01-04 | 2014-10-28 | Motorola Mobility Llc | Extensible system and method to bridge SIP and UPnP devices |
US8255443B2 (en) * | 2008-06-03 | 2012-08-28 | International Business Machines Corporation | Execution unit with inline pseudorandom number generator |
US8189778B2 (en) * | 2008-07-07 | 2012-05-29 | General Instrument Corporation | Adaptive generation of a pseudo random number generator seed |
US8359479B2 (en) * | 2008-07-17 | 2013-01-22 | Lsi Corporation | High performance arithmetic logic unit (ALU) for cryptographic applications with built-in countermeasures against side channel attacks |
JP5241475B2 (ja) | 2008-12-24 | 2013-07-17 | 三菱電機株式会社 | ハッシュ値演算装置及びハッシュ値演算方法及びハッシュ値演算プログラム |
US20110270676A1 (en) * | 2010-04-30 | 2011-11-03 | Sergei Vassilvitskii | Probabilistic Linking Approach for Serving Impressions in Guaranteed Delivery Advertising |
US20120079281A1 (en) * | 2010-06-28 | 2012-03-29 | Lionstone Capital Corporation | Systems and methods for diversification of encryption algorithms and obfuscation symbols, symbol spaces and/or schemas |
US9128791B1 (en) * | 2011-03-21 | 2015-09-08 | Board Of Regents Of The University Of Texas System | Generation of distinct pseudorandom number streams based on program context |
US8379848B2 (en) * | 2011-07-07 | 2013-02-19 | Cape Light Institute, Inc. | Method of providing a portable true random number generator based on the microstructure and noise found in digital images |
US8639882B2 (en) * | 2011-12-14 | 2014-01-28 | Nvidia Corporation | Methods and apparatus for source operand collector caching |
US9544139B2 (en) | 2011-12-29 | 2017-01-10 | Intel Corporation | Method and apparatus for a non-deterministic random bit generator (NRBG) |
JP2013206095A (ja) * | 2012-03-28 | 2013-10-07 | Fujitsu Ltd | データ処理装置及びデータ処理装置の制御方法 |
US8856198B2 (en) * | 2012-03-30 | 2014-10-07 | Freescale Semiconductor, Inc. | Random value production methods and systems |
US9075674B2 (en) * | 2012-12-12 | 2015-07-07 | Freescale Semiconductor, Inc. | Systems with adjustable sampling parameters and methods of their operation |
US9201629B2 (en) | 2013-03-14 | 2015-12-01 | International Business Machines Corporation | Instruction for performing a pseudorandom number seed operation |
US8873750B2 (en) | 2013-03-14 | 2014-10-28 | International Business Machines Corporation | Instruction for performing a pseudorandom number generate operation |
-
2013
- 2013-03-14 US US13/828,057 patent/US8873750B2/en active Active
-
2014
- 2014-02-11 CN CN201480015409.9A patent/CN105190535B/zh active Active
- 2014-02-11 GB GB1516536.8A patent/GB2526040B/en active Active
- 2014-02-11 DE DE112014000329.8T patent/DE112014000329T5/de active Pending
- 2014-02-11 WO PCT/IB2014/058916 patent/WO2014140957A1/en active Application Filing
- 2014-02-11 JP JP2015562431A patent/JP6177355B2/ja active Active
- 2014-10-21 US US14/519,621 patent/US9252953B2/en active Active
-
2016
- 2016-01-28 US US15/008,850 patent/US10061585B2/en active Active
-
2018
- 2018-05-24 US US15/988,725 patent/US10133575B2/en active Active
- 2018-10-25 US US16/170,913 patent/US10846090B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
JP2016517562A (ja) | 2016-06-16 |
US10846090B2 (en) | 2020-11-24 |
US10133575B2 (en) | 2018-11-20 |
US20190065203A1 (en) | 2019-02-28 |
CN105190535B (zh) | 2018-04-06 |
GB2526040B (en) | 2016-03-02 |
US8873750B2 (en) | 2014-10-28 |
DE112014000329T5 (de) | 2015-12-31 |
US10061585B2 (en) | 2018-08-28 |
GB2526040A (en) | 2015-11-11 |
US9252953B2 (en) | 2016-02-02 |
US20150049870A1 (en) | 2015-02-19 |
US20180275992A1 (en) | 2018-09-27 |
US20160202984A1 (en) | 2016-07-14 |
WO2014140957A1 (en) | 2014-09-18 |
GB201516536D0 (en) | 2015-11-04 |
US20140270162A1 (en) | 2014-09-18 |
CN105190535A (zh) | 2015-12-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6177355B2 (ja) | 擬似乱数生成操作を実施するための命令 | |
JP6395737B2 (ja) | 擬似乱数シード操作を実施するための命令 | |
JP6246140B2 (ja) | データを命令が指示する指定されたメモリ境界までロードするためのコンピュータ・プログラム、コンピュータ・システムおよび方法 | |
JP6278906B2 (ja) | データを動的に判断されたメモリ境界までロードする方法、システムおよびコンピュータ・プログラム | |
JP6108362B2 (ja) | 不連続命令指定子の連続命令指定子への変換 | |
CA2867117C (en) | Finding the length of a set of character data having a termination character | |
JP6238241B2 (ja) | Vector string range compare | |
JP6238242B2 (ja) | Vector find element not equal命令 | |
JP6138175B2 (ja) | 指定されたメモリ境界までの距離を計算するためのコンピュータ・プログラム、コンピュータ・システムおよび方法 | |
GB2514062B (en) | Comparing sets of character data having termination characters | |
JP6916871B2 (ja) | 真の乱数を提供するための命令を実現するコンピュータ・プログラム製品、コンピュータ・システム、およびコンピュータ実装方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20161220 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20170620 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20170711 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6177355 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |