(57)【要約】【課題】バスの使用効率の低下を抑止する。【解決手段】実施形態の記憶装置は、不揮発性メモリと、記憶手段と、通知手段と、転送手段と、制御手段と、を備える。記憶手段は、データを一時的に記憶する。通知手段は、ホストに対して、記憶手段にデータを書き込む量を指定してデータの転送許可を通知する。転送手段は、ホストから転送許可に従って転送されるデータを記憶手段に転送し、記憶手段に記憶されたデータを、不揮発性メモリに書き込むために転送する。制御手段は、不揮発性メモリに書き込むために必要なデータ量が記憶手段に記憶されてから、転送手段による不揮発性メモリへのデータの転送が終了するまで、通知手段による転送許可の通知を抑止させる。【選択図】図１
2012252416.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性メモリと、
データを一時的に記憶する記憶手段と、
ホストに対して、前記記憶手段にデータを書き込む量を指定してデータの転送許可を通知する通知手段と、
前記ホストから前記転送許可に従って転送されるデータを前記記憶手段に転送し、前記記憶手段に記憶されたデータを、前記不揮発性メモリに書き込むために転送する転送手段と、
前記不揮発性メモリに書き込むために必要なデータ量が前記記憶手段に記憶されてから、前記転送手段による前記不揮発性メモリへの前記データの転送が終了するまで、前記通知手段による前記転送許可の通知を抑止させる制御手段と、
を備える記憶装置。
【請求項２】
前記転送手段は、前記不揮発性メモリからコンパクションの対象となるデータを前記データ量だけ前記記憶手段に転送し、前記記憶手段に転送された前記コンパクションの対象となるデータをまとめて前記不揮発性メモリに転送する、
請求項１に記載の記憶装置。
【請求項３】
前記通知手段は、前記複数チャネルを同期させて転送するために必要なデータ量が、前記記憶手段に記憶されるまで通知し、
前記転送手段は、前記ホストから転送されてきたデータが、前記データ量だけ前記記憶手段に記憶された場合に、当該データを前記不揮発性メモリに前記複数チャネルを同期させて転送する、
請求項１又は２に記載の記憶装置。
【請求項４】
前記複数チャネルを同期させて一度で書き込み可能なデータ量を示すデータ量情報を、前記制御手段が参照可能な共有記憶部に設定する設定手段を、さらに備え、
前記制御手段は、前記共有記憶部に記憶された前記データ量情報で示されるデータ量のデータを前記記憶手段が記憶した場合に、前記転送許可の通知を抑止させる、
請求項１乃至３のいずれか１つに記載の記憶装置。
【請求項５】
前記ホストと接続するインターフェイスとしてＳＡＳ（Serial  Attached  SCSI）又はファイバーチャネルを用いる、
請求項１乃至４のいずれか１つに記載の記憶装置。
【請求項６】
記憶装置で実行されるデータ制御方法であって、
前記記憶装置は、不揮発性メモリと、データを一時的に記憶する記憶手段と、を備え、
通知手段が、ホストに対して、前記記憶手段にデータを書き込む量を指定してデータの転送許可を通知する通知ステップと、
転送手段が、前記ホストから前記転送許可に従って転送されるデータを前記記憶手段に転送し、前記記憶手段に記憶されたデータを、前記不揮発性メモリに書き込むために転送する転送ステップと、
制御手段が、前記不揮発性メモリに書き込むために必要なデータ量が前記記憶手段に記憶されてから、前記転送ステップによる前記不揮発性メモリへの前記データの転送が終了するまで、前記通知ステップによる前記転送許可の通知を抑止させる制御ステップと、
を含むことを特徴とするデータ制御方法。
【請求項７】
ホストに対して、記憶手段にデータを書き込む量を指定してデータの転送許可を通知する通知手段と、
前記ホストから前記転送許可に従って転送されるデータを前記記憶手段に転送し、前記記憶手段に記憶されたデータを、不揮発性メモリに書き込むために転送する転送手段と、
前記不揮発性メモリに書き込むために必要なデータ量が前記記憶手段に記憶されてから、前記転送手段による前記不揮発性メモリへの前記データの転送が終了するまで、前記通知手段による前記転送許可の通知を抑止させる制御手段と、
を備えるデータコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、記憶装置、データ制御方法、及びデータコントローラに関する。
【背景技術】
【０００２】
従来から、ＳＳＤ（Solid  State  Drive）という記憶装置が提供されている。ＳＳＤは、半導体メモリであるフラッシュメモリを使用している。そして、近年、ＰＣ(Personal  Computer)に内蔵される記憶装置として、ＨＤＤの代わりにＳＳＤが使用される傾向が高まりつつある。
【０００３】
これら記憶装置を接続するインターフェイスとして、ＳＡＳ(Serial  Attached  SCSI)、ＳＡＴＡ（Serial  Advanced  Technology  Attachment）、ＦＣ(Fibre  Channel)等が提案されている。ＳＡＴＡは、個人が利用する等の低価格であることを重視する用途で利用されている。また、ＳＡＳは、例えばサーバーなど高性能・高信頼性が要求される用途で利用されている。そして、ＦＣは、ストレージ・ネットワーク用に使用される技術であって、ネットワーク上でＩＰの代わりに、ＳＡＳと同様ＳＣＳＩコマンドが用いられている。
【０００４】
例えば、ＳＡＳやＦＣ等がインターフェイスとして用いられた場合、接続先の状態が確認されてからデータが送信されるため、信頼性を向上できる。より詳細には、これらインターフェイスを用いたＳＳＤは、転送可能なデータ量をホストにコミットすることで、確実にデータを転送できるよう制御している。
【０００５】
ところで、ＳＳＤは、内部に複数のチャネルを備えており、それぞれのチャネルで、不揮発性メモリに対して、読み出し又は書き込みを行っている。そして、ＳＳＤでは、インターリーブ方式で書き込み動作を行うことができる。つまり、ＳＳＤは、複数チャネルで同時に、不揮発性メモリに対して、書き込みを行うことができる。これにより、高速書き込みが実現できる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００６−１９５９９０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、従来技術を用いたＳＳＤでは、転送可能なデータ量を、ホストにコミットした時に、複数チャネルで同時に書き込みが行われる場合、ＳＳＤ内部のコントローラは当該書き込みのための処理を優先して行うため、ホストから転送されてくるデータを適切に処理できず、バスを接続した状態でフリーズが生じる可能性がある。この場合、バスを共有する他のデバイスもバスを使用できなくなり、バスの使用効率が低下する。
【０００８】
本発明は、上記に鑑みてなされたものであって、バスの使用効率の低下を抑止する記憶装置、データ制御方法、及びデータコントローラを提供することを目的とする。
【課題を解決するための手段】
【０００９】
実施形態の記憶装置は、不揮発性メモリと、記憶手段と、通知手段と、転送手段と、制御手段と、を備える。記憶手段は、データを一時的に記憶する。通知手段は、ホストに対して、記憶手段にデータを書き込む量を指定してデータの転送許可を通知する。転送手段は、ホストから転送許可に従って転送されるデータを記憶手段に転送し、記憶手段に記憶されたデータを、不揮発性メモリに書き込むために転送する。制御手段は、不揮発性メモリに書き込むために必要なデータ量が記憶手段に記憶されてから、転送手段による不揮発性メモリへのデータの転送が終了するまで、通知手段による転送許可の通知を抑止させる。
【図面の簡単な説明】
【００１０】
【図１】図１は、実施形態にかかる半導体ディスク装置の構成の例を示すブロック図。
【図２】図２は、実施形態にかかる第１のＭＰＵ及び第２のＭＰＵのソフトウェア構成を示したブロック図。
【図３】図３は、実施形態にかかる半導体ディスク装置における、シーケンシャルライトの転送タイミングを示した図。
【図４】図４は、実施形態にかかる半導体ディスク装置における、ランダムライトの転送タイミングを示した図。
【図５】図５は、実施の形態にかかる第２のＭＰＵにおける、全チャネル同時書き込みを行うための処理の手順を示すフローチャート。
【図６】図６は、実施の形態にかかる第１のＭＰＵにおける、ライトコマンドを実行するための処理の手順を示すフローチャート。
【発明を実施するための形態】
【００１１】
図１は、実施形態にかかる半導体ディスク装置１の構成の例を示すブロック図である。図１に示すように半導体ディスク装置１は、半導体ディスクコントローラ１００と、ＤＲＡＭ１５０と、８個のＮＡＮＤメモリ１６０−１〜１６０−８と、を備えている。
【００１２】
ＤＲＡＭ１５０は、データを一時的に記憶する記憶装置である。ＤＲＡＭ１５０は、ホストから転送されてきたデータを一時的に記憶する。また、ＤＲＡＭ１５０は、ＮＡＮＤメモリ１６０−１〜１６０−８から読み出したデータを一時的に記憶する。
【００１３】
ＮＡＮＤメモリ１６０−１〜１６０−８は、ホストで利用するデータ（以下、ユーザデータと称す）等を記憶する。本実施形態は、８個のＮＡＮＤメモリ１６０−１〜１６０−８を備える例とするが、個数を制限するものではない。
【００１４】
半導体ディスクコントローラ１００は、第１のＭＰＵ１０１と、チャネルコントローラ１０２と、第２のＭＰＵ１０３と、ＳＡＳコントローラ１０４−１、１０４−２と、ＦＩＦＯバッファ１０５−１〜１０５−４と、ＤＭＡコントローラ１０６と、ＮＡＮＤメモリコントローラ１０７−１〜１０７−８と、シェアードＲＡＭ１０８と、を備える。
【００１５】
また、半導体ディスクコントローラ１００は、２ポートのＳＡＳインターフェイスを備えている。そして、半導体ディスクコントローラ１００は、それぞれのポートを介して、ホストとの間でデータ入出力を行なう。
【００１６】
ＳＡＳは、全２重通信のポイントツーポイント接続であるが、ＳＡＳエキスパンダーを中継器として接続することで、１つのホストに対して、複数台の装置を接続することが可能となる。このように、バスは、他の装置と共有で利用することが可能となる。
【００１７】
第１のＭＰＵ１０１は、バスを介して接続されたホストとの間のデータの送受信を制御する。例えば、第１のＭＰＵ１０１は、ライトコマンドを実行する際、ＤＲＡＭ１５０にデータを収めるために必要な領域を確保し、確保できた領域を示したデータ転送データ量をフレーム形式“Transfer＿Ready”に従ってホストに通知する。本実施形態はＳＡＳの場合について説明するが、ＦＣの場合でも同様とする。
【００１８】
ところで、ホストがデータを半導体ディスク装置１に記憶したい場合、ホストは、半導体ディスク装置１に対してライトコマンドを発行する。そしてライトコマンドが発行された場合、ＳＡＳコントローラ１０４−１、１０４−２が当該ライトコマンドを受信する。そして、第１のＭＰＵ１０１が、当該ライトコマンドを、プロセッサバス１０９を通して受け取り、ライトコマンドを実行することになる。
【００１９】
そして、第１のＭＰＵ１０１は、ライトコマンドの実行に伴い、ホストからユーザデータを受け取るために、Transfer＿Readyフレームの作成及びホストへの送信を行うことになる。なお、実際には、第１のＭＰＵ１０１単独でTransfer＿Readyフレームを通知するのではなく、ＳＡＳコントローラ１０４−１、１０４−２に対して、Transfer＿Readyフレームの発行を要求することで実現する。
【００２０】
ＦＩＦＯバッファ１０５−１〜１０５−４は、ＳＡＳコントローラ１０４−１、１０４−２によるデータの転送速度と、ＤＭＡコントローラ１０６によるデータの転送速度と、の間の速度差を吸収するバッファとする。ＳＡＳインターフェイスは、各ポートで双方向同時通信が可能である。このため、ＦＩＦＯバッファ１０５−１〜１０５−４は、送信ラインと受信ラインでそれぞれ独立して設けられている。
【００２１】
ＳＡＳコントローラ１０４−１、１０４−２は、ＳＡＳインターフェイスによるデータ転送を制御するコントローラとする。また、ＳＡＳコントローラ１０４−１、１０４−２は、ＦＩＦＯバッファ１０５−１〜１０５−４を介して、ＤＭＡコントローラ１０６と接続されている。
【００２２】
また、ＳＡＳコントローラ１０４−１、１０４−２は、第１のＭＰＵ１０１からの要求に応じて、Transfer＿Readyフレームの作成及びホストへの送信を行う。Transfer＿Readyフレームは、ホストに対してデータの転送を許可することを示す情報であり、ホストから半導体ディスク装置１へのデータ転送データ量を指定する情報が含まれている。
【００２３】
なお、第１のＭＰＵ１０１は、１つのライトコマンドに必要なデータの格納スペースを、ＤＲＡＭ１５０上に一度に確保できない場合、ホストへのデータ転送要求を複数に分割する。この場合、ホストへのTransfer＿Readyフレームの送信と、ホストからのデータ受信と、による手順を複数回繰り返す。なお、ＳＡＳの仕様上、半導体ディスク装置１は、ホストからのライトコマンドの応答としてTransfer＿Readyフレームを送信し、当該フレームに対応するデータをホストから受信し終える前に、異なるライトコマンドを受信した場合、コマンドが異なる限り、別のTransfer＿Readyフレームをホストに応答することができる。
【００２４】
ホストは、Transfer＿Readyフレームに含まれているデータ転送データ量のデータを半導体ディスク装置１に転送する。ＳＡＳコントローラ１０４−１、１０４−２は、ホストから転送されてきたデータを受信した場合、ＤＭＡコントローラ１０６が、第１のＭＰＵ１０１により指定されたＤＲＡＭ１５０アドレスに、当該データを格納する。その際、ＳＡＳコントローラ１０４−１、１０４−２は、受信したデータを、ＮＡＮＤメモリ１６０−１〜１６０−８の最小書き込み単位に分割する。そして、ＳＡＳコントローラ１０４−１、１０４−２は、チャネルコントローラ１０２に対して、ＮＡＮＤメモリ１６０−１〜１６０−８へのライトコマンドを発行する。
【００２５】
チャネルコントローラ１０２は、ＮＡＮＤメモリ１６０−１〜１６０−８との間のデータの転送を制御するコントローラとする。例えば、ＳＡＳコントローラ１０４−１、１０４−２がライトコマンドを発行した場合、チャネルコントローラ１０２は、ＤＲＡＭ１５０に記憶されているデータを、ＮＡＮＤメモリ１６０−１〜１６０−８に書き込むよう制御する。
【００２６】
ＤＭＡ（direct  memory  access）コントローラ１０６は、チャネルコントローラ１０２からの要求に従って、ＳＡＳインターフェイス−ＤＲＡＭ１５０間、及びＤＲＡＭ１５０―ＮＡＮＤメモリ１６０−１〜１６０−８間で、ＭＰＵ（例えば、第１のＭＰＵ１０１）を介さないＤＭＡデータ転送を制御するコントローラとする。
【００２７】
ＤＭＡコントローラ１０６は、ホストからTransfer＿Readyフレームに従って転送されてきたユーザデータをＤＲＡＭ１５０に転送する。また、ＤＭＡコントローラ１０６は、ＤＲＡＭ１５０に記憶されたデータを、ＤＲＡＭ１５０―ＮＡＮＤメモリ１６０−１〜１６０−８に書き込むために全チャネルを同期させて転送する。この転送は、ホストから転送されてきたデータが、シェアードＲＡＭ１０８に記憶された、書き込み可能なデータ量だけＤＲＡＭ１５０に記憶された場合に行われる。なお、本実施形態では、全チャネル同時書き込みを行うこととするが、全チャネルではなく複数のチャネルが同期していればよい。
【００２８】
ＮＡＮＤメモリコントローラ１０７−１〜１０７−８は、チャネルコントローラ１０２からの要求に従って、ＮＡＮＤメモリ１６０−１〜１６０−８に対する、データの書き込み及びデータの読み出しを制御するコントローラとする。
【００２９】
また、ＤＭＡコントローラ１０６と、ＮＡＮＤメモリコントローラ１０７−１〜１０７−８と、の間には、チャネル毎に図示しないＦＩＦＯバッファが設けられている。チャネル毎に設けられたＦＩＦＯバッファは、リードコマンドが発行された場合に、ＮＡＮＤメモリ１６０＿１〜１６０＿８から読み出したデータを格納可能な最小の容量を有している。しかしながら、ライトコマンドでは書き込み速度を向上させるためにＮＡＮＤメモリの複数の領域に同時書き込みを実施する。このため、ライトコマンドが実行された場合に書き込むデータ量は、リードコマンドが実行された場合に読み込むデータ量よりも大きく、ＦＩＦＯバッファでは吸収できない。このため、本実施形態にかかる半導体ディスク装置１では、全チャネル同時書き込みを行う場合に、後述した処理を行うこととした。
【００３０】
ところで、ホスト転送をホールドすることが可能なＳＡＴＡインターフェイスや、転送自体を半導体ディスク装置側でコントロールするＰＣＩｅインターフェイスでは、半導体ディスク装置側から、ホストからのデータの送信を止めることが可能である。しかしながら、転送可能なデータ量を、予めホストにコミットしてから通信を行なうＳＡＳインターフェイスやファイバーチャネル(ＦＣ)・インターフェイスでは、コミットしてしまったホストからの転送を途中で止める事は難しい。このため、従来のＳＡＳインターフェイスや、ＦＣインターフェイスを用いた場合には、以下に示すような問題が生じる。
【００３１】
従来のＳＡＳインターフェイスの半導体ディスク装置におけるシーケンシャルのタイミングについて説明する。従来の半導体ディスク装置では、ホストからライトコマンドを受け付けた場合、ＤＲＡＭに確保できたバッファスペースに応じて、１つ以上のTransfer＿Readyフレームを出力して、ホストに対して転送可能なデータ量を指定するための通知をしていた。そして、ホストは、通知されたデータ量だけデータを、半導体ディスク装置に転送する。従来、このようなTransfer＿Readyフレームの通知と、対応するデータの転送と、が繰り返し行われていた。
【００３２】
複数のシーケンシャルライトコマンドを受けた半導体ディスク装置は、ＤＲＡＭ上に設けられたバッファに収まるだけのデータの送信を、ホストに対して許可する。このため、従来の半導体ディスク装置は、基本的には受信したデータをバッファに格納することができるはずである。しかしながら、ＤＭＡコントローラが、全チャネルを同期した上で同時にＮＡＮＤメモリに書き込むためにＤＲＡＭからユーザデータの読み出しを開始している時に、ＳＡＳインターフェイスからユーザデータの受信が行われることがある。この場合、ＤＭＡコントローラにおいて、ＤＲＡＭからのユーザデータの読み出し処理と、ＳＡＳコントローラからＤＲＡＭへのユーザデータの書き出し処理と、が競合する。この場合、ＤＭＡコントローラは、ＤＲＡＭからのユーザデータの読み出し処理を優先的に行う。このため、ホストから半導体ディスク装置に対してユーザデータの転送が行われなくなる。そして、Transfer＿Readyフレームに対応するユーザデータを受信する際、ＤＭＡコントローラがＮＡＮＤコントローラにユーザデータを転送するタイミングで、ＳＡＳインターフェイスにユーザデータが転送されない無転送期間が生じる。
【００３３】
より具体的には、ＮＡＮＤメモリへの書き込みが完了したタイミングにおいて、書き込みが終了した分のバッファスペースがＤＲＡＭから解放される。ＤＲＡＭにデータが書き込み可能となることで、ＳＡＳコントローラが、Transfer＿Readyフレームを送信し、当該フレームに対応するユーザデータを受信する。このタイミングは、ＤＭＡコントローラが、正にその次のチャネル同期転送が始まるタイミングである。このため、ＤＭＡコントローラで処理が競合し、必ず無転送期間が現れる。この無転送期間においても、ホストと半導体ディスク装置との間の接続が継続している。このように、従来の半導体ディスク装置は、データ転送が行われていないにも拘わらず、接続を継続するといったフリーズ現象が生じる。この場合、バスを共有する他のデバイスもバスを使用できなくなり、バスの使用効率が低下し、システム全体の性能が低下する。
【００３４】
これに対し、本実施形態においては、ＳＡＳインターフェイスを適用した半導体ディスク装置１では、無転送期間が現れないよう、後述する制御を行うこととした。
【００３５】
図１に戻り、第２のＭＰＵ１０３は、ＮＡＮＤメモリ１６０−１〜１６０−８に対するデータの送受信を制御する。第２のＭＰＵ１０３は、チャネルコントローラ１０２に対して、ＮＡＮＤメモリ１６０−１〜１６０−８の全チャネル分の物理アドレスを提供する。
【００３６】
チャネルコントローラ１０２は、提供された物理アドレスに対して、ライトコマンドで書き込むデータを割り当てる。本実施形態では、全チャネル同時に一回の書き込みを行なう度に、第２のＭＰＵ１０３が、チャネルコントローラ１０２へ物理アドレスを提供すると記述しているが、これは一実施形態に過ぎない。
【００３７】
第２のＭＰＵ１０３が、物理アドレスを提供するタイミングについて説明する。第２のＭＰＵ１０３は、チャネルコントローラ１０２の動作状態を周期的に監視する。そして、チャネルコントローラ１０２が、全チャネルを同期させて同時に書き込む制御を開始したことを検出した場合、第２のＭＰＵ１０３は、再びチャネルコントローラ１０２に対して新たな物理アドレスを提供する。
【００３８】
また、チャネルコントローラ１０２は、信号出力部１１１を備える。そして、チャネルコントローラ１０２は、全チャネル同時書き込みを行うために、全チャネルを同期させてＮＡＮＤメモリ１６０−１〜１６０−８に書き込むために必要なデータ量をＤＲＡＭ１５０に記憶する。その後、チャネルコントローラ１０２は、ＤＭＡコントローラ１０６がＮＡＮＤメモリ１６０−１〜１６０−８へのデータの転送を終了するまで、ＳＡＳコントローラ１０４−１、１０４−２によるTransfer＿Readyフレームの通知を抑止する。
【００３９】
当該通知を抑止するために、信号出力部１１１は、ＤＭＡコントローラ１０６がＮＡＮＤメモリ１６０−１〜１６０−８にデータの転送を行っているか否かを示す転送判定信号を出力する。例えば、チャネルコントローラ１０２が全チャネルを同期させて同時に書き込むための転送開始を検出した場合に、信号出力部１１１は、データの転送を行っていることを示す‘１’を出力し、データの転送の終了を検出した場合に信号を‘０’に切り替える。
【００４０】
また、第２のＭＰＵ１０３は、チャネルコントローラ１０２に対して、物理アドレスを提供する際、ＮＡＮＤメモリ１６０−１〜１６０−８のうち、書き込みできない欠陥（Defect）があるチャネルには、書き込むデータを割り当てない。
【００４１】
チャネルコントローラ１０２に対して新たな物理アドレスを提供する際、第２のＭＰＵ１０３は、同時に、データ量をシェアードＲＡＭ１０８に設定する。この設定されるデータ量は、全チャネルを同期させて一度にＮＡＮＤメモリ１６０−１〜１６０−８に同時書き込み可能なデータ量とする。このデータ量を決定する際、第２のＭＰＵ１０３は、Defectの存在で書き込みできないチャネルを考慮する。これにより、シェアードＲＡＭ１０８に設定される、同時書き込み可能なデータ量は毎回変動する可能性がある。
【００４２】
シェアードＲＡＭ１０８は、第１のＭＰＵ１０１及び第２のＭＰＵ１０３から参照可能なデュアルポートＲＡＭとし、全チャネルを同期させて一度に同時書き込み可能なデータ量を記憶する。
【００４３】
本実施形態にかかる第１のＭＰＵ１０１は、ホストからユーザデータを受信するためにTransfer＿Readyフレームの送信を要求する際、シェアードＲＡＭ１０８を参照する。そして、第１のＭＰＵ１０１は、シェアードＲＡＭ１０８に記憶されたデータ量が‘０’でない場合に限り、Transfer＿Readyフレームの送信を、ＳＡＳコントローラ１０４−１、１０４−２に要求する。
【００４４】
第１のＭＰＵ１０１は、Transfer＿Readyフレームの送信を要求する度に、要求したデータ量に相当する値を、シェアードＲＡＭ１０８に記憶されたデータ量から減算する。シェアードＲＡＭ１０８に記憶されたこのデータ量が‘０’になると、第１のＭＰＵ１０１はそれ以上のTransfer＿Readyフレームの送信要求はできないものとする。
【００４５】
ところで、従来、Transfer＿Readyフレームに含まれる転送データ量は、コマンドが要求する転送データ量、及びＤＲＡＭ上で空いているバッファ容量のどちらか小さい方に制限されていた。このような従来の技術では、ＤＲＡＭ上のバッファ容量が空いている限り、データを受信し続けるので、半導体ディスク装置のチャネルを同期したＮＡＮＤメモリへの同時書き込みと、データの受信処理が競合する可能性があった。
【００４６】
そこで、本実施形態では、これらの条件（転送データ量、及びＤＲＡＭ１５０上で空いているバッファ容量）に加えて、シェアードＲＡＭ１０８に記憶されている、書き込み可能なデータ量を、判定の条件に加えることとした。そして、第１のＭＰＵ１０１は、これら３つの条件のうち、最も小さいデータ量を、Transfer＿Readyフレームに含まれるデータ転送データ量と設定することとした。さらに、これら３つの条件のうち、いずれか１つが０バイトの場合には、転送をコミットしないように制御した。
【００４７】
さらに、第１のＭＰＵ１０１が、ＳＡＳコントローラ１０４−１、１０４−２へTransfer＿Readyフレームの送信を要求する際、チャネルコントローラ１０２の信号出力部１１１が出力する転送判定信号を参照し、ＤＭＡコントローラ１０６がデータを転送しているタイミングであるか否かを確認する。この転送判定信号が、ＤＭＡコントローラ１０６がＤＲＡＭ１５０から書き込み処理のためのデータを転送しているタイミングを示している場合、第１のＭＰＵ１０１が、Transfer＿Readyフレームの送信要求を抑止する。
【００４８】
チャネルコントローラ１０２は、ユーザデータを書き込むために提供された有効な物理アドレスがある限り、第１のＭＰＵ１０１から発行されるライトコマンドに対して、ラウンドロビン方式でチャネルを更新しながら書き込み先の物理アドレスを割り当てる。そして、チャネルコントローラ１０２は、ライトコマンドを、チャネルコントローラ１０２内の（図示しない）ライトコマンドキューに蓄積する。なお、チャネルコントローラ１０２は、物理アドレスを割り当てる際、Defectに指定されているチャネルを除外する。
【００４９】
そして、全てのチャネルに対するライトコマンドの蓄積がなされた時点で、チャネルコントローラ１０２は、以下の手順で全チャネル同期ライトの準備を行なう。
【００５０】
まず、チャネルコントローラ１０２は、ＮＡＮＤメモリコントローラ１０７−１〜１０７−８に対する新たなコマンドの発行を停止する。次に、チャネルコントローラ１０２は、ＮＡＮＤメモリコントローラ１０７−１〜１０７−８が実行中のコマンドを全て終了するまで、待機する。
【００５１】
そして、全チャネルのＮＡＮＤメモリコントローラ１０７−１〜１０７−８がコマンド実行を終えた時点で、チャネルコントローラ１０２は、シェアードＲＡＭ１０８にこれから行う書き込みの種類（例えば、ユーザデータの書き込み、またはコンパクションによる書き込み）を設定する。例えば、第１のＭＰＵ１０１から発行されたユーザデータのライトコマンドの場合、チャネルコントローラ１０２は、「ユーザデータの書き込み」である旨をシェアードＲＡＭ１０８に設定する。なお、設定された書き込みの種類を示す情報は、第１のＭＰＵ１０１により参照される。
【００５２】
ところで、ＮＡＮＤメモリのような不揮発性メモリでは、書き込み単位とイレーズ単位とが異なる。このため、不揮発性メモリでは、更新書き込みがなされた場合でも、書き込み単位には無効となった古いデータが残った状態となる。そして、複数の書き込み単位で構成されるイレーズ単位には、無効となったデータのみならず、有効なデータも存在する。新たな書き込みを可能とするためには、イレーズ単位に残る有効データだけを集めて、別の領域に設けられた書き込み単位に全てコピーして、有効データが少なくなったイレーズ単位を再利用する必要がある。このような処理をコンパクションと称す。本実施形態にかかる半導体ディスク装置１では、このコンパクションが行われる場合でも、無転送期間が生じないよう制御を行う。
【００５３】
そして、チャネルコントローラ１０２が、ＤＭＡコントローラ１０６に書き込みのためのデータの転送を指示することをトリガーとして、信号出力部１１１が、ＤＭＡコントローラ１０６がデータの転送を行っていることを示す転送判定信号（例えば‘１’）の出力を開始する。そして、第１のＭＰＵ１０１は、当該転送判定信号を参照することで、ＤＭＡコントローラ１０６が全チャネル同時書き込みのためのデータの転送を行っているか否かを認識できる。
【００５４】
以上の準備処理を終えた後、チャネルコントローラ１０２は、ライトコマンドキューに蓄積したライトコマンドを、先頭から順に、各チャネルのＮＡＮＤメモリコントローラ１０７−１〜１０７−８に一斉に発行する。これにより、全チャネルを同期させた書き込み処理が開始される。同時に、チャネルコントローラ１０２は、ＤＭＡコントローラ１０６に対して、チャネル毎のライトコマンドの対象となるデータを、ＤＲＡＭ１５０から読み出すよう指示する。
【００５５】
全チャネル同時転送を実行した後、ＤＭＡコントローラ１０６は、チャネルコントローラ１０２から設定された総転送バイトを、全チャネルのＮＡＮＤメモリコントローラ１０７＿１〜１０７＿８に転送し終えた時点で、転送が終了したことをチャネルコントローラ１０２に通知する。これにより、信号出力部１１１が、ＤＭＡコントローラ１０６が書き込み処理のためにデータを転送していることを示す転送判定信号（例えば‘１’）から、当該データの転送をしていないことを示す転送判定信号（例えば‘０’）に切り替える。
【００５６】
ところで、ＤＲＡＭ１５０に全チャネルで同時に書き込むユーザデータが全て記憶された時点で、シェアードＲＡＭ１０８の書き込み可能なデータ量が‘０’となる。このため、第１のＭＰＵ１０１は、ホストに対して新たなデータ送信をコミットできない。そこで、第１のＭＰＵ１０１は、シェアードＲＡＭ１０８の書き込み可能なデータ量が、第２のＭＰＵ１０３により‘０’でない値に更新されるまで待機する。
【００５７】
この間に、ＤＭＡコントローラ１０６による全チャネルの同時書き込みのためのデータの転送が開始される。このタイミングで、第２のＭＰＵ１０３は、チャネルコントローラ１０２に対して次回の書き込みで使用する物理アドレスを提供すると共に、次回の全チャネル同時書き込みで書き込み可能なデータの量をシェアードＲＡＭ１０８に設定する。
【００５８】
このように、全チャネルによる同時書き込みのための転送が開始された後、早いタイミングでシェアードＲＡＭ１０８の書き込み可能なデータ量が、第２のＭＰＵ１０２により更新される。しかしながら、更新された時点では、ＤＭＡコントローラ１０６がデータの転送を実行中である（信号出力部１１１が転送判定信号‘１’を出力している）ため、第１のＭＰＵ１０１は、新たなデータ送信をコミットできない。そして、ＤＭＡコントローラ１０６によるデータの同時転送が完了した後（信号出力部１１１が出力する転送判定信号が‘０’に切り替わった後）、第１のＭＰＵ１０１は、Transfer＿Readyフレームの送信を、ＳＡＳコントローラ１０４−１、１０４−２に対して要求することができる。
【００５９】
図２は、第１のＭＰＵ１０１及び第２のＭＰＵ１０３のソフトウェア構成を示したブロック図である。図２に示すように、第１のＭＰＵ１０１は、コマンド管理部３１１と、ライトクレジット管理部３１２と、Transfer＿Ready通知部３１３と、ライト実行開始部３１４と、ライト終了検出部３１５と、リード転送開始部３１６と、リード終了検出部３１７と、を備える。
【００６０】
また、第２のＭＰＵ１０３は、ユーザデータ書込先提供部３２１と、コンパクション対象データ書込先提供部３２２と、データ量設定部３２３と、ブロック検索部３２４と、コンパクション実行部３２５と、を備える。
【００６１】
コマンド管理部３１１は、ＳＡＳコントローラ１０４−１、１０４−２がバスを介してコマンド（リードコマンド又はライトコマンド）を受信しているか否かを判定する。そして、ＳＡＳコントローラ１０４−１、１０４−２がコマンドを受信している場合に、当該コマンドを取り出して、第１のＭＰＵ１０１のメモリ上に構成したライトコマンドキュー及びリードコマンドキューに記憶する。これらコマンドキューは、受信したコマンドの実行順序も管理する。また、コマンド管理部３１１は、ＤＲＡＭ１５０上にリードコマンドのデータを格納する領域を割り当ててから、リードコマンドをチャネルコントローラ１０２に発行する。なお、ＤＲＡＭ１５０上でデータを格納する領域が不足している場合、各コマンドの発行は待機される。そして、コマンド管理部３１１は、リードコマンドキューにリードコマンドが蓄積された場合に、チャネルコントローラ１０２に対してリードコマンドを発行する。これにより、ＮＡＮＤメモリ１６０−１〜１６０−８からのデータの読み込みが開始される。
【００６２】
ライトクレジット管理部３１２は、ライトコマンドキューにライトコマンドが蓄積されている場合、ライトコマンドのデータを格納する領域を管理する。さらに、ライトクレジット管理部３１２は、シェアードＲＡＭ１０８の書き込み可能なデータ量と、チャネルコントローラ１０２の信号出力部１１１から出力される転送判定信号と、を参照し、データを受信可能であるか否か（Transfer＿Readyフレームの送信が可能であるか否か）を判定する。
【００６３】
Transfer＿Ready通知部３１３は、ライトクレジット管理部３１２によりTransfer＿Readyフレームの送信が可能と判定された場合に、受信可能なデータ量を指定したTransfer＿Readyフレームの通知を、ＳＡＳコントローラ１０４−１、１０４−２に要求する。その際、Transfer＿Ready通知部３１３は、受信可能なデータ量と、ＤＲＡＭ１５０内の格納可能なアドレスと、をＳＡＳコントローラ１０４−１、１０４−２に設定する。そして、Transfer＿Ready通知部３１３は、Transfer＿Readyフレームの送信と、当該フレームに伴うデータの受信と、をＳＡＳコントローラ１０４−１、１０４−２に実行させる。
【００６４】
ライト実行開始部３１４は、ホストから送られてくるデータを、ＤＭＡコントローラ１０６を介してＤＲＡＭ１５０に格納する処理の終了をポーリングする。そして、ライト実行開始部３１４は、全チャネル同時書き込みのために必要なデータのＤＲＡＭ１５０への格納の完了を検知した場合に、当該データの送信要求を行ったTransfer＿Readyフレームに含まれているデータ転送データ量に相当するライトコマンドを、データが格納されたＤＲＡＭ１５０のアドレスと共に、チャネルコントローラ１０２に発行する。ライトコマンドは、一旦、チャネルコントローラ１０２のライトコマンドキューに蓄積される。そして、全てのチャネルを同期した同時書き込みに必要な所定の書き込みデータ量に相当するコマンド数がライトコマンドキューに蓄積された時点で、チャネルコントローラ１０２が、ＮＡＮＤメモリコントローラ１０７−１〜１０７−８に対して、コマンドを転送する。
【００６５】
また、ライト実行開始部３１４は、シェアードＲＡＭ１０８に記憶されている、書き込み可能なデータ量から、発行したライトコマンドで書き込まれるデータ量を減算する。
【００６６】
ライト終了検出部３１５は、ＮＡＮＤメモリコントローラ１０７−１〜１０７−８に対して一斉に転送されたライトコマンドの終了を検出する。本実施形態では、ＮＡＮＤメモリコントローラ１０７−１〜１０７−８が、ライトコマンドの終了ステータスを、内部の図示しないＦＩＦＯバッファに蓄積する。そして、ライト終了検出部３１５が、これらステータスをポーリングし、ライトコマンドの終了を検出する。そして、ライト終了検出部３１５は、終了したライトコマンドのデータに割り当てていた、ＤＲＡＭ１５０上のバッファ領域を解放する。
【００６７】
リード転送開始部３１６は、コマンド管理部３１１により開始されたＮＡＮＤメモリ１６０−１〜１６０−８からのデータの読み込みの終了を検出する。ＮＡＮＤメモリコントローラ１０７−１〜１０７−８は、リードコマンドの終了ステータスを、内部の図示しないＦＩＦＯバッファに蓄積する。そして、リード転送開始部３１６が、これらステータスをポーリングし、リードコマンドの終了を検出する。そして、リード転送開始部３１６は、当該リードコマンドでＤＲＡＭ１５０上に格納されたデータを、ホストに転送するよう、ＳＡＳコントローラ１０４−１、１０４−２に要求する。これにより、リードされたデータのホストへの転送が開始される。
【００６８】
リード終了検出部３１７は、ＳＡＳコントローラ１０４−１、１０４−２をポーリングして、ホストへの転送終了を検出する。そして、転送終了を検出した場合に、リード終了検出部３１７は、当該転送の対象であったデータに割り当てていたＤＲＡＭ１５０上のバッファ領域を開放する。
【００６９】
そして、本実施形態にかかる第１のＭＰＵ１０１では、コマンド管理部３１１、ライトクレジット管理部３１２、Transfer＿Ready通知部３１３、ライト実行開始部３１４、ライト終了検出部３１５、リード転送開始部３１６、及びリード終了検出部３１７の順番に従って、各構成の処理が繰り返されるものとする。
【００７０】
次に、第２のＭＰＵ１０３の構成について説明する。ユーザデータ書込先提供部３２１は、チャネルコントローラ１０２をポーリングし、全チャネルを同期した同時書き込みの開始を検出する。そして、ユーザデータ書込先提供部３２１は、チャネルコントローラ１０２に対して、当該開始を検出した場合に、次の書込先となる、新たなＮＡＮＤメモリ１６０−１〜１６０−８のアドレスを提供する。なお、新たなＮＡＮＤメモリ１６０−１〜１６０−８のアドレスは、コンパクション実行部３２５により設けられた空きブロックを利用する。
【００７１】
コンパクション対象データ書込先提供部３２２は、チャネルコントローラ１０２をポーリングし、コンパクションライトの開始を検出する。そして、コンパクション対象データ書込先提供部３２２は、チャネルコントローラ１０２に対して、次にコンパクションによる書込先となる、新たなＮＡＮＤメモリ１６０−１〜１６０−８のアドレスを提供する。なお、新たなＮＡＮＤメモリ１６０−１〜１６０−８のアドレスは、コンパクション実行部３２５により設けられた空きブロックを利用する。
【００７２】
データ量設定部３２３は、全チャネルを同期した一度に書き込み可能なデータ量を示す情報を、シェアードＲＡＭ１０８に設定する。この同時書き込みは、ユーザデータの書き込みでもコンパクションライトでも良い。なお、データ量設定部３２３による設定は、ユーザデータ書込先提供部３２１による同時開始の検出、又はコンパクション対象データ書込先提供部３２２によるコンパクションライトの開始の検出をトリガーとして行われる。
【００７３】
ブロック検索部３２４は、コンパクションの対象となるブロックをＤＲＡＭ１５０に格納されたブロック管理テーブルから検索する。選択に使用するアルゴリズムは様々な手法が提案されているため説明を省略するが、ブロック検索部３２４は、一般的に、有効なデータが含まれている量が少ないブロックを選択する。
【００７４】
コンパクション実行部３２５は、コンパクションを実行する。コンパクション実行部３２５は、ブロック検索部３２４により選択されたブロックの有効なデータを含むページを、ＤＲＡＭ１５０のデータ格納領域へ読み出すリードコマンドを、チャネルコントローラ１０２に発行する。その後、コンパクション実行部３２５は、ＤＲＡＭ１５０への読み出し終了をポーリングで検出する。検出した場合に、コンパクション実行部３２５は、ＤＲＡＭ１５０に記憶されたデータを移動先へコピーするためのライトコマンドを、チャネルコントローラ１０２に発行する。
【００７５】
コンパクション実行部３２５による複数ブロックの移動によって空きブロックが生成されるが、これらはユーザデータ書込先提供部３２１及びコンパクション対象データ書込先提供部３２２で提供する空きブロックそのものとなる。
【００７６】
第２のＭＰＵ１０３では、上述した構成による処理を時分割的に実行する。このため、上述したコンパクション処理は、一括して実行するのではない。
【００７７】
本実施形態にかかる半導体ディスク装置１は、一回の全チャネル同時書き込みで書き込み可能なデータ量を記憶するシェアードＲＡＭ１０８と、ＤＭＡコントローラ１０６が全チャネルの同時書き込みのためのデータを転送しているか否かを示す転送判定信号を出力するチャネルコントローラ１０２の信号出力部１１１を備えた。
【００７８】
つまり、第１のＭＰＵ１０１が、シェアードＲＡＭ１０８の書き込み可能なデータ量に従って、ホストからデータを受信し、ＤＲＡＭ１５０に格納するよう制御を行うこととした。これにより、ＤＲＡＭ１５０には、全チャネル同時書き込みで書き込める分のデータだけ格納され、それ以上のデータの受信を抑止した。これにより、全チャネル同時書き込みの準備中に、ホストからデータが送信されてくるのを抑止した。
【００７９】
さらには、信号出力部１１１が全チャネル同時書き込み中であることを示す転送判定信号を出力することとした。そして、第１のＭＰＵ１０１が、全チャネルで同時書き込みのためのデータ転送が行われている間は、シェアードＲＡＭ１０８に設定されている書き込み可能なデータ量にかかわらず、ホストからデータを受信することを抑止した。
【００８０】
これら処理の組み合わせにより、全チャネル同時書き込みのための処理が行われている間は、ホストからデータの受信が行われないため、ＤＭＡコントローラ１０６において、全チャネル同時書き込みのためのＤＲＡＭ１５０からのデータの読み出しと、ホストから受信したデータのＤＲＡＭ１５０への書き込みと、が競合することを防ぐことが可能となった。次に、具体的なデータの転送タイミングについて説明する。
【００８１】
図３は、本実施形態にかかる半導体ディスク装置１における、シーケンシャルライトの転送タイミングを示した図である。図３のＳＡＳ  ＴＸ４００は、半導体ディスク装置１がホストにTransfer＿Readyフレームを送信するタイミングを示している。ＳＡＳ  ＲＸ４１０は、半導体ディスク装置１がホストからユーザデータを受信するタイミングを示している。
【００８２】
Ｗｒｉｔｅ  Ｘｆｅｒ４２０は、信号出力部１１１が出力する転送判定信号のタイミングを示している。ＤＭＡ（ＳＡＳ）４３０は、ＳＡＳコントローラ１０４−１、１０４−２により受信されたデータを、ＤＭＡコントローラ１０６がＤＲＡＭ１５０に転送するタイミングを示している。ＤＭＡ（Ｃｈ０−７）４４０は、ＤＲＡＭ１５０に記憶されたデータを、ＤＭＡコントローラ１０６がＮＡＮＤメモリコントローラ１０７−１〜１０７−８に転送するタイミングを示している。
【００８３】
データ転送タイミング４５０は、ＮＡＮＤメモリコントローラ１０７−１〜１０７−８がＮＡＮＤメモリ１６０−１〜１６０−８にデータを転送するタイミングを示している。データ転送タイミング４５０は、ＮＡＮＤメモリコントローラ１０７−１〜１０７−８がユーザデータをＮＡＮＤメモリ１６０−１〜１６０−８に転送するタイミング４５２と、ＮＡＮＤメモリ１６０−１〜１６０−８がユーザデータを書き込むタイミング４５３と、で構成されている。
【００８４】
図３に示すように、ＳＡＳコントローラ１０４−１、１０４−２は、Transfer＿Readyフレームの送信に対応して、ホストからユーザデータを受信する。そして、受信したユーザデータは、ＦＩＦＯバッファ１０５−１〜１０５−４に一時的に格納されるが、ＤＭＡコントローラ１０６が、受信したユーザデータを、転送期間４３１−１、４３１−２及び４３１−３の間に、ＤＲＡＭ１５０に転送する。
【００８５】
そして、全チャネル同時書き込みのためのデータがＤＲＡＭ１５０に蓄積され、且つＮＡＮＤメモリ１６０−１〜１６０−８への書き込みが完了した（例えば、タイミング４５１−１）後、ＤＭＡコントローラ１０６は、チャネルコントローラ１０２の指示に従って、ユーザデータを、ＮＡＮＤメモリコントローラ１０７―１〜１０７−８に転送する（転送タイミング４４０）。その際、信号出力部１１１は、チャネルコントローラ１０２の制御に従って、ＤＭＡコントローラ１０６が全チャネル同時書き込みのためのデータ転送をしていることを示す転送判定信号を出力する（期間４２１−１、４２１−２、及び４２２−３参照）。
【００８６】
なお、図３に示す例において、Defectが無い場合に１回で書き込まれるデータ量は、ＤＭＡコントローラ１０６による転送期間４３１−１で転送されるデータ量と一致する。一方、Defectが有る場合に一回で書き込まれるデータ量は、ＤＭＡコントローラ１０６による転送期間４３１−２で転送されるデータ量と一致する。本実施形態においては、次回に書き込むデータ量分をホストからデータを正確に受信することが可能となるため、全チャネルを同期して同時に書き込む処理を容易に実現できる。換言すれば、本実施形態にかかる半導体ディスク装置１では、全チャネルを同期して同時に書き込む処理の直前に、ホストへTransfer＿Readyフレームを送信しない。これにより、全チャネル同期転送の直前でホストからユーザデータの受信を抑止できる。
【００８７】
また、本実施形態にかかる半導体ディスク装置１では、全チャネル同時書き込みが終了したタイミング（例えばタイミング４５１−２）であっても、全チャネル同時書き込みのためのデータ量がＤＲＡＭ１５０に格納されていない場合、ＤＭＡコントローラ１０６は、ＤＲＡＭ１５０に、当該データ量が格納されるまで待機する。そしてデータ量が格納された後、ＤＭＡコントローラ１０６は、チャネルコントローラ１０２の指示に従って、ユーザデータを、ＮＡＮＤメモリコントローラ１０７―１〜１０７−８に転送する。
【００８８】
そして、信号出力部１１１が、データ転送をしていることを示す転送判定信号‘１’を出力している間に、第２のＭＰＵ１０３のデータ量設定部３２３が、シェアードＲＡＭ１０８に次に書き込み可能なデータ量を設定する。
【００８９】
そして、信号出力部１１１が出力する転送判定信号が‘１’から‘０’に切り替えられた時点で、第１のＭＰＵ１０１のライトクレジット管理部３１２が、ホストからのデータを受信可能であると判定する。この判定に基づいて、Transfer  Ready通知部３１３がTransfer  Readyフレームの通知を、ＳＡＳコントローラ１０４−１、１０４−２に対して要求する。
【００９０】
このような制御を行うことで、図３に示すように、ＤＭＡコントローラ１０６において、ＤＲＡＭ１５０からのデータの読み込みと、ＤＲＡＭ１５０へのデータの書き込みと、の競合を抑止できる。これにより、無転送期間が現れないよう制御することが可能となった。
【００９１】
図４は、本実施形態にかかる半導体ディスク装置１における、ランダムライトの転送タイミングを示した図である。図４のＳＡＳ  ＴＸ５００は、半導体ディスク装置１がホストにTransfer＿Readyフレームを送信するタイミングを示している。ＳＡＳ  ＲＸ５１０は、半導体ディスク装置１がホストからユーザデータを受信するタイミングを示している。
【００９２】
Ｗｒｉｔｅ  Ｘｆｅｒ５２０は、信号出力部１１１が出力する転送判定信号のタイミングを示している。ＤＭＡ（ＳＡＳ）５３０は、ＳＡＳコントローラ１０４−１、１０４−２により受信されたデータを、ＤＭＡコントローラ１０６がＤＲＡＭ１５０に転送するタイミングを示している。ＤＭＡ（Ｃｈ  ０−７）５４０は、ＤＲＡＭ１５０に記憶されたデータを、ＤＭＡコントローラ１０６がＮＡＮＤメモリコントローラ１０７−１〜１０７−８に転送するタイミングを示している。
【００９３】
データ転送タイミング５５０は、ＮＡＮＤメモリコントローラ１０７−１〜１０７−８がＮＡＮＤメモリ１６０−１〜１６０−８にデータを転送するタイミングを示している。データ転送タイミング５５０は、ＮＡＮＤメモリコントローラ１０７−１〜１０７−８がユーザデータをＮＡＮＤメモリ１６０−１〜１６０−８に書き込むまでの期間５５１と、コンパクションのためにＮＡＮＤメモリ１６０−１〜１６０−８からＤＲＡＭ１５０にデータを読み出す期間５５２と、コンパクションのためにＤＲＡＭ１５０に保持されたデータをＮＡＮＤメモリ１６０−１〜１６０−８に書き込む期間５５３と、で構成されている。
【００９４】
ところで、半導体ディスク装置１においては、ランダムライトを行うことで無効なデータがランダムな物理位置に発生する。このため、新たなデータを書き込み可能とするためにコンパクションが必要になる。一般にコンパクションは、コマンドを処理していない期間に実行することで、性能低下を抑止する。しかしながら、ライトコマンドが頻繁に発行される期間では、このペースに合わせて新たな書き込みを行なう領域を確保しなければならない。このため、図４に示す様に、ユーザデータの受信と並行してコンパクションが必要となる。
【００９５】
ランダムライトでは、１回のユーザデータの書き込み(期間５５１)に対して、コンパクション処理(期間５５２、５５３)が複数回必要となる。期間５５２は、コンパクション元のデータを、ＤＲＡＭ１５０に確保したコンパクション用のバッファに読み出す期間とする。期間５５３は、ＤＲＡＭ１５０上に格納されたデータを、コンパクション先に書き込む期間とする。コンパクションでは、有効なデータをまとめて移動させる処理である。コンパクションの書き込み処理（期間５５３で行われる処理)は、ユーザデータの書き込み処理と同じであり、コンパクションのために全チャネル同時転送を実行する期間５２１−２では、ホストからのデータの受信を抑止する必要がある。
【００９６】
このコンパクションを実施している間でもホストからはライトコマンドが発行される。これに対し、本実施形態にかかる半導体ディスク装置１では、Ｗｒｉｔｅ  Ｘｆｅｒ５２０として‘１’が出力されている期間は、ユーザデータの書き込みか、コンパクションによる書き戻しか、を問わず、ホストに対してTransfer＿Readyフレームによるコミットを出力しないよう制御できる。この結果、コンパクションによる書き戻しのための転送期間５２１−２では、ホストからのデータ転送が重なる確率を低く保つことができる。
【００９７】
次に、第２のＭＰＵ１０３による、全チャネル同時書き込みを行うための処理について説明する。図５は、本実施の形態にかかる第２のＭＰＵ１０３における上述した処理の手順を示すフローチャートである。図５に示す例では、ユーザデータの書き込みのための処理とするが、コンパクションであっても同様の処理を行うものとする。
【００９８】
まず、第２のＭＰＵ１０３のユーザデータ書込先提供部３２１が、チャネルコントローラ１０２をポーリングし、全チャネルを同期した同時書き込みを開始したか否かを判定する（ステップＳ６０１）。同時書き込みを開始していないと判定した場合（ステップＳ６０１：Ｎｏ）、処理を終了する。
【００９９】
そして、ユーザデータ書込先提供部３２１が、同時書き込みを開始したと判定した場合（ステップＳ６０１：Ｙｅｓ）、次の書き込みアドレス、及びDefect位置を、チャネルコントローラ１０２に設定する（ステップＳ６０２）。
【０１００】
その後、第２のＭＰＵ１０３のデータ量設定部３２３が、次の同時書き込み処理で書き込むデータ量を、シェアードＲＡＭ１０８に設定する（ステップＳ６０３）。このデータ量は、Defectの有無等により変化する。
【０１０１】
上述した処理手順により、次の全チャネル同時書き込みに必要な設定を行うことができる。なお、上述した処理手順は、第２のＭＰＵ１０３が所定時間毎に定期に行うこととする。
【０１０２】
次に、第１のＭＰＵ１０１による、ライトコマンドを実行するための処理について説明する。図６は、本実施の形態にかかる第１のＭＰＵ１０１における上述した処理の手順を示すフローチャートである。図６に示す例では、ユーザデータの書き込みのための処理とするが、コンパクションであっても同様の処理を行うものとする。
【０１０３】
まず、ライトクレジット管理部３１２が、ライトコマンドキューを参照し、転送未完了のライトコマンドがあるか否かを判定する（ステップＳ７０１）。ライトコマンドがないと判定した場合（ステップＳ７０１：Ｎｏ）、処理を終了する。
【０１０４】
一方、ライトクレジット管理部３１２が、転送未完了のライトコマンドがあると判定した場合（ステップＳ７０１：Ｙｅｓ）、シェアードＲＡＭ１０８を参照し、書き込み可能なデータ量があるか否かを判定する（ステップＳ７０２）。書き込み可能なデータ量が無いと判定した場合（ステップＳ７０２：Ｎｏ）、処理を終了する。
【０１０５】
そして、ライトクレジット管理部３１２が、書き込み可能なデータ量があると判定した場合（ステップＳ７０２：Ｙｅｓ）、当該書き込み可能なデータ量で、ライトコマンドが必要とするデータ量分を書き込み可能であるか否かを判定する（ステップＳ７０３）。書き込み可能であると判定した場合（ステップＳ７０３：Ｙｅｓ）、次の全チャネル同時書き込み処理で書き込む量として、ライトコマンドが必要とするデータ量分を設定する（ステップＳ７０４）。一方、書き込み可能ではないと判定した場合（ステップＳ７０３：Ｎｏ）、次の全チャネル同時書き込み処理で書き込む量として、シェアードＲＡＭ１０８に記憶されていた書き込み可能なデータ量を設定する（ステップＳ７０５）。
【０１０６】
その後、ライトクレジット管理部３１２は、信号出力部１１１が出力する転送判定信号に基づいて、ＤＭＡコントローラ１０６が、ＮＡＮＤメモリ１６０−１〜１６０−８に書き込むためのデータを転送中であるか否かを判定する（ステップＳ７０６）。転送中であると判定した場合（ステップＳ７０６：Ｙｅｓ）、処理を終了する。
【０１０７】
一方、ライトクレジット管理部３１２が、転送中ではないと判定した場合（ステップＳ７０６：Ｎｏ）、データを受信可能であるとみなし、Transfer＿Ready通知部３１３が、書き込む量を示したTransfer＿Readyフレームの通知を、ＳＡＳコントローラ１０４−１、１０４−２に要求する（ステップＳ７０７）。これにより、ＳＡＳコントローラ１０４−１、１０４−２が、Transfer＿Readyフレームをホストに通知する。
【０１０８】
その後、ライト実行開始部３１４は、シェアードＲＡＭ１０８に記憶されている、書き込み可能なデータ量を、発行したライトコマンドで書き込むデータ量で減算する（ステップＳ７０８）。
【０１０９】
その後、ライト実行開始部３１４は、ライトコマンドで書き込むデータ量から、今回の処理で書き込むデータ量で減算する（ステップＳ７０９）。
【０１１０】
そして、ライト実行開始部３１４は、ライトコマンドで書き込むデータ量が‘０’になったか否かを判定する（ステップＳ７１０）。‘０’になっていないと判定した場合（ステップＳ７１０：Ｎｏ）、ライトコマンドを、ライトコマンドキューに保持し（ステップＳ７１２）、終了する。
【０１１１】
一方、ライト実行開始部３１４が、ライトコマンドで書き込むデータ量が‘０’になったと判定した場合（ステップＳ７１０：Ｙｅｓ）、ライトコマンドの転送が終了したものとして、当該ライトコマンドをライトコマンドキューから削除し（ステップＳ７１１）、処理を終了する。
【０１１２】
上述した処理手順により、ＤＭＡコントローラ１０６がデータの転送中以外のタイミングで、Transfer＿Readyフレームが送信されることになる。なお、上述した処理手順は、第１のＭＰＵ１０１が所定時間毎に定期に行うこととする。
【０１１３】
このように本実施形態では、第２のＭＰＵ１０３のデータ量設定部３２３が、１回の全チャネル同時書き込み処理で書き込み可能なデータ量を、シェアードＲＡＭ１０８に設定する。そして、第１のＭＰＵ１０１のライト実行開始部３１４が、書き込み処理が行われる毎に、シェアードＲＡＭ１０８に設定された書き込み可能なデータ量から、書き込み処理されたデータ量を減算する。そして、ＳＡＳコントローラ１０４−１、１０４−２が、書き込み可能なデータ量が‘０’になるまで、ホストからデータを受信する。そして、書き込み可能なデータ量が‘０’になった場合に、ホストからのデータの受信が抑止される。そして、全チャネル同時書き込み処理の開始時に、データ量設定部３２３が、その次の全チャネル同時書き込み処理で書き込み可能なデータ量を、シェアードＲＡＭ１０８に再設定する。
【０１１４】
本実施形態にかかる半導体ディスク装置１では、ユーザデータの全チャネル同期転送と、ホストからのデータ転送と、の競合が抑止される。さらに、コンパクションライトによる全チャネル同期転送の期間でも、新たなTransfer＿Readyフレームの発行を抑止できる。
【０１１５】
これにより、本実施形態にかかる半導体ディスク装置１ではＳＡＳやＦＣを用いた場合における共用バス・インターフェイスでのバスフリーズを防止できる。その際に、半導体ディスク装置１に、ＤＭＡコントローラ１０６とＮＡＮＤメモリコントローラ１０７−１〜１０７−８との間に低容量又は低速バッファメモリを使用しても性能を低下させることを抑止できる。
【０１１６】
本実施形態にかかる半導体ディスク装置１では、ホストから受信してＤＲＡＭ１５０に記憶させる総データ量と、次回に全チャネル同時書き込み処理で一度に書き込めるデータ量と、を一致させた。これを実現するために、シェアードＲＡＭ１０８に記憶された書き込み可能なデータ量に基づいて、Tranfer＿Readyフレームの発行を制御することとした。これにより、一度の書き込み処理で、書き込めるデータ量だけコミットすることとした。
【０１１７】
さらに、本実施形態にかかる半導体ディスク装置１では、ＤＭＡコントローラ１０６が全チャネルの同時書き込みのための同時転送期間中は、ホストに対してTranfer＿Readyフレームによる新たなコミットを制限することとした。
【０１１８】
このように、本実施形態にかかる半導体ディスク装置１によれば、複数デバイスでバスをシェアする形のＳＡＳインターフェイスやＦＣインターフェイスを有する場合でも、高価な高速バッファメモリを使わずに、転送効率を可能な限り向上させる事が可能となる。さらに、バスを共用するシステム全体の性能を向上させることができる。
【０１１９】
このように、本実施形態にかかる半導体ディスク装置１によれば、ホスト転送と、非同期に開始されるコンパクションの書き戻しのための全チャネル同時転送と、が競合することを低減させることができる。これにより、バスフリーズを防止でき、システム全体の性能を向上させることができる。
【０１２０】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１２１】
１００…半導体ディスクコントローラ、１０１…第１のＭＰＵ、１０２…チャネルコントローラ、１０３…第２のＭＰＵ、１０４−１、１０４−２…ＳＡＳコントローラ、１０５−１〜１０５−４…ＦＩＦＯバッファ、１０６…ＤＭＡコントローラ、１０７―１〜１０７−８…ＮＡＮＤメモリコントローラ、１０８…シェアードＲＡＭ、１０９…プロセッサバス、１１１…信号出力部、１６０−１〜１６０−８…ＮＡＮＤメモリ、３１１…コマンド管理部、３１２…ライトクレジット管理部、３１３…Transfer＿Ready通知部、３１４…ライト実行開始部、３１５…ライト終了検出部、３１６…リード転送開始部、３１７…リード終了検出部、３２１…ユーザデータ書込先提供部、３２２…コンパクション対象データ書込先提供部、３２３…データ量設定部、３２４…ブロック検索部、３２５…コンパクション実行部
【図１】
2012252416.tif 000003
【図２】
2012252416.tif 000004
【図３】
2012252416.tif 000005
【図４】
2012252416.tif 000006
【図５】
2012252416.tif 000007
【図６】
2012252416.tif 000008