IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 東芝メモリ株式会社の特許一覧

特許7566674メモリシステム、方法及びデータ処理システム
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-10-04
(45)【発行日】2024-10-15
(54)【発明の名称】メモリシステム、方法及びデータ処理システム
(51)【国際特許分類】
   G06F 12/06 20060101AFI20241007BHJP
   G06F 3/06 20060101ALI20241007BHJP
   G06F 3/08 20060101ALI20241007BHJP
   G06F 12/00 20060101ALI20241007BHJP
【FI】
G06F12/06 550A
G06F3/06 301F
G06F3/08 H
G06F12/00 597U
【請求項の数】 8
(21)【出願番号】P 2021044768
(22)【出願日】2021-03-18
(65)【公開番号】P2022143959
(43)【公開日】2022-10-03
【審査請求日】2023-09-11
(73)【特許権者】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】辻 文子
(72)【発明者】
【氏名】住吉 一成
【審査官】北村 学
(56)【参考文献】
【文献】特開2018-049523(JP,A)
【文献】特開平01-193963(JP,A)
【文献】特開平05-181669(JP,A)
【文献】特開2014-194689(JP,A)
【文献】特開2018-014129(JP,A)
【文献】特開2020-102218(JP,A)
【文献】特表2014-524601(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
IPC G06F 3/06 - 3/08
G06F 12/00 - 12/06
(57)【特許請求の範囲】
【請求項1】
不揮発性メモリと、
外部装置から受信した第1コマンドで指定されたデータを前記不揮発性メモリへ書き込む第1処理、又は前記外部装置から受信した第2コマンドで指定されたデータを前記不揮発性メモリから読み出し、読み出したデータを前記外部装置へ送信する第2処理制御する第1プロセッサと、
前記不揮発性メモリに書き込まれるデータに対して複数の第1データ処理を実行可能であり、前記不揮発性メモリから読み出したデータに対して複数の第2データ処理を実行可能である第2プロセッサと、を具備し、
前記第1コマンドは、
前記複数の第1データ処理の中の一つの第1データ処理を指定する第1情報と、
前記第2プロセッサに前記一つの第1データ処理を実行させること又は実行させないことを示す第2情報と、
前記一つの第1データ処理に関する第1パラメータを指定する第3情報と、
を含み、
前記第2コマンドは、
前記複数の第2データ処理の中の一つの第2データ処理を指定する第4情報と、
前記第2プロセッサに前記一つの第2データ処理を実行させること又は実行させないことを示す第5情報と、
前記一つの第2データ処理に関する第2パラメータを指定する第6情報と、
を含み、
前記第1プロセッサは、
前記第1コマンドに含まれる前記第2情報が前記第2プロセッサに前記一つの第1データ処理を実行させることを示す場合、前記第1コマンドで指定されたデータを前記不揮発性メモリに書き込む前に、前記第2プロセッサに前記第1情報で指定された前記一つの第1データ処理を前記第3情報で指定された前記第1パラメータを使用して実行させ、前記一つの第1データ処理後のデータを前記不揮発性メモリに書き込み、
前記第2コマンドに含まれる前記第5情報が前記第2プロセッサに前記一つの第2データ処理を実行させることを示す場合、前記第2コマンドで指定されたデータを前記不揮発性メモリから読み出した後に、前記第2プロセッサに前記第4情報で指定された前記一つの第2データ処理を前記第6情報で指定された前記第2パラメータを使用して実行させ、前記一つの第2データ処理後のデータを前記外部装置へ送信する、メモリシステム。
【請求項2】
前記第2プロセッサは、前記一つの第1データ処理に関する付属情報に基づいて前記一つの第1データ処理を実行し、
前記第1プロセッサは、前記一つの第1データ処理後のデータとともに前記付属情報を前記不揮発性メモリに書き込み、前記第2コマンドで指定されたデータとともに前記付属情報を前記不揮発性メモリから読み出す、請求項1記載のメモリシステム。
【請求項3】
前記第2プロセッサは、前記不揮発性メモリから読み出したデータに前記不揮発性メモリから読み出した前記付属情報に基づいて前記一つの第2データ処理を実行する、請求項2記載のメモリシステム。
【請求項4】
前記複数の第1データ処理と前記複数の第2データ処理のそれぞれは、データの演算、データの誤り訂正符号化、データの誤り訂正復号、データの暗号化、データの復号、データの圧縮、データの解凍、データ解析、またはフィルタリングである、請求項1乃至請求項3のいずれか一項記載のメモリシステム。
【請求項5】
ホストと、
前記ホストに接続されるメモリシステムと、
を具備するデータ処理システムであって、
前記メモリシステムは、
不揮発性メモリと、
外部装置から受信した第1コマンドで指定されたデータを前記不揮発性メモリへ書き込む第1処理、又は前記外部装置から受信した第2コマンドで指定されたデータを前記不揮発性メモリから読み出し、読み出したデータを前記外部装置へ送信する第2処理制御する第1プロセッサと、
前記不揮発性メモリに書き込まれるデータに対して複数の第1データ処理を実行可能であり、前記不揮発性メモリから読み出したデータに対して複数の第2データ処理を実行可能である第2プロセッサと、を具備し、
前記第1コマンドは、
前記複数の第1データ処理の中の一つの第1データ処理を指定する第1情報と、
前記第2プロセッサに前記一つの第1データ処理を実行させること又は実行させないことを示す第2情報と、
前記一つの第1データ処理に関する第1パラメータを指定する第3情報と、
を含み、
前記第2コマンドは、
前記複数の第2データ処理の中の一つの第2データ処理を指定する第4情報と、
前記第2プロセッサに前記一つの第2データ処理を実行させること又は実行させないことを示す第5情報と、
前記一つの第2データ処理に関する第2パラメータを指定する第6情報と、
を含み、
前記第1プロセッサは、
前記第1コマンドに含まれる前記第2情報が前記第2プロセッサに前記一つの第1データ処理を実行させることを示す場合、前記第1コマンドで指定されたデータを前記不揮発性メモリに書き込む前に、前記第2プロセッサに前記第1情報で指定された前記一つの第1データ処理を前記第3情報で指定された前記第1パラメータを使用して実行させ、前記一つの第1データ処理後のデータを前記不揮発性メモリに書き込み、
前記第2コマンドに含まれる前記第5情報が前記第2プロセッサに前記一つの第2データ処理を実行させることを示す場合、前記第2コマンドで指定されたデータを前記不揮発性メモリから読み出した後に、前記第2プロセッサに前記第4情報で指定された前記一つの第2データ処理を前記第6情報で指定された前記第2パラメータを使用して実行させ、前記一つの第2データ処理後のデータを前記外部装置へ送信する、データ処理システム。
【請求項6】
前記複数の第1データ処理と前記複数の第2データ処理のそれぞれは、データの演算、データの誤り訂正符号化、データの誤り訂正復号、データの暗号化、データの復号、データの圧縮、データの解凍、データ解析、またはフィルタリングである、請求項5記載のデータ処理システム。
【請求項7】
不揮発性メモリを具備し、フラグ情報と処理指定情報とパラメータ指定情報とが付加されたコマンドを外部装置から受信するメモリシステムにおける方法であって、
前記処理指定情報は、
複数の第1データ処理の中の一つの第1データ処理を指定する第1情報、又は
複数の第2データ処理の中の一つの第2データ処理を指定する第2情報、を含み、
前記処理指定情報が前記第1情報を含む場合、前記フラグ情報は、
前記一つの第1データ処理を実行すること又は実行しないことを示す第3情報と、前記一つの第1データ処理に関する第1パラメータを指定する第4情報、を含み、
前記処理指定情報が前記第2情報を含む場合、前記フラグ情報は、
前記一つの第2データ処理を実行すること又は実行しないことを示す第5情報と、前記一つの第2データ処理に関する第2パラメータを指定する第6情報、を含み、
前記第3情報が前記一つの第1データ処理を実行することを示す場合、前記コマンドで指定されたデータを前記不揮発性メモリに書き込む前に、前記第1情報で指定された前記一つの第1データ処理を前記第4情報で指定された前記第1パラメータを使用して実行し、前記一つの第1データ処理後のデータを前記不揮発性メモリに書き込み、
前記第5情報が前記一つの第2データ処理を実行することを示す場合、前記コマンドで指定されたデータを前記不揮発性メモリから読み出した後に、前記第2情報で指定された前記一つの第2データ処理を前記第6情報で指定された前記第2パラメータを使用して実行し、前記一つの第2データ処理後のデータを前記外部装置へ送信する、方法。
【請求項8】
前記複数の第1データ処理と前記複数の第2データ処理のそれぞれは、データの演算、データの誤り訂正符号化、データの誤り訂正復号、データの暗号化、データの復号、データの圧縮、データの解凍、データ解析、またはフィルタリングである、請求項7記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、不揮発性メモリを含むメモリシステム、方法及びデータ処理システムに関する。
【背景技術】
【0002】
不揮発性メモリを備えたメモリシステムを含むストレージシステムが開発されている。ストレージシステムはホストとホストに接続されたメモリシステムとを含み、データ処理システムとして実現される。データ処理システムにおいて、ホストが備えるCPU(ホストCPUとも称する)の負荷軽減や、ホストCPUとメモリシステムをまたいだデータ移動コストの削減を目的とした方式が提案されている。例えば、データ処理をホストCPUではなく、メモリシステム内部、あるいはメモリシステムにより近いところに配置した専用のプロセッサに行わせる方式が提案されている。この方式は、データ処理を行うための演算機能をメモリシステム内部やメモリシステムの近傍に配置した構成により実現される。このような構成に適応するメモリシステムは、演算機能付きストレージ又はComputational Storage(CS)と称される。CSが提供するサービスは、Computational Storage Service(CSS)と称される。
【0003】
CSSを起動する方式の一例として、ホストからCSに対するリードコマンドやライトコマンド等のioコマンドに連動してCSSを起動する方式がある。この方式は、ホストが意識することなく、CSSを起動することができる。しかし、この方式は、柔軟性に欠ける。
【先行技術文献】
【特許文献】
【0004】
【文献】特開2020-102218号公報
【文献】特開2020-154626公報
【文献】特開2019-75104号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
本発明の目的は、データ処理機能を備える改良されたメモリシステム、方法、及びデータ処理システムを提供することである。
【課題を解決するための手段】
【0006】
実施形態によれば、メモリシステムは、不揮発性メモリと、第1プロセッサと、第2プロセッサと、を具備する。第1プロセッサは、外部装置から受信した第1コマンドで指定されたデータを不揮発性メモリへ書き込む第1処理、又は外部装置から受信した第2コマンドで指定されたデータを不揮発性メモリから読み出し、読み出したデータを外部装置へ送信する第2処理制御する。第2プロセッサは、不揮発性メモリに書き込まれるデータに対して複数の第1データ処理を実行可能であり、不揮発性メモリから読み出したデータに対して複数の第2データ処理を実行可能である。第1コマンドは、複数の第1データ処理の中の一つの第1データ処理を指定する第1情報と、第2プロセッサに一つの第1データ処理を実行させること又は実行させないことを示す第2情報と、一つの第1データ処理に関する第1パラメータを指定する第3情報と、を含む。第2コマンドは、複数の第2データ処理の中の一つの第2データ処理を指定する第4情報と、第2プロセッサに一つの第2データ処理を実行させること又は実行させないことを示す第5情報と、一つの第2データ処理に関する第2パラメータを指定する第6情報と、を含む。第1プロセッサは、第1コマンドに含まれる第2情報が第2プロセッサに一つの第1データ処理を実行させることを示す場合、第1コマンドで指定されたデータを不揮発性メモリに書き込む前に、第2プロセッサに第1情報で指定された一つの第1データ処理を第3情報で指定された第1パラメータを使用して実行させ、一つの第1データ処理後のデータを不揮発性メモリに書き込む。第1プロセッサは、第2コマンドに含まれる第5情報が第2プロセッサに一つの第2データ処理を実行させることを示す場合、第2コマンドで指定されたデータを不揮発性メモリから読み出した後に、第2プロセッサに第4情報で指定された一つの第2データ処理を第6情報で指定された第2パラメータを使用して実行させ、一つの第2データ処理後のデータを外部装置へ送信する。
【図面の簡単な説明】
【0007】
図1】第1実施形態によるCSのライトの一例を説明するためのブロック図。
図2】ライト時の処理の流れの一例を示すフローチャート。
図3】第1実施形態によるCSのリードの一例を説明するためのブロック図。
図4】リード時の処理の流れの一例を示すフローチャート。
図5】第2実施形態によるCSのライトの一例を説明するためのブロック図。
図6】ライト時の処理の流れの一例を示すフローチャート。
図7】第2実施形態によるCSのリードの一例を説明するためのブロック図。
図8】リード時の処理の流れの一例を示すフローチャート。
図9】第3実施形態によるCSのライトの一例を説明するためのブロック図。
図10】ライト時の処理の流れの一例を示すフローチャート。
図11】第3実施形態によるCSのリードの一例を説明するためのブロック図。
図12】リード時の処理の流れの一例を示すフローチャート。
図13】第4実施形態によるホストがioキューに投入するコマンドの一例を示す図。
図14】第5実施形態によるCSのライトの一例を説明するためのブロック図。
図15】ライト時の処理の流れの一例を示すフローチャート。
図16】第5実施形態によるCSのリードの一例を説明するためのブロック図。
図17】リード時の処理の流れの一例を示すフローチャート。
図18】第6実施形態によるライト時のCSフラグ生成処理の流れの一例を示すフローチャート。
図19】第6実施形態によるリード時のCSフラグ生成処理の流れの一例を示すフローチャート。
図20】第6実施形態によるCPM44とCSS46の一例を示す図。
図21】第7実施形態によるライト時のCSフラグ生成処理の流れの一例を示すフローチャート。
図22】第7実施形態によるリード時のCSフラグ生成処理の流れの一例を示すフローチャート。
図23】第7実施形態によるライト時のCSSの処理の流れの一例を示すフローチャート。
図24】第7実施形態によるリード時のCSSの処理の流れの一例を示すフローチャート。
図25】第8実施形態によるライト時のCSフラグ生成処理の流れの一例を示すフローチャート。
図26】第8実施形態によるリード時のCSフラグ生成処理の流れの一例を示すフローチャート。
図27】第8実施形態によるライト時のCSSの処理の流れの一例を示すフローチャート。
図28】第8実施形態によるリード時のCSSの処理の流れの一例を示すフローチャート。
図29】第9実施形態によるライト時のCSSの処理の流れの一例を示すフローチャート。
【発明を実施するための形態】
【0008】
以下、図面を参照して、実施形態を説明する。以下の説明は、実施形態の技術的思想を具体化するための装置や方法を例示するものであって、実施形態の技術的思想は、以下に説明する構成要素の構造、形状、配置、材質等に限定されるものではない。当業者が容易に想到し得る変形は、当然に開示の範囲に含まれる。説明をより明確にするため、図面において、各要素のサイズ、厚み、平面寸法又は形状等を実際の実施態様に対して変更して模式的に表す場合もある。複数の図面において、互いの寸法の関係や比率が異なる要素が含まれることもある。複数の図面において、対応する要素には同じ参照数字を付して重複する説明を省略する場合もある。いくつかの要素に複数の呼称を付す場合があるが、これら呼称の例はあくまで例示であり、これらの要素に他の呼称を付すことを否定するものではない。また、複数の呼称が付されていない要素についても、他の呼称を付すことを否定するものではない。なお、以下の説明において、「接続」は直接接続のみならず、他の要素を介して接続されることも意味する。
【0009】
以下、図面を参照しながら本実施の形態について詳細に説明する。
【0010】
実施形態は、Computational Storage(CS)の操作方式(オペレーション方式とも称される)に関する。
【0011】
CSの実現方法や提供サービスは、様々な方式が提唱されている。
【0012】
Storage Networkingの標準化推進団体であるSNIAは、CSに関する様々な情報を集め、分類、定義、優先度付けを行った上で、CSのホストインタフェースの標準化を進めようとしている。
【0013】
SNIAでは、CSの2つの基本的な構成が説明されている。
CSx:Computational Storage Device(ハードウェアに関する構成)
CSS:Computational Storage Services(ソフトウェアに関する構成)
CSxの配置形態としては、1つ又は複数のストレージを統括するプロセッサをストレージの外部に配置し、ホストCPUを当該プロセッサと接続するというタイプのもの(Computational Storage Processor)や、ストレージの中にCSS実行のためのプロセッサを配置するタイプのもの(Computational Storage Device:CSD)、CSDを多数集めたもの(Computational Storage Array:CSA)等、さまざまなものがある。
【0014】
実施形態は、一例として、ストレージ内に専用プロセッサを内蔵するCSDの配置形態を説明する。しかし、実施形態は、CSxの配置形態には制限されず、どの配置形態にも適用可能である。実施形態は、ストレージの一例としてメモリシステムを説明する。
【0015】
CSSを動かすプロセッサの実装方法として、FPGA、専用CPU、berkeley packet filter(bpf)のような仮想CPU等の各種方法がある。
【0016】
実施形態は、プロセッサの実装形態にも制限されず、ここに列挙したどの方式も採用可能である。
【0017】
以降の説明においては、CSSを動かすプロセッサ部分を、CSxの配置形態や実装形態にかかわらずComputational Storage Processor:CSP)と称され、上に示したComputational Storage Processorとは異なる定義が与えられる。
【0018】
CSSは大きく二つに分類される。
(1)FCSS(Fixed Computational Storage Service):デバイス内に固定的に定義づけされたサービスを指す。FCSSの例は、Compression、RAID、Erasure Coding、Encryption等がある。
(2)PCSS(Programmable Computational Storage Service):ホストによるプログラミングが可能なサービスを指す。ホストがプログラムを作成して、ストレージはプログラムをダウンロードする。PCSSの例は、FPGA Bitstream、BPF、Container、OSローダー等がある。
【0019】
実施形態は、これらのCSSのどのサービスも実施可能であるが、一例として、PCSSのBPF、FPBA Bitstreamや、FCSSに列挙したサービス群を対象サービスとする。
【0020】
CSアーキテクチャの使用範囲は、以下である。
管理(Management):discovery、configuration、又はmonitoring
セキュリティ(Security):authentication、autorization、encryption、又はauditing
操作(Operation):CSxのデータストアと取り出しの機構に関する定義又はホストからCSxへの作用に関する定義。
【0021】
実施形態は、これらのうち、操作に関する。
【0022】
なお、演算機能のない、既存のストレージは、Non-Computational Storage:NCSと称される)と称される。
【0023】
ホストがCSに対してCSSを起動するための操作方式の例として、ダイレクトオペレーション方式や、トランスペアレントオペレーション方式(インライン方式とも称される)がある。
【0024】
ダイレクトオペレーション方式では、ライトコマンドやリードコマンドのような既存のストレージ制御用APIとは別のCSS制御専用のAPIが定義され、ホストがCSに対して専用APIを呼び出すことによりCSSの起動を促すことができる。
【0025】
一方、トランスペアレントオペレーション方式では、ホストがCSSの起動を意識することなく既存のストレージ制御APIを介してCSSを起動することができる。また、ホストからデバイスに対して発行されるライトコマンドやリードコマンドに連動してCSSが起動される。
【0026】
ダイレクトオペレーション方式のメリットは、ホストが所望のタイミングでサービスを起動できることである。ダイレクトオペレーション方式のデメリットは、ホストが従来は存在しなかった制御を新たに行わなければならないことである。
【0027】
トランスペアレントオペレーション方式のメリットは、ホストが従来通りのプログラムを動かすだけでサービスを起動できることである。トランスペアレントオペレーション方式のデメリットは、条件に応じたCSSの起動又は停止、起動するCSSの種類の選択、CSSの起動に必要なパラメータの設定等といった細かな切り替えができないことである。条件は、CSSを起動又は停止するための条件又は起動するCSSの種類を選択するための条件である。ホストは任意の条件を定義できる。
【0028】
トランスペアレントオペレーション方式において、CSSの起動又は停止、起動するCSSの種類の選択、CSSの起動に必要なパラメータ設定等が、何等かの形でできるようになったとしても、データに付属情報を関連付ける仕組みがないため、次の問題が生じる。
【0029】
例えば、CSSが、ホストから受信したユーザデータを暗号化した後ストレージに保存し、ストレージから読み出したデータを復号してユーザデータをホストに送信する処理を実行するためには、CSSがどのデータをどの暗号鍵により暗号化したのかを示す付属情報を、ホストが別途管理する必要があった。
【0030】
第1実施形態
第1実施形態は、ライトコマンドやリードコマンド等のioコマンドはCSSの起動又は停止を指定するオン情報又はオフ情報を含む新規なCSフラグを含むトランスペアレントオペレーション方式のCSを提案する。
【0031】
図1は、第1実施形態によるCSのライト動作の一例を説明するためのデータ処理システムのブロック図である。
【0032】
ホスト10は、CPU(ホストCPUとも称される)12、ホストバッファ(HB)14、及びCS I/F回路16を含む。ホストバッファ14の例は、DRAM又はSRAMである。CPU12、ホストバッファ14、及びCS I/F回路16は、互いにバスで接続される。
【0033】
CS30は、不揮発性メモリ32、メモリコントローラ34、ファームウェア(FW)36、CPU(デバイスCPUとも称される)38、デバイスバッファ(DB)42、Computational Program Memory(CPM)44、CSS46、CSP48、及びホストI/F回路52を含む。メモリコントローラ34、CPU38、デバイスバッファ42、CPM44、CSP48、及びホストI/F回路52は互いにバスで接続される。
【0034】
ホスト10とCS30は、CS I/F回路16、接続線、及びホストI/F回路52を介して接続可能である。ホスト10とCS30とが接続された場合、ホスト10とCS30の間には、ホスト10からCS30への要求を伝えるコマンドキュー20が存在する。コマンドキュー20は、ホスト10とCS30の何れかに備えられるメモリにより実現される。ここでは、SSDに関する規格であるNon-Volatile Memory Express(NVMe)(TM)に従い、コマンドキュー20は、複数のioキュー22と1つのadmin(管理者)キュー24を含む。図1は、一例として、2個のioキュー22を示す。
【0035】
不揮発性メモリ32の例は、NAND型フラッシュメモリである。メモリコントローラ34は、不揮発性メモリ32との間のデータの転送を制御する回路である。以下、不揮発性メモリ32はNANDメモリ32と称され、メモリコントローラ34はNANDコントローラ34と称される。CS30全体を制御するファームウェア36は、NANDメモリ32に格納され、CS30の電源オン時にDRAM(図示しない)に書き込まれる。CPU38は、DRAM内のファームウェア36を実行する。デバイスバッファ42の例は、DRAM又はSRAMである。
【0036】
ファームウェア36は、ファームウェア36aを含む。ファームウェア36aは、ライトコマンドのCSフラグをチェックし、CSフラグがCSS46の起動を指定するオン情報を含む場合、ライトコマンド連動のCSSを起動するような判断処理を実行するプログラムである。ファームウェア36aの一例を以下に示す。
write()
if(CSS=on)
start(write_prog);
wait(return);

