KR101464199B1 - 연속 논리 주소 공간 인터페이스를 구비한 다이렉트 데이터 파일 시스템을 사용하는 방법 - Google Patents

연속 논리 주소 공간 인터페이스를 구비한 다이렉트 데이터 파일 시스템을 사용하는 방법 Download PDF

Info

Publication number
KR101464199B1
KR101464199B1 KR1020097015016A KR20097015016A KR101464199B1 KR 101464199 B1 KR101464199 B1 KR 101464199B1 KR 1020097015016 A KR1020097015016 A KR 1020097015016A KR 20097015016 A KR20097015016 A KR 20097015016A KR 101464199 B1 KR101464199 B1 KR 101464199B1
Authority
KR
South Korea
Prior art keywords
data
file
blocks
block
logical
Prior art date
Application number
KR1020097015016A
Other languages
English (en)
Other versions
KR20090108694A (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/616,236 external-priority patent/US7739444B2/en
Priority claimed from US11/616,242 external-priority patent/US8046522B2/en
Application filed by 샌디스크 테크놀로지스, 인코포레이티드 filed Critical 샌디스크 테크놀로지스, 인코포레이티드
Publication of KR20090108694A publication Critical patent/KR20090108694A/ko
Application granted granted Critical
Publication of KR101464199B1 publication Critical patent/KR101464199B1/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/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • 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
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/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
    • 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
    • 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/0292User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
    • 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

Abstract

데이터 파일들에는 물리 메모리 셀들의 블록들들에 일반적인 유형의 플래시 메모리 시스템의 연속된 논리 주소 공간 인터페이스(LBA 인터페이스)의 하나 이상의 논리 블록들 내에서 주소들이 할당된다. 이 할당은 전형적으로 데이터 파일들을 발생하는 그러나 반드시 발생하는 것은 아닌 호스트 장치에 의해 행해질 수 있다. 임의의 한 파일의 데이터를 내포하는 논리 블록의 수는 물리 메모리 블록들 내에서 파일 데이터의 단편화 량을 감소시키고 그럼으로써 양호한 메모리 성능을 유지하도록 제어된다. 호스트는 접속된 메모리의 물리적 특징을 파악한 것에 응하여 주소 공간의 논리 블록들을 구성할 수 있다.

Description

연속 논리 주소 공간 인터페이스를 구비한 다이렉트 데이터 파일 시스템을 사용하는 방법{USE OF A DIRECT DATA FILE SYSTEM WITH A CONTINUOUS LOGICAL ADDRESS SPACE INTERFACE}
이 출원은, 일반적으로, 접속된 호스트 장치에 데이터를 저장 및 전송하기 위해 재프로그램 가능 반도체 플래시 메모리와 같은 비휘발성 메모리 시스템을 작동하는 것에 관한 것이고, 보다 구체적으로는 내부 데이터 파일 객체의 관리에 관한 것이다.
초기 세대의 상용 플래시 메모리 시스템들에서, 사각형상 어레이의 메모리 셀들은 각 그룹이 표준 디스크 드라이브 섹터, 즉 512 바이트들의 데이터량을 저장한 많은 수의 그룹들의 셀들로 분할되었다. 오류정정부호(ECC) 및 아마도 이외에 사용자 데이터 및/또는 이것이 저장된 메모리 셀 그룹에 관계된 오버헤드 데이터를 저장하기 위해 16 바이트와 같은 추가의 데이터량도 일반적으로 각 그룹 내에 포함된다. 이러한 각 그룹 내 메모리 셀들은 함께 소거될 수 있는 최소 수의 메모리 셀들이다. 즉, 소거 단위는 사실상 한 데이터 섹터 및 포함된 임의의 오버헤드 데이터를 저장하는 메모리 셀들의 수이다. 이러한 유형의 메모리 시스템의 예들이 미국특허 5,602,987 및 6,426,893에 기술되어 있다. 메모리 셀들이 이들을 데이터로 재 프로그램하기 전에 소거될 필요가 있다는 것이 플래시 메모리의 특징이다.
플래시 메모리 시스템들은 대부분 일반적으로, 개인용 컴퓨터, 카메라 등과 같은 다양한 호스트들에 착탈 가능하게 접속되지만 이러한 호스트 시스템들 내에 내장될 수도 있는 메모리 카드 형태로 또는 플래시 드라이브 형태로 제공된다. 데이터를 메모리에 기입할 때, 호스트는 일반적으로 메모리 시스템의 연속된 가상 주소 공간 내에 섹터들, 클러스터들 또는 이외 데이터 단위들에 고유 논리 주소들을 할당한다. 디스크 운영 시스템(DOS)처럼, 호스트는 메모리 시스템의 논리 주소 공간 내에 주소들에 데이터를 기입하며 이들로부터 데이터를 판독한다. 메모리 시스템 내에 제어기는 호스트로부터 수신된 논리 주소들을, 데이터가 실제로 저장되는 메모리 어레이 내의 물리적 주소들로 변환하며 이어서 이들 주소 변환들을 관리한다. 메모리 시스템의 데이터 저장 용량(capcity)은 적어도, 메모리 시스템에 대해 정의되는 전체 논리 주소 공간에 대해 주소 지정이 가능한 데이터량만큼이다.
플래시 메모리 시스템의 후 세대들에서, 소거 단위의 크기는 복수의 섹터들의 데이터를 저장하기에 충분한 한 블록의 메모리 셀들까지 증가되었다. 메모리 시스템들이 접속되는 호스트 시스템들이 섹터들과 같은 작은 최소단위들로 데이터를 프로그램 및 판독할 수 있을지라도, 많은 수의 섹터들이 플래시 메모리의 단일 소거 단위로 저장된다. 호스트가 논리 섹터들의 데이터를 업데이트 또는 대체할 때 한 블록 내 몇 개의 섹터들의 데이터가 폐용(obsolete)이 되는 것이 일반적이다. 블록 내 저장된 임의의 데이터에 덮어쓸 수 있기 전에 전체 블록이 소거되어야 하기 때문에, 소거되어 데이터용으로 남은 용량을 갖는 다른 블록에 새로운 또는 업 데이트된 데이터가 저장되는 것이 일반적이다. 이 프로세스는 원 블록을 폐용 데이터를 가진채로 메모리 내에 유용한 공간을 점하게 한다. 그러나, 이 블록은 이 내에 어떠한 유효 데이터가 남아 있을지라도 소거될 수 없다.
그러므로, 메모리의 저장용량을 더 잘 이용하기 위해서, 유효한 부분적 데이터 블록량들을 합체(consolidate) 또는 수거하고 이들을 소거된 블록에 카피함으로써 이어서 이들 데이터가 카피된 블록(들)이 소거되어 이들의 전체 저장용량이 재사용될 수 있도록 하는 것이 일반적이다. 또한, 한 블록 내에 데이터 섹터들을 이들의 논리적 주소들의 순서로 그룹화하는 것이 데이터 판독 및 판독된 데이터를 호스트에 전송하는 속도를 증가시키기 때문에 이와 같이 그룹화하기 위해서 데이터를 카피하는 것이 또한 바람직하다. 이러한 데이터 카피가 너무 빈번하게 행해진다면, 메모리 시스템의 동작수행이 저하될 수 있다. 특히 이것은 전형적인 경우로서, 메모리의 저장용량이 시스템의 논리 주소 공간을 통해 호스트에 의해 주소 지정이 가능한 데이터량 정도인 메모리 시스템들의 동작에 영향을 미친다. 이 경우, 호스트 프로그래밍 명령이 실행될 수 있기 전에 데이터 합체 또는 수거가 요구될 수 있다. 그러면 프로그래밍 시간이 증가된다.
주어진 반도체 면적에 저장될 수 있는 데이터 비트수를 증가시키기 위해서 계속되는 세대의 메모리 시스템들에서 블록의 크기들이 증가하고 있다. 256 데이터 섹터들 및 그 이상을 저장하는 블록들이 일반적인 것이 되고 있다. 또한, 2, 4 또는 그 이상의 블록의 서로 다른 어레이들 또는 서브-어레이들이, 데이터 프로그래밍 및 판독에서 병행도(degree of parallelism)를 증가시키기 위해 메타블록들로 함께 논리적으로 흔히 연결(link) 된다. 이러한 대용량과 더불어 메모리 시스템을 효율적으로 운영함에 있어 운영 단위들이 문제가 되고 있다.
위에 상호참조된 특허출원들은 호스트에 의해 공급되는 플래시 메모리에 데이터 파일 객체를 직접 저장하는 메모리 시스템들을 기술한다. 이것은 연속된 논리 주소 공간이 배경기술에서 위에 기술된 바와 같이, 호스트와 메모리 시스템간에 인터페이스에 존재하는 대부분의 현재 시판되는 시스템들과는 다르다. 이러한 "LBA 인터페이스"에 있어서, 개개의 데이터 파일 객체의 데이터는 대부분 많은 수의 메모리 셀들의 블록들들에 존재한다. 메모리 시스템은 일반적으로 각각 복수의 데이터 섹터들의 클러스터들로 호스트에 의해 공급되는 파일 객체의 데이터를 개개의 데이터 파일 객체들에 연관시키지 않는다. 그보다는, 단지 호스트는 LBA 인터페이스 내 미사용된 논리 주소들을 현재 유효 데이터에 할당되지 않은 저장을 위한 메모리 시스템에 공급되는 데이터에 할당한다. 이때 메모리 시스템은 클러스터들이 속하는 데이터 파일 객체들에 대해 아는 것이 없이 메모리 시스템이 효율적으로 동작하게 수신된 데이터를 저장하기 위해 다양한 메모리 셀들의 블록들들을 할당한다. 전형적인 결과는 개개의 파일 객체의 데이터가 많은 서로 다른 메모리 셀들의 블록들들에 저장되는 조각들로 단편화(fragment)된다.
한편, 위에 상호참조된 많은 특허출원들에서, 메모리 시스템은 LBA 인터페이스를 거칠 필요없이 호스트로부터 직접 데이터 파일 객체를 수신하므로, 메모리 시스템은 이의 성능을 개선하도록 개개의 파일들의 데이터를 메모리 셀들의 블록들들에 할당할 수 있다. 예를 들면, 데이터가 속하는 파일은 알려지기 때문에, 메모리 시스템은 임의의 한 데이터 파일이 저장되는 메모리 셀들의 블록들의 수를 제한시킬 수도 있다. 구체적으로, 메모리 시스템은 또 다른 파일 객체의 데이터도 내포하는, 파일 객체의 데이터가 저장되는 메모리 셀들의 블록들의 수를 제약할 수도 있다. 그러므로 파일 데이터의 단편화(fragmentation)가 제어될 수 있다. 이것은 블록에 저장된 제 2 파일의 데이터가 삭제 또는 수정될 때 생성되었던 폐용 데이터 공간을 재사용하기 위해서 공통 블록으로부터 재배치되어야 하는 유효 파일 데이터의 볼륨을 최소화한다. 이에 따라 성능 및 플래시 메모리 시스템의 수명이 현저하게 개선된다.
이러한 개선된 성능 및 내구성은 메모리 시스템이 아니라 호스트에서 다이렉트 데이터 파일 관리 시스템이 구현된다면 실현될 수도 있다. 호스트와 메모리 시스템간에 LBA 인터페이스가 여전히 존재할 수도 있다. 그러나, 클러스터들의 파일 데이터를 이 단일의 인접한 논리 주소 공간에 할당하는 것이 아니라, 파일 데이터는 메모리 시스템 내 물리 블록들에 대응하는 이 공간 내 다수 블록의 논리 주소들에 할당된다. 대신에, 물리 메모리 셀들의 블록들들에 관하여 플래시 메모리 시스템 내에 구현되게 위에 상호참조된 특허출원들에 기술된 파일 데이터 관리 기술들은 호스트/메모리 시스템 인터페이스의 논리 주소 공간 내에 논리 블록의 인접한 주소들에 관하여 호스트 내에서 수행된다. 메모리 시스템은 현재 인기리에 시판되는 LBA 인터페이스를 구비한 통상의 것일 수도 있다. 호스트 내에 다이렉트 데이터 파일 관리 시스템의 동작은 메모리 시스템에서 동작하는 다이렉트 데이터 파일 시스템이 하나 이상의 파일로부터 데이터를 내포하는 물리 메모리 셀들의 블록들의 수를 제한시키는 것과 마찬가지로, 하나 이상의 파일로부터 데이터를 내포하는 논리 블록의 수를 제한시킬 수 있다. 물리 메모리 셀들의 블록들들 중에 개개의 파일 객체의 데이터의 단편화는 마찬가지로 감소되고 물리 메모리 셀들의 블록들들에 매핑되는 논리 주소 공간의 블록들을 관리함으로써 달성된다.
바람직하게, LBA 인터페이스에서 논리 블록들은 동일 데이터 저장 용량 및 그 외 유사점들을 갖는 메모리 시스템의 물리 블록들에 매핑된다. 구체적으로, 논리 블록들은 다이렉트 데이터 파일 시스템이 메모리 시스템 내에서 동작하고 있었다면 물리 블록들이 나타났을 것과 동일하게 다이렉트 데이터 파일 시스템에 보이도록 호스트에 의해 구성된다. 정상적으로는 호스트에 공급되지 않는 정보인 물리 메모리 블록의 특징이, 호스트에 의해 메모리 시스템의 초기화시 이 시스템에 의해 제공될 수도 있다. 이어서 호스트는 물리 메모리의 특징들에 대응하는 특징들을 갖는 블록들로 연속한 논리 주소 공간을 구성하고 그후에 이들 논리 블록들 내에서 주소들에 데이터를 기입한다.
대안으로서, 호스트에 구현되는 것이 아니라, 다이렉트 데이터 파일 시스템은 위에 기술된 바와 동일한 방식으로, 메모리 시스템의 LBA 인터페이스의 연속된 주소 공간에 걸쳐 정의되는 논리 블록들을 사용하여 메모리 시스템에서 동작될 수도 있다. 메모리 시스템의 일부일지라도, 이 다이렉트 데이터 파일 동작은 위에 상호참조된 특허출원들에 기술된 예들과는 다르다. 이전 출원들에서 기술된 예들로서, LBA 인터페이스를 대체하는 것으로 파일들에 데이터를 메모리 시스템이 수신할 수 있도록 메모리 시스템의 백-엔드에서 동작하지 않고, 다이렉트 데이터 파일 시스템은 LBA 인터페이스에 앞서 메모리 시스템에 추가될 수 있고 LBA 인터페이스에 앞서 마치 호스트에 있는 것처럼 하여 위에 기술된 바와 동일한 방식으로 동작된다. 이러한 메모리 시스템은 어느 한 유형이지만 두 유형들은 아닌 인터페이스들을 갖는 호스트와 통신할 수 있게 하는 LBA 인터페이스 및 파일 객체 인터페이스 둘 다를 제공하게 구성될 수도 있다. 이것은 많은 유형들의 호스트 장치들에 착탈 가능하게 접속되게 할 수 있는 메모리 카드들에서 사용에 특히 편리하다.
또 다른 대안으로서, 처리능력을 가진 착탈 가능한 머더(mother) 카드에는 다이렉트 파일 능력을, 이 능력은 없지만 다이렉트 데이터 파일 인터페이스를 가진 호스트에 추가하기 위해서 위에 기술된 다이렉트 데이터 파일 시스템이 제공될 수도 있다. 머더 카드는 호스트에 접속되었을 때 LBA 인터페이스를 가진 표준 메모리 카드가 착탈 가능하게 접속될 수 있는 카드의 출력에 LBA 인터페이스를 제공하게 동작한다.
본 발명의 추가의 면들, 잇점들 및 특징들은 발명의 예들의 다음 설명에 포함되고 이 설명은 첨부한 도면들에 관련하여 취해질 것이다.
모든 특허들, 특허출원들, 논문들, 책자들, 명세들, 이외 공보들, 문서들 및 여기 참조된 자료들은 모든 목적을 위해 이들 전체를 참조로 여기 포함시킨다. 포함된 공보들, 문서들 또는 자료들 및 본 문서의 텍스트간에 용어의 정의 또는 사용에서 어떤 비일관성 또는 상충될 정도로 본 문서에 용어의 정의 또는 사용이 우선할 것이다.
도 1은 호스트 및 접속된 비휘발성 메모리 시스템의 개략도이다.
도 2는 도 1의 비휘발성 메모리로서 사용을 위해 플래시 메모리 시스템의 예의 블록도이다.
도 3은 도 2의 시스템에서 사용될 수 있는 메모리 셀 어레이의 대표적 회로도이다.
도 4는 도 2의 시스템의 물리 메모리 구성의 예시도이다.
도 5는 도 4의 물리 메모리의 일부의 상세도이다.
도 6은 도 4 및 도 5의 물리 메모리의 부분의 상세도이다.
도 7a, 도 7b 및 도 7c는 프로그램가능 메모리 시스템을 동작시키는 3가지 방법들을 도시하고 대조한 것이다.
도 8a, 도 8b 및 도 8c는 호스트 시스템과의 인터페이스들뿐만 아니라, 각각 도 7a, 도 7b, 도 7c에 도시된 재프로그램 가능 메모리 시스템을 동작시키는 동일한 3가지 방법들을 다른 포맷으로 도시하고 대조한 것이다.
도 9a, 도 9b 및 도 9c는 각각 도 8a, 도 8b 및 도 8c에 도시된, 재프로그램가능 메모리 시스템 및 호스트와의 인터페이스들을 동작시키는 동일한 3가지 방법들을 다른 포맷으로 도시하고 대조한 것이다.
도 10은 도 9c의 기술을 수행하는데 사용될 수 있는 논리-물리 블록 매핑예의 예시도이다.
도 11은 도 9c 및 도 10에 도시된 기술을 수행하기 위한 파라미터들을 설정하기 위해 호스트와 메모리 시스템간의 상호작용을 도시한 것이다.
도 12는 다이렉트 데이터 파일 시스템의 동작 사이클을 도시한 것이다.
도 13a 내지 도 13d는 파일의 데이터를 기입하는 서로 다른 4개의 예들을 도시한 것이다.
도 14a 내지 도 14e는 단일 데이터 파일을 기입하는 순서를 도시한 것이다.
도 15는 도 14e의 블록들을 재사용한 결과를 도시한 것이다.
도 16a 내지 도 16d는 블록의 유형들의 다양한 허용된 조합들에서 저장된 데이터 파일의 예들을 도시한 것이다.
도 17은 특정 예에 따라 파일들의 허용된 상태들을 주는 테이블이다.
도 18은 프로그래밍 데이터에 의한 허용된 파일 상태 전이를 나타내는 상태도이다.
도 19는 도 18에 도시된 파일 상태 전이들을 기술하는 테이블이다.
도 20은 폐용 데이터에 의한 허용된 파일 상태 전이들을 도시한 상태도이다.
도 21은 도 20에 도시된 파일 상태 전이들을 기술하는 테이블이다.
도 22는 재이용 블록들에 의한 허용된 파일 상태 전이들을 도시한 상태도이다.
도 23은 도 22에 도시된 파일 상태 전이들을 기술하는 테이블이다.
도 24는 데이터 파일들을 논리 블록들에 정렬하는 일 실시예도이다.
도 25는 도 24의 데이터 정렬 실시예에 대한 다양한 상태들 하에서 활성 블록의 할당을 보인 테이블이다.
도 26은 데이터 파일들을 논리 블록들에 정렬하는 대안적 실시예도이다.
도 27은 도 26의 데이터 정렬 실시예에 대한 다양한 상태들 하에서 활성 블록의 할당을 보인 테이블이다.
도 28a 내지 도 28d는 블록 재사용 동작들의 예들을 도시한 것이다.
도 29는 일반적인 면에서 재사용 동작을 예시한 흐름도이다.
도 30은 전형적인 부분 메모리 셀들의 블록들에 저장된 데이터의 유형들을 도시한 것이다.
도 31은 도 29의 흐름도의 단계들 중 하나를 수행하는 구체적 실시예의 상세도이다.
도 32는 도 29의 흐름도의 동일 단계를 실행하는 대안적 실시예의 상세도이다.
도 33은 또 다른 실시예의 2개의 블록 리스트들에 넣어진 블록 유형들을 정의하는 테이블이다.
플래시 메모리 시스템의 일반적인 설명
전형적인 플래시 메모리 시스템이 도 1 내지 도 6에 관하여 기술된다. 이러한 시스템에서 본 발명의 다양한 면들이 구현될 수 있다. 도 1의 호스트 시스템(1)은 데이터를 플래시 메모리(2)에 저장하며 이로부터 데이터를 인출한다. 플래시 메모리가 호스트 내에 내장될 수도 있을지라도, 메모리(2)는 기계 및 전기적 콘넥터의 메이팅(mating) 부분들(3, 4)를 통해 호스트에 착탈 가능하게 접속되는 더 일반적인 형태의 카드인 것으로 도시되었다. 예로서 CompactFlash(CF), MultiMediaCard(MMC), 시큐어 디지털(SD), miniSD, 메모리 스틱, SmartMedia 및 TransFlash 카드들이 시판되는 현재 많은 서로 다른 플래시 메모리 카드들이 있다. 이들 카드들의 각각이 이의 표준화된 명세들에 따라 고유한 기계 및/또는 전기적 인터페이스를 갖고 있을지라도, 각각에 포함된 플래시 메모리는 매우 유사하다. 이들 카드들은 모두 본원의 양수인인 샌디스크사로부터 구입될 수 있다. 샌디스크는 Cruzer 등록상표로 일련의 플래시 드라이브들도 제공하는데, 이들은 호스트의 USB 리셉터클에 플러그 인 함으로써 호스트에 접속하기 위한 USB(Universal Serial Bus) 플러그를 구비하는 소형 패키지 휴대 메모리 시스템들이다. 이들 메모리 카드들 및 플래시 드라이브들 각각은, 호스트와 인터페이스하며 이들 내에 플래시 메모리의 동작을 제어하는 제어기들을 포함한다.
이러한 메모리 카드들 및 플래시 드라이브들을 사용하는 호스트 시스템들은 많으며 다양하다. 이들은 개인용 컴퓨터들(PC), 랩탑 및 그 외 휴대 컴퓨터들, 셀룰라 전화들, PDA들, 디지털 스틸 카메라들, 디지털 무비 카메라들 및 휴대 오디오 플레이어들을 포함한다. 전형적으로 호스트는 하나 이상의 유형들의 메모리 카드들 또는 플래시 드라이브들용의 내장된 리셉터클을 포함하나 일부는 메모리 카드가 플러그 되는 어댑터들을 필요로 한다.
도 1의 호스트 시스템(1)은 메모리(2)에 관한 한, 회로와 소프트웨어와의 조합으로 구성된 2개의 주요 부분들을 구비한 것으로서 볼 수도 있다. 이들은 애플리케이션 부분(5), 그리고 메모리(2)와 인터페이스하는 드라이버 부분(6)이다. 개인용 컴퓨터에서, 예를 들면, 애플리케이션 부분(5)은 워드 프로세싱, 그래픽스, 제 어 또는 이외 인기있는 애플리케이션 소프트웨어를 실행하는 프로세서를 포함할 수 있다. 단일의 한 세트의 기능들을 수행하는데 주로 전용되는 카메라, 셀룰라 전화 또는 이외 호스트 시스템에서, 애플리케이션 부분(5)은 사진을 촬영하고 저장하는 카메라, 전화를 걸고 수신하는 셀룰라 전화, 등을 동작시키는 소프트웨어를 포함한다.
도 1의 메모리 시스템(2)은 플래시 메모리(7) 및 회로들(8)을 포함하며 이들은 데이터를 주고받기 위해 카드가 접속되는 호스트에 인터페이스하며 메모리(7)를 제어한다. 일반적으로 제어기(8)는 호스트(1)에 의해 사용되는 데이터의 논리 주소들과 데이터 프로그래밍 및 판독시 메모리(7)의 물리 주소들간을 변환한다.
도 2를 참조하여, 도 1의 비휘발성 메모리(2)로서 사용될 수 있는 전형적인 플래시 메모리 시스템의 회로가 기술된다. 시스템 제어기는 일반적으로, 시스템 버스(13)로 하나 이상의 집적회로 메모리 칩들과 병렬로 접속되는 단일 집적회로 칩(11) 상에 구현되며, 이러한 단일의 메모리 칩(15)이 도 2에 도시되었다. 도시된 특정의 버스(13)는 데이터를 전달하기 위한 한 세트의 도체들(17)과, 메모리 주소들용의 한 세트의 도체들(19)과, 제어 및 상태 신호들을 위한 한 세트의 도체들(21)을 개별적으로 포함한다. 대안적으로, 단일의 한 세트의 도체들은 이들 3개의 기능들간에 시간적으로 공유될 수 있다. 또한, "Ring Bus Structure and It's Use in Flash Memory Systems"명칭의 공개번호 2006/0031593 A1, 2004년 8월 9일에 출원된 미국특허출원번호 10/915,039에 기술된 링 버스와 같은, 시스템 버스들의 다른 구성들이 채용될 수 있다.
전형적인 제어기 칩(11)은 인터페이스 회로들(25)을 통해 시스템 버스(13)와 인터페이스하는 자신의 내부 내부(23)를 갖는다. 버스에 정규로 접속되는 주요 기능들은 프로세서(27)(이를테면 마이크로프로세서 또는 마이크로제어기), 시스템을 초기화("부팅")하기 위한 코드를 내장한 판독전용 메모리(ROM)(29), 및 메모리와 호스트 회로들(33) 간에 전달되는 데이터를 주로 버퍼링하는데 사용되는 랜덤 액세스 메모리(RAM)(31)이며, 이들 호스트 회로들(33)은 메모리와 호스트 간에 제어기를 통해 전달되는 데이터에 대해 오류정정부호(ECC)를 계산하고 체크하며 버스(23)에 접속될 수도 있다.
제어기를 통해 전달되는 데이터를 엔코딩 및 디코딩하는데 전용되는 회로(34)도 포함될 수 있다. 이러한 엔코딩은 압축 및 보안 암호화를 포함하는데 대부분의 임의의 유형의 데이터 변환은 이러한 식으로 수행될 수도 있다. 전용 회로들(33, 34)은 이용되었을 때, 이들이 아니면 펌웨어 제어 하에 프로세서(27)에 의해 실행될 수도 있을 특정의 알고리즘들을 실행한다. 제어기 버스(23)는 회로들(35)을 통해 호스트 시스템과 인터페이스하는데, 이것은 메모리 카드 내에 내장된 도 2의 시스템의 경우, 콘넥터(4)의 일부인 카드의 외부 콘택들(37)을 통해 행해진다. 클럭(39)은 제어기(11)의 다른 성분들 각각과 접속되고 이에 의해 이용된다.
메모리 칩(15)은 시스템 버스(13)에 접속된 그 외 어떤 다른 것들도, 전형적으로 복수의 서브-어레이들 또는 플레인들(plane)로 구성된 한 어레이의 메모리 셀들을 내포하는데, 간단하게 하기 위해서 이러한 플레인들(41, 43)이 2개가 도시되 었으며, 그러나 그 이상으로, 이를테면 4개 또는 8개의 이러한 플레인들이 대신에 사용될 수도 있다. 대안적으로, 칩(15)의 메모리 셀 어레이는 플레인들로 분할되지 않을 수도 있다. 그러나, 그와 같이 분할되었을 때, 각각의 플레인은 서로 독립적으로 동작할 수 있는 자산의 컬럼 제어 회로들(45, 47)을 갖는다. 회로들(45, 47)은 이들 각각의 메모리 셀 어레이의 주소들을 시스템 버스(13)의 주소 부분(19)으로부터 수신하고, 이들을 디코딩하여 각각의 비트라인들(49, 51) 중 하나 이상을 주소 지정한다. 워드라인들(53)은 주소 버스(19)로 수신된 주소들에 응하여 행 제어회로들(55)을 통해 주소가 지정된다. 소스 전압 제어회로들(57, 59)도, p-웰 전압제어 회로들(61, 63)처럼, 각각의 플레인들에 접속된다. 메모리 칩(15)이 단일 어레이의 메모리 셀들을 구비하며 2개 이상의 이러한 칩들이 시스템에 존재한다면, 각 칩의 어레이는 위에 기술된 복수-플레인 칩 내에 플레인 또는 서브-어레이와 유사하게 동작될 수 있다.
시스템 버스(13)의 데이터 부분(17)에 접속되는 각각의 데이터 입력/출력 회로들(65, 67)을 통해 데이터가 플레인들(41, 43)에 그리고 이로부터 전송된다. 회로들(65, 67)은 둘 다가 데이터를 메모리 셀들에 프로그램하는 것과 각각의 컬럼 제어 회로들(45, 47)을 통해 플레인들에 접속된 라인들(69, 71)을 통해, 데이터를 각각의 플레인들의 메모리 셀들로부터 데이터를 판독하는 것을 제공한다.
제어기(11)가 데이터를 프로그램하고, 데이터를 판독하고, 각종의 하우스키핑 문제들을 처리하기 위해 메모리 칩(15)의 동작을 제어할지라도, 각각의 메모리 칩은 이러한 기능들을 수행하기 위해 제어기(11)로부터 명령들을 실행하는 어떤 제 어회로도 내포한다. 인터페이스 회로들(73)이 시스템 버스(13)의 제어 및 상태 부분(21)에 접속된다. 제어기로부터 명령들이 상태머신(75)에 제공되고 그러면 상태머신(75)은 이들 명령들을 실행하기 위해서 다른 회로들의 특정의 제어를 제공한다. 제어라인들(77 ~ 81)은 도 2에 도시된 바와 같이 이들 다른 회로들에 상태머신(75)을 접속한다. 상태머신(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 어레이의 예가 도 3의 회로도에 의해 도시되었으며, 이것은 도 2의 메모리 시스템의 메모리 셀 어레이(41)의 일부이다. 많은 수의 전역 비트라인들이 제공되며, 단지 4개의 이러한 라인들(91 ~ 94)만이 설명을 간단하게 하기 위해서 도 2에 도시되었다. 다수의 직렬접속된 메모리 셀 스트링들(97 ~ 104)이 이들 비트라인들 중 하나와 기준 전위(reference potential) 사이에 접속된다. 대표로서 메모리 셀 스트링(99)을 사용하면, 복수의 전하 저장 메모리 셀들(107 ~ 110)이 스트링의 양단에 선택 트랜지스터들(111, 112)과 직렬로 접속된다. 스트링의 선택 트랜지스터들이 도통하게 되었을 때, 스트링이 이의 비트라인과 기준 전위 간에 접속된다. 이 스트링 내 한 메모리 셀이 한번에 프로그램 또는 판독된다.
도 3의 워드라인들(115 ~ 118)이 다수의 메모리 셀 스트링들 각각 내에 한 메모리 셀의 전하저장 소자를 횡단하여 개별적으로 확장하며, 게이트들(119, 120)은 스트링들의 각 단부에 선택 트랜지스터들의 상태들을 제어한다. 함께 소거되는 한 블록(123)의 메모리 셀들을 형성하기 위해 공통 워드 및 제어 게이트 라인들(115 ~ 120)을 공유하는 메모리 셀 스트링들이 만들어진다. 이 한 블록의 셀들은 한번에 물리적으로 소거될 수 있는 최소 수의 셀들을 내포한다. 워드라인들(115 ~ 118) 중 하나를 따라 있는 것들인 한 행의 메모리 셀들이 한 번에 프로그램된다. 전형적으로, 다수 행들의 NAND 어레이가 규정된 순서로 프로그램되는데, 이 경우엔 그라운드(ground) 또는 또 다른 공통전위에 접속된 스트링들의 단부에 가장 가까이 있는 워드라인(118)을 따라 있는 행부터 시작한다. 워드라인(117)을 따라 있는 행의 메모리 셀들이 다음에 프로그램되고, 등등하여, 블록(123) 전체가 프로그램된다. 워드라인(115)을 따라 있는 행이 마지막으로 프로그램된다.
제 2 블록(125)도 유사하며, 이의 메모리 셀 스트링들은 제 1 블록(123) 내 스트링과 동일하나 다른 한 세트의 워드 및 제어 게이트 라인들을 갖는 전역 비트라인들에 접속된다. 워드 및 제어 게이트 라인들은 이들의 적합한 동작전압들로 행 제어회로들(55)에 의해 구동된다. 도 2의 플레인들(1, 2)와 같이 시스템에 하나 이상의 플레인 또는 서브-어레이가 있다면, 한 메모리 구조는 이들 간에 확장하는 공통의 워드라인들을 사용한다. 대안적으로, 공통 워드라인들을 공유하는 2 이상의 플레이인들 또는 서브-어레이들이 있을 수 있다. 이외 다른 메모리 구조들에서, 개별적 플레인들 또는 서브-어레이들의 워드라인들이 개별적으로 구동된다.
위에 언급된 몇 개의 NAND 특허들 및 공개된 출원에 기술된 바와 같이, 메모리 시스템은 각각의 전하 저장 소자 또는 영역에 2 이상의 검출가능한 레벨들의 전하를 저장하고, 그럼으로써 각각에 하나 이상의 비트의 데이터를 저장하게 동작될 수도 있다. 메모리 셀들의 전하 저장소자들은 대부분 일반적으로 도전형 플로팅 게이트들이지만 대안적으로 미국특허 6,925,007에 기술된 바와 같이, 비도전형 유전 전하 트랩핑 물질일 수도 있다.
도 4는 이하 기술되는 예로서 사용되는 플래시 메모리 셀 어레이(7)(도 1)의 구성을 개념적으로 도시한 것이다. 4개의 플레인들 또는 서브-어레이(131 ~ 134)의 메모리 셀들이 단일 집적 메모리 셀 칩 상에, 또는 2개의 칩들 상에(각 칩 상에 플레인들 중 2개), 또는 4개의 개별적 칩들 상에 있을 수 있다. 구체적인 배열은 이하 논의에서 중요하지 않다. 물론, 1, 2, 8, 16, 또는 그 이상의 다른 개수의 플레인들이 시스템에 존재할 수도 있다. 플레인들이 각각의 플레인들(131 ~ 134)에 위치된, 이를테면 블록들(137, 138, 139, 140)과 같은 사각형들에 의해 도 4에 도시된 다수 블록의 메모리 셀들로 개별적으로 분할된다. 각 플레인에 수십개(dozen) 또는 수백개의 블록들이 있을 수 있다. 위에 언급된 바와 같이, 한 블록의 메모리 셀들은 물리적으로 함께 소거될 수 있는 최소 수의 메모리 셀들인 소거 단위이다. 그러나, 증가된 병행도에 있어서, 블록들은 더 큰 메타블록 단위들로 동작된다. 각 플레인으로부터 한 블록이 함께 논리적으로 연결되어 한 메타블록을 형성한다. 4개의 블록들(137 ~ 140)이 한 메타블록(141)을 형성하는 것으로 도시되었다. 메타블록 내 모든 셀들은 전형적으로 함께 소거된다. 메타블록을 형성하기 위해 사용되는 블록들은 블록들(145 ~ 148)로 구성된 제 2 메타블록(143)에 도시된 바와 같이, 그들 각각의 플레인들 내에 동일한 상대적 위치들로 제약될 필요는 없다. 모든 플레인들에 걸쳐 메타블록들을 확장하는 것이 일반적으로 바람직할지라도, 고 시스템 성능을 위해서, 메모리 시스템은 서로 다른 플레인들 내 하나, 2, 또는 3개의 블록들 중 어느 것 또는 전부로 된 메타블록들을 동적으로 형성하는 능력을 갖추어 동작될 수 있다. 이것은 메타블록의 크기가 한 프로그래밍 동작으로 저장에 사용할 수 있는 데이터량에 더 가깝게 맞게 할 수 있다.
그러면 개별적 블록들은 도 5에 도시된 바와 같이, 다수 페이지들의 메모리 셀들로 동작 목적들을 위해 분할된다. 예를 들면, 블록들(131 ~ 134) 각각의 메모리 셀들은 각각이 8 페이지들(P0 ~ P7)로 분할된다. 대안적으로, 각 블록 내에 16, 32 또는 그 이상의 페이지들의 메모리 셀들이 있을 수 있다. 페이지는 한번에 프로그램되는 최소 데이터량을 내포하는, 한 블록 내에 데이터 프로그래밍 및 판독 단위이다. 도 3의 NAND 구조에서, 페이지는 블록 내 워드라인을 따른 메모리 셀들로 형성된다. 그러나, 메모리 시스템 동작의 병행도를 증가시키기 위해서, 2 이상의 블록들 내 이러한 페이지들은 메타페이지들로 논리적으로 연결될 수 있다. 메타페이지(151)가 도 5에 도시되었으며, 4개의 블록들(131 ~ 134)의 각각으로부터 한 물리적 페이지로 형성된다. 예를 들면, 메타페이지(151)는 4개의 블록들 각각에 페이지(P2)를 포함하나 메타페이지의 페이지들은 블록들 각각 내에 동일한 상대적 위치를 반드시 가질 필요는 없다. 고 시스템 성능을 위해서, 모든 4개의 플레인들에 걸쳐 병렬로 최대량의 데이터를 프로그램 및 판독하는 것이 바람직할지라도, 메모리 시스템은 서로 다른 플레인들에 개별적 블록들에 하나, 2 또는 3개의 페이지들 중 어느 것 또는 전부로 된 메타페이지들을 형성하게 동작될 수도 있다. 이것은 병렬로 용이하게 취급될 수 있는 데이터량에 프로그래밍 및 판독 동작들이 적응형으로 맞게 할 수 있고 한 메타페이지의 일부가 데이터로 프로그램되지 않은 채로 있게 되는 경우들을 줄인다.
도 5에 도시된 바와 같이, 복수의 플레인들의 물리적 페이지들로 형성된 메타페이지는 이들 복수의 플레인들의 워드라인 행들을 따른 메모리 셀들을 내포한다. 동시에 한 워드라인 행에 모든 셀들을 프로그래밍하기보다는, 이들은 2개 이상의 인터리브된 그룹들로 번갈아 프로그램되는 것이 일반적이며, 각 그룹은 한 페이지의 데이터(단일 블록으로) 또는 한 메타페이지의 데이터(복수의 블록들에 걸쳐)를 저장한다. 한번에 번갈아 메모리 셀들을 프로그래밍함으로써, 데이터 레지스터들 및 감지 증폭기를 포함하는 한 단위의 주변회로들은 비트라인마다 제공될 필요는 없고 그보다는 이웃한 비트라인들간에 시간이 공유된다. 이것은 주변회로들에 대해 요구되는 기판 공간량을 절약하며 행들을 따라 증가된 밀도로 메모리 셀들이 패킹되게 한다. 다르게 한다면, 주어진 메모리 시스템으로부터 가용한 병행도를 최대화하기 위해서 한 행을 따른 모든 셀을 동시에 프로그램하는 것이 바람직하다.
도 3을 참조하면, 한 행을 따라 하나 걸러 메모리 셀로 데이터를 동시에 프로그래밍하는 것은 가장 용이하게는 도시된 단일 행 대신, NAND 스트링들의 적어도 한 단부를 따른 두 행들의 선택 트랜지스터들(도시되지 않음)을 제공함으로써 달성된다. 이때 한 행의 선택 트랜지스터들은 한 제어신호에 응하여, 한 블록 내에 하 나 걸러 스트링을 이들의 각각의 비트라인들에 접속하며, 다른 행의 선택 트랜지스터들은 또 다른 제어신호에 응하여 개재된 하나 걸러 스트링을 각각의 비트라인들에 접속한다. 그러므로 두 페이지들의 데이터가 각 행의 메모리 셀들에 기입된다.
각 논리 페이지에 데이터량은 전형적으로 정수개의 하나 이상의 섹터들의 데이터이며, 각 섹터는 관례적으로 512 바이트의 데이터를 내포한다. 도 6은 페이지 또는 메타페이지의 2개 섹터들(153, 155)의 논리 데이터 페이지를 도시한 것이다. 각 섹터는 일반적으로 512 바이트의 사용자 또는 시스템 데이터가 저장되는 부분(157) 및 부분(157) 내 데이터에 또는 이것이 저장되는 물리 페이지 또는 블록에 관계된 오버헤드 데이터용의 또 다른 수의 바이트들(159)을 내포한다. 오버헤드 데이터의 바이트 수는 전형적으로 16 바이트이므로, 섹터들(153, 155) 각각에 대해 총 528 바이트가 되게 한다. 오버헤드 부분(159)은 프로그래밍동안 데이터 부분(157)으로부터 계산된 ECC, 그의 논리 주소, 블록이 소거되고 재프로그램된 회수의 경험 카운트, 하나 이상의 제어 플래그들, 동작 전압 레벨들, 및/또는 등과, 이에 더하여 이러한 오버헤드 데이터(159)로부터 계산된 ECC를 내포할 수 있다. 대안적으로, 오버헤드 데이터(159), 또는 이의 부분이 다른 블록들 내 서로 다른 페이지들에 저장될 수도 있다.
메모리들의 병행도가 증가함에 따라, 메타블록의 데이터 저장용량이 증가하고 데이터 페이지 및 메타페이지의 크기도 결과적으로 증가한다. 데이터 페이지는 2 이상의 섹터들의 데이터를 내포할 수 있다. 데이터 페이지에 2개의 섹터들과 메타페이지마다 2개의 데이터 페이지들에 있을 때, 메타페이지에 4개의 섹터들이 있 다. 이에 따라 각각의 메타페이지는 2048 바이트의 데이터를 저장한다. 이것은 고 병행도이며, 행들에 메모리 셀들의 수가 증가됨에 따라 훨씬 더 증가될 수 있다. 이러한 이유로, 페이지 및 메타페이지에 데이터량을 증가시키기 위해서 플래시 메모리들의 폭이 확장되고 있다.
위에서 확인된 물리적으로 소형의 재프로그램가능한 비휘발성 메모리 카드들 및 플래시 드라이브들은 512 메가바이트(MB), 1 기가바이트(GB), 2 GB 및 4GB의 데이터 저장용량을 가진 것이 시판되고 있고, 이 이상으로도 갈 수 있다.
파일 객체를 취급하기 위한 기술들
논리 블록( LBA ) 메모리/호스트 인터페이스를 사용한 동작
호스트와 메모리 시스템간에 공통적인 논리 인터페이스가 도 7a, 도 8a 및 도 9a 각각에 서로 다른 형태들로 도시되었다. 호스트에서 생성된 데이터 파일들에는 전형적으로 다수 섹터들의 데이터를 한 클러스터로 하는 단위로, 호스트에 의해 연속된 시스템 주소 공간(LBA 인터페이스)에 논리적 주소들이 할당된다. 메모리 시스템은 이들 논리 주소들을 알게 되고 이들을 데이터가 실제로 저장되는 다수 블록의 메모리 셀들의 물리 주소들에 맵핑된다.
구체적으로 도 9a를 참조하면, 연속한 논리 주소 공간(161)은 메모리 시스템에 저장될 수 있는 모든 데이터에 대해 주소들을 제공할 만큼 충분히 크다. 전형적으로 호스트 주소 공간은 다수 클러스터들의 데이터의 증분들로 분할된다. 각 클러스터는 전형적으로 4 내지 64 섹터들 사이에 어떤 곳에 다수의 섹터들의 데이터를 내포하게 주어진 호스트 시스템에 설계될 수 있다. 표준 섹터는 512 바이트의 사용 자 데이터와 이에 더하여 선택적으로 다수의 바이트들의 오버헤드 데이터로서 총 528 바이트에 대해 일반적으로 16 바이트를 내포한다.
도 9a는 메모리 카드들 또는 플래시 드라이브들에서 발견되는 것과 같은 호스트와 대량 메모리 시스템간에 가장 공통적인 인터페이스를 도시한 것이다. 호스트는 호스트에 의해 실행되는 애플리케이션 소프트웨어 또는 펌웨어 프로그램에 의해 생성 또는 사용되는 데이터 파일들을 취급한다. "파일" 또는 "파일 객체"라는 것은 호스트에 의해 어떤 애플리케이션 또는 목적을 위해 정의된 실체로서 인식되는 일 그룹의 데이터를 의미한다. 파일 객체의 데이터는 유닛으로서 관리된다. 워드 프로세싱 파일의 데이터가 한 예이며, CAD(computer aided design) 소프트웨어의 도면 파일의 데이터는 일반적인 컴퓨터 호스트들로서 PC들, 랩탑 컴퓨터들 등에서 주로 발견되는 또 다른 예이다. pdf 포맷의 문서의 데이터도 이러한 파일이다. 파일 객체의 데이터는 애플리케이션 프로그램의 실행동안 호스트에 의해 생성되거나 다른 어떤 곳에서 생성되어 호스트에 제공된다. 스틸 디지털 비디오 카메라는 메모리 카드에 저장되는 각 사진에 대한 데이터 파일을 발생한다. 셀룰라 전화는 전화 디렉토리와 같은 내부 메모리 카드 상에 파일들로부터 데이터를 이용한다. PDA는 주소 파일, 달력 파일, 등과 같은 몇가지 서로 다른 파일들의 데이터를 저장하고 사용한다. 임의의 이러한 애플리케이션에서, 메모리 카드는 호스트를 동작시키는 소프트웨어도 내포할 수 있다.
도 9a의 예에서 3개의 파일들 1, 2, 3이 생성된 것으로 도시되었다. 호스트 시스템에서 실행되는 애플리케이션 프로그램은 정렬된 한 세트의 데이터로서 각 파 일을 생성하고 이를 고유 이름 또는 다른 참조에 의해 식별한다. 다른 파일들에 기 할당되지 않은 충분히 가용한 논리 주소 공간이 파일 1에 호스트에 의해 할당된다. 파일 1은 인접한 한 범위의 가용한 논리 주소들이 할당된 것으로 도시되었다. 주소들의 범위들은 호스트가 논리 주소들을 데이터에 할당하고 있을 때 이들 주소들이 이용되지 않았을지라도 데이터를 저장하기 위해 피하는, 소프트웨어를 동작시키는 호스트를 위한 특정 범위와 같은 특정한 목적들을 위해 일반적으로 할당된다.
파일 2가 호스트에 의해 나중에 생성되었을 때, 호스트는 유사하게, 도 7에 도시된 바와 같이, 논리 주소 공간(161) 내에 2개의 서로 다른 범위들의 인접 주소들을 할당한다. 파일은 연속한 논리 주소들이 할당될 필요는 없고 그보다는 다른 파일들에 기 할당된 주소 범위들 사이에 주소들의 부분들일 수 있다. 다음에 이 예는 호스트에 의해 생성된 또 다른 파일 3에 파일 1 및 파일 2에 이전에 할당되지 않은 호스트 주소 공간의 다른 부분들 또는 다른 데이터가 할당된 것을 보이고 있다.
호스트는 호스트가 다양한 호스트 파일들에 할당하는 논리 주소들이 유지되는 파일 할당 테이블(FA)을 유지함으로써 메모리 논리 주소 공간을 관리한다. 전형적으로 FAT 테이블은 호스트 메모리에 뿐만 아니라 비휘발성 메모리에 저장되며, 새로운 파일이 저장될 때, 다른 파일들이 삭제될 때, 파일들이 수정될 때, 등 호스트에 의해 빈번하게 업데이트된다. 호스트 파일이 삭제될 때, 예를 들면, 호스트는 다른 데이터 파일들에 사용하기 위해서 현재 사용가능함을 보이게 FAT 테이블을 업데이트함으로써 삭제된 파일에 이전에 할당된 논리 주소들을 할당해제한다.
호스트는 메모리 시스템 제어기가 파일들을 저장하기로 선택한 물리적 위치들에 관해 관여하지 않는다. 전형적인 호스트는 이것이 이의 각종 파일들에 할당하였던 논리 주소 공간 및 논리 주소들만을 알고 있다. 한편, 전형적인 LBA 호스트/카드 인터페이스를 통해 메모리 시스템은 데이터가 기입된 논리 주소 공간의 부분들만을 알고 있으나 논리 주소들이 특정 호스트 파일들에 할당된 것, 또는 호스트 파일들의 수조차도 알지 못한다. 메모리 시스템 제어기는 데이터의 저장 또는 인출을 위해 호스트에 의해 제공된 논리 주소들을 호스트 데이터가 저장되는 플래시 메모리 셀 어레이 내에 고유 물리적 주소들로 변환한다. 블록(163)은 메모리 시스템 제어기에 의해 유지되는 논리-물리 주소 변환들의 작업표를 나타낸다.
메모리 시스템은 고 레벨로 시스템의 성능을 유지하도록 메모리 어레이(165)의 블록들 및 메타블록들 내에 데이터 파일들을 저장하게 프로그램된다. 4개의 플레인들 또는 서브-어레이들이 이 예시에서 사용된다. 플레인들 각각으로부터 한 블록으로 형성된 한 전체 메타블록에 걸쳐, 시스템이 허용하는 최대 병행도로 프로그램되고 판독되는 것이 바람직하다. 적어도 한 메타블록들(167)은 일반적으로, 운영 펌웨어 및 메모리 제어기에 의해 사용되는 데이터를 저장하기 위한 유보된 블록으로서 할당된다. 또 다른 메타블록(169), 또는 복수의 메타블록들은 호스트 운영 소프트웨어, 호스트 FAT 테이블 등의 저장을 위해 할당될 수 있다. 대부분의 물리적 저장 공간은 데이터 파일들의 저장을 위해 존속하여 있다. 그러나, 메모리 제어기는 수신된 데이터가 호스트에 의해 이의 다양한 파일 객체들 간에 어떻게 할당되었는지를 알지 못한다. 일반적으로, 모든 메모리 제어기는 호스트와 상호작용으로부 터 특정 논리 주소들에 호스트에 의해 기입된 데이터가 제어기의 논리-물리 주소 테이블(163)에 의해 유지되는 대응하는 물리 주소들에 저장된 것을 안다.
전형적인 메모리 시스템에서, 주소 공간(161) 내에 데이터량을 저장하는데 필요한 것보다 몇개의 가외의 블록의 저장용량이 제공된다. 이들 가외의 블록들 중 하나 이상이, 메모리의 수명동안 결함이 일어날 수도 있을 다른 블록들을 대용하기 위한 용장성 블록들로서 제공될 수도 있다. 개개의 메타블록들 내에 내포된 블록의 논리 그룹화는 원래 메타블록에 할당되었던 결함이 있는 블록에 대한 용장성 블록의 대체를 포함하여, 다양한 이유들로 변경될 수도 있다.
메타블록(171)과 같은 하나 이상의 추가의 블록들이 전형적으로 소거된 블록 풀(pool) 내에 유지된다. 호스트가 데이터를 메모리 시스템에 기입할 때, 제어기는 호스트에 의해 할당된 논리 주소들을 소거된 블록 풀 내의 메타블록 내 물리주소들로 변환한다. 다른 메타블록은 논리 주소 공간(161) 내에 데이터를 저장하기 위해 사용되지 않으며 이어서 소거되며 후속되는 데이터 기입 동작 동안 사용하기 위해 소거된 풀 블록들로서 지정된다.
특정의 호스트 논리 주소들에 저장된 데이터는 원래의 저장된 데이터가 폐용이 될 때 새로운 데이터에 의해 빈번하게 덮어씌여진다. 응답으로, 메모리 시스템 제어기는 새로운 데이터를 소거된 블록에 기입하고 이어서 데이터가 이들 논리 주소들에 저장되는 새로운 물리 블록을 확인하기 위해서 이들 논리 주소들에 대한 논리-물리 주소표를 변경한다. 이들 논리 주소들에 원래의 데이터를 내포하는 블록들은 소거되고 새로운 데이터의 저장을 위해 사용될 수 있게 된다. 이러한 소거는 기 입 시작시 소거 블록 풀로부터 이전에 소거된 블록들 내에 충분한 저장용량이 없다면 현재 데이터 기입동작이 완료될 수 있기 전에 행해져야 한다. 이것은 시스템 데이터 프로그래밍 속도에 악영향을 미칠 수 있다. 전형적으로 메모리 제어기는 호스트가 이들의 동일 논리 주소에 새로운 데이터를 기입할 때만, 주어진 논리 주소에 데이터를 호스트가 폐용이 되게 하였음을 알게 된다. 그러므로 메모리의 많은 블록들은 한동안 이러한 무효한 데이터를 저장하고 있을 수 있다.
상용 메모리 시스템들에서 사용되는 블록들 및 메타블록의 크기들은 집적회로 메모리 칩의 면적을 효율적으로 이용하기 위해서 증가하고 있다. 이것은 개개의 데이터 기입들 대부분이 메타블록의 저장용량 미만인 데이터량, 대부분의 경우 블록의 저장용량보다 훨씬 적은 데이터량을 저장하는 결과를 초래한다. 메모리 시스템 제어기는 정상적으로는 소거된 풀 메타블록에 새로운 데이터를 보내기 때문에, 이에 따라 메타블록의 부분들이 채워지지 않게 된다. 새로운 데이터가 다른 메타블록에 저장된 어떤 데이터의 업데이트들이라면, 새로운 데이터 메타페이지들의 논리 주소들에 인접한 논리 주소들을 갖는 그 다른 메타블록으로부터 나머지 유효한 메타페이지들의 데이터는 바람직하게는 논리적 주소 순서로 새로운 메타블록에 카피된다. 이전 메타블록은 다른 유효한 데이터 메타페이지들을 보존할 수 있다. 이에 따라 시간이 지남에 따라 개개의 메타블록의 어떤 메타페이지들의 데이터는 폐용이 되어 무효가 되고, 다른 메타블록에 기입되는 동일 논리 주소로 새로운 데이터에 의해 대체된다.
전체 논리 주소 공간(161)에 대해 데이터를 저장하기에 충분한 물리적 메모 리 공간을 유지하기 위해서, 이러한 데이터는 소거된 블록의 풀에 추가되는 블록을 재이용하기 위해서 주기적으로 콤팩트 또는 합체된다(가비지 수거된다(garbage collected)). 또한, 메타블록들 내 데이터의 섹터들의 논리 주소들과는 실제적인 그대로 동일한 순서로 이들을 유지하는 것이 바람직한데, 이것은 인접한 논리 주소들에 데이터를 판독을 더 효율적이게 하기 때문이다. 따라서, 이러한 추가의 목적으로 데이터 콤팩션 및 가비지 수거가 전형적으로 수행된다. 부분적 블록 데이터 업데이트들을 수신할 때 메모리를 관리하고 메타블록의 사용의 어떤 면들이 미국특허 6,763,424에 기술되어 있다.
전형적으로 데이터 콤팩션은 메타블록으로부터 모든 유효한 데이터 메타페이지들을 판독하여 이들을 새로운 블록에 기입하는 것과, 프로세스에서 무효한 데이터를 가진 메타페이지들을 무시하는 것을 수반한다. 유효한 데이터를 가진 메타페이지들은 바람직하게는 이들에 저장된 데이터의 논리 주소 순서와 일치하는 물리 주소 순서로 배열된다. 새로운 메타블록에 점유된 메타페이지들의 수는 무효한 데이터를 내포하는 메타페이지들이 새로운 메타블록에 카피되지 않기 때문에 이전 메타블록에 점유된 것들보다 적을 것이다. 새로운 데이터를 저장하는데 사용할 수 있게 하기 위해서 이어서 이전 블록은 소거되고 소거된 블록 풀에 추가된다. 합체에 이해 얻어지는 추가된 메타페이지들의 용량은 다른 데이터를 저장하기 위해 사용될 수 있게 된다.
가비지 수거 동안, 인접한 또는 거의 인접한 논리 주소들을 가진 유효 데이터의 메타페이지들은 2개 이상의 메타블록들로부터 수집되고 보통 소거된 블록 풀 내에 있는 것인, 또 다른 메타블록에 재기입된다. 모든 유효한 데이터 메타블록들이 원래의 2개 이상의 메타블록들로부터 카피될 때, 이들은 차후에 사용을 위해 소거될 수도 있다. 서로 다른 블록들간에 저장되는 파일들의 단편화가 증가함에 따라 데이터 합체 및 가비지 수거의 발생들이 증가한다.
데이터 합체 및 가비지 수거는 시간이 걸리며, 특히 호스트로부터의 명령이 실행될 수 있기 전에 데이터 합체 또는 가비지 수거가 행해질 필요가 있다면, 메모리 시스템의 수행에 영향을 미칠 수 있다. 이러한 동작들은 보통은 가능한대로 백그라운드에서 행해지게 보통은 메모리 시스템 제어기에 의해 스케쥴이 잡히지만 이들 동작들을 수행할 필요성은 이러한 동작이 완료될 때까지 제어기로 하여금 호스트에게 비지 상태 신호를 주게 할 수 있다. 호스트 명령의 실행이 지연될 수 있는 예는 소거된 블록 풀 내 호스트가 메모리에 기입하기를 원하는 모든 데이터를 저장하기에 충분한 사전에 소거된 메타블록들이 없어 먼저 하나 이상의 메타블록의 유효한 데이터를 클리어하기 위해 -그러면 소거될 수 있다- 데이터 합체 또는 가비지 수거가 필요하게 되는 경우이다. 그러므로 이러한 중단을 최소화하기 위해서 메모리의 제어를 관리하는 것이 연구되었다. 많은 이러한 기술들이 다음의 미국특허출원들에 기술되어 있다: 현재 공개번호 2005/0144358 A1인, 2003년 12월 30일에 출원된 "Management of Non-Volatile Memory Systems Having Large Erase Blocks" 명칭의 미국특허출원번호 10/749,831; 현재 특허 7,139,864인, 2003년 12월 30일에 출원된 "Non- Volatile Memory and Method with Block Management System" 명칭의 출원번호 10/750,155; 현재 공개번호 2005/0141313 A1인 2004년 8월 13일에 출원된 "Non-Volatile Memory and Method with Memory Planes Alignment" 명칭의 출원번호 10/917,888; 현재 공개번호 2005/0141312 A1인 2004년 8월 13일에 출원된 "Non- volatile Memory and Method with Non- Sequential Update Block Management" 명칭의 출원번호 10/917,867; 현재 공개번호 2005/0166087 A1인 2004년 8월 13일에 출원된 "Non-Volatile Memory and Method with Phased Program Failure Handling" 명칭의 출원번호 10/917,889; 현재 공개번호 2005/0144365 A1인 2004년 8월 13일에 출원된 "Non- Volatile Memory and Method with Control Data Management" 명칭의 출원번호 10/917,725; 현재 공개번호 2006/0161722 A1인 2004년 12월 16일에 출원된 "Scratch Pad Block" 명칭의 출원번호 11/016,285; 현재 공개번호 2006/0155921 A1인 2005년 7월 27일에 출원된 "Non- Volatile Memory and Method with Multi-Stream Update Tracking" 명칭의 출원번호 11/192,220; 현재 공개번호 2006/0155922 A1인 2005년 7월 27일에 출원된 "Non- Volatile Memory and Method with Improved Indexing for Scratch Pad and Update Blocks" 명칭의 출원번호 11/192,386; 현재 공개번호 2006/0155920 A1인 2005년 7월 27일에 출원된 "Non-Volatile Memory and Method with Multi-Stream Updating" 명칭의 출원번호 11/191,686.
매우 큰 소거 블록들을 가진 메모리 어레이들의 동작을 효율적으로 제어하려는 한 과제는 주어진 기입동작동안 저장되는 데이터 섹터들의 수를 메모리의 블록의 용량에 맞추고 이들 블록의 경계들에 정렬시키는 것이다. 한 수법은 호스트로부터 새로운 데이터를 저장하기 위해서 사용되는 메타블록을 전체 메타블록을 채우는 량 미만의 데이터량을 저장하는데 필요한대로 최대수의 블록들 미만으로 구성하는 것이다. 적응형 메타블록의 사용이, 현재는 공개번호 2005/0144357 Al인 "Adaptive Metablocks" 명칭의 2003년 12월 30일에 출원된 미국특허출원번호 10/749,189에 기술되어 있다. 데이터 블록들간에 경계들과 메타블록들간에 물리적 경계들을 맞추는 것이 현재 공개번호 2005/0144363 A1인 2004년 5월 7일에 출원된 "Data Boundary Management" 명칭의 특허출원번호 10/841,118, 및 현재 공개번호 2005/0144367 A1인 2004년 12월 16일에 출원된 "Data Run Programming" 명칭의 출원번호 11/016,271에 기술되어 있다.
메모리 제어기는 메모리 시스템을 더 효율적으로 동작시키기 위해서, 비휘발성 메모리에 호스트에 의해 저장되는 FAT 테이블로부터 데이터를 사용할 수도 있다. 한 이러한 사용은 데이터가 호스트에 의해 이들의 논리 주소들을 할당해제함으로써 언제 폐용이 될 것으로 확인되었나를 아는 것이다. 이것을 앎으로써 메모리 제어기는 정규로 호스트가 이들 논리 주소들에 새로운 데이터를 기입함으로써 알게 되기 전에 이러한 무효 데이터를 내포하는 블록의 소거를 메모리 제어기가 스케쥴링할 수 있게 된다. 이것은 "Method and Apparatus for Maintaining Data in Non-Volatile Memory Systems" 명칭으로 2004년 7월 21일에 출원된 미국특허출원 10/897,049에 기술되어 있다. 다른 기술들은 주어진 기입동작이 단일 파일인지, 아니면 복수의 파일들이라면 파일들간의 경계들이 어디인지를 유추하기 위해서 메모리에 새로운 데이터를 기입하는 호스트 패턴들을 모니터하는 것을 포함한다. "FAT Analysis for Optimized Sequential Cluster Management" 명칭의 2004년 12월 23일 에 출원된 미국특허출원번호 11/022,369는 이러한 유형의 기술들의 사용을 기술한다.
메모리 시스템을 효율적으로 동작시키기 위해서, 호스트에 의해 이의 개개의 파일들의 데이터에 할당된 논리 주소들에 관하여 제어기가 할 수 있는 한 많이 아는 것이 바람직하다. 그러면 데이터 파일들은 파일 경계들을 모를 때 많은 수의 메타블록들 중에 흩어져 있기보다는 단일 메타블록 또는 일 그룹의 메타블록들 내에 제어기에 의해 저장될 수 있다. 결과는 데이터 합체 및 가비지 수거 동작들의 수 및 복잡성이 감소된다는 것이다. 메모리 시스템의 성능이 결과로서 개선된다. 그러나, 위에 기술된 바와 같이 호스트/메모리 인터페이스가 논리 주소 공간(161)(도 9a)을 포함할 때 메모리 제어기가 호스트 데이터 파일 구조에 관해 많이 알기는 어렵다.
다이렉트 데이터 파일 동작
대량의 데이터의 저장을 위해 호스트와 메모리 시스템간에 도 7b, 8b 및 9b에 도시된 다른 유형의 인터페이스는 논리 주소 공간의 사용을 제거한다. 대신에 호스트는 각 파일의 데이터를 고유 fileID(또는 이외 고유 참조)에 의해서 그리고 파일 내 데이터 단위들(이를테면 바이트들)의 오프셋 주소들에 의해 논리적으로 주소가 지정된다. 이들 주소들은 메모리 시스템 제어기에 직접 주어지며, 그러면 이 제어기는 각 호스트 파일의 데이터가 물리적으로 어디에 저장되는가에 대해 자신의 테이블을 유지한다. 이것은 위에 상호참조된 특허출원들의 주 요지인 동작이다. 이 파일 인터페이스는 도 2 내지 도 6에 관하여 위에 기술된 바와 동일한 메모리 시스 템에 구현될 수 있다. 도 7b, 도 8b 및 도 9b의 파일 기반 인터페이스와 도 7a, 도 8a 및 도 9a의 LBA 인터페이스 간에 주 차이는 메모리 시스템이 호스트 시스템과 통신하고 파일 데이터를 저장하는 방식이다.
도 8b의 파일 기반 인터페이스를 도 8a의 LBA 인터페이스와 비교하면, 도 8a의 논리 주소 공간 및 호스트에 유지되는 FAT 테이블은 도 8b에는 없다. 그보다는, 호스트에 의해 생성된 데이터 파일들은 파일 번호 및 파일 내 데이터의 오프셋들에 의해 메모리 시스템에 대해 확인된다. 그러면 메모리 시스템은 파일들을 메모리 셀 어레이의 물리 블록들에 직접 매핑한다.
새로운 데이터 파일이 다이렉트 데이터 파일 저장 기술들로 메모리에 프로그램될 때, 블록 내 제 1 물리적 위치부터 시작하여 블록의 위치들을 순차적인 순서로 진행하여 메모리 셀들의 소거된 블록에 데이터가 기입된다. 데이터는 파일 내 데이터의 오프셋들의 순서에 관계없이, 호스트로부터 수신된 순서로 프로그램된다. 프로그래밍은 파일의 모든 데이터가 메모리에 기입될 때까지 계속된다. 파일 내 데이터량이 단일 메모리 블록의 용량을 초과한다면, 제 1 블록이 모두 채워졌을 때, 프로그래밍은 제 2 소거된 블록에서 계속된다. 제 2 메모리 블록은 파일의 모든 데이터가 저장되거나 제 2 블록이 모두 채워질 때까지 제 1 위치부터의 순서로, 제 1 블록과 동일한 방식으로 프로그램된다. 제 3 또는 추가의 블록들은 파일의 임의의 남아있는 데이터로 프로그램될 수 있다. 단일 파일의 복수의 블록들 또는 메타블록들은 물리적으로 또는 논리적으로 연속일 필요는 없다. 설명을 쉽게 하기 위해서, 다른 것이 특정되지 않는 한, 여기에서 사용되는 "블록"이라는 용어는 메타블록들 이 특정의 시스템에서 사용되고 있는지 여부에 따라, 소거의 블록단위를 또는 복수의 블록의 "메타블록"을 지칭한다.
도 9b를 참조하면, 파일 1, 2, 및 3 각각의 식별과 파일들 내 데이터의 오프셋들은 메모리 제어기에 직접 전달된다. 그러면 이 논리 주소 정보는 메모리 제어기 기능(173)에 의해 메모리(165)의 메타블록들 및 메타페이지들의 물리주소들로 변환된다. 파일 데이터는 도 9a의 논리 주소 공간(161)에 맵핑된다.
플래시 최적화 파일 시스템의 원리
도 7c, 도 8c 및 도 9c는 도 7b, 도 8b 및 도 9b의 다이렉트 데이터 파일 기술을 도 7a, 도 8a 및 도 9a에 포함된 유형의 LBA 인터페이스에 탑재한 운영 시스템을, 서로 다른 형태들로 도시한 것이다. 도 7c의 "플래시-최적화 파일 시스템"은 도 7b에 NAND 플래시의 물리적 메모리 셀들의 블록들들에 매핑되지 않고 파일들의 데이터가 도 7c에 LBA 인터페이스의 연속된 주소 공간 내 논리 블록들에 매핑되는 것을 제외하곤, 도 7b의 근본적으로 "다이렉트 파일 저장 백 엔드(Back End) 시스템"과 동일한 방식으로 동작한다. 도 7c의 LBA 인터페이스 및 "LBA-물리 백 엔드 시스템"은 도 7a의 시스템과 공통이다. 도 7c의 시스템에서, 직접적인 파일-블록 주소 할당은 LBA 인터페이스 전에 행해지지만 NAND 플래시 메모리의 물리 블록들 대신 LBA 인터페이스의 연속된 주소 공간에 논리 블록 주소들을 사용하여 동작한다.
동일한 아이디어가 도 8c에 다른 형태로 도시되었다. 호스트에 의해 생성된 데이터 파일들은 저장장치의 논리 주소 공간에 논리 블록 주소들에 할당된다. 이어서 논리 주소 공간의 논리 블록들은 통상의 방식으로 메모리 제어기에 의해 물리 저장매체의 블록들에 매핑된다. 호스트와 메모리 시스템 사이처럼 이들 기능들 중 2개의 가능한 분할들이 도 8c에 도시되었다. 주 실시예는 파일들을 도면에서 호스트 1로서 확인되는 호스트에 논리 블록 주소들에 할당한다. 이때 메모리 1은 통상의 메모리 카드 또는 호스트의 LBA 인터페이스에 접속하는 LBA 인터페이스를 갖는 그 외의 장치이다. 대안적으로, 도 8c의 호스트 2는 파일들 내 데이터 파일 식별들 및 데이터 오프셋들을 메모리 시스템에 인터페이스한다. 이들 파일들을 논리 블록 주소에 할당하는 다이렉트 데이터 파일 기능은 메모리 2 내에서 수행된다.
대부분 일반적으로 메모리 카드, 플래시 드라이브 또는 그 외 소형의 휴대장치 형태인 도 8c의 메모리 2는 추가적으로, 저장장치를 위한 논리 주소 공간에 외부 접속을 제공함으로써 LBA 인터페이스를 포함할 수 있다. 또 다른 대안으로서, 파일들을 논리 블록 주소들에 할당하는 기능은 마이크로프로세서를 포함하는 머더(mother) 카드에서 실행될 수 있다. 이때 머더 카드는 호스트 2에 착탈 가능하게 접속될 수 있게 할 수 있고 메모리 1은 착탈 가능하게 머더 카드에 접속될 수 있게 될 것이다.
파일 객체의 데이터를 논리 주소 공간에 매핑하는 기술이 도 9c에 다른 방식으로 예시되었다. 기능(173')은 고유 파일 식별자의 개개의 논리 주소들 및 파일 내 데이터의 오프셋 주소들과 함께 개개의 파일들의 데이터를 수신한다. 이들 파일 주소들은 기능(173')에 의해서 연속된 논리 주소 공간(161)의 논리 블록들 내 주소들로 변환된다. 개개의 논리 블록의 주소 범위는 어떤 유닛이 물리 메모리에 의해 이용되고 있는지에 따라, 메모리 어레이(165)의 블록 또는 메타블록의 동일 데이터 저장용량을 갖는 것으로 정의된다. 도 9c의 기능(173')은 근본적으로, 도 9b에 파일들이 직접 메모리 셀 어레이(165)에 매핑되는 반면 도 9c에서 파일들이 주소 공간(161) 내 논리 블록들에 매핑되는 것을 제외하고 도 9b의 기능(173)과 동일하다. 이어서 논리 주소 블록들은 도 9c에서 기능(163)에 의해서 메모리 어레이(165)로 변환되고 근본적으로 도 9a에서와 동일하다. 기능(163)은 위에 언급된 미국특허 7,139,864, 및 앞에서 리스트된 다음의 공개된 특허출원들: 2005/0141313 A1, 2005/0141312 A1, 2005/0166087 A1, 2005/0144365 A1 및 2006/0161722 A1에 기술된 바와 같이, 종래의 플래시 메모리 운영 시스템일 수도 있다.
도 9c로부터 주소 공간(161)의 개개의 논리 블록들이 하나 이상의 파일로부터 데이터의 주소들을 내포할 수 있는 것에 유의해야 할 것이다. 또한, 개개의 파일들의 데이터에는 하나 이상의 논리 블록 내의 주소들이 할당될 수 있다. 예를 들면 데이터 파일들 2 및 3 각각에는 2개 이상의 논리 블록들 내의 주소들이 할당된다. 또한, 논리 블록은 2개의 서로 다른 파일들의 데이터를 내포할 수도 있고, 도 9c의 논리 블록 2는 이것의 예이다. 그러나, 일부 다른 파일의 데이터뿐만 아니라 주어진 파일의 데이터를 내포할 수 있는 논리 블록의 수에 적어도 한 제한이 가해지는 것이 바람직하다. 서로 다른 제한들이 서로 다른 상황들에서 이용될 수도 있다. 구체적인 예에서, 파일들의 데이터는 임의의 한 파일이 단지 2개의 논리 블록들만을 다른 파일의 데이터와 공유할 수 있게 주소 공간(161)의 다수의 논리 블록들에 할당된다. 이러한 제약에 따라, 한 특정 파일 객체의 데이터에 논리 블록 주소들의 할당 동안, 파일의 데이터로 단지 부분적으로만 채워지는 것이 허용되는 논 리 블록의 수를 제약하게 된다.
이 제약은 예를 들면 다른 파일의 데이터가 이어서 폐용이 됨에 기인하여, 필요하게 될 수 있는 데이터 재배치 량을 적게 유지한다. 이것이 행해질 때, 주어진 파일의 유효 데이터는 전형적으로 다른 파일의 폐용 데이터를 내포하는 블록으로부터 다른 블록으로 카피된다. 블록의 수를 제약함으로써, 주어진 파일은 다른 파일의 데이터와 공유하여, 이러한 데이터 카피 동작들은 덜 빈번해진다. 이것은 메모리 시스템의 성능을 개선한다.
도 10을 참조하면, 논리 및 물리 블록들 둘 다에서 파일 데이터의 할당이 예시되었다. 예로서의 물리적 메모리 셀들의 블록들(191)은 예시 목적으로 4개의 페이지들(195 ~ 199)로 분할되나 실제 시스템은 전형적으로 블록당 이보다 많은 페이지들을 내포할 것이다. 각 페이지는 복수의 섹터들의 데이터를 저장한다. 데이터는 전형적으로 한 블록에 걸쳐 195 ~ 199 순서로서 한번에 한 페이지씩 프로그램된다. 메모리 시스템이 메타블록들을 이용한다면, 블록(191)은 메타블록이며 페이지들(195 ~ 199)은 메타페이지들이다.
물리 블록(181)에 매핑되는 것은 논리 주소 공간(161)의 논리 블록(193)이다. 논리 블록(193)은 물리블록(191)과 동일한 데이터 저장용량을 갖는 것으로 정의되며, 또한 물리 블록(191)과 동일한 수의 페이지들(201 ~ 204)로 분할되며, 각 논리 페이지는 물리 페이지들(195 ~ 199) 각각과 동일한 데이터 저장용량을 갖는다. 즉, 논리 주소 공간의 입도(granularity)를 바람직하게는 물리 메모리 페이지 또는 메타페이지의 데이터 저장용량과 동일해지게 한다. 데이터에는 데이터의 페이 지들이 물리 블록(191)에 기입되는 것과 동일한 순서로 논리 블록(193) 내에 논리 페이지들의 주소들이 할당된다. 논리 블록(193)의 제 1 페이지(201)의 시작부분에서 데이터의 기입은 물리 블록(191)의 제 1 페이지(195)의 시작부분에서 시작하게 하여 행해진다.
논리 및 물리적 기능들의 이러한 조정(coordination)이 유지되게 하기 위해서, 파일-논리 블록 변환을 행하는 호스트는 조작하고 있는 메모리의 물리적 특징을 알 필요가 있다. 이들 특징들은 메타블록들을 사용하는 메모리 시스템의 예에서, 다음 파라미터에 의해 정의된다:
1. 저장하는 데이터의 섹터들의 수로 물리 페이지의 크기;
2. 개개의 메타페이지를 형성하기 위해 함께 연결되는 페이지들의 수로 메타페이지의 크기;
3. 메타블록당 페이지들의 수; 및
4. 제 1 페이지의 물리적 메타블록에 매핑되는 최하위의 논리 주소.
이러한 정보로, 호스트는 이의 논리 주소 공간(161)의 논리 블록 구조를 도 10에 도시된 방식으로 동작하게 구성할 수 있다. 단지 한 유형의 메모리가 호스트에 내장된 메모리와 같은 한 특정의 호스트에 의해 사용될 것이라면, 호스트의 논리 주소 공간의 단지 한 구성만이 유지될 필요가 있다. 그러나, 더 많은 전형적인 경우는 서로 다른 물리적 특징들을 갖는 휴대 메모리 장치들이 주어진 호스트 장치에, 사실상 많은 서로 다른 호스트 장치들에 착탈 가능하게 접속되는 경우이다. 그러므로 호스트 내에는 이의 논리 블록 구성을 그에 접속된 한 특정의 휴대 메모리 장치의 물리 블록 배열에 맞게 수정하는 능력이 제공된다. 이것을 달성하기 위해서, 위에 열거된 메모리 파라미터들의 데이터는 이들이 호스트에 의해 판독될 수 있게, 메모리 장치 자체에 저장된다. 메모리 시스템의 제어기는 전형적으로, 임의의 특정의 논리 블록이 매핑되는 물리 블록을 변경할 것이지만 그러나 이것은 호스트에는 알려지지 않으며 논리 블록들에 파일 데이터의 주소들의 할당에 영향을 미치지 않는다.
도 11은 상호접속하는 버스(213)를 통해 호스트(211)에 의해 액세스될 수 있는 비휘발성 저장 공간(209)에 이들 파라미터 데이터를 내포하는 메모리 장치(207)를 도시한 것이다. 이들 파라미터들이 호스트에 의해 판독될 수 있는 많은 방법들이 있다. 한 예는 메모리 장치의 초기화 동안 호스트(211)에 의해 메모리 장치(207)에 발행되는 벤더 특정의 명령을 정의하는 것이다. 메모리 장치(207)는 저장된 파라미터 값들을 호스트에 리턴하게 동작한다. 또 다른 예는 호스트로부터의 현존의 표준 명령에 응하여 메모리 장치(207)가 이미 호스트(211)에 리턴하는 현존의 필드들의 미사용된 부분들에 이들 파라미터들이 포함될 수도 있다는 것이다. 이러한 명령의 예는 드라이브 식별 명령이다.
플래시 최적화 파일 시스템
개개의 파일들을 연속된 논리 주소 공간의 논리 블록들에 매핑하는 기술의 구현예의 더 상세한 것이 이 단락에서 제공된다. 이것의 어떤 면들은 근본적으로 동일한 다음 기능들에 관하여 이미 기술되어 있다: 도 7c의 "플래시-최적화 파일 시스템", 도 8c의 "논리 블록 주소들에 파일들을 할당", 및 도 9c의 "파일/오프셋- 논리 주소 변환".
논리 블록 주소들에 파일들을 매핑하는 것에 대해 이 단락에서 기술되는 것들 대부분은 위에 상호참조된 특허출원들에 기술된 물리 메모리 셀들의 블록들 주소들에 파일들을 매핑하는 것과 동일한 기술들을 이용한다. 주된 차이는 이전의 상호참조된 특허출원들에 기술된 바와 같이, 파일 매핑이, 데이터 파일들을 물리 메모리 블록들에 직접 매핑함으로써 LBA 인터페이스를 우회하는 것이 아니라, 이를테면 호스트 장치에 의해서, LBA 인터페이스를 거쳐 행해지고 있다는 것이다. 이전의 출원들의 물리적 메모리 블록 매핑 기술들은 대안적으로, LBA 주소 공간의 논리 블록들에 데이터 파일 객체를 매핑하기 위해 적용될 수 있는데, 이들 중 어떤 예들이 여기 기술된다.
파일 객체를 논리적으로 매핑하는 여기에서의 설명에서, 데이터는 LBA 인터페이스의 블록들에 "기입된다"라고 하거나, 이들 블록들에 "프로그램된다"라고 한다. 물론, 이들 논리 블록들은 물리 메모리 블록들과는 반대로, 실제로는 데이터를 저장하지 않으므로, 이것은 한 특정의 논리 블록에 데이터의 주소들을 지정하는 것을 말한다. 마찬가지로, 논리 블록은 이에 어떠한 데이터도 할당되지 않을 때 "소거되었다"라고 한다. "소거된" 논리 블록은 데이터의 주소들을 내포하지 않는 블록이며, 따라서 이에 데이터의 주소들이 할당되게 하기 위해서 전체가 사용될 수 있다. 그 외 다른 논리 블록들은 "부분적으로 소거"될 수도 있는데, 이것은 데이터의 추가의 주소들을 받기 위해서 논리 블록의 일부가 사용될 수 있음을 의미한다.
플래시 최적화 파일 시스템의 일반적인 동작
새로운 데이터 파일이 메모리에 프로그램될 때, 데이터는 블록 내 제 1 위치부터 시작하여 순차적인 순서로 블록의 위치들을 진행하여 점유되지 않은 논리 블록에 기입된다. 데이터는 파일 내에 데이터의 오프셋들의 순서에 상관없이, 호스트로부터 수신된 순서로 논리 블록 내에 프로그램된다. 프로그래밍은 파일의 모든 데이터가 메모리에 기입될 때까지 계속된다. 파일 내 데이터량이 단일 논리 블록의 용량을 초과한다면, 제 1 블록이 모두 채워졌을 때, 프로그래밍은 제 2 빈(소거된) 블록에서 계속된다. 제 2 논리 블록은 파일의 모든 데이터가 할당되거나 제 2 블록이 모두 채워질 때까지 제 1 위치부터의 순서로, 제 1 블록과 동일한 방식으로 프로그램된다. 제 3 또는 추가의 블록들은 파일의 임의의 남아있는 데이터로 프로그램될 수 있다. 단일 파일의 복수의 블록들 또는 메타블록들은 연속일 필요는 없다. 설명을 쉽게 하기 위해서, 다른 것이 특정되지 않는 한, 여기에서 사용되는 논리 "블록"이라는 용어는 메타블록들이 특정의 시스템에서 사용되고 있는지 여부에 따라, 메모리 시스템 내 물리적 블록의 최소 소거 단위와 동일한 용량을 갖는 논리 블록을 지칭하거나, 전형적으로 함께 소거되는 복수의 블록의 물리적 메타블록에 대응하는 복수 블록의 논리 "메타블록"을 지칭하는 것이다.
도 12는 플래시 최적화 파일 시스템의 전체 기능을 도시한 것이다. 개개의 논리 블록들은 3 상태들 중 하나에 있는 것으로 볼 수 있다. 이들은 소거된 블록들(641), 재사용할 수 있는 용량이 없는 유효 파일 데이터를 저장하고 있는 블록들(643), 및 어떤 유효한 파일 데이터를 내포할 수도 있으나 프로그램되지 않은(소거된) 페이지들로부터 재사용가능한 용량 및/또는 이들에 저장된 폐용(무효) 데이 터를 갖고 있는 블록들(645)이다. 데이터는 기능(647)에 의해 소거된 논리 블록들에 기입되고, 그럼으로써, 결과적인 프로그램된 블록들이 임의의 재사용가능한 용량을 보존하고 있는지 여부에 따라, 블록들은 카테고리(643 또는 645)에 있게 된다. 기능(649)에 의해 나타낸 바와 같이, 파일들이 삭제되었을 때, 파일의 데이터를 내포하는 블록들(643)은 재사용가능 용량을 갖는 블록들(645)로 전환된다. 블록들(645)의 미사용된 저장용량은 기능(651)에 의해 재사용이 가능해지고, 기능(650)에서 재사용가능 블록들로부터 다른 블록들에 카피한 후에, 이것은 이들 블록들을 새로운 데이터가 기입될 수 있는 소거된 블록들(641)의 상태로 되돌려 놓게 한다.
도 13a을 참조하면, 논리 주소 공간에 데이터 파일의 기입이 도시되어 있다. 이 예에서, 데이터 파일(181)은 수직 실선들 사이에서 확장한 것으로 도시된 것인, 한 블록 또는 메타블록(183)의 저장용량보다 더 크다. 그러므로 데이터 파일(181)의 부분(184)은 제 2 블록(185)에 기입된다. 이들 논리 블록들은 인접한 주소를 갖는 것으로 보여졌으나 이들은 그럴 필요는 없다. 파일(181)로부터 데이터는 파일의 모든 데이터가 논리 주소 공간에 기입될 때까지 이들이 호스트로부터 스트리밍으로 수신됨에 따라 기입된다. 도 13a의 예에서, 데이터(181)은 파일에 대한 초기 데이터이다.
메모리 시스템이 저장된 데이터를 관리하는 바람직한 방법은 가변 크기의 데이터 그룹들을 사용하는 것이다. 즉, 파일의 데이터는 완전한 파일을 형성하기 위해 정의된 순서로 함께 연결될 수 있는 복수 그룹들의 데이터로서 저장된다. 호스트로부터 데이터 스트림이 기입되고 있을 때, 파일 데이터의 논리 오프셋 주소들에 또는 데이터가 할당되고 있는 논리 주소 공간에 불연속이 있을 때마다 새로운 데이터 그룹이 시작된다. 이러한 논리 주소 공간 불연속의 예는 파일의 데이터가 한 논리 블록을 채우고 다른 블록에 기입되기 시작할 때이다. 이것이 도 13a에 도시되었는데, 여기서 제 1 데이터 그룹은 제 1 블록(183)을 채우며 파일의 나머지 부분(184)은 제 2 데이터 그룹으로서 제 2 블록(185)에 저장된다. 제 1 데이터 그룹은 (F0, D0)로 나타낼 수 있는데, 여기서 F0는 데이터 파일의 시작부분의 논리 오프셋이며 D0는 파일이 시작하는 논리 블록(183) 내의 위치이다. 제 2 데이터 그룹은 (F1, D1)으로서 나타내는데, 여기서 F1은 제 2 블록(185)의 시작부분에 저장되는 데이터의 파일 오프셋이고 D1은 제 2 블록의 시작부분의 대응하는 논리 주소이다.
호스트-메모리 인터페이스를 통해 전송되는 데이터량은 데이터의 바이트 수, 데이터의 섹터 수, 또는 이외 어떤 다른 입도로 표현될 수 있다. 호스트는 대부분 흔히 이의 파일들의 데이터를 바이트 입도로 정의하나 현재 논리 주소 인터페이스를 통해 대용량 메모리 시스템과 통신할 때, 바이트들을 각각 512 바이트의 섹터들로, 또는 각각 복수 섹터들의 클러스터들로 그룹화한다. 이것은 일반적으로 메모리 시스템의 동작을 간이화하기 위해 행해진다. 여기에서 기술되는 파일-기반 호스트-메모리 인터페이스가 어떤 다른 데이터 단위를 사용할 수도 있을지라도, 원래의 호스트 파일 바이트 입도가 일반적으로 바람직하다. 즉, 데이터 오프셋들, 길이들, 등은 바람직하게는 섹터(들), 클러스터(들) 등이 아니라, 바이트(들), 최소 해상가능한 데이터 단위들로 표현된다. 이것은 여기 기술된 기술들로 플래시 메모리 저장 에 대해 용량을 더 효율적으로 사용할 수 있게 한다.
도 13a에 도시된 방식으로 논리 주소 공간에 기입되는 논리 주소 공간은 데이터 그룹들에 대해 일련의 인덱스 엔트리들 (F0, D0), (F1, D1)로서, 이 순서로 파일 인덱스 테이블(FIT)로 나타낸다. 즉, 호스트 시스템이 한 특정 파일에 액세스하고자 할 때마다, 호스트는 이의 fileID 또는 이외 식별을 생성하며, 이어서 이의 FIT에 액세스하여 이 파일을 구성하는 데이터 그룹들을 식별한다. 개개의 데이터 그룹들의 길이 <length>가 메모리 시스템을 동작시키는데 편리를 위해서 이들의 개개의 엔트리들에 포함될 수도 있다.
호스트가 도 13a의 파일을 열린 상태로 유지하는 한, 기입 포인터(P)도 그 파일에 대해 호스트로부터 수신된 임의의 또 다른 데이터를 기입하기 위해 논리 주소를 정의하게 유지되는 것이 바람직하다. 파일에 대한 임의의 새로운 데이터는 파일 내 새로운 데이터의 논리 위치에 관계없이 논리 블록들에서 파일의 끝에 기입된다. 메모리 시스템은 이를테면 4 또는 5개의 복수의 파일들이 한번에 열린 상태에 있게 하며, 이들 각각에 대한 기입 포인터(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)을 형성한다. 그러나, 이와 같이 삽입을 함으로써 도 13a의 이전의 데이터 그룹(F0, D0)는 삽입전에 한 그룹(F0, D0)과 삽입 후에 한 그룹(F2, D1)인 두 개의 그룹들로 분할된다. 이것은 이를테면 삽입의 시작(F1)에서 그리고 삽입의 끝(F2)에서 일어나는 것과 같이, 데이터의 파일 불연속이 있을 때마다 새로운 데이터 그룹이 형성될 필요가 있기 때문이다. 그룹(F3, D2)은 논리 주소(D2)가 제 2 블록(185)의 시작부분이 된 결과이다. 그룹들(F1, D3) 및 (F3, D2)는 이들에 저장된 데이터의 파일 오프셋들에서 불연속이 있기 때문에, 이들이 동일 논리 블록에 저장될지라도, 개별적으로 유지된 다. 그러면 삽입이 있는 원래의 파일은 FIT에서 데이트 그룹 인덱스 엔트리들(F0, D0), (F1, D3), (F2, D1), (F3, D2)로 이 순서로 표현된다. 도 13a, 도 13b 및 도 13c의 예들로부터 새로운 또는 기존 파일에 대한 새로운 데이터는 논리 블록 주소들에 의해 나타낸 어떠한 데이터도 폐용이 되게 함이 없이 기입될 수 있음에 유의해야 한다.
도 13c에 도시된 기존 파일에 데이터의 삽입에 대한 대안으로서, 파일은 데이터가 삽입되었을 때마다 호스트에 의해 별도의 파일로서 재기입될 수도 있다. 이 별도의 파일은 메모리 시스템에 의해서 새로운 파일로서 취급될 수도 있다. 이전 파일은 호스트에 의해 삭제되며, 시스템은 지금은 데이터가 폐용이 된 저장된 이전 파일에 할당된 논리 주소 공간을 재사용함으로써 응답할 수 있다.
도 13d는 도 13a에 도시된 방식으로 원래 기입된 데이터의 어떤 부분이 업데이트되는 또 다른 예를 도시한 것이다. 데이터 파일의 부분(195)은 업데이트되는 것으로 도시되었다. 전체 파일을 업데이트에 의해 재기입하기보다는, 파일의 업데이트된 부분(197)이 이전에 기입된 데이터에 첨부된다. 이전에 기입된 데이터의 부분(199)은 이제 폐용이 된다. 업데이트 후에, 파일은 시스템 FIT에서 데이터 그룹 인덱스 엔트리들(F0, D0), (F1, D3), (F2, D1), (F3, D2)로 이 순서로 표현된다. 도 13a의 단일 데이터 그룹(F0, D0)은 도 13d에서 업데이트 부분 앞에 하나와, 업데이트 부분과 업데이트된 부분 뒤에 하나로 다시 분할된다. 폐용 데이터에 의해 점유된 주소 공간(199)을 재사용하는 것이 바람직하나 이것은 파일 데이터를 기입하는 부분으로서가 아니라, 나중에 행해지는 것이 바람직하다. 이러한 재사용은 전 형적으로 한 특정 파일에 대한 몇 개의 그룹들이 저장되는 결과를 가져올 것이다.
가변 길이 데이터 그룹들의 사용을 더 예시하기 위해서, 동일 파일에 연루된 일련의 몇 개의 기입 동작들이 도 14a 내지 도 14e에 순서대로 도시되었다. 원래 파일 데이터(W1)가 먼저 도 14a에 도시된 바와 같이 연속한 주소 공간의 2개의 논리 블록들에 기입된다. 이어서 파일은 논리 블록의 시작부분에서 시작하는 제 1 그룹과 논리 블록 경계 다음에 요구되는 제 2 그룹인 2개의 데이터 그룹들로 정의된다. 도 14a의 파일은 데이터 그룹들에 대해 일련의 인덱스 엔트리들 (F0, D0), (F1, D1)로 기술된다.
도 14b에서, 호스트는 도 14a에 기입된 파일 데이터가 업데이트되게 한다. 업데이트된 파일 데이터(U1)은 업데이트된 데이터의 이전 버전을 폐용이 되게 하고 이전 그룹(F1, D1) 바로 다음에 기입된다. 도 14a의 이전 그룹(F0, D0)은 도 14b의 수정된 그룹(F0, D0)으로 단축되며, 이전 그룹(F1, D1)은 그룹(F4, D2)로 단축된다. 업데이트된 데이터는 이들이 논리 블록의 경계와 겹치기 때문에 두 개의 그룹들(F2, D3) 및 (F3, D4)로 기입된다. 데이터의 일부는 제 3 논리 블록에 저장된다. 파일은 이제 데이터 그룹들에 대해 일련의 인덱스 엔트리들(F0, D0), (F2, D3), (F3, D4), (F4, D2)로 기술된다.
도 14b의 파일은 도 14c에서 새로운 파일 데이터 II의 삽입을 야기하는 호스트에 의해 더욱 수정된다. 새로운 데이터 II는 삽입되는 데이터가 논리 블록의 경계와 겹치기 때문에 도 14c의 새로운 그룹들(F5, D6) 및 (F6, D7)로서, 도 14b의 이전 그룹(F4, D2) 바로 다음에 논리 블록들에 기입된다. 제 4 논리 블록이 사용된 다. 도 14b의 이전 그룹(F0, D0)는 새로운 데이터 II의 삽입 때문에 도 14c에서 단축된 그룹들(F0, D0) 및 (F7, D5)로 분할된다. 파일은 이제 데이터 그룹들에 대해 일련의 인덱스 엔트리들(F0, D0), (F5, D6), (F6, D7), (F7, D5), (F8, D3), (F9, D4), (F10, D2)에 의해 기술된다.
도 14d는 새로운 데이터(W2)를 파일의 끝에 첨부하는 도 14c의 데이터 파일의 또 다른 수정예를 도시한 것이다. 새로운 데이터(W2)는 도 14d의 새로운 그룹(F11, D8)로서 도 14c의 이전 그룹(F10, D2) 바로 다음에 기입된다. 이제 파일은 데이터 그룹들에 대한 일련의 인덱스 엔트리들(F0, D0), (F5, D6), (F6, D7), (F7, D5), (F8, D3), (F9, D4), (F10, D2), (F11, D8)로 기술된다.
열린 파일에 대한 제 2 업데이트가 도 14e에 도시되었으며, 여기서 업데이트된 파일 데이터(U2)는 도 14d의 파일에 기입된다. 업데이트된 데이터(U2)는 도 14d의 이전 그룹(F11, D8) 바로 다음에 도 14e에 기입되며, 데이터의 이전 버전은 폐용이 된다. 도 14d의 이전 그룹(F9, D4)는 도 14e에서 수정된 그룹(F9, D4)로 단축되며, 이전 그룹(F10, D2)는 완전히 폐용이 되며, 이전 그룹(F11, D8)은 새로운 그룹(F14, D9)을 형성하게 단축된다. 업데이트된 데이터는 도 14e의 새로운 그룹들(F12, D10) 및 (F13, D11)에 기입되며, 논리 블록 경계와 겹친다. 제 5 논리 블록은 이제 파일을 위해 필요하게 된다. 파일은 이제 데이터 그룹들에 대한 일련의 인덱스 엔트리들(F0, D0), (F5, D6), (F6, D7), (F7, D5), (F8, D3), (F9, D4), (F12, D10), (F13, D11), (F14, D9)로 기술된다.
각 파일의 데이터의 오프셋들은 앞에서 설명에 따라 파일의 생성 또는 수정 후에 정확한 논리적 순서로 연속하게 유지되는 것이 바람직하다. 그러므로, 파일에 데이터를 삽입하는 동작의 부분으로서, 예를 들면, 호스트에 의해 제공된 삽입된 데이터의 오프셋들은 삽입 바로 전의 오프셋부터 연속하며 삽입 후에 파일에 기 데이터는 삽입된 데이터량만큼 증분된다. 기존 파일을 업데이트함으로써 대부분 일반적으로 기존 파일의 주어진 주소 범위 내 데이터는 업데이트된 유사한 량의 데이터로 대치되며, 따라서 파일의 다른 데이터의 오프셋들은 일반적으로 대치될 필요가 없다.
이와 같이 저장된 데이터의 입도 또는 해상도는 호스트의 것과 동일하게 유지될 수 있다. 호스트 애플리케이션이 예를 들면 1 바이트 입도로 파일 데이터를 기입한다면, 이 데이터는 논리 블록들에서 1바이트 입도로 표현될 수도 있다. 개개의 데이터 그룹 내 데이터의 량 및 위치는 다수의 바이트들로 측정된다. 즉, 호스트 애플리케이션 파일 내에 개별적으로 주소 지정이 가능한 동일 오프셋 데이터 단위는 플래시 메모리에 저장될 때 그 파일 내에서 개별적으로 주소 지정될 수 있다. 논리 블록 내 동일 파일의 그룹들간의 임의의 경계들은 가장 가까운 바이트 또는 이외 호스트 오프셋 단위로 FIT에 명시된다. 유사하게, 논리 블록 내 서로 다른 파일들의 데이터 그룹들간에 경계들은 호스트 오프셋의 단위로 정의된다.
"섹터"라는 용어는 여기에서는 ECC가 연관되는 저장된 데이터 단위를 나타내기 위해 큰 블록 메모리들에 사용된다. 그러므로 섹터는 이러한 오류정정코드가 메모리 시스템의 제어기에 의해 생성되고 데이터와 함께 저장될 때 플래시 메모리에 및 이로부터 데이터 전송의 최소 단위이다. "페이지"는 물리적 메모리를 참조할 때, 한 블록 내 한 단위의 메모리 셀들을 나타내기 위해 사용된다. 페이지는 프로그래밍의 최소 단위이다. 논리 블록들 내 논리 "페이지"는 물리 페이지와 동일한 량의 데이터를 내포하는 페이지이다. "메타페이지"라는 용어는 메타블록의 완전한 병행도를 가진 페이지를 나타내기 위해 사용된다. 메타페이지는 프로그래밍의 최대 단위이다.
도 14b 및 도 14e로부터, 업데이트 명령에 의해 논리 주소 공간은 파일 내 데이터량보다 큰 파일에 의해 취해지는 것에 유의한다. 이것은 업데이트들에 의해 대치된 데이터에 대한 논리 주소들은 그대로 남아 있기 때문이다. 그러므로 폐용의 무효 데이터를 제거함으로써 더 적은 논리 주소 공간에 파일의 데이터를 합체(가비지 수거)하는 것이 매우 바람직하다. 그러므로 더 많은 논리 주소 공간이 다른 데이터를 위해 사용될 수 있게 된다.
또한, 도 14b 및 도 14e의 파일 데이터 업데이트들 외에도, 도 14c의 데이터 삽입으로 파일 데이터의 주소들은 순서가 없어지게 되는 것에 유의한다. 즉, 업데이트들 및 삽입들은 이들이 행해질 때 파일의 끝에 더해지며, 반면 이들은 거의 항시 파일 내 어떤 곳에 위치된다. 이것은 도 14b, 도 14c 및 도 14e의 예들의 경우이다. 그러므로, 파일 내 오프셋들의 순서에 맞도록 논리 주소 공간에 걸쳐 파일의 데이터의 순서를 재정돈하는 것이 바람직할 수 있다. 그러면 이것은 페이지들 및 블록들을 순차로 판독하는 것이 이들의 오프셋 순서로 파일의 데이터를 줄 것이기 때문에 저장된 데이터를 판독하는 속도를 개선한다. 또한, 이것은 파일의 최대 가능한 디프레그먼트(defragmentation)를 제공한다. 그러나, 파일 데이터를 판독을 더 효율적이게 하는 것은 메모리 시스템의 성능에는 다른 데이터의 주소들을 위해 하나 이상의 논리 블록들을 잠재적으로 자유롭게 하는 파일 데이터 합체만큼 중요하진 않다. 그러므로 파일의 데이터의 재정돈은 일반적으로 추가되는 동작 오버헤드보다 이익이 없어 단독으로 행해지지 않고 거의 또는 전혀 추가되는 동작 오버헤드없이 많은 가비지 수거 동작들의 일부로서 행해질 수 있다.
도 14e의 파일은 2개의 데이터 업데이트들(U1, U2)가 행해졌기 때문에 폐용 데이터 그룹들(gray portions)을 포함한다. 파일에 할당된 논리 주소 공간량은 결국, 도 14e로부터 명백한 바와 같이, 파일의 크기보다 실질적으로 더 크게 된다. 그러므로 가비지 수거가 적합하다. 도 15는 도 14e의 데이터 파일을 가비지 수거하는 결과를 도시한 것이다. 이 파일은 가비지 수거 전에, 주소 공간의 거의 5개의 논리 블록들을 취하며(도 14e), 반면 가비지 수거 후에 상기 파일은 3개보다 약간 더 많은 블록들 내에 들어맞게 된다(도 15). 가비지 수거 동작의 일부로서, 데이터는 이들이 초기에 다른 소거된 논리 블록들에 기입되는 논리 블록들로부터 카피되고, 이어서 원 블록들은 소거된다. 전체 파일이 가비지 수거된다면, 이의 데이터는 파일 내 데이터 논리 오프셋 순서와 동일한 논리적 순서로 새로운 블록들에 카피될 수 있다. 예를 들면, 업데이트들(U1, U2), 및 삽입 II은 이들이 호스트 파일에 나타나는 것과 동일한 순서로 가비지 수거(도 15) 후에 저장된다.
파일단위로 가비지 수거로 합체되는 파일 내에 새로운 서로 다른 데이터 그룹들이 형성된다. 도 15의 경우에, 파일은 새로운 데이터 그룹들에 대해 일련의 인덱스 엔트리들 (F0, D12), (F1, D13), (F2, D14), (F3, D15)로 기술된다. 이것은 도 14e에 도시된 파일의 상태에 존재하는 것보다 훨씬 더 적은 수의 데이터 그룹들이다. 현재는 파일의 데이터가 카피된 블록들 각각에 대해 한 데이터 그룹이 있다. 가비지 수거 동작의 일부로서, FIT는 파일을 형성하는 새로운 데이터 그룹들을 반영하기 위해 업데이트된다.
도 14e의 상태에 있을 때 파일의 데이터를 유지하는 블록들을 재사용하는 것은 동일 파일의 데이터를 저장하는 복수의 블록들에 동작하지 않고 블록들에 개별적으로 동작한다. 예를 들면, 도 14e의 제 2 블록(002)이 주어진 시간에 재사용 동작을 위해 고려되는 임의의 블록의 주소 공간의 유효 데이터의 최소량을 내포하고 있다면, 이의 단일 데이터 그룹은 또 다른 소거된 블록에 카피될 것이다. 새로운 블록은 단일 데이터 그룹(F8, D16)을 내포하며 블록의 나머지는 용량이 소거되고 이에 새로운 데이터가 기입될 수 있다. 이 소거된 용량은 그 데이터가 도 14e에 저장되었던 블록으로부터 재사용되었다. 파일은 파일을 구성하는 데이터 그룹들에 대한 일련의 인덱스 엔트리들 (F0, D0), (F5, D6), (F6, D7), (F7, D5), (F8, D16), (F9, D4), (F12, D10), (F13, D11), (F14, D9)로 기술된다. 도 14e에 도시된 다른 블록들은 이들이 재사용 동작을 위한 기준을 개별적으로 충족할 때까지 변경되지 않은 채로 있는다.
파일 블록 관리
논리 블록의 어떤 유형들은 이들에 저장된 파일 데이터의 구조에 기초하여 인식된다. 연속된 주소 공간에 주소들을 가진 각 파일은 다수의 상태들 중 하나에 이는 것에 유의하고, 각 파일 상태는 파일의 데이터가 저장되는 블록의 수 및 유형 들에 의해 정의된다. 데이터가 파일에 대해 기입되고자 할 때, 이의 현재 상태 및 한 상태에서 다른 상태로의 허용된 이행들은 바람직하게는 하나 이상의 다른 파일들의 데이터도 내포하는 특정의 파일에 대한 데이터를 내포하는 블록의 수를 제약하게 제어된다. 이것은 논리 블록의 효율적인 이용을 촉진하며 새로운 또는 카피된 데이터를 받아들이기 위해 충분히 소거된 블록들을 유지하기 위해 필요한 추후의 재사용 동작들의 빈도를 감소시킨다.
파일 데이터를 내포하는 이 예에서 인식된 논리 블록의 핵심적 유형들은 다음과 같다:
"파일 블록"이 완전히 프로그램되었으며, 단일 파일의 유효 데이터를 나타낸다. 이것은 어떤 폐용 데이터의 주소들을 내포할 수도 있다.
"프로그램 블록"은 부분적으로 프로그램되었으며, 단일 파일만의 유효 데이터를 나타낸다. 일부 소거된 용량은 블록에 남아 있는다. 이것은 어떤 폐용 데이터의 주소들을 내포할 수도 있다.
"공통 블록"이 부분적으로 프로그램되었으며, 2 이상의 파일들의 유효 데이터를 나타낸다. 일부 소거된 용량이 남아 있는다. 이것은 또한 일부 폐용 데이터의 주소들도 내포할 수 있다.
"전체 공통 블록"이 완전히 프로그램되었으며 2 이상의 파일들의 유효 데이터를 나타낸다. 이것은 또한 어떤 폐용 데이터를 나타낼 수도 있다.
또 다른 유형의 블록은 블록에 데이터 주소들이 전혀 없는 "소거된 블록"이며, 따라서 이의 전체 용량은 데이터를 받아들이는데 사용될 수 있다. LBA 인터페 이스의 논리 주소 공간이 데이터 주소들로 다 또는 거의 채워졌을 때, 명시된 최소수의 소거된 블록의 풀은 전형적으로, 사용되고 있는 논리 블록들 내 존재하는 미사용된 용량을 연속적으로 재사용함으로써 유지된다.
"프랙탈(fratal) 블록"은 프로그램 블록, 공통 블록 또는 전체 공통 블록을 지칭하는 포괄적 용어이다. 파일에 대한 프랙탈 블록은 프로그램되지 않은 저장용량, 또는 다른 파일들에 대한 유효 데이터, 또는 둘 다와 함께, 파일의 유효 데이터를 내포한다. 여기 기술된 기술들의 주 목적은 파일의 데이터를 수신하기 위해 지정된 활성 블록의 유형을 관리함으로써 주소 공간에 프랙탈 블록의 수를 최소화하는 것이다. 이것은 명시된 최소수의 소거된 논리 블록들을 유지하기 위해서 논리 주소 공간에서 수행될 필요가 있는 가비지 수거 및 데이터 합체(블록 재사용 동작들)의 발생 경우들을 감소시킨다. 이전에 프로그램된 블록의 미사용된 용량의 프레그먼트들을 재사용하기 위해서 데이터를 내부에서 카피하는데 시간이 덜 걸리기 때문에 데이터가 메모리에 기입될 수 있는 레이트가 증가된다.
블록의 다른 유형들을 총괄적으로 기술하기 위해 추가의 용어들이 여기에서 사용된다.
"부분 블록"은 일부 프로그램되지 않은 용량을 내포하며, 하나 이상의 파일들의 유효 데이터의 주소들은 어떤 폐용 데이터를 나타낼 수도 있다. 프로그램 블록 및 공통 블록이 부분 블록의 예들이다.
"폐용 블록"은 일부 폐용 데이터의 주소들을 내포하는 파일 블록 또는 전체 공통 블록이다. 폐용 블록은 임의의 소거된 용량을 가지지 않으며, 유효 및 폐용 데이터 둘 다를 나타낸다.
"무효 블록"은 유효 데이터를 전혀 내포하지 않는다. 무효 블록은 적어도 일부 폐용 데이터의 주소들을 내포하며 소거된 용량을 내포할 수 있으나 어떠한 유효 데이터도 나타내지 않는다.
도 16a 내지 도 16d는 위에 정의된 논리 블록의 유형들의 사용들의 어떤 예들을 도시한다. 도 16a에서, 파일 A의 데이터는 블록들(661, 663)을 채웠으며, 제 3 블록(665)을 부분적으로 채웠다. 데이터는 이 예의 각 블록에 좌측에서 우측으로 기입되며, 우선은 블록(661)을 채우고 다음에 블록(664)을, 그후엔 블록(665)의 부분에 기입된다. 블록(665)의 나머지 부분은 추가의 데이터를 저장할 수 있는 프로그램되지 않은 소거된 용량이다. 블록들(661, 663)은 위에 열거된 정의들에 의해서 파일 블록들이며 블록(665)은 프로그램 블록이다. 임의의 새로운 데이터가 프로그램 포인터(P)에서 시작하여, 블록(665)에 기입될 것이다. 포인터(P)는 블록에 다음 가용 저장위치를 항시 가리키기 위해 데이터가 블록에 기입될 때 좌측에서 우측으로 이동한다. 이러한 포인터는 현재 활성이 되었든 아니든 간에, 프로그램되지 않은 소거된 용량을 계속 유지하는 개개의 블록들에 대해 유지되고, 따라서 블록에 기입될 임의의 다른 데이터의 논리 주소를 항시 알게 된다.
도 16b의 예는 현재 파일 A의 데이터뿐만 아니라 또 다른 파일 B의 데이터를 내포하기 때문에 공통 블록인 블록(669), 및 이에 더하여 어떤 프로그램되지 않은 용량을 포함한다. 새로운 데이터는 프로그램 포인터(P)가 가리키는 곳에서 시작하여 파일 A의 끝에서 블록(669)에 기입된다. 블록(669)은 파일 A에 대한 활성 블록 이다. 이것은 파일 B에 대한 활성 블록일 수도 있고, 이 경우 파일 A 또는 파일 B의 추가의 데이터가 프로그램 포인터(P)에서 기입될 수 있다. 대안적으로, 별도의 블록(도시되지 않음)이 파일 B에 대한 활성 블록일 수 있다.
파일의 데이터는 이 형태로 비-프로그램된 용량을 잘 활용하기 위해서, 소거된 블록이 아니라, 다른 파일의 데이터를 기 내포하는 부분 블록의 소거된 용량에 직접 기입될 수 있다. 이것은 특히, 한 블록 전체의 용량 미만의 파일 데이터의 기지의 량이 기입되고자 할 때 특히 유용하다. 기입될 기지의 량의 데이터에 들어맞는 소거된 용량의 량을 찾기 위해서 현존 부분 블록들이 탐색된다. 데이터의 페이지들의 수(또는 메타블록들이 사용되고 있다면 메타페이지들)이 부분 블록들에 프로그램되지 않은 용량의 페이지들의 수와 비교된다. 프로그램 블록의 미사용된 소거된 공간이 이러한 식으로 프로그램될 때, 이것은 공통 블록으로 변환된다.
도 16c에서, 파일 A는 파일 블록(661), 블록(671)의 부분 및 블록(673)의 부분에 저장된다. 블록(671)은 2개의 파일들 A 및 B의 데이터로 다 채워지기 때문에 충만 공통 블록이다. 블록(673)은 도 16a의 블록(665)와 유사하게, 프로그램 블록이다. 블록(673)은 파일에 대한 활성 블록이며, 포인터(P)는 추가의 데이터가 먼저 기입될 블록(673) 내에 미사용된 용량의 위치를 가리킨다.
파일 A는 도 16d의 예에서 충만 공통 블록(671)의 부분 및 공통 블록(675)에 기입된다. 블록(675)은 제 3 파일 C의 데이터를 내포한다. 포인터(P)는 추가의 데이터가 기입될 활성 블록(675)의 미사용된 부분에 제 1 위치를 가리킨다.
도 16a 내지 도 16d의 예들이 몇 개의 서로 다른 유형들의 블록들을 예시하 기 위해서 복수의 블록들에 저장된 파일 A의 데이터를 보이고 있을지라도, 많은 경우들에 있어서 파일은 적은 수의 블록들, 심지어 단일 블록에 저장될만큼 충분히 작을 수도 있다. 여기 기술된 기술들은 이러한 작은 파일들에도 적용될 수 있다. 또한, 더 큰 파일이 3 이상의 블록들에 페이지들을 점유할 수 있다.
논리 블록들(665, 669, 671, 673, 675)은 프랙탈 블록들임에 유의한다. 임의의 한 파일의 데이터에 의해 점유된 프랙탈 블록의 존재는 이들에 미사용된 용량을 재사용할 필요성의 가능성을 증가시키고 이에 따라 시스템 성능에 악영향을 미치기 때문에 이들 프랙탈 블록의 수를 최소화하는 것이 바람직하다. 미사용된 소거된 용량은 부분 블록들(665, 669, 673, 675)에 존재하나 한 파일에 대한 미기입된 데이터량을 모르고 알고 있는 량이 이들 블록들 중 한 블록의 미사용된 용량과 맞지 않는다면 호스트로부터 새로운 데이터를 이 공간에 직접 기입하는 것은 효율적이지 않을 수 있다. 특정 파일에 대해 호스트로부터 데이터량을 모르는 것이 대부분 일반적이고, 따라서 이들 비트들의 용량은 쉽게 채워지지 않는다. 그러므로 데이터는 메모리 용량을 효율적으로 사용하기 위해서 재사용 동작 동안 또 다른 블록으로부터 미사용 공간으로 이동될 필요가 있을 수 있다. 블록들(669, 671, 675)은 하나보다 더 많은 파일의 데이터를 내포하는데, 이것은 파일들 중 하나가 삭제되거나 공통 블록에 저장된 이의 데이터가 폐용되었을 때, 데이터 재이용은 폐용 데이터의 주소들에 의해 점유되는 블록의 용량을 재이용하기 위해 행해지게 될 것임을 의미한다.
그러므로, 시간을 소비하는 데이터 재이용 동작들의 수를 줄이기 위해서, 한 특정 파일의 데이터는 임의의 한 시간에 하나, 2개 또는 이외 어떤 수의 프랙탈 블록들에만 저장되는 것이 허용된다. 허용될 프랙탈 블록의 수를 결정함에 있어, 이들을 사용할 수 있는 잇점들은 이들에 미치는 악영향에 대해 균형이 맞추어진다. 여기에 기술된 특정의 예에서, 임의의 한 파일의 데이터가 2개의 또는 몇 개의 그러나 그 이상은 아닌 프랙탈 블록들에 저장될 수 있다. 한 파일의 데이터를 저장하기 위해 새로운 활성 블록을 지정하는 프로세스는 이와 같이 제약된다. 한 세트의 허용된 파일 상태들 중 하나는 파일의 데이터가 저장되는 블록의 유형들에 의해 정의되는 각 파일에 할당된다. 이를테면 기존의 블록이 충만하게 되었을 때와 같이, 한 특정의 파일의 데이터를 수신하기 위해서 새로운 활성 블록이 할당될 필요가 있을 때, 이와 같이 지정된 블록의 유형은 파일의 상태에 그리고 많은 경우들에 있어서 다른 요인들에 좌우된다.
특정의 구현에서, 파일에 대한 데이터를 내포하는 프랙탈 블록의 조합들에 관하여, 7개의 허용된 파일 상태들(00 ~ 20)의 정의들이 도 17의 표에 주어져 있다. 허용된 파일 상태들 각각은 단지 2개의 프랙탈 블록들에 데이터의 저장을 허용한다. 한 파일의 데이터가 저장될 수 있는 파일 블록의 수에 제약은 없다. 파일의 상태는 파일에 대한 활성 블록으로서 사용되기 위해서 블록의 선택을 제어하기 위해 사용되는 특성이다. 재사용 블록으로서 선택된 블록은 재사용 블록은 일시적이므로, 재사용 블록에 있는 파일에 대한 임의의 데이터가 파일의 상태의 결정에 기여하지 않기 때문에, 프랙탈 블록으로서 취급되지 않는다. 장치에 존재하는 모든 파일의 상태는 모니터되고, 파일 데이터 인덱싱 정보와 더불어, FIT에 기록된다. 파일에 대해 기록된 상태는 임의의 상태 전이가 일어날 때마다 업데이트된다.
파일 상태 전이들은 이들이 프로그래밍 데이터에 연관되었는지, 폐용이 된 데이터에 연관되었는지, 아니면 선택된 재사용 블록에 연관되었는지에 따라, 3개의 종별들로 세분된다. 미결 또는 완료된 데이터 프로그래밍 동작에 의한 파일 상태들에서 허용된 전이들이 도 18의 상태도로 도시되었다. 7개의 파일 상태들은 도 17의 표로부터 파일 상태 확인 숫자들과 함께 원들로 나타내었다.
도 18의 상태 전이들 상에 라벨들은 다음의 의미들을 갖는다:
A - 소거된 블록은 파일에 대한 활성 블록으로서 할당된다.
B - 부분 블록은 충만되어 있다.
C - 부분 블록은 파일에 대한 활성 블록으로서 할당된다.
D - 이 파일에 대한 부분 블록은 또 다른 파일에 대한 활성 블록으로서 할당된다.
E - 데이터 전이는 활성 블록으로서 할당되는 소거된 블록에 행해진다.
F - 활성 블록으로서 할당되는 부분 블록에 데이터 전이가 행해진다.
대부분의 상태 전이들은 블록이 할당되거나 블록이 충만하게 되었을 때 자동으로 일어난다. 그러나, 정의된 상태 전이들의 일부는 한 블록에서 다른 블록으로 특정 데이터의 재배치를 취한다. 데이터는 단일의 중단되지 않은 동작으로서 재배치되고, 상태 전이는 데이터 재배치의 완료 후에만 행해진 것으로 간주된다. 이러한 전이들은 "데이터 전이들"이라 지칭된다. 도 19의 테이블은 도 18의 상태도를 참조하여, 허용된 상태 전이들의 상세를 제공한다.
부분 블록들은 기입될 데이터가 기지의 길이를 가질 때 활성 블록들로서 할당될 수도 있다. 이러한 경우에, "최상으로 들어맞는" 부분 블록이 장치 내 부분 블록의 집단으로부터 선택된다. "최상으로 들어맞는다"라는 것은 기입될 기지의 데이터량이 효율적으로 이용될 수 있는 소거된 용량의 량을 갖는 부분 블록으로서 정의된다. 어떤 경우들에 있어서, "가장 큰" 부분 블록은 "최상으로 들어맞는" 부분 블록이 존재하지 않는다면 대안으로서 선택될 수도 있다. 이것이 가용의 미사용된 용량의 가장 큰 량을 가진 부분 블록이다.
도 20은 데이터가 폐용이 됨에 의한 파일 상태 전이들을 도시한 상태도이다. 한 특정의 파일에 대한 이들 상태 전이들은 특정 파일의 데이터를 내포하는 프랙탈 블록에 저장된 파일에 대한 모든 데이터가 폐용이 될 때 일어난다. 데이터가 폐용이 된 파일은 특정 파일일 필요는 없다. 데이터는 4가지 이벤트들 중 어느 것에 의해 폐용이 될 수 있다.
1. 파일은 호스트에 의해 삭제된다.
2. 파일 내 데이터는 호스트에 의해 삭제된다.
3. 파일에 대해 이전에 기입된 데이터는 호스트에 의해 업데이트된다. 또는
4. 파일에 대한 데이터는 재사용 동작 동안 재배치된다.
도 20의 상태 전이들 상에 라벨들은 다음의 의미들을 갖는다.
G - 부분 블록 내 이 파일에 대한 모든 데이터는 폐용이 된다.
H - 이 파일 또는 충만 공통 블록에 모든 다른 파일들에 대한 모든 데이터는 폐용이 되었다.
I - 부분 블록 내 모든 다른 파일들에 대한 모든 데이터는 폐용이 되었다.
도 21의 표는 도 20에 도시된 폐용 데이터에 의한 파일 상태 전이들의 상세를 제공한다. 이들 상황들 중 어느 하나에서 데이터를 폐용이 되게 하는 것은 폐용 데이터가 배치된 블록의 유형들이 변하게 하여, 이 결과 파일의 상태가 변하게 된다.
한 블록이 재사용 블록으로서 선택될 때, 데이터가 블록에 존재하는 파일들에 대한 프랙탈 블록으로서 더 이상 취급되지 않는다. 이에 따라 도 22의 상태도에 의해 예시된 파일 상태 전이들이 된다.
도 22의 상태 전이들에 라벨들은 다음 의미들을 갖는다.
J - 부분 블록이 재사용 블록으로서 선택된다.
K - 충만 공통 블록이 재사용 블록으로서 선택된다.
재사용 블록의 선택에 의한 파일 상태 전이들의 상세들이 도 23의 표에 주어져 있다.
파일들의 데이터를 연속한 논리 주소 공간의 논리 블록들에 정렬시키기 위한 2개의 대안적 수법들이 있다. 위에 상호참조 특허 출원들에 기술된 바와 같이, 물리 메모리 셀들의 블록들들에 동작하는 다이렉트 데이터 파일 시스템의 경우에, 새로운 파일의 시작은 바람직하게는 소거된 메모리 셀들의 블록들의 시작부분에 정렬된다. 이것은 도 24에 도시된 바와 같이, 다이렉트 데이터 파일 시스템이 논리 블록들에 동작할 때 행해질 수도 있다. 3개의 파일들 A, B, C가 논리 블록들 1 ~ 7에 저장되는 것으로 도시되었다. 이들 파일들 중 하나의 모든 데이터가 기입되었을 때, 도 24로부터 파일의 마지막 부분이 부분 블록의 일부를 점유하는 것에 유념한다.
도 25의 테이블은 파일의 데이터를 저장하기 위해 활성 블록으로서 할당될 논리 블록의 유형을 결정하기 위한 기준을 제공한다. 나타낸 바와 같이, 이것은 파일의 현존 상태(도 17의 테이블에 의해 정의된 바와 같이) 및 프로그램될 데이터의 우위적 상태에 따른다. 할당 경우들 중 하나가 이러한 토대로 선택되더라도, 블록의 유형은 사용가능성에 따라, 도 25의 우측 컬럼에 나타낸 바와 같이, 제한된 한 세트의 가능성들 중에서 선택되어야 한다. 예를 들면, 할당 경우 B에 있어서, 부분 블록은 기지의 길이의 데이터를 수신하기 위한 우선도이다. 데이터의 이러한 기지의 량을 저장하기에 충분한 사용가능한(소거된) 용량을 갖는 부분 블록이 먼저 탐색된다. 그러나, 이것이 가능하지 않다면, 거의 프로그램되지 않은 공간을 갖는 부분 블록이 존재하는지가 판정된다. 그렇지 않다면, 제 3 우선도로서, 전체가 할당되지 않은(소거된) 블록이 데이터를 수신하기 위해 지정되는데, 이는 이 할당 경우 B의 예에서 기입될 알려진 데이터량이 한 블록 전체를 채울 량 미만이기 때문에 부분 블록이 될 것이다.
먼저 기입되었을 때와 동일한 상태로 있는 도 24에 파일 A, B, C 중 하나와 같은, 한 파일이 삭제되어 결과로 임의의 관계없는 파일들에 대한 데이터를 재배치할 필요가 없게 될 수 있다. 그러나, 재이용 동작이 파일의 부분 블록에 대한 데이터를 또 다른 파일의 데이터와 합체하였다면, 파일은 삭제되어 단지 한 블록으로부터 다른 파일의 데이터를 재배치할 필요가 있게 된다. 예를 들면, 블록 2로부터 파일 A에 대한 데이터가 블록 7에 파일 C에 대한 데이터와 합체되었다면, 파일 A 또 는 파일 C가 삭제되어 결국에 한 블록 7만으로부터 데이터를 재배치할 필요가 있게 된다.
블록 재이용은 파일 데이터를 기입하는 프로세스와 인터리빙되는 프로세스이며, 여기서 유효 데이터는 블록 내 미사용 용량을 재이용하기 위해 블록이 삭제될 수 있도록(이의 모든 용량은 할당되지 않은 것으로서 지정된다), 재이용되는 블록으로부터 재배치된다. 블록은 2가지 이유중 하나로 재이용하기 위해 선택될 수 있다.
1. 블록은 파일이 삭제 또는 업데이트된 결과로서 폐용 데이터를 내포한다. 또는
2. 블록은 부분 블록이고 비-프로그램된 용량을 내포한다.
재이용 프로세스에 할당된 시간량은 바람직하게는 일정하고, 따라서 새로운 파일 데이터를 기입하는 일정 속도가 유지될 수 있다. 이것은 재이용 프로세스에 의해 취급되어야 하는 부분 블록의 예측할 수 없는 수를 파일 기입 프로세스가 발생하기 때문에, 달성하기가 어렵다.
도 24에 도시된 파일-블록 매핑 수법의 잇점은 재이용 동작을 위한 소스 또는 목적지 블록으로서 선택될 때까지, 파일들에 대해 가장 최근에 기입된 데이터를 내포하는 부분 블록들이 가능한한 오랫동안 지속할 수 있게 한다는 것이다. 이것은 파일의 데이터 중 어느 것, 또는 공통 블록 내 관계없는 파일의 데이터가 재배치되기 전에 파일이 삭제될 수 있을 확률을 증가시킨다. 이것은 파일에 대한 데이터가 이 파일에 전용되는 블록들에 내포되기 때문이다. 어떠한 재이용 동작도 필요하지 않기 때문에, 데이터를 카피할 시간이 전혀 필요하지 않고 그러므로 메모리 시스템은 더 효율적으로 동작한다.
도 24의 매핑 수법의 단점은 기입되는 각 파일마다 정규로 한 부분 블록이 생성되고 많은 부분 블록의 데이터의 합체가 일반적으로 이들의 가용한 비프로그램된(소거된) 용량을 재이용하기 위해 요구될 것이라는 것이다. 또한, 메모리 제어기가 새로운 소거된 블록용량을 재이용하기 위해서 부분적으로 기입된 블록들로부터 데이터를 자동으로 합체하게 물리 메모리를 관리한다면, 상당량의 시간 소비적 데이터 카피가 도 24의 매핑 수법으로부터 기인할 수 있다. 그러므로, 대신에 도 26의 대안적 매핑 수법을 구현하는 것이 바람직할 수 있다. 이 수법의 주 특징은 새로운 파일의 시작에 데이터가 이전에 부분 블록을 점유하였던 관계없는 파일에 대한 데이터에 접한다는 것이다. 파일의 모든 데이터가 기입되었을 때, 마지막 기입된 데이터는 대부분 부분 블록의 일부를 그러나 단지 일시적으로 점유할 것이다. 부분 블록에 비프로그램된 공간은 완료된 파일에 접하기 위해 기입되는 새로운 파일에 대한 데이터로 곧 채워진다.
데이터를 기입하기 위해서 활성 블록의 할당을 위한 도 26의 수법의 구현이 도 27의 표에 주어져 있다. 도 25의 표에서 할당 경우 A는 할당 경우들 A1 및 A2에 의해 도 27의 표에 넣어지며, 새로운 및 기존의 파일들에 대한 개별적 경우들을 정의한다.
도 26에서, 파일의 시작 및 파일의 끝 둘 다에 대한 데이터는 일반적으로 블록을 관계없는 파일들의 데이터와 공유하며, 데이터는 파일이 삭제될 때 2개의 블 록들로부터 재배치되어야 한다. 예를 들면, 파일 B가 삭제된다면, 파일 A에 대한 데이터는 블록 2로부터 재배치되며 파일 C에 대한 데이터는 블록 3으로부터 재배치된다. 이어서 이것은 블록들 2 및 3이 소거되고 다른 데이터가 나중에 기입될 수 있는 소거된(비할당된) 블록의 풀에 추가될 수 있게 한다.
도 26의 파일-블록 매핑 수법의 잇점은 이것이 부분적으로 프로그램된 누적된 블록들을 제거한다는 것이다. 기입될 새로운 파일에 대한 데이터의 시작부분이 부분 블록 내 관계없는 기존 파일에 대한 데이터에 접하기 때문에, 파일의 가장 최근에 기입된 데이터를 내포하는 부분 블록들은 장기간 동안 지속하지 않으며 따라서 극소수의 부분 블록들이 장치에 존재한다. 이것은 부분 블록들로부터 데이터가 재이용 동작들 동안 합체되어야 하는 경우들을 제약시키며 새로운 파일 데이터에 대한 일정한 기입 속도가 유지되게 일정한 재이용 레이트가 설정될 수 있게 한다.
그러나, 도 26의 매핑 수법의 단점은 이것이 관계없는 파일들에 대한 데이터가 파일이 삭제될 때 재배치될 필요가 있을 확률을 증가시키며 각 경우에 재배치되어야 하는 데이터량을 증가시킨다는 것이다. 파일이 삭제될 때 도 26의 수법에서 데이터 재배치가 증가되는 이러한 단점은 재이용 동작들 동안 부분 블록들로부터 데이터의 합체 발생이 감소되는 도 24의 수법의 잇점을 없앤다.
블록 용량 재이용
위에 기술된 바와 같이, 블록 관리의 부분은 새로운 데이터의 저장을 위해 블록들에 미사용 용량을 재사용하는 것을 포함한다. 이것은 메모리 시스템에 저장된 데이터량이 그의 용량보다 훨씬 적을 땐 특히 중요하지 않으나 메모리 시스템은 마치 데이터로 충만된 것처럼 동작하게 설계되는 것이 바람직하다. 이것은 폐용 데이터만을 내포하는 블록들, 및 유효 데이터를 내포하나 일부 폐용 데이터 및/또는 미기입된 페이지들도 내포하는 그 외의 블록들이 이러한 미사용 용량을 재이용하도록 취급될 수 있음을 의미한다. 목적은 완전히 가능한 한 메모리 시스템의 저장용량을 활용하는 것이며, 아울러 시스템의 성능에 악영향을 최소화하는 것이다.
재이용 동작을 위해 지정된 블록(소스 블록) 내 임의의 유효 데이터는 유효 데이터를 저장하기에 충분한 비할당된(소거된) 용량을 가진 하나 이상의 블록들(목적지 블록들)에 카피된다. 목적지 블록은 위에 기술된 블록 관리 기술들에 따라 선택된다. 소스 블록에 저장된 각 파일의 데이터는 위에 기술된 바와 같이, 파일의 상태 및 다른 요인들에 기초하여 선택되는 한 유형의 블록에 카피된다. 재사용 동작의 부분으로서 서로 다른 유형들의 파일들간에 데이터 카피의 예들이 도 28a 내지 도 28d에 주어져 있다.
도 28a에서, 2개의 부분 블록들(681, 683)에 대한 재사용 동작들이 예들로서 도시되었다. 블록(681)은 데이터가 저장되지 않는 소거된 용량을 내포하면서도, 파일 A의 유효 데이터가 저장되는 프로그램 블록이다. 파일 A의 상태에 따라, 한 가능한 재이용 동작은 블록(681)의 파일 A의 데이터를 이미 다른 파일 B의 데이터를 포함하는 또 다른 부분 블록(685)의 가용한 소거된 용량에 카피하여, 이를 공통 블록이 되게 하는 것이다. 블록(681)에 데이터 그룹(들)은 FIT에서 더 이상 참조되지 않으며 블록은 폐용인 것으로 노트된다. 블록(681)에 저장되었을 때, 파일 A는 프로그램 블록을 포함하여 상태들 중 하나를 가졌다(도 17 참조). 이어서 데이터는 파일이 최대 2개의 프랙탈 블록들에 기입된 상태에 있으면서 또 다른 프랙탈 블록으로 이동되었다. 블록(685)에 카피한 후에, 파일 A는 파일의 다른 데이터가 저장되는 블록의 유형들에 따라 파일의 데이터가 공통 블록에 저장되는 것을 포함하는 상태들 중 하나로 전이되었다(도 17 참조).
도 28a의 블록(683)은 파일들 C 및 D의 저장된 데이터를 파일 E의 데이터를 내포하는, 공통 블록이 될 프로그램 블록(687)의 소거된 용량에 카피함으로써 재이용되고 있다는 공통 블록이다. 블록(683)에 파일 C 및 파일 D의 데이터는 블록 자체이기 때문에, 폐용이 된다. 파일들 C 및 D 각각의 상태는 데이터가 한 공통 블록에서 다른 블록으로 이동되었기 때문에 변하지 않았다. 그러나, 파일 E의 상태는 변하였다. 대안적으로, 파일 C 및 파일 D 각각의 데이터는 서로로부터 상이한 블록들로 이동될 수 있어 반드시 공통 블록의 가용 공간에 카피될 필요는 없다. 파일들의 상태들은 혹 다른 상태들로 전이될 수도 있을 것이다.
도 28b에는 예로서의 블록들(689, 691)에 대한 재이용 동작들이 도시되었다. 이들 블록들 각각은 둘 다 유효 및 폐용인 데이터로 충만하기 때문에 폐용 블록이다. 블록(689)은 파일 F의 데이터를 내포하는 파일 블록이고, 이의 일부는 폐용이고 나머지는 유효하다. 이것은, 예를 들면 파일 F의 업데이트 동안 일어날 수 있는데 이 경우 새로운 데이터는 파일의 기존 데이터와 동일한 논리 오프셋들을 갖는 파일의 끝에 주소들에 기입되고, 기존 데이터는 폐용이 된다. 이 예에서, 파일 F의 데이터는 파일 G의 데이터를 내포하는 프로그램 블록(693)의 소거된 용량에 카피되어, 블록(693)의 유형은 공통 블록으로 변하게 된다. 대안적으로, 파일 F의 유효 데이터는 소거된 블록에 기입될 수도 있을 것이며, 이에 따라 블록은 프로그램 블록이 될 것이다.
도 28b의 블록(691)은 파일 H의 무효 데이터 및 파일 I의 유효 데이터를 내포하는 충만 공통 블록이다. 파일 I의 유효 데이터는 이 예에서 블록(691)에서 소거된 블록(695)로 카피된다. 이어서 블록(695)은 프로그램 블록이 된다. 대안적으로, 파일 I의 데이터는 잘 들어맞는 것으로 발견된다면, 또 다른 파일의 데이터를 내포하는 부분 블록에 기입될 수도 있을 것이다. 목적지 블록은 재이용 동작시 파일 I의 상태에 따를 것이다.
도 28a 및 도 28b에 도시된 재이용 동작들의 4개의 특정한 예들의 각각의 결과로서, 2개의 부분 블록들에 저장된 데이터는 하나로 결합되고, 그럼으로써 2개의 블록들 중 다른 하나는 폐용 데이터를 갖게 된다. 이들은 무효 블록들이 된다. 원래의 블록들(681, 683, 689, 691) 각각의 전체 공간은 도 28c에 도시된 바와 같이, 블록을 소거함으로써 재이용된다. 소거된 블록은 무효 블록을 재이용한 결과이다.
도 28d는 파일 J의 데이터가 저장되는 파일 블록(697)의 예를 도시한 것이다. 파일 J가 호스트에 의해 삭제될 때, 블록(697)에 및 혹 다른 블록들에 파일 J의 데이터를 폐용이 되게 한다. 이어서 블록(697)은 무효가 된다. 무효 블록을 재이용하는 것은 시스템의 소거된 블록 풀용의 소거된 블록을 제공한다.
메모리로부터 파일의 삭제도 공통적으로 공통 블록 또는 충만 공통 블록과 같은 하나 이상의 프랙탈 블록들에 파일의 데이터가 폐용이 되게 한다. 그러면 이 블록에는 또 다른 파일의 나머지 유효 데이터가 블록의 저장용량보다 적게 되고 소 량일 수 있기 때문에 재이용 동작이 적용된다.
재이용 동작이 도 29의 흐름도에 의해 일반적 면에서 도시되었다. 단계 701로 나타낸 바와 같이, 특정 실시예에 따라, 부분, 폐용 및 무효 블록들에 대해 하나 이상의 리스트들이 유지된다. 한 기술에 따라, 블록의 이 리스트(들)은 이를테면 파워가 처음 인가될 때와 같이, 메모리 시스템의 초기화시 작성된다. 이 리스트(들)은 이를테면 각 블록 내 유효 데이터량 및 각 블록 내 소거된 공간량과 같이, 한번에 한 재사용 블록을 선택할 수 있게 하는 블록의 다른 정보를 포함할 수 있다. 이들 량들은 전형적으로, 블록의 페이지들의 수, 또는 메타블록들이 사용되고 있다면 메타블록들 면에서 측정된다. 바람직한 대안적 기술은 이들 리스트들을 비휘발성 메모리에 유지하고 상태가 변할 때마다 리스트내 블록에 대한 엔트리를 추가 또는 업데이트하는 것이다. 이 기술로, 메모리 시스템이 초기화될 때 블록들을 스캔하고 리스트들을 작성하는 것은 필요하지 않다. 모든 부분, 폐용, 무효블록들을 리스트(들) 상에 유지하는 것에 대한 대안으로서, 선택된 재이용 블록의 한 특징은 카피될 필요가 있는 유효 데이터를 거의 또는 전혀 갖지 않는다는 것이기 때문에, 어떤 설정된 임계량 미만의 소량의 유효 데이터를 갖는 블록들만이 포함된다. 많은 재이용 동작들에서 필요한 것으로 한 블록에서 다른 블록으로 데이터 카피는 현저한 시간량이 걸리므로 이것은 일반적으로 카피될 그보다 적은량의 데이터를 갖는 블록들보다 먼저 수행된다.
이러한 블록의 리스트(들)은 데이터가 기입, 업데이트, 이동, 삭제, 및 등등이 행해질 때 항시 변한다. 블록의 유형들을 부분, 폐용 및 무효로 및 이로부터 변 하게 하는 변경들은 도 29의 단계 701에 의해 유지되는 리스트(들)이 변하게 한다. 이러한 블록들에 개별적으로 저장된 유효 데이터량 및 소거된 용량의 량에 변화들은 블록 리스트들에 노트된다.
단계 703에서, 단일 재이용 블록은 재이용되기 위해서 다음으로서 업데이트된 리스트(들) 상에 블록들로부터 확인되는 것이 바람직하다. 부분 또는 폐용 블록이라면, 이것은 목적지 블록이라 하는 또 다른 블록에 카피될 유효 데이터의 소스이다. 소스 블록을 선택하기 위해 사용될 수 있는 몇가지 특정한 기술들이 이하 기술된다.
도 29의 다음 단계 705는 호스트의 명령들에 응하여 수행될 필요가 있는 메모리 동작들을 고려하여, 현재 재이용 동작을 수행하기에 적합한지를 판정한다. 호스트가 아이들 명령, 또는 호스트가 메모리 시스템이 특정 동작을 수행할 것으로 예상되지 않을 어떤 기간이 있음을 나타내는 유사한 어떤 것을 발행한다면, 시스템은 재이용 동작을 포함하여 전경(foreground)에서 오버헤드 동작들을 자유로이 수행한다. 호스트가 메모리 시스템에 데이터를 기입 또는 이로부터 데이터를 판독으로 비지 상태일지라도, 재이용 동작, 특히 이의 데이터 카피는 데이터 기입 및 판독 동작들과 인터리빙될 수 있다. 물리 메모리 셀들의 블록들들에 적용에 있어 이러한 인터리빙이 2005년 10월 25일에 출원된 Alan Sincliar의 미국특허출원번호 11/259,423와 2005년 12월 19일에 출원된 Alan Bennett 등의 미국특허출원번호 11/312,985에 기술되어 있다.
재이용 동작이 수행될 수 있음이 도 29의 단계 705에 의해 판정된다면, 프로 세스는 확인된 재이용 블록이 유효 데이터를 내포하고 있는지에 대해 따라, 그리고 그러하다면 이것은 하나 이상의 파일의 유효 데이터를 내포하고 있는지에 따라 다르다. 부분 블록 또는 폐용 블록이라면, 정의에 의해서 유효 데이터를 내포할 것이며, 공통 블록 또는 충만 공통 블록이라면, 2 이상의 파일들의 유효 데이터를 내포할 것이다. 재이용 블록에 유효 데이터가 있는지 여부는 단계 707에 의해서 판정된다. 이동되어야 하는 유효 데이터가 있다면, 단일 파일의 데이터가 확인되고, 다음 단계 709에서 목적지 블록이 이 데이터를 수신한 것으로 확인된다. 목적지 블록은 2개의 또는 소수의 프랙탈 블록들(이 예에서)에 저장된 유효 데이터가 속하는 파일의 모든 데이터를 유지하기 위해서 도 17 내지 도 19에 관하여 위에 기술된 프로세스에 의해 확인된다. 단계 711에 나타낸 바와 같이, 소스 재이용 블록에서 목적지 블록에 한 파일의 유효 데이터의 카피가 시작된다. 이들 데이터가 카피된 후에, 처리는 단계 707로 리턴하여 또 다른 파일의 데이터가 남아 있는지를 판정한다. 그러하다면, 추가의 데이터에 대해 단계들 709 및 711의 프로세스가 반복된다. 목적지 블록은 다른 파일의 데이터에 대한 앞선 선택에 상관없이 선택된다. 이것은 이동될 소스 블록 내 더 이상의 데이터가 없음이 단계 707에서 판정될 때까지 계속되는데, 이 경우 소스 블록이 단계 713마다 소거될 수 있다. 이 블록은 새로운 데이터를 저장하는데 사용하기 위해 소거된 블록 풀에 넣어질 수 있다.
도 29의 단계 707로 가서, 소스 블록이 유효 데이터를 전혀 내포하고 있지 않다면, 이것은 무효 블록에 대한 경우인 것으로서, 이동할 유효 데이터는 없다. 소스 블록은 소거되는 것만이 필요하다. 그러므로 처리는, 이 경우, 도 29에 도시 된 바와 같이, 단계들 709 및 711을 우회한다.
도 29의 프로세스의 제 1 실시예에서, 단일 리스트가 부분, 폐용 및 무효 블록의 단계 701에 의해 유지된다. 블록 내 유효 데이터의 량은 리스트 상에 개개의 엔트리들 내 포함된다. 단계 703에서, 재이용 블록으로서 리스트로부터 선택된 블록은 최소의 유효 데이터를 갖는 블록이다. 리스트 상에 한 무효 블록이 있다면, 이 블록은 유효 데이터를 갖고 있지 않기 때문에 먼저 선택될 것이다. 리스트 상에 많은 무효 블록들이 있다면, 이에 가장 오래 있었던 것이 선택된다. 리스트 상에 무효 블록이 없다면, 최소량의 유효 데이터를 갖는 블록이 재이용 블록으로서 선택된다. 리스트 상에 모든 블록의 최소량의 유효 데이터를 갖는 블록을 선택함으로써, 재이용 동작은 한 블록에서 다른 블록으로 카피될 더 많은 유효 데이터가 있을 때보다 시간이 덜 걸린다. 결국, 데이터를 메모리에 기입하고 이로부터 데이터를 판독하는 속도와 같은 메모리 시스템의 다른 동작들은 고 레이트로 유지된다. 새로이 소거된 블록이 메모리 수행에 대해 더 적은 코스트로 얻어진다.
단일 리스트 상에 프랙탈 블록들에 유효 데이터량을 토대로 소스 블록을 선택하기 위한 도 29의 프로세스의 이 제 1 실시예는 구현하기가 상대적으로 간단한 잇점을 갖는다. 그러나, 이 프로세스는 부분 블록의 값을 고려함으로써도 정제될 수 있다. 부분 블록들은 데이터가 기입될 수 있는 소거된 용량을 가지며, 반면 폐용 블록도 무효 블록도 어떠한 소거된 용량을 내포하지 않는다. 폐용 블록들이 새로운 데이터를 저장하기 위해 사용될 수 있기 전에, 어떠한 유효 데이터도 이들 밖으로 그리고 다른 블록으로 옮겨져야 하며, 따라서 이들은 소거될 수 있고 새로운 데이터의 저장을 위해 사용될 수 있게 된다. 그러나, 부분 블록들은 재이용 동작의 오버헤드를 지탱해야 할 필요없이 데이터가 기입될 수 있는 소거된 용량을 갖는다. 예를 들면, 데이터가 기입될 수 있는 대량의 소거된 용량을 내포할 때 단지, 최소량의 유효 데이터를 내포하기 때문에 부분 블록을 재이용하는 것은 잇점이 없을 수도 있다.
그러므로, 도 29의 프로세스의 다른 실시예들에서, 부분 블록은 부분 블록들에 존재하는 유효 데이터량 및 소거된 용량의 량 둘 다에 기초하여 재이용 소스블록에 대한 후보로서 선택된다. 부분 블록에 데이터의 성분들이 도 30에 도시되었다. 블록(메타블록일 수 있음)은 유효 데이터를 내포하는 어떤 수의 하나 이상의 페이지들(메타페이지들일 수 있음) 및 소거되고 데이터가 기입될 수 있는 하나 이상의 다른 페이지들을 갖는다. 부분 블록은 도 30의 예에서 나타낸 바와 같이, 폐용 데이터를 내포하는 하나 이상의 다른 페이지들도 내포할 수 있다.
도 29의 프로세스의 이들 다른 실시예들에서, 부분 블록들은 바람직하게는 폐용 및 무효 블록의 리스트(들)로부터 분리된 리스트에 단계 701에 의해 유지되는 것이 바람직하다. 부분 블록들은 이들이 거의 소거된 용량을 갖고 있지 않고(이것은 이들이 이들의 현재 상태에서 매우 유용하지 않음을 의미한다) 이동될 필요가 있는 소량의 유효 데이터를 갖고 있을 때 재이용 동작을 위해 이들 부분 블록의 리스트의 헤드로 옮겨진다. 이러한 블록들은 주로 폐용 데이터를 내포할 것이다. 반대로, 대량의 소거된 용량(이들은 잠재적으로 데이터를 저장하는데 유용함을 의미한다)을 갖는 부분 블록들 및 이동될 대량의 유효 데이터는 재이용 블록을 위한 후 보들로서 거의 확인되진 않을 것이다. 소거된 용량을 가진 부분 블록을 재이용하는 것은 폐용 블록을 재이용하는 것과 동일한 저장용량의 량을 논리 주소 공간에 추가하지 않는다. 무효블록들은 이들이 이익이 되는 소거된 용량을 전혀 갖고 있지 않고 카피될 필요가 있는 유효 데이터도 갖고 있지 않기 때문에 명백히 재이용하는데 가장 적합한 블록들이다.
도 29의 재이용 블록 확인 단계 703의 제 2 실시예에서, 부분, 폐용 및 무효 블록들 각각마다 하나씩인 3개의 개별적 리스트들이 단계 701에 의해 유지된다. 무효 블록들이 있다면, 재이용 블록은 이 리스트에 더 이상의 블록들이 없을 때까지 무효 블록의 리스트로부터 선택된다. 가장 오랫동안 리스트 상에 있었던 무효 블록이 먼저 선택되도록 아마도 선입선출(FIFO) 순서는 제외하고 무효 블록들을 리스트하는 특별한 순서는 없다. 다음에, 무효 블록들이 없다면, 이 리스트 상에 모든 블록의 최소량의 유효 데이터를 갖는 폐용 블록으로부터 선택된다.
무효 또는 폐용 리스트들 상에 블록들이 없다면, 부분 블록 리스트 상에 블록이 재사용 블록으로서 단계 703에서 선택된다. 부분 블록이 최소량의 유효 데이터를 가진 것으로 선택될 수도 있을지라도, 이들의 소거된 용량의 잇점을 인식하도록 부분 블록들을 서열화하는 것이 바람직하다. 이 목적을 위해서, "재이용 이득"이 다음처럼, 각 부분 블록에 대해 계산될 수 있다.
재이용 이득 = (S - kE)/V (1)
여기서 S는 데이터들을 저장하는 총 데이터 수에서의 블록 크기이며, E는 데이터가 기입될 수 있는 소거된 페이지 수의 용량이며, V는 다른 블록으로 이동될 필요가 있는 유효 데이터를 내포하는 페이지들의 수이다. 블록의 소거된 용량의 긍정적 효과에 가중치를 부여하기 위해 상수 k가 포함되는데 1로 설정될 수 있다. kE의 값이 증가함에 따라, 결과적인 재사용 이득은 내려간다. V의 값이 올라감에 따라, 재사용 이득도 내려간다. 재사용 이득의 가장 큰 값을 가진 부분 블록은 재사용 블록으로서 단계 703에서 선택된다. 다른 수학적 표현들은 대안적으로, 유효 데이터를 내포하는 시스템 동작에의 악영향과 소거된 용량을 갖는 이익간에 균형을 맞추는 E 및 V에 관한 재사용 이득을 정의하기 위해 사용될 수 있다. 재사용 이득은 이를테면 데이터가 소거된 용량에 기입되고, 디렉토리 또는 FIT에 의해 유지되는 정보의 부분으로서 저장될 때마다와 같이, 블록에 변화가 있을 때마다 계산될 수 있다.
이 제어 실시예가 도 31에 도시되었는데, 도 31은 재이용 블록을 별도의 부분, 폐용 및 무효 블록 리스트들(도 29의 단계 701에 의해 유지되는)에서 선택하는 방법(도 29로부터 단계 703)을 도시한 것이다. 먼저, 단계 721은 무효 블록 리스트 상에 리스트된 블록이 있는지를 판정한다. 복수의 이러한 블록들이 있다면, 가장 오랫동안 리스트 상에 있었던 블록이 재이용 블록으로서 단계 723에 의해 선택된다. 무효 블록 리스트 상에 블록이 없다면, 단계 725에 의해서 폐용 블록 리스트 상에 엔트리가 있는지가 판정된다. 그러하다면, 하나 이상의 블록이 폐용 블록 리스트 상에 있는 경우에, 최소량의 유효 데이터를 갖는 블록이 재이용 블록으로서 단계 727에 의해 선택된다. 폐용 블록 리스트 상에 엔트리가 없는 것으로 단계 725에 의해 결정된다면, 부분 블록 리스트가 단계 729에서 참조된다. 부분 블록 리스 트 상에 하나 이상의 블록이 있을 때, 가장 큰 재이용 이득을 가진 것이 재이용 블록으로서 선택된다. 재이용 이득은 이를테면 위에 식(1)을 사용함으로써, 블록에 유효 데이터 및 소거된 용량의 량을 고려한다. 부분 블록 리스트에 아무것도 없다면, 블록이 리스트들 중 하나에 나타날 때까지 단계 721로 복귀함으로써 프로세스가 반복된다. 재이용 블록의 선택 후에, 처리는 도 29의 단계 705로 진행한다.
제 3 실시예를 도 32의 흐름도로 나타내었다. 도 29의 단계 703의 실행은 도 29의 단계 701에 의해 유지되는 무효 블록 리스트 상에 엔트리를 찾는 단계 741에 의해 시작한다. 무효 블록 리스트에 하나 이상의 엔트리가 있다면, 재이용 블록이 되게 도 32의 단계 743에 의해서 가장 이전 것이 선택된다. 무효 블록 리스트에 어떠한 엔트리도 없다면, 다음 단계 745는 폐용 블록 리스트 상에 엔트리가 있는지를 판정한다. 그러하다면, 후속되는 단계들은, 부분 블록 리스트 상에 적어도 한 엔트리가 있을 경우 폐용 또는 부분 블록 리스트들로부터 재사용 블록을 선택하는 것이 최상인지가 판정되는 점에서 도 31의 실시예와는 다르다.
도 32의 단계 747는 최소량의 유효 데이터를 내포하는 폐용 블록 리스트 상에 블록을 확인한다. 이어서 단계 749에 의해서 부분 블록 리스트에 적어도 한 블록이 존재하는지가 판정되고, 그러하다면, 단계 751에서, 최소량의 유효 데이터를 가진 블록이 확인된다. 이어서 다음 단계 753는 폐용 블록 리스트로부터 확인된 한 블록과 부분 블록 리스트에서 확인된 한 블록간에 선택한다. 이 목적을 위해서, 단계 751에서 부분 블록 리스트로부터 확인된 블록에 대해 량 (V+kE)가 계산되고, V, E, 및 k 용어는 위에서 사용된 것과 동일하다. 폐용 블록 리스트로부터 단계 747에 서 확인된 블록에서 유효 데이터의 량 V과 비교되는 것이 이 량이다. 부분 블록에 대한 (V+kE) 량이 폐용 블록의 V보다 크다면, 폐용 블록은 단계 755에서, 재사용 블록으로서 선택된다. 그러나, 폐용 블록의 V가 확인된 부분 블록의 (V+kE) 량보다 크다면, 부분 블록은 재사용 블록으로서 단계 757에서 선택된다.
확인된 폐용 블록의 유효 데이터 V하고만 비교하기 전에 확인된 부분 블록의 소거된 용량의 량 kE를 그의 유효 데이터 V에 추가함으로써, 프로세스는 폐용 블록을 선택하게 바이어스된다. 확인된 폐용 블록과 동일한 유효 데이터량을 가진 확인된 부분 블록은 이의 소거된 용량에 데이터를 저장하는데 여전히 사용될 가능성이 있기 때문에 보존될 것이다. 실제로, 량 kE만큼 폐용 블록의 량 미만인 유효 데이터량을 갖는 부분 블록이 보존될 것이다.
도 32의 단계 745로 가서, 폐용 블록 리스트에 엔트리가 없다면, 단계 759에서 부분 블록 리스트에 리스트된 블록이 있는지가 판정된다. 그렇지 않다면, 프로세스는 블록이 3개의 리스트들 중 하나에 넣어질 때까지 반복되게 단계 741로 되돌아간다. 리스트된 복수의 부분 블록들이 있다면, 단계 761에서, 최소량의 유효 데이터를 갖는 블록이 재이용 블록으로서 선택된다. 대안적으로, 부분 블록은 제 2 실시예의 단계 731에 관하여 기술된 재이용 이득을 이용하여 선택될 수도 있다(도 31).
대안적으로 제 3 실시예는 단지 2개의 리스트들을 이용할 수도 있다. 제 1 리스트는 폐용 데이터를 내포하고 소거된 용량은 없는 블록들에 대한 엔트리들을 내포하는 폐용 블록 리스트이다. 도 32에 도시된 바와 같이 별도의 무효 블록을 사 용하기보다는, 무효 및 폐용 블록들 둘 다는 단일 "폐용" 블록 리스트에 올려진다. 블록들은 선택적으로 유효 데이터를 내포할 수 있다. 리스트에 각 엔트리는 관계된 블록에 유효 데이터량을 정의하는 값을 내포하는 필드를 갖는다. 리스트 내 엔트리들은 이들 필드들에 값들에 따라 순서가 정해진다. 그러므로 폐용 데이터를 내포하고 유효 데이터는 없는 블록들(무효 블록들)은 이 제 1 리스트의 헤드에 함께 그룹화된다.
제 3 실시예에 대한 이러한 대안에서 제 2 리스트는 일부 소거된 저장용량을 내포하는 블록들에 대한 엔트리들을 내포하는 부분 블록 리스트이다. 블록들은 선택적으로 유효 데이터를 내포할 수도 있다. 리스트 내 각 엔트리는 관계된 블록 내 유효 데이터량을 정의하는 값을 내포하는 필드를 갖는다. 리스트 내 엔트리들은 이들 필드들 내 값들에 따라 순서가 정해진다. 블록은 도 32의 단계 753의 기술에 의해 제 1 또는 제 2의 리스트 중에 헤드(최소량의 무효 데이터를 가진 블록)로부터 선택될 수 있다.
도 33의 표는 제 3 실시예의 수정예에 따른 재사용 동작에 대한 부분적 및 폐용 블록 리스트들에 넣어지게 되는 블록의 유형들의 상세를 개시한다. 부분 블록 리스트에 넣어지기 위해서, 한 블록은 유효 데이터 및 소거된 용량 둘 다를 내포한다. 블록에 어떤 폐용 데이터가 있는지는 중요하지 않다. 폐용 블록 리스트에 넣어지기 위해서, 블록은 폐용 데이터와, 그리고 둘 다는 아니지만 유효 데이터 또는 소거된 용량을 내포한다.
결론
본 발명의 여러 가지 면들이 이의 실시예들에 관하여 기술되었을지라도, 본 발명은 첨부한 청구항들의 전체 범위 내에서 보호되게 한 것임이 이해될 것이다.
상술한 바와 같이, 본 발명은, 접속된 호스트 장치에 데이터를 저장 및 전송하기 위해 재프로그램 가능 반도체 플래시 메모리와 같은 비휘발성 메모리 시스템을 작동하는 방법을 제공하는데 사용된다.

Claims (23)

  1. 시스템 내 파일 객체의 데이터를 확인하는 방법에 있어서,
    논리 블록들로 분할되는 시스템 논리 주소 공간을 유지하는 단계와;
    하나 이상의 상기 논리 블록들 내에 상기 파일 객체들 개개에 고유 주소들을 할당하는 단계로서, 상기 논리 블록들은 둘 이상의 파일 객체의 주소들을 개별적으로 내포할 수 있는, 단계와;
    제 2 파일 객체의 데이터도 내포하는, 개개의 파일 객체가 할당되는 논리 블록의 수를 소정의 수로 제한하는 단계를
    포함하는, 데이터 확인 방법.
  2. 제 1항에 있어서, 상기 파일 객체의 데이터를 더 제공하고 메모리 시스템에 접속되게 구성된 외부 인터페이스에서 상기 논리 주소 공간을 이용하는 호스트 시스템에서 상기 방법을 수행하는 단계를 더 포함하는, 데이터 확인 방법.
  3. 제 1항에 있어서, 외부 소스로부터 상기 파일 객체의 데이터도 수신하고 비휘발성 데이터 저장 매체들과의 인터페이스로서 메모리 시스템 내 상기 논리 인터페이스 주소 공간을 이용하는 상기 메모리 시스템에서 상기 방법을 수행하는 단계를 더 포함하는, 데이터 확인 방법.
  4. 제 1항에 있어서, 상기 데이터 파일 객체를 공급하는 호스트에 착탈 가능하게 접속되게 구성되고 처리 유닛과의 인터페이스에서 상기 논리 주소 공간을 이용하는 메모리 시스템에 착탈 가능하게 접속되게 구성된 상기 처리 유닛에서 상기 방법을 수행하는 단계를 더 포함하는, 데이터 확인 방법.
  5. 제 1항 내지 제 4항 중 어느 한 항에 있어서, 논리 블록의 수를 제한시키는 단계는 개개의 데이터 파일 객체 기입되고 제 2 파일 객체의 데이터도 내포하는 논리 블록의 수를 소정의 최대 수로 제한하는 단계를 포함하는, 데이터 확인 방법.
  6. 제 5항에 있어서, 상기 소정의 최대 수는 2인, 데이터 확인 방법.
  7. 재프로그램되기 전에 함께 소거될 수 있는 다수 블록의 메모리 셀들을 갖는 유형의 비휘발성 메모리 시스템에 접속하게 구성된 인터페이스를 통해 파일 객체의 데이터를 호스트 시스템 전송하는 방법에 있어서,
    논리 블록들로 분할된 논리 주소 공간을 상기 인터페이스에서 유지하는 단계와;
    상기 논리 블록들이 개별적으로 둘 이상의 파일 객체를 내포할 수 있으나, 하나 이상의 다른 파일 객체의 데이터가 부분적으로 채워진 블록들에 기입되게 개개의 파일 객체의 데이터로 부분적으로만 채워지는 논리 블록의 수를 적어도 한 기설정된 제한 미만으로 제한하도록 상기 하나 이상의 논리 블록들 내 상기 파일 객체들 개개의 블록 내에서 데이터의 주소들을 지정하는 단계를
    포함하는, 데이터 전송 방법.
  8. 제 7항에 있어서, 상기 논리 주소 공간의 상기 논리 블록의 크기들 개개를, 상기 호스트 시스템이 접속되게 구성된 메모리 시스템의 상기 개개의 블록의 메모리 셀들과 동일한 데이터 저장 용량을 갖게 구성하는 단계를 더 포함하는, 데이터 전송 방법.
  9. 제 7항에 있어서, 하나 이상의 상기 논리 블록들 내 상기 개개의 파일 객체의 데이터의 주소들은 상기 인터페이스를 통해 상기 호스트가 상기 파일 객체의 데이터를 보낼 때 지정되는, 데이터 전송 방법.
  10. 재프로그램되기 전에 함께 소거될 수 있는 다수 블록의 메모리 셀들을 갖는 유형의 비휘발성 메모리 시스템에 파일 객체의 데이터를 저장하는 방법에 있어서,
    논리 주소 공간은 개개의 메모리 셀들의 블록들의 특징에 대응하는 적어도 한 특징을 개별적으로 갖는 논리 블록들로 분할되고,
    개개의 파일 객체의 데이터에는 상기 하나 이상의 논리 블록들 내 주소들이 할당되고, 상기 논리 블록들은 둘 이상의 파일 객체의 데이터의 주소들을 개별적으로 내포하나, 한 특정의 개개의 파일 객체의 데이터와 이에 더하여 또 다른 파일 객체의 데이터를 내포하는 논리 블록의 수가 소정의 수로 제한되며,
    상기 논리 블록의 주소들은 상기 메모리 시스템 내에서 상기 메모리 셀들의 블록들의 주소들에 매핑되는, 데이터 저장 방법.
  11. 제 10항에 있어서, 상기 특정 파일 객체의 데이터에 주소들을 할당하는 단계는 소정의 수로 상기 특정 파일 객체의 데이터로만 부분적으로 채워지는 논리 블록의 수를 소정의 수로 제한하는 단계를 포함하는, 데이터 저장 방법.
  12. 제 11항에 있어서, 상기 소정의 수는 2인, 데이터 저장 방법.
  13. 제 10항에 있어서, 상기 적어도 한 대응하는 특징은 상기 개개의 메모리 셀들의 블록들의 데이터 저장 용량과 동일한 상기 개개의 논리 블록의 데이터 저장 용량을 포함하는, 데이터 저장 방법.
  14. 제 10항에 있어서, 상기 적어도 한 대응하는 특징은,
    상기 개개의 메모리 셀들의 블록들의 데이터 저장 용량과 동일한 상기 개개의 논리 블록의 데이터 저장 용량을 포함하고,
    상기 개개의 논리 블록들은 상기 메모리 셀들의 블록들의 개개의 복수의 페이지들과 동일한 데이터 저장용량을 갖는, 데이터를 기입하기 위한 복수의 페이지들로 분할되며,
    상기 개개의 논리 블록의 최하위 페이지 주소들은 상기 개개의 메모리 셀들의 블록들의 제 1 페이지들에 매핑되는, 데이터 저장 방법.
  15. 재프로그램되기 전에 함께 소거될 수 있는 다수 유닛들의 메모리 셀들을 갖는 유형의 비휘발성 메모리 시스템에 접속되게 구성된 인터페이스를 통해 파일 객체의 데이터를 호스트 시스템 전송하는 방법에 있어서,
    논리 블록들로 분할된 논리 주소 공간을 상기 인터페이스에서 유지하는 단계와;
    한 세트의 복수의 논리 블록 유형들을 지정된 개개의 블록들 내에서 주소가 지정된 파일 데이터의 구조에 관하여 지정하는 단계와;
    한 세트의 복수의 허용된 파일 상태들을, 지정된 개개의 파일들의 데이터가 저장되는 하나 이상의 논리 블록의 유형들의 조합에 관하여 지정하는 단계와;
    상기 논리 블록들 내에서 주소가 지정되는 개개의 데이터 파일들의 상기 파일 상태들의 기록을 유지하는 단계와;
    상기 기록 내 상기 개개의 파일의 현재 상태에 따라 선택된 한 유형의 논리 블록에 개개의 파일에 대한 데이터의 주소들을 지정하는 단계를
    포함하는, 데이터 전송 방법.
  16. 제 15항에 있어서, 상기 지정된 복수의 데이터 블록 유형들은 단지 한 파일의 데이터가 단일 논리 블록에 저장되는 제 1 복수의 유형들, 및 2 이상의 파일들의 데이터가 단일 논리 블록에 저장되는 제 2 복수의 유형들을 포함하고, 상기 허용된 파일 상태들은 상기 파일들 중 단일의 파일의 주소들이 지정될 수 있는 상기 제 2 복수의 유형들의 최대수의 블록들을 소정의 수로 제한하는, 데이터 전송 방법.
  17. 컴퓨터 시스템에 있어서,
    서로 구별되는 블록들로 분할된 연속된 논리 주소 공간에 주소들로 데이터 파일들이 확인되는 인터페이스와;
    상기 파일들 중 어느 하나의 데이터를 부분적으로 내포하는 블록의 수를 기설정된 제한값 미만으로 유지하기 위해서 선택된 하나 이상의 논리 블록의 주소들에 의해 개개의 파일들의 데이터가 확인되게 상기 인터페이스에 접속되는 프로세서를
    포함하는, 컴퓨터 시스템.
  18. 제 17항에 있어서, 상기 프로세서는 상기 파일의 데이터의 주소들로 부분적으로 채워지는 논리 블록의 수에 따라 상기 개개의 파일들로 복수의 지정된 상태들 중 하나를 할당하게 더 동작하는, 컴퓨터 시스템.
  19. 제 17항에 있어서, 상기 프로세서는 상기 논리 블록들에서 주소가 지정된 데이터를 갖는 각 파일에 상태를 할당하고 상기 주어진 파일의 상태에 기초하여 주어진 파일의 데이터가 주소 지정될 상기 논리 블록들 중 하나를 선택하게 더 동작하 는, 컴퓨터 시스템.
  20. 제 19항에 있어서, 상기 프로세서는 상기 파일의 데이터의 주소들로 부분적으로 채워진 논리 블록의 수에 적어도 부분적으로 기초하여 상기 논리 블록들에서 주소 지정된 데이터를 갖는 각 파일에 상태를 할당하게 더 동작하는, 컴퓨터 시스템.
  21. 제 20항에 있어서, 상기 프로세서는 추가의 주소들이 지정될 수 있는 미사용된 용량도 내포하는 상기 파일의 데이터의 주소들로 부분적으로 채워지는 논리 블록의 수에 더 기초하여 상기 논리 블록들에서 주소 지정된 데이터를 갖는 각 파일에 상태를 할당하게 더 동작하는, 컴퓨터 시스템.
  22. 제 20항에 있어서, 상기 프로세서는 하나 이상의 다른 파일들의 데이터의 주소들도 내포하는 상기 파일의 데이터의 주소들로 부분적으로 채워진 블록의 수에 더 기초하여 상기 논리 블록들에서 주소 지정된 데이터를 갖는 각 파일에 상태를 할당하게 더 동작하는, 컴퓨터 시스템.
  23. 제 17항에 있어서, 상기 인터페이스는 외부 인터페이스를 포함하는, 컴퓨터 시스템.
KR1020097015016A 2006-12-26 2007-12-19 연속 논리 주소 공간 인터페이스를 구비한 다이렉트 데이터 파일 시스템을 사용하는 방법 KR101464199B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US11/616,236 US7739444B2 (en) 2006-12-26 2006-12-26 System using a direct data file system with a continuous logical address space interface
US11/616,242 US8046522B2 (en) 2006-12-26 2006-12-26 Use of a direct data file system with a continuous logical address space interface and control of file address storage in logical blocks
US11/616,242 2006-12-26
US11/616,236 2006-12-26
PCT/US2007/088165 WO2008082996A1 (en) 2006-12-26 2007-12-19 Use of a direct data file system with a continuous logical address space interface

Publications (2)

Publication Number Publication Date
KR20090108694A KR20090108694A (ko) 2009-10-16
KR101464199B1 true KR101464199B1 (ko) 2014-11-21

Family

ID=39301492

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020097015016A KR101464199B1 (ko) 2006-12-26 2007-12-19 연속 논리 주소 공간 인터페이스를 구비한 다이렉트 데이터 파일 시스템을 사용하는 방법

Country Status (5)

Country Link
EP (1) EP2097825B1 (ko)
JP (1) JP5266250B2 (ko)
KR (1) KR101464199B1 (ko)
TW (1) TW200844740A (ko)
WO (1) WO2008082996A1 (ko)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8180995B2 (en) 2009-01-21 2012-05-15 Micron Technology, Inc. Logical address offset in response to detecting a memory formatting operation
CA2758235A1 (en) * 2009-04-27 2010-11-04 Kamlesh Gandhi Device and method for storage, retrieval, relocation, insertion or removal of data in storage units
JP2014504381A (ja) * 2010-05-19 2014-02-20 カムレッシュ ガンディー データオブジェクトの構成
US9311229B2 (en) 2011-03-29 2016-04-12 Blackberry Limited System and method for managing flash memory
WO2015008358A1 (ja) * 2013-07-18 2015-01-22 株式会社日立製作所 情報処理装置
US9846567B2 (en) 2014-06-16 2017-12-19 International Business Machines Corporation Flash optimized columnar data layout and data access algorithms for big data query engines
US9952808B2 (en) 2015-03-26 2018-04-24 International Business Machines Corporation File system block-level tiering and co-allocation
TWI553479B (zh) * 2016-01-29 2016-10-11 國立交通大學 具備標籤自動比對機制的標籤記憶體、快取系統及其快取方法
TWI676176B (zh) * 2018-10-25 2019-11-01 群聯電子股份有限公司 資料整併方法、記憶體儲存裝置及記憶體控制電路單元
TWI760697B (zh) * 2020-02-19 2022-04-11 群聯電子股份有限公司 記憶體之資料整理方法、記憶體儲存裝置及記憶體控制電路單元

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5809558A (en) * 1994-09-29 1998-09-15 Intel Corporation Method and data storage system for storing data in blocks without file reallocation before erasure
WO2005066793A2 (en) 2003-12-30 2005-07-21 Sandisk Corporation Non-volatile memory and method with non-sequential update block management

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0617363B1 (en) 1989-04-13 2000-01-26 SanDisk Corporation Defective cell substitution in EEprom array
US5619690A (en) * 1993-06-21 1997-04-08 Hitachi, Ltd. Computer system including a computer which requests an access to a logical address in a secondary storage system with specification of a local address in the secondary storage system
JPH10326227A (ja) * 1997-05-23 1998-12-08 Nec Corp フラッシュメモリを記憶媒体とする記憶装置の管理方式
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
US20050144363A1 (en) 2003-12-30 2005-06-30 Sinclair Alan W. Data boundary management
US7383375B2 (en) 2003-12-30 2008-06-03 Sandisk Corporation Data run programming
US7433993B2 (en) 2003-12-30 2008-10-07 San Disk Corportion Adaptive metablocks
US8607016B2 (en) 2004-07-21 2013-12-10 Sandisk Technologies Inc. FAT analysis for optimized sequential cluster management
US7315917B2 (en) 2005-01-20 2008-01-01 Sandisk Corporation Scheduling of housekeeping operations in flash memory systems
US7877539B2 (en) * 2005-02-16 2011-01-25 Sandisk Corporation Direct data file storage in flash memories
JP2009503743A (ja) * 2005-08-03 2009-01-29 サンディスク コーポレイション データファイルを直接記憶するメモリブロックの管理
ATE493707T1 (de) * 2005-08-03 2011-01-15 Sandisk Corp Nichtflüchtiger speicher mit blockverwaltung
US7409489B2 (en) 2005-08-03 2008-08-05 Sandisk Corporation Scheduling of reclaim operations in non-volatile memory
KR20090108695A (ko) * 2006-12-26 2009-10-16 쌘디스크 코포레이션 다이렉트 데이터 파일 메모리 시스템에서 lba 인터페이스를 관리하는 방법

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5809558A (en) * 1994-09-29 1998-09-15 Intel Corporation Method and data storage system for storing data in blocks without file reallocation before erasure
WO2005066793A2 (en) 2003-12-30 2005-07-21 Sandisk Corporation Non-volatile memory and method with non-sequential update block management

Also Published As

Publication number Publication date
KR20090108694A (ko) 2009-10-16
JP5266250B2 (ja) 2013-08-21
WO2008082996A1 (en) 2008-07-10
TW200844740A (en) 2008-11-16
EP2097825A1 (en) 2009-09-09
JP2010515162A (ja) 2010-05-06
EP2097825B1 (en) 2013-09-04

Similar Documents

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

Legal Events

Date Code Title Description
A201 Request for examination
N231 Notification of change of applicant
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: 20171018

Year of fee payment: 4

LAPS Lapse due to unpaid annual fee