KR101336382B1 - 반도체 메모리 제어 장치 - Google Patents

반도체 메모리 제어 장치 Download PDF

Info

Publication number
KR101336382B1
KR101336382B1 KR1020110087935A KR20110087935A KR101336382B1 KR 101336382 B1 KR101336382 B1 KR 101336382B1 KR 1020110087935 A KR1020110087935 A KR 1020110087935A KR 20110087935 A KR20110087935 A KR 20110087935A KR 101336382 B1 KR101336382 B1 KR 101336382B1
Authority
KR
South Korea
Prior art keywords
data
semiconductor memory
physical address
recording
page
Prior art date
Application number
KR1020110087935A
Other languages
English (en)
Other versions
KR20120031124A (ko
Inventor
시게히로 아사노
신이치 간노
겐이치로 요시이
Original Assignee
가부시끼가이샤 도시바
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 가부시끼가이샤 도시바 filed Critical 가부시끼가이샤 도시바
Publication of KR20120031124A publication Critical patent/KR20120031124A/ko
Application granted granted Critical
Publication of KR101336382B1 publication Critical patent/KR101336382B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • 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
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash 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
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/10Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
    • 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/7205Cleaning, compaction, garbage collection, erase control

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

일 실시형태에 따르면, 정보 처리 장치로부터의 요청시에, 반도체 기억 제어 장치는, 반도체 칩의 기억 영역 중 소거가 행하여진 영역에 데이터가 기록되어 있지 않은 기억 위치에 미리 정해진 단위의 데이터를 기록한다. 제3 테이블 및 이것의 서브 세트인 제2 테이블은, 반도체 칩 내의 데이터의 각각의 기억 위치를 각각 나타내는 물리 어드레스를 포함한다. 제1 테이블은 제2 테이블 엔트리를 특정하는 정보 또는 제3 테이블 엔트리를 특정하는 정보 중 어느 하나를 포함한다. 반도체 기억 제어 장치는, 제1 및 제2 테이블을 휘발성 메모리에 기록하거나, 또는 제1 테이블을 휘발성 메모리에 그리고 제3 테이블을 비휘발성 메모리에 기록한다.

Description

반도체 메모리 제어 장치{SEMICONDUCTOR MEMORY CONTROLLING DEVICE}
관련 출원의 상호 참조
본 출원은 2010년 9월 22일자로 출원된 일본 특허 출원 제2010-212646호의 우선권에 기초하여, 그 우선권의 이익을 주장하며, 이것이 전체 내용은 참고로 여기에 포함된다.
여기에 설명된 실시형태들은 일반적으로 반도체 메모리 제어 장치에 관한 것이다.
가장 널리 사용되는 비휘발성의 반도체 메모리 칩 중 하나는, NAND형의 플래시 메모리(NAND 플래시 메모리로 지칭됨)이다. NAND 플래시 메모리에서, 기록의 최소 단위는 페이지이며, 기록은 페이지 단위로 수행된다. 페이지에 이전에 기억된 데이터가 소거된 이후에만, 데이터를 페이지에 기록할 수 있다. 그 데이터를 페이지 단위로 소거할 수는 없다. 데이터는 각각이 정해진 수(2 이상)의 페이지로 구성되는 단위(“블록”으로 지칭됨)로 소거된다. 반도체 메모리 칩의 상위 장치인 호스트가 데이터의 기록을 요청할 때 지정되는 어드레스(이하,“논리 어드레스”라고 함)와, NAND 플래시 메모리 내의 데이터가 기록되는 페이지(이하,“물리 어드레스”라고 함) 사이의 관계가 고정된 관계를 가지는 경우, 호스트가 데이터의 기록을 요청할 때 마다, 블록 내의 데이터를 소거함으로써, 소거된 블록에 새로운 데이터를 기록할 수 있다. 이러한 상태에서, 기록이 수행되지 않은 다른 페이지(동일 블록 내에 있음)도 또한 동시에 소거된다. 이러한 상황을 피하기 위하여, 소거된 페이지에 기억되는 데이터를 DRAM(Dynamic Random Access Memory)과 같은 또 다른 메모리로 일시적으로 이동시켜, 블록을 소거한 이후에, 기록이 요청된 데이터와 다른 메모리에 이동시킨 데이터를 블록에 함께 기록하는 방법을 이용할 수 있다.
전술한 바와 같이, 논리 어드레스와 물리 어드레스 사이의 관계가 고정되어 있는 경우에, 기록 처리가 수행되는 횟수가 다른 논리 어드레스 사이에서 잘 균형잡혀 있지 않으면, 기록 처리가 수행되는 횟수는 다른 물리 어드레스 사이에서도 잘 균형잡혀 있지 않게 된다. 따라서, 기록 처리는 어떤 물리 어드레스를 가진 영역에 집중되는 방식으로 수행될 가능성이 있다. NAND 플래시 메모리는, 기록 처리가 그 메모리에서 많은 횟수로 수행될 때, 소자가 피로해지는 특성을 가진다. 따라서, 기억 영역의 전체에 걸쳐 기록 처리가 수행되는 횟수가 균일하게 되도록 하여, 시스템의 수명을 길게 유지하게 하려는 요청이 있다. 기억 영역의 전체에 걸쳐 기록 처리가 수행되는 횟수를 가능한한 균일하게 되도록 배열하기 위하여, 구획된 영역의 각각에서 기록 처리가 수행되는 횟수를 관리하고, 기록 처리가 더 작은 횟수로 수행되는 일부 영역에 기록 처리를 수행하는 방식으로, 논리 어드레스와 물리 어드레스 사이의 관계를 관리할 필요가 있다.
전술한 방법을 이용하여 기록되어 있는 데이터를 호스트로부터의 요청에 응답하여 판독하기 위하여, 호스트에 의해 지정된 논리 어드레스에 대응하는 데이터가, NAND 플래시 메모리 내에 실제로 기억되어 있는 기억 위치(즉, 물리 어드레스)를 결정할 필요가 있다. 이를 위하여, 논리 어드레스와 물리 어드레스 사이의 대응 관계를 나타내는 변환 테이블을 준비할 필요가 있다. 효율적으로 되도록, 논리 어드레스와 물리 어드레스 사이의 대응 관계를 나타내는데 이용되는 단위는, NAND 플래시 메모리의 페이지 사이즈에 일치시키는 것이 바람직하지만, 페이지 사이즈는 예를 들어, 4 KB(kilobytes)일 수 있고, 비교적 작은 것이 된다. 예를 들어, 256 GB의 논리 어드레스 공간을 4 KB의 섹션으로 각각 분할하는 경우, 변환 테이블은 64 메가 엔트리를 가져야 한다. 변환 테이블의 엔트리의 각각이 사이즈에 있어서 4B(bytes)라고 가정하면, 변환 테이블은 256 MB의 용량을 필요하게 된다. 이는 변환 테이블의 사이즈가 매우 크다는 것을 의미한다(예를 들어, "A Buffer Management Scheme for Improving Random Writes in Flash Storage", http://www.usenix.org/events/fast08/tech/full_papers/kim/kim_html/을 참조).
일반적으로, 변환 테이블에는, 각각이 랜덤한 액세스성이 우수한 DRAM(Dynamic Random Access Memory) 또는 SRAM(Static Random Access Memory)이 이용될 수 있다. 변환 테이블의 사이즈가 큰 경우에, 이러한 휘발성 메모리의 용량을 많이 필요로 한다. 메모리의 용량을 더 크게 하는 것은 비용 관련 문제를 야기할 수 있는 가능성이 있다. 또한, 변환 테이블의 전체를 NAND 플래시 메모리 자체에 유지하는 경우에, 변환 테이블이 갱신될 때 마다, NAND 플래시 메모리에 기록 처리가 수행된다. 그 결과, 기록 처리가 NAND 플래시 메모리에 수행되는 횟수가 증가하고, 반도체 메모리 시스템의 신뢰성을 저하시키게 될 가능성이 있다.
실시형태들의 목적은, 비용을 억제하면서 반도체 메모리 칩에 수행되는 기록 처리의 횟수를 억제할 수 있는 반도체 메모리 제어 장치를 제공하는 것이다.
일반적으로, 일 실시형태에 따르면, 반도체 메모리 제어 장치는, 정보 처리 장치에 의해 이용되는 논리 어드레스가 지정된, 기록이 요청된 호스트 기록 데이터를, 반도체 메모리 칩에 기록한다. 상기 호스트 기록 데이터는 미리 정해진 단위의 하나 이상의 제1 데이터를 포함한다. 물리 어드레스는 상기 반도체 메모리 칩 내의 상기 제1 데이터의 기억 위치를 나타내는 정보이다. 제1 테이블은 제1 메모리에 기억된다. 제2 테이블은 제2 메모리에 기억되다. 제3 테이블은, 비휘발성 메모리인 제3 메모리에 기억되고, 상기 반도체 메모리 칩 내의 상기 제1 데이터의 각각의 기억 위치를 각각 나타내는 물리 어드레스를 포함한다. 상기 제2 테이블은, 상기 제3 테이블의 서브 세트이며, 상기 반도체 메모리 칩 내의 상기 제1 데이터의 각각의 기억 위치를 각각 나타내는 물리 어드레스를 포함한다. 상기 제1 테이블은, 제2 테이블 엔트리를 특정하는 정보 또는 제3 테이블 엔트리를 특정하는 정보 중 어느 하나를 포함한다. 상기 반도체 메모리 제어 장치는, 상기 호스트 기록 데이터를 수신하도록 구성되는 수신부; 상기 반도체 메모리 칩의 기억 영역 중 데이터가 소거되어 있는 기억 영역에서 데이터가 기록되어 있지 않은 기억 위치에, 상기 제1 데이터의 각각을 기록하도록 구성되는 제어부; 및 휘발성 메모리에 제1 테이블을 그리고 휘발성 메모리에 제2 테이블을 기록하거나, 또는 휘발성 메모리에 제1 테이블을 그리고 비휘발성 메모리에 제3 테이블을 기록하도록 구성되는 기록부를 포함한다.
반도체 메모리 제어 장치에 따르면, 비용을 억제하면서 반도체 메모리 칩에 수행되는 기록 처리의 횟수를 억제할 수 있다.
도 1은 실시형태에 따른 반도체 메모리 시스템의 하드웨어 구성을 예시하는 도면.
도 2는 압축을 설명하기 위한 개념도.
도 3은 반도체 메모리 제어 장치(50)에 의해 실현되는 기능의 일례에 대한 도면.
도 4는 포워드 룩업 테이블의 데이터 구조를 예시하는 도면.
도 5는 실시형태에 따른 포워드 룩업 테이블의 구조의 개략도.
도 6은 논리 어드레스와 제1 테이블의 데이터 구조 사이의 관계를 설명하기 위한 도면.
도 7은 제3 테이블의 구조의 일례에 대한 도면.
도 8은 비트 벡터 테이블의 데이터 구조를 예시하는 도면.
도 9는 기록 대상 데이터의 일례에 대한 도면.
도 10은 라운드 로빈 처리에 의해 수행되는 기록을 설명하기 위한 도면.
도 11은 기록 대상 데이터의 기록 절차에 대한 흐름도.
도 12는 기록 대상 데이터가 시간의 경과에 따라서 기록되는 상태를 나타내는 도면.
도 13은 데이터의 판독 절차에 대한 흐름도.
도 14는 압축 절차에 대한 흐름도.
이하, 여러 가지 실시형태들을 첨부 도면들을 참조하여 설명한다.
우선, 실시형태에 따른 반도체 메모리 제어 장치를 포함하는 반도체 메모리 시스템의 하드웨어 구성을 도 1을 참조하여 설명한다. 반도체 메모리 시스템은 반도체 메모리 제어 장치(50)와 반도체 메모리 소자(NAND)(58A 내지 58D)를 함께 접속함으로써 구성된다. 반도체 메모리 제어 장치(50)는, 프로세서(51), 부트 ROM(Read Only Memory)(52), SATA(Serial Advanced Technology Attachment)/SAS(Serial Attached Small Computer System) 인터페이스[=SCSI](55), 메모리 컨트롤러(53), SRAM(Static Random Access Memory)(54), NAND 컨트롤러(57A 내지 57D), 및 이러한 소자들을 함께 접속하는 버스(56)를 포함한다. NAND 컨트롤러(57A 내지 57D)에는 각각 NAND(58A 내지 58D)가 접속된다. 또한, NAND 컨트롤러(57A 내지 57D)를 서로 구별할 필요가 없는 상태에서, NAND 컨트롤러(57A 내지 57D)는 간단히 NAND 컨트롤러(57)로 지칭될 수도 있다. 이와 유사하게, NAND(58A 내지 58D)를 서로 구별할 필요가 없는 상태에서, NAND(58A 내지 58D)는 간단히 NAND(58)로 지칭될 수도 있다.
프로세서(51)의 제어 하에서, SATA/SAS 인터페이스(55)는, 반도체 메모리 제어 장치(50)의 상위 장치인 호스트와의 통신을 제어한다. 부트 ROM(52)은 장치가 온되는 경우에 실행되는 프로그램을 내부에 기억한다. 여러 가지 타입의 시스템 프로그램이 NAND(58)에 기억된다. 프로세서(51)는, 반도체 메모리 제어 장치(50)의 엔트리를 제어하고, 장치가 온되는 경우에, 부트 ROM(52)으로부터 프로그램을 판독하고, 판독된 프로그램을 실행하고, NAND(58)에 기억된 여러 가지 타입의 시스템 프로그램을 실행된 프로그램에 따라서 SRAM(54)에 전송하고, SRAM(54) 내의 시스템 프로그램을 실행함으로써, 여러 가지 타입의 기능을 실현시킨다. 보다 상세하게, 프로세서(51)는 SATA/SAS 인터페이스(55)를 통하여, 호스트로부터 송신된 커맨드를 해석한다. 프로세서(51)는, 그 커맨드에 따라서, 데이터를 NAND(58) 중 어느 하나에 기록하는 것 또는 NAND(58) 중 어느 하나로부터 데이터를 판독하는 것을 제어한다.
메모리 제어기(53)는 SRAM(54)로의 기록 또는 SRAM(54)으로부터의 판독을 제어한다. SRAM(54)은 내부에 여러 가지 타입의 데이터 및 여러 가지 타입의 프로그램을 기억한다. 본 실시형태에 따르면, SRAM(54)은, 내부에 비트 벡터 테이블뿐만 아니라 후술되는 포워드 룩업 테이블의 일부를 기억한다. NAND 제어기(57)의 각각은 NAND(58) 중 대응하는 하나를 제어하도록 구성되며, 오류 정정 회로를 포함한다.
NAND(58)의 각각은, 반도체 메모리 칩에 대응하며, 예를 들어 NAND 플래시 메모리에 사용되는 메모리 소자이다. NAND(58)의 각각으로부터 그리고 NAND(58)의 각각에, 데이터를 랜덤하게 판독 및 기록할 수 없지만,“페이지”로 불리는 단위로 데이터를 판독 및 기록할 수 있다. 복수의 페이지는“블록”으로 불리는 기억 영역의 단위를 함께 형성한다. 이 예에서, 하나의 페이지는 4 KB로 이루어지며, 하나의 블록은 64 페이지로 형성된다. NAND(58)의 각각은 함께 제공된 복수의 블록으로 구성된다. 이 실시형태에서, 도 1에 도시된 바와 같이, NAND(58)의 수는 4개이다. 채널(CH0 내지 CH3)은 각각 NAND(58)에 할당된다. 후술되는 바와 같이, 호스트에 의해 기록되도록 요청되는 데이터가 페이지의 사이즈(이하,“페이지 사이즈”로 지칭될 수도 있음) 보다 더 큰 경우에, 반도체 메모리 제어 장치(50)는 데이터를 복수개로 분할하고, 분할된 페이지 단위의 데이터(이하,“분할 데이터”로 지칭됨)를 각각의 채널(CH0 내지 CH3)에 할당 및 기록한다.
여기서, NAND(58)에 데이터를 기록하는 기록 방법을 설명한다. NAND 반도체 메모리 소자는 종래에 추기(log-structured) 방식을 이용한다. 추기 방식에 따르면, 블록은 기록 이전에 소거되어야 한다. 블록의 소거는 블록에 기억된 데이터를 소거하는 것이며, 예를 들어, 블록을 구성하는 기억 영역의 모든 비트를“1”로 설정하는 것이다. 반도체 메모리 장치(50)는 이러한 소거를 블록 단위로 수행하고 소거된 블록에 대하여 페이지 단위로 기록을 수행한다. 따라서, NAND형의 NAND(58)에서, 데이터는 소거된 블록에서 기록이 되지 않은 페이지에 순차적으로 기록될 수 있고, 기록된 페이지는 재기록될 수 없다. 또한, 호스트로부터의 요청에 응답하여 데이터를 기록하는 것은, 호스트에서 이용되는 논리 어드레스(즉, 논리 블록 어드레스(LBA))에 의해 지정된다. 이와 반대로, NAND(58)로의 데이터의 기록은, 논리 어드레스에 상관없이 블록 내의 페이지의 오름순으로, NAND(58)의 물리적인 기억 위치(즉, 물리 블록 어드레스(PBA))에 따라서 수행된다. 즉, 논리 어드레스가 데이터 기록 요청시에 지정되더라도, 페이지에의 데이터의 기록은 블록 내에서 미리 정해진 순서로 수행된다. 기록 대상 데이터의 사이즈가 페이지 사이즈 미만인 경우, 기록 대상 부분을 포함하는 페이지 내의 데이터가 판독되고, 페이지 사이즈를 일치시키기 위하여 기록 대상 부분과 병합(merge)되므로, 기록은 페이지 단위로 수행된다. 데이터가 페이지 사이즈 보다 더 큰 경우에, 데이터는 복수의 페이지로 분할되고 할당된 블록들에 분배되므로, 기록은 페이지 단위로 수행된다. 논리 어드레스와 물리 어드레스 사이의 대응관계는, 후술하는 포워드 룩업 테이블에 기억된다. 이전의 데이터 요청에서 지정된 논리 어드레스가 다시 지정된 상태로, 새로운 데이터의 기록이 호스트에 의해 요청되는 경우, 반도체 메모리 제어 장치(50)는 소거된 블록에서 기록이 되지 않은 페이지에 새로운 데이터를 기록한다. 이러한 상태에서, 이 논리 어드레스에 대응하는 기록이 이전에 수행되었던 페이지는, 그 상태를“무효”로 변경하고, 새로운 데이터가 기록되는 페이지는 그 상태를“유효”로 변경한다.
이러한 상태에서,“무효”는 논리 어드레스가 물리 어드레스의 위치를 나타내지 않는 상태인 반면에,“유효”는 논리 어드레스가 물리 어드레스의 위치를 나타내는 상태이다. 따라서, 데이터가 무효인 경우, 논리 어드레스는, 데이터가 기억되는, 기억 영역의 물리 어드레스의 위치를 나타내지 않는다. 데이터가 유효인 경우, 논리 어드레스는 데이터가 기억되는, 기억 영역의 물리 어드레스의 위치를 나타낸다. 페이지의 물리적 위치가 무효인 경우에, 논리 어드레스는, 페이지에 대응하는, 기억 영역의 물리 어드레스의 위치를 나타내지 않는다. 페이지가 유효인 경우, 논리 어드레스는, 페이지에 대응하는, 기억 영역의 물리 어드레스의 위치를 나타낸다.
추기 방식에 따르면, 기록을 계속함으로써 무효가 되는 페이지의 수가 증가하면, NAND(58)에서의 기록을 실현할 수 있는 용량(이하, 기록가능한 용량)이 작아진다. 데이터를 기록할 수 있는 새로운 소거된 블록들의 개수 즉, 소거 이후에 데이터가 아직 기록되지 않은 블록(이하,“자유 블록”)의 수가 감소되어 채널들 각각의 자유 블록을 확보할 수 없는 시점에서, 기록 불가능 상태가 발생한다. 이를 방지하기 위하여, 반도체 메모리 제어 장치(50)에서, 가비지 컬렉션(garbage collection)이 적절한 타이밍에서 행해진다. NAND(58)에서 행해지는 가비지 컬렉션은 특히 압축으로 지칭된다. 도 2는 압축을 설명하기 위한 개념도이다. 반도체 메모리 제어 장치(50)는, 무효로 된 페이지들을 포함하는 블록들에서, 무효로 되어 있지 않은 물리 어드레스에 기록된 데이터(유효 데이터로 지칭됨)를 모아서 모아진 유효 데이터를 자유 블록들에 새롭게 재기록하여 거기에 유효 데이터를 이동시킨다. 그 후, 반도체 메모리 제어 장치(50)는 새로운 자유 블록을 생성하기 위하여 블록들을 소거한다. 반도체 메모리 제어 장치(50)에서, 기록할 수 없게 된 블록들이 이러한 압축을 수행함으로써 다시 기록할 수 있게 되어, 자유 블록들을 저장(확보)할 수 있다. 또한, 데이터를 이동시키는 결과로서 유효 데이터가 기록되는 블록에서 기록되지 않은 페이지가 존재하면, 데이터는 페이지에 새롭게 기록될 수 있다.
이러한 압축을 수행하기 위하여 하나 이상의 자유 블록이 필요하며, 이는 NAND(58)에서 실장되는 용량(실장 용량으로 지칭됨)이 기록이 실제로 실현될 수 있는 용량보다 더 크다는 것을 의미한다. 이 실시형태에서, 실장된 용량과 기록가능한 용량 사이의 차이는“여유 용량”으로 지칭된다. 여유 용량이 작은 경우, 반도체 메모리 제어 장치(50)는 빈번하게 압축을 수행해야 하고, 그 장치의 성능에 대하여 큰 영향을 가진다.
다음으로, 반도체 메모리 제어 장치(50)에서 구현되는 기능들을 도 3을 참조하여 설명한다. 반도체 메모리 제어 장치(50)는, 호스트 인터페이스부(60), 버퍼 제어부(61), 어드레스 변환부(62), 채널(CH) 할당부(63), 압축 후보 검출부(64), 관리 테이블 갱신부(65), NAND 제어부(66A 내지 66D), 데이터 버퍼(67), 압축 판독큐(68) 및 관리 테이블(69)을 포함한다. 호스트 인터페이스부(60)의 기능은, 프로세서(51)가 프로그램을 실행하는 것과, SATA/SAS 인터페이스(55)의 기능에 의해 실현된다. 어드레스 변환부(62), CH 할당부(63), 관리 테이블 갱신부(65), 압축 후보 검출부(64) 및 버퍼 제어부(61)의 기능은, 프로세서(51)가 프로그램을 실행하는 경우에 실현된다. NAND 제어부(66A 내지 66D)의 기능은, 각각 NAND 컨트롤러(57A 내지 57D)에 대응하며, 프로세서(51)가 프로그램을 실행하는 것과, NAND 제어부(66A 내지 66D)에 각각 대응하는 NAND 컨트롤러(57A 내지 57D)의 기능에 의해 구현된다. NAND 제어부(66A 내지 66D)는, 전술한 채널(CH0 내지 CH3)이 각각 할당된 NAND(58A 내지 58D)에 일 대 일 대응 방식으로 대응한다. NAND 제어부(66A 내지 66D)를 서로 구별할 필요가 없는 상태에서, NAND 제어부(66A 내지 66D)는 간단히 NAND 제어부(66)로 지칭될 수도 있다. 데이터 버퍼(67) 및 압축 판독큐(68)는 예를 들어 SRAM(54)에 확보되는 기억 영역이다. 관리 테이블(69)은, 이후에 상세히 설명되며, SRAM(54)과 NAND(58)에 기억되는 정보이다.
호스트 인터페이스부(60)는, 호스트와 반도체 메모리 제어 장치(50) 사이의 통신을 제어하는 인터페이스이다. 호스트 인터페이스부(60)는 호스트로부터 송신된 커맨드를 수신하여, 그 커맨드가 논리 어드레스가 지정된 데이터의 기록을 요청하는 경우, 호스 인터페이스부(60)는 그 커맨드(이하,“기록 커맨드”)를 후술되는 어드레스 변환부(62)로 송신한다. 그 상태에서, 기록되도록 요청된 데이터의 사이즈가 페이지 사이즈 이하인 경우에, 호스트 인터페이스부(60)는 그 데이터를 후술되는 버퍼 제어부(61)로 송신한다. 데이터의 사이즈가 페이지 사이즈 보다 더 큰 경우에, 호스트 인터페이스부(60)는 데이터를 페이지 단위로 분할하여, 이와 같이 분할된 데이터(이하,“분할 데이터”)를 버퍼 제어부(61)로 송신한다. 그 이유는 논리 어드레스와 물리 어드레스 사이의 변환이 페이지 단위 원칙으로 행해지기 때문이다. 예를 들어, 호스트 인터페이스 유닛(60)은 128 KB의 데이터를 32개의 4 KB 데이터로 분할한다. 기록 커맨드에 응답하여 버퍼 제어부(61)에 송신되는 데이터 또는 분할된 데이터를, 설명의 편의를 위하여 기록 대상 데이터로서 지칭할 수 있다.
호스트로부터 송신된 커맨드가 논리 어드레스가 지정된 데이터의 판독을 요청하는 경우에, 판독되도록 요청된 데이터의 사이즈가 페이지 사이즈 이하이면, 호스트 인터페이스부(60)는 커맨드(이하,“판독 커맨드”로 지칭됨)를 어드레스 변환부(62)로 송신한다. 판독되도록 요청된 데이터의 사이즈가 페이지 사이즈 보다 더 큰 경우에, 호스트 인터페이스부(60)는 페이지 단위 원칙으로 데이터의 판독을 요청하는 커맨드(즉, 판독 커맨드)를 어드레스 변환부(62)로 송신한다. 이러한 상태에서, 호스트 인터페이스부(60)는, 호스트로부터 송신된 커맨드에 의해 지정된 논리 어드레스를 이용함으로써 판독될 데이터의 각각의 논리 어드레스를 산출하고, 그 산출된 논리 어드레스를 가진 데이터를 판독하도록 요청하는 판독 커맨드를 어드레스 변환부(62)로 송신한다. 또한, 호스트 인터페이스부(60)는 후술되는 버퍼 제어부(61)를 이용함으로써 데이터 버퍼(67)의 지정된 영역에 기억되는 판독 대상 데이터를 판독하여 이를 호스트에 송신한다.
관리 테이블(69)은 포워드 룩업 테이블과 비트 벡터 테이블을 포함한다. 포워드 룩업 테이블은, 데이터의 논리 어드레스와 NAND(58)에서 데이터가 기록되는 물리적인 기억 위치를 나타내는 물리 어드레스 사이의 대응관계를 나타낸다. 이러한 포워드 룩업 테이블은, 호스트에 의해 지정된 논리 어드레스에 대응하는 데이터가 기억되는 NAND(58)의 기억 위치를 나타내는 물리 어드레스를 특정할 때에 이용된다.
도 4는 포워드 룩업 테이블의 데이터 구조의 개념도이다. 도 4에 도시된 바와 같이, 포워드 룩업 테이블은 논리 어드레스를 인덱스로서 이용하고, 채널에 부여된 번호(채널 번호), 물리 블록에 부여된 번호(물리 블록 번호), 및 페이지에 부여되는 페이지 번호를 포함하는 엔트리를 포함한다. 데이터의 각각의 논리 어드레스는, 호스트로부터의 데이터 기록 요청시에 지정되는 논리 어드레스에 기초하여 산출된다. 이 실시형태에서, 채널 번호는 CH0 내지 CH3이다. 채널 번호는 논리 어드레스에 대응하는 데이터가 기억되는 물리 블록을 포함하는 NAND(58)가 어느 채널에 접속되어 있는지를 나타낸다. 페이지 번호는 논리 어드레스에 대응하는 데이터가 채널 번호 및 물리 블록 번호에 의해 구별되는 물리 블록에서 어느 페이지에 기억되어 있는지를 나타낸다. 페이지 번호는, 예를 들어 물리 어드레스의 순서로 부여될 수 있거나, 또는 물리 어드레스 자체가 페이지 번호로서 부여될 수도 있다.
포워드 룩업 테이블은 데이터가 판독될 때 마다 참조되며, 호스트로부터의 요청에 응답하여 또는 압축에 응답하여 데이터가 NAND(58)에 기록될 때 마다 갱신된다. 포워드 룩업 테이블이 어떻게 참조되고 갱신되는지를 이후에 설명한다. 포워드 룩업 테이블이 참조되고 갱신되는 빈도가 높기 때문에, 포워드 룩업 테이블은, 일반적으로, DRAM 또는 SRAM과 같은 휘발성 메모리를 이용함으로써 설치된다. 그러나, 예컨대 256 GB의 용량을 가진 NAND(58)를 4 KB의 분할 단위로 관리하는 경우에, 64 메가 (= 256 G/4K) 수의 엔트리를 갖는 포워드 룩업 테이블을 가질 필요가 있다. 포워드 룩업 테이블의 엔트리의 각각이 사이즈에 있어서 4 바이트이면, 전부“256 메가바이트(= 64 메가 × 4 바이트)”의 용량을 가지는 휘발성 메모리를 설치할 필요가 있다. 또한, 더 큰 용량을 가진 NAND(58)를 각각 실현하기 위해서, 용량의 증가에 비례하여 용량을 가지는 휘발성 메모리를 설치해야 하는 제약이 존재한다. 본 실시형태에 따르면, 휘발성 메모리의 용량을 감소시키고, 휘발성 메모리 보다 용량 당 단가가 낮은 NAND(58)와 휘발성 메모리를 조합하여 포워드 룩업 테이블을 구성함으로써 비용을 억제할 수 있다. 즉, 본 실시형태에 따르면, 포워드 룩업 테이블로서, 논리 어드레스와 물리 어드레스 사이의 대응 관계를 나타내는 정보를 일부는 SRAM(54)에 기억시키고, 일부는 NAND(58)에 기억시킨다. 그 결과, 포워드 룩업 테이블을 구성하기 위하여 요구되는 휘발성 메모리의 용량을 감소시킬 수 있다.
보다 상세하게는, 포워드 룩업 테이블은 휘발성 메모리에 기억되는 제1 테이블 및 제2 테이블에 의해 그리고 NAND(58)에 기억되는 제3 테이블에 의해 구성된다. 제1 테이블 및 제2 테이블은 DRAM 또는 SRAM과 같은 휘발성 메모리, 또는 MRAM 또는 FeRAM과 같은 비휘발성 메모리에 기억될 수도 있다. 제2 테이블은 NAND(58) 내의 데이터의 기억 위치를 각각 나타내는 물리 어드레스를 포함하는 정보이다. 제3 테이블은 NAND(58) 내의 데이터의 기억 위치를 각각 나타내는 물리 어드레스를 포함하는 정보이다. 제1 테이블은, (ⅰ) 제2 테이블 엔트리를 특정하는 정보 또는 (ⅱ) 제3 테이블 엔트리를 특정하는 정보 중 어느 하나를 포함한다. 도 6에 도시된 바와 같이 논리 어드레스의 비트들의 일부(11번째 비트로부터 28번째 비트까지)는, 제1 테이블에서 인덱스로서 이용되고, 나머지 비트의 일부(3번째 비트로부터 10번째 비트까지)는, 제1 테이블의 값에 의해 특정된 제2 테이블 또는 제3 테이블의 엔트리에서의 위치를 나타내는 인덱스로서 이용된다. 도 5는 실시형태에 따른 포워드 룩업 테이블의 구조에 대한 개략도이다. 제1 테이블에서, 기억 영역은 청크(Chunk)의 단위의 섹션들로 분할된다. 하나의 청크에 대응하는 기억 영역은 하나의 엔트리로서 할당된다. 예를 들어, 하나의 청크가 1 MB이고, 하나의 엔트리가 사이즈에 있어서 4 바이트인 경우에, 256 GB의 NAND(58)에 대한 제1 테이블의 용량은,“256 GB/1 MB * 4 B = 1 MB"로서 산출될 수 있다. 보다 상세하게는, 도 6에 도시된 바와 같이, 제1 테이블의 엔트리들 각각은, 논리 어드레스의 상위 18 비트와, 제2 테이블을 내부에 기억하는 기억 영역 중 논리 어드레스에 대응하는 물리 어드레스를 내부에 기억하는 기억 영역을 특정하는 특정 정보, 또는 제3 테이블을 내부에 기억하는 기억 영역 중 논리 어드레스에 대응하는 물리 어드레스를 내부에 기억하는 기억 영역을 특정하는 특정 정보를 대응하여 나타낸다. 이 엔트리의 수는 256K이다. 대응하는 데이터에 액세스되지 않은 논리 어드레스에 대해서, 특정 정보로서,“FFFFFFFFF”의 값이 주어진다. 이는 제2 테이블 또는 제3 테이블에서 대응하는 엔트리가 없다는 것을 의미한다. 논리 어드레스로서 29비트만이 이용되기 때문에, 이전에 액세스한 엔트리가 이 값을 나타낼 가능성은 없다.
내부에 제3 테이블을 기억하는 기억 영역에서, 엔트리들의 정보는. 이하에서 설명되는 제2 테이블을 통하여 페이지 단위로 기억된다. 도 7은 제3 테이블의 구조의 일례에 대한 도면이다. 제3 테이블의 엔트리들의 각각은, 제1 테이블의 인덱스인, 논리 어드레스의 상위 18비트에 의해 고유하게 선택된다. 3번째 비트로부터 10번째 비트까지의 중간의 8비트는 1 MB의 청크에 포함되는 256개의 클러스터 위치 중 하나를 특정하여, 그 특정된 위치에 논리 어드레스에 대응하는 물리 어드레스가 기억된다. 제3 테이블의 서브 엔트리의 수는, 제1 테이블의 각 엔트리 마다 256이고, 그 이유는 256개의 4 KB 클러스터 및 하나의 청크는 사이즈에 있어서 1MB가 되기 때문이다(1 MB/4 KB = 256). 제1 테이블의 엔트리들 각각에서, 하나의 기억 영역을 특정하는 특정 정보는, 논리 어드레스의 상위 18 비트와 대응하여 나타낸다. 제3 테이블에서, 256개의 물리 어드레스는 이러한 하나의 기억 영역에 논리 어드레스의 순서로 배열된다. 논리 어드레스에서 3번째 비트에서 10번째 비트까지의 중간의 8비트는, 서브 엔트리들 중 하나를 특정하는 오프셋으로서 이용되므로, 물리 어드레스는 오프셋에 대응하는 기억 위치(어드레스)에 4바이트로 기억된다. 제3 테이블의 엔트리의 정보는, 라운드 로빈 방식으로 복수의 NAND(58)에 기록된다. 제3 테이블을 구성함으로써, 제3 테이블에 데이터를 기록함으로써 야기되며 처리 속도에 영향을 주는 오버헤드를 감소시킬 수 있다. 제3 테이블은, 액세스되지 않은 어떤 물리 어드레스를 포함하지 않는다. 따라서, 제3 테이블은 NAND(58)의 용량 내에서 기록될 수 있는 데이터의 모두의 논리 어드레스와 물리 어드레스 사이의 대응 관계를 나타내지 않는다.
제2 테이블은 제3 테이블의 서브 세트이며 제3 테이블의 캐쉬로서 기능한다. 제2 테이블은 SRAM(54) 또는 DRAM(미도시)와 같은 휘발성 메모리를 이용함으로써 구성된다. 제2 테이블의 용량은 제3 테이블의 용량 이하이다. 제1 테이블의 엔트리는, 제1 테이블의 인덱스인 논리 어드레스의 상위 18비트에 의해 고유하게 선택된다. 제1 테이블의 선택된 엔트리에 의해 특정된 제2 테이블의 엔트리가 선택된다. 3번째 비트로부터 10번째 비트까지의 중간의 8비트는 선택된 제2 테이블의 엔트리의 위치를 특정한다. 예를 들어, 중간의 8비트는 1 MB 청크(chunk)에 포함되는 256개의 클러스터의 위치를 특정한다. 논리 어드레스에 대응하는 물리 어드레스는 특정된 위치에 기억된다. 제2 테이블에서, 도 7에 도시된 바와 같이, 제3 테이블에서와 동일한 방식으로, 물리 어드레스는, 제1 테이블의 하나의 엔트리에 있어서 논리 어드레스의 상위 18비트에 대응하는 특정 정보에 의해서 특정되는 기억 영역에 논리 어드레스의 순서로 배열된다. 논리 어드레스의 3번째 비트에서 10번째 비트 까지의 중간의 8비트를 오프셋으로 이용하므로, 그 오프셋에 대응하는 기억 위치(어드레스)의 4B(byte)에 물리 어드레스가 기억된다. 제2 테이블의 엔트리의 정보는, 미리 정해진 조건이 충족될 때 마다, 내부에 제3 테이블을 기억하는 기억 영역에 기록된다. 미리 정해진 조건은, 예를 들어, 내부에 제2 테이블을 기억하는 기억 영역에 기록된 복수의 엔트리의 사이즈가, 페이지 사이즈인 4 KB와 동일하게 되거나 또는 그 배수(예를 들어, 64 KB)가 되는 것일 수도 있다. 내부에 제3 테이블을 기억하는 기억 영역에의 데이터의 기록은, NAND(58)에의 테이터의 기록이기 때문에, 반도체 메모리 제어 장치(50)의 전원이 오프되더라도, 논리 어드레스와 물리 어드레스 사이의 대응 관계가 유지된다. 또한, 제2 테이블의 하나의 엔트리는 사이즈에 있어서 1 KB를 가지며, NAND(58)의 페이지 사이즈는 4 KB이기 때문에, 최악의 경우에서도, 4회의 기록 처리는 1 페이지의 데이터의 기록에 대응한다. 따라서, 기록 처리 마다 제3 테이블을 갱신하는 상태와 비교하여, NAND(58)에 기억되는 제3 테이블을 내부에 기억하는 기억 영역에서 수행되는 기록 처리의 횟수를 감소시킬 수 있다.
다음으로, 비트 벡터 테이블을 도 8을 참조하여 설명한다. 비트 벡터 테이블은 각 채널(CH0 내지 CH3)의 각 물리 블록에서, 어느 페이지가 유효 페이지인지를 페이지의 순서로 2개의 값으로 나타내는 테이블이다. 유효 페이지는, 유효 데이터가 기록되는 페이지를 의미한다. 각 페이지에 대하여 2개의 값을 표시하는 것이 비트 벡터로 지칭된다. 비트 벡터의 값이“1”이면, 이는 페이지가 유효 페이지임을 의미하고, 비트 벡터의 값이“0”이면, 이는 페이지가 유효 페이지가 아님(무효임)을 의미한다. 초기 상태에서, 비트 벡터의 값은 모두“0”으로 설정된다.
이 실시형태에서, 기록 대상 데이터가 기록되는 채널은 4개의 채널(CH0 내지 CH3)을 가지며, 하나의 물리 블록이 64페이지를 포함한다고 가정하면, 대응하는 비트 벡터의 수는 64개가 된다. 도 8에 도시된 바와 같이, 비트 벡터 테이블에서, 채널(CH0 내지 CH3)에 대한 물리 블록 번호가 인덱스로서 이용된다. 비트 벡터 테이블은, 각 물리 블록에 대하여, 물리 블록 번호, 각 물리 번호에 포함되는 각 페이지와 연관되는 비트 벡터, 및 카운터를 포함한다. 도 8에 도시된 예에서, 비트 벡터는, 좌측으로부터, 채널(CH0)의 첫 번째 페이지, 두번째 페이지,…, 채널(CH0)의 최후 페이지 그리고 다음 행에서, 채널(CH1)의 첫 번째 페이지, 두 번째 페이지,…, 채널(CH1)의 최후 페이지 등이 되는 방식으로, 채널(CH0 내지 CH3)의 각 물리 블록의 페이지의 순으로 배열된다. 카운터는 값이“1”인 비트 벡터의 총수를 나타낸다. 대응하는 비트 벡터의 값이“1”이 되는 페이지가 유효 페이지이기 때문에, 카운터는 논리 블록 내의 유효 페이지 수를 나타낸다(이후,“유효 페이지 카운터”로 지칭됨). 이러한 구성에 있어서, 비트 벡터 테이블은, 호스트가 데이터의 기록을 요청할 때 마다 갱신된다. 비트 벡터 테이블이 어떻게 갱신되는지에 대해서는 후술한다.
도 3의 설명으로 되돌아가면, 어드레스 변환부(62)는, 호스트 인터페이스부(60)로부터 커맨드를 수신한다. 그 커맨드가 판독 커맨드인 경우에, 어드레스 변환부(62)는, 그 수신된 판독 커맨드로 지정된 논리 어드레스를 이용하여 관리 테이블(69) 중 포워드 룩업 테이블을 참조하여, 판독 커맨드에 의해 판독되도록 요청된 데이터를 기록하고 있는 채널 및 페이지의 물리 어드레스를 결정한다. 보다 상세하게, 어드레스 변환부(62)는, 논리 어드레스의 상위 18비트를 이용하여 제1 테이블의 엔트리를 참조하고, 논리 어드레스의 상위 18비트와 연관되는 특정 정보를 이용하여, 논리 어드레스와 물리 어드레스 사이의 대응 관계가, 내부에 제2 테이블을 기억하는 기억 영역에, 또는 내부에 제3 테이블을 기억하는 기억 영역에 기억되는지 여부를 결정한다. 판정의 결과에 따라서, 어드레스 변환부(62)는, 내부에 제2 테이블을 기억하는 기억 영역으로부터, 또는 내부에 제3 테이블을 기억하는 기억 영역으로부터, 논리 어드레스에 대응하는 물리 어드레스를 판독하여, 채널 및 물리 어드레스를 결정한다.
이후에, 어드레스 변환부(62)는, 결정된 채널 및 물리 어드레스를 지정하여, 데이터의 판독을 요청하는 커맨드를, CH 할당부(63)를 통하여 대응하는 NAND 제어부(66)에 송신한다. 이와 반대로, 호스트 인터페이스부(60)로부터 수신된 커맨드가 기록 커맨드인 경우, 어드레스 변환부(62)는, 그 기록 커맨드를 후술되는 CH 할당부(63)에 송신한다.
어드레스 변환부(62)는, 후술되는 압축 후보 검출부(64)로부터 송신되어 후술되는 압축 판독큐(68)에 기억되는 압축 판독 커맨드에 응답하여, 포워드 룩업 테이블을 참조하여, 압축 판독 커맨드로 지정된 물리 어드레스를 가진 유효 페이지의 데이터를 판독하도록 요청하는 커맨드를, 유효 데이터를 포함하는 물리 블록을 포함하는 NAND(58)가 접속되는 채널에 대응하는 NAND 제어부(66)로 송신한다. 유효 데이터는, NAND 제어부(66)를 통하여 NAND(58)로부터 판독되어, 버퍼 제어부(61)를 통해 데이터 버퍼(67)에 기억된다. 어드레스 변환부(62)는 유효 데이터의 기록을 요청하는 커맨드(압축 기록 커맨드로 지칭됨)을 CH 할당부(63)로 송신한다.
CH 할당부(63)는 어드레스 변환부(62)로부터 커맨드를 수신하고, 그 커맨드가 기록 커맨드인 경우에, 기록 대상 데이터를 기록하는 채널을 결정한다. 예를 들어, CH 할당부(63)는, 채널에 있어서 4 KB마다 라운드 로빈 방식으로 기록 동작을 수행하여, 라운드 로빈의 순서에 따라서, 데이터를 기록하는 채널을 결정한다. 그 후, CH 할당부(63)는 기록 대상 데이터를 기록하도록 요청하는 커맨드를, 결정된 채널에 대응하는 NAND 제어부(66)에 송신한다. 이와 반대로, 어드레스 변환부(62)로부터의 커맨드에 의해서, 채널 및 물리 어드레스가 지정된 데이터의 판독을 요청하는 경우, 지정된 채널에 대응하는 NAND 제어부(66)에, 물리 어드레스를 지정하여 데이터의 판독을 요청하는 커맨드를 송신한다. 또 다른 예로서, 어드레스 변환부(62)로부터 수신된 커맨드가 압축 기록 커맨드인 경우, CH 할당부(63)는 라운드 로빈의 순서에 따라서, 데이터를 기록할 채널을 결정하여, 유효 데이터의 기록을 요청하는 커맨드를, 결정된 채널에 대응하는 NAND 제어부(66)에 송신한다.
NAND 제어부(66)는, CH 할당부(63)로부터 커맨드를 수신하여, 그 수신된 커맨드에 따라서, 대응하는 NAND(58)에 액세스한다. 보다 상세하게, 그 커맨드가 데이터를 기록하도록 요청하는 경우에, NAND 제어부(66)는, 버퍼 제어부(61)를 통해 기록 대상 데이터를 획득하여, 그 기록 대상 데이터를 NAND(58)에 기록한다. 기록시에, NAND 제어부(66)는, 대응하는 NAND(58)의 소거된 블록의 미기록 페이지로부터, 페이지 마다, 기록의 기억 위치를 순차적으로 나타내기 위하여 기록 포인터를 설정하고, 기록 포인터에 의해 표시되는 기억 위치의 페이지에 기록 대상 데이터를 기록한 후, 기록 대상 페이지에 후속되는 다음 페이지인, 미기록 페이지의 기억 위치를 표시하기 위하여 기록 포인터를 갱신한다. 따라서, 기록 포인터의 값은 다음 기록 기억 위치를 순차적으로 표시하기 위하여 변화된다. 예를 들어, 각 채널에 있어서 15비트의 물리 어드레스에 의해 블록이 식별되어, 블록이 64페이지(6비트)를 포함하는 경우, 기록 포인터는 합계 15 + 6 = 21비트를 가진다.
여기서, 기록 대상 데이터의 데이터 구성에 대하여 이하에서 설명한다. NAND 제어부(66)는, 기록 대상 데이터 자체의 오류를 검출하여 정정하기 위한 에러 정정 코드(페이지 ECC로 지칭됨) 및 기록 커맨드에 의해 지정된 논리 어드레스를, 기록 대상 데이터에 부가한다. 페이지 ECC는 데이터의 오류를 검출하는 CRC(Cyclic Redundancy Check) 코드와 데이터 오류를 정정하는 ECC(Error Correcting Code)와 같은 코드를 포함한다. 도 9는 페이지 ECC가 부가된 기록 대상 데이터의 일례에 대한 도면이다. 전술된 바와 같이 결정된 채널의 NAND(58)에 있어서, NAND 제어부(66)는, 이러한 페이지 ECC 및 논리 어드레스를 부가한 기록 대상 데이터를, 전술한 바와 같이 결정된 각 채널의 NAND(58)내의 기록 포인터에 의해 표시되는 페이지에 기록한다. 기록 대상 데이터는 페이지 단위의 사이즈를 가진다. NAND(58)의 페이지 사이즈는, 기록 대상 데이터와, 부가된 페이지 ECC 및 논리 어드레스를 포함하는 전체 데이터의 사이즈와 동일하다고 가정한다. 각 분할 데이터의 논리 어드레스는, 기록 커맨드에 의해서 지정된 논리 어드레스에 기초하여, 각 NAND 제어부(66)에 의해 산출된다.
다음으로, 복수의 분할 데이터를 기록 대상 데이터로서 라운드 로빈 처리에 의해 채널(CH0 내지 CH3)에 기록하는 것을 설명한다. 도 10은 라운드 로빈 처리에 의해 수행되는 기록을 설명하기 위한 도면이다. 도면의 간략화를 위해, 분할 데이터에 부가된 논리 어드레스는 도시하지 않는다. 도 10에 도시된 바와 같이, 시각 t1에서 채널(CH0)에 대하여 최초의 분할 데이터(D1)가 기록되고, 시각 t2에서 채널(CH1)에 대하여 다음 분할 데이터(D2)가 기록되는 방식으로, 채널(CH0)로부터 채널(CH3)까지 라운드 로빈 방식으로 순차적으로 분할 데이터가 기록된다. 분할 데이터의 추가적인 기록시에, 채널(CH0)로부터 순차적으로 라운드 로빈 방식으로 데이터가 기록된다. 라운드 로빈 방식으로 분할 데이터를 기록함으로써, 채널의 기록 동작이 균일하게 수행된다. 도 10에 도시된 예에서는, 시간의 경과에 따라 데이터를 채널들의 순서로 기록을 하는 상태를 도시한다. 그러나, 이 실시형태는 이러한 예로 제한되지 않는다. 2개 이상의 채널에 동시에 데이터를 기록할 수도 있다.
도 3의 설명으로 되돌아가면, NAND 제어부(66)는, 어드레스 변환부(62)로부터 수신된 커맨드가 물리 어드레스가 지정된 유효 페이지의 데이터(유효 데이터)의 판독을 요청하는 경우, 그 물리 어드레스를 이용하여, NAND(58) 내의 물리 어드레스에 대응하는 페이지에 기록된 데이터를 판독하고, 그 판독된 데이터를 버퍼 제어부(61)에 송신하여, 그 데이터를 데이터 버퍼(67)에 기억시킨다. NAND 제어부(66)는, NAND(58)으로부터 판독된 데이터에 오류가 있는 경우, 그 오류를 검출하여 정정한다. 데이터의 오류를 검출하여 정정하는 방법에 대하여 후술한다. CH 할당부(63)로부터 수신된 커맨드가 터이터의 기록을 요청하는 경우, NAND 제어부(66)는 버퍼 제어부(61)를 통해 기록 대상 데이터를 취득하여, 유효 데이터를 NAND(58)에 기록한다.
압축 후보 검출부(64)는 관리 테이블(69)에 포함되는 비트 벡터 테이블을 참조하여, 압축에 대한 후보가 되는 논리 블록을 결정하여, 그 블록에서의 유효 페이지의 물리 어드레스를 지정하여 그 유효 페이지의 판독을 요청하는 커맨드(압축 판독 커맨드로 지칭됨)를 압축 판독큐(68)에 송신한다.
데이터 버퍼(67)는 기록 대상 데이터 또는 판독된 데이터를 내부에 기억하는 버퍼이다. 압출 판독큐(68)는 압축시에 유효 페이지의 판독을 요청하는 커맨드를 내부에 기억하는 선입선출형 버퍼이다.
버퍼 제어부(61)는 데이터 버퍼(67)를 복수의 영역으로서 관리하여, 커맨드에 대응한 데이터를 기억시키는 영역을 관리한다. 보다 상세하게, 버퍼 제어부(61)는, 기록 커맨드에 응답하여 호스트 인터페이스부(60)로부터 송신된 기록 대상 데이터를 데이터 버퍼(67)에 기억시켜, CH 할당부(63)에 의해 기록되도록 결정된 채널에 대응하는 NAND 제어부(66)에 기록 대상 데이터를 송신한다. 그 후, 기록 대상 데이터는, NAND 제어부(66)를 통해 NAND(58)에 기록된다. 버퍼 제어부(61)는, 판독 커맨드에 응답하여, NAND 제어부(66)로부터 송신된 데이터를 데이터 버퍼(67)의 지정 영역에 기억시킨 후, 그 데이터를 호스트 인터페이스부(60)에 송신한다. 데이터는 호스트 인터페이스부(60)를 통해 호스트에 송신된다. 버퍼 제어부(61)는, 압축 판독 커맨드에 응답하여, 대응하는 NAND 제어부(66)를 통해 NAND(58)로부터 판독된 데이터를 데이터 버퍼(67)에 기억시킨다.
관리 테이블 갱신부(65)는, 논리 어드레스가 지정된 데이터의 기록을 요청하는 커맨드(기록 커맨드)가 호스트로부터 수신된 경우, 포워드 룩업 테이블을 참조하고, 또한 비트 벡터 테이블을 갱신하여, 포워드 룩업 테이블을 추가로 갱신한다. 보다 상세하게, 관리 테이블 갱신부(65)는, 우선, 포워드 룩업 테이블을 참조하여, 논리 어드레스에 대응하는 물리 어드레스와 연관되는 데이터 즉, 논리 어드레스와 연관되는 데이터가 어느 블록의 어느 페이지에 기록되고 있는지를 검색한다. 이러한 상태에서, 관리 테이블 갱신부(65)는, 논리 어드레스의 상위 18비트를 이용하여 포워드 룩업 테이블의 제1 테이블의 엔트리를 참조하고, 논리 어드레스의 상위 18비트와 연관되는 특정 정보를 이용하여, 논리 어드레스와 물리 어드레스의 대응 관계가 내부에 제2 테이블을 기억하는 기억 영역에 기억되어 있는지, 또는 내부에 제3 테이블을 기억하는 기억 영역에 기억되어 있는지 여부를 결정한다. 논리 어드레스의 상위 18비트에 대응하는 특정 정보가“FFFFFFFFF”라는 값을 나타내는 경우, 즉, 논리 어드레스와 물리 어드레스 사이의 대응 관계가 내부에 제2 테이블을 기억하는 기억 영역 및 내부에 제3 테이블을 기억하는 기억 영역 중 어디에도 기억되어 있지 않은 경우, 이는 논리 어드레스의 데이터가 이번까지 기록되어 있지 않음을 의미한다. 특정 정보가 판독시에“FFFFFFFFF”라는 값을 나타내는 경우, 이는 오류가 된다는 점에 주목한다. 이러한 상태에서, 관리 테이블 갱신부(65)는, 제1 테이블이, 논리 어드레스의 상위 18비트와, 논리 어드레스에 대응하는 물리 어드레스를 기억하는 제2 테이블을 내부에 기억하는 기억 영역을 특정하는 특정 정보가 연관되어 있음을 나타내는 정보를 포함하는 방식으로, 제1 테이블을 갱신한다. 또한, 관리 테이블 갱신부(65)는, 내부에 제2 테이블을 기억하는 기억 영역에, 논리 어드레스에 대응하는 엔트리를 기록한다. 즉, 관리 테이블 갱신부(65)는, 논리 어드레스의 3번째 비트로부터 10번째 비트까지의 중간의 8비트를 오프셋으로서 이용하여, 내부에 제2 테이블을 기억하는 기억 영역에, 오프셋에 대응하는 기억 위치(어드레스)의 4B(byte)에 논리 어드레스에 대응하는 물리 어드레스를 기록함으로써, 내부에 제2 테이블을 기억하는 기억 영역에 엔트리를 기록한다. 또한, 관리 테이블 갱신부(65)는 비트 벡터 테이블 내의, 기록 대상 데이터를 기록하는 페이지에 대응하는 비트 벡터의 값을“1”로 설정한다. 기록 대상 데이터를 기록하는 페이지, 즉 물리 어드레스가 기록 포인터에 의해 표시된다. 그 후에, 관리 테이블 갱신부(65)는, 그 페이지를 포함하는 물리 블록의 유효 페이지 수의 카운터의 값을 1씩 증가시킨다.
이와 반대로, 제1 테이블의 엔트리의 특정 정보가, 논리 어드레스의 상위 18비트에 대하여 논리 어드레스와 물리 어드레스 사이의 대응 관계가 제2 테이블 또는 제3 테이블 중 하나에 도시되어 있음을 나타내는 경우, 이는 데이터의 논리 어드레스에 대응하는 기억 영역(1 MB)에, 데이터가 이전에 기록되어 있음을 의미한다. 논리 어드레스와 물리 어드레스 사이의 대응 관계가 제2 테이블에 도시되는 경우에, 관리 테이블 갱신부(65)는, 제1 테이블을 갱신하지 않지만, 제2 테이블 내에서, 논리 어드레스에 대응하는 엔트리에, 기록 대상 데이터가 기록되는 물리 어드레스를 기록한다. 논리 어드레스와 물리 어드레스 사이의 대응 관계가 제3 테이블에 도시되는 경우에, 관리 테이블 갱신부(65)는, 내부에 제3 테이블을 기억하는 기억 영역내의 논리 어드레스에 대응하는 물리 어드레스를 도시하는 엔트리를, 내부에 제2 테이블을 기억하는 기억 영역에 기록함으로써, 그 기억 영역에 기억된 각 엔트리를 제3 테이블로부터 제2 테이블로 이동시킨다. 또한, 관리 테이블 갱신부(65)는, 제2 테이블의 대응하는 엔트리를, 기록 대상의 물리 어드레스로 갱신한다. 그 후, 관리 테이블 갱신부(65)는, 제1 테이블 내에서, 엔트리들에 표시되는 각 물리 어드레스에 대응하는 논리 어드레스의 상위 18비트를, 이동 목적지의 물리 어드레스를 내부에 기억하는 제2 테이블 내의 기억 영역을 나타내는 특정 정보와 연관시킴으로써 제1 테이블을 갱신한다. 기록 대상 데이터를 기록하는 페이지, 즉 물리 어드레스를, 기록 포인터로 나타낸다.
논리 어드레스와 물리 어드레스 사이의 대응 관계가 제2 테이블 및 제3 테이블 중 하나에 도시되는 경우에, 이번의 기록에 대한 기록 커맨드로 인하여, 이전에 기록된 데이터를 무효화시켜야 한다. 이러한 상태에서, 관리 테이블 갱신부(65)는, 기록 커맨드로 지정된 논리 어드레스에서 참조된 포워드 룩업 테이블의 엔트리에 기억되는 물리 어드레스의 페이지에 대응하는 비트 벡터의 값을“0”으로 설정한다. 또한, 관리 테이블 갱신부(65)는, 그 페이지를 포함하는 물리 블록의 유효 페이지 수의 카운터의 값을 1씩 감소시킨다. 또한, 관리 테이블 갱신부(65)는, 기록 대상 데이터를 기록하는 페이지에 대응하는 비트 벡터의 값을“1”로 설정하여, 그 페이지를 포함하는 물리 블록에 대응하는 유효 페이지 수의 카운터의 값을 1씩 증가시킨다. 데이터의 기록이 수행될 때 마다 갱신을 행함으로써, 비트 벡터 테이블과 유효 페이지 수의 카운터는, 항상 유효 페이지의 기억 위치 및 그 수를 나타낸다.
제2 테이블은 전술한 바와 같이, 캐쉬로서 기능하기 때문에, 캐쉬 영역은 일반적으로 이용되는 캐쉬와 같이 제한되며, 그러므로 캐쉬의 용량을 미리 정해진 체적 내에서 유지할 필요가 있다. 캐쉬의 영역이 정해진 레벨을 초과하는 경우, 엔트리들 중의 일부를 축출하여 새로운 영역을 확보해야 한다. 제2 테이블로부터 제3 테이블로의 엔트리의 축출은, 관리 테이블 갱신부(65)에 의해 수행된다. 축출 될 엔트리를 선택하기 위하여 이용되는 방법은, 종래의 캐쉬로 이용되는 공지된 LRU(Least Recently Used) 알고리즘, 또는 가장 오래된 엔트리를 선택하여 축출하는 FIFO(First-In First-Out) 알고리즘일 수 있다. 제2 테이블로부터 제3 테이블로의 엔트리의 축출(기록)은, NAND(58)의 각각의 기록 사이즈에 따라서 수행된다. 예를 들어, 4 KB 페이지 사이즈의 16배인 64 KB로 이루어진 데이터가 축출이 수행되는 단위로서 이용되는 경우에, 제2 테이블의 엔트리들의 각각이 1 KB로 구성되어 있기 때문에, 64개의 엔트리가 한번에 축출된다. 그 축출된 데이터는, 추기 방식을 이용함으로써, 페이지 단위로 내부에 제3 테이블을 기억하는 기억 영역에 기록된다. 이 예에서, 16페이지가 한번에 기록된다. 관리 테이블 갱신부(65)는, 제2 테이블로부터 축출될 후보 엔트리들을 선택한 경우에, 제3 테이블에 기록될 64개의 엔트리에 이미 기억되어 있는 기록 컨텐츠와 축출 후보인 엔트리를 병합하고, 병합의 결과를 제3 테이블의 새로운 기억 영역에 기록한다. 병합 처리는 1 KB 단위 원칙으로 수행된다. 이 상태에서, 관리 테이블 갱신부(65)는, 제2 테이블로부터 축출된 엔트리에 의해 나타내는 물리 어드레스와 연관되는 논리 어드레스의 상위 18비트를 나타내는 제1 테이블의 엔트리는, 내부에 제3 테이블을 기억하는 기억 영역 내의 논리 어드레스에 대응하는 물리 어드레스를 내부에 기억하는 기억 영역을 특정하는 특정 정보와 연관되는 방식으로, 제1 테이블에서 대응하는 엔트리를 갱신한다. 제3 테이블의 엔트리는, 하나의 NAND(58) 대신에, 2 개 이상의 NAND(58)에 기억되는 것이 바람직하다. 즉, 관리 테이블 갱신부(65)는, 1회의 축출로 하나의 NAND(58)의 64 KB의 기억 영역에 데이터를 기록하지만, 기록은 라운드 로빈 방식으로 기록 대상 NAND(58)로서 결정되었던 NAND(58)에서 4KB의 단위로 수행된다. 이러한 배열에 있어서, 제3 테이블로의 데이터의 기록에 대하여, 기록 동작을 복수의 NAND(58)에서 균일하게 수행하는 것을 보증할 수 있다.
다음으로, 본 실시형태에 따른 반도체 메모리 제어 장치(50)에 의해 수행되는 처리의 절차를 설명한다. 우선, 호스트부터의 기록 커맨드에 응답하여 반도체 메모리 제어 장치(50)에 의해 NAND(58)에 기록 대상 데이터를 기록하는 절차를 도 11을 참조하여 설명한다. 기록을 시작하기 이전에, 반도체 메모리 제어 장치(50)는, 채널들 각각에 대한 자유 블록인 물리 블록을 미리 확보한다. 또한, 반도체 메모리 제어 장치(50)는, 채널의 헤드에서 물리 블록의 제1 페이지를 나타내기 위하여 각 채널의 기록 포인터를 설정한다. 특정 논리 어드레스에 대하여 데이터를 기록하도록 요청하는 기록 커맨드를 호스트로부터 수신하는 경우(단계 S1), 반도체 메모리 제어 장치(50)는, 기록 커맨드에 의해 기록되도록 요청된 데이터의 사이즈가 페이지 사이즈 이하인지 여부를 결정한다(단계 S2). 데이터의 사이즈가 페이지 사이즈 이하인 경우에(단계 S2에서 YES), 반도체 메모리 제어 장치(50)는 데이터(기록 대상 데이터)를 데이터 버퍼(67)에 기억시킨다(단계 S4). 이와 반대로, 기록 커맨드에 의해 기록되도록 요청된 데이터의 사이즈가 페이지 사이즈 보다 더 큰 경우(단계 S2에서 NO), 반도체 메모리 제어 장치(50)는 그 데이터를 페이지의 단위로 분할하여 그 분할된 데이터를 데이버 버퍼(67)에 기록한다(단계 S4).
이후에, 반도체 메모리 제어 장치(50)는, 기록 커맨드에 의해 지정된 논리 어드레스에 기초하여 포워드 룩업 테이블을 참조하여, 기록 대상 데이터의 논리 어드레스에 대응하는 물리 어드레스가 이미 내부에 기록되어 있는 경우, 비트 벡터 테이블을 갱신하기 위하여, 물리 어드레스를 이전의 물리 어드레스로서 예를 들어, SRAM(54)에 기억시킨다(단계 S5). 또한, 반도체 메모리 제어 장치(50)는, 기록 대상 데이터를 기록하는 채널을 라운드 로빈 방식으로 결정하여(단계 S6), 결정된 채널의 NAND(58)에서 기록 포인터로 나타내는 페이지에, 페이지 ECC 및 논리 어드레스가 부가된 기록 대상 데이터를 기록한다(단계 S7). 그 후, 반도체 메모리 제어 장치(50)는, 각 채널에 관해서, 기록 대상 데이터가 기록되는 페이지에 후속되는 다음의 미기록 페이지를 나타내도록 각 채널의 기록 포인터를 갱신한다(단계 S8).
도 12는 채널 CH0에서, 분할된 데이터가 기록 대상 데이터로서 기록되는 상태를 시간의 경과에 따라서 나타내는 도면이다. 우선, 시각 tO에서, 자유 블록이 확보된다. 시각 t1에서, 최초의 분할 데이터 D1이, 시각 t0에서 확보된 자유 블록의 최초 페이지(선두 또는 말단)에 기록된다. 시각 t2에서, 라운드 로빈 방식으로 채널 CH0의 두 번째 페이지에 새롭게 결정된 분할 데이터 D6이 기록된다. 이와 유사하게, 시각 t3에서, 3번째 페이지에 분할 데이터 D11이 기록된다. 시각 t4에서, 4번째 페이지에 분할 데이터 D16이 기록된다. 이러한 방식으로, 분할 데이터를 기록한 페이지들은, 논리 어드레스와는 상관없이, 물리 블록에서 오름순으로 결정된다. 또한, 기록 포인터는, 데이터를 기록한 페이지를 오름순으로 나타내기 위하여, 기록이 수행될 때 마다 설정된다. 본 실시형태에서는, 라운드 로빈 방식으로 채널에의 기록 동작이 균일하게 수행되므로, 도 7에 도시된 바와 같이, 각 채널에서 기록 포인터에 의해 나타내는 페이지 번호들 사이의 차이는, 최대가 1이 된다. 또한, 논리 블록의 최종 페이지에서 기록이 종료되는 경우, 채널에서 기록 포인터에 의해 나타내는 페이지 번호는 동일하게 된다.
전술한 바와 같이, 호스트로부터의 기록 커맨드에 의해 지정된 논리 어드레스의 값에 상관없이, 기록 대상 데이터를 기록한 페이지의 물리 어드레스가 미리 정해진 순서로 할당되고, 그 페이지에 데이터가 기록된다.
도 11의 설명으로 되돌아가면, 기록 대상 데이터가 기록됨에 따라, 반도체 메모리 제어 장치(50)는, 기록 대상 데이터의 논리 어드레스와 기록 대상 데이터를 기록하는 페이지의 물리 어드레스 사이의 대응 관계를, 포워드 룩업 테이블에 기입 및 기억시킨다(단계 S9). 논리 어드레스 및 물리 어드레스를 기록하기 위한 구체적인 방법을 이미 위에서 설명하였다. 기록 대상 데이터가 분할된 데이터인 경우에, 분할된 데이터는 페이지 단위로 존재하기 때문에, 반도체 메모리 제어 장치(50)는, 지정된 논리 어드레스에 대하여 페이지 사이즈를 순차적으로 가산함으로써 획득된 값들을, 분할된 데이터의 논리 어드레스로서 산출한다. 그 후, 반도체 메모리 제어 장치(50)는, 논리 어드레스, 기록 대상 데이터를 이번 기록에서 기록한 채널의 채널 번호, 물리 블록의 물리 블록 번호 및 페이지의 페이지 번호를, 포워드 룩업 테이블에 기록 및 기억시킨다. 전술한 예에서, 페이지 번호는 갱신 이전의 기록 포인터의 하위 6비트에 의해 표시되므로, 이 값은 페이지 번호로서 이용될 수도 있다. 반도체 메모리 제어 장치(50)는, 기록 대상 데이터의 기록이 수행될 때 마다, 포워드 룩업 테이블을 갱신한다.
또한, 반도체 메모리 제어 장치(50)는, 비트 벡터 테이블을 참조하고, 단계 S5에서 SRAM(54)에 기억된 이전의 물리 어드레스의 페이지에 대응하는 비트 벡터의 값을“0”으로 설정하고, 그 페이지를 포함하는 물리 블록의 유효 페이지 수의 카운터의 값을 1씩 감소시킨다(단계 S10). 이전의 물리 어드레스는, 단계 S1에서 수신된 기록 커맨드에 의해 지정되는 논리 어드레스와 연관하여 이전에 데이터가 기록된 페이지를 나타낸다. 이러한 이유로, 비트 벡터의 값은“0”으로 설정되고, 그 페이지를 포함하는 물리 블록의 유효 페이지 수의 카운터의 값을 1씩 감소시킨다. 또한, 반도체 메모리 제어 장치(50)는, 단계 S7에서, 기록 대상 데이터를 기록한 페이지에 대응하는 비트 벡터의 값을“1”로 설정하고, 그 페이지를 포함하는 물리 블록의 유효 페이지 수의 카운터의 값을 1씩 증가시킨다(단계 S11). 이러한 방식으로, 반도체 메모리 제어 장치(50)는, 기록 대상 데이터가 기록됨에 따라, 비트 벡터 테이블을 갱신한다.
또한, 기록 포인터가 모든 채널(CH0 내지 CH3)에서 블록의 말단에 도달하여, 데이터를 새롭게 기록할 수 없게 되는 경우, 반도체 메모리 제어 장치(50)는 새로운 채널 각각의 자유 블록을 확보한다. 새로운 자유 블록에의 분할 데이터의 기록도 또한 전술한 바와 같다.
다음으로, 호스트로부터의 판독 커맨드에 따라서, 반도체 메모리 제어 장치(50)에 의한 NAND(58)로부터의 데이터의 판독 절차를 도 13을 참조하여 설명한다. 반도체 메모리 제어 장치(50)는, 논리 어드레스가 지정된 데이터를 판독하도록 요청하는 판독 커맨드를 호스트로부터 수신하는 경우(단계 S20), 판독 커맨드에 의해 판독되도록 요청된 데이터의 사이즈가 페이지 사이즈 이하인지 여부를 결정한다(단계 S21). 데이터의 사이즈가 페이지 사이즈 이하인 경우(단계 S21에서 YES), 반도체 메모리 제어 장치(50)는, 판독 커맨드에 의해 지정된 논리 어드레스를 이용하여 포워드 룩업 테이블을 참조하여, 데이터 판독 대상의 채널, 물리 블록 및 페이지를 결정한다(단계 S23). 채널, 물리 블록 및 페이지를 결정하는 구체적인 방법은, 위에서 이미 설명하였다. 그 후에, 반도체 메모리 제어 장치(50)는, 결정된 채널에 대응하는 NAND(58)로부터 데이터를 판독한다(단계 S24).
이와 반대로, 판독 커맨드에 의해 판독되도록 요청된 데이터의 사이즈가 페이지 사이즈 보다 더 큰 경우(단계 S21에서 NO), 반도체 메모리 제어 장치(50)는, 판독될 데이터가 페이지 단위의 데이터가 되도록 판독을 분해한다. 즉, 반도체 메모리 제어 장치(50)는 판독 커맨드에 의해 지정된 논리 어드레스를 이용함으로써, 판독될 데이터의 논리 어드레스의 각각을 산출한다(단계 S22). 또한, 반도체 메모리 제어 장치(50)는, 그 산출된 논리 어드레스의 각각을 이용하여 포워드 룩업 테이블을 참조하고, 데이터 판독 대상의 채널, 물리 블록 및 페이지의 각각을 결정한다(단계 S23). 이후에, 반도체 메모리 제어 장치(50)는 결정된 채널에 대응하는 NAND(58)로부터 데이터를 판독한다(단계 S24).
단계 S24에서 판독된 데이터의 정당성은, 데이터에 부가된 페이지 ECC에 의해 보증된다. 즉, 반도체 메모리 제어 장치(50)는, 판독된 데이터에 부가된 페이지 ECC를 이용하여, 그 데이터의 오류를 검출하고 이것을 정정할 수 있다. 그러나, 페이지 ECC를 이용하여 정정할 수 없는 오류가 있는 경우에, NAND(58)에 고장이 발생하여, 데이터에 이상이 발생하고 있을 가능성이 있다. 이러한 경우에(단계 S25에서 NO), 반도체 메모리 제어 장치(50)는, NAND(58)에 고장이 발생하였음을 나타내는 통지 정보를 호스트에게 송신한다(단계 S28).
단계 S24에서 판독된 데이터에 오류가 없는 경우에(단계 S25에서 YES), 반도체 메모리 제어 장치(50)는, 그 데이터를 데이터 버퍼(67)의 지정 영역에 기억시키고, 단계 S27로 진행한다. 단계 S24에서 판독된 데이터에 오류가 있는 경우라도, 반도체 메모리 제어 장치(50)는, 페이지 ECC를 이용하여 데이터를 정정하고(단계 S26), 정정된 데이터를 데이터 버퍼(67)의 지정 영역에 기억시켜, 단계 S27로 진행한다. 단계 S27에서, 반도체 메모리 제어 장치(50)는, 데이터 버퍼(67)의 지정 영역에 기억된 데이터를 호스트로 송신한다.
단계 S20에서 수신된 판독 커맨드에 의해 복수의 데이터의 판독이 요청된 경우, 그 커맨드에 의해 지정된 논리 어드레스에 따라서, 반도체 메모리 제어 장치(50)는, 서로 다른 채널의 물리 블록으로부터 데이터를 판독할 수도 있다. 전술한 바와 같이, 데이터의 판독시에는 채널이 독립적으로 액세스될 수 있으므로, 데이터는 호스트부터의 요청에 응답하여 판독될 수 있고, 응답성이 높게 호스트에 송신될 수 있다.
다음으로, 압축 대상의 물리 블록에 기록되는 유효 데이터를 자유 블록으로 이동시키는 절차를 도 14를 참조하여 설명한다. 반도체 메모리 제어 장치(50)는, 유효 페이지 수의 최대값으로서“M = 4096”을 설정하여, 비트 벡터 테이블에서의 각 물리 블록의 엔트리의 인덱스로서“K = 0”을 설정한다(단계 S40). 반도체 메모리 제어 장치(50)는, 비트 벡터 테이블을 참조하여, 각 물리 블록의 유효 페이지 수의 카운터의 값을 순차적으로 하나씩 판독하고(단계 S41), 그 카운터의 값이 M보다 작은지 여부를 결정한다(단계 S42). 유효 페이지 수의 카운터의 값이 M 이상인 경우(단계 S42에서 NO), 그 장치는 단계 S44로 진행한다. 유효 페이지 수의 카운터의 값이 M보다 작은 경우(단계 S42에서 YES), 반도체 메모리 제어 장치(50)는, M의 값을 그 카운터의 값으로 대체하여, 단계 S41에서, 유효 페이지 수의 카운터의 값을 판독한 엔트리의 인덱스의 값을 K로서 설정하고(단계 S43), 단계 S44로 진행한다.
단계 S44에서, 반도체 메모리 제어 장치(50)는, 비트 벡터 테이블의 모든 물리 블록에 대해서 유효 페이지 수의 카운터의 값을 판독하였는지 여부를 결정한다. 모든 물리 블록에 대해서 유효 페이지 수의 카운터의 값을 판독하지 않은 경우(단계 S44에서 NO), 반도체 메모리 제어 장치(50)는 K의 값을 1씩 증가시키고(단계 S48), 단계 S41로 되돌아간다. 단계 S41에서, 반도체 메모리 제어 장치(50)는, 비트 벡터 테이블에서, K의 순서로 아직 판독되지 않은 물리 블록의 유효 페이지 수의 카운터의 값을 판독한다. 이와 반대로, 모든 물리 블록에 대해서 유효 페이지 수의 카운터의 값을 판독한 경우(단계 S44에서 YES), 반도체 메모리 제어 장치(50)는, K의 값을, 압촉 대상 후보의 물리 블록의 인덱스로서 설정한다. 그 후, 반도체 메모리 제어 장치(50)는, 인덱스 K로 나타내는 각 물리 블록에 대하여, 비트 벡터 테이블의 비트 벡터가“1”을 나타내는 페이지(유효 페이지)에 기억되어 있는 데이터(유효 데이터)를 결정하여, 데이터 버퍼(67)로부터 그 유효 데이터 모두를 판독한다. 또한, 반도체 메모리 제어 장치(50)는, 그 유효 데이터에 부가되는 논리 어드레스를 추출한다(단계 S45).
이후에, 반도체 메모리 제어 장치(50)는, 단계 S45에서 판독된 각 유효 데이터를 전술한 바와 같이 기록 커맨드에 응답하여 수행되는 데이터의 기록에 유사한 방식으로 기록한다(단계 S46). 즉, 반도체 메모리 제어 장치(50)는, 유효 데이터를 기록해야 하는 채널을 채널(CH0 내지 CH3)로부터 라운드 로빈 방식으로 결정하여, 채널의 NAND(58)의 소거된 블록에서 기록 포인터로 나타내는 페이지에, 유효 데이터를 기록한다. 그 후, 반도체 메모리 제어 장치(50)는, 유효 데이터를 기록하는 페이지에 후속하는 다음의 미기록 페이지를 나타내기 위하여 기록 포인터를 갱신한다. 반도체 메모리 제어 장치(50)는, 기록된 유효 데이터에 부가되는 논리 어드레스와 유효 데이터를 기록하는 페이지의 물리 어드레스 사이의 대응 관계를 포워드 룩업 테이블에 기록하여 그 테이블을 갱신한다. 포워드 룩업 테이블을 갱신하는 방법은 전술한 바와 같다. 압축에 있어서, 이러한 방식으로 포워드 룩업 테이블을 갱신함으로써, 데이터의 논리 어드레스와 물리 어드레스 사이의 대응 관계를 항상 적절하게 유지할 수 있다. 또한, 데이터에 논리 어드레스가 부가되어 있기 때문에, 압축의 수행시에, 논리 어드레스와 데이터가 기록되는 물리 어드레스 사이의 대응 관계를 용이하게 갱신할 수 있다.
데이터 버퍼(67)에 적재된 모든 유효 페이지의 데이터를 데이터 버퍼(67)로부터 판독하는 것이 종료되어(단계 S47에서 YES), NAND(58)로의 기록이 종료되면, 반도체 메모리 제어 장치(50)는, 압축 대상 후보로서 선택되었던 채널(CH0 내지 CH3)의 물리 블록에 소거 동작을 수행하여, 압축 처리를 종료한다.
유효 페이지가 존재하지 않으면, 즉, 유효 페이지 수의 카운터의 값이 0이면(단계 S42에서), 반도체 메모리 제어 장치(50)는, 판독 동작없이 소거 동작을 수행한다.
압축 처리를 수행하는 타이밍은, 데이터 기록 요청의 수신시에 체크에 의해 획득되는 자유 블록의 수가, 미리 정해진 수 이하가 될 때의 타이밍일 수도 있다.
전술한 바와 같이, 호스트에 의해 지정된 논리 어드레스와 데이터가 반도체 메모리 소자에 기억되는 물리 어드레스 사이의 대응 관계를 나타내는 포워드 룩업 테이블은, 반도체 메모리 소자와 같은 비휘발성 메모리 및 용량이 작고 저렴한 SRAM과 같은 휘발성 메모리를 조합하여 구성된다. 그 결과, SRAM 이외에, 휘발성 메모리로서 DRAM을 포함하지 않도록, 반도체 메모리 제어 장치(50)를 구성할 수 있다. 따라서, 반도체 메모리 제어 장치(50)를 저렴하게 구성할 수 있다. 또한, 포워드 룩업 테이블의 일부로서 SRAM(54)에 기억된 제2 테이블을, 포워드 룩업 테이블의 일부로서 NAND(58)에 기억되는 제3 테이블의 캐쉬로서 이용하기 때문에, NAND(58)에 기록된 데이터의 논리 어드레스와 물리 어드레스 사이의 대응 관계를 전부 유지가능하게 하면서, 기록 동작이 NAND(58)에서 수행되는 횟수를 억제하는 수 있다. 그 결과, 반도체 메모리 시스템의 수명에의 악영향을 억제할 수 있다.
이 실시형태에서는, 비트 벡터 테이블을 제공함으로써, 압축을 고속으로 효율적으로 수행할 수 있다. 압축을 수행하기 위하여, 반도체 메모리 제어 장치(50)는, 블록에 유효 데이터가 기록되어 있는 유효 페이지를 식별하고, 그 유효 페이지에 대응하는 논리 어드레스를 구하고, 그 유효 페이지를 이동시켜, 논리 어드레스와 데이터가 이동되는 페이지의 물리 어드레스를 연관시키는 갱신 처리를 수행해야 한다. 유효 페이지의 식별 및 물리 어드레스의 갱신은 포워드 룩업 테이블을 통하여 수행될 수 있다. 그러나, 포워드 룩업 테이블은, 논리 어드레스를 인덱스로서 이용한 검색에 최적화되어 구성되어 있다. 이러한 이유로, 압축의 수행시에 포워드 룩업 테이블을 통해 유효 페이지의 식별 및 물리 어드레스의 갱신을 하는 것은, 검색 시간에 있어서 페널티의 증가를 야기한다.
압축 대상이 되는 논리 블록은, 유효 페이지의 수가 적은 것이 바람직하다. 그 이유는, 압축에 의해 유효 페이지를 이동시킴으로써, 많은 자유 블록을 획득할 수 있기 때문이다. 유효 페이지의 수가 적은 논리 블록을 선택하기 위하여, “1”의 값을 가지는 비트 벡터의 수가 적은 엔트리를 선택할 수도 있다. “1”의 값을 가지는 비트 벡터의 수를 카운트하기 위하여, 예를 들어, 파퓰레이션(population) 연산(워드에서 “1”의 값을 가지는 비트 수를 카운팅)을 제공할 수도 있다. 그러나, 엔트리의 비트폭이 크면(예로서 320 비트), 1 사이클로 비트수를 산출하는 것이 어렵게 된다. 이러한 이유로, 본 실시형태에서, 반도체 메모리 제어 장치(50)는, 비트 벡터의 값의 변화에 따라서, 도 5에 도시된 유효 페이지 수의 카운터의 값을 갱신한다. 압축 대상이 되는 논리 블록을 검색할 때에는, 비트 벡터 테이블의 유효 페이지 수의 카운터의 값이 최소인 엔트리를 검색함으로써, 논리 블록을 구한다. 유효 페이지 수의 카운터의 값이 최소인 엔트리는, 모든 논리 블록에 관한 엔트리의 유효 페이지 수의 카운터의 값을 각각 1회 판독함으로써 검색될 수 있다. 따라서, 이 실시형태의 반도체 메모리 제어 장치(50)에서는, 비트 벡터 테이블을 참조함으로써, 유효 페이지 수가 적은 논리 블록을 쉽게 검색할 수 있고, 압축을 고속으로 효율적으로 수행할 수 있다.
본 발명은 전술한 실시형태로 제한되지 않고, 발명의 사상을 벗어나지 않고 실현에 있어서 여러 가지 변형된 구성요소들로 구현될 수도 있다. 또한, 본 발명은, 실시형태에 개시된 복수의 구성요소를 적절히 조합함으로써 여러 가지 형태로 구현될 수 있다. 예를 들어, 실시형태들에서 설명된 구성요소들의 일부는 생략될 수도 있다. 또한, 다른 실시형태들의 일부 구성요소들이 적절히 조합될 수도 있다.
전술한 실시형태에서, 반도체 메모리 제어 장치(50)에서 실행되는 여러 가지 프로그램은, 인터넷에 접속된 컴퓨터에 기억될 수도 있으며, 네트워크를 통하여 다운로드됨으로써 제공된다. 여러 가지 프로그램은, 설치되거나 또는 실행될 수 있는 파일의 형태로, CD-ROM(Compact Disk Read-Only Memory), 플렉시블 디스크(FD), CD-R(Compact Disk Recordable), DVD(Digital Versatile Disk) 등과 같은 컴퓨터 판독가능한 기록 매체에 기록되어, 컴퓨터 프로그램 제품으로서 제공될 수도 있다.
전술한 실시형태에서, 프로세서의 기능의 일부는 하드웨어에 의해 실현될 수도 있다. 반도체 메모리 제어 장치(50)는 복수의 프로세서(51)를 가질 수도 있으며, 전술한 기능은 복수의 프로세서(51)에 의해 실현될 수도 있다. 이러한 구조에 있어서, 처리 속도가 더 높게 달성될 수 있다.
전술한 실시형태에서, ECC 코드는 페이지 ECC로서 페이지 단위로 각각의 데이터에 부가된다. 그러나, ECC 코드는 페이지 보다 더 작은 단위(예를 들어, 512 바이트의 섹터의 단위)로 부가될 수도 있다.
전술한 실시형태에서, 반도체 메모리 제어 장치(50)에 접속되는 NADN(58)의 수는 4개이다. 그러나, 반도체 메모리 제어 장치(50)에 접속되는 NADN(58)의 수는, 이 예로 제한되지 않는다.
전술한 실시형태에서, 반도체 메모리 장치(50)에 포함되는 메모리 제어기(53)에 접속된 메모리는 SRAM(54)이다. 그러나, 본 발명은 이 예로 제한되지 않는다. DRAM 또는 SRAM 및 DRAM 양자는 메모리로서 이용될 수도 있다. 그 상태에서, 포워드 룩업 테이블의 일부(제1 테이블, 제2 테이블 및 제3 테이블 중 하나 이상)는 DRAM에 기억될 수도 있다.
전술한 실시형태에서, 채널들은 NAND(58)에 일 대 일로 대응하지만, 본 발명은 이것으로 제한되지 않는다. 채널들은 NAND(58)에 일 대 다수로 대응할 수 있는데, 즉 복수의 NAND(58)는 하나의 채널에 할당될 수도 있다. 그 상황에서, 각각의 NAND(58)를 식별하는 식별수는 NAND(58)에 할당된다. 식별부 및 물리 어드레스는, 각 채널의 각 블록에 대하여, 논리적/물리적 변환 테이블에 기록된다. 예를 들어, 8개의 반도체 메모리 소자가 각 채널에 할당되는 경우에, 반도체 메모리 소자를 식별하기 위한 3비트, 및 각 반도체 메모리 소자에 포함되는 4096개 블록을 식별하는 12비트를 포함하는 총 15비트가, 각 채널의 블록들 각각의 물리 어드레스 및 식별 번호로서, 논리적/물리적 변환 테이블에 기록된다.
전술한 실시형태에서, 비트 벡터는 데이터 및 페이지의 유효성/무효성을 나타내기 위한 방법으로서 이용되지만, 본 발명은 이러한 예로 제한되지 않는다. 예를 들어, 어떤 블록을 선택하는 다른 배열이 허용될 수 있고, 페이지들이 순차적으로 선택되므로, 선택된 페이지를 나타내는 논리 어드레스가 존재하면, 페이지는 유효하게 되는 반면에, 선택된 페이지를 나타내는 논리 어드레스가 존재하지 않으면, 페이지는 무효한 것으로 결정된다. 논리 어드레스가 존재하는지 아닌지 여부를 결정하기 위하여, 선택된 페이지가 표시되는지를 알기 위하여 체크하는 포워드 룩업 테이블에 순차적으로 액세스하는 방법을 이용하는 것이 허용될 수 있다. 다른 방법으로, 물리 어드레스를 논리 어드레스로 변환하고, 물리 어드레스에 대응하는 논리 어드레스가 존재하는지 여부를 알기 위하여 체크하는 리버스 룩업 테이블을 구성하는 것이 허용될 수 있다.
전술한 실시형태에서, 적절한 시간에서 제3 테이블의 압축 처리를 수행하는 것이 바람직하다. 제3 테이블의 엔트리 중에서, 유효 데이터가 기억되는 물리 어드레스를 나타내는 엔트리들에 대하여, 물리 어드레스를 포함하는 제3 테이블을 내부에 기억하는 기억 영역을 특정하는 특정 정보는 제1 테이블의 엔트리에 표시된다. 이와 반대로, 제3 테이블의 엔트리에 있어서, 물리 어드레스를 포함하는 제3 테이블을 내부에 기억하는 기억 영역을 특정하는 특정 정보가 제1 테이블의 엔트리에 표시되지 않는 경우, 이러한 물리 어드레스에 기억되는 데이터가 무효이며, 또한 제3 테이블에 있어서의 엔트리는 무효라는 것을 의미한다. 제3 테이블로의 기록 처리가 부가적인 기록 방법을 이용함으로써 수행되는 경우, 무효 엔트리의 양이 증가하면, 기록 처리를 실현할 수 있는 NAND(58)의 각각의 용량은 작아지게 된다. 이러한 이유로, 제3 테이블에 대하여 적절한 시간에서 압축을 수행함으로써, 제3 테이블에 의해 이용되는 영역을 어떤 레벨 이내로 유지할 수 있다. 반도체 메모리 제어 장치(50)는 제3 테이블에 대하여 압축을 수행하고 유효한 엔트리를 이동시켰을 때, 반도체 메모리 제어 장치(50)는, 그 엔트리의 이동 이전의 기억 영역을 특정하는 특정 정보를 도시하는 제1 테이블의 엔트리가, 엔트리의 이동 이후의 기억 영역을 특정하는 특정 정보를 현재 나타내도록 제1 테이블을 갱신한다.
압축의 효율을 향상시키고, 반도체 메모리 제어 장치(50)의 처리 속도를 저하시킬 수 있는 압축의 영향을 작게하기 위하여, 제3 테이블에 의해 사용되는 영역을 크게하여 압축 처리의 효율을 높이는 것이 바람직하다.
전술한 실시형태에서, 제3 테이블은 NADN(58)에 기억되지만, 본 발명은 이러한 예로 제한되지 않는다. 이는 제3 테이블이 비휘발성 메모리에 기억되는 한 수용될 수 있다.
전술한 하나 이상의 실시형태의 반도체 메모리 제어 장치에 따르면, 반도체 메모리 제어 장치는, 정보 처리 장치에 의해 이용되는 특정된 논리 어드레스로 기록되도록 요청되는 호스트 기록 데이터를 반도체 메모리 칩에 기록한다. 호스트 기록 데이터는 미리 정해진 단위의 제1 데이터 중 하나 이상을 포함한다. 물리 어드레스는 반도체 메모리 칩 내의 제1 데이터의 기억 위치를 나타내는 정보이다. 제1 테이블은 제1 메모리에 기억된다. 제2 테이블은 제2 메모리에 기억된다. 제3 테이블은, 비휘발성 메모리이며 물리 어드레스를 포함하는 제3 메모리에 기억되며, 물리 어드레스 각각은 반도체 메모리 칩 내의 제1 데이터의 각 부분의 기억 위치를 나타낸다. 제2 테이블은 제3 테이블의 서브 세트이고, 물리 어드레스를 포함하며, 이 물리 어드레스 각각은, 반도체 메모리 칩 내의 제1 데이터의 각 부분의 기억 위치를 나타낸다. 제1 테이블은 제2 테이블 엔트리를 지정하는 정보 또는 제3 테이블 엔트리를 지정하는 정보 중 어느 하나를 포함한다. 반도체 메모리 제어 장치는, 호스트 기록 데이터를 수신하도록 구성되는 수신부; 반도체 메모리 칩의 기억 영역 중 데이터가 소거되었던 기억 영역에서 데이터가 기록되지 않은 기억 영역에 제1 데이터의 각각을 기록하도록 구성되는 제어부; 및 휘발성 메모리에 제1 테이블을 기록하고 휘발성 메모리에 제2 테이블을 기록하거나, 또는 휘발성 메모리에 제1 테이블을 기록하고 비휘발성 메모리에 제3 테이블을 기록하도록 구성되는 기록부를 포함한다. 따라서, 비용을 억제하면서 반도체 메모리 칩에 수행되는 기록 처리의 횟수를 억제할 수 있다.
어떤 실시형태들을 설명하였지만, 이 실시형태들은 단지 일례로 제공되며, 발명의 범위를 제한하도록 의도되지 않는다. 실제로, 여기서 설명된 신규한 실시형태들을 여러 가지 다른 형태로 구현할 수도 있으며, 또한, 여기서 설명된 실시형태의 형태를 본 발명의 사상을 벗어나지 않고 여러 가지로 생략, 대체 및 변경할 수 있다. 첨부된 청구범위 및 그 등가물은 본 발명의 범위 및 사상 내에 포함되므로 이러한 형태 또는 변형을 커버하도록 의도된다.

Claims (7)

  1. 정보 처리 장치에 의해 이용되는 논리 어드레스가 지정된, 기록이 요청된 호스트 기록 데이터를, 반도체 메모리 칩에 기록하는 반도체 메모리 제어 장치에 있어서,
    상기 호스트 기록 데이터는 미리 정해진 단위의 하나 이상의 제1 데이터를 포함하며,
    물리 어드레스는 상기 반도체 메모리 칩 내의 상기 제1 데이터의 기억 위치를 나타내는 정보이며,
    제1 테이블은 제1 메모리에 기억되며,
    제2 테이블은 제2 메모리에 기억되며,
    제3 테이블은, 비휘발성 메모리인 제3 메모리에 기억되고, 상기 반도체 메모리 칩 내의 상기 제1 데이터의 각각의 기억 위치를 각각 나타내는 물리 어드레스를 포함하며,
    상기 제2 테이블은, 상기 제3 테이블의 서브 세트이며, 상기 반도체 메모리 칩 내의 상기 제1 데이터의 각각의 기억 위치를 각각 나타내는 물리 어드레스를 포함하며,
    상기 제1 테이블은, 제2 테이블 엔트리를 특정하는 정보 또는 제3 테이블 엔트리를 특정하는 정보 중 어느 하나를 포함하며,
    상기 반도체 메모리 제어 장치는,
    상기 호스트 기록 데이터를 수신하도록 구성되는 수신부;
    상기 반도체 메모리 칩의 기억 영역 중 데이터가 소거되어 있는 기억 영역에서 데이터가 기록되어 있지 않은 기억 위치에, 상기 제1 데이터의 각각을 기록하도록 구성되는 제어부; 및
    상기 제1 메모리에 상기 제1 테이블을 그리고 상기 제2 메모리에 상기 제2 테이블을 기록하거나, 또는 상기 제1 메모리에 상기 제1 테이블을 그리고 상기 제3 메모리에 상기 제3 테이블을 기록하도록 구성되는 기록부를 포함하고,
    상기 기록부는, 상기 제어부가 상기 제1 데이터를 상기 반도체 메모리 칩에 기록한 경우, 상기 물리 어드레스를 상기 제2 테이블을 내부에 기억하는 기억 영역에 기록하고, 미리 정해진 조건이 충족되면, 상기 제2 테이블에 포함되는 상기 물리 어드레스를 상기 제3 테이블을 내부에 기억하는 기억 영역에 기록하며, 상기 미리 정해진 조건은, 상기 제2 테이블을 내부에 기억하는 기억 영역에 기록된 복수의 엔트리의 사이즈가 상기 미리 정해진 단위의 사이즈의 배수인 것인 반도체 메모리 제어 장치.
  2. 삭제
  3. 제1항에 있어서, 상기 기록부는, 상기 미리 정해진 조건이 충족된 경우, 상기 기록부가 상기 제2 테이블에 포함되는 상기 물리 어드레스를, 상기 제3 테이블을 내부에 기억하는 기억 영역에 기록할 때, 상기 물리 어드레스와, 상기 제3 테이블을 내부에 기억하는 기억 영역 중에서 상기 물리 어드레스를 내부에 기록하는 제1 기억 영역에 이미 기억되어 있는 다른 물리 어드레스를 병합(merge)하여, 병합된 물리 어드레스를 상기 제1 기억 영역에 기록하는 것인 반도체 메모리 제어 장치.
  4. 제1항에 있어서, 상기 제1 테이블은, 상기 제2 테이블을 내부에 기억하는 기억 영역 중에서 상기 물리 어드레스를 내부에 기억하는 기억 영역의 각각을 특정하는 제1 특정 정보, 또는 상기 제3 테이블을 내부에 기억하는 기억 영역 중에서 상기 물리 어드레스를 내부에 기억하는 기억 영역의 각각을 특정하는 제2 특정 정보 중 어느 하나를 포함하며,
    상기 정보 처리 장치에 의해 제1 논리 어드레스가 지정된 상기 호스트 기록 데이터가 수신되고, 상기 제1 테이블이 상기 제2 특정 정보를 이미 포함하는 경우, 상기 기록부는, 상기 제2 테이블을 내부에 기억하는 기억 영역에, 상기 제2 특정 정보에 의해 특정된 기억 영역에 기억되는 물리 어드레스를 기록하고, 상기 제1 테이블을 내부에 기억하는 기억 영역에, 상기 물리 어드레스를 내부에 기억하는 기억 영역을 특정하는 제1 특정 정보를 기록하는 것인 반도체 메모리 제어 장치.
  5. 제1항에 있어서, 상기 기록부는, 상기 제3 테이블을 내부에 기억하는 기억 영역 중 데이터가 소거되어 있는 기억 영역에서 데이터가 기록되어 있지 않은 기억 위치에 상기 물리 어드레스를 기록함으로써, 상기 제3 테이블을 내부에 기억하는 기억 영역에 상기 물리 어드레스를 기록하는 것인 반도체 메모리 제어 장치.
  6. 제5항에 있어서, 상기 제1 테이블은, 상기 제2 테이블을 내부에 기억하는 기억 영역 중에서 상기 물리 어드레스를 내부에 기억하는 기억 영역의 각각을 특정하는 제1 특정 정보, 또는 상기 제3 테이블을 내부에 기억하는 기억 영역 중에서 상기 물리 어드레스를 내부에 기억하는 기억 영역의 각각을 특정하는 제2 특정 정보 중 어느 하나를 포함하며,
    상기 기록부는, 또한 상기 제1 테이블에 포함되는 정보와 연관되는 상기 제2 특정 정보에 의해 특정되지 않은 기억 영역에 기억되어 있는 제2 물리 어드레스를, 상기 제3 테이블을 내부에 기억하는 기억 영역 중 데이터가 소거되어 있는 새로운 기억 영역에 기록함으로써, 가비지 컬렉션(garbage collection)을 수행하는 것인 반도체 메모리 제어 장치.
  7. 제1항에 있어서, 상기 제3 테이블은 상기 반도체 메모리 칩에 기억되는 것인 반도체 메모리 제어 장치.
KR1020110087935A 2010-09-22 2011-08-31 반도체 메모리 제어 장치 KR101336382B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2010212646A JP5010723B2 (ja) 2010-09-22 2010-09-22 半導体記憶制御装置
JPJP-P-2010-212646 2010-09-22

Publications (2)

Publication Number Publication Date
KR20120031124A KR20120031124A (ko) 2012-03-30
KR101336382B1 true KR101336382B1 (ko) 2013-12-04

Family

ID=44719252

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020110087935A KR101336382B1 (ko) 2010-09-22 2011-08-31 반도체 메모리 제어 장치

Country Status (6)

Country Link
US (1) US8612721B2 (ko)
EP (1) EP2434405A1 (ko)
JP (1) JP5010723B2 (ko)
KR (1) KR101336382B1 (ko)
CN (1) CN102436353B (ko)
TW (1) TWI459199B (ko)

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5722685B2 (ja) 2011-04-12 2015-05-27 株式会社日立製作所 半導体装置、不揮発性メモリ装置の制御方法
US8806108B2 (en) * 2011-06-07 2014-08-12 Hitachi, Ltd. Semiconductor storage apparatus and method of controlling semiconductor storage apparatus
JP5687648B2 (ja) 2012-03-15 2015-03-18 株式会社東芝 半導体記憶装置およびプログラム
JP5813589B2 (ja) * 2012-07-13 2015-11-17 株式会社東芝 メモリシステムおよびその制御方法
CN103886902B (zh) * 2012-12-19 2017-08-04 比亚迪股份有限公司 一种eeprom存储装置及其数据存储方法
US9189389B2 (en) * 2013-03-11 2015-11-17 Kabushiki Kaisha Toshiba Memory controller and memory system
US10642795B2 (en) * 2013-04-30 2020-05-05 Oracle International Corporation System and method for efficiently duplicating data in a storage system, eliminating the need to read the source data or write the target data
WO2014203315A1 (ja) * 2013-06-17 2014-12-24 富士通株式会社 情報処理装置、制御回路、制御プログラム、及び制御方法
JP2015001908A (ja) * 2013-06-17 2015-01-05 富士通株式会社 情報処理装置、制御回路、制御プログラム、および制御方法
JP5967308B2 (ja) * 2013-06-17 2016-08-10 富士通株式会社 情報処理装置、制御回路、制御プログラム、及び制御方法
US20150261444A1 (en) * 2014-03-12 2015-09-17 Kabushiki Kaisha Toshiba Memory system and information processing device
TWI530787B (zh) 2014-06-05 2016-04-21 宏碁股份有限公司 電子裝置以及資料寫入方法
CN105204775B (zh) * 2014-06-26 2018-08-07 宏碁股份有限公司 电子装置以及数据写入方法
KR20160075174A (ko) * 2014-12-19 2016-06-29 에스케이하이닉스 주식회사 메모리 시스템 및 그 동작방법
CN105808444B (zh) * 2015-01-19 2019-01-01 东芝存储器株式会社 存储装置及非易失性存储器的控制方法
US10223001B2 (en) 2015-03-12 2019-03-05 Toshiba Memory Corporation Memory system
JP5889462B2 (ja) * 2015-03-26 2016-03-22 株式会社日立製作所 半導体装置、不揮発性メモリ装置の制御方法
US10459846B2 (en) * 2015-09-10 2019-10-29 Toshiba Memory Corporation Memory system which uses a host memory
US9880778B2 (en) * 2015-11-09 2018-01-30 Google Inc. Memory devices and methods
US10437785B2 (en) * 2016-03-29 2019-10-08 Samsung Electronics Co., Ltd. Method and apparatus for maximized dedupable memory
US10684795B2 (en) * 2016-07-25 2020-06-16 Toshiba Memory Corporation Storage device and storage control method
JP2018049672A (ja) * 2016-09-20 2018-03-29 東芝メモリ株式会社 メモリシステムおよびプロセッサシステム
TWI622881B (zh) * 2017-04-25 2018-05-01 Chunghwa Telecom Co Ltd Cache replacement system and method thereof for memory computing cluster
US11733873B2 (en) 2017-12-01 2023-08-22 Micron Technology, Inc. Wear leveling in solid state drives
JP2019194780A (ja) * 2018-05-01 2019-11-07 富士通株式会社 情報処理装置、データ管理プログラム及びデータ管理方法
TWI678129B (zh) * 2018-05-25 2019-11-21 香港商艾思科有限公司 發光儲存裝置及發光控制方法
JP2019211861A (ja) * 2018-05-31 2019-12-12 東芝メモリ株式会社 メモリシステム
US11094148B2 (en) 2018-06-18 2021-08-17 Micron Technology, Inc. Downloading system memory data in response to event detection
US10963413B2 (en) * 2018-11-02 2021-03-30 Wipro Limited Method and system for transmitting data using small computer system interface (SCSI)
US11782605B2 (en) * 2018-11-29 2023-10-10 Micron Technology, Inc. Wear leveling for non-volatile memory using data write counters
CN111324307B (zh) * 2020-02-13 2023-02-21 西安微电子技术研究所 一种星载nand flash型固态存储器及分配存储空间的方法
US11507518B2 (en) * 2020-05-08 2022-11-22 Micron Technology, Inc. Logical-to-physical mapping using a flag to indicate whether a mapping entry points to [[for]] sequentially stored data

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090198902A1 (en) * 2008-02-04 2009-08-06 Apple Inc. Memory mapping techniques

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4972338A (en) 1985-06-13 1990-11-20 Intel Corporation Memory management for microprocessor system
GB2291990A (en) * 1995-09-27 1996-02-07 Memory Corp Plc Flash-memory management system
JP4328495B2 (ja) * 2002-05-23 2009-09-09 エルピーダメモリ株式会社 半導体メモリ装置
EP1843358B1 (en) * 2002-10-02 2010-06-16 Panasonic Corporation Control method of a non-volatile memory apparatus
US8041878B2 (en) 2003-03-19 2011-10-18 Samsung Electronics Co., Ltd. Flash file system
KR100532456B1 (ko) * 2003-07-30 2005-11-30 삼성전자주식회사 메모리 컨트롤러 및 상기 메모리 컨트롤러를 구비하는반도체 장치
JP2005209058A (ja) * 2004-01-26 2005-08-04 Megawin Technology Co Ltd フラッシュメモリの読み書きの制御方法
JP4615896B2 (ja) * 2004-05-25 2011-01-19 富士通セミコンダクター株式会社 半導体記憶装置および該半導体記憶装置の制御方法
JP4253272B2 (ja) * 2004-05-27 2009-04-08 株式会社東芝 メモリカード、半導体装置、及び半導体メモリの制御方法
US7627733B2 (en) * 2005-08-03 2009-12-01 Sandisk Corporation Method and system for dual mode access for storage devices
JP2007095222A (ja) * 2005-09-30 2007-04-12 Eastman Kodak Co 半導体メモリ及びそのメモリコントローラ
US8041895B2 (en) 2008-01-28 2011-10-18 Spansion Llc Translation table coherency mecahanism using cache way and set index write buffers
JP2009211233A (ja) * 2008-03-01 2009-09-17 Toshiba Corp メモリシステム
JP4909963B2 (ja) * 2008-09-09 2012-04-04 株式会社東芝 統合メモリ管理装置

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090198902A1 (en) * 2008-02-04 2009-08-06 Apple Inc. Memory mapping techniques

Also Published As

Publication number Publication date
CN102436353B (zh) 2014-08-13
US20120072644A1 (en) 2012-03-22
US8612721B2 (en) 2013-12-17
JP2012068863A (ja) 2012-04-05
TW201214117A (en) 2012-04-01
TWI459199B (zh) 2014-11-01
EP2434405A1 (en) 2012-03-28
JP5010723B2 (ja) 2012-08-29
CN102436353A (zh) 2012-05-02
KR20120031124A (ko) 2012-03-30

Similar Documents

Publication Publication Date Title
KR101336382B1 (ko) 반도체 메모리 제어 장치
US11216185B2 (en) Memory system and method of controlling memory system
CN112433956B (zh) 逻辑到物理表高速缓存中基于顺序写入的分区
JP6967986B2 (ja) メモリシステム
US9026764B2 (en) Memory system performing wear leveling based on deletion request
KR101265410B1 (ko) 반도체 메모리 장치
KR101117403B1 (ko) 메모리 시스템, 컨트롤러 및 메모리 시스템의 제어 방법
KR101277371B1 (ko) 반도체 메모리 장치
US9135181B2 (en) Management of cache memory in a flash cache architecture
US9891825B2 (en) Memory system of increasing and decreasing first user capacity that is smaller than a second physical capacity
KR20090117935A (ko) 메모리 시스템
JP2012514794A (ja) 記憶装置におけるマッピングアドレステーブルの維持
KR20090094196A (ko) 메모리 시스템
US20200089567A1 (en) Memory system
KR20100115090A (ko) 버퍼를 고려한 가비지 컬렉션 기법
CN112463647A (zh) 使用散列来减小前向映射表的大小
JP4510107B2 (ja) メモリシステム
Collector et al. Applications

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20161103

Year of fee payment: 4

LAPS Lapse due to unpaid annual fee