(57)【要約】【課題】ＮＶＭｅ装置でカーネルモードアクセスと使用者モードアクセスを同時に可能にする方法及びホストコンピュータシステムを提供する。【解決手段】カーネル空間でメモリアドレスの第１範囲を予約することで１以上のキューからなる第１キューセットを生成する段階、第１キューセットの位置アドレスと大きさをＮＶＭｅ装置のコントローラへ提供する段階、ホストコンピュータシステムで実行される使用者アプリケーションプロセスから使用者モードアクセス要求を受信する段階、使用者モードアクセス要求の受信に応答し、使用者アプリケーションプロセスで使用するためにマッピングされたメモリアドレスの第２範囲を予約することで１以上のキューからなる第２キューセットを生成する段階、第２キューセットの位置アドレスと大きさを使用者アプリケーションプロセスとＮＶＭｅ装置のコントローラへ提供する段階、を含む。【選択図】  図２
2017194959.tif 000002
【特許請求の範囲】
【請求項１】
少なくともカーネル空間及び１つ以上の使用者空間に区分されたホストメモリ空間を含むホストコンピュータシステムによってＮＶＭｅ（Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ  Ｅｘｐｒｅｓｓ）インターフェイスを使用するＮＶＭｅ装置に対しカーネルモードアクセス及び使用者モードアクセスを同時に可能にする方法において、
前記カーネル空間でメモリアドレスの第１範囲を少なくとも予約することによって１つ以上のキューからなる第１キューセットを生成する段階と、
前記第１キューセットの位置アドレス及び大きさを前記ＮＶＭｅ装置のコントローラへ提供する段階と、
前記ホストコンピュータシステムで実行される使用者アプリケーションプロセスから使用者モードアクセスの要求を受信する段階と、
前記使用者モードアクセスの要求を受信することに応答して以下のような段階を実行する段階と、を有し、
前記以下のような段階は、
前記使用者アプリケーションプロセスによって使用するためにマッピングされたメモリアドレスの第２範囲を少なくとも予約することによって１つ以上のキューからなる第２キューセットを生成する段階と、
前記第２キューセットの位置アドレス及び大きさを前記使用者アプリケーションプロセス及び前記ＮＶＭｅ装置の前記コントローラへ提供する段階と、を含むことを特徴とするＮＶＭｅ装置に対しカーネルモードアクセス及び使用者モードアクセスを同時に可能にする方法。
【請求項２】
前記第１キューセットは、少なくとも管理送信キュー（ａｄｍｉｎｉｓｔｒａｔｉｖｅ  ｓｕｂｍｉｓｓｉｏｎ  ｑｕｅｕｅ：ＡＳＱ）及び管理完了キュー（ａｄｍｉｎｉｓｔｒａｔｉｖｅ  ｃｏｍｐｌｅｔｉｏｎ  ｑｕｅｕｅ：ＡＣＱ）を含み、
前記第１及び第２キューセットの各々は、少なくとも１つの入／出力（Ｉ／Ｏ）送信キュー及びＩ／Ｏ完了キューを含むことを特徴とする請求項１に記載のＮＶＭｅ装置に対しカーネルモードアクセス及び使用者モードアクセスを同時に可能にする方法。
【請求項３】
前記使用者アプリケーションプロセスからの使用者モードアクセスは、前記カーネル空間でブロックＩ／Ｏ階層をバイパスする間に前記ＮＶＭｅ装置でＩ／Ｏ動作を実行する段階を含むことを特徴とする請求項２に記載のＮＶＭｅ装置に対しカーネルモードアクセス及び使用者モードアクセスを同時に可能にする方法。
【請求項４】
前記第２キューセット内の前記Ｉ／Ｏ送信キューにＩ／Ｏ命令の仮想メモリ書込み動作を実行する段階と、
前記第２キューセット内の前記Ｉ／Ｏ送信キューに対応する送信テールドアベルレジスター（ｓｕｂｍｉｓｓｉｏｎ  ｔａｉｌ  ｄｏｏｒｂｅｌｌ  ｒｅｇｉｓｔｅｒ）の値をアップデートする段階と、をさらに有することを特徴とする請求項３に記載のＮＶＭｅ装置に対しカーネルモードアクセス及び使用者モードアクセスを同時に可能にする方法。
【請求項５】
前記第１キューセット内の前記Ｉ／Ｏ送信キューにＩ／Ｏ命令の仮想メモリ書込み動作を実行する段階と、
前記第１キューセット内の前記Ｉ／Ｏ送信キューに対応する送信テールドアベルレジスターの値をアップデートする段階と、をさらに有することを特徴とする請求項４に記載のＮＶＭｅ装置に対しカーネルモードアクセス及び使用者モードアクセスを同時に可能にする方法。
【請求項６】
前記第２キューセット内の前記Ｉ／Ｏ送信キューにＩ／Ｏ命令の前記仮想メモリ書込み動作を実行する段階は、前記第１キューセット内の前記Ｉ／Ｏ送信キューに前記Ｉ／Ｏ命令の前記仮想メモリ書込み動作を実行する段階と並行して実行されることを特徴とする請求項５に記載のＮＶＭｅ装置に対しカーネルモードアクセス及び使用者モードアクセスを同時に可能にする方法。
【請求項７】
少なくともカーネル空間及び１つ以上の使用者空間に区分されたホストメモリ空間を含むホストコンピュータシステムにより、少なくとも以下に示す段階を実行させることによって、ＮＶＭｅ（Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ  Ｅｘｐｒｅｓｓ）インターフェイスを使用するＮＶＭｅ装置に対しカーネルモードアクセス及び使用者モードアクセスを同時に可能にするコンピュータ実行可能な命令が格納された非一時的なコンピュータ読出可能記録媒体であって、
前記段階は、
前記カーネル空間でメモリアドレスの第１範囲を少なくとも予約することによって１つ以上キューからなる第１キューセットを生成する段階と、
前記第１キューセットの位置アドレス及び大きさを前記ＮＶＭｅ装置のコントローラへ提供する段階と、
前記ホストコンピュータシステムで実行される使用者アプリケーションプロセスから使用者モードアクセスの要求を受信する段階と、
前記使用者モードアクセスの要求を受信することに応答してさらに以下の段階を実行する段階と、を有し、
前記さらに以下の段階は、
前記使用者アプリケーションプロセスによって使用するためにマッピングされたメモリアドレスの第２範囲を少なくとも予約することによって１つ以上のキューからなる第２キューセットを生成する段階と、
前記第２キューセットの位置アドレス及び大きさを前記使用者アプリケーションプロセス及び前記ＮＶＭｅ装置のコントローラへ提供する段階と、を含むことを特徴とする非一時的コンピュータ読出可能記録媒体。
【請求項８】
前記第１キューセットは、少なくとも管理送信キュー（ＡＳＱ）及び管理完了キュー（ＡＣＱ）を含み、
前記第１及び第２キューセットの各々は、少なくとも入／出力（Ｉ／Ｏ）送信キュー及びＩ／Ｏ完了キューを含むことを特徴とする請求項７に記載の非一時的コンピュータ読出可能記録媒体。
【請求項９】
前記使用者アプリケーションプロセスからの使用者モードアクセスは、前記カーネル空間でブロックＩ／Ｏ階層をバイパスする間に前記ＮＶＭｅ装置でＩ／Ｏ動作を実行する段階を含むことを特徴とする請求項８に記載の非一時的コンピュータ読出可能記録媒体。
【請求項１０】
前記コンピュータ実行可能な命令は、前記ホストコンピュータシステムが、
前記第２キューセット内の前記Ｉ／Ｏ送信キューにＩ／Ｏ命令の仮想メモリ書込み動作を実行する段階と、
前記第２キューセット内の前記Ｉ／Ｏ送信キューに対応する送信テールドアベルレジスターの値をアップデートする段階と、をさらに含むことを特徴とする請求項９に記載の非一時的コンピュータ読出可能記録媒体。
【請求項１１】
前記コンピュータ実行可能な命令は、前記ホストコンピュータシステムが、前記第１キューセット内の前記Ｉ／Ｏ送信キューにＩ／Ｏ命令の仮想メモリ書込み動作を実行する段階と、
前記第１キューセット内の前記Ｉ／Ｏ送信キューに対応する送信テールドアベルレジスターの値をアップデートする段階と、をさらに含むことを特徴とする請求項１０に記載の非一時的コンピュータ読出可能記録媒体。
【請求項１２】
前記ホストコンピュータシステムが、前記第２キューセット内の前記Ｉ／Ｏ送信キューにＩ／Ｏ命令の前記仮想メモリ書込み動作を実行する段階は、前記第１キューセット内の前記Ｉ／Ｏ送信キューに前記Ｉ／Ｏ命令の前記仮想メモリ書込み動作を実行する段階と並行して実行されることを特徴とする請求項１１に記載の非一時的コンピュータ読出可能記録媒体。
【請求項１３】
ＮＶＭｅインターフェイスを利用するＮＶＭｅ装置に対しカーネルモードアクセス及び使用者モードアクセスを同時にサポートするホストコンピュータシステムにおいて、
オペレーティングシステムは、
使用者アプリケーションプロセス及びカーネルモードプロセスを実行し、
少なくともカーネル空間及び１つ以上の使用者空間に分割されたホストメモリ空間を生成し、
メモリ装置ドライバーは、
前記カーネル空間内メモリアドレスの第１範囲を少なくとも予約することによって１つ以上のキューからなる第１キューセットを生成し、
前記第１キューセットの位置アドレス及び大きさを前記ＮＶＭｅ装置のコントローラへ提供し、
前記ホストコンピュータシステムで実行される前記使用者アプリケーションプロセスから使用者モードアクセスの要求を受信し、
前記使用者モードアクセスの要求を受信することに応答して以下のことを実行し、
前記以下のこととは、
前記使用者アプリケーションプロセスによって使用されるためにマッピングされたメモリアドレスの第２範囲を少なくとも予約することによって１つ以上のキューからなる第２キューセットを生成し、
前記第２キューセットの位置アドレス及び大きさを前記使用者アプリケーションプロセス及び前記ＮＶＭｅ装置の前記コントローラへ提供することであることを特徴とするホストコンピュータシステム。
【請求項１４】
前記第１キューセットは、少なくとも管理送信キュー（ＡＳＱ）及び管理完了キュー（ＡＣＱ）を含み、
前記第１及び第２キューセットの各々は、少なくとも１つの入／出力（Ｉ／Ｏ）送信キュー及びＩ／Ｏ完了キューを含むことを特徴とする請求項１３に記載のホストコンピュータシステム。
【請求項１５】
前記使用者アプリケーションプロセスからの使用者モードアクセスは、前記カーネル空間でブロックＩ／Ｏ階層をバイパスする間に前記ＮＶＭｅ装置でＩ／Ｏ動作を実行することを含むことを特徴とする請求項１４に記載のホストコンピュータシステム。
【請求項１６】
前記使用者アプリケーションプロセスは、前記第２キューセット内の前記Ｉ／Ｏ送信キューに前記Ｉ／Ｏ命令の仮想メモリ書込み動作を実行し、
前記第２キューセット内の前記Ｉ／Ｏ送信キューに対応する送信テールドアベルレジスターの値をアップデートすることを含むことを特徴とする請求項１５に記載のホストコンピュータシステム。
【請求項１７】
前記カーネルモードプロセスは、前記第１キューセット内の前記Ｉ／Ｏ送信キューに前記Ｉ／Ｏ命令の前記仮想メモリ書込み動作を実行し、
前記第１キューセット内の前記Ｉ／Ｏ送信キューに対応する送信テールドアベルレジスターの値をアップデートすることを含むことを特徴とする請求項１６に記載のホストコンピュータシステム。
【請求項１８】
前記使用者アプリケーションプロセス及び前記カーネルモードプロセスは、前記第２キューセット内の前記Ｉ／Ｏ送信キューにＩ／Ｏ命令の前記仮想メモリ書込み動作を実行することと、前記第１キューセット内の前記Ｉ／Ｏ送信キューに前記Ｉ／Ｏ命令の前記仮想メモリ書込み動作を実行することを並行して実行することを特徴とする請求項１７に記載のホストコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はコンピュータハードウェア装置に関し、特に、ＮＶＭｅインターフェイスを使用する装置にカーネルモードアクセス及び使用者モードアクセスを同時に提供するシステム及び方法に関する。
【背景技術】
【０００２】
近年まで、大部分のハードドライブ及びソリッドステートドライブ（ＳＳＤ）はＳＡＴＡ（Ｓｅｒｉａｌ  Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ）バスを通じてホストコンピュータシステム（又は簡単に“ホスト”）と接続されていた。
しかし、技術発展にしたがってＳＳＤのアクセス速度は、ＳＡＴＡバスの最大伝送速度がボトルネックになる地点まで上昇した。
したがって、最近ではＳＡＴＡバスに比べてさらに高い最大伝送速度及び帯域幅拡張性を提供するＰＣＩｅ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ、又はＰＣＩ−Ｅ）バスを通じてホストコンピュータシステムに接続するように構成されたＳＳＤもある。
【０００３】
ＰＣＩｅバスが提供する長所を最大に活用するために、ＮＶＭｅ（Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ  Ｅｘｐｒｅｓｓ）仕様（ｓｐｅｃｉｆｉｃａｔｉｏｎ）が開発された。
ＮＶＭｅ仕様は、ＰＣＩｅバスを通じて接続された不揮発性格納（記憶）媒体にアクセスするために開発された論理的装置インターフェイス仕様である。
ＮＶＭｅ仕様は、ＳＡＴＡバス用として開発されたＡＨＣＩ（Ａｄｖａｎｃｅｄ  Ｈｏｓｔ  Ｃｏｎｔｒｏｌｌｅｒ  Ｉｎｔｅｒｆａｃｅ）仕様より低い待機時間（ｌａｔｅｎｃｙ）及び向上された多重プロセッサコア支援のような重要な長所を提供する。
以下、ＮＶＭｅインターフェイス仕様にしたがって採択し、動作する装置を“ＮＶＭｅ装置”と称する。
【０００４】
ＮＶＭｅ装置がＳＡＴＡ支援装置でより向上された性能を提供する方法は、複数個のＩ／Ｏキューを活用する。
しかし、このようなＩ／Ｏキューは一般的にホストメモリ空間のカーネル空間に常駐するので、カーネルモードプロセスのみによってアクセス可能である。
したがって、使用者モードアクセスのみを含み、ホストメモリ空間の指定された使用者空間で実行される使用者アプリケーションプロセスがＮＶＭｅ装置で入／出力（Ｉ／Ｏ）動作（例えば、読出し及び書込み）を実行しなければならない場合、使用者アプリケーションプロセスはカーネル空間の１つ以上のカーネルモードプロセスにＩ／Ｏ要求を送信しなければならない。
即ち、使用者アプリケーションプロセスは、カーネルモードアクセスを使用して間接的にＩ／Ｏキューにアクセスしなければならない。
【０００５】
しかしながら、Ｉ／Ｏキューにアクセスするためにカーネルプロセスを経ることは１つ以上の抽象化階層（例えば、ブロックＩ／Ｏ階層）を通じてＩ／Ｏ要求を伝達又は処理することを伴い、必然的に待機時間をもたらすという問題がある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】米国特許第６，０４９，８６６号明細書
【特許文献２】米国特許第７，８４５，００９号明細書
【特許文献３】米国特許公開第２００５／０１４４４２２号明細書
【特許文献４】米国特許公開第２０１５／０３２４１３７号明細書
【特許文献５】米国特許公開第２０１４／０３１７３３７号明細書
【特許文献６】米国特許公開第２０１５／０３４７３１４号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明は上記従来のＮＶＭｅ装置における問題点に鑑みてなされたものであって、本発明の目的は、ＮＶＭｅインターフェイスを使用するＮＶＭｅ装置にカーネルモードアクセス及び使用者モードアクセスを同時に可能にする方法及びホストコンピュータシステムを提供することにある。
また、本発明の他の目的は、ＮＶＭｅインターフェイスを利用してＮＶＭｅ装置にカーネルモードアクセス及び使用者モードアクセスを同時に提供するためのコンピュータ実行可能な命令を格納する非一時的コンピュータ読出可能記録媒体を提供することにある。
【課題を解決するための手段】
【０００８】
上記目的を達成するためになされた本発明によるＮＶＭｅ装置に対しカーネルモードアクセス及び使用者モードアクセスを同時に可能にする方法は、少なくともカーネル空間及び１つ以上の使用者空間に区分されたホストメモリ空間を含むホストコンピュータシステムによってＮＶＭｅ（Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ  Ｅｘｐｒｅｓｓ）インターフェイスを使用するＮＶＭｅ装置に対しカーネルモードアクセス及び使用者モードアクセスを同時に可能にする方法において、前記カーネル空間でメモリアドレスの第１範囲を少なくとも予約することによって１つ以上のキューからなる第１キューセットを生成する段階と、前記第１キューセットの位置アドレス及び大きさを前記ＮＶＭｅ装置のコントローラへ提供する段階と、前記ホストコンピュータシステムで実行される使用者アプリケーションプロセスから使用者モードアクセスの要求を受信する段階と、前記使用者モードアクセスの要求を受信することに応答して以下のような段階を実行する段階と、を有し、前記以下のような段階は、前記使用者アプリケーションプロセスによって使用するためにマッピングされたメモリアドレスの第２範囲を少なくとも予約することによって１つ以上のキューからなる第２キューセットを生成する段階と、前記第２キューセットの位置アドレス及び大きさを前記使用者アプリケーションプロセス及び前記ＮＶＭｅ装置の前記コントローラへ提供する段階と、を含むことを特徴とする。
【０００９】
上記目的を達成するためになされた本発明による非一時的コンピュータ読出可能記録媒体は、少なくともカーネル空間及び１つ以上の使用者空間に区分されたホストメモリ空間を含むホストコンピュータシステムにより、少なくとも以下の段階を実行させることによって、ＮＶＭｅ（Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ  Ｅｘｐｒｅｓｓ）インターフェイスを使用するＮＶＭｅ装置に対しカーネルモードアクセス及び使用者モードアクセスを同時に可能にするコンピュータ実行可能な命令が格納された非一時的なコンピュータ読出可能記録媒体であって、前記以下の段階は、前記カーネル空間でメモリアドレスの第１範囲を少なくとも予約することによって１つ以上キューからなる第１キューセットを生成する段階と、前記第１キューセットの位置アドレス及び大きさを前記ＮＶＭｅ装置のコントローラへ提供する段階と、前記ホストコンピュータシステムで実行される使用者アプリケーションプロセスから使用者モードアクセスの要求を受信する段階と、前記使用者モードアクセスの要求を受信することに応答してさらに以下の段階を実行する段階と、を有し、前記さらに以下の段階は、前記使用者アプリケーションプロセスによって使用するためにマッピングされたメモリアドレスの第２範囲を少なくとも予約することによって１つ以上のキューからなる第２キューセットを生成する段階と、前記第２キューセットの位置アドレス及び大きさを前記使用者アプリケーションプロセス及び前記ＮＶＭｅ装置のコントローラへ提供する段階と、を含むことを特徴とする。
【００１０】
上記目的を達成するためになされた本発明によるホストコンピュータシステムは、ＮＶＭｅインターフェイスを利用するＮＶＭｅ装置に対しカーネルモードアクセス及び使用者モードアクセスを同時にサポートするホストコンピュータシステムにおいて、オペレーティングシステムは、使用者アプリケーションプロセス及びカーネルモードプロセスを実行し、少なくともカーネル空間及び１つ以上の使用者空間に分割されたホストメモリ空間を生成し、メモリ装置ドライバーは、前記カーネル空間内メモリアドレスの第１範囲を少なくとも予約することによって１つ以上のキューからなる第１キューセットを生成し、前記第１キューセットの位置アドレス及び大きさを前記ＮＶＭｅ装置のコントローラへ提供し、前記ホストコンピュータシステムで実行される前記使用者アプリケーションプロセスから使用者モードアクセスの要求を受信し、前記使用者モードアクセスの要求を受信することに応答して以下のことを実行し、前記以下のこととは、前記使用者アプリケーションプロセスによって使用されるためにマッピングされたメモリアドレスの第２範囲を少なくとも予約することによって１つ以上のキューからなる第２キューセットを生成し、前記第２キューセットの位置アドレス及び大きさを前記使用者アプリケーションプロセス及び前記ＮＶＭｅ装置の前記コントローラへ提供することであることを特徴とする。
【発明の効果】
【００１１】
本発明に係るＮＶＭｅ装置に対しカーネルモードアクセス及び使用者モードアクセスを同時に可能にする方法及びホストコンピュータシステム並びに非一時的コンピュータ読出可能記録媒体によれば、ＮＶＭｅ装置に対するカーネルモードアクセス及び使用者モードアクセスを同時に可能することによって使用者アプリケーションプロセスは、カーネルモードアクセスを使用して間接的にＩ／ＯキューにアクセスしなければならずＩ／Ｏキューにアクセスするためにカーネルプロセスを経ることは１つ以上の抽象化階層を通じてＩ／Ｏ要求を伝達又は処理することを伴い、必然的に待機時間をもたらすという待機時間問題を克服するという効果がある。
【図面の簡単な説明】
【００１２】
【図１】本発明の実施形態に係るＮＶＭｅ装置にカーネルモードアクセス及び使用者モードアクセスを同時に提供するホストコンピュータシステムのソフトウェア抽象化を示すブロック図である。
【図２】本発明の実施形態に係るＮＶＭｅ装置にカーネルモードアクセス及び使用者モードアクセスを同時に提供するホストコンピュータシステムのハイ−レベル動作を説明するためのフローチャートである。
【図３】本発明の実施形態に係るホストコンピュータシステム及びカーネルモードアクセス及び使用者モードアクセスを同時に提供する方法を具現するのに使用することができる例示的なコンピュータアーキテクチャを示すブロック図である。
【発明を実施するための形態】
【００１３】
次に、本発明に係るＮＶＭｅ装置に対しカーネルモードアクセス及び使用者モードアクセスを同時に可能にする方法及びホストコンピュータシステム並びに非一時的コンピュータ読出可能記録媒体を実施するための形態の具体例を図面を参照しながら説明する。
【００１４】
図面は必ずしも縮尺通り図示されなく、類似な構造又は機能要素は一般的に図面の全体で例示的な目的に同一の参照符号に表示する。
図面は本明細書に説明された多様な実施形態の説明を容易にするために本明細書に開示された教示（ｔｅａｃｈｉｎｇｓ）のすべての側面を説明しなく、請求項の範囲を制限しないことと意図する。
ここに開示した各々の特徴及び教示は、本システム及び方法を提供するために個別的に又は他の特徴及び教示と共に利用することができる。
これらの特徴及び教示の中で多数を個別的に及び組み合わして使用する代表的な例が添付された図面を参照して説明する。
本明細書の詳細な説明は、該当技術分野の当業者が本発明を実施できるように例示しているが、これは請求範囲を制限しない。したがって、詳細な説明に開示された特徴の組み合わせは本発明の教示の代表的な例であり、最も広い意味にそれを教示、実施するのに必須的ではなくともよい。
【００１５】
本明細書では本システム及び方法を説明するための例としてＮＶＭｅ装置、ＮＶＭｅ仕様（ｓｐｅｃｉｆｉｃａｔｉｏｎ）及び他の特定教示を参照する。
しかし、本システム、方法及びこれらのアプリケーションはこのような例に限定されなく、ホストコンピュータシステムと通信するためにキューに依存する他の装置に適用することもできる。
【００１６】
先に説明したように、各使用者アプリケーションプロセスはホストのメモリ空間の指定された使用者空間で実行され、典型的にはホストのメモリ空間のカーネル空間内のメモリ位置にアクセスできない。
したがって、ＮＶＭｅ装置と通信するためのＩ／Ｏキューがカーネル空間にある時、使用者アプリケーションプロセスはＮＶＭｅ装置でＩ／Ｏ動作を実行するためにカーネル空間及び多様な抽象化階層を経なければならなく、これによって待機時間が発生する。
【００１７】
本発明の実施形態は、ＮＶＭｅ装置に対するカーネルモードアクセス及び使用者モードアクセスを同時に可能することによって待機時間問題を克服する。
このような方法によって、高性能及び低い待機時間を要求する使用者アプリケーションプロセスはカーネルプロセスがＮＶＭｅ装置にカーネルモードアクセスを維持しながらもＮＶＭｅ装置に対する使用者モードアクセスを有することができる。
【００１８】
図１は、本発明の実施形態に係るＮＶＭｅ装置にカーネルモードアクセス及び使用者モードアクセスを同時に提供するホストコンピュータシステムのソフトウェア抽象化を示すブロック図である。
ホストコンピュータシステム（又は簡単に“ホスト”）１００は、オペレーティングシステムを実行し、少なくともカーネル空間１１０と第１使用者空間１２０及び第２使用者空間１３０に分割されたホストメモリ空間とを含む。
【００１９】
カーネル空間１１０は、ブロックＩ／Ｏ階層１１１及びＮＶＭｅ装置ドライバー１１２を含み、各々は１つ以上のカーネルプロセスを含む。
また、カーネル空間１１０は、管理送信キュー（ａｄｍｉｎｉｓｔｒａｔｉｏｎ  ｓｕｂｍｉｓｓｉｏｎ  ｑｕｅｕｅ：ＡＳＱ）、管理完了キュー（ａｄｍｉｎｉｓｔｒａｔｉｏｎ  ｃｏｍｐｌｅｔｉｏｎ  ｑｕｅｕｅ：ＡＣＱ）、Ｉ／Ｏ送信キュー（Ｉ／Ｏ  ｓｕｂｍｉｓｓｉｏｎ  ｑｕｅｕｅ、ＩＳＱ１）及びＩ／Ｏ完了キュー（Ｉ／Ｏ  ｃｏｍｐｌｅｔｉｏｎ  ｑｕｅｕｅ、ＩＣＱ１）のような第１キューセット１１３を含む。
また、カーネル空間１１０は、Ｉ／Ｏ送信キュー（ＩＳＱ２）及びＩ／Ｏ完了キュー（ＩＣＱ２）のような第２キューセット１３２を含む。
しかし、第１キューセット１１３、第２キューセット１３２は、図１に示したものに制限されない。
【００２０】
Ｉ／Ｏ送信キュー（ＩＳＱ１）は、ＮＶＭｅ装置２００にＩ／Ｏ命令（例えば、読出し及び書込み命令）を伝達し、Ｉ／Ｏ完了キュー（ＩＣＱ１）はそのようなＩ／Ｏ命令の完了状態（ｃｏｍｐｌｅｔｉｏｎ  ｓｔａｔｕｓ）をホスト１００に伝達する。
同様な方式で、管理送信キュー（ＡＳＱ）は管理命令をＮＶＭｅ装置２００に伝達し、管理完了キュー（ＡＣＱ）はそのような命令の完了状態を再びホスト１００に伝達する。
管理命令の例は、Ｉ／Ｏ送信／完了キューを生成及び削除するための命令を含む。
ＮＶＭｅ装置ドライバー１１２は、例えば管理送信キュー（ＡＳＱ）に書き込みを通じて、カーネル空間にメモリアドレス範囲を予約し、第１キューセット１１３の位置アドレス及び大きさをＮＶＭｅコントローラ２０１に提供することによって第１キューセット１１３を生成する。
【００２１】
第１使用者空間１２０で実行される第１アプリケーションプロセス１２１は、カーネルモードアクセスを使用して第１キューセット１１３に間接的に読み出す及び書き込むことによってＮＶＭｅ装置２００に対するＩ／Ｏ動作を実行する。
同時に、第２使用者空間１３０で実行される第２アプリケーションプロセス１３１は使用者モードアクセスを使用して第２キューセット１３２に直接読み出す及び書き込むことによってＮＶＭｅ装置２００に対するＩ／Ｏ動作を実行することができる。
ＮＶＭｅ装置ドライバー１１２が第２キューセット１３２を第２使用者空間１３０にマッピングをし、その結果、第２アプリケーションプロセス１３１はカーネル介入無しでキューにアクセスできるので、第２アプリケーションプロセス１３１は使用者モードアクセスを通じて第２キューセット１３２を直接アクセスすることができる。
【００２２】
第１アプリケーションプロセス１２１は、ブロックＩ／Ｏ階層１１１にＩ／Ｏ要求を送信することによってＮＶＭｅ装置２００に対するＩ／Ｏ動作を実行し、そうするとブロックＩ／Ｏ階層１１１はそのＩ／Ｏ要求を処理し、ＮＶＭｅ装置ドライバー１１２に伝達する。
たとえば、図１に示してないが、Ｉ／Ｏ要求は、ＮＶＭｅ装置ドライバー１１２に伝達する前に他の階層又はサブシステムによって処理することができる。
【００２３】
ＮＶＭｅ装置ドライバー１１２は、Ｉ／Ｏ要求の受信に応答してＩ／Ｏ送信キュー（ＩＳＱ１）のテール位置（ｔａｉｌ  ｐｏｓｉｔｉｏｎ）に対応するＩ／Ｏ命令を書き込む。
ＮＶＭｅ装置ドライバー１１２は、またＩ／Ｏ送信キュー（ＩＳＱ１）に対応するＩ／Ｏ送信キュー（ＩＳＱ１）テールドアベルレジスター（ｔａｉｌ  ｄｏｏｒｂｅｌｌ  ｒｅｇｉｓｔｅｒ）の値をアップデートする。
新しい値はＩ／Ｏ送信キュー（ＩＳＱ１）のアップデートされたテール位置に対するポインターである。
【００２４】
Ｉ／Ｏ送信キュー（ＩＳＱ１）テールドアベルレジスターは、ＮＶＭｅコントローラ２０１内の複数のレジスター２０２の中で１つであり、メモリマッピングされたＩ／Ｏ（ｍｅｍｏｒｙ−ｍａｐｐｅｄ  Ｉ／Ｏ；ＭＭＩＯ）通信を通じてＮＶＭｅ装置ドライバー１１２によってアクセスされる。
Ｉ／Ｏ送信キュー（ＩＳＱ１）テールドアベルレジスターの値をアップデートするか、或いはテールベルを鳴らすことは、ＮＶＭｅコントローラ２０１が新しいＩ／Ｏ命令がＩ／Ｏ送信キュー（ＩＳＱ１）内にキューイングされたことを分かるようにする。
【００２５】
ＮＶＭｅコントローラ２０１は、Ｉ／Ｏ送信キュー（ＩＳＱ１）のヘッド位置（ｈｅａｄ  ｐｏｓｉｔｉｏｎ）で開始してＩ／Ｏ送信キュー（ＩＳＱ１）からＩ／Ｏ命令を引出（ｆｅｔｃｈ）し、処理する。
ＮＶＭｅコントローラ２０１は、Ｉ／Ｏ送信キュー（ＩＳＱ１）のヘッドツーテール（ｈｅａｄ−ｔｏ−ｔａｉｌ）順にＩ／Ｏ命令を引き出すが、他の順序で命令を実行することもできる。
Ｉ／Ｏ命令の実行を完了した後、ＮＶＭｅコントローラ２０１は、Ｉ／Ｏ完了キュー（ＩＣＱ１）のテール位置に完了状態を書き込み、例えばホスト１００にＭＳＩ−Ｘインタラプトを生成する。
【００２６】
ＮＶＭｅ装置ドライバー１１２は、Ｉ／Ｏ完了キュー（ＩＣＱ１）のヘッド位置で開始してＩ／Ｏ完了キュー（ＩＣＱ１）から完了状態を引き出す。
第１アプリケーションプロセス１２１で発生したＩ／Ｏ要求に対応する完了状態を引き出した後、ＮＶＭｅ装置ドライバー１１２は要求されたＩ／Ｏ動作の完了を処理し、ブロックＩ／Ｏ階層１１１（及び、図１に示されない他の階層又はサブシステム）を通じて完了状態を第１アプリケーションプロセス１２１に返送する。
ＮＶＭｅ装置ドライバー１１２は、又、Ｉ／Ｏ完了キュー（ＩＣＱ１）に対応するＩ／Ｏ完了キュー（ＩＣＱ１）ヘッドドアベルレジスターの値をアップデートする。
新しい値は、Ｉ／Ｏ完了キュー（ＩＣＱ１）の更新されたヘッド位置に対するポインターである。
Ｉ／Ｏ完了キュー（ＩＣＱ１）ヘッドドアベルレジスターは、ＮＶＭｅコントローラ２０１内の複数のレジスター２０２の中のいずれか１つであり、ＭＭＩＯ通信を通じてＮＶＭｅ装置ドライバー１１２によってアクセスされる。
【００２７】
以前に説明したように、カーネルモードアクセスを通じて第１アプリケーションプロセス１２１が第１キューセット１１３に間接的にアクセスする間に第２アプリケーションプロセス１３１は使用者モードアクセスを通じて第２キューセット１３２にアクセスすることができる。
しかし、第１キューセット１１３と同様に、第２キューセット１３２は使用の前に生成する必要があり得る。
例えば、第２アプリケーションプロセス１３１は、第２キューセット１３２を生成するための要求を含む使用者モードアクセス要求をＮＶＭｅ装置ドライバー１１２に送信する。
例えば、要求は、入出力制御システムコール（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ  Ｃｏｎｔｒｏｌ（ＩＯＣＴＬ）  Ｓｙｓｔｅｍ  Ｃａｌｌ）を通じてＮＶＭｅ装置ドライバー１１２に伝送される。
【００２８】
ＮＶＭｅ装置ドライバー１１２は、第２使用者空間１３０にマッピングされるカーネル空間１１０内のメモリアドレスの範囲を予約し、第２キューセット１３２の位置アドレス及び大きさをＩＯＣＴＬシステムコールを通じて第２アプリケーションプロセス１３１、及び管理送信キュー（ＡＳＱ）に対する命令を通じてＮＶＭｅコントローラ２０１に提供することによって第２キューセット１３２を生成する。
例えば、ＮＶＭｅ装置ドライバー１１２は、Ｉ／Ｏ送信キュー（ＩＳＱ２）を生成するための第１命令、及びＩ／Ｏ完了キュー（ＩＣＱ２）を生成するための第２命令を管理送信キュー（ＡＳＱ）に書き込む。
【００２９】
ＮＶＭｅ装置ドライバー１１２は、また、管理送信キュー（ＡＳＱ）に対応する管理送信キュー（ＡＳＱ）テールドアベルレジスターの値をアップデートする。
新しい値は、管理送信キュー（ＡＳＱ）のテール位置に対するポインターである。
管理送信キュー（ＡＳＱ）テールドアベルレジスターは、ＮＶＭｅコントローラ２０１内の複数のレジスター２０２の中の１つである。
ＮＶＭｅコントローラ２０１は、管理送信キュー（ＡＳＱ）のヘッド位置で開始して管理送信キュー（ＡＳＱ）から管理命令を引き出し、そして処理する。
ＮＶＭｅコントローラ２０１は、管理送信キュー（ＡＳＱ）からヘッドツーテール順に管理命令を引き出すことができるが、順序に関わらず該当命令を実行することもできる。
管理命令の実行を完了した後、ＮＶＭｅコントローラ２０１は、管理完了キュー（ＡＣＱ）のテール位置に完了状態を書き込み、例えばホスト１００に対するＭＳＩ−Ｘインタラプトを生成する。
【００３０】
ＮＶＭｅ装置ドライバー１１２は、管理完了キュー（ＡＣＱ）のヘッド位置で開始して管理完了キュー（ＡＣＱ）から完了状態を引き出す。
第２アプリケーションプロセス１３１からのキュー生成要求に対応する完了状態を引き出した後、ＮＶＭｅ装置ドライバー１１２は、ＩＯＣＴＬシステムコールを通じて第２キューセット１３２の位置アドレス及び大きさを伴う完了状態を第２アプリケーションプロセス１３１に戻す。
ＮＶＭｅ装置ドライバー１１２は、管理完了キュー（ＡＣＱ）に対応する管理完了キュー（ＡＣＱ）ヘッドドアベルレジスターの値をアップデートする。
新しい値は管理完了キュー（ＡＣＱ）のアップデートされたヘッド位置に対するポインターである。
管理完了キュー（ＡＣＱ）ヘッドドアベルレジスターは、ＮＶＭｅコントローラ２０１内の複数のレジスター２０２の中の１つである。
【００３１】
第２キューセット１３２が生成された後、第２アプリケーションプロセス１３１は、使用者モードアクセスを通じて第２キューセット１３２に直接的に読み出し及び書き込みを行い、それによりブロックＩ／Ｏ階層１１１内にあるようなカーネルプロセスをバイパスしながらＮＶＭｅ装置２００に対するＩ／Ｏ動作を実行する。
第２アプリケーションプロセス１３１は、Ｉ／Ｏ送信キュー（ＩＳＱ２）のテール位置に、対応するＩ／Ｏ命令を書き込むことによってＮＶＭｅ装置２００に対するＩ／Ｏ動作を実行する。
【００３２】
ＮＶＭｅ装置ドライバー１１２は、また、Ｉ／Ｏ送信キュー（ＩＳＱ２）に対応するＩ／Ｏ送信キュー（ＩＳＱ２）テールドアベルレジスターの値をアップデートする。
新しい値はＩ／Ｏ送信キュー（ＩＳＱ２）のアップデートされたテール位置に対するポインターである。
Ｉ／Ｏ送信キュー（ＩＳＱ２）テールドアベルレジスターは、ＮＶＭｅコントローラ２０１の複数のレジスター２０２の中の１つである。
Ｉ／Ｏ送信キュー（ＩＳＱ２）テールドアベルレジスターの値のアップデートは、ＮＶＭｅコントローラ２０１が、新しいＩ／Ｏ命令がＩ／Ｏ送信キュー（ＩＳＱ２）にキューイングされたことを分かるようにするものである。
【００３３】
ＮＶＭｅコントローラ２０１は、Ｉ／Ｏ送信キュー（ＩＳＱ２）のヘッド位置で開始してＩ／Ｏ送信キュー（ＩＳＱ２）からＩ／Ｏ命令を引き出し、処理する。
ＮＶＭｅコントローラ２０１は、Ｉ／Ｏ送信キュー（ＩＳＱ２）でＩ／Ｏ命令をヘッドツーテール順に持って来るが、順序に関わらず該当命令を実行することもできる。
Ｉ／Ｏ命令の実行を完了した後、ＮＶＭｅコントローラ２０１は、完了状態をＩ／Ｏ完了キュー（ＩＣＱ２）のテール位置に書き込み、例えばホスト１００にＭＳＩ−Ｘインタラプトを生成する。
【００３４】
第２アプリケーションプロセス１３１は、Ｉ／Ｏ完了キュー（ＩＣＱ２）のヘッド位置で開始してＩ／Ｏ完了キュー（ＩＣＱ２）から完了状態を引き出す。
要求されたＩ／Ｏ動作に対応する完了状態を引き出した後に、第２アプリケーションプロセス１３１は、要求されたＩ／Ｏ動作の完了を処理し、Ｉ／Ｏ完了キュー（ＩＣＱ２）に対応するＩ／Ｏ完了キュー（ＩＣＱ２）ヘッドドアベルレジスターの値をアップデートする。
新しい値は、Ｉ／Ｏ完了キュー（ＩＣＱ２）のアップデートされたヘッド位置に対するポインターである。
Ｉ／Ｏ完了キュー（ＩＣＱ２）ヘッドドアベルレジスターは、ＮＶＭｅコントローラ２０１内の複数のレジスター２０２の中の１つである。
【００３５】
したがって、本システム及びその方法の例示的な実施形態に係るホスト１００は、ＮＶＭｅ装置に対するカーネルモードアクセス及び使用者モードアクセスを同時に提供する。
このような方式によって、カーネルプロセスがＮＶＭｅ装置にカーネルモードアクセスを維持しながらも、高性能及び低い待機時間を要求する使用者アプリケーションプロセスはＮＶＭｅ装置に対する使用者モードアクセスを提供する。
【００３６】
図２は、本発明の実施形態に係るＮＶＭｅ装置にカーネルモードアクセス及び使用者モードアクセスを同時に提供するホストコンピュータシステムのハイ−レベル動作を説明するためのフローチャートである。
使用者モードアクセスは、ホストコンピュータシステムのカーネル空間でブロックＩ／Ｏ階層をバイパスしながらも、ＮＶＭｅ装置でＩ／Ｏ動作を実行することを含むことができる。
【００３７】
ホストコンピュータシステムとＮＶＭｅ装置との間の通信はＮＶＭｅ仕様にしたがう。
ホストコンピュータシステム及びＮＶＭｅ装置の１つ以上の構成要素が開示された動作を実行することとして以下で説明するが、本システム及び方法はこれに制限されなく、ホストコンピュータシステム及びＮＶＭｅ装置の他の構成要素は、代わりに、又は共に、そのような動作を実行することができる。
【００３８】
メモリ装置ドライバーは、少なくともカーネル空間でメモリアドレスの第１範囲を予約することによって１つ以上のキューからなる第１キューセットを生成する（ステップＳ２０１）。
第１キューセットは、少なくとも管理送信キュー、管理完了キュー、Ｉ／Ｏ送信キュー、及びＩ／Ｏ完了キューを含む。
【００３９】
次に、メモリ装置ドライバーは、ＮＶＭｅ装置のコントローラに第１キューセットの位置アドレス及び大きさを提供する（ステップＳ２０２）。
次に、メモリ装置ドライバーは、ホストコンピュータシステム上で実行される使用者アプリケーションプロセスから使用者モードアクセスに対する要求を受信する（ステップＳ２０３）。
【００４０】
次に、メモリ装置ドライバーは、使用者モードアクセスに対する要求を受信したことに応答して使用者アプリケーションプロセスによって使用するためにマッピングされたメモリアドレスの第２範囲を少なくとも予約することによって１つ以上のキューからなる第２キューセットを生成する（ステップＳ２０４）。
第２キューセットは、少なくともＩ／Ｏ送信キュー及びＩ／Ｏ完了キューを含む。
メモリ装置ドライバーは、また使用者モードアクセス要求を受信したことに応答して第２キューセットの位置アドレス及び大きさを使用者アプリケーションプロセス及びＮＶＭｅ装置のコントローラに提供する（ステップＳ２０５）。
【００４１】
第１及び第２キューセットが生成された後、ホストコンピュータシステム上で実行される使用者アプリケーションプロセスは、第２キューセット内のＩ／Ｏ送信キューに対するＩ／Ｏ命令の仮想メモリ書込み動作を実行し、第２キューセット内のＩ／Ｏ送信キューに対応する送信テールドアベルレジスターの値をアップデートする。
同時に、カーネルモードプロセスは、第１キューセット内のＩ／Ｏ送信キューに対するＩ／Ｏ命令の仮想メモリ書込み動作を実行し、第１キューセット内のＩ／Ｏ送信キューに対応する送信テールドアベルレジスターの値をアップデートする。
即ち、使用者アプリケーション及びカーネルモードプロセスは、第２キューセット内のＩ／Ｏ送信キューに対する仮想メモリ書込み動作及び第１キューセット内のＩ／Ｏ送信キューに対する仮想メモリ書込み動作を各々及び並行して実行する。
【００４２】
図３は、本発明の実施形態に係るホストコンピュータシステム及びカーネルモードアクセス及び使用者モードアクセスを同時に提供する方法を具現するのに使用することができる例示的なコンピュータアーキテクチャを示すブロック図である。
例示的なコンピュータアーキテクチャは、本明細書で説明する１つ以上の構成を具現するために使用することができるが、ホストコンピュータシステムはこれに制限されない。
【００４３】
本発明の一実施形態に係るアーキテクチャ３００は、情報を伝送するためのシステムバス３２０及び情報を処理するためにシステムバス３２０に接続されたプロセッサ３１０を含む。
アーキテクチャ３００は、プロセッサ３１０によって実行される情報及び命令語を格納するためにシステムバス３２０に接続されたランダムアクセスメモリ（ＲＡＭ）又は他の動的格納装置３２５（以下、メインメモリと記す）をさらに含む。
また、メインメモリ３２５は、プロセッサ３１０による命令の実行の間に臨時変数又は他の中間情報を格納するために使用する。
【００４４】
また、アーキテクチャ３００は、メインメモリ３２５によって使用される静的情報及び命令語を格納するためにシステムバス３２０に接続された読出し専用メモリ（ＲＯＭ）３２６、及び／又は他の静的格納装置を含む。
磁気ディスク又は光ディスクのようなデータストレージ装置３２１、及びそれの対応するドライブもまた情報及び命令を格納するためにアーキテクチャ３００に接続することができる。
アーキテクチャ３００は、またＩ／Ｏインターフェイス３３０を通じて第２Ｉ／Ｏバス３５０に接続される。
複数のＩ／Ｏ装置は、ディスプレイ装置３４３、入力装置（例えば、英文／数字入力装置（キーボード）３４２、カーソル制御装置３４１、及び／又はタッチスクリーン装置）を含む。
【００４５】
通信装置３４０は、ネットワークを通じて他のコンピュータ（例えば、サーバー又はクライアント）に対するアクセスを許容する。
通信装置３４０は、イーサーネット、トークンリング、又は他の類型のネットワークに接続するために使用されるような１つ以上のモデム、ネットワークインターフェイスカード、無線ネットワークインターフェイス、又は他のインターフェイス装置を含むことができる。
【００４６】
本明細書の詳細な説明の一部分は、コンピュータメモリ内のデータビットに対する演算のアルゴリズム及びシンボル表現によって提供される。
このようなアルゴリズム説明及び表現は、データ処理技術分野の当業者がそれらの作業内容を当業者に最も効果的に伝達するために使用される手段である。
アルゴリズムは、一般的に所望する結果を誘導するステップの一貫性のあるシークェンスとして考えられる。
ステップは、物理的量を物理的に操作することを必要とする。
【００４７】
一般的に必ずそうではないが、このような量は、格納、伝送、結合、比較、及びその他の操作が可能な電気又は磁気信号の形態を取る。
このような信号をビット（ｂｉｔｓ）、値（ｖａｌｕｅｓ）、要素（ｅｌｅｍｅｎｔｓ）、記号（ｓｙｍｂｏｌｓ）、文字（ｃｈａｒａｃｔｅｒｓ）、用語（ｔｅｒｍｓ）、数字（ｎｕｍｂｅｒｓ）等に参照する一般的な使用原則が時々に便利であることが立証された。
しかし、これら及び類似する用語の全ては、適切な物理的量と関連されなければならなく、単なるこのような量に適用される便利なラベルであることを注意しなければならない。
【００４８】
特別に言及しない限り、以下の説明から明確であるように、“処理（ｐｒｏｃｅｓｓｉｎｇ）”、“コンピューティング（ｃｏｍｐｕｔｉｎｇ）”又は“計算（ｃａｌｃｕｌａｔｉｎｇ）”又は“決定（ｄｅｔｅｒｍｉｎｉｎｇ）”又は“表示（ｄｉｓｐｌａｙｉｎｇ）”等のような用語は、明細書の全般にわたって、コンピュータシステム又は類似の電子コンピューティング装置の動作及び処理を参照して、コンピュータシステムのレジスター及びメモリ内で物理的（電子）量で表現されたデータをコンピュータシステムメモリ、レジスター、情報ストレージ、伝送、又はディスプレイ装置のような他の装置内物理的量に同様に表現される他のデータに操作及び変換することを意味する。
【００４９】
また、本明細書は、本発明に係る動作を実行するための装置を開示する。
この装置は要求される目的のために特別に構成されるか、コンピュータに格納されたコンピュータプログラムによって選択的に活性化されるか、或いは再構成される汎用コンピュータを含むことができる。
このようなコンピュータプログラムは、フロッピー（登録商標）ディスク、光学ディスク、ＣＤ−ＲＯＭ、及び磁気光学ディスクを含む任意の類型のディスクのようなコンピュータ読出し可能記録媒体に格納され、読出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、ＥＰＲＯＭ、ＥＥＰＲＯＭ、磁気又は光学カード、又は電子命令を格納するのに適合な任意の類型の媒体を含み、その各々はコンピュータシステムバスに接続される。
【００５０】
本明細書で提示したアルゴリズムは、本質的に任意の特定コンピュータ又は他の装置と関連されない。
多様な汎用システム、メッセージングサーバー、又は個人用コンピュータが本明細書の教示にしたがってプログラムと共に使用することができるか、或いは要求される方法ステップを実行するためにより特殊化された装置を構成することが便利であることもある。
多様なシステムに必要である構造は上述にて行った。
本明細書で説明した教示を具現するために多様なプログラミング言語を使用することができる。
【００５１】
尚、本発明は、上述の実施形態に限られるものではない。本発明の技術的範囲から逸脱しない範囲内で多様に変更実施することが可能である。
【符号の説明】
【００５２】
１００    ホストコンピュータシステム（ホスト）１００
１１０    カーネル空間
１１１    ブロックＩ／Ｏ階層
１１２    ＮＶＭｅ装置ドライバー
１１３    第１キューセット
１２０    第１使用者空間
１２１    第１アプリケーションプロセス
１３０    第２使用者空間
１３１    第２アプリケーションプロセス
１３２    第２キューセット
２００    ＮＶＭｅ装置
２０１    ＮＶＭｅコントローラ
２０２    レジスター
３００    アーキテクチャ
３１０    プロセッサ
３２０    システムバス
３２１    データストレージ装置
３２５    メインメモリ（動的格納装置）
３３０    Ｉ／Ｏインターフェイス
３４０    通信装置
３４１    カーソル制御装置
３４２    キーボード
３４３    ディスプレイ装置
３５０    第２Ｉ／Ｏバス
【図１】
2017194959.tif 000003
【図２】
2017194959.tif 000004
【図３】
2017194959.tif 000005