以下、実施形態について、図面を用いて説明する。
図1は、不揮発性ストレージおよび不揮発性ストレージの処理方法の一実施形態を示す。図1に示す不揮発性ストレージ100は、SSD等の不揮発性の記憶装置であり、ホスト装置200に接続される。先ず、ホスト装置200について説明する。
ホスト装置200は、例えば、CPU220とメモリ制御部240とDRAM(Dynamic Random Access Memory)260とを含むサーバ等の情報処理装置であり、不揮発性ストレージ100にアクセスするコマンドCMDを発行する。図1に示すコマンドCMDa(CMDa1、CMDa2)は、データ記憶部180へのアクセスを制御するアクセスコマンドである。なお、アクセスコマンドCMDa1は、アクセスコマンドCMDaのうち、CPU220からDRAM260を介さずに不揮発性ストレージ100に転送されるコマンドである。アクセスコマンドCMDa2は、アクセスコマンドCMDaのうち、CPU220からDRAM260を介して不揮発性ストレージ100に転送されるコマンドである。また、コマンドCMDb1は、複数のアクセスコマンドCMDa2の転送準備がホスト装置202で整ったことを通知する転送準備完了コマンドである。図1に示す例では、タイプ判定部120がホスト装置200から受信するコマンドCMD1は、CPU220からDRAM260を介さずに不揮発性ストレージ100に転送されるアクセスコマンドCMDa1および転送準備完了コマンドCMDb1等である。
例えば、CPU220は、不揮発性ストレージ100内のデータ記憶部180に対するアクセスの対象を示すアドレス等を含むアクセスコマンドCMDa1を、コマンドCMD1として不揮発性ストレージ100に出力する。以下、不揮発性ストレージ100内のデータ記憶部180に対するアクセスの対象を示すアドレスは、アクセス先のデータ記憶部180のアドレスとも称される。
また、例えば、CPU220は、DMA方式で複数のコマンドCMD2を不揮発性ストレージ100に転送する場合、アクセス先のデータ記憶部180のアドレス等を含む複数のアクセスコマンドCMDa2をメモリ制御部240を介してDRAM260に格納する。そして、CPU220は、コマンドCMDa2のDRAM260での格納先を示すアドレス、DMA方式でコマンドCMDa2を転送することを示す情報等を含む転送準備完了コマンドCMDb1を、コマンドCMD1として不揮発性ストレージ100に出力する。
メモリ制御部240は、DRAM260の動作を制御する。DRAM260の少なくとも一部の領域は、上述したように、不揮発性ストレージ100内のデータ記憶部180にアクセスするアクセスコマンドCMDa2を格納するキューに割り当てられる。なお、ホスト装置200の構成は、図1に示す例に限定されない。次に、不揮発性ストレージ100について説明する。
不揮発性ストレージ100は、タイプ判定部120と、コマンド取得部140と、コマンド保持部160と、アクセス制御部170と、データを記憶する不揮発性のデータ記憶部180とを有する。
タイプ判定部120は、ホスト装置200から受信するコマンドCMD1が、アクセスコマンドCMDa1か転送準備完了コマンドCMDb1かを判定する。例えば、タイプ判定部120は、CPU220から転送されたコマンドCMD1がDMA方式でコマンドCMDa2を転送することを示す情報を含む場合、コマンドCMD1が転送準備完了コマンドCMDb1であると判定する。そして、タイプ判定部120は、コマンドCMD1が転送準備完了コマンドCMDb1である場合、転送準備完了コマンドCMDb1をコマンド取得部140に転送する。
また、タイプ判定部120は、例えば、コマンドCMD1がDMA方式でコマンドCMDa2を転送することを示す情報を含まない場合、コマンドCMD1がアクセスコマンドCMDa1であると判定する。そして、タイプ判定部120は、コマンドCMD1がアクセスコマンドCMDa1である場合、すなわち、コマンドCMD1が転送準備完了コマンドCMDb1でない場合、コマンドCMD1をコマンド保持部160に転送する。これにより、アクセスコマンドCMDa1は、コマンド保持部160に格納される。以下、アクセスコマンドCMDaをCPU220からDRAM260を介さずに不揮発性ストレージ100内のコマンド保持部160に転送する方式は、PIO方式とも称される。
コマンド取得部140は、タイプ判定部120がホスト装置200から転送準備完了コマンドCMDb1を受信したと判定した場合、タイプ判定部120から転送される転送準備完了コマンドCMDb1を受ける。そして、コマンド取得部140は、転送準備完了コマンドCMDb1に基づいて、ダイレクトメモリアクセス要求DREQをホスト装置200のメモリ制御部240に発行する。以下、ダイレクトメモリアクセス要求は、DMA要求とも称される。
DMA要求DREQを受けたメモリ制御部240は、DRAM260に格納されたアクセスコマンドCMDa2のうち、DMA要求DREQで要求されたアクセスコマンドCMDa2をコマンド取得部140に転送する。これにより、コマンド取得部140は、転送準備完了コマンドCMDb1で指定されたアクセスコマンドCMDa2をホスト装置200から取得する。そして、コマンド取得部140は、ホスト装置200から取得したアクセスコマンドCMDa2をコマンド保持部160に転送する。これにより、アクセスコマンドCMDa2は、コマンド保持部160に格納される。
このように、コマンド取得部140は、タイプ判定部120がホスト装置200から転送準備完了コマンドCMDb1を受信したと判定した場合、転送準備完了コマンドCMDb1に基づいてDMA要求DREQをホスト装置200に発行する。そして、コマンド取得部140は、DMA要求DREQに基づくダイレクトメモリアクセス転送によりホスト装置200から複数のアクセスコマンドCMDa2を取得する。ダイレクトメモリアクセス転送は、DMA方式によるデータ転送である。以下、ダイレクトメモリアクセス転送は、DMA転送とも称される。
コマンド保持部160は、例えば、リングバッファ、FIFO(First-In First-Out)等のバッファであり、ホスト装置200から発行されたアクセスコマンドCMDaを格納するキューとして機能する。例えば、コマンド保持部160は、タイプ判定部120から転送されたアクセスコマンドCMDa1およびコマンド取得部140から転送されたアクセスコマンドCMDa2等を保持する。すなわち、コマンド保持部160は、タイプ判定部120が受信したアクセスコマンドCMDa1またはコマンド取得部140が取得したアクセスコマンドCMDa2を保持する。
アクセス制御部170は、コマンド保持部160に保持されたアクセスコマンドCMDaに基づいてデータ記憶部180にアクセスする。例えば、アクセス制御部170は、データ記憶部180からデータを読み出すアクセス、データ記憶部180にデータを書き込むアクセス、データ記憶部180に保持されたデータを消去するアクセス等を、アクセスコマンドCMDaに基づいて実行する。
データ記憶部180は、NANDフラッシュメモリ等の不揮発性のメモリであり、ホスト装置200等で扱うデータを記憶する。データ記憶部180は、コマンド保持部160に格納されたアクセスコマンドCMDaに基づいて制御される。すなわち、データ記憶部180は、ホスト装置200から受信するアクセスコマンドCMDaに基づいてアクセスされる。
このように、不揮発性ストレージ100は、DMA方式によるコマンド転送とPIO方式によるコマンド転送との両方に対応する。
ここで、DMA方式によるコマンド転送のみに対応した不揮発性ストレージを搭載したシステムでは、ホスト装置から不揮発性ストレージに1つのコマンドを転送する場合でも、DMA転送が実行される。この場合、DMA要求等のDMAを開始するための処理がオーバーヘッドになり、PIO方式を用いる場合に比べて、コマンドの転送にかかる時間は増加する。
また、PIO方式によるコマンド転送のみに対応した不揮発性ストレージを搭載したシステムでは、ホスト装置から不揮発性ストレージに複数のコマンドを連続して転送する場合、DMA方式を用いる場合に比べて、コマンドの転送にかかる時間は増加する。
なお、DMA方式とPIO方式とを切り替えるモード設定を予め実行することでDMA方式とPIO方式とを切り替える不揮発性ストレージでは、モード設定のための処理がオーバーヘッドになり、コマンドの転送にかかる時間が増加するおそれがある。
これに対し、図1に示す不揮発性ストレージ100とホスト装置200とを搭載したシステムは、DMA方式とPIO方式とを切り替えるモード設定を予め実行することなく、DMA方式とPIO方式とのいずれかを選択してコマンド転送を実行できる。
例えば、ホスト装置200が不揮発性ストレージ100に1つのコマンドCMDaを転送する場合、PIO方式によるコマンド転送を用いることにより、DMA方式によるコマンド転送を用いる場合に比べて、コマンドCMDaの転送にかかる時間を短縮できる。また、ホスト装置200が不揮発性ストレージ100に複数のコマンドCMDaを連続で転送する場合、DMA方式によるコマンド転送を用いることにより、PIO方式によるコマンド転送を用いる場合に比べて、コマンドCMDaの転送にかかる時間を短縮できる。このように、DMA方式とPIO方式のうち、コマンドCMDaの転送にかかる時間の短い方をホスト装置200が選択することにより、DMA方式とPIO方式との一方のみを使用する場合に比べて、コマンドCMDaの転送にかかる時間を短縮することができる。
また、不揮発性ストレージ100は、CPU220から転送されるコマンドCMD1がアクセスコマンドCMDa1か転送準備完了コマンドCMDb1かを判定することで、DMA方式によるコマンド転送かPIO方式によるコマンド転送かを判定する。このため、DMA方式とPIO方式とを予め切り替えるモード設定等のオーバーヘッドの発生を抑制することができる。
このように、不揮発性ストレージ100は、ホスト装置200から不揮発性ストレージ100内のデータ記憶部180に転送するコマンドCMDaの数に拘わらず、コマンドCMDaの転送にかかる時間を短縮可能である。
なお、不揮発性ストレージ100の構成は、図1に示す例に限定されない。例えば、不揮発性ストレージ100は、図2に示すように、複数のチャネルCHを有してもよい。この場合、コマンド保持部160、アクセス制御部170およびデータ記憶部180は、チャネルCH毎に設けられる。
以上、図1に示す実施形態では、不揮発性ストレージ100は、ホスト装置200内のCPU220から転送されたコマンドCMD1がアクセスコマンドCMDa1か転送準備完了コマンドCMDb1かを判定する。そして、不揮発性ストレージ100は、CPU220から転送されたコマンドCMD1がアクセスコマンドCMDa1である場合、CPU220から転送されたアクセスコマンドCMDa1をコマンド保持部160に格納する。また、不揮発性ストレージ100は、CPU220から転送されたコマンドCMD1が転送準備完了コマンドCMDb1である場合、ホスト装置200内のDRAM260に格納されたアクセスコマンドCMDa2を、DMA転送で取得する。そして、不揮発性ストレージ100は、DRAM260からDMA転送で取得したアクセスコマンドCMDa2を、コマンド保持部160に格納する。不揮発性ストレージ100がDMA方式とPIO方式との両方のコマンド転送に対応するため、ホスト装置200から不揮発性ストレージ100に転送するコマンドCMDaの数に拘わらず、コマンドCMDaの転送にかかる時間を短縮することができる。
図2は、不揮発性ストレージおよび不揮発性ストレージの処理方法の別の実施形態を示す。図1で説明した要素と同一または同様の要素については、同一または同様の符号を付し、これ等については、詳細な説明を省略する。図2に示す不揮発性ストレージ102は、SSD等の不揮発性の記憶装置であり、ホスト装置202に接続される。先ず、ホスト装置202について説明する。
ホスト装置202は、インターフェース部280が図1に示したホスト装置200に追加されることを除いて、図1に示したホスト装置200と同一または同様である。例えば、ホスト装置202は、CPU220とメモリ制御部240とDRAM260とインターフェース部280とを含むサーバ等の情報処理装置であり、不揮発性ストレージ102にアクセスするコマンドCMDを発行する。
インターフェース部280は、例えば、PCI(Peripheral Component Interconnect) Express規格(以下、PCIeとも称する)に準拠したインターフェースである。例えば、インターフェース部280は、不揮発性ストレージ102内のPCIeに準拠したインターフェース部110に接続される。これにより、例えば、CPU220、メモリ制御部240およびDRAM260等は、インターフェース部280、110を介して、不揮発性ストレージ102内のタイプ判定部120およびコマンド取得部140等との間のデータ転送を実行する。なお、ホスト装置202の構成は、図2に示す例に限定されない。次に、不揮発性ストレージ102について説明する。
図2に示す不揮発性ストレージ102では、図1に示したアクセス制御部170の代わりにコマンド発行部172が設けられ、インターフェース部110とバッファ部130とチャネル判定部150とが図1に示した不揮発性ストレージ100に追加される。また、不揮発性ストレージ102では、コマンド保持部160とコマンド発行部172とデータ記憶部180が、複数のチャネルCH(CH1、CH2、CH3、・・・、CHn)毎に設けられる。不揮発性ストレージ102のその他の構成は、図1に示した不揮発性ストレージ100と同一または同様である。
例えば、不揮発性ストレージ102は、インターフェース部110とタイプ判定部120とバッファ部130とコマンド取得部140とチャネル判定部150と複数のコマンド保持部160と複数のコマンド発行部172と複数のデータ記憶部180とを有する。インターフェース部110は、上述したように、PCI Express規格に準拠したインターフェースである。
タイプ判定部120は、図1に示したタイプ判定部120と同一または同様である。例えば、タイプ判定部120は、CPU220から転送されたコマンドCMD1を転送準備完了コマンドCMDb1と判定した場合、CPU220から転送されたコマンドCMD1、すなわち、転送準備完了コマンドCMDb1を、バッファ部130に転送する。すなわち、タイプ判定部120は、ホスト装置202から受信したコマンドCMD1が転送準備完了コマンドCMDb1である場合、ホスト装置202から受信した転送準備完了コマンドCMDb1をバッファ部130に格納する。
また、タイプ判定部120は、コマンドCMD1がアクセスコマンドCMDa1である場合、すなわち、コマンドCMD1が転送準備完了コマンドCMDb1でない場合、コマンドCMD1をチャネル判定部150に転送する。これにより、アクセスコマンドCMDa1は、チャネル判定部150に転送される。
バッファ部130は、例えば、FIFO等のバッファであり、タイプ判定部120から転送される転送準備完了コマンドCMDb1を保持する。そして、バッファ部130は、保持した転送準備完了コマンドCMDb1を、コマンド取得部140に転送する。なお、例えば、バッファ部130は、コマンド取得部140がアクセスコマンドCMDa2をDMA転送でDRAM260から取得する処理を実行中、転送準備完了コマンドCMDb1のコマンド取得部140への転送を待機する。すなわち、バッファ部130は、コマンド取得部140がアクセスコマンドCMDa2をDMA転送でDRAM260から取得する処理を実行していない場合、転送準備完了コマンドCMDb1をコマンド取得部140に転送する。
コマンド取得部140は、図1に示したコマンド取得部140と同一または同様である。例えば、コマンド取得部140は、バッファ部130から転送準備完了コマンドCMDb1を取得する。そして、コマンド取得部140は、転送準備完了コマンドCMDb1に基づいて、DMA要求DREQをホスト装置202内のメモリ制御部240に発行する。これにより、DRAM260に格納されたアクセスコマンドCMDa2のうち、DMA要求DREQで要求されたアクセスコマンドCMDa2は、コマンド取得部140にDMA転送される。コマンド取得部140は、DRAM260からDMA転送された複数のアクセスコマンドCMDa2をチャネル判定部150に順次転送する。
チャネル判定部150は、タイプ判定部120が受信したアクセスコマンドCMDa1またはコマンド取得部140が取得したアクセスコマンドCMDa2を受信する。すなわち、チャネル判定部150は、タイプ判定部120またはコマンド取得部140からアクセスコマンドCMDaを受信する。
例えば、チャネル判定部150は、タイプ判定部120またはコマンド取得部140から転送されたアクセスコマンドCMDaに基づいて、アクセス対象のデータ記憶部180に対応するチャネルCHを特定する。そして、チャネル判定部150は、特定したチャネルCHのコマンド保持部160に、タイプ判定部120またはコマンド取得部140から転送されたアクセスコマンドCMDaを格納する。
このように、チャネル判定部150は、タイプ判定部120またはコマンド取得部140から受信したアクセスコマンドCMDaに基づいて複数のチャネルCHのうちのいずれかを選択する。そして、チャネル判定部150は、アクセスコマンドCMDaに基づいて選択したチャネルCHのコマンド保持部160に、アクセスコマンドCMDaを格納する。
コマンド保持部160は、図1に示したコマンド保持部160と同一または同様である。例えば、コマンド保持部160は、ホスト装置202から発行されたアクセスコマンドCMDaを格納するキューとして機能する。
コマンド発行部172は、コマンド保持部160に保持されたアクセスコマンドCMDaに基づいてデータ記憶部180にアクセスするアクセス制御部の一例である。例えば、コマンド発行部172は、コマンド保持部160に保持されたアクセスコマンドCMDaを読み出し、読み出したアクセスコマンドCMDaをデータ記憶部180に発行する。これにより、データ記憶部180に対するアクセスがアクセスコマンドCMDaに基づいて実行される。例えば、データ記憶部180からデータを読み出すアクセス、データ記憶部180にデータを書き込むアクセス、データ記憶部180に保持されたデータを消去するアクセス等がアクセスコマンドCMDaに基づいて実行される。
データ記憶部180は、図1に示したデータ記憶部180と同一または同様である。例えば、データ記憶部180は、NANDフラッシュメモリ等の不揮発性のメモリであり、ホスト装置202等で扱うデータを記憶する。
なお、不揮発性ストレージ102の構成は、図2に示す例に限定されない。例えば、バッファ部130は、コマンド取得部140内に設けられてもよい。また、タイプ判定部120は、アクセスコマンドCMDa1を保持するFIFO等のバッファを有し、アクセスコマンドCMDa1をバッファを介してチャネル判定部150に転送してもよい。この場合、タイプ判定部120は、例えば、コマンド取得部140がアクセスコマンドCMDa2をDMA転送でDRAM260から取得する処理を実行中、アクセスコマンドCMDa1のチャネル判定部150への転送を待機する。
図3は、図2に示したCPU220から不揮発性ストレージ102に発行されるコマンドCMD1の一例を示す。
PIO方式でアクセスコマンドCMDaを転送する場合、コマンドCMD1としてアクセスコマンドCMDa1がCPU220から不揮発性ストレージ102に発行される(図3(a))。この場合、コマンドCMD1は、論理値”0”のフラグDFLGと、コマンド種別と、アクセス対象の領域を示すデータ記憶部180のアドレスと、アクセス対象の領域の大きさを示すサイズ情報とを有するアクセスコマンドCMDa1である。フラグDFLGは、例えば、コマンドCMD1の先頭ビットに割り当てられ、コマンドCMD1がアクセスコマンドCMDaである場合、論理値”0”に設定される。コマンド種別は、例えば、データを読み出すリードコマンド、データを書き込むプログラムコマンド、データを消去するイレースコマンド等を識別する識別情報である。
DMA方式でアクセスコマンドCMDaを転送する場合、コマンドCMD1として転送準備完了コマンドCMDb1がCPU220から不揮発性ストレージ102に発行される(図3(b))。この場合、コマンドCMD1は、論理値”1”のフラグDFLGと、アクセスコマンドCMDa2のDRAM260での格納先を示すアドレスと、転送対象のアクセスコマンドCMDa2のサイズを示すサイズ情報とを有する転送準備完了コマンドCMDb1である。フラグDFLGは、例えば、コマンドCMD1が転送準備完了コマンドCMDb1である場合、論理値”1”に設定される。したがって、タイプ判定部120は、フラグDFLGの値により、DMA方式かPIO方式かを判定する。
例えば、フラグDFLGは、コンピュータにSSDを接続するための通信規格の1つであるNVM Express(Non-Volatile Memory Express)規格のDoorbellに対応する。なお、コマンドCMD1のデータ構造は、図3に示す例に限定されない。
図4は、図2に示したCPU220の動作の一例を示す。なお、図4は、不揮発性ストレージ102にコマンドCMD1を発行する際のCPU220の動作を示す。また、CPU220の動作は、図4に示す例に限定されない。
ステップS100では、CPU220は、アクセスコマンドCMDaの転送方式としてDMA方式を選択するか否かを判定する。例えば、CPU220は、転送対象のコマンド数が予め設定された閾値以上の場合、アクセスコマンドCMDaの転送方式としてDMA方式を選択する。また、例えば、CPU220は、転送対象のコマンド数が予め設定された閾値未満の場合、アクセスコマンドCMDaの転送方式としてPIO方式を選択する。
この場合、閾値は、例えば、転送対象の全てのコマンドをDMA方式で転送するのにかかる時間が転送対象の全てのコマンドをPIO方式で転送するのにかかる時間より短くなるコマンド数の最小値である。なお、閾値は、ホスト装置202のユーザ等により任意の値に設定されもよい。
このように、CPU220は、DMA方式とPIO方式のうち、転送対象の全てのコマンドCMDaの転送にかかる時間の短い方を選択する。そして、CPU220は、アクセスコマンドCMDaの転送方式としてDMA方式を選択する場合、動作をステップS110に移す。一方、CPU220は、アクセスコマンドCMDaの転送方式としてDMA方式を選択しない場合、すなわち、アクセスコマンドCMDaの転送方式としてPIO方式を選択する場合、動作をステップS130に移す。
ステップS110では、CPU220は、メモリ制御部240を介してDRAM260に複数のアクセスコマンドCMDa2を格納する。アクセスコマンドCMDa2のデータ構造は、例えば、図3に示したアクセスコマンドCMDa1からフラグDFLGを省いたデータ構造と同一または同様である。
次に、ステップS120では、CPU220は、論理値”1”のフラグDFLGとDRAM260のアドレスとサイズ情報とを含むコマンドCMD1を不揮発性ストレージ102に発行する。例えば、CPU220は、図3に示した転送準備完了コマンドCMDb1をコマンドCMD1として不揮発性ストレージ102に発行する。これにより、不揮発性ストレージ102にコマンドCMD1を発行する際のCPU220の動作は、終了する。
ステップS130では、CPU220は、論理値”0”のフラグDFLGとコマンド種別とデータ記憶部180のアドレスとサイズ情報とを含むコマンドCMD1を不揮発性ストレージ102に発行する。例えば、CPU220は、図3に示したアクセスコマンドCMDa1をコマンドCMD1として不揮発性ストレージ102に発行する。これにより、不揮発性ストレージ102にコマンドCMD1を発行する際のCPU220の動作は、終了する。
図5は、図2に示したタイプ判定部120の動作の一例を示す。なお、タイプ判定部120の動作は、図5に示す例に限定されない。
ステップS200では、タイプ判定部120は、ホスト装置202内のCPU220から不揮発性ストレージ102に発行されたコマンドCMD1を、インターフェース部110を介して受信する。
次に、ステップS210では、タイプ判定部120は、CPU220から受信したコマンドCMD1のフラグDFLGが論理値”1”であるか否かを判定する。すなわち、タイプ判定部120は、CPU220から受信したコマンドCMD1が転送準備完了コマンドCMDb1であるか否かを判定する。これにより、タイプ判定部120は、アクセスコマンドCMDaがDMA方式で転送されるか否かを判定できる。
コマンドCMD1のフラグDFLGが論理値”1”である場合、タイプ判定部120の動作は、ステップS220に移る。一方、コマンドCMD1のフラグDFLGが論理値”1”でない場合、すなわち、コマンドCMD1のフラグDFLGが論理値”0”である場合、タイプ判定部120の動作は、ステップS230に移る。
ステップS220では、タイプ判定部120は、CPU220から受信したコマンドCMD1を、バッファ部130に転送する。すなわち、タイプ判定部120は、CPU220から受信した転送準備完了コマンドCMDb1を、バッファ部130に転送する。これにより、転送準備完了コマンドCMDb1がバッファ部130に格納される。なお、タイプ判定部120は、フラグDFLGを削除した転送準備完了コマンドCMDb1をバッファ部130に転送してもよいし、フラグDFLGを残した転送準備完了コマンドCMDb1をバッファ部130に転送してもよい。
ステップS230では、タイプ判定部120は、CPU220から受信したコマンドCMD1を、チャネル判定部150に転送する。すなわち、タイプ判定部120は、CPU220から受信したアクセスコマンドCMDa1を、チャネル判定部150に転送する。例えば、タイプ判定部120は、CPU220から受信したアクセスコマンドCMDa1のフラグDFLGを削除し、フラグDFLGを削除したアクセスコマンドCMDa1をチャネル判定部150に転送する。
図6は、図2に示したバッファ部130およびコマンド取得部140の動作の一例を示す。
ステップS300では、バッファ部130は、コマンド取得部140が転送準備完了コマンドCMDb1を受信可能なレディ状態であるか否かを判定する。例えば、バッファ部130は、コマンド取得部140がアクセスコマンドCMDa2のチャネル判定部150への転送を実行中であることを示すビジー信号を、コマンド取得部140から受信した場合、コマンド取得部140の状態をレディ状態でないと判定する。すなわち、バッファ部130は、ビジー信号がコマンド取得部140から出力されていない場合、コマンド取得部140の状態をレディ状態であると判定する。
コマンド取得部140がレディ状態である場合、バッファ部130の動作は、ステップS310に移る。一方、コマンド取得部140がレディ状態でない場合、バッファ部130の動作は、ステップS300に戻る。すなわち、バッファ部130は、コマンド取得部140がレディ状態になるまで、ステップS310の処理の実行を待機する。
ステップS310では、バッファ部130は、保持している転送準備完了コマンドCMDb1をコマンド取得部140に転送する。なお、バッファ部130が保持している転送準備完了コマンドCMDb1は、図5に示したステップS220でタイプ判定部120から転送されたコマンドCMD1である。転送準備完了コマンドCMDb1を受信したコマンド取得部140は、ステップS400、S410、S420、S430の処理を実行する。
例えば、ステップS400では、コマンド取得部140は、転送準備完了コマンドCMDb1をバッファ部130から受信し、ビジー信号をバッファ部130等に出力する。例えば、コマンド取得部140は、転送準備完了コマンドCMDb1をバッファ部130から受信した場合、ビジー信号をアサートする。
次に、ステップS410では、コマンド取得部140は、バッファ部130から転送された転送準備完了コマンドCMDb1に基づいて、DMA要求DREQをホスト装置202内のメモリ制御部240に発行する。例えば、コマンド取得部140は、転送準備完了コマンドCMDb1に含まれる情報のうちのDRAM260のアドレスおよびサイズ情報に基づいてDMA要求DREQを生成し、生成したDMA要求DREQをホスト装置202内のメモリ制御部240に発行する。
次に、ステップS420では、コマンド取得部140は、コマンド種別、データ記憶部180のアドレスおよびサイズ情報を含むアクセスコマンドCMDa2をホスト装置202から受信してチャネル判定部150に転送する。例えば、コマンド取得部140は、図4に示したステップS110でDRAM260に格納された複数のアクセスコマンドCMDa2を、ステップS410で発行したDMA要求DREQに基づくDMA転送によりホスト装置200から順次取得する。そして、コマンド取得部140は、ホスト装置200内のDRAM260からDMA転送により取得した複数のアクセスコマンドCMDa2を、チャネル判定部150に順次転送する。コマンド取得部140は、DMA要求DREQで要求した複数のアクセスコマンドCMDa2を全てチャネル判定部150に転送した後、ステップS430の処理を実行する。
ステップS430では、コマンド取得部140は、ビジー信号の出力を停止する。例えば、コマンド取得部140は、ビジー信号をネゲートする。
このように、転送準備完了コマンドCMDb1は、コマンド取得部140の動作状態に応じて、バッファ部130からコマンド取得部140に転送される。これにより、コマンド取得部140が転送準備完了コマンドCMDb1を受信可能でない状態のときに、転送準備完了コマンドCMDb1がコマンド取得部140に転送されることを抑制することができる。なお、タイプ判定部120からバッファ部130への転送準備完了コマンドCMDb1の転送は、コマンド取得部140の動作状態に拘わらず実行される。これにより、タイプ判定部120は、ホスト装置202から転送されるコマンドCMD1を効率よく受信できる。
なお、バッファ部130およびコマンド取得部140の動作は、図6に示す例に限定されない。例えば、コマンド取得部140は、バッファ部130に転送準備完了コマンドCMDb1が格納されていることを示す情報を受け、レディ状態のときに、バッファ部130から転送準備完了コマンドCMDb1を読み出してもよい。
図7は、図2に示したチャネル判定部150の動作の一例を示す。なお、チャネル判定部150の動作は、図7に示す例に限定されない。
ステップ500では、チャネル判定部150は、タイプ判定部120またはコマンド取得部140からアクセスコマンドCMDaを受信する。例えば、チャネル判定部150は、図5に示したステップS230でタイプ判定部120から転送されるアクセスコマンドCMDaを受信する。また、チャネル判定部150は、図6に示したステップS420でコマンド取得部140から転送されるアクセスコマンドCMDaを受信する。
次に、ステップ510では、チャネル判定部150は、ステップS500で受信したアクセスコマンドCMDaに含まれる情報のうちのデータ記憶部180のアドレスに対応するチャネルCHを特定する。そして、チャネル判定部150は、アクセスコマンドCMDaに基づいて特定したチャネルCHのコマンド保持部160に、アクセスコマンドCMDaを格納する。このように、チャネル判定部150は、ステップS500で受信したアクセスコマンドCMDaの格納先となるコマンド保持部160を、アクセスコマンドCMDaに含まれる情報のうちのデータ記憶部180のアドレスに基づいて選択する。これにより、アクセスコマンドCMDaは、アクセス対象のデータ記憶部180に対応するコマンド保持部160に格納される。
以上、図2から図7に示す実施形態においても、図1に示した実施形態と同様の効果を得ることができる。例えば、不揮発性ストレージ102内のタイプ判定部120は、ホスト装置202内のCPU220から転送されたコマンドCMD1がアクセスコマンドCMDa1か転送準備完了コマンドCMDb1かを判定する。そして、タイプ判定部120は、コマンドCMD1がアクセスコマンドCMDa1である場合、CPU220から転送されたアクセスコマンドCMDa1をチャネル判定部150に転送する。また、タイプ判定部120は、コマンドCMD1が転送準備完了コマンドCMDb1である場合、CPU220から転送された転送準備完了コマンドCMDb1をバッファ部130に格納する。
コマンド取得部140は、バッファ部130に保持された転送準備完了コマンドCMDb1を取得し、転送準備完了コマンドCMDb1に基づいて、DMA要求DREQをホスト装置202に発行する。そして、コマンド取得部140は、ホスト装置202内のDRAM260に格納されたアクセスコマンドCMDa2をDMA要求DREQに基づくDMA転送で取得し、取得したアクセスコマンドCMDa2をチャネル判定部150に転送する。
チャネル判定部150は、タイプ判定部120またはコマンド取得部140から受信したアクセスコマンドCMDaに基づいて複数のチャネルCHのうちのいずれかを選択し、選択したチャネルCHのコマンド保持部160にアクセスコマンドCMDaを格納する。このように、不揮発性ストレージ102は、DMA方式とPIO方式との両方のコマンド転送に対応する。このため、ホスト装置202から不揮発性ストレージ102に転送するコマンドCMDaの数に拘わらず、コマンドCMDaの転送にかかる時間を短縮することができる。
図8は、不揮発性ストレージおよび不揮発性ストレージの処理方法の別の実施形態を示す。図1から図7で説明した要素と同一または同様の要素については、同一または同様の符号を付し、これ等については、詳細な説明を省略する。図8に示す不揮発性ストレージ104は、SSD等の不揮発性の記憶装置であり、ホスト装置202に接続される。ホスト装置202は、図2に示したホスト装置202と同一または同様である。
不揮発性ストレージ104では、図2に示したタイプ判定部120およびバッファ部130の代わりにタイプ判定部122およびバッファ部112が設けられ、停止判定部124が図2に示した不揮発性ストレージ102に追加される。不揮発性ストレージ104のその他の構成は、図2に示した不揮発性ストレージ102と同一または同様である。
例えば、不揮発性ストレージ104は、インターフェース部110とバッファ部112とタイプ判定部122と停止判定部124とコマンド取得部140とチャネル判定部150とを有する。さらに、不揮発性ストレージ104は、図2に示した不揮発性ストレージ102と同様に、複数のチャネルCH毎に設けられた複数のコマンド保持部160と複数のコマンド発行部172と複数のデータ記憶部180とを有する。
インターフェース部110は、図2に示したインターフェース部110と同一または同様である。例えば、インターフェース部110は、PCI Express規格に準拠したインターフェースである。
バッファ部112は、例えば、FIFO等のバッファであり、ホスト装置202から受信するコマンドCMD1を保持し、保持したコマンドCMD1をタイプ判定部122に転送する。
タイプ判定部122は、停止判定部124から停止信号SSIGを受けている場合に、バッファ部112からのコマンドCMD1の読み出しを停止することを除いて、図2に示したタイプ判定部120と同一または同様である。
例えば、タイプ判定部122は、停止判定部124からの停止信号SSIGの出力が停止している場合に、バッファ部112からコマンドCMD1を取得する。そして、タイプ判定部122は、例えば、バッファ部112から取得したコマンドCMD1を転送準備完了コマンドCMDb1と判定した場合、コマンドCMD1、すなわち、転送準備完了コマンドCMDb1を、コマンド取得部140に転送する。すなわち、タイプ判定部122は、ホスト装置202からバッファ部112を介して受信したコマンドCMD1が転送準備完了コマンドCMDb1である場合、ホスト装置202から受信した転送準備完了コマンドCMDb1をコマンド取得部140に転送する。
また、タイプ判定部122は、コマンドCMD1がアクセスコマンドCMDa1である場合、すなわち、コマンドCMD1が転送準備完了コマンドCMDb1でない場合、コマンドCMD1をチャネル判定部150に転送する。これにより、アクセスコマンドCMDa1は、チャネル判定部150を介してコマンド保持部160に格納される。
停止判定部124は、バッファ部112に保持されたコマンドCMD1のタイプ判定部122への転送を停止するか否かを、コマンド取得部140の動作状態に基づいて判定する。例えば、停止判定部124は、コマンド取得部140がアクセスコマンドCMDa2のチャネル判定部150への転送を実行している場合、ビジー信号BSIGをコマンド取得部140から受ける。なお、ビジー信号BSIGは、コマンド取得部140がアクセスコマンドCMDa2のチャネル判定部150への転送を実行中であることを示す信号である。
停止判定部124は、ビジー信号BSIGを受信した場合、コマンド取得部140が転送準備完了コマンドCMDb1を受信可能なレディ状態でないと判定し、停止信号SSIGをタイプ判定部122に出力する。すなわち、停止信号SSIGは、コマンドCMD1のタイプ判定部122への転送を停止する信号である。例えば、停止判定部124は、ビジー信号BSIGがアサートされた場合、停止信号SSIGをアサートする。
また、停止判定部124は、コマンド取得部140からのビジー信号BSIGの出力が停止している場合、コマンド取得部140が転送準備完了コマンドCMDb1を受信可能なレディ状態であると判定し、停止信号SSIGの出力を停止する。例えば、停止判定部124は、ビジー信号BSIGがネゲートされた場合、停止信号SSIGをネゲートする。
このように、停止判定部124は、コマンド取得部140がアクセスコマンドCMDa2のコマンド保持部160への転送を実行中、バッファ部112に保持されたコマンドCMD1のタイプ判定部122への転送を停止すると判定する。
コマンド取得部140は、図2に示したコマンド取得部140と同一または同様である。例えば、コマンド取得部140は、タイプ判定部122から転送準備完了コマンドCMDb1を受信する。そして、コマンド取得部140は、転送準備完了コマンドCMDb1に基づいて、DMA要求DREQをホスト装置202内のメモリ制御部240に発行する。これにより、DRAM260に格納されたアクセスコマンドCMDa2のうち、DMA要求DREQで要求されたアクセスコマンドCMDa2は、コマンド取得部140にDMA転送される。コマンド取得部140は、DRAM260からDMA転送された複数のアクセスコマンドCMDa2をチャネル判定部150に順次転送する。これにより、複数のアクセスコマンドCMDa2は、チャネル判定部150を介してコマンド保持部160に格納される。
また、コマンド取得部140は、転送準備完了コマンドCMDb1をタイプ判定部122から受信した場合、ビジー信号BSIGを停止判定部124等に出力する。例えば、コマンド取得部140は、転送準備完了コマンドCMDb1をタイプ判定部122から受信した場合、ビジー信号BSIGをアサートする。そして、コマンド取得部140は、DMA転送で取得した複数のアクセスコマンドCMDa2を全てチャネル判定部150に転送した後に、ビジー信号BSIGの出力を停止する。例えば、コマンド取得部140は、DMA転送で取得した複数のアクセスコマンドCMDa2を全てチャネル判定部150に転送した後に、ビジー信号BSIGをネゲートする。
このように、コマンド取得部140は、DMA転送で取得した複数のアクセスコマンドCMDa2のチャネル判定部150への転送を実行している場合、ビジー信号BSIGを停止判定部124等に出力する。なお、コマンド取得部140の動作は、図6に示したコマンド取得部140の各ステップSの説明におけるバッファ部130をタイプ判定部120(但し、ビジー信号BSIGの出力先は停止判定部124)に読み替えることにより説明される。
チャネル判定部150、コマンド保持部160、コマンド発行部172およびデータ記憶部180は、図2に示したチャネル判定部150、コマンド保持部160、コマンド発行部172およびデータ記憶部180と同一または同様である。
なお、不揮発性ストレージ104の構成は、図8に示す例に限定されない。例えば、停止判定部124は、タイプ判定部122内に設けられてもよいし、バッファ部112内に設けられてもよい。あるいは、停止判定部124は、省かれてもよい。この場合、タイプ判定部122は、ビジー信号BSIGを停止信号SSIGとして、コマンド取得部140から受けてもよい。また、バッファ部112は、ビジー信号BSIGをコマンド取得部140から受け、コマンドCMD1のタイプ判定部122への転送を停止するか否かをビジー信号BSIGに基づいて判定してもよい。
図9は、図8に示したタイプ判定部122および停止判定部124の動作の一例を示す。なお、タイプ判定部122および停止判定部124の動作は、図9に示す例に限定されない。先ず、停止判定部124の動作を説明する。
ステップS600では、停止判定部124は、コマンド取得部140が転送準備完了コマンドCMDb1を受信可能なレディ状態であるか否かを判定する。例えば、停止判定部124は、ビジー信号BSIGをコマンド取得部140から受信した場合、コマンド取得部140の状態をレディ状態でないと判定する。すなわち、停止判定部124は、ビジー信号がコマンド取得部140から出力されていない場合、コマンド取得部140の状態をレディ状態であると判定する。
コマンド取得部140がレディ状態である場合、停止判定部124の動作は、ステップS610に移る。一方、コマンド取得部140がレディ状態でない場合、停止判定部124の動作は、ステップS620に移る。
ステップS610では、停止判定部124は、停止信号SSIGの出力を停止する。例えば、停止判定部124は、停止信号SSIGをネゲートする。
ステップS620では、停止判定部124は、停止信号SSIGをタイプ判定部122等に出力する。例えば、停止判定部124は、停止信号SSIGをアサートする。停止判定部124が停止信号SSIGを出力している場合、タイプ判定部122は、ステップS204、S210、S222、S230の処理の実行を待機する。次に、タイプ判定部122の動作を説明する。
ステップS202では、タイプ判定部122は、停止信号SSIGを停止判定部124から受信しているか否かを判定する。例えば、タイプ判定部122は、停止信号SSIGがアサートされているか否かを判定する。タイプ判定部122が停止信号SSIGを受信していない場合、タイプ判定部122の動作は、ステップS204に移る。一方、タイプ判定部122が停止信号SSIGを受信している場合、タイプ判定部122の動作は、ステップS202に戻る。すなわち、タイプ判定部122は、コマンド取得部140が転送準備完了コマンドCMDb1を受信可能なレディ状態になるまで、ステップS204の処理の実行を待機する。
ステップS204では、タイプ判定部122は、ホスト装置202内のCPU220から不揮発性ストレージ104に発行されたコマンドCMD1を、バッファ部112から取得する。
次に、ステップS210では、タイプ判定部122は、CPU220からバッファ部112を介して受信したコマンドCMD1のフラグDFLGが論理値”1”であるか否かを判定する。すなわち、タイプ判定部122は、CPU220からバッファ部112を介して受信したコマンドCMD1が転送準備完了コマンドCMDb1であるか否かを判定する。これにより、タイプ判定部122は、アクセスコマンドCMDaがDMA方式で転送されるか否かを判定できる。
コマンドCMD1のフラグDFLGが論理値”1”である場合、タイプ判定部122の動作は、ステップS222に移る。一方、コマンドCMD1のフラグDFLGが論理値”1”でない場合、すなわち、コマンドCMD1のフラグDFLGが論理値”0”である場合、タイプ判定部122の動作は、ステップS230に移る。
ステップS222では、タイプ判定部122は、CPU220からバッファ部112を介して受信したコマンドCMD1を、コマンド取得部140に転送する。すなわち、タイプ判定部122は、CPU220からバッファ部112を介して受信した転送準備完了コマンドCMDb1を、コマンド取得部140に転送する。なお、タイプ判定部122は、フラグDFLGを削除した転送準備完了コマンドCMDb1をコマンド取得部140に転送してもよいし、フラグDFLGを残した転送準備完了コマンドCMDb1をコマンド取得部140に転送してもよい。
ステップS230では、タイプ判定部122は、CPU220からバッファ部112を介して受信したコマンドCMD1を、チャネル判定部150に転送する。すなわち、タイプ判定部122は、CPU220からバッファ部112を介して受信したアクセスコマンドCMDa1を、チャネル判定部150に転送する。例えば、タイプ判定部122は、CPU220からバッファ部112を介して受信したアクセスコマンドCMDa1のフラグDFLGを削除し、フラグDFLGを削除したアクセスコマンドCMDa1をチャネル判定部150に転送する。
このように、タイプ判定部122は、コマンド取得部140が転送準備完了コマンドCMDb1を受信可能なレディ状態になるまで、バッファ部112からコマンドCMD1を取得する処理(ステップS204)の実行を待機する。これにより、タイプ判定部122は、コマンド取得部140がDRAM260に格納された複数のアクセスコマンドCMDa2をチャネル判定部150に転送している最中に、アクセスコマンドCMDa1をチャネル判定部150に転送することを防止できる。この結果、DMA方式で転送される複数のアクセスコマンドCMDa2がコマンド保持部160に格納されている最中に、PIO方式で転送されるアクセスコマンドCMDa1のコマンド保持部160への格納が割り込むことを防止することができる。
図10は、図8に示した不揮発性ストレージ104の動作の一例を示す。図10では、比較例として、図2に示した不揮発性ストレージ102の動作の一例を括弧内に示す。図10に示す例では、6個のアクセスコマンドCMDa2(CMDa21、CMDa22、CMDa23、CMDa24、CMDa25、CMDa26)がDMA転送され、コマンド保持部160に格納される。以下、DMA方式で転送される複数のアクセスコマンドCMDa2をコマンド保持部160に格納する処理は、DMA enqueueとも称される。また、PIO方式で転送されるアクセスコマンドCMDa1をコマンド保持部160に格納する処理は、PIO enqueueとも称される。
DMA enqueueでは、6個のアクセスコマンドCMDa21、CMDa22、CMDa23、CMDa24、CMDa25、CMDa26がコマンド保持部160に順次格納される。例えば、アクセスコマンドCMDa21、CMDa24は、この順でチャネルCH1のコマンド保持部160に格納され、アクセスコマンドCMDa22、CMDa25は、この順でチャネルCH2のコマンド保持部160に格納される。また、アクセスコマンドCMDa23、CMDa26は、この順でチャネルCH3のコマンド保持部160に格納される。なお、DMA enqueue中は、停止信号SSIGは、高論理レベルにアサートされる。
そして、アクセスコマンドCMDa24がコマンド保持部160に格納されるタイミングとほぼ同じタイミングで、アクセスコマンドCMDa1がバッファ部112に格納される(図10の破線の矩形)。アクセスコマンドCMDa1のバッファ部112からの読み出しは、停止信号SSIGがネゲートされるまで、待機される。すなわち、PIO enqueueは、停止信号SSIGがネゲートされるまで、待機される。そして、アクセスコマンドCMDa26がコマンド保持部160に格納され、停止信号SSIGがネゲートされたとき、アクセスコマンドCMDa1は、バッファ部112から読み出され、チャネルCH2のコマンド保持部160に格納される。
このように、DMA enqueue中のPIO enqueueの割り込みを許さない場合、アクセスコマンドCMDa22、CMDa25、CMDa1が、この順でチャネルCH2のコマンド保持部160に格納される。
したがって、チャネルCH1では、アクセスコマンドCMDa21、CMDa24に基づくデータの読み出し処理がアクセスコマンドCMDa21、CMDa24の順で実行される。なお、図10の括弧内に示すreadは、アクセスコマンドCMDa2がリードコマンドであることを示し、括弧内に示すprogramは、アクセスコマンドCMDa1がプログラムコマンドであることを示す。
また、チャネルCH2では、アクセスコマンドCMDa22、CMDa25に基づくデータの読み出し処理がアクセスコマンドCMDa22、CMDa25の順で実行される。そして、アクセスコマンドCMDa25に基づくデータの読み出し処理が終了した後、アクセスコマンドCMDa1に基づくデータの書き込み処理が実行される。
チャネルCH3では、アクセスコマンドCMDa23、CMDa26に基づくデータの読み出し処理がアクセスコマンドCMDa23、CMDa26の順で実行される。
図10に示す例では、単位時間をTとした場合、アクセスコマンドCMDa21−CMDa26の処理時間、すなわち、リードコマンドの処理時間は、19Tである。なお、DMA方式で転送されるアクセスコマンドCMDa2の処理時間は、転送対象のアクセスコマンドCMDa2のコマンド保持部160への格納開始から転送対象の全てのアクセスコマンドCMDa2に基づく処理の実行完了までの時間である。
また、アクセスコマンドCMDa1の処理時間、すなわち、プログラムコマンドの処理時間は、49Tである。なお、PIO方式で転送されるアクセスコマンドCMDa1の処理時間は、各アクセスコマンドCMDa1のバッファ部112への格納開始から各アクセスコマンドCMDa1に基づく処理の実行完了までの時間である。アクセスコマンドCMDa21−CMDa26の処理時間とアクセスコマンドCMDa1の処理時間との平均値を平均レイテンシとした場合、平均レイテンシは、34Tである。
なお、比較例は、DMA enqueue中のPIO enqueueの割り込みを許す。このため、比較例では、アクセスコマンドCMDa24がコマンド保持部160に格納されるタイミングとほぼ同じタイミングで、アクセスコマンドCMDa1がチャネルCH2のコマンド保持部160に格納される(図10の破線の矩形)。すなわち、アクセスコマンドCMDa1は、アクセスコマンドCMDa25がチャネルCH2のコマンド保持部160に格納される前に、チャネルCH2のコマンド保持部160に格納される。
したがって、DMA enqueue中のPIO enqueueの割り込みを許す場合、アクセスコマンドCMDa22、CMDa1、CMDa25が、この順でチャネルCH2のコマンド保持部160に格納される。このため、チャネルCH2では、アクセスコマンドCMDa22に基づくデータの読み出し処理が終了した後、アクセスコマンドCMDa1に基づくデータの書き込み処理が実行される。そして、アクセスコマンドCMDa1に基づくデータの書き込み処理が終了した後、アクセスコマンドCMDa25に基づくデータの読み出し処理が実行される。
この場合、アクセスコマンドCMDa21−CMDa26の処理時間、すなわち、リードコマンドの処理時間は、52Tである。また、アクセスコマンドCMDa1の処理時間、すなわち、プログラムコマンドの処理時間は、41Tである。なお、PIO方式で転送されるアクセスコマンドCMDa1の処理時間は、各アクセスコマンドCMDa1のコマンド保持部160への格納開始から各アクセスコマンドCMDa1に基づく処理の実行完了までの時間である。アクセスコマンドCMDa21−CMDa26の処理時間とアクセスコマンドCMDa1の処理時間との平均値である平均レイテンシは、46.5Tである。
このように、図10に示す例では、DMA enqueue中のPIO enqueueの割り込みを許さない場合、DMA enqueue中のPIO enqueueの割り込みを許す場合に比べて、平均レイテンシは小さくなる。したがって、不揮発性ストレージ104は、DMA転送される複数のアクセスコマンドCMDa2に基づく処理を並列に実行する場合等に、図2に示した不揮発性ストレージ102に比べて、処理速度を向上させることができる。
以上、図8から図10に示す実施形態においても、図1から図7に示した実施形態と同様の効果を得ることができる。例えば、不揮発性ストレージ104は、DMA方式とPIO方式との両方のコマンド転送に対応する。このため、ホスト装置202から不揮発性ストレージ104に転送するコマンドCMDaの数に拘わらず、コマンドCMDaの転送にかかる時間を短縮することができる。
さらに、タイプ判定部122は、コマンド取得部140がアクセスコマンドCMDa2のチャネル判定部150への転送を実行中、バッファ部112に保持されたコマンドCMD1の読み出しを停止する。これにより、DMA方式で転送される複数のアクセスコマンドCMDa2がコマンド保持部160に格納されている最中に、PIO方式で転送されるアクセスコマンドCMDa1がコマンド保持部160に格納されることを防止することができる。この結果、DMA方式で転送される複数のアクセスコマンドCMDa2に基づく処理が終了するまでの時間が増加することを抑制することができる。
図11は、不揮発性ストレージおよび不揮発性ストレージの処理方法の別の実施形態を示す。図1から図10で説明した要素と同一または同様の要素については、同一または同様の符号を付し、これ等については、詳細な説明を省略する。図11に示す不揮発性ストレージ106は、SSD等の不揮発性の記憶装置であり、ホスト装置202に接続される。ホスト装置202は、図8に示したホスト装置202と同一または同様である。なお、図11に示したホスト装置202内のCPU220は、図3に示したアクセスコマンドCMDa1に優先情報を付加したアクセスコマンドCMDa1を、不揮発性ストレージ106に発行する場合がある。優先情報は、転送準備完了コマンドCMDb1より優先して処理することを示す情報である。
不揮発性ストレージ106では、図8に示したタイプ判定部122の代わりにタイプ判定部120が設けられ、バイパス判定部114が図8に示した不揮発性ストレージ104に追加される。不揮発性ストレージ106のその他の構成は、図8に示した不揮発性ストレージ104と同一または同様である。
例えば、不揮発性ストレージ106は、インターフェース部110とバッファ部112とバイパス判定部114とタイプ判定部120と停止判定部124とコマンド取得部140とチャネル判定部150とを有する。さらに、不揮発性ストレージ106は、図8に示した不揮発性ストレージ104と同様に、複数のチャネルCH毎に設けられた複数のコマンド保持部160と複数のコマンド発行部172と複数のデータ記憶部180とを有する。
インターフェース部110およびバッファ部112は、図8に示したインターフェース部110およびバッファ部112と同一または同様である。
バイパス判定部114は、タイプ判定部120に転送するコマンドCMD1をバッファ部112から読み出し、バッファ部112から読み出したコマンドCMDが優先情報を含むか否かを判定する。そして、バイパス判定部114は、バッファ部112から読み出したコマンドCMD1が優先情報を含む場合、バッファ部112から読み出したコマンドCMD1を停止判定部124による判定結果に拘わらずタイプ判定部120に転送する。すなわち、バイパス判定部114は、バッファ部112から読み出したコマンドCMDが優先情報を含む場合、バッファ部112から読み出したコマンドCMD1を停止信号SSIGの状態に拘わらずタイプ判定部120に転送する。
また、バイパス判定部114は、バッファ部112から読み出したコマンドCMD1が優先情報を含まない場合、バッファ部112から読み出したコマンドCMD1のタイプ判定部120への転送を、停止判定部124による判定結果に基づいて実行する。例えば、バイパス判定部114は、バッファ部112から読み出したコマンドCMD1が優先情報を含まない場合、停止信号SSIGがアサートされている期間では、バッファ部112から読み出したコマンドCMD1のタイプ判定部120への転送を待機する。また、バイパス判定部114は、バッファ部112から読み出したコマンドCMD1が優先情報を含まない場合、停止信号SSIGがネゲートされていれば、バッファ部112から読み出したコマンドCMD1をタイプ判定部120に転送する。
このように、転送準備完了コマンドCMDb1より優先して処理することを示す優先情報を含むコマンドCMD1は、停止判定部124による判定結果に拘わらずタイプ判定部120に転送される。これにより、優先度が転送準備完了コマンドCMDb1より高いアクセスコマンドCMDa1に基づく処理が遅延することを抑制することができる。
タイプ判定部120は、図2に示したタイプ判定部120と同一または同様である。例えば、タイプ判定部120は、バイパス判定部114から転送されたコマンドCMD1が転送準備完了コマンドCMDb1である場合、転送準備完了コマンドCMDb1をコマンド取得部140に転送する。また、タイプ判定部120は、コマンドCMD1がアクセスコマンドCMDa1である場合、アクセスコマンドCMDa1をチャネル判定部150に転送する。
停止判定部124は、図8に示した停止判定部124と同一または同様である。なお、停止判定部124は、停止信号SSIGをバイパス判定部114に出力する。コマンド取得部140は、図8に示したコマンド取得部140と同一または同様である。また、チャネル判定部150、コマンド保持部160、コマンド発行部172およびデータ記憶部180は、図8に示したチャネル判定部150、コマンド保持部160、コマンド発行部172およびデータ記憶部180と同一または同様である。
なお、不揮発性ストレージ106の構成は、図11に示す例に限定されない。例えば、停止判定部124は、バイパス判定部114内に設けられてもよい。あるいは、停止判定部124は、省かれてもよい。この場合、バイパス判定部114は、ビジー信号BSIGを停止信号SSIGとして、コマンド取得部140から受けてもよい。
以上、図11に示す実施形態においても、図8から図10に示した実施形態と同様の効果を得ることができる。例えば、不揮発性ストレージ106は、DMA方式とPIO方式との両方のコマンド転送に対応する。このため、ホスト装置202から不揮発性ストレージ106に転送するコマンドCMDaの数に拘わらず、コマンドCMDaの転送にかかる時間を短縮することができる。また、バイパス判定部114は、コマンド取得部140がアクセスコマンドCMDa2のチャネル判定部150への転送を実行中、バッファ部112に保持されたコマンドCMD1のタイプ判定部122への転送を待機する。これにより、DMA方式で転送される複数のアクセスコマンドCMDa2に基づく処理が終了するまでの時間が増加することを抑制することができる。
さらに、バイパス判定部114は、転送準備完了コマンドCMDb1より優先して処理することを示す優先情報を含むコマンドCMD1を、停止判定部124による判定結果に拘わらず、タイプ判定部120に転送する。これにより、優先度が転送準備完了コマンドCMDb1より高いアクセスコマンドCMDa1に基づく処理が遅延することを抑制することができる。
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。