(57)【要約】[課題]  ホスト計算機と遠隔計算機とが独立したＣＰＵおよびメモリ等を搭載している場合であっても、ホスト計算機と遠隔計算機との間で、ＤＭＡデータ転送を実現する。[解決手段]  デバイス２０ａを制御するドライバ２０ａと、第１のメモリ２０ｂとを有する第１の計算機２０と通信接続可能な計算機１０であって、計算機１０は、デバイスと、第２のメモリ１０ｂとを有し、ドライバ２０ａから受けたＤＭＡ転送を示す命令に基づき、第１のＤＭＡ転送を実行した結果を基に検出した、第１のＤＭＡ転送の転送先アドレスに対し、第１のメモリ２０ｂと第２のメモリ１０ｂとの間で転送先アドレスに存在するデータを転送する第２のＤＭＡ転送を実行する。
2016114144.tif 000002
【特許請求の範囲】
【請求項１】
デバイスを制御するドライバと、第１のメモリとを有する第１の計算機と通信接続可能な計算機であって、
前記計算機は、前記デバイスと、第２のメモリとを有し、
前記ドライバから受けたＤＭＡ転送を示す命令に基づき、第１のＤＭＡ転送を実行した結果を基に検出した、前記第１のＤＭＡ転送の転送先アドレスに対し、前記第１のメモリと前記第２のメモリとの間で前記転送先アドレスに存在するデータを転送する第２のＤＭＡ転送を実行する、
計算機。
【請求項２】
Ｉ／Ｏメモリ管理手段と第２のドライバを更に備え、
前記記録は、前記Ｉ／Ｏメモリ管理手段が管理する記憶手段に記録され、
前記第２のドライバは、前記記憶手段を検索することによって前記転送先アドレスを取得する、
請求項１に記載の計算機。
【請求項３】
前記第２のドライバは、前記第２のＤＭＡ転送を指示し、前記第２のＤＭＡ完了の際に、前記デバイスから割り込みを受信し、前記受信をトリガとして前記第１および２のメモリ間のデータ転送を実行する、
請求項２に記載の計算機。
【請求項４】
前記第２のドライバは、前記メモリ間のデータ転送の際に発生する割り込みを前記第１の計算機の前記ドライバに送信する、
請求項２又は３に記載の計算機。
【請求項５】
前記記録は、前記転送先アドレスに格納される転送データサイズを更に含む、
請求項１乃至４のいずれかに記載の計算機。
【請求項６】
請求項１乃至５のいずれかに記載の計算機と、前記第１の計算機とを備え、
前記第１の計算機と前記計算機はネットワークを介して通信可能に接続されている、デバイス制御システム。
【請求項７】
前記第１の計算機および前記計算機は、個別にＣＰＵを備える、
請求項６に記載のデバイス制御システム。
【請求項８】
前記第１の計算機は第１のバス延長手段を、前記計算機は第２のバス延長手段を備え、前記第１のバス延長手段と前記第２のバス延長手段との間は前記ネットワークを介して通信可能に接続され、
前記ドライバと前記デバイスとの間における前記ＤＭＡ転送に関するデータは、前記第１のバス延長手段と前記第２のバス延長手段との間で、前記第１および２のバス延長手段により、パケットに変換されて送受信される、
請求項６又は７に記載のデバイス制御システム。
【請求項９】
前記ネットワークのインタフェースは、ＰＣＩ−ＥＸＰＲＥＳＳである、
請求項６乃至８のいずれかに記載のデバイス制御システム。
【請求項１０】
デバイスを制御するドライバと、第１のメモリとを有する第１の計算機と通信接続可能であり、第２のメモリを有する計算機が、
前記ドライバから受けたＤＭＡ転送を示す命令に基づき、第１のＤＭＡ転送を実行した結果を基に検出した、前記第１のＤＭＡ転送の転送先アドレスに対し、前記第１のメモリと前記第２のメモリとの間で前記転送先アドレスに存在するデータを転送する第２のＤＭＡ転送を実行する、
デバイス制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ホスト装置と、当該ホスト装置と離れて存在するデバイスとの間で、システムバスを介してデータを転送するための計算機等に関する。
【背景技術】
【０００２】
コンピュータは、主に、ＣＰＵ（Central Processing Unit）と各種デバイスとを備える。デバイスには、例として、ディスプレイ、プリンタ、ハードディスクドライブおよびネットワークインターフェースカード等がある。ＣＰＵとデバイスは、システムバス（以下「バス」と記載）を介して接続される。ＣＰＵが所定のプログラムを実行することで、デバイスへのアクセスが行われる。デバイスへのアクセスは、入出力（Ｉ／Ｏ：Input/Output）処理と呼ばれる。デバイスは、ＣＰＵが実行するオペレーティングシステムのソフトウェア（以下「ＯＳ」（Operating System）と記載）によって制御される。ＯＳのうち、特に、デバイスを制御するためのソフトウェアを、デバイスドライバと呼ぶ。【０００３】
ＯＳの実行中に、ユーザは、所定の目的で使用するアプリケーションソフトウェアを単数又は複数同時に使用できる。これはＯＳの制御によって実行される。アプリケーションソフトウェアからデバイスに直接アクセスできないようにするため、ＯＳは、アプリケーションソフトウェアと比較して、一般的に高い実行権限を有する。【０００４】
デバイスはコンピュータの起動時にＢＩＯＳ（Basic Input/Output System）によってスキャンされ、識別子（ＩＤ：Identifier）やメモリ領域などが割り当てられる。この時点では、デバイスは利用可能な状態ではない。ＯＳの起動後、スキャンされたデバイスのうちのＯＳが制御可能なデバイスに対応するデバイスドライバによって、デバイスの初期化が行われる。これにより、デバイスは利用可能な状態となる。【０００５】
実行中のＯＳがデバイスにアクセスする方法として、Ｉ／Ｏ命令の発行と、ＭＭＩＯ（Memory-Mapped I/O）によるアクセスの２通りの方法が知られている。【０００６】
前者のＩ／Ｏ命令の発行による方法では、ＣＰＵ命令セット内に定義されているＩ／Ｏ命令を使用する。ＯＳがＣＰＵ命令を発行することによってバスにＩ／Ｏ命令が出力され、これによってデバイスへのアクセスが行われる。【０００７】
後者のＭＭＩＯアクセスの方法では、ＯＳが特定のメモリアドレスにアクセスした際、ＣＰＵまたはバスを制御するチップセットが、このメモリアドレスをＩ／Ｏ命令に変換してバスに出力することで、デバイスへのアクセスが行われる。【０００８】
上述のように、ＢＩＯＳがデバイスをスキャンするとき、デバイスが要求するメモリ空間サイズを物理メモリ空間に割り当てるので、割り当てられた物理メモリ空間へのメモリアクセスがＩ／Ｏ命令に置き換わる。以下では、上述した２通りの方法（実行中ＯＳがデバイスにアクセスする方法）を総称して「Ｉ／Ｏ命令」という。【０００９】
一般に、上述したＩ／Ｏ命令の形式と、バスで使用されるＩ／Ｏコマンドの形式とは異なる。ＣＰＵの一例として、インテル（登録商標）アーキテクチャのＣＰＵ命令セット内では、Ｉ／Ｏ命令として、ＩＮ（入力）命令とＯＵＴ（出力）命令とを備える。バスの一例として、ＰＣＩ(Peripheral Component Interconnect)-Ｅｘｐｒｅｓｓ（登録商標、以下省略）のＩ／Ｏコマンドは、I/O ReadリクエストとI/O Writeリクエストとを備える。【００１０】
ＯＳは、Ｉ／Ｏ命令を介して、デバイスとの間でデータを受け渡しする。このとき、メモリとメモリまたはメモリとＩ／Ｏデバイスとの間で直接データを転送する機能を備える。より具体的にこの機能は、ＯＳが指定したメモリに対してデバイスが主導してデータの読み書きを直接行うＤＭＡ（Direct Memory Access）と呼ばれ、デバイスはこの機能を実行するＤＭＡＣ（ＤＭＡ制御部）を備えている。デバイスがＤＭＡを使用すると、ＣＰＵの負荷が下がるので、高性能システムではＤＭＡは必須の機能となっている。特許文献１および２は、ＤＭＡを用いたデータ転送システムの技術を開示している。【００１１】
更に、特許文献３は、バスを仮想的に延長することにより、ＣＰＵとデバイスの距離を延長する技術を開示している。この技術では、PCI-Expressインタフェースに流れるデータを、Ethernet（イーサネット：登録商標、以下省略）等のネットワークに転送することで、ＣＰＵとデバイスの距離を物理的に延長可能とする。尚、PCI-Expressインタフェースは、データをＴＬＰ（Transaction Layer Packet）の形式で転送する。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】国際公開第２００８／０６８９３７号
【特許文献２】特開２００８−１４６５４１号公報
【特許文献３】特開２００７−２１９８７３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
しかしながら、特許文献１および２は、デバイスドライバを備えるホスト計算機と、当該ホスト計算機と離れた位置に存在し、且つ、上記のデバイスドライバに対応するデバイスを備える遠隔計算機との間で、ＤＭＡを用いたデータ転送を行う技術については開示していない。以下、上述した構成を備えるホスト計算機は単に「ホスト計算機」と、上述した構成を備える遠隔計算機を単に「遠隔計算機」と記載する。【００１４】
また、特許文献３に記載されたバス延長技術では、ホスト計算機と遠隔計算機とが互いに独立している場合（即ち、各々がＣＰＵとメモリを備えている場合）には、ＤＭＡを用いたデータ転送を行うことができない。これは、独立した計算機間においては他計算機のメモリにアクセスすることはできないためである。【００１５】
本発明は、上記の問題点を解決するべくなされた。本発明は、ホスト計算機と別の計算機とが独立したＣＰＵおよびメモリ等を搭載している場合であっても、ホスト計算機と別の計算機との間で、ＤＭＡデータ転送を実現できる計算機等を提供することを主たる目的とする。
【課題を解決するための手段】
【００１６】
上記課題を解決するため、本発明の第１の観点は、
デバイスを制御するドライバと、第１のメモリとを有する第１の計算機と通信接続可能な計算機であって、
計算機は、デバイスと、第２のメモリとを有し、
ドライバから受けたＤＭＡ転送を示す命令に基づき、第１のＤＭＡ転送を実行した結果を基に検出した、第１のＤＭＡ転送の転送先アドレスに対し、第１のメモリと第２のメモリとの間で転送先アドレスに存在するデータを転送する第２のＤＭＡ転送を実行する、
計算機である。【００１７】
本発明の第２の観点は、
上記に記載の計算機と、第１の計算機とを備え、
第１の計算機と計算機はネットワークを介して通信可能に接続されている、デバイス制御システムである。【００１８】
本発明の第３の観点は、
デバイスを制御するドライバと、第１のメモリとを有する第１の計算機と通信接続可能であり、第２のメモリを有する計算機が、
ドライバから受けたＤＭＡ転送を示す命令に基づき、第１のＤＭＡ転送を実行した結果を基に検出した、第１のＤＭＡ転送の転送先アドレスに対し、第１のメモリと第２のメモリとの間で転送先アドレスに存在するデータを転送する第２のＤＭＡ転送を実行する、
デバイス制御方法である。
【発明の効果】
【００１９】
本発明によれば、ホスト計算機と遠隔計算機とが独立したＣＰＵおよびメモリ等を搭載している場合であっても、ホスト計算機と遠隔計算機との間で、ＤＭＡデータ転送を実現できる計算機等を提供することができる。
【図面の簡単な説明】
【００２０】
【図１】本発明の第一の実施形態に係る遠隔デバイス制御システムの構成を示す図である。
【図２】本発明の第一の実施形態に係るＩ／Ｏメモリ管理部が備えるページテーブルの構成を示す図である。
【図３】本発明の第一の実施形態に係る遠隔デバイス制御システムのＤＭＡ書き込み処理の動作を説明するフローチャートである。
【図４】本発明の第一の実施形態に係る遠隔デバイス制御システムのＤＭＡ読み込み処理の動作を説明するフローチャートである。
【図５】本発明の第一の実施形態に係るＩ／Ｏメモリ管理部が備えるページテーブルの使用例を示す図である。
【図６】本発明の第一の実施形態に係るＩ／Ｏメモリ管理部が備えるページテーブルの使用例を示す図である。
【図７】本発明の第二の実施形態に係る遠隔デバイス制御システムの構成を示す図である。
【図８】ホスト計算機と遠隔計算機とが独立した遠隔デバイス制御システムの構成を示す図である。
【図９】ホスト計算機と遠隔計算機とが独立した遠隔デバイス制御システムの構成を示す図である。
【発明を実施するための形態】
【００２１】
次に図面を参照して、本発明の実施形態を説明する。以下の図面の記載において、同一又は類似の部分には同一又は類似の符号を付している。ただし、図面は本発明の実施形態における構成を模式的に表している。更に以下に記載される本発明の実施形態は一例であり、その本質を同一とする範囲において適宜変更可能である。
【００２２】
先ず、以下に説明する各実施形態の概要について説明する。特許文献３に記載されたバス延長技術を、本願の発明者は、通常のコンピュータシステムに適用する場合について発案した。この発案を具体的に示すと、図８に示す遠隔デバイス制御システム１００ａとなる。遠隔デバイス制御システム１００ａは、ホスト計算機２Ａおよび当該ホスト計算機と別体で存在する遠隔計算機１Ａとを備える。
【００２３】
遠隔計算機１Ａは、バス延長部１３ａおよび遠隔デバイス１２ａを備える。バス延長部１３ａは、ホスト計算機２Ａ側のバス延長部２３ａと対をなし、パケットの送受信を行う。バス延長部１３ａは、PCI-Express規格に準拠するハードウェア、ソフトウェアまたはこれらの組み合わせにより構成される。バス延長部１３ａは、ＴＬＰのカプセル化を行う。
【００２４】
遠隔デバイス１２ａは、遠隔計算機１Ａ側に搭載又は接続されるデバイスである。
【００２５】
ホスト計算機２Ａは、ＣＰＵ２１ａ、デバイスドライバ２２ａ、バス延長部２３ａ、メモリ２４ａおよび周辺デバイス２５ａを備える。ＣＰＵ２１ａは、ホスト計算機２Ａの中央制御装置である。デバイスドライバ２２ａは、遠隔計算機１Ａ側に存在する遠隔デバイス１２ａの動作を制御するソフトウェア（コンピュータプログラム、プログラムモジュール）である。バス延長部２３ａは、遠隔計算機１Ａ側のバス延長部１３ａと対をなし、パケットの送受信を行う。バス延長部２３ａは、PCI-Express規格に準拠するハードウェア、ソフトウェアまたはこれらの組み合わせにより構成される。バス延長部２３ａは、ＴＬＰのカプセル化を行う。メモリ２４ａは、ＲＯＭ（Read Only Memory）およびＲＡＭ(Random Access Memory)等で構成される記憶装置である。
【００２６】
遠隔デバイス制御システム１００ａは、バス延長部１３ａおよびバス延長部２３ａに例えばPCI-Express Ethernetブリッジを用いて実装し、ホスト計算機２Ａのバスを遠隔計算機１Ａまで仮想延長したシステムである。遠隔デバイス１２ａを含む遠隔計算機１Ａは、ＣＰＵとメモリを搭載していない。ブリッジ（即ち、バス延長部１３ａおよびバス延長部２３ａ）は、パケットのカプセル化又はデカプセル化（カプセル化の解除）を行う。カプセル化により、Ethernetネットワークのバスにパケットを流すことが可能となる。以下、Ethernetネットワーク（即ち、バス延長部１３ａとバス延長部２３ａとの間）を流れるパケットのことを「ネットワークパケット」と記載する。
【００２７】
実際のシステム構築の際には、ホスト計算機２Ａと遠隔計算機１Ａとが完全に独立して、個別にＣＰＵやメモリ等を搭載する構成が考えられる。この構成の方が、システム構築の面で、好ましい場合が想定されるからである。図９に、ＣＰＵとメモリを搭載する遠隔計算機１Ｂを備える遠隔デバイス制御システム１００ｂを示す。
【００２８】
遠隔デバイス制御システム１００ｂは、遠隔計算機１Ｂおよびホスト計算機２Ｂを備える。遠隔計算機１Ｂは、ＣＰＵ１１ｂ、遠隔デバイス１２ｂ、バス延長部１３ｂおよびメモリ１４ｂを備える。ＣＰＵ１１ｂは、遠隔計算機１Ｂが備える中央制御装置である。メモリ１４ｂは、遠隔計算機１Ｂが備える記憶装置である。その他の装置等については図８と同様であるため説明を省略する。
【００２９】
しかしながら、図９に示す遠隔デバイス制御システム１００ｂでは、遠隔計算機１ＢのＤＭＡは、遠隔計算機１Ｂのメモリ１４ｂに対してのみ行われる。つまり、遠隔デバイス制御システム１００ｂにおいては、ホスト計算機２Ｂのデバイスドライバ２２ｂと遠隔計算機１Ｂの遠隔デバイス１２ｂとの間で、ＤＭＡを実施できない。これは遠隔計算機１Ｂとホスト計算機２Ｂが、バス等で接続されていないからである。
【００３０】
以下の実施の形態においては、上述したような各々が独立したＣＰＵおよびメモリを備えるホスト計算機および遠隔計算機の間であってもＤＭＡを実行できる遠隔デバイス制御システムについて説明する。
＜第一の実施形態＞
（遠隔デバイス制御システム）
第一の実施形態に係る遠隔デバイス制御システム１００は、図１に示すように、遠隔計算機１とホスト計算機２とを備える。遠隔計算機１とホスト計算機２はネットワーク３を介して通信可能となっている。ホスト計算機２の構造は図８および９と同様であるため説明を省略する。
（遠隔計算機）
遠隔計算機１は、ＣＰＵ１１、遠隔デバイス１２、バス延長部１３、メモリ１４、ダミードライバ１５、エラーログ記憶部１６およびＩ／Ｏメモリ管理部（ＩＯＭＭＵ：Input/Output Memory Management Unit）１７を備える。更に図示しないが、遠隔計算機１はＯＳを備える。
【００３１】
遠隔計算機１のＣＰＵ１１およびメモリ１４は、ホスト計算機２のＣＰＵ２１およびメモリ２４と同じアーキテクチャであってもよいし、異なるアーキテクチャでもよい。また、ＯＳはホスト計算機２と同じＯＳであってもよいし、異なるＯＳであってもよい。遠隔デバイス１２は、ホスト計算機２のデバイスドライバ２２が対応しているデバイスであればよい。
【００３２】
バス延長部１３は、ホスト計算機２側のバス延長部２３と対をなし、ネットワークパケットを、ネットワーク３を介して送受信する。バス延長部１３およびバス延長部２３は、ソフトウェア、ハードウェアまたはソフトウェアとハードウェアの組み合わせにより構成される。バス延長部１３とバス延長部２３が対となりネットワークパケット転送を行うことで、ホスト計算機２側のデバイスドライバ２２は、遠隔計算機１側の遠隔デバイス１２に対しＤＭＡを実行することが可能となる。
【００３３】
デバイスドライバ２２は、遠隔デバイス１２が、ホスト計算機２に接続されているかのように認識する。デバイスドライバ２２が遠隔デバイス１２に向けて発行したＩ／Ｏ命令は、バス延長部２３からバス延長部１３に転送され、後述する処理の後、遠隔デバイス１２に届けられる。以下、各バス延長部１３、２３が、PCI-Expressプロトコルに準ずることを仮定して説明するが、本発明のプロトコルはこの仮定に限定されるわけではない。
【００３４】
バス延長部１３は、ホスト計算機２側のバス延長部２３から送信されるネットワークパケットを所定プロトコルレイヤ（例えばPCI-Expressであればトランザクション層）で受信し、受信したネットワークパケットが含むコマンドの内容に応じたＩ／Ｏ命令を発行する。例えば、バス延長部１３は、PCI-ExpressのI/O Writeリクエストを受信した場合は、ＣＰＵ命令セット内のＯＵＴ命令を発行する。例えばバス延長部１３は、PCI-ExpressのI/O Readリクエストを受信した場合は、ＣＰＵ命令セット内のＩＮ命令を発行する。この他、バス延長部１３は、PCI-ExpressのConfigコマンドを受信した場合は、保持しているデバイスやPCI-Express Ethernetブリッジのレジスタの内容をバス延長部２３に返す。
【００３５】
ダミードライバ１５は、遠隔計算機１のＯＳにインストールされるソフトウェアであり、Ｉ／Ｏメモリ管理部１７の割り込み処理と遠隔デバイス１２の割り込み処理とを実行する。割り込み処理（以下、「割り込み」と記載）とは、通常のプログラムの動作中、緊急に実行を要する処理や、所定時間内に終える必要がある処理を優先的に実行すること、又はその処理を指す。ダミードライバ１５は、直接的に遠隔デバイス１２を制御しない。ダミードライバ１５は、エラー割り込み発生の際に、エラーが起こったメモリ番地とサイズ（以下、「エラー情報」と記載）を取得し、一時的に記憶可能なメモリを備える。尚、ダミードライバ１５とバス延長部１３とが一体となっていてもよい。
【００３６】
エラーログ記憶部１６は、Ｉ／Ｏメモリ管理部１７にエラーが発生したときに、そのエラーログを記録する。エラーログ記憶部１６は、Ｉ／Ｏメモリ管理部１７の内部に備えられていてもよい。Ｉ／Ｏメモリ管理部の具体的な一例としては、Ｉｎｔｅｌ社のＶｔ−ｄ等がある。
【００３７】
Ｉ／Ｏメモリ管理部１７は、ＤＭＡの際にメモリアドレスを変換する。Ｉ／Ｏメモリ管理部１７は、メモリアドレス変換の際に使用する一時記憶部、具体的には、ページテーブル（不図示）を備えている。このページテーブルは、Ｉ／Ｏメモリ管理部１７専用であり、ＣＰＵ１１が備える、図示しないメモリ管理ユニット（ＭＭＵ）が使用するページテーブルとは別の記憶部である。
【００３８】
図２は、Ｉ／Ｏメモリ管理部１７のページテーブルの１エントリを例示したものである。ページテーブルはこの様なエントリを複数記憶可能である。図２に示すように、ページテーブルの１エントリの構成は、論理物理アドレス、物理アドレスおよび許可属性等の項目を含む。論理物理アドレスは、ＯＳ等のソフトウェア側の利用アドレスである。物理アドレスは、メモリ装置等のハードウェア側の利用アドレスである。許可属性とは、読み／書きの許可を示すものである。このデータ項目は最小限であり、この他のデータ項目を備えていてもよい。
【００３９】
Ｉ／Ｏメモリ管理部１７は、このエントリを用いて、デバイスドライバ２２が遠隔デバイス１２から読み書きするためのＤＭＡを、論理物理アドレスから物理アドレスにアドレス変換する。
【００４０】
許可属性が読み書き許可の場合は、遠隔デバイス１２からの読み書きのいずれも実行される。許可属性が読み込み許可の場合は、遠隔デバイス１２からのデータ読み込みが実行され、書き込みは実行されない。許可属性が書き込み許可の場合は、遠隔デバイス１２からのデータ書き込みが実行され、読み込みは実行されない。
【００４１】
（遠隔デバイス制御システムの動作）
次に遠隔デバイス制御システム１００の動作について説明する。遠隔デバイス制御システム１００の動作には、大きく分けて、遠隔計算機３のメモリ１４からホスト計算機１のメモリ２４へのＤＭＡ書き込み（DMA-Write）と、メモリ２４からメモリ１４へのＤＭＡ読み込み（DMA-Read）とがある。以下これらの動作について図３および４に示すフローチャートを参照して説明する。
（ＤＭＡ書き込みの動作）
ＤＭＡ書き込みの場合の、ホスト計算機２と遠隔計算機１との動作を図３に示すフローチャートを参照して説明する。
【００４２】
まずステップＳ１０１において、ホスト計算機２のデバイスドライバ２２は、遠隔計算機１の遠隔デバイス１２に対するＩ／Ｏ命令を発行する。このＩ／Ｏ命令は、遠隔デバイス１２が、第１のＤＭＡ転送として、ＤＭＡ書き込みを実行するための命令、即ちＯＵＴ命令であったとする。デバイスドライバ２２が発行したＯＵＴ命令は、ホスト計算機２側のバス延長部２３でバスのＩ／Ｏコマンドに変換されてネットワーク３に送出される。
【００４３】
ステップＳ１０２において、遠隔計算機１のバス延長部１３は、ネットワーク３を介して、Ｉ／Ｏコマンドを受け取る。
【００４４】
ステップＳ１０３において、バス延長部１３は、受信したＩ／Ｏコマンドに対応するＩ／Ｏ命令、この場合、ＯＵＴ命令を発行する。このＯＵＴ命令が遠隔デバイス１２におけるＤＭＡを起動するトリガであるとする。
【００４５】
ステップＳ１０４において、発行されたＯＵＴ命令を受け取った遠隔デバイス１２は、ＤＭＡを実行する。具体的に、遠隔デバイス１２は、Ｉ／Ｏメモリ管理部１７に、Memory-Writeコマンド（メモリ書き込み命令）を発行する。このコマンドにはメモリ１４および２４へ書き込むべきデータ、そのデータサイズおよび書き込むべきメモリアドレス（書き込みアドレス）が含まれている。この時点において、Ｉ／Ｏメモリ管理部１７のページテーブルには、データを書き込むアドレスに対応するエントリは設定されていない。書き込みアドレスを受け取ったＩ／Ｏメモリ管理部１７は、その書き込み論理物理アドレスに対応するページテーブルを検索するが、当該ページテーブルには、該当するエントリが設定されていないため検索が失敗する。
【００４６】
このため、ステップＳ１０５において、Memory-Writeコマンド失敗後、Ｉ／Ｏメモリ管理部１７によって、エラーログ記憶部１６に、アドレス変換エラーを示すエラー情報としてメモリアドレスとサイズとが記録され、遠隔デバイス１２が接続されている遠隔計算機１のＣＰＵ１１にエラー割り込みが上がる。
【００４７】
ステップＳ１０６において、エラー割り込みを受け取ったＣＰＵ１１は、ダミードライバ１５を呼び出す。ダミードライバ１５はエラーログ記憶部１６を検索することで、エラー情報を取得し、取得したエラー情報を一時記憶する。更に、Memory-Writeコマンドに従い、Ｉ／Ｏメモリ管理部１７は、一時記憶されているエラー情報を受け取り、ページテーブルに、このエラー情報に対する書き込みアドレス（転送先アドレス）のページテーブルのエントリを設定する。その後、ダミードライバ１５は、遠隔デバイス１２に対して再度ＤＭＡ（第２のＤＭＡ転送）を実行するように指示する。
【００４８】
ステップＳ１０７において、遠隔デバイス１２は、ＤＭＡ書き込みを再実行する。このときにはＩ／Ｏメモリ管理部１７のページテーブルにはエラー情報を基とするエントリが設定されているので、Memory-Writeコマンドは正常に行われ、この結果、遠隔計算機１のメモリ１４に遠隔デバイス１２からのデータが書き込まれる。尚、上記はエラー情報が１つの場合について記載しているが、複数のエラー情報に対して、上述したステップＳ１０１〜Ｓ１０６の動作を必要な回数繰り返してもよい。
【００４９】
次に、遠隔デバイス１２は、通常の動作として、ＤＭＡが完了する際に、デバイスドライバ２２に対して割り込みを出す。
【００５０】
ステップＳ１０８において、この割り込みは、デバイスドライバ２２ではなくダミードライバ１５によって受信される。ダミードライバ１５は、一時記憶しておいたエラー情報に含まれるメモリアドレスおよびデータサイズを参照し、遠隔計算機１のメモリ１４内における当該メモリアドレスにあるデータを、当該データサイズ分だけ、ホスト計算機２のメモリ２４の同メモリアドレスにコピーする。
【００５１】
２つのメモリ１４、２４間でデータを転送する手段としては、ＲＤＭＡ（Remote Direct Memory Access）のデバイスを使用してもよいし、ホスト計算機上で動作するよう作成されたプログラムを転送し、ホスト計算機２のメモリ２４に書き込んでもよい。
【００５２】
その後、ダミードライバ１５は、バス延長部１３に、ＤＭＡ書き込みの完了を通知する。
【００５３】
ステップＳ１０９において、ＤＭＡ書き込みの完了の通知を受け取ったバス延長部１３は、割り込みコマンド、例えばPCI-ExpressのＭＳＩ（Message Signaled Interrupt）をホスト計算機２側に送信する。割り込みコマンドを受け取ったホスト計算機２は、ＤＭＡ書き込み処理のハンドラであるデバイスドライバ２２を呼び出す。これにより、一連のＤＭＡ書き込み処理が完了する。
（ＤＭＡ読み込みの動作）
ＤＭＡ読み込みの場合の、ホスト計算機２と遠隔計算機１との動作を図４に示すフローチャートを参照して説明する。
【００５４】
まず、ステップＳ２０１において、ホスト計算機２のデバイスドライバ２２が遠隔計算機１側の遠隔デバイス１２に対してＩ／Ｏ命令を発行する。このＩ／Ｏ命令は遠隔デバイス１２がＤＭＡ読み込みする命令（第１のＤＭＡ転送）であったとする。デバイスドライバ２２が発行したＯＵＴ命令はホスト計算機２のバス延長部２３でバスのＩ／Ｏコマンドに変換されてネットワーク３に送出される。
【００５５】
ステップＳ２０２において、遠隔計算機１のバス延長部１３は、ネットワーク３を介して、Ｉ／Ｏコマンドを受け取る。
【００５６】
ステップＳ２０３において、バス延長部１３は、受け取ったＩ／Ｏコマンドに対応するＩ／Ｏ命令、この場合、ＯＵＴ命令を発行する。この時点において、Ｉ／Ｏメモリ管理部１７のページテーブルには、データを読み込むアドレスに対応するエントリは設定されていない。
【００５７】
ステップＳ２０４において、発行されたOUT命令を受け取った遠隔デバイス１２は、Ｉ／Ｏメモリ管理部１７に、Memory-Readコマンド（メモリ読み込み命令）を発行する。このとき、このコマンドには、メモリ１４から読み込むべきデータ、そのデータサイズおよび読み込むべきメモリアドレスが含まれる。読み込みアドレスを受け取ったＩ／Ｏメモリ管理部１７は、その読み込み論理物理アドレスに対応するテーブルを検索するが、当該アドレスのエントリが設定されていないため検索が失敗する。
【００５８】
このため、ステップＳ２０５において、Memory-Readコマンド失敗後、Ｉ／Ｏメモリ管理部１７によって、エラーログ記憶部１６にエラー情報としてメモリ番地とサイズが記録され、遠隔デバイス１２が接続されている遠隔計算機１のＣＰＵ１１にエラー割り込みが上がる。
【００５９】
ステップＳ２０６において、エラー割り込みを受け取ったＣＰＵ１１は、ダミードライバ１５を呼び出す。ダミードライバ１５は、エラーログ記憶部１６を検索することで、エラー情報を取得し、取得したエラー情報を一時記憶する。更に、エラー情報にあるMemory-Readコマンドに従い、ダミードライバ１５は、当該Memory-Readコマンドに含まれるメモリアドレスから始まるデータサイズ分のデータ（以下「メモリデータ」と記載）をホスト計算機２のメモリ２４から取得する。データを取得する手段としては、ＲＤＭＡのデバイスを使用してもよいし、ホスト計算機２で動作するよう作成されたプログラムによって、ホスト計算機２のデータを取得して転送してもよい。
【００６０】
ステップＳ２０７において、ホスト計算機２からメモリデータを取得したダミードライバ１５は、遠隔計算機１のメモリ１４の、Memory-Readコマンドに含まれるメモリアドレスに、取得したメモリデータを書き込む。Ｉ／Ｏメモリ管理部１７は、当該メモリアドレスに対応するページテーブルエントリを設定する。尚、上記はエラー情報が１つの場合について記載しているが、複数のエラー情報に対して、上述したステップＳ２０１〜Ｓ２０６の動作を必要な回数繰り返してもよい。
【００６１】
その後、ダミードライバ１５は、遠隔デバイス１２に、再度ＤＭＡ（第２のＤＭＡ転送）を実行するように指示する。
【００６２】
ステップＳ２０８において、ＤＭＡを再実行するよう指示された遠隔デバイス１２は、Memory-Readコマンドを再実行する。このときにはＩ／Ｏメモリ管理部１７のページテーブルに当該アドレスのエントリが設定されているためMemory-Readコマンドは正常に行われ、遠隔計算機１のメモリ１４から遠隔デバイス１２にデータが書き込まれる。
【００６３】
遠隔デバイス１２は、通常、ＤＭＡが完了する際にデバイスドライバ２２に対して割り込みを出す。この割り込みはデバイスドライバ２２ではなくダミードライバ１５によって受信される。割り込みを受信したダミードライバ１５は、バス延長部１３にＤＭＡ読み込みの完了を通知する。
【００６４】
ステップＳ２０９において、ＤＭＡ読み込みの完了の通知を受け取ったバス延長部１３は、割り込みのコマンド、例えばPCI-ExpressのＭＳＩをホスト計算機２に送信する。
【００６５】
割り込みを受け取ったホスト計算機２は、ＤＭＡ読み込み処理のハンドラであるデバイスドライバ２２を呼び出す。これにより、一連のＤＭＡ読み込み処理が完了する。
（具体例）
以下、本実施の形態の具体例を説明する。
【００６６】
まず、Ｉ／Ｏメモリ管理部１７のページテーブルは、図５のような状態であるとする。遠隔デバイス１２のＯＳには、ダミードライバ１５がインストールされており、その割り込み番号は１０番であるとする。また、遠隔デバイス１２の割り込み番号は２０番であるとする。
【００６７】
ホスト計算機２のデバイスドライバ２２が、Ｉ／Ｏ命令を発行し、それが物理メモリ番地０ｘ４０００に対するサイズ２５６バイト（１６進数で０ｘ１００バイト）のＤＭＡ書き込みであったとする。遠隔デバイス１２が、このＤＭＡを実行すると、Ｉ／Ｏメモリ管理部１７はページテーブルを参照するが、図５のページテーブル状態では論理物理アドレス０ｘ４０００に対するページテーブルエントリが存在しないため参照が失敗する。
【００６８】
Ｉ／Ｏメモリ管理部１７はこの失敗した情報として、
・エラー：書き込み失敗、
・開始アドレス：０ｘ４０００、
・サイズ：０ｘ１００
という情報をエラーログ記憶部１６に書き込み、遠隔デバイス１２のＣＰＵ１１に割り込み（番号１０）を上げる。
【００６９】
割り込み番号１０に対応するデバイスドライバ２２として、ダミードライバ１５が登録されているので、ダミードライバ１５が呼び出される。ダミードライバ１５はエラーログ記憶部１６を参照し、
・エラー：書き込み失敗、
・開始アドレス：０ｘ４０００、
・サイズ：０ｘ１００
という情報を得る。ダミードライバ１５は、Ｉ／Ｏメモリ管理部１７のページテーブルに
・論理物理アドレス０ｘ４０００、
・物理アドレス０ｘ４０００、
・書き込み可能
というエントリを作成し、図６に示すページテーブル状態となる。また、エラーログ記憶部１６から得られたエラー情報はダミードライバ１５が一時記憶しておく。
【００７０】
次に、ダミードライバ１５は、遠隔デバイス１２に対して、ＤＭＡを再実行させる。再実行させる手段としては、例えば、ダミードライバ１５が、バス延長部１３に、前回実行されたＩ／Ｏ命令を再実行させる等の手段がある。遠隔デバイス１２は、物理メモリ番地０ｘ４０００に対するサイズ２５６バイト（１６進数で０ｘ１００バイト）の書き込みＤＭＡを再実行する。
【００７１】
このときにはＩ／Ｏメモリ管理部１７は、図６のページテーブル状態であるので、Ｉ／Ｏメモリ管理部１７がページテーブルを検索すると、０ｘ４０００対するエントリが存在し、
・論理物理アドレス０ｘ４０００、
・物理アドレス０ｘ４０００、
・書き込み可能
というエントリを得る。許可属性が書き込み可能であるためこのコマンドは実行される。このコマンドにより、Ｉ／Ｏメモリ管理部１７は、論理物理アドレス０ｘ４０００から物理アドレス０ｘ４０００に変換し（アドレスが同じなので実質的には変換されていない）、物理アドレス０ｘ４０００に対してサイズ２５６バイトのメモリ書き込みを実行する。ＤＭＡが成功したため、今回はエラーログ記憶部１６には何も書き込まない。
【００７２】
書き込みＤＭＡが成功した遠隔デバイス１２は、割り込み（番号２０）をＣＰＵ１１に上げる。割り込みを受け取ったＣＰＵ１１は割り込み番号２０のハンドラであるダミードライバ１５を呼び出す。
【００７３】
呼び出されたダミードライバ１５は、割り込み番号が２０であるため、先ほど保存しておいたエラー情報を参照して「０ｘ４０００、サイズ２５６バイト」の情報を得る。ダミードライバ１５はホスト計算機２のメモリ２４の物理アドレス０ｘ４０００に対して、遠隔計算機１のメモリ１４の物理アドレス０ｘ４０００から始まる２５６バイトのデータを書き込む。その後、ダミードライバ１５は、バス延長部１３に対して割り込み完了を通知する。
【００７４】
割り込み完了を通知されたバス延長部１３は、PCI-EXPRESSのＭＳＩのプロトコルを使って割り込み（番号３０）をホスト計算機２に送信する。割り込み番号３０を受け取ったホスト計算機２のＯＳは、番号３０を処理するハンドラであるデバイスドライバ２２を呼び出す。
【００７５】
以上により、デバイスドライバ２２から遠隔デバイス１２へのＤＭＡが完了する。
【００７６】
本発明の第一の実施形態によれば、ホスト計算機２と遠隔計算機１とが独立したＣＰＵを備えている場合であっても、ホスト計算機２０と遠隔計算機１０との間で、適切にＤＭＡデータ転送を実現することができる。これは、デバイスドライバ２２からＤＭＡ転送を示す命令を受けると、第１のＤＭＡ転送を実行することによって当該命令が失敗し、その結果記録されるエラー情報を基に、第１のＤＭＡ転送の転送先アドレスを検出し、検出された転送先アドレスに対し第２のＤＭＡ転送を実行することにより、ホスト計算機２０のメモリ２４と遠隔計算機１０のメモリ１４との間で転送先アドレスに存在するデータを転送するからである。
＜第二の実施形態＞
（遠隔計算機）
第二の実施形態に係る遠隔計算機１０は、図７に示すように、ホスト計算機２０と接続可能である。
【００７７】
ホスト計算機２０は、ドライバ２０ａと第１のメモリ２０ｂとを備える。ドライバ２０ａは、デバイス１０ａを制御する。第１のメモリ２０ｂは、ホスト計算機２０側が備える記憶装置である。
【００７８】
遠隔計算機１０は、デバイス１０ａと、第２のメモリ１０ｂとを備える。デバイス１０ａは、プリンタ等の周辺機器である。第２のメモリ１０ｂは、遠隔計算機１０側が備える記憶装置である。遠隔計算機１０は、ドライバ２０ａから受けたＤＭＡ転送を示す命令に基づき、第１のＤＭＡ転送を実行した結果を基に検出した、第１のＤＭＡ転送の転送先アドレスに対し、第１のメモリ２０ｂと第２のメモリ１０ｂとの間で転送先アドレスに存在するデータを転送する第２のＤＭＡ転送を実行する。
【００７９】
本発明の第二の実施形態によれば、ホスト計算機２０と遠隔計算機１０とが独立している場合であっても、ホスト計算機２０と遠隔計算機１０との間で、ＤＭＡデータ転送を実現できる。
【産業上の利用可能性】
【００８０】
本発明によれば、コンピュータとデバイスがネットワークを介して通信可能に分かれて存在する環境で、通信相手である遠隔デバイスをホストＯＳから制御するといったシステムにおいて利用できる。特に、このシステムにおいて、ＣＰＵとメモリを備える遠隔計算機に装備されている遠隔デバイスと、ホスト計算機との間のＤＭＡ転送に際して利用できる。【００８１】
以上、上述した実施形態を模範的な例として本発明を説明した。しかしながら、本発明は、上述した実施形態には限定されない。即ち、本発明は、本発明のスコープ内において、当業者が理解し得る様々な態様を適用することができる。【００８２】
この出願は２０１５年１月１６日に出願された日本出願特願２０１５−００６４１７を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【符号の説明】
【００８３】
１      遠隔計算機
２      ホスト計算機
１１      ＣＰＵ
１２      遠隔デバイス
１３      バス延長部
１４      メモリ
１５      ダミードライバ
１６      エラーログ記憶部
１７      Ｉ／Ｏメモリ管理部
２１      ＣＰＵ
２２      デバイスドライバ
２３      バス延長部
２４      メモリ
２５      周辺デバイス
【図１】
2016114144.tif 000003
【図２】
2016114144.tif 000004
【図３】
2016114144.tif 000005
【図４】
2016114144.tif 000006
【図５】
2016114144.tif 000007
【図６】
2016114144.tif 000008
【図７】
2016114144.tif 000009
【図８】
2016114144.tif 000010
【図９】
2016114144.tif 000011
【国際調査報告】
2016114144.tif 000012
2016114144.tif 000013
2016114144.tif 000014
2016114144.tif 000015