KR101430097B1 - 비휘발성 메모리 및 클래스 기반의 업데이트 블록 대체 규칙을 위한 방법 - Google Patents

비휘발성 메모리 및 클래스 기반의 업데이트 블록 대체 규칙을 위한 방법 Download PDF

Info

Publication number
KR101430097B1
KR101430097B1 KR1020097007548A KR20097007548A KR101430097B1 KR 101430097 B1 KR101430097 B1 KR 101430097B1 KR 1020097007548 A KR1020097007548 A KR 1020097007548A KR 20097007548 A KR20097007548 A KR 20097007548A KR 101430097 B1 KR101430097 B1 KR 101430097B1
Authority
KR
South Korea
Prior art keywords
block
update
data
blocks
memory
Prior art date
Application number
KR1020097007548A
Other languages
English (en)
Other versions
KR20090079197A (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/532,456 external-priority patent/US7779056B2/en
Priority claimed from US11/532,467 external-priority patent/US7774392B2/en
Application filed by 샌디스크 테크놀로지스, 인코포레이티드 filed Critical 샌디스크 테크놀로지스, 인코포레이티드
Publication of KR20090079197A publication Critical patent/KR20090079197A/ko
Application granted granted Critical
Publication of KR101430097B1 publication Critical patent/KR101430097B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7202Allocation control and policies

Abstract

블록 관리 시스템을 가진 비휘발성 메모리에서, 데이터는 블록들에 기입되고 블록별로 소거될 수 있다. 임의의 시간에 블록들의 풀(pool)은 동시에 데이터를 저장하기 위해 개방된다. 풀 내 블록들의 수는 제한된다. 대체 시스템은 제한을 초과함이 없이 풀 내에 새로운 블록들을 넣을 수 있게 한다. 특히, 풀 내 블록들의 서로 다른 클래스들 각각은 대체되기 전에 최소의 활동적인 블록을 폐쇄하는 등의, 자신의 대체 규칙을 갖고 있다. 이렇게 하여, 풀 내 블록들의 있을 수 있는 비효율성 및 조기 폐쇄를 피할 수 있다.

Description

비휘발성 메모리 및 클래스 기반의 업데이트 블록 대체 규칙을 위한 방법{NON-VOLATILE MEMORY AND METHOD FOR CLASS-BASED UPDATE BLOCK REPLACEMENT RULES}
이 발명은, 일반적으로 비휘발성 반도체 메모리에 관한 것이고, 구체적으로는 데이터를 저장하기 위해 동시 개방된 블록 풀(pool)의 대체를 관리하는 개선된 시스템을 갖춘 메모리 블록 관리 시스템을 구비한 것에 관한 것이다.
특히 소형 폼 팩터(form factor) 카드로서 패키지된 EEPROM 및 플래시 EEPROM 형태인, 전하를 비휘발성으로 저장할 수 있는 고체 상태 메모리는 최근에 다양한 이동 및 휴대장치들, 특히 정보 기기들 및 소비자 전자제품들에서 선택되는 저장장치가 되었다. 역시 고체상태 메모리인 RAM(랜덤 액세스 메모리)과는 달리, 플래시 메모리는 비휘발성이어서, 이의 저장된 데이터를 파워가 턴 오프 된 후에도 보존한다. 또한, ROM(판독 전용 메모리)과 달리, 플래시 메모리는 디스크 저장 장치와 유사하게 재기입 가능하다. 더 높은 비용에도 불구하고, 플래시 메모리는 대량 저장 애플리케이션들에서 점점 더 사용되고 있다. 하드 드라이브들 및 플로피 디스크들과 같은 회전 자기매체에 기반한 종래의 대량 저장장치는 이동 및 휴대 환경엔 적합하지 않다. 이것은 디스크 드라이브들이 부피가 크고 기계적 고장이 나기 쉽고, 큰 레이턴시 및 고 파워 요구조건들을 갖는 경향이 있기 때문이다. 이들 바람직하지 못한 속성들은 디스크 기반의 저장장치를 대부분의 이동 및 휴대 응용들에서 사용되지 못하게 한다. 한편, 내장되고 탈착 가능한 카드 형태의 플래시 메모리는, 소형 크기, 낮은 전력소모, 고속 및 고 신뢰성 특징들 때문에 이동 및 휴대용 환경에서 이상적으로 적합하다.
플래시 EEPROM은 이것이 소거될 수 있고 이들의 메모리 셀들에 기입 또는 "프로그램"된 새로운 데이터를 가질 수 있다는 비휘발성 메모리라는 점에서 EEPROM(전기적 소거 가능 및 프로그램가능한 판독 전용 메모리)과 유사하다. 둘 다는 소스 영역과 드레인 영역 사이에, 반도체 기판 내 채널 영역 상에 위치된, 전계효과 트랜지스터 구조에서, 플로팅(비접속된) 도전성 게이트를 이용한다. 제어 게이트는 플로팅 게이트 상에 제공된다. 트랜지스터의 임계 전압 특성은 플로팅 게이트 상에 보유되는 전하량에 의해 제어된다. 즉, 플로팅 게이트 상에 주어진 레벨의 전하에 대해서, 트랜지스터가 이의 소스영역과 드레인 영역과의 사이에 도통을 허용하게 턴 "온" 되기 전에 제어 게이트에 인가되어야 하는 대응하는 전압(임계)이 있다. 특히, 플래시 EEPROM과 같은 플래시 메모리는 전체 블록들의 메모리 셀들이 동시에 소거될 수 있게 한다.
플로우팅 게이트는 한 범위의 전하들을 유지할 수 있고, 따라서 임계 전압 윈도우 내에서 임의의 임계 전압 레벨로 프로그램될 수 있다. 임계 전압 윈도우의 크기는 플로우팅 게이트에 프로그램될 수 있는 전하들의 범위에 대응하게 될 장치의 최소 및 최대 임계 레벨들에 의해 경계가 정해진다. 임계 윈도우는 일반적으로 메모리 장치의 특성들, 동작 조건들 및 이력(history)에 좌우된다. 윈도우 내에서 각각의 구별되는 분해가능한(resolvable) 임계전압 레벨 범위는 원리적으로 셀의 확정된 메모리 상태를 지정하는데 사용될 수 있다. 임계전압이 2개의 서로 구별되는 영역들로 분할될 때, 각 메모리 셀은 일 비트의 데이터를 저장할 수 있을 것이다. 마찬가지로, 임계 전압 윈도우가 2 이상의 서로 구별되는 영역들로 분할될 때, 각 메모리 셀은 1 이상의 비트의 데이터를 저장할 수 있을 것이다.
메모리 셀로서 작용하는 트랜지스터는 전형적으로 두 메커니즘들 중 한 메커니즘에 의해 "프로그램된" 상태로 프로그램된다. "핫(hot) 전자 주입"에서, 드레인에 인가되는 고전압은 기판 채널 영역을 횡단하는 전자들을 가속시킨다. 동시에, 제어 게이트에 인가되는 고전압은 얇은 게이트 유전체를 통해서 플로우팅 게이트로 핫 전자들을 가져간다. "터널링 주입"에서, 고전압은 기판에 대해서 제어 게이트로 인가된다. 이에 따라, 전자들은 기판으로부터 개재된 플로우팅 게이트로 당겨지게 된다. 메모리 상태를 변경하기 위해서 메모리 셀의 초기에 소거된 전하 저장유닛에 전자들을 주입함으로써 메모리에 기입하는 것을 기술하기 위해 그동안 "프로그램"이라는 용어가 사용되었으나, 이제는 "기입" 또는 "기록"과 같은 더 일반적인 용어들과 상호교환적으로 사용되었다.
메모리 장치는 다수의 메커니즘들에 의해 소거될 수 있다. EEPROM에 있어서, 메모리 셀은 플로우팅 게이트에서 전자들을 얇은 산화물을 통해서 기판채널 영역으로 터널링되게 하기 위하여(즉, 파울러-노다임 터널링) 고전압을 제어 게이트에 대해서 기판에 인가함으로써 전기적으로 소거될 수 있다. 전형적으로, EEPROM은 한 바이트씩 소거될 수 있다. 플래시 EEPROM에 있어서, 메모리는 한꺼번에 또는 한번에 하나 이상의 블록들이 전기적으로 소거될 수 있는데, 여기서 최소 소거 가능 블록은 하나 이상의 섹터들로 구성될 수 있고 각 섹터는 512 바이트들 또는 그 이상의 데이터를 저장할 수 있다.
메모리 장치들은 전형적으로 카드상에 설치될 수 있는 하나 이상의 메모리 칩들을 포함한다. 각 메모리 칩은 디코더들 및 소거, 기입 및 판독 회로들과 같은 주변 회로들에 의해 지원되는 메모리 셀들의 어레이를 포함한다. 더 복잡한 메모리 장치들은 지능형이고 더 높은 레벨의 메모리 동작들 및 인터페이싱을 수행하는 제어기가 수반된다.
최근에 사용되는 상업적으로 성공한 많은 비휘발성 고체상태 메모리 장치들이 있다. 이들 메모리 장치들은 플래시 EEPROM일 수도 있고 또는 이외 다른 유형들의 비휘발성 메모리 셀들을 채용할 수도 있다. 플래시 메모리 및 시스템들의 예들, 그리고 이들을 제조하는 방법들은 미국 특허 5,070,032, 5,095,344, 5,315,541, 5,343,063, 5,661,053, 5,313,421, 6,222,762에 주어져 있다. 특히, NAND 스트링 구조를 갖는 플래시 메모리 장치들은 미국 특허 5,570,315, 5,903,495, 6,046,935에 기술되어 있다. 또한, 비휘발성 메모리 장치는 전하를 저장하기 위한 유전층을 가진 메모리 셀들로부터 제조된다. 앞서 기술된 도전성 플로팅 게이트 대신, 유전층이 사용된다. 유전 저장 소자를 이용하는 이러한 메모리 장치들은 Eitan 등의, "NROM: A Novel Localized Trapping, 2-Bit Nonvolatile Memory Cell" IEEE Electron Device Letters, vol. 21, no. 11, November 2000, pp. 543 ~ 545에 기술 되어 있다. ONO 유전층은 소스 확산부와 드레인 확산부 사이에 채널에 걸쳐 확장한다. 한 데이터 비트를 위한 전하는 드레인에 이웃한 유전층 내에 모이게 되고, 다른 데이터 비트를 위한 전하는 소스에 인접한 유전층 내에 모이게 된다. 예를 들면, 미국 특허 5,768,192 및 6,011,725은 2개의 이산화규소층 사이에 개재된 트랩핑 유전체를 갖는 비휘발성 메모리 셀을 개시한다. 복수-상태 데이터 저장은 유전체 내 공간적으로 분리된 전하 저장 영역들의 2진 상태들을 개별적으로 판독함으로써 구현된다.
판독 및 프로그램 수행을 개선하기 위해서, 어레이 내에 복수의 전하 저장 소자들 또는 메모리 트랜지스터들이 병렬로 판독 또는 프로그램된다. 이에 따라, 메모리 소자들의 "페이지"가 함께 판독 또는 프로그램된다. 현존의 메모리 아키텍처들에서, 행은 전형적으로 몇 개의 인터리브된 페이지들을 내포하거나 한 페이지를 구성할 수 있다. 페이지의 모든 메모리 소자들은 함께 판독되거나 프로그램될 것이다.
플래시 메모리 시스템들에서, 소거 동작은 판독 및 프로그램 동작들보다 한 자리수 크기만큼 더 길게 걸릴 수도 있다. 이에 따라, 상당한 크기의 소거 블록을 갖는 것이 바람직하다. 그러므로, 소거 시간은 큰 일단의 메모리 셀들에 대해 감소된다.
플래시 메모리의 특성은 데이터가 소거된 메모리 위치에 기입되어야 하는 것에 기초한다. 호스트로부터 어떤 논리 어드레스의 데이터가 업데이트되어야 할 것이라면, 한 방법은 동일 물리적 메모리 위치에 업데이트 데이터를 재기입하는 것이 다. 즉, 논리 대 물리적 어드레스 맵핑이 변경되지 않는다. 그러나, 이것은 이 물리적 위치를 내포하는 전체 소거 블록이 먼저 소거되고, 이어서 업데이트된 데이터로 재기입되어야 할 것임을 의미할 것이다. 이 업데이트 방법은 전체 소거 블록이 소거되고 재기입될 것을 요구하기 때문에, 특히 업데이트될 데이터만이 소거 블록의 작은 부분만을 점유한다면 비효율적이다. 또한, 이에 따라, 메모리 블록의 소거 리사이클 빈도가 높아지게 되고, 이는 이러한 유형의 메모리 장치의 제한된 내구성 면에서 바람직하지 못하다.
플래시 메모리 시스템을 관리하는데 있어 또 다른 문제는 시스템 제어 및 디렉토리 데이터를 사용해야 한다는 점이다. 데이터는 다양한 메모리 동작들의 과정 동안에 생성되고 액세스된다. 이에 따라, 이의 효율적인 취급 및 준비된 액세스는 수행에 직접적으로 영향을 줄 것이다. 플래시 메모리는 저장하기 위한 것이고 비휘발성이기 때문에, 플래시 메모리에 이러한 유형의 데이터를 유지하는 것이 바람직할 것이다. 그러나, 제어기와 플래시 메모리 간에 파일 관리 시스템이 개입함으로써, 데이터는 직접적으로 액세스될 수 없다. 또한, 시스템 제어 및 디렉토리 데이터는 활동적이고 분산(fragment)되는 경향이 있으며, 이는 큰 크기의 블록 소거를 갖는 시스템에서 저장에 도움이 되지 않는다. 통상적으로, 이러한 유형의 데이터는 제어기 RAM에 구축되어, 제어기에 의해 직접 액세스할 수 있게 한다. 메모리 장치가 기동된 후에, 초기화 프로세스는 제어기 RAM에 두어질 필요한 시스템 제어 및 디렉토리 정보를 컴파일하기 위해서 플래시 메모리가 스캔될 수 있게 한다. 이 프로세스는 시간이 걸리며 제어기 RAM 용량을 요구하며, 더욱 증가하는 플래시 메모 리 용량에 따라 더욱더 그러하다.
미국 특허 6,567,307는 스크래치 패드로서 작용하는 복수의 소거 블록들에 업데이트 데이터를 기록하고 종국에는 다양한 블록들 중에 유효 섹터들을 합체하고, 이들을 논리적으로 순차적인 순서로 재배열한 후에 섹터들을 재기입하는 것을 포함하는, 큰 소거 블록간에 섹터 업데이트들을 처리하는 방법을 개시한다. 이러한 방법으로 블록은 모든 최소한의 업데이트로 소거되고 재기입되지 않을 필요가 있다.
WO 03/027828 및 WO 00/49488 모두는 논리 섹터 어드레스들을 구역들로 분할하는 것을 포함하는 큰 소거 블록 중에 업데이트들을 처리하는 메모리 시스템을 개시한다. 사용자 데이터를 위한 다른 구역과는 별개로 활동적 시스템 제어 데이터를 위해 작은 구역의 논리 어드레스 범위가 유보된다. 이렇게 하여, 자신의 구역 내 시스템 제어 데이터의 조작은 다른 구역 내 연관된 사용자 데이터와 상호작용하지 않을 것이다. 업데이트들은 논리 섹터 레벨에 있고 기입 포인터는 기입될 블록 내 대응하는 물리 섹터들을 가리킨다. 맵핑 정보는 RAM에 버퍼되고 결국에는 주메모리 내 섹터 할당 테이블에 저장된다. 논리 섹터의 최신 버전은 현존 블록들 중에 모든 이전 버전들을 폐용시킬 것이며, 이것은 부분적으로 폐용이 된다. 가비지 수거는 수락가능한 수까지 부분적으로 폐용된 블록들을 유지하기 위해 수행된다.
종래 기술의 시스템들은 많은 블록들에 걸쳐 업데이트 데이터가 분포되게 하는 경향이 있거나 업데이트 데이터는 많은 현존의 블록들을 부분적으로 폐용이 되게 할 수도 있다. 결과는 흔히 부분적으로 폐용이 된 블록들에 대해 필요한 큰 양 의 가비지 수거이며, 이것은 비효율적이며 메모리의 조기 노화를 야기한다. 또한, 비순차적 업데이트와 비교했을 때 순차적 업데이트를 취급하는 계통적이고 효율적인 방법은 없다.
그러므로, 고용량 및 고성능 비휘발성 메모리에 대한 일반적인 필요성이 있다. 특히, 위에 언급된 문제가 없는 큰 블록들로 메모리 동작들을 수행할 수 있는 고용량 비휘발성 메모리가 있을 필요성이 있다.
발명의 요약
비휘발성 메모리 시스템은 물리적 메모리 위치들의 물리적 그룹들로 구성된다. 각 물리적 그룹(메타블록)은 단위로서 소거될 수 있고, 논리 그룹의 데이터를 저장하기 위해 사용될 수 있다. 메모리 관리 시스템은 논리 그룹의 업데이트 데이트를 기록하는데 전용되는 메타블록을 할당함으로써 논리 그룹의 데이터가 업데이트될 수 있게 한다. 업데이트 메타블록은 수신된 순서로 업데이트 데이터를 기록하며 기록이 원래 저장된(순차적) 바와 맞는 논리적 순서로 되어 있는지, 그렇지 않은지(무순서)에 제약은 없다. 결국, 업데이트 메타블록은 추가 기록에 대해 폐쇄된다. 몇 가지 프로세스들 중 하나가 일어날 것이지만, 종국에는 원 메타블록을 대체하는 정확한 순서로 완전히 채워진 메타블록으로 끝나게 될 것이다. 무순서 경우에, 디렉토리 데이터는 빈번한 업데이트들에 도움이 되는 방식으로 비휘발성 메모리에 유지된다. 시스템은 복수의 논리 그룹들이 동시에 업데이트되는 것을 지원한다.
발명의 한 특징은 논리-그룹별로 데이터가 업데이트될 수 있게 한다. 이에 따라, 논리 그룹이 업데이트되고 있을 때, 논리 단위들(및 업데이트들이 폐용된 소수의 메모리 유닛들)의 분포는 범위가 제한된다. 이것은 논리 그룹이 통상적으로 물리적 블록 내에 내포될 때 특히 그러하다.
논리 그룹의 업데이트 동안에, 업데이트된 논리 단위들을 버퍼하기 위해서 전형적으로 한 또는 2개의 블록들이 할당될 필요가 있다. 이에 따라, 가비지 수거는 비교적 몇 개의 블록들에 대해 수행될 필요가 있을 뿐이다. 무순서 블록의 가비지 수거는 합체 또는 압축(compaction)에 의해 수행될 수도 있다.
업데이트 프로세스의 효율적 사용은 어떠한 추가의 블록도 순차적인 것들과 비교했을 때 무순서(비순차적) 업데이트들에 대해 할당될 필요가 없도록 업데이트 블록들의 일반적인 처리에서 더욱 명백해진다. 모든 업데이트 블록들은 순차적 업데이트 블록으로서 할당되며, 어떠한 업데이트 블록이든 무순서 업데이트 블록으로 변경될 수 있다. 사실, 순차에서 무순서로 업데이트 블록의 변경은 자유재량이다.
시스템 자원의 효율적 사용은 복수의 논리 그룹들이 동시에 업데이트될 수 있게 한다. 이것은 효율을 더 증가시키며 오버헤드들을 감소시킨다.
발명의 일면에 따라서, 블록 관리 시스템을 갖춘 비휘발성 메모리에서, 개선된 블록 대체 기법은 개선된 블록 대체 방법은 데이터를 기록하기 위해 동시 개방되는 제 1 소정 최대 개수의 업데이트 블록까지 지원하는 시스템을 위해 구현된다. 업데이트 블록들은 데이터가 논리적으로 순차적 순서로 기록되지만 데이터가 논리적으로 순차적인 순서로 데이터가 기록되지 않는 무순서 업데이트 블록들이 되어도 좋을 제 2 소정 최대 개수까지 기록되는, 주로 순차적인 업데이트 블록들이다. 업데이트 블록의 새로운 할당이 업데이트 블록 풀을 제 1 또는 제 2 소정 최대 개수를 초과하게 할 때마다, 풀 내 현존의 업데이트 블록들 중 하나는 제한에 따르기 위해서 폐쇄되고 제거될 것이다. 업데이트 블록을 폐쇄하기에 앞서, 이의 데이터는 순차적 블록에 합체된다. 개선된 방법은 순차 업데이트가 무순서 블록 합체들의 초과된 수를 야기할 수 있는 상황을 피하게 하는 것이다. 이것은 순차 업데이트 블록들 및 무순서 업데이트 블록들을 각각의 대체 또는 합체 풀들로 분리함으로써 달성된다. 특히, 순차 업데이트가 새로운 업데이트 블록의 할당을 제 1 소정 최대 개수를 초과하게 할 때, 풀의 최근 최소 사용된 순차적 업데이트 블록에 우선적으로 빈 공간을 만드는 것이다.
현 시스템에서, 일반적으로는 2가지 유형들의 데이터로서 사용자 데이터 및 제어 데이터가 있다. 사용자 데이터는 호스트에서 메모리 시스템으로 전형적으로 논리적 순차적 순서로 보내진다. 호스트로부터 순차적 기입 동작들을 최적으로 취급하기 위해 순차적 업데이트 블록들이 할당된다. 또한, 사용자 데이터는 특히 논리 데이터에 후속된 업데이트들이 있을 때 논리적으로 비순차적 순서로 있을 수도 있다. 무순서 업데이트 블록들은 비순차적 순서로 데이터를 최적으로 취급하기 위해 생성된다. 무순서 또는 비순차적 데이터의 또 다른 소스는 사용자 데이터를 저장하는 과정에서 발생되는 파일 및 디렉토리 정보와 같은 파일 시스템 또는 메모리 시스템에 의해 유지되는 제어 데이터이다.
동시에 개방된 업데이트 블록들의 최대수까지 지원하는 실제 시스템 제한에 준수하는 이전의 방법은 순차적이든 무순서이든 관계없이, 풀에 최근 최소에 사용된 업데이트 블록을 폐쇄하는 것이었다.
본 방법은 특히 순차 기입 동작 동안 블록의 풀 중에 업데이트 블록이 새로운 할당을 위해 빈 공간을 만들기 위해 폐쇄될 필요가 있다면, 풀 내 최근 최소 사용된 순차 업데이트 블록이 폐쇄되는 이전 방법보다 개선된다. 이것은 순차 기입 동작들 및 랜덤 기입 동작들을 취급하기 위해 다양한 업데이트 블록들이 효과적으로 사용될 수 있게 한다. 특히, 이것은 호스트에 의해 큰 순차 기입 동작이 FAT 및 디렉토리 정보를 내포하는 무순서 업데이트 블록의 조기 폐쇄를 강제할 수 있는 비효율적인 상황을 회피한다. 또 다른 무순서 블록은 일단 큰 순차 기입 동작이 행해지면 다시 업데이트될 FAT 및 디렉토리 정보를 저장하기 위해 사실상 거의 즉시 생성될 것이다. 개선된 대체 정책의 생성은 후속되는 FAT 및 디렉토리 업데이트를 관리하기 위해 잠재적으로 개방된 순차 또는 개방된 무순서 블록의 순차적 기입 및 합체 동안 무순서 블록을 합체할 때 부가되는 오버헤드를 방지하기 위해 대체 및 합체 풀의 분리를 요구한다.
본 방법의 일반화는 이를테면 업데이트 블록이 순차적인 데이터를 저장하고 있는지 아니면 비순차적인 데이터를 저장하고 있는지, 또는 어떤 기정의된 유형의 시스템 데이터를 저장하고 있는지와 같이, 한 세트의 속성들에 기초하여 업데이트 블록들을 유별하는 것이다. 제한된 수의 업데이트 블록들의 풀을 구현함에 있어, 업데이트 블록들의 각 클래스는 이 클래스를 위해 지원되는 최대수가 초과하게 될 때 대체를 위해 그 자신의 규칙을 가질 것이다.
예를 들면, 순차적 업데이트 블록 및 비순차적 업데이트 블록들은 2개의 서로 다른 클래스들이다. 이들 클래스들 각각에 대한 대체 규칙들은 동일하다. 즉 최소 활동적인 것을 새로운 것으로 대체한다. 이에 따라, 순차 업데이트 블록의 풀(pool)이 초과하게 될 때, 풀 내 최소 활동적인 것은 폐쇄되고 새로운 것이 풀에 넣어지기 전에 제거될 것이다. 비순차적 업데이트 블록들의 풀에 대해서도 유사하다.
일반적으로 각 클래스는 다른 클래스들과는 무관하게 그 자신의 대체 규칙을 갖는다. 대체 규칙들의 예들은 대응하는 클래스들에 따라, 최근 최소 액세스된, 가장 최근 액세스된, 최소의 빈번하게 액세스된, 가장 빈번하게 액세스된, 등을 대체하는 것이다.
본 발명의 추가의 특징들 및 이점들은 이의 바람직한 실시예의 다음의 설명으로부터 이해될 것이며, 이 설명은 첨부한 도면들에 관련하여 취해질 것이다.
도 1은 본 발명을 구현하기에 적합한 메모리 시스템의 주 하드웨어 성분들을 개략적으로 도시한 것이다.
도 2는 발명의 바람직한 실시예에 따라, 물리적 그룹들의 섹터들(또는 메타블록들)로 조직되고 제어기의 메모리 관리자에 의해 관리되는 메모리를 도시한 것이다.
도 3a(i) ~ 도 3a(iii)는 본 발명의 바람직한 실시예에 따라, 논리 그룹과 메타블록간에 맵핑을 개략적으로 도시한 것이다.
도 3b는 논리 그룹들과 메타블록들간에 매핑을 개략적으로 도시한 것이다.
도 4는 물리적 메모리에 구조들에 메타블록의 정렬을 도시한 것이다.
도 5a는 서로 다른 플레인들의 최소 소거 단위들을 링크하여 구성되는 메타블록들을 도시한 것이다.
도 5b는 메타블록에 링크하기 위해 각각의 플레인으로부터 한 최소 소거 단위(MEU)가 선택되는 일 실시예를 도시한 것이다.
도 5c는 메타블록에 링크하기 위해 각각의 플레인으로부터 하나보다 더 많은 MEU가 선택되는 또 다른 실시예를 도시한 것이다.
도 6은 제어기 및 플래시 메모리에 구현되는 메타블록 관리 시스템의 개략적 블록도이다.
도 7a는 순차적 업데이트 블록에 순차적 순서로 기입되는 논리 그룹 내 섹터들의 예를 도시한 것이다.
도 7b는 무순서 업데이트 블록에 무순서 순서로 기입되는 논리 그룹 내 섹터들의 예를 도시한 것이다.
도 8은 논리 어드레스들에서 불연속을 갖는 2개의 개별적 호스트 기입 동작들의 결과로서 순차 업데이트 블록에 순차적 순서로 기입되는 논리 그룹에 섹터들의 예를 도시한 것이다.
도 9는 발명의 일반적인 실시예에 따라, 논리 그룹의 데이터를 업데이트하기 위해 업데이트 블록 관리자에 의한 프로세스를 도시한 흐름도이다.
도 10은 발명의 바람직한 실시예에 따라, 논리 그룹의 데이터를 업데이트하 기 위해 업데이트 블록 관리자에 의한 프로세스를 도시한 흐름도이다.
도 11a는 도 10에 도시된 무순서 업데이트 블록을 폐쇄하는 합체 프로세스를 보다 상세히 도시한 흐름도이다.
도 11b는 도 10에 도시된 무순서 업데이트 블록을 폐쇄하기 위한 압축 프로세스를 보다 상세히 도시한 흐름도이다.
도 12a는 논리 그룹의 모든 가능한 상태들, 및 여러 가지 동작들 하에서 이들 간에 가능한 전이들을 도시한 것이다.
도 12b는 논리 그룹의 가능한 상태들을 리스트한 테이블이다.
도 13a는 메타블록의 모든 가능한 상태들, 및 여러 가지 동작들 하에서 이들 간에 가능한 전이들을 도시한 것이다. 메타블록은 논리 그룹에 대응하는 물리 그룹이다.
도 13b는 메타블록의 가능한 상태들을 리스트한 테이블이다.
도 14(a) 내지 도 14(j)는 논리 그룹의 상태에 그리고 물리 메타블록에 여러 가지 동작들의 영향을 보인 상태도들이다.
도 15는 개방된 및 폐쇄된 업데이트 블록들 그리고 할당을 위해 소거된 블록들을 추적하기 위한 할당 블록 리스트(ABL)의 구조의 바람직한 실시예를 도시한 것이다.
도 16a는 무순서 블록 색인(CBI) 섹터의 데이터 필드들을 도시한 것이다.
도 16b는 무순서 블록 색인(CBI) 섹터들이 전용의 메타블록에 기록되는 예를 도시한 것이다.
도 16c는 무순서 업데이트는 되는 주어진 논리 그룹의 논리 섹터의 데이터에의 액세스를 도시한 흐름도이다.
도 16d는 논리 그룹이 하위 그룹들로 분할된 대안적 실시예에 따라, 무순서 업데이트되는 주어진 논리 그룹의 논리 섹터의 데이터에의 액세스를 도시한 흐름도이다.
도 16e는 각각의 논리 그룹이 복수의 하위 그룹들로 분할되는 실시예에 있어서 무순서 블록 색인(CBI) 섹터들 및 이들의 기능들의 예들을 도시한 것이다.
도 17a는 그룹 어드레스 테이블(GAT) 섹터의 데이터 필드들을 도시한 것이다.
도 17b는 그룹 어드레스 테이블(GAT) 섹터들이 GAT 블록에 기록되는 예를 도시한 것이다.
도 18은 소거된 블록들의 사용 및 리사이클을 위한 제어 및 디렉토리 정보의 분포 및 흐름을 도시한 개략적 블록도이다.
도 19는 논리 대 물리 어드레스 변환의 프로세스를 나타낸 흐름도이다.
도 20은 메모리 관리의 동작 중에 제어 데이터 구조들에 관해 수행된 동작들의 계층을 도시한 것이다.
도 21은 블록 관리 시스템에 대한 업데이트 블록들의 수에 2가지 규정된 제한들을 개략적으로 도시한 것이다.
도 22는 다양한 메모리 장치들에 대해 최적인 2개의 제한들의 조합들의 전형적인 예들을 도시한 것이다.
도 23a는 도 22에 기술된 바와 같이 "5-2" 구성의 업데이트 풀을 개략적으로 도시한 것이다.
도 23b는 이전 방법에 따라, 새로운 업데이트 블록을 위한 빈 공간을 만들기 위해서 최소 활동적인 업데이트 블록의 폐쇄를 개략적으로 도시한 것이다.
도 23c는 폐쇄된 업데이트 블록이 빈 공간을 만들기 위해 제거된 후에 새롭게 할당된 업데이트 블록을 풀에 넣는 것을 개략적으로 도시한 것이다.
도 24a는 도 22에 기술된 바와 같이 "5-2"인 업데이트 풀을 개략적으로 도시한 것이다.
도 24b는 이전의 방법에 따라, 새로운 업데이트 블록을 위한 빈 공간을 만들기 위해서 최소의 활동적인 업데이트 블록의 폐쇄를 개략적으로 도시한 것이다.
도 24c는 폐쇄된 업데이트 블록이 빈 공간을 만들기 위해 제거된 후에 풀에 새로운 할당된 업데이트 블록을 넣는 것을 개략적으로 도시한 것이다.
도 25a는 도 10, 단계 410에, 그리고 새로운 할당이 소정의 제한을 초과하게 될 때는 언제나 최근의 액세스된 최소의 업데이트 블록이 폐쇄되는 도 23b 및 도 24b에서 이전에 도시된 방법을 도시한 것이다.
도 25b는 무순서 업데이트 블록 개수가 소정의 제한을 초과할 때마다, 최근 최소 액세스된 무순서(비순차적) 업데이트 블록이 폐쇄되는 도 10, 단계 370에 이전에 도시된 방법을 도시한 것이다.
도 26a는 도 22에 기술된 바와 같이 "5-2" 구성의 업데이트 풀을 개략적으로 도시한 것이다.
도 26b는 본 개선된 방법에 따라, 새로운 업데이트 블록을 위한 빈 공간을 만들기 위해서 업데이트 블록의 풀 중 하나의 폐쇄를 개략적으로 도시한 것이다.
도 26c는 폐쇄된 업데이트 블록이 빈 공간을 만들기 위해 제거된 후에 새롭게 할당된 업데이트 블록을 풀에 넣는 것을 개략적으로 도시한 것이다.
도 27a는 도 22에 기술된 바와 같이 "5-2" 구성의 업데이트 풀을 개략적으로 도시한 것이다.
도 27b는 본 개선된 방법에 따라, 새로운 업데이트 블록을 위한 빈 공간을 만들기 위해서 업데이트 블록의 풀 중 하나의 폐쇄를 개략적으로 도시한 것이다.
도 27c는 빈 공간을 만들기 위해서 또 다른 무순서 업데이트 블록이 폐쇄되어 제거된 후에 새로운 무순서 업데이트 블록을 풀에 넣는 것을 개략적으로 도시한 것이다.
도 28은 제 1 실시예에 따라, 순차 업데이트 동안에, 제한된 한 세트의 업데이트 블록들을 관리하는 본 개선된 방법을 도시한 흐름도이다.
도 29는 제 2 실시예에 따라, 2개의 소정 제한을 갖는 제한된 한 세트의 업데이트 블록들을 관리하는 본 개선된 방법을 도시한 흐름도이다.
도 30은 클래스 기반의 대체 규칙들을 갖는 제한된 한 세트의 업데이트 블록들을 관리하는 본 개선된 방법을 도시한 흐름도이다.
도 1 내지 도 20은 본 발명의 다양한 면들이 구현될 수 있는 블록 관리를 갖춘 메모리 시스템들의 예들을 도시한 것이다. 유사한 메모리 시스템들이 Gorobets 등의 "Non-Volatile Memory and Method with Control Data Management" 명칭의 미국특허출원 공개번호 US-2005-0144365-A1에 개시되어 있다.
도 1은 본 발명을 구현하기에 적합한 메모리 시스템의 주 하드웨어 성분들을 개략적으로 도시한 것이다. 메모리 시스템(20)은 전형적으로 호스트 인터페이스를 통해 호스트(10)와 동작한다. 메모리 시스템은 전형적으로 메모리 카드 또는 내장된 메모리 시스템 형태이다. 메모리 시스템(20)은 동작들이 제어기(100)에 의해 제어되는 메모리(200)를 포함한다. 메모리(200)는 하나 이상의 집적회로 칩에 분포된 하나 이상의 어레이의 비휘발성 메모리 셀들로 구성된다. 제어기(100)는 인터페이스(110), 프로세서(120), 선택적인 코프로세서(121), ROM(판독 전용 메모리)(122), RAM(랜덤 액세스 메모리)(130) 및 선택적으로 프로그램가능한 비휘발성 메모리(124)를 포함한다. 인터페이스(110)는 제어기를 호스트에 인터페이스시키는 한 성분과 메모리(200)에 인터페이스시키는 또 다른 성분을 구비한다. 비휘발성 ROM(122) 및/또는 선택적인 비휘발성 메모리(124)에 저장된 펌웨어는 프로세서(120)가 제어기(100)의 기능들을 구현하기 위한 코드들을 제공한다. 오류 정정 코드들은 프로세서(120) 또는 선택적인 코프로세서(121)에 의해 처리될 수 있다. 대안적 실시예에서, 제어기(100)는 상태 머신(도시되지 않음)에 의해 구현된다. 또 다른 실시예에서, 제어기(100)는 호스트 내에 구현된다.
논리 및 물리 블록 구조들
도 2는 발명의 바람직한 실시예에 따라, 물리적 그룹들의 섹터들(또는 메타블록들)로 조직되고 제어기의 메모리 관리자에 의해 관리되는 메모리를 도시한 것 이다. 메모리(200)는 메타블록들로 조직되는데, 각 메타블록은 함께 소거될 수 있는 일 그룹의 물리적 섹터들(S0,...,SN-1)이다.
호스트(10)는 파일 시스템 또는 운영 시스템 하에 애플리케이션을 실행할 때 메모리(200)에 액세스한다. 전형적으로, 호스트 시스템은 예를 들면 각 섹터가 512 바이트의 데이터를 포함할 수 있는 논리 섹터들의 단위들로 데이터를 어드레스한다. 또한, 호스트가 한 단위의 논리 클러스터들로 판독하거나 메모리 시스템에 기입하는 것이 보통이며, 각 클러스터는 하나 이상의 논리 섹터들로 구성된다. 일부 호스트 시스템들에서, 호스트에서 저 레벨의 메모리 관리를 수행하기 위해, 선택적인 호스트측 메모리 관리자가 존재할 수도 있다. 대부분의 경우들에서 판독 또는 기입 동작들 동안, 호스트(10)는 필수적으로, 연속한 어드레스들을 가진 한 스트링의 논리 섹터들의 데이터를 내포하는 세그먼트를 판독 또는 기입하라는 명령을 메모리 시스템(20)에 발행한다.
메모리측 메모리 관리자는 플래시 메모리(200)의 메타블록들 중에 호스트 논리 섹터들의 데이터의 저장 및 검색을 관리하기 위해 메모리 시스템(20)의 제어기(100) 내에 구현된다. 바람직한 실시예에서, 메모리 관리자는 메타블록들의 소거, 판독 및 기입 동작들을 관리하기 위한 다수의 소프트웨어 모듈들을 내장한다. 또한, 메모리 관리자는 이의 동작에 연관된 시스템 제어 및 디렉토리 데이터를 플래시 메모리(200) 및 제어기 RAM(130) 중에 유지한다.
도 3a(i) ~ 도 3a(iii)는 본 발명의 바람직한 실시예에 따라, 논리 그룹과 메타블록간에 맵핑을 개략적으로 도시한 것이다. 물리적 메모리의 메타블록은 논리 그룹의 N개의 논리 섹터들의 데이터를 저장하기 위해 N개의 물리적 섹터들을 갖는다. 도 3a(i)는 논리 그룹(LGi)로부터의 데이터를 나타낸 것으로, 여기서 논리 섹터들은 연속한 논리적 순서 0, 1,..., N-1로 되어 있다. 도 3a(ii)는 같은 데이터가 같은 논리적 순서로 메타블록에 저장되는 것을 도시한 것이다. 이러한 식으로 저장되었을 때 메타블록은 "순차적이다"라고 한다. 일반적으로, 메타블록은 데이터를 다른 순서로 저장되게 할 수도 있는데, 이 경우 메타블록은 "비순차적" 또는 "무순서(chaotic)"라고 한다.
논리 그룹의 최하위 어드레스와 매타블록이 맵핑되는 이 메타블록의 최하위 어드레스와의 사이에 오프셋이 있을 수 있다. 이 경우, 논리 섹터 어드레스는 메타블록 내 논리 그룹의 맨 아래에서 다시 맨 위까지 루프(loop)로서 감싸여진다(wrap round). 예를 들면, 도 3a(iii)에서, 메타블록은 이의 제 1 위치에, 논리 섹터 k의 데이터부터 시작하여 저장한다. 마지막 논리 섹터 N-1에 도달하였을 때, 섹터 0으로 감싸여지고 마지막으로 논리 섹터 k-1에 연관된 데이터를 마지막 물리적 섹터 내에 저장한다. 바람직한 실시예에서, 메타블록의 제 1 물리 섹터에 저장된 데이터의 시작 논리 섹터 어드레스를 확인하는 것과 같은 임의의 오프셋을 확인하기 위해서 페이지 태그가 사용된다. 2개의 블록들의 논리 섹터들이 페이지 태그만큼만 다를 때 이들을 유사한 순서로 저장되게 하기 위해서 이들 2개의 블록들이 고찰될 것이다.
도 3b는 논리 그룹들과 메타블록들간에 매핑을 개략적으로 도시한 것이다. 각 논리 그룹은 데이터가 현재 업데이트되고 있는 소수의 논리 그룹들은 제외하고, 고유(unique) 메타블록에 맵핑된다. 논리 그룹이 업데이트된 후에, 다른 메타블록에 맵핑될 수도 있다. 맵핑 정보는 한 세트의 논리 대 물리 디렉토리들에서 유지되는데, 이에 대해서는 후에 상세히 기술될 것이다.
논리 그룹을 메타블록에 맵핑하는 다른 유형들도 고려된다. 예를 들면, 가변 크기를 갖는 메타블록들이, 본원과 같은 날에 Alan Sinclair에 의해 출원된 "Adaptive Metablocks" 명칭의 함께 계류중이고 본 출원인 소유의 미국특허출원에 개시되어 있다. 함께 계류중인 출원의 전체 개시된 바는 여기 참조로 포함시킨다.
발명의 한 특징은 시스템이 단일 논리 파티션으로 동작하며 메모리 시스템의 논리 어드레스 범위 전체에 걸쳐 논리 섹터들의 그룹들이 동일하게 취급된다는 것이다. 예를 들면, 시스템 데이터를 내포하는 섹터들 및 사용자 데이터를 내포하는 섹터들은 논리 어드레스 공간 중에 임의의 곳에 분포될 수 있다.
종래 기술의 시스템들과는 달리, 고-빈도 및 작은 크기의 업데이트들을 가진 데이터를 내포할 수 있을 섹터들을 논리 어드레스 공간에 국부화하기 위해서 시스템 섹터들(즉, 파일 할당 테이블들, 디렉토리들 또는 하위-디렉토리들에 관계된 섹터들)의 어떠한 특별한 분할 또는 구역화도 없다. 대신, 논리 그룹들의 섹터들을 업데이트하는 본 방법은 파일 데이터에 전형적인 액세스 패턴들뿐만 아니라, 시스템 섹터들에 전형적인 액세스 패턴들을 효율적으로 다룰 것이다.
도 4는 물리적 메모리에 구조들에서 메타블록의 정렬을 예시한 것이다. 플래 시 메모리는 단위로서 함께 소거될 수 있는 블록들의 메모리 셀들을 포함한다. 이러한 소거 블록들은 플래시 메모리의 소거의 최소 단위 또는 메모리의 최소 소거 가능한 단위(MEU)이다. 복수의 MEU의 소거를 지원하는 어떤 메모리 시스템들에서 하나보다 더 많은 MEU를 포함하는 "슈퍼 MEU"를 구성하는 것이 가능할지라도, 최소 소거 단위가, 메모리의 하드웨어 설계 파라미터이다. 플래시 EEPROM에 대해서, MEU는 한 섹터, 그러나 바람직하게는 복수의 섹터들을 포함할 수 있다. 보인 예에서, 이것은 M 섹터들을 갖는다. 바람직한 실시예에서, 각 섹터는 512 바이트의 데이터를 저장할 수 있고 사용자 데이터 부분, 그리고 시스템 또는 오버헤드 데이터를 저장하기 위한 헤더 부분을 갖는다. 메타블록이 P개의 PEU들로 구성되고 각 MEU가 M개의 섹터들을 내포한다면, 각 메타블록은 N = P*M 섹터들을 가질 것이다.
메타블록은, 시스템 레벨에서, 일 그룹의 메모리 위치들, 예를 들면, 함께 소거될 수 있는 섹터들을 나타낸다. 플래시 메모리의 물리 어드레스 공간은, 한 메타블록이 최소 소거 단위인, 한 세트의 메타블록들로서 취급된다. 이 명세서 내에서, "메타블록" 및 "블록"이라는 용어들은 미디어 관리를 위해 시스템 레벨에서 최소 소거 단위를 정의하기 위해 동의어로 사용되며, "최소 소거 단위" 또는 MEU라는 용어는 플래시 메모리의 최소 소거 단위를 나타내기 위해 사용된다.
메타블록을 형성하기 위한 최소 소거 단위들( MEU )의 링크
프로그래밍 속도 및 소거 속도를 최대화하기 위해서, 복수의 MEU들에 위치된 복수 페이지들의 정보가 병렬로 프로그램되고, 복수의 MEU들이 병렬로 소거되게 배열함으로써 병행을 가능한 한 많이 활용한다.
플래시 메모리에서, 페이지는 단일 동작으로 함께 프로그램될 수 있는 그룹화된 메모리 셀들이다. 페이지는 하나 이상의 섹터를 포함할 수 있다. 또한, 메모리 어레이는 하나보다 더 많은 플레인(plane)으로 분할될 수 있고, 여기서 한 플레인 내 단지 하나의 MEU만이 한번에 프로그램 또는 소거될 수 있다. 마지막으로, 플레인들은 하나 이상의 메모리 칩들 간에 분포될 수 있다.
플래시 메모리에서, MEU들은 하나 이상의 페이지를 포함할 수 있다. 플래시 메모리 칩 내에 MEU들은 플레인들로 조직될 수 있다. 각 플레인으로부터 한 MEU가 동시에 프로그램 또는 소거될 수 있기 때문에, 각 플레인으로부터 한 MEU를 선택함으로써 복수의 MEU 메타블록을 형성하는 것이 편리하다(아래 도 5b 참조).
도 5a는 서로 다른 플레인들의 최소 소거 단위들을 링크하여 구성되는 메타블록들을 도시한 것이다. MB0, MB1,...과 같은 각각의 메타블록은 메모리 시스템의 서로 다른 플레인들로부터의 MEU들로 구성되며, 여기서 서로 다른 플레인들은 하나 이상의 칩들간에 분포될 수 있다. 도 2에 도시된 메타블록 링크 관리자(170)는 각 메타블록에 대한 MEU들을 링크하는 것을 관리한다. 각 메타블록은 초기 포맷 프로세스 동안 구성되며, MEU들 중 하나의 장애가 없는 한, 시스템의 수명 내내 이 메타블록의 성분이 되는 MEU들을 보존한다.
도 5b는 메타블록에 링크하기 위해 각각의 플레인으로부터 한 최소 소거 단위(MEU)가 선택되는 일 실시예를 도시한 것이다.
도 5c는 메타블록에 링크하기 위해 각각의 플레인으로부터 하나보다 더 많은 MEU가 선택되는 또 다른 실시예를 도시한 것이다. 또 다른 실시예에서, 각각의 플 레인으로부터 하나보다 더 많은 MEU가 선택되어 슈퍼 MEU를 형성할 수 있다. 예를 들면, 슈퍼 MEU가 2개의 MEU들로부터 형성될 수 있다. 이 경우, 판독 또는 기입 동작을 위해 하나 이상의 패스(pass)를 취할 수도 있다.
메타블록들에 MEU들을 링크 및 재 링크하는 것은 본원과 동일 날에, Carlos Gonzales 등에 의해 출원된 "Adaptive Deterministic Grouping of Blocks into Multi-Block Structures" 명칭의 함께 계류중이고 본 출원인 소유의 미국특허출원에도 개시되어 있다. 함께 계류중인 출원의 전체 개시된 바를 여기 참조로 포함시킨다.
메타블록 관리
도 6은 제어기 및 플래시 메모리에 구현되는 메타블록 관리 시스템의 개략적 블록도이다. 메타블록 관리 시스템은 제어기(100)에 구현된 여러 기능 모듈들을 포함하며 플래시 메모리(200) 및 제어기 RAM(130)에 계층적으로 분포된 테이블들 및 리스트들에 다양한 제어 데이터(디렉토리 데이터를 포함하여)를 유지한다. 제어기(100)에 구현된 기능 모듈들은, 인터페이스 모듈(110) 논리 대 물리 어드레스 변환 모듈(140), 업데이트 블록 관리자 모듈(150), 소거 블록 관리자 모듈(160) 및 메타블록 링크 관리자(170)를 포함한다.
인터페이스(110)는 메타블록 관리 시스템이 호스트 시스템과 인터페이스할 수 있게 한다. 논리 대 물리 어드레스 변환 모듈(140)은 호스트로부터 논리 어드레스를 호스트 대 물리 메모리 위치에 맵핑한다. 업데이트 블록 관리자 모듈(150)은 주어진 논리 그룹의 데이터를 위한 메모리 내 데이터 업데이트 동작들을 관리한다. 소거된 블록 관리자(160)는 메타블록들의 소거 동작 및 새로운 정보의 저장을 위한 이들 메타블록들의 할당을 관리한다. 메타블록 링크 관리자(170)는 주어진 메타블록을 구성하는 최소 소거 가능한 블록들의 섹터들의 하위-그룹들을 링크하는 것을 관리한다. 이들 모듈들의 상세한 설명이 이들 각각의 단락들에 주어질 것이다.
동작 동안에 메타블록 관리 시스템은 어드레스, 제어 및 상태 정보와 같은 제어 데이터를 발생하고 이들로 동작한다. 제어 데이터의 대부분은 작은 크기의 빈번히 변하는 데이터인 경향이 있기 때문에, 큰 블록 구조를 가진 플래시 메모리에서는 쉽게 저장될 수도 효율적으로 유지될 수도 없다. 더 효율적인 업데이트 및 액세스를 위해 제어기 RAM에 소량의 더 가변하는 제어 데이터를 배치하는 반면 비휘발성 플래시 메모리에는 보다 정적인 제어 데이터를 저장하기 위해 계층 및 분산 방법이 채용된다. 파워 셧다운 또는 장애의 경우에, 이 방법은 비휘발성 메모리 내 작은 한 세트의 제어 데이터를 스캐닝함으로써 제어 데이터가 비휘발성 제어기 RAM에 신속하게 재구축되게 한다. 이것은 주어진 논리 그룹의 데이터의 가능한 활동에 연관된 블록들의 수를 제약시킨다. 이에 따라, 스캐닝은 제한된다. 또한, 지속을 요구하는 일부 제어 데이터는 섹터별로 업데이트될 수 있는 비휘발성 메타블록에 저장되는데, 각 업데이트는 이전 것을 대체하는 새로운 섹터가 기록되는 결과가 된다. 제어 데이터가 메타블록 내 섹터별 업데이트들을 추적하기 위해 섹터 색인 방법이 채용된다.
비휘발성 메모리(200)는 비교적 정적인 대량의 제어 데이터를 저장한다. 이것은 그룹 어드레스 테이블들(GAT)(210), 무순서 블록 색인들(CBI)(220), 소거된 블록 리스트들(EBL)(230) 및 MAP(240)을 포함한다. GAT(210)은 논리 그룹들의 섹터들과 이들의 대응하는 메타블록들간에 맵핑을 추적한다. 맵핑은 업데이트되는 것들을 제외하곤 변하지 않는다. CBI(220)는 업데이트 동안에 논리적으로 비순차적인 섹터들의 맵핑을 추적한다. EBL(230)은 소거가 된 메타블록 풀(pool)을 추적한다. MAP(240)은 플래시 메모리에 모든 메타브록들의 소거 상태를 보이는 비트맵이다.
휘발성 제어기 RAM(130)은 빈번히 변하고 액세스되는 작은 부분의 제어 데이터를 저장한다. 이것은 할당 블록 리스트(ABL)(134) 및 클리어된 블록 리스트(CBL)(136)를 포함한다. CBL(136)이 할당이 해제되고 소거가 된 메타블록들을 추적하는 반면 ABL(134)은 업데이트 데이터를 기록하기 위해 메타블록들의 할당을 추적한다. 바람직한 실시예에서, RAM(130)은 플래시 메모리(200)에 저장된 제어 데이터를 위한 캐시로서 작용한다.
업데이트 블록 관리자
업데이트 블록 관리자(150)(도 2에 도시된)는 논리 그룹들의 업데이트를 다룬다. 발명의 일면에 따라서, 업데이트되는 각 논리 그룹의 섹터들에는 업데이트 데이터를 기록하기 위한 전용의 업데이트 메타블록이 할당된다. 바람직한 실시예에서, 논리 그룹의 하나 이상의 섹터들의 임의의 세그먼트가 업데이트 블록에 기록될 것이다. 업데이트 블록은 업데이트된 데이터를 순차적인 순서로 또는 비순차적인(무순서라고도 알려진) 순서로 수신하게 관리될 수 있다. 무순서 업데이트 블록은 논리 그룹 내에 임의의 순서로, 그리고 개개의 섹터들을 임의로 반복하여 섹터 데이터가 업데이트될 수 있게 한다. 특히, 순차 업데이트 블록은 임의의 데이터 섹터 들의 재배치의 필요성 없이, 무순서 업데이트 블록이 될 수 있다. 무순서 데이터 업데이트를 위해 블록들의 어떠한 소정의 할당도 요구되지 않는데, 임의의 논리 어드레스에 비순차적 기입은 자동으로 조정된다. 이에 따라, 종래 기술의 시스템들과는 달리, 논리 그룹의 여러 업데이트 세그먼트들이 논리적 순차적 순서로 되어 있든 비순차적 순서로 되어 있든 특별한 취급은 없다. 일반적인 업데이트 블록은 단순히, 호스트에 의해 요청되는 순서로 여러 가지 세그먼트들을 기록하는데 사용될 것이다. 예를 들면, 호스트 시스템 데이터 또는 시스템 제어 데이터가 무순서 방식으로 업데이트되는 경향이 있을지라도, 호스트 시스템 데이터에 대응하는 논리 어드레스 공간의 영역들은 호스트 사용자 데이터를 가진 영역들과는 다르게 취급될 필요는 없다.
완전한 논리 그룹의 섹터들의 데이터는 바람직하게는 논리적으로 순차적인 순서로 단일 메타블록에 저장된다. 이에 따라, 저장된 논리 섹터들의 색인은 사전에 정의된다. 메타블록이 주어진 논리 그룹의 모들 섹터들을 기정의된 순서로 저장장치에 갖고 있을 때, "온전(intact)"하다고 한다. 업데이트 블록에 관해서, 이것이 결국에 논리적으로 순차적인 순서로 업데이트 블록으로 완전히 채워졌을 때, 업데이트 블록은 쉽게 원 메타블록을 대체하는 업데이트된 온전한 메타블록이 될 것이다. 반면, 업데이트 블록이 온전한 블록과는 논리적으로 다른 순서로 업데이트 데이터로 완전히 채워진다면, 업데이트 블록은 비순차적 또는 무순서 업데이트 블록이며 비순서적 세그먼트들은 종국에 논리 그룹의 업데이트 데이터가 온전한 블록의 순서와 동일한 순서로 저장되도록 추가로 더 처리되어야 한다. 바람직한 경우 에, 이것은 단일 메타블록에 논리적으로 순차적인 순서로 되어 있다. 추가의 처리는 원 블록 내 변경되지 않은 섹터들과 함께 업데이트 블록 내 업데이트된 섹터들을 또 다른 업데이트 메타블록에 합체하는 것을 수반한다. 합체된 업데이트 블록은 논리적으로 순차적인 순서로 있을 것이며 원 블록을 대체하는데 사용될 수 있다. 어떤 소정의 조건 하에서, 합체 프로세스는 하나 이상의 압축 프로세스들이 선행된다. 압축 프로세스는 단순히, 동일 논리적 섹터의 후속의 업데이트에 의해 폐용이 된 임의의 이중의 논리 섹터는 제거하면서, 무순서 업데이트 블록의 섹터들을 대체 무순서 블록에 재기록한다.
업데이트 방법은 기정의된 최대까지 복수의 업데이트 스레드들(thread)이 동시에 진행될 수 있게 한다. 각각의 스레드는 자신의 전용의 업데이트 메타블록을 사용하여 업데이트되는 논리 그룹이다.
순차 데이터 업데이트
논리 그룹에 속하는 데이터가 우선 업데이트될 때, 논리 그룹의 업데이트 데이터를 위한 업데이트 블록으로서 메타블록이 할당되고 전용된다. 업데이트 블록은 현존의 메타블록이 이의 모든 섹터들을 온전하게 저장하고 있었던 논리 그룹의 하나 이상의 섹터들의 세그먼트를 기입하라는 명령이 호스트로부터 수신되었을 때 할당된다. 제 1 호스트 기입 동작에 있어서, 제 1 세그먼트의 데이터는 업데이트 블록에서 기록된다. 각각의 호스트 기입은 연속된 논리 어드레스를 가진 하나 이상의 섹터의 세그먼트이기 때문에, 이에 따라 제 1 업데이트는 사실상 항시 순차적이게 된다. 후속되는 호스트 기입들에서, 동일 논리 그룹 내 업데이트 세그먼트들은 호 스트로부터 수신된 순서로 업데이트 블록 내에 기록된다. 블록은 연관된 논리 그룹 내 호스트에 의해 업데이트된 섹터들은 논리적으로 순차적인 상태로 있는 반면 순차적인 업데이트 블록으로서 계속하여 관리된다. 이 논리 그룹 내 업데이트된 모든 섹터들은 이 순차적 업데이트 블록이 폐쇄(close)되거나 무순서 업데이트 블록으로 전환될 때까지, 이 블록에 기입된다.
도 7a는 논리 그룹에 대한 원 블록 내 대응하는 섹터들은 폐용으로 되면서, 2개의 개별적 호스트 기입 동작들의 결과로서 논리 그룹 내 섹터들이 순차적 업데이트 블록에 순차적 순서로 기입되는 예를 도시한 것이다. 호스트 기입 동작 #1에서, 논리 섹터들(LS5 ~ LS8) 내의 데이터가 업데이트되고 있다. LS5' ~ LS8'로서 업데이트된 데이터는 새롭게 할당된 전용의 업데이트 블록에서 기록된다.
편의상, 논리 그룹 내 업데이트될 제 1 섹터는 제 1 물리적 섹터 위치부터 시작하여 전용의 업데이트 블록에 기록된다. 일반적으로, 업데이트될 제 1 논리 섹터는 반드시 그룹의 논리적 제 1 섹터인 것은 아니며, 따라서 논리 그룹의 시작과 업데이트 블록의 시작 간에는 오프셋이 있을 수 있다. 이 오프셋은 도 3a에 관련하여 앞에서 기술된 바와 같이 페이지 태그로서 알게 된다. 후속되는 섹터들은 논리적으로 순차적인 순서로 업데이트된다. 논리 그룹의 마지막 섹터가 기입될 때, 그룹 어드레스들은 감싸여지며 기입 시퀀스는 그룹의 제 1 섹터에서 계속된다.
호스트 기입 동작 #2에서, 논리 섹터들(LS9 ~ LS12)에 한 세그먼트의 데이터가 업데이트되고 있다. LS9' ~ LS12'로서 업데이트된 데이터는 마지막 기입이 끝나는 곳 바로 다음 위치에 전용의 업데이트 블록에 기록된다. 2개의 호스트 기입들은 업데이트 데이터가 논리적으로 순차적인 순서로, 즉 LS5' ~ LS12'로 업데이트 블록에 기록되게 하는 것임을 알 수 있다. 업데이트 블록은 논리적으로 순차적인 순서로 채워졌기 때문에 순차적 업데이트 블록으로서 간주된다. 업데이트 블록 내 기록된 업데이트 데이트는 원 블록 내 대응하는 것들을 폐용시킨다.
무순서 데이터 업데이트
무순서 업데이트 블록 관리는 연관된 논리 그룹 내 호스트에 의해 업데이트된 임의의 섹터가 논리적으로 비순차적일 때 현존의 순차적 업데이트 블록에 대해, 개시될 수 있다. 무순서 업데이트 블록은 연관된 논리 그룹 내 논리 섹터들이 임의의 순서로 그리고 임의의 반복 량을 갖고 업데이트될 수 있는 데이터 업데이트 블록 형태이다. 이것은 호스트에 의해 기입된 섹터가 논리적으로 비순차적일 때 순차적 업데이트 블록에서, 업데이트되는 논리 그룹 내 전에 기입된 섹터로 전환에 의해 생성된다. 이 논리 그룹에 후속하여 업데이트되는 모든 섹터들은 그룹 내 이들의 논리 섹터 어드레스가 어떻든 간에, 무순서 업데이트 블록 내 다음 가용 섹터 위치에 기입된다.
도 7b는 논리 그룹용을 위한 원 블록 내 대체된 섹터들 및 무순서 업데이트 블록 내 이중의 섹터들은 폐용으로 하면서, 5개의 개별적 호스트 기입 동작들의 결과로서 무순서 업데이트 블록에 무순서의 순서로 기입되는 논리 그룹 내 섹터들의 예를 도시한 것이다. 호스트 기입 동작 #1에서, 원 메타블록 내 저장된 주어진 논리 그룹의 논리 섹터들 LS10 ~ LS11이 업데이트된다. 업데이트된 논리 섹터들(LS10' ~ LS11')은 새롭게 할당된 업데이트 블록에 저장된다. 이때, 업데이트 블 록은 순차적인 블록이다. 호스트 기입 동작 #2에서, 논리 섹터들(LS5 ~ LS6)은 LS5' ~ LS6'으로서 업데이트되며 마지막 기입 바로 다음 위치에 업데이트 블록에 기록된다. 이것은 업데이트 블록을 순차에서 무순서 블록으로 전환한다. 호스트 기입 동작 #3에서, 논리 섹터(LS10)는 다시 업데이트되고 있고 LS10"으로서 업데이트 블록의 다음 위치에 기록된다. 이때 업데이트 블록 내 LS10"은 이전 기록에서 LS10'을 대체하여 원 블록 내 LS10을 대체한다. 호스트 기입 동작 #4에서, 논리 섹터(LS10) 내 데이터는 다시 업데이트되고 LS10"'으로서 업데이트 블록의 다음 위치에 기록된다. 이에 따라, LS10"'은 이제 가장 최신이며 논리 섹터(LS10)에 대한 유일한 유효한 데이터이다. 호스트 기입 동작 #5에서, 논리 섹터 LS30에 데이터가 업데이트되고 있고 LS30'으로서 업데이트 블록에 기록된다. 이에 따라, 예는 논리 그룹 내 섹터들이 임의의 순서로, 임의로 반복하여 무순서 업데이트 블록에 기입될 수 있음을 예시한다.
강제 순차 업데이트
도 8은 논리 어드레스들에서 불연속을 갖는 2개의 개별적 호스트 기입 동작들의 결과로서 논리 그룹에 섹터들이 순차 업데이트 블록에 순차적 순서로 기입되는 예를 도시한 것이다. 호스트 기입 #1에서, 논리 섹터들(LS5 ~ LS8)에 업데이트 데이터는 LS5' ~ LS8'로서 전용의 업데이트 블록에 기록된다. 호스트 기입 #2에서, 논리 섹터들(LS14 ~ LS16)에 업데이트 데이터는 LS14' ~ LS16'로서 마지막 기입 다음에 업데이트 블록에 기록되고 있다. 그러나, LS8과 LS14 간에 어드레스 도약이 있고 호스트 기입 #2는 정상적으로 업데이트 블록을 비순차가 되게 할 것이다. 어 드레스 도약은 순차적이지 않기 때문에, 한 선택은 우선 호스트 기입 #2을 실행하기 전에 개재된 섹터들의 데이터를 원 블록에서 업데이트 블록에 카피함으로써 패딩(padding) 동작(#2A)을 수행하는 것이다. 이에 따라서, 업데이트 블록의 순차 특성이 보존된다.
도 9는 발명의 일반적인 실시예에 따라, 논리 그룹의 데이터를 업데이트하기 위해 업데이트 블록 관리자에 의한 프로세스를 도시한 흐름도이다. 업데이트 프로세스는 다음 단계들을 포함한다.
단계 260: 메모리는 블록들로 조직되고, 각 블록은 함께 소거 가능한 메모리 단위들로 분할되며, 각 메모리 단위는 논리적 단위의 데이터를 저장한다.
단계 262: 데이터는 논리 그룹들로 조직되며, 각 논리 그룹은 논리 단위들로 분할된다.
단계 264: 표준 경우에, 논리 그룹의 모든 논리 단위들은 제 1 규정된 순서에 따라, 바람직하게는 논리적으로 순차적으로 순서로 원 블록의 메모리 단위들 간에 저장된다. 이렇게 하여, 블록에 개개의 논리 단위들에 액세스하기 위한 색인을 알게 된다.
단계 270: 주어진 논리 그룹(예를 들면, LGX)의 데이터에 대해서, LGX 내에 논리 단위를 업데이트하기 위해 요청이 행해진다. (논리 단위 업데이트는 예로서 주어진다. 일반적으로 업데이트는 LGX 내에 하나 이상의 연속한 논리 단위들의 세그먼트가 될 것이다).
단계 272: 요청된 업데이트 논리 단위는 LGX의 업데이트들을 기록하는데 전용되는 제 2 블록에 저장되어야 한다. 기록 순서는 제 2 순서, 전형적으로 업데이트들이 요청된 순서에 따른다. 발명의 한 특징은 논리적으로 순차적인 또는 무순서의 순서로 데이터를 기록하는데 초기에는 포괄적이 되게 업데이트 블록을 구축할 수 있게 한다. 따라서 제 2 순서에 따라, 제 2 블록은 순차적인 것이 되거나 무순서인 것이 될 수 있다.
단계 274: 제 2 블록은 프로세스가 단계 270으로 다시 루프하여 요청된 논리 단위들이 계속하여 기록되게 한다. 제 2 블록은 폐쇄를 위한 소정의 조건이 구체화되었을 때 추가 업데이트를 받는 것에 대해 폐쇄될 것이다. 이 경우, 프로세스는 단계 276으로 진행한다.
단계 276: 폐쇄된 제 2 블록이 원 블록의 순서와 유사한 순서로 기록된 그의 업데이트 논리 단위들을 갖는지가 판정된다. 두 개의 블록은 이들의 기록된 논리 단위들이 도 3a에 관련하여 기술된 바와 같이, 페이지 태그만큼만 다를 때 유사한 순서를 갖는 것으로 간주된다. 2개의 블록들이 유사한 순서를 갖는다면 프로세스는 단계 280로 진행하고, 그렇지 않다면 어떤 일종의 가비지 수거(garbage collection)가 단계 290에서 수행될 필요가 있다.
단계 280: 제 2 블록이 제 1 블록과 동일한 순서를 갖기 때문에, 이것은 원 제 1 블록을 대체하는데 사용된다. 업데이트 프로세스는 단계 299에서 끝난다.
단계 290: 주어진 논리 그룹의 각 논리 단위들의 가장 최신의 버전은 제 2 블록(업데이트 블록) 및 제 1 블록(원 블록) 중에서 수집된다. 주어진 논리 그룹의 합체된 논리 단위들은 제 1 블록과 유사한 순서로 제 3 블록에 기입된다.
단계 292: 제 3 블록(합체된 블록)은 제 1 블록과 유사한 순서를 갖기 때문에, 이것은 원 제 1 블록을 대체하는데 사용된다. 업데이트 프로세스는 단계 299에서 끝난다.
단계 299: 폐쇄 프로세스가 온전한 업데이트 블록을 생성할 때, 이것은 주어진 논리 그룹에 대한 새로운 표준 블록이 된다. 논리 그룹에 대한 업데이트 스레드는 종료될 것이다.
도 10은 발명의 바람직한 실시예에 따라, 논리 그룹의 데이터를 업데이트하기 위해 업데이트 블록 관리자에 의한 프로세스를 도시한 흐름도이다. 업데이트 프로세스는 다음의 단계들을 포함한다.
단계 310: 주어진 논리 그룹(예를 들면, LGX) 데이터에 대해, LGX 내에 논리 섹터를 업데이트하기 위해 요청이 행해진다. (섹터 업데이트는 예로서 주어진다. 일반적으로 업데이트는 LGX 내에 하나 이상의 연속한 논리 섹터들의 세그먼트가 될 것이다).
단계 312: LGX에 전용되는 업데이트 블록이 이미 존재하지 않는다면, 논리 그룹에 대한 새로운 업데이트 스레드를 개시하기 위해 단계 410로 진행한다. 이것은 논리 그룹의 업데이트 데이터를 기록하는데 전용되는 업데이트 블록을 할당함으로써 달성될 것이다. 개방된 업데이트 블록이 이미 있다면, 업데이트 블록에 업데 이트 섹터를 기록하는 것을 시작하기 위해 단계 314로 진행한다.
단계 314: 현 업데이트 블록이 이미 무순서이라면(즉, 비순차적), 간단히, 요청된 업데이트 섹터를 무순서 업데이트 블록에 기록하기 위해 단계 510으로 진행한다. 현 업데이트 블록이 순차적이라면, 순차적 업데이트 블록의 처리를 위해 단계 316으로 진행한다.
단계 316: 발명의 한 특징은 논리적으로 순차적인 또는 무순서인 순서로 데이터를 기록하는데 처음엔 포괄적이 되게 업데이트 블록이 구축될 수 있게 한다. 그러나, 논리 그룹은 종국에는 이의 데이터를 논리적으로 순차적인 순서로 메타블록에 저장되게 하기 때문에, 가능한 한 업데이트 블록을 순차적이 되게 유지하는 것이 바람직하다. 이어서 가비지 수거가 필요로 되지 않게 될 것이므로 추가 업데이트들에 대해 업데이트 블록이 폐쇄될 때 더 적은 처리가 요구될 것이다.
이에 따라, 요청된 업데이트가 업데이트 블록의 현재의 순차적 순서에 따를 것인지의 여부가 판정된다. 업데이트가 순차적으로 이어진다면, 단계 510으로 진행하여 순차적 업데이트를 수행하고, 업데이트 블록은 순차적인 상태가 될 것이다. 반면, 업데이트가 순차적으로 이어지지 않는다면(무순서 업데이트), 이것은 어떠한 다른 조치들도 취해지지 않는다면 순차적 업데이트 블록을 무순서로 전환할 것이다.
일 실시예에서, 상황을 구하기 위해서 어떤 것도 더 행해지지 않으며 프로세스는 곧바로 단계 370로 가서 업데이트 블록을 무순서인 것으로 전환하게 업데이트가 허용된다.
선택적인 강제 순차 프로세스
또 다른 실시예에서, 강제 순차 프로세스 단계 320은 현안의 무순서 업데이트에 대해 가능한 한 순차적 업데이트 블록을 유지하기 위해 선택적으로 수행된다. 2가지 상황들이 있으며, 이들 둘 다는 업데이트 블록에 기록된 논리 섹터들의 순차적 순서를 유지하기 위해 원 블록으로부터 빠진 섹터들을 카피하는 것을 요구한다. 제 1 상황은 업데이트가 짧은 어드레스 도약을 야기하는 경우이다. 제 2 상황은 업데이트 블록을 순차적 상태로 유지하기 위해 이 업데이트 블록을 조기에 폐쇄하는 것이다. 강제 순차 프로세스 단계 320은 다음 하위 단계들을 포함한다.
단계 330: 업데이트가 소정량 CB보다 크지 않은 논리 어드레스 도약을 야기한다면, 프로세스는 단계 350에서 강제 순차 업데이트 프로세스로 진행하며, 그렇지 않다면 프로세스는 강제 순차 폐쇄에 적격인지를 고찰하기 위해 단계 340으로 진행한다.
단계 340: 채워지지 않은 물리적 섹터들의 수가, 업데이트 블록의 크기의 반이 전형적인 값인 소정의 설계 파라미터 CC를 초과한다면, 업데이트 블록은 상대적으로 미사용되며 조기에 폐쇄되지 않을 것이다. 프로세스는 단계 370으로 진행하며 업데이트 블록은 무순서가 될 것이다. 반면, 업데이트 블록이 상당히 채워진다면, 이것은 이미 이용이 된 것으로 간주되고 따라서 강제 순차 폐쇄를 위해 단계 360으로 진행된다.
단계 350: 강제 순차 업데이트는 어드레스 도약이 소정량 CB을 초과하는 한, 현 순차 업데이트 블록을 순차 상태에 있게 한다. 필수로, 업데이트 블록의 연관된 원 블록으로부터의 섹터들은 어드레스 도약에 의한 크기의 갭을 채우게 카피된다. 이에 따라, 순차 업데이트 블록은 현 업데이트를 순차로 기록하기 위해 단계 510으로 진행하기 전에 개재된 어드레스들 내 데이터로 패딩될 것이다.
단계 360: 강제 순차 폐쇄는 현안의 무순서 업데이트에 의한 무순서인 것으로 전환되기보다는 이미 상당히 채워졌다면 현재 순차 업데이트 블록이 폐쇄되게 한다. 무순서 또는 비순차 업데이트는 위에 기술된 어드레스 동작 예외에 의해 커버되지 않은 순방향 어드레스 전이, 역방향 어드레스 전이, 또는 어드레스 반복을 갖는 것으로서 정의된다. 순차 업데이트 블록이 무순서 업데이트에 의해 전환되는 것을 방지하기 위해서, 업데이트 블록의 미기입된 섹터 위치들은 업데이트 블록의 연관된 원래의 부분적으로 폐용된 블록으로부터 섹터들을 카피함으로써 채워진다. 원래의 블록은 완전히 폐용이 되고 소거될 수 있다. 현 업데이트 블록은 이제 완전한 한 세트의 논리 섹터들을 가지며 이어서 원 메타블록을 대체하는 온전한 메타블록으로서 폐쇄된다. 이어서 프로세스는 단계 430으로 진행하여 새로운 업데이트 블록이 이의 장소에, 처음에 단계 310에서 요청되었던 현안의 섹터 업데이트의 기록을 받아들이기 위해 할당되게 한다.
무순서 업데이트 블록으로의 전환
단계 370: 현안의 업데이트가 순차적인 순서가 아닐 때, 그리고 선택적으로, 강제 순차 조건들이 만족되지 않는다면, 단계 510으로 프로세스가 진행할 때 비순차적 어드레스를 가진 현안의 업데이트 섹터가 업데이트 블록에 기록될 수 있게 한 덕택으로 순차 업데이트 블록은 무순서인 것으로 전환되는 것이 허용된다. 무순서 업데이트 블록들의 최대수가 존재한다면, 전환이 진행될 수 있게 하기 전에 최근 최소 액세스된 무순서 업데이트 블록을 폐쇄하는 것이 필요하며, 이에 따라 최대수의 무순서 블록들이 초과되는 것을 방지한다. 최근 최소 액세스된 무순서 업데이트 블록의 식별은 단계 420에 기술된 일반적인 경우와 동일하며, 그러나 무순서 업데이트 블록들만으로 제약된다. 이때 무순서 업데이트 블록을 폐쇄하는 것은 단계 550에서 기술된 바와 같은 합체에 의해 달성된다.
시스템 제약하에 새로운 업데이트 블록의 할당
단계 410: 업데이트 블록으로서 소거 메타블록을 할당하는 프로세스는 소정의 시스템 제한의 초과 여부 판정부터 시작한다. 유한한 자원들에 기인하여, 메모리 관리 시스템은 전형적으로 소정의 최대 개수의 업데이트 블록들 UMAX가 동시에 존재할 수 있게 한다. 이 제한은 순차적 업데이트 블록들 및 무순서 업데이트 블록들의 집체이며, 설계 파라미터이다. 바람직한 실시예에서, 제한은 예를 들면 최대 8개의 업데이트 블록들이다. 또한, 시스템 자원들에 관한 더 높은 요구에 기인하여, 동시에 개방될 수 있는(예를 들면, 4개) 최대 수의 무순서 업데이트 블록들에 관한 대응하는 소정의 제한이 있을 수도 있다.
이에 따라, UMAX 업데이트 블록들이 이미 할당되었을 때, 다음 할당 요청은 현존의 할당된 것들 중 하나를 폐쇄한 후에만 만족될 수도 있을 것이다. 프로세스는 단계 420으로 진행한다. 개방된 업데이트 블록들의 수가 CA 미만일 때, 프로세스 는 단계 430으로 곧바로 진행한다.
단계 420: 최대 수의 업데이트 블록들 CA가 초과되는 경우에, 최근의 액세스된 최소의 업데이트 블록은 폐쇄되며 가비지 수거가 수행된다. 최근의 액세스된 최소의 업데이트 블록은 최근 최소에 액세스된 논리 블록에 연관된 업데이트 블록으로서 확인된다. 최근의 액세스된 최소의 업데이트 블록들을 판정할 목적으로, 액세스는 논리 섹터들의 기입들 및 선택적으로 판독들을 포함한다. 개방된 업데이트 블록들의 리스트는 액세스의 순서로 유지되며: 초기화에서, 어떠한 액세스 순서도 가정되지 않는다. 업데이트 블록의 폐쇄는 업데이트 블록이 순차적일 때 단계 360 및 단계 530에 관련하여, 그리고 업데이트 블록이 무순서일 때 단계 540에 관련하여 기술된 유사한 프로세스를 따라 행해진다. 폐쇄는 단계 430에서 새로운 업데이트 블록의 할당을 위해 빈 공간을 만든다.
단계 430: 할당 요청은 주어진 논리 그룹(LGX)에 전용되는 업데이트 블록으로서 새로운 메타블록의 할당에 의해 이행된다. 이어서 프로세스는 단계 510으로 간다.
업데이트 블록에 업데이트 데이터를 기록
단계 510: 요청된 업데이트 섹터는 업데이트 블록의 다음 가용한 물리적 위치에 기록된다. 이어서 프로세스는 업데이트 블록이 폐쇄될 수 있게 되었는지 여부를 판정하기 위해 단계 520으로 진행한다.
업데이트 블록 폐쇄
단계 520: 업데이트 블록이 여전히 추가의 업데이트들을 받아들일 공간을 갖고 있다면, 단계 570로 간다. 그렇지 않다면 단계 522으로 가서 업데이트 블록을 폐쇄한다. 현재 요청된 기입이 블록이 그럴 공간을 갖고 있는 것보다 더 많은 논리 섹터들을 기입하려고 할 때 업데이트 블록을 채우는 2가지 가능한 구현들이 있다. 제 1 구현에서, 기입 요청은 2가지 부분들로 분할되는데, 제 1 부분은 블록의 마지막 물리적 섹터까지 기입하는 것이다. 이어서 블록은 폐쇄되고 기입의 제 2 부분은 다음 요청된 기입으로서 취급될 것이다. 다른 구현에서, 요청된 기입은 블록이 이의 나머지 섹터들을 패딩되게 한 후 폐쇄되는 동안 보류된다. 요청된 기입은 다음 요청된 기입으로서 취급될 것이다.
단계 522: 업데이트 블록이 순차적이면 순차 폐쇄를 위해 단계 530으로 간다. 업데이트 블록이 무순서이면 무순서 폐쇄를 위해서 단계 540으로 간다.
순차 업데이트 블록 폐쇄
단계 530: 업데이트 블록이 순차적이고 충만되었기 때문에, 이에 저장된 논리 그룹은 온전하다. 메타블록은 온전하며 원래의 것을 대체한다. 이때, 원래의 블록은 완전히 폐용이 되며 소거될 수도 있다. 이어서 프로세스는 단계 570로 가서, 주어진 논리 그룹에 대한 업데이트가 끝난다.
무순서 업데이트 블록 폐쇄
단계 540: 업데이트 블록은 비순차적으로 채워지고 어떤 논리 섹터들의 복수의 업데이트들을 내포할 수 있기 때문에, 이에 유효한 데이터를 구하기 위해 가비지 수거가 수행된다. 무순서 업데이트 블록은 압축되거나 합체될 것이다. 어떤 프 로세스가 수행될 것인지는 단계 542에서 결정될 것이다.
단계 542: 압축 또는 합체를 수행하는 것은 업데이트 블록의 악화에 따를 것이다. 논리 섹터가 다수회 업데이트된다면, 이의 논리 어드레스는 매우 악화된다. 업데이트 블록에 기록된 동일 논리 섹터의 복수의 버전들이 있을 것이며 마지막 기록된 버전만이 이 논리 섹터에 유효한 버전이다. 복수의 버전들을 갖는 논리 섹터들을 내포하는 업데이트 블록에서, 구별되는 논리 섹터들의 수는 논리 그룹의 수보다 훨씬 적을 것이다.
바람직한 실시예에서, 업데이트 블록 내 구별되는 논리 섹터들의 수가, 논리 그룹의 크기의 반인 전형적인 값을 갖는 소정의 설계 파라미터 CD를 초과할 때, 폐쇄 프로세스는 단계 550에서 합체를 수행할 것이며, 그렇지 않다면 프로세스는 단계 560에서 압축을 진행할 것이다.
단계 550: 무순서 업데이트 블록이 합체되어야 할 것이라면, 원 블록 및 업데이트 블록은 합체된 데이터를 내포하는 새로운 표준 메타블록에 의해 대체될 것이다. 합체 후에 업데이트 스레드는 단계 570에서 끝날 것이다.
단계 560: 무순서 업데이트 블록이 압축될 것이라면, 압축된 데이터를 갖고 있는 새로운 업데이트 블록에 의해 대체될 것이다. 압축 후에 압축된 업데이트 블록의 처리는 단계 570에서 끝날 것이다. 대안적으로, 압축은 업데이트 블록이 다시 기입될 때까지 지연될 수 있고, 이에 따라 compaction에 이어 개재되는 업데이트들 없이 합체가 이어질 가능성을 제거한다. 새로운 업데이트 블록은 LGX에 업데이트를 위한 다음 요청이 단계 502에서 나타날 때 주어진 논리 블록을 또 업데이트하는데 사용될 것이다.
단계 570: 폐쇄 프로세스가 온전한 업데이트 블록을 생성할 때, 주어진 논리 그룹에 대한 새로운 표준 블록이 된다. 논리 그룹을 위한 업데이트 스레드는 종료될 것이다. 폐쇄 프로세스가 현존 블록을 대체하는 새로운 업데이트 블록을 생성할 때, 새로운 업데이트 블록은 주어진 논리 그룹에 대해 요청된 다음 업데이트를 기록하는데 사용될 것이다. 업데이트 블록이 폐쇄되지 않을 때, 처리는 LGX에서 업데이트를 위한 다음 요청이 단계 310에서 나타날 때 계속할 것이다.
위에 기술된 프로세스로부터 알 수 있는 바와 같이, 무순서 업데이트 블록이 폐쇄될 때, 이에 기록된 업데이트 데이터는 더 처리된다. 특히 이의 유효한 데이터는 또 다른 무순서 블록으로의 압축의 프로세스에 의해서, 또는 이의 연관된 원 블록에 합체로 새로운 표준 순차 블록을 형성하는 프로세스에 의해서 가비지 수거된다.
도 11a는 도 10에 도시된 무순서 업데이트 블록을 폐쇄하는 합체 프로세스를 보다 상세히 도시한 흐름도이다. 무순서 업데이트 블록 합체는 업데이트 블록이 폐쇄되고 있을 때, 예를 들어 업데이트 블록이, 기입된 이 블록의 마지막 물리적 섹터로 모두 채워졌을 때 수행되는 2가지 가능한 프로세스들 중 하나이다. 합체는 블록 내 기입된 구별되는 논리 섹터들의 수가 소정의 설계 파라미터 CD를 초과할 때 선택된다. 도 10에 도시된 합체 프로세스 단계 550은 다음 하위 단계들을 포함한 다.
단계 551: 무순서 업데이트 블록이 폐쇄되고 있을 때, 이를 대체하는 새로운 메트로블록이 할당될 것이다.
단계 552: 모든 폐용 섹터들은 무시하고, 무순서 업데이트 블록 및 이의 연관된 원 블록 중에서 각 논리 섹터의 가장 최신의 버전을 모은다.
단계 554: 모은 유효한 섹터들을 새로운 메타블록에 논리적으로 순차적인 순서로 기록하여 온전한 블록, 즉 순차적인 순서로 기록된 논리 그룹의 모든 논리 섹터들을 가진 블록을 형성한다.
단계 556: 원 블록을 새로운 온전한 블록으로 대체한다.
단계 558: 폐쇄된 업데이트 블록 및 원 블록을 소거한다.
도 11b는 도 10에 도시된 무순서 업데이트 블록을 폐쇄하기 위한 압축 프로세스를 보다 상세히 도시한 흐름도이다. 압축은 블록에 기입된 서로 구별되는 논리 섹터의 개수가 소정의 설계 파라미터 CD 미만일 때 선택된다. 도 10에 도시된 압축 프로세스 단계 560은 다음 하위 단계들을 포함한다.
단계 561: 무순서 업데이트 블록이 압축되고 있을 때, 이를 대체하는 새로운 메타블록이 할당될 것이다.
단계 562: 압축될 현존 무순서 업데이트 블록 중에서 각 논리 섹터의 최신의 버전을 모은다.
단계 564: 모아진 섹터들을 새로운 업데이트 블록에 기록하여 압축된 섹터들 을 갖는 새로운 업데이트 블록을 형성한다.
단계 566: 현존 업데이트 블록을 압축된 섹터들을 갖는 새로운 업데이트 블록으로 대체한다.
단계 568: 폐쇄된 업데이트 블록을 소거한다.
논리 및 메타블록 상태들
도 12a는 논리 그룹의 모든 가능한 상태들, 및 여러 가지 동작들 하에서 이들 간에 가능한 전이(transition)를 도시한 것이다.
도 12b는 논리 그룹의 가능한 상태들을 리스트한 테이블이다. 논리 그룹 상태들은 다음과 같이 정의된다.
1. 온전: 논리 그룹 내 모든 논리 섹터들은 아마도 감싸여진 페이지 태그를 사용하여, 논리적으로 순차적인 순서로 단일 메타블록에 기입되었다.
2. 미기입: 논리 그룹 내 어떠한 논리 섹터도 기입된 적이 없다. 논리 그룹은 그룹 어드레스 테이블에 미기입으로서 마크되고 할당된 메타블록을 갖고 있지 않다. 기정의된 데이터 패턴은 이 그룹 내 모든 섹터에 대해 판독된 호스트에 응하여 리턴된다.
3. 순차적 업데이트: 논리 그룹 내 일부 섹터들은 아마도 페이지 태그를 사용하여, 메타블록에 논리적으로 순차적인 순서로 기입되었으며, 따라서, 이들은 그룹의 임의의 이전의 온전한 상태로부터 대응하는 논리 섹터들을 대체한다.
4. 무순서 업데이트: 논리 그룹 내 일부 섹터들은 아마도 페이지 태그를 사용하여, 메타블록에 논리적으로 비순차적인 순서로 기입되었으며, 따라서, 이들은 그룹의 임의의 이전의 온전한 상태로부터 대응하는 논리 섹터들을 대체한다. 그룹 내 섹터는 최신의 버전이 모든 이전 버전들을 대체하면서, 1회 이상으로 기입될 수도 있다.
도 13a는 메타블록의 모든 가능한 상태들, 및 여러 가지 동작들 하에서 이들 간에 가능한 전이들을 도시한 것이다.
도 13b는 메타블록의 가능한 상태들을 리스트한 테이블이다. 메타블록 상태들은 다음처럼 정의된다.
1. 소거: 메타블록 내 모든 섹터들은 소거된다.
2. 순차 업데이트: 메타블록은 아마도 페이지 태그를 사용하여, 논리적으로 순차적인 순서로 섹터들이 부분적으로 기입된다. 모든 섹터들은 동일 논리 그룹에 속한다.
3. 무순서 업데이트: 메타블록은 논리적으로 비순차적 순서로 섹터들이 부분적으로 또는 전체적으로 기입된다. 임의의 섹터가 1회 이상 기입될 수 있다. 모든 섹터들은 동일 논리 그룹에 속한다.
4: 온전: 메타블록은 아마도 페이지 태그를 사용하여, 논리적으로 순차적인 순서로 전체적으로 기입된다.
5: 원본: 메타블록은 이전에는 온전하였으나 적어도 한 섹터는 호스트 데이터 업데이트에 의해 폐용으로 되었다.
도 14(a) 내지 도 14(j)는 논리 그룹의 상태에 그리고 물리 메타블록에 여러 가지 동작들의 영향을 보인 상태도들이다.
도 14(a)는 제 1 기입 동작을 위한 논리 그룹 및 메타블록 전이들에 대응하는 상태도들을 도시한 것이다. 호스트는 논리적으로 순차적인 순서로 이전에 미기입된 논리 그룹의 하나 이상의 섹터들을 새롭게 할당된 소거된 메타블록에 기입한다. 논리 그룹 및 메타블록은 순차적 업데이트 상태로 간다.
도 14(b)는 제 1 온전 동작을 위한 논리 그룹 및 메타블록 전이들에 대응하는 상태도이다. 이전에 미기입된 순차적인 업데이트 논리 그룹은 모든 섹터들이 호스트에 의해 순차적으로 기입되었을 때 온전하게 된다. 또한, 전이는 나머지 미기입된 섹터들을 기정의된 데이터 패턴으로 채움으로써 그룹을 채운다면 일어날 수 있다. 메타블록은 온전히 된다.
도 14(c)는 제 1 무순서 동작을 위한 논리 그룹 및 메타블록 전이들에 대응하는 상태도이다. 이전에 미기입된 순차적인 업데이트 논리 그룹은 적어도 한 섹터가 호스트에 의해 비순차적으로 기입되었을 때 무순서가 된다.
도 14(d)는 제 1 압축 동작을 위한 논리 그룹 및 메타블록 전이들에 대응하는 상태도이다. 이전에 미기입된 무순서 업데이트 논리 그룹 내 모든 유효한 섹터들은 이전 블록으로부터 새로운 무순서 메타블록에 카피되고, 이 이전 블록은 이어서 소거된다.
도 14(e)는 제 1 합체 동작을 위한 논리 그룹 및 메타블록 전이들에 대응하는 상태도이다. 미기입된 무순서 업데이트 논리 그룹 내 모든 유효한 섹터들은 논리적으로 순차적인 순서로 새롭게 할당된 소거된 블록을 채우기 위해 이전 블록으로부터 옮겨진다. 호스트에 의해 미기입된 섹터들은 기정의된 데이터 패턴으로 채 워진다. 이어서 이전의 무순서 블록은 소거된다.
도 14(f)는 순차 기입 동작을 위한 논리 그룹 및 메타블록 전이들에 대응하는 상태도이다. 호스트는 논리적으로 순차적인 순서로 온전한 논리 그룹의 하나 이상의 섹터들을 새롭게 할당된 소거된 메타블록에 기입한다. 논리 그룹 및 메타블록은 순차적인 업데이트 상태로 간다. 이전에 온전한 메타블록은 원 메타블록이 된다.
도 14(g)는 순차적인 채움 동작을 위해 논리 그룹 및 메타블록 전이들에 대응하는 상태도이다. 순차적인 업데이트 논리 그룹은 모든 이의 섹터들이 순차적으로 호스트에 의해 기입될 때 온전히 된다. 또한, 이것은 순차적인 업데이트 논리 그룹이 온전하게 되게 하기 위해서 원 블록으로부터 유효한 섹터들로 채워질 때 가비지 소거 동안 일어날 수 있고, 그 후에 원 블록은 소거된다.
도 14(h)는 비순차 기입 동작을 위한 논리 그룹 및 메타블록 전이들에 대응하는 상태도이다. 순차 업데이트 논리 그룹은 적어도 한 섹터가 호스트에 의해 비순차적으로 기입될 때 무순서가 된다. 비순차 섹터 기입들은 업데이트 블록 또는 대응하는 원 블록 내 유효한 섹터들이 폐용이 되게 할 수도 있다.
도 14(i)는 압축 동작을 위한 논리 그룹 및 메타블록 전이들에 대응하는 상태도이다. 무순서 논리 그룹 내 모든 유효한 섹터들은 이전 블록으로부터 새로운 무순서 메타블록에 카피되고, 이 이전 블록은 이어서 소거된다. 원 블록은 영향을 받지 않는다.
도 14(j)는 합체 동작을 위한 논리 그룹 및 메타블록 전이들에 대응하는 상 태도이다. 무순서 업데이트 논리 그룹 내 모든 유효한 섹터들은 새롭게 할당된 소거된 블록을 논리적으로 순차적인 순서로 채우기 위해서 이전 무순서 블록 및 원 블록으로부터 카피된다. 이어서 이전 무순서 블록 및 원 블록은 소거된다.
업데이트 블록 추적 및 관리
도 15는 개방된 및 폐쇄된 업데이트 블록들 그리고 할당을 위해 소거된 블록들을 추적하기 위한 할당 블록 리스트(ABL)의 구조의 바람직한 실시예를 도시한 것이다. 할당 블록 리스트(ABL)(610)는 제어기 RAM(130)에 유지되어, 소거된 블록들, 할당된 업데이트 블록들, 연관된 블록들 및 제어 구조들의 할당의 관리를 할 수 있게 하며, 정확한 논리 대 물리 어드레스 변환을 할 수 있게 한다. 바람직한 실시예에서, ABL은 소거된 블록들의 리스트, 개방된 업데이트 블록 리스트(614) 및 폐쇄된 업데이트 블록 리스트(616)를 포함한다.
개방된 업데이트 블록 리스트(614)는 개방된 업데이트 블록의 속성들과 함께 ABL 내 한 세트의 블록 엔트리들이다. 개방된 업데이트 블록 리스트는 현재 개방된 각각의 데이터 업데이트 블록에 대해 하나의 엔트리를 갖는다. 각각의 엔트리는 다음 정보를 유지한다. LG는 현재 업데이트 메타블록이 전용되는 논리 그룹 어드레스이다. 순차/무순서는 업데이트 블록이 순차 또는 무순서 업데이트 데이터로 채워졌는지를 나타내는 상태이다. MB는 업데이트 블록의 메타블록 어드레스이다. 페이지 태그는 업데이트 블록의 제 1 물리적 위치에 기록된 시작 논리 섹터이다. 기입된 섹터들의 수는 업데이트 블록에 현재 기입된 섹터들의 수를 나타낸다. MB0는 연관된 원 블록의 메타블록 어드레스이다. 페이지 Tag0은 연관된 원 블록의 페이지 태그이다.
폐쇄된 업데이트 블록 리스트(616)는 할당 블록 리스트(ABL)의 일부이다. 이것은 폐쇄된 업데이트 블록의 속성들과 함께 ABL 내 한 세트의 블록 엔트리들이다. 폐쇄된 업데이트 블록 리스트는, 폐쇄되었지만 엔트리가 논리 대 주 물리 디렉토리에 업데이트되어 있지 않은 각각의 데이터 업데이트 블록에 대한 한 엔트리를 갖는다. 각각의 엔트리는 다음 정보를 유지한다. LG는 현재 업데이트 블록이 전용되는 논리 그룹 어드레스이다. MB는 업데이트 블록의 메타블록 어드레스이다. 페이지 태그는 업데이트 블록의 제 1 물리적 위치에 기록된 시작 논리 섹터이다. MB0는 연관된 원 블록의 메타블록 어드레스이다.
무순서 블록 색인
순차 업데이트 블록은 논리적으로 순차적인 순서로 저장된 데이터를 가지며, 이에 따라 블록 중에 임의의 논리적 섹터가 쉽게 찾아질 수 있다. 무순서 업데이트 블록은 순서없이 저장된 자신의 논리 섹터들을 가지며 논리적 섹터의 복수의 업데이트 발생들을 저장할 수도 있다. 각 유효 논리 섹터가 무순서 업데이트 블록 내 어디에 위치하여 있는가를 추적하기 위해 추가의 정보가 유지되어야 한다.
바람직한 실시예에서, 무순서 블록 색인 데이터 구조들은 무순서 블록 내 모든 유효한 섹터들의 추적 및 빠른 액세스를 할 수 있게 한다. 무순서 블록 색인은 작은 영역들의 논리 어드레스 공간을 독립적으로 관리하며, 사용자 데이터의 시스 템 데이터 및 핫 영역들을 효율적으로 취급한다. 색인 데이터 구조들은 근본적으로 빈번하지 않은 업데이트 요구조건을 갖고 플래시 메모리에 색인 정보가 유지될 수 있게 하므로 수행은 현저하게 영향을 받지 않는다. 반면, 무순서 블록들 내 최근 기입된 섹터들의 리스트들은 제어기 RAM 내 무순서 섹터 리스트에 유지된다. 또한, 어드레스 변환을 위한 플래시 섹터 액세스들의 수를 최소화하기 위해서 플래시 메모리로부터 색인 정보의 캐시는 제어기 RAM에 유지된다. 각각의 무순서 블록을 위한 색인들은 플래시 메모리 내 무순서 블록 색인(CBI) 섹터들에 저장된다.
도 16a는 무순서 블록 색인(CBI) 섹터의 데이터 필드들을 도시한 것이다. 무순서 블록 색인 섹터(CBI 섹터)는 무순서 업데이트 블록에 맵핑되는 논리 그룹 내 각 섹터에 대한 색인을 내포하며, 무순서 업데이트 블록 또는 이의 연관된 원 블록 내 논리 그룹의 각 섹터의 위치를 정의한다. CBI 섹터는 무순서 블록 내 유효한 섹터들을 추적하기 위한 무순서 블록 색인, 무순서 블록에 대한 어드레스 파라미터들을 추적하기 위한 무순서 블록 정보 필드, 및 CBI 섹터들을 저장하는 메타블록(CBI 블록) 내에 유효 CBI 섹터들을 추적하기 위한 섹터 색인 필드를 포함한다.
도 16b는 무순서 블록 색인(CBI) 섹터들이 전용의 메타블록에 기록되는 예를 도시한 것이다. 전용의 메타블록은 CBI 블록(620)이라 언급될 것이다. CBI 섹터가 업데이트될 때, CBI 블록(620) 내 다음 가용한 물리 섹터 위치에 기입된다. 그러므로 CBI 섹터의 복수의 카피들이 CBI 블록 내 존재할 수 있고, 단지 마지막 기입된 카피만이 유효하다. 예를 들면 논리 그룹 LG1에 대한 CBI 섹터는 3회 업데이트되었 으며 최신 버전이 유효한 것이다. CBI 블록 내 각각의 유효한 섹터의 위치는 블록 내 마지막 기입된 CBI 섹터에 한 세트의 색인들에 의해 확인된다. 이 예에서, 블록에 마지막 기입된 CBI 섹터는 LG136에 대한 CBI 섹터이며 이의 한 세트의 색인들은 모든 이전 것들을 대체하는 유효한 것이다. CBI 블록이 종국에 CBI 섹터들로 모두 채워지게 되었을 때, 블록은 모든 유효한 섹터들을 새로운 블록 위치에 재기입함으로써 제어 기입 동작 동안 압축된다. 이어서 전체 블록은 소거된다.
CBI 섹터 내 무순서 블록 색인 필드는 논리 그룹 또는 무순서 업데이트 블록에 맵핑되는 하위-그룹 내 각 논리 섹터에 대한 색인 엔트리를 내포한다. 각 색인 엔트리는 대응하는 논리 섹터에 대한 유효한 데이터가 위치되는 무순서 업데이트 블록 내 오프셋을 나타낸다. 유보된 색인 값은 논리 섹터에 대한 어떠한 유효한 데이터도 무순서 업데이트 블록에 존재하지 않으며 연관된 원 블록 내 대응하는 섹터가 유효함을 나타낸다. 일부 무순서 블록 색인 필드 엔트리들의 캐시는 제어기 RAM에 유지된다.
CBI 섹터 내 무순서 블록 정보 필드는 시스템 내 존재하는, 블록에 대한 어드레스 파라미터 정보를 기록하는 각각의 무순서 업데이트 블록에 대한 한 엔트리를 내포한다. 이 필드 내 정보는 CBI 블록 내 마지막 기입된 섹터에서만 유효하다. 이 정보는 RAM에 데이터 구조들에도 있다.
각 무순서 업데이트 블록에 대한 엔트리는 3개의 어드레스 파라미터들을 포함한다. 첫 번째는 무순서 업데이트 블록에 연관된 논리 그룹(또는 논리 그룹 번 호)의 논리 어드레스이다. 두 번째는 무순서 업데이트 블록의 메타블록 어드레스이다. 세 번째는 무순서 업데이트 블록에 기입된 마지막 섹터의 물리 어드레스 오프셋이다. 오프셋 정보는 초기화 동안 무순서 업데이트 블록의 스캐닝을 하기 위한 시작 지점을 설정하여, RAM에 데이터 구조들을 재구축한다.
섹터 색인 필드는 CBI 블록 내 각각의 유효한 CBI 섹터에 대한 엔트리를 내포한다. 이것은 각각의 허용된 무순서 업데이트 블록에 관계된 가장 최근 기입된 CBI 섹터들이 위치된 CBI 블록 내 오프셋들을 정의한다. 색인 내 오프셋의 유보된 값은 허용된 무순서 업데이트 블록이 존재하지 않음을 나타낸다.
도 16c는 무순서 업데이트되는 주어진 논리 그룹의 논리 섹터의 데이터에의 액세스를 도시한 흐름도이다. 업데이트 프로세스 동안에, 업데이트 데이터는 무순서 업데이트 블록에 기록되고 반면에 변경되지 않은 데이터는 논리 그룹에 연관된 원 메타블록에 남아 있는다. 무순서 업데이트 하에 논리 그룹의 논리 섹터에 액세스하는 프로세스는 다음과 같다.
단계 650: 주어진 논리 그룹의 주어진 논리 섹터를 찾기를 시작한다.
단계 652: CBI 블록 내 마지막 기입된 CBI 섹터를 찾는다.
단계 654: 마지막 기입된 CBI 섹터의 무순서 블록 정보 필드를 조회함으로써 주어진 논리 그룹에 연관된 무순서 업데이트 블록 또는 원 블록을 찾는다. 이 단계는 단계 662 바로 전 임의의 시간에 수행될 수 있다.
단계 658: 마지막 기입된 CBI 섹터가 주어진 논리 그룹에 관계된다면, CBI 섹터가 찾아진다. 단계 662로 진행하며, 그렇지 않다면 단계 660으로 진행한다.
단계 660: 마지막 기입된 CBI 섹터의 섹터 색인 필드를 조회함으로써 주어진 논리 그룹에 대한 CBI 섹터를 찾는다.
단계 662: 찾아진 CBI 섹터의 무순서 블록 색인 필드를 조회함으로써 무순서 블록 또는 원 블록 중에서 주어진 논리 섹터를 찾는다.
도 16d는 논리 그룹이 하위 그룹들로 분할된 대안적 실시예에 따라, 무순서 업데이트되는 주어진 논리 그룹의 논리 섹터의 데이터에의 액세스를 도시한 흐름도이다. CBI 섹터의 유한한 용량은 소정의 최대 개수의 논리 섹터만을 추적할 수 있다. 논리 그룹이 단일 CBI 섹터가 취급할 수 있는 것보다 더 많은 논리 섹터들을 가질 때, 논리 그룹은 복수의 하위 그룹들로 분할되고 CBI 섹터는 각 하위 그룹에 할당된다. 일 예에서, 각 CBI 섹터는 256 섹터들과 최대 8개의 무순서 블록들로 구성된 논리 그룹을 추적하기 위한 충분한 용량을 갖는다. 논리 그룹이 256 섹터들을 초과하는 크기를 갖는다면, 논리 그룹 내 256 섹터의 하위 그룹에 대해 별도의 CBI 섹터가 존재한다. 논리 그룹 내 최대 8개의 하위 그룹들에 대해 CBI 섹터들이 존재하여, 크기가 최대 2048 섹터들까지의 논리 그룹들에 대해 지원을 제공한다.
바람직한 실시예에서, 색인의 관리를 용이하게 하기 위해서 간접 색인 방법이 채용된다. 섹터 색인의 각 엔트리는 직접 및 간접 필드들을 갖는다.
직접 섹터 색인은 특정 무순서 업데이트 블록에 관계된 모든 가능한 CBI 섹터들이 위치되는 CBI 블록 내 오프셋들을 정의한다. 이 필드 내 정보는 이 특정의 무순서 업데이트 블록에 관계된 마지막 기입된 CBI 섹터에서만 유효하다. 색인 내 오프셋의 유보된 값은 무순서 업데이트 블록에 관계된 대응하는 논리 하위 그룹이 존재하지 않기 때문에, 또는 업데이트 블록이 할당되어 있지 않아 업데이트되지 않았기 때문에 존재하지 않음을 나타낸다.
간접 섹터 색인은 각 허용된 무순서 업데이트 블록에 관계된 가장 최근 기입된 CBI 섹터들이 위치된 CBI 블록 내 오프셋들을 정의한다. 색인에 오프셋의 유보된 값은 허용된 무순서 업데이트 블록이 존재하지 않음을 나타낸다.
도 16d는 다음과 같이 무순서 업데이트 하의 논리 그룹의 논리 섹터에 액세스하는 프로세스를 도시한 것이다.
단계 670: 각 논리 그룹을 복수의 하위 그룹들로 분할하고 각 하위 그룹에 CBI 섹터를 할당한다.
단계 680: 주어진 논리 그룹의 주어진 하위 그룹의 주어진 논리 섹터를 찾기를 시작한다.
단계 682: CBI 블록 내 마지막 기입된 CBI 섹터를 찾는다.
단계 684: 마지막 기입된 CBI 섹터의 무순서 블록 정보 필드를 조회함으로써 주어진 하위 그룹에 연관된 무순서 업데이트 블록 또는 원 블록을 찾는다. 이 단계는 단계 696 바로 전 임의의 시간에 수행될 수 있다.
단계 686: 마지막 기입된 CBI 섹터가 주어진 논리 그룹에 관계된다면, 단계 691로 진행하며, 그렇지 않다면 단계 690으로 진행한다.
단계 690: 마지막 기입된 CBI 섹터의 간접 섹터 색인 필드를 조회함으로써 주어진 논리 그룹에 대한 마지막 기입된 복수의 CBI 섹터들을 찾는다.
단계 691: 주어진 논리 그룹에 대한 하위 그룹들 중 하나에 연관된 적어도 CBI 섹터가 찾아졌다. 계속한다.
단계 692: 찾아진 CBI 섹터가 주어진 하위 그룹에 관계되었다면, 주어진 하위 그룹에 대한 CBI 섹터가 찾아진다. 단계 696으로 진행한다. 그렇지 않다면, 단계 694로 진행한다.
단계 694: 현재 찾아진 CBI 섹터의 직접 섹터 색인 필드를 조회함으로써 주어진 하위 그룹에 대한 CBI 섹터를 찾는다.
단계 696: 주어진 하위 그룹에 대한 CBI 섹터의 무순서 블록 색인 필드를 조회함으로써 무순서 블록 또는 원 블록 중에서 주어진 논리 섹터를 찾는다.
도 16e는 각각의 논리 그룹이 복수의 하위 그룹들로 분할되는 실시예에 있어서 무순서 블록 색인(CBI) 섹터들 및 이들의 기능들의 예들을 도시한 것이다. 논리 그룹(700)은 원래는 원 메타블록(702)에 저장된 자신의 온전 데이터를 갖는다. 이어서 논리 그룹에는 전용의 무순서 업데이트 블록(704)을 할당하는 업데이트들이 행해진다. 현 예에서, 논리 그룹(700)은 하위 그룹들로 분할되며 이러한 하위 그룹 A, B, C, D 각각은 256 섹터들을 갖는다.
하위 그룹 B에서 i번째 섹터를 찾기 위해서, CBI 블록(620)에 마지막 기입된 CBI 섹터가 먼저 찾아진다. 마지막 기입된 CBI 섹터의 무순서 블록 정보 필드는 주어진 논리 그룹에 대한 무순서 업데이트 블록(704)을 찾기 위해 어드레스를 제공한다. 동시에 이것은 무순서 블록에 기입된 마지막 섹터의 위치를 제공한다. 이 정보는 색인들을 스캐닝하고 재구축하는 경우 유용하다.
마지막 기입된 CBI 섹터가 주어진 논리 그룹의 4개의 CBI 섹터들 중 하나인 것으로 판명되면, 이것은 이것이 정확히, i번째 논리 섹터를 내포하는 주어진 하위 그룹 B에 대한 CBI 섹터인지 더 판정될 것이다. 그러하다면, CBI 섹터의 무순서 블록 색인은 i번째 논리 섹터에 대한 데이터를 저장하기 위한 메타블록 위치를 가리킬 것이다. 섹터 위치는 무순서 업데이트 블록(704) 또는 원 블록(702)에 있을 수도 있을 것이다.
마지막 기입된 CBI 섹터가 주어진 논리 그룹의 4개의 CBI 섹터들 중 하나인 것으로 판명되었으나 정확히 하위 그룹(B)에 대한 것은 아니라면, 이의 직접 섹터 색인이 조회되어 하위 그룹 B에 대한 CBI 섹터를 찾는다. 일단 이 정확한 CBI 섹터가 찾아지면, 이의 무순서 블록 색인이 조회되어 무순서 업데이트 블록(704) 및 원 블록(702) 중에서 i번째 논리 섹터를 찾는다.
마지막 기입된 CBI 섹터가 주어진 논리 그룹의 4개의 CBI 섹터들 중 어느 하나도 아닌 것으로 판명되면, 이의 간접 섹터 색인이 조회되어 4개 중 하나를 찾는다. 도 16e에 도시된 예에서, 하위 그룹 C에 대한 CBI 섹터가 찾아진다. 이어서 하위 그룹 C에 대한 이 CBI 섹터는 하위 그룹 B에 대한 정확한 CBI 섹터를 찾기 위해 조회된 자신의 직접 섹터 색인을 갖는다. 예는 그의 무순서 블록 색인이 조회될 때, i번째 논리 섹터는 변경되지 않은 것으로 발견되고 이의 유효한 데이터는 원 블록에서 찾아질 것임을 보여준다.
유사한 고찰이 주어진 논리 그룹의 하위 그룹 C에 j 번째 논리 섹터를 찾는데 적용된다. 예는 마지막 기입된 CBI 섹터가 주어진 논리 그룹의 4개의 CBI 섹터들 중 어느 하나도 아닌 것으로 판명됨을 보여준다. 이의 간접 섹터 색인은 주어진 그룹에 대한 4개의 CBI 섹터들 중 하나를 가리킨다. 가리켜진 4개 중 마지막 기입된 것은 정확히 하위 그룹 C에 대한 CBI 섹터인 것으로 판명된다. 이의 무순서 블록 색인이 조회되었을 때, 7번째 논리 섹터는 무순서 업데이트 블록(704)에 지정된 위치에 위치된 것으로 발견된다.
무순서 섹터들의 리스트는 시스템 내 각각의 무순서 업데이트 블록에 대해 제어기 RAM에 존재한다. 각각의 리스트는 관계된 CBI 섹터가 플래시 메모리에 마지막 업데이트되었기 때문에 무순서 업데이트 블록에 기입된 섹터들의 기록을 내포한다. 무순서 섹터 리스트에 유지될 수 있는 특정 무순서 업데이트 블록에 대한 논리 섹터 어드레스들의 수는 8 내지 16의 전형적인 값을 갖는 설계 파라미터이다. 리스트의 최적 크기는 이것이 무순서 데이터-기입 동작들에 대한 오버헤드에의 영향과 초기화 동안 섹터 스캐닝 시간간에 절충으로서 결정된다.
시스템 초기화 동안, 각각의 무순서 업데이트 블록은 이의 연관된 CBI 섹터들 중 하나의 이전 업데이트 이후에 기입된 유효한 섹터들을 확인하기 위해 필요한 것으로서 스캐닝된다. 각 무순서 업데이트 블록에 대한 제어기 RAM 내 무순서 섹터 리스트가 구성된다. 각각의 블록은 마지막 기입된 CBI 섹터에 그의 무순서 블록 정보 필드에 정의된 마지막 섹터 어드레스로부터 스캐닝되는 것만을 필요로 한다.
무순서 업데이트 블록이 할당될 때, CBI 섹터는 모든 업데이트된 논리 하위 그룹들에 대응하여 기입된다. 무순서 업데이트 블록에 대한 논리 및 물리 어드레스들은 무순서 블록 색인 필드에 눌(null) 엔트리들을 갖고, 섹터 내 가용 무순서 블록 정보 필드에 기입된다. 무순서 섹터 리스트는 제어기 RAM에서 개방된다.
무순서 업데이트 블록이 폐쇄될 때, 섹터 내 무순서 블록 정보 필드에서 제거된 블록의 논리 및 물리 어드레스들에 CBI 섹터가 기입된다. RAM 내 대응하는 무순서 섹터 리스트는 미사용이 된다.
제어기 RAM 내 대응하는 무순서 섹터 리스트는 무순서 업데이트 블록에 기입된 섹터들의 기록들을 포함하게 수정된다. 제어기 RAM 내 무순서 섹터 리스트가, 무순서 업데이트 블록에 추가의 섹터 기입들의 기록들을 위한 가용한 공간이 없을 때, 업데이트된 CBI 섹터들은 리스트에 섹터들에 관계된 논리 하위 그룹들에 대해 기입되고 리스트는 클리어된다.
CBI 블록(620)이 완전히 채워지게 되었을 때, 유효한 CBI 섹터들은 할당된 소거된 블록에 카피되고, 이전 CBI 블록은 소거된다.
어드레스 테이블들
도 2에 도시된 논리 대 물리 어드레스 변환 모듈(140)은 호스트의 논리 어드레스를 플래시 메모리 내 대응하는 물리 어드레스에 관계시키기 위한 것이다. 논리 그룹들과 물리 그룹들(메타블록들)간에 맵핑은 비휘발성 플래시 메모리(200) 그리고 휘발성이지만 더 고속의 RAM(130)(도 1 참조) 중에 분포된 한 세트의 테이블 및 리스트들에 저장된다. 어드레스 테이블은 메모리 시스템 내 모든 논리 그룹에 대한 메타블록 어드레스를 포함하여, 플래시 메모리에 유지된다. 또한, 최근 기입된 섹터들에 대한 논리 대 물리 어드레스 기록들은 임시로 RAM에 유지된다. 이들 휘발성 기록들은 시스템이 기동후 초기화되었을 때 플래시 메모리 내에 블록 리스트들 및 데이터 섹터 헤더들로부터 재구성될 수 있다. 이에 따라, 플래시 메모리 내 어드레 스 테이블은 단지 드물게만 업데이트될 필요가 있어, 제어 데이터에 대한 낮은 퍼센티지의 오버헤드 기입 동작들에 이르게 한다.
논리 그룹들에 대한 어드레스 기록들의 계층은 개방된 업데이트 블록 리스트, RAM 내 폐쇄된 업데이트 블록 리스트, 및 플래시 메모리에 유지된 그룹 어드레스 테이블(GAT)를 포함한다.
개방된 업데이트 블록 리스트는 업데이트된 호스트 섹터 데이터를 기입하기 위해 현재 개방된 데이터 업데이트 블록들의 제어기 RAM 내 리스트이다. 블록에 대한 엔트리는 블록이 폐쇄될 때 폐쇄된 업데이트 블록 리스트로 옮겨진다. 폐쇄된 업데이트 블록 리스트는 폐쇄된 데이터 업데이트 블록들의 제어기 RAM 내 리스트이다. 리스트 내 엔트리들의 일부는 제어 기입 동작 동안 그룹 어드레스 테이블 내 섹터로 옮겨진다.
그룹 어드레스 테이블(GAT)은 메모리 시스템 내 호스트 데이터의 모든 논리 그룹들에 대한 메타블록 어드레스들의 리스트이다. GAT는 논리 어드레스에 따라 순차적 순서로 된, 각 논리 그룹에 대한 한 엔트리를 포함한다. GAT내 n번째 엔트리는 어드레스 n을 가진 논리 그룹에 대한 메타블록 어드레스를 내포한다. 바람직한 실시예에서, 이것은 메모리 시스템 내 모든 논리 그룹에 대한 메타블록 어드레스들을 정의하는 엔트리들과 함께 한 세트의 섹터들(GAT 섹터들이라 함)을 포함하는, 플래시 메모리 내 테이블이다. GAT 섹터들은 플래시 메모리 내 하나 이상의 전용 제어 블록들(GAT 블록들이라 함)에 위치된다.
도 17a는 그룹 어드레스 테이블(GAT) 섹터의 데이터 필드들을 도시한 것이 다. GAT 섹터는 예를 들면 한 세트의 128개의 연속한 논리 그룹들에 대한 GAT 엔트리들을 포함하는데 충분한 용량을 가질 수 있다. 각각의 GAT 섹터는 2개의 성분들, 즉 한 범위 내 각 논리 그룹의 메타블록 어드레스에 대한 한 세트의 GAT 엔트리들, 및 GAT 섹터 색인을 포함한다. 제 1 성분은 논리 어드레스에 연관된 메타블록을 찾기 위한 정보를 포함한다. 제 2 성분은 GAT 블록 내 모든 유효한 GAT 섹터들을 찾기 위한 정보를 포함한다. 각 GAT 엔트리는 3개의 필드들, 즉 메타블록 번호, 도 3a(iii)에 관련하여 앞에서 정의된 바와 같은 페이지 태그, 및 메타블록이 다시 링크되었는지를 나타내는 플래그를 갖는다. GAT 섹터 색인은 GAT 블록 내 유효한 GAT 섹터들의 위치들을 리스트한다. 이 색인은 모든 GAT 섹터에 있으나 GAT 블록 내 다음 기입된 GAT 섹터의 버전에 의해 대체된다. 이에 따라서, 마지막 기입된 GAT 섹터 내 버전만이 유효하다.
도 17b는 그룹 어드레스 테이블(GAT) 섹터들이 하나 이상의 GAT 블록에 기록되는 예를 도시한 것이다. GAT 블록은 GAT 섹터들을 기록하는데 전용되는 메타블록이다. GAT 섹터가 업데이트될 때, 이것은 GAT 블록(720) 내 다음 가용한 물리적 섹터 위치에 기입된다. 그러므로 GAT 섹터의 복수의 카피들이 GAT 블록에 존재하며, 마지막 기입된 카피만이 유효하다. 예를 들면, GAT 섹터(255)(논리 그룹들(LG3968 ~ LG4098)에 대한 포인터들을 포함하는)는 적어도 2회 업데이트 되었으며 최신 버전이 유효한 것이다. GAT 블록에 각각의 유효한 섹터의 위치는 블록 내 마지막 기입된 GAT 섹터 내 한 세트의 색인들에 의해 확인된다. 이 예에서, 블록 내 마지막 기입 된 GAT 섹터는 GAT 섹터(236)이며 이의 한 세트의 색인들은 모든 이전 것들을 대체하는 유효한 색인이다. GAT 블록이 결국에 GAT 섹터들로 완전히 채워지게 되었을 때, 블록은 모든 유효한 섹터들을 새로운 블록 위치에 재기입함으로써 제어 기입 동작 동안 압축된다. 이어서 전체 블록은 소거된다.
전에 기술된 바와 같이, GAT 블록은 논리 어드레스 공간의 영역에 논리적으로 연속한 한 세트의 그룹들에 대한 엔트리들을 내포한다. GAT 블록 내 GAT 섹터들 각각은 128개의 연속한 논리 그룹들에 대한 논리 대 물리 맵핑 정보를 내포한다. GAT 블록에 의해 걸친 어드레스 범위 내에 모든 논리 그룹들에 대한 엔트리들을 저장하는데 요구되는 GAT 섹터들의 수는 블록 내 총 섹터 위치들의 일부만을 점유한다. 그러므로 GAT 섹터는 이를 블록 내 다음 가용한 섹터 위치에 기입함으로써 업데이트될 수 있다. 모든 유효한 GAT 섹터들 및 GAT 블록에 이들 섹터들의 위치의 색인은 가장 최근 기입된 GAT 섹터에 색인 필드에 유지된다. 유효한 GAT 섹터들에 의해 점유되는 GAT 블록에 총 섹터들의 부분은 전형적으로 25%인 시스템 설계 파라미터이다. 그러나, GAT 블록당 최대 64개의 유효한 GAT 섹터들이 있다. 큰 논리적 용량을 가진 시스템들에서, 하나 이상의 GAT 블록에 GAT 섹터들을 저장하는 것이 필요할 수 있다. 이 경우, 각 GAT 블록은 고정된 한 범위의 논리 그룹들에 연관된다.
GAT 업데이트는 제어 기입 동작의 부분으로서 수행되며, 이것은 ABL이 할당을 위한 블록들을 모두 사용하였을 때 유발된다(도 18 참조). 이것은 ABL 채움 및 CBL 비움 동작들과 동시에 수행된다. GAT 업데이트 동작 동안, 한 GAT 섹터는 폐쇄 된 업데이트 블록 리스트 내 대응하는 엔트리들로부터 정보로 업데이트된 엔트리들을 갖는다. GAT 엔트리가 업데이트될 때, 임의의 대응하는 엔트리들은 폐쇄된 업데이트 블록 리스트(CUBL)로부터 제거된다. 예를 들면, 업데이트될 GAT 섹터는 폐쇄된 업데이트 블록 리스트 내 제 1 엔트리에 기초하여 선택된다. 업데이트된 섹터는 GAT 블록 내 다음 가용한 섹터 위치에 기입된다.
GAT 재기입 동작은 업데이트된 GAT 섹터에 대해 어떠한 섹터 위치도 얻어질 수 없을 때 제어 기입 동작 동안 일어난다. 새로운 GAT 블록이 할당되고, GAT 색인에 의해 정의된 유효한 GAT 섹터들은 충만된 GAT 블록으로부터 순차적인 순서로 카피된다. 충만된 GAT 블록은 이어서 소거된다.
GAT 캐시는 GAT 섹터 내 128개의 엔트리들의 세분할에 엔트리들의, 제어기 RAM(130) 내 카피이다. GAT 캐시 엔트리들의 수는 32의 전형적인 값을 갖는 시스템 설계 파라미터이다. 엔트리가 GAT 섹터로부터 읽혀질 때마다 관계된 섹터 세분할을 위한 GAT 캐시가 생성된다. 복수의 GAT 캐시들이 유지된다. 수는 4의 전형적인 값을 갖는 설계 파라미터이다. GAT 캐시는 최근 최소 사용된 것에 기초하여 상이한 섹터 세분할에 대한 엔트리로 덮어써진다.
소거된 메타블록 관리
도 2에 도시된 소거 블록 관리자(160)는 디렉토리 및 시스템 제어 정보를 유지하기 위한 한 세트의 리스트들을 사용하여 소거 블록들을 관리한다. 이들 리스트들은 제어기 RAM(130) 및 플래시 메모리(200) 중에 분포된다. 소거된 메타블록이 사용자 데이터의 저장을 위해, 또는 시스템 제어 데이터 구조들의 저장을 위해 할 당되어야 할 때, 제어기 RAM에 유지된 할당 블록 리스트(ABL)(도 15 참조) 내 다음 가용 메타블록 번호가 선택된다. 유사하게, 메타블록이 폐기된 후에 소거될 때, 이의 번호가 제어기 RAM에 역시 유지된 클리어된 블록 리스트(CBL)에 추가된다. 상대적으로 정적인 디렉토리 및 시스템 제어 데이터는 플래시 메모리에 저장된다. 이들은 소거된 블록 리스트들, 그리고 플래시 메모리에 모든 메타블록들의 소거된 상태를 리스트한 비트맵(MAP)을 포함하다. 소거된 블록 리스트들 및 MAP은 개개의 섹터들에 저장되고 MAP 블록으로서 알려진 전용 메타블록에 기록된다. 제어기 RAM 및 플래시 메모리 중에 분포된 이들 리스트들은 소거된 메타블록 사용을 효율적으로 관리하기 위해, 소거된 블록 기록들의 계층을 제공한다.
도 18은 소거된 블록들의 사용 및 리사이클링을 위해 제어 및 디렉토리 정보의 분포 및 흐름을 도시한 개략적 블록도이다. 제어 및 디렉토리 데이터는 제어기 RAM(130)에 유지된, 또는 플래시 메모리(200)에 있는 MAP 블록(750)에 유지된 리스트들에 유지된다.
바람직한 실시예에서, 제어기 RAM(130)은 할당 블록 리스트(ABL)(610) 및 클리어된 블록 리스트(CBL)(740)를 유지한다. 도 15에 관련하여 앞에서 기술된 바와 같이, 할당 블록 리스트(ABL)는 사용자 데이터의 저장을 위해서, 또는 시스템 제어 데이터 구조들의 저장을 위해서 어떤 메타블록들이 최근이 할당되었는지를 추적한다. 새로운 소거된 메타블록이 할당될 필요가 있을 때, 할당 블록 리스트(ABL)에 다음 가용 메타블록 번호가 선택된다. 유사하게, 할당해제 및 소거된 업데이트 메타블록들을 추적하기 위해, 클리어된 블록 리스트(CBL)가 사용된다. 비교적 활동적 인 업데이트 블록들을 추적할 때 빠른 액세스 및 용이한 조작을 위해서 ABL 및 CBL이 제어기 RAM(130)(도 1 참조)에 유지된다.
할당 블록 리스트(ABL)는 소거된 메타블록 풀(pool)을, 그리고 업데이트 블록이 되게, 소거된 메타블록들의 할당을 추적한다. 이에 따라, 이들 메타블록들 각각은 이것이 ABL 미결 할당에서 소거된 블록인지, 개방된 업데이트 블록인지, 아니면 폐쇄된 업데이트 블록인지를 나타내는 속성에 의해 기술될 수 있다. 도 18은 소거된 ABL 리스트(612), 개방된 업데이트 블록 리스트(614), 및 폐쇄된 업데이트 블록 리스트(616)를 포함하는 ABL을 도시한 것이다. 또한, 연관된 원 블록 리스트(615)는 개방된 업데이트 블록 리스트(614)에 연관된다. 마찬가지로, 연관된 소거된 원 블록 리스트(617)는 폐쇄된 업데이트 블록 리스트에 연관된다. 전에 도 15에 도시된 바와 같이, 이들 연관된 리스트들은 각각 개방된 업데이트 블록 리스트(614) 및 폐쇄된 업데이트 블록 리스트(616)의 일부이다. 소거된 ABL 블록 리스트(612), 개방된 업데이트 블록 리스트(614), 및 폐쇄된 업데이트 블록 리스트(616)는 모두, 할당 블록 리스트(ABL)(61)의 일부분들이며, 각각에 엔트리들은 대응하는 속성을 각각 갖는다.
MAP 블록(750)은 플래시 메모리(200)에 소거 관리 기록들을 저장하는데 전용되는 메타블록이다. MAP 블록은 MAP 블록 섹터들의 시계열을 저장하며, 각각의 MAP 섹터는 소거 블록 관리(EBM) 섹터(760) 또는 MAP 섹터(780)이다. 소거된 블록들은 할당에 모두 사용되고 그리고 메타블록이 폐기되었을 때는 리사이클되기 때문에, 연관된 제어 및 디렉토리 데이터는 바람직하게는 MAP 블록 내 업데이트될 수 있는 논리 섹터에 포함되며, 업데이트 데이터의 각각의 경우는 새로운 블록 섹터에 기록된다. EBM 섹터들(760) 및 MAP 섹터들(780)의 복수의 카피들이 MAP 블록(750)에 존재할 수 있고, 최신의 버전만이 유효하다. 유효한 MAP 섹터들의 위치들에의 색인은 EMB 블록 내 필드에 내포된다. 유효한 EMB 섹터는 제어 기입 동작 동안 MAP 블록에 마지막으로 항시 기입된다. MAP 블록(750)이 충만되었을 때, 모든 유효한 섹터들을 새로운 블록 위치에 재기입함으로써 제어 기입 동작 동안 압축된다. 충만된 블록은 이어서 소거된다.
각각의 EBM 섹터(760)는 소거된 블록 리스트들(EBL)(770)을 내포하며, 이들은 모집단의 소거된 블록들의 일부의 어드레스들의 리스트들이다. 소거된 블록 리스트들(EBL)(770)은 소거된 메타블록 번호들을 내포하는 버퍼로서 작용하며, 이로부터 메타블록 번호들이 주기적으로 취해져 ABL를 다시 채우고, 이에 메타블록번호들이 주기적으로 추가되어 CBL을 다시 비운다. EBL(770)은 가용 블록 버퍼(ABB)(772), 소거된 블록 버퍼(EBB)(774) 및 클리어된 블록 버퍼(EBB)(776)을 위한 버퍼들로서 기능한다.
가용 블록 버퍼(ABB)(772)는 이전의 ABL 채움 동작에 바로 이어 ABL(610)에 엔트리들의 카피를 내포한다. 이것은 사실상 ABL 채움 동작 바로 후에 ABL의 백업 카피이다.
소거된 블록 버퍼(EBB)(774)는, MAP 섹터들(780) 또는 CBB 리스트(776)(후술함)로부터 이전에 전송되었고 ABL 채움 동작 동안 ABL(610)에 전송을 위해 사용할 수 있는 소거된 블록 어드레스들을 내포한다.
클리어된 블록 버퍼(CBB)(776)는, CBL 비움 동작 동안 CBL(740)로부터 전송되었고 이어서 MAP 섹터들(78)에 또는 EBB 리스트(774)에 전송될 소거된 블록들의 어드레스들을 내포한다.
MAP 섹터들(780)의 각각은 MAP이라고 하는 비트맵 구조를 내포한다. MAP은 플래시 메모리 내 각 메타블록에 대해 일 비트를 사용하는데, 이것은 각 블록의 소거 상태를 나타내는데 사용된다. ABL, CBL에 리스트된 블록 어드레스들, 또는 EBM 섹터 내 소거된 블록 리스트들에 대응하는 비트들은 MAP에 소거된 상태로 설정되지 않는다.
유효한 데이터 구조들을 내포하지 않으며, MAP, 소거된 블록 리스트들, ABL 또는 CBL 내에 소거된 블록으로서 지정되지 않은 어떠한 블록도 블록 할당 알고리즘에 의해 결코 사용되지 않으며, 따라서 호스트 또는 제어 데이터 구조들의 저장을 위해 액세스될 수 없다. 이것은 액세스될 수 있는 플래시 메모리 어드레스 공간으로부터 결함이 있는 위치들을 가진 블록들을 배제시키는 간단한 메커니즘을 제공한다.
도 18에 도시된 계층은 소거된 블록 기록들이 효율적으로 관리될 수 있게 하며 제어기의 RAM에 저장된 블록 어드레스 리스트들의 완전한 보호를 제공한다. 소거된 블록 엔트리들은 덜 빈번한가에 따라, 이들 블록 어드레스 리스트들과 하나 이상의 MAP 섹터들(780)간에 교환된다. 이들 리스트들은 파워-다운 후에 시스템 초기화 동안에, 플래시 메모리에 섹터들에 저장된 소거된 블록 리스트들 및 어드레스 변환 테이블들, 그리고 플래시 메모리에 적은 수의 참조된 데이터 블록들의 제한된 스캐닝을 통해서, 재구성될 수 있다.
소거된 메타블록 기록들의 계층을 업데이트하기 위해 채택된 알고리즘들은 블록들이 호스트에 의해 업데이트되었던 순서를 반영하는 CBL(740)로부터 한 집단의 블록 어드레스들로 MAP 블록(750)으로부터 어드레스 순서로 한 집단의 블록들을 인터리브하는 순서로 사용을 위해, 소거된 블록들을 할당한다. 대부분의 메타블록 크기들 및 시스템 메모리 용량들에 대해서, 단일 MAP 섹터는 시스템에 모든 메타블록들에 대한 비트맵을 제공할 수 있다. 이 경우, 소거된 블록들은 이 MAP 섹터에 기록된 어드레스 순서로 사용을 위해 항시 할당된다.
소거 블록 관리 동작들
앞에서 기술된 바와 같이, ABL(610)은 사용을 위해 할당될 수 있는 소거된 메타블록들, 및 데이터 업데이트 블록들로서 최근 할당된 메타블록들에 대한 어드레스 엔트리들을 가진 리스트이다. ABL 내 블록 어드레스들의 실제 수는 시스템 설계 변수들인 최상한과 최하한 사이에 있다. 제조 동안 포맷되는 ABL 엔트리들의 수는 카드 유형과 용량의 함수이다. 또한, ABL에 엔트리들의 수는 가용한 소거된 블록들의 수가 수명 동안 블록들의 장애에 의해 감소될 때, 시스템의 수명의 끝 근처에서 감소될 수도 있다. 예를 들면, 채움 동작 후에, ABL에 엔트리들은 다음 목적들을 위해 가용한 블록들을 지정할 수도 있다. 블록당 한 엔트리를 가진 부분적으로 기입된 데이터 업데이트 블록들에 대한 엔트리들, 최대 동시 개방된 업데이트 블록들에 대한 시스템 제한을 초과하지 않는다. 데이터 업데이트 블록들로서 할당을 위해 소거된 블록들에 대한 1 내지 12 엔트리들 사이. 제어 블록들로서 할당을 위해 소거된 블록들에 대한 4개의 엔트리들.
ABL 채움 동작
ABL(610)이 할당들을 통해 격감됨에 따라, 다시 채워질 필요가 있을 것이다. ABL를 채우는 동작은 제어 기입 동작 동안 일어난다. 이것은 블록이 할당되어야 할 때 시작되나, ABL은 데이터 업데이트 블록으로서, 또는 이외 얼마간의 제어 데이터 업데이트 블록에 대해, 할당을 위해 가용한 불충분한 소거된 블록 엔트리들을 내포한다. 제어 기입동안, ABL 채움 동작은 GAT 업데이트 동작과 동시에 행해진다.
다음 동작들은 ABL 채움 동작 동안 행해진다.
1. 현재 데이터 업데이트 블록들의 속성들을 가진 ABL 엔트리들은 보존된다.
2. 블록에 대한 엔트리가 동시적 GAT 업데이트 동작에서 기입되고 있지 않는한, 폐쇄된 데이터 업데이트 블록들의 속성들을 가진 ABL 엔트리들은 보존되며, 이 경우 엔트리는 ABL로부터 제거된다.
3. 할당되지 않은 소거 블록들에 대한 ABL 엔트리들은 보존된다.
4. ABL은 엔트리들의 제거에 의해 생긴 갭들을 제거하기 위해 압축되고, 엔트리들의 순서를 유지한다.
5. ABL은 EBB 리스트로부터 다음 가용한 엔트리들을 첨부함으로써 완전히 채워진다.
6. ABB 리스트는 ABL에 현재 엔트리들로 덮어써진다.
CBL 비움 동작
CBL은 소거된 블록 엔트리들의 수에 대해 ABL과 동일한 제한을 갖는, 제어기 RAM에 소거된 블록 어드레스들의 리스트이다. CBL을 비우는 동작은 제어 기입 동작 동안 행해진다. 그러므로 이것은 ABL 채움/GAT 업데이트 동작들, 또는 CBI 블록 기입 동작들과 동시적이다. CBL 비움 동작에서, 엔트리들은 CBL(74)으로부터 제거되고 CBB 리스트(776)에 기입된다.
MAP 교환 동작
MAP 섹터들(780)에 소거 블록 정보와 EBM 섹터들(760)간에 MAP 교환 동작은 EBB 리스트(774)가 비었을 때 제어 기입 동작 동안에 주기적으로 행해질 수 있다. 시스템에 모든 소거된 메타블록들이 EBM 섹터(760)에 기록된다면, 어떠한 MAP 섹터(780)도 존재하지 않으며 어떠한 MAP 교환도 수행되지 않는다. MAP 교환 동작 동안에, EBB(774)를 소거된 블록들에 공급하는 MAP 섹터는 소스 MAP 섹터(782)로서 간주된다. 반대로, CBB(776)으로부터 소거된 블록들을 수신하는 MAP 섹터는 목적지 MAP 섹터(784)로서 간주된다. 단지 한 MAP 섹터만이 존재한다면, 이것은 이하 정의되는 바와 같이, 소스 및 목적지 MAP 섹터 둘 다로서 작용한다.
다음 동작들은 MAP 교환 동안 수행된다.
1. 소스 MAP 섹터는 증분 포인터에 기초하여, 선택된다.
2. 목적지 MAP 섹터는 소스 MAP 섹터에 없는 제 1 CBB 엔트리 내 블록 어드레스에 기초하여, 선택된다.
3. 목적지 MAP 섹터는 CBB 내 관계된 엔트리들에 의해 정의된 바와 같이, 업데이트되고, 엔트리들은 CBB로부터 제거된다.
4. 업데이트된 목적지 MAP 섹터는 별도의 소스 MAP 섹터가 존재한다면, MAP 블록에 기입된다.
5. 소스 MAP 섹터는 CBB 내 관계된 엔트리들에 의해 정의된 바와 같이, 업데이트되며, 엔트리들은 CBB로부터 제거된다.
6. CBB 내 나머지 엔트리들은 EBB에 첨부된다.
7. EBB는 소스 MAP 섹터로부터 정의된 소거된 블록 어드레스들로 가능한 정도까지 채워진다.
8. 업데이트된 소스 MAP 섹터는 MAP 블록에 기입된다.
9. 업데이트된 EBM 섹터는 MAP 블록에 기입된다.
리스트 관리
도 18은 여러 리스트들 간에 제어 및 디렉토리 정보의 분포 및 흐름을 도시한 것이다. 편의를 위해, [A] 내지 [O]으로서 도 18에서 확인되는, 리스트들의 요소들 간에 엔트리들을 이동시키거나 엔트리들의 속성들을 변경하는 동작들은 다음과 같다.
[A] 소거된 블록이 호스트 데이터에 대한 업데이트 블록으로서 할당될 때, ABL 내 그의 엔트리의 속성들은 소거된 ABL 블록에서 개방된 업데이트 블록으로 변경된다.
[B] 소거된 블록이 제어 블록으로서 할당될 때, ABL에 그의 엔트리는 제거된다.
[C] 개방된 업데이트 블록 속성들을 갖고 ABL 엔트리가 생성될 때, 연관된 원 블록 필드는 업데이트되는 논리 그룹에 대한 원 메타블록 어드레스를 기록하기 위해 엔트리에 추가된다. 이 정보는 GAT로부터 얻어진다.
[D] 업데이트 블록이 폐쇄되었을 때, ABL에 그의 엔트리의 속성들은 개방 업데이트 블록에서 폐쇄된 업데이트 블록으로 변경된다.
[E] 업데이트 블록이 폐쇄되었을 때, 이의 연관된 원 블록은 소거되며 ABL에 그의 엔트리 내 연관된 원 블록 필드의 속성들은 소거된 원 블록으로 변경된다.
[F] ABL 채움 동작 동안에, 어드레스가 동일 제어 기입 동작 동안 GAT에 업데이트되는 임의의 폐쇄된 업데이트 블록은 ABL로부터 제거된 자신의 엔트리를 갖는다.
[G] ABL 채움 동작 동안에, 폐쇄된 업데이트 블록에 대한 엔트리가 ABL로부터 제거되었을 때, 이의 연관된 소거된 원 블록에 대한 엔트리는 CBL로 옮겨진다.
[H] 제어 블록이 소거될 때, 이에 대한 엔트리는 CBL에 추가된다.
[I] ABL 채움 동작 동안에, 소거된 블록 엔트리들은 EBB 리스트에서 ABL로 옮겨지고, 소거된 ABL 블록들의 주어진 속성들이다.
[J] ABL 채움 동작 동안 모든 관계된 ABL 엔트리들의 수정 후에, ABL 내 블록 어드레스들은 ABB 리스트에 블록 어드레스들을 대체한다.
[K] 제어 기입동안 ABL 채움 동작과 동시에, CBL 내 소거된 블록들에 대한 엔트리들은 CBB 리스트로 옮겨진다.
[L] MAP 교환 동작 동안에, 모든 관계된 엔트리들은 CC 리스트에서 MAP 목적지 섹터로 옮겨진다.
[M] MAP 교환 동작 동안에, 모든 관계된 엔트리들은 CBB 리스트에서 MAP 소 스 섹터로 옮겨진다.
[N] MAP 교환 동작 동안에 [L] 및 [M]에 이어, 모든 나머지 엔트리들은 CBB 리스트에서 EBB 리스트로 옮겨진다.
[O] MAP 교환 동작 동안 [N]에 이어, [M]에 옮겨진 것들 이외의 엔트리들은 가능하다면 EBB 리스트를 채우기 위해서 MAP 소스 섹터로부터 옮겨진다.
논리 대 물리 어드레스 변환
플래시 메모리에 논리 섹터의 물리 위치를 찾기 위해서, 도 2에 도시된 논리 대 물리 어드레스 변환 모듈(140)은 논리 대 물리 어드레스 변환을 수행한다. 최근 업데이트된 이들 논리 그룹들을 제외하고, 대량 변환이 플래시 메모리(200)에 있는, 또는 제어기 RAM(130) 내 GAT 캐시에 있는 그룹 어드레스 테이블을 사용하여 수행될 수도 있을 것이다. 최근 업데이트된 논리 그룹들에 대한 어드레스 변환들은 주로 제어기 RAM(130)에 있는 업데이트 블록들에 대한 어드레스 리스트들을 조회하는 것을 요구할 것이다. 그러므로 논리 섹터 어드레스에 대한 논리 대 물리 어드레스 변환을 위한 프로세스는 섹터가 위치된 논리 그룹에 연관된 블록의 유형에 따른다. 블록들의 유형들은 온전한 블록, 순차 데이터 업데이트 블록, 무순서 데이터 업데이트 블록, 폐쇄된 데이터 업데이트 블록이다.
도 19는 논리 대 물리 어드레스 변환의 프로세스를 나타낸 흐름도이다. 필수적으로, 대응하는 메타블록 및 물리 섹터는 개방 업데이트 블록 리스트 및 폐쇄된 업데이트 블록 리스트와 같은 다양한 업데이트 디렉토리들을 먼저 조회하기 위해 논리 섹터 어드레스를 사용함으로써 찾아진다. 연관된 메타블록이 업데이트 프로세 스의 부분이 아니라면, 디렉토리 정보가 GAT에 의해 제공된다. 논리 대 물리 어드레스 변환은 다음 단계들을 포함한다.
단계 800: 논리 섹터 어드레스가 주어진다.
단계 810: 제어기 RAM 내 개방된 업데이트 블록 리스트(614)(도 15 및 도 18 참조) 내 주어진 논리 어드레스를 조회한다. 조회가 실패하면, 단계 820로 가고, 그렇지 않다면 단계 830로 간다.
단계 820: 폐쇄된 업데이트 블록 리스트(616)에서 주어진 논리 어드레스를 조회한다. 조회가 실패하면, 주어진 논리 어드레스는 임의의 업데이트 프로세스의 부분이 아니며, GAT 어드레스 변환을 위해 단계 870로 간다. 그렇지 않다면, 폐쇄된 업데이트 블록 어드레스 변환을 위해 단계 860로 간다.
단계 830: 주어진 논리 어드레스를 내포하는 업데이트 블록이 순차적이라면, 순차 업데이트 블록 어드레스 변환을 위해 단계 840로 간다. 그렇지 않다면, 무순서 업데이트 블록 어드레스 변환을 위해 단계 850으로 간다.
단계 840: 순차 업데이트 블록 어드레스 변환을 사용하여 메타블록 어드레스를 얻는다. 단계 880로 간다.
단계 850: 무순서 업데이트 블록 어드레스 변환을 사용하여 메타블록 어드레스를 얻는다. 단계 880로 간다.
단계 860: 폐쇄된 업데이트 블록 어드레스 변환을 사용하여 메타블록 어드레스를 얻는다. 단계 880로 간다.
단계 870: 그룹 어드레스 테이블(GAT) 변환을 사용하여 메타블록 어드레스를 얻는다. 단계 880로 간다.
단계 880: 메타블록 어드레스를 물리 어드레스로 변환한다. 변환 방법은 메타블록이 다시 링크되었는지 여부에 달려있다.
단계 890: 얻어진 물리 섹터 어드레스.
다양한 어드레스 변환 프로세스들이 다음과 같이 보다 구체적으로 기술된다.
순차 업데이트 블록 어드레스 변환(단계 840)
순차 업데이트 블록에 연관된 논리 그룹에 타겟 논리 섹터 어드레스에 대한 어드레스 변환은 다음과 같이, 개방된 업데이트 블록 리스트(614)(도 15 및 도 18 참조) 내 정보로부터 직접 달성될 수 있다.
1. 타겟 논리 섹터가 업데이트 블록 또는 이의 연관된 원 블록에 위치되어 있는지를 리스트 내 "페이지 태그" 및 "기입된 섹터들의 수" 필드들로부터 결정된다.
2. 타겟 논리 섹터에 적합한 메타블록 어드레스가 리스트로부터 읽혀진다.
3. 메타블록 내 섹터 어드레스가, 적합한 "페이지 태그" 필드로부터 결정된다.
무순서 업데이트 블록 어드레스 변환(단계 850)
무순서 업데이트 블록에 연관된 논리 그룹 내 타겟 논리 섹터 어드레스에 대한 어드레스 변환 시퀀스는 다음과 같다.
1. RAM 내 무순서 섹터 리스트로부터 섹터가 최근 기입된 섹터인 것으로 판정되면, 어드레스 변환은 이 리스트 내 그의 위치로부터 직접 달성될 수 있다.
2. CBI 블록 내 가장 최근 기입된 섹터는 이의 무순서 블록 데이터 필드 내에, 타겟 논리 섹터 어드레스에 관계된 무순서 업데이트 블록의 물리 어드레스를 내포한다. 또한, 이것은 이의 간접 섹터 색인 필드 내에, 이 무순서 업데이트 블록(도 16a 내지 도 16e 참조)에 관계된 마지막 기입된 CBI 섹터의 CBI 블록 내에 오프셋을 내포한다.
3. 이들 필드들 내 정보는 RAM에 캐시되어, 후속되는 어드레스 변환 동안 섹터를 읽을 필요성을 제거한다.
4. 단계 3에서 간접 섹터 색인 필드에 의해 확인된 CBI 섹터가 읽혀진다.
5. 가장 최근 액세스된 무순서 업데이트 하위 그룹에 대한 직접 섹터 색인 필드는 RAM에 캐시되어, 동일 무순서 업데이트 블록에의 반복된 액세스들을 위해 단계 4에서 판독을 수행할 필요성을 제거한다.
6. 단계 4 또는 단계 5에서 판독된 직접 섹터 색인 필드는 이번에는 타겟 논리 섹터 어드레스를 내포하는 논리 하위 그룹에 관계된 CBI 섹터를 확인한다.
7. 타겟 논리 섹터 어드레스에 대한 무순서 블록 색인 엔트리가, 단계 6에서 확인된 CBI 섹터로부터 판독된다.
8. 가장 최근 판독된 무순서 블록 색인 필드는 제어기 RAM에 캐시될 수 있어, 동일 논리 하위 그룹에의 반복된 액세스들을 위해 단계 4 및 단계 7에서 판독들을 수행할 필요성을 제거한다.
9. 무순서 블록 색인 엔트리는 무순서 업데이트 블록에 또는 연관된 원 블록에 타겟 논리 섹터의 위치를 정의한다. 타겟 논리 섹터의 유효한 카피가 원 블록 내 있다면, 이것은 원 메타블록 및 페이지 태그 정보를 사용함으로써 찾아진다.
폐쇄된 업데이트 블록 어드레스 변환(단계 860)
폐쇄된 업데이트 블록에 연관된 논리 그룹에 타겟 논리 섹터 어드레스에 대한 어드레스 변환은 다음과 같이, 폐쇄된 블록 업데이트 리스트(도 18 참조)에 정보로부터 직접 달성될 수 있다.
1. 타겟 논리 그룹에 할당된 메타블록 어드레스가 리스트로부터 판독된다.
2, 메타블록 내 섹터 어드레스는 리스트 내 "페이지 태그" 필드로부터 결정된다.
GAT 어드레스 변환(단계 870)
논리 그룹이 개방된 또는 폐쇄된 블록 업데이트 리스트들에 의해 참조되지 않는다면, GAT에 그의 엔트리가 유효하다. GAT에 의해 참조된 논리 그룹에 타겟 논리 섹터 어드레스에 대한 어드레스 변환 시퀀스는 다음과 같다.
1. 타겟 논리 그룹에 대한 엔트리가 GAT 캐시에 내포되어 있는지를 판정하기 위해서, RAM에 가용 GAT 캐시들의 범위들이 평가된다.
2. 타겟 논리 그룹이 단계 1에서 발견된다면, GAT 캐시는 메타블록 어드레스 및 페이지 태그 둘 다를 포함한, 완전한 그룹 어드레스 정보를 내포하여, 타겟 논리 섹터 어드레스의 변환을 할 수 있게 한다.
3. 타겟 어드레스가 GAT 캐시에 없다면, 타겟 논리 그룹 어드레스에 관계된 GAT 섹터의 위치를 확인하기 위해서, 타겟 GAT 블록에 대해 GAT 색인이 판독되어야 한다.
4. 마지막 액세스된 GAT 블록에 대한 GAT 색인은 제어기 RAM에 유지되며 플래시 메모리로부터 섹터를 판독할 필요성 없이 액세스될 수 있다.
5. 모든 GAT 블록에 대한 메타블록 어드레스들, 및 각 GAT 블록에 기입된 섹터들의 수의 리스트는 제어기 RAM에 유지된다. 요구된 GAT 색인이 단계 4에서 가용될 수 없다면, 이에 따라 이것은 플래시 메모리로부터 즉시 판독될 수도 있다.
6. 타겟 논리 그룹 어드레스에 관계된 GAT 섹터는 단계 4 또는 단계 6에서 얻어진 GAT 색인에 의해 정의된 GAT 블록에 섹터 위치로부터 판독된다. GAT 캐시는 타겟 엔트리를 내포하는 섹터의 세분할로 업데이트된다.
7. 타겟 GAT 엔트리 내 메타블록 어드레스 및 "페이지 태그" 필드들로부터 타겟 섹터 어드레스가 얻어진다.
메타블록 대 물리 어드레스 변환(단계 880)
메타블록이 재 링크되었음을 메타블록 어드레스에 연관된 플래그가 나타낸다면, 관계된 LT 섹터가 BLM 블록으로부터 판독되어, 타겟 섹터 어드레스에 대한 소거 블록 어드레스를 판정한다. 그렇지 않다면, 소거 블록 어드레스가 메타블록 어드레스로부터 직접 판정된다.
제어 데이터 관리
도 20은 메모리 관리의 동작 중에 제어 데이터 구조들에 관해 수행된 동작들의 계층을 도시한 것이다. 데이터 업데이트 관리 동작들은 RAM에 있는 다양한 리스트들에 작용한다. 제어 기입 동작들은 플래시 메모리 내 다양한 제어 데이터 섹터들 및 전용 블록들에 작용하며 RAM에 리스트들로 데이터를 교환한다.
데이터 업데이트 관리 동작들은 ABL, CBL 및 무순서 섹터 리스트에 관해 RAM에서 수행된다. ABL은 소거된 블록이 업데이트 블록으로서 또는 제어 블록으로서 할당되었을 때 또는 업데이트 블록이 폐쇄되었을 때 할당된다. CBL은 제어 블록이 소거되었을 때 또는 폐쇄된 업데이트 블록에 대한 엔트리가 GAT에 기입되었을 때 업데이트된다. 업데이트 무순서 섹터 리스트는 섹터가 무순서 업데이트 블록에 기입되었을 때 업데이트된다.
제어 기입 동작은 제어 데이터 구조들로부터 정보가 플래시 메모리 내 제어 데이터 구조들에 기입되게 하여, 결과적으로, 필요하다면, 플래시 메모리 및 RAM에 제어 데이터 구조들을 지원하는 다른 것을 업데이트하게 된다. 이것은 소거된 블록들에 대해 업데이트 블록들로서 할당될 더 이상의 어떠한 엔트리들도 ABL이 내포하지 않을 때, 또는 CBI 블록이 재기입될 때 시작된다.
바람직한 실시예에서, ABL 채움 동작, CBL 비움 동작 및 EBM 섹터 업데이트 동작은 모든 제어 기입 동작 동안에 수행된다. EBM 섹터를 내포하는 MAP 블록이 충만되었을 때, 유효한 EBM 및 MAP 섹터들은 할당된 소거된 블록에 카피되며, 이전 MAP 블록은 소거된다.
한 GAT 섹터가 기입되며, 매 제어 기입 동작 동안, 폐쇄된 업데이트 블록 리스트는 그에 따라 수정된다. GAT 블록이 충만되었을 때, GAT 재기입 동작이 수행된다.
CBI 섹터는 앞에서 기술된 바와 같이, 어떤 무순서 섹터 기입 동작 후에 기입된다. CBI 블록이 충만되었을 때, 할당된 소거된 블록에 유효한 CBI 섹터들이 카 피되고, 이전 CBI 블록은 소거된다.
앞에서 기술된 바와 같이, MAP 교환 동작은 EBM 섹터에 EBB 리스트에 더 이상의 소거된 블록 엔트리들이 없을 때 수행된다.
MAP 블록의 현재 어드레스를 기록하는 MAP 어드레스(MAPA) 섹터는 MAP 블록이 재기입되는 각 경우에 전용의 MAPA 블록에 기입된다. MAPA 블록이 충만되었을 때, 유효한 MAPA 섹터는 할당된 소거된 블록에 카피되고, 이전 MAPA 블록은 소거된다.
부트 섹터는 MAPA 블록이 재기입되는 각 경우에 현재 부트 블록에 기입된다. 부트 블록이 충만되었을 때, 유효한 부트 섹터가 부트 블록의 현재 버전에서 백업 버전으로 카피되며, 이것은 이어서 현재 버전이 된다. 이전 현재 버전은 소거되며 백업 버전이 되고, 유효한 부트 섹터는 이에 다시 기입된다.
제어 데이터 무결성 및 관리
제어 데이터의 예는 도 20에 관련하여 기술된 것들과 같은, 메모리 블록 관리 시스템에 연관된 디렉토리 정보 및 블록 할당 정보이다. 앞서 기술된 바와 같이, 제어 데이터는 고속 RAM 및 이보다는 느린 비휘발성 메모리 블록들 둘 다에 유지된다. 임의의 자주 변하는 제어 데이터는 비휘발성 메타블록에 저장된 동등 정보를 업데이트하기 위해 주기적 제어 기입들에 의해 RAM에 유지된다. 이렇게 하여, 제어 데이터가, 비휘발성이지만 빈번한 액세스에 대한 필요성이 없는 느린 플래시 메모리에 저장된다. 도 20에 도시된 GAT, CBI, MAP, 및 MAPA와 같은 제어 데이터 구조들의 계층이 플래시 메모리에 유지된다. 이에 따라, 제어 기입 동작은 RAM에 제어 데이터 구조들로부터 정보가 플래시 메모리에 동등 제어 데이터 구조들을 업데이트하게 한다.
도 20에 관련하여 기술된 바와 같이, 블록 관리 시스템은 이의 동작 동안 플래시 메모리에 한 세트의 제어 데이터를 유지한다. 이 한 세트의 제어 데이터는 호스트 데이터와 유사하게 메타블록들에 저장된다. 이러하므로, 제어 데이터 자신은 블록으로 관리될 것이며, 업데이트들, 따라서 가비지 수거 동작들을 받게 될 것이다.
또한, 제어 데이터의 계층이 존재하고 하위 계층에 것들이 상위 계층의 것들보다더 자주 업데이트되는 것이 기술되었다. 예를 들면, 모든 제어 블록이 기입할 N 제어 섹터들을 갖는다고 할 때, 제어 업데이트들 및 제어 블록 재배치들의 다음 시퀀스가 정규로 일어난다. 다시 도 20을 참조하면, 매 N CBI 업데이트들이 CBI 블록을 채우며 CBI 재배치(재기입) 및 MAP 업데이트를 시작하게 한다. 무순서 블록이 폐쇄된다면 이 또한 GAT 업데이트를 시작하게 한다. 모든 GAT 업데이트는 MAP 업데이트를 시작하게 한다. 모든 N GAT 업데이트들이 블록을 채우며 GAT 블록 재배치를 시작하게 한다. 또한, MAP 블록이 채우질 때 이 또한 MAP 블록 재배치 및 MAPA 블록(존재한다면, 그러나 그렇지 않다면 부트 블록이 직접 MAP을 가리킨다) 업데이트를 시작하게 한다. 또한, MAPA 블록이 채워졌을 때, 이 또한 MAPA 블록 재배치, 부트 블록 업데이트 및 MAP 업데이트를 시작하게 한다. 또한, 부트 블록이 채워졌을 때, 이것은 또 다른 부트 블록에 활동적 부트 블록 재배치를 시작하게 한다.
업데이트 블록 대체 방법
발명의 또 다른 면에 따라서, 블록 관리 시스템을 갖춘 비휘발성 메모리에서, 개선된 블록 대체 방법은 데이터를 기록하기 위해 동시 개방된 제 1 소정 최대 개수의 업데이트 블록까지 지원하는 시스템을 위해 구현된다. 업데이트 블록들은 데이터가 논리적으로 순차적 순서로 기록되지만 데이터가 논리적으로 순차적인 순서로 데이터가 기록되지 않는 무순서 업데이트 블록들이 되어도 좋을 제 2 소정 최대 개수까지가 기록되는, 주로 순차적인 업데이트 블록들이다. 업데이트 블록의 새로운 할당이 업데이트 블록의 풀을 제 1 또는 제 2 소정 최대 개수를 초과하게 할 때마다, 풀 내 현존의 업데이트 블록들 중 하나는 제한에 따르기 위해서 폐쇄되고 제거될 것이다. 업데이트 블록을 폐쇄하에 앞서, 이의 데이터는 순차적 블록에 합체된다. 개선된 방법은 순차 업데이트가 무순서 블록 합체들의 초과된 수를 야기할 수 있는 상황을 피하게 하는 것이다. 이것은 순차 업데이트 블록들 및 무순서 업데이트 블록들을 각각의 대체 또는 합체 풀들로 분리함으로써 달성된다. 특히, 순차 업데이트가 새로운 업데이트 블록의 할당을 제 1 소정 최대 개수 초과시, 풀의 최근 최소 사용된 순차적 업데이트 블록에 우선적으로 빈 공간을 만드는 것이다.
현 시스템에서, 일반적으로는 2가지 유형들의 데이터로서 사용자 데이터 및 제어 데이터가 있다. 사용자 데이터는 호스트에서 메모리 시스템으로 전형적으로 논리적 순차적 순서로 보내진다. 호스트로부터 순차적 기입 동작들을 최적으로 취급하기 위해 순차적 업데이트 블록들이 할당된다. 또한, 사용자 데이터는 특히 논리 데이터에 후속된 업데이트들이 있을 때 논리적으로 비순차적 순서로 있을 수도 있다. 무순서 업데이트 블록들은 비순차적 순서로 데이터를 최적으로 취급하기 위 해 생성된다. 무순서 또는 비순차적 데이터의 또 다른 소스는 사용자 데이터를 저장하는 과정에서 발생되는 파일 및 디렉토리 정보와 같은 파일 시스템 또는 메모리 시스템에 의해 유지되는 제어 데이터이다.
동시에 개방된 업데이트 블록들의 최대수까지를 지원하는 실제 시스템 제한에 준수하는 이전의 방법은 순차적이든 무순서이든 관계없이, 풀에 최근 최소에 사용된 업데이트 블록을 폐쇄하는 것이었다.
본 방법은 특히 순차 기입 동작 동안 블록의 풀 중에 업데이트 블록이 새로운 할당을 위해 빈 공간을 만들기 위해 폐쇄될 필요가 있다면 풀 내 최근 최소 사용된 순차 업데이트 블록이 폐쇄되는 이전 방법보다 개선된다. 이것은 순차 기입 동작들 및 랜덤 기입 동작들을 취급하기 위해 다양한 업데이트 블록들이 효과적으로 사용될 수 있게 한다. 특히, 이것은 호스트에 의해 큰 순차 기입 동작이 FAT 및 디렉토리 정보를 내포하는 무순서 업데이트 블록의 조기 폐쇄를 강제할 수 있는 비효율적인 상황을 회피한다. 또 다른 무순서 블록은 일단 큰 순차 기입 동작이 행해지면 다시 업데이트될 FAT 및 디렉토리 정보를 저장하기 위해 사실상 거의 즉시로 생성될 것이다. 개선된 대체 정책의 생성은 후속되는 FAT 및 디렉토리 업데이트를 관리하기 위해 잠재적으로 개방된 순차 또는 개방된 무순서 블록의 순차적 기입 및 합체 동안 무순서 블록을 합체할 때 부가되는 오버헤드를 방지하기 위해 대체 및 합체 풀의 분리를 요구한다.
최대수의 동시 개방되는 업데이트 블록까지 지원하는 실제적인 시스템 제한이 앞에서 기술되었다. 예를 들면, 도 10에 관련하여 기술된 일 실시예에서, 단계 410은 새로운 할당이, 업데이트 데이터를 받아들이기 위해 동시에 개방될 수 있는 업데이트 블록들의 최대수 UMAX를 초과할 것인지를 테스트한다. UMAX가 초과될 것이라면, 순차적이든 무순서 업데이트 블록이든 관계없이, 업데이트 블록들 중 최소의 활동적인 것들은 규정된 제한 내에서 시스템을 유지하기 위해 단계 420에서 폐쇄될 것이다.
도 21은 블록 관리 시스템에 대한 업데이트 블록들의 수에 2가지 규정된 제한들을 개략적으로 도시한 것이다. 무순서 업데이트 블록들(NC)의 수와 순차적 업데이트 블록들(NS)의 수와의 합에 의해 주어지는 업데이트 블록들의 총 수(UMAX)에 전체적인 제한이 있다. 무순서 업데이트 블록은 더 자원 집약적이어서 무순서 블록 색인(CBI)의 추가의 유지관리를 요구하기 때문에, 바람직하게는 무순서 업데이트 블록들("UCMAX")의 최대수에도 제한이 있다. 이에 따라, 제 1 제한은 업데이트 블록들의 총 수, NC + NS ≤ UMAX일 것을 요구한다. 제 2 제한은 무순서 업데이트 블록들의 수 NC ≤ UCMAX일 것을 요구한다.
도 22는 다양한 메모리 장치들에 대해 최적인 2개의 제한들의 조합들의 전형적인 예들을 도시한 것이다. 주어진 조합을 UMAX "-" UCMAX로 나타낸다. 예를 들면, "3-1"은 업데이트 풀 내에 최대 3개의 업데이트 블록까지 허용하고 이중 하나까지만 무순서 업데이트 블록인 블록 관리 시스템을 나타낸다. 마찬가지로, "7-3"은 최대 7개의 업데이트 블록까지 지원하고 이중 3개까지만 무순서 업데이트 블록일 수 있는 블록 관리 시스템을 나타낸다. 일반적으로 더 적은 메모리 용량을 갖는 더 간단한 메모리 시스템들은 더 제약적일 것이며, 더 적은 최대수들을 갖는다.
도 23a, 도 23b 및 도 23c는 이전 대체 방법에서 제 1 상황에 따라, 새로운 업데이트 블록을 업데이트 블록 풀에 넣기 위한 이벤트의 시퀀스를 개략적으로 도시한 것이다.
도 23a는 도 22에 기술된 바와 같이 "5-2" 구성의 업데이트 풀을 개략적으로 도시한 것이다. 이 예에서, 업데이트 풀은 최대 5개의 허용가능한 업데이트 블록들이 완전히 차지하게 된다. 업데이트 풀은 3개의 순차 업데이트 블록들(S1, S2, S3)을 내포하는 순차 풀(1200) 및 최대 2개의 무순서 또는 비순차적 업데이트 블록들( C4, C5)을 내포하는 무순서 풀(1300)로 더욱 분할된다. 예는 최소 활동적인 블록이 S3(1201)과 같은 순차 업데이트 블록이 되는 일이 일어나는 제 1 상황을 보인 것이다.
새로운 업데이트 블록이 할당될 필요가 있는 경우에, 업데이트 풀에 현존 업데이트 블록들 중 한 블록은 빈 공간을 만들기 위해 폐쇄될 필요가 있을 것이다. 예를 들면, 호스트가 풀에 현존의 업데이트 블록들에 의해 서비스되는 논리 그룹의 섹터들에 대한 순차적 데이터를 기입하는 경우에, 새로운 업데이트 블록은 데이터를 기록하기 위해 할당될 필요가 있을 것이다.
도 23b는 이전 방법에 따라, 새로운 업데이트 블록을 위한 빈 공간을 만들기 위해서 최소 활동적인 업데이트 블록의 폐쇄를 개략적으로 도시한 것이다. 이 경우 최소 활동적 업데이트 블록은 S3(1201)가 되는 것이 일어나며 이것은 폐쇄되고 업데이트 블록들의 풀로부터 제거될 것이다.
도 23c는 폐쇄된 업데이트 블록이 빈 공간을 만들기 위해 제거된 후에 새롭게 할당된 업데이트 블록을 풀에 넣는 것을 개략적으로 도시한 것이다. 이 경우, 새롭게 할당된 업데이트 블록인 S6(1212)는 논리적으로 순차적인 순서로 데이터를 기록하기 위해 순차 풀(1200)에 넣어질 것이다. 이에 따라, UMAX, 즉 허용된 최대수의 업데이트 블록들은 초과되지 않는다.
도 24a, 도 24b 및 도 24c는 이전 대체 방법에서 제 2 상황에 따라, 업데이트 블록 풀에 새로운 업데이트 블록에 넣기 위한 경우의 시퀀스를 개략적으로 도시한 것이다.
도 24a는 도 22에 기술된 바와 같이 "5-2" 구성인 업데이트 풀을 개략적으로 도시한 것이다. 이 예에서, 업데이트 풀은 최대 5개의 허용가능한 업데이트 블록들로 완전히 채워진다. 업데이트 풀은 3개의 순차적인 업데이트 블록들(S1, S2, S3)을 내포하는 순차 풀(1200) 및 최대 2개의 무순서 또는 비순차적 업데이트 블록들(C4, C5)을 내포하는 무순서 풀(1300)을 내포하는 순차 풀(1200)로 더 분할된다. 예는 최소 활동적 블록이 C4(1301)와 같은 무순서 업데이트 블록이 될 일이 일어나는 제 2 상황을 보여준다.
도 24b는 이전의 방법에 따라, 새로운 업데이트 블록을 위한 빈 공간을 만들기 위해서 최소의 활동적인 업데이트 블록의 폐쇄를 개략적으로 도시한 것이다. 이 경우에 최소의 활동적 업데이트 블록은 C4(1301)이며 이것은 폐쇄되고 업데이트 블 록들의 풀로부터 제거될 것이다.
도 24c는 폐쇄된 업데이트 블록이 빈 공간을 만들기 위해 제거된 후에 풀에 새로운 할당된 업데이트 블록을 넣는 것을 개략적으로 도시한 것이다. 이 경우, 새롭게 할당된 업데이트 블록인 S6(1212)는 논리적으로 순차적인 순서로 데이터를 기록하기 위해 순차 풀(1200)에 넣어질 것이다. 이에 따라, UMAX, 즉 허용된 최대수의 업데이트 블록들은 초과되지 않는다.
도 25a 및 도 25b는 도 10, 도 23b 및 도 24b에 이전에 기술된 방법에서 UMAX 및 UCMAX 제한의 유지보수를 각각 도시한 것이다. 2개의 제한들은 전형적으로 동시에 부과된다.
도 25a는 도 10, 단계 410에, 그리고 새로운 할당이 소정의 제한을 초과하게 될 때는 언제나 최근의 액세스된 최소의 업데이트 블록이 폐쇄되는 도 23b 및 도 24b에서 이전에 도시된 방법을 도시한 것이다.
단계 1252: 비휘발성 메모리를 블록들로 조직한다. 각 블록은 함께 소거 가능한 데이터를 저장하기 위한 것이다.
단계 1254: 논리적 단위들의 데이터의 업데이트들을 저장하기 위해 동시 개방된 제 1 소정 개수의 업데이트 블록까지 할당한다.
단계 1256: 새로운 업데이트 블록을 할당하는 것이 소정 개수를 초과할 때는 언제나, 새로운 업데이트 블록을 위한 빈 공간을 만들기 위해서 최근의 액세스된 최소의 업데이트 블록들 중 하나를 폐쇄된다.
도 25b는 무순서 업데이트 블록 개수가 소정의 제한을 초과할 때마다, 최근 최소 액세스된 무순서(비순차적) 업데이트 블록이 폐쇄되는 도 10, 단계 370에 이전에 도시된 방법을 도시한 것이다.
단계 1354: 논리적으로 비순차적 순서로 논리적 단위들의 데이터를 저장하기 위해 개방된 업데이트 블록들 중에 제 2 소정 개수의 업데이트 블록까지 할당한다.
단계 1356: 비순차적 업데이트 블록 개수가 제 2 소정 개수를 초과하게 될 때는 언제나, 제 2 소정 개수를 초과하지 않기 위해 최근 최소 액세스된 비순차적 업데이트 블록들 중 하나를 폐쇄된다.
이러한 이전의 방법의 한 단점은 이것이 어떤 환경들 하에서 무순서 업데이트 블록들의 과도한 폐쇄에 이르게 할 수 있다는 것이다. 이것은 새롭게 할당된 순차적 블록을 위해 풀에 빈 공간을 만들기 위해서 순차 기입이, 제어 데이터를 내포하는 무순서 블록을 조기에 폐쇄되게 할 때의 경우엔 특히 비효율적이다. 예를 들면, 폐쇄된 무순서 업데이트 블록 C4(1310)이 FAT 및 디렉토리 정보를 기록하는 중이었다면, 대체는 순차 기입이 행해지는 즉시 이 기능을 행하기 위해서 할당될 것을 즉각적으로 필요로 할 것이다. 이것은 제어 데이터를 기록하기 위한 대체 업데이트 블록을 위한 빈 공간을 만들기 위해서 풀에 현재 최소 활동적인 업데이트 블록을 폐쇄하는 과정을 또 수반할 것이다.
발명의 현재의 면에 따라서, 소정 최대 개수의 업데이트 블록들을 초과하지 않기 위해서 업데이트 블록의 폐쇄는 최근 최소 사용된 업데이트 블록들을 단순히 선택하는 것에서부터, 무순서 업데이트 블록들의 과도한 폐쇄의 경우를 감소시키는 방법으로 더욱 구체화된다. 바람직한 실시예에서, 업데이트 블록이 순차 데이터를 기록하기 위해 할당되고 업데이트 블록 풀 내 하나는 빈 공간을 만들기 위해 폐쇄될 필요가 있다면, 풀 내 최소의 활동적 순차 업데이트 블록이 폐쇄된다.
도 26a, 도 26b 및 도 26c는 본 개선된 대체 방법에 따라, 업데이트 블록 풀에 새로운 업데이트 블록을 넣기 위한 이벤트의 시퀀스를 개략적으로 도시한 것이다.
도 26a는 도 22에 기술된 바와 같이 "5-2" 구성의 업데이트 풀을 개략적으로 도시한 것이다. 이 예에서, 업데이트 풀은 최대 5개의 허용가능한 업데이트 블록들이 완전히 차지한다. 업데이트 풀은 3개의 순차 업데이트 블록들(S1, S2, S3)을 내포하는 순차 풀(1200), 및 최대 2개의 무순서 또는 비순차 업데이트 블록들(C4, C5)를 내포하는 무순서 풀(1300)로 더 분할된다. 예는 최소의 활동적 블록이 C4(1301)과 같은 무순서 업데이트 블록이 되는 일이 발생하는 도 24a와 유사한 상황을 보여준다. 또한, 이것은 순차 풀(1200)에 최소의 활동적인 것으로서 순차 블록 S3(1202)을 보여준다.
도 26b는 본 개선된 방법에 따라, 새로운 업데이트 블록을 위한 빈 공간을 만들기 위해서 업데이트 블록 풀의 한 블록의 폐쇄를 개략적으로 도시한 것이다. 순차 업데이트에 연관된 새로운 할당 및 풀 내에 업데이트 블록들의 수가 이미 최대에 있는 경우에, 풀 내 업데이트 블록들 중 하나는 새롭게 할당된 업데이트 블록을 위한 빈 공간을 만들기 위해 폐쇄되어야 할 것이다. 그러나, 이 경우에 최소 활동적인 블록은 C4(1301)이며, 이것은 무순서 블록이기 때문에, 이것은 무시될 것이 다. 대신에, 순차 풀(1200) 내 최소 활동적인 업데이트 블록은 폐쇄될 것이다. 이 예에서, 폐쇄되고 업데이트 블록 풀로부터 제거될 것은 S3(1202)이다.
도 26c는 폐쇄된 업데이트 블록이 빈 공간을 만들기 위해 제거된 후에 풀에 새롭게 할당된 업데이트 블록을 넣는 것을 개략적으로 도시한 것이다. 이 경우에, 새롭게 할당된 업데이트 블록인 S6(1212)는 논리적으로 순차적인 순서로 데이터를 기록하기 위해 순차 풀(1200)에 넣어질 것이다. 이에 따라, UMAX, 즉 허용된 최대 수의 업데이트 블록들은 초과되지 않는다.
도 27a, 도 27b 및 도 27c는 본 개선된 대체 방법에 따라, 업데이트 블록 풀에 새로운 무순서 업데이트 블록에 넣기 위한 이벤트의 시퀀스를 개략적으로 도시한 것이다.
도 27a는 도 22에 기술된 바와 같이 "5-2" 구성의 업데이트 풀을 개략적으로 도시한 것이다. 이 예에서, 업데이트 풀은 최대 5개의 허용가능한 업데이트 블록들이 완전히 차지한다. 업데이트 풀은 3개의 순차 업데이트 블록들(S1, S2, S3)을 내포하는 순차 풀(1200), 및 최대 2개의 무순서 또는 비순차 업데이트 블록들(C4, C5)를 내포하는 무순서 풀(1300)로 더 분할된다. 예는 최소의 활동적인 블록이 S6(1201)과 같은 순차 업데이트 블록이 되는 일이 발생함을 보여준다. 또한, 이것은 무순서 풀(1300)에 최소의 활동적인 것으로서 무순서 블록 C4(1302)을 보여준다.
도 27b는 본 개선된 방법에 따라, 새로운 업데이트 블록을 위한 빈 공간을 만들기 위해서 업데이트 블록의 풀 중 하나의 폐쇄를 개략적으로 도시한 것이다. 새로운 무순서 업데이트 블록이 이미 충만된 무순서 풀(1300)에 넣어지는 경우에, 무순서 풀 내 업데이트 블록들 중 하나는 빈 공간을 만들기 위해 폐쇄되어야 할 것이다. 예에서, 무순서 풀(1300)은 최대 2개의 무순서 업데이트 블록들을 이미 내포한다. 또 다른 무순서 업데이트 블록이 생성될 때, 예를 들면 현존 순차 블록 S1(1220)이 무순서 블록으로 변환되어야 할 때, 최대수의 무순서 블록들은 이들 중 하나가 제거되지 않는다면 초과될 것이다. 이 경우, 최소의 활동적인 무순서 블록 C4(1302)는 빈 공간을 만들기 위해서 폐쇄되고 무순서 풀(1300)로부터 제거된다.
도 27c는 또 다른 무순서 업데이트 블록이 빈 공간을 만들기 위해서 폐쇄되고 제거된 후에 풀에 새로운 무순서 업데이트 블록을 넣는 것을 개략적으로 도시한 것이다. 이 경우, S1은 순차 풀(1200) 내 순차 업데이트 블록(1220)에서 무순서 풀(1300)에 무순서 업데이트 블록 C6(1320)으로 전환되었다. 이에 따라, UCMAX, 즉 허용된 최대수의 무순서 업데이트 블록들은 초과되지 않는다.
도 28은 제 1 실시예에 따라, 순차 업데이트 동안에, 제한된 한 세트의 업데이트 블록들을 관리하는 본 개선된 방법을 도시한 흐름도이다.
단계 1400: 비휘발성 메모리를 블록들로 조직한다. 각 블록은 함께 소거 가능한 데이터를 저장하기 위한 것이다.
단계 1402: 논리적 단위들의 데이터의 업데이트들을 저장하기 위해 동시 개방된 제 1 소정 개수의 업데이트 블록까지 할당한다.
단계 1406: 순차 데이터를 기입하라는 기입 명령에 응하여, 논리 단위들의 데이터를 순차적 순서로 업데이트 블록에 기입한다.
단계 1408: 순차적인 논리 단위들의 데이터의 추가 기입에 대해 폐쇄될 업데이트 블록에 대해 만족되는 소정의 상태에 응하여, 기입을 계속하기 위해 새로운 업데이트 블록을 할당하고, 새로운 할당이 제 1 소정 개수를 초과하면, 비순차 순서로 임의의 최근의 액세스된 최소의 업데이트 블록에 대해 순차적 순서로 최근 최소에 액세스된 업데이트 블록을 우선적으로 폐쇄한다.
도 29는 제 2 실시예에 따라, 2개의 소정의 제한들을 갖는 제한된 한 세트의 업데이트 블록들을 관리하는 본 개선된 방법을 도시한 흐름도이다.
단계 1410: 비휘발성 메모리를 블록들로 조직한다. 각 블록은 함께 소거 가능한 데이터를 저장하기 위한 것이다.
단계 1412: 논리적 단위들의 데이터의 업데이트들을 저장하기 위해 동시 개방된 제 1 소정 개수의 업데이트 블록까지 할당한다.
단계 1416: 논리적으로 비순차적 순서로 논리적 단위들의 데이터를 저장하기 위해 개방된 업데이트 블록들 중에서 제 2 소정 개수의 업데이트 블록까지 할당한다.
단계 1418: 논리적으로 순차적인 순서로 데이터를 저장하기 위한 업데이트 블록의 도입이 제 1 소정 개수를 초과할 수 있을 때마다, 도입된 업데이트 블록을 위해 빈 공간을 만들기 위해 논리적으로 순차적인 순서로 데이터를 내포하는 최근의 액세스된 최소의 업데이트 블록들을 폐쇄한다.
단계 1420: 논리적으로 비순차적인 순서로 데이터를 저장하기 위한 업데이트 블록의 도입이 제 2 소정 개수를 초과할 수 있을 때마다, 도입된 업데이트 블록을 위해 빈 공간을 만들기 위해 논리적으로 비순차적인 순서로 데이터를 내포하는 최근의 액세스된 최소의 업데이트 블록들을 폐쇄한다.
본 방법의 일반화는 이를테면 업데이트 블록이 순차적인 데이터를 저장하고 있는지 아니면 비순차적인 데이터를 저장하고 있는지, 또는 어떤 기정의된 유형의 시스템 데이터를 저장하고 있는지와 같이, 한 세트의 속성들에 기초하여 업데이트 블록들을 유별하는 것이다. 제한된 수의 업데이트 블록들의 풀을 구현함에 있어, 업데이트 블록들의 각 클래스는 이 클래스를 위해 지원되는 최대수가 초과하게 될 때 대체를 위해 그 자신의 규칙을 가질 것이다.
예를 들면, 순차적 업데이트 블록 및 비순차적 업데이트 블록들은 2개의 서로 다른 클래스들이다. 이들 클래스들 각각에 대한 대체 규칙들은 동일하다. 즉 최소 활동적인 것을 새로운 것으로 대체한다. 이에 따라, 순차 업데이트 블록의 풀이 초과하게 될 때, 풀 내 최소 활동적인 것은 폐쇄되고 새로운 것이 풀에 넣어지기 전에 제거될 것이다. 비순차적 업데이트 블록들의 풀에 대해서도 유사하다.
일반적으로 각 클래스는 다른 클래스들과는 무관하게 그 자신의 대체 규칙을 갖는다. 대체 규칙들의 예들은 대응하는 클래스들에 따라, 최근 최소 액세스된, 가장 최근 액세스된, 최소의 빈번하게 액세스된, 가장 빈번하게 액세스된, 등을 대체하는 것이다.
도 30은 클래스 기반의 대체 규칙들을 갖는 제한된 한 세트의 업데이트 블록 들을 관리하는 본 개선된 방법을 도시한 흐름도이다.
단계 1430: 비휘발성 메모리를 블록들로 조직한다. 각 블록은 함께 소거 가능한 데이터를 저장하기 위한 것이다.
단계 1432: 논리적 단위들의 데이터의 업데이트들을 저장하기 위해 동시 개방된 제 1 소정 개수의 업데이트 블록까지의 풀을 제공한다.
단계 1436: 한 세트의 속성들에 기초하여 업데이트 블록들을 유별하기 위해 한 세트의 기정의된 클래스들을 제공하는 것으로, 각 클래스는 연관된 소정 최대 개수의 업데이트 블록까지의 하위-풀(sub-pool)을 지원한다.
단계 1438: 대체될 각각의 하위 풀 내 업데이트 블록을 명시하기 위해 한 세트의 기정의된 클래스들에 한 세트의 대응하는 대체 규칙들을 제공한다.
단계 1440: 클래스에 의해 풀 내 업데이트 블록들을 대응하는 하위 풀들로 그룹으로 나눈다.
단계 1442: 동일 클래스의 또 다른 업데이트 블록이 이에 넣어지고 있을 때마다 연관된 소정 최대 개수의 업데이트 블록들을 내포하는 하위 풀 내 최소 활동적인 업데이트 블록을 폐쇄하고 제거한다.
모든 특허들, 특허출원들, 논문들, 책들, 명세들, 그외 공보들, 문서들 및 여기에서 참조된 것들은 모든 목적들을 위해 이들 전부를 참조로 여기 포함시킨다. 포함시킨 공보들, 문서들 또는 참조된 것들 중 어느 것과 본 문서의 텍스트 간에 용어의 정의 또는 사용에서 어떤 불일치 또는 상충의 정도까지도, 본 문서 내 용어의 정의 또는 사용이 우선할 것이다.
본 발명의 여러 면들이 어떤 실시예들에 관하여 기술되었을지라도, 발명은 첨부된 청구항들의 전체 범위 내에서 보호될 자격이 있음이 이해된다.
상술한 바와 같이, 본 발명은, 일반적으로 비휘발성 반도체 메모리를 제공하고, 구체적으로는 데이터를 저장하기 위해 동시 개방된 블록 풀(pool)의 대체를 관리하는 개선된 시스템을 갖춘 메모리 블록 관리 시스템을 구비한 비휘발성 반도체 메모리를 제공하는데 사용된다.

Claims (29)

  1. 복수의 블록들로 구성된 비휘발성 메모리에서, 각 블록은 함께 소거 가능한 논리적 단위들의 데이터를 저장하기 위한 것으로, 상기 메모리에 데이터를 저장하기 위한 방법은,
    논리 단위의 데이터의 업데이트들을 저장하기 위해 동시 개방된 업데이트 블록들로서 제 1 소정 개수 이하의 블록을 할당하는 단계;
    논리적으로 순차적인 순서로 된 데이터를 기입하라는 기입 명령에 응하여, 데이터를 업데이트 블록에 논리적으로 순차적인 순서로 기입하는 단계; 및
    상기 순차적인 논리 단위의 데이터의 추가 기입에 대해 상기 업데이트 블록이 폐쇄될 소정의 조건이 충족된 것에 응하여, 상기 기입을 계속하기 위해 새로운 업데이트 블록을 할당하고, 상기 새로운 할당이 상기 제 1 소정 개수를 초과하면, 비순차적 순서로 데이터를 저장한 임의의 최근 최소 액세스된 것보다 순차적 순서로 데이터를 저장한 최근의 액세스된 최소의 업데이트 블록을 우선적으로 폐쇄하는 단계를
    포함하는, 메모리에 데이터를 저장하는 방법.
  2. 복수의 블록들로 구성된 비휘발성 메모리에서, 각 블록은 함께 소거 가능한 논리 단위의 데이터를 저장하기 위한 것으로, 상기 메모리에 데이터를 저장하기 위한 방법은,
    논리 단위의 데이터의 업데이트들을 저장하기 위해 동시 개방된 업데이트 블록들로서 제 1 소정 개수 이하의 블록을 할당하는 단계;
    논리적으로 비순차적 순서로 논리 단위의 데이터를 저장하기 위해 상기 개방된 업데이트 블록들 중에서 제 2 소정 개수의 업데이트 블록까지 할당하는 단계;
    논리적으로 순차적 순서로 데이터를 저장하기 위해 업데이트 블록의 도입이 상기 제 1 소정 개수가 초과되도록 야기할 때는 언제나, 상기 도입되는 업데이트 블록을 위한 빈 공간을 만들기 위해서 논리적으로 순차적인 순서로 데이터를 내포하는 최근의 액세스된 최소의 업데이트 블록들을 폐쇄하는 단계; 및
    논리적으로 비순차적 순서로 데이터를 저장하기 위해 업데이트 블록의 도입이 상기 제 2 소정 개수가 초과되도록 야기할 때는 언제나, 상기 도입되는 업데이트 블록을 위한 빈 공간을 만들기 위해서 논리적으로 비순차적인 순서로 데이터를 내포하는 최근의 액세스된 최소의 업데이트 블록들을 폐쇄하는 단계를
    포함하는, 메모리에 데이터를 저장하는 방법.
  3. 제 2항에 있어서, 논리적으로 비순차적 순서로 데이터를 저장하기 위한 상기 업데이트 블록은 논리적으로 순차적 순서로 데이터를 저장하는 것으로부터 전환된, 메모리에 데이터를 저장하는 방법.
  4. 복수의 블록들로 구성된 비휘발성 메모리에서, 각 블록은 함께 소거 가능한 논리 단위의 데이터를 저장하기 위한 것으로, 상기 메모리에 데이터를 저장하기 위 한 방법은,
    논리 단위의 데이터의 업데이트들을 저장하기 위해 동시 개방된 업데이트 블록들로서 제 1 소정 개수 이하의 블록을 할당하는 단계;
    논리 단위의 데이터의 업데이트들을 저장하기 위해 동시 개방된 제 1 소정 개수의 업데이트 블록까지의 풀을 제공하는 단계;
    한 세트의 속성들에 기초하여 업데이트 블록들을 유별하기 위한 한 세트의 기정의된 클래스들을 제공하는 단계로서, 각각의 클래스는 연관된 소정 최대 개수의 업데이트 블록까지의 하위 풀을 지원하는, 단계;
    대체될 상기 각각의 하위 풀들 내 상기 업데이트 블록을 명시하기 위해서 상기 한 세트의 기정의된 클래스들에 한 세트의 대응하는 대체 규칙들을 제공하는 단계;
    대응하는 하위 풀들에 클래스별로 상기 풀 내 상기 업데이트 블록들을 그룹으로 나누는 단계; 및
    상기 연관된 소정 최대 개수의 업데이트 블록들을 내포하는 하위 풀에 동일 클래스의 또 다른 업데이트 블록이 도입되고 있을 때는 언제나, 하위 풀 내 최소 활동적인 업데이트 블록을 폐쇄하고 제거하는 단계로서, 상기 제거된 업데이트 블록은 상기 동일 클래스에 대한 상기 대응하는 대체 규칙에 따라 선택되는, 단계를
    포함하는, 메모리에 데이터를 저장하는 방법.
  5. 제 4항에 있어서, 상기 한 세트의 속성들은 논리적으로 순차적인 순서로 데 이터를 저장하는 블록을 포함하는, 메모리에 데이터를 저장하는 방법.
  6. 제 4항에 있어서, 상기 한 세트의 속성들은 논리적으로 비순차적인 순서로 데이터를 저장하는 블록을 포함하는, 메모리에 데이터를 저장하는 방법.
  7. 제 4항에 있어서, 상기 한 세트의 속성들은 상기 메모리를 동작시키는 것에 연관된 시스템 데이터를 저장하는 블록을 포함하는, 메모리에 데이터를 저장하는 방법.
  8. 제 4항에 있어서, 상기 메모리는 플래시 EEPROM인, 메모리에 데이터를 저장하는 방법.
  9. 제 4항에 있어서, 상기 메모리는 NAND 구조를 갖는, 메모리에 데이터를 저장하는 방법.
  10. 제 4항에 있어서, 상기 메모리는 착탈 가능 메모리 카드상에 있는, 메모리에 데이터를 저장하는 방법.
  11. 제 4항에 있어서, 상기 비휘발성 메모리는 플로팅 게이트 구조를 갖는 메모리 셀들을 구비하는, 메모리에 데이터를 저장하는 방법.
  12. 제 4항에 있어서, 상기 비휘발성 메모리는 유전층 구조를 갖는 메모리 셀들을 구비하는, 메모리에 데이터를 저장하는 방법.
  13. 제 1항 내지 제 12항 중 어느 한 항에 있어서, 상기 메모리는 각각 일 비트의 데이터를 저장하는 메모리 셀들을 갖는, 메모리에 데이터를 저장하는 방법.
  14. 제 1항 내지 제 12항 중 어느 한 항에 있어서, 상기 메모리는 각각 일 비트 이상의 데이터를 저장하는 메모리 셀들을 갖는, 메모리에 데이터를 저장하는 방법.
  15. 비휘발성 메모리에 있어서,
    블록들로 구성된 메모리로서, 각 블록은 함께 소거 가능한 메모리 단위들로 분할되고, 각 메모리 단위는 논리적 단위의 데이터를 저장하기 위한, 메모리; 및
    상기 블록들의 동작들을 제어하기 위한 제어기로서,
    논리 단위의 데이터의 업데이트들을 저장하기 위해 동시 개방된 업데이트 블록들로서 제 1 소정 개수 이하의 블록을 할당하며;
    논리적으로 순차적인 순서로 된 데이터를 기입하라는 기입 명령에 응하여, 데이터를 업데이트 블록에 논리적으로 순차적인 순서로 기입하며;
    상기 순차적인 논리 단위의 데이터의 추가 기입에 대해 상기 업데이트 블록이 폐쇄될 소정의 조건이 충족된 것에 응하여, 상기 기입을 계속하기 위해 새로운 업데이트 블록을 할당하고, 상기 새로운 할당이 상기 제 1 소정 개수를 초과하면, 비순차적 순서로 데이터를 저장한 임의의 최근 최소 액세스된 것보다 순차적 순서로 데이터를 저장한 최근의 액세스된 최소의 업데이트 블록을 우선적으로 폐쇄하는, 상기 제어기를
    포함하는, 비휘발성 메모리.
  16. 비휘발성 메모리에 있어서,
    블록들로 구성된 메모리로서, 각 블록은 함께 소거 가능한 메모리 단위들로 분할되고, 각 메모리 단위는 논리적 단위의 데이터를 저장하기 위한, 메모리; 및
    상기 블록들의 동작들을 제어하기 위한 제어기로서,
    논리 단위의 데이터의 업데이트들을 저장하기 위해 동시 개방된 업데이트 블록들로서 제 1 소정 개수 이하의 블록을 할당하고;
    논리적으로 비순차적 순서로 논리 단위의 데이터를 저장하기 위해 상기 개방된 업데이트 블록들 중에서 제 2 소정 개수의 업데이트 블록까지 할당하며;
    논리적으로 순차적 순서로 데이터를 저장하기 위해 업데이트 블록의 도입이 상기 제 1 소정 개수가 초과되도록 야기할 때는 언제나, 상기 도입되는 업데이트 블록을 위한 빈 공간을 만들기 위해서 논리적으로 순차적인 순서로 데이터를 내포하는 최근의 액세스된 최소의 업데이트 블록들을 폐쇄하며;
    논리적으로 비순차적 순서로 데이터를 저장하기 위해 업데이트 블록의 도입이 상기 제 2 소정 개수가 초과되도록 야기할 때는 언제나, 상기 도입되는 업데이트 블록을 위한 빈 공간을 만들기 위해서 논리적으로 비순차적인 순서로 데이터를 내포하는 최근의 액세스된 최소의 업데이트 블록들을 폐쇄하는, 상기 제어기를
    포함하는, 비휘발성 메모리.
  17. 제 16항에 있어서, 논리적으로 비순차적 순서로 데이터를 저장하기 위한 상기 업데이트 블록은 논리적으로 순차적 순서로 데이터를 저장하는 것으로부터 전환된, 비휘발성 메모리.
  18. 비휘발성 메모리에 있어서,
    블록들로 구성된 메모리로서, 각 블록은 함께 소거 가능한 메모리 단위들로 분할되고, 각 메모리 단위는 논리적 단위의 데이터를 저장하기 위한, 메모리; 및
    논리 단위의 데이터의 업데이트들을 저장하기 위해 동시 개방된 제 1 소정 개수의 업데이트 블록까지의 풀;
    한 세트의 속성들에 기초하여 업데이트 블록들을 유별하기 위한 한 세트의 기정의된 클래스들로서, 각각의 클래스는 연관된 소정 최대 개수의 업데이트 블록까지의 하위 풀을 지원하는, 클래스들;
    대체될 상기 각각의 하위 풀들 내 상기 업데이트 블록을 명시하기 위해서 상기 한 세트의 기정의된 클래스들에 대한 한 세트의 대응하는 대체 규칙들;
    클래스별로 업데이트 블록들을 내포하는 한 세트의 하위 풀들; 및
    상기 블록들의 동작들을 제어하기 위한 제어기로서,
    상기 연관된 소정 최대 개수의 업데이트 블록들을 내포하는 하위 풀에 동일 클래스의 또 다른 업데이트 블록이 도입되고 있을 때는 언제나, 하위 풀 내 업데이트 블록을 폐쇄하고 제거하며, 상기 제거된 업데이트 블록은 상기 동일 클래스에 대한 상기 대응하는 대체 규칙에 따라 선택되는, 상기 제어기를
    포함하는, 비휘발성 메모리.
  19. 제 18항에 있어서, 상기 한 세트의 속성들은 논리적으로 순차적인 순서로 데이터를 저장하는 블록을 포함하는, 비휘발성 메모리.
  20. 제 18항에 있어서, 상기 한 세트의 속성들은 논리적으로 비순차적인 순서로 데이터를 저장하는 블록을 포함하는, 비휘발성 메모리.
  21. 제 18항에 있어서, 상기 한 세트의 속성들은 상기 메모리를 동작시키는 것에 연관된 시스템 데이터를 저장하는 블록을 포함하는, 비휘발성 메모리.
  22. 제 18항에 있어서, 상기 메모리는 플래시 EEPROM인, 비휘발성 메모리.
  23. 제 18항에 있어서, 상기 메모리는 NAND 구조를 갖는, 비휘발성 메모리.
  24. 제 18항에 있어서, 상기 메모리는 착탈 가능 메모리 카드상에 있는, 비휘발 성 메모리.
  25. 제 18항에 있어서, 상기 비휘발성 메모리는 플로팅 게이트 구조를 갖는 메모리 셀들을 구비하는, 비휘발성 메모리.
  26. 제 18항에 있어서, 상기 비휘발성 메모리는 유전층 구조를 갖는 메모리 셀들을 구비하는, 비휘발성 메모리.
  27. 비휘발성 메모리에 있어서,
    블록들로 구성된 메모리로서, 각 블록은 함께 소거 가능한 메모리 단위들로 분할되고, 각 메모리 단위는 논리적 단위의 데이터를 저장하기 위한, 메모리;
    논리 단위의 데이터의 업데이트들을 저장하기 위해 동시 개방된 제 1 소정 최대 개수의 업데이트 블록까지의 풀;
    한 세트의 속성들에 기초하여 업데이트 블록들을 유별하기 위한 한 세트의 기정의된 클래스들로서, 각각의 클래스는 연관된 소정 최대 개수의 업데이트 블록까지의 하위 풀을 지원하는, 클래스들;
    대체될 상기 각각의 하위 풀들 내 상기 업데이트 블록을 명시하기 위해서 상기 한 세트의 기정의된 클래스들에 대한 한 세트의 대응하는 대체 규칙들;
    클래스별로 업데이트 블록들을 내포하는 한 세트의 하위 풀들; 및
    상기 연관된 소정 최대 개수의 업데이트 블록들을 내포하는 하위 풀에 동일 클래스의 또 다른 업데이트 블록이 도입되고 있을 때는 언제나, 하위 풀 내 업데이트 블록을 폐쇄하고 제거하는 수단으로서, 상기 제거된 업데이트 블록은 상기 동일 클래스에 대한 상기 대응하는 대체 규칙에 따라 선택되는, 상기 수단을
    포함하는, 비휘발성 메모리.
  28. 제 15항 내지 제 27항 중 어느 한 항에 있어서, 상기 메모리는 각각 일 비트의 데이터를 저장하는 메모리 셀들을 갖는, 비휘발성 메모리.
  29. 제 15항 내지 제 27항 중 어느 한 항에 있어서, 상기 메모리는 각각 일 비트 이상의 데이터를 저장하는 메모리 셀들을 갖는, 비휘발성 메모리.
KR1020097007548A 2006-09-15 2007-09-12 비휘발성 메모리 및 클래스 기반의 업데이트 블록 대체 규칙을 위한 방법 KR101430097B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US11/532,467 2006-09-15
US11/532,456 US7779056B2 (en) 2006-09-15 2006-09-15 Managing a pool of update memory blocks based on each block's activity and data order
US11/532,467 US7774392B2 (en) 2006-09-15 2006-09-15 Non-volatile memory with management of a pool of update memory blocks based on each block's activity and data order
US11/532,456 2006-09-15
PCT/US2007/078311 WO2008033952A2 (en) 2006-09-15 2007-09-12 Non-volatile memory and method for class-based update block replacement rules

Publications (2)

Publication Number Publication Date
KR20090079197A KR20090079197A (ko) 2009-07-21
KR101430097B1 true KR101430097B1 (ko) 2014-08-13

Family

ID=39185714

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020097007548A KR101430097B1 (ko) 2006-09-15 2007-09-12 비휘발성 메모리 및 클래스 기반의 업데이트 블록 대체 규칙을 위한 방법

Country Status (4)

Country Link
JP (1) JP4682261B2 (ko)
KR (1) KR101430097B1 (ko)
TW (1) TWI340899B (ko)
WO (1) WO2008033952A2 (ko)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101526497B1 (ko) * 2008-11-27 2015-06-10 삼성전자주식회사 시스템 온 칩 및 이에 대한 정보 처리 방법
JP5175703B2 (ja) 2008-12-11 2013-04-03 株式会社東芝 メモリデバイス
US8688894B2 (en) * 2009-09-03 2014-04-01 Pioneer Chip Technology Ltd. Page based management of flash storage
KR101678868B1 (ko) 2010-02-11 2016-11-23 삼성전자주식회사 플래시 주소 변환 장치 및 그 방법
JP7003133B2 (ja) * 2016-12-21 2022-01-20 エヌチェーン ホールディングス リミテッド スクリプトサイズ及びオペコードリミットに対するセキュリティベース制限を維持しながらブロックチェーン上の複雑な機能を有効するためのコンピュータにより実現されるシステム及び方法
TWI659373B (zh) * 2018-02-14 2019-05-11 財團法人工業技術研究院 區塊鏈系統及應用其的方法
KR20220092973A (ko) * 2019-12-12 2022-07-04 엘지전자 주식회사 펌웨어 제공 장치 및 그 제공 방법
TWI808384B (zh) * 2021-02-23 2023-07-11 慧榮科技股份有限公司 儲存裝置、快閃記憶體控制器及其控制方法
TWI821152B (zh) * 2021-02-23 2023-11-01 慧榮科技股份有限公司 儲存裝置、快閃記憶體控制器及其控制方法
CN115878729B (zh) * 2023-03-03 2023-05-02 湖北省楚天云有限公司 一种基于联盟链的节点区块存储分配优化方法及系统

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080071969A1 (en) * 2006-09-15 2008-03-20 Lin Jason T Method for Class-Based Update Block Replacement Rules in Non-Volatile Memory

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100389867B1 (ko) * 2001-06-04 2003-07-04 삼성전자주식회사 플래시 메모리 관리방법
US7139864B2 (en) * 2003-12-30 2006-11-21 Sandisk Corporation Non-volatile memory and method with block management system
JP2007280108A (ja) * 2006-04-07 2007-10-25 Sony Corp 記憶媒体制御装置、記憶媒体制御方法、プログラム

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080071969A1 (en) * 2006-09-15 2008-03-20 Lin Jason T Method for Class-Based Update Block Replacement Rules in Non-Volatile Memory

Also Published As

Publication number Publication date
KR20090079197A (ko) 2009-07-21
TWI340899B (en) 2011-04-21
WO2008033952A3 (en) 2008-10-02
JP2010503929A (ja) 2010-02-04
WO2008033952A2 (en) 2008-03-20
TW200837562A (en) 2008-09-16
JP4682261B2 (ja) 2011-05-11

Similar Documents

Publication Publication Date Title
US7774392B2 (en) Non-volatile memory with management of a pool of update memory blocks based on each block's activity and data order
JP4938460B2 (ja) 不揮発性メモリおよびブロック管理システムを伴う方法
US7779056B2 (en) Managing a pool of update memory blocks based on each block's activity and data order
KR101430097B1 (ko) 비휘발성 메모리 및 클래스 기반의 업데이트 블록 대체 규칙을 위한 방법
US20080091871A1 (en) Non-volatile memory with worst-case control data management
US20080091901A1 (en) Method for non-volatile memory with worst-case control data management
US20070113030A1 (en) Methods for the management of erase operations in non-volatile memories
US20070113029A1 (en) Structures for the management of erase operations in non-volatile memories
EP1702338B1 (en) Robust data duplication and improved update method in a multibit non-volatile memory
WO2005066793A2 (en) Non-volatile memory and method with non-sequential update block management
JP2010507147A (ja) 最悪の場合におけるデータ管理を伴う不揮発性メモリおよびそのための方法
KR20060134011A (ko) 메모리 플레인 배열을 갖춘 비휘발성 메모리 및 방법
EP1704479B1 (en) Non-volatile memory and method with phased program failure handling

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: 20170719

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20180718

Year of fee payment: 5