(57)【要約】【課題】半導体記憶装置の信頼性、装置寿命、及び、性能を向上させる。【解決手段】実施形態の半導体記憶装置は、一括して無効化されることが期待されるデータの集合であるストリームデータを識別子に関連付け、複数のストリームデータのそれぞれを識別子により識別可能に送信するホストと通信可能である。また、第１の単位ごとにデータの書き込みが行われ、複数の第１の単位からなる第２の単位ごとにデータの消去が行われる不揮発性半導体メモリと、バッファと、コントローラと、を具備する。コントローラは、複数のストリームデータのうち優先度の高いストリームデータについては、第２の単位の１つに、単一の識別子に関連付けられるストリームデータを書き込み、複数のストリームデータのうち優先度の低いストリームデータについては、第２の単位の１つに、それぞれ異なる識別子に関連付けられる複数のストリームデータを書き込む。【選択図】図１３
2018088137.tif 000002
【特許請求の範囲】
【請求項１】
一括して無効化されることが期待されるデータの集合であるストリームデータを識別子に関連付け、複数の前記ストリームデータのそれぞれを前記識別子により識別可能に送信するホストと通信可能である半導体記憶装置であって、
第１の単位ごとにデータの書き込みが行われ、複数の前記第１の単位からなる第２の単位ごとにデータの消去が行われる不揮発性半導体メモリと、
前記ホストと前記不揮発性半導体メモリとの間でデータを一時的に格納するバッファと、
前記不揮発性半導体メモリへのデータの書き込みを制御するコントローラと、
を具備し、
前記コントローラは、
前記複数のストリームデータのうち優先度の高いストリームデータについては、
前記第２の単位の１つに、単一の識別子に関連付けられるストリームデータを書き込み、
前記複数のストリームデータのうち前記優先度の低いストリームデータについては、
前記第２の単位の１つに、それぞれ異なる識別子に関連付けられる複数のストリームデータを書き込む
半導体記憶装置。
【請求項２】
前記コントローラは、
前記バッファをｍ個（ｍは２以上の自然数）のスレッドに分けて管理し、
前記複数のストリームデータのうち前記優先度が第１位から第（ｍ−ｎ）位（ｎは１以上ｍ未満の自然数）までのストリームデータについては、
前記スレッドの１つに、単一の識別子に関連付けられるストリームデータを格納し、
前記スレッドの１つに格納された前記ストリームデータを、前記第２の単位の１つに書き込み、
前記複数のストリームデータのうち前記優先度が第（ｍ−ｎ＋１）位以下のストリームデータについては、
前記スレッドの１つに、それぞれ異なる識別子に関連付けられる複数のストリームデータを格納し、
前記スレッドの１つに格納された前記ストリームデータを、前記第２の単位の１つに書き込む
請求項１に記載の半導体記憶装置。
【請求項３】
前記ｎは１である請求項２に記載の半導体記憶装置。
【請求項４】
前記優先度は、前記ホストによって決定される
請求項１に記載の半導体記憶装置。
【請求項５】
前記優先度は、
前記ホストと前記半導体記憶装置との間における前記ストリームデータのスループットが大きい時に高く決定される
請求項４に記載の半導体記憶装置。
【請求項６】
前記優先度は、前記コントローラによって決定される
請求項１に記載の半導体記憶装置。
【請求項７】
前記優先度は、
前記ホストと前記半導体記憶装置との間における前記ストリームデータのスループットが大きい時に高く決定される
請求項６に記載の半導体記憶装置。
【請求項８】
前記スループットは、前記ホストによって決定される
請求項７に記載の半導体記憶装置。
【請求項９】
前記スループットは、前記コントローラによって決定される
請求項７に記載の半導体記憶装置。
【請求項１０】
前記コントローラはさらに、
ストリームデータ内に含まれる各データの記憶先を示す論理アドレスの連続性に応じて前記優先度を変更する
請求項１に記載の半導体記憶装置。
【請求項１１】
前記コントローラは、
前記論理アドレスが連続した累積数を記憶し、
前記累積数が第１の閾値未満であるストリームデータについては、
前記第２の単位の１つに、それぞれ異なる識別子に関連付けられる複数のストリームデータを書き込む
請求項１０に記載の半導体記憶装置。
【請求項１２】
前記コントローラは、
前記バッファを複数のスレッドに分けて管理し、
前記スレッドごとの前記スレッドと前記不揮発性半導体メモリとの間のストリームデータのスループットの、
前記複数のスレッドについての合計が最大となるように、
前記スレッドの１つにストリームデータを格納し、
前記スレッドの１つに格納された前記ストリームデータを、前記第２の単位の１つに書き込む
請求項１に記載の半導体記憶装置。
【請求項１３】
第１の単位ごとにデータの書き込みが行われ、複数の前記第１の単位からなる第２の単位ごとにデータの消去が行われる不揮発性半導体メモリと、
ホストから受信したコマンドが指定するアドレス範囲に応じて前記不揮発性半導体メモリへのデータの書き込みを制御するコントローラと、
を具備し、
前記コントローラは、
複数のコマンドがそれぞれ指定する前記アドレス範囲が連続した累積数を記憶し、
前記累積数が第１の閾値以上となる連続コマンド群に属するコマンドを前記ホストから受信したことに応じ、
前記連続コマンド群に属するコマンドに応じて前記ホストから送信されるデータを、前記連続コマンド群ごとに識別子に関連付け、
前記識別子に関連付けられたデータのうち優先度の高いデータについては、
前記第２の単位の１つに、単一の識別子に関連付けられるデータを書き込み、
前記識別子に関連付けられたデータのうち前記優先度の低いデータについては、
前記第２の単位の１つに、それぞれ異なる識別子に関連付けられる複数のデータを書き込む
半導体記憶装置。
【請求項１４】
前記コントローラは、
前記第２の単位の１つに、前記連続コマンド群に属さないコマンドに応じて前記ホストから送信される複数のデータを書き込む
請求項１３に記載の半導体記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、半導体記憶装置に関する。
【背景技術】
【０００２】
不揮発性半導体メモリを有する半導体記憶装置においては、信頼性維持のためにライト回数やイレース回数を低減することと、リードライト性能を高くすることの両立が求められる。また、メモリコントローラの回路規模の増大を防ぐことが、コストや消費電力の観点からも重要である。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許出願公開第２０１５／０２６１４７３号明細書
【特許文献２】米国特許出願公開第２０１５／００７４３３７号明細書
【特許文献３】米国特許開第９３３５９５０号明細書
【特許文献４】米国特許開第９１５８６８７号明細書
【非特許文献】
【０００４】
【非特許文献１】INCITS Technical Committee T10、”SCSI Block Command -4 (Rev.11)”、[online]、２０１６年６月３０日、インターネット、<URL: http://www.t10.org/drafts.htm#SBC_Family>
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明が解決しようとする課題は、半導体記憶装置の信頼性、装置寿命、及び、性能を向上させることにある。
【課題を解決するための手段】
【０００６】
上記課題を達成するために、実施形態の半導体記憶装置は、一括して無効化されることが期待されるデータの集合であるストリームデータを識別子に関連付け、複数のストリームデータのそれぞれを識別子により識別可能に送信するホストと通信可能である。また、第１の単位ごとにデータの書き込みが行われ、複数の第１の単位からなる第２の単位ごとにデータの消去が行われる不揮発性半導体メモリと、ホストと不揮発性半導体メモリとの間でデータを一時的に格納するバッファと、不揮発性半導体メモリへのデータの書き込みを制御するコントローラと、を具備する。コントローラは、複数のストリームデータのうち優先度の高いストリームデータについては、第２の単位の１つに、単一の識別子に関連付けられるストリームデータを書き込み、複数のストリームデータのうち優先度の低いストリームデータについては、第２の単位の１つに、それぞれ異なる識別子に関連付けられる複数のストリームデータを書き込む。
【図面の簡単な説明】
【０００７】
【図１】第１の実施形態の半導体記憶装置の構成を説明するブロック図である。
【図２】第１の実施形態の物理ページ及び物理ブロックの構成を説明する図である。
【図３】第１の実施形態の論理ページ及び論理ブロックの構成を説明する図である。
【図４】第１の実施形態のスレッドを説明する図である。
【図５】ＳＣＳＩ規格のＳＴＲＥＡＭ  ＣＯＮＴＲＯＬコマンドを説明する図である。
【図６】ＳＣＳＩ規格のＷＲＩＴＥ  ＳＴＲＥＡＭコマンドを説明する図である。
【図７】ＳＡＳ規格でストリームデータを転送する場合のプロトコルを説明する図である。
【図８】ＳＡＳ規格で複数のストリームデータを転送する場合のプロトコルを説明する図である。
【図９】第１の実施形態の論理ブロックへのストリームデータのライトの第１の例を説明する図である。
【図１０】第１の実施形態の論理ブロックへのストリームデータのライトの第２の例を説明する図である。
【図１１】第１の実施形態の物理論理ブロックへのストリームデータのライトの第３の例を説明する図である。
【図１２】第１の実施形態のＷＡＦを説明する図である。
【図１３】第１の実施形態のスレッド割り当ての例を説明する図である。
【図１４】比較例のスレッド割り当ての例を説明する図である。
【図１５】第１の実施形態のストリーム制御部の構成を説明する図である。
【図１６】第１の実施形態のストリーム／スレッド変換部の構成を説明する図である。
【図１７】第１の実施形態のストリーム／スレッド変換テーブルに登録される情報の一例を説明する図である。
【図１８】第１の実施形態のスレッド決定部による動作を説明するフローチャートである。
【図１９】第１の実施形態における、優先度の決定方法について説明する図である。
【図２０】ＳＣＳＩ規格のＷＲＩＴＥ  ＳＴＲＥＡＭコマンドが複数発行される時の状態を説明する図である。
【図２１】第２の実施形態の論理ブロックへのストリームデータのライトの例を説明する図である。
【図２２】比較例のスレッド割り当ての例を説明する図である。
【図２３】第２の実施形態のスレッド割り当ての第１の例を説明する図である。
【図２４】第２の実施形態のスレッド割り当ての第２の例を説明する図である。
【図２５】第２の実施形態の半導体記憶装置がシーケンシャル性を判定するためのアルゴリズムを説明する模式図である。
【図２６】第２の実施形態のロングシーケンシャル判定テーブルの構成を説明する図である。
【図２７】第２の実施形態のロングシーケンシャル判定テーブルの更新手順を説明するフローチャートである。
【図２８】第２の実施形態のストリーム／スレッド変換テーブルの構成を説明する図である。
【図２９】第３の実施形態のロングシーケンシャル判定テーブルの構成を説明する図である。
【図３０】第４の実施形態のスレッド割り当ての第１の例を説明する図である。
【図３１】比較例のスレッド割り当ての第１の例を説明する図である。
【図３２】第４の実施形態のスレッド割り当ての第２の例を説明する図である。
【図３３】比較例のスレッド割り当ての第２の例を説明する図である。
【図３４】第４の実施形態のスレッド割り当てのアルゴリズムを説明する図である。
【図３５】第４の実施形態のスレッド割り当てのアルゴリズムを説明する図である。
【発明を実施するための形態】
【０００８】
以下、実施形態の半導体記憶装置を、図面を参照して説明する。なお、以下の説明において、同一の機能及び構成を有する構成要素については、共通する参照符号を付す。
【０００９】
［第１の実施形態］
図１は、第１の実施形態の半導体記憶装置１の構成を説明するブロック図である。
【００１０】
半導体記憶装置１は、メモリコントローラ１０と、不揮発性半導体メモリ２０と、を含む。以下の説明においては、不揮発性半導体メモリ２０からのデータのリードに必要な機能ブロックの説明は省略してある。
【００１１】
メモリコントローラ１０は、ホスト２と通信し半導体記憶装置１全体の動作を制御する。メモリコントローラ１０は、例えばＳｏＣ（Ｓｙｓｔｅｍ  ｏｎ  ａ  Ｃｈｉｐ）として構成される半導体集積回路である。
【００１２】
本実施形態の説明では、ホスト２はＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）規格のインターフェースをサポートするコンピュータであるが、その他の規格、例えばＳＡＴＡ（Ｓｅｒｉａｌ  ＡＴＡ）規格やＮＶＭｅ（ＮＶＭ  Ｅｘｐｒｅｓｓ）（登録商標）規格のインターフェースをサポートするコンピュータであってもよい。半導体記憶装置１は、複数のホスト２と通信可能なように構成されてもよい。
【００１３】
不揮発性半導体メモリ２０は、データを不揮発的に記憶する。本実施形態の不揮発性半導体メモリ２０はＮＡＮＤ型フラッシュメモリであるが、３次元構造フラッシュメモリ、ＮＯＲ型フラッシュメモリ、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）など他の種類の不揮発性半導体メモリでもよい。
【００１４】
以下の説明においては、不揮発性半導体メモリ２０をＮＡＮＤ型フラッシュメモリ２０と表記することがある。また、本実施形態の半導体記憶装置１は１６チャネル（Ｃｈ）のＮＡＮＤ型フラッシュメモリ２０を有する。メモリコントローラ１０は、各チャネルに接続されたＮＡＮＤ型フラッシュメモリ２０を並列に制御可能である。１つのチャネルに複数のＮＡＮＤ型フラッシュメモリ２０が接続されてもよい。以下では各チャネルに接続されているＮＡＮＤ型フラッシュメモリ２０をＮＡＮＤ型フラッシュメモリ群Ｃｈ０〜Ｃｈ１５と表記する。なお、チャネルの数は１６より多くても少なくてもよい。
【００１５】
メモリコントローラ１０は、ホストインターフェース（ＩＦ）制御部１００と、バッファ管理部２００と、ＮＡＮＤ管理部３００と、論物変換テーブル４００と、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）５００と、を含む。
【００１６】
ホストＩＦ制御部１００は、ホスト２から受信したコマンドの解釈や実行などを行う。ホストＩＦ制御部１００は、受信ＦＩＦＯ１１０と、コマンドキュー１２０と、を含む。
【００１７】
受信ＦＩＦＯ１１０は、ホスト２より受信するライトデータやコマンドを一時的に格納する。コマンドキュー１２０は、ホスト２より受信するコマンドをキューイングする。
【００１８】
バッファ管理部２００は、バッファ２１０の管理などを行う。バッファ管理部２００は、バッファ２１０と、ストリーム制御部２２０と、ストリーム／スレッド変換部２３０と、を含む。バッファ２１０は、ホスト２より受信したライトデータを一時的に格納する。本実施形態のバッファ２１０はＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）からなるメモリであるが、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）など他の種類のメモリを採用してもよい。ストリーム制御部２２０は、後述するストリームデータのライト制御を行う。ストリーム／スレッド変換部２３０は、後述するストリームとスレッドとの変換を行う。
【００１９】
ＮＡＮＤ管理部３００は、ＮＡＮＤ型フラッシュメモリ２０へのデータのライトを管理する。ＮＡＮＤ管理部３００は、ＮＡＮＤコントローラ３１０と、バッファ読み出し制御部３２０と、ブロック管理部３３０と、を含む。ＮＡＮＤコントローラ３１０は、ＮＡＮＤ型フラッシュメモリ群Ｃｈ０〜Ｃｈ１５のそれぞれに接続される。ＮＡＮＤコントローラ３１０は、ＮＡＮＤ型フラッシュメモリ２０へのデータのライト・リード・イレース等の動作を制御する。以下、ＮＡＮＤコントローラ３１０をＮＡＮＤコントローラＣｈ０〜Ｃｈ１５と表記することがある。バッファ読み出し制御部３２０は、バッファ２１０から読み出したデータを各ＮＡＮＤコントローラ３１０に転送する。ブロック管理部３３０は、後述するスレッドごとに、データの書き込み先となる論理ブロックを供給する。
【００２０】
論物変換テーブル４００は、ホスト２からのコマンドで指定される論理アドレスとＮＡＮＤ型フラッシュメモリ２０の物理アドレスとの変換を行う。ＣＰＵ５００は、ＦＷ（Ｆｉｒｍｗａｒｅ）に基づき半導体記憶装置１全体の制御を行う。
【００２１】
なお、バッファ２１０及びＣＰＵ５００はメモリコントローラ１０に内蔵せず、別個の半導体集積回路としてもよい。また、以下の説明においてＦＷにより実行される機能の一部、又は、全部は専用のＨＷ（Ｈａｒｄｗａｒｅ）によっても実行可能であり、ＨＷにより実行される機能の一部、又は、全部をＦＷによって実行することも可能である。
【００２２】
半導体記憶装置１の特性を評価する指標としてＷＡＦ（Ｗｒｉｔｅ  Ａｍｐｌｉｆｉｃａｔｉｏｎ  Ｆａｃｔｏｒ）がある。ＷＡＦは、以下の式により求められる。
【００２３】
ＷＡＦ＝（ＮＡＮＤ型フラッシュメモリ２０へライトされるデータの総量）／（ホスト２から受信したライトデータの総量）  ・・・  （１）
ＷＡＦは、ＮＡＮＤ型フラッシュメモリ２０へライトされるユーザデータ量、管理データ量、冗長データ量、ガベージコレクション（コンパクション）の頻度、などの要素により変動する。ＮＡＮＤ型フラッシュメモリ２０は、データのライトやイレースを行うと記憶素子が劣化する。従って、ライト回数、イレース回数はなるべく少ないほうが望ましく、ＷＡＦも、低いほうが望ましい。
【００２４】
次に、図２ａ及び図２ｂを参照して、本実施形態のＮＡＮＤ型フラッシュメモリ２０の物理ページ６００及び物理ブロック６１０の構成を説明する。
【００２５】
図２ａに示すように、ＮＡＮＤ型フラッシュメモリ２０に対するデータのリード・ライトにおける最小管理単位はクラスタ６２０と呼ばれる。本実施形態ではクラスタ６２０の大きさは４ｋＢである。また、ＮＡＮＤ型フラッシュメモリ２０の内部で一度にデータのリード・ライトが可能な最小の回路構成の単位（第１の単位）は物理ページ６００と呼ばれる。本実施形態では物理ページ６００の大きさは１６クラスタ（４ｋＢ×１６クラスタ＝６４ｋＢ）である。
【００２６】
また、図２ｂに示すように、ＮＡＮＤ型フラッシュメモリ２０のデータのイレースが可能な最小の回路構成の単位（第２の単位）は物理ブロック６１０と呼ばれる。本実施形態では物理ブロック６１０の大きさは２５６クラスタ、すなわち１６物理ページ（６４ｋＢ×１６物理ページ＝１０２４ｋＢ）である。なお、これら各単位のサイズは一例であり、これらの値に限定されるものではない。
【００２７】
次に、図３ａ及び図３ｂを参照して、論理ページ７００及び論理ブロック７１０の構成を説明する。
【００２８】
本実施形態では、図３ａに示すように、並列動作が可能なＮＡＮＤ型フラッシュメモリＣｈ０〜Ｃｈ１５それぞれの１つの物理ページ６００を含む集合を論理ページ７００とする。コントローラ１０は、論理ページ７００を論理的な単位として、ＮＡＮＤ型フラッシュメモリ２０へのデータのライトを制御する。コントローラ１０は、クラスタ６２０を論理的な単位として、ＮＡＮＤ型フラッシュメモリ２０からのデータのリードを制御する。また、図３ｂに示すように、コントローラ１０は１６個の論理ページ７００のデータである論理ブロック７１０を論理的な単位として、ＮＡＮＤ型フラッシュメモリ２０のデータのイレースを制御する。すなわち、コントローラ１０はＮＡＮＤ型フラッシュメモリ２０のデータのイレースの最小単位である物理ブロック６１０ごとではなく、論理ブロック７１０ごとにイレース処理を行う。
【００２９】
次に、図４を参照して、スレッド８００について説明する。
【００３０】
本実施形態のメモリコントローラ１０は、ライトデータがＮＡＮＤ型フラッシュメモリ２０にライトされるまでに通過する経路を、スレッド８００と呼ばれる領域で管理する。スレッド８００は、少なくともバッファ２１０の一部の領域を含む。スレッド８００には、エラー訂正符号の生成回路などが接続されていてもよい。本実施形態では、スレッドの最大数ｍ（ｍは自然数）は８である。スレッドの最大数は８より多くても少なくてもよい。スレッドの最大数が増えるとメモリコントローラ１０の回路規模も増大する。従って、スレッドの最大数を過度に増やすことは好ましくない。
【００３１】
ホストＩＦ制御部１００より受信したライトデータは、各スレッド８００のバッファ２１０に格納される。各スレッド８００のバッファ２１０に格納されたライトデータは、バッファ読み出し制御部３２０が読み出し、ＮＡＮＤコントローラ３１０に転送する。バッファ読み出し制御部３２０は、複数のスレッド８００のバッファ２１０に格納されたライトデータが、１つの論理ブロック７１０にライトされないように各ライトデータをＮＡＮＤコントローラ３１０に転送する。すなわち、バッファ管理部２１０は、１つの論理ブロック７１０にライトされるライトデータを、１つのスレッド８００のバッファ２１０に格納する。
【００３２】
また、ＣＰＵ５００は、ＦＷの制御に基づいて、スレッド８００ごとにガベージコレクションを行う。すなわち、ＣＰＵ５００は、あるスレッド８００に属する論理ブロック７１０をガベージコレクション元ブロックとする場合、当該スレッド８００に属する論理ブロック７１０からガベージコレクション先ブロックを選択する。ガベージコレクション元ブロックであった論理ブロック７１０は、データがイレースされた後、当該スレッド８００のデータのライトに用いられる。
【００３３】
以上、本実施形態の半導体記憶装置１の構成について説明した。以下では、ストリームデータのライトの概要について説明する。
【００３４】
近年では不揮発性半導体メモリのイレース回数を低減するために、同一のライフサイクルを有することが期待されるデータの集合、すなわちホストが無効化する時には一括して無効化することが期待されるデータの集合（以下、ストリームデータと呼ぶ）を、不揮発性半導体メモリの同一イレース単位内にまとめてライトする技術が導入されている。
【００３５】
ここで、ホストがあるデータを無効化する時には、ホストは、（ａ）当該データと同一の論理アドレスを指定するライトコマンドの発行及びライトデータの送信、（ｂ）当該データに対する無効化を指示するコマンド（例えばＳＣＳＩ規格で規定されているＵＮＭＡＰコマンド、ＡＴＡ規格で規定されているＴＲＩＭコマンド）の発行、（ｃ）記憶装置の全領域の初期化を指示するコマンド（例えばＳＣＳＩ規格で規定されているＦＯＲＭＡＴ  ＵＮＩＴコマンド）の発行、などを行いうる。
【００３６】
図５及び図６は、ＳＡＳ規格を含むＳＣＳＩ規格においてストリームデータのライトに使用されるコマンドの例を説明する図である。
【００３７】
図５に示すＳＴＲＥＡＭ  ＣＯＮＴＲＯＬコマンドは、各ストリームデータを識別するための識別子（ストリームＩＤ）の割り当てを、ホスト２が半導体記憶装置１に要求するコマンドである。また、ＳＴＲＥＡＭ  ＣＯＮＴＲＯＬコマンドは、不要になったストリームＩＤの解放を、ホスト２が半導体記憶装置１に要求するためにも使用される。
【００３８】
ＳＴＲ＿ＣＴＬフィールドは、ＳＴＲＥＡＭ  ＣＯＮＴＲＯＬコマンドが、ストリームＩＤの割り当て（ＯＰＥＮ）又はストリームＩＤの解放（ＣＬＯＳＥ）のどちらを要求しているのかを示す。ＳＴＲ＿ＣＴＬフィールドが０１ｂの時は、割り当て要求（ＯＰＥＮ）である。この時は、ＳＴＲ＿ＩＤフィールドは任意の値でよい。一方、ＳＴＲ＿ＣＴＬフィールドが１０ｂの時は、解放要求（ＣＬＯＳＥ）である。解放すべきストリームＩＤは、ＳＴＲ＿ＩＤフィールドで指定される。以下ではＳＴＲ＿ＣＴＬフィールドが０１ｂであるＳＴＲＥＡＭ  ＣＯＮＴＲＯＬコマンドをＳＴＲＥＡＭ  ＣＯＮＴＲＯＬ（ＯＰＥＮ）コマンドと表記し、ＳＴＲ＿ＣＴＬフィールドが１０ｂであるＳＴＲＥＡＭ  ＣＯＮＴＲＯＬコマンドをＳＴＲＥＡＭ  ＣＯＮＴＲＯＬ（ＣＬＯＳＥ）コマンドと表記する。
【００３９】
図６に示すＷＲＩＴＥ  ＳＴＲＥＡＭコマンドは、ストリームデータのライトに使用されるコマンドである。ホスト２はＳＴＲ＿ＩＤフィールドに、ＳＴＲＥＡＭ  ＣＯＮＴＲＯＬ（ＯＰＥＮ）コマンドに応じて半導体記憶装置１が割り当てたストリームＩＤを指定して、半導体記憶装置１にコマンドを発行する。
【００４０】
次に、図７を参照して、ＳＡＳ規格においてストリームデータを転送する場合のプロトコルの一例を説明する。なお、説明を簡略化するため、ＸＦＥＲ＿ＲＤＹフレームやＲＥＳＰＯＮＳＥフレーム、ＤＡＴＡフレーム等、ＳＡＳ規格においてコマンド実行に必要なフレームについての説明は省略してある。
【００４１】
まず、ホスト２がＳＴＲＥＡＭ  ＣＯＮＴＲＯＬ（ＯＰＥＮ）コマンドを発行し、ストリームＩＤの割り当てを要求する。半導体記憶装置１はバッファ２１０の空きスペースを確保する等の処理を行った後、ストリームＩＤ＝１を割り当てたことをホスト２に通知する。同様に、半導体記憶装置１がストリームＩＤ＝２、３を割り当てたことが、ホスト２に通知されている。
【００４２】
ホスト２は、割り当てられたストリームＩＤ＝１、２、３を使ってＷＲＩＴＥ  ＳＴＲＥＡＭコマンドを発行し、ストリームデータの転送を行う。ホスト２は各ストリームデータのライフサイクルを把握している。ホスト２は異なるライフサイクルのストリームデータを、同一のストリームＩＤを用いて転送することはしない。例えば、ストリームＩＤ＝１のＷＲＩＴＥ  ＳＴＲＥＡＭコマンドによって転送されたストリームデータは、ホスト２が無効化する時にはそのすべてを一括して無効化することが期待される。
【００４３】
ストリームデータの転送が完了すると、ホスト２はＳＴＲＥＡＭ  ＣＯＮＴＲＯＬ（ＣＬＯＳＥ）コマンドを発行し、不要になったストリームＩＤ＝１、２、３の解放を要求する。
【００４４】
なお、上記以外のプロトコルによってストリームデータを転送してもよい。例えば、不要になったストリームＩＤが解放されないプロトコルであってもよい。
【００４５】
ＳＡＳ規格においてはコマンドをキューイングして実行することが可能である。キューイングの一例を図８に示す。図８では、ストリームＩＤ＝１、２、３のストリームデータの転送が行われ、それぞれの転送量は３ＤＡＴＡフレーム分である。この時、ストリームＩＤ＝１のストリームデータの転送がすべて（３ＤＡＴＡフレーム分）完了する前、例えばストリームＩＤ＝１の最初の１ＤＡＴＡフレームのみの転送が完了した後、ストリームＩＤ＝２やストリームＩＤ＝３のストリームデータを転送することが可能である。
【００４６】
以上、ストリームデータのライトの概要について説明した。以下では、本実施形態の半導体記憶装置１が、ストリームデータをどのようにＮＡＮＤ型フラッシュメモリ２０にライトするのかについて説明する。
【００４７】
図９ａは、１つの論理ブロック７１０に、同一のストリームＩＤを有するストリームデータがライトされた状態を説明する図である。ある論理ブロック７１０（論理ブロック＃１とする）に、ストリームＩＤ＝１のストリームデータがライトされている。
【００４８】
図９ｂは、図９ａの状態で、ホスト２がストリームＩＤ＝１のストリームデータを無効化した時の状態を説明する図である。上述したように、同一のストリームＩＤを有するストリームデータは、ホスト２によって一括して無効化されることが期待される。ストリームＩＤ＝１のストリームデータの無効化により、論理ブロック＃１にライトされているデータはすべて無効化された。この状態で論理ブロック＃１を消去済み論理ブロックとするには、論理ブロック＃１がイレースされればよい。
【００４９】
図１０ａは、１つの論理ブロック７１０に、２つのストリームＩＤを有するストリームデータがライトされた状態を説明する図である。ある論理ブロック７１０（論理ブロック＃２とする）に、ストリームＩＤ＝１のストリームデータと、ストリームＩＤ＝２のストリームデータがライトされている。
【００５０】
図１０ｂは、図１０ａの状態で、ホスト２がストリームＩＤ＝１のストリームデータを無効化した時の状態を説明する図である。ストリームＩＤ＝１のストリームデータの無効化により、論理ブロック＃２にライトされているデータのうち、ストリームＩＤ＝１のストリームデータは無効化された。しかしながら、ストリームＩＤ＝２のストリームデータは無効化されていない。この状態で論理ブロック＃２を消去済み論理ブロックとするには、論理ブロック＃２にライトされているデータのうち、まだ有効であるストリームＩＤ＝２のストリームデータを別な論理ブロック７１０（例えば、図示しない論理ブロック＃３）にライトした後（すなわちガベージコレクションをした後）に、論理ブロック＃２がイレースされなければならない。
【００５１】
図１０ａのようにストリームデータをＮＡＮＤ型フラッシュメモリ２０にライトすると、図９ａの場合と比べ、消去済み論理ブロックを得るために必要な、ＮＡＮＤ型フラッシュメモリ２０へライトされるデータの総量が増加してしまう。すなわち、ＷＡＦ（Ｗｒｉｔｅ  Ａｍｐｌｉｆｉｃａｔｉｏｎ  Ｆａｃｔｏｒ）が増加してしまう。
【００５２】
図１１ａは、１つの論理ブロック７１０に、３つのストリームＩＤを有するストリームデータがライトされた状態を説明する図である。ある論理ブロック７１０（論理ブロック＃４とする）に、ストリームＩＤ＝１のストリームデータと、ストリームＩＤ＝２のストリームデータと、ストリームＩＤ＝３のストリームデータがライトされている。
【００５３】
図１１ｂは、図１１ａの状態で、ホスト２がストリームＩＤ＝１のストリームデータを無効化した時の状態を説明する図である。ストリームＩＤ＝１のストリームデータの無効化により、論理ブロック＃４にライトされているデータのうち、ストリームＩＤ＝１のストリームデータは無効化された。しかしながら、ストリームＩＤ＝２のストリームデータとストリームＩＤ＝３のストリームデータは無効化されていない。この状態で論理ブロック＃４を消去済み論理ブロックとするには、論理ブロック＃４にライトされているデータのうち、まだ有効であるストリームＩＤ＝２のストリームデータとストリームＩＤ＝３のストリームデータを別な論理ブロック７１０（例えば、論理ブロック＃５）にライトした後（すなわちガベージコレクションをした後）に、論理ブロック＃４がイレースされなければならない。
【００５４】
図１１ｃは、上記したように、ストリームＩＤ＝２のストリームデータとストリームＩＤ＝３のストリームデータが、論理ブロック＃５にライトされた後の状態を説明する図である。
【００５５】
図１１ｄは、図１１ｃの状態で、ホスト２がストリームＩＤ＝２のストリームデータを無効化した時の状態を説明する図である。ストリームＩＤ＝２のストリームデータの無効化により、論理ブロック＃５にライトされているデータのうち、ストリームＩＤ＝２のストリームデータは無効化された。しかしながら、ストリームＩＤ＝３のストリームデータは無効化されていない。この状態で論理ブロック＃５を消去済み論理ブロックとするには、論理ブロック＃５にライトされているデータのうち、まだ有効であるストリームＩＤ＝３のストリームデータを別な論理ブロック７１０（例えば、図示しない論理ブロック＃６）にライトした後（すなわちガベージコレクションをした後）に、論理ブロック＃５がイレースされなければならない。
【００５６】
図１１ａのようにストリームデータをＮＡＮＤ型フラッシュメモリ２０にライトし、図１１ｂの状態から消去済み論理ブロックを得て、さらに図１１ｄの状態から消去済み論理ブロックを得ようとすると、図１０ａの場合と比べ、消去済み論理ブロックを得るために必要な、ＮＡＮＤ型フラッシュメモリ２０へライトされるデータの総量が増加してしまう。すなわち、ＷＡＦが増加してしまう。
【００５７】
以上説明したように、１つの論理ブロック７１０に複数のストリームＩＤを有するストリームデータがライトされると、ＷＡＦが増加する。１つの論理ブロック７１０にライトされるストリームデータのストリームＩＤの数の増加とともにＷＡＦも増加する。
【００５８】
このことを、図１２ａ及び図１２ｂを参照して説明する。１つの論理ブロック７１０に１つのストリームＩＤを有するストリームデータのみがライトされた場合、当該物論理ブロック７１０はガベージコレクションをせずにフリー論理ブロックにすることができるので、ＷＡＦは１である。１つの論理ブロック７１０に複数のストリームＩＤを有するストリームデータがライトされた場合、上述のように当該論理ブロック７１０をフリー論理ブロックにするにはガベージコレクションをしなければならない。従って、ＷＡＦは増加する。
【００５９】
図１２ａに示すように、ＷＡＦは１つの論理ブロック７１０にライトされるストリームデータのストリームＩＤの数の増加とともに増加し、Ｒａｎｄｏｍ  ＷＡＦに近づいてゆく。ここでＲａｎｄｏｍ  ＷＡＦとは、完全にランダムなデータ、すなわち無効化される時刻がすべて異なるデータ、が１つの論理ブロック７１０にライトされたと仮定した時のＷＡＦである。
【００６０】
なお、１つの論理ブロック７１０に複数のストリームＩＤを有するストリームデータがライトされる場合のＷＡＦの絶対値は、表記容量（Ｕｓｅｒ  Ｃａｐａｃｉｔｙ）に対する余裕容量（Ｏｖｅｒｐｒｏｖｉｓｉｏｎｉｎｇ  Ｃａｐａｃｉｔｙ）の割合（ＯＰ率）によって変化する。表記容量とは、ホスト２が指定可能なアドレス範囲に対応するメモリ容量である。余裕容量とは、表記容量と、ＮＡＮＤ型フラッシュメモリ２０の実際のメモリ容量である実装容量（Ｐｈｙｓｉｃａｌ  Ｃａｐａｃｉｔｙ）との差である。
【００６１】
図１２ｂでは、縦軸にＷＡＦ、横軸にＯＰ率を示している。図１２ｂに示すように、同じＯＰ率であっても、１つの論理ブロック７１０にライトされるストリームＩＤの数が増加すると、ＷＡＦは増加する。また、１つの論理ブロック７１０にライトされるストリームＩＤの数が同じである場合、ＯＰ率が増加すると、ＷＡＦは低減する。例えば、ＯＰ率が０．１である場合、１つの論理ブロック７１０に２つのストリームＩＤを有するストリームデータがライトされるとＷＡＦは約３．２であり、１つの論理ブロック７１０に４つのストリームＩＤを有するストリームデータがライトされるとＷＡＦは約４．３である。なお、上述したように、１つの論理ブロック７１０に１つのストリームＩＤを有するストリームデータのみがライトされる場合は、ＯＰ率によらずＷＡＦは１である。
【００６２】
本実施形態では、スレッド８００ごとのＷＡＦ（以下、ローカルＷＡＦと称する）を以下の式によって定義する。
【００６３】
ローカルＷＡＦ＝（ホスト２から受信したあるスレッド８００へのライトデータの総量＋ガベージコレクションによる当該スレッド８００へのライト総量）／（ホスト２から受信した当該スレッド８００へのライトデータの総量）  ・・・  （２）
また、半導体記憶装置１の全体のＷＡＦ（以下、装置ＷＡＦと称する）は、ローカルＷＡＦを用いて、以下ように表される。
【００６４】
装置ＷＡＦ  ＝  Σβｉ×ローカルＷＡＦｉ  ・・・  （３）
ここで、ｉはスレッド８００の番号（本実施形態においてはｉ＝１〜８である）、ローカルＷＡＦｉはスレッド＃ｉのローカルＷＡＦ、βｉはスレッド８００ごとの係数であり、以下のように表される。
【００６５】
βｉ  ＝（ホスト２から受信し、スレッド＃ｉを経由してＮＡＮＤ型フラッシュメモリ２０へライトされるライトデータのスループット）／（ホスト２から受信し、ＮＡＮＤ型フラッシュメモリ２０へライトされる全ライトデータのスループット）  ・・・  （４）
スループットと、単位時間当たりにＮＡＮＤ型フラッシュメモリ２０へライトされるライトデータの総量とは比例するからである。また、ここでのスループットは、ホスト２と半導体記憶装置１の間のデータ転送のスループットのことである。以下ではこのスループットを、ホストスループットと称する。
【００６６】
次に、図１３を参照して、本実施形態のストリーム／スレッド変換部２３０によるスレッド８００の割り当ての例を説明する。ここでは説明を簡略化するため、半導体記憶装置１は最大４つのスレッド８００を有するものとする。１つの論理ブロック７１０に２つのストリームＩＤを有するストリームデータがライトされた時のＷＡＦは、図１２ｂで説明したように、３．２であるとする。１つの論理ブロック７１０に１つのストリームＩＤを有するストリームデータのみがライトされた時のＷＡＦは、前述したように、１であるとする。
【００６７】
ホスト２からは、ストリームＩＤ＝１〜５の５つのストリームデータが送信される。各ストリームデータのホストスループットは、ストリームＩＤ＝１が１２００ＭＢ／ｓ、ストリームＩＤ＝２が１１００ＭＢ／ｓ、ストリームＩＤ＝３が１０００ＭＢ／ｓ、ストリームＩＤ＝４が５００ＭＢ／ｓ、ストリームＩＤ＝５が４００ＭＢ／ｓである。ホストスループットの算出方法については後述する。
【００６８】
ストリーム／スレッド変換部２３０は、ストリームＩＤ＝１〜５の５つのストリームデータを、スレッド＃１〜スレッド＃４の４つのスレッド８００のバッファ２１０に格納する。以下ではこのことを、例えば、ストリームＩＤ＝１をスレッド＃１に割り当てると表現する。前述のとおり、スレッドの最大数を過度に増やすことは好ましくない。本実施形態においては、ストリームＩＤ数がスレッドの最大数より多い時、以下に説明するようなスレッドの割り当てを行う。
【００６９】
ストリーム／スレッド変換部２３０は、ホストスループットの高いストリームＩＤについては、優先的にスレッドを割り当てる。すなわち、ストリームＩＤ＝１、２、３については、それぞれをスレッド＃１、スレッド＃２、スレッド＃３に割り当てる。また、ホストスループットの低いストリームＩＤ＝４、５についてはスレッド＃４に混在させて割り当てる。
【００７０】
前述のように、１つの論理ブロック７１０に１つのストリームＩＤを有するストリームデータがライトされた時のＷＡＦは１である。従って、スレッド＃１、スレッド＃２、スレッド＃３のローカルＷＡＦは１である。
【００７１】
また、βｉは式（４）により、
β１＝１２００／（１２００＋１１００＋１０００＋５００＋４００）＝０．２８６
β２＝１１００／（１２００＋１１００＋１０００＋５００＋４００）＝０．２６２
β３＝１０００／（１２００＋１１００＋１０００＋５００＋４００）＝０．２３８
である。
【００７２】
一方で、１つの論理ブロック７１０に２つのストリームＩＤを有するストリームデータがライトされた時のＷＡＦは３．２である。従って、スレッド＃４のローカルＷＡＦは３．２である。β４は、スレッド＃４のバッファ２１０に格納されるストリームデータのホストスループットが５００ＭＢ／ｓ（ストリームＩＤ＝４）＋４００ＭＢ／ｓ（ストリームＩＤ＝５）＝９００ＭＢ／ｓであるので、式（４）により、
β４＝  ９００／（１２００＋１１００＋１０００＋５００＋４００）＝０．２１４
である。
【００７３】
従って、図１３のようにストリームＩＤがスレッドに割り当てられた場合の装置ＷＡＦは、式（３）により、
装置ＷＡＦ＝０．２８６×１＋０．２６２×１＋０．２３８×１＋０．２１４×３．２＝１．４７
である。
【００７４】
次に、図１４を参照して、比較例のストリーム／スレッド変換部２３０によるスレッド８００の割り当ての例を説明する。
【００７５】
ホスト２から送信されるストリームデータのホストスループットは、図１３の場合と同じである。比較例のストリーム／スレッド変換部２３０は、ホストスループットの高いストリームＩＤ＝１、２をスレッド＃１に混在させて割り当てる。また、比較例のストリーム／スレッド変換部２３０は、ホストスループットの低いストリームＩＤ＝３、４、５をスレッド＃２、スレッド＃３、スレッド＃４にそれぞれ割り当てる。このように各ストリームＩＤが各スレッド８００に割り当てられた結果、βｉは
β１＝２２００／（１２００＋１１００＋１０００＋５００＋４００）＝０．５２３
β２＝１０００／（１２００＋１１００＋１０００＋５００＋４００）＝０．２３８
β３＝  ５００／（１２００＋１１００＋１０００＋５００＋４００）＝０．１１９
β４＝  ４００／（１２００＋１１００＋１０００＋５００＋４００）＝０．０９５
となる。従って、比較例においては、
装置ＷＡＦ＝０．５２３×３．２＋０．２３８×１＋０．１１９×１＋０．０９５×１＝２．１３
となり、本実施形態の場合に比べ、装置ＷＡＦが高くなってしまうことがわかる。従って、本実施形態のように、適切にスレッドを割り当てることが重要である。
【００７６】
次に、図１５を参照して、本実施形態のストリーム制御部２２０の詳細な構成を説明する。
【００７７】
ストリーム制御部２２０は、ホスト２に割り当てるストリームＩＤを管理するためのストリームＩＤ管理テーブル２２２を含む。ストリームＩＤ管理テーブル２２２は、ストリームＩＤ、Ｏｐｅｎフラグ、Ａｃｔｉｖｅフラグを有する。本実施形態ではストリームＩＤ＝１〜１６がホスト２に割り当て可能である。
【００７８】
ホスト２からＳＴＲＥＡＭ  ＣＯＮＴＲＯＬ（ＯＰＥＮ）コマンドを受信すると、ＣＰＵ５００は、ＦＷの制御に基づいてストリームＩＤ管理テーブル２２２から割り当て可能なストリームＩＤを検索する。ＣＰＵ５００は、割り当てたストリームＩＤ（以下、オープンストリームＩＤと称する）をホスト２へ通知するようにホストＩＦ制御部１００を制御する。この時、ＣＰＵ５００は、当該ストリームＩＤについてストリームＩＤ管理テーブル２２２のＯｐｅｎフラグをセットする。
【００７９】
また、ホスト２からストリームデータの転送が開始されると、ホストＩＦ制御部１００はＤＡＴＡフレームのヘッダーを読み取り、各ストリームデータのストリームＩＤ（すなわちホスト２からのストリームデータの転送が実際に始まっているストリームＩＤ。以下、アクティブストリームＩＤと称する）を、ストリーム制御部２２０に通知する。
【００８０】
アクティブストリームＩＤの通知を受けたストリーム制御部２２０は、当該ストリームＩＤについて、ストリームＩＤ管理テーブル２２２のＡｃｔｉｖｅフラグをセットする。
【００８１】
ストリームデータの転送完了後、ホスト２がＳＴＲＥＡＭ  ＣＯＮＴＲＯＬ（ＣＬＯＳＥ）コマンドを発行し、不要になったストリームＩＤの解放を要求すると、ＣＰＵ５００は当該ストリームＩＤについて、ストリームＩＤ管理テーブル２２２のＯｐｅｎフラグ及びＡｃｔｉｖｅフラグをクリアーする。
【００８２】
図１５では、ストリームＩＤ＝１、２、３、４がホスト２に割り当て済みであり、ストリームＩＤ＝１、２についてストリームデータの転送が開始されている。
【００８３】
次に、図１６及び図１７を参照して、本実施形態のストリーム／スレッド変換部２３０の詳細な構成を説明する。図１６はストリーム／スレッド変換部２３０のブロック図である。図１７はストリーム／スレッド変換部２３０に実装されるストリーム／スレッド変換テーブル２３２の構成を説明する図である。ストリーム／スレッド変換テーブル２３２は、ホスト２に割り当て可能なストリームＩＤと同じ数（本実施形態においては１６）のエントリーを有する。ストリーム／スレッド変換テーブル２３２の１つのエントリーは、ストリームＩＤ、ホストスループット、優先度、スレッド番号を含む。
【００８４】
図１６に示すように、ストリーム／スレッド変換部２３０には、ホストＩＦ制御部１００より、ストリームＩＤごとのホストスループットが入力される。ホストスループットの算出方法については後述するが、ホスト２へストリームＩＤが割り当てられた段階で算出可能な場合と、ホスト２からのストリームデータの転送が実際に始まってから算出可能な場合とがある。
【００８５】
ストリーム／スレッド変換部２３０は、ホストＩＦ制御部１００から入力されたホストスループットをストリーム／スレッド変換テーブル２３２に登録する。スレッド決定部２３４は、ストリーム／スレッド変換テーブル２３２に登録されたホストスループットから、各ストリームＩＤの優先度を決定する。また、スレッド決定部２３４は、各ストリームＩＤをどのスレッドに割り当てるのかを決定する。スレッド決定部２３４は、優先度及びスレッド番号をストリーム／スレッド変換テーブル２３２に登録する。
【００８６】
スレッド決定部２３４は、ホストスループットの高いストリームＩＤの優先度を高く決定する。ホストスループットが等しいストリームＩＤが複数ある場合には、番号の小さいほうのストリームＩＤの優先度を高く決定する。
【００８７】
スレッド決定部２３４は、優先度が第１位から第（ｍ−ｎ）位（ｍはスレッドの最大数、ｎは１以上ｍ未満の自然数）までのストリームＩＤを、スレッド＃１〜スレッド＃（ｍ−ｎ）に割り当てる。以下では優先度が第１位から第（ｍ−ｎ）位までのストリームＩＤが割り当てられるスレッドを、専用スレッドと称する。
【００８８】
スレッド決定部２３４は、優先度が第（ｍ−ｎ＋１）位以下のストリームＩＤを、スレッド＃（ｍ−ｎ＋１）〜スレッド＃ｍに割り当てる。以下では優先度が第（ｍ−ｎ＋１）位以下のストリームＩＤが割り当てられるスレッドを、混在スレッドと称する。混在スレッドが複数ある場合、すなわちｎ≧２の場合、各混在スレッドに割り当てられるストリームＩＤの数は同一でなくてもよい。
【００８９】
ｍ＝８、ｎ＝１とした場合、スレッド＃１〜スレッド＃７が専用スレッド、スレッド＃８が混在スレッドとなる。
【００９０】
なお、専用スレッドとして使用されるスレッドの番号は＃１〜＃（ｍ−ｎ）以外でもよい。混在スレッドとして使用されるスレッドの番号は＃（ｍ−ｎ＋１）〜＃ｍ以外でもよい。
【００９１】
ストリーム／スレッド変換部２３０は、ホストＩＦ制御部１００より、ストリームデータを受信し、当該ストリームデータのストリームＩＤの通知を受ける。データ選択部２３６は、通知を受けたストリームＩＤをインデックスとしてストリーム／スレッド変換テーブル２３２を検索し、当該ストリームデータをどのスレッド８００に転送するかを選択する。
【００９２】
図１７は、ストリーム／スレッド変換テーブル２３２に登録される情報の一例を説明するための図である。ここでは、ｎ＝１であるとする。
【００９３】
各ストリームデータのホストスループットは、ストリームＩＤ＝１が１２００ＭＢ／ｓ、ストリームＩＤ＝２が１１００ＭＢ／ｓ、ストリームＩＤ＝３が１０５０ＭＢ／ｓ、ストリームＩＤ＝４が１０００ＭＢ／ｓ、ストリームＩＤ＝５が９５０ＭＢ／ｓ、ストリームＩＤ＝６が９００ＭＢ／ｓ、ストリームＩＤ＝７が８５０ＭＢ／ｓ、ストリームＩＤ＝８〜１６がそれぞれ１００ＭＢ／ｓである。
【００９４】
各ストリームＩＤの優先度は、ホストスループットの高い順に決定される。優先度が第１位〜第７位であるストリームＩＤ＝１〜７は、専用スレッドであるスレッド＃１〜スレッド＃７にそれぞれ割り当てられる。優先度が第８位〜第１６位であるストリームＩＤ＝８〜１６は、混在スレッドであるスレッド＃８にまとめて割り当てられる。
【００９５】
次に、図１８を参照してスレッド決定部２３４によるスレッド割り当ての動作を説明する。
【００９６】
ホストＩＦ制御部１００よりホストスループットが入力されると（Ｓ１００）、スレッド決定部２３４は、ホストスループットの高い順に、高い優先度を割り当てる（Ｓ１０１）。スレッド決定部２３４は、優先度が第１位から第（ｍ−ｎ）位までのストリームＩＤを、専用スレッドに割り当てる（Ｓ１０２）。スレッドが割り当てられていないストリームＩＤがある場合（Ｓ１０３：Ｙｅｓ）、スレッド決定部２３４は、優先度が第（ｍ−ｎ＋１）位以下のストリームＩＤを、混在スレッドに割り当てる（Ｓ１０４）。
【００９７】
なお、スレッド決定部２３４は、ストリームＩＤが割り当てられていないライトデータ、すなわちストリームデータではないライトデータについては、混在スレッドに割り当てる。
【００９８】
以上、本実施形態の半導体記憶装置１が、ストリームデータをどのようにＮＡＮＤ型フラッシュメモリ２０にライトをするのかについて説明した。
【００９９】
次に、図１９を参照して、ストリームＩＤごとの優先度の決定方法について説明する。
【０１００】
優先度の決定は、ホスト２又は半導体記憶装置１によって行われる。
【０１０１】
ホスト２が優先度を決定する場合（Ｓ２００）、ホスト２は、ホスト２と半導体記憶装置１との間のホストスループットを測定し（Ｓ２０１）、優先度を決定する。決定された優先度は、例えばＳＴＲＥＡＭ  ＣＯＮＴＲＯＬ（ＯＰＥＮ）コマンドによって、半導体記憶装置１に通知される。なお、この場合、図１８のＳ１００及びＳ１０１の処理はスキップされる。
【０１０２】
半導体記憶装置１が優先度を決定する場合（Ｓ２０２）、半導体記憶装置１は、ホストスループットを基に優先度を決定する。この場合、ホストスループットの決定は、ホスト２又は半導体記憶装置１によって行われる。
【０１０３】
ホスト２がホストスループットを決定する場合（Ｓ２０３）、ホスト２は、ホスト２と半導体記憶装置１との間のスループットを測定し、ホストスループットを決定する。本ステップはＳ２０１と同様である。決定されたホストスループットは、例えばＳＴＲＥＡＭ  ＣＯＮＴＲＯＬ（ＯＰＥＮ）コマンドによって、半導体記憶装置１に通知される。そして、半導体記憶装置１は通知されたホストスループットを基に、優先度を決定する。
【０１０４】
半導体記憶装置１がホストスループットを決定する場合（Ｓ２０４）、実測による方法（Ｓ２０５）、又は、コマンドの待ち行列の長さによる方法（Ｓ２０６）が用いられる。
【０１０５】
実測による方法が用いられる場合（Ｓ２０５）、半導体記憶装置１は、例えば過去の一定期間（時間Ｔ１とする）内に完了したＷＲＩＴＥ  ＳＴＲＥＡＭコマンドの数によって、ホストスループットを決定すればよい。この場合、ＷＲＩＴＥ  ＳＴＲＥＡＭコマンドごとのデータ転送長が考慮されてもよい。具体的には、時間Ｔ１内に完了したＷＲＩＴＥ  ＳＴＲＥＡＭコマンドによって転送されたデータ長の合計を、時間Ｔ１で割ることによりスループットを決定すればよい。
【０１０６】
コマンドの待ち行列の長さによる方法が用いられる場合（Ｓ２０６）、厳密なホストスループットは決定できないが、半導体記憶装置１は、以下に説明するような推定をもってホストスループットであると決定する。すなわち、半導体記憶装置１は、例えばある時刻Ｔ２にコマンドキュー１２０にキューイングされているＷＲＩＴＥ  ＳＴＲＥＡＭコマンドの数を基に、ホストスループットを推定する。この場合も、ＷＲＩＴＥ  ＳＴＲＥＡＭコマンドごとのデータ転送長が考慮されてもよい。具体的には、時刻Ｔ２にコマンドキュー１２０にキューイングされているＷＲＩＴＥ  ＳＴＲＥＡＭコマンドによって転送されるべきデータ長の合計を基に、ホストスループットを推定する。
【０１０７】
そして、半導体記憶装置１は自ら決定したホストスループットを基に、優先度を決定する。
【０１０８】
以上説明した第１の実施形態の半導体記憶装置によれば、ホストスループットの高いストリームＩＤには優先してスレッドを割り当てるので、半導体記憶装置のＷＡＦを低減することができる。
【０１０９】
[第２の実施形態]
第１の実施形態の半導体記憶装置では、ホストスループットの高いストリームＩＤに高い優先度を割り当て、優先度に従ってスレッドを割り当てた。これに対し本実施形態の半導体記憶装置では、ストリームデータのシーケンシャル性により、さらにスレッドの割り当てを変更する。本実施形態においては、同一のストリームＩＤを用いて転送されたストリームデータが一括して無効化されない場合でも、シーケンシャルなデータは一括して無効化される可能性が高い（例えば当該データが同一のファイルを構成している場合）との仮定に基づいて、より適切にスレッドを割り当てることを試みる。
【０１１０】
図２０ａは、ホスト２が同一のストリームＩＤを用いて、複数のＷＲＩＴＥ  ＳＴＲＥＡＭコマンドを発行する時の一例を説明する図である。
【０１１１】
ホスト２は、ストリームＩＤ＝１を用いて、開始ＬＢＡ＝０ｘ００００から転送数＝０ｘ５０セクター、開始ＬＢＡ＝０ｘ０１００から転送数＝０ｘ３０セクター、開始ＬＢＡ＝０ｘ０５００から転送数＝０ｘ８０セクター、開始ＬＢＡ＝０ｘ０８００から転送数＝０ｘ１００セクター、の４つのＷＲＩＴＥ  ＳＴＲＥＡＭコマンドをそれぞれ発行する。
【０１１２】
また、ホスト２は、ストリームＩＤ＝２を用いて、開始ＬＢＡ＝０ｘ１０００から転送数＝０ｘ８００セクター、開始ＬＢＡ＝０ｘ１８００から転送数＝０ｘ８００セクター、の２つのＷＲＩＴＥ  ＳＴＲＥＡＭコマンドをそれぞれ発行する。
【０１１３】
この時にホスト２から送信されるストリームデータのＬＢＡは、図２０ｂに示すようになる。図２０ｂの実線部分はストリームデータが転送されるＬＢＡ範囲を示す。図２０ｂの点線部分はストリームデータが転送されないＬＢＡ範囲を示す。ストリームＩＤ＝１のストリームデータはシーケンシャル性が低く（すなわちランダム性が高く）、ストリームＩＤ＝２のストリームデータはシーケンシャル性が高い。
【０１１４】
図２１ａは、１つの論理ブロック７１０に、１つのストリームＩＤを有する２つのシーケンシャルデータがライトされた状態を説明する図である。ある論理ブロック７１０（論理ブロック＃１とする）に、ストリームＩＤ＝１・シーケンシャル＃１（例えばＬＢＡ＝０ｘ００００〜０ｘ１０００）のストリームデータと、ストリームＩＤ＝１・シーケンシャル＃２（例えばＬＢＡ＝０ｘ２０００〜０ｘ３０００）のストリームデータがライトされている。
【０１１５】
図２１ｂは、図２１ａの状態で、ホスト２がストリームＩＤ＝１・シーケンシャル＃１のストリームデータを無効化した時の状態を説明する図である。ストリームＩＤ＝１・シーケンシャル＃１のストリームデータの無効化により、論理ブロック＃１にライトされているデータのうち、ストリームＩＤ＝１・シーケンシャル＃１のストリームデータは無効化された。しかしながら、ストリームＩＤ＝１・シーケンシャル＃２のストリームデータは無効化されていない。この状態で論理ブロック＃１を消去済み論理ブロックとするには、論理ブロック＃１にライトされているデータのうち、まだ有効であるストリームＩＤ＝１・シーケンシャル＃２のストリームデータを別な論理ブロック７１０（例えば、図示しない論理ブロック＃２）にライトした後（すなわちガベージコレクションをした後）に、論理ブロック＃１がイレースされなければならない。
【０１１６】
従って、第１の実施形態で説明した図１０ａ〜図１０ｂと、本実施形態の図２１ａ〜図２１ｂを比較すると、図２１ａ〜図２１ｂの場合は、同じ数の消去済み論理ブロックを得るのに、ＮＡＮＤ型フラッシュメモリ２０へライトされるデータの総量が増加している。すなわち、シーケンシャル性の低いストリームデータは、ＷＡＦを増加させてしまう。
【０１１７】
次に、図２２〜図２４を参照して、本実施形態のストリーム／スレッド変換部２３０によるスレッド８００の割り当ての例を説明する。
【０１１８】
図２２に示すように、ホスト２から、ストリームＩＤ＝１〜５の５つのストリームデータが送信される場合を想定する。各ストリームデータのホストスループットは、ストリームＩＤ＝１〜３が１１００ＭＢ／ｓ、ストリームＩＤ＝４〜５が１０００ＭＢ／ｓである。ストリームＩＤ＝１〜３のストリームデータはランダム性が高く、ストリームＩＤ＝４〜５のストリームデータはシーケンシャル性が高いものとする。ここでは、半導体記憶装置１は最大３つのスレッド８００を有するものとする。
【０１１９】
この時、第１の実施形態で説明したスレッド割り当て条件に従えば、ストリームＩＤ＝１は専用スレッドであるスレッド＃１に割り当てられる。ストリームＩＤ＝２は専用スレッドであるスレッド＃２に割り当てられる。ストリームＩＤ＝３〜５は、混在スレッドであるスレッド＃３に割り当てられる。この結果、ランダム性が高いストリームＩＤ（ストリームＩＤ＝１〜３）がスレッド＃１〜＃３のいずれにも割り当てられる。そして、スレッド＃１〜＃３のいずれのスレッドのローカルＷＡＦも、Ｒａｎｄｏｍ  ＷＡＦに収束してしまう。
【０１２０】
図２３は、本実施形態のストリーム／スレッド変換部２３０によるスレッド８００の割り当ての例を説明するための図である。図２３においてホスト２から送信されるストリームデータは、図２２と同じである。
【０１２１】
本実施形態のストリーム／スレッド変換部２３０は、ランダム性が高いストリームＩＤ＝１〜３を、混在スレッドであるスレッド＃３に割り当てる。シーケンシャル性が高いストリームＩＤ＝１を、専用スレッドであるスレッド＃１に割り当てる。シーケンシャル性が高いストリームＩＤ＝２を、専用スレッドであるスレッド＃２に割り当てる。この結果、スレッド＃３のローカルＷＡＦのみ、Ｒａｎｄｏｍ  ＷＡＦに収束する。一方でシーケンシャル性が高いストリームデータが割り当てられたスレッド＃１のローカルＷＡＦは、このストリームデータが一括して無効化されると仮定すると、１となる。同様に、スレッド＃２のローカルＷＡＦも１となる。
【０１２２】
図２４は、本実施形態のストリーム／スレッド変換部２３０によるスレッド８００の割り当ての別の例を説明するための図である。図２４に示すように、ホスト２から、ストリームＩＤ＝１〜３の３つのストリームデータが送信される場合を想定する。ストリームＩＤ＝１は、１つのシーケンシャルデータであるとする。ストリームＩＤ＝２は、複数のシーケンシャルデータを含むとする。ストリームＩＤ＝３は、ランダムデータであるとする。ここでは、半導体記憶装置１は最大２つのスレッド８００を有するものとする。
【０１２３】
本実施形態のストリーム／スレッド変換部２３０は、１つのストリームＩＤによって複数のシーケンシャルデータが送信された場合、当該ストリームＩＤを混在スレッドに割り当てる。すなわち、複数のシーケンシャルデータを含むストリームＩＤ＝２は、ランダムデータを有するストリームＩＤ＝３とともに、混在スレッドであるスレッド＃２に割り当てられる。
【０１２４】
以上概説したように、本実施形態のストリーム／スレッド変換部２３０は、ストリームデータのシーケンシャル性を考慮し、スレッドを割り当てる。これにより、装置全体のＷＡＦを低減することができる。
【０１２５】
次に、図２５ａ及び図２５ｂを参照して、本実施形態においてシーケンシャル性を判定するためのアルゴリズムの概要を説明する。図２５ａ及び図２５ｂは、ＷＲＩＴＥ  ＳＴＲＥＡＭコマンド（Ａ）〜ＷＲＩＴＥ  ＳＴＲＥＡＭコマンド（Ｅ）によって転送されるストリームデータ（以下、データ（Ａ）〜データ（Ｅ）と称する）の、開始ＬＢＡ、及び、転送数を示している。
【０１２６】
本実施形態の半導体記憶装置１では、ホストＩＦ制御部１００から入力される開始ＬＢＡや転送数を用いて、ストリーム制御部２２０がシーケンシャル性を判定する。ストリーム制御部２２０は、同一のストリームＩＤを有するストリームデータの、基準となる開始ＬＢＡを記憶する。すなわち、図２５ａに示す例において、ストリーム制御部２２０はデータ（Ａ）の開始ＬＢＡを、基準開始ＬＢＡとして記憶する。ストリーム制御部２２０は、データ（Ａ）のＬＢＡ範囲と連続するＬＢＡ範囲を有するデータ（Ｂ）〜データ（Ｅ）のそれぞれの転送数の累積数を記憶する。そして、データ（Ｄ）の受信により、累積数があらかじめ設定されたロングシーケンシャル判定閾値以上になると、ストリーム制御部２２０は、このストリームデータのシーケンシャル性は高いと判定する。
【０１２７】
ホスト２のストリームデータの転送の仕方によっては、半導体記憶装置１はシーケンシャル性が高いストリームデータを、ＬＢＡ順に受信できるとは限らない。図２５ｂに示す例においては、半導体記憶装置１は、データ（Ｂ）、データ（Ａ）、データ（Ｃ）、データ（Ｄ）、データ（Ｅ）の順にストリームデータを受信している。ストリーム制御部２２０は、このように受信されたストリームデータについても、シーケンシャル性を判定することができる。
【０１２８】
次に、図２６ａ〜図２６ｇを参照して、ロングシーケンシャル判定テーブルの構成の一例を説明する。ロングシーケンシャル判定テーブルは、ストリーム制御部２２０内に実装される。ストリーム制御部２２０は、ロングシーケンシャル判定テーブルを用いて、ストリームデータのシーケンシャル性を判定する。
【０１２９】
ロングシーケンシャル判定テーブルは、複数のエントリーを有する。本実施形態においては、ロングシーケンシャル判定テーブルは、３つのエントリーを有する。１つのエントリーは、開始ＬＢＡと、最終ＬＢＡと、累積数と、世代番号と、を含む。また、ロングシーケンシャル判定テーブルは、ロング判定フラグを有する。ロングシーケンシャル判定テーブルはストリームＩＤごとに管理される。すなわち、１つのストリームＩＤに対し、１つのロングシーケンシャル判定テーブルが存在する。ロングシーケンシャル判定テーブルは、ＳＴＲＥＡＭ  ＣＯＮＴＲＯＬ（ＯＰＥＮ）コマンドに応じてストリームＩＤが割り当てられた時に、ＣＰＵ５００によって初期化されてもよい。
【０１３０】
以下の説明ではロングシーケンシャル判定閾値は０ｘ７００が設定されているものとする。
【０１３１】
図２６ａは、ロングシーケンシャル判定テーブルが初期化された状態を示す。図では省略してあるが、すべてのエントリーの開始ＬＢＡ、最終ＬＢＡ、累積数、世代番号はゼロである。ロング判定フラグはセットされていない。
【０１３２】
図２６ｂは、図２６ａの状態で開始ＬＢＡ＝０ｘ１０００から転送数＝０ｘ２００セクターのＷＲＩＴＥ  ＳＴＲＥＡＭコマンド（コマンドＡ）が発行された時のロングシーケンシャル判定テーブルの状態を示す。エントリー０の開始ＬＢＡは０ｘ１０００、最終ＬＢＡは開始ＬＢＡ＋転送数−１なので、０ｘ１１ＦＦとなる。エントリー０の累積数は、登録されている累積値（０ｘ０００）に、コマンドＡの転送数（０ｘ２００）を足したもので、０ｘ２００になる。新規にコマンド情報が登録されたエントリーの世代番号は１になる。すなわち、エントリー０の世代番号は１になる。
【０１３３】
図２６ｃは、図２６ｂの状態で開始ＬＢＡ＝０ｘ１２００から転送数＝０ｘ１００セクターのＷＲＩＴＥ  ＳＴＲＥＡＭコマンド（コマンドＢ）が発行された時のロングシーケンシャル判定テーブルの状態を示す。コマンドＢの開始ＬＢＡは、エントリー０の最終ＬＢＡと連続である。従って、コマンドＢの情報はエントリー０に登録される。エントリー０の開始ＬＢＡは０ｘ１０００のまま、最終ＬＢＡはコマンドＢの最終ＬＢＡである０ｘ１２ＦＦとなる。エントリー０の累積数は、登録されている累積値（０ｘ２００）に、コマンドＢの転送数（０ｘ１００）を足したもので、０ｘ３００になる。受信したコマンドのＬＢＡ範囲と連続するＬＢＡ範囲を有するエントリーの世代番号は１になる。すなわち、エントリー０の世代番号は１のままである。
【０１３４】
図２６ｄは、図２６ｃの状態で開始ＬＢＡ＝０ｘ１４００から転送数＝０ｘ２００セクターのＷＲＩＴＥ  ＳＴＲＥＡＭコマンド（コマンドＣ）が発行された時のロングシーケンシャル判定テーブルの状態を示す。コマンドＣの開始ＬＢＡはエントリー０の最終ＬＢＡと連続ではない。この時、コマンドＣの情報は、エントリー１に登録される。エントリー１の開始ＬＢＡは０ｘ１４００、最終ＬＢＡは０ｘ１５ＦＦとなる。エントリー１の累積数は、登録されている累積値（０ｘ０００）に、コマンドＣの転送数（０ｘ２００）を足したもので、０ｘ２００になる。新規にコマンド情報が登録されたエントリーの世代番号は１になる。すなわち、エントリー１の世代番号は１になる。新規にコマンド情報が登録されたエントリー以外のエントリーのうち、累積数がゼロではないエントリーの世代番号は、１ずつインクリメントされる。すなわち、エントリー０の世代番号は２になる。
【０１３５】
図２６ｅは、図２６ｄの状態で開始ＬＢＡ＝０ｘ０Ｅ００から転送数＝０ｘ１００セクターのＷＲＩＴＥ  ＳＴＲＥＡＭコマンド（コマンドＤ）が発行された時のロングシーケンシャル判定テーブルの状態を示す。コマンドＤの開始ＬＢＡはエントリー０の最終ＬＢＡ、及び、エントリー１の最終ＬＢＡのいずれとも連続ではない。この時、コマンドＤの情報は、エントリー２に登録される。エントリー２の開始ＬＢＡは０ｘ０Ｅ００、最終ＬＢＡは０ｘ０ＥＦＦとなる。エントリー２の累積数は、登録されている累積値（０ｘ０００）に、コマンドＤの転送数（０ｘ１００）を足したもので、０ｘ１００になる。新規にコマンド情報が登録されたエントリーの世代番号は１になる。すなわち、エントリー２の世代番号は１になる。新規にコマンド情報が登録されたエントリー以外のエントリーのうち、累積数がゼロではないエントリーの世代番号は、１ずつインクリメントされる。すなわち、エントリー０の世代番号は３になる。エントリー１の世代番号は２になる。
【０１３６】
図２６ｆは、図２６ｅの状態で開始ＬＢＡ＝０ｘ１３００から転送数＝０ｘ１００セクターのＷＲＩＴＥ  ＳＴＲＥＡＭコマンド（コマンドＥ）が発行された時のロングシーケンシャル判定テーブルの状態を示す。コマンドＥの開始ＬＢＡはエントリー０の最終ＬＢＡと連続である。また、コマンドＥの最終ＬＢＡはエントリー１の開始ＬＢＡと連続である。この時、エントリー０の情報、エントリー１の情報、コマンドＥの情報はマージされて、開始ＬＢＡが小さいほうのエントリー、すなわちエントリー０に登録される。エントリー０の開始ＬＢＡは０ｘ１０００のままである。エントリー０の最終ＬＢＡはエントリー１の最終ＬＢＡであった０ｘ１５ＦＦとなる。エントリー０の累積数は、登録されている累積値（０ｘ３００）に、エントリー１の累積数（０ｘ２００）及びコマンドＥの転送数（０ｘ１００）を足したもので、０ｘ６００になる。マージされたエントリーのうち、開始ＬＢＡが小さいほうのエントリーの世代番号は１になる。すなわち、エントリー０の世代番号は１になる。マージされたエントリーのうち、開始ＬＢＡが大きいほうのエントリーはゼロに初期化される。すなわち、エントリー１は初期化される。マージされたエントリー以外のエントリーのうち、累積数がゼロではないエントリーの世代番号は、小さい世代番号を有するエントリーから順に、２、３、・・・と割り当てられる。すなわち、エントリー２の世代番号は１から２に書き換えられる。
【０１３７】
図２６ｇは、図２６ｆの状態で開始ＬＢＡ＝０ｘ０Ｆ００から転送数＝０ｘ１００セクターのＷＲＩＴＥ  ＳＴＲＥＡＭコマンド（コマンドＦ）が発行された時のロングシーケンシャル判定テーブルの状態を示す。コマンドＦの開始ＬＢＡはエントリー２の最終ＬＢＡと連続である。また、コマンドＦの最終ＬＢＡはエントリー０の開始ＬＢＡと連続である。この時、エントリー０の情報、エントリー２の情報、コマンドＦの情報はマージされて、開始ＬＢＡが小さいほうのエントリー、すなわちエントリー２に登録される。エントリー２の開始ＬＢＡは０ｘ０Ｅ００のままである。エントリー２の最終ＬＢＡはエントリー０の最終ＬＢＡであった０ｘ１５ＦＦとなる。エントリー２の累積数は、登録されている累積値（０ｘ１００）に、エントリー０の累積数（０ｘ６００）及びコマンドＦの転送数（０ｘ１００）を足したもので、０ｘ８００になる。マージされたエントリーのうち、開始ＬＢＡが小さいエントリーの世代番号は１になる。すなわち、エントリー２の世代番号は１になる。マージされたエントリーのうち、開始ＬＢＡが大きいほうのエントリーはゼロに初期化される。すなわち、エントリー０は初期化される。
【０１３８】
ここで、エントリー２の累積数がロングシーケンシャル判定閾値（０ｘ７００）以上となったので、ロング判定フラグがセットされる。
【０１３９】
いずれのエントリーの累積数もゼロではない時に受信したコマンドのＬＢＡ範囲が、いずれのエントリーの開始ＬＢＡ又は最終ＬＢＡとも不連続である場合には、世代番号が最大のエントリーが初期化される。なお、この場合は累積数が最小のエントリーを初期化するようにしてもよい。そして、初期化されたエントリーに、受信したコマンドの情報が登録される。
【０１４０】
次に、図２７を参照して、本実施形態のストリーム制御部２２０によるロングシーケンシャル判定テーブルの更新手順を説明する。
【０１４１】
ＷＲＩＴＥ  ＳＴＲＥＡＭコマンドを受信すると（Ｓ３００）、ストリーム制御部２２０は、累積数がゼロではなく、かつ、受信したコマンドのＬＢＡ範囲と連続する開始ＬＢＡ又は最終ＬＢＡを有するエントリーがあるか否かを確認する（Ｓ３０１）。
【０１４２】
ＬＢＡが連続するエントリーがない場合（Ｓ３０１：Ｎｏ）、ストリーム制御部２２０は、累積数がゼロのエントリーがあるか否かを確認する（Ｓ３０２）。累積数がゼロのエントリーがある場合（Ｓ３０２：Ｙｅｓ）、ストリーム制御部２２０は、累積数がゼロであるエントリーのうち、エントリー番号が最小のエントリーにコマンド情報を登録する（Ｓ３０３）。この時、当該エントリーの世代番号は１にされる。累積数がゼロのエントリーがない場合（Ｓ３０２：Ｎｏ）、ストリーム制御部２２０は、世代番号が最大であるエントリー、又は、累積数が最小であるエントリーを初期化する（Ｓ３０４）。
【０１４３】
ＬＢＡが連続するエントリーがある場合（Ｓ３０１：Ｙｅｓ）、ストリーム制御部２２０は、マージ可能なエントリーがあるか否かを確認する（Ｓ３０５）。すなわち、受信したコマンドの開始ＬＢＡと連続する最終ＬＢＡを有するエントリー（第１のエントリー）と、受信したコマンドの最終ＬＢＡと連続する開始ＬＢＡを有するエントリー（第２のエントリー）、の両方があるか否かを確認する。
【０１４４】
マージ可能なエントリーがない場合、すなわち、第１のエントリー又は第２のエントリーのうち、いずれか一方のみが存在する場合（Ｓ３０５：Ｎｏ）、ストリーム制御部２２０は、第１のエントリー又は第２のエントリーに、コマンド情報を登録する（Ｓ３０６）。具体的には、第１のエントリーにコマンド情報が登録される第１の場合には、第１のエントリーの開始ＬＢＡは変更されず、第１のエントリーの最終ＬＢＡには受信したコマンドの最終ＬＢＡが登録される。また、第２のエントリーにコマンド情報が登録される第２の場合には、第２のエントリーの開始ＬＢＡには受信したコマンドの開始ＬＢＡが登録され、第２のエントリーの最終ＬＢＡは変更されない。第１の場合、及び、第２の場合のいずれにおいても、当該エントリーの累積数は受信したコマンドの転送数が加えられ、当該エントリーの世代番号は１にされる。また、登録対象ではないエントリーのうち、累積数がゼロではないエントリーの世代番号は１ずつインクリメントされる（Ｓ３０７）。
【０１４５】
マージ可能なエントリーがある場合、すなわち、第１のエントリー及び第２のエントリーの両方が存在する場合（Ｓ３０５：Ｙｅｓ）、ストリーム制御部２２０は、第１のエントリーに、第２のエントリーの情報、及び、コマンド情報をマージして登録する（Ｓ３０８）。すなわち、第１のエントリーの開始ＬＢＡは変更されない。第１のエントリーの最終ＬＢＡには、第２のエントリーの最終ＬＢＡが登録される。第１のエントリーの累積数には、第１のエントリーの累積数と第２のエントリーの累積数の合計に、受信したコマンドの転送数を加えた値が登録される。第１のエントリーの世代番号は１にされる。また、マージ対象ではないエントリーのうち、累積数がゼロではないエントリーの世代番号は、世代番号の小さい順に２、３、・・・と再割り当てされる（Ｓ３０９）。
【０１４６】
なお、マージ可能なエントリーがない場合（Ｓ３０５：Ｎｏ）、マージ可能なエントリーがある場合（Ｓ３０５：Ｙｅｓ）のいずれの場合においても、第１のエントリーが２つ以上存在する場合、又は、第２のエントリーが２つ以上存在する場合がある。この場合、ストリーム制御部２２０は、例えば２つ以上存在する第１のエントリー（又は２つ以上存在する第２のエントリー）のうち、いずれか１つを選択し、上記の処理を行う。
【０１４７】
次にストリーム制御部２２０は、いずれかのエントリーの累積数がロングシーケンシャル判定閾値以上となったか否かを確認し（Ｓ３１０）、該当するエントリーがある場合（Ｓ３１０：Ｙｅｓ）は、ロング判定フラグをセットする（Ｓ３１１）。
【０１４８】
次に、図２８を参照して、本実施形態のストリーム／スレッド変換テーブル２３２の構成の一例を説明する。
【０１４９】
本実施形態では、第１の実施形態のストリーム／スレッド変換テーブル２３２の構成に、ロング判定フラグが追加される。なお、ロング判定フラグはストリームＩＤとともに、ストリーム制御部２２０からストリーム／スレッド変換部２３０に入力される。
【０１５０】
図２８に示すように、ストリームＩＤ＝５、７については、ロング判定フラグがセットされていない。この時、第１の実施形態で説明したスレッド割り当て条件に従えば、優先度がそれぞれ第５位と第７位であるストリームＩＤ＝５、７は、専用スレッドであるスレッド＃５、＃７に割り当てられるべきであるとする。しかしながら、本実施形態のスレッド決定部２３４は、ロング判定フラグがセットされていないストリームＩＤ＝５、７について、優先度とは無関係に混在スレッドであるスレッド＃８に割り当てる。その結果、優先度がそれぞれ第６位、第８位、第９位であるストリームＩＤ＝６、８、９は、専用スレッドであるスレッド＃５、スレッド＃６、スレッド＃７にそれぞれ割り当てられる。
【０１５１】
なお、上記ではロング判定フラグがセットされていないストリームＩＤについては、優先度とは無関係に混在スレッドに割り当てた。しかしながら、当該ストリームＩＤについて、ホストスループットから決定される優先度を下げるとしてもよい。また、ホスト２が優先度を決定する場合（図１９のＳ２００の場合）、ホスト２はストリームデータのシーケンシャル性を考慮して優先度を決定してもよい。半導体記憶装置１が優先度を決定する場合（図１９のＳ２０２の場合）は、ホスト２が半導体記憶装置１にストリームデータのシーケンシャル性を通知してもよい。この場合、シーケンシャル性は例えばＳＴＲＥＡＭ  ＣＯＮＴＲＯＬ（ＯＰＥＮ）コマンドによって、半導体記憶装置１に通知される。
【０１５２】
以上説明した第２の実施形態の半導体記憶装置によれば、シーケンシャル性の高いストリームＩＤには優先してスレッドを割り当てるので、半導体記憶装置のＷＡＦを低減することができる。
【０１５３】
[第３の実施形態]
第３の実施形態の半導体記憶装置では、データのシーケンシャル性に基づいて、半導体記憶装置自身によって各データにストリームＩＤを割り当てる。すなわち、本実施形態においては、ストリームデータを識別可能に送信しないホストと接続された場合においても、各ストリームデータを各スレッドに適切に割り当てる。
【０１５４】
本実施形態の半導体記憶装置１においても、第２の実施形態と同様、ホストＩＦ制御部１００から入力される開始ＬＢＡや転送数を用いて、ストリーム制御部２２０がシーケンシャル性を判定する。シーケンシャル性の判定に用いられるアルゴリズムは、第２の実施形態と同様である。すなわち、基準開始ＬＢＡからシーケンシャルにつながったデータの累積数がロングシーケンシャル判定閾値以上になると、ストリーム制御部２２０は、このデータのシーケンシャル性が高いと判定する。本実施形態においては、ストリーム制御部２２０は、シーケンシャル性が高いと判定されたデータに、ストリームＩＤを付加する。
【０１５５】
第２の実施形態の半導体記憶装置１においては、１つのストリームＩＤに対し、１つのロングシーケンシャル判定テーブルが存在した。これに対し本実施形態においては、ストリーム制御部２２０に実装される１つのロングシーケンシャル判定テーブルによって、データのシーケンシャル性を判定する。
【０１５６】
図２９ａ〜図２９ｈは、本実施形態におけるロングシーケンシャル判定テーブルの構成の一例を説明する図である。ロングシーケンシャル判定テーブルは、複数のエントリーを有する。本実施形態においては、ロングシーケンシャル判定テーブルは、３つのエントリーを有する。１つのエントリーは、開始ＬＢＡと、最終ＬＢＡと、累積数と、世代番号と、ストリームＩＤと、を含む。ロングシーケンシャル判定テーブルは、任意のタイミングでＣＰＵ５００によって初期化されてもよい。以下の説明ではロングシーケンシャル判定閾値は０ｘ７００が設定されているものとする。
【０１５７】
図２９ａは、ロングシーケンシャル判定テーブルが初期化された状態を示す。図では省略してあるが、すべてのエントリーの開始ＬＢＡ、最終ＬＢＡ、累積数、世代番号、ストリームＩＤ、はゼロである。
【０１５８】
図２９ｂ〜図２９ｆは、図２６ｂ〜図２６ｆとそれぞれ同様であるので、ここでは説明を省略する。ただし、本実施形態においては、ＷＲＩＴＥ  ＳＴＲＥＡＭコマンドに限らず、データのライトに使用されるコマンド（ＷＲＩＴＥコマンド）全般がシーケンシャル性の判定対象となる。
【０１５９】
図２９ｇは、図２９ｆの状態で開始ＬＢＡ＝０ｘ２０００から転送数＝０ｘ２００セクターのＷＲＩＴＥコマンド（コマンドＦ）が発行された時のロングシーケンシャル判定テーブルの状態を示す。コマンドＦの開始ＬＢＡはエントリー０の最終ＬＢＡ、及び、エントリー２の最終ＬＢＡと連続ではない。この時、コマンドＦの情報は、エントリー１に登録される。エントリー１の開始ＬＢＡは０ｘ２０００、最終ＬＢＡは０ｘ２１ＦＦとなる。エントリー１の累積数は、登録されている累積値（０ｘ０００）に、コマンドＦの転送数（０ｘ２００）を足したもので、０ｘ２００になる。新規にコマンド情報が登録されたエントリーの世代番号は１になる。すなわち、エントリー１の世代番号は１になる。新規にコマンド情報が登録されたエントリー以外のエントリーのうち、累積数がゼロではないエントリーの世代番号は、１ずつインクリメントされる。すなわち、エントリー０の世代番号は２になり、エントリー２の世代番号は３になる。
【０１６０】
図２９ｈは、図２９ｇの状態で開始ＬＢＡ＝０ｘ０Ｆ００から転送数＝０ｘ１００セクターのＷＲＩＴＥコマンド（コマンドＧ）が発行された時のロングシーケンシャル判定テーブルの状態を示す。コマンドＧの開始ＬＢＡはエントリー２の最終ＬＢＡと連続である。また、コマンドＦの最終ＬＢＡはエントリー０の開始ＬＢＡと連続である。この時、エントリー０の情報、エントリー２の情報、コマンドＦの情報はマージされて、開始ＬＢＡが小さいほうのエントリー、すなわちエントリー２に登録される。エントリー２の開始ＬＢＡは０ｘ０Ｅ００のままである。エントリー２の最終ＬＢＡはエントリー０の最終ＬＢＡであった０ｘ１５ＦＦとなる。エントリー２の累積数は、登録されている累積値（０ｘ１００）に、エントリー０の累積数（０ｘ６００）及びコマンドＦの転送数（０ｘ１００）を足したもので、０ｘ８００になる。マージされたエントリーのうち、開始ＬＢＡが小さいエントリーの世代番号は１になる。すなわち、エントリー２の世代番号は１になる。マージされたエントリーのうち、開始ＬＢＡが大きいほうのエントリーはゼロに初期化される。すなわち、エントリー０は初期化される。マージされたエントリー以外のエントリーのうち、累積数がゼロではないエントリーの世代番号は、小さい世代番号を有するエントリーから順に、２、３、・・・と割り当てられる。すなわち、エントリー１の世代番号は１から２に書き換えられる。
【０１６１】
ここで、エントリー２の累積数がロングシーケンシャル判定閾値（０ｘ７００）以上となったので、エントリー２にストリームＩＤが割り当てられる。割り当てられるストリームＩＤは任意であるが、ここでは１が割り当てられている。ストリームＩＤが割り当てられたエントリーに属するデータには、当該ストリームＩＤが割り当てられる。
【０１６２】
累積数がロングシーケンシャル判定閾値未満であるエントリーに属するデータ（ランダムライトデータ）には、ストリームＩＤが割り当てられない。すなわち、本実施形態のストリーム制御部２２０は、受信した複数のＷＲＩＴＥコマンドから、ストリームデータとランダムライトデータを分離することができる。
【０１６３】
エントリー１についても、その後のＷＲＩＴＥコマンドの受信により、累積数がロングシーケンシャル判定閾値以上となれば、別なストリームＩＤ（例えば２）が割り当てられる。すなわち、本実施形態のストリーム制御部２２０は、受信した複数のＷＲＩＴＥコマンドから、複数のストリームデータを抽出し、それぞれに異なるストリームＩＤを割り当てることができる。
【０１６４】
本実施形態のストリーム／スレッド変換部２３０は、上述したようにストリーム制御部２２０によって各データに割り当てられたストリームＩＤを基にして、第１の実施形態と同様にスレッド８００の割り当てを行う。すなわち、ホストスループットの高いストリームＩＤには優先してスレッド８００を割り当てる。また、ストリーム／スレッド変換部２３０は、ランダムライトデータについては、混在スレッドに割り当てる。
【０１６５】
以上説明した第３の実施形態の半導体記憶装置によれば、半導体記憶装置自身によってストリームＩＤを割り当て、シーケンシャル性が高く、かつ、ホストスループットの高いストリームＩＤには優先してスレッドを割り当てるので、ストリームデータを識別可能に送信しないホストと接続された場合においても、半導体記憶装置のＷＡＦを低減することができる。
【０１６６】
[第４の実施形態]
第１の実施形態の半導体記憶装置では、ＷＡＦを低減するため、ホストスループットの高いストリームＩＤに高い優先度を割り当て、優先度に従ってスレッドを割り当てた。これに対し本実施形態の半導体記憶装置では、半導体記憶装置とホスト間のスループットを向上させるため、各スレッドの最大スループットを考慮してスレッドを割り当てる。
【０１６７】
本実施形態では、各スレッド８００の最大スループットを最大スレッドスループットと称する。最大スレッドスループットは、メモリコントローラ１０からＮＡＮＤ型フラッシュメモリ２０へのデータ転送能力によって決定される。最大スレッドスループットは、各スレッド８００で同一でもよく、スレッド８００ごとに異なっていてもよい。最大スレッドスループットは、例えば半導体記憶装置１を低消費電力モードに設定した時などには、通常時に比べて低くなりうる。また、スレッド８００を経由してライトデータがライトされるＮＡＮＤ型フラッシュメモリ２０のチャネル数やバンクインターリーブ数によっても変化しうる。
【０１６８】
本実施形態におけるホストスループットは、第１の実施形態と同様にして決定される。
【０１６９】
図３０は、本実施形態のストリーム／スレッド変換部２３０によるスレッド８００の割り当ての例を説明するための図である。図１３と同様、ここでは説明を簡略化するため、半導体記憶装置１は最大４つのスレッド８００を有するものとする。
【０１７０】
ホスト２から送信されるストリームＩＤ＝１〜５のホストスループットは、図１３の場合と同じである。スレッド＃１の最大スレッドスループットは１２００ＭＢ／ｓである。スレッド＃２の最大スレッドスループットは１１５０ＭＢ／ｓである。スレッド＃３の最大スレッドスループットは１１００ＭＢ／ｓである。スレッド＃４の最大スレッドスループットは１０００ＭＢ／ｓである。
【０１７１】
ストリーム／スレッド変換部２３０は、５つのストリームＩＤを４つのスレッド８００に割り当てる。ストリーム／スレッド変換部２３０は、ホストスループットの高いストリームＩＤを、最大スレッドスループットの高いスレッド８００に優先的に割り当てる。すなわち、ホストスループットが一番高いストリームＩＤ＝１を、最大スレッドスループットが一番高いスレッド＃１に割り当てる。ホストスループットが二番目に高いストリームＩＤ＝２を、最大スレッドスループットが二番目に高いスレッド＃２に割り当てる。ホストスループットが三番目に高いストリームＩＤ＝３を、最大スレッドスループットが三番目に高いスレッド＃３に割り当てる。ホストスループットが四番目と五番目であるストリームＩＤ＝４、５についてはスレッド＃４に混在させて割り当てる。
【０１７２】
このように各ストリームＩＤが各スレッド８００に割り当てられた結果、スレッド＃１の実効スレッドスループットは１２００ＭＢ／ｓとなる。スレッド＃２の実効スレッドスループットは１１００ＭＢ／ｓとなる。スレッド＃３の実効スレッドスループットは１０００ＭＢ／ｓとなる。スレッド＃４の実効スレッドスループットは９００ＭＢ／ｓとなる。各実効スレッドスループットの合計は、４２００ＭＢ／ｓとなる。
【０１７３】
次に、図３１を参照して、比較例のストリーム／スレッド変換部２３０によるスレッド８００の割り当ての例を説明する。
【０１７４】
ホスト２から送信されるストリームデータのホストスループットは、図３０の場合と同じである。各スレッド８００の最大スレッドスループットも、図３０の場合と同じである。比較例のストリーム／スレッド変換部２３０は、ホストスループットが一番目に高いストリームＩＤ＝１と、ホストスループットが二番目に高いストリームＩＤ＝２をスレッド＃１に混在させて割り当てる。また、比較例のストリーム／スレッド変換部２３０は、ホストスループットが三番目以降のストリームＩＤ＝３、４、５をスレッド＃２、スレッド＃３、スレッド＃４にそれぞれ割り当てる。
【０１７５】
このように各ストリームＩＤが各スレッド８００に割り当てられた結果、スレッド＃１の実効スレッドスループットは１２００ＭＢ／ｓとなる。スレッド＃２の実効スレッドスループットは１０００ＭＢ／ｓとなる。スレッド＃３の実効スレッドスループットは５００ＭＢ／ｓとなる。スレッド＃４の実効スレッドスループットは４００ＭＢ／ｓとなる。各実効スレッドスループットの合計は、３１００ＭＢ／ｓとなり、本実施形態の場合に比べ、各実効スレッドスループットの合計が低くなる、すなわち、性能が低くなってしまうことがわかる。
【０１７６】
次に、図３２を参照して、本実施形態のストリーム／スレッド変換部２３０によるスレッド８００の割り当ての別の例を説明する。
【０１７７】
ホスト２から送信されるストリームＩＤ＝１〜５のホストスループットは、図３０の場合と同じである。スレッド＃１の最大スレッドスループットは８００ＭＢ／ｓである。スレッド＃２の最大スレッドスループットは７５０ＭＢ／ｓである。スレッド＃３の最大スレッドスループットは７００ＭＢ／ｓである。スレッド＃４の最大スレッドスループットは６５０ＭＢ／ｓである。図３２の場合、ホストスループットよりも最大スレッドスループットのほうが小さい。
【０１７８】
ストリーム／スレッド変換部２３０は、５つのストリームＩＤを４つのスレッド８００に割り当てる。ストリーム／スレッド変換部２３０は、ホストスループットの高いストリームＩＤを、最大スレッドスループットの高いスレッド８００に優先的に割り当てる。すなわち、ホストスループットが一番高いストリームＩＤ＝１を、最大スレッドスループットが一番高いスレッド＃１に割り当てる。ホストスループットが二番目に高いストリームＩＤ＝２を、最大スレッドスループットが二番目に高いスレッド＃２に割り当てる。ホストスループットが三番目に高いストリームＩＤ＝３を、最大スレッドスループットが三番目に高いスレッド＃３に割り当てる。ホストスループットが四番目と五番目であるストリームＩＤ＝４、５のストリームデータについてはスレッド＃４に混在させて割り当てる。
【０１７９】
このように各ストリームＩＤが各スレッド８００に割り当てられた結果、スレッド＃１の実効スレッドスループットは８００ＭＢ／ｓとなる。スレッド＃２の実効スレッドスループットは７５０ＭＢ／ｓとなる。スレッド＃３の実効スレッドスループットは７００ＭＢ／ｓとなる。スレッド＃４の実効スレッドスループットは６５０ＭＢ／ｓとなる。各実効スレッドスループットの合計は、２９００ＭＢ／ｓとなる。
【０１８０】
次に、図３３を参照して、比較例のストリーム／スレッド変換部２３０によるスレッド８００の割り当ての別の例を説明する。
【０１８１】
ホスト２から送信されるストリームデータのホストスループットは、図３２の場合と同じである。各スレッド８００の最大スレッドスループットも、図３２の場合と同じである。比較例のストリーム／スレッド変換部２３０は、ホストスループットが一番目に高いストリームＩＤ＝１と、ホストスループットが二番目に高いストリームＩＤ＝２をスレッド＃１に混在させて割り当てる。また、比較例のストリーム／スレッド変換部２３０は、ホストスループットが三番目以降のストリームＩＤ＝３、４、５のストリームデータをスレッド＃２、スレッド＃３、スレッド＃４にそれぞれ割り当てる。
【０１８２】
このように各ストリームＩＤが各スレッド８００に割り当てられた結果、スレッド＃１の実効スレッドスループットは８００ＭＢ／ｓとなる。スレッド＃２の実効スレッドスループットは７５０ＭＢ／ｓとなる。スレッド＃３の実効スレッドスループットは５００ＭＢ／ｓとなる。スレッド＃４の実効スレッドスループットは４００ＭＢ／ｓとなる。各実効スレッドスループットの合計は、２４５０ＭＢ／ｓとなり、本実施形態の場合に比べ、各実効スレッドスループットの合計が低くなる、すなわち、性能が低くなってしまうことがわかる。
【０１８３】
次に、図３４及び図３５を参照して、本実施形態のストリーム／スレッド変換部２３０によるスレッド８００の割り当てのアルゴリズムを説明する。
【０１８４】
ホスト２から送信されるストリームＩＤ＝１〜５のホストスループットは、それぞれＱｓ１〜Ｑｓ５であるとする。スレッド＃１〜スレッド＃４の最大スレッドスループットは、それぞれＴ１〜Ｔ４であるとする。
【０１８５】
まず、図３４に示すように、ストリームＩＤ＝１をスレッド＃１に、ストリームＩＤ＝２をスレッド＃２に、ストリームＩＤ＝３をスレッド＃３に、ストリームＩＤ＝４とストリームＩＤ＝５をスレッド＃４にそれぞれ割り当てた場合を考える。この場合、スレッド＃１の実効スレッドスループットＱｔ１は、Ｑｔ１＝ｍｉｎ（Ｑｓ１、Ｔ１）である。スレッド＃２の実効スレッドスループットＱｔ２は、Ｑｔ２＝ｍｉｎ（Ｑｓ２、Ｔ２）である。スレッド＃３の実効スレッドスループットＱｔ３は、Ｑｔ３＝ｍｉｎ（Ｑｓ３、Ｔ３）である。スレッド＃４の実効スレッドスループットＱｔ４は、Ｑｔ４＝ｍｉｎ（Ｑｓ４＋Ｑｓ５、Ｔ４）である。
【０１８６】
次に、図３５に示すように、ストリームＩＤ＝１をスレッド＃１に、ストリームＩＤ＝２をスレッド＃２に、ストリームＩＤ＝３とストリームＩＤ＝４をスレッド＃３に、ストリームＩＤ＝５をスレッド＃４にそれぞれ割り当てた場合を考える。この場合、スレッド＃１の実効スレッドスループットＱｔ１は、Ｑｔ１＝ｍｉｎ（Ｑｓ１、Ｔ１）である。スレッド＃２の実効スレッドスループットＱｔ２は、Ｑｔ２＝ｍｉｎ（Ｑｓ２、Ｔ２）である。スレッド＃３の実効スレッドスループットＱｔ３は、Ｑｔ３＝ｍｉｎ（Ｑｓ３＋Ｑｓ４、Ｔ３）である。スレッド＃４の実効スレッドスループットＱｔ４は、Ｑｔ４＝ｍｉｎ（Ｑｓ５、Ｔ４）である。
【０１８７】
ストリーム／スレッド変換部２３０は、以上で説明したようなスレッド８００に割り当てるストリームＩＤの組み合わせのうち、各スレッド８００の実効スレッドスループットの合計、すなわちＱｔ１＋Ｑｔ２＋Ｑｔ３＋Ｑｔ４が最大となるような組み合わせを選択する。
【０１８８】
なお、実効スレッドスループットの合計が最大となるような組み合わせが複数あった場合、ホストスループットが高いストリームＩＤは、なるべく専用のスレッド８００を割り当てる。第１の実施形態で説明したとおり、ホストスループットが高い複数のストリームＩＤを１つのスレッド８００に割り当てると、ＷＡＦが高くなってしまうからである。
【０１８９】
以上説明した第４の実施形態の半導体記憶装置によれば、実効スレッドスループットの合計が最大となるようにスレッドを割り当てるので、半導体記憶装置の性能を向上させることができる。
【０１９０】
以上説明した少なくとも１つの実施形態の半導体記憶装置によれば、不揮発性半導体メモリにおける、ストリームデータの記憶先を適切に選択することができるので、半導体記憶装置の信頼性と性能を向上させることができる。
【０１９１】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１９２】
１…半導体記憶装置、２…ホスト、１０…メモリコントローラ、２０…不揮発性メモリ、２２…ページバッファ、２４…メモリセル、１００…ホストインターフェース制御部、１１０…受信ＦＩＦＯ、１２０…コマンドキュー、２００…バッファ管理部、２１０…バッファ、２２０…ストリーム制御部、２２２…ストリームＩＤ管理テーブル、２３０…ストリーム／スレッド変換部、２３２…ストリーム／スレッド変換テーブル、２３４…スレッド決定部、２３６…データ選択部、３００…ＮＡＮＤ管理部、３１０…ＮＡＮＤコントローラ、３２０…バッファ読み出し制御部、３３０…ブロック管理部、４００…論物変換テーブル、５００…ＣＰＵ、６００…物理ページ、６１０…物理ブロック、６２０…クラスタ、７００…論理ページ、７１０…論理ブロック、８００…スレッド
【図１】
2018088137.tif 000003
【図２】
2018088137.tif 000004
【図３】
2018088137.tif 000005
【図４】
2018088137.tif 000006
【図５】
2018088137.tif 000007
【図６】
2018088137.tif 000008
【図７】
2018088137.tif 000009
【図８】
2018088137.tif 000010
【図９】
2018088137.tif 000011
【図１０】
2018088137.tif 000012
【図１１】
2018088137.tif 000013
【図１２】
2018088137.tif 000014
【図１３】
2018088137.tif 000015
【図１４】
2018088137.tif 000016
【図１５】
2018088137.tif 000017
【図１６】
2018088137.tif 000018
【図１７】
2018088137.tif 000019
【図１８】
2018088137.tif 000020
【図１９】
2018088137.tif 000021
【図２０】
2018088137.tif 000022
【図２１】
2018088137.tif 000023
【図２２】
2018088137.tif 000024
【図２３】
2018088137.tif 000025
【図２４】
2018088137.tif 000026
【図２５】
2018088137.tif 000027
【図２６】
2018088137.tif 000028
【図２７】
2018088137.tif 000029
【図２８】
2018088137.tif 000030
【図２９】
2018088137.tif 000031
【図３０】
2018088137.tif 000032
【図３１】
2018088137.tif 000033
【図３２】
2018088137.tif 000034
【図３３】
2018088137.tif 000035
【図３４】
2018088137.tif 000036
【図３５】
2018088137.tif 000037