KR20080038368A - 데이터 파일을 직접 저장하는 재프로그램가능 비휘발성메모리에 파일 데이터의 인덱싱 - Google Patents
데이터 파일을 직접 저장하는 재프로그램가능 비휘발성메모리에 파일 데이터의 인덱싱 Download PDFInfo
- Publication number
- KR20080038368A KR20080038368A KR1020087004711A KR20087004711A KR20080038368A KR 20080038368 A KR20080038368 A KR 20080038368A KR 1020087004711 A KR1020087004711 A KR 1020087004711A KR 20087004711 A KR20087004711 A KR 20087004711A KR 20080038368 A KR20080038368 A KR 20080038368A
- Authority
- KR
- South Korea
- Prior art keywords
- data
- file
- files
- page
- blocks
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0643—Management of files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/1805—Append-only file systems, e.g. using logs or journals to store data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0608—Saving storage space on storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0613—Improving I/O performance in relation to throughput
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7201—Logical to physical mapping or translation of blocks or pages
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)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
호스트 시스템 데이터 파일들은 각 파일의 고유 식별 및 파일 내 데이터의 오프셋들과 함께, 그러나 어떠한 중간 논리 어드레스나 메모리를 위한 가상 어드레스 공간을 사용함이 없이, 큰 소거 블록 플래시 메모리 시스템에 직접 기입된다. 파일들이 메모리에 저장되는 곳의 디렉토리 정보는 호스트에 의해서가 아니라, 메모리 시스템의 제어기에 의해 메모리 시스템 내에 유지된다. 각 데이터 파일은 파일을 구성하는 데이터 그룹들의 파일 인덱스 테이블(FIT) 내 엔트리들 및 메모리 내 이들의 물리적 저장 위치들을 가리키는 파일 디렉토리에서 고유하게 식별된다.
Description
이 출원은 반도체 플래시 메모리와 같은 재 프로그램가능 비휘발성 메모리 시스템들에 관한 것으로, 특히 호스트 디바이스와 메모리간 인터페이스의 관리에 관한 것이다.
호스트 시스템들, 메모리 시스템들 및 이외 다른 전자 시스템들의 외부 인터페이스들을 통해 통신된 데이터에 어드레스하는 2가지 주요 기술들이 있다. 이들 중 한 기술에서, 시스템에 의해 생성 혹은 수신된 데이터 파일들의 어드레스들은 시스템에 대해 수립된 서로 구별되는 다수 범위들의 연속한 논리 어드레스 공간에 맵핑된다. 어드레스 공간의 크기는 통상적으로 시스템이 취급할 수 있는 전체 범위의 어드레스들을 커버하기에 충분하다. 한 예에서, 자기 디스크 저장 드라이브들은 이러한 논리 어드레스 공간을 통해 컴퓨터들 혹은 이외 다른 호스트 시스템들과 통신한다. 이 어드레스 공간은 디스크 드라이브의 전체 데이터 저장 용량을 어드레스하기에 충분한 크기를 갖는다. 두 기술들 중 두 번째 기술에서, 전자 시스템에 의해 생성 혹은 수신된 데이터 파일들은 고유하게 식별되며 이들의 데이터는 파일 내 오프셋들에 의해 논리적으로 어드레스된다. 한 형태의 이러한 어드레싱 방법은 컴퓨터들 혹은 이외 호스트 시스템들과 "스마트 카드"로서 알려진 착탈가능 메모리 카드 간에 사용된다. 스마트 카드들은 통상적으로 식별, 뱅킹, 매장 구매, ATM 액세스 등을 위해 소비자에 의해 사용된다.
초기 세대의 상용 플래시 메모리 시스템들에서, 사각형 어레이의 메모리 셀들은, 각각이 표준 디스크 드라이브 섹터의 데이터량, 즉 512 바이트들을 저장한 많은 수의 그룹들의 셀들로 분할되었다. 또한, 일반적으로 오류정정 코드(ECC) 및 이외에 아마도, 사용자 데이터에 및/또는 연관된 사용자 데이터가 저장되는 메모리 셀 그룹에 관계된 오버헤드 데이터를 저장하기 위해서 각 그룹에 추가의 데이터량, 이를테면 16 바이트들이 포함된다. 각각의 이러한 그룹 내 메모리 셀들은 함께 소거될 수 있는 최소 수의 메모리 셀들이다. 즉, 소거 단위(unit)는 사실상, 포함된 한 데이터 섹터 및 임의의 오버헤드 데이터를 저장하는 메모리 셀들의 수이다. 이러한 유형의 메모리 시스템의 예들은 미국특허 5,602,987 및 6,426,893에 기술되어 있다. 메모리 셀들을 데이터로 재 프로그래밍하기에 앞서 이들 메모리 셀들이 소거되는 것이 플래시 메모리의 특징이다.
플래시 메모리 시스템들은 대부분 일반적으로, 개인용 컴퓨터, 카메라 등과 같은 다양한 호스트들에 착탈가능하게 접속되나 이러한 호스트 시스템들 내에 내장될 수도 있는 메모리 카드 혹은 플래시 드라이브 형태로 제공된다. 데이터를 메모리에 기입할 때, 호스트는 통상적으로 고유 논리 어드레스들을 메모리 시스템의 연속한 가상 어드레스 공간 내에 섹터들, 클러스터들 혹은 데이터의 이외 다른 단위 들에 할당한다. 디스크 운영 시스템(DOS)처럼, 호스트는 데이터를 메모리 시스템의 논리 어드레스 공간 내 어드레스들에 기입하고 이들로부터 데이터를 읽는다. 메모리 시스템 내 제어기는 호스트로부터 수신된 논리 어드레스들을 데이터가 실제로 저장되는 메모리 어레이 내 물리 어드레스들로 변환하며, 이들 어드레스 변환들을 주시한다. 메모리 시스템의 데이터 저장용량은 메모리 시스템에 대해 정의된 전체 논리 어드레스 공간에 대해 어드레스 가능한 데이터량만큼 적어도 크다.
나중 세대들의 플래시 메모리 시스템들에서, 소거단위의 크기는 복수 섹터들의 데이터를 저장하기에 충분한 한 블록의 메모리 셀들로 증가되었다. 메모리 시스템들이 접속되는 호스트 시스템들이 섹터들과 같은 작은 최소 단위들로 데이터를 프로그램하고 독출할 수 있을지라도, 많은 수의 섹터들이 플래시 메모리의 단일 소거단위로 저장된다. 호스트가 논리 섹터들의 데이터를 업데이트 혹은 대체할 때 블록 내 일부 섹터들의 데이터가 무용(obsolete)되는 것이 일반적이다.
블록 내 저장된 임의의 데이터가 덮어씌여질 수 있기 전에 전체 블록이 소거되어야 하기 때문에, 새로운 혹은 업데이트된 데이터는 통상적으로, 소거되어 있고 데이터를 위한 남은 용량을 갖는 또 다른 블록에 저장된다. 이 프로세스는 원 블록을 메모리 내에 사용가능 공간을 취하는 무용 데이터를 갖게 한다. 그러나, 이 블록은 이 블록 내 남아있는 어떤 유효한 데이터가 있다면 소거될 수 없다.
그러므로, 메모리의 저장용량을 더 잘 이용하기 위해서, 유효 부분 블록 분량들의 데이터를 소거된 블록에 카피함으로써 이들 데이터를 통합 또는 수거하고 이에 따라 이들 데이터가 카피된 블록(들)이 소거되어 이들 전체 저장용량이 재사 용될 수 있게 하는 것이 일반적이다. 블록 내 데이터 섹터들의 논리 어드레스들의 순서로 이들 데이터 섹터들을 그룹화하는 것이 데이터를 독출하여 독출된 데이터를 호스트에 전송하는 속도를 증가시키기 때문에 이를 행하기 위해서 데이터를 카피하는 것이 또한 바람직하다. 이러한 데이터 카피가 너무 빈번하게 일어난다면, 메모리 시스템의 작동 수행이 저하될 수 있다. 이러한 것은, 메모리의 저장용량이, 전형적인 경우로서, 시스템의 논리 어드레스 공간을 통해 호스트에 의해 어드레스가능한 데이터량 정도인 메모리 시스템들의 작동에 특히 영향을 미친다. 이 경우, 호스트 프로그래밍 명령이 실행될 수 있기 전에 데이터 통합 또는 수거가 요구될 수 있다. 그러면 결과적으로 프로그래밍 시간이 증가된다.
블록들의 크기들은 주어진 반도체 영역에 저장될 수 있는 데이터의 비트들의 수를 증가시키기 위해서 메모리 시스템들의 연속적인 세대들에서 증가하고 있다. 256 데이터 섹터들 및 그 이상을 저장하는 블록들이 일반적인 것이 되고 있다. 또한, 2, 4 혹은 그 이상의 블록들의 서로 다른 어레이들 혹은 서브-어레이들은 데이터 프로그래밍 및 독출에서 병행도를 증가시키기 위해서 흔히 메타블록들에 함께 논리적으로 링크된다. 이러한 큰 용량 작동 단위들과 함께 이들을 효율적으로 작동시키는 것이 과제가 되고 있다.
이러한 메모리 시스템들을 위한 일반적인 호스트 인터페이스는 디스크 드라이브들에 일반적으로 사용되는 것과 유사한 논리 어드레스 인터페이스이다. 메모리가 접속되는 호스트에 의해 생성되는 파일들에는 인터페이스의 논리 어드레스 공간 내에 고유 어드레스들이 할당된다. 이어서 메모리 시스템은 데이터를 논리 어드레 스 공간과 메모리의 물리 블록들 혹은 메타블록들간에 맵핑한다. 메모리 시스템은 논리 어드레스 공간이 물리 메모리에 어떻게 맵핑되는가를 주시하나 호스트는 이것을 알지 못한다. 호스트는 논리 어드레스 공간 내 그의 데이터 파일들의 어드레스들을 주시하나 메모리 시스템은 이러한 맵핑에 대해 알지 못하고 작동한다.
이러한 큰 소거 블록 플래시 메모리 시스템들을 효율적으로 작동시킴에 있어 부닥치게 되는 어떤 문제들을 다양한 정도로 극복하는 많은 기술들이 개발되었다. 한편, 본 발명은 근본적인 변경, 즉 메모리와 호스트 시스템간의 데이터 전송 인터페이스를 변경하는 것에 기초한다. 가상 어드레스 공간 내 논리 어드레스들의 사용에 의해 메모리와 호스트 시스템간에 데이터를 통신하기보다는, 데이터 파일은 호스트에 의해 할당된 파일명에 의해 식별되고 파일 내 오프셋 어드레스에 의해 액세스된다. 이때 메모리 시스템은 각 섹터 혹은 다른 단위의 데이터가 속하는 호스트 파일을 안다. 여기에서 논의되는 파일단위는 이를테면 순차적 오프셋 어드레스들을 갖춤으로써, 순서로 되어 있고 또한 호스트 계산 시스템에서 작동하는 애플리케이션 프로그램에 의해 생성되고 고유하게 식별되는 한 세트의 데이터이다.
이것은, 호스트들이 파일들을 식별함이 없이 공통의 한 세트의 논리 어드레스들에 의해 모든 파일들 내에 메모리 시스템에의 데이터를 확인하기 때문에 대부분의 현 상용 메모리 시스템들에 의해 채용되지 않는다. 논리 어드레스들을 사용하는 대신에 파일 객체들에 의해 호스트 데이터를 확인함으로써, 메모리 시스템 제어기는 이러한 빈번한 데이터 통합 및 가비지(garbage) 수거의 필요성을 감소시키도록 데이터를 저장할 수 있다. 이에 따라 데이터 카피 작동들의 빈도 및 카피되는 데이터량은 현저하게 감소되고, 그럼으로써 메모리 시스템의 데이터 프로그래밍 및 독출 성능을 증가시킨다. 또한, 메모리 시스템 제어기는 디렉토리 및 호스트 파일들이 저장되는 메모리 블록들의 인덱스 테이블 정보를 유지한다. 그러면 현재 논리 어드레스 인터페이스를 관리하는데 필요한 파일 할당 테이블(FAT)을 호스트가 유지하는 것은 불필요하다.
그보다는, 파일의 데이터는 데이터 그룹들에 의해 확인되며 메모리 내 파일의 데이터 그룹들의 위치는 파일 인덱스 테이블(FIT)에 유지된다. 위에 교차참조된 특허출원들, 특히 출원번호 11/060,248에 보다 완전하게 기술된 바와 같이, 데이터 그룹은 인접 논리 오프셋 어드레스들 및 인접 물리 메모리 어드레스들 둘 다를 갖는 데이터를 내포한다. 위에 교차참조된 특허출원들에 기술된 바와 같이, 각 파일에 대한 유효 데이터 그룹들의 인덱스는 이들의 오프셋 어드레스들에 의해 FIT에 유지되며, 이들은 주어진 파일에 대해 이의 고유 파일 식별자를 사용하여 파일 디렉토리를 통해 액세스된다. 파일에 대한 FIT 엔트리들의 액세스는 파일의 데이터 그룹들의 물리 위치들을 제공한다.
메모리 시스템이 접속될 수 있는 호스트는 통상적으로 한 번에 열리는 기설정된 최대 수의 파일들, 이를테면 5개의 이러한 파일들에 작동한다. 최대 수의 파일들이 이미 열려있을 때 새로운 파일이 열릴 필요가 있는 경우에, 현재 열린 파일은 호스트에 의해 먼저 닫힌다. 열린 파일의 데이터 그룹들은 파일이 이에 추가의 데이터가 기입되거나, 이의 일부 데이터가 업데이트되거나 삭제, 등이 되게 함으로써 수정될 때 빈번히 변경된다. 한 파일에 대한 데이터 그룹들의 FIT 리스트를 업데이트하는 것은 통상적으로 이 파일에 대한 엔트리들을 내포하는 페이지를 독출하고, 이들 엔트리들을 수정하고 이어서 이 수정된 페이지를 메모리의 다른 위치에, 통상적으로 동일 메모리 블록이 존재한다면 이 블록 내 소거된 페이지에 재기입하는 것을 요구한다. 그러므로 파일 디렉토리는 파일에 대한 FIT 엔트리들을 내포하는 현재 페이지가 변경될 때 이 페이지를 가리킬 수 있을 필요가 있다.
파일 디렉토리에 어느 것도 재기입할 필요없이 활성 파일의 데이터 그룹들의 리스트를 업데이트할 수 있는 것이 바람직하다. 열린 파일들의 데이터 그룹들에 간접 어드레싱하는 기술은 파일에 대한 FIT 엔트리들에 액세스할 때 파일 디렉토리가 메모리 내 동일 위치를 여전히 가리키고 있게 할 수 있게 한다. 바람직하게 파일 디렉토리는, 기입된 FIT 엔트리들의 마지막 페이지에 내포된 것으로, 파일들에 대해 업데이트된 FIT 엔트리들을 내포하는 페이지들의 어드레스들을 내포하는 것인 논리 포인터들을 어드레스한다. 파일에 대한 FIT 엔트리들이 업데이트됨에 따라 논리 포인터들이 변경될지라도, 파일에 대한 파일 디렉토리 내 어드레스는 변경될 필요가 없다.
그러나, 디렉토리 및 FIT 페이지들은 한번에, 물론 데이터 저장용량에 따라, 단지 많은 파일들에 대한 엔트리들을 내포할 수 있기 때문에, 많은 작은 파일들이 저장되어 있을 때 일어나는 것과 같이, 메모리 시스템에 많은 수의 파일들이 저장되어 있을 땐 이러한 간접 어드레싱은 효율적이지 않다. 결국, 호스트에 의해 닫혀진, 따라서 현재 활성이 아닌 파일들에 대해서, 인덱스 엔트리들은 파일 디렉토리에 의해 직접 어드레스되는 것이 바람직하다. 간접 어드레싱의 논리 어드레스 포인터들의 특징은 사용되지 않는다.
그러므로, 열린 파일들과 같은, 가까운 장래에 수정될 파일들에 대한 FIT 엔트리들의 간접 어드레싱과, 닫힌 파일들에 대한 직접 어드레싱과의 조합은 작동의 바람직한 모드이다. 즉, 데이터가 능동적으로 기입 혹은 업데이트되는 열린 파일에 대해서, 파일 디렉토리를 수정할 필요없이 활성 파일에 대한 한 세트의 인덱스 엔트리들이 수정될 수 있도록 하여, 파일 디렉토리는 파일의 고유 식별자에 의해 확인되는 한 세트의 인덱스 엔트리들의 FIT 내 위치들을 간접적으로 정의한다. 이것은, 특정의 예에서, 파일에 대한 인덱스 엔트리들의 실제 물리 위치를 참조하는 메모리 내 주어진 위치를 어드레스하는 파일 디렉토리에 의해 달성될 수 있다. 이러한 참조는 파일 디렉토리를 업데이트해야 할 필요없이 인덱스 엔트리들이 업데이트되고 이동될 때 변경된다. 아울러, 닫힌 파일에 대해서, 파일 디렉토리는 고유 파일 식별자에 의해 확인되는 한 세트의 인덱스 엔트리들의 FIT 내 위치들을 직접적으로 정의한다. 닫힌 파일에 대한 인덱스 엔트리들의 재배치는 열린 파일에 대해서보다 훨씬 덜 일어날 것이다.
또한, 직접 어드레싱에서 사용하기 위해서, FIT 페이지 내 인덱스 엔트리들은 FIT에의 포인터들이 파일 디렉토리의 동일 페이지에 내포된 파일들의 데이터 그룹들로 제한되는 것이 바람직하다. 그러므로 파일 디렉토리의 단지 한 페이지만이, 이 디렉토리 페이지 상에 리스트된 파일에 대한 하나 이상의 FIT 엔트리들이 업데이트될 때, 업데이트될 필요가 있다. 그렇지 않다면, 파일의 하나 이상의 FIT 엔트리들이 업데이트될 때 복수의 파일 디렉토리 페이지들을 업데이트하는 것이 자주 필요할 것이다.
본 발명의 다른 면들, 이점들, 특징들 및 상세는 다음의 예들의 설명에 포함되고 이 설명은 첨부한 도면들과 함께 취해질 것이다.
여기에서 참조되는 모든 특허들, 특허출원들, 논문들 및 그외 공보들, 문헌들 및 사물들은 모든 목적들을 위해 이들 전체를 참조문헌으로 여기 포함시킨다. 포함된 공보들, 문헌들 혹은 사물들 중 어느 것과 본원 간에 용어들의 정의 혹은 사용에 어떤 불일치 혹은 상충의 정도까지, 본원의 용어들이 우선할 것이다.
도 1은 호스트 및 현재 구현된 접속된 비휘발성 메모리 시스템을 개략적으로 도시한 것이다.
도 2는 도 1의 비휘발성 메모리로서 사용하기 위한 플래시 메모리 시스템 예의 블록도이다.
도 3은 도 2의 시스템에서 사용될 수 있는 메모리 셀 어레이의 대표적 회로도이다.
도 4는 도 2의 시스템의 물리적 메모리 구성의 예를 도시한 것이다.
도 5는 도 4의 물리적 메모리의 부분을 확대한 도면이다.
도 6은 도 4 및 도 5의 물리 메모리의 부분을 더욱 확대한 도면이다.
도 7은 호스트와 재프로그램 가능한 메모리 시스템간에 일반적인 종래 기술의 논리 어드레스 인터페이스를 도시한 것이다.
도 8은 호스트와 재프로그램가능한 메모리 시스템간의 일반적인 종래 기술의 논리 어드레스 인터페이스를 도 7과는 다른 방식으로 도시한 것이다.
도 9는 본 발명에 따라, 호스트와 재프로그램가능한 메모리 시스템간의 직접 파일 저장 인터페이스를 도시한 것이다.
도 10은 본 발명에 따라, 호스트와 재프로그램가능한 메모리 시스템간의 직접 파일 저장 인터페이스를 도 9와는 다른 방식으로 도시한 것이다.
도 11은 직접 데이터 파일 저장 인터페이스에 작동하는 메모리 시스템의 기능 블록도이다.
도 12는 직접 데이터 파일 메모리의 작동 사이클을 도시한 것이다.
도 13a-13d는 파일들의 데이터를 메모리에 직접 기입하는 4개의 서로 다른 예들을 도시한 것이다.
도 14a-14e는 메모리에 직접 단일 데이터 파일을 기입하는 순서를 도시한 것이다.
도 15는 도 14e의 블록들을 리클레임한 결과를 도시한 것이다.
도 16은 단지 하나의 데이터 그룹 및 무용 데이터를 내포하는 블록의 리클레임을 예시한 것이다.
도 17은 도 14a, 14c, 14e, 15 및 16의 데이터 그룹들에 대한 FIT의 엔트리들을 도시한 것이다.
도 18은 제1 특정의 파일 인덱싱 실시예의, 활성 및 비활성 파일들에 대한 서로 다른 FIT 구조들을 사용하는 파일 인덱싱의 원리를 도시한 것이다.
도 19는 도 18의 예시를 확대한 것이다.
도 20은 도 18 및 도 19의 파일 디렉토리의 논리 구조의 예이다.
도 21은 도 18 및 도 19의 파일 디렉토리를 내포하는 메모리 블록의 물리 구조를 도시한 것이다.
도 22는 도 18 및 도 19의 FIT의 논리 구조를 도시한 것이다.
도 23은 활성 파일들에 대한 FIT 엔트리들(TFIT)을 내포하는 블록의 물리 구조를 도시한 것이다.
도 24는 비활성 파일들에 대한 FIT 엔트리들을 내포하는 블록의 물리 구조를 도시한 것이다.
도25는 도 19의 파일 인덱싱 예에서 FIT 기록들에 수행되는 작동들을 도시한 것이다.
도 26은 제2 특정의 파일 인덱싱 실시예에 따른 파일 인덱싱의 계층을 도시한 것이다.
도 27은 도 26의 실시예에서 파일 디렉토리, FIT 및 파일 속성들의 테이블에 전용되는 메모리 블록들의 데이터 구조들의 예를 도시한 것이다.
플래시 메모리 시스템의 전반적인 설명
일반적인 플래시 메모리 시스템, 및 호스트 디바이스들의 전형적인 작동을 도 1-8에 관하여 기술한다. 이러한 시스템에서 본 발명의 여러 가지 면들이 구현될 수 있다. 도 1의 호스트 시스템(1)은 데이터를 플래시 메모리(2)에 저장하고 이로 부터 데이터를 가져온다. 플래시 메모리가 호스트 내 내장될 수 있을지라도, 메모리(2)는 기계적 및 전기적 커넥터의 서로 짝이되는 부분들(3, 4)을 통해 호스트에 착탈가능하게 연결되는 보다 보급된 형태의 카드인 것으로 도시되었다. 시판되는 현재 많은 서로 다른 플래시 메모리 카드들이 있고, 예들로서는 CompactFlash(CF), MultiMediaCard (MMC), SD(Secure Digital), miniSD, microSD, 메모리 스틱, SmartMedia 및 TransFlash 등록상표들로 판매되는 것들이다. 이들 카드들 각각이 이의 표준화된 명세들에 따른 고유한 기계적 및/또는 전기적 인터페이스를 구비할지라도, 각각에 포함된 플래시 메모리는 매우 유사하다. 이들 카드들은 모두 본 출원의 양수인인 샌디스크 사로부터 입수될 수 있다. 또한, 샌디스크는 호스트의 USB(Universal Serial Bus) 리셉터클에 끼움으로써 호스트에 접속하기 위한 USB 플러그를 구비하는 소형 패키지들의 휴대 메모리 시스템들인 크루저 등록상표의 플래시 드라이브들을 제공한다. 이들 메모리 카드들 및 플래시 드라이브들 각각은 호스트와 인터페이스하고 이들 내 플래시 메모리의 작동을 제어하는 제어기들을 포함한다.
이러한 메모리 카드들 및 플래시 드라이브들을 사용하는 호스트 시스템들은 많고 다양하다. 이들은 개인용 컴퓨터들(PC), 랩탑 및 그외 휴대 컴퓨터들, 셀룰라 전화들, PDA(personal digital assistants), 디지털 스틸 카메라들, 디지털 무비 카메라들 및 휴대 오디오 플레이어들을 포함한다. 통상적으로 호스트는 하나 이상의 유형들의 메모리 카드들 혹은 플래시 드라이브들을 위한 내장 리셉터클을 포함하나 어떤 것들은 메모리 카드를 끼워넣는 어댑터들을 필요로 한다. 메모리 시스템 은 일반적으로 자신의 메모리 제어기 및 드라이버들을 내장하나 메모리가 접속되는 호스트에 의해 실행되는 소프트웨어에 의해 제어되는 시스템들만의 어떤 메모리가 있다. 제어기를 내장하는 일부 메모리 시스템들에서, 특히 호스트 내 내장된 것들에서, 메모리, 제어기, 및 드라이버들은 흔히 단일 집적 회로 칩 상에 형성된다.
도 1의 호스트 시스템(1)은 메모리(2)에 관한 한, 회로와 소프트웨어의 조합으로 구성되는 2개의 주요 부분들을 갖는 것으로 간주될 수 있다. 이들은 애플리케이션부(5), 및 메모리(2)와 인터페이스하는 드라이버부(6)이다. 예를 들면, 개인용 컴퓨터에서, 애플리케이션부(5)는 워드 프로세싱, 그래픽스, 제어 혹은 이외 인기있는 애플리케이션 소프트웨어를 실행시키는 프로세서를 포함할 수 있다. 카메라, 셀룰라 전화 혹은 이외 주로 단일의 한 세트의 기능들을 수행하는데 전용되는 호스트 시스템에서, 애플리케이션부(5)는 사진들을 촬영하여 저장하는 카메라, 전화를 걸고 받는 셀룰라 전화, 등을 작동시키는 소프트웨어를 포함한다.
도 1의 메모리 시스템(2)은 플래시 메모리(7), 및 데이터를 주고받기 위해 카드가 접속되는 호스트와 인터페이스하고 메모리(7)를 제어하는 회로들(8)을 포함한다. 통상적으로 제어기(8)는 프로그래밍 및 독출시 호스트(1)에 의해 사용되는 데이터의 논리 어드레스들과 메모리(7)의 물리 어드레스들간을 변환한다.
도 2를 참조하여, 도 1의 비휘발성 메모리(2)로서 사용될 수 있는 전형적인 플래시 메모리 시스템의 회로를 기술한다. 시스템 제어기는 통상적으로, 시스템 버스(13)로 하나 이상의 집적회로 메모리 칩들과 병렬로 접속되는 단일의 집적회로 칩(11)에 구현되고, 단일의 이러한 메모리 칩(15)이 도 2에 도시되었다. 도시된 특 정의 버스(13)는 데이터를 전달하는 개별적인 한 세트의 도체들(17), 메모리 어드레스들용의 세트(19), 제어 및 상태 신호들용의 세트(21)를 포함한다. 대안적으로, 단일의 한 세트의 도체들은 이들 3개의 기능들간에 시-분할될 수 있다. 또한, 이를테면 현재 공개번호 2006/0031593 Al인 "Ring Bus Structure and It's Use in Flash Memory Systems" 명칭으로 2004년 8월 9일 출원된 미국특허출원 번호 10/915,039에 기술된 링 버스와 같은 시스템 버스들의 그외 다른 구성들이 채용될 수도 있다.
전형적인 제어기 칩(11)은 인터페이스 회로들(25)을 통해 시스템 버스(13)와 인터페이스하는 그 자신의 내부 버스(23)를 구비한다. 버스에 정규로 접속되는 주 기능들은 프로세서(27)(이를테면 마이크로프로세서 혹은 마이크로제어기), 시스템을 초기화("부팅")하기 위한 코드를 내장한 독출전용 메모리(ROM)(29), 주로 메모리와 호스트 간에 전송되는 데이터를 버퍼링하는데 사용되는 랜덤 액세스 메모리(RAM)(31), 및 메모리와 호스트 간의 제어기를 통해 전달되는 데이터에 대한 오류정정 코드(ECC)를 계산하고 체크하는 회로들(33)이다. 제어기 버스(23)는 회로들(35)을 통해 호스트 시스템과 인터페이스하는데, 이것은 도 2의 시스템이 메모리 카드 내 내장되는 경우, 커넥터(4)의 일부인 카드의 외부 콘택들(37)을 통해 행해진다. 클럭(39)은 제어기(11)의 다른 구성성분들 각각에 접속되고 이에 의해 이용된다.
시스템 버스(13)에 접속되는 어떤 다른 것뿐만 아니라 메모리 칩(15)은 통상적으로, 복수의 서브-어레이들 또는 플레인들로 구성되는 한 어레이의 메모리 셀들 을 내장하는데, 간이성을 위해서 2개의 이러한 플레인들(41, 43)이 도시되었지만 그러나 그 이상의, 이를테면 4 혹은 8개의 이러한 플레인들이 사용될 수 있다. 대안적으로, 칩(15)의 메모리 셀 어레이는 플레인들로 분할되지 않을 수도 있다. 그러나 그와 같이 분할되었을 때, 각 플레인은 대부분 서로 독립적으로 작동할 수 있는 그 자신의 열(column) 제어 회로들(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)가 데이터를 프로그램하고, 데이터를 독출하고, 소거하고 각종 하우스키핑(housekeeping) 사안들을 수행하게 메모리 칩(15)의 작동을 제어할지라도, 각 메모리 칩은 이러한 기능들을 수행하기 위해 제어기(11)로부터 명령들을 실행하는 어떤 제어회로를 또한 내장한다. 인터페이스 회로들(73)은 시스템 버스(13)의 제어 및 상태부(21)에 접속된다. 제어기로부터의 명령들은 상태 머신(75)에 제공되고 이 상태 머신(75)은 이어서 이들 명령들을 실행하기 위해 다른 회로들의 특정의 제어를 제공한다. 제어 라인들(77-81)은 상태 머신(75)을 도 2에 도시된 바와 같은 이들 다른 회로들에 접속한다. 상태 머신(75)으로부터의 상태 정보는 버스부(21)를 통해 제어기(11)에의 전송을 위해 라인들(83)을 통해 인터페이스(73)에 보내진다.
메모리 셀 어레이들(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의 회로도에 의해 예시되어 있다. 많은 수의 전역 비트라인들이 제공되지만, 단지 4개의 이러한 라인들(91-94)이 설명의 간략성을 위해 도 2에 도시되었다. 다수의 직렬 연결된 메모리 셀 스트링들(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와 같이 시스템에 1이상 플레인 혹은 서브-어레이가 있다면, 한 메모리 구조들은 이들 간에 연장하는 공통 워드라인들을 사용한다. 대안적으로 공통의 워드라인들을 공유하는 2이상 플레인들 혹은 서브-어레이들이 있을 수 있다. 다른 메모리 구조들에서, 개 개의 플레인들 혹은 서브-어레이의 워드라인들은 개별적으로 구동된다.
위에서 참조된 NAND 특허들 및 공개된 출원 중 몇몇에 기술된 바와 같이, 메모리 시스템은 각 전하 저장요소 혹은 영역 내 2 이상의 검출가능한 레벨들의 전하를 저장하고, 그럼으로써 각각에서 1비트 이상의 데이터를 저장하게 작동될 수 있다. 메모리 셀들의 전하 저장요소들은 가장 공통적으로 도전성 플로팅 게이트들이지만 대안적으로 미국특허출원 공개 2003/0109093에 기술된 바와 같이, 비도전성 유전체 전하 트랩 물질일 수도 있다.
도 4는 이하 설명에서 예로서 사용되는 플래시 메모리 셀 어레이(7)(도 1)의 구성을 개념적으로 도시한 것이다. 메모리 셀들의 4개의 플레인들 혹은 서브-어레이들(131-134)은 단일 집적 메모리 셀 칩 상에, 혹은 2개의 칩들(각 칩 상에 2개의 플레인들), 혹은 4개의 개별적 칩들 상에 있을 수 있다. 특정한 배열은 이하 논의에 중요하지 않다. 물론, 다른 개수의 플레인들, 이를테면 1, 2, 8, 16 혹은 그 이상이 시스템에 존재할 수 있다. 플레인들은 각각의 플레인들(131-134)에 놓여지는, 이를테면 블록들(137, 138, 139, 140)과 같은, 사각형들로 도 4에 도시된 다수 블록들의 메모리 셀들로 개별적으로 분할된다. 각 플레인에 수십 혹은 수백 개의 블록들이 있을 수 있다. 위에 언급된 바와 같이, 한 블록의 메모리 셀들은 물리적으로 함께 소거될 수 있는 최소 수의 메모리 셀들인 소거단위이다. 그러나, 증가된 병행도를 위해서, 블록들은 더 큰 메타블록 단위들로 작동된다. 각 플레인으로부터 한 블록은 논리적으로 함께 링크되어 메타블록을 형성한다. 4개의 블록들(137-140)이 하나의 메타블록(141)을 형성하는 것으로 도시되었다. 메타블록 내 모든 셀들은 통상적으로 함께 소거된다. 블록들(145-148)로 구성된 제2 메타블록(143)에 보인 바와 같이, 메타블록을 형성하는데 사용되는 블록들은 이들의 각각의 플레인들 내에 동일 상대적 위치들로 제약될 필요는 없다. 통상적으로 모든 플레인들에 걸쳐 메타블록들을 연장하는 것이 바람직할지라도, 높은 시스템 수행을 위해서, 메모리 시스템은 서로 다른 플레인들 내 하나, 둘 혹은 세 개의 블록들 중 하나 혹은 전부의 메타블록들을 동적으로 형성하는 능력을 갖고 작동될 수 있다. 이것은 메타블록의 크기가 한 프로그래밍 작동에서 저장을 위해 사용될 수 있는 데이터량에 더 가깝게 부합되게 한다.
개개의 블록들은 이번에는 작동 목적을 위해 도 5에 도시된 바와 같이, 다수 페이지들의 메모리 셀들로 분할된다. 예를 들면, 블록들(131-134)의 각각의 메모리 셀들은 각각 8개의 페이지들(P0-P7)로 분할된다. 대안적으로, 각 블록 내에 16, 32, 혹은 그 이상의 페이지들의 메모리 셀들이 있을 수 있다. 페이지는 한번에 프로그램되는 최소 데이터량을 내포하는, 블록 내 데이터 프로그래밍 및 독출 단위이다. 도 3의 NAND 구조에서, 페이지는 블록 내 워드라인을 따른 메모리 셀들로 형성된다. 그러나, 메모리 시스템 작동의 병행도를 증가시키기 위해서, 2이상 블록들 내 이러한 페이지들은 논리적으로 메타페이지들에 링크될 수 있다. 메타페이지(151)는 도 5에 도시되었고, 4개의 블록들(131-134) 각각으로부터 한 물리적 페이지로 형성된다. 예를 들면, 메타페이지(151)는 4개의 블록들 각각의 블록 내에 페이지(P2)를 포함하는데, 메타페이지의 페이지들은 반드시 블록들의 각 블록 내에 동일한 상대적 위치를 가질 필요는 없다.
높은 시스템 수행을 위해서, 모든 4개의 플레인들에 걸쳐 병렬로 최대량의 데이터를 프로그램하고 독출하는 것이 바람직할지라도, 메모리 시스템은 서로 다른 플레인들에서 개별적 블록들 내 하나, 둘 혹은 세 개의 페이지들 중 하나 혹은 전부의 메타페이지들을 형성하게 작동될 수도 있다. 이것은 프로그래밍 및 독출 작동들이 편리하게 병렬로 취급될 수 있는 데이터량에 적응형으로 부합되게 하며, 메타페이지의 일부가 데이터로 프로그램되지 않은 채로 있게 되는 경우들을 감소시킨다.
도 5에 도시된 바와 같이, 복수의 플레인들의 물리적 페이지들로 형성된 메타페이지는 이들 복수의 플레인들의 워드라인 행들을 따라 메모리 셀들을 내포한다. 동시에 한 워드라인 행 내 모든 셀들을 프로그램하기보다는, 보다 일반적으로 이들은 2이상의 인터리브된 그룹들로 번갈아 프로그램되며, 각 그룹은 한 페이지의 데이터(단일 블록에) 혹은 메타페이지의 데이터(복수 블록들에 걸쳐)를 저장한다. 한번에 교번적 메모리 셀들을 프로그래밍함으로써, 데이터 레지스터들 및 센스 증폭기들을 포함하는 한 단위의 주변회로들은 각 비트라인마다 제공될 필요는 없고 그보다는 이웃한 비트라인들 간에 시-분할된다. 이것은 주변회로들에 대해 요구되는 기판 공간의 량을 절약하며 메모리 셀들이 행들을 따라 증가된 밀도로 패킹될 수 있게 한다. 그렇지 않다면, 주어진 메모리 시스템으로부터 가능한 병행도를 최대화하기 위해서 행을 따른 모든 셀을 동시에 프로그램하는 것이 바람직하다.
도 3을 참조하면, 행을 따른 모든 다른 메모리 셀에 데이터의 동시적 프로그래밍은 도시된 단일 행 대신, NAND 스트링들의 적어도 일 단부를 따른 두 행들의 선택 트랜지스터들(도시생략)에 의해 가장 편리하게 달성된다. 이때 한 행의 선택 트랜지스터들은 한 제어 신호에 응하여 블록 내 모든 다른 스트링을 이들의 각각의 비트라인들에 연결하고, 다른 행의 선택 트랜지스터들은 개재된 모든 다른 스트링을 또 다른 제어신호에 응하여 그들의 각각의 비트라인들에 연결한다. 그러므로 두 페이지들의 데이터가 각 행의 메모리 셀들에 기입된다.
각 논리 페이지 내 데이터량은 통상적으로 정수개의 하나 이상의 섹터들의 데이터이고, 각 섹터는 관례로 512바이트의 데이터를 내포한다. 도 6은 페이지 혹은 메타페이지의 논리 데이터 페이지의 두 섹터들(153, 155)의 데이터를 도시한 것이다. 통상적으로 각 섹터는 사용자 혹은 시스템 데이터가 저장되는 512 바이트의 부분(157)과, 부분(157) 내 데이터에 관계되거나 이 데이터가 저장된 물리적 페이지 혹은 블록에 관계된 오버헤드 데이터를 위한 또 다른 수의 바이트(159)를 내포한다. 오버헤드 데이터의 바이트 수는 통상적으로 16바이트이어서, 섹터들(153, 155)의 각각에 대해 총 528 바이트가 된다. 오버헤드 부분(159)은 프로그래밍동안 데이터 부분(157)으로부터 계산된 ECC, 이의 논리 어드레스, 블록이 소거되어 재-프로그램된 횟수의 경험 카운트, 하나 이상의 제어 플래그들, 작동전압 레벨들, 및/또는 등과, 이에 더하여 이러한 오버헤드 데이터(159)로부터 계산된 ECC를 내포할 수 있다. 대안적으로, 오버헤드 데이터(159), 혹은 이의 일부는 다른 블록들 내 다른 페이지들에 저장될 수 있다.
메모리들의 병행도가 증가함에 따라, 메타블록의 데이터 저장용량이 증가하고 데이터 페이지 및 메타페이지의 크기도 결과로서 증가한다. 그러면 데이터 페이 지는 2섹터 이상의 데이터를 내포할 수 있다. 데이터 페이지 내 두 섹터들, 및 메타페이지 당 두 데이터 페이지들로, 메타페이지엔 4개의 섹터들이 있다. 이에 따라 각 메타페이지는 2048 바이트의 데이터를 저장한다. 이것은 고도의 병행도이고, 행들 내 메모리 셀들의 수가 증가됨에 따라 더욱 증가될 수 있다. 이러한 이유로, 플래시 메모리들의 폭은 페이지 및 메타페이지 내 데이터량을 증가시키기 위해 확장되고 있다.
위에서 확인된 물리적으로 소형의 재프로그램가능 비휘발성 메모리 카드들 및 플래시 드라이브들은 512 메가바이트(MB), 1 기가바이트(GB), 2GB 및 4GB의 데이터 저장용량으로 시판되고 있고, 그 이상일 수도 있다. 도 7은 호스트와 이러한 대량 메모리 시스템간의 가장 일반적인 인터페이스를 도시한 것이다. 호스트는 애플리케이션 소프트웨어 혹은 호스트에 의해 실행되는 펌웨어 프로그램들에 의해 생성 혹은 사용되는 데이터 파일들을 처리한다. 워드 프로세싱 데이터 파일이 예이며, CAD 소프트웨어의 도면 파일이 또 다른 예이고, PC들, 랩탑 컴퓨터들 등과 같은 일반적인 컴퓨터 호스트들에서 주로 볼 수 있다. pdf 포맷의 문서 또한 이러한 파일이다. 스틸 디지털 비디오 카메라는 메모리 카드에 저장되는 각 사진에 대한 데이터 파일을 생성한다. 셀룰라 전화는 전화번호와 같은, 내부 메모리 카드 상의 파일들로부터 데이터를 이용한다. PDA는 어드레스 파일, 달력 파일, 등과 같은 몇몇의 서로 다른 파일들을 저장하고 사용한다. 임의의 이러한 애플리케이션에서, 메모리 카드는 호스트를 작동시키는 소프트웨어를 내장할 수도 있다.
호스트와 메모리 시스템간의 공통의 논리 인터페이스가 도 7에 도시되었다. 연속된 논리 어드레스 공간(161)은 메모리 시스템에 저장될 수 있는 모든 데이터에 대해 어드레스들을 제공할 만큼 충분히 크다. 호스트 어드레스 공간은 통상적으로 데이터 클러스터들의 증분들로 분할된다. 각각의 클러스터는 주어진 호스트 시스템에서 다수의 섹터들의 데이터 -대략 4 내지 64 섹터들이 전형적이다- 를 내포하게 설계될 수 있다. 표준 섹터는 512 바이트의 데이터를 내포한다.
3개의 파일들로서 파일 1, 파일 2, 파일 3이 도 7의 예에서 생성된 것으로 도시되었다. 호스트 시스템 상에서 실행되는 애플리케이션 프로그램은 순서로 된 한 세트의 데이터로서 각 파일을 생성하고 이를 고유의 이름 혹은 다른 기준에 의해 식별한다. 다른 파일들에 이미 할당되지 않은 충분히 가용한 논리 어드레스 공간은 호스트에 의해 파일 1에 할당된다. 파일 1은 인접한 한 범위의 가용 논리 어드레스들이 할당된 것으로 도시되었다. 일반적으로 어드레스들의 범위들은 호스트 작동 소프트웨어를 위한 특정한 범위와 같은, 특정의 목적들을 위해 할당되는데, 이때 이들 어드레스들이 호스트가 데이터에 논리 어드레스들을 할당하고 있을 때 이용되지 않았을지라도 데이터를 저장하기 위해 이들 범위의 어드레스들을 피한다.
파일 2가 호스트에 의해 나중에 생성될 때, 호스트는 유사하게 도 7에 도시된 바와 같이 논리 어드레스 공간(161) 내에 2개의 서로 다른 범위들의 인접하는 어드레스들을 할당한다. 파일은 인접한 논리 어드레스가 할당될 필요는 없고 그보다는 다른 파일들에 이미 할당된 어드레스 범위들 사이의 어드레스들의 단편들일 수 있다. 이때 이 예는 호스트에 의해 생성되는 또 다른 파일 3이 파일 1 및 파일 2에 전에 할당되지 않은 호스트 어드레스 공간의 다른 부분들 및 다른 데이터가 할 당됨을 보이고 있다.
호스트는 파일 할당 테이블(FAT)을 유지함으로써 메모리 논리 어드레스 공간을 주시하며, 여기서 호스트에 의해 여러 호스트 파일들에 변환(160)에 의해 할당되는 논리 어드레스들이 유지된다. FAT 테이블은, 새로운 파일들이 저장되고, 다른 파일들이 삭제되고, 파일들이 수정되는 등이 행해질 때 호스트에 의해 빈번히 업데이트된다. FAT 테이블은 통상적으로 호스트 메모리에 저장되고 수시로 업데이트되는 비휘발성 메모리에는 카피가 저장된다. 카피는 통상적으로 임의의 다른 데이터 파일처럼 논리 어드레스 공간을 통해 비휘발성 메모리에서 액세스된다. 호스트 파일이 삭제될 때, 호스트는 삭제된 파일에 전에 할당된 논리 어드레스들이 다른 데이터 파일들에 이제 사용이 가능함을 나타내게 FAT 테이블을 업데이트함으로써, 이들 논리 어드레스들을 할당해제(deallocate)한다.
호스트는 메모리 시스템 제어기가 파일들을 저장하기로 선택한 물리적 위치들에 관해선 관심이 없다. 전형적인 호스트는 이의 논리 어드레스 공간과, 여러 파일들에 할당한 논리 어드레스들만을 안다. 한편, 메모리 시스템은 전형적인 호스트/카드 인터페이스를 통해서, 데이터가 기입된 논리 어드레스 공간의 부분들만을 알고 특정 호스트 파일들에 할당된 논리 어드레스들, 혹은 호스트 파일들의 수조차도 모른다. 메모리 시스템 제어기는 데이터의 저장 혹은 가져오기를 위해 호스트에 의해 제공되는 논리 어드레스들을 호스트 데이터가 저장되는 플래시 메모리 셀 어레이 내 고유 물리 어드레스들로 변환한다. 블록(163)은 이들 논리-물리 어드레스 변환들의 작업 테이블을 나타내고, 이는 메모리 시스템 제어기에 의해 유지된다.
메모리 시스템 제어기는 시스템의 수행을 고 레벨로 유지하도록 메모리 어레이(165)의 블록들 및 메타블록들 내에 데이터 파일들을 저장하게 프로그램된다. 4개의 플레인들 혹은 서브-어레이들이 이 예시에서 사용된다. 데이터는 플레인들의 각각으로부터 블록으로 형성된 전체 메타블록에 걸쳐, 시스템이 허용하는 최대 병행도로 프로그램되고 독출되는 것이 바람직하다. 적어도 한 메타블록(167)은 늘, 메모리 제어기에 의해 사용되는 작동 펌웨어 및 데이터를 저장하기 위한 유보된 블록으로서 할당된다. 또 다른 메타블록(169), 혹은 복수의 메타블록들은 호스트 작동 소프트웨어, 호스트 FAT 테이블 등의 저장을 위해 할당될 수 있다. 물리적 저장공간 대부분은 데이터 파일들의 저장을 위해 남아있다. 그러나, 메모리 제어기는 수신된 데이터가 호스트의 여러 파일 객체들간에 호스트에 의해 어떻게 할당되었는지를 모른다. 호스트와의 인터액팅으로부터 메모리 제어기가 통상적으로 아는 모든 것은 특정의 논리 어드레스들에 호스트에 의해 기입되는 데이터가 제어기의 논리-물리 어드레스 테이블(163)에 의해 유지되는 대응 물리 어드레스들에 저장된다는 것이다.
전형적인 메모리 시스템에서, 어드레스 공간(161) 내 데이터량을 저장하는데 필요한 것보다 몇 개의 여분의 블록들의 저장용량이 제공된다. 하나 이상의 이들 여분의 블록들은 메모리의 수명 동안 결함이 될 수도 있을 다른 블록들에 대한 대체를 위해 용장성 블록들로서 제공될 수도 있다. 개개의 메타블록들 내 내포된 블록들의 논리적 그룹화는, 원래 메타블록에 할당된 결함이 난 블록에 대한 용장성 블록의 대체를 포함한, 여러 이유들로 늘 변경될 수 있다. 메타블록(171)과 같은 하나 이상의 추가의 블록들은 통상적으로 소거된 블록 풀(pool) 내에 유지된다. 호스트가 메모리 시스템에 데이터를 기입할 때, 제어기는 소거된 블록 풀 내 메타블록 내에서 호스트-물리 어드레스들에 의해 할당된 논리 어드레스들을 변환한다. 이어서 논리 어드레스 공간(161) 내에 데이터를 저장하는데 사용되지 않는 다른 메타블록들은 소거되고 후속 데이터 기입 작동 동안 사용하기 위해, 소거된 풀 블록들로서 지정된다. 바람직한 형태로, 논리 어드레스 공간은 각각이 물리 메모리 메타블록의 저장용량과 동일한 데이터량을 내포하여 이에 따라 논리 그룹들을 메타블록들로 1 대 1 맵핑할 수 있게 하는 논리 그룹들로 분할된다.
특정 호스트 논리 어드레스들에 저장된 데이터는 원래 저장된 데이터가 무용될 때 새로운 데이터에 의해 자주 덮어씌어진다. 이에 응하여, 메모리 시스템 제어기는 새로운 데이터를 소거된 블록에 기입하고 이어서 이들 논리 어드레스들의 데이터가 저장되는 새로운 물리 블록을 확인하기 위해 이들 논리 어드레스들을 위해 논리-물리 어드레스 테이블을 변경한다. 이어서 이들 논리 어드레스들의 원 데이터를 내포하는 블록들이 소거되고 새로운 데이터 저장에 사용할 수 있게 된다. 이러한 소거는 빈번히, 기입 시작시 소거 블록 풀로부터 전에 소거된 블록들에 충분한 저장용량이 없다면 현 데이터 기입 작동이 완료될 수 있기 전에 행해져야 한다. 이것은 시스템 데이터 프로그래밍 속도에 악영향을 미칠 수 있다. 통상적으로 메모리 제어기는, 주어진 논리 어드레스에 데이터는 호스트가 이들의 동일 논리 어드레스에 새로운 데이터를 기입할 때만 호스트에 의해 무용하게 된 것을 안다. 그러므로 메모리의 많은 블록들은 이러한 무효한 데이터를 한동안 저장하고 있을 수 있다.
블록들 및 메타블록들의 크기들은 집적회로 메모리 칩의 면적을 효율적으로 이용하기 위해서 증가하고 있다. 이에 따라 대부분의 개개의 데이터 기입들은 메타블록의 저장용량미만, 많은 경우들에 있어서 블록의 저장용량보다 훨씬 미만인 데이터량을 저장하게 된다. 메모리 시스템 제어기는 통상적으로 새로운 데이터를 소거된 풀 메타블록에 보내기 때문에, 이것은 얼마간의 메타블록들을 채워지지 않게 하는 결과를 가져올 수 있다. 새로운 데이터가 다른 메타블록에 저장된 어떤 데이터의 업데이트들이라면, 새로운 데이터 메타페이지들의 어드레스들에 인접한 논리 어드레스들을 갖는 그 다른 메타블록으로부터의 데이터의 나머지 유효한 메타페이지들은 새로운 메타블록에 논리적 어드레스 순서로 카피되는 것이 바람직하다. 이전의 메타블록은 다른 유효 데이터 메타페이지들을 보존할 수 있다. 이것은 시간에 따라 개개의 메타블록의 어떤 메타페이지들의 데이터가 무용으로 되어 무효하게 되고, 다른 메타블록에 기입되는 동일 논리 어드레스를 가진 새로운 데이터에 의해 대체되는 결과로 된다.
전체 논리 어드레스 공간(161)에 대해 데이터를 저장할 충분한 물리 메모리 공간을 유지하기 위해서, 이러한 데이터는 주기적으로 콤팩트 혹은 통합된다(가비지 수거(garbage collection). 또한, 메타블록들 내 데이터의 섹터들을 가능한 한 실제적으로 이들의 논리 어드레스들과 동일 순서로 유지하는 것이 인접한 논리 어드레스들 내 데이터를 독출하는 것을 보다 효율적이게 하므로 바람직하다. 따라서 데이터 콤팩트 및 가비지 수거는 통상적으로 이러한 추가의 목적으로 수행된다. 부분적인 블록 데이터 업데이트들을 수신할 때 메모리를 관리하고 메타블록들의 사용 의 어떤 면들이 미국특허 6,763,424에 기술되어 있다.
통상적으로 데이터 콤팩트는 메타블록으로부터 모든 유효한 데이터 메타페이지들을 독출하고, 프로세스에서 무효한 데이터를 가진 메타페이지들을 무시하고, 이들 독출된 것들을 새로운 블록에 기입하는 것을 수반한다. 또한, 유효 데이터를 가진 메타페이지들은 이들에 저장된 데이터의 논리 어드레스 순서와 맞는 물리 어드레스 순서로 배열되는 것이 바람직하다. 새로운 메타블록에 점유되는 메타페이지들의 수는, 무효 데이터를 내포하는 메타페이지들이 새로운 메타블록에 카피되지 않기 때문에 이전 메타블록에 점유된 것들보다 적을 것이다. 이어서 이전 블록은 소거되고 새로운 데이터를 저장하는데 사용할 수 있게 된다. 이때 통합에 의해 얻어진 추가의 메타페이지들의 용량은 다른 데이터를 저장하는데 사용될 수 있다.
가비지 수거동안에, 인접한 혹은 거의 인접한 논리 어드레스들을 가진 메타페이지들의 유효 데이터는 2이상의 메타블록들로부터 수거되어 통상 소거된 블록 풀 내의 메타블록인 또 다른 메타블록에 재기입된다. 모든 유효 데이터 메타페이지들이 원래의 2이상의 메타블록들로부터 카피될 때, 이들은 향후 사용을 위해 소거될 수 있다.
데이터 통합 및 가비지 수거는 시간이 걸리고, 특히 데이터 통합 혹은 가비지 수거가 호스트로부터의 명령이 실행될 수 있기 전에 행해질 필요가 있을 경우, 메모리 시스템의 수행에 영향을 미칠 수 있다. 이러한 작동들은 정규적으로는 가능한 한 백그라운드(background)에서 행하기 위해 메모리 시스템 제어기에 의해 스케쥴링되나, 이들 작동들을 수행할 필요성은 이러한 작동이 완료될 때까지 제어기가 호스트에 비지(busy) 상태 신호를 주어야 하는 것을 야기할 수 있다. 호스트 명령의 실행이 지연될 수 있는 예는 호스트가 메모리에 기입하기를 원하는 모든 데이터를 저장할 소거된 블록 풀 내 사전에 소거된 충분한 메타블록들이 없고 먼저 하나 이상의 메타블록들의 유효 데이터를 소거하기 위해 데이터 통합 혹은 가비지 수거가 필요하고 이어 이들 메타블록들이 소거될 수 있는 경우이다. 그러므로, 이러한 중단을 최소화하기 위해서 메모리의 제어를 관리하는 것이 연구되었다. 많은 이러한 기술들은 다음의 미국특허출원: 현재 공개번호 2005/0144358 A1인 "Management of Non-Volatile Memory Systems Having Large Erase Blocks" 명칭으로 2003년 12월 30일에 출원된 출원번호 10/749,831; "Non- Volatile Memory and Method with Block Management System" 명칭으로 2003년 12월 30일에 출원된 출원번호 10/750,155; 현재 공개번호 2005/0141313 A1인 "Non-Volatile Memory and Method with Memory Planes Alignment" 명칭으로 2004년 8월 13일에 출원된 출원번호 10/917,888; 현재 공개번호 2005/0141312 Al인 2004년 8월 13일에 출원된 출원번호 10/917,867; 현재 공개번호 2005/0166087 Al인 "Non- Volatile Memory and Method with Phased Program Failure Handling" 명칭으로 2004년 8월 13일에 출원된 출원번호 10/917,889; 현재 공개번호 2005/0144365 Al인 "Non- Volatile Memory and Method with Control Data Management" 명칭의 2004년 8월 13일에 출원된 출원번호 10/917,725; "Non- Volatile Memory and Method with Multi-Stream Update Tracking" 명칭의, 2005년 7월 27일에 출원된 출원번호 11/192,220; "Non- Volatile Memory and Method with Improved Indexing for Scratch Pad and Update Blocks" 명칭의 2005년 7월 27일에 출원된 출원번호 11/192,386; "Non- Volatile Memory and Method with Multi-Stream Updating" 명칭의 2005년 7월 27일에 출원된 출원번호 11/191,686에 기술되어 있다.
매우 큰 소거 블록들을 가진 메모리 어레이들의 작동을 효율적으로 제어하기 위한 한 과제는 주어진 기입작동 동안 저장되는 데이터 섹터들의 수를 메모리의 블록들의 용량에 맞추고 이들 블록들의 경계들에 정렬시키는 것이다. 한 방법은 호스트로부터 새로운 데이터를 저장하는데 사용되는 메타블록을, 전체 메타블록을 채우는 량 미만의 데이터량을 저장하는데 필요한 최대 수의 블록들 미만으로 구성하는 것이다. 적응형 메타블록들의 사용은 현재 공개번호 2005/0144357 A1인 "Adaptive Metablocks" 명칭으로 2003년 12월 30일 출원된 미국특허출원 10/749,189에 기술되어 있다. 데이터의 블록들간 경계들과 메타블록들간 물리적 경계들을 맞추는 것은 현재 공개번호 2005/0144363 A1인 2004년 5월 7일에 출원된 미국특허출원 10/841,118 및 현재 공개번호 2005/0144367 A1인 "Data Run Programming" 명칭으로 2004년 12월 16일 출원된 미국특허출원 11/016,271에 기술되어 있다.
메모리 제어기는 FAT 테이블로부터의 데이터를 사용할 수도 있는데, 이 데이터는 메모리 시스템을 더 효율적으로 작동시키기 위해서 비휘발성 메모리에 호스트에 의해 저장된다. 한 이러한 사용은 논리 어드레스들을 할당해제함으로써 데이터가 호스트에 의해 무용될 것으로 확인되었을 때를 아는 것이다. 이것을 앎으로써 메모리 제어기는 정상적으로는 호스트가 이들 논리 어드레스들에 새로운 데이터를 기입함으로써 그에 대해 알게 되기 전에 이러한 무효 데이터를 내포하는 블록들의 소거를 스케쥴링할 수 있게 된다. 이것은 현재 공개번호 2006/0020744 A1인 "Method and Apparatus for Maintaining Data on Non- Volatile Memory Systems" 명칭으로 2004년 7월 21일 출원된 미국특허출원 10/897,049에 기술되어 있다. 이외 기술들은 주어진 기입작동이 단일 파일인지를 혹은 복수 파일들이라면 파일들간 경계들이 어디에 놓여 있는지를 추론하기 위해서 새로운 데이터를 메모리에 기입하는 호스트 패턴들을 모니터하는 것을 포함한다. 현재 공개번호 2006/0020745 A1인 "FAT Analysis for Optimized Sequential Cluster Management" 명칭의 2004년 12월 23일 출원된 미국특허출원 11/022,369는 이러한 유형의 기술들의 사용을 기술한다.
메모리 시스템을 효율적으로 작동시키기 위해서, 제어기가 개개의 파일들의 데이터에 호스트에 의해 할당된 논리 어드레스들에 관하여 할 수 있는 한 많은 것을 아는 것이 바람직하다. 데이터 파일들은 파일 경계들을 모를 때 더 많은 수의 메타블록들간에 산재되기보다는 단일 메타블록 혹은 일 그룹의 메타블록들 내에 제어기에 의해 저장될 수 있다. 결과는 데이터 통합 및 가비지 수거 작동들의 수 및 복잡성이 감소된다는 것이다. 메모리 시스템의 수행은 결과적으로 향상된다. 그러나, 위에 기술된 바와 같이, 호스트/메모리 인터페이스가 논리 어드레스 공간(161)(도 7)을 포함할 때 메모리 제어기가 호스트 데이터 파일 구조에 관한 많은 것을 아는 것은 어렵다.
도 8을 참조하면, 도 7에 이미 도시된 바와 같은 전형적인 논리 어드레스 호스트/메모리 인터페이스는 다르게 도시되었다. 호스트에 의해 생성된 데이터 파일들에는 호스트에 의해 논리 어드레스들이 할당된다. 그러면 메모리 시스템은 이들 논리 어드레스들을 보고 이들을 데이터가 실제로 저장되는 메모리 셀들의 블록들의 물리 어드레스들에 맵핑한다.
파일기반 메모리 인터페이스 및 작동
대량의 데이터의 저장을 위한 호스트와 메모리 시스템간 다른 유형의 인터페이스는 논리 어드레스 공간의 사용을 제거한다. 대신에 호스트는 고유 fileID(혹은 이외 고유 참조) 및 파일 내 데이터의 단위들(이를테면 바이트들)의 오프셋 어드레스들에 의해 각 파일을 논리적으로 어드레스한다. 이 파일 어드레스는 직접 메모리 시스템 제어기에 주어지고, 그러면 이 제어기는 각 호스트 파일의 데이터가 물리적으로 저장된 곳에 대한 자신의 테이블을 유지한다. 이 새로운 인터페이스는 도 2-6을 참조로 위에 기술된 바와 동일한 메모리 시스템에 구현될 수 있다. 위에 기술된 것과의 주된 차이는 이 메모리 시스템이 호스트 시스템과 통신하는 방식이다.
이 파일 기반의 인터페이스는 도 9에 도시되었고, 이는 도 7의 논리 어드레스 인터페이스와 비교된다. 파일 1, 파일 2, 파일 3의 각각의 ID(identification)와 도 9의 파일들 내 데이터의 오프셋들이 메모리 제어기에 직접 보내진다. 그러면 이 논리 어드레스 정보는 메모리 제어기 기능(173)에 의해 메타블록들 및 메모리(165)의 메타페이지들의 물리 어드레스들로 번역된다. 파일 디렉토리는 각 저장된 섹터, 페이지 혹은 다른 단위의 파일 데이터가 속하는 호스트 파일을 주시한다.
파일 기반의 인터페이스가 도 10에 의해 도시되었고, 이는 도 8의 논리 어드레스 인터페이스와 비교된다. 논리 어드레스 공간 및 호스트에 의해 유지되는 도 8 의 FAT 테이블은 도 10에는 없다. 그보다는, 호스트에 의해 생성된 데이터 파일들은 파일 번호 및 파일 내 데이터의 오프셋들에 의해 메모리 시스템에 확인된다. 이어서 메모리 시스템 제어기는 파일들을 메모리 셀 어레이의 물리 블록들에 직접 맵핑하고 호스트 파일들이 저장되는 메모리 블록들의 파일 디렉토리 및 인덱스 테이블 정보를 유지한다. 그러면 호스트는 논리 어드레스 인터페이스를 관리하는데 현재 필요한 파일 할당 테이블(FAT)을 유지하는 것은 불필요하다.
도 11은 프로세스에 의해서 그리고 제어기의 다른 회로들에 실행되는 메모리 시스템 펌웨어에 의해 수행되는 직접 데이터 파일 시스템의 주요 기능들의 일반적인 블록도이다. 이것은 이하 기술되는 특정 메모리 작동들이 고찰될 수 있는 전체 프레임워크를 제공한다. 파일 기반 인터페이스(601)층은 메모리 시스템의 3가지 주요 기능들, 즉 파일들을 기입하는 기능, 파일들을 삭제하는 기능 및 파일들을 독출하는 기능에 대해, 메모리 시스템과 외부 호스트 시스템 혹은 동일 메모리 카드 혹은 플래시 드라이브에서 실행되는 호스트 애플리케이션간에 명령들 및 데이터를 전달한다. 데이터는 플래시 메모리 어레이(603)에 저장된다.
파일-블록 매핑 기능(605)은 데이터가 식별되게 하는 파일들에 따라 플래시 메모리에 데이터의 저장을 구성한다. 각 파일에 대해서, 파일에 대한 데이터를 다른 파일들에 대한 데이터와 함께 내포하는 플래시 블록들의 수는 제약된다. 이것은 파일이 삭제 혹은 수정되었을 때 생성되는 무용 데이터 공간을 리클레임하기 위해 재배치되어야 하는 관계없는 파일 데이터의 볼륨을 최소화하여, 향상된 수행 및 메모리 내구성을 가져온다. 메모리(603)의 물리적 한 블록의 메모리 셀들은 데이터 관리의 기본 단위이다.
데이터 버퍼링 및 프로그래밍 기능(607)은 파일 인터페이스로부터 혹은 플래시 메모리 내 위치로부터 파일 데이터의 버퍼 메모리 내 임시 저장, 이 데이터의 플래시 메모리에의 전송, 및 이 데이터를 파일용 활성 블록에 혹은 임시 스왑 블록에의 프로그래밍을 제어한다. 각 파일 데이터 그룹의 시작은 플래시 메모리 내 메타페이지의 시작과 직접적으로 정렬되는 것이 바람직하다. 논리 메타페이지 구조들은 각 데이터 그룹에 대해 오프셋 어드레스 공간 내에 정의된다.
도 11의 기능(609)은 메모리(603)에 저장된 데이터를 독출하기 위해 이 메모리(603)에의 액세스를 제어한다. 호스트에 의해 명령되었을 때 파일의 데이터의 삭제는 기능(611)이 기능(613)에 의해 유지된 파일 인덱싱 정보 및 기능(615)에 블록들의 기록들을 업데이트하게 한다.
파일 데이터 인덱싱(613)은 메모리(603)에 저장된 개개의 파일들을 고유 파일 식별자 및 파일 내 데이터의 오프셋 어드레스들에 의해 인덱싱한다. 각 파일에 대한 데이터는 인접한 논리 오프셋 어드레스들을 갖는 한 세트의 데이터 그룹들로서 저장된다. 파일 디렉토리는 개개의 파일들에 대한 다수 세트들의 데이터 그룹 엔트리들의 파일 인덱스 테이블(FIT) 내 위치들을 확인한다. 소거되거나, 혹은 파일 데이터로 부분적으로 프로그램되거나 무용 데이터와 함께 파일 데이터를 내포하는 블록들의 신원은 블록 기록 기능(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)의 미사용된 저장용량은 기능(651)에 의해 리클레임되고, 기능(650)에서 데이터를 리클레임 가능한 블록들로부터 다른 블록들에 카피한 후에, 이에 따라 이들 블록들은 새로운 데이터가 기입될 수 있는 소거된 블록들(641)의 상태로 되돌아가게 된다.
도 13a를 참조하면, 메모리 시스템에 데이터 파일의 기입이 도시되었다. 이 예에서, 데이터 파일(181)은 메모리 시스템의 한 블록 혹은 메타블록(183)의 저장용량보다 크며, 수직 실선들 사이에 연장하여 도시되었다. 그러므로 데이터 파일(181)의 부분(184)은 제2 블록(185)에 기입된다. 이들 메모리 셀 블록들은 물리적으로 인접한 것으로 도시되었으나 그럴 필요는 없다. 파일(181)로부터의 데이터는 파일의 모든 데이터가 메모리에 기입될 때까지 이들이 호스트로부터 스트림으로 수신될 때 기입된다. 도 13a의 예에서, 데이터(181)는 파일의 처음 데이터이다.
메모리 시스템이 저장된 데이터를 관리하고 주시하기 위한 바람직한 방법은 가변 크기의 데이터 그룹들의 사용에 의한 것이다. 즉, 파일의 데이터는 완전한 파일을 형성하기 위해 정의된 순서로 함께 연쇄(chain)될 수 있는 복수 그룹들의 데이터로서 저장된다. 그러나, 바람직하게, 파일 내 데이터 그룹들의 순서는 파일 인덱스 테이블(FIT)을 사용하여 메모리 시스템 제어기에 의해 유지된다. 호스트로부터 데이터의 스트림이 기입되고 있을 때, 불연속이 파일 데이터의 논리 오프셋 어드레스들에 혹은 데이터가 저장되고 있는 물리 공간에 있을 때는 언제나 새로운 데이터 그룹이 시작된다. 이러한 물리적 불연속의 예는 파일의 데이터가 한 블록을 채우고 또 다른 블록에 기입되기 시작할 때이다. 이것이 도 13a에 도시되었으며, 여기서 제1 데이터 그룹은 제1 블록(183)을 채우고 파일의 나머지 부분(184)은 제2 데이터 그룹으로서 제2 블록(185)에 저장된다. 제1 데이터 그룹은 (F0,D0)에 의해 나타낼 수 있고, 여기서 F0은 데이터 파일의 시작부분의 논리 오프셋이고 D0은 파일이 시작하는 메모리 내 물리 위치이다. 제2 데이터 그룹은 (F1,D1)으로 나타내며, F1은 제2 블록(185)의 시작부분에 저장되는 데이터의 논리 파일 오프셋이고, D1은 그 데이터가 저장되는 물리 위치이다.
호스트-메모리 인터페이스를 통해 전송되는 데이터량은 데이터의 바이트 수, 데이터의 섹터들의 수, 혹은 어떤 다른 입도(granularity)로 표현될 수 있다. 호스트는 대부분 흔히 이의 파일들의 데이터를 바이트 입도로 정의하나 현 논리 어드레스 인터페이스를 통해 대용량 메모리 시스템과 통신할 때, 바이트들을 각각 512바이트들의 섹터들로, 혹은 각각 복수의 섹터들의 클러스터들로 그룹화한다. 통상적으로 이것은 메모리 시스템의 작동을 단순화하기 위해 행해진다. 여기에서 기술되 는 파일 기반 호스트-메모리 인터페이스가 어떤 다른 데이터 단위를 사용할 수 있을지라도, 원래의 호스트 파일 바이트 입도가 일반적으로 바람직하다. 즉, 데이터 오프셋들, 길이들 등은 섹터(들), 클러스터(들) 등에 의한 것보다는 바이트(들)인 최소의 적합한 데이터 단위로 표현되는 것이 바람직하다. 이것은 여기에 기술된 기술들로 플래시 메모리 저장용량을 보다 효율적으로 사용할 수 있게 한다.
도 13a에 도시된 방식으로 메모리에 기입된 새로운 파일은 FIT에 데이터 그룹들에 대한 인덱스 엔트리들(F0,D0), (F1,D1)의 시퀀스로서 이 순서로 나타내어진다. 즉, 호스트 시스템이 특정 파일에 액세스하기를 원할 때는 언제나, 호스트는 이의 fileID 혹은 다른 ID(identification)를 메모리 시스템에 보내고, 그러면 메모리 시스템은 이의 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)은 2개의 그룹들로서, 하나 는 삽입 전의 그룹(F0,D0)와 삽입 후의 그룹(F2,D1)로 분할된다. 이것은 이를테면 삽입의 시작 F1에서 그리고 삽입의 끝 F2에서 일어나는 것과 같이 데이터의 논리적 불연속이 있을 때는 언제나 새로운 데이터 그룹이 형성될 필요가 있기 때문이다. 그룹(F3,D2)은 물리 어드레스(D2)가 제2 블록(185)의 시작인 결과이다. 그룹들 (F1,D3) 및 (F3,D2)은, 이들에 저장된 데이터의 오프셋들에서 불연속이 있기 때문에, 이들이 동일 메모리 블록에 저장될지라도, 개별적으로 유지된다. 그러면, 삽입을 가진 원 파일은 데이터 그룹 인텍스 엔트리들 (FO,DO), (F1,D3), (F2,D1), (F3,D2)에 의해, 이 순서로 메모리 시스템 FIT에 나타내어진다. 도 13a, 도 13b, 도 13c의 예들로부터, 새로운 혹은 기존 파일에 대한 새로운 데이터가 메모리에 어떤 데이터도 무용되게 함이 없이 기입될 수 있는 것에 유념한다.
도 13c에 도시된 현존 파일에 데이터의 삽입에 대한 대안으로서, 파일은 데이터가 삽입되었을 때마다 호스트에 의해 별도의 파일로서 메모리에 재기입될 수 있다. 이 별도의 파일은 메모리 시스템에 의해서 새로운 파일로서 취급될 수 있다. 이전 파일은 호스트에 의해 삭제되고, 메모리 시스템은 이전 파일이 저장된 공간 -이의 데이터는 현재 무용되어 있다- 을 리클레임함으로써 응답할 수 있다.
도 13d는 도 13a에 도시한 방식으로 원래 기입된 데이터의 어떤 부분이 업데이트되는 또 다른 예를 도시한 것이다. 데이터 파일의 부분(195)이 업데이트되는 것으로 도시되었다. 메모리 시스템 내 전체 파일을 업데이트로 재기입하기 보다는, 파일의 업데이트된 부분(197)이 전에 기입된 데이터에 첨부된다. 전에 기입된 데이터의 부분(199)은 이제 무용된다. 업데이트 한 후에, 파일은 데이터 그룹 인덱스 엔트리들 (FO,DO), (F1,D3), (F2,D1), (F3,D2)에 의해 이 순서로 메모리 시스템 FIT에 나타내어진다. 도 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)으로 단축된다. 업데이트된 데이터는 이들이 메모리 블록들의 경계에 겹치기 때문에 2개의 그룹들(F2,D3) 및 (F3,D4)에 기입된다. 일부 데이터는 제3 메모리 블록에 저장된다. 파 일은 이제 데이터 그룹들의 인덱스 엔트리들의 시퀀스 (F0,D0), (F2,D3), (F3,D4), (F4,D2)에 의해 기술된다.
도 14b의 파일은 호스트가 새로운 데이터 파일 I1을 삽입하게 함으로써 도 14c에서 더욱 수정된다. 새로운 데이터 I1은, 삽입된 데이터가 메모리 블록들의 경계와 겹치기 때문에 도 14c의 새로운 그룹들 (F5,D6) 및 (F6,D7)으로서, 도 14b의 이전 그룹 (F4, D2) 바로 다음에 메모리에 기입된다. 제4 메모리 블록이 사용된다. 도 14b의 이전 그룹 (F0,D0)은 새로운 데이터 I1의 삽입 때문에, 도 14c에 단축된 그룹들 (F0,D0) 및 (F7,D5)으로 분할된다. 파일은 데이터 그룹들에 대한 인덱스 엔트리들의 시퀀스 (FO,DO), (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 블록은 파일을 저장하는데 필요하게 된다. 파일은 이제 데이터 그룹들의 인덱스 엔트리들의 시퀀스 (FO,DO), (F5,D6), (F6,D7), (F7,D5), (F8,D3), (F9,D4), (F12,D10), (F13,D11), (F14,D9)에 의해 기술된다.
각 파일의 데이터의 오프셋들은 앞의 설명에 따라 파일의 생성 혹은 수정 후에 정확한 논리적 순서로 연속적이게 유지되는 것이 바람직하다. 그러므로, 데이터를 파일에 삽입하는 작동의 부분으로서, 예를 들면, 호스트에 의해 제공된 삽입된 데이터의 오프셋들은 삽입 바로 전의 오프셋부터 연속적이고 삽입 후에 파일 내 현존 데이터는 삽입된 데이터 량만큼 증분된다. 현존 파일을 업데이트하는 것은 가장 일반적으로 현존 파일의 주어진 어드레스 범위 내 데이터가, 업데이트된 데이터의 유사 량만큼 대체되는 결과를 가져오므로, 파일의 다른 데이터의 오프셋들은 통상적으로 대체될 필요가 없다.
위에 기술되고 도 13 및 도 14에 의해 도시된 데이터 할당 및 인덱싱 기능들 모두는 메모리 시스템의 제어기에 의해 수행됨에 유의한다. 적합한 명령과 함께, 호스트는 메모리 시스템에 보내지고 있는 fileID 및 파일 내 데이터의 오프셋들만을 통보(communicate)한다. 메모리 시스템은 나머지를 행한다.
지금 기술한 방식으로 호스트로부터의 파일 데이터를 플래시 메모리에 직접 기입하는 이점은 이렇게 하여 저장된 데이터의 입도 혹은 분해능이 호스트의 것과 동일하게 유지될 수 있다는 것이다. 예를 들면, 호스트 애플리케이션이 1바이트 입 도로 파일 데이터를 기입한다면, 이 데이터는 1바이트 입도로 플래시 메모리에 기입될 수도 있다. 개개의 데이터 그룹 내 데이터의 량 및 위치는 바이트 수로 측정된다. 즉, 호스트 애플리케이션 파일 내 개별적으로 어드레싱이 가능한 동일 오프셋 단위의 데이터는 플래시 메모리에 저장될 때 그 파일 내 개별적으로 어드레싱이 가능하다. 블록 내 동일 파일의 데이터 그룹들 간 어떤 경계들은 가장 가까운 바이트 혹은 다른 호스트 오프셋 단위로 인덱스 테이블에 명시된다. 유사하게, 블록 내 서로 다른 파일들의 데이터 그룹들간의 경계들은 호스트 오프셋의 단위로 정의된다.
"섹터"라는 용어는 ECC가 연관된 저장된 데이터의 단위를 나타내기 위해서 큰 블록의 메모리들에 사용된다. 그러므로 섹터는 이러한 오류정정 코드가 메모리 시스템의 제어기에 의해 생성되어 데이터와 함께 저장될 때 플래시 메모리에 및 이로부터 데이터 전송의 최소 단위이다. "페이지"는 블록 내 한 단위의 메모리 셀들을 나타내는데 사용되며 프로그래밍의 최소 단위이다. "메타페이지"라는 용어는 메타블록의 완전한 병행성을 가진 페이지를 나타내는데 사용된다. 메타페이지는 프로그래밍의 최소 단위이다.
도 14b 및 도 14e로부터, Update 명령에 의해, 파일을 저장하는데 필요한 물리적 공간은 파일 내 데이터량보다 커지게 되는 것에 유의한다. 이것은 업데이트들에 의해 대체된 데이터가 메모리에 저장된 채로 있게 되기 때문이다. 그러므로, 무용된 무효한 데이터를 소거함으로써 보다 적은 물리적 저장공간에 파일의 데이터를 통합(가비지 수거)하는 것이 매우 바람직하다. 그러므로 더 많은 저장공간은 다른 데이터에 대해 사용될 수 있게 된다.
도 14b 및 도 14e의 파일 데이터 업데이트들 외에도, 도 14c의 데이터 삽입으로 파일 데이터는 순서에서 벗어나 저장되는 결과로 되는 것에 유의한다. 즉, 업데이트들 및 삽입들은 이들이 행해질 때 메모리에 저장된 파일의 끝에 부가되고, 이들은 파일 내 어떤 곳에 거의 항시 논리적으로 위치하게 된다. 이것이 도 14b, 도 14c 및 도 14e의 예들의 경우이다. 그러므로 메모리에 저장된 파일의 데이터를 파일 내 오프셋들의 순서와 일치하게 순서를 재조정하는 것이 바람직할 수 있다. 그러면 이것은 페이지들 및 블록들을 차례차례 독출하는 것이 파일의 데이터를 이들의 오프셋 순서로 제공할 것이기 때문에 저장된 데이터를 독출하는 속도를 개선한다. 또한, 이것은 파일의 최대 가능한 조각모으기(defragmentation)를 제공한다. 그러나, 독출을 보다 효율적으로 하기 위해 파일 데이터의 순서를 재조정하는 것은 메모리 시스템의 수행에 대해선, 다른 데이터를 저장하는데 사용하기 위한 하나 이상의 메모리 블록들을 잠재적으로 일소하는 파일 데이터 통합만큼은 중요하지 않다. 그러므로 파일 내 데이터의 순서를 재조정하는 것은 통상적으로, 잇점이 작동 오버헤드를 추가할 만큼 가치가 없는 것인 단독으로 행해지는 것이 아니라, 작동 오버헤드를 거의 혹은 전혀 추가하지 않는 많은 가비지 수거 작동들의 일부로서 행해질 수 있다.
도 14e의 파일은 두 개의 데이터 업데이트들 U1 및 U2가 행해졌기 때문에 메모리에 저장된 무용 데이터 그룹들(회색 부분들)을 포함한다. 결국, 파일을 저장하는데 사용되는 메모리 용량은 도 14e로부터 명백한 바와 같이 파일의 크기보다 실 질적으로 크다. 그러므로 가비지 수거가 적합하다. 도 15는 도 14e의 데이터 파일을 가비지 수거한 결과를 도시한 것이다. 이 파일은 가비지 수거 전에, 거의 5개의 블록들의 저장용량(도 14e)을 취하나, 가비지 수거 후에 같은 파일은 약간 3개 이상의 메모리 셀 블록들(도 15) 이내로 맞게 된다. 가비지 수거 작동의 일부로서, 데이터는 이들이 처음에는 다른 소거된 블록들에 기입되고 이어서 원 블록들은 소거되는 블록들로부터 카피된다. 전체 파일이, 수거된 가비지라면, 이의 데이터는 파일 내 데이터 논리 오프셋 순서와 동일한 물리적 순서로 새로운 블록들에 카피될 수 있다. 예를 들면, 업데이트들 U1 및 U2, 및 삽입 I1은 이들이 호스트 파일 내 나타나는 순서와 동일한 순서로 가비지 수거(도 15) 후에 저장된다.
또한, 파일단위로 가비지 수거에 의해서 정상적으로는 통합된 파일 내 새로운 서로 다른 데이터 그룹들이 형성된다. 도 15의 경우에, 파일은 새로운 데이터 그룹들에 대해 인덱스 엔트리들의 새로운 시퀀스 (FO,D12), (F1,D13), (F2,D14), (F3,D15)에 의해 기술된다. 이것은 도 14e에 도시된 파일의 상태로 존재하는 것보다 훨씬 더 적은 수의 데이터 그룹들이다. 이제 파일의 데이터가 카피된 메모리 셀 블록들 각각에 대해 하나의 데이터 그룹이 있다. 가비지 수거 작동의 일부로서, 파일 인덱스 테이블(FIT)은 파일을 형성하는 새로운 데이터 그룹들을 반영하게 업데이트된다.
도 14e의 데이터 분포로부터 도 15의 분포로 이동하는 것은 상당량의 데이터 카피를 수반하는 것에 유의한다. 유효 데이터는 도 14e에서 블록들 각각으로부터 독출되고 이어서 도 15의 소거된 4개의 블록들에 기입된다. 이것은 추후 사용을 위 해 파일의 데이터 그룹들을 크게 단순화시킬지라도, 이것은 데이터를 카피하는데 있어 현저한 시간량이 걸린다. 그러므로, 파일단위로 데이터를 가비지 수거하기보다는, 대안은 데이터가 파일로서 메모리에 직접 저장되고 있을 때에도, 블록단위로 행하는 것이다. 블록들의 미사용된 용량은 또 다른 블록에 카피할 최소량의 데이터를 갖는 이들 블록들에 대해 가비지 수거를 수행함으로써 리클레임될 수 있다. 이것은 2006년 5월 8일 출원된 "Reclaiming Data Storage Capacity in Flash Memories" 명칭의 출원번호 11/382,232인 위에 참조된 특허출원에 기술되어 있다.
그러므로, 도 14e의 상태에 있을 때 파일의 데이터를 유지하는 블록들을 리클레임하는 것은 동일 파일의 데이터를 저장하는 복수의 블록들 대신 블록들에 개별적으로 작동한다. 예를 들면, 도 14e의 제2 블록(002)이 주어진 시간에 리클레임 작동하기로 간주된 메모리 시스템의 임의의 블록의 최소량의 유효 데이터를 내포하였다면, 이의 단일 데이터 그룹은, 도 16에 도시된 바와 같이, 또 다른 소거된 블록(010)에 카피될 것이다. 그러면 새로운 블록은 단일 데이터 그룹(F8,D16)을 내포하고 나머지 블록은 소거된 용량이며, 이 블록에 새로운 데이터가 기입될 수 있다. 이 소거된 용량은 데이터가 도 14e에서 저장되었던 블록으로부터 리클레임되었다. 그러면 파일은 파일을 구성하는 데이터 그룹들에 대한 다음 순서의 인덱스 엔트리들에 의해 기술된다:(F0,D0), (F5,D6), (F6,D7), (F7,D5), (F8,D16), (F9,D4), (F12,D10), (F13,D11), (F14,D9). 도 14e에 도시된 다른 블록들은 블록 리클레임 프로세스에 따라, 이들이 개별적으로 리클레임 작동을 위한 기준들을 충족할 때까지 변경되지 않은 채로 있게 된다.
파일 데이터 인덱싱
도 17은 몇몇의 서로 다른 시간들 0, 2, 4, X 및 Y 각각에서 한 파일에 대한 파일 인덱스 테이블(FIT) 내 일련의 인덱스 엔트리들을 도시한 것이다. 이들은 각각 도 14a, 14c, 14e, 15 및 16에 관하여 위에 기술된 순서들이다. FIT 내 데이터는 바람직하게는 호스트 시스템으로부터 도움없이 메모리 제어기에 의해 기입되어 현재로 유지된다. 호스트 시스템은 메모리 시스템에 데이터를 기입할 때 경로명들, 파일명들 및 파일 내에 데이터의 오프셋들을 공급하나 호스트는 데이터 그룹들을 정의하거나 이들이 메모리 셀 어레이 내 어디에 저장될 것인가에 관여하지 않는다. 도 17의 엔트리들에서, 도 14a-14e의 메모리 셀 블록들은 1부터 시작하여 좌측부터 번호가 매겨진다. 따라서 도 14c에 도시된 상태에 파일에 대해서, 예를 들면, 이의 제3 데이터 그룹(F6,D7)은 도 17에서 좌측으로부터 네 번째 블록, 이 블록의 처음 어드레스로부터 D7 바이트들로 블록 004에 저장되는 것에 유의한다. 각 데이터 그룹의 길이는 테이블의 각 엔트리로 포함되는 것이 바람직하다.
한 파일에 대해 도 17에 도시된 시퀀스 인덱스 엔트리들은, 파일에 대한 변화가 파일의 데이터 그룹들의 수정으로 될 때 메모리 제어기에 의해서, 혹은 다른 덜 빈번한 간격들로 재기입된다. 제어기는 이러한 변경들을 이의 메모리에 저장할 수 있고, 이어서 한번에 이들의 대부분을 플래시 메모리에 기입할 수 있다. 임의의 한 시간에 한 파일에 대해 단지 한 유효한 한 세트의 인덱스들이 존재하는데, 서로 다른 시간들에서 파일을 정의하는 5개의 이러한 세트들의 인덱스들이 도 17에 도시되었다. 시간 X에서 인덱스 및 시간 Y에서 인덱스는 위에 기술된 바와 같이, 첫 번 째는 파일단위로 두 번째는 블록단위로 2개의 서로 다른 유형들의 리클레임 작동들의 결과를 보여준다. 메모리 시스템 제어기는 추가의 데이터를 파일에 프로그램하고, 파일로부터 데이터를 독출하고, 데이터가 저장되는 파일 혹은 블록들의 데이터를 가비지 수거하고, 잠재적으로 다른 작동들을 위해서 필요할 때 파일의 현재의 한 세트의 인덱스들을 사용한다. 그러므로 FIT는 개개의 파일 인덱스 엔트리들이 이들의 파일 오프셋들(Fx)의 순서로 저장된다면 사용하기가 더 쉬우나, 그렇지 않다면 제어기는 이 논리적 순서로 엔트리들을 확실히 읽을 수 있다. 특정 파일에 대한 인덱스 엔트리들을 읽는 메모리 제어기의 가장 공통적인 원인은 호스트 명령을 실행하는 과정에 있다.
제1 특정 파일 인덱싱
실시예
도 18을 참조하면, 직접 데이터 파일 인터페이스로 작동하는 메모리 시스템에 저장된 파일들은 인접한 세트 내 수치값인 고유 fileID(201)에 의해 확인된다. 디렉토리(203)는 메모리 디바이스에 저장된 모든 유효파일에 대한 엔트리를 내포한다. 디렉토리(203)는 바람직하게는 플랫(flat) 계층을 가지며, 하위-디렉토리들을 지원하지 않는다. 이것은 메모리 내 직접 데이터 파일 시스템을 호스트 내에서 사용되는 운영 시스템과는 무관하게 되게 한다. 특정 호스트 운영 시스템 프로토콜에 준하는 계층 디렉토리는 지원되는 파일 메타데이터(파일 "속성" 정보라고도 알려진 것임) 기능과 함께 플랫 디렉토리 구조를 이용하여, 직접 데이터 파일 시스템 밖의 펌웨어층에 의해 지원될 수 있다.
앞에 기술된 것을 요약하면, 파일에 대한 데이터는 한 세트의 데이터 그룹들로서 저장되고, 각각은 파일 오프셋 어드레스 공간 및 물리적 어드레스 공간 둘 다에서 일련의 인접한 어드레스들에 걸쳐 있다. 파일에 대한 세트 내 데이터 그룹들은 서로 간에 어떠한 특정한 물리적 어드레스 관계도 가질 필요가 없다. 데이터 그룹은 단일 메모리 블록에 인접 물리적 어드레스들로 프로그램되는, 파일에 대한 인접 오프셋 어드레스들을 가진 한 세트의 파일 데이터이다. 파일은 정규로는 다수의 데이터 그룹들로서 프로그램될 것이다. 데이터 그룹은 1바이트와 1 블록 사이에 임의의 길이를 가질 수 있다. 파일 인덱스 테이블(FIT)(205)은 오프셋 어드레스 순서로, 확인될 파일에 대한 유효 데이터 그룹들의 위치들의 기록을 제공한다. 파일에 대한 한 세트의 FIT 엔트리들은 FIT 기록으로서 알려지며, 디렉토리(203)에 엔트리에 의해 명시된다.
FIT(205)는 활성 파일 인덱스 블록(207) 및 하나 이상의 비활성 파일 인덱스 테이블 블록들(209)인 2개의 성분들을 갖는다. 직접 데이터 파일 디바이스 내 활성 파일들에 대한 FIT 기록들은 활성 파일 인덱스 블록(207)에 위치된다. 이하 기술되는 바와 같이, 이것은 디렉토리(203)에 의해 간접적으로 어드레스되며, 이것은 활성 파일들에 대해 디렉토리(203) 내 엔트리들을 업데이트할 필요없이 이들 파일에 대한 FIT 기록에 대해 수정들이 행해질 수 있게 한다. 비활성 파일들에 대해서, FIT 기록들은 비활성 파일 인덱스 블록들(209) 내 파일 디렉토리(203)에 의해 직접 어드레스된다. 어느 경우이든, FIT 기록들은 고유 FileID(201)에 의해 개별적으로 지정된 파일들을 구성하는 데이터 그룹들(211)의 위치를 지정한다. 각 데이터 그룹 은 교차참조 목적들을 위해, 일부인 파일의 fileID를 내포하는, 헤더로 프로그램될 수 있다. 파일의 FIT 기록은, 도 18의 213에 나타낸 바와 같이, 수정될 수 있는데 이를테면 파일의 데이터가 저장되는 블록을 리클레임한 후에 요구될 수 있다.
도 18의 다소 확대된 것이 도 19에 도시되었는데, 도 19에서 공통 성분들은 동일 참조부호로 표시되었다. 복수의 비활성 파일 인덱스 블록들(209)이 도시되었다. 비활성 FIT 프로그램 블록(209a)은 새로이 기입된 데이터 파일들의 새로운 FIT 기록들이 기입될 수 있는 소거된 메모리 페이지들을 갖는다. 일단 이 블록이 충만하게 되면, 비활성 파일 FIT 블록(209b)으로서 지정되며, 새로운 소거된 블록은 비활성 FIT 프로그램 블록으로서 지정된다. 파일 디렉토리(203)는 통상적으로, 시스템에서 유지되는 각각의 FileID에 대해서, 모든 FIT 블록들(207, 209a, 209b) 내 FIT 기록들을 가리킨다.
특정 파일의 FIT 기록들이 활성 파일 인덱스 블록(207)에 저장되는지 아니면 비활성 파일 인덱스 블록들(209)의 중 하나에 저장되는지 여부는 파일이 가까운 장래에 곧 수정될 것인지 아닌지 여부에 따른다. 그러하다면, FIT 기록들이 블록(207)에 유지되는 활성 파일인 것으로 간주되며, 그렇지 않다면, FIT 기록들이 블록들(209) 중 하나에 유지되는 비활성 파일인 것으로 간주된다. 메모리 시스템이 이에 "파일 오픈" 명령 및 "파일 클로즈" 명령을 보내는 호스트 시스템과 작동할 때, 메모리는 모든 열린 파일들을 활성인 것으로 간주하며 모든 닫힌 파일들을 비활성인 것으로 간주할 수 있다. 이들 명령들을 사용하여 호스트는 통상적으로 소정의 수, 이를테면 5를 초과하지 않는 열린 파일들의 수를 유지한다. 그러므로, 호스 트에 의해 이의 열린 파일들에 기입되는 데이터는 FIT 기록들이 블록(207)에 저장되게 하고, 닫힌 파일들에 대한 FIT 기록들은 블록들(209) 중 한 블록에 저장된다.
그러나, 어떤 호스트들은 파일 오픈 명령 및 파일 클로즈 명령을 메모리 시스템에 보내지 않는다. 이 경우, 메모리 시스템은 호스트가 파일에 데이터를 기입하는 것을 모니터링함으로써 가까운 장래에 파일이 수정될 것이 거의 확실한지를 판정한다. 호스트에 의해 기입된 새로운 데이터 그룹이 저장 블록의 처음과 끝의 중간 어딘가에서 끝나 있다면, 호스트는 적어도 당분간은 이 파일에 데이터 기입을 끝낸 것으로 거의 확실하게 간주될 수 있다. 그러나, 새로운 데이터 그룹이 저장 블록의 끝과 일치하여 끝나 있다면, 파일에 기입할 데이터를 더 갖고 있을 것으로 더 간주될 수 있다. 이 경우, 메모리 시스템은 데이터 그룹을 저장 블록의 끝과 일치하여 끝나 있을 것이라 거의 확실히 정의하며, 따라서 호스트가 파일에 대한 데이터 기입을 완료하였다는 표시는 아니다.
직접 데이터 파일 인터페이스 시스템에서 파일 디렉토리(203)는 시스템에 의해 지원되는 각 fielID에 대한 한 엔트리를 내포한다. 디렉토리는 디바이스에 의해 지원되는 순차적인 fileID 값들에 대응하는 한 세트의 인접 엔트리들로서 조직된다. 명시된 fileID에 대한 엔트리는 도 20에 도시된 바와 같이, 특정의 논리 페이지 내에 특정 엔트리 번호로서 직접 액세스될 수 있다. 어떠한 디렉터리 탐색도 명시된 fileID에 대한 엔트리를 찾을 것이 요구되지 않는다.
디렉토리 엔트리는 FIT 기록을 구성하는 FIT 엔트리들의 수와 함께, 파일에 대한 데이터에 대한 인덱싱 정보를 내포하는 FIT 기록의 위치를 명시한다. 이것이 각각 필드들(217, 219)에 의해 도 20에 도시되었다. 필드(217)의 내용들이 비활성 파일의 기록을 가리킨다면, 이것은 파일에 대한 FIT 기록이 저장되는 블록들(209) 중 한 블록 내 위치의 물리 어드레스를 내포한다. 그러나, 파일이 활성이라면, 필드(217)는 이하 설명되는 바와 같이, 파일에 대한 FIT 엔트리들이 업데이트 혹은 변경된 바와 동일한 상태에 있는 중간 위치를 가리키는 논리 어드레스를 내포한다.
디렉토리는 P 논리 페이지들을 포함하며, 각 페이지는 E 디렉토리 엔트리들을 포함한다. 그러므로 디렉토리는 P*E 파일들을 위한 용량을 갖는다. 디렉토리는 목적에 전용되는 하나 이상의 블록들에 저장된다. D 디렉토리 블록들이 존재한다면, 각각은 P/D 논리 페이지들을 내포하며 P/D*E 파일들을 위한 용량을 갖는다. 디렉토리 블록들은 이들이 내포하는 논리 페이지들의 범위들에 따라, DIRO 내지 DIR(D-1)로 지정된다. 디렉토리 블록들의 수는 디바이스 내에 동시에 존재하였던 최대 수의 파일들에 의해 결정된다. 디렉토리 블록은 할당될 fileID에 대한 엔트리를 현존의 블록들이 내포하지 않는다면 더해진다. 그러나, 디렉토리는 지원될 파일들의 수가 감소한다면 콤팩트될 수도 있다.
논리 페이지들이 업데이트되게 하는 디렉토리 블록들에 대해 이용될 수 있는 물리 구조의 예가 도 21에 도시되었다. 각각의 엔트리(이웃한 수직한 점선들 사이)는 fileID에 대한 FIT 기록의 명세, 혹은 이 fileID에 대한 파일이 존재하지 않음을 나타내는 눌 값을 내포한다. 파일에 대한 데이터를 내포하는 데이터 그룹들의 수가 FIT 기록에 허용되는 FIT 엔트리들의 최대 수를 초과할 때, 연속 FIT 기록이 사용될 수 있게, 파일에 대해 연속 fileID가 할당될 수 있다. 연속 fileID는 파일 에 할당된 주 fileID에 대해 디렉토리 엔트리 내에 명시된다. 디렉토리는 목적에 전용되는 하나 이상의 블록들에 위치된다. 디렉토리 블록들의 물리 위치는 제어 블록의 제어 로그 내 디렉토리 블록 리스트에 정의된다.
디렉토리 엔트리(225)의 예시가 도 21에 주어져 있다. 이것은 다음의 4개의 필드들을 갖는다.
1) FIT 논리 블록 #(227): 이 필드는 타겟 fileID에 대한 FID 기록이 위치된 FIT 논리 블록 번호를 확인한다. 대응하는 물리 블록 어드레스는 디렉토리 블록 내 FIT 블록 포인터들 중 한 포인터에 의해 정의되고, 예로서의 물리 포인터(229)가 도 21에 도시되었다. 필드(227)는 FIT 블록 포인터들 중 한 포인터를 가리킨다. FIT 논리 블록 N이 활성 파일 인덱스 블록을 위해 유보된다. FIT 논리 블록 번호에 대한 0의 값은 파일이 디바이스에 존재하지 않음을 의미한다.
2) FIT 논리 페이지 #(231): 이 필드는 활성 파일 인덱스 블록(207) 혹은 비활성 FIT 블록(209)(도 19)에 논리 페이지 번호를 확인하며, 이 블록 내에는 타겟 fileID에 대한 FIT 기록이 위치되어 있다. FIT 기록이 활성 파일 인덱스 블록(207)(도 19)에 저장된 경우, 이것은 기록이 위치된 페이지에 대한 간접 어드레스이다. 비활성 FIT 프로그램 블록(209a) 혹은 비활성 FIT 블록들(209b)의 경우에, 이것은 페이지에 대한 직접 물리 어드레스이다.
3) FIT 페이지 엔트리 #(233): 이 필드는 페이지 내 순차적 엔트리 번호를 확인하며, 이 번호에서 타겟 fileID에 대한 FIT 기록이 시작한다.
4) # FIT 엔트리들(235): 이 필드 내 선두 비트가 0일 때, 필드는 타겟 fileID에 대한 FIT 기록 내 FIT 엔트리들의 수를 명시한다. 이 필드 내 선두 비트가 1일 때, 타겟 fielID에 대한 FIT 엔트리들의 수는 FIT 기록에 허용되는 최대 수의 FIT 엔트리들을 초과한다. 이 경우에, 필드는 파일에 대해 사용될 연속 fileID를 명시한다. 연속 fileID에 대한 디렉토리 엔트리에서, 이 필드는 타겟 및 연속 fileID들에 둘 다에 대해 FIT 기록들 내에 총 FIT 엔트리들의 수를 명시한다.
도 21의 FIT 블록 포인터들 -예는 포인터(229)이다- 은 디바이스에 존재하는 FIT 논리 블록들 각각을 명시한다. 이들은 디렉토리 블록 내 마지막 프로그램된 페이지에서만 유효하다. FIT 블록 포인터는 디바이스 내 존재할 수 있는 각각의 FIT 논리 블록 #에 대해 존재한다. 다음 3개의 필드들은 FIT 블록 포인터에 존재한다.
1) FIT 블록 어드레스(237): 이 필드는 디렉토리 엔트리(225)의 필드(227)의 FIT 논리 블록 #에 현재 할당된 물리 블록 어드레스를 명시한다.
2) # 유효 FIT 기록들(239): 이 필드는 FIT 논리 블록에 존재하는 유효 파일들의 수를 명시한다.
3) # 무용 FIT 엔트리들(241): 이 필드는 FIT 논리 블록에 존재하는 무용 FIT 엔트리들의 수를 명시한다.
디렉토리 논리 페이지 포인터들(243)(도 21)은 디렉토리 블록에 대한 논리-물리 페이지 맵으로서 작용한다. 한 포인터는 블록 내 각 논리 페이지마다 존재하며, 논리 페이지에 대해 현재 물리 페이지 어드레스를 명시한다. 디렉토리 페이지 포인터 엔트리들은 디렉토리 블록 내 가장 최근에 프로그램된 물리 페이지에서만 유효하다.
디렉토리는 논리 페이지의 단위들로 업데이트될 수 있다. 논리 페이지 내 임의의 수의 엔트리들은 단일 프로그래밍 작동으로 업데이트될 수 있다. 페이지가 독출될 수 있고, 하나 이상의 엔트리들이 업데이트될 수 있으며, 페이지는 디렉토리 블록 내 다음 가용한 소거된 페이지에 재프로그램될 수 있다. 디렉토리 페이지 포인터들 및 FIT 블록 포인터들은 모든 필드들에 대한 현재 값들을 명시하기 위해서, 동시에 재프로그램될 수 있다.
디렉토리 블록에 마지막 페이지가 프로그램되었을 때, 블록은 콤팩트되어, 소거된 블록에 재기입되며, 이것은 새로운 디렉토리 블록이 된다. 콤팩트는 디렉토리 페이지 포인터들에 의해 정의된 바와 같이, 모든 유효한 페이지들을 무용 디렉토리 블록의 소거 전에, 소거된 블록에 카피함으로써 수행된다.
파일 디렉토리가 가리키는 파일 인덱스 테이블(FIT)은 한 스트링의 FIT 엔트리들을 포함하며, 여기서 각각의 FIT 엔트리는 파일 오프셋 어드레스 및 데이터 그룹의 플래시 메모리 내 물리 위치를 확인한다. 바람직하게 FIT는 디바이스에 저장된 파일들에 대해 모든 유효한 데이터 그룹들에 대한 엔트리들을 내포한다. 무용 데이터 그룹들은 FIT에 의해 인덱스될 필요는 없다. 파일 내 데이터 그룹들에 대한 한 세트의 FIT 엔트리들은 파일 오프셋 어드레스 순서로, 연속한 엔트리들로서 유지된다. 한 세트의 엔트리들은 FIT 기록으로서 알려진다. FIT는 활성 파일들에 대한 인덱스 블록과 함께 한 세트의 FIT 블록들에 유지된다. FIT 블록들의 수는 디바이스 내 데이터 그룹들의 수에 따라, 가변할 것이다. 새로운 FIT 블록들이 생성될 것이며 FIT 블록들은 디바이스의 작동 동안 소거될 것이다.
FIT의 논리 구조의 예가 도 22에 주어져 있다. 특정 파일의 FIT 기록(247)에는 FIT 블록 어드레스(237) 및 파일에 대한 디렉토리 엔트리의 FIT 논리 페이지 #231(도 21)에 의해 도달된다. 개개의 FIT 기록들은 파일 내 데이터 그룹들에 대한 한 세트의 인접한 FIT 엔트리들을 포함한다. 이 세트 내 엔트리들은 바람직하게는 연속하며 파일 오프셋 어드레스의 순서이다.
파일의 각각의 FIT 기록은 바람직하게는 FIT 기록의 제1 엔트리로서 FIT 헤더(249)(도 22)를 포함한다. FIT 헤더는 정수 개의 FIT 엔트리들과 동일한 고정된 길이를 갖는다. FIT 헤더는 다음과 같이 3개의 필드들을 갖는다.
1) FiIeID: fileID는 디렉토리 내 파일에 대한 엔트리를 확인한다.
2) 프로그램 블록: 파일에 대한 프로그램 블록의 현 물리 위치는 FIT 기록의 업데이트된 버전이 FIT에 기입될 때마다 FIT 헤더에 기록된다. 이것은 파일이 호스트에 의해 다시 열릴 때, 파일에 대한 프로그램 블록을 찾는데 사용된다. 이것은 또한, 프로그램 블록 통합을 위해 선택되었던 것인 파일에 대한 프로그램 블록과 FIT 기록간에 대응을 유효화하는데 사용될 수도 있다.
3) 프로그램 포인터: 파일에 대한 프로그램 블록 내 프로그램 포인터의 현재 값은 FIT 기록의 업데이트된 버전이 FIT에 기입될 때마다 FIT에 기록된다. 이것은 파일이 호스트에 의해 다시 열릴 때, 혹은 프로그램 블록이 프로그램 블록 통합을 위해 선택되었을 때, 파일에 대한 프로그램 블록 내 데이터를 프로그래밍하기 위한 위치를 정의하는데 사용된다.
파일의 FIT 기록은 통상적으로 파일을 구성하는 데이터 그룹들의 물리 위치 를 명시하는 다수의 추가의 엔트리들을 갖는다. 특히, 예로서의 파일에 대한 한 FIT 엔트리(251)가 도 22에 도시되었다. 개개의 FIT 엔트리는 다음과 같이 4개의 필드들을 갖는다.
1) 오프셋 어드레스: 오프셋 어드레스는 데이터 그룹의 제1 바이트에 관계된 파일 내, 바이트들로의 오프셋이다.
2) 길이: 이것은 데이터 그룹 내 파일 데이터의, 바이트들로의 길이이다. 완전한 데이터 그룹의 길이는 데이터 그룹 헤더의 길이에 의해 이 값보다 길다.
3) 포인터: 이것은 데이터 그룹의 시작의 플래시 블록 내 위치에의 포인터이다. 포인터는 다음의 2개의 하위-필드들로서, (1) 데이터 그룹을 내포하는 물리 블록을 정의하는 블록 어드레스, 및 (2) 데이터 그룹의 시작의 블록 내 바이트 오프셋을 정의하는 바이트 어드레스를 갖는다. 이 어드레스는 데이터 그룹 헤더를 내포한다.
4) EOF 플래그: 데이터 파일의 끝에 있는 데이터 그룹을 확인하는 단일 비트이다.
도 23은 활성 파일 인덱스 블록(207)(도 18 및 도 19)의 물리 포맷을 도시한 것이다. 활성 파일들의 FIT 기록들에 대한 업데이트들은 활성 파일들에 전용되는 인덱스 블록 내에서 행해진다. 하나 이상의 엔트리들의 단일 FIT 기록만이 블록의 페이지당 저장되며, FIT 기록들이 활성 파일 인덱스 블록에서 쉽게 업데이트될 수 있게, 논리 FIT 기록들의 간접 어드레싱이 채용된다. 논리 FIT 기록이 업데이트될 때, 이의 전체가 다음 가용한 소거된 페이지에 재기입되며, 이 가장 최근에 프로그 램된 페이지 내 한 세트의 FIT 페이지 포인터들은 논리 페이지를 물리 페이지로의 맵핑을 제공한다. 시스템에 각각의 동시에 활성인 파일에 대해 한 논리 FIT 기록이 존재한다.
위에 기술된 바와 같이, 파일에 대한 파일 디렉토리 엔트리에 FIT 논리 페이지 #231(도 21)은, 디렉토리 엔트리 내 대응 FIT 논리 블록 #(227)이 활성 파일 인덱스 블록에 관계될 때, 논리 FIT 기록을 명시한다. 논리 FIT 기록은 파일에 대한 파일 디렉토리 엔트리를 업데이트할 필요없이, 업데이트되어 활성 파일 인덱스 블록에 재기입될 수 있다. FIT 논리 페이지 #(231)는 FIT 기록을 위한 간접 어드레스이며, 업데이트된 FIT 기록을 내포하는 페이지의 부분으로서 업데이트되어 재기입되는 한 세트의 FIT 논리 페이지 포인터들(255) 중 한 포인터에 의해 물리 페이지에 맵핑된다.
활성 파일 인덱스 블록(207) 내 가장 최근에 프로그램된 페이지 내의 한 세트의 FIT 페이지 포인터들(255)(도 23)은 논리 FIT 기록들의 유효한 버전들이 위치하여 있는 물리 페이지들을 명시한다. FIT 페이지 포인터에 대한 눌 값은 활성 파일 인덱스 블록 내 FIT 논리 페이지 #이 할당되지 않았음을 의미한다. 디바이스에 동시에 존재할 수 있는 각 활성 파일마다 하나의 FIT 페이지 포인터 필드가 존재한다.
활성 파일 인덱스 블록 내 마지막 페이지가 프로그램되었을 때, 블록은 콤팩트되고 소거된 블록에 재기입되며, 이것은 새로운 활성 파일 인덱스 블록이 된다. 콤팩트는 FIT 페이지 포인터들에 의해 정의된 바와 같이, 모든 유효한 페이지들을 무용 활성 파일 프로그램 블록의 소거 전에, 소거된 블록에 카피함으로써 수행된다.
활성 파일이, 닫혀짐에 의해서 혹은 다른 것에 의해 비활성이 되었을 때, 이의 FIT 기록은 이하 기술되는 비활성 FIT 프로그램 블록에 카피되고, 활성 FIT 블록 내 FIT 기록의 데이터는 무용이 된다.
비활성 FIT 블록들은 현재 활성인 파일들에 대한 것 외에, 메모리 시스템에 저장된 모든 데이터 파일들에 대한 FIT 기록들의 저장을 제공한다. 단일 FIT 프로그램 블록은 FIT 블록들에 FIT 기록들을 프로그래밍하기 위한 수단을 제공한다. 도 24를 참조하면, 비활성 파일 FIT 프로그램 블록(209a)(도 19)의 상세들이 주어져 있다. 비활성 FIT 프로그램 블록 내 모든 페이지들이 프로그램되었을 때, 비활성 FIT 블록(209b)이 되며, 소거된 블록은 새로운 비활성 FIT 프로그램 블록으로서 할당된다.
도 24에 도시된 바와 같이, 비활성 FIT 프로그램 블록 내 각 FIT 기록은 디렉토리로부터 직접 어드레스된다. 디렉토리 엔트리 내 FIT 논리 페이지 #(231)(도 21)는 비활성 FIT 프로그램 블록 내 물리 페이지를 직접 가리키며, 디렉토리 엔트리 내 FIT 페이지 엔트리 #(233)는 FIT 기록의 시작을 확인한다. 복수의 FIT 기록들은 비활성 FIT 프로그램 블록 내 단일 페이지에 저장될 수 있다.
바람직하게, 도 24의 비활성 FIT 프로그램 블록 내 페이지 내 모든 FIT 기록들이 도 20에 도시된 바와 같이 디렉토리의 동일 논리 페이지 내에 디렉토리 엔트리들을 가질 것이 요구된다. 이것은 비활성 FIT 프로그램 블록 페이지 내 모든 FIT 기록들에 대한 디렉토리 엔트리들이 디렉토리 블록 내 단일 프로그램 작동으로 업데이트될 수 있게 한다.
파일이, 열림에 의해서 혹은 다른 것에 의해 활성이 되거나, 이에 대한 FIT 기록이 활성 파일 인덱스 블록에 생성되거나, 혹은 파일이 삭제되었을 때, 이에 대해 비활성 FIT 프로그램 블록에 존재할 수 있는 어떠한 FIT 기록도 무용이 된다.
비활성 FIT 블록(209b)(도 19)은 도 24의 비활성 FIT 프로그램 블록의 마지막 페이지가 프로그램되었을 때 생성된다.
도 25는 FIT 기록들에 대한 작동들의 예를 도시한 것이다. 한 이러한 작동(261)은 데이터가 활성 파일에 기입되게 한다. 파일 데이터를 프로그래밍하기 위한 알고리즘은 데이터가 활성 파일에 기입되고 있을 때 수시로 FIT에 대해 업데이트들이 행해질 것을 요구한다. 기입되는 파일에 대한 업데이트된 FIT 기록은 활성 파일 인덱스 블록(207)에 프로그램된다. 파일에 대한 디렉토리 엔트리는, 도 23에 도시되고 위에 기술된 바와 같이, 활성 파일 인덱스 블록에 논리 FIT 기록들에 대해 간접 어드레싱 방법이 사용되기 때문에, 업데이트될 필요가 없다.
도 25에 기능(263)으로서 도시된 것으로, 현존 비활성 데이터 파일 혹은 새로운 데이터 파일이 열리거나 다른 것으로 활성이 되었을 때, 논리 FIT 기록은 이에 대한 포인터를 블록 내 FIT 페이지 포인터 필드에 기입함으로써, 활성 파일 인덱스 블록(207)에 할당된다(도 23 참조). 파일이 현존의 파일이라면, 이의 FIT 기록은 FIT 블록(209b) 혹은 FIT 프로그램 블록(209a) 내 그의 현존 위치로부터 활성 파일 인덱스 블록(207)으로 이동된다. FIT 페이지 포인터 필드 및 FIT 기록은 활성 파일 인덱스 블록(207)에 단일 페이지 프로그램 작동으로 기입될 수 있다. 열린 혹은 다른 것으로 활성이 된 파일에 대해 디렉토리 엔트리를 업데이트하기 위해서, 단일 페이지만이 디렉토리에서 업데이트될 필요가 있다.
데이터 파일을 닫는 것이 도 25의 265에 나타나 있다. 활성 파일이 닫힘에 의해서 혹은 다른 것에 의해 비활성이 되었을 때, 이의 FIT 기록은 활성 파일 인덱스 블록(207)에서 FIT 프로그램 블록(209a)으로 이동된다. 이러한 FIT 기록을 내포하는 페이지가 FIT 프로그램 블록(209a)에 프로그램되고 있을 때, 동일 디렉토리 페이지에 관계된 가능한 한 많은 FIT 기록들은 FIT 블록들로부터 FIT 프로그램 블록(209a)의 동일 페이지에 이동되는 것이 바람직하다. 이것은 무용 FIT 엔트리들을 내포하는 FIT 블록들에 대한 가비지 수거 메커니즘을 제공한다. 이러한 FIT 기록들을 이동하기 위한 소스 FIT 블록들은 이들이 이미 내포하는 무용 FIT 엔트리들의 수에 따라 선택되어야 한다. 가장 큰 우선도는 가장 많은 수의 무용 FIT 엔트리들을 가진 FIT 블록들에 주어진다. FIT 기록들은 기정의된 수의 무용 FIT 엔트리들 미만을 내포하는 FIT 블록들로부터는 이동되지 않는 것이 바람직하다.
FIT 블록 내 무용 FIT 엔트리들의 수는 마지막 프로그램된 디렉토리 페이지 내 FIT 블록 포인터들 필드에 정의된다. 디렉토리 페이지는, 이동된 FIT 기록들에 대한 엔트리들을 업데이트하고 FIT 블록 포인터들 및 디렉토리 페이지 포인터 필드들 내 파라미터들을 업데이트하게 프로그램되어야 한다. 활성 파일 인덱스 블록 페이지는 블록으로부터 이동된 논리 FIT 기록에 대한 FIT 페이지 포인터들에 눌 엔트리를 삽입하게 프로그램되어야 한다.
가비지 수거 작동(267)(도 25)은 FIT 블록의 가비지 수거에, 혹은 데이터 파일이나 데이터 블록의 가비지 수거에 관계될 수 있다. 먼저, FIT 블록들(209b) 중 한 블록의 가비지 수거가 논의된다. FIT 블록들에 대한 소거 작동들은 무용 FIT 엔트리들에 의해 점유되는 용량을 복구하기 위해서 수시로 요구된다. 모든 유효한 FIT 기록들은 FIT 블록의 소거에 앞서 FIT 블록(209b)에서 FIT 프로그램 블록(209a)으로 이동된다. 파일을 비활성이 되게 하는 위에 기술된 프로세스는 모든 유효한 FIT 기록들이 이동될 기회를 주지 않을 수 있다. 그러므로 소거될 FIT 블록으로부터 모든 유효한 FIT 기록들을 이동시키기 위해 FIT 가비지 수거 프로세스를 수행하는 것이 요망된다.
가장 많은 수의 무용 FIT 엔트리들을 가진 FIT 블록은 FIT 가비지 수거 블록으로서 지정되는 것이 바람직하고, FIT 가비지 수거 작동들은 모든 유효한 FIT 기록들이 이동될 때까지 이 블록에서 수행되어야 한다. 또 다른 FIT 블록은 FIT 가비지 수거 블록으로서 지정된다. FIT 프로그램 블록으로 이동할 FIT 가비지 수거 블록의 페이지가 선택되고, 페이지는 동일 디렉토리 페이지 -입수될 수 있다면- 에 관계된 FIT 가비지 수거 블록으로부터의 다른 FIT 기록들로 채워진다. 프로그램될 공간이 페이지에 남아있다면, 다른 FIT 블록들로부터의 FIT 기록들로 더 채워질 수 있다. 선택된 페이지에 이동될 다른 FIT 기록들의 선택은 관계된 디렉토리 페이지 내 엔트리들에 기초하여 행해져야 한다.
바람직하게 디렉토리 페이지는, 이동된 FIT 기록들에 대한 엔트리들을 업데이트하고 FIT 블록 포인트들 및 디렉토리 페이지 포인터 필드들 내 파라미터들을 업데이트하게 프로그램된다. FIT 가비지 수거 작동들은 바람직하게는 데이터 가비지 수거 작동들과 동일한 시간에, 주기적으로 행해지게 스케쥴된다. FIT 가비지 수거를 위한 한 페이지 프로그램 작동은 데이터 가비지 수거를 위한 모든 N 페이지 프로그램 작동들에 대해 수행된다.
데이터 파일 혹은 데이터 블록의 가비지 수거(267)가 이제 기술될 것이다. 데이터 가비지 수거 작동은, 닫혀진 아니면 비활성화된 파일에 대한 FIT 기록을 업데이트할 필요성을 초래할 수 있다. 이것은 요구된 업데이트를 포함하여, FIT 블록으로부터 FIT 프로그램 블록으로 FIT 기록을 이동시킴으로써 달성된다. FIT 프로그램 블록에 프로그램되는 페이지는 바람직하게는 동일 디렉토리 페이지에 관계된 다른 FIT 기록들로 채워진다.
제2 특정 파일 인덱싱
실시예
데이터는 fileID에 의해 확인된 파일 객체들에 직접 데이터 파일 메모리 시스템에 기입되며 파일은 파일 객체 내 논리 오프셋 어드레스에 의해 어드레스된다. 데이터는 각각이 인접한 논리적 오프셋 어드레스들 및 인접한 물리적 위치들과 함께 한 세트의 데이터 그룹들로서 저장된다. 파일 인덱싱은 fileID 및 논리 오프셋 어드레스를 데이터 그룹들의 위치들에 상관시킨다.
디렉토리는 파일 객체들에 대한 인덱스 엔트리들의 파일 인덱스 테이블(FIT) 내 위치들을 직접 정의한다. 정상적으로는 직접 인덱싱이 사용되지만, 파일 디렉토리를 수정해야 하는 결과적인 필요성이 없이, 어떤 파일들에 대한 인덱싱 엔트리들 이 빈번하게 수정될 수 있게 하기 위해서 간접 인덱싱 방법도 사용된다. 또한, 파일 인덱싱은 파일 데이터로부터 별도로 파일 속성 정보의 저장을 지원한다.
DFS 디바이스 내 파일은 단일 논리적 신원을 갖는 데이터 객체이다. 파일은 수치적인 fileID에 의해 확인되며, 파일 내 데이터는 오프셋 어드레스에 의해 확인된다.
filelD 값은 파일 객체를 생성하기 위해 호스트로부터의 명령에 응하여 DFS 디바이스에 의해 할당된다. 파일 인덱싱은 각 파일 객체 내의 데이터 및 각 파일 객체에 대한 속성들의 물리적 위치를 추적하기 위해 DFS 시스템에 의해 수행된다.
파일 인덱싱의 계층이 도 26에 도시되었다. 파일에 대한 디렉토리 엔트리는 고유 FileID 및 메모리 내 다른 어드레스들에의 2개의 포인터들인 3개의 주요 필드들을 포함한다. 포인터 1은 FIT 내 이 FileID을 가진 파일에 대한 FIT 기록을 가리키며, 포인터 2는 파일에 대한 파일 속성 기록(ATR)을 가리킨다. 디렉토리, FIT, 및 ATR은 플래시 메모리 내 별도의 다수 세트들의 블록들에 저장되는 것이 바람직하다.
디렉토리는 디바이스에 존재하는 각 파일 객체에 대해 하나의 엔트리를 내포한다. 엔트리들은 fileID 값들의 서로 중첩되지 않는 범위들에 저장되며 각 범위는 별도의 페이지에 할당된다. 범위 내 엔트리들은 fileID 값에 따라 순서가 매겨진다. 타겟 filedID에 대한 디렉토리 엔트리는 단일 페이지를 독출하고 페이지 내에서 바이너리 탐색을 수행함으로써 발견될 수 있다.
파일 인덱스 테이블(FIT)은 이것이 점유하는 공간을 최소화하기 위해서 디렉 토리 내 엔트리들에 의해 직접 어드레스된다. 이것은 각각이 파일 객체를 기술하고 페이지들로 조직되는 일단의 기록들을 포함한다. FIT 내 한 페이지의 기록들은 동일한 혹은 다른 FIT 블록 내 프로그램되지 않은 위치로 페이지를 이동시키는 독출/수정/기입 작동에 의해 업데이트된다. FIT 내 페이지에 기록들은 모두가 디렉토리 내 동일 페이지의 엔트리들에 관계되며, 따라서 FIT 페이지는 단일 디렉토리 페이지만의 수정을 위한 결과적인 필요성에 따라 업데이트될 수 있다.
별도의 임시 파일 인덱스 테이블(TFIT) 블록은 가까운 장래에 수정이 될 FIT 기록들을 저장하는데 사용된다. 파일 객체들에 대한 기록들은 TFIT 내 논리 페이지들에 저장되며 디렉토리 엔트리들에 의해 간접적으로 어드레스된다. TFIT에 기록은 디렉토리를 업데이트할 필요성 없이 수정될 수 있다.
fileID에 의해 확인된 파일 객체들에 대한 파일 속성 기록들(ATR)이 저장된다. 속성 기록들의 내용들은 호스트 시스템에 의해 정의되며, 메모리 시스템에 위해 해석되지 않는다. 일반적으로, 호스트는 메모리 시스템과 함께 호스트의 작동에 중요하거나 유용할 것으로 간주되는 파일 객체들의 어떤 속성들이든 ATR들에 저장할 수 있게 된다. 파일 속성들에 대한 인덱싱 방법은 파일 인덱스 테이블에 대해 사용되는 것과 동일하다.
직접 데이터 파일 메모리 시스템에 사용되는 한 세트의 파일 인덱싱 구조들이 도 27에 도시되었다. 파일 디렉토리 DIR은 fileID에 의해 확인된 파일 객체를 기술하는 일단의 엔트리들을 포함한다. 메모리 시스템에 존재하는 각 파일 객체마다 하나의 엔트리가 DIR에 존재한다. DIR은 하나 이상의 전용의 DIR 블록들에 내포 된다.
각각의 DIR 블록은 고정된 수의 논리 페이지들을 내포하며, 이들 페이지들의 각각은 다음 가용한 물리 페이지에 재기입함으로써 업데이트될 수 있다. 유효한 DIR 엔트리들을 내포하는 페이지에는 논리 페이지 번호가 할당된다. DIR 블록 내 논리 페이지들의 수는 블록 내 물리 페이지들의 수의 25%인 것으로 명시된다.
DIR 블록의 마지막 페이지가 기입된 후에, 블록은 모든 유효한 페이지들을 소거된 블록에 기입하고 원 DIR 블록을 소거함으로써 콤팩트된다.
DIR 페이지는 한 세트의 DIR 엔트리들을 이들의 fileID 값들의 순서로 내포한다. 유효한 DIR 엔트리들은 DIR 페이지 내 인접한 한 세트의 엔트리 위치들을 점유하나, 완전한 페이지를 채울 필요는 없다. 세트 내에는 어떠한 무용 엔트리들도 없으며, fileID 값들은 인접할 필요가 없다. DIR 페이지 내 fileID 값들의 범위는 임의의 다른 DIR 페이지 내 fileID 값들의 범위와 겹치지 않는다.
새로운 파일에 대한 엔트리가 삽입될 필요가 있을 때, 새로운 블록에 대한 fileID 값을 포함하는 fileID 범위를 가진 DIR 페이지는 DIR 인덱스 내 정보로부터 확인된다. 새로운 엔트리는 fileID 범위 내 적합한 위치에 삽입되고 DIR 페이지는 재기입된다. 엔트리가 제거되어야 할 때, DIR 페이지는 엔트리 없이 콤팩트되고 재기입된다.
충만하게 된 DIR 페이지에 추가가 행해져야 할 때, 빈 논리 페이지가 새로운 DIR 페이지로서 할당되고 충만하게 된 DIR 페이지의 fileID 범위는 2개의 근사적으로 동일한 서로 겹치지 않는 범위들로 분할되며, 이들은 2개의 가용한 DIR 페이지 들에 기입된다.
이웃한 fileID 범위들을 가진 2개의 DIR 페이지들 내 유효한 엔트리들의 총 수가 DIR 페이지 내 엔트리 위치들의 수의 70% 미만으로 떨어질 때, 2개의 DIR 페이지들의 범위들은 통합되고 2개의 DIR 페이지들 중 한 페이지에 기입된다. 다른 미사용된 페이지는 자유 논리 페이지가 된다.
도 27의 DIR 블록의 DIR 엔트리는 3개의 필드들을 내포한다.
1) FileID
2) FIT 기록에의 포인터. 포인터는 FIT 페이지 논리 식별자 및 FIT 기록의 바이트 오프셋을 정의한다. FIT 페이지 논리 식별자는 특정 예에서, 동일 DIR 페이지 내 엔트리들에 의해 참조될 수 있는 16까지의 별도의 FIT 페이지들 중 한 페이지를 확인한다. 이것은 엔트리를 내포하는 DIR 페이지 내 FIT 인덱스 필드에 의해 물리 블록 어드레스 및 페이지 번호로 변환된다. 바이트 오프셋은 확인된 FIT 페이지 내 FIT 기록의 위치를 확인한다. 대안적으로 포인터는 TFIT를 가리킬 수도 있다. 포인터 내 유보된 비트는 FIT 기록이 TFIT에 있고 포인터가 TFIT에서 논리 페이지를 정의함을 의미하게 설정된다.
3) 파일 속성 기록에의 포인터. 포인터는 ATR 페이지 논리 식별자 및 ATR 기록의 바이트 오프셋을 정의한다. ATR 페이지 논리 식별자는 특정 예에서, DIR 페이지 내 엔트리들에 의해 참조될 수 있는 16개까지의 개별 ATR 페이지들 중 한 페이지를 확인한다. 이것은 엔트리를 내포하는 DIR 페이지 내 FIT 인덱스 필드에 의해 물리 블록 어드레스 및 페이지 번호로 변환된다. 바이트 오프셋은 확인된 ATR 페이 지 내 ATR 기록의 위치를 확인한다.
별도의 유효한 FIT 인덱스 필드는 각각의 유효한 DIR 페이지에 존재한다. 이것은 FIT 페이지들에 대한 논리 식별자들을 FIT 페이지들이 위치하여 있는 물리 블록 어드레스들 및 페이지 번호들로 변환하는데 사용된다. 이것은 FIT 기록을 가리키기 위해 페이지 내 임의의 엔트리 내에서 사용되는 각 논리 식별자에 대한 한 엔트리를 내포한다.
유효한 DIR 인덱스 필드는 가장 최근에 기입된 DIR 페이지에만 존재한다. 모든 이전에 기입된 DIR 페이지들 내 필드 내 정보는 무용된다. 이의 목적은 DIR 엔트리들의 순서화 및 논리 페이지들을 물리 페이지들로의 맵핑을 지원하는 것이다.
DIR 인덱스는 논리 페이지 번호에 따라 순서가 매겨진, 각각의 가능한 논리 페이지에 대한 엔트리를 내포한다. 각 엔트리는 3개의 필드들을 갖는다.
1. 논리 페이지를 위한 할당 상태 플래그.
2. 페이지 내 제1 엔트리에 관계된 FiIeID. 이것은 각 DIR 페이지 내 fileID 값들의 범위가 설정되고 캐시되게 한다.
3. 논리 페이지가 맵핑되는 DIR 내 물리 페이지에의 포인터.
도 27의 FIT는 일단의 기록들을 포함하며, 그 각각은 fileID에 의해 확인되는 파일 객체에 대한 제어 데이터 및 파일 데이터 인덱싱 정보를 내포한다. 한 엔트리는 디바이스에 존재하는 각 파일 객체에 대한 FIT에 혹은 TFIT에 존재한다. 대부분의 파일 객체들에 대한 FIT 기록들은 FIT에 저장되며, TFIT는 가까운 장래에 수정될 높은 가능성을 갖는 파일 객체들만에 대해 FIT 기록을 내포한다.
FIT 내 FIT 기록들은 DIR 엔트리들에 의해 직접 어드레스되고, DIR 페이지는 FIT 페이지가 수정될 때 수정되어야 한다.
FIT는 하나 이상의 전용 FIT 블록들에 내포된다. 단지 하나의 FIT 블록만이 FIT 기록들이 기입될 수 있는 프로그램되지 않은 페이지들을 내포한다. 모든 FIT 기록 정보는 이 블록 내 다음 프로그램되지 않은 페이지 위치에 프로그램되고, 이것은 FIT 기입 포인터에 의해 확인된다. 블록 내 마지막 페이지가 프로그램되었을 때, FIT 기입 포인터는 소거된 블록의 제1 페이지로 이동된다. FIT 블록들은 재기입된 FIT 페이지들에 기인한 무용 페이지들, 및 제거된 DIR 엔트리들로부터 비롯되는 유효 FIT 페이지 내 무용 FIT 기록들을 내포할 수 있다. 무용 용량은 FIT 블록들로부터 리클레임될 수 있다.
FIT 페이지는 DIR 페이지 내 엔트리들과 동일한 순서로, 동일 DIR 페이지 내 DIR 엔트리들에 의해 참조되는 한 세트의 FIT 기록들을 내포한다. DIR 페이지는 복수의 FIT 페이지들을 참조할 수 있다. 그러므로, FIT 페이지의 수정은 단일 DIR 페이지만의 수정에 대한 결과적인 필요성에 의해 행해질 수 있다. FIT 페이지는 페이지를 독출하고, 이어서 하나 이상의 FIT 기록들을 업데이트 혹은 추가함으로써 수정될 수 있다. 임의의 무용 FIT 기록들은 페이지를 콤팩트화함으로써 제거되고, 이어서 페이지는 FIT 기입 포인터에 의해 확인된 위치에서 프로그램된다.
FIT 페이지 헤더는 FIT 페이지가 연관된 DIR 페이지에의 참조, 및 FIT 페이지 내 FIT 기록 정보의 길이를 저장한다. 또한, FIT 페이지 헤더는 FIT 페이지가 기입되었을 때에 FIT 블록들 각각에 존재하는 무용 페이지들의 수의 기록을 저장할 수 있다. 이 정보는 통상적으로 가장 최근에 기입된 FIT 페이지 헤더에서만 유효할 것이다.
도 27의 FIT 블록의 FIT 기록은 다음의 필드들을 내포한다.
1) FiIeID.
2) File 상태. 위에 참조된 미국특허 출원번호 11/382,224에 기술된 바와 같이, 이것은 0-9의 숫자이며, 각 상태는 파일의 데이터를 내포하는 것이 허용된 물리 블록들의 유형들의 고유한 기정의된 조합을 나타낸다. 통상적으로, 파일의 상태가 변경되었을 때, FIT 기록을 업데이트하는 것은 이 파일의 하나 이상의 데이터 그룹들이 변경되었기 때문에 필요하다.
3) 파일에 대한 활성 블록의 어드레스.
4) 파일 내 데이터 그룹들의 수
5) a) 파일 내 바이트들로의 논리 오프셋,
b) 바이트들로의 길이,
c) 물리 위치에의 포인터를 포함하는, 파일 내 각 데이터 그룹에 대한 한 필드.
도 27의 TFIT 블록은 임시인 FIT 기록들, 즉 가까운 장래에 수정될 높은 가능성을 갖는 FIT 기록들을 저장하는데 사용된다. 제1 실시예에 관하여 논의된 바와 같이, 이것은 예를 들면 파일 오픈 및 클로즈 명령들을 이용하는 시스템들에서 열린 파일들을 포함할 수 있다. TFIT 내 FIT 기록들은 DIR 엔트리들에 의해 간접적으로 어드레스되며, TFIT 엔트리는 DIR을 업데이트할 필요성 없이 수정될 수 있다.
TFIT는 고정된 수의 논리 페이지들을 내포하는 단일의 전용 TFIT 블록에 내포되고, 각각의 논리 페이지는 이것은 다음 가용한 물리 페이지에 재기입함으로써 업데이트될 수 있다. 유효 TFIT 엔트리를 내포하는 페이지에는 논리 페이지 번호가 할당된다. TFIT 블록 내 논리 페이지들의 수는 블록 내 물리 페이지들의 수의 25%인 것으로서 명시된다.
TFIT 블록의 마지막 페이지가 기입된 후에, 블록은 모든 유효한 페이지들을 소거된 블록에 기입하고 원 TFIT 블록을 소거함으로써 콤팩트화된다. FIT 기록은 FIT 및 TFIT 둘 다에 동시에 존재하지 않는다.
TFIT 페이지는 하나의 FIT 기록만을 내포한다. TFIT 내 FIT 기록은 FIT 블록에 대해 위에 기술된 것과 동일할 수 있다. 유효 TFIT 인덱스 필드는 가장 최근에 기입된 TFIT 페이지에만 존재한다. 모든 이전에 기입된 TFIT 페이지들 내 필드 내 정보는 무용된다. 이의 목적은 논리 페이지들을 물리 페이지들에 맵핑하는 것이다. TFIT 인덱스는 논리 페이지 번호에 따라 순서가 매겨진, 각 가능한 논리 페이지에 대한 엔트리를 내포한다. 각 엔트리는 두 개의 필드들을 갖는다.
1. 논리 페이지에 대한 할당 상태 플래그.
2. 논리 페이지가 맵핑되는 TFIT 내 물리 페이지에의 포인터.
도 27의 ATTR 블록은 일단의 기록들이며, 그 각각은 fielID에 의해 확인되는 파일 객체에 대한 속성들을 내포한다. 속성 기록들의 내용들은 호스트 시스템에 의해 정의되며, 메모리 시스템에 의해 해석되지 않는다. 한 엔트리는 속성들이 호스트에 의해 기입된 각 파일 객체에 대해 ATR에 존재한다. ATTR 블록 내 ATR 기록들 은 DIR 엔트리들에 의해 직접 어드레스되며, DIR 페이지는 ATR 페이지가 수정될 때 수정된다.
ATR은 하나 이상의 전용의 ATTR 블록들에 내포된다. 단지 하나의 ATR 블록만이 ATR 기록들이 기입될 수 있는 프로그램되지 않은 페이지들을 내포할 수 있다. ATTR 블록들은 재기입된 ATR 페이지들로부터 비롯된 무용 페이지들, 및 삭제된 파일들로부터 비롯되는 유효 ATR 페이지 내 무용 ATR 기록들을 내포할 수 있다.
한 페이지의 ATTR 블록은 DIR 페이지 내 엔트리들과 동일한 순서로, 동일 DIR 페이지 내 DIR 엔트리들에 의해 참조되는 한 세트의 ATR 기록들을 내포한다. DIR 페이지는 복수의 ATR 페이지들을 참조할 수 있다. 그러므로, "ATR" 페이지의 수정은 단일 DIR 페이지만의 수정에 대한 결과적인 필요성에 의해 행해질 수 있다.
ATR 페이지 헤더는 ATR 페이지가 연관된 DIR 페이지에의 참조, 및 ATR 페이지 내 ATR 기록 정보의 길이를 저장한다. 또한, ATR 페이지 헤더는 ATR 페이지가 기입되었을 때에 ATTR 블록들 각각에 존재하는 무용 페이지들의 수의 기록을 저장할 수 있다. 이 정보는 통상적으로 가장 최근에 기입된 ATR 페이지 헤더에서만 유효할 것이다.
ATR 기록은 다음의 필드들을 내포한다.
1) FiIeID.
2) ATR 기록의 길이.
3) ATR 기록의 내용. 속성 기록들의 내용들은 호스트 시스템에 의해 정의되며, DFS 시스템에 의해 해석되지 않는다.
위에 논의된 바와 같이, 데이터 그룹은 파일 내 인접 논리 오프셋 어드레스를 가진 한 세트의 파일 데이터이며, 단일 블록에 인접 물리 어드레스에 프로그램된다. 파일은 복수의 데이터 그룹으로서 빈번히 프로그램된다. 데이터 그룹은 한 바이트 내지 한 블록의 임의의 길이를 가질 수 있다. 각 데이터 그룹은 일부인 파일에 대한 fileID를 내포한 헤더와 함께 프로그램되는 것이 바람직하다.
FIT 기록들은 하나 이상의 FIT 블록들 내 내포되고 DIR 엔트리들에 의해 직접 어드레스된다. 단지 한 FIT 블록만이, 새로운 혹은 업데이트된 FIT 기록들을 프로그램하는데 사용할 수 있는 소거된 페이지들을 내포할 것이다. 이외 모든 FIT 블록들에는 모든 페이지들이 프로그램되어 있으나, 블록은 완전히 무용된 혹은 부분적으로 무용된 페이지들을 내포할 수 있다.
무용 FIT 기록들에 의해 점유된 이러한 용량의 리클레임은 한 FIT 블록을 리클레임될 다음 블록으로서 지정하고, 리클레임되는 블록을 소거하기 전에, FIT 기입 포인터에 의해 현재 지정된 페이지에 이 리클레임 블록으로부터의 페이지들을 점진적으로 카피함으로써 수행된다.
리클레임 블록은 FIT 블록에 관한 이전 리클레임 프로세스가 완료되고 블록이 소거되었을 때 선택된다. 가장 많은 수의 무용 페이지들을 가진 FIT 블록이, 리클레임 블록으로서 선택된다. 이 값은 가장 최근에 기입된 FIT 페이지의 FIT 페이지 헤더 내 각 FIT 블록에 대한 기록이다. FIT 기입 포인터를 내포하는 FIT 블록은 리클레임 대상으로 선택되지 않아야 한다. 선택된 FIT 블록은 리클레임 프로세스가 완료되고 이 블록이 소거될 때까지 리클레임 블록인 상태에 있는다.
무용 페이지들을 내포하는 FIT 블록들을 리클레임하는 프로세스는 블록으로부터 유효 FIT 기록들을 내포하는 얼마간의 페이지들을 FIT 기입 포인터에 의해 지정된 페이지에, 스케쥴된 간격들로 개개의 버스트들로, 카피하는 것을 수반한다. 버스트에서 페이지들의 수는 메타페이지에 내포된 페이지들의 수가 될 것이다. FIT 기입 포인터에 페이지들을 프로그램하는 것은 메타페이지에 단일 프로그래밍 작동으로서 수행되어야 한다.
리클레임 블록 내 페이지들의 버스트 카피 작동은 4 메타페이지들에 내포된 페이지 위치들의 수를 통해 FIT 기입 포인터의 진전에 의해 정의된 간격들로 스케쥴되어야 한다. 기입 포인터는 버스트 카피 작동이 스케쥴될 때 물리 메타페이지 내 첫 번째 페이지를 가리키게 된다.
동일 리클레임 프로세스가 ATTR 블록들에 개별적으로 적용될 수 있다.
실시예 변형들
위에 기술된 2가지 구체적인 파일 인덱싱 실시예들 각각에서, 호스트, FIT 엔트리들 및 디렉토리 엔트리들로부터 데이터의 페이지들은 모두가 하나 이상의 블록들의 별도의 그룹들에 저장된다. 이러한 구성에 대한 제1 변형으로서, 디렉토리 엔트리들을 내포하는 페이지들 및 FIT 기록들을 내포하는 페이지들은 동일 블록에 함께 존재할 수 있다. 블록 내 복수의 논리 페이지들은 도 20에 도시된 바와 같은 디렉토리 엔트리들을 내포한다. 특정 fielID에 대한 디렉토리 엔트리는 블록 내 기 지의 논리 어드레스를 갖는다. 각 논리 페이지는 또한, 도 21에 도시된 바와 같이, 한 세트의 논리 페이지 포인터들을 내포한다. 이들은 블록 내 디렉토리 페이지들에 대한 논리-물리 페이지 맵으로서 작용한다. 블록 내 각 논리 페이지에 대해 한 포인터가 존재하고, 이 포인터는 논리 페이지에 대한 현재 물리 페이지 어드레스를 명시한다. FIT 기록들을 내포하는 FIT 페이지들은 또한, 블록 내 존재할 수 있다. FIT 페이지들은 논리 페이지들에 할당되지 않지만, 디렉토리 엔트리들에 의해 물리 페이지 위치들에 직접 어드레스된다. FIT 페이지 내 하나 이상의 FIT 기록들이 업데이트될 필요가 있을 때, FIT 페이지의 위치는 관계된 디렉토리 엔트리들로부터 확인되고, 페이지가 독출되고, 관계된 기록들이 수정되고, 업데이트된 페이지는 블록 내 다음 가용한 프로그램되지 않은 페이지에 기입된다. 이 새로운 FIT 페이지 위치를 직접 어드레스하기 위해 디렉토리 엔트리들을 업데이트하기 위해서, 단일 디렉토리 논리 페이지가 수정되어, 업데이트된 FIT 페이지에 의해 점유된 것 다음의 물리 페이지 위치에 프로그램된다. 이 디렉토리 페이지에 대한 논리 페이지 포인터도 동일 작동으로 업데이트되고 프로그램된다. 블록 내 모든 논리 페이지들에 대한 논리 페이지 포인터들은 블록 내 항시 마지막 기입된 페이지인, 블록에 마지막 기입된 디렉토리 페이지에서만 유효하다.
대안적으로, FIT 페이지는 한 세트의 논리 페이지 포인터들을 내포할 수 있고, FIT 페이지는 블록 내 마지막 기입된 페이지일 수 있다.
2개의 구체적인 파일 인덱싱 실시예들에 기술된 구성에 대한 또 다른 변형에서, 디렉토리 엔트리들을 내포하는 페이지들, FIT 기록들을 내포하는 페이지들, 및 호스트로부터의 데이터를 내포하는 페이지들은 동일 블록에 함께 존재할 수 있다. 데이터가 호스트로부터 기입될 때, 이것은 데이터 그룹 형태로 블록 내 복수의 인접한 물리적 페이지들에 프로그램된다. 이 데이터 그룹의 위치는 데이터 그룹의 끝 바로 다음의 물리 페이지에 프로그램되는, 업데이트된 FIT 페이지 내 관계된 FIT 기록의 필드에 의해 확인된다. 또한, 디렉토리 페이지는 위에 기술된 바와 같이, 업데이트된 FIT 페이지 내 모든 FIT 기록들에의 포인터들을 업데이트하기 위해서, FIT 페이지 바로 다음에 프로그램된다.
데이터 그룹은 블록 내 제3 마지막 페이지 바로 다음에 FIT 페이지 및 디렉토리 페이지가 프로그램될 수 있게 하기 위해서, 이 마지막 페이지를 넘어 확장하지 않아야 한다.
결론
본 발명의 여러 가지 면들이 이의 실시예들에 관하여 기술되었을지라도, 본 발명은 첨부된 청구항들의 전체 범위 내에서 보호됨을 알 것이다.
Claims (34)
- 메모리 시스템 밖으로부터 수신된 파일들의 데이터로 재프로그래밍하기에 앞서 소거되는 메모리 블록들의 셀들로 저장 셀들이 그룹화된 비휘발성 메모리 시스템을 작동시키는 방법에 있어서,상기 메모리 블록들에, 고유 파일 식별자들을 갖는 파일들의 데이터를 저장하는 단계,개개의 파일들에 대해서, 상기 개개의 파일들의 데이터의 물리적 블록 위치들의 기록들을 유지하는 단계,상기 개개의 파일들의 종별을 (1) 가까운 장래에 수정될 것으로서 혹은 (2) 가까운 장래에 수정되지 않을 것으로서 유지하는 단계,상기 파일들의 상기 기록들에의 링크들의 디렉토리를 상기 파일들의 고유 파일 식별자들에 의해 유지하는 단계로서, 상기 링크들은 (1)으로서 분류된 파일들의 기록들에 대해선 간접으로 하고 (2)로서 분류된 파일들의 기록들에 대해선 직접으로 하는 것인, 상기 단계, 및고유 파일 식별자를 사용하여 상기 디렉토리를 통해 상기 기록들 중 선택된 것에 액세스하는 단계를 포함하는, 비휘발성 메모리 시스템 작동방법.
- 제1항에 있어서, 상기 메모리 시스템이 접속된 호스트 시스템이 개개의 파일을 열린 것으로 지정할 때 파일은 종별 (1)에 유지되고, 상기 메모리 시스템이 접 속된 상기 호스트 시스템이 개개의 파일을 닫힌 것으로서 지정할 때 파일은 종별 (2)에 유지되는, 비휘발성 메모리 시스템 작동방법.
- 제1항에 있어서, 상기 파일 종별들은 상기 메모리 시스템이 부착된 호스트로부터 상기 메모리 블록들 중 적어도 한 블록 내에 파일 데이터의 기입에 응하여 상기 메모리 시스템에 의해 유지되는, 비휘발성 메모리 시스템 작동방법.
- 제1항에 있어서, 파일의 상기 간접 링크는 상기 파일의 기록을 내포하는 제2 위치가 변경될 때 변경되지 않는 상기 메모리 내 제1 위치의 어드레스의 디렉토리 내 엔트리를 포함하며, 상기 제1 위치는 상기 제2 위치의 어드레스를 이 제2 위치의 임의의 변경들과 함께 내포하며, 상기 파일의 상기 직접 링크는 상기 제2 위치의 어드레스의 디렉토리 내 엔트리를 포함하는, 비휘발성 메모리 시스템 작동방법.
- 제1항에 있어서, (1)로서 분류된 파일들의 기록들은 다른 파일들의 기록들이 없는 상기 메모리 블록들 내 개개의 페이지들에 유지되며, (2)로서 분류된 파일들의 복수의 기록들은 상기 메모리 블록들 내 개개의 페이지들에 유지되는, 비휘발성 메모리 시스템 작동방법.
- 제1항에 있어서, (2)로서 분류된 파일들의 다수의 기록들은 상기 메모리 블록들의 제1 페이지에 함께 그룹화되며, 이들 다수의 기록들에의 다수의 링크들은 상기 디렉토리를 형성하는 상기 메모리 블록들의 제2 페이지에 함께 그룹화되는, 비휘발성 메모리 시스템 작동방법.
- 제6항에 있어서, 상기 제1 페이지에 저장된 (2)로서 분류된 파일들의 기록들의 수는 링크들이 상기 제2 페이지에 저장되는 파일들로 제한되는, 비휘발성 메모리 시스템 작동방법.
- 고유한 파일 식별자들에 의해 확인된 데이터 파일들로 재프로그래밍하기에 앞서 소거되는 메모리 블록들의 셀들로 저장 셀들이 그룹화된 비휘발성 메모리 시스템을 작동시키는 방법에 있어서,개개의 파일들의 데이터를 하나 이상의 데이터 그룹들로서 저장하는 단계,상기 데이터 파일들의 개개의 파일들를 구성하는 상기 데이터 그룹들의 기록들을 유지하는 단계;상기 고유 파일 식별자들에 의해 상기 기록들에의 링크들의 디렉토리를 유지하는 단계로서 상기 링크들은 비활성 파일들에 대해선 직접으로 하고 활성 파일들에 대해선 간접으로 한 것인, 단계를 포함하는, 비휘발성 메모리 시스템 작동방법.
- 제8항에 있어서, 활성 파일들은 가까운 장래에 수정될 것이며, 비활성 파일들은 가까운 장래에 수정되지 않을 것인, 비휘발성 메모리 시스템 작동방법.
- 제8항에 있어서, 활성 파일들은 상기 메모리 시스템이 접속된 호스트에 의해, 열린 것으로서 지정된 파일들을 포함하며, 비활성 파일들은 호스트에 의해, 닫힌 것으로서 지정된 파일들을 포함하는, 비휘발성 메모리 시스템 작동방법.
- 제8항에 있어서, 상기 메모리 시스템은 상기 메모리 블록들 내 상기 파일들의 저장의 적어도 한 패턴을 모니터함으로써 상기 개개의 파일들을 활성 혹은 비활성으로서 식별하는, 비휘발성 메모리 시스템 작동방법.
- 제8항에 있어서, 상기 하나 이상의 데이터 그룹들은 인접 논리 파일 오프셋 어드레스들 및 메모리 셀 블록들 내 인접 물리 어드레스들의 데이터를 포함하는, 비휘발성 메모리 시스템 작동방법.
- 제8항에 있어서, 활성 파일들의 기록들은 다른 파일들의 기록들이 없는 상기 메모리 블록들 내 개개의 페이지들에 유지되고, 비활성 파일들의 복수의 기록들은 상기 메모리 블록들 내 개개의 페이지들에 유지되는, 비휘발성 메모리 시스템 작동방법.
- 제8항에 있어서, 비활성 파일들의 다수의 기록들은 상기 메모리 블록들의 제1 페이지에 함께 그룹화되며, 이들 다수의 기록들에의 다수의 링크들은 상기 디렉토리를 형성하는 상기 메모리 블록들의 제2 페이지에 함께 그룹화되는, 비휘발성 메모리 시스템 작동방법.
- 고유한 파일 식별자들에 의해 확인된 데이터 및 파일 내 오프셋 어드레스로 다수 페이지들의 블록들을 재프로그래밍하기에 앞서 소거되는 메모리 블록들의 셀들로 저장 셀들이 그룹화된 비휘발성 메모리 시스템을 작동시키는 방법에 있어서,메모리 셀 블록들 내 인접 논리 파일 오프셋 어드레스들 및 인접 물리 어드레스들에 데이터를 개별적으로 명시하는 하나 이상의 데이터 그룹들로서 개개의 파일들의 데이터를 저장하는 단계;상기 개개의 파일들의 상기 데이터 그룹들의 테이블 내에 한 세트의 엔트리들을 유지하는 단계; 및상기 파일들의 고유 식별자들에 의해 이 파일들을 상기 파일들의 데이터의 테이블 내 상기 엔트리들에 링크하는 파일 디렉토리를 유지하는 단계로서, 상기 링크는 닫은 파일들의 데이터에 대해선 직접으로 하며 열린 파일들의 데이터에 대해선 간접으로 하는, 단계를 포함하는, 비휘발성 메모리 시스템 작동방법.
- 제15항에 있어서, 열린 파일들의 테이블들은 다른 파일들의 테이블들이 없는 상기 메모리 블록들 내 개개의 페이지들에 유지되며, 닫힌 파일들의 복수의 기록들은 상기 메모리 블록들 내 개개의 페이지들에 유지되는, 비휘발성 메모리 시스템 작동방법.
- 제15항에 있어서, 닫힌 파일들의 다수의 기록들은 상기 메모리 블록들의 제1 페이지에 함께 그룹화되며, 이들 다수의 기록들에의 다수의 링크들은 상기 디렉토리를 형성하는 상기 메모리 블록들의 제2 페이지에 함께 그룹화되는, 비휘발성 메모리 시스템 작동방법.
- 블록들의 페이지들에 데이터를 재프로그래밍하기에 앞서 소거되는 메모리 블록들의 셀들로 저장 셀들이 그룹화된 비휘발성 메모리 시스템을 작동시키는 방법에 있어서,개별적으로 고유 파일 식별자를 갖는 파일들의 데이터를 제1 복수의 페이지들에 저장하는 단계;상기 제1 복수의 페이지들에 저장된 상기 파일들의 데이터의 물리적 페이지 위치들의 기록들을 적어도 제2 페이지에 유지하는 단계; 및적어도 상기 제2 페이지에 기록들의 상기 위치들에의 포인터들을 적어도 제3 페이지에 유지하는 단계로서, 상기 제2 페이지 내 상기 기록들은 상기 제3 페이지에 포인터들이 저장된 상기 파일들의 기록들로 제한되는, 단계를 포함하는, 비휘발성 메모리 시스템 작동방법.
- 제18항에 있어서, 적어도 상기 제2 페이지에 기록들의 상기 위치들에의 상기 포인터들은 상기 기록들이 속하는 상기 파일들의 상기 고유 식별자들에 연관된, 비휘발성 메모리 시스템 작동방법.
- 제18항에 있어서, 상기 제1 복수의 페이지들은 제1 그룹의 하나 이상의 블록들에 위치되고, 상기 적어도 제2 페이지는 제2 그룹의 하나 이상의 블록들에 위치되고, 상기 적어도 제3 페이지는 제3 그룹의 하나 이상의 블록들에 위치되는, 비휘발성 메모리 시스템 작동방법.
- 제18항에 있어서, 상기 제1 복수의 페이지들은 제1 그룹의 하나 이상의 블록들에 위치되고, 상기 적어도 제2 페이지 및 상기 적어도 제3 페이지는 제2 그룹의 하나 이상의 블록들의 공통 블록들에 위치된, 비휘발성 메모리 시스템 작동방법.
- 제18항에 있어서, 상기 제1 복수의 페이지들, 상기 적어도 제2 페이지 및 상기 적어도 제3 페이지는 한 그룹의 하나 이상의 블록들의 공통 블록들에 함께 위치되어 있는, 비휘발성 메모리 시스템 작동방법.
- 블록들의 페이지들에 데이터를 재프로그래밍하기에 앞서 소거되는 메모리 블록들의 셀들로 저장 셀들이 그룹화된 비휘발성 메모리 시스템을 작동시키는 방법에 있어서,데이터가 저장되는 물리 페이지 위치들의 기록들을 적어도 제1 페이지에 유지하는 단계; 및적어도 상기 제1 페이지 내 기록들의 상기 위치들에의 포인터들을 적어도 제 2 페이지에 유지하는 단계로서, 상기 제1 페이지 내 상기 기록들은 상기 제2 페이지에 저장된 상기 포인터들에 의해 가리켜진 것들로 제한되는, 단계를 포함하는, 비휘발성 메모리 시스템 작동방법.
- 블록들의 페이지들에 파일들의 데이터를 재프로그래밍하기에 앞서 소거되는 메모리 블록들의 셀들로 저장 셀들이 그룹화된 비휘발성 메모리 시스템을 작동시키는 방법에 있어서,고유 파일 식별자들을 갖는 파일들의 데이터를 상기 메모리 블록들에 저장하는 단계;개개의 파일들에 대해서, 상기 개개의 파일들의 데이터의 물리 블록 위치들의 기록들을 유지하는 단계;상기 파일들의 고유 파일 식별자들에 의해 상기 파일들의 기록들에의 링크들의 디렉토리를 유지하는 단계로서, 상기 디렉토리 링크들은 상기 기록들의 물리 어드레스를 내포하는 메모리의 하나 이상의 위치들에 대한 것인, 단계; 및고유 파일 식별자를 사용하여 상기 디렉토리를 통해 상기 기록들 중 선택된 것에 액세스하는 단계로서, 개개의 파일들의 기록들은 다른 파일들의 기록들이 없는 개개의 페이지들에 유지되는, 단계를 포함하는, 비휘발성 메모리 시스템 작동방법.
- 데이터로 재프로그래밍하기에 앞서 함께 소거되는 메모리 블록들의 셀들로 그룹화된 비휘발성 메모리 저장 셀들의 메모리 시스템에서,상기 메모리 시스템 외부로부터 수신된 고유 파일 식별자들을 가진 파일들의 데이터는 이들의 파일 식별자들에 의해 상기 메모리 블록들에 저장되며;데이터의 물리 블록 위치들의 기록들은 상기 개개의 파일들에 대해 유지되며;상기 개개의 파일들의 종별은 (1) 가까운 장래에 수정될 것으로서, 혹은 (2) 가까운 장래에 수정되지 않을 것으로서 유지되며;상기 파일들의 상기 기록들에의 링크들의 디렉토리는 고유 파일 식별자들에 의해 유지되고, 상기 링크들은 (1)로서 분류된 파일들의 기록들에 대해선 간접으로 하고 (2)로서 분류된 파일들의 기록들에 대해선 직접으로 하는 것인, 메모리 시스템.
- 제25항에 있어서, 또한, 상기 메모리 시스템이 접속된 호스트 시스템이, 상기 개개의 파일을, 열린 것으로 지정할 때 파일은 종별 (1)에 유지되고, 상기 메모리 시스템이 접속된 상기 호스트 시스템이 개개의 파일을, 닫힌 것으로서 지정할 때 파일은 종별 (2)에 유지되는, 메모리 시스템.
- 제25항에 있어서, 또한, 파일의 상기 간접 링크는 상기 파일의 기록을 내포하는 제2 위치가 변경될 때 변경되지 않는 상기 메모리 내 제1 위치의 어드레스의 디렉토리 내 엔트리를 포함하며, 상기 제1 위치는 상기 제2 위치의 어드레스를 이 제2 위치의 임의의 변경들과 함께 내포하며, 상기 파일의 상기 직접 링크는 상기 제2 위치의 어드레스의 디렉토리 내 엔트리를 포함하는, 메모리 시스템.
- 제25항에 있어서, 또한, (1)로서 분류된 파일들의 기록들은 다른 파일들의 기록들이 없는 상기 메모리 블록들 내 개개의 페이지들에 유지되며, (2)로서 분류된 파일들의 복수의 기록들은 상기 메모리 블록들 내 개개의 페이지들에 유지되는, 메모리 시스템.
- 제25항에 있어서, 또한, (2)로서 분류된 파일들의 다수의 기록들은 상기 메모리 블록들의 제1 페이지에 함께 그룹화되며, 이들 다수의 기록들에의 다수의 링크들은 상기 디렉토리를 형성하는 상기 메모리 블록들의 제2 페이지에 함께 그룹화되는, 메모리 시스템.
- 제29항에 있어서, 또한, 상기 제1 페이지에 저장된 (2)로서 분류된 파일들의 기록들의 수는 링크들이 상기 제2 페이지에 저장되는 파일들로 제한되는, 메모리 시스템.
- 데이터를 블록들의 페이지들로 재프로그래밍하기에 앞서 함께 소거되는 메모리 블록들의 셀들로 그룹화된 비휘발성 메모리 저장 셀들의 메모리 시스템에서,개별적으로 고유 파일 식별자를 갖는 파일들의 데이터는 제1 복수의 페이지 들에 저장되며;상기 고유하게 식별된 파일들의 데이터가 있는 물리적 페이지 위치들의 기록들은 적어도 제2 페이지에 유지되며;상기 적어도 제2 페이지 내 기록들의 위치들에의 포인터들은 적어도 제3 페이지에 유지되고, 상기 제2 페이지 내 상기 기록들은 포인터들이 상기 제3 페이지에 저장된 파일들의 것들로 제한되는, 메모리 시스템.
- 제31항에 있어서, 또한, 상기 제1 복수의 페이지들은 제1 그룹의 하나 이상의 블록들에 위치되고, 상기 적어도 제2 페이지는 제2 그룹의 하나 이상의 블록들에 위치되고, 상기 적어도 제3 페이지는 제3 그룹의 하나 이상의 블록들에 위치되는, 메모리 시스템.
- 제31항에 있어서, 상기 제1 복수의 페이지들은 제1 그룹의 하나 이상의 블록들에 위치되고, 상기 적어도 제2 페이지 및 상기 적어도 제3 페이지는 제2 그룹의 하나 이상의 블록들의 공통 블록들에 위치된, 메모리 시스템.
- 제31항에 있어서, 상기 제1 복수의 페이지들, 상기 적어도 제2 페이지 및 상기 적어도 제3 페이지는 한 그룹의 하나 이상의 블록들의 공통 블록들에 함께 위치되는, 메모리 시스템.
Applications Claiming Priority (8)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US70538805P | 2005-08-03 | 2005-08-03 | |
US60/705,388 | 2005-08-03 | ||
US74674206P | 2006-05-08 | 2006-05-08 | |
US60/746,742 | 2006-05-08 | ||
US11/459,255 | 2006-07-21 | ||
US11/459,246 | 2006-07-21 | ||
US11/459,246 US7669003B2 (en) | 2005-08-03 | 2006-07-21 | Reprogrammable non-volatile memory systems with indexing of directly stored data files |
US11/459,255 US7949845B2 (en) | 2005-08-03 | 2006-07-21 | Indexing of file data in reprogrammable non-volatile memories that directly store data files |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20080038368A true KR20080038368A (ko) | 2008-05-06 |
Family
ID=37441507
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020087004711A KR20080038368A (ko) | 2005-08-03 | 2006-08-01 | 데이터 파일을 직접 저장하는 재프로그램가능 비휘발성메모리에 파일 데이터의 인덱싱 |
Country Status (5)
Country | Link |
---|---|
EP (1) | EP1917577A2 (ko) |
JP (1) | JP2009503740A (ko) |
KR (1) | KR20080038368A (ko) |
TW (1) | TW200731067A (ko) |
WO (1) | WO2007019175A2 (ko) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20150056621A (ko) * | 2012-11-21 | 2015-05-26 | 인텔 코포레이션 | 비휘발성 메모리에 대한 탄력적인 웨어 관리 |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2007073536A2 (en) * | 2005-12-21 | 2007-06-28 | Sandisk Corporation | Non-volatile memories and methods with memory allocation for a directly mapped file storage system |
CA2708669A1 (en) * | 2007-12-13 | 2009-06-18 | Redknee Inc. | Method and system for storage |
JP2009288924A (ja) * | 2008-05-28 | 2009-12-10 | Nec Electronics Corp | ファイルアクセスシステム |
DE102008059352A1 (de) * | 2008-11-27 | 2010-06-02 | Giesecke & Devrient Gmbh | Speicherzugriff auf einen portablen Datenträger |
TWI459197B (zh) * | 2011-04-21 | 2014-11-01 | Phison Electronics Corp | 資料寫入方法、記憶體控制器與記憶體儲存裝置 |
TWI582581B (zh) * | 2016-05-13 | 2017-05-11 | 群暉科技股份有限公司 | 用來於一冗餘儲存系統中進行資料修復之方法與裝置 |
TWI643066B (zh) * | 2018-01-15 | 2018-12-01 | 慧榮科技股份有限公司 | 用來於一記憶裝置中重新使用關於垃圾收集的一目的地區塊之方法、記憶裝置及其控制器以及電子裝置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2291990A (en) * | 1995-09-27 | 1996-02-07 | Memory Corp Plc | Flash-memory management system |
-
2006
- 2006-08-01 EP EP06789199A patent/EP1917577A2/en not_active Withdrawn
- 2006-08-01 WO PCT/US2006/030098 patent/WO2007019175A2/en active Application Filing
- 2006-08-01 KR KR1020087004711A patent/KR20080038368A/ko not_active Application Discontinuation
- 2006-08-01 JP JP2008525157A patent/JP2009503740A/ja active Pending
- 2006-08-03 TW TW095128511A patent/TW200731067A/zh unknown
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20150056621A (ko) * | 2012-11-21 | 2015-05-26 | 인텔 코포레이션 | 비휘발성 메모리에 대한 탄력적인 웨어 관리 |
Also Published As
Publication number | Publication date |
---|---|
JP2009503740A (ja) | 2009-01-29 |
TW200731067A (en) | 2007-08-16 |
WO2007019175A2 (en) | 2007-02-15 |
WO2007019175A3 (en) | 2007-09-07 |
EP1917577A2 (en) | 2008-05-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7669003B2 (en) | Reprogrammable non-volatile memory systems with indexing of directly stored data files | |
US7949845B2 (en) | Indexing of file data in reprogrammable non-volatile memories that directly store data files | |
US8880483B2 (en) | System and method for implementing extensions to intelligently manage resources of a mass storage system | |
US8055832B2 (en) | Management of memory blocks that directly store data files | |
US7480766B2 (en) | Interfacing systems operating through a logical address space and on a direct data file basis | |
KR101042588B1 (ko) | 플래시 메모리들에 직접 데이터 파일 저장 | |
KR101272642B1 (ko) | 플래시 메모리시스템 내의 데이터 저장 용량의 리클레이밍 | |
KR101344688B1 (ko) | 플래시 메모리들에 직접 파일 데이터 프로그래밍 및 삭제 | |
US7814262B2 (en) | Memory system storing transformed units of data in fixed sized storage blocks | |
US20070143560A1 (en) | Non-volatile memories with memory allocation for a directly mapped file storage system | |
US20070143566A1 (en) | Non-volatile memories with data alignment in a directly mapped file storage system | |
KR101464199B1 (ko) | 연속 논리 주소 공간 인터페이스를 구비한 다이렉트 데이터 파일 시스템을 사용하는 방법 | |
KR20080000557A (ko) | 플래시 메모리들에 직접 데이터 파일 저장 구현 기술 | |
KR101378031B1 (ko) | 데이터 파일을 직접적으로 저장하는 메모리 블록의 관리 | |
US20090164745A1 (en) | System and Method for Controlling an Amount of Unprogrammed Capacity in Memory Blocks of a Mass Storage System | |
KR20080038368A (ko) | 데이터 파일을 직접 저장하는 재프로그램가능 비휘발성메모리에 파일 데이터의 인덱싱 | |
KR20090108695A (ko) | 다이렉트 데이터 파일 메모리 시스템에서 lba 인터페이스를 관리하는 방법 | |
US8769217B2 (en) | Methods and apparatus for passing information to a host system to suggest logical locations to allocate to a file |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
WITN | Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid |