JPH1011372A - Cpu及びi/oデバイス間のリファレンスによるコンピュータシステムデータi/o - Google Patents

Cpu及びi/oデバイス間のリファレンスによるコンピュータシステムデータi/o

Info

Publication number
JPH1011372A
JPH1011372A JP8341412A JP34141296A JPH1011372A JP H1011372 A JPH1011372 A JP H1011372A JP 8341412 A JP8341412 A JP 8341412A JP 34141296 A JP34141296 A JP 34141296A JP H1011372 A JPH1011372 A JP H1011372A
Authority
JP
Japan
Prior art keywords
data
sink
descriptor
message
data source
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.)
Pending
Application number
JP8341412A
Other languages
English (en)
Other versions
JPH1011372A5 (ja
Inventor
Leonard R Fishler
アール フィッシュラー レナード
Bahman Zargham
ザーガム バーマン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tandem Computers Inc
Original Assignee
Tandem Computers Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tandem Computers Inc filed Critical Tandem Computers Inc
Publication of JPH1011372A publication Critical patent/JPH1011372A/ja
Publication of JPH1011372A5 publication Critical patent/JPH1011372A5/ja
Pending legal-status Critical Current

Links

Classifications

    • G—PHYSICS
    • G06—COMPUTING OR CALCULATING; 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/46—Multiprogramming arrangements
    • G06F9/54—Interprogram communication
    • G06F9/544—Buffers; Shared memory; Pipes

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Computer And Data Communications (AREA)
  • Information Transfer Systems (AREA)

Abstract

(57)【要約】 【課題】 プロセッサ内及びプロセッサ間の両方におい
て、データの不要なコピーイングを排除する方法及び装
置を提供する。 【解決手段】 データに対するディスクリプタをゲット
しかつディスクリプタをデータ・ソース及びシンクの中
でパスする装置及び方法であり、それによりデータ・ソ
ース及びシンクの中でデータをコピーすることを回避す
る。データを消費するデータ・ソース及びシンクは、デ
ィスクリプタのデータへのグローバル・ポインタを用い
て、実際のデータそれ自体の複写を実際に開始する。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、コンピュータシステム
におけるデータ転送に関する。より詳しく述べれば、本
発明は、種々のデータソースとデータシンク(シンク)
との間でデータを転送する方法及び装置に関する。
【0002】
【従来の技術】共用メモリを有するシステムにおける待
ち行列メッセージをベースとするI/O(“QIO”)
に関しては 1995 年1月23日付米国特許出願第 08/377,
302 号に詳細開示されている。この出願は、以下に参照
文献として概述する。図1は、QIO共用メモリシステ
ムを組み込んだ故障許容並列データ処理システム100
を示すブロック線図である。図1は、ローカルエリアネ
ットワーク(LAN)105を介して連絡するノード1
02及びワークステーション104を含んでいる。ノー
ド102は、プロセッサ間バス(IPB)109によっ
て接続されているプロセッサ106及び108を含む。
IPB 109は、公知の型の冗長バスである。図1に
は示してないが、システム100は、少なくとも1つの
プロセッサがシステム内の他のプロセッサからのデータ
のチェックポイントである故障許容並列コンピュータシ
ステムである。従来はこのようなシステムにおいては、
メモリが隘路になったり、または共通の故障点になった
りすることを回避するために、メモリを共用することは
なかった。このような故障許容システムは、例えば Kat
zman等による米国特許第 4,817,091号に開示されてい
る。
【0003】プロセッサ106は、CPU110及びメ
モリ112を含み、ディスクドライバ132及びディス
クコントローラ114を介してディスクドライブ116
に接続されている。アプリケーションプロセス120及
びディスクプロセス122は、QIOライブラリルーチ
ン126を通して共用メモリセグメント124にアクセ
スする。QIOの本質として、共用メモリセグメント1
24及びQIOライブラリ126を使用してアプリケー
ションプロセス120とディスクプロセス122との間
に送られるメッセージは、データを複製することなくプ
ロセスからプロセスへ送られる。プロセッサ108は、
CPU142及びメモリ144をも含み、LANコント
ローラ140を介してLAN105に接続されている。
メモリ144は、QIO待ち行列151を含む共用メモ
リセグメント150を含んでいる。TCP/IPプロセ
ス146は、QIOライブラリルーチン152を使用し
て共用メモリセグメント150を通してNFSディスト
リビュータプロセス148及びソフトウェアLANドラ
イバ158と連絡する。この場合もQIO共用メモリセ
グメント150を使用する連絡は、プロセス間でのデー
タのコピーイングを含まない。TCP/IPプロセス1
46及びLAN105は、LANドライバ158及びL
ANコントローラ140によってデータを交換する。プ
ロセス120は、メッセージシステム(MS)128及
び154、及びファイルシステム(FS)130及び1
56を使用して、IPB109を介してTCP/IPプ
ロセス146と連絡する。QIO連絡とは異なり、メッ
セージシステム及びファイルシステムを使用する連絡
は、データのコピーイングを必要とする。
【0004】以上説明したように、図1は、単一のプロ
セッサ上でのプロセス間の連絡のためのQIO共用メモ
リシステムを示している。共用メモリ待ち行列システム
は、単一のプロセッサ上のプロセス間の連絡の動作速度
を増加させ、従ってシステムの総合速度を増加させる。
更に共用メモリ待ち行列システムによれば、プロセスを
定義する場合に、プログラマは自由に垂直及び水平の両
モジュラリティを実現することができる。この垂直及び
水平モジュラリティの増加はプロセスの維持の容易さを
改善しながら、単一プロセッサ上のプロセス間の、及び
単一プロセッサ上のドライバ間のデータの転送効率を向
上させることができる。
【0005】図2にコンピュータシステム200を示
す。コンピュータシステムは、ノード210、211、
212、及び213を含んでいる。ノード210、21
1、212、及び213は、ネットワーク(Tネット)
220によって相互接続されている。ノード210、2
11、212、及び213は、それぞれディスクプロセ
ス230、アプリケーションサーバプロセス231、中
間プロトコルプロセス232、及びTCP/IP及びA
TMドライバ233を走らせる。アプリケーションサー
バプロセス231は、Tネット220を通してデータに
関するユーザ要求を受け、ユーザへのそのデータの転送
を管理する。要求されたデータは一般に、ディスクコン
トローラ240のようなディスクコントローラを介して
のみアクセス可能なディスク上に存在している。実際に
は、ディスクコントローラ上のデータへのアクセスは、
特定のディスクプロセスによって調停される。ここで
は、ノード210上のディスクプロセス230がディス
クコントローラ240へのアクセスを調停する。ディス
クプロセス210は、ディスクコントローラ240に関
連付けられたディスクへの、及びディスクからのデータ
の転送の責を負っている。
【0006】図2に示すシステム200に関して、マル
チメディアアプリケーションは、データディスクからあ
る大量のデータ260、例えばMPEGビデオクリップ
を入手する必要があるものとする。またこのアプリケー
ションは、そのMPEGビデオクリップの個々のバイト
の何れをも(または少なくとも大部分を)調べたり、ま
たは変換したりする必要はないものとする。アプリケー
ションは、ネットワーク上の何処かのエンドユーザがそ
のビデオクリップを要求したので、データ260を探索
する。ユーザインタフェース及びアプリケーションサー
バプロセス231は、TCP/IP上に実現されている
中間プロトコルを使用して連絡する。(ユーザインタフ
ェースは、アプリケーションプロセスであっても、また
は最小のソフトウェアを有するハードウェアデータであ
っても差し支えない。何れの場合であっても、ユーザイ
ンタフェースは図示してない。)従って、アプリケーシ
ョンサーバプロセス231からのメッセージには中間プ
ロトコル情報262を付加しなければならず、中間プロ
トコルプロセス232は中間プロトコルが要求した時
に、このようなヘッダ情報262を結び付ける責任を有
している。同様に、アウトバウンドメッセージ上にTC
P/IPプロトコル情報263をレイヤ(層)化しなけ
ればならず、TCP/IPプロトコルが要求すると、ノ
ード213内のTCP/IPドライバプロセス233が
このTCP/IPヘッダ263を供給する。従って、要
求があり次第、ディスクコントローラ240に関連付け
られたディスクからデータ260を転送するために、ア
プリケーションサーバプロセス231はディスクプロセ
ス230を使用してディスクからデータ260を検索
し、また中間プロトコルプロセス232及びTCP/I
PATMドライバプロセス233を使用してデータ26
0をユーザインタフェースへ転送する。
【0007】更に、アプリケーションプロセス231は
その機能の中で、アウトバウンドデータ260の始め
に、あるアプリケーションに特定のデータ261を付加
するものとする。要求中のユーザが使用するためにデー
タ260へのアクセスをディスクプロセス230が調停
していることをアプリケーションサーバプロセス231
が認識すると、アプリケーションサーバプロセス231
はそのデータ260を検索するためにTネット220を
介してディスクプロセス230へメッセージを送る。デ
ィスクプロセス230はコマンドシーケンスを作成し、
ディスクコントローラ240はこのコマンドシーケンス
を受信すると、関心データを回復するための命令として
解釈する。ディスクプロセス230は、ディスクコント
ローラ240に指令してデータ260を副処理システム
(ノード)210のメモリ250内へ転送させる。ディ
スクコントローラ240は、指令されたデータ転送が成
功裏に完了すると、そのことをディスクプロセス230
に通報する。
【0008】ディスクプロセス230自体は、データ転
送を成功裏に完了させたアプリケーションサーバプロセ
ス231に応答し、その応答内にデータ260のコピー
を含ませる。従って、要求されたデータ260はアプリ
ケーションサーバノード211内にコピーされる。当分
野に精通していれば、データ260をアプリケーション
サーバノード211のTネットドライババッファ(図示
してない)からアプリケーションサーバプロセス231
のメモリ空間内へ転送するためには、若干のコピーが必
要であることは理解されよう。ディスクデータ260に
接するアプリケーションに特定のデータ261を作成す
るには、典型的には、更に別のコピーが必要である。し
かしながら、上述したQIOシステムでは、多くのこれ
らのプロセッサ内コピーは必要とせず、プロセッサ間コ
ピーを全く不要にすることができる。
【0009】実際に、組合わされたデータ261、26
0は、別のプロセッサ間コピーによってノード211か
らノード212へ移送される。ノード212はその中間
プロトコルヘッダデータ262を、(多分データ26
2、261、及び260のコピーによって)中間プロト
コルプロセス232のメモリ内の単一のバッファ内へ付
加する。
【0010】組合わされたデータ261、260、26
0も、別のプロセッサ間コピーによってノード212か
らノード213へ移送される。TCP/IPプロセス2
33は、組合わされたデータ261、260、260を
TCP/IPパケットサイズに分割し、適切な点におい
てTCP/IPヘッダ263a、263b、、263n
を挿入することを望む。従って、TCP/IPプロセス
233は全ての、または少なくとも実質的に全ての組合
わされたデータ261、260、260及びTCP/I
Pヘッダデータ263a、263b、、263nをコピ
ーして断片化し、データを正しい順序でメモリ253内
に再構成する。(並行処理してシステム200の処理能
力を増加させる理由から、レイヤ化したプロトコルの処
理を別の副処理システム内へ分離することをシステム設
計者が望むかも知れない。)より大きい故障許容を達成
し、メモリが隘路になることを回避するために、このよ
うな副処理システムは、この型のシステムのメモリを共
用しない。この技術のコンピュータシステムは、副処理
システム間で5回、そして上述したようなQIOを実現
していない各副処理システム内で典型的には更に2−4
回にわたってディスクデータ260をコピーする必要が
ある。コンピュータシステム200は、プロセッサ間コ
ピーイングを実行しないシステムのレートの(最小で)
5倍のメモリ帯域幅を消費する。コピーイングはシステ
ム200の動作の潜在的な隘路になっており、I/O帯
域幅、メモリ帯域幅を浪費し、そしてターゲットCPU
内にキャッシュミスをもたらすが、これらは全て性能を
低下させるものである。
【0011】従って、データのプロセッサ間コピーイン
グを回避し、しかも共用メモリの隘路及び故障許容問題
を回避するシステムに対する要望が存在している。従っ
て、本発明の目的は、プロセッサ内及びプロセッサ間の
両方において、データの不要なコピーイングを排除した
コンピュータシステムを提供することである。本発明の
この目的及び他の目的は、以上の従来の技術の説明、及
び以下の詳細な説明から容易に明白になるであろう。
【0012】
【課題を解決するための手段】本発明の上記目的は、関
連メモリを有するCPUまたはI/Oコントローラの形
の複数のデータソース/シンクを含む分散型メモリアー
キテクチャを有し、ノードとしてネットワークに接続さ
れ、そしてデータ位置にはメモリアドレスによってネッ
トワーク中からアクセス可能であるようなデータ処理シ
ステムにおいて、複数のデータソース/シンクを使用し
てデータストリームを変換する方法であって、複数の各
データソース/シンクは変換処理中にデータストリーム
をコピーすることはせず、方法が、第1のデータソース
/シンクにおいて、第1のデータストリームが記憶され
ている第1の記憶位置を指定する第1のグローバルネッ
トワークアドレスを含む第1のポインタを生成する段階
と、第1のポインタだけを、第1のデータソース/シン
クから第2のデータソース/シンクまで転送する段階
と、第2のデータソース/シンクにおいて、第2のデー
タストリームが記憶されている第2の記憶位置を指定す
る第2のグローバルネットワークアドレスを含む第2の
ポインタを生成し、第1及び第2のポインタを連鎖させ
て第1の連鎖されたポインタを形成する段階と、第1の
連鎖されたポインタだけを、メッセージの第3のデータ
断片を記憶しメッセージを行先へ転送するようになって
いる第3のデータソース/シンクへ転送する段階と、第
3のデータソース/シンクにおいて、第1のポインタを
処理して第1のポインタを複数の副ポインタに変換して
第1のデータストリームを複数の部分に分割し、第1の
データストリームの各部分上にプロトコルヘッダを連鎖
させる段階とを備えている方法によって達成される。
【0013】本発明の方法では、第1、第2、第3、及
び第4のデータソース/シンクにおいてグローバルIO
待ち行列を作成する段階を更に備え、第1のポインタ
を、第1のデータソース/シンクから第2のデータソー
ス/シンクへ転送する段階が、第1のポインタを、第1
のデータソース/シンクのグローバルIO待ち行列内に
記憶する段階と、第1のポインタを、第1のデータソー
ス/シンクのグローバルIO待ち行列から第2のデータ
ソース/シンクのグローバルIO待ち行列へ待合わさ
せ、それにより第1のポインタだけを第2のノードにコ
ピーさせる段階とを備えるようにしてもよい。また、本
発明の上記目的は、関連メモリを有するCPUまたはI
/Oコントローラの形の複数のデータソース/シンクを
含む分散型メモリアーキテクチャを有し、ノードとして
ネットワークに接続され、そしてデータにはメモリアド
レスによってネットワーク中からアクセス可能であるよ
うなデータ処理システムにおいて、複数のデータソース
/シンクの第1のデータソース/シンク上のデータバッ
ファを指し示すディスクリプタを入手する段階と、ディ
スクリプタを、データバッファ内のデータを転送するこ
となく、複数のデータソース/シンクの第2のデータソ
ース/シンク上へ配置する段階と、ディスクリプタを、
第2のデータソース/シンクから複数のデータソース/
シンクの第3のデータソース/シンク上へ配置する段階
と、データバッファ内のデータの一部分を、第1のデー
タソース/シンクから第3のデータソース/シンクまで
検索し、データ入力または出力を遂行する段階とを備え
ている方法によって達成される。
【0014】本発明の方法では、ディスクリプタを、そ
の元のデータソース/シンクまで検索する段階と、ディ
スクリプタ及びそれが記述しているメモリ領域の割当て
を解除する段階とを更に備えていてもよい。更に、本発
明の上記目的は、関連メモリを有するCPUまたはI/
Oコントローラの形の複数のデータソース/シンクを含
む分散型メモリアーキテクチャを有し、ノードとしてネ
ットワークに接続され、そしてデータにはメモリアドレ
スによってネットワーク中からアクセス可能であるよう
なデータ処理システムにおいて、複数のデータソース/
シンクの第1のデータソース/シンク上のデータバッフ
ァを指し示すディスクリプタを入手する段階と、ディス
クリプタを、データバッファ内のデータを転送すること
なく、複数のデータソース/シンクの第2のデータソー
ス/シンク上へ配置する段階と、ディスクリプタを、複
数のディスクリプタに分割する段階と、複数のディスク
リプタの1つを、第2のデータソース/シンクから複数
のデータソース/シンクの第3のデータソース/シンク
上へ配置する段階と、1つのディスクリプタによって記
述されたデータバッファ内のデータの一部分を、第1の
データソース/シンクから第3のデータソース/シンク
まで検索し、データ入力または出力を遂行する段階とを
備えている方法によって達成される。
【0015】本発明の方法では、1つのディスクリプタ
を、その元のデータソース/シンクへ戻す段階と、1つ
のディスクリプタ及びそれが記述しているメモリ領域の
割当てを解除する段階とを更に備えていてもよい。本発
明の上記目的は、複数のデータソース/シンクの第1の
データソース/シンク上のデータバッファを指し示すデ
ィスクリプタを入手する段階と、ディスクリプタを、デ
ータバッファ内のデータを転送することなく、複数のデ
ータソース/シンクの第2のデータソース/シンク上へ
配置する段階と、ディスクリプタを、第2のデータソー
ス/シンクから複数のデータソース/シンクの第3のデ
ータソース/シンク上へ配置する段階と、データバッフ
ァ内のデータの一部分を、第1のデータソース/シンク
から第3のデータソース/シンクまで検索し、データ入
力または出力を実行する段階とによってCPUまたはI
/Oコントローラの形の複数のデータソース/シンクの
間でデータI/Oを実行するためのコンピュータプログ
ラムを記憶するデータストレージ用媒体によって達成さ
れる。
【0016】本発明の上記目的は、複数のデータソース
/シンクの第1のデータソース/シンク上のデータバッ
ファを指し示すディスクリプタを入手する段階と、ディ
スクリプタを、データバッファ内のデータを転送するこ
となく、複数のデータソース/シンクの第2のデータソ
ース/シンク上へ配置する段階と、ディスクリプタを、
複数のディスクリプタに分割する段階と、複数のディス
クリプタの1つを、第2のデータソース/シンクから複
数のデータソース/シンクの第3のデータソース/シン
ク上へ配置する段階と、1つのディスクリプタによって
記述されたデータバッファ内のデータの一部分を、第1
のデータソース/シンクから第3のデータソース/シン
クまで検索し、データ入力または出力を実行する段階と
によって、CPUまたはI/Oコントローラの形の複数
のデータソース/シンクの間でデータI/Oを実行する
ためのコンピュータプログラムを記憶するデータストレ
ージ用媒体によって達成される。
【0017】
【作用】一実施例において、分散型メモリアーキテクチ
ャを有する本発明のデータ処理システムは、CPUまた
はI/Oコントローラの形の複数のデータソース/シン
クを含む。これらのデータソース/シンクは、ネットワ
ークへのノードとして結合され、ネットワーク中からア
クセス可能なデータを有している。このアクセスによ
り、複数のデータソース/シンクの第1のデータソース
/シンク上のデータバッファへのディスクリプタを入手
し、データバッファ内のデータを転送することなくディ
スクリプタを複数のデータソース/シンクの第2のデー
タソース/シンク上へ配置し、ディスクリプタを第2の
データソース/シンクから複数のデータソース/シンク
の第3のデータソース/シンク上へ配置し、そしてデー
タバッファ内のデータの部分を第1のデータソース/シ
ンクから第3のデータソース/シンクまで検索する。
【0018】
【実施例】図3に、以下に参考文献として概述する 199
5 年6月7日付米国特許出願第 08/485,217 号によるデ
ータ処理システム10を示す。図3に示すように、デー
タ処理システム10は、同一の構造の2つの副処理シス
テム10A及び10Bからなっている。各副処理システ
ム10は、中央処理ユニット(CPU)12、ルータ1
4、及び複数の入力/出力(I/O)パケットインタフ
ェース16を含む。各I/Oパケットインタフェース1
6自体は、複数(n)のI/Oデバイス17及び保守プ
ロセッサ(MP)18に接続されている。CPU12、
ルータ14、及びI/Oパケットインタフェース16
は、信頼されたネットワーク(Tネット)リンクLによ
って相互接続されている。TリンクLは、副処理システ
ム10A及び10Bをも相互に接続しており、各副処理
システム10に他のI/Oデバイスへのアクセスと、C
PU間連絡を与える。処理システム10のどのCPU1
2も、他の何れのCPU12のメモリへもアクセスする
ことができるが、このアクセスには検証を受けなければ
ならない。
【0019】図3に(そして図4にも)示してあるよう
に、副処理システム10A/10Bは対にすることが好
ましい。情報は、メッセージ「パケット」を介して、処
理システム10の何れかの要素とシステムの何れかの他
の要素(例えば、副処理システム10AのCPU12
A)、及びシステムの何れかの他の要素(例えば、副処
理システム10BのI/Oパケットインタフェース16
Bに関連するI/Oデバイス)との間で連絡される。各
パケットは、データまたはコマンドを含むことができる
記号からなる。各ルータ14にはTネットポートが設け
られており、各ポートは実質的に同一の構造である(本
発明には重要ではない幾つかの箇所を除く)。図4で
は、各ルータ14A及び14Bの1つのポートを使用し
て対応する副処理システム10A及び10Bを付加的な
副処理システム10A’及び10B’に接続し、副処理
システム10のクラスタからなる処理システム10を形
成している。
【0020】ルータ14の設計、メッセージパケットを
経路指定するのに使用する方法、及びシステム10のト
ポロジを構成する時のルータの賢明な使用によって、図
3の処理システム10のどのCPU12も、他のどの副
処理システムの他のどの「エンドユニット」(例えば、
CPU及び/またはI/Oデバイス)にもアクセスする
ことができる。例えば、副処理システム10BのCPU
12Bは副処理システム10A”のI/O 16”にア
クセスでき、または副処理システム10AのCPU12
Aは副処理システム10BのCPU12B内に含まれる
メモリにアクセスしてデータを読み出し、または書き込
むことができる。この後者の活動は、CPU12A(副
処理システム10A’)が所望のアクセスを実行する許
可を有していなければならない。因みに、各CPU12
は、そのCPUのメモリへのアクセスを許可されている
各要素毎のエントリと、許容されるアクセスの型とを含
む表を維持している。
【0021】データ及びコマンドは、データ及びコマン
ド記号からなるパケットによって、種々のCPU12と
I/Oパケットインタフェース16との間で連絡され
る。CPU12は、何等かの外部構成要素との直接連絡
(I/Oパケットインタフェース16を介して、例えば
別のCPU12またはI/Oデバイス)から除外されて
いる。そうではなく、CPU12は、メモリ28内にデ
ータ構造を構成し、インタフェースユニット24(図
5)の制御を引き継ぐ。インタフェースユニット24
は、メモリからのデータ構造にアクセスし、また適切な
行先へデータ構造を伝送することができる直接メモリア
クセス(DMA)能力を有するように構成されたブロッ
ク転送エンジン(BTE)を含んでいる。処理システム
10の設計は、外部ソース(例えば、CPU12B及び
/またはI/Oデバイス)によってCPUのメモリ28
を読み出したり、メモリ28へ書き込んだりすることが
できるようになっている。この理由から、CPU12の
メモリ28の外部使用を許可制にするように注意を払わ
なければならない。
【0022】ムービーオンデマンドシナリオ 図6に、図3のコンピュータシステム100をより特定
化したバージョンを示す。図6のコンピュータシステム
500は、副処理システム510、511、512、及
び513を含んでいる。図6には示してないが、これら
の各副処理システム510、511、512、及び51
3は、実際には前述したように対にされた副処理システ
ムを含んでいる。また図6には示してないが、各副処理
システム510、511、512、及び513は、前述
したようにそれぞれのルータ14及びインタフェースユ
ニット24を含んでいる。図6には、副処理システム5
10、511、512、及び513を相互接続している
TネットリンクLが、Tネットネットワーク520から
のリンクLとして示されている。副処理システム51
0、511、512、及び513は、それぞれディスク
プロセス530、アプリケーションサーバプロセス53
1、中間プロトコルプロセス532、及びTCP/IP
及びATMドライバ533を走らせる。上述したよう
に、典型的なシステムでは、若干のプロセス530、5
31、532、及び533は対にされている副処理シス
テム内で走るバックアッププロセスを有している。図6
では、これらの対にされたプロセスは、それらの主プロ
セスによって代表されている。以下に概要説明するムー
ビー(映画)オンデマンドシナリオでは、アプリケーシ
ョンサーバプロセス531はTネット520を通してデ
ータ(例えば、映画のクリップ)に関するユーザの要求
を受け、そのデータのユーザへの転送を指令する。要求
されたデータは、一般的には、ディスクコントローラ5
40のようなディスクコントローラを介してのみアクセ
ス可能なディスク上に存在している。実際には、ディス
クコントローラ上のデータへのアクセスは、特定のディ
スクプロセスによって調停される。ここでは、副処理シ
ステム510上のディスクプロセス530がディスクコ
ントローラ540へのアクセスを調停する。ディスクプ
ロセス510は、ディスクコントローラ540に関連付
けられたディスクへの、及びディスクからのデータの転
送の責を負っている。(システム500は完全に故障許
容システムであるから、ディスクコントローラ540は
1対にされており、ディスクコントローラ540のディ
スクは典型的には鏡像化されている。システム500の
故障許容面も簡易化された図6には示していない。)ユ
ーザインタフェース及びアプリケーションサーバプロセ
ス531は、TCP/IP上に実現されているRPCプ
ロトコルを使用して連絡する。(ユーザインタフェース
は、アプリケーションプロセスであっても、または最小
のソフトウェアを有するハードウェアデータであっても
差し支えない。何れの場合も、ユーザインタフェースは
図示してない。)従って、アプリケーションサーバプロ
セス531からのメッセージにはRPCプロトコル情報
562を付加しなければならず、中間プロトコルプロセ
ス532はRPCプロトコルが要求した時に、このよう
なヘッダ情報562を結び付ける責任を有している。同
様に、アウトバウンドメッセージ上にTCP/IPプロ
トコル情報563をレイヤ化しなければならず、TCP
/IPプロトコルが要求すると、副処理システム513
内のTCP/IPドライバプロセス533がこのTCP
/IPヘッダ563を供給する。従って、要求があり次
第、ディスクコントローラ540に関連付けられたディ
スクからデータを転送するために、アプリケーションサ
ーバプロセス531はディスクプロセス530を使用し
てディスクからデータ260を検索し、また中間プロト
コルプロセス532及びTCP/IPATMドライバプ
ロセス533を使用してデータをユーザインタフェース
へ転送する。
【0023】更に、アプリケーションプロセス531は
その機能の中で、アウトバウンドデータの始めに、ある
アプリケーションに特定のデータ561を付加するもの
とする。この前置データは、例えばムービーの末尾空白
部分、良く知られた著作権警告、またテレビジョンモニ
タに接続されたビデオボックスに対するコマンドシーケ
ンスであることができる。要求中のユーザが使用するた
めにデータ560へのアクセスをディスクプロセス53
0が調停していることをアプリケーションサーバプロセ
ス531が認識すると、アプリケーションサーバプロセ
ス531はそのデータ560を検索するためにTネット
520を介してディスクプロセス530へメッセージを
送る。ディスクプロセス530はコマンドシーケンスを
作成し、ディスクコントローラ540はこのコマンドシ
ーケンスを受信すると、関心データを回復するための命
令として解釈する。しかしながら、データ560を副処
理システム510のメモリ550内へ、またはアプリケ
ーションサーバ副処理システム511のメモリ551内
へ転送するようにディスクコントローラに自動的に指令
するのではなく、命令シーケンスはデータ560をディ
スクプラッタからデータシンク内へ転送するようにディ
スクコントローラ540に指令する。
【0024】データシンク及びソース データシンク/ソース(“DSS”)は、データを記憶
し、要求があり次第データを転送することができるどの
ようなデバイスであっても、またはデバイスの一部であ
ってもよい。データをディスクプラッタからDSSへ移
動させることの直接的な利点は、DSSのアクセス時間
が殆ど確実に、ディスクプラッタからデータを検索する
ためのアクセス時間より優れていることである。DSS
は、多くのオプションの何れか、即ちディスクコントロ
ーラ540自体内に含ませることができるメモリ55
4、または副処理システム510、511、512、ま
たは513のそれぞれのメモリ550、551、55
2、または553の何れかであることができる。データ
シンクも、ATMコントローラ570がメモリを有して
いることを条件として、ATMコントローラ570のメ
モリ555であることができる。別のオプションは「グ
ローバルメモリ」と名付けた新しい型のDSSである。
グローバルメモリは、Tネット上の全ての連絡デバイス
が利用可能なDSSである(米国特許出願第 08/485,21
7 号に開示されているように、もしデバイスが十分な特
権を有していれば)。図6は、グローバルメモリ580
を有するグローバルメモリを示している。メモリ580
は、メモリ580へのアクセスを調停するソフトウェア
プロセスが存在せず、メモリ580が主メモリとして組
合わされるプロセッサが存在せず、そしてメモリ580
が副メモリとして組合わされる主メモリ(ディスクコン
トローラ540に関連付けられているディスクプラッタ
のような)が存在しないことからグローバルなのであ
る。
【0025】DSSの選択は、特定のアプリケーション
に依存する。設計のトレードオフによって、特定のシン
ク、シンクのクラス、またはある他のシンクのサブグル
ープを指定することができる。データを、ディスクコン
トローラ540のメモリ554内にではなく、グローバ
ルメモリ580内に配置することの主な利点は、グロー
バルメモリ580が提供する付加的なメモリまたはメモ
リ帯域幅が、等価の付加的なディスクコントローラより
も経済的であることである。同様に、グローバルメモリ
580の付加的なメモリ、またはメモリ帯域幅は、等価
の付加的な対にされた副処理システム(“SPS”)5
10のようなSPSよりも明らかに経済的である。グロ
ーバルメモリ580のようなグローバルメモリによっ
て、システム設計者はディスクコントローラ及びサブプ
ロセッサのスケーリングには関係なくメモリ容量及び帯
域幅をスケールすることができる。また、システム設計
者は、ディスクをそのメモリ内へ渡すSPSの性能に与
える負の衝撃を回避することができる。この負の衝撃
は、ディスクをSPSメモリ内へ渡す際に含まれるメモ
リキャッシュ無効化及びフラッシングに起因している。
【0026】データ560の行先が、データの元の要求
者(ここでは、アプリケーションサーバプロセス53
1)またはデータの最終的な要求者(ここでは、ディス
クプロセス530)の制御内にない場合には、問題が発
生する。その問題とは、誰がディスク560の行先を決
定したのか?である。多くのオプションが利用可能であ
る。第1のオプションでは、ディスクプロセス530は
システム500内の使用可能なグローバルメモリのどれ
か(例えば、グローバルメモリ580)を行先であると
決定し、データ560のための空間を整える。別のオプ
ションは、アプリケーションサーバプロセス530のた
めに、データ560を配置するが、ディスクプロセス5
30のために実際の空間割当てを残すようにする使用可
能なグローバルメモリのどれかを決定するものである。
このシナリオでは、アプリケーションサーバプロセス5
31はディスクプロセス530と選択したDSSのアイ
デンティティを連絡し、割当てが実行されなかったこと
を指示する。
【0027】最後のオプションとして、アプリケーショ
ンサーバプロセス531は、使用可能なデータシンクの
どれが行先であるかを決定した上で、その割当てを実行
する。割当てを実行し、グローバルポインタ(後述)に
よってその割当て情報をディスクプロセス530へ渡す
ことがアプリケーションサーバプロセス531の義務に
なり始める。これにより、ディスクプロセス530は、
要求されたデータの行先を選択する必要がないこと、及
び事前に割当てられた行先をそのディスクコマンドシー
ケンス内に組み込むことができることを知る。以上の説
明から明らかなのは、グローバルメモリ580のような
グローバルメモリは、そのメモリを管理するために十分
な知能を有していなければならないこと、または、その
ためにそのメモリを管理するプロセスの制御の下になけ
ればならないことである。この後者のシナリオは、ディ
スクコントローラ540に関連するディスクプラッタの
メモリを管理するディスクプロセス530に類似してい
る。前者は、それ自体のメモリ(例えば、メモリ55
0)を管理する副処理システム(例えば、副処理システ
ム510)に類似しており、この方が好ましい。
【0028】どのグローバルメモリDSSを使用するか
を、アプリケーションサーバプロセス531のようなア
プリケーションプロセスが決定できるようにしたことか
ら利点が得られる。アプリケーションプロセスは、その
メモリ要求が時間を超えているものであることを理解す
ることができる。アプリケーションプロセスは、例えば
グローバルメモリのプールのある部分集合を管理するた
めに探索し、若干のデータを事実上データキャッシュと
してそれらの中に保持できる。ビデオオンデマンド映画
アプリケーションサーバプロセス531は、システム内
において使用可能なグローバルメモリを、多くのハード
ウェアディスクにまたがって広がっている大きいキャッ
シュとして取り扱うことができる。実際に、要求が多い
ビデオをグローバルメモリ内に保持するようなクロスオ
ーバ点に到達できる方が、その映画をディスク上に保持
するよりは経済的である。
【0029】リファレンスによるデータI/O ディスクプラッタ上のデータ560を転送することを指
令するディスクコマンドシーケンスを受信するとディス
クコントローラ540は、データ560をディスクプラ
ッタから、選択されたDSS行先へ転送し、アプリケー
ションプロセス531とディスクプロセス530との間
に割当てる。ここでは、選択されたデータシンクがグロ
ーバルメモリ580であるものとする。グローバルメモ
リ580(または、ディスクコントローラ540)は、
指令されたデータ転送が成功裏に完了したことをディス
クプロセス530に通報する。ディスクプロセス530
自体は、要求されたデータがグローバルメモリ580内
に配置されたことをアプリケーションサーバプロセス5
31に通報する。ディスクプロセス530がデータ56
0の実際の行先を割当てた場合には、ディスクプロセス
530は、Tネット520上のデータ560のアドレス
を後述するグローバルポインタによってアプリケーショ
ンサーバプロセス531に連絡する。さて、グローバル
ポインタがデータ560を指し示し、それ自体のアプリ
ケーションに特定のデータ561がメモリ551内に存
在すると、典型的なアプリケーションサーバプロセス5
31は、データ561、560の2つの片をコピーして
単一のバッファ内に連結し、そのデータを中間プロトコ
ルプロセス532へコピー転送する。しかしながら本発
明によれば、アプリケーションサーバプロセス531は
そのようにはせず、データ560を指し示すグローバル
ポインタ及びそのアプリケーションに特定のデータ56
2を指し示す別のグローバルポインタを中間プロトコル
プロセス532に渡す。実際には、アプリケーションサ
ーバプロセス531は、物理的に隣接していないデータ
561、560のブロックを指し示すグローバルポイン
タを一緒に連鎖(チェーニング)することによって、論
理的に(即ち、仮想の)隣接したメモリのブロックを作
成する。(事実、データ561、560は、物理的に分
離したDSS内に位置していて物理的には隣接していな
い。)アプリケーションサーバプロセス531は、この
ポインタのチェーンを中間プロトコルプロセス532に
渡すのである。
【0030】中間プロトコルプロセス532自体は、デ
ータ561、560をそれ自体の関連メモリ552内へ
コピーすることを見合せる。その代わりに、プロセス5
32は、データ561、560を指し示す2つのグロー
バルポインタを、中間プロトコルヘッダデータ562を
指し示す第3のグローバルポインタと共に、TCP/I
Pプロセス533に渡す。それによって中間プロトコル
プロセス532は、データ561、560を検索するの
に必要なトランスネットワーク及びプロセッサ間のコピ
ーイングを回避している。プロセス532は、データを
ネットワークドライババッファから副処理シーケンス5
10のオペレーティングシステムへ、更に中間プロトコ
ルプロセス532のメモリ空間内へ移動させるのに必要
なコピーイングをも回避する。
【0031】TCP/IPプロトコルを処理するために
は、論理的に隣接するデータを伝送のためにパケットサ
イズ化したチャンク( chunk ) に分割し、各パケットに
はそれ自体のTCP/IPヘッダを前置する必要があ
る。TCP/IPプロセス533は、Tネットポインタ
のチェーンを処理する。チェーンを歩きながらTCP/
IPプロセス533は、論理的に隣接するデータ56
2、561、560内のデータの第1のパケットサイズ
のチャンクのためのTCP/IPヘッダ563aを作成
し、データ562、561、560内の第2のチャンク
のためのTCP/IPヘッダ563bを作成し、、デー
タ562、561、560内のデータの最後のチャンク
のための最後のN番目のTCP/IPヘッダ563nを
作成する。これらのTCP/IPヘッダはデータ56
2、561、560の間に挿入しなければならないか
ら、TCP/IPプロセス533はデータ562、56
1、560を指し示すグローバルポインタをTCP/I
Pパケットよりは大きくないデータを指し示す一連のポ
インタに変換しなければならない。各グローバルポイン
タは、その起点(オリジン)のDSSのアイデンティテ
ィのアドレス、及びそのアドレスに位置するデータのサ
イズを含んでいる。562、561、560を指し示す
グローバルポインタを、一連のパケットサイズのデータ
に変換することに関しては後述する。これによりTCP
/IPプロセス533は、データ562、561、56
0のパケットを指し示すこの新しい一連の変換されたグ
ローバルポインタを渡して、TCP/IPヘッダ563
a、563b、、563nを散在させることができるよ
うになる。
【0032】中間プロトコルデータ562、アプリケー
ションに特定のデータ561、及びディスクデータ56
0の第1の部分560’が一緒になって第1のパケット
を形成しているものとする。またディスクデータ560
の第2の部分560”が第2のパケットを構成している
ものとする。最後に、ディスクデータ560の最後の部
分560''' が伝送されるデータの最後のパケットを形
成しているものとする。TCP/IPプロセス533
は、TCP/IPヘッダデータ563a、中間プロトコ
ルヘッダデータ562、アプリケーションに特定のデー
タ561、ディスクデータ560’、TCP/IPヘッ
ダデータ563b、ディスクデータ560”、、TCP
/IPヘッダデータ563n、ディスクデータ56
0''' を指し示すグローバルポインタのチェーンをAT
Mコントローラ570へ渡す。
【0033】ATMコントローラ570のプログラミン
グ及びシステム500の動的な状態に依存する時点に、
ATMコントローラ570は、TCP/IPプロセス5
33から受信したグローバルポインタのチェーンを通っ
て歩き、実際のデータ563a、562、561、56
0’、563b、560”、、563n、560'''を
そのメモリ555内へ取り込む。ATMコントローラ5
70は、TCP/IPプロトコル副処理システム513
からTCP/IPヘッダデータ563a、563b、、
563nを、中間プロトコル副処理システム512のメ
モリ552から中間プロトコルヘッダ562を、アプリ
ケーションサーバ副処理システム511のメモリ551
からアプリケーションに特定のデータ561を、そして
グローバルメモリ580からディスクデータ560’、
560”、、及び560''' を取り込む。
【0034】要求されたデータの全てをその物理的メモ
リ内に有するATMコントローラ570はそれらのデー
タを伝送する。アプリケーションデータ561、中間プ
ロトコルヘッダデータ562、及びTCP/IPプロト
コルヘッダデータ563の各々のコピーイングが1回だ
け存在していることに注目されたい。ディスクデータは
2回コピーされているが、ディスクコントローラ540
からグローバルメモリ580へのデータ560のコピー
イングは厳密にいえば必要ではない。従来の技術によれ
ば、システム500と同一のハードウェア及びデータの
流れでは、アプリケーションデータ561は少なくとも
3回はコピーされ、中間プロトコルヘッダデータ562
は2回コピーされ、そしてディスクデータ560は6回
コピーされていた。ディスクデータ560が大きい(説
明しているムービーオンデマンドの場合のように)か、
または中間プロトコル副処理システムの数が大きいよう
な状況では、コピーイングの回数を減らすことは重大な
節約になる。これにより、このようなシステムが有して
いるメモリ隘路問題を伴うことなく、コストを共用メモ
リMPPシステムのそれに接近させることができる。
【0035】データ構造 本発明のリファレンスによるデータI/Oを達成するた
めに、好ましい実施例に使用されているデータ構造及び
プロトコルを以下に説明する。先ず、データシンク/ソ
ース(DSS)内のデータを指し示すリファレンスまた
はポインタが、ネットワークだけによってDSSに接続
されるデバイス上のプロセスを意味することができるよ
うにするために、ネットワークにまたがるDSSに特定
のアドレスを認識するための計画を実現しなければなら
ない。説明しているリファレンスによるデータI/O計
画では、これらのアドレスをグローバルアドレスと呼
ぶ。一実施例では、グローバルアドレスは、(1)ネッ
トワークDSSのID、(2)そのDSSによって認識
されるアドレスの組合わせである。ネットワークDSS
のIDは、ネットワーク内のDSSとして機能している
全てのデバイスの間で独自のものである。
【0036】この実施例では、特定のDSSによって認
識されるアドレスは、その特定のDSSのアドレス指定
計画に特定である。DSSは、仮想または物理的グロー
バルアドレスを維持することができる。例えば、ディス
クコントローラ540は、多分そのメモリ540に物理
的アドレスを維持している。グローバルアドレスが、あ
るプロセッサの仮想アドレス空間内に割当てられている
のか、またはオペレーティングシステムレベルグローバ
ルQIOドライバの実アドレス空間内に割当てられてい
るのかに依存して、副処理システムはアドレスを仮想空
間内に、または実空間内に維持することができる。グロ
ーバルアドレスをQIOドライバの実アドレス空間内に
維持すると、ハードウェア及びソフトウェアトランザク
ション費用が回避される。
【0037】グローバルアドレスは、ネットワークにさ
れたデバイス間で渡されるグローバルQIOデータ構造
内に組み込まれる。一実施例では、主グローバルQIO
データ構造は、待ち行列、メッセージ、メッセージディ
スクリプタ、及びバッファディスクリプタである。図7
に、本発明の実施例によるグローバルQIO待ち行列6
00を示す。待ち行列600は、ネットワーク上の各D
SSのメモリ内に存在する。待ち行列600は、型60
1、人が読むことができる待ち行列名602、最初のメ
ッセージポインタ604、最後のメッセージポインタ6
06、メッセージカウント608、待ち行列属性61
0、作成者プロセスID 612、ユーザが限定した
「()入手」機能を指し示すポインタ614、ユーザが
限定した「()配置」機能を指し示すポインタ616、
及びユーザが限定した制御ブロックを指し示すポインタ
618を含んでいる。
【0038】ディスクリプタの型601は、このデータ
構造が待ち行列であることを指示する。待ち行列名60
2は、例えば「インバウンドグローバルQIO」のよう
な待ち行列名である。最初のメッセージポインタ604
は、二重にリンクされたメッセージ620のリスト内の
最初のメッセージの最初のメッセージディスクリプタ6
22を指し示し、最後のメッセージポインタ606は、
二重にリンクされたメッセージ620のリスト内の最後
のメッセージの最初のメッセージディスクリプタ624
を指し示す。メッセージカウント608は、二重にリン
クされたリスト620内のメッセージの数を保持する。
待ち行列属性610は、待ち行列の属性、例えばそのイ
ンバウンド待ち行列上にデータが配置された時にプロセ
スを目覚めさせるべきかどうか、及びグローバルQIO
ライブラリ「()メッセージ入手」機能の前に、後に、
またはその代わりにユーザが限定した「()入手」機能
を呼出すかどうか、を含む。(グローバルQIOライブ
ラリ機能に関しては後述する。)作成者プロセスID6
12は、その待ち行列を作り出したプロセスのIDであ
る。グローバルQIOライブラリは、ある待ち行列が空
でなくなった時にこのプロセスを目覚めさせることがで
きる。
【0039】ポインタ614は、あるプロセスがその待
ち行列600からあるメッセージを入手するためにグロ
ーバルQIOライブラリ「メッセージ()入手」機能を
呼出すと実行されるユーザが限定した「()入手」機能
を指し示す。ユーザが限定した「()入手」機能によ
り、グローバルQIOライブラリにおける標準「入手」
機能に加えて、またはそれの代わりに、ユーザが限定し
た機能を実行させることが可能になる。例えば、もし待
ち行列600がI/Oドライバのためのインバウンド待
ち行列であれば、ユーザが限定した「()入手」機能は
そのドライバによってI/O動作を開始することができ
る。ドライバは多くの未解決I/Oを追跡することも、
また「入手」が実行された時にこの数を調整することも
できる。別の例として、「()入手」は、その待ち行列
を作り出したプロセスによって準備(ハウスキーピン
グ)ルーチンを実行させることができる。
【0040】ポインタ616は、ポインタ614の機能
と並行する手法で処理されるユーザが限定した「()配
置」機能を指し示す。例えば、LANドライバに関連す
る待ち行列では、「()配置」機能は移送レイヤルーチ
ンを呼出して情報をTネット520へ出力することがで
きる。ポインタ618は、ユーザが限定した制御ブロッ
クを指し示す。典型的には、この制御ブロックは、ユー
ザが限定した「()配置」及び「()入手」機能の一方
または両方によって必要とされる。例えば、制御ブロッ
クは、情報が待ち行列システムに送られる時に情報を出
力するドライバのためのものであってよい。図8に、図
7の二重にリンクされたリスト620内に記憶されてい
るメッセージ700のフォーマットを示す。メッセージ
は、リンクされたメッセージディスクリプタからなり、
図7のリスト620内へリンクされる。図8は、リンク
されたリスト内にポインタ714によって結合されてメ
ッセージを形成するメッセージディスクリプタ622及
び622’を示している。メッセージディスクリプタ
は、ディスクリプタ型704、次のメッセージポインタ
710、先行メッセージポインタ712、継続メッセー
ジのメッセージディスクリプタポインタ714、バッフ
ァディスクリプタポインタ716、ユーザデータ読み出
しポインタ718、ユーザデータ書き込みポインタ72
0、及び戻り待ち行列ポインタ722を含む。メッセー
ジディスクリプタは、ポインタ718、720にそれぞ
れ関連する長さ719、721をも含む。
【0041】図8においては、メッセージディスクリプ
タ622及び622’が単一のメッセージを形成してい
る。ディスクリプタ型704は、データ構造がメッセー
ジディスクリプタであることを指示する。次のメッセー
ジポインタ710は、二重にリンクされたリスト620
内に記憶されている次のメッセージの最初のメッセージ
ディスクリプタ624を指し示す。先行メッセージポイ
ンタ712は、二重にリンクされたリスト620内に記
憶されている先行メッセージの最初のメッセージディス
クリプタを指し示す。継続メッセージのメッセージディ
スクリプタポインタ714は、現メッセージ内の次のメ
ッセージディスクリプタ622を指し示す。分散したデ
ータを表すには複数のメッセージディスクリプタが必要
であり、以下に説明するように単一のメッセージは、異
なる位置にあるデータを指し示す複数のメッセージディ
スクリプタを含むことができる。バッファディスクリプ
タポインタ716は、バッファディスクリプタ730を
指し示す。バッファディスクリプタ730はデータバッ
ファ740を指し示す。
【0042】ユーザデータ読み出しポインタ718はバ
ッファ740を指し示すポインタであり、データバッフ
ァ740において読み出しを開始すべき(または、停止
した)ことを指示する。同様に、ユーザデータ書き込み
ポインタ720はバッファ740を指し示すポインタで
あり、データバッファ740において書き込みを開始す
べき(または、停止した)ことを指示する。長さ71
9、721はそれぞれ、読み出しポインタ718から読
み出し、または書き込みポインタ720へ書き込むこと
ができるデータの最大量を指示する。戻り待ち行列ポイ
ンタ722は、戻り待ち行列(図示してない)を指し示
す。グローバルQIOライブラリルーチンを介してメッ
セージディスクリプタが戻された時(即ち、メッセージ
の処理が完了した時)戻されたメッセージディスクリプ
タは、もし戻り待ち行列が指定されていれば、戻り待ち
行列上に配置される。例えば、プロセスは送ったメッセ
ージをカウントする必要があるかも知れない。待ち行列
600から除かれた時にメッセージディスクリプタ62
2を自由メッセージプール内へ配置する代わりに、ある
プロセスによるさらなる処理のために、メッセージディ
スクリプタ622は戻り待ち行列上に配置される。メッ
セージ700内の他のメッセージディスクリプタ62
2’は、異なる副戻り待ち行列ポインタ722’、また
は「空」(ヌル)戻り待ち行列ポインタを有することが
できる。これらの副戻り待ち行列ポインタは、直ぐにア
プリケーションに従ってプロセスによって処理される。
メッセージディスクリプタのための戻り待ち行列は通常
は、その現在の使用のためにメッセージディスクリプタ
を始めに割当てたDSS上にある。
【0043】図9に、本発明の実施例によるバッファデ
ィスクリプタ730のフォーマットを示す。バッファデ
ィスクリプタ730は、図8のメッセージ700の一部
である。ディスクリプタ型802は、データ構造がバッ
ファディスクリプタであることを指示する。バッファデ
ィスクリプタ730は、データバッファベースポインタ
808、データバッファ限界ポインタ810、及びリフ
ァレンスカウント812を含む。データバッファベース
ポインタ808は、メモリ内のデータバッファ840の
ベースを指し示す。データバッファ限界ポインタ810
は、データバッファ840の終わりを指し示す。リファ
レンスカウント812は、特定のバッファディスクリプ
タ730を指し示すバッファディスクリプタポインタ7
16の数をカウントする。
【0044】待ち行列600は、それを作成したDSS
に対してローカルである。待ち行列600データ構造
は、別のネットワークされたDSSとは連絡しない。従
って、各ポインタ604、606、614、616、及
び618は、グローバルアドレスではなく、ローカルア
ドレスである。しかしながら、メッセージディスクリプ
タ622はネットワークされたDSSの間に渡される。
従って、バッファディスクリプタポインタ716、及び
ユーザデータ読み出しポインタ718及び書き込みポイ
ンタ720は、それらを生成したDSSによって解釈さ
れるグローバルポインタである。当分野に精通していれ
ば理解されるように、メッセージディスクリプタ622
がネットワークされたデバイス間で連絡される場合、メ
ッセージディスクリプタ622の若干のフィールドを省
略することができる。これらのフィールドは、例えば、
次のメッセージポインタ710、先行メッセージポイン
タ712、及び継続メッセージのメッセージディスクリ
プタポインタ714を含む。受信中のネットワークされ
たデバイス上のグローバルQIOライブラリは、待ち行
列上のメッセージにメッセージディスクリプタを配置す
る際にこれらのフィールドを生成することができる。こ
れらのフィールドを有していないメッセージディスクリ
プタを、メッセージディスクリプタのグローバル形と名
付け、型704はこれらの省略を反映するように変更す
ることができる。
【0045】反対に、DSS間で連絡する時に、バッフ
ァディスクリプタポインタ716、データ読み出しポイ
ンタ718、書き込みポインタ720、対応する長さフ
ィールド719、721、戻り待ち行列ポインタ72
2、及び検査合計724をメッセージディスクリプタ6
22のグローバル形に含ませる。バッファディスクリプ
タ730は、ネットワークにまたがって連絡されること
はない。データバッファベースポインタ808は、デー
タバッファ740の読み出しまたは書き込みには無関係
である。読み出し及び書き込みポインタは、メッセージ
ディスクリプタ622のユーザデータ読み出しポインタ
718及び書き込みポインタ720内に供給される。同
様に、データバッファ限界ポインタ812は、ネットワ
ークにまたがるバッファの読み出し及び書き込みには無
関係である。以下に説明するプロトコルに従って、完全
挙動の読み出しまたは書き込みプロセスは、指定された
長さのデータバッファ740を要求し、そのデータバッ
ファ740の完全挙動のアロケータはユーザデータ読み
出しポインタ718または書き込みポインタ720が少
なくとも指定された長さであるデータバッファ740の
セグメントを指し示すことを保証する。(指定された長
さがメッセージディスクリプタのチェーンにまたがって
分散している場合には、完全挙動のアロケータはユーザ
データ読み出しポインタのチェーンが、一緒になって少
なくとも指定された長さであるデータバッファ740の
セグメントを指し示すことを保証する。)
【0046】プロトコル メッセージをベースとする連絡 システム500の何れか2つの構成要素間(例えば、第
1のSPSと第2のSPSとの間、またはSPSとグロ
ーバルメモリとの間)の連絡は、パケット内に含まれる
低レベルメモリを形成して伝送することによって実現さ
れる。(低レベルメモリは、説明中のグローバルQIO
システムのメモリとは異なる。)これらのパケットは、
システムエリアネットワーク構造、即ちTネット520
によって送信(またはソース)構成要素から行先構成要
素まで伝送される。システム構成要素、即ち、ルータ1
4及びインタフェースユニット24(BTE DMAエ
ンジンを含む)が、どのように共働してこの連絡を達成
するかは、米国特許出願第 08/485,217 号に詳細開示さ
れている。本明細書では、読み出し要求を伝送するには
HACパケットが使用され、書き込みデータの連絡には
HADCパケットが使用されることを知れば十分であ
る。
【0047】グローバルQIO グローバルQIOライブラリは、以下のソフトウェアエ
ントリ点を含む。各エントリ点に関しては後述する。 * グローバルQIO待ち行列作成 * グローバルQIO待ち行列削除 * メッセージディスクリプタ入手 * メッセージディスクリプタ複製 * メッセージ戻し * メッセージ複製 * グローバルQIO待ち行列からメッセージを入手 * グローバルQIO待ち行列上へメッセージを配置 プロセスは、「待ち行列()作成」手順を呼出し、グロ
ーバルQIOライブラリを有する名付けられた待ち行列
を登録し、インバウンド及びアウトバウンド待ち行列を
作成する。従って、呼出しプロセスはポートの名前を渡
し、「待ち行列()作成」ルーチンはそのポートのため
のインバウンド及びアウトバウンド待ち行列の待ち行列
ID、及びモジュールIDを戻す。プロセスが「待ち行
列()作成」ルーチンの呼出しに成功すると、プロセス
は次に「メッセージ()配置」ルーチン及び「メッセー
ジ()入手」ルーチン(何れも後述)を呼出す。相応し
て、プロセスは「待ち行列()削除」グローバルQIO
ライブラリルーチンを呼出すことができる。この機能
は、グローバルQIOライブラリから登録を抹消する。
プロセスは、インバウンド及びアウトバウンド待ち行列
の待ち行列IDを登録抹消するように渡す。登録を抹消
した後は、プロセスは最早、識別されていない待ち行列
を介して、アウトバウンドメッセージを送ったり、また
はインバウンドメッセージを受けたりすることはできな
い。「メッセージ()配置」ルーチンは、指定されたメ
ッセージを指定された待ち行列上へ配置する。メッセー
ジ及び待ち行列が同一のDSS上にある場合には、「メ
ッセージ()配置」は殆ど付録Aに記載されているよう
に動作する。メッセージ及び待ち行列が同一のDSS上
にない場合には、低レベルメッセージパケットシステム
が呼出され、指定されたメッセージのグローバル形をメ
ッセージのDSSから待ち行列のDSSへ転送する。メ
ッセージは始めのDSS上で自由になる。
【0048】「メッセージディスクリプタ()入手」エ
ントリ点は、(少なくとも)指定された長さのデータバ
ッファを指し示すデータバッファポインタを含む、メッ
セージディスクリプタを指し示すポインタを戻す。従っ
て、「メッセージディスクリプタ()入手」エントリ点
は、引き数としてモジュールID及びデータバッファ長
を取り、ポインタをメッセージディスクリプタへ戻す。
実際には、「メッセージディスクリプタ()入手」を呼
出しているDSSまたはプロセスはグローバルQIOラ
イブラリを要求し、指定された長さのデータバッファを
割当て、新たに割当てられたデータバッファへの点に初
期化されたバッファディスクリプタを割当て、そして新
たに割当てられたバッファディスクリプタへの点と、デ
ータバッファ内の書き込み位置への点とに初期化された
メッセージディスクリプタを割当てる。
【0049】(現在使用されているデータバッファが、
その後の「メッセージディスクリプタ()入手」要求を
満足するのに十分に大きい未割当て部分を有している場
合には、そのデータバッファのその(未割当て部分)を
使用して、その多分関係のない「メッセージディスクリ
プタ()入手」要求を満足させることができる。) 好ましい実施例では、自由メッセージディスクリプタ
は、自由メッセージディスクリプタリスト上に維持され
ている。このような自由リストの管理は公知である。
「メッセージディスクリプタ()複製」ルーチンは、指
定されたメッセージディスクリプタの複製を戻す。従っ
て、「メッセージディスクリプタ()複製」ルーチン
は、引き数としてモジュールIDと、メッセージディス
クリプタを指し示すポインタとを取ってメッセージディ
スクリプタを指し示すポインタを戻す。戻されたメッセ
ージディスクリプタは、指定された始めのメッセージデ
ィスクリプタと同じバッファディスクリプタ及びデータ
を指し示し、そのバッファディスクリプタのリファレン
スカウントを、複製による1だけ増加させる。複製メッ
セージディスクリプタは自由メッセージディスクリプタ
リストから入手される。
【0050】基礎となるバッファディスクリプタのリフ
ァレンスカウントは更新しなければならない。この更新
は、メッセージディスクリプタの原点であるDSSにリ
ファレンスカウントを更新するように要求することによ
って、またはメッセージディスクリプタをその原点のD
SS上へ戻して配置し、そのDSSにメッセージディス
クリプタを複製し、元に戻して配置し、そして複製する
ことによって達成することができる。グローバルQIO
ライブラリは、対応する「メッセージディスクリプ
タ()戻し」ルーチンを含んでいる。このルーチンは、
呼出し中のDSS上のメッセージディスクリプタを(そ
のメッセージディスクリプタを現在の使用のために始め
に割当てた)DSS上のメッセージディスクリプタの自
由リストへ移動させる。しかしながら、もしそのメッセ
ージディスクリプタの戻り待ち行列ポインタが「空」で
なければ、ルーチンはそのメッセージディスクリプタを
指示された戻り待ち行列へ戻す。「メッセージディスク
リプタ()戻し」ルーチンは引き数として、モジュール
IDと、戻すべきメッセージディスクリプタを指し示す
ポインタとを取る。
【0051】発信DSS上では、バッファディスクリプ
タのリファレンスカウントが1だけデクレメントされ
る。それは、1つ少ないメッセージディスクリプタがそ
のバッファディスクリプタを指し示しているからであ
る。もしリファレンスカウントが0に達していれば、デ
ータバッファディスクリプタは自由データバッファのプ
ールへ戻される。(以下の「データバッファ()戻り」
をリファレンスされたい。) 「メッセージ()戻し」ルーチンは、「メッセージディ
スクリプタ戻し」ルーチンの再帰的バージョンである。
「メッセージ戻し」は、識別されたメッセージディスク
リプタが先頭に立っているメッセージディスクリプタの
チェーンを歩き、ヘッドメッセージディスクリプタを何
れかの継続メッセージディスクリプタからアンリンクし
(即ち、ヘッドメッセージディスクリプタの継続メッセ
ージのメッセージディスクリプタポインタを空にし)、
継続メッセージのメッセージディスクリプタがそれ以上
存在しなくなるまでヘッドメッセージディスクリプタを
適切な戻り待ち行列へ戻す。
【0052】「メッセージ()複製」ルーチンは、メッ
セージ全体を複製する。「メッセージ複製」は引き数と
してモジュールIDと、メッセージのヘッドメッセージ
ディスクリプタを指し示すポインタとを取り、複製メッ
セージ構造のヘッドメッセージディスクリプタを指し示
すポインタを戻す。メッセージ全体は、元のメッセージ
のヘッドメッセージディスクリプタから開始し、それに
続く継続メッセージのメッセージディスクリプタポイン
タによって連鎖されている全てのメッセージディスクリ
プタが複製される(但し、データを除く)。メッセージ
ディスクリプタの複製を考慮して、各元のメッセージデ
ィスクリプタによって指し示されるバッファディスクリ
プタのリファレンスカウントが1だけインクリメントさ
れる。プロセッサ内シナリオにおけるQIOライブラリ
に関する仕様書である付録Aを読めば、これらのユニプ
ロセッサQIOルーチンのグローバルQIOライブラリ
への適用、及び付録Aに詳細記述されている実施例を組
み込むためのグローバルQIO計画の延長は、ルーティ
ニアにも容易に理解されよう。詳しく述べれば付録A
は、ドライバの登録及び登録抹消、メッセージディスク
リプタの入手及び複製、メッセージまたはメッセージデ
ィスクリプタの戻し、メッセージの複製、及びメッセー
ジの待ち行列からの入手及び該待ち行列上への配置に関
する付加的な詳細を提供している。付録Aは、ドライバ
情報の入手、ある事象のポスティング、モジュールID
の作成及び削除、あるモジュールの限界の設定、プール
の入手及び配置、ある待ち行列内のメッセージディスク
リプタのカウンティング、待ち行列の作成及び削除、セ
グメントの取付け、IOPRM空間の入手、及びIOP
RM空間の戻しに関する詳細をも提供している。
【0053】メッセージディスクリプタ目的 別のプロトコルはメッセージディスクリプタの特徴付け
を含む。一実施例では、目的向きプログラミングの点か
ら、メッセージディスクリプタのグローバル形が目的で
ある。目的の操作には、所定の機能、方法(C++語で
の)、またはインタフェース(COM/OLE語での)
だけが使用できる。メッセージディスクリプタ及びそれ
らが含むグローバルポインタへのアクセスを制限するこ
とは、Tネット中のメモリの変造に対する付加的な安全
尺度である。一実施例では、メッセージまたはメッセー
ジディスクリプタを操作するのに次の機能が使用可能で
ある。 * メッセージによって指し示されているデータのサイ
ズを戻す(「メッセージサイズ()戻し)」、 * メッセージディスクリプタによって指し示されてい
るデータのサイズを戻す(「メッセージディスクリプタ
サイズ()戻し)」、 * メッセージディスクリプタを複数のメッセージディ
スクリプタに分割する(「メッセージディスクリプ
タ()分割」) 「メッセージディスクリプタ()分割」は、引き数とし
てメッセージディスクリプタ及びデータバッファサイズ
のアレイまたはリストを取る。ルーチンは、同一バッフ
ァディスクリプタを有しているがデータバッファサイズ
によって指定されたオフセット及び長さを有している新
たに割当てられたメッセージディスクリプタのアレイま
たはリストを戻す。これらの新たに割当てられたメッセ
ージディスクリプタは、ユーザによって与えられた仕様
に適合するように調整されたユーザデータ読み出しポイ
ンタ及び長さを用いて「メッセージディスクリプタ()
複製」を分離して呼出した結果である。従って元の、及
び全ての複製メッセージディスクリプタは同一の構成要
素バッファディスクリプタを有し、この構成要素バッフ
ァディスクリプタのリファレンスカウントは相応して影
響を受けている。
【0054】例えば、もしmd ptrが 100KBのデ
ータのためのメッセージディスクリプタであるものとす
れば、呼出し、「メッセージディスクリプタ(md p
tr,15, 50, 35, 0 )分割」は、3つのメッセージデ
ィスクリプタのアレイを戻す。第1のメッセージディス
クリプタはデータの最初の 15 バイトを指し示すユーザ
読み出しデータポインタを有し、第2のメッセージディ
スクリプタはデータの次の 50 バイトを指し示すユーザ
読み出しデータポインタを有し、そして第3のメッセー
ジディスクリプタはデータバッファの最後の 35 バイト
を指し示すユーザ読み出しデータポインタを有してい
る。勿論、関連長さフィールドは相応にセットされてい
る。4つのメッセージディスクリプタは全て同一のデー
タバッファを指し示しているので、バッファディスクリ
プタのリファレンスカウントは3だけ、例えば1から4
へインクリメントされる。
【0055】最後に、「()読み出しのための変換」ル
ーチンが設けられており、指定されたメッセージディス
クリプタ内のグローバルポインタによって指し示されて
いる実際のデータを読み出すために、指定されたメッセ
ージディスクリプタを、呼出しDSSのルータ、インタ
フェースユニット、及びBTEが必要とするどのような
形にも変換して戻すようになっている。データは原点の
DSSから、ルーチンの呼者であるDSS内へ読み出さ
れる(対応する「()書き込みのための変換」ルーチン
が存在することができる。)
【0056】再びムービーオンデマンドシナリオ 先に説明したムービーオンデマンドシナリオにおいて説
明したデータ構造及びプロトコルの使用を以下に説明す
る。グローバルQIOデータ構造を1つのDSSから別
のDSSへ移動させるとすれば、前述した低レベルのメ
ッセージをベースとする連絡システムを使用してそのデ
ータ構造をDSS間で(典型的には「メッセージ()配
置」を使用して)連絡することは直ちに理解されよう。
再び、アプリケーションサーバプロセス531が、ディ
スクからデータ560を検索するためにディスクプロセ
ス530を使用し、データ560をユーザインタフェー
スへ転送するために中間プロセス532及びTCP/I
P及びATMドライバプロセス533を使用するものと
する。また、アプリケーションプロセス531は、ある
アプリケーションに特定のデータ561をアウトバウン
ドデータ560の始めに付加するものとする。データ5
60のサイズは、例えば 100キロバイト(KB)であ
る。リファレンスによるデータI/O計画に関与してい
る各DSSは、グローバルQIOライブラリを有してい
る。グローバルI/Oメモリ580、ディスクプロセス
SPS 510、アプリケーションサーバプロセス51
1、中間プロトコルプロセスSPS 512、TCP/
IP及びATMドライバSPS 513、及びATMコ
ントローラ570は、各々その関与グローバルQIOラ
イブラリの「待ち行列()作成」ルーチンを呼出し、受
信グローバルQIOメモリのためのインバウンド待ち行
列を作成する。このサービスは、例えば各DSS上の
「データ I/O」と名付けられる。これにより、リファ
レンスによるデータI/Oに関与しているTネット上の
どのDSSも、これもリファレンスによるデータI/O
に関与しているTネット上の他のどのDSSのQIO待
ち行列をも操作することができる。
【0057】更に、ディスクプロセス530は、そのグ
ローバルQIOライブラリルーチン「待ち行列()作
成」を呼出して受信ディスクワーク( diskwork )要求の
ためのインバウンド及びアウトバウンド待ち行列を作成
する。このサービスを、例えば「ディスクワーク」と名
付ける。これによりディスクプロセスSPS 510上
の他のどのプロセスも、及びTネット上のどのDSS
も、ディスクプロセス530に待ち行列ワーク要求を指
令して、ディスクコントローラ540に関連しているデ
ィスクを読み出し、またはディスクへ書き込むことが可
能になる。ディスクプロセス530が作成したグローバ
ルQIO待ち行列を使用するために探索中のプロセスま
たはDSSは、グローバルQIOの「ディスクワーク」
名を知る。アプリケーションサーバプロセス531は、
ディスクワーク要求をインバウンド「ディスクワーク」
グローバルQIO待ち行列上で待合わせることによっ
て、最終的にディスクプロセス530のワーク要求を作
る。このワーク要求はデータ560のためのものであ
る。しかしながら、アプリケーションサーバプロセス5
31は、先ず、データ560を受信するためにそれ自
体、またはディスクプロセス530の何れをデータバッ
ファに割当てるのかを決定する。
【0058】一方、もしアプリケーションプロセス53
1がデータバッファに割当てられていれば、アプリケー
ションプロセス531は、例えばグローバルI/Oメモ
リ580上に 100KBのデータ560を配置することを
決定する(プログラマがどのような規則を設けようと
も)。アプリケーションプロセス531は、グローバル
I/Oメモリ580の「データ I/O」グローバルQ
IO待ち行列上でのグローバルI/Oメモリ580の
「メッセージディスクリプタ()入手」の実行要求を待
合わせるために、その「メッセージ()配置」を実行す
る。それによってアプリケーションプロセス531は、
グローバルI/Oメモリメッセージディスクリプタを 1
00KBサイズのバッファに要求する。グローバルI/O
メモリ580の「データ I/O」ドライバは、「メッ
セージ()入手」を実行してアプリケーションプロセス
531の要求を検索し、最終的には「メッセージディス
クリプタ()入手」を実行して要求された割当てを実行
する。アプリケーションサーバプロセス531の要求を
完了させると、グローバルI/Oメモリ580の「デー
タ I/O」ドライバは、「メッセージ()配置」を実
行して 100KBバッファを指し示す新たに割振られたメ
ッセージディスクリプタを戻す。「メッセージ()配
置」は、メッセージディスクリプタ(のグローバル形)
のコピーをインバウンド「データ I/O」グローバル
QIO待ち行列上へ配置する。アプリケーションプロセ
ス531は、「メッセージ入手」を実行して新たに割当
てられたメッセージディスクリプタのコピーを検索し、
次いでデータバッファを指し示すユーザデータ書き込み
グローバルポインタを、データ560のためのそのワー
ク要求内に組み込むことができる。このワーク要求はデ
ィスクプロセス530へ伝送される。
【0059】簿記に関していえば、複数のDSSにまた
がって実行される「メッセージ()配置」は、メッセー
ジのコピー(のグローバル形)を受信DSSへ送って
「メッセージ()戻し」を実行することを呼出しDSS
に要求する。受信DSS自体は、メッセージディスクリ
プタを割当てて送信されたコピーを受信し、メッセージ
ディスクリプタを行先グローバルQIO待ち行列上に配
置する。実際には、メッセージディスクリプタは送信D
SS上の待ち行列から受信DSS上の待ち行列へ移動さ
れる。従って、新しいメッセージのバッファディスクリ
プタのためのリファレンスカウントは、それらが送信D
SS上にあった時と同一、即ち1である。同様にして、
「メッセージディスクリプタ()入手」呼出しによって
割当てられたメッセージディスクリプタは、グローバル
I/Oメモリ580からアプリケーションサーバプロセ
スSPS 511へ転送される。そのメモリディスクリ
プタのバッファディスクリプタのリファレンスカウント
も1である。
【0060】一方、もしディスクプロセス530がバッ
ファを割当てるのであれば、アプリケーションプロセス
531は、メッセージパケット型またはワーク要求デー
タ構造の何れかであることができ、ディスクプロセス5
30がその等価手順を使用してデータバッファを割当て
るものであることを指示する。アプリケーションプロセ
ス531は、例えば、「空」または0のような所定の値
を指し示すグローバルTネットポインタによって、バッ
ファを割当てるようにディスクプロセス530に指令す
ることができる。データ560の行先のためのグローバ
ルアドレスを含むメッセージディスクリプタを用いて、
ディスクプロセス530はディスクコントローラ540
に、データ560をディスクコントローラ540のディ
スクプラッタからグローバルI/Oメモリ580のメモ
リ556へ転送するように命令する。ディスクコントロ
ーラ540からグローバルI/Oメモリ580へのデー
タ560の転送は、リファレンスによるデータI/Oで
はない。データ560は、必要に応じてHDACパケッ
トを使用してディスクコントローラ540からグローバ
ルI/Oメモリ580へ実際にコピーされる。転送の結
果としてデータ560のコピーは、転送以前に存在して
いたよりも1つ多くなる。普通のデータ転送では、ディ
スクプロセス530がグローバルポインタをリファレン
スせず(デレファレンス)に実際のアドレスを発生し、
次いでディスクプロセス530がディスクコントローラ
540へのコマンドシーケンス内にアドレスを組み込
み、ディスクコントローラ540がデータ560をグロ
ーバルI/Oメモリ580へ転送できるようにする必要
がある。この再リファレンスは、上述した「()書き込
みのための変換」によって実行される。
【0061】転送が完了するとディスクコントローラ5
80は、ディスクプロセス530(好ましくはメッセー
ジをベースとする手法で)に割り込む。ディスクプロセ
ス530は割り込みを処理し、もし必要ならばデータ5
60(を含むデータバッファ)へのグローバルアドレス
を含むアプリケーションサーバプロセス531のグロー
バルQIO待ち行列へ戻す応答を待合わせることによっ
て、アプリケーションサーバプロセス531へ戻す要求
を完了させる。これでアプリケーションサーバプロセス
531は、データ560を有するバッファをグローバル
アドレスによって指し示すバッファディスクリプタを含
むメッセージディスクリプタを有することになる。この
グローバルポインタはグローバルI/Oメモリ580上
で作成されたものであり、データ560はグローバルI
/Oメモリ580内に存在しているが、メモリディスク
リプタ自体はアプリケーションサーバSPS 511上
にある。
【0062】アプリケーションサーバ531は、そのア
プリケーションに特定のデータのためのメッセージディ
スクリプタを作成するために、先にその「メッセージデ
ィスクリプタ()入手」ルーチンを呼出し、そして関連
データバッファをアプリケーションに特定のデータ56
1で充填するために必要に応じてその処理を実行してい
る。それによりアプリケーションサーバプロセス531
は、2つのメッセージディスクリプタを一緒に連鎖させ
ることによってデータ561、560を結合している。
これらのメッセージディスクリプタは、チェーンのヘッ
ドのアプリケーションに特定のデータ561のためのメ
ッセージディスクリプタ、及びそれに続くデータ560
のためのメッセージディスクリプタである。アプリケー
ションに特定のデータメッセージディスクリプタは、ア
プリケーションに特定のデータ561のグローバルアド
レスを含んでいる。
【0063】アプリケーションサーバプロセス531の
機能が、アプリケーションに特定のデータ561を、種
々の時点に種々のディスクからプロセス531が検索す
る全ての映画クリップに前置することであるので、プロ
セス531がデータ561を指し示す元のメッセージデ
ィスクリプタを転送しないことが好ましい。(もし転送
すれば各映画クリップに前置するためにデータ561の
コピーを検索しなければならなくなる。)その代わりと
して、プロセス531は「メッセージディスクリプ
タ()複製」を呼出して、データ561を指し示すメッ
セージディスクリプタを複製する。そのメッセージディ
スクリプタのバッファディスクリプタのリファレンスカ
ウントが複製によって1だけインクリメントされ、例え
ば1から2にされる。
【0064】プロセス531は、データ560のための
メッセージディスクリプタの前にこのメッセージディス
クリプタの複製を連鎖させ、データ561、560を指
し示すメッセージを作成する。次いでプロセス531は
「メッセージ()配置」を実行してデータ561、56
0のメッセージを中間プロトコルSPS 512へ渡
す。前述したように、「メッセージ()配置」ルーチン
はメッセージ(及びその関連メッセージディスクリプタ
及びバッファディスクリプタ)を、アプリケーションサ
ーバSPS 511から中間プロトコルSPS 512
へ移動させる(それらのグローバルリファレンスポイン
タによって指し示されるデータは除く)。中間プロトコ
ルSPS 512上では、メッセージのバッファディス
クリプタのリファレンスカウントはアプリケーションサ
ーバ上にあった時のカウントと同一、即ちアプリケーシ
ョンに特定のデータメッセージディスクリプタの場合は
2であり、データ560メッセージディスクリプタの場
合は1である。
【0065】中間プロトコルプロセス532はそのプロ
トコルデータ562のためのメッセージディスクリプタ
を割当てるために先に「メッセージディスクリプタ()
入手」を呼出し、そして関連データバッファをデータ5
62で充填するために必要に応じてその処理を連絡して
いる。中間プロトコルプロセス532は、3つのメッセ
ージディスクリプタを一緒に連鎖させることによってデ
ータ562、561、560を結合している。これらの
メッセージディスクリプタは、チェーンのヘッドのプロ
トコルデータ562のためのメッセージディスクリプタ
のコピー、それに続くデータ561のためのメッセージ
ディスクリプタ(のコピー)、及びそれに続くデータ5
60のためのメッセージディスクリプタである。プロト
コルデータメッセージディスクリプタは中間プロトコル
データ562のグローバルアドレスを含み、複製メッセ
ージディスクリプタが転送のために割当てられている。
次いで中間プロトコルプロセスは「メッセージ()配
置」を実行し、データ562、561、560のメッセ
ージのメッセージディスクリプタ及びバッファディスク
リプタ(データ562、561、560自体は除く)を
SPS 513内のTCP/IP及びATMグローバル
待ち行列上へ渡す。
【0066】メッセージは、中間プロトコルPSP 5
12からTCP/IP及びATMSPS 513へ移動
する。SPS 513上のデータ562、561、56
0のためのバッファディスクリプタのリファレンスカウ
ントは、それぞれ2、2、及び1である。TCP/IP
プロセス533は3つのメッセージディスクリプタメッ
セージを取り、それをTCP/IPプロトコルのために
処理する。プロセス533は「メッセージサイズ()入
手」を呼び出してメッセージのサイズを計算し、そし
て、例えばこのメッセージを3つのTCP/IPパケッ
トに分割しなければならないことを理解する。第1のT
CP/IPパケットは、中間プロトコルヘッダデータ5
62、アプリケーションに特定のデータ561、及び映
画クリップデータの第1の部分560’を含む。第2の
パケットは、映画データの第2の部分560”を含み、
第3のパケットは映画データの残余560''' を含む。
プロセス533は、3つのTCP/IPヘッダ563
a、563b、563cを準備し、必要に応じて「メッ
セージディスクリプタ()入手」を3回呼出してメッセ
ージディスクリプタを割当てる。
【0067】プロセス533は「メッセージディスクリ
プタ()分割」をも実行し、データ560をパケット化
されたデータ560’、560”、及び560''' に分
割する。これでプロセス533は9つのメッセージディ
スクリプタによって指し示される6つのデータバッファ
を有することになる。これらの9つのメッセージディス
クリプタは、3つのTCP/IPヘッダ563a、56
3b、563c、1つの中間ヘッダ562、1つのアプ
リケーションヘッダ561、3つのデータチャンク56
0’、560”、560''' 、及び元のデータ560で
ある。データチャンク560、560’、560”、5
60''' は全て同一のバッファである。これでTCP/
IP及びATMドライバプロセス533は、これらのメ
ッセージディスクリプタを連鎖させて上述した3つのT
CP/IPパケットを発生し、3つのTCP/IPパケ
ットを連鎖させて以下のデータシーケンスを有するメッ
セージを発生させる。即ちTCP/IPヘッダ563
a、中間ヘッダ562、アプリケーションに特定のデー
タ561、データ560’、TCP/IPヘッダ563
b、データ561”、TCP/IPヘッダ563c、及
びデータ560'''である。(この新たに作成されたメ
ッセージ内にはデータ560自体のためのメッセージデ
ィスクリプタが現れていないことに注目されたい。)こ
れで、グローバルバッファ560のメッセージディスク
リプタのための元のバッファディスクリプタのリファレ
ンスカウントは5になる。ドライバプロセス533は
「メッセージ()配置」を使用して、この8つのメッセ
ージディスクリプタメッセージをATMコントローラ5
70へ転送する。
【0068】これでATMコントローラ570は、デー
タの伝送を開始する準備が整う。コントローラ570は
ディスクリプタのリストを歩き、実際のデータを各DS
Sから転送してデータを保持する。第1のパケットの4
つのメッセージディスクリプタの場合、データソース
は、TCP/IPドライバSPSメモリ553、中間プ
ロトコルSPSメモリ552、アプリケーションサーバ
SPSメモリ552、及びグローバルI/Oメモリ58
0である。ATMコントローラは各メモリディスクリプ
タに対して順番に「()読み出しのための変換」を呼出
してTネットにまたがる読み出し要求を構成する。TM
コントローラ570がデータを必要になると、ATMコ
ントローラ570のBTE DMA(図示してない)を
通してHDACが処理され、ATMチップセット(図示
してない)及びプロトコルがその準備を整えるまでAT
Mコントローラ570のFIFO(図示してない)が検
索したデータを保持する。
【0069】ATMコントローラ570は第1のATM
パケットのための全てのデータの転送を終了させ、「メ
ッセージディスクリプタ戻し」を呼出してその第1のパ
ケットのためのメッセージディスクリプタを戻す。(A
TMコントローラは、割り込みによってそれをATMド
ライバSPS 513へ通知する。) ATMドライバSPS 513は、「メッセージディス
クリプタ()戻し」グローバルQIO呼出しを介して第
1のパケットの各メッセージディスクリプタを戻す。第
1のTCP/IPヘッダデータ563aを指し示すメッ
セージディスクリプタが戻されると、メッセージディス
クリプタ及び構成要素データバッファ及びバッファディ
スクリプタはSPS513内で直ちに自由になる。それ
は、それらがそこに割当てられており、バッファディス
クリプタのリファレンスカウントが1であったからであ
る。(換言すれば、メッセージディスクリプタは決して
「メッセージディスクリプタ()複製」を受けず、「メ
ッセージ()配置」だけを受けるのである。) 中間ヘッダデータ562を指し示すメッセージディスク
リプタが、中間プロトコルSPS 512へ戻される
と、そのバッファディスクリプタカウントは1に減らさ
れる。従って、そのバッファディスクリプタは未だに自
由になることはできない。(戻されたメッセージディス
クリプタは「メッセージディスクリプタ()複製」の結
果であり、バッファディスクリプタのリファレンスカウ
ントは2になっている。)中間プロトコルを必要とする
次の時点に、中間プロトコルプロセス532がデータ5
62を指し示すメッセージディスクリプタを使用するこ
とは自由である。
【0070】アプリケーションに特定のデータ561を
指し示すメッセージディスクリプタが戻されると、同様
にそのバッファディスクリプタのリファレンスカウント
が1に減らされる。アプリケーションに特定のデータを
必要とする次の時点に、アプリケーションサーバプロセ
スがデータバッファ561を指し示すメッセージディス
クリプタを使用することは自由である。最後に、ディス
クデータ560’の第1の部分を指し示すメッセージデ
ィスクリプタがグローバルI/Oメモリ580へ戻され
ると、ディスクデータ560、560’、560”のた
めのバッファディスクリプタのリファレンスカウントが
1だけ減らされて4にされる。第2のパケットのメッセ
ージディスクリプタ内のデータの伝送、及びこれらのメ
ッセージディスクリプタの戻しは、第1のパケットに類
似している。従って重複を避けるために詳細な説明は省
略する。
【0071】最後に、ATMコントローラ570は第3
の、そして最後のATMパケットのための全てのデータ
の転送を終了させる。ATMコントローラ570は「メ
ッセージ()配置」を呼出してその第3のパケットのた
めのメッセージディスクリプタを戻す(そして、ATM
ドライバSPS 513に割り込む)。ATMドライバ
プロセス533は、各メッセージディスクリプタの戻り
を処理する。第1のパケットとこの最後のパケットとの
戻り処理間の差は、データ560のためのリファレンス
カウントが1に減らされている最初のものである。ディ
スクデータ560を指し示すメッセージディスクリプタ
の戻しは、メッセージディスクリプタをグローバルI/
Oメモリ580、即ち現在使用のバッファの元のアロケ
ータへ戻すことを含んでいる。データ560のためのバ
ッファディスクリプタのリファレンスカウンゴは1だけ
減らされて0になる。メッセージディスクリプタ及びそ
の構成要素バッファディスクリプタ及びデータバッファ
は全て割当て解除され、それそれの自由プールへ戻され
る。もし将来データ560を再度使用するのであれば、
それはディスクコントローラ540から再度引き出さな
ければならない。
【0072】当分野に精通していれば理解されるよう
に、ディスクコントローラ570からATMコントロー
ラまでデータを転送するのに幾つかのプロセッサが直列
に含まれているような、及びATMコントローラ570
へ転送すべきデータに3つのプロセッサ511、51
2、513がデータに付加されるようなシステムにおい
ては、データの各片の転送、即ち、データ(560、5
61、562、563)のそれぞれのソース(グローバ
ルI/Oメモリ580、SPS 511、512、51
3)から、データの最終行先(ATMコントローラ57
0)への転送が実際に1回発生するだけである。以上
に、複数のデータソース及びシンクの間でリファレンス
によってデータI/Oを実行する装置及び方法を開示し
た。この方法は、ビデオオンデマンド、及びマルチメデ
ィア応用に特に有用である。リファレンスによるデータ
I/Oの長所は、より良い並行動作、より良い線形可消
費性、高速ネットワーキング、及び特殊化された機能に
特定のプロセッサを使用する能力を含む。
【0073】勿論、以上に説明したようなソフトウェア
のためのプログラムテキストは、磁気、光、または他の
ディスク上に、磁気テープ、または記憶及び/または検
索のために媒体を運動させる必要がある他の媒体上に、
ROM内に、RAM内に、または別のデータ記憶媒体内
に静的な形で存在させることができる。データ記憶媒体
はコンピュータシステムと一体であることも、またはコ
ンピュータシステム内に挿入可能であることもできる。
【0074】
【発明の効果】本発明の方法は、関連メモリを有するC
PUまたはI/Oコントローラの形の複数のデータソー
ス/シンクを含む分散型メモリアーキテクチャを有し、
ノードとしてネットワークに接続され、そしてデータ位
置にはメモリアドレスによってネットワーク中からアク
セス可能であるようなデータ処理システムにおいて、複
数のデータソース/シンクを使用してデータストリーム
を変換する方法であって、複数の各データソース/シン
クは変換処理中にデータストリームをコピーすることは
せず、方法が、第1のデータソース/シンクにおいて、
第1のデータストリームが記憶されている第1の記憶位
置を指定する第1のグローバルネットワークアドレスを
含む第1のポインタを生成する段階と、第1のポインタ
だけを、第1のデータソース/シンクから第2のデータ
ソース/シンクまで転送する段階と、第2のデータソー
ス/シンクにおいて、第2のデータストリームが記憶さ
れている第2の記憶位置を指定する第2のグローバルネ
ットワークアドレスを含む第2のポインタを生成し、第
1及び第2のポインタを連鎖させて第1の連鎖されたポ
インタを形成する段階と、第1の連鎖されたポインタだ
けを、メッセージの第3のデータ断片を記憶しメッセー
ジを行先へ転送するようになっている第3のデータソー
ス/シンクへ転送する段階と、第3のデータソース/シ
ンクにおいて、第1のポインタを処理して第1のポイン
タを複数の副ポインタに変換して第1のデータストリー
ムを複数の部分に分割し、第1のデータストリームの各
部分上にプロトコルヘッダを連鎖させる段階とを備えて
いるので、データのプロセッサ間コピーイングを回避
し、しかも共用メモリの隘路及び故障許容問題を回避す
ることができ、その結果、プロセッサ内及びプロセッサ
間の両方において、データの不要なコピーイングを排除
することができる。
【0075】本発明の方法は、関連メモリを有するCP
UまたはI/Oコントローラの形の複数のデータソース
/シンクを含む分散型メモリアーキテクチャを有し、ノ
ードとしてネットワークに接続され、そしてデータには
メモリアドレスによってネットワーク中からアクセス可
能であるようなデータ処理システムにおいて、複数のデ
ータソース/シンクの第1のデータソース/シンク上の
データバッファを指し示すディスクリプタを入手する段
階と、ディスクリプタを、データバッファ内のデータを
転送することなく、複数のデータソース/シンクの第2
のデータソース/シンク上へ配置する段階と、ディスク
リプタを、第2のデータソース/シンクから複数のデー
タソース/シンクの第3のデータソース/シンク上へ配
置する段階と、データバッファ内のデータの一部分を、
第1のデータソース/シンクから第3のデータソース/
シンクまで検索し、データ入力または出力を遂行する段
階とを備えているので、データのプロセッサ間コピーイ
ングを回避し、しかも共用メモリの隘路及び故障許容問
題を回避することができ、その結果、プロセッサ内及び
プロセッサ間の両方において、データの不要なコピーイ
ングを排除することができる。
【0076】本発明の方法は、関連メモリを有するCP
UまたはI/Oコントローラの形の複数のデータソース
/シンクを含む分散型メモリアーキテクチャを有し、ノ
ードとしてネットワークに接続され、そしてデータには
メモリアドレスによってネットワーク中からアクセス可
能であるようなデータ処理システムにおいて、複数のデ
ータソース/シンクの第1のデータソース/シンク上の
データバッファを指し示すディスクリプタを入手する段
階と、ディスクリプタを、データバッファ内のデータを
転送することなく、複数のデータソース/シンクの第2
のデータソース/シンク上へ配置する段階と、ディスク
リプタを、複数のディスクリプタに分割する段階と、複
数のディスクリプタの1つを、第2のデータソース/シ
ンクから複数のデータソース/シンクの第3のデータソ
ース/シンク上へ配置する段階と、1つのディスクリプ
タによって記述されたデータバッファ内のデータの一部
分を、第1のデータソース/シンクから第3のデータソ
ース/シンクまで検索し、データ入力または出力を遂行
する段階とを備えているので、データのプロセッサ間コ
ピーイングを回避し、しかも共用メモリの隘路及び故障
許容問題を回避することができ、その結果、プロセッサ
内及びプロセッサ間の両方において、データの不要なコ
ピーイングを排除することができる。プロセッサ内及び
プロセッサ間の両方において、データの不要なコピーイ
ングを排除することができる。
【0077】本発明のデータストレージ用媒体は、CP
UまたはI/Oコントローラの形の複数のデータソース
/シンクの間でデータI/Oを実行するためのコンピュ
ータプログラムを記憶しているデータストレージ用媒体
において、複数のデータソース/シンクの第1のデータ
ソース/シンク上のデータバッファを指し示すディスク
リプタを入手する段階と、ディスクリプタを、データバ
ッファ内のデータを転送することなく、複数のデータソ
ース/シンクの第2のデータソース/シンク上へ配置す
る段階と、ディスクリプタを、第2のデータソース/シ
ンクから複数のデータソース/シンクの第3のデータソ
ース/シンク上へ配置する段階と、データバッファ内の
データの一部分を、第1のデータソース/シンクから第
3のデータソース/シンクまで検索し、データ入力また
は出力を実行する段階によって、CPUまたはI/Oコ
ントローラの形の複数のデータソース/シンクの間でデ
ータI/Oを実行するためのコンピュータプログラムを
記憶するので、データのプロセッサ間コピーイングを回
避し、しかも共用メモリの隘路及び故障許容問題を回避
することができ、その結果、プロセッサ内及びプロセッ
サ間の両方において、データの不要なコピーイングを排
除することができる。
【0078】本発明のデータストレージ用媒体は、複数
のデータソース/シンクの第1のデータソース/シンク
上のデータバッファを指し示すディスクリプタを入手す
る段階と、ディスクリプタを、データバッファ内のデー
タを転送することなく、複数のデータソース/シンクの
第2のデータソース/シンク上へ配置する段階と、ディ
スクリプタを、複数のディスクリプタに分割する段階
と、複数のディスクリプタの1つを、第2のデータソー
ス/シンクから複数のデータソース/シンクの第3のデ
ータソース/シンク上へ配置する段階と、1つのディス
クリプタによって記述されたデータバッファ内のデータ
の一部分を、第1のデータソース/シンクから第3のデ
ータソース/シンクまで検索し、データ入力または出力
を実行する段階によって、CPUまたはI/Oコントロ
ーラの形の複数のデータソース/シンクの間でデータI
/Oを実行するためのコンピュータプログラムを記憶す
るので、データのプロセッサ間コピーイングを回避し、
しかも共用メモリの隘路及び故障許容問題を回避するこ
とができ、その結果、プロセッサ内及びプロセッサ間の
両方において、データの不要なコピーイングを排除する
ことができる。
【図面の簡単な説明】
【図1】QIO共用メモリシステムを組み込んだ故障許
容並行データ処理システムのブロック線図である。
【図2】モジュラーネットワークされたマルチプロセッ
サシステムを示す図である。
【図3】故障許容マルチプロセッサシステムを示す図で
ある。
【図4】図3のシステムの代替構成を示す図である。
【図5】プロセッサ及びメモリをネットワークにインタ
フェースするための図3のCPUの一部を形成するイン
タフェースユニットを示す図である。
【図6】図3のコンピュータシステム100をより特定
化したバージョンを示す図である。
【図7】グローバルQIO待ち行列を示す図である。
【図8】メッセージのフォーマットを示す図である。
【図9】バッファディスクリプタのフォーマットを示す
図である。
【符号の説明】
10 データ処理システム 12 CPU 14 ルータ 16 I/Oパケットインタフェース 17 I/Oデバイス 18 保守プロセッサ(MP) 24 インタフェースユニット 28 メモリ 100 故障許容並列デバイス処理システム 102 ノード 104 ワークステーション 105 LAN 106、108 プロセッサ 109 プロセッサ間バス(IPB) 110 CPU 112 メモリ 114 ディスクコントローラ 116 ディスクドライブ 120 アプリケーションプロセス 122 ディスクプロセス 124 共用メモリセグメント 126 QIOライブラリルーチン 128 メッセージシステム(MS) 130 ファイルシステム(FS) 132 ディスクドライバ 140 LANコントローラ 142 CPU 144 メモリ 146 TCP/IPプロセス 148 ディストリビュータプロセス 150 共用メモリセグメント 151 QIO待ち行列 152 QIOライブラリルーチン 154 メッセージシステム 156 ファイルシステム 158 LANドライバ 200、500 コンピュータシステム 210、211、212、213、510、511、5
12、513 ノード(コンピュータシステム) 220、520 Tネットネットワーク 230、530 ディスクプロセス 231、531 アプリケーションサーバプロセス 232、532 中間プロトコルプロセス 233、533 TCP/IPATMドライバ 240、540 ディスクコントローラ 250、251、252、253、544、555 メ
モリ 260、560 ディスクデータ 261、561 アプリケーションに特定のデータ 262、562 中間(RPC)プロトコル情報 263、563 TCP/IPプロトコル情報 570 ATMコントローラ 580 グローバルメモリ 600 QIO待ち行列 620 メッセージリスト 622、624 メッセージディスクリプタ 700 メッセージ 730 バッファディスクリプタ 740 バッファ
───────────────────────────────────────────────────── フロントページの続き (72)発明者 バーマン ザーガム アメリカ合衆国 カリフォルニア州 94087 サニーヴェール オリーリア コ ート 1527

Claims (8)

    【特許請求の範囲】
  1. 【請求項1】 関連メモリを有するCPUまたはI/O
    コントローラの形の複数のデータソース/シンクを含む
    分散型メモリアーキテクチャを有し、ノードとしてネッ
    トワークに接続され、そしてデータ位置にはメモリアド
    レスによってネットワーク中からアクセス可能であるよ
    うなデータ処理システムにおいて、複数のデータソース
    /シンクを使用してデータストリームを変換する方法で
    あって、前記複数の各データソース/シンクは変換処理
    中に前記データストリームをコピーすることはせず、前
    記方法が、 第1のデータソース/シンクにおいて、第1のデータス
    トリームが記憶されている第1の記憶位置を指定する第
    1のグローバルネットワークアドレスを含む第1のポイ
    ンタを生成する段階と、 前記第1のポインタだけを、前記第1のデータソース/
    シンクから第2のデータソース/シンクまで転送する段
    階と、 前記第2のデータソース/シンクにおいて、第2のデー
    タストリームが記憶されている第2の記憶位置を指定す
    る第2のグローバルネットワークアドレスを含む第2の
    ポインタを生成し、前記第1及び第2のポインタを連鎖
    させて第1の連鎖されたポインタを形成する段階と、 前記第1の連鎖されたポインタだけを、前記メッセージ
    の第3のデータ断片を記憶し前記メッセージを行先へ転
    送するようになっている第3のデータソース/シンクへ
    転送する段階と、 前記第3のデータソース/シンクにおいて、前記第1の
    ポインタを処理して前記第1のポインタを複数の副ポイ
    ンタに変換して前記第1のデータストリームを複数の部
    分に分割し、前記第1のデータストリームの各部分上に
    プロトコルヘッダを連鎖させる段階と、を備えているこ
    とを特徴とする方法。
  2. 【請求項2】 前記第1、第2、第3、及び第4のデー
    タソース/シンクにおいてグローバルIO待ち行列を作
    成する段階を更に備え、 前記第1のポインタを、前記第1のデータソース/シン
    クから前記第2のデータソース/シンクへ転送する段階
    が、 前記第1のポインタを、前記第1のデータソース/シン
    クのグローバルIO待ち行列内に記憶する段階と、 前記第1のポインタを、前記第1のデータソース/シン
    クのグローバルIO待ち行列から前記第2のデータソー
    ス/シンクのグローバルIO待ち行列へ待合わさせ、そ
    れにより前記第1のポインタだけを前記第2のノードに
    コピーさせる段階と、を備えている請求項1に記載の方
    法。
  3. 【請求項3】 関連メモリを有するCPUまたはI/O
    コントローラの形の複数のデータソース/シンクを含む
    分散型メモリアーキテクチャを有し、ノードとしてネッ
    トワークに接続され、そしてデータにはメモリアドレス
    によってネットワーク中からアクセス可能であるような
    データ処理システムにおいて、 前記複数のデータソース/シンクの第1のデータソース
    /シンク上のデータバッファを指し示すディスクリプタ
    を入手する段階と、 前記ディスクリプタを、前記データバッファ内のデータ
    を転送することなく、前記複数のデータソース/シンク
    の第2のデータソース/シンク上へ配置する段階と、 前記ディスクリプタを、前記第2のデータソース/シン
    クから前記複数のデータソース/シンクの第3のデータ
    ソース/シンク上へ配置する段階と、 前記データバッファ内のデータの一部分を、前記第1の
    データソース/シンクから前記第3のデータソース/シ
    ンクまで検索し、データ入力または出力を遂行する段階
    と、を備えていることを特徴とする方法。
  4. 【請求項4】 関連メモリを有するCPUまたはI/O
    コントローラの形の複数のデータソース/シンクを含む
    分散型メモリアーキテクチャを有し、ノードとしてネッ
    トワークに接続され、そしてデータにはメモリアドレス
    によってネットワーク中からアクセス可能であるような
    データ処理システムにおいて、 前記複数のデータソース/シンクの第1のデータソース
    /シンク上のデータバッファを指し示すディスクリプタ
    を入手する段階と、 前記ディスクリプタを、前記データバッファ内のデータ
    を転送することなく、前記複数のデータソース/シンク
    の第2のデータソース/シンク上へ配置する段階と、 前記ディスクリプタを、複数のディスクリプタに分割す
    る段階と、 前記複数のディスクリプタの1つを、前記第2のデータ
    ソース/シンクから前記複数のデータソース/シンクの
    第3のデータソース/シンク上へ配置する段階と、 前記1つのディスクリプタによって記述された前記デー
    タバッファ内のデータの一部分を、前記第1のデータソ
    ース/シンクから前記第3のデータソース/シンクまで
    検索し、データ入力または出力を遂行する段階と、を備
    えていることを特徴とする方法。
  5. 【請求項5】 前記ディスクリプタを、その元のデータ
    ソース/シンクまで検索する段階と、 前記ディスクリプタ及びそれが記述しているメモリ領域
    の割当てを解除する段階と、を更に備えている請求項3
    に記載の方法。
  6. 【請求項6】 前記1つのディスクリプタを、その元の
    データソース/シンクへ戻す段階と、 前記1つのディスクリプタ及びそれが記述しているメモ
    リ領域の割当てを解除する段階と、を更に備えている請
    求項4に記載の方法。
  7. 【請求項7】 複数のデータソース/シンクの第1のデ
    ータソース/シンク上のデータバッファを指し示すディ
    スクリプタを入手する段階と、 前記ディスクリプタを、前記データバッファ内のデータ
    を転送することなく、前記複数のデータソース/シンク
    の第2のデータソース/シンク上へ配置する段階と、 前記ディスクリプタを、前記第2のデータソース/シン
    クから前記複数のデータソース/シンクの第3のデータ
    ソース/シンク上へ配置する段階と、 前記データバッファ内のデータの一部分を、前記第1の
    データソース/シンクから前記第3のデータソース/シ
    ンクまで検索し、データ入力または出力を実行する段階
    とによって、CPUまたはI/Oコントローラの形の複
    数のデータソース/シンクの間でデータI/Oを実行す
    るためのコンピュータプログラムを記憶するデータスト
    レージ用媒体。
  8. 【請求項8】 複数のデータソース/シンクの第1のデ
    ータソース/シンク上のデータバッファを指し示すディ
    スクリプタを入手する段階と、 前記ディスクリプタを、前記データバッファ内のデータ
    を転送することなく、前記複数のデータソース/シンク
    の第2のデータソース/シンク上へ配置する段階と、 前記ディスクリプタを、複数のディスクリプタに分割す
    る段階と、 前記複数のディスクリプタの1つを、前記第2のデータ
    ソース/シンクから前記複数のデータソース/シンクの
    第3のデータソース/シンク上へ配置する段階と、 前記1つのディスクリプタによって記述された前記デー
    タバッファ内のデータの一部分を、前記第1のデータソ
    ース/シンクから前記第3のデータソース/シンクまで
    検索し、データ入力または出力を実行する段階とによっ
    て、CPUまたはI/Oコントローラの形の複数のデー
    タソース/シンクの間でデータI/Oを実行するための
    コンピュータプログラムを記憶するデータストレージ用
    媒体。
JP8341412A 1995-12-20 1996-12-20 Cpu及びi/oデバイス間のリファレンスによるコンピュータシステムデータi/o Pending JPH1011372A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/578411 1995-12-20
US08/578,411 US5790807A (en) 1995-12-20 1995-12-20 Computer sysem data I/O by reference among CPUS and I/O devices

Publications (2)

Publication Number Publication Date
JPH1011372A true JPH1011372A (ja) 1998-01-16
JPH1011372A5 JPH1011372A5 (ja) 2004-12-02

Family

ID=24312771

Family Applications (1)

Application Number Title Priority Date Filing Date
JP8341412A Pending JPH1011372A (ja) 1995-12-20 1996-12-20 Cpu及びi/oデバイス間のリファレンスによるコンピュータシステムデータi/o

Country Status (5)

Country Link
US (1) US5790807A (ja)
EP (1) EP0790562B1 (ja)
JP (1) JPH1011372A (ja)
CA (1) CA2193174A1 (ja)
DE (1) DE69628631T2 (ja)

Families Citing this family (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5954794A (en) * 1995-12-20 1999-09-21 Tandem Computers Incorporated Computer system data I/O by reference among I/O devices and multiple memory units
US5941959A (en) * 1995-12-20 1999-08-24 Tandem Computers Incorporated System for transferring a data stream to a requestor without copying data segments to each one of multiple data source/sinks during data stream building
US6792616B1 (en) * 1998-05-01 2004-09-14 Scientific-Atlanta, Inc. System and method for providing a plurality of programming services in a television system
US6636259B1 (en) 2000-07-26 2003-10-21 Ipac Acquisition Subsidiary I, Llc Automatically configuring a web-enabled digital camera to access the internet
US8224776B1 (en) 2000-07-26 2012-07-17 Kdl Scan Designs Llc Method and system for hosting entity-specific photo-sharing websites for entity-specific digital cameras
US7287088B1 (en) 2000-10-06 2007-10-23 Fotomedia Technologies, Llc Transmission bandwidth and memory requirements reduction in a portable image capture device by eliminating duplicate image transmissions
US20030084217A1 (en) * 2001-10-31 2003-05-01 Griego David A. Method and apparatus for sending data toward a network destination
US7185034B2 (en) * 2002-08-01 2007-02-27 Oracle International Corporation Buffered message queue architecture for database management systems with guaranteed at least once delivery
US7181482B2 (en) * 2002-08-01 2007-02-20 Oracle International Corporation Buffered message queue architecture for database management systems
US7185033B2 (en) 2002-08-01 2007-02-27 Oracle International Corporation Buffered message queue architecture for database management systems with unlimited buffered message queue with limited shared memory
US7203706B2 (en) 2002-08-01 2007-04-10 Oracle International Corporation Buffered message queue architecture for database management systems with memory optimizations and “zero copy” buffered message queue
US7103064B2 (en) * 2003-01-21 2006-09-05 Nextio Inc. Method and apparatus for shared I/O in a load/store fabric
US7917658B2 (en) * 2003-01-21 2011-03-29 Emulex Design And Manufacturing Corporation Switching apparatus and method for link initialization in a shared I/O environment
US7046668B2 (en) 2003-01-21 2006-05-16 Pettey Christopher J Method and apparatus for shared I/O in a load/store fabric
US7502370B2 (en) * 2003-01-21 2009-03-10 Nextio Inc. Network controller for obtaining a plurality of network port identifiers in response to load-store transactions from a corresponding plurality of operating system domains within a load-store architecture
US7457906B2 (en) 2003-01-21 2008-11-25 Nextio, Inc. Method and apparatus for shared I/O in a load/store fabric
US7493416B2 (en) * 2003-01-21 2009-02-17 Nextio Inc. Fibre channel controller shareable by a plurality of operating system domains within a load-store architecture
US7512717B2 (en) 2003-01-21 2009-03-31 Nextio Inc. Fibre channel controller shareable by a plurality of operating system domains within a load-store architecture
US8346884B2 (en) * 2003-01-21 2013-01-01 Nextio Inc. Method and apparatus for a shared I/O network interface controller
US7617333B2 (en) * 2003-01-21 2009-11-10 Nextio Inc. Fibre channel controller shareable by a plurality of operating system domains within a load-store architecture
US7219183B2 (en) * 2003-01-21 2007-05-15 Nextio, Inc. Switching apparatus and method for providing shared I/O within a load-store fabric
US7953074B2 (en) * 2003-01-21 2011-05-31 Emulex Design And Manufacturing Corporation Apparatus and method for port polarity initialization in a shared I/O device
US8032659B2 (en) * 2003-01-21 2011-10-04 Nextio Inc. Method and apparatus for a shared I/O network interface controller
US8102843B2 (en) * 2003-01-21 2012-01-24 Emulex Design And Manufacturing Corporation Switching apparatus and method for providing shared I/O within a load-store fabric
US7698483B2 (en) 2003-01-21 2010-04-13 Nextio, Inc. Switching apparatus and method for link initialization in a shared I/O environment
US7174413B2 (en) * 2003-01-21 2007-02-06 Nextio Inc. Switching apparatus and method for providing shared I/O within a load-store fabric
US7664909B2 (en) * 2003-04-18 2010-02-16 Nextio, Inc. Method and apparatus for a shared I/O serial ATA controller
US7188209B2 (en) * 2003-04-18 2007-03-06 Nextio, Inc. Apparatus and method for sharing I/O endpoints within a load store fabric by encapsulation of domain information in transaction layer packets
US7836211B2 (en) * 2003-01-21 2010-11-16 Emulex Design And Manufacturing Corporation Shared input/output load-store architecture
US8365193B2 (en) 2003-08-14 2013-01-29 Oracle International Corporation Recoverable asynchronous message driven processing in a multi-node system
US7792274B2 (en) * 2004-11-04 2010-09-07 Oracle International Corporation Techniques for performing multi-media call center functionality in a database management system
US7818386B2 (en) * 2004-12-30 2010-10-19 Oracle International Corporation Repeatable message streams for message queues in distributed systems
US7779418B2 (en) 2004-12-30 2010-08-17 Oracle International Corporation Publisher flow control and bounded guaranteed delivery for message queues
US8196150B2 (en) * 2005-10-07 2012-06-05 Oracle International Corporation Event locality using queue services
US9027025B2 (en) 2007-04-17 2015-05-05 Oracle International Corporation Real-time database exception monitoring tool using instance eviction data
US9128895B2 (en) 2009-02-19 2015-09-08 Oracle International Corporation Intelligent flood control management
US9165086B2 (en) 2010-01-20 2015-10-20 Oracle International Corporation Hybrid binary XML storage model for efficient XML processing
US8458530B2 (en) 2010-09-21 2013-06-04 Oracle International Corporation Continuous system health indicator for managing computer system alerts
US10540217B2 (en) 2016-09-16 2020-01-21 Oracle International Corporation Message cache sizing
US11061596B2 (en) * 2019-11-04 2021-07-13 Google Llc Multi-pass distributed data shuffle

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4228496A (en) 1976-09-07 1980-10-14 Tandem Computers Incorporated Multiprocessor system
JPS547252A (en) * 1977-06-20 1979-01-19 Hitachi Ltd Program control system
US4503499A (en) * 1982-09-14 1985-03-05 Eaton Corporation Controlled work flow system
US4901232A (en) * 1983-05-19 1990-02-13 Data General Corporation I/O controller for controlling the sequencing of execution of I/O commands and for permitting modification of I/O controller operation by a host processor
GB8328396D0 (en) * 1983-10-24 1983-11-23 British Telecomm Multiprocessor system
EP0201063B1 (en) * 1985-05-06 1993-07-07 Computer X, Inc. Method of locating processes in a distributed data processing system
US4649473A (en) * 1985-06-17 1987-03-10 International Business Machines Corporation Flexible data transmission for message based protocols
US5475836A (en) * 1987-04-01 1995-12-12 Lotus Development Corporation Interface for providing access to external data sources/sinks
ZA883232B (en) * 1987-05-06 1989-07-26 Dowd Research Pty Ltd O Packet switches,switching methods,protocols and networks
US4956771A (en) * 1988-05-24 1990-09-11 Prime Computer, Inc. Method for inter-processor data transfer
US5557798A (en) * 1989-07-27 1996-09-17 Tibco, Inc. Apparatus and method for providing decoupling of data exchange details for providing high performance communication between software processes
US5278834A (en) * 1992-05-26 1994-01-11 Alcatel Network Systems, Inc. Method for implementing a data communication protocol stack
US5414851A (en) * 1992-06-15 1995-05-09 International Business Machines Corporation Method and means for sharing I/O resources by a plurality of operating systems
US5572645A (en) * 1994-03-01 1996-11-05 International Business Machines Corporation Buffer management policy for an on-demand video server
EP0676878A1 (en) * 1994-04-07 1995-10-11 International Business Machines Corporation Efficient point to point and multi point routing mechanism for programmable packet switching nodes in high speed data transmission networks
US5630059A (en) * 1995-02-06 1997-05-13 International Business Machines Corporation Expedited message transfer in a multi-nodal data processing system

Also Published As

Publication number Publication date
CA2193174A1 (en) 1997-06-21
EP0790562A3 (en) 2001-01-10
US5790807A (en) 1998-08-04
DE69628631T2 (de) 2004-04-29
DE69628631D1 (de) 2003-07-17
EP0790562A2 (en) 1997-08-20
EP0790562B1 (en) 2003-06-11

Similar Documents

Publication Publication Date Title
EP0790562B1 (en) Computer system data I/O by reference among CPUs and I/O devices
JPH09325944A (ja) I/oデバイス及び多重メモリ装置間のリファレンスによるコンピュータシステムデータi/o
JPH103441A (ja) Cpu及び多重メモリ装置間のリファレンスによるコンピュータシステムデータi/o
Kronenberg et al. VAXcluster: A closely-coupled distributed system
JPH09288654A (ja) 多重データソース及びシンク間のリファレンスによるコンピュータシステムデータi/o
US6182197B1 (en) Real-time shared disk system for computer clusters
JP3364587B2 (ja) 通信システムで比較的大きなデータ・オブジェクトの伝送を制御するシステムと方法
TW544589B (en) Loosely coupled-multi processor server
JP3266481B2 (ja) クラスタ化コンピューティング・システムのディスク・アクセス・パスにおける障害から回復する方法および関連する装置
US6622259B1 (en) Non-disruptive migration of coordinator services in a distributed computer system
US7140015B1 (en) Microkernel for real time applications
US6393503B2 (en) Efficient transfer of data and events between processes and between processes and drivers in a parallel, fault tolerant message based operating system
JPH09288654A5 (ja)
WO2024239667A1 (zh) 数据处理方法、计算系统、设备、存储介质和程序产品
Suneja Scylladb optimizes database architecture to maximize hardware performance
US6032267A (en) Apparatus and method for efficient modularity in a parallel, fault tolerant, message based operating system
JPH09288653A (ja) Cpu間のリファレンスによるコンピュータシステムデータi/o
EP4293524B1 (en) Integrated chip and data transfer method
JP3639366B2 (ja) アドレス空間共有システム
US11334246B2 (en) Nanoservices—a programming design pattern for managing the state of fine-grained object instances
CN109343928B (zh) 虚拟化集群中虚拟机的虚拟内存文件重定向方法及其系统
JP2901882B2 (ja) 計算機システムおよび入出力命令の発行方法
Osmon et al. The Topsy project: a position paper
Bordawekar Implementation and evaluation of collective I/O in the Intel Paragon Parallel File System
JPH05165700A (ja) ファイルサーバ

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20061205

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20061211

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20070611