JPH09231157A - コンピュータに接続されている入力/出力(i/o)デバイスを制御する方法 - Google Patents
コンピュータに接続されている入力/出力(i/o)デバイスを制御する方法Info
- Publication number
- JPH09231157A JPH09231157A JP8340698A JP34069896A JPH09231157A JP H09231157 A JPH09231157 A JP H09231157A JP 8340698 A JP8340698 A JP 8340698A JP 34069896 A JP34069896 A JP 34069896A JP H09231157 A JPH09231157 A JP H09231157A
- Authority
- JP
- Japan
- Prior art keywords
- memory
- user
- adapter
- data
- virtual
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/0292—User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/20—Employing a main memory using a specific memory technology
- G06F2212/206—Memory mapped I/O
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
(57)【要約】 (修正有)
【課題】 複数のユーザ・プロセスがオペレーティング
・システムの介入なしに、I/Oデバイスに対して同時
に直接のアクセスを共有できるようにする。 【解決手段】 I/Oデバイスに対するアドレス空間
(210、212)がコンピュータの仮想メモリの中に
生成され、その中にI/Oデバイスを直接制御するため
に使われる仮想レジスタ(316、318)が含まれ
る。デバイスの制御レジスタI/Oデバイスは、そのア
ドレス空間(210、212)におけるデータの読み書
きを検出する。結果として、マップされた仮想アドレス
空間に書き込まれるデータの中に指定された値をプログ
ラムすることによって、I/Oデバイスにおいて所定の
アクションのシーケンスをトリガすることができる。
・システムの介入なしに、I/Oデバイスに対して同時
に直接のアクセスを共有できるようにする。 【解決手段】 I/Oデバイスに対するアドレス空間
(210、212)がコンピュータの仮想メモリの中に
生成され、その中にI/Oデバイスを直接制御するため
に使われる仮想レジスタ(316、318)が含まれ
る。デバイスの制御レジスタI/Oデバイスは、そのア
ドレス空間(210、212)におけるデータの読み書
きを検出する。結果として、マップされた仮想アドレス
空間に書き込まれるデータの中に指定された値をプログ
ラムすることによって、I/Oデバイスにおいて所定の
アクションのシーケンスをトリガすることができる。
Description
【0001】
【発明の属する技術分野】本発明は、概して、コンピュ
ータの入力/出力(I/O)デバイスのインターフェー
スに関し、そして特に、仮想レジスタを使ってI/Oデ
バイス・アダプタを直接制御し、高速のデータ転送を容
易にする方法に関する。
ータの入力/出力(I/O)デバイスのインターフェー
スに関し、そして特に、仮想レジスタを使ってI/Oデ
バイス・アダプタを直接制御し、高速のデータ転送を容
易にする方法に関する。
【0002】
【従来の技術】現代のコンピュータ・システムは複数の
ソフトウェア・タスクまたはプロセスを実行することが
できる。情報をソフトウェア・プロセスに対して送信す
るため、あるいはソフトウェア・プロセスから情報を受
信するために、入力/出力(I/O)デバイス・インタ
ーフェースが使われるのが普通である。I/Oデバイス
・インターフェースは情報を送信および受信するための
標準化された方法を提供し、実際のI/Oデバイスの物
理的特性をソフトウェア・プロセスから隠す。I/Oデ
バイス・インターフェースを使うソフトウェア・プロセ
スは、普通はプログラムするのが比較的易しく、そして
複数のタイプのコンピュータにわたって実装するのが容
易である。というのは、それらは特定の物理的I/Oデ
バイスに対する知識またはサポートを必要としないから
である。
ソフトウェア・タスクまたはプロセスを実行することが
できる。情報をソフトウェア・プロセスに対して送信す
るため、あるいはソフトウェア・プロセスから情報を受
信するために、入力/出力(I/O)デバイス・インタ
ーフェースが使われるのが普通である。I/Oデバイス
・インターフェースは情報を送信および受信するための
標準化された方法を提供し、実際のI/Oデバイスの物
理的特性をソフトウェア・プロセスから隠す。I/Oデ
バイス・インターフェースを使うソフトウェア・プロセ
スは、普通はプログラムするのが比較的易しく、そして
複数のタイプのコンピュータにわたって実装するのが容
易である。というのは、それらは特定の物理的I/Oデ
バイスに対する知識またはサポートを必要としないから
である。
【0003】I/Oデバイス・インターフェースはI/
Oデバイス・ドライバと呼ばれるソフトウェア・プログ
ラムによって実装されるのが普通である。I/Oデバイ
ス・ドライバは外部ソース、例えば、ローカル・エリア
・ネットワークから入ってくる情報を受け取り、それを
適切なソフトウェア・プロセスへ渡さなければならな
い。入ってくるデータは普通はそのデバイス・ドライバ
の仮想アドレス空間(VAS)の中にある一時記憶ロケ
ーションの中に頻繁にバッファされる。そこから別のス
テップの間にユーザ・プロセスのVASへコピーされ
る。
Oデバイス・ドライバと呼ばれるソフトウェア・プログ
ラムによって実装されるのが普通である。I/Oデバイ
ス・ドライバは外部ソース、例えば、ローカル・エリア
・ネットワークから入ってくる情報を受け取り、それを
適切なソフトウェア・プロセスへ渡さなければならな
い。入ってくるデータは普通はそのデバイス・ドライバ
の仮想アドレス空間(VAS)の中にある一時記憶ロケ
ーションの中に頻繁にバッファされる。そこから別のス
テップの間にユーザ・プロセスのVASへコピーされ
る。
【0004】
【発明が解決しようとする課題】しかし、通信技術にお
ける最近の進歩によって多くのI/Oデバイスのバンド
幅が急速に増加してくるにつれて、デバイスのI/Oド
ライバのVASからユーザ・プロセスのVASへコピー
するステップが大きなボトルネックとなってきている。
例えば、光ファイバ・リンク回線に対するバンド幅は現
在ではギガビット/秒の単位で測定されるのが普通であ
る。この驚異的な広いバンド幅のために、情報がコンピ
ュータの内部にコピーされる時に1つの問題が生じる。
情報がコピーされる時、すべてのデータがコンピュータ
のプロセッサ、メモリ、および内部データ・バスを数回
通過する。従って、これらの各コンポーネントが大きな
ボトルネックとなり、通信のバンド幅を完全に使うため
の能力を制限することになる。I/Oの潜在時間特性お
よびバンド幅は中間のコピーを利用するこの標準のプロ
グラミング・パラダイムによって劣化させられる。
ける最近の進歩によって多くのI/Oデバイスのバンド
幅が急速に増加してくるにつれて、デバイスのI/Oド
ライバのVASからユーザ・プロセスのVASへコピー
するステップが大きなボトルネックとなってきている。
例えば、光ファイバ・リンク回線に対するバンド幅は現
在ではギガビット/秒の単位で測定されるのが普通であ
る。この驚異的な広いバンド幅のために、情報がコンピ
ュータの内部にコピーされる時に1つの問題が生じる。
情報がコピーされる時、すべてのデータがコンピュータ
のプロセッサ、メモリ、および内部データ・バスを数回
通過する。従って、これらの各コンポーネントが大きな
ボトルネックとなり、通信のバンド幅を完全に使うため
の能力を制限することになる。I/Oの潜在時間特性お
よびバンド幅は中間のコピーを利用するこの標準のプロ
グラミング・パラダイムによって劣化させられる。
【0005】図1は、送信側と受信側との従来のI/O
データ・フローを示している流れ図である。102にお
いて、送信側のアプリケーションはメモリ・バスを経由
して情報をユーザ・バッファ104へ送る。それは次に
プロトコル・モジュール110によってメモリ・バス上
で読み戻される。その後、その情報はオペレーティング
・システムのカーネル108を通ってバッファされた
後、通常のネットワーク・インターフェース114を通
じてネットワーク・メディア・アクセス・コントロール
(MAC)116へ送り出される。このシステム・モデ
ルにおいて、データはS2、S3およびS5において少
なくとも3回、メモリ・バス上で転送される。受信のア
プリケーションの場合、送信側のアプリケーションのス
テップの逆の操作が行われ、そして再びそのデータはR
1、R4、およびR5においてメモリ・バス上で少なく
とも3回の転送が行われる。
データ・フローを示している流れ図である。102にお
いて、送信側のアプリケーションはメモリ・バスを経由
して情報をユーザ・バッファ104へ送る。それは次に
プロトコル・モジュール110によってメモリ・バス上
で読み戻される。その後、その情報はオペレーティング
・システムのカーネル108を通ってバッファされた
後、通常のネットワーク・インターフェース114を通
じてネットワーク・メディア・アクセス・コントロール
(MAC)116へ送り出される。このシステム・モデ
ルにおいて、データはS2、S3およびS5において少
なくとも3回、メモリ・バス上で転送される。受信のア
プリケーションの場合、送信側のアプリケーションのス
テップの逆の操作が行われ、そして再びそのデータはR
1、R4、およびR5においてメモリ・バス上で少なく
とも3回の転送が行われる。
【0006】入力/出力(I/O)デバイスのプログラ
ミングは、普通はオペレーティング・システムに対する
呼出しを行うユーザのソフトウェア・プロセスに関係す
る。これは入ってくるデータを処理するために、システ
ム・レジスタおよびメモリの中の情報をスワップするコ
ンテキスト・スイッチを伴う。さらに、物理的なI/O
が実際のデバイス上で発生する前に、I/Oのデータの
ルーチングのために、1回またはそれ以上のメモリ間で
のデータのコピー操作が付随する。I/Oの潜在性およ
びバンド幅は、データをメモリ間で複数回コピーするこ
とによる以外に、例外ハンドラの使用を通してオペレー
ティング・システムを呼び出すことによって劣化させら
れることが認識される。
ミングは、普通はオペレーティング・システムに対する
呼出しを行うユーザのソフトウェア・プロセスに関係す
る。これは入ってくるデータを処理するために、システ
ム・レジスタおよびメモリの中の情報をスワップするコ
ンテキスト・スイッチを伴う。さらに、物理的なI/O
が実際のデバイス上で発生する前に、I/Oのデータの
ルーチングのために、1回またはそれ以上のメモリ間で
のデータのコピー操作が付随する。I/Oの潜在性およ
びバンド幅は、データをメモリ間で複数回コピーするこ
とによる以外に、例外ハンドラの使用を通してオペレー
ティング・システムを呼び出すことによって劣化させら
れることが認識される。
【0007】本発明の1つの目的は、単独のコンピュー
ティング・ノードにおいて複数のユーザ・プロセスが1
つのI/O当たりのベースでオペレーティング・システ
ムの介入なしに、I/Oデバイスに対して同時に直接の
アクセスを共有できるようにすることである。
ティング・ノードにおいて複数のユーザ・プロセスが1
つのI/O当たりのベースでオペレーティング・システ
ムの介入なしに、I/Oデバイスに対して同時に直接の
アクセスを共有できるようにすることである。
【0008】
【課題を解決するための手段】本発明の1つの態様に従
って、高速のI/Oデータ転送を容易にするためにコン
ピュータに接続されている入力/出力(I/O)デバイ
スを制御する方法が提供される。その方法は次のステッ
プによって特徴付けられる。
って、高速のI/Oデータ転送を容易にするためにコン
ピュータに接続されている入力/出力(I/O)デバイ
スを制御する方法が提供される。その方法は次のステッ
プによって特徴付けられる。
【0009】(a)コンピュータのメモリの中のI/O
デバイスに対するアドレス空間をスヌープするステッ
プ。このスヌーピングのステップはスヌープされるデー
タ空間における読出しおよび書込み中のデータを検出す
るステップを含む。
デバイスに対するアドレス空間をスヌープするステッ
プ。このスヌーピングのステップはスヌープされるデー
タ空間における読出しおよび書込み中のデータを検出す
るステップを含む。
【0010】(b)そのスヌープされるアドレス空間の
中に書き込まれている指定された値に応答して、そのI
/Oデバイスの中で所定のアクションのシーケンスを実
行するステップ。
中に書き込まれている指定された値に応答して、そのI
/Oデバイスの中で所定のアクションのシーケンスを実
行するステップ。
【0011】従って、本発明は中間的なメモリ間でのコ
ピーを行わずに、I/Oベースでのオペレーティング・
システムに対する呼出しをなくすことによって、I/O
操作の効率を増加させる。
ピーを行わずに、I/Oベースでのオペレーティング・
システムに対する呼出しをなくすことによって、I/O
操作の効率を増加させる。
【0012】本発明の一つの実施例が付属図面を参照し
て以下に記述される。
て以下に記述される。
【0013】
【発明の実施の形態】図2は本発明による仮想ハードウ
ェア・メモリの構成を示しているブロック図である。標
準のI/Oバス、例えば、ISA、EISA、MCA、
またはPCIバスに接続されているI/Oデバイス・ア
ダプタは、オペレーティング・システムの中のデバイス
・ドライバからアクセスできる或る量のメモリおよびメ
モリ・マップされたレジスタを持っていることが多い。
ユーザ・プロセス202、204によって、制御をデバ
イス・ドライバへ移すオペレーティング・システムの要
求を行うことによるI/O操作が発生する。複数のユー
ザ・プロセスによる単独のI/Oデバイス・アダプタの
共有が、カーネルの中で実行しているデバイス・ドライ
バによって管理され、それによって、セキュリティも提
供される。
ェア・メモリの構成を示しているブロック図である。標
準のI/Oバス、例えば、ISA、EISA、MCA、
またはPCIバスに接続されているI/Oデバイス・ア
ダプタは、オペレーティング・システムの中のデバイス
・ドライバからアクセスできる或る量のメモリおよびメ
モリ・マップされたレジスタを持っていることが多い。
ユーザ・プロセス202、204によって、制御をデバ
イス・ドライバへ移すオペレーティング・システムの要
求を行うことによるI/O操作が発生する。複数のユー
ザ・プロセスによる単独のI/Oデバイス・アダプタの
共有が、カーネルの中で実行しているデバイス・ドライ
バによって管理され、それによって、セキュリティも提
供される。
【0014】本発明は、I/Oデバイス上に物理的に存
在しているメモリ206の一部分をデバイス・ドライバ
のアドレス空間208にマップする。その仮想のハード
ウェアにアクセスする各ユーザ・プロセス202、20
4は、アクセスのためにI/Oデバイス・アダプタを開
くためにオペレーティング・システムに対するリクエス
トを実行することによって、そのI/Oデバイス・アダ
プタ上の物理的メモリ210、212のページサイズの
領域が割り当てられるのが普通である。次にメモリ21
0、212はユーザ・プロセス202、204の仮想ア
ドレス空間にマップされ、それによってユーザ・プロセ
ス202、204がコンテキスト、スイッチなどのオペ
レーティング・システムのオーバヘッドなしにI/Oア
ダプタを直接にプログラムできるようにする。オペレー
ティング・システムが仮想メモリ・アドレス空間を生成
することによって、オペレーティング・システムおよび
I/Oデバイス・ドライバが個々のユーザ・プロセスに
対して非常に特別な機能だけを許可することができる。
この分野の技術に熟達した人であれば、サブ部分21
0、212はI/Oデバイス・アダプタのメモリ206
から直接にマップできること、あるいはサブ部分21
0、212はデバイス・ドライバのアドレス空間208
を通じてそのI/Oデバイス・アダプタのメモリ206
から間接的にマップできることが分かる。
在しているメモリ206の一部分をデバイス・ドライバ
のアドレス空間208にマップする。その仮想のハード
ウェアにアクセスする各ユーザ・プロセス202、20
4は、アクセスのためにI/Oデバイス・アダプタを開
くためにオペレーティング・システムに対するリクエス
トを実行することによって、そのI/Oデバイス・アダ
プタ上の物理的メモリ210、212のページサイズの
領域が割り当てられるのが普通である。次にメモリ21
0、212はユーザ・プロセス202、204の仮想ア
ドレス空間にマップされ、それによってユーザ・プロセ
ス202、204がコンテキスト、スイッチなどのオペ
レーティング・システムのオーバヘッドなしにI/Oア
ダプタを直接にプログラムできるようにする。オペレー
ティング・システムが仮想メモリ・アドレス空間を生成
することによって、オペレーティング・システムおよび
I/Oデバイス・ドライバが個々のユーザ・プロセスに
対して非常に特別な機能だけを許可することができる。
この分野の技術に熟達した人であれば、サブ部分21
0、212はI/Oデバイス・アダプタのメモリ206
から直接にマップできること、あるいはサブ部分21
0、212はデバイス・ドライバのアドレス空間208
を通じてそのI/Oデバイス・アダプタのメモリ206
から間接的にマップできることが分かる。
【0015】I/Oデバイス・アダプタは、仮想アドレ
ス空間210、212の内部での読出しまたは書込みを
検出するためのスヌーピング回路付きで実装されている
のが普通である。その物理的メモリのページに対するア
クセスが検出された場合、データを適切に転送するため
に、特定の所定のアクションのスプリクトがI/Oデバ
イス・アダプタによって実行される。この結果、普通は
I/O操作がユーザ・プロセスのアドレス空間202、
204とI/Oデバイス・アダプタとの間で直接に実行
されることになる。ユーザ・プロセスは210、212
におけるI/O制御レジスタを設定するか、または「叩
く」こと(スパンキング)によってスプリクトの実行を
トリガし、それによってそのスプリクトが実行されるこ
とになる。
ス空間210、212の内部での読出しまたは書込みを
検出するためのスヌーピング回路付きで実装されている
のが普通である。その物理的メモリのページに対するア
クセスが検出された場合、データを適切に転送するため
に、特定の所定のアクションのスプリクトがI/Oデバ
イス・アダプタによって実行される。この結果、普通は
I/O操作がユーザ・プロセスのアドレス空間202、
204とI/Oデバイス・アダプタとの間で直接に実行
されることになる。ユーザ・プロセスは210、212
におけるI/O制御レジスタを設定するか、または「叩
く」こと(スパンキング)によってスプリクトの実行を
トリガし、それによってそのスプリクトが実行されるこ
とになる。
【0016】特定のユーザ・プロセスがその特定の仮想
ハードウェアをプログラムするたびに、そのI/Oデバ
イス・アダプタに対するスクリプトがオペレーティング
・システムによって作られる。ユーザ・プロセスには、
そのユーザ・プロセスがそのI/Oデバイス・アダプタ
に対して非常に特別なアクセス能力を所有することがで
きる、そのユーザ・プロセスのアドレス空間の中に仮想
アドレスが与えられる。
ハードウェアをプログラムするたびに、そのI/Oデバ
イス・アダプタに対するスクリプトがオペレーティング
・システムによって作られる。ユーザ・プロセスには、
そのユーザ・プロセスがそのI/Oデバイス・アダプタ
に対して非常に特別なアクセス能力を所有することがで
きる、そのユーザ・プロセスのアドレス空間の中に仮想
アドレスが与えられる。
【0017】プロトコルのスクリプトは、通常、2つの
機能を行う。その第1の機能はそのソフトウェア・アプ
リケーションが使用しているプロトコルを記述すること
である。これは、アプリケーションの端点をどのように
して見つけるか、そしてアプリケーション固有のデータ
・バッファからプロトコル・ヘッダー・テンプレートの
中にどのように記入するかということを含むが、それに
限定されるわけではない。第2の機能は、そのプロトコ
ルのタイプに基づいて実行されるべき命令の特定のセッ
トを定義することである。プロトコルのタイプごとにそ
れ自身のスクリプトがある。プロトコルのタイプとして
は、TCP/IP、UDP/IP、BYNETライトウ
エイト・データグラム、計画的な共有メモリ、アクティ
ブ・メッセージ・ハンドラ、SCSIおよびFile
Channelなどがあるが、それらに限定されるわけ
ではない。
機能を行う。その第1の機能はそのソフトウェア・アプ
リケーションが使用しているプロトコルを記述すること
である。これは、アプリケーションの端点をどのように
して見つけるか、そしてアプリケーション固有のデータ
・バッファからプロトコル・ヘッダー・テンプレートの
中にどのように記入するかということを含むが、それに
限定されるわけではない。第2の機能は、そのプロトコ
ルのタイプに基づいて実行されるべき命令の特定のセッ
トを定義することである。プロトコルのタイプごとにそ
れ自身のスクリプトがある。プロトコルのタイプとして
は、TCP/IP、UDP/IP、BYNETライトウ
エイト・データグラム、計画的な共有メモリ、アクティ
ブ・メッセージ・ハンドラ、SCSIおよびFile
Channelなどがあるが、それらに限定されるわけ
ではない。
【0018】仮想ハードウェアは仮想レジスタとも呼ば
れる。仮想レジスタは、単独のユーザ・プロセスが与え
られたI/Oデバイス・アダプタのアドレス可能なレジ
スタについて持っているビューを記述するためによく使
われる。
れる。仮想レジスタは、単独のユーザ・プロセスが与え
られたI/Oデバイス・アダプタのアドレス可能なレジ
スタについて持っているビューを記述するためによく使
われる。
【0019】概念的には、本発明は各ユーザ・プロセス
にそれ自身のI/Oデバイス・アダプタを提供し、それ
によってユーザ・プロセスおよびI/Oデバイス・アダ
プタが論理的に互いに見えるようにするものであると考
えることができる。そのユーザ・プロセスはメモリへの
書込みによって直接にデータ転送を起動し、それによっ
て、データ転送要求にサービスするためにオペレーティ
ング・システムが使われた場合に発生することになるオ
ーバヘッド処理を回避している。ユーザ・プロセスは、
メモリの読出しによってデータ転送のステータスを判定
する。オペレーティング・システムおよびI/Oデバイ
ス・アダプタは、複数のユーザ・プロセスが存在してい
ても、必要に応じて仮想のハードウェアのリソースを自
由に割り当てることができる。
にそれ自身のI/Oデバイス・アダプタを提供し、それ
によってユーザ・プロセスおよびI/Oデバイス・アダ
プタが論理的に互いに見えるようにするものであると考
えることができる。そのユーザ・プロセスはメモリへの
書込みによって直接にデータ転送を起動し、それによっ
て、データ転送要求にサービスするためにオペレーティ
ング・システムが使われた場合に発生することになるオ
ーバヘッド処理を回避している。ユーザ・プロセスは、
メモリの読出しによってデータ転送のステータスを判定
する。オペレーティング・システムおよびI/Oデバイ
ス・アダプタは、複数のユーザ・プロセスが存在してい
ても、必要に応じて仮想のハードウェアのリソースを自
由に割り当てることができる。
【0020】I/Oデバイス・アダプタは数百キロバイ
トから数メガバイトまでの範囲の任意の量のランダム・
アクセス・メモリ(RAM)を通常持つことができ、そ
のメモリは単独の通信ノードにおけるいくつかのユーザ
・プロセスをマップするために使うことができるページ
・サイズ単位でメモリを割り当てることによって、各ユ
ーザ・プロセスが1つの仮想ハードウェア空間210、
212を持つことができ、それは同じI/Oデバイス・
アダプタを共有している可能性があるすべての他のプロ
セスから安全に保護される。単独のI/Oデバイス・ア
ダプタを共有する複数のソフトウェア・プロセス間のセ
キュリティは、ほとんどのプロセッサが提供している仮
想メモリ機能に関連してオペレーティング・システムに
よって維持管理される。
トから数メガバイトまでの範囲の任意の量のランダム・
アクセス・メモリ(RAM)を通常持つことができ、そ
のメモリは単独の通信ノードにおけるいくつかのユーザ
・プロセスをマップするために使うことができるページ
・サイズ単位でメモリを割り当てることによって、各ユ
ーザ・プロセスが1つの仮想ハードウェア空間210、
212を持つことができ、それは同じI/Oデバイス・
アダプタを共有している可能性があるすべての他のプロ
セスから安全に保護される。単独のI/Oデバイス・ア
ダプタを共有する複数のソフトウェア・プロセス間のセ
キュリティは、ほとんどのプロセッサが提供している仮
想メモリ機能に関連してオペレーティング・システムに
よって維持管理される。
【0021】I/Oデバイス・アダプタがイーサネット
・デバイスなどのネットワーク・インターフェースを制
御する場合、そのオペレーティング・システムによって
ユーザ・プロセスに対して許可されるアクセス権は、伝
送制御プロトコル(TCP)のアドレスまたはソケット
と類似している可能性がある。
・デバイスなどのネットワーク・インターフェースを制
御する場合、そのオペレーティング・システムによって
ユーザ・プロセスに対して許可されるアクセス権は、伝
送制御プロトコル(TCP)のアドレスまたはソケット
と類似している可能性がある。
【0022】TCPのソケットは通信のトランスポート
・レイヤーによって定義され、通信が発生する一組のメ
モリ・アドレスを定義する。これらのトランスポート・
アドレスは、プロセスが互いに通信できるようにするネ
ットワーク・ワイドのネーム空間を形成する。この分野
の技術においてよく知られているTCPのソケットおよ
びパケットの形式および構造の説明は、多くの参考資料
の中に記載されている。例えば、アンドリュー S.タ
ンネンバウムによる「コンピュータ・ネットワーク(C
omputer Networks)」Prentic
e−Hall、ニュージャージー、1981の326〜
327、373〜377ページなどがある。これは参照
によって本明細書に組み込まれている。
・レイヤーによって定義され、通信が発生する一組のメ
モリ・アドレスを定義する。これらのトランスポート・
アドレスは、プロセスが互いに通信できるようにするネ
ットワーク・ワイドのネーム空間を形成する。この分野
の技術においてよく知られているTCPのソケットおよ
びパケットの形式および構造の説明は、多くの参考資料
の中に記載されている。例えば、アンドリュー S.タ
ンネンバウムによる「コンピュータ・ネットワーク(C
omputer Networks)」Prentic
e−Hall、ニュージャージー、1981の326〜
327、373〜377ページなどがある。これは参照
によって本明細書に組み込まれている。
【0023】通常、ユーザ・プロセスが直接のアクセス
を得ることができる唯一の機能は、指定されたソケット
またはトランスポート・アドレス範囲上でバイトを送信
および受信することである。そのユーザ・プロセスは必
ずしもそのメディア(例えば、イーサネット・ネットワ
ーク)上で任意のパケットを出力するための許可が与え
られている必要はない。この分野の技術に熟達した人で
あれば、本発明はイーサネットまたは他のインターコネ
クト通信デバイスに対して適用されるだけでなく、マル
チユーザ・オペレーティング・システムによって使われ
るほとんどすべてのI/Oデバイス・アダプタに対して
も適用されることが理解される。
を得ることができる唯一の機能は、指定されたソケット
またはトランスポート・アドレス範囲上でバイトを送信
および受信することである。そのユーザ・プロセスは必
ずしもそのメディア(例えば、イーサネット・ネットワ
ーク)上で任意のパケットを出力するための許可が与え
られている必要はない。この分野の技術に熟達した人で
あれば、本発明はイーサネットまたは他のインターコネ
クト通信デバイスに対して適用されるだけでなく、マル
チユーザ・オペレーティング・システムによって使われ
るほとんどすべてのI/Oデバイス・アダプタに対して
も適用されることが理解される。
【0024】図3は本発明による高速および低速のアプ
リケーション302、304、および306のシステム
・データ・フローを記述している流れ図である。従来の
低速のアプリケーション306は普通のストリーム処理
308を使って情報をパススルー・ドライバ310へ送
信する。パススルー・ドライバ310は、I/Oデバイ
ス・アダプタ314の物理的ハードウェア・レジスタ3
20を初期化し、それ以降でI/Oデバイス・アダプタ
314を通して汎用インターフェース322へ情報を転
送するようにする。本発明によると、高速のユーザ・ア
プリケーション302および304は、セットアップ・
ドライバ312を直接使って、その物理的ハードウェア
・レジスタ320を初期化し、次にI/Oデバイス・ア
ダプタ314を通して汎用インターフェース322に対
して仮想ハードウェア316および318経由で情報を
送信する。従って、普通のストリームの処理380およ
びパススルー・ドライバ310のオーバヘッドは本発明
の仮想ハードウェア316および318を使うことによ
って消去され、そして高速のアプリケーション302お
よび304は低速のアプリケーション306より迅速に
情報を送信および受信することができる。結果として、
本発明はより広いバンド幅、より短い潜在時間、より少
ないシステム・オーバヘッド、およびより短いパス・レ
ングスを提供する。
リケーション302、304、および306のシステム
・データ・フローを記述している流れ図である。従来の
低速のアプリケーション306は普通のストリーム処理
308を使って情報をパススルー・ドライバ310へ送
信する。パススルー・ドライバ310は、I/Oデバイ
ス・アダプタ314の物理的ハードウェア・レジスタ3
20を初期化し、それ以降でI/Oデバイス・アダプタ
314を通して汎用インターフェース322へ情報を転
送するようにする。本発明によると、高速のユーザ・ア
プリケーション302および304は、セットアップ・
ドライバ312を直接使って、その物理的ハードウェア
・レジスタ320を初期化し、次にI/Oデバイス・ア
ダプタ314を通して汎用インターフェース322に対
して仮想ハードウェア316および318経由で情報を
送信する。従って、普通のストリームの処理380およ
びパススルー・ドライバ310のオーバヘッドは本発明
の仮想ハードウェア316および318を使うことによ
って消去され、そして高速のアプリケーション302お
よび304は低速のアプリケーション306より迅速に
情報を送信および受信することができる。結果として、
本発明はより広いバンド幅、より短い潜在時間、より少
ないシステム・オーバヘッド、およびより短いパス・レ
ングスを提供する。
【0025】図4は、本発明によるプロセスと外部デー
タ接続との間のデータの直接のアプリケーション・イン
ターフェース(DAI)およびルーチングを記述してい
るブロック図である。プロセス402および404は、
DAIインターフェース408を通してインターコネク
ト410(例えば、I/Oデバイス・アダプタ)との間
で情報を直接に送信および受信する。インターコネクト
410から入ってくる情報は、従来のオペレーティング
・システムのインターフェース406を使うのではな
く、仮想のハードウェアおよびレジスタを使うことによ
って、プロセス402または404に対して直接に回送
される。
タ接続との間のデータの直接のアプリケーション・イン
ターフェース(DAI)およびルーチングを記述してい
るブロック図である。プロセス402および404は、
DAIインターフェース408を通してインターコネク
ト410(例えば、I/Oデバイス・アダプタ)との間
で情報を直接に送信および受信する。インターコネクト
410から入ってくる情報は、従来のオペレーティング
・システムのインターフェース406を使うのではな
く、仮想のハードウェアおよびレジスタを使うことによ
って、プロセス402または404に対して直接に回送
される。
【0026】図5はメイン・メモリと本発明によるI/
Oデバイス・アダプタのメモリとの間のシステム構成を
示しているブロック図である。メイン・メモリ502の
実装は、ハードウェア・レジスタ504およびバッファ
・プール506を含んでいる。I/Oデバイス・アダプ
タの実装は、そのアダプタのメモリ512の中にソフト
ウェア・レジスタ508および物理アドレスのバッファ
・マップ510を含んでいる。メモリ512の中の端点
テーブル514は、個々のユーザ・プロセスに対する複
数のメモリ・ページを構成するために使われる。端点テ
ーブル514の中の各エントリーは、ユーザ・プロセス
に関係付けられているメイン・メモリ502の部分に対
してI/Oデバイス・アダプタのメモリ512からデー
タまたは情報が転送される方法を示している、メモリ5
12の中の以前に定義されたプロトコル・スプリクト5
12以外に、複数の通信プロトコルを収容するために、
メモリ512の中の各種のプロトコル・データ518を
ポイントする。
Oデバイス・アダプタのメモリとの間のシステム構成を
示しているブロック図である。メイン・メモリ502の
実装は、ハードウェア・レジスタ504およびバッファ
・プール506を含んでいる。I/Oデバイス・アダプ
タの実装は、そのアダプタのメモリ512の中にソフト
ウェア・レジスタ508および物理アドレスのバッファ
・マップ510を含んでいる。メモリ512の中の端点
テーブル514は、個々のユーザ・プロセスに対する複
数のメモリ・ページを構成するために使われる。端点テ
ーブル514の中の各エントリーは、ユーザ・プロセス
に関係付けられているメイン・メモリ502の部分に対
してI/Oデバイス・アダプタのメモリ512からデー
タまたは情報が転送される方法を示している、メモリ5
12の中の以前に定義されたプロトコル・スプリクト5
12以外に、複数の通信プロトコルを収容するために、
メモリ512の中の各種のプロトコル・データ518を
ポイントする。
【0027】通常、ユーザ・プロセスがデバイス・ドラ
イバをオープンする時、そのプロセスはそのタイプを指
定する。それは、UDPデータグラム、ソースのポート
番号またはレジスタのアドレスを含むことができるが、
これらに限定されるわけではない。また、ユーザ・プロ
セスは同期または非同期の接続のいずれかを指定する。
デバイス・ドライバは、レジスタ508および504お
よび端点テーブル514、および端点プロトコル・デー
タ518をセットアップする。プロトコル・スクリプト
516は普通は端点データ・タイプに基づいており、端
点プロトコル・データ518はプロトコル固有のデータ
に依存する。
イバをオープンする時、そのプロセスはそのタイプを指
定する。それは、UDPデータグラム、ソースのポート
番号またはレジスタのアドレスを含むことができるが、
これらに限定されるわけではない。また、ユーザ・プロ
セスは同期または非同期の接続のいずれかを指定する。
デバイス・ドライバは、レジスタ508および504お
よび端点テーブル514、および端点プロトコル・デー
タ518をセットアップする。プロトコル・スクリプト
516は普通は端点データ・タイプに基づいており、端
点プロトコル・データ518はプロトコル固有のデータ
に依存する。
【0028】本発明の好適な実施例はローカル読出し、
リモート書込みのメモリ・アクセスを利用することによ
ってさらに機能を高めることができる。通常、ユーザ・
プロセスはSTARTINGADDRESS(開始アド
レス)、LENGTH(長さ)、GO(実行)、および
STATUS(ステータス)を含む4つの仮想レジスタ
を使うことによって、スクリプトを実行させる。ユーザ
・プロセスは、仮想レジスタSTARTINGADDR
ESSおよびLENGTHの中の値によって指定される
ロケーションにおいてメモリに情報を先ず書き込むこと
が好ましい。次に、そのプロセスは仮想レジスタGOに
アクセスして、そのスクリプトの実行を開始する。最後
に、ユーザ・プロセスは、仮想レジスタSTATUSに
アクセスするか、それをポールして、このI/Oリクエ
ストの動作または完了についての情報を知る。
リモート書込みのメモリ・アクセスを利用することによ
ってさらに機能を高めることができる。通常、ユーザ・
プロセスはSTARTINGADDRESS(開始アド
レス)、LENGTH(長さ)、GO(実行)、および
STATUS(ステータス)を含む4つの仮想レジスタ
を使うことによって、スクリプトを実行させる。ユーザ
・プロセスは、仮想レジスタSTARTINGADDR
ESSおよびLENGTHの中の値によって指定される
ロケーションにおいてメモリに情報を先ず書き込むこと
が好ましい。次に、そのプロセスは仮想レジスタGOに
アクセスして、そのスクリプトの実行を開始する。最後
に、ユーザ・プロセスは、仮想レジスタSTATUSに
アクセスするか、それをポールして、このI/Oリクエ
ストの動作または完了についての情報を知る。
【0029】4つのレジスタがすべてI/Oデバイス・
アダプタ上のメモリの中にあった場合、ユーザ・プロセ
スがSTATUS仮想レジスタを頻繁にポールすると、
最適の性能が得られない場合がある。ローカル読出し、
リモート書込みの戦略を実施することによって、本発明
の性能を改善することができる。そのような戦略によっ
て、本発明は、読み出しているエンティティに最も近い
場所で読まれる可能性のある値を記憶し、一方、書かれ
る可能性のある値は、書込みのエンティティから最も遠
く離れているロケーションに記憶する。この結果、ユー
ザ・プロセスによって読まれる確率の高い値がキャッシ
ュ可能なメイン・メモリの中に記憶され、これによっ
て、そのキャッシュされた値にアクセスするのに必要な
時間が最短化される。I/Oデバイス・アダプタによっ
て読まれる可能性の高い値はI/Oデバイス・アダプタ
上のキャッシュされないメモリの中に記憶される。従っ
て、レジスタSTARTINGADDRESS、LEN
GTH、およびGOは、I/Oアダプタ上のキャッシュ
されないメモリの中に物理的に置かれることが好まし
く、一方STATUSレジスタは、そのユーザのプロセ
スの仮想アドレス空間の中にマップされたメイン・メモ
リの中のキャッシュ可能な1ページの中にあることが好
ましい。
アダプタ上のメモリの中にあった場合、ユーザ・プロセ
スがSTATUS仮想レジスタを頻繁にポールすると、
最適の性能が得られない場合がある。ローカル読出し、
リモート書込みの戦略を実施することによって、本発明
の性能を改善することができる。そのような戦略によっ
て、本発明は、読み出しているエンティティに最も近い
場所で読まれる可能性のある値を記憶し、一方、書かれ
る可能性のある値は、書込みのエンティティから最も遠
く離れているロケーションに記憶する。この結果、ユー
ザ・プロセスによって読まれる確率の高い値がキャッシ
ュ可能なメイン・メモリの中に記憶され、これによっ
て、そのキャッシュされた値にアクセスするのに必要な
時間が最短化される。I/Oデバイス・アダプタによっ
て読まれる可能性の高い値はI/Oデバイス・アダプタ
上のキャッシュされないメモリの中に記憶される。従っ
て、レジスタSTARTINGADDRESS、LEN
GTH、およびGOは、I/Oアダプタ上のキャッシュ
されないメモリの中に物理的に置かれることが好まし
く、一方STATUSレジスタは、そのユーザのプロセ
スの仮想アドレス空間の中にマップされたメイン・メモ
リの中のキャッシュ可能な1ページの中にあることが好
ましい。
【0030】イーサネット・メディア上でのユーザ・プ
ロセスによって送信されるUDPデータグラム602の
一例が付録1に示されている。しかし、この分野の技術
に熟達した人であれば、本発明は他のアクセス方法また
はプロトコルと同様に、LANプロトコル、ディスク、
CDROM、および磁気テープなどの二次記憶装置に対
しても適用できることが理解される。
ロセスによって送信されるUDPデータグラム602の
一例が付録1に示されている。しかし、この分野の技術
に熟達した人であれば、本発明は他のアクセス方法また
はプロトコルと同様に、LANプロトコル、ディスク、
CDROM、および磁気テープなどの二次記憶装置に対
しても適用できることが理解される。
【0031】付録1の例は、イーサネット・メディア上
で伝送される可能性のある、サンプルUDPデータグラ
ム602の実際のバイトを示している。このイーサネッ
ト・パケットには4つの別々の部分がある。それらは
(1)イーサネット・ヘッダー604、(2)IPヘッ
ダー606、(3)UDPヘッダー608、および
(4)ユーザ・データ610である。そのすべてのバイ
トは、構成要素のフィールド間でのブレークまたはデリ
ニエーションなしで切れ目なく、そのメディア上で送信
され、必要な場合、データグラム602の終りに十分な
数のパッド・バイトが付けられる。
で伝送される可能性のある、サンプルUDPデータグラ
ム602の実際のバイトを示している。このイーサネッ
ト・パケットには4つの別々の部分がある。それらは
(1)イーサネット・ヘッダー604、(2)IPヘッ
ダー606、(3)UDPヘッダー608、および
(4)ユーザ・データ610である。そのすべてのバイ
トは、構成要素のフィールド間でのブレークまたはデリ
ニエーションなしで切れ目なく、そのメディア上で送信
され、必要な場合、データグラム602の終りに十分な
数のパッド・バイトが付けられる。
【0032】本発明において、ユーザ・プロセスに対し
て与えられるアクセス特権は非常に狭いものである。各
ユーザ・プロセスは基本的に実際のユーザ・データ61
0を除いて、データグラム602についてのほとんどあ
らゆる事項が基本的にあらかじめネゴシエートされてい
る。これは3つのヘッダー領域604、606、および
608の中のほとんどのフィールドがあらかじめ決めら
れていることを意味する。
て与えられるアクセス特権は非常に狭いものである。各
ユーザ・プロセスは基本的に実際のユーザ・データ61
0を除いて、データグラム602についてのほとんどあ
らゆる事項が基本的にあらかじめネゴシエートされてい
る。これは3つのヘッダー領域604、606、および
608の中のほとんどのフィールドがあらかじめ決めら
れていることを意味する。
【0033】この例の中で、ユーザ・プロセスおよびデ
バイス・ドライバは、付録1に示されているあらかじめ
ネゴシエートされた次のフィールドを備えている。
バイス・ドライバは、付録1に示されているあらかじめ
ネゴシエートされた次のフィールドを備えている。
【0034】(1)イーサネット・ヘッダー604(タ
ーゲットのイーサネット・アドレス、ソースのイーサネ
ット・アドレス、およびプロトコル・タイプ);(2)
IPヘッダー606(バージョン、IPヘッダー長、サ
ービス・タイプ、フラグ、フラグメント・オフセット、
タイム・ツー・リブ、IPプロトコル、ソースのIPア
ドレス、およびデスティネーションのIPアドレス);
および(3)UDPヘッダー608(ソース・ポートお
よびデスティネーション・ポート)である。付録1の
中、およびユーザ・データ610の中の影付きのフィー
ルドだけがデータグラムごとに変更される必要がある。
ーゲットのイーサネット・アドレス、ソースのイーサネ
ット・アドレス、およびプロトコル・タイプ);(2)
IPヘッダー606(バージョン、IPヘッダー長、サ
ービス・タイプ、フラグ、フラグメント・オフセット、
タイム・ツー・リブ、IPプロトコル、ソースのIPア
ドレス、およびデスティネーションのIPアドレス);
および(3)UDPヘッダー608(ソース・ポートお
よびデスティネーション・ポート)である。付録1の
中、およびユーザ・データ610の中の影付きのフィー
ルドだけがデータグラムごとに変更される必要がある。
【0035】本発明に従って実行されるステップをさら
に詳しく説明するために、ユーザ・プロセスが本発明の
中で記述される方法によってI/Oデバイス・アダプタ
に対するアクセスを起動したと仮定する。さらに、ユー
ザ・プロセスは、変数USERDATA_ADDRES
SおよびUSERDATA_LENGTHの中の値によ
って識別されるロケーションにおいて、その仮想アドレ
ス空間の中に存在しているデータグラム602のユーザ
・データ610を用意していると仮定する。また、アダ
プタのメモリの中の仮想レジスタ210、212、31
6、318、または508に対するアドレスがポインタ
「vhr_p」(仮想ハードウェア・リモート・ポイン
タ)の中に格納され、そしてユーザ・プロセス504の
仮想アドレス空間の中の制御情報のためのアドレスがポ
インタ「vhl_p」(仮想ハードウェアのローカル・
ポインタ)の中に格納されていると仮定する。
に詳しく説明するために、ユーザ・プロセスが本発明の
中で記述される方法によってI/Oデバイス・アダプタ
に対するアクセスを起動したと仮定する。さらに、ユー
ザ・プロセスは、変数USERDATA_ADDRES
SおよびUSERDATA_LENGTHの中の値によ
って識別されるロケーションにおいて、その仮想アドレ
ス空間の中に存在しているデータグラム602のユーザ
・データ610を用意していると仮定する。また、アダ
プタのメモリの中の仮想レジスタ210、212、31
6、318、または508に対するアドレスがポインタ
「vhr_p」(仮想ハードウェア・リモート・ポイン
タ)の中に格納され、そしてユーザ・プロセス504の
仮想アドレス空間の中の制御情報のためのアドレスがポ
インタ「vhl_p」(仮想ハードウェアのローカル・
ポインタ)の中に格納されていると仮定する。
【0036】I/Oデバイス・アダプタをトリガするユ
ーザ・プロセスのプログラミングの一例が以下に示され
る。
ーザ・プロセスのプログラミングの一例が以下に示され
る。
【0037】
【数1】 この分野の技術に熟達した人であれば、vhr_p−>
GOレジスタの「スパンキング」すなわち、その値を1
に設定することによって、長さの値をvhr_p−>L
ENGTHレジスタの中に格納するのと組み合わせて、
必要なI/Oアクセスの回数を減らすことができること
が分かる。
GOレジスタの「スパンキング」すなわち、その値を1
に設定することによって、長さの値をvhr_p−>L
ENGTHレジスタの中に格納するのと組み合わせて、
必要なI/Oアクセスの回数を減らすことができること
が分かる。
【0038】付録2は、I/Oデバイス・アダプタのメ
モリの中に存在しているUDPデータグラムのテンプレ
ート702(ユーザ・データ領域なし)を示している。
ユーザ・プロセスは、その仮想アドレス空間の中にユー
ザ・データに対する開始アドレスおよび長さを提供し、
GOレジスタを「スパンク」して、そのI/Oデバイス
・アダプタの所定のスクリプトの実行をトリガする。I
/Oデバイス・アダプタは、I/Oデバイス・アダプタ
のメモリの中にユーザ・プロセスによって提供されてい
るユーザ・データを格納してから、メディア上でその完
成したUDPデータグラム702を送信する。
モリの中に存在しているUDPデータグラムのテンプレ
ート702(ユーザ・データ領域なし)を示している。
ユーザ・プロセスは、その仮想アドレス空間の中にユー
ザ・データに対する開始アドレスおよび長さを提供し、
GOレジスタを「スパンク」して、そのI/Oデバイス
・アダプタの所定のスクリプトの実行をトリガする。I
/Oデバイス・アダプタは、I/Oデバイス・アダプタ
のメモリの中にユーザ・プロセスによって提供されてい
るユーザ・データを格納してから、メディア上でその完
成したUDPデータグラム702を送信する。
【0039】I/Oデバイス・アダプタをトリガするプ
ログラミングの一例が以下に示されている。
ログラミングの一例が以下に示されている。
【0040】
【数2】 上記の機能を実行するスクリプトは、ユーザ・プロセス
がそのアダプタのメモリの中にプログラムしたUSER
DATA_ADDRESSおよびUSERDATA_L
ENGTHを提供する。この情報はデータグラム602
が違うと、かなり変わる可能性がある。そのスクリプト
は特定のソフトウェア・レジスタ(図5の中の508ま
たは、図3の中の316)に基づいた適切なデータグラ
ム702のテンプレートが渡されるデータグラム702
のタイプの違い(例えば、UDPまたはTCP)に対し
て、異なるスクリプトが存在する。また、そのスクリプ
トは同じユーザに対する複数のデータグラム602が同
時に転送できるように、データグラム702のテンプレ
ート(図示せず)のコピーを行う可能性が高い。
がそのアダプタのメモリの中にプログラムしたUSER
DATA_ADDRESSおよびUSERDATA_L
ENGTHを提供する。この情報はデータグラム602
が違うと、かなり変わる可能性がある。そのスクリプト
は特定のソフトウェア・レジスタ(図5の中の508ま
たは、図3の中の316)に基づいた適切なデータグラ
ム702のテンプレートが渡されるデータグラム702
のタイプの違い(例えば、UDPまたはTCP)に対し
て、異なるスクリプトが存在する。また、そのスクリプ
トは同じユーザに対する複数のデータグラム602が同
時に転送できるように、データグラム702のテンプレ
ート(図示せず)のコピーを行う可能性が高い。
【0041】上記のudpscriptプロシージャの
内部で、nextid()関数はIPプロトコルによっ
て要求される単調増加の16ビット・カウンタを提供す
る。ipchecksum()関数は、データグラム7
02のIPヘッダー706の部分に対するチェックサム
を実行する。vtophys()関数はアダプタが使用
できる物理アドレスへのユーザ提供の仮想アドレスの変
換を実行する。すべての可能性において、アダプタはユ
ーザ・プロセスの仮想アドレス空間について極めて限ら
れた知識を持つことになる。恐らく非常に限られた範
囲、例えば、単独のページのような小さい範囲に対して
仮想アドレスを物理アドレスにマップする方法だけを知
っているに過ぎない。そのようなバッファに対するユー
ザ・プロセスの仮想アドレス空間の中のページは固定さ
れている必要がある。udpscriptプロシージャ
は、ユーザ・データがページの境界にまたがることが許
されている場合に機能拡張される必要がある。udpc
hecksum()プロシージャは、UDPヘッダー7
08およびユーザ・データ(図示せず)の両方に対する
チェックサムの値を生成する。
内部で、nextid()関数はIPプロトコルによっ
て要求される単調増加の16ビット・カウンタを提供す
る。ipchecksum()関数は、データグラム7
02のIPヘッダー706の部分に対するチェックサム
を実行する。vtophys()関数はアダプタが使用
できる物理アドレスへのユーザ提供の仮想アドレスの変
換を実行する。すべての可能性において、アダプタはユ
ーザ・プロセスの仮想アドレス空間について極めて限ら
れた知識を持つことになる。恐らく非常に限られた範
囲、例えば、単独のページのような小さい範囲に対して
仮想アドレスを物理アドレスにマップする方法だけを知
っているに過ぎない。そのようなバッファに対するユー
ザ・プロセスの仮想アドレス空間の中のページは固定さ
れている必要がある。udpscriptプロシージャ
は、ユーザ・データがページの境界にまたがることが許
されている場合に機能拡張される必要がある。udpc
hecksum()プロシージャは、UDPヘッダー7
08およびユーザ・データ(図示せず)の両方に対する
チェックサムの値を生成する。
【0042】一度はudpchecksum()関数に
よって行われる計算のために、そして二度目はメディア
上の転送のために、I/Oバス上でアダプタがユーザ・
データに二度のアクセスを強制されるのは好ましくな
い。代わりに、そのアダプタは、バス上でメイン・メモ
リへのダイレクト・メモリ・アクセス(DMA)を使っ
て、ユーザ・プロセスの仮想アドレス空間から必要なユ
ーザ・データを検索し、そのユーザ・データをそのアダ
プタのメモリの或る部分の中に取り出して、より効率的
に参照できるようにする可能性が高くなる。上記のud
pscript()プロシージャの中で実行されるプロ
グラミング・ステップは、そのことを反映するように変
更される必要がある。
よって行われる計算のために、そして二度目はメディア
上の転送のために、I/Oバス上でアダプタがユーザ・
データに二度のアクセスを強制されるのは好ましくな
い。代わりに、そのアダプタは、バス上でメイン・メモ
リへのダイレクト・メモリ・アクセス(DMA)を使っ
て、ユーザ・プロセスの仮想アドレス空間から必要なユ
ーザ・データを検索し、そのユーザ・データをそのアダ
プタのメモリの或る部分の中に取り出して、より効率的
に参照できるようにする可能性が高くなる。上記のud
pscript()プロシージャの中で実行されるプロ
グラミング・ステップは、そのことを反映するように変
更される必要がある。
【0043】多くの明白な実装の選択肢があり、このu
dpscript()プロシージャにおけるプログラミ
ングは、それだけですべてが尽されているわけではな
い。例えば、或るスクリプトによって、ユーザが異なる
UDPターゲット・ポート、または異なるデスティネー
ションIPアドレスを指定することができる。ユーザ・
プロセスに対して提供されるより多くのオプションに基
づいた性能およびセキュリティのトレードオフがあり得
る。ここに示されている例は、本発明のエッセンスを示
すことが単に意図されているだけであり、すべてを尽し
ているわけではない。
dpscript()プロシージャにおけるプログラミ
ングは、それだけですべてが尽されているわけではな
い。例えば、或るスクリプトによって、ユーザが異なる
UDPターゲット・ポート、または異なるデスティネー
ションIPアドレスを指定することができる。ユーザ・
プロセスに対して提供されるより多くのオプションに基
づいた性能およびセキュリティのトレードオフがあり得
る。ここに示されている例は、本発明のエッセンスを示
すことが単に意図されているだけであり、すべてを尽し
ているわけではない。
【0044】まとめると、本発明は、仮想レジスタを使
ってI/Oデバイス・アダプタを直接制御し、高速のデ
ータ転送ができるようにする方法を開示している。その
方法はI/Oアダプタのメイン・メモリの内部に仮想レ
ジスタ・メモリ接続のためのソケットの端点を初期化す
る。次に、入ってくるデータは、その仮想メモリに書き
込まれ、ポーリングまたは「スヌーピング」ハードウェ
アによって検出される。スヌーピング・ハードウェア
は、仮想レジスタへの書込みを検出した後、システム・
バスのコントローラに対する例外を生成する。次に、バ
ス・コントローラはデータをI/Oデバイス・アダプタ
に対して転送し、I/Oデバイス・アダプタのレジスタ
を起動して所定のスクリプトを実行し、そのデータを処
理する。
ってI/Oデバイス・アダプタを直接制御し、高速のデ
ータ転送ができるようにする方法を開示している。その
方法はI/Oアダプタのメイン・メモリの内部に仮想レ
ジスタ・メモリ接続のためのソケットの端点を初期化す
る。次に、入ってくるデータは、その仮想メモリに書き
込まれ、ポーリングまたは「スヌーピング」ハードウェ
アによって検出される。スヌーピング・ハードウェア
は、仮想レジスタへの書込みを検出した後、システム・
バスのコントローラに対する例外を生成する。次に、バ
ス・コントローラはデータをI/Oデバイス・アダプタ
に対して転送し、I/Oデバイス・アダプタのレジスタ
を起動して所定のスクリプトを実行し、そのデータを処
理する。
【0045】さらに、本発明はオペレーティング・シス
テムを使ってユーザ・プロセスのための仮想メモリ・ア
ドレス空間を初期化することによって、システムおよび
I/Oデバイスのセキュリティを提供するように構造化
される。これに加えて、同時ユーザ・プロセスの数はス
ケーラブルであり、I/Oデバイスの内部の物理的レジ
スタの個数による制約は受けない。これはI/Oデバイ
スのメモリの小部分をユーザ・プロセスの仮想アドレス
空間に直接マップすることによって実施される。それは
ユーザ・プロセスが準備されたI/Oスクリプトの実行
を直接にトリガするための安全な方法を提供する。
テムを使ってユーザ・プロセスのための仮想メモリ・ア
ドレス空間を初期化することによって、システムおよび
I/Oデバイスのセキュリティを提供するように構造化
される。これに加えて、同時ユーザ・プロセスの数はス
ケーラブルであり、I/Oデバイスの内部の物理的レジ
スタの個数による制約は受けない。これはI/Oデバイ
スのメモリの小部分をユーザ・プロセスの仮想アドレス
空間に直接マップすることによって実施される。それは
ユーザ・プロセスが準備されたI/Oスクリプトの実行
を直接にトリガするための安全な方法を提供する。
【0046】本発明の好適な実施例は、通常、単独のメ
モリ・アドレスに対する読出しまたは書込みの操作を変
換するためにI/Oデバイス・アダプタ内に回路を実装
し、それによって所定のスクリプトを実行させるように
する。また、そのようなスクリプトは動的に変更されて
I/Oデバイス・アダプタのアドレス空間のメモリ・ロ
ケーションまたはサイズなどの環境特性を提供すること
もできる。
モリ・アドレスに対する読出しまたは書込みの操作を変
換するためにI/Oデバイス・アダプタ内に回路を実装
し、それによって所定のスクリプトを実行させるように
する。また、そのようなスクリプトは動的に変更されて
I/Oデバイス・アダプタのアドレス空間のメモリ・ロ
ケーションまたはサイズなどの環境特性を提供すること
もできる。
【0047】従って、本発明はI/O操作の効率を次の
方法で向上させることが分かる。
方法で向上させることが分かる。
【0048】1.中間的なメモリ間コピーなしでユーザ
のアドレス空間の情報を読み書きすること。
のアドレス空間の情報を読み書きすること。
【0049】2.単独のノードにおいて複数のユーザ・
プロセスから1つのI/Oデバイスに同時にアクセスす
ること。
プロセスから1つのI/Oデバイスに同時にアクセスす
ること。
【0050】3.I/O当たりのベースで、オペレーテ
ィング・システムに対する呼出しおよびそれに付随する
コンテキスト・スイッチをなくすること。
ィング・システムに対する呼出しおよびそれに付随する
コンテキスト・スイッチをなくすること。
【0051】4.オペレーティング・システムを使って
ユーザ・プロセスの仮想メモリ・アドレス空間を初期化
することによって、I/Oデバイスに対するシステム・
セキュリティを維持すること。
ユーザ・プロセスの仮想メモリ・アドレス空間を初期化
することによって、I/Oデバイスに対するシステム・
セキュリティを維持すること。
【0052】5.オペレーティング・システムによって
認可されているリソース割り当てのポリシーおよび許可
の完全な制御下でI/Oデバイスにアクセスすること。
認可されているリソース割り当てのポリシーおよび許可
の完全な制御下でI/Oデバイスにアクセスすること。
【0053】6.UNIX、OS/2、Microso
ft Windows、Microsoft Wind
ows NT、またはNovell Netwareな
どのよく知られた複数の標準オペレーティング・システ
ムで動作すること。
ft Windows、Microsoft Wind
ows NT、またはNovell Netwareな
どのよく知られた複数の標準オペレーティング・システ
ムで動作すること。
【0054】7.I/Oデバイスの潜在時間の短い、高
性能の制御を提供すること。
性能の制御を提供すること。
【0055】この分野の技術に熟達した人であれば、本
発明の仮想ハードウェア実装を使うことは、ユーザ・プ
ロセスが同じI/Oデバイス・アダプタ上での標準のデ
バイス・ドライバを同時に使うことを禁止するものでは
ないことが分かる。すなわち、ユーザ・プロセスは本発
明の仮想ハードウェアを使って与えられたI/Oデバイ
ス・アダプタに対する直接のストリーム・ライン型のパ
スを提供し、一方、そのI/Oデバイスに対する標準の
低速のアクセスが、通常のストリームまたは他のデバイ
ス・ドライバによって同じシステム内で他のユーザ・プ
ロセスに対して同時に提供されるようにすることができ
るということである。
発明の仮想ハードウェア実装を使うことは、ユーザ・プ
ロセスが同じI/Oデバイス・アダプタ上での標準のデ
バイス・ドライバを同時に使うことを禁止するものでは
ないことが分かる。すなわち、ユーザ・プロセスは本発
明の仮想ハードウェアを使って与えられたI/Oデバイ
ス・アダプタに対する直接のストリーム・ライン型のパ
スを提供し、一方、そのI/Oデバイスに対する標準の
低速のアクセスが、通常のストリームまたは他のデバイ
ス・ドライバによって同じシステム内で他のユーザ・プ
ロセスに対して同時に提供されるようにすることができ
るということである。
【0056】また、この分野の技術に熟達した人であれ
ば、本発明はメモリを備えている任意のI/Oデバイス
・アダプタに対して適用でき、ネットワーク・アダプタ
に限定されるものでないことも分かる。
ば、本発明はメモリを備えている任意のI/Oデバイス
・アダプタに対して適用でき、ネットワーク・アダプタ
に限定されるものでないことも分かる。
【0057】
【表1】
【表2】
【図1】 送信側と受信側との間の従来のI/Oデータ
の流れを示している流れ図である。
の流れを示している流れ図である。
【図2】 本発明による仮想ハードウェア・メモリの構
成を示しているブロック図である。
成を示しているブロック図である。
【図3】 本発明による高速および低速のアプリケーシ
ョンのシステム・データ・フローを記述している流れ図
である。
ョンのシステム・データ・フローを記述している流れ図
である。
【図4】 本発明による直接のアプリケーション・イン
ターフェース(DAI)およびプロセスと外部データ・
コネクションとの間のデータのルーチングを記述してい
るブロック図である。
ターフェース(DAI)およびプロセスと外部データ・
コネクションとの間のデータのルーチングを記述してい
るブロック図である。
【図5】 本発明による主メモリとI/Oデバイス・ア
ダプタのメモリとの間のシステム構成を示しているブロ
ック図である。
ダプタのメモリとの間のシステム構成を示しているブロ
ック図である。
───────────────────────────────────────────────────── フロントページの続き (72)発明者 ダグラス イー ハンドリー アメリカ合衆国 カリフォルニア州 92064 ポウェイ、シルバー レイク ド ライブ 13702 (72)発明者 ピー ケイス マラー アメリカ合衆国 カリフォルニア州 92103 サン ディエゴ、マリルイス ウ ェイ 2440 (72)発明者 カーティス エイチ ステフリー アメリカ合衆国 カリフォルニア州 92128 サン ディエゴ、テソロ ドライ ブ 16976
Claims (1)
- 【請求項1】 高速のI/Oデータ転送を容易にするた
めにコンピュータに接続されている入力/出力(I/
O)デバイスを制御する方法であって、 (a)コンピュータのメモリの中のI/Oデバイス(3
14)に対するアドレス空間(210、212)をスヌ
ープし、そのスヌーピングのステップがスヌープされる
アドレス空間(210、212)に読み書きしているデ
ータを検出するステップを含むような、スヌーピングの
ステップと、 (b)スヌープされるアドレス空間(210、212)
の中に書き込まれている指定された値に応答して、その
I/Oデバイスにおいてあらかじめ定義された動作のシ
ーケンスを実行するステップと、を含むことを特徴とす
る方法。
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US08/577,678 | 1995-12-21 | ||
| US08/577,678 US5768618A (en) | 1995-12-21 | 1995-12-21 | Method for performing sequence of actions in device connected to computer in response to specified values being written into snooped sub portions of address space |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH09231157A true JPH09231157A (ja) | 1997-09-05 |
Family
ID=24309703
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP8340698A Pending JPH09231157A (ja) | 1995-12-21 | 1996-12-20 | コンピュータに接続されている入力/出力(i/o)デバイスを制御する方法 |
Country Status (3)
| Country | Link |
|---|---|
| US (1) | US5768618A (ja) |
| EP (1) | EP0780768A1 (ja) |
| JP (1) | JPH09231157A (ja) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2008011273A (ja) * | 2006-06-29 | 2008-01-17 | Murata Mach Ltd | デバイス制御装置およびデータ処理装置 |
Families Citing this family (30)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US7237036B2 (en) * | 1997-10-14 | 2007-06-26 | Alacritech, Inc. | Fast-path apparatus for receiving data corresponding a TCP connection |
| US7185266B2 (en) * | 2003-02-12 | 2007-02-27 | Alacritech, Inc. | Network interface device for error detection using partial CRCS of variable length message portions |
| US7174393B2 (en) | 2000-12-26 | 2007-02-06 | Alacritech, Inc. | TCP/IP offload network interface device |
| US6687758B2 (en) * | 2001-03-07 | 2004-02-03 | Alacritech, Inc. | Port aggregation for network connections that are offloaded to network interface devices |
| US6658480B2 (en) * | 1997-10-14 | 2003-12-02 | Alacritech, Inc. | Intelligent network interface system and method for accelerated protocol processing |
| US6697868B2 (en) * | 2000-02-28 | 2004-02-24 | Alacritech, Inc. | Protocol processing stack for use with intelligent network interface device |
| US6757746B2 (en) * | 1997-10-14 | 2004-06-29 | Alacritech, Inc. | Obtaining a destination address so that a network interface device can write network data without headers directly into host memory |
| US8621101B1 (en) | 2000-09-29 | 2013-12-31 | Alacritech, Inc. | Intelligent network storage interface device |
| US6226680B1 (en) | 1997-10-14 | 2001-05-01 | Alacritech, Inc. | Intelligent network interface system method for protocol processing |
| US7167927B2 (en) | 1997-10-14 | 2007-01-23 | Alacritech, Inc. | TCP/IP offload device with fast-path TCP ACK generating and transmitting mechanism |
| US8539112B2 (en) | 1997-10-14 | 2013-09-17 | Alacritech, Inc. | TCP/IP offload device |
| US6434620B1 (en) | 1998-08-27 | 2002-08-13 | Alacritech, Inc. | TCP/IP offload network interface device |
| US8782199B2 (en) | 1997-10-14 | 2014-07-15 | A-Tech Llc | Parsing a packet header |
| US20010054080A1 (en) * | 1998-04-10 | 2001-12-20 | William B. May | Extensible storage of network device identification information |
| US7664883B2 (en) * | 1998-08-28 | 2010-02-16 | Alacritech, Inc. | Network interface device that fast-path processes solicited session layer read commands |
| US6643693B1 (en) | 1998-09-15 | 2003-11-04 | Crossroads Systems, Inc. | Method and system for managing I/O transmissions in a fibre channel network after a break in communication |
| US20020108025A1 (en) * | 1998-10-21 | 2002-08-08 | Nicholas Shaylor | Memory management unit for java environment computers |
| US8019901B2 (en) * | 2000-09-29 | 2011-09-13 | Alacritech, Inc. | Intelligent network storage interface system |
| US7543087B2 (en) | 2002-04-22 | 2009-06-02 | Alacritech, Inc. | Freeing transmit memory on a network interface device prior to receiving an acknowledgement that transmit data has been received by a remote device |
| US7496689B2 (en) * | 2002-04-22 | 2009-02-24 | Alacritech, Inc. | TCP/IP offload device |
| US7337241B2 (en) * | 2002-09-27 | 2008-02-26 | Alacritech, Inc. | Fast-path apparatus for receiving data corresponding to a TCP connection |
| US20040088262A1 (en) * | 2002-11-06 | 2004-05-06 | Alacritech, Inc. | Enabling an enhanced function of an electronic device |
| US7313136B2 (en) * | 2003-06-26 | 2007-12-25 | Nokia Corporation | Method and system establishing a data link layer protocol on a I2C™ physical layer connection |
| US8248939B1 (en) | 2004-10-08 | 2012-08-21 | Alacritech, Inc. | Transferring control of TCP connections between hierarchy of processing mechanisms |
| KR100662256B1 (ko) * | 2004-12-20 | 2006-12-28 | 한국전자통신연구원 | 낮은 프로세스 점유율을 가지는 객체기반 스토리지 장치및 그 제어 방법 |
| US7738500B1 (en) | 2005-12-14 | 2010-06-15 | Alacritech, Inc. | TCP timestamp synchronization for network connections that are offloaded to network interface devices |
| US8539513B1 (en) | 2008-04-01 | 2013-09-17 | Alacritech, Inc. | Accelerating data transfer in a virtual computer system with tightly coupled TCP connections |
| US8341286B1 (en) | 2008-07-31 | 2012-12-25 | Alacritech, Inc. | TCP offload send optimization |
| US9306793B1 (en) | 2008-10-22 | 2016-04-05 | Alacritech, Inc. | TCP offload device that batches session layer headers to reduce interrupts as well as CPU copies |
| FR3032814B1 (fr) * | 2015-02-18 | 2018-02-02 | Upmem | Circuit dram muni d'un processeur integre |
Family Cites Families (11)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US4589063A (en) * | 1983-08-04 | 1986-05-13 | Fortune Systems Corporation | Data processing system having automatic configuration |
| US4777589A (en) * | 1985-06-28 | 1988-10-11 | Hewlett-Packard Company | Direct input/output in a virtual memory system |
| US5016161A (en) * | 1989-04-12 | 1991-05-14 | Sun Microsystems, Inc. | Method and apparatus for the flow control of devices |
| US5016166A (en) * | 1989-04-12 | 1991-05-14 | Sun Microsystems, Inc. | Method and apparatus for the synchronization of devices |
| US5127098A (en) * | 1989-04-12 | 1992-06-30 | Sun Microsystems, Inc. | Method and apparatus for the context switching of devices |
| US5280587A (en) * | 1992-03-31 | 1994-01-18 | Vlsi Technology, Inc. | Computer system in which a bus controller varies data transfer rate over a bus based on a value of a subset of address bits and on a stored value |
| EP0597601A1 (en) * | 1992-11-13 | 1994-05-18 | National Semiconductor Corporation | Reflexively sizing memory bus interface |
| EP0610677A3 (en) * | 1993-02-12 | 1995-08-02 | Ibm | Communication device management module operating in two modes. |
| JPH06342398A (ja) * | 1993-06-01 | 1994-12-13 | Fuoratsukusu:Kk | 入出力用メモリ空間の割り付け方法及びその装置 |
| US5420987A (en) * | 1993-07-19 | 1995-05-30 | 3 Com Corporation | Method and apparatus for configuring a selected adapter unit on a common bus in the presence of other adapter units |
| US5642481A (en) * | 1995-03-29 | 1997-06-24 | Microsoft Corporation | Method and system for validating a memory window in system address space |
-
1995
- 1995-12-21 US US08/577,678 patent/US5768618A/en not_active Expired - Lifetime
-
1996
- 1996-12-12 EP EP96309079A patent/EP0780768A1/en not_active Withdrawn
- 1996-12-20 JP JP8340698A patent/JPH09231157A/ja active Pending
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2008011273A (ja) * | 2006-06-29 | 2008-01-17 | Murata Mach Ltd | デバイス制御装置およびデータ処理装置 |
Also Published As
| Publication number | Publication date |
|---|---|
| US5768618A (en) | 1998-06-16 |
| EP0780768A1 (en) | 1997-06-25 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US5768618A (en) | Method for performing sequence of actions in device connected to computer in response to specified values being written into snooped sub portions of address space | |
| EP0889623B1 (en) | System and method for efficient remote disk I/O | |
| Welch et al. | Pseudo devices: User-level extensions to the Sprite file system | |
| US5446915A (en) | Parallel processing system virtual connection method and apparatus with protection and flow control | |
| US7003586B1 (en) | Arrangement for implementing kernel bypass for access by user mode consumer processes to a channel adapter based on virtual address mapping | |
| US5721876A (en) | Sockets application program mechanism for proprietary based application programs running in an emulation environment | |
| KR100326864B1 (ko) | 네트워크통신방법및네트워크시스템 | |
| US7461160B2 (en) | Obtaining a destination address so that a network interface device can write network data without headers directly into host memory | |
| US8635353B2 (en) | Reception according to a data transfer protocol of data directed to any of a plurality of destination entities | |
| US7502877B2 (en) | Dynamically setting routing information to transfer input output data directly into processor caches in a multi processor system | |
| US20140059221A1 (en) | Packet validation in virtual network interface architecture | |
| EP0889622A2 (en) | System and method for remote buffer allocation and management for message passing between network nodes | |
| JP2003178039A (ja) | 分散共有仮想メモリーとその構成方法 | |
| JP2000020490A (ja) | 遠隔手続き呼出し機構またはオブジェクトリクエストブローカ機構を有する計算機、データ転送方法、および転送方法記憶媒体 | |
| WO1999026377A2 (en) | A high performance interoperable network communications architecture (inca) | |
| JP2004523035A (ja) | メモリを介してデータ処理システムの間でデータのフローを制御する方法および装置 | |
| JP2004520646A (ja) | 周辺デバイスからホスト・コンピュータ・システムに割込みを転送する方法および装置 | |
| JPH0926929A (ja) | 効率のよいデータ転送メカニズムに関する方法及び装置 | |
| US5915124A (en) | Method and apparatus for a first device accessing computer memory and a second device detecting the access and responding by performing sequence of actions | |
| EP1543658B1 (en) | One shot rdma having a 2-bit state | |
| Steenkiste | Design, implementation, and evaluation of a single‐copy protocol stack | |
| US7827194B2 (en) | Access to shared disk device on storage area network | |
| JP4317348B2 (ja) | 情報処理装置及び入出力方法並びにプログラム | |
| Cranor et al. | Universal continuous media I/O: Design and implementation | |
| Fischer et al. | PVM for SCI clusters |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A977 | Report on retrieval |
Effective date: 20040217 Free format text: JAPANESE INTERMEDIATE CODE: A971007 |
|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040309 |
|
| A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20041019 |
|
| A761 | Written withdrawal of application |
Effective date: 20050620 Free format text: JAPANESE INTERMEDIATE CODE: A761 |