KR101067457B1 - 메모리 시스템 - Google Patents

메모리 시스템 Download PDF

Info

Publication number
KR101067457B1
KR101067457B1 KR1020090016984A KR20090016984A KR101067457B1 KR 101067457 B1 KR101067457 B1 KR 101067457B1 KR 1020090016984 A KR1020090016984 A KR 1020090016984A KR 20090016984 A KR20090016984 A KR 20090016984A KR 101067457 B1 KR101067457 B1 KR 101067457B1
Authority
KR
South Korea
Prior art keywords
data
storage area
logical
management unit
track
Prior art date
Application number
KR1020090016984A
Other languages
English (en)
Other versions
KR20090094196A (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
Priority claimed from JP2008051475A external-priority patent/JP4592774B2/ja
Priority claimed from JP2008063404A external-priority patent/JP4510107B2/ja
Application filed by 가부시끼가이샤 도시바 filed Critical 가부시끼가이샤 도시바
Publication of KR20090094196A publication Critical patent/KR20090094196A/ko
Application granted granted Critical
Publication of KR101067457B1 publication Critical patent/KR101067457B1/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
    • 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
    • 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
    • G11C16/10Programming or data input circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • 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
    • 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/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • 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

Abstract

제3 기억 영역의 입력 버퍼로서 기능하는 제1 입력 버퍼와, 제3 기억 영역의 입력 버퍼로서 기능하고, 갱신 빈도가 높은 데이터를 분리 유지하기 위한 제2 입력 버퍼를 포함하고, 제1 또는 제2 기억 영역에 기록된 복수의 데이터 논리 블록 단위로 제1 입력 버퍼에 방출하여, 제1 입력 버퍼에 기록된 복수의 데이터를 논리 블록 단위로 제3 기억 영역으로 이동시킨다.

Description

메모리 시스템{MEMORY SYSTEM}
본 출원은 2008년 3월 1일에 출원된 일본 특허 출원 번호 2008-51475 및 2008년 3월 12일에 출원된 일본국 특허 출원 번호 2008-63404의 우선권 이익을 갖고, 그 일본 특허 출원의 모든 내용은 본 출원에서 원용된다.
본 발명은 불휘발성 반도체 메모리를 구비한 메모리 시스템에 관한 것이다.
SSD 내에는 복수의 플래시 메모리 칩, 호스트 장치로부터의 요구에 따라 각 플래시 메모리 칩의 리드/라이트 제어를 행하는 컨트롤러, 각 플래시 메모리 칩과 호스트 장치 사이에서 데이터 전송을 행하기 위한 버퍼 메모리, 전원 회로, 호스트 장치에 대한 접속 인터페이스 등을 포함하고 있다(예를 들어, 특허문헌 1).
불휘발성 반도체 메모리에는, NAND형 플래시 메모리와 같이, 데이터를 기억시키는 경우에 블록 단위로 한번 데이터를 소거하고 나서 그 후에 기록을 하는 것, 페이지 단위로 기록/독출하는 것 등, 소거/기록/독출 단위가 고정되어 있는 것이 있다.
한편, 퍼스널 컴퓨터 등의 호스트 기기가 하드 디스크를 비롯한 2차 기억 장치에 대하여 데이터를 기록/독출하는 단위를 섹터라 부른다. 섹터는 반도체 기억 장치의 소거/기록/독출 단위와는 독립적으로 정해진다.
예를 들어, 불휘발성 반도체 메모리의 블록의 크기(블록 사이즈)는 512 kB, 페이지의 크기(페이지 사이즈)는 4 kB인 데 비해, 호스트 기기의 섹터의 크기(섹터 사이즈)는 512 B와 같이 정해져 있다.
이와 같이, 불휘발성 반도체 메모리의 소거/기록/독출 단위는 호스트 기기의 기록/독출 단위보다 큰 경우가 있다.
따라서, 불휘발성 반도체 메모리를 사용하여 하드 디스크와 같은 퍼스널 컴퓨터의 2차 기억 장치를 구성하는 경우, 호스트 기기로서의 퍼스널 컴퓨터로부터의 작은 사이즈의 데이터는 불휘발성 반도체 메모리의 블록 사이즈, 페이지 사이즈에 적합하게 기록되어야 한다.
또, 퍼스널 컴퓨터 등의 호스트 기기가 기록하는 데이터는 시간적 국소성 및 영역적 국소성을 겸비하고 있다(예를 들어, 비특허문헌 1 참조). 그 때문에, 데이터를 기록할 때 외부로부터 지정된 어드레스에 그대로 기록해 나가면, 특정 영역에 단시간에 재기록하여, 즉 소거 처리가 집중되어 소거 횟수의 편중이 커진다. 그 때문에, NAND형 플래시 메모리에서는, 데이터 갱신 개소를 균등하게 분산시키는 웨어 레벨링(wear leveling)이라 불리는 처리가 행해진다.
웨어 레벨링 처리에서는, 예를 들어 호스트 기기로부터 지정되는 논리 어드레스를, 데이터 갱신 개소가 균등하게 분산된 불휘발성 반도체 메모리의 물리 어드레스로 어드레스 변환한다.
NAND형 플래시 메모리를 사용하여 대용량의 2차 기억 장치를 구성하는 경우 에 있어서는, 상기 어드레스 변환 시에, 데이터 관리 단위가 작은 사이즈(예를 들어, 페이지 사이즈)이면, 관리 테이블의 사이즈가 커져 2차 기억 장치의 컨트롤러의 주기억 메모리에 수용되지 않게 되어, 어드레스 변환을 고속으로 할 수 없게 된다는 문제가 있다. 이와 같이, 2차 기억 장치로서의 NAND형 플래시 메모리의 대용량화에 따라 관리 테이블의 사이즈는 필연적으로 커지기 때문에, 관리 테이블을 가능한 한 소용량으로 하기 위한 수법이 요구되고 있다.
또, 전술한 바와 같이, 데이터의 소거 단위(블록)와 데이터의 관리 단위가 다른 경우, 플래시 메모리의 재기록이 진행되면, 무효(최신이 아님) 데이터에 의해 블록은 빈 곳이 생기게 된다. 이러한 빈 곳이 생긴 블록이 증가하면, 실질적으로 사용 가능한 블록이 적어지고, 플래시 메모리의 기억 영역을 유효 이용할 수 없기 때문에, 유효한 최신 데이터를 수집하여 다른 블록에 다시 기록하는 컴팩션(compaction)이라 불리는 처리가 행해진다. 이 컴팩션 처리에서는, 그 수법에 따라서 처리 시간이 길어지기 때문에, 컴팩션의 처리 시간을 짧게 하기 위한 수법이 요구되고 있다.
또, 플래시 메모리의 셀의 열화는, 호스트 기기측으로부터의 기록 데이터량에 대한 필요한 플래시 메모리의 블록의 소거량이 중요한 요인이 된다. 이러한 호스트 기기로부터의 기록 데이터량에 대한 블록의 소거량을 기록 효율이라 부르며, 값이 작을수록 좋다. 통상 NAND형 플래시 메모리에서는 블록의 소거 처리 및 기록 처리에 많은 시간을 소비하므로, 기록 효율이 나쁘다는 것은, 호스트 기기로부터의 데이터 기록량에 비해 블록의 소거나 소거한 블록으로의 기록이 많은 것을 나타내 고, 플래시 메모리의 속도 성능을 나쁘게 하는 것을 동시에 의미한다. 이와 같이, 플래시 메모리에 대한 기록 데이터량을 블록의 소거량에 가깝게 하여 기록 효율을 좋게 하기 위한 수법도 요구되고 있다.
이러한 문제를 개선하기 위해, 데이터를 보존한 블록(데이터 블록)에 로그 블록이라 불리는 별도의 블록을 대응시켜 설치하는 기술이 알려져 있다(예를 들어, 특허문헌 2 참조). 이 기술은 데이터를 로그 블록의 빈 페이지에 기록하고, 로그 블록의 빈 페이지가 없어졌을 때 또는 로그 블록 영역이 부족해졌을 때, 로그 블록에 기억된 데이터를 데이터 블록에 반영(머지 처리)하여, 기록 효율의 향상을 도모하는 것이다.
그러나, 이 기술의 문제점은, 데이터 블록과 로그 블록이 일대일 대응이 되므로, 동시에 갱신 가능한 블록수가 로그 블록수에 한정되는 것에 있다. 즉, 작은 사이즈의 데이터 기록이 다수의 블록에 대하여 행해지면, 로그 블록에 빈 페이지가 다수 있는 상황에서 머지 처리하게 되어, 결과적으로 기록 효율이 향상되지 않게 된다.
특허문헌 1 : 일본 특허 제3688835호 공보
비특허문헌 1 : David A. Patterson and John L. Hennessy, "Computer Organization and Design : The Hardware/Software Interface", Morgan Kaufmann Pub, 2004/8/31
특허문헌 2 : 일본 특허공개 제2002-366423호 공보
본 발명은 컴팩션의 처리 시간을 단축하는 것이 가능한 메모리 시스템을 제공하고자 한다.
본 발명은 기록 처리를 고속화하여 기록 효율을 향상시키는 것이 가능한 메모리 시스템을 제공하고자 한다.
본 발명의 한 형태에서는, 휘발성 반도체 메모리로 구성되는 캐쉬 메모리로서의 제1 기억 영역과, 페이지 단위로 독출 및 기록이 행해지고, 상기 페이지 단위의 2 이상의 자연수배의 크기인 블록 단위로 소거가 행해지는 불휘발성 반도체 메모리로 구성되는 제2 및 제3 기억 영역과, 제3 기억 영역의 입력 버퍼로서 기능하는 제1 입력 버퍼와, 상기 제3 기억 영역의 입력 버퍼로서 기능하고, 갱신 빈도가 높은 데이터를 분리 유지하기 위한 제2 입력 버퍼와, 상기 불휘발성 반도체 메모리의 기억 영역을, 1 이상의 상기 블록에 대응된 논리 블록 단위로 상기 제2 및 제3 기억 영역에 할당하는 컨트롤러를 포함하고,
상기 컨트롤러는,
상기 제1 기억 영역에 기록된 섹터 단위의 복수의 데이터를 제1 관리 단위의 데이터로서 상기 제2 기억 영역에 방출하는 제1 처리와, 상기 제1 기억 영역에 기록된 복수의 데이터를 상기 제1 관리 단위의 2 이상의 자연수배의 크기인 제2 관리 단위의 데이터로서 제2 관리 단위의 데이터 단위로 상기 제2 입력 버퍼에 방출하는 제2 처리와, 상기 제1 기억 영역에 기록된 복수의 데이터를 상기 제2 관리 단위의 데이터로서 상기 논리 블록 단위로 상기 제1 입력 버퍼에 방출하는 제3 처리와, 상기 제2 기억 영역에 기록된 복수의 데이터를 상기 논리 블록 단위로 상기 제1 입력 버퍼에 방출하는 제4 처리와, 상기 제1 입력 버퍼에 기록된 복수의 데이터를 상기 논리 블록 단위로 상기 제3 기억 영역으로 이동시키는 제5 처리와, 상기 제2 입력 버퍼에 기록된 복수의 데이터를 상기 제3 기억 영역으로 이동시키는 제6 처리를 실행하는 것을 특징으로 한다.
본 발명의 한 형태에 의하면, 기록 처리를 고속화하여 기록 효율을 향상시키는 것이 가능한 메모리 시스템을 제공할 수 있다.
또, 본 발명의 한 형태에서는, 휘발성 반도체 메모리로 구성되는 캐쉬 메모리로서의 제1 기억 영역과, 페이지 단위로 독출 및 기록이 행해지고, 상기 페이지 단위의 2 이상의 자연수배의 크기인 블록 단위로 소거가 행해지는 불휘발성 반도체 메모리로 구성되는 제2 및 제3 기억 영역과, 상기 불휘발성 반도체 메모리의 기억 영역을, 1 이상의 상기 블록에 대응된 논리 블록 단위로 상기 제2 및 제3 기억 영역에 할당하는 컨트롤러를 포함하고,
상기 컨트롤러는,
상기 제1 기억 영역에 기록된 섹터 단위의 복수의 데이터를 제1 관리 단위의 데이터로서 상기 제2 기억 영역에 방출하는 제1 처리와, 상기 제1 기억 영역에 기록된 복수의 데이터를 상기 제1 관리 단위의 2 이상의 자연수배의 크기인 제2 관리 단위의 데이터로서 제3 기억 영역에 방출하는 제2 처리와, 상기 제2 기억 영역에 기억된 상기 제1 관리 단위의 유효 데이터를 복수 선택하여 새로운 논리 블록 내에 다시 기록하는 제3 처리와, 제3 처리를 실행하기 전에, 상기 제2 기억 영역에 기록된 복수의 데이터를 상기 논리 블록 단위로 상기 제3 기억 영역에 방출하는 제4 처리를 실행하는 것을 특징으로 한다.
본 발명의 한 형태에 의하면, 컴팩션의 처리 시간을 단축하는 것이 가능한 메모리 시스템을 제공할 수 있다.
본 발명은 컴팩션의 처리 시간을 단축하는 것이 가능한 메모리 시스템을 제공한다.
본 발명은 기록 처리를 고속화하여 기록 효율을 향상시키는 것이 가능한 메모리 시스템을 제공한다.
이하에 첨부 도면을 참조하여, 본 발명에 따른 메모리 시스템의 최선의 실시형태를 상세히 설명한다.
(실시형태)
이하, 본 발명의 실시형태에 관해 도면을 참조하여 설명한다. 이하의 설명에서, 동일한 기능 및 구성을 갖는 요소에는 동일한 부호를 붙이고, 중복 설명은 필요한 경우에만 한다.
우선, 본 명세서에서 사용하는 용어에 관해 정의해 둔다.
ㆍ물리 페이지 : NAND 메모리 칩 내부에서 일괄적으로 기록/독출이 가능한 단위. 물리 페이지 사이즈는, 예를 들어 4 kB. 단, 주데이터(사용자 데이터 등)에 대하여 SSD 내에서 부가되는 에러 정정 부호 등의 용장 비트는 포함하지 않는 것으로 한다. 통상 4 kB+용장 비트(예를 들어 수십 B)가 동시에 메모리 셀에 기록되는 단위가 되지만, 설명의 편의상 상기와 같이 정의한다.
ㆍ논리 페이지 : SSD 내에서 설정되는 기록/독출 단위이며, 1 이상의 물리 페이지에 대응되어 있다. 논리 페이지 사이즈는, 예를 들어 8비트 노멀 모드에서는 4 kB, 32비트 배속ㆍ모드에서는 32 kB. 단, 용장 비트는 포함하지 않는 것으로 한다.
ㆍ물리 블록 : NAND 메모리 칩 내부에서 독립적으로 소거 가능한 최소 단위를 말하며, 복수의 물리 페이지로 구성된다. 물리 블록 사이즈는, 예를 들어 512 kB. 단, 주데이터에 대하여 SSD 내에서 부가되는 에러 정정 부호 등의 용장 비트는 포함하지 않는 것으로 한다. 통상, 512 kB+용장 비트(예를 들어 수십 kB)가 동시에 소거되는 단위가 되지만, 설명의 편의상 상기와 같이 정의한다.
ㆍ논리 블록 : SSD 내에서 설정되는 소거 단위이며, 1 이상의 물리 블록에 대응되어 있다. 논리 블록 사이즈는, 예를 들어 8비트 노멀 모드에서는 512 kB, 32비트 배속 모드에서는 4 MB. 단, 용장 비트는 포함하지 않는 것으로 한다.
ㆍ섹터 : 호스트로부터의 최소 액세스 단위. 섹터 사이즈는 예를 들어 512B.
ㆍ클러스터 : SSD 내에서 「작은 데이터」를 관리하는 제1 관리 단위. 클러스터 사이즈는 섹터 사이즈 이상이며, 클러스터 사이즈의 2 이상의 자연수배가 논리 페이지 사이즈가 되도록 정해진다.
ㆍ트랙 : SSD 내에서 「큰 데이터」를 관리하는 제2 관리 단위. 클러스터 사이즈의 2 이상의 자연수배가 트랙 사이즈가 되도록, 그리고 트랙 사이즈의 2 이상의 자연수배가 논리 블록 사이즈가 되도록 정해진다.
ㆍ프리 블록(FB) : 용도 미할당의 NAND형 플래시 메모리상의 논리 블록. 용도 할당 시 소거하고 나서 사용한다.
ㆍ배드 블록(BB) : NAND형 플래시 메모리 상의, 오류가 많은 등 기억 영역으로서 사용할 수 없는 물리 블록. 예를 들어, 소거 동작이 정상적으로 종료하지 않은 물리 블록이 배드 블록(BB)으로서 등록된다.
ㆍ기록 효율 : 소정 기간내에서의 호스트로부터 기록한 데이터량에 대한 논리 블록의 소거량의 통계치. 작을수록 NAND형 플래시 메모리의 소모도가 작다.
ㆍ유효 클러스터 : 논리 어드레스에 대응하는 최신 데이터를 유지하고 있는 클러스터.
ㆍ무효 클러스터 : 동일 논리 어드레스의 클러스터가 다른 기억 영역에 기록되어, 참조되는 것이 없어진 최신이 아닌 데이터를 유지하고 있는 클러스터.
ㆍ유효 트랙 : 논리 어드레스에 대응하는 최신 데이터를 유지하고 있는 트랙.
ㆍ무효 트랙 : 동일 논리 어드레스의 트랙이 다른 기억 영역에 기록되어, 참조되는 것이 없어진 최신이 아닌 데이터를 유지하고 있는 트랙.
ㆍ컴팩션 : 관리 대상 내의 논리 블록으로부터 유효 클러스터나 유효 트랙만을 추출하여 새로운 논리 블록에 다시 기록하는 것.
[제1 실시형태]
도 1은 SSD(Solid State Drive; 100)의 구성예를 나타내는 블록도이다. SSD(100)는, ATA 인터페이스(ATA I/F; 2) 등의 메모리 접속 인터페이스를 통해 퍼스널 컴퓨터 또는 CPU 코어 등의 호스트 장치(1)와 접속되어, 호스트 장치(1)의 외부 메모리로서 기능한다. 또, SSD(100)는, RS232C 인터페이스(RS232C I/F) 등의 통신 인터페이스(3)를 통해, 디버그용/제조 검사용 기기(200)와의 사이에서 데이터를 송수신할 수 있다. SSD(100)는, 불휘발성 반도체 메모리로서의 NAND형 플래시 메모리(이하, NAND 메모리라 한다; 10)와, 컨트롤러로서의 드라이브 제어 회로(4)와, 휘발성 반도체 메모리로서의 DRAM(20)과, 전원 회로(5)와, 상태 표시용 LED(6)와, 드라이브 내부의 온도를 검출하는 온도 센서(7)와, 퓨즈(8)를 포함한다.
전원 회로(5)는, 호스트 장치(1)측의 전원 회로에서 공급되는 외부 직류 전원으로부터 복수의 상이한 내부 직류 전원 전압을 생성하고, 이들 내부 직류 전원 전압을 SSD(100) 내의 각 회로에 공급한다. 또, 전원 회로(5)는, 외부 전원의 기동을 검지하고, 파워온 리셋 신호를 생성하여 드라이브 제어 회로(4)에 공급한다. 퓨즈(8)는, 호스트 장치(1) 측의 전원 회로와 SSD(100) 내부의 전원 회로(5) 사이에 설치되어 있다. 외부 전원 회로로부터 과전류가 공급된 경우 퓨즈(8)가 절단되어 내부 회로의 오동작을 방지한다.
NAND 메모리(10)는, 이 경우 4병렬 동작을 행하는 4개의 병렬 동작 요소(10a∼10d)를 갖고, 1개의 병렬 동작 요소는 2개의 NAND 메모리 패키지를 갖는다. 각 NAND 메모리 패키지는 적층된 복수의 NAND 메모리 칩(예를 들어 1 칩=2 GB)으로 구 성되어 있다. 도 1의 경우, 각 NAND 메모리 패키지는 적층된 4장의 NAND 메모리 칩으로 구성되어 있고, NAND 메모리(10)는 64 GB의 용량을 갖는다. 각 NAND 메모리 패키지가 적층된 8장의 NAND 메모리 칩으로 구성되어 있는 경우, NAND 메모리(10)는 128 GB의 용량을 갖게 된다.
DRAM(20)은 호스트 장치(1)와 NAND 메모리(10) 사이에서의 데이터 전송용 캐쉬 및 작업 영역용 메모리로서 기능한다. 또, DRAM(20) 대신 FeRAM(Ferroelectric Random Access Memory), PRAM(Phase-change Random Access Memory), MRAM(Magnetoresistive Random Access Memory)을 사용해도 된다. 드라이브 제어 회로(4)는, 호스트 장치(1)와 NAND 메모리(10) 사이에서 DRAM(20)을 통해 데이터 전송을 제어하고, SSD(100) 내의 각 구성 요소를 제어한다. 또, 드라이브 제어 회로(4)는, 상태 표시용 LED(6)에 스테이터스 표시용 신호를 공급하고, 전원 회로(5)로부터의 파워온 리셋 신호를 받아, 리셋 신호 및 클록 신호를 자(自)회로 내 및 SSD(100) 내의 각 부에 공급하는 기능도 갖고 있다.
각 NAND 메모리 칩은 데이터 소거 단위인 물리 블록을 복수 배열하여 구성되어 있다. 도 2의 (a)는 NAND 메모리 칩에 포함되는 1개의 물리 블록의 구성예를 나타내는 회로도이다. 각 물리 블록은 X방향을 따라 순서대로 배열된 (p+1)개의 NAND 스트링을 포함한다(p는 0 이상의 정수). (p+1)개의 NAND 스트링에 각각 포함되는 선택 트랜지스터(ST1)는, 드레인이 비트선(BL0∼BLp)에 접속되고, 게이트가 선택 게이트선(SGD)에 공통 접속되어 있다. 또, 선택 트랜지스터(ST2)는, 소스가 소스선(SL)에 공통 접속되고, 게이트가 선택 게이트선(SGS)에 공통 접속되어 있다.
각 메모리 셀 트랜지스터(MT)는 반도체 기판 상에 형성된 적층 게이트 구조를 포함한 MOSFET(Metal Oxide Semiconductor Field Effect Transistor)로 구성된다. 적층 게이트 구조는, 반도체 기판 상에 게이트 절연막을 개재하여 형성된 전하 축적층(부유 게이트 전극) 및 전하 축적층 상에 게이트간 절연막을 개재하여 형성된 제어 게이트 전극을 포함한다. 메모리 셀 트랜지스터(MT)는 부유 게이트 전극에 축적되는 전자의 수에 따라 임계값 전압이 변하고, 이 임계값 전압의 차이에 따라 데이터를 기억한다. 메모리 셀 트랜지스터(MT)는 1 비트를 기억하도록 구성되어 있어도 되고, 다치 데이터(2비트 이상의 데이터)를 기억하도록 구성되어 있어도 된다.
또, 메모리 셀 트랜지스터(MT)는, 부유 게이트 전극을 갖는 구조에 한정되지 않고, MONOS(Metal-Oxide-Nitride-Oxide-Silicon)형 등, 전하 축적층으로서의 질화막 계면에 전자를 트랩시킴으로써 임계값 조정 가능한 구조이어도 된다. MONOS 구조의 메모리 셀 트랜지스터(MT)도 마찬가지로, 1 비트를 기억하도록 구성되어 있어도 되고, 다치 데이터(2비트 이상의 데이터)를 기억하도록 구성되어 있어도 된다.
각 NAND 스트링에서 (q+1)개의 메모리 셀 트랜지스터(MT)는, 선택 트랜지스터(ST1)의 소스와 선택 트랜지스터(ST2)의 드레인 사이에, 각각의 전류 경로가 직렬 접속되도록 배치되어 있다. 즉, 복수의 메모리 셀 트랜지스터(MT)는 인접하는 것끼리 확산 영역(소스 영역 또는 드레인 영역)을 공유하는 형태로 Y방향으로 직렬 접속된다.
그리고, 가장 드레인측에 위치하는 메모리 셀 트랜지스터(MT)부터 순서대로, 제어 게이트 전극이 워드선(WL0∼WLq)에 각각 접속되어 있다. 따라서, 워드선(WL0)에 접속된 메모리 셀 트랜지스터(MT)의 드레인은 선택 트랜지스터(ST1)의 소스에 접속되고, 워드선(WLq)에 접속된 메모리 셀 트랜지스터(MT)의 소스는 선택 트랜지스터(ST2)의 드레인에 접속되어 있다.
워드선(WL0∼WLq)은 물리 블록 내의 NAND 스트링 사이에서 메모리 셀 트랜지스터(MT)의 제어 게이트 전극을 공통으로 접속하고 있다. 즉, 블록 내에서 동일한 행에 있는 메모리 셀 트랜지스터(MT)의 제어 게이트 전극은 동일한 워드선(WL)에 접속된다. 이 동일한 워드선(WL)에 접속되는 (p+1)개의 메모리 셀 트랜지스터(MT)는 1페이지(물리 페이지)로서 취급되고, 이 물리 페이지마다 데이터의 기록 및 데이터의 독출이 행해진다.
또, 비트선(BL0∼BLp)은 블록 사이에서 선택 트랜지스터(ST1)의 드레인을 공통으로 접속하고 있다. 즉, 복수의 블록 내에서 동일한 열에 있는 NAND 스트링은 동일한 비트선(BL)에 접속된다.
도 2의 (b)는 예를 들어 1개의 메모리 셀 트랜지스터(MT)에 2비트를 기억하는 4치 데이터 기억 방식에서의 임계값 분포를 나타내는 모식도이다. 4치 데이터 기억 방식에서는, 상위 페이지 데이터 "x"와 하위 페이지 데이터 "y"로 정의되는 4치 데이터 "xy" 중 어느 하나를 메모리 셀 트랜지스터(MT)에 유지할 수 있다.
이 4치 데이터 "xy"는, 메모리 셀 트랜지스터(MT)의 임계값 전압 순으로, 예를 들어 데이터 "11", "01", "00", "10"이 할당된다. 데이터 "11"은 메모리 셀 트랜지스터(MT)의 임계값 전압이 마이너스인 소거 상태이다.
하위 페이지 기록 동작에서는, 데이터 "11"(소거 상태)의 메모리 셀 트랜지스터(MT)에 대해 선택적으로, 하위 비트 데이터 "y"의 기록에 의해 데이터 "10"이 기록된다. 상위 페이지 기록전의 데이터 "10"의 임계값 분포는, 상위 페이지 기록후의 데이터 "01"과 데이터 "00"의 임계값 분포의 중간 정도에 위치하고 있고, 상위 페이지 기록후의 임계값 분포보다 넓어도 된다. 상위 페이지 기록 동작에서는, 데이터 "11"의 메모리 셀과 데이터 "10"의 메모리 셀에 대해, 각각 선택적으로 상위 비트 데이터 "x"가 기록되고, 데이터 "01" 및 데이터 "00"이 기록된다.
도 3은 드라이브 제어 회로(4)의 하드웨어적인 내부 구성예를 나타내는 블록도이다. 드라이브 제어 회로(4)는 데이터 액세스용 버스(101), 제1 회로 제어용 버스(102) 및 제2 회로 제어용 버스(103)를 포함한다. 제1 회로 제어용 버스(102)에는, 드라이브 제어 회로(4) 전체를 제어하는 프로세서(104)가 접속되어 있다. 제1 회로 제어용 버스(102)에는, NAND 메모리(10)에 기억된 각 관리 프로그램(FW : 펌웨어)를 부팅하는 부팅용 프로그램이 저장된 부팅 ROM(105)이 ROM 컨트롤러(106)를 통해 접속되어 있다. 또, 제1 회로 제어용 버스(102)에는, 도 1에 나타낸 전원 회로(5)로부터의 파워온 리셋 신호를 수신하여, 리셋 신호 및 클록 신호를 각 부에 공급하는 클록 컨트롤러(107)가 접속되어 있다.
제2 회로 제어용 버스(103)는 제1 회로 제어용 버스(102)에 접속되어 있다. 제2 회로 제어용 버스(103)에는, 도 1에 나타낸 온도 센서(7)로부터의 데이터를 수신하기 위한 I2C 회로(108), 상태 표시용 LED(6)에 스테이터스 표시용 신호를 공급 하는 병렬 IO(PIO) 회로(109), RS232C I/F(3)를 제어하는 직렬 IO(SIO) 회로(110)가 접속되어 있다.
ATA 인터페이스 컨트롤러(ATA 컨트롤러; 111), 제1 ECC(Error Checking and Correction) 회로(112), NAND 컨트롤러(113) 및 DRAM 컨트롤러(114)는 데이터 액세스용 버스(101)와 제1 회로 제어용 버스(102) 양쪽에 접속되어 있다. ATA 컨트롤러(111)는 ATA 인터페이스(2)를 통해 호스트 장치(1)와의 사이에서 데이터를 송수신한다. 데이터 액세스용 버스(101)에는, 데이터 작업 영역 및 펌웨어 전개 영역으로서 사용되는 SRAM(115)이 SRAM 컨트롤러(116)를 통해 접속되어 있다. NAND 메모리(10)에 기억되어 있는 펌웨어는 기동시 부팅 ROM(105)에 기억된 부팅용 프로그램에 의해 SRAM(115)에 전송된다.
NAND 컨트롤러(113)는, NAND 메모리(10)와의 인터페이스 처리를 행하는 NAND I/F(117), 제2 ECC 회로(118) 및 NAND 메모리(10)-DRAM(20) 사이의 액세스 제어를 행하는 DMA 전송 제어용 DMA 컨트롤러(119)를 포함한다. 제2 ECC 회로(118)는 제2 정정 부호를 인코드하고, 또 제1 오류 정정 부호를 인코드 및 디코드한다. 제1 ECC 회로(112)는 제2 에러 정정 부호를 디코드한다. 제1 에러 정정 부호, 제2 에러 정정 부호는, 예를 들어 해밍 부호, BCH(Bose Chaudhuri Hocqenghem) 부호, RS(Reed Solomon) 부호 또는 LDPC(Low Density Parity Check) 부호 등이며, 제2 에러 정정 부호의 정정 능력은 제1 오류 정정 부호의 정정 능력보다 높은 것으로 한다.
도 1 및 도 3에 나타낸 바와 같이, NAND 메모리(10)에서는 4개의 병렬 동작 요소(10a∼10d)가 각 8비트의 4채널(4ch)을 통해, 드라이브 제어 회로(4) 내부의 NAND 컨트롤러(112)에 병렬 접속되어 있다. 4개의 병렬 동작 요소(10a∼10d)를 단독 동작시킬지, 병렬 동작시킬지, NAND 메모리 칩이 구비하는 배속 모드(Multi Page Program/Multi Page Read/Multi Block Erase)를 사용하는지의 여부의 조합에 의해, 하기 3종류의 액세스 모드가 제공된다.
(1) 8비트 노멀 모드
1ch만 동작시키고 8비트 단위로 데이터를 전송하는 모드이다. 물리 페이지 사이즈(4 kB)로 기록/독출이 행해진다. 또, 물리 블록 사이즈(512 kB)로 소거가 행해진다. 1개의 물리 블록에 대하여 1개의 논리 블록이 대응되고, 논리 블록 사이즈는 512 kB가 된다.
(2) 32비트 노멀 모드
4ch 병렬로 동작시키고 32비트 단위로 데이터를 전송하는 모드이다. 물리 페이지 사이즈×4(16 kB)로 기록/독출이 행해진다. 또, 물리 블록 사이즈×4(2 MB)로 소거가 행해진다. 4개의 물리 블록에 대하여 1개의 논리 블록이 대응되고, 논리 블록 사이즈는 2 MB가 된다.
(3) 32비트 배속 모드
4ch 병렬로 동작시키고, NAND 메모리 칩의 배속 모드를 이용하여 기록/독출을 행하는 모드이다. 물리 페이지 사이즈×4×2(32 kB)로 기록/독출이 행해진다. 또, 물리 블록 사이즈×4×2(4 MB)로 소거가 행해진다. 8개의 물리 블록에 대하여 1개의 논리 블록이 대응되고, 논리 블록 사이즈는 4 MB가 된다.
4ch 병렬 동작하는 32비트 노멀 모드 또는 32비트 배속 모드에서는, 병렬 동 작하는 4 또는 8물리 블록이 NAND 메모리(10)로서의 소거 단위가 되고, 병렬 동작하는 4 또는 8물리 페이지가 NAND 메모리(10)로서의 기록 단위 및 독출 단위가 된다. 이하의 동작에서는 기본적으로 32비트 배속 모드를 사용하고, 예를 들어 1 논리 블록=4 MB=2i 트랙=2j 페이지=2k 클러스터 =2l 섹터로서 설명한다(i, j, k, l은 자연수이고, i<j<k<l의 관계가 성립한다).
32비트 배속 모드로 액세스되는 논리 블록은 4 MB 단위이며, 8개(2×4ch)의 물리 블록(1 물리 블록=512 kB)이 대응되어 있다. 물리 블록 단위로 관리되는 배드 블록(BB)이 발생하면 그 배드 블록(BB)은 사용할 수 없으므로, 그와 같은 경우에는 논리 블록에 대응된 8개의 물리 블록의 조합이 배드 블록(BB)을 포함하지 않도록 변경된다.
도 4는 프로세서(104)에 의해 실현되는 펌웨어의 기능 구성예를 나타내는 블록도이다. 프로세서(104)에 의해 실현되는 펌웨어의 각 기능은, 데이터 관리부(120), ATA 커맨드 처리부(121), 보안 관리부(122), 부팅 로더(123), 초기화 관리부(124), 디버그 지원부(125)로 크게 분류된다.
데이터 관리부(120)는, NAND 컨트롤러(113), 제1 ECC 회로(112)를 통해, NAND 메모리(10)-DRAM(20) 간의 데이터 전송, NAND 메모리(10)에 관한 각종 기능을 제어한다. ATA 커맨드 처리부(121)는, ATA 컨트롤러(111) 및 DRAM 컨트롤러(114)를 통해, 데이터 관리부(120)와 협동하여 DRAM(20)-호스트 장치(1) 간의 데이터 전송 처리를 행한다. 보안 관리부(122)는 데이터 관리부(120) 및 ATA 커맨드 처리 부(121)와 협동하여 각종 보안 정보를 관리한다.
부팅 로더(123)는 파워온일 때 각 관리 프로그램(펌웨어)을 NAND 메모리(10)로부터 SRAM(120)에 로드한다. 초기화 관리부(124)는 드라이브 제어 회로(4) 내의 각 컨트롤러/회로를 초기화한다. 디버그 지원부(125)는 외부로부터 RS 232C 인터페이스를 통해 공급된 디버그용 데이터를 처리한다. 주로, 데이터 관리부(120), ATA 커맨드 처리부(121) 및 보안 관리부(122)는 SRAM(114)에 기억되는 각 관리 프로그램을 프로세서(104)가 실행함으로써 실현되는 기능부이다.
본 실시형태에서는, 주로 데이터 관리부(120)가 실현하는 기능에 관해 설명한다. 데이터 관리부(120)는, ATA 커맨드 처리부(121)가 기억 디바이스인 NAND 메모리(10)나 DRAM(20)에 대하여 요구하는 기능의 제공[호스트 장치로부터의 라이트(Write) 요구, 캐쉬 플러쉬(Cache Flush) 요구, 리드(Read) 요구 등의 각종 커맨드에 대한 응답]과, 어드레스 영역과 NAND 메모리(10)의 대응 관계의 관리 및 관리 정보의 보호와, DRAM(20) 및 NAND 메모리(10)를 이용한 고속이면서 효율이 좋은 데이터 독출/기록 기능의 제공, NAND 메모리(10)의 신뢰성의 확보 등을 수행한다.
도 5는 NAND 메모리(10) 및 DRAM(20) 내에 형성된 기능 블록을 나타내는 도면이다. 호스트(1)와 NAND 메모리(10) 사이에는, DRAM(20) 상에 구성된 라이트 캐쉬(WC; 21) 및 리드 캐쉬(RC; 22)가 개재되어 있다. WC(21)는 호스트 장치(1)로부터의 라이트 데이터를 일시 보존하고, RC(22)는 NAND 메모리(10)로부터의 리드 데이터를 일시 보존한다. NAND 메모리(10) 내의 논리 블록은, 기록시의 NAND 메모리(10)에 대한 소거량을 줄이기 위해, 데이터 관리부(120)에 의해 전단 스토리지 영역(FS : Front Storage; 12), 중단 스토리지 영역(IS : Intermediate Storage; 13) 및 메인 스토리지 영역(MS : Main Storage; 11)이라는 각 관리 영역으로 할당되어 있다. FS(12)는 WC(21)로부터의 데이터를 「작은 단위」인 클러스터 단위로 관리하는 것이며, 작은 데이터를 단기간 보존한다. IS(13)는 FS(12)에서 흘러넘친 데이터를 「작은 단위」인 클러스터 단위로 관리하는 것이며, 작은 데이터를 장기간 보존한다. MS(11)는, WC(21), FS(12), IS(13)로부터의 데이터를 「큰 단위」인 트랙 단위로 장기간 기억한다. 예를 들어, 기억 용량은 MS>IS, FS>WC의 관계가 된다.
작은 관리 단위를 NAND 메모리(10)의 기억 영역 모두에 적용하면, 후술하는 관리 테이블의 사이즈가 비대해져 DRAM(20)에 수용되지 않기 때문에, 작은 관리 단위로 관리하는 것은, 최근 기록된지 얼마 안된 데이터와, NAND 메모리(10)로의 기록 효율이 나쁜 작은 데이터만으로 하도록 NAND 메모리(10)의 각 스토리지를 구성하고 있다. 이와 같이 「작은 단위」와 「큰 단위」라는 2개의 데이터 관리 단위를 병용하는 기술이, 동출원인에 의한 국제 특허 출원 PCT2008/JP/073950에 개시되어 있다. 이 국제 특허 출원의 모든 내용은 본 출원에서 원용된다.
도 6은 WC(21)로부터 NAND 메모리(10)로의 기록 처리(WR 처리)에 관한 보다 상세한 기능 블록도를 나타내는 도면이다. FS(12)의 전단에는 WC(21)로부터의 데이터를 버퍼링하는 FS 입력 버퍼(FSIB; 12a)가 설치되어 있다. 또, MS(11)의 전단에는 WC(21), FS(12) 또는 IS(13)로부터의 데이터를 버퍼링하는 MS 입력 버퍼(MSIB; 11a)가 설치되어 있다. 또, MS(11)에는 트랙 전단 스토리지 영역(TFS; 11b)이 형성 되어 있다. TFS(11b)는 MSIB(11a)와 MS(11) 사이에 개재된 FIFO(First in First out) 구조를 갖는 버퍼이며, TFS(11b)에 기록된 데이터는 MSIB(11a)로부터 직접 MS(11)에 기록되는 데이터보다 갱신 빈도가 높은 데이터이다. MS(11), MSIB(11a), TFS(11b), FS(12), FSIB(12a) 및 IS(13)에는 NAND 메모리(10) 내의 각 논리 블록 중 어느 하나가 할당되어 있다.
다음으로, 도 5, 도 6의 각 구성 요소의 구체적인 기능 구성에 관해 상세히 설명한다. 호스트 장치(1)는 SSD(100)에 대하여 리드 또는 라이트할 때에는, ATA 인터페이스를 통해 논리 어드레스로서의 LBA(Logical Block Addressing)를 입력으로 한다. LBA는, 도 7에 나타내는 바와 같이, 섹터(사이즈 : 512B)에 대하여 0부터의 일련 번호를 붙인 논리 어드레스이다. 본 실시형태에서는, 도 5의 각 구성 요소인 WC(21), RC(22), FS(12), IS(13), MS(11)의 관리 단위로서, LBA의 하위 (l-k+1)비트로부터 상위 비트열로 구성되는 논리 클러스터 어드레스와, LBA의 하위 (l-i+1)비트로부터 상위 비트열로 구성되는 논리 트랙 어드레스를 정의한다. 1 클러스터=2(l-k) 섹터이고, 1 트랙=2(k-i) 클러스터이다.
ㆍ리드 캐쉬(RC; 22)
RC(22)에 관해 설명한다. RC(22)는, ATA 커맨드 처리부(121)로부터의 리드 요구에 대해, NAND 메모리(10)[FS(12), IS(13), MS(11)]로부터의 리드 데이터를 일시적으로 보존하기 위한 영역이다. RC(22)는, 본 실시형태에서는 예를 들어, m-라인, n-웨이(m은 2(k-i) 이상의 자연수, n은 2 이상의 자연수) 세트 어소시에이티브 방식(set associative)으로 관리되고, 1 엔트리에 1 클러스터분의 데이터를 유지할 수 있다. 논리 클러스터 어드레스의 LSB (k-i)비트로 라인이 결정된다. RC(22)는 풀 어소시에이티브 방식으로 관리되어도 되고, 단순한 FIFO 방식으로 관리되어도 된다.
ㆍ라이트 캐쉬(WC; 21)
WC(21)에 관해 설명한다. WC(21)는, ATA 커맨드 처리부(121)로부터의 라이트 요구에 대하여, 호스트 장치(1)로부터의 라이트 데이터를 일시적으로 보존하기 위한 영역이다. m-라인, n-웨이(m은 2(k-i) 이상의 자연수, n은 2 이상의 자연수) 세트 어소시에이티브 방식으로 관리되고, 1 엔트리에 1 클러스터분의 데이터를 유지할 수 있다. 논리 클러스터 어드레스의 LSB (k-i)비트로 라인이 결정된다. 예를 들어, 웨이1∼웨이n의 순서로 기록 가능한 웨이가 검색된다. 또, WC(21)에 등록되어 있는 트랙은 가장 오래전에 갱신된 순서를 알 수 있도록 후술하는 WC 트랙 관리 테이블(24)의 FIFO 구조에 의해 LRU(Least Recently Used)로 관리된다. WC(21)는 풀 어소시에이티브 방식으로 관리되어도 된다. 또, WC(21)는 RC(22)와 라인수, 웨이수가 서로 달라도 된다.
라이트 요구에 의해 기록된 데이터는 일단 WC(21) 상에 저장된다. WC(21)로부터 NAND 메모리(10)에 방출하는 데이터의 결정 방법은 이하의 룰에 따른다.
(i) 태그에 따라 결정된 라인의 기록 가능한 웨이가 최후의(본 실시형태에서는 n개째의) 빈 웨이였던 경우, 즉 최후의 빈 웨이가 사용되는 경우는, 그 라인에 등록된 트랙 중, LRU에 기초하여 가장 오래전에 갱신된 트랙을 방출하여 확정한다.
(ii) WC(21)에 등록되어 있는 상이한 트랙의 개수가 소정 개수를 초과한 경우, LRU 순으로 해당 트랙에 속하는 WC 중의 클러스터수가 소정 개수 미만인 트랙의 방출을 확정한다.
이상의 방침으로 방출하는 트랙을 결정한다. 그 때, 방출하는 것은 동일 트랙에 포함되는 모든 데이터이며, 방출되는 데이터량이 예를 들어 트랙 사이즈의 50%를 초과하면 MS(11)에, 초과하지 않으면 FS(12)에 방출한다.
또한 (i)의 조건으로 트랙 방출이 발생할 때, MS(11)에 방출하는 경우는, 방출되는 트랙수가 2i개(원래 2i개 이상일 때에는 2i+1개)가 될 때까지, WC(21) 내의 트랙 중 상기 방출되는 데이터량이 트랙 사이즈의 50%를 초과하는 조건을 만족하는 트랙을 상기 (i)의 방침으로 선택하여 방출 후보에 추가한다. 바꾸어 말하면, 방출되는 트랙이 2i개 미만인 경우, WC 중의 트랙의 오래된 것부터 2i개가 될 때까지, 2(k-i-1)개 이상 유효 클러스터를 갖는 트랙을 선택하여 방출 후보에 추가한다.
또, (i)의 조건으로 트랙 방출이 발생할 때, FS(12)에 방출하는 경우는, 방출되는 클러스터수가 2k개가 될 때까지 WC(21) 내의 트랙 중 LRU 순으로 상기 방출되는 데이터량이 트랙 사이즈의 50% 미만인 조건을 만족하는 트랙을 찾아 그 클러스터를 방출 후보에 추가한다. 바꾸어 말하면, WC 중의 트랙을 오래된 순으로 거슬러 올라가 2(k-i-1)개 미만의 유효 클러스터만 갖는 트랙으로부터 클러스터를 추출하 고, 유효 클러스터수가 2(k-i-1)개가 되면 이들 클러스터를 FSIB(12a)에 논리 블록 단위로 방출한다. 단, 2(k-i-1)개 발견되지 않은 경우는 FSIB(12a)에 논리 페이지 단위로 방출한다. FS(12)로의 방출을 논리 블록 단위로 할지, 논리 페이지 단위로 할지의 유효 클러스터수의 임계값은, 2(k-i-1)개라는 1 논리 블록분의 값으로 한정되는 것은 아니고, 1 논리 블록분보다 약간 적은 값이어도 된다.
또, ATA 커맨드 처리부(121)로부터의 캐쉬 플러쉬 요구에서는, WC(21)의 내용이 모두 상기와 동일한 조건[방출되는 데이터량이 트랙 사이즈의 50%를 초과하면 MS(11)에, 초과하지 않으면 FS(12)에]이며, FS(12) 또는 MS(11)에 대하여 방출된다.
ㆍ전단(前段) 스토리지 영역(FS; 12)
다음으로 FS(12)에 관해 설명한다. FS(12)는 클러스터 단위로 데이터가 관리되는 FIFO이다. FS(12)는, 이것을 통과하는 데이터는 후단의 IS(13)보다 갱신 빈도가 높다고 간주하기 위한 버퍼이다. 즉, FS(12)의 FIFO 구조에서는, FIFO를 통과중인 유효 클러스터(최신 클러스터)는 호스트로부터의 동일한 어드레스에 대한 재기록이 있었던 경우 무효화되기 때문에, FS(12)를 통과중인 클러스터는, FS(12)로부터 IS(13)나 MS(11)에 방출된 클러스터보다 갱신 빈도가 높다고 간주할 수 있다.
FS(12)를 설치함으로써, 후단의 IS(13)에서의 컴팩션 처리에 갱신 빈도가 높은 데이터가 섞이게 될 가능성을 줄인다. 무효화에 의해 오래된 클러스터를 유지하고 있던 논리 블록 자체가 갖는 유효 클러스터수가 0이 된 경우, 그 논리 블록은 개방되어 프리 블록(FB)에 할당된다. 또, 논리 블록이 무효화된 경우, 새로운 프리 블록(FB)을 취득하여 FS(12)에 할당한다.
WC(21)로부터 FS(12)에 대하여 클러스터 데이터의 이동이 발생하면, 그 클러스터는 FSIB(12a)에 할당된 논리 블록에 대하여 기록된다. FSIB(12a) 중에 모든 페이지의 기록이 완료된 블록이 존재하는 경우, 후술하는 CIB 처리에 의해 그러한 블록은 FSIB(12a)에서 FS(12)로 이동한다. 이 FSIB(12a)에서 FS(12)로의 이동 시에, FS(12)의 블록수가 FS(12)로서 허용되는 소정의 상한치를 초과하면, 가장 오래된 블록이 FS(12)로부터 IS(13) 또는 MS(11)에 방출되게 된다. 예를 들어, 트랙 내의 유효 클러스터의 비율이 50% 이상인 트랙은 MS(11)[TFS(11b)]로 기록되고, 유효 클러스터가 남은 블록은 IS(13)로 이동한다.
NAND 메모리(10) 내의 구성 요소간의 데이터 이동에는 이동(Move)과 카피(Copy) 2가지가 있다. 이동은 후술하는 관리 테이블의 포인터를 바꾸기만 하고, 실제 데이터의 재기록은 행하지 않는 방법이다. 카피는 한쪽 구성 요소에 저장되어 있는 데이터를 페이지 단위, 트랙 단위, 블록 단위로 다른쪽 구성 요소에 실제로 재기록하는 방법이다.
ㆍ중단(中段) 스토리지 영역(IS; 13)
다음으로 IS(13)에 관해 설명한다. IS(13)는 FS(12)와 마찬가지로 클러스터 단위로 데이터가 관리된다. 전술한 바와 같이, IS(13)에 저장된 데이터는 갱신 빈도가 낮은 데이터로 간주될 수 있다. FS(12)로부터 IS(13)에 대하여 논리 블록의 이동(Move), 즉 FS(12)로부터의 방출이 발생하면, 이전 FS(12)의 관리 대상이었던 방출 대상 논리 블록은 포인터를 바꿈으로써 IS(13)의 관리 대상 블록이 된다. 이 FS(12)로부터 IS(13)로의 논리 블록의 이동에 의해, IS(13)의 블록수가 IS(13)로서 허용되는 소정의 상한치를 초과하면, 즉 IS 내의 기록 가능한 프리 블록(FB)의 수가 임계값을 밑돌면, IS(13)로부터 MS(11)로의 데이터 방출 및 컴팩션 처리가 실행되어, IS(13)의 블록수는 규정치로 되돌아간다.
IS(13)에서는, 트랙 내의 유효 클러스터수를 사용하여 이하와 같은 방출 처리 및 컴팩션 처리를 실행한다.
ㆍ트랙을 트랙 내의 유효 클러스터수×유효 클러스터 계수[트랙이 MS(11) 내에서 무효 트랙이 존재하는 논리 블록에 존재하는지의 여부에 따라 가중되는 수이며, 존재하는 쪽이 존재하지 않는 경우보다 수가 크다] 순으로 소트하여, 그 곱셈 값이 큰 트랙 2i+1개(2 논리 블록분)를 수집하여 논리 블록 사이즈의 자연수배로 하여 MSIB(11a)에 방출한다.
ㆍ유효 클러스터수가 가장 적은 2개의 논리 블록의 합계 유효 클러스터수가 예를 들어, 소정 설정값인 2k개(1 논리 블록분) 이상인 경우는, 위의 단계를 반복한다[IS 내의 2개의 논리 블록으로부터 프리 블록(FB)을 만들 수 있게 될 때까지 하기 위해)].
ㆍ유효 클러스터수가 적은 논리 블록부터 순서대로 클러스터를 2k개 수집하여 IS(13) 내에서 컴팩션을 행한다.
여기서는 유효 클러스터수가 가장 적은 2개의 논리 블록을 선택하는 것으로 했지만, 이 수는 2개에 한정되지 않고, 2개 이상의 수이면 된다. 또, 소정의 설정값은 선택되는 논리 블록수보다 1개 적은 논리 블록수에 수용 가능한 클러스터수 이하이면 된다.
ㆍ메인 스토리지 영역(MS; 11)
다음으로 MS(11)에 관해 설명한다. MS(11)는 트랙 단위로 데이터를 관리한다. MS(11)에 저장된 데이터는 갱신 빈도가 낮다고 간주될 수 있다. WC(21), FS(12), IS(13)로부터 MS(11)에 대하여 트랙 데이터의 카피 또는 이동이 발생하면, 그 트랙은 MSIS(11a)에 할당된 논리 블록에 대하여 기록된다. 한편, 트랙 중의 일부의 데이터(클러스터)만이 WC 등으로부터 기록되는 경우에는, 기존의 MS 중의 트랙 데이터와 새로운 데이터를 머지하여 새로운 트랙 데이터를 만든 다음 MSIB(11a)에 기록하는, 후술하는 수동 머지가 행해진다. MS(11) 내에 무효 트랙이 축적되고, MS(11)에 할당되어 있는 논리 블록의 개수가 MS(11)로서 허용되는 블록수의 상한치를 초과하는 상황이 발생하면, 컴팩션 처리를 행하여 무효 프리 블록(FB)을 만든다.
MS(11)의 컴팩션 처리는 예를 들어 논리 블록 내의 유효 트랙수에만 주목한 이하의 방법을 실시한다.
ㆍ유효 트랙이 적은 논리 블록부터 순서대로 무효 트랙을 합하여 무효 프리 블록(FB)이 만들어질 때까지 선택한다.
ㆍ선택한 논리 블록에 수용된 트랙을, WC(21), FS(12), IS(13) 내의 데이터와 통합하는 수동 머지를 행하면서 컴팩션을 실행한다.
ㆍ2i 트랙 통합 가능한 논리 블록은 TFS(11b)에 출력되고(2i 트랙 MS 컴팩션), 2i 트랙에 미치지 않는 개수의 트랙은 MSIB(11a)에 출력되어(2i 트랙 미만 컴팩션), 보다 많은 무효 프리 블록(FB)을 만든다.
TFS(11b)는 트랙 단위로 데이터가 관리되는 FIFO이다. TFS(11b)는, 이 TFS를통과하는 데이터는 후단의 MS(11)보다 갱신 빈도가 높다고 간주하기 위한 버퍼이다. 즉, TFS(11b)의 FIFO 구조에서는, FIFO를 통과중인 유효 트랙(최신 트랙)은, 호스트로부터의 동일한 어드레스에 대한 재기록이 있었던 경우 무효화되기 때문에, TFS(11b)를 통과중인 트랙은 TFS(11b)로부터 MS(11)에 방출된 트랙보다 갱신 빈도가 높다고 간주될 수 있다.
도 8은 데이터 관리부(120)가 도 5 및 도 6에 나타낸 각 구성 요소를 제어 관리하기 위한 관리 테이블을 나타내는 도면이다. 데이터 관리부(120)는, 전술한 바와 같이, ATA 커맨드 처리부(121)와 NAND 메모리(10) 간의 교량 역할하는 기능을 가지며, DRAM(20)에 기억된 데이터를 관리하는 DRAM층 관리부(120a)와, NAND 메모리(10)에 기억된 데이터를 관리하는 논리 NAND층 관리부(120b)와, NAND 메모리(10)를 물리 기억 디바이스로서 관리하는 물리 NAND층 관리부(120c)로 구성된다. RC 클러스터 관리 테이블(23), WC 트랙 관리 테이블(24), WC 클러스터 관리 테이블(25)은, DRAM층 관리부(120a)에 의해 제어된다. 트랙 관리 테이블(30), FS/IS 관리 테이블(40), MS 논리 블록 관리 테이블(35), FS/IS 논리 블록 관리 테이블(42), FS/IS 내 클러스터 관리 테이블(44)은 논리 NAND층 관리부(120b)에 의해 관리된다. 논리-물리 변환 테이블(50)은 물리 NAND층 관리부(120c)에 의해 관리된다.
RC(22)는 역(逆)색인 테이블인 RC 클러스터 관리 테이블(23)에 의해 관리된다. 역색인 테이블에서는, 기억 디바이스의 위치로부터 그 위치에 기억되어 있는 논리 어드레스를 검색할 수 있다. WC(21)는 역색인 테이블인 WC 클러스터 관리 테이블(25) 및 정(正)색인 테이블인 WC 트랙 관리 테이블(24)에 의해 관리된다. 정색인 테이블에서는, 논리 어드레스로부터 그 논리 어드레스에 대응하는 데이터가 존재하는 기억 디바이스 위치를 검색할 수 있다.
NAND 메모리(10) 내의 FS(12)[FSIB(12a)], IS(13), MS(11)[TFS(11b), MSIB(11a)]는, 트랙 관리 테이블(30), FS/IS 관리 테이블(40), MS 논리 블록 관리 테이블(35), FS/IS 논리 블록 관리 테이블(42), FS/IS 내 클러스터 관리 테이블(44)에 의해 그 논리 어드레스가 관리된다. 또, NAND 메모리(10) 내의 FS(12)[FSIB(12a)], IS(13), MS(11)[TFS(11b), MSIB(11a)]는 논리-물리 변환 테이블(50)에 의해 논리 어드레스와 물리 어드레스가 변환된다. 이러한 각 관리 테이블은 NAND 메모리(10) 상의 영역에 기억되어 있고, SSD(100)의 초기화 시에 NAND 메모리(10)로부터 DRAM(20) 상에 판독되어 사용된다.
ㆍRC 클러스터 관리 테이블(23) (역색인)
먼저, 도 9를 사용하여 RC 클러스터 관리 테이블(23)에 관해 설명한다. RC(22)는, 전술한 바와 같이, 논리 클러스터 어드레스 LSB (k-i)비트로 인덱스되는 n-웨이 세트 어소시에이티브 방식으로 관리된다. RC 클러스터 관리 테이블(23)은, RC(클러스터 사이즈×m-라인×n-웨이; 22)의 각 엔트리의 태그를 관리하기 위한 테 이블이며, 각 태그는 복수 비트의 상태 플래그(23a)와, 논리 트랙 어드레스(23b)로 구성되어 있다. 상태 플래그(23a)에는, 해당 엔트리를 사용해도 되는지의 여부(유효/무효)를 나타내는 Valid 비트 외에, 해당 엔트리가 NAND 메모리(10)로부터의 독출 대기인지의 여부를 나타내는 비트, 해당 엔트리가 ATA 커맨드 처리부(121)로의 독출 대기인지의 여부를 나타내는 비트 등이 포함된다. RC 클러스터 관리 테이블(23)은, DRAM(20) 상의 태그 기억 위치로부터 LBA에 일치하는 논리 트랙 어드레스를 검색하는 역색인 테이블로서 기능한다.
ㆍWC 클러스터 관리 테이블(25) (역색인)
다음으로, 도 10을 사용하여 WC 클러스터 관리 테이블(25)에 관해 설명한다. WC(21)는, 전술한 바와 같이, 논리 클러스터 어드레스 LSB (k-i)비트로 인덱스되는 n-웨이 세트 어소시에이티브 방식으로 관리된다. WC 클러스터 관리 테이블(25)은, WC(클러스터 사이즈×m-라인×n-웨이; 21)의 각 엔트리의 태그를 관리하기 위한 테이블이며, 각 태그는 복수 비트의 상태 플래그(25a)와, 섹터 위치 비트맵(25b)와, 논리 트랙 어드레스(25c)로 구성되어 있다.
상태 플래그(25a)에는, 해당 엔트리를 사용해도 되는지의 여부(유효/무효)를 나타내는 Valid 비트 외에, 해당 엔트리가 NAND 메모리(10)로의 방출 대기인지의 여부를 나타내는 비트, 해당 엔트리가 ATA 커맨드 처리부로부터의 기록 대기인지의 여부를 나타내는 비트 등이 포함된다. 섹터 위치 비트맵(25b)은, 1 클러스터에 포함되는 2(l-k) 섹터 중 어느 섹터에 유효한 데이터를 유지하고 있는지를 2(l-k) 비트로 전개하여 나타내는 것이다. 이 섹터 위치 비트맵(25b)에 의해, WC(21)에서 LBA와 동일한 섹터 단위의 관리를 행할 수 있다. WC 클러스터 관리 테이블(25)은, DRAM(20) 상의 태그 기억 위치로부터 LBA에 일치하는 논리 트랙 어드레스를 검색하는 역색인 테이블로서 기능한다.
ㆍWC 트랙 관리 테이블(24) (정색인)
다음으로, 도 11을 사용하여 WC 트랙 관리 테이블(24)에 관해 설명한다. WC 트랙 관리 테이블(24)은 WC(21) 상에 저장되어 있는 클러스터를 트랙 단위로 통합한 정보를 관리하는 것이며, FIFO 기능을 갖는 링크드 리스트 구조에 의해 트랙간의 WC(21)에 등록된 순서(LRU)를 표현하고 있다. WC(21)에서 마지막으로 갱신된 순서에 의해 LRU를 표현하도록 해도 된다. 각 리스트의 엔트리는, 논리 트랙 어드레스(24a), 해당 논리 트랙 어드레스에 포함되는 WC(21) 중 유효 클러스터수(24b), 웨이-라인 비트맵(24c) 및 다음 엔트리에 대한 포인터를 나타내는 넥스트 포인터(24d)로 구성되어 있다. WC 트랙 관리 테이블(24)은 논리 트랙 어드레스(24a)로부터 소요 정보를 얻기 때문에, 정색인 테이블로서 기능한다.
웨이-라인 비트맵(24c)은, WC(21) 중에서 해당 논리 트랙 어드레스에 포함되는 유효 클러스터가 WC(21) 중의 m×n 엔트리 가운데 어느 엔트리에 저장되어 있는지를 나타내는 맵 정보이며, 유효 클러스터가 저장되어 있는 엔트리에서는 Valid 비트가 "1"로 되어 있다. 이 웨이-라인 비트맵(24c)은, 예를 들어 (1 비트(Valid)+log2n 비트(n-웨이))×m 비트(m-라인)로 구성되어 있다. WC 트랙 관리 테 이블(24)은 링크드 리스트 구조를 갖고 있고, WC(21) 중에 존재하는 논리 트랙 어드레스에 관한 정보만이 엔트리되어 있다.
ㆍ트랙 관리 테이블(30) (정색인)
다음으로, 도 12를 사용하여 트랙 관리 테이블(30)에 관해 설명한다. 트랙 관리 테이블(30)은, 논리 트랙 어드레스 단위로 MS(11) 상의 논리적인 데이터 위치를 관리하기 위한 테이블이며, 클러스터 단위로 FS(12)나 IS(13)에 데이터가 유지되어 있는 경우에는, 이들에 관한 기본 정보와, 상세 정보에 대한 포인터도 유지하고 있다. 논리 트랙 어드레스(30a)를 인덱스로 한 배열 형식으로 구성된다. 논리 트랙 어드레스(30a)를 인덱스로 한 각 엔트리는, 클러스터 비트맵(30b), 논리 블록 ID(30c)+논리 블록 내 트랙 위치(30d), 클러스터 테이블 포인터(30e), FS 클러스터수(30f), IS 클러스터수(30g) 등의 정보로 구성되어 있다. 트랙 관리 테이블(30)은, 논리 트랙 어드레스를 인덱스로 하여, 그 논리 트랙 어드레스에 대응하는 논리 트랙이 기억되어 있는 논리 블록 ID(기억 디바이스 위치에 대응) 등의 소요 정보를 얻기 때문에, 정색인 테이블로서 기능한다.
클러스터 비트맵(30b)은, 1개의 논리 트랙 어드레스 범위에 속하는 2(k-i)개의 클러스터를 클러스터 어드레스 오름차순으로 예를 들어 8분할한 비트맵이며, 8개의 각 비트는, 2(k-i-3)개의 클러스터 어드레스에 대응하는 클러스터가 MS(11)에 존재하는지, FS(12) 또는 IS(13)에 존재하는지를 나타낸다. 비트가 "0"인 경우는 그 검색 대상 클러스터가 확실하게 MS(11) 내에 존재하는 것을 나타내고, 비트가 "1"인 경 우는 그 클러스터가 FS(12) 또는 IS(13)에 존재할 가능성이 있는 것을 나타낸다.
논리 블록 ID(30c)은, 해당 논리 트랙 어드레스에 대응하는 논리 트랙이 기억되어 있는 논리 블록 ID를 식별하기 위한 정보이다. 논리 블록 내 트랙 위치(30d)는, 논리 블록 ID(30c)로 지정된 논리 블록 중에서의 해당 논리 트랙 어드레스(30a)에 대응하는 트랙의 기억 위치를 나타내는 것이다. 1 논리 블록은 최대 2i개의 유효 트랙으로 구성되기 때문에, 논리 블록 내 트랙 위치(30d)는 i 비트로 2i개의 트랙 위치를 식별한다.
클러스터 테이블 포인터(30e)는 링크드 리스트 구조를 갖는 FS/IS 관리 테이블(40)의 각 리스트의 선두 엔트리에 대한 포인터이다. 클러스터 비트맵(30b)의 검색에서, 해당 클러스터가 FS(12)/IS(13)에 존재할 가능성이 있는 것을 나타낸 경우, 클러스터 테이블 포인터(30e)를 사용하여 FS/IS 관리 테이블(40)의 검색을 실행한다. FS 클러스터수(30f)는 FS(12) 내에 존재하는 유효 클러스터수를 나타낸다. IS 클러스터수(30g)는 IS(13) 내에 존재하는 유효 클러스터수를 나타낸다.
ㆍFS/IS 관리 테이블(40) (정색인)
다음으로, 도 13을 사용하여 FS/IS 관리 테이블(40)에 관해 설명한다. FS/IS 관리 테이블(40)은, 논리 클러스터 단위로 FS(12)[FSIB(12a)도 포함] 또는 IS(13)에 유지되어 있는 데이터의 위치를 관리하기 위한 테이블이다. 도 13에 나타내는 바와 같이, 논리 트랙 어드레스마다 독립된 링크드 리스트 형식으로 구성되고, 각 리스트의 선두 엔트리에 대한 포인터는, 전술한 바와 같이 트랙 관리 테이블(30)의 클러스터 테이블 포인터(30e) 필드에 유지되어 있다. 도 13에서는, 2개의 논리 트랙 어드레스분의 링크드 리스트가 나타나 있다. 각 엔트리는, 논리 클러스터 어드레스(40a), 논리 블록 ID(40b), 논리 블록 내 클러스터 위치(40c), FS/IS 블록 ID(40d), 넥스트 포인터(40e)로 구성되어 있다. FS/IS 관리 테이블(40)은, 논리 클러스터 어드레스(40a)로부터, 그 논리 클러스터 어드레스에 대응하는 논리 클러스터가 기억되어 있는 논리 블록 ID(40b), 논리 블록 내 클러스터 위치(40c)(기억 디바이스 위치에 대응) 등의 소요 정보를 얻기 때문에, 정색인 테이블로서 기능한다.
논리 블록 ID(40b)는, 해당 논리 클러스터 어드레스(40a)에 대응하는 논리 클러스터가 기억되어 있는 논리 블록 ID를 식별하기 위한 정보이다. 논리 블록 내 클러스터 위치(40c)는, 논리 블록 ID(40b)로 지정된 논리 블록 중에서의 해당 논리 클러스터 어드레스(40a)에 대응하는 클러스터의 기억 위치를 나타내는 것이다. 1 논리 블록은 최대 2k개의 유효 클러스터로 구성되기 때문에, 논리 블록 내 클러스터 위치(40c)는 k비트로 2k 위치를 식별한다. FS/IS 블록 ID(40d)는, 후술하는 FS/IS 논리 블록 관리 테이블(42)의 인덱스인 FS/IS 블록 ID가 등록되어 있다. FS/IS 블록 ID는 FS(12) 또는 IS(13)에 소속되는 논리 블록을 식별하기 위한 정보이며, 이 FS/IS 관리 테이블(40)에서의 FS/IS 블록 ID(40d)는, 후술하는 FS/IS 논리 블록 관리 테이블(42)과의 링크를 위해 등록되어 있다. 넥스트 포인터(40e)는 논리 트랙 어드레스마다 링크되는 동일한 리스트 내의 다음 엔트리에 대한 포인터를 나타낸다.
ㆍMS 논리 블록 관리 테이블(35) (역색인)
다음으로, 도 14를 사용하여 MS 논리 블록 관리 테이블(35)에 관해 설명한다. MS 논리 블록 관리 테이블(35)은, MS(11)에 사용되고 있는 논리 블록에 관한 정보(어떤 논리 트랙이 기억되어 있는지, 추기 가능한지 등)를 일원 관리하기 위한 테이블이다. MS 논리 블록 관리 테이블(35)에는, FS(12)[FSIB(12)도 포함], IS(13)에 소속되는 논리 블록에 관한 정보도 등록되어 있다. MS 논리 블록 관리 테이블(35)은 논리 블록 ID(35a)를 인덱스로 한 배열 형식으로 구성되고, 엔트리수는 128 GB의 NAND 메모리(10)의 경우는 32K 엔트리까지 가질 수 있다. 각 엔트리는, 2i 트랙분의 트랙 관리 포인터(35b), 유효 트랙수(35c), 기록 가능 선두 트랙(35d), Valid 플래그(35e)로 구성되어 있다. 이 MS 논리 블록 관리 테이블(35)은, 기억 디바이스 위치에 대응하는 논리 블록 ID(35a)으로부터, 이 논리 블록에 기억되어 있는 논리 트랙 어드레스 등의 소요 정보를 얻기 때문에, 역색인 테이블로서 기능한다.
트랙 관리 포인터(35b)는, 논리 블록 ID(35a)로 지정되는 해당 논리 블록 내의 2i개의 트랙 위치마다 대응하는 논리 트랙 어드레스를 유지한다. 이 논리 트랙 어드레스를 사용하여, 논리 트랙 어드레스를 인덱스로 하는 트랙 관리 테이블(30)을 검색할 수 있다. 유효 트랙수(35c)는, 논리 블록 ID(35a)로 지정되는 해당 논리 블록에 기억되어 있는 트랙 중의 유효한 것의 개수(최대 2i개)를 나타낸다. 기록 가능 선두 트랙 위치(35d)는 논리 블록 ID(35a)로 지정되는 해당 논리 블록이 추기중 의 블록이었던 경우에서의 추기 가능한 트랙 선두 위치(0∼2i-1, 추기 종료시는 2i)를 나타낸다. Valid 플래그(35e)는, 해당 논리 블록 엔트리가 MS(11)(MSIB(11a)도 포함)로서 관리되는 경우에 "1"이다.
ㆍFS/IS 논리 블록 관리 테이블(42) (역색인)
다음으로, 도 15를 사용하여 FS/IS 논리 블록 관리 테이블(42)에 관해 설명한다. FS/IS 논리 블록 관리 테이블(42)은, FS/IS 블록 ID(42a)를 인덱스로 한 배열 형식으로 구성되고, FS(12) 또는 IS(13)로서 이용되고 있는 논리 블록에 관한 정보[논리 블록 ID와의 대응, FS/IS 내 클러스터 관리 테이블(44)로의 인덱스, 추기 가능한지 등]를 관리하기 위한 테이블이다. FS/IS 논리 블록 관리 테이블(42)은, 주로 FS/IS 관리 테이블(40) 중의 FS/IS 블록 ID(40d)를 사용하여 액세스된다. 각 엔트리는, 논리 블록 ID(42b), 블록 내 클러스터 테이블(42c), 유효 클러스터수(42d), 기록 가능 선두 페이지(42e), Valid 플래그(42f)로 구성되어 있다. 이 FS/IS 논리 블록 관리 테이블(42)은 기억 디바이스 위치에 대응하는 FS/IS 블록 ID(42a)로부터, 이 논리 블록에 기억되어 있는 논리 클러스터 등의 소요 정보를 얻기 때문에, 역색인 테이블로서 기능한다.
논리 블록 ID(42b)에는, MS 논리 블록 관리 테이블(35)에 등록된 논리 블록 중에서, FS(12)[FSIB(12a)도 포함], IS(13)에 소속되어 있는 논리 블록에 대응하는 논리 블록 ID가 등록된다. 블록 내 클러스터 테이블(42c)에는, 논리 블록 중의 각 클러스터 위치에 어떤 논리 클러스터 어드레스로 지정되는 논리 클러스터가 기록되 어 있는지를 나타내는 후술하는 FS/IS 내 클러스터 관리 테이블(44)에의 인덱스가 등록된다. 유효 클러스터수(42d)는, FS/IS 블록 ID(42a)로 지정되는 해당 논리 블록에 기억되어 있는 클러스터 중 유효한 것의 개수(최대 2k개)를 나타낸다. 기록 가능 선두 페이지 위치(42e)는, FS/IS 블록 ID(42a)로 지정되는 해당 논리 블록이 추기중의 블록이었던 경우에서의 추기 가능한 선두 페이지 위치(0∼2j-1, 추기 종료시는 2j)를 나타낸다. Valid 플래그(42f)는, 이 논리 블록 엔트리가 FS(12)[FSIB(12a)도 포함] 또는 IS(13)로서 관리되는 경우에 "1"이다.
ㆍFS/IS 내 클러스터 관리 테이블(44) (역색인)
다음으로, 도 16을 사용하여 FS/IS 내 클러스터 관리 테이블(44)에 관해 설명한다. FS/IS 내 클러스터 관리 테이블(44)은, FS(12) 또는 IS(13)로서 이용되고 있는 논리 블록 중의 각 클러스터 위치에 어떤 논리 클러스터가 기록되어 있는지를 나타내는 테이블이다. 1 논리 블록당, 2j 페이지×2(k-j) 클러스터=2k개의 엔트리를 가지며, 해당 논리 블록 내의 클러스터 위치의 0번째∼2k-1번째에 대응하는 정보가 연속 영역에 배치된다. 또한 이 2k개의 정보를 포함하는 테이블이 FS(12) 및 IS(13)에 소속되는 논리 블록수(P개)분만큼 유지되어 있고, FS/IS 논리 블록 관리 테이블(42)의 블록 내 클러스터 테이블(42c)은 이 P개의 테이블에 대한 위치 정보(포인터)로 되어 있다. 연속 영역에 배치되는 각 엔트리(44a)의 위치는 1 논리 블록 중 의 클러스터 위치를 나타내고, 또 각 엔트리(44a)의 내용은 해당 클러스터 위치에 어떤 논리 클러스터가 기억되어 있는지를 식별할 수 있도록, FS/IS 관리 테이블(40)에서 관리되는 해당 논리 클러스터 어드레스를 포함하는 리스트로의 포인터가 등록되어 있다. 즉, 엔트리(44a)는, 링크드 리스트의 선두를 지시하는 것이 아니라, 링크드 리스트 중의 해당 논리 클러스터 어드레스를 포함하는 1개의 리스트로의 포인터가 등록되어 있다.
ㆍ논리-물리 변환 테이블(50) (정색인)
다음으로, 도 17을 이용하여 논리-물리 변환 테이블(50)에 관해 설명한다. 논리-물리 변환 테이블(50)은 논리 블록 ID(50a)를 인덱스로 한 배열 형식으로 구성되고, 엔트리수는 128 GB의 NAND 메모리(10)의 경우는, 최대 32K 엔트리까지 가질 수 있다. 논리-물리 변환 테이블(50)은 논리 블록 ID와 물리 블록 ID의 변환, 수명에 관한 정보를 관리하기 위한 테이블이다. 각 엔트리는 물리 블록 어드레스(50b), 소거 횟수(50c), 독출 횟수(50d)로 구성된다. 이 논리-물리 변환 테이블(50)은 논리 블록 ID로부터 물리 블록 ID(물리 블록 어드레스) 등의 소요 정보를 얻기 때문에, 정색인 테이블로서 기능한다.
물리 블록 어드레스(50b)는, 1개의 논리 블록 ID(50a)에 소속되는 8개의 물리 블록 ID(물리 블록 어드레스)를 나타낸다. 소거 횟수(50c)는, 해당 논리 블록 ID의 소거 횟수를 나타낸다. 배드 블록(BB) 관리는 물리 블록(512 kB) 단위로 행해지지만, 소거 횟수의 관리는 32비트 배속 모드에 따른 1 논리 블록(4 MB) 단위로 관리된다. 독출 횟수(50d)는 해당 논리 블록 ID의 독출 횟수를 나타낸다. 소거 횟 수(50c)는, 예를 들어 NAND형 플래시 메모리의 재기록 횟수를 평준화하는 웨어 레벨링 처리에서 이용될 수 있다. 독출 횟수(50d)는 리텐션 특성이 열화한 물리 블록에 유지되는 데이터를 재기록하는 리프레시 처리에서 이용될 수 있다.
웨어 레벨링 처리에 관해서는, 예를 들어 동출원인에 의한 국제 특허 출원 PCT/JP2008/066508 및 PCT/JP2008/066507에 개시되어 있다. 리프레시 처리에 관해서는, 예를 들어 동출원인에 의한 국제 특허 출원 PCT/JP2008/067597에 개시되어 있다. 이러한 국제 특허 출원의 모든 내용은 본 출원에서 원용된다.
도 8에 나타낸 관리 테이블을 관리 대상마다 정리하면 다음과 같다.
RC 관리 : RC 클러스터 관리 테이블
WC 관리 : WC 클러스터 관리 테이블, WC 트랙 관리 테이블
MS 관리 : 트랙 관리 테이블(30), MS 논리 블록 관리 테이블(35)
FS/IS 관리 : 트랙 관리 테이블(30), FS/IS 관리 테이블(40), MS 논리 블록 관리 테이블(35), FS/IS 논리 블록 관리 테이블(42), FS/IS 내 클러스터 관리 테이블(44)
MS 구조 관리 테이블(도시하지 않음)에서, MS(11), MSIB(11a), TFS(11b)를 포함한 MS 영역의 구조를 관리하고, 구체적으로는, MS(11), MSIB(11a), TFS(11b)에 할당한 논리 블록 등을 관리한다. 또, FS/IS 구조 관리 테이블(도시하지 않음)에서, FS(12), FSIB(12a), IS(13)를 포함한 FS/IS 영역의 구조를 관리하고, 구체적으로는, FS(12), FSIB(12a), IS(13)에 할당한 논리 블록 등을 관리한다.
ㆍ리드 처리
다음으로, 도 18에 나타내는 흐름도를 참조하여 독출 처리에 관해 설명한다. ATA 커맨드 처리부(121)로부터, 리드 커맨드 및 독출 어드레스로서의 LBA가 입력되면, 데이터 관리부(120)는, 도 9에 나타낸 RC 클러스터 관리 테이블(23)과 도 10에 나타낸 WC 클러스터 관리 테이블(25)을 검색한다(단계 S100). 구체적으로는, LBA의 클러스터 어드레스의 LSB (k-i)비트(도 7 참조)에 대응하는 라인을 RC 클러스터 관리 테이블(23)과 WC 클러스터 관리 테이블(25)에서 선택하여, 선택한 라인의 각 웨이에 엔트리되어 있는 논리 트랙 어드레스(23b, 25c)를 LBA의 트랙 어드레스와 비교하고(단계 S110), 일치한 웨이가 존재하는 경우는 캐쉬 히트로 하고, 히트한 RC 클러스터 관리 테이블(23) 또는 WC 클러스터 관리 테이블(25)의 해당 라인, 해당 웨이에 대응하는 WC(21) 또는 RC(22)의 데이터를 독출하여, ATA 커맨드 처리부(121)로 보낸다(단계 S115).
데이터 관리부(120)는, RC(22) 또는 WC(21)에서 히트하지 않은 경우는(단계 S110), 검색 대상 클러스터가 NAND 메모리(10)의 어디에 저장되어 있는지를 검색한다. 데이터 관리부(120)는, 우선 도 12에 나타낸 트랙 관리 테이블(30)을 검색한다(단계 S120). 트랙 관리 테이블(30)은, 논리 트랙 어드레스(30a)로 인덱스되어 있기 때문에, LBA로 지정된 논리 트랙 어드레스에 일치하는 논리 트랙 어드레스(30a)의 엔트리만을 체크한다.
우선, 체크하고자 하는 LBA의 논리 클러스터 어드레스에 기초하여 클러스터 비트맵(30b)으로부터 대응하는 비트를 선택한다. 대응하는 비트가 "0"을 나타내고 있으면, 그 클러스터는 확실하게 MS 내에 최신 데이터가 존재하고 있는 것을 의미 한다(단계 S130). 이 경우는, 이 트랙이 존재하는 논리 블록 ID 및 트랙 위치를, 동일한 논리 트랙 어드레스(30a)의 엔트리 중의 논리 블록 ID(30c)와 논리 블록 내 트랙 위치(30d)에서 얻고, 또한 LBA의 클러스터 어드레스의 LSB (k-i)비트를 이용하여 트랙 위치로부터의 오프셋을 산출함으로써, NAND 메모리(10) 내의 해당 클러스터 어드레스에 대응하는 클러스터 데이터가 저장되어 있는 위치를 산출할 수 있다. 구체적으로는, 논리 NAND층 관리부(120b)에서는, 상기와 같이 하여 트랙 관리 테이블(30)로부터 취득한 논리 블록 ID(30c)와 논리 블록 내 트랙 위치(30d)와, LBA의 논리 클러스터 어드레스의 LSB (k-i)비트를 물리 NAND층 관리부(120c)에 제공한다.
물리 NAND층 관리부(120c)에서는, 논리 블록 ID(30c)에 대응하는 물리 블록 어드레스(물리 블록 ID)를, 논리 블록 ID를 인덱스로 하고 있는 도 17에 나타내는 논리-물리 변환 테이블(50)로부터 취득하고(단계 S160), 또한 취득한 물리 블록 ID 중의 트랙 위치(트랙 선두 위치)를 논리 블록 내 트랙 위치(30d)로부터 산출하고, 또한 LBA의 클러스터 어드레스의 LSB (k-i)비트로부터, 상기 산출한 물리 블록 ID 중의 트랙 선두 위치로부터의 오프셋을 산출함으로써, 물리 블록 중의 클러스터 데이터를 취득할 수 있다. NAND 메모리(10)의 MS(11)로부터 취득된 클러스터 데이터는 RC(22)를 통해 ATA 커맨드 처리부(121)로 보내진다(단계 S180).
한편, LBA의 클러스터 어드레스에 기초하는 클러스터 비트맵(30b)의 검색에서, 대응하는 비트가 "1"을 나타낸 경우는, 그 클러스터가 FS(12) 또는 IS(13)에 저장되어 있을 가능성이 있다(단계 S130). 이 경우는, 트랙 관리 테이블(30)의 해 당하는 논리 트랙 어드레스(30a)의 엔트리 중의 클러스터 테이블 포인터(30e)의 엔트리를 추출하고, 이 포인터를 사용하여 FS/IS 관리 테이블(40)의 해당하는 논리 트랙 어드레스에 대응하는 링크드 리스트를 순서대로 검색한다(단계 S140). 구체적으로는, 해당하는 논리 트랙 어드레스의 링크드 리스트 중의 LBA의 논리 클러스터 어드레스에 일치하는 논리 클러스터 어드레스(40a)의 엔트리를 검색하여, 일치하는 논리 클러스터 어드레스(40a)의 엔트리가 존재한 경우는(단계 S150), 일치한 리스트 중의 논리 블록 ID(40b) 및 논리 블록 내 클러스터 위치(40c)를 취득하고, 전술한 바와 동일하게 하여, 논리-물리 변환 테이블(50)을 사용하여 물리 블록 중의 클러스터 데이터를 취득한다(단계 S160, S180). 구체적으로는, 취득한 논리 블록 ID에 대응하는 물리 블록 어드레스(물리 블록 ID)를, 논리-물리 변환 테이블(50)로부터 취득하고(단계 S160), 또한 취득한 물리 블록 ID 중의 클러스터 위치를, 논리 블록 내 클러스터 위치(40c)의 엔트리로부터 취득한 논리 블록 내 클러스터 위치로부터 산출함으로써, 물리 블록 중의 클러스터 데이터를 취득할 수 있다. NAND 메모리(10)의 FS(12) 또는 IS(13)로부터 취득된 클러스터 데이터는 RC(22)를 통해 ATA 커맨드 처리부(121)로 보내진다(단계 S180).
이 FS/IS 관리 테이블(40)의 검색에 의해, 검색 대상 클러스터가 존재하지 않는 경우는(단계 S150), 다시 트랙 관리 테이블(30)의 엔트리를 검색하여 MS(11) 상의 위치를 확정한다(단계 S170).
ㆍ라이트 처리
다음으로, 도 19에 나타내는 흐름도를 참조하여 기록 처리에 관해 설명한다. FUA(DRAM 캐쉬를 바이패스하여 NAND에 직접 기록한다)가 아닌 라이트 커맨드에 의해 기록된 데이터는 반드시 일단 WC(21) 상에 저장되고, 그 후 조건에 따라 NAND 메모리(10)에 기록되게 된다. 기록 처리에서는, 방출 처리, 컴팩션 처리가 발생할 가능성이 있다. 이 실시형태에서는, 기록 처리를 라이트 캐쉬 플래시 처리(이하 WCF 처리)와, 클린 입력 버퍼 처리(이하 CIB 처리)의 2 스테이지로 크게 분할하고 있다. 단계 S300부터 단계 S320까지는, ATA 커맨드 처리부(121)로부터의 라이트 요구부터 WCF 처리까지를 나타내고, 단계 S330∼최종 단계까지가 CIB 처리를 나타낸다.
WCF 처리는, WC(21)에 있는 데이터를 NAND 메모리(10)[FS(12)의 FSIB(12a) 또는 MS(11)의 MSIB(11a)]에 카피하는 처리이며, ATA 커맨드 처리부(121)로부터의 라이트 요구 또는 캐쉬 플러쉬 요구 단체(單體)는 이 처리만으로 완결될 수 있다. 이에 의해 처리가 시작된 ATA 커맨드 처리부(121)의 라이트 요구의 처리 지연을 최대 WC(21)의 용량분의 NAND 메모리(10)로의 기록 시간에 한정할 수 있게 된다.
CIB 처리는, WCF 처리에 의해 기록된 FSIB(12a)의 데이터를 FS(12)로 이동하는 처리와, WCF 처리에 의해 기록된 MSIB(11a)의 데이터를 MS(11)로 이동하는 처리를 포함한다. CIB 처리를 시작하면, 연쇄적으로 NAND 메모리(10) 내의 각 구성 요소[FS(12), IS(13), MS(11) 등] 간의 데이터 이동이나 컴팩션 처리가 발생할 가능성이 있고, 처리 전체에 필요한 시간은 상태에 따라 크게 변한다.
우선, WCF 처리에 관해 상세하게 설명한다. ATA 커맨드 처리부(121)로부터, Write 커맨드 및 기록 어드레스로서의 LBA가 입력되면, DRAM층 관리부(120)는, 도 10에 나타낸 WC 클러스터 관리 테이블(25)을 검색한다(단계 S300, S305). WC(21)의 상태는, 도 10에 나타낸 WC 클러스터 관리 테이블(25)의 상태 플래그(25a)(예를 들어 3비트)에 의해 규정되어 있다. 상태 플래그(25a)는, 가장 전형적으로는 Invalid(사용 가능)→ATA로부터의 기록 대기→Valid(사용 불가)→NAND로의 방출 대기→Invalid(사용 가능)와 같은 순서로 상태가 변화되어 간다. 우선, LBA의 클러스터 어드레스 LSB (k-i)비트로부터 기록처의 라인을 결정하고, 결정한 라인의 n개의 웨이를 검색한다. 결정한 라인의 n개의 웨이 가운데, 입력된 LBA와 동일한 논리 트랙 어드레스(25c)가 저장되어 있는 경우는(단계 S305), 이 엔트리에 덮어쓰기하여 이 엔트리를 클러스터 기록용으로 확보한다[Valid(사용 불가)→ATA로부터의 기록 대기].
그리고, DRAM층 관리부(120a)는, 해당 엔트리에 대응하는 DRAM 어드레스를 ATA 커맨드 처리부(121)에 통지한다. ATA 커맨드 처리부(121)에 의한 기록이 종료하면, WC 클러스터 관리 테이블(25)의 해당 엔트리의 상태 플래그(25a)를 Valid(사용 불가)로 하고, 또한 섹터 위치 비트맵(25b) 및 논리 트랙 어드레스(25c) 필드에 소요 데이터를 등록한다. 또, WC 트랙 관리 테이블(24)을 갱신한다. 구체적으로는, WC 트랙 관리 테이블(24)의 각 리스트 중에 이미 등록이 완료된 논리 트랙 어드레스(24a)와 동일한 LBA 어드레스가 입력된 경우는, 해당하는 리스트의 WC 클러스터수(24b), 웨이-라인 비트맵(24c)을 갱신하고, 해당 리스트가 최신 리스트가 되도록 넥스트 포인터(24d)를 변경한다. 또, WC 트랙 관리 테이블(24)의 각 리스트 중에 등록이 완료된 논리 트랙 어드레스(24a)와 상이한 LBA 어드레스가 입력된 경우는, 새로운 논리 트랙 어드레스(24a), WC 클러스터수(24b), 웨이-라인 비트맵(24c), 넥스트 포인터(24d)의 각 엔트리를 갖는 리스트를 새롭게 작성하여 최신 리스트로서 등록한다. 이상과 같은 테이블 갱신을 행하여 기록 처리가 완료된다(단계 S320).
한편, 결정한 라인의 n개의 웨이중에, 입력된 LBA와 동일한 논리 트랙 어드레스(25c)가 저장되지 않은 경우는, NAND 메모리로의 방출이 필요한지의 여부를 판단한다(단계 S305). 즉, 우선 결정한 라인중의 기록 가능한 웨이가 최후 n개째 웨이인지의 여부를 판단한다. 기록 가능한 웨이란, Invalid(사용 가능)의 상태 플래그(25a)를 갖는 웨이이거나, 또는 Valid(사용 불가)이고 또한 NAND로의 방출 대기의 상태 플래그(25a)를 갖는 웨이이다. 상태 플래그(25a)가 NAND로의 방출 대기라는 것은, 방출이 시작되어 방출 종료 대기인 것을 의미한다. 그리고, 기록 가능한 웨이가 최후 n개째 웨이가 아닌 경우이고, 또한 기록 가능한 웨이가 Invalid(사용 가능)의 상태 플래그(25a)를 갖는 웨이인 경우는, 이 엔트리를 클러스터 기록용으로 확보한다[Invalid(사용 가능)→ATA로부터의 기록 대기]. 그리고, 해당 엔트리에 대응하는 DRAM 어드레스를 ATA 커맨드 처리부(121)에 통지하여, ATA 커맨드 처리부(121)에 의해 기록을 실행시킨다. 그리고, 상기와 마찬가지로 WC 클러스터 관리 테이블(25) 및 WC 트랙 관리 테이블(24)을 갱신한다(단계 S320).
또, 기록 가능한 웨이가 최후 n개째 웨이가 아닌 경우이고, 또한 기록 가능한 웨이가 Valid(사용 불가)이며 NAND로의 방출 대기의 상태 플래그(25a)를 갖는 웨이인 경우는, 이 엔트리를 클러스터 기록용으로 확보한다[Valid(사용 불가)이고 또한 NAND로의 방출 대기→Valid(사용 불가)이고 또한 NAND로의 방출 대기이고 또 한 ATA로부터의 기록 대기]. 그리고, 방출이 종료하면, 상태 플래그(25a)를 ATA로부터의 기록 대기로 하고, 또한 해당 엔트리에 대응하는 DRAM 어드레스를 ATA 커맨드 처리부(121)에 통지하여, ATA 커맨드 처리부(121)에 의해 기록을 실행시킨다. 그리고, 상기와 마찬가지로 WC 클러스터 관리 테이블(25) 및 WC 트랙 관리 테이블(24)을 갱신한다(단계 S320).
이상의 처리는, ATA 커맨드 처리부(121)로부터의 기록 요구가 입력되었을 때, 방출 처리를 트리거하지 않아도 되는 경우이다. 한편, 이후의 설명은, 기록 요구가 입력된 시점 후에 방출 처리를 트리거하는 경우이다. 단계 S305에서, 결정한 라인중의 기록 가능한 웨이가 최후 n개째 웨이인 경우는, 전술한 WC(21)로부터 NAND 메모리(10)에 방출하는 데이터의 결정 방법 중 (i) 항목에서 설명한 조건, 즉
(i) 태그에 따라 결정된 라인의 기록 가능한 웨이가 최후의(본 실시형태에서는 n개째) 빈 웨이인 경우, 즉 최후의 빈 웨이가 사용되는 경우는, 그 라인에 등록된 트랙 중 LRU에 기초하여 가장 오래전에 갱신된 트랙을 방출 확정하는 것에 기초하여 방출하는 트랙, 즉 WC(21) 내 엔트리를 선택한다.
DRAM층 관리부(120a)는, 이상의 방침으로 방출하는 트랙을 결정하면, 전술한 바와 같이, 그 때 방출하는 것은 동일 트랙에 포함되는 WC(21) 중의 전체 클러스터이며, 방출되는 클러스터량이 트랙 사이즈의 50%를 초과하면, 즉 방출 확정 트랙 중 WC 중에 유효 클러스터수가 2(k-i-1)개 이상 있는 경우는 MSIB(11a)에 방출하고(단계 S310), 초과하면, 즉 방출 확정 트랙 가운데 WC 중에 유효 클러스터수가 2(k-i-1) 개 미만인 경우는 FSIB(12a)에 방출한다(단계 S315). WC(21)로부터 MSIB(11a)로의 방출, WC(21)로부터 FSIB(12a)로의 방출에 대한 상세한 내용은 후술한다. 선택된 방출 엔트리의 상태 플래그(25a)는 Valid(사용 불가)로부터 NAND 메모리(10)로의 방출 대기로 이행된다.
이 방출처의 판정은 WC 트랙 관리 테이블(24)을 사용하여 실행된다. 즉, WC 트랙 관리 테이블(24)에는, 논리 트랙 어드레스마다, 유효한 클러스터수를 나타내는 WC 클러스터수(24b)의 엔트리가 등록되어 있고, 이 WC 클러스터수(24b)의 엔트리를 참조함으로써 WC(21)로부터의 방출처를 FSIB(12a), MSIB(11a) 중 어느 것으로 할지 결정한다. 또, 해당 논리 트랙 어드레스에 소속되는 모든 클러스터가 비트맵 형식으로 웨이-라인 비트맵(24c)에 등록되어 있기 때문에, 방출 시에는 이 웨이-라인 비트맵(24c)을 참조함으로써, 방출해야 할 각 클러스터의 WC(21)에서의 기억 위치를 용이하게 알 수 있다.
또, 상기 기록 처리중 또는 기록 처리후, 전술한 하기 조건,
(ii) WC(21)에 등록되어 있는 트랙의 수가 소정 개수를 초과한 경우,
가 성립한 경우도, 상기와 동일하게 하여 NAND 메모리(10)로의 방출 처리를 실행한다.
WC→MSIB (Copy)
다음으로, 상기 유효 클러스터수[유효 클러스터수가 2(k-i-1)개 이상]에 기초한 판정에 의해 WC(21)로부터 MSIB(11a)로의 방출이 발생했을 때에는, 전술한 바와 같이 다음과 같은 절차를 실행한다(단계 S310).
1. WC 클러스터 관리 테이블(25)을 참조하고, 방출되는 클러스터에 대응하는 태그 중의 섹터 위치 비트맵(25b)을 참조하여, 섹터 위치 비트맵(25b)이 모두 "1"이 아닌 경우는, NAND 메모리(10)에 포함되는 동일 클러스터 중의 섹터와 머지하는, 후술하는 트랙 내 섹터 빈 곳 채우기를 실행한다. 또, 트랙 중의 WC(21) 내에 존재하지 않는 클러스터는 NAND 메모리(10)로부터 독출하여 머지하는, 수동 머지 처리를 실행한다.
2. 방출 확정 트랙이 2i개 미만인 경우, WC(21) 중의 트랙의 오래된 것부터 2i개가 될 때까지 2(k-i-1)개 이상 유효 클러스터를 갖는 방출 확정 트랙을 추가한다.
3. 카피되는 트랙이 2i개 이상이면, 2i개씩을 세트로 하여, MSIB(11a)에 대하여 논리 블록 단위로 기록한다.
4. 2i개 세트로 할 수 없었던 트랙은 MSIB(11a)에 대하여 트랙 단위로 기록한다.
5. 카피 종료후에 이미 FS, IS, MS 상에 존재했던 클러스터, 트랙 중 카피된 트랙에 속하는 것은 무효화한다.
이러한 WC(21)로부터 MSIB(11a)로의 카피 처리에 따르는 각 관리 테이블의 갱신 처리에 관해 설명한다. WC 클러스터 관리 테이블(25) 중의 방출된 트랙에 소속되는 WC(21) 중의 전체 클러스터에 대응하는 엔트리 중의 상태 플래그(25a)는 Invalid로 되고, 그 후 이들 엔트리에 대한 기록이 가능해진다. 또, WC 트랙 관리 테이블(24) 중의 방출된 트랙에 대응하는 리스트는, 예를 들어 직전 리스트의 넥스트 포인터(24d)가 변경 또는 삭제되어 무효화된다.
한편, WC(21)로부터 MSIB(11a)에 대한 트랙 이동이 발생하면, 이에 따라 트랙 관리 테이블(30) 및 MS 논리 블록 관리 테이블(35)이 갱신된다. 우선, 트랙 관리 테이블(30)의 인덱스인 논리 트랙 어드레스(30a)를 검색함으로써, 이동된 트랙에 대응하는 논리 트랙 어드레스(30a)가 이미 등록되어 있는지의 여부를 판정한다. 이미 등록되어 있는 경우는, 해당 인덱스의 클러스터 비트맵(30b)[MS(11)측으로의 이동이기 때문에, 해당 비트를 모두 "0"으로 한다], 논리 블록 ID(30c)+논리 블록 내 트랙 위치(30d) 필드를 갱신한다. 이동된 트랙에 대응하는 논리 트랙 어드레스(30a)가 미등록인 경우는, 해당하는 논리 트랙 어드레스(30a)의 엔트리에 대하여, 클러스터 비트맵(30b), 논리 블록 ID(30c)+논리 블록 내 트랙 위치(30d)를 등록한다. 또, 트랙 관리 테이블(30)의 변경에 따라, MS 논리 블록 관리 테이블(35)에서의 논리 블록 ID(35a), 해당 트랙 관리 포인터(35b), 유효 트랙수(35c), 기록 가능 선두 트랙(35d) 등의 엔트리를 필요에 따라 갱신한다.
다른 영역[FS(12)이나 IS(13)] 등으로부터 MS(11)에 대하여 트랙 기록이 발생한 경우, 또는 MS(11) 내부의 컴팩션 처리에 의한 MS 내 트랙 기록이 발생한 경우, 기록 대상 트랙에 포함되는 WC(21) 내 유효 클러스터도 동시에 MS에 기록된다. WC(21)로부터 MS(11)에의 기록으로서 이러한 수동적 머지도 존재한다. 그와 같은 수동적 머지가 행해진 경우, 이들 클러스터는 WC(21) 상에서 삭제(무효화)되게 된 다.
WC→FSIB (Copy)
이어서, 상기 유효 클러스터수[유효 클러스터수가 2(k-i-1)개 미만]에 기초한 판정에 따라 WC(21)로부터 FSIB(12a)로의 방출이 발생했을 때에는, 전술한 바와 같이 다음과 같은 절차를 실행한다.
1. WC 클러스터 관리 테이블(25)에서의 방출되는 클러스터에 대응하는 태그 중의 섹터 위치 비트맵(25b)을 참조하여, 섹터 위치 비트맵(25b)이 모두 "1"이 아닌 경우는, NAND 메모리(10)에 포함되는 동일 클러스터 중의 섹터와 머지하는, 클러스터 내 섹터 빈 곳 채우기를 실행한다.
2. WC내의 트랙을 오래된 순으로 거슬러 올라가 2(k-i-1)개 미만의 유효 클러스터만 갖는 트랙으로부터 클러스터를 추출하고, 유효 클러스터수가 2k개가 되면 그러한 전체 클러스터는 FSIB(12a)에 논리 블록 단위로 기록한다.
3. 2k개 발견되지 않은 경우에는, 유효 클러스터수가 2(k-i-1)개 미만인 모든 트랙을 필요한 논리 페이지수만큼 FSIB(12a)에 기록한다.
4. 카피 종료 후에 이미 FS, IS 상에 존재했던 클러스터 중 카피된 것과 동일한 것은 무효화한다.
이러한 WC(21)로부터 FSIB(12a)로의 카피 처리에 따르는 각 관리 테이블의 갱신 처리에 관해 설명한다. WC 클러스터 관리 테이블(25) 중의 방출된 트랙에 소 속되는 WC(21) 중의 전체 클러스터에 대응하는 엔트리 중의 상태 플래그(25a)는 Invalid로 되고, 그 후 이들 엔트리에 대한 기록이 가능해진다. 또, WC 트랙 관리 테이블(24) 중의 방출된 트랙에 대응하는 리스트는, 예를 들어 직전 리스트의 넥스트 포인터(24d)가 변경 또는 삭제되어 무효화된다. 한편, WC(21)로부터 FSIB(12a)에 대한 클러스터 이동이 발생하면, 이에 따라 트랙 관리 테이블(30)의 클러스터 테이블 포인터(30e), FS 클러스터수(30f) 등을 갱신하고, FS/IS 관리 테이블(40)의 논리 블록 ID(40b), 논리 블록 내 클러스터 위치(40c) 등을 갱신한다. 원래 FS(12)에 존재하지 않았던 클러스터는, FS/IS 관리 테이블(40)의 링크드 리스트에의 리스트가 추가된다. 이 갱신에 따라, MS 논리 블록 관리 테이블(35), FS/IS 논리 블록 관리 테이블(42) 및 FS/IS 내 클러스터 관리 테이블(44)의 해당 개소를 갱신한다.
CIB 처리
상기와 같은 WCF 처리가 종료하면, 이어서 논리 NAND층 관리부(120b)는, WCF 처리에 의해 기록된 FSIB(12a)의 데이터를 FS(12)로 이동하는 처리와, WCF 처리에 의해 기록된 MSIB(11a)의 데이터를 MS(11)로 이동하는 처리 등을 포함하는 CIB 처리를 실행한다. CIB 처리를 시작하면, 전술한 바와 같이, 연쇄적으로 각 블록 간의 데이터 이동이나 컴팩션 처리가 발생할 가능성이 있어, 처리 전체에 필요한 시간은 상태에 따라 크게 변화한다. 이 CIB 처리에서는, 기본적으로는 우선 MS(11)에서의 CIB 처리가 행해지고(단계 S330), 이어서 FS(12)에서의 CIB 처리가 행해지고(단계 S340), 이어서 다시 MS(11)에서의 CIB 처리가 행해지고(단계 S350), 이어서 IS(13)에서의 CIB 처리가 행해지고(단계 S360), 마지막으로 다시 MS(11)에서의 CIB 처리 가 행해진다(단계 S370). FS(12)로부터 MSIB(11a)로의 방출 처리, 또는 FS(12)로부터 IS(13)로의 방출 처리, 또는 IS(13)로부터 MSIB(11a)로의 방출 처리 시에, 절차에 루프가 발생하면, 상기 순서대로 되지 않는 경우도 있다. MS(11), FS(12) 및 IS(13)에서의 CIB 처리를 따로따로 설명한다.
MS(11)의 CIB 처리
우선, MS(11)에서의 CIB 처리에 관해 설명한다(단계 S330). WC(21), FS(12), IS(13)로부터 MS(11)에 대하여 트랙 데이터의 이동이 발생하면, 그 트랙 데이터는 MSIB(11a)에 기록된다. MSIB(11a)로의 기록이 완료된 후에는, 전술한 바와 같이, 트랙 관리 테이블(30)을 갱신하여 트랙이 배치되는 논리 블록 ID(30c)와 블록 내 트랙 위치(30d) 등을 변경한다(Move). MSIB(11a)에 새로운 트랙 데이터가 기록된 경우, 원래 MS(11) 또는 TFS(11b)에 존재했던 트랙 데이터는 무효화된다. 이 무효화 처리는, MS 논리 블록 관리 테이블(35)에서의 오래된 트랙 정보가 보존되어 있던 논리 블록의 엔트리로부터 트랙을 무효화함으로써 실현한다. 구체적으로는, MS 논리 블록 관리 테이블(35)의 해당 엔트리 중의 트랙 관리 포인터(35b) 필드 중의 해당 트랙의 포인터가 삭제되어, 유효 트랙수가 -1 된다. 이 트랙 무효화에 의해 1 논리 블록 중의 모든 트랙이 무효가 된 경우는, Valid 플래그(35e)가 무효화된다. 이러한 무효화 등에 의해, MS(11)의 블록은 무효 트랙을 포함한 것이 발생하고, 이것이 반복되면 블록의 이용 효율이 저하되어, 사용 가능한 논리 블록이 부족해지는 경우가 있다.
데이터 관리부(120)는, 이러한 사태가 발생하여, MS(11)에 할당되어 있는 논 리 블록의 개수가 MS(11)로서 허용되는 블록수의 상한치를 초과하는 상황이 발생하면, 컴팩션 처리를 행하여 무효 프리 블록(FB)을 만든다. 무효 프리 블록(FB)은 물리 NAND층 관리부(120c)에 반환된다. 그리고, 논리 NAND층 관리부(120b)는, MS(11)에 할당되어 있는 논리 블록의 개수를 줄인 후, 새롭게 기록 가능한 프리 블록(FB)을 물리 NAND층 관리부(120c)로부터 취득한다. 컴팩션 처리란, 컴팩션 대상 논리 블록이 갖는 유효 클러스터를 새로운 논리 블록에 수집하거나, 또는 컴팩션 대상 논리 블록 중의 유효 트랙을 다른 논리 블록에 카피하거나 함으로써, 물리 NAND층 관리부(120c)에 반환되는 무효 프리 블록(FB)을 만들어, 논리 블록의 이용 효율을 향상시키기 위한 처리이다. 컴팩션을 행할 때에는, 컴팩션 대상이 된 트랙 영역에 대하여, WC, FS, IS 상의 유효한 클러스터가 존재하는 경우, 이들을 모두 머지하는 수동 머지를 실행한다. 또, TFS(11b)에 등록되어 있는 논리 블록은 컴팩션 대상에 포함시키지 않는다.
이하에, MSIB(11a)에 풀(full) 블록이 존재하는 경우를 발생 조건으로 한, MSIB(11a)로부터 MS(11) 또는 TFS(11b)로의 방출과 컴팩션 처리의 일례에 관해 구체적으로 설명한다.
1. MS 논리 블록 관리 테이블(35)의 Valid 플래그(35e)를 참조함으로써, MS(11) 내에 무효가 된 논리 블록이 존재하는 경우, 그 블록을 무효 프리 블록(FB)으로 한다.
2. MSIB(11a)에서 풀이 된 논리 블록을 MS(11)에 방출한다. 구체적으로는, 전술한 MS 구조 관리 테이블(도시하지 않음)을 갱신하여, 해당 논리 블록을 MSIB 관리하에서 MS 관리하로 옮긴다.
3. MS(11)에 할당되어 있는 논리 블록의 개수가 MS(11)로서 허용되는 블록수의 상한치를 초과하는 상황이 발생하는지의 여부를 판단하여, 발생하고 있는 경우에 이하의 MS 컴팩션을 실행한다.
4. MS 논리 블록 관리 테이블(35)의 유효 트랙수(35c) 필드 등을 참조함으로써, TFS(11b)에 포함되지 않는 논리 블록 중 무효가 된 트랙을 갖는 것을, 유효 트랙수로 소트한다.
5. 유효 트랙수가 적은 논리 블록으로부터, 트랙을 수집하여 컴팩션을 실시한다. 이 때, 우선 1 논리 블록분(2i 트랙)씩 카피하여 컴팩션을 실시한다. 컴팩션 대상 트랙이 WC(21), FS(12), IS(13)에 유효 클러스터를 갖는 경우에는 이들도 머지한다.
6. 컴팩션원(元)의 논리 블록을 무효 프리 블록(FB)으로 한다.
7. 컴팩션하여 유효한 2i 트랙으로 구성된 1 논리 블록이 생기면, TFS(11b)의 선두로 이동시킨다.
8. 논리 블록 내의 유효 트랙을 다른 논리 블록에 카피하여, 무효 프리 블록(FB)을 만들 수 있는 경우는, 2i 트랙 미만 개수의 유효 트랙을 MSIB(11a)에 대해 트랙 단위로 추기 기록한다.
9. 컴팩션원(元)의 논리 블록을 무효 프리 블록(FB)으로 한다.
10. MS(11)에 할당되어 있는 논리 블록의 개수가 MS(11)로서 허용되는 블록 수의 상한치를 밑돌면 MS 컴팩션 처리를 종료한다.
FS(12)의 CIB 처리
다음으로, FS(12)에서의 CIB 처리에 관해 설명한다(단계 S340). WC(21)로부터 FSIB(12a)로의 클러스터 기록 처리에 의해 전체 페이지의 기록이 완료된 논리 블록이 FSIB(12a) 중에 만들어진 경우, FSIB(12a) 중의 이들 블록은 FSIB(12a)로부터 FS(12)에 대하여 이동한다. 이 이동에 따라 복수의 논리 블록으로 구성되는 FIFO 구조의 FS(12)로부터 오래된 논리 블록이 방출되는 상황이 발생한다.
FSIB(12a)로부터 FS(12)에 대한 방출 및 FS(12)로부터의 블록 방출은 구체적으로는 다음과 같이 실현된다.
1. FS/IS 논리 블록 관리 테이블(42)의 Valid 플래그(42f) 등을 참조함으로써, FS(12) 내에 무효가 된 논리 블록이 존재하는 경우, 그 블록을 무효 프리 블록(FB)으로 한다.
2. FSIB(12a)에서 풀이 된 블록을 FS(12)에 방출한다. 구체적으로는, 전술한 FS/IS 구조 관리 테이블(도시하지 않음)을 갱신하여, 해당 블록을 FSIB 관리하에서 FS 관리하로 옮긴다.
3. FS(12)에 할당되어 있는 논리 블록의 개수가 FS(12)로서 허용되는 블록수의 상한치를 초과하는 상황이 발생하는지의 여부를 판단하여, 발생하고 있는 경우에 이하의 방출을 실행한다.
4. 우선 방출 대상의 가장 오래된 논리 블록 중의 클러스터 데이터 가운데 IS(13)로 이동하지 않고 직접 MS(11)로 이동해야 하는 것을 결정한다(실제로는 MS 의 관리 단위가 트랙이기 때문에, 트랙 단위로의 결정).
(가) 방출 대상 논리 블록 중의 유효 클러스터를 페이지의 선두부터 순서대로 스캔한다.
(나) 클러스터가 속하는 트랙이 FS 중에 유효 클러스터를 몇 개 보유하고 있는지를 트랙 관리 테이블(30)의 FS 클러스터수(30f) 필드를 참조하여 검색한다.
(다) 트랙 내 유효 클러스터수가 소정의 임계값(예를 들어 2k-i개의 50%) 이상이었던 경우, 그 트랙을 MS로의 방출 후보로 한다.
5. MS(11)에 방출해야 하는 트랙을 MSIB(11a)에 대하여 기록한다.
6. 방출 트랙이 남아 있는 경우 다시 MSIB(11)로의 방출을 실행한다.
7. 상기 2∼4의 처리후에도 방출 대상 논리 블록에 유효한 클러스터가 존재하고 있는 경우, 이 논리 블록을 IS(13)로 이동시킨다.
FS(12)로부터 MSIB(11a)로의 방출이 발생했을 때에는, 그 직후 MS(11)에서의 전술한 CIB 처리가 실행된다(단계 S350).
IS(13)의 CIB 처리
다음으로, IS(13)에서의 CIB 처리에 관해 설명한다(단계 S360). 상기 FS(12)로부터 IS(13)로의 블록 이동에 의해 논리 블록이 IS(13)에 추가되지만, 이에 따라 복수개의 논리 블록으로 구성되는 IS(13)에 대하여 관리 가능한 블록수의 상한을 초과하는 상황이 발생한다. 이러한 상황이 발생한 경우, IS(13)에서는, 우선 MS(11)로의 1∼복수개의 논리 블록의 방출을 행한 후, IS 컴팩션을 실행한다. 구체 적으로는, 다음과 같은 절차를 실행한다.
1. IS(13)에 포함되는 트랙을 트랙 내의 유효 클러스터수×유효 클러스터 계수로 소트하여, 그 곱셈 값이 큰 트랙 2i+1개(2 논리 블록분)를 수집하여 MSIB(11a)에 방출한다.
2. 유효 클러스터수가 가장 적은 2i+1개의 논리 블록의 합계 유효 클러스터수가 예를 들어, 소정의 설정값인 2k개(1 논리 블록분) 이상 있는 경우는, 위의 단계를 반복한다.
3. 상기 방출을 행한 후, 유효 클러스터수가 적은 논리 블록으로부터 순서대로 클러스터를 2k개 수집하여 IS(13) 내에서 컴팩션을 행한다.
4. 컴팩션원(元)의 논리 블록 중 유효 클러스터가 없어진 것을 무효 프리 블록(FB)으로서 반환한다.
IS(13)로부터 MSIB(11a)로의 방출이 발생했을 때에는, 그 직후 MS(11)에서의 전술한 CIB 처리가 실행된다(단계 S370).
도 20은 각 구성 요소간의 데이터의 흐름에서의 입력과 출력의 조합 및 그 데이터의 흐름이 무엇을 트리거로 하여 발생하는지를 나타내는 도면이다. FS(12)는, 기본적으로는, WC(21)로부터의 클러스터 방출에 의해 데이터가 기록되지만, WC(21)로부터 FS(12)로의 방출에 부수하여 클러스터 내 섹터의 빈 곳을 채워야 하는 경우는(클러스터 빈 곳 채우기), FS(12), IS(13), MS(11)로부터의 데이터가 카 피된다. WC(21)에서는, WC 클러스터 관리 테이블(25)의 태그 중의 섹터 위치 비트맵(25b)에 의해 해당 클러스터 어드레스 중의 2(l-k)개의 섹터의 유무를 식별시킴으로써 섹터(512B) 단위의 관리를 하는 것이 가능하다. 이에 비해, NAND 메모리(10)에서의 기능 요소인 FS(12), IS(13)의 관리 단위는 클러스터이며, MS(11)의 관리 단위는 트랙이다. 이와 같이, NAND 메모리(10)에서의 관리 단위는 섹터보다 크기 때문에, WC(21)로부터 NAND 메모리(10)에 대하여 데이터를 기록할 때, 기록되는 데이터와 동일한 클러스터 어드레스의 데이터가 NAND 메모리(10) 중에 존재하는 경우, WC(21)로부터 NAND 메모리(10)에 기록되는 클러스터 중의 섹터와, NAND 메모리(10) 중에 존재하는 동일 클러스터 어드레스 내의 섹터를 머지하고 나서, NAND 메모리(10)에 기록할 필요가 있다.
이 처리가, 도 20에 나타낸 클러스터 내 섹터 빈 곳 채우는 처리(클러스터 빈 곳 채우기)와, 트랙 내 섹터 빈 곳 채우는 것(트랙 빈 곳 채우기)이며, 이러한 처리를 하지 않으면 데이터를 제대로 독출할 수 없게 된다. 따라서, WC(21)로부터 FSIB(12a) 또는 MSIB(11a)에 데이터를 방출할 때에는, WC 클러스터 관리 테이블(25)을 참조하고, 방출되는 클러스터에 대응하는 태그 중의 섹터 위치 비트맵(25b)을 참조하여, 섹터 위치 비트맵(25b)이 모두 "1"이 아닌 경우는, NAND 메모리(10)에 포함되는 동일 클러스터 또는 동일 트랙 중의 섹터와 머지하는, 클러스터내 섹터 빈 곳을 채우거나 또는 트랙 내 섹터 빈 곳 채우기를 실행한다. 이 처리에는, DRAM(20)의 작업 영역이 사용되고, DRAM(20)의 작업 영역으로부터 MSIB(11a)에 기록되거나, FSIB(12a)에 기록되거나 한다.
IS(13)는, 기본적으로는 FS(12)로부터의 블록 방출에 의해 데이터가 기록되거나(Move), IS 내부의 컴팩션에 의해 데이터가 기록된다. MS(11)는 모든 개소로부터 데이터가 기록될 수 있다. 그 때, MS(11)는, 트랙 단위로밖에 데이터를 기록할 수 없기 때문에, MS 자신의 데이터에 의한 빈 곳 채우기가 발생할 수 있다. 또, 트랙 단위의 기록을 행할 때에는, 다른 블록에 있는 단편화된 데이터도 수동 머지에 의해 기록되게 된다. 또한 MS(11)는 MS 컴팩션에 의한 기록도 있다. 수동 머지에서는, WC(21), FS(12) 또는 IS(13)의 3개의 구성 요소 중 1개의 구성 요소로부터 MS(11)로의 트랙 방출 또는 논리 블록 방출(2i 트랙분의 방출)이 발생했을 때, 1개의 구성 요소에서의 방출 대상 트랙(또는 논리 블록)에 포함되는 다른 2개의 구성 요소내의 유효 클러스터 및 MS(11) 내의 유효 클러스터가 DRAM(20)의 작업 영역에 모여, DRAM(20)의 작업 영역으로부터 1 트랙분의 데이터로서 MSIB(11a)에 기록된다.
다음으로, 본 실시형태를 보다 상세히 설명한다. 도 21은 도 6에 나타낸 NAND 메모리(10)의 기록 처리에 관한 보다 상세한 기능 구성을 나타내는 도면이다. 중복 설명은 생략한다.
ㆍFS 구성
FS부(12Q)는 FSIB(12a)와 FS(12)로 구성되어 있다. FS(12)는 다수의 논리 블록분의 용량을 갖고, 논리 블록 단위로 FIFO 구조가 관리된다. FS(12)의 전단에는, WC(21)로부터 방출된 데이터가 입력되는 FS 입력 버퍼(FSIB; 12a)가 설치되어 있다. FSIB(12a)는 FS 풀 블록 버퍼(FSFB; 12aa)와, FS 추기 버퍼(FS 추기 IB; 12ab)를 포함한다. FSFB(12aa)는, 1∼복수개의 논리 블록분의 용량을 갖고, 또 FS 추기 IB(12ab)도 1∼복수개의 논리 블록분의 용량을 갖는다. WC(21)로부터의 방출 데이터가 1 논리 블록분 있으면 FSFB(12aa)에 대한 논리 블록 단위의 데이터 카피가 행해지고, 그렇지 않으면 FS 추기 IB(12ab)에 대하여 논리 페이지 단위의 추기 기록이 행해진다.
ㆍIS 구성
IS부(13Q)는 IS(13)와, IS 입력 버퍼(ISIB; 13a)와, IS 컴팩션 버퍼(13c)로 구성되어 있다. ISIB(13a)는 1∼복수개의 논리 블록분의 용량을 갖고, IS 컴팩션 버퍼(13c)는 예를 들어 1 논리 블록분의 용량을 가지며, IS(13)는 다수의 논리 블록분의 용량을 갖는다. IS(13)는, 예를 들어 논리 블록 단위로 FS(12)와 마찬가지로 FIFO 구조가 관리된다. IS 컴팩션 버퍼(13c)는 IS부(13Q)에서의 컴팩션을 행하기 위한 버퍼이다.
전술한 바와 같이, IS부(13Q)는 FS부(12Q)와 마찬가지로 클러스터 단위로 데이터를 관리한다. FS부(12Q)로부터 IS부(13Q)에 대하여 논리 블록의 이동, 즉 FS(12)로부터의 방출이 발생하면, 이전 FS부(12Q)의 관리 대상이었던 방출 대상 논리 블록은 포인터를 바꾸는 것에 의해 IS부(13Q)[상세하게는 ISIB(13a)]의 관리 대상 블록이 된다. 이 FS부(12Q)로부터 IS부(13Q)로의 논리 블록의 이동에 의해, IS(13)의 블록수가 소정의 상한치를 초과하면, IS(13)로부터 MS부(11Q)로의 데이터 방출 및 IS 컴팩션 처리가 실행되어, IS부(13Q)의 블록수는 규정치로 되돌아간다.
ㆍMS 구성
MS부(11Q)는 MSIB(11a)와 트랙 전단 버퍼(TFS; 11b)와 MS(11)로 구성되어 있다. MSIB(11a)는 1∼복수개(이 실시형태에서는 4개)의 MS 풀블록 입력 버퍼(이하 MSFB; 11aa)와, 1∼복수개(이 실시형태에서는 2개)의 추기 입력 버퍼(이하 MS 추기 IB; 11ab)를 포함한다. 1개의 MSFB(11aa)는 1 논리 블록분의 용량을 갖는다. MSFB(11aa)는 논리 블록 단위의 기록 시에 이용된다. 1개의 MS 추기 IB(11ab)는 논리 블록분의 용량을 갖는다. MS 추기 IB(11ab)는 트랙 단위의 추기 기록 시에 이용된다.
MSFB(11aa)에는, WC(21)로부터 방출된 논리 블록, 또는 FS(12)로부터 방출된 논리 블록, 또는 IS(13)로부터 방출된 논리 블록이 카피된다. 1개의 MSFB(11aa)에 카피된 논리 블록은 TFS(11b)를 거치지 않고 MS(11)로 직접 이동한다. 이 MS(11)로의 이동후에는 프리 블록(FB)이 MSFB(11aa)로서 할당된다.
MS 추기 IB(11ab)에는, WC(21)로부터 방출된 트랙, 또는 FS(12)로부터 방출된 트랙이 추기적으로 카피된다. 이러한 트랙 단위로 추기 기록되는 MS 추기 IB(11ab) 중에서 풀이 된 논리 블록은 TFS(11b)로 이동한다. 이 TFS(11b)로의 이동후에는 프리 블록(FB)이 MS 추기 IB(11ab)로서 할당된다.
TFS(11b)는, 전술한 바와 같이 다수의 논리 블록분의 용량을 갖고, MS 추기 IB(11ab)와 MS(11) 사이에 개재된 FIFO 구조를 갖는 버퍼이다. FIFO 구조를 갖는 TFS(11b)의 입력측에는, 트랙 단위로 추기 기록되는 MS 추기 IB(11ab) 중에서 풀이 된 논리 블록이 이동하고, 또 MS(11) 내의 컴팩션 처리에 의해 형성된 논리 블록이 MS 컴팩션 버퍼(11c)로부터 이동한다. MS 컴팩션 버퍼(11c)는 MS(11)에서의 컴팩션을 행하기 위한 버퍼이다. MS(11) 내부의 컴팩션 처리에 의해, MS 내 트랙이 MS 컴팩션 버퍼(11c)에 기록될 때에는, 기록 대상 트랙에 포함되는 WC(21), FS부(12Q), IS부(13Q) 내의 유효 클러스터가 DRAM(20)의 작업 영역을 통해 MS 컴팩션 버퍼(11c)에 기록되는, 수동 머지가 행해진다. 본 실시형태에서는, MSIB(11a) 및 TFS(11b)에 등록되어 있는 논리 블록은 컴팩션 대상에 포함시키지 않는다.
도 22는 데이터 관리부(120)의 보다 상세한 기능 구성을 나타내는 도면이다. 데이터 관리부(120)는 전술한 바와 같이 DRAM(20)에 기억된 데이터를 관리하는 DRAM층 관리부(120a)와, NAND 메모리(10)에 기억된 데이터를 관리하는 논리 NAND층 관리부(120b)와, NAND 메모리(10)를 물리 기억 디바이스로서 관리하는 물리 NAND층 관리부(120c)로 구성된다.
DRAM층 관리부(120a)는 RC 클러스터 관리 테이블(23), WC 클러스터 관리 테이블(25), WC 트랙 관리 테이블(24)을 포함하고, 이들 관리 테이블에 기초하여 DRAM층을 관리한다. 논리 NAND층 관리부(120b)는, 트랙 관리 테이블(30), MS 블록 관리 테이블(35), FS/IS 관리 테이블(40), FS/IS 논리 블록 관리 테이블(42), FS/IS 내 클러스터 관리 테이블(44) 외에, MS 구조 관리 테이블(60), FS/IS 구조 관리 테이블(65)을 포함하고, 이들 관리 테이블에 기초하여 NAND 메모리(10)의 논리 NAND층을 관리한다. 물리 NAND층 관리부(120c)는, 논리-물리 변환 테이블(50) 외에, 배드 블록 관리 테이블(BB 관리 테이블; 200), 예약 블록 관리 테이블(RB 블 록 관리 테이블; 210), 프리 블록 관리 테이블(FB 관리 테이블; 220), 액티브 블록 관리 테이블(AB 관리 테이블; 230)을 포함하고, 이들 관리 테이블을 사용하여 NAND 메모리(10)의 물리 NAND층을 관리한다.
ㆍ물리 NAND층
우선 물리 NAND층에 관해 설명한다. 전술한 바와 같이, 32비트 배속 모드에서는 4ch(ch0, ch1, ch2, ch3)를 병렬로 동작시키고, 또한 NAND 메모리 칩이 구비하는 배속 모드를 이용하여 소거/기록/독출한다. 도 23에 나타내는 바와 같이, 4개의 병렬 동작 요소(10a∼10d) 내의 각 NAND 메모리 칩은, 예를 들어 플레인 0, 플레인 1의 2개의 영역(District)으로 분할되어 있다. 분할수는 2에 한정되지 않는다. 플레인 0 및 플레인 1은 서로 독립된 주변 회로(예를 들어, 로우 디코더, 컬럼 디코더, 페이지 버퍼, 데이터 캐쉬 등)를 포함하고, NAND 컨트롤러(113)로부터 입력되는 커맨드에 기초하여, 동시에 소거/기록/독출을 행하는 것이 가능하다. NAND 메모리 칩의 배속 모드에서는, 상기 플레인 0 및 플레인 1을 병렬 제어함으로써 고속 기록을 실현하고 있다.
물리 블록 사이즈는 512 kB이기 때문에, 32비트 배속 모드에서는, 4ch의 병렬 동작 및 2개의 플레인에 대한 동시 액세스에 의해, 그 소거 단위는 512 kB×4×2=4 MB가 된다. 즉, 이 32비트 배속 모드에서는, 결과적으로 8플레인이 병렬 동작하게 된다.
도 24는 논리-물리 변환 테이블(50)의 다른 예를 나타내는 도면이다. 도 24에 나타내는 논리-물리 변환 테이블(50)은, 도 17에 나타낸 논리-물리 변환 테이 블(50)에 대하여, 논리 블록 ID(50a)에 대응하는 논리 블록이 소거된 시각을 나타내는 소거 시각(50e) 필드가 더 추가되어 있다. 소거 시각(50e)으로는, 예를 들어 NAND 메모리 칩 내의 논리 블록에 대하여 소거 동작이 행해진 횟수를 계측함으로써 얻어지는 값, 또는 NAND 컨트롤러(112)의 통전 시간 등을 이용하면 된다. 소거 시각(50e)은 후술하는 FB 관리 테이블(220)에서의 프리 블록(FB) 관리에 이용된다.
BB 관리 테이블(200)은 물리 블록(512 kB) 단위로 배드 블록(BB)을 관리하기 위한 테이블이다. BB 관리 테이블(200)은 도 25에 나타내는 바와 같이, 예를 들어, 4(채널)×2(플레인/채널)개의 채널 내 플레인마다 (물리 블록수/플레인)×(NAND 메모리 칩 개수/1 병렬 동작 요소) 개수분의 물리 블록에 관한 정보를 갖는 2차원 배열 형식으로 구성되어 있고, 각 엔트리에는 각 물리 블록에 대한 물리 블록 ID(200a)가 유지되어 있다.
본 실시형태의 경우, 1 NAND 메모리 칩은 2 GB 사이즈이고, 첫번째 칩의 플레인 0에는 「0」∼「2047」의 물리 블록 ID가 할당되고, 첫번째 칩의 플레인 1에는 「2048」∼「4095」의 물리 블록 ID가 할당된다. 물리 NAND층 관리부(120c)는, 사용중에 발생한 배드 블록(BB)을 BB 관리 테이블(200)에 등록할 때에는, 소트는 하지 않고 대응하는 채널 내 플레인 ID(ID#0∼ID#7)의 최후미 유효 엔트리의 직후에 순서대로 추가한다.
RB 관리 테이블(210)은, 8개의 물리 블록 단위(512 kB)로 4 MB 논리 블록을 형성할 때 남은 블록[예약 블록(RB)]을 관리하기 위한 테이블이며, BB 관리 테이블(200)과 동일한 포맷으로 관리된다. 대응하는 채널 내 플레인 ID마다 FIFO 관리 로 함으로써, 가장 오래전에 등록된 예약 블록부터 우선적으로 이용한다.
FB 관리 테이블(220)은, 4 MB 논리 블록 단위로 현재 용도 미할당의 프리 블록(FB)을 관리하기 위한 테이블이며, 프리 블록(FB)이 된 순서로 소트된 FIFO 형식의 리스트이다. 각 엔트리는 논리 블록 ID를 유지한다. 컴팩션 처리 등에 의해, FB 관리 테이블(220)에 반환된 프리 블록(FB)은 리스트의 최후미에 추가되고, 프리 블록(FB) 할당은 리스트의 선두 블록을 반환함으로써 행한다.
FB 관리 테이블은, 도 26에 나타내는 바와 같이, 반환 FIFO 리스트(220a)와, 할당 리스트(220b)의 2단 구성으로 되어 있다. 반환 FIFO 리스트(220a)는, 소거 시각(50e) 순으로 정렬되어 있고, 할당 리스트(220b)는 소거 횟수(50c)가 적은 논리 블록일수록 리스트의 선두에 위치한다. 이것은, 짧은 시간 간격으로 소거 동작을 반복하는 것을 방지하기 위한 구성이다. 불필요해져 FB 관리 테이블(220)에 반환된 논리 블록은 반환 FIFO 리스트(220a)의 최후미에 추가되어 일정 기간 여기에 유지된다.
반환 FIFO 리스트(220a)로부터 밀려나온 논리 블록은, 그 소거 횟수(50c)에 따라 할당 리스트(220b)의 도중에 삽입된다. 논리 NAND층 관리부(120b)로부터 프리 블록(FB)의 할당이 요구되면, 논리 NAND층 관리부(120c)는 할당 리스트(220b)의 선두로부터 추출하여 할당한다.
상기 FB 관리 테이블에 의해, 모든 논리 블록의 소거 횟수, 소거 간격이 대략 똑같아지도록, 소거하는 논리 블록을 균등하게 분산시키는(웨어 레벨링 처리) 것이 가능해진다. NAND형 플래시 메모리의 수명은, 소거 횟수 외에 소거 처리의 간 격에 따라 달라지며, 그 간격이 길수록 리텐션 특성이 양호하여 수명이 연장되는 것이 알려져 있다. 이것은, 소거 간격이 짧으면 리텐션 특성이 나빠 수명이 손상되는 것도 나타낸다. 또, 짧은 간격으로 기록했다 하더라도, 상응하는 장기간 소거를 행하지 않으면 리텐션 특성이 회복되는 것도 알려져 있다.
AB 관리 테이블(230)은, 프리 블록(FB)으로부터 할당된, 용도가 할당된 논리 블록[액티브 블록(AB)]의 리스트이며, FB 관리 테이블(220)과 마찬가지로, 각 엔트리는 논리 블록 ID를 유지한다. 등록 순서가 오래된 논리 블록일수록 선두에 위치하게 된다. AB 관리 테이블은 예를 들어 리프레시 처리에 사용된다.
리프레시 처리란, 기록한 데이터의 경년 변화나 독출 처리에 따른 데이터 파손인 리드 디스터브(read disturbance)의 영향으로, SSD(100)의 오류 정정 능력을 초과하는 오류가 발생하는 것을 방지하기 위한 기술이다. 구체적으로는, 예를 들어 오류 정정 능력을 초과하는 오류가 발생하기 전에, 기억되어 있는 데이터를 독출하여 오류를 정정하고, 그 후 다시 NAND형 플래시 메모리에 데이터를 다시 기록하는 처리를 행한다. 예를 들어, 독출 횟수(50d)가 많은 블록, AB 관리 테이블(230)의 선두 블록 등을 리프레시 처리의 감시 대상으로 할 수 있다.
물리 NAND층 관리부(120c)는 이하와 같은 논리 블록-물리 블록 관리를 행한다. 우선, 도 27을 사용하여 논리-물리 변환 테이블(50)을 사용한, 논리 블록 ID와 8개의 물리 블록 ID와의 대응 관계에 관해 설명한다.
전술한 바와 같이, 논리-물리 변환 테이블(50)의 물리 블록 ID(50b) 필드에는, 논리-물리 변환 테이블(50)의 인덱스인 논리 블록 ID(50a)에 대응된 8개의 물 리 블록 ID가 등록되어 있다. 도 27은 NAND 메모리(10)의 논리 블록 ID와 물리 블록 ID의 대응 관계를 나타내는 도면이며, 1개의 구획이 1 물리 블록을 나타낸다. 각 물리 블록에 물리 블록 ID가 할당되어 있다. 논리 블록(L0)은, 예를 들어 1행 3열, 2행 2열, 3행 2열, 4행 2열, 5행 2열, 6행 2열, 7행 2열, 8행 3열의 8개의 물리 블록으로 구성되어 있다. 또, 파선(BL1)로 둘러싸인 논리 블록(L1)은, 예를 들어, 1행 4열, 2행 3열, 3행 3열, 4행 3열, 5행 3열, 6행 3열, 7행 3열, 8행 4열의 8개의 물리 블록으로 구성되어 있는 것으로 한다.
그 후, 예를 들어, 논리 블록(L1)의 4행 3열의 물리 블록이, 기억 영역으로서 사용할 수 없는 배드 블록(BB)으로서, BB 관리 테이블(200)에 등록된 것으로 한다. 이것을 검지한 물리 NAND층 관리부(120c)는, RB 관리 테이블(210)로부터, 이 배드 블록(BB)으로서 등록된 물리 블록과 동일 채널이며 동일 플레인인 예약 블록(RB)을 그 배드 블록(BB)에 대한 교체 후보로서 선택한다. 도 27의 경우는, 인접하는 4행 4열의 물리 블록[예약 블록(RB)]이 4행 3열의 BB에 대한 교체 후보로서 선택되어 있다.
물리 NAND층 관리부(120c)는, 논리-물리 변환 테이블(50)의 논리 블록(L1)에 대응하는 논리 블록 ID(50a)의 엔트리를 검색하고, 이 엔트리 중의 물리 블록 ID(50b) 필드에 포함되는 8개의 물리 블록 ID 가운데 4행 3열에 대응하는 배드 블록(BB)의 물리 블록 ID를, RB 관리 테이블(210)로부터 선택한 4행 4열의 RB에 대응하는 물리 어드레스 ID로 변경한다. 이에 따라, 그 후 논리 블록(L1)은 일점쇄선으로 둘러싸인 1행 4열, 2행 3열, 3행 3열, 4행 4열, 5행 3열, 6행 3열, 7행 3열, 8 행 4열의 8개의 새로운 물리 블록의 조합으로 구성되게 된다. 이 논리 블록(L1)의 논리 블록 ID가 「L1」인 것으로 한다.
그 후, 물리 NAND층 관리부(120c)는, FB 관리 테이블(220)로부터 새로운 프리 블록(FB)을 확보한다. 이 확보한 프리 블록(FB)의 논리 블록 ID가 「L3」인 것으로 한다. 물리 NAND층 관리부(120c)는, 논리-물리 변환 테이블(50)을 사용하여 논리 블록 ID의 교체를 실행한다. 구체적으로는, 논리 블록 ID 「L1」에 대하여, 논리 블록 ID가 「L3」인 새로운 프리 블록(FB)에 대응된 8개의 물리 블록을 대응시키고, 또한 논리 블록 ID 「L3」에 대하여, 전술한 물리 블록의 조합이 변경된 일점쇄선으로 둘러싸인 1행 4열, 2행 3열, 3행 3열, 4행 4열, 5행 3열, 6행 3열, 7행 3열, 8행 4열의 8개의 물리 블록을 대응시킨다. 소거 횟수(50c), 독출 횟수(50d), 소거 시각(50e)도 논리 블록 ID 교체에 따라 교체한다. 그 후, 논리 블록 ID 「L3」을 FB 관리 테이블(220)에 등록한다.
한편, 배드 블록(BB)에 대하여 교체 가능한 예약 블록(RB)이 존재하지 않는 경우에는 이하와 같은 처리를 행한다. 예를 들어, 논리 블록(L1)의 4행 3열의 물리 블록이 배드 블록(BB)으로서 BB 관리 테이블(200)에 등록된 것으로 하고, 또한 이 배드 블록(BB)에 대해서는 동일 채널 및 동일 플레인내에 예약 블록(RB)이 존재하지 않는 경우에는, 우선 논리 블록(L1) 내의 4행 3열을 제외한, 1행 4열, 2행 3열, 3행 3열, 5행 3열, 6행 3열, 7행 3열, 8행 4열의 7개의 물리 블록을 RB 관리 테이블(210)에 등록한다. 그 후, 상기와 마찬가지로 FB 관리 테이블(220)로부터 새로운 프리 블록(FB)을 확보하고, 상기와 동일한 논리 블록 ID의 교체를 실행한 후, FB 관리 테이블(220)로부터 취득한 논리 블록 ID를 사용 불가로 한다.
이와 같이, 물리 NAND층 관리부(120c)는, 배드 블록(BB)이 발생한 경우라도, 논리 블록 ID를 교체하기 때문에, 논리 NAND층 관리부(120b)에서 사용하는 논리 블록 ID는, 배드 블록(BB)의 발생 전후에서 변화하지 않는다. 따라서, 복수의 물리 블록의 적어도 하나를 배드 블록으로서 등록하는 경우라 하더라도, LBA 논리 어드레스와 논리 블록의 대응 관계는 변경되지 않고, 논리 NAND층 관리부(120b)에서의 관리 테이블의 재기록의 오버헤드를 회피할 수 있다.
다음으로, 32비트 배속 모드에서의 소거 처리에 관해 설명한다. 물리 NAND층 관리부(120c)는, NAND 메모리(10)의 데이터가 논리 블록 단위로 소거될 때마다, 도 24에 나타내는 논리-물리 변환 테이블(50)의 소거된 논리 블록에 대응하는 논리 블록 ID 중의 소거 횟수(50c) 필드를 1 카운트업하고, 소거 시각(50e)을 최신 데이터로 갱신한다.
ㆍ논리 NAND층
다음으로, 도 28, 도 29를 사용하여 논리 NAND층에서의 관리에 사용되는 MS 구조 관리 테이블(60) 및 FS/IS 구조 관리 테이블(65)에 관해 설명한다. 도 28에 나타내는 MS 구조 관리 테이블(60)은, MS부(11Q)의 구조를 관리하기 위한 영역과, 상태 정보를 보존하기 위한 영역을 갖는다. MS 구조 관리 테이블(60)은, MSFB(11aa), MS 추기 IB(11ab), TFS(11b)로서 할당된 논리 블록 ID를 관리하는 MS 버퍼 관리 테이블(61)과, MS 컴팩션 시의 소트 처리를 고속화하기 위해, 유효 트랙수가 적어진 논리 블록 ID를 유지하는 유효 트랙수별 논리 블록 ID 리스트(62)와, 상태 정보로서의 최대 논리 블록수(MBL) 및 유효 논리 블록수(VBL)를 관리하는 영역(63, 64)을 구비한다.
MS 구조 관리 테이블(60)에서는, MSFB(11aa)용, MS 추기 IB(11ab)용, TFS(11b)용으로 각각 소요 엔트리수의 고정 필드(61a∼61c)가 준비되고, 각 고정 필드(61a∼61c)에 논리 블록 ID가 기록된다. TFS(11b)용 필드(61c)는 링크드 리스트 구조를 가지며, FIFO 구조를 갖는 TFS(11b)에 대한 FIFO 관리가 행해진다.
유효 트랙수별 논리 블록 ID 리스트(62)에서는, 유효 트랙수 1개의 논리 블록용으로서 소요수의 엔트리가 준비되며, 유효 트랙수 2개의 논리 블록용으로서 소요수의 엔트리가 준비되고, …, 유효 트랙수 2i-1개의 논리 블록용으로서 소요수의 엔트리가 준비되며, 각 엔트리에는 논리 블록 ID가 기록된다. MS 논리 블록 관리 테이블(35)의 유효 트랙수(35c) 필드가 서치됨으로써 유효 트랙수별 논리 블록 ID 리스트(62)는 항상 최신 상태로 갱신된다. 유효 트랙수별 논리 블록 ID 리스트(62)에는, MSIB(11a), TFS(11b)로서 MS 버퍼 관리 테이블(61)에 등록되어 있는 논리 블록은 엔트리되지 않는다.
상태 정보로서의 최대 논리 블록수(MBL)용 고정 필드(63)에는, MS부(11Q)가 취득하는 것을 허용되어 있는 논리 블록수인 최대 논리 블록수(MBL)가 기록된다. 상태 정보로서의 유효 논리 블록수(VBL)용 고정 필드(64)에는, MS부(11Q)로서 현재 관리되는 논리 블록수로서의 유효 논리 블록수(VBL)가 기록된다.
도 29에 나타내는 FS/IS 구조 관리 테이블(65)은 FS부(12Q) 및 IS부(13Q)의 구조를 관리하기 위한 영역을 갖는다. FS/IS 구조 관리 테이블(65)은, FSIB(12a) 및 FS 추기 IB(12ab)로서 할당된 논리 블록 ID를 관리하는 FS 입력 버퍼 관리 테이블(66)과, FS(12)의 FIFO 구조를 관리하는 FS FIFO 관리 테이블(67)과, ISIB(13a)로서 할당된 논리 블록 ID를 관리하는 IS 입력 버퍼 관리 테이블(68)과, IS(13)의 FIFO 구조를 관리하는 IS FIFO 관리 테이블(69)을 포함한다.
FS 입력 버퍼 관리 테이블(66)은, FSFB(12aa)용, FS 추기 IB(12ab)용으로 각각 소요 엔트리수의 고정 필드(66a, 66b)가 준비되고, 각 고정 필드(66a, 66b)에 FS/IS 논리 블록 관리 테이블(42)의 인덱스인 FS/IS 블록 ID(42a)가 등록된다. IS 입력 버퍼 관리 테이블(68)은, ISIB(13a)용으로 소요 엔트리수의 고정 필드가 준비되고, 각 고정 필드에 FS/IS 블록 ID(42a)가 등록된다. FS FIFO 관리 테이블(67)에는, FS(12)의 FIFO 구조를 형성하는 논리 블록수분의 엔트리가 고정 필드에 준비되고, FS FIFO 관리 테이블(67)의 각 고정 필드에는 FS/IS 블록 ID(42a)가 등록된다. IS FIFO 관리 테이블(69)에는, IS(13)의 FIFO 구조를 형성하는 논리 블록수분의 엔트리가 고정 필드에 준비되고, 각 고정 필드에는 FS/IS 블록 ID(42a)가 등록된다.
다음으로, 앞서 도 19를 사용하여 설명한, 2 스테이지(WCF 처리 및 CIB 처리)로 분할된 기록 처리가 실행될 때의, WC(21)로부터 MSIB(11a)로의 카피 처리에 따르는 각 관리 테이블의 갱신 처리를 설명한다. 여기서는, WC(21)로부터 MS 추기 IB(11ab)로의 트랙 단위의 카피가 발생한 경우에 관해 설명한다. DRAM층 관리부(120a)에서는, WC 트랙 관리 테이블(24)을 선두부터 순서대로 체크하고, 방출 확정 트랙에 대응하는 논리 트랙 어드레스(24a)가 등록된 트랙 엔트리 중의 웨이-라 인 비트맵(24c)을 참조하여, 웨이-라인 비트맵(24c)의 m×n의 엔트리 중의 Valid 비트가 "1"인 엔트리에 대응하는 WC 클러스터 관리 테이블(25) 중의 엔트리에서의 상태 플래그(25a)를 Valid로부터 NAND로의 방출 대기로 하고, 논리 NAND층 관리부(120b)에 대하여 방출 요구를 통지한다.
한편, 논리 NAND층 관리부(120b)에서는, 도 28에 나타내는 MS 구조 관리 테이블(60)의 MS 버퍼 관리 테이블(61) 및 도 14에 나타내는 MS 논리 블록 관리 테이블(35)을 참조하여, MS 추기 IB(11ab)의 상태를 체크한다. 즉, MS 버퍼 관리 테이블(61)의 MS 추기 IB용 필드(61b)로부터 MS 추기 IB(11ab)가 이미 존재하고 있다고 판단되었을 때에는, MS 추기 IB용 필드(61b)에 등록되어 있는 논리 블록 ID에 관한 기록 가능 트랙수에 관한 정보를 MS 논리 블록 관리 테이블(35)의 유효 트랙수(35c) 필드로부터 취득하여, 그 취득한 기록 가능 트랙수를 DRAM층 관리부(120a)에 통지한다.
또, 논리 NAND층 관리부(120b)는, MS 버퍼 관리 테이블(61)의 MS 추기 IB용 필드(61b)로부터 MS 추기 IB(11ab)가 존재하지 않는다고 판단되었을 때에는, 물리 NAND층 관리부(120c)에 대하여 프리 블록(FB)의 획득을 요구하여, 프리 블록(FB)을 그 FB로서 할당된 논리 블록 ID와 함께 취득한다. 그리고, 취득한 프리 블록(FB)의 기록 가능 트랙수 2i를 DRAM층 관리부(120a)에 통지한다.
DRAM층 관리부(120a)에서는, 논리 NAND층 관리부(120b)로부터 통지된 기록 가능 트랙수만큼 WC 트랙 관리 테이블(24)로부터 트랙을 선택하고, 또한 전술한 트 랙 내 섹터 빈 곳 채우기와 수동 머지의 실행 여부를 판단한다. 여기서는, 트랙 내 섹터 빈 곳 채우기를 할 필요는 없는 것으로 한다. DRAM층 관리부(120a)는, 방출하는 트랙이 NAND 메모리(10)에 존재하고 있는지의 여부를 체크하여 수동 머지의 실행 여부를 조사하기 위해, 논리 NAND층 관리부(120b)에 대하여 방출을 행하는 논리 트랙 어드레스 등의 소요 정보를 통지한다.
이 통지를 받으면, 논리 NAND층 관리부(120b)는, 트랙 관리 테이블(30)의 인덱스인 논리 트랙 어드레스(30a), 필요한 경우는 FS/IS 관리 테이블(40)을 더 검색하여, NAND 메모리(10)측에 방출을 행하는 논리 트랙 어드레스와 동일한 논리 트랙이 존재하고 있는지를 서치하여, 이 서치 결과를 물리 NAND층 관리부(120c)에 통지한다. 이것에 의해, 물리 NAND층 관리부(120c)에 의해, 수동 머지를 수반하는 또는 수동 머지를 수반하지 않는 WC(21)로부터 MS 추기 IB(11ab)로의 방출이 행해진다.
물리 NAND층 관리부(120c)로부터 WC(21)→MS 추기 IB(11ab)의 방출 종료가 통지되면, 논리 NAND층 관리부(120b)는, MS 추기 IB(11ab)로서 새로운 프리 블록(FB)을 물리 NAND층 관리부(120c)로부터 취득한 경우는, 물리 NAND층 관리부(120c)에서 제공된 프리 블록(FB)의 논리 블록 ID에 대응하는 MS 논리 블록 관리 테이블(35)의 엔트리의 Valid 플래그(35e)를 Valid로 하고, MS 버퍼 관리 테이블(61)의 MS 추기 IB용 필드(61b)에 논리 블록 ID를 등록하여, MS 구조 관리 테이블(60)의 유효 논리 블록수(VBL)를 인크리먼트한다.
또, 논리 NAND층 관리부(120b)는 트랙 관리 테이블(30)을 갱신한다. 즉, WC(21)로부터 MS 추기 IB(11ab)에 방출된 트랙에 대응하는 논리 트랙 어드레 스(30a)의 엔트리에 대하여, 클러스터 비트맵(30b), 논리 블록 ID(30c) 및 논리 블록 내 트랙 위치(30d) 등의 소요 정보를 등록한다.
수동 머지가 행해지지 않은 경우는, 전술한 바와 같이, 트랙 관리 테이블(30)의 대응하는 논리 트랙 엔트리에 소요 정보를 등록한다. 또, WC(21)로부터 방출된 새로운 트랙에 관한 데이터를, MS 논리 블록 관리 테이블(35)의 기록을 행한 논리 블록 ID에 대응하는 엔트리에 대하여 등록한다. MS 논리 블록 관리 테이블(35)로의 등록으로서는, MS 논리 블록에 저장된 트랙에 대응하는 트랙 관리 테이블(30)의 인덱스로서의 논리 트랙 어드레스[트랙 관리 포인터(35b)]의 갱신과, 유효 트랙수(35c)의 갱신과, 기록 가능 선두 트랙(35d)의 갱신 등이 있다.
WC(21)와 MS(11)와의 수동 머지가 행해졌다고 한다면, 트랙 관리 테이블(30) 중의 머지원(元) 트랙에 대응하는 논리 트랙 어드레스(30a)의 엔트리 중의 논리 블록 ID(30c) 및 논리 블록 내 트랙 위치(30d) 등의 소요 정보가 갱신된다. 구체적으로는, 논리 블록 ID(30c)가 MS(11)에 존재하고 있었을 때의 논리 블록 ID로부터 MS 추기 IB(11ab)에 대응하는 논리 블록 ID로 변경되고, 논리 블록 내 트랙 위치(30d)가 추기 기록 상태에 따라 변경된다.
또한, MS 논리 블록 관리 테이블(35) 중의 머지원(元)의 논리 블록에 대응하는 엔트리에서의 트랙 관리 포인터(35b) 필드의 해당 개소를 삭제하여 유효 트랙수(35c)를 디크리먼트하고, 또한 MS 구조 관리 테이블(60)의 유효 트랙수별 논리 블록 ID 리스트(62)를 갱신한다. 머지원(元)의 논리 블록에 대응하는 엔트리에서의 유효 트랙수(35c)가 디크리먼트에 의해 0이 된 경우는, MS 구조 관리 테이블(60)의 유효 논리 블록수(VBL)를 디크리먼트하여, 물리 NAND층 관리부(120c)에 대하여 이 기록 불가능한 무효 프리 블록(FB)을 반환한다. 그리고, 이 반환된 논리 블록에 대응하는 엔트리의 Valid 플래그(35e)를 Invalid로 한다. 또한, 전술한 바와 동일하게 하여, WC(21)로부터 방출된 새로운 트랙에 관한 데이터를 MS 논리 블록 관리 테이블(35)에 등록한다.
또, 물리 NAND층 관리부(120c)로부터 WC(21)→MS 추기 IB(11ab)의 방출 종료가 통지되었을 때, 논리 NAND층 관리부(120b)는, DRAM층 관리부(120a)에 대하여 방출 종료를 통지한다. 이 통지를 받은 DRAM층 관리부(120a)에서는, WC 클러스터 관리 테이블(25) 중의 방출된 트랙에 소속되는 전체 클러스터에 대응하는 엔트리 중의 상태 플래그(25a)는 Invalid(사용 가능)가 되고, 그 후 이들 엔트리에 대한 기록이 가능해진다. 또한, WC 트랙 관리 테이블(24) 중의 방출된 트랙에 대응하는 리스트는, 예를 들어 직전 리스트의 넥스트 포인터(24d)가 변경 또는 삭제되어 무효화된다.
다음으로, CIB 처리에 관해 설명한다. WCF 처리가 종료하면, WCF 처리에 의해 기록된 FSIB(12a)의 데이터를 FS(12)로 이동하는 처리와, WCF 처리에 의해 기록된 MSIB(11a)의 데이터를 MS(11) 또는 TFS(11b)로 이동하는 처리 등을 포함하는 CIB 처리가 실행된다. 이하, 도 30의 흐름도를 사용하여 CIB 처리의 상세한 절차에 관해 설명한다.
ㆍMS부(11Q)의 CIB 처리
우선, 도 19의 단계 S330에서 설명한 MS부(11Q)에서의 1회째 CIB 처리에 관 해 상술한다. 논리 NAND층 관리부(120b)는, MS 구조 관리 테이블(60)의 MS 버퍼 관리 테이블(61)의 MSFB용 필드(61a), MS 추기 IB용 필드(61b)에 등록되어 있는 논리 블록 ID에 관한 유효 트랙수의 정보를 MS 논리 블록 관리 테이블(35)의 유효 트랙수(35c) 필드로부터 취득하고, MSIB(11a)의 MSFB(11aa) 또는 MS 추기 IB(11ab)에 전(全)트랙 기록이 완료된 풀 블록이 하나 이상 존재하는지의 여부를 조사하여(단계 S400), MSIB(11a)에 풀 블록이 하나 이상 존재하는 경우에 이하의 처리를 행한다. 단계 S400의 판정이 No인 경우는, 절차는 단계 S440로 이행한다.
단계 S400의 판단이 Yes인 경우, 논리 NAND층 관리부(120b)는, MS 논리 블록 관리 테이블(35)의 유효 트랙수(35c)를 참조함으로써, MS 내에 유효 트랙수(35c)가 0이 된 무효 논리 블록이 존재하는지의 여부를 조사하여, MS 내에 무효 논리 블록이 존재하는 경우, 그 무효 논리 블록을 물리 NAND층 관리부(120c)에 반환한다(단계 S405). 반환된 무효 논리 블록에 대응하는 MS 논리 블록 관리 테이블(35)의 엔트리는 Valid 플래그(35e)가 Invalid로 되어, MS 구조 관리 테이블(60)의 유효 논리 블록수(VBL)가 디크리먼트된다. 다음으로, MSFB(11aa) 중의 풀 논리 블록은 직접 MS(11)로 이동하고, MS 추기 IB(11ab) 중의 풀 논리 블록은 TFS(11b)로 이동한다(단계 S407). 이 이동 처리는, 구체적으로는, MS 구조 관리 테이블(60)의 MS 버퍼 관리 테이블(61)의 MSFB용 필드(61a), MS 추기 IB용 필드(61b)에 등록되어 있는 해당하는 논리 블록 ID를 삭제할 뿐이다.
이어서, 논리 NAND층 관리부(120b)는 MS 구조 관리 테이블(60)의 상태 정보로서의 유효 논리 블록수(VBL)를 최대 논리 블록수(MBL)와 비교한다(단계 S410). 이 비교의 결과, 유효 논리 블록수(VBL)가 최대 논리 블록수(MBL)를 초과하는 경우, 논리 NAND층 관리부(120b)는 기록 가능한 프리 블록(FB)이 부족하다고 판단하고, 이하의 MS 컴팩션 처리를 1 블록씩 실행하여, 모두 무효 트랙으로 구성된 물리 NAND층 관리부(120c)에 반환해야 하는 무효 논리 블록을 늘리고, 유효 논리 블록수(VBL)를 최대 블록수(MBL) 미만으로 한다(단계 S420). 단계 S410의 판정에서, 기록 가능한 FB가 부족하지 않은 경우는, 절차는 단계 S440로 이행된다.
MS 컴팩션 처리에는, 전술한 바와 같이, 2i 트랙 MS 컴팩션과, 2i 트랙 미만 MS 컴팩션의 2종류가 있다. 2i 트랙 MS 컴팩션에서는, MS 컴팩션 버퍼(11c)가 사용되고, 컴팩션 후의 논리 블록은 TFS(11b)의 선두로 이동한다. 2i 트랙 미만 MS 컴팩션에서는 트랙 단위로 MS 추기 IB(11ab)에 카피된다.
우선, 논리 NAND층 관리부(120b)는, MS 구조 관리 테이블(60)의 유효 트랙수별 논리 블록 ID 리스트(62)를 참조함으로써, 유효 트랙수가 적은 논리 블록으로부터 트랙을 2i개 수집하여, 수집한 트랙을 2i개씩, 기록 가능한 프리 블록(FB)으로서 물리 NAND층 관리부(120c)로부터 취득한 MS 컴팩션 버퍼(11c)에 대하여 카피하는, 2i 트랙 MS 컴팩션을 실행한다.
구체적으로는, 논리 NAND층 관리부(120b)는, 물리 NAND층 관리부(120c)에 대하여 프리 블록(FB)의 획득을 요구하여, 프리 블록(FB)을 그 프리 블록(FB)으로서 할당된 논리 블록 ID와 함께 취득한다. 그리고, 컴팩션 대상으로서 선택한 복수의 트랙을 이 프리 블록(FB)에 카피하도록, 물리 NAND층 관리부(120c)에 대하여 요구한다. 이 컴팩션 대상 트랙이 WC(21), FS부(12Q), IS부(13Q)에 유효 클러스터를 갖는 경우에는 이들도 머지되어 MS 컴팩션 버퍼(11c)에 수집되는, 전술한 수동 머지가 실행된다.
물리 NAND층 관리부(120c)로부터 컴팩션의 종료가 통지되면, 논리 NAND층 관리부(120b)는, 트랙 관리 테이블(30)의 컴팩션이 행해진 트랙에 대응하는 논리 트랙 어드레스(30a)를 갖는 엔트리에서의, 논리 블록 ID(30c)을 물리 NAND층 관리부(120c)로부터 취득한 프리 블록(FB)의 논리 블록 ID로 갱신하고, 또한 논리 블록 내 트랙 위치(30d)를 갱신한다.
또, MS 컴팩션 버퍼(11c)로서 사용한, 물리 NAND층 관리부(120c)로부터 취득한 프리 블록(FB)의 논리 블록 ID를 MS 논리 블록 관리 테이블(35)에 새로운 엔트리로서 등록하고, 엔트리 중의 각 필드에 소요 정보를 등록한다. 이 등록으로는, 트랙 관리 포인터(35b)의 갱신과, 유효 트랙수(35c)의 갱신과, 기록 가능 선두 트랙(35d)의 갱신 등이 있다.
또, MS 구조 관리 버퍼(60)의 MS 버퍼 관리 테이블(61)의 TFS용 필드(61c)의 FIFO 구조(링크드 리스트)의 선두에, MS 컴팩션 버퍼(11c)로서 사용한 논리 블록 ID를 등록함으로써, MS 컴팩션의 결과 유효한 2i개의 트랙을 포함하는 1 논리 블록으로 구성된 MS 컴팩션 버퍼(11c)를, TFS(11b)의 선두(가장 오래된 위치)로 이동한다. TFS(11b)가 풀이 되면, 가장 오래된 선두의 블록이 MS(11)로 이동한다.
이어서, MS(11) 중의 컴팩션원(元)의 오래된 트랙 데이터를 무효화한다. 구체적으로는, MS 논리 블록 관리 테이블(35) 중의 컴팩션원(元)의 논리 블록에 대응하는 엔트리에서의 트랙 관리 포인터(35b) 필드의 해당 개소를 삭제하여, 유효 트랙수(35c)를 디크리먼트하고, 또한 MS 구조 관리 테이블(60)의 유효 트랙수별 논리 블록 ID 리스트(62)를 갱신한다. 유효 트랙수(35c)가 디크리먼트에 의해 0이 된 경우는, MS 구조 관리 테이블(60)의 유효 논리 블록수(VBL)를 디크리먼트하고, 물리 NAND층 관리부(120c)에 대하여 이 무효 논리 블록을 반환한다. 그리고, 이 반환된 논리 블록에 대응하는 MS 논리 블록 관리 테이블(35)의 엔트리는 Valid 플래그(35e)가 Invalid로 된다.
이러한 컴팩션 처리 및 무효 논리 블록(FB)의 반환 처리가 종료하면, 유효 논리 블록수(VBL)와 최대 논리 블록수(MBL)를 비교하여, 유효 논리 블록수(VBL)가 최대 논리 블록수(MBL)를 초과하는 경우는, 다시 유효 트랙을 2i개 수집하는 2i 트랙 MS 컴팩션을 실행한다. 또, 유효 논리 블록수(VBL)가 최대 논리 블록수(MBL)를 초과한 상태에서, 유효 트랙을 2i개 수집하는 2i 트랙 MS 컴팩션이 불가능해진 경우는, 2i 트랙 미만 MS 컴팩션이 실행된다.
이 2i 트랙 미만 MS 컴팩션에서는, 컴팩션 대상 2i 트랙에 미치지 않는 개수의 트랙을 MS 추기 IB(11ab)에 카피함으로써, 무효 2i 트랙으로 구성된 무효 논리 블록을 생성하고, 생성한 무효 논리 블록을 물리 NAND층 관리부(120c)에 반환함으 로써, 유효 논리 블록수(VBL)를 감소시킨다. 2i 트랙 미만 MS 컴팩션에 관한 관리 테이블의 갱신에 관해서는 그 설명을 생략한다.
ㆍFS(12)의 CIB 처리
다음으로, 도 19의 단계 S340에서 설명한 FS(12)에서의 CIB 처리에 관해 상세히 서술한다. 논리 NAND층 관리부(120b)는, FS/IS 구조 관리 테이블(65)의 FS 입력 버퍼 관리 테이블(66)의 FSFB용 필드(66a), FS 추기 IB용 필드(66b)에 등록되어 있는 논리 블록 ID에 관한 유효 클러스터수의 정보를, FS/IS 논리 블록 관리 테이블(42)의 유효 클러스터수(42d) 필드로부터 취득하고, FSIB(12a)의 FSFB(12aa) 또는 FS 추기 IB(12ab)에 전체 페이지(전체 클러스터) 기록이 완료된 풀 논리 블록이 하나 이상 존재하는지의 여부를 조사하여(단계 S440), FSIB(12a)에 풀 논리 블록이 하나 이상 존재하는 경우에 이하의 처리를 행한다. 단계 S440의 판정이 No인 경우는, 절차는 여기서 종료한다.
단계 S440의 판단이 Yes인 경우, 논리 NAND층 관리부(120b)는 FS/IS 구조 관리 테이블(65) 및 FS/IS 논리 블록 관리 테이블(42)의 유효 클러스터수(42d)를 참조함으로써, FS부(12Q) 내에 유효 클러스터수(42d)가 0인 무효 논리 블록이 존재하는지의 여부를 조사하여, FS부(12Q) 내에 무효 논리 블록이 존재하는 경우, 그 무효 논리 블록을 물리 NAND층 관리부(120c)에 반환한다(단계 S445).
반환된 논리 블록의 엔트리는 MS 논리 블록 관리 테이블(35) 및 FS/IS 논리 블록 관리 테이블(42)로부터 삭제된다. 이어서, FSFB(12aa) 중의 풀 논리 블록은 FS(12)로 이동하고, FS 추기 IB(12ab) 중의 풀 논리 블록도 FS(12)로 이동한다(단계 S447). 이 이동 처리는 구체적으로는, FS/IS 구조 관리 테이블(65)의 FS 입력 버퍼 관리 테이블(66)의 FSFB용 필드(66a), FS 추기 IB용 필드(66b)에 등록되어 있는 해당하는 논리 블록 ID를 삭제할 뿐이다.
이어서, 논리 NAND층 관리부(120b)는, FIFO 구조를 갖는 FS(12)의 논리 블록수가, FS(12)로서 허용되는 소정의 최대 논리 블록수(BLfsmax)를 초과하는지의 여부를 판단한다(단계 S450). 구체적으로는, FS FIFO 관리 테이블(67)로부터 산출한 논리 블록수가 미리 설정한 최대 논리 블록수(BLfsmax)를 초과하는지의 여부를 판단한다.
이 판단의 결과, 산출한 논리 블록수가 최대 논리 블록수(BLfsmax)를 초과하는 경우, 논리 NAND층 관리부(120b)는, 기록 가능한 프리 블록(FB)이 부족하다고 판단하고, 그 때의 상태에 따라, 이하의 MS(11)로의 예를 들어 2 논리 블록분씩의 방출 처리(단계 S460)와, IS(13)로의 1 논리 블록분의 방출 처리를 실행한다(단계 S500). 단계 S450의 판정에서, FS(12)가 풀 상태가 아니라면, FS(12)로부터 MSIB(11a)로의 방출 처리와, FS(12)로부터 ISIB(13a)로의 방출 처리를 행하지 않고, 절차를 여기서 종료한다.
FS(12)로부터 MSIB(11a)로의 방출 처리에서는, 우선 FS(12)로부터 IS부(13Q)를 거치지 않고 MSIB(1la)로 직접 이동하는 논리 블록이 있는지의 여부를 판단한다(단계 S455). 구체적으로는, FS(12)의 FIFO의 선두에 있는 가장 오래된 논리 블록 중의 클러스터를 순서대로 하나씩 체크하여, 해당 클러스터가 속하는 트랙이 FS 부(12Q) 중에 유효 클러스터를 몇 개 보유하고 있는지를, 트랙 관리 테이블(30)의 FS 클러스터수(30f) 필드를 참조하여 검색한다. 그리고, 트랙 내 유효 클러스터수가 소정의 임계값(예를 들어 2k-i-l개) 이상인 경우, 그 논리 트랙을 MSIB(11a)로의 방출 확정 트랙으로 한다.
상기 검색은 이하의 루트를 거친다.
1. FS/IS 구조 관리 테이블(65)의 FS FIFO 관리 테이블(67)로부터 FIFO의 선두에 있는 가장 오래된 FS/IS 블록 ID를 얻는다.
2. 이 FS/IS 블록 ID에 대응하는 FS/IS 논리 블록 관리 테이블(42)의 엔트리 중의 블록 내 클러스터 테이블(42c) 필드로부터 FS/IS 내 클러스터 관리 테이블(44)에의 인덱스를 얻는다.
3. FS/IS 내 클러스터 관리 테이블(44)에서, 취득한 인덱스로 지정된 1 논리 블록 내의 각 엔트리로부터 FS/IS 관리 테이블(40)로의 포인터를 하나 취득하여, FS/IS 관리 테이블(40)의 해당 링크로 보낸다.
4. 받은 해당 링크가 소속되는 해당 논리 트랙 어드레스를 얻는다.
5. 취득한 논리 트랙 어드레스를 사용하여 트랙 관리 테이블(30)의 해당 엔트리 중의 FS 클러스터수(30f) 필드를 체크한다.
6. 3∼5가 반복된다.
FS(12)로부터 MS(11)로의 방출은, 예를 들어 2 논리 블록씩 행해진다. 즉, 논리 NAND층 관리부(120b)는, 상기 트랙 내 유효 클러스터수가 소정의 임계값(예를 들어 2k-i-1개) 이상의 트랙을 2 논리 블록분 수집하여, 그 수집한 2 논리 블록분의 트랙을 MSIB(11a)의 MSFB(11aa)에 방출한다(단계 S460). 이 방출 시에, 방출 트랙 중의 FS(12) 내에 존재하지 않는 클러스터는, WC(21), IS부(13Q) 및 MS(11)로부터 독출하여 머지하는 전술한 수동 머지가 실행된다.
단, MSIB(11a)로의 방출 확정 트랙이 2 논리 블록분 존재하지 않는 경우는, 1 논리 블록을 MSIB(11a)의 MSFB(11aa)에 방출하고, 1 논리 블록분에 미치지 않는 개수의 트랙을 MS 추기 IB(11ab)에 대하여 트랙 단위로 추기 기록한다(단계 S460). 마찬가지로, MSIB(11a)로의 방출 확정 트랙이 1 논리 블록분 존재하지 않는 경우는, 1 논리 블록분에 미치지 않는 개수의 트랙을 MS 추기 IB(11ab)에 대하여 트랙 단위로 추기 기록한다(단계 S460). 그 후, FIFO 구조의 FS(12)의 선두 논리 블록에 유효한 클러스터가 남아 있지 않은 경우에는, 선두 논리 블록을 무효 논리 블록으로서 물리 NAND층 관리부(120c)에 반환한다.
ㆍMS(11)의 CIB 처리(도 19 : 단계 S350)
이와 같이 하여, FS로부터 MSIB(11a)로의 방출이 발생하면, 이어서 MS부(11Q)의 CIB 처리가 다시 실행된다(단계 S480). 이 단계 S480의 MS부(11Q)의 CIB 처리는, 앞서 1회째의 MS부(11Q)에서의 CIB 처리(단계 S400∼S420)와 동일하기 때문에 중복 설명은 생략한다. 이 MS부(11Q)에서의 CIB 처리 후, 논리 NAND층 관리부(120b)는, FS(12)로부터 MSIB(11a)로의 방출 조건이 성립하는지의 여부를, 상기와 동일하게 하여 조사한다(단계 S455). 이 방출 조건이 성립하면, 전술한 FS(12) 로부터 MSIB(11a)로의 2 논리 블록의 방출 및 MS(11)에서의 CIB 처리가 다시 실행된다. 이러한 처리가 단계 S455의 판단이 No가 될 때까지 반복된다.
ㆍFS(12)의 CIB 처리
단계 S455의 판단이 No가 되면, 논리 NAND층 관리부(120b)는, 이어서, FS(12)로부터 ISIB(13a)로의 방출 조건이 성립하는지의 여부를 판단한다(단계 S490). 구체적으로는, 상기 FS(12)로부터 MSIB(11a)로의 방출 처리 시에, 체크된 FIFO 구조를 갖는 풀 상태의 FS(12)의 선두 논리 블록에 유효한 클러스터가 남아 있는 경우에, 단계 S490에서의 FS(12)로부터 IS(13)로의 방출 조건이 성립했다고 하여, FS(12)로부터 ISIB(13a)로의 방출을 실행한다.
즉, 단계 S490에서 조건이 성립한 경우는, MSIB(11a)로의 방출 트랙에 포함되지 않는 클러스터만을 포함하는 선두 논리 블록을 ISIB(13a)로 이동한다(단계 S500). 이 단계 S500에서는, 예를 들어 1 논리 블록의 방출이 실행된다. 그리고, 상태에 따라서는, 그 후 단계 S520∼S585의 절차를 거친 후, 단계 S590의 판단에 의해, 단계 S500에서의 FS(12)로부터 ISIB(13a)로의 방출이 다시 발생하기도 한다.
단계 S500에서의 재방출이 있는 상태란, 예를 들어, FSIB(12a)에 복수의 풀 논리 블록을 갖는 버퍼[FSFB(12aa) 또는 FS 추기 IB(12ab)]가 존재하는 상태에서, FIFO 구조를 갖는 FS(12)가 풀이었던 경우에는, FSIB(12a)로부터 FS(12)로의 풀 블록의 이동에 따라, FS(12)로부터 MSIB(11a) 또는 ISIB(13a)로의 복수의 블록의 방출이 발생하는 상태이다. 이러한 조건하에서, FS(12)로부터 ISIB(13a)로의 복수의 논리 블록의 방출이 발생할 가능성이 있다.
ㆍIS의 CIB 처리(도 19 단계 S360)
이어서, 단계 S490에서의 조건이 성립했을 때, IS(13)에서 행해지는 방출 처리 및 컴팩션 처리의 상세한 내용에 관해, 도 30 외에, 도 31의 흐름도를 참조하여 설명한다. 우선, 논리 NAND층 관리부(120b)는, 상기와 동일하게 하여, IS부(13Q) 내에 무효 논리 블록이 존재하는지의 여부를 조사하여, IS부(13Q) 내에 무효 논리 블록이 존재하는 경우, 그 무효 논리 블록을 물리 NAND층 관리부(120c)에 반환한다(단계 S520). 반환된 논리 블록의 엔트리에 대응하는 MS 논리 블록 관리 테이블(35) 및 FS/IS 논리 블록 관리 테이블(42)의 엔트리는 Valid 플래그(35e 및 42f)가 각각 Invalid로 된다.
다음으로, 논리 NAND층 관리부(120b)는, FIFO 구조를 갖는 IS(13)의 논리 블록수가, IS(13)로서 허용되는 소정의 최대 논리 블록수(BLismax)를 초과하는지의 여부를 판단한다(단계 S530). 구체적으로는, IS FIFO 관리 테이블(69)로부터 산출한 논리 블록수가 미리 설정한 최대 논리 블록수(BLismax)를 초과하는지의 여부를 판단한다.
이 판단의 결과, 산출한 논리 블록수가 최대 논리 블록수(BLismax)를 초과하는 경우, 논리 NAND층 관리부(120b)는 기록 가능한 프리 블록(FB)이 부족하다고 판단하여, IS(13)로부터 예를 들어 2 논리 블록분의 트랙을 MSIB(11a)의 MSFB(11aa)에 방출한다(단계 S540). 단계 S530의 판정에서 IS(13)가 풀 상태가 아닌 경우는 MSIB(11a)로의 방출 처리 등을 행하지 않고, ISIB(13a) 중의 풀 논리 블록을 IS(13b)로 이동시킨다(단계 S585).
단계 S540의 방출 시에는, 도 12에 나타낸 트랙 관리 테이블(30) 등을 사용하여, 도 31에 나타내는 방출 트랙의 선별 처리를 실행한다. 도 31에서, 논리 NAND층 관리부(120b)는, 선별 처리(사이클릭 서치 처리, 이하 단순히 서치 처리라 한다)를 시작하면(단계 S700), 이전회의 서치 시에 검색이 완료된 최종 트랙으로서 단계 S740에서 기억한 트랙 관리 테이블(30)의 인덱스인 논리 트랙 어드레스(30a)의 다음 논리 트랙 어드레스로부터 서치를 시작한다(단계 S710).
서치가 처음회(제1 사이클)인 경우는, 트랙 관리 테이블(30)의 최초 엔트리로부터 서치를 시작한다(단계 S710). 또, 단계 S740에서 기억한 검색이 완료된 트랙이 트랙 관리 테이블(30)의 최종 엔트리(도 12의 트랙 n)인 경우는, 단계 S710에서의 다음 트랙 검색에서는 선두 엔트리(도 12의 트랙 0)로 되돌아간다.
이 서치에서는, 트랙 관리 테이블(30)의 해당 엔트리 중의 IS 클러스터수(30g) 필드(해당 논리 트랙 중의 유효 클러스터수)를 참조하여, 해당 엔트리 IS(13) 내에 유효 클러스터를 유지하고 있는 경우는, 도시하지 않는 신규 검색 트랙 리스트에 해당 엔트리의 논리 트랙 어드레스를 등록한다(단계 S720). 이어서, 신규 검색 트랙 리스트에 등록된 트랙의 개수를 소정의 임계값(L)과 비교하여, 등록수가 임계값(L)보다 적은 경우는 절차를 단계 S710로 이행하여, 트랙 관리 테이블(30)의 다음 엔트리를 전술한 바와 동일하게 하여 조사한다.
이러한 처리를 반복함으로써, 신규 검색 트랙 리스트에 임계값(L)개분의 논리 트랙 어드레스를 등록한다(단계 S730, Yes). 그리고, 마지막으로 신규 검색 트랙 리스트에 등록한 논리 트랙 어드레스에 대응하는 트랙 관리 테이블(30)의 엔트 리(인덱스)를 검색이 완료된 최종 트랙으로서 기억하여, 금회 사이클의 검색을 종료한다(단계 S740).
이어서, 논리 NAND층 관리부(120b)는, 전회 낙선된 논리 트랙(도시하지 않음)에 관한 낙선 트랙 리스트가 있는지의 여부를 판단한다(단계 S750). 처음회 사이클 시에는 낙선 트랙 리스트가 존재하지 않기 때문에, 신규 검색 트랙 리스트와 신규 추가 블록 내 트랙 리스트(도시하지 않음)의 2개의 리스트에 기초하여 2i+1개의 논리 트랙을 선출한다(단계 S760). 신규 추가 블록 내 트랙 리스트란, 도 30의 단계 S500에서, FS(12)로부터 IS부(13Q)에 방출된 블록[FS/IS 구조 관리 테이블(65)의 IS 입력 버퍼 관리 테이블(68)에 엔트리되어 있다]에 포함되는 트랙에 관한 리스트이다.
처음회 사이클 시에는, 이러한 2개의 리스트를 사용하여 2i+1개의 방출 후보 트랙을 선출한다. 이 선출에는, 전술한 바와 같이, 트랙 내의 유효 클러스터수와, 유효 클러스터 계수를 이용한 선출 기준(스코어값; S)이 이용된다.
스코어값(S)=트랙 내의 유효 클러스터수×유효 클러스터 계수
유효 클러스터 계수는, 트랙이 MS부(11Q) 내에서 무효 트랙이 존재하는 논리 블록에 존재하는지의 여부에 따라 가중되는 수이며, 존재하는 쪽이 존재하지 않는 경우보다 수가 큰 것으로 한다.
유효 클러스터수는 트랙 관리 테이블(30)의 IS 클러스터수(30g) 필드를 참조하여 취득할 수 있다. 또, 유효 클러스터 계수는, 트랙 관리 테이블(30)과 트랙 관 리 포인터(35b) 필드에서 링크하고 있는 MS 논리 블록 관리 테이블(35)의 유효 트랙수(35c) 필드를 참조하여 취득할 수 있다.
논리 NAND층 관리부(120b)는, 신규 추가 블록 내 트랙 리스트에 포함되는 복수의 트랙으로부터, 상기 스코어값(S)이 상위인 M개(소정의 설정값)의 트랙을 선택한다. 선택된 M개의 트랙에, 이전 서치에 의해 신규 검색 트랙 리스트에 등록된 L개의 트랙을 더하여, 이들 L+M개의 트랙 중에서, 스코어값(S)이 높은 2i+1개의 트랙을, MS(11)로 방출되는 트랙으로서 선출한다. 그리고, L+M개의 트랙 중에서, 선출된 2i+1개의 트랙 이외의 트랙을 전술한 낙선 트랙 리스트에 등록한다.
2회째 이후의 사이클 시에는, 낙선 트랙 리스트와, 신규 검색 트랙 리스트와, 신규 추가 블록 내 트랙 리스트의 3개의 리스트에 기초하여 2i+1개의 트랙을 선출한다(단계 S770). 2회째 이후의 방출 여부는 후술하는 도 30의 단계 S570의 판단에 따라 결정된다. 3개의 리스트를 사용한 선출 처리에서는, 낙선 트랙 리스트에 포함되는 복수의 트랙으로부터, 스코어값(S)이 상위인 N개(소정의 설정값)의 트랙을 선택하고, 신규 추가 블록 내 트랙 리스트에 포함되는 복수의 트랙으로부터, 스코어값(S)이 상위인 M개(소정의 설정값)의 트랙을 선택하며, 이들 N+M개의 트랙에, 또한 금회 2회째 이후의 사이클 시에 얻어진 신규 검색 트랙 리스트에 등록된 L개의 트랙을 더하여, 이들 L+M+N개의 트랙 중에서 스코어값(S)이 높은 2i+1개의 트랙을, MS(11)로 방출되는 트랙으로서 선출한다. 그리고, L+M+N개의 논리 트랙 중에 서, 선출된 2i+1개의 트랙 이외의 트랙을, 차회 사이클에 사용하는 낙선 트랙 리스트에 등록한다.
다음으로, 도 30의 단계 S540로 되돌아가 설명한다. 전술한 바와 같이 하여, 2 논리 블록분의 트랙의 방출 후보가 선출되면, 논리 NAND층 관리부(120b)는, 그 선출된 2 논리 블록분의 트랙(즉 2i+1개의 트랙)을 MSIB(11a)의 MSFB(11aa)에 방출한다(단계 S540). 이 방출 시에, 방출 트랙 중의 IS부(13Q) 내에 존재하지 않는 클러스터는, WC(21) 및 FS(12) 및 MS(11)로부터 독출하여 머지하는 전술한 수동 머지가 실행된다. 상기에서는, 유효 클러스터수와 MS에 빈 곳 있는 블록이 존재하고 있는지 아닌지의 계수에 기초한 스코어값(S)에 따라 방출 트랙을 선출하도록 하고 있지만, 유효 클러스터수에 의해서만 방출 트랙을 선출하도록 해도 된다.
ㆍMS의 CIB 처리(도 19 단계 S370)
이와 같이 하여, IS(13)로부터 MSIB(11a)로의 방출이 발생하면, 이어서 MS(11)의 CIB 처리가 다시 실행된다(단계 S560). 이 단계 S560의 MS(11)의 CIB 처리는, 앞서 1회째 MS(11)에서의 CIB 처리(단계 S400∼S420)와 동일하기 때문에, 중복 설명은 생략한다.
ㆍIS의 CIB 처리
다음으로, 논리 NAND층 관리부(120b)는, IS(13)로부터 MSIB(11a)에 대한 방출을 다시 실행할지 아닐지를 판단한다(단계 S570). 즉, 논리 NAND층 관리부(120b)는, MS 논리 블록 관리 테이블(35) 및 FS/IS 논리 블록 관리 테이블(42)의 유효 클 러스터수(42d) 필드 등을 사용하여, 단계 S540에서의 방출을 행한 후의 IS(13) 내의 논리 블록을 유효 클러스터수가 적은 순으로 소트하고, 가장 유효 클러스터수가 적은 2개의 논리 블록의 합계 유효 클러스터수가, 소정의 설정값인 2k개(1 논리 블록분) 이상인 경우는, IS(13)로부터 MSIB(11a)로의 방출 조건이 성립했다고 판단한다(단계 S570).
IS(13)로부터 MSIB(11a)로의 방출 조건이 성립한 경우는, 절차를 단계 S540로 이행하여, 도 31의 단계 S700∼S750 및 S770의 처리를 실행함으로써, 상기 2 논리 블록분의 방출 처리를 다시 실행한다. 단계 S570의 판단이 Yes인 한, IS(13)로부터 MSIB(11a)로의 2 논리 블록분의 방출 처리와, MS(11)에서의 CIB 처리가 반복 실행된다. 그리고, 단계 S570의 판단이 No가 된 경우는, IS(13)에서의 컴팩션 처리가 실행된다(단계 S580).
IS 컴팩션 처리에서는, MS 논리 블록 관리 테이블(35) 및 FS/IS 논리 블록 관리 테이블(42)의 유효 클러스터수(42d) 필드 등을 사용하여, IS부(13Q) 내의 유효 클러스터가 적은 논리 블록으로부터 순서대로 클러스터를 1 논리 블록분, 즉 2k개 수집하여, 이들 2k개의 클러스터를 IS 컴팩션 버퍼(13c)에 카피한다. 이 카피 처리가 종료하면, 논리 NAND층 관리부(120b)는, 컴팩션원(元)[카피원(元)]의 논리 블록 가운데 유효 클러스터가 없어진 것을 무효 논리 블록으로서 물리 NAND층 관리부(120c)에 반환하고, 컴팩션 처리에 의해 유효 클러스터가 가득 찬 논리 블록으로 구성되는 IS 컴팩션 버퍼(13c)를 IS(13)로 이동한다.
이 컴팩션후에 ISIB(13a) 중의 풀 논리 블록은 IS(13)로 이동한다(단계 S585). 이 이동 처리는, 구체적으로는 FS/IS 구조 관리 테이블(65)의 IS 입력 버퍼 관리 테이블(68)의 ISIB용 필드에 등록되어 있는 해당하는 논리 블록 ID를 삭제할 뿐이다.
그 후, 논리 NAND층 관리부(120b)는, 전술한 FS(12)로부터 ISIB(13a)로의 방출 조건이 성립하고 있는지의 여부를 판단하여(단계 S590), 이 FS(12)로부터 ISIB(13a)로의 방출 조건이 성립하는 경우는, 절차를 단계 S500로 이행하여 전술한 절차를 다시 반복한다. 또, 논리 NAND층 관리부(120b)는, IS 컴팩션 처리의 종료 후, FS(12)로부터 ISIB(13a)로의 방출 조건이 성립하지 않는다고 판단한 경우는, 이것으로서 금회의 기록 처리를 종료한다. 이상이 기록 처리의 상세한 내용이다.
이상 설명한 바와 같이, 본 실시형태에서는, MSIB(11a) 내에 트랙 단위의 추기적인 기록을 행하는 MS 추기 IB(11ab) 외에, 블록 단위의 일괄 기록을 행하는 MSFB(11aa)를 설치하고 있다. MSIB(11aa)에는, WC(21), FS(12), IS(13)로부터의 블록 카피가 행해지는 것이며, MSIB(11aa)를 설치함으로써, WC(21), FS(12), IS(13)로부터의 방출을 효율적으로 또한 기록 효율 좋게 실행할 수 있다.
즉, MS(11)의 전단에는, FS(12)과 동등한 기능을 달성하는 TFS(11b)가 설치되어 있고, TFS(11b)에 의해, 후단의 MS(11)에서의 MS 컴팩션 처리에 갱신 빈도가 높은 데이터가 섞일 가능성이 저감된다. 즉, 컴팩션 처리에서도, 다른 블록에 데이터를 다시 기록하기 때문에, 블록의 소거 횟수가 증가한다는 부작용이 있다. 즉, 컴팩션을 행하기 위해 선택하여, 새로운 블록에 다시 기록한 데이터가 직후에 갱신 되어 버리면, 블록 소거 횟수가 증가해 버린다는 문제가 있고, 그 때문에 컴팩션의 대상이 되는 데이터는 갱신 빈도가 낮은 데이터로 하는 것이 바람직하고, 그것을 선별하기 위해 TFS(11b)를 설치하고 있다.
그러나, TFS(11b)는 FIFO 구조를 갖고 있기 때문에, MS(11)의 전단에 TFS(11b)만 있는 경우는, WC(21), FS(12), IS(13)로부터 MS(11)로의 데이터 방출 처리를 효율적으로 행할 수 없고, 전술한 방출 처리 및 IS 컴팩션 처리를 포함하는 WCF 처리, CIB 처리를 효율적으로, 또한 기록 효율 좋게 행할 수 없다. 따라서, 본 실시형태에서는, 블록 단위의 기록을 행하는 MSFB(11aa)를 MS(11)의 전단에 설치하고, MSFB(11aa)의 출력을 TFS(11b)를 바이패스하여 MS(11)에 입력함으로써, WCF 처리, CIB 처리를 적은 지연으로 효율적으로 행할 수 있도록 하고 있다.
예를 들어, 본 실시형태에서는, IS(13)에서의 컴팩션 처리에 앞서, 도 30의 단계 S540에서 복수의 블록을 MS(11)에 방출하고, 이에 따라 컴팩션전에 IS(13)의 상태를 컴팩션을 실행하기 쉬운 상태로 하고 있다. 즉, IS(13)을 컴팩션하는 시점에서는, 유효 클러스터수가 적은 논리 블록이 2개 이상 존재하는 제1 상태와, 유효 클러스터수가 적은 블록이 2개 이상 존재하지 않는 제2 상태가 존재한다. 제1 상태는 그대로 컴팩션 처리가 가능한 상태이지만, 제2 상태는 이대로는 효율이 좋은 컴팩션 처리를 할 수 없는 상태이다. 따라서, 본 실시형태에서는, 유효 클러스터수가 많고, MS에 빈 곳 있는 블록이 존재하고 있기 때문에 소트되는 상위 복수의 트랙으로 구성되는 복수의 블록을 컴팩션전에 MS(11)에 방출하도록 하고 있고, 이에 따라 IS(13)의 상태를 컴팩션을 실행하기 전에 상기 제1 상태로 이행시키는 것이 가능해 진다.
이러한 IS(13)로부터의 방출을 행할 때 MSIB(11aa)가 존재하지 않는 경우는, IS(13)로부터 MS(11)로의 방출을 효율적으로 행할 수 없고, 이에 따라 IS 컴팩션 자체에도 지연이 발생해 버린다. WC(21), FS(12)로부터의 방출도 마찬가지이며, TFS(11b)만으로는 WC(21), FS(12)로부터의 방출을 효율적으로 또한 단시간에 행할 수 없어, 기록 처리 자체의 지연으로도 이어지게 된다.
이와 같이 본 실시형태에서는, MS(11)의 전단에 블록 기록을 행하는 MSFB(11aa)를 배치하여, MSIB(11aa)에 기록된 블록 단위의 데이터를, TFS(11b)를 바이패스하여 바로 MS(11)로 이동하도록 하고 있기 때문에, WC(21), FS(12), IS(13)로부터의 방출 처리를 효율적으로 행할 수 있고, 기록 처리를 고속화하는 것이 가능해진다. 또, 블록 단위의 기록을 행하기 때문에, 기록 효율이 향상되어 NAND 메모리의 수명 연장에 기여한다.
상기에서는, MSFB(11aa)는 전체 트랙의 기록이 완료된 풀 블록이 하나 이상 존재하는 경우에, MSFB(11aa)로부터 MS(11)로의 이동을 행하도록 했지만, MSFB(11aa)로서 할당해야 하는 논리 블록의 개수가, MS 구조 관리 테이블(60)의 MSFB용 필드(61a)에 할당된 엔트리수(허용치)를 초과했을 때, 또는 허용치를 초과하기 전의 임의의 시점에서, MSFB(11aa)로부터 MS(11)로의 이동을 행하도록 해도 된다.
또, 본 실시형태에서는, IS(13)에서의 컴팩션 처리에 앞서, 도 30의 단계 S540에서, 유효 클러스터수가 많고 또한 MS에 빈 곳 있는 블록이 존재함으로써 소 트되는 상위 복수의 트랙(유효 트랙수가 적은 논리 블록에 소속되는 트랙일수록 상위이다)으로 구성되는 복수의 블록을 MS(11)에 방출하도록 하고 있고, 이에 따라 컴팩션전에 IS(13)의 상태를 컴팩션을 실행하기 쉬운 상태로 할 수 있다. 즉, IS(13)을 컴팩션하는 시점에서는, 유효 클러스터수가 적은 논리 블록이 2개 이상 존재하는 제1 상태와, 유효 클러스터수가 적은 블록이 2개 이상 존재하지 않는 제2 상태가 존재한다. 제1 상태는 그대로 컴팩션 처리가 가능한 상태이지만, 제2 상태는 이대로는 효율이 좋은 컴팩션 처리를 할 수 없는 상태이다. 따라서, 본 실시형태에서는, 유효 클러스터수가 많고, MS에 빈 곳 있는 블록이 존재함으로써 소트되는 상위 복수의 트랙으로 구성되는 복수의 블록을 컴팩션 전에 MS(11)에 방출하도록 하고 있고, 이에 따라 IS(13)의 상태를 컴팩션을 실행하기 전에, 상기 제1 상태로 이행시키는 것이 가능해진다. 이에 따라, 한번의 컴팩션에 걸리는 시간을 평준화 또한 고속화하는 것이 가능해진다. 유효 클러스터수만을 선정 조건으로 하여 MS(11)에 방출되는 트랙을 선택해도 되고, 유효 트랙수가 적은 논리 블록에 소속되는 트랙일수록 상위인 유효 클러스터 계수만을 선정 조건으로 하여 MS(11)에 방출되는 트랙을 선택해도 된다.
또, 본 실시형태에서는, 트랙 관리 테이블(30)의 모든 엔트리를 검색하는 것은 아니고, 낙선 트랙 리스트에서 스코어값(S)이 상위인 N개의 논리 트랙과, 신규 추가 블록 내 트랙 리스트에서 스코어값(S)이 상위인 M개의 논리 트랙과, 유효 클러스터수를 가짐으로써 선택한 신규 검색 트랙 리스트 중의 L개의 논리 트랙 가운 데, 스코어값(S)이 높은 2i+1개의 논리 트랙을 MS(11)로 방출되는 논리 트랙으로서 선출하도록 하고 있고, 스코어값에 기초한 서치 정밀도를 유지하면서 서치 속도를 향상시킬 수 있다. 또, 트랙 관리 테이블(30)의 검색에 의한 신규 검색 트랙 리스트의 작성시, 검색이 완료된 최종 트랙을 기억하고, 차회 검색 시에는, 이 기억한 최종 트랙의 다음 트랙으로부터 검색을 행하는 사이클릭 서치를 행하도록 하고 있기 때문에, 서치 속도의 향상을 목적으로 트랙 관리 테이블(30)의 모든 엔트리를 검색하지 않음에도 불구하고, 결과적으로 검색 개소가 치우치지 않고, 검색 처리의 정밀도를 평준화할 수 있다.
[제2 실시형태]
도 32는, SSD(100)을 탑재한 퍼스널 컴퓨터(200)의 일례를 나타내는 사시도이다. 퍼스널 컴퓨터(200)는 본체(201) 및 표시 유닛(202)을 포함한다. 표시 유닛(202)은 디스플레이 하우징(203)과 이 디스플레이 하우징(203)에 수용된 표시 장치(204)를 포함한다.
본체(201)는 케이스(205)와, 키보드(206)와, 포인팅 디바이스인 터치 패드(207)를 포함한다. 케이스(205) 내부에는 메인 회로 기판, ODD(Optical Disk Device) 유닛, 카드 슬롯 및 SSD(100) 등이 수용되어 있다.
카드 슬롯은 케이스(205)의 주벽에 인접하여 설치되어 있다. 주벽에는 카드 슬롯에 대향하는 개구부(208)가 형성되어 있다. 사용자는, 이 개구부(208)를 통하여 케이스(205)의 외부에서 추가 디바이스를 카드 슬롯에 착탈하는 것이 가능하다.
SSD(100)는, 종래의 HDD의 치환으로서, 퍼스널 컴퓨터(200) 내부에 실장된 상태로서 사용해도 되고, 퍼스널 컴퓨터(200)가 구비하는 카드 슬롯에 삽입한 상태에서 추가 디바이스로서 사용해도 된다.
도 33은, SSD(100)을 탑재한 퍼스널 컴퓨터(200)의 시스템 구성예를 나타낸다. 퍼스널 컴퓨터(200)는 CPU(301), 노스 브릿지(north bridge)(302), 주메모리(303), 비디오 컨트롤러(304), 오디오 컨트롤러(305), 사우스 브릿지(south bridge)(309), BIOS-ROM(310), SSD(100), ODD 유닛(311), 임베디드 컨트롤러/키보드 컨트롤러 IC(EC/ kBC; 311) 및 네트워크 컨트롤러(312) 등을 포함한다.
CPU(301)는 퍼스널 컴퓨터(200)의 동작을 제어하기 위해서 설치된 프로세서이며, SSD(100)로부터 주메모리(303)에 로드되는 오퍼레이팅 시스템(OS)을 실행한다. 또한, ODD 유닛(311)이, 장전된 광디스크에 대하여 독출 처리 및 기록 처리의 적어도 하나의 처리의 실행을 가능하게 한 경우에, CPU(301)는 이들 처리를 실행한다.
또, CPU(301)는 BIOS-ROM(310)에 저장된 시스템 BlOS(Basic Input Output System)도 실행한다. 시스템 BIOS는 퍼스널 컴퓨터(200) 내의 하드웨어 제어를 위한 프로그램이다.
노스 브릿지(302)는, CPU(301)의 로컬 버스와 사우스 브릿지(309) 사이를 접속하는 브릿지 디바이스이다. 노스 브릿지(302)에는 주메모리(303)를 액세스 제어하는 메모리 컨트롤러도 내장되어 있다.
또, 노스 브릿지(302)는, AGP(Accelerated Graphics Port) 버스 등을 통해 비디오 컨트롤러(304)와의 통신 및 오디오 컨트롤러(305)와의 통신을 실행하는 기능도 갖고 있다.
주메모리(303)는 프로그램이나 데이터를 일시적으로 기억하고, CPU(301)의 작업 영역으로서 기능한다. 주메모리(303)는 예를 들어 DRAM으로 구성된다.
비디오 컨트롤러(304)는 퍼스널 컴퓨터(200)의 디스플레이 모니터로서 사용되는 표시 유닛(202)을 제어하는 비디오 재생 컨트롤러이다.
오디오 컨트롤러(305)는 퍼스널 컴퓨터(200)의 스피커를 제어하는 오디오 재생 컨트롤러이다.
사우스 브릿지(309)는 LPC(Low Pin Count) 버스 상의 각 디바이스 및 PCI(Peripheral Component Interconnect) 버스 상의 각 디바이스를 제어한다. 또, 사우스 브릿지(309)는 각종 소프트웨어 및 데이터를 저장하는 기억 장치인 SSD(100)을, ATA 인터페이스를 통해 제어한다.
퍼스널 컴퓨터(200)는 섹터 단위로 SSD(100)에의 액세스를 행한다. ATA 인터페이스를 통해, 기록 커맨드, 독출 커맨드, 플래시 커맨드 등이 SSD(100)에 입력된다.
또, 사우스 브릿지(309)는 BIOS-ROM(310) 및 ODD 유닛(311)을 액세스 제어하기 위한 기능도 갖고 있다.
EC/KBC(311)는 전력 관리를 위한 임베디드 컨트롤러와, 키보드(KB; 206) 및 터치 패드(207)를 제어하기 위한 키보드 컨트롤러가 집적된 1 칩 마이크로 컴퓨터이다.
이 EC/KBC(311)는 사용자에 의한 파워 버튼의 조작에 따라 퍼스널 컴퓨터(200)의 전원을 온/오프하는 기능을 갖고 있다. 네트워크 컨트롤러(312)는, 예를 들어 인터넷 등의 외부 네트워크와의 통신을 실행하는 통신 장치이다.
본원 발명은 상기 실시형태에 한정되지 않고, 실시 단계에서는 그 요지를 일탈하지 않는 범위에서 다양하게 변형하는 것이 가능하다.
또한, 상기 실시형태에는 여러 단계의 발명이 포함되어 있고, 개시되는 복수의 구성 요건에서의 적절한 조합에 의해 다양한 발명이 추출될 수 있다.
예를 들어, 실시형태에 개시된 전체 구성 요건에서 몇가지 구성 요건이 삭제되더라도, 발명이 해결하고자 하는 과제를 해결할 수 있고, 발명의 효과를 얻을 수 있는 경우에는, 이 구성 요건이 삭제된 구성이 발명으로서 추출될 수 있다.
또, 상기 실시형태에서는, 클러스터 사이즈의 2 이상의 자연수배가 논리 페이지 사이즈와 같다고 하여 설명했지만, 반드시 이에 한정되는 것은 아니다.
예를 들어, 클러스터 사이즈는 논리 페이지 사이즈와 같아도 되고, 복수의 논리 페이지를 조합하여, 논리 페이지 사이즈의 2 이상의 자연수배로 해도 된다.
또한, 클러스터 사이즈는, 퍼스널 컴퓨터 등의 호스트 장치(1) 상에서 동작하는 OS(Operating System)의 파일 시스템의 관리 단위와 같은 사이즈로 해도 된다.
또, 상기 실시형태에서는, 트랙 사이즈의 2 이상의 자연수배가 논리 블록 사이즈와 같다고 하여 설명했지만, 반드시 이에 한정되는 것은 아니다.
예를 들어, 트랙 사이즈는 논리 블록 사이즈와 같아도 되고, 복수의 논리 블 록을 조합하여, 논리 블록 사이즈의 2 이상의 자연수배로 해도 된다.
트랙 사이즈가 논리 블록 사이즈 이상인 경우는, MS(11)의 컴팩션 처리는 불필요해지고, TFS(11b)를 삭제해도 된다.
또 다른 효과나 변형예는 당업자에 의해 용이하게 도출할 수 있다. 따라서, 본 발명의 보다 광범위한 형태는, 이상과 같이 나타내고 또한 기술한 특정한 상세한 설명 및 대표적인 실시형태에 한정되지 않는다. 따라서, 첨부 특허청구범위 및 그 균등물에 의해 정의되는 총괄적인 발명의 개념의 정신 또는 범위에서 일탈하지 않고, 다양한 변경이 가능하다.
도 1은 SSD의 구성예를 나타내는 블록도.
도 2는 NAND 메모리 칩에 포함되는 1개의 블록의 구성예와, 4치 데이터 기억 방식에서의 임계값 분포를 나타내는 도면.
도 3은 드라이브 제어 회로의 하드웨어적인 내부 구성예를 나타내는 블록도.
도 4는 프로세서의 기능 구성예를 나타내는 블록도.
도 5는 NAND 메모리 및 DRAM 내에 형성된 기능 구성을 나타내는 블록도.
도 6은 WC로부터 NAND 메모리로의 기록 처리에 관한 보다 상세한 기능 블록도.
도 7은 LBA 논리 어드레스를 나타내는 도면.
도 8은 데이터 관리부 내의 관리 테이블의 구성예를 나타내는 도면.
도 9는 RC 클러스터 관리 테이블의 일례를 나타내는 도면.
도 10은 WC 클러스터 관리 테이블의 일례를 나타내는 도면.
도 11은 WC 트랙 관리 테이블의 일례를 나타내는 도면.
도 12는 트랙 관리 테이블의 일례를 나타내는 도면.
도 13은 FS/IS 관리 테이블의 일례를 나타내는 도면.
도 14는 MS 논리 블록 관리 테이블의 일례를 나타내는 도면.
도 15는 FS/IS 논리 블록 관리 테이블의 일례를 나타내는 도면.
도 16은 FS/IS 내 클러스터 관리 테이블의 일례를 나타내는 도면.
도 17은 논리-물리 변환 테이블의 일례를 나타내는 도면.
도 18은 독출 처리의 동작예를 나타내는 흐름도.
도 19는 기록 처리의 동작예를 나타내는 흐름도.
도 20은 각 구성 요소간의 데이터의 흐름에서의 입력과 출력의 조합 및 그 발생 요인을 나타내는 도면.
도 21은 WC로부터 NAND 메모리로의 기록 처리에 관한 보다 더 상세한 기능 블록도.
도 22는 데이터 관리부 내의 관리 테이블의 다른 구성예를 나타내는 도면.
도 23은 병렬 동작 요소와 플레인과 채널의 관계를 나타내는 도면.
도 24는 논리-물리 변환 테이블의 다른 예를 나타내는 도면.
도 25는 BB 관리 테이블의 일례를 나타내는 도면.
도 26은 FB 관리 테이블의 내부 구성예를 나타내는 도면.
도 27은 NAND 메모리의 논리 블록과 물리 블록의 대응 관계를 나타내는 도면.
도 28은 MS 구조 관리 테이블의 일례를 나타내는 도면.
도 29는 FS/IS 구조 관리 테이블의 일례를 나타내는 도면.
도 30은 기록 처리의 동작예를 나타내는 상세한 흐름도.
도 31은 IS의 방출 동작예를 나타내는 흐름도.
도 32는 퍼스널 컴퓨터의 일례를 나타내는 사시도.
도 33은 퍼스널 컴퓨터의 시스템 구성예를 나타내는 도면.
<도면의 주요 부분에 대한 부호의 설명>
1 : 호스트 장치 2: ATA I/F
3 : RS 232C I/F 4: 드라이브 제어 회로
5 : 전원 회로 6 : LED
7 : 온도 센서 8 : 퓨즈
10 : NAND 메모리 100 : SSD
20 : DRAM 200 : 디버그/제조 검사용 기기

Claims (20)

  1. 휘발성 반도체 메모리로 구성되는 캐쉬 메모리로서의 제1 기억 영역과,
    페이지 단위로 독출 및 기록이 행해지고, 상기 페이지 단위의 2 이상의 자연수배의 크기인 블록 단위로 소거가 행해지는 불휘발성 반도체 메모리로 구성되는 제2 및 제3 기억 영역과,
    제3 기억 영역의 입력 버퍼로서 기능하는 제1 입력 버퍼와,
    상기 제3 기억 영역의 입력 버퍼로서 기능하고, 상기 제3 기억 영역의 데이터보다 갱신 빈도가 높은 데이터를 분리 유지하기 위한 제2 입력 버퍼와,
    상기 불휘발성 반도체 메모리의 기억 영역을, 1 이상의 상기 블록에 대응된 논리 블록 단위로 상기 제2 및 제3 기억 영역에 할당하는 컨트롤러
    를 포함하고,
    상기 컨트롤러는,
    상기 제1 기억 영역에 기록된 섹터 단위의 복수의 데이터를 제1 관리 단위의 데이터로서 상기 제2 기억 영역에 방출하는 제1 처리와,
    상기 제1 기억 영역에 기록된 복수의 데이터를 상기 제1 관리 단위의 2 이상의 자연수배의 크기인 제2 관리 단위의 데이터로서 제2 관리 단위의 데이터 단위로 상기 제2 입력 버퍼에 방출하는 제2 처리와,
    상기 제1 기억 영역에 기록된 복수의 데이터를 상기 제2 관리 단위의 데이터로서 상기 논리 블록 단위로 상기 제1 입력 버퍼에 방출하는 제3 처리와,
    상기 제2 기억 영역에 기록된 복수의 데이터를 상기 논리 블록 단위로 상기 제1 입력 버퍼에 방출하는 제4 처리와,
    상기 제1 입력 버퍼에 기록된 복수의 데이터를 상기 논리 블록 단위로 상기 제3 기억 영역으로 이동시키는 제5 처리와,
    상기 제2 입력 버퍼에 기록된 복수의 데이터를 상기 제3 기억 영역으로 이동시키는 제6 처리
    를 실행하는 것을 특징으로 하는 메모리 시스템.
  2. 제1항에 있어서, 상기 컨트롤러는 상기 불휘발성 반도체 메모리의 기억 영역을 상기 논리 블록 단위로 상기 제1 입력 버퍼에 할당하는 것을 특징으로 하는 메모리 시스템.
  3. 제2항에 있어서, 상기 컨트롤러는, 상기 제1 입력 버퍼에 할당되는 논리 블록의 개수가 허용치를 초과한 경우에 상기 제5 처리를 실행하는 것을 특징으로 하는 메모리 시스템.
  4. 제2항에 있어서, 상기 제2 입력 버퍼는,
    상기 제2 처리에 의해 상기 제1 기억 영역에서 방출된 제2 관리 단위의 데이터가 추기(追記)적으로 기록되는 전단(前段) 버퍼와,
    상기 전단 버퍼와 상기 제3 기억 영역 사이에 개재되고, 상기 제3 기억 영역의 데이터보다 갱신 빈도가 높은 데이터를 분리 유지하기 위한 후단(後段) 버퍼
    를 포함하고,
    상기 컨트롤러는, 상기 전단 버퍼에 기록된 복수의 데이터를 논리 블록 단위로 상기 후단 버퍼로 이동시키는 제6 처리를 실행하는 것을 특징으로 하는 메모리 시스템.
  5. 제4항에 있어서, 상기 후단 버퍼는 FIFO 구조로 관리되는 복수의 논리 블록으로 구성되고,
    상기 컨트롤러는, 상기 전단 버퍼 및 후단 버퍼가 상기 불휘발성 반도체 메모리의 기억 영역 내에서 하나 이상의 상기 논리 블록 단위의 기억 용량을 갖도록 설정하고,
    상기 컨트롤러는, 상기 후단 버퍼에 등록된 순서가 가장 오래된 논리 블록 내의 유효 데이터를 논리 블록 단위로 상기 제3 기억 영역으로 이동시키는 제7 처리를 실행하는 것을 특징으로 하는 메모리 시스템.
  6. 제5항에 있어서, 상기 컨트롤러는, 상기 후단 버퍼에 할당된 논리 블록의 수가 허용치를 초과한 경우에 상기 제7 처리를 실행하는 것을 특징으로 하는 메모리 시스템.
  7. 제5항에 있어서, 상기 컨트롤러는, 상기 제3 기억 영역에 할당된 논리 블록의 수가 허용치를 초과한 경우에, 상기 제3 기억 영역에 기억된 상기 제2 관리 단위의 유효 데이터를 복수 선택하여 컴팩션을 행하는 제8 처리를 실행하는 것을 특징으로 하는 메모리 시스템.
  8. 제2항에 있어서, 상기 컨트롤러는, 상기 제2 기억 영역에 할당된 논리 블록의 수가 허용치를 초과한 경우에 상기 제4 처리를 실행하는 것을 특징으로 하는 메모리 시스템.
  9. 제8항에 있어서, 상기 컨트롤러는, 상기 제2 기억 영역에 할당된 논리 블록의 수가 허용치를 초과한 경우에, 상기 제2 기억 영역에 기억된 상기 제1 관리 단위의 유효 데이터를 복수 선택하여 컴팩션을 행하는 제9 처리를 실행하는 것을 특징으로 하는 메모리 시스템.
  10. 제2항에 있어서, 상기 컨트롤러는, 상기 제1 기억 영역 내의 데이터가 속하는 상기 제2 관리 단위의 데이터수가 규정치를 초과한 경우에 상기 제1, 제2 또는 제3 처리를 실행하는 것을 특징으로 하는 메모리 시스템.
  11. 휘발성 반도체 메모리로 구성되는 캐쉬 메모리로서의 제1 기억 영역과,
    페이지 단위로 독출 및 기록이 행해지고, 상기 페이지 단위의 2 이상의 자연수배의 크기인 블록 단위로 소거가 행해지는 불휘발성 반도체 메모리로 구성되는 제2, 제3 및 제4 기억 영역과,
    제3 기억 영역의 입력 버퍼로서 기능하는 제1 입력 버퍼와,
    상기 제3 기억 영역의 입력 버퍼로서 기능하고, 상기 제3 기억 영역의 데이터보다 갱신 빈도가 높은 데이터를 분리 유지하기 위한 제2 입력 버퍼와,
    상기 불휘발성 반도체 메모리의 기억 영역을, 1 이상의 상기 블록에 대응된 논리 블록 단위로 상기 제2, 제3 및 제4 기억 영역에 할당하는 컨트롤러
    를 포함하고,
    상기 컨트롤러는,
    상기 제1 기억 영역에 기록된 섹터 단위의 복수의 데이터를 제1 관리 단위의 데이터로서 상기 제2 기억 영역에 방출하는 제1 처리와,
    상기 제1 기억 영역에 기록된 복수의 데이터를 상기 제1 관리 단위의 2 이상의 자연수배의 크기인 제2 관리 단위의 데이터로서 제2 관리 단위의 데이터 단위로 상기 제2 입력 버퍼에 방출하는 제2 처리와,
    상기 제1 기억 영역에 기록된 복수의 데이터를 상기 제2 관리 단위의 데이터로서 상기 논리 블록 단위로 상기 제1 입력 버퍼에 방출하는 제3 처리와,
    상기 제2 기억 영역에 기억된 복수의 데이터를 상기 논리 블록 단위로 상기 제1 입력 버퍼에 방출하는 제4 처리와,
    상기 제2 기억 영역에 기억된 복수의 데이터를 제2 관리 단위의 데이터로서 제2 관리 단위의 데이터 단위로 상기 제2 입력 버퍼에 방출하는 제5 처리와,
    제4 또는 제5 처리의 실행후, 상기 제2 기억 영역에 기억된 복수의 데이터를 논리 블록 단위로 상기 제4 기억 영역으로 이동시키는 제6 처리와,
    상기 제4 기억 영역에 기억된 복수의 데이터를 상기 논리 블록 단위로 상기 제1 입력 버퍼에 방출하는 제7 처리와,
    상기 제1 입력 버퍼에 기록된 복수의 데이터를 상기 논리 블록 단위로 상기 제3 기억 영역으로 이동시키는 제8 처리와,
    상기 제2 입력 버퍼에 기록된 복수의 데이터를 상기 제3 기억 영역으로 이동시키는 제9 처리
    를 실행하는 것을 특징으로 하는 메모리 시스템.
  12. 휘발성 반도체 메모리로 구성되는 캐쉬 메모리로서의 제1 기억 영역과,
    페이지 단위로 독출 및 기록이 행해지고, 상기 페이지 단위의 2 이상의 자연수배의 크기인 블록 단위로 소거가 행해지는 불휘발성 반도체 메모리로 구성되는 제2 및 제3 기억 영역과,
    상기 불휘발성 반도체 메모리의 기억 영역을, 1 이상의 상기 블록에 대응된 논리 블록 단위로 상기 제2 및 제3 기억 영역에 할당하는 컨트롤러
    를 포함하고,
    상기 컨트롤러는,
    상기 제1 기억 영역에 기록된 섹터 단위의 복수의 데이터를 제1 관리 단위의 데이터로서 상기 제2 기억 영역에 방출하는 제1 처리와,
    상기 제1 기억 영역에 기록된 복수의 데이터를 상기 제1 관리 단위의 2 이상의 자연수배의 크기인 제2 관리 단위의 데이터로서 제3 기억 영역에 방출하는 제2 처리와,
    상기 제2 기억 영역에 기억된 상기 제1 관리 단위의 유효 데이터를 복수 선택하여 컴팩션을 행하는 제3 처리와,
    제3 처리를 실행하기 전에, 상기 제2 기억 영역에 기록된 복수의 데이터를 상기 논리 블록 단위로 상기 제3 기억 영역에 방출하는 제4 처리
    를 실행하는 것을 특징으로 하는 메모리 시스템.
  13. 제12항에 있어서, 상기 제2 기억 영역에 할당된 논리 블록의 수가 허용치를 초과한 경우에 상기 제3 처리 및 상기 제4 처리를 실행하는 것을 특징으로 하는 메모리 시스템.
  14. 제12항에 있어서, 상기 제4 처리에서는, 상기 제2 기억 영역에 기억된 데이터 중, 상기 제2 기억 영역에 있어서 제1 관리 단위의 유효 데이터를 가장 많이 포함하는 제2 관리 단위의 데이터로부터 순서대로, 상기 제3 기억 영역에 방출하는 데이터로서 우선적으로 선택하는 것을 특징으로 하는 메모리 시스템.
  15. 제12항에 있어서, 상기 제4 처리에서는, 상기 제2 기억 영역에 기억된 데이터 중, 상기 제3 기억 영역에 있어서 유효한 제2 관리 단위의 데이터가 가장 적은 논리 블록에 소속하는 제2 관리 단위의 데이터로부터 순서대로, 상기 제3 기억 영역에 방출하는 데이터로서 우선적으로 선택하는 것을 특징으로 하는 메모리 시스템.
  16. 제12항에 있어서, 상기 제4 처리에서는, 상기 제2 기억 영역에 기억된 데이터 중, 상기 제2 기억 영역에 있어서 제1 관리 단위의 유효 데이터를 가장 많이 포함하고, 상기 제3 기억 영역에 있어서 유효한 제2 관리 단위의 데이터가 가장 적은 논리 블록에 소속하는 제2 관리 단위의 데이터로부터 순서대로, 상기 제3 기억 영역에 방출하는 데이터로서 우선적으로 선택하는 것을 특징으로 하는 메모리 시스템.
  17. 휘발성 반도체 메모리로 구성되는 캐쉬 메모리로서의 제1 기억 영역과,
    페이지 단위로 독출 및 기록이 행해지고, 상기 페이지 단위의 2 이상의 자연수배의 크기인 블록 단위로 소거가 행해지는 불휘발성 반도체 메모리로 구성되는 제2, 제3 및 제4 기억 영역과,
    상기 불휘발성 반도체 메모리의 기억 영역을, 1 이상의 상기 블록에 대응된 논리 블록 단위로 상기 제2, 제3 및 제4 기억 영역에 할당하는 컨트롤러
    를 포함하고,
    상기 컨트롤러는,
    상기 제1 기억 영역에 기록된 섹터 단위의 복수의 데이터를 제1 관리 단위의 데이터로서 상기 제2 기억 영역에 방출하는 제1 처리와,
    상기 제1 기억 영역에 기록된 복수의 데이터를 상기 제1 관리 단위의 2 이상의 자연수배의 크기인 제2 관리 단위의 데이터로서 제3 기억 영역에 방출하는 제2 처리와,
    상기 제2 기억 영역에 기억된 복수의 데이터를 상기 제2 관리 단위의 데이터로서 상기 제3 기억 영역에 방출하는 제3 처리와,
    상기 제3 처리의 실행후, 상기 제2 기억 영역에 기억된 복수의 데이터를 논리 블록 단위로 상기 제4 기억 영역으로 이동시키는 제4 처리와,
    상기 제4 기억 영역에 기억된 상기 제1 관리 단위의 유효 데이터를 복수 선택하여 컴팩션을 행하는 제5 처리와,
    제5 처리를 실행하기 전에, 상기 제4 기억 영역에 기록된 복수의 데이터를 상기 논리 블록 단위로 상기 제3 기억 영역에 방출하는 제6 처리
    를 실행하는 것을 특징으로 하는 메모리 시스템.
  18. 제17항에 있어서, 상기 제4 기억 영역에 할당된 논리 블록의 수가 허용치를 초과한 경우에 상기 제5 처리 및 상기 제6 처리를 실행하는 것을 특징으로 하는 메모리 시스템.
  19. 제18항에 있어서, 상기 제6 처리에서는, 상기 제2 기억 영역에 기억된 데이터 중, 상기 제2 기억 영역에 있어서 제1 관리 단위의 유효 데이터를 가장 많이 포함하고, 상기 제3 기억 영역에 있어서 유효한 제2 관리 단위의 데이터가 가장 적은 논리 블록에 소속하는 제2 관리 단위의 데이터로부터 순서대로, 상기 제3 기억 영역에 방출하는 데이터로서 우선적으로 선택하는 것을 특징으로 하는 메모리 시스템.
  20. 제19항에 있어서, 상기 제1 관리 단위는, 상기 섹터 단위의 자연수배이고 또한 상기 페이지 단위의 2 이상의 자연수분의 1배의 크기이고, 상기 제2 관리 단위는, 상기 페이지 단위의 2 이상의 자연수배이고 또한 상기 블록 단위의 2 이상의 자연수분의 1배의 크기인 것을 특징으로 하는 메모리 시스템.
KR1020090016984A 2008-03-01 2009-02-27 메모리 시스템 KR101067457B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
JP2008051475A JP4592774B2 (ja) 2008-03-01 2008-03-01 メモリシステム
JPJP-P-2008-051475 2008-03-01
JP2008063404A JP4510107B2 (ja) 2008-03-12 2008-03-12 メモリシステム
JPJP-P-2008-063404 2008-03-12

Publications (2)

Publication Number Publication Date
KR20090094196A KR20090094196A (ko) 2009-09-04
KR101067457B1 true KR101067457B1 (ko) 2011-09-27

Family

ID=41089998

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020090016984A KR101067457B1 (ko) 2008-03-01 2009-02-27 메모리 시스템

Country Status (2)

Country Link
US (1) US8108593B2 (ko)
KR (1) KR101067457B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10353627B2 (en) 2016-09-07 2019-07-16 SK Hynix Inc. Memory device and memory system having the same

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5221332B2 (ja) * 2008-12-27 2013-06-26 株式会社東芝 メモリシステム
JP5317689B2 (ja) * 2008-12-27 2013-10-16 株式会社東芝 メモリシステム
JP5317690B2 (ja) * 2008-12-27 2013-10-16 株式会社東芝 メモリシステム
CN102317925B (zh) 2009-02-12 2014-07-23 株式会社东芝 存储器系统和控制存储器系统的方法
JP2012141946A (ja) * 2010-12-16 2012-07-26 Toshiba Corp 半導体記憶装置
JP2013097416A (ja) * 2011-10-28 2013-05-20 Hitachi Ltd 記憶装置および計算機
JP5813589B2 (ja) * 2012-07-13 2015-11-17 株式会社東芝 メモリシステムおよびその制御方法
US9093133B2 (en) * 2013-01-03 2015-07-28 Stmicroelectronics S.R.L. Buffer for ordering out-of-order data, and corresponding integrated circuit and method for managing a buffer
CN103544995B (zh) * 2013-08-27 2016-09-21 华为技术有限公司 一种坏道修复方法及装置
KR102147993B1 (ko) 2013-11-14 2020-08-25 삼성전자주식회사 불휘발성 메모리 시스템 및 그것의 동작 방법
US9645895B2 (en) 2013-12-26 2017-05-09 Silicon Motion, Inc. Data storage device and flash memory control method
US9880778B2 (en) * 2015-11-09 2018-01-30 Google Inc. Memory devices and methods
US10261704B1 (en) 2016-06-29 2019-04-16 EMC IP Holding Company LLC Linked lists in flash memory
US10331561B1 (en) 2016-06-29 2019-06-25 Emc Corporation Systems and methods for rebuilding a cache index
US10037164B1 (en) 2016-06-29 2018-07-31 EMC IP Holding Company LLC Flash interface for processing datasets
US10146438B1 (en) 2016-06-29 2018-12-04 EMC IP Holding Company LLC Additive library for data structures in a flash memory
US10055351B1 (en) 2016-06-29 2018-08-21 EMC IP Holding Company LLC Low-overhead index for a flash cache
US10089025B1 (en) 2016-06-29 2018-10-02 EMC IP Holding Company LLC Bloom filters in a flash memory
KR102519458B1 (ko) 2016-11-01 2023-04-11 삼성전자주식회사 비휘발성 메모리 장치 및 그것의 동작 방법

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100389867B1 (ko) 2001-06-04 2003-07-04 삼성전자주식회사 플래시 메모리 관리방법
KR20060053773A (ko) * 2004-11-17 2006-05-22 삼성전자주식회사 데이터 버퍼의 상태 정보를 이용하여 동작 전류를감소시킬 수 있는 메모리 카드
KR20070022659A (ko) * 2004-03-08 2007-02-27 쌘디스크 코포레이션 플래시 제어기 캐시 아키텍처

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU645494B2 (en) 1989-09-11 1994-01-20 Lg Electronics Inc. Apparatus and method for maintaining cache/main memory consistency
JPH09160813A (ja) 1995-12-08 1997-06-20 Sony Corp ファイル管理装置
JP3688835B2 (ja) 1996-12-26 2005-08-31 株式会社東芝 データ記憶システム及び同システムに適用するデータ転送方法
US7139864B2 (en) 2003-12-30 2006-11-21 Sandisk Corporation Non-volatile memory and method with block management system
KR100526190B1 (ko) 2004-02-06 2005-11-03 삼성전자주식회사 플래시 메모리의 재사상 방법
JP4768237B2 (ja) 2004-06-25 2011-09-07 株式会社東芝 携帯可能電子装置及び携帯可能電子装置の制御方法
US7212440B2 (en) 2004-12-30 2007-05-01 Sandisk Corporation On-chip data grouping and alignment
KR100684942B1 (ko) 2005-02-07 2007-02-20 삼성전자주식회사 복수의 사상 기법들을 채용한 적응형 플래시 메모리 제어장치 및 그것을 포함한 플래시 메모리 시스템
JP2006285669A (ja) 2005-03-31 2006-10-19 Toshiba Corp ホスト機器
JP4961693B2 (ja) 2005-07-29 2012-06-27 ソニー株式会社 コンピュータシステム
JP4751163B2 (ja) 2005-09-29 2011-08-17 株式会社東芝 メモリシステム
JP5002201B2 (ja) 2006-06-30 2012-08-15 株式会社東芝 メモリシステム
JP2008033788A (ja) 2006-07-31 2008-02-14 Matsushita Electric Ind Co Ltd 不揮発性記憶装置、データ記憶システム、およびデータ記憶方法
KR101077339B1 (ko) 2007-12-28 2011-10-26 가부시끼가이샤 도시바 반도체 기억 장치
JP4592774B2 (ja) 2008-03-01 2010-12-08 株式会社東芝 メモリシステム
JP4498426B2 (ja) 2008-03-01 2010-07-07 株式会社東芝 メモリシステム

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100389867B1 (ko) 2001-06-04 2003-07-04 삼성전자주식회사 플래시 메모리 관리방법
KR20070022659A (ko) * 2004-03-08 2007-02-27 쌘디스크 코포레이션 플래시 제어기 캐시 아키텍처
KR20060053773A (ko) * 2004-11-17 2006-05-22 삼성전자주식회사 데이터 버퍼의 상태 정보를 이용하여 동작 전류를감소시킬 수 있는 메모리 카드

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
S.W. LEE et al.,"A Log Buffer-Based Flash Translation Layer Using Fully-Associative Sector Translation", Journal of ACM TECS, Vol. 6, Issue 3, ISSN:1539-9087, July 2007.

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10353627B2 (en) 2016-09-07 2019-07-16 SK Hynix Inc. Memory device and memory system having the same

Also Published As

Publication number Publication date
US20090240871A1 (en) 2009-09-24
KR20090094196A (ko) 2009-09-04
US8108593B2 (en) 2012-01-31

Similar Documents

Publication Publication Date Title
KR101067457B1 (ko) 메모리 시스템
KR101018766B1 (ko) 메모리 시스템
KR101075923B1 (ko) 메모리 시스템
KR101066937B1 (ko) 메모리 시스템 및 그 데이터 소거 방법
KR101079890B1 (ko) 메모리 시스템
US9092324B2 (en) Memory system and method for controlling a nonvolatile semiconductor memory
US8762631B2 (en) Memory system
KR101101655B1 (ko) 메모리 시스템
JP4691122B2 (ja) メモリシステム
JP4691123B2 (ja) メモリシステム
JP4592774B2 (ja) メモリシステム
JP5221593B2 (ja) メモリシステム
JP4510107B2 (ja) メモリシステム
KR101032671B1 (ko) 메모리 시스템
JP5178857B2 (ja) メモリシステム

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
LAPS Lapse due to unpaid annual fee