KR100983212B1 - 데이터 런 프로그래밍 - Google Patents

데이터 런 프로그래밍 Download PDF

Info

Publication number
KR100983212B1
KR100983212B1 KR1020067013319A KR20067013319A KR100983212B1 KR 100983212 B1 KR100983212 B1 KR 100983212B1 KR 1020067013319 A KR1020067013319 A KR 1020067013319A KR 20067013319 A KR20067013319 A KR 20067013319A KR 100983212 B1 KR100983212 B1 KR 100983212B1
Authority
KR
South Korea
Prior art keywords
data
delete delete
adaptive
metablock
logical
Prior art date
Application number
KR1020067013319A
Other languages
English (en)
Other versions
KR20070012630A (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 US10/749,189 external-priority patent/US7433993B2/en
Priority claimed from US10/841,118 external-priority patent/US20050144363A1/en
Application filed by 쌘디스크 코포레이션 filed Critical 쌘디스크 코포레이션
Publication of KR20070012630A publication Critical patent/KR20070012630A/ko
Application granted granted Critical
Publication of KR100983212B1 publication Critical patent/KR100983212B1/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
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • 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

데이터 런의 데이터는 데이터 경계의 위치에 따라 정렬된 적응형 메타블록의 비-휘발성 메모리의 어레이 내에 저장된다.다른 데이터는 비-휘발성 메모리로 직접 저장되는 반면, 직렬 플래시 버퍼는 일부 데이터를 저장하는데 사용된다. 데이터는 일련의 업데이트의 효율을 증진시키기 위해 데이터의 업데이트 중에 데이터 경계에 일렬정렬로 저장 된다.

Description

데이터 런 프로그래밍{DATA RUN PROGRAMMING}
본 발명은 일반적으로 비휘발성 메모리 시스템들의 동작(operation)에 관한 것이며, 더욱 상세하게는 그러한 메모리 시스템들 내의 데이터의 핸들링(handling)에 관한 것이다.
오늘날 많은 상업적으로 성공적인 비휘발성 메모리 제품들이 사용되고 있으며, 특히 하나 이상의 집적 회로 칩들 상에 형성된 플래시 EEPROM (전기적으로 소거 가능하고 프로그램 가능한 판독 전용 메모리)의 어레이를 사용하는 소형 팩터 카드들의 형태의 제품들이 사용되고 있다. 메모리 컨트롤러는 보편적으로 반드시 별개의 집적 회로 칩 상에서가 아니라, 카드가 소거 가능하게 접속된 호스트와 인터페이스되고, 그 카드 내의 메모리 어레이의 동작을 제어한다. 그러한 컨트롤러는 전형적으로 마이크로프로세서, 일부 비휘발성 판독-전용-메모리(ROM), 휘발성 랜덤 액세스 메모리(RAM) 및 하나 이상의 특수 회로들, 예를 들면 데이터를 프로그래밍하고 판독하는 동안 컨트롤러를 통해 통과함에 따라 데이터로부터 에러-정정-코드(ECC)를 산출하는 것을 포함한다. 상업적으로 입수할 수 있는 카드들의 일부는 CompactFlashTM(CF) 카드들, 멀티미디어 카드들(MMC), 보안 디지털 (SD) 카드들, 스마트 미디어 카드들, 인사 태그들 (P-Tag) 및 메모리 스틱 카드들이다. 호스트들은 개인용 컴퓨터들, 노트북 컴퓨터들, 개인 휴대 정보 단말기들(PDAs), 여러 가지 데이터 통신 디바이스들, 디지털 카메라들, 셀룰러 전화기들, 휴대용 오디오 플레이어들, 자동차용 음향 시스템들 및 유사한 유형의 장비들을 포함한다. 메모리 카드 구현 외에, 이러한 유형의 메모리는 여러 가지 유형의 호스트 시스템들 내로 대신에 내장될 수 있다.
2개의 범용 메모리 셀 어레이 아키텍춰들은 상업적 용도, NOR 및 NAND를 발견하게 되었다. 전형적인 NOR 어레이에서, 메모리 셀들은 셀들의 열들을 따라 확장하는 워드 라인들에 접속한 제어 게이트와 행 방향으로 확장하는 드레인 확장부들과 인접한 비트 라인 소스 사이에 접속된다. 메모리 셀은 소스와 드레인 사이의 셀 채널 영역의 적어도 일부 상으로 배치된 적어도 하나의 저장 소자를 포함한다. 따라서, 저장 소자들 상의 전하의 프로그램된 레벨은 셀들의 동작 특성들을 제어하고, 이는 어드레스된 메모리 셀들에 적절한 전압들을 인가함으로써 판독될 수 있다. 그러한 셀들의 예, 메모리 시스템들 내의 이들의 용도들 및 이들의 제조 방법들은 미합중국 특허 제5,070,032호, 제5,095,344호, 제5,313,421호, 제5,315,541호, 제5,343,063호, 제5,661,053호 및 제6,222,762호에 주어져 있으며, 이들 모든 특허와 함께 본원에 인용된 특허 출원들은 이들의 전문을 참고 문헌으로서 인용한다.
NAND 어레이는 셀들의 행들을 형성할 가능성이 있는 레퍼런스와 개개의 비트 라인들 사이에 하나 이상의 선택 트랜지스터들에 따라 접속된 2개 이상, 예를 들면 16 및 32 메모리 셀들의 직렬 스트링들을 이용한다. 워드 라인들은 많은 수의 이들 컬럼들 내에서 셀들을 가로질러 확장한다. 행 내의 개별 셀은 스트링 내의 나머지 셀들이 가동되기 어렵게 함으로써 프로그래밍하는 동안 판독되고 검증되고, 그에 따라 스트링을 통해 흐르는 전류는 어드레스된 셀 내에 저장된 전하의 레벨에 의존한다. NAND 아키텍춰 어레이들의 예들 및 메모리 시스템의 일부로서 이들의 동작은 미합중국 특허 제5,570,315호, 제5,774,397호, 제6,046,935호 및 제6,522,580호에서 찾게 되었다.
상기 참조 특허들에서 고찰된 바의 현행 플래시 EEPROM 어레이들의 전하 저장 소자들은 전형적으로 도전성의 도포된 폴리실리콘 물질로부터 형성된 가장 XD상적인 전기 도전성 플로팅 게이트들이다. 플래시 EEPROM 시스템들에 유용한 메모리 셀의 대체 유형은 비휘발성 방식으로 전하를 저장하는 도전성 플로팅 게이트 대신에 비도전성의 유전 물질을 이용한다. 이산화 규소, 질화 규소 및 산화 질소(ONO)로 형성된 삼층 유전체는 메모리 셀 채널 위의 반도전성 기판의 표면과 도전성 제어 게이트 사이에 샌드위치된다. 셀은 셀 채널로부터 전자들을 질화물에 주입함으로써 프로그램되고, 여기서 이들 전자들을 제한된 영역 내에서 포집 및 저장되고, 고온 홀들을 질화물 내로 주입함으로써 소거된다. 유전체 저장 소자들을 사용하는 여러 가지 특이적 셀 구조들 및 어레이들은 Harari 등의 미합중국 특허 출원 공개 제2003/09093호에 개시되어 있다.
개개의 플래시 EEPROM 셀들은 하나 이상의 데이터 비트들로 대표되는 전하 저장 소자 또는 단위 내에 일정량의 전하를 저장한다. 저장 소자의 전하 레벨은 그의 메모리 셀의 임계 전압(통상적으로 VT로 참고됨)을 제어하고, 이는 셀의 저장 상태의 판독에 기초하여 사용된다. 임계 전압 창은 통상적으로 메모리 셀의 2개 이상의 저장 상태 각각에 대해 하나씩 많은 범위로 분할된다. 이들 범위는 개개의 셀들의 저장 상태를 결정하게 하는 공칭 감지 레벨을 포함하는 가드밴드들에 의해 분리된다. 이들 저장 레벨들은 이웃하거나 또는 다른 관련된 메모리 셀들, 페이지들 또는 블록들에서 수행되는 프로그래밍, 판독 또는 소거 동작들을 하전 방해한 결과로서 이동한다. 따라서, 에러 정정 코드들(EECs)은 컨트롤러에 의해 산출되고, 프로그램되고 있는 호스트 데이터에 따라 저장되고, 데이터를 검증하기 위해 판독되는 동안 사용되고, 필요할 경우 일부 레벨의 데이터 정정을 수행한다. 또한, 전하 레벨들을 이동시키는 것은 방해 동작들이 이들의 제한된 범위에서 완전히 벗어나 이동하게 하고 따라서 오류 데이터가 판독되게 하기 전에, 때때로 이들의 상태 범위들의 중심으로 되돌려 복구될 수 있다. 데이터 리프레쉬 또는 스크럽이라 칭하는 이러한 공정은 미합중국 특허 제5,532,962호 및 제5,909,449호에 기재되어 있다.
거의 모든 집적 회로 용도들에서와 같이, 일부 집적 회로 기능을 구현하는데 필요한 실리콘 기판 영역을 수축시키는 압력은 플래시 EEPROM 메모리 셀 어레이들에 의해 존재하기도 한다. 주어진 크기의 메모리 및 기타 유형의 패키지들의 저장 커패시티(capacity)를 증가시키기 위해서 또는 커패시티를 증가시키고 크기를 감소시키기 위해 실리콘 기판의 주어진 영역에 저장될 수 있는 디지털 데이터의 양을 증가시키는 것이 지속적으로 요구된다. 데이터의 저장 밀도를 증가시키는 한 가지 방식은 메모리 셀 당 및/또는 저장 단위 또는 소자당 1비트 이상의 데이터를 저장하는 것이다. 이는 저장 소자 전하 레벨 전압 범위의 창을 2개 이상의 상태들로 분할함으로써 수행된다. 4가지 그러한 상태들의 사용은 각각의 셀이 2비트의 데이터를 저장하게 하고, 8개의 상태들은 저장 소자당 3비트의 데이터를 저장한다. 플로팅 게이트들을 사용하는 다중 상태 플래시 EEPROM 구조물들 및 이들의 동작은 미합중국 특허 제5,043,940호 및 제5,172,338호에 기재되어 있으며 유전성 플로팅 게이트들을 사용하는 구조물들에 대해 상기 미합중국 특허 출원 공개 제2003/0109093호에 기재되어 있다. 다중 상태 메모리 셀 어레이의 선택된 부분들은 미합중국 특허 제5,930,167호 및 제6,456,528호에 기재된 방식으로 여러 가지 이유에서 2 상태(이진수)로 동작될 수도 있다.
전형적인 플래시 EEPROM 어레이의 메모리 셀들은 함께 소거되는 셀들의 이산적인 블록들 내로 분할된다. 즉, 소거 블록은 동시에 소거될 수 있는 최소 수의 셀들인 소거 단위이다. 각각의 소거 블록은 전형적으로 한 페이지 이상의 데이터를 저장하고, 하나 이상의 페이지는 상이한 서브-어레이들 또는 플레인들에서 병렬로 프로그램되거나 판독되더라도, 페이지는 프로그래밍되거나 또는 판독되는 최소 단위이다. 각각의 페이지는 전형적으로 하나 이상의 데이터 섹터들을 저장하고, 섹터의 크기는 호스트 시스템에 의해 정의된 것이다. 일 예의 섹터는 512 바이트의 사용자 데이터를 포함하고, 자기 디스크 드라이브들에 의해 확립된 표준에 따라, 사용자 데이터에 관한 일부 바이트들의 수의 오버헤드 정보 및/또는 이들이 저장되는 소거 블록을 포함한다. 그러한 메모리들은 전형적으로 각각의 소거 블록 내에 16, 32 이상의 페이지들에 의해 구성되고, 각각의 페이지들은 데이터의 하나 또는 단지 몇몇 호스트 섹터들을 저장한다.
메모리 어레이 내로 사용자 데이터를 프로그래밍하는 동안 병렬처리(parallelism)를 증가시키기 위해, 이 어레이는 전형적으로 통상적으로 플레인들이라 칭해지는 서브-어레이들로 분할되고, 이는 병렬로 동작을 허용하도록 자신의 데이터 레지스터들 및 기타 회로들을 포함함으로써 여러 개 또는 모든 플레인들 각각으로 동시에 프로그램되거나 또는 그로부터 판독될 수 있다. 단일 집적 회로 상의 어레이는 물리적으로 플레인들 내로 분할될 수 있거나, 또는 각각의 플레인은 별개의 하나 이상의 집적 회로 칩들로부터 형성될 수 있다. 그러한 메모리 구현의 예들은 미합중국 특허 제5,798,968호 및 제5,890,192호에 개시되어 있다.
일부 메모리 시스템들에서, 물리적 메모리 셀들은 2개 이상의 그룹 내로 그룹화되기도 한다. 이 구역 특정 범위의 논리 블록 어드레스들이 맵핑되는 물리적 메모리 또는 메모리 시스템의 임의의 분배된 서브셋일 수 있다. 예를 들면, 64 메가바이트의 데이터를 저장할 수 있는 메모리 시스템은 구역당 16 메가바이트의 데이터를 저장하는 4개의 구역들 내로 분배될 수 있다. 이어서, 논리 블록 어드레스들의 범위는 4개의 그룹으로 분할되고, 하나의 그룹은 4개의 구역들 각각의 소거 블록들에 할당된 것이다. 논리 블록 어드레스들은 전형적인 구현으로 억제됨으로써, 각각의 데이터는 논리 블록 어드레스들이 맵핑되는 단일 물리적 구역 외부에 전혀 기록되지 않는다. 각각 그들 자신의 어드레싱, 프로그래밍 및 판독 회로들을 갖는 플레인들(서브-어레이들) 내로 분할된 메모리 셀 어레이에서, 각각의 구역은 다수의 플레인들로부터 소거 블록들, 전형적으로 각각의 플레인들로부터 동일한 수의 소거 블록들을 포함하는 것이 바람직하다. 구역들은 우선 물리적 변환(physical translation)에 대한 논리 회로 등의 어드레스 관리를 단순화시키기 위해 사용되고, 보다 적은 변환 테이블들, 이들 테이블들을 유지하는데 필요한 보다 적은 RAM 메모리, 및 메모리의 현재 활성인 영역을 다루기 위한 빠른 액세스 시간을 초래하지만, 이들의 제한적인 특성 때문에 최적에 못 미치는 적은 웨어 레벨링(wear leveling)을 초래할 수 있다.
메모리를 더욱 효율적으로 관리하기 위해, 소거 블록들은 가상의 블록들 또는 메타블록들을 형성하기 위해 함께 연결될 수 있다. 즉, 각각의 메타블록은 각각의 플레인으로부터 하나의 소거 블록을 포함하도록 한정된다. 메타블록은 데이터를 프로그래밍하고 판독하기 위한 목적으로 호스트 논리 블록 어드레스에 의해 식별된다. 마찬가지로, 메타블록의 모든 소거 블록들은 함께 소거된다. 그와 같이 큰 블록들 및/또는 메타블록들에 의해 동작되는 메모리 시스템의 컨트롤러는 호스트로부터 수신된 논리 블록 어드레스들(LBAs)과 메모리 셀 어레이 내의 물리적 블록 번호들(PBNs) 사이의 변환을 포함하는 많은 기능들을 수행한다. 블록들 내의 개개의 페이지들은 전형적으로 블록 어드레스 내의 오프셋들에 의해 식별된다. 어드레스 변환은 종종 논리 블록 번호(LBN)와 논리 페이지의 중간 용어들의 사용을 포함한다.
메타블록에 저장된 데이터는 종종 업데이트되고, 메타블록 내에서 발생하는 업데이트 가능성은 메타블록의 데이터 용량이 증가함에 따라 증가한다. 하나의 메타블록의 업데이트된 섹터들은 보편적으로 다른 메타블록에 기록된다. 변화되지 않은 섹터들은 보편적으로 데이터를 병합하기 위해 동일한 프로그래밍 동작의 일부로서 오리지널 메타블록으로부터 다른 메타블록으로 카피되기도 한다. 대안으로, 변화되지 않은 데이터는 업데이트된 데이터와의 이후 병합이 단일 메타블록 내로 이후에 이루어질 때까지 오리지널 메타블록에 남겨질 수 있다.
변화되지 않은 섹터들을 카피하는 것은 카피에 필요한 시간에 부가될 수 있고, 소거 동작이 수행될 때까지 오리지널 메타블록이 사용될 수 없기 때문에 메모리 어레이 내의 데이터에 의해 점유된 공간에 부가된다. 변화되지 않은 섹터들을 카피하는 것은 상이한 메타블록들 내로 호스트 파일들의 논리 정렬의 결과이다. 메타블록이 2개의 호스트 파일들의 일부들을 포함하는 경우, 파일들 중의 하나를 업데이트하는 것은 동일한 메타블록에 저장된 다른 파일의 일부를 카피하는 것을 포함하기도 한다. 메타블록들이 보다 커짐에 따라, 카피되는 부분들도 역시 커지게 된다. 따라서, 논리 분열(fragmentation)은 메타블록들이 더 커짐에 따라 더 큰 문제가 된다.
소거된 블록 풀(pool)에 유지된 일부 여분의 소거 블록들에 의해 큰 블록 또는 메타블록 시스템들을 동작시키는 것이 통상적이다. 소거 블록의 용량보다 적은 한 페이지 이상의 데이터들이 업데이트될 때, 풀로부터 소거 블록에 업데이트된 페이지들을 기록하고, 풀 블록을 소거하기 위해 오리지널 소거 블록으로부터 변화되지 않은 페이지들의 데이터를 카피하는 것이 전형적이다. 이러한 기술의 변형들은 상기 미합중국 특허 제6,763,424호에 기재되어 있다. 시간이 지남에 따라, 호스트 데이터 파일들이 재기록되고 업데이트된 결과로서, 많은 소거 블록들은 유효 데이터를 포함하는 비교적 적은 수의 그의 페이지들로 종료될 수 있고, 나머지 페이지들은 더 이상 현재가 아닌 데이터를 포함한다. 어레이의 데이터 저장 용량을 효율적으로 사용할 수 있도록, 유효 데이터의 논리적으로 관련된 데이터 페이지들은 때때로 다중 소거 블록들 사이의 단편들로부터 함께 수집되고, 보다 적은 수의 소거 블록들 내로 함께 병합된다. 이러한 공정은 통상적으로 "가베지 수집(garbage collection)"이라 칭한다.
소거된 블록 풀(pool)에 유지된 일부 여분의 소거 블록들에 의해 큰 블록 또는 메타블록 시스템들을 동작시키는 것이 통상적이다. 소거 블록의 용량보다 적은 한 페이지 이상의 데이터들이 업데이트될 때, 풀로부터 소거 블록에 업데이트된 페이지들을 기록하고, 풀 블록을 소거하기 위해 오리지널 소거 블록으로부터 변화되지 않은 페이지들의 데이터를 카피하는 것이 전형적이다. 이러한 기술의 변형들은 상기 미합중국 특허 제6,763,424호에 기재되어 있다. 시간이 지남에 따라, 호스트 데이터 파일들이 재기록되고 업데이트된 결과로서, 많은 소거 블록들은 유효 데이터를 포함하는 비교적 적은 수의 그의 페이지들로 종료될 수 있고, 나머지 페이지들은 더 이상 현재가 아닌 데이터를 포함한다. 어레이의 데이터 저장 용량을 효율적으로 사용할 수 있도록, 유효 데이터의 논리적으로 관련된 데이터 페이지들은 때때로 다중 소거 블록들 사이의 단편들로부터 함께 수집되고, 보다 적은 수의 소거 블록들 내로 함께 병합된다. 이러한 공정은 통상적으로 "가베지 수집(garbage collection)"이라 칭한다.
메모리 어레이의 하나의 소거 블록 내의 데이터와 동일한 데이터를 포함하는 논리 그룹들은 논리적으로 순차적인 섹터들로부터 형성된다. 적응형 논리 블록들은 논리 그룹들로부터 형성된다. 적응형 논리 블록들은 상이한 수의 논리 그룹들을 포함할 수 있다. 개개의 적응형 논리 블록들은 메모리 어레이 내의 개개의 적응형 메타블록들에 저장된다. 적응형 메타블록 내의 소거 블록들의 수는 대응하는 적응형 논리 블록 내의 논리 그룹들의 수와 동일하다. 따라서, 적응형 메타블록은 가변적인 수의 소거 블록들을 갖는다. 메타블록의 소거 블록들은 메모리 어레이의 모든 플레인들보다 적은 플레인으로부터 존재할 수 있다. 하나 이상의 적응형 메타블록은 한번에 프로그램될 수 있다. 적응형 메타블록들은 저장될 데이터에 따라 형성될 수 있다. 큰 적응형 메타블록들은 프로그래밍하는 동안 높은 병렬 처리를 얻도록 사용될 수 있다. 더욱 작은 적응형 메타블록들은 저장된 데이터의 효율적인 업데이팅을 허용하도록 사용될 수 있다.
적응형 논리 블록들은 적응형 논리 블록들 사이의 경계들이 데이터 내의 경계들, 예를 들면 파일들 또는 데이터의 스트림들 사이의 경계들을 반사하도록 형성될 수 있다. 이러한 방식으로 적응형 논리 블록들을 맞춤 제작함으로써, 메모리 어레이 내의 데이터의 카피는 감소될 수 있다. 데이터가 업데이트되는 경우, 새로운 적응형 논리 블록이 소량의 오래된 데이터에 의해 업데이트된 데이터를 유지하도록 형성될 수 있다. 따라서, 동일한 데이터가 다시 업데이트되는 경우, 카피될 필요가 있는 소량의 오래된 데이터만이 존재한다.
적응형 논리 블록이 부분적으로 채워지는 경우, 데이터는 보다 작은 적응형 논리 블록으로 카피될 수 있다. 이는 부분적으로 채워진 적응형 논리 블록이 프로그램되기 전에 행해질 수 있거나, 또는 부분적으로 채워진 적응형 논리 블록이 적응형 메타블록 내에서 프로그램된 후에 행해질 수 있고, 그 경우, 부분적으로 채워진 적응형 논리 블록을 포함하는 적응형 메타블록은 퇴물로서 마킹된다. 보다 작은 적응형 논리 블록은 메모리 어레이 내의 보다 작은 적응형 메타블록으로 프로그램된다. 따라서, 메모리 어레이의 공간이 절약된다.
업데이트된 데이터를 유지하기 위해 비순차적으로 업데이트된 메타블록들(카오틱(chaotic) 블록들)을 사용하는 아키텍춰들에서, 적응형 메타블록이 대신 사용될 수 있다. 적응형 메타블록의 크기는 업데이트되고 있는 논리 어드레스 범위에 따라 선택될 수 있다. 적응형 메타블록이 특정 논리 어드레스 범위로 맞춤되는 경우, 보다 적은 데이터가 카피되기 때문에 그러한 범위에서의 업데이트는 보다 효율적으로 수행될 수 있다.
적응형 메타블록들의 형성 및 저장된 데이터의 위치의 기록은 매체 관리자에 의해 수행된다. 매체 관리자는 유효 소거 블록들의 레코드들을 유지한다. 저장된 데이터의 위치들의 레코드들은 또한 매체 관리자에 의해 유지된다. 저장된 데이터의 위치들의 기록들은 각각의 논리 그룹에 대한 엔트리를 갖는 테이블들(또는 리스트들)에 유지된다. 각각의 논리 그룹에 대한 엔트리는 논리 그룹을 포함하는 적응형 메타블록 (및 대응하는 적응형 논리 블록)의 크기, 그의 적응형 논리 블록 내의 논리 그룹의 위치 및 메타블록의 소거 블록들 중의 하나의 물리적 위치를 지시한다.
비휘발성 랜덤 액세스 메모리(NVRAM)는 적응형 메타블록들 내에 데이터를 저장하는 플래시 메모리 어레이와 조합하여 사용될 수 있다. NVRAM은 그것이 플래시 메모리로 프로그램되기 전에 데이터를 유지하는 데이터 버퍼로서 사용될 수 있다. 데이터가 NVRAM에 있는 동안, 그것이 어떻게 효율적으로 프로그램될 수 있을지에 대한 결정이 이루어질 수 있다. 여러 가지 데이터 스트림들이 NVRAM에 유지될 수 있고, 효율적인 방식으로 함께 프로그램될 수 있다. NVRAM은 플래시 메모리 어레이의 일부 대신에 특정 데이터에 대해 대체 저장 위치를 제공할 수도 있다. 이러한 용도에서, NVRAM은 물리적 어드레스 범위를 가질 수 있음으로써 NVRAM에 저장된 논리 그룹들은 NVRAM 물리적 어드레스 범위 내인 물리적 어드레스를 할당하였다. 논리 그룹은 그것이 빈번히 업데이트되는 경우 NVRAM에 할당될 수 있다. 따라서, 업데이트는 플래시 메모리 어레이에서 카피 및 소거 없이 발생할 수 있다. NVRAM에서 데이터를 업데이트하는 것은 플래시 메모리에서보다 효율적이지만, 이 데이터는 비휘발성 메모리에서 이루어질 수 있는 바와 같이 전력이 상실되는 경우에 상실되지 않는다.
파일 경계들(boundaries)과 같은 데이터 경계들은 플래시 메모리에 저장되어야 하는 데이터에서 발생한다. 저장될 데이터가 논리 그룹의 단위들에서 어드레스된 경우, 논리 그룹들 사이의 경계들은 데이터 경계들과 일치할 수 없다. 따라서, 논리 그룹들 및 논리 그룹들로부터 형성된 메타그룹들(논리 블록들)은 데이터 경계들을 포함할 수 있다. 큰 메타그룹들 및 메타블록들이 데이터 경계들을 함유하는 경우, 파일들을 업데이트하는 것은 대량의 데이터를 카피하는 것을 필요로 할 수 있다. 이는 시스템 자원들을 사용하고, 메모리 어레이로의 새로운 데이터의 기록 속도를 감소시킨다.
적응형 메타블록들은 최소 크기의 적응형 메타블록들에 데이터 경계들을 저장하도록 형성될 수 있다. 최소 크기의 메타블록들 내의 데이터 경계들을 프로그래밍함으로써, 파일 내의 데이터의 후속 업데이팅 동안 데이터의 카피가 감소될 수 있다. 파일의 업데이트가 발생할 때, 파일을 포함하는 오리지널 메타블록들은 폐기된 데이터를 포함한다. 일부 오리지널 메타블록들은 업데이트된 파일의 일부가 아닌 데이터를 포함한다. 이들 데이터는 폐기될 수 없고, 따라서 오리지널 메타블록들이 소거되고 재사용되기 전에 새로운 위치로 카피될 필요가 있다. 그러한 오리지널 메타블록들을 보다 작게 만들므로써, 카피되는 데이터의 양이 감소될 수 있다. 하나의 소거 블록으로 구성된 적응형 메타블록이 사용되는 경우, 데이터의 1개 미만의 논리 그룹이 카피된다. 그러한 적응형 메타블록들은 병렬로 프로그램될 수 있음으로써, 감소된 적응형 메타블록 크기는 프로그래밍하는 동안 사용되는 병렬 처리를 감소시키지 않아야 한다.
일부 오리지널 메타블록들은 데이터로 완전히 점유되지 않고, 예를 들면, 파일의 단부에서 데이터 경계가 오리지널 메타블록 내에 있는 경우, 데이터 경계 이후에 어떠한 데이터도 없다. 그러한 오리지널 메타블록들 내의 데이터는 최소한의 빈 공간을 갖는 데이터를 유지하는 크기의 메타블록들로 카피될 수 있다. 이는 메모리 어레이 내의 공간을 절약할 수 있다. 보다 작은 적응형 메타블록들은 병렬로 프로그램될 수 있다. 병렬로 프로그램된 적응형 메타블록들은 재배치된 데이터 및 호스트 데이터를 포함할 수 있음으로써 재배치 동작들은 호스트 데이터가 메모리 어레이에 기록되는 동시에 수행된다.
일부 메모리 시스템들에서, 호스트는 메모리 시스템으로 호스트에 의해 전송된 데이터 내의 논리 경계들(예, 파일 경계들 및 데이터 런 경계들)의 위치들에 관한 메모리 컨트롤러에 정보를 제공할 수 있다. 호스트에 의해 제공되는 (또는 얻어지는) 논리 경계 위치들에 기초하여, 데이터는 먼저 메모리 어레이 또는 NVRAM에서 중간 포맷으로 저장되지 않고, 메모리 어레이 내에 정렬된 포맷으로 직접적으로 저장될 수 있다. 논리 경계들을 포함하지 않는 데이터의 일부는 최대 크기의 메타블록들 내의 메모리 어레이에 직접적으로 기록될 수 있다.
논리 경계를 포함하는 데이터의 일부는 궁극적으로 최소 크기의 메타블록 내에 저장된다. 그러나, 그러한 메타블록을 자체 기록하는 것은 느릴 것이므로, 그러한 데이터의 일부는 먼저 완충될 수 있다. 직렬 플래시 버퍼는 메모리 어레이 내에 정렬된 방식으로 이후 기록되는 호스트로부터 데이터의 일부를 저장하도록 제공된다. 데이터가 직렬 플래시 버퍼로부터 카피될 때, 이들은 1회에 하나 이상의 적응형 메타블록을 기록함으로써 고도의 병렬 처리로 기록될 수 있다. 따라서, 최소-크기 메타블록들에 할당된 데이터는 먼저 최대 병렬 처리로 직렬 플래시 버퍼에 기록되고, 이후에 병렬로 다수의 최소-크기 메타블록들에 기록함으로써 고도의 병렬 처리로 최소-크기 메타블록들로 카피될 수 있다. 이러한 방식으로, 직렬 플래시 버퍼는 작은 메타블록들이 사용되는 경우조차 고도의 병렬 처리(및 그에 따른 높은 성능)를 유지하는데 조력한다. 중간 크기의 메타블록들에 대해, 데이터는 메모리 어레이에 직접적으로 기록될 수 있거나, 또는 먼저 메타블록의 크기에 따라 완충될 수 있다.
메모리에 저장된 데이터의 일부는 그 부분의 각 단부에서 논리 경계들이 최소 크기의 메타블록들에 저장될 때 완전히 정렬된 방식으로 저장될 것으로 고려될 수 있다. 데이터의 일부는 한쪽 단부에서 논리 경계가 최소 크기의 메타블록에 저장되고, 다른 단부에서 논리 경계가 최소 크기 메타블록에 저장되지 않는 경우 부분적으로 정렬된 방식으로 저장된다. 데이터의 일부는 어떠한 논리 경계도 최소 크기 메타블록에 저장되지 않는 경우 비정렬 방식으로 저장된다. 데이터의 일부가 업데이트될 때, 그것이 업데이트하는 데이터보다 높은 정렬도로 저장될 수 있다.
도 1A 및 1B는 각각 함께 동작되는 비휘발성 메모리 및 호스트 시스템의 블록도이고;
도 2는 도 1A의 메모리 어레이의 제1 실시예 체제를 예시하며;
도 3은 도 1A의 메모리 어레이에 저장된 바의 오버헤드 데이터를 갖는 일 예의 호스트 데이터 섹터를 보여주고;
도 4는 도 1A의 메모리 어레이의 제2 실시예 체제를 예시하며;
도 5는 도 1A의 메모리 어레이의 제3 실시예 체제를 예시하고;
도 6은 도 5의 그것과 같은 메모리 어레이의 메타블록의 일 예를 예시하며;
도 7은 도 6에 나타낸 바와 같이 메타블록에 저장된 논리 블록의 예를 보여주고;
도 8은 오리지널 데이터가 메모리 어레이 내의 메타블록들에 저장되는 경우 데이터 업데이트를 보여주며;
도 9A는 메모리 어레이 내의 적응형 메타블록 내에 저장되는 적응형 논리 블록을 보여주고;
도 9B는 도 9A의 적응형 논리 블록들로 논리 그룹들에 대한 섹터들의 논리 맵핑을 보여주며;
도 10은 2개의 적응형 메타블록들로의 2개의 적응형 논리 블록들의 병렬 프로그래밍을 보여주고;
도 11은 여러 구성의 적응형 논리 블록들로 맵핑된 논리 그룹들을 보여주며;
도 12A는 새로운 적응형 논리 블록들에서 업데이트되고 저장된 적응형 논리 블록들에 저장된 데이터를 보여주고;
도 12B는 데이터 스트림들에 부합하도록 재맵핑된 적응형 논리 블록들의 일 예를 보여주며;
도 12C는 데이터 스트림들에 부합하도록 재맵핑된 적응형 논리 블록들의 다른 예를 보여주고;
도 13은 보다 작은 적응형 논리 블록으로 재맵핑되는 부분적으로 채워진 적응형 논리 블록을 보여주며;
도 14는 업데이트되고 있는 논리 어드레스 범위로 채택된 데이터를 업데이트하기 위해 사용된 적응형 논리 블록을 보여주고;
도 15A는 메모리 어레이의 적응형 메타블록에 저장된 적응형 논리 블록을 보여주며;
도 15B는 메모리 어레이에 저장된 도 15A의 적응형 논리 블록의 논리 그룹의 섹터들을 보여주고;
도 15C는 메모리 어레이에 저장된 논리 그룹의 섹터들의 다른 예를 보여주며;
도 15D는 2개의 적응형 메타블록들이 병렬로 프로그램되는 경우 섹터들의 배치의 일 예를 보여주고;
도 15E는 병렬로 3개의 메타 블록들의 프로그래밍 및 메타블록들 내의 페이지들의 결과의 배치의 일 예를 보여주며;
도 15F는 제1의 업데이트 섹터가 적응형 메타블록 내의 제1 섹터가 아닌 경우 데이터를 업데이트한 일 예를 보여주고;
도 16은 메모리 어레이의 적응형 메타블록에 저장된 논리 그룹들의 위치들을 기록한 표를 보여주며;
도 17은 적응형 메타블록 아키텍춰를 관리하기 위해 사용될 수 있는 매체 관리자를 보여주고;
도 18A는 소거 블록 관리 계통도의 일 예를 보여주는 블록도이며;
도 18B는 하나의 유효 섹터 및 다수의 폐기된 섹터들을 포함하는 다중 섹터들을 포함하는 EBL 블록을 보여주고;
도 18C는 어드레스 표 관리 계통도의 일 예를 보여주는 블록도이며;
도 18D는 부트 어드레스들 및 부트 블록들을 포함하는 데이터 구조를 보여주고;
도 19는 NVRAM을 포함하는 메모리 시스템을 보여주며;
도 20은 NVRAM을 사용하여 메모리 어레이에 효율적으로 저장된 2개의 데이터 스트림들을 보여주고;
도 21은 NVRAM에 저장된 업데이트된 데이터를 보여주며;
도 22는 데이터 런들로 구성된 파일들을 보여주고;
도 23은 데이터 런 내의 파일 경계를 보여주며;
도 24는 데이터 단위들의 계통도를 보여주고;
도 25는 메타그룹들로 맵핑되는 2개의 데이터 런들을 보여주며;
도 26은 메타그룹들로 맵핑되는 파일 경계를 갖는 데이터 런을 보여주고;
도 27은 데이터 경계 관리에 의해 플래시 메모리 내에 데이터를 저장하는 2개의 스킴들을 보여주며;
도 28A는 도 25의 메타 그룹들 A-D를 저장하는 베타블록들 A-D로 구성된 프로그램 블록도를 보여주고;
도 28B는 도28A의 메타블록들 A-D 내의 섹터들의 구성을 보여주며;
도 28C는 프로그램 블록으로 전이되는 누산기의 섹터들을 보여주고;
도 29A는 전체 메타그룹을 보여주며;
도 29B는 부분 메타그룹을 보여주고;
도 29C는 짧은 메타그룹을 보여주며;
도 29D는 시작 메타그룹을 보여주고;
도 29E는 멀티파일 메타그룹을 보여주며;
도 30A는 부분 메타그룹의 재맵핑을 보여주고;
도 30B는 짧은 메타그룹의 재맵핑을 보여주며;
도 30C는 시작 메타그룹의 재맵핑을 보여주고;
도 30D는 멀티파일 메타그룹의 재맵핑을 보여주며;
도 31은 호스트 데이터 및 재배치된 데이터의 부분 프로그래밍을 보여주고;
도 32는 직렬 플래시 버퍼를 사용하는 호스트 데이터의 저장을 보여주며;
도 33A는 호스트로부터 데이터를 저장하는 대안의 방법들을 보여주고;
도 33B는 호스트로부터 데이터의 기록으로 카피된 오리지널 데이터에 의한 도33A의 대체 방법들을 보여주며;
도 34는 호스트로부터 데이터를 저장하는 대체 스킴을 보여주고;
도 35A는 비정렬에 의해 저장된 데이터 런을 보여주며;
도 35B는 부분 정렬에 의해 저장된 데이터 런을 보여주고;
도 35C는 전체 정렬에 의해 저장된 데이터 런을 보여주며;
도 35D는 데이터 런의 전형적인 구조를 보여주고;
도 35E는 상이한 길이의 데이터 런들의 전형적인 구조들을 보여주며;
도 36은 데이터 런에서 데이터를 업데이트하는 동안 발생할 수 있는 변환의 예들을 보여주고;
도 37은 전체-대-전체 변환의 일 예를 보여주며;
도 38은 부분-대-전체 변환의 일 예를 보여주고;
도 39는 부분-대-부분 변환의 일 예를 보여주며;
도 40은 비정렬로부터 전체 정렬로 변환의 일 예를 보여주며;
도 41은 비정렬로부터 부분 정렬로 변환의 일 예를 보여주고;
도 42는 비정렬로부터 부분 정렬로 변환의 제2 예를 보여주며;
도 43은 비정렬 대 비정렬의 일 예를 보여주고;
도 44는 특정 데이터 구조들 및 이 데이터 구조들에 관련하여 수행될 수 있는 동작들을 열거하며;
도 45는 본 발명의 일 실시 형태에 따라 섹터들을 저장하는 것을 보여주는 흐름도이고;
도 46은 도 45의 섹터들의 기록을 보여주는 흐름도이며;
도 47은 본 발명의 일 실시예에 따라 데이터 런을 폐쇄하는 것을 보여주는 흐름도이다.
전형적인 실시 형태들의 설명
메모리 아키텍춰들 및 이들의 동작
처음으로 도 1A를 참조하여, 플래시 메모리는 메모리 셀 어레이 및 컨트롤러를 포함한다. 도시된 실시예에서, 2개의 집적 회로 디바이스들(칩들)(11 및 13)은 메모리 셀들의 어레이(15) 및 여러 가지 논리 회로들(17)을 포함한다. 논리 회로들(17)은 데이터, 명령 및 상태 회로들을 통해 별개의 칩 상에서 컨트롤러(19)와 인터페이스되고, 어드레싱, 데이터 전달 및 감지 및 어레이(13)에 대한 다른 지원을 제공하기도 한다. 많은 메모리 어레이 칩들은 제공된 저장 용량에 따라 하나에서 다수일 수 있다. 메모리 셀 어레이는 단일 칩 상에 위치할 수 있거나, 또는 다수의 침들 상의 메모리 셀들로 구성될 수 있다. 컨트롤러 및 부분 또는 전체 어레이는 단일 집적 회로 칩 상으로 선택적으로 조합될 수 있지만, 이는 현재 경제적 대안은 아니다.
전형적인 컨트롤러(19)는 마이크로프로세서(21), 주로 펌웨어를 저장하는 판독 전용 메모리(ROM)(23) 및 주로 메모리 칩들(11 및 13)에 기록되거나 또는 그로부터 판독되는 사용자 데이터의 임시 저장을 위한 버퍼 메모리(RAM)(25)를 포함한다. 버퍼 메모리(25)는 휘발성 또는 비휘발성 메모리일 수 있다. 회로들(27)은 메모리 어레이 칩(들)과 인터페이스되고, 회로들(29)은 접속(31)을 통해 호스트와 인터페이스된다. 데이터의 병합은 이 실시예에서 코드를 산출하는 것에 전용된 회로들(33)에 의해 ECC를 산출함으로써 결정된다. 사용자 데이터가 저장을 위해 호스트로부터 플래시 메모리 어레이로 전송됨에 따라, 회로는 데이터를부터 ECC를 산출하고, 코드는 메모리에 저장된다. 그 사용자 데이터가 이후에 메모리로부터 판독될 때, 이들 데이터는 다시 회로(33)을 통해 통과되고, 이 회로는 동일한 알고리즘에 의해 ECC를 산출하고, 데이터에 의해 산출되고 저장되는 것과 그 코드를 비교한다. 이들 데이터를 비교하는 경우, 데이터의 병합성은 확고하다. 이들 데이터가 이용되는 특정 ECC 알고리즘에 따라 상이한 경우, 알고리즘에 의해 지원되는 수에 이르는 에러의 비트들은 식별되고 정정될 수 있다.
도 1A의 메모리의 접속부들(31)은 도 1B에 주어진 예인 호스트 시스템의 접속부들(31')과 일치한다. 호스트와 도 1A의 메모리 사이의 데이터 전송들은 인터페이스 회로(35)를 통해서 이루어진다. 전형적인 호스트는 마이크로프로세서(37), 펌웨어 코드를 저장하기 위한 ROM(39) 및 RAM(41)을 포함하기도 한다. 다른 회로 및 서브시스템들(43)은 종종 특정 호스트 시스템에 따라 큰 용량의 자기 디스크 저장 디스크 드라이브, 키보드용 인터페이스 회로들, 모니터 등을 포함한다. 그러한 호스트들의 일부 예들은 데스크탑 컴퓨터, 랩탑 컴퓨터, 휴대용 컴퓨터, 팜탑 컴퓨터, 개인용 휴대 정보 단말기(PDAs), MP3 및 기타 오디오 플레이어, 디지털 카메라, 비디오 카메라, 전자 게임기, 무선 및 유선 전화 디바이스, 응답기, 음성 레코더, 네트워크 라우터 등을 포함한다.
도 1A의 메모리는 도 1B의 호스트와 제거 가능하게 접속될 수 있는 형태의 컨트롤러 및 모든 그의 메모리 어레이 회로 디바이스들을 포함하는 작은 동봉된 카드로서 구현될 수 있다. 즉, 접속부들(31 및 31')의 짝짓기는 카드가 단속되어 다른 호스트로 이동되게 하거나, 또는 호스트에 다른 카드를 접속시킴으로써 대체되게 한다. 대안으로, 메모리 어레이 디바이스들은 컨트롤러 및 접속부들(31)을 포함하는 카드와 전기적으로 및 기계적으로 접속 가능한 별개의 카드 내에 동봉될 수 있다. 추가의 대안으로서, 도 1A의 메모리는 도 1B의 호스트 내에 내장될 수 있고, 여기서 접속부들(31 및 31')은 영구적으로 만들어진다. 이 경우, 메모리는 보편적으로 다른 성분들과 함께 호스트의 인클로저 내에 포함된다. 추가의 대안으로서, 메모리 칩(11) 등의 메모리 칩은 이들 사이의 메모리 컨트롤러 없이 호스트 시스템의 접속부들(31')에 직접적으로 접속될 수 있다. 이러한 경우에, 메모리 컨트롤러의 기능들은 호스트 시스템의 마이크로프로세서(37)에 의해 수행된다.
도 2는 메모리 셀들이 소거 블록들 내로 그룹화되는 경우 메모리 어레이의 일부를 예시하고, 각각의 소거 블록 내의 셀들은 보편적으로 동시에 단일 소거 동작의 일부로서 함께 소거 가능한 것이다. 소거 블록은 최소 소거 단위이다.
도 2의 개별 메모리 셀 소거 블록들의 크기는 변화할 수 있지만, 하나의 상업적으로 실시되는 형태는 개별 소거 블록 내에 데이터의 단일 섹터를 포함한다. 그러한 데이터 섹터의 콘텐트들은 도 3에 예시되어 있다. 사용자 데이터(51)는 정형적으로 512바이트이다. 사용자 데이터(51) 외에, 사용자 데이터로부터 산출된 ECC(53), 섹터 데이터 및/또는 섹터가 프로그램되는 소거 블록과 관련된 파라미터들(55) 및 이 파라미터들(55)로부터 산출되는 ECC(57)를 포함하는 오버헤드 데이터가 존재하고, 임의의 다른 오버헤드 데이터가 포함될 수도 있다. 대안으로, 단일 ECC는 사용자 데이터(51) 및 파라미터들(55) 모두로부터 산출될 수 있다.
파라미터들(55)은 소거 블록에 의해 경험되는 프로그램/소거 사이클들의 수와 관련된 양들을 포함할 수 있고, 이러한 정량은 각각의 소거 주기 또는 일부 주기들 후에 업데이트되는 것이다. 이러한 경험 정량이 웨어 레벨링 알고리즘에 사용될 때, 논리 블록 어드레스들은 모든 소거 블록들의 용법(웨어)에서 심지어 벗어나도록 상이한 물리적 블록 어드레스들로 규칙적으로 재맵핑된다. 경험 정량의 다른 사용은 상이한 소거 블록들에 의해 경험되는 주기 횟수의 함수로서 프로그래밍, 판독 및/또는 소거의 전압들 및 기타 파라미터들을 변화시키는 것이다.
이 파라미터들(55)은 이들의 "회전(rotation)"이라 칭하는 메모리 셀들의 저장 상태들 각각에 할당된 비트 값들의 지시를 포함할 수도 있다. 이는 또한 웨어 레벨링의 유익한 효과를 갖기도 한다. 하나 이상의 플래그들은 상태 또는 상태들을 지시하는 파라미터들(55)에 포함될 수도 있다. 소거 블록을 프로그래밍 및/또는 소거하기 위해 사용되어야 하는 전압 레벨들의 지시는 파라미터들(55) 내에 저장될 수도 있고, 이들 전압들은 소거 블록 및 기타 인자들 변화에 의해 경험되는 주기들의 수로서 업데이트되는 것이다. 파라미터들(55)의 다른 예들은 소거 블록 내의 임의의 결함 셀들의 식별, 이러한 물리적 블록 내로 맵핑되는 데이터의 논리 어드레스 및 주요 소거 블록이 결함있는 경우에 임의의 치환 소거 블록의 어드레스를 포함한다. 임의의 메모리 시스템에 사용된 파라미터들(55)의 특정 조합은 그 디자인에 따라 변화할 것이다. 또한, 오버헤드 데이터의 일부 또는 전부는 오버헤드 데이터가 속하거나 또는 사용자 데이터를 포함하는 소거 블록에서 보다는 오히려 그러한 함수에 전용된 소거 블록들에 저장될 수 있다.
도 2의 단일 데이터 섹터 소거 블록은 도 4의 다중-섹터 소거 블록과 상이하다. 여전히 최소 소거 단위인 일 예의 소거 블록(59)은 4개의 페이지들(0-3)을 포함하고, 이들 각각은 최소 프로그래밍 단위이다. 데이터의 하나 이상의 호스트 섹터들은 보편적으로 데이터 섹터로부터 산출된 ECC를 적어도 포함하는 오버헤드 데이터와 함께 각각의 페이지에 저장되고, 도 3의 데이터 섹터의 형태일 수 있다.
전체 소거 블록의 데이터의 재기록은 보편적으로 소거 블록 풀의 유효 소거 블록 내로 새로운 데이터를 프로그래밍하는 것을 포함하고, 오리지널 소거 블록은 이어서 소거되고 소거 풀 내에 위치한다. 모든 페이지에 못미치는 페이지의 소거 블록의 데이터가 업데이트될 때, 업데이트된 데이터는 전형적으로 소거된 블록 풀로부터 소거 블록의 페이지에 저장되고, 나머지 변화되지 않은 페이지들의 데이터는 오리지널 소거 블록으로부터 새로운 소거 블록으로 카피된다. 이어서, 오리지널 소거 블록은 소거된다. 이와 같이 큰 블록 관리 기술의 변화는 오리지널 소거 블록으로부터 데이터를 이동시키거나 또는 그것을 소거함이 없이 다른 소거 블록의 페이지 내로 업데이트된 데이터를 기록하는 것을 포함한다. 이는 동일한 논리 어드레스를 갖는 다중 페이지들을 초래한다. 데이터의 가장 최근의 페이지는 섹터 또는 페이지 오버헤드 데이터 내의 필드로서 기록되는 프로그래밍 시점 등의 일부 편리한 기술에 의해 식별된다.
추가의 다중-섹터 소거 블록 정렬은 도 5에 예시된다. 여기서, 전체 메모리 셀 어레이는 2개 이상의 플레인들로 물리적으로 분할되고, 4개의 플레인들(0-3)이 예시되어 있다. 각각의 플레인은 다른 플레인들과 독립적으로 크게 동작될 수 있도록 하기 위해 그 자신의 데이터 레지스터들, 센스 증폭기들, 어드레싱 디코더들 등을 갖는다. 모든 플레인들은 단일 집적 회로 디바이스 또는 다중 디바이스들 상에 제공될 수 있고, 일 예는 하나 이상의 독특한 집적 회로 디바이스들로부터 각각의 플레인을 형성하는 것이다. 도 5의 예시적인 시스템의 각각의 소거 블록은 16개의 페이지들(P0-P15)을 포함하고, 각각의 페이지는 1, 2 또는 그 이상의 호스트 섹터들 및 일부 오버헤드 데이터의 용량을 갖는다.
메타블록들
또 다른 메모리 셀 정렬은 도 6에 예시된다. 각각의 플레인은 많은 수의 소거 블록들을 포함한다. 동작의 병렬 처리를 증가시키기 위해, 상이한 플레인들 내의 소거 블록들은 메타블록들을 형성하도록 논리적으로 링크된다. 하나의 그러한 메타블록은 도 6에 예시된다. 각각의 메타블록은 논리적으로 어드레스 가능하고, 메모리 컨트롤러는 개별 메타블록들을 형성하는 소거 블록들의 트랙을 할당하고 유지한다. 호스트 시스템은 섹터들의 스트림의 형태로 데이터를 제공한다. 섹터들의 이러한 스트림은 논리 블록들 내로 분할된다. 여기서, 논리 블록은 메모리 어레이의 메타블록에 포함된 바와 같이 데이터의 동일한 수의 섹터들을 포함하는 데이터의 논리 단위이다. 메모리 컨트롤러는 각각의 논리 블록이 저장되는 위치의 레코드를 유지한다. 도 6의 그러한 논리 블록(61)은 예를 들면 메타블록을 구성하는 블록들의 물리적 블록 번호들(PBNs) 내로 컨트롤러에 의해 맵핑되는 논리 블록 어드레스들(LBA)에 의해 식별된다. 메타블록의 모든 블록들은 함께 소거되고, 각각의 블록으로부터 페이지들은 일반적으로 동시에 프로그램되고 판독된다.
도 7은 메모리 어레이에 저장된 데이터를 보여준다. 데이터는 데이터(75)의 세터들의 스트림의 형태로 호스트에 의해 전송된다. 섹터들은 논리 블록들(71, 72) 내로 형성된다. 이어서, 논리 블록들은 메타블록들 내로 프로그램된다. 예를 들면, 논리 블록(72)은 메타블록(74)으로 프로그램된다. 도 7은 4개의 플레인들을 갖는 메모리 어레이(76)를 보여준다. 메타블록(74)은 플레인들(0, 1, 2 및 3) 각각으로부터 소거 블록을 갖는다. 메타블록(74)은 모든 플레인들이 병렬로 프로그램될 수 있도록 어레이의 모든 플레인들을 가로질러 확장한다. 따라서, 메타블록의 크기는 전형적으로 어레이 내의 플레인들의 수에 의해 결정된다. 또한, 대응하는 논리 블록들의 크기는 이러한 크기에 의해 결정된다.
도 8은 데이터가 메타블록들 내에 저장되는 경우 메모리 어레이에서 업데이트된 데이터를 보여준다. 업데이트된 데이터 섹터들(81)은 메모리 어레이에 저장되도록 호스트로부터 수신된다. 업데이트된 데이터 섹터들(81)은 논리 블록들(82, 83)에서 오리지널 데이터 섹터들에 대응한다. 논리 블록들(82, 83)에서 오리지널 데이터는 메모리 어레이(89)의 메타블록들(84, 85)에 저장된다. 따라서, 메타블록(84) 내의 섹터들의 일부 및 메타블록(85) 내의 섹터들의 일부는 업데이트될 필요가 있는 한편, 다른 것들은 그렇지 않다. 업데이팅은 업데이트되어야 할 필요가 없는 메타블록들(84, 85) 내의 오리지널 섹터들과 업데이트된 데이터 섹터들(81)을 조합함으로써 행해질 수 있다. 이어서, 이들 조합된 데이터는 대체 메타블록들(86, 87)에 기록되고, 오리지널 메타블록들(84, 85)은 폐기된 것으로 마킹된다. 폐기 메타블록들(84, 85)은 결국 소거되고, 가베지 수집 동안 다시 소거 및 제조된다. 업데이트된 데이터 섹터들(81)과 오리지널 섹터들을 조합하는 것은 데이터가 수신될 때 행해질 수 있다. 대안으로, 업데이트된 데이터(81)의 섹터들은 다른 위치에 기록될 수 있고, 가베지 수집의 일부로서 이후 시점에 오리지널 데이터와 조합될 수 있다. 큰 메타블록들은 보다 큰 병렬 처리 때문에 보다 빠른 프로그래밍을 허용하고, 큰 메타블록들에 저장된 데이터를 업데이트하는 것은 소량의 새로운 데이터만이 수신된 경우에 조차 대량의 데이터를 카피하는 것을 포함한다. 메타블록 내에서 새로운 데이터 및 오리지널 데이터를 병합하는 것은 가베지(garbage) 수집 동안 현저한 오버헤드를 부과할 수 있다.
적응형 메타블록들
도 9A는 메모리 어레이에 데이터를 저장하기 위해 사용된 적응형 메타블록(98)의 일 예를 나타낸다. 데이터는 데이터(99)의 섹터들의 스트림의 형태로 수신된다. 섹터들은 논리 그룹들(91, 92, 93)을 포함하는 논리 그룹들 내로 형성된다. 논리 그룹은 메모리 어레이의 하나의 소거 블록 내에 저장된 데이터의 양과 동일한 데이터의 논리 단위이다. 논리 그룹은 호스트로부터 수신된 논리적으로 순차적인 섹터들로부터 형성된다. 각각의 논리 그룹은 특정 논리 어드레스 범위로 형성된다. 따라서, 논리 그룹은 많은 섹터들을 포함할 수 있지만 일반적으로 적응형 메타블록보다 작은 데이터의 중간 논리 단위이다.
논리 그룹들은 적응형 논리 블록들로 형성된다. 적응형 논리 블록들 또는 논리 블록들은 "메타그룹들(metagroups)"이라 칭할 수도 있다. "메타그룹"이라는 용어는 "적응형 논리 블록(adaptive logical block)"이라는 용어와 등가인 것으로 고려된다. "적응형 논리 블록"이라는 용어는 일반적으로 본원에 사용된다. 적응형 논리 블록은 가변적인 수의 논리 그룹들을 포함한다. 따라서, 도 9A에서 적응형 논리 블록(95)은 3개의 논리 그룹들(91, 92, 93)을 포함한다. 적응형 논리 블록(96)은 2개의 논리 그룹들을 포함하고, 논리 블록(97)은 4개의 논리 그룹들을 포함한다. 적응형 논리 블록(95)은 적응형 메타블록(98)으로 프로그램된다. 적응형 논리 블록(95)은 3개의 논리 그룹들(91, 92, 930을 포함하고, 대응하게는, 적응형 논리 블록(98)은 3개의 소거 블록들(911, 912, 913)을 포함한다. 따라서, 적응형 논리 블록(98)은 단지 플레인(0, 2 및 3)인 어레이의 각각의 플레인으로부터 소거 블록들을 갖는다. 적응형 논리 블록(98)은 플레인 1로부터 어떠한 소거 블록도 갖지 않는다. 도 9B는 섹터들이 논리 그룹들(91, 92, 93)으로 어떻게 맵핑되는지 상세히 보여준다. 각각의 논리 그룹(91, 92, 93)은 데이터의 n개의 섹터들을 함유한다. 도 9B는 적응형 논리 블록(95)으로 맵핑되는 논리 그룹(91, 92, 93)을 보여주기도 한다. 적응형 논리 블록은 메모리 어레이 내의 대응하는 크기의 적응형 메타블록으로 프로그램된다.
메타블록 아키텍춰의 일부 실시예들에서, 메타블록 크기는 고정된다. 어레이 내의 플레인들의 수는 메타블록의 크기를 결정할 수 있다. 이들 실시예들에서, 논리 블록들의 크기는 역시 고정되고, 섹터들은 소정의 형식으로 논리 블록들로 맵핑된다. 따라서, 논리 어드레스 공간은 고정된 논리 어드레스 범위 및 고정된 경계 위치를 갖는 동일한 크기의 논리 블록들로 분할된다. 이와 대조적으로, 적응형 메타블록들을 사용하는 아키텍춰들에서, 적응형 논리 블록들은 고정된 크기들을 갖지 않고, 적응형 논리 블록들은 논리 어드레스 공간의 소정의 범위로 제한되지 않는다. 대신에, 적응형 논리 블록들은 다양한 크기일 수 있고, 논리 어드레스 공간의 다양한 범위에 걸쳐 확장하도록 형성될 수 있다. 논리 그룹들의 형성은 여러 가지 크기의 적응형 논리 블록들이 형성될 수 있는 중간 데이터 단위 형태를 제공함으로써 적응형 메타블록 아키텍춰를 고무시킨다. 따라서, 적응형 메타블록은 고정된 크기를 갖지 않은 메타블록의 예이고, 적응형 메타 블록은 고정된 크기를 갖지 않는 논리 블록의 일 예이다.
적응형 메타블록을 형성하기 위해 사용된 플레인들은 어레이의 소거 블록들의 효율적인 사용을 제공하는 알고리즘에 따라 선택될 수 있다. 플레인들은 플레인 내의 유효 소거 블록들의 수에 기초하고, 특정 플레인이 이전 동작으로부터 여전히 분주한지 여부에 따라 상이한 우선권이 주어질 수 있다. 또한, 카피 동작이 플레인 내에서 수행될 수 있도록 업데이트되고 있는 물질에 대해 사용되는 바와 같이 새로운 물질에 대해 동일한 플레인들을 사용하는 것이 고려된다. 하나의 플레인 내의 데이터의 그러한 카피(온-칩 카피)는 일부 아키텍춰들에서 보다 효율적일 수 있다. 일반적으로, 선택된 플레인들 내의 특정 소거 블록들의 선택은 중요하지 않다.
상이한 크기의 적응형 메타블록들이 갖는 하나의 결과는 일부 적응형 메타블록들이 어레이의 모든 플레인으로부터 소거 블록을 포함할 수 없다는 것이다. 그러한 적응형 메타블록이 개별적으로 프로그램되는 경우, 프로그래밍은 최대로 가능한 병렬 처리를 사용하지 않는다. 예를 들면, 도 9A에서, 플레인(1)은 도시된 동작에서 프로그램되지 않는다. 프로그래밍 속도를 증가시키기 위해 가능한 최대 병렬 처리로 프로그래밍하는 것이 일반적으로 바람직하다. 보다 적은 플레인들로의 프로그래밍은 비효율성을 초래한다. 이는 특히 적응형 메타블록들이 작지만 어레이 내에 많은 플레인들이 존재할 때 그러하다. 그러나, 보다 작은 적응형 메타블록들에 의해 높은 병렬 처리를 유지하는 것은 1회에 하나 이상의 적응형 메타블록을 프로그래밍함으로써 가능하다.
도 10은 병렬로 프로그래밍되고 있는 2개의 적응형 메타블록들(1030, 1040)을 보여준다. 메타블록들(1030, 1040) 내의 데이터는 플래시 메모리 내에 재위치된 호스트 또는 데이터에 의해 공급된 업데이트된 데이트일 수 있다. 도 10의 메모리 어레이(1005)는 6개의 플레인들을 갖는다. 적응형 논리 블록(1001)은 3개의 논리 그룹들(1010 - 1012)을 포함한다. 따라서, 대응하는 메타블록(1040)은 메모리 어레이의 3개의 플레인들로부터 3개의 소거 블록들(1041, 1042, 1043)을 필요로 한다. 적응형 논리 블록(1001)이 그 자체에 대해 프로그램된 경우, 단지 3개의 플레인들이 사용될 수 있고, 다른 3개의 플레인들은 유휴상태일 수 있다. 그러나, 적응형 논리 블록(1002)은 적응형 논리 블록(1001)과 병렬로 프로그래밍됨으로써 6개중 5개의 플레인들이 사용된다. 따라서, 어레이 내의 플레인들의 수보다 훨씬 적은 소거 블록들을 포함하는 적응형 메타블록들에 의해서조차 고도의 병렬 처리가 달성될 수 있다.
알고리즘은 여러 기준에 따른 플레인들을 할당함으로써 적응형 논리 블록(1001)은 플레인들(1, 2 및 5) 내의 소거 블록들로 프로그램되는 한편, 적응형 논리 블록(1002)은 플레인들(0 및 4) 내의 소거 블록들로 프로그램된다. 플레인(3) 내의 어떠한 소거 블록도 이 동작에서 프로그램되지 않는다. 최대 병렬 처리가 바람직하지만, 6개의 플레인들 모두가 모든 프로그래밍 동작에서 함께 프로그램될 수 없다. 플레인은 이 플레인 내의 어떠한 소거 블록들도 이용되지 않는 경우 프로그램될 수 없다. 플레인 내에서 매우 적은 수의 소거 블록들이 이용되는 경우, 그것은 플레인들이 프로그래밍을 위해 선택될 때 낮은 우선권을 할당받는다. 여기서, 적응형 논리 블록들(1001 및 1002)을 저장하기 위해 5개의 소거 블록들 만이 필요하다. 따라서, 5개의 플레인들 만이 선택되고, 플레인(3)은 선택되지 않는다. 플레인(3)은 이 동작에서 가장 낮은 우선권을 갖는 플레인이다. 그러나, 우선권은 다음 프로그램 동작이 발생할 때 재평가될 수 있다. 우선권들은 플레인들(0, 1, 2, 4, 5) 각각 내의 하나 이상의 블록이 사용되었기 때문에 다음 동작을 위해 변화될 수 있었다. 따라서, 플레인(3)은 이 플레인(3)에서 이용되는 소거 블록들이 존재하는 경우 순차 프로그래밍 동작에 사용될 수 있다. 이러한 알고리즘은 상이한 플레인들에 사용된 소거 블록들의 수와 균형을 이루므로써 특정 플레인은 보다 신속히 채워지지 않고 이용될 수 없게 된다.
개개의 적응형 메타블록에 대해 사용된 플레인들은 물리적으로 인접하지 않아야 한다. 예를 들면, 도 10의 적응형 메타블록(1030)은 플레인들(0 및 4)에서 소거 블록들(1044, 1045)을 갖는 한편, 적응형 메타블록(1040)은 플레인들(1, 2 및 5)에서 소거 블록들(1041-1043)을 갖는다. 병렬로 프로그램된 적응형 논리 블록들은 논리적으로 순차적일 필요는 없고, 논리적으로 별개의 적응형 논리 블록들은 병렬로 프로그램될 수 있다. 예를 들면, 적응형 논리 블록(1001 및 1002)은 논리적으로 순차적이지 않다. 이들은 적응형 논리 블록(1003)에 의해 분리된다.
적응형 메타블록 내의 모든 데이터가 그 데이터의 업데이트되거나 또는 재위치된 버전들로 대체되고, 폐기될 때, 적응형 메타블록을 형성하는 소거 블록들은 소거되어야 한다. 그러나, 적응형 메타블록은 어레이의 모든 플레인으로부터 소거 블록을 포함할 수 없고, 그러한 적응형 메타블록이 개별적으로 소거될 때, 그 소거는 최대 병렬 처리를 사용하지 않는다. 따라서, 최대 속도는 데이터를 소거하기 위해 달성되지 않고, 따라서 메모리 시스템의 효과적인 프로그래밍 속도는 가능한 최대 속도로부터 감소되고, 그 이유는 데이터의 프로그래밍이 통상의 용도의 플래시 메모리 칩들 내의 소거 동작 동안 수행될 수 없기 때문이다. 최대 소거 병렬 처리를 달성하기 위해, 각각의 플레인으로부터 하나의 소거 블록이 입수될 때까지, 이는 적응형 메타블록을 형성하는 소거 블록들의 소거를 지연시킴으로써 극복될 수 있다. 소거에 이용되는 소거 블록들은 리스트에 유지되고, 블록들의 세트는 최대로 가능한 병렬 처리를 달성하기 위해 주기적으로 소거되도록 계획된다. 블록들의 보자 적은 세트의 소거는 리스트가 일부 플레인들 내에 어떠한 블록들도 함유하지 않을 때 수행될 수 있다.
도 11은 적응형 메타블록들을 사용하는 일부 가능한 데이터 저장 배치들을 보여준다. 도 11은 섹터들 내로 유입되는 데이터를 논리 그룹들로 맵핑하고, 논리 그룹들을 적응형 논리 블록들로 맵핑하는 것을 보여준다. 이렇나 맵핑은 단지 논리적인 한편, 적응형 논리 블록들은 메모리 어레이의 적응형 블록들로 프로그래밍될 수 있음이 이해될 것이다. 전형적으로, 데이터는 먼저 최대 병형도로 저장된 섹터들의 스트림으로서 수신된다. 따라서, 이 메모리 시스템은 초기 기록하는 동안 도 7에 기재된 시스템과 같이 행동할 수 있다. 도 11은 적응형 논리 블록들(1101-1103)을 보여주고, 각각의 적응형 논리 블록(1101-1103)은 4개의 논리 그룹들을 갖는다. 따라서, 논리 블록들(1101-1103)은 4개의 플레인들을 갖는 메모리 어레이에 대해 최대 크기로 되어 있다.
이후 시점에, 오리지널 적응형 논리 블록들은 논리 그룹들을 재맵핑함으로써 새로운 적응형 논리 블록들로 대체될 수 있다. 예를 들면, 도 11의 제1 업데이트에서, 적응형 논리 블록(1101)은 2개의 적응형 논리 블록들(1110 및 1111)로 대체된다. 따라서, 단일 적응형 논리 블록은 2개의 보다 작은 적응형 논리 블록들로 대체되고, 논리 블록들 사이의 경계는 이전에 어떠한 경계도 없었던 경우에 형성된다. 적응형 논리 블록(1113)은 제1 업데이트 동안 생성된다. 적응형 논리 블록(1113)는 적응형 논리 블록(1103)의 이전 부분인 논리 그룹(1122) 및 적응형 논리 블록(1102)의 이전 부분인 논리 그룹들(1120, 1121)을 포함한다. 따라서, 적응형 논리 블록(1113)은 적응형 논리 블록들(1102 및 1103) 사이에 경계를 이미 포함하는 논리 어드레스 범위에 걸쳐 확장한다. 적응형 논리 블록들은 조합되어 보다 큰 적응형 논리 블록들을 형성할 수도 있다. 도 11의 제2 업데이트에서, 논리 그룹들(1111 및 1112)은 조합되어 논리 그룹(1115)을 형성한다. 여기서, 적응형 논리 블록(1115)은 적응형 논리 블록들(1111 및 1112)에 의해 이미 점유된 논리 어드레스 범위에 걸쳐 확장한다. 따라서, 적응형 논리 블록들은 적응형 논리 그룹들의 상이한 조합들로부터 형성될 수 있다. 적응형 논리 블록은 하나의 논리 그룹으로부터 최대수의 논리 그룹으로 임의의 크기일 수 있다. 최대수의 논리 그룹들은 어레이 내의 플레인들의 수일 수 있다. 적응형 논리 블록 구성의 변화들은 하나 이상의 적응형 논리 블록들 내의 데이터가 업데이트되거나 또는 일부 다른 이유로 발생할 때 발생할 수 있다. 예를 들면, 적응형 논리 블록 구성은 가베지 수집의 일부로서 또는 데이터 저장을 최적화시키기 위해 계획된 루틴으로서 업데이트될 수 있다.
어플리케이션들
도 12A는 새로운 데이터에 의해 프로그램된 데이터를 업데이트함으로써 후속 업데이트들이 보다 효율적으로 수행되는 것을 보여준다. 빈번히, 프로그램된 적응형 메타블록보다 적은 새로운 데이터의 일부가 수신되고, 프로그램된 데이터를 업데이트하기 위해 사용된다. 도 12A는 2개의 적응형 논리 블록들(1220, 1230)의 부분들에 대응하는 새로운 데이터(1210)를 보여준다. 새로운 데이터는 적응형 논리 블록(1220)과 적응형 논리 블록(1230) 사이의 경계에 걸쳐 확장하는 어드레스 범위를 갖는다. 따라서, 적응형 논리 블록들(1220, 1230)에 대응하는 적응형 메타블록들(1221, 1231)은 업데이팅을 필요로 한다.
새로운 데이터(1210)는 3개의 순차 논리 그룹들(1241, 1242 및 1243)의 어드레스 범위 내인 논리 어드레스 범위에 걸쳐 확장한다. 논리 그룹들(1241-1243) 각각은 업데이트되어야 하는 약간의 부분을 적어도 갖는다. 도 12A는 대체되어야 하는 데이터 및 대체되지 않아야 하는 데이터 모두를 갖는 논리 그룹(1241 및 1243)을 보여준다. 논리 그룹(1242)은 대체되어야 하는 데이터만이다. 새로운 논리 그룹들(1211, 1212 및 1213)은 새로운 데이터(1210)로부터 형성되고, 오리지널 데이터(1214 및 1215)의 일부는 논리 그룹들(1241 및 1243)로부터 형성된다. 새로운 적응형 논리 블록(1250)은 논리 그룹들(1211-1213)에 의해 형성된다. 적응형 논리 블록(1250)에 대응하는 적응형 메타블록(1251)은 메모리 어레이 내의 3개의 소거 블록들(1252-1254)로부터 형성된다. 적응형 논리 블록들(1256 및 1257)은 어떠한 새로운 데이터도 없는 논리 그룹들로부터 형성된다. 예를 들면, 적응형 논리 블록(1257)은 논리 그룹들(1244-1246)로부터 형성된다. 논리 그룹들(1244-1246)은 메모리 어레이 내의 적응형 메타블록(1231)으로부터 카피될 수 있다. 적응형 논리 블록(1257)은 적응형 메타블록(1259)으로 프로그램된다. 적응형 논리 블록(1256)은 적응형 메타블록(1258)으로 프로그램된다. 따라서, 3개의 적응형 논리 블록들(1250, 1256 및 1257)은 2개의 적응형 논리 블록들(1220, 1230)에 의해 이미 점유된 논리 어드레스 범위 내에 형성된다. 3개의 적응형 메타블록들(1251, 1258 및 1259)는 이러한 데이터를 저장하기 위해 메모리 어레이 내에 형성된다.
도 12A는 제1 업데이트 후에 발생한 새로운 데이터의 제2 업데이트를 보여준다. 새로운 데이터(1260)는 새로운 데이터(1210)의 그것과 동일한 논리 어드레스 범위인 논리 어드레스 범위를 갖는 섹터들의 스트림으로 구성된다. 이 상황은 저장된 데이터의 특성 때문에 반복적으로 업데이트될 수 있다(예, FATs 등의 테이블, 디렉토리들 및 서브-디렉토리들, 애플리케이션 파일 내의 인덱스). 제2 업데이트는 적응형 논리 블록(1250)에서 데이터만을 대체한다. 따라서, 유일한 적응형 논리 블록(1250) 및 대응하는 적응형 메타블록(1251)은 제2 업데이트에서 업데이트된다. 적응형 논리 블록(1250)은 단지 3개의 논리 그룹들(1211-1213)을 포함한다. 적응형 논리 블록들(1256-1257)은 업데이팅을 필요로 하지 않는다. 새로운 데이터(1260)는 적응형 논리 블록(1250)의 전체 논리 어드레스 범위에 걸쳐 확장하지 않음으로 오리지널 데이터(1214, 1215)의 일부는 논리 그룹들(1261 및 1263)을 채우기 위해 카피된다. 논리 그룹들(1261, 1262 및 1263)은 새로운 데이터(1260) 및 오리지널 데이터(1214, 1215)로부터 형성된다. 적응형 논리 블록(1270)은 논리 그룹들(1261-1263)로부터 형성된다. 적응형 논리 블록(1270)은 메모리 어레이 내의 적응형 메타블록(1271)으로 프로그램된다. 제1 업데이트에서보다 오리지널 데이터가 훨씬 적게 카피된다. 오리지널 데이터(1214 및 1215)만이 카피되고, 적응형 논리 블록들(1256 및 1257) 내의 데이터는 제2 업데이트에서 카피되지 않는다. 따라서, 업데이트된 데이터의 논리 경계들에 보다 치밀하게 매치되는 경계들을 갖는 적응형 논리 블록들을 생성함으로써, 후속 업데이트들은 보다 효율적으로 될 수 있다.
도 12B는 재맵핑되고 있는 적응형 논리 블록들을 보여준다. 데이터의 스트림은 2개의 파일들(1280 및 1282)을 포함한다. 파일(1280)은 파일 경계(1281)에 의해 파일(1282)로부터 분리된다. 일반적으로, 새로운 데이터가 메모리 시스템에 기록될 때, 그것은 데이터의 섹터들의 스트림으로서 수신된다. 그러한 시스템 내에 파일 경계들이 있을 수 있다. 일부 아키텍춰들에서, 그러한 경계들은 데이터가 수신될 때 식별될 수 있고, 적응형 논리 블록들은 그에 따라 구성될 수 있다. 다른 아키텍춰들에서, 파일 경계들의 위치는 호스트에 의해 업데이트된 데이터의 범위로 보여질 수 있다. 도 12B는 논리 그룹(1286)의 논리 어드레스 범위 내에 위치한 파일 경계(1281)를 보여준다. 초기 프로그래밍 동작 동안, 데이터는 적응형 논리 블록들(1290-1293) 내로 형성된다. 논리 블록들(1290-1293) 각각은 사용된 메모리 어레이에 대해 최대 크기인 8개의 논리 그룹들을 포함한다. 파일 경계(1281)는 적응형 논리 블록(1292) 내에 위치한다. 심지어 적응형 메타블록(1292)에 저장된 파일(1280)의 2개 미만의 논리 그룹들이 존재하더라도, 업데이팅 파일(1280)은 업데이팅 메타블록들(1290, 1291 및 1292)을 필요로 한다. 적응형 논리 블록(1292)의 논리 그룹들은 새로운 적응형 논리 블록들(1294 및 1295)로 재맵핑된다. 논리 블록(1294)은 논리 그룹들(1285 및 1286) 만으로 구성된다. 따라서, 파일(1280)의 일부를 포함하는 논리 그룹들은 적응형 논리 블록(1294)을 형성하는 한편, 파일(1280)의 일부를 함유하지 않는 논리 그룹들은 적응형 논리 블록(1295)을 형성한다. 업데이팅 파일(1280)은 적응형 논리 블록(1295)을 업데이트하는 것을 필요로 하지 않는다. 따라서, 파일 경계가 존재하는 것으로 알려진 경우, 적응형 논리 블록들은 파일 경계들에 부합되도록 조절된 경계들을 갖도록 형성될 수 있다.
도 12C는 데이터 스트림들(1280, 1282)로부터 데이터의 선택적 재맵핑을 보여준다. 여기서, 파일 경계(1281)는 논리 그룹(1286)에서 발생한다. 논리 그룹(1286)은 먼저 논리 블록(12960) 내로 혼입된다. 논리 블록(1296) 내의 데이터의 절반 이상이 파일(1280)로부터 존재하지 않더라도, 업데이팅 파일(1280)은 논리 블록(1296)을 업데이팅하는 것을 필요로 한다. 업데이팅하는 동안, 적응형 논리 블록들의 제2 세트가 형성되고, 적응형 논리 블록(1296)은 새로운 적응형 논리 블록들(1297, 1298, 1299)로 대체된다. 적응형 논리 블록(1298)은 데이터의 단 하나의 논리 그룹을 포함한다. 데이터 스트림(1280) 또는 데이터 스트림(1282)를 업데이트하는 것은 경계(1281)가 적응형 논리 블록(1298) 내에서 발생하기 때문에 적응형 논리 블록(1298)을 업데이트하는 것을 필요로 한다. 따라서, 낡은 데이터의 일부 카피는 파일 경계(1281)가 논리 그룹들 사이의 경계에 의해 정렬되지 않기 때문에 항상 수행된다. 그러나, 적응형 메타블록(1298)은 단 하나의 논리 그룹을 포함하기 때문에, 메타블록(1296) 등의 보다 큰 메타블록이 사용되는 상황과 비교하여 카피되어야 하는 소량의 데이터만이 존재한다. 따라서, 파일 경계를 포함하는 적응형 논리 블록의 크기를 감소시킴으로써, 업데이트 동안 데이터를 카피하는 것이 감소될 수 있다.
도 13은 보다 적은 빈 공간을 갖는 보다 적은 적응형 메타블록(1340)으로 재기록되고 있는 부분적으로 채워진 적응형 메타블록(1321)을 보여준다. 데이터의 스트림은 최대 병렬 처리를 사용하여 수신되고 프로그램될 수 있다. 예를 들면, 4개의 플레인들을 갖는 어레이에서, 4개의 논리 그룹들을 포함하는 적응형 논리 블록들이 형성될 수 있고, 데이터는 4개의 소거 블록들을 갖는 메타블록들 또는 적응형 메타블록들에 저장된다. 그러나, 데이터의 그러한 스트림의 단부에서, 적응형 메타블록은 부분적으로만 채워질 수 있다. 그러한 적응형 메타블록은 저장된 데이터에 필요한 것보다 더 많은 메모리 어레이를 점유한다. 도 13은 수신되고 있는 데이터(1305)의 섹터들의 스트림을 보여준다. 이 데이터는 논리 그룹들(1310-1315)을 포함하는 논리 그룹들로 맵핑된다. 논리 그룹들(1310-1317)은 각각 4개의 논리 그룹들을 갖는 적응형 논리 블록들(1320, 1321) 내로 형성된다. 데이터(1305)의 섹터들의 스트림의 단부는 논리 그룹(1315)의 논리 어드레스 범위에서와 같은 논리 어드레스에서 발생한다. 적응형 논리 블록(1321)은 논리 블록들(1314-1317)로부터 형성된다. 논리 그룹들(1314 및 1315)은 데이터(1305)의 섹터들의 스트림으로부터 데이터를 포함한다. 논리 그룹들(1316 및 1317)은 데이터를 함유하지 않는다. 따라서, 적응형 논리 블록(1321)은 빈 논리 그룹들(1316 및 1317) 및 부분적으로 채워진 논리 그룹(1315)을 포함한다. 적응형 논리 블록(1321)은 적응형 메타블록(1331)으로 프로그램된다. 적응형 메타블록(1331)은 메모리 어레이의 4개의 소거 블록들을 포함한다. 적응형 메타블록(1331)의 일부는 빈 논리 그룹들(1316 및 1317) 및 부분적으로 채워진 논리 그룹(1315) 때문에 사용되지 않는다. 이는 메모리 어레이의 공간을 낭비한다. 도 13은 논리 그룹들(1314 및 1315)로부터 형성된 적응형 논리 블록(1340)을 보여준다. 적응형 논리 블록(1340)은 메모리 어레이 내의 적응형 메타블록(1341)으로 프로그램된다. 따라서, 적응형 메타블록(1341)은 1331에서와 동일한 데이터를 포함하지만, 메모리 어레이 내의 공간의 절반 만을 점유한다(4개 대신에 2개의 소거 블록들). 적응형 논리 블록(1340) 및 적응형 메타블록(1341)은 메모리 어레이 내의 적응형 메타블록(1331)으로부터 데이터를 카피함으로써 형성될 수 있다. 적응형 메타블록(1331) 내의 데이터가 적응형 메타블록(1341)으로 카피될 때, 적응형 메타블록(1331)은 폐기된 것으로 마킹될 수 있다. 이어서, 적응형 메타블록(1331)이 소거될 수 있다.
부분적으로 전체 메타블록으로부터 보다 작은 메타블록으로 데이터를 카피하는 것은 데이터(1305)의 섹터들의 스트림의 수신으로 경과된 시간에 의해 시동될 수 있다. 카피는 가베지 수집 루틴의 일부로서 행해질 수도 있다. 1340 등의 보다 작은 적응형 메타블록은 데이터(1305)의 섹터들의 스트림의 단부가 검출되는 경우 수신된 데이터로부터 직접적으로 형성될 수 있는 한편, 데이터(1305)의 섹터들의 스트림은 버퍼 내에 존재한다. 이 경우, 데이터는 먼저 보다 큰 적응형 메타블록에 기록되지 않고, 이어서 보다 작은 메타블록으로 카피된다. 따라서, 소거될 어떠한 폐기된 적응형 메타블록도 없다. 일부 아키텍춰들에서, 호스트는 데이터의 스트림의 단부가 발생하는 경우를 지시하는 신호를 전송할 수 있다. 적응형 논리 블록은 데이터의 스트림으로부터 섹터들을 포함하는 논리 그룹들 만을 포함하도록 형성될 수 있다.
특정 메모리 아키텍춰들에서, 소거 블록들 또는 메타블록들은 업데이트된 데이터를 저장하도록 할당될 수 있다. 그러한 소거 블록들 및 메타블록들의 예들은 2003년 12월 30일자로 Conley 등에 의해 "Management of non-volatile memory systems having large erase blocks"라는 표제로 출원된 미합중국 특허 출원 제10/749,831호에 기재되어 있으며, 여기에 전문을 참고 문헌으로서 인용한다. E1 및 E2로 지정된 특정 메타블록들은 메모리 어레이의 플레인에 대해 업데이트된 데이터를 저장하기 위해 사용될 수 있다. dE1로 지정된 다른 소거 블록들 또는 메타블록들은 특정 소거 블록 또는 메타블록에 대해 업데이트된 데이터를 수신하도록 할당될 수 있다. 적응형 메타블록은 E1, E2 또는 dE1로 지정될 수 있다. 그러한 적응형 메타블록은 빈번히 업데이트되는 논리 어드레스 범위로 맞춤될 수 있다. 업데이트된 데이터에 부합되게 선택된 크기를 갖는 적응형 메타블록을 형성함으로써, 오리지널 데이터의 카피는 감소된다. E1 및 dE1은 업데이트된 데이터를 수신하고, 이들을 비순차적 방식으로 저장한다. 비순차적으로 업데이트된 데이터를 저장하는 업데이트 블록들(또는 메타블록들, 또는 적응형 메타블록들)은 카오틱 블록들로 고려된다.
도 14는 업데이트된 데이터의 논리 어드레스 범위에 대해 채택된 크기를 갖는 카오틱 블록으로서 적응형 메타블록의 사용을 보여준다. 데이터는 오리지널 적응형 메타블록(1410)을 포함하는 오리지널 적응형 메타블록들에 저장된다. 전형적으로, 그러한 오리지널 적응형 메타블록들은 최대 크기이다. 적응형 메타블록(1420)은 오리지널 적응형 메타블록(1410) 내의 데이터에 대응하는 업데이트된 데이터를 수신하도록 할당된다. 적응형 논리 블록들(1411 및 1421)은 각각 오리지널 적응형 메타블록(1410) 및 적응형 메타블록(1420)에 대응한다. 적응형 논리 블록(1421)은 적응형 논리 블록(1411)과 동일한 논리 어드레스 범위를 갖는다. 제1 업데이트된 데이터(1415)는 적응형 논리 블록(1411)의 논리 어드레스 범위 내의 논리 어드레스 범위를 갖는다. 적응형 논리 블록들(1411)의 논리 어드레스 범위의 일부만이 제1 업데이트에서 업데이트된다. 제1 업데이트된 데이터(1415)는 비순차적(카오틱)이다. 따라서, 적응형 메타블록(1420)은 카오틱 블록이 된다. 업데이트된 데이터(1415)는 도시된 논리 어드레스 범위 내에서 섹터들의 여러 가지 스트림들을 포함할 수 있다. 동일한 섹터들은 여러 번 업데이트될 수 있다. 결과적으로, 메타블록(1420)은 채워질 수 있고, 병합됨에 틀림없다.
제1 병합 동안, 각각의 섹터의 가장 최근의 카피만이 새로운 적응형 메타블록들(1422-1424)로 카피된다. 업데이트된 데이터에 대해, 가장 최근의 카피는 적응형 메타블록(1420)으로부터 유래하고, 업데이트되지 않은 데이터에 대해, 가장 최근의 카피는 적응형 메타블록(1410)으로부터 유래한다. 병합은 논리 순서로 적응형 메타블록(1410) 및 적응형 메타블록(1420)으로부터 데이터를 조합한다. 적응형 메타블록(1423)에 할당된 논리 어드레스 범위는 제1 업데이트된 데이터(1415)의 논리 어드레스 범위를 포함한다. 적응형 메타블록들(1422, 1424)은 업데이트되지 않은 데이터만을 포함한다.
제2 업데이트 데이터(1425)는 제1 병합 후 수신된다. 제2 업데이트된 데이터(1425)는 제1 업데이트된 데이터(1415)와 동일한 논리 어드레스 범위 내에 있다. 제2 업데이트 데이터(1425)는 적응형 메타블록(1430)에 저장된 새로운 적응형 논리 블록(1431)에 할당된다. 적응형 논리 블록(1431)은 적응형 메타블록(1423)에 저장된 데이터와 동일한 논리 어드레스 범위를 갖는다. 적응형 메타블록(1430)은 카오틱하게 업데이트될 수 있고, 따라서 카오틱 블록이 된다. 적응형 메타블록(1430)이 채워질 때, 적응형 메타블록(1430) 및 적응형 메타블록(1423) 내의 데이터는 적응형 메타블록(1440)에 대해 병합된다. 이어서, 적응형 메타블록(1440)은 적응형 메타블록(1423)을 대체하고, 적응형 메타블록(1423)은 폐기된 것으로서 마킹된다. 적응형 메타블록들(1422 및 1424)은 변화되지 않고 남겨진다. 보다 작은 논리 어드레스 범위는 제1 병합에서보다 제2 병합에서 더욱 병합됨으로써 변화되지 않은 데이터의 카피가 거의 일어나지 않는다. 또한, 업데이트를 위해 사용된 적응형 메타블록이 제1 병합 후에 보다 작아지기 때문에 메모리 어레이에서 보다 적은 공간이 요구된다. 추가의 업데이트들은 동일한 논리 어드레스 범위 내에서 이루어질 수 있고, 제2 병합에서와 같이 병합될 수 있다.
매체 관리
도 15A는 적응형 논리 블록(1520)의 논리 그룹들(1510, 1511 및 1512)이 어떻게 적응형 메타블록(1540)의 소거 블록들(1531, 1532 및 1533)로 맵핑되는지 보여준다. 적응형 논리 블록(1520)의 논리 그룹들의 수는 적응형 메타블록(1540)의 소거 블록들의 수와 동일하더라도, 개개의 논리 그룹은 이 실시예에서 개개의 소거 블록으로 직접적으로 맵핑되지 않는다. 대신에, 데이터가 저장됨으로써 각각의 논리 그룹들(1510-1512)의 일부는 적응형 메타블록(1540)의 각각의 소거 블록들(1531-1533)에 저장된다.
도 15B는 적응형 논리 블록(1520)의 메모리 어레이로의 맵핑을 보다 상세히 보여준다. 도 15B는 논리 그룹(1510)으로부터 섹터들이 어떻게 메모리 어레이에서 프로그램되는지 보여준다. 논리 그룹(1510)은 데이터의 n개의 섹터들을 포함한다. 메모리 어레이의 플레인들(0-4)은 각각 4개의 섹터들의 폭을 갖는다. 특정 메모리 아키텍춰들에서, 어레이의 플레인을 가로질러 확장하는 4개의 섹터들은 병렬로 프로그램된다. 따라서, 4개의 섹터들은 어레이의 최소 프로그래밍 단위인 페이지를 형성한다. 섹터들은 전형적으로 순차로 도달하고, 어레이에 기록하기 전에 레지스터들 내에 저장될 수 있다. 적응형 메타블록의 모든 소거 블록들의 섹터들은 병렬로 프로그래밍될 수 있다. 따라서, 예를 들면, 섹터들(0-11)은 병렬로 프로그래밍될 수 있다. 이어서, 섹터들(12-23)은 병렬로 프로그래밍될 수 있다. 이는 논리 그룹(1510) 내의 모든 섹터들이 프로그래밍될 때까지 계속된다. 이어서, 논리 그룹(1511, 1512)이 차례로 프로그램된다.
도 15C는 메모리 어레이 내의 3개의 소거 블록들에 의해 형성된 적응형 메타블록을 보여준다. 메모리 내의 섹터들의 배치는 번호 n이 32와 동일하게 도 15B에 나타낸 것과 유사하다. 그러나, 32는 3으로 균등하게 나눌 수 없기 때문에, 논리 그룹의 섹터들은 소거 블록들(1551-1553) 사이에서 균등하게 분배되지 않는다. 제1 논리 그룹은 섹터들(0-31)로 구성된다. 이들 섹터들은 소거 블록(1551)에서 12개의 섹터들로 분배되고, 소거 블록(1552)에서 12개의 섹터들로 분배되고, 소거 블록(1553)에서 8개의 섹터들로 분배된다. 제2 논리 그룹의 제1 섹터(0')는 소거 블록(1553)에서 프로그램된다. 따라서, 논리 그룹들은 상이하게 프로그램될 수 있고, 상이한 소거 블록들에서 시작될 수 있다. 상이한 논리 그룹들로부터 섹터들은 병렬로 프로그램될 수 있다. 예를 들면, 제1 논리 그룹으로부터 섹터들(24-31) 및 제2 논리 그룹으로부터 섹터들(0'-3')은 병렬로 프로그램될 수 있다.
도 15D는 병렬로 프로그램되는 2개의 메타블록을 나타낸다. 소거 블록(1561 및 1562)은 적응형 메타블록(1565)을 형성하고 소거 블록(1563 및 1564)은 적응형 메타블록(1566)을 형성한다. 적응형 메타블록(1565 및 1566)은 각각 2개의 소거 블록을 포함하고 따라서 각 적응형 메타블록(1565, 1566)은 2개의 논리 데이터 그룹을 포함한다. 적응형 메타블록(1565)은 논리 그룹(1571 및 1572)을 포함하고, 적응형 메타블록(1566)은 논리그룹(1573 및 1574)을 포함한다. 논리 그룹(1571 및 1573)의 섹터 프로그래밍이 예시된다. 논리 그룹(1571 및 1573)은 병렬로 프로그램된다. 따라서, 메모리 어레이에 대한 첫번째 기록 중에 논리 그룹(1573)으로부터의 섹터(1-8)는 논리 그룹(1573)으로부터의 섹터(1'-8')와 동시에 프로그램될 수 있다. 이어서, 섹터(9-16)는 섹터(9'-18')와 동시에 프로그램된다. 이는 논리 그룹(1571 및 1573) 내의 모든 섹터가 프로그램될 때까지 계속된다. 다음, 논리 그룹(1572 및 1574)은 유사하게 프로그램된다.
도 15E는 병렬로 프로그램된 3개의 적응형 메타블록을 나타낸다. 메타블록 (1590)은 4개의 소거 블록을 포함하고, 메타 블록(1591)은 하나의 소거 블록을 포함하며, 메타블록(1592)은 3개의 소거 블록을 포함한다. 메타 블록(1590-1592)은 병렬로 프로그램된다. 메타 블록(1590-1592)은 다른 수의 소거 블록을 포함하기 때문에 데이터는 각각의 메타블록(1590-1592)들에서 다르게 정렬된다. 도 15E는 메타블록(1590-1592) 내의 페이지들의 정렬을 나타낸다. 하나의 페이지는 프로그래밍의 단위로서 프로그램된 단일 섹터, 4개의 섹터 또는 기타 다른 수의 섹터일 수 있다.
도 15E에서 동일 수평 레벨상에 있는 다른 소거 블록에서의 데이터 페이지들은 병렬로 프로그램된다. 예를 들면, 메타블록(1590)의 페이지(12-15), 메타블록(1591)의 페이지(3) 및 메타블록(1592)의 페이지(9-11)는 병렬로 프로그램된다.
도 15F는 업데이트된 데이터의 제1 섹터가 논리 그룹의 제1 섹터가 아닌 곳에서 데이터를 업데이트하는 예를 나타낸다. 업데이트된 데이터(1582)의 제1 섹터는 논리 어드레스(13)를 가진다. 논리 그룹(1580)은 논리 어드레스(1-16)를 가지는 섹터들로 구성된다. 업데이트된 데이터(1582)는 적어도 2개의 논리 그룹으로부터의 섹터를 포함하며 2개의 소거 블록의 적응형 메타블록 크기는 업데이트된 데이터(1582)를 포함하는 제1의 두 논리 그룹을 저장하기 위해 선택된다. 소거 블록(1585 및 1586)은 업데이트된 데이터(1582)를 포함하는 제1의 두 논리 그룹을 저장하기 위해 선택된다. 논리 어드레스(13)를 가지는 업데이트된 데이터(1582)의 제1 섹터는 소거 블록(1585)의 제1 위치에 기록된다. 논리 어드레스(14)를 가지는 섹터는 제2 위치에 기록되고 그리하여 논리 어드레스(16)을 갖는 섹터는 논리 그룹 내의 최종 섹터까지 기록된다. 업데이트 되지 않은 논리 그룹(1580)에서의 데이터는 그 후 메모리 어레이로 카피된다.
따라서, 논리 그룹 내의 제 1 섹터와 적응형 메타블록에 저장된 제1 섹터 사이에 오프셋이 존재한다. 다음 논리 그룹의 제1 섹터는 정상적인 방식으로 기록되어 적응형 메타블록 내의 다른 논리 그룹은 다른 오프셋으로 기록될 수 있다.
따라서, 논리 어드레스(1')를 가진 섹터는 논리 그룹(1581)을 업데이트할 때 기록된 제 1 섹터이다.
도 16은 적응형 논리 블록(1610)이 적응형 메타블록(1620)에 저장되는 곳인 논리 그룹에 따라 메모리 어레이 내의 데이터 위치를 기록하는데 사용되는 테이블을 나타낸다. 칼럼(1)은 각각의 개별 논리 그룹의 아이덴티티(identity)를 나타낸다. 이는 논리 그룹을 유일하게 명기하는 논리 어드레스이다. 논리 그룹은 일반적으로 연속적으로 리스팅된다. 칼럼(2)은 논리 그룹이 저장된 적응형 메타 블록의 크기를 나타낸다. 그 크기는 단순히 적응형 메타블록 내의 소거 블록의 수를 나타낸다. 여기에서, 상기 메타블록은 3개의 소거 블록으로 구성되었으므로 그 크기는 모든 논리 블록에 대하여 3이다. 칼럼(3)은 적응형 논리 블록 내의 논리 그룹의 그룹 수(N)를 나타낸다. 논리 그룹은 논리 어드레스 범위에 따라 연속적으로 번호매김된다. 따라서, 논리 그룹 L1은 N=1, L2는 N=2 그리고 L3는 N=3이 된다. 칼럼(4)은 적응형 메타블록에서의 제 N 번째 소거 블록의 위치를 나타낸다. 이는 소거 블록의 물리적 블록 수(PBN)일 수 있다. 적응형 논리 블록에서의 논리 그룹의 수는 적응형 메타블록에서의 소거 블록의 수와 동일하기 때문에, 적응형 메타블록의 소거 블록 위치의 완료 기록은 각 논리 그룹에 대한 하나의 소거 블록 위치를 기록함으로써 형성될 수 있다.
특정 논리 그룹의 위치 테이블은 메모리 시스템의 매체 관리(media management)의 부분으로서 휘발성 또는 비휘발성 메모리에서 유지될 수 있다. 매체 관리 시스템은 이용가능한 소거 블록 및 데이터의 물리적 맵핑에 대한 논리 블록의 위치를 기록하는 여러 가지 테이블들을 구비할 수 있다. 매체 관리자는 매체 관리 시스템의 테이블들을 관리한다. 일반적으로, 매체 관리자는 컨트롤러 내의 펌웨어로 구현된다.
도 17은 매체 관리자의 예를 나타낸다. 도 17에 도시된 것과 유사한 매체 관리자의 동작은 벤네트 등에 의해 2003년 12월 30일에 제출된,“블록 관리 시스템을 갖춘 비휘발성 메모리 및 방법"으로 명칭된 미합중국 특허 출원 제 10/750,155호에 기술되며, 이는 그 전체를 참조로서 본문에 개시된다. 상기 매체 관리자는 적응형 메타블록 매체 관리자, 블록 할당 매체 관리자 및 어드레스 테이블 매체 관리자를 포함한다. 이러한 3개의 매체 관리자들과 그들의 관련 테이블들은 적응형 메타 블록의 관리에 특히 관계되며 추가로 기술될 것이다.
적응형 메타 블록 매체 관리자는 적응형 논리 블록을 형성하도록 조립하기 위한 논리 그룹의 수를 결정하고 그에 따라 적응형 메타 블록의 소거 블록의 수를 정한다. 이러한 결정으로 호스트로부터 수신되는 데이터가 있는 곳은 여러 요소들에 기초할 수 있다. 호스트로부터 커맨드 시퀀스가 평가될 수 있으며 적응형 메타 블록 크기는 현재 커맨드 또는 호스트 커맨드들의 기록 평가(historical evaluation)에 기초하여 결정될 수 있다. 평가될 수 있는 현재 커맨드의 특성들로는 논리 어드레스, 커맨드 섹터 카운트, 파일 시스템 크러스터(DOS 크러스터와 같은)를 갖춘 정렬, 이전 커맨드와의 논리 관계도 및 파일 시스템 섹터들과 관련된 어드레스를 포함한다. 업데이트 블록의 비순차 유형에 의해 관리되고 있는 범위와 관련있는 어드레스가 또한 고려될 수 있다. 기록 동작(historical operation)의 특성은 순차적인 데이터의 흐름에 대한 호스트 커맨드 시퀀스 및 완료된 파일에 대한 호스트 커맨트 구조들(structures), 자주 업데이트된 논리 어드레스 범위 및 최근 기록된 순차적 데이터의 최종 어드레스들을 포함할 수 있다. 적응형 메타 블록 매체 관리자는 정보에 대한 접근권한(access)을 얻기 위해 적당한 호스트 인터페이스 프로토콜 하에서 호스트와 대화할 수 있는데, 이는 적당한 메타블록 크기를 결정하도록 할 것이다.
데이터가 재위치될 때, 적응형 메타블록 크기는 재위치된 데이터를 포함하는 논리 그룹의 수에 기초한다. 제어 데이터는 적응형 메타블록에 저장되고 상기 적응형 메타블록 크기는 저장될 데이터의 유형에 따라 결정될 수 있다. 적응형 메타블록 크기는 큰 적응형 메타블록에서 얻어진 증가된 병렬 처리(paralleism)와 더 작은 적응형 메타블록에서 얻어진 감소된 가베지 수집(garbage selection)과의 균형(balancing)에 기초하여 결정될 수 있다. 일단 요구된 소거 블록의 수가 적응형 메타 블록 매체 관리자에 의해 결정되면, 소거 블록의 수에 대한 요청이 블록 할당 매체 관리자로 전송된다.
블록 할당 매체 관리자는 메모리 어레이의 분리된 플레인으로부터 소거 블록을 선택한다. 상기 플레인은 상기 플레인에서 이용가능한 소거 블록의 수에 기초하여 선택될 수 있다. 다양한 크기의 적응형 메타 블록이 사용되는 플레인은 다른 레벨들로 채워질 수 있다. 따라서, 일부 플레인은 전부 채워질 수 있는 반면, 나머지는 여전히 이용가능한 소거 블록을 가질 수 있다. 이러한 현상이 일어난다면, 상기 어레이의 플레인은 이용가능하지 않으며, 따라서 병렬 처리는 제한될 것이다. 이러한 현상을 방지하거나 지연시키기 위하여, 블록 할당 매체 관리자는 적응형 메타 블록을 형성하기 위한 소거 블록을 할당할 때 적은 수의 이용가능한 소거 블록을 가지는 플레인에는 낮은 우선순위를 주고 큰 수의 이용가능한 소거 블록을 가지는 플레인에는 높은 우선순위를 준다. 이전 동작으로 여전히 바쁜 플레인에도 또한 낮은 우선 순위가 주어질 수 있다. 재위치를 위한 데이터를 가지는 플레인에는 데이터가 하나의 플레인에서 다른 플레인으로 재위치되는 것보다 더 효과적인 방식으로 플레인 내에 재위치 될 수 있는 플레인에 높은 우선 순위가 주어질 수 있다. 상기 블록 할당 매체 관리자는 할당 블록 리스트(ABL)로부터 이용가능한 소거 블록을 선택한다.
도 18A은 적응형 메타 블록으로 사용되는 소거 블록 관리 계층(hierarchy)을 나타낸다. 특정 크기의 메타블록을 할당하기 위한 적응형 메타 블록 매체 관리자의 요청을 수신할 때, 블록 할당 매체 관리자는 분리 플레인으로부터의 소거 블록을 선택하고 상기 블록을 메타블록으로 링크하도록 상응하는 제어 구조를 업데이트한다. 소거 블록이 사용되는 플레인은 소정의 표준에 따른 알고리즘에 의해 선택된다. 더 적은 소거 블록을 가지는 플레인들은 낮은 우선순위로 주어진다. 이전의 동작으로부터 아직 분주한 플레인들은 낮은 우선순위로 주어진다. 플레인은 또 다른 플레인으로부터 카피하는 대신 상기 플레인 내로 카피될 데이터를 허용하는 곳에 높은 우선순위가 주어질 수 있다. 어떤 정렬에서는 그러한 인-플레인(in-plane) 카피가 더 효율적일 수 있다.
소거 블록은 상기 어레이의 각 플레인에 대하여 개별적으로 관리된다. 하나의 플레인이 선택될 때, 그 플레인으로부터의 임의의 소거 블록은 적응형 메타블록의 일부를 형성하도록 선택되어질 수 있다. 일반적으로, 소거 블록은 리스트의 상부로부터 선택되고 반면에 새로 이용가능한 소거 블록은 상기 리스트의 하부에 부가된다. 소거블록은 도 18A에 나타낸 것과 같이 리스트의 계층에 의하여 관리된다. 하나의 개별 소거 블록은 한번에 하나의 리스트로만 나타날 수 있다. 불량 블록은 어느 리스트에도 나타나지 않으며 따라서 데이터 저장부로 사용되지 않는다. 리스트들 간의 소거 블록 어드레스들을 제거함으로써, 기록/사이클 카운트는 메모리 어레이를 거쳐 분배될 수 있다. 이는 개별 소거 블록들의 실패 위험을 줄이는 웨어-레벨링(wear leveling)을 제공한다.
할당 블록 리스트(ABL)(1810)는 소거 블록이 메타블록을 형성하도록 선택된소거 블록 어드레스의 간단한 리스트이다. 따라서, ABL(1810)은 리스트 계층의 상부에 있다. ABL(1810)내에서, 분리 필드는 메모리 어레이의 각 플레인에서 유지된다. 일반적으로, ABL(1810)은 컨트롤러 RAM과 같은 비휘발성 메모리에서 유지된다. 하지만, 카피도 또한 상기 비휘발성 메모리에서 유지된다.
ABL(1810)의 카피는 적응형 메타블록이 형성되는 매 시간마다 로그(1813)에 기록되며 그것을 형성하는데 사용된 소거 블록은 ABL(1810)로부터 제거된다. 따라서, 로그(1813)의 ABL(1810)의 카피는 규칙적으로 업데이트된다. 소거 블록이 소거 동작을 통하여 이용가능해지면, 상기 소거 블록을 가지는 플레인에 해당하는 필드의 ABL(1810)에 부가된다. ABL(1810)은 로그(1813)로부터 카피됨으로써 동력 손실 후에 복구된다. 그러나, 상기 로그 카피는 로그(1813)의 이전 카피 이후 ABL(1810)에 대한 소거 블록의 부가 때문에 최신 업데이트(up-to-date)가 되지 않을 수 있다. 그러한 소거 블록은 다른 데이터 구조들로부터 쉽게 식별된다. 특히, 로그 (1813)는 할당 메타블록의 기록을 갖는다. 할당 메타블록은 메타블록, 또는 적응형 메타블록이며, 이 곳에서 데이터가 호스트에 의해 현재 업데이트된다. 따라서, 동력이 처음 공급되면, 오리지널 메타블록의 각 소거 블록의 제1 섹터는 오리지널 메타블록의 각 소거 블록이 소거되었는지를 결정하기 위해 스캔될 수 있다. 소거 블록이 소거되었으면, 그 어드레스는 ABL에 부가된다. 어드레스 데이터는 메타블록 사이즈, 그룹 번호 및 블록 어드레스에 대한 엔트리로 도 16에 도시된 포맷과 연관된 스타팅 논리 그룹 어드레스로서 로그(1813)에서 유지된다. 따라서, ABL(1810)의 완료 카피는 동력 손실 후에도 쉽게 재건된다. 또한 상기 로그는 소거가 가능한 완전히 폐기된 데이터로 된 소거 블록의 리스트를 포함한다.
ABL(1810)은 소거 블록 리스트(EBL)(1811)로부터 소정의 블록 어드레스 수를 이동시킴으로써 초기화된다. ABL의 각 필드는 해당 EBL 필드로부터 어드레스를 이동시킴으로써 초기화된다. 예를 들면, ABL 필드는 그 반의 용량으로 채워진다. 블록이 메타블록에 대한 할당을 요청할 때, 그와 관련된 ABL 필드의 제1 블록이 사용되며 그 어드레스는 상기 ABL로부터 제거된다. 블록이 가베지 수집 도중 소거될 때, 그것은 관련된 ABL필드의 종단에 부가된다.
ABL(1810)은 또한 EBL(1811)로부터 소거 블록 어드레스로 다시 채워진다. 이는 ABL(1810)이 비는(empty) 곳에 필수적이다. 소거 블록 어드레스는 ABL(1810)의 필드가 채우지거나 또는 빌 때 ABL(1810)과 EBL(1811) 간에 교체된다. 교체(exchange)는 단 하나의 필드(또는 어레이의 플레인) 또는 모든 필드에 실행된다. 교체는 ABL(1810)을 토핑업(topping up)하는 것을 포함하거나 또는 ABL(1810)의 모든 엔트리의 전체 교체를 포함한다. 상기 교체는 필드가 채워지거나 빔으로써 트리거되거나 또는 주기적으로 다른 이벤트 또는 실행에 의하여 트리거 될 수 있다.
EBL(1811)은 일반적으로 비휘발성 메모리에 지지된 섹터에서 유지된다. 이것은 어레이의 각 플레인에 대한 분리 필드와 함께 소거 블록의 리스트를 포함한다. 이것은 ABL(1810)과 같은 동일한 포맷 내에 있으며 따라서, 엔트리는 ABL(1810)과 EBL(1811) 간에 쉽게 교체된다. EBL(1811)은 비휘발성 메모리의 단일 섹터로서 유지되며, 이는 신속히 액세스 및 업데이트되어 EBL(1811)과 ABL(18010) 간의 교체를 용이하게 한다. EBL과 ABL 간의 어드레스 교체는 상기 ABL이 채워지거나 또는 빌 때 발생할 수 있다. 대안적으로, 상기 교체는 메모리 어레이에서 특정 위치의 과중한 사용을 피하기 위하여 더 자주 일어난다. EBL(1811) 내의 어드레스는 ABL(1810) 과 교체될 수 있으며 또한 플레인 블록 리스트(Plane Block Lists, PBL)와도 교체될 수 있다.
EBL 섹터는 EBL 섹터만을 포함하는 EBL 블록에서 유지된다. 도 18B는 멀티 EBL 섹터들을 가진 EBL 블록(1801)을 나타낸다. EBL 데이터가 변경될 때, 새로운 EBL 섹터는 기록되고 오래된 EBL 섹터는 폐기된다. 따라서, 폐기된 섹터(1803)는 더 이상 유효하지 않은 EBL의 이전 카피를 포함한다. 최종 기록된 EBL 섹터(1802)만이 유효하다. EBL 섹터는 또한 각 EBL 필드에 리스트된 소거 블록 리스트의 카운트를 포함한다. 이들 카운트는 적응형 메타블록을 형성할 때 플레인들을 선택하는 하나의 인자로서 사용된다. 이러한 카운트들의 카피는 로그(1803)에서 유지된다.
PBL(1812)과 같은 플레인 블록 리스트(PBL)는 어레이의 각 플레인에 대한 비휘발성 메모리에서 유지된다. PBL(1812)는 상기 메모리 어레이의 특정 플레인에서의 소거 블록의 리스트이다. 소거 블록들은 ABL(1810) 또는 EBL(1811)에 리스트되며 PBL(1812)에 리스트되지 않는다. PBL(1812)는 그 섹터 전체가 채워질 필요는 없지만, 하나의 섹터를 차지할 수 있다. 일반적으로, PBL들은 하나의 PBL 블록 또는 PBL 블록들에서 함께 그룹을 이룬다. PBL 블록은 PLB 섹터만을 가지는 전용 블록(dedicated block)이다. PBL 섹터 내의 정보가 변경될 때, 업데이트 변환 PBL 블록의 다음 위치에 기록된다. 오래된 섹터는 폐기됨으로 표시된다. 특정 플레인에 대하여 단 하나의 유효한 PBL 섹터만이 한 특정 PBL 블록에 존재한다. 그러나, 만일 PBL 섹터들이 다른 PBL 블록들에 있다면, 둘 이상의 유효한 PBL 섹터가 특정 플레인에 존재할 수 있다. 하나의 PBL 섹터는 2개의 필드, 소거 블록의 위치를 규정하는 한 세트의 엔트리 및 상기 PBL 블록 내의 모든 유효한 PBL 섹터의 위치를 리스트한 하나의 섹터 인덱스를 갖는다. 소거 블록의 위치를 규정하는 엔트리는 임의의 특정 순서가 필요하지 않다. 엔트리의 순서는 해당 EBL 필드에 의한 교체 결과일 수 있다. 최종 기록된 PBL 섹터의 인덱스만이 유효하다. 부분적으로 기록된 메모리에는 많은 소거 블록이 있으며 따라서 많은 PBL 섹터는 많은 PBL 블록을 필요로 한다. 그러나, 메모리가 차면 소거 블록의 수가 감소하고 필요한 PBL 블록의 수도 감소한다. 논리적으로 전체(pull) 메모리 시스템에는 PBL 블록이 없을 수 있다. PBL (1812)과 EBL 간의 어드레스 교체은 EBL과 ABL 간의 교체와 유사하다. 상기 교체는 단방향성 또는 쌍방향성일 수 있다. 멀티 PBL 블록이 사용될 때, 하나의 PBL 블록은 교체를 위해 사용된 활성 블록일 수 있다. 활성 PBL 블록은 주기적으로 변경된다. EBL(1811) 내의 필드는 단일 PBL 섹터로부터 후선 동작(background operation)으로서 업데이트된다.
도 18C는 적응형 메타블록을 사용하는 메모리 시스템에서 어드레스 변환 정보에 대한 계층 관리 어드레스 테이블을 나타낸다. 데이터 섹터가 데이터 업데이트 알고리즘에 따라 메모리 어레이에 기록될 때, 어드레스 테이블 매체 관리자는 논리-물리적 맵핑의 비휘발성 기록을 생성하고 상기 메모리 어레이의 임의 섹터의 신속한 변환을 허용하기 위해 계층 관리 어드레스 테이블에 상응하는 제어 데이터 구조들을 업데이트 한다. 신속한 변환은 비휘발성 메모리로부터 단일 섹터를 판독함으로써 결정되는 임의 섹터의 물리적 위치를 허용함으로써 달성될 수 있다. 여기에서 물리적 위치는 아직 비휘발성 메모리에서 업데이트되지 않으며, 휘발성 RAM으로부터 신속하게 결정될 수 있다. 적응형 메타블록의 크기 및 형태는 변할 수 있기 때문에, 그들이 비휘발성 메모리에 저장되지 않는다면 메타블록의 그러한 소거가능한 블록의 위치를 되찾기 어려울 것이다. 따라서, 메타블록의 소거 블록의 위치는 비휘발성 메모리에 저장된다.
도 18C의 계층의 상부에는 기록 섹터 리스트(Write Sector List, WSL)(1814) 가 있다. WSL(1814)는 일반적으로 컨트롤러 RAM과 같은 휘발성 메모리에 있다. WSL (1814)는 호스트에 의해 순차적인 기록 스트림과 연관된 섹터들을 식별하거나 또는 비휘발성 메모리에서의 또 다른 위치로부터 재위치된다. 분리 WSL은 각 호스트 기록 스트림을 위해 존재한다. WSL은 메타블록이 호스트로부터 새로운 기록 스트림을 위해 할당될 때 개방된다. WSL은 스타팅 위치 및 기록된 섹터의 수와 같은 생략된 형태를 가질 수 있다.
로그(1813)는 WSL(1814) 아래에 있다. 로그(1813)는 WSL(1814)에 리스트된 섹터의 저장을 위하여 할당된 적응형 메타블록의 축적 리스트를 저장한다. 또한 로그(1813)는 그것이 업데이트됨과 동시에 모든 WSL들의 카피를 포함한다. 로그(1813)는 메타블록이 할당될 때마다 업데이트된다. 로그(1813)는 로그 블록의 로그 섹터에 포함된다. 로그(1813)의 정보가 변경될 때, 새로운 로그 섹터가 로그 블록의 이용가능한 다음 위치에 기록된다. 이전 로그 섹터는 폐기되고 최종 기록된 로그 섹터만이 유효하다. 로그(1813) 아래에는 임시 그룹 어드레스 테이블(TGAT)(1815) 및 그룹 어드레스 테이블(GAT)(1816)이 있다. GAT(1816)는 논리 그룹 어드레스 순서로 순차적으로 할당된 모든 논리 그룹에 물리적 어드레스를 가지는 비휘발성 메모리 내의 섹터에 저장되는 어드레스 테이블이다. 따라서, GAT 내의 제 n번째 엔트리는 논리 그룹 어드레스 n으로된 논리 그룹과 관련있다. GAT(1816)에 저장된 어드레스 데이터는 메타블록 크기, 그룹 수 및 블록 어드레스에 대한 엔트리로 도 16에 도시한 포맷에 도시된다.
GAT 섹터는 논리 그룹의 논리 접촉 세트에 대한 엔트리를 포함하는 전용 GAT 블록에 저장된다. GAT 블록은 GAT 부분과 TGAT 부분의 두 부분으로 나뉜다. GAT 부분은 GAT 블록의 논리 어드레스 범위 내의 각 논리 그룹에 대한 오리지널 엔트리를 포함다. TGAT 부분은 GAT 섹터로서 동일한 포맷을 가지는 섹터를 포함한다. TGAT 섹터는 GAT를 업데이트 하기 전에 어드레스 데이터를 업데이트하기 위해 사용된다. 주기적으로, 한 블록 내의 GAT 부분은 TGAT 부분 내의 섹터에 저장된 업데이트들을 병합하도록 재기록된다. TGAT 섹터는 임시로 GAT 내의 해당 섹터를 업데이트 어드레스 정보로 대체시킨다. TGAT 섹터는 유효한 TGAT 섹터의 인덱스를 포함한다. 상기 인덱스는 최종 기록된 TGAT 섹터에만 유효하다. 그러한 인덱스는 GAT에 필요없다. TGAT 섹터는 WSL과 연관된 로그로부터 어드레스 정보로 GAT 섹터를 업데이트한다. 상기 WSL과 로그 엔트리는 그 후 소거된다.
특정 논리 어드레스를 가지는 데이터 섹터의 물리적 섹터 어드레스는 리스트(1814-1816)로부터 결정될 수 있다. WSL들은 우선 상기 섹터가 최근에 기록되었는지를 결정하기 위해 판독된다. 만약 그렇다면, 상기 물리적 섹터 어드레스는 WSL의 섹터 위치에 해당하는 메타블록 어드레스로부터 발견된다. 만일 상기 섹터들이 WSL들에서 발견되지 않으면, TGAT 섹터에서의 인덱스는 상기 섹터가 TGAT 엔트리를 가졌는지를 결정하기 위해 판독된다. 만일 그렇다면, 상기 물리적 섹터 어드레스는 적절한 TGAT 섹터를 판독함으로써 결정된다. 만일 상기 섹터가 WSL들이나 TGAT에 리스트되어 있지 않으면 그 후 적당한 GAT 섹터가 그의 물리적 위치를 결정하기 위해 판독된다. 컨트롤러 SRAM 내의 로그의 룩-어헤드 캐칭(Look-ahead Cathing), TAGT 및 GAT 엔트리들은 순차적인 어드레스 순서로 데이터가 기록되거나 판독될 때 어드레스 변환 시간을 줄이도록 수행될 수 있다.
삭제
도 18D는 소거 블록 및 어드레스 변환을 관리하는데 사용된 데이터 구조를 나타낸다. 이미 설명된 리스트에 부가하여, 블록 어드레스(1821) 및 부트(boot) 블록(1820)이 도시된다. 블록 어드레스(1821)는 제어 데이터 구조를 저장하는 모든 소거 블록의 물리적 어드레스의 리스트를 형성한다. 전용 블록 어드레스(BA) 블록은 블록 어드레스(1821)를 포함하는 BA 섹터를 저장하는데 사용될 수 있다. 제어 블록의 위치가 변경될 때, 새로운 BA 섹터가 기록된다. 선행 BA 섹터는 폐기됨으로 표시된다. 따라서, 최종 기록 BA 섹터만이 유효하다.
부트 블록(1820)은 부트 섹터를 가지는 전용 블록이다. 부트 섹터의 정보가 변경될 때, 새로운 부트 섹터가 기록된다. 최종 기록 부트 섹터만이 유효하다. 부트 블록(1820)은 고정된 물리적 위치를 가지며 시스템 초기화 동안 스캐닝을 함으로써 식별된다. 스캐닝은 부트 블록의 위치가 정밀한 위치에서 보다 더 좋은 범위 내에 고정되기 때문에 필요하다. 이는 불량 소거 블록의 가능성을 허용한다. 부트 블록의 위치가 더 좁은 범위 내에 고정되면 스캐닝이 더 빨리 완료된다. 상기 부트 섹터는 블록 어드레스(1821)의 위치 및 요구되어진 임의의 다른 시스템 정렬 정보를 포함한다. 따라서, 초기화 시, 도 18D의 데이터 구조는 신속하게 재건된다. 부트 블록(1820)은 고정 위치를 가지며 블록 어드레스(1821)의 위치를 나타내는데, 그것은 도시된 데이터 구조들의 위치를 나타낸다.
상기에 기술된 특정 데이터 구조들은 EBL 블록, PBL 블록 및 GAT 블록과 같은 전용 블록을 사용한다. 그러한 전용 블록은 메모리 어레이의 단일 소거 블록이거나 멀티 소거 블록을 포함하는 적응형 메타블록일 수 있다. 적응형 메타블록을 사용하는 하나의 이점은 상기 사용된 적응형 메타블록의 크기가 지지될 데이터의 양을 조정할 수 있다는 것이다. 예를 들면, 메모리가 상당수의 소거 블록을 포함하면, 거기에는 많은 PBL 섹터가 존재하며 그리하여 큰 PBL 블록이 적합하게 된다.상기 메모리 어레이가 데이터로 채워지면, 소거 블록의 수는 적어지고, 따라서 PBL 섹터의 수가 적어지며 더 작은 PBL 블록이 적합하게 된다.
최대 크기 보다 적은 적응형 메타블록이 제어 데이터에 사용되면, 상기 제어 데이터는 다른 데이터와 병렬로 프로그램된다. 여기에서 데이터는 호스트로부터 메모리 어레이로 프로그램되어 보내지며, 그러한 병렬 프로그래밍은 호스트 데이터의 프로그래밍과 동시에 업데이트되어질 제어 데이터를 허용할 수 있다. 따라서, 비록 호스트 데이터의 프로그래밍을 위해 이용가능한 감소된 병렬 처리(parallelism) 때문에 프로그래밍 속도에 있어서의 감소가 있을지라도, 제어 데이터가 업데이트되는 동안 호스트 데이터의 프로그래밍에 대한 방해는 없다. 따라서, 도 15D, 15E 및 15F에 도시된 병렬 프로그래밍의 예들은 제어 데이터, 카피 데이터 및 호스트 데이터의 조합을 병렬로 프로그래밍하는데 적용할 수 있었다. 이는 호스트 데이터 프로그래밍이 제어 데이터가 프로그램될 때까지 지연되는 다른 메모리 시스템들에서 관찰된 잠복(latency)을 피할 수 있다.
비휘발성 RAM
특정 비휘발성 메모리 구조들은 랜덤 방식으로 액세스되는 데이터를 허용한다. 이는 플래시 메모리에 대비되는 것으로, 이때 데이터는 페이지의 최소 단위로 기록되며 소거 블록의 최소 단위로 소거된다. 비휘발성 랜덤 액세스 메모리(NVRAM)의 예로 자기저항 RAM(Magnetoresistive RAM, MRAM), 강유전성 RAM(Ferroelectric RAM, FeRAM) 및 상(phase) 변화 메모리(오보닉스 유니파이드 메모리 또는 OUM으로도 알려짐)를 포함한다. NVRAM은 플래시 메모리로도 사용하는 메모리 시스템의 일부로서 사용된다. NVRAM은 분리 칩에 위치하거나 또는 컨트롤러 칩 또는 플래시 메모리 칩에 병합될 수 있다.
NVRAM은 플래시 메모리 카드 또는 내장된(embedded) 플래시 메모리 시스템의 일부일 수 있다. NVRAM은 동력이 유실되었을 시, NVRAM에 저장된 데이터는 유실되지 않는다는 이점과 함께, 휘발성 RAM과 같은 다양한 동일한 어플리케이션으로 사용될 수 있다. 예를 들면, 매체 관리 테이블들은 NVRAM에서 유지될 수 있다.
도 19는 메모리 시스템(1900)에 위치된 NVRAM(1901)을 나타낸다. 메모리 시스템(1900)은 탈착식(removable) 메모리 카드에서 실행된다. NVRAM(1901)은 호스트(1905)로부터 수신되고 있는 데이터를 위한 버퍼로 사용된다. 데이터를 플래시 메모리 어레이(1910)로 프로그래밍하기 전에 버퍼링함으로써, 메모리 어레이(1910)의 적응형 메타블록은 수신된 데이터에 더 적합하도록 정렬된다. 도 12A, 12B 및 12C에 도시된 이전 실시예들에서, 메모리 어레이의 메타블록에 저장된 데이터는 나중에 그 데이터에 더 적합하도록 정렬된 메타블록으로 카피된다. NVRAM 버퍼를 사용함으로써, 플래시 메모리의 일부분에서 다른 곳으로의 그러한 카피를 피하게 되거나 최소화시킬 수 있다.
도 20은 적응형 논리 블록이 처음 NVRAM에 저장된 데이터 스트림의 경계를 반영하기 위해 어떻게 정렬되는지를 나타낸다. 호스트로부터 수신되고 있는 데이터 스트림(2001 및 2002)은 NVRAM에 저장된다. 데이터 스트림(2001 및 2001)은 논리적으로 비순차적이다. 따라서, 데이터 스트림(2001) 및 데이터 스트림(2002) 간의 논리 어드레스 범위에서 그들이 분리 스트림이며 다르게 취급될 수 있음을 나타내는 갭(gap)이 존재한다. 다른 스트림들 또한 스트림들 간의 시간 지연 또는 스트림 간의 브레이크가 존재함을 나타내는 호스트로부터의 일부 통신에 의해 식별될 수 있다.
데이터 스트림(2001)은 5개의 논리 그룹(2010-2014)으로 확장되는 논리 어드레스 범위를 갖는다. 데이터 스트림(2002)은 7개의 논리 그룹(2017-2023)으로 확장되는 논리 어드레스 범위를 갖는다. 적응형 논리 블록(2030 및 2031)은 논리 그룹(2010-2014)으로부터 형성된다. 적응형 논리 블록(2032 및 2033)은 논리 그룹(2017-2023)으로부터 형성된다. 적응형 논리 블록(2030-2033)은 플래시 메모리 어레이(2040)로 상기 데이터 스트림(2001, 2002)의 프로그래밍 동안 최대 병렬 처리를 허용하도록 정렬된다. 플래시 메모리 어레이(2040)는 4개의 플레인을 가지며 그리하여 적응형 논리 블록은 최대 크기로 4개의 논리 그룹을 갖는다. 적응형 논리 블록(2030 및 2033)은 각각 4개의 논리 그룹으로 이루어져 있으며 개별적으로 최대 병렬 처리로 프로그램된다. 적응형 논리 블록(2031, 2032)은 모두 최대 병렬 처리로, 병렬로, 모두 함께 프로그램된다. 만약 데이터 스트림(2001)이 특정 호스트 파일에 대응하고 데이터 스트림(2002)이 다른 호스트 파일에 대응한다면, 다른 적응형 메타블록에 2개의 파일을 유지하는데 유리하다. 그 결과, 그들은 개별적으로 데이터를 카피하는데 있어 최소의 양으로 업데이트될 수 있다. 그러므로, 데이터 스트림을 포함하기 위해 사용된 논리 블록의 경계는 상기 데이터 스트림의 경계에 가능한 한 가깝에 맞춰진다. 데이터 스트림(2001 및 2002)은 다른 데이터 스트림에 의해 논리 어드레스 공간으로 분리된다. NVRAM 내의 여러 데이터 스트림을 유지함으로써, 여러 데이터 스트림의 특성은 데이터 스트림에 있는 데이터를 플래시 메모리 어레이(2040)로 프로그램하는 최선의 방법을 결정하기 위해 비교된다. 도 20의 예는 도 19에서 보여진 하드웨어에서 실행된다. 이때 데이터 스트림(2001, 2002)은 NVRAM(1901)에 저장되며 메모리 어레이(2040)는 플래시 메모리 셀 어레이(1910)에 대응한다.
도 21은 NVRAM의 또 다른 어플리케이션을 나타낸다. 메모리 시스템은 NVRAM과 플래시 메모리를 병합하여 상기 데이터가 데이터의 본질(nature)에 따라 어떠한 형태의 메모리에도 저장될 수 있다. 예를 들면, 자주 업데이트 되는 데이터는 NVRAM에 저장된다. NVRAM은 플래시 메모리처럼 사용되도록 정렬된다. 이때 플래시 메모리가 특정한 소거 블록 크기를 가지면, 상기 NVRAM은 동일한 크기의 데이터 단위로 동작하도록 정렬된다.
도 21은 NVRAM에 저장되어지고 있는 업데이트된 데이터(2140)를 나타낸다. 적응형 논리 블록(2130-2132)은 오리지널 데이터의 스트림(2105)로부터의 오리지널 데이터를 포함하는 논리 그룹들(2110-2121)로부터 형성된다. 적응형 논리 블록(2130-2132)은 메모리 어레이로 프로그램된다(도시하지 않음). 업데이트된 데이터(2140)는 호스트로부터 수신된다. 앞서 설명한 바와 같이, 업데이트된 데이터는 업데이트되는 동안 새로운 적응형 논리 블록에 저장되며, 그리하여 하나 또는 그 이상의 적응형 논리 블록은 업데이트된 데이터를 포함하며 다른 적응형 논리 블록들은 오리지널 데이터만을 포함한다. 논리 그룹(2125, 2126)은 업데이트된 데이터(2140)와 오리지널 논리 그룹(2115, 2116)으로부터의 일부 오리지널 데이터로부터 형성된다. 적응형 논리 블록(2135)은 논리 그룹(2125, 2126)으로부터 형성된다. 적응형 논리 블록(2136, 2137)은 적응형 논리 블록(2131)의 잔류(remaining) 논리 그룹으로부터 형성된다. 따라서, 적응형 논리 블록(2131)은 오리지널 데이터만을 가지고 있는 적응형 논리 블록(2136 및 2137) 및 업데이트된 데이터를 가지고 있는 적응형 논리 블록(2135)에 의해 교체된다.
적응형 논리 블록(2135)은 플래시 메모리 어레이가 아닌 NVRAM에 저장된다. 이는 적응형 논리 블록(2135)이 효율적으로 업데이트되도록 허용한다. 일반적으로NVRAM은 플래시 메모리보다 더 빠른 속도로 기록하는 것이 가능하다. 데이터는 가베지 수집 없이 비순차적 순서(non-sequential order)로 기록된다. 매체 관리자는 NVRAM을 플래시 메모리와 유사한 방식으로 처리한다. NVRAM는 플래시 메모리의 소거 블록과 동일한 크기를 갖는 어드레스가능한 단위로 나뉜다. 어드레스가능한 단위는 병렬로 프로그램된다. 논리 그룹(2125, 2126)의 위치를 기록하는 테이블은 NVRAM에 어드레스가능한 단위의 어드레스들을 간단히 기록한다. 만약 업데이트된 데이터와 동일한 논리 범위를 가지는 데이터 업데이트를 수반한다면, 이러한 업데이트들은 플래시 메모리의 일부분에서 또 다른 부분으로의 데이터 카피 없이 신속하게 이루어질 수 있다. 적응형 논리 블록(2135)은 NVRAM에서 플래시 메모리로 재위치된다. 예를 들면, 불충분한 용량이 또 다른 목적을 위해 NVRAM에 이용가능하다면, 적응형 논리 블록(2135)로부터의 데이터는 이용가능한 NVRAM의 용량을 생성하기 위해 NVRAM에서 플래시 메모리로 이동된다.
적응형 논리 블록(2136 및 2137)은 각각 하나의 논리 그룹만을 포함한다. 이러한 논리 그룹들은 새로운 적응형 논리 블록(2138, 2139)이 형성되도록 재정렬 될 수 있다. 적응형 논리 블록(2138, 2139)은 적응형 논리 블록(2136, 2137) 보다 더 크며 더 효율적인 데이터 처리를 허용한다.
데이터 경계
데이터 경계(boundaries)는 메모리 시스템에 의해 수신되는 데이터에 존재한다. 데이터 경계의 예(논리 경계)로 데이터 런(data run) 경계 및 파일 경계가 있다. 일반적으로, 호스트 파일은 하나 이상의 데이터 런으로 저장된다. 데이터 런은 파일 저장을 위해 호스트에 의해 할당된 한 세트의 논리적으로 인접 섹터이다. 데이터 런은 아직 유효한 데이터를 포함하지 않은 논리 어드레스 공간의 일부에 할당된다. 도 22는 두 개의 파일, 즉 파일 A와 파일 B를 나타낸다. 파일 A는 데이터 런 (1), 데이터 런(3) 및 데이터 런(5)을 포함한다. 파일 B는 데이터 런(2) 및 데이터 런(4)을 포함한다.
파일 경계는 호스트가 다른 파일의 종단에 바로 뒤따르는 어드레스에서 파일을 기록하기 시작하는 곳에 생성된다. 따라서, 파일 경계는 데이터 런 내에 놓인다. 도 23은 단일 데이터 런 내에 기록된 파일 C 및 파일 D 사이의 파일 경계를 나타낸다.
일반적으로, 적응형 메타블록을 사용하는 메모리 어레이에 의해 데이터가 수신될 때, 데이터의 저장을 위한 적응형 메타블록의 구조는 데이터 경계의 위치를 고려하지 않는다. 이는 데이터 경계의 위치가 알려지지 않았기 때문이거나 또는 큰 적응형 메타블록에서 신속하게 기록된 포스(force) 데이터의 시간 제한 때문일 수도 있다. 이러한 메모리 어레이에 저장된 데이터가 업데이트될 때, 일부 데이터는 오리지널 메타블록에서 새로운 메타블록으로 카피되어야 한다. 이러한 데이터 카피는 새로운 데이터를 기록하기 위해 상기 메모리 시스템의 용량을 감소시킨다. 일반적으로, 하나의 논리 파일만이 주어진 동작 내에서 업데이트된다. 이때 적응형 메타블록이 하나의 파일 이상의 일부분을 포함하면, 부가적인 파일 일부분은 새로운 적응형 메타블록에 카피되어야 한다. 이러한 일부분들의 카피는 가베지 수집 동안 일어나며, 충분한 자원를 다 써버린다. 따라서, 데이터 경계를 포함하는 적응형 메타블록은 그것들이 업데이트될 때 원치 않는 오버헤드를 야기시킬 수 있다.
고성능화(high performance)는 프로그래밍 동안 최대 병렬 처리에 의해 달성되는 반면 메모리 어레이 내의 데이터 카피를 최소화함으로써 달성된다. 이러한 두가지 목표는 적응형 메타블록을 높은 수준의 병렬 처리를 달성하기 위해 병렬로 프로그래밍함으로써 그리고 데이터 경계를 가지는 최소 크기의 적응형 논리 블록(메타그룹)을 형성함으로써 달성된다. 적응형 메타블록은 단위로서 프로그램되는 "프로그램 블록"으로 형성된다. 프로그램 블록은 최대 병렬 프로그래밍의 단위이다. 따라서, 프로그램 블록은 메모리 어레이의 모든 플레인을 거쳐 총체적으로 확장되는 적응형 메타블록으로 정렬된다. 도 24는 이러한 메모리 시스템에서 사용된 데이터 단위의 계층을 나타낸다.
데이터 경계를 가지는 최소 크기의 메타그룹을 형성하는 예로 도 25 및 도 26에 나타낸다. 도 25는 최소 크기의 메타그룹인 메타그룹에 각각 저장되고 있는 두개의 데이터 런 경계를 나타낸다. 호스트 섹터 데이터 런(2510)은 논리 어드레스(A)에서 논리 어드레스(A+4n+X)까지 확장한다. 따라서, 데이터 경계(2520)는 논리 어드레스(A+4n+X)에 존재한다. 논리 어드레스(A+4n+X)는 논리 그룹(2530) 내에 있다. 메타 그룹(B)은 데이터 경계(2520)을 포함하도록 형성된다. 메타그룹(B)은 단일 논리 그룹만을 포함하는 최소 크기의 메타그룹이다. 호스트 섹터 데이터 런(2510)의 나머지는 메타그룹(A)에 포함된다. 메타그룹(A)은 최소 크기의 메타그룹은 아니지만 4개의 논리 그룹을 포함한다. 도 25는 또한 논리 어드레스(B+Y)로부터 확장된 호스트 섹터 데이터 런(2511)을 나타낸다. 따라서, 데이터 경계는 논리 어드레스(B+Y)에 형성된다. 논리 어드레스(B+Y)는 논리 그룹(2531) 내에 있다. 메타그룹(C)은 데이터 경계(2521)를 포함하도록 형성된다. 메타그룹(C)은 단일 논리 그룹만을 포함하는 최소 크기의 메타그룹이다. 호스트 섹터 데이터 런(2511)의 나머지는 메타그룹(D)에 포함된다. 메타그룹(D)은 두 개의 논리 그룹을 포함하며 최소 크기의 메타그룹은 아니다. 호스트 섹터 데이터 런(2510 및 2511)이 나중에 업데이트될 때, 이것은 업데이트된 데이터 런에 있지 않은 부가적인 데이터의 적은 카피로 실행된다. 왜냐하면 오직 메타그룹(B 및 C)만이 부가적인 데이터를 포함하며, 이러한 메타그룹 각각은 하나 이하의 부가적인 데이터의 논리 그룹을 포함하기 때문이다.
도 26은 최소 크기의 적응형 메타그룹으로 맵핑되는 파일(2610) 및 파일(2611) 사이의 파일 경계(2615)를 나타낸다. 파일 경계(2615)는 논리 어드레스(A+4n+X)에 도시된다. 파일 경계(2615)는 호스트 섹터 데이터 런(2605) 내에 있다. 논리 어드레스(A+4n+X)는 논리 그룹(2630) 내에서 발생한다. 메타그룹(B)은 논리 그룹(2630)으로부터 형성된다. 메타그룹(A)은 파일(2610)의 나머지로부터 형성된다. 메타그룹(C)은 파일(2611)의 나머지로부터 형성된다. 파일(2610)은 메타그룹(A 및 B)을 업데이트함으로써 업데이트된다. 따라서, 메타그룹(B)에 포함된 파일(2611)의 일부분(2641)만이 파일(A)의 업데이트 동안 카피될 것이다. 마찬가지로, 파일(B)은 메타그룹(B 및 C)을 업데이트함으로써 업데이트 된다. 이는 메타그룹(B)에 저장된 파일(2610)의 일부분(2640)만을 카피하는 것을 뜻한다. 데이터 경계 정보는 메모리 시스템에 공급된 데이터로부터의 메모리 시스템에 의해 결정되거나 또는 데이터 경계 정보는 메모리 시스템에 직접 공급된다. 예를 들면, 호스트는 호스트가 메모리 시스템에 공급하는 데이터에 관한 데이터 경계 정보를 공급하기도 한다. 데이터 경계 정보는 데이터 런 경계의 위치 또는 호스트에 의해 공급되고 있는 데이터 내의 파일 경계를 포함할 수 있다. 이러한 데이터 경계 정보는 일반적으로 경계를 가지는 데이터에 앞서 제공된다. 이때 메타그룹의 최대 크기가 L 논리 그룹이면, 제공되는 데이터에 앞서 적어도 L 논리 그룹에서 데이터 경계 정보를 제공하는 것이 바람직하다.
호스트는 또한 즉각적인 기록을 위하여 이용할 수 있는 부가 데이터가 없음을 표시하기 위하여 데이터 런의 시퀀스 종단의 통지를 제공할 수 있다. 이러한 통지는 메모리 시스템에 후선 동작을 스케줄하게 한다. 파워 다운(power-down) 동작의 통지는 또한 호스트에 의하여 제공된다. 그와 같은 통지는 핸드쉐이크 동작 (handshake operation)의 일부일 수 있다. 상기 파워 다운 동작은 상기 메모리 시스템이 파워 다운에 적합한 조건에서 나타내는 호스트에 응답할 때까지 일어나지 않는다. 호스트와 메모리 시스템 사이의 대화(dialogue)는 파워 온 (power-on) 후에 발생할 수 있으며 그리하여 상기 메모리 시스템은 호스트에 성능(capabilities)을 통지할 수 있다. 그 역도 마찬가지이다. 그와 같은 성능은 상술한 바와 같이 데이터 경계 정보를 받아들이고 사용하기 위한 성능을 포함한다.
호스트로부터 데이터 경계 정보를 수신하는 것에 추가하여, 데이터 경계들은 또한 다른 소스들로부터 메모리 시스템에 의해 결정된다. 이는 업데이트되는 데이터 범위로부터 파생(deriving) 데이터 경계 위치를 포함할 수 있다. 데이터 런의 시동은 호스트에 의해 제공된 데이터 어드레스로부터 직접 식별될 수 있다. 데이터 런의 종단은 데이터 변환(data transition)에서 다른 데이터 런까지 나타낸다. 파일 경계는 디렉토리 및 호스트에 의한 FAT 액세스의 패턴으로부터 나타낸다. 오리지널 데이터를 위한 메타그룹 맵핑은 또한 데이터 및 파일 경계를 찾는데 사용될 수 있다.
데이터 경계 관리 동작들(Data Boundary Management Operations)
도해 A에서, 데이터 경계 위치에 반응하는 정렬에서의 저장 데이터는 우선 임시 위치에서 그러한 저장 데이터에 의해 실행되고, 그 후 플래시 메모리에서 저장을 위하여 메타그룹으로 데이터를 맵핑하게 된다. 임시 위치는 누산기 RAM(accumulator RAM)에 의해 제공된다. 대안적으로, 임시 위치는 플래시 메모리 어레이의 일부에 의해 제공된다. 도 27은 데이터 경계 관리 정보를 사용하여 데이터를 정렬하는 이들 두 가지 대안들을 나타낸다. 도해 A는 이어서 데이터 경계 관리를 구비한 플래시 메모리 내에 저장하기 앞서 맵핑된 메타그룹에 종속하는 임시 누산기 RAM에 저장된 데이터를 나타낸다. 도해 B는 이어서 데이터 경계 관리를 구비한 플래시 메모리 내에 메타그룹을 재맵핑 및 저장하기에 앞서 맵핑된 중간 메타그룹을 구비한 플래시 메모리 내에 저장된 데이터를 나타낸다.
임시 누산기 RAM은 플래시 메모리에서 데이터 경계의 위치에 의해 결정되어지는 방법으로 병렬 프로그래밍을 하기 위해 그 후 전송되는 호스트로부터 데이터 섹터를 수신한다. 상기 누산기 RAM은 적어도 한 데이터의 프로그램 블록 저장을 허락하기에 충분한 용량을 갖는다. 따라서, 누산기 RAM에서의 데이터는 단일 프로그램 블록에서 병렬로 프로그램되는 메타그룹으로 정렬된다. 누산기 RAM은 NVRAM(1901)과 같은 비휘발성 메모리일 수 있다. 대안적으로, 누산기 RAM은 데이터가 플래시 메모리로 프로그램되기 전에 호스트에 의해 동력이 제거되면 누산기 RAM에서의 데이터 손실 위험이 있는 경우에 휘발성 메모리일 수 있다. 이러한 위험은 호스트와 메모리 시스템 사이에 적절한 프로토콜을 가짐으로써 관리될 수 있다.
도 28A는 도 25에 도시된 메타블록(A-D)으로 이루어진 프로그램 블록(2800)을 나타낸다. 최대 프로그래밍 속도를 위해, 메타블록(A-D)을 함께 프로그램하여 메모리 시스템의 최대 병렬 프로그래밍 용량을 사용하는 것이 바람직하다. 파일들의 업데이트 효율을 좋게 하기 위해, 각각 하나의 소거 블록으로 정렬된 개별 메타블록으로서 메타블록(B 및 C)을 유지하는 것이 바람직하다. 도 28A에 도시된 데이터 정렬은 이러한 두가지 목표 모두를 달성한다. 데이터 섹터들은 A에서 A+4n+X까지의 데이터 런(2510) 및 B+Y에서 B+3n-1까지의 데이터 런(2511)과 같은 두 개의 개별 데이터 런으로서 호스트로부터 수신된다. 도 28B는 이들 데이터 런으로부터 데이터 섹터들이 어떻게 메타블록(A-D) 내로 프로그래밍되어질 수 있는지를 나타낸다. 비록 다른 실시예에서는 하나의 페이지가 멀티 섹터를 포함할 수 있지만, 상기 실시예에서는 하나의 페이지가 데이터의 단일 섹터를 포함한다. 프로그램 블록은 메모리 어레이의 모든 플레인들을 거쳐 확장한다. 프로그램 블록 내에서, 섹터들은 메타블록 정렬에 의하여 결정된 순서로 프로그램된다. 프로그램 블록 페이지들이 표시되며, 이때 하나의 프로그램 블록 페이지는 병렬로 프로그램되는 메모리 어레이의 각 플레인으로부터 하나의 페이지로 이루어진다. 따라서, 프로그램 블록 페이지(0)는 메모리 어레이의 모든 플레인을 거쳐 확장되고, 프로그램 블록 페이지(0) 내의 모든 섹터들은 동일한 프로그래밍 단계로 프로그램된다. 프로그램 블록 페이지(0)가 프로그램되면, 프로그램 블록 페이지(1)가 프로그램된다. 도 28B에서 섹터들이 프로그램되어진 시퀀스는 이러한 섹터들이 도 25에서 도시된 호스트로부터 수신된 순서는 아니다. 누산기 RAM에서의 이러한 섹터들의 순서 변화는 도 28C에 도시된다. 도 28C는 프로그램 블록(2800)으로 프로그래밍 하기 위해 전송되고 있는 누산기 RAM 내에 유지된 데이터 런(2510) 및 데이터 런(2511)을 나타낸다. 프로그램 블록으로 카피되어질 데이터는 도시된 바와 같은 누산기 RAM에 기록된다. 섹터 (A+4n+X 에서 A+5n-1 및 B에서 B+Y)는 누산기 RAM으로 카피되며, 그리하여 그들은 프로그램 블록으로의 전송에 이용될 수 있다. 대안적으로, 카피될 데이터는 이미 플래시 메모리 내에 위치되며 따라서 플래시 메모리의 일부에서 또 다른 일부로 직접 카피될 수 있다. 도 28C는 도 28B의 프로그램 블록 페이지(0) 및 프로그램 블록 페이지(1)에 대한 섹터들의 맵핑을 나타낸다. 도 27의 도해 B에서와 같이, 플래시 메모리는 호스트로부터 수신된 데이터를 위한 임시 저장 위치를 제공하는데 사용되며, 상기 데이터는 여러가지 유형의 메타그룹들로 이루어진 중간 포맷(intermediate format)에 저정된다. 그러한 메타그룹들의 크기는 최대 크기의 메타그룹의 논리 어드레스 범위 내에 있는 데이터 런 경계 또는 파일 경계와 같은 논리 경계의 존재 및 임의의 논리 경계 뒤의 부가 데이터의 전송을 위한 요구에 의해 결정된다. 다음의 5개의 메타그룹 유형은 중간 폼(intermediate form), 전체 메타그룹(full metagroups), 부분 메타그룹(partial metagroups), 단축 메타그룹(short metagroups), 시동 메타그룹(start metagroups) 및 멀티파일 메타그룹 (multifile metagroups)에서의 데이터 저장을 제공하기 위해 사용된다.
전체 메타그룹(2900)은 도 29A에 도시된다. 전체 메타그룹은 저장될 데이터 에 논리 경계가 없는 곳 또는 현재 임의의 논리 경계들에 관하여 이용가능한 정보가 없는 곳에 할당된다.
부분 메타그룹(2901)은 도 29B에 도시된다. 부분 메타그룹은 저장될 데이터에 논리 경계가 존재하는 곳에 할당되나 중간 포맷에서 상기 데이터를 프로그래밍 하는데 있어서 최대 병렬 처리가 요구된다. 논리 경계는 프로그래밍 전에 공지되거나(예를 들면, 호스트로부터), 또는 프로그래밍 도중 만날수 있다. 부분 메타그룹은 메타그룹에서 가능한 최대 수 보다 더 적은 데이터의 논리 그룹들을 포함한다. 부분 메타그룹은 병렬로 어레이의 모든 플레인을 사용하여 프로그램되도록 최대 크기의 메타블록으로 프로그램되며 그리하여 가능한 한 빠르게 프로그램된다.
단축 메타그룹(2902)은 도 29C에 도시된다. 단축 메타그룹은 논리 경계가 저장될 데이터 에 존재하며 메타그룹에서 최대 병렬 처리가 필요하지 않는 곳에 할당된다. 단축 메타그룹은 메타그룹에서 가능한 논리 그룹의 최대 수 보다 더 적은 논리 그룹을 갖는다. 단축 메타그룹은 최대 크기의 메타블록에 포함된 것보다 더 적은 소거 블록을 포함하는 메타블록으로 프로그램된다. 데이터 기록 대역폭(the data write bandwidth)은 감소하지만, 재위치된 데이터들이 단축 메타그룹으로 병렬로 프로그램된다. 단축 메타그룹은 호스트가 신호화될 때 사용되고, 부가 데이터는 데이터 런 경계를 즉시 뒤따르지 않는다.
시동 메타그룹(2903)은 도 29D에 도시된다. 시동 메타그룹은 데이터 런의 시동 경계에서 데이터를 저장하기 위해 할당된다. 정렬 오프셋(alignment offset)은 데이터 런 내의 제1 섹터가 논리 그룹의 제1 섹터가 아닌 곳에 사용될 수 있다. 제1 논리 그룹을 완료하기 위한 데이터는 또 다른 위치로부터 카피된다. 시동 메타그룹은 또한 기록 도중 논리 경계가 만나는 곳인 부분 메타그룹일 수 있다.
멀티파일 메타그룹(2904)이 도 29E에 도시된다.
멀티파일 메타그룹은 파일 경계를 포함하고 따라서 최소한 두 개의 다른 파일들의 일부를 포함하게 된다. 멀티파일 메타그룹은 또한 부분, 단축 또는 시동 메타그룹일 수 있다.
상술한 바와 같이, 중간 포맷의 메타그룹들 내의 데이터는 논리 경계가 존재할 때 후속 시간에서 더욱 바람직한 정렬로 재맵핑될 수 있다. 왜냐하며 전체 메타그룹이 논리 경계를 포함하고 있지 않기 때문에 재맵핑이 필요 없게 된다. 그러나, 부분, 단축, 시동 그리고 멀티파일 메타그룹들은 도 30에 도시된 바와 같이 재맵핑될 수 있다. 도 30A는 부분 메타그룹(3010)이 메타그룹(A) 및 메타그룹(B)로 재맵핑되는 것을 도시한다. 메타그룹(B)은 최소 크기(하나의 논리 그룹)의 메타그룹이다. 메타블록(B)은 오리지널 블록으로부터 카피된 데이터로 완료된다. 도 30B는 단축 메타그룹(3020)이 메타그룹(A) 및 메타그룹(B)로 재맵핑되는 것을 도시한다. 이는 부분 메타그룹의 재맵핑과 유사하다. 도 30C는 시동 메타그룹(3030)이 메타그룹(A) 및 메타그룹(B)로 재맵핑되는 것을 도시한다. 여기서, 시동 메타그룹(3030)은 정렬 오프셋을 갖는다. 이러한 정렬 오프셋이 제거되어 메타그룹(A)이 순차적으로 된다. 도 30D는 메타그룹(A, B 및 C)로 재맵핑된 메타그룹(3040)을 도시한다. 메타그룹(B)은 논리 경계(3041)를 포함한다. 메타그룹(B)은 최소 크기(하나의 논리 그룹)의 메타그룹이다.
중간 포맷 내의 데이터는 호스트로부터의 수신 후 즉시 재맵핑을 위해 분석된다. 그러나, 데이터의 재위치는 즉시 발생하지 않을 수 있다. 대신에, 프로그램 동작은 데이터와 상기 데이터에 관한 정보에 대해 계획되고 계획된 재맵핑이 재맵핑 리스트 내에 저장된다. 데이터 재위치는 그 후 후선에서 더욱 적절한 시간에 실행되거나 또는 저장된 데이터의 범위 내에서 업데이트된 데이터의 수신과 같은 이벤트에 의해 트리거될 수 있다. 재맵핑 리스트는 플래시 메모리, 예를 들면, 로그,또는 전용 리맵핑 섹터(dedicated Remap sector)에서의 적절한 제어 정보 구조로 저장될 수 있다.
재맵핑 리스트는 재맵핑 동작이 걸려있는 중간 포맷 내에서 최근 기록된 각 메타그룹을 위한 하나의 엔트리(entry)를 갖는다. 그러한 메타그룹은 일반적으로 데이터 경계를 포함한다. 재맵핑 리스트 내의 엔트리는 다음과 같이 6개의 필드를 포함할 수 있다:
메타그룹의 유형 (부분, 단축, 시동 또는 멀티파일)
메타그룹내의 데이터 런의 시동 논리 어드레스
메타그룹 크기 (메타그룹내의 논리 그룹 개수)
메타블록 크기 (메타블록내의 소거 블록 개수)
메타그룹 내의 경계 오프셋
페이지 태그
엔트리는 중간 포맷 내의 메타그룹이 생성되었을 때 리스트에 부가된다. 엔트리는 중간 포맷 내의 메타그룹이 리스트로부터 소거될 때 상기 리스트로부터 제거된다. 엔트리가 부가되거나 소거되면, 상기 리스트는 새로운 위치, 예를 들면, 새로운 로그 섹터 또는 새로운 재맵핑 섹터에 새로운 리스트를 기록함으로써 업데이트된다.
재맵핑 리스트의 메타그룹 맵핑들은 해당 데이터에 관련된 매체 관리 동작들 중 어느 것에도 사용되지 않는다. 매체 관리 제어 구조는 데이터의 임시 저장을 위해 할당되었던 중간 포맷 메타그룹과 관계된다. 따라서, 엔트리들은 다른 매체 관리 기능들에 영향을 주지 않고 재맵핑 리스트로부터 제거될 수 있다. 예를 들어, 계류중인 동작의 백로그(backlog)가 너무 크다면, 엔트리들은 소거될 수 있다. 이는 데이터가 메모리 어레이에 저장되는 방법의 효율성을 감소시킬 뿐이다.
중간 포맷으로부터의 데이터 프로그래밍은 호스트 데이터를 기록하기 위해 상기 호스트에 이용가능한 기록 대역폭이 감소되지 않도록 스케쥴된다. 리맵핑 동작은 데이터가 호스트로부터 수신되지 않고 있을 때 후선 동작에서 동시에 수행될 수 있다. 단일 중간 메타그룹을 위한 모든 재맵핑 메타그룹들은 병렬로 프로그램된다. 호스트로의 핸드쉐이크 프로토콜(protocol)은 메모리 시스템의 파워 다운을 관리하기 위해 수립되어 재맵핑 동작이 수행되고 있는 동안 동력 손실이 발생하지 않도록 한다. 재맵핑 동작은 오리지널 호스트 데이터의 프로그래밍과 병렬로 수행된다. 도 31은 메모리 어레이(3160)로부터 재위치된 데이터가 적응형 메타블록(3120)에 병렬로 프로그램되는 동안 호스트(3150)로부터의 데이터가 적응형 메타블록(3110)에 프로그램되는 것을 도시한다. 이러한 병렬 동작은 오리지널 호스트 데이터를 기록하기 위해 이용가능한 기록 대역폭을 감소시킬 것이기 때문에, 이러한 병렬 프로그래밍이 적절할 뿐이며, 이때 상기 호스트는 중간 기록을 위해 오리지널 호스트 데이터가 더 이상 이용가능하지 않은 메모리 시스템을 통보한다. 재맵핑 동작은 호스트 업데이트에 응답하여 수행될 수 있다. 업데이트될 데이터가 중간 포맷에 존재하고 재맵핑 리스트에 리스트되면, 업데이트된 데이터는 중간 메타그룹들로부터 카피된 데이터와 함께 재맵핑된 포맷에 기록될 수 있다.
재맵핑 동작은 호스트 인터페이스의 새로운 처리에 즉시 응답하도록 일시정지(suspended)된다. 재맵핑 동작은 현재 페이지 프로그램 동작의 완료 후에 일시정지될 수 있고, 이러한 경우, 다음 페이지의 프로그래밍으로 후에 재개된다. 대안적으로, 칩 RAM이 허용한다면, 재맵핑 동작은 호스트에 대한 빠른 응답을 위하여, 페이지를 프로그래밍하는 과정에서 일시정지될 수 있다. 페이지 프로그래밍 동안 재맵핑 동작을 일시정지하기 위하여, 플래시 메모리에서의 그 실행은 플래시 메모리칩에 리셋 커맨드를 발효함으로써 종료될 수 있다. 그 후, 상기 칩은 즉시 새로운 호스트 처리에 응답하여 액세스에 이용가능하다. 이어서, 재맵핑 동작은 프로그램 커맨드에 따라, 플래시 칩에 일시정지된 페이지에 대한 동일한 데이터를 재전송함으로써 재개된다. 많은 플래시 칩 아키텍춰들은 부분적으로 프로그램된 페이지의 프로그래밍을 재시동하도록 하며, 상기 데이터 패턴이 변하지 않은 채 남아있게 제공된다.
호스트가 경계 위치 정보를 제공하는 데이터 저장부
일 실시예에서, 호스트는 메모리 어레이에 호스트 데이터를 더욱 효율적으로 저장하기 위해 사용되는 메모리 시스템에 부가 정보를 제공한다. 이러한 정보의 한 예로 전송되고 있는 호스트 데이터에서의 데이터 경계(논리 경계)의 위치가 있다. 일반적으로, 데이터 경계의 위치는 상기 경계를 포함하는 호스트 데이터가 전송되기 전에 제공되어야 하며, 그리하여 호스트 데이터는 그들이 수신되어 중간 포맷으로 우선 저장될 필요가 없을 때 효율적인 방법으로 저장될 수 있다.
데이터 경계 위치에 기초하여 보다 효율적인 방법으로 호스트 데이터를 저장하기 위하여, 메모리 어레이의 적응형 메타블록들에서 데이터를 저장하기 전에 특정 데이터를 버피링하는 것이 유리할 수 있다. 직렬 플래시 버퍼는 이러한 목적으로 제공된다. 도 32는 소거 블록 풀(erased block pool)(3204)로부터의 소거 블록들로 만들어진 직렬 플래시 버퍼(3202)를 나타낸다. 직렬 플래시 버퍼(3202)에서의 소거 블록들은 종래의 메타블록처럼 최대 크기의 적응형 메타블록들로 정렬될 수 있다. 이는 데이터를 메모리 어레이의 최대 병렬 처리로 직렬 플래시 버퍼에 프로그램되게 한다. 메모리 어레이가 플레인들로 분배되면, 이것은 직렬 플래시 버퍼의 메타블록들이 메모리 어레이의 각 플레인으로부터의 소거 블록을 포함하는 것을 의미한다. 따라서, 직렬 플래시 버퍼(3202)는 반드시는 아니나 일반적으로 최대 병렬 처리로 데이터의 저장을 가능하게 하는 메타블록들인 하나 이상의 버퍼 메타블록들이 포함된다.
직렬 플래시 버퍼로 사용될 수 있는 구조의 한 예로 본 출원과 동일한 날에 제출된 "스크래치 패드 블록", 대리인 사건 번호, SNDK.406US0,로 명칭된 미국 특허 출원에서 제공되며, 이로써 그 전체가 본문에 참조로서 병합된다.
호스트 데이터는 상술한 바와 같이 적응형 메타블록들의 메모리 어레이에 직접 데이터를 저장하기 위한 대안으로서 직렬 플래시 버퍼(3202)로 전송될 수 있다. 직렬 플래시 버퍼는 메모리 어레이에서 하나 이상의 버퍼 메타블록들로 구성될 수 있다. 버퍼 메타블록은 논리적으로 관련되지 않은 데이터의 다중부(multiple portion)를 포함할 수 있다. 직렬 플래시 버퍼(3202) 내의 다른 메타블록들은 버퍼 메타블록들의 메타블록 경계들과 부합되는 논리적 경계들이 없기 때문에 어떤 특정 의미를 갖지 않는다. 따라서, 순차적인 데이터의 일부는 단일 메타블록이나 다중 메타블록에 저장될 수 있으며, 일반적으로 버퍼 메타블록들에 정렬되지 않는다. 데이터가 버퍼 메타블록으로부터 카피됨에 따라, 버퍼 메타블록의 상기 데이터는 폐기된다. 버퍼 메타블록의 모든 데이터가 폐기되었을 때, 버퍼 메타블록을 포함하는 소거 블록들은 소거 블록 풀로 상환된다. 따라서, 버퍼 메타블록들은 소거 블록풀의 소거 블록으로부터 요구된 것처럼 형성될 수 있다. 그 후, 그들이 폐기 데이터만 포함하고 있을 때, 상기 소거 블록들은 소거되어 소거 블록 풀로 상환된다. 직렬 플래시 버퍼(3202)는 새로운 데이터가 직렬 플래시 버퍼(3202)에 저장될 소거 블록 풀(3204)(할당 블록 리스트 또는 유사구조)의 링크 블록들로부터 버퍼의 상부에 형성된 버퍼 메타블록에 기록되며 데이터가 버퍼의 하부에서 형성된 버퍼 메타블록들의 할당된 적응형 메타블록으로 카피되어 버퍼의 상부에 메타블록들의 데이터가 폐기되는 선형의 메모리를 형성한다. 폐기 데이터만을 포함하는 버퍼 메타블록에서의 소거 블록들은 소거 블록 풀(3204)(플레인 블록 리스트 또는 유사구조)로 상환된다. 버퍼 메타블록은 고정된 크기의 메타블록이거나 개별적으로 선택된 크기의 적응형 메타블록이다. 몇몇 예를 들면, 최대 크기의 메타블록은 높은 수준의 병렬 처리를 제공하기 위한 버퍼 메타블록으로 사용될 수 있다.
도 33A는 플래시 메모리 어레이의 할당된 적응형 메타블록들에 저장되어 있는 호스트 데이터를 위한 두 개의 선택가능한 경로를 보여준다. 데이터는 할당된 적응형 메타블록(3308)에 직접 기록된다(3306). 대안적으로, 데이터는 직렬 플래시 버퍼(3302)의 버퍼 메타블록(3312)에 기록되어(3310), 버퍼 메타블록(3312)으로부터 할당된 적응형 메타블록(3316)에 저장될 수 있다(3316). 이러한 양자택일의 과정들의 어느 것이 특정 데이터를 위해 기록될 것인지는 논리 경계들의 위치에 달려있다. 특히, 논리 경계들의 위치가 호스트에 의해 제공되는 경우, 어떤 루트가 사용될 것인지에 대한 결정은 제공된 위치들에 따라 이루어 진다. 데이터의 일부가 최대 크기의 메타그룹과 같거나 그 이상이고 임의의 논리 경계를 갖고 있지 않은 경우, 데이터의 일부는 할당된 적응형 메타블록들에 직접 저장된다. 최대 크기의 적응형 메타블록들은 최대 병렬 처리가 가능한 경우에 사용된다. 최대 크기의 메타그룹보다 더 적은 데이터의 일부가 저장되어질 경우, 사용할 루트에 대한 결정은 일부 데이터의 크기에 기초한다. 데이터의 일부가 논리 경계를 갖고 있을 경우, 일반적으로 최소 크기의 적응형 메타블록들에 이를 저장하는 것이 바람직하다. 이러한 데이터의 일부는 버퍼 메타블록에 저장되었다가 나중에 할당된 적응형 메타블록들에 카피될 수 있다. 이는 최대 병렬 처리로, 데이터의 일부분들이 호스트로부터 수신되어 초기에 신속하게 저장되도록 한다. 나중에, 도 33A의 3306과 3314에 도시된 바와 같이, 이러한 데이터의 일부분들은 다른 데이터와 병렬로 할당된 적응형 메타블록들에 카피될 수 있으며, 그리하여 고도 병렬 처리(high degree parallelism)가 사용된다. 따라서, 저도 병렬 처리(low degree parallelism)로 데이터를 기록하는 것은 최소 크기의 적응형 메타블록들이 기록된다 할지라도 일반적으로 피한다.
도 33B는 오리지널 적응형 메타블록(3328)으로부터 카피된 데이터(3324)와 함께 저장되는 최소 크기의 적응형 메타블록(3322)에 버퍼 메타블록(3318)의 데이터가 카피되는 경우의 또 다른 예를 나타낸다(3320). 이 예는 논리 경계를 포함하는 최소 크기의 적응형 메타블록의 전형이다. 논리 경계는 적응형 메타블록의 논리 어드레스 공간 내의 어딘가에서 생기기 때문에, 논리 경계의 일측에서 데이터가 업데이트 될 때 업데이트 된 데이터 및 일부 오리지널 데이터 둘 모두 적응형 메타블록에 저장된다.
도 34는 먼저 설명한 도해(A 및 B)에 비하여 직렬 플래시 버퍼를 사용하는 도해, 즉, 도해 C를 나타낸다. 도해(A 및 B)는 어떤 중간 형태(RAM 또는 플래시 중의 하나)에 모든 수신 데이터를 저장하고, 데이터(논리 경계들의 위치와 같은)의 특징을 결정하고, 이들의 특징에 따라 플래시에 데이터를 저장한다. 반면에, 도해 C에서는, 데이터의 특징들은 호스트로부터 수신된다. 이러한 특징들의 수신은 데이터를 그 특징에 따라 직접 플래시 메모리에 저장되게 한다. 그러나, 몇몇 데이터들은 버퍼 메타블록들(3430)에 저장되고 나중에 그 특징에 따라 플래시 메모리에 저장되도록 카피되어(3432), 고속 동작을 가능하게 한다. 따라서, 버퍼 메타블록들의 목적은 RAM 또는 도해(A 및 B)의 중간 메타그룹의 목적과 다르며 저장되고 있는 많은 데이터가 할당된 메타블록들에 직접 기록된다.
데이터는 호스트에 의해 할당된 논리적으로 인접 섹터 세트인 데이터 런들에서 업데이트 될 수 있으며, 그것은 할당 바로 전에 자유로우며 할당된 섹터들 사이에 확장된다. 따라서, 데이터 런은 호스트가 데이터를 논리 어드레스 공간의 할당된 부분들에 의해 경계지어지는 자유 논리 어드레스 공간의 순차적인 부분에 할당하는 경우 형성된다. 일부 시스템들에서, 데이터 런들은 메타그룹 구조로 정렬되지 않으며, 이는 데이터 업데이트 동안 비효율성을 야기할 수 있다. 본문에 설명된 특정 시스템에서는, 데이터 런이 메타그룹들의 크기와 경계 위치들을 (따라서 해당하는 적응형 메타블록의 크기를) 데이터에 맞춤으로써 메타그룹에 더 좋게 정렬된다. 특히, 최소 크기의 메타그룹들은 논리 경계들을 포함하는 데이터의 일부들을 저장하는데 사용될 수 있다. 데이터 런의 위치들은 메모리 제어부에 의해 결정될 수 있다. 데이터 런의 시작에서의 데이터 런 경계는 데이터가 수신된 최종 데이터에 순차적이지 않은 호스트로부터 데이터가 수신될 때 식별될 수 있다. 또한, 데이터 런의 종단에서의 데이터 런 경계는 논리 어드레스에서의 점프에 의해 식별될 수 있다. 이러한 점프 이전의 최종 섹터는 데이터 런의 최종 섹터일 수 있다. 그러나, 호스트로부터 수신된 섹터들에서의 논리 어드레스 점프는 FAT와 같은 시스템 정보를 업데이트하거나 다른 데이터 런들에 기록들을 인터리빙하는 경우는 예외일 수 있다. 호스트는 하나 이상의 데이터 런을 인터리빙 방법에 의해 일부 시스템에 기록할 수 있다. 컨트롤러는 이러한 상황을 처리하기 위해 멀티 개방 데이터 런들을 유지할 수 있으므로, 개방 데이터 런에 순차적인 데이터를 수신했을 경우, 그 데이터 런의 일부로서 처리될 수 있다. 개방 데이터 런에 순차적이지 않다면, 새로운 데이터 런의 시작으로 간주될 수 있을 것이다. 데이터 런의 수가 한계에 다다르거나 호스트로부터의 신호에 응답하여, 소정 기간 후 개방 데이터 런이 컨트롤러에 의해 폐쇄될 수 있다.
도 35A는 비-정렬(non-alignment)(N)로 저장된 데이터 런(3530)을 나타낸다. 이것은 논리 경계들의 위치와 무관하게 저장된 데이터 런이다. 메타그룹 구조는 모든 최대 크기의 메타그룹들을 나타낸다. 도 35B는 부분정렬(P)로 저장된 데이터 런(3532)을 보여준다. 최소 크기의 메타그룹(3534)(하나의 논리 그룹)은 데이터 런(3532)의 시작에서 데이터 런 경계를 저장하기 위해 사용된다. 데이터 런(3532)의 나머지는 최대 크기의 메타그룹들(3536,3538)에 저장되어, 데이터 런의 종단이 최대 크기의 메타그룹(3538)에서 발생시킨다. 따라서, 각 종단에서의 데이터 경계를 가진 데이터 런에 대해, 단지 하나의 데이터 경계가 최소 크기의 메타그룹에 할당된다.
도 35C는 전체 정렬(F)로 저장된 데이터 런(3540)을 보여준다. 데이터 런(3540)의 양끝에서의 데이터 런 경계들은 최소 크기의 할당된 메타그룹들(3542, 3548)이다. 최대 크기의 메타그룹들은 높은 병렬 처리를 위한 곳(예를 들어, 메타그룹(3544))에서 사용된다. 그러나, 이 예에서 감소된 크기의 메타그룹(3546)은 끝에서 두 번째(penultimate)의 메타그룹을 위해 사용된다.
일반적으로, 최소 크기의 메타그룹이 데이터 런의 각 종단에 할당된 경우, 이러한 메타그룹들의 사이에서 데이터 런의 일부는 최대 크기의 메타그룹을 정수로 형성하지 못한다. 따라서, 데이터 런의 중간 부분으로부터 적어도 하나의 메타그룹은 최대 크기보다 작다. 도 35C에 도시된 예에서, 끝에서 두 번째의 메타그룹(3546)은 감소된 크기의 메타그룹(혹은 패드(pad) 메타그룹)이다. 그러나, 패드 메타그룹은 어떤 특정 위치에 있을 필요가 없다. 도 35D는 다른 크기들의 적응형 메타블록들에 맵핑된 데이터 런을 가지는 데이터 런 구조를 나타낸다. 최소 크기의 헤드블록(head block)(3550) 및 테일블록(tail block)(3556)은 데이터 런 경계들을 포함하는 논리 그룹을 위해 사용된다. 데이터 런 경계들을 포함하는 논리 그룹들(3550 및 3556) 사이에서, 데이터는 가능한 한 최대 크기의 적응형 메타블록들(예를 들어, 메타블록(3552))에 맵핑된다. 다른 예들로서, 다중 전체 블록들은 데이터 런으로 사용된다. 나머지 데이터들은 감소된 크기의 적응형 메타블록인, 패드블록(3554)에 저장된다.
도 35E는 8개의 논리 그룹들의 최대 메타그룹 크기를 가지는 메모리에서 전체 정렬로 저장된 다른 길이의 데이터 런들을 나타낸다. 데이터 런 경계들이 단일 논리그룹에서 발생하는 경우, 이러한 논리그룹은 최소 크기의 메타그룹(3558)을 형성하고 헤드 메타그룹으로 간주된다. 데이터 런이 두 개의 논리 그룹들로 확장되는 경우, 각 논리 그룹은 최소 크기의 메타그룹(3560, 3562)을 형성하고 각각 헤드 및 테일 메타그룹으로 간주된다. 데이터 런이 세 개의 논리그룹으로 확장되는 경우, 중간 논리그룹(3564)은 최소 크기의 메타그룹을 형성하고 패드 메타그룹으로 간주된다. 3 내지 9 사이의 논리 그룹들로 확장되는 데이터 런들에 대하여, 헤드 및 테일 메타그룹들은 데이터 런의 크기에 따라 크기가 증가된 패드 메타그룹과 동일하 게 된다.
데이터 런이 10개의 논리그룹으로 확장된 경우, 전체 메타그룹(3566)이 헤드 및 테일 메타그룹들 사이에서 형성될 수 있다. 따라서, 패드 메타그룹은 필요하지 않을 수 있다. 10개의 논리그룹보다 많은 데이터 런인 경우, 전체 메타그룹 및 패드 메타그룹이 형성될 수 있다. 데이터 런이 18개의 논리그룹들보다 많은 경우, 두 개의 전체 메타그룹이 형성될 수 있다. 아주 큰 데이터 런에 대하여, 다중 전체 메타그룹들은 필요시 적절한 크기의 패드 메타그룹과 함께 형성될 수 있다.
데이터가 호스트에 의해 업데이트될 때, 데이터는 일반적으로 데이터 런 경계들 사이에서 확장된 데이터 런에서 수신된다. 이러한 데이터 런 경계 위치는 미리 식별되어 데이터를 저장하기 위해 사용되는 위치들과 동일할 수 있다. 따라서, 데이터 런이 업데이트 데이터의 데이터 런 경계들에 정렬되는 방법으로 이미 저장된 데이터를 업데이트 할 수 있다. 예를 들어, 데이터 런이 똑같은 논리 어드레스 범위 이상으로 확장된 데이터 런에 의해 미리 업데이트 되어진 데이터를 업데이트 하는 경우, 데이터는 동일한 논리 경계들에 정렬될 수 있다. 저장된 데이터가 동일한 데이터 경계들에 전체 정렬되어 저장되었다면, 데이터를 업데이트하는 것은 전체에서 전체(full-to-full)로 변환되는 것을 포함한다. 저장된 데이터가 부분 정렬로 저장되었다면 업데이트하는 것은 부분에서 전체(partial-to-full)로 혹은 부분에서 부분(partial-to-partial)으로 포함할 수 있다. 저장된 데이터가 비-정렬로 저장되었다면, 업데이트하는 것은 무에서 전체(non-to-full), 무에서 부분(non-to-partial) 혹은 무에서 무(non-to-non)로의 변환을 포함한다. 도 36은 데이터를 업데이트하는 동안 발생할 수 있는 변환의 일부를 나타낸다. 전체에서 무로와 같은 특정한 다른 변환들이 가능한 반면, 이 변환들은 바람직하지 않으며 도 36에서는 도시되지 않았다.
도 37은 데이터 런(3770)이 호스트로부터 수신되었을 때 전체에서 전체로의 변환(F2F)의 예를 보여준다. 데이터 런(3770)은 논리상 순차적인 섹터들의 데이터의 스트림의 형태로 수신될 수 있다. 덧붙여, 호스트는 데이터 런의 시작과 종단에서 데이터 경계의 위치를 포함하는 데이터 경계 위치 정보를 전송할 수 있다. 데이터 런의 시작(3772) 위치는 데이터 런(3770)에서 수신된 제1섹터의 어드레스로부터 결정되어질 수 있고 사전에 공지될 필요가 없는 반면, 데이터 런의 종단(3774) 위치는 이 예에서 전체 정렬을 허용하기 위해 데이터 런(3770)의 최종 섹터가 수신되기 전에 공지된다. 다른 예로서, 데이터 런의 종단 위치는 특히 공지되지 않을 수 있으나, 그 위치는 이전 데이터 런의 종단 위치로부터 예측될 수 있다. 이러한 데이터 경계 위치들은 리스트에서 호스트에 의해 기록 될 수 있다. 호스트로부터의 데이터 런(3770)의 데이터 런 경계들은 전체 정렬로 저장된 이전에 수신된 데이터 런의 데이터 런 경계들과 동일다. 따라서, 업데이트된 메타그룹들은 오리지널 메타그룹들과 동일한 크기를 갖도록 할당될 수 있다. 데이터 런(3770)의 데이터(A 및 D)의 일부들은 데이터 그룹 경계를 포함하는 논리 그룹들에 있으므로 최소 크기의 메타그룹들에 저장된다.
따라서, 이들은 직렬 플래시 버퍼(A->K, D->L)에 초기에 저장된다 .버퍼들(K 및 L)에서의 데이터는 나중에 헤드 메타그룹(3776) 및 테일 메타그룹(3778)(K->F, L->I)에 오리지널 데이터 (P->E, Q->J)와 함께 카피된다. 헤드 및 테일 메타그룹들(3776 및 3778)은 메모리 어레이에 최소 크기의 메타블록들로 저장된다. 데이터 런의 일부(B)는 최대 크기의 메타그룹(G)을 형성하므로 직렬 플래시 버퍼에 저장되지 않고 직접 최대 크기의 할당된 메타블록에 저장된다. 데이터 런(3770)의 일부(C)는 최대 크기보다 작은 메타그룹(H)을 형성한다. 메타그룹(H)은 플래시 메모리의 할당된 적응형 메타블록에 직접 기록된다.
특정 예들로서, 부분(C)과 같은 데이터의 일부는 할당된 적응형 메타블록에 저장되기 전에 직렬 플래시 버퍼에 저장된다. 그러나, 부분(C)의 크기에 따라, 플래시 메모리에 직접 기록하는 것이 더욱 효율적일 수 있다. 예를 들어, 부분(C)이 전체 메타그룹의 데이터 양과 근접한 데이터 양으로 이루어졌을 경우, 직렬 버퍼에 기록하기보다 플래시에 직접 기록한 후 정렬된 포맷에서 플래시에 카피하는 것이 보다 효율적일 수 있다. 일반적으로, 직렬버퍼에서 데이터 버퍼링으로부터 얻는 효율성 이득(gain)은 작은 양의 데이터에 대해서 최대이고, 많은 양의 데이터에 대해서는 최소이다. 데이터를 버퍼링할지에 대한 결정은 부분 데이터의 크기에 기초한다. 데이터의 전체 메타그룹들은 최대 크기의 메타블록들에 직접 기록될 수 있고, 한 개의 논리그룹 이하를 가지는 데이터는 직렬버퍼에 기록될 수 있으며, 한 개의 논리그룹과 한 개의 전체 메타그룹 사이의 데이터는 임계크기(threshold size)보다 작을 경우 버퍼링될 수 있다. 예를 들어, 임계값은 전체 메타그룹의 논리그룹 수의 절반이거나, 전체 메타그룹에서 논리그룹 수의 절반에서 2를 뺀것이다 (N/2-2, 여기서 N은 전체 메타그룹에서 논리그룹의 수이다). N/2-2는 효율적인 동작을 가능케 하고 수렴의 직렬 플래시 버퍼를 가지도록 계산된 임계값이다. 따라서, 16개의 논리그룹들이 메타그룹에 있다면, 논리그룹을 6개 이하로 포함하고 있는 일부 데이터는 직렬 버퍼에서 버퍼링될 수 있지만, 6개 이상의 논리그룹을 포함하는 데이터의 일부는 플래시에 직접 기록될 수 있다.
도 38은 부분정렬에서 전체정렬로의 변환(P2F)의 일례를 보여준다. 이 실시예에서, 데이터 런(3880)은 호스트로부터 수신되어 전체정렬로 저장된다. 최소 크기의 헤드 메타그룹(3882) 및 테일 메타그룹(3884)이 할당된다. 데이터 런(3880)에 의해 업데이트된 데이터들은 데이터 런의 데이터 경계들에 부분적으로 정렬되는 방법으로 미리 저장되었다.
따라서, 최소 크기의 오리지널 메타그룹(3886)은 헤드 메타그룹과 동일한 논리 어드레스 공간을 위해 존재한다. 그러나, 데이터 런의 테일에 대응하는 오리지널 최소 크기의 메타그룹은 없다. 데이터 런의 시작에서의 데이터는 도 37에 도시된 것과 유사하게 다루어진다. 데이터(A)는 직렬 플래시 버퍼 (A->K)에 저장된다. 이어서, 버퍼(K)의 데이터는 오리지널 메타그룹으로부터 카피된 버퍼(E)의 데이터(P->E)와 함께, 최소 크기의 업데이트된 메타그룹(3882)(K-F)에 카피된다. 데이터(B 및 C)는 미리 메타그룹(G 및 H)에 프로그램된다. 메타그룹(G)은 최대 크기의 업데이트된 메타블록에 직접 프로그램될 수 있는 최대 크기의 메타그룹으로 도시된다. 메타그룹(H)은 최대 크기 이하의 것이고 업데이트된 메타블록에 직접 프로그램되거나 메타그룹(H)의 크기에 따라 직렬 플래시 버퍼에 우선 저장될 수 있다. 본 실시예에서, 메타그룹(H)은 업데이트된 메타그룹에 직접 저장된다. 긴 데이터 런이 수신되었을 경우, 최대 크기의 부가 메타그룹이 사용될 수 있다.
데이터 런(3880)의 종단에서 데이터(D)는 직렬 플래시 버퍼(D->L)에 카피되고 이어 오리지널 메타그룹(Q->J)으로부터 카피된 데이터(J)와 함께 테일 메타그룹(3884)에 카피된다. 데이터(J)는 최소 크기보다 큰 메타그룹(3888)으로부터 카피된다(이 경우 최대 크기의 메타그룹). 메타그룹(3888)은 데이터 런에 의해 업데이트되지 않은 데이터들만 포함하는 논리그룹(R)을 포함한다. 논리그룹(R)은 재위치 메타그룹(R->T)으로 재위치된다. 다른 예들에서, 재위치 메타그룹은 다중 논리그룹들을 포함할 수 있다. 이러한 오리지널 메타그룹으로부터 재위치 메타그룹으로의 오리지널 데이터의 카피는 최대의 효율을 위해 다른 프로그래밍 동작들과 병렬로 행해질 수 있다. 도 37과 38에서 보여질 수 있듯이, 부분에서 전체로의 변환은 전체에서 전체로의 변환(예를 들어, 오리지널 데이터(R)를 재위치 메타블록(T)으로 카피하는 것)이 포함하는 것보다 더 많은 데이터의 카피를 포함한다.
도 39는 호스트로부터 수신된 데이터 런(3990)을 대하여 부분정렬에서 부분정렬로의 변환(P2P)의 예를 도시한 것이다. 이러한 변환은 데이터 런의 시작에서의 데이터에 대해 상기에 설명한 것과 유사하다. 데이터 런(3990)의 시작에서 데이터(A)는 직렬 플래시 버퍼(A->K)에 저장되고, 나중에 오리지널 메타그룹(3994)(P->E)로부터 카피된 데이터 E와 함께 최소 크기의 업데이트된 메타그룹(3992)(K->F)에 카피된다. 데이터(B)는 최대 크기의 메타그룹(B->G)에 프로그램된다. 데이터 런 경계까지 연장되어 최대 크기의 메타그룹보다 적은 데이터(D)는 최대 크기의 업데이트된 메타그룹(3996)(D->I)에 기록된다.
오리지널 메타그룹으로부터의 데이터(Q)는 동일한 최대 크기의 업데이트 메타그룹(3996)(Q->J)에 카피된다. 따라서, 정렬은 최소 크기의 적응형 메타그룹(3992)에 맵핑되는 시작 데이터 런 경계와 함께 이러한 변환 동안 동일하게 남아 있고, 남은 데이터는 최대 크기의 적응형 메타그룹에 맵핑된다.
도 40은 비-정렬에서 전체정렬로의 변환(N2F)의 일례를 보여준다. 호스트로부터의 데이터 런(4002)은 수신되어 정렬없이(비-정렬) 데이터 런 경계들에 저장된 오리지널 데이터를 업데이트 하는데 사용된다. 본 예에서, 오리지널 데이터는 최대 크기의 메타블록들에 저장된다. 반대로, 업데이트된 메타그룹들은 데이터 런(4002)의 시작과 종단에서 데이터 경계를 위한 최소 크기의 헤드 메타그룹(4004) 및 테일메타그룹(4006)을 포함한다. 데이터 런(4002)의 시작 부분 논리그룹으로부터의 데이터(A)는 직렬버퍼(A->K)에 버퍼링된다. 마찬가지로, 데이터 런의 최종 부분 논리그룹의 데이터(D)는 직렬버퍼(D->L)로 버퍼링된다. 이는 데이터 런(4002)의 종단에서 데이터 런 경계의 위치에 따라 호스트에 의해 제공된 정보에 응답할 수 있다. 데이터(B)는 최대 크기의 메타그룹(B->G)으로 저장된다. 큰 데이터 런인 경우, 부가 데이터는 최대 크기의 메타그룹들로서 저장될 수 있다. 메타그룹(G)은 최대 크기의 메타블록에 저장된다. 헤드, 테일 혹은 최대 크기의 메타그룹들 중 어느 것에도 할당되지 않은 나머지 데이터(C)는 패드 메타그룹(C->H)에 할당된다. 다른 예들에서는 우선 직렬버퍼에 저장되었다가 최대 크기보다 작은 메타블록에 저장됨에도 불구하고, 본 예에서는 메타그룹(H)가 최대 크기보다 작은 메타 블록에 직접 저장된다. 본 예에서, C는 테일 패드 데이터로 간주되고, H는 테일 패드 블록으로 간주된다. 업데이트 되지 않은 오리지널 메타그룹들(O, P, Q, R)의 데이터는 재위치 메타그룹들(O->S, R->T)이나 헤드와 테일 메타그룹들(P->E, Q->J) 중 하나에 카피된다. 이러한 데이터의 일부를 카피하는 것은 가능하면 병렬로 실행된다. 예를 들어, 부분들(O 및 R)을 재위치된 메타그룹들(S 및 T)로 카피하는 것은 O와 R이 함께 동일한 최대 크기의 메타그룹 이하와 동등한 데이터로 이루어지는 경우 병렬로 실행될 수 있다. 부분들(P 및 Q)의 카피는 다른 오리지널 메타그룹들 혹은 직렬 버퍼로부터의 다른 카피 동작과 병렬로 실행될 수 있다. 데이터 일부(C)가 짧을 경우, 데이터 일부(C)는 버퍼링되어 업데이트된 메타그룹에 데이터 일부들(E, F, I 및 J)을 프로그래밍하는 것처럼 다른 프로그래밍 동작과 병렬로 카피되어질 수 있다.
도 41은 비-정렬에서 부분정렬로의 변환(N2P)의 일례를 보여준다. 오리지널 메타그룹들은 데이터 런(4110)의 데이터 런 경계들에 정렬되지 않는다. 본 실시예에서, 오리지널 메타그룹들은 비-정렬을 위해 필수는 아니지만 최대 크기의 메타그룹이다. 업데이트된 메타그룹들은 데이터 런 및 부분정렬을 가지고 형성된다. 최소 크기의 업데이트된 메타그룹(4112)은 도 40에서와 같이 데이터 런(4110)의 시작에서의 데이터 경계를 위해 할당된다. 나머지 메타그룹들은 최대 크기의 메타그룹들이고 데이터 런(4110)의 종단에서의 데이터 런 경계는 최소 크기의 메타그룹에 할당되지 않는다. 대신, 본 실시예에서, 데이터 런(4110)의 종단에서의 데이터 런 경계는 최대 크기의 메타그룹(4114)에 할당된다. 오리지널 메타그룹들은 업데이트된 메타그룹들(P->E, Q->J) 혹은 재위치된 메타그룹(O->S, R->T)에 카피된 오리지널 데이터(O, P, Q 및 R)를 포함한다.
도 42는 비-정렬에서 부분정렬로의 변환(N2P)의 다른 예를 보여준다. 오리지널 메타그룹들은 다시 최대 크기의 메타블록들이다. 도 42는 오리지널 메타블록들 (비-정렬)에 대응하지 않는 데이터 런 경계들을 가지는 호스트로부터의 데이터 런(4220)을 나타낸다. 업데이트된 메타블록들은 데이터 경계들에 부분정렬된 데이터 런에 데이터를 저장하기 위해 형성된다. 본 실시예에서, 업데이트된 최소 크기의 메타그룹(4222)은 데이터 런(4220)의 시작에서 데이터 런 경계에 할당된다. 다른 업데이트된 메타그룹들의 메타그룹 경계들은 오리지널 메타그룹들의 메타그룹 경계들과 동일한 자리에 위치하고 있다. 본 실시예에서, 최대 크기보다 작은 메타그룹(G)은 헤드 메타그룹 및 그 다음 메타그룹 경계 사이에서 사용된다. 이것은 헤드 패드 메타그룹으로 간주될 수 있고, 이에 저장된 데이터는 헤드 패드 데이터로 간주될 수 있다. 헤드 패드 메타그룹은 헤드 패드 메타블록에 직접 또는 직렬버퍼에 버퍼링된 후에 저장될 수 있다. 헤드 패드 메타그룹을 직접 저장할지 또는 이를 버퍼링 할지에 대한 결정은 임의의 임계값(테일 패드 데이터에 관하여 상기 언급된 바와 같은) 보다 큰지 작은지에 기초한다. 상기와 같이, 오리지널 데이터는 요청에 따라 재위치된 메타그룹(O->S)에 카피되거나 혹은 업데이트된 메타그룹(Q->J)에 카피된다.
도 43은 비-정렬에서 비-정렬로의 변환(N2N)의 일례를 보여준다. 본 실시예에서, 데이터 런(4330)은 데이터 런의 경계들에 아무 정렬도 되지 않은 오리지널 메타그룹들에 저장된 데이터를 업데이트하는 호스트로부터 수신된다. 또한, 업데이트된 데이터는 데이터 런의 경계들에 아무 정렬도 없는 업데이트된 메타그룹들에 저장된다. 본 예에서, 오리지널 메타그룹들과 업데이트된 메타그룹 둘 모두는 오직 최대 크기의 메타그룹들만 포함한다. 이러한 구성은 적응형 메타블록들을 사용하지 않는 시스템(메타블록의 크기가 고정된 시스템)에서 사용될 수 있다. 여기서, 직렬 플래시 버퍼는 사용하지 않는다. 오리지널 데이터(P, Q)는 업데이트된 메타블록들(P->E, Q->J)에 카피된다 . 따라서, 많은 양의 오리지널 데이터들은 업데이트된 메타그룹들에 저장되고, 이어지는 데이터 런들이 동일한 데이터 런 경계 위치들로 수신되면 이 데이터는 다시 카피될 것이다.
데이터 런 업데이트 관리
파일은 호스트 시스템에서 생성되거나, 논리 섹터 어드레스들로 호스트 시스템 내에서 맵핑된 외부소스로부터의 호스트 시스템에 의해 수신된 데이터의 집합이다. 인접하는 논리 섹터 어드레스들의 집합을 데이터 런이라 불리운다. 데이터 런은 하나 이상의 파일 혹은 파일 일부의 저장을 위한 호스트에 의해 할당된 논리적으로 인접하는 섹터들의 집합으로 간주될 수 있다. 여기서 데이터 런은 논리 어드레스 공간의 미리 할당된 부분들 사이에서 확장된다. 호스트는 기록 동작들을 다른 데이터 런들에 인터리빙할 수 있다. 일반적으로, 제한된 수의 개방 데이터 런은 데이터 런이 요청에 따라 개방되고 폐쇄되도록 언제든지 허용된다. 데이터 런 내의 섹터는 개방 버퍼에 기록되거나 데이터 런과 관련된 업데이트 블록에 기록될 수 있다.
데이터 런들로부터의 데이터의 수신과 저장은 데이터 런의 관리와 데이터를 저장하기 위해 사용하는 메모리 구조(버퍼와 업데이트 메타블록을 포함하는)를 포함한다. 도 44는 이러한 구조들의 일부와 이에 행해지는 동작들을 나타낸다.
데이터 런을 개방하는 것은 현재의 데이터 런에서 최종 섹터에 순차적이지 않고 현재 데이터 런에서 최종 섹터로부터 허용된 순차 어드레스 점프의 범위 내에 있지 않은 섹터가 수신되었을 때 일어날 수 있다. 데이터 런은 적어도 최근 업데이트(LRU) 데이터 런인 경우 폐쇄될 수 있고, 허용된 최대수의 데이터 런이 존재하며, 새로운 데이터 런이 개방된다. 또한, 데이터 런내의 섹터가 업데이트되는데 이 업데이트가 카오틱(chaotic)하다고 간주될 때 폐쇄될 수 있다. 이러한 카오틱 업데이트들은 일반적으로 미국 특허 출원 10/750,155에 공개된 것과 같은 다른 방법들을 통해서 다루어진다.
버퍼는 데이터 런으로부터 순차적인 데이터를 기록하기 위한 직렬 플래시 버퍼의 일부일 수 있다. 버퍼는 직렬 플래시 버퍼에 물리적으로 인접할 필요는 없다. 다중 버퍼들에 인터리빙된 기록을 하는 것은 비-인접 버퍼들을 가짐으로써 용이해질 수 있다. 버퍼는 데이터 런의 첫 번째 논리그룹이 미완료라면 데이터 런이 개방되었을 때 개방될 수 있다. 또한, 버퍼는 데이터 런의 최종 논리 그룹을 위해 첫 번째 섹터가 수신되었을 때 개방될 수 있다. 또한, 버퍼는 패드 데이터가 소정의 양보다 적은 경우 패드 데이터(헤드 혹은 테일 패드 중 하나)를 위하여 개방될 수 있다. 버퍼는 이에 기록될 데이터가 완료되었을 때 폐쇄될 수 있다. 폐쇄 버퍼는 업데이트 블록에 이의 모든 데이터들을 기록함으로써 카피된다. 카피는 버퍼가 직렬 플래시 버퍼의 종단에서 다음의 유용한 버퍼들 중에 하나일 때 일어난다. 일반적으로, 이러한 카피는 다른 버퍼들 혹은 오리지널 데이터를 위한 다른 카피와 함께 병렬로 일어난다.
업데이트 메타블록은 호스트로부터 혹은 버퍼로부터의 업데이트된 데이터가 기록되는 적응형 메타블록이다. 업데이트 메타블록은 버퍼에 송신되지 않으며 미완료 업데이트 메타블록이 없는 데이터가 수신 되었을 때 할당될 수 있다. 또한, 업데이트 메타블록은 데이터가 버퍼로부터 카피되었을 때 할당될 수 있다. 업데이트 메타블록의 크기는 저장될 데이터의 양에 따른다. 업데이트 메타블록들은 최소 크기의 메타블록들이거나, 감소된 크기의 메타블록들이거나, 최대 크기의 메타블록들일 수 있다. 예를 들어, 최소 크기의 메타블록은 데이터 런의 시작(헤드)과 종단(테일)을 위해 사용될 수 있고, 감소된 크기의 메타블록은 패드 데이터 (헤드패드 혹은 테일 패드)를 위해 사용될 수 있으며, 최대 크기의 메타블록은 데이터 런의 모든 다른 데이터를 위해 사용될 수 있다. 업데이트 블록은 최종 섹터가 호스트, 버퍼 혹은 오리지널 블록의 하나로부터의 데이터로 채워졌을 때 완료된다고 간주될 수 있다. 따라서, 완료는 버퍼로부터의 카피 동작의 결과나 오리지널 블록으로부터의 카피의 결과로서 나타날 수 있고, 이는 데이터 런의 폐쇄에 의해 시작된다.
오리지널 메타블록은 호스트로부터의 업데이트된 섹터들에 의해 폐기되어진 하나 이상의 섹터들을 포함하는 적응형 메타블록일 수 있다. 메타블록은 그 내부의 섹터가 업데이트된 데이터의 섹터의 수신에 의해 폐기되었을 때 개방 오리지널 메타블록으로 간주할 수 있다. 오리지널 메타블록은 호스트에 의해 임의의 개방 데이터 런에 기록함으로써 더 이상 섹터가 폐기되어지지 않을 때 완료되었다고 간주할 수 있다.
데이터는 완료된 오리지널 메타블록으로부터 재위치 메타블록에 카피될 수 있다. 완료된 오리지널 메타블록은 그의 모든 유효한 섹터들이 카피되었을 때 완전히 폐기된 오리지널 메타블록으로 간주될 수 있다. 완전히 폐기된 오리지널 메타블록은 소거될 수 있다.
재위치 메타블록은 데이터의 순차적인 논리 그룹이 오리지널 메타블록으로부터 카피되는 적응형 메타블록이다. 재위치 메타블록은 데이터가 오리지널 메타블록으로부터 카피될 것이고 헤드 혹은 테일 메타블록의 부분이 아닐 때 할당될 수 있다. 재위치 메타블록은 그의 최종 섹터 위치가 기록되었을 때 완료되었다고 간주된다. 재위치 메타블록들은 최소 크기 혹은 감소된 크기의 메타블록들일 수 있다.
도 45는 본 발명의 실시예에 따른 데이터 경계 정렬과 함께 호스트로부터 수신된 섹터를 저장하기 위한 순서도이다. 이러한 예가 저장되는 데이터의 섹터를 보여주는 동안 데이터의 다른 부분도 또한 사용된다. 초기에, 결정은 섹터들의 저장이 개방 데이터 런(4550)에 대한 카오틱 업데이트를 포함하는지에 대해 이루어진다. 무질서한 업데이트는 섹터들이 비순차적으로 업데이트 되는 것이고, 여기서 있는 그대로 참조될 출원번호 10/750,155에 상술된다. 개방 데이터 런에 대한 카오틱 업데이트는 데이터 경계 정렬로 저장하기 위한 대안으로써 수행될 수 있다. 따라서, 카오틱 업데이트들은 여기서 상술하지 않는다. 섹터들이 카오틱 업데이트를 요청하지 않는다고 결정되면, 수신된 섹터들이 개방 데이터 런에 순차적인지 아닌지에 대해 결정된다(4552).
수신된 섹터들이 개방 데이터 런에 순차적이지 않고, 개방 데이터 런들의 수가 소정의 최대치(4554)보다 작은 경우, 새로운 데이터 런이 개방된다(4556). 만일 개방 데이터 런들의 수가 상기 소정의 최대치보다 작지 않으면, 데이터 런이 새로운 데이터 런(4556)을 개방하기 전에 폐쇄되어야만(후술된 것처럼) 한다(4558). 새로운 데이터 런이 개방된 후에, 논리 그룹 경계로부터 데이터 런의 시작으로의 오프셋이 있다고 결정된다(4560). 오프셋이 없다면, 버퍼는 버퍼의 크기가 헤드 데이터와 같도록, 즉, 첫 번째 논리그룹에 있는 데이터 런의 일부와 같도록 개방된다(4562). 섹터들은 버퍼의 종단에 도달하여 버퍼가 폐쇄될때까지 이러한 버퍼에 순차적으로 기록된다.
수신된 섹터들이 개방 데이터 런에 순차적이고 개방 버퍼가 데이터 런을 위해 존재할 때(4564), 섹터들은 버퍼에 기록된다(4566). 만일 데이터 런을 위한 개방 버퍼가 없고(4564) 데이터 런을 위한 미완료의 메타블록이 존재하는 경우(4568), 섹터들은 후술하는 바와 같이 미완료의 메타블록들에 기록된다(4570). 데이터 런을 위한 개방 버퍼도 없고 미완료의 메타블록도 없을 경우, 수신된 섹터들은 헤드 패드 데이터라고 결정된다(4572). 또한, 논리 그룹 경계로부터 새로운 데이터 런이 오프셋 없이 개방되었을 경우, 이러한 결정이 이루어진다. 섹터들이 헤드 패드 데이터일 경우, 데이터의 양(섹터들의 수)은 버퍼링을 위한 최대 패드 길이인 소정의 값(최대패드, maxpad)과 비교된다. 섹터들의 수가 최대패드보다 크지 않을 경우, 헤드 패드 데이터와 같은 크기의 버퍼가 개방된다(4576). 만일 섹터의 수가 최대패드보다 크면, 감소된 메타블록이 할당되고(4578), 이어서 섹터들은 이러한 감소된 메타블록에 기록된다(4570).
섹터들이 헤드 패드 데이터가 아니라고 결정되면(4572), 그 다음엔 섹터들이 테일 패드인지 테일 데이터인지를 결정한다(4580). 그들이 테일 패드 혹은 테일 데이터가 아닌 경우, 최대 크기의 메타블록이 할당되어(4582), 섹터들이 최대 크기의 메타블록에 기록된다(4570). 이것은 헤드도 아니고 테일 데이터도 아닌 데이터를 위한 기본 조건의 정렬이다. 따라서, 데이터 런 중간의 데이터는 일반적으로 최대 병렬 처리를 사용하기 위한 최대 크기의 메타블록에 기록된다. 섹터가 테일 패드 혹은 테일 데이터를 포함한다면, 섹터가 (데이터 런의 최종 논리 그룹으로부터) 테일 데이터인지 결정한다(4584). 그들이 최종 논리그룹으로부터의 것이라면, 테일 데이터와 같은 크기의 (최종 논리그룹의 데이터 런으로부터의 데이터와 같은) 버퍼가 개방된다(4586). 이어서, 섹터들은 버퍼에 기록된다(4566). 섹터들이 마지막 논리그룹의 것이 아니라면, 섹터들은 테일 패드 데이터이고, 테일 패드 길이가 소정의 크기(최대패드) 보다 큰지를 결정한다(4588). 섹터의 수가 최대패드보다 크면, 감소된 크기의 메타블록은 할당되어(4578), 섹터들이 메타블록에 기록된다(4570). 테일 패드가 최대패드보다 크지 않을 경우(4588), 테일 패드와 같은 크기의 버퍼가 개방된다(4590). 이어서, 섹터들은 이 버퍼에 기록된다(4566).
도 46은 하나 이상의 메타블록들에 섹터를 저장하기 위한 순서도를 보여준다. 본 출원의 이와 그리고 다른 순서도들에서, 논리 흐름은 상자 아래에 보여지는 긍정적인 결론과 상자의 옆에 보여지는 부정적인 결론을 가지는 결정상자와 함께 순서도의 아래쪽을 향하고 있다. 처음, 섹터들의 그룹을 저장하기 위해 할당된 메타블록이 감소되거나 최소 크기의 메타블록인지 우선 결정된다(4601). 감소되거나 최소 크기의 메타블록이 할당되지 않았을 경우(최대크기의 메타블록이 할당되었을 경우), 기록될 섹터들은 할당된 메타블록에 병렬로 기록된다(4603). 그리고 나서, 메타블록이 채워졌는지 아닌지에 대한 결정이 이루어진다(4605). 메타블록이 채워지면,“완료”라고 지정된다(4607). 그러면, 데이터 런 혹은 호스트에 의해 데이터 런에 기록된 여분의 데이터에 대응하는 데이터의 전체가 오리지널 메타블록에서 폐기되었는지가 결정되고(4609), 만일 그렇다면 오리지널 블록은 완료로 간주된다(4611). 감소된 혹은 최소 크기의 메타블록이 기록되고 있다면(4601), 현재 카피되고 있는 버퍼들이 없다면(4621), 카피되기에 유용한 폐쇄 버퍼들이 식별되고(4613), 이러한 버퍼들과 연관된 임의의 오리지널 데이터도 식별되어(4615), 하나 이상의 감소된 혹은 최소 크기의 메타블록들이 할당된다(4617). 오리지널 데이터가 현재 재위치되고 있지 않으면(4619), 완료된 오리지널 메타블록들로부터 재위치될 데이터는 식별되고(4621), 감소되거나 최소 크기의 메타블록이 할당된다(4623). 섹터들을 섹터들의 그룹에 할당된 메타블록들에 기록하는 것이 버퍼로부터 카피되거나 혹은 감소된 메타블록(들)에 재위치되는 섹터들을 기록하는 것은 상술한 바와 같이 병렬로 이루어진다.
도 47은 데이터 런을 폐쇄하는 순서도를 나타낸다. 최소 최근 사용 (LRU) 데이터 런은 우선 식별된다(4731). 이러한 데이터 런을 위한 어떤 개방 버퍼가 존재하는 경우(4733), 이는 폐쇄되고(4735), 데이터 런을 위한 어떤 미완료의 메타블록들이 존재하는 경우(4737), 데이터는 미완료의 메타블록들이 완료될 때까지(4741), 오리지널 메타블록들 혹은 버퍼들로부터 카피된다(4739). 어떠한 부분적으로 폐기된 오리지널 메타블록(완료의 오리지널 메타블록)이 존재하는 경우(4743), 감소된 크기의 메타블록들이 재위치된 메타블록으로서 할당되고(4745), 오리지널 블록이 완전히 폐기될 때까지(4749), 유효한 섹터들이 카피된다(4747). 그리고 나서, 데이터 런은 폐쇄되도록 지정된다(4751).
비록 본 발명이 다양한 바람직한 실시예들과 함께 서술되었을지라도, 본 발명은 첨부된 청구항의 최대 범위 내에서 권리를 보호받을 수 있음을 이해할 수 있을 것이다.

Claims (80)

  1. 삭제
  2. 삭제
  3. 삭제
  4. 삭제
  5. 삭제
  6. 삭제
  7. 삭제
  8. 삭제
  9. 삭제
  10. 삭제
  11. 삭제
  12. 삭제
  13. 삭제
  14. 삭제
  15. 개별적으로 프로그램가능한 플레인 내에 정렬된 제1 메모리 셀 어레이;
    개별적으로 소거될 수 있는 상기 어레이의 가장 작은 단위가 되는 소거 블록을 가지되, 다중 소거 블록을 가지는 플레인;
    저장된 데이터의 특성들에 따라 플레인의 수를 선택하기 위해 구비되는 시스템; 및
    선택된 플레인들 내의 개별적인 소거 블록들을 병렬로 프로그래밍하기 위해 구비되는 시스템;
    을 포함하는 비휘발성 메모리 시스템.
  16. 제15항에 있어서, 개별적인 플레인이 상기 개별적인 플레인 내에 남아있는 사용가능한 소거 블록의 수에 따라 선택되는 것을 특징으로 하는 비휘발성 메모리 시스템.
  17. 제15항에 있어서, 상기 비휘발성 메모리 시스템은 제2 메모리 셀 어레이를 더 포함하고, 상기 제1 메모리 셀 어레이는 플래시 메모리 내에 구비되고, 상기 제2 메모리 셀 어레이는 비휘발성 RAM 내에 구비되는 것을 특징으로 하는 비휘발성 메모리 시스템.
  18. 삭제
  19. 삭제
  20. 삭제
  21. 삭제
  22. 삭제
  23. 삭제
  24. 삭제
  25. 삭제
  26. 삭제
  27. 삭제
  28. 삭제
  29. 삭제
  30. 삭제
  31. 삭제
  32. 삭제
  33. 삭제
  34. 삭제
  35. 삭제
  36. 삭제
  37. 삭제
  38. 삭제
  39. 삭제
  40. 삭제
  41. 삭제
  42. 삭제
  43. 삭제
  44. 삭제
  45. 삭제
  46. 삭제
  47. 삭제
  48. 삭제
  49. 삭제
  50. 삭제
  51. 삭제
  52. 삭제
  53. 삭제
  54. 삭제
  55. 삭제
  56. 삭제
  57. 삭제
  58. 삭제
  59. 삭제
  60. 삭제
  61. 삭제
  62. 삭제
  63. 삭제
  64. 삭제
  65. 삭제
  66. 소거 블록의 소거의 최소단위 및 병렬로 프로그램되는 소거 블록들의 다른 수들을 가지는 적응형 메타블록들 내로 소거 블록들이 그룹핑되는 제1 부분을 가지는 비휘발성 메모리 어레이; 및
    메모리 카드에 의해 수신되는 데이터 부분이 데이터 부분이 논리적 여역을 포함하는지 여부에 의존하는 메모리 어레이의 제1 부분 또는 제2 부분에 최초로 전송되는 지의 여부를 결정하는 컨트롤러를 포함하고,
    상기 소거 블록들의 수는 저장되는 데이터에 논리 경계들의 위치에 따라 선택되고, 상기 메모리 어레이는 제2 부분을 가지며, 상기 제2 부분 내에서 데이터는 상기 메모리 어레이의 제2 부분 내에 저장되는 데이터에 데이터 경계들의 위치들에 의존하는 지의 여부에 따라 데이터가 메타블록들에 저장되는 것을 특징으로 하는 데이터 저장용 휴대용 메모리 카드.
  67. 제66항에 있어서, 상기 데이터 부분은 논리 경계를 포함하고, 상기 데이터 부분은 상기 메모리 어레이의 제2 부분에 전송되며, 상기 메모리 어레이의 제1 부분에 순차적으로 카피되는 것을 특징으로 하는 데이터 저장용 휴대용 메모리 카드.
  68. 제67항에 있어서, 상기 메모리 어레이의 제1 부분에의 카피는 상기 메모리 어레이의 제2 부분으로부터 상기 메모리 어레이의 제1 부분으로 부가적 데이터의 카피와 병렬로 이루어지는 것을 특징으로 하는 데이터 저장용 휴대용 메모리 카드.
  69. 제67항에 있어서, 상기 메모리 어레이의 제1 부분에의 카피는 상기 메모리 어레이의 제2 부분으로부터의 카피와 병렬로 수행되며, 카피 동작은 비휘발성 메모리의 병렬 동작을 이용하는 것을 특징으로 하는 데이터 저장용 휴대용 메모리 카드.
  70. 제66항에 있어서, 상기 데이터 부분은 논리 경계를 포함하고, 상기 메모리 어레이의 제2 부분에 최초로 전송되며, 상기 메모리 어레이의 제2 부분으로부터 상기 메모리 어레이의 제1 부분 내의 최소크기의 적응형 메타블록에 순차적으로 전송되는 것을 특징으로 하는 데이터 저장용 휴대용 메모리 카드.
  71. 제66항에 있어서, 상기 메모리 어레이의 제1 부분은 다수의 제1 소거 블록들로 구성되고, 상기 메모리 어레이의 제2 부분은 다수의 제2 소거 블록들로 구성하며, 상기 제1 및 제2 소거 블록들을 구성하는 소거 블록들은 서로 교체가능하여, 각각의 소거 블록은 제1 시간에 다수의 제1 소거 블록들 중 하나와 제2 시간에 다수의 제2 소거 블록들 중 하나가 되는 것을 특징으로 하는 데이터 저장용 휴대용 메모리 카드.
  72. 제66항에 있어서, 소거 블록들이 유효 데이터를 포함하지 않으며, 메타블록들로 그룹핑되지 않는 제3 부분을 더 포함하며, 상기 제3 부분 내의 각각의 소거 블록들은 데이터 저장을 위해 제1 및 제2 부분으로 전환되고, 상기 제1 및 제2 부분의 소거 블록들은 유효 데이터를 가지지 않을 경우 상기 제3 부분으로 전환되는 것을 특징으로 하는 데이터 저장용 휴대용 메모리 카드.
  73. 제66항에 있어서, 상기 제1 부분은 다수의 제1 전용 소거 블록들을 가지고, 다수의 상기 제1 소거 블록들의 각각은 데이터를 가지는 적응형 메타블록들을 형성하고, 다수의 상기 제1 소거 블록들의 부가적인 각각은 데이터를 포함하지 않으며, 적응형 메타블록들로 그룹핑되지 않는 것을 특징으로 하는 데이터 저장용 휴대용 메모리 카드.
  74. 제73항에 있어서, 상기 컨트롤러는 데이터를 저장하기 위한 새로운 적응형 메타블록들을 형성하기 위해 상기 제1 소거 블록들중 부가적인 다수로부터 소거 블록들을 선택하는 것을 특징으로 하는 데이터 저장용 휴대용 메모리 카드.
  75. 제66항에 있어서, 상기 제2 부분은 다수의 제2 전용 소거 블록들을 가지고, 다수의 상기 제2 소거 블록들의 각각은 데이터를 가지는 적응형 메타블록들을 형성하고, 다수의 상기 제2 소거 블록들의 부가적인 각각은 데이터를 포함하지 않으며, 메타블록들로 그룹핑되지 않는 것을 특징으로 하는 데이터 저장용 휴대용 메모리 카드.
  76. 제75항에 있어서, 상기 컨트롤러는 데이터를 저장하기 위한 새로운 적응형 메타블록들을 형성하기 위해 상기 제2 소거 블록들중 부가적인 다수로부터 소거 블록들을 선택하는 것을 특징으로 하는 데이터 저장용 휴대용 메모리 카드.
  77. 적응형 메타블록은 개별적으로 선택된 소거 블록들을 가지고, 소거 블록은 메모리 어레이의 소거의 최소 단위이며, 상기 메모리 어레이는 최대 크기의 하나 이상의 버퍼 메타블록들을 포함하는 직렬 플래시 버퍼를 포함하는 메모리 어레이의 적응형 메타블록들에 데이터를 저장하는 방법에 있어서,
    상기 직렬 플래시 버퍼의 버퍼 메타블록 내에 제1 논리 경계를 포함하는 제1 데이터를 저장하는 단계;
    상기 버퍼 메타블록으로부터 상기 직렬 플래시 버퍼 내에 있지 않은 제1 적응형 메타블록으로 상기 제1 데이터를 순차적으로 카피하며, 상기 제1 적응형 메타블록은 하나의 소거 블록을 구성하는 단계; 및
    상기 직렬 플래시 버퍼 내에 있지않은 제2 적응형 메타블록 내의 논리 경계를 포함하지 않는 제2 데이터를 저장하는 단계를 포함하는 메모리 어레이의 적응형 메타블록들에 데이터를 저장하는 방법.
  78. 제77항에 있어서, 상기 제2 적응형 메타블록은 최대 크기의 메타블록인 것을 특징으로 하는 메모리 어레이의 적응형 메타블록들에 데이터를 저장하는 방법.
  79. 제77항에 있어서, 상기 버퍼 메타블록으로부터 상기 제1 데이터의 카피는 상기 직렬 플래시 버퍼로부터 상기 직렬 플래시 버퍼 내에 있지 않은 상기 메모리 어레이 내의 위치들로의 부가적인 데이터를 카피하는 동작과 병렬로 수행되는 것을 특징으로 하는 메모리 어레이의 적응형 메타블록들에 데이터를 저장하는 방법.
  80. 제79항에 있어서, 상기 부가적인 데이터는 제2 논리 경계를 포함하는 제2 데이터를 포함하고, 제2 데이터는 하나의 소거 블록을 형성하는 제3 적응형 메타블록에 카피되는 것을 특징으로 하는 메모리 어레이의 적응형 메타블록들에 데이터를 저장하는 방법.
KR1020067013319A 2003-12-30 2004-12-22 데이터 런 프로그래밍 KR100983212B1 (ko)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
US10/749,189 US7433993B2 (en) 2003-12-30 2003-12-30 Adaptive metablocks
US10/749,189 2003-12-30
US10/841,118 US20050144363A1 (en) 2003-12-30 2004-05-07 Data boundary management
US10/841,118 2004-05-07
US11/016,271 US7383375B2 (en) 2003-12-30 2004-12-16 Data run programming
US11/016,271 2004-12-16

Publications (2)

Publication Number Publication Date
KR20070012630A KR20070012630A (ko) 2007-01-26
KR100983212B1 true KR100983212B1 (ko) 2010-09-20

Family

ID=34753551

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020067013319A KR100983212B1 (ko) 2003-12-30 2004-12-22 데이터 런 프로그래밍

Country Status (7)

Country Link
US (1) US7383375B2 (ko)
EP (2) EP1700204B1 (ko)
JP (2) JP4977473B2 (ko)
KR (1) KR100983212B1 (ko)
CN (1) CN100524209C (ko)
TW (1) TWI280581B (ko)
WO (1) WO2005066770A2 (ko)

Families Citing this family (266)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4175991B2 (ja) * 2003-10-15 2008-11-05 株式会社東芝 不揮発性半導体記憶装置
US7139864B2 (en) * 2003-12-30 2006-11-21 Sandisk Corporation Non-volatile memory and method with block management system
US7433993B2 (en) 2003-12-30 2008-10-07 San Disk Corportion Adaptive metablocks
US20060184719A1 (en) * 2005-02-16 2006-08-17 Sinclair Alan W Direct data file storage implementation techniques in flash memories
US20060184718A1 (en) * 2005-02-16 2006-08-17 Sinclair Alan W Direct file data programming and deletion in flash memories
US9104315B2 (en) 2005-02-04 2015-08-11 Sandisk Technologies Inc. Systems and methods for a mass data storage system having a file-based interface to a host and a non-file-based interface to secondary storage
US7877539B2 (en) 2005-02-16 2011-01-25 Sandisk Corporation Direct data file storage in flash memories
US7949845B2 (en) * 2005-08-03 2011-05-24 Sandisk Corporation Indexing of file data in reprogrammable non-volatile memories that directly store data files
US7558906B2 (en) 2005-08-03 2009-07-07 Sandisk Corporation Methods of managing blocks in nonvolatile memory
US7409489B2 (en) 2005-08-03 2008-08-05 Sandisk Corporation Scheduling of reclaim operations in non-volatile memory
US7480766B2 (en) 2005-08-03 2009-01-20 Sandisk Corporation Interfacing systems operating through a logical address space and on a direct data file basis
US7669003B2 (en) * 2005-08-03 2010-02-23 Sandisk Corporation Reprogrammable non-volatile memory systems with indexing of directly stored data files
US7552271B2 (en) 2005-08-03 2009-06-23 Sandisk Corporation Nonvolatile memory with block management
US20070084375A1 (en) * 2005-08-10 2007-04-19 Smith Kyle S High density cartridge and method for reloading
US7814262B2 (en) 2005-10-13 2010-10-12 Sandisk Corporation Memory system storing transformed units of data in fixed sized storage blocks
US7529905B2 (en) * 2005-10-13 2009-05-05 Sandisk Corporation Method of storing transformed units of data in a memory system having fixed sized storage blocks
US7877540B2 (en) * 2005-12-13 2011-01-25 Sandisk Corporation Logically-addressed file storage methods
US7747837B2 (en) 2005-12-21 2010-06-29 Sandisk Corporation Method and system for accessing non-volatile storage devices
US7769978B2 (en) * 2005-12-21 2010-08-03 Sandisk Corporation Method and system for accessing non-volatile storage devices
US20070156998A1 (en) * 2005-12-21 2007-07-05 Gorobets Sergey A Methods for memory allocation in non-volatile memories with a directly mapped file storage system
US20070143566A1 (en) * 2005-12-21 2007-06-21 Gorobets Sergey A Non-volatile memories with data alignment in a directly mapped file storage system
US7793068B2 (en) * 2005-12-21 2010-09-07 Sandisk Corporation Dual mode access for non-volatile storage devices
US20070143561A1 (en) * 2005-12-21 2007-06-21 Gorobets Sergey A Methods for adaptive file data handling in non-volatile memories with a directly mapped file storage system
US20070143378A1 (en) * 2005-12-21 2007-06-21 Gorobets Sergey A Non-volatile memories with adaptive file handling in a directly mapped file storage system
US20070174563A1 (en) * 2006-01-23 2007-07-26 Stuart Staniford System and method for selecting memory locations for overwrite
EP1850347A1 (en) * 2006-04-28 2007-10-31 Deutsche Thomson-Brandt Gmbh Method and device for writing to a flash memory
US7564721B2 (en) 2006-05-25 2009-07-21 Micron Technology, Inc. Method and apparatus for improving storage performance using a background erase
KR100758301B1 (ko) * 2006-08-04 2007-09-12 삼성전자주식회사 메모리 카드 및 그것의 데이터 저장 방법
KR100855467B1 (ko) * 2006-09-27 2008-09-01 삼성전자주식회사 이종 셀 타입을 지원하는 비휘발성 메모리를 위한 맵핑장치 및 방법
KR100771521B1 (ko) * 2006-10-30 2007-10-30 삼성전자주식회사 멀티 레벨 셀을 포함하는 플래시 메모리 장치 및 그것의데이터 쓰기 방법
WO2008057557A2 (en) * 2006-11-06 2008-05-15 Rambus Inc. Memory system supporting nonvolatile physical memory
US8286156B2 (en) * 2006-11-07 2012-10-09 Sandisk Technologies Inc. Methods and apparatus for performing resilient firmware upgrades to a functioning memory
US7739444B2 (en) 2006-12-26 2010-06-15 Sandisk Corporation System using a direct data file system with a continuous logical address space interface
US8166267B2 (en) 2006-12-26 2012-04-24 Sandisk Technologies Inc. Managing a LBA interface in a direct data file memory system
US7917686B2 (en) 2006-12-26 2011-03-29 Sandisk Corporation Host system with direct data file interface configurability
EP2097825B1 (en) 2006-12-26 2013-09-04 SanDisk Technologies Inc. Use of a direct data file system with a continuous logical address space interface
US8046522B2 (en) * 2006-12-26 2011-10-25 SanDisk Technologies, Inc. Use of a direct data file system with a continuous logical address space interface and control of file address storage in logical blocks
US8209461B2 (en) 2006-12-26 2012-06-26 Sandisk Technologies Inc. Configuration of host LBA interface with flash memory
US20080155175A1 (en) * 2006-12-26 2008-06-26 Sinclair Alan W Host System That Manages a LBA Interface With Flash Memory
US7791952B2 (en) 2007-01-30 2010-09-07 Micron Technology, Inc. Memory device architectures and operation
US20080235464A1 (en) * 2007-03-19 2008-09-25 Shai Traister System for conversion of update blocks based on comparison with a threshold size
US7904670B2 (en) * 2007-03-19 2011-03-08 Sandisk Corporation Methods for conversion of update blocks based on comparison with a threshold size
US8275953B2 (en) * 2007-03-19 2012-09-25 Sandisk Technologies Inc. Methods for forcing an update block to remain sequential
US20080235489A1 (en) * 2007-03-19 2008-09-25 Sergey Anatolievich Gorobets Systems for forcing an update block to remain sequential
US8341375B2 (en) * 2007-03-19 2012-12-25 Sandisk Technologies Inc. Methods for conversion of update blocks based on association with host file management data structures
US20080250220A1 (en) * 2007-04-06 2008-10-09 Takafumi Ito Memory system
US7869277B1 (en) * 2007-04-25 2011-01-11 Apple Inc. Managing data writing to memories
US20080307156A1 (en) * 2007-06-08 2008-12-11 Sinclair Alan W System For Interfacing A Host Operating Through A Logical Address Space With A Direct File Storage Medium
US8239639B2 (en) * 2007-06-08 2012-08-07 Sandisk Technologies Inc. Method and apparatus for providing data type and host file information to a mass storage system
US8713283B2 (en) * 2007-06-08 2014-04-29 Sandisk Technologies Inc. Method of interfacing a host operating through a logical address space with a direct file storage medium
US20090055574A1 (en) * 2007-08-25 2009-02-26 Bei-Chuan Chen NAND Flash Memory Device And Related Method Thereof
US7719890B2 (en) 2007-09-12 2010-05-18 Sandisk Corporation Data protection for write abort
US8566504B2 (en) 2007-09-28 2013-10-22 Sandisk Technologies Inc. Dynamic metablocks
TW200917277A (en) * 2007-10-15 2009-04-16 A Data Technology Co Ltd Adaptive hybrid density memory storage device and control method thereof
US8880483B2 (en) * 2007-12-21 2014-11-04 Sandisk Technologies Inc. System and method for implementing extensions to intelligently manage resources of a mass storage system
US8775717B2 (en) 2007-12-27 2014-07-08 Sandisk Enterprise Ip Llc Storage controller for flash memory including a crossbar switch connecting a plurality of processors with a plurality of internal memories
JP2009211192A (ja) * 2008-02-29 2009-09-17 Toshiba Corp メモリシステム
JP5166118B2 (ja) * 2008-05-21 2013-03-21 株式会社東芝 半導体メモリの制御方法
US8762654B1 (en) * 2008-07-02 2014-06-24 Marvell International Ltd. Selectively scheduling memory accesses in parallel based on access speeds of memory
US8209439B2 (en) * 2008-08-25 2012-06-26 Sandisk Il Ltd. Managing multiple concurrent operations with various priority levels in a local storage device
US8671327B2 (en) * 2008-09-28 2014-03-11 Sandisk Technologies Inc. Method and system for adaptive coding in flash memories
US8675417B2 (en) * 2008-09-28 2014-03-18 Ramot At Tel Aviv University Ltd. Method and system for adaptive coding in flash memories
US8566562B2 (en) * 2008-10-03 2013-10-22 Skymedi Corporation Method for sequentially writing data with an offset to a non-volatile memory
TWI413984B (zh) * 2008-10-16 2013-11-01 Silicon Motion Inc 快閃記憶體裝置以及資料更新方法
EP2189895A1 (en) 2008-11-24 2010-05-26 Deutsche Thomson OHG Flash based memory comprising a Flash translation layer and method for storing a file therein
US8266365B2 (en) 2008-12-17 2012-09-11 Sandisk Il Ltd. Ruggedized memory device
US8700840B2 (en) * 2009-01-05 2014-04-15 SanDisk Technologies, Inc. Nonvolatile memory with write cache having flush/eviction methods
US8244960B2 (en) * 2009-01-05 2012-08-14 Sandisk Technologies Inc. Non-volatile memory and method with write cache partition management methods
US8094500B2 (en) 2009-01-05 2012-01-10 Sandisk Technologies Inc. Non-volatile memory and method with write cache partitioning
US20100174845A1 (en) * 2009-01-05 2010-07-08 Sergey Anatolievich Gorobets Wear Leveling for Non-Volatile Memories: Maintenance of Experience Count and Passive Techniques
US8392687B2 (en) 2009-01-21 2013-03-05 Micron Technology, Inc. Solid state memory formatting
KR101269366B1 (ko) * 2009-02-12 2013-05-29 가부시끼가이샤 도시바 메모리 시스템 및 메모리 시스템의 제어 방법
KR101574540B1 (ko) * 2009-04-15 2015-12-07 삼성전자주식회사 데이터 저장 장치 및 이를 포함하는 데이터 저장 시스템
US20110060865A1 (en) * 2009-09-08 2011-03-10 Lsi Corporation Systems and Methods for Flash Memory Utilization
TWI417889B (zh) * 2009-12-30 2013-12-01 Silicon Motion Inc 快閃記憶體之寫入逾時控制方法及其記憶裝置
JP5404483B2 (ja) * 2010-03-17 2014-01-29 株式会社東芝 メモリシステム
US8429391B2 (en) * 2010-04-16 2013-04-23 Micron Technology, Inc. Boot partitions in memory devices and systems
JP2011227664A (ja) 2010-04-19 2011-11-10 Toshiba Corp メモリシステム
US11614893B2 (en) 2010-09-15 2023-03-28 Pure Storage, Inc. Optimizing storage device access based on latency
US9268649B1 (en) * 2011-06-23 2016-02-23 Western Digital Technologies, Inc. Disk drive with recent write streams list for data refresh determination
US8589640B2 (en) 2011-10-14 2013-11-19 Pure Storage, Inc. Method for maintaining multiple fingerprint tables in a deduplicating storage system
EP3346386B1 (en) * 2011-09-30 2020-01-22 Intel Corporation Non-volatile random access memory (nvram) as a replacement for traditional mass storage
US9146856B2 (en) * 2012-04-10 2015-09-29 Micron Technology, Inc. Remapping and compacting in a memory device
TWI479313B (zh) * 2012-07-11 2015-04-01 Phison Electronics Corp 資料寫入方法、記憶體控制器與記憶體儲存裝置
US9699263B1 (en) 2012-08-17 2017-07-04 Sandisk Technologies Llc. Automatic read and write acceleration of data accessed by virtual machines
US9612948B2 (en) 2012-12-27 2017-04-04 Sandisk Technologies Llc Reads and writes between a contiguous data block and noncontiguous sets of logical address blocks in a persistent storage device
US9454420B1 (en) 2012-12-31 2016-09-27 Sandisk Technologies Llc Method and system of reading threshold voltage equalization
US9652376B2 (en) 2013-01-28 2017-05-16 Radian Memory Systems, Inc. Cooperative flash memory control
US9870830B1 (en) 2013-03-14 2018-01-16 Sandisk Technologies Llc Optimal multilevel sensing for reading data from a storage medium
US9465732B2 (en) 2013-03-15 2016-10-11 Sandisk Technologies Llc Binning of blocks for dynamic linking
US9116774B2 (en) 2013-05-14 2015-08-25 Sandisk Technologies Inc. Firmware updates for multiple product configurations
TWI470431B (zh) * 2013-06-14 2015-01-21 Phison Electronics Corp 資料寫入方法、記憶體控制器與記憶體儲存裝置
US9524235B1 (en) 2013-07-25 2016-12-20 Sandisk Technologies Llc Local hash value generation in non-volatile data storage systems
US9639463B1 (en) 2013-08-26 2017-05-02 Sandisk Technologies Llc Heuristic aware garbage collection scheme in storage systems
US9442662B2 (en) 2013-10-18 2016-09-13 Sandisk Technologies Llc Device and method for managing die groups
US9436831B2 (en) 2013-10-30 2016-09-06 Sandisk Technologies Llc Secure erase in a memory device
US9411721B2 (en) * 2013-11-15 2016-08-09 Sandisk Technologies Llc Detecting access sequences for data compression on non-volatile memory devices
US9703816B2 (en) 2013-11-19 2017-07-11 Sandisk Technologies Llc Method and system for forward reference logging in a persistent datastore
US9520197B2 (en) 2013-11-22 2016-12-13 Sandisk Technologies Llc Adaptive erase of a storage device
US9520162B2 (en) 2013-11-27 2016-12-13 Sandisk Technologies Llc DIMM device controller supervisor
US9582058B2 (en) 2013-11-29 2017-02-28 Sandisk Technologies Llc Power inrush management of storage devices
US9772876B2 (en) 2014-01-06 2017-09-26 International Business Machines Corporation Executing an all-to-allv operation on a parallel computer that includes a plurality of compute nodes
US10061710B2 (en) 2014-01-29 2018-08-28 Hitachi, Ltd. Storage device
US9703636B2 (en) 2014-03-01 2017-07-11 Sandisk Technologies Llc Firmware reversion trigger and control
US9448876B2 (en) 2014-03-19 2016-09-20 Sandisk Technologies Llc Fault detection and prediction in storage devices
US9454448B2 (en) 2014-03-19 2016-09-27 Sandisk Technologies Llc Fault testing in storage devices
US9626399B2 (en) 2014-03-31 2017-04-18 Sandisk Technologies Llc Conditional updates for reducing frequency of data modification operations
US9626400B2 (en) 2014-03-31 2017-04-18 Sandisk Technologies Llc Compaction of information in tiered data structure
US9697267B2 (en) 2014-04-03 2017-07-04 Sandisk Technologies Llc Methods and systems for performing efficient snapshots in tiered data structures
US10656842B2 (en) 2014-05-30 2020-05-19 Sandisk Technologies Llc Using history of I/O sizes and I/O sequences to trigger coalesced writes in a non-volatile storage device
US10372613B2 (en) 2014-05-30 2019-08-06 Sandisk Technologies Llc Using sub-region I/O history to cache repeatedly accessed sub-regions in a non-volatile storage device
US9703491B2 (en) 2014-05-30 2017-07-11 Sandisk Technologies Llc Using history of unaligned writes to cache data and avoid read-modify-writes in a non-volatile storage device
US10146448B2 (en) 2014-05-30 2018-12-04 Sandisk Technologies Llc Using history of I/O sequences to trigger cached read ahead in a non-volatile storage device
US10114557B2 (en) 2014-05-30 2018-10-30 Sandisk Technologies Llc Identification of hot regions to enhance performance and endurance of a non-volatile storage device
US10656840B2 (en) 2014-05-30 2020-05-19 Sandisk Technologies Llc Real-time I/O pattern recognition to enhance performance and endurance of a storage device
US10162748B2 (en) 2014-05-30 2018-12-25 Sandisk Technologies Llc Prioritizing garbage collection and block allocation based on I/O history for logical address regions
US9213485B1 (en) 2014-06-04 2015-12-15 Pure Storage, Inc. Storage system architecture
US9003144B1 (en) 2014-06-04 2015-04-07 Pure Storage, Inc. Mechanism for persisting messages in a storage system
US11399063B2 (en) 2014-06-04 2022-07-26 Pure Storage, Inc. Network authentication for a storage system
US9218244B1 (en) 2014-06-04 2015-12-22 Pure Storage, Inc. Rebuilding data across storage nodes
US9367243B1 (en) 2014-06-04 2016-06-14 Pure Storage, Inc. Scalable non-uniform storage sizes
US9836234B2 (en) 2014-06-04 2017-12-05 Pure Storage, Inc. Storage cluster
US11960371B2 (en) 2014-06-04 2024-04-16 Pure Storage, Inc. Message persistence in a zoned system
US10574754B1 (en) 2014-06-04 2020-02-25 Pure Storage, Inc. Multi-chassis array with multi-level load balancing
US11652884B2 (en) 2014-06-04 2023-05-16 Pure Storage, Inc. Customized hash algorithms
US8850108B1 (en) 2014-06-04 2014-09-30 Pure Storage, Inc. Storage cluster
US11068363B1 (en) 2014-06-04 2021-07-20 Pure Storage, Inc. Proactively rebuilding data in a storage cluster
US9652381B2 (en) 2014-06-19 2017-05-16 Sandisk Technologies Llc Sub-block garbage collection
JP2017527877A (ja) 2014-06-25 2017-09-21 華為技術有限公司Huawei Technologies Co.,Ltd. フラッシュメモリから/フラッシュメモリへデータを読み取る/書き込むための方法および装置、ならびにユーザ機器
US11604598B2 (en) 2014-07-02 2023-03-14 Pure Storage, Inc. Storage cluster with zoned drives
US9021297B1 (en) 2014-07-02 2015-04-28 Pure Storage, Inc. Redundant, fault-tolerant, distributed remote procedure call cache in a storage system
US10114757B2 (en) 2014-07-02 2018-10-30 Pure Storage, Inc. Nonrepeating identifiers in an address space of a non-volatile solid-state storage
US9836245B2 (en) * 2014-07-02 2017-12-05 Pure Storage, Inc. Non-volatile RAM and flash memory in a non-volatile solid-state storage
US8868825B1 (en) 2014-07-02 2014-10-21 Pure Storage, Inc. Nonrepeating identifiers in an address space of a non-volatile solid-state storage
US11886308B2 (en) 2014-07-02 2024-01-30 Pure Storage, Inc. Dual class of service for unified file and object messaging
US8874836B1 (en) 2014-07-03 2014-10-28 Pure Storage, Inc. Scheduling policy for queues in a non-volatile solid-state storage
US9811677B2 (en) 2014-07-03 2017-11-07 Pure Storage, Inc. Secure data replication in a storage grid
US10853311B1 (en) 2014-07-03 2020-12-01 Pure Storage, Inc. Administration through files in a storage system
US9747229B1 (en) 2014-07-03 2017-08-29 Pure Storage, Inc. Self-describing data format for DMA in a non-volatile solid-state storage
US9483346B2 (en) 2014-08-07 2016-11-01 Pure Storage, Inc. Data rebuild on feedback from a queue in a non-volatile solid-state storage
US10983859B2 (en) 2014-08-07 2021-04-20 Pure Storage, Inc. Adjustable error correction based on memory health in a storage unit
US9495255B2 (en) 2014-08-07 2016-11-15 Pure Storage, Inc. Error recovery in a storage cluster
US9082512B1 (en) 2014-08-07 2015-07-14 Pure Storage, Inc. Die-level monitoring in a storage cluster
US9558069B2 (en) 2014-08-07 2017-01-31 Pure Storage, Inc. Failure mapping in a storage array
US9766972B2 (en) 2014-08-07 2017-09-19 Pure Storage, Inc. Masking defective bits in a storage array
US10079711B1 (en) 2014-08-20 2018-09-18 Pure Storage, Inc. Virtual file server with preserved MAC address
US9443601B2 (en) 2014-09-08 2016-09-13 Sandisk Technologies Llc Holdup capacitor energy harvesting
US10552085B1 (en) 2014-09-09 2020-02-04 Radian Memory Systems, Inc. Techniques for directed data migration
US9542118B1 (en) 2014-09-09 2017-01-10 Radian Memory Systems, Inc. Expositive flash memory control
US10114562B2 (en) 2014-09-16 2018-10-30 Sandisk Technologies Llc Adaptive block allocation in nonvolatile memory
US9948615B1 (en) 2015-03-16 2018-04-17 Pure Storage, Inc. Increased storage unit encryption based on loss of trust
KR20160112135A (ko) * 2015-03-18 2016-09-28 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작 방법
US11294893B2 (en) 2015-03-20 2022-04-05 Pure Storage, Inc. Aggregation of queries
US9940234B2 (en) 2015-03-26 2018-04-10 Pure Storage, Inc. Aggressive data deduplication using lazy garbage collection
US10082985B2 (en) 2015-03-27 2018-09-25 Pure Storage, Inc. Data striping across storage nodes that are assigned to multiple logical arrays
US10178169B2 (en) 2015-04-09 2019-01-08 Pure Storage, Inc. Point to point based backend communication layer for storage processing
US9672125B2 (en) 2015-04-10 2017-06-06 Pure Storage, Inc. Ability to partition an array into two or more logical arrays with independently running software
US10140149B1 (en) 2015-05-19 2018-11-27 Pure Storage, Inc. Transactional commits with hardware assists in remote memory
US9817576B2 (en) 2015-05-27 2017-11-14 Pure Storage, Inc. Parallel update to NVRAM
US10846275B2 (en) 2015-06-26 2020-11-24 Pure Storage, Inc. Key management in a storage device
US10983732B2 (en) 2015-07-13 2021-04-20 Pure Storage, Inc. Method and system for accessing a file
US11232079B2 (en) 2015-07-16 2022-01-25 Pure Storage, Inc. Efficient distribution of large directories
US10108355B2 (en) 2015-09-01 2018-10-23 Pure Storage, Inc. Erase block state detection
US11341136B2 (en) 2015-09-04 2022-05-24 Pure Storage, Inc. Dynamically resizable structures for approximate membership queries
US10120573B2 (en) * 2015-09-14 2018-11-06 Microsoft Technology Licensing, Llc. Modular sequential writing of data to data storage devices
US10853266B2 (en) 2015-09-30 2020-12-01 Pure Storage, Inc. Hardware assisted data lookup methods
US9768953B2 (en) 2015-09-30 2017-09-19 Pure Storage, Inc. Resharing of a split secret
US10762069B2 (en) 2015-09-30 2020-09-01 Pure Storage, Inc. Mechanism for a system where data and metadata are located closely together
US9843453B2 (en) 2015-10-23 2017-12-12 Pure Storage, Inc. Authorizing I/O commands with I/O tokens
US9830084B2 (en) * 2015-12-03 2017-11-28 Sandisk Technologies Llc Writing logical groups of data to physical locations in memory using headers
US10013179B2 (en) 2015-12-03 2018-07-03 Sandisk Technologies Llc Reading logical groups of data from physical locations in memory using headers
US10007457B2 (en) 2015-12-22 2018-06-26 Pure Storage, Inc. Distributed transactions with token-associated execution
KR101805828B1 (ko) * 2016-03-21 2017-12-07 주식회사 디에이아이오 스토리지 시스템의 주소 변환 방법 및 스토리지 시스템의 메모리 장치 컨트롤러
US10261690B1 (en) 2016-05-03 2019-04-16 Pure Storage, Inc. Systems and methods for operating a storage system
US9817593B1 (en) 2016-07-11 2017-11-14 Sandisk Technologies Llc Block management in non-volatile memory system with non-blocking control sync system
US11861188B2 (en) 2016-07-19 2024-01-02 Pure Storage, Inc. System having modular accelerators
US11449232B1 (en) 2016-07-22 2022-09-20 Pure Storage, Inc. Optimal scheduling of flash operations
US9672905B1 (en) 2016-07-22 2017-06-06 Pure Storage, Inc. Optimize data protection layouts based on distributed flash wear leveling
US10768819B2 (en) 2016-07-22 2020-09-08 Pure Storage, Inc. Hardware support for non-disruptive upgrades
US11604690B2 (en) 2016-07-24 2023-03-14 Pure Storage, Inc. Online failure span determination
US10216420B1 (en) 2016-07-24 2019-02-26 Pure Storage, Inc. Calibration of flash channels in SSD
US11080155B2 (en) 2016-07-24 2021-08-03 Pure Storage, Inc. Identifying error types among flash memory
US11734169B2 (en) 2016-07-26 2023-08-22 Pure Storage, Inc. Optimizing spool and memory space management
US11797212B2 (en) 2016-07-26 2023-10-24 Pure Storage, Inc. Data migration for zoned drives
US11886334B2 (en) 2016-07-26 2024-01-30 Pure Storage, Inc. Optimizing spool and memory space management
US10366004B2 (en) 2016-07-26 2019-07-30 Pure Storage, Inc. Storage system with elective garbage collection to reduce flash contention
US10203903B2 (en) 2016-07-26 2019-02-12 Pure Storage, Inc. Geometry based, space aware shelf/writegroup evacuation
CN106445407A (zh) * 2016-08-17 2017-02-22 北京兆易创新科技股份有限公司 一种芯片处理方法及装置
US11422719B2 (en) 2016-09-15 2022-08-23 Pure Storage, Inc. Distributed file deletion and truncation
US9747039B1 (en) 2016-10-04 2017-08-29 Pure Storage, Inc. Reservations over multiple paths on NVMe over fabrics
US10756816B1 (en) 2016-10-04 2020-08-25 Pure Storage, Inc. Optimized fibre channel and non-volatile memory express access
US11550481B2 (en) 2016-12-19 2023-01-10 Pure Storage, Inc. Efficiently writing data in a zoned drive storage system
US11307998B2 (en) 2017-01-09 2022-04-19 Pure Storage, Inc. Storage efficiency of encrypted host system data
US11955187B2 (en) 2017-01-13 2024-04-09 Pure Storage, Inc. Refresh of differing capacity NAND
US9747158B1 (en) 2017-01-13 2017-08-29 Pure Storage, Inc. Intelligent refresh of 3D NAND
US10979223B2 (en) 2017-01-31 2021-04-13 Pure Storage, Inc. Separate encryption for a solid-state drive
US10528488B1 (en) 2017-03-30 2020-01-07 Pure Storage, Inc. Efficient name coding
US11016667B1 (en) 2017-04-05 2021-05-25 Pure Storage, Inc. Efficient mapping for LUNs in storage memory with holes in address space
US10944671B2 (en) 2017-04-27 2021-03-09 Pure Storage, Inc. Efficient data forwarding in a networked device
US10141050B1 (en) 2017-04-27 2018-11-27 Pure Storage, Inc. Page writes for triple level cell flash memory
US10516645B1 (en) 2017-04-27 2019-12-24 Pure Storage, Inc. Address resolution broadcasting in a networked device
US11467913B1 (en) 2017-06-07 2022-10-11 Pure Storage, Inc. Snapshots with crash consistency in a storage system
US11947814B2 (en) 2017-06-11 2024-04-02 Pure Storage, Inc. Optimizing resiliency group formation stability
US11782625B2 (en) 2017-06-11 2023-10-10 Pure Storage, Inc. Heterogeneity supportive resiliency groups
US11138103B1 (en) 2017-06-11 2021-10-05 Pure Storage, Inc. Resiliency groups
US10482010B2 (en) * 2017-06-29 2019-11-19 Intel Corporation Persistent host memory buffer
US10425473B1 (en) 2017-07-03 2019-09-24 Pure Storage, Inc. Stateful connection reset in a storage cluster with a stateless load balancer
US10613943B2 (en) * 2017-07-27 2020-04-07 Western Digital Technologies, Inc. Method and system for improving open block data reliability
US10402266B1 (en) 2017-07-31 2019-09-03 Pure Storage, Inc. Redundant array of independent disks in a direct-mapped flash storage system
US10877827B2 (en) 2017-09-15 2020-12-29 Pure Storage, Inc. Read voltage optimization
US10210926B1 (en) 2017-09-15 2019-02-19 Pure Storage, Inc. Tracking of optimum read voltage thresholds in nand flash devices
US11024390B1 (en) 2017-10-31 2021-06-01 Pure Storage, Inc. Overlapping RAID groups
US10884919B2 (en) 2017-10-31 2021-01-05 Pure Storage, Inc. Memory management in a storage system
US10515701B1 (en) 2017-10-31 2019-12-24 Pure Storage, Inc. Overlapping raid groups
US10496330B1 (en) 2017-10-31 2019-12-03 Pure Storage, Inc. Using flash storage devices with different sized erase blocks
US10545687B1 (en) 2017-10-31 2020-01-28 Pure Storage, Inc. Data rebuild when changing erase block sizes during drive replacement
US10860475B1 (en) 2017-11-17 2020-12-08 Pure Storage, Inc. Hybrid flash translation layer
US10990566B1 (en) 2017-11-20 2021-04-27 Pure Storage, Inc. Persistent file locks in a storage system
US10445230B2 (en) * 2017-12-08 2019-10-15 Macronix International Co., Ltd. Managing block arrangement of super blocks
US10719265B1 (en) 2017-12-08 2020-07-21 Pure Storage, Inc. Centralized, quorum-aware handling of device reservation requests in a storage system
US10929053B2 (en) 2017-12-08 2021-02-23 Pure Storage, Inc. Safe destructive actions on drives
US10929031B2 (en) 2017-12-21 2021-02-23 Pure Storage, Inc. Maximizing data reduction in a partially encrypted volume
US10467527B1 (en) 2018-01-31 2019-11-05 Pure Storage, Inc. Method and apparatus for artificial intelligence acceleration
US10976948B1 (en) 2018-01-31 2021-04-13 Pure Storage, Inc. Cluster expansion mechanism
US10733053B1 (en) 2018-01-31 2020-08-04 Pure Storage, Inc. Disaster recovery for high-bandwidth distributed archives
US11036596B1 (en) 2018-02-18 2021-06-15 Pure Storage, Inc. System for delaying acknowledgements on open NAND locations until durability has been confirmed
US11494109B1 (en) 2018-02-22 2022-11-08 Pure Storage, Inc. Erase block trimming for heterogenous flash memory storage devices
US11385792B2 (en) 2018-04-27 2022-07-12 Pure Storage, Inc. High availability controller pair transitioning
US10853146B1 (en) 2018-04-27 2020-12-01 Pure Storage, Inc. Efficient data forwarding in a networked device
US10931450B1 (en) 2018-04-27 2021-02-23 Pure Storage, Inc. Distributed, lock-free 2-phase commit of secret shares using multiple stateless controllers
US11436023B2 (en) 2018-05-31 2022-09-06 Pure Storage, Inc. Mechanism for updating host file system and flash translation layer based on underlying NAND technology
US11438279B2 (en) 2018-07-23 2022-09-06 Pure Storage, Inc. Non-disruptive conversion of a clustered service from single-chassis to multi-chassis
US11868309B2 (en) 2018-09-06 2024-01-09 Pure Storage, Inc. Queue management for data relocation
US11520514B2 (en) 2018-09-06 2022-12-06 Pure Storage, Inc. Optimized relocation of data based on data characteristics
US11354058B2 (en) 2018-09-06 2022-06-07 Pure Storage, Inc. Local relocation of data stored at a storage device of a storage system
US11500570B2 (en) 2018-09-06 2022-11-15 Pure Storage, Inc. Efficient relocation of data utilizing different programming modes
US10454498B1 (en) 2018-10-18 2019-10-22 Pure Storage, Inc. Fully pipelined hardware engine design for fast and efficient inline lossless data compression
US10976947B2 (en) 2018-10-26 2021-04-13 Pure Storage, Inc. Dynamically selecting segment heights in a heterogeneous RAID group
CN109817257B (zh) * 2018-12-27 2020-10-13 西安紫光国芯半导体有限公司 一种动态存储器刷新操作下的省电方法和动态存储器
US10990320B2 (en) * 2019-02-01 2021-04-27 Western Digital Technologies, Inc. Systems and methods to optimally select metablocks
US11334254B2 (en) 2019-03-29 2022-05-17 Pure Storage, Inc. Reliability based flash page sizing
US11775189B2 (en) 2019-04-03 2023-10-03 Pure Storage, Inc. Segment level heterogeneity
US11099986B2 (en) 2019-04-12 2021-08-24 Pure Storage, Inc. Efficient transfer of memory contents
US11714572B2 (en) 2019-06-19 2023-08-01 Pure Storage, Inc. Optimized data resiliency in a modular storage system
US11281394B2 (en) 2019-06-24 2022-03-22 Pure Storage, Inc. Replication across partitioning schemes in a distributed storage system
TWI769386B (zh) * 2019-07-04 2022-07-01 群聯電子股份有限公司 資料抹除方法、記憶體控制電路單元及記憶體儲存裝置
US11893126B2 (en) 2019-10-14 2024-02-06 Pure Storage, Inc. Data deletion for a multi-tenant environment
US11416144B2 (en) 2019-12-12 2022-08-16 Pure Storage, Inc. Dynamic use of segment or zone power loss protection in a flash device
US11704192B2 (en) 2019-12-12 2023-07-18 Pure Storage, Inc. Budgeting open blocks based on power loss protection
US11847331B2 (en) 2019-12-12 2023-12-19 Pure Storage, Inc. Budgeting open blocks of a storage unit based on power loss prevention
CN111143313B (zh) * 2019-12-25 2023-07-25 成都三零嘉微电子有限公司 一种提高混合映射算法的日志块读写性能的方法
US11188432B2 (en) 2020-02-28 2021-11-30 Pure Storage, Inc. Data resiliency by partially deallocating data blocks of a storage device
US11507297B2 (en) 2020-04-15 2022-11-22 Pure Storage, Inc. Efficient management of optimal read levels for flash storage systems
US11256587B2 (en) 2020-04-17 2022-02-22 Pure Storage, Inc. Intelligent access to a storage device
US11416338B2 (en) 2020-04-24 2022-08-16 Pure Storage, Inc. Resiliency scheme to enhance storage performance
US11474986B2 (en) 2020-04-24 2022-10-18 Pure Storage, Inc. Utilizing machine learning to streamline telemetry processing of storage media
US11768763B2 (en) 2020-07-08 2023-09-26 Pure Storage, Inc. Flash secure erase
US11513974B2 (en) 2020-09-08 2022-11-29 Pure Storage, Inc. Using nonce to control erasure of data blocks of a multi-controller storage system
US11681448B2 (en) 2020-09-08 2023-06-20 Pure Storage, Inc. Multiple device IDs in a multi-fabric module storage system
US11487455B2 (en) 2020-12-17 2022-11-01 Pure Storage, Inc. Dynamic block allocation to optimize storage system performance
US11614880B2 (en) 2020-12-31 2023-03-28 Pure Storage, Inc. Storage system with selectable write paths
US11847324B2 (en) 2020-12-31 2023-12-19 Pure Storage, Inc. Optimizing resiliency groups for data regions of a storage system
US11630593B2 (en) 2021-03-12 2023-04-18 Pure Storage, Inc. Inline flash memory qualification in a storage system
US11507597B2 (en) 2021-03-31 2022-11-22 Pure Storage, Inc. Data replication to meet a recovery point objective
US11756644B2 (en) 2021-06-23 2023-09-12 International Business Machines Corporation Triage of multi-plane read requests
KR102403277B1 (ko) * 2021-12-24 2022-05-30 오픈엣지테크놀로지 주식회사 어레이 풀링 방법 및 이를 위한 장치

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5798968A (en) 1996-09-24 1998-08-25 Sandisk Corporation Plane decode/virtual sector architecture
US5860124A (en) 1996-09-30 1999-01-12 Intel Corporation Method for performing a continuous over-write of a file in nonvolatile memory

Family Cites Families (70)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5095344A (en) * 1988-06-08 1992-03-10 Eliyahou Harari Highly compact eprom and flash eeprom devices
US5043940A (en) * 1988-06-08 1991-08-27 Eliyahou Harari Flash EEPROM memory systems having multistate storage cells
US5070032A (en) * 1989-03-15 1991-12-03 Sundisk Corporation Method of making dense flash eeprom semiconductor memory structures
US5172338B1 (en) * 1989-04-13 1997-07-08 Sandisk Corp Multi-state eeprom read and write circuits and techniques
US5343063A (en) * 1990-12-18 1994-08-30 Sundisk Corporation Dense vertical programmable read only memory cell structure and processes for making them
US6222762B1 (en) * 1992-01-14 2001-04-24 Sandisk Corporation Multi-state memory
US5313421A (en) * 1992-01-14 1994-05-17 Sundisk Corporation EEPROM with split gate source side injection
JP3122222B2 (ja) 1992-05-08 2001-01-09 株式会社東芝 メモリカード装置
US5532962A (en) * 1992-05-20 1996-07-02 Sandisk Corporation Soft errors handling in EEPROM devices
US5315541A (en) * 1992-07-24 1994-05-24 Sundisk Corporation Segmented column memory array
US5404485A (en) * 1993-03-08 1995-04-04 M-Systems Flash Disk Pioneers Ltd. Flash file system
JPH06266596A (ja) * 1993-03-11 1994-09-22 Hitachi Ltd フラッシュメモリファイル記憶装置および情報処理装置
US5367484A (en) 1993-04-01 1994-11-22 Microchip Technology Incorporated Programmable high endurance block for EEPROM device
KR970008188B1 (ko) * 1993-04-08 1997-05-21 가부시끼가이샤 히다찌세이사꾸쇼 플래시메모리의 제어방법 및 그것을 사용한 정보처리장치
US5555204A (en) * 1993-06-29 1996-09-10 Kabushiki Kaisha Toshiba Non-volatile semiconductor memory device
KR0169267B1 (ko) * 1993-09-21 1999-02-01 사토 후미오 불휘발성 반도체 기억장치
US5473765A (en) 1994-01-24 1995-12-05 3Com Corporation Apparatus for using flash memory as a floppy disk emulator in a computer system
US5661053A (en) * 1994-05-25 1997-08-26 Sandisk Corporation Method of making dense flash EEPROM cell array and peripheral supporting circuits formed in deposited field oxide with the use of spacers
JP3153730B2 (ja) * 1995-05-16 2001-04-09 株式会社東芝 不揮発性半導体記憶装置
US5907856A (en) * 1995-07-31 1999-05-25 Lexar Media, Inc. Moving sectors within a block of information in a flash memory mass storage architecture
US6125435A (en) * 1995-09-13 2000-09-26 Lexar Media, Inc. Alignment of cluster address to block addresses within a semiconductor non-volatile mass storage memory
JP3604466B2 (ja) * 1995-09-13 2004-12-22 株式会社ルネサステクノロジ フラッシュディスクカード
US6304980B1 (en) 1996-03-13 2001-10-16 International Business Machines Corporation Peer-to-peer backup system with failure-triggered device switching honoring reservation of primary device
US5903495A (en) * 1996-03-18 1999-05-11 Kabushiki Kaisha Toshiba Semiconductor device and memory system
US5768192A (en) * 1996-07-23 1998-06-16 Saifun Semiconductors, Ltd. Non-volatile semiconductor memory cell utilizing asymmetrical charge trapping
US5890192A (en) * 1996-11-05 1999-03-30 Sandisk Corporation Concurrent write of multiple chunks of data into multiple subarrays of flash EEPROM
US6034897A (en) * 1999-04-01 2000-03-07 Lexar Media, Inc. Space management for managing high capacity nonvolatile memory
JP3072722B2 (ja) 1997-06-20 2000-08-07 ソニー株式会社 フラッシュメモリを用いるデータ管理装置及びデータ管理方法並びにフラッシュメモリを用いる記憶媒体
US5930167A (en) * 1997-07-30 1999-07-27 Sandisk Corporation Multi-state non-volatile flash memory capable of being its own two state write cache
US6768165B1 (en) * 1997-08-01 2004-07-27 Saifun Semiconductors Ltd. Two bit non-volatile electrically erasable and programmable semiconductor memory cell utilizing asymmetrical charge trapping
US5909449A (en) * 1997-09-08 1999-06-01 Invox Technology Multibit-per-cell non-volatile memory with error detection and correction
US5937425A (en) * 1997-10-16 1999-08-10 M-Systems Flash Disk Pioneers Ltd. Flash file system optimized for page-mode flash technologies
US6226728B1 (en) * 1998-04-21 2001-05-01 Intel Corporation Dynamic allocation for efficient management of variable sized data within a nonvolatile memory
JP2000122917A (ja) * 1998-07-13 2000-04-28 Sony Corp 記録装置および記録方法、再生装置および再生方法、記録媒体、並びにプログラム記録媒体
JP4085478B2 (ja) 1998-07-28 2008-05-14 ソニー株式会社 記憶媒体及び電子機器システム
US6490649B2 (en) 1998-11-10 2002-12-03 Lexar Media, Inc. Memory device
GB9903490D0 (en) 1999-02-17 1999-04-07 Memory Corp Plc Memory system
US6401160B1 (en) * 1999-03-31 2002-06-04 Intel Corporation Method and apparatus to permit adjustable code/data boundary in a nonvolatile memory
US6141249A (en) * 1999-04-01 2000-10-31 Lexar Media, Inc. Organization of blocks within a nonvolatile memory unit to effectively decrease sector write operation time
US6544844B2 (en) 1999-10-08 2003-04-08 Macronix International Co., Ltd. Method for forming a flash memory cell having contoured floating gate surface
US6377500B1 (en) * 1999-11-11 2002-04-23 Kabushiki Kaisha Toshiba Memory system with a non-volatile memory, having address translating function
US6426893B1 (en) 2000-02-17 2002-07-30 Sandisk Corporation Flash eeprom system with simultaneous multiple data sector programming and storage of physical block characteristics in other designated blocks
US6571261B1 (en) 2000-07-13 2003-05-27 International Business Machines Corporation Defragmentation utility for a shared disk parallel file system across a storage area network
US6567307B1 (en) 2000-07-21 2003-05-20 Lexar Media, Inc. Block management for mass storage
JP3699890B2 (ja) 2000-08-30 2005-09-28 シャープ株式会社 不揮発性半導体記憶装置
JP3992960B2 (ja) * 2000-10-26 2007-10-17 松下電器産業株式会社 記録装置及びプログラム
US6684289B1 (en) * 2000-11-22 2004-01-27 Sandisk Corporation Techniques for operating non-volatile memory systems with data sectors having different sizes than the sizes of the pages and/or blocks of the memory
US6763424B2 (en) * 2001-01-19 2004-07-13 Sandisk Corporation Partial block data programming and reading operations in a non-volatile memory
US6591330B2 (en) 2001-06-18 2003-07-08 M-Systems Flash Disk Pioneers Ltd. System and method for flexible flash file
JP4256600B2 (ja) * 2001-06-19 2009-04-22 Tdk株式会社 メモリコントローラ、メモリコントローラを備えるフラッシュメモリシステム及びフラッシュメモリの制御方法
US6522580B2 (en) * 2001-06-27 2003-02-18 Sandisk Corporation Operating techniques for reducing effects of coupling between storage elements of a non-volatile memory operated in multiple data states
US6717847B2 (en) 2001-09-17 2004-04-06 Sandisk Corporation Selective operation of a multi-state non-volatile memory system in a binary mode
US6456528B1 (en) * 2001-09-17 2002-09-24 Sandisk Corporation Selective operation of a multi-state non-volatile memory system in a binary mode
GB0123415D0 (en) 2001-09-28 2001-11-21 Memquest Ltd Method of writing data to non-volatile memory
GB0123416D0 (en) 2001-09-28 2001-11-21 Memquest Ltd Non-volatile memory control
GB0123412D0 (en) * 2001-09-28 2001-11-21 Memquest Ltd Memory system sectors
TW506123B (en) * 2001-10-24 2002-10-11 Macronix Int Co Ltd Multi-level NROM memory cell and its operating method
US6925007B2 (en) * 2001-10-31 2005-08-02 Sandisk Corporation Multi-state non-volatile integrated circuit memory systems that employ dielectric storage elements
JP3967121B2 (ja) * 2001-12-11 2007-08-29 株式会社ルネサステクノロジ ファイルシステム、ファイルシステム制御方法およびファイルシステムを制御するためのプログラム
US6895464B2 (en) * 2002-06-03 2005-05-17 Honeywell International Inc. Flash memory management system and method utilizing multiple block list windows
US7526599B2 (en) 2002-10-28 2009-04-28 Sandisk Corporation Method and apparatus for effectively enabling an out of sequence write process within a non-volatile memory system
US6985992B1 (en) 2002-10-28 2006-01-10 Sandisk Corporation Wear-leveling in non-volatile storage systems
US6831865B2 (en) 2002-10-28 2004-12-14 Sandisk Corporation Maintaining erase counts in non-volatile storage systems
US8412879B2 (en) 2002-10-28 2013-04-02 Sandisk Technologies Inc. Hybrid implementation for error correction codes within a non-volatile memory system
US7096313B1 (en) 2002-10-28 2006-08-22 Sandisk Corporation Tracking the least frequently erased blocks in non-volatile memory systems
US7103732B1 (en) 2002-10-28 2006-09-05 Sandisk Corporation Method and apparatus for managing an erase count block
JP2005135008A (ja) 2003-10-28 2005-05-26 Sony Corp 情報配信システム及び情報配信方法
US7433993B2 (en) 2003-12-30 2008-10-07 San Disk Corportion Adaptive metablocks
US7139864B2 (en) 2003-12-30 2006-11-21 Sandisk Corporation Non-volatile memory and method with block management system
US20050144363A1 (en) * 2003-12-30 2005-06-30 Sinclair Alan W. Data boundary management

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5798968A (en) 1996-09-24 1998-08-25 Sandisk Corporation Plane decode/virtual sector architecture
US5860124A (en) 1996-09-30 1999-01-12 Intel Corporation Method for performing a continuous over-write of a file in nonvolatile memory

Also Published As

Publication number Publication date
EP2256621A1 (en) 2010-12-01
CN100524209C (zh) 2009-08-05
JP2012099139A (ja) 2012-05-24
US20050144367A1 (en) 2005-06-30
WO2005066770A9 (en) 2005-09-29
TWI280581B (en) 2007-05-01
EP1700204B1 (en) 2014-03-12
EP1700204A1 (en) 2006-09-13
WO2005066770A2 (en) 2005-07-21
JP5438137B2 (ja) 2014-03-12
KR20070012630A (ko) 2007-01-26
JP4977473B2 (ja) 2012-07-18
US7383375B2 (en) 2008-06-03
CN1922571A (zh) 2007-02-28
JP2007517325A (ja) 2007-06-28
TW200535854A (en) 2005-11-01

Similar Documents

Publication Publication Date Title
KR100983212B1 (ko) 데이터 런 프로그래밍
US7433993B2 (en) Adaptive metablocks
US8364883B2 (en) Scheduling of housekeeping operations in flash memory systems
KR100914263B1 (ko) 스크래치 패드 블록
US20050144363A1 (en) Data boundary management
KR101089576B1 (ko) 업데이트 및 스크래치 패드 블록들을 위한 개선된 인덱싱을갖는 비휘발성 메모리 및 방법
JP4399008B2 (ja) 不揮発性メモリおよびマルチストリーム更新追跡を伴う方法
KR101202620B1 (ko) 복수-스트림 업데이팅을 갖는 비휘발성 메모리 및 방법
US20060161724A1 (en) Scheduling of housekeeping operations in flash memory systems

Legal Events

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

Payment date: 20130820

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20140825

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20150819

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20160818

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20170818

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20180816

Year of fee payment: 9