KR101378031B1 - 데이터 파일을 직접적으로 저장하는 메모리 블록의 관리 - Google Patents

데이터 파일을 직접적으로 저장하는 메모리 블록의 관리 Download PDF

Info

Publication number
KR101378031B1
KR101378031B1 KR1020087004689A KR20087004689A KR101378031B1 KR 101378031 B1 KR101378031 B1 KR 101378031B1 KR 1020087004689 A KR1020087004689 A KR 1020087004689A KR 20087004689 A KR20087004689 A KR 20087004689A KR 101378031 B1 KR101378031 B1 KR 101378031B1
Authority
KR
South Korea
Prior art keywords
data
file
block
blocks
files
Prior art date
Application number
KR1020087004689A
Other languages
English (en)
Other versions
KR20080044254A (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 US11/382,228 external-priority patent/US7581057B2/en
Application filed by 샌디스크 테크놀로지스, 인코포레이티드 filed Critical 샌디스크 테크놀로지스, 인코포레이티드
Publication of KR20080044254A publication Critical patent/KR20080044254A/ko
Application granted granted Critical
Publication of KR101378031B1 publication Critical patent/KR101378031B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/34Determination of programming status, e.g. threshold voltage, overprogramming or underprogramming, retention
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0608Saving storage space on storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0613Improving I/O performance in relation to throughput
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0643Management of files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/10Programming or data input circuits
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7201Logical to physical mapping or translation of blocks or pages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7202Allocation control and policies

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Read Only Memory (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

호스트 시스템 데이터 파일들은 각 파일의 고유 ID(identification) 및 파일 내의 데이터의 오프셋과 함께, 그러나, 메모리를 위한 가상 어드레스 공간 또는 임의의 중간 논리 어드레스들을 사용하지 않고 대형 삭제 블록 플래시 메모리 시스템에 직접적으로 기록된다. 파일들이 메모리 내에 저장되는 디렉토리 정보는 호스트에 의해서가 아니라 그 콘트롤러에 의해 메모리 시스템 내에 유지된다. 메모리 블록의 유형은 파일의 데이터가 이미 기록된 블록들의 유형에 의존하여, 파일의 추가 데이터를 수용하도록 선택된다. 데이터를 포함하는 블록들은 최소량의 유효 데이터를 포함하는 것들에서 시작하는 순서로 블록들을 선택하는 프로세스에 의해 그로부터 임의의 미사용 용량을 리클레이밍하기 위해 선택된다.

Description

데이터 파일을 직접적으로 저장하는 메모리 블록의 관리 {MANAGEMENT OF MEMORY BLOCKS THAT DIRECTLY STORE DATA FILES}
본 출원은 반도체 플래시 메모리 같은 재프로그래밍가능한 비휘발성 메모리시스템의 작동에 관한 것으로, 보다 구체적으로는 호스트 장치와 메모리 사이의 인터페이스의 관리에 관한 것이다.
호스트 시스템, 메모리 시스템 및 기타 전자 시스템의 외부 인터페이스를 통해 통신되는 데이터를 어드레스하는 두 가지 주된 기술이 존재한다. 그들 중 하나에서, 시스템에 의해 생성 또는 수신된 데이터 파일의 어드레스는 시스템을 위해 형성된 연속적 논리 어드레스 공간의 별개의(distinct) 범위들에 맵핑된다. 어드레스 공간의 크기는 통상적으로 시스템이 취급할 수 있는 전체 어드레스 범위를 감당하기에 충분하다. 일 예에서, 자기 디스크 저장 드라이브는 이런 논리 어드레스 공간을 통해 컴퓨터 또는 기타 호스트 시스템과 통신한다. 이 어드레스 공간은 디스크 드라이브의 전체 데이터 저장 용량을 어드레스하기에 충분한 크기를 갖는다. 두 기술 중 두 번째 기술에서, 전자 시스템에 의해 수신 또는 생성된 데이터 파일은 고유하게 식별되며, 그 데이터는 파일 내의 오프셋들에 의해 논리적으로 어드레스된다. 이 어드레싱 방법의 형태는 컴퓨터들 또는 기타 호스트 시스템들과 "스마 트 카드"라 알려져 있는 제거가능한 메모리 카드 사이에 사용된다. 스마트 카드는 통상적으로 식별, 은행업무, 매장(point-of-sale) 구매, ATM 액세스 등을 위해 고객에 의해 사용된다.
상업적 플래시 메모리 시스템의 초기 세대에서, 메모리 셀의 직사각형 어레이는 각각 표준 디스크 드라이브 섹터의 데이터 양, 즉, 512 바이트를 저장하는 다수의 셀 그룹으로 분할된다. 에러 교정 코드(ECC)와, 가능하게는 사용자 데이터 및/또는 연계된 사용자 데이터가 저장되는 메모리 셀 그룹에 관한 기타 오버헤드 데이터를 저장하기 위해 16바이트 같은 부가적인 데이터 양이 일반적으로 각 그룹에 포함된다. 각각의 이런 그룹의 메모리 셀은 함께 삭제할 수 있는 최소수의 메모리 셀이다. 즉, 실제로, 삭제 유닛은 포함된 임의의 오버헤드 데이터와 하나의 데이터 섹터를 저장하는 메모리 셀의 수이다. 이 유형의 메모리 시스템의 예는 미국 특허 제5,602,987호 및 제6,426,893호에 개시되어 있다. 메모리 셀들이 그들을 데이터로 재프로그밍하기 이전에 삭제되는 것은 플래시 메모리의 특성이다.
플래시 메모리 시스템은 개인용 컴퓨터, 카메라 등 같은 다양한 호스트와 제거가능하게 연결될 수 있는, 그러나, 또한, 이런 호스트 시스템 내에 내장될 수도 있는 메모리 카드 또는 플래시 드라이브의 형태로 제공되는 것이 가장 일반적이다. 메모리에 데이터를 기록할 때, 통상적으로, 호스트는 메모리 시스템의 연속적 가상 어드레스 공간 내의 섹터, 클러스터 또는 기타 데이터 유닛에 고유 논리 어드레스를 할당한다. 디스크 오퍼레이팅 시스템(DOS) 같이, 호스트는 데이터를 메모리 시스템의 논리 어드레스 공간 내의 어드레스들에 기록하고, 그로부터 데이터를 판독 한다. 메모리 시스템 내의 콘트롤러는 호스트로부터 수신된 논리 어드레스를 데이터가 실제 저장되어 있는 메모리 어레이 내의 물리 어드레스로 번역하고, 그 후, 이들 어드레스 번역의 트랙을 유지한다. 메모리 시스템의 데이터 저장 용량은 적어도 메모리 시스템을 위해 규정된 전체 논리 어드레스 공간에 걸쳐 어드레스가능한 데이터의 양 만큼 크다.
후세대의 플래시 메모리 시스템에서, 삭제 유닛의 크기는 다수의 데이터 섹터를 저장하기에 충분한 메모리 셀의 블록으로 증가되었다. 메모리 시스템이 연결된 호스트 시스템이 이런 섹터들 같은 작은 최소 유닛으로 데이터를 프로그램밍하고 판독하지만, 플래시 메모리의 단일 삭제 유닛에는 많은 수의 섹터가 저장된다. 호스트가 데이터의 논리 섹터를 갱신 또는 교체할 때, 블록 내의 데이터의 일부 섹터가 사용되지 않는(obsolete) 것이 일반적이다. 블록에 저장된 임의의 데이터가 겹쳐쓰게 되기 이전에 전체 블록이 삭제되어야만 하기 때문에, 통상적으로, 새로운 또는 갱신된 데이터는 삭제된, 그리고, 데이터를 위한 잔여 용량을 갖는 다른 블록에 저장된다. 이 프로세스는 원래의 블록이 메모리 내의 가용 공간을 점유하는 무용(obsolete) 데이터를 갖는 상태가 되게 한다. 그러나, 이 블록은 임의의 유효 데이터가 내부에 남아있는 경우 삭제될 수 없다.
따라서, 메모리의 저장 용량을 보다 양호하게 활용하기 위해, 그들로부터 이들 데이터가 복사되는 블록(들)이 추후 삭제되고, 그 전체 저장 용량이 재사용될 수 있도록, 이들을 삭제된 블록에 복사함으로써, 데이터의 유효한 부분적 블록 양을 병합 또는 수집하는 것이 일반적이다. 또한, 그 논리 어드레스의 수준에서 블 록 내의 데이터 섹터를 그룹화하기 위해, 데이터를 복사하는 것이 바람직할 수도 있으며, 그 이유는 이것이 데이터의 판독 및 판독된 데이터의 호스트로의 전달 속도를 증가시키기 때문이다. 이런 데이터 복사가 너무 빈번히 이루어지는 경우, 메모리 시스템의 작동 성능이 열화된다. 이는 특히, 흔한 경우인, 메모리의 저장 용량이 시스템의 논리 어드레스 공간을 통해 호스트에 의해 어드레스될 수 있는 데이터의 양 보다 미소하게 많은 메모리 시스템의 작동에 영향을 미친다. 이 경우, 데이터 병합 또는 수집은 호스트 프로그래밍 명령이 실행되기 이전에 필요할 수 있다. 이때, 결과적으로 프로그래밍 시간이 증가된다.
블록의 크기는 주어진 반도체 영역에 저장될 수 있는 데이터의 비트의 수를 증가시키기 위해 메모리 시스템의 연속적 세대들에서 증가하여 왔다. 256 데이터 섹터 이상을 저장하는 블록이 일반화되었다. 부가적으로, 데이터 프로그래밍 및 판독의 병렬화 정도를 증가시키기 위해, 두 개, 네 개 또는 그 이상의 서로 다른 어레이들 또는 서브 어레이들의 블록들이 메타블록으로 논리적으로 함께 링크되는 경우가 많다. 이런 큰 용량의 작동 유닛에서, 이들을 효과적으로 작동시키는 것이 과제이다.
이런 메모리 시스템을 위한 일반적 호스트 인터페이스는 디스크 드라이브와 함께 일반적으로 사용되는 것과 유사한 논리 어드레스 인터페이스이다. 메모리가 연결되어 있는 호스트에 의해 생성된 파일은 인터페이스의 논리 어드레스 공간 내의 고유 어드레스를 할당받는다. 그 후, 메모리 시스템은 일반적으로 데이터를 논리 어드레스 공간과 물리 블록 또는 메모리의 메타블록 사이에서 맵핑한다. 메모 리 시스템은 논리 어드레스 공간이 물리 메모리로 맵핑되는 방식의 트랙을 유지하지만, 호스트는 이를 알지 못한다. 호스트는 논리 어드레스 공간 내의 그 데이터 파일의 어드레스의 트랙을 유지하지만, 메모리 시스템은 이 맵핑에 대한 지식 없이 작동한다.
이런 대형 삭제 블록 플래시 메모리 시스템을 효과적으로 작동시키는데 겪는 다양한 정도의 특정 문제점들을 극복하는 다수의 기술이 개발되어 왔다. 본 발명은 한편으로는 근본적 변화, 즉, 메모리와 호스트 시스템 사이의 데이터 전달 인터페이스를 변화시키는 것에 기초한다. 가상 어드레스 공간 내의 논리 어드레스의 사용에 의해 그들 사이에서 데이터를 통신하는 대신, 데이터 파일은 호스트에 의해 할당된 파일명에 의해 식별되고, 파일 내의 오프셋 어드레스에 의해 액세스된다. 이때, 메모리 시스템은 각 섹터 또는 다른 데이터 유닛이 속하는 호스트 파일을 안다. 여기서 언급되는 파일 유닛은 순차적 오프셋 어드레스를 가지는 것에 의한 방식 등으로 순서화된, 그리고, 호스트 연산 시스템에서의 응용 프로그램 작동에 의해 생성 및 고유하게 식별된 데이터의 집합이다.
이는 대부분의 현용의 상업적 메모리 시스템에서는 사용되지 않으며, 그 이유는 파일을 식별하지 않고 논리 어드레스의 일반적 집합에 의해 모든 파일 내의 메모리 시스템에 대한 데이터를 식별하기 때문이다. 논리 어드레스를 사용하는 대신 파일 오브젝트에 의해 호스트 데이터를 식별함으로써, 메모리 시스템 콘트롤러는 이런 빈번한 데이터 병합 및 조각 모음에 대한 필요성을 감소시키는 방식으로 데이터를 저장할 수 있다. 따라서, 데이터 복사 작업의 빈도수 및 복사된 데이터의 양이 현저히 감소되고, 그에 의해, 메모리 시스템의 데이터 프로그래밍 및 판독 성능을 증가시킨다. 또한, 메모리 시스템 콘트롤러는 호스트 파일이 저장되는 메모리 블록의 디렉토리 및 인덱스 테이블 정보를 유지한다. 이때, 호스트가 현재는 논리 어드레스 인터페이스를 관리하기 위해 필요한 파일 할당 테이블(FAT)을 유지할 필요가 없다.
본 발명의 양태에 따라서, 메모리 블록은 메모리의 서로 다른 블록들 전반에 걸쳐 파일의 조각화 정도를 제어하는 방법에 의해 파일의 데이터를 기록하기 위해 선택된다. 이는 새로운 데이터를 수용하도록 완전히 삭제된 블록을 자유롭게 하기 위해 보다 적은 수의 블록들에 파일의 데이터를 조합하기 위하여 수행될 필요가 있는 오버헤드 작업의 수 및 빈도수를 감소시킨다. 따라서, 파일의 데이터가 기록되는 블록을 최초에 선택하고, 효율적 방식으로 메모리의 전체 용량을 활용하기 위해 블록들 사이에서 데이터를 추후 이동시키는 것에 덜 의존함으로써, 메모리 시스템의 성능이 향상된다.
특정 실시예에서, 파일의 데이터가 이미 저장되어 있는 블록의 유형들에 기초하여 호스트 또는 다른 블록으로부터 수신된 파일의 데이터를 기록하기 위해 일 유형의 액티브 블록이 선택된다. 다수의 허용된 상태 중 하나가 시스템에 저장된 각 파일에 할당되며, 각 상태는 삭제된 용량을 포함하는 및/또는 둘 이상의 파일의 데이터를 포함하는 하나 이상의 블록 유형의 조합에 의해 규정된다. 파일의 데이터가 기록되는 액티브 블록으로서 선택되는 블록의 유형은 파일의 현재 상태에 기초한다.
본 발명의 다른 양태, 장점, 특징 및 세부사항은 첨부 도면과 연계하여 이루어지는 하기의 그 예시적 실시예의 설명에 포함되어 있다.
여기에서 참조된 모든 특허들, 특허 출원들, 문헌들, 다른 출판물들, 문서들 및 사물들(things)은 모든 목적을 위해, 그 전문이 참조로 본 명세서에 통합되어 있다. 통합된 발간물, 문서, 사물 중 임의의 것과 본 출원 사이의 용어의 사용 또는 정의가 불일치 또는 상충되는 경우, 본 출원의 것들이 우선한다.
도1은 호스트 및 현재 구현되어 있는 연결된 비휘발성 메모리 시스템을 개략적으로 예시하는 도면.
도2는 도1의 비휘발성 메모리로서 사용하기 위한 예시적 플래시 메모리 시스템의 블록도.
도3은 도2의 시스템에 사용될 수 있는 메모리 셀 어레이의 대표적 회로도.
도4는 도2의 시스템의 예시적 물리 메모리 조직을 예시하는 도면.
도5는 도4의 물리 메모리의 일부의 확대도.
도6은 도4 및 도5의 물리 메모리의 일부의 다른 확대도.
도7은 호스트와 재프로그래밍 가능한 메모리 시스템 사이의 일반적 종래 기술 논리 어드레스 인터페이스를 예시하는 도면.
도8은 호스트와 재프로그래밍 가능한 메모리 시스템 사이의 일반적 종래 기술 논리 어드레스 인터페이스를 도7과는 다른 방식으로 예시하는 도면.
도9는 본 발명에 따른, 호스트와 재프로그래밍 가능한 메모리 시스템 사이의 직접 파일 저장 인터페이스를 예시하는 도면.
도10은 본 발명에 따른, 호스트와 재프로그래밍 가능한 메모리 시스템 사이의 직접 파일 저장 인터페이스를 도9와는 다른 방식으로 예시하는 도면.
도11은 직접 데이터 파일 저장 인터페이스와 함께 작동하는 메모리 시스템의 기능 블록도.
도12는 직접 데이터 파일 메모리의 작동 사이클을 예시하는 도면.
도13A 내지 도13D는 파일의 데이터를 직접적으로 메모리 내에 기록하는 네 가지 다른 실시예를 도시하는 도면.
도14A 내지 도14E는 다양한 허용된 블록의 유형의 조합으로 저장된 데이터 파일의 예를 도시하는 도면.
도15는 개별 파일의 데이터가 저장되는 블록의 유형에 의해 허용된 파일 상태의 리스트.
도16은 도15에 나열된 파일 상태들 사이의 허용된 1차 트랜지션을 도시하는 상태도.
도17은 도16의 상태도에 예시된 1차 파일 상태 트랜지션을 설명하는 표.
도18은 도15에 나열된 파일 상태들 사이의 결과적인 2차 트랜지션을 도시하는 상태도.
도19는 도18의 상태도에 예시된 2차 파일 상태 트랜지션을 설명하는 표.
도20은 도15 내지 도20의 조건하에 액티브 블록으로서 할당된 블록의 유형을 나열하는 요약표.
도21A 내지 도21D는 블록 리클레임(reclaim) 작동의 예를 도시하는 도면.
도22는 일반적 항목으로 리클레임 작동을 예시하는 플로우차트.
도23은 통상적 부분 메모리 셀 블록에 저장된 데이터의 유형을 예시하는 도면.
도24는 도22의 플로우차트의 단계들 중 하나를 수행하는 특정 실시예의 세부사항을 제공하는 도면.
도25는 도22의 플로우차트의 동일 단계를 실행하기 위한 대안 실시예의 세부사항을 제공하는 도면.
도26은 또 다른 실시예의 두 개의 블록 리스트 상에 배치된 블록 유형을 규정하는 표.
플래시 메모리 시스템 일반 설명
일반적 플래시 메모리 시스템 및 호스트 장치와의 통상적 작동이 도1 내지 도8에 관련하여 설명된다. 이런 시스템에서, 본 발명의 다양한 양태가 구현될 수 있다. 도1의 호스트 시스템(1)은 플래시 메모리(2) 내에 데이터를 저장하고, 그로부터 데이터를 검색한다. 비록, 플래시 메모리가 호스트 내에 내장될 수 있지만, 메모리(2)는 기계적 및 전기적 커넥터의 정합부(3, 4)를 통해 호스트에 제거가능하게 연결된 보다 대중적인 카드 형태인 것으로 예시되어 있다. 상표명 CompactFlash(CF), MultiMediaCard(MMC), Secure Digital(SD), miniSD, microSD, Memory Stick, SmartMedia 및 TransFlash 하에 판매되는 것들이 예들이 되는, 상업적으로 입수할 수 있는 현용의 다수의 다양한 플래시 메모리 카드가 존재한다. 비록, 이들 카드는 그 표준화된 제원(specifications)에 따른 고유한 기계적 및/또는 전기적 인터페이스를 가지지만, 각각에 포함된 플래시 메모리는 매우 유사하다. 이들 카드는 본 출원의 양수인인 SanDisk Corporation으로부터 모두 입수할 수 있다. SanDisk는 또한 그 Cruzer 상표명하에 일련의 플래시 드라이브를 제공하며, 이들은 호스트의 USB 소켓에 대한 플러그 결합에 의한 호스트와의 접속을 위해 유니버셜 시리얼 버스(USB)를 갖는 작은 패키지 내의 휴대형 메모리 시스템이다. 이들 메모리 카드 및 플래시 드라이브 각각은 호스트와 인터페이스 작용하여 그들 내의 플래시 메모리의 작동을 제어하는 콘트롤러를 포함한다.
이런 메모리 카드 및 플래시 드라이브를 사용하는 호스트 시스템은 다수이며, 다양하다. 이들은 퍼스널 컴퓨터(PC), 랩톱 및 기타 휴대용 컴퓨터, 셀룰러 전화, 퍼스널 디지털 어시스턴트(PDA), 디지털 스틸 카메라, 디지털 무비 카메라 및 휴대용 오디오 플레이어를 포함한다. 호스트는 통상적으로, 하나 이상의 유형의 메모리카드 또는 플래시 드라이브를 위한 내장 소켓을 포함하지만, 일부는 메모리 카드가 플러그결합되는 어뎁터를 필요로 한다. 메모리 시스템은 일반적으로, 그 자체의 메모리 콘트롤러와 드라이버를 포함하지만, 또한, 대신, 메모리가 연결되는 호스트에 의해 실행되는 소프트웨어에 의해 제어되는 일부 메모리 전용 시스템도 존재한다. 콘트롤러를 포함하는, 특히, 이들이 호스트 내에 내장되어 있는 일부 메모리 시스템에서, 메모리, 콘트롤러 및 드라이버는 종종 단일 집적 회로 칩 상에 형성된다.
도1의 호스트 시스템(1)은 메모리(2)가 연결되는 한, 회로와 소프트웨어의 조합으로 구성되는 두 개의 주요 부분을 갖는 것으로 볼 수 있다. 이들은 메모리(2)와 인터페이스연결된 어플리케이션 부분(5)과 드라이버 부분(6)이다. 예로서, 퍼스널 컴퓨터에서, 어플리케이션 부분(5)은 프로세서 구동 워드 프로세싱, 그래픽스, 제어 또는 기타 대중적 응용 소프트웨어를 포함할 수 있다. 주로 단일 세트의 기능들을 수행하도록 전용화된 카메라, 셀룰러 전화 또는 기타 호스트 시스템에서, 어플리케이션 부분(5)은 사진을 찍고 저장하도록 카메라를 작동시키고, 호(call)를 발신 및, 수신하도록 셀룰러 전화를 작동시키는 등의 소프트웨어를 포함한다.
도1의 메모리 시스템(2)은 플래시 메모리(7)와 회로(8)를 포함하며, 이들 양자 모두는 데이터를 전후로 전달하고 메모리(7)를 제어하도록 카드가 연결되는 호스트와 인터페이스연결된다. 콘트롤러(8)는 데이터 프로그래밍 및 판독 동안 통상적으로 호스트(1)에 의해 사용되는 데이터의 논리 어드레스와, 메모리(7)의 물리 어드레스 사이의 변환을 수행한다.
도2를 참조하면, 도1의 비휘발성 메모리(2)로서 사용될 수 있는 통상적인 플래시 메모리 시스템의 회로가 설명되어 있다. 시스템 콘트롤러는 일반적으로 단일 집적 회로 칩(11)상에 구현되며, 이 단일 집적 회로 칩은 시스템 버스(13)를 거쳐 하나 이상의 집적 회로 메모리칩과 병렬로 연결되며, 하나의 이런 메모리 칩(15)이 도2에 도시되어 있다. 예시된 특정 버스(13)는 데이터를 전달하기 위한 전도체(17)의 분리된 세트와, 제어 및 상태 신호를 위한 세트(21)와 메모리 어드레스를 위한 세트(19)를 포함한다. 대안적으로, 단일 세트의 전도체가 이들 3개 기능들 사이에서 시간 할당(time shared)될 수 있다. 또한, 현재 2006/0031593A1으로 공개된 발명의 명칭이 "링 버스 구조 및 플래시 메모리 시스템에서의 그 사용"인 2004년 8월 9일자로 출원된 미국 특허 출원 제10/915,039호에 설명된 링 버스 같은 다른 구조의 시스템 버스가 사용될 수 있다.
통상적 제어 칩(11)은 인터페이스 회로(25)를 통해 시스템 버스(13)와 인터페이스연결된 그 소유의 내부 버스(23)를 구비한다. 버스에 일반적으로 연결되어 있는 주 기능들은 프로세서(27)(마이크로프로세서 또는 마이크로콘트롤러 같은), 시스템을 초기화("부트")하기 위한 코드를 포함하는 판독 전용 메모리(ROM)(29), 메모리와 호스트 사이에서 전달되는 데이터를 버퍼링하기 위해 주로 사용되는 랜덤 액세스 메모리(RAM)(31) 및 호스트와 메모리 사이에서 콘트롤러를 통하여 전달되는 데이터를 위한 에러 교정 코드(ECC)를 계산 및 점검하는 회로(33)이다. 콘트롤러 버스(23)는 회로(35)를 통해 호스트 시스템과 인터페이스 연결되며, 이는 메모리 카드내에 포함되어 있는 도2의 시스템의 경우에 커넥터(4)의 일부인 카드의 외부 접점(37)을 통해 이루어진다. 클록(clock)(39)은 콘트롤러(11)의 다른 구성요소 각각과 연결되어 그에 의해 사용된다.
시스템 버스(13)와 연결된 임의의 다른 것들과 메모리 칩(15)은 통상적으로, 다수의 서브어레이 또는 평면으로 조직화된 메모리 셀의 어레이를 포함하며, 단순화를 위해 이런 평면들(41, 43) 두 개가 예시되어 있지만, 4개 또는 8개의 이런 평면 같이 보다 많은 수가 대신 사용될 수 있다. 대안적으로, 칩(15)의 메모리 셀 어레이는 평면으로 분할되지 않을 수 있다. 그러나, 이렇게 분할될 때, 각 평면은 서로 매우 독립적으로 작동할 수 있는 그 소유의 컬럼(column) 제어 회로(45, 47)를 구비한다. 회로(45, 47)는 시스템 버스(13)의 어드레스 부분(19)으로부터 그 각각의 메모리 셀 어레이의 어드레스를 수신하고, 이들을 디코딩하여 각 비트 라인들(49, 51) 중 특정 하나 이상을 어드레스한다. 워드 라인(53)은 어드레스 버스(19) 상에 수신된 어드레스에 응답하여 로우(row) 제어 회로(55)를 통해 어드레스된다. 소스 전압 제어 회로(57, 59)는 또한 P-웰 전압 제어 회로(61, 63)이 그런 것 같이 각각의 평면과 연결된다. 메모리 칩(15)이 메모리 셀의 단일 어레이를 구비하는 경우, 그리고, 시스템 내에 둘 이상의 이런 칩이 존재하는 경우, 각 칩의 어레이는 상술한 다중 평면 칩 내의 평면 또는 서브어레이와 유사하게 작동될 수 있다.
시스템 버스(13)의 데이터 부분(17)과 연결되어 있는 각각의 데이터 입력/출력 회로(65, 67)를 통해 데이터가 평면들(41, 43)의 내외로 전달된다. 회로들(65, 67)은 각각의 컬럼 제어 회로(45, 47)를 통해 평면에 연결된 라인(69, 71)을 통해 그 각각의 평면의 메모리 셀로부터 데이터를 판독하고, 데이터를 메모리 셀에 프로그램한다.
비록, 콘트롤러(11)가 데이터를 프로그램하고, 데이터를 판독하고, 삭제하고, 다양한 운영(housekeeping) 문제에 관여하도록 메모리 칩(15)의 작동을 제어하지만, 각 메모리 칩은 또한 이런 기능을 수행하기 위해 콘트롤러(11)로부터의 명령을 실행하는 일부 제어 회로를 포함한다. 인터페이스 회로(73)는 시스템 버스(13) 의 제어 및 상태 부분(21)에 연결된다. 콘트롤러로부터의 명령은 상태 기계(75)에 제공되고, 상태 기계는 그 후 이들 명령을 실행하기 위해 다른 회로의 특정 제어를 제공한다. 제어 라인(77-81)은 상태 기계(75)를 도2에 도시된 바와 같은 이들 다른 회로와 연결한다. 상태 기계(75)로부터의 상태 정보는 버스 부분(21)을 거쳐 콘트롤러(11)에 전송되도록 인터페이스(73)에 라인(83)을 거쳐 통신된다.
메모리 셀 어레이(41, 43)의 NAND 아키텍쳐가 현재 바람직하지만, NOR 같은 다른 아키텍쳐도 대신 사용될 수 있다. NAND 플래시 메모리와, 메모리 시스템의 일부로서의 그 작동은 미국 특허 제5,570,315호, 제5,774,397호, 제6,046,935호, 제6,373,746호, 제6,456,528호, 제6,522,580호, 제6,771,536호 및 제6,781,877호와, 미국 특허 출원 공보 제2003/0147278호를 참조할 수 있다.
예시적 NAND 어레이는 도2의 메모리 시스템의 메모리 셀 어레이(41)의 일부인 도3의 회로도에 예시되어 있다. 다수의 글로벌 비트 라인이 제공되고, 설명의 단순화를 위해 도3에는 단지 네 개의 이런 라인(91-94)만이 도시되어 있다. 다수의 일련의 연결된 메모리 셀 스트링(97-104)이 기준 전위와 이들 비트 라인 중 하나 사이에 연결된다. 대표적으로, 메모리 셀 스트링(99)을 사용하여, 복수의 전하 저장 메모리 셀(107-110)이 스트링의 각 단부에서 선택 트랜지스터(111, 112)와 직렬로 연결된다. 스트링의 선택 트랜지스터들이 전도성을 나타낼 때, 스트링은 그 비트 라인과 기준 전위 사이에 연결된다. 한번에 그 스트링 내의 하나의 메모리 셀이 프로그램되거나 판독된다.
도3의 워드 라인(115-118)은 메모리 셀의 다수의 스트링 각각의 하나의 메모 리 셀의 전하 저장 요소에 걸쳐 개별적으로 연장하고, 게이트(119, 120)는 스트링의 각 단부에서 선택 트랜지스터의 상태를 제어한다. 공용 워드 및 제어 게이트 라인(115 -120)을 공유하는 메모리 셀 스트링은 함께 삭제되는 메모리 셀의 블록(123)을 형성하도록 형성된다. 이 셀의 블록은 한번에 물리적으로 삭제가능한 최소수의 셀을 포함한다. 워드 라인(115-118) 중 하나를 따른, 메모리 셀 중 하나의 로우가 한번에 프로그램된다. 통상적으로, NAND 어레이의 로우는 전술된 순서로 프로그램되며, 이 경우, 접지 또는 다른 공용 전위에 연결된 스트링의 단부에 가장 근접한 워드 라인(118)을 따른 로우에서 시작한다. 워드 라인(117)을 따른 메모리 셀의 로우가 다음에 프로그램되며, 이런 식으로 블록(123) 전반에 걸쳐 수행된다. 워드 라인(115)을 따른 로우가 마지막에 프로그램된다.
제2 블록(125)은 유사하게 제1 블록(123)의 스트링과 동일한 글로벌 비트에 그 메모리 셀의 스트링들이 연결되지만, 서로 다른 세트의 워드 및 제어 게이트 라인을 갖는다. 워드 및 제어 게이트 라인은 로우 제어 회로(55)에 의해 그 적절한 작동 전압으로 구동된다. 도2의 평면(1, 2) 같은 시스템 내의 하나 이상의 평면 또는 서브어레이가 존재하는 경우, 하나의 메모리 아키텍쳐는 그들 사이에서 연장하는 공용 워드 라인을 사용한다. 대안적으로, 공용 워드 라인을 공유하는 둘 이상의 평면들 또는 서브어레이가 존재할 수 있다. 다른 메모리 아키텍쳐에서, 개별 평면들 또는 서브 어레이의 워드 라인은 별개로 구동된다.
다수의 NAND 특허 및 상술한 공개된 출원에 설명된 바와 같이, 메모리 시스템은 각 전하 저장 요소 또는 영역에 둘 이상의 검출가능한 전하 레벨을 저장하도 록 작동할 수 있으며, 그에 의해, 각각 내에 하나 이상의 데이터 비트를 저장한다. 메모리 셀의 전하 저장 요소는 가장 일반적으로는 전도성 부유 게이트이지만, 대안적으로, 미국 특허 출원 공보 제2003/0109030에 설명된 바와 같이, 비전도성 유전체 전하 포획 요소일 수 있다.
도4는 추가로 후술된 예에서 사용되는 플래시 메모리 셀 어레이(7)(도1)의 조직을 개념적으로 예시한다. 메모리 셀의 네 개의 평면 또는 서브 어레이(131, 134)는 단일 집적 메모리 셀 칩 상에, 두 개의 칩 상에(각 칩 상의 두 개의 평면) 또는 네 개의 별개의 칩 상에 존재할 수 있다. 이 특정 배열은 하기의 설명에 대하여 중요하지 않다. 물론, 1, 2, 8, 16 또는 그 이상의 다른 수의 평면들이 시스템 내에 존재할 수 있다. 평면들은 각각의 평면(131, 134) 내에 배치된 블록(137, 138, 139, 140) 같은 직사각형에 의해 도4에 도시된 메모리 셀의 블록으로 독립적으로 분할된다. 각 평면 내에 수십 또는 수백의 블록들이 존재할 수 있다. 상술한 바와 같이, 메모리 셀의 블록은 삭제 유닛이며, 물리적으로 함께 삭제가능한 가장 작은 수의 메모리 셀이다. 그러나, 병렬화의 증가시, 블록들은 보다 큰 메타블록 유닛으로 작동된다. 각 평면으로부터의 하나의 블록은 메타블록을 형성하도록 함께 논리적으로 링크된다. 네 개의 블록(137-140)이 하나의 메타블록(141)을 형성하는 것으로 도시되어 있다. 메타블록 내의 셀들 모두는 통상적으로 함께 삭제된다. 메타블록을 형성하기 위해 사용되는 블록은 블록(145-148)으로 구성된 제2 메타블록에 도시되어 있는 바와 같이, 그 각각의 평면 내의 동일 상대 위치에 한정될 필요는 없다. 비록, 높은 시스템 성능을 위해 평면 모두에 걸쳐 메타블록이 연 장하는 것이 바람직한 것이 일반적이지만, 메모리 시스템은 서로 다른 평면의 하나, 둘 또는 세 개의 블록들 중 임의의 수 또는 모두로 이루어진 메타블록을 동적으로 형성하기 위한 능력을 갖고 작동될 수 있다. 이는 하나의 프로그래밍 작동에서의 저장을 위해 가용한 데이터의 양과 메타 블록의 크기가 보다 근접하게 일치될 수 있게 한다.
개별 블록은 순차적으로 작동 목적을 위해 도5에 예시된 바와 같이 메모리 셀의 페이지로 분할된다. 예로서, 블록(131-134) 각각의 메모리 셀은 각각 8개 페이지(P0-P7)로 분할된다. 대안적으로, 각 블록 내에 16, 32 또는 그 이상의 메모리 셀의 페이지들이 존재할 수 있다. 페이지는 한번에 프로그램되는 최소량의 데이터를 포함하는 블록 내에서의 데이터 프로그래밍 및 판독의 유닛이다. 도3의 NAND 아키텍쳐에서, 페이지는 블록 내의 워드 라인을 따른 메모리 셀로 형성된다. 그러나, 메모리 시스템 작동 병렬화를 증가시키기 위해 둘 이상의 블록들 내의 이런 페이지가 메타페이지로 논리적으로 링크될 수 있다. 메타페이지(151)는 도5에 예시되어 있으며, 네 개의 블록(131-134) 각각으로부터의 하나의 물리적 페이지로 형성된다. 예로서, 메타페이지(151)는 네 개의 블록 각각의 페이지(P2)를 포함하지만, 메타페이지의 페이지들은 블록 각각 내의 동일한 상대 위치를 가질 필요는 없다.
비록, 높은 시스템 성능을 위해, 모든 4개 평면들에 걸쳐 병렬로 최대량의 데이터를 프로그램 및 판독하는 것이 바람직하지만, 메모리 시스템은 또한, 서로 다른 평면 내의 개별 블록 내의 하나, 둘 또는 3개 페이지 중 임의의 것 또는 모두로 메타페이지를 형성하도록 작동될 수 있다. 이는 프로그래밍 및 판독 작동이 편 리하게 병렬로 취급될 수 있는 데이터의 양을 적응적으로 일치시킬 수 있게 하며, 메타페이지의 일부가 데이터로 프로그램되지 않고 남아있는 경우를 감소시킨다.
도5에 예시된 바와 같이, 다수의 평면의 물리적 페이지로 형성된 메타페이지는 이들 다수의 평면들의 워드 라인 로우를 따른 메모리 셀을 포함한다. 하나의 워드 라인 로우 내의 모든 셀을 동시에 프로그래밍하는 대신, 이들은 둘 이상의 간삽된(interleaved) 그룹으로 교번적으로 프로그래밍되는 것이 보다 일반적이며, 각 그룹은 한 페이지의 데이터(단일 블록 내의) 또는 하나의 메타페이지의 데이터(다수의 블록에 걸쳐)를 저장한다. 메모리 셀을 한번에 교번적으로 프로그래밍함으로써, 데이터 레지스터 및 감도 증폭기를 포함하는 주변 회로의 유닛이 각 비트 라인을 위해 제공될 필요가 없으며, 대신, 인접 비트 라인들 사이에서 시간 할당된다. 이는 주변 회로를 위해 필요한 기판 공간의 양을 경제화하고, 메모리 셀이 로우를 따라 증가된 밀도로 팩킹될 수 있게 한다. 달리는, 주어진 메모리 시스템으로부터 가용한 병렬화를 최대화하기 위해 로우를 따른 모든 셀을 동시에 프로그램하는 것이 바람직하다.
도3을 참조하면, 로우를 따른 모든 다른 메모리 셀에 데이터를 동시에 프로그래밍하는 것은 도시된 단일 로우 대신 NAND 스트링들의 적어도 하나의 단부를 따른 두 개의 선택 트랜지스터(미도시)의 로우를 제공함으로써, 가장 편리하게 달성된다. 이때, 하나의 로우의 선택 트랜지스터들은 하나의 제어 신호에 응답하여 블록 내의 모든 다른 스트링을 그 각각의 비트 라인에 연결하고, 다른 로우의 선택 트랜지스터들은 다른 제어 신호에 응답하여 개재된(intervening) 모든 다른 스트링 을 그 각각의 비트 라인에 연결한다. 따라서, 각각의 메모리 셀의 로우에 두 페이지의 데이터가 기록된다.
각 논리 페이지 내의 데이터의 양은 통상적으로 정수인, 하나 이상의 데이터의 섹터이며, 각 섹터는 관례상 512 바이트의 데이터를 포함한다. 도6은 페이지 또는 메타페이지의 데이터 중 두 섹터(153, 155)의 논리 데이터 페이지를 보여준다. 각 섹터는 일반적으로 사용자 또는 시스템 데이터가 저장되는 512 바이트로 이루어진 일부(157)와, 이 부분(157) 내의 데이터 또는 그것이 저장되는 블록 또는 물리 페이지 중 어느 하나에 관련된 오버헤드 데이터를 위한 다른 수의 바이트(159)를 포함한다. 오버헤드 데이터의 바이트 수는 통상적으로 16 바이트이며, 섹터(153, 155) 각각을 위해 총 528 바이트를 구성한다. 오버헤드 부분(159)은 프로그래밍 동안 데이터 부분(157)으로부터 계산된 ECC와, 그 논리 어드레스와, 블록이 삭제 및 재프로그래밍된 횟수의 경험 카운트(experience count of the number of times)와, 하나 이상의 제어 플래그와, 작동 전압 레벨 및/또는 등등과, 이런 오버헤드 데이터(159)로부터 계산된 ECC의 합을 포함할 수 있다. 대안적으로, 오버헤드 데이터(159) 또는 그 일부는 다른 블록의 다른 페이지들에 저장될 수 있다.
메모리 병렬화가 증가함에 따라, 메타블록의 데이터 저장 능력이 증가하고, 그 결과로서 또한 데이터 페이지 및 메타페이지가 증가한다. 이어서, 데이터 페이지는 2개 이상의 데이터 섹터를 수용할 수 있다. 데이터 페이지에 2개의 섹터가 있고 메타페이지 당 2개의 데이터 페이지가 있는 경우에, 메타페이지에는 4개의 섹터가 존재한다. 따라서, 각 메타페이지는 2048 바이트의 데이터를 저장한다. 이 것은 고도로 병렬화되어 있어서, 열에서의 메모리 셀의 개수가 더욱 증가되더라도 증가될 수 있다. 이 이유로, 플래시 메모리의 폭은 페이지 및 메타페이지에서의 데이터량을 증가시키도록 연장된다.
전술한 물리적으로 작은 재프로그래밍 가능한 비휘발성 메모리 카드와 플래시 드라이브는 512 메가바이트(MB), 1 기가바이트(GB), 2 GB 및 4GB의 데이터 저장 능력을 갖도록 상업적으로 이용될 수 있고, 그 능력은 더욱 더 높아질 수 있다. 도7은 호스트와 그러한 매스 메모리 시스템 간의 가장 일반적인 인터페이스를 도시하고 있다. 호스트는 어플리케이션 소프트웨어에 의해 발생되거나 사용된 데이터 파일이나 호스트에 의해 수행된 펌웨어 프로그램을 취급한다. 워드 처리 데이터 파일이 일례이고, 컴퓨터 지원 설계(CAD) 소프트웨어의 드로잉 파일이 PC, 랩톱 컴퓨터 등의 일반적인 컴퓨터 호스트에서 주로 발견되는 다른 예이다. pdf 포맷의 문서가 또한 그러한 파일이다. 스틸 디지털 비디오 카메라는 메모리 카드에 저장된 각 화상을 위한 데이터 파일을 발생시킨다. 셀룰러 전화는 전화 디렉토리 등의 내부 메모리 카드의 파일로부터의 데이터를 이용한다. PDA는 어드레스 파일, 캘린더 파일 등의 여러가지 다른 파일을 저장하고 이용한다. 임의의 그러한 용례에서, 메모리 카드는 또한 호스트를 작동시키는 소프트웨어를 수용할 수 있다.
호스트와 메모리 시스템 간의 일반적인 논리 인터페이스가 도7에 도시되어 있다. 연속적인 논리 어드레스 공간(161)은 메모리 시스템에 저장될 수 있는 모든 데이터에 대해 어드레스를 제공하기에 충분히 크다. 호스트 어드레스 공간은 통상적으로 데이터 클러스터의 증분(increment)으로 분할된다. 각 클러스터는 소정의 호스트 시스템 내에 구성되어 대략 통상적인 4 내지 64 섹터에 다수의 데이터 섹터를 수용할 수 있다. 표준적인 섹터는 512 데이터 바이트를 수용한다.
도7의 예에는 생성된 3개의 파일 1, 2 및 3이 도시되어 있다. 호스트 시스템에서 가동되는 어플리케이션 프로그램은 정돈된 데이터 세트로서 각 파일을 생성하여 특유의 네임 또는 다른 기준에 의해 확인한다. 다른 파일에 아직 배치되지 않은 충분히 유효한 논리 어드레스 공간이 호스트에 의해 파일 1에 할당된다. 파일 1은 연속적인 범위의 유효한 논리 어드레스가 할당된 것으로 도시되어 있다. 호스트 작동 소프트웨어를 위한 특정한 범위와 같이 특정한 목적을 위해 어드레스 범위가 또한 일반적으로 할당되고, 이들 어드레스는 이어서 호스트가 논리 어드레스를 데이터에 할당할 때에 어드레스가 이용되지 않더라도 데이터를 저장하기 위해 비워진다(avoided for).
파일 2가 호스트에 의해 나중에 생성되면, 호스트는 유사하게 도7에 도시된 바와 같이 논리 어드레스 공간(161) 내에 2개의 상이한 범위의 연속적인 어드레스를 할당한다. 파일이 연속적인 논리 어드레스를 할당할 필요는 없지만, 이미 다른 파일에 할당된 어드레스 범위 사이 내에 있는 어드레스의 부분일 수 있다. 이 예는 호스트에 의해 생성된 또 다른 파일 3이 이전에 파일 1 및 2와 다른 데이터에 할당되지 않은 호스트 어드레스 공간의 다른 부분에 할당된다는 것을 보여주고 있다.
호스트는 변환(160)에 의해 다양한 호스트 파일에 호스트에 의해 할당되는 논리 어드레스가 유지되는 파일 할당 테이블(FAT)을 유지시킴으로써, 메모리 논리 어드레스 공간의 트랙을 유지한다. FAT 테이블은 신규 파일이 저장되고, 다른 파일들이 삭제되며, 파일이 변경될 때 등에 호스트에 의해 자주 갱신되는 경우가 많다. FAT 테이블은 통상적으로 호스트 메모리에 저장되는데, 때때로 갱신되는 비휘발성 메모리에 사본이 또한 저장된다. 상기 사본은 통상적으로 임의의 다른 데이터 파일과 같이 논리 어드레스 공간을 통해 비휘발성 메모리 내에 액세스된다. 호스트 파일이 삭제되면, 호스트는 FAT 테이블을 갱신하여 논리 어드레스가 이제 다른 데이터 파일에 사용할 수 있다는 것을 보여주도록 삭제된 파일에 이미 할당된 논리 어드레스를 할당해제한다.
호스트는 메모리 시스템 콘트롤러가 파일을 저장하기 위해 선택하는 물리적 지점에 관심을 두지 않는다. 통상적인 호스트는 그 다양한 파일에 할당된 논리 어드레스와 논리 어드레스 공간만을 알고 있다. 한편, 메모리 시스템은 통상적인 호스트/카드 인터페이스를 통해 데이터가 기록되었던 논리 어드레스 공간 부분만을 알고 있고, 특정한 호스트 파일에 할당된 논리 어드레스, 또는 심지어는 호스트 파일의 개수는 알지 못한다. 메모리 시스템 콘트롤러는 데이터의 저장 또는 복구를 위해 호스트에 의해 제공된 논리 어드레스를 호스트 데이터가 저장되는 플래시 메모리 셀 어레이 내에 특유한 물리적 어드레스로 변환시킨다. 블록(163)은 메모리 시스템 콘트롤러에 의해 유지되는 이러한 논리 대 물리적 어드레스 변환의 작업 테이블을 나타낸다.
메모리 시스템 콘트롤러는 시스템의 성능을 높은 수준으로 유지하는 방식으로 메모리 어레이(165)의 블록 및 메타블록 내에 데이터 파일을 저장하도록 프로그 래밍된다. 이 예시에서는 4개의 평면 또는 서브 어레이가 사용된다. 데이터는 시스템이 각 평면으로부터 블록으로 구성되는 전체 메타블록에 걸쳐 가능하게 하는 최대의 병렬화를 갖도록 프로그램 및 판독되는 것이 바람직하다. 적어도 하나의 메타블록(167)이 일반적으로 메모리 콘트롤러에 의해 사용되는 작동 펌웨어 및 데이터를 저장하도록 예비 블록으로서 할당된다. 다른 메타블록(169) 또는 다중 메타블록은 호스트 작동 소프트웨어, 호스트 FAT 테이블 등의 저장을 위해 할당될 수 있다. 대부분의 물리적 저장 공간은 데이터 파일의 저장을 위해 유지된다. 그러나, 메모리 콘트롤러는 수신된 데이터가 호스트에 의해 어떻게 다양한 파일 목적지 중에 할당되는 지를 알지 못한다. 모든 메모리 콘트롤러는 통상적으로 호스트와의 문답으로부터 호스트에 의해 특정한 논리 어드레스에 기록된 데이터가 콘트롤러의 논리 대 물리적 어드레스 테이블(163)에 의해 유지되는 바와 같이 대응하는 물리적 어드레스에 저장되는지를 알고 있다.
통상적인 메모리 시스템에 있어서, 어드레스 공간(161) 내에 소정량의 데이터를 저장하는 데에 필요한 것보다 약간 많은 저장 능력의 여분의 블록이 제공된다. 이들 여분의 블록 중 하나 이상은 메모리의 수명 중에 하자가 있을 수 있는 다른 블록의 대체를 위한 잉여 블록으로서 제공될 수 있다. 개별적인 메타블록 내에 수용된 블록의 논리 그룹화는 통상적으로 메타블록에 원래 할당된 결함이 있는 블록을 위한 잉여 블록의 대체를 비롯하여 여러 가지 이류로 대체될 수 있다. 메타 블록(171) 등의 하나 이상의 추가 블록은 삭제된 블록 풀 내에 유지되는 것이 일반적이다. 호스트가 메모리 시스템에 데이터를 기록하면, 콘트롤러는 호스트에 의해 할당된 논리 어드레스를 삭제된 블록 풀에 있는 메타블록 내의 물리적 어드레스로 변환시킨다. 논리 어드레스 공간(161) 내에 데이터를 저장하는 데에 사용되지 않은 다른 메타블록은 삭제되어 이어지는 데이터 기록 작업 중에 사용하기 위한 삭제된 풀 블록으로서 지시된다. 바람직한 형태에 있어서, 논리 어드레스 공간은 물리적 메모리 메타블록의 저장 용량과 동일한 양의 데이터를 각각 수용하는 논리그룹으로 분할됨으로써, 메타블록에 대한 논리 그룹의 1 대 1 맵핑을 가능하게 한다.
특정한 호스트 논리 어드레스에 저장된 데이터는 원래 저장된 데이터가 무용화될 때에 새로운 데이터에 의해 겹쳐쓰게 되는 경우가 많다. 이에 반응하여 메모리 시스템 콘트롤러는 삭제된 블록에 새로운 데이터를 기록한 다음 이들 논리 어드레스를 위한 논리 대 물리적 어드레스 테이블을 변경시켜 이들 논리 어드레스에서의 데이터가 저장되는 새로운 물리적 블록을 확인한다. 이어서, 이들 논리 어드레스에 원래의 데이터를 수용하는 블록은 삭제되어, 새로운 데이터의 저장을 위해 유효하게 된다. 그러한 삭제는 흔히 기록 시작점에서 삭제 블록 풀로부터 미리 삭제된 블록 내의 저장 능력이 충분하지 않으면 현재의 데이터 기록 작업이 완료되기 전에 행해져야 한다. 이는, 시스템 데이터 프로그래밍 속도에 악영향을 미칠 수 있다. 메모리 콘트롤러는 소정의 논리 어드레스에서의 데이터가 호스트가 새로운 데이터를 동일한 논리 어드레스에 기록하는 경우에만 호스트에 의해 무용화된다는 것을 알게 된다. 따라서, 메모리의 많은 블록은 그러한 무효 데이터를 소정 시간 동안 저장할 수 있다.
블록 및 메타블록의 크기는 집적 회로 메모리 칩의 영역을 효율적으로 사용하기 위하여 증가한다. 이로 인해, 메타블록의 저장 용량보다 작은, 많은 경우에 심지어는 블록의 저장 용량보다도 적은 데이터의 양을 저장하는 개별적인 데이터 기록 비율이 많게 된다. 메모리 시스템 콘트롤러는 일반적으로 새로운 데이터를 삭제된 풀 메타블록으로 지향시키고, 이로 인해 메타블록의 일부가 채워지지 않는다. 새로운 데이터가 다른 메타블록 내에 저장된 일부 데이터의 갱신이면, 새로운 데이터 메타페이지와 연속적인 논리 어드레스를 갖는 다른 메타블록으로부터 잔여의 유효한 데이터의 메타페이지가 논리 어드레스 순서에서 새로운 메타블록으로 복사되는 것이 바람직하다. 이전의 메타블록은 다른 유효한 데이터 메타페이지를 보유할 수 있다. 이 결과, 시간 경과에 따라 개별적인 메타블록의 특정한 메타페이지의 데이터가 무용(obsolete)하고 무효(invalid)가 되어, 새로운 데이터에 의해 상이한 메타블록에 기록된 동일한 논리 어드레스로 대체된다.
전체 논리 어드레스 공간(161)에 걸쳐 데이터를 저장하도록 충분한 물리적 메모리 공간을 유지하기 위하여, 그러한 데이터는 주기적으로 압축되거나 병합 정리된다(조각 모음). 또한, 가능한 한 실효성을 높이기 위해 논리 어드레스와 동일한 순서로 메타블록 내에 데이터의 섹터를 유지하는 것이 바람직한데, 그 이유는 이로 인해 연속적인 논리 어드레스에서의 데이터를 보다 효율적으로 판독할 수 있기 때문이다. 그러한 데이터 압축 및 조각 모음은 이러한 추가 목적을 위해 수행되는 것이 일반적이다. 부분적인 블록 데이터 갱신을 수신할 때에 메모리를 관리하는 몇몇 양태와 메타블록의 용도는 미국 특허 제6,763,424호에 기술되어 있다.
데이터 압축은 통상 메타블록으로부터 유효한 모든 데이터 메타페이지를 판독하고 그들을 새로운 메타블록에 기록하며, 처리 중에 무효 데이터를 갖고 있는 메타페이지를 무시하는 것을 포함한다. 유효 데이터를 갖고 있는 메타페이지는 또한 메타페이지 내에 저장된 데이터의 논리 어드레스 순서와 일치하는 물리적 어드레스 순서로 배치되는 것이 바람직하다. 새로운 메타블록을 차지하는 메타페이지의 개수는 무효 데이터를 수용하는 메타페이지가 새로운 메타블록에 복사되지 않기 때문에 이전의 메타블록을 차지하는 것보다 작게 된다. 이때에, 이전 블록이 삭제되어 새로운 데이터를 저장하는 데에 유효하게 된다. 병합 정리에 의해 얻어진 추가 용량의 메타페이지는 다른 데이터를 저장하는 데에 사용될 수 있다.
조각 모음 중에, 연속적인 또는 거의 연속적인 논리 어드레스를 갖는 유효 데이터의 메타페이지는 2개 이상의 메타블록으로 수집되어 다른 메타블록 내에, 보통은 삭제된 블록 풀의 메타블록에 재기록된다. 모든 유효 데이터 메타페이지가 원래의 2개 이상의 메타블록으로부터 복사되면, 그들 메타페이지는 나중의 사용을 위해 삭제될 수 있다.
데이터 병합 정리 및 조각 모음은 시간을 요하여, 특히 데이터 병합 정리 또는 조각 모음이 호스트로부터의 명령이 행해지기 전에 수행될 필요가 있다면, 메모리 시스템의 성능에 영향을 미칠 수 있다. 그러한 작업은 일반적으로 가능한 한 뒷면에서 행해지도록 메모리 시스템 콘트롤러에 의해 예정될 수 있지만, 이들 작업을 수행하는 필요성은 그러한 작업이 완료될 때까지 콘트롤러가 호스트에게 사용 중 상태 신호를 제공하게 할 수 있다. 호스트 명령의 수행이 지연될 수 있는 예는 호스트가 메모리에 기록하길 원하는 데이터 전부를 저장하기에 삭제된 블록 풀 내에 미리 삭제된 메타블록이 충분하지 않은 경우와, 나중에 삭제될 수 있는 유효 데이터의 하나 이상의 메타블록을 클리어하도록 먼저 데이터 병합 정리 또는 조각 모음이 요구되는 경우이다. 따라서, 그러한 혼란을 최소화하기 위하여 메모리의 관리 제어가 주목되었다. 그러한 많은 기법들이 이하의 미국 특허 출원, 즉 2003년 12월 30일에 출원되었고 발명의 명칭이 "Management of Non-Volatile Memory Systems Having Large Erase Blocks"이고 공개 번호가 제2005/0144358 A1호인 특허 출원 제10/749,831호; 2003년 12월 30일자로 출원되었고 발명의 명칭이 "Non-Volatile Memory and Method with Block Management System"인 특허 출원 제10/750,155호; 2004년 8월 13일자로 출원되었고 발명의 명칭이 "Non-Volatile Memory and Method with Memory Planes Alignment"이며 공개 번호가 제2005/0141313 A1호인 특허 출원 제10/917,888호; 2004년 8월 13일자로 출원되었고 공개 번호가 제2005/0141312 A1호인 특허 출원 제10/917,867호; 2004년 8월 13일자로 출원되었고 발명의 명칭이 "Non-Valatile Memory and Method with Phased Program Failure Handling"이며 공개 번호가 제2005/0166087 A1호인 특허 출원 제10/917,889호; 2004년 8월 13일자로 출원되었고 발명의 명칭이 "Non-Volatile Memory and Method with Control Data Management"이며 공개 번호가 제2005/0144365 A1호인 특허 출원 제10/917,724호; 2005년 7월 27일자로 출원되었고 발명의 명칭이 "Non-Volatile Memory and Method with Multi-Stream Update Tracking"인 특허 출원 제11/192,220호; 2005년 7월 27일자로 출원되었고 발명의 명칭이 "Non-Volatile Memory and Method with Improved Indexing for Scratch Pad and Update Blocks"인 특허 출원 제11/192,386호; 2005년 7월 27일자로 출원되었고 발명의 명칭이 "Non-Volatile Memory and Method with Multi-Stream Updating"인 특허 출원 제11/191,686호에 기술되어 있다.
메모리 어레이의 작업을 매우 큰 삭제 블록에 의해 효율적으로 제어하는 한가지 도전 과제는 소정의 기록 작업 중에 저장된 데이터의 섹터의 개수를 메모리 블록의 용량 및 경계에 일치시켜 정렬하는 것이다. 한가지 방안은 전체 메타블록을 충전하는 양보다 적은 데이터의 양을 저장하는 데에 필요하다면, 호스트로부터 새로운 데이터를 저장하는 데에 사용되는 메타블록을 블록의 최대 개수보다 작게 구성하는 것이다. 적합한 메타블록의 사용이 2003년 12월 30일자로 출원되었고 발명의 명칭이 "Adaptive Metablocks"이며 공개 번호가 제2005/0144357 A1호인 미국 특허 출원 제10/749,189호에 기술되어 있다. 데이터 블록 사이의 경계와 메타블록 사이의 물리적 경계의 맞춤은 2004년 5월 7일자로 출원되었고 공개 번호가 제2005/0144363호인 특허 출원 제10/841,118호와, 2004년 12월 16일자로 출원되었고 발명의 명칭이 "Data Run Programming"이며 공개 번호가 제2005/0144367호인 특허 출원 제11/016,271호에 기술되어 있다.
메모리 콘트롤러는 메모리 시스템을 보다 효율적으로 작동시키기 위하여 비휘발성 메모리에 호스트에 의해 저장되는 FAT 테이블로부터의 데이터를 이용할 수 있다. 그러한 한가지 용도는 그 논리 어드레스를 할당해제함으로써 데이터가 호스트에 의해 무용한 것으로 확인된 경우를 배우는 것이다. 이러한 인지는 새로운 데 이터를 논리 어드레스에 기록하는 호스트에 의해 그것을 배우기 전에 메모리 콘트롤러가 그러한 무효 데이터를 수용하고 있는 블록의 삭제를 예정하게 하는 것이다. 이것은 2004년 7월 21일자로 출원되었고 발명의 명칭이 "Method and Apparatus for Maintainging Data on Non-Volatile Memory Systems"이며 공개 번호가 제2006/0020744 A1호인 미국 특허 출원 제10/897,049호에 기술되어 있다. 다른 기법으로는 소정의 기록 작업이 파일들 사이의 경계가 놓이는 단일 파일인지 다중 파일인지를 추론하도록 새로운 데이터를 메모리에 기록하는 호스트 패턴을 모니터링하는 것이 있다. 2004년 12월 23일자로 출원되었고 발명의 명칭이 "FAT Analysis for Optimized Sequential Cluster Management"이며 공개 번호가 제2006/0020745호인 미국 특허 출원 제11/022,369호는 이 타입의 기법의 용도를 기술하고 있다.
메모리 시스템을 효율적으로 작동시키기 위하여, 콘트롤러는 할 수 있는 한 그 개별적인 파일의 데이터에 호스트에 의해 할당된 논리 어드레스가 얼마나 많은 지를 아는 것이 바람직하다. 데이터 파일은 파일 경계를 알지 못할 때에 보다 많은 개수의 메타블록 중에 산재되는 것보다는 콘트롤러에 의해 단일 메타블록 또는 메타블록의 그룹 내에 저장될 수 있다. 그 결과, 데이터 병합 정리와 조각 모음 작업의 횟수 및 복잡성이 감소된다. 그로 인해, 메모리 시스템의 성능이 향상된다. 그러나, 호스트/메모리 인터페이스가 전술한 바와 같이 논리 어드레스 공간(161; 도7)을 포함하면 메모리 콘트롤러가 얼마나 많은 호스트 데이터 파일 구조에 대하여 안다는 것은 어려운 일이다.
도8을 참조하면, 도7에 이미 도시된 통상적인 어드레스/호스트 메모리 인터 페이스가 상이하게 도시되어 있다. 호스트 발생 데이터 파일은 호스트에 의해 할당된 논리 어드레스이다. 메모리 시스템은 이들 논리 어드레스를 인지하고 데이터가 실제로 저장되는 메모리 셀의 블록의 물리적 어드레스로 맵핑한다.
파일 기반 메모리 인터페이스 및 작동
대량의 데이터의 저장을 위한 메모리 시스템과 호스트 사이의 상이한 유형의 인터페이스는 논리적 어드레스 공간의 사용을 배제한다. 호스트는 대신에 고유 파일ID(또는 다른 고유 레퍼런스) 및 파일 내의 데이터의 유닛(바이트 등)의 오프셋 어드레스에 의해 각각의 파일을 논리적으로 어드레스한다. 이 파일 어드레스는 메모리 시스템 콘트롤러에 직접 제공되고, 이는 이어서 각각의 호스트 파일의 데이터가 물리적으로 저장되는 그 자신의 테이블을 유지한다. 이 새로운 인터페이스는 도2 내지 도6에 대해 전술된 바와 동일한 메모리 시스템으로 구현될 수 있다. 전술된 것과의 주요 차이점은 메모리 시스템이 호스트 시스템과 통신하는 방식이다.
이 파일 기반 인터페이스는 도9에 도시되어 있고, 도7의 논리적 어드레스 인터페이스와 비교될 수 있다. 도9의 파일 1, 2 및 3 각각의 ID(identification)와 파일 내의 데이터의 오프셋은 메모리 콘트롤러로 직접 통과된다. 이 논리적 어드레스 정보는 이어서 메모리(165)의 메타페이지 및 메타블록의 물리적 어드레스로 메모리 콘트롤러 기능(173)에 의해 번역된다. 파일 디렉토리는 각각의 저장된 섹터, 페이지 또는 파일 데이터의 다른 유닛이 속하는 호스트 파일의 트랙을 유지한다.
파일 기반 인터페이스는 또한 도10에 도시되어 있고, 도8의 논리적 어드레스 인터페이스와 비교될 수 있다. 도8의 논리적 어드레스 공간 및 호스트 유지 FAT 테이블은 도10에는 제시되어 있지 않다. 오히려, 호스트에 의해 생성된 데이터 파일은 파일 번호 및 파일 내의 데이터의 오프셋에 의해 메모리 시스템에 식별된다. 다음, 메모리 시스템 콘트롤러는 메모리 셀 어레이의 물리적 블록으로 파일을 직접 맵핑하고, 호스트 파일이 저장되어 있는 메모리 블록의 인덱스 테이블 정보 및 파일 디렉토리를 유지한다. 따라서, 호스트가 논리적 어드레스 인터페이스를 관리하는데 현재 필요한 파일 할당 테이블(FAT)을 유지할 필요가 없다.
도11은 그 프로세서에 의해 그리고 콘트롤러의 다른 회로에 의해 실행된 메모리 시스템 펌웨어에 의해 수행되는 직접 데이터 파일 시스템의 주요 기능의 일반적인 블록도이다. 이는 후술되는 특정 메모리 작동이 고려될 수 있는 전체 프레임워크를 제공한다. 파일 기반 인터페이스(601) 층은 메모리 시스템의 3개의 주요 기능, 즉 파일 기록, 파일 삭제 및 파일 판독을 위해 동일한 메모리 카드 또는 플래시 드라이브 상에서 실행되는 호스트 어플리케이션 또는 외부 호스트 시스템과 메모리 시스템 사이에 명령 및 데이터를 통과시킨다. 데이터는 플래시 메모리 어레이(603)에 저장된다.
파일 블록 관리 기능(605)은 데이터가 식별되는 것에 의해 파일에 따른 플래시 메모리 내의 데이터의 저장을 편성하고(organize), 하나 이상의 파일에 대한 데이터를 저장하는 블록의 발생률을 최소화한다. 메모리(603)의 메모리 셀의 물리적 블록은 데이터 관리의 기본 유닛이다.
데이터는 메모리(603) 내로의 기록을 위해 기능(607)에 의해 메타페이지로 편성되어, 개별 메타페이지는 특정 파일 내의 인접하는 논리적 오프셋 어드레스 범위에 대한 데이터를 포함한다. 기능(609)은 내부에 저장된 데이터를 판독하기 위해 메모리(603)로의 액세스를 제어한다. 파일의 데이터의 삭제는, 호스트에 의해 명령될 때, 기능(611)이 기능(613)에 의해 유지된 파일 인덱싱 정보 및 기능(615) 내의 블록의 리스트를 갱신하게 한다.
파일 데이터 인덱싱(613)은 파일 내의 데이터의 오프셋 어드레스 및 고유 파일 식별자에 의해 메모리(603)에 저장된 개별 파일을 인덱싱한다. 각각의 파일을 위한 데이터는 인접한 논리적 오프셋 어드레스를 갖는 데이터 그룹의 세트로서 저장된다. 파일 디렉토리는 개별 파일에 대한 데이터 그룹 엔트리의 세트의 파일 인덱스 테이블(FIT) 내의 위치를 식별한다. 삭제되고, 파일 데이터로 부분적으로 프로그램되거나 무용한 데이터와 함께 파일 데이터를 포함하는 블록의 ID(identification)는 블록 리스트 기능(615)에 의해 유지된다.
전술된 조각 모음 및 데이터 병합 기능의 주요 목적은 부가의 데이터를 저장하기 위해 사용하기 위한 미사용 메모리 공간을 리클레임하는 것이다. 조각 모음에서, 소스 블록의 유효 데이터는 적어도 몇몇 삭제된 공간을 갖는 하나 이상의 목적지 블록 내로 무용한 데이터를 또한 포함하는 블록으로부터 복사된다. 이는 더 소수의 블록 내로 유효 데이터를 수집하고, 따라서 일단 원본 소스 블록(들)이 삭제되면 무용한 데이터에 의해 점유되는 용량을 프리업한다. 데이터 병합에서, 따라서 삭제되었지만 미사용 공간을 또한 포함하는 하나의 부분적으로 채워진 블록의 유효 데이터가 다른 부분적으로 채워진 블록의 유효 데이터와 조합된다. 부분적으 로 채워진 블록은 대부분은 단지 부분적으로 채워진 그 최종 삭제된 블록으로 닫혀진 새로운 파일에 기록하는 것으로부터 기인한다. 일단 데이터가 병합되면, 복제 데이터인 방금 복사된 데이터를 포함하는 소스 블록이 이어서 삭제되고 새로운 데이터의 저장을 위해 이용 가능해진다.
조각 모음 및 데이터 병합 작동의 양자 모두는 본 명세서에서 블록 리클레임으로서 함께 취급된다. 기능(617)은 프로그램되지 않은 또는 무용한 데이터를 포함하는 메타페이지를 갖는 물리적 블록으로부터 다른 블록으로 유효 파일 데이터의 복사를 제어함으로써 블록을 리클레임한다. 이는 원본 블록이 그가 포함하는 미사용 공간을 리클레임할 수 있게 하고 새로운 파일 데이터의 저장을 위해 이 공간을 이용 가능하게 하기 위해 원본 블록으로 하여금 삭제되도록 한다. 기능(619)은 리클레임 가능한 용량의 양 및 삭제된 블록의 수에 따라 블록 리클레임 작동의 발생 및 기간을 적응적으로 제어한다. 블록 리클레임은 메모리 시스템의 양호한 전체 성능을 유지하는 방식으로 새로운 파일 데이터의 기록의 비율에 대한 최적의 비율로 수행된다.
도11의 기능도에서, 번역 층(621) 및 인터페이스 층(623)은 플래시 메모리의 백엔드 시스템과 인터페이스하고 그 작동을 제어하는 파일 인터페이스(601)의 상부에 있다. 본 예에서, 인터페이스 층(623)은 3개의 상이한 프로토콜 중 하나에 따라 호스트 또는 다른 것과 메모리 시스템의 외부의 데이터의 통신 능력을 갖는다. 파일 인터페이스(625)는, 개별 파일의 데이터가 고유 파일 식별자 및 파일 내의 논리적 오프셋 어드레스에 의해 식별되는 본 명세서에 주로 설명되는 것이다. 오브 젝트 인터페이스(627)는 파일의 사이즈가 일반적으로 알려진 전자 장치 사이에 데이터 파일을 전달하는 주 용도를 갖는다. 인터페이스(627)를 위한 현존하는 프로토콜은 마이크로소프트 코포레이션으로부터의 미디어 트랜스퍼 프로토콜(MTP) 및 픽쳐 트랜스퍼 프로토콜(PTP)을 포함한다. 하위 호환 논리적(backward compatible logical)(LBA) 인터페이스(629)가 또한 본 예에 포함된다. 데이터는 호스트가 메모리 시스템의 규정된 논리적 어드레스 공간에 데이터를 어드레스하는 자기 디스크 드라이브 시스템의 것과 유사한 플래시 메모리 카드에 의해 현재 사용되는 프로토콜로 인터페이스(629)를 통해 전달된다.
번역 층(621)은 각각의 인터페이스 프로토콜(625, 627, 629)의 프로토콜을 파일 인터페이스(601)를 위한 공통 프로토콜로 변환하는 기능을 하는 프로토콜 어댑터(631, 633, 635)를 포함한다. 명령, 데이터 포맷 등은 번역 층에 의해 상이한 프로토콜 사이에서 변환된다. LBA 프로토콜 어댑터(635)는 부가적으로 메모리 시스템의 논리적 어드레스 공간을 정적 파일로 분할한다. 이들 파일은 이어서 인터페이스(625, 627)를 통해 통신되는 개별 파일과 동일한 방식으로 파일 인터페이스(601)에 의해 취급된다. LBA 프로토콜 어댑터(635)의 기능의 상세는 에스.에이. 고로베츠(S.A. Gorobets)가 발명자인 2005년 8월 3일 출원된 미국 특허 출원 제11/196,869호를 참조할 수 있다. 번역 및 인터페이스 층(621, 623)의 더 많은 정보는 알란 싱클레어(Alan Sinclair)가 발명자인 2005년 12월 21일 출원된 미국 특허 출원 제11/316,577호에 제공되어 있다.
새로운 데이터 파일이 메모리 내로 프로그램될 때, 데이터는 블록 내의 제1 물리적 위치에서 시작하여 순차적인 순서로 블록의 위치를 통해 진행하는 메모리 셀의 삭제된 블록 내로 기록된다. 데이터는 파일 내의 데이터의 오프셋의 순서에 무관하게 호스트로부터 수신된 순서로 프로그램된다. 프로그래밍은 파일의 모든 데이터가 메모리 내에 기록될 때까지 계속된다. 파일 내의 데이터의 양이 단일 메모리 블록의 용량을 초과하면, 제1 블록이 가득차있을 때, 프로그래밍은 제2 삭제된 블록에서 계속된다. 제2 메모리 블록은 파일의 모든 데이터가 저장되거나 제2 블록이 가득찰 때까지 제1 위치로부터 순서대로 제1 블록과 동일한 방식으로 프로그램된다. 제3 또는 부가의 블록은 파일의 임의의 잔여 데이터로 프로그램될 수 있다. 단일 파일의 데이터를 저장하는 다중 블록 또는 메타블록은 물리적으로 또는 논리적으로 인접할 필요는 없다. 용이한 설명을 위해, 달리 지정되지 않으면, 본 명세서에 사용될 때 용어 "블록"은 메타블록이 특정 시스템에 사용되고 있는지 여부에 따라 삭제의 블록 유닛 또는 다중 블록 "메타블록"을 칭하는 것으로 의도된다.
도12의 상태도는 도11에 도시된 메모리 작동의 전체 기능을 도시하고 있다. 개별 메모리 블록은 3개의 상태 중 하나에 있는 것으로 나타날 수 있다. 이들은 삭제된 블록(641), 리클레임 가능한 용량을 갖지 않는 유효 파일 데이터를 저장하는 블록(643) 및 몇몇 유효 파일 데이터를 포함할 수 있지만 또한 이들에 저장된 프로그램되지 않은 삭제된 페이지 및/또는 무용한(무효) 데이터로부터 리클레임 가능한 용량을 갖는 블록(645)이다. 데이터는 기능(647)에 의해 삭제된 메모리 블록에 기록되어 이에 의해 최종 프로그램된 블록이 임의의 리클레임 가능한 용량을 보 유하는지 여부에 따라 카테고리(643 또는 645) 내의 블록을 초래한다. 파일이 삭제될 때, 기능(649)에 의해 지시된 바와 같이, 파일의 데이터를 포함하는 블록(643)은 리클레임 가능한 용량을 갖는 블록(645)으로 변환된다. 블록(645)의 미사용 저장 용량은 새로운 데이터가 기록될 수 있는 삭제된 블록(641)의 상태로 이들 블록을 복귀시키는 것을 초래하는 기능(651)에 의해 리클레임된다.
도13A를 참조하면, 메모리 시스템으로의 데이터 파일의 기록이 도시되어 있다. 데이터 파일(181)은 본 예에서 수직 실선 사이로 연장되는 것으로 도시되어 있는 메모리 시스템의 하나의 블록 또는 메타블록(183)의 저장 용량보다 크다. 따라서, 데이터 파일(181)의 부분(184)은 또한 제2 블록(185) 내에 기록된다. 이들 메모리 셀 블록은 물리적으로 인접하는 것으로 도시되어 있지만, 이들이 반드시 물리적으로 인접해야 하는 것은 아니다. 파일(181)로부터의 데이터는 파일의 모든 데이터가 메모리 내에 기록될 때까지 호스트로부터 스트리밍을 수신할 때 기록된다. 도13A의 예에서, 데이터(181)는 파일을 위한 초기 데이터이다.
메모리 시스템이 저장된 데이터의 트랙을 관리하고 유지하기 위한 바람직한 방법은 가변 크기의 데이터 그룹의 사용에 의한 것이다. 즉, 파일의 데이터는 완전한 파일을 형성하도록 규정된 순서로 함께 연계될 수 있는 데이터의 복수의 그룹으로서 저장된다. 그러나, 바람직하게는, 파일 내의 데이터 그룹의 순서는 파일 인덱스 테이블(FIT)의 사용을 통해 메모리 시스템 콘트롤러에 의해 관리된다. 호스트로부터의 데이터의 스트림이 기록됨에 따라, 데이터가 저장되어 있는 물리적 공간 내에 또는 파일 데이터의 논리적 오프셋 어드레스 내에 불연속성이 존재할 때 마다 새로운 데이터 그룹이 시작된다. 이러한 물리적 불연속성의 예는 파일의 데이터가 하나의 블록을 채우고 다른 블록 내에 기록되기 시작할 때이다. 이는 제1 데이터 그룹이 제1 블록(183)을 채우고, 파일의 잔여 부분(184)은 제2 데이터 그룹으로서 제2 블록(185) 내에 저장되는 도13A에 도시되어 있다. 제1 데이터 그룹은 (F0,D0)에 의해 표현될 수 있고, 여기서 F0는 데이터 파일의 시작부의 논리적 오프셋이고, D0는 파일이 시작되는 메모리 내의 물리적 위치이다. 제2 데이터 그룹은 (F1,D1)으로서 표현되고, 여기서 F1은 제2 블록(185)의 시작부에 저장된 데이터의 논리적 파일 오프셋이고, D1은 데이터가 저장되는 물리적 위치이다.
호스트-메모리 인터페이스를 통해 전달되는 데이터의 양은 데이터의 바이트의 수, 데이터의 섹터의 수 또는 일부 다른 세분화(granularity)의 견지에서 표현될 수 있다. 호스트는 종종 그 파일의 데이터를 바이트 세분화로 규정하지만, 이어서 현재의 논리적 어드레스 인터페이스를 통한 대용량 메모리 시스템과 통신할 때 각각 512 바이트의 섹터로 또는 각각 다중 섹터의 클러스터로 바이트를 그룹화한다. 이는 일반적으로 메모리 시스템의 작동을 단순화하기 위해 수행된다. 본 명세서에 설명되는 파일 기반 호스트 메모리 인터페이스는 일부 다른 데이터 유닛을 사용할 수 있지만, 원본 호스트 파일 바이트 세분화가 일반적으로 바람직하다. 즉, 데이터 오프셋, 길이 등은 섹터(들), 클러스터(들) 등에 의해서 보다는 바이트(들), 최소 적당한 데이터의 유닛의 견지에서 바람직하게 표현된다. 이는 본 명세서에 설명된 기술에 의해 플래시 메모리 저장의 용량의 더 효율적인 사용을 허용한다.
도13A에 도시된 방식으로 메모리 내에 기록된 새로운 파일은 이어서 이 순서로 데이터 그룹에 대해 인덱스 엔트리 (F0,D0), (F1,D1)의 시퀀스로서 FIT에 표현된다. 즉, 호스트 시스템이 특정 파일에 액세스하기를 원할 때마다, 호스트는 메모리 시스템에 그 파일ID 또는 다른 ID(identification)를 송신하고, 이는 이어서 이 파일을 구성하는 데이터 그룹을 식별하도록 그 FIT에 액세스한다. 개별 데이터 그룹의 길이 <length>는 또한 메모리 시스템의 작동의 편의를 위해 이들의 개별 엔트리에 포함될 수 있다. 사용될 때, 메모리 콘트롤러는 데이터 그룹의 길이를 계산하고 저장한다.
호스트가 도13A의 파일을 개방 상태로 유지하는 한, 물리적 기록 포인터(P)는 또한 이 파일에 대한 호스트로부터 수신된 임의의 추가 데이터를 기록하기 위한 위치를 규정하도록 바람직하게 유지된다. 파일을 위한 임의의 새로운 데이터는 파일 내의 새로운 데이터의 논리적 위치에 무관하게 물리적 메모리 내의 파일의 종료부에 기록된다. 메모리 시스템은 다수의 파일이 4 또는 5개의 이러한 파일과 같이 1회에 개방 유지되는 것을 허용하고, 이들 각각에 대해 기록 포인터(P)를 유지한다. 상이한 파일에 대한 기록 포인터는 상이한 메모리 블록 내의 위치를 지시한다. 다수의 개방 파일의 메모리 시스템 한계가 미리 존재할 때 호스트 시스템이 새로운 파일을 개방하기를 원하면, 개방된 파일 중 하나는 먼저 폐쇄되고 새로운 파일이 이어서 개방된다.
도13B는 미리 기록되어 있지만 여전히 개방되어 있는 도13A의 파일의 종료부로의 호스트에 의한 데이터의 첨부를 도시하고 있다. 데이터(187)는 파일의 종료 부에 호스트 시스템에 의해 추가되는 것으로 도시되어 있고, 이는 또한 이 파일을 위한 데이터의 종료부에서 제2 블록(185)에 기록된다. 첨부된 데이터는 데이터 그룹 (F1,D1)의 부분이 되고, 이는 따라서 현존하는 데이터 그룹(184)과 첨부된 데이터(189) 사이에 논리적 또는 물리적 어드레스 불연속성이 존재하지 않기 때문에 이제 더 많은 데이터를 포함한다. 따라서, 전체 파일은 FIT 내의 인덱스 엔트리 (F0,D0), (F1,D1)의 시퀀스로서 여전히 표현된다. 포인터(P)의 어드레스는 또한 저장된 첨부 데이터의 종료부의 것으로 변경된다.
도13A의 미리 기록된 파일 내로의 데이터(191)의 블록의 삽입의 예는 도13C에 도시되어 있다. 호스트는 데이터(191)를 파일 내에 삽입하지만, 메모리 시스템은 미리 기록된 파일 데이터의 종료부에서의 위치(193)에 삽입된 데이터를 첨부한다. 데이터가 개방 파일 내로 삽입될 때 이들의 논리적 순서로 파일의 데이터를 재기록할 필요는 없지만, 이는 호스트가 파일을 폐쇄한 후에 배경에서 이후에 수행될 수 있다. 삽입된 데이터는 제2 메모리 블록(185) 내에 전적으로 저장되기 때문에, 이는 단일의 새로운 그룹 (F1,D3)을 형성한다. 그러나, 이 인서트의 형성은 인서트의 이전의 하나의 (F0,D0) 및 인서트 이후의 하나의 (F2,D1)의 두 개의 그룹으로 분할되는 도13A의 이전의 데이터 그룹 (F0,D0)을 초래한다. 이는 인서트의 시작부(F1) 및 인서트의 종료부(F2)에서 발생하는 바와 같이 데이터의 논리적 불연속성이 존재할 때마다 새로운 데이터 그룹이 형성될 필요가 있기 때문이다. 그룹 (F3,D2)은 물리적 어드레스(D2)가 제2 블록(185)의 시작부에 있는 결과이다. 그룹 (F1,D3) 및 (F3,D2)는, 이들에 저장된 데이터의 오프셋에 불연속성이 존재하기 때 문에 이들이 동일한 메모리 블록에 저장되더라도 분리 유지된다. 인서트를 갖는 원본 파일은 이어서 이 순서로 데이터 그룹 인덱스 엔트리 (F0,D0), (F1,D3), (F2,D1), (F3,D2)에 의해 메모리 시스템 FIT에 표현된다. 도13A, 도13B 및 도13C의 예로부터, 새로운 또는 현존하는 파일을 위한 새로운 데이터가 메모리 내의 임의의 데이터를 무용화하지 않고 기록될 수 있다는 것이 주목될 수 있다.
도13C에 도시되어 있는 현존하는 파일 내로의 데이터의 삽입에 대한 대안으로서, 파일은 데이터가 삽입될 때마다 호스트에 의해 개별 파일로서 메모리 내에 재기록될 수 있다. 이 개별 파일은 이어서 새로운 파일로서 메모리 시스템에 의해 처리될 수 있다. 오래된 파일은 이어서 호스트에 의해 삭제되고, 메모리 시스템은 오래된 파일이 저장되어 있고 그 데이터가 이제 무용한 공간을 리클레임함으로써 응답할 수 있다.
도13D는 도13A에 도시된 방식으로 원래 기록된 데이터의 특정 부분이 갱신되는 다른 예를 도시하고 있다. 데이터 파일의 부분(195)은 갱신되는 것으로 도시되어 있다. 갱신을 갖는 메모리 시스템 내의 전체 파일을 재기록하기보다는, 파일의 갱신된 부분(197)이 미리 기록된 데이터에 첨부된다. 미리 기록된 데이터의 부분(199)은 이제 무용하다. 갱신 후에, 파일은 이 순서로 데이터 그룹 인덱스 엔트리 (F0,D0), (F1,D3), (F2,D1), (F3,D2)에 의해 메모리 시스템 FIT에 표현된다. 도13A의 단일 데이터 그룹 (F0,D0)은 갱신된 부분 이전의 하나, 갱신된 부분 및 갱신된 부분 이후의 하나로 도13D에서 부분으로 재차 분할된다. 무용한 데이터에 의해 점유된 공간(199)을 리클레임하는 것이 바람직하지만, 이는 메모리 내에 파일 데이터를 기록하는 부분으로서가 아니라 이후에 수행되는 것이 바람직하다. 통상적으로 이러한 리클레임은 저장되는 특정 파일을 위한 데이터의 소수의 데이터 그룹을 초래할 수 있다.
각각의 파일의 데이터의 오프셋은 바람직하게는 상기 기재에 따른 파일의 생성 또는 수정 후에 정확한 논리적 순서로 연속적으로 유지된다. 따라서, 파일 내로 데이터를 삽입하는 작동의 부분으로서, 예를 들면 호스트에 의해 제공된 삽입 데이터의 오프셋은 인서트(the insert)가 삽입된 데이터의 양만큼 증분된 후에 파일 내에 미리 있는 인서트 및 데이터를 바로 선행하는 오프셋으로부터 연속된다. 현존하는 파일의 갱신은 대부분은 현존하는 파일의 소정의 어드레스 범위 내의 데이터가 갱신된 데이터의 유사한 양만큼 대체되는 것을 초래하고, 따라서 파일의 다른 데이터의 오프셋은 일반적으로 대체될 필요가 없다.
도13에 대해 전술된 데이터 할당 및 인덱싱 기능의 모두는 메모리 시스템의 콘트롤러에 의해 수행되는 것을 주목할 수 있다. 적절한 명령과 함께, 호스트는 단지 메모리 시스템에 전송되는 파일 내의 데이터의 오프셋 및 파일ID와 통신한다. 메모리 시스템은 휴지 상태로 된다.
전술된 방식으로 호스트로부터 플래시 메모리 내로 파일 데이터를 직접 기록하는 장점은 이와 같이 저장된 데이터의 세분화 및 분해능이 호스트의 것과 동일하게 유지될 수 있다는 것이다. 호스트 어플리케이션이 예를 들면 1-바이트 세분화로 파일 데이터를 기록하면, 이 데이터는 또한 1-바이트 세분화로 플래시 메모리 내로 기록될 수 있다. 개별 데이터 그룹 내의 데이터의 양 및 위치는 이어서 바이 트의 수로 측정된다. 즉, 호스트 어플리케이션 파일 내에 개별적으로 어드레스 가능한 데이터의 동일한 오프셋 유닛이 또한 플래시 메모리 내에 저장될 때 이 파일 내에 개별적으로 어드레스 가능하다. 블록 내의 동일한 파일의 데이터 그룹 사이의 임의의 경계가 이어서 가장 인접한 바이트 또는 다른 호스트 오프셋 유닛에 대한 인덱스 테이블 내에 지정된다. 유사하게, 블록 내의 상이한 파일의 데이터 그룹 사이의 경계는 호스트 오프셋의 유닛 내에 규정된다.
용어 "섹터"는 본 명세서에서 ECC가 연관된 저장된 데이터의 유닛을 나타내기 위한 대형 블록 메모리로 사용된다. 섹터는 또한 플래시 메모리에 대한 데이터 전달의 최소 유닛이다. "페이지"는 블록 내의 메모리 셀의 유닛을 나타내는데 사용되고 프로그래밍의 최소 유닛이다. 용어 "메타페이지"는 메타블록의 완전 병렬화를 갖는 페이지를 나타내는데 사용된다. 메타페이지는 프로그래밍의 최대 유닛이다.
파일 블록 관리
이제, 도11의 파일-대-블록 맵핑 기능(605)의 예를 설명한다. 외부 호스트 또는 내부 호스트 처리 중 어느 하나로부터 메모리 시스템에 기록될 때, 또는 데이터 리클레임 작동의 일부로서 메모리 내의 일부 다른 위치로부터 복사될 때, 데이터 저장을 위한 목적 블록은 특정 프로세스에 따라 선택된다. 이 프로세스에서, 특정 유형의 블록들이 그들에 저장된 파일 데이터의 구조에 기초하여 인식된다. 메모리 시스템 내에 저장된 각 파일은 그 후 다수의 상태들 중 하나로 표시되며, 각 파일 상태는 파일 데이터가 저장되어 있는 블록들의 수 및 유형에 의해 규정된 다. 데이터가 파일을 위해 기록될 때, 그 현재 상태 및 일 상태로부터 다른 상태로의 허용된 전이는 역시 하나 이상의 다른 파일의 데이터를 포함하는 특정 파일을 위한 데이터를 포함하는 블록들의 수를 규제하도록 제어된다. 이는 메모리 블록의 효과적 활용을 촉진하고, 새로운 또는 복사된 데이터를 수용하기 위하여 전체 메모리 내에 충분한 삭제된 블록을 유지하기 위해 필요한 추후 리클레임 작동의 빈도수를 감소시킨다.
파일 데이터를 포함하는 본 실시예에서 인식되는 블록의 유형은 하기와 같다.
"파일 블록"은 전체적으로 프로그램되어 있으며, 단일 파일의 유효 데이터를 포함한다. 또한, 이는 일부 무용 데이터를 포함할 수 있다.
"프로그램 블록"은 부분적으로 프로그램되어 있으며, 단지 단일 파일의 유효 데이터를 포함한다. 일부 삭제된 용량이 이 블록 내에 잔류한다. 또한, 이는 일부 무용 데이터를 포함할 수 있다.
"공용 블록(common block)"은 부분적으로 프로그램되어 있으며, 둘 이상의 파일의 유효 데이터를 포함한다. 일부 삭제된 용량이 남아 있다. 또한, 이는 일부 무용 데이터를 포함할 수 있다.
"전체 공용 블록(full common block)"은 완전히 프로그램되어 있으며, 둘 이상의 파일의 유효 데이터를 포함한다. 또한, 이는 일부 무용 데이터를 포함한다.
"전체 프로그램 블록(full program block)"은 파일을 위한 가장 최근에 기록된 데이터를 포함하고 또한 일부 무용 데이터를 구비하고, 파일을 위해 존재하는 오프셋 어드레스의 범위가 단일 블록에 의해 수용될 수 있을 때, 가득차있는 프로그램 블록을 위한 일시적인 지시(transient designation)이다. 파일을 위해 기록될 다음 데이터가 단일 블록에 의해 수용될 수 있는 오프셋 어드레스의 범위를 초과하는 경우, 이때, 전체 프로그램 블록은 파일 블록으로서 명명된다. 무용 데이터를 나타내기 위한 적어도 하나의 다른 시간과 유효 데이터를 지정하고 나면, 파일의 특정 논리 오프셋이 블록 내에 다수회 기록되기 때문에, 전체 프로그램 블록은 기존 논리 블록 어드레스(LBA)의 전체 카오틱(chaotic) 블록과 대등하다.
다른 유형의 블록은 "삭제된 블록"이며, 여기서, 블록의 총 용량이 프로그래밍되지 않고, 데이터를 수용하기 위해 가용하다. 메모리가 데이터로 가득차 있거나, 거의 가득차 있을 때, 사용되는 블록들 내에 존재하는 미사용 용량을 연속적으로 리클레이밍함으로써 삭제된 블록의 특정 최소수의 풀이 유지되는 것이 일반적이다.
"프랙탈 블록"은 프로그램 블록, 공용 블록 또는 전체 공용 블록을 지칭하는 총체적 용어이다. 파일을 위한 프랙탈 블록은 프로그래밍되지 않은 메모리 용량, 다른 파일을 위한 유효 데이터 각각 또는 양자 모두와 함께, 파일의 유효 데이터를 포함한다. 여기에 설명된 기술의 주 목적은 파일의 데이터를 수용하도록 설계된 액티브 블록의 유형을 관리함으로써, 메모리 시스템 내의 프랙탈 블록의 수를 최소화하는 것이다. 이는 삭제된 블록의 특정 최소수를 유지하기 위해 필요한 조각 모음 및 데이터 병합(블록 리클레임 작동)의 경우를 감소시킨다. 이때, 데이터가 메모리 내에 기록될 수 있는 속도가 증가하며, 그 이유는 이전에 프로그램된 블록 내 의 미사용 용량의 조각을 리클레임하기 위해 데이터를 내부적으로 복사하는 시간이 적게 소요되기 때문이다.
여기에서, 다른 유형의 블록들을 총체적으로 설명하기 위해 부가적인 용어도 사용된다.
"부분적 블록"은 일부 프로그램되지 않은 용량 및 하나 이상의 파일의 유효 데이터를 포함하며, 일부 무용 데이터를 포함할 수 있다. 프로그램 블록 및 공용 블록은 부분적 블록의 예이다.
"무용 블록(obsolete block)"은 일부 무용 데이터를 포함하는 파일 블록 또는 전체 공용 블록이다. 무용 블록은 임의의 삭제된 용량을 포함하지 않으며, 유효 및 무용 데이터 양자 모두를 포함한다.
"무효 블록(invalid block)"은 유효 데이터를 포함하지 않는다. 무효 블록은 적어도 일부 무용 데이터를 포함하고 삭제된 용량을 포함할 수 있지만 임의의 유효 데이터를 포함하지 않는다.
도14A 내지 도14E는 상술한 블록의 유형의 사용의 일부 예를 예시한다. 도14A에서, 파일 A의 데이터는 채워진 블록(661, 663)과 부분적으로 채워진 제3 블록(665)을 갖는다. 데이터는 본 예에서, 각 블록에서 좌측으로부터 우측으로 기록되며, 최초에 블록(661)을 채우고, 그 후, 블록(663)을 채우며, 그 후, 블록(665)의 일부에 기록된다. 블록(665)의 잔여 부분은 프로그램되지 않은 삭제된 용량이며, 이는 부가적인 데이터를 저장할 수 있다. 블록(661, 663)은 상술한 정의에 의거하여 파일 블록이며, 블록(665)은 프로그램 블록이다. 임의의 새로운 데이터는 프로그램 포인터(P)에서 시작하여 블록(665)에 기록된다. 포인터(P)는 데이터가 블록에 기록될 때 좌측으로부터 우측으로 이동하여, 항상 블록 내의 다음 가용 저장 위치를 지시한다. 이런 포인터는 블록에 기록될 임의의 다른 데이터의 물리적 어드레스가 항상 알려져 있도록 현재 활성적이든 아니든, 프로그램되지 않은 삭제된 용량을 보유하는 개별 블록을 위해 유지된다.
도14B의 예는 파일 블록(662) 및 전체 프로그램 블록(667)에 저장되는 파일 A를 도시한다. 전체 프로그램 블록에 대하여 상술한 정의에 의거하여, 블록(667)은 파일 A의 가장 최근에 기록된 데이터를 포함하며, 일부 무용 데이터를 포함하고, 어떠한 미사용 용량도 갖지 않는다. 또한, 이 정의에 의거하여, 두 블록(662, 667)에 저장된 파일 A의 총 데이터 양은 하나의 블록의 저장 용량과 같다. 파일 A를 위한 최종 데이터는 프로그램 포인터(P)가 도시되어 있는 블록(667)의 단부에 기록되었다. 수용되는 파일 A의 임의의 다른 데이터는 다른 블록에 프로그램된다. 무용 데이터에 의해 점유되는 공간이 리클레임되기 때문에, 이 블록은 블록(667) 내의 파일 A의 데이터가 수집되는 다른 블록일 수 있다. 대안적으로, 부가적인 데이터는 완전히 삭제된 블록에 기록될 수 있다. 각 경우에, 포인터(P)는 파일 A의 부가적인 데이터를 위한 시작 위치에서 새로운 블록으로 이동한다. 이때, 블록(667)은 파일 블록이 된다. 정확히 도14B에 도시된 시기를 위해서만 존재하기 때문에, 블록(667)은 일시적이다. 파일 A의 데이터로 완전히 채워지기 직전에, 이는 프로그램 블록이며, 파일 A를 위한 임의의 새로운 데이터가 기록되는 즉시, 파일 블록이 된다.
도14C의 예는 일부 프로그램되지 않은 용량과 현재 파일 A의 데이터 및 다른 파일 B의 데이터의 합을 포함하기 때문에, 공용 블록인 블록(669)을 포함한다. 프로그램 포인터(P)가 도시되어 있는 곳에서 시작하는 파일 A의 단부에서, 블록(669)내로 새로운 데이터가 기록된다. 블록(669)은 파일 A를 위한 액티브 블록이다. 또한, 파일 A 또는 파일 B 각각의 부가적인 데이터가 프로그램 포인터(P)에 기록될 수 있는 경우, 파일 B를 위한 액티브 블록이 될 수도 있다. 대안적으로, 별개의 블록(미도시)은 파일 B을 위한 액티브 블록일 수 있다.
파일의 데이터는 이 형태의 프로그램되지 않은 용량의 양호한 사용을 달성하기 위해, 삭제된 블록 대신 다른 파일의 데이터를 이미 포함하는 부분적 블록의 삭제된 용량에 직접적으로 기록할 수 있다. 이는 가득찬 블록의 용량 미만의 파일 데이터의 알려진 용량이 기록될 때 특히 유용하다. 기록될 알려진 양의 데이터에 맞는 양의 삭제된 용량을 발견하도록 기존 부분적 블록이 검색된다. 데이터의 페이지의 수(또는 메타블록이 사용되는 경우 메타페이지)가 부분적 블록 내의 프로그램되지 않은 삭제된 용량의 페이지의 수와 비교된다. 프로그램 블록의 미사용 삭제 공간이 이 방식으로 프로그램될 때, 이는 공용 블록으로 변환된다.
도14D에서, 파일 A는 파일 블록(661), 블록(671)의 일부 및 블록(673)의 일부에 저장된다. 블록(671)은 두 개의 파일 A 및 B의 데이터로 가득차 있기 때문에, 전체 공용 블록이다. 블록(673)은 도14A의 블록(665)과 유사하게 프로그램 블록이다. 블록(673)은 파일을 위한 액티브 블록이며, 포인터(P)는 부가적인 데이터가 최초 기록되는 블록(673) 내의 미사용 용량의 위치를 지시한다.
도14E의 예에서, 파일 A는 전체 공용 블록(671) 및 공용 블록(675)의 일부에 기록된다. 블록(675)은 제3 파일 C의 데이터를 포함한다. 포인터(P)는 부가적인 데이터가 기록되는 액티브 블록(675)의 미사용 부분의 제1 위치를 지시한다.
비록, 도14A 내지 도14E의 예가 다수의 다른 유형의 블록을 예시하기 위해 다수의 블록에 저장된 파일 A의 데이터를 도시하지만, 다수의 경우에, 파일은 보다 적은 수의 블록, 심지어 단일 블록에 저장되기에 충분하게 작을 수 있다. 여기에 설명된 기술은 또한, 이런 작은 파일에도 적용가능하다. 또한, 보다 큰 파일이 3개 블록 이상의 페이지를 점유할 수 있다.
블록(665, 667, 669, 671, 673, 675)은 프랙탈 블록이다. 그 존재가 이들 내의 미사용 용량을 리클래임하기 위한 필요성의 가능성을 증가시키고 따라서, 시스템 성능에 부정적인 영향을 주기 때문에, 임의의 하나의 파일의 데이터에 의해 점유되는 프랙탈 블록의 수를 최소화하는 것이 바람직하다. 미사용 삭제된 용량은 부분적 블록(665, 669, 673, 675)에 존재하지만, 파일을 위한 미기록 데이터의 양이 알려지고, 그 알려진 양이 이들 블록 중 하나의 미사용 용량과 일치하지 않는 한, 이 공간에 직접적으로 호스트로부터의 새로운 데이터를 기록하는 것은 비효율적일 수 있다. 특정 파일을 위한 호스트로부터의 데이터의 양이 알려져 있지 않고, 그래서, 용량의 이들 비트가 쉽게 채워지지 않는 것이 가장 일반적이다. 따라서, 데이터는 메모리 용량의 효율적 사용을 이행하기 위해, 리클레임 작동 동안, 다른 공간으로부터 미사용 공간으로 이동될 필요가 있을 수 있다. 블록들(669, 671, 675)은 하나 이상의 파일을 포함하며, 이는 파일 중 하나가 삭제되거나, 공용 블록에 저장된 그 데이터가 무용화될 때, 무용한 데이터에 의해 점유되는 블록의 용량을 리클레임하기 위해 데이터 리클레임이 수행될 가능성이 있음을 의미한다.
따라서, 데이터 리클레임 작업에 소비되는 횟수를 감소시키기 위해, 특정 파일의 데이터가 임의의 한 번의 시기에 단 하나, 둘 또는 소정의 다른 수의 프랙탈 블록에 저장되는 것이 허용될 수 있다. 여기에 설명된 특정 예에서, 임의의 하나의 파일의 데이터는 둘 또는 보다 소수의 프랙탈 블록에 저장될 수 있지만 그 이상의 블록에는 저장될 수 없다. 파일의 데이터를 저장하기 위해 새로운 액티브 블록을 지정하는 프로세스는 매우 제약적이다. 허용된 파일 상태의 세트 중 하나가 파일의 데이터가 저장되는 블록의 유형에 의해 규정된 각 파일에 할당된다. 기존 블록이 가득 찼을 때 같이, 특정 파일의 데이터를 수용하기 위해 새로운 액티브 블록이 할당될 필요가 있을 때, 이렇게 지정된 블록의 유형은 파일의 상태와, 다수의 경우에는 또한 다른 인자들에 의존한다.
여기에 설명된 메모리 작동 개념의 특정 구현예에서 파일의 데이터가 저장되는 전체 프로그램 블록과 프랙탈 블록의 조합 및 유형에 관하여 10 개 허용된 파일 상태(0-9)의 정의가 도15의 표에 제공되어 있다. 허용된 파일 상태 각각은 두 개 이하의 프랙탈 블록들 또는 단 하나의 전체 프로그램 블록 내에 데이터를 저장할 수 있게 한다. 파일과 연계될 수 있는 파일 블록의 수에 대한 규제는 없다. 이들 파일 상태는 호스트로부터 메모리에 의해 데이터가 수용될 때 및 데이터가 리클레임 작동 동안 메모리 내에서 재배치될 때 양자 모두의 시기에 파일 데이터의 저장을 위해 액티브 블록을 선택하기 위해 사용된다. 메모리 시스템에 저장된 모든 파 일의 상태가 감시되고, 다른 정보와 함께 파일의 FIT 레코드를 위한 헤더 내부 같이, 파일 인덱스 표(FIT)(613)(도11) 내에 기록된다. 상태 전이가 발생할 때마다, FIT는 새로운 파일 상태를 기록하도록 갱신된다.
도15에 규정된 파일 상태(0-9) 사이의 결과적인 주 전이가 도16의 상태도에 예시되고, 도17의 표에 설명되어 있다. 이들 3개 도면은 메모리 시스템의 양호한 작동의 세부사항을 제공하며, 이를 수행하기 위해 이들 자체로 충분한 것으로 믿어진다. 그러나, 본 작동의 특정 양태가 이제 추가로 설명된다.
도15의 표에 도시된 바와 같이, 프랙탈 블록 내에 어떠한 데이터도 저장되어 있지 않기 때문에, 파일은 상태 0이 되는 것으로 지정된다. 블록의 유일한 다른 유형은 파일 블록이며, 그래서, 파일은 하나 이상의 파일 블록에만 기록된 데이터를 갖거나(이는 대부분 데이터의 양과 블록 용량 사이에 필요한 정확도로 인해 일시적 조건이기 쉽다), 파일은 임의의 블록에 저장된 어떠한 데이터도 갖지 않는다. 후자의 조건은 메모리 시스템이 먼저 새로운 파일의 정보를 수신하였지만, 아직 그 파일의 어떠한 데이터도 기록하지 않았을 때 발생한다. 각 경우에, 액티브 블록은 데이터를 수용하도록 지정될 필요가 있다. 알려지지 않은 길이의 데이터가 호스트로부터 제공될 때, 삭제된 블록이 액티브 블록으로서 지정된다. 삭제된 블록에 데이터가 기록되고 나면, 이 블록이 액티브 프로그램 블록이되기 때문에, 파일은 상태 0으로부터 상태 2로 전이한다(도16 참조).
그러나, 호스트로부터 수신된 새로운 파일의 데이터가 블록의 저장 용량 미만인 알려진 길이를 갖고 파일이 상태 0일 때, 알려진 양의 데이터의 저장을 위해 충분한 삭제된 용량이 가용한 경우 부분적 블록이 액티브 블록으로서 지정된다. 그후, 파일은 상태 0으로부터 상태 3으로 전이된다(도16 참조). 이런 부분적 블록은 프로그램 블록 또는 공용 블록일 수 있다. 알려진 데이터 길이와, 가용 부분적 블록의 잔여 저장 용량 사이에서 가능한 최상의 일치가 이루어진다. 알려진 양의 데이터를 위한 충분한 용량을 갖는 부분적 블록이 존재하지 않는 경우, 이때, 데이터는 삭제된 블록에 기록되며, 대신, 이 파일이 상태 0으로부터 상태 2로 전이되게 한다.
상태 2의 파일의 특성은 파일의 부가적인 데이터를 수용하기 위해 프로그램 블록이 할당된다는 것이다. 파일이 충분히 큰 경우, 블록은 결국 가득차게 되고, 그후, 다른 액티브 블록이 지정될 필요가 있다. 가득찬 블록, 즉, 이제, 파일 블록이 어떠한 무용 데이터도 포함하지 않는 경우, 파일은 상태 0으로 복귀되고, 어떠한 액티브 블록도 지정되지 않는다. 삭제된 블록 또는 부분적 블록은 그 후, 상술된 바와 같이, 저장될 부가적 데이터의 양에 의존하여 새로운 액티브 블록으로 지정된다. 그러나, 가득찬 블록이 무용 데이터를 포함하고, 파일을 위한 최대 오프셋이 단일 블록에 의해 수용될 수 있는 오프셋 어드레스의 범위 미만인 경우, 이때, 이는 상술한 정의에 따라 전체 프로그램 블록이다. 이때, 이 블록은 그 유효 데이터를 삭제된 블록에 복사함으로써 압축되고, 원래의 블록이 삭제되는 것이 바람직하다. 그 후, 결과적인 블록은 이 유효 데이터와 삭제된 용량을 포함하고, 이는 부분적 블록이다. 그 후, 이 새로운 부분적 블록은 액티브 프로그램 블록이 된다. 이때, 파일의 상태는 상태 2로부터 상태 1로 전이되며, 그 후, 다시 상태 2로 복귀된다(도16 참조). 그 오프셋 어드레스가 단일 블록이 수용할 수 있는 어드레스의 범위를 초과하는 파일을 위한 데이터가, 상태 1인 동안 수신된 경우, 전체 프로그램 블록은 파일 블록이 된다. 파일은 그 후 상태 0으로 전이된다.
부분적 블록으로서, 파일이 상태 2일 때 존재하는 액티브 프로그램 블록은 리클레이밍 작동 동안 소스 블록으로부터 알려진 양의 다른 파일의 데이터를 위한 목적 블록으로서 선택될 수 있다. 프로그램 블록의 ID(identification)는 리스트 상의 블록 각각 내의 가용 삭제된 용량을 포함하는 부분적 블록의 리스트 상에 유지된다. 소스 블록으로부터 복사되는 데이터의 양은 리스트 상의 부분적 블록의 삭제된 용량에 맞춰진다. 현재 파일을 위한 프로그램 블록이 리클레임 작동 동안 다른 파일의 데이터를 위한 목적 블록으로서 선택되는 경우, 다른 파일의 데이터가 그 삭제된 용량으로 복사된 이후, 프로그램 블록은 현재 파일의 액티브 공용 블록이 된다. 그 후, 파일은 상태 2로부터 상태 3으로 전이된다(도15 및 도16 참조).
부가적으로, 파일이 상태 2인 동안, 프로그램 블록의 리클레이밍을 위한 작동의 일부로서, 다른 파일의 데이터를 저장하는 부분적 블록인 다른 블록 내로 그 파일을 위한 프로그램 블록에 기록된 데이터가 복사될 수 있는 가능성이 존재한다. 이 상황에서, 리클레임 작동의 목적 블록은 액티브 공용 블록이 된다. 파일은 상태 2로부터 상태 4로 전이된다. 이제, 파일을 위한 다른 데이터는 파일을 위한 액티브 블록인 공용블록에 기록된다.
상태 2의 파일의 액티브 공용 블록이 가득 차게 되었을 때, 이는 전체 공용 블록으로서 지정된다. 그 후, 파일은 두 개의 프랙탈 블록, 전체 공용 블록 및 프 로그램 블록에 최대한 수용된다. 다른 프랙탈 블록이 파일의 데이터를 수용하기 위해 할당될 수 없기 때문에, 파일의 데이터는 프로그램 블록으로부터 삭제된 블록으로 복사될 수 있으며, 이 새로운 블록이 그 후 파일을 위한 액티브 프로그램 블록으로 지정된다. 파일 상태 전이의 일부로서의 파일 데이터의 이러한 복사는 여기서 "데이터 전이"라 명명되며, 도16 및 도17에 표시되어 있다. 파일은 그 후 상태 4로부터 상태 8로 전이된다.
상태 전이가 완료된 것으로 고려되기 이전에 단일 작동으로서 임의의 데이터 전이가 완료된다. 이는 파일이 데이터가 기록될 수 있는 액티브 블록을 필요로 하는 경우, 데이터 전이의 데이터 복사 부분이 완료될 때까지, 메모리에 의해 다른 작동이 수행될 수 없다는 것을 의미한다. 따라서, 이 데이터 복사는 시간에 걸쳐 다른 메모리 작동과 간삽되지 않는 것이 일반적이다.
파일 상태 4로부터 상태 3으로의 전이는 프로그램 블록이 리클레임 블록이 되도록 지정되었을 때 발생한다. 프로그램 블록 내의 파일의 데이터는 리클레임 작동의 일부로서 공용 블록으로 이동되며, 그 후, 공용 블록은 파일을 위한 액티브 블록이 된다. 또한, 상태 4의 파일의 액티브 공용 블록이 가득 차고 나면, 파일은 두 개의 프랙탈 블록에 저장된다. 다른 블록은 프랙탈 블록 중 하나가 삭제될 때 까지 액티브 블록으로서 할당될 수 없다. 따라서, 프로그램 블록 내의 데이터는 상태 4로부터 상태 7로의 전이의 일부로서 부분적 블록의 삭제된 용량으로 이동되며(데이터 전이), 그에 의해 프랙탈 프로그램 블록을 제거한다. 그 후, 이 결과적인 공용 블록은 파일을 위한 액티브 블록이 된다.
상태 3에서, 파일의 데이터는 액티브 공용 블록에 기록된다. 파일의 데이터가 액티브 공용 블록으로부터 부분적 블록의 삭제된 용량으로 리클레임 작동 동안 이동되는 경우, 목적 부분적 블록은 파일의 추가 데이터가 기록되는 액티브 공용 블록이 된다. 파일은 그 후 상태 3으로부터 상태 6으로 전이된다. 그러나, 소스 프로그램 블록으로부터 이동되는 데이터의 양이 부분적 블록 리스트 상의 부분적 블록의 용량과 양호하게 일치하지 않는 경우, 공용 블록 내의 파일 데이터는 그 블록으로부터 삭제된 블록으로 이동되고, 삭제된 블록은 파일을 위한 액티브 프로그램 블록이 된다. 파일은 그 후 상태 3으로부터 상태 2로 전이된다. 이 상태 전이의 과정에서, 액티브 블록의 할당은 원래 공용 블록으로부터 새로운 삭제된 블록으로의 데이터 전이를 수행하는 것을 포함하며, 이 새로운 삭제된 블록은 그 후 파일을 위한 액티브 프로그램 블록이 된다.
파일이 상태 3일 때 다른 가능성은 파일의 데이터가 기록되는 액티브 공용 블록이 가득 차게 되는 것이다. 이때, 이 파일은 추가 데이터가 기록될 수 있는 어떠한 액티브 블록도 갖지 않으며, 상태 5로 전이된다. 이 상태는 파일을 위한 어떠한 액티브 블록도 존재하지 않는다는 점에서 파일 상태 0의 것과 작동이 유사하지만, 파일이 상태 5일 때, 파일의 데이터는 전체 공용 블록에 포함되어 있다는 것이 다르다. 상태 0일 때, 파일의 데이터를 포함하는 어떠한 프랙탈 블록도 존재하지 않는다. 상태 0 및 상태 5 양자 모두는 일반적으로 파일의 부가적인 데이터가 기록되자마자 전이가 발생하는 일시적 상태이다.
상태 5일 때, 다른 파일 상태로의 가능한 전이는 상태 5일 때 파일의 일부 데이터가 공용 블록에 저장되는 반면, 상태 0일 때는 그렇지 않다는 것을 제외하면, 파일이 상태 0일 때의 것들과 유사하다. 데이터의 양이 알려지지 않은 경우 파일의 부가적인 데이터를 위해 삭제된 블록이 할당되며, 따라서, 액티브 프로그램 블록을 생성하고, 파일을 상태 8로 전이시킨다. 데이터의 양이 알려져 있는 경우, 이들은 크기의 양호한 일치가 이루어지는 경우 부분적 블록의 잔여 용량 내에 기록되며, 그에 의해, 부분적 블록이 액티브 공용 블록이 되게 하며, 파일이 상태 5로부터 상태 7로 전이하게 한다. 파일 상태 8은 파일 상태 8일 때, 파일의 데이터가 전체 공용 블록에 저장되고, 파일 상태 2일 때는 이러한 블록이 존재하지 않는다는 것을 제외하면, 상태 2와 유사하다. 파일 상태 7은 파일 상태 3과 유사하게 관련되어 있다.
파일 상태 6일 때, 그리고, 액티브 공용 블록이 데이터로 채워져 있을 때, 파일은 그 후 전체 공용 블록 및 공용 블록에 저장된다. 두 개의 프랙탈 블록의 본 실시예의 한계가 도달되었기 때문에, 다른 블록은 프로그램 블록 또는 기타 프랙탈 블록으로서 할당될 수 없다. 따라서, 데이터 전이가 이루어질 필요가 있다. 공용 블록들 중 하나로부터의 파일의 데이터는 부분적 블록으로 이동되고(상태 7로의 파일 전이), 이것이 그 후, 파일을 위한 액티브 공용 블록이 되거나, 부분적 블록의 삭제된 용량과 데이터의 적절한 일치가 이루어지지 않는 경우에는 삭제된 블록(상태 8로의 파일 전이)내로 이동된다.
파일 상태 7일 때, 액티브 공용 블록은 가득 차게 된다. 이때, 파일은 두 개의 전체 공용 블록에 저장되고, 상태 9로 전이한다.
또한, 파일이 상태 7일 때, 공용 블록은 리클레임 블록으로서 지정될 수 있고, 그래서, 그 후, 파일의 데이터가 재배치될 필요가 있다. 이때, 데이터 전이가 이루어진다. 파일의 데이터가 공용 블록으로부터 그 후 액티브 프로그램 블록이 되게 되는 삭제된 블록으로 이동되는 경우, 파일 상태 8로의 전이가 이루어진다. 대신, 파일의 데이터가 부분적 블록으로 이동되는 경우, 이 부분적 블록은 그 후 공용 블록이 되고, 파일 상태는 7로 남아 있는다.
파일이 그 파일에 어떠한 부가적인 데이터도 기록되지 않는 시간 동안 두 개의 전체 공용 블록으로 남아있을 수 있기 때문에, 파일 상태 9는 안정 상태이다. 그러나, 파일이 이 상태에 있을 때, 어떠한 지정된 액티브 블록도 존재하지 않는다. 두 개의 프랙탈 블록의 제한이 존재하기 때문에, 따라서, 데이터 전이는 부가적 데이터가 파일에 기록되기 이전에 이루어져야만 한다. 일 경우에, 두 개의 전체 공용 블록 중 하나의 파일의 데이터 모두가 삭제된 블록으로 이동되고, 이 블록이 그 후 파일의 새로운 데이터를 기록하기 위한 액티브 프로그램 블록이 된다. 그 후, 파일은 상태 9로부터 상태 8로 전이된다. 그러나, 두 개의 전체 공용 블록 중 하나 내의 파일의 데이터와 파일 전체의 부가적 데이터의 합의 양이 블록의 용량 미만인 경우, 이때, 부분적 블록 내에서 충분한 삭제된 공간이 검색된다. 검색되는 경우, 전체 공용 블록 중 하나로부터의 파일의 데이터는 부분적 블록으로 이동되고, 그 후, 이는 파일을 위한 부가적 데이터의 기록을 위한 액티브 공용 블록이 된다. 이는 상태 9로부터 상태 7로의 전이를 초래한다.
파일 상태 8에서, 파일의 데이터는 액티브 프로그램 블록에 기록되고, 파일 의 다른 데이터는 전체 공용 블록 내에 저장되어 잔류된다. 프로그램 블록이 가득 차게 되었을 때, 이는 파일 블록이 되며, 파일을 위한 어떠한 더 이상의 액티브 블록도 존재하지 않는다. 그 후, 상태는 상태 5로 전이하고, 여기서, 추가적 파일 전이는 상술한 바와 같이, 삭제된 블록 또는 부분적 블록 중 어느 하나를 새로운 액티브 블록으로서 할당한다.
그러나, 상태 8에서, 파일의 액티브 프로그램 블록이 리클레임 작동을 위한 목적 블록으로 선택되면, 첫 번째 경우에, 파일 상태는 직접적으로 상태 7로 전이한다. 이는 파일의 새로운 데이터를 수용하기 위해 액티브 상태인 공용 블록을 생성한다. 대안적으로, 상태 8에 있을 때 파일을 위한 액티브 프로그램 블록이 리클레임 작동의 소스 블록으로서 지정되는 경우, 파일의 데이터는 부분적 블록으로 이동되고, 이는 그 후, 파일에 대한 부가적 데이터의 기록을 위한 액티브 공용 블록이 된다. 두 번째 경우에, 파일 상태는 또한 상태 8로부터 상태 7로 전이된다.
도16 및 도17에 예시된 주 파일 상태 전이에 부가하여, 이루어지는 부 파일 전이의 세트가 존재한다. 이들은 도18 및 도19에 도시되어 있다. 관련 현재 파일의 이들 부 전이는 현재 파일의 데이터를 포함하는 프랙탈 블록에 저장된 하나의 파일의 데이터 모두가 무용화되었을 때 이루어진다. 무용 데이터는 일부 다른 파일 또는 현재 파일로 이루어질 수 있다. 데이터는 호스트에 의해 삭제된 파일, 호스트에 의해 갱신된 파일을 위해 이전에 기록된 데이터 또는 리클레임 작동 동안 재배치되는 파일을 위한 데이터의 결과로서 무용화된다. 예로서, 다른 블록에 기록된 새로운 데이터에 의해 모두가 갱신될 때, 파일이 갱신되는 과정에, 공용 블록에 저장된 파일을 위한 데이터 모두는 무용화된다. 리클레임 작동의 예에서, 관련 현재 파일이 아닌 공용 블록 내의 파일의 데이터가 다른 블록으로 복사되는 경우, 이는 공용 블록 무용화시 다른 파일의 데이터를 남긴다.
이들 환경에서 데이터를 무용화하는 것은 무용 데이터가 저장되는 블록이 유형이 변하게 하며, 파일 상태의 결과적 변화가 이루어진다. 새로운 액티브 블록이 파일의 데이터를 위해 필요할 때, 도16 및 도17에 관하여 설명된 방식으로, 그러나, 새로운 파일 상태에 기초하여 선택된다.
도18의 전이 및 발생하는 특정 전이의 도19의 표시는 그들의 전체적 설명을 제공한다. 이들 전이는 파일의 데이터를 포함하는 프랙털 블록의 수를 감소시키고, 따라서, 파일 상태를 단순화하는 경향이 있다는 것을 알 수 있다. 이들 전이는 파일의 상태가 어떠한 프랙탈 블록도 갖지 않는 상태 0을 향해 이동하게 한다.
파일 상태의 정보는 파일을 위해 데이터가 프로그램될 때, 그리고, 파일을 위해 현재 어떠한 액티브 블록도 존재하지 않을 때 파일을 위한 액티브 블록으로서 할당되도록 블록의 유형을 결정하기 위해 사용된다. 도20의 표는 중간 컬럼에 기재된 조건들 하의 상태들 0-9 중 임의의 하나 내의 파일을 위한 액티브 블록의 할당을 우측 컬럼에 요약하고 있다. 선택되는 블록 유형은 도시된 순서이다. "최상 정합 부분적 블록"은 알려진 데이터의 양이 효과적으로 활용할 수 있는 삭제된 용량의 양을 가지는 부분적 블록을 의미한다. 적절한 부분적 블록이 존재하지 않을 때, 삭제된 블록이 가장 일반적으로 선택된다. 그러나, 최상 정합 부분적 블록이 상태 2 또는 3 중 어느 하나에서 파일을 위해 식별될 수 없는 경우, "최대 부분적 블록"이 할당되며, 이는 기록될 전체 데이터의 양을 보유하기에 충분한 삭제된 용량을 갖지 않지만, 그 데이터의 가장 큰 양을 보유할 수 있는 블록을 의미한다. 이때, 파일은 그 상태를 변화시키며, 새로운 상태는 최대 부분적 블록 내에 정합하지 않는 잔여량의 데이터를 수용하기 위해 블록의 선택을 제어한다. 부분적 블록 내의 이용가능한 용량과 데이터의 양으로 인해, 최대 부분적 블록의 이용이 데이터가 둘 이상의 블록에 걸쳐 분산되기 쉽게 만드는 경우, 이 때, 삭제된 블록이 액티브 블록으로서 할당된다.
상술한 작동은 콘트롤러(11)의 프로세서(27)에 의해, 도2에 도시된 예시적 메모리 시스템에서는 저장된 펌웨어를 실행하여 수행될 수 있다.
리클레이밍 블록 용량
상술한 바와 같이, 블록 관리의 일부는 새로운 데이터의 저장을 위해 블록 내에 미사용 용량을 리클레이밍하는 것을 포함한다. 이는 메모리 시스템 내에 저장된 데이터의 양이 그 용량보다 매우 적을 때에는 특별한 고려사항이 되지 않지만, 메모리 시스템이 데이터가 가득차 있는 경우의 작동을 위해 설계되는 것이 바람직하다. 이는 무용 데이터만을 포함하는 블록들과 유효 데이터를 포함하지만 또한 일부 무용 데이터 및/또는 미기록 삭제 페이지를 갖는 다른 블록들이 그 미사용 용량을 리클레임하는 방식으로 다루어질 수 있다는 것을 의미한다. 목표는 메모리 시스템의 저장 용량을 가능한 완전하게 활용하면서, 동시에, 시스템의 성능에 대한 부정적 영향을 최소화하는 것이다. 블록의 리클레이밍은 도11의 전체 시스템 작동도에서 617로 표시되어 있다.
리클레임 작동을 위해 지정된 블록(소스 블록)내의 임의의 유효 데이터는 유효 데이터를 저장하기 위하여 충분한 삭제된 용량을 갖는 하나 이상의 블록들(목적 블록)으로 복사된다. 목적 블록은 상술한 블록 관리 기술에 따라 선택된다. 소스 블록에 저장된 각 파일의 데이터는 상술한 바와 같이, 파일의 상태 및 기타 인자에 기초하여 선택된 블록의 유형으로 복사된다. 리클레임 작동의 일부로서 파일의 서로 다른 유형들 사이에서의 데이터 복사의 예는 도21A 내지 도21D에 제공되어 있다.
도21A에서, 예로서, 두 부분적 블록(681, 683) 상에서의 리클레임 작동이 예시되어 있다. 블록(681)은 파일 A의 유효 데이터가 저장되는 프로그램 블록이며, 또한, 어떠한 데이터도 저장하지 않는 삭제된 용량을 포함한다. 한가지 가능한 리클레임 작동은 파일 A의 상태에 따라, 이미 다른 파일 B의 데이터를 포함하는 다른 부분적 블록(685)의 가용 삭제된 용량 내에 블록(681)의 파일 A의 데이터를 복사하여 이를 공용 블록으로 만드는 것이다. 블록(681) 내의 데이터 그룹(들)은 더 이상 FIT내에 레퍼런스되지 않으며, 이 블록은 무용한 것으로 표시된다. 블록 681 내에 저장될 때, 파일 A는 프로그램 블록을 포함하는 상태들 2, 3 또는 8 중 하나를 갖는다(도15 참조). 그 후, 데이터는 다른 프랙탈 블록으로 이동되고, 이 파일은 최대 두 개의 프랙탈 블록들에 기록된 상태로 남아 있는다. 블록(685)으로의 복사 이후, 파일 A는 상태 3, 4, 6, 또는 7 중 하나로 전이되고, 이는 파일의 다른 데이터가 저장되는 블록의 유형에 의존하여, 공용 블록에 저장되어 있는 파일의 데이터를 포함한다.
도21A의 블록(683)은 그 후 공용 블록이 되게 되는, 파일 E의 데이터를 포함하는 프로그램 블록(687)의 삭제된 용량에 파일 C 및 파일 D의 저장된 데이터를 복사함으로써 리클레임되는 공용 블록이다. 블록(683) 내의 파일 C 및 D의 데이터는 파일 자체와 같이, 무용한 것이 된다. 파일 C 및 D 각각의 상태는 데이터가 하나의 공용 블록으로부터 다른 공용 블록으로 이동되었기 때문에 변하지 않는다. 그러나, 파일 E의 상태는 2로부터 3으로 또는 8로부터 7로 변한다. 대안적으로, 파일 C 및 D 각각의 데이터는 서로 다른 블록으로 이동될 수 있으며, 공용 블록의 가용 공간으로 복사될 필요가 없다. 그 후, 파일의 상태는 다른 상태로 전이될 수 있다.
도21B에는 예시 블록(689, 691) 상에서의 리클레임 작동이 예시되어 있다. 이들 블록들 각각은 데이터가 가득차 있기 때문에 무용 블록이며, 유효하면서 무용 상태 양자 모두이다. 블록(689)은 파일 F의 데이터를 포함하는 파일 블록이고, 그 일부는 무용하며, 나머지는 유효하다. 이는 예로서, 파일의 현존하는 데이터와 동일한 논리 오프셋을 가지는 파일의 단부에 물리적으로 새로운 데이터가 기록되고, 기존 데이터가 그후 무용화되는 파일 F의 갱신 동안 발생할 수 있다. 이 예에서, 파일 F의 데이터는 파일 G의 데이터를 포함하는 프로그램 블록(693)의 삭제된 용량에 복사되고, 블록(693)의 유형의 공용 블록으로의 변화를 초래한다. 파일 F의 유효 데이터는 대안적으로 삭제된 블록에 기록될 수 있으며, 이는 그 후, 이 블록이 프로그램 블록이 되게 한다.
도21B의 블록(691)은 파일 H의 무효 데이터와 파일 I의 유효 데이터를 포함 하는 전체 공용 블록이다. 파일 I의 유효 데이터는 본 예에서, 블록(691)으로부터 삭제된 블록(695)으로 복사된다. 그 후, 블록(695)은 프로그램 블록이 된다. 대안적으로, 양호한 일치가 발견될 수 있는 경우, 파일 I의 데이터는 다른 파일의 데이터를 포함하는 부분적 블록에 기록될 수 있다. 목적 블록은 리클레임 작동의 시기에 파일 I의 상태에 의존한다.
도21A 및 도21B에 도시된 리클레임 작동의 4 가지 특정 예 각각의 결과로서, 두 개의 부분적 블록에 저장된 데이터가 하나로 조합되고, 그에 의해, 두 블록 중 나머지를 단지 무용 데이터만을 갖는 상태가 되게 한다. 이들은 그 후, 무효 블록이 된다. 원래 블록(681, 683, 689 및 691) 각각의 전체 공간은 그 후 도21C에 예시된 바와 같이, 블록을 삭제함으로써 리클레임된다. 삭제된 블록은 무효 블록의 리클레이밍의 결과이다.
도21D는 파일 J의 데이터가 저장되는 파일 블록(697)의 예를 도시한다. 파일 J가 호스트에 의해 삭제될 때, 블록(679) 내의, 그리고, 가능하게는 다른 블록 내에서도 파일 J의 데이터가 무용한 것이 된다. 그 후, 블록(697)은 무효화된다. 무효 블록의 리클레이밍은 시스템 삭제 블록 풀을 위한 삭제된 블록을 제공한다.
또한, 메모리로부터의 파일의 삭제는 일반적으로, 공용 블록 또는 전체 공용 블록 같은 하나 이상의 프랙탈 블록 내의 파일의 데이터가 무용화되게 한다. 이 블록은 그 후 다른 파일의 잔여 유효 데이터가 블록의 저장 용량 보다 작고 소량일 수 있기 때문에 리클레임 작동을 받게 된다.
리클레임 작동은 도22의 플로우차트에 의해 일반적 항목들로 도시되어 있다. 단계 701에 표시된 바와 같이, 특정 실시예에 따라서, 부분적, 무용 및 무효 블록들에 대하여 하나 이상의 리스트가 유지된다. 리스트(들)은 블록 리스트(615)의 일부로서 유지될 수 있다(도11). 한가지 메모리 작동 기술에 따라서, 이 블록의 리스트(들)은 전력의 최초 인가시 같은 메모리 시스템의 시동시에 구성된다. 이 리스트(들)는 각 블록 내의 삭제된 메모리의 양 및 각 블록 내의 유효 데이터의 양 같은 한 번에 하나의 리클레임 블록의 선택을 가능하게 하는 블록들의 다른 정보를 포함할 수 있다. 이들 양들은 통상적으로, 메타블록들이 사용되는 경우 메타 페이지들 또는 블록의 다수의 페이지들에 관하여 측정된다. 양호한 대안적 기술은 비휘발성 메모리 내에 이들 리스트를 유지하고 그 상태가 변할 때마다 리스트 내의 블록에 대한 엔트리를 추가 또는 갱신하는 것이다. 이 기술에서, 메모리 시스템이 초기화될 때, 블록을 스캔하고 리스트를 구성할 필요가 없다. 모든 부분적, 무용 및 무효 블록을 리스트(들) 상에 유지하는 것에 대한 대안으로서, 선택된 리클레임 블록의 한가지 특성이 복사될 필요가 있는 유효 데이터가 작거나 없는 것이기 때문에, 일부 설정 임계량 미만의 소량의 유효 데이터를 갖는 블록들만이 포함된다. 하나의 블록으로부터 다른 블록으로 데이터를 복사하는 것은 현저한 양의 시간을 소요하는 다수의 리클레임 작동이 필요하며, 그래서, 이는 보다 적은 양의 복사 대상 데이터를 갖는 이들 블록들 상에 먼저 수행되는 것이 일반적이다.
이런 블록들의 리스트(들)은 데이터가 기록, 갱신, 이동, 삭제될 때 등에 일정하게 변한다. 부분적, 무용 및 무효로의, 또는 그로부터 블록의 유형이 변하게 하는 변화는 도22의 단계 701에 의해 유지되는 리스트(들)이 변하게 한다. 이런 블록에 개별적으로 저장된 유효 데이터의 양 및 삭제된 용량의 양의 변화도 블록 리스트(615)에 표시된다(도11).
단계 703에서, 다음에 리클레임되기 위해, 갱신된 리스트(들) 상의 것들로부터 단일 리클레임 블록이 식별되는 것이 바람직하다. 부분적 또는 무용 블록의 경우, 이는 목적 블록이라 지칭되는 다른 블록으로 복사되는 유효 데이터의 소스이다. 소스 블록을 선택하기 위해 사용될 수 있는 다수의 특정 기술이 후술된다.
다음 단계 705는 그 후 호스트의 명령에 응답하여 수행될 필요가 있는 메모리 작동을 고려하여, 현 시점에서 리클레임 작동을 수행하는 것이 적합한지 여부를 결정한다. 호스트가 메모리 시스템에 아이들 명령을 전송한 경우, 또는, 호스트가 메모리 시스템이 특정 작동을 수행하게 하지 않을 것으로 예상될 때의 소정 기간의 시간이 존재하는 것을 나타내는 소정의 유사 명령을 전송한 경우, 이때, 메모리 시스템은 리클레임 작동을 포함하는 포어그라운드에서 오버헤드 작동을 수행하기에 자유롭다. 메모리 시스템이 호스트 명령에 응답하여 메모리로부터 데이터를 판독 또는 메모리에 데이터를 기록하는 중인 경우에도, 리클레임 작동, 특히, 그 복사는 데이터 기록 및 판독 작업에 간삽될 수 있다. 이런 간삽은 2005년 10월 25일자로 출원된 알란 신클레어의 미국 특허 출원 제11/259,423호 및 2005년 12월 19일자로 출원된 알란 베넷 등의 미국 특허 출원 제11/312,985호에 설명되어 있다.
리클레임 작동이 수행될 수 있다는 것이 단계 705에 의해 결정될 때, 프로세스는 식별된 리클레임 블록이 유효 데이터를 포함하는지 여부, 그리고, 그러한 경우, 하나 이상의 파일의 유효 데이터를 포함하는지 여부에 의존하여 다르다. 부분 적 블록 도는 무용 블록의 경우, 정의에 의해, 이는 유효 데이터를 포함하고, 공용 블록 또는 전체 공용 블록의 경우, 둘 이상의 파일의 유효 데이터를 포함한다. 리클레임 블록 내에 유효 데이터가 존재하는지 여부가 단계 707에 의해 결정된다. 이동되어야만 하는 유효 데이터가 존재하는 경우, 단일 파일의 데이터가 식별되고, 다음 단계 709에서, 목적 블록이 그 데이터를 수용하도록 식별된다. 두 개의 또는 보다 소수의 프랙탈 블록(본 실시예에서)에 저장된 유효 데이터가 속하는 파일의 모든 데이터를 유지하기 위해, 도15 내지 도17에 관하여 상술된 프로세스에 의해 목적 블록이 식별된다. 그 후, 단계 711에 의해 표시된 바와 같이, 소스 리클레임 블록으로부터 목적 블록으로의 하나의 파일의 유효 데이터의 복사가 수행된다. 이들 데이터가 복사된 이후, 처리는 단계 707로 복귀하여 다른 파일의 데이터가 남아있는지 여부를 결정한다. 그러한 경우, 단계 709 및 단계 711의 프로세스가 추가 데이터에 대하여 반복된다. 목적 블록은 서로 다른 파일의 데이터를 위한 이전의 선택에 독립적으로 선택된다. 이는 단계 707에서 이동될 소스 블록 내의 데이터가 더 이상 존재하지 않는다는 것이 결정될 때까지 지속되며, 이 경우, 소스 블록은 단계 713 마다 삭제될 수 있다. 그 후, 이 블록은 새로운 데이터를 저장하기 위해 사용하도록 삭제된 블록 풀에 배치된다.
단계 707로 돌아가서, 무효 블록을 위한 경우인, 소스 블록이 어떠한 유효 데이터도 포함하지 않는 경우, 이동 대상 유효 데이터가 존재하지 않는다. 소스 블록이 삭제되기만 하면 된다. 따라서, 이 경우, 처리는 도22에 도시된 바와 같이, 단계 709 및 711을 우회한다.
도22의 프로세스의 제1 실시예에서, 부분적, 무용 및 무효 블록의 단일 리스트가 단계 701에 의해 유지된다. 블록 내의 유효 데이터의 양은 리스트 상의 개별 엔트리에 포함된다. 단계 703에서, 리스트로부터 리클레임 블록으로서 선택된 블록은 최소 유효 데이터를 갖는 블록이다. 리스트 상에 하나의 무효 블록이 있는 경우, 이 블록이 최초로 선택되며, 그 이유는 유효 데이터를 갖지 않기 때문이다. 리스트 상에 다수의 무효 블록들이 존재하는 경우, 가장 긴 것이 선택된다. 리스트 상에 어떠한 무효 블록도 존재하지 않는 경우, 이때, 최소량의 유효 데이터를 갖는 블록이 리클레임 블록으로서 선택된다. 리스트 상의 모든 블록 중 최소량의 유효 데이터를 갖는 블록을 선택함으로써, 이때 리클레임 작동은 일 블록으로부터 다른 블록으로 복사될 유효 데이터가 보다 많이 존재할 때보다 적은 시간을 소요한다. 결과적으로, 메모리에 대한 데이터의 기록 및 그로부터의 데이터의 판독 속도 같은 메모리 시스템의 다른 작동이 높은 속도로 유지된다. 메모리 성능에 대해 보다 적은 비용으로 새롭게 삭제된 블록이 얻어진다.
단일 리스트 상의 프랙탈 블록 내의 유효 데이터의 양에 기초하여 소스 블록을 선택하기 위한 도22의 프로세스의 이 제1 실시예는 구현이 비교적 단순한 장점을 갖는다. 그러나, 이 프로세스는 부분적 블록의 값을 역시 고려함으로써 정교화될 수 있다. 부분적 블록은 데이터가 기록될 수 있는 삭제된 용량을 가지는 반면 무용 블록도 무효 블록도 어떠한 삭제된 용량을 갖지 않는다. 무용 블록이 새로운 데이터를 저장하기 위해 사용될 수 있기 이전에, 이들이 삭제되고 새로운 데이터의 저장을 위해 가용해지도록 임의의 유효 데이터가 그들로부터 다른 블록으로 이동되 어야만 한다. 그러나, 부분적 블록은 리클레임 작동의 오버헤드를 감내할 필요 없이 데이터가 기록될 수 있는 삭제된 용량을 갖는다. 예로서, 부분적 블록이 데이터가 기록될 수 있는 대량의 삭제된 용량을 또한 포함할 때, 최소량의 유효 데이터를 포함한다는 이유만으로 부분적 블록을 리클레임하는 것은 유리하지 않을 수 있다.
따라서, 도22의 프로세스의 다른 실시예에서, 부분적 블록은 부분적 블록 내에 존재하는 삭제된 용량의 양과 유효 데이터의 양 양자 모두에 기초하여 리클레임 소스 블록을 위한 후보로서 선택된다. 부분적 블록 내의 데이터의 구성요소는 도23에 도시되어 있다. 블록(메타블록일 수 있음)은 유효 데이터를 포함하는 특정 수의 하나 이상의 페이지(메타페이지일 수 있음) 및 삭제되어 데이터가 기록될 수 있는 하나 이상의 다른 페이지를 구비한다. 또한, 부분적 블록은 도23의 예에 도시된 바와 같이, 무용 데이터를 포함하는 하나 이상의 다른 페이지를 포함할 수도 있다.
도22의 프로세스의 이들 다른 실시예에서, 부분적 블록은 무용 및 무효 블록의 리스트(들)로부터 별개인 리스트 내에서 단계 701에 의해 유지되는 것이 바람직하다. 부분적 블록은 그들이 작은 삭제된 용량을 가질 때(이는 이들이 그 현재 상태에서 매우 유용하지 않다는 것을 의미함), 그리고, 이동될 필요가 있는 유효 데이터의 양이 작을 때, 리클레임 작동을 위해 그 리스트의 헤드를 향해 이동된다. 이런 블록들은 주로 무용 데이터를 포함한다. 반대로, 많은 양의 이동될 유효 데이터 및 많은 양의 삭제된 용량을 갖는(이는 이들이 데이터 저장에 유용할 가능성 이 있음을 의미함) 부분적 블록은 리클레임 블록을 위한 후보로서 식별될 가능성이 작다. 삭제된 용량을 갖는 부분적 블록을 리클레이밍하는 것은 무용 블록을 리클레이밍할 때와 동일한 양의 저장 용량을 메모리 시스템에 추가하지 않는다. 무효 블록은 명백히 리클레임에 가장 매력적인 블록이며, 그 이유는 이들이 어떠한 유익한 삭제된 용량도 갖지 않고, 복사될 필요가 있는 유효 데이터도 갖지 않기 때문이다.
도22의 리클레임 블록 식별 단계(703)의 제2 실시예에서, 단계 701에 의해 부분적, 무용 및 무효 블록 각각에 대하여 하나씩 세 개의 별개의 리스트가 유지된다. 무효 블록이 존재하는 경우, 리클레임 블록은 그 리스트 상에 더 이상의 블록이 존재하지 않을 때까지 무효 블록의 리스트로부터 선택된다. 리스트 상에 존재하는 무효 블록에서 가장 긴 것이 가장 먼저 선택되도록 가능하게는 퍼스트-인-퍼스트-아웃(FIFO)으로 무효 블록을 리스트형성하는 것을 제외하면, 특정한 무효 블록의 리스트 형성 순서는 존재하지 않는다. 다음에, 어떠한 무효 블록도 존재하지 않는 경우, 그 리스트 상의 모든 블록들 중 최소량의 유효 데이터를 갖는 블록이 무용 블록 리스트로부터 선택된다.
무효 또는 무용 리스트 각각 상에 어떠한 블록도 존재하지 않는 경우, 그 후, 부분적 블록 리스트 상의 블록이 리클레임 블록으로서 단계 703에서 선택된다. 비록, 부분적 블록이 최소량의 유효 데이터를 갖는 것이 되도록 선택될 수 있지만, 그 삭제된 용량의 이득을 인식하는 방식으로 부분적 블록을 등급매김하는 것이 바람직할 수 있다. 이를 위해, "리클레임 이득"이 각 부분적 블록을 위해 아래와 같 이 산출될 수 있다.
Figure 112008014381537-pct00001
(1)
여기서, S는 그 데이터 저장 페이지의 총 수의 항이고, E는 데이터가 기록될 수 있는 삭제된 용량의 페이지의 수이며, V는 다른 블록으로 이동될 필요가 있는 유효 데이터를 포함하는 페이지의 수이다. 상수 k는 블록의 삭제된 용량의 양의 효과를 가중하기 위해 포함되지만, 1로 설정될 수 있다. kE의 값이 증가할 때, 결과적인 리클레임 이득이 하강한다. V의 값이 상승할 때, 리클레임 이득은 또한 하강한다. 최고 리클레임 이득 값을 갖는 부분적 블록이 단계 703에서 리클레임 블록으로서 선택된다. 대안적으로, 삭제된 용량을 갖는 이득과 유효 데이터를 포함하는 시스템 작동에 대한 손실을 균형화하는 E 및 V에 관한 리클레임 이득을 규정하기 위해 사용될 수 있다. 리클레임 이득은 데이터가 삭제된 용량에 기록되는 각 시기 같은 블록 내의 변화가 존재하는 각 시기에 계산되고, 파일 디렉토리 또는 FIT에 의해 유지되는 정보의 일부로서 저장된다.
이 제2 실시예가 도25에 예시되어 있으며, 이는 별개의 부분적, 무용 및 무효 블록 리스트(도22의 단계 701에 의해 유지되는 바와 같은)로부터 리클레임 블록을 선택하는 방법(도22의 단계 703)을 보여준다. 단계 721은 먼저 무효 블록 리스트 상에 리스트화된 블록이 존재하는지 여부를 결정한다. 다수의 이런 블록들이 존재하는 경우, 리스트 상에 존재하는 블록 중 가장 긴 블록이 단계 723에 의해 리클레임 블록으로서 선택된다. 무효 블록 리스트 상에 어떠한 블록도 존재하지 않 는 경우, 이때, 단계 725에 의해 무용 블록 리스트상의 엔트리가 존재하는지 여부가 결정된다. 그러한 경우, 무용 블록 리스트상에 하나 이상의 블록이 존재하는 경우, 최소량의 유효 데이터를 갖는 블록이 단계 727에서 리클레임 블록으로 선택된다. 단계 725에 의해 무용 블록 리스트 상에 어떠한 엔트리도 존재하지 않는 것으로 결정되는 경우, 이때, 부분적 블록 리스트가 단계 729에서 고려된다. 부분적 블록 리스트 상에 하나 이상의 블록이 존재할 때, 가장 높은 리클레임 이득을 갖는 것이 리클레임 블록으로서 선택된다. 리클레임 이득은 상기 수학식 (1)을 사용하는 것에 의한 것 같은 블록 내의 유효 데이터의 양 및 삭제된 용량을 고려한다. 부분적 블록 리스트상에 아무것도 존재하지 않는 경우, 프로세스는 블록이 리스트 중 하나 상에 나타날 때까지, 단계 721로 돌아감으로써 반복된다. 리클레임 블록의 선택 이후, 처리는 도22의 단계 705로 진행한다.
제3 실시예가 도24의 플로우차트에 도시되어 있다. 또한, 도22의 단계 703의 실행은 도22의 단계 701에 의해 유지되는 무효 블록 리스트상의 엔트리를 관찰하는 단계 741에 의해 시작한다. 무효 블록 리스트 상에 하나 이상의 엔트리가 존재하는 경우, 도 25의 단계 743에 의해 가장 오래된 엔트리가 리클레임 블록이 될 것으로 선택된다. 무효 블록 리스트 상에 어떠한 엔트리도 존재하지 않는 경우, 다음 단계 745는 무용 블록 리스트 상에 엔트리가 존재하는지 여부를 결정한다. 그러한 경우, 후속 단계는 부분적 블록 리스트 상에 적어도 하나의 엔트리가 또한 존재하는 경우, 이것이 무용 또는 부분적 블록 리스트로부터 리클레임 블록을 선택하기에 최적인지 여부를 결정한다는 점에서, 도24의 실시예와 다르다.
단계 747은 최소량의 유효 데이터를 포함하는 무용 블록 리스트상의 블록을 식별한다. 그 후, 단계 749에 의해 부분적 블록 리스트 상에 적어도 하나의 블록이 존재하는지 여부가 결정되고, 그러한 경우, 최소량의 유효 데이터를 갖는 블록이 단계 751에서 식별된다. 그 후, 다음 단계 753은 무용 블록 리스트로부터 식별된 하나의 블록과 부분적 블록 리스트 상에 식별된 하나의 블록 사이에서 선택한다. 이를 위해, 단계 751에서 부분적 블록 리스트로부터 식별된 블록을 위해 양(V+kE)이 계산되며, 항 V, E 및 k는 위에서 사용된 바와 같다. 이 양이 무용 블록 리스트로부터 단계 747에서 식별된 블록 내의 유효 데이터의 양(V)과 비교된다. 부분적 블록을 위한 양(V+kE)이 무용 블록을 위한 V 보다 클 때, 이때, 무용 블록이 단계 755에서 리클레임 블록으로서 선택된다. 그러나, 무용 블록이 식별된 부분적 블록의 양(V+kE) 보다 클 때, 이때, 부분적 블록이 단계 757에서 리클레임 블록으로서 선택된다.
식별된 무용 블록의 유효 데이터(V)만과의 비교 이전에 그 유효 데이터(V)에 식별된 부분적 블록의 삭제된 용량 양(kE)이 추가됨으로써, 프로세스는 무용 블록의 선택을 선호하는 쪽으로 편의된다(biased). 그 삭제된 용량 내에 데이터를 저장하기 위한 잠재적 용도를 여전히 갖고 있기 때문에, 식별된 무용 블록과 동일한 양의 유효 데이터를 갖는 식별된 부분적 블록이 유지된다. 사실, 양 kE 만큼 무용 블록의 것 보다 작은 양의 유효 데이터를 갖는 부분적 블록이 유지된다.
도25의 단계 745로 돌아가서, 무용 블록 리스트 상에 어떠한 엔트리도 존재하지 않는 경우, 그 후, 단계 759에서 부분적 블록 리스트 상에 리스트된 블록이 존재하는지 여부가 결정된다. 그렇지 않은 경우, 블록이 3개 리스트 중 하나 상에 배치될 때까지 단계 741로 프로세스가 복귀하여 반복된다. 리스트된 다수의 부분적 블록이 존재하는 경우, 이때, 단계 761에서, 최소량의 유효 데이터를 갖는 블록이 리클레임 블록으로서 선택된다. 대안적으로, 부분적 블록은 제2 실시예(도24)의 단계 731에 관하여 설명된 바와 같이 리클레임 이득을 사용함으로써 선택될 수 있다.
제3 실시예는 대안적으로 단지 2개의 리스트를 사용할 수 있다. 제1 리스트는 무용 데이터를 포함하고, 어떠한 삭제된 메모리 용량도 포함하지 않는 블록을 위한 엔트리를 포함하는 무용 블록 리스트이다. 도25에 도시된 바와 같은 별개의 무효 블록 리스트를 사용하는 대신, 무효 및 무용 블록들 양자 모두가 단일 "무용" 블록 리스트상에 배치된다. 블록은 선택적으로 유효 데이터를 포함할 수 있다. 리스트 내의 각 엔트리는 관련된 블록 내의 유효 데이터의 양을 규정하는 값을 포함하는 필드를 갖는다. 리스트 내의 엔트리는 이들 필드의 값에 따라 순서화된다. 따라서, 무용 데이터를 포함하고 어떠한 유효 데이터도 포함하지 않는 블록(무효 블록)은 이 제1 리스트의 헤드에서 함께 그룹화된다.
제3 실시예에 대한 이 대안에서의 제2 리스트는 몇몇 삭제된 메모리 용량을 포함하는 블록들을 위한 엔트리를 포함하는 부분적 블록 리스트이다. 블록은 선택적으로 유효 데이터를 포함한다. 리스트 내의 각 엔트리는 관련된 블록 내의 유효 데이터의 양을 규정하는 값을 포함하는 필드를 갖는다. 리스트 내의 엔트리는 이들 필드의 값에 따라 순서화된다. 블록은 도25의 단계 753의 기술에 의해 제1 또 는 제2 리스트 각각의 헤드(최소량의 무효 데이터를 갖는 블록)로부터 선택될 수 있다.
도26의 표는 제3 실시예의 이 변형예에 따른 리클레임 작동을 위한 부분적 및 무용 블록 리스트 상에 배치되는 블록들의 유형의 세부사항을 기술한다. 부분적 블록 리스트 상에 배치되도록 블록은 유효 데이터 및 삭제된 용량 양자 모두를 포함한다. 블록 내에 무용 데이터가 존재하는지 여부는 문제가 아니다. 무용 블록 리스트 상에 배치되도록 블록은 무용 데이터와, 유효 데이터 또는 삭제된 용량 중 어느 하나를 포함하지만, 유효 데이터와 삭제된 용량 양자 모두를 포함하지는 않는다.
도22, 도24 및 도25에 관하여 상술된 프로세스는 도2에 도시된 예시적 메모리 시스템에 저장된 펌웨어를 실행하여 콘트롤러(11)의 프로세서(27)에 의해 수행될 수 있다.
결론
본 발명의 다양한 양태를 그 예시적 실시예에 관하여 설명하였지만, 본 발명은 첨부된 청구범위의 완전한 범주 이내의 보호에 대한 권리를 갖는다는 것을 이해하여야 한다.

Claims (31)

  1. 재프로그램 가능한 비휘발성 메모리의 블록에 고유하게 식별된 개별 파일로서 데이터를 저장하는 방법에 있어서,
    상기 개별 파일에 복수의 상태를 할당하는 단계로서, 상기 복수의 상태 중 하나는 상기 비휘발성 메모리의 블록에 저장된 데이터를 갖는 개별 파일 중 주어진 하나에 할당되고, 상기 주어진 파일에 상기 하나의 상태를 할당하는 것은 상기 비휘발성 메모리의 블록의 수를 기초로 하며, 상기 비휘발성 메모리의 다수의 블록은 상기 주어진 파일의 데이터로 부분적으로 충전되고 데이터가 기록될 수 있는 삭제 용량을 또한 포함하는, 상기 할당 단계와,
    상기 개별 파일의 데이터가 복수 유형의 블록 중 하나 이상에서 분배되는 방법을 기초로 하는 상기 복수 상태의 개별 파일을 위한 레코드를 유지하는 단계와,
    상기 주어진 파일의 레코드의 상태를 기초로 선택된 블록 유형에 상기 주어진 파일의 추가 데이터를 기록하는 단계를
    포함하는, 데이터 저장 방법.
  2. 제 1항에 있어서, 개별 파일을 위한 레코드는 상기 개별 파일의 데이터가 다른 파일로부터의 데이터와 함께 저장되는 유형의 임의의 블록의 식별(identification)을 포함하는, 데이터 저장 방법.
  3. 제 1항에 있어서, 추가 데이터를 기록하는 단계는 주어진 파일의 상태를 제 1 상태로부터 제 2 상태로 전이시키는 단계를 더 포함하고, 상기 제 1 및 제 2 파일 상태는 적어도 하나의 서로 다른 유형의 블록에서 상기 주어진 파일의 데이터 저장을 기초로 하는, 데이터 저장 방법.
  4. 제 1항에 있어서, 추가 데이터를 기록하는 단계는, 상기 주어진 파일의 추가 데이터가 파일의 데이터를 포함하면서 또한 다른 파일의 데이터를 포함하는 메모리 내의 블록의 수를 미리 결정된 수 미만이 되도록 제한하는 블록의 유형에 기록되도록, 상기 주어진 파일의 상태를 전이시키는 단계를 더 포함하는, 데이터 저장 방법.
  5. 제 1항에 있어서, 추가 데이터를 기록하는 단계는 상기 메모리의 외부로부터 수신된 데이터를 기록하는 단계를 포함하는, 데이터 저장 방법.
  6. 제 1항에 있어서, 추가 데이터를 기록하는 단계는 상기 메모리 내의 다른 위치로부터 데이터를 복사하는 단계를 포함하는, 데이터 저장 방법.
  7. 고유하게 식별된 파일의 데이터로 재프로그래밍하기 전에 삭제된 메모리 셀의 블록으로 그룹화된 저장 셀을 갖는 비휘발성 메모리 시스템에 데이터를 기록하는 방법에 있어서,
    지정된 개별 블록에 저장된 파일 데이터의 구조에 관하여 복수의 데이터 블록 유형의 세트를 지정하는 단계와,
    지정된 개별 파일의 데이터가 저장되는 하나 이상의 블록의 유형의 조합에 관하여 복수의 허용된 파일 상태의 세트를 지정하는 단계와,
    메모리 시스템에 저장된 개별 데이터 파일의 파일 상태의 레코드를 유지하는 단계와,
    상기 레코드에서 파일의 현재 상태에 따라 선택된 블록의 유형에 개별 파일을 위한 데이터를 기록하는 단계를
    포함하고,
    지정된 복수의 데이터 블록 유형은 단 하나의 파일의 데이터가 단일 블록에 저장되는 제 1 복수의 유형과 둘 이상의 파일의 데이터가 단일 블록에 저장되는 제 2 복수의 유형을 포함하고, 허용된 파일 상태는 파일 중 단일 파일의 데이터가 기록될 수 있는 제 2 복수의 유형의 블록의 최대수를 제한하며,
    상기 최대수는 2인, 데이터 기록 방법.
  8. 제 7항에 있어서, 상기 메모리 셀은 플래시 삭제 가능한, 데이터 기록 방법.
  9. 제 8항에 있어서, 상기 메모리 셀은 전기 전하 저장 소자를 개별적으로 포함하는, 데이터 기록 방법.
  10. 제 8항에 있어서, 상기 저장 셀은, 하나 이상의 데이터 비트를 저장하기 위해 전하의 다중 레벨을 저장하도록 개별적으로 작동되는, 데이터 기록 방법.
  11. 재프로그래밍 이전에 동시 삭제되고 복수의 별개로 식별된 데이터 파일로서 데이터를 저장하는 메모리 셀의 블록으로 그룹화된 메모리 저장 셀을 갖는 비휘발성 메모리 시스템에 데이터를 기록하는 방법에 있어서,
    둘 이상의 파일의 유효 데이터를 포함하는 제 1 유형의 블록과, 단 하나의 파일의 데이터를 포함하는 제 2 유형의 블록을 포함하는 복수 유형의 블록 중 하나에 의해 개별 파일의 데이터를 저장하는 블록을 식별하는 단계와,
    허용된 하나 이상의 유형의 블록에 대하여 메모리 시스템의 하나 이상의 블록에 저장된 개별 파일을 위한 복수의 허용 상태 중 하나를 지정하는 단계와,
    제 2 유형의 블록을 위해 단일 파일의 데이터를 저장할 수 있는 제 1 유형의 블록의 수를 제한하는 파일 상태 사이에서 복수의 허용된 전이 세트를 유지하는 단계와,
    메모리 시스템에 저장된 주어진 파일에 추가 데이터를 기록하기 위한 요구에 응답하여, 주어진 파일의 데이터가 가장 최근 기록된 블록 중 하나를 식별하지만, 상기 식별된 블록이 상기 주어진 파일의 추가 데이터를 수용할 수 없으면, 허용된 파일 상태 전이 세트 내에서 다음 허용 상태로 주어진 파일의 상태를 전이하고, 다음 허용 상태에 의해 허용된 유형을 갖는 추가 블록을 식별하는, 단계와,
    이후, 식별된 블록의 유형에 추가 데이터를 기록하는 단계로서, 파일 상태 사이의 복수의 허용된 전이 세트는 단일 파일의 데이터를 저장할 수 있는 상기 제 1 유형의 블록의 수를 2로 제한하는, 상기 기록 단계를
    포함하는, 데이터 기록 방법.
  12. 제 11항에 있어서, 추가 데이터를 기록하는 단계는 상기 메모리 시스템이 연결되어 있는 호스트 시스템으로부터 수신된 데이터를 기록하는 단계를 포함하는, 데이터 기록 방법.
  13. 제 11항에 있어서, 추가 데이터를 기록하는 단계는 상기 메모리 시스템 내의 다른 위치로부터 데이터를 복사하는 단계를 포함하는, 데이터 기록 방법.
  14. 제 11항에 있어서, 상기 방법은, 휴대용 메모리 카드 또는 드라이브에서 수행되는, 데이터 기록 방법.
  15. 재프로그래밍 이전에 삭제되는 것을 특징으로 하는 비휘발성 메모리 셀의 블록에 별개로 식별된 데이터 파일을 기록하는 방법에 있어서,
    적어도 하나의 파일의 데이터를 부분적으로 포함하는 블록의 수가 단지 2개로 유지되도록 개별 식별된 데이터 파일 중 적어도 하나를 기록하기 위해 하나 이상의 파일을 선택하는 단계로서, 상기 개별 식별된 데이터 파일 중 적어도 하나는 두 개의 선택 블록에 기록되는, 상기 선택 단계와,
    상기 개별 식별된 데이터 파일 각각의 데이터를 선택된 하나 이상의 블록에 기록하는 단계를
    포함하는, 데이터 파일 기록 방법.
  16. 개별 블록의 메모리 셀이 데이터를 재프로그래밍하기 전에 동시 삭제되는 것을 특징으로 하는 복수의 비휘발성 메모리 셀 블록을 포함하는 재프로그래밍 가능한 비휘발성 메모리 시스템에서 복수의 데이터 파일을 기록하는 방법에 있어서,
    복수의 비휘발성 메모리 셀 블록에 기록된 복수의 데이터 파일 각각에 대해 하나의 상태를 할당 및 저장하는 단계로서, 상기 복수의 파일 각각의 상기 할당된 상태는 적어도: 상기 파일의 데이터로 부분적으로 충전된 비휘발성 메모리 셀의 블록의 수와,
    추가 데이터가 기록될 수 있는 삭제 용량을 또한 포함하는 파일의 데이터로 부분적으로 충전된 비휘발성 메모리 셀의 블록의 수를
    기초로 하는, 상기 할당 및 저장 단계와,
    개별 데이터 파일 중 주어진 파일의 데이터는 상기 개별 데이터 파일 중 주어진 파일의 저장 상태를 기초로 기록되는 비휘발성 메모리 셀의 블록 중 하나 이상을 선택하는 단계와,
    상기 선택된 하나 이상의 블록에 상기 개별 데이터 파일 중 주어진 파일의 데이터를 기록하는 단계를
    포함하는, 복수의 데이터 파일 기록 방법.
  17. 제 16항에 있어서, 상기 복수의 파일 중 각 파일의 할당된 상태는, 상기 복수의 파일 중 하나 이상의 다른 파일의 데이터를 또한 포함하는 파일의 데이터로 부분적으로 충전된 비휘발성 메모리 셀의 블록의 수를 추가 기초로 하는, 복수의 데이터 파일 기록 방법.
  18. 제 16항에 있어서, 상기 선택 단계는, 상기 파일 중 주어진 파일의 데이터를 부분적으로 포함하는 메모리 셀 블록의 수를 미리 설정된 한계 이하로 유지하기 위해, 개별 데이터 파일 중 주어진 파일의 데이터가 상기 개별 데이터 파일 중 주어진 파일의 저장 상태를 기초로 기록되는 하나 이상의 비휘발성 메모리 셀 블록을 선택하는, 복수의 데이터 파일 기록 방법.
  19. 제 17항에 있어서, 상기 선택 단계는, 상기 파일 중 주어진 파일의 데이터를 부분적으로 포함하는 메모리 셀 블록의 수를 미리 설정된 한계 이하로 유지하기 위해, 개별 파일 중 주어진 파일의 저장 상태를 기초로 하는, 복수의 데이터 파일 기록 방법.
  20. 개별 블록의 메모리 셀이 데이터를 재프로그래밍하기 전에 동시 삭제되는 것을 특징으로 하는 복수의 비휘발성 메모리 셀 블록을 포함하는 재프로그래밍 가능한 비휘발성 메모리 시스템에서 복수의 데이터 파일을 기록하는 방법에 있어서,
    복수의 비휘발성 메모리 셀 블록에 기록된 복수의 데이터 파일 각각에 대해 하나의 상태를 할당 및 저장하는 단계로서, 상기 복수의 파일 각각의 상기 할당된 상태는 적어도: 상기 파일의 데이터로 부분적으로 충전된 비휘발성 메모리 셀의 블록의 수와,
    상기 복수의 파일 중 하나 이상의 다른 파일의 데이터를 또한 포함하는 파일의 데이터로 부분적으로 충전된 비휘발성 메모리 셀의 블록의 수를
    기초로 하는, 상기 할당 및 저장 단계와,
    개별 데이터 파일 중 주어진 파일의 데이터는 상기 개별 데이터 파일 중 주어진 파일의 저장 상태를 기초로 기록되는 비휘발성 메모리 셀의 블록 중 하나 이상을 선택하는 단계와,
    상기 선택된 하나 이상의 블록에 상기 개별 데이터 파일 중 주어진 파일의 데이터를 기록하는 단계를
    포함하는, 복수의 데이터 파일 기록 방법.
  21. 제 20항에 있어서, 상기 선택 단계는, 상기 파일 중 주어진 파일의 데이터를 부분적으로 포함하는 메모리 셀 블록의 수를 미리 설정된 한계 이하로 유지하기 위해, 개별 파일 중 주어진 파일의 저장 상태를 기초로 하는, 복수의 데이터 파일 기록 방법.
  22. 재프로그램 가능한 비휘발성 메모리 시스템에 있어서,
    데이터를 재기록하기 전에 삭제되는 것을 특징으로 하는 비휘발성 메모리 셀 블록과,
    개별 파일 중 임의의 파일의 데이터를 부분적으로 포함하는 비휘발성 메모리 셀 블록의 수를 미리 설정된 한계 이하로 유지하기 위해 선택된 비휘발성 메모리 셀의 블록 중 하나 이상에 개별 파일의 데이터가 기록되게 하도록 비휘발성 메모리 셀 블록과 작동 가능하게 연결된 콘트롤러를
    포함하고,
    상기 콘트롤러는 비휘발성 메모리 셀의 블록에 저장된 데이터를 갖는 개별 파일에 하나의 상태를 할당하고, 개별 파일 중 주어진 파일의 상태를 기초로 개별 파일 중 주어진 파일의 데이터가 저장되는 비휘발성 메모리 셀의 블록 중 하나를 선택하도록 추가 작동하고,
    상기 할당된 상태는 상기 개별 파일 중 주어진 파일의 데이터로 부분적으로 충전된 비휘발성 메모리 셀의 블록의 수를 기초로 하며,
    상기 콘트롤러는 비휘발성 메모리 셀의 블록에 저장된 데이터를 갖는 개별 파일에 하나의 상태를 할당하도록 추가 작동하고, 상기 할당된 상태는 데이터가 기록될 수 있는 삭제 용량을 또한 포함하는 개별 파일 중 주어진 파일의 데이터로 부분적으로 충전된 비휘발성 메모리 셀의 블록의 수를 기초로 하는, 재프로그램 가능한 비휘발성 메모리 시스템.
  23. 재프로그램 가능한 비휘발성 메모리 시스템에 있어서,
    데이터를 재기록하기 전에 삭제되는 것을 특징으로 하는 비휘발성 메모리 셀 블록과,
    개별 파일 중 임의의 파일의 데이터를 부분적으로 포함하는 비휘발성 메모리 셀 블록의 수를 미리 설정된 한계 이하로 유지하기 위해 선택된 비휘발성 메모리 셀의 블록 중 하나 이상에 개별 파일의 데이터가 기록되게 하도록 비휘발성 메모리 셀 블록과 작동 가능하게 연결된 콘트롤러를
    포함하고,
    상기 콘트롤러는 비휘발성 메모리 셀의 블록에 저장된 데이터를 갖는 개별 파일에 하나의 상태를 할당하고, 개별 파일 중 주어진 파일의 상태를 기초로 개별 파일 중 주어진 파일의 데이터가 저장되는 비휘발성 메모리 셀의 블록 중 하나를 선택하도록 추가 작동하고,
    상기 할당된 상태는 상기 개별 파일 중 주어진 파일의 데이터로 부분적으로 충전된 비휘발성 메모리 셀의 블록의 수를 기초로 하며,
    상기 콘트롤러는 비휘발성 메모리 셀의 블록에 저장된 데이터를 갖는 개별 파일 각각에 하나의 상태를 할당하도록 추가 작동하고, 상기 할당된 상태는 상기 개별 파일 중 주어진 파일과 다른 하나 이상의 다른 개별 파일의 데이터를 또한 포함하는 상기 개별 파일 중 주어진 파일의 데이터로 부분적으로 충전된 비휘발성 메모리 셀의 블록의 수를 기초로 하는, 재프로그램 가능한 비휘발성 메모리 시스템.
  24. 개별 데이터 파일을 저장하는 재프로그램 가능한 비휘발성 메모리 시스템에 있어서,
    동시에 삭제 가능한 메모리 셀의 블록으로 조직화된 복수의 비휘발성 메모리 셀과,
    개별 데이터 파일에 복수의 상태 중 하나를 할당하기 위해 복수의 비휘발성 메모리 셀과 작동 가능하게 연결된 콘트롤러를
    포함하고,
    상기 복수의 상태 중 할당된 상태는 상기 파일 중 주어진 파일의 데이터가 저장되는 메모리 셀 블록을 선택하는데 사용되고, 상기 복수의 상태는, (1) 상기 파일 중 주어진 파일의 데이터로 부분적으로 충전된 하나 이상의 메모리 셀 블록의 수, (2) 임의의 상기 부분적으로 충전된 하나 이상의 메모리 셀 블록이 상기 파일 중 주어진 파일과 다른 개별 파일 중 다른 개별 파일의 데이터를 또한 포함하는지, (3) 임의의 상기 부분적으로 충전된 하나 이상의 메모리 셀 블록이 추가 데이터가 기록될 수 있는 삭제 용량을 포함하는지 여부에 의존하는 것을 포함하는, 재프로그램 가능한 비휘발성 메모리 시스템.
  25. 제 24항에 있어서, 상기 콘트롤러는 상기 파일 중 주어진 파일의 데이터를 부분적으로 포함하는 상기 메모리 셀 블록의 수를 미리 설정된 한계 미만으로 유지하여, 상기 파일 중 주어진 파일의 데이터가 기록되는 메모리 셀 블록 중 하나를 선택하도록 추가 작동하는, 재프로그램 가능한 비휘발성 메모리 시스템.
  26. 재프로그램 가능한 비휘발성 메모리 시스템에 있어서,
    데이터를 재프로그래밍하기 전에 개별 블록의 메모리 셀이 동시에 삭제되는 것을 특징으로 하는 복수의 비휘발성 메모리 셀 블록과,
    복수의 비휘발성 메모리 셀 블록과 작동 가능하게 연결되고, 복수의 데이터 파일을 기록하는 것을 제어하도록 작동하는 콘트롤러를
    포함하고,
    상기 콘트롤러는,
    상기 복수의 비휘발성 메모리 셀 블록에 기록된 상기 복수의 데이터 파일 각각에 대해 하나의 상태를 할당 및 저장하는 단계로서, 상기 복수의 파일 각각의 상기 할당된 상태는 적어도: 상기 파일의 데이터로 부분적으로 충전된 비휘발성 메모리 셀의 블록의 수와,
    추가 데이터가 기록될 수 있는 삭제 용량을 또한 포함하는 파일의 데이터로 부분적으로 충전된 비휘발성 메모리 셀의 블록의 수를
    기초로 하는, 상기 할당 및 저장 단계와,
    개별 데이터 파일 중 주어진 파일의 데이터는 상기 개별 데이터 파일 중 주어진 파일의 저장 상태를 기초로 기록되는 비휘발성 메모리 셀의 블록 중 하나 이상을 선택하는 단계와,
    상기 선택된 하나 이상의 블록에 상기 개별 데이터 파일 중 주어진 파일의 데이터를 기록하는 단계에
    의해 복수의 데이터 파일을 기록하는 것을 제어하도록 작동하는, 재프로그램 가능한 비휘발성 메모리 시스템.
  27. 제 26항에 있어서, 상기 복수의 파일 중 각 파일의 할당된 상태는, 상기 복수의 파일 중 하나 이상의 다른 파일의 데이터를 또한 포함하는 파일의 데이터로 부분적으로 충전된 비휘발성 메모리 셀의 블록의 수를 추가 기초로 하는, 재프로그램 가능한 비휘발성 메모리 시스템.
  28. 제 26항에 있어서, 상기 콘트롤러는, 상기 파일 중 주어진 파일의 데이터를 부분적으로 포함하는 상기 메모리 셀 블록의 수를 미리 설정된 한계 미만으로 유지하기 위해, 개별 파일 중 주어진 파일의 데이터가 상기 개별 파일 중 주어진 파일의 저장 상태를 기초로 기록되는 비휘발성 메모리 셀 블록 중 하나 이상을 선택하도록 추가 작동하는, 재프로그램 가능한 비휘발성 메모리 시스템.
  29. 제 27항에 있어서, 상기 콘트롤러는, 상기 파일 중 주어진 파일의 데이터를 부분적으로 포함하는 상기 메모리 셀 블록의 수를 미리 설정된 한계 미만으로 유지하기 위해, 개별 파일 중 주어진 파일의 데이터가 상기 개별 파일 중 주어진 파일의 저장 상태를 기초로 기록되는 비휘발성 메모리 셀 블록 중 하나 이상을 선택하도록 추가 작동하는, 재프로그램 가능한 비휘발성 메모리 시스템.
  30. 재프로그램 가능한 비휘발성 메모리 시스템에 있어서,
    데이터를 재프로그래밍하기 전에 개별 블록의 메모리 셀이 동시에 삭제되는 것을 특징으로 하는 복수의 비휘발성 메모리 셀 블록과,
    복수의 비휘발성 메모리 셀 블록과 작동 가능하게 연결되고, 복수의 데이터 파일을 기록하는 것을 제어하도록 작동하는 콘트롤러를
    포함하고,
    상기 콘트롤러는,
    상기 복수의 비휘발성 메모리 셀 블록에 기록된 상기 복수의 데이터 파일 각각에 대해 하나의 상태를 할당 및 저장하는 단계로서, 상기 복수의 파일 각각의 상기 할당된 상태는 적어도: 상기 파일의 데이터로 부분적으로 충전된 비휘발성 메모리 셀의 블록의 수와,
    상기 복수의 파일의 하나 이상의 다른 파일의 데이터를 또한 포함하는 파일의 데이터로 부분적으로 충전된 비휘발성 메모리 셀의 블록의 수를
    기초로 하는, 상기 할당 및 저장 단계와,
    개별 데이터 파일 중 주어진 파일의 데이터는 상기 개별 데이터 파일 중 주어진 파일의 저장 상태를 기초로 기록되는 비휘발성 메모리 셀의 블록 중 하나 이상을 선택하는 단계와,
    상기 선택된 하나 이상의 블록에 상기 개별 데이터 파일 중 주어진 파일의 데이터를 기록하는 단계에
    의해 복수의 데이터 파일을 기록하는 것을 제어하도록 작동하는, 재프로그램 가능한 비휘발성 메모리 시스템.
  31. 제 30항에 있어서, 상기 콘트롤러는, 상기 파일 중 주어진 파일의 데이터를 부분적으로 포함하는 상기 메모리 셀 블록의 수를 미리 설정된 한계 미만으로 유지하기 위해, 개별 파일 중 주어진 파일의 데이터가 상기 개별 파일 중 주어진 파일의 저장 상태를 기초로 기록되는 비휘발성 메모리 셀 블록 중 하나 이상을 선택하도록 추가 작동하는, 재프로그램 가능한 비휘발성 메모리 시스템.
KR1020087004689A 2005-08-03 2006-08-01 데이터 파일을 직접적으로 저장하는 메모리 블록의 관리 KR101378031B1 (ko)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US70538805P 2005-08-03 2005-08-03
US60/705,388 2005-08-03
US11/382,228 US7581057B2 (en) 2005-08-03 2006-05-08 Memory system with management of memory blocks that directly store data files
US11/382,224 2006-05-08
US11/382,224 US8055832B2 (en) 2005-08-03 2006-05-08 Management of memory blocks that directly store data files
US11/382,228 2006-05-08
PCT/US2006/030165 WO2007019197A2 (en) 2005-08-03 2006-08-01 Management of memory blocks that directly store data files

Publications (2)

Publication Number Publication Date
KR20080044254A KR20080044254A (ko) 2008-05-20
KR101378031B1 true KR101378031B1 (ko) 2014-03-27

Family

ID=37441503

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020087004689A KR101378031B1 (ko) 2005-08-03 2006-08-01 데이터 파일을 직접적으로 저장하는 메모리 블록의 관리

Country Status (4)

Country Link
EP (1) EP1913463A2 (ko)
JP (1) JP2009503743A (ko)
KR (1) KR101378031B1 (ko)
WO (1) WO2007019197A2 (ko)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7984084B2 (en) 2005-08-03 2011-07-19 SanDisk Technologies, Inc. Non-volatile memory with scheduled reclaim operations
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
US7917686B2 (en) 2006-12-26 2011-03-29 Sandisk Corporation Host system with direct data file interface configurability
US7739444B2 (en) 2006-12-26 2010-06-15 Sandisk Corporation System using a direct data file system with a continuous logical address space interface
US8209461B2 (en) 2006-12-26 2012-06-26 Sandisk Technologies Inc. Configuration of host LBA interface with flash memory
KR101464199B1 (ko) * 2006-12-26 2014-11-21 샌디스크 테크놀로지스, 인코포레이티드 연속 논리 주소 공간 인터페이스를 구비한 다이렉트 데이터 파일 시스템을 사용하는 방법
US8166267B2 (en) 2006-12-26 2012-04-24 Sandisk Technologies Inc. Managing a LBA interface in a direct data file memory system
US9311229B2 (en) 2011-03-29 2016-04-12 Blackberry Limited System and method for managing flash memory
US8539007B2 (en) * 2011-10-17 2013-09-17 International Business Machines Corporation Efficient garbage collection in a compressed journal file
US9733847B2 (en) * 2014-06-02 2017-08-15 Micron Technology, Inc. Systems and methods for transmitting packets in a scalable memory system protocol
CN110727647B (zh) * 2019-10-21 2022-07-05 中国民航信息网络股份有限公司 运价数据存储方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2005066793A2 (en) * 2003-12-30 2005-07-21 Sandisk Corporation Non-volatile memory and method with non-sequential update block management
US20060184718A1 (en) 2005-02-16 2006-08-17 Sinclair Alan W Direct file data programming and deletion in flash memories
US20060224818A1 (en) 2005-04-04 2006-10-05 Standard Microsystems Corporation Method for fast access to flash-memory media

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB0123412D0 (en) * 2001-09-28 2001-11-21 Memquest Ltd Memory system sectors
TWI246064B (en) * 2002-07-29 2005-12-21 Milsys Ltd Data storage and processing device, electronic appliance, electronic system and method of operating an appliance that responds to a plurality of commands
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

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2005066793A2 (en) * 2003-12-30 2005-07-21 Sandisk Corporation Non-volatile memory and method with non-sequential update block management
US20060184718A1 (en) 2005-02-16 2006-08-17 Sinclair Alan W Direct file data programming and deletion in flash memories
US20060224818A1 (en) 2005-04-04 2006-10-05 Standard Microsystems Corporation Method for fast access to flash-memory media

Also Published As

Publication number Publication date
EP1913463A2 (en) 2008-04-23
WO2007019197A3 (en) 2007-09-07
WO2007019197A2 (en) 2007-02-15
KR20080044254A (ko) 2008-05-20
JP2009503743A (ja) 2009-01-29

Similar Documents

Publication Publication Date Title
KR101272642B1 (ko) 플래시 메모리시스템 내의 데이터 저장 용량의 리클레이밍
US7558905B2 (en) Reclaiming data storage capacity in flash memory systems
KR101378031B1 (ko) 데이터 파일을 직접적으로 저장하는 메모리 블록의 관리
US8046522B2 (en) Use of a direct data file system with a continuous logical address space interface and control of file address storage in logical blocks
US7877540B2 (en) Logically-addressed file storage methods
US7669003B2 (en) Reprogrammable non-volatile memory systems with indexing of directly stored data files
US7739444B2 (en) System using a direct data file system with a continuous logical address space interface
US8166267B2 (en) Managing a LBA interface in a direct data file memory system
US7949845B2 (en) Indexing of file data in reprogrammable non-volatile memories that directly store data files
US8209461B2 (en) Configuration of host LBA interface with flash memory
US8880483B2 (en) System and method for implementing extensions to intelligently manage resources of a mass storage system
US7917686B2 (en) Host system with direct data file interface configurability
US20080155175A1 (en) Host System That Manages a LBA Interface With Flash Memory
US20070136553A1 (en) Logically-addressed file storage systems
KR101464199B1 (ko) 연속 논리 주소 공간 인터페이스를 구비한 다이렉트 데이터 파일 시스템을 사용하는 방법
KR20080038368A (ko) 데이터 파일을 직접 저장하는 재프로그램가능 비휘발성메모리에 파일 데이터의 인덱싱
KR20090108695A (ko) 다이렉트 데이터 파일 메모리 시스템에서 lba 인터페이스를 관리하는 방법

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
N231 Notification of change of applicant
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
LAPS Lapse due to unpaid annual fee