(57)【要約】【課題】フラッシュメモリを備えた半導体記憶装置において、データのバックアップを利用可能にする。【解決手段】半導体記憶装置内において、読み出し要求で指定可能な論理アドレスの１つから、その論理アドレスを指定して書込まれたデータを格納している少なくとも２つのページの物理アドレスを検知するためのアドレス変換テーブルを備える。また、半導体記憶装置内において、各ページに割当てられた１つのページ状態を検知するためのページ状態レジスタを備え、検知しうるページ状態には、少なくとも（１）最新データ格納状態、（２）非最新データ格納状態、（３）無効データ格納状態、（４）未書込状態の４つが含まれるようにする。そして、アドレス変換テーブルとページ状態レジスタを利用することで、ホスト装置からの１つの論理アドレスの指定に対して、少なくとも２つのデータ（最新のデータ／過去のデータ）を読み出し可能にする。【選択図】図１
2008159013.tif 000002
【特許請求の範囲】
【請求項１】
データを格納するメモリチップと、前記メモリチップを制御するメモリコントローラと、を備えて、
前記メモリコントローラは、読み出し要求または書き込み要求を受信し、前記読み出し要求または書き込み要求に含まれる論理アドレスに基づいて前記メモリチップのデータを読み書きする半導体記憶装置であって、
前記メモリコントローラは、前記メモリチップに格納された第１のデータが第１の論理アドレスへの読み出し要求により出力可能であるときに、前記第１の論理アドレスへの書込要求で第２のデータが入力された後、前記第１の論理アドレスへの読み出し要求を受信したときに前記第１のデータまたは前記第２のデータのいずれかを選択的に出力することを特徴とする半導体記憶装置。
【請求項２】
データを格納するメモリチップと、前記メモリチップを制御するメモリコントローラと、を備えて、
前記メモリコントローラは、ホストから読み出し要求または書き込み要求を受信し、前記読み出し要求または書き込み要求に含まれる論理アドレスに基づいて前記メモリチップのデータを読み書きする半導体記憶装置であって、
前記メモリコントローラは、第１の論理アドレスを指定したホストからの書込要求に応じて第１のデータを格納し、
前記第１のデータを格納した後に、前記第１の論理アドレスを指定したホストからの書込要求に応じて第２のデータを格納し、
前記第１のデータと第２のデータを格納した後に、前記第１の論理アドレスを指定したホストからの読み出し要求に応じて、前記メモリコントローラが前記第１のデータと前記第２のデータのいずれかを選択的に出力することを特徴とする半導体記憶装置。
【請求項３】
請求項１または請求項２に記載の半導体記憶装置であって、
前記メモリチップはフラッシュメモリで構成され、
前記メモリコントローラは、前記フラッシュメモリを制御するために前記フラッシュメモリに接続され、
前記フラッシュメモリは、前記メモリコントローラが一括消去可能なブロックを複数含み、
前記ブロックは、前記メモリコントローラが書込単位とする複数のページに分割され、
前記メモリコントローラは、前記第１のデータおよび前記第２のデータを異なるページに格納することを特徴とする半導体記憶装置。
【請求項４】
請求項３に記載の半導体記憶装置であって、
前記メモリコントローラは、
前記書き込み要求と読み出し要求として、少なくとも１種類の書込要求と、少なくとも２種類の読み出し要求とを受け付けて、
前記メモリコントローラは、前記第１の論理アドレスを指定した前記書込要求に応じて入力された第１のデータを第１のページに格納し、
前記第１のデータを格納した後、前記メモリコントローラは、前記第１の論理アドレスを指定した前記書込要求に応じて入力された第２のデータを第２のページに格納し、
前記第１のデータと第２のデータを格納した後、前記メモリコントローラは、前記第１の論理アドレスを指定した第１の読み出し要求に応じて、前記第１のデータを前記第１のページから読み出し、
前記第１の論理アドレスを指定した第２の読み出し要求に応じて、前記第２のデータを前記第２のページから読み出すことを特徴とする半導体記憶装置。
【請求項５】
請求項３に記載の半導体記憶装置であって、
前記メモリコントローラは、
前記書き込み要求と読み出し要求として、少なくとも１種類の書込要求と、少なくとも２種類の読み出し要求とを受け付けて、
前記メモリコントローラは、前記第１の論理アドレスを指定した前記書込要求に応じて入力された第１のデータを、少なくとも１つのページに格納し、
前記第１のデータを格納した後、前記メモリコントローラは、前記第１の論理アドレスを指定した前記書込要求に応じて入力された第２のデータを、少なくとも１つの前記ページに格納し、
前記第１のデータと第２のデータを格納した後、前記メモリコントローラは、前記第１の論理アドレスを指定した第１の読み出し要求に応じて、前記第１のデータを格納した少なくとも１つの前記ページからデータを読み出し、
前記第１の論理アドレスを指定した第２の読み出し要求に応じて、前記第２のデータを格納した少なくとも１つの前記ページから読み出すことを特徴とする半導体記憶装置。
【請求項６】
請求項５に記載の半導体記憶装置であって、
前記読み出し要求で指定された論理アドレスの１つから、当該論理アドレスに対応して書込まれたデータを格納している少なくとも２つの前記ページを識別するための物理アドレスを格納したアドレス変換テーブルを、不揮発性の記憶手段に保持することを特徴とする半導体記憶装置。
【請求項７】
請求項５に記載の半導体記憶装置であって、
前記ページに割当てられた１つのページ状態を格納したページ状態レジスタを、不揮発性の記憶手段に保持し、
前記メモリコントローラは、前記ページ状態として、少なくとも、
（１）当該ページに対応する前記論理アドレスを指定して最後に書込まれたデータを格納した状態、
（２）当該ページに対応する前記論理アドレスを指定して書込まれたデータのうち最後のものでない１つを格納した状態、
（３）無効データを格納した状態、
（４）当該ページを含む前記ブロックが消去されて以来、データが未書込の状態、
のいずれかひとつを設定することを特徴とする半導体記憶装置。
【請求項８】
請求項６に記載の半導体記憶装置であって、
前記不揮発性記憶手段が、前記フラッシュメモリであることを特徴とする半導体記憶装置。
【請求項９】
請求項６に記載の半導体記憶装置であって、
前記アドレス変換テーブルは、ひとつの論理アドレスについて、最後に書き込まれたデータの格納位置を指し示す第１の物理アドレスと、更新前のデータを指し示す第２の物理アドレスとを含むことを特徴とする半導体記憶装置。
【請求項１０】
一括消去可能な複数のブロックと、前記ブロックを複数の領域に分割した複数のページとを備えてデータを格納するフラッシュメモリと、
前記フラッシュメモリへの書き込みまたは読み出しを前記ページ単位で制御し、前記ブロック単位で一括消去を制御するメモリコントローラと、を備え、
前記メモリコントローラは、ホストから受信した要求に含まれる論理アドレスに基づいて前記メモリチップのデータを読み書きする半導体記憶装置であって、
前記メモリコントローラは、
前記受信した要求が書き込み要求のときには、最新データの書き込み要求とスナップショット取得要求または解放要求の何れであるかを判定し、前記受信した要求が読み出し要求のときには、前記最新データの読み出し要求とスナップショットの読み出し要求の何れであるかを判定する要求判定部と、
前記要求に含まれる論理アドレスに対応する前記ページの物理アドレスを管理するアドレス変換部と、
前記各ブロックの前記各ページ毎に、格納されているデータが有効または無効あるいは未書き込みのいずれであるかを管理するページ状態設定部と、
前記スナップショット取得要求または読み出し要求あるいは解放要求があったときに、スナップショットの世代を管理するスナップショット管理部と、
前記要求判定部が判定した前記要求に含まれる論理アドレスから、前記アドレス変換部とページ状態設定部及びスナップショット管理部を参照して、前記要求に応じたアクセスを行うページの物理アドレスを決定するアクセス先決定部と、
前記決定したページに対して前記要求に応じたアクセスを行うアクセス制御部と、
を備え、
前記アドレス変換部は、
前記最新のデータを格納するページの物理アドレスを論理アドレス毎に格納する第１物理アドレスグループと、
前記スナップショットを格納するページの物理アドレスを論理アドレス毎に格納し、かつスナップショットの世代毎に物理アドレスを格納する第２物理アドレスグループと、を有し、
前記スナップショット管理部は、
前記前記第２物理アドレスグループを構成するスナップショットの世代毎のアドレスグループの有効または無効を設定することを特徴とする半導体記憶装置。
【請求項１１】
請求項１０に記載の半導体記憶装置であって、
前記アクセス先決定部は、
前記要求が最新データの書き込み要求のときには、前記ページ状態設定部を参照して未書き込みのページの物理アドレスを前記要求に含まれる論理アドレスのアクセス先として選択し、当該ページに書き込んだ後に前記アドレス変換部の前記論理アドレスに対応する第１物理アドレスグループを前記選択したページの物理アドレスで更新し、前記ページ状態設定部の当該ページの状態を有効に設定し、更新前の当該論理アドレスに対応する第１物理アドレスグループの物理アドレスに対応するページ状態設定部の当該ページの状態を無効に設定することを特徴とする半導体記憶装置。
【請求項１２】
請求項１０に記載の半導体記憶装置であって、
前記アクセス先決定部は、
前記要求がスナップショット取得要求のときには、前記ホストから指令された世代に対応する第２物理アドレスグループのアドレスグループに、前記第１物理アドレスグループの値を複写し、前記スナップショット管理部の前記世代を有効として設定することを特徴とする半導体記憶装置。
【請求項１３】
請求項１０に記載の半導体記憶装置であって、
前記アクセス先決定部は、
前記要求が最新データの読み出し要求のときには、前記第１物理アドレスグループから前記要求に含まれる論理アドレスに対応するページに格納された物理アドレスをアクセス先として選択することを特徴とする半導体記憶装置。
【請求項１４】
請求項１０に記載の半導体記憶装置であって、
前記アクセス先決定部は、
前記要求がスナップショットの読み出し要求のときには、前記ホストから指令された世代に対応する第２物理アドレスグループのアドレスグループから、前記要求に含まれる論理アドレスに対応するページに格納された物理アドレスをアクセス先として選択することを特徴とする半導体記憶装置。
【請求項１５】
請求項１０に記載の半導体記憶装置であって、
前記アクセス先決定部は、
前記要求がスナップショット解放要求のときには、前記ホストから指令された世代に対応する第２物理アドレスグループのアドレスグループを構成するページの物理アドレスが他のアドレスグループに存在するか否かを判定し、他のアドレスグループに前記ページの物理アドレスが存在しない場合には、当該ページに対応する前記ページ状態設定部の値を無効として設定し、前記世代に対応する第２物理アドレスグループのアドレスグループの値を消去し、当該世代に対応する前記スナップショット管理部の値を無効として設定することを特徴とする記憶装置。
【請求項１６】
請求項１０に記載の半導体記憶装置であって、
前記メモリコントローラは、
前記未書き込みのページが予め設定した値未満となったことを監視する空きブロック監視部と、
前記未書き込みのページが予め設定した値未満となったときには、前記ページ状態設定部を参照して前記複数のブロックから無効のページが最も多いブロックを選択し、当該ブロックを一括消去し、当該ブロックに対応するページ状態設定部を未書き込みに設定するクリーンアップ処理部と、を有することを特徴とする半導体記憶装置。
【請求項１７】
請求項１５に記載の半導体記憶装置であって、
前記クリーンアップ処理部は、前記一括消去の対象として選択されたブロックについて、前記ページ状態設定部から有効なページを検索し、有効なページがある場合には、前記ページ状態設定部から他のブロックの未書き込みのページを選択し、前記有効なページのデータを前記未書き込みのページへ書き込んで退避させることを特徴とする半導体記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電気的に書き換え可能な不揮発性メモリを使用した半導体記憶装置に関し、特に不揮発性メモリとしてフラッシュメモリを用いた記憶装置において、メモリ内容のスナップショット機能の実装方法に関する。
【背景技術】
【０００２】
フラッシュメモリを搭載し、そこに格納されたデータが変更されるたびに消去サイクルを行うことを回避するメモリ制御機能を有する半導体記憶装置が知られている（例えば、特許文献１）。ここで、消去サイクルとは消去すべきブロック内のメモリセルを完全にプログラム(データの書込)してから消去することである。本記憶装置は、ハードディスクのように変更対象のデータ自身を更新データで上書きせずに、更新データをメモリブロックの未書込部分にプログラムすることによって、消去サイクルを回避する。ただし、プログラム済みのメモリブロックは定期的にクリーンアップされる。以上の処理を行うために、本記憶装置は、各メモリブロック内のセクタが未使用／使用中／無効であることを示すフラグや、外部から与えられる論理アドレスとメモリブロックの物理アドレスとを直接対応付けるマップを搭載する。
【特許文献１】米国特許第５，４７９，６３８号明細書
【発明の開示】
【発明が解決しようとする課題】
【０００３】
ストレージシステムに搭載されているバックアップ機能の１つとしてスナップショット機能がある。このスナップショットにより、ユーザは過去のデータファイルの内容を保存することで、後にそれを復元することが可能となる。特許文献１のような従来の半導体記憶装置は、変更対象のデータを上書きせずに更新データを書込むため、更新前後のデータがメモリ上に一時的に共存するという特徴を持つ。これは、過去のデータファイルの内容を保存することになる。しかし、従来の半導体記憶装置は、更新前のデータを格納しているメモリ部分を無効として扱い、記憶装置外部からアクセスできないように制御する。よって、ユーザが過去のデータファイルを復元したくなったとしても、上記従来例では該当するデータファイルが半導体記憶装置内のどこかに残っているにも拘わらず、ユーザは更新前のデータにアクセスすることができず、有効に利用できない、という問題があった。
【０００４】
また、ハードディスクを記録媒体として用いるストレージシステムにおいてスナップショット機能を実現する場合、記録媒体制御装置（コントローラ）が、データファイルの過去の内容および現在の内容（または過去の内容からの差分）をハードディスク上の別々の論理アドレスに書き込んで、これらのアドレスを管理する必要がある。このため最新のデータとスナップショットによる過去のデータへアクセスする際には、複数の論理アドレスを変換する必要があり、このアドレス変換のために記録媒体制御装置の負荷が増大する、という問題がある。
【０００５】
そこで、本発明は上記問題点に鑑みてなされたもので、フラッシュメモリを備えた半導体記憶装置において、データのバックアップを利用可能にし、さらにコントローラの負荷を低減することを目的とする。
【課題を解決するための手段】
【０００６】
本発明は、ホストのデータを読み書きする記憶装置として、第１の論理アドレスを指定したホストからの書込要求に応じて第１のデータを格納した後、第１の論理アドレスを指定したホストからの書込要求に応じて第２のデータを格納し、第１のデータと第２のデータを格納した後、第１の論理アドレスを指定したホストからの読み出し要求に応じて、第２のデータか第１のデータのいずれかを選択的に出力可能であることを特徴とする記憶装置を提供する。
【０００７】
また、本発明は、フラッシュメモリとメモリコントローラとを備え、メモリコントローラはフラッシュメモリを制御するためにフラッシュメモリに接続され、フラッシュメモリはメモリコントローラが一括消去可能なブロックを複数含み、ブロックは前記メモリコントローラが書込単位とする複数のページに分割され、第１のデータおよび第２のデータを異なるページに格納することを特徴とする記憶装置を提供する。
【０００８】
また、本発明は、前記記憶装置内において、読み出し要求で指定可能な論理アドレスの１つから、その論理アドレスを指定して書込まれたデータを格納している少なくとも２つのページの物理アドレスを格納するためのアドレス変換テーブルを、不揮発性の記憶手段に保持することを特徴とする記憶装置を提供する。
【０００９】
また、本発明は、前記記憶装置内において、各ページに割当てられた１つのページ状態を格納するページ状態レジスタを、不揮発性の記憶手段に保持し、メモリコントローラが検知しうるページ状態には、少なくとも（１）対応する論理アドレスを指定して最後に書込まれたデータを格納した状態、（２）対応する論理アドレスを指定して書込まれた非最新データを格納した状態、（３）もはや記憶する必要のない無効データを格納した状態、（４）消去されて以来データが未書込の状態、の４つが含まれることを特徴とする記憶装置を提供する。
【００１０】
また、一括消去可能な複数のブロックと、前記ブロックを複数の領域に分割した複数のページとを備えてデータを格納するフラッシュメモリと、前記フラッシュメモリへの書き込みまたは読み出しを前記ページ単位で制御し、前記ブロック単位で一括消去を制御するメモリコントローラと、を備え、前記メモリコントローラは、ホストから受信した要求に含まれる論理アドレスに基づいて前記メモリチップのデータを読み書きする半導体記憶装置であって、前記メモリコントローラは、前記受信した要求が書き込み要求のときには、最新データの書き込み要求とスナップショット取得要求または解放要求の何れであるかを判定し、前記受信した要求が読み出し要求のときには、前記最新データの読み出し要求とスナップショットの読み出し要求の何れであるかを判定する要求判定部と、前記要求に含まれる論理アドレスに対応する前記ページの物理アドレスを管理するアドレス変換部と、前記各ブロックの前記各ページ毎に、格納されているデータが有効または無効あるいは未書き込みのいずれであるかを管理するページ状態設定部と、前記スナップショット取得要求または読み出し要求あるいは解放要求があったときに、スナップショットの世代を管理するスナップショット管理部と、前記要求判定部が判定した前記要求に含まれる論理アドレスから、前記アドレス変換部とページ状態設定部及びスナップショット管理部を参照して、前記要求に応じたアクセスを行うページの物理アドレスを決定するアクセス先決定部と、前記決定したページに対して前記要求に応じたアクセスを行うアクセス制御部と、を備え、前記アドレス変換部は、前記最新のデータを格納するページの物理アドレスを論理アドレス毎に格納する第１物理アドレスグループと、前記スナップショットを格納するページの物理アドレスを論理アドレス毎に格納し、かつスナップショットの世代毎に物理アドレスを格納する第２物理アドレスグループと、を有し、前記スナップショット管理部は、前記前記第２物理アドレスグループを構成するスナップショットの世代毎のアドレスグループの有効または無効を設定する。
【発明の効果】
【００１１】
本発明によれば、記録媒体制御装置（メモリコントローラ）からの要求に従って任意の時点でのデータの内容を半導体記憶装置内に保存させることができるため、ひとつの論理アドレスで更新後のデータと更新前のデータとを利用することができる。さらに、半導体記憶装置を記録媒体として用いるストレージシステムにおいてスナップショット機能を実現する際には、記録媒体制御装置への負荷が低減されるという効果を奏する。
【００１２】
また、半導体記憶装置に書き込んだデータが更新される度に、スナップショットの世代を更新することができ、半導体記憶装置の可用性を向上させることができる。
【発明を実施するための最良の形態】
【００１３】
以下、本発明の実施の形態を図面を参照して説明する。
【００１４】
図１は、第１の実施形態を示し、本発明を適用した半導体記憶装置１０００の内部構成を簡単に表したものである。半導体記憶装置１０００は、ディスクインタフェース１０１０、メモリコントローラ１０２０、フラッシュメモリ１０４０、不揮発性ＲＡＭ１０３０で構成される。
【００１５】
ここで、フラッシュメモリ１０４０は半導体記憶装置１０００の記憶容量に応じて、十分な容量を持つ１個以上のメモリチップ１０４１〜１０４３から構成される。また、不揮発性ＲＡＭ１０３０は、バイト単位でデータの読み書きが可能な半導体メモリで、例えば磁気抵抗メモリや相変化メモリなどである。これは、フラッシュメモリ１０４０よりも書き換え寿命が長い不揮発性記憶媒体が好ましい。
【００１６】
ディスクインタフェース１０１０は、外部のホスト装置１１００と接続されるインタフェース機構であり、ホスト装置１１００から受信したリード／ライトコマンドに応答して、半導体記憶装置１０００に記憶されたリードデータをホスト装置１１００に送信したり、半導体記憶装置１０００に記憶すべきライトデータをホスト装置１１００から受信する。なお、ホスト装置１１００は、リード／ライトを要求するデータの格納先を論理アドレスによって指定する。この論理アドレスはフラッシュメモリ１０４０を直接アクセスする時に用いる物理アドレスとは異なる仮想的なアドレスである。
【００１７】
ディスクインタフェース１０１０の機構およびコマンドやデータの送受信のプロトコルについては、標準的なハードディスク装置と互換性のあるインタフェース仕様（例えば、パラレルＡＴＡ、シリアルＡＴＡ、ＳＣＳＩ）に準拠することが好ましい。
【００１８】
フラッシュメモリ１０４０の各メモリチップ１０４１〜１０４３は、いずれもページを単位として書き込まれ、複数のページからなるブロックを単位として消去される構造を持った不揮発性半導体メモリである。各チップには複数のブロックが含まれている。
【００１９】
メモリコントローラ１０２０は、ディスクインタフェース１０１０、フラッシュメモリ１０４０、不揮発性ＲＡＭ１０３０と接続され、それらを制御するマイクロプロセッサである。メモリコントローラ１０２０は、ディスクインタフェース１０１０を介してホスト装置１１００から受信したコマンド（上述のリード／ライトコマンドなど）の解釈や、ディスクインタフェース１０１０を介してのホスト装置１１００との間のデータ送受信や、不揮発性ＲＡＭ１０３０へのアクセス（リード／ライト）、各メモリチップ１０４１〜１０４３へのアクセス（リード／ライト／消去）を実行する。
【００２０】
メモリコントローラ１０２０が解釈可能な５種類のコマンドとその機能を以下に示す。
・リードコマンド…論理アドレスで指定された位置に最後に格納されたデータを読み出す。
・ライトコマンド…論理アドレスで指定された位置にデータを書き込む。
・スナップショットコマンド…その時点での各論理アドレス位置に格納されているデータを、後に読み出しできるようにする。
・リカバリリードコマンド…論理アドレスで指定された位置に、スナップショットコマンドを受信した時点で格納されていたデータを読み出す。
・通常動作開始コマンド…各論理アドレス位置において、最後に格納されたデータのみを読み出しできるようにする。
【００２１】
メモリコントローラ１０２０は、ホスト装置１１００から指定された論理アドレスに対応するデータが、どのメモリチップ内のどの物理アドレスのページに格納されているかを管理するために、論理アドレスと物理アドレスとの対応付けをリストにしたアドレス変換テーブル１０３１を使用する。
【００２２】
このアドレス変換テーブル１０３１では、１つの論理アドレスに対して２つの物理アドレス（以降、第１物理アドレス、第２物理アドレスと呼ぶ）を対応付ける。第１物理アドレスは、その論理アドレスに最後に書かれたデータの格納位置を示す。第２物理アドレスは、ホスト装置１１００がスナップショットを指示した時点で、その論理アドレスに書かれていたデータの格納位置を示す。
【００２３】
アドレス変換テーブル１０３１は不揮発性ＲＡＭ１０３０に格納され、メモリコントローラ１０２０が、論理アドレスと物理アドレスの対応付けの変化に応じてその内容を書き換える。ただし、アドレス変換テーブル１０３１の格納先はフラッシュメモリ１０４０の一部でもよい。
【００２４】
メモリコントローラ１０２０は、各メモリチップ内に含まれるページがそれぞれどのような状態にあるかを管理するために、ページ状態レジスタ１０３２を使用する。このページ状態レジスタ１０３２は、予め定義されたページ状態を所定のビット数（例えば４ビット）の値で符号化した状態値を格納する。ページ状態を示す状態値としては、例えば、以下の４通りを定義する。なお、各状態値は１６進数表記である。
・状態値＝０…当該ページに対応付けられた論理アドレスに向けて書込まれたデータのうち最新のものが格納されている状態
・状態値＝１…当該ページに対応付けられた論理アドレスに向けて書込まれたデータのうち最新ではないもの（更新前のデータ）が格納されている状態
・状態値＝８…もはや必要のない無効データが格納されている状態
・状態値＝Ｆ…当該ページを含むブロックが消去されて以来、データが未書込である状態
ページ状態レジスタ１０３２はブロック単位で上記状態値を保持する。例えば、あるブロックのページ状態値が“８８０Ｆ”のとき、その第１・第２ページは無効データを含み、第３ページはある論理アドレスに対応する最新データを含み、第４ページは未書込であることを意味する。なお、上記ではページの状態値のビット数を、４ビットで表現する例を示したが、状態値の種類に応じたビット数であればよく、３ビットや２ビットなど、より少ないビット数で状態値を示すようにしても良い。
【００２５】
ページ状態レジスタ１０３２は不揮発性ＲＡＭ１０３０に格納され、メモリコントローラ１０２０が、ページ状態の変化に応じてその内容を書き換える。ただし、ページ状態レジスタ１０３２の格納先はフラッシュメモリ１０４０の一部でもよい。
【００２６】
メモリコントローラ１０２０は、ホスト装置１１００が半導体記憶装置１０００のスナップショット機能を利用中であるかどうかの状態を管理するために、スナップショットフラグ１０３３を使用する。このスナップショットフラグ１０３３は不揮発性ＲＡＭ１０３０に格納され、メモリコントローラ１０２０が、利用状態の変化に応じてその内容を書き換える。ただし、スナップショットフラグ１０３３の格納先はフラッシュメモリ１０４０の一部でもよい。
【００２７】
図２および図３は、本発明を適用した半導体記憶装置１０００においてスナップショット機能を利用するときに、メモリコントローラ１０２０が行うメモリ管理処理を説明するため、フラッシュメモリ１０４０内の格納データと、不揮発性ＲＡＭ１０３０内のアドレス変換テーブル１０３１と、ページ状態レジスタ１０３２及びスナップショットフラグ１０３３について、それぞれの内容の変化の一例を順に示したものである。フラッシュメモリ１０４０内と不揮発性ＲＡＭ１０３０内のデータなどの変化の様子を図２（ａ）〜図３（ｄ）に示し、図２（ａ）から始まり、図２（ｂ）、図２（ｃ）、図２（ｄ）、図３（ａ）、図３（ｂ）、図３（ｃ）と遷移して、図３（ｄ）で終わる。
【００２８】
図示の例では説明を簡単化するため、ホスト装置１１００から指定可能な論理アドレスはセクタ単位(１セクタ＝５１２バイト)として、その範囲を０〜３の４セクタ分に限定する。また、データの読み書きにはメモリチップ内の３個のブロック（ブロックＸ２０００、ブロックＹ２０１０、ブロックＺ２０２０）のみを使用することとする。さらに、メモリチップ内の各ブロックは４つのページで構成され、各ページのサイズは５１２バイト（１セクタ）であるものとする。各ページは０〜３の数字で表し、各ページの絶対的な物理アドレスをＸ３、Ｙ０、Ｚ１のように略記する。なお、図２（ａ）で示すように、アドレス変換テーブル１０３１において、ＬＡは論理アドレス、第１ＰＡは第１物理アドレス、第２ＰＡは第２物理アドレスを意味する。なお、第１物理アドレスは、複数の論理アドレス毎に対応するページの物理アドレスをそれぞれ格納するもので、各物理アドレスは最新データを格納したページを示す。また、第２物理アドレスは、複数の論理アドレス毎に対応するページの物理アドレスをそれぞれ格納するもので、各物理アドレスは更新前（スナップショット）のデータを格納したページを示す。
【００２９】
はじめに、スナップショット機能は無効であるとし、図２（ａ）のように、ブロックＸ２０００には、物理ページアドレスのＸ０、Ｘ１、Ｘ２、Ｘ３が設定され、それぞれ論理アドレス０、１、２、３に対応するデータＡ、Ｂ、Ｃ、Ｄが既に格納されているものとする。なお、論理アドレス０，１，２，３は、メモリコントローラによって割り当てられたものである。また、ブロックＹ２０１０およびブロックＺ２０２０は消去済みで、どのページもデータが未書込とする。
【００３０】
このとき、アドレス変換テーブル１０３１において論理アドレスＬＡ＝ｎの各第１物理アドレスにはＸｎ（ｎ＝０〜３）が設定され、どの論理アドレスも第２物理アドレスが未設定である。また、ページ状態レジスタ１０３２におけるブロックＸ、Ｙ、Ｚのページ状態値はそれぞれ“００００”、“ＦＦＦＦ”、“ＦＦＦＦ”に設定され、スナップショットフラグ１０３３はＯＦＦに設定されている。つまり、図２（ａ）の状態では、アドレス変換テーブル１０３１において、論理アドレスＬＡ＝０がブロックＸ２０００を指す第１物理アドレス＝Ｘ０に対応付けられており、論理アドレスＬＡ＝１が同じくブロックＸ２０００を指す第１物理アドレス＝Ｘ１に、論理アドレスＬＡ＝２が同じくブロックＸ２０００を指す第１物理アドレス＝Ｘ２に、論理アドレスＬＡ＝３が同じくブロックＸ２０００を指す第１物理アドレス＝Ｘ３に対応付けられている。そして、ブロックＸ２０００の第１〜第４ページは、ページ状態レジスタ１０３２の「Ｘ」のように各ページの状態値は「０」であり、最新のデータが格納されていることを示す。
【００３１】
この状態から、ホスト装置１１００が以下の順で半導体記憶装置１０００にコマンドを発行することとする。
（１）論理アドレスＬＡ＝０、１にそれぞれデータＡ’、Ｂ’を書くライトコマンド
（２）スナップショットコマンド
（３）論理アドレスＬＡ＝２、３にそれぞれデータＣ’、Ｄ’を書くライトコマンド
（４）論理アドレスＬＡ＝３にデータＤ”を書くライトコマンド
（５）論理アドレスＬＡ＝０〜３のデータを読むリードコマンド
（６）論理アドレスＬＡ＝０〜３のデータを読むリカバリリードコマンド
（７）通常動作開始（スナップショット機能の解除）コマンド
（８）論理アドレスＬＡ＝１にデータＢ”を書くライトコマンド
（９）論理アドレスＬＡ＝２にデータＣ”を書くライトコマンド
図２（ｂ）は上記（１）のコマンドを受信して処理を実行した直後のフラッシュメモリ１０４０及び不揮発性ＲＡＭ１０３０の内部状態を示したものである。ライトコマンド（１）を受信すると、メモリコントローラ１０２０は、ページ状態レジスタ１０３２を参照して、論理アドレスＬＡ＝０、１に対応するブロックＸ２０００のページが状態値＝０となっており、既に最新のデータが書き込まれているので、同一の論理アドレスＬＡに対応する次のブロックであるブロックＹ２０１０のページ状態レジスタ１０３２を参照し、状態値＝Ｆ（未書込）である２つのページＹ０、Ｙ１を選択し、これらのページにそれぞれデータＡ’、Ｂ’を書き込む。
【００３２】
なお、各ブロックへのデータの書き込みは、各ブロック内の空きセクタへ所定の順序で行うもので、例えば、図２（ｂ）では各ブロックの空きページの順に書き込む。
【００３３】
次に、メモリコントローラ１０２０は、アドレス変換テーブル１０３１から論理アドレスＬＡ＝０、１に対応する各第１物理アドレスであるＸ０、Ｘ１を検知し、これらのブロックＸ２０００のページ１、２は既に最新のデータが書き込まれたので、ページ状態レジスタ１０３２のＸ０、Ｘ１のページ状態値を８（無効データ）に設定する。そして、メモリコントローラ１０２０はアドレス変換テーブル１０３１の論理アドレスＬＡ＝０、１に対応する各第１物理アドレスのアドレスに最新のデータを書き込んだブロックＹ２０１０の物理アドレスＹ０、Ｙ１を設定し、ページ状態レジスタ１０３２のＹ０、Ｙ１に対応するページ状態値を０（最新データ）に設定する。
【００３４】
スナップショット機能が無効のときには、メモリコントローラ１０２０は各ブロックの空きページへ順次新たなデータを書き込み、過去のデータは無効なデータとしてページ状態レジスタ１０３２の値を「８」に設定し、また、アドレス変換テーブル１０３１は第１物理アドレスのみを使用して、最新のデータを書き込んだブロックの物理アドレスを第１物理アドレスに設定していく。
【００３５】
次に、上記（２）のスナップショットコマンドを受信すると、メモリコントローラ１０２０は、スナップショットフラグ１０３３にＯＮを設定する。これ以降のライトコマンドは、この時点での格納データが失われないように以下のようにスナップショット機能を有効にして処理が行われる。
【００３６】
図２（ｃ）は上記（３）のライトコマンドを実行した直後の内部状態を示したものである。コマンド（３）を受信すると、メモリコントローラ１０２０は、ページ状態レジスタ１０３２を参照して、状態値＝Ｆ（未書込）である２つのページＹ２、Ｙ３を選択し、これらのページＹ２，Ｙ３にそれぞれデータＣ’、Ｄ’を書く。
【００３７】
次に、メモリコントローラ１０２０はアドレス変換テーブル１０３１から論理アドレスＬＡ＝２、３に対応する各第１物理アドレスであるＸ２、Ｘ３を検知し、それぞれの第２物理アドレスの欄にＸ２、Ｘ３を設定する。さらに、メモリコントローラ１０２０は、ページ状態レジスタ１０３２のＸ２、Ｘ３のページ状態値を「１」（スナップショットデータ）に設定する。これにより、ブロックＸ２０００のページ状態レジスタ１０３２の状態値は、「８８１１」となる。また、メモリコントローラ１０２０は、アドレス変換テーブル１０３１の論理アドレスＬＡ＝２、３に対応する最新のデータの物理アドレスを各第１物理アドレスにＹ２、Ｙ３を設定し、ページ状態レジスタ１０３２のＹ２、Ｙ３のページ状態値を０（最新データ）に設定する。これにより、ブロックＹ２０１０のページ状態レジスタ１０３２の値は「００００」となる。
【００３８】
アドレス変換テーブル１０３１は、図２（ｃ）で示すように、論理アドレスＬＡ＝２，３では、「Ａ’、Ｂ’」の最新のデータを格納したブロックＹ２０１０の物理アドレス「Ｙ２、Ｙ３」が第１物理アドレスに設定され、不要となった直前のデータ「Ａ，Ｂ」を格納したブロックＸ２０００の物理アドレス「Ｘ２、Ｘ３」が第２物理アドレスに設定される。ひとつの論理アドレスに対して２つの物理アドレス関連付けることで、ホスト装置１１００は最新のデータとスナップショットのデータにアクセスすることが可能となる。
【００３９】
図２（ｄ）、図３（ａ）は上記（４）のコマンドを処理中のフラッシュメモリ１０４０及び不揮発性ＲＡＭ１０３０の内部状態を示し、図３（ｂ）は上記（４）のコマンドが実行完了した直後のフラッシュメモリ１０４０及び不揮発性ＲＡＭ１０３０の内部状態を示したものである。論理アドレスＬＡ＝３のデータ「Ｄ”」のライトコマンド（４）を受信すると、メモリコントローラ１０２０は、ページ状態レジスタ１０３２を参照して、状態値＝Ｆ（未書込）である１つのページＺ０を選択し、当該ページＺ０にデータ「Ｄ”」を書く。
【００４０】
次に、メモリコントローラ１０２０は、アドレス変換テーブル１０３１から論理アドレスＬＡ＝３の第１物理アドレスであるＹ３を検知し、更新されたデータ「Ｄ’」に対応するページ状態レジスタ１０３２のＹ３のページ状態値を８（無効データ）に設定する。そして、アドレス変換テーブル１０３１の論理アドレスＬＡ＝３の第１物理アドレスに新たに書き込んだデータ「Ｄ”」に対応する物理アドレスＺ０を設定し、ページ状態レジスタ１０３２のＺ０のページ状態値を０（最新データ）に設定する。図２（ｄ）は、データＤ”を書き込んだ時点のフラッシュメモリ１０４０及び不揮発性ＲＡＭ１０３０の内部状態を示している。これにより、ブロックＹ２０１０のページ状態レジスタ１０３２の状態値は「０００８」となり、ブロックＺ２０２０のページ状態レジスタ１０３２の状態値は「０ＦＦＦ」となる。
【００４１】
さて、ここでメモリコントローラ１０２０は、データが未書込のページの総数が所定数（例えば、ブロックＸ〜Ｚの未書き込みの総ページ数が３個）以下になったことを契機として、論理アドレスＬＡ＝０〜３の未書き込みページの総数を増やすため、以下のようなブロッククリーンアップ処理を行う。この処理では、フラッシュメモリ１０４０の特性により、データの消去を行う際にはブロック単位で消去を行うため、最新のデータまたはスナップショットとして保存するデータがブロック内にある場合は、これらのデータを他のブロックに退避させてから当該ブロックの消去を実行する。
【００４２】
まず、メモリコントローラ１０２０は、ページ状態レジスタ１０３２を参照して、ページ状態値＝８（無効データ）のページを最も多く含むブロックＸ２０００を選択する。そして、メモリコントローラ１０２０は消去対象のブロックＸ２０００内で保存が必要なデータを格納したページ、つまりページ状態値＝０（最新のデータ）または１（スナップショットのデータ）の何れかである２つのページＸ２、Ｘ３を退避すべきページとして検出する。
【００４３】
次に、メモリコントローラ１０２０は、退避対象のページの各格納データＣ、Ｄを、今回は消去しないブロックＺ２０２０のページ状態値＝Ｆ（未書込）のページＺ１、Ｚ２にコピーする。そして、コピーが完了するとページ状態レジスタ１０３２のＸ２、Ｘ３のページ状態値をそれぞれＺ１、Ｚ２のページ状態値にコピーし、Ｘ２、Ｘ３のページ状態値を８（無効データ）に設定する。
【００４４】
そして、メモリコントローラ１０２０はアドレス変換テーブル１０３１で、ブロックＸ２０００からブロックＺ２０２０へ退避したデータのブロックＸ２０００における物理アドレスＸ２、Ｘ３が設定されている２つの欄を検索し、それぞれの欄に新たな格納先であるブロックＺ２０２０の物理アドレスＺ１、Ｚ２を設定する。
【００４５】
これにより、消去対象のブロックＸ２０００のページ状態値は、「８８８８」となって全てのページが無効データとなり、退避先のブロックＺ２０２０のページ状態値は「０１１Ｆ」となってスナップショットのデータをページ２、３に含むブロックとなる。
【００４６】
図３（ａ）はブロックＸ２０００のスナップショットをブロックＺ２０２０へ移動した後のフラッシュメモリ１０４０及び不揮発性ＲＡＭ１０３０の内部状態を示している。
【００４７】
次に、メモリコントローラ１０２０はブロックＸ２０００を消去し、ブロックＸ２０００のページ状態値＝ＦＦＦＦに設定する。図３（ｂ）はブロックＸ２０００を消去が完了した時点のフラッシュメモリ１０４０及び不揮発性ＲＡＭ１０３０の内部状態を示している。以上がブロッククリーンアップ処理である。これにより、データが未書込のページの総数は３個から５個に増える。
【００４８】
次に、上記（５）に示したリードコマンドを受信すると、メモリコントローラ１０２０は、要求された論理アドレスＬＡ０〜３を参照するため、図３（ｂ）のアドレス変換テーブル１０３１から論理アドレスＬＡ＝０、１、２、３に対応する第１物理アドレスのページＹ０、Ｙ１、Ｙ２、Ｚ０を検出し、これらの物理アドレスＹ０、Ｙ１、Ｙ２、Ｚ０が指し示すページに格納されたデータＡ’、Ｂ’、Ｃ’、Ｄ”を読み出し、ホスト装置１１００に送信する。これらは、各論理アドレスに最後に格納されたデータとなる。
【００４９】
次に上記（６）に示した論理アドレスＬＡ＝０〜３のリカバリコマンドを受信すると、メモリコントローラ１０２０は、図３（ｂ）に示したアドレス変換テーブル１０３１から論理アドレスＬＡ＝０、１に対応する第１物理アドレスのページＹ０、Ｙ１を検出し、さらに、論理アドレスＬＡ＝２、３に対応する第２物理アドレスのページＺ１、Ｚ２を検出し、これらの検出した物理アドレスが指すページに格納されたデータＡ’、Ｂ’、Ｃ、Ｄを読み出し、ホスト装置１１００に送信する。これらは、スナップショットコマンドを受信した時点で各論理アドレスＬＡに格納されていたデータとなる。なお、論理アドレスＬＡ＝０、１のデータＡ’、Ｂ’はスナップショットコマンドを受信して以来更新されていないため、論理アドレスＬＡ＝０、１の第２物理アドレスは未設定であるため、第１物理アドレスのページを参照する。
【００５０】
次に、上記（７）のスナップショット機能の解除コマンドを受信すると、メモリコントローラ１０２０は、スナップショットフラグ１０３３にＯＦＦを設定する。これ以降のリードコマンドでは、各論理アドレスに最後に格納されたデータのみが読み出し可能になる。すなわち、アドレス変換テーブル１０３１の第１物理アドレスのみを参照し、第２物理アドレスを無効として、スナップショットデータの参照を禁止する。
【００５１】
図３（ｃ）は上記（８）に示したデータＢ”のライトコマンドを実行した直後のフラッシュメモリ１０４０及び不揮発性ＲＡＭ１０３０の内部状態を示したものである。論理アドレスＬＡ＝１に対するデータ「Ｂ”」のライトコマンドを受信すると、メモリコントローラ１０２０は、ページ状態レジスタ１０３２を参照して、ページ状態値＝Ｆ（未書込）である１つのページＺ３を選択し、このブロックＺ２０２０のページ３にデータＢ”を書く。次に、メモリコントローラ１０２０は、アドレス変換テーブル１０３１から論理アドレスＬＡ＝１の第１物理アドレスであるＹ１を検知し、ページ状態レジスタ１０３２のＹ１のページ状態値を８（無効データ）に設定する。そして、アドレス変換テーブル１０３１の論理アドレスＬＡ＝１の第１物理アドレスに今回書き込みを行ったページの物理アドレス＝Ｚ３を設定し、ページ状態レジスタ１０３２のＺ３のページ状態値を０（最新データ）に設定する。
【００５２】
メモリコントローラ１０２０の書き込み処理は、ブロックの物理アドレスの先頭から末尾に向けて順次書き込みを行い、該当ブロックに空きページが無くなると、隣のブロックに書き込みを行う。このため、メモリコントローラ１０２０は、ブロックＸ２０００は全てのページが書き込み可能ではあるが、現在書き込み中のブロックＺ２０２０の空きページを消費する。
【００５３】
図３（ｄ）は上記（９）に示した論理アドレスＬＡ＝２へデータＣ”のライトコマンドを実行した直後のフラッシュメモリ１０４０及び不揮発性ＲＡＭ１０３０の内部状態を示したものである。論理アドレスＬＡ＝２へのライトコマンドを受信すると、メモリコントローラ１０２０は、ページ状態レジスタ１０３２を参照して、ページ状態値＝Ｆ（未書込）である１つのページＸ０を選択し、このページＸ０にデータＣ”を書く。メモリコントローラ１０２０は、前回書き込みを行ったブロックＺ２０２０に空きページが無いことから、次のブロックであるＸ２０００のページ状態レジスタ１０３２を参照する。メモリコントローラ１０２０は、論理アドレスＬＡ＝０〜３に割り当てられたブロックＸ２０００〜Ｚ２０２０の空きページを循環して順次使用していくため、ブロックＺ２０２０に空きページがなければ次のブロックＸ２０００を参照する。
【００５４】
次に、メモリコントローラ１０２０は、アドレス変換テーブル１０３１から論理アドレスＬＡ＝２の第１物理アドレス、第２物理アドレスであるＹ２、Ｚ１を検知し、ページ状態レジスタ１０３２のＹ２、Ｚ１のページ状態値を８（無効データ）に設定する。そして、アドレス変換テーブル１０３１の論理アドレスＬＡ＝２の第１物理アドレスに、新たに書き込んだデータＣ”の物理アドレス＝Ｘ０を設定し、第２物理アドレスをクリアする。最後に、メモリコントローラ１０２０は、新たにデータＣ”を書き込んだページ状態レジスタ１０３２のＸ０のページ状態値を０（最新データ）に設定する。
【００５５】
これにより、スナップショット機能を解除した後には更新直前のデータＣ’だけでなく、スナップショットデータＤも無効化される。
【００５６】
図４は、ホスト装置１１００から受信したコマンドについて、メモリコントローラ１０２０が実行する処理手順を示すフローチャートである。以下、その手順を説明する。
【００５７】
まず、受信したコマンドが何であるかを判定する（４０１０）。
【００５８】
上記４０１０のコマンド判定結果がスナップショットコマンドならばスナップショットフラグ１０３３をＯＮに設定し（４０２０）、コマンド処理を終える。
【００５９】
上記４０１０のコマンド判定結果が通常動作開始コマンドならばスナップショットフラグ１０３３をＯＦＦに設定し（４０３０）、コマンド処理を終える。
【００６０】
書き込んだコマンド判定結果がライトコマンドならば、ホスト装置１１００からライトするためのデータを受信し（４０４０）、ページ状態値＝Ｆのページを選択し、そのページに受信したデータを書く（４０５０）。このとき、未書き込みのページ状態値「Ｆ」の検索は、前回の書き込みの次のページから上記ブロックＸ２０００〜Ｚ２０２０へ向けて順次実行する。
【００６１】
次に、スナップショットフラグ１０３３がＯＮか調べ（４０６０）、結果が真（ＯＮ）ならばアドレス変換テーブル１０３１において書き込み先に指定された論理アドレスに対応する第２物理アドレスが未設定か否かを調べ（４０７０）、結果が真（未設定）ならばその論理アドレスに対応する第１物理アドレスの値を、この論理アドレスＬＡに対応する第２物理アドレスの欄にコピーする（４０８０）。そして、ページ状態レジスタ１０３２において上記第２物理アドレスが指すページのページ状態値を１に設定し、スナップショットであることを示す（４０９０）。次に、アドレス変換テーブル１０３１におけるこの論理アドレスに対応する第１物理アドレスの欄には、ステップ４０５０で受信データを書き込んだページの物理アドレスを設定し（４１００）、ページ状態レジスタ１０３２においてこの論理アドレスＬＡの第１物理アドレスが指すページのページ状態値を０に設定する（４１１０）。この後、ブロッククリーンアップ処理を行い（４１２０）、コマンド処理を終える。
【００６２】
一方、上記ステップ４０６０のスナップショット機能の判定結果が偽（ＯＦＦ）、またはステップ４０７０の判定結果（スナップショットの設定の有無）が偽（設定済）ならば、ページ状態レジスタ１０３２において書き込み先の論理アドレスに対応する第１物理アドレスが指すページのページ状態値を８に設定する（４１３０）。そして、スナップショットフラグ１０３３がＯＮか調べ（４１４０）、結果が真（ＯＮ）ならばステップ４１００に遷移し、偽（ＯＦＦ）ならばステップ４１５０に遷移する。
【００６３】
スナップショット機能が無効の場合のステップ４１５０では、アドレス変換テーブル１０３１において書き込み先論理アドレスに対応する第２物理アドレスが未設定かを調べ、結果が真（未設定）ならばステップ４１００に遷移し、偽（設定済）ならばページ状態レジスタ１０３２においてその第２物理アドレスが指すページのページ状態値を８（無効データ）に設定し（４１６０）、アドレス変換テーブル１０３１における書き込み先論理アドレスに対応する第２物理アドレスの欄を未設定状態へとクリアする（４１７０）。
【００６４】
ステップ４１７０の後は、ステップ４１００に遷移する。なお、ライトコマンドで書き込みたい論理アドレスの範囲が複数セクタに渡る場合は、ステップ４０６０以降の処理は各セクタ毎に行う。
【００６５】
ステップ４０１０のコマンド判定結果がリードコマンドならば、アドレス変換テーブル１０３１において本コマンドで指定された論理アドレスに対応する第１物理アドレスを検知し、そのアドレスが指すページからデータをリードする（４１８０）。そして、そのデータをホストへ送信し（４１９０）、コマンド処理を終える。
【００６６】
ステップ４０１０のコマンド判定結果がリカバリリードコマンドならば、スナップショットフラグ１０３３がＯＮか調べ（４２００）、結果が真（ＯＮ）ならばアドレス変換テーブル１０３１において本コマンドで指定された論理アドレスに対応する第２物理アドレスが未設定かを調べ（４２１０）、結果が偽（設定済）ならばその第２物理アドレスが指すページからデータをリードする（４２２０）。そして、そのデータをホストへ送信し（４１９０）、コマンド処理を終える。一方、ステップ４２００の結果が偽（ＯＦＦ）ならばホスト装置１１００が要求するデータは送信不可能であるため、エラーとしてコマンド処理を終える。ステップ４２１０の結果が真（未設定）ならばステップ４１８０に遷移する。すなわち、通常のリードコマンドのように処理される。なお、リカバリリードコマンドで読み出したい論理アドレスの範囲が複数セクタに渡る場合は、ステップ４２００以降の処理は各セクタ毎に行う。
【００６７】
図５は、図４における４１２０に示したブロッククリーンアップ処理４１２０の詳細な処理手順を示すフローチャートである。以下、その手順を説明する。
【００６８】
まず、メモリコントローラ１０２０は、ページ状態レジスタ１０３２を参照して、ページ状態値＝Ｆ（未書込）のページの総数が所定の値（例えば、３）以下になったかを調べる（５０１０）。結果が偽（所定値より大きい）ならば何もせずにそのまま処理を終える。一方、結果が真（所定値以下）ならば、ページ状態値＝８（無効データ）であるページを最も多く含むブロックを１つ選択し、消去対象ブロックとする。選択した消去対象ブロック中にあるページ状態値＝０（最新データ）またはページ状態値＝１（スナップショットデータ）であるページを全て検出する（５０２０）。ここで検出したページ数をＮとし、退避対象ページとする。そして、選択した消去対象ブロック以外のブロック上にあるページ状態値＝Ｆの未書込ページをＮ個選択し、ステップ５０２０で検出した退避対象ページに格納されたデータを、それぞれ未書込ページの１つにコピー（退避）する（５０３０）。次に、ページ状態レジスタ１０３２において、ステップ５０２０で検出した各退避対象ページのページ状態値（０または１）を、ステップ５０３０で実行したデータのコピー先ページのページ状態値へコピーする（５０４０）。そして、ステップ５０２０で検出したページのページ状態値を全て８（無効データ）に設定する（５０５０）。次に、アドレス変換テーブル１０３１上に設定された全ての第１・第２物理アドレスの中から上記ステップ５０２０で検出した対象対象ページのアドレスを検索することにより、そのアドレスが設定された欄を検出し、検出した欄にステップ５０３０でコピーを実行したコピー先ページの物理アドレスを移動する（５０６０）。つまり、アドレス変換テーブル１０３１で、コピー元の論理アドレスＬＡに対応する第１物理アドレスと第２物理アドレスを、コピー先の論理アドレスＬＡに対応する第１物理アドレスと第２物理アドレスへ移動して、コピー元の物理アドレスの値を消去する。これにより、ステップ５０２０で選択した消去対象ブロック内の全ページが無効化され、当該ブロックに格納されていた保存すべきページデータの退避も完了する。
【００６９】
次に、ステップ５０２０で選択したブロックを消去する（５０７０）。なお、この消去は、ブロック内の全ページに所定値を書き込むことである。そして、ページ状態レジスタ１０３２において、消去対象ブロック内の全ページのページ状態値をＦ（未書込）に設定し（５０８０）、処理を終える。
【００７０】
ここで、上記のアドレス変換テーブル１０３１の詳細な実装方法について言及する。アドレス変換テーブル１０３１上の第２物理アドレスの欄は、論理アドレスＬＡにより「設定済」であったり「未設定」であったりする。不揮発性ＲＡＭ１０３０を用いてアドレス変換テーブル１０３１を実装するとき、第２物理アドレスの欄に相当する格納位置に何も値を書かないことは無論不可能である。そこで、「未設定」を意味する特別な値を定義し、その値を不揮発性ＲＡＭ１０３０に書くことで、各第２物理アドレスが未設定であることを表現する。例えば、半導体記憶装置１０００内のページを識別するのに必要な物理アドレスの範囲が３１ビットの値で表現可能ならば、３２ビットの値“ＦＦＦＦＦＦＦＦ（１６進数）”を「未設定」を意味する値として定義する。以上により、第２物理アドレスの欄に相当する格納位置にこの値が設定されていたら、メモリコントローラ１０２０は「第２物理アドレスが未設定」と判断する。また、メモリコントローラ１０２０が第２物理アドレスの欄に相当する格納位置にこの値を設定することは、「第２物理アドレスをクリアする」ことを意味する。
【００７１】
以上、本発明の実施形態の一つを説明したが、アドレス変換テーブル１０３１を拡張することによってスナップショット機能の高機能化も可能である。例えば、アドレス変換テーブル１０３１に第３〜第５物理アドレスの欄を追加すれば、最大４世代のスナップショットデータを管理することができる。その場合、リカバリリードコマンドを、世代を表すパラメータを与えられるように機能拡張して、ホスト装置１１００が所望の世代のスナップショットデータを読み出しできるようにすることが好ましい。
【００７２】
さらに、本発明を適用した半導体記憶装置１０００で行われるブロッククリーンアップ処理について、消去するブロックの決定条件は上記の「含まれる無効ページの数が最大であること」だけに限らない。フラッシュメモリの各ブロックが消去された回数をカウントして「消去回数が最小であること」を条件にしてもよく、様々な条件を適用することが可能である。
【００７３】
さらに、上に述べたスナップショット機能の開始を指示するのはホスト装置１１００からのコマンドによるものに限らない。半導体記憶装置１０００自身が自らの判断で開始することも可能である。例えば、フラッシュメモリの各ブロックの消去回数が非常に多くなることで記憶装置としての残り寿命がもはや短いとメモリコントローラ１０２０が判断したときに、スナップショットフラグ１０３３を自動的にＯＮにしてもよい。
【００７４】
さらに、上記第１の実施形態では、ホスト装置１１００が最新データとスナップショットデータをそれぞれ読み出すために、リードコマンドとリカバリリードコマンドの２種類が備えられていたが、この方式に限らない。例えば、通常のリードコマンドとリードデータ選択コマンドの２種類を用いる方式も可能である。その場合、リードデータ選択コマンドで読みたいデータを最新またはスナップショットの２つから１つ選択した後、通常のリードコマンドでそれを読む。
【００７５】
＜第２実施形態＞
本第２実施形態は最大３世代のスナップショットデータを管理することができる半導体記憶装置を開示する。第１の実施形態でも複数世代のスナップショットデータが管理できることについて言及したが、本第２実施形態ではアドレス変換テーブル１０３１、ページ状態レジスタ１０３２、スナップショットフラグ１０３３の構成や使用方法を第１の実施形態に対して変更し、また、メモリコントローラ１０２０は取得した複数のスナップショットのうち指定した世代番号のものを個別に解放するためのコマンドを解釈する点が前記第１実施形態と異なる。その他の構成は、前記第１実施形態である。
【００７６】
本発明を適用した半導体記憶装置の簡単な内部構成は、第１の実施形態と同じく図１で表される。以下、第１の実施形態とは異なる部分について説明する。
【００７７】
本第２の実施形態におけるメモリコントローラ１０２０が解釈可能な５種類のコマンドとその機能を以下に示す。
【００７８】
・リードデータ選択コマンド…リードコマンドで読み出すデータの種類（世代）を、最新／第Ｎ世代スナップショット（Ｎ＝０〜３）の中から選択する。ただし、世代番号Ｎの大小は世代の新旧とは必ずしも一致しない。
【００７９】
・リードコマンド…指定した論理アドレスにこれまでに格納されてきたデータのうち、リードデータ選択コマンドで選択している種類のものを読み出す。
【００８０】
・ライトコマンド…指定した論理アドレスに最新のデータを書き込む。
【００８１】
・スナップショット取得コマンド…その時点での各論理アドレスに格納されているデータを、後で読み出しできるようにする。スナップショットの取得に成功した場合にはリードデータ選択コマンドやスナップショット解放コマンドで用いる世代番号を返す。
【００８２】
・スナップショット解放コマンド…指定した世代番号のスナップショットデータを廃棄し、それ以降読み出せないようにする。
【００８３】
第２の実施形態におけるアドレス変換テーブル１０３１では、１つの論理アドレスに対して４つの物理アドレス（以降、第１物理アドレス、第２物理アドレス、第３物理アドレス、第４物理アドレスと呼ぶ）を対応付ける。第１物理アドレスは、その論理アドレスに最後に書かれたデータ（最新データ）の格納位置（物理アドレス）を格納する。第２〜４物理アドレスは、ホスト装置１１００がスナップショット取得コマンドを受信した時点における各論理アドレスに格納されていた最新のデータの格納位置を世代毎に格納する。本第２実施形態では、メモリコントローラ１０２０が管理するスナップショットの世代は、最大３世代まで示すことができるものとする。
【００８４】
第２の実施形態におけるページ状態レジスタ１０３２が格納するページ状態としては以下の４通りを定義する。なお、各状態値は１６進数表記である。
【００８５】
・状態値＝０…ホスト装置１１００が読み出し可能な有効データが格納されている状態
・状態値＝８…もはや必要のない無効データが格納されている状態
・状態値＝Ｆ…そのページを含むブロックが消去されて以来、データが未書込である状態
第２の実施形態におけるスナップショットフラグ１０３３は、スナップショットの世代番号（１〜３）毎にその世代が取得済み（ＯＮ）か解放済み（ＯＦＦ）かを３世代分管理する。
【００８６】
さらに、第２の実施形態のメモリコントローラ１０２０は揮発性ＲＡＭを搭載し、ホスト装置１１００がリードデータ選択コマンドで選択した種類（世代：Ｎ＝０〜３）を一時的にその揮発性ＲＡＭの一部の領域に保持する。以下、揮発性ＲＡＭのその領域をリードデータ選択レジスタと呼ぶ。リードデータ選択レジスタが格納する種類値（世代の指定値）としては以下の４通りを定義する。なお、リードデータ選択レジスタは半導体記憶装置１０００の電源投入直後は種類値＝０に初期化される。
・種類値＝０…最新データ（初期値）
・種類値＝１…第１世代スナップショットデータ
・種類値＝２…第２世代スナップショットデータ
・種類値＝３…第３世代スナップショットデータ
図６および図７は、本発明を適用した半導体記憶装置１０００においてスナップショット機能を利用するときに、メモリコントローラ１０２０が行うメモリ管理方法を説明するため、フラッシュメモリ１０４０内の格納データ、アドレス変換テーブル１０３１、ページ状態レジスタ１０３２、スナップショットフラグ１０３３、それぞれの内容の変化の一例を示したものである。図６（ａ）から始まり、図６（ｂ）、図６（ｃ）、図６（ｄ）、図６（ｅ）、図７（ａ）、図７（ｂ）、図７（ｃ）、図７（ｄ）と遷移して、図７（ｅ）で終わる。
【００８７】
図示の例では、説明を簡単化するため、ホスト装置１１００から指定可能な論理アドレスはセクタ単位(１セクタ＝５１２バイト)として、その範囲を０〜３の４セクタ分に限定する。また、データの読み書きにメモリチップ１０４１〜１０４３内の3個のブロック（ブロックＸ２０００、ブロックＹ２０１０、ブロックＺ２０２０）のみを使用することとする。さらに、メモリチップ内の各ブロック２０００〜２０２０は、それぞれ４つのページで構成され、各ページのサイズは５１２バイト（１セクタ）であるものとする。各ページは０〜３の数字で表し、ページの絶対的な物理アドレスをＸ３、Ｙ０、Ｚ１のように略記する。なお、アドレス変換テーブル１０３１において、ＬＡは論理アドレス、第１ＰＡは第１物理アドレス、第２ＰＡは第２物理アドレス、第３ＰＡは第３物理アドレスを意味する。なお、第４ＰＡ（第４物理アドレス）は存在するが本説明に用いないため図示を省略する。
【００８８】
なお、第１物理アドレスは、複数の論理アドレス毎に対応するページの物理アドレスをそれぞれ格納するもので、各物理アドレスは最新データを格納したページを示す。また、第２物理アドレスは、複数の論理アドレス毎に対応するページの物理アドレスをそれぞれ格納するもので、各物理アドレスは第１世代のスナップショットを格納したページを示す。また、第３物理アドレスは、複数の論理アドレス毎に対応するページの物理アドレスをそれぞれ格納するもので、各物理アドレスは第２世代のスナップショットを格納したページを示す。また、第４物理アドレスは、複数の論理アドレス毎に対応するページの物理アドレスをそれぞれ格納するもので、各物理アドレスは第４世代のスナップショットを格納したページを示す。なお、第１物理アドレスが最新データのページの物理アドレスを角のする第１物理アドレスグループとなり、第２〜第４物理アドレスがスナップショットの物理アドレスを世代毎に格納する第２物理アドレスグループとなる。
【００８９】
はじめに、スナップショットは全く未取得であるとし、図６（ａ）のように、物理ページアドレスのＸ０、Ｘ１、Ｘ２、Ｘ３の位置に、それぞれ論理アドレス０、１、２、３に対応するデータＡ、Ｂ、Ｃ、Ｄが既に格納されているものとする。なお、論理アドレス０，１，２，３は、メモリコントローラ１０２０によって割り当てられたものである。また、ブロックＹ２０１０およびブロックＺ２０２０は消去済みで、どのページもデータが未書込とする。
【００９０】
このとき、アドレス変換テーブル１０３１において論理アドレスＬＡ＝ｎの各第１物理アドレズにはＸｎ（ｎ＝０〜３）が設定され、どの論理アドレスも第２〜４物理アドレスが未設定であり、ページ状態レジスタ１０３２におけるブロックＸ、Ｙ、Ｚのページ状態値はそれぞれ“００００”、“ＦＦＦＦ”、“ＦＦＦＦ”に設定され、スナップショットフラグ１０３３は３世代ともＯＦＦに設定されている。
【００９１】
また、リードデータ選択レジスタには「最新」を意味する種類値＝０が設定されている。これは、リードコマンドで最新のデータが読み出し可能な状態である。
【００９２】
この状態から、ホスト装置１１００から以下の順で半導体記憶装置１０００にコマンドを発行することとする。
【００９３】
（１）論理アドレスＬＡ＝０、１にそれぞれデータＡ’、Ｂ’を書くライトコマンド
（２）スナップショット取得コマンド（第１世代）
（３）論理アドレスＬＡ＝２、３にそれぞれデータＣ’、Ｄ’を書くライトコマンド
（４）スナップショット取得コマンド（第２世代）
（５）論理アドレスＬＡ＝３にデータＤ’’を書くライトコマンド
（６）第１世代スナップショットを選択するリードデータ選択コマンド
（７）論理アドレスＬＡ＝０〜３のデータを読むリードコマンド
（８）第２世代スナップショットを選択するリードデータ選択コマンド
（９）論理アドレスＬＡ＝０〜３のデータを読むリードコマンド
（１０）最新データを選択するリードデータ選択コマンド
（１１）論理アドレスＬＡ＝０〜３のデータを読むリードコマンド
（１２）第２世代を解放するスナップショット解放コマンド
（１３）論理アドレスＬＡ＝２にデータＣ’’を書くライトコマンド
（１４）第１世代を解放するスナップショット解放コマンド
（１５）論理アドレスＬＡ＝３にデータＤ’’’を書くライトコマンド
図６（ｂ）は上記（１）のライトコマンドを受信して処理を実行した直後のフラッシュメモリ１０４０及び不揮発性メモリ１０３０の内部状態を示したものである。ライトコマンド（１）を受信すると、メモリコントローラ１０２０は、ページ状態レジスタ１０３２を参照して、論理アドレスＬＡ＝０、１に対応するブロックＸ２０００のページが状態値＝０となっており、既に最新のデータが書き込まれているので、同一の論理アドレスＬＡに対応する次のブロックであるブロックＹ２０１０のページ状態レジスタ１０３２を参照し、状態値＝Ｆ（未書込）である２つのページＹ０、Ｙ１を選択し、そこにそれぞれデータＡ’、Ｂ’を書き込む。なお、各ブロックへのデータの書き込みは、前記第１実施形態と同様に、各ブロック内の空きセクタへ所定の順序で行うもので、例えば、図６（ｂ）では各ブロックの空きページの順に書き込む。
【００９４】
次に、メモリコントローラ１０２０は、アドレス変換テーブル１０３１から論理アドレスＬＡ＝０、１の各第１物理アドレスであるＸ０、Ｘ１を検知し、これらのブロックＸ２０００のページ１、２は既に最新のデータが書き込まれたので、ページ状態レジスタ１０３２のＸ０、Ｘ１のページ状態値を８（無効データ）に設定する。そして、メモリコントローラ１０２０はアドレス変換テーブル１０３１の論理アドレスＬＡ＝０、１に対応する各第１物理アドレスに最新のデータを書き込んだブロックＹ２０１０の物理アドレスにＹ０、Ｙ１を設定し、ページ状態レジスタ１０３２のＹ０、Ｙ１に対応するページ状態値を０（有効データ）に設定する。
【００９５】
次に、上記（２）のスナップショット取得コマンドを受信すると、メモリコントローラ１０２０は、アドレス変換テーブル１０３１の全論理アドレスＬＡについて、各論理アドレスＬＡの第１物理アドレスの内容をその第２物理アドレスの欄に複写する。その結果、これら第２物理アドレスは第１世代のスナップショットデータの格納先を示す。そして、メモリコントローラ１０２０は、スナップショットフラグ１０３３の世代１をＯＮに設定し、世代番号「１」をホスト装置１１００に返す。
【００９６】
図６（ｃ）は上記（３）のライトコマンドを実行した直後の内部状態を示したものである。スナップショット取得コマンドを受信すると、メモリコントローラ１０２０は、ページ状態レジスタ１０３２を参照して、状態値＝Ｆ（未書込）である２つのページＹ２、Ｙ３を選択し、これらのページＹ２，Ｙ３にそれぞれデータＣ’、Ｄ’を書く。なお、第２物理アドレスには、上記（２）のスナップショット取得コマンドによる、第１物理アドレスの値が第１世代のスナップショットとして格納されている。
【００９７】
次に、メモリコントローラ１０２０は、アドレス変換テーブル１０３１で、論理アドレスＬＡ＝２、３の各第１物理アドレスの欄にあるＸ２、Ｘ３がそれぞれ第１世代のスナップショットデータを格納していることを第２物理アドレスから検出する。よって、メモリコントローラ１０２０は、第２物理アドレスのＸ２、Ｘ３のページ状態値は０（有効データ）のままにする。そして、アドレス変換テーブル１０３１の論理アドレスＬＡ＝２、３に対応する各第１物理アドレスに上記（３）のライトコマンドで書き込んだＣ’，Ｄ’に対応するＹ２、Ｙ３を設定し、ページ状態レジスタ１０３２のＹ２、Ｙ３のページ状態値を０（有効データ）に設定する。
【００９８】
次に、上記（４）のスナップショット取得コマンドを受信すると、メモリコントローラ１０２０は、アドレス変換テーブル１０３１の全論理アドレスＬＡについて、各論理アドレスＬＡの第１物理アドレスの内容を第３物理アドレスの欄に複写する。その結果、これら第３物理アドレスは第２世代スナップショットデータの格納先を示す。そして、メモリコントローラ１０２０は、スナップショットフラグ１０３３の世代２をＯＮに設定し、世代番号＝２をホスト装置１１００に返す。
【００９９】
次に、上記（５）のライトコマンドを受信すると、メモリコントローラ１０２０は、ページ状態レジスタ１０３２を参照し、状態値＝Ｆ（未書込）であるページＺ０を選択し、このページＺ０にデータＤ’’を書く。次に、メモリコントローラ１０２０は、アドレス変換テーブル１０３１を参照し、論理アドレスＬＡ＝３の第１物理アドレスの欄にあるＹ３が第２世代スナップショットデータを格納していることを第３物理アドレスのＬＡ＝３にＹ３があることから検出する。よって、メモリコントローラ１０２０は、ページ状態レジスタ１０３３のＹ３のページ状態値は０（有効データ）のままにする。そして、メモリコントローラ１０２０はアドレス変換テーブル１０３１の論理アドレスＬＡ＝３の第１物理アドレスにＺ０を設定し、ページ状態レジスタ１０３２のＺ０のページ状態値を０（有効データ）に設定する。図６（ｄ）は、上記（５）のライトコマンドを実行した直後の内部状態を示している。なお、図６（ｄ）で第３物理アドレスには、上記（４）のスナップショット取得コマンドによって書き込まれた第２世代のスナップショットのページが格納され、スナップショットフラグ１０３３は、第２世代がＯＮに設定される。
【０１００】
さて、ここでメモリコントローラ１０２０は、データが未書込のページの総数が所定数（例えば、３個）以下になったことを契機として、未書込のページの総数を増やすため、以下のようなブロッククリーンアップ処理を行う。
【０１０１】
まず、メモリコントローラ１０２０は、ページ状態レジスタ１０３２を参照して、ページ状態値＝８（無効データ）のページを最も多く含むブロックＸを選択し、そのブロックＸ内で保存が必要なデータを格納したページをアドレス変更テーブル１０３１から検索し、ページ状態値＝０である２つのページＸ２、Ｘ３を第２物理アドレスから検出する。次に、メモリコントローラ１０２０はページＸ２，Ｘ３の各格納データＣ、Ｄをページ状態値＝Ｆ（未書込）のページＺ１、Ｚ２にコピーし、Ｚ１、Ｚ２のページ状態値を０（有効データ）に設定し、Ｘ２、Ｘ３のページ状態値を８（無効データ）に設定する。
【０１０２】
そして、メモリコントローラ１０２０はアドレス変換テーブル１０３１でＸ２、Ｘ３が設定されている２つの欄を検索し、第２物理アドレスの該当欄に移動したデータＣ、ＤのページＺ１、Ｚ２を設定する。
【０１０３】
これにより、ブロックＸ２０００は、保存が必要な格納データが別ブロックに退避され、全ページに無効データが格納された状態になる。図６（ｅ）は、上記ブロッククリーンアップ処理によるデータの移動が完了した時点の内部状態を示している。
【０１０４】
次に、メモリコントローラ１０２０は、全てが無効データとなったブロックＸの内容を消去し、ブロックＸのページ状態値＝ＦＦＦＦに設定する。図７（ａ）はブロッククリーンアップ処理が完了した時点の内部状態を示している。以上がブロッククリーンアップ処理である。これにより、データが未書込のページの総数は図６（ｄ）の３個から５個に増える。
【０１０５】
次に、上記（６）の第１世代のスナップショットを選択するリードデータ選択コマンドを受信すると、メモリコントローラ１０２０は、リードデータ選択レジスタに種類値＝１を設定する。
【０１０６】
次に、上記（７）の論理アドレスＬＡ＝０〜３に対するリードコマンドを受信すると、メモリコントローラ１０２０は、リードデータ選択レジスタに設定された種類値が１であることからアドレス変換テーブル１０３１より論理アドレスＬＡ＝０、１、２、３に対応する第１世代のスナップショットを指し示す第２ＰＡのページＹ０、Ｙ１、Ｚ１、Ｚ２を検出し、これらのページに格納されたデータＡ’、Ｂ’、Ｃ、Ｄを読み出し、ホスト装置１１００に送信する。これらは、図６（ｂ）の時点で各論理アドレスＬＡ＝０〜３に格納されていたデータのスナップショットである。
【０１０７】
次に、上記（８）の第２世代のスナップショットを選択するリードデータ選択コマンドを受信すると、メモリコントローラ１０２０は、リードデータ選択レジスタに種類値＝２を設定する。
【０１０８】
次に、上記（９）の論理アドレスＬＡ＝０〜３に対するリードを受信すると、メモリコントローラ１０２０は、リードデータ選択レジスタに設定された種類値＝２であることからアドレス変換テーブル１０３１より論理アドレスＬＡ＝０、１、２、３の第２世代のスナップショットに対応する第３物理アドレスのページＹ０、Ｙ１、Ｙ２、Ｙ３を検出し、それらのページに格納されたデータＡ’、Ｂ’、Ｃ’、Ｄ’を読み出し、ホスト装置１１００に送信する。これらは、図６（ｃ）時点で各論理アドレスに格納されていたデータのスナップショットである。
【０１０９】
次に、上記（１０）の最新のデータを選択するリードデータ選択コマンドを受信すると、メモリコントローラ１０２０は、リードデータ選択レジスタに種類値＝０を設定する。
【０１１０】
そして、上記（１１）の論理アドレスＬＡ＝０〜３に対するリードコマンドを受信すると、メモリコントローラ１０２０は、リードデータ選択レジスタに設定された種類値が０であるので、アドレス変換テーブル１０３１から論理アドレスＬＡ＝０、１、２、３の最新データに対応する第１ＰＡのページＹ０、Ｙ１、Ｙ２、Ｚ０を検出し、それらのページに格納されたデータＡ’、Ｂ’、Ｃ’、Ｄ’’を読み出し、ホスト装置１１００に送信する。これらは、各論理アドレスに格納されている最新データである。
【０１１１】
図７（ｂ）は上記（１２）の第２世代のスナップショットを解放するスナップショット解放コマンドを実行した直後の内部状態を示したものである。上記（１２）でスナップショット解放コマンドを受信すると、メモリコントローラ１０２０は、第２世代スナップショットデータを格納しているページを検出するため、アドレス変換テーブル１０３１から論理アドレスＬＡ＝０、１、２、３の第２世代のスナップショットに対応する第３物理アドレスのページＹ０、Ｙ１、Ｙ２、Ｙ３を図７（ａ）の状態から取得する。第３物理アドレスのうちページＹ３以外は第１物理アドレスまたは第２物理アドレスにも登録されており、最新または第１世代スナップショットデータを格納しているため、無効ページにはならない。よってメモリコントローラ１０２０は、Ｙ３だけを無効ページにするべく、ページ状態レジスタ１０３２のＹ３のページ状態を８（無効データ）に設定する。次に、メモリコントローラ１０２０はアドレス変換テーブル１０３１の全ての論理アドレスＬＡについて第３物理アドレスの欄をクリアする。最後に、メモリコントローラ１０２０は、スナップショットフラグ１０３３の世代＝２をＯＦＦに設定する。
【０１１２】
図７（ｃ）は上記（１３）の論理アドレスＬＡ＝２にデータＣ”を書き込むライトコマンドを実行した直後の内部状態を示したものである。上記（１３）のライトコマンドを受信すると、メモリコントローラ１０２０は、ページ状態レジスタ１０３２を参照して、状態値＝Ｆ（未書込）であるページＺ３を選択し、そこにデータＣ”を書き込む。次に、メモリコントローラ１０２０は、アドレス変換テーブル１０３１を検索して、論理アドレスＬＡ＝２の第１物理アドレスの欄にあるＹ２（図７（ｂ）参照）がどの世代のスナップショットデータも格納していないことを検出する。よって、メモリコントローラ１０２０はページ状態レジスタ１０３２のＹ２のページ状態値を８（無効データ）に設定する。そして、アドレス変換テーブル１０３１のＬＡ＝２の第１物理アドレスにＺ３を設定し、Ｚ３のページ状態値を０（有効データ）に設定する。
【０１１３】
図７（ｄ）は上記（１４）の第１世代のスナップショットを解放するスナップショット解放コマンドを実行した直後の内部状態を示したものである。上記（１４）のスナップショット解放コマンドを受信すると、メモリコントローラ１０２０は、第１世代スナップショットデータを格納しているページを検知するため、アドレス変換テーブル１０３１から論理アドレスＬＡ＝０、１、２、３に対応する第２物理アドレスのページＹ０、Ｙ１、Ｚ１、Ｚ２を検出する。このうちページＹ０とＹ１は第１物理アドレスにも登録されており、第１物理アドレスでは最新データを格納しているため、無効ページにはならない。よって第２物理アドレスのページＺ１とＺ２を無効ページにするべく、ページ状態レジスタ１０３２のＺ１とＺ２のページ状態を８（無効データ）に設定する。次に、メモリコントローラ１０２０は、アドレス変換テーブル１０３１の全ての論理アドレスＬＡについて第２物理アドレスの欄をクリアする。最後に、メモリコントローラ１０２０はスナップショットフラグ１０３３の世代＝１をＯＦＦに設定する。
【０１１４】
図７（ｅ）は上記（１５）の論理アドレスＬＡ＝３にデータＤ”’を書き込むライトコマンドを実行した直後の内部状態を示したものである。上記（１５）のライトコマンドを受信すると、メモリコントローラ１０２０は、ページ状態レジスタ１０３２を参照して、状態値＝Ｆ（未書込）であるページＸ０を選択し、このページＸ０にデータＤ”’を書き込む。次に、メモリコントローラ１０２０はアドレス変換テーブル１０３１を参照し、論理アドレスＬＡ＝３の第１物理アドレスでの欄にあるページＺ０がどの世代のスナップショットデータも格納していないことを検出する（図７（ｄ）の状態）。よって、メモリコントローラ１０２０はページ状態レジスタ１０３２のＺ０のページ状態値を８（無効データ）に設定する。そして、アドレス変換テーブル１０３１の論理アドレスＬＡ＝３の第１物理アドレスにページＸ０を設定し、Ｘ０のページ状態値を０（有効データ）に設定する。
【０１１５】
図８は、ホスト装置１１００から受信したコマンドについて、メモリコントローラ１０２０が実行する処理手順を示すフローチャートである。以下、その手順を説明する。
【０１１６】
まず、メモリコントローラ１０２０は受信したコマンドが何であるかを判定する（８０１０）。
【０１１７】
上記のコマンド判定結果がスナップショット取得コマンドならば、メモリコントローラ１０２０はスナップショットフラグ１０３３からＯＦＦ状態のエントリを検索する（８１１０）。ステップ８１２０でＯＦＦ状態のフラグが存在しないならば、スナップショットの許容回数を超えたとして、ホスト装置１１００に取得失敗のエラーを返してコマンド処理を終える。
【０１１８】
一方、ＯＦＦ状態のフラグ（第Ｍとする）が存在するならば、アドレス変換テーブル１０３１の全ての論理アドレスＬＡについて、第１物理アドレスの内容を第（Ｍ＋１）物理アドレスの欄にコピーする（８１３０）。そして、スナップショットフラグ１０３３の世代ＭをＯＮに設定し（８１４０）、このたび取得したスナップショットに割り当てられた世代番号Ｍをホスト装置１１００に返し（８１５０）、コマンド処理を終える。
【０１１９】
ステップ８０１０でコマンド判定結果がスナップショット解放コマンドならば、そのコマンドに付加されたパラメータ（種類値）からホスト装置１１００が解放したい世代番号（Ｍとする）を抽出する。ステップ８２１０でスナップショットフラグ１０３３の世代ＭがＯＦＦに設定されていれば（つまり解放済みならば）ホスト装置１１００に解放失敗のエラーを返してコマンド処理を終える。一方、スナップショットフラグ１０３３の世代ＭがＯＮに設定されていれば、アドレス変換テーブル１０３１の全ての論理アドレスＬＡについて、次の処理を行う（８２２０）。
【０１２０】
メモリコントローラ１０２０は、「各論理アドレスＬＡに対応する全ての物理アドレスにおいて、第（Ｍ＋１）物理アドレスの値が、それ以外のどの物理アドレスの値とも重複しないならば、第（Ｍ＋１）物理アドレスのページ状態をページ状態レジスタ１０３２において８（無効データ）に設定する。」
次に、アドレス変換テーブル１０３１の全ての論理アドレスＬＡについて、第（Ｍ＋１）物理アドレスの欄をクリアする（８２３０）。最後に、スナップショットフラグ１０３３の世代ＭをＯＦＦに設定し（８２４０）、コマンド処理を終える。
【０１２１】
ステップ８０１０でコマンド判定結果がライトコマンドならば、ライト処理８３１０（詳細は図９（ａ）参照）を行い、コマンド処理を終える。
【０１２２】
ステップ８０１０でコマンド判定結果がリードデータ選択コマンドならば、そのコマンドに付加されたパラメータ（種類値）からホスト装置１１００がリードコマンドで要求するリードデータの種類（最新または第１〜３世代スナップショットのいずれか）を取得する（８４１０）。そして、その種類を識別する種類値をリードデータ選択レジスタに設定し（８４２０）、コマンド処理を終える。
【０１２３】
ステップ８０１０でコマンド判定結果がリードコマンドならば、リード処理８５１０（詳細は図９（ｂ）参照）を行い、コマンド処理を終える。
【０１２４】
図９（ａ）は、メモリコントローラ１０２０が上記図８のライト処理８３１０で実行する処理手順を示すフローチャートである。以下、その手順を説明する。
【０１２５】
まず、ホスト装置１１００からライトデータを受信し（９０１０）、ページ状態レジスタ１０３２でページ状態値＝Ｆのページを選択し、そのページに前記受信したデータをライトする（９０２０）。
【０１２６】
次に、アドレス変換テーブル１０３１において、本ライトコマンドで指定された論理アドレスに対応する全ての物理アドレスを検出し、そのうち第１物理アドレスでの値（更新前のデータを格納したページのアドレス）がそれ以外のどの物理アドレスの値とも重複しないか（つまりスナップショットデータになっていないか）を検索する（９０３０）。この検索結果が偽（重複する）ならばステップ９０５０に移る。一方、検索結果が真（重複しない）ならば、ページ状態レジスタ１０３２において、指定された論理アドレスに対応する第１物理アドレスのページ状態を８（無効データ）に設定する（９０４０）。次に、アドレス変換テーブル１０３１において、指定された論理アドレスに対応する第１物理アドレスの欄にステップ９０２０でライトしたページのアドレス（更新後のデータを格納したページのアドレス）を設定する（９０５０）。そして、ページ状態レジスタ１０３２において、その新しい第１物理アドレスが示すページのページ状態を０（有効データ）に設定する。最後にブロッククリーンアップ処理９０７０（詳細は図１０参照）を実行する。
【０１２７】
図９（ｂ）は、メモリコントローラ１０２０が図８のリード処理８５１０で実行する処理手順を示すフローチャートである。以下、その手順を説明する。
【０１２８】
まず、リードデータ選択レジスタに設定された種類値が「最新」（＝０）を示しているかを調べ（９１１０）、結果が真（最新）ならば、アドレス変換テーブル１０３１において、本リードコマンドで指定された論理アドレスに対応する第１物理アドレスに格納されたデータをリードし（９１５０）、ホスト装置１１００へリードデータを送信する（９１４０）。一方、結果が偽（スナップショット）ならば、選択された世代番号（Ｎとする）について、スナップショットフラグ１０３３の世代ＮがＯＮか（スナップショットが取得済みか）を調べる（９１２０）。スナップショットフラグ１０３３の世代ＮがＯＦＦならばホスト装置１１００にリードエラーを返してリード処理を終える。スナップショットフラグ１０３３の世代ＮがＯＮならば、指定された論理アドレスに対応する第（Ｎ＋１）ＰＡに格納されたデータをリードし（９１３０）、ホスト装置１１００へリードデータを送信する（９１４０）。
【０１２９】
図１０は、上記図９（ａ）におけるブロッククリーンアップ処理９０７０の詳細な処理手順を示すフローチャートである。以下、その手順を説明する。
【０１３０】
まず、メモリコントローラ１０２０は、ページ状態レジスタ１０３２を参照して、ページ状態値＝Ｆ（未書込）のページの総数が所定の値以下になったかを判定する（１００１０）。判定結果が偽（所定値より大きい）ならば何もせずにそのまま処理を終える。一方、判定結果が真（所定値以下）ならば、ページ状態値＝８（無効データ）であるページを最も多く含むブロックを１つ選択し、その中にあるページ状態値＝０（有効データ）である有効ページを全て検出する（１００２０）。検出した有効ページ数をＰとする。そして、選択したブロック以外のブロック上にあるページ状態値＝Ｆの未書込ページをＰ個選択し、上記ステップ１００２０で検出した有効ページに格納されたデータを、それぞれ未書込ページの１つにコピー（退避）する（１００３０）。次に、ページ状態レジスタ１０３２において、ステップ１００３０でのそれぞれのコピー先ページのページ状態値を０に設定する（１００４０）。そして、ステップ１００２０で検出した有効ページのページ状態値を全て８（無効データ）に設定する（１００５０）。そして、アドレス変換テーブル１０３１上に設定された全ての物理アドレスの中からステップ１００２０で検出した有効ページのアドレスを検索することにより、そのアドレスが設定された欄を特定し、これらの特定された欄に上記ステップ１００３０でのそれぞれのコピー先ページの物理アドレスをコピーする（１００６０）。これにより、ステップ１００２０で選択したブロック内の全ページが無効化され、そこに格納されていた保存すべきページデータの退避も完了する。
【０１３１】
次に、ステップ１００２０で選択したブロックを消去する（１００７０）。そして、ページ状態レジスタ１０３２において、そのブロック内の全ページのページ状態値をＦ（未書込）に設定し（１００８０）、処理を終える。
【０１３２】
ここで、上記のアドレス変換テーブル１０３１の詳細な実装方法について言及する。アドレス変換テーブル１０３１上の第２〜４物理アドレスの欄は、スナップショットの解放により「未設定」状態になるが、第１の実施形態と同様に「未設定」を意味する特別な値（“ＦＦＦＦＦＦＦＦ（16進数）”など）を定義し、その値を不揮発性ＲＡＭ１０３０に書き込んで「未設定」状態にしてもよいが、スナップショットフラグ１０３３のある世代Ｎが解放済み（ＯＦＦ）ならば、第（Ｎ＋１）物理アドレスは「未設定」状態であることが判断できるため、アドレス変換テーブル１０３１で「未設定」状態を明示する必要はなく、書かれている無用なアドレス値をそのまま放置してもよい。すなわち図８のステップ８２３０は省略してもよい。ただし、その場合はアドレス変換テーブル１０３１での各アドレス検索処理（図８の８２２０、図９の９０３０、図１０の１００６０）において、その無用アドレス値を検索対象から除外する。
【０１３３】
以上が本発明の第２の実施形態である。
【０１３４】
以上の第１および第２の実施形態の説明において、いずれの半導体記憶装置１０００も１つの論理アドレスに対して複数の物理アドレスを割り当てるため、ホスト装置１１００がスナップショット取得後にライトコマンドで多くのデータを書き込むと、備えられたフラッシュメモリ１０４０の全容量で必要な物理ページ数をまかないきれない可能性がある。その場合はスナップショットを解放して空き物理ページを確保すること（これは第１の実施形態では通常動作開始コマンド処理の実行に相当する。以下、スナップショットの解放という表現で統一する。）が必要である。そこで、コマンド処理中に有効データ格納ページ（状態＝０または１のページ）の総数が所定の上限値を超えることが判明したら、ディスク容量オーバを意味するエラーを返すようにして、ホスト装置１１００にスナップショットの解放を促してもよい。
【０１３５】
さらに、半導体記憶装置１０００が自ら自動的にスナップショットの解放を実施してもよい。このとき、例えば最も古いスナップショットを優先的に解放する。スナップショットフラグ１０３３を拡張して取得時にシーケンス番号も記録するようにして、シーケンス番号が最小のものを最も古いスナップショットとして検出できるようにする。
【０１３６】
さらに、この自動解放を有効化／無効化するための設定コマンドを新規に定義してもよい。このとき、半導体記憶装置１０００がそのコマンドを解釈してこの自動解放を事前に有効化／無効化する。あるいは、スナップショット取得コマンドのパラメータにこの自動解放を「許可する／許可しない」を意味するフラグを追加し、ホスト装置１１００が予め自動解放を個別に承認できるようにしてもよい。このとき、半導体記憶装置１０００がそのフラグを解釈し、（拡張した）スナップショットフラグ１０３３にその情報を記録しておく。その後、自動解放が必要になった時にそれを見て、「許可する」になっているスナップショットの中で最も古いスナップショットを優先的に解放する。
【０１３７】
半導体記憶装置１０００が自ら自動的にスナップショットの解放を実施する契機は、上記のような容量不足に限らず半導体記憶装置１０００が検知可能な様々なイベントを適用してよい。例えば、半導体記憶装置１０００に現在時刻を知るための手段を備え、スナップショット取得時に取得時刻も（拡張した）スナップショットフラグ１０３３に記録しておく。そして、現在時刻とその取得時刻の差が所定値（例えば３年）を超えたら、自動的にそのスナップショットの解放を実施する。
【０１３８】
さらに、半導体記憶装置１０００は自ら自動的にスナップショットの解放を実施するだけでなく、自動的にスナップショットの取得（これは第１の実施形態ではスナップショットコマンド処理の実行に相当する。以下、スナップショットの取得という表現で統一する。）を実施してもよい。その実施の契機は半導体記憶装置１０００が検知可能な様々なイベントを適用してよい。
【０１３９】
例えば、半導体記憶装置１０００に現在時刻を知るための手段を備え、所定の時刻になると自動的にスナップショットの取得を実施する。この所定時刻を設定するコマンドを新規に定義してもよい。すなわち、半導体記憶装置１０００がそのコマンドを解釈してこの所定時刻を事前に内部（例えば不揮発性ＲＡＭ１０３０）に登録する。
【０１４０】
もう一例として、ホスト装置１１００からの電源遮断による格納データ破壊を防止するために補助電源（大容量キャパシタなど）を搭載した半導体記憶装置１０００を考える。半導体記憶装置１０００は補助電源が使用されたことを検出してその通算使用回数または通算使用時間を不揮発性ＲＡＭ１０３０に記録する。それらが所定の上限値を超えたら、外部の電源環境が悪化していると判断して、自動的にスナップショットの取得を実施する。
【０１４１】
さらにもう一例として、フラッシュメモリ１０４０のブロック消去回数の合計、平均または最大値が所定の上限値を超えたり、フラッシュメモリ１０４０のライトや消去のエラー発生回数の合計が所定の上限値を超えたりしたら、記憶装置としての信頼性が悪化していると判断して、自動的にスナップショットの取得を実施してもよい。
【０１４２】
以上の説明において、スナップショット取得／解放コマンド、リードデータ選択コマンドなど新規に定義したコマンドには、従来の半導体記憶装置でベンダユニークに定義可能なコマンドコードを割り当て、リード／ライトコマンドには従来の半導体記憶装置のリード／ライトコマンドと同じ標準的なコマンドコードを割り当て、記憶装置としての上位互換性を図るのが好ましい。
【０１４３】
以上の説明において、スナップショットの世代番号やスナップショット機能に関する諸々のエラーをホスト装置１１００に返す手段としては、従来の半導体記憶装置が標準的に持つステータスリードコマンドを拡張して実現してもよい。すなわち、本コマンドでリードされるステータス情報内の未使用部分に世代番号を埋め込む。また、標準規格で未使用のエラーコードをスナップショット機能に関する諸々のエラーに割り当て、そのコードをステータス情報内のエラー情報部分に設定する。
【０１４４】
また、ホスト装置１１００の便利のために、本発明の半導体記憶装置１０００で取得可能なスナップショット世代数の上限値、または取得済みのスナップショット世代番号のリストを、上記と同様にステータス情報の未使用部分に埋め込んでもよい。
【０１４５】
また、上記第２実施形態では、メモリコントローラ１０２０は、リードデータ選択コマンドでスナップショットの世代または最新データを指定してから、所望の論理アドレスに対するリードコマンドを受け付ける構成としたが、リードコマンドに種類値を付加して、一回の指令で読み出すデータの種類と論理アドレスの指定を行うようにしても良い。
【０１４６】
＜補足＞
一括消去可能な複数のブロックと、前記ブロックを複数の領域に分割した複数のページとを備えてデータを格納するフラッシュメモリと、
前記フラッシュメモリへの書き込みまたは読み出しを前記ページ単位で制御し、前記ブロック単位で一括消去を制御するメモリコントローラと、を備え、
前記メモリコントローラは、ホストから受信した要求に含まれる論理アドレスに基づいて前記メモリチップのデータを読み書きする半導体記憶装置であって、
前記メモリコントローラは、
前記受信した要求が書き込み要求のときには、最新データの書き込み要求とスナップショット取得要求または解放要求の何れであるかを判定し、前記受信した要求が読み出し要求のときには、前記最新データの読み出し要求とスナップショットの読み出し要求の何れであるかを判定する要求判定部と、
前記要求に含まれる論理アドレスに対応する前記ページの物理アドレスを管理するアドレス変換部と、
前記各ブロックの前記各ページ毎に、格納されているデータが有効または無効あるいは未書き込みのいずれであるかを管理するページ状態設定部と、
前記スナップショット取得要求または読み出し要求あるいは解放要求があったときに、スナップショットの世代を管理するスナップショット管理部と、
前記要求判定部が判定した前記要求に含まれる論理アドレスから、前記アドレス変換部とページ状態設定部及びスナップショット管理部を参照して、前記要求に応じたアクセスを行うページの物理アドレスを決定するアクセス先決定部と、
前記決定したページに対して前記要求に応じたアクセスを行うアクセス制御部と、
を備え、
前記アドレス変換部は、
前記最新のデータを格納するページの物理アドレスを論理アドレス毎に格納する第１物理アドレスグループと、
前記スナップショットを格納するページの物理アドレスを論理アドレス毎に格納する第２物理アドレスグループと、を有し、
前記スナップショット管理部は、
前記スナップショットの有効または無効を設定することを特徴とする半導体記憶装置。
【図面の簡単な説明】
【０１４７】
【図１】本発明の第１の実施形態における半導体記憶装置を示す図である。
【図２】第１の実施形態における半導体記憶装置の内部状態（ブロックＸ〜Ｚとアドレス変換テーブルとページ状態レジスタ及びスナップショットフラグの状態）変化の一例の前半を示し、（ａ）は４つのデータを格納した初期状態を示し、（ｂ）はデータＡ’、Ｂ’のライトコマンドを実行した後の状態を示し、（ｃ）はスナップショットコマンドを実行し、データＣ’，Ｄ’のライトコマンドを実行した後の状態を示し、（ｄ）はデータＤ”のライトコマンドを実行した後の状態を示す図である。
【図３】第１の実施形態における半導体記憶装置の内部状態（ブロックＸ〜Ｚとアドレス変換テーブルとページ状態レジスタ及びスナップショットフラグの状態）変化の一例の後半を示し、（ａ）はブロッククリーンアップ処理を示し、（ｂ）はブロッククリーンアップ処理後の状態を示し、（ｃ）はデータＢ”のライトコマンドを実行した後の状態を示し、（ｄ）はデータＣ”のライトコマンドを実行した後の状態を示す図である。
【図４】第１の実施形態におけるホスト装置から受信したコマンドについて、メモリコントローラが実行する処理手順を示すフローチャートである。
【図５】第１の実施形態におけるメモリコントローラによるブロッククリーンアップ処理を示すフローチャートである。
【図６】本発明の第２の実施形態における半導体記憶装置の内部状態変化の一例の前半を示し、（ａ）は４つのデータを格納した初期状態を示し、（ｂ）はデータＡ’、Ｂ’のライトコマンドを実行した後の状態を示し、（ｃ）は第１世代のスナップショット取得コマンドを実行し、データＣ’，Ｄ’のライトコマンドを実行した後の状態を示し、（ｄ）は第２世代のスナップショット取得コマンドを実行し、データＤ”のライトコマンドを実行した後の状態を示し、（ｅ）は、ブロッククリーンアップ処理によるデータの退避が完了した時点をす図である。
【図７】本発明の第２の実施形態における半導体記憶装置の内部状態変化の一例の後半を示し、（ａ）はブロッククリーンアップ処理が完了した状態を示し、（ｂ）は第２世代のスナップショットを解放するスナップショット解放コマンドを実行した直後の後の状態を示し、（ｃ）はデータＣ”のライトコマンドを実行した後の状態を示し、（ｄ）は第１世代のスナップショットを解放するスナップショット解放コマンドを実行した後の状態を示し、（ｅ）は、データＤ”’を書き込むライトコマンドを実行した直後の内部状態を示す図である。
【図８】本発明の第２の実施形態におけるメモリコントローラが、ホスト装置から受信したコマンドについて実行する処理手順を示すフローチャートである。
【図９】本発明の第２の実施形態におけるメモリコントローラによるライト処理およびリード処理を示すフローチャートである。
【図１０】本発明の第２の実施形態におけるメモリコントローラによるブロッククリーンアップ処理を示すフローチャートである。
【符号の説明】
【０１４８】
１０００  半導体記憶装置
１０２０  メモリコントローラ
１０３０  不揮発性ＲＡＭ
１０４０  フラッシュメモリ
【図１】
2008159013.tif 000003
【図２】
2008159013.tif 000004
【図３】
2008159013.tif 000005
【図４】
2008159013.tif 000006
【図５】
2008159013.tif 000007
【図６】
2008159013.tif 000008
【図７】
2008159013.tif 000009
【図８】
2008159013.tif 000010
【図９】
2008159013.tif 000011
【図１０】
2008159013.tif 000012