JP2021047948A - 記憶装置およびメモリコントローラ - Google Patents

記憶装置およびメモリコントローラ Download PDF

Info

Publication number
JP2021047948A
JP2021047948A JP2019169957A JP2019169957A JP2021047948A JP 2021047948 A JP2021047948 A JP 2021047948A JP 2019169957 A JP2019169957 A JP 2019169957A JP 2019169957 A JP2019169957 A JP 2019169957A JP 2021047948 A JP2021047948 A JP 2021047948A
Authority
JP
Japan
Prior art keywords
storage
block
area
pointer
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2019169957A
Other languages
English (en)
Inventor
善寛 上田
Yoshihiro Ueda
善寛 上田
奈穂美 武田
Naomi Takeda
奈穂美 武田
白川 政信
Masanobu Shirakawa
政信 白川
万里江 高田
Marie Takada
万里江 高田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Kioxia Corp
Original Assignee
Kioxia Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Kioxia Corp filed Critical Kioxia Corp
Priority to JP2019169957A priority Critical patent/JP2021047948A/ja
Priority to TW109103595A priority patent/TWI771646B/zh
Priority to CN202010108761.4A priority patent/CN112527188B/zh
Priority to US16/816,439 priority patent/US11237763B2/en
Publication of JP2021047948A publication Critical patent/JP2021047948A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1004Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1048Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using arrangements adapted for a specific error detection or correction feature
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1068Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in sector programmable memories, e.g. flash disk
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0616Improving the reliability of storage systems in relation to life time, e.g. increasing Mean Time Between Failures [MTBF]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0674Disk device
    • G06F3/0676Magnetic disk device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0682Tape device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1032Reliability improvement, data loss prevention, degraded operation etc
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • G06F2212/1044Space efficiency improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/657Virtual address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7201Logical to physical mapping or translation of blocks or pages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7203Temporary buffering, e.g. using volatile buffer or dedicated buffer blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7205Cleaning, compaction, garbage collection, erase control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7208Multiple device management, e.g. distributing data over multiple flash devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7209Validity control, e.g. using flags, time stamps or sequence numbers

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Quality & Reliability (AREA)
  • Computer Security & Cryptography (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Detection And Correction Of Errors (AREA)
  • Memory System (AREA)
  • For Increasing The Reliability Of Semiconductor Memories (AREA)
  • Read Only Memory (AREA)

Abstract

【課題】複数の記憶ブロックに対する疲弊を平準化させる。【解決手段】一つの実施形態によれば記憶装置が提供される。記憶装置は、不揮発メモリと、制御回路とを備える。不揮発メモリは、それぞれがシフトレジスタを含む複数の記憶ブロックを備える。制御回路は、不揮発メモリに対するデータの書き込みおよび読み出しを制御する。制御回路は、読出制御部と、書込制御部とを備える。読出制御部は、複数の記憶ブロックのうちの第1記憶ブロックから対象データを読み出す。書込制御回路は、第1記憶ブロックから読み出した対象データを、複数の記憶ブロックのうちの第1記憶ブロックとは異なる第2記憶ブロックに書き込む。【選択図】図7

Description

実施形態は、記憶装置およびメモリコントローラに関する。
磁性体は、電流を流すことにより、細線の長手方向に磁壁が移動する磁壁シフトと呼ばれる現象が生じる。磁壁シフトの原理を利用して、基板に形成された磁性体に多数の磁区を記憶させる磁壁移動メモリが提案されている。
このような磁壁移動メモリは、複数の記憶ブロックを含む。複数の記憶ブロックのそれぞれは、シフトレジスタとして機能する。また、磁壁移動メモリ以外方式の、シフトレジスタ型の記憶ブロックを備えるメモリ装置も知られている。
ところで、このようなメモリ装置は、シフトレジスタ型の記憶ブロックからデータを読み出した場合、記憶ブロックに記憶されているデータが破壊される。従って、このようなメモリ装置は、データを読み出した場合、読み出したデータを再度記憶ブロックに書き戻さなければならない。しかし、このようなメモリ装置は、特定の記憶ブロックに記憶されているデータの読み出しが繰り返された場合、特定の記憶ブロックに疲弊が集中してしまう。
特開2008−090957号公報 特開2016−009806号公報 特開2019−057602号公報 米国特許8255613号明細書
一つの実施形態は、複数の記憶ブロックに対する疲弊を平準化させることができる記憶装置およびメモリコントローラを提供することを目的とする。
一つの実施形態によれば記憶装置が提供される。前記記憶装置は、不揮発メモリと、制御回路とを備える。前記不揮発メモリは、それぞれがシフトレジスタを含む複数の記憶ブロックを備える。前記制御回路は、前記不揮発メモリに対するデータの書き込みおよび読み出しを制御する。前記制御回路は、読出制御部と、書込制御部とを備える。前記読出制御部は、前記複数の記憶ブロックのうちの第1記憶ブロックから対象データを読み出す。前記書込制御回路は、前記第1記憶ブロックから読み出した前記対象データを、前記複数の記憶ブロックのうちの前記第1記憶ブロックとは異なる第2記憶ブロックに書き込む。
図1は、情報処理装置の構成を示す図である。 図2は、不揮発メモリの構成を示す図である。 図3は、メモリアレイの一部分の模式的な構成を示す図である。 図4は、LIFO型の記憶ブロックの書込時における、磁性体部に保持されている磁化情報の一例を示す図である。 図5は、LIFO型の記憶ブロックの読出時における、磁性体部に保持されている磁化情報の一例を示す図である。 図6は、FIFO型の記憶ブロックにおける書込素子(フィールドラインFL)および読出素子の配置を示す図である。 図7は、第1実施形態に係るメモリコントローラの構成を示す図である。 図8は、リードコマンドを受け取った場合の制御回路による処理の流れを示すフローチャートである。 図9は、ライトコマンドを受け取った場合の制御回路による処理の流れを示すフローチャートである。 図10は、第1実施形態に係るブロックポインタの更新処理の流れを示すフローチャートである。 図11は、第1実施形態におけるブロックポインタの移動を説明するための図である。 図12は、第1実施形態におけるデータの書き込み、読み出しおよび更新を説明するための図である。 図13は、第2実施形態に係るメモリアレイを示す図である。 図14は、第2実施形態に係るメモリコントローラの構成を示す図である。 図15は、第2実施形態に係るブロックポインタの更新処理の流れを示すフローチャートである。 図16は、第2実施形態に係る領域ポインタの更新処理の流れを示すフローチャートである。 図17は、第2実施形態に係る複数の記憶ブロックの状態の第1例を示す図である。 図18は、第2実施形態に係る複数の記憶ブロックの状態の第2例を示す図である。 図19は、第2実施形態に係るデータ群の移動を説明するための図である。 図20は、第3実施形態に係るブロックポインタの更新処理の流れを示すフローチャートである。 図21は、第3実施形態におけるデータの書き込み、読み出しおよび更新を説明するための図である。 図22は、第4実施形態に係るメモリアレイを示す図である。 図23は、第4実施形態に係るメモリコントローラの構成を示す図である。 図24は、第4実施形態に係るブロックポインタの更新処理の流れを示すフローチャートである。 図25は、第4実施形態におけるデータの書き込み、読み出しおよび更新を説明するための図である。 図26は、第4実施形態におけるデータの読み出しを説明するための図である。 図27は、領域設定部の処理を説明するための図である。 図28は、第5実施形態に係るメモリアレイを示す図である。 図29は、第5実施形態に係るメモリコントローラの構成を示す図である。 図30は、第5実施形態におけるデータの書き込み、読み出しおよび更新を説明するための図である。 図31は、第6実施形態に係るメモリコントローラの構成を示す図である。 図32は、第6実施形態におけるデータの書き込み、読み出しおよび更新を説明するための図である。 図33は、第7実施形態に係るメモリコントローラの構成を示す図である。 図34は、もし疑似リードコマンドを発生しない場合において、2つのデータが交互に読み出された状態を示す図である。 図35は、疑似リードコマンドを発生した場合において、2つのデータが交互に読み出された状態を示す図である。 図36は、疑似リードコマンドの発生パターンの一例を示す図である処理例を示す図である。
以下、図面を参照して実施形態について説明する。以下の説明において、同一の機能及び構成を有する構成要素については同一符号を付す。また、以下に示す各実施形態は、この実施形態の技術的思想を具体化するための装置や方法を例示するものであって、構成部品の材質、形状、構造、配置等を下記のものに特定するものではない。
(第1実施形態)
図1は、情報処理装置10の構成を示す図である。情報処理装置10は、ホストコントローラ12と、記憶装置20とを備える。
ホストコントローラ12は、1または複数のプロセッサを有する。プロセッサは、例えば、1または複数のCPU(Central Processing Unit)である。ホストコントローラ12は、プログラムを実行して、データを処理する。ホストコントローラ12は、プログラムの実行に応じて、記憶装置20からデータを読み出したり、記憶装置20にデータを書き込んだりする。
なお、ホストコントローラ12は、データ処理を実行できれば、どのような装置であってもよい。ホストコントローラ12は、プロセッサを含む情報処理機器であってもよいし、FPGA(Field Programmable Gate Array)または専用の回路等のCPU以外の回路であってもよい。
記憶装置20は、ホストコントローラ12とバスを介して接続される。記憶装置20は、ホストコントローラ12と、USB(Universal Serial Bus)等のインタフェースを介して接続されてもよい。記憶装置20は、ホストコントローラ12からのコマンドに応じて、ホストコントローラ12から受け取ったデータを記憶する。また、記憶装置20は、ホストコントローラ12からのコマンドに応じて、記憶しているデータをホストコントローラ12に送信する。
記憶装置20は、メモリコントローラ22と、不揮発メモリ24とを有する。不揮発メモリ24は、電源の供給を停止してもデータを記憶し続けるメモリである。
メモリコントローラ22は、ホストコントローラ12との間のデータの送受信を制御する。さらに、メモリコントローラ22は、不揮発メモリ24に対するデータの読み出しおよび書き込みを制御する。メモリコントローラ22は、ホストコントローラ12から受け取ったコマンドに応じて、不揮発メモリ24にデータを書き込む。また、メモリコントローラ22は、ホストコントローラ12から受け取ったコマンドに応じて、不揮発メモリ24からデータを読み出して、ホストコントローラ12に送信する。
図2は、不揮発メモリ24の構成を示す図である。不揮発メモリ24は、半導体装置により実現される。不揮発メモリ24は、メモリアレイ32と、ラインデコーダ34と、読出書込回路36とを含む。
メモリアレイ32は、複数の記憶ブロック40を有する。複数の記憶ブロック40のそれぞれは、複数のデータを記憶するシフトレジスタを含む。複数の記憶ブロック40のそれぞれは、1個のシフトレジスタを含んでもよいし、複数のシフトレジスタを含んでもよい。また、複数の記憶ブロック40のそれぞれは、固有の物理アドレスが割り当てられている。
複数の記憶ブロック40のそれぞれは、LIFO(Last In, First Out)型のシフトレジスタであっても、FIFO(First In, First Out)型のシフトレジスタであってもよい。記憶ブロック40は、複数のデータを記憶する。複数のデータのそれぞれは、例えば、1ビットである。記憶ブロック40は、1個のシフトレジスタを含む場合、複数のデータが、最初のデータから最後のデータまで、1データ毎に順次にシフトレジスタに書き込まれる。
ラインデコーダ34は、書込時および読出時において、メモリコントローラ22から、読出対象または書込対象の記憶ブロック40を特定するための物理アドレスが与えられる。ラインデコーダ34は、与えられた物理アドレスの記憶ブロック40に対して、複数のデータを読み出しまたは書き込み可能とするように、メモリアレイ32の内部の状態を制御する。
読出書込回路36は、書込時において、メモリコントローラ22から、書込指示および対象データ(複数のデータ)を受け取る。読出書込回路36は、書込時において、受け取った対象データ(複数のデータ)を、ラインデコーダ34により書き込み可能とされた記憶ブロック40に対して書き込む。
読出書込回路36は、読出時において、メモリコントローラ22から、読出指示を受け取る。読出書込回路36は、読出時において、ラインデコーダ34により読み出し可能とされた記憶ブロック40から対象データ(複数のデータ)を読み出す。そして、読出書込回路36は、読出時において、読み出した対象データ(複数のデータ)をメモリコントローラ22に供給する。
実施形態において、複数の記憶ブロック40のそれぞれは、磁気的に情報を記憶する1または複数の記憶ユニット41を含む。記憶ユニット41は、1つのシフトレジスタとして機能する。記憶ユニット41は、磁壁シフトの原理を用いて、所定方向に多数の磁化情報を保持することができる。例えば、記憶ユニット41は、細長い形状を有しており、長さ方向に沿った方向に多数の磁化情報を保持することができる。なお、ここで、磁化情報は、記憶ユニット41に対して1回の書き込みにより磁気的に書き込まれる情報の単位をいう。記憶ユニット41に対して異なる磁化方向の2つの磁化情報が書き込まれた場合には、その2つの磁化情報の間には磁壁が生じる。しかし、同一の磁化方向の2つの磁化情報が書き込まれた場合には、その2つの磁化情報の間には磁壁は生じない。
なお、複数の記憶ブロック40のそれぞれは、シフトレジスタを含めば、このような記憶ユニット41を含まなくてもよい。例えば、複数の記憶ブロック40のそれぞれは、非特許文献3に示されるような、インジウム、ガリウムおよび亜鉛を含む酸化物半導体により実現されたシフトレジスタであってもよい。
図3は、メモリアレイ32の一部分の模式的な構成を示す図である。メモリアレイ32は、複数の記憶ユニット41と、複数のビットラインBLと、複数のソースラインSLと、複数のフィールドラインFLと含む。
例えば、複数の記憶ユニット41は、半導体基板における平面(X−Y平面)に対して、2次元のマトリクスに対応して配置される。ここでは、基板における、マトリクスの行方向に対する方向をX方向とし、列方向に対応する方向をY方向とする。また、基板における、基板の平面に対して垂直な方向をZ方向とする。なお、X方向、Y方向およびZ方向は、互いに直交する。
複数のビットラインBLのそれぞれは、略直線状の配線であり、X方向に延伸する。複数のビットラインBLは、均等間隔で平行に配置される。
複数のソースラインSLのそれぞれは、略直線状の配線であり、Y方向に延伸する。複数のソースラインSLは、均等間隔で平行に配置される。複数のソースラインSLは、複数のビットラインBLとは異なるZ方向の位置(つまり、異なる層)に形成される。
複数のフィールドラインFLのそれぞれは、略直線状の配線であり、X方向に延伸する。複数のフィールドラインFLは、均等間隔で平行に配置される。
さらに、複数のフィールドラインFLは、複数のビットラインBL、複数のソースラインSLとは異なるZ方向の位置(つまり、異なる層)に形成される。より詳しくは、複数のフィールドラインFLは、複数のビットラインBLと、複数のソースラインSLとの間における、ビットラインBLに近い側の層に形成される。さらに、複数のフィールドラインFLのそれぞれは、Y方向における位置が、同一列に対応して設けられたビットラインBLの近傍に設けられる。
複数の記憶ユニット41のそれぞれは、複数のビットラインBLと、複数のソースラインSLとの間の層に形成される。複数の記憶ユニット41のそれぞれは、複数のビットラインBLと、1つのソースラインSLとの交差領域に設けられる。
複数の記憶ユニット41のそれぞれは、磁性体部42と、スイッチ素子44と、読出素子46とを含む。
磁性体部42は、導電性を有する、線状の強磁性体である。磁性体部42は、ビットラインBLおよびソースラインSLの両者に直交する方向(Z方向)に伸びるように配置される。
磁性体部42は、所定方向(Z方向)に、複数の磁化情報を保持可能である。複数の磁化情報のそれぞれは、記録情報に応じて、2つの記録方向の何れかに磁化された情報である。磁性体部42は、所定方向(Z方向)に所定の電流量のシフトパルス電流が流れることに応じて、保持している磁化情報を所定方向にシフトさせる。
磁性体部42は、Z方向の一端が、複数のソースラインSLのうちの対応する1つのソースラインSLに電気的に接続される。また、磁性体部42は、Z方向の他端(ソースラインSLとは反対側の端部)が、読出素子46およびスイッチ素子44を介して、複数のビットラインBLのうちの対応する1つのビットラインBLに電気的に接続可能である。従って、磁性体部42は、スイッチ素子44がオン状態の場合、対応するビットラインBLおよびソースラインSLから電流が供給されることにより、保持している磁化情報を所定方向(Z方向)に移動させることができる。
ここで、磁性体部42における1つの磁化情報を保持する領域を、メモリ領域43という。例えば、磁性体部42が最大でK個(Kは2以上の整数)の磁化情報を保持可能である場合、磁性体部42は、所定方向(Z方向)に、第1メモリ領域43−1〜第Kメモリ領域43−3までのK個のメモリ領域43を含む。本実施形態では、K個のメモリ領域43のうちの、磁性体部42における読出素子46側の領域を第1メモリ領域43−1といい、ソースラインSL側の領域を第Kメモリ領域43−Kという。
スイッチ素子44は、磁性体部42に直列に接続される2端子素子である。より具体的には、スイッチ素子44は、Z方向の一端が、複数のビットラインBLのうちの対応する1つのビットラインBLに電気的に接続される。スイッチ素子44は、他端が、読出素子46を介して磁性体部42のソースラインSLが接続されていない側の端部(第1メモリ領域43−1)に接続される。
スイッチ素子44は、磁性体部42における一端(第1メモリ領域43−1)と、対応する1つのビットラインBLとの間を電気的に接続または切断する。従って、スイッチ素子44がオン状態(接続状態)の場合、読出書込回路36は、対応するビットラインBLと対応するソースラインSLとの間に電流を流すことにより、読出素子46および磁性体部42に電流を流すことができる。
スイッチ素子44は、オフ状態において所定値以上の電圧が印加された場合にオン状態に変化する。さらに、スイッチ素子44は、オン状態において、保持電流値以上の電流が流れ続ける場合にオン状態を維持する。スイッチ素子44は、例えば、Te、SeおよびSからなる群より選択された少なくとも1種以上のカルコゲン元素を含んでもよい。または、スイッチ素子44は、このようなカルコゲン元素を含む化合物であるカルコゲナイドを含んでいてもよい。スイッチ素子44は、他にも、B、Al、Ga、In、C、Si、Ge、Sn、As、P、Sbからなる群より選択された少なくとも1種以上の元素を含んでもよい。
読出素子46は、磁性体部42におけるソースラインSLが接続されていない側の端部(第1メモリ領域43−1)と電気的に接続される。さらに、読出素子46は、磁性体部42における端部(第1メモリ領域43−1)と磁気的にも接続され、磁性体部42の端部(第1メモリ領域43−1)に保持された磁化情報の磁化方向を読み出す。
読出素子46は、一例として、磁気抵抗効果素子である。従って、読出素子46は、磁性体部42における端部(第1メモリ領域43−1)に保持された磁化情報の磁化方向に応じて、磁化方向が変化する。さらに、読出素子46は、記憶した磁化方向に応じて抵抗値が変化する。従って、読出書込回路36は、磁性体部42における端部(第1メモリ領域43−1)に保持された磁化情報の磁化方向を読み出すことができる。実施形態において、読出素子46は、磁気トンネル接合(MTJ)素子である。
複数の記憶ユニット41のそれぞれに含まれる磁性体部42における端部(第1メモリ領域43−1)は、複数のフィールドラインFLのうちの対応する1つのフィールドラインFLに磁気的に接続される。
複数のフィールドラインFLのそれぞれは、対応する列に含まれる記憶ユニット41に含まれる磁性体部42における端部(第1メモリ領域43−1)の近傍を通過する。従って、複数のフィールドラインFLのそれぞれは、電流が流れた場合、対応する記憶ユニット41に含まれる磁性体部42における端部(第1メモリ領域43−1)に誘導磁界を与えることができる。
つまり、複数のフィールドラインFLのそれぞれは、対応する列に配置された1以上の記憶ユニット41のそれぞれが有する磁性体部42における端部(第1メモリ領域43−1)に対して、流れる電流によって生じる磁界により記録情報に応じた磁化方向の磁化情報を書き込む書込素子として機能する。従って、読出書込回路36は、対応するフィールドラインFLに記録情報に応じた電流を流して誘導磁界を発生させることにより、対象の記憶ユニット41に含まれる磁性体部42に記録情報を磁気的に書き込むことができる。
図4は、LIFO型の記憶ユニット41の書込時における、磁性体部42に保持されている磁化情報の一例を示す図である。なお、図4は、磁性体部42が8個のメモリ領域43を含む場合を示す。
記憶ユニット41に対する書込時において、その記憶ユニット41に含まれるスイッチ素子44は、接続状態となる。従って、記憶ユニット41に対する書込時において、その記憶ユニット41に含まれる磁性体部42は、読出書込回路36から書込方向のシフトパルス電流が供給可能となる。
磁性体部42の書込素子(フィールドラインFL)側の端部には、一回の書込処理で、書込電流に応じた磁化方向の1つの磁化情報が書き込まれる。書込処理が1回終了した後、磁性体部42には、保持している全ての磁化情報を書込素子(フィールドラインFL)側の端部から離れる方向に(第1メモリ領域43−1から第8メモリ領域43−8に向かう方向に)、1磁化情報分シフトさせるシフトパルス電流が供給される。これにより、磁性体部42には、書込素子(フィールドラインFL)側の端部(第1メモリ領域43−1)に空きができ、次の新たな有効な磁化情報を書き込み可能となる。
以後、磁性体部42は、書込処理とシフトパルス電流の供給とが交互に行われる。そして、最初に書き込まれた磁化情報が、磁性体部42における書込素子(フィールドラインFL)とは反対側の端部(第8メモリ領域43−8)まで達すると、磁性体部42には、以後、新たな磁化情報が書き込まれない。
以上のように磁性体部42は、既に書き込まれた磁化情報を順次に末尾位置の方向(書込方向)にシフトしながら、新たな磁化情報が、書込素子(フィールドラインFL)側の端部(第1メモリ領域43−1)に書き込まれる。
図5は、LIFO型の記憶ユニット41の読出時における、磁性体部42に保持されている磁化情報の一例を示す図である。なお、図5は、磁性体部42が8個のメモリ領域43を含む場合を示す。
記憶ユニット41に対する読出時において、その記憶ユニット41に含まれるスイッチ素子44は、接続状態となる。従って、記憶ユニット41に対する読出時において、その記憶ユニット41に含まれる磁性体部42には、読出書込回路36から読出方向のシフトパルス電流が供給可能となる。
磁性体部42の読出素子46側の端部(第1メモリ領域43−1)には、一回の読出処理で、1つの磁化情報の磁化方向が読み出される。読出処理が1回終了した後、磁性体部42には、保持している全ての磁化情報を読出素子46側の端部に近づける方向に(第8メモリ領域43−8から第1メモリ領域43−1に向かう方向に)、1磁化情報分シフトさせるシフトパルス電流が供給される。これにより、磁性体部42は、直近に読み出された磁化情報の次の磁化情報を読み出し可能とすることができる。
以後、磁性体部42は、読出処理とシフトパルス電流の供給とが交互に行われる。そして、末尾の磁化情報(読出素子46側の端部から最も離れた位置に保存されていた磁化情報、すなわち、第8メモリ領域43−8に保持されていた磁化情報)が読出素子46側の端部まで達すると、磁性体部42は、全ての磁化情報が読み出された状態となる。
以上のように磁性体部42は、保持している磁化情報を順次に読出素子46側の端部(第1メモリ領域43−1)に近づく方向にシフトしながら、順次に磁化情報が読み出される。
図6は、FIFO型の記憶ユニット41における書込素子(フィールドラインFL)および読出素子46の配置を示す図である。なお、図6は、磁性体部42が8個のメモリ領域43を含む場合を示す。
メモリアレイ32は、図3〜図5に示した構成ではなく、他の構成であってもよい。また、複数の記憶ユニット41のそれぞれは、LIFO型のシフトレジスタではなく、FIFO型のシフトレジスタとして機能してもよい。
FIFO型のシフトレジスタとして機能する場合、書込素子(フィールドラインFL)は、磁性体部42における一方の端部(第1メモリ領域43−1)の近傍に配置される。FIFO型のシフトレジスタとして機能する場合、読出素子46は、書込素子(フィールドラインFL)が配置された端部(第1メモリ領域43−1)とは、反対側の端部(第8メモリ領域43−8)に磁気的および電気的に接続されるように設けられる。
そして、FIFO型のシフトレジスタとして機能する場合、磁性体部42には、書込時および読出時ともに、書込素子(フィールドラインFL)側から読出素子46側に向かう書込読出方向に(第1メモリ領域43−1から第8メモリ領域43−8に向かう方向に)、シフトパルス電流が供給される。
さらに、FIFO型のシフトレジスタとして機能する場合、磁性体部42は、書込処理と読出処理とが同時に行われてもよい。つまり、この場合、磁性体部42は、読出および書込の同時処理と、シフトパルス電流の供給とが交互に行われる。
図7は、第1実施形態に係るメモリコントローラ22の構成を示す図である。メモリコントローラ22は、制御回路50と、ホストIF回路52と、メモリIF回路54と、読出バッファ56と、書込バッファ58と、エラー訂正回路60と、テーブルメモリ62とを有する。
制御回路50は、ホストコントローラ12との間のデータの送受信の制御を行う。さらに、制御回路50は、不揮発メモリ24に対するデータの書き込みおよび読み出しを制御する。制御回路50は、例えば、ROM(Read Only Memory)等に記憶されたプログラムを読み出して実行するプロセッシング回路である。
ホストIF回路52は、制御回路50による制御に応じて、ホストコントローラ12との間でバス等を介してデータを送受信する。メモリIF回路54は、制御回路50による制御に応じて、不揮発メモリ24との間でデータを送受信する。
読出バッファ56は、不揮発メモリ24の記憶ブロック40から読み出されたデータを一時的に記憶する。書込バッファ58は、不揮発メモリ24の記憶ブロック40に書き込む前のデータを一時的に記憶する。
エラー訂正回路60は、不揮発メモリ24の記憶ブロック40から読み出されたデータに対して、エラー訂正処理を実行する。また、エラー訂正回路60は、不揮発メモリ24の記憶ブロック40に書き込むデータに対して、エラー訂正処理のためのパリティを付加する。なお、エラー訂正回路60は、制御回路50と別個の回路により実現されてもよいし、制御回路50と一体的に実現されてもよい。エラー訂正回路60は、制御回路50がプログラムを実行することにより実現されてもよい。
テーブルメモリ62は、アドレス変換テーブルを記憶する。アドレス変換テーブルは、不揮発メモリ24が有する複数の記憶ブロック40のそれぞれに記憶されるデータ毎に論理アドレスと物理アドレスとの対応関係が登録されている。論理アドレスは、ホストコントローラ12により割り当てられたアドレスである。物理アドレスは、データが記憶されている記憶ブロック40に割り当てられたアドレスである。
ここで、制御回路50は、ROM等に記憶されたプログラムを実行することにより、読出制御部72、書込制御部74、ブロックポインタ管理部76、アドレス更新部78、および、カウンタ管理部80として機能する。これにより、制御回路50は、読出制御部72と、書込制御部74と、ブロックポインタ管理部76と、アドレス更新部78と、カウンタ管理部80とを有する回路として動作する。
読出制御部72は、不揮発メモリ24からデータを読み出すための制御を実行する。書込制御部74は、不揮発メモリ24にデータを書き込むための制御を実行する。
ブロックポインタ管理部76は、不揮発メモリ24が有する複数の記憶ブロック40のうちの、次の書込先となる記憶ブロック40を示すブロックポインタを管理する。
アドレス更新部78は、不揮発メモリ24が有する複数の記憶ブロック40のうちの何れかの記憶ブロック40に、データが書き込まれた場合、アドレス変換テーブルを更新する。また、アドレス更新部78は、不揮発メモリ24が有する複数の記憶ブロック40のうちの何れかの記憶ブロック40に記憶されているデータが無効にされた場合、アドレス変換テーブルを更新する。
カウンタ管理部80は、書き込み回数を示すカウンタ値を管理する。より詳しくは、カウンタ値は、不揮発メモリ24が有する複数の記憶ブロック40のうちの最も多くの書き込みがされた記憶ブロック40の書き込み回数以上の値を表す。
図8は、リードコマンドを受け取った場合の制御回路50による処理の流れを示すフローチャートである。ホストコントローラ12からリードコマンドを受け取った場合、制御回路50は、図8に示す処理を実行する。リードコマンドは、対象データを識別する論理アドレスを含む。
まず、S11において、読出制御部72は、論理アドレスおよびアドレス変換テーブルに基づいて、対象データが記憶された記憶ブロック40の物理アドレスを特定する。続いて、S12において、読出制御部72は、特定した物理アドレスの記憶ブロック40から対象データを読み出す。
続いて、S13において、読出制御部72は、読み出した対象データを読出バッファ56に一時的に記憶させる。この場合において、エラー訂正回路60は、読み出した対象データに対するエラー訂正処理を実行する。続いて、S14において、読出制御部72は、読出バッファ56に一時的に記憶した対象データをホストコントローラ12に送信する。
続いて、S15において、読出制御部72は、読出バッファ56に記憶した対象データを書込バッファ58に一時的に記憶させる。この場合において、エラー訂正回路60は、パリティを再度生成して、対象データに付加してもよい。
続いて、S16において、書込制御部74は、書込バッファ58に記憶された対象データを、ブロックポインタに示された物理アドレスの記憶ブロック40に書き込む。続いて、S17において、アドレス更新部78は、アドレス変換テーブルに登録されている対象データの物理アドレスを、ブロックポインタに示された記憶ブロック40の物理アドレスに変更する。
続いて、S18において、ブロックポインタ管理部76は、ブロックポインタを更新する。制御回路50は、S15〜S17の処理と、S18の処理とを並行に行ってもよい。なお、ブロックポインタの更新処理の詳細は、図10を参照して後述する。S18の処理を終了すると、制御回路50は、本フローを終了する。
以上のように、読出制御部72は、不揮発メモリ24が有する複数の記憶ブロック40のうちの何れかの第1記憶ブロックから対象データを読み出す。この場合、書込制御部74は、第1記憶ブロックから読み出した対象データを、複数の記憶ブロック40のうちの第1記憶ブロックとは異なる第2記憶ブロックに対象データを書き込む。そして、制御回路50は、アドレス変換テーブルに登録された対象データの物理アドレスを、第2記憶ブロックに変更する。
このような処理を行うことにより、記憶装置20は、特定の対象データの読み出しが繰り返された場合であっても、特定の1つの記憶ブロック40に対するアクセスを繰り返さない。これにより、記憶装置20によれば、特定の記憶ブロック40にアクセスを集中させずに、複数の記憶ブロック40に対する疲弊を平準化させることができる。
図9は、ライトコマンドを受け取った場合の制御回路50による処理の流れを示すフローチャートである。ホストコントローラ12からライトコマンドを受け取った場合、制御回路50は、図9に示す処理を実行する。ライトコマンドは、対象データ、および、対象データを識別する論理アドレスを含む。
まず、S21において、書込制御部74は、対象データを書込バッファ58に一時的に記憶させる。この場合において、エラー訂正回路60は、パリティを生成して、対象データに付加する。続いて、S22において、書込制御部74は、書込バッファ58に記憶された対象データを、ブロックポインタに示された記憶ブロック40に書き込む。
続いて、S23において、アドレス更新部78は、アドレス変換テーブルに登録されている対象データの物理アドレスを、ブロックポインタに示された記憶ブロック40の物理アドレスに変更する。なお、アドレス更新部78は、新規データを不揮発メモリ24に書き込む場合、対象データの論理アドレスと物理アドレスとの対応関係がアドレス変換テーブルにまだ登録されていない。この場合、アドレス更新部78は、アドレス変換テーブルに、対象データの論理アドレスと物理アドレスとの対応関係を新規に登録する。
続いて、S24において、ブロックポインタ管理部76は、ブロックポインタを更新する。制御回路50は、S21〜S23の処理と、S24の処理とを並行に行ってもよい。なお、ブロックポインタの更新処理の詳細は、図10を参照して後述する。S24の処理を終了すると、制御回路50は、本フローを終了する。
以上のように、書込制御部74は、不揮発メモリ24が有する複数の記憶ブロック40のうちの何れかの第1記憶ブロックに記憶された対象データを更新する。この場合、書込制御部74は、複数の記憶ブロック40のうちの第1記憶ブロックとは異なる第2記憶ブロックに、更新後の対象データを書き込む。そして、制御回路50は、アドレス変換テーブルに登録された対象データの物理アドレスを、第2記憶ブロックに変更する。
このような処理を行うことにより、記憶装置20は、特定の対象データの更新が繰り返された場合であっても、特定の1つの記憶ブロック40に対するアクセスを繰り返さない。これにより、記憶装置20によれば、特定の記憶ブロック40にアクセスを集中させずに、複数の記憶ブロック40に対する疲弊を平準化させることができる。
なお、書込制御部74は、ライトコマンドを受け取った場合、記憶ブロック40に記憶されたデータの一部分を更新するリードモディファイライト処理を実行してもよい。この場合、まず、書込制御部74は、論理アドレスおよびアドレス変換テーブルに基づいて、対象データが記憶された記憶ブロック40の物理アドレスを特定し、特定した物理アドレスの記憶ブロック40から対象データを読み出して読出バッファ56に一時的に記憶させる。続いて、書込制御部74は、読み出した対象データにおける、ライトコマンドにより指定された一部分のデータを書き換える。そして、以後、書込制御部74は、書き換え後の対象データに対して、S21からS24の処理を実行する。例えば、ホストコントローラ12から受け取ったデータのサイズが、記憶装置20により管理されるデータのサイズより小さい場合、書込制御部74は、このようなリードモディファイライト処理を実行する。以下の説明では、説明の簡単のために、書込制御部74は、ライトコマンドを受け取った場合に、記憶ブロック40の単位分のデータの書き込みをする場合を例にして説明する。
図10は、第1実施形態に係るブロックポインタの更新処理の流れを示すフローチャートである。図8のS18および図9のS24において、ブロックポインタを更新する場合、制御回路50は、図10の処理を実行する。
まず、S31において、ブロックポインタ管理部76は、複数の記憶ブロック40をブロックポインタに示された記憶ブロック40から予め定められた順序で巡回的に探索することにより、ブロックポインタに示された記憶ブロック40の1個先の記憶ブロック40を検出する。例えば、複数の記憶ブロック40のそれぞれに対して連続番号の物理アドレスが割り当てられている場合、ブロックポインタ管理部76は、ブロックポインタを1インクリメントまたは1デクリメントすることにより、1個先の記憶ブロック40を検出する。なお、ブロックポインタ管理部76は、ブロックポインタが末尾の物理アドレスを示す場合には、ブロックポインタを先頭の物理アドレスに戻すことにより、巡回的な探索を実現する。
続いて、S32において、ブロックポインタ管理部76は、ブロックポインタを、検出した1個先の記憶ブロック40の物理アドレスを示すように変更する。
続いて、S33において、ブロックポインタ管理部76は、ブロックポインタに示された記憶ブロック40に、有効なデータが記憶されているか否かを判断する。すなわち、ブロックポインタ管理部76は、ブロックポインタに示された記憶ブロック40が、未だデータが書き込まれていない空ブロックである、または、データが書き込まれたが無効とされた無効ブロックである場合、有効なデータが記憶されていないと判断する。例えば、ブロックポインタ管理部76は、アドレス変換テーブルを参照して、ブロックポインタに示された記憶ブロック40に有効なデータが記憶されているか否かを判断する。
ブロックポインタに示された記憶ブロック40に有効なデータが記憶されている場合(S33のYes)、ブロックポインタ管理部76は、処理をS34に進める。S34において、ブロックポインタ管理部76は、ブロックポインタに示された記憶ブロック40が末尾の記憶ブロック40であるか否かを判断する。末尾の記憶ブロック40ではない場合(S34のNo)、ブロックポインタ管理部76は、処理をS31に戻して、S31から処理を繰り返す。
末尾の記憶ブロック40である場合(S34のYes)、ブロックポインタ管理部76は、処理をS35に進める。S35において、カウンタ管理部80は、カウンタ値をインクリメントする。これにより、カウンタ管理部80は、複数の記憶ブロック40のうちの最も多くの書き込みがされた記憶ブロック40の書き込み回数以上の値を表すように、カウンタ値を更新することができる。カウンタ管理部80は、S35を終えると、処理をS31に戻して、S31から処理を繰り返す。
また、ブロックポインタに示された記憶ブロック40に有効なデータが記憶されていない場合(S33のNo)、ブロックポインタ管理部76は、本フローを終了する。これにより、ブロックポインタ管理部76は、ブロックポインタを、複数の記憶ブロック40のうちの有効なデータを記憶していない最初の記憶ブロック40の物理アドレスを示すように更新することができる。
以上のように、対象データが書き込まれた場合、ブロックポインタ管理部76は、複数の記憶ブロック40をブロックポインタに示された記憶ブロック40から予め定められた順序で巡回的に探索することにより、複数の記憶ブロック40のうちの有効なデータを記憶していない最初の記憶ブロック40を検出する。これにより、ブロックポインタ管理部76は、有効なデータを記憶していない記憶ブロック40を順番に選択してデータを書き込ませることができる。従って、記憶装置20によれば、特定の記憶ブロック40に書き込みを集中させずに、複数の記憶ブロック40に対して均等に書き込みをすることができる。
また、カウンタ管理部80は、最も多くの書き込みがされた記憶ブロック40の書き込み回数以上の値となるように、カウンタ値を更新する。これにより、記憶装置20によれば、不揮発メモリ24の寿命を管理することができる。
図11は、第1実施形態におけるデータの書き込み、読み出しおよび更新を説明するための図である。図11において、1つの四角は、1つの記憶ブロック40を表す。また、図11において、空白の四角は、まだデータが書き込まれていない空ブロックを表す。また、図11において、ハッチングされた四角は、何らかのデータが書き込まれた後の記憶ブロック40を表す。以降の同様の図も同一である。
図11の(A)に示すように、新規データは、ブロックポインタに示された記憶ブロック40に書き込まれる。ブロックポインタは、新規データが書き込まれた後に、有効なデータを記憶していない最初の記憶ブロック40を示すように更新される。
図11の(B)に示すように、記憶ブロック40は、データが書き込まれた後に、ホストコントローラ12からのリードコマンドにより、データが読み出される場合がある。図11の(C)に示されるように、データが読み出された場合、読出元の記憶ブロック40に記憶されたデータは、無効とされる。読み出されたデータは、読み出し元の記憶ブロック40とは異なる、ブロックポインタに示された記憶ブロック40に書き戻される。そして、ブロックポインタは、データが書き戻された後、有効なデータを記憶していない最初の記憶ブロック40を示すように更新される。
図11の(D)に示すように、記憶ブロック40は、データが書き込まれた後に、ホストコントローラ12からのライトコマンドにより、データが更新される場合がある。図11の(E)に示されるように、データが更新された場合、更新元の記憶ブロック40に記憶された更新前データは、無効とされる。更新後データは、ブロックポインタに示された記憶ブロック40に書き込まれる。そして、ブロックポインタは、更新後データが書き込まれた後、有効なデータを記憶していない最初の記憶ブロック40を示すように更新される。
図12は、第1実施形態におけるブロックポインタの移動を説明するための図である。ブロックポインタは、複数の記憶ブロック40のうちの末尾の記憶ブロック40まで達した後、先頭の記憶ブロック40を示すように変更される。カウンタ値は、ブロックポインタが末尾の記憶ブロック40に達する毎に1ずつインクリメントされる。
複数の記憶ブロック40の全てに対して1回データが書き込まれた後には、図12の(A)、図12の(B)および図12の(C)に示すように、ブロックポインタは、有効なデータを記憶していない最初の記憶ブロック40を示すように更新される。また、図12の(D)に示すように、カウンタ値は、ブロックポインタが有効なデータを記憶していない記憶ブロック40を探索する際、末尾の記憶ブロック40に達する毎に、インクリメントされる。
以上のように、第1実施形態に係る記憶装置20は、特定の対象データの読み出しが繰り返された場合または特定の対象データの更新が繰り返された場合であっても、特定の1つの記憶ブロック40に対するアクセスを繰り返さない。これにより、記憶装置20によれば、特定の記憶ブロック40にアクセスを集中させずに、複数の記憶ブロック40に対する疲弊を平準化させることができる。
(第2実施形態)
つぎに、第2実施形態に係る情報処理装置10について説明をする。第2実施形態に係る情報処理装置10は、第1実施形態に係る情報処理装置10と略同一の構成および機能を有する。第2実施形態に係る情報処理装置10を説明するにあたり、第1実施形態と略同一の構成および機能を有する構成要素については、同一の符号を付けて、相違点を除き詳細な説明を省略する。なお、第3実施形態以降についても同様である。
図13は、第2実施形態に係るメモリアレイ32を示す図である。第2実施形態において、不揮発メモリ24は、複数の領域82に分割されている。複数の記憶ブロック40のそれぞれは、複数の領域82のうちの何れか1つに含まれる。なお、複数の領域82は、不揮発メモリ24内において物理的に分割されているのではなく、論理的に分割される。
図14は、第2実施形態に係るメモリコントローラ22の構成を示す図である。
第2実施形態に係る制御回路50は、ROM等に記憶されたプログラムを実行することにより、読出制御部72、書込制御部74、ブロックポインタ管理部76、アドレス更新部78、カウンタ管理部80、空ブロック管理部84、領域ポインタ管理部86、および、データ移動部88として機能する。これにより、制御回路50は、読出制御部72と、書込制御部74と、ブロックポインタ管理部76と、アドレス更新部78と、カウンタ管理部80と、空ブロック管理部84と、領域ポインタ管理部86と、データ移動部88とを有する回路として動作する。
空ブロック管理部84は、複数の領域82のそれぞれについて、有効なデータを記憶していない記憶ブロック40の数を表す空ブロック数を管理する。有効なデータを記憶していない記憶ブロック40は、未だデータが書き込まれていない空ブロック、データが書き込まれたが無効とされた無効ブロック、または、書き込まれたデータが読み出された後どのようなデータも書きこまれていないブロックである。
領域ポインタ管理部86は、複数の領域82のうちの次の書込先となる対象領域を示す領域ポインタを管理する。領域ポインタ管理部86は、複数の領域82のそれぞれについての空ブロック数に基づき、複数の領域82のうちの1つを新たな対象領域として選択する。
第2実施形態において、書込制御部74は、複数の領域82のうちの領域ポインタにより示される対象領域における、ブロックポインタにより示される記憶ブロック40に、対象データを書き込む。第2実施形態において、カウンタ管理部80は、複数の領域82のそれぞれについて、書き込み回数を示すカウンタ値を管理する。より詳しくは、カウンタ値は、その領域82に含まれる複数の記憶ブロック40のうちの最も多くの書き込みがされた記憶ブロック40の書き込み回数以上の値を表す。
データ移動部88は、複数の領域82に対するカウンタ値の分散が予め定められた値より大きくなった場合、移動元領域に記憶されているデータ群を、移動先領域に移動させる。移動元領域は、複数の領域82のうちのカウンタ値が予め定められた第1基準値より小さい何れかの領域82である。移動先領域は、複数の領域82のうちのカウンタ値が予め定められた第2基準値より大きい何れかの領域82である。なお、第2基準値は、第1基準値より大きい。これにより、データ移動部88は、カウンタ値が第1基準値より小さい領域82の空ブロック数を多くすることができる。
図15は、第2実施形態に係るブロックポインタの更新処理の流れを示すフローチャートである。第2実施形態に係る制御回路50は、図8のS18および図9のS24において、ブロックポインタを更新する場合、図15の処理を実行する。
まず、S41において、ブロックポインタ管理部76は、複数の記憶ブロック40をブロックポインタに示された記憶ブロック40から予め定められた順序で探索することにより、ブロックポインタに示された記憶ブロック40の1個先の記憶ブロック40を検出する。
続いて、S42において、ブロックポインタ管理部76は、ブロックポインタを、検出した1個先の記憶ブロック40の物理アドレスを示すように変更する。
続いて、S43において、ブロックポインタ管理部76は、ブロックポインタに示された記憶ブロック40に、有効なデータが記憶されているか否かを判断する。ブロックポインタに示された記憶ブロック40に有効なデータが記憶されている場合(S43のYes)、ブロックポインタ管理部76は、処理をS44に進める。
S44において、ブロックポインタ管理部76は、ブロックポインタに示された記憶ブロック40が、領域ポインタに示される対象領域における末尾の記憶ブロック40であるか否かを判断する。ブロックポインタに示された記憶ブロック40が末尾の記憶ブロック40ではない場合(S44のNo)、ブロックポインタ管理部76は、処理をS41に戻して、S41から処理を繰り返す。
ブロックポインタに示された記憶ブロック40が末尾の記憶ブロック40である場合(S44のYes)、ブロックポインタ管理部76は、処理をS45に進める。S45において、カウンタ管理部80は、対象領域の書き込み回数を表すカウンタ値をインクリメントする。これにより、カウンタ管理部80は、対象領域におけるカウンタ値を、対象領域に含まれる2以上の記憶ブロック40のうちの最も多くの書き込みがされた記憶ブロック40の書き込み回数以上の値を表すように更新することができる。カウンタ管理部80は、S45を終えると、処理をS46に進める。
続いて、S46において、領域ポインタ管理部86は、複数の領域82のうちの1つを、新たな対象領域として選択する。例えば、領域ポインタ管理部86は、空ブロック管理部84により管理されている複数の領域82のそれぞれについての空ブロック数に基づき、複数の領域82のうちの1つを新たな対象領域として選択する。そして、領域ポインタ管理部86は、選択した対象領域を示すように領域ポインタを更新する。領域ポインタの更新処理の詳細については、図16を参照して後述する。
続いて、S47において、ブロックポインタ管理部76は、ブロックポインタを、領域ポインタに示される対象領域における、先頭の記憶ブロック40の物理アドレスを示すように変更する。S47の処理を終えると、ブロックポインタ管理部76は、処理をS43に戻して、S43から処理を繰り返す。
また、S43において、ブロックポインタに示された記憶ブロック40に有効なデータが記憶されていない場合(S43のNo)、ブロックポインタ管理部76は、本フローを終了する。
以上のように、対象データが書き込まれた場合、ブロックポインタ管理部76は、複数の記憶ブロック40のうちの対象領域に含まれる2以上の記憶ブロック40を、ブロックポインタに示された記憶ブロック40から対象領域における末尾の記憶ブロック40まで予め定められた順序で探索することにより、対象領域に含まれる2以上の記憶ブロック40のうちの有効なデータを記憶していない最初の記憶ブロック40を検出する。そして、ブロックポインタ管理部76は、検出した最初の記憶ブロック40を示すようにブロックポインタを更新する。これにより、ブロックポインタ管理部76は、対象領域における有効なデータを記憶していない記憶ブロック40を順番に選択してデータを書き込ませることができる。
さらに、末尾の記憶ブロック40まで探索した場合、領域ポインタ管理部86は、複数の領域82のうちの1つを対象領域として選択し、選択した対象領域を示すように領域ポインタを更新する。これにより、領域ポインタ管理部86は、複数の領域82の中からデータを書き込むために適切な対象領域を選択することができる。
さらに、末尾の記憶ブロック40まで探索した場合、ブロックポインタ管理部76は、新たな対象領域に含まれる2以上の記憶ブロック40のうちの先頭の記憶ブロック40を示すようにブロックポインタを更新して、最初の記憶ブロック40の検出を繰り返す。これにより、ブロックポインタ管理部76は、末尾の記憶ブロック40まで探索した後に、新たな対象領域の先頭の記憶ブロック40からデータを書き込ませることができる。
図16は、第2実施形態に係る領域ポインタの更新処理の流れを示すフローチャートである。図15のS46において、領域ポインタを更新する場合、制御回路50は、図16の処理を実行する。
まず、S51において、領域ポインタ管理部86は、余裕率を取得する。余裕率は、不揮発メモリ24におけるデータを書き込むことが可能な全ての記憶ブロック40の数に対する不揮発メモリ24における空ブロック数の比率を表す。
続いて、S52において、領域ポインタ管理部86は、複数の領域82のうちの、空き率が余裕率より大きい1または複数の領域82を抽出する。空き率は、その領域82に含まれる記憶ブロック40の数に対する、その領域82の空ブロック数の比率を表す。領域ポインタ管理部86は、空ブロック数を、空ブロック管理部84から取得する。
続いて、S53において、領域ポインタ管理部86は、抽出した1または複数の領域82の中から1つの領域82を選択する。そして、領域ポインタ管理部86は、選択した領域82を新たな対象領域とする。
続いて、S54において、領域ポインタ管理部86は、選択した対象領域を示すように領域ポインタを変更する。S54を終えると、領域ポインタ管理部86は、本フローを終了する。
以上のように、領域ポインタ管理部86は、複数の領域82のうちの、余裕率よりも空き率が大きい領域82を、対象領域として選択する。これにより、領域ポインタ管理部86は、空き率の小さい領域82よりも、空き率の大きい領域82にデータを書き込ませることができる。
また、領域ポインタ管理部86は、図16の処理に代えて、複数の領域82のうちの空ブロック数が予め定められた値以上である領域82を、対象領域として選択してもよい。また、予め定められた値は、時間経過に従って変更されてもよい。これにより、領域ポインタ管理部86は、比較的に簡易な処理で、空き率の大きい領域82にデータを書き込ませることができる。
また、領域ポインタ管理部86は、図16の処理に代えて、複数の領域82のうちの空き率が最も大きい領域82を、対象領域として選択してもよい。これにより、領域ポインタ管理部86は、最も空き率の大きい領域82から順番に、データを書き込ませることができる。
また、以上の処理に加えて、領域ポインタ管理部86は、複数の領域82のうちの、カウンタ値が予め設定された閾値より小さい領域82を、対象領域として選択してもよい。従って、領域ポインタ管理部86は、空き率が大きい領域82であっても、カウンタ値が閾値以上である領域82を選択しない。これにより、領域ポインタ管理部86は、複数の領域82に対する疲弊を平準化させることができる。
図17は、第2実施形態に係る複数の記憶ブロック40の状態の第1例を示す図である。図17において、点線で囲まれた領域82は、対象領域を表す。図18および図19においても同様である。
図17の(A)に示すように、不揮発メモリ24にデータが書き込まれていない状態において、領域ポインタは、予め定められた基準で選択された対象領域を示す。また、ブロックポインタは、対象領域における先頭の記憶ブロック40を示す。
図17の(B)に示すように、対象領域は、先頭の記憶ブロック40から順次にデータが書き込まれる。対象領域の空ブロック数は、データが書き込まれる毎に、デクリメントされる。
図17の(C)に示すように、対象領域の末尾の記憶ブロック40までデータが書き込まれた場合、領域ポインタは、選択された新たな対象領域を示すように更新される。また、複数の領域82のそれぞれの空ブロック数は、その領域82からデータが読み出される毎に、および、その領域82に記憶されたデータが無効とされる毎に、インクリメントされる。また、複数の領域82のそれぞれの空ブロック数は、その領域82にデータが書き込まれる毎にデクリメントされる。
図18は、第2実施形態に係る複数の記憶ブロック40の状態の第2例を示す図である。図18の(A)に示すように、対象領域は、例えば、空ブロック数が予め定められた値以上の1または複数の領域82の中から選択される。
図18の(B)に示すように、1回以上データが書き込まれた領域82が対象領域として選択された場合、ブロックポインタは、対象領域における最初の無効な記憶ブロック40を示すように更新される。最初の無効な記憶ブロック40は、対象領域における複数の記憶ブロック40を、直前のブロックポインタの位置から所定の順序で探索した場合に、最初に検出される有効でない記憶ブロック40である。従って、対象領域における有効な記憶ブロック40は、探索においてスキップされる。
図18の(C)に示すように、空ブロック数が予め定められた値以上の1または複数の領域82から対象領域が選択されるので、空ブロック数が予め定められた値より小さい領域82は、対象領域として選択されない。例えば、空ブロック数が1より小さい領域82は、対象領域として選択されない。
図19は、第2実施形態に係るデータ群の移動を説明するための図である。データ移動部88は、複数の領域82に対するカウンタ値の分散が予め定められた値より大きくなった場合、データ群の移動処理を実行する。例えば、データ移動部88は、カウンタ値の最大値と最小値との差が、予め定められた値以上となった場合に、カウンタ値の分散が予め定められた値より大きくなったと判断してもよい。
データ移動部88は、移動処理を実行する場合、複数の領域82のうちのカウンタ値が予め定められた第1基準値より小さい何れかの領域82を移動元領域として特定する。また、データ移動部88は、移動処理を実行する場合、複数の領域82のうちのカウンタ値が予め定められた第2基準値より大きい何れかの領域82を移動先領域として特定する。さらに、データ移動部88は、空ブロック数が予め定められた値以上であり、且つ、カウンタ値が第2基準値より大きい何れかの領域82を、移動先領域として特定してもよい。
例えば、図19の(A)に示すように、データ移動部88は、カウンタ値が1である領域82を移動元領域として特定する。また、データ移動部88は、カウンタ値が40であり、空ブロック数が3である領域82を、移動先領域として特定する。
そして、図19の(B)に示すように、データ移動部88は、移動元領域に記憶されているデータ群を、移動先領域に移動させる。より具体的には、データ移動部88は、移動元領域における、移動先領域の空ブロック数以下の数の記憶ブロック40に記憶されているデータ群を読み出す。続いて、データ移動部88は、読み出したデータ群を移動先領域における空ブロックに書き込む。これにより、データ移動部88は、移動元領域の空ブロック数を増加させることができる。
以上のように、第2実施形態に係る記憶装置20は、複数の領域82のうちの空き数の多い領域82に対してデータを書き込むことができる。これにより、第2実施形態に係る記憶装置20によれば、空き数の多い領域82に対して効率良くデータを書き込むことができる。
(第3実施形態)
つぎに、第3実施形態に係る情報処理装置10について説明をする。
図20は、第3実施形態に係るブロックポインタの更新処理の流れを示すフローチャートである。第3実施形態に係る制御回路50は、第1実施形態に係る制御回路50とブロックポインタの更新処理が異なる。
第3実施形態に係る制御回路50は、図8のS18および図9のS24において、図20の処理を実行する。
まず、S61において、ブロックポインタ管理部76は、複数の記憶ブロック40をブロックポインタに示された記憶ブロック40から予め定められた順序で巡回的に探索することにより、複数の記憶ブロック40のうちのブロックポインタに示された記憶ブロック40の1個先の記憶ブロック40および2個先の記憶ブロック40を検出する。続いて、S62において、ブロックポインタ管理部76は、ブロックポインタを、1個先の記憶ブロック40の物理アドレスを示すように変更する。
続いて、S63において、ブロックポインタ管理部76は、2個先の記憶ブロック40に有効なデータが記憶されているか否かを判断する。2個先の記憶ブロック40に有効なデータが記憶されている場合(S63のYes)、ブロックポインタ管理部76は、処理をS64に進める。
S64において、ブロックポインタ管理部76は、2個先の記憶ブロック40に記憶されているデータを、1個先の記憶ブロック40に移動させる。より具体的には、ブロックポインタ管理部76は、2個先の記憶ブロック40に記憶されているデータを読み出す。続いて、ブロックポインタ管理部76は、読み出したデータを1個先の記憶ブロック40に書き込む。
続いて、S65において、アドレス更新部78は、アドレス変換テーブルに登録されている、2個先の記憶ブロック40から1個先の記憶ブロック40へと移動したデータの物理アドレスを更新する。
続いて、S66において、ブロックポインタ管理部76は、ブロックポインタに示された記憶ブロック40が末尾の記憶ブロック40であるか否かを判断する。末尾の記憶ブロック40ではない場合(S66のNo)、ブロックポインタ管理部76は、処理をS61に戻して、S61から処理を繰り返す。
末尾の記憶ブロック40である場合(S66のYes)、ブロックポインタ管理部76は、処理をS67に進める。S67において、カウンタ管理部80は、カウンタ値をインクリメントする。カウンタ管理部80は、S67を終えると、処理をS61に戻して、S61から処理を繰り返す。
また、2個先の記憶ブロック40に有効なデータが記憶されていない場合(S63のNo)、ブロックポインタ管理部76は、本フローを終了する。これにより、ブロックポインタ管理部76は、ブロックポインタを、有効なデータを記憶していない連続した2つの記憶ブロック40のうちの最初の記憶ブロック40の物理アドレスを示すように更新することができる。
以上のように、対象データが書き込まれた場合、ブロックポインタ管理部76は、複数の記憶ブロック40をブロックポインタに示された記憶ブロック40から予め定められた順序で巡回的に探索することにより、複数の記憶ブロック40のうちのブロックポインタに示された記憶ブロック40の1個先の記憶ブロック40および2個先の記憶ブロック40を検出する。さらに、ブロックポインタ管理部76は、1個先の記憶ブロック40を示すようにブロックポインタを更新する。さらに、ブロックポインタ管理部76は、2個先の記憶ブロック40に有効なデータが記憶されている場合、2個先の記憶ブロック40に記憶されているデータを、1個先の記憶ブロック40に移動させる。そして、ブロックポインタ管理部76は、有効なデータが記憶されていない2個先の記憶ブロック40が検出されるまで、1個先の記憶ブロック40および2個先の記憶ブロック40の検出、ブロックポインタの更新およびデータの移動を繰り返す。これにより、ブロックポインタ管理部76は、複数の記憶ブロック40のそれぞれに対する書き込み回数を均一にすることができる。
図21は、第3実施形態におけるデータの書き込み、読み出しおよび更新を説明するための図である。
例えば、図21の(A)に示すように、2個先の記憶ブロック40が空ブロックである場合に、ブロックポインタは、空ブロックである1個先の記憶ブロック40を示すように更新される。また、例えば、図21の(B)に示すように、2個先の記憶ブロック40が無効ブロックである場合に、ブロックポインタは、無効ブロックである1個先の記憶ブロック40を示すように更新される。
ここで、図21の(C)に示すように、データが書き込まれた記憶ブロック40の2個先の記憶ブロック40に、有効なデータが記憶されている場合がある。この場合、図21の(D)に示すように、2個先の記憶ブロック40に記憶されたデータは、1個先の記憶ブロック40に移動される。この結果、2個先の記憶ブロック40は、無効ブロックとなり、且つ、ブロックポインタは、2個先の記憶ブロック40を示すように更新される。
以上のように、第3実施形態に係る記憶装置20は、複数の記憶ブロック40を予め定められた順序で巡回的に探索することにより、データが書き込まれた後、1度もデータが読み出されていない記憶ブロック40を検出した場合、その記憶ブロック40からデータを読み出して、1つ前の記憶ブロック40に書き込む。これにより、第3実施形態に係る記憶装置20によれば、複数の記憶ブロック40のそれぞれに対する書き込み回数を均一にすることができる。
(第4実施形態)
つぎに、第4実施形態に係る情報処理装置10について説明をする。
図22は、第4実施形態に係るメモリアレイ32を示す図である。第4実施形態において、不揮発メモリ24は、ホット領域90と、コールド領域92とを有する。複数の領域82のそれぞれは、ホット領域90またはコールド領域92の何れかに含まれる。なお、ホット領域90とコールド領域92とは、不揮発メモリ24内において物理的に分割されているのではなく、論理的に分割される。
図23は、第4実施形態に係るメモリコントローラ22の構成を示す図である。第4実施形態に係る制御回路50は、ROM等に記憶されたプログラムを実行することにより、読出制御部72、書込制御部74、ブロックポインタ管理部76、アドレス更新部78、カウンタ管理部80、コールドポインタ管理部94、および、領域設定部96として機能する。これにより、制御回路50は、読出制御部72と、書込制御部74と、ブロックポインタ管理部76と、アドレス更新部78と、カウンタ管理部80と、コールドポインタ管理部94と、領域設定部96とを有する回路として動作する。
第4実施形態において、ブロックポインタは、ホット領域90に含まれる2以上の記憶ブロック40のうちの、次の書込先となる記憶ブロック40を示す。コールドポインタ管理部94は、コールドポインタを管理する。コールドポインタは、コールド領域92に含まれる2以上の記憶ブロック40のうちの、次の書込先となる記憶ブロック40を示す。
領域設定部96は、複数の記憶ブロック40のそれぞれが、ホット領域90またはコールド領域92の何れに含まれるかを設定する。領域設定部96は、複数の記憶ブロック40のそれぞれを、ホット領域90に含ませるか、または、コールド領域92に含ませるかを、予め定められたタイミングで変更する。また、第4実施形態において、カウンタ管理部80は、ホット領域90のカウンタ値およびコールド領域92のカウンタ値を管理する。
図24は、第4実施形態に係るブロックポインタの更新処理の流れを示すフローチャートである。第4実施形態に係る制御回路50は、図8のS18および図9のS24において、図24の処理を実行する。
まず、S71において、ブロックポインタ管理部76は、ホット領域90に含まれる2以上の記憶ブロック40をブロックポインタに示された記憶ブロック40から予め定められた順序で巡回的に探索することにより、ブロックポインタに示された記憶ブロック40の1個先の記憶ブロック40を検出する。
続いて、S72において、ブロックポインタ管理部76は、ブロックポインタを、ホット領域90における1個先の記憶ブロック40の物理アドレスを示すように変更する。
続いて、S73において、ブロックポインタ管理部76は、ホット領域90における1個先の記憶ブロック40に有効なデータが記憶されているか否かを判断する。ホット領域90における1個先の記憶ブロック40に有効なデータが記憶されている場合(S73のYes)、ブロックポインタ管理部76は、処理をS74に進める。
S74において、ブロックポインタ管理部76は、ホット領域90における1個先の記憶ブロック40に記憶されているデータを、コールドポインタに示される記憶ブロック40に移動させる。より具体的には、ブロックポインタ管理部76は、ホット領域90における1個先の記憶ブロック40に記憶されているデータを読み出す。続いて、ブロックポインタ管理部76は、読み出したデータをコールドポインタに示された記憶ブロック40に書き込む。
続いて、S75において、アドレス更新部78は、アドレス変換テーブルに登録されている、ホット領域90における1個先の記憶ブロック40からコールドポインタに示された記憶ブロック40へと移動したデータの物理アドレスを更新する。
続いて、S76において、ブロックポインタ管理部76は、ブロックポインタに示された記憶ブロック40が末尾の記憶ブロック40であるか否かを判断する。末尾の記憶ブロック40ではない場合(S76のNo)、ブロックポインタ管理部76は、処理をS71に戻して、S71から処理を繰り返す。
末尾の記憶ブロック40である場合(S76のYes)、ブロックポインタ管理部76は、処理をS77に進める。S77において、カウンタ管理部80は、ホット領域90のカウンタ値をインクリメントする。カウンタ管理部80は、S77を終えると、処理をS71に戻して、S71から処理を繰り返す。
また、ホット領域90における1個先の記憶ブロック40に有効なデータが記憶されていない場合(S73のNo)、ブロックポインタ管理部76は、本フローを終了する。これにより、ブロックポインタ管理部76は、データが書き込まれた後、1度もデータが読み出されていないホット領域90における記憶ブロック40を検出した場合、その記憶ブロック40のデータをコールド領域92に移動させることができる。
以上のように、対象データが書き込まれた場合、ブロックポインタ管理部76は、ホット領域90に含まれる2以上の記憶ブロック40をブロックポインタに示された記憶ブロック40から予め定められた順序で巡回的に探索することにより、ホット領域90に含まれる2以上の記憶ブロック40のうちのブロックポインタに示された記憶ブロック40の1個先の記憶ブロック40を検出する。さらに、ブロックポインタ管理部76は、ホット領域90における1個先の記憶ブロック40を示すようにブロックポインタを更新する。さらに、ブロックポインタ管理部76は、ホット領域90における1個先の記憶ブロック40に有効なデータが記憶されている場合、ホット領域90における1個先の記憶ブロック40に記憶されたデータを、コールドポインタに示された記憶ブロック40に移動させる。そして、ブロックポインタ管理部76は、有効なデータが記憶されていないホット領域90における1個先の記憶ブロック40が検出されるまで、1個先の記憶ブロック40の検出、ブロックポインタの更新およびデータの移動を繰り返す。
これにより、記憶装置20によれば、ホット領域90に含まれる2以上の記憶ブロック40のそれぞれに対する書き込み回数を均一にすることができる。さらに、記憶装置20によれば、コールド領域92に含まれる2以上の記憶ブロック40のそれぞれにアクセス頻度の少ないデータを記憶させることができる。
さらに、コールドポインタ管理部94は、ホット領域90に含まれる記憶ブロック40に記憶されたデータが、コールドポインタに示された記憶ブロック40に移動された場合、図10に示す処理を実行する。なお、この場合、コールドポインタ管理部94は、ブロックポインタに代えて、コールドポインタを用いて処理を実行する。また、カウンタ管理部80は、コールド領域92のカウンタ値をインクリメントする。
従って、コールドポインタ管理部94は、コールドポインタに示された記憶ブロック40から予め定められた順序で巡回的に探索することにより、コールド領域92に含まれる2以上の記憶ブロック40のうちの有効なデータを記憶していない最初の記憶ブロック40を検出する。そして、コールドポインタ管理部94は、コールドポインタを、コールド領域92に含まれる2以上の記憶ブロック40のうちの有効なデータを記憶していない最初の記憶ブロック40を示すように変更する。これにより、記憶装置20によれば、コールド領域92に含まれる2以上の記憶ブロック40のうちの特定の記憶ブロック40に書き込みを集中させずに、均等に書き込みをすることができる。
なお、コールドポインタ管理部94は、ホット領域90に含まれる記憶ブロック40に記憶されたデータが、コールドポインタに示された記憶ブロック40に移動された場合、図20に示す処理を実行してもよい。なお、この場合、コールドポインタ管理部94は、ブロックポインタに代えて、コールドポインタを用いて処理を実行する。また、カウンタ管理部80は、コールド領域92のカウンタ値をインクリメントする。これにより、記憶装置20によれば、コールド領域92に含まれる2以上の記憶ブロック40のそれぞれに対する書き込み回数を均一にすることができる。
図25は、第4実施形態におけるデータの書き込み、読み出しおよび更新を説明するための図である。
例えば、図25の(A)に示すように、ホット領域90におけるデータが書き込まれた記憶ブロック40の1個先の記憶ブロック40が空ブロックである場合に、ブロックポインタは、空ブロックである1個先の記憶ブロック40を示すように更新される。また、例えば、図25の(B)に示すように、ホット領域90におけるデータが書き込まれた記憶ブロック40の1個先の記憶ブロック40が無効ブロックである場合に、ブロックポインタは、無効ブロックである1個先の記憶ブロック40を示すように更新される。
ここで、図25の(C)に示すように、ホット領域90における、データが書き込まれた記憶ブロック40の1個先の記憶ブロック40に、有効なデータが記憶されている場合がある。この場合、図25の(D)に示すように、ホット領域90における1個先の記憶ブロック40に記憶されたデータは、コールドポインタに示された記憶ブロック40に移動される。そして、ブロックポインタは、さらに、1個先に移動する。
図26は、第4実施形態におけるデータの読み出しを説明するための図である。第4実施形態において、複数の記憶ブロック40のそれぞれから読み出されたデータは、ブロックポインタに示された記憶ブロック40に書き込まれる。従って、図26に示すように、コールド領域92に含まれる記憶ブロック40から読み出されたデータは、ホット領域90に含まれる記憶ブロック40のうちの、ブロックポインタに示された記憶ブロック40に書き戻される。
図27は、領域設定部96の処理を説明するための図である。領域設定部96は、複数の記憶ブロック40のそれぞれを、ホット領域90に含ませるかまたはコールド領域92に含ませるかを、予め定められたタイミングで変更する。例えば、領域設定部96は、複数の記憶ブロック40のそれぞれを、ホット領域90に含ませるかまたはコールド領域92に含ませるかを、一定時間毎に変更してもよいし、一定数のデータの書き込みが発生する毎に変更してもよい。
例えば、不揮発メモリ24は、第2実施形態に示したような複数の領域82に分割されていてもよい。この場合、領域設定部96は、カウンタ値が予め定められた閾値以上の領域82をコールド領域92とし、他の領域82をホット領域90としてもよい。
また、領域設定部96は、変更直後において、コールド領域92の記憶ブロック40に記憶されているデータを、ホット領域90に移動させてもよい。これにより、領域設定部96は、変更直後において、コールド領域92に含まれる2以上の記憶ブロック40の全てを、有効なデータを記憶していない状態とすることができる。また、領域設定部96は、変更直後において、データを記憶している記憶ブロック40がコールド領域92に含まれる場合、そのデータが記憶されている記憶ブロック40を、データが読み出されるまでホット領域90として取り扱ってもよい。
コールド領域92に含まれる記憶ブロック40は、ホット領域90に含まれる記憶ブロック40よりも、データの書き込み回数が少なくなる。従って、領域設定部96は、複数の記憶ブロック40のそれぞれを、ホット領域90に含ませるかまたはコールド領域92に含ませるかを変更することにより、不揮発メモリ24に含まれる複数の記憶ブロック40に対するデータの書き込み回数を均一にすることができる。
以上のように、第4実施形態に係る記憶装置20は、ホット領域90に含まれる2以上の記憶ブロック40に対する書き込み回数を均一にすることができる。さらに、第4実施形態に係る記憶装置20は、コールド領域92に含まれる2以上の記憶ブロック40のそれぞれにアクセス頻度の少ないデータを記憶させることができる。
さらに、第4実施形態に係る記憶装置20は、複数の記憶ブロック40のそれぞれを、ホット領域90に含ませるかまたはコールド領域92に含ませるかを変更することにより、不揮発メモリ24の全体に対しても均等に書き込みをすることができる。これにより、記憶装置20によれば、特定の記憶ブロック40にアクセスを集中させずに、複数の記憶ブロック40に対する疲弊を平準化させることができる。
(第5実施形態)
つぎに、第5実施形態に係る情報処理装置10について説明をする。
図28は、第5実施形態に係るメモリアレイ32を示す図である。第5実施形態において、不揮発メモリ24は、ホット領域90と、ウォーム領域98と、コールド領域92とを有する。複数の領域82のそれぞれは、ホット領域90、ウォーム領域98またはコールド領域92の何れかに含まれる。なお、ホット領域90とウォーム領域98とコールド領域92とは、不揮発メモリ24内において物理的に分割されているのではなく、論理的に分割される。
図29は、第5実施形態に係るメモリコントローラ22の構成を示す図である。第5実施形態に係る制御回路50は、ROM等に記憶されたプログラムを実行することにより、読出制御部72、書込制御部74、ブロックポインタ管理部76、アドレス更新部78、カウンタ管理部80、コールドポインタ管理部94、領域設定部96、および、ウォームポインタ管理部100として機能する。これにより、制御回路50は、読出制御部72と、書込制御部74と、ブロックポインタ管理部76と、アドレス更新部78と、カウンタ管理部80と、コールドポインタ管理部94と、領域設定部96と、ウォームポインタ管理部100と、を有する回路として動作する。
第5実施形態において、ブロックポインタは、ホット領域90に含まれる2以上の記憶ブロック40のうちの、次の書込先となる記憶ブロック40を示す。ウォームポインタ管理部100は、ウォームポインタを管理する。ウォームポインタは、ウォーム領域98に含まれる2以上の記憶ブロック40のうちの、次の書込先となる記憶ブロック40を示す。
領域設定部96は、複数の記憶ブロック40のそれぞれが、ホット領域90、ウォーム領域98またはコールド領域92の何れに含まれるかを設定する。領域設定部96は、複数の記憶ブロック40のそれぞれを、ホット領域90に含ませるか、ウォーム領域98に含ませるか、または、コールド領域92に含ませるかを、予め定められたタイミングで変更する。また、第5実施形態において、カウンタ管理部80は、ホット領域90のカウンタ値、ウォーム領域98のカウンタ値およびコールド領域92のカウンタ値を管理する。
ここで、第5実施形態において、ブロックポインタ管理部76は、ブロックポインタに示された記憶ブロック40にデータが書き込まれた場合、図24に示す処理を実行する。ただし、第5実施形態においては、ブロックポインタ管理部76は、S74の処理において、ホット領域90における1個先の記憶ブロック40に有効なデータが記憶されている場合、ホット領域90における1個先の記憶ブロック40に記憶されたデータを、ウォームポインタに示された記憶ブロック40に移動させる。
また、第5実施形態において、ウォームポインタ管理部100は、ホット領域90に含まれる記憶ブロック40に記憶されたデータが、ウォームポインタに示された記憶ブロック40に移動された場合、図24に示す処理を実行する。なお、この場合、ウォームポインタ管理部100は、ブロックポインタに代えて、ウォームポインタを用いて処理を実行する。また、カウンタ管理部80は、ウォーム領域98のカウンタ値をインクリメントする。
従って、データがウォームポインタに示された記憶ブロック40に移動された場合、ウォームポインタ管理部100は、ウォーム領域98に含まれる2以上の記憶ブロック40をウォームポインタに示された記憶ブロック40から予め定められた順序で巡回的に探索することにより、ウォーム領域98に含まれる2以上の記憶ブロック40のうちのウォームポインタに示された記憶ブロック40の1個先の記憶ブロック40を検出する。さらに、ウォームポインタ管理部100は、ウォーム領域98における1個先の記憶ブロック40を示すようにウォームポインタを更新する。さらに、ウォームポインタ管理部100は、ウォーム領域98における1個先の記憶ブロック40に有効なデータが記憶されている場合、ウォーム領域98における1個先の記憶ブロック40に記憶されたデータを、コールドポインタに示された記憶ブロック40に移動させる。そして、ウォームポインタ管理部100は、ウォーム領域98における有効なデータが記憶されていない1個先の記憶ブロック40が検出されるまで、1個先の記憶ブロック40の検出、ウォームポインタの更新およびデータの移動を繰り返す。
また、第5実施形態において、コールドポインタ管理部94は、ウォーム領域98に含まれる記憶ブロック40に記憶されたデータが、コールドポインタに示された記憶ブロック40に移動された場合、図10に示す処理を実行する。なお、この場合、コールドポインタ管理部94は、ブロックポインタに代えて、コールドポインタを用いて処理を実行する。また、カウンタ管理部80は、コールド領域92のカウンタ値をインクリメントする。
従って、ブロックポインタ管理部76は、コールドポインタに示された記憶ブロック40から予め定められた順序で巡回的に探索することにより、コールド領域92に含まれる2以上の記憶ブロック40のうちの有効なデータを記憶していない最初の記憶ブロック40を検出する。そして、ブロックポインタ管理部76は、コールドポインタを、コールド領域92に含まれる2以上の記憶ブロック40のうちの有効なデータを記憶していない最初の記憶ブロック40を示すように変更する。
図30は、第5実施形態におけるデータの書き込み、読み出しおよび更新を説明するための図である。
例えば、図30の(A)に示すように、ホット領域90における1個先の記憶ブロック40が無効ブロックである場合に、ブロックポインタは、無効ブロックである1個先の記憶ブロック40を示すように更新される。
図30の(B)に示すように、ホット領域90に含まれる記憶ブロック40にデータが書き込まれた場合、ホット領域90におけるデータが書き込まれた記憶ブロック40の1個先の記憶ブロック40に、有効なデータが記憶されている場合がある。この場合、ホット領域90における1個先の記憶ブロック40に記憶されたデータは、ウォームポインタに示された記憶ブロック40に移動される。そして、ブロックポインタは、さらに1個先に移動される。
また、図30の(C)に示すように、ウォーム領域98におけるデータが書き込まれた記憶ブロック40の1個先の記憶ブロック40に、有効なデータが記憶されている場合がある。この場合、ウォーム領域98における1個先の記憶ブロック40に記憶されたデータは、コールドポインタに示された記憶ブロック40に移動される。そして、ウォームポインタは、さらに1個先に移動される。
ホット領域90に含まれる記憶ブロック40、ウォーム領域98に含まれる記憶ブロック40およびコールド領域92に含まれる記憶ブロック40は、書き込み頻度の違いにより、書き込み回数の差が大きくなる可能性がある。例えば、図30の(D)に示すように、不揮発メモリ24が長期間使用された結果、ホット領域90のカウンタ値は、ウォーム領域98のカウンタ値よりも大きくなる可能性がある。また、ウォーム領域98のカウンタ値は、コールド領域92のカウンタ値より大きくなる可能性がある。
以上のように、第5実施形態に係る記憶装置20は、ホット領域90に含まれる2以上の記憶ブロック40を予め定められた順序で巡回的に探索することにより、データを書き込んでから読み出しまたは更新がされていない記憶ブロック40を検出した場合には、その記憶ブロック40からデータを読み出して、ウォームポインタに示された記憶ブロック40に書き込む。これにより、第5実施形態に係る記憶装置20によれば、ホット領域90に含まれる2以上の記憶ブロック40に対する書き込み回数を均一にすることができる。
また、第5実施形態に係る記憶装置20は、ウォーム領域98に含まれる2以上の記憶ブロック40を予め定められた順序で巡回的に探索することにより、データを書き込んでから読み出しまたは更新がされていない記憶ブロック40を検出した場合には、その記憶ブロック40からデータを読み出して、コールドポインタに示された記憶ブロック40に書き込む。これにより、第5実施形態に係る記憶装置20によれば、ウォーム領域98に含まれる2以上の記憶ブロック40に対する書き込み回数を均一にすることができる。
さらに、また、第5実施形態に係る記憶装置20は、ホット領域90に最もアクセス頻度の高いデータを記憶させ、ウォーム領域98に次にアクセス頻度の高いデータを記憶させ、コールド領域92にアクセス頻度の低いデータを記憶させることができる。
なお、不揮発メモリ24は、階層構造を有するN段(Nは、2以上の整数)のウォーム領域98を有してもよい。この場合、ホット領域90に含まれる記憶ブロック40に記憶されているデータは、1段目のウォーム領域98に移動される。また、n段目(nは1以上、(N−1)以下の整数)のウォーム領域98に含まれる記憶ブロック40に記憶されているデータは、n+1段目のウォーム領域98に含まれる記憶ブロック40に移動される。また、N段目のウォーム領域98に記憶されているデータは、コールド領域92に含まれる記憶ブロック40に移動される。このような記憶装置20によれば、各段のウォーム領域98毎の書き込み回数を均一にすることできる。さらに、このような記憶装置20によれば、1段目のウォーム領域98をN段目のウォーム領域98よりもアクセス頻度の高いデータを記憶させることができる。
(第6実施形態)
つぎに、第6実施形態に係る情報処理装置10について説明をする。
図31は、第6実施形態に係るメモリコントローラ22の構成を示す図である。第6実施形態に係る制御回路50は、ROM等に記憶されたプログラムを実行することにより、読出制御部72、書込制御部74、および、アドレス更新部78として機能する。これにより、制御回路50は、読出制御部72と、書込制御部74と、アドレス更新部78とを有する回路として動作する。
第6実施形態において、不揮発メモリ24が有する複数の記憶ブロック40のそれぞれは、先入れ、先出し型(FIFO型)のシフトレジスタである。従って、制御回路50は、複数の記憶ブロック40のそれぞれに対して、書込処理と読出処理とを同時に行うことができる。
第6実施形態においては、読出制御部72が、複数の記憶ブロック40のうちの何れかの記憶ブロック40から読出対象データを読み出す場合、書込制御部74は、書込バッファ58に記憶された書込対象データを、読出対象データが読み出される記憶ブロック40に対して読出処理と並行して書き込む。
図32は、第6実施形態におけるデータの書き込み、読み出しおよび更新を説明するための図である。書込バッファ58は、不揮発メモリ24に書き込まれる前の書込対象データを一時的に記憶する。また、読出バッファ56は、不揮発メモリ24から読み出された読出対象データを一時的に記憶する。読出バッファ56に一時的に記憶された読出対象データは、ホストコントローラ12へと送信される。
さらに、読出制御部72は、不揮発メモリ24から読み出した読出対象データを読出バッファ56から書込バッファ58へと移動させることにより、書込バッファ58に書込対象データとして記憶させる。そして、書込制御部74は、書込バッファ58に一時的に記憶された書込対象データを不揮発メモリ24の何れかの記憶ブロック40に書き込む。これにより、制御回路50は、不揮発メモリ24から読み出されたデータを、再度、不揮発メモリ24に書き戻すことができる。
ここで、図32の(A)に示すように、ホストコントローラ12から、新規データの書き込みを指示するライトコマンドを受け付けた場合、書込制御部74は、新規データを、書込対象データとして書込バッファ58に一時的に記憶させる。
続いて、図32の(B)に示すように、ホストコントローラ12から次のライトコマンドを受け付けた場合、書込制御部74は、書込バッファ58に記憶された書込対象データを、複数の記憶ブロック40のうちの、有効なデータが記憶されていない記憶ブロック40に書き込む。これとともに、書込制御部74は、次の新規データを、書込対象データとして書込バッファ58に一時的に記憶させる。
ここで、図32の(C)に示すように、書込バッファ58が書込対象データを一時的に記憶している状態において、ホストコントローラ12からリードコマンドを受け付ける場合がある。この場合、読出制御部72は、複数の記憶ブロック40のうちのリードコマンドにより指定された読出対象データが記憶された記憶ブロック40から、データを読み出す。
さらに、この場合、図32の(D)に示すように、書込制御部74は、書込バッファ58に記憶された書込対象データを、読出対象データが読み出される記憶ブロック40に対して読出処理と並行して書き込む。この結果、図32の(E)に示すように、書込制御部74は、読出制御部72による読出処理が完了するタイミングにおいて、書込処理を完了することができる。
以上のように、第6実施形態に係る記憶装置20は、記憶ブロック40に対して、読出処理と並行して書込処理をすることができる。これにより、第6実施形態に係る記憶装置20は、記憶ブロック40へのアクセス回数を少なくして、記憶ブロック40の劣化速度を遅くすることができる。例えば磁壁シフトの原理を用いて磁気的に情報を記憶する不揮発メモリ24を備える場合、記憶装置20は、記憶ブロック40に対するシフトパルス電流の供給回数を、読出処理と書込処理とを別に行う場合よりも、少なくすることができる。従って、記憶装置20は、記憶ブロック40に対して読出処理と書込処理とを並行して行うことにより、記憶ブロック40の疲弊を減らすことができ、この結果、記憶ブロック40の疲弊速度を遅くすることができる。
(第7実施形態)
つぎに、第7実施形態に係る情報処理装置10について説明をする。
図33は、第7実施形態に係るメモリコントローラ22の構成を示す図である。第7実施形態に係る制御回路50は、ROM等に記憶されたプログラムを実行することにより、読出制御部72、書込制御部74、アドレス更新部78、および、疑似リードコマンド発生部112として機能する。これにより、制御回路50は、読出制御部72と、書込制御部74と、アドレス更新部78と、疑似リードコマンド発生部112とを有する回路として動作する。
第7実施形態に係る制御回路50は、第6実施形態に係る制御回路50と比較して、疑似リードコマンド発生部112をさらに有する構成である。疑似リードコマンド発生部112は、所定タイミングにおいて、複数の記憶ブロック40のうちの何れかの記憶ブロック40からデータを読み出すことを指示する疑似リードコマンドを発生する。
読出制御部72は、ホストコントローラ12からリードコマンドを受け付けた場合、読出対象データが記憶された記憶ブロック40から、読出対象データを読み出す。さらに、読出制御部72は、疑似リードコマンド発生部112が疑似リードコマンドを発生した場合、疑似リードコマンドに示された記憶ブロック40から、データを読み出す。
図34は、もし疑似リードコマンドを発生しない場合において、2つのデータが交互に読み出された状態を示す図である。
もし、疑似リードコマンドを発生しない場合において、ホストコントローラ12により2つのデータが交互に読み出されると、読出制御部72および書込制御部74は、書込処理および読出処理を、同一の物理アドレスの記憶ブロック40に対して繰り返し行ってしまう。この結果、書込処理および読出処理が繰り返し行われた記憶ブロック40は、疲弊が進んでしまう。
図35は、疑似リードコマンドを発生した場合において、2つのデータが交互に読み出された状態を示す図である。
疑似リードコマンド発生部112は、所定タイミングにおいて、複数の記憶ブロック40のうちの何れかの記憶ブロック40からデータを読み出すことを指示する疑似リードコマンドを発生する。従って、ホストコントローラ12により2つのデータが交互に読み出されたとしても、疑似リードコマンド発生部112は、書込処理および読出処理が繰り返し行われる記憶ブロック40を移動させることができる。従って、疑似リードコマンド発生部112は、特定の記憶ブロック40に疲弊が集中することを回避することができる。
例えば、疑似リードコマンド発生部112は、所定期間毎に、疑似リードコマンドを発生する。また、例えば、疑似リードコマンド発生部112は、ランダムなタイミング毎に、疑似リードコマンドを発生してもよい。
また、例えば、疑似リードコマンド発生部112は、リードコマンドを予め定められた回数の受け付ける毎に、疑似リードコマンドを発生してもよい。また、例えば、疑似リードコマンド発生部112は、ランダムに決定された個数のリードコマンドを受け付ける毎に、疑似リードコマンドを発生してもよい。
図36は、疑似リードコマンドの発生パターンの一例を示す図である。疑似リードコマンド発生部112は、第1処理と、第2処理とを交互に繰り返して、疑似リードコマンドを発生してもよい。
第1処理において、疑似リードコマンド発生部112は、リードコマンドをM個(Mは、2以上の整数)受け付けた後、疑似リードコマンドを発生する。また、第2処理において、疑似リードコマンド発生部112は、リードコマンドをN個(Nは、2以上の整数である)受け付けた後、疑似リードコマンドを発生する。
ここで、MとNとは、互いに素である。このような処理を実行することにより、疑似リードコマンド発生部112は、例えば、ホストコントローラ12が、特定の記憶ブロック40にアクセスを集中させるような悪意のあるプログラムを実行した場合であっても、特定の記憶ブロック40にアクセスが集中することを回避することができる。
以上のように、第7実施形態に係る記憶装置20は、記憶ブロック40に対して、読出処理と並行して書込処理をする場合において、特定の記憶ブロック40に疲弊が集中することを回避することができる。これにより、第7実施形態に係る記憶装置20によれば、複数の記憶ブロック40のうちの特定の記憶ブロック40に対する疲弊の集中を緩和させることができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
10 情報処理装置
12 ホストコントローラ
20 記憶装置
22 メモリコントローラ
24 不揮発メモリ
32 メモリアレイ
34 ラインデコーダ
36 読出書込回路
40 記憶ブロック
42 磁性体部
44 スイッチ素子
46 読出素子
BL ビットライン
FL フィールドライン
SL ソースライン
50 制御回路
52 ホストIF回路
54 メモリIF回路
56 読出バッファ
58 書込バッファ
60 エラー訂正回路
62 テーブルメモリ
72 読出制御部
74 書込制御部
76 ブロックポインタ管理部
78 アドレス更新部
80 カウンタ管理部
82 領域
84 空ブロック管理部
86 領域ポインタ管理部
88 データ移動部
90 ホット領域
92 コールド領域
94 コールドポインタ管理部
96 領域設定部
98 ウォーム領域
100 ウォームポインタ管理部
112 疑似リードコマンド発生部

Claims (22)

  1. それぞれがシフトレジスタを含む複数の記憶ブロックを備える不揮発メモリと、
    前記不揮発メモリに対するデータの書き込みおよび読み出しを制御する制御回路と、
    を備え、
    前記制御回路は、
    前記複数の記憶ブロックのうちの第1記憶ブロックから対象データを読み出す読出制御部と、
    前記第1記憶ブロックから読み出した前記対象データを、前記複数の記憶ブロックのうちの前記第1記憶ブロックとは異なる第2記憶ブロックに書き込む書込制御部と、
    を備える記憶装置。
  2. 前記第1記憶ブロックから読み出した前記対象データに対してエラー訂正処理をするエラー訂正回路
    をさらに備える請求項1に記載の記憶装置。
  3. 前記制御回路は、
    前記複数の記憶ブロックのうちの次の書込先となる記憶ブロックを示すブロックポインタを管理するブロックポインタ管理部と、
    前記複数の記憶ブロックのそれぞれに記憶されるデータ毎に論理アドレスと物理アドレスとの対応関係が登録されるアドレス変換テーブルを更新するアドレス更新部と、
    をさらに備え、
    前記書込制御部は、前記対象データを、前記ブロックポインタに示された記憶ブロックに書き込み、
    前記アドレス更新部は、前記アドレス変換テーブルに登録された前記対象データの物理アドレスを、前記ブロックポインタに示された記憶ブロックの物理アドレスに変更する
    請求項1または2に記載の記憶装置。
  4. 前記対象データが書き込まれた場合、前記ブロックポインタ管理部は、
    前記複数の記憶ブロックを前記ブロックポインタに示された前記記憶ブロックから予め定められた順序で巡回的に探索することにより、前記複数の記憶ブロックのうちの有効なデータを記憶していない最初の記憶ブロックを検出し、
    検出した前記最初の記憶ブロックを示すように前記ブロックポインタを更新する
    請求項3に記載の記憶装置。
  5. 前記不揮発メモリは、複数の領域に分割され、
    前記複数の記憶ブロックのそれぞれは、前記複数の領域のうちの何れかに含まれ、
    前記制御回路は、前記複数の領域のうちの次の書込先となる対象領域を示す領域ポインタを管理する領域ポインタ管理部をさらに備え、
    前記対象データが書き込まれた場合、前記ブロックポインタ管理部は、
    前記複数の記憶ブロックのうちの前記対象領域に含まれる2以上の記憶ブロックを、前記ブロックポインタに示された前記記憶ブロックから前記対象領域における末尾の記憶ブロックまで予め定められた順序で探索することにより、前記対象領域に含まれる前記2以上の記憶ブロックのうちの有効なデータを記憶していない最初の記憶ブロックを検出し、
    検出した前記最初の記憶ブロックを示すように前記ブロックポインタを更新し、
    前記末尾の記憶ブロックまで探索した場合、前記領域ポインタ管理部は、前記複数の領域のうちの1つを新たな前記対象領域として選択し、選択した新たな前記対象領域を示すように前記領域ポインタを更新し、
    前記末尾の記憶ブロックまで探索した場合、前記ブロックポインタ管理部は、新たな前記対象領域に含まれる2以上の記憶ブロックのうちの先頭の記憶ブロックを示すように前記ブロックポインタを更新して、前記最初の記憶ブロックの検出を繰り返す
    請求項3に記載の記憶装置。
  6. 前記制御回路は、前記複数の領域のそれぞれについて、有効なデータを記憶していない記憶ブロックの数を表す空ブロック数を管理する空ブロック管理部をさらに備え、
    前記対象領域における前記末尾の記憶ブロックまで探索した場合、前記領域ポインタ管理部は、前記複数の領域のそれぞれについての前記空ブロック数に基づき、前記複数の領域のうちの1つを新たな前記対象領域として選択する
    請求項5に記載の記憶装置。
  7. 前記領域ポインタ管理部は、前記複数の領域のうちの前記空ブロック数が予め定められた値以上である領域を、新たな前記対象領域として選択する
    請求項6に記載の記憶装置。
  8. 前記領域ポインタ管理部は、前記複数の領域のうちの、余裕率より空き率が大きい領域を新たな前記対象領域として選択し、
    前記余裕率は、前記不揮発メモリにおけるデータを書き込むことが可能な全ての記憶ブロックの数に対する前記不揮発メモリにおける前記空ブロック数の比率を表し、
    前記空き率は、領域に含まれる記憶ブロックの数に対する前記空ブロック数の比率を表す
    請求項6に記載の記憶装置。
  9. 前記領域ポインタ管理部は、前記複数の領域のうちの、含まれる記憶ブロックの数に対する前記空ブロック数を表す空き率が最も大きい領域を、新たな前記対象領域として選択する
    請求項6に記載の記憶装置。
  10. 前記制御回路は、前記複数の領域のそれぞれについて書き込み回数を示すカウンタ値を管理するカウンタ管理部
    を更に備え、
    前記領域ポインタ管理部は、前記複数の領域のうちの、前記カウンタ値が予め設定された閾値より小さい領域を、新たな前記対象領域として選択する
    請求項6から9の何れか1項に記載の記憶装置。
  11. 前記制御回路は、
    前記複数の領域に対する前記カウンタ値の分散が予め定められた値より大きくなった場合、前記複数の領域のうちの前記カウンタ値が予め定められた第1基準値より小さい何れかの領域に記憶されているデータ群を、前記複数の領域のうちの前記カウンタ値が予め定められた第2基準値より大きい何れかの領域に移動させるデータ移動部
    をさらに備える請求項10に記載の記憶装置。
  12. 前記ブロックポインタ管理部は、
    前記複数の記憶ブロックを前記ブロックポインタに示された前記記憶ブロックから予め定められた順序で巡回的に探索することにより、前記複数の記憶ブロックのうちの前記ブロックポインタに示された前記記憶ブロックの1個先の記憶ブロックおよび2個先の記憶ブロックを検出し、
    前記1個先の記憶ブロックを示すように前記ブロックポインタを更新し、
    前記2個先の記憶ブロックに有効なデータが記憶されている場合、前記2個先の記憶ブロックに記憶されているデータを、前記1個先の記憶ブロックに移動させ、
    有効なデータが記憶されていない前記2個先の記憶ブロックが検出されるまで、前記1個先の記憶ブロックおよび前記2個先の記憶ブロックの検出、前記ブロックポインタの更新および前記データの移動を繰り返す
    請求項3に記載の記憶装置。
  13. 前記不揮発メモリは、ホット領域と、コールド領域とを備え、
    前記複数の記憶ブロックのそれぞれは、前記ホット領域または前記コールド領域の何れかに含まれ、
    前記ブロックポインタは、前記ホット領域に含まれる2以上の記憶ブロックのうちの、次の書込先となる記憶ブロックを示し、
    前記制御回路は、前記コールド領域に含まれる2以上の記憶ブロックのうちの、次の書込先となる記憶ブロックを示すコールドポインタを管理するコールドポインタ管理部をさらに備え、
    前記対象データが書き込まれた場合、前記ブロックポインタ管理部は、
    前記ホット領域に含まれる前記2以上の記憶ブロックを前記ブロックポインタに示された前記記憶ブロックから予め定められた順序で巡回的に探索することにより、前記ホット領域に含まれる前記2以上の記憶ブロックのうちの前記ブロックポインタに示された前記記憶ブロックの1個先の記憶ブロックを検出し、
    前記ホット領域に含まれる前記1個先の記憶ブロックを示すように前記ブロックポインタを更新し、
    前記ホット領域に含まれる前記1個先の記憶ブロックに有効なデータが記憶されている場合、前記ホット領域に含まれる前記1個先の記憶ブロックに記憶された前記データを、前記コールドポインタに示された記憶ブロックに移動させ、
    有効なデータが記憶されていない前記ホット領域に含まれる前記1個先の記憶ブロックが検出されるまで、前記ホット領域に含まれる前記1個先の記憶ブロックの検出、前記ブロックポインタの更新および前記データの移動を繰り返す
    請求項3に記載の記憶装置。
  14. 前記コールドポインタ管理部は、
    データが前記コールドポインタに示された前記記憶ブロックに移動された場合、前記コールド領域に含まれる前記2以上の記憶ブロックを前記コールドポインタに示された前記記憶ブロックから予め定められた順序で巡回的に探索することにより、前記コールド領域に含まれる前記2以上の記憶ブロックのうちの有効なデータを記憶していない最初の記憶ブロックを検出し、検出した前記最初の記憶ブロックを示すように前記コールドポインタを変更する
    請求項13に記載の記憶装置。
  15. 前記制御回路は、前記複数の記憶ブロックのそれぞれを、前記ホット領域に含ませるか、または、前記コールド領域に含ませるかを、予め定められたタイミングで変更する領域設定部をさらに備え、
    請求項13または14に記載の記憶装置。
  16. 前記不揮発メモリは、ウォーム領域をさらに備え、
    前記複数の記憶ブロックのそれぞれは、前記ホット領域、前記ウォーム領域または前記コールド領域の何れかに含まれ、
    前記制御回路は、前記ウォーム領域に含まれる2以上の記憶ブロックのうちの、次の書込先となる記憶ブロックを示すウォームポインタを管理するウォームポインタ管理部をさらに備え、
    前記ブロックポインタ管理部は、
    前記ホット領域に含まれる前記1個先の記憶ブロックに有効なデータが記憶されている場合、前記ホット領域に含まれる前記1個先の記憶ブロックに記憶された前記データを、前記ウォームポインタに示された記憶ブロックに移動させ、
    データが前記ウォームポインタに示された前記記憶ブロックに移動された場合、前記ウォームポインタ管理部は、
    前記ウォーム領域に含まれる前記2以上の記憶ブロックを前記ウォームポインタに示された前記記憶ブロックから予め定められた順序で巡回的に探索することにより、前記ウォーム領域に含まれる前記2以上の記憶ブロックのうちの前記ウォームポインタに示された前記記憶ブロックの1個先の記憶ブロックを検出し、
    前記ウォーム領域に含まれる前記1個先の記憶ブロックを示すように前記ウォームポインタを更新し、
    前記ウォーム領域に含まれる前記1個先の記憶ブロックに有効なデータが記憶されている場合、前記ウォーム領域に含まれる前記1個先の記憶ブロックに記憶された前記データを、前記コールドポインタに示された記憶ブロックに移動させ、
    有効なデータが記憶されていない前記ウォーム領域に含まれる前記1個先の記憶ブロックが検出されるまで、前記ウォーム領域に含まれる前記1個先の記憶ブロックの検出、前記ウォームポインタの更新および前記データの移動を繰り返す
    請求項13または14に記載の記憶装置。
  17. 前記不揮発メモリに書き込む前の書込対象データを一時的に記憶する書込バッファをさらに備え、
    前記複数の記憶ブロックのそれぞれは、先入れ、先出し型のシフトレジスタを含み、
    前記読出制御部が、前記複数の記憶ブロックのうちの何れかの記憶ブロックから読出対象データを読み出す場合、前記書込制御部は、前記書込バッファに記憶された前記書込対象データを、前記読出対象データが読み出される前記記憶ブロックに対して読出処理と並行して書き込む
    請求項1に記載の記憶装置。
  18. 前記制御回路は、前記複数の記憶ブロックのうちの何れかの記憶ブロックからデータを読み出すことを指示する疑似リードコマンドを発生する疑似リードコマンド発生部をさらに備え、
    前記読出制御部は、
    ホストコントローラからリードコマンドを受け付けた場合、前記読出対象データが記憶された記憶ブロックから、前記読出対象データを読み出し、
    前記疑似リードコマンドを発生した場合、前記疑似リードコマンドに示された記憶ブロックから、データを読み出す
    請求項17に記載の記憶装置。
  19. 前記疑似リードコマンド発生部は、前記リードコマンドを予め定められた回数受け付ける毎に、前記疑似リードコマンドを発生する
    請求項18に記載の記憶装置。
  20. 前記疑似リードコマンド発生部は、ランダムに決定された個数の前記リードコマンドを受け付ける毎に、前記疑似リードコマンドを発生する
    請求項18に記載の記憶装置。
  21. 前記疑似リードコマンド発生部は、
    前記リードコマンドをM個(Mは、2以上の整数)受け付けた後、前記疑似リードコマンドを発生する第1処理と、
    前記リードコマンドをN個(Nは、2以上の整数であり、MとNとは互いに素である)受け付けた後、前記疑似リードコマンドを発生する第2処理と、
    を交互に繰り返す
    請求項18に記載の記憶装置。
  22. それぞれがシフトレジスタを含む複数の記憶ブロックを備える不揮発メモリに対して、データの書き込みおよび読み出しを制御するメモリコントローラであって、
    前記複数の記憶ブロックのうちの第1記憶ブロックから対象データを読み出し、
    前記第1記憶ブロックから読み出した前記対象データを、前記複数の記憶ブロックのうちの前記第1記憶ブロックとは異なる第2記憶ブロックに書き込む
    メモリコントローラ。
JP2019169957A 2019-09-19 2019-09-19 記憶装置およびメモリコントローラ Pending JP2021047948A (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP2019169957A JP2021047948A (ja) 2019-09-19 2019-09-19 記憶装置およびメモリコントローラ
TW109103595A TWI771646B (zh) 2019-09-19 2020-02-05 記憶裝置及記憶體控制器
CN202010108761.4A CN112527188B (zh) 2019-09-19 2020-02-21 存储装置及存储器控制器
US16/816,439 US11237763B2 (en) 2019-09-19 2020-03-12 Storage device and memory controller

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2019169957A JP2021047948A (ja) 2019-09-19 2019-09-19 記憶装置およびメモリコントローラ

Publications (1)

Publication Number Publication Date
JP2021047948A true JP2021047948A (ja) 2021-03-25

Family

ID=74878582

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019169957A Pending JP2021047948A (ja) 2019-09-19 2019-09-19 記憶装置およびメモリコントローラ

Country Status (4)

Country Link
US (1) US11237763B2 (ja)
JP (1) JP2021047948A (ja)
CN (1) CN112527188B (ja)
TW (1) TWI771646B (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9812502B2 (en) * 2015-08-31 2017-11-07 Toshiba Memory Corporation Semiconductor memory device having variable resistance elements provided at intersections of wiring lines
CN113805805B (zh) * 2021-05-06 2023-10-13 北京奥星贝斯科技有限公司 缓存内存块的淘汰方法、装置及电子设备
US20230094125A1 (en) * 2021-09-24 2023-03-30 Nvidia Corporation Implementing trusted executing environments across multiple processor devices
US20230103518A1 (en) * 2021-09-24 2023-04-06 Nvidia Corporation Secure execution for multiple processor devices using trusted executing environments

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7197721B2 (en) * 2002-12-17 2007-03-27 Intel Corporation Weight compression/decompression system
JP2007133541A (ja) * 2005-11-09 2007-05-31 Tokyo Electron Device Ltd 記憶装置、メモリ管理装置、メモリ管理方法及びプログラム
JP4969981B2 (ja) 2006-10-03 2012-07-04 株式会社東芝 磁気記憶装置
US7944729B2 (en) 2009-01-28 2011-05-17 Seagate Technology Llc Simultaneously writing multiple addressable blocks of user data to a resistive sense memory cell array
US8255613B2 (en) 2009-04-30 2012-08-28 International Business Machines Corporation Wear-leveling and bad block management of limited lifetime memory devices
TW201235974A (en) * 2011-02-25 2012-09-01 Altek Corp Image processing apparatus and memory accessing method thereof
CN103218300B (zh) * 2012-01-18 2016-01-27 群联电子股份有限公司 数据处理方法、存储器控制器与存储器储存装置
JP6104774B2 (ja) 2013-09-19 2017-03-29 株式会社東芝 磁壁移動型メモリおよびその書き込み方法
EP3136245B1 (en) * 2014-04-23 2019-07-03 Hitachi, Ltd. Computer
JP6271350B2 (ja) 2014-06-25 2018-01-31 東芝メモリ株式会社 磁気メモリ、シフトレジスタメモリ、および磁気メモリの製造方法
TWI592865B (zh) * 2016-07-22 2017-07-21 大心電子(英屬維京群島)股份有限公司 資料讀取方法、資料寫入方法及使用所述方法的儲存控制器
US10579471B2 (en) * 2017-03-02 2020-03-03 Toshiba Memory Corporation Storage device and error correction method for storage device
JP2018152146A (ja) 2017-03-09 2018-09-27 東芝メモリ株式会社 半導体記憶装置及びデータ読み出し方法
US10714195B2 (en) * 2017-08-31 2020-07-14 SK Hynix Inc. Read disturb detection and recovery with adaptive thresholding for 3-D NAND storage
JP6878228B2 (ja) 2017-09-20 2021-05-26 株式会社東芝 半導体装置
US10866858B2 (en) * 2019-04-16 2020-12-15 Samsung Electronics Co., Ltd. Memory systems having reduced memory channel traffic and methods for operating the same

Also Published As

Publication number Publication date
CN112527188B (zh) 2024-01-12
TWI771646B (zh) 2022-07-21
CN112527188A (zh) 2021-03-19
TW202113606A (zh) 2021-04-01
US11237763B2 (en) 2022-02-01
US20210089233A1 (en) 2021-03-25

Similar Documents

Publication Publication Date Title
JP2021047948A (ja) 記憶装置およびメモリコントローラ
US10565123B2 (en) Hybrid logical to physical address translation for non-volatile storage devices with integrated compute module
US10387303B2 (en) Non-volatile storage system with compute engine to accelerate big data applications
CN109791519B (zh) 具有集成计算引擎的非易失性存储系统和本地快速存储器的优化用途
KR102221465B1 (ko) 메모리의 실질 함축 연산
TWI498730B (zh) 用於對記憶體進行耗損平均之方法,記憶體控制器及裝置
US20160004446A1 (en) System and method for performing data retention in solid-state memory
JP5039079B2 (ja) 不揮発性半導体記憶装置
JP5847940B2 (ja) 半導体装置
TWI625729B (zh) 資料配置方法及應用其之電子系統
KR102533229B1 (ko) 상대 주소를 사용하는 메모리 장치의 접근 방법
CN109032968A (zh) 包括逻辑到物理地址映射存储设备及其操作方法
US7945723B2 (en) Apparatus and method of managing mapping table of non-volatile memory
CN107544915B (zh) 存储系统及其地址映射方法和访问方法
US11705207B2 (en) Processor in non-volatile storage memory
US10908838B2 (en) Column replacement with non-dedicated replacement columns
CN108305655A (zh) 包括阻变材料的存储设备及其驱动方法
US20150234741A1 (en) Command Execution Using Existing Address Information
US20200294610A1 (en) Memory system for controlling magnetic memory
US10552314B2 (en) Memory system and method for ware leveling
CN107590081B (zh) 数据管理方法以及具有快闪存储器的装置
US3997880A (en) Apparatus and machine implementable method for the dynamic rearrangement of plural bit equal-length records
US9817767B2 (en) Semiconductor apparatus and operating method thereof
EP3040994B1 (en) Information storage device and method
JP5269963B2 (ja) 不揮発性半導体記憶装置