(57)【特許請求の範囲】
【請求項１】
記憶システムに適用されるコントローラであり、前記記憶システムは、前記コントローラとフラッシュメモリ装置とを有し、前記フラッシュメモリ装置はフラッシュチップを有し、前記フラッシュチップはブロックを有し、前記ブロックは複数のページを有し、前記複数のページのうち少なくとも１つは損傷ページであるコントローラであって、
前記コントローラは、通信インタフェースとプロセッサとを有し、
前記通信インタフェースは、前記フラッシュメモリ装置と通信するように構成され、
前記プロセッサは、
前記フラッシュメモリ装置により送信された前記ブロックの容量情報を受信し、
前記ブロックの前記容量情報に従って前記ブロックの有効容量を取得し、前記ブロックの前記有効容量は、前記損傷ページの容量を有さず、
ターゲットデータを読み取り、前記ターゲットデータのサイズは、前記ブロックの前記有効容量であり、
前記ターゲットデータを前記フラッシュメモリ装置に送信するように構成されるコントローラ。
【請求項２】
前記ブロックの前記容量情報は、前記損傷ページについての情報を有し、前記損傷ページについての前記情報は、前記損傷ページの前記容量を示すために使用され、前記プロセッサは、前記ブロックの予め記憶された標準容量と前記損傷ページの前記容量とに従って前記ブロックの前記有効容量を取得するように構成され、前記ブロックの前記有効容量は、前記ブロックの前記標準容量から前記損傷ページの前記容量を減算したものである、請求項１に記載のコントローラ。
【請求項３】
前記ブロックの前記容量情報は、前記ブロックの前記有効容量を有する、請求項１に記載のコントローラ。
【請求項４】
前記ブロックの前記容量情報は、前記ブロックの容量フラグを有し、前記コントローラは、メモリを更に有し、前記ブロックの前記容量フラグと前記ブロックの前記有効容量との間の対応関係は、前記メモリに記憶され、
前記プロセッサは、前記ブロックの前記容量フラグと、前記ブロックの前記容量フラグと前記ブロックの前記有効容量との間の前記対応関係とに従って、前記ブロックの前記有効容量を取得するように構成される、請求項１に記載のコントローラ。
【請求項５】
前記コントローラは、キャッシュを更に有し、前記ターゲットデータは、前記キャッシュに記憶された書き込まれるべきデータであり、
前記プロセッサは、複数の書き込みデータ要求を受信し、前記書き込まれるべきデータを前記キャッシュに書き込むように更に構成され、前記複数の書き込みデータ要求は、前記書き込まれるべきデータを搬送し、
前記プロセッサは、前記複数の書き込みデータ要求で搬送された前記書き込まれるべきデータのサイズが前記ブロックの前記有効容量に等しいことを決定するように更に構成される、請求項１ないし４のうちいずれか１項に記載のコントローラ。
【請求項６】
前記コントローラは、キャッシュを更に有し、前記ターゲットデータは、前記キャッシュに記憶された書き込まれるべきデータの一部であり、
前記プロセッサは、複数の書き込みデータ要求を受信し、前記書き込まれるべきデータを前記キャッシュに書き込むように更に構成され、前記複数の書き込みデータ要求は、前記書き込まれるべきデータを搬送し、
前記プロセッサは、前記書き込まれるべきデータのサイズが前記ブロックの前記有効容量より大きいことを決定するように更に構成される、請求項１ないし４のうちいずれか１項に記載のコントローラ。
【請求項７】
プライマリコントローラとフラッシュチップとを有するフラッシュメモリ装置であり、前記フラッシュチップはブロックを有し、前記ブロックは複数のページを有し、前記複数のページのうち少なくとも１つは損傷ページであるフラッシュメモリ装置であって、
前記フラッシュチップは、ターゲットデータを記憶するように構成され、
前記プライマリコントローラは、
前記ブロックの容量情報についての統計を収集し、前記ブロックの前記容量情報は、前記ブロックの有効容量を取得するために使用され、前記ブロックの前記有効容量は、前記損傷ページの容量を有さず、
前記ブロックの前記容量情報をコントローラに送信し、
前記コントローラにより送信された前記ターゲットデータを受信し、前記ターゲットデータのサイズは、前記ブロックの前記有効容量であり、
前記ターゲットデータを前記ブロックに書き込むように構成されるフラッシュメモリ装置。
【請求項８】
前記プライマリコントローラは、前記コントローラにより送信された問い合わせコマンドを受信するように更に構成され、前記問い合わせコマンドは、前記ブロックの前記容量情報を問い合わせるために使用される、請求項７に記載のフラッシュメモリ装置。
【請求項９】
前記プライマリコントローラは、前記ブロックの前記容量情報を前記コントローラに周期的に送信するように構成される、請求項７に記載のフラッシュメモリ装置。
【請求項１０】
前記ブロックの前記容量情報をコントローラに送信する前に、前記プライマリコントローラは、前記ブロックの前記容量情報が前の統計の収集を通じて取得された前記ブロックの容量情報と異なることを決定するように更に構成される、請求項７に記載のフラッシュメモリ装置。
【請求項１１】
前記ブロックの前記容量情報は、前記損傷ページについての情報を有し、前記損傷ページについての情報は、前記損傷ページの前記容量を示すために使用される、請求項７ないし１０のうちいずれか１項に記載のフラッシュメモリ装置。
【請求項１２】
前記ブロックの前記容量情報は、前記ブロックの前記有効容量を有する、請求項７ないし１０のうちいずれか１項に記載のフラッシュメモリ装置。
【請求項１３】
データをフラッシュメモリ装置に書き込む方法であり、前記方法は、記憶システムに適用され、前記記憶システムは、コントローラと前記フラッシュメモリ装置とを有し、前記フラッシュメモリ装置はフラッシュチップを有し、前記フラッシュチップはブロックを有し、前記ブロックは複数のページを有し、前記複数のページのうち少なくとも１つは損傷ページである方法であって、
前記コントローラにより、前記フラッシュメモリ装置により送信された前記ブロックの容量情報を受信するステップと、
前記コントローラにより、前記ブロックの前記容量情報に従って前記ブロックの有効容量を取得するステップであり、前記ブロックの前記有効容量は、前記損傷ページの容量を有さないステップと、
前記コントローラにより、ターゲットデータを読み取るステップであり、前記ターゲットデータのサイズは、前記ブロックの前記有効容量であるステップと、
前記コントローラにより、前記ターゲットデータを前記フラッシュメモリ装置に送信するステップと
を有する方法。
【請求項１４】
前記ブロックの前記容量情報は、前記損傷ページについての情報を有し、前記損傷ページについての前記情報は、前記損傷ページの前記容量を示すために使用され、
前記コントローラにより、前記ブロックの前記容量情報に従って前記ブロックの有効容量を取得するステップは、
前記コントローラにより、前記ブロックの予め記憶された標準容量と前記損傷ページの前記容量とに従って前記ブロックの前記有効容量を取得するステップを有し、前記ブロックの前記有効容量は、前記ブロックの前記標準容量から前記損傷ページの前記容量を減算したものである、請求項１３に記載の方法。
【請求項１５】
前記ブロックの前記容量情報は、前記ブロックの前記有効容量を有する、請求項１３に記載の方法。
【請求項１６】
前記ブロックの前記容量情報は、前記ブロックの容量フラグを有し、前記コントローラは、メモリを更に有し、前記ブロックの前記容量フラグと前記ブロックの前記有効容量との間の対応関係は、前記メモリに記憶され、
前記コントローラにより、前記ブロックの前記容量情報に従って前記ブロックの有効容量を取得するステップは、
前記コントローラにより、前記ブロックの前記容量フラグと、前記ブロックの前記容量フラグと前記ブロックの前記有効容量との間の対応関係とに従って、前記ブロックの前記有効容量を取得するステップを有する、請求項１３に記載の方法。
【請求項１７】
前記コントローラは、プロセッサとキャッシュとを有し、前記ターゲットデータは、前記キャッシュに記憶された書き込まれるべきデータであり、
前記方法は、
前記プロセッサにより、複数の書き込みデータ要求を受信し、前記書き込まれるべきデータを前記キャッシュに書き込むステップであり、前記複数の書き込みデータ要求は、前記書き込まれるべきデータを搬送するステップと、
前記プロセッサにより、前記複数の書き込みデータ要求で搬送された前記書き込まれるべきデータのサイズが前記ブロックの前記有効容量に等しいことを決定するステップと
を更に有する、請求項１３ないし１６のうちいずれか１項に記載の方法。
【請求項１８】
前記コントローラは、プロセッサとキャッシュとを有し、前記ターゲットデータは、前記キャッシュに記憶された書き込まれるべきデータの一部であり、
前記方法は、
前記プロセッサにより、複数の書き込みデータ要求を受信し、前記書き込まれるべきデータを前記キャッシュに書き込むステップであり、前記複数の書き込みデータ要求は、前記書き込まれるべきデータを搬送するステップと、
前記プロセッサにより、前記書き込まれるべきデータのサイズが前記ブロックの前記有効容量より大きいことを決定するステップと
を更に有する、請求項１３ないし１６のうちいずれか１項に記載の方法。
【請求項１９】
データをフラッシュメモリ装置に書き込む方法であり、前記フラッシュメモリ装置は、プライマリコントローラとフラッシュチップとを有し、前記フラッシュチップはブロックを有し、前記ブロックは複数のページを有し、前記複数のページのうち少なくとも１つは損傷ページである方法であって、
前記プライマリコントローラにより、前記ブロックの容量情報についての統計を収集するステップであり、前記ブロックの前記容量情報は、前記ブロックの有効容量を取得するために使用され、前記ブロックの前記有効容量は、前記損傷ページの容量を有さないステップと、
前記プライマリコントローラにより、前記ブロックの前記容量情報をコントローラに送信するステップと、
前記プライマリコントローラにより、前記コントローラにより送信されたターゲットデータを受信するステップであり、前記ターゲットデータのサイズは、前記ブロックの前記有効容量であるステップと、
前記プライマリコントローラにより、前記ターゲットデータを前記ブロックに書き込むステップと
を有する方法。
【請求項２０】
前記プライマリコントローラにより、前記コントローラにより送信された問い合わせコマンドを受信するステップを更に有し、前記問い合わせコマンドは、前記ブロックの前記容量情報を問い合わせるために使用される、請求項１９に記載の方法。
【請求項２１】
前記プライマリコントローラにより、前記ブロックの前記容量情報をコントローラに送信するステップは、
前記プライマリコントローラにより、前記ブロックの前記容量情報を前記コントローラに周期的に送信するステップを有する、請求項１９に記載の方法。
【請求項２２】
前記プライマリコントローラにより、前記ブロックの前記容量情報をコントローラに送信する前に、前記プライマリコントローラにより、前記ブロックの前記容量情報が前の統計の収集を通じて取得された前記ブロックの容量情報と異なることを決定するステップを更に有する、請求項１９に記載の方法。
【請求項２３】
前記ブロックの前記容量情報は、前記損傷ページについての情報を有し、前記損傷ページについての前記情報は、前記損傷ページの前記容量を示すために使用される、請求項１９ないし２２のうちいずれか１項に記載の方法。
【請求項２４】
前記ブロックの前記容量情報は、前記ブロックの前記有効容量を有する、請求項１９ないし２２のうちいずれか１項に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施例は、ストレージ技術の分野に関し、特にコントローラ、フラッシュメモリ装置及びデータをフラッシュメモリ装置に書き込む方法に関する。
【背景技術】
【０００２】
Flash  Memory（フラッシュメモリ）装置は、記憶媒体がFlashグラニュルである不揮発性メモリであり、電源停止の後にデータが消滅しないという特徴を有する。従って、フラッシュメモリ装置は、外部又は内部メモリとして広く使用されている。記憶媒体としてFlashグラニュルを使用するフラッシュメモリ装置は、ソリッド・ステート・ドライブ（フルネーム：Solid  State  Drive、略してSSD）とも呼ばれるソリッド・ステート・ディスク（フルネーム：Solid  State  Device、略してSSD）でもよく、他のメモリでもよい。
【０００３】
１つのSSDは、一般的に複数のフラッシュチップを含み、各フラッシュチップは、複数のブロック（block）を含む。各blockは複数のページ（page）を更に含む。或る場合には、損傷を受けたページ（損傷ページとも呼ばれる）がblock内に発生する可能性がある。SSDが損傷ページを含むblockにデータを書き込むときに、損傷ページを含むblockがデータを記憶するのに不十分である場合、一般的にデータのオーバーフローを記憶するために新たなblockが見つけられる。従って、SSDでは、或るデータにより書き込まれているが、データで満たされていない大量のblockが存在する。これは、blockの空間利用率を減少させ、SSDの記憶空間の浪費を生じる。
【発明の概要】
【０００４】
本発明の実施例は、blockの空間利用率を改善し、SSDの記憶空間を節約することができるコントローラ、フラッシュメモリ装置及びデータをフラッシュメモリ装置に書き込む方法を提供する。
【０００５】
第１の態様によれば、本発明の実施例は、コントローラを提供する。コントローラは、記憶システムに適用され、記憶システムは、コントローラとフラッシュメモリ装置とを含み、フラッシュメモリ装置はフラッシュチップを含み、フラッシュチップはブロックを含み、ブロックは複数のページを含み、複数のページのうち少なくとも１つは損傷ページである。コントローラは、通信インタフェースとプロセッサとを含む。通信インタフェースは、フラッシュメモリ装置と通信するように構成され、プロセッサは、フラッシュメモリ装置により送信されたブロックの容量情報を受信し、ブロックの容量情報に従ってブロックの有効容量を取得し、ブロックの有効容量は、損傷ページの容量を含まず、ターゲットデータを読み取り、ターゲットデータのサイズは、ブロックの有効容量であり、ターゲットデータをフラッシュメモリ装置に送信するように構成される。
【０００６】
第１の態様の第１の可能な実現方式では、ブロックの容量情報は、損傷ページについての情報を含み、損傷ページについての情報は、損傷ページの容量を示すために使用され、プロセッサは、ブロックの予め記憶された標準容量と損傷ページの容量とに従ってブロックの有効容量を取得するように構成され、ブロックの有効容量は、ブロックの標準容量から損傷ページの容量を減算したものである。
【０００７】
第１の態様の第２の可能な実現方式では、ブロックの容量情報は、ブロックの有効容量を含む。
【０００８】
第１の態様の第３の可能な実現方式では、ブロックの容量情報は、ブロックの容量フラグを含み、コントローラは、メモリを更に含み、ブロックの容量フラグとブロックの有効容量との間の対応関係は、メモリに記憶され、プロセッサは、ブロックの容量フラグと、ブロックの容量フラグとブロックの有効容量との間の対応関係とに従って、ブロックの有効容量を取得するように構成される。
【０００９】
第１の態様又は第１の態様の第１〜第３の可能な実現方式のうちいずれか１つを参照して、第４の可能な実現方式では、コントローラは、キャッシュを更に含み、ターゲットデータは、キャッシュに記憶された書き込まれるべきデータであり、プロセッサは、複数の書き込みデータ要求を受信し、書き込まれるべきデータをキャッシュに書き込むように更に構成され、複数の書き込みデータ要求は、書き込まれるべきデータを搬送し、プロセッサは、複数の書き込みデータ要求で搬送された書き込まれるべきデータのサイズがブロックの有効容量に等しいことを決定するように更に構成される。
【００１０】
第１の態様又は第１の態様の第１〜第３の可能な実現方式のうちいずれか１つを参照して、第５の可能な実現方式では、コントローラは、キャッシュを更に含み、ターゲットデータは、キャッシュに記憶された書き込まれるべきデータの一部であり、プロセッサは、複数の書き込みデータ要求を受信し、書き込まれるべきデータをキャッシュに書き込むように更に構成され、複数の書き込みデータ要求は、書き込まれるべきデータを搬送し、プロセッサは、書き込まれるべきデータのサイズがブロックの有効容量より大きいことを決定するように更に構成される。
【００１１】
第２の態様によれば、本発明の実施例は、フラッシュメモリ装置を提供する。フラッシュメモリ装置は、プライマリコントローラとフラッシュチップとを含み、フラッシュチップはブロックを含み、ブロックは複数のページを含み、複数のページのうち少なくとも１つは損傷ページである。フラッシュチップは、ターゲットデータを記憶するように構成され、プライマリコントローラは、ブロックの容量情報についての統計を収集し、ブロックの容量情報は、ブロックの有効容量を取得するために使用され、ブロックの有効容量は、損傷ページの容量を含まず、ブロックの容量情報をコントローラに送信し、コントローラにより送信されたターゲットデータを受信し、ターゲットデータのサイズは、ブロックの有効容量であり、ターゲットデータをブロックに書き込むように構成される。
【００１２】
第２の態様の第１の可能な実現方式では、プライマリコントローラは、コントローラにより送信された問い合わせコマンドを受信するように更に構成され、問い合わせコマンドは、ブロックの容量情報を問い合わせるために使用される。
【００１３】
第２の態様の第２の可能な実現方式では、プライマリコントローラは、ブロックの容量情報をコントローラに周期的に送信するように構成される。
【００１４】
第２の態様の第３の可能な実現方式では、ブロックの容量情報をコントローラに送信する前に、プライマリコントローラは、ブロックの容量情報が前の統計の収集を通じて取得されたブロックの容量情報と異なることを決定するように更に構成される。
【００１５】
第２の態様又は第２の態様の第１〜第３の可能な実現方式のうちいずれか１つを参照して、第４の可能な実現方式では、ブロックの容量情報は、損傷ページについての情報を含み、損傷ページについての情報は、損傷ページの容量を示すために使用される。
【００１６】
第２の態様又は第２の態様の第１〜第３の可能な実現方式のうちいずれか１つを参照して、第５の可能な実現方式では、ブロックの容量情報は、ブロックの有効容量を含む。
【００１７】
第３の態様によれば、本発明の実施例は、データをフラッシュメモリ装置に書き込む方法を提供し、この方法は、記憶システムに適用され、記憶システムは、コントローラとフラッシュメモリ装置とを含み、フラッシュメモリ装置はフラッシュチップを含み、フラッシュチップはブロックを含み、ブロックは複数のページを含み、複数のページのうち少なくとも１つは損傷ページである。この方法は、コントローラにより、フラッシュメモリ装置により送信されたブロックの容量情報を受信し、コントローラにより、ブロックの容量情報に従ってブロックの有効容量を取得し、ブロックの有効容量は、損傷ページの容量を含まず、コントローラにより、ターゲットデータを読み取り、ターゲットデータのサイズは、ブロックの有効容量であり、コントローラにより、ターゲットデータをフラッシュメモリ装置に送信することを含む。
【００１８】
第３の態様の第１の可能な実現方式では、ブロックの容量情報は、損傷ページについての情報を含み、損傷ページについての情報は、損傷ページの容量を示すために使用され、コントローラにより、ブロックの容量情報に従ってブロックの有効容量を取得することは、コントローラにより、ブロックの予め記憶された標準容量と損傷ページの容量とに従ってブロックの有効容量を取得することを含み、ブロックの有効容量は、ブロックの標準容量から損傷ページの容量を減算したものである。
【００１９】
第３の態様の第２の可能な実現方式では、ブロックの容量情報は、ブロックの有効容量を含む。
【００２０】
第３の態様の第３の可能な実現方式では、ブロックの容量情報は、ブロックの容量フラグを含み、ブロックの容量フラグとブロックの有効容量との間の対応関係は、メモリに記憶され、コントローラにより、ブロックの容量情報に従ってブロックの有効容量を取得することは、コントローラにより、ブロックの容量フラグと、ブロックの容量フラグとブロックの有効容量との間の対応関係とに従って、ブロックの有効容量を取得することを含む。
【００２１】
第３の態様又は第３の態様の第１〜第３の可能な実現方式のうちいずれか１つを参照して、第４の可能な実現方式では、コントローラは、プロセッサとキャッシュとを含み、ターゲットデータは、キャッシュに記憶された書き込まれるべきデータであり、この方法は、プロセッサにより、複数の書き込みデータ要求を受信し、書き込まれるべきデータをキャッシュに書き込み、複数の書き込みデータ要求は、書き込まれるべきデータを搬送し、プロセッサにより、複数の書き込みデータ要求で搬送された書き込まれるべきデータのサイズがブロックの有効容量に等しいことを決定することを更に含む。
【００２２】
第３の態様又は第３の態様の第１〜第３の可能な実現方式のうちいずれか１つを参照して、第５の可能な実現方式では、コントローラは、プロセッサとキャッシュとを含み、ターゲットデータは、キャッシュに記憶された書き込まれるべきデータの一部であり、この方法は、プロセッサにより、複数の書き込みデータ要求を受信し、書き込まれるべきデータをキャッシュに書き込み、複数の書き込みデータ要求は、書き込まれるべきデータを搬送し、プロセッサにより、書き込まれるべきデータのサイズがブロックの有効容量より大きいことを決定することを更に含む。
【００２３】
第４の態様によれば、本発明の実施例は、データをフラッシュメモリ装置に書き込む方法を提供する。フラッシュメモリ装置は、プライマリコントローラとフラッシュチップとを含み、フラッシュチップはブロックを含み、ブロックは複数のページを含み、複数のページのうち少なくとも１つは損傷ページである。この方法は、プライマリコントローラにより、ブロックの容量情報についての統計を収集し、ブロックの容量情報は、ブロックの有効容量を取得するために使用され、ブロックの有効容量は、損傷ページの容量を含まず、プライマリコントローラにより、ブロックの容量情報をコントローラに送信し、プライマリコントローラにより、コントローラにより送信されたターゲットデータを受信し、ターゲットデータのサイズは、ブロックの有効容量であり、プライマリコントローラにより、ターゲットデータをブロックに書き込むことを含む。
【００２４】
第４の態様の第１の可能な実現方式では、この方法は、プライマリコントローラにより、コントローラにより送信された問い合わせコマンドを受信することを更に含み、問い合わせコマンドは、ブロックの容量情報を問い合わせるために使用される。
【００２５】
第４の態様の第２の可能な実現方式では、プライマリコントローラにより、ブロックの容量情報をコントローラに送信することは、プライマリコントローラにより、ブロックの容量情報をコントローラに周期的に送信することを含む。
【００２６】
第４の態様の第３の可能な実現方式では、ブロックの容量情報をコントローラに送信する前に、この方法は、プライマリコントローラにより、ブロックの容量情報が前の統計の収集を通じて取得されたブロックの容量情報と異なることを決定することを更に含む。
【００２７】
第４の態様又は第４の態様の第１〜第３の可能な実現方式のうちいずれか１つを参照して、第４の可能な実現方式では、ブロックの容量情報は、損傷ページについての情報を含み、損傷ページについての情報は、損傷ページの容量を示すために使用される。
【００２８】
第４の態様又は第４の態様の第１〜第３の可能な実現方式のうちいずれか１つを参照して、第５の可能な実現方式では、ブロックの容量情報は、ブロックの有効容量を含む。
【００２９】
本発明の実施例は、コントローラ及びデータをフラッシュメモリ装置に書き込む方法を提供する。コントローラは、フラッシュメモリ装置により送信されたブロックの容量情報を受信し、ブロックの容量情報に従ってブロックの有効容量を取得し、ブロックの有効容量は、損傷ページの容量を含まず、ターゲットデータを読み取り、ターゲットデータのサイズは、ブロックの有効容量であり、ターゲットデータをフラッシュメモリ装置に送信する。本発明の実施例の実現方式によれば、ブロックが損傷ページを有する場合、コントローラは、サイズがブロックの有効容量と同じターゲットデータをフラッシュメモリ装置に送信してもよく、これにより、フラッシュメモリ装置は、ターゲットデータをブロックに書き込む。従って、本発明の実施例によれば、フラッシュメモリ装置のブロックに書き込まれたターゲットデータがデータのオーバーフローなしに最大限までブロックを満たすことが確保され得る。これにより、ブロック利用率を改善し、SSDの記憶空間を節約する。
【００３０】
更に、本発明の実施例は、フラッシュメモリ装置及びデータをフラッシュメモリ装置に書き込む方法を更に提供する。フラッシュメモリ装置は、ブロックの容量情報についての統計を収集し、ブロックの容量情報は、ブロックの有効容量を取得するために使用され、ブロックの有効容量は、損傷ページの容量を含まず、ブロックの容量情報をコントローラに送信し、コントローラにより送信されたターゲットデータを受信し、ターゲットデータのサイズは、ブロックの有効容量であり、ターゲットデータをブロックに書き込む。フラッシュメモリ装置は、ブロックの容量情報についての統計を収集し、ブロックの容量情報をコントローラに送信してもよく、これにより、コントローラは、サイズがブロックの有効容量と同じターゲットデータをフラッシュメモリ装置に送信してもよい。フラッシュメモリ装置は、ターゲットデータをブロックに書き込む。従って、本発明の実施例によれば、フラッシュメモリ装置のブロックに書き込まれたターゲットデータがデータのオーバーフローなしに最大限までブロックを満たすことが確保され得る。これにより、ブロック利用率を改善し、SSDの記憶空間を節約する。
【図面の簡単な説明】
【００３１】
本発明の実施例の技術的対策を明確に説明するために、以下に、実施例又は従来技術を説明するために必要な添付図面を簡単に紹介する。明らかに、以下の説明の添付図面は、本発明の単に幾つかの実施例を示しているに過ぎず、当業者は、創造的取り組みを行うことなく、これらの添付図面から依然として他の図面を導き得る。
【図１】本発明の実施例による記憶システムの概略構成図
【図２】本発明の実施例によるコントローラの概略構成図
【図３ａ】本発明の実施例によるフラッシュメモリ装置の記憶媒体の概略構成図
【図３ｂ】本発明の実施例によるフラッシュメモリ装置のプライマリコントローラの概略構成図
【図４】本発明の実施例に従ってデータをフラッシュメモリ装置に書き込む概略フローチャート
【図５】本発明の実施例に従ってデータをフラッシュメモリ装置に書き込む他の概略フローチャート
【図６】本発明の実施例に従ってデータをフラッシュメモリ装置に書き込む更に他の概略フローチャート
【発明を実施するための形態】
【００３２】
本発明の実施例は、blockの空間利用率を改善し、SSDの記憶空間を節約することができるコントローラ、フラッシュメモリ装置及びデータをフラッシュメモリ装置に書き込む方法を提供する。
【００３３】
図１は、本発明の実施例による記憶システムの概略構成図を示している。図１に示す記憶システムは、コントローラ11とフラッシュメモリ装置22とを含む。フラッシュメモリ装置22は、記憶媒体としてFlashグラニュルを使用する記憶装置であり、ソリッド・ステート・ドライブ（Solid  State  Drive、SSD）とも呼ばれるソリッド・ステート・ディスク（フルネーム：Solid  State  Device、略してSSD）を含んでもよく、他のメモリを含んでもよい。この実施例では、一例としてSSDを使用することにより、フラッシュメモリ装置22について説明する。
【００３４】
図１は、例示的な説明に過ぎず、特定のネットワーキング方式を限定するものではない。例えば、コントローラ11及びフラッシュメモリ装置22が相互に通信することができる限り、カスケード型ツリーネットワーキング及びリングネットワーキングの双方が使用されてもよい。
【００３５】
コントローラ11は、従来技術で知られているいずれかのコンピューティングデバイスを含んでもよく、例えば、サーバ又はデスクトップコンピュータを含んでもよい。オペレーティングシステム及び他のアプリケーションプログラムは、コントローラ11にインストールされる。コントローラ11は、入出力（I/O）要求をフラッシュメモリ装置22に送信してもよい。例えば、書き込みデータ要求は、フラッシュメモリ装置22に送信され、これにより、フラッシュメモリ装置22は、書き込みデータ要求で搬送された書き込まれるべきデータをフラッシュメモリ装置22の記憶媒体に書き込む。
【００３６】
図２を参照すると、図２は、本発明の実施例によるコントローラ11の概略構成図である。図２に示すように、コントローラ11は、プロセッサ（processor）118と、バッファ（cache）120と、メモリ（memory）122と、通信バス（略してバス）126と、通信インタフェース（Communication  Interface）128とを主に含む。プロセッサ118、キャッシュ120、メモリ122及び通信インタフェース128は、通信バス126を使用することにより、相互通信を行う。
【００３７】
通信インタフェース128は、ホスト（図面に図示せず）又はフラッシュメモリ装置22と通信するように構成される。
【００３８】
メモリ122は、プログラム124を記憶するように構成され、メモリ122は、高速RAMメモリを含んでもよく、不揮発性メモリ（non-volatile  memory）、例えば、少なくとも１つのディスクメモリを含んでもよい。メモリ122は、ランダム・アクセス・メモリ（Random  Access  Memory、RAM）、磁気ディスク、ハードディスク、光ディスク、ソリッド・ステート・ディスク（Solid  State  Disk、SSD）又は不揮発性メモリのように、プログラムコードを記憶することができるいずれかの過渡的でない（non-transitory）機械読み取り可能な媒体でもよいことを認識し得る。
【００３９】
具体的に、プログラム124は、プログラムコードを含んでもよく、プログラムコードは、コンピュータ動作命令を含む。
【００４０】
キャッシュ120（Cache）は、ホストから受信したデータ又はフラッシュメモリ装置22から読み取ったデータを一時的に記憶するように構成される。キャッシュ120は、RAM、ROM、フラッシュメモリ（Flash  memory）又はソリッド・ステート・ディスク（Solid  State  Disk、SSD）のように、データを記憶することができるいずれかの過渡的でない（non-transitory）機械読み取り可能な媒体でもよく、ここでは限定されない。例えば、ホストにより送信された書き込みデータ要求を受信した場合、コントローラ11は、書き込みデータ要求をキャッシュ120に記憶してもよく、次に、プロセッサ118は、書き込みデータ要求を処理する。任意選択で、ホストにより送信された１つの書き込みデータ要求を受信した場合、コントローラ11は、まず書き込みデータ要求をキャッシュ120に記憶し、キャッシュ120から１つの書き込みデータ要求を読み取り、処理のために１つの書き込みデータ要求をフラッシュメモリ装置22に送信してもよい。或いは、ホストにより送信された複数の書き込みデータ要求を受信した場合、コントローラ11は、複数の書き込みデータ要求をキャッシュ120に一時的に記憶してもよい。キャッシュ120に記憶された複数の書き込みデータ要求で搬送された書き込まれるべきデータが設定された閾値に到達した場合、コントローラ11は、処理のために複数の書き込みデータ要求で搬送された書き込まれるべきデータをフラッシュメモリ装置22に送信してもよい。
【００４１】
更に、メモリ122及びキャッシュ120は、共に配置されてもよく、別々に配置されてもよく、本発明のこの実施例では限定されない。
【００４２】
プロセッサ118は、中央処理装置CPUでもよく、特定用途向け集積回路ASIC（Application  Specific  Integrated  Circuit）でもよく、本発明のこの実施例を実現するように構成された１つ以上の集積回路でもよい。本発明のこの実施例では、プロセッサ118は、ホストから書き込みデータ要求又は読み取りデータ要求を受信し、書き込みデータ要求又は読み取りデータ要求を処理し、書き込みデータ要求又は読み取りデータ要求をフラッシュメモリ装置22に送信し、他の動作を実行するように構成されてもよい。
【００４３】
図３ａを参照すると、図３ａは、本発明の実施例によるフラッシュメモリ装置22の概略構成図である。この実施例では、一例としてSSDを使用することにより、フラッシュメモリ装置22について説明する。
【００４４】
図３ａに示すように、フラッシュメモリ装置22は、プライマリコントローラ220と記憶媒体221とを含む。プライマリコントローラ220は、コントローラ11により送信された書き込みデータ要求又は読み取りデータ要求を実行し、損傷ページについての統計の収集のような動作を実行するように構成される。ここでは、プライマリコントローラ220は、SSDのプライマリコントローラである。
【００４５】
記憶媒体221は、一般的に複数のフラッシュ（Flash）チップを含む。SSDでは、複数のフラッシュチップを共に接続するためにチャネル（channel）が使用される。書き込みデータ要求の並行処理は、チャネルで実現されてもよい。一例として図３ａに示す４つのチャネルが使用される。プライマリコントローラ220がコントローラ11により送信された４つの書き込みデータ要求を受信した場合、４つのチャネルのそれぞれが書き込みデータ要求を実行してもよく、これにより、書き込みデータ要求を処理する際の効率を改善する。更に、本発明のこの実施例によれば、書き込みデータ要求の並行処理はまた、１つのチャネル上の複数の並行ユニットで実現されてもよく、ここでは限定されない。
【００４６】
各フラッシュチップは、複数のブロック（block）を含み、SSDにより実行される消去動作は、単位としてblockを用いて実行される。例えば、SSDがガベージコレクションを実行する必要がある場合、block内の有効なデータは、まず他の新たなblockに動かされ、元のblockに記憶された全てのデータ（有効なデータ及び無効なデータを含む）が消去される。本発明のこの実施例では、blockの有効なデータは、blockに記憶されており、変更されていないデータを示し、データのこの部分は読み取られてもよい。blockの無効なデータは、blockに記憶されており、変更されたデータを示し、データのこの部分は読み取られることができない。当業者は、フラッシュグラニュルの消去機能のため、blockに記憶されたデータが、一般的な機械的ハードドライブのように直接的に変更され得ないことを認識し得る。blockのデータが変更される必要がある場合、プライマリコントローラ220は、新たなblockを見つけ、変更されたデータを新たなblockに書き込み、元のblockのデータは、無効なデータになる。SSDがガベージコレクションを実行する場合、無効なデータは消去される。
【００４７】
図３ａから、各blockは、複数のページを含んでもよいことが分かり得る。或る場合には、blockのpageに損傷が発生する可能性があり、本発明のこの実施例では、損傷が発生したページは損傷ページと呼ばれる。blockに損傷ページが存在する場合、blockの実際の容量は、損傷ページを含まないblockの容量より小さくなる。本発明のこの実施例では、blockの実際の容量は、有効容量と呼ばれる。例えば、blockの標準容量が1Mであり、各pageのサイズは4KBである。blockに１つの損傷ページが存在する場合、blockの有効容量は、1Mから4KBを減算したものである。本発明のこの実施例では、blockの標準容量は、損傷ページを含まない空のblockの容量を示し、空のblockは、きれいに消去されたblockを示し、有効なデータも無効なデータも含まない。blockの有効容量は、blockの標準容量から損傷ページの容量を減算したものに等しい。損傷ページの容量は、各損傷ページのサイズと損傷ページの数との積に等しい。
【００４８】
本発明のこの実施例では、blockの標準容量は、コントローラ11に予め記憶され、コントローラ11により、サイズが標準容量と同じターゲットデータをフラッシュメモリ装置22に送信するために使用されてもよい。各blockの標準容量は、2のN乗（M）であり、Nは正の整数である。blockの標準容量は同じでもよく、異なってもよい。blockの標準容量が異なる場合、Nの値は異なってもよい。この場合、最大blockの標準容量が、図４〜図６に示す本発明の実施例のいずれかの実現方式で使用される標準容量として考えられてもよい。
【００４９】
更に、本発明のこの実施例では、SSDが書き込みデータ要求を実行する場合、データはまた、単位としてpageを使用することにより書き込まれる。例えば、コントローラ11は、書き込みデータ要求をプライマリコントローラ220に送信する。書き込みデータ要求は、論理ブロックアドレス（Logical  Block  Address、LBA）のセグメント及びターゲットデータを搬送し、LBAは、コントローラ11によりアクセスされ得るアドレスである。書き込みデータ要求を受信した場合、プライマリコントローラ220は、所定のポリシーに従ってターゲットデータをblockに書き込んでもよい。ターゲットデータが書き込まれる複数のpageのアドレスは、ターゲットデータを実際に記憶するアドレスであり、物理アドレスとも呼ばれる。SSDは、LBAのセグメントと複数のpageのアドレスとの間の対応関係を設定して記憶してもよい。コントローラ11が後に読み取りデータ要求をプライマリコントローラ220に送信し、ターゲットデータを読み取ることを要求した場合、読み取りデータ要求はLBAを搬送する。この場合、プライマリコントローラ220は、LBAと、LBAと物理アドレスとの間の対応関係とに従ってターゲットデータを読み出し、ターゲットデータをコントローラ11に戻してもよい。
【００５０】
以下に、プライマリコントローラ220の構成及び機能を紹介する。図３ｂを参照すると、図３ｂは、本発明の実施例によるフラッシュメモリ装置22のプライマリコントローラ220の概略構成図である。
【００５１】
プライマリコントローラ220は、プロセッサ（processor）218と、キャッシュ（cache）230と、通信バス（略してバス）226と、通信インタフェース（Communication  Interface）228とを主に含む。プロセッサ218、キャッシュ230及び通信インタフェース228は、通信バス226を使用することにより、相互通信を行う。
【００５２】
通信インタフェース228は、コントローラ11及び記憶媒体221と通信するように構成される。
【００５３】
キャッシュ230（Cache）は、コントローラ11から受信したデータ及び記憶媒体221から読み取ったデータを一時的に記憶するように構成される。キャッシュ230は、RAM、ROM、フラッシュメモリ（Flash  memory）又はソリッド・ステート・ディスク（Solid  State  Disk、SSD）のように、データを記憶することができるいずれかの過渡的でない（non-transitory）機械読み取り可能な媒体でもよく、ここでは限定されない。例えば、コントローラ11により送信された書き込みデータ要求が受信された場合、書き込みデータ要求は、キャッシュ230に記憶されてもよく、プロセッサ218により処理される。更に、或る適用例では、キャッシュ230はまた、プライマリコントローラ220の外部に配置されてもよい。
【００５４】
プロセッサ218は、中央処理装置CPUでもよく、特定用途向け集積回路ASIC（Application  Specific  Integrated  Circuit）でもよく、本発明のこの実施例を実現するように構成された１つ以上の集積回路でもよい。本発明のこの実施例では、プロセッサ218は、コントローラ11から書き込みデータ要求又は読み取りデータ要求を受信し、書き込みデータ要求又は読み取りデータ要求を処理し、書き込みデータ要求又は読み取りデータ要求を記憶媒体221に送信し、他の動作を実行するように構成されてもよい。
【００５５】
プロセッサ218は、様々なプログラム命令を記憶するように構成されたキャッシュ（図面に図示せず）を更に含んでもよい。例えば、キャッシュは、フラッシュ変換レイヤ（Flash  Translation  Layer、FTL）を含んでもよい。プロセッサ218は、FTLを使用することにより、損傷ページについての統計の収集のような動作を実行して損傷ページについての統計の収集結果をFTLの構成情報に記憶してもよい。或いは、プロセッサ218は、他のソフトウェアモジュールを使用することにより、同様の機能を実現してもよい。従って、FTLの機能と同様の機能を有し、損傷ページについての統計の収集のような動作を実行して損傷ページについての統計の収集結果をソフトウェアモジュールの構成情報に記憶し得る如何なるソフトウェアモジュールも、本発明の実施例の保護範囲に入る。
【００５６】
以下に、本発明の実施例に従ってデータをフラッシュメモリ装置に書き込む方法の手順を紹介する。本発明のこの実施例においてデータをフラッシュメモリ装置に書き込む方法は、図１に示す記憶システム、図２に示すコントローラ11、並びに図３ａ及び図３ｂに示すフラッシュメモリ装置（例えば、SSD）に適用されてもよい。フラッシュメモリ装置はブロックを含み、ブロックは、少なくとも１つのページが損傷ページである複数のページを含む。図４に示すように、この方法は以下のステップを含む。
【００５７】
ステップS101：フラッシュメモリ装置22は、ブロックの容量情報についての統計を収集する。
【００５８】
具体的に、プライマリコントローラ220は、FTLを使用することによりブロックの損傷ページについての統計を収集し、統計結果をFTLの構成情報に保存してもよい。
【００５９】
ここで、ブロックの容量情報は、SSDの１つのblockの容量情報を示してもよく、SSDの複数又は全てのblockの容量情報を示してもよい。説明を容易にするために、１つのblockが本発明のこの実施例の説明の例として使用される。
【００６０】
本発明のこの実施例におけるブロックの容量情報は、プライマリコントローラ220又はコントローラ11により、ブロックの有効容量を取得するために使用されてもよい。
【００６１】
任意選択で、ブロックの容量情報は、blockに含まれる損傷ページの数を含んでもよい。プライマリコントローラ220が統計の収集を通じてblockに含まれる損傷ページの数を取得した場合、ブロックの有効容量は、ブロックの標準容量から損傷ページの容量を減算したものに等しい。損傷ページの容量は、損傷ページの数と損傷ページのサイズとの積に等しい。
【００６２】
任意選択で、ブロックの容量情報は、blockに含まれる損傷ページの容量を含んでもよい。
【００６３】
任意選択で、ブロックの容量情報は、ブロックの有効容量でもよい。
【００６４】
任意選択で、ブロックの容量情報は、ブロックの容量フラグでもよく、ブロックの有効容量を取得するために使用される他の情報でもよい。本発明のこの実施例は、ブロックの容量情報の形式及び内容に限定を課さない。
【００６５】
ステップS102：フラッシュメモリ装置22は、ブロックの容量情報をコントローラ11に送信する。
【００６６】
具体的に、フラッシュメモリ装置22のプライマリコントローラ220は、コントローラ11の通信インタフェース228を通じてブロックの容量情報をコントローラ11のプロセッサ118に送信してもよい。
【００６７】
１つの任意選択の実現方式は、コントローラ11が問い合わせコマンドをフラッシュメモリ装置22に周期的に又はリアルタイムで送信し得ることである。問い合わせコマンドは、ブロックの容量情報を問い合わせるために使用される。問い合わせコマンドを受信した後に、フラッシュメモリ装置22は、ステップS101を実行し始め、実行が完了した後にブロックの容量情報をコントローラ11に送信する。具体的に、コントローラ11のプロセッサ118は、問い合わせコマンドをフラッシュメモリ装置22に送信してもよい。
【００６８】
他の任意選択の実現方式は、プライマリコントローラ220が周期的にステップS101を実行し、実行が完了した後に毎回、ブロックの容量情報をコントローラ11に送信することである。或いは、プライマリコントローラ220は、ステップS101を周期的に実行し、プライマリコントローラ220は、現在の統計結果と前の統計結果とを比較する。ブロックの容量情報が変化したことを見つけた場合、プライマリコントローラ220は、現在の統計結果をコントローラ11に送信する。本発明のこの実施例は周期の長さに限定を課さず、周期の長さは実際の用途におけるユーザ要求に従って調整されてもよい点に留意すべきである。
【００６９】
ステップS103：コントローラ11は、ブロックの容量情報に従ってブロックの有効容量を取得する。ブロックの有効容量は、損傷ページの容量を含まない。
【００７０】
具体的に、コントローラ11のプロセッサ118は、ブロックの容量情報に従ってブロックの有効容量を取得してもよい。
【００７１】
ブロックの容量情報がblockに含まれる損傷ページの数を含む場合、コントローラ11は、損傷ページの数を損傷ページのサイズで乗算してブロックの損傷ページの容量を取得し、ブロックの予め記憶された標準容量から損傷ページの容量を減算してブロックの有効容量を取得してもよい。
【００７２】
ブロックの容量情報がblockに含まれる損傷ページの容量を含む場合、コントローラ11は、ブロックの予め記憶された標準容量から損傷ページの容量を減算してブロックの有効容量を取得してもよい。
【００７３】
ブロックの容量情報がブロックの有効容量である場合、コントローラ11は、ブロックの有効容量を直接的に取得してもよい。
【００７４】
ブロックの容量情報がブロックの容量フラグである場合、コントローラ11は、容量フラグと、容量フラグと有効容量との対応関係とに従ってブロックの有効容量を取得してもよい。本発明のこの実施例では、ブロックの有効容量を取得するために、コントローラ11は、各ブロックの容量フラグと各ブロックの有効容量との間の対応関係をコントローラ11のメモリ122に予め記憶してもよく、各ブロックの容量フラグと他の容量情報との間の対応関係をメモリ122に予め記憶してもよい。
【００７５】
ステップS104：コントローラ11は、ターゲットデータを読み取る。ターゲットデータのサイズは、ブロックの有効容量である。
【００７６】
具体的に、ステップS104は、コントローラ11のプロセッサ118により実行されてもよい。プロセッサ118は、キャッシュ120からターゲットデータを読み出す。ターゲットデータのサイズは、ブロックの有効容量に等しい。ターゲットデータのサイズは、必ずしもブロックの有効容量に等しくなくてもよく、ブロックの有効容量よりわずかに小さくてもよい点に留意すべきである。
【００７７】
キャッシュ120に記憶されたターゲットデータは、ホストにより送信された書き込みデータ要求で搬送された書き込まれるべきデータからのものでもよく、１つの書き込みデータ要求で搬送された書き込まれるべきデータでもよく、複数の書き込みデータで搬送された書き込まれるべきデータでもよい。
【００７８】
ステップS105：コントローラ11は、ターゲットデータをフラッシュメモリ装置22に送信する。
【００７９】
具体的に、プロセッサ118は、通信インタフェース128を通じて、ステップS104で読み出した書き込まれるべきデータをフラッシュメモリ装置22に送信する。１つの実現方式は、プロセッサ118が新たな書き込みデータ要求を生成することであり、新たな書き込みデータ要求は、ターゲットデータを含む。他の任意選択の実現方式は、プロセッサ118が複数の新たな書き込みデータ要求を生成することであり、複数の新たな書き込みデータ要求のそれぞれは、ターゲットデータの一部を含む。更に他の任意選択の実現方式は、プロセッサ118がホストからの書き込みデータ要求をフラッシュメモリ装置22に直接的に転送することであり、ホストからの書き込みデータ要求で搬送されるデータは、ターゲットデータである。
【００８０】
ステップS106：フラッシュメモリ装置22は、ターゲットデータをブロックに書き込む。
【００８１】
ターゲットデータのサイズは、ブロックの有効容量であるため、プライマリコントローラ220がターゲットデータを損傷ページを除くブロックの他のページに書き込んだ後に、blockはちょうど完全に満たされる。
【００８２】
本発明のこの実施例では、フラッシュメモリ装置22は、ブロックの容量情報をコントローラ11に送信する。ブロックの容量情報は、ブロックの有効容量を取得するために使用される。コントローラ11は、ブロックの容量情報に従ってブロックの有効容量を取得し、サイズがブロックの有効容量と同じターゲットデータを読み取り、ターゲットデータをフラッシュメモリ装置22に送信してもよい。フラッシュメモリ装置22は、ターゲットデータをブロックに書き込む。本発明のこの実施例の実現方式によれば、ブロックが損傷ページを有する場合、ブロックに書き込まれたターゲットデータがデータのオーバーフローなしに最大限までブロックを満たすことが確保され得る。これにより、ブロック利用率を改善する。
【００８３】
前述の実施例において、他の実現方式は、プロセッサ118によりキャッシュ120から読み取られたターゲットデータのサイズは、複数のブロックの有効容量の和でもよいことでもよい。ターゲットデータのサイズが４つのブロックの有効容量の和でもよい例が使用される。プロセッサ118は、４つの書き込みデータ要求を生成してもよい。書き込みデータ要求のそれぞれで搬送されるターゲットデータは、４つのブロックの中の１つのブロックの有効容量に等しい。次に、プロセッサ118は、生成された４つの書き込みデータ要求をプライマリコントローラ220に送信し、プライマリコントローラ220は、生成された４つの書き込みデータ要求を４つのチャネルのblockに書き込む。この実現方式によれば、書き込みデータ要求は、フラッシュメモリ装置22のチャネルで並行して実行されてもよい。これにより、データを書き込む際の効率を改善する。更に、本発明のこの実施例では、複数の書き込みデータ要求の並行処理は、１つのチャネル上の複数の並行ユニットで実現されてもよい。
【００８４】
以下に、本発明の実施例に従ってデータをフラッシュメモリ装置に書き込む他の方法の手順を紹介する。この方法は、図１に示す記憶システム、図２に示すコントローラ11、並びに図３ａ及び図３ｂに示すフラッシュメモリ装置（例えば、SSD）に適用されてもよい。フラッシュメモリ装置はブロックを含み、ブロックは、少なくとも１つのページが損傷ページである複数のページを含む。図５に示すように、この方法は以下のステップを含む。
【００８５】
ステップS201：ステップS201は図４に示す実施例のステップS101と同じであり、ステップS101の説明に参照が行われてもよい。
【００８６】
ステップS202：ステップS202は図４に示す実施例のステップS102と同じであり、ステップS102の説明に参照が行われてもよい。
【００８７】
ステップS203：プロセッサ118は、複数の書き込みデータ要求を受信する。
【００８８】
プロセッサ118は、ホスト又は他のデバイスから複数の書き込みデータ要求を受信してもよい。書き込みデータ要求のそれぞれは、フラッシュメモリ装置22に書き込まれるべきデータ（略して、書き込まれるべきデータ）を搬送する。
【００８９】
ステップS203とステップS201又はステップS202との間に順序は存在せず、ステップS203はステップS201及びステップS202の前に実行されてもよく、ステップS201及びステップS202の後に実行されてもよく、ステップS201及びステップS202と同時に実行されてもよい点に留意すべきである。
【００９０】
ステップS204：プロセッサ118は、受信した複数の書き込みデータ要求をキャッシュ120に書き込む。
【００９１】
書き込みデータ要求のそれぞれが書き込まれるべきデータを搬送するため、書き込まれるべきデータもキャッシュ120に記憶される。
【００９２】
ステップS205：ステップS205は図４に示す実施例のステップS103と同じであり、ステップS103の説明に参照が行われてもよい。
【００９３】
ステップS206：プロセッサ118は、キャッシュ120に記憶された書き込まれるべきデータのサイズがブロックの有効容量に到達したか否かを決定する。キャッシュ120に記憶された書き込まれるべきデータのサイズがブロックの有効容量に到達した場合、ステップS207を実行する。キャッシュ120に記憶された書き込まれるべきデータのサイズがブロックの有効容量に到達していない場合、ステップS203を実行する。
【００９４】
予め設定された条件が満たされた場合、プロセッサ118は、複数の書き込みデータ要求で搬送されてキャッシュ120に記憶された書き込まれるべきデータのサイズがブロックの有効容量に到達したか否かを決定してもよい。ここでの予め設定された条件は、予め設定された期間が開始した時点（例えば、タイマーによるトリガー）でもよく、他のトリガー条件でもよく、ここでは限定されない。
【００９５】
複数の書き込みデータ要求で搬送されてキャッシュ120に記憶された書き込まれるべきデータのサイズがブロックの有効容量に到達していない場合、プロセッサ118は、キャッシュ120内の書き込みデータ要求を処理する代わりに、ある期間だけ一時的に待機してもよい。この期間の間に、プロセッサ118は、キャッシュ120に記憶された書き込まれるべきデータのサイズがブロックの有効容量に到達するまで、ホストから書き込みデータ要求を受信し続けてもよい。
【００９６】
ステップS207：プロセッサ118は、キャッシュ120から、複数の書き込みデータ要求で搬送されたターゲットデータを読み取る。
【００９７】
複数の書き込みデータ要求で搬送されてキャッシュ120に記憶された書き込まれるべきデータのサイズがブロックの有効容量に到達した場合、プロセッサ118は、キャッシュ120から、複数の書き込みデータ要求で搬送された書き込まれるべきデータを読み取ってもよい。複数の書き込みデータ要求で搬送されてキャッシュ120に記憶された書き込まれるべきデータのサイズがブロックの有効容量に到達した場合、この時点での複数の書き込みデータ要求で搬送されてキャッシュ120に記憶された書き込まれるべきデータが、図４に示す実施例のステップS104〜ステップS106におけるターゲットデータであることを認識し得る。
【００９８】
ステップS208：ステップS208は図４に示す実施例のステップS105と同じであり、ステップS105の説明に参照が行われてもよい。
【００９９】
ステップS209：ステップS209は図４に示す実施例のステップS106と同じであり、ステップS106の説明に参照が行われてもよい。
【０１００】
本発明のこの実施例では、フラッシュメモリ装置22は、ブロックの容量情報をコントローラ11に送信する。ブロックの容量情報は、ブロックの有効容量を取得するために使用される。コントローラ11は、ブロックの容量情報に従ってブロックの有効容量を取得し、サイズがブロックの有効容量と同じターゲットデータを読み取り、ターゲットデータをフラッシュメモリ装置22に送信してもよい。フラッシュメモリ装置22は、ターゲットデータをブロックに書き込む。本発明のこの実施例の実現方式によれば、ブロックが損傷ページを有する場合、ブロックに書き込まれたターゲットデータがデータのオーバーフローなしに最大限までブロックを満たすことが確保され得る。これにより、ブロック利用率を改善する。
【０１０１】
以下に、本発明の実施例に従ってデータをフラッシュメモリ装置に書き込む更に他の方法の手順を紹介する。この方法は、図１に示す記憶システム、図２に示すコントローラ11、並びに図３ａ及び図３ｂに示すフラッシュメモリ装置（例えば、SSD）に適用されてもよい。フラッシュメモリ装置はブロックを含み、ブロックは、少なくとも１つのページが損傷ページである複数のページを含む。図６に示すように、この方法は以下のステップを含む。
【０１０２】
ステップS301：ステップS301は図４に示す実施例のステップS101と同じであり、ステップS101の説明に参照が行われてもよい。
【０１０３】
ステップS302：ステップS302は図４に示す実施例のステップS102と同じであり、ステップS102の説明に参照が行われてもよい。
【０１０４】
ステップS303：ステップS303は図５に示す実施例のステップS203と同じであり、ステップS203の説明に参照が行われてもよい。
【０１０５】
ステップS304：ステップS304は図５に示す実施例のステップS204と同じであり、ステップS204の説明に参照が行われてもよい。
【０１０６】
ステップS305：ステップS305は図５に示す実施例のステップS205と同じであり、ステップS205の説明に参照が行われてもよい。
【０１０７】
ステップS306：プロセッサ118は、キャッシュ120に記憶された書き込まれるべきデータのサイズがブロックの有効容量より大きいことを決定する。
【０１０８】
予め設定された条件が満たされた場合、プロセッサ118は、複数の書き込みデータ要求で搬送されてキャッシュ120に記憶された書き込まれるべきデータのサイズがブロックの有効容量より大きいことを決定してもよい。ここでの予め設定された条件は、予め設定された期間になったこと（例えば、タイマーによるトリガー）でもよく、他のトリガー条件でもよく、ここでは限定されない。
【０１０９】
ステップS307：プロセッサ118は、キャッシュ120から書き込まれるべきデータの一部を読み取る。書き込まれるべきデータの一部のサイズは、ブロックの有効容量である。
【０１１０】
複数の書き込みデータ要求で搬送された書き込まれるべきデータのサイズがブロックの有効容量より大きい場合、プロセッサ118は、キャッシュ120から書き込まれるべきデータの一部を読み取ってもよい。書き込まれるべきデータの一部のサイズは、ブロックの有効容量である。この場合、書き込まれるべきデータの一部は、図４に示す実施例のステップS104〜ステップS106のターゲットデータである。
【０１１１】
ステップS308：ステップS308は図４に示す実施例のステップS105と同じであり、ステップS105の説明に参照が行われてもよい。
【０１１２】
ステップS309：ステップS309は図４に示す実施例のステップS106と同じであり、ステップS106の説明に参照が行われてもよい。
【０１１３】
本発明のこの実施例では、フラッシュメモリ装置22は、ブロックの容量情報をコントローラ11に送信する。ブロックの容量情報は、ブロックの有効容量を取得するために使用される。コントローラ11は、ブロックの容量情報に従ってブロックの有効容量を取得し、サイズがブロックの有効容量と同じターゲットデータを読み取り、ターゲットデータをフラッシュメモリ装置22に送信してもよい。フラッシュメモリ装置22は、ターゲットデータをブロックに書き込む。本発明のこの実施例の実現方式によれば、ブロックが損傷ページを有する場合、ブロックに書き込まれたターゲットデータがデータのオーバーフローなしに最大限までブロックを満たすことが確保され得る。これにより、ブロック利用率を改善する。
【０１１４】
更に、図４〜図６に示す前述の実施例のうちいずれか１つにおいて、ターゲットデータが書き込まれるブロック内の複数のpageのアドレスは、物理アドレスである。プライマリコントローラ220がターゲットデータをブロックに書き込んだ後に、プライマリコントローラ220は、ターゲットデータの論理ブロックアドレス（Logical  Block  Address、LBA）のセグメントと、物理アドレスとの間の対応関係を設定して記憶してもよい。これは、後にコントローラ11によりターゲットデータを読み取るために使用される。
【０１１５】
図４〜図６に示す実施例のいずれか１つから、ターゲットデータは、１つのblockに記憶されることが分かる。従って、その物理アドレスは、連続的な物理空間のセグメントである。ターゲットデータが後に他のデータに変更された場合、blockに記憶されたターゲットデータは、無効なデータになり、消去動作は、有効なデータをマイグレーションすることなくblockで直接的に実行されてもよい。これにより、ガベージコレクションの効率を改善する。
【０１１６】
更に、コントローラ11がターゲットデータに対応するLBAのセグメントでデフラグメントを実行する必要がある場合、デフラグメントの技術的原理に従って、コントローラ11は、データ・マイグレーション・コマンドをプライマリコントローラ220に送信してもよい。データ・マイグレーション・コマンドは、LBAを搬送する。データ・マイグレーション・コマンドを受信した後に、プライマリコントローラ220は、LBAと物理アドレスとの対応関係に従って、blockのpageからターゲットデータを取得し、ターゲットデータを他のblockにマイグレーションし、デフラグメント動作を完了してもよい。デフラグメント動作が完了した後で、blockはそれに従ってきれいに消去され、新たなデータを受信してもよい。ガベージコレクションは、blockで再び実行される必要はない。ガベージコレクションの効率は、図４〜図６に示す実施例のいずれか１つとデフラグメント動作とを組み合わせることにより更に改善され得ることが分かる。
【０１１７】
当業者は、本発明の各態様又は各態様の可能な実現方式がシステム、方法又はコンピュータ・プログラム・プロダクトとして具体的に実現されてもよいことを認識し得る。従って、本発明の各態様又は各態様の可能な実現方式は、ハードウェアのみの実施例、ソフトウェアのみの実施例（ファームウェア、常駐ソフトウェア等を含む）、又はソフトウェアとハードウェアとの組み合わせの実施例の形式を使用してもよい。これらは、ここでは一律に「回路」、「モジュール」又は「システム」と呼ばれる。更に、本発明の各態様又は各態様の可能な実現方式は、コンピュータ・プログラム・プロダクトの形式になってもよい。コンピュータ・プログラム・プロダクトは、コンピュータ読み取り可能な媒体に記憶されたコンピュータ読み取り可能なプログラムコードを示す。
【０１１８】
コンピュータ読み取り可能な媒体は、コンピュータ読み取り可能な信号媒体又はコンピュータ読み取り可能な記憶媒体でもよい。コンピュータ読み取り可能な記憶媒体は、ランダム・アクセス・メモリ（RAM）、読み取り専用メモリ（ROM）、消去可能プログラム可能読み取り専用メモリ（EPROM又はフラッシュメモリ）、光ファイバ及びコンパクトディスク読み取り専用メモリ（CD-ROM）のような、電子、磁気、光学、電磁気、赤外線若しくは半導体システム、デバイス若しくは装置、又はこれらのいずれか適切な組み合わせを含み、これらに限定されない。
【０１１９】
コンピュータのプロセッサは、コンピュータ読み取り可能な媒体に記憶されたコンピュータ読み取り可能なプログラムコードを読み取り、これにより、プロセッサは、フローチャートの各ステップ又はステップの組み合わせで指定された機能及び動作を実行することができ、ブロック図の各ブロック又はブロックの組み合わせで指定された機能及び動作を実現するように装置が生成される。
【０１２０】
全てのコンピュータ読み取り可能なプログラムコードは、ユーザコンピュータで実行されてもよく、いくつかがスタンドアローンのソフトウェアパッケージとしてユーザコンピュータで実行されてもよく、いくつかがリモートコンピュータで実行されつつ、いくつかがユーザのコンピュータで実行されてもよい。或いは、全てのコードがリモートコンピュータ又はサーバで実行されてもよい。また、或る別の実現対策では、フローチャートの各ステップ又はブロック図の各ブロックで指定された機能は、図示の順序で行われなくてもよい点に留意すべきである。例えば、関与する機能に依存する図面における２つの連続するステップ又は２つのブロックは、実際に実質的に同時に実行されてもよく、これらのブロックは場合によって逆の順序で実行されてもよい。
【０１２１】
当業者は、この明細書に開示された実施例に記載の例と組み合わせて、ユニット及びアルゴリズムのステップが電子ハードウェア又はコンピュータソフトウェアと電子ハードウェアとの組み合わせにより実現されてもよいことを認識し得る。機能がハードウェアにより実行されるかソフトウェアにより実行されるかは、技術的対策の特定の用途及び設計上の制約条件に依存する。当業者は、特定の用途毎に記載の機能を実現するために異なる方法を使用してもよいが、この実現は、本発明の範囲を超えるものとして考えられるべきではない。
【０１２２】
前述の説明は、本発明の単に特定の実現方式に過ぎず、本発明の保護範囲を限定することを意図するものではない。本発明に開示された技術的範囲内で当業者により容易に把握される如何なる変更又は置換も、本発明の保護範囲内に入るものとする。従って、本発明の保護範囲は、特許請求の範囲の保護範囲に従うものとする。
【図３ａ】
0006018725.tif 000002
【図１】
0006018725.tif 000003
【図２】
0006018725.tif 000004
【図３ｂ】
0006018725.tif 000005
【図４】
0006018725.tif 000006
【図５】
0006018725.tif 000007
【図６】
0006018725.tif 000008