ファームウェア36は、ファームウェア36bも含む。ファームウェア36bは、リードコマンドのCSフラグをチェックし、CSフラグがCSS46の起動を指定するオン情報を含む場合、リードコマンド連動のCSSを起動するような判断処理を実行するプログラムである。ファームウェア36bの一例を以下に示す。
read()
if(CSS=on)
start(read_prog);
wait(return);

CSS46は、CS30内に予め組み込まれたプログラムであってもよいし、ホスト10が予め作成し、ホスト10からのCSSロードコマンドを実行することによりCS30がロードしたプログラムであってもよい。
【0037】
CSP48は、CSS46を実行するプロセッサである。
【0038】
CPM44は、CSS46がアクセス可能なメモリ領域を示す。CPM44の例は、DRAM又はSRAMである。
【0039】
CS30は、Solid State Drive(SSD)とも称される。
【0040】
本明細書では、CSS46は、ホスト10が予め作成したプログラムであって、CS30がCSSロードコマンドを実行することによりロードしたプログラムであるとする。そのため、ホスト10は、ioキュー22にライトコマンドWを投入する前に、adminキュー24にCSSロードコマンドLを投入する。CS30がCSSロードコマンドLを実行することにより、ライトコマンド連動のプログラムwrite_progとリードコマンド連動のプログラムread_progがホスト10からCS30にロードされる。ライトコマンド連動のプログラムwrite_progの例は、データを暗号化した暗号化データをNANDメモリ32に書き込むものである。リードコマンド連動のプログラムread_progの例は、NANDメモリ32から読み出した暗号化データを復号するものである。プログラムwrite_progは、ファームウェア36aと連動する。プログラムread_progは、ファームウェア36bと連動する。
【0041】
図2は、ライト動作の処理の流れの一例を示すフローチャートである。
【0042】
S102で、ホスト10のCPU(ホストCPU)12は、ライト対象の論理ブロックアドレス(logical block address)データ(以下、lbaデータと称される)をホストバッファ14に書き込む。
【0043】
S104で、CPU12は、ioキュー22にライトコマンドW(off)又はW(on)を順次投入する。ライトコマンドW(off)及びW(on)の各々は、lbaデータが書き込まれたホストバッファ14の領域のアドレス(以下、ホストバッファアドレスと称される)、lba、データサイズを含む。ライトコマンドW(off)は、CSS46の停止を指定するオフ情報を含むCSフラグが付加されたライトコマンドWである。ライトコマンドW(on)は、CSS46の起動を指定するオン情報を含むCSフラグが付加されたライトコマンドWである。
【0044】
S106で、ファームウェア36を実行するCS30のCPU(デバイスCPU)38は、ioキュー22からライトコマンドWを読み出し、ライトコマンドWを解析し、ホストバッファアドレス、lba、データサイズを求める。
【0045】
S108で、CPU38は、解析結果に基づいて、ホストバッファ14からデバイスバッファ42にlbaデータを転送する(図1の#a1)。
【0046】
S110で、CPU38は、ホスト10のCPU12にライトコマンドWの応答を返す。
【0047】
S112で、CPU38は、ライトコマンドWに付加されているCSフラグが含むオン情報又はオフ情報に基づいて、CSフラグがCSS46(ライトコマンド連動のCSS46)の起動又は停止を指定するかを判定する。CSフラグがCSS46の停止を指定する場合、S124で、CPU38は、デバイスバッファ42からNANDメモリ32にlbaデータを転送する(図1の#a7)。
【0048】
CSフラグがCSS46の起動を指定する場合、CPU38は、ライトコマンド連動のCSS46を実行する。具体的には、S114で、ファームウェア36aは、ライトコマンド連動のCSS46(write_prog)を起動する(start(write_prog))(図1の#a2)。
【0049】
CSS46が必要に応じて以下を行いながら、CSS処理を実行する。S116で、CSS46は、デバイスバッファ42からCPM44にlbaデータをロードする(load_db())(図1の#a3)。S118で、CSS46は、CPM44からのlbaデータのリード、lbaデータのデータ処理、及びデータ処理後のlbaデータのCPM44へのライトを実行する(図1の#a4)。データ処理の例は、データを演算して演算結果を出力する様々な処理、データの誤り訂正符号化や誤り訂正復号処理、データの暗号化や復号処理、データの圧縮や解凍、データ解析、フィルタリングである。S120で、CSS46は、CPM44からデバイスバッファ42へlbaデータをストアする(store db())(図1の#a5)。
【0050】
S122で、CSS46がファームウェア36aに処理終了を返す(return)(図1の#a6)。
【0051】
S124で、CPU38は、デバイスバッファ42からNANDメモリ32にlbaデータを転送する(図1の#a7)。
【0052】
図3は、第1実施形態によるCSのリード動作の一例を説明するためのデータ処理システムのブロック図である。図3の構成は図1の構成と殆ど同じであり、ioキュー22に投入されるコマンドが図1と異なる。
【0053】
図4は、リード動作の処理の流れの一例を示すフローチャートである。
【0054】
S202で、ホスト10のCPU(ホストCPU)12は、リード対象のlbaデータを書き込むための領域をホストバッファ14に確保する。
【0055】
S204で、CPU12は、ioキュー22にリードコマンドR(off)又はR(on)を順次投入する。リードコマンドR(off)及びR(on)の各々は、ホストバッファアドレス、lba、データサイズを含む。リードコマンドR(off)は、CSS46の停止を指定するオフ情報を含むCSフラグが付加されたリードコマンドRである。リードコマンドR(on)は、CSS46の起動を指定するオン情報を含むCSフラグが付加されたリードコマンドRである。
【0056】
S206で、ファームウェア36を実行するCS30のCPU(デバイスCPU)38は、ioキュー22からリードコマンドRを読み出し、リードコマンドRを解析し、ホストバッファアドレス、lba、データサイズを求める。
【0057】
S208で、CPU38は、解析結果に基づいて、NANDメモリ32からデバイスバッファ42にlbaデータを転送する(図3の#b1)。
【0058】
S210で、CPU38は、リードコマンドRに付加されているCSフラグのオン情報又はオフ情報に基づいて、CSフラグがCSS46(リードコマンド連動のCSS46)の起動又は停止を指定するかを判定する。CSフラグがCSS46の停止を指定する場合、S222で、CPU38は、デバイスバッファ42からホストバッファ14にlbaデータを転送する(図3の#b7)。
【0059】
S224で、CPU38は、ホスト10のCPU12にリードコマンドRの応答を返す。
【0060】
CSフラグがCSS46の起動を指定する場合、CPU38は、リードコマンド連動のCSS46を実行する。具体的には、S212で、ファームウェア36bは、リードコマンド連動のCSS46(read_prog)を起動する(start(read_prog))(図3の#b2)。
【0061】
CSS46が必要に応じて以下を行いながら、CSS処理を実行する。S214で、CSS46は、デバイスバッファ42からCPM44にlbaデータをロードする(load db())(図3の#b3)。S216で、CSS46は、CPM44からのlbaデータのリード、lbaデータのデータ処理、及びデータ処理後のlbaデータのCPM44へのライトを実行する(図3の#b4)。S218で、CSS46は、CPM44からデバイスバッファ42へlbaデータをストアする(store db())(図3の#b5)。
【0062】
S220で、CSS46がファームウェア36bに処理終了を返す(return)(図3の#b6)。
【0063】
S222で、CPU38は、デバイスバッファ42からホストバッファ14にlbaデータを転送する(図3の#b7)。
【0064】
S224で、CPU38は、ホスト10のCPU12にリードコマンドRの応答を返す。
【0065】
第1実施形態によれば、トランスペアレントオペレーション方式のCSでは実現できなかった、ライト又はリードのioコマンド連動のCSS46の起動又は停止を、CS30が備えるソフトウェア資産を活かした状態で、ホスト10が切り替えることができる。
【0066】
第2実施形態
第1実施形態では、ライトコマンドに連動するプログラムは1個のCSS46(write_prog)であり、リードコマンドに連動するプログラムは1個のCSS46(read_prog)である。次に、CS30は、ioコマンドに連動する複数のプログラム(CSS46)のいずれかを選択的に実行可能であり、CSフラグは起動するコマンド連動プログラムを選択する情報も含む第2実施形態を説明する。
【0067】
図5は、第2実施形態によるCSのライト動作の一例を説明するためのデータ処理システムのブロック図である。
【0068】
図5の構成は図1の構成と殆ど同じであるが、以下の点が異なる。第2実施形態では、CSS46は複数のスロットに区分され、各スロットが1個のライトコマンド連動プログラムに対応する。各スロット、すなわち各ライトコマンド連動プログラムはスロット識別子slot_noにより指定される。CSフラグは、CSS46の起動又は停止を指定するオン情報又はオフ情報と、起動するライトコマンド連動プログラムを指定するスロット識別子slot_noを含む。
【0069】
ファームウェア36はファームウェア36a、36bに変えてファームウェア36c、36dを含む。ファームウェア36cは、ライトコマンドWのCSフラグをチェックし、CSフラグがCSS46の起動を指定するオン情報を含む場合、スロット識別子により識別されるioコマンド連動プログラムを起動するプログラムである。ファームウェア36cの一例を以下に示す。
write()
if(CSS=on)
start(slot_no);
wait(return);

ファームウェア36dは、リードコマンドRのCSフラグをチェックし、CSフラグがCSS46の起動を指定するオン情報を含む場合、スロット識別子により識別されるioコマンド連動プログラムを起動するプログラムである。ファームウェア36dの一例を以下に示す。
read()
if(CSS=on)
start(slot_no);
wait(return);

第2実施形態でも、ホスト10は、ioキュー22にライトコマンドWやリードコマンドRを投入する前に、adminキュー24にCSSロードコマンドLを投入する。CS30がCSSロードコマンドLを実行することにより、ライトコマンド連動の複数のプログラムやリードコマンド連動の複数のプログラムがホスト10からCS30の各スロットにロードされる。
【0070】
図6は、ライト動作の処理の流れの一例を示すフローチャートである。
【0071】
S302で、ホスト10のCPU(ホストCPU)12は、ライト対象のlbaデータをホストバッファ14に書き込む。
【0072】
S304で、CPU12は、ioキュー22にライトコマンドW(off)又はW(on,slot0)を順次投入する。ライトコマンドW(off)及びW(on,slot0)の各々は、ホストバッファアドレス、lba、データサイズを含む。ライトコマンドW(off)は、CSS46の停止を指定するオフ情報を含むCSフラグが付加されたライトコマンドWである。ライトコマンドW(on,slot0)は、CSS46の起動を指定するオン情報と、起動するCSS(ライトコマンド連動プログラム)46に対応するスロットを指定するためのスロット識別子slot_no(ここでは、スロット0)と、を含むCSフラグが付加されたライトコマンドWである。
【0073】
S306で、ファームウェア36を実行するCS30のCPU(デバイスCPU)38は、ioキュー22からライトコマンドWを読み出し、ライトコマンドWを解析し、ホストバッファアドレス、lba、データサイズを求める。
【0074】
S308で、CPU38は、解析結果に基づいて、ホストバッファ14からデバイスバッファ42にlbaデータを転送する(図5の#c1)。
【0075】
S310で、CPU38は、ホスト10のCPU12にライトコマンドWの応答を返す。
【0076】
S312で、CPU38は、ライトコマンドWに付加されているCSフラグが含むオン情報又はオフ情報に基づいて、CSフラグがCSS46の起動又は停止を指定するかを判定する。CSフラグがCSS46の停止を指定する場合、S324で、CPU38は、デバイスバッファ42からNANDメモリ32にlbaデータを転送する(図5の#c7)。
【0077】
CSフラグがCSS46の起動を指定する場合、CPU38は、CSフラグに含まれるスロット識別子slot0により指定されるスロットに対応するライトコマンド連動のCSS46を実行する。具体的には、S314で、ファームウェア36cは、CSフラグに含まれるスロット識別子slot0により指定されるライトコマンド連動プログラムであるCSS46を起動する(start(slot0))(図5の#c2)。
【0078】
CSS46が必要に応じて以下を行いながら、CSS処理を実行する。S316で、CSS46は、デバイスバッファ42からCPM44にlbaデータをロードする(load_db())(図5の#c3)。S318で、CSS46は、CPM44からのlbaデータのリード、labデータのデータ処理、データ処理後のlbaデータのCPM44へのライトを実行する(図5の#c4)。S320で、CSS46は、CPM44からデバイスバッファ42へlbaデータをストアする(store db())(図5の#c5)。
【0079】
S322で、CSS46がファームウェア36aに処理終了を返す(return)(図5の#c6)。
【0080】
S324で、CPU38は、デバイスバッファ42からNANDメモリ32にlbaデータを転送する(図5の#c7)。
【0081】
図7は、第2実施形態によるCSのリード動作の一例を説明するためのデータ処理システムのブロック図である。図7の構成は図5の構成と殆ど同じであり、ioキュー22に投入されるコマンドが図5と異なる。
【0082】
図8は、リード動作の処理の流れの一例を示すフローチャートである。
【0083】
S402で、ホスト10のCPU(ホストCPU)12は、リード対象のlbaデータを書き込むための領域をホストバッファ14に確保する。
【0084】
S404で、CPU12は、ioキュー22にリードコマンドR(off)又はR(on,slot1)を順次投入する。リードコマンドR(off)及びR(on,slot1)の各々は、ホストバッファアドレス、lba、データサイズを含む。リードコマンドR(off)は、CSS46の停止を指定するオフ情報を含むCSフラグが付加されたリードコマンドである。リードコマンドR(on,slot1)は、CSS46の起動を指定するオン情報と、起動するCSS(リードコマンド連動プログラム)46に対応するスロットを指定するためのスロット識別子slot_no(ここでは、スロット1)と、を含むCSフラグが付加されたリードコマンドである。
【0085】
S406で、ファームウェア36を実行するCS30のCPU(デバイスCPU)38は、ioキュー22からリードコマンドRを読み出し、リードコマンドRを解析し、ホストバッファアドレス、lba、データサイズを求める。
【0086】
S408で、CPU38は、解析結果に基づいて、NANDメモリ32からデバイスバッファ42にlbaデータを転送する(図7の#d1)。
【0087】
S410で、CPU38は、リードコマンドRに付加されているCSフラグが含むオン情報又はオフ情報に基づいて、CSフラグがCSS46の起動又は停止を指定するかを判定する。CSフラグがCSS46の停止を指定する場合、S422で、CPU38は、デバイスバッファ42からホストバッファ14にlbaデータを転送する(図7の#d7)。
【0088】
S424で、CPU38は、ホスト10のCPU12にリードコマンドRの応答を返す。
【0089】
CSフラグがCSS46の起動を指定する場合、CPU38は、CSフラグに含まれるスロット識別子slot0により指定されるスロットに対応するリードコマンド連動のCSS46を実行する。具体的には、S412で、ファームウェア36dがスロット1のCSS46を起動する(start(slot1))(図7の#d2)。
【0090】
CSS46が必要に応じて以下を行いながら、CSS処理を実行する。S414で、CSS46は、デバイスバッファ42からCPM44にlbaデータをロードする(load db())(図7の#d3)。S416で、CSS46は、CPM44からのlbaデータのリード、lbaデータのデータ処理、及び処理後のlbaデータのCPM44へのライトを実行する(図7の#d4)。S418で、CSS46は、CPM44からデバイスバッファ42へlbaデータをストアする(store db())(図7の#d5)。
【0091】
S420で、CSS46がファームウェア36dに処理終了を返す(return)(図7の#d6)。
【0092】
S422で、CPU38は、デバイスバッファ42からホストバッファ14にlbaデータを転送する(図7の#d7)。
【0093】
S424で、CPU38は、ホスト10のCPU12にリードコマンドRの応答を返す。
【0094】
第2実施形態によれば、第1実施形態の効果に加えて、ライト又はリードのioコマンド毎に起動するCSS46を選択することができる。
【0095】
なお、第2実施形態のCSフラグからCSS46の起動又は停止を指定する情報を削除し、常にCSS46を起動するが、起動するCSS46のプログラムをスロット識別子により指定できるように第2実施形態を変形してもよい。
【0096】
すなわち、変形例では、ライトコマンドW(off)は定義されず、ライトコマンドW(on,slot_no)がライトコマンドW(slot_no)に変更される。同様に、リードコマンドR(off)は定義されず、リードコマンドR(on,slot_no)がリードコマンドR(slot_no)に変更される。
【0097】
第3実施形態
第1実施形態及び第2実施形態では、CSS46によるデータ処理の内容は固定である。これに対して、ホスト10がCSS46にCSパラメータを渡し、データ処理においてCSパラメータを参照可能であり、CSパラメータによりデータ処理の内容が可変である第3実施形態を説明する。CSパラメータの例は、データ処理の種類(暗号化方式や、暗号鍵)である。
【0098】
ホスト10はCSパラメータをCSフラグに入れてCSS46に渡してもよい。この場合、CSフラグのサイズは、CSパラメータにより決まり、CSパラメータのサイズが大きい場合、CSフラグのサイズも大きい。
【0099】
また、ホスト10はCSパラメータを特定できる情報をCSフラグに入れてCSS46に渡してもよい。例えばCSパラメータをCPM44に書き込み、CSパラメータを格納するCPM44のアドレスとサイズをCSフラグに入れてCSS46に渡してもよい。この場合、CSフラグのサイズは一定で良く、CSパラメータのサイズが大きくなっても、それに応じてCSフラグのサイズが大きくなることはない。第3実施形態では、第1実施形態又は第2実施形態のCSフラグは、CSパラメータを特定できる情報をさらに含むように変形される。
【0100】
図9は、第3実施形態によるCSのライト動作の一例を説明するためのデータ処理システムのブロック図である。第3実施形態は、第1実施形態の変形例としても実現可能であるし、第2実施形態の変形例としても実現可能である。ここでは、第1実施形態の変形例として実現した第3実施形態を説明する。
【0101】
図9の構成は図1の構成と殆ど同じであるが、以下の点が異なる。第3実施形態では、ライトコマンドW又はリードコマンドRのCSフラグは、CSS46の起動又は停止を指定するオン情報又はオフ情報と、CSパラメータの格納領域を示す情報と、を含む。
【0102】
ホストバッファ14からCPM44へのデータ転送を指示する転送コマンドTxが定義される。
【0103】
ファームウェア36はファームウェア36a、36bに変えてファームウェア36e、36fを備える。ファームウェア36eは、ライトコマンドWのCSフラグをチェックし、CSフラグがCSS46の起動を指定するオン情報を含む場合、CSパラメータを参照するプログラムである。ファームウェア36eの一例を以下に示す。cpm_addrがCSパラメータの格納領域を示す情報である。
write()
if(CSS=on)
start(write_prog,cpm_addr);
wait(return);

ファームウェア36fは、リードコマンドRのCSフラグをチェックし、CSフラグがCSS46の起動を指定するオン情報を含む場合、CSパラメータを参照するプログラムである。ファームウェア36fの一例を以下に示す。
read()
if(CSS=on)
start(read_prog,cpm_addr);
wait(return);

第3実施形態でも、ホスト10は、ライトコマンドWやリードコマンドRを投入の事前に、adminキュー24にCSSロードコマンドLを投入する。CS30がCSSロードコマンドLを実行することにより、ライトコマンド連動のプログラムwrite_progやリードコマンド連動のプログラムread_progがホスト10からCS30にロードされる。
【0104】
図10は、ライト動作の処理の流れの一例を示すフローチャートである。
【0105】
S502で、ホスト10のCPU(ホストCPU)12は、CSパラメータをホストバッファ14に書き込む。
【0106】
S504で、CPU12は、ioキュー22に転送コマンドTx(cpm_addr0)又はTx(cpm_addr1)を投入する。転送コマンドTx(cpm_addr)コマンドは、ホストバッファ14からCPM44の領域へのCSパラメータの転送を要求する。転送コマンドTx(cpm_addr)は、CSパラメータの転送先のCPM44の領域を示す領域識別子cpm_addrを含む。
【0107】
S506で、ファームウェア36を実行するCS30のCPU(デバイスCPU)38は、ioキュー22から転送コマンドTx(cpm_addr)を読み出し、転送コマンドTx(cpm_addr)を解析し、領域識別子cpm_addrを求める。
【0108】
S508で、CPU38は、ホストバッファ14から領域識別子cpm_addrで指定されるCPM44の領域にCSパラメータを転送する。
【0109】
S510で、CPU38は、ホスト10のCPU12に転送コマンドTx(cpm_addr)の応答を返す。
【0110】
S512で、ホスト10のCPU12は、ライト対象のlbaデータをホストバッファ14に書き込む。
【0111】
S514で、CPU12は、ioキュー22にライトコマンドW(off)、W(on,cpm_addr0)、又はW(on,cpm_addr1)を順次投入する。ライトコマンドW(off)、W(on,cpm_addr0)、及びW(on,cpm_addr1)の各々は、ホストバッファアドレス、lba、データサイズを含む。ライトコマンドW(off)は、CSS46の停止を指定するオフ情報を含むCSフラグが付加されたライトコマンドWである。ライトコマンドW(on,cpm_addr)は、CSS46の起動を指定するオン情報と、起動するCSSプログラムが参照するCSパラメータの格納領域を指定するためのCPM44の領域識別子com_addrと、を含むCSフラグが付加されたライトコマンドWである。
【0112】
S516で、CPU38は、ioキュー22からライトコマンドWを読み出し、ライトコマンドWを解析し、ホストバッファアドレス、lba、データサイズを求める。
【0113】
S518で、CPU38は、解析結果に基づいて、ホストバッファ14からデバイスバッファ42にlbaデータを転送する(図9の#e1)。
【0114】
S520で、CPU38は、ホスト10のCPU12にライトコマンドWの応答を返す。
【0115】
S522で、CPU38は、ライトコマンドWに付加されているCSフラグが含むオン情報又はオフ情報に基づいて、CSフラグがCSS46の起動又は停止を指定するかを判定する。CSフラグがCSS46の停止を指定する場合、S536で、CPU38は、デバイスバッファ42からNANDメモリ32にlbaデータを転送する(図9の#e8)。
【0116】
CSフラグがCSS46の起動を指定する場合、CPU38は、ライトコマンド連動のCSS46を実行する。具体的には、S524で、ファームウェア36eは、ライトコマンド連動のCSS46を起動する(start(write_prog))(図9の#e2)。
【0117】
S526で、CSS46は、CSフラグが含む領域識別子で指定されたCPM44の領域cpmからCSパラメータを読み込む(図9の#e3)。
【0118】
CSS46が必要に応じて以下を行いながら、CSS処理を実行する。S528で、CSS46は、デバイスバッファ42からCPM44にlbaデータをロードする(load_db())(図9の#e4)。S530で、CSS46は、CPM44からのlbaデータのリード、lbaデータのCSパラメータを用いるデータ処理、データ処理後のlbaデータのCPM44へのライトを実行する(図9の#e5)。S532で、CSS46は、CPM44からデバイスバッファ42へlbaデータをストアする(store db())(図9の#e6)。
【0119】
S534で、CSS46は、ファームウェア36eに処理終了を返す(return)(図9の#e7)。
【0120】
S536で、CPU38は、デバイスバッファ42からNANDメモリ32にlbaデータを転送する(図9の#e8)。
【0121】
図11は、第3実施形態によるCSのリード動作の一例を説明するためのデータ処理システムのブロック図である。
【0122】
図11の構成は図9の構成と殆ど同じであり、ioキュー22に投入されるコマンドが図9と異なる。
【0123】
図12は、リード動作の処理の流れの一例を示すフローチャートである。
【0124】
転送コマンドTxによりCSパラメータをCPM44にロードするS502-S510までの処理は図10と同じである。
【0125】
S612で、ホスト10のCPU(ホストCPU)12は、リード対象のlbaデータを書き込むための領域をホストバッファ14に確保する。
【0126】
S614で、CPU12は、ioキュー22にリードコマンドR(off)、R(on,cpm_addr0)、又はR(on,cpm_addr1)を順次投入する。リードコマンドR(off)、R(on,cpm_addr0)、及びR(on,cpm_addr1)の各々は、ホストバッファアドレス、lba、データサイズを含む。リードコマンドR(off)は、CSS46の停止を指定するオフ情報を含むCSフラグが付加されたリードコマンドRである。リードコマンドR(on,cpm_addr)は、CSS46の起動を指定するオン情報と、起動するCSSプログラムが参照するCSパラメータの格納領域を指定するためのCPM44の領域識別子com_addrと、を含むCSフラグが付加されたリードコマンドRである。
【0127】
S616で、CSS30のCPU(デバイスCPU)38は、ioキュー22からリードコマンドRを読み出し、リードコマンドRを解析し、ホストバッファアドレス、lba、データサイズを求める。
【0128】
S618で、CPU38は、解析結果に基づいて、NANDメモリ32からデバイスバッファ42にlbaデータを転送する(図11の#f1)。
【0129】
S620で、CPU38は、リードコマンドRに付加されているCSフラグが含むオン情報又はオフ情報に基づいて、CSフラグがCSS46の起動又は停止を指定するかを判定する。CSフラグがCSS46の停止を指定する場合、S634で、CPU38は、デバイスバッファ42からホストバッファ14にlbaデータを転送する(図11の#f8)。
【0130】
S636で、CPU38は、ホスト10のCPU12にリードコマンドRの応答を返す。
【0131】
CSフラグがCSS46の起動を指定する場合、CPU38は、リードコマンド連動のCSS46を起動する。具体的には、S622で、ファームウェア36fは、リードコマンド連動のCSS46を起動する(start(read_prog))(図11の#f2)。
【0132】
S624で、CSS46は、CSフラグが含む領域識別子で指定されたCPM44の領域cpmからCSパラメータを読み込む(図11の#f3)。
【0133】
CSS46が必要に応じて以下を行いながら、CSS処理を実行する。S626で、CSS46は、デバイスバッファ42からCPM44にlbaデータをロードする(load_db())(図11の#f4)。S628で、CSS46は、CPM44からのlbaデータのリード、CSパラメータを用いるlbaデータのデータ処理、データ処理後のlbaデータのCPM44へのライトを実行する(図11の#f5)。S630で、CSS46は、CPM44からデバイスバッファ42へlbaデータをストアする(store db())(図11の#f6)。
【0134】
S632で、CSS46は、ファームウェア36eに処理終了を返す(return)(図11の#f7)。
【0135】
S634で、CPU38は、デバイスバッファ42からホストバッファ14にlbaデータを転送する(図11の#f8)。
【0136】
S636で、デバイスCPU38は、ホストCPU12にリードコマンドRの応答を返す。
【0137】
第3実施形態によれば、第1実施形態の効果に加えて、ライト/リードのioコマンドに連動するCSS46が参照するCSパラメータを選択することができる。
【0138】
なお、第3実施形態のCSフラグからCSS46の起動又は停止を指定するオン情報又はオフ情報を削除し、常にCSS46を起動するが、起動するCSS46が参照するパラメータをCPM44の領域識別子により指定できるように第3実施形態を変形してもよい。
【0139】
すなわち、変形例では、ライトコマンドW(off)は定義されず、ライトコマンドW(on,slot_no)がライトコマンドW(slot_no)に変更される。同様に、リードコマンドR(off)は定義されず、リードコマンドR(on,slot_no)がリードコマンドR(slot_no)に変更される。
【0140】
第4実施形態
図9図12を参照した第3実施形態は、第1実施形態の変形例(第1実施形態のCSフラグにCSパラメータ選択機能を付加)として実現したが、第2実施形態のCSフラグにCSパラメータ選択機能を付加した第4実施形態を説明する。
【0141】
第4実施形態によるホスト10、コマンドキュー20、CS30の構成は、第1実施形態、第2実施形態、第3実施形態のそれらと同じである。ただし、コマンドキュー20が格納するコマンドやファームウェア36の処理は、第1実施形態、第2実施形態、第3実施形態とは異なる。ライトコマンドW又はリードコマンドRのCSフラグは、CSS46の起動又は停止を指定するオン情報又はオフ情報と、起動するCSS46に対応するスロットを指定するためのスロット識別子slot_noと、CSパラメータの格納領域を示す領域識別子と、を含む。
【0142】
図13は、第4実施形態によるホスト10がioキュー22に投入するコマンドの一例を示す。
【0143】
図13(a)は、ホストがライトコマンドを発行した時のioキュー22の一例を示す。ホスト10は、ioキュー22に転送コマンドTx(cpm_addr0)又はTx(cpm_addr1)を投入する。その後、ホスト10は、ioキュー22にCSフラグ付きのライトコマンドW(on,slot0,cpm_addr0)又はW(on,slot1,cpm_addr1)を投入する。ライトコマンドW(on,slot_no,cpm_addr)は、スロットに対応するCSS46の起動を指定し、起動したCSS46はCPM44の領域cpmに格納されているCSパラメータを使用してデータ処理をすることを指定する。
【0144】
このライトコマンドに対応するために、ファームウェア36は次のファームウェアを含む。
write()
if(CSS=on)
start(slot_no,cpm_addr);
wait(return);

図13(b)は、ホストがリードコマンドを発行した時のioキュー22の一例を示す。ホスト10は、ioキュー22に転送コマンドTx(cpm_addr0)又はTx(cpm_addr1)を投入する。その後、ホスト10は、ioキュー22にCSフラグ付きのリードコマンドR(on,slot0,cpm_addr0)又はR(on,slot1,cpm_addr1)を投入する。リードコマンドR(on,slot_no,cpm_addr)は、スロットに対応するCSS46の起動を指定し、起動したCSS46はCPM44の領域cpmに格納されているCSパラメータを使用してデータ処理をすることを指定する。
【0145】
このリードコマンドに対応するために、ファームウェア36は次のファームウェアを含む。
read()
if(CSS=on)
start(slot_no,cpm_addr);
wait(return);

第4実施形態では、ライトコマンドW又はリードコマンドRのCSフラグは、CSS46の起動又は停止を指定するオン情報又はオフ情報と、起動するCSS46に対応するスロットを指定するためのスロット識別子slot_noと、CSパラメータの格納領域を示す領域識別子cpm_addrと、を含む。
【0146】
第4実施形態によれば、第2実施形態の効果に加えて、ライト又はリードのioコマンドに連動するCSS46が参照するCSパラメータを選択することができる。
【0147】
なお、第4実施形態のCSフラグからCSS46の起動又は停止を指定するオン情報又はオフ情報を削除し、常にCSS46を起動するが、起動するCSS46及びCSS46が参照するCSパラメータを指定できるように第4実施形態を変形してもよい。
【0148】
すなわち、変形例では、ライトコマンドWW(on,slot_no,cpm_addr)がライトコマンドW(slot_no,cpm_addr)に変更される。同様に、リードコマンドR(on,slot_no,cpm_addr)がリードコマンドR(slot_no,cpm_addr)に変更される。
【0149】
第5実施形態
CSS46の処理、特にリード動作の処理は、CS付属情報を必要とすることがある。CS付属情報の例は、どのデータをどの誤り訂正符号により符号化したかを示す情報、どのデータをどの暗号鍵により暗号化したかを示す情報、又はどのデータをどのように圧縮したかを示す情報である。CSS46は、ライト時に、条件によって、誤り訂正符号、暗号鍵、圧縮方法を変えることがある。条件はデータの中身に関する条件のこともある。例えば、CSS46は、特定の文字列が含まれているファイルを暗号鍵Aにより暗号化し、特定の文字列が含まれていないファイルを暗号鍵Bにより暗号化することがある。この場合、暗号化されたファイルでは、特定の文字列も暗号化されているので、リード時にCSS46は、特定の文字列が含まれているか否かを暗号化ファイルから判断することができない。この場合、どのデータをどの暗号鍵により暗号化したかを示すCS付属情報があれば、CSS46は、読み出したデータを正しく復号することができる。
【0150】
CSS46がCS付属情報をlbaデータとともにNANDメモリ32に書き込み、その後CS付属情報をNANDメモリ32から読み出し、その後の処理に付属情報を利用する第5実施形態を説明する。第5実施施形態は、上述した4つの実施形態のいずれに適用可能であるが、ここでは、第1実施形態に適用した第5実施形態を説明する。
【0151】
図14は、第5実施形態によるCSのライト動作の一例を説明するためのデータ処理システムのブロック図である。第5実施形態は、図1図4に示す第1実施形態に対して、CSS46が生成したCS付属情報をlbaデータとともにNANDメモリ32やデバイスバッファ42に書き込む機能が追加されている。
【0152】
図14は、付属情報cs_attrをlbaデータlba_dataの近傍に保存する例を示す。しかし、CS付属情報cs_attrの保存先はlbaデータlba_dataと物理的に近い場所である必要はなく、lbaデータlba_dataに紐づけ可能な場所であればどこでも構わない。例えば、CS付属情報cs_attrをアドレス情報とともにルックアップテーブルで管理する形で保存してもよい。
【0153】
図15は、ライト動作の処理の流れの一例を示すフローチャートである。
【0154】
S652で、ホスト10のCPU(ホストCPU)12は、ライト対象の論理ブロックアドレス(logical block address)データ(以下、lbaデータと称される)をホストバッファ14に書き込む。
【0155】
S654で、CPU12は、ioキュー22にライトコマンドW(off)又はW(on)を順次投入する。
【0156】
S656で、CS30のCPU(デバイスCPU)38は、ioキュー22からライトコマンドWを読み出し、ライトコマンドWを解析し、ホストバッファアドレス、lba、データサイズを求める。
【0157】
S658で、CPU38は、解析結果に基づいて、ホストバッファ14からデバイスバッファ42にlbaデータを転送する(図14の#g1)。
【0158】
S660で、CPU38は、ホスト10のCPU12にライトコマンドWの応答を返す。
【0159】
S662で、CPU38は、ライトコマンドWに付加されているCSフラグが含むオン情報又はオフ情報に基づいて、CSフラグがCSS46の起動又は停止を指定するかを判定する。CSフラグがCSS46の停止を指定する場合、S676で、CPU38は、デバイスバッファ42からNANDメモリ32にlbaデータとCS付属情報を転送する(図14の#g8)。
【0160】
CSフラグがCSS46の起動を指定する場合、CPU38は、ライトコマンド連動のCSS46を実行する。具体的には、S664で、ファームウェア36aは、ライトコマンド連動のCSS46を起動する(start(write_prog))(図14の#g2)。
【0161】
CSS46が必要に応じて以下を行いながら、CSS処理を実行する。S666で、CSS46は、デバイスバッファ42からCPM44にlbaデータをロードする(load_db())(図14の#g3)。S668で、CSS46は、CPM44からのlbaデータのリード、CS付属情報cs_attrを用いたlbaデータのデータ処理、データ処理後のlbaデータのCPM44へのライトを実行する(図14の#g4)。なお、CS付属情報cs_attrの生成時期は限定されず、この時までに生成されていればよい。S670で、CSS46は、CPM44からデバイスバッファ42へCS付属情報cs_attrをセットする(set cs attr())(図14の#g5)。
【0162】
S672で、CSS46は、CPM44からデバイスバッファ42へlbaデータをストアする(store db())(図14の#g6)。
【0163】
S674で、CSS46がファームウェア36aに処理終了を返す(return)(図14の#g7)。
【0164】
S676で、CPU38は、デバイスバッファ42からNANDメモリ32にlbaデータとCS付属情報を転送する(図14の#g8)。なお、CS30に電源が常に供給されており、デバイスバッファ42がCS付属情報を不揮発に記憶する場合は、CS付属情報をNANDメモリ32に転送しなくてもよい。
【0165】
図16は、第5実施形態によるCSのリード動作の一例を説明するためのデータ処理システムのブロック図である。図16の構成は図14の構成と殆ど同じであるが、ioキュー22に投入されるコマンドが図14と異なる。
【0166】
図17は、リード動作の処理の流れの一例を示すフローチャートである。
【0167】
S702で、ホスト10のCPU(ホストCPU)12は、リード対象のlbaデータを書き込むための領域をホストバッファ14に確保する。
【0168】
S704で、CPU12は、ioキュー22にリードコマンドR(off)又はR(on)を順次投入する。
【0169】
S706で、CS30のCPU(デバイスCPU)38は、ioキュー22からリードコマンドRを読み出し、リードコマンドRを解析し、ホストバッファアドレス、lba、データサイズを求める。
【0170】
S708で、CPU38は、解析結果に基づいて、NANDメモリ32からデバイスバッファ42にlbaデータとCS付属情報を転送する(図16の#h1)。なお、CS30に電源が常に供給されており、デバイスバッファ42がCS付属情報を不揮発に記憶する場合は、labデータのみNANDメモリ32からデバイスバッファ42に転送する。
【0171】
S710で、CPU38は、リードコマンドRに付加されているCSフラグが含むオン情報又はオフ情報に基づいて、CSフラグがCSS46の起動又は停止を指定するかを判定する。CSフラグがCSS46の停止を指定する場合、S724で、CPU38は、デバイスバッファ42からホストバッファ14にlbaデータを転送する(図16の#h8)。
【0172】
S726で、CPU38は、ホスト10のCPU12にリードコマンドRの応答を返す。
【0173】
CSフラグがCSS46の起動を指定する場合、CPU38は、リードコマンド連動のプログラムを実行する。具体的には、S712で、ファームウェア36bがリードコマンド連動のCSS46を起動する(start(read_prog))(図16の#h2)。
【0174】
CSS46が必要に応じて以下を行いながら、CSS処理を実行する。
【0175】
S714で、CSS46は、デバイスバッファ42からCPM44にlbaデータをロードする(load db())(図16の#h3)。S716で、CSS46は、CPM44からのlbaデータのリード、CS付属情報を用いたlbaデータのデータ処理、及び処理後のlbaデータのCPM44へのライトを実行する(図16の#h4)。
【0176】
S718で、CSS46は、CPM44からデバイスバッファ42へCS付属情報をセットする(set cs attr())(図16の#h5)。なお、CS付属情報cs_attrの生成時期は限定されず、この時までに生成されていればよい。
【0177】
S720で、CSS46は、CPM44からデバイスバッファ42へlbaデータをストアする(store db())(図16の#h6)。
【0178】
S722で、CSS46がファームウェア36bに処理終了を返す(return)(図16の#h7)。
【0179】
S724で、CPU38は、デバイスバッファ42からホストバッファ14にlbaデータを転送する(図16の#h8)。
【0180】
S726で、CPU38は、ホスト10のCPU12にリードコマンドRの応答を返す。
【0181】
第5実施形態によれば、第1実施形態の効果に加えて、ライトコマンドの実行時にCSS46が生成したCS付属情報をデータとともにNANDメモリ32又はデバイスバッファ42に書き込み、リードコマンドの実行時に、NANDメモリ32又はデバイスバッファ2からCS付属情報を読み出して、リードコマンドに関する処理をCS付属情報に基づいて実行することができる。これにより、リードコマンドの実行時に、CSS46は条件に応じた処理の分岐をすることができる。
【0182】
CS付属情報をNANDメモリ32又はデバイスバッファ42に格納することを第2実施形態、第3実施形態、又は第4実施形態に適用することも可能である。
【0183】
CS付属情報をNANDメモリ32又はデバイスバッファ42に格納することを第2実施形態に適用する第5実施形態の第1変形例では、図5図8に示す第2実施形態に対して、ライトコマンドの実行時にCSS46が生成したCS付属情報をlbaデータとともにNANDメモリ32やデバイスバッファ42に書き込む機能と、リードコマンドの実行時にNANDメモリ32やデバイスバッファ42からCS付属情報を読み出す機能と、が追加されている。
【0184】
CS付属情報をNANDメモリ32又はデバイスバッファ42に格納することを第3実施形態に適用する第5実施形態の第2変形例では、図9図12に示す第3実施形態に対して、ライトコマンドの実行時にCSS46が生成したCS付属情報をlbaデータとともにNANDメモリ32やデバイスバッファ42に書き込む機能と、リードコマンドの実行時にNANDメモリ32やデバイスバッファ42からCS付属情報を読み出す機能と、が追加されている。
【0185】
CS付属情報をNANDメモリ32又はデバイスバッファ42に格納することを第4実施形態に適用する第5実施形態の第3変形例では、図5図12に示す第2実施形態と第3実施形態を併せ持つ実施形態に対して、CSS46が生成したCS付属情報をlbaデータとともにNANDメモリ32やデバイスバッファ42に書き込む機能と、リードコマンドの実行時にNANDメモリ32やデバイスバッファ42からCS付属情報を読み出す機能と、が追加されている。
【0186】
次に、ホスト10のプログラムフローとCS30のプログラムフローのいくつかの例を説明する。
【0187】
第6実施形態
第4実施形態におけるホスト10のCPU12のプログラムフローとCS30のプログラムフローを第6実施形態として説明する。
【0188】
図18は、ホスト10のCPU12のライトコマンド発行時のCSフラグ生成処理の流れの一例を示すフローチャートである。CSフラグ生成処理が開始されると、S802で、CPU12は、ライト対象のパーティションは特定のパーティション(ここでは、パーティションHOGE)であるか否かを判定する。ライト対象のパーティションがパーティションHOGEではない場合(S802のNO)、S804で、CPU12は、CSフラグのオン情報又はオフ情報をCSS停止(オフ)と設定し、処理を終了する。
【0189】
ライト対象のパーティションがパーティションHOGEである場合(S802のYES)、S806で、CPU12は、CSフラグのオン情報又はオフ情報をCSS起動(オン)と設定する。
【0190】
S808で、CPU12は、ライト対象のファイルのオーナは特定のオーナ(オーナFUGA)であるか否かを判定する。ライト対象のファイルのオーナがオーナFUGAではない場合(S808のNO)、S810で、CPU12は、CSフラグのスロット識別子をあるスロット(ここでは、スロット0)に設定し、CSフラグのCPM44の領域識別子をある領域(ここでは、cpm_addr1)に設定し、処理を終了する。
【0191】
ライト対象のファイルのオーナがオーナFUGAである場合(S808のYES)、S812で、CPU12は、CSフラグのスロット識別子をあるスロット(ここでは、スロット2)に設定する。
【0192】
S814で、CPU12は、ライト対象のファイルの属性が「他者は読み出し禁止」であるか否かを判定する。ライト対象のファイルの属性が「他者は読み出し禁止」である場合(S814のYES)、S816で、CPU12は、CSフラグのCPM44の領域識別子をある領域(ここでは、cpm_addr3)に設定し、処理を終了する。
【0193】
ライト対象のファイルの属性が「他者は読み出し禁止」ではない場合(S814のNO)、S818で、CPU12は、CSフラグのCPM44の領域識別子をある領域(ここでは、cpm2)に設定し、処理を終了する。
【0194】
図19は、ホスト10のCPU12のリードコマンド発行時のCSフラグ生成処理の流れの一例を示すフローチャートである。CSフラグ生成処理が開始されると、S902で、CPU12は、リード対象のパーティションは特定のパーティション(ここでは、パーティションHOGE)であるか否かを判定する。リード対象のパーティションがパーティションHOGEではない場合(S902のNO)、S904で、CPU12は、CSフラグのオン情報又はオフ情報をCSS停止と設定し、処理を終了する。
【0195】
リード対象のパーティションがパーティションHOGEである場合(S902のYES)、S906で、CPU12は、CSフラグのオン情報又はオフ情報をCSS起動と設定する。
【0196】
S908で、CPU12は、リード対象のファイルのオーナは特定のオーナ(オーナFUGA)であるか否かを判定する。リード対象のファイルのオーナがオーナFUGAではない場合(S908のNO)、S910で、CPU12は、CSフラグのスロット識別子をあるスロット(ここでは、スロット3)に設定し、CSフラグのCPM44の領域識別子をある領域(ここでは、cpm_addr1)に設定し、処理を終了する。
【0197】
リード対象のファイルのオーナがオーナFUGAである場合(S908のYES)、S912で、CPU12は、CSフラグのスロット識別子をあるスロット(ここでは、スロット4)に設定する。
【0198】
S914で、CPU12は、リード対象のファイルの属性が「他者は読み出し禁止」であるか否かを判定する。リード対象のファイルの属性が「他者は読み出し禁止」である場合(S914のYES)、S916で、CPU12は、CSフラグのCPM44の領域識別子をある領域(ここでは、cpm_addr3)に設定し、処理を終了する。
【0199】
リード対象のファイルの属性が「他者は読み出し禁止」ではない場合(S814のNO)、S918で、CPU12は、CSフラグのCPM44の領域識別子をある領域(ここでは、cpm2)に設定し、処理を終了する。
【0200】
第6実施形態では、ホスト10がCSフラグ生成処理において、ライト対象のパーティション番号、ライト対象ファイルのオーナ、ファイル属性等の条件を加味して、CSS46の起動又は停止、起動時のスロット識別子、及び起動時のCSパラメータ(の格納領域の領域識別子)をCSフラグに設定する。
【0201】
図20は、CPM44とCSS46の一例を示す。CPM44の領域cpm1、cpm2、及びcpm3には暗号鍵A、B、及びCがそれぞれ格納される。CSS46のスロット1、スロット2、スロット3、及びスロット4は、それぞれ暗号化方式1の暗号化プログラム、暗号化方式2の暗号化プログラム、暗号化方式1の復号プログラム、及び暗号化方式2の復号プログラムに対応する。
【0202】
第6実施形態によれば、ホスト10がCSフラグに設定した条件(CSS46の起動又は停止、起動時のスロット識別子、及び起動時のCSパラメータ(の格納領域の領域識別子))に応じて、CS30のライト時やリード時に、CSS46の暗号化処理や復号処理が、CSパラメータで指定した暗号鍵や暗号化方式により実施される。
【0203】
第7実施形態
第5実施形態におけるホスト10のCPU12のプログラムフローとCS30のCSS46のプログラムフローを第7実施形態として説明する。
【0204】
図21は、CPU12のライトコマンド発行時のCSフラグ生成処理の流れの一例を示すフローチャートである。CSフラグ生成処理が開始されると、S1002で、CPU12は、ライト対象のパーティションは特定のパーティション(ここでは、パーティションHOGE)であるか否かを判定する。
【0205】
ライト対象のパーティションがパーティションHOGEである場合(S1002のYES)、S1004で、CPU12は、CSフラグのオン情報又はオフ情報をCSS起動(オン)と設定し、処理を終了する。
【0206】
ライト対象のパーティションがパーティションHOGEではない場合(S1002のNO)、S1006で、CPU12は、CSフラグのオン情報又はオフ情報をCSS停止(オフ)と設定し、処理を終了する。
【0207】
図22は、CPU12のリードコマンド発行時のCSフラグ生成処理の流れの一例を示すフローチャートである。CSフラグ生成処理が開始されると、S1102で、CPU12は、リード対象のパーティションは特定のパーティション(ここでは、パーティションHOGE)であるか否かを判定する。
【0208】
リード対象のパーティションがパーティションHOGEである場合(S1102のYES)、S1104で、CPU12は、CSフラグのオン情報又はオフ情報をCSS起動(オン)と設定し、処理を終了する。
【0209】
ライト対象のパーティションがパーティションHOGEではない場合(S1002のNO)、S1106で、CPU12は、CSフラグのオン情報又はオフ情報をCSS停止(オフ)と設定し、処理を終了する。
【0210】
図23は、ライト動作におけるCSS46の処理を示すフローチャートである。ライトコマンド連動のCSS46が開始されると、S1202で、CSS46は、ライト対象のデータは特定のワード(ここでは、password)を含むか否かを判定する。
【0211】
ライト対象のデータがワードpaswordを含む場合(S1202のYES)、S1204で、CSS46は、ライトデータを暗号化方式1で暗号化する。S1206で、CSS46は、暗号化方式1で暗号化したことを示すCS付属情報cs_attr(1)をデバイスバッファ42に書き込む。CS付属情報cs_attr(1)はデバイスバッファ42からNANDメモリ32に転送されてもよい。
【0212】
ライト対象のデータがワードpaswordを含まない場合(S1202のNO)、S1208で、CSS46は、ライトデータを暗号化方式2で暗号化する。S1210で、CSS46は、暗号化方式2で暗号化したことを示すCS付属情報cs_attr(2)をデバイスバッファ42に書き込む。CS付属情報cs_attr(2)はデバイスバッファ42からNANDメモリ32に転送されてもよい。
【0213】
図24は、リード動作におけるCSS46の処理を示すフローチャートである。リードコマンド連動のCSS46が開始されると、S1302で、CSS46は、デバイスバッファ42又はNANDメモリ32からCS付属情報を読み出す。S1304で、CSS46は、CS付属情報はCS付属情報cs_attr(1)であるか否かを判定する。
【0214】
CS付属情報はCS付属情報cs_attr(1)である場合(S1304のYES)、S1306で、CSS46は、読み出した暗号化データを暗号化方式1に対応する復号方式1で復号し、処理を終了する。
【0215】
CS付属情報はCS付属情報cs_attr(2)である場合(S1304のNO)、S1308で、CSS46は、読み出した暗号化データを暗号化方式2に対応する復号方式2で復号し、処理を終了する。
【0216】
第7実施形態では、ホスト10がCSフラグ生成処理において、ライト対象のパーティション番号を加味して、CSS46の起動又は停止を指定する。
【0217】
第7実施形態によれば、ライトコマンド連動のCSS46は暗号化処理を行い、リードコマンド連動のCSS46は復号処理を行う。ライトコマンド連動のCSS46は、暗号化処理において、lbaデータを確認し、特定の文字列passwordを含むか否かを加味して、暗号化方式を切り替え、どの方式で暗号化したかを示す情報をCS付属情報に設定する。リードコマンド連動のCSS46は、復号処理において、CS付属情報を読み出し、設定された暗号化方式に対応した方式の復号処理を実施する。これにより、ホスト10がCS付属情報を管理することなく、CS30は所望の処理を実施することができる。
【0218】
第8実施形態
本実施形態では、第5実施形態の第3変形例のCS30を用いた場合の、ホスト10のCPU12のプログラムフローとCS30のCSS46のプログラムフローを第8実施形態として説明する。
【0219】
図25は、CPU12のライトコマンド発行時のCSフラグ生成処理の流れの一例を示すフローチャートである。CSフラグ生成処理が開始されると、S1402で、CPU12は、ライト対象のパーティションは特定のパーティション(ここでは、パーティションHOGE)であるか否かを判定する。
【0220】
ライト対象のパーティションがパーティションHOGEではない場合(S1402のNO)、S1404で、CPU12は、CSフラグのオン情報又はオフ情報をCSS停止(オフ)と設定し、処理を終了する。
【0221】
ライト対象のパーティションがパーティションHOGEである場合(S1402のYES)、S1406で、CPU12は、CSフラグのオン情報又はオフ情報をCSS起動(オン)と設定する。S1408で、CPU12は、ライト対象のファイルのオーナがオーナFUGAであるか否かを判定する。
【0222】
ライト対象のファイルのオーナがオーナFUGAではない場合(S1408のNO)、S1410で、CPU12は、CSフラグのスロット識別子をあるスロット(ここでは、スロット1)に設定し、CSフラグのCSパラメータをあるパラメータ(ここでは、パラメータ1)に設定し、処理を終了する。
【0223】
ライト対象のファイルのオーナがオーナFUGAである場合(S1408のYES)、S1412で、CPU12は、CSフラグのスロット識別子をあるスロット(ここでは、スロット2)に設定する。
【0224】
S1414で、CPU12は、ライト対象のファイルの属性が「他者は読み出し禁止」であるか否かを判定する。ライト対象のファイルの属性が「他者は読み出し禁止」である場合(S1414のYES)、S1416で、CPU12は、CSフラグのCSパラメータをあるパラメータ(ここでは、パラメータ3)に設定し、処理を終了する。
【0225】
ライト対象のファイルの属性が「他者は読み出し禁止」ではない場合(S1414のNO)、S1418で、CPU12は、CSフラグのCSパラメータをあるパラメータ(ここでは、パラメータ2)に設定し、処理を終了する。
【0226】
図26は、リードコマンド発行時のCPU12のCSフラグ生成処理の流れの一例を示すフローチャートである。CSフラグ生成処理が開始されると、S1502で、CPU12は、CSフラグのオン情報又はオフ情報をCSS起動(オン)と設定し、スロット識別子をあるスロット(ここでは、スロット3)に設定し、処理を終了する。
【0227】
図27は、ライト動作におけるCSS46の処理を示すフローチャートである。
【0228】
図27(a)は、スロット1に配置されたCSS46の処理を示すフローチャートである。スロット1のライトコマンド連動のCSS46が開始されると、S1602で、CSS46は、ライト対象のデータをCSパラメータで指定される暗号鍵を用いてCSパラメータで指定される暗号化方式1で暗号化する。S1604で、CSS46は、CPM44からデバイスバッファ42へCS付属情報をセットする。CS付属情報は、CSフラグの中のオン情報又はオフ情報の値、暗号化方式を示す情報、及び暗号鍵を格納する領域を示すCSパラメータを含む。CS付属情報はデバイスバッファ42からNANDメモリ32に転送されてもよい。
【0229】
図27(b)は、スロット2に配置されたCSS46の処理を示すフローチャートである。スロット2のライトコマンド連動のCSS46が開始されると、S1612で、CSS46は、CSパラメータで指定される暗号鍵を用いて暗号化方式2でライト対象のデータを暗号化する。S1614で、CSS46は、CPM44からデバイスバッファ42へCS付属情報をセットする。CS付属情報は、CSフラグ中のオン情報又はオフ情報の値、暗号化方式を示す情報、及び暗号鍵を格納する領域を示すCSパラメータを含む。CS付属情報はデバイスバッファ42からNANDメモリ32に転送されてもよい。
【0230】
図28は、スロット3に配置されたリードコマンド連動のCSS46の処理を示すフローチャートである。CCSS46が開始されると、S1702で、CSS46は、CS付属情報を読み出す。S1704で、CSS46は、CS付属情報のうちのCSフラグが含む情報はCSS46の起動又は停止を指定するかを判定する。CSフラグが含む情報はCSS46の停止を指定する場合、CSS46は何もしない(S1706)で、処理を終了する。
【0231】
CSフラグがCSS46の起動を指定する場合、S1708で、CSS46は、CS付属情報のうちの暗号化方式を示す情報は暗号化方式1又は暗号化方式2を指定するかを判定する。暗号化方式を示す情報は暗号化方式1を指定する場合、S1710で、CSS46は、CS付属情報の中のCSパラメータで指定されるCPM44の領域に格納されている暗号鍵Aを用いてデータを復号し、処理を終了する。
【0232】
暗号化方式を示す情報は暗号化方式2を指定する場合、S1712で、CSS46は、CS付属情報の中のCSパラメータで指定されるCPM44の領域に格納されている暗号鍵Bを用いてデータを復号し、処理を終了する。
【0233】
第8実施形態では、第7実施形態と同様、ホスト10がライトコマンドを発行する際、ライト対象のパーティション、ファイルオーナ、及びファイル属性等の条件を加味して、CSS46の起動又は停止、起動時のスロット番号、及び起動時のCSパラメータを指定する。第8実施形態では、第6実施形態や第7実施形態とは異なり、ホスト10がリードコマンドを発行する際、CSS46の起動を指定するようにCSフラグのオン情報又はオフ情報を設定し、CSフラグのプログラム選択情報は特定のスロット番号を指定するが、それ以外のパラメータ制御は行われない。
【0234】
ライトコマンドに連動して起動されるスロット1、スロット2のCSS46では、CS付属情報の設定処理において、CSS46の起動、暗号化方式、及びCSパラメータを設定する。ここで、CSS46の停止が設定されている場合、CS付属情報はデフォルト状態であり、CSS46の停止が設定されることを前提とする。
【0235】
リードコマンドに連動して起動されるスロット3のCSS46では、読み出したCS付属情報(CSフラグ、暗号鍵)を用いて、CSS46の起動又は停止に応じて、復号の要否を分岐し、どの暗号化方式に従うか決定し、どの暗号鍵で復号するのかを判断する。このようにCS30がCS付属情報の値を利用することで、ホスト10の処理の軽減が可能となる。
【0236】
図29は、第8実施形態の変形例におけるホスト10のCPU12のライトコマンド発行時のCSS46の処理の一例を示すフローチャートである。スロット1に配置されたライトコマンド連動のCSS46が開始されると、S1802で、CSS46は、ライト対象のlbaデータは特定のワード(ここでは、confidential)を含むか否かを判定する。
【0237】
ライト対象のlbaデータがワードconfidentialを含む場合(S1802のYES)、S1804で、CSS46は、ライトデータをCSパラメータで指定されるCPM44の領域に格納されている暗号鍵を用いて暗号化方式1で暗号化する。S1806で、CSS46は、CSS46の起動、暗号化方式1、及び暗号鍵Aを示す情報を含むCS付属情報cs_attr(A)をデバイスバッファ42に書き込み、処理を終了する。
【0238】
ライト対象のlbaデータがワードconfidentialを含まない場合(S1802のNO)、CSS46は、ライトデータを暗号化せずに(S1808)、S1810で、CSS46は、CSS46の停止を示す情報を含むCS付属情報cs_attr(B)をデバイスバッファ42に書き込み、処理を終了する。
【0239】
この変形例で、lbaデータのコンテンツに応じて処理の分岐を行っている点は、第6実施形態と同じである。しかし、条件分岐の後、暗号化しない処理(S1808)と、CS付属情報にCSS46を停止する情報を設定する処理(S1810)のように、ホスト10からの指示をCS30の内部で上書きするような動作をする。
【0240】
このような動作であっても、図28に示した第8実施形態のスロット3のCSS46が判断処理を行うことで、リード時のデータ処理を矛盾なく行うことができる。
【0241】
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を生成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【符号の説明】
【0242】
10…ホスト、14…ホストバッファ、20…コマンドキュー、30…CS、32…NANDメモリ、36…ファームウェア、42…デバイスバッファ、44…CPM、46…CSS
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24
図25
図26
図27
図28
図29