(58)【調査した分野】(Int.Cl.,DB名)
前記判定するステップが、前記受信機が、前記データが送信されようとするときに前記データを受信することができるようになるのに遅れていると判定するステップと、それに応答して、前記同期データ転送を前記非同期データ転送に自動的に変換して、前記受信機が前記データを受信することができるときに前記データの前記送信を完了させるステップとを含む、請求項1に記載のコンピュータ・プログラム。
前記受信機が前記データを受信することができると前記判定するステップが、前記受信機が前記データを受信するための空のバッファを有すると判定するステップを含む、請求項3に記載のコンピュータ・プログラム。
前記受信機が遅れていると前記判定するステップが、受信バッファが前記データを受信するのに利用可能でないと判定するステップを含む、請求項2に記載のコンピュータ・プログラム。
前記方法が、前記送信機から別の要求を取得するステップであって、前記別の要求が、前記受信機に前記要求を非同期的に送信することを完了させる前に、別の受信機に同期的に送信される、ステップをさらに含む、請求項1に記載のコンピュータ・プログラム。
前記方法が、前記データを非同期的に前記受信機に前記送信することを完了させる前に、1つまたは複数の追加の要求を前記送信機から受信するステップをさらに含み、前記1つまたは複数の追加の要求のデータを同期的にまたは非同期的に1つまたは複数の受信機に送信することができる、請求項1に記載のコンピュータ・プログラム。
前記方法が、前記同期データ転送から前記非同期データ転送に変換するステップに応答して、前記受信機でのデータ到着順序を維持するステップをさらに含む、請求項1に記載のコンピュータ・プログラム。
前記判定するステップが、前記受信機が、前記データが送信されようとするときに前記データを受信することができるようになるのに遅れていると判定するステップと、それに応答して、前記同期データ転送を前記非同期データ転送に自動的に変換して、前記受信機が前記データを受信することができるときに前記データの前記送信を完了させるステップとを含む、請求項12に記載のコンピュータ・システム。
前記受信機が前記データを受信することができると判定する前記ステップが、前記受信機が前記データを受信するための空のバッファを有すると判定するステップを含む、請求項14に記載のコンピュータ・システム。
前記方法が、前記送信の完了を前記送信機に対して示すステップをさらに含み、完了を示す前記ステップが、前記送信機がアクセス可能なメモリ内の完了キュー上に前記メモリ・ブロックのアドレスをポストするステップを含み、前記方法が、前記完了キュー上に前記アドレスをポストするステップに応答して、前記送信機への割込みを行うステップをさらに含み、前記受信機が遅れていると判定する前記ステップが、受信バッファが前記データを受信するのに利用可能でないと判定するステップを含む、請求項14に記載のコンピュータ・システム。
前記判定するステップが、前記受信機が、前記データが送信されてようとするときに前記データを受信することができるようになるのに遅れていると判定するステップと、それに応答して、前記同期データ転送を前記非同期データ転送に自動的に変換して、前記受信機が前記データを受信することができるときに前記データの前記送信を完了させるステップとを含む、請求項17に記載の方法。
【発明を実施するための形態】
【0012】
本発明の態様によれば、同期データ転送を非同期データ転送に自動的に変換するための機能が提供される。例えば、同期データ転送は、例えば、データの受信機が転送時にデータを受信することができないなど、データ転送の完了に遅延があるという判定に応答して、非同期データ転送に自動的に変換される。同期データ転送から非同期データ転送への変換は、送信機(または受信機)の要求によるものではないという点で自動的に実行され、送信機(または受信機)は変換が開始されるときにその変換について知っているわけではない。さらに、変換時に、送信機(または受信機)は、何らかの措置を講じたり変換に介入したりする必要がない。
【0013】
図1を参照して、本発明の1つまたは複数の態様を組み込むまたは使用するあるいはその両方を行う通信環境の一実施形態について記述する。一例では、通信環境100は、インターナショナル・ビジネス・マシーンズ・コーポレーション(International Business Machines Corporation)(IBM(R))によって提供されるz/Architecture(R)に基づく中央プロセッサ複合体(CPC)102を含む。z/Architecture(R)の態様は、その全体が参照により本明細書に組み込まれる「z/Architecture Principles of Operation」という表題のIBM(R)刊行物、IBM刊行物番号第SA22−7832−08号、2010年8月に記述されている。中央プロセッサ複合体102を含み得る1つのシステムは、インターナショナル・ビジネス・マシーンズ・コーポレーション、アーモンク、ニューヨーク州によって提供されるzEnterprise 196(z196)システムである。IBM(R)およびz/Architecture(R)は登録商標であり、zEnterprise 196およびz196はインターナショナル・ビジネス・マシーンズ・コーポレーション、アーモンク、ニューヨーク州、アメリカ合衆国の商標である。本明細書において使用される他の名称は、インターナショナル・ビジネス・マシーンズ・コーポレーションまたは他の会社の登録商標、商標または製品名である場合がある。
【0014】
中央プロセッサ複合体102は、例えば、1つまたは複数のパーティション104、ハイパーバイザ106、1つまたは複数の中央プロセッサ108、および入力/出力サブシステム110の1つまたは複数の構成要素を含む。1つまたは複数のパーティション104は、この例では、別個のシステムとして仮想化されたシステムのハードウェアリソースのセットを含む論理パーティション(別名LPAR)である。
【0015】
それぞれの論理パーティション104は、別個のシステムとして機能することができる。すなわち、それぞれの論理パーティションを個別にリセットし、所望であれば、オペレーティング・システム120を用いて最初に読み込み、異なるプログラムを用いて操作することができる。論理パーティションで動作するオペレーティング・システムまたはアプリケーション・プログラムは、完全な(full and complete)システムにアクセスできるように見えるが、実際は、その一部分のみが利用可能である。ハードウェアおよびファームウェアと呼ばれるライセンス内部コード(LIC)の組合せは、論理パーティション内のプログラムが異なる論理パーティション内のプログラムに干渉しないようにする。これにより、いくつかの異なる論理パーティションは、タイムスライス方式で単一または複数の物理プロセッサ上で動作することができる。この例では、いくつかの論理パーティションは、1つまたは複数の論理パーティションによって異なっていてもよい常駐オペレーティング・システム120を有する。一実施形態では、オペレーティング・システム120は、インターナショナル・ビジネス・マシーンズ・コーポレーション、アーモンク、ニューヨーク州によって提供されるz/OS(R)オペレーティング・システムである。
【0016】
本明細書において使用される場合、ファームウェアは、例えば、プロセッサのマイクロコード、ミリコードまたはマクロコードあるいはそれらすべてを含む。ファームウェアは、例えば、より高レベルのマシンコードの実施において使用されるハードウェアレベルの命令またはデータ構造あるいはその両方を含む。一実施形態では、ファームウェアは、例えば、典型的にはマイクロコードとして提供される独自コードを含み、独自コードは、信頼できるソフトウェアまたは基盤となるハードウェアに特有のマイクロコードを含み、システム・ハードウェアへのオペレーティング・システムのアクセスを制御する。
【0017】
論理パーティション104はハイパーバイザ106によって管理され、ハイパーバイザ106は中央プロセッサ108上で動作するファームウェアによって実施される。ハイパーバイザ106の一例は、インターナショナル・ビジネス・マシーンズ・コーポレーション、アーモンク、ニューヨーク州によって提供されるProcessor Resource/Systems Manager(PR/SM(商標))である。
【0018】
中央プロセッサ108は、論理パーティションに割り振られる物理プロセッサ・リソースである。例えば、論理パーティション104は、1つまたは複数の論理プロセッサを含み、それぞれの論理プロセッサは、パーティションに割り振られた物理プロセッサ・リソース108のすべてまたは割り当て分を表す。特定のパーティション104の論理プロセッサは、基盤となるプロセッサ・リソースがそのパーティション用に確保されるように、パーティション専用にするか、基盤となるプロセッサ・リソースが場合によっては別のパーティションで利用可能となるように、別のパーティションと共有することができる。
【0019】
論理パーティション104およびハイパーバイザ106はそれぞれ、中央プロセッサに関連する主メモリ150のそれぞれの部分に常駐する1つまたは複数のプログラムを含む。一例では、
図2を参照してさらに詳細に記述されるように、それぞれの論理パーティションには、メモリ空間と呼ばれる主メモリの一部分が割り当てられる。
【0020】
図2を参照すると、一実施形態では、主メモリ150は、それぞれが主メモリにおいて一連のアドレスを含む複数のメモリ空間を含む。メモリ空間は、論理パーティションなどのエンティティまたは他のエンティティに割り当てられ得る。
図2に示す例では、2つの論理パーティションにそれぞれ割り当てられた2つのメモリ空間がある。送信機と受信機の間の通信について以下でさらに記述するので、本明細書では、一方のメモリ空間を送信機のメモリ空間202と呼び、他方のメモリ空間を受信機のメモリ空間204と呼ぶ。送信機のメモリ空間202は、例えば、1つまたは複数の入力キュー210、1つまたは複数の出力キュー212、および1つまたは複数のバッファ214を含む。同様に、受信機のメモリ空間204は、1つまたは複数の入力キュー220、1つまたは複数の出力キュー222、および1つまたは複数のバッファ224を含む。キューおよびバッファの使用について以下でさらに記述する。
【0021】
個々のメモリ空間は、ファームウェアによる制御なしでデータを一方のメモリ空間から他方のメモリ空間に直接書き込むことができないという点で互いに隔離されている。一例では、例えば、イーサネット(R)リンクを介したTCP/IPを使用するネットワーキング伝送は、あるメモリ空間から別のメモリ空間にデータを転送するために使用される。特定の一例では、HiperSockets(商標)と呼ばれる、インターナショナル・ビジネス・マシーンズ・コーポレーションによって提供される技術が転送を実行するために使用される。
【0022】
HiperSockets(商標)は、中央プロセッサ複合体内で高速TCP/IP接続を提供する。HiperSockets(商標)により、異なる論理パーティションで動作するサーバ間のいかなる物理ケーブリングまたは外部ネットワーキング接続も不要になる。その代わりに、通信はプロセッサのシステムメモリを経由する。HiperSockets(商標)実装は、OSA−Express Queued Direct I/O(QDIO)プロトコルに基づく。ファームウェアは、OSA−Express QDIOインターフェースのリンク制御レイヤをエミュレートする。
【0023】
例えば、ネットワーキング技術を使用したあるメモリ空間から別のメモリ空間へのデータ転送は同期であり、このデータ転送では、データ転送を開始した後、送信機は転送が完了するまで一時停止される。あるメモリ空間から別のメモリ空間への同期データ転送の一例について、
図3を参照して記述する。
【0024】
図3を参照すると、送信機のメモリ空間で動作しているTCP/IPスタックまたはプログラムなどの送信機300は、受信機のメモリ空間内の例えば別のTCP/IPスタックまたはプログラムなどの受信機310に、データを送信する要求を開始する。受信機のメモリ空間は送信機のメモリ空間から隔離されているので、この例では、ネットワーク通信プロトコルを使用して、送信機から受信機に送信されるデータの同期データ伝送を実行する。同期データ転送を使用すると、ファームウェアの制御下である位置から別の位置へのメモリ転送を実行することによって、送信機と受信機の間に非常に高速で低遅延のダイレクト通信パスをもたらす。一例では、メモリ間のデータ転送はHiperSockets(商標)によって実行される。この転送機構は、送信機がデータを送信するのと同じレートでまたはそれよりも速く受信機がデータを受信することができる限り、非常に効率的である。
【0025】
データを転送するために、送信機は選択されたデータバッファ320内に含まれるデータを取り出し、そのデータを送信機の出力キュー330に置く。例えば、選択されたデータバッファのポインタ332は出力キューに置かれる。次いで、送信機300はプロセッサに信号を送って340、受信機310へのデータ転送を実行する。一例では、信号で知らされ、転送を実行することになるのはプロセッサのファームウェア350であるが、他の例では、それはファームウェアではなく、プロセッサの他のコードまたはハードウェアあるいはその両方である。
【0026】
送信機から受信機へのデータ転送を要求する信号を受信したことに応答して、ファームウェアは送信機の出力キューからデータをコピーし、そのデータを受信機の入力キュー360に置く。例えば、データは空のバッファ370にコピーされ、そのデータに対するポインタ372が入力キュー360に置かれる。データ転送が完了した後、ファームウェアは転送が完了した旨の信号を送信機に返す。送信機がこの完了信号を受信するまで、送信機は一時停止され、いかなる他の操作も実行することができない。
【0027】
特定の一例として、プロセッサに信号で知らせるために、送信機は信号アダプタ(SignalAdapter)(SIGA)命令を発行し、この命令は、1つまたは複数の出力キューが受信機に伝送されるべきデータを有することをプロセッサに信号で知らせる書込み機能(SIGA−w)を示す。書込み機能は、命令によって使用される第1の汎用レジスタで提供される機能コードとして特定され、書込み機能のネットワーク接続(例えば、サブシステム識別語)のアドレスは、命令によって使用される第2の汎用レジスタで示される。さらに、出力キューは、命令によって使用されるさらなる第3の汎用レジスタで特定される。
【0028】
この特定の例では、キューはQueued Direct I/O(QDIO)キューとして実施され、それぞれのキューはそれに関連する複数のバッファならびに様々な制御情報を有する。一実施形態では、QDIOキューは、キューについて記述するデータ構造ならびにデータ転送に使用されるバッファ・ストレージ・ブロックを含む。一例として、キューの特徴についてまとめて記述し、データの交換を可能にするための制御を提供する、キュー構成要素と呼ばれる複数のストレージ・データ構造は、例えば、以下を含む。
QDIO入力キューおよび出力キューの収集についての情報を含むキュー情報ブロック(QIB)。QIBは、入力キュー用のストレージ・リスト情報ブロック(SLIB)アドレスおよび出力キュー用のSLIBアドレスを含む。
それぞれのキューに対して1つのSLIBがあり、それぞれのSLIBはキューおよびキューのそれぞれのキューバッファについての情報を提供する。それぞれのSLIBは、ヘッダおよび、それぞれのキューのバッファのそれぞれについての情報を含むストレージ・リスト情報ブロック・エントリ(SLIBE)と呼ばれる1つまたは複数のエントリを有する。一例では、それぞれのストレージ・リスト情報ブロックは、次のストレージ・リスト情報ブロックのアドレス、ストレージ・リスト(SL)のアドレスおよびストレージ・リスト状態ブロック(SLSB)のアドレスを含む。
それぞれのキューに対して定められた1つのストレージ・リストがあり、SLは、例えば、128のエントリ、キューのバッファのそれぞれに対して1つのエントリを含む。ストレージ・リストは、主ストレージにおけるI/Oバッファ位置についての情報を提供する。それぞれのエントリは、ストレージ・ブロック・アドレス・リスト(SBAL)の絶対アドレスを含む。それぞれのストレージ・ブロック・アドレス・リストは、それぞれのキューに関連するデータバッファのうちの1つを集合的に占めるストレージ・ブロックの絶対アドレスのリストを含む。
ストレージ・ブロック・リスト・エントリ(SBALE)は、それぞれのSBALの一部として提供される。それぞれのSBALEは、ストレージ・ブロックの絶対ストレージ・アドレスを含む。集合的に、単一のSBALのすべてのエントリによってアドレス指定されるストレージ・ブロックは、QDIOキューの多くの考えられるQDIOバッファのうちの1つを構成する。一例では、QDIOキューはそれに関連する128個のQDIOバッファを有してもよい。
SLSBは、キューを占めるバッファについての状態情報を提供する状態インジケータを含む。
【0029】
SIGA、QDIOキュー、および関連する制御構造に関するさらなる詳細は、Baskeyら、2001年12月18日発行の「Self-Contained Queues With Associated Control Information ForReceipt And Transfer Of Incoming And Outgoing Data Using A Queued DirectInput-Output Device」という表題の米国特許第6,332,171B1号、Briceら、2002年2月5日発行の「Method And Apparatus For Simulation Of Data In a Virtual EnvironmentUsing A Queued Direct Input-Output Device」という表題の米国特許第6,345,241B1号、Markosら、2003年2月11日発行の「Method And Apparatus ForProviding Configuration Information Using A Queued Direct Input-Output Device」という表題の米国特許第6,519,645B2号、およびEastonら、2011年5月10日発行の「Interpreting I/OOperation Requests From Pageable Guests Without Host Intervention」という表題の米国特許第7,941,799B2号に記述されている。
【0030】
上記の処理において、送信機がデータを送信するのと同じレートで受信機が空のバッファを提供することができないとき、プロトコルの同期の性質が原因で、増大した遅延およびCPUオーバーヘッドが送信機の側にもたらされる。受信機において空のバッファが利用可能でないとき、送信機は2つの選択肢を有する。送信機は、失敗した操作およびその後の同じ受信機へのデータ再送を待ち行列に入れるオーバーヘッドを通過するか、データを破棄して、TCP/IPのような上位通信プロトコルが操作を再駆動することを可能にする。データを待ち行列に入れ再送することの落とし穴は、復旧させるのに追加のCPUサイクルを必要とするだけでなく、着信データを受け入れ可能な場合がある他の宛先への、送信機によるさらなる伝送を場合によってはブロックするまたは遅延させる可能性もあるということである。
【0031】
複数のサーバ(例えば、送信機、受信機)がCPUリソースを共有することができる仮想化された環境は、受信機が、受信機にデータを送信する様々な送信機に遅れずについていくことができない場合がある状況を生み出す可能性が高い。これは、典型的には、PR/SMのようなハイパーバイザが様々な利用可能な共有プロセッサ上でのサーバのディスパッチを制御する場合である。送信機と共有CPUリソースの間に複数のレベルのハイパーバイザがあると、この問題は悪化する。これは、例えば、送信機がz/VM(R)下の仮想マシンで動作しており、仮想マシンも論理パーティションで動作しているときに当てはまる。ここで、2つのハイパーバイザは、サーバをディスパッチして、サーバが空のバッファをタイミング良く満たすことを可能にするものである。
【0032】
利用可能な十分なCPUリソースがあれば、受信機をタイミング良くディスパッチすることは問題ではない。短期間または長期間のいずれかにわたってCPUリソースが制約されるようになるときのみ、同期データ転送が失敗に終わる。したがって、本発明の態様によれば、送信機は、CPUリソースが制約されるようになるときに関連する落とし穴およびオーバーヘッドを排除する一方で、制約のないCPU環境で同期低遅延データ伝送を利用することができる。これは、受信機が送信機に遅れずについていくことができないときに、通信プロトコルを同期から非同期に変換することによって達成される。一実施形態では、同期から非同期へのプロトコル変換は、送信機へのいかなるプッシュバックもなしに自動的に実行される(すなわち、送信機は、変換時にいかなる措置も実行する必要がない)。これにより、特定の受信機に対してCPUリソースが制約されるようになるときに、送信機は何らかのタイプの復旧処理を行う必要も、他の受信機へのデータ伝送をブロックしたりデータ伝送の速度を落としたりする必要もなくなる。さらに、これにより、これまで制約されていた受信機への同期通信を自動的に再開することができる。
【0033】
本発明の態様によれば、データを受信することができる空のバッファを受信機が提供するまで、送信機のメモリ内でデータを待ち行列に入れる機能が、送信機に提供される。
図4を参照して記述されるように、この処理を容易にするために、1つまたは複数の制御構造が使用される。例えば、送信機は、それぞれの保留中の非同期転送について、送信機のメモリにおいてメモリ400の空のブロックを割り振る。一例では、任意のある時点におけるこれらのブロックをX個とすることができ、Xはモデルに依存し構成可能である。Xは送信機によって許容される同時非同期要求の数を表す。QDIO(Queued Direct Input/Output)非同期操作ブロック(QAOB)と呼ばれるメモリのこのブロックは、ファームウェアが操作を完了するまで、非同期データ転送を追跡するために使用される。QAOBは、この例では、制御情報のみを含み、データ自体は含まない。送信機は要求に対するデータ転送を開始するときにこのブロックを提供し、任意選択で非同期的に実行することを可能にするが、そうでなければ、制御ブロックを提供する必要はない。これは、送信機が最大数の未処理の非同期要求を制御することを可能にする。データ転送が非同期的に実行されるべきであるとファームウェアが判定すると、QAOB自体のみがファームウェアによって使用され、初期化される。データ転送が非同期的に実行されるべきである場合、QAOBにメモリを提供すること以外に、データ転送について送信機が行わなければならないことは何もない。
【0034】
特定の一例では、QAOBは要求を提供するSIGA命令に含まれる。送信機は、QAOB機能による書込みを示す第1の汎用レジスタで選択された機能コードを指定する、QAOBによるSIGA書込み(SIGA−wq)命令を出す。QAOBアドレスは、命令によって使用される第4の汎用レジスタで特定される。この汎用レジスタは、QAOBが指定されていないときは0、またはQAOBの絶対アドレス(例えば、256バイトのQAOB)のいずれかを有する。ファームウェアは、QAOB機能コードによる書込みが設定されたことに応答して、QAOBが非同期データ転送で使用することができる第4の汎用レジスタで指定されるかどうかを判定する。
【0035】
ファームウェアがデータ転送を非同期プロトコルに変更するとき、ファームウェアはQAOBを使用して、アウトバウンドデータ転送に関連する送信機のメモリに常駐するデータを追跡する。HiperSockets(商標)が伝送に使用される例では、QAOBは、データ転送に関連するストレージ・ブロック・アドレス・リスト(SBAL)で送信機によって指定されたアドレスおよび制御を追跡する。SBALから抽出され、QAOBに置かれるフィールドの例としては、例えば、以下のものが挙げられる。
・ SBALからのすべての有意義なSBALE(例えば、1番目のSBALEから最終エントリビットセットを有するSBALEまで)。これは、データの絶対バッファアドレスおよびバイトカウントを含む。
・ SBALの出力キュー番号
・ 要求を開始するSBALのバッファ番号(例えば、1〜27)
・ 有意義なSBALEエントリの数
・ それぞれの有意義なSBALEによって指定されたストレージ・ブロックにアクセスするために使用されるストレージ・キー
【0036】
QAOBに加えて、完了キュー(CQ)410と呼ばれる別の制御構造が使用される。すなわち、一例では、QAOBを提供することに加えて、送信機は、通信キューを確立するときに、そのメモリに完了キューという新しいタイプのキューも割り振る。HiperSockets(商標)の場合、これはSBALを有する新しいタイプのQDIO入力キューであるが、SBALEに関連するバッファがない。この新しい入力キューは、データを転送するために使用されるのではなく、完了イベントをポストして、非同期データ転送が完了したことを送信機に信号で知らせるためにファームウェアによって使用される。キューエントリが「インバウンド準備完了(inbound primed)」になると、完了イベントについての情報はSBALE自体に配置され、SBALEは完了キュー上に含まれる。ファームウェアは、完了した非同期データ転送に関連するQAOBのアドレスをCQにポストし、必要であれば、割込みを行って、送信機にデータ転送完了を信号で知らせる。この時点で、送信機は、完了した操作に関連するメモリを他の目的で再利用することができる。(一実施形態では、SBALEは単一の完了イベントをポストするために使用される。SBALは、例えば、16個のSBALEを含むので、ファームウェアは単一のSBAL内で最大16個の完了イベント(QAOB)をポストすることができる。)
【0037】
さらに、一実施形態では、ファームウェアは、それぞれの意図された受信者において、未処理のデータ転送要求を有することを覚えておくために使用されるTPQ420という別のキューを有する。
【0038】
同期データ転送から非同期データ転送への変換に関するさらなる詳細について、
図5〜
図6を参照して記述する。
図5は変換を実行するためにファームウェアによって使用される論理の一実施形態を示し、
図6は変換の一例を絵画的に示す。両方の図が以下の説明で参照される。
【0039】
図5〜
図6を参照すると、最初に、ステップ500で、ファームウェア350はQAOBの指標(例えば、非同期データ転送に使用され得るストレージ・ブロックのアドレス)を受信する。したがって、ファームウェア350は、必要な(または所望される)場合、要求されたデータ転送を非同期的に実行することができることを知っている。一実施形態では、ファームウェアは、その数までのデータ転送を非同期的に実行することができることを示す複数のQAOBを受信することができる。送信機によってQAOBを提供することは、ファームウェアが、そうすることを選んだ場合、データ転送を非同期的に実行することができるという、ファームウェアに対する事前承認である。
【0040】
特定の一例では、QAOBは、ステップ502で、送信機300からファームウェアによって受信されたデータ転送要求の一部として含まれる。データ転送要求を受信したことに応答して、ステップ504で、ファームウェアはデータを受信機に送信しようと試みる。問合せ506で、受信機がデータを受信することができる(例えば、受信機において空のバッファがある)場合、次いで、ステップ508で、データが同期的に転送され、データ転送が完了する。その後、送信機は別のデータ転送を実行することができ、非同期処理が送信機によって許可される場合、送信機はQAOBを新しい要求に含めることができる。
【0041】
しかし、受信機が現在データを受信することができない(例えば、バッファ状態によって判定されたように、受信機において空のバッファがなく、したがって、受信機がデータの受信で遅れている)場合、データ転送は、要求においてQAOBが提供されたものと想定して、ファームウェアによって同期要求から非同期要求に自動的に変換される。ステップ510で、要求はQAOBに保存され、ステップ512で、例えば、QAOBに対するポインタをTPQに置くことによって、QAOBはその意図された宛先のTPQ420で待ち行列に入れられる。ここで、QAOBはSBALの内容を含み、したがって、他の処理にSBALを使用することができる。
【0042】
一実施形態では、QAOBが指定されていない場合、要求は失敗するか、要求を同期的に送信することができるまで待機する。
【0043】
一例では、QAOBが待ち行列に入れられたことに応答して、指定されたQAOBがこのデータ転送を非同期的に実行するために使用されているという指示によって送信サーバが制御される。次いで、送信サーバはその次のデータ転送を直ちにセットアップし、任意選択で、その後のデータ転送に必要な場合、別のQAOBを割り振ることができる。
【0044】
次に、問合せ514で、受信機がデータを受信することができるかどうかについての判定が行われる。例として、ファームウェアが、受信機が現在データを受け入れることができる(例えば、現在利用可能な空のバッファがある)という信号を受信機から受信したかどうか、または、ファームウェアが、バッファの状態をチェックすることによってバッファが利用可能であると判定したかどうかについての判定が行われる。特定の一例では、受信機はSIGA命令を使用して、その入力キューに空のバッファを置いたことをファームウェアに信号で知らせる。SIGA読取り(SIGA−r)機能コードは第1の汎用レジスタで指定される。SIGA読取り機能は、ファームウェアに任意の保留パケットを受信機のTPQからターゲットの入力バッファに転送させる。
【0045】
受信機がデータを受け入れることができない場合、ファームウェアは待機する。そうでなく、受信機がデータを受信することができる(例えば、少なくとも1つの空のバッファがある)場合、問合せ516で、ファームウェアは受信機のTPQにQAOBに対するポインタを有するかどうかを判定する。ポインタを有さない場合、処理は完了する。そうでなければ、ファームウェアはQAOBを使用してデータ転送を実行する。具体的には、ファームウェアはQAOBによって指し示されたデータを受信機に転送し、そのデータを空のバッファに置き、今では満たされているバッファに対するポインタを受信機の入力キューに置く。
【0046】
その後、ステップ520で、ファームウェアはデータ転送の完了を送信機に示す。一例では、この指示は、完了した非同期データ転送に関連するQAOBのアドレスを送信機の完了キュー410(
図6)にポストすること、および必要であれば、割込み550を行って、送信機にデータ転送完了を信号で知らせることを含む。この時点で、送信機は、完了した操作に関連するメモリを他の目的で再利用することができる。CQにポストされたQAOBは、例えば、状態情報、完了コード、エラーコードなどを含む非同期処理に関する情報を含む。
【0047】
特定の一例では、QAOBのアドレスが完了キューエントリにポストされる(すなわち、QAOBアドレスが完了キューのエントリに配置されたSBALEに含まれる)と、ファームウェアは、一例として、以下の情報をQAOB内のプログラムに返す。
・ 非同期I/O動作の結果を反映する理由コード
・ バッファ状態:非同期データ転送の「State of Queue−Buffer N(SQBN)」。これは同期データ転送のSLSBに置かれるものと同じ値である。SQBNはQAOBの現在の状態を示す値を含む。状態値は、例えば、2つの部分、すなわち、バッファがプログラム・ファームウェアによって所有されているかどうかを示す第1の部分、およびQAOBの現在の処理状態を示す第2の部分を含む。
【0048】
特定の要求が非同期的に実行されるが、特定の受信機が、例えば、データの受信で遅れていない限り、送信機から他の受信機への他の要求を同期的に実行することができる。さらに、受信機がデータの受信で遅れていると再び判定されない限り、送信機から受信機への他の要求は自動的に同期に戻る。例えば、上記に記述したように、ファームウェアはデータを受信機に送信しようと試み、受信機がデータを受信することができる場合、データは同期的に送信される。一実施形態では、伝送が同期と非同期の間で変換されても、データは伝送されたときと同じFIFO順序のままである。ファームウェアは、受信機のTPQ420にあるすべての待ち行列に入れられたQAOBを、任意の将来の同期要求がこの送信機または任意の他の送信機から受信される前に、転送することになる。そのTPQ420にQAOBを既に有する受信機に対して別の同期データ転送が行われた場合、この同期データ転送は(送信機によって許可された場合)ファームウェアによって自動的に非同期要求に変換されるか、利用可能なバッファ応答がないために失敗する。順序を維持することで、コストのかかる再配列処理を回避し、受信機のTCP/IPスタックの性能および全体的なCPU利用率を向上させる。
【0049】
上記で詳細に記述されているのは、プロセッサ(例えば、ファームウェア)がそのような変換が行われるべきであると判定したことに応答して、同期データ転送から非同期データ転送に自動的に変換する機能である。例として、変換は、受信機がデータを受信することができることに遅れていること(例えば、利用可能なバッファがない、応答が遅いなど)に応答して、実行される。さらに、この機能により、同じ受信機への他の転送を自動的に同期的に実行することができる。
【0050】
このサポートの1つまたは複数の態様は、ターゲットの宛先に対するコストのかかる再送を行うことなく、しかもネットワーク内の他の機能している宛先に対する影響を最小限に抑え、または影響を及ぼさずに、一時的なまたは長期間のデータ伝送に合わせて調整する機能を提供する。一態様では、送信機プログラムへのプッシュバックなしに、同期データ転送と非同期データ転送の間で交互に切り替える機能が提供される。HiperSockets完了キュー(CQ)を使用する特定の一例では、デバイスドライバはI/O動作を一時停止しない(SIGAは処理をブロックしない)。CQにより、書込みプロセスは脇に置かれ、送信機がさらなる書込み(SIGA)を同じターゲットまたは他のターゲットに出し続けることができ、一部のものは同期的に完了することができ、他のものは非同期的に完了する。このノンブロッキング態様により、CQは非同期になる。
【0051】
本発明の態様によれば、転送が同期か非同期かにかかわらず、データは送信機から受信機に一度だけコピーされる(内部バッファなし)。
【0052】
当業者によって理解されるように、本発明の態様は、システム、方法またはコンピュータ・プログラム製品として具体化され得る。したがって、本発明の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコードなどを含む)、またはソフトウェアの態様とハードウェアの態様を組み合わせる実施形態の形をとり得、これらすべてが本明細書において一般的に「回路」、「モジュール」または「システム」と呼ばれ得る。さらに、本発明の態様は、具体化されるコンピュータ可読プログラム・コードを有する1つまたは複数のコンピュータ可読媒体で具体化されるコンピュータ・プログラム製品の形をとり得る。
【0053】
1つまたは複数の非一時的コンピュータ可読媒体の任意の組合せが利用され得る。コンピュータ可読媒体は、コンピュータ可読記憶媒体であってもよい。コンピュータ可読記憶媒体は、例えば、電子、磁気、光学、電磁、赤外線、または半導体システム、装置、またはデバイス、あるいは上記の任意の適切な組合せであってもよいが、これらに限定されない。コンピュータ可読記憶媒体のより具体的な例(非網羅的なリスト)としては、1つまたは複数のワイヤを有する電気接続、携帯型コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ(RAM)、読取り専用メモリ(ROM)、消去可能プログラマブル読取り専用メモリ(EPROMまたはフラッシュメモリ)、光ファイバ、携帯型コンパクトディスク読取り専用メモリ(CD−ROM)、光記憶デバイス、磁気記憶デバイス、あるいは上記の任意の適切な組合せが挙げられる。この文書の文脈では、コンピュータ可読記憶媒体は、命令実行システム、装置もしくはデバイスによって、または命令実行システム、装置もしくはデバイスに関連して使用するためのプログラムを含む、または記憶することができる任意の有形媒体であってもよい。
【0054】
ここで
図7を参照すると、一例では、コンピュータ・プログラム製品600は、例えば、コンピュータ可読プログラム・コード手段または論理604を記憶して、本発明の1つまたは複数の態様を提供し、容易にするための1つまたは複数の非一時的コンピュータ可読記憶媒体602を含む。
【0055】
コンピュータ可読媒体で具体化されるプログラム・コードは、無線、有線、光ファイバケーブル、RFなど、または上記の任意の適切な組合せを含むがこれらに限定されない、適切な媒体を使用して伝送され得る。
【0056】
本発明の態様に関する操作を実行するためのコンピュータ・プログラム・コードを、Java(R)、Smalltalk、C++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語、アセンブラまたは類似のプログラミング言語などの従来の手続きプログラミング言語を含む、1つまたは複数のプログラミング言語の任意の組合せで書くことができる。プログラム・コードは、ユーザのコンピュータで全体的に、ユーザのコンピュータで部分的に、スタンドアロン・ソフトウェア・パッケージとして、ユーザのコンピュータで部分的にかつリモート・コンピュータで部分的に、またはリモート・コンピュータもしくはサーバで全体的に実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)またはワイド・エリア・ネットワーク(WAN)を含む任意のタイプのネットワークを介して、ユーザのコンピュータに接続され得るか、外部のコンピュータへの接続が(例えば、インターネット・サービス・プロバイダを使用してインターネットを介して)行われ得る。
【0057】
本発明の実施形態による方法、装置(システム)およびコンピュータ・プログラム製品のフローチャートの説明図またはブロック図あるいはその両方を参照しながら、本発明の態様を本明細書において記述する。フローチャートの説明図またはブロック図あるいはその両方のそれぞれのブロック、およびフローチャートの説明図またはブロック図あるいはその両方におけるブロックの組合せを、コンピュータ・プログラム命令によって実施することができることを理解されたい。これらのコンピュータ・プログラム命令は、コンピュータまたは他のプログラマブル・データ処理装置のプロセッサを介して実行する命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて指定された機能/行為を実施するための手段を作成するように、汎用コンピュータ、専用コンピュータ、またはマシンを作製するための他のプログラマブル・データ処理装置のプロセッサに提供され得る。
【0058】
また、これらのコンピュータ・プログラム命令は、コンピュータ可読媒体に記憶された命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて指定された機能/行為を実施する命令を含む製造品を作製するように、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイスに特定の方法で機能するよう命令することができるコンピュータ可読媒体に記憶され得る。
【0059】
また、コンピュータ・プログラム命令は、コンピュータまたは他のプログラマブル装置で実行する命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて指定された機能/行為を実施するためのプロセスを提供するように、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイスに読み込まれて、コンピュータによって実施されるプロセスを作製するためにコンピュータ、他のプログラマブル装置または他のデバイスで一連の操作ステップを実行させ得る。
【0060】
図におけるフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法およびコンピュータ・プログラム製品の考えられる実装形態のアーキテクチャ、機能および動作を示す。この点において、フローチャートまたはブロック図におけるそれぞれのブロックは、(1つまたは複数の)指定された論理機能を実施するための1つまたは複数の実行可能な命令を含むモジュール、セグメントまたはコードの部分を表し得る。いくつかの代替実装形態では、ブロックに記載された機能は、図に記載された順序ではない順序で行われ得ることにも留意されたい。例えば、連続して示されている2つのブロックは、実際には、実質的に同時に実行されることがあり、またはこれらのブロックは、時として、関与する機能に応じて、逆の順序で実行されることがある。ブロック図またはフローチャートの説明図あるいはその両方のそれぞれのブロック、およびブロック図またはフローチャートの説明図あるいはその両方におけるブロックの組合せを、指定された機能または行為を実行する専用ハードウェアベース・システム、または専用ハードウェアおよびコンピュータ命令の組合せによって実施することができることにも留意されたい。
【0061】
上記に加えて、本発明の1つまたは複数の態様を、顧客環境の管理を提案するサービス・プロバイダによって提供し、提案し、展開し、管理し、サービスすることなどができる。例えば、サービス・プロバイダは、1つまたは複数の顧客に対して本発明の1つまたは複数の態様を実行するコンピュータ・コードまたはコンピュータ・インフラあるいはその両方を作成し、維持し、サポートすることなどができる。それと引き換えに、サービス・プロバイダは、例として、加入または料金あるいはその両方の契約の下で、顧客から支払を受けることができる。加えてまたはその代わりに、サービス・プロバイダは、1つまたは複数のサードパーティへの広告コンテンツの販売から支払を受けることができる。
【0062】
本発明の一態様では、本発明の1つまたは複数の態様を実行するためのアプリケーションが展開され得る。一例として、アプリケーションの展開は、本発明の1つまたは複数の態様を実行するように動作可能なコンピュータ・インフラを提供することを含む。
【0063】
本発明のさらなる態様として、コンピュータ可読コードをコンピューティング・システムに統合することを含むコンピューティング・インフラを展開することができ、コンピューティング・システムと組み合わされたコードは本発明の1つまたは複数の態様を実行することができる。
【0064】
本発明のさらなる態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含むコンピューティング・インフラを統合するためのプロセスが提供され得る。コンピュータ・システムはコンピュータ可読媒体を含み、コンピュータ媒体は本発明の1つまたは複数の態様を含む。コンピュータ・システムと組み合わされたコードは、本発明の1つまたは複数の態様を実行することができる。
【0065】
様々な実施形態が上記で記述されているが、これらは例にすぎない。例えば、他のアーキテクチャのコンピューティング環境は、本発明の1つまたは複数の態様を組み込み、使用することができる。例として、zEnterpriseサーバ以外のサーバは、本発明の1つまたは複数の態様を含み、これを使用し、またはそれから利益を得るか、あるいはそれらのすべてを行うことができる。さらに、同期から非同期への変換は、バッファが利用可能であるかどうか以外の考慮事項に応答したものであってもよい。さらに、本発明の1つまたは複数の態様を、隔離されたメモリ空間の間での任意のメモリ間転送に使用することができる。多くの他の変形形態も可能である。
【0066】
さらに、他のタイプのコンピューティング環境は、本発明の1つまたは複数の態様から利益を得ることができる。例として、システムバスを介してメモリ要素に直接または間接的に結合された少なくとも2つのプロセッサを含む、プログラム・コードを記憶するまたは実行するあるいはその両方を行うのに適したデータ処理システムが使用可能である。メモリ要素は、例えば、プログラム・コードの実際の実行中に用いられるローカルメモリ、バルクストレージ、および実行中にコードをバルクストレージから取り出さなければならない回数を低減するために少なくとも一部のプログラム・コードの一時的なストレージを提供するキャッシュメモリを含む。
【0067】
入力/出力またはI/Oデバイス(キーボード、ディスプレイ、ポインティング・デバイス、DASD、テープ、CD、DVD、サムドライブおよび他のメモリ媒体などを含むが、これらに限定されない)を直接または介在するI/Oコントローラを介してシステムに結合することができる。また、ネットワーク・アダプタをシステムに結合して、データ処理システムが介在するプライベート・ネットワークまたは公共ネットワークを介して他のデータ処理システムまたはリモート・プリンタもしくはストレージ・デバイスに結合されるようになることを可能にすることができる。モデム、ケーブルモデム、およびイーサネット(R)カードは利用可能なタイプのネットワーク・アダプタのいくつかにすぎない。
【0068】
図8を参照すると、本発明の1つまたは複数の態様を実施するためのホスト・コンピュータ・システム5000の代表的な構成要素が図示されている。代表的なホスト・コンピュータ5000は、コンピュータ・メモリ(すなわち、中央ストレージ)5002と通信する1つまたは複数のCPU5001、ならびに記憶媒体デバイス5011および他のコンピュータまたはSANなどと通信するためのネットワーク5010へのI/Oインターフェースを含む。CPU5001は、アーキテクチャ化された命令セットおよびアーキテクチャ化された機能を有するアーキテクチャに準拠している。CPU5001は、プログラムアドレス(仮想アドレス)をメモリの実際のアドレスに変換するための動的アドレス変換(DAT)5003を有し得る。DATは、典型的には、コンピュータ・メモリ5002のブロックへの後のアクセスでアドレス変換の遅延がなくて済むように、変換をキャッシュするための変換ルックアサイド・バッファ(TLB)5007を含む。典型的には、コンピュータ・メモリ5002とプロセッサ5001の間でキャッシュ5009が用いられる。キャッシュ5009は、2つ以上のCPUで利用可能な大型キャッシュ、および大型キャッシュとそれぞれのCPUの間のより小型で高速の(下位)キャッシュを有する階層型であってもよい。いくつかの実装形態では、下位キャッシュが分割されて、命令フェッチおよびデータアクセスのための別個の下位キャッシュを提供する。一実施形態では、命令は、キャッシュ5009を介して命令フェッチ・ユニット5004によってメモリ5002からフェッチされる。命令は、命令デコード・ユニット5006でデコードされ、(いくつかの実施形態では、他の命令によって)1つまたは複数の命令実行ユニット5008にディスパッチされる。典型的には、いくつかの実行ユニット5008、例えば、演算実行ユニット、浮動小数点実行ユニットおよび分岐命令実行ユニットが用いられる。命令は実行ユニットによって実行され、必要に応じて、命令が指定したレジスタまたはメモリからオペランドにアクセスする。メモリ5002からオペランドにアクセスする(オペランドを読み込むまたは記憶する)場合、典型的には、読込み/記憶ユニット5005が実行中の命令の制御下でアクセスを処理する。命令は、ハードウェア回路でもしくは内部マイクロコード(ファームウェア)でまたはその両方の組合せによって実行され得る。
【0069】
述べたように、コンピュータ・システムは、ローカル(または主)ストレージにおける情報、ならびにアドレス指定、保護、および参照や変更の記録を含む。アドレス指定のいくつかの態様は、アドレスの形式、アドレス空間の概念、様々なタイプのアドレス、およびあるタイプのアドレスを別のタイプのアドレスに変換する方法を含む。主ストレージの一部は、恒久的に割り当てられたストレージ位置を含む。主ストレージは、システムに、データの直接アドレス指定可能な高速アクセス・ストレージを提供する。データおよびプログラムを処理することができるようになる前に、(入力デバイスから)データおよびプログラムの両方を主ストレージに読み込まなければならない。
【0070】
主ストレージは、時としてキャッシュと呼ばれる、1つまたは複数のより小型でより高速なアクセス・バッファ・ストレージを含み得る。キャッシュは、典型的には、CPUまたはI/Oプロセッサに物理的に関連付けられる。物理的な構造および別々の記憶媒体を使用することの影響は、性能に対するものを除き、一般的に、プログラムによって観察することはできない。
【0071】
命令およびデータ・オペランドについて、別個のキャッシュを維持することができる。キャッシュ内の情報は、キャッシュ・ブロックまたはキャッシュ・ライン(または略してライン)と呼ばれる整数境界上の連続したバイトに維持される。モデルは、キャッシュ・ラインのサイズをバイト単位で返すEXTRACT CACHE ATTRIBUTE命令を提供し得る。また、モデルはデータまたは命令キャッシュへのストレージのプリフェッチまたはキャッシュからのデータの解放に影響を与えるPREFETCH DATA命令およびPREFETCH DATA RELATIVE LONG命令を提供し得る。
【0072】
ストレージは、長い水平方向のビットの文字列とみなされる。大半の操作の場合、ストレージへのアクセスは、左から右への順序で進む。ビットの文字列は、8ビットの単位で分割される。8ビットの単位は1バイトと呼ばれ、これはすべての情報形式の基本的な構成要素(building block)である。ストレージ内のそれぞれのバイト位置は一意の負でない整数によって識別され、この整数はそのバイト位置のアドレスまたは単純にバイトアドレスである。隣接するバイト位置は連続アドレスを有し、左の0で始まり、左から右への順序で進む。アドレスは符号なし2進整数であり、24ビット、31ビットまたは64ビットである。
【0073】
情報は、ストレージとCPUまたはチャネルサブシステムの間で、一度に1バイトずつ、または1バイト・グループずつ伝送される。別途指定されない限り、例えば、z/Architecture(R)では、ストレージ内のバイト・グループはグループの左端のバイトによってアドレス指定される。グループ内のバイトの数は、実行される操作によって暗示されるか、明示的に指定される。CPU操作で使用されるとき、バイト・グループはフィールドと呼ばれる。それぞれのバイト・グループ内で、例えば、z/Architecture(R)では、ビットは左から右の順序で番号が付けられる。z/Architecture(R)では、左端のビットは時として「高位」ビットと呼ばれ、右端のビットは「低位」ビットと呼ばれる。ただし、ビット数はストレージ・アドレスではない。バイトのみをアドレス指定することができる。ストレージ内のバイトの個々のビットに対して操作するためには、バイト全体にアクセスする。1バイト内のビットには、(例えば、z/Architecture(R)では)左から右に0から7までの番号が付けられる。1つのアドレス内のビットには、24ビット・アドレスの場合は8〜31または40〜63の番号を付けることができ、あるいは31ビット・アドレスの場合は1〜31または33〜63の番号を付けることができ、64ビット・アドレスの場合は0〜63の番号が付けられる。複数バイトの任意の他の固定長形式内では、その形式を形成するビットには、0から始まる連続した番号が付けられる。誤り検出の目的で、また、好ましくは訂正のために、1つまたは複数のチェックビットをそれぞれのバイトまたはバイト・グループとともに伝送することができる。そのようなチェックビットはマシンによって自動的に生成され、プログラムが直接制御することはできない。ストレージ容量はバイト数で表される。ストレージ・オペランド・フィールドの長さが命令の操作コードによって暗示されるとき、フィールドは固定長を有すると言われ、固定長は1バイト、2バイト、4バイト、8バイトまたは16バイトとすることができる。命令によっては、より大きいフィールドが暗示され得る。ストレージ・オペランド・フィールドの長さが暗示されず明示的に述べられるとき、フィールドは可変長を有すると言われる。可変長オペランドは1バイトずつ(または命令によっては、2バイトの倍数もしくは他の倍数で)長さを変えることができる。情報がストレージに置かれると、ストレージへの物理パスの幅が記憶されるフィールドの長さよりも大きい場合でも、指定されたフィールドに含まれるこれらのバイト位置の内容のみが置き換えられる。
【0074】
特定の情報単位は、ストレージ内の整数境界上になければならない。そのストレージ・アドレスがバイトでの単位の長さの倍数であるとき、境界は、情報単位に関して整数のものであると言われる。整数境界上にある2バイト、4バイト、8バイト、および16バイトのフィールドには、特別な名称が与えられる。ハーフワード(halfword)は、2バイト境界上にある2個の連続したバイトのグループであり、命令の基本的な構成要素である。ワード(word)は、4バイト境界上にある4個の連続したバイトのグループである。ダブルワード(doubleword)は、8バイト境界上にある8個の連続したバイトのグループである。クワドワード(quadword)は、16バイト境界上にある16個の連続したバイトのグループである。ストレージ・アドレスが、ハーフワード、ワード、ダブルワード、およびクワドワードを示す場合、そのアドレスの2進表現は、それぞれ、右端の1個、2個、3個、または4個のゼロビットを含む。命令は、2バイトの整数境界上になければならない。大半の命令のストレージ・オペランドは、境界合わせ(boundary-alignment)要件を有さない。
【0075】
命令およびデータ・オペランドの別個のキャッシュを実施するデバイスでは、ストアが後にフェッチされる命令を変更するかどうかに関係なく、後に命令をフェッチするキャッシュ・ライン内にプログラムが格納する場合には、著しい遅延が生じることがある。
【0076】
一実施形態では、本発明はソフトウェア(時として、ライセンス内部コード、ファームウェア、マイクロコード、ミリコード、ピココードなどと呼ばれ、それらのいずれも本発明の1つまたは複数の態様と整合性がある)によって実施され得る。
図8を参照すると、本発明の1つまたは複数の態様を具体化するソフトウェア・プログラム・コードは、CD−ROMドライブ、テープドライブまたはハードライブなどの長期記憶媒体デバイス5011から、ホストシステム5000のプロセッサ5001によってアクセスされ得る。ソフトウェア・プログラム・コードは、ディスケット、ハードドライブ、またはCD−ROMなどの、データ処理システムとともに使用するための様々な知られている媒体のいずれかの上で具体化され得る。コードは、そのような媒体上に分散させてもよく、またはコンピュータ・メモリ5002からユーザに分散させるか、そのような他のシステムのユーザが使用するために、ネットワーク5010上の1つのコンピュータ・システムのストレージから他のコンピュータ・システムに分散させてもよい。
【0077】
ソフトウェア・プログラム・コードは、様々なコンピュータ構成要素および1つまたは複数のアプリケーション・プログラムの機能および相互作用を制御するオペレーティングシステムを含む。プログラム・コードは、通常、記憶媒体デバイス5011から比較的高速なコンピュータ・ストレージ5002にページングされ、そこでプロセッサ5001による処理に利用可能になる。ソフトウェア・プログラム・コードをメモリ内、物理媒体上で具体化するまたはネットワークを介してソフトウェア・コードを分散するあるいはその両方を行う技術および方法はよく知られており、本明細書ではさらに論じない。プログラム・コードは、有形媒体(電子メモリ・モジュール(RAM)、フラッシュメモリ、コンパクトディスク(CD)、DVD、磁気テープなどを含むが、これらに限定されない)上で作成され、記憶されるとき、「コンピュータ・プログラム製品」と呼ばれることが多い。コンピュータ・プログラム製品媒体は、処理回路によって実行するために、好ましくはコンピュータ・システム内の処理回路によって典型的には読取り可能である。
【0078】
図9は、本発明の1つまたは複数の態様が実施され得る代表的なワークステーションまたはサーバ・ハードウェア・システムを示す。
図9のシステム5020は、任意選択の周辺デバイスを含む、パーソナルコンピュータ、ワークステーション、またはサーバなどの代表的なベース・コンピュータ・システム5021を含む。ベース・コンピュータ・システム5021は、1つまたは複数のプロセッサ5026と、知られている技術に従って(1つまたは複数の)プロセッサ5026とシステム5021の他の構成要素を接続し、これらの間の通信を可能にするために用いられるバスとを含む。バスは、プロセッサ5026を、メモリ5025および、例えばハードドライブ(例えば、磁気媒体、CD、DVD、およびフラッシュメモリのいずれかを含む)またはテープドライブを含むことができる長期ストレージ5027に接続する。また、システム5021はユーザ・インターフェース・アダプタを含むことができ、ユーザ・インターフェース・アダプタは、バスを介して、マイクロプロセッサ5026を、キーボード5024、マウス5023、プリンタ/スキャナ5030、またはタッチ・センシティブ・スクリーン、デジタル化された入力パッドなどの任意のユーザ・インターフェース・デバイスとすることができる他のインターフェース・デバイスあるいはそれらすべてなどの、1つまたは複数のインターフェース・デバイスに接続する。また、バスは、ディスプレイ・アダプタを介して、LCDスクリーンまたはモニタなどのディスプレイ・デバイス5022をマイクロプロセッサ5026に接続する。
【0079】
システム5021は、ネットワーク5029と通信する5028ことができるネットワーク・アダプタを介して、他のコンピュータまたはコンピュータのネットワークと通信することができる。例示的なネットワーク・アダプタは、通信チャネル、トークンリング、イーサネット(R)またはモデムである。あるいは、システム5021はCDPD(セルラー・デジタル・パケット・データ)カードなどの無線インターフェースを使用して通信することができる。システム5021をローカル・エリア・ネットワーク(LAN)またはワイド・エリア・ネットワーク(WAN)内のそのような他のコンピュータと関連付けることができ、または、システム5021は別のコンピュータなどとのクライアント/サーバ構成におけるクライアントとすることができる。これらの構成のすべて、ならびに適切な通信ハードウェアおよびソフトウェアは、当技術分野において知られている。
【0080】
図10は、本発明の1つまたは複数の態様が実施され得るデータ処理ネットワーク5040を示す。データ処理ネットワーク5040は、それぞれが複数の個々のワークステーション5041、5042、5043、5044を含むことができる、無線ネットワークおよび有線ネットワークなどの複数の個々のネットワークを含み得る。さらに、当業者であれば理解するように、1つまたは複数のLANを含めることができ、LANは、ホスト・プロセッサに結合された複数のインテリジェント・ワークステーションを含み得る。
【0081】
さらに
図10を参照すると、ネットワークは、ゲートウェイ・コンピュータ(クライアント・サーバ5046)またはアプリケーション・サーバ(データ・リポジトリにアクセスすることができ、かつ、ワークステーション5045から直接アクセスすることもできるリモート・サーバ5048)などのメインフレーム・コンピュータまたはサーバを含むこともできる。ゲートウェイ・コンピュータ5046は、それぞれの個々のネットワークへの入口点として働く。ゲートウェイは、あるネットワーキング・プロトコルを別のネットワーキング・プロトコルに接続するときに必要とされる。ゲートウェイ5046を、通信リンクによって別のネットワーク(例えば、インターネット5047)に結合することができることが好ましい。ゲートウェイ5046を、通信リンクを使用して1つまたは複数のワークステーション5041、5042、5043、5044に直接結合することもできる。ゲートウェイ・コンピュータは、インターナショナル・ビジネス・マシーンズ・コーポレーションから入手可能なIBM eServer(商標)System z(R)サーバを利用して実装され得る。
【0082】
図9および
図10を同時に参照すると、本発明の1つまたは複数の態様を具体化することができるソフトウェア・プログラミング・コードは、CD−ROMドライブまたはハードドライブなどの長期記憶媒体5027から、システム5020のプロセッサ5026によってアクセスされ得る。ソフトウェア・プログラミング・コードは、ディスケット、ハードドライブ、またはCD−ROMなどの、データ処理システムとともに使用するための様々な知られている媒体のいずれかの上で具体化され得る。コードは、そのような媒体上に分散させてもよく、またはメモリからユーザ5050、5051に分散させるか、そのような他のシステムのユーザが使用するために、ネットワーク上の1つのコンピュータ・システムのストレージから他のコンピュータ・システムに分散させてもよい。
【0083】
あるいは、プログラミング・コードをメモリ5025で具体化し、プロセッサ・バスを使用してプロセッサ5026によってアクセスすることができる。そのようなプログラミング・コードは、様々なコンピュータ構成要素および1つまたは複数のアプリケーション・プログラム5032の機能および相互作用を制御するオペレーティング・システムを含む。プログラム・コードは、通常、記憶媒体5027から高速メモリ5025にページングされ、そこでプロセッサ5026による処理に利用可能になる。ソフトウェア・プログラミング・コードをメモリ内、物理媒体上で具体化するまたはネットワークを介してソフトウェア・コードを分散するあるいはその両方を行う技術および方法はよく知られており、本明細書ではさらに論じない。プログラム・コードは、有形媒体(電子メモリ・モジュール(RAM)、フラッシュメモリ、コンパクトディスク(CD)、DVD、磁気テープなどを含むが、これらに限定されない)上で作成され、記憶されるとき、「コンピュータ・プログラム製品」と呼ばれることが多い。コンピュータ・プログラム製品媒体は、処理回路によって実行するために、好ましくはコンピュータ・システム内の処理回路によって典型的には読取り可能である。
【0084】
プロセッサが最も容易に利用できるキャッシュ(通常、プロセッサの他のキャッシュよりも高速で小さい)は、最下位(L1またはレベル1)キャッシュであり、主ストア(主メモリ)は最上位キャッシュ(3つのレベルがある場合はL3)である。最下位レベルのキャッシュは、実行されるマシン命令を保持する命令キャッシュ(I−キャッシュ)と、データ・オペランドを保持するデータ・キャッシュ(D−キャッシュ)とに分割されることが多い。
【0085】
図11を参照すると、プロセッサ5026についての例示的なプロセッサ実施形態が示されている。典型的には、プロセッサ性能を向上させるために、1つまたは複数のレベルのキャッシュ5053を用いてメモリ・ブロックをバッファに入れる。キャッシュ5053は、使用される可能性が高いメモリ・データのキャッシュ・ラインを保持する高速バッファである。典型的なキャッシュ・ラインは、64バイト、128バイト、または256バイトのメモリ・データである。データをキャッシュに入れるのではなく、命令をキャッシュに入れるために、別個のキャッシュが用いられることが多い。キャッシュ・コヒーレンス(メモリおよびキャッシュ内のラインのコピーの同期)は、当技術分野においてよく知られている様々な「スヌープ」アルゴリズムによって提供されることが多い。プロセッサ・システムの主メモリ・ストレージ5025は、キャッシュと呼ばれることが多い。4つのレベルのキャッシュ5053を有するプロセッサ・システムでは、主ストレージ5025は、典型的にはより高速であるので、時としてレベル5(L5)のキャッシュと呼ばれ、コンピュータ・システムが利用できる不揮発性ストレージ(DASD、テープなど)の一部のみを保持する。主ストレージ5025は、オペレーティング・システムによって主ストレージ5025との間でページングされるデータのページを「キャッシュに入れる」。
【0086】
プログラム・カウンタ(命令カウンタ)5061は、実行される現行の命令のアドレスを追跡する。z/Architecture(R)プロセッサ内のプログラム・カウンタは64ビットであり、従来のアドレッシング制限をサポートするために、31ビットまたは24ビットに切り捨てることができる。プログラム・カウンタは、典型的には、コンテキスト・スイッチ中に持続するように、コンピュータのPSW(プログラム状況ワード)内で具体化される。したがって、例えば、オペレーティング・システムによって、プログラム・カウンタ値を有する進行中のプログラムに割り込むことができる(プログラム環境からオペレーティング・システム環境へのコンテキスト・スイッチ)。プログラムのPSWは、プログラムがアクティブでない間、プログラム・カウンタ値を維持し、オペレーティング・システムが実行している間、オペレーティング・システムの(PSW内の)プログラム・カウンタが使用される。典型的には、プログラム・カウンタは、現行の命令のバイト数に等しい量だけインクリメントされる。RISC(Reduced Instruction Set Computing、縮小命令セットコンピューティング)命令は、典型的には固定長であり、CISC(Complex Instruction Set Computing、複合命令セットコンピューティング)命令は、典型的には可変長である。IBM z/Architecture(R)の命令は、2バイト、4バイト、または6バイトの長さを有するCISC命令である。例えば、プログラム・カウンタ5061は、コンテキスト・スイッチ操作または分岐命令の分岐成立(branch taken)操作によって変更される。コンテキスト・スイッチ操作では、現行のプログラム・カウンタ値は、実行されるプログラムについての他の状態情報(条件コードなど)とともにプログラム状況ワードに保存され、実行される新しいプログラムモジュールの命令を指し示す新しいプログラム・カウンタ値が読み込まれる。分岐命令の結果をプログラム・カウンタ5061に読み込むことによって、プログラムが判断を下すことまたはプログラム内でループすることを可能にするために、分岐成立操作が実行される。
【0087】
典型的には、プロセッサ5026の代わりに命令をフェッチするために、命令フェッチ・ユニット5055が用いられる。フェッチ・ユニットは、「次の順次命令」、分岐成立命令のターゲット命令、またはコンテキスト・スイッチの後のプログラムの最初の命令のいずれかをフェッチする。現代の命令フェッチ・ユニットは、プリフェッチされた命令を使用することができる可能性に基づいて、命令を投機的に(speculatively)プリフェッチするプリフェッチ技術を用いることが多い。例えば、フェッチ・ユニットは、次の順次命令を含む16バイトの命令と、付加的なバイトのさらなる順次命令とをフェッチすることができる。
【0088】
次いで、フェッチされた命令が、プロセッサ5026によって実行される。実施形態では、(1つまたは複数の)フェッチされた命令は、フェッチ・ユニットのディスパッチ・ユニット5056に渡される。ディスパッチ・ユニット5056は(1つまたは複数の)命令をデコードし、(1つまたは複数の)デコードされた命令についての情報を適切なユニット5057、5058、5060に転送する。実行ユニット5057は、典型的には、命令フェッチ・ユニット5055からデコードされた算術命令についての情報を受信し、命令のオペコードに従ってオペランドに関する算術演算を実行することになる。オペランドは、好ましくは、メモリ5025、アーキテクチャ化レジスタ5059、または実行される命令の即値フィールドのいずれかから、実行ユニット5057に提供される。実行の結果は、記憶される場合には、メモリ5025、レジスタ5059、または他のマシン・ハードウェア(制御レジスタ、PSWレジスタなど)内に記憶される。
【0089】
プロセッサ5026は、典型的には、命令の機能を実行するための1つまたは複数のユニット5057、5058、5060を有する。
図12を参照すると、実行ユニット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は、結果を様々な他の処理機能に転送することができる。プロセッサ・ユニットの多数の構成が存在し、本説明は、一実施形態の代表的な理解を与えることのみを意図している。
【0090】
ADD命令は、例えば、算術および論理機能を有する実行ユニット5057で実行されるが、浮動小数点命令は、例えば、特化された浮動小数点能力を有する浮動小数点実行部で実行される。実行ユニットは、オペランドに対してオペコードが定めた関数を実行することにより、命令が識別したオペランドに対して動作することが好ましい。例えば、ADD命令は、命令のレジスタ・フィールドによって特定された2つのレジスタ5059内に見出されるオペランドに対して、実行ユニット5057により実行することができる。
【0091】
実行ユニット5057は、2つのオペランドに対して算術加算を実行し、結果を第3のオペランドに記憶し、ここで、第3のオペランドは、第3のレジスタまたは2つのソースレジスタのうちの1つであってもよい。実行ユニットは、シフト、ローテート、論理積、論理和および排他的論理和などの様々な論理関数、ならびに、加算、減算、乗算、除算のいずれかを含む様々な代数関数を実行することができる算術論理ユニット(ALU)5066を利用することが好ましい。スカラー演算のために設計されたALU5066もあり、浮動小数点のために設計されたALU5066もある。データは、アーキテクチャに応じて、ビッグエンディアン(Big Endian)(最下位バイトが最も高いバイトアドレスである)、またはリトルエンディアン(Little Endian)(最下位バイトが最も低いバイトアドレスである)とすることができる。IBM z/Architecture(R)はビッグエンディアンである。符号付きフィールドは、アーキテクチャに応じて、符号および大きさ、1の補数または2の補数とすることができる。2の補数における負の値または正の値は、ALU内で加算しか必要としないため、ALUが減算能力を設計する必要がないという点で、2の補数は有利である。数は、通常、省略表現で記述され、12ビット・フィールドは、4,096バイトブロックのアドレスを定め、通常、例えば4Kバイト(キロバイト)ブロックと記述される。
【0092】
図13を参照すると、分岐命令を実行するための分岐命令情報が、典型的には、分岐ユニット5058に送信され、分岐ユニット5058は、分岐履歴テーブル5082などの分岐予測アルゴリズムを用いて、他の条件付き演算が完了する前に分岐の結果を予測することが多い。条件付き演算が完了する前に、現行の分岐命令のターゲットがフェッチされ、投機的に実行されることになる。条件付き演算が完了すると、投機的に実行された分岐命令は、条件付き演算の条件および投機された結果に基づいて、完了されるかまたは破棄される。典型的な分岐命令は、条件コードを試験し、条件コードが分岐命令の分岐要件を満たす場合、ターゲット・アドレスに分岐することができ、ターゲット・アドレスは、例えば、命令のレジスタ・フィールドまたは即値フィールド内に見出されるものを含むいくつかの数に基づいて計算することができる。分岐ユニット5058は、複数の入力レジスタ回路5075、5076、5077と、出力レジスタ回路5080とを有するALU5074を用いることができる。分岐ユニット5058は、例えば、汎用レジスタ5059、デコード・ディスパッチ・ユニット5056または他の回路5073と通信することができる。
【0093】
例えば、オペレーティング・システムによって開始されるコンテキスト・スイッチ、コンテキスト・スイッチを発生させるプログラム例外もしくはエラー、コンテキスト・スイッチを発生させるI/O割込み信号、または(マルチスレッド環境における)複数のプログラムのマルチスレッド活動を含む様々な理由により、命令のグループの実行に割込みがかけられることがある。コンテキスト・スイッチ動作は、現在実行中のプログラムについての状態情報を保存し、次いで、起動される別のプログラムについての状態情報を読み込むことが好ましい。状態情報は、例えば、ハードウェア・レジスタまたはメモリ内に保存することができる。状態情報は、実行される次の命令を指し示すプログラム・カウンタ値、条件コード、メモリ変換情報、およびアーキテクチャ化されたレジスタの内容を含むことが好ましい。コンテキスト・スイッチの活動は、ハードウェア回路、アプリケーション・プログラム、オペレーティング・システム・プログラム、またはファームウェア・コード(マイクロコード、ピココードまたはライセンス内部コード(LIC))を単独でまたは組み合わせて実施することができる。
【0094】
プロセッサは、命令により定められた方法に従ってオペランドにアクセスする。命令は、命令の一部の値を使用して即値オペランドを提供することができ、汎用レジスタまたは専用レジスタ(例えば、浮動小数点レジスタ)のいずれかを明示的に指し示す1つまたは複数のレジスタ・フィールドを提供することができる。命令は、オペコード・フィールドによって、オペランドとして識別されるインプライド・レジスタ(implied register)を利用することができる。命令は、オペランドのためのメモリ位置を利用することができる。z/Architecture(R)の長変位ファシリティ(long displacement facility)によって例示されるように、オペランドのメモリ位置を、レジスタ、即値フィールド、またはレジスタと即値フィールドの組合せによって与えることができ、命令は、基底レジスタ、指標レジスタ、および即値フィールド(変位フィールド)を定め、これらが、例えば一緒に加算されてメモリ内のオペランドのアドレスをもたらす。本明細書における位置は、通常は、別段の指示がない限り、主メモリ(主ストレージ)内の位置を意味する。
【0095】
図14を参照すると、プロセッサは読込み/記憶ユニット5060を使用してストレージにアクセスする。読込み/記憶ユニット5060は、メモリ5053内のターゲット・オペランドのアドレスを取得し、オペランドをレジスタ5059または別のメモリ5053の位置に読み込むことによって読込み操作を実行することができ、または、メモリ5053内のターゲット・オペランドのアドレスを取得し、レジスタ5059または別のメモリ5053の位置から取得したデータをメモリ5053内のターゲット・オペランド位置に記憶することによって、記憶操作を実行することができる。読込み/記憶ユニット5060は、投機的なものであってもよく、命令シーケンスに対してアウト・オブ・オーダー式の順序でメモリにアクセスすることができるが、読込み/記憶ユニット5060は、プログラムに対して、命令がイン・オーダー式に実行されたという外観を維持する必要がある。読込み/記憶ユニット5060は、汎用レジスタ5059、デコード/ディスパッチ・ユニット5056、キャッシュ/メモリ・インターフェース5053、または他の要素5083と通信することができ、ストレージ・アドレスを計算し、かつ、パイプライン・シーケンシングを行って操作をイン・オーダー式に保持するための、様々なレジスタ回路、ALU5085、および制御論理5090を含む。いくつかの動作は、アウト・オブ・オーダー式とすることができるが、読込み/記憶ユニットは、アウト・オブ・オーダー式動作が、プログラムに対して、当技術分野においてよく知られているようにイン・オーダー式に実行されたように見えるようにする機能を提供する。
【0096】
好ましくは、アプリケーション・プログラムが「見ている」アドレスは、仮想アドレスと呼ばれることが多い。仮想アドレスは、時として「論理アドレス」および「実効アドレス」と呼ばれる。これらの仮想アドレスは、単に仮想アドレスをオフセット値にプリフィックス付加すること、1つまたは複数の変換テーブルを介して仮想アドレスを変換することを含むがこれらに限定されない、様々な動的アドレス変換(DAT)技術のうちの1つによって、物理メモリ位置にリダイレクトされるという点で仮想のものであり、変換テーブルは、少なくともセグメント・テーブルおよびページ・テーブルを単独でまたは組み合わせて含むことが好ましく、セグメント・テーブルは、ページ・テーブルを指し示すエントリを有することが好ましい。z/Architecture(R)では、領域第1テーブル、領域第2テーブル、領域第3テーブル、セグメント・テーブル、および任意選択のページ・テーブルを含む、変換の階層が提供される。アドレス変換の性能は、仮想アドレスを関連した物理メモリ位置にマッピングするエントリを含む変換ルックアサイド・バッファ(TLB)を利用することによって改善されることが多い。DATが変換テーブルを使用して仮想アドレスを変換したときに、エントリが作成される。次いで、後に仮想アドレスを用いることで、低速の順次変換テーブル・アクセスではなく、高速のTLBのエントリを利用することができる。TLBの内容は、LRU(Least Recently Used)を含む様々な置換アルゴリズムによって管理され得る。
【0097】
プロセッサがマルチプロセッサ・システムのプロセッサである場合、それぞれのプロセッサは、コヒーレンシのために、I/O、キャッシュ、TLB、およびメモリなどの共有リソースをインターロック状態に保持する責任を負う。典型的には、キャッシュ・コヒーレンシを維持する際に、「スヌープ」技術が利用される。スヌープ環境では、共有を容易にするために、それぞれのキャッシュ・ラインを、共有状態、排他的状態、変更状態、無効状態などのいずれか1つの状態にあるものとしてマーク付けすることができる。
【0098】
I/Oユニット5054(
図11)は、プロセッサに、例えば、テープ、ディスク、プリンタ、ディスプレイ、およびネットワークを含む周辺デバイスに取り付けるための手段を提供する。I/Oユニットは、ソフトウェア・ドライバによってコンピュータ・プログラムに提示されることが多い。IBM(R)のSystem z(R)などのメインフレームでは、チャネル・アダプタおよびオープン・システム・アダプタが、オペレーティング・システムと周辺デバイスの間で通信を提供するメインフレームのI/Oユニットである。
【0099】
さらに、他のタイプのコンピューティング環境は、本発明の1つまたは複数の態様から利益を得ることができる。例として、環境はエミュレータ(例えば、ソフトウェアまたは他のエミュレーション機構)を含むことができ、エミュレータでは、特定のアーキテクチャ(例えば、命令実行、アドレス変換などのアーキテクチャ化された機能、およびアーキテクチャ化レジスタを含む)またはそのサブセットが(例えば、プロセッサおよびメモリを有するネイティブ・コンピュータ・システム上で)エミュレートされる。そのような環境では、エミュレータの1つまたは複数のエミュレーション機能は、エミュレータを実行するコンピュータがエミュレートされる機能とは異なるアーキテクチャを有し得る場合でも、本発明の1つまたは複数の態様を実施することができる。一例として、エミュレーション・モードでは、エミュレートされる特定の命令または操作がデコードされ、適切なエミュレーション機能が作り出されて個々の命令または操作を実施する。
【0100】
エミュレーション環境では、ホスト・コンピュータは、例えば、命令およびデータを記憶するメモリと、メモリから命令をフェッチし、任意選択でフェッチされた命令にローカル・バッファリングを行う命令フェッチ・ユニットと、フェッチされた命令を受信し、フェッチされた命令のタイプを判定する命令デコード・ユニットと、命令を実行する命令実行ユニットとを含む。実行は、データをメモリからレジスタに読み込むこと、データをレジスタからメモリに戻して記憶すること、またはデコード・ユニットによって決定された通りに何らかのタイプの算術演算もしくは論理演算を実行することを含み得る。一例では、それぞれのユニットはソフトウェアで実施される。例えば、ユニットによって実行される操作は、エミュレータソフトウェア内の1つまたは複数のサブルーチンとして実装される。
【0101】
より具体的には、メインフレームでは、アーキテクチャ化されたマシン命令は、多くの場合コンパイラ・アプリケーションを用いて、プログラマー、今日では通常「C」プログラマーによって使用される。記憶媒体に記憶されたこれらの命令は、z/Architecture(R)IBM(R)Serverで、あるいは他のアーキテクチャを実行するマシンで、ネイティブに実行され得る。これらの命令を、既存および将来のIBM(R)メインフレームサーバで、また、IBM(R)の他のマシン(例えば、Power SystemsサーバおよびSystem x(R)サーバ)上でエミュレートすることができる。これらの命令を、IBM(R)、Intel(R)、AMD(商標)などによって製造されたハードウェアを使用する様々なマシン上でLinuxを動作させるマシンで実行することができる。z/Architecture(R)下のそのハードウェアでの実行の他に、Linuxを、Hercules、UMX、またはFSI(Fundamental Software,Inc)によるエミュレーションを使用するマシンとして使用することもでき、一般的に実行はエミュレーション・モードで行われる。エミュレーション・モードでは、エミュレーション・ソフトウェアはネイティブ・プロセッサによって実行されて、エミュレートされるプロセッサのアーキテクチャをエミュレートする。
【0102】
ネイティブ・プロセッサは、典型的には、エミュレートされるプロセッサのエミュレーションを実行するためのファームウェアまたはネイティブ・オペレーティング・システムのいずれかを含むエミュレーション・ソフトウェアを実行する。エミュレーション・ソフトウェアは、エミュレートされるプロセッサ・アーキテクチャの命令をフェッチし、実行する責任を負う。エミュレーション・ソフトウェアは、命令境界を追跡するためのエミュレートされたプログラム・カウンタを維持する。エミュレーション・ソフトウェアは、1つまたは複数のエミュレートされたマシン命令を一度にフェッチし、1つまたは複数のエミュレートされたマシン命令を、ネイティブ・プロセッサによって実行するための対応するネイティブ・マシン命令のグループに変換することができる。より速い変換を達成することができるように、これらの変換された命令をキャッシュすることができる。それにもかかわらず、エミュレーション・ソフトウェアは、オペレーティング・システムおよびエミュレートされるプロセッサ用に書かれたアプリケーションが正常に動作することを保証するために、エミュレートされたプロセッサ・アーキテクチャのアーキテクチャ・ルールを維持しなければならない。さらに、エミュレーション・ソフトウェアは、エミュレートされるプロセッサ上で動作するように設計されたオペレーティング・システムまたはアプリケーション・プログラムが、エミュレーション・ソフトウェアを有するネイティブ・プロセッサ上で動作することができるように、制御レジスタ、汎用レジスタ、浮動小数点レジスタ、例えばセグメント・テーブルおよびページ・テーブルを含む動的アドレス変換機能、割込み機構、コンテキスト・スイッチ機構、時刻(TOD)クロックおよびI/Oサブシステムへのアーキテクチャ化されたインターフェースを含むが、これらに限定されない、エミュレートされるプロセッサ・アーキテクチャによって特定されたリソースを提供しなければならない。
【0103】
エミュレートされる特定の命令がデコードされ、サブルーチンが呼び出されて個々の命令の機能を実行する。エミュレートされるプロセッサの機能をエミュレートするエミュレーション・ソフトウェア機能は、例えば、「C」サブルーチンもしくはドライバで、または好ましい実施形態の説明を理解した後の当業者の技能の範囲内であるような、特定のハードウェアのドライバを提供する何らかの他の方法で、実施される。Beausoleilらによる「Multiprocessor for HardwareEmulation」という表題の米国特許第5,551,013号、およびScalziらによる「Preprocessing of Stored Target Routines for Emulating IncompatibleInstructions on a Target Processor」という表題の米国特許第6,009,261号、およびDavidianらによる「Decoding Guest Instruction toDirectly Access Emulation Routines that Emulate the Guest Instructions」という表題の米国特許第5,574,873号、およびGorishekらによる「Symmetrical Multiprocessing Busand Chipset Used for Coprocessor Support Allowing Non-Native Code to Run in aSystem」という表題の米国特許第6,308,255号、およびLethinらによる「Dynamic Optimizing Object Code Translator for Architecture Emulationand Dynamic Optimizing Object Code Translation Method」という表題の米国特許第6,463,582号、およびEric Trautによる「Method for Emulating GuestInstructions on a Host Computer Through Dynamic Recompilation of HostInstructions」という表題の米国特許第5,790,825号を含むが、これらに限定されない様々なソフトウェアおよびハードウェアエミュレーション特許は、当業者が利用できるターゲットマシンのために、異なるマシンに対してアーキテクチャ化された命令形式のエミュレーションを実現するための様々な知られている方法を示している。
【0104】
図15では、ホスト・アーキテクチャのホスト・コンピュータ・システム5000'をエミュレートする、エミュレートされたホスト・コンピュータ・システム5092の例が提供されている。エミュレートされたホスト・コンピュータ・システム5092では、ホスト・プロセッサ(CPU)5091はエミュレートされたホスト・プロセッサ(または仮想ホスト・プロセッサ)であり、ホスト・コンピュータ5000'のプロセッサ5091のものとは異なるネイティブ命令セット・アーキテクチャを有するエミュレーション・プロセッサ5093を含む。エミュレートされたホスト・コンピュータ・システム5092は、エミュレーション・プロセッサ5093がアクセス可能なメモリ5094を有する。例示的な実施形態では、メモリ5094は、ホスト・コンピュータ・メモリ5096部分と、エミュレーション・ルーチン5097部分とに分割される。ホスト・コンピュータ・メモリ5096は、ホスト・コンピュータ・アーキテクチャに従った、エミュレートされたホスト・コンピュータ5092のプログラムで利用可能である。エミュレーション・プロセッサ5093は、エミュレートされたプロセッサ5091のもの以外のアーキテクチャのアーキテクチャ化された命令セットのネイティブ命令、エミュレーション・ルーチン・メモリ5097から得られたネイティブ命令を実行し、アクセスされたホスト命令の機能をエミュレートするためのネイティブ命令実行ルーチンを決定するためにアクセスされた(1つまたは複数の)ホスト命令をデコードすることができるシーケンス&アクセス/デコード・ルーチンで得られた1つまたは複数の命令を用いることによって、コンピュータ・メモリ5096内のプログラムから実行するためのホスト命令にアクセスすることができる。ホスト・コンピュータ・システム5000'アーキテクチャについて定められる他のファシリティは、例えば、汎用レジスタ、制御レジスタ、動的アドレス変換およびI/Oサブシステム・サポートならびにプロセッサ・キャッシュなどのファシリティを含むアーキテクチャ化されたファシリティ・ルーチンによってエミュレートされ得る。エミュレーション・ルーチンは、エミュレーション・プロセッサ5093(汎用レジスタおよび仮想アドレスの動的変換など)で利用可能な機能を利用して、エミュレーション・ルーチンの性能を向上させることもできる。特殊ハードウェアおよびオフロード・エンジンを提供して、ホスト・コンピュータ5000'の機能をエミュレートする際にプロセッサ5093を支援することもできる。
【0105】
本明細書において使用される術語は、特定の実施形態を記述することだけを目的とし、本発明の限定を意図するものではない。本明細書において使用される場合、単数形「a」、「an」および「the」は、文脈上明らかに別段の定めがある場合を除き、複数形も含むことが意図されている。「備える」または「備えている」あるいはその両方の用語は、本明細書で使用される場合、述べられた特徴、整数、ステップ、動作、要素、または構成要素、あるいはそれらすべての存在を規定するが、1つまたは複数の他の特徴、整数、ステップ、動作、要素、構成要素、またはそれらのグループあるいはそれらすべての存在もしくは追加を排除しないことをさらに理解されるであろう。
【0106】
下記の特許請求の範囲における対応する構造、材料、行動、およびすべてのミーンズプラスファンクション要素またはステッププラスファンクション要素の均等物は、存在する場合、具体的に特許請求される他の特許請求される要素との組合せにおいて機能を実行するための任意の構造、材料、または行動を含むことが意図されている。本発明の1つまたは複数の態様の説明は、例示および説明の目的のために提示されたが、網羅的であること、または開示された形態の本発明に限定されることは意図されていない。多くの修正形態および変形形態が、本発明の範囲を逸脱することなく、当業者には明らかとなるであろう。実施形態は、本発明の原理および実際的な用途について最善の説明をするように、かつ当業者が考慮される特定の使用に適する様々な修正形態を有する様々な実施形態に対して本発明を理解することができるように、選ばれ、説明された。