(57)【特許請求の範囲】
【請求項１】
データ処理システムであって、
物理アドレス空間を含むメモリと、
ダイレクト・メモリ・アクセス（ＤＭＡ）コントローラと、
仮想アドレスから物理アドレスへの変換を伴うメモリ・アクセスを実施するために、前記メモリへのアクセスを制御し、前記ＤＭＡコントローラと通信するオペレーティング・システムのカーネルと、
前記カーネルに関連付けられたデバイス・ドライバと
を備えており、
前記デバイス・ドライバは、入出力デバイスのためのアダプタのＩＰＬの間に、前記入出力デバイスに特定の連続する入出力ＤＭＡアドレス空間を割当てることを可能にするアプリケーション・プログラミング・インターフェース（ＡＰＩ）を実装することを実行し、ここで、前記割り当てられた入出力ＤＭＡアドレス空間が前記入出力デバイスによって後に必要になる場合に、連続する入出力ＤＭＡアドレス空間を探索する遅延時間を必要とすることなしに、前記割当てられた入出力ＤＭＡアドレス空間が前記入出力デバイスに関連付けられたＤＭＡマッピング動作を行うために後で使用され、
前記デバイス・ドライバは、さらに、前記ＩＰＬの間に、前記入出力のための連続する入出力ＤＭＡアドレス空間を予約する第１のＡＰＩコマンドとともに、リクエストされる連続する入出力アドレス空間のサイズを含む第１のＡＰＩをコールすることを実行し、
前記デバイス・ドライバは、さらに、前記ＩＰＬの間に、前記デバイス・ドライバによってリクエストされる前記入出力ＤＭＡアドレス空間に仮想メモリ・アドレス空間をマッピングするための第２のＡＰＩをコールすることを実行し、ここで、前記入出力ＤＭＡアドレス空間の先頭の入出力ＤＭＡアドレス及びサイズが前記デバイス・ドライバによって維持される、
前記データ処理システム。
【請求項２】
前記ＡＰＩが、
先頭の入出力ＤＭＡアドレスおよび後のＤＭＡマッピングのために必要な前記連続するＤＭＡアドレス空間のサイズを含む、特定の入出力ＤＭＡアドレス空間の割当てを求めるリクエストを含む第１のコマンドとして実装される第１のＡＰＩであって、前記第１のＡＰＩの発行が、前記特定の入出力ＤＭＡアドレス空間を前記入出力デバイスに割当てるように前記カーネルをトリガする、前記第１のＡＰＩと、
前記入出力デバイスが後で前記マッピングを必要とする場合に、前に割当てられた入出力ＤＭＡアドレス空間への仮想アドレス空間のマッピングをトリガする第２のコマンドとして実装される第２のＡＰＩと
を含む、請求項１に記載のデータ処理システム。
【請求項３】
前記ＡＰＩが、
前記割当てられた入出力ＤＭＡアドレス空間を解放して前記カーネルに戻す第３のコマンドとして実装される第３のＡＰＩであって、前記入出力ＤＭＡアドレス空間が、ＩＰＬの対象である他の連続する入出力デバイスに割当てられることができる、前記第３のＡＰＩ
をさらに含む、請求項２に記載のデータ処理システム。
【請求項４】
前記ＡＰＩが、
前記入出力アダプタの前記デバイス・ドライバをしてそれ自身の入出力ＤＭＡアドレス・マッピングを維持せしめかつ実行せしめることができるようにし、かつ
前記ＡＰＩが、
入出力ＤＭＡアドレスの断片化を実質的に減少せしめ、かつ連続する入出力ＤＭＡアドレス空間を必要とするＤＭＡアドレス・マッピングを実行するための遅延時間を減少せしめることができるようにする、
請求項１〜３のいずれか一項に記載のデータ処理装置。
【請求項５】
前記カーネルは、
前記ＩＰＬの間に、第１のＡＰＩを受け取ることに応じて、特定の先頭の連続する入出力ＤＭＡアドレスとともに、リクエストされたサイズの連続する入出力ＤＭＡアドレス空間を前記アダプタに割当て、
前記割当てられた前記連続する入出力アドレス空間に前記ＩＰＬの対象である他のアダプタに重ねて割り当てられることを阻止し、
前記システム・メモリの仮想アドレス空間を前記割当てられたアドレス空間にマッピングするように前記アダプタのデバイス・ドライバからの後のリクエストを受け取った場合に、前記マッピングを行うための他のＤＭＡアドレス空間の探索を始動することなしに提供される前記仮想メモリ・アドレス空間に前記ＤＭＡアドレス空間を自動的にマッピングする、
ための機能コードを含む、請求項１〜４のいずれか一項に記載のデータ処理システム。
【請求項６】
前記カーネルは、
前記アドレス空間の割当てを外すリクエストを受け取ることに応じて、前記入出力ＤＭＡアドレス空間を前記カーネルに戻すための機能コードをさらに含み、
他のアダプタのＩＰＬの間に、前記他のアダプタへの後の割当てを実施することができる、請求項５に記載にデータ処理システム。
【請求項７】
前記カーネルに前記アドレス空間を戻すための機能コードは、
前記デバイス・ドライバにより前記デバイス・ドライバの前記実装が終了するのを監視し、
前記実装が終了される場合に前記入出力アドレス空間の割当てを解除する
ための機能コードを含む、請求項６に記載のデータ処理システム。
【請求項８】
前記カーネルは、
前記ＩＰＬの間に、第１のＡＰＩを受け取ることに応じて、特定の先頭の連続する入出力ＤＭＡアドレスとともに、リクエストされたサイズの連続する入出力ＤＭＡアドレス空間を前記アダプタに割当て、
前記割当てられた前記連続する入出力アドレス空間にＩＰＬの対象である他のアダプタに重ねて割り当てられることを阻止し、
前記システム・メモリの仮想アドレス空間を前記割当てられたアドレス空間にマッピングするように前記アダプタのデバイス・ドライバからの後のリクエストを受け取ることに応じて、前記マッピングを行うための他のＤＭＡアドレス空間の探索を始動することなしに提供される前記仮想メモリ・アドレス空間に前記ＤＭＡアドレス空間を自動的にマッピングし、
前記デバイス・ドライバにより前記デバイス・ドライバの前記実装が終了するのを監視し、
前記実装が終了される場合に前記入出力アドレス空間の割当てを解除し、
前記アドレス空間の割当てを外すリクエストを受け取ることに応じて、前記入出力ＤＭＡアドレス空間を前記カーネルに戻す、ここで、前記他のアダプタのＩＰＬの間に、前記他のアダプタへの後の割当てを実施することができる、
ための機能コードを含む、請求項１〜４のいずれか一項に記載のデータ処理システム。
【請求項９】
データ処理システムであって、
物理アドレス空間を含むメモリと、
ダイレクト・メモリ・アクセス（ＤＭＡ）コントローラと、
仮想アドレスから物理アドレスへの変換を伴うメモリ・アクセスを実施するために、前記メモリへのアクセスを制御し、前記ＤＭＡコントローラと通信するオペレーティング・システムのカーネルと、
前記カーネルに関連付けられたデバイス・ドライバ
と
を備えており、
前記デバイス・ドライバは、入出力デバイスのためのアダプタのＩＰＬの間に、前記入出力デバイスに特定の連続する入出力ＤＭＡアドレス空間を割当てることを可能にするアプリケーション・プログラミング・インターフェース（ＡＰＩ）を実装することを実行し、ここで、前記割り当てられた入出力ＤＭＡアドレス空間が前記入出力デバイスによって後に必要になる場合に、連続する入出力ＤＭＡアドレス空間を探索する遅延時間を必要とすることなしに、前記割当てられた入出力ＤＭＡアドレス空間が前記入出力デバイスに関連付けられたＤＭＡマッピング動作を行うために後で使用され、
前記デバイス・ドライバは、さらに、前記ＩＰＬの間に、前記入出力のための連続する入出力ＤＭＡアドレス空間を予約する第１のＡＰＩコマンドとともに、リクエストされる連続する入出力アドレス空間のサイズを含む第１のＡＰＩをコールすることを実行し、
前記デバイス・ドライバは、さらに、前記ＩＰＬの間に、前記デバイス・ドライバによってリクエストされる前記入出力ＤＭＡアドレス空間に仮想メモリ・アドレス空間をマッピングするための第２のＡＰＩをコールすることを実行し、ここで、前記入出力ＤＭＡアドレス空間の先頭の入出力ＤＭＡアドレス及びサイズが前記デバイス・ドライバによって維持され、
前記ＡＰＩが、
先頭の入出力ＤＭＡアドレスおよび後のＤＭＡマッピングのために必要な前記連続するＤＭＡアドレス空間のサイズを含む、特定の入出力ＤＭＡアドレス空間の割当てを求めるリクエストを含む第１のコマンドとして実装される第１のＡＰＩであって、前記第１のＡＰＩの発行が、前記特定の入出力ＤＭＡアドレス空間を前記入出力デバイスに割当てるように前記カーネルをトリガする、前記第１のＡＰＩと、
前記入出力デバイスが後で前記マッピングを必要とする場合に、前に割当てられた入出力ＤＭＡアドレス空間への仮想アドレス空間のマッピングをトリガする第２のコマンドとして実装される第２のＡＰＩと、
前記割当てられた入出力ＤＭＡアドレス空間を解放して前記カーネルに戻す第３のコマンドとして実装される第３のＡＰＩであって、前記入出力ＤＭＡアドレス空間が、ＩＰＬの対象である他の連続する入出力デバイスに割当てられることができる、前記第３のＡＰＩと
を含み、
前記ＡＰＩが、
前記入出力アダプタの前記デバイス・ドライバをしてそれ自身の入出力ＤＭＡアドレス・マッピングを実行することを可能にし、及び
入出力ＤＭＡアドレスの断片化を実質的に減少し、かつ連続する入出力ＤＭＡアドレス空間を必要とするＤＭＡアドレス・マッピングを実行するための遅延時間を減少することを可能にする、前記データ処理システム。
【請求項１０】
前記カーネルは、
前記ＩＰＬの間に、第１のＡＰＩを受け取ることに応じて、特定の先頭の連続する入出力ＤＭＡアドレスとともに、リクエストされたサイズの連続する入出力ＤＭＡアドレス空間を前記アダプタに割当て、
前記割当てられた前記連続する入出力アドレス空間に前記ＩＰＬの対象である他のアダプタに重ねて割り当てられることを阻止し、
前記システム・メモリの仮想アドレス空間を前記割当てられたアドレス空間にマッピングするように前記アダプタのデバイス・ドライバからの後のリクエストを受け取った場合に、前記マッピングを行うための他のＤＭＡアドレス空間の探索を始動することなしに提供される前記仮想メモリ・アドレス空間に前記ＤＭＡアドレス空間を自動的にマッピングし、
前記アドレス空間の割当てを外すリクエストを受け取った場合に、
前記デバイス・ドライバにより前記デバイス・ドライバの前記実装が終了するのを監視し、
前記実装が終了される場合に前記入出力アドレス空間の割当てを解除し、
前記入出力ＤＭＡアドレス空間を前記カーネルに戻す、ここで、他のアダプタのＩＰＬの間に、前記他のアダプタへの後の割当てを実施することができる、
ための機能コードを含む、請求項９に記載のデータ処理システム。
【請求項１１】
データ処理システムにおける方法であって、
入出力デバイスのためのアダプタのＩＰＬの間に、前記入出力デバイス・ドライバにより提供される第１のアプリケーション・プログラミング・インターフェース（ＡＰＩ）を介して前記入出力デバイスに特定の連続する入出力ダイレクト・メモリ・アクセス（ＤＭＡ）アドレス空間の予備割当てを動的にトリガするステップと、
前記入出力デバイスのために前記予備的に連続的に割当てられたＤＭＡアドレス空間を維持するステップと、
前記入出力デバイスが連続的なＤＭＡマッピングをその後に必要とする場合に、前記予備的に割当てたＤＭＡアドレス空間に前記データ処理システムのメモリの仮想アドレス空間を第２のＡＰＩを介して自動的にマッピングするステップと、
前記ＩＰＬの間に、第１のＡＰＩを受け取ることに応じて、特定の先頭の入出力ＤＭＡアドレスとともに、リクエストされたサイズの連続する入出力ＤＭＡアドレス空間を前記アダプタに割当てるステップと、
前記割当てられた前記連続する入出力アドレス空間がＩＰＬの対象である他のアダプタに重ねて割り当てられることを阻止するステップと、
前記システム・メモリの仮想アドレス空間を前記割当てられたアドレス空間にマッピングするように前記アダプタのデバイス・ドライバからの後のリクエストを受け取った場合に、前記マッピングを行うための他のＤＭＡアドレス空間の探索を始動することなしに提供される前記仮想メモリ・アドレス空間に前記ＤＭＡアドレス空間を自動的にマッピングするステップと
を含み、
前記デバイス・ドライバは、前記ＩＰＬの間に、アダプタ／入出力デバイスに特定の連続する入出力ＤＭＡアドレス空間を割当てることを可能にするアプリケーション・プログラミング・インターフェース（ＡＰＩ）を実装することを実行し、ここで、前記入出力ＤＭＡアドレス空間が前記入出力デバイスによって後で必要になる場合に連続する入出力ＤＭＡアドレス空間を探索する遅延時間を必要とすることなしに、前記入出力デバイスに関連付けられたＤＭＡマッピング動作を行うために、後で前記割当てられた入出力ＤＭＡアドレス空間が使用され、
前記デバイス・ドライバは、さらに、前記ＩＰＬの間に、前記入出力デバイスのための連続する入出力ＤＭＡアドレス空間を予約する第１のＡＰＩコマンドとともに、第１のＡＰＩをコールすることを実行し、ここで、前記第１のＡＰＩの前記コールが、リクエストされる連続する入出力アドレス空間のサイズを含み、
前記デバイス・ドライバは、さらに、前記ＩＰＬの間に、前記デバイス・ドライバによってリクエストされる前記入出力ＤＭＡアドレス空間に仮想メモリ・アドレス空間をマッピングするための第２のＡＰＩをコールすることを実行し、ここで、前記入出力ＤＭＡアドレス空間の先頭の入出力ＤＭＡアドレス及びサイズが前記デバイス・ドライバによって維持される、
前記方法。
【請求項１２】
前記第１のＡＰＩが、先頭の入出力ＤＭＡアドレスおよび後のＤＭＡマッピングのために必要な前記連続するＤＭＡアドレス空間のサイズを含む、特定の入出力ＤＭＡアドレス空間の割当てを求めるリクエストを含む第１のコマンドとして実装され、前記第１のＡＰＩの発行が、前記特定の入出力ＤＭＡアドレス空間を前記入出力デバイスに割当てるように前記カーネルをトリガし、
前記第２のＡＰＩが、前記入出力デバイスが後で前記マッピングを必要とする場合に、前に割当てられた入出力ＤＭＡアドレス空間への仮想アドレス空間のマッピングをトリガする第２のコマンドとして実装され、
前記ＡＰＩが、前記割当てられた入出力ＤＭＡアドレス空間を解放して前記カーネルに戻す第３のコマンドとして実装される第３のＡＰＩであって、前記入出力ＤＭＡアドレス空間が、ＩＰＬの対象である他の連続する入出力デバイスに割当てられることができる、前記第３のＡＰＩをさらに含む、請求項１１に記載の方法。
【請求項１３】
前記ＡＰＩが、
前記入出力アダプタの前記デバイス・ドライバをしてそれ自身の入出力ＤＭＡアドレス・マッピングを維持せしめかつ実行せしめることができるようにし、かつ
前記ＡＰＩが、
入出力ＤＭＡアドレスの断片化を実質的に減少せしめ、かつ連続する入出力ＤＭＡアドレス空間を必要とするＤＭＡアドレス・マッピングを実行するための遅延時間を減少せしめることができるようにする、
請求項１１又は１２に記載の方法。
【請求項１４】
前記動的にトリガするステップが、
前記ＩＰＬの間に、前記入出力デバイスのための連続する入出力ＤＭＡアドレス空間を予約する第１のＡＰＩコマンドとともに、リクエストされる連続する入出力アドレス空間のサイズを含む第１のＡＰＩをコールするステップと、
前記ＩＰＬの間に、前記デバイス・ドライバによりリクエストされる前記入出力ＤＭＡアドレス空間に仮想メモリ・アドレス空間をマッピングするように第２のＡＰＩをコールするステップであって、前記入出力ＤＭＡアドレス空間の先頭の入出力ＤＭＡアドレス及びサイズが前記デバイス・ドライバによって維持される、前記第２のＡＰＩをコールするステップと
をさらに含む、請求項１１〜１３のいずれか一項に記載の方法。
【請求項１５】
前記デバイス・ドライバにより前記デバイス・ドライバの前記実装が終了するのを監視するステップと、
前記実装が終了される場合に前記入出力アドレス空間の割当てを解除するステップと、
前記アドレス空間の割当てを外すリクエストを受け取った場合に、前記入出力ＤＭＡアドレス空間を前記カーネルに戻すステップであって、前記他のアダプタのＩＰＬの間に、他のアダプタへの後の割当てを実施することができる、前記戻すステップと
をさらに実行することを含む、請求項１１〜１４のいずれか一項に記載の方法。
【請求項１６】
データ処理システムに、請求項１１〜１５のいずれか一項に記載の方法の各ステップを実行せるコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はコンピュータ・システムに関し、特にコンピュータ・システムにおけるメモリ割当てに関する。より具体的には、本発明は改良したＤＭＡマッピングを提供するための方法、システムおよびコンピュータ・プログラムに関する。
【背景技術】
【０００２】
コンピュータ・システムは、実行されるアプリケーションおよび入出力（Ｉ／Ｏ）装置（または関連するアダプタ）に対して要求に応じて動的に割当てられる限られた物理的メモリ資源を備える。メモリは、メモリ内の物理的な位置に対応する現実のアドレス（物理アドレス）に翻訳される仮想アドレスを介してアクセスされる。かかるメモリ資源の割当てやメモリ・アドレス空間へのアクセスを行う一つの方法として、入出力アダプタによって供給されるダイレクト・メモリ・アクセス（ＤＭＡ）動作を介するものがある。
【０００３】
今日のコンピュータ・システムの多くにおいては、一般的に、システムの物理的メモリのアドレス空間が入出力アドレス空間よりも大きい。このようなコンピュータ・システムの場合、入出力アダプタがその全体のシステムの物理的メモリをアクセスするために、ある種の翻訳メカニズムが必要となる。例えば、３２ビットの入出力アドレスのサブシステムは、入出力アダプタが４ＧＢよりも大きいシステム・メモリ・アドレスをアクセスすることができるようにするために、ある種のメモリ・マッピングを必要とする。今日では、多くのオペレーティング・システム（ＯＳ）が、（メモリ中の）最大のページ・サイズを４Ｋバイトに設定しているので、各マッピング・ページは４Ｋバイトになっている。下記の[表１]は、所与の４Ｋページ・ベース・アドレスに対するシステム・メモリ・アドレスと入出力ＤＭＡ（ダイレクト・メモリ・アクセス）アドレスとの間の翻訳ないし変換を示すアドレス・マッピング・テーブルの一例である。
【０００４】
【表１】
0004831759.tif 000002
【０００５】
高性能の入出力アダプタの新しい要求を満足させるため（例えば、Ｅｔｈｅｒｎｅｔ（登録商標）のジャンボ・フレームおよび大きなＴＣＰセグメンテーション・オフロード（ＴＳＯ）送信などの利点を活用するため）には、データ・バッファ・マッピング・サイズは４Ｋバイトよりも大きくする必要がある。この大きなデータ・バッファ・マッピング・サイズのサポートを可能ならしめるために、オペレーティング・システムの開発者は、４ｋバイトの一連のＤＭＡアドレス・マッピングよりも大きいアドレス・マッピングを行えるようにオペレーティング・システム・マッピング方法を改良してきた。
【０００６】
図１は、デバイス・ドライバがシステムの物理的アドレスを入出力ＤＭＡアドレスにマッピングする（写像する）従来の方法を示すフローチャートである。なお、ここで示した方法はＡＩＸ（Ｒ）オペレーティング・システムに関する機能を説明するものである。しかし、そのフローチャートは一例であり、他のオペレーティング・システムにも同様に適用できる。
【０００７】
図示されるとおり、プロセスはブロック１０２で開始し、そこでコンピュータ・システム（または入出力アダプタ）が初期化される。ブロック１０４で示すように、入出力アダプタの初期化中、デバイス・ドライバはシステム・コールを実施して、そのドライバが動作に必要とする入出力アドレス空間のサイズを登録する。Ｄ＿ＭＡＰ＿ＩＮＩＴは、このシステム・コールの一例である。続いてブロック１０６では、デバイス・ドライバがシステム・メモリ（バッファ）を割当てるためのメモリ割当てルーチンをコールする。それから、ブロック１０８で、デバイス・ドライバはシステム・マッピング・ルーチンをコールしてそのシステム・メモリを入出力ＤＭＡアドレスにマッピングする。このシステム・コールの例は、Ｄ＿ＭＡＰ＿ＰＡＧＥ／Ｄ＿ＭＡＰ＿ＬＩＳＴである。
【０００８】
判断ブロック１１０に示すように、いったんこのコールが実施されると、デバイス・ドライバは、いつ入出力ＤＭＡアドレスが必要でなくなるかを監視する。ブロック１１６で示すように、この入出力ＤＭＡアドレスがまだ必要であれば、そのアダプタはそのアドレス空間を維持する。しかし、入出力ＤＭＡアドレスがもはや必要ではない場合は、ブロック１１２で示すように、デバイス・ドライバがカーネル・アンマップ・ルーチンを呼び出して、その入出力ＤＭＡアドレスをカーネルに戻す。それからブロック１１４で示すように、デバイス・ドライバ／オペレーティング・システムはその割当てられたメモリを解放しフリーにしてカーネルに戻す。カーネルにその割当てられたメモリの戻しを完遂させるこれらのシステム・コールの例は、Ｄ＿ＵＮＭＡＰ＿ＰＡＧＥ／Ｄ_ＵＮＭＡＰ_ＬＩＳＴおよびＤ_ＭＡＰ_ＣＬＥＡＲである。
【０００９】
時間が経過し、より多くのアダプタがメモリ・アドレス空間をリクエストすると、入出力ＤＭＡアドレスはさらに断片化してくる。大きな入出力ＤＭＡ空間の多数の部分がこれらのＤＭＡリクエストに割当てられるので、この断片化がある閾値点を越えると、利用可能な空間の接近性が減少し、新しいＤＭＡリクエストに割当てられる隣接する空間を見つけることが一層困難になる。
【００１０】
また、このような断片化のレベルが増加するに従って、オペレーティング・システムから（連続するアドレス空間を求めて）入出力ＤＭＡアドレスの割当てを得るための遅延時間が増加する。この増加する遅延時間によって大きな処理の遅延が生じ、全体のシステム・パフォーマンスにかなりの悪影響を与えることとなる。今日の多くのコンピュータ・システムの動作においてこのような遅延はよくあることだが、けっして好ましいことではない。従って、比較的高速でＤＭＡアドレス割当てを初期に実行するシステムは、ある動作期間の後に、徐々にパフォーマンス・スピードが落ちてしまい、より多くの遅延時間を必要とすることとなる。これらのシステムは、初期に始動するときと同様の性能をあげることができない。
【発明の開示】
【発明が解決しようとする課題】
【００１１】
上述のあるいは他のタイプの従来のＤＭＡマッピング（例えば、アプリケーション・プログラミング・インターフェース（ＡＰＩ）を用いるもの）は、以下に示すような制限がある。
【００１２】
（１）ドライバはＩＰＬの間にそのドライバが必要とする入出力ＤＭＡアドレスのサイズを予備登録することができるが、その予備登録はあらゆる時点におけるアドレス・マッピング動作を保証するものではない。すなわち、そのドライバが必要とする連続するアドレス空間の量に対しメモリ空間が足りなくなってしまうと、マッピングがうまく動作しない可能性がある。
【００１３】
（２）システムの起動時間が長くなると、入出力アドレス空間が断片化し、入出力ＤＭＡマッピングのための大きな連続するアドレス空間を確保するために必要な時間（例えば、動作の遅延時間）が増加する。その結果、全体のシステム・パフォーマンスに悪影響を与える。
【課題を解決するための手段】
【００１４】
ＩＰＬ（Ｉｎｉｔｉａｌ  Ｐｒｏｇｒａｍ  ＬｏａｄｅｒまたはＩｎｉｔｉａｌ  Ｐｒｏｇｒａｍ  Ｌａｕｎｃｈの略である）による初期化の後に探索が行われる場合に、デバイス・ドライバの入出力ＤＭＡリクエストにより、連続するメモリ空間を求めて探索する際の遅延時間（ｌａｔｅｎｃｙ）を取り除くことによって、コンピュータ・システムの入出力ＤＭＡ動作の効率を上げるための方法、システムおよびコンピュータ・プログラムを開示する。好ましくは、３種類の新規なアプリケーション・プログラミング・インターフェース（ＡＰＩ）がこのオペレーティング・システム・コード内に提供され、デバイス・ドライバに以下のことを許容する。
【００１５】
（１）ＩＰＬの間に、オペレーティング・システムから入出力ＤＭＡアドレス範囲を予備的にリクエストし、予備的に割当て、そしてそのアドレスの制御を維持すること、
（２）システム（仮想的／物理的）アドレス範囲を特定の予備割当てされた入出力ＤＭＡアドレスにマッピングすること、
（３）予備割当てされた入出力ＤＭＡアドレス空間を、その空間がもはや必要でない場合に解放し、カーネルに戻すこと。
【００１６】
これらのＡＰＩを用いると、改善された入出力ＤＭＡアドレス・マッピング技法をデバイス・ドライバにより維持することができ、割当てられた入出力ＤＭＡアドレス空間を断片化しないようにすることができ、入出力ＤＭＡマッピングを完遂する遅延時間を実質的に削減もしくは解消することができるだろう。 
【００１７】
本発明の前述のおよび追加の目的、特徴、利点が以下の詳細な説明から明らかになるだろう。
【発明を実施するための最良の形態】
【００１８】
本発明の実施例は、ＩＰＬによる初期化の後に探索が行われる場合に、デバイス・ドライバの入出力ＤＭＡリクエストにより、連続するメモリ空間を求めて探索する際の遅延時間を取り除くことによって、コンピュータ・システムの入出力ＤＭＡ動作の効率を上げるための方法、システムおよびコンピュータ・プログラムを開示する。３種類の新規なアプリケーション・プログラミング・インターフェース（ＡＰＩ）がこのオペレーティング・システム（ＯＳ）コードの中に提供され、これが１以上のデバイス・ドライバに以下のことを許容する。
【００１９】
（１）ＩＰＬの間に、オペレーティング・システムから入出力ＤＭＡアドレス範囲を予備的にリクエストし、予備的に割当て、そしてそのアドレスの制御を維持すること、
（２）システム（仮想的／物理的）アドレス範囲を特定の予備割当てされた入出力ＤＭＡアドレスにマッピングすること、
（３）予備割当てされた入出力ＤＭＡアドレス空間を、その空間がもはや必要でない場合に解放し、カーネルに戻すこと。
【００２０】
これらのＡＰＩを用いると、改善された入出力ＤＭＡアドレス・マッピング技法をこれらのデバイス・ドライバにより維持することができ、割当てられた入出力ＤＭＡアドレス空間を断片化しないようにすることができ、入出力ＤＭＡマッピングを完遂する遅延時間を実質的に削減もしくは解消することができるようになるだろう。
【００２１】
図２は、本発明の実施例において使用されるデータ処理システムのブロック図である。データ処理システム２００は、本発明の実施例の方法を実行することができるコードや命令がロードされるコンピュータの一例である。データ処理システム２００は、ＰＣＩローカル・バス・アーキテクチャを用いる。図示の例は、ＰＣＩバスを用いるが、ＡＧＰバスやＩＳＡバスなど他のバス・アーキテクチャも使用することができる。プロセッサ２０２およびメモリ２０４は、ＰＣＩブリッジ２０８を介してＰＣＩローカル・バス２０６に接続される。プロセッサ２０２およびメインメモリ２０４はＰＣＩローカル・バス２０６にＰＣＩブリッジ２０８を介して接続される。ＰＣＩブリッジ２０８はまたプロセッサ２０２のための集積メモリ・コントローラおよびキャッシュ・メモリを含んでいてもよい。ＰＣＩローカル・バス２０６にさらにコンポーネントを接続するには、直接コンポーネント相互接続またはアドインボードを介して行われる。
【００２２】
本発明の実施例では、ＬＡＮ（ローカル・エリア・ネットワーク）アダプタ２１０、ＳＣＳＩホスト・バス・アダプタ２１２および拡張バス・インターフェース２１４がＰＣＩローカル・バス２０６に直接コンポーネント接続によって接続される。これに対し、オーディオ・アダプタ２１６、グラフィック・アダプタ２１８およびオーディオ・ビデオ・アダプタ２１９がＰＣＩローカル・バス２０６に、拡張スロットに挿入されたアドインボードによって接続される。拡張バス・インターフェース２１４が、キーボードおよびマウスのアダプタ２２０、モデム、追加のメモリ２２４のための接続を提供する。ＳＣＳＩホスト・バス・アダプタ２１２が、ハード・ディスク・ドライブ２２６、テープ・ドライブ２２８およびＣＤ−ＲＯＭドライブ２３０のための接続を提供する。典型的なＰＣＩローカル・バス導入例は、３個もしくは４個のＰＣＩ拡張スロットまたはアドイン・コネクタをサポートする。
【００２３】
オペレーティング・システム（ＯＳ）はプロセッサ２０２上で稼動し、図２のデータ処理システム２００内のいろいろなコンポーネントを統合しその制御を提供する。オペレーティング・システムはマイクロソフト・コーポレーションから入手できるＷｉｎｄｏｗｓ（登録商標）  ＸＰなどの市販のオペレーティング・システムであってよい。Ｊａｖａ（登録商標）などのオブジェクト指向プログラミング・システムがそのようなオペレーティング・システムと協働してもよく、データ処理装置２００上で実行するＪａｖａ（登録商標）のプログラムやアプリケーションからそのオペレーティング・システムをコールする。オペレーティング・システム、オブジェクト指向プログラミング・システムおよびアプリケーションまたはプログラムの命令は、ハードディスク２２６などの記憶装置上に置かれ、メインメモリ２０４にロードされプロセッサ２０２で実行されることができる。図２に示すデータ処理システムは、ＡＩＸ（Ｒ）オペレーティング・システムやＬＩＮＵＸ（Ｒ）オペレーティング・システムを稼動するインターナショナル・ビジネス・マシーンズ・コーポレーションの製品であるＩＢＭ  ｅＳｅｒｖｅｒ  ｐＳｅｒｉｅｓシステム（「ＩＢＭ」および「ｅＳｅｒｖｅｒ」は商標）などであってよい。
【００２４】
当業者は、図２のハードウエアがその導入において変更することができることを理解するだろう。他の内蔵のハードウエアや周辺装置、例えばフラッシュＲＯＭ（読み出し専用メモリ）、等価な不揮発性メモリ、あるいは光ディスク・ドライブなども、図２に示すハードウエアに加えて、あるいはそれらの代わりに使用できる。また、本発明の実施例の方法はマルチプロセッサ・データ処理装置に適用することもできる。
【００２５】
例えば、データ処理装置２００は、もしネットワーク・コンピュータとして構成された場合であれば、ＳＣＳＩホスト・バス・アダプタ２１２、ハード・ディスク・ドライブ２２６、テープ・ドライブ２２８およびＣＤ−ＲＯＭドライブ２３０を含まなくてもよい。そのようなコンピュータは、クライアント・コンピュータと呼ばれ、ネットワーク・アダプタ２１０、モデム２２２などのようなある種のネットワーク通信インターフェースを含むことがある。
【００２６】
図２に示す例および前述の例はアーキテクチャ的な制限を意図するものではない。例えば、データ処理装置２００は、ＰＤＡの形式をとるものに加えて、ノートブック・コンピュータまたは携帯型コンピュータとすることができる。データ処理システム２００は、キオスク端末やウェブ機器であってもよい。
【００２７】
本発明の実施例の方法はプロセッサ２０２がメインメモリ２０４、メモリ２２４、または１以上の周辺装置２２６ないし２３０などのメモリに配置され得るコンピュータで実行される命令を用いて行われる。
【００２８】
メモリ２２４をアクセスするには、追加の装置、例えばダイレクト・メモリ・アクセス（ＤＭＡ）コントローラ２０７を設けてもよい。ＤＭＡコントローラ２０７はシステム・バス２０６に接続されるよう図示している。しかし、ＤＭＡコントローラ（または第２のＤＭＡコントローラ）は外部バスに接続されてもよく、また例えばディジタル信号プロセッサ（ＤＳＰ）など、他の入出力マスタ装置に接続される。ＤＭＡコントローラ２０７は、確立したメモリ・アクセス技法に従い、標準ページ・フレーム・テーブル等を用いてメモリにアクセスする。
【００２９】
本発明の実施例の特徴は、図２のデータ処理装置２００のようなデータ処理装置において実施される。本発明の実施例は、入出力アダプタのデバイス・ドライバがそれ自身の入出力ＤＭＡアドレス・マッピングを維持することができるように、新規なアプリケーション・プログラミング・インターフェース（ＡＰＩ）のセットを提供する。これらの新規なＡＰＩは入出力ＤＭＡアドレスの断片化を回避し、またアドレス・マッピングを実行するのに必要なＣＰＵサイクル（すなわち遅延時間）を減少させる。このようにして、これらの新規なＡＰＩはシステムのパフォーマンスを大幅に改善する。
【００３０】
本発明の実施例によれば、これらの新規なＡＰＩは、以下に提供するような形式を有するコマンドとして実施される。本発明の実施例におけるこれらのコマンドとその説明、使用されるパラメータの定義は、以下の通りである。
【００３１】
［第１のＡＰＩ（ＡＰＩ＿１）］
ＩＯ ａｄｄｒｅｓｓ＝ＩＯ ＤＭＡ_ＡＤＤＲＥＳＳ ＲＥＱＵＥＳＴ（ｓｉｚｅ） 
ここで、「ＩＯ ａｄｄｒｅｓｓ」はオペレーティング・システムのカーネルがコール元（ｃａｌｌｅｒ）に割当てる入出力ＤＭＡアドレス空間の先頭のもの（開始入出力ＤＭＡアドレス）である戻り値（ｒｅｔｕｒｎ ｖａｌｕｅ）、「ｓｉｚｅ」はコール元によりリクエストされた連続アドレス空間のサイズである。
【００３２】
［第２のＡＰＩ（ＡＰＩ＿２）］
ＶＩＲＴ_ＴＯ_ＤＭＡ_ＭＡＰＰＩＮＧ（ｖｉｒｔ, ＤＭＡ, ｓｉｚｅ）
ここで、「ｖｉｒｔ」は入出力ＤＭＡアドレス空間にマップされるのに必要な仮想メモリ・アドレス、「ＤＭＡ」はドライバがカーネルにリクエストして仮想アドレスをマッピングするようなＤＭＡアドレス、「ｓｉｚｅ」はマッピングのサイズである。
【００３３】
［第３のＡＰＩ（ＡＰＩ＿３）］
ＩＯ_ＤＭＡ_ＡＤＤＲＥＳＳ_ＦＲＥＥ（ＩＯ ａｄｄｒｅｓｓ, ｓｉｚｅ）
ここで、「ＩＯ ａｄｄｒｅｓｓ」はドライバが解放してカーネルに戻そうとする入出力ＤＭＡアドレスの先頭のものであり、「ｓｉｚｅ」はコール元がカーネルに解放して戻したい連続アドレス空間のサイズまたは後のアドレス・リクエストに再び割当てられてもよい連続アドレス空間のサイズである。
【００３４】
これらの新規なＡＰＩによって、デバイス・ドライバはいくつかの先進的な機能を提供することができる。これらの機能を、以下で説明する図３のフローチャートによって説明される方法によって説明する。なお、特定のアドレス（番号）やここで記述したサイズは説明のためにのみ提供されるものであり、本発明に対する何らかの制限を意図するものではない。方法はブロック３０２で開始し、入出力アダプタのＩＰＬコールの間に、ＤＭＡアドレス・リクエストを開始する。一例として、下記のデバイス・ドライバの第１のＡＰＩ（ＡＰＩ＿１）に対するコールが実施される。
ＩＯ_ａｄｄｒｅｓｓ＝ＩＯ_ＤＭＡ_ＡＤＤＲＥＳＳ_ＲＥＱＵＥＳＴ（0xl00000）
【００３５】
本発明の実施例によれば、前述のＡＰＩコールはアダプタのＩＰＬの間に発生する。かかるＡＰＩコールの後、そのアダプタの入出力アドレスは０ｘＦ０００１０００という値を受け取る。ブロック３０４で示すように、カーネルはそのデバイス・ドライバに、ＩＯ＿ＤＭＡアドレス空間として０ｘＥ０００１０００ から ０ｘＦ０１０１０００を割当てる。稼働時間中、ブロック３０６で示すように、システム・メモリ（仮想アドレス）を割当て、そしてブロック３０８で、デバイス・ドライバはその新規のＡＰＩである第２のＡＰＩ（ＡＰＩ＿２）をコールし、ＩＰＬの間に、そのドライバがリクエストしかつそのドライバによって維持されていたその特定の入出力ＤＭＡアドレスにマッピングする。この機能は、第２のＡＰＩ（ＡＰＩ＿２）のコール、例えば、
ＶＩＲＴ_ＴＯ_ＤＭＡ_ＭＡＰＰＩＮＧ（0x56780000,0xF0001000, 0x4000）
によって提供される。このコールでは、ドライバはカーネルにリクエストして、システム・メモリの０ｘ５６７８００００…０ｘ５６７８４０００ から入出力ＤＭＡアドレス空間の…０ｘＦ０００１０００．．．０ｘＦ０００５０００  にマッピングする。
【００３６】
ブロック３１０で示すように、デバイス・ドライバは  第２のＡＰＩ（ＡＰＩ＿２）のコールを使用して、
ＶＩＲＴ_ＴＯ_ＤＭＡ_ＭＡＰＰＩＮＧ（0x77780000,0xF0005000, 0xl000）
のような、任意の数の他のマッピングをリクエストすることができる。
このコールでは、ドライバはカーネルにリクエストして、システム・メモリの０ｘ７７７８００００…０ｘ７７７８１０００から入出力ＤＭＡアドレス空間の０ｘＦ０００５０００．．．０ｘＦ０００６０００をマッピングする。
【００３７】
ブロック３１２で、ドライバは、予備的に割当てた入出力ＤＭＡアドレスが必要ないこととなるのがいつかを指示するために監視する。ブロック３１２でのこの決定に続き、ブロック３１４で示すように、ドライバは入出力ＤＭＡアドレスをカーネルに戻す。本発明の実施例では、この入出力ＤＭＡアドレスの戻しは、そのドライバがそのデバイスを閉じようとしているときのみ生じる。この方法は、
ＩＯ_ＤＭＡ_ＡＤＤＲＥＳＳ_ＦＲＥＥ（0XF0001000,0xl00000）
という、 第３のＡＰＩ（ＡＰＩ＿３）のコールを含んでもよい。このコールでは、デバイス・ドライバはカーネルに、入出力ＤＭＡアドレス空間…０ｘＦ０００１０００．．．０ｘＦ０１０１０００を解放する。
【００３８】
上述の新規のＡＰＩによれば、デバイス・ドライバは、その空間が後にリクエストされ必要となった場合に、連続するアドレス空間を見つけようとして、遅延時間を生じざるを得ないというよりは、ＩＰＬから入出力ＤＭＡアドレス空間を維持することができる。本発明の実施例では、アダプタが、連続するサイズの入出力ＤＭＡアドレス空間を利用したい場合、その連続する空間をそのアダプタが後に利用するのでも常に利用することができるよう保証される。さらに、本発明の実施例は、断片化されたメモリ空間において、カーネルがフリーである入出力ＤＭＡアドレス空間を求めて探索する必要性を実質的に除去することができる。入出力ＤＭＡアドレスのマッピングがカーネルというよりはデバイス・ドライバにより提供される。最後に、本発明の実施例は、入出力ＤＭＡアドレス空間をマッピングするのに必要であった数多くのＣＰＵサイクル（遅延時間）を減少させることができ、またカーネルにおいて入出力ＤＭＡアドレスの断片化を防ぐのを助ける。
【００３９】
以上、本発明の実施例を機能的なコンピュータ・システムとシステムに導入した管理ソフトウエアという内容で記述して来たが、本発明の実施例のソフトウエアの側面をプログラム製品として多様な形態で配布可能であること、本発明の実施例がその配布を実際に行うのに使用される特定の型の信号担持媒体に係わらず等しく適用できることを当業者は理解するだろう。そのような信号担持媒体の例には、フレキシブル・ディスク、ハードディスク、ＣＤ―ＲＯＭなどの記録可能なタイプの媒体、ディジタルおよびアナログの通信リンクなどの伝送媒体が含まれる。
【００４０】
以上、本発明を特に好適な実施例について説明して来たが、当業者には本発明の趣旨および範囲から逸脱することなく、その形態や詳細にいろいろな変形を加えられることを理解されたい。
【００４１】
本発明自体およびその好適な使用態様、目的、効果は、以下の図面と関連してこれまでの詳細な説明を参照すればよく理解できるだろう。
【図面の簡単な説明】
【００４２】
【図１】従来技術によるＤＭＡアドレス空間を割当てるための方法を表現するフローチャートである。
【図２】本発明の好適な実施例に従って実施されるようなデータ処理システムを表現するブロック図である。
【図３】本発明の一実施例に従う、アプリケーション・プログラム・インターフェースを用いたＤＭＡアドレス空間を割当てるための方法を表現するフローチャートである。
【符号の説明】
【００４３】
２００  データ処理装置
２０２  プロセッサ
２０４  メインメモリ
２０６  ＰＣＩローカル・バス
２０７  ＤＭＡコントローラ
２０８  ＰＣＩブリッジ
２１０  ＬＡＮアダプタ
２１２  ＳＣＳＩホスト・バス・アダプタ
２１４  拡張バス・インターフェース
２１６  オーディオ・アダプタ
２１８  グラフィック・アダプタ
２１９  オーディオ・ビデオ・アダプタ
２２０  キーボードおよびマウスのアダプタ
２２２  モデム
２２４  （追加の）メモリ
２２６  ハード・ディスク・ドライブ
２２８  テープ・ドライブ
２３０  ＣＤ−ＲＯＭドライブ
【図１】
0004831759.tif 000003
【図２】
0004831759.tif 000004
【図３】
0004831759.tif 000005