KR20070007264A - 비순차 갱신 블록 관리를 구비한 비휘발성 메모리 및 방법 - Google Patents

비순차 갱신 블록 관리를 구비한 비휘발성 메모리 및 방법 Download PDF

Info

Publication number
KR20070007264A
KR20070007264A KR1020067013317A KR20067013317A KR20070007264A KR 20070007264 A KR20070007264 A KR 20070007264A KR 1020067013317 A KR1020067013317 A KR 1020067013317A KR 20067013317 A KR20067013317 A KR 20067013317A KR 20070007264 A KR20070007264 A KR 20070007264A
Authority
KR
South Korea
Prior art keywords
block
logical
update
memory
data
Prior art date
Application number
KR1020067013317A
Other languages
English (en)
Inventor
알랜 웰쉬 싱클레어
세르게이 아나톨리에비 고로베츠
알랜 데이비드 베네트
피터 존 스미스
Original Assignee
쌘디스크 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US10/750,155 external-priority patent/US7139864B2/en
Application filed by 쌘디스크 코포레이션 filed Critical 쌘디스크 코포레이션
Publication of KR20070007264A publication Critical patent/KR20070007264A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/10Programming or data input circuits
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7202Allocation control and policies

Abstract

본 발명은 블록 메니지먼트 시스템을 갖는 비휘발성 메모리로서, 이는 불연속성 논리 유닛을 갖는 갱신 블록을 지원하고, 램(RAM)에 버퍼되어, 비휘발성 메모리에 주기적으로 저장되는 불연속성 갱신 블록에서의 놀리 유닛의 인덱스를 구비하는 블록 관리 시스템의 비휘발성 메모리에 관한 것이다. 일예로서, 상기 인덱스는 인덱스들을 저장하기 위한 블록 내에 저장되고, 다른 예로서, 상기 인덱스는 각각의 논리 유닛의 헤더 내에 저장되며, 또 다른 예로서, 최종 인덱스 갱신 후이지만 다음의 이전에 기록된 상기 논리 유닛은, 각각의 논리 유닛의 헤더 내에 저장된 그들의 인덱싱 정보를 갖는다. 이러한 방식에서, 전력 중단 이후, 최근 기록된 논리 유닛은 초기화 도중에 스캐닝을 수행함없이 판정될 수 있다. 또 다른 예로서, 블록은, 하나 이상의 논리 서브그룹에 지향된, 부분적으로 순차 및 부분적으로 비-순차적으로 관리된다.

Description

비순차 갱신 블록 관리를 구비한 비휘발성 메모리 및 방법{NON-VOLATILE MEMORY AND METHOD WITH NON-SEQUENTIAL UPDATE BLOCK MANAGEMENT}
본 발명은 일반적으로, 비휘발성 반도체 메모리에 관한 것으로, 구체적으로는 블록 내 데이터 갱신의 유효한 핸들링에 의한 메모리 블록 관리 시스템을 구비한 것들에 관한 것이다.
특히, 작은 형상 팩터 카드로서 패키징된 EEPROM 및 플래시 EEPROM 형태의 전하의 비휘발성 저장이 가능한 고상 메모리(solid-state memory)는 최근 다양한 모바일 및 핸드헬드 디바이스, 특히, 정보 기기 및 가전 제품의 최상의 저장 장치가 되고 있다. 역시, 고상 메모리인 컨트롤러(임의 접근 메모리)와는 달리, 플래시 메모리는 비휘발성이며, 파워가 꺼진 이후에도 그 저장된 데이터를 유지한다. 또한, 컨트롤러(판독 전용 메모리)와는 달리, 플래시 메모리는 디스크 저장 디바이스와 유사하게 재기록할 수 있다. 보다 높은 비용에도 불구하고, 플래시 메모리는 대용량 저장 용례에 점증적으로 사용되고 있다. 하드 드라이브 및 플로피 디스크 같은 회전 자기 매체에 기초한 종래의 대용량 저장부는 모바일 및 핸드헬드 환경에서는 부적합하다. 이는 디스크 드라이브가 부피가 큰 경향이 있으며, 기계적 손상을 받기 쉽고, 높은 레이턴시(latency) 및 높은 파워 요구를 갖기 때문이다. 이들 바 람직하지 못한 속성은 디스크 기반 저장부가 대부분의 모바일 및 휴대용 용례들에 비실용적이게 한다. 다른 한편, 내장형 및 제거가능한 카드 형태 양자 모두의 플래시 메모리는 그 작은 크기, 낮은 파워 소비, 고속 및 고 신뢰성 특성 때문에, 모바일 및 핸드헬드 환경에 이상적으로 적합하다.
플래시 EEPROM은 삭제될 수 있고, 그 메모리 셀에 새로운 데이터가 기록 또는 "프로그램"될 수 있는 비휘발성 메모리라는 점에서, EEPROM(전기적 삭제 및 프로그램가능 판독 전용 메모리)와 유사하다. 양자는 소스와 드레인 영역 사이에서 반도체 기판의 채널 영역 위에 배치되어 있는, 전계 효과 트랜지스터 구조의, 부유(비접속) 도전성 게이트를 활용한다. 이때, 제어 게이트는 부유 게이트 위에 제공된다. 트랜지스터의 임계 전압 특성은 부유 게이트상에 유지된 전하의 양에 의해 제어된다. 즉, 부유 게이트상의 주어진 레벨의 전하에 대하여, 트랜지스터가 그 소스와 드레인 영역 사이의 도전을 가능하게 하기 위해 "온" 상태로 전환되기 이전에, 제어 게이트에 인가되어야만 하는 대응 전압(임계치)이 존재한다. 특히, 플래시 EEPROM 같은 플래시 메모리는 메모리 셀의 전체 블록이 동시에 삭제될 수 있게 한다.
부유 게이트는 소정 범위의 전하를 보유하며, 따라서, 임계 전압 윈도우내의 임의의 임계 전압 레벨로 프로그램될 수 있다. 임계 전압 윈도우의 크기는 디바이스의 최소 및 최대 임계치 레벨들에 의해 한정되며, 이는, 순차적으로, 부유 게이트상에 프로그램될 수 있는 저하의 범위에 대응한다. 임계치 윈도우는 일반적으로, 메모리 디바이스의 특성, 동작 조건 및 이력에 의존한다. 윈도우내의 각각의 별개 의 분해가능한 임계 전압 레벨 범위는 원론적으로, 셀의 별개의 한정된 메모리 상태를 지정하기 위해 사용될 수 있다.
메모리 셀로서 기능하는 트랜지스터는 통상적으로, 두 메커니즘 중 하나에 의해 "프로그램된" 상태로 프로그램된다. "핫 전자 주입"에서, 드레인에 인가된 높은 전압은 전자를 기판 채널 영역을 가로질러 가속한다. 동시에, 제어 게이트에 인가된 높은 전압은 전자를 얇은 게이트 유전체를 통해 부유 게이트상으로 당긴다. "터널링 주입"에서, 높은 전압이 기판에 대해 제어 게이트에 인가된다. 이 방식으로, 전자는 기판으로부터 개입(intervening) 부유 게이트로 당겨진다. 용어 "프로그램"이 역사적으로, 메모리 상태를 변경하도록 메모리의 최초에 삭제되어 있는 전하 저장 유닛에 주입함으로써 메모리에 기록하는 것을 나타내지만, 이는 이제, "기록" 또는 "레코드" 같은 보다 일반적인 용어로 상호교체될 수 있다.
메모리 디바이스는 다수의 메커니즘에 의해 삭제될 수 있다. EEPROM에 대하여, 메모리 셀은 부유 게이트내의 전자가 기판 채널 영역으로 얇은 산화물을 통해 터널링(즉, 포울러-노드하임(Fowler-Nordheim) 터널링)하도록 제어 게이트에 대하여 기판에 높은 전압을 인가함으로써, 전기적으로 삭제가능하다. 통상적으로, 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 Novolatile Memory Cell(IEEE Electron Device Letters, vol. 21, no. 11, 2000년 11월, pp.543-545)"에 설명되어 있다. ONO 유전체층은 소스와 드레인 확산부 사이의 채널을 가로질러 연장한다. 1개 데이터 비트를 위한 전하가 드레인에 인접한 유전체층에 국지집결되고, 다른 데이터 비트를 위한 전하는 소스에 인접한 유전체층에 국지집결된다. 예로서, 미국 특허 제5,768,192호 및 제6,011,725호는 두 개의 이산화실리콘층 사이에 개재된 트랩핑 유전체를 가지는 비휘발성 메 모리 셀을 개시한다. 다중상태 데이터 저장부는 유전체내의 공간적으로 분리된 전하 저장 영역의 이진 상태를 개별적으로 판독함으로서 이행된다.
판독 및 프로그램 성능을 향상시키기 위해, 어레이내의 다수의 전하 저장 소자 또는 메모리 트랜지스터가 병렬로 판독 또는 프로그램된다. 따라서, 메모리 소자의 "페이지"가 함께 판독 또는 프로그램된다. 기존 메모리 아키텍쳐에서, 로우(low)는 통상적으로 수 개의 인터리빙된 페이지를 포함하거나, 이는 하나의 페이지를 구성할 수 있다. 페이지의 모든 메모리 소자는 함께 판독 또는 프로그램된다.
플래시 메모리 시스템에서, 삭제 동작은 판독 및 프로그램 동작 보다 한배 만큼 보다 긴 시간을 소요할 수 있다. 따라서, 현저한 크기의 삭제 블록을 갖는 것이 바람직하다. 이 방식으로, 삭제 시간은 큰 총 메모리 셀에 걸쳐 상각된다(amortized).
플래시 메모리 특성은 삭제된 메모리 위치에 데이터가 기록되어야만 하게 한다. 호스트로부터의 특정 논리 어드레스의 데이터가 갱신되는 경우, 한가지 방식은 동일 물리 메모리 위치에 갱신 데이터를 재기록하는 것이다. 즉, 논리 대 물리 어드레스 맵핑은 불변이다. 그러나, 이는 그 물리 위치를 포함하는 전체 삭제 블록이 먼저 삭제되고, 그후, 갱신 데이터로 재기록되어야 한다는 것을 의미한다. 이 갱신 방법은 비효율적이며, 그 이유는 전체 삭제 블록이 삭제 및 재기록되는 것을 필요로 하기 때문에, 특히, 갱신되는 데이터가 단지 삭제 블록의 작은 부분을 점유하는 경우에, 비효율적이다. 또한, 이는 보다 높은 메모리 블록의 삭제 재이용 빈도수를 초래하며, 이는 이 유형의 메모리 디바이스의 제한된 내구성의 견지에서 바람직하 지 못하다.
플래시 메모리 시스템 관리의 다른 문제점은 시스템 제어 및 디렉토리 데이터에 있다. 데이터는 다양한 메모리 동작의 과정 동안 생성 및 억세스된다. 따라서, 그 효율적 취급 및 즉석 억세스는 성능에 직접적 영향을 준다. 플래시 메모리가 저장부를 의미하며, 비휘발성이기 때문에, 플래시 메모리내에 이 유형의 데이터를 유지하는 것이 바람직하다. 그러나, 컨트롤러와 플래시 메모리 사이의 개입 파일 관리 시스템이 있으면, 데이터는 직접적으로 억세스될 수 있다. 또한, 시스템 제어 및 디렉토리 데이터는 활성적이고, 분화(fragmented)되는 경향이 있으며, 이는 큰 크기의 블록 삭제를 갖는 시스템의 저장에 유리하지 않다. 종래에, 이 유형의 데이터는 컨트롤러 램(RAM)에 설정되며, 그에 의해, 컨트롤러에 의한 직접 억세스가 가능하다. 메모리 디바이스가 파워공급된 이후, 초기화 프로세스는 플래시 메모리가 필요한 시스템 제어 및 디렉토리 정보를 컨트롤러 램에 배치하도록 컴파일하기 위해 스캐닝될 수 있게 한다. 이 프로세스는 시간을 소요하며, 컨트롤러 램 용량을 필요로 하고, 이 모두는 플래시 메모리 용량이 증가하면 보다 심해진다.
US 6,567,307호는 스크래치 패드로서 작용하는 다수의 삭제 블록에 갱신 데이터를 기록하고, 궁극적으로, 다양한 블록중 유효 섹터를 병합하며, 그들을 논리 순차 순서로 재배열한 이후 섹터에 재기록하는 것을 포함하는 큰 삭제 블록 사이의 섹터 갱신을 다루는 방법을 개시한다. 이 방법에서, 모든 미소한 갱신시 블록이 삭제 및 재기록될 필요가 없다.
WO 03/027828 및 WO 00/49488 양자 모두는 지역(zone)내의 논리 섹터 어드레 스를 구획화하는 것을 포함하는 큰 삭제 블록 사이의 갱신을 다루는 메모리 시스템을 개시한다. 논리 어드레스 범위의 작은 지역이 사용자 데이터를 위한 다른 지역으로부터 별개의 활성적 시스템 제어 데이터를 위해 예약된다. 이 방식으로, 그 소유의 지역에서의 시스템 제어 데이터의 조작은 다른 지역에서의 연계된 사용자 데이터와 상호작용하지 않는다. 갱신은 논리 섹터 레벨에 있으며, 기록 포인터는 기록될 블록내의 대응 물리 섹터를 지시한다. 맵핑 정보는 램에 버퍼링되고, 궁극적으로, 메인 메모리내의 섹터 할당 테이블에 저장된다. 논리 섹터의 최신 버전은 기존 블록 중의 모든 이전 버전을 폐기시키며, 이는 부분적으로 폐기된다. 허용가능한 방식으로 부분적 폐기 블록을 유지하기 위해 조각 모음이 수행된다.
종래의 시스템은 다수의 블록에 걸쳐 분포된 갱신 데이터를 갖는 경향이 있거나, 갱신 데이터가 다수의 기존 부분을 부분적 폐기할 수 있다. 종종, 부분적 폐기 블록에 대해 대량의 조각 모음이 필요한 결과가 얻어지며, 이는 비효율적이고, 메모리의 영구적 노화를 초래한다. 또한, 비순차적 갱신에 비해 순차적 갱신을 다루는 계통적 및 효율적 방식이 존재하지 않는다.
따라서, 고용량 및 고성능 비휘발성 메모리에 대한 일반적 필요성이 존재한다. 특히, 상술된 문제점 없이 큰 블록으로 메모리 동작을 수행할 수 있는 고용량 비휘발성 메모리를 가질 필요가 있다.
비휘발성 메모리 시스템은 물리적 메모리 위치의 물리적 그룹으로 조직화된다. 각 물리적 그룹(메타블록)은 유닛으로서 삭제가능하며, 데이터의 논리적 그룹을 저장하기 위해 사용될 수 있다. 메모리 관리 시스템은 논리적 그룹의 갱신 데이터를 기록하기 위해 전용화된 메타블록 할당에 의해 데이터의 논리적 그룹의 갱신을 가능하게 한다. 갱신 메타블록은 갱신 데이터를 수신된 순서로 레코드하고, 레코딩이 원래 저장된 바와 같은 정확한 논리적 순서(순차적)인지 아닌지(카오틱) 여부에 제한을 갖지 않는다. 결과적으로, 갱신 메타블록은 추가 레코딩을 위해 폐쇄된다. 다수의 프로세스 중 하나가 취해지지만, 궁극적으로, 원본 메타블록을 교체하는 정확한 순서의 완전히 채워진 메타블록으로 종결된다. 카오틱의 경우에, 디렉토리 데이터가 빈번한 갱신을 수행하는 방식으로 비휘발성 메모리내에 유지된다. 이 시스템은 다수의 논리적 그룹이 동시에 갱신되는 것을 지원한다.
본 발명의 한가지 특징은 데이터가 논리적 그룹 단위로 갱신될 수 있게 한다. 따라서, 논리적 그룹이 갱신될 때, 논리적 유닛의 분포(그리고, 또한, 갱신이 폐기하는 메모리 유닛의 산재)가 소정 범위로 제한된다. 이는 논리적 그룹이 통상 물리적 블록내에 포함될 때 특히 그러하다.
논리적 그룹의 갱신 동안, 통상적으로 하나 또는 두 개의 블록이 갱신된 논리적 유닛을 버퍼링하기 위해 할당될 필요가 있다. 따라서, 조각 모음은 비교적 보다 소수의 블록에 걸쳐 수행되기만 하면 된다. 카오틱 블록의 조각 모음은 병합 또는 압축 중 어느 하나에 의해 수행될 수 있다.
갱신 프로세스의 경제성은 순차적 갱신에 비해 카오틱(비순차적) 갱신을 위해 어떠한 추가적인 블록도 할당될 필요가 없도록 갱신 블록의 포괄적 처리시 보다 더 명백하다. 모든 갱신 블록은 순차적 갱신 블록으로서 할당되며, 임의의 갱신 블록은 카오틱 갱신 블록으로 변할 수 있다. 사실, 순차로부터 카오틱으로의 갱신 블록의 변경은 임의적이다.
시스템 자원의 효율적 사용은 다수의 논리적 그룹이 동시에 갱신될 수 있게 한다. 이는 효율을 추가로 증가시키고, 오버헤드를 감소시킨다.
다수개의 메모리 평면들 상에 분산되는 메모리용 정렬
본 발명의 또 다른 양상을 따라, 논리 유니트들이 병렬로 읽기 또는 복수개의 평면들로 프로그램될 수 있도록, 삭제 가능한 블록으로 구성되고, 그리고 복수개의 메모리 평면들로부터 구성되는 메모리 어레이에 있어서, 소정의 메모리 평면에 저장된 제1 블록의 최초 논리 유니트는 업데이트될 때, 준비 상태(provision)에서, 최초 상태와 동일한 평면 내에 업데이트된 논리 유니트가 유지할 수 있도록 구성된다. 상기와 같은 목적은 업데이트된 논리 유니트를 동일 평면 내에 제2 블록의 사용 가능한 다음 위치로 기록하여 성취된다. 바람직하게는, 논리 유니트는 주어진 논리 유니트들의 모든 버전들이 센싱 회로의 동일 세트에 의하여 서비스될 수 있도록 다른 버전으로써 평면 상에서 동일한 옵셋 위치로 저장된다.
바람직한 실시예에 있어서, 최종 프로그램 유니트로부터 사용 가능한 다음 평면 정렬 메모리 유니트로의 인터비닝(intervening) 갭들은 논리 유니트들의 현재 버전에 따라 패딩된다.
상기의 패딩은 최종 프로그램된 논리 유니트로부터 논리적으로 수행되는 논리 유니트들의 현재 버전들과 그리고 사용 가능한 다음 평면 정렬 메모리 유니트 내에 저장된 논리 유니트로부터 논리적으로 선행하는 논리 유니트들의 현재 버전들로 상기 갭을 채움으로써 성취된다.
이와 같은 방법으로, 논리 유니트의 모든 버전들은 쓰레기 수집 작용에서, 논리 유니트의 최근 버전이 다른 평면으로부터 인출(성능 저하)될 필요가 없도록 할 수 있도록 최초의 상태와 동일한 옵셋을 이용하여 동일한 평면 상에 유지된다. 바람직한 실시예에 있어서, 평면을 가로지르는 각각의 메모리 유니트는 최근의 버전으로 업데이트되거나 패딩된다. 각각의 평면으로부터의 논리 유니트는 병렬로 읽기 가능하며, 추가적인 재정렬 없이 논리 순차 순서로 이루어진다.
이와 같은 구조에 따라, 논리 그룹의 논리 유니트들의 최근 버전의 평면상 재정렬을 가능하도록 하고, 그리고 다른 메모리 평면들로부터 최근 버전들을 수집하는 것을 피함으로써 혼돈 블록의 통합을 위한 시간을 감소할 수 있다. 상기와 같은 구성은 호스트 인터페이스에 대한 성능 스팩이 메모리 시스템에 의한 섹터 쓰기 작용의 완료를 하는데 있어서 최대 지연 낳는 구성에 잘 적용된다.
단계화된 프로그램 에러 취급
본 발명의 또 다른 양상에 따르면, 블록 관리 시스템을 갖는 메모리에 있어서, 시간 임계 메모리 작용 동안의 블록 내의 프로그램 오류는 브레이크아웃 메모리 내에서 프로그래밍 작용을 계속 진행함에 따라 취급된다. 바도 작은 임계 시간에 있어서, 중단이 발생하기 이전의 오류 블록에 기록된 데이트는 또 다른 블록으로 이전되며, 상기와 같은 작용은 브레이크아웃 블록이 될 수도 있다. 오류가 발생한 블록은 버려진다. 이와 같은 방법으로, 결함 블록이 발견되면, 저장된 데이터를 결함 블록 내에 저장된 데이터를 스팟(spot)으로 이동시켜 데이터의 손실 없이 그리고 지정된 시간 제한을 초과하지 않고 취급될 수 있다. 이와 같은 에러 취급은 임계 시간 동안에 전체 작용이 새로운 블록 상에서 반복될 필요가 없도록 쓰레기 수집 작용을 위하여 특히 중요하다. 그 다음에 적절한 시간에, 결합 블록으로부터의 데이터는 또 다른 블록으로 재이동시켜 구조할 수 있다.
프로그램 오류 취급은 통합 작용 동안에 매우 중요하다. 정상적인 통합 작용은 최초 블록 및 업데이트 블록에 존재하는 논리 그룹의 모든 논리 유니트들의 현재 버전들을 통합 블록 내로 통합한다. 상기의 통합 작용 동안에, 만약 프로그램 오류가 통합 블록 내에 발생한다면, 브레이크아웃 통합 블록으로써 작용하는 도 다른 블록이 나머지 논리 유니트들의 통합을 수신하기 위하여 준비된다. 이와 같은 방법으로, 한번 이상 카피되는 논리 유니트가 존재하지 않게 되며, 예외적인 취급에 따른 작용은 정상적인 통합 작용을 위하여 설정된 기간 내에 완수될 수 있다. 적절한 시간에, 통합 작용은 그룹의 모든 우수한 논리 유니트들을 브레이크아웃 블록으로 통합하여 완수될 수 있다. 적절한 시간은 통합을 수행할 시간이 있을 때, 현재 호스트 쓰기 작용 외부의 다른 기간일 수 있다. 한가지 적절한 시간은 업데이트가 존재하나, 관련된 통합 작용이 없는 곳에서 또 다른 호스트 쓰기 기간일 수 있다.
프로그램 오류 취급을 이용한 통합은 복수개의 단계를 통하여 구현될 수 있다. 첫번째 단계에서, 논리 유니트들은 한번 이상의 각 논리 유니트를 통합하는 것을 피하기 위하여 프로그램 오류가 발생한 이후에 한 개의 블록 이상의 블록 내로 통합된다. 최종 단계는 적절한 시간에 완료되며, 상기의 적절한 시간에 논리 그룹은 한 개의 블록 내로 통합되며, 바람직하게는 모든 논리 유니트들을 순차적인 순서로 브레이크아웃 통합 블록 내로 수집하여 이루어진다.
비순차 업데이트 블록 인덱싱
본 발명의 또 다른 양상에 따르면, 비순차 논리 유니트들을 갖는 업데이트 블록들을 지원하는 블록 관리 시스템을 갖는 비휘발성 메모리에 있어서, 비순차 업데이트 블록 내의 논리 유니트들의 인덱스는 RAM에 버퍼링되며, 비휘발성 메모리 내로 주기적으로 저장된다. 일실시예에 따르면, 상기의 인덱스는 업데이트 블록 그자체에 저장된다. 또 다른 실시예에 있어서, 최종 업데이트 이후지만 다음 업데이트 이전에 쓰여진 논리 유니트들은 각각의 논리 유니트의 헤더 내에 저장된 인덱싱 정보를 구비하고 있다. 이와 같은 방법으로, 파워 아웃티즈(outage) 이후에, 최근에 쓰여진 논리 유니트들의 위치는 초기화 기간 동안에 스케닝을 수행할 필요없이 결정될 수 있다. 또 다른 실시예에 있어서, 블록은 부분적으로 순차적이고 그리고 부분적으로 비순차적인 방법으로 관리되며, 한개의 논리 서브그룹 보다 많은 그룹에 해당한다.
제어 데이터 통합 및 관리
본 발명의 또 다른 양상에 따르면, 제어 데이터의 약간 또는 전부와 같은 임계 데이터는 만약 그것이 중복 상태로 유지된다면, 엑스트라 레벨의 신뢰도로 보증된다. 상기와 같은 중복은 메모리 셀들의 동일한 세트의 멀티 비트를 연속으로 프로그래밍하는 2-패스 프로그래밍을 사용하는 멀티-상태 메모리 시스템을 위하여, 제2 패스 내의 소정의 프로그래밍 오류가 제1 패스에 의하여 구성된 데이터를 손상시키지 않는 방법으로 실행된다. 이와 같은 중복은 쓰기 취소의 검출, 검출 오류의 검출(예를 들면, 두개의 카피가 우수한 ECC를 갖지만, 데이터는 서로 다르다) 등을 가능하게 하며, 엑스트라 레벨의 신뢰도를 제공한다.데이터 중복에 대한 여러개의 기술들이 사용 가능하다.
일 실시예에 있어서, 주어진 데이터의 두개의 카피가 조기 프로그래밍 패스에서 프로그래밍된 이후에, 다음의 프로그래밍 패스는 두개의 카피 중에서 최소한 한개의 카피를 저장하는 메모리 셀들을 프로그래밍하는 것을 피한다. 이와 같은 방법으로, 두개의 카피 중 최소한 한개의 카피는 그 다음의 프로그래밍 패스가 완료되기 이전에 취소되고 그리고 조기 패스의 데이터를 손상시키는 경우 영향을 받지 않는다.
또 다른 실시예에 있어서, 주어진 데이터의 두개의 카피들은 두개의 카피들 중 최대한 한개의 카피가 다음 프로그래밍 패스에서 프로그래밍되는 메모리 셀들을 구비하는 두개의 다른 블록들에 저장된다.
또 다른 실시예에 있어서, 주어진 데이터의 두개의 카피들이 프로그래밍 패스에 저장된 이후에, 두개의 카피를 저장하는 메모리 셀들의 세트에 더 이상의 프로그래밍이 진행되지 않는다. 상기와 같은 것은 메모리 셀들의 세트를 위하여 궁극적인 프로그래밍 패스 내의 두개의 카피를 프로그래밍하여 성취된다.
또 다른 실시예에 있어서, 주어진 데이터의 두개의 카피들은 프로그래밍된 메모리 셀들 상에서 더 이상의 프로그래밍이 발생하지 않도록 하기 위하여 이진 프로그래밍 모드로 멀티-상태 메모리 내로 프로그래밍된다.
또 다른 실시예에 있어서, 메모리 셀들의 동일한 세트의 멀티 비트를 연속적으로 프로그래밍하기 위하여 2-패스 프로그래밍 기술을 적용하는 멀티-상태 메모리 시스템에 있어서, 무장애(fault-tolerant) 코드는 조기 프로그래밍 패스에 의하여 구성된 데이터가 다음 프로그래밍 패스의 에러에 둔감하도록 멀티 메모리 상태를토드화하기 위하여 사용된다.
본 발명의 또 다른 양상에 따르면, 블록 관리 시스템을 갖는 비휘발성 메모리에 있어서, 메모리 블록의 제어 쓰레기 수집 또는 우선 위치 재설정은 많은 수의 업데이트 블록들이 위치 재설정을 동시에 필요로 하는 상황을 피하기 위하여 구현된다. 예를 들면, 상기와 같은 상황은 블록 관리 시스템의 작용을 제어하기 위하여 사용된 제어 데이터를 업데이트할 때 발생한다. 제어 데이터 유형의 계층은 업데이트 빈도의 가변 정도에 따라 존재할 수 있으며, 그에 따라 다른 속도로 쓰레기 수집 또는 위치 재설정을 필요로 하는 관련 업데이트 블록들을 얻게 된다. 한개의 제어 데이터 유형보다 많은 쓰레기 수집 작용들이 일치하는데 소정의 시간대가 있을 수 있다. 극단적인 경우에 있어서, 모든 제어 데이터 유형을 위한 업데이트 블록들의 위치 재설정 단계들은 정렬되어, 모든 업데이트 블록들이 동시에 위치 재설정을 필요로 할 수 있다.
본 발명의 부가적인 특징 및 장점은 그 양호한 실시예의 하기의 설명으로부터 이해될 것이며, 양호한 실시예의 설명은 첨부 도면과 연계하여 이루어진다.
도 1은 본 발명을 이행하기에 적합한 메모리 시스템의 메인 하드웨어 콤포넌 트를 개략적으로 예시하는 도면.
도 2는 본 발명의 양호한 실시예에 따른, 컨트롤러의 메모리 관리자에 의해 관리되는, 그리고, 섹터의 물리 그룹(또는 메타블록)으로 조직화된 메모리를 예시하는 도면.
도 3A(i) 내지 도 3A(iii)는 본 발명의 양호한 실시예에 따른, 논리 그룹과 메타블록 사이의 맵핑을 개략적으로 예시하는 도면.
도 3B는 논리 그룹과 메타블록 사이의 맵핑을 개략적으로 예시하는 도면.
도 4는 물리 메모리내의 구조와 메타블록의 정렬을 예시하는 도면.
도 5A는 다른 평면의 최소 삭제 유닛의 링크형성으로 구성되는 메타블록을 예시하는 도면.
도 5B는 메타블록으로의 링크형성을 위해 각 평면으로부터 하나의 최소 삭제 유닛(MEU)이 선택되는 일 실시예를 예시하는 도면.
도 5C는 메타블록으로의 링크형성을 위해, 각 평면으로부터 하나 이상의 MEU가 선택되는 일 실시예를 예시하는 도면.
도 6은 플래시 메모리와 컨트롤러 내에 구현되는 바와 같은 메타블록 관리 시스템의 개략 블록도.
도 7A는 순차 갱신 블록에 순차 순서로 기록되는 논리 그룹내의 섹터의 예를 예시하는 도면.
도 7B는 카오틱 갱신 블록에 카오틱 순서로 기록되는 논리 그룹내의 섹터의 예를 예시하는 도면.
도 8은 논리 어드레스의 불연속성을 갖는 두 개의 별개의 호스트 기록 동작의 결과로서 순차적 갱신 블록에 순차 순서로 기록되는 논리 그룹내의 섹터의 예를 예시하는 도면.
도 9는 본 발명의 일반적 실시예에 따른, 데이터의 논리 그룹을 갱신하기 위한 갱신 블록 관리자에 의한 프로세스를 예시하는 흐름도.
도 10은 본 발명의 양호한 실시예에 따른, 데이터의 논리 그룹을 갱신하기 위한 갱신 블록 관리자에 의한 프로세스를 예시하는 흐름도.
도 11A는 도 10에 도시된 카오틱 갱신 블록을 폐쇄하는 병합 프로세스를 보다 상세히 예시하는 흐름도.
도 11B는 도 10에 도시된 카오틱 갱신 블록을 폐쇄하기 위한 압축 프로세스를 보다 상세히 예시하는 흐름도.
도 12A는 논리 그룹의 모든 가능한 상태 및 다양한 동작하에서 그들 사이의 가능한 전이를 예시하는 도면.
도 12B는 논리 그룹의 가능한 상태를 나열하는 테이블.
도 13A는 논리 그룹에 대응하는 물리 그룹인 메타블록의 모든 가능한 상태 및 다양한 동작하에서의 그들 사이의 가능한 전이를 예시하는 도면.
도 13B는 메타블록의 가능한 상태를 나열하는 테이블.
도 14A 내지 도 14J는 논리 그룹의 상태와, 또한, 물리 메타블록에 대한 다양한 동작의 영향을 예시하는 상태도.
도 15는 할당을 위한 삭제 블록과 개방 및 폐쇄된 갱신 블록의 추적을 유지 하기 위한 할당 블록 리스트(ABL)의 구조의 양호한 실시예를 예시하는 도면.
도 16A는 카오틱 블록 인덱스(CBI) 섹터의 데이터 필드를 예시하는 도면.
도 16B는 전용화된 메타블록내에 레코드되는 카오틱 블록 인덱스(CBI) 섹터의 예를 예시하는 도면.
도 16C는 카오틱 갱신을 받는 주어진 논리 그룹의 논리 섹터의 데이터에 대한 억세스를 예시하는 흐름도.
도 16D는 논리 그룹이 서브그룹으로 분할되어 있는 대안 실시예에 따른, 카오틱 갱신을 받는 주어진 논리 그룹의 논리 섹터의 데이터에 대한 억세스를 예시하는 흐름도.
도 16E는 각 논리 그룹이 다수의 서브그룹으로 분할되어 있는 실시예를 위한 카오틱 블록 인덱싱(CBI) 섹터 및 그 기능의 예를 예시하는 도면.
도 17A는 그룹 어드레스 테이블(GAT) 섹터의 데이터 필드를 예시하는 도면.
도 17B는 GAT 블록에 레코드되는 그룹 어드레스 테이블(GAT) 섹터의 예를 예시하는 도면.
도 18은 삭제 블록의 사용 및 재생을 위한 제어 및 디렉토리 정보의 분포 및 흐름을 예시하는 개략적 블록도.
도 19는 논리 대 물리 어드레스 변환의 프로세스를 도시하는 플로우차트.
도 20은 메모리 관리의 동작의 과정에서 제어 데이터 구조상에 수행되는 동작의 계층체계를 예시하는 도면.
도21은 복수개의 메모리 평면들로부터 구성되는 메모리 어레이를 도시하는 도면이다.
도22A는 본 발명의 일반적인 구현에 따라 평면 정렬을 이용한 업데이트 방법을 도시하는 플로우 차트이다.
도22B는 도22A에 도시된 플로우 차트에서 업데이트를 저장하는 단계의 바람직한 실시예를 도시하는 도면이다.
도23A는 평면 정렬과 상관없이 순차적인 업데이트 블록에 대하여 순처적인 순서로 쓰여진 논리 유니트들의 예를 도시하는 도면이다.
도23B는 평면 정렬과 상관없이 혼돈 업데이트 블록에 대하여 비수차적인 순서로 쓰여진 논리 유니트들의 예를 도시하는 도면이다.
도24A는 본 발명의 바람직한 일실시예에 따라 평면 정렬 및 페딩을 갖는 도23A의 순차 업데이트 예를 도시하는 도면이다.
도24B는 본 발명의 바람직한 일실시예에 따라 평면 정렬을 구비하고 그리고 페딩을 구비하지 않는 도23B의 혼돈 업데이트 예를 도시하는 도면이다.
도24C는 본 발명의 바람직한 또 다른 실시예에 따라 평면 정렬 및 페딩을 갖는 도23B의 혼돈 업데이트 예를 도시하는 도면이다.
도25는 두 개의 논리 섹터들과 같은 두 개의 논리 유니트들을 저장하기 위하여 각각의 페이지가 두 개의 메모리 유니트들을 포함하는, 예시적인 메모리 구조를 도시하는 도면이다.
도26A는 각각의 페이지가 한 개 대신에 두 개의 섹터들을 포함하는 것을 제외한 도21의 메모리 구조에 유사한 것을 도시하는 도면이다.
도26B도는 개력적인 선형 패션 내에 구성된 메모리 유니트들을 갖는 도26A의 메타 블록들을 구비하는 도면이다.
도27은 한 개의 위치에서 또 다른 위치로 카피되는 논리 유니트들을 페딩하지 않고, 업데이트 블록 내에서 평면 정열을 위한 다른 구조를 도시하는 도면이다.
도28은 통합 작용 중에 결함 블록 내에서 프로그램 오류가 발생할때, 통합 작용이 또 다른 블록 상에서 반복되는 구조를 도시하는 도면이다.
도29는 쓰기(업데이트) 작용 뿐만 아니라 통합 작용을 완료하기 위하여 충분한 시간을 제공하는 시간 또는 쓰기 지연을 갖는 호스트 쓰기 작용을 개략적으로 도시하는 도면이다.
도30은 본 발명에 의한 전체 구조에 따라 프로그램 오류 취급에 대한 플로우 차트를 도시하는 도면이다.
도31A는 제3 블록(최종 위치 재설정) 블록이 제2(브레이크아웃) 블록과 다른 구성을 갖는 프로그램 오류 취급의 제1실시예를 도시하는 도면이다.
도31B는 제3 (최종 위치 재설정) 블록이 제2 (브레이크아웃) 블록과 동일한 구성을 갖는 프로그램 오류 취급의 또 다른 실시예를 도시하는 도면이다.
도32A는 통합 작용이 결과적으로 얻어지는 최초 업데이트 작용의 플로우 차트를 도시하는 도면이다.
도32B는 본 발명의 바람직한 실시예에 있어서 복수개의 단계 통합 작용의 플로우 차트를 도시하는 도면이다.
도33은 복수개의 페이즈 통합 작용의 제1 및 최종 단계의 예시적인 타이밍을 도시하는 도면이다.
도34A는 브레이크아웃 통합 블록이 업데이트 블록으로써 사용되지 않지만, 그 통합 작용이 방해받는 통합 블록으로써 사용되지 않는 경우를 도시하는 도면이다.
도34B는 도34A에서 시작된 복수 단계 통합의 제3 및 최종 단계를 도시하는 도면이다.
도35A는 브레이크아웃 통합 블록이 통합 블록으로써 보다는 호스트 쓰기를 수신하는 업데이트 블록으로써 유지되는 경우를 도시하는 도면이다.
도35B는 상기 두 번째 경우에 대하여 도35A에서 시작된 복수개의 단계 통합의 제3 및 최종 단계를 도시하는 도면이다.
도36A는 호스트 쓰기가 업데이트 블록의 폐쇄를 트리거하고, 업데이트 블록이 순차적일때, 시나리오로 인가되는 단계화된 프로그램 에러 취급을 도시하는 도면이다.
도36B는 업데이트 블록에서 업데이트의 경우에 있어서 그것이 부분 블록 시스템에 인가될 수 있는 것과 같이, 단계화된 프로그램 에러 취급을 도시하는 도면이다.
도36C는 메타블록으로 맵핑된 논리 그룹을 지원하지 않는 메모리 블록 관리 시스템에 있어서 쓰레기(garbage) 수집 작용을 취급하는 단계화된 프로그램 오류를 도시하는 도면이다.
도37는 동일한 논리 그룹의 모든 N-섹터 쓰기 이후에, 관련 혼돈 인덱스 섹 터에 CBI 섹터의 쓰기 스케쥴의 예를 도시하는 도면이다.
도38A는 소정 횟수의 쓰기 이후에 CBI가 거기에 기록될 때 포인트 지점까지의 업데이트 블록을 도시하는 도면이다.
도38B는 인덱스 섹터 이후에 더 기록되는 데이터 페이지 1, 2 및 4를 갖는 도38A의 업데이트 블록을 도시하는 도면이다.
도38C는 인덱스 섹터의 다음 기록을 트리거하기 위하여 쓰여지는 또 다른 논리 섹터를 갖는 도38B의 업데이트 블록을 도시하는 도면이다.
도39A는 혼돈 업데이트 블록 내의 각 데이터 섹터의 헤더에 저장된 중간 스기에 대한 중간 인덱스를 도시하는 도면이다.
도39B는 각각의 쓰여진 섹터의 헤더 내의 중간 쓰기들에 대하여 중간 인덱스를 저장하기 위한 예를 도시하는 도면이다.
도40은 혼돈 업데이트 블록의 각 데이터 섹터의 헤더 내에 저장된 혼돈 인덱스 필드의 정보를 도시하는 도면이다.
도41A는 각각의 메모리 셀이 두 개의 비트 데이터를 저장할 때 4-상태 메모리 어레이의 문턱 전압 분포를 도시하는 도면이다.
도41B는 그레이 코드를 이용하는 종래의 2-패스 프로그래밍 구조를 도시하는 도면이다.
도42는 중복된 각각의 섹터를 저장하여, 임계 데이터를 보호하기 위한 한가지 안전한 방법을 도시하는 도면이며, 예를 들면, 섹터 A, B, C 및 D가 중복 카피되어 저장된다. 만약, 한 개의 섹터 카피에 데이터 오류가 발생하면, 그 대신에 다 른 것이 읽혀질 수 있다.
도43은 중복 섹터들이 멀티-상태 메모리에 일반적으로 저장되는 구성을 갖는 비-로버스트니스(non-robustness)를 도시하는 도면이다.
도44A는 임계 데이터의 지연된 중복 카피를 멀티-상태 메모리에 저장하는 일실시예를 도시하는 도면이다.
도44B는 임계 데이터의 중복 카피들을 멀티-상태 메모리의 논리 상위 페이지에 저장하기는 또 다른 실시예를 도시하는 도면이다.
도44C는 멀티-상태 메모리의 이진 모드 내에 임계 데이터의 중복 카피들을 저장하는 또 다른 실시예를 도시하는 도면이다.
도45는 임계 데이터의 중복 카피들을 동시에 두개의 메타 블록들에 저장하는 또 다른 실시예를 도시하는 도면이다.
도46A는 4-상태 메모리 어레이의 문턱 전압 분포를 도시하는데 있어서 도41A와 유사하며, 도46B의 참조도로써 도시되어 있다.
도46B는 무장애(fault-tolerant) 코드를 사용하여 임계 데이터의 중복 카피를 동시에 저장하는 또 다른 실시예의 도면이다.
도47은 두개의 데이터 카피의 가능한 상태와 데이터의 사용 가능성을 도시하는 테이블을 도시하는 도면이다.
도48은 제어 데이터를 저장하는 메모리 블록의 우선(preemptive) 위치 재설정의 플로우 차트를 도시하는 도면이다.
도 1은 본 발명을 구현하기에 적합한 메모리 시스템의 메인 하드웨어 콤포넌트를 개략적으로 예시한다. 메모리 시스템(20)은 통상적으로, 호스트 인터페이스를 통해 호스트(10)와 함께 동작한다. 메모리 시스템은 통상적으로, 내장 메모리 시스템 또는 메모리 카드의 형태이다. 메모리 시스템(20)은 메모리(200)를 포함하며, 메모리의 동작은 컨트롤러(100)에 의해 제어된다. 메모리(200)는 하나 이상의 집적 회로 칩 위에 분포된 비휘발성 메모리 셀의 하나 이상의 어레이로 구성된다. 컨트롤러(100)는 인터페이스(110), 프로세서(120), 선택적 코프로세서(121), 롬(ROM, 판독 전용 메모리)(122), 램(RAM,임의 접근 메모리)(130) 및 선택적으로 프로그램가능한 비휘발성 메모리(124)로 구성된다. 인터페이스(110)는 호스트에 컨트롤러를 인터페이스 접속하는 하나의 콤포넌트 및 메모리(200)에 인터페이스 연결된 다른 콤포넌트를 포함한다. 비휘발성 롭(122) 및/또는 선택적 비휘발성 메모리(124)에 저장된 펌웨어는 컨트롤러(100)의 기능을 이행하기 위해 프로세서(120)를 위한 코드를 제공한다. 에러 교정 코드는 선택적 코프로세서(121) 또는 프로세서(120)에 의해 처리될 수 있다. 대안 실시예에서, 컨트롤러(100)는 상태 기계(미도시)에 의해 구현된다. 또 다른 실시예에서, 컨트롤러(100)는 호스트내에 구현된다.
논리 및 물리 블록 구조
도 2는 본 발명의 양호한 실시예에 따른, 물리 섹터의 그룹(또는 메타블록)으로 조직화되어 컨트롤러의 메모리 관리자에 의해 관리되는 메모리를 예시한다. 메모리(200)는 메타블록으로 조직화되며, 여기서, 각 메타블록은 함께 삭제할 수 있는 물리 섹터(S0,...,SN-1)의 그룹이다.
호스트(100)는 파일 시스템 또는 오퍼레이팅 시스템하에서 어플리케이션을 운용시 메모리(200)를 억세스한다. 통상적으로, 호스트 시스템은 논리 섹터의 유닛으로 데이터를 어드레스하며, 여기서, 예로서, 각 섹터는 데이터의 512바이트를 포함할 수 있다. 또한, 호스트에 대하여, 각각 하나 이상의 논리 섹터로 구성된 논리 클러스터의 유닛으로 메모리 시스템을 판독 및 그에 기록하는 것이 일반적이다. 일부 호스트 시스템에서, 호스트에서 보다 낮은 레벨의 메모리 관리를 수행하기 위해 선택적 호스트측 메모리 관리자가 존재할 수 있다. 대부분의 경우에, 판독 또는 기록 동작 동안, 호스트(10)는 주로, 연속적 어드레스를 갖는 데이터의 논리 섹터의 스트링을 포함하는 세그먼트를 판독 또는 기록하기 위해 메모리 시스템(20)에 명령을 발령한다.
메모리측 메모리 관리자는 플래시 메모리(200)의 메타블록 중 호스트 논리 섹터의 데이터의 저장 및 검색을 관리하기 위해 메모리 시스템(20)의 컨트롤러(100)내에 구현된다. 양호한 실시예에서, 메모리 관리자는 메타블록의 삭제, 판독 및 기록 동작을 관리하기 위한 다수의 소프트웨어 모듈을 포함한다. 또한, 메모리 관리자는 컨트롤러 램(130) 및 플래시 메모리(200) 중에 그 동작과 연계된 시스템 제어 및 디렉토리 데이터를 유지한다.
도 3a(i) 내지 도 3a(iii)는 본 발명의 양호한 실시예에 따른, 논리 그룹과 메타블록 사이의 맵핑을 개략적으로 예시한다. 물리 메모리의 메타블록은 논리 그 룹의 데이터의 N 논리 섹터를 저장하기 위한 N 물리 섹터를 갖는다. 도 3a(i)는 논리 그룹 LGi로부터의 데이터를 도시하며, 여기서, 논리 섹터는 연속적인 논리 순서(0, 1,..., N-1)로 존재한다. 도 3a(ii)는 동일 논리 순서로 메타블록내에 저장되어 있는 동일 데이터를 도시한다. 이 방식으로 저장될 때, 메타블록은 "순차적"이라 말해진다. 일반적으로, 메타블록은 다른 순서로 저장된 데이터를 가질 수 있으며, 이 경우, 메타블록은 "비순차적" 또는 "카오틱(chaotic)"이라고 말해진다.
맵핑되는 메타블록의 최저 어드레스와 논리 그룹의 최저 어드레스 사이에 오프셋이 존재할 수 있다. 이 경우, 논리 섹터 어드레스는 메타블록내의 논리 그룹의 저단으로부터 다시 상단으로의 루프로서 랩 어라운드 한다. 예로서, 도 3a(iii)에서, 메타블록은 논리 섹터(k)의 데이터에서 시작하는 그 최초 위치에서 저장한다. 최종 논리 섹터(N-1)가 도달될 때, 이는 섹터 0으로 되돌아가고, 그 최종 물리 섹터에서 논리 섹터 k-1과 연계된 데이터를 최종적으로 저장한다. 양호한 실시예에서, 메타블록의 최초 물리 섹터에 저장된 데이터의 시작 논리 섹터 어드레스를 나타내는 것 같이, 임의의 오프셋을 나타내기 위해, 페이지 태그가 사용된다. 두 개의 블록은 페이지 태그만이 다를 때, 유사한 순서로 저장된 그 논리 섹터를 갖는 것으로 간주된다.
도 3b는 논리 그룹과 메타블록 사이의 맵핑을 개략적으로 예시한다. 데이터가 현재 갱신되어 있는 소수의 논리 그룹을 제외하고, 각 논리 그룹은 고유 메타블록으로 맵핑된다. 논리 그룹이 갱신된 이후에, 이는 다른 메타블록에 맵핑될 수 있 다. 맵핑 정보는 논리 대 물리 디렉토리의 세트에 유지된다. 이는 보다 상세히 후술될 것이다.
메타블록 맵핑을 위한 논리 그룹의 다른 유형도 고려된다. 예로서, 가변 크기를 갖는 메타블록이 발명의 명칭이 "적응성 메타블록(Adaptive Metablock)"인 알란 신클레어(Alan Sinclair)에 의해 본원과 동일한 날자로 출원된, 동시계류중이며, 공동 소유의 미국 특허 출원에 개시되어 있다. 이 동시계류 출원의 전체 내용은 여기에 참조로 포함되어 있다.
본 발명의 한가지 특징은 시스템이 단일 논리 파티션으로 동작하며, 메모리 시스템의 논리 어드레스 범위 전반에 걸쳐 논리 섹터의 그룹이 동일하게 취급된다는 것이다. 예로서, 시스템 데이터를 포함하는 섹터 및 사용자 데이터를 포함하는 섹터가 논리 어드레스 공간 중 임의의 장소에 분포될 수 있다.
종래 기술 시스템과는 달리, 높은 빈도수 및 작은 크기의 갱신을 갖는 데이터를 포함하기 쉬운 논리 어드레스 공간 섹터를 국지화하기 위한 시스템 섹터(즉, 파일 할당 테이블, 디렉토리 또는 서브디렉토리에 관련된 섹터)의 어떠한 특수한 구획형성 또는 지역형성도 존재하지 않는다. 대신, 섹터의 논리 그룹을 갱신하는 본 체계는 파일 데이터를 대표하는 것들 및 시스템 섹터를 대표하는 억세스의 패턴을 효율적으로 다룬다.
도 4는 물리 메모리내의 구조를 가지는 메타블록의 정렬을 예시한다. 플래시 메모리는 유닛으로서 함께 삭제할 수 있는 메모리 셀의 블록을 포함한다. 이런 삭제 블록은 메모리의 최소 삭제가능 유닛(MEU) 또는 플래시 메모리의 삭제의 최소 유닛이다. 최소 삭제 유닛은 메모리의 하드웨어 설계 파라미터이며, 다수의 MEU 삭제를 지원하는 일부 메모리 시스템에서, 하나 이상의 MEU를 포함하는 "슈퍼 MEU"를 구성하는 것이 가능하다. 플래시 EEPROM에 대하여, MEU는 하나의 섹터를 포함할 수 있지만, 다수의 섹터를 포함하는 것이 바람직하다. 도시된 실시예에서, 이는 M 섹터를 갖는다. 양호한 실시예에서, 각 섹터는 데이터의 512바이트를 저장할 수 있으며, 사용자 데이터 부분과, 시스템 또는 오버헤드 데이터를 저장하기 위한 헤더 부분을 갖는다. 메타블록이 P MEU로 구성되고, 각 MEU가 M 섹터를 포함하는 경우, 이때, 각 메타블록은 N=P*M 섹터를 갖는다.
메타블록은 시스템 레벨에서, 메모리 위치의 그룹, 예로서, 함께 삭제가능한 섹터를 나타낸다. 플래시 메모리의 물리 어드레스 공간은 메타블록의 세트로서 취급되며, 메타블록은 최소 삭제 유닛이다. 본 명세서에서, 용어 "메타블록" 및 "블록"은 미디어 관리를 위한 시스템 레벨에서의 최소 삭제 유닛을 규정하기 위해 같은 의미로 사용되며, 용어 "최소 삭제 유닛" 또는 MEU는 플래시 메모리의 최소 삭제 유닛을 나타내기 위해 사용된다.
메타블록을 형성하기 위한 최소 삭제 유닛(MEU)의 링크형성
프로그래밍 속도 및 삭제 속도를 최대화하기 위해, 다수의 MEU가 병렬로 삭제되고, 다수의 MEU에 위치된 다수의 정보 페이지가 병렬로 프로그램되도록 배열함으로써, 병행이 가능한 많이 활용된다.
플래시 메모리에서, 페이지는 단일 동작에서 함께 프로그램될 수 있는 메모리 셀의 그룹화이다. 페이지는 하나 이상의 섹터를 포함할 수 있다. 또한, 메모리 어레이는 하나 이상의 평면으로 구획화될 수 있으며, 여기서, 하나의 평면내에는 단 하나의 MEU가 한번에 프로그램 또는 삭제될 수 있다. 마지막으로, 평면은 하나 이상의 메모리 칩 중에 분포될 수 있다.
플래시 메모리에서, MEU는 하나 이상의 페이지를 포함할 수 있다. 플래시 메모리 칩내의 MEU는 평면으로 조직화될 수 있다. 각 평면으로부터의 하나의 MEU가 동시에 프로그램 또는 삭제될 수 있기 때문에, 각 평면으로부터 하나의 MEU를 선택함으로써, 다수의 MEU 메타블록을 형성하는 것이 편리하다(이하의 도 5b 참조).
도 5a는 다른 평면의 최소 삭제 유닛의 링크형성으로부터 구성되는 메타블록을 예시한다. MB0, MB1,..., 같은 각 메타블록은 메모리 시스템의 다른 평면으로부터의 MEU로부터 구성되며, 여기서, 다른 평면은 하나 이상의 칩 사이에 분포한다. 도 2에 도시된 메타블록 링크 매니저(170)는 각 메타블록을 위한 MEU의 링크형성을 관리한다. 각 메타블록은 최초 포맷팅 프로세스 동안 구성되며, MEU 중 하나의 손상이 존재하지 않는 한, 시스템의 수명 전반에 걸쳐 그 구성 MEU를 유지한다.
도 5b는 하나의 최소 삭제 유닛(MEU)이 메타블록으로의 링크형성을 위해 각 평면으로부터 선택되는 일 실시예를 예시한다.
도 5c는 메타블록으로의 링크형성을 위해 각 평면으로부터 하나 이상의 MEU가 선택되는 다른 실시예를 예시한다. 다른 실시예에서, 하나 이상의 MEU는 슈퍼 MEU를 형성하도록 각 평면으로부터 선택될 수 있다. 예로서, 슈퍼 MEU는 두 개의 MEU로부터 형성될 수 있다. 이 경우에, 이는 판독 또는 기록 동작을 위해 하나 이상의 패스(pass)를 취할 수 있다.
메타블록으로의 MEU의 링크형성 또는 재링크형성은 또한, 본 출원과 동일자로, 카를로스 곤잘레스(Carlos Gonzales) 등에 의해 출원된 발명의 명칭이 "다중 블록 구조로의 블록의 적응적 결정적 그룹화(Adative Deterministic Grouping of Blocks into Multi-Block Structures)"인 동시 계류중인 공동 소유의 미국 특허 출원에 개시되어 있다.
메타블록 관리
도 6은 컨트롤러 및 플래시 메모리내에 구현된 바와 같은 메타블록 관리 시스템의 개략적인 블록도이다. 메타블록 관리 시스템은 컨트롤러(100)에 구현된 다양한 기능 모듈을 포함하며, 테이블에 다양한 제어 데이터(디렉토리 데이터 포함)와, 컨트롤러 램(130) 및 플래시 메모리(200)내에 계층적으로 분포된 리스트를 유지한다. 컨트롤러(100)에 구현된 기능 모듈은 인터페이스 모듈(110), 논리적-대-물리 어드레스 변환 모듈(140), 갱신 블록 관리자 모듈(150), 삭제 블록 관리자 모듈(160) 및 메타블록 링크 관리자(170)를 포함한다.
인터페이스(110)는 메타블록 관리 시스템이 호스트 시스템과 인터페이스 연결할 수 있게 한다. 논리 대 물리 어드레스 변환 모듈(140)은 호스트로부터의 논리 어드레스를 물리 메모리 위치에 맵핑한다. 갱신 블록 관리자 모듈(150)은 주어진 논리 데이터 그룹을 위한 메모리 내의 데이터 갱신 동작을 관리한다. 삭제 블록 관리자(!60)는 새로운 정보의 저장을 위해 그 할당 및 메타블록의 삭제 동작을 관리한다. 메타블록 링크 관리자(170)는 주어진 메타블록을 구성하기 위해 섹터의 최소 삭제가능 블록의 서브그룹의 링크형성을 관리한다. 이들 모듈의 상세한 설명은 그 각 섹션에 주어질 것이다.
동작 동안, 메타블록 관리 시스템은 어드레스, 제어 및 상태 정보 같은 제어 데이터를 생성하고 그와 함께 동작한다. 제어 데이터 중 다수가 빈번히 변하는 작은 크기의 데이터가 되는 경향이 있기 때문에, 큰 블록 구조를 갖는 플래시 메모리내에 쉽게 저장 및 유지될 수 없다. 보다 효율적인 갱신 및 억세스를 위해 컨트롤러 램(RAM) 내에 보다 많이 변하는 제어 데이터의 보다 적은 양을 배치하면서, 비휘발성 플래시 메모리내에 보다 많은 정적 제어 데이터를 저장하기 위해 계층적 및 분포식 체계가 사용된다. 파워 셔트다운(shutdown) 또는 고장의 경우에, 이 체계는 비휘발성 메모리내의 제어 데이터의 작은 세트를 스캐닝함으로써 쉽게 비휘발성 컨트롤러 램 내의 제어 데이터가 재구성될 수 있게 한다. 이는 본 발명이 데이터의 주어진 논리 그룹의 가능한 활동과 연계된 블록의 수를 규제하기 때문에 가능하다. 이 방식으로, 스캐닝이 한정된다. 부가적으로, 영속성이 필요한 제어 데이터 중 일부는 섹터 단위로 갱신될 수 있는 비휘발성 메타블록에 저장되며, 각 갱신은 이전의 것을 대체하는 새로운 섹터가 기록되는 결과를 초래한다. 메타블록내의 섹터 단위 갱신의 추적을 유지하기 위해 제어 데이터를 위해 섹터 인덱싱 체계가 사용된다.
비휘발성 플래시 메모리(200)는 비교적 정적인 다량의 제어 데이터를 저장한다. 이는 그룹 어드레스 테이블(GAT)(210), 카오틱 블록 인덱스들(BSI)(220), 삭제 블록 리스트(EBL)(230) 및 MAP(240)를 포함한다. GAT(210)는 섹터의 논리 그룹과, 그 대응 메타블록 사이의 맵핑의 추적을 유지한다. 맵핑은 그들이 받는 갱신을 제 외하면 변화되지 않는다. CBI(220)는 갱신 동안 논리적으로 비순차적 섹터의 맵핑의 추적을 유지한다. EBL(230)은 삭제된 메타블록의 풀의 추적을 유지한다. MAP(240)는 플래시 메모리내의 모든 메타블록의 삭제 상태를 보여주는 비트맵이다.
휘발성 컨트롤러 램(130)은 빈번히 변경 및 억세스되는 제어 데이터의 작음 부분을 저장한다. 이는 할당 블록 리스트(ABL)(134) 및 소거 블록 리스트(CBL)(136)를 포함한다. ABL(134)은 갱신 데이터를 레코딩하기 위하여 메타블록의 할당의 추적을 유지하고, CBL(136)은 할당해제 및 삭제된 메타블록의 추적을 유지한다. 양호한 실시예에서, 램(130)은 플래시 메모리(200)내에 저장된 데어 데이터를 위한 캐시로서 작용한다.
갱신 블록 관리자
갱신 블록 관리자(150)(도 2에 도시)는 논리 그룹의 갱신을 취급한다. 본 발명의 일 양태에 따라서, 갱신을 받는 섹터의 각 논리 그룹은 갱신 데이터를 레코딩하기 위해 전용 갱신 메타블록이 할당된다. 양호한 실시예에서, 논리 그룹의 하나 이상의 섹터의 임의의 세그먼트가 갱신 블록에 레코딩된다. 갱신 블록은 순차적 순서 또는 비순차적(또한, 카오틱이라고도 알려짐) 순서 중 어느 하나로, 갱신 데이터를 수신하도록 관리될 수 있다. 카오틱 갱신 블록은 논리 그룹내에 임의의 순서로 섹터 데이터가 갱신될 수 있게 하며, 개별 섹터의 임의의 반복을 갖는다. 특히, 순차적 갱신 블록은 임의의 데이터 섹터의 재배치를 필요로 하지 않고, 카오틱 갱신 블록이 될 수 있다. 카오틱 데이터 갱신을 위한, 어떠한 사전결정된 블록 할당도 필요하지 않으며, 임의의 논리 어드레스에서의 비순차적 기록이 자동으로 수용 된다. 따라서, 종래 기술 시스템과는 달리, 논리 그룹의 다양한 갱신 세그먼트가 논리적으로 순차적인지 또는 비순차적 순서인지 여부에 대한 특별한 처리가 존재하지 않는다. 포괄적 갱신 블록은 단순히, 그들이 호스트에 의해 요청되는 순서로 다양한 세그먼트를 레코딩하기 위해 사용된다. 예로서, 호스트 시스템 데이터 또는 시스템 제어 데이터가 카오틱 형태로 갱신되는 경향이 있는 경우에도, 호스트 시스템 데이터에 대응하는 논리 어드레스 공간의 영역은 호스트 사용자 데이터를 갖는 영역과 달리 취급될 필요가 없다.
섹터의 완전한 논리 그룹의 데이터는 단일 메타블록에 논리 순차 순서로 저장되는 것이 바람직하다. 이 방식으로, 저장된 논리 섹터에 대한 인덱스가 사전규정된다. 메타블록이 사전규정된 순서로 주어진 논리 그룹의 모든 섹터를 저장하고 있을 때, 이는 "완전한" 것으로 말해진다. 갱신 블록에 대하여, 이는 결과적으로 논리 순차 순서로 갱신 데이터로 채워지며, 그후, 갱신 블록은 이미 원래의 메타블록을 대체하는 갱신된 완전한 메타블록이 된다. 다른 한편, 갱신 블록이 완전한 블록의 것과는 다른 논리 순서로 갱신 데이터로 채워지는 경우, 갱신 블록은 비순차적 또는 카오틱 갱신 블록이며, 비정렬 세그먼트는 궁극적으로, 논리 그룹의 갱신 데이터가 완전한 블록의 것과 동일한 순서로 저장되도록 추가 처리되어야만 한다. 양호한 경우에, 이는 단일 메타블록내에 논리적으로 순차적 순서로 존재한다. 추가 처리는 원래 블록내의 불변 섹터와 갱신 블록내의 갱신 섹터를 또 다른 갱신 메타블록으로 병합하는 것을 수반한다. 병합된 갱신 블록은 그후, 논리적으로 순차적 순서가되며, 원본 블록을 대체하도록 사용될 수 있다. 일부 사전결정된 조건하에 서, 병합 프로세스는 하나 이상의 압축(compaction) 프로세스가 선행된다. 압축 프로세스는 동일 논리 섹터의 순차 갱신에 의해 폐기된 임의의 복제 논리 섹터를 제거하면서, 카오틱 갱신 블록의 섹터를 대체 카오틱 갱신 블록으로 단순히 재레코딩한다.
갱신 체계는 지정된 최대치까지 다수의 갱신 스레드가 동시에 운용될 수 있게 한다. 각 스레드는 그 전용 갱신 메타블록을 사용하여 갱신을 받는 논리 그룹이다.
순차 데이터 갱신
논리 그룹에 속하는 데이터가 최초 갱신될 때, 메타블록이 할당되고, 논리 그룹의 갱신 데이터의 갱신 블록으로서 전용된다. 갱신 블록은, 기존 메타블록이 그 섹터 모두를 완전하게 저장하고 있는 논리 그룹의 하나 이상의 섹터의 세그먼트를 기록하기 위한 명령을 호스트로부터 수신하였을 때 할당된다. 제1 호스트 기록 동작에 대하여, 데이터의 제1 세그먼트가 갱신 블록상에 레코딩된다. 각 호스트 기록이 연속적 논리 어드레스를 갖는 하나 이상의 섹터의 세그먼트이기 때문에, 제1 갱신은 항상 본질적으로 순차적이다. 순차적 호스트 기록에서, 동일 논리 그룹내의 갱신 세그먼트는 호스트로부터 수신된 순서로 갱신 블록내에 레코딩된다. 블록은 순차적 갱신 블록으로서 계속 관리되며, 연계된 논리 그룹내의 호스트에 의해 갱신 섹터는 논리적으로 순차적으로 남아 있는다. 이 논리 그룹내의 갱신된 모든 섹터는 블록이 폐쇄되거나, 카오틱 갱신 블록으로 변환될 때까지, 이 순차적 갱신 블록에 기록된다.
도 7a는 논리 그룹을 위한 원래의 블록의 대응 섹터가 폐기되고, 두 개의 별개의 호스트 기록 동작의 결과로서, 순차 갱신 블록에 순차적 순서로 기록된 논리 그룹의 섹터의 예를 예시한다. 호스트 기록 동작 #1에서, 논리 섹터 LS5 - LS8내의 데이터가 갱신된다. LS5' - LS8'로서 갱신 데이터가 새롭게 할당된 전용 갱신 블록에 레코딩된다.
편의상, 논리 그룹내에 갱신되는 제1 섹터는 제1 물리 섹터 위치로부터 시작하는 전용 갱신 블록내에 레코드된다. 일반적으로, 갱신되는 제1 논리 섹터는 그룹의 논리 최초 섹터일 필요는 없으며, 따라서, 갱신 블록의 시작과 논리 그룹의 시작 사이에 오프셋이 존재할 수 있다. 이 오프셋은 도 3a에 관련하여 전술된 바와 같이 페이지 태그라 알려져 있다. 후속 섹터는 논리적으로 순차적 순서로 갱신된다. 논리 그룹의 최종 섹터가 기록될 때, 그룹 어드레스 랩 어라운드 및 기록 시퀀스는 그룹의 제1 섹터에서 이어진다.
호스트 기록 동작 #2에서, 논리 섹터(LS9-LS12)내의 데이터의 세그먼트가 갱신된다. LS9'-LS12'로 갱신 데이터는 최종 기록이 종료하는 바로 이어지는 위치에서 전용 갱신 블록에 레코드된다. 두 개의 호스트 기록은 갱신 데이터가 논리적으로 순차적 순서로, 즉, LS5' - LS12'로 갱신 블록에 레코드되어 있도록 이루어진다는 것을 알 수 있다. 갱신 블록은 논리적으로 순차적 순서로 충전되기 때문에, 순차 갱신 블록으로서 간주된다. 갱신 블록에 레코드된 갱신 데이터는 원본 블록내의 대응하는 것을 폐기한다.
카오틱 데이터 갱신
카오틱 갱신 블록 관리는 연계된 논리 그룹내의 호스트에 의해 갱신된 임의의 섹터가 논리적으로 비순차적일 때, 기존의 순차 갱신 블록에 대해 개시된다. 카오틱 갱신 블록은 연계된 논리 그룹내의 논리 섹터가 임의의 반복량으로, 임의의 순서로 갱신될 수 있는 형태이다. 이는 호스트에 의해 기록된 섹터가 갱신되는 논리 그룹내의 이전에 기록된 섹터에 대해 논리적으로 비순차적일 때, 순차 갱신 블록으로부터의 변환에 의해 생성된다. 이 논리 그룹내의 순차 갱신된 모든 섹터는 그룹내에서의 그 논리 섹터 어드레스가 무엇이든 카오틱 갱신 블록내의 다음 가용한 섹터 위치에 기록된다.
도 7b는 논리 그룹을 위한 원본 블록내의 대체된 섹터 및 카오틱 갱신 블록내의 복제된 섹터는 모두 폐기되는 반면, 5개 개별 호스트 기록 동작의 결과로서, 카오틱 갱신 블록에 대한 카오틱 순서로 기록되는 논리 그룹내의 섹터의 예를 예시한다. 호스트 기록 동작 #1에서, 원본 메타블록내에 저장된 주어진 논리 그룹의 논리 섹터 LS10 - LS11이 갱신된다. 갱신된 논리 섹터 LS10' - LS11'이 새롭게 할당된 갱신 블록에 저장된다. 이 지점에서, 갱신 블록은 순차적인 것이다. 호스트 기록 동작 #2에서, 논리 섹터 LS5 - LS6이 LS5' - LS6'로 갱신되고, 최종 기록에 바로 이은 위치에서 갱신 블록에 레코드된다. 이는 갱신 블록을 순차적인 것으로부터 카오틱의 것으로 변환한다. 호스트 기록 동작 #3에서, 논리 섹터 LS10이 다시 갱신되고, 갱신 블록의 다음 위치에 LS10"로서 레코드된다. 이 지점에서, 갱신 블록내의 LS10"은 이전 레코딩내의 LS10'를 대체하며, 이는 순차적으로, 원본 블록내의 LS10을 대체한다. 호스트 기록 동작 #4에서, 논리 섹터 LS10내의 데이터가 다시 갱 신되며, LS"'로서 갱신 블록의 다음 위치에 레코드된다. 따라서, LS10"'은 이제 최신의 것이며, 논리 섹터 LS10을 위해 유일한 유효 데이터이다. 호스트 기록 동작 #5에서, 논리 섹터 LS30내의 데이터가 갱신되고, LS30'으로서 갱신 블록에 레코드된다. 따라서, 본 예는 논리 그룹내의 섹터가 임의의 반복수로 임의의 순서로 카오틱 갱신 블록에 기록될 수 있다는 것을 예시한다.
강제 순차 갱신
도 8은 논리적 어드레스의 불연속성을 가지는 두 개의 별개의 호스트 기록 동작의 결과로서, 순차 갱신 블록에 순차적 순서로 기록되는 논리 그룹내의 섹터의 예를 예시한다. 호스트 기록 #1에서, 논리 섹터 LS5 - LS8내의 갱신 데이터가 LS5' - LS8'로서 전용 갱신 블록에 레코드된다. 호스트 기록 #2에서, 논리 섹터 LS14- LS 16내의 갱신 데이터가 LS14' - LS16'으로서, 최종 기록에 이어 갱신 블록에 레코드된다. 그러나, LS8 및 LS14 사이에는 어드레스 점프가 존재하며, 호스트 기록 #2는 통상적으로, 갱신 블록이 비순차적이 되게 한다. 어드레스 점프는 순차적이지 않기 때문에, 한가지 옵션은 호스트 기록 #2를 실행하기 이전에 원본 블록으로부터 갱신 블록으로 개입 섹터의 데이터를 복사함으로써, 먼저 페이딩 동작(#2A)을 수행하는 것이다. 이 방식으로, 갱신 블록의 순차적 특성이 보전된다.
도 9는 본 발명의 일반적 실시예에 따른 데이터의 논리 그룹 갱신을 위한 갱신 블록 관리자에 의한 프로세스를 예시하는 흐름도이다. 갱신 프로세스는 하기의 단계를 포함한다.
단계 260 : 메모리가 블록으로 조직화되고, 각 블록은 함께 삭제할 수 있는 메모리 유닛으로 분할되며, 각 메모리 유닛은 데이터의 논리적 유닛을 저장하기 위한 것이다.
단계 262 : 데이터는 논리 그룹으로 조직화되고, 각 논리 그룹은 논리 유닛으로 분할된다.
단계 264 : 표준 경우에, 논리 그룹의 모든 논리 유닛은 제1 지정 순서, 바람직하게는 논리적 순차 순서에 따라 원본 블록의 메모리 유닛 중에 저장된다. 이 방식으로, 박스내의 개별 논리 유닛을 억세스하기 위한 인덱스가 알려진다.
단계 270 : 데이터의 주어진 논리 그룹(예로서, LGx)에 대하여, LGx내의 논리 유닛을 갱신하기 위한 요청이 이루어진다(논리 유닛 갱신은 예로서 주어지는 것이다. 일반적으로, 갱신은 LGx내의 하나 이상의 연속 논리 유닛의 세그먼트이다.)
단계 272 : 요청된 갱신 논리 유닛이 LGx의 갱신을 레코드하기 위해 전용화된 제2 블록에 저장된다. 레코딩 순서는 제2 순서에 따르며, 통상적으로, 개인이 요청되는 순서이다. 본 발명의 한가지 특징은 갱신 블록이 최초에 데이터를 논리적으로 순차적 또는 카오틱 순서로 레코딩하기 위해 설정될 수 있게 한다는 것이다. 제2 순서에 따라서, 제2 블록은 순차적인 것이거나 카오틱의 것일 수 있다.
단계 274 : 제2 블록은 프로세스가 단계 270으로 되돌아갈 때, 요청된 레코딩된 논리 유닛을 계속 갖고 있다. 폐쇄를 위한 사전결정된 조건이 실현될 때, 추가 갱신을 수신하기 위해 제2 블록이 폐쇄된다. 이 경우에, 프로세스는 단계 276으로 진행한다.
단계 276 : 폐쇄된, 제2 블록이 원본 블록의 것과 유사한 순서로 기록된 그 갱신 논리 유닛을 갖는지 여부에 대한 판정이 이루어진다. 도 3a에 관련하여 설명된 바와 같이, 그 기록된 논리 유닛이 단지 페이지 태그만이 다를 때, 두 블록은 유사한 순서를 갖는 것으로 간주된다. 두 블록이 유사한 순서를 갖는 경우, 프로세스는 단계 280으로 진행하고, 그렇지 않으면, 소정 종류의 조각 모음이 단계 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이 선택적으로 수행되어 계류중인 카오틱 갱신의 견지에서 가능한 멀리 순차 갱신 블록을 보전한다. 두 가지 상황이 존재하며, 양자 모두는 갱신 블록상에 레코드된 논리 섹터의 순차 순서를 유지하기 위해 원본 블록으로부터 누락 섹터를 복사하는 것을 필요로 한다. 첫 번째 상황은 갱신이 짧은 어드레스 점프를 생성하는 경우이다. 두 번째 상황은 그 순서를 유지하기 위해, 갱신 블록을 조기에 정리하는 것이다. 강제 순차 프로세스 단계 320은 하기의 서브단계를 포함한다.
단계 330 : 갱신이 사전결정된 양(CB) 보다 크지 않은 논리 어드레스 점프를 생성하는 경우, 프로세스는 단계 350에서 강제 순차 갱신 프로세스로 진행하고, 그렇지 않으면, 프로세스는 강제 순차 정리를 위해 적격인지를 고려하기 위해 단계 340으로 진행한다.
단계 340 : 채워지지 않은 물리적 섹터의 수가 그 전형적인 값이 개신 블록의 크기의 절반인 사전결정된 설계 파라미터(CC)를 초과하는 경우, 이때, 갱신 블록은 비교적 미사용상태이며, 조기 폐쇄되지 않는다. 프로세스는 단계 370으로 진행하고, 갱신 블록은 카오틱이 된다. 다른 한편, 갱신 블록이 실질적으로 채워져 있는 경우, 이미 많이 활용되는 것으로 간주되며, 따라서, 강제 순차 정리를 위해 단계 360으로 진행한다.
단계 350 : 강제 순차 갱신은 어드레스 점프가 사전결정된 양(CB)을 초과하지 않는 한, 현재 순차 갱신 블록이 순차적으로 남아 있게 한다. 본질적으로, 갱신 블록의 연계된 원본 블록으로부터의 섹터는 어드레스 점프에 의해 걸쳐진 간격을 채우기 위해 복사된다. 따라서, 순차 갱신 블록은 현재 갱신을 순차적으로 레코드하기 위해, 단계 510으로 진행하기 이전에 개입 어드레스에 데이터로 페이딩된다.
단계 360 : 강제 순차 정리는 계류중인 카오틱 갱신에 의해 카오틱한 것으로 변환되는 대신, 이미 순차적으로 충전되어 있는 경우, 현재 순차 갱신 블록이 정리되게 한다. 카오틱 또는 비순차적 갱신은 상술된 어드레스 점프 예외, 후향 어드레스 전이 또는 어드레스 반복에 의해 커버되지 않는 전진방향 어드레스 전이를 갖는 것으로서 정의된다. 순차 갱신 블록이 카오틱 갱신에 의해 변환되는 것을 방지하기 위해, 갱신 블록의 미기록 섹터 위치가 개신 블록의 연계된 원래의 부분 폐기 블록으로부터 섹터를 복사함으로써, 채워진다. 원본 블록은 그후, 완전히 폐기되고, 삭 제될 수 있다. 현재의 갱신 블록은 이제, 완전한 논리 섹터의 세트를 가지며, 그후, 원본 메타블록을 대체하는 완전 메타블록으로서 정리된다. 프로세스는 그후, 단계 310에서 최초 요청된 계류중인 섹터 갱신의 레코딩을 수용하도록 적소에 새로운 갱신 블록이 할당되게 하도록 단계 430으로 진행한다.
카오틱 갱신 블록으로의 변환
단계 370 : 계류중인 갱신이 순차적 순서가 아니고, 선택적으로, 강제 순차 조건이 충족되지 않을 때, 단계 510으로 진행할 때, 순차 갱신 블록은 비순차적 어드레스를 갖는 계류중인 갱신 섹터가 갱신 블록상에 레코드될 수 있게 하는 것에 의해 카오틱한 것으로 변환될 수 있다. 카오틱 갱신 블록의 최대수가 존재하는 경우, 변환이 진행되게 하기 이전에, 가장 이전에 억세스된 카오틱 갱신 블록을 폐쇄하고, 따라서, 카오틱 블록의 최대수가 초과되는 것을 방지할 필요가 있다. 가장 이전에 억세스된 카오틱 갱신 블록의 식별은 단계 420에서 설명된 일반적 경우와 동일하지만, 단지 카오틱 갱신 블록에만 제한된다. 이 시기의 카오틱 갱신 블록 폐쇄는 단계 550에서 설명된 바와 같은 병합에 의해 달성된다.
시스템 규제를 받는 새로운 갱신 블록의 할당
단계 410 : 갱신 블록으로서의 삭제 메타블록의 할당 프로세스는 사전결정된 시스템 제한이 초과하였는지 여부에 대한 판정과 함께 시작한다. 한정된 자원으로 인해, 메모리 관리 시스템은 통상적으로, 사전결정된 최대수의 갱신 블록(CA)이 동시에 존재할 수 있게 하는 것이 일반적이다. 이 한계는 순차 갱신 블록과 카오틱 갱신 블록의 집단이며, 설계 파라미터이다. 양호한 실시예에서, 이 한계는 예로서, 최대 8 갱신 블록이다. 또한, 보다 높은 시스템 자원에 대한 수요로 인해, 동시에 개방될 수 있는 카오틱 갱신 블록의 최대수(예로서, 4)에 대한 대응하는 사전결정된 제한도 존재할 수 있다.
따라서, CA 갱신 블록이 이미 할당되어 있을 때, 이때, 다음 할당 요청은 단지 기존의 할당된 것 중 하나를 폐쇄한 이후에만 충족될 수 있다. 프로세스는 단계 420으로 진행한다. 개방 갱신 블록이 수가 CA 보다 작을 때, 프로세스는 직접적으로 단계 430으로 진행한다.
단계 420 : 갱신 블록의 최대수(CA)가 초과되는 경우에, 가장 이전에 억세스된 갱신 블록이 폐쇄되고, 조각 모음이 수행된다. 가장 이전에 억세스된 갱신 블록은 가장 이전에 억세스된 논리 블록과 연계된 갱신 블록으로서 나타내어진다. 가장 이전에 억세스된 블록을 결정하기 위해, 억세스는 기록 및 선택적으로, 논리 섹터의 판독을 포함한다. 개방 갱신 블록의 리스트가 억세스를 위해 유지되며, 초기화시, 어떠한 억세스 순서도 가정되지 않는다. 갱신 블록의 폐쇄는 갱신 블록이 순차적일 때, 단계 360 및 단계 530과 연계하여 설명한 유사한 프로세스를 따르며, 갱신 블록이 카오틱일 때, 단계 540과 연계하여 설명한 유사한 프로세스를 따른다. 폐쇄는 단계 430에서, 새로운 갱신 블록의 할당을 위한 공간을 형성한다.
단계 430 : 할당 요청은 주어진 논리 그룹(LGx)에 전용화된 갱신 블록으로서 새로운 메타블록의 할당으로 충족된다. 프로세스는 그후 단계 510으로 진행한다.
갱신 블록상으로의 갱신 데이터의 레코드
단계 510 : 요청된 갱신 섹터가 갱신 블록의 차순위 가용 물리적 위치상에 레코드된다. 그후, 프로세스는 갱신 블록이 정리를 위해 준비가 되어있는지를 결정하기 위해 단계 520으로 진행한다.
갱신 블록 정리
단계 520 : 갱신 블록이 부가적인 갱신을 수용하기 위한 공간을 여전히 가지고 있는 경우, 단계 570으로 진해한다. 그렇지 않으면, 갱신 블록을 정리하기 위해 단계 522로 진행한다. 현재 요청된 기록이 블록이 갖는 공간 보다 많은 논리 섹터를 기록하기를 시도할 때, 갱신 블록을 충전하는 두 가지 가능한 구현이 존재한다. 제1 구현에서, 기록 요청이 두 개의 부분으로 분할되고, 첫 번째 부분은 블록의 최종 물리 섹터에 기록한다. 블록은 그후, 폐쇄되고, 기록의 두 번째 부분은 새로운 요청된 기록으로서 처리된다. 다른 구현에서, 요청된 기록이 블록이 나머지 섹터가 페이딩되고, 그후 폐쇄되는 동안 보류된다. 요청된 기록은 새로운 요청된 기록으로서 처리된다.
단계 522 : 갱신 블록이 순차적인 경우, 순차적 폐쇄를 위해 단계 530으로 진행한다. 갱신 블록이 카오틱인 겨우, 카오틱 폐쇄를 위해 단계 540으로 진행한다.
순차 갱신 블록 정리
단계 530 : 갱신 블록이 순차적이며, 완전히 채워져 있기 때문에, 그 내부에 저장된 논리 그룹은 완전하다. 메타블록은 완전하며, 원래의 것을 교체한다. 이때, 원본 블록은 완전히 폐기되고 삭제될 수 있다. 프로세스는 그후 단계 570으로 진행하고, 여기서, 주어진 논리적 그룹을 위한 갱신 스레드가 종료한다.
카오틱 갱신 블록 정리
단계 540 : 갱신 블록이 비순차적으로 채워지며, 일부 논리 섹터의 다수회 갱신을 포함할 수 있기 때문에, 그 내부의 유효 데이터를 구제하기 위해 조각 모음이 수행된다. 카오틱 갱신 블록은 압축되거나 병합된다. 어느 프로세스가 수행될 것인지는 단계 542에서 결정된다.
단계 542 : 압축 또는 병합의 수행은 갱신 블록의 퇴화에 의존한다. 논리 섹터가 다수회 갱신되는 경우, 그 논리 어드레스는 매우 퇴화한다. 갱신 블록상에 레코딩된 동일 논리 섹터의 다수의 버전이 존재하며, 단지 최종 레코딩된 버전이 그 논리 섹터를 위해 유효한 것이다. 다수의 버전을 갖는 논리 섹터를 포함하는 갱신 블록에서, 별개의 논리 섹터의 수는 논리 그룹의 수 보다 매우 작다.
양호한 실시예에서, 갱신 블록내의 별개의 논리 섹터의 수가 그 전형적인 값이 논리 그룹의 크기의 절반인 사전결정된 설계 파라미터(CD)를 초과할 때, 정리 프로세스가 단계 550에서 병합을 수행하며, 그 이외의 경우에, 프로세스는 단계 560에서의 압축으로 진행한다.
단계 550 : 카오틱 갱신 블록이 병합되는 경우, 원래의 블록 및 갱신 블록이 병합된 데이터를 포함하는 새로운 표준 메타블록으로 교체된다. 병합 이후, 갱신 스레드는 단계 570에서 종료한다.
단계 560 : 카오틱 갱신 블록이 압축되는 경우, 이는 압축된 데이터를 수반하는 새로운 갱신 블록에 의해 대체된다. 압축 이후, 압축된 갱신 블록의 처리는 단계 570에서 종료한다. 대안적으로, 압축은 갱신 블록이 다시 기록될 때까지 지연되고, 따라서, 갱신이 개입하지 않고, 압축에 병합이 이어지는 가능성을 제거할 수 있다. 새로운 갱신 블록은 그후, LGx에서 갱신을 위한 다음 요청이 단계 502에서 나타날 때, 주어진 논리 블록의 추가 갱신에 사용된다.
단계 570 : 정리 프로세스가 완전한 갱신 블록을 생성할 때, 이는 주어진 논리 그룹을 위한 새로운 표준이 된다. 논리 그룹을 위한 갱신 스레드는 종결된다. 정리 프로세스가 기존의 것을 교체하는 새로운 갱신 블록을 생성할 때, 새로운 갱신 블록은 주어진 논리 그룹을 위해 요청된 다음 갱신을 레코드하기 위해 사용된다. 갱신 블록이 정리되지 않을 때, 처리는 단계 310에서 LGx에서의 갱신을 위한 다음 요청이 나타날 때 이어진다.
상술된 프로세스로부터 알 수 있는 바와 같이, 카오틱 갱신 블록이 폐쇄될 때, 그 위에 레코딩된 개신 데이터가 추가로 처리된다. 특히, 그 유효 데이터는 새로운 표준 순차 블록을 형성하기 위해, 다른 카오틱 블록으로의 압축 프로세스 또는 그 연계된 원래 블록과의 병합 프로세스 중 어느 하나에 의해 조각 모음된다.
도 11a는 도 10에 도시된 카오틱 갱신 블록을 폐쇄하는 병합 프로세스를 보다 상세히 예시하는 흐름도이다. 카오틱 갱신 블록 병합은 갱신 블록이 정리될 때, 예로서, 갱신 블록이 기록되어 있는 그 최종 물리 섹터 위치로 채워져 있을 때, 수 행되는 두 개의 가능한 프로세스 중 하나이다. 블록내에 기록된 별개의 논리 섹터의 수가 사전결정된 설계 파라미터(CD)를 초과할 때, 병합이 선택된다. 도 10에 도시된 병합 프로세스 단계 550은 하기의 서브단계를 포함한다.
단계 551 : 카오틱 갱신 블록이 폐쇄될 때, 그를 교체하는 새로운 메타블록이 할당된다.
단계 552 : 모든 폐기 섹터를 무시하고, 카오틱 갱신 블록 및 그 연계된 원래 블록 중의 각 논리 섹터의 최신 버전을 수집한다.
단계 554 : 완전한 블록, 즉, 순차적 순서로 레코딩된 논리 그룹의 논리 섹터 모두를 갖는 블록을 형성하기 위해, 논리 순차 순서로 새로운 메타블록상에 수집된 유효 섹터를 레코딩한다.
단계 556 : 원래 블록을 새로운 완전한 블록으로 교체한다.
단계 558 : 정리된 갱신 블록과 원래 블록을 삭제한다.
도 11b는 도 10에 도시된 카오틱 갱신 블록을 폐쇄하기 위한 압축 프로세스를 보다 상세히 예시하는 흐름도이다. 압축은 블록내에 기록된 별개의 논리 섹터의 수가 사전결정된 설계 파라미터(CD) 미만일 때 선택된다. 도 10에 도시된 압축 프로세스 단계 560은 하기의 서브 단계를 포함한다.
단계 561 : 카오틱 갱신 블록이 압축될 때, 그를 교체하는 새로운 메타블록이 할당된다.
단계 562 : 압축될 기존 카오틱 갱신 블록 중 각 논리 섹터의 최신 버전을 수집한다.
단계 564 : 압축된 섹터를 가지는 새로운 갱신 블록을 형성하도록 새로운 갱신 블록상에 수집된 섹터를 기록한다.
단계 566 : 기존 갱신 블록을 압축된 섹터를 갖는 새로운 갱신 블록을 형성하기 위해 새로운 갱신 블록상에 수집된 섹터를 레코딩한다.
단계 568 : 정리된 갱신 블록을 삭제한다.
논리 및 메타블록 상태
도 12a는 논리 그룹의 모든 가능한 상태와, 다양한 동작하에서 그들 사이의 가능한 전이를 예시한다.
도 12b는 논리 그룹의 가능한 상태를 나열하는 테이블이다. 논리 그룹 상태는 하기와 같이 규정된다.
1. 완전 : 논리 그룹내의 모든 논리 섹터가 가능하게는 페이지 태그 랩 어라운드(wrap around)를 사용하여, 단일 메타블록내에 논리 순차 순서로 기록되어 있다.
2. 미기록 : 논리 그룹내의 어떠한 논리 섹터도 기록되어 있지 않다. 논리 그룹은 그룹 어드레스 테이블에 미기록으로 표시되며, 어떠한 할당된 메타블록도 갖지 않는다. 이 그룹내의 모든 섹터를 위한 호스트 판독에 응답하여 규정된 데이터 패턴이 반환된다.
3. 순차 갱신 : 논리 그룹내의 일부 섹터가 가능하게는 페이지 태그를 사용하여 메타블록내에 논리 순차 순서로 기록되어 있으며, 그래서, 이들은 그룹의 임 의의 이전 완전 상태로부터 대응 논리 섹터를 대체한다.
4. 카오틱 갱신 : 논리 그룹내의 일부 섹터가 가능하게는 페이지 태그를 사용하여, 메타블록내에서 논리적으로 비순차적 순서로 기록되어 있으며, 그래서, 이들은 그룹의 임의의 이전 완전 상태로부터 대응 논리 섹터를 대체한다. 그룹내의 섹터는 일회 이상 기록될 수 있으며, 최신 버전이 모든 이전 버전을 대체한다.
도 13a는 메타블록의 모든 가능한 상태와, 다양한 동작하에서 이들 사이의 가능한 전이를 예시한다.
도 13b는 메타블록의 가능한 상태를 나열하는 테이블이다. 메타블록 상태는 하기와 같이 규정된다.
1. 삭제됨 : 메타블록내의 모든 섹터가 삭제됨
2. 순차 갱신 : 메타블록은 가능하게는 페이지 태그를 사용하여 논리적으로 순차적 순서로 섹터로 부분적으로 기록된다. 모든 섹터는 동일 논리 그룹에 속한다.
3. 카오틱 갱신 : 메타블록이 부분적으로 또는 완전히 논리 비순차적 순서로 섹터로 기록된다. 임의의 섹터는 1회 이상 기록될 수 있다. 모든 섹터는 동일 논리 그룹에 속한다.
4. 완전 : 메타블록이 가능하게는 페이지 태그를 사용하여 논리 순차 순서로 완전히 기록된다.
5. 원본 : 메타블록이 이전에 완전하였지만, 적어도 하나의 섹터가 호스트 데이터 갱신에 의해 폐기되었다.
도 14a 내지 도 14j는 논리 그룹의 상태 및 또한 물리 메타블록에 대한 다양한 동작의 영향을 도시하는 상태도이다.
도 14a는 제1 기록 동작을 위한 논리 그룹과 메타블록 전이에 대응하는 상태도를 도시한다. 호스트는 이전에 미기록인 논리 그룹의 하나 이상의 섹터를 새롭게 할당된 삭제된 메타블록에 논리 순차 순서로 기록한다. 논리 그룹 및 메타블록은 순차 갱신 상태로 진행한다.
도 14b는 제1 완전 동작을 위한 논리 그룹과 메타블록 전이에 대응하는 상태도를 도시한다. 모든 섹터가 호스트에 의해 순차 기록될 때, 이전의 미기록 순차 갱신 논리 그룹은 완전 상태가 된다. 전이는 또한 규정된 데이터 패턴으로 잔여 미기록 섹터를 채움으로써 카드가 그룹을 충전하는 경우에도 발생한다. 메타블록은 완전해진다.
도 14c는 제1 카오틱 동작을 위한 논리 그룹 및 메타블록 전이에 대응하는 상태도를 도시한다. 이전의 미기록 순차 갱신 논리 그룹은 적어도 하나의 섹터가 호스트에 의해 비순차적으로 기록될 때, 카오틱이 된다.
도 14d는 제1 압축 동작을 위한 논리 그룹 및 메타블록 전이에 대응하는 상태도를 도시한다. 이전의 미기록 카오틱 갱신 논리 그룹내의 모든 유효 섹터는 추후 삭제되는 구 블록으로부터 새로운 카오틱 메타블록으로 복사된다.
도 14e는 제1 병합 동작을 위한 논리 그룹과 메타블록 전이에 대응하는 상태도를 도시한다. 이전의 미기록 카오틱 갱신 논리 그룹내의 모든 유효 섹터는 논리 순차 순서로 새롭게 할당된 삭제 블록을 충전하도록 구 카오틱 블록으로부터 이동 된다. 호스트에 의해 기록되지 않은 섹터는 규정된 데이터 패턴으로 채워진다. 구 카오틱 블록은 그후 삭제된다.
도 14f는 순차 기록 동작을 위한 논리 그룹 및 메타블록 전이에 대응하는 상태도이다. 호스트는 논리적 순차 순서로 완전 논리 그룹의 하나 이상의 섹터를 새롭게 할당된 삭제된 메타블록에 기록한다. 논리 그룹 및 메타블록은 순차 갱신 상태로 진행한다. 이전의 완전 메타블록은 원본 메타블록이 된다.
도 14g는 순차 충전 동작을 위한 논리 그룹 및 메타블록 전이에 대응하는 상태도를 도시한다. 호스트에 의해 그 모든 섹터가 순차 기록될 때, 순차 갱신 논리 그룹은 완전해진다. 이는 또한, 이를 완전하게 하기 위해, 원본 블록으로부터의 유효 섹터로 순차 갱신 논리 그룹이 충전될 때, 조각 모음 동안 이루어질 수도 있으며, 그후, 원본 블록은 삭제된다.
도 14h는 비순차 기록 동작을 위한 논리 그룹 및 메타블록 전이에 대응하는 상태도이다. 순차 갱신 논리 그룹은 호스트에 의해 적어도 하나의 섹터가 비순차적으로 기록될 때 카오틱이 된다. 비순차 섹터 기록은 갱신 블록 또는 대응 원본 블록의 유효 섹터가 폐기되게 할 수 있다.
도 14i는 압축 동작을 위한 논리 그룹과 메타블록 전이에 대응하는 상태도이다. 카오틱 갱신 논리 그룹내의 모든 유효 섹터는 추후 삭제되는 구 블록으로부터 새로운 카오틱 메타블록으로 복사된다. 원본 블록은 영향을 받지 않는다.
도 14j는 병합 동작을 위한 논리 그룹과 메타블록 전이에 대응하는 상태도이다. 카오틱 갱신 논리 그룹내의 모든 유효 섹터는 논리 순차 순서로 새롭게 할당된 삭제 블록을 채우도록 구 카오틱 블록 및 원본 블록으로부터 복사된다. 구 카오틱 블록 및 원본 블록은 그후 삭제된다.
갱신 블록 추적 및 관리
도 15는 할당을 위해 삭제 블록과 개방 및 폐쇄된 갱신 블록의 추적을 유지하기 위한 할당 블록 리스트(ABL)의 구조의 양호한 실시예를 예시한다. 할당 블록 리스트(ABL)(610)는 삭제 블록, 할당된 갱신 블록, 연계된 블록 및 제어 구조의 할당 관리를 가능하게 하고, 정확한 논리 대 물리 어드레스 전이를 가능하게 하도록 컨트롤러 램(130)내에 유지된다. 양호한 실시예에서, ABL은 삭제 블록의 리스트, 개방 갱신 블록 리스트(614) 및 폐쇄 갱신 블록 리스트(616)를 포함한다.
개방 갱신 블록 리스트(614)는 개방 갱신 블록의 속성을 갖는 ABL내의 블록 엔트리의 세트이다. 개방 갱신 블록 리스트는 현재 개방된 각 데이터 갱신 블록을 위해 하나의 엔트리를 갖는다. 각 엔트리는 하기의 정보를 보유한다. LG는 현재 갱신 메타블록이 속하는 논리 그룹 어드레스이다. 순차/카오틱은 갱신 블록이 순차적 또는 카오틱 갱신 데이터 중 어느 쪽으로 채워지는지를 나타내는 상태이다. MB는 갱신 블록의 메타블록 어드레스이다. 페이지 태그는 갱신 블록의 제1 물리 위치에 레코딩된 시작 논리 섹터이다. 기록된 섹터의 수는 갱신 블록상에 현재 기록된 섹터의 수를 나타낸다. MB0은 연계된 원래 블록의 메타블록 어드레스이다. 페이지 태그0은 연계된 원본 블록의 페이지 태그이다.
폐쇄된 갱신 블록 리스트(616)는 할당 블록 리스트(ABL)의 서브세트이다. 이 는 폐쇄된 갱신 블록의 속성을 갖는 ABL내의 블록 엔트리의 세트이다. 폐쇄된 갱신 블록 리스트는 폐쇄되었지만, 그러나, 그 엔트리가 논리 대 메인 물리 디렉토리에서 갱신되지 않은 각 데이터 갱신 블록을 위한 하나의 엔트리를 갖는다. 각 엔트리는 하기의 정보를 유지한다. LG는 현재 갱신 블록이 속하는 논리 그룹 어드레스이다. MB는 갱신 블록의 메타블록 어드레스이다. 페이지 태그는 갱신 블록의 제1 물리 위치에 레코딩된 시작 논리 섹터이다. MB0은 연계된 원본 블록의 메타블록 어드레스이다.
카오틱 블록 인덱싱
순차적인 갱신 블록은 논리적인 순서로 저장된 데이터를 가져서, 블록 중에서 임의의 논리 섹터가 쉽게 위치될 수 있다. 카오틱 갱신 블록은 순서없이 저장된 논리 섹터를 갖고, 논리 섹터의 다중 갱신 세대를 또한 저장할 수 있다. 부가의 정보는 각각의 유효 논리 섹터가 카오틱 갱신 블록에 위치되는 트랙을 유지하도록 보유되어야 한다.
양호한 실시예에서, 카오틱 블록 인덱싱 데이터 구조는 카오틱 블록의 모든 유효 섹터의 추적과 빠른 억세스를 허용한다. 카오틱 블록 인덱싱은 논리 어드레스 공간의 작은 영역을 독립적으로 취급하고, 시스템 데이터와 사용자 데이터의 핫 영역을 효율적으로 다룬다. 인덱싱 데이터 구조는 기본적으로 빈번하지 않은 갱신 요구를 갖는 플래시 메모리에 유지되는 정보를 인덱싱하는 것을 허용하여 성능에 강한 영향을 받지 않는다. 한편, 카오틱 블록의 최근에 기록된 섹터들의 리스트는 제 어기 램의 카오틱 섹터 리스트에 보유된다. 또한, 플래시 메모리로부터의 인덱스 정보의 캐시는 어드레스 변환을 위한 플래시 섹터 억세스의 수를 최소화하도록 제어기 램에 보유된다. 각각의 카오틱 블록을 위한 인덱스는 플래시 메모리의 카오틱 블록 인덱스(CBI)에 저장된다.
도 16a는 카오틱 블록 인덱스(CBI) 섹터의 데이터 필드를 도시한다. 카오틱 블록 인덱스 섹터(CBI 섹터)는 카오틱 갱신 블록에 맵핑된 논리 그룹의 각각의 섹터를 위한 인덱스를 포함하고, 관련된 원본 블록 또는 카오틱 갱신 블록 내의 논리 그룹의 각각의 섹터의 위치를 한정한다. CBI 섹터는 카오틱 블록 내의 유효 섹터의 트랙을 유지하기 위한 카오틱 블록 인덱스 필드, 카오틱 블록을 위한 어드레스 매개변수의 트랙을 유지하기 위한 카오틱 블록 정보 필드 및 CBI 섹터를 저장하는 메타블록(CBI 블록) 내의 유효 CBI 섹터의 트랙을 유지하기 위한 섹터 인덱스 필드를 포함한다.
도 16b는 전용 메타블록에 레코드되는 카오틱 블록 인덱스(CBI) 섹터의 예를 도시한다. 전용 메타블록은 CBI 블록(620)으로 지칭될 것이다. CBI 섹터가 갱신되면, CBI 블록(620)의 다음의 활용 가능한 물리적인 섹터 위치에 기록된다. 따라서 CBI 섹터의 다중 복사는 유효한 최종 기록 복사만을 갖는 CBI 블록에 존재할 것이다. 예를 들어, 논리 그룹(LG1)을 위한 CBI 섹터는 유효한 최종 버전으로 세 번 갱신된다. CBI 블록의 각각의 유효 섹터의 위치는 블록의 최종 기록된 CBI 섹터의 인덱스의 세트에 의해 식별된다. 이러한 예에서, 블록의 최종 기록된 CBI 섹터는 LG136을 위한 CBI 섹터이고 인덱스 세트는 모든 이전의 것을 대리하는 유효한 것이다. CBI 블록이 최종적으로 CBI 섹터들로 채워질 때, 블록은 새로운 블록 위치로 모든 유효 섹터를 재기록함으로써 제어 기록 작동 동안 압축된다. 가득찬 블록은 소거된다.
CBI 섹터 내의 카오틱 블록 인덱스 필드는 카오틱 갱신 블록으로 맵핑된 논리 그룹 또는 서브 그룹 내의 각각의 논리 섹터를 위한 인덱스 엔트리를 포함한다. 각각의 인덱스 엔트리는 대응하는 논리 섹터를 위한 유효 데이터가 위치되는 카오틱 갱신 블록 내의 오프셋을 의미한다. 역 인덱스 값은 카오틱 갱신 블록에 논리 섹터를 위한 유효 데이터가 존재하지 않는 것을 지시하고, 소정의 카오틱 블록 인덱스 필드 엔트리는 제어기 램에 보유된다.
CBI 섹터 내의 카오틱 블록 정보 필드는 시스템에 존재하는 각각의 카오틱 갱신 블록을 위한 하나의 엔트리를 포함하고, 블록을 위한 어드레스 매개변수 정보를 레코드한다. 필드 내의 정보는 CBI 블록의 최종 기록 섹터 내에서만 유효하다. 이러한 정보는 또한 램의 데이터 구조에 존재한다.
각각의 카오틱 갱신 블록을 위한 엔트리는 3개의 어드레스 매개변수를 포함한다. 첫 번째는 카오틱 갱신 블록과 관련된 논리 그룹(또는 논리 그룹 수)의 논리 어드레스이다. 두 번째는 카오틱 갱신 블록의 메타블록 어드레스이다. 세 번째는 카오틱 갱신 블록에 기록된 최종 섹터의 물리적인 어드레스 오프셋이다. 오프셋 정보는 램의 데이터 구조를 재구성하기 위해 초기화 동안 카오틱 갱신 블록의 주사 시작점을 설정한다.
섹터 인덱스 필드는 CBI 블록의 각각의 유효 CBI 블록을 위한 엔트리를 포함한다. 이는 각각의 허용된 카오틱 갱신 블록에 대해 가장 최근에 기록된 CBI 섹터가 위치되는 CBI 블록 내의 오프셋을 한정한다. 인덱스의 오프셋 역의 값은 허용된 카오틱 갱신 블록이 존재하지 않는다는 것을 지시한다.
도 16c는 카오틱 갱신 하에서의 주어진 논리 그룹의 논리 섹터의 데이터에 억세스하는 것을 도시하는 흐름도이다. 갱신 프로세스 동안, 갱신 데이터는 카오틱 갱신 블록에 레코드되면서 변경되지 않은 데이터는 논리 그룹과 관련된 원본 메타블록에 유지된다. 카오틱 갱신 하에서의 논리 그룹의 논리 섹터에 억세스하는 프로세스는 이하와 같다.
단계 650: 주어진 논리 그룹의 주어진 논리 섹터를 위치시킨다.
단계 651: CBI 블록 내의 최종 기록된 CBI 섹터를 위치시킨다.
단계 654: 최종 기록된 CBI 섹터의 카오틱 블록 정보 필드를 참조함으로써 주어진 논리 그룹과 관련된 카오틱 갱신 블록 또는 원본 블록을 위치시킨다. 이러한 단계는 단계 662 이전에 언제든지 수행될 수 있다.
단계 658: 최종 기록된 CBI 섹터가 주어진 논리 그룹으로 지시되면, CBI 섹터가 위치된다. 단계 662에 선행한다. 아니면, 단계 660에 선행한다.
단계 660: 최종 기록된 CBI 섹터의 섹터 인덱스 필드를 참조함으로써 주어진 논리 그룹을 위한 CBI 섹터를 위치시킨다.
단계 662: 위치된 CBI 섹터의 카오틱 블록 인덱스 필드를 참조함으로써 카오 틱 블록 또는 원본 블록 중에서 주어진 논리 섹터를 위치시킨다.
도 16d는 논리 그룹이 서브 그룹으로 구획되는 대체 실시예에 따라 카오틱 갱신 하에서 주어진 논리 그룹의 논리 섹터의 데이터에 대한 억세스를 도시하는 흐름도이다. CBI 섹터의 유한 용량은 논리 섹터의 소정의 최대수의 트랙을 유지할 수만 있다. 논리 그룹이 단일 CBI 섹터가 취급될 수 있는 것보다 보다 많은 논리 섹터를 가질 때, 논리 그룹은 각각의 서브 그룹에 지정된 CBI 섹터를 갖는 다중 서브 그룹으로 구획된다. 일 예에서, 각각의 CBI 섹터는 256개의 섹터로 구성된 논리 그룹을 추적하기 위한 충분한 용량을 갖고, 최대 8개의 카오틱 갱신 블록을 갖는다. 논리 그룹이 256개의 섹터의 크기를 가지면, 개별 CBI 섹터는 논리 그룹 내의 256개의 섹터의 서브 그룹용으로 존재한다. CBI 섹터는 논리 그룹내에서 최대 8개의 서브 그룹용으로 존재하고, 최대 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)은 각각 256개의 섹터를 갖는 소정의 서브 그룹(A, B, C, D)으로 구획된다.
서브 그룹(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 섹터를 위치시키기 위한 그 직접 섹터 인덱스 참조를 갖는다. 예를 카오틱 블록 인덱스가 참조될 때, 그 논리 섹터가 변경되지 않은 것이 발견되고 그 유효 데이터는 원본 블록에 위치되는 것을 도시한다.
유사한 고려가 주어진 논리 그룹의 서브 그룹(C)의 j번째 논리 섹터를 위치시키기 위해 적용된다. 예는 최종 기록된 CBI 섹터가 주어진 논리 그룹의 4개의 CBI 섹터들 중 임의의 것으로 구성되지 않는 것을 도시한다. 4개의 지시된 최종 기록은 서브 그룹(C)을 위한 CBI 섹터를 정확하게 구성한다. 그 카오틱 블록 인덱스가 참조될 때, j번째 논리 섹터는 카오틱 갱신 블록(704)의 지정된 위치에 위치되는 것이 판명되었다.
카오틱 섹터의 리스트가 시스템 내의 각각의 카오틱 갱신 블록에 대해 컨트롤러 램에 존재한다. 각각의 리스트는, 관련 CBI 섹터가 플래시 메모리내에서 최종 갱신되기 때문에 카오틱 갱신 블록내에 기록된 섹터의 레코드를 포함한다. 카오틱 섹터 리스트에 보유될 수 있는 특정 카오틱 갱신 블록에 대한 논리 섹터 어드레스의 수는 8 내지 16의 전형적인 값을 갖는 설계 파라미터이다. 리스트의 최적 크기는 초기화 중의 섹터 스캐닝 시간과 카오틱 데이터 기록 동작을 위한 오버헤드에 대한 그의 효과 사이의 절충으로서 결정된다.
시스템 초기화 중에, 각각의 카오틱 갱신 블록은 그의 관련 CBI 섹터 중 하나의 이전의 갱신 이후로 기록된 유효 섹터를 식별할 필요가 있기 때문에 스캐닝된다. 각각의 카오틱 갱신 블록에 대한 컨트롤러 램 내의 카오틱 섹터 리스트가 구성된다. 각각의 블록은 단지 최종 기록된 CBI 섹터 내의 그의 카오틱 블록 정보 필드에 규정된 최종 섹터 어드레스로부터 스캐닝될 필요가 있다.
카오틱 갱신 블록이 할당될 때, CBI 섹터는 모든 갱신 논리 서브-그룹에 대응하도록 기록된다. 카오틱 갱신 블록에 대한 논리 및 물리 어드레스는, 카오틱 블록 인덱스 필드 내에 널 엔트리를 갖고 섹터 내의 이용 가능한 카오틱 블록 정보 필드에 기록된다. 카오틱 섹터 리스트는 컨트롤러 램 내에 개방된다.
카오틱 갱신 블록이 폐쇄될 때, CBI 섹터는 섹터 내의 카오틱 블록 정보 필드로부터 제거된 블록의 논리 및 물리 어드레스로 기록된다. 램 내의 대응 카오틱 섹터 리스트는 미사용된다.
컨트롤러 램 내의 대응 카오틱 섹터 리스트는 카오틱 갱신 블록에 기록된 섹 터의 레코드를 포함하도록 수정된다. 컨트롤러 램 내의 카오틱 섹터 리스트가 카오틱 갱신 블록으로의 부가의 섹터 기록의 레코드를 위한 이용 가능한 공간을 갖지 않을 때, 갱신 CBI 섹터가 리스트 내의 섹터에 관한 논리 서브-그룹에 대해 기록되고, 리스트가 소거된다.
CBI 블록(620)이 가득차게 될 때, 유효 CBI 섹터가 할당된 삭제 블록에 복사되고, 이전의 CBI 블록이 삭제된다.
어드레스 테이블
도 2에 도시된 논리 대 물리 어드레스 번역 모듈(140)은 플래시 메모리 내의 대응 물리 어드레스에 호스트의 논리 어드레스를 관련시키는 기능을 한다. 논리 그룹과 물리 그룹(메타블록) 사이의 맵핑은 비휘발성 플래시 메모리(200) 및 휘발성이지만 더 예민한 램(130)(도 1 참조) 사이에 분배된 리스트 및 테이블의 세트에 저장된다. 어드레스 테이블은 메모리 시스템 내의 모든 논리 그룹에 대한 메타블록 어드레스를 포함하여 플래시 메모리내에 유지된다. 또한, 최근에 기록된 섹터에 대한 논리 대 물리 어드레스 레코드가 램 내에 일시 보유된다. 이들 휘발성 레코드는 시스템이 시동된 후에 초기화될 때 플래시 메모리 내의 데이터 섹터 헤더 및 블록 리스트로부터 재구성될 수 있다. 따라서, 플래시 메모리 내의 어드레스 테이블은 단지 빈번하지 않게 갱신될 필요가 있어, 낮은 비율의 제어 데이터를 위한 오버헤드 기록 동작을 유도한다.
논리 그룹에 대한 어드레스 레코드의 계층 구성은 개방 갱신 블록 리스트, 램 내의 폐쇄 갱신 블록 리스트 및 플래시 메모리에 유지된 그룹 어드레스 테이 블(GAT)을 포함한다.
개방 갱신 블록 리스트는 갱신된 호스트 섹터 데이터를 기록하기 위해 현재 개방되어 있는 데이터 갱신 블록의 컨트롤러 램 내의 리스트이다. 블록에 대한 엔트리는 블록이 폐쇄될 때 폐쇄 갱신 블록으로 이동된다. 폐쇄 갱신 블록 리스트는 폐쇄되어 있는 데이터 갱신 블록의 컨트롤러 램 내의 리스트이다. 리스트 내의 엔트리의 서브세트는 제어 기록 동작 중에 그룹 어드레스 테이블 내의 섹터로 이동된다.
그룹 어드레스 테이블(GAT)은 메모리 시스템 내의 호스트 데이터의 모든 논리 그룹에 대한 메타블록 어드레스의 리스트이다. GAT는 논리 어드레스에 따라 순차적으로 순서화된 각각의 논리 그룹에 대한 하나의 엔트리를 포함한다. GAT 내의 제n 엔트리는 어드레스 n을 갖는 논리 그룹에 대한 메타블록 어드레스를 포함한다. 양호한 실시예에서, 이는 메모리 시스템 내의 모든 논리 그룹에 대한 메타블록 어드레스를 규정하는 엔트리를 갖는 섹터(GAT 섹터라 함)의 세트를 포함하는 플래시 메모리 내의 테이블이다. GAT 섹터는 플래시 메모리 내의 하나 이상의 전용 제어 블록(GAT 블록이라 칭함) 내에 위치된다.
도 17a는 그룹 어드레스 테이블(GAT) 섹터의 데이터 필드를 도시한다. GAT 섹터는 예로서 128개의 연속 논리 그룹의 세트에 대한 GAT 엔트리를 포함하기에 충분한 능력을 가질 수 있다. 각각의 GAT 섹터는 두 개의 요소, 즉 범위 내의 각각의 논리 그룹의 메타블록 어드레스에 대한 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 엔트리의 분할부분내의 엔트리의 컨트롤러 램(130) 내의 사본이다. GAT 캐시 엔트리의 수는 전형적인 값 32를 갖는 시스템 설계 파라미터이다. 관련 섹터 분할부분을 위한 GAT 캐시는 엔트리가 GAT 섹터로부터 판독될 때마다 생성된다. 다수의 GAT 캐시가 유지된다. 수는 4의 전형적인 값을 갖는 설계 파라미터이다. GAT 캐시는 최소 현재 사용 기초로 상이한 섹터 분할을 위한 엔트리로 대체된다.
삭제된 메타블록 관리
도 2에 도시된 삭제 블록 관리자(160)는 디렉토리 및 시스템 제어 정보를 유지하기 위한 리스트의 세트를 사용하여 삭제 블록을 관리한다. 이들 리스트는 컨트롤러 램(130) 및 플래시 메모리(200) 사이에 분배된다. 삭제된 메타블록이 사용자 데이터의 저장을 위해 또는 시스템 제어 데이터 구조의 저장을 위해 할당되어야 할 때, 컨트롤러 램 내에 보유된 할당 블록 리스트(ABL)(도 15 참조) 내의 다음의 이용 가능한 메타블록 수가 선택된다. 유사하게, 메타블록이 철회된 후에 삭제될 때, 그의 수는 컨트롤러 램 내에 또한 보유된 소거 블록 리스트(CBL)에 추가된다. 비교적 정적인 디렉토리 및 시스템 제어 데이터가 플래시 메모리내에 저장된다. 이들은 플래시 메모리 내의 모든 메타블록의 삭제된 상태를 열거하는 비트맵(MAP) 및 삭제 블록 리스트를 포함한다. 삭제 블록 리스트 및 MAP는 개별 섹터에 저장되고 MAP 블 록으로서 공지된 전용 메타블록에 레코딩된다. 컨트롤러 램과 플래시 메모리 사이에 분배된 이들 리스트는 삭제된 메타블록 사용을 효율적으로 관리하도록 삭제 블록 레코드의 계층 구성을 제공한다.
도 18은 삭제 블록의 사용 및 재생을 위한 제어 및 디렉토리 정보의 분배 및 흐름을 도시하는 개략 블록 다이어그램이다. 제어 및 디렉토리 데이터는 컨트롤러 램(130) 내에 또는 플래시 메모리(200)에 상주하는 MAP 블록(750) 내에 보유되는 리스트 내에 유지된다.
양호한 실시예에서, 컨트롤러 램(130)은 할당 블록 리스트(ABL)(610) 및 소거 블록 리스트(CBL)(740)를 보유한다. 도 15와 연관하여 상술한 바와 같이, 할당 블록 리스트(ABL)는 사용자 데이터의 저장을 위해 또는 시스템 제어 데이터 구조의 저장을 위해 최근에 할당되어 있는 메타블록의 트랙을 유지한다. 새로운 삭제된 메타블록이 할당되어야 할 때, 할당 블록 리스트(ABL) 내의 다음의 이용 가능한 메타블록 수가 선택된다. 유사하게, 소거 블록 리스트(CBL)는 할당 해제되고 삭제되어 있는 갱신 메타블록의 트랙을 유지하는데 사용된다. ABL 및 CBL은 비교적 능동적인 갱신 블록을 추적할 때 고속 접근 및 용이한 조작을 위해 컨트롤러 램(130)(도 1 참조)에 보유된다.
할당 블록 리스트(ABL)는 갱신 블록이 되는 삭제 메타블록의 할당 및 삭제된 메타블록의 풀의 트랙을 유지한다. 따라서, 속성에 의해 서술될 수 있는 이들 메타블록 각각은 ABL 계류 할당, 개방 갱신 블록 또는 폐쇄 갱신 블록 내의 삭제 블록인지의 여부를 지정한다. 도 18은 삭제된 ABL 리스트(612), 개방 갱신 블록 리스 트(614) 및 폐쇄 갱신 블록 리스트(616)를 포함하는 ABL을 도시한다. 또한, 개방 갱신 블록 리스트(614)와 연관된 것은 연관 원본 블록 리스트(615)이다. 유사하게, 폐쇄 갱신 블록 리스트와 연관된 것은 연관된 삭제된 원본 블록 리스트(617)이다. 도 15에 미리 도시된 바와 같이, 이들 연관 리스트는 개방 갱신 블록 리스트(614) 및 폐쇄 갱신 블록 리스트(616) 각각의 서브세트이다. 삭제된 ABL 블록 리스트(612), 개방 갱신 블록 리스트(614) 및 폐쇄 갱신 블록 리스트(616)는 모두 대응 속성을 각각 갖는 각각 내의 엔트리 내의 할당 블록 리스트(ABL)(610)의 서브세트이다.
MAP 블록(750)은 플래시 메모리(200) 내에 삭제 관리 레코드를 저장하는데 전용되는 메타블록이다. MAP 블록은, 각각의 MAP 섹터가 삭제 블록 관리(EBM) 섹터(760) 또는 MAP 섹터(780)인 MAP 블록 섹터의 시간 시리즈를 저장한다. 삭제 블록이 할당에 사용되고 메타블록이 철수될 때 재생됨에 따라, 연관 제어 및 디렉토리 데이터가 갱신 데이터의 각각의 순간이 새로운 블록 섹터에 레코딩되는 상태로 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) 및 삭제 블록 버퍼(CBB)(776)에 대한 버퍼로서 기능한다.
이용 가능한 블록 버퍼(ABB)(772)는 이전의 ABL 충전 동작에 즉시 이어지는 ABL(610) 내의 엔트리의 사본을 포함한다. 이는 ABL 충전 동작 직후에 ABL의 백업 사본에 유용하다.
삭제 블록 버퍼(EBB)(774)는, MAP 섹터(780)로부터 또는 CBB 리스트(776)(이하에 설명함)로부터 미리 전달되어 있고 ABL 충전 동작 중에 ABL(610)로의 전달을 위해 이용 가능한 삭제 블록 어드레스를 포함한다.
삭제 블록 버퍼(CBB)(776)는, CBL 비움 동작 중에 CBL(740)로부터 전달되고 MAP 섹터(780) 또는 EBB 리스트(774)에 순차적으로 전달될 수 있는 삭제 블록의 어드레스를 포함한다.
MAP 섹터(780) 각각은 MAP이라 칭하는 비트맵 구조를 포함한다. MAP는 각각의 블록의 삭제 상태를 지시하기 위해 사용되는 플래시 메모리 내의 각각의 메타블록에 대한 하나의 비트를 사용한다. ABL, CBL 또는 EBM 섹터 내의 삭제 블록 리스트에 열거된 블록 어드레스에 대응하는 비트는 MAP 내의 삭제 상태로 설정되지 않는다.
유효 데이터 구조를 포함하지 않고 MAP, 삭제 블록 리스트, ABL 또는 CBL 내 의 삭제 블록으로서 지정되지 않은 임의의 블록은 전혀 블록 할당 알고리즘에 의해 사용되지 않고, 따라서 호스트 또는 제어 데이터 구조의 저장을 위해 접근 불가능하다. 이는 접근 가능한 플래시 메모리 어드레스 공간으로부터 결함 있는 위치를 갖는 블록을 배제하기 위한 간단한 메커니즘을 제공한다.
도 18에 도시된 계층 구성은 삭제 블록 레코드가 효율적으로 관리되게 하고 컨트롤러의 램 내에 저장된 블록 어드레스 리스트의 완전한 보안을 제공한다. 삭제 블록 엔트리는 빈번하지 않은 기초로 하나 이상의 MAP 섹터(780)와 이들 블록 어드레스 리스트 사이에 교환된다. 이들 리스트는 플래시 메모리 내의 섹터에 저장된 어드레스 번역 테이블 및 삭제 블록 리스트 내의 정보 및 플래시 메모리 내의 소수의 참조된 데이터 블록의 제한된 스캐닝을 거쳐 전원 오프 후에 시스템 초기화 중에 재구성될 수 있다.
삭제된 메타블록 레코드의 계층 구성을 갱신하기 위해 채택된 알고리즘은 이 호스트에 의해 갱신되는 순서 블록을 반영하는 CBL(740)로부터의 블록 어드레스의 버스트를 갖는 MAP 블록(750)으로부터의 어드레스 순서 내의 블록의 버스트를 삽입하는 순서에 사용하기 위해 할당되어 있는 삭제 블록을 초래한다. 최대 메타블록 크기 및 시스템 메모리 용량을 위해, 단일 MAP 섹터가 시스템 내의 모든 메타블록에 대한 비트맵을 제공할 수 있다. 이 경우, 삭제 블록은 항상 이 MAP 섹터 내에 레코딩됨으로써 어드레스 순서에 사용을 위해 할당된다.
삭제 블록 관리 동작
상술한 바와 같이, ABL(610)은 사용을 위해 할당될 수 있는 삭제된 메타블록 및 데이터 갱신 블록으로서 최근에 할당되어 있는 메타블록에 대한 어드레스 엔트리를 갖는 리스트이다. ABL 내의 블록 어드레스의 실제 수는 시스템 설계 변수들인 최대 및 최소 한계 사이에 놓인다. 제조 중에 포맷된 ABL 엔트리의 수는 카드 유형 및 용량의 함수이다. 또한, ABL 내의 엔트리의 수는, 이용 가능한 삭제 블록의 수가 수명 중에 블록의 고장에 의해 감소되기 때문에 시스템의 수명의 종료에 인접하여 감소될 수 있다. 예로서, 충전 동작 후에, ABL 내의 엔트리는 이하의 목적을 위해 이용 가능한 블록을 지정한다. 부분 기록된 데이터에 대한 엔트리는 동시에 개방된 갱신 블록의 최대값에 대한 시스템 한계를 초과하지 않고 블록 당 하나의 엔트리로 블록을 갱신한다. 데이터 갱신 블록으로서 할당을 위해 삭제 블록에 대한 1 내지 20개의 엔트리 사이이다. 제어 블록으로서 할당을 위해 삭제 블록을 위해 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과 삭제 블록 엔트리의 수에 대한 동일한 제한을 갖는 컨트롤러 램 내의 삭제 블록 어드레스의 리스트이다. CBL을 비우는 동작이 제어 기록 동작 중에 발생한다. 따라서 이는 ABL 충전/GAT 갱신 동작 또는 CBI 블록 기록 동작과 동시에 발생한다. CBL 비움 동작에서, 엔트리는 CBL(740)로부터 제거되어 CBB 리스트(776)에 기록된다.
MAP 교환 동작
EBM 섹터(760)와 MAP 섹터(780) 내의 삭제 블록 정보 사이의 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. CBB의 관련 엔트리에 의해 규정된 바와 같이, 소스 MAP 섹터가 갱신되고, CBB로부터 제거된다.
6. CBB내의 잔여 엔트리가 EBB에 첨부된다.
7. 소스 MAP 섹터로부터의 규정된 삭제 블록 어드레스로 EBB가 가능한 정도로 채워진다.
8. 갱신된 소스 MAP 섹터가 MAP 블록에 기록된다.
9. 갱신된 EBM 섹터가 MAP 블록에 기록된다.
리스트 관리
도 18은 다양한 리스트 사이에서 제어 및 디렉토리 정보의 분포 및 흐름을 도시한다. 편의상, 도 18에 [A] 내지 [O]로서 표시된 리스트의 엘리먼트 사이에서 엔트리를 이동시키기 위한, 또는, 엔트리의 속성을 변경하기 위한 동작은 하기와 같다.
[A] 삭제 블록이 호스트 데이터를 위한 갱신 블록으로서 할당될 때, ABL내의 그 엔트리의 속성은 삭제된 ABL 블록으로부터 개방 갱신 블록으로 변경된다.
[B] 제어 블록으로서 삭제 블록이 할당될 때, ABL내의 그 엔트리가 제거된다.
[C] ABL 엔트리가 개방 갱신 블록 속성으로 생성될 때, 연계된 원본 블록 필드는 갱신된 논리 그룹을 위한 원본 메타블록 어드레스를 레코드하기 위해 엔트리에 추가된다.
[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 교환 작업 동안, 모든 관련 엔트리가 CBB 리스트로부터 MAP 착신 섹터로 이동된다.
[M] MAP 교환 동작 동안, 모든 관련 엔트리가 CBB 리스트로부터 MAP 소스 섹터로 이동된다.
[N] MAP 교환 동작 동안 [L]과 [M]에 후속하여, 모든 잔여 엔트리가 CBB 리스트로부터 EBB 리스트로 이동된다.
[O] MAP 교환 동작 동안, [N]에 후속하여, [M]내에 이동된 것들 이외의 엔트리가 가능한 경우, EBB 리스트를 채우기 위해 MAP 소스 섹터로부터 이동된다.
논리 대 물리 어드레스 변환
플래시 메모리내에 논리 섹터의 물리 위치를 배치하기 위해, 도 2에 도시된 논리 대 물리 어드레스 변환 모듈(140)은 논리 대 물리 어드레스 변환을 수행한다. 최근 갱신된 논리 그룹을 제외하고, 플래시 메모리(200)내에 존재하는 그룹 어드레스 테이블(GAT) 또는 컨트롤러 램(130)내의 GAT 캐시를 사용하여 수행될 수 있다. 최근 갱신된 논리 그룹을 위한 어드레스 변환은 컨트롤러 램(130)내에 주로 존재하 는 갱신 블록을 위한 참조 어드레스 리스트를 필요로 한다. 논리 섹터 어드레스를 위한 논리 대 물리 어드레스 변환을 위한 프로세스는 따라서, 섹터가 그 내부에 위치되어 있는 논리 그룹과 연계된 블록의 유형에 의존한다. 블록의 유형은 : 완전 블록, 순차 데이터 갱신 블록, 카오틱 데이터 갱신 블록, 폐쇄 데이터 갱신 블록이다.
도 19는 논리 대 물리 어드레스 변환의 프로세스를 도시하는 플로우차트이다. 실질적으로, 대응 메타블록 및 물리 섹터는 개방 갱신 블록 리스트 및 폐쇄 갱신 블록 리스트 같은 다양한 갱신 디렉토리를 먼저 참조하도록 논리 섹터 어드레스를 사용함으로써 배치된다. 연계된 메타블록이 갱신 프로세스의 일부가 아닌 경우, 이때, 디렉토리 정보는 GAT에 의해 제공된다. 논리 대 물리 어드레스 변환은 하기의 단계를 포함한다:
단계 800 : 논리 섹터 어드레스가 주어진다.
단계 810 : 컨트롤러 램내의 개방 갱신 블록 리스트(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. 섹터가 최근에 기록된 섹터라는 것이 램내의 카오틱 섹터로부터 결정되는 경우, 어드레스 변환은 이 리스트내의 그 위치로부터 직접적으로 달성된다.
2. CBI 블록내의 가장 최근에 기록된 섹터가 그 카오틱 블록 데이터 필드내에 타겟 논리 섹터 어드레스에 관련한 카오틱 갱신 블록의 물리 어드레스를 포함한다. 또한, 이는 그 간접 섹터 인덱스 필드내에, 이 카오틱 갱신 블록에 관련한 최종 기록 CBI 섹터의 CBI 블록내의 오프셋을 포함한다(도 16a 내지 도 16e 참조).
3. 이들 필드내의 정보는 램내에 캐시되어 후속 어드레스 변환 동안 섹터를 판독할 필요성을 제거한다.
4. 단계 3에서 간접 섹터 인덱스 필드에 의해 식별된 CBI 섹터가 판독된다.
5. 가장 이전에 억세스된 카오틱 갱신 서브그룹을 위한 직접 섹터 인덱스 필드가 램에 캐시되어, 동일 카오틱 갱신 블록에 대한 반복적 억세스를 위한 단계 4에서의 판독을 수행할 필요성을 제거한다.
6. 단계 4 또는 단계 4에서 판독된 직접 섹터 인덱스 필드는 순차적으로, 타 겟 논리 섹터 어드레스를 포함하는 논리 서브그룹에 관련한 CBI 섹터를 나타낸다.
7. 타겟 논리 섹터 어드레스를 위한 카오틱 블록 인덱스 엔트리가 단계 6에서 식별된 CBI 섹터로부터 판독된다.
8. 가장 최근에 판독된 카오틱 블록 인덱스 필드가 컨트롤러 램에 캐시되어 동일 논리 서브 그룹에 대한 반복된 억세스를 위해 단계 4 및 단계 7에서의 판독을 수행할 필요성을 제거할 수 있다.
9. 카오틱 블록 인덱스 엔트리는 카오틱 갱신 블록 또는 연계된 원본 블록 중 어느 하나내의 타겟 논리 섹터의 위치를 정의한다. 타겟 논리 섹터의 유효한 사본이 원본 블록내에 있는 경우, 이는 원본 메타블록 및 페이지 태그 정보의 사용에 의해 배치된다.
폐쇄된 갱신 블록 어드레스 변환(단계 860)
폐쇄된 갱신 블록과 연계된 논리 그룹내의 타겟 논리 섹터 어드레스를 위한 어드레스 변환은 하기와 같이, 폐쇄된 블록 갱신 리스트(도 18 참조)내의 정보로부터 직접적으로 달성된다.
1. 타겟 논리 그룹에 할당된 메타블록 어드레스가 리스트로부터 판독된다.
2. 메타블록내의 섹터 어드레스가 리스트내의 "페이지 태그" 필드로부터 결정된다.
GAT 어드레스 변환(단계 870)
논리적 그룹이 개방 또는 폐쇄 블록 갱신 리스트 중 어느 하나에 의해 참조되지 않는 경우, 그 GAT내의 엔트리는 유효하다. GAT에 의해 참조된 논리적 그룹내 의 타겟 논리적 섹터 어드레스를 위한 어드레스 변환 시퀀스는 하기와 같다.
1. 타겟 논리적 그룹을 위한 엔트리가 GAT 캐시내에 포함되어 있는 경우를 결정하기 위해, 램내의 가용 GAT 캐시의 범위가 평가된다.
2. 단계 1에서, 타겟 논리적 그룹이 발견되는 경우, GAT 캐시는 메타블록 어드레스 및 페이지 태그 양자 모두를 포함하는 전체 그룹 어드레스 정보를 포함하며, 타겟 논리적 섹터 어드레스의 변환을 가능하게 한다.
3. 타겟 어드레스가 GAT 캐시내에 있지 않는 경우, 타겟 논리적 그룹 어드레스에 관한 GAT 섹터의 위치를 식별하기 위해, 타겟 GAT 블록을 위해 GAT 인덱스가 판독되어야만 한다.
4. 최종 억세스된 GAT 블록을 위한 GAT 인덱스가 컨트롤러 램 내에 유지되고, 플래시 메모리로부터 섹터를 판독할 필요 없이 억세스될 수 있다.
5. 모든 GAT 블록을 위한 메타블록 어드레스의 리스트 및 각 GAT 블록내에 기록된 섹터의 수가 컨트롤러 램 내에 유지된다. 필요한 GAT 인덱스가 단계 4에서 입수할 수 없는 경우, 따라서, 이는 플래시 메모리로부터 즉시 판독될 수 있다.
6. 타겟 논리적 그룹 어드레스에 관한 GAT 섹터가 단계 4 또는 단계 6에서 얻어진 GAT 인덱스에 의해 규정된 GAT 블록내의 섹터 위치로부터 판독된다. GAT 캐시는 타겟 엔트리를 포함하는 섹터의 세분부와 함께 갱신된다.
7. 타겟 섹터 어드레스가 타겟 GAT 엔트리내의 "페이지 태그" 필드 및 메타블록 어드레스로부터 얻어진다.
메타블록 대 물리적 어드레스 변환(단계 880)
메타블록 어드레스와 연계된 플래그가 메타블록이 재링크되었다는 것을 나타내는 경우, 관련 LT 섹터가 BLM 블록으로부터 판독되어, 타겟 섹터 어드레스를 위한 삭제 블록 어드레스를 결정한다. 그렇지 않으면, 삭제 블록 어드레스는 메타블록 어드레스로부터 직접적으로 결정된다.
제어 데이터 관리
도 10은 메모리 관리의 동작 과정에서 제어 데이터 구조상에 수행되는 동작의 계층체계를 예시한다. 데이터 갱신 관리 동작은 램내에 존재하는 다양한 리스트상에 작용한다. 제어 기록 동작은 플래시 메모리내의 전용 블록 및 다양한 제어 데이터 섹터상에 작용하며, 또한, 램내의 리스트와 데이터를 교환한다.
데이터 갱신 관리 동작은 ABL, CBL 및 카오틱 섹터 리스트상에, 램내에서 수행된다. ABL은 삭제된 블록이 갱신 블록 또는 제어 블록으로서 할당될 때, 또는, 갱신 블록이 폐쇄될 때 갱신된다. CBL은 제어 블록이 삭제될 때, 또는, 폐쇄된 갱신 블록을 위한 엔트리가 GAT에 기록될 때 갱신된다. 갱신 카오틱 섹터 리스트는 섹터가 카오틱 갱신 블록에 기록될 때 갱신된다.
제어 기록 동작은 필요시, 플래시 메모리, 그리고, 램 내의 제어 데이터 구조를 지원하는 다른 결과적 갱신과 함께, 램 내의 제어 데이터 구조로부터의 정보가 플래시 메모리내의 제어 데이터 구조에 기록되게 한다. 이는 ABL이 갱신 블록으로서 할당될 삭제된 블록을 위한 엔트리를 더 이상 포함하지 않을 때, 또는 CBI 블록이 재기록될 때 중 어느 하나의 경우에 트리거된다.
양호한 실시예에서, ABL 충전 동작, CBL 비움 동작 및 EBM 섹터 갱신 동작이 모든 제어 기록 동작 동안 수행된다. EBM 섹터를 포함하는 MAP 블록이 가득차있을 때, 유효 EBM 및MAP 섹터가 할당된 삭제된 블록에 복사되고, 이전 MAP 블록이 삭제된다.
모든 제어 기록 동작 동안, 하나의 GAT 섹터가 기록되고, 폐쇄된 갱신 블록 리스트가 따라서 변경된다. GAT 블록이 가득차게 될 때, GAT 재기록 동작이 수행된다.
특정 카오틱 섹터 기록 동작 이후, CBI 섹터가 전술한 바와 같이 기록된다. CBI 블록이 가득차게 될 때, 유효 CBI 섹터가 할당된 삭제 블록에 복사되고, 이전 CBI 블록이 삭제된다.
EBM 섹터내의 EBM 리스트내에 더 이상 추가적인 삭제된 블록 엔트리가 존재하지 않을 때, 전술한 바와 같이, MAP 교환 동작이 수행된다.
MAP 블록의 현재 어드레스를 레코드하는 MAP 어드레스(MAPA) 섹터는 MAP 블록이 재기록되는 각 경우에 전용 MAPA 블록에 기록된다. MAPA 블록이 가득차게 될 때, 유효 MAPA 섹터가 할당된 삭제된 블록에 복사되고, 이전 MAPA 블록이 삭제된다.
MAPA 블록이 재기록되는 각 경우에, 현재 부트 블록내에 부트 섹터가 기록된다. 부트 블록이 가득차게 될 때, 유효 부트 섹터가 부트 블록의 현재 버전으로부터 백업 버전으로 복사되고, 이 백업 버전은 그후 현재 버전이 된다. 이전 현재 버전은 삭제되며, 백업 버전이 되고, 유효 부트 섹터가 이에 다시 기록된다.
다수개의 메모리 평면들 상에 분산되는 메모리용 정렬
도4, 도 5A 내지5C를 참조하여 이전에 기술한 바와 같이, 성능을 향상시키기 위하여 다수개의 메모리 평면들을 병렬로 작용되도록 한다. 기본적으로 각각의 평면은 읽기의 부분으로써 센스 증폭기의 세트와, 평면을 스판(span)하는 기능을 하는 메모리 셀들의 해당하는 페이지를 병렬로 서비스하는 프로그램 회로들을 구비하고 있다. 다수개의 평면들이 상호 결합되면, 다수개의 페이지들이 상호 병렬로 작용하게 되어, 보다 우수한 성능을 얻을 수 있게 된다.
본 발명의 또 다른 양상에 따르면, 논리 유니트들이 병렬로 다수개의 평면들로 읽혀지고 또는 프로그램될 수 있도록, 삭제 가능한 블록들로 조직되고 그리고 다수개의 메모리 평면들로부터 구성되는 메모리 구성을 위하여, 주어진 메모리 평면에 저장된 제1 블록의 최초 논리 유니트가 갱신될 때, 최초의 상태와 동일한 평면 내에 갱신된 논리 유니트를 유지시킬 수 있는 구성을 만들어진다. 상기와 같은 구성은 갱신된 논리 유니트들을 제2 블록의 사용 가능한 다음 위치, 그리너 동일한 평면 내에 기록하여 성취된다. 바람직하게는, 논리 유니트는 소정의 논리 유니트들이 센싱 회로의 동일한 세트에 의하여 서비스될 수 있도록, 다른 버전들로서 평면 상의 동일한 옵셋 위치로 저장된다.
바람직한 실시예에 있어서, 최종 프로그램 메모리 유니트로부터 사용 가능한 다음 평면 정렬 메모리 유니트까지의 상호 간섭 갭들은 논리 유니트들의 현재 버전에 다라서 패딩된다. 상기 패딩은 최종 프로그램된 논리 유니트로터 논리적으로 뒤에 이어지는 논리 유니트들의 현재 버전들과, 그리고 사용 가능한 다음 평면 정렬 메모리 유니트 내에 저장된 논리 유니트로부터 논리적으로 선행하는 논리 유니트의 현재 버전들로 상기 갭을 채움에 따라 성취된다.
이러한 방법으로, 논리 유니트의 모든 버전들은 쓰레기 수집 작용에 있어서, 논리 유니트의 최근 버전이 다른 평면으로부터 인출(성능 감소)되지 않도록 최신의 옵셋으로 동일한 평면에서 유지된다. 바람직한 실시예에 있어서, 각각의 평면을 가로지르는 각각의 메모리 유니트는 최근의 버전들로 갱신되거나 또는 패딩된다. 따라서, 다수개의 평면들을 가로지르는 병렬 작용에 있어서, 논리 유니트는 추가적인 재정렬을 필요로 하지 않고 논리적인 순차 순서로 구성된다.
이와 같은 구조는 논리 그룹의 논리 유니트들의 최근 버전의 평면상의 재정렬을 가능하게 하고, 서로 다른 메모리 평면들로부터 최근의 버전들을 수집하는 것을 피하여 혼돈 블록의 통합에 필요한 시간을 줄이는 장점이 있다. 그리고, 이와 같은 것은 호스트 인터페이스용 성능 스펙이 메모리 시스템에 의하여 섹터 쓰기 작용의 완료에 대한 최대 지연을 가져오는 구성에 있어서 장점적이다.
도21는 다수개의 메모리 평면들로부터 구성되는 메모리 어레이를 도시한다. 메모리 평면들은 동일한 메모리 칩으로부터 구성될 수도 있으며, 그리고 다수개의 메모리 칩들로부터 구성될 수도 있다. 각각의 평면(910)은 메모리 셀들의 페이지(914)를 병렬로 서비스하기 위하여 읽기 및 프로그램 회로(912)의 자체 세트를 구비하고 있다. 일반적인 특징으로 상실하지 않고, 상기 메모리 어레이는 병렬로 작용하는 4개의 평면들을 구비한다.
일반적으로, 논리 유니트는 호스트 시스템의 의하여 접근되는 최소 유니트이다. 논리 유니트는 512 바이트의 크기를 갖는 섹터이다. 페이지는 평면 상에 구성 되는 병렬 읽기 또는 프로그램의 최대 유니트이다. 논리 페이지는 한개 또는 그 이상의 논리 유니트들을 구비하고 있다. 따라서 다수개의 평면들을 조합할 때는, 병렬 읽기 또는 프로그램의 최대 유니트는 메모리 셀들의 메타페이지로 정의될 수 있으며, 상기 메타페이지는 다수개의 평면들 각각으로부터의 페이지로 구성된다. 예를 들면, MP0와 같은 메타페이지는 평면 P0, P1, P2 및P3 즉 4개의 페이지를 가지며, LP0, LP1, LP2 및 LP3을 병렬로 저정하게 된다. 따라서, 메모리의 읽기 및 쓰기 성능은 한개의 평면 상에서 작용하는 것과 비교하여, 4배 증가하게 된다.
메모리 어레이는 MB0, ..., MBj와 같은 메타블로들로 조직되며, 각각의 메타 블록 내의 모든 메모리 셀들은 유니트로서 함께 삭제 가능하다. MB0와 같은 메타블록은 LP0-LON-1과 같은 논리 페이지(914)를 저장하기 위하여 다수개의 메모리 위치들로부터 구성된다. 메타블록 내의 논리 페이지들은 메타블록에 채워지는 순서에 따라 소정의 순서로 4개의 평면 P0, P1, P2 및P3 상에 분산된다. 예를 들면, 논리 페이지들이 논리적인 순차 순서에 따라 채워질때, 평면들은 제1 평면에는 제1 페이지가, 그리고 제2 평면에는 제2 페이지와 같은 순서로 채워지게 된다. 최종 평면이 완료되면, 채우기 작용은 다음 메타 페이지 내의 제1 평면으로부터 주기적으로 다시 시작한다. 이와 같은 방법으로, 논리 페이지들의 연속적인 작용은 모든 평면들이 병렬로 작용할 때 병렬로 접근 가능하게 된다.
일반적으로, 만약 병렬로 작용하는 W 평면이 존재하고, 그 메타 블록은 논리적 순차 순서에 의하여 채워진다면, 메타블록 내의 k-번째 논리 페이지는 평면 x상 에 존재하게 되며, 여기서 x=kMOD W이다. 예를 들면, 4개의 평면들을 갖는 것으로 가정한다면, W=4이며, 그리고 블록을 논리 순차 순서로 채울 때, 5번째의 논리 페이지 LP5는 5 MOD 4로 정의되는 평면 내에 위치하게 되며, 상기의 구성은 도21의 평면(1)에 해당한다.
각각의 메모리 평면에 있어서 메모리 작용들은 읽기/쓰기 회로(912)의 세트에 의하여 수행된다. 읽기/쓰기 회로의 각각의 내부 또는 외부에 존재하는 데이터는 제어기(920)의 제어에 따라 데이터 버스(930)를 통하여 전송된다. 제어기(920)의 버퍼(922)는 데이터 버스(930)를 통하여 데이터의 이송을 버퍼하게 된다. 특히, 제1 평면에서의 작용이 제2 평면에서의 데이터에 대한 전근을 필요로 한다면, 2-단계의 공정이 필요하게 된다. 데이터는 첫째로 제어기에 의하여 제2 평면으로부터 판독되며, 데이터 버스 및 버퍼를 통하여 제1 평면으로 전송된다. 사실, 가장 바람직한 메모리 구조에 있어서, 두 개의 서로 다른 비트 라인들 사이의 데이터 전송은 데이터 버스(920)를 통하여 상호 교환되는 것을 필요로 한다.
최소한, 상기와 같은 작용은 한 개의 평면 내에서 읽기/쓰기 회로의 한 개의 세트로부터의 전송 및 다른 한 개의 평면에서의 읽기/쓰기 회로의 또 다른 세트로의 전송에 영향을 미친다. 평면들이 서로 다른 칩으로부터 구성된다면, 아마도 칩들 간에 전송을 필요로 할 것이다.
본 발명은 성능을 최대화하기 위하여 한 개의 평면에 의하여 또 다른 평면으로부터의 데이터 접근을 피할 수 있도록 하기 위하여, 메모리 블록 관리용 구조 및 구성을 제공한다.
도21에 도시된 바와 같이, 메타페이지는 각각의 평면 당 한개씩, 다수개의 논리 페이지들로 구성된다. 각각의 논리 페이지는 한 개 또는 그 이상의 논리 유니트들로 구성된다. 데이터가 평면을 가로질러 논리 유니트에 의하여 블록 내로 논리 유트에 기록되는 것과 같이, 각각의 논리 유니트는 4개의 메모리 평면들 중 한 개와 일치하게 된다.
평면 정렬의 문제점은 논리 유니트가 갱신될 때 발생한다. 예시적인 목적으로 제공되는 현재 보기로는, 논리 유니트가 512 바이트의 논리 섹터로 구성되며, 논리 페이지는 전체 논리 유니트이다. 플래쉬 메모리가 전체 블록을 처음 삭제하지 않고 블록의 소정 부분의 재쓰기를 가능하게 하지 않기 때문에, 논리 페이지들에 대한 갱신들은 현재의 위치에 쓰여지지 않지만, 블록의 사용되지 않은 위치에 기록된다. 논리 유니트의 이전 버전은 폐쇄적이다. 수많은 갱신이 실시된 이후에, 한 개의 블록은 갱신된 이후에 폐쇄되는 수많은 논리 유니트을 포함하고 있다. 블록은 "더러운" 것으로 표현되며, 쓰레기 수집 작용은 상기와 같은 더러운 논리 유니트들을 무시하지만, 각각의 개별 논리 유니트들의 최근 버전을 수집하며, 그들을 한개 또는 그 이상의 새로운 블록들에 논리적 순차 순서에 의하여 재기록한다. 상기의 더러운 블록은 삭제되며, 또 다시 사용된다.
갱신된 논리 유니트가 한 블록 내의 사용되지 않은 다음 위치에 기록될때, 그 이전의 버전과 같은 동일한 메모리 평면에 기록되지 않는다. 즉, 통합 또는 압축과 같은 쓰레기 수집 작용이 실행되면, 논리 유니트의 최근 버전은 최초의 순서를 유지하기 위하여 최초와 동일한 평면 내에 재기록된다. 그렇지만, 만약 최근의 버전이 또 다른 평면으로부터 인출되었다면, 성능 저하가 발생한다.
그러므로, 본 발명의 또 다른 양상에 있어서, 소정의 주어진 평면에 저장된 제1 블록의 최초 논리 유니트가 갱신될때는, 갱신된 논리 유니트는 최초의 것과 동일한 평면에 유지될 수 있도록 구성된다. 이와 같은 것은 갱신된 논리 유니트를 동일한 평면에서 제2 블록의 사용 가능한 다음 위치에 기록함으로써 성취된다. 바람직한 일실시예에 있어서, 최종 프로그램 메모리 유니트로부터 사용 가능한 다음 평면 정렬 메모리 유니트까지에 존재하는 소정의 간섭 갭은 최초의 블록 내의 최초 논리 유니트와 동일한 상대 위치에 존재하는 논리 유니트들의 현재 버전들로 패딩(예를 들면, 카피에 의한 채움)된다.
도22A는 본 발명의 전체 구성에 따른 평면 정렬을 이용한 갱신 방법을 도시하는 플로우 차트이다.
단계 950: 블록들로 조직되는 비휘발성 메모리에 있어서, 각각의 블록은 함께 삭제 가능한 메모리 유니트들로 파티션되며, 각각의 메모리 유니트는 데이터의 논리 유니트를 저장한다.
단계 952: 다수개의 메모리 평면들로부터 메모리를 구성하며, 각각의 평면은 메모리 페이지를 병렬로 서비스하기 위하여 센싱 회로의 세트를 구비하며, 상기 메모리 페이지는 한 개 또는 그 이상의 메모리 유니트를 구비한다.
단계 954: 제1 순서에 따라 제1 블록의 메모리 유니트들 중에서 논리 뉴니트들의 제1 버전을 저장한다. 각각의 제1 버전 논리 유니트는 메모리 평면들 중 한개에 저장된다.
단계 956: 제1의 순서와 다른 제2 순서에 따라 논리 유니트들의 다음 버전들을 제2 블록에 저장한다. 각각의 다음 버전은 제1 버전과 동일한 평면 내의 사용 가능한 다음 메모리 유니트에 저장되며, 따라서 논리 유니트의 모든 버전드른 센싱 회로의 동일한 세트에 의하여 동일 평면으로부터 접근 가능하다.
도22B는 도22A에 도시된 플로우 차트 내에서 갱신을 저장하는 단계의 바람직한 실시예를 도시한다.
단계 956'는 단계 957, 958 및 959를 포함한다.
단계 957: 각각의 블록을 메타 페이지로 파티션한다. 각각의 메타 페이지는 각각의 평면의 페이지로부터 구성된다. 상기의 단계는 저장 단계 이전에 수행된다.
단계 958: 제1의 순서와 다른 제2의 순서에 따라 제2 블록 내에 논리 유니트의 다음 버전을 저장한다. 각각의 다음 버전은 제1 버전의 것과 동일한 메타 페이지 내에 동일한 옵셋을 갖는 사용 가능한 다음 메모리 유니트 내에 저장한다.
단계 959: 논리 유니트들의 다음 버전을 저장함과 동시에, 상기 제1의 순서에 따라 논리 유니트들의 현재 버전들을 카피하여 사용 가능한 다음 유니트에 선행하여 사용하지 않은 메모리 유니트들을 메타 페이지 별로 패딩한다.
도23A는 평면 정렬과 상관 없이 순차 갱신 블록에 대하여 순차적인 순서로 쓰여진 논리 유니트의 보기를 도시한다. 상기 예시는 각각의 논리 페이지가 LS0, LS1과 같은 논리 섹터의 크기를 갖는 것을 도시한다. 평면이 4개인 경우에 있어서, MB0와 같은 각각의 블록은 메타 페이지 MP0, MP1, ...으로 파티션되며, 여기서 MP0와 같은 각각의 메타 페이지는 평면 P0, P1, P2 및 P3로 부터 LS0, LS1, LS2, LS3 와 같은 4개의 섹터를 포함한다. 따라서, 블록은 평면 P0, P1, P2, P3에서 사이클 순서로 섹터별로 논리 유니트 내에 채워진다.
호스트 쓰기 작용 #1에 있어서, 논리 섹터 LS5-LS8 내의 데이터들은 갱신 된다. LS5'-LS8'와 같은 갱신된 데이타들은 제1 사용 가능 위치로부터 출발하여, 새롭게 할당된 갱신 블록 내에 기록된다.
호스트 쓰기 작용 #2에 있어서, 논리 섹터 LS9-LS12 내의 데이터 세그먼트가 갱신된다. LS9'-LS12'와 같은 갱신된 데이터는 최종 쓰기가 끝나는 지점 뒤의 위치 내에 구성되는 갱신 블록에 기록된다. 갱신 데이터는 LS5'-LS12'와 같은 논리적인 순차 순서로 갱신 블록 내에 기록될 수 있도록 2개의 호스트 쓰기가 제공된다. 갱신 블록은 그것이 논리적인 순차 순서로 채워지고 난 이후에 순차 갱신 블록으로 정의된다. 갱신 블록 내에 기록된 갱신 데이터는 최초 블록 내의 해당하는 데이터를 폐쇄하게 된다.
그러나, 갱신 논리 섹터들은 평면 정렬과 상관없이 사용 가능한 다음 위치에 따라 갱신 블록 내에 기록된다. 예를 들면, 섹터 LS5는 평면 P1에 최초로 기록되지만, 갱신된 LS5'는 P0에 기록된다. 이와 유사하게, 다른 갱신 섹터들은 모든 오류 정렬된다.
도23B는 평면 정렬과 상관없이 혼돈 갱신 블록에 대하여 비순차 순서로 스여지는 논리 유니트들의 예를 도시하고 있다.
호스트 쓰기 작용 #1에 있어서, 최초의 메타 블록에 저장된 주어진 논리 그룹의 논리 섹터 LS10-LS11이 갱신된다. 갱신된 섹터 LS10'-LS11'는 새롭게 할당된 갱신 블록 내에 저장된다. 이 시점에서, 갱신 블록은 순차적으로 이루어진다. 호스트 쓰기 작용 #2에 있어서, 논리 섹터 LS5-LS6은 LS5'-LS6'로 갱신되어, 최종 쓰기 이후의 위치에 있는 갱신 블록 내에 기록된다. 상기와 같은 작용으로 갱신 블록을 순차적인 순서로부터 혼돈의 순서로 변환한다. 호스트 쓰기 작용 #3에 있어서, 논리 섹터 LS10'는 다시 갱신되고, 갱신 블록의 다음 위치에 LS10''로서 기록된다. 이 시점에 있어서, 갱신 블록 내의 LS10''은 최초의 블록 내에서 LS10을 번갈아 추월하는 이전 기록 내의 LS10'를 추월한다. 호스트 쓰기 작용 #4에 있어서, 논리 섹터 LS10'' 내의 데이터는 다시 갱신되고, 그리고 LS10'''으로써 갱신 블록의 다음 위치 내에 기록된다. 따라서, LS10'''은 논리 섹터 LS10에 대하여 최근의 그리고 유일한 유효 버전이 된다. LS10의 모든 이전 버전들은 지금 폐쇄된다. 호스트 쓰기 작용 #5에 있어서, 논리 섹터 LS30 내의 데이터들은 갱신되고, LS30'로써 갱신 블록 내에 기록된다. 상기의 예에 있어서, 논리 그룹 내의 논리 유니트들은 소정의 순서로 그리고 소정의 반복성으로 혼돈 갱신 블록 내에 쓰여진다.
다시, 갱신 논리 섹터들은 평면 정렬과는 상관없이 사용 가능한 다음 위치에 따라 갱신 블록 내에 기록된다. 예를 들면, 섹터 LS10은 평면 P2(예를 들면 MP2, 3번째 평면)에 최초로 기록되지만, 갱신 LS10'는 P0(예를 들면 MP0, 1번재 평면)에 기록된다. 이와 유사하게, 호스트 쓰기 작용 #3에 있어서, 논리 섹터 LS10'는 LS10''로써 다시 갱신되고, 평면 P0(MP1에서 첫번째 평면)과 일치하는 사용 가능한 다음 위치에 위치하게 된다. 따라서, 갱신 섹터를 블록의 사용 가능한 다음 위치에 기록하는 것은 갱신된 섹터가 이전 버전과 다른 평면 내에 w저장될수도 있다는 것 이다.
패딩에 의하여 채워진 간섭 갭을 갖는 평면 정렬, 순차 갱신 블록
도24A는 본 발명의 바람직한 일실시예에 의한 평면 정렬 및 패딩을 갖는 도23A의 순차 갱신 예를 도시하는 도면이다.
호스트 쓰기 작용 #1에 있어서, 갱신된 데이터 LS5'-LS8'는 제1 사용 가능한 평면 정렬 위치로부터 출발하는 새롭게 할당된 갱신 블록 내에 기록된다. 이 경우에 있어서, LS5는 P1 내에 최초로 위치하게 되며, 상기 P1은 메타 페이지의 2번째 평면에 해당한다. 따라서, LS5'-LS7'는 갱신 블록의 제1 사용 가능한 메타 페이지 MP0 내에의 해당하는 평면들 내에서 프로그램된다. 동시에, MP0 내의 사용하지 않은 제1 평면의 갭은 최초 블록의 메타 페이지 내의 LS5를 선행하는 논리 섹터 LS4의 현재 버전으로 패딩된다. 최초의 LS4는 폐쇄 데이터로 취급된다. 나머지 LS8'은 다음 메타 페이지 MP1의 제1 평면에 기록되며, 평면 정렬된다.
호스트 쓰기 작용 #2에 있어서, LS9'-LS12'로 갱신된 데이터는 사용 가능한 다음 평면 정렬 위치의 갱신 블록 내에 기록된다. 따라서, LS9'는 사용 가능한 다음 평면 정렬 미모리 유니트 내에 기록되며, 그것은 MP1의 2번째 평면에 해당한다. 이러한 경우에 있어서, 갭이 발생하지 않으며, 패딩 또한 필요하지 않다. 갱신 블록은 그것이 논리적인 순차 순서로 채워지기 때문에 순처 갱신 블록으로 정의된다. 나아가, 각각의 갱신 논리 유니트가 최초의 평면과 동일한 평면에 있기 때문에 평면 정렬이라 불린다.
간섭 갭을 갖는 평면 정렬 및 혼돈 갱신 블록
도24B는 본 발명의 바람직한 일실시예에 따른 평면 정렬을 구비하나, 패딩은 구비하지 않는 도23B의 혼돈 갱신 예를 도시한다.
호스트 쓰기 작용 #1에 있어서, 갱신된 논리 섹터 LS10'-LS11'는 새롭게 할당된 갱신 블록 내에 저장된다. 그들을 사용 가능한 다음 메모리 유니트에 저장할 필요없이, 그들은 사용 가능한 다음 평면 정렬 메모리 유니트들에 저장된다. LS10' 및LS11'가 평면 P2 및P3(최초 블록의 MP2의 3번째 4번째 평면)에 각각 최초로 저장되기 때문에, 사용 가능한 다음 평면 정렬 메모리 유니트들은 갱신 블록의 MP0'의 3번째 및 4번째 평면 내에 위치한다. 이 시점에 있어서, 갱신 블록은 비순차적이며, MP0'의 페이지들은 Unfilled, Unfilled, LS10' 및 LS11'의 순서로 채워진다.
호스트 쓰기 작용 #2에 있어서, 논리 섹터 LS5-LS6는 LS5'-LS6'로서 갱신되며, 사용 가능한 다음 평면 정렬 위치의 갱신 블록 내에 기록된다. 따라서, 최초 블록의 2번째(P1) 및 3번째(P2) 평면 또는 메모리 유니트 MP1에 해당하는 LS5' 및 LS6'는 갱신 블록 내의 사용 가능한 다음 메타페이지 MP1' 내의 해당하는 평면으로 프로그램된다.
호스트 쓰기 작용 #3에 있어서, 논리 섹터 LS10'는 다시 갱신되고, 갱신 블록의 다음 평면 정렬 위치에 LS10''로서 기록된다. 따라서, 사용 가능한 다음 3번째 평면에 쓰여지며, 그것이 MP2'에 위치하게 된다. 상기와 같은 구성은 MP1' 내의 최종 평면에 선행 갭을 발생하며, 그리고 MP2'의 두개의 제1 평면에서 선행 갭을 발생한다. 상기와 같은 작용으로 MP0'에서 LS10'를 폐쇄하게 된다.
호스트 쓰기 작용 #4에 있어서, 논리 섹터 LS10'' 내의 데이터는 다시 갱신 되고, 갱신 블록 내의 메타 페이지 MP2'의 사용 가능한 3번째 평면에 LS10'''로서 기록된다. 따라서, LS10'''은 논리 섹터 LS10에 대하여 지금 최근의 그리고 유일한 유효 버전이 된다. 이에 따라, MP2' 및 두개의 제1 평면 MP3'로 구성되는 갭을 형성하게 된다.
호스트 쓰기 작용 #5에 있어서, 논리 섹터 LS30 내의 데이터는 갱신되고, 갱신 블록 내에 LS30'로써 기록된다. 최초의 LS30이 P2 또는 메타 페이지의 3번째 평면에 존재하기 때문에, 갱신 블록 내의 사용 가능한 다음 3번째 평면에 쓰여진다. 이경우에 있어서, MP4'의 3번째 평면이 된다. MP3'의 최종 평면으로부터 두개의 제1 평면 MP4' 사이에는 갭이 형성된다. 상기의 설명에서, 논리 그룹 내의 논리 섹터들은 평면 정렬 방법으로 소정의 순서 및 소정의 반복성으로 혼돈 갱신 블록 내에 쓰여진다. 다음 쓰레기 수집 작용에 있어서, 모든 버전들, 특히 주어진 논리 섹터의 가장 최근 버전은 센싱 회로의 동일 세트에 의하여 편리하게 서비스된다.
패딩으로 채워지는 간섭 갭들을 갖는 평면 정렬, 혼돈 갱신 블록
도24C는 본 발명의 또 다른 바람직한 실시예에 따른 평면 정렬 및 패딩을 갖는 도23B의 혼돈 갱신 예를 도시한다.
본 실시예에 있어서, 간섭 갭들이 먼저 패딩으로 채워지는 것을 제외하고는, 도24B의 그것과 유사하다. 호스트 쓰기 작용 #1에 있어서, 메타 페이지 MP0'의 사용하지 않은 제1 및 제2 평면들에 의하여 형성된 갭은 LS8 및 LS9의 현재 버전으로 먼저 패딩되며, 상기의 구성은 최초 블록 내에 위치하게 된다. 여기서, LS8 및 LS9는 폐쇄된 최초 블록 내에 위치하게 된다. 이 시점에 있어서, 갱신 블록은 순차적 인 것이며, 메타페이지 MP0'는 LS8, LS9, LS10' 및 LS11'의 순서로 채워진다.
호스트 쓰기 작용 #2에 있어서, 갭은 MP1' 내의 사용하지 않은 1번째 평면에 의하여 형성되며, 그것이 LS4로 처음 패딩된다. 이에 따라 최초 블록 내의 LS4는 폐쇄된다. 제2 쓰기는 갱신 블록을 순차적인 것으로부터 혼돈스러운 것으로 변환한다.
호스트 쓰기 #3에 있어서, MP1' 내의 사용하지 않은 최종 평면 및 MP2'의 두개의 제1 평면들에 의하여 만들어 진다. MP1'의 최종 평면은 최종 프로그램 LS6' 이후의 LS7에 의하여 처음으로 패딩되며, MP2'의 두개의 제1 평면들은 LS10에 선행하는, 즉 LS8 및 LS9에 의하여 패딩된다. 이에 따라 MP0' 내의 LS10 및 최초 블록 내의 LS7-LS9가 폐쇄된다.
호스트 쓰기 작용 #4에 있어서, 갭은 MP2' 내의 최종 평면 및 MP3' 내의 두개의 제1 평면들에 의하여 구성된다. MP2'의 최종 평면은 메타 페이지 MP2' 내의 최종 쓰기 LS10'' 이후의 논리 유니트의 현재 버전에 해당하는 LS11'에 의하여 패딩된다. MP3'의 두개의 제1 평면들은 논리 유니트들이 메타 페이지 MP3' 내의 LS10'''를 선행하기 때문에 각각 LS8 및 LS9에 의하여 패딩된다.
호스트 쓰기 작용 #5에 있어서, MP3'의 최종 평면 및 MP4'의 두개의 제1 평면들에 의한 갭은 LS11', LS28 및 LS29에 의하여 각각 패딩된다. 따라서, 논리 그룹 내의 논리 섹터들은 평면 정렬 방법으로 소정의 순서로 그리고 소정의 반복성으로 혼돈 갱신 블록 내에서 쓰여진다.
바람직한 실시예에 있어서, 메타 페이지는 개별 평면들로부터 페이지들의 사 이클 작용을 포함한다. 메타 페이지가 병렬로 읽혀지고 또는 프로그램되기 때문에, 메타페이지의 세분성으로 각각의 호스트 갱신을 구현할 수 있다.
도24A 및도24C의 예에 의한 실시예에 있어서, 각각의 호스트 쓰기 동안에, 패딩은 평면 정렬 메모리 유니트를 선행하는 사용하지 않은 메모리 유니트들에 대하여 수행되며, 상기 메모리 유니트에 대하여 갱신가 프로그래밍된다. 최종 프로그래밍된 메모리 유니트 이후의 사용하지 않은 메모리 유니트들의 작용은 다음 호스트 쓰기 까지 지연된다. 일반적으로, 소정의 선행하는 사용하지 않은 메모리 유니트들은 메타페이지의 경계 내에서 패딩된다. 다른 말로 표현하면, 만약, 선행하는 갭이 두개의 메타페이지에 대하여 지연된다면, 패딩이 각각의 메타페이지에 타당한 논리적으로 순차적인 순서로 각각의 메타페이지에 대하여 수행되지만, 상기 경계를 가로질러 계속성과는 상관없다.
블록의 통합의 경우에 있어서, 만약 부분적으로 쓰여졌다면, 최종 쓰여진 메타페이지는 패딩에 의하여 완전히 채워진다.
또 다른 실시예에 있어서, 소정의 부분적으로 채워진 메타페이지는 다음 메타페이지로 이동하기 이전에 충분히 패딩된다.
메모리 유니트 세분성
개별적인 메모리 구조에 의하여 지원되는 유연성에 따라, 읽기 또는 프로그램의 유니트에 변형이 가능하다. 개별 평면의 독립적인 본성에 의하여 메타페이지 내의 개별적인 평면들로부터의 각각의 페이지는 각각 독립적으로 읽기 및 프로그램된다. 앞서 설명한 보기들은 각각의 평면에 있어서 페이지가 될 수 있는 프로그램 의 최대 유니트를 갖는다. 메타페이지 내에서, 모든 페이지 보다 작은 부분적인 메타페이지 프로그래밍이 가능하다. 예를 들면, 메타페이지의 3개의 제1 페이지를 프로그래밍하고 그리고 그 다음으로 4번째 페이지를 프로그래밍하는 것이 가능하다.
평면 레벨에서, 물리적인 페이지는 한개 또는 그 이상의 메모리 유니트를 갖는다. 만약 각각의 메모리 유니트가 데이터 섹터를 저장한다면, 물리적인 페이지는 한개 또는 그 이상의 섹터를 저장한다. 어느 정도의 메모리 구조는 부분적인 페이지 프로그래밍을 지원하며, 페이지 내에서 선택된 메모리 유니트들의 프로그래밍을 저지하여, 선택된 논리 유니트들은 다수개의 프로그래밍 패스들에 대하여 각기 다른 시간으로 개별적으로 프로그래밍될 수 있다.
논리 그룹의 혼돈 갱신용의 메모리 평면 내의 논리 유니트 정렬
블록 메모리 관리 시스템에 있어서, 논리 유니트들의 논리 그룹은 최초의 블록 내에 논리적인 순차 순서로 저장된다. 논리 그룹이 갱신되면, 논리 유니트들의 다음 버전들이 갱신 블록 내에 저장된다. 만약 논리 유니트들이 갱신 블록 내에 혼돈적인 방법(예를 들면, 비순차적인 방법)으로 저장되면, 쓰레기 수집이 수행되어, 최초의 블록 및 갱신 블록 중에서 논리 유니트들의 최근 버전들을 수집하며, 그들을 새로운 최초 블록 내로 순차적으로 통합하게 된다. 만약 모든 버전들이 센싱 회로의 동일한 세트에 의하여 접근 가능하도록, 주어진 논리 유니트의 갱신된 버전들이 갱신 블록에 저장된다면, 상기의 쓰레기 수집 작용은 효율적이다.
본 발명의 다른 양상에 따르면, 상기에 기술된 블록 메모리 관리 시스템에 있어서, 메모리가 메모리 페이지 시리즈로 조직되면, 메모리 유니트들의 각각의 페 이지들은 센싱 회로의 세트에 의하여 병렬로 서비스되며, 만약 그들 모두가 그들이 저장되는 페이지 내에 동일한 옵셋 위치를 갖는다면 주어진 논리 유니트의 모든 버전들은 정렬된다.
도25는 예시적인 메모리 조직을 도시하며, 각각의 페이지는 두개의 논리적인 섹터들과 같은 두개의 논리 유니트를 저장하기 위한 두개의 메모리 유니트들을 그비하고 있다. 최초의 블록에 있어서, 논리 섹터들이 논리적으로 순차적인 순서로 저장되기 때문에, 논리 섹터 LS0 및 LS1은 페이지 P0에 저장되며, 논리 섹터 LS2 및 LS3은 페이지 P1에 저장되며, 논리 섹터 LS4 및 LS5는 페이지 P3에 저장된다. 두개의 섹터 페이지에 있어서, 좌측으로부터의 제1 섹터는 0의 페이지 옵셋을 가지며, 두번째 섹터는 1의 페이지 옵셋을 갖는다.
최초 블록에 순차적으로 저장된 논리 섹터의 논리 그룹이 갱신될 때, 갱신된 논리 섹터들은 갱신 블록 내에 기록된다. 예를 들면, 논리 섹터 LS2는 최초 블록 내에서 옵셋 0을 갖는 페이지 P0에 존재한다. 제1의 쓰기에서, 만약 LS2가 LS2'로 갱신된다면, 그것은 동일한 페이지 옵셋 0을 갖는 엡데이트 블록 내에 위치하는 제1 사용 가능한 위치에 저장된다. 이와 같은 것은 페이지 P0의 제1 메모리 유니트 내에 존재한다. 제2 쓰기에서, 만약 LS5가 LS5'로 갱신된다면, 동일한 페이지 옵셋 1을 갖는 갱신 블록 내의 제1 사용 가능한 위치에 저장될 것이다. 이와 같은 것은 페이지 P1의 옵셋 1을 갖는 제2 메모리 유니트 내에 존재한다. 그렇지만, LS5'을 저장하기 이전에, P0에서 옵셋 1을 갖는 사용하지 않은 메모리 유니트들과 P1에서 옵셋 0을 갖는 사용하지 않은 메모리 유니트들은 그들을 각각의 페이지 내에 최소 한 논리적인 순차 순서를 유지하는 논리 섹터들의 최근 버전을 카피하여 제공함으로서 패딩된다. 이러한 경우에 있어서, LS3은 P0 내의 옵셋 위치 1 위치로 그리고 LS4는 P1 내의 옵셋 0 위치로 각각 카피된다. 제3 쓰기에서, 만약 LS2'가 LS2''로 다시 갱신 된다면, P2의 옵셋 0 내로 저장될 것이다. 제4 쓰기에서, 만약 LS22 및 LS23이 LS22' 및 LS23'로 각각 갱신된다면, 그들은 각각 P3의 옵셋 0 및 1에 각각 저장될 것이다. 그렇지만, 그런 작용 이전에, P2에서 옵셋 1을 갖는 사용하지 않은 메모리 유니트는 LS3으로 패딩된다.
상기에 기술된 갱신 순서는 페이지 내에서 개별적인 섹터들을 프로그래밍할 수 있다는 것을 가장하는 것이다. 부분적인 페이지 프로그래밍이 지원되지 않은 약간의 메모리 구조들에 있어서, 페이지 내의 모든 섹터들은 함께 프로그래밍되어야 한다. 이러한 경우에 있어서, 제1 쓰기에서, LS2 및 LS3는 P0'로 함께 프로그래밍되며, 제2 쓰기에 있어서, LS4 및 LS5'는 P1'으로 각각 함께 프로그래밍된다. 제3 쓰기에 있어서, LS2'' 및 LS3은 P2'로 각각 함께 프로그래밍된다.
메타페이지 내의 평면 정렬
프로그램의 유니트는 메타페이지의 세분성을 갖는다. 만약 혼돈 갱신 블록으로의 쓰기의 세분성이 메타페이지가 된다면, 도16A 및 16B를 참조하여 설명한 CBI 블록 내의 입력 내용들은 섹터 대신에 메타페이지에 관한 것이다. 증가된 세분성으로 인하여 혼돈 갱신 블록용으로 기록되는 입력 내용의 수가 감소하며, 직접 인덱스들이 제거되며, 단일의 CBI 섹터가 메타블록 당 사용될 수 있다.
도26A는 각각의 페이지가 한개 대신에 두개의 섹터를 갖는 것을 제외하고는 도21의 메모리 구조와 유사하다. 즉, 메타페이지 MP0는 데이터의 두개의 논리 유니트들을 저장할 수 있는 페이지를 각각 갖는다. 만약 각각의 논리 유니트가 섹터가 된다면, 논리 섹터들은 평면 p0에서 LS0 및 LS1을 가지며 그리고 P1에서 LS2 및 LS3을 갖는 MP0 내에서 순차적으로 저장된다.
도26B는 개략적으로 선형 패션으로 구성되는 메모리 유니트들을 갖는 도26A의 메타블록들을 도시한다. 도21의 단일 섹터 페이지와 비교하여, 논리 섹처들은 각각의 페이지에 두개의 섹터들을 갖는 4개의 페이지들에 사이클적으로 저장된다.
일반적으로, 만약 병렬로 작용하는 W 평면이 있다면, 그리고 페이지 당 K 페모리가 존재하고, 그리고 메타블록이 논리저으로 순차적인 순서로 채워져 있다면, 메타 블록 내의 k-번째 논리 페이지는 평면 x 내에 존재하여, 여기서 x = k' MOD W이며, k' = INT(k/K)이다. 예를 들면, 4개의 평면을 가지면, W= 4 이며, 페이지 당 2개의 섹터를 가지며, K = 2, 그리고 k = 5이며, 이는 5번째 논리 섹터 LS5에 해당하며, 이는 24A도에 도시된 k와 같이 평면 2에 해당하는 2 MOD 4에 의하여 주어지는 평면 내에 존재한다. 일반적으로, 동일한 원리가 앞서 기술한 평면 정렬을 구현하는데 적용된다.
앞서 주어진 예문들은 다수개의 평면 구조에서 평면들을 갖는 페이지 정렬에 대한 것이다. 다수개의 섹터를 갖는 페이지의 경우에 있어서, 한개의 패이지 내에 섹터 정렬을 유지하는 것이 바람직하다. 이러한 방법으로, 센스 회로의 동일한 세트가 동일한 섹터의 다른 버전을 위하여 사용될 수 있다. 섹터의 위치 재설정 및 읽기-수정-쓰기와 같은 작용들은 효율적으로 수행될 수 있다. 섹터 순서를 한 페이 지 내에서 정렬할때는, 페이지를 평면에 정렬하는 것과 같은 동일한 기술이 사용될 수 있다. 실시예에 따라, 소정의 간섭 갭들이 패딩될 수 있고 또는 패딩되지 않을 수 있다.
패딩이 필요없는 논리 유니트 또는 평면 정렬
도27은 한개의 위치로부터 다른 한개의 위치로 카피되는 논리 유니트들을 패딩하지 않고, 한개의 갱신 블록 내에 평면 정렬용 구조를 도시한다. 갱신 블록을 가로지르는 4개 평면의 부분들은 호스트로부터 수신되는 평면 정렬 갱신 논리 유니트들을 수집하는 4개의 버퍼로써 정의된다. 상기 호스트로부터 수신되는 각각의 논리 유니트는 소정의 버퍼의 사용 가능한 다음 메모리 유니트 내에서 패딩하지 않고 프로그래밍된다. 다른 개수의 논리 유니트들은 상기 호스트로부터 수신되는 논리 유니트 주소의 순서에 따라 각각의 평면 내에서 프로그래밍된다.
혼돈 갱신 블록 MB1'은 MP0'와 같은 논리 메타페이지의 모든 논리 유니트의 갱신된 버전들을 포함한다. 그리고, MP1'와 같은 메타페이지의 모든 논리 유니트들 보다 적은 수를 포함할 수 있다. MP1'의 경우에 있어서, 분실 논리 유니트 LS4는 해당하는 최초 블록 MB0로부터 얻을 수 있다.
이와 같은 다른 구조는 만약 메모리 구조가 각각의 평면으로부터 이진 논리 페이지의 병렬 읽기를 지원한다면, 특히 효율적이다. 이와 같은 방법으로, 메타페이지의 모든 논리 페이지들은 심지어 개별 논리 페이지들이 동일한 열로부터 구성되지 않는다 해도 단일 병렬 읽기 작용에서 읽을 수 있다.
단계화된 프로그램 에러 취급
만약 블록 내에 프로그램 오류가 발생한다면, 블록 내에 저장된 보든 데이터들이 또 다른 블록으로 이전되고, 오류가 발생한 블록은 나쁜(bad)으로 표시된다. 오류가 검출되는 작용 동안의 시간 스펙에 따라, 저장된 데이터를 또 다른 블록으로 추가적으로 이전하기 위하여 충분한 시간을 갖지 못할 수도 있다. 가장 최악의 경우는, 모든 데이터를 또 다른 블록으로 위치 재설정하기 위하여 또 다른 그리고 유사한 쓰레기 수집 작용이 필요한 작용, 즉 정상적인 쓰레기 수집 작용 중간에 프로그램 오류가 발생하는 경우이다. 이와 같은 경우에 있어서, 주어진 호스트/메모리 장치의 구체적인 쓰기 지연 시간 제한은 한개에 대하여 두개의 쓰레기 수십 작용을 수용할 수 없도록 설계되었기 때문에 그러한 제한을 종종 어기게 된다.
도28은 통합 작용 동안의 결함 블록 애네 발생하는 프로그램 오류를 도시하며, 통합 작용은 또 다른 블록에서 반복된다. 예를 들면, 블록 1은 논리적은 순차적인 순서로 논리 그룹의 완전한 논리 유니트를 저장하는 최초의 블록이다. 예시적인 목적으로 도시되었지만, 최초의 블록은 섹션 A, B, C 및 D를 구비하고 있으며, 상기 각 섹션은 논리 유니트들의 서브 그룹을 저장한다. 호스트가 그룹의 소정 논리 유니트들을 갱신하면, 논리 유니트들의 새로운 버전들은 갱신 블록, 즉 블록 2에 기록된다. 상기 갱신 블록과 관련하여 앞서 기술한 바와 같이, 호스트에 따라, 갱신은 순차적인 순서로 또는 비순차적인 (혼돈)의 순서로 논리 유니트들을 기록할 수 있다. 궁극적으로, 갱신 블록은 다른 소정의 이유에 의하여 갱신을 추가적으로 수신하는데 대하여 차단되어 있다. 갱신 블록(블록 2)가 차단되어 있으면, 갱신 블록 또는 최초 블록(블록 1)에 존재하는 논리 유니트들의 현재 버전들은 새로운 블 록(블록 3)에 통합되어, 논리 그룹을 위하여 새로운 최초 블록을 형성하게 된다. 예시는 섹션 B 및 D에서 논리 유니트들의 새로운 버전들을 포함하는 갱신 블록을 도시한다. 섹션 B 및 D는 블록 2 내에 개략적으로 도시되어 있으며, 그들이 기록되는 위치에서는 필요하지 않으며, 블록 1에서 최초의 위치들에 정렬되어 있다.
통합 작용에 있어서, 최초로 블록 1에 존재하는 논리 그룹의 모든 논리 유니트들의 현재 버전들은 통합 블록(블록 3)에 순차적인 순서로 기록된다. 섹션 A의 논리 유니트들은 블록 1에서 블록 3으로 카피되며, 그리고 섹션 B에서는 브록 2에서 블록 3으로 카피된다. 예를 들면, 섹션 C의 논리 유니트가 블록 1에서 블록 3으로 카피된다면, 블록 3의 결함에 의하여 프로그램 오류가 발생할 수 있다.
프로그램 오류를 취급하는 한가지 방법은 새로운 블록(블록 4)에 대하여 통합 공정을 다시 시작하는 것이다. 따라서, 섹션 A, B, C 및 D는 블록 4로 카피되며, 결함 블록 3은 저려진다. 그렇지만, 이와 같은 것은 2개의 통합 작용을 실시하는 것이기 때문에, 논리 유니트들로 포화상태인 두개의 블록을 카피하는 결과가 된다.
메모리 장치는 소정의 작용을 수행하기 위하여 구체적인 시간 일정을 갖는다. 예를 들면, 한개의 호스트가 메모리 장치로 쓰기를 하면, 쓰기 작용은 소정의 주어진 시간 내에 종료하는 것을 기대하게 된다, 이를 쓰기 지연이라 부른다. 메모리 카드와 같은 메모리 장치가 호스트로부터 데이터를 쓰기에 바쁘다면, 바쁜 상태를 알리는 "Busy" 상태를 호스트에 전송한다. 만약 Busy 상태가 쓰기 지연 기간 보다 오래 지속된다면, 호스트는 쓰기 작용을 시간 종료하게 되며, 쓰기 작용에 예외 또는 에러를 등록하게 된다.
도29는 쓰기 작용(지연) 뿐만 아니라 통합 작용을 완료하기에 충분한 시간을 제공하는 타이밍 또는 쓰기 지연을 갖는 호스트 쓰기 작용을 개략적으로 도시하고 있다. 호스트 쓰기 작용은 쓰기 지연 Tw를 제공하며, 상기 지연은 쓰기 호스트 데이터의 갱신 작용 972의 완료에 대한 충분한 시간을 갱신 블록(도29A)에 제공한다. 블록 관리 시스템에서 앞서 기술한 바와 같이, 갱신 블록으로의 호스트 쓰기는 통합 작용을 트리거할 수도 있다. 즉, 티이밍에 의하여 갱신 작용(972)에 추가하여 통합 작용(974)(도29B)를 가능하게 한다. 그러나, 발생한 오류에 대응하여 통합 작용을 다시 시작하는 것은 너무 긴 시간을 필요로 할 수 있으며, 설정된 쓰기 지연을 초과할 수도 있다.
본 발명의 다른 양상에 따르면, 블록 관리 시스템을 갖는 메모리에 있어서, 시간-임계 메모리 작용 동안에 블록에서 발생하는 프로그램 오류는 브레이크아웃 메모리에서 프로그래밍 작용을 계속하여 구현될 수 있다. 보다 작은 임계 시간에서, 중단이 발생하기 이전에 오류가 발생한 블록에 기록된 데이터는 또 다른 블록으로 이전되며, 상기 또 다른 블록은 브레이크아웃 블록일 수도 있다. 오류가 발생한 블록은 버려진다. 이와 같은 방법으로 결합 블록이 발견되면, 결함 블록에 저장된 데이터를 현장에서 바로 이전시킴에 따라, 저장된 데이터를 현장에서 데이터 손실 없이 그리고 설정된 시간 제한을 초과하지 않고 취급할 수 있다. 이와 같응 에러 취급은 전체 작용이 임계 시간 동안 새로운 블록에 대하여 반복될 필요가 없기 때문에 쓰레기 수집 작용에 있어서 특히 중요하다. 결과적으로, 소정의 타당한 시 간에, 결함 블록으로부터의 데이터는 또 다른 블록으로 위치를 재조정하여 구할 수 있다.
도30은 본 발명의 전체 구조에 따라 프로그램 오류 취급의 플로우 차트를 도시하는 도면이다.
단계 1002: 비휘발성 메모리를 블록으로 조직한다. 각각의 블록은 함께 삭제 가능한 메모리 유니트들로 파티션된다. 각각의 메모리 유니트는 데이터의 논리 유니트를 저장한다.
프로그램 오류 취급 (제1단계)
단계 1012: 데이터의 논리 유니트의 순서를 제1 블록 내에 저장한다.
단계 1014: 다수의 논리 유니트들을 저장하고 난 이후에 제1 블록에서의 저장 오류에 대응하여, 다음 논리 유니트들을 제1 블록에 대한 브레이크아웃 블록으로 기능을 하는 제2 블록 내에 저장한다.
프로그램 오류 취급 (최종 단계)
단계 1020: 소정의 이벤트에 대응하여, 제1 블록에 저장된 논리 유니트들을 제 3블록으로 이전시키고, 상기 제3 블록은 상기 제2 블록에 일치 또는 일치되지 않을 수 있다.
단계 1022: 상기 제1 블록을 버린다.
도31A는 제3 블록(최종 위치 재설정) 블록이 제2 (브레이크아웃) 블록과 서로 다른 구성에 있어서, 프로그램 오류 취급의 제1 실시예를 도시하는 도면이다. 단계 I에서, 일련의 논리 유니트들이 제1 블록에 기록된다. 만약 논리 유니트들이 호스트 쓰기로부터 구성되면, 제1 블록은 갱신 블록으로 정의된다. 만약 논리 유니트들이 압축 작용의 통합으로부터 구성된다면, 제1 블록은 위치 재설정 블록으로 정의된다. 소정의 지점에서, 프로그램 오류가 블록 1에서 검출되면, 브레이크아웃 블록이 구성된다. 블록 1에 기록되는 것이 실패한 논리 유니트 및 다른 다음 유니트들은 그 대신에 브레이크아웃 블록에 기록된다. 이와 같은 방법으로, 오류 블록 1 및 그에 존재하는 데이터를 교체하기 위하여 추가적인 시간이 필요 없게 된다.
간섭 단계 II에 있어서, 상기 시퀀스의 모든 기록된 논리 유닛은 블록 1과 블록 2 사이에 획득가능하다.
최종 단계 III에 있어서, 오류 블록 1 및 그에 존재하는 데이터는 논리 유니트들을 블록 3으로 위치 재설정하여 교체되며, 상기의 블록 3은 위치 재설정 블록으로써 기능을 한다.
즉, 오류 블록 내의 데이터는 다시 살아나며, 오류 블록은 버려지게 된다. 최종 단계는 소정의 다른 임시 메모리 작용의 타이밍과 상호 충돌하지 않도록 시간 설정된다.
본 실시예에 있어서, 위치 재설정 블록(3)은 브레이크아웃 블록(2)과는 분명하게 차이가 난다. 즉, 이와 같은 것을 중간 단계 동안에 브레이크아웃 블록이 추가 논리 유니트들로 기록될 때 유용하다. 즉, 브레이크아웃 블록이 갱신 블록으로 전환하고, 결함있는 블록(1)로부터 논리 유니트들을 위치 재설정하는 역할을 못하게 되는 것이다.
도31B는 프로그램 오류 취급의 또 다른 실시예를 도시하며, 제3(최종 위치 재설정) 블록은 제2 (브레이트아웃) 블록과 동일한 것이다. 단계 I 및 II는 도31A의 제1 실시예와 유사하다. 그렇지만, 단계 III에 있어서, 결함 블록 I로부터의 논리 유니트들은 브레이크아웃 블록(2)로 위치 재설정된다. 이와 같은 것은 브레이크아웃 블록(2)이 이전의 쓰기 작용의 최초 순서와 다른 추가적인 논리 유니트로 기록될때 유용하다. 이와 같은 방법으로, 논리 유니트들을 저장하는데 있어 최소의 블록들이 필요하게 된다.
통합 과정에서의 프로그램 오류 취급용 실시예
프로그램 오류 취급은 통합 작용 과정에 있어서 특히 중요하다. 정상적인 통합 작용이 통합 블록으로 통합되며, 논리 그룹의 모든 논리 유니트들의 현재 버전들은 최초 블록 및 갱신 블록 사이에 존재하게 된다. 통합 작용 과정에서, 만약 프로그램 오류가 통합 블록에서 발생한다면, 브레이크아웃 블록으로 작용하는 또 다른 블록은 나머지 논리 유니트들의 통합을 수신한다. 이와 같은 방법으로,한 번 이상 카피되는 논리 유니트가 없게 되며, 예외적인 취급에 따른 작용은 정상적인 통합 작용 동안에 설정된 기간 내에 완료된다. 적절한 시간에, 통합 작용은 그룹의 모든 우수한 논리 유니트들을 브레이아웃 블록으로 통하여 완료될 수 있다. 적당한 시간이란 통합을 실시할 시간이 있을때 현재의 호스트 쓰기 작용 외부에서의 다른 기간 과정을 의미한다. 그러한 적절한 시간은 갱신이 존재하나, 해당하는 통합 작용이 존재하지 않는 또 다른 호스트 쓰기 과정에 실시될 수 있다.
특히, 프로그램 오류 취급을 이용한 통합은 다수개의 단계들로 구현될 수 있다. 첫번째 단계에 있어서, 한번 이상의 논리 유니트들을 통합하는 것을 피하기 위 하여 프로그램 오류가 발생한 이후에 논리 유니트들이 한개의 블록 이상의 블록으로 통합된다. 최종 단계는 적절한 시간에 완료되며, 모든 논리 유니트들을 순차적인 순서로 브레이크아웃 통합 블록 내로 수집하는 방법으로, 한개의 블록 내로 통합을 한다.
도32A는 통합 작용을 이룰 수 있는 초기 갱신 작용의 플로우 차트이다.
단계 1102: 비휘발성 메모리를 블록들로 조직하고, 각각의 블록은 함께 삭제 가능한 메모리 유니트들로 파티션되고, 각각의 메모리 유니트는 데이터의 논리 유니트를 저장한다.
단계 1104: 데이터를 다수개의 논리 그룹으로 조직한다. 각각의 논리 그룹은 블록 내에 저장될 수 있는 논리 유니트들의 그룹이다.
단계 1112: 논리 유니트들로 패키지된 호스트 데이터를 수신한다.
단계 1114: 제1 순서에 따라 논리 그룹의 논리 유니트들의 제1 버전을 제1 블록 내에 저장하여 논리 그룹의 최초 블록을 생성한다.
단계 1116: 제2 순서에 따라 논리 그룹의 논리 유니트들의 다음 버전을 포함하는 제2 블록 내에 저장하여 논리 그룹의 갱신 블록을 생성한다.
단계 1119: 앞서 설명한 섹션에서의 소정의 이벤트에 있어서, 쓰레기 수집이 수행되어, 다양한 블록들에서 논리 유니트들의 현재 버전을 수집하여, 새로운 블록으로 재기록한다.
도32B는 본 발명의 바람직한 실시예의 다수 단계 통합 작용의 플로우 차트이다.
통합 오류 취급 (단계 I)
오류 취급, 단계 I 작용 1120에 대한 통합 작용은 단계 1122 및 단계 1124를 구비한다.
단계 1122: 제1 순서와 유사한 논리 그룹의 논리 유니트들의 현재 버전들을 제3 블록 내에 저장하여 논리 그룹용 통합 블록을 생성한다.
단계 1124: 통합 블록에서 저장 오류에 대응하여, 상기 제3 블록으로부터 이탈한 논리 그룹의 논리 유니트들을 제1 순서에 유사한 제4 블록에 저장하여, 브레이크아웃 통합 블록을 제공한다.
블록 1 및 2에서의 데이터들이 블록 3 및 4로 이전되고, 블록 1 및 2는 공간을 증가시키기 위하여 삭제된다. 바람직한 실시예에 있어서, 블록 2는 EBL(Erased Block List, 도18 참조)로 즉시 릴리즈되고 재사용된다. 블록 1은 만약 이것이 닫힌 얻데이트 블록이라면 릴리즈될 수 있다. 해당하는 GAT 엔트리가 가르키는 또 다른 블록이 존재한다.
특히, 블록 3은 논리 그룹을 위하여 최초 블록이 되며, 블록 4는 블록 3을 위하여 교체 순차 갱신 블록이 된다.
단계 I 통합이 완료된 이후에, 메모리 장치는 Busy 신호를 전송하여 호스트에게 신호를 보낸다.
중간 작용 (단계 II)
중간 작용 1130인 단계 II는 단계 III 통합 작용 1140 이전에 수행될 수 있다. 다수의 가능한 시나리오는 단계 1132, 1134 및 1136으로 구성된다.
단계 1132: 논리 그룹의 쓰기 작용에 있어서, 갱신 블록으로써 제4번째 블록(브리에크아웃 통합 블록)으로 쓴다.
만약 호스트가 의문이 있는 논리 그룹으로 쓰기를 한다면, 브레이크아웃 통합 블록이고, 교체 순차 엡데이트 블록의 역할을 갖는 블록 4는 정상적인 갱신 블록으로 사용될 것이다.
호스트 쓰기에 따라서, 순차적인 상태로 남아 있을 수 있으며, 또는 혼돈 상태로 변환될 수도 있다. 갱신 블록으로써, 그것은 앞선 실시예에서 설명한 바와 같이, 도 다른 혼돈 블록의 소정의 포인트 트리거 클로져에 있을 수 있다.
만약 호스트가 또 다른 논리 그룹으로 쓰기를 한다면, 단계 III의 작용으로 바로 진행한다.
단계 1134: 또는 읽기 작용에 있어서, 제3 블록을 이용하여 메모리를 논리 그룹용 최초 블록으로써 읽고, 그리고 제4 블록을 갱신 블록으로써 읽는다.
이와 같은 경우에 있어서, 섹션 A 및 B로부터의 논리 유니트들은 블록 3으로부터 논리 그룹의 최초 블록으로서 읽어진다. 그리고 섹션 C 및 D로부터의 논리 유니트들은 블록 4로부터 그룹의 갱신 블록으로서 읽어진다. 섹션 A 및 B가 블록 3으로부터 읽혀질 수 있기 때문에, 프로그래밍이 오류를 일으키는 페이지에 대한 접근을 할 수가 없으며, 그 이후에 쓰여진 부분에 대한 접근도 없을 것이다. 플래시 메모리 내의 GAT 디렉토리가 아직 갱신되지 않고, 최초 블록으로써 블록 1을 가리키고 있기 때문에, 그로부터 읽혀지는 데이터가 존재하지 않으며, 블록 그 자체는 조기에 삭제될 수 있다.
또 다른 가능성은 논리 그룹에서의 논리 유니들의 호스트 읽기이다. 이 경우에 있어서, 섹션 A 및 B로부터의 논리 유니트들은 논리 그룹 최초 블록으로써 블록 3으로부터 읽혀지며, 섹션 C 및 D로부터의 논리 유니트들은 그룹의 순차 갱신 블록으로써 블록 4로부터 읽혀질 것이다.
단계 1136: 또는 파워-업 초기화에 있어서, 제1 내지 제4 블록들 중 어느 한개를 그들 내용을 스캐닝하여 다시 확인한다.
중간 단계의 또 다른 가능성은 파워 오프되어 다시 시작되는 메모리 장치용으로 적용된다. 상기에 기술한 바와 같이, 파워-업 초기화 과정 동안에, 할당 블록 리스트(사용되는 삭제 풀 블록, 도15 및 18 참조) 내의 블록들은 스캔되어, 특수 상태의 최초 블록 (블록 3)과 논리 그룹용 순차 갱신 블록 (블록 4)가되는 결합 통합 블록을 확인한다. 브레이트 블록 (블록 4)의 제1 논리 유니트의 플래그는 해당 블록이 프로그램 에러로 장애를 겪는 최초 블록 (블록 3)인 것을 표시한다. 블록 디렉토리 (GAT)와 통신하여, 블록(3)은 위치 설정된다.
일 실시예에 따라, 플래그는 브레이크아웃 통합 블록 (블록 4) 내에서 제1 논리 유니트 내로 프로그래밍된다. 이와 같은 작용에 따라, 예를 들면 두개의 블록, 즉 블록 3 및 4로 통합되었다는 것을 표시하는 것과 같은, 논리 그룹의 특수 상태를 표시한다.
결함 블록을 이용하여 논리 그룹을 확인하기 위하여 플래그를 사용하는 또 다른 방법은 최초의 블록이 그러한 것(최종 페이지에서 에러가 발생하지 않는 한, 최종 페이지는 ECC 에러를 갖지 않는다)과 같이 채워진 상태가 아닌 특징에 따라 스케닝 하는 동안에 결함으로써 블록을 검출하는 것이다. 구형하는 방법에 따라서, 플래시 메모리 내에 브레이크아웃 통합 블록(블록 4)에 쓰여진 제1 섹터의 헤더 영역이 아닌, 제어 데이터 구조에 저장된 오류 그룹/블록에 대한 정보 기록이 있을 수 있다.
통합 완료 (단계 III)
단계 1142: 소정의 이벤트에 대응하여, 그리고 제4번째 블록이 단계 I 이후에 계속하여 기록되지 않았을 때의 제1 경우에 대하여, 제1의 순서에 유사한 논리 그룹의 모든 우수한 논리 유니트들의 현재 버전을 저장하고, 그리고 단계 I 이후의 제4 블록이 더 기록되어 있는 제2의 경우에 대하여, 제3 및 제4 블록들을 제5 블록 내로 통합한다.
단계 1144: 그 이후에, 제1의 경우에 대하여,논리 그룹에 대한 최초 블록으로써 통합된 제4 블록으로 메모리를 작동시키고, 제2의 경우에 대하여, 논리 그룹용 최초 블록으로써 제5 블록으로 메모리를 작동시킨다.
단계 III에서의 최종 통합은 명시된 시간 제한을 어기지 않고 기회가 닿는 다면 언제든지 실시된다. 바람직한 경우는 동반되는 통합 작용이 더 없으면, 또 다른 논리 그룹에 대한 갱신 작용이 있을때 다음 쓰기 슬롯에 대하여 피기-백(piggy-back)하는 것이다. 만약 또 다른 논리 그룹으로의 호스트 쓰기가 쓰레기 수십 그 자체를 트리거하면, 단계 III 통합은 지연된다.
도33은 다수 단계 통합 작용의 제1 및 최종 단계의 예시적인 타이밍을 도시한다. 호스트 쓰기 지연은 기간 Tw를 갖는 각각의 호스트 쓰기 슬롯의 폭이다. 호 스트 쓰기 1은 단순한 갱신이고, 논리 그룹 LG1 내의 논리 유니트의 제1 세트의 현재 버전들은 관련 갱신 블록에 기록된다.
호스트 쓰기 2에 있어서, 논리 그룹 LG1에 대한 또 다른 갱신이 발생하여 갱신 블록이 닫히도록 한다 (풀 상태). 새로운 갱신 블록이 나머지 갱신을 기록하기 위하여 준비된다. 새로운 갱신 블록의 제공은 쓰레기 수집을 트리거하여, 재사용을 위한 블록을 재상하기 위하여 LG4에 대하여 통합 작용이 실시되는 것이다. LG4 그룹의 현재 논리 유니트는 수차적인 순서로 통합 블록에 기로된다. 통합 작용은 결함이 통합 블록 상에서 발결될 때까지 진행된다. 단계 1 통합은 통합 작용이 브레이크아웃 통합 블록에서 계속되는 구성에서 실시된다. 그리고, LG4 (단계 III)의 최종 통합은 다음 기회를 기다리게 된다.
호스트 쓰기 3에 있어서, 논리 그룹 LG2의 논리 유니트들의 쓰기가 발생하여, LG2에 대한 통합을 트리거하게 된다. 이것은 시간 슬롯이 이미 충분히 이용되고 있다는 것을 뜻한다.
호스트 쓰기 4에서, 작용은 LG2의 논리 유니트들을 단순히 갱신 블록에 기록하는 것이다. 시간 슬롯에 있어서의 여유 시간은 LG4의 최종 통합을 실시할 수 있는 기회를 제공한다.
브레이크아웃 통합 즐로이 갱신 블록으로 변환되지 않는 실시예
도34A 및 도34B는 도28 및 도31의 보기들에 적용될때 다수개의 단계 통합의 단계 I 및 단계 III에 대한 제1의 경우를 도시한다.
도34A는 브레이크아웃 통합 블록이 갱신 블록으로 사용되지 않는, 그러나 그 통합 작용이 중단되는 통합 블록으로써 더 사용되는 경우를 도시한다. 특히, 도34A는 도33의 호스트 쓰기 #2에 대한 것이며, 호스트는 논리 그룹 LG1에 속하는 논리 유니트들의 갱신을 쓰기하며, 작용에 의하여 또 다른 논리 그룹 LG4와 관련된 블록의 통합을 트리거 된다.
최초 블록(블록 1) 및 갱신 블록 (블록 2)의 정보는 도28의 보기와 동일한 방법으로 구현된다. 통합 작용의 과정에서, 통합 블록(블록 3)은 섹션 C의 논리 유니트를 통합하는 포인트에서 결함을 발견한다. 그러나, 도28의 통합 구조와는 다르게, 본 발명에 의한 다수의 단계 구조는 브레이크아웃 통합 블록으로 작동하는 새로운 블록 (블록 4)에 대하여 통합 작용을 계속한다. 단계 I 통합 작용에 있어서, 섹션 A 및 B에서의 논리 유니트들은 통합 블록(블록 3) 내에 통합된다. 프로그램 오류가 통합 블록 내에 발생하면, 섹션 C 및 D 내의 나머지 논리 유니트들은 브레이크아웃 통합 블록 (블록 4)로 순차적으로 카피된다.
만약 호스트가 제2 논리 그룹과 관련한 블록의 통합 작용을 트리거하는 제1 논리 그룹에서의 갱신을 쓴다면, 제1 논리 그룹의 갱신들은 제1 논리 그룹을 위하여 갱신(새로운 갱신 블록)으로 기록된다. 이러한 경우에 있어서, 브레이크아웃 통합 블록(블록 4)은 통합 작용 외부에서 소정의 갱신 데이터를 기록하기 위하여 사용되지 않으며, 브레이크아웃 통합 블록을 아직 완료되지 않은 상태로 남겨둔다.
블록 1 및 2 내의 데이터는 다른 블록(블록 3) 내로 충분히 포함되기 때문에, 재생을 위하여 다시 지워질 수 있다. 주소 테이블(GAT)은 논리 그룹을 위하여 최초 블록으로써 블록 3으로 갱신 된다. 갱신 블록에 대한 디렉토리 정보(ACL 내에 서, 도15 및 도18을 참조)는 블록 4로 역시 갱신되며, 상기 블록 4는 논리 그룹(예를 들면 LG4)에 대한 순차적인 갱신 블록으로 된다.
그 결과, 통합된 논리 그룹은 한개의 블록 내에 로칼화되지 않고, 결합 통합 블록(블록 3) 및 브레이크아웃 통합 블록(블록 4)로 분산된다. 본 구조의 중요한 특징은 그룹 내의 논리 유니트들이 한개 또는 그 이상의 블록에 대하여 통합을 분산시키는 비용만으로 본 단계를 실시하는 동안에 단지 한번 통합되는 것이다. 이와 같은 방법으로, 통합 작용은 정상 규정 시간 내에 완료될 수 있다.
도34B는 도34A에서 시작된 다수 단계 통합의 제3 및 최종 단계를 도시한다. 도33과 관련하여 기술된 바와 같이, 페이즈 III 통합은 동반하는 통합을 트리거 하지 않는 다음 호스트 쓰기 과정과 같은 시간대에 제1 페이즈 이후에 적절한 시간에 실행된다. 특히, 도34B는 시간 슬롯에 관한 것이며, 상기 시간 슬롯에서 도33의 호스트 쓰기 #4가 발생한다. 상기의 기간 동안에, 호스트 쓰기는 또 다른 추가적인 통합 작용을 트리거하지 않고 논리 그룹 LG2에 속하는 논리 유니트들을 갱신한다. 따라서, 시간 슬롯 내의 잉여 시간은 논리 그룹 LG4의 통합의 완료를 위하여 단계 III을 위하여 이용될 수 있다.
작용에 의하여 브레이크아웃 블록 내에 존재하지 않는 LG4의 모든 우수한 논리 유니트들을 브레이크아웃 블록 내로 통합한다. 예를 들면, 섹션 A 및 B는 블록 3으로부터 논리적으로 순차적인 순서로 브레이크아웃 블록(블록 4)로 카피된다. 블록 내의 논리 유니트의 랩-어라운드 구조 및 페이지 태그 사용(도13A 참조)에 있어서, 예문들이 블록 4에서, 섹션 A 및 B가 섹션 C 및 D 이후에 기록되는 것을 도시 한다 할지라도, 기록된 순서는 A, B, C 및 D의 순차적인 순서와 동일하다. 실시의 방법에 따라서, 카피되는 우수한 논리 유니트들의 현재 버전들은 그것이 이미 통합된 형태로 존재하기 때문에 블록 3으로부터 얻어지며, 그들이 삭제되지 않는다면, 블록 1로부터 수집될 것이다.
브레이크아웃 블록(블록 4) 상에서 최종 통합이 이루어지고 난 이후에, 그것은 노리 그룹을 위한 최초 블록으로서 지정되고, 해당하는 디렉토리 (예를 들면, GAT, 도17A를 참조)는 그에 따라 갱신될 것이다. 이와 유사하게, 오류 물리 블록(블록 3)은 나쁜 것으로 표시되며, 맵 아웃된다. 다른 블록들 및 블록 1 및 블록 2는 삭제되고, 재생된다. 그리고, LG2에 대한 갱신은 LG2와 관련한 갱신 불록 내에서 기록된다.
브레이크아웃 통합 블록이 갱신 블록으로 구현되는 실시예
도35A 및 도35B는 도28 및 도33의 예문들에 적용된 것과 같이 목수 단계 통합의 단계 I 및 단계 III 작용에 대한 제2의 경우를 각각 도시한다.
도35A는 브레이크아웃 통합 블록이 갱신 블록으로써 유지되어, 통합 블록이라기 보다는 호스트 쓰기를 수신하는 경유를 도시하고 있다. 이와 같은 구성은 논리 그룹 LG4를 갱신하고 공정 중에 동일한 논리 그룹 내에서의 통합을 트리거하는 호스트 쓰기에 잘 적용된다.
도34A에 도시된 바와 같이, 블록 3에 대한 블록 1 및 블록 2의 통합은 섹션 C를 처리하면서, 프로그램 오류를 검출할때까지 계속 진행된다. 통합은 브레이크아웃 통합 블록(블록 4)에 대하여 계속된다. 논리 그룹의 통합을 완료하기 위하여 단 계 III에서 대기하는 대신에, 우수한 논리 유니트(예를 들면, 섹션 C 및 D 내에서)들이 브레이크아웃 블록(블록 4) 내에서 통합되곤 이후에, 브레이크아웃 블록은 갱신 블록으로써 유지된다. 이와 같은 경우는 호스트 쓰기가 논리 그룹을 갱신하고, 그리고 동일한 논리 그룹의 통합을 틀히거하는 시나리오에 있어 잘 적용된다. 예를 들면, 이와 같은 구성에 따라 새로운 갱신 블록에 기록되는 대신에, 브레이크아웃 통합 블록(블록 4) 내에 기록되는 논리 그룹 LG4를 위하여 호스트 갱신을 기록하는 것을 가능하게 한다. 갱신 블록(이전의 브레이크아웃 통합 블록(블록 4))은 순차적이거나 또는 거기에 기록되는 호스트 데이터에 따라 혼돈 상태가 된다. 도시된 예문에서와 같이, 섹션 C에서의 논리 유니트들의 다음 새로운 버전이 블록 4 내의 선행 버전을 폐쇄 상태로 만들기 때문에 블록 4는 혼돈상태가 된다.
중간 단계 과정에 있어서, 블록 3은 LG4에 대하여 최초 블록으로 정의되며, 블록 4는 관련된 갱신 블록이 될것이다.
도35B는 제2의 경우에 대하여 도35A에서 시작된 다수 단계 통합의 제3 및 최종 단계를 도시한다. 도33과 관련하여 기술한 바와 같이, 단계 III의 통합은 동반하는 통합 작용을 트리거하지 않으면서 다음 호스트 쓰기 시간과 같이 제1 단계 이후에 소정의 타당한 시간에 실시된다. 상기의 과정 동안에, 호스트 쓰기는 통합 작용을 트리거하지 않고 논리 그룹에 속하는 논리 유니트들을 갱신한다. 시간 슬롯에서의 여분의 시간은 논리 그룹 LG4의 통합의 완료를 위하여 단계 III 작용을 위하여 이용될 수 있다.
논리 그룹 LG4는 블록 3 및 블록 4로부터 새로운 통합 블록(블록 5)로 수집 된다. 블록 3은 "나쁜" 표시가 부여되며, 블록 4는 재생되고, 새로운 통합 블록(블록 5)은 논리 그룹 LG4를 위하여 새로운 블록이 된다. 블록 1과 블록 2와 같은 다른 블록들은 역시 삭제되고, 재상된다.
단계화된 프로그램 오류 취급의 다른 실시예
도31A, 31B, 34A, 34B, 및35B에기술된 예문들은 동일한 논리 그룹에 속하는 논리 유니트들만 저장하는 물리 블록(메타블록)을 갖는 바람직한 블록 관리 시스템에 응용된다.
본 발명은 WO 03/027828 및 WO 00/49488에 공개된 것과 같은 불리 블록 정렬에 대하여 더 이상의 논리 그룹이 존재하지 않는 다른 블록 관리 시스템에 동일하게 적용 가능하다. 이러한 다른 시스템에 대한 단계화된 프로그램 오류 취급 방법의 예문들은 도36A, 36B 및36C에 도시되어 있다.
도36A는 호스트 쓰기가 갱신 블록의 폐쇄를 트리거할때 그리고 갱신 브록이 순차적일때 시나리오에 적용되는 것과 같이 단계화된 프로그램 에러 취급 방법을 도시한다. 이 경우에 있어서 폐쇄는 최초 블록 2로부터 순차 갱신 블록 3으로 나머지 유효 데이터(B 및 C)를 카피하여 수행된다. 데이터 부분 C 프로그래밍의 시작점에서 프로그램 오류가 발생하는 경우, 부분 C는 예약된 블록 4에 프로그램된다. 새로운 호스트 데이터는 새로운 갱신 블록 5(미도시)에 쓰여진다. 방법의 단계 II 및 III는 혼돈 블록 폐쇄의 경우과 동일하다.
도36B는 갱신 블록들의 갱신의 경우에 부분 블록 시스템으로 인가되는 것과 같이 단계화된 프로그램 에러 취급을 도시하는 도면이다. 이러한 경우에 있어서, 논리 그룹은 최초 블록 1 및 다른 갱신 블록들에 저장된다. 통합 작용은 최초 블록 1 및 다른 갱신 블록 2로부터 갱신 블록(소정의 규칙에 따라 선택되는, 도면에서는 블록 3)들 중 한개의 블록으로 데이터를 카피한다. 상기에 기술한 주요 시나리오로부터의 차이점은 블록 3은 이미 부분적으로 쓰기가 되었다는 것이다.
도36C는 메타블록으로 메핑되는 논리 그룹을 지원하지 않는 기억 블록 관리 시스템 내에서 쓰레기 수집 작용 또는 청소 작업을 취급하는 단계화된 프로그램 에러를 도시한다. 그와 같은 메모리 블록 관리(사이클 저장) 시스템은 WO 03/27828 A1에 공개되어 있다. 사이클 저장 시스템의 주요 특징은 블록들이 단일의 논리 그룹을 위하여 할당되지 않는다는 것이다. 메타블록 내에서 제어 데이터를 위하여 다수의 논리 그룹화에 대한 지원이 존재하지 않는다. 쓰레기 수집은 부분 폐쇄 블록으로부터 약간의 데이터를 가질 수 있는 위치 재설정 블록으로 아무 관계를 갖지 않는(랜덤 논리 블록 주소들) 유효 데이터 섹터를 갖는 것이다. 만약 위치 재설정 블록이 작용 과정 중에서 충분한 것을 갖는다면, 또 다른 한개도 개방될 것이다.
비순차 갱신 블록 인덱싱
혼돈 블록 인덱싱에 관한 조기 섹션에 있어서, 그리고 도16A 내지 16E와 관련하여, CBI 섹터는 혼돈 또는 비순차 갱신 블록 내에 랜덤하게 저장되는 논리 섹터의 위치의 자취를 추적하는 인덱스를 저장한다.
본 발명의 다른 양상에 따라서, 비순차 논리 유니트를 갖는 갱신 블록을 지지하는 블록 관리 시스템을 갖는 비휘발성 메모리에 있어서, RAM으로 버퍼링되는 갱신 블록 내의 논리 유니트의 인덱스는 비휘발성 메모리에 주기적으로 저장된다. 일실시예에 있어서, 인덱스는 인덱스들을 저장하기 위한 블록 내에 저장된다. 그리고 인덱스는 갱신 블록 내에 저장된다. 또 다른 실시예에 있어서, 상기 인덱스는 각각의 논리 유니트의 헤더 부분에 저장된다. 또 다른 양상에 있어서, 최종 인덱스 갱신 이후 그리고 그 다음 이전에 쓰여진 논리 유니트들은 각각의 논리 유니트의 헤더에 저장된 인덱싱 정보를 갖는다. 이와 같은 방법으로, 전원 중단 이후에, 최근에 쓰여진 논리 유니트의 위치는 초기화 과정 중에 스캐닝을 실시할 필요 없이 결정된다. 또 다른 발명의 양상에 있어서, 블록은 한개의 논리 서브그룹보다 더 관련되며, 부분적으로는 순차적으로 그리고 부분적으로는 비순차적으로 관리된다.
소정의 트리거링 이벤트 이후의 CBI 블록에서의 CBI 섹터 내에 저장된 인덱스 포인터
도16A 내지 16E에 도시된 구조에 따라, 혼돈 블록 내의 최근에 쓰여진 섹터들의 리스트는 제어기 RAM 내에 제공되어 있다. 가장 현재의 인덱싱 정보를 포함하는 CBI 섹터는 소정의 혼돈 블록과 관련된 논리 그룹 내에서 소정 횟수의 쓰기 이후에, 메모리(CBI 블록 620)를 플래시하기 위하여 쓰여진다. 이러한 방법으로, CBI 블록으로의 갱신의 수는 줄어든다.
논리 그룹용 CBI의 다음 갱신 전에, 논그 그룹의 최신 기록 섹터의 리스트는 컨트롤러 램에 홀드된다. 메모리 장치가 전원 차단과 같은 경우에 처하면 이와 같은 리스트는 상실되지만, 전원이 다시 공급된 이후에 초기화되는 과정에 갱신된 블록들을 스캐닝하여 다시 재건(rebuld)할 수 있다.
도37은 동일한 논리 그룹의 모든 N-섹터 쓰기 이후에 관련된 혼돈 인덱스 섹 터 블록으로의 CBI 섹터 쓰기 스케쥴의 예문을 도시한다. 예문은 동시 갱신을 수행하고 있는 두개의 논리 그룹 LG3 및 LG11을 도시한다. LG3의 논리 섹터들은 최초 블록 내에 순차적인 순서로 저장된다. 그룹 내의 논리 섹터들의 갱신들은 호스트에 의하여 표시되는 순서로 관련 갱신 블록 상에 기록된다. 예문들은 혼돈 갱신 순서를 도시한다. 동시에, 논리 그룹 LG11은 그 갱신 블록에서 이와 유사한 방법으로 갱신 된다. 모든 논리 섹터 쓰기 이후에, 갱신 블록에서의 그 위치는 제어기 RAM 내에 보관된다. 모든 트리거링 이벤트 이후에, 갱신 블록 내의 논리 섹터들의 현재 인덱스는 비휘발성 혼돈 인덱스 섹터 블록으로 혼돈 인덱스 섹터의 형태로 쓰여진다. 예를 들면, 소정의 트리거링 이벤트는 모든 N 쓰기 이후에 발생하며, N은 3이다.
주어진 보기들은 섹터 형태의 데이터 논리 유니트로 제공된다. 본 기술 분야의 당업자는 논리 유니트가 섹터 또는 섹터의 그룹을 포한하는 페이지와 같은 집합체이다. 또한, 순차 블록 내의 제1 페이지는 페이지 태그 랩 아라운드가 제위치에 있을 수 있기 때문에, 논리 페이지 0이 될 필요가 없으며, 페이지 태그 랩 어라운드는 적소에 있을 수 있다.
소정의 트리거링 이벤트 이후의 혼돈 갱신 블록에서의 CBI 섹터에 저장된 인덱스 포인터
다른 실시예에 있어서, 인덱스 포인터는 모든 N 쓰기 이후에 혼돈 갱신 블록 내의 CBI 섹터에 저장되어 있다. 이러한 구조는 인덱스가 CBI 섹터에 저장되는 점에서 이전에 설명한 실시예와 동일하다. 이전의 실시예와의 차이점은, CBI 섹터가 CBI 섹터 블록에 기록되다는 것이며, 갱신 블록 그 자체에는 기록되지 않는다.
혼돈 갱신 블록 그 자체에서의 혼돈 블록 인덱싱 정보를 유지하는 것이다. 도37A, 37B 및 37C는 3개의 다른 스테이지들에서 CBI 섹터들을 저장하는 갱신 블록의 상태를 도시한다.
도38A는 CBI 섹터가 소정 횟수의 쓰기 이후에 기록될때 포인터 까지의 갱신 블록을 도시한다. 상기 예문에 있어서, 호스트가 논리 섹터 0-3을 순차적으로 쓴 이후에, 다른 버전의 논리 섹터 1을 다시 쓸것을 명령하여, 데이터 쓰기의 연속 순서를 브레이킹하게 된다.
갱신 블록은 CBI 섹터에 포함된 혼돈 블록 인덱싱의 구현에 따라 혼돈 갱신 블록으로 변환된다. 이전에 기술한 바와 같이, CBI는 혼돈 블록의 모든 논리 섹터들에 대한 인덱스들을 포함하고 있다. 예를 들면 0번째 입력은 0번째 논리 섹터에 대한 갱신 블록 내에서의 옵셋을 포함한다. 이와 유사하게 n-번째 입력은 n-번재 논리 섹터에 대한 옵셋을 표시한다. CBI 섹터는 갱신 블록 내의 사용 가능한 다음 위치로 쓰여진다. 빈번한 플래시 접근을 방지하기 위하여, CBI 섹터는 모든 N 데이터 섹터 쓰기 이후에 쓰여진다. 이와 같은 보기에서, N은 4이다. 만약 이러한 시점에 전원이 단절되면, 최종 쓰기 섹터는 CBI 섹터가 되며, 블록은 혼돈 갱신 블록으로 정의된다.
도38B는 인덱스 섹터 이후에 거기에 추가로 기록되는 논리 섹터 1, 2 및 4를 갖는 도38A의 갱신 블록을 도시한다. 논리 섹터 1 및 2의 새로운 버전은 갱신 블록 내에 기록된 구형 버전을 앞선다. 이러한 시점에 있어서의 파워 사이클의 경우에 있어서, 최종 쓰기 섹터는 처음으로 발견될 필요가 있으며, 그리고 최종의 쓰기 인덱스 섹터 및 최근의 쓰기 데이터 섹터를 찾기 위하여 스켄될 필요가 있다.
도38C는 인덱스 섹터의 다음 기록을 트리거하기 의하여 스여진 또 다른 논리 섹터를 갖는 도38B의 갱신 블록을 도시한다. 또 다른 N(N=4) 섹터 쓰기 이후에 동일한 갱신 블록이 CBI 섹터의 또 다른 현재 버전을 기록한다.
본 구조의 장점은 별도의 CBI 블록이 필요 없는 장점이 있다. 동시에, 물리 플래시 섹터의 오버헤드 데이터 영역이 충분히 커서 혼돈 갱신 블록 내의 섹터들을 유효화하기 의하여 인덱스용으로 필요한 입력의 수를 수용할 수 있다. 혼돈 갱신 블록은 모든 정보를 구비하며, 주소번역을 위하여 외부 데이터가 필요 없다. 이에 따라, CBI 블록 압축에 따른 제어 갱신이 감소하며, 보다 짧은 케스케이드 제어 갱신이 가능한 보다 단순한 알고리즘을 성취한다.
혼돈 갱신 블록 내의 데이터 섹터 헤더에 저장된 최근 쓰여진 섹터들에 대한 정보
본 발명의 다른 양상에 따르면, 블록에 기록된 논리 유니트의 인덱스는 모든 N 쓰기 이후에 비휘발성 메모리에 저장되며, 중간 쓰기의 논리 유티트에 대한 현재의 정보는 각각의 쓰여진 논리 유니트의 오버헤드부에 저장된다. 이러한 방법으로, 전원이 재공급된 이후에, 최종 인덱스 갱신 이후에 쓰여진 논리 유니트에 대한 정보는 블록을 스캔할 필요없이 블록 내의 최종 쓰여진 논리 유니트의 오버헤드 부분으로부터 신속하게 얻을 수 있다.
도39A는 혼돈 갱신 블록 내의 각 데이터 섹터의 헤더 부분에 저장되는 중간 쓰기을 위한 중간 인덱스를 도시한다.
도39B는 각각의 섹터의 헤더에 존재하는 중간 쓰기를 위한 중간 인덱스를 저장하는 보기를 도시하는 도면이다. 보기에서, 4개의 섹터 이후에, LS0 내지 SL3이 쓰여지며, CBI 인덱스는 블록 내의 다음 섹터로써 쓰여 진다. 따라서, 논리 섹터 LS1', SL2' 및 SL4는 블록으로 쓰여진다. 각각의 시간에 있어서, 헤더는 최종 CBI 인덱스 이후에 쓰여진 논리 유니트용 중간 인덱스를 저장한다. LS2' 내의 헤더는 최종 CBI 인덱스 뿐만 아니라 LS1'의 그것의 옵셋 (예를 들면, 위치)를 제공하는 인댁스를 갖는다. 이와 유사하게, LS4 내의 헤더는 최종 CBI 인덱스 뿐만 아니라 LS1' 및 LS2'의 옵셋을 제공하는 인덱스를 갖는다.
최종적으로 쓰여진 데이터 섹터는 N-최종 쓰기 페이지(예를 들면, 최종 스여진 CBI 섹터)까지의 정보를 포함한다. 전원 재공급이 개시되면, 최종 CBI 인덱스는 CBI 인덱스 섹터 이전에 쓰여진 논리 유니트들을 위한 인덱싱 정보를 제공하며, 쓰여진 다음 논리 유니트용 인덱싱 정보는 최종 쓰여진 데이터 섹터의 헤더에 발견된다. 이와 같은 구조는 그들의 위치를 결정하기 위하여 그 다음에 쓰여진 섹터들에 대한 블록을 스캔할 필요성을 제거(초기화)하는 장점을 갖는다.
데이터 섹터의 헤더에서 중간 인덱스 정보를 저장하는 구조는 CBI 인덱스 섹터가 갱신 블록 내에 저장되었는지 또는 분리 CBI 섹터가 앞선 섹션에 저장되었는지에 대한 여부에 대하여 동등하게 적용 가능하다.
혼돈 갱신 블록 내의 데이터 섹터 헤더에 저장된 인텍스 포인터
또 다른 실시예에 있어서, 전체 CBI 인덱스는 혼돈 갱신 블록 내의 각각의 데이터 섹터의 서버 헤더 부분에 저장된다.
도40은 혼돈 갱신 블록 내의 각각의 데이터 섹터의 헤더 내에 저장된 혼돈 인덱스 필드 내의 정보를 도시한다.
섹터 헤더의 정보 용량은 제한적이다, 따라서 단일 섹터에 의하여 제공되는 인덱스의 범위는 계층 인덱싱 구조의 부분이다. 예를 들면, 메모리의 특정 평면 내의 섹터들은 인덱싱을 상기 평면 내에서 섹터들에게만 제공한다. 따라서, 논리 주소의 범위는 서브 범위들로 나누어져 간접적인 인덱싱 구조가 적용되도록 한다. 예를 들면, 만약 64개의 논리 주소를 갖는 섹터들이 한 개의 평면에 저장되면, 각각의 섹터는 섹터 옵셋 값들에 대하여 3개의 필드를 갖는다. 여기서 각각의 필드는 4개의 옵셋 값들을 저장할 수 있다. 제1 필드는 논리 옵셋 범위 0-15, 15-31, 32-47 및 48-63 내의 최종으로 쓰여진 섹터에 대한 물리적인 옵셋을 갖는다. 그리고 제2 필드는 그것과 관련된 범위 내에서 4개의 섹터의 4개의 서브 범위에 대한 물리적인 옵셋 값들을 정의한다. 3번째 필드는 그것이 관련된 서브 범위 내에 4개의 섹터에 대한 물리적인 옵셋 값들을 갖는다. 혼돈 갱신 블록 내의 논리 섹터의 물리적인 옵셋은 3섹터까지 간접적인 옵셋 값들을 읽어서 결정된다.
이와 같은 구조의 장점은 블록이 CBI 블록 또는 CBI 섹터에 대한 필요성을 제거하는 것이다. 그렇지만, 물리 플래시 섹터의 오버헤드 데이터 영역은 충분히 커서 혼돈 갱신 블록에서 섹터들을 제거하기 위한 인덱스를 위하여 필요한 입력수를 수용할 수 있다.
혼돈 갱신 블록을 위한 논리 그룹 내의 제한된 논리 범위
논리 그룹 내에서, 비선형적으로 쓰여질 수 있는 세터의 논리 범위가 감소한다. 범위 외부의 섹터들이 최초 블록 및 쓰레기 수집 작용 내에서 순차적으로 쓰여지는 기술의 주요 장점은 순차적으로 쓰여진 데이터가 보다 빨리 실시되는 것과 같이, 그리고 단지 한 개의 멀티-섹터 페이지(멀티-칩 케이스의 경우에 있어서 페이지의 병렬 읽기가 될 수 있는)가 목표 페이지(단, 소스 및 목표가 정렬되어 있는, 만약 그러하지 않다면, 또 다른 읽기가 필요한)에 대하여 모든 데이터를 취하기 위하여 읽기를 할 필요(가 있기 때문에 보다 짧은 시간 내에 이루어질 수 있다는 것이다. 순차 데이터는 온-칩 카피 특징을 이용하여 제어기로부터 또는 제어기로의 데이터 이전 없이 소스로부터 목표로 카피될 수 있다. 만약 소스 데이터가 혼돈 블록에서와 같이 흩어지면, 섹터 당 일 페이지 읽기가 목적지에 쓰여지는 모든 섹터를 수집하기 위하여 필요할 수 있다.
일실시예에 있어서, 논리 제어를 소정 개수의 섹터들로 제한하는 대신에, CBI의 개수를 줄여서 구현된다 (보다 큰 그룹/메터블록을 위하여 혼돈 범위를 제한하는 것이 이해가 된다). 예를 들면, 만약 메타블록/그룹이 2048섹터라면, 8CBI 섹터가 필요할지도 모른다. 그리고 각각은 256개의 섹터들로 구성되는 한 개의 서브 그룹의 연속 논리 범위를 커버링한다. 만약 CBI의 개수가 4개로 제한적이면, 혼돈 메타블록은 4개의 서브 그룹까지의 쓰기 섹터에 대하여 사용될 수 있다. 논리 그룹은 4개의 부분적으로 또는 전체적으로 서브 그룹을 가진다. 최소한 4개의 서브 그룹이 충분히 순차적으로 존재한다. 만약 혼돈 블록이 4개의 사용 가능한 CBI 섹터들을 가지면, 호스트는 CBI 섹터의 범위 밖에서 섹터들을 쓰기 한다. 그리고, 혼돈 논리 그룹은 통합되어, 폐쇄되어야 한다. 그러나 이것은 실제 적용에 있어서 대단히 발생하기에 희박하다. 호스트들이 2048 세터(논리 그룹)의 범위 내에 256 섹터(서브 그룹)의 4개의 혼돈 범위를 필요로 하지 않는다. 결과적으로, 정상적인 경우에, 쓰레기 수집 시간은 영향을 받지 않지만, 제한 규칙 거드는 호스트의 시간 아웃을 트리거할 수 있는 너무 긴 쓰레기 수집의 극한 경유를 형성한다.
부분 순차 혼돈 갱신 블록의 인덱싱
순차 갱신 블록이 혼돈 관리 모드로 변환되기 이전에 부분적으로 쓰여지면, 논리 그룹의 순차적으로 갱신된 섹션의 모든 부분 또는 일부 부분은 순차적으로 갱신되며, 그리고 혼돈 갱신 관리는 논리 그룹의 주소 순위의 서브세트로 인가된다.
제어 데이터 통합 및 관리
메모리 장치에 저장된 데이터는 전원 차단으로 인하여 와해 되며, 소정의 메모리 위치에 결함이 발생한다. 만약 메모리 블록 내에 결함이 발견되면, 상기 데이터는 다른 블록으로 위치 이동하며, 경함 블록은 버려진다. 만약 에러가 크지 않으면, 데이터와 함께 저장되는 에러 수정 코드(ECC)에 의하여 온-더-프라이 방법으로 수정된다. 그러나, ECC가 상기와 같은 문제 데이터를 수정하지 못하면 많은 시간이 필요하다. 예를 들면, 에러 비트의 개수가 ECC의 용량을 초과할 때이다. 이와 같은 상황은 메모리 블록 관리 시스템과 관련된 제어 데이터와 같은 임계 데이터에 대하여는 수용불가이다.
제어 데이터의 보기는 도20에 도시된 디렉토리 정보 및 메모리 블록 관리 시스템과 관련한 블록 할당 정보이다. 앞서 기술한 바와 같이, 제어 데이터는 고속의 RAM 및 저속의 비휘발성 메모리 블록 내에 유지된다. 빈번하게 변경되는 제어 데이터는 비휘발성 메타블록에 저장된 등가 정보를 갱신하기 위하여 주기적으로 제어 쓰기로 RAM에 유지된다. 이와 같은 방법으로, 제어 데이터는 비휘발적으로 저장되나, 빈번한 접근이 필요없는 저속의 플래시 메모리이다. GAT, CBI, MAP 및 MAPA와 같은 제어 데이터 구조의 계층은 플래시 메모리에 유지된다. 제어 쓰기 작용에 따라 RQAM 내의 제어 데이터 구조로부터의 정보가 플래시 메모리 내의 등가 제어 데이트를 갱신하게 된다.
임계 데이터 중복
본 발명의 다른 양상에 따르면, 제어 데이터와 같은 데이터 약간 또는 전부는 중복적으로 유지되면 높은 신뢰도를 확보할 수 있다. 중복은 다음과 같은 방법, 즉 메모리 셀의 동일한 세트의 멀티 비트를 연속으로 프로그래밍하기 위한 2-패스 프로그래밍 기술을 이용하는 멀티-상태 메모리 시스템을 위하여, 제2 패스에서의 소정의 프로그래밍 에러는 제1 패스에 의하여 형성된 데이터를 방해하지 못한다. 중복은 쓰기 포기의 검출, 검출 오류의 검출(카피는 우수한 ECC를 기자나, 데이터는 다르다)를 가능하게 하며, 신뢰도를 더욱 향상 시킨다. 데이터 중복의 여러 기술들이 사용된다.
일실시예에 있어서, 주어진 데이터의 두개의 카피가 앞선 프로그래밍 패스에서 프로그래밍된 이후에, 다음 프로그래밍 패스는 두 개의 카피 중에서 최소한 한개를 저장하는 메모리 셀을 프로그래밍하는 것을 피한다. 이와 같은 방법으로, 두개의 카피 중에서 최소한 한 개의 카피는 다음 프로그래밍 패스가 완료 이전에 취 소되는 경우에 영향을 받지 않으며, 앞선 패스의 데이터에 손상을 입히지 않는다.
또 다른 실시예에 있어서, 주어진 데이터의 두 개의 카피는 두 개의 다른 블록에 저장되며, 두개의 카피 중주에서 많아야 하나는 다음 프로그래밍 패스에서 프로그래밍되는 메모리 셀들을 구비한다.
또 다른 구체예에서, 주어진 데이터의 두개의 카피가 프로그래밍 패스에 저장된 후 추가의 프로그래밍은 두개의 카피를 저장하는 메모리 셀의 셋트에 대하여 수행되지 않는다. 이것은 메모리 셀을 위한 궁극적인 프로그래밍 패스에서 두개의 카피를 프로그래밍 함으로써 달성된다.
또 다른 구체예에서, 주어진 데이터의 두개의 카피는 바이너리 프로그래밍 모드에서 멀티-스테이트 메모리로 프로그램되어 프로그램된 메모리 셀 상에서의 추가 프로그래밍이 발생되지 않도록 한다.
또 다른 구체예에서, 같은 셋트의 메모리 셀의 멀티-비트 를 연속적으로 프로그래밍하기 위한 두개의 패스 프로그래밍 기술을 사용하는 멀티-스테이트 메모리 시스템에 있어서는 초기 프로그래밍에 패스에 의해 설정된 데이타가 후속하는 프로그래밍 패스에서의 에러에 대하여 영향을 받지 않도록 멀티플 메모리 스테이트를 코딩하기 위하여 무정지형(fault-tolerant)이 사용된다.
각 메모리 셀이 일 비트 이상의 데이타를 저장하는 멀티-스테이트 메모리에서 테이타 복제의 복잡함이 발생한다. 예를 들면, 4-스테이트 메모리가 이 비트로 나타낼 수 있다. 하나의 기존 기술은 그러한 메모리를 프로그램하기 위해 2-패스 프로그래밍을 사용하는 것이다. 제1 비트(하위 페이지 비트)는 제1 패스에 의해 프 로그램된다. 이어서, 같은 셀이 소정의 제2 비트(상위 페이지 비트)를 나타내기 위하여 제2 패스에서 프로그램된다. 제2 패스에서 제1 비트의 값을 변하지 않게 하기 위하여, 제1 비트의 메모리 스테이트 설명이 제2 비트의 값을 좌우하기 위하여 이루어진다. 따라서, 제2 비트의 프로그래밍 중에 에러가 전원 감소 또는 다른 원인으로 발생되어 부정확한 메모리 스테이트를 가져올 경우 제1 비트의 값도 파괴될 수 있다.
도 41A는 각 메모리 셀이 이 비트의 테이타를 저장할 때 4-스테이트 메모리 어레이의 한계전압 분포를 도시한 것이다. 4개의 분포는 네개의 메모리 스테이트, "U", "X", "Y" 및 "Z"의 분포를 도시한 것이다. 메모리 셀이 프로그램되기 전에 이것은 먼저 "U" 또는 "비 기록" 스테이트로 소거된다. 메모리 스테이트, "X", "Y" 및 "Z"는 메모리 셀이 증가하면서 프로그래밍 될 때 점진적으로 도달된다.
도 41B는 그레이 코드(Gray code)를사용하여 기존의, 2-패스프로그래밍 구성을 도시한 것이다. 네 개의 스테이트는 (Upper page bit, Lower page bit)와 같은 두개의 비트, 하위 페이지 비트 및 상위 페이지 비트로 나타낼 수 있다. 병렬로 프로그래밍되도록 하기 위한 셀의 페이지에 있어서는 두개의 실제적인 논리적 페이지: 논리적 하위 페이지 및 논리적 상위 페이지가 있다. 제1 프로그래밍 패스는 논리적 하위 페이지만을 프로그래밍한다. 적절한 코딩에 의해 후속하는, 같은 페이지 상에서의 제2 프로그래밍 패스가 논리적 하위 페이지를 리셋하지 않고 논리적 상위 페이지를 프로그램한다. 공통적으로 사용된 코드는 인접한 스테이트로 변할 때 1 비트만을 변화시키는 그레이 코드이다. 따라서, 이러한 코드는 단지 1 비트만 포함 되기 때문에 에러 보정에 대한 적게 요구되는 이점을 갖는다.
그레이 코드를 사용하는데 있어서의 일반적인 구성은 "1"이 "프로그램되지 않음"을 나타내도록 하는 것이다. 따라서, 소거된 메모리 스테이트 "U"는 (Upper page bit, Lower page bit)=(1,1)로 나타내진다.논리적 하위 페이지를 프로그래밍 하기위한 제1 패스에서 데이타 "0"을 저장하기 위한 어떤 셀은 (x, 1)에서 (x, 0)(여기에서, x는 상위 비트의 "돈 케어(don't care)" 값은 나타낸다)로의 논리적 스테이트 전환을 갖는다. 그러나, 상위 비트는 아직 프로그래밍 되지 않았기 때문에 "x"도 일관성 위해서 "1"로 라벨 될 수 있다. (1,0) 논리적 스테이트는 셀을 메모리 스테이트 "X"로 프로그래밍하는 것으로 나타낸다. 즉, 제2 프로그램 패스 전에 "0"의 하위 비트 값이 메모리 스테이트 "X"로 나타내진다.
제2 패스 프로그래밍은 논리적 상위 페이지의 비트들을 저장하도록 수행된다. "0"의 상위 페이지 비트 값을 요구하는 셀 들만이 프로그래밍 된다. 제1 패스 후에 이 페이지에 있는 셀은 논리적 스테이트 (1,1) 또는 (1,0)이다. 제2 패스에서 하위 페이지의 값을 보존하기 위하여 "0" 또는 "1"의 하위 비트 값이 구별되는 것이 필요하다. (1,0)에서 (0,0)으로 전환을 위하여 문제의 메모리 셀이 메모리 스테이트 "Y"로 프로그래밍 된다. (1,1)에서 (0,1)로 전환을 위하여 문제의 메모리 셀은 메모리 스테이트 "Z"로 프로그래밍 된다. 이 방법에서 판독중에 셀에 프로그래밍된 메모리 스테이트를 측정하므로서 하위 페이지 비트 및 상위 페이지 비트 모두가 디코딩될 수 있다.
그러나, 그레이 코드, 2-패스 프로그래밍 구성은 제2-패스 프로그래밍이 에 러성일 때 문제가 될 수 있다. 예를 들면, 하위 비트가 "1"에 있는 동안 "0"로 상위 페이지를 프로그래밍하는 것은 (1,1)에서 (0,1)로 전환을 야기한다. 이것은 메모리 셀이 점진적으로 "U"를 거쳐 "X" 및 "Y"에서 "Z"로 프로그램되는 것이 요구된다. 프로그래밍의 완료 전에 정전이 있는 경우에는 전환 메모리 스테이트 중 하나, 즉 "X"에서 종료될 수 있다. 메모리 셀이 판독될 때 "X"는 논리적 스테이트 (1,0)로서 디코딩된다. 이것은 (0,1)이어야 했기 때문에 상위 및 하위 비트 모두에서 부정확한 결과를 제공한다. 마찬가지로, "Y"에 도달했을 때 프로그래밍이 중단되면 (0,0)에 상응한다. 상위 비트는 이제 정확하지만 하위 비트는 아직도 오류이다.
따라서, 그것은 상위 페이지 프로그래밍에서의 문제점은 상기 하위 페이지에서의 데이터를 이미 변조될 수 있음이 이해될 수 있다. 특히, 제2 패스 프로그래밍이 중간 메모리 스테이트에 대해 패싱하는 것을 포함할 경우, 프로그램 중지(abort)가 메모리 스테이트에서 종료하는 프로그래밍을 가지게 되고, 그 결과 부정확한 하위 페이지에서 디코딩되게 된다.
도 42는 이중으로 각 섹터를 보존(save)함에 따라, 크리티컬 데이터를 안전하게 가드(guarding)하는 기법을 예시하고 있다. 예를 들면, 상기 섹터(A, B, C 및 D)는 이중 카피(duplicate copies)로 보존된다. 만일, 하나의 섹터 카피에서의 데이터의 파괴(corruption)가 있다면, 다른 데이터가 대신에 판독될 수 있다.
도 43은 이중 섹터가 멀티-스테이트 메모리에서 통상적으로 보존되는 논-로버스트니스(non-robustness)를 예시하고 있다. 상술한 바와 같이, 실예의 4-스테이트 메모리에서, 상기 멀티-스테이트 페이지는 2개의 패스에서 개별 프로그래밍되 는, 논리 하위 페이지와 논리 상위 페이지를 실제로 포함한다. 예증된 바와 같이, 상기 페이지는 4개의 섹터 와이드(wide)이다. 따라서, 섹터(A)와 그의 복제(duplicate)는 상기 논리 하위 페이지에서 동시 프로그래밍되고, 섹터 B와 그의 복제도 마찬가지이다.
다음에, 상기 논리 상위 페이지에서의 프로그래밍의 이어지는 제2 패스에서, 섹터(C, C) 는 동시에 프로그래밍되며, 섹터(D, D)도 마찬가지이다. 만일, 섹터(C, C)의 프로그램 중도에 프로그램 중지가 야기되면, 상기 하위 페이지에서의 섹터(A, A)는 파괴될 것이다. 만일 상기 하위 페이지 섹터들이 첫째로 판독되고 상기 상위 페이지 프로그래밍 이전에 버퍼링되지 않을 시에는, 이들은 파괴되면 회복 불가능하게 될 수 있다. 따라서, 섹터(A, A)와 같이 동시에 크리티컬 데이터의 2개의 카피를 보존하게 되면, 이들 양자가 그의 상위 페이지에서의 섹터(C, C)의 계속적인 문제에 의해 파괴되는 것을 방지할 수 없게 된다.
도 44A는 멀티-스테이트 메모리에 크리티컬 데이터의 시차(staggered) 복제 카피들을 보존하는 하나의 실시예를 예시하고 있다. 기본적으로, 상기 하위 페이지는 도 43, 즉, 섹터(A, A)와 섹터(B, B)에서와 동일한 방식으로 보존된다. 그러나, 상기 상위 페이지 프로그래밍에서, 상기 섹터(C, D)는 (C, D, C, D)로서의 그들의 복제물을 사용하여 인터리브(interleaved)된다. 만일 부분 페이지 프로그래밍이 지원되면, 상기 섹터(C)의 2개 카피는 섹터(D)의 2개 카피를 위해 동시에 그리고 유사하게 프로그램된다. 프로그램 오브 세이(say), 상기 2개 섹터(C)가 중단되면, 섹터(A)의 하나의 카피와 섹터(B)의 하나의 카피에 의해서만 하위 페이지가 파괴된 다. 상기 다른 카피는 변화없이 유지한다. 따라서, 만일, 제1 패스에서 저장된 크리티컬 데이터의 2개 카피가 있다면, 이들은 동시에 후속하는 제2 패스 프로그래밍에 종속되지 않는다.
도 44B는 멀티-스테이트 메모리의 논리 상위 페이지에 대해서만 크리티컬 데이터의 이중 카피를 보존하는 또 다른 실시예를 예시하고 있다. 이 경우, 상기 하위 페이지에서의 데이터는 사용되지 않는다. 섹터(A, A)와 섹터(B, B)와 같은, 상기 크리티컬 데이터와 그의 복제는 단지 상기 논리 상위 페이지에 보존된다. 이러한 방식에서, 프로그램 중단이 있으면, 상기 크리티컬 데이터가 다른 논리 상위 페이지에서 재기록되고, 반면에, 상기 하위 페이지 데이터에 대한 임의의 파괴는 중요하지 않다. 이러한 솔루션은 기본적으로 각각의 멀티-스테이트 페이지의 저장 용량의 절반을 사용한다.
도 44C는 멀티-스테이트 메모리의 바이너리 모드에서의 크리티컬 데이터의 이중 카피를 보존하는 다른 실시예를 예시하고 있다. 이 경우, 각각의 메모리 셀은 그의 쓰레드홀드 영역이 2개의 구역으로 단지 분할되는 바이너리 모드에서 프로그래밍된다. 따라서, 프로그램 중단이 발생하면, 단지 하나의 패스 프로그래밍이 있게 되고, 상기 프로그래밍은 다른 위치에서 재-개시된다. 또한, 이러한 솔루션은 각각의 멀티-스테이트 페이지의 저장 용량의 절반을 사용한다. 바이너리 모드에서 멀티-스테이트 메모리를 작동시키는 것은 미국 특허 등록공고 제 6,456,528호에 개시되어 있으며, 본문에 참조로서 편입되어 있다.
도 45는 2개의 다른 메타블록에 동시에 크리티컬 데이터의 이중 카피를 보존 하는 또 다른 실시예를 예시하고 있다. 만일, 상기 블록들중 하나가 비활용적으로 된다면, 상기 데이터는 다른 카피로부터 판독될 수 있다. 예를 들어, 상기 크리티컬 데이터가 섹터(A, B, C, D 및 E, F, G, H, 및 J, K, L)에 포함된다. 상기 2개 카피는 2개의 다른 블록(Block 0 및 Block1)에 동시에 기록될 것이다. 만일, 하나의 카피가 논리 하위 페이지에 기록된다면, 다른 카피는 논리 상위 페이지에 기록될 것이다. 이러한 방식에서, 항시 논리 상위 페이지에 프로그램된 하나의 카피가 존재할 것이다. 만일 프로그램 중단이 발발하면, 다른 논리 상위 페이지에 재프로그래밍될 수 있다. 동시에, 만일 상기 하위 페이지가 파괴되면, 다른 블록에서 다른 상위 페이지 카피가 이루어질 것이다.
도 46B는 내-장애성 코드(fault-tolerant code)의 사용에 의해 동시에 크리티컬 데이터의 이중 카피를 보존하는 다른 실시예를 예시하고 있다. 도 46A는 4-스테이트 메모리 어레이의 쓰레드홀드 전압 분배를 예시하고, 도 48B를 위해 참조로서 도시되어 있다. 상기 내-장애성 코드는 필수적으로 임의의 중간 스테이트들을 통해 교통(transit)하도록 임의의 상위 페이지 프로그래밍을 회피한다. 따라서, 상기 제1 패스 하위 페이지 프로그래밍은 상기 소거 메모리 스테이트("U"to"Y")를 프로그래밍함에 따라 표시된 바와 같이 (0,1)로 전송하는 논리 스테이트(1, 1)를 구비한다. 상기 상위 페이지 비트("0"으로)의 제2 패스 프로그래밍에서, 만일 상기 하위 페이지 비트가 "1"에서 라면, 상기 논리 스테이트(1,1)는, “Y"에서 ”Z"로의 상기 소거 메모리 스테이트를 프로그래밍함에 따라 표현되는 바와 같이, (0, 1)로 전송한다. 상기 상위 페이지 프로그래밍이 단지 다음의 이웃하는 메모리 스테이트 로의 프로그래밍을 포함하기 때문에, 프로그램 중단은 상기 하위 페이지 비트를 변경시키지 않게 된다.
시리얼 쓰기(Serial Write)
임계 데이터의 이중 사본들은 전술한 바와 같이 함께 기록되는 것이 바람직하다. 동시에 양 사본들의 오류를 일으키는 것을 피하는 다른 방법은 사본들을 순차적으로 기록하는 것이다. 이 방법은 느리지만, 사본들 스스로 그것들의 프로그래밍이 성공적인지 또는 제어기가 양 사본들을 언제 점검하는지를 나타낸다.
도 47은 데이터의 두 사본들의 가능한 상태와 데이터의 유효성을 나타내는 표이다.
첫 번째 및 두 번째 사본들 모두 ECC 에러가 없다면, 데이터의 프로그래밍은 완전히 성공적인 것으로 믿어진다. 유효한 데이터가 어떤 사본으로부터도 얻어질 수 있다.
첫 번째 사본은 ECC 에러가 없지만 두 번째 사본은 에러가 있다면, 프로그래밍이 두 번째 사본 프로그램 중에 중단되었음을(interrupted) 의미할 수 있다. 첫 번째 사본은 유효한 데이터를 포함한다. 두 번째 사본은 에러가 정정 가능할지라도 신뢰할 수 없다.
첫 번째 사본은 ECC 에러가 없고 두 번째 사본은 비어있다면(삭제되었다면), 프로그래밍이 첫 번째 사본 프로그래밍의 종료 후 두 번째 사본의 개시 전에 중단되었음을 의미할 수 있다. 첫 번째 사본은 유효한 데이터를 포함한다.
첫 번째 사본은 ECC 에러를 가지고 두 번째는 비어있다면(삭제되었으면), 프 로그래밍이 첫 번째 사본 프로그래밍 중에 중단되었음을 의미할 수 있다. 첫 번째 사본은 에러가 정정 가능할지라도 무효한 데이터를 포함할 수 있다.
복제물들에서 유지되는 데이터의 읽기를 위해, 이중 사본들의 존재를 이용하는 다음 기술이 선호된다. 읽기 및 양 사본들 비교하기. 이 경우에, 도 47에 표시된 바와 같은 양 사본들의 상태는 잘못 탐지된 에러가 없음을 보증하는데 사용될 수 있다.
속도와 간소화를 고려하여, 제어기가 하나의 사본만을 읽는 다른 실시예에서, 사본 읽기는 두 사본들 사이에서 번갈아 하는 것이 바람직하다. 예컨대, 제어기가 제어 데이터를 읽을 때, 그것은 사본 1을 읽고, 다음 제어기 읽기(어떤 하나의 제어기 읽기)는 사본 2로부터인 후 사본 1로부터이어야 하고, 그 다음에 사본 1을 다시 읽는다. 이러한 식으로, 두 사본들은 완전히 질서있게 읽히고 검토될 것이다(ECC 검토됨). 이것은 데이터 보유를 저하시킴으로써 유발되는 에러를 때맞춰 탐지하지 못하는 위험을 줄인다. 예컨대, 사본 1만이 정규로 읽힌다면, 사본 2는 에러가 ECC에 의해 더 이상 이용되지(salvaged) 않는 수준으로 점차적으로 저하될 수 있고, 두 번째 사본은 더 이상 사용되지 못할 수 있다.
우선 데이터 재배치(Pre-emptive Data Relocation)
도 20과 관련하여 설명된 바와 같이, 블록 관리 시스템은 플레시 메모리에서 제어 데이터 세트를 그것의 작동 동안 유지시킨다. 이 제어 데이터 세트는 호스트 데이터와 유사하게 메타블록들(metablocks)에 저장된다. 그와 같이, 제어 데이터 자체는 블록 관리될 것이고, 갱신되어 가비지 수집 작동을 받게 될 것이다.
하부 계층에 있는 것들이 상위에 있는 것보다 자주 갱신된다는 것과 함께, 제어 데이터의 계층이 존재한다는 것이 또한 설명되었다. 예컨대, 모든 제어 블록이 쓰기를 위한 N 제어 섹터들을 가진다고 한다면, 제어 갱신과 제어 블록 재배치인 다음 시퀀스가 정규로 일어난다. 도 20을 다시 참조하면, 모든 N CBI 갱신이 CBI 블록을 채우고 CBI 재배치(재쓰기) 및 MAP 갱신을 유발한다. 캐이아틱 블록(Chaotic block)이 폐쇄되면 GAT 갱신을 또한 유발한다. 모든 GAT 갱신은 MAP 업데이트를 유발한다. 모든 N GAT 갱신은 블록을 채이고 GAT 블록 재배치를 유발한다. 또한, MAP 블록이 가득 차게 되면 그것은 MAP 블록 재배치 및 MAPA 블록(만일 존재한다면, 그렇지 않으면 BOOT 블록이 MAP으로 곧바로 지시한다)을 갱신을 유발한다. 또한, MAPA 블록이 가득 차게 되면, 그것은 MAPA 블록 재배치, BOOT 블록 갱신 및 MAP 갱신을 유발한다. 또한, BOOT 블록이 가득 차게 되면, 그것은 다른 BOOT 블록으로 액티브 BOOT 블록 재배치를 유발한다.
계층이 MAPA, MAP 및 GAT를 수반하는 상부에서 BOOT 제어 데이터에 의해 형성되기 때문에, 모든 N3 GAT 갱신에서 "종속 제어 갱신"이 있을 것이고, GAT, MAP, MAPA 및 BOOT 블록 모두 재배치될 것이다. GAT 갱신이 호스트 쓰기의 결과로서 케이아틱 또는 시퀀셜 갱신 블록 폐쇄에 의해 유발되는 경우, 가비지 수집 작동(즉, 재배치 또는 재쓰기)이 또한 있을 것이다. 케이아틱 갱신 블록 가비지 수집인 경우에, CBI가 갱신될 것이고, CBI 블록 재배치를 또한 유발할 수 있다. 따라서 이러한 극단 상황에서, 다수의 메타블록들이 동시에 가비지 수집되어야할 필요가 있 다.
계층의 각각의 제어 데이터 블록은 채워지고 재배치되는 점에서 자신의 주기성(periodicity)을 가진다. 각각이 정규로 진행된다면, 다수의 블록들의 상(phases)이 정렬되고(line up) 동시에 모든 블록들을 포함하는 대규모 재배치 또는 가비지 수집을 유발하는 시간이 있을 것이다. 많은 제어 블록들의 재배치는 시간이 오래 걸리고, 일부 호스트가 그러한 대규모 제어 작동에 의해 유발되는 긴 지체를 견디지 않으므로 피해야 한다.
본 발명의 또 다른 양태에 따르면, 블록 관리 시스템을 갖춘 비휘발성 메모리에서, "제어 가비지 수집(control garbage collection)" 또는 메모리 블록의 우선적 재배치는 다수의 갱신 블록들이 모두 동시에 재비치를 필요로 하는 상황을 회피하도록 구현된다. 예를 들면, 이러한 상황은 블록 관리 시스템의 작동을 제어하기 위해 사용되는 제어 데이터를 갱신할 때 발생할 수 있다. 제어 데이터의 계층은 갱신 빈도(frequencies)들의 정도를 변화시킴에 따라 존재할 수 있으므로, 가비지 수집 또는 재배치를 필요로 하는 그 관련 갱신 블록들을 서로 다른 비율로 야기한다. 하나 이상의 제어 데이터 유형의 가비지 수집 작동들이 부합하는 일정한 횟수가 있을 것이다. 비정상적인 상황에서는, 모든 제어 데이터 유형들에 대한 갱신 블록들의 재배치 단계(phase)가 정렬되어서, 재배치를 필요로 하는 모든 갱신 블록들을 동시에 야기할 수 있다.
이러한 불필요한 상황은, 현재의 메모리 작동이 자발적인 가비지 수집 작동을 수용할 때마다, 갱신 블록의 우선적 재배치가 발생하여 미리 블록이 완전히 채 워지게 되는 본원 발명에 의해 회피된다. 특히, 계층에서 가장 높이 있는 데이터 유형이 가장 느린 비율을 갖는 블록에 우선권이 주어진다. 이러한 방식에서, 가장 느린 비율의 블록들이 재배치되면, 그것들은 상대적으로 긴 시간 동안 또 다른 가비지 수집을 필요로 하지 않는다. 또한, 계층에서 더 높이 있는 더 느린 비율의 블록들은 트리거하기 위한 많은 재배치의 캐스케이드를 갖지 않는다. 본 발명의 방법은, 의심스러운 다양한 블록들의 정렬 단계들을 회피하기 위해서 일종의 디더링(dithering)을 전반적인 혼합물에 도입하는 것으로서 여겨질 수 있다. 따라서, 기회가 발생할 때마다, 완전히 채워진 것으로부터 약간의 마진을 갖는 느린-충전 블록이 우선적으로 재배치된다.
제어 데이터의 계층을 갖는 시스템에서, 계층에서 더 낮게 있는 것은 캐스케이딩 효과로 인하여 더 높이 있는 것보다 더 빠르게 변화하므로, 계층에서 더 높이 있는 제어 데이터의 블록에 우선권이 주어진다. 자발적인 우선적 재배치를 실행하기 위한 기회의 일 예는, 호스트 쓰기(host write)가 자체 재배치를 트리거하지 않을 때 그 잠재 기간(latency period)의 나머지가 우선적 재배치 작동을 위해 활용될 수 있다는 것이다. 일반적으로, 전적으로 미리 재배치되어야 하는 블록의 마진은, 블록이 완전히 채워지기 전의, 소정 개수의 쓰이지 않은(written) 메모리 유닛들이다. 미리 완전히 채워지지만, 과도하게 미숙하여 무익한 자원을 야기하는 블록의 재배치를 촉진하는데 마진이 충분한지에 대해 고려한다. 바람직한 실시예에서, 소정 개수의 쓰이지 않은 메모리 유닛들은 1개 내지 6개 메모리 유닛이다.
도 48은 제어 데이터를 저장하는 메모리 블록의 우선적 재배치의 순서도를 도시한다.
단계 1202: 함께 소거 가능한 메모리 유닛으로 분할되는 블록들에 비휘발성 메모리를 구성하는 단계.
단계 1204: 서로 다른 유형의 데이터를 유지하는 단계.
단계 1206: 서로 다른 유형의 데이터에 순위(ranking)를 부여하는 단계.
단계 1208: 각 블록이 반드시 동일 유형의 데이터를 저장하도록 복수의 블록 간에 서로 다른 유형의 데이터의 갱신을 저장하는 단계.
단계 1210: 소정 개수보다 적은 비어있는 메모리 유닛을 구비하며 복수의 블록 간에 가장 높은 순위의 데이터 유형을 갖는 블록에 응답하여, 블록의 현재 데이터 갱신을 또 다른 블록에 재배치하는 단계. 중단되지 않는 한 단계 1208로 진행.
도 20에 도시된 제어 데이터에 대한 우선적 재배치를 구현하기 위한 예시적인 알고리즘은 다음과 같다:
If((사용자 데이터로 인하여 가비지 수집이 없는 경우) OR (MAP이 6 또는 보다 소수의 쓰이지 않은 섹터를 갖는 경우) OR (GAT가 3 또는 보다 소수의 쓰이지 않은 섹터를 갖는 경우)
Then
If(BOOT이 1의 쓰이지 않은 섹터를 갖는 경우)
Then BOOT을 재배치(즉, 블록으로 재배치)
Else
If(MAPA가 1의 쓰이지 않은 섹터를 갖는 경우)
Then MAPA를 재배치 및 MAP를 갱신
Else
If(MAP가 1의 쓰이지 않은 섹터를 갖는 경우)
Then MAP를 재배치
Else
If(최근에 갱신된 것, 또는 가장 큰 것, GAT가 1의 쓰이지 않은 섹터를 갖는 경우)
Then GAT를 재배치
Else
If(CBI가 1의 쓰이지 않은 섹터를 갖는 경우)
Then CBI 재배치
Else
Else
Exit
따라서, 우선적 재배치는 통상적으로 어떠한 사용자 데이터 가비지 수집이 발생하지 않는 때에 수행된다. 최악의 경우, 매 호스트 쓰기가 사용자 데이터 가비지 수집을 트리거 시키지만, 1개 블록의 자발적인 재배치의 충분한 시간이 있는 때 에, 우선적 재배치가 동시에 하나의 제어 블록에 대해 수행될 수 있다.
사용자 데이터 가비지 수집 작동과 제어 갱신이 물리적 에러들과 부합할 때, 초기에 미리, 즉, 블록이 여전히 2개 또는 그 이상의 쓰이지 않은 메모리 유닛(예를 들면, 섹터)을 가지고 있는 시점에, 우선적 재배치 또는 제어된 가비지 수집을 행하여 더 큰 안전한 마진을 갖는 것이 더 좋다.
비록 본 발명의 다양한 양태를 특정 실시예에 관하여 설명하였지만, 본 발명은 첨부된 청구범위의 전체 범주내에서 보호가 부여된다는 것을 이해하여야 한다.

Claims (37)

  1. 블록들로 조직된 비휘발성 메모리에 있어서, 각각의 블록은 함께 삭제 가능한 메모리 유니트들로 파티션되어 있으며, 상기 각각의 메모리 유니트는 데이터의 논리 유니트를 저장하는데 있어서, 데이터 저장 및 업데이트 방법은,
    데이터를 복수개의 논리 그룹들로 조직하는 단계와, 상기 논리 그룹은 논리 유니트의 그룹이며,
    제1 순서에 따라 논리 그룹의 논리 유니트의 제1 버전을 제1 블록에 저장하는 단계와;
    상기 제1 순서와 다른 제2 순서에 따라 논리 유니트들의 최신 버젼들을 상기 논리 유니트의 다음 버전을 포함하는 제2 블록에 저장하는 단계와;
    소정의 트리거링 이벤트에 대응하여, 최근의 트리거링 이벤트 이후에 제2 블록 내에 저장된 논리 유니트의 디렉토리를 제3 블록에 저장하는 단계를 포함하는 것을 특징으로 하는 데이터 저장 및 업데이트 방법.
  2. 청구항 1에 있어서, 각각의 논리 유니트에 대한 헤더 포션을 제공하는 단계와;
    최근의 소정 트리거링 이벤트 이후에, 제2 블록에 저장된 중간 논리 유니트를 위하여, 상기 각각의 중간 논리 유니트의 헤더 포션에 중간 논리 유니트의 디렉토리를 저장하는 단계를 더 포함하는 것을 특징으로 하는 데이터 저장 및 업데이트 방법.
  3. 청구항 1에 있어서, 상기 비휘발성 메모리는 플로팅 게이트 메모리 셀들을 구비하는 것을 특징으로 하는 방법.
  4. 청구항 1에 있어서, 상기 비휘발성 메모리는 플레쉬 EEPROM인 것을 특징으로 하는 방법.
  5. 청구항 1에 있어서, 상기 비휘발성 메모리는 NROM인 것을 특징으로 하는 방법.
  6. 청구항 1에 있어서, 상기 비휘발성 메모리는 메모리 카드 내에 구비되어 있는 것을 특징으로 하는 방법.
  7. 청구항 1 내지 6 중 어느 한 항에 있어서, 상기 비휘발성 메모리는 각각 1 비트의 데이터를 저장하는 메모리 셀들을 구비하는 것을 특징으로 하는 방법.
  8. 청구항 1 내지 6 중 어느 한 항에 있어서, 상기 비휘발성 메모리는 각각 1 비트의 데이터보다 더 많은 데이터를 저장하는 메모리 셀들을 구비하는 것을 특징으로 하는 방법.
  9. 블록들로 조직된 비휘발성 메모리에 있어서, 각각의 블록은 함께 삭제 가능한 메모리 유니트들로 파티션되어 있으며, 상기 각각의 메모리 유니트는 데이터의 논리 유니트를 저장하는데 있어서, 데이터 저장 및 업데이트 방법은,
    데이터를 복수개의 논리 그룹들로 조직하는 단계와, 상기 논리 그룹은 논리 유니트의 그룹이며,
    논리 유니트들에 패키지된 호스트 데이터를 수신하는 단계와;
    제1 순서에 따라 논리 유니트들의 제1 버전을 제1 블록 내에 저장하는 단계와;
    상기 제1 순서와 다른 제2 순서에 따라 논리 유니트들의 최신 버젼들을 상기 논리 유니트의 다음 버전을 포함하는 제2 블록에 저장하는 단계와;
    최근의 트리거링 이벤트 이후에 제2 블록 내에 저장된 논리 유니트들의 디렉토리를 제2 블록의 사용 가능한 위치에 소정의 트리거링 이벤트에 대응하여 저장하는 단계를 포함하는 것을 특징으로 하는 데이터 저장 및 업데이트 방법.
  10. 청구항 9에 있어서, 각각의 논리 유니트에 대한 헤더 포션을 제공하는 단계와;
    최근의 소정 트리거링 이벤트 이후에, 제2 블록에 저장된 중간 논리 유니트를 위하여, 상기 각각의 중간 논리 유니트의 헤더 포션에 중간 논리 유니트의 디렉토리를 저장하는 단계를 더 포함하는 것을 특징으로 하는 데이터 저장 및 업데이트 방법.
  11. 청구항 9에 있어서, 상기 비휘발성 메모리는 플로팅 게이트 메모리 셀들을 구비하는 것을 특징으로 하는 방법.
  12. 청구항 9에 있어서, 상기 비휘발성 메모리는 플레쉬 EEPROM인 것을 특징으로 하는 방법.
  13. 청구항 9에 있어서, 상기 비휘발성 메모리는 NROM인 것을 특징으로 하는 방법.
  14. 청구항 9에 있어서, 상기 비휘발성 메모리는 메모리 카드 내에 구비되어 있는 것을 특징으로 하는 방법.
  15. 청구항 9 내지 14 중 어느 한 항에 있어서, 상기 비휘발성 메모리는 각각 1 비트의 데이터를 저장하는 메모리 셀들을 구비하는 것을 특징으로 하는 방법.
  16. 청구항 9 내지 14 중 어느 한 항에 있어서, 상기 비휘발성 메모리는 각각 1 비트의 데이터보다 더 많은 데이터를 저장하는 메모리 셀들을 구비하는 것을 특징으로 하는 방법.
  17. 블록들로 조직된 비휘발성 메모리에 있어서, 각각의 블록은 함께 삭제 가능한 메모리 유니트들로 파티션되어 있으며, 상기 각각의 메모리 유니트는 데이터의 논리 유니트를 저장하는데 있어서, 데이터 저장 및 업데이트 방법은,
    제1 블록 내에 논리 유니트들을 저장하는 단계와;
    상기 제1 유니트 내에 저장된 논리 유니트들의 디렉토리를 소정의 트리거링 이벤트에 대응하여 비휘발성 메모리의 소정 포션에 저장하는 단계와;
    각각의 논리 유니트에 대한 헤더 포션을 제공하는 단계와;
    최근의 소정 트리거링 이벤트 이후에, 제2 블록에 저장된 중간 논리 유니트를 위하여, 상기 각각의 중간 논리 유니트의 헤더 포션에 중간 논리 유니트의 디렉토리를 저장하는 단계를 포함하는 것을 특징으로 하는 데이터 저장 및 업데이트 방법.
  18. 청구항 17에 있어서, 상기 비휘발성 메모리는 플로팅 게이트 메모리 셀들을 구비하는 것을 특징으로 하는 방법.
  19. 청구항 17에 있어서, 상기 비휘발성 메모리는 플레쉬 EEPROM인 것을 특징으로 하는 방법.
  20. 청구항 17에 있어서, 상기 비휘발성 메모리는 NROM인 것을 특징으로 하는 방 법.
  21. 청구항 17에 있어서, 상기 비휘발성 메모리는 메모리 카드 내에 구비되어 있는 것을 특징으로 하는 방법.
  22. 청구항 17 내지 21 중 어느 한 항에 있어서, 상기 비휘발성 메모리는 각각 1 비트의 데이터를 저장하는 메모리 셀들을 구비하는 것을 특징으로 하는 방법.
  23. 청구항 17 내지 21 중 어느 한 항에 있어서, 상기 비휘발성 메모리는 각각 1 비트의 데이터보다 더 많은 데이터를 저장하는 메모리 셀들을 구비하는 것을 특징으로 하는 방법.
  24. 블록들로 조직된 비휘발성 메모리에 있어서, 각각의 블록은 함께 삭제 가능한 메모리 유니트들로 파티션되어 있으며, 상기 각각의 메모리 유니트는 데이터의 논리 유니트를 저장하는데 있어서, 데이터 저장 및 업데이트 방법은,
    데이터를 복수개의 논리 그룹들로 조직하는 단계와, 상기 논리 그룹은 논리 유니트의 그룹이며,
    논리 유니트들에 패키지된 호스트 데이터를 수신하는 단계와;
    제1 순서에 따라 논리 유니트들의 제1 버전을 제1 블록에 저장하는 단계와;
    상기 제1 순서와 다른 제2 순서에 따라 논리 유니트들의 최근 버전들을 상기 논리 유니트들의 다음 버전을 포함하는 제2 블록에 저장하는 단계와;
    각각의 논리 유니트를 위하여 헤더 포션을 제공하는 단계와;
    상기 제2 블록 내에 저장된 각각의 논리 유니트들의 헤더 포션 내에 디렉토리 데이터를 저장하는 단계를 포함하며, 논리 유니트들을 위한 상기 디렉토리 데이터는 제2 블록 내에 저장되는 것을 특징으로 하는 데이터 저장 및 업데이트 방법.
  25. 청구항 24에 있어서, 상기 비휘발성 메모리는 플로팅 게이트 메모리 셀인것을 특징으로 하는 방법.
  26. 청구항 24에 있어서, 상기 비휘발성 메모리는 플레쉬 EEPROM인 것을 특징으로 하는 방법.
  27. 청구항 24에 있어서, 상기 비휘발성 메모리는 NROM인 것을 특징으로 하는 방법.
  28. 청구항 24에 있어서, 상기 비휘발성 메모리는 메모리 카드 내에 제공되어 있는 것을 특징으로 하는 방법.
  29. 청구항 24 내지 28 중 어느 한 항에 있어서, 상기 비휘발성 메모리는 각각 1 비트의 데이터를 저장하는 메모리 셀들을 구비하는 것을 특징으로 하는 방법.
  30. 청구항 24 내지 28 중 어느 한 항에 있어서, 상기 비휘발성 메모리는 각각 1 비트의 데이터 이상을 저장하는 메모리 셀들을 구비하는 것을 특징으로 하는 방법.
  31. 블록들로 조직된 비휘발성 메모리에 있어서, 각각의 블록은 함께 삭제 가능한 메모리 유니트들로 파티션되어 있으며, 상기 각각의 메모리 유니트는 데이터의 논리 유니트를 저장하는데 있어서, 데이터 저장 및 업데이트 방법은,
    데이터를 복수개의 논리 그룹들로 조직하는 단계와, 상기 논리 그룹은 논리 유니트의 그룹이며,
    제1 순서에 따라 논리 그룹의 논리 유니트의 제1 버전을 제1 블록에 저장하는 단계와;
    제2 순서에 따라 논리 유니트들의 최근 버전들을 상기 논리 유니트들의 다음 버전을 포함하는 제2 블록에 저장하는 단계와, 상기 논리 유니트들은 상기 제1 순서와 다른 순서로 제1 순서 및 제2 서브 그룹과 순서적으로 유사한 제1 서브 그룹을 구비하며;
    상기 비휘발성 메모리의 소정 포션 내에 논리 유니트들의 제2 서브 그룹을 위한 디렉토리를 유지하는 단계를 포함하는 것을 특징으로 하는 데이터 저장 및 업데이트 방법.
  32. 청구항 31에 있어서, 상기 비휘발성 메모리는 플로팅 게이트 메모리 셀들을 구비하는 것을 특징으로 하는 방법.
  33. 청구항 31에 있어서, 상기 비휘발성 메모리는 플레쉬 EEPROM을 구비하는 것을 특징으로 하는 방법.
  34. 청구항 31에 있어서, 상기 비휘발성 메모리는 NROM인 것을 특징으로하는 방법.
  35. 청구항 31에 있어서, 상기 비휘발성 메모리는 메모리 카드 내에 제공되어 있는 것을 특징으로 하는 방법.
  36. 청구항 31 내지 35 중 어느 한 항에 있어서, 상기 비휘발성 메모리는 각각 1 비트의 데이터를 저장하는 메모리 셀들을 구비하는 것을 특징으로 하는 방법.
  37. 청구항 31 내지 35 중 어느 한 항에 있어서, 상기 비휘발성 메모리는 각각 1 비트의 데이터 이상을 저장하는 메모리 셀들을 구비하는 것을 특징으로 하는 방법.
KR1020067013317A 2003-12-30 2004-12-21 비순차 갱신 블록 관리를 구비한 비휘발성 메모리 및 방법 KR20070007264A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US10/750,155 2003-12-30
US10/750,155 US7139864B2 (en) 2003-12-30 2003-12-30 Non-volatile memory and method with block management system
US10/917,867 2004-08-13
US10/917,867 US20050141312A1 (en) 2003-12-30 2004-08-13 Non-volatile memory and method with non-sequential update block management

Publications (1)

Publication Number Publication Date
KR20070007264A true KR20070007264A (ko) 2007-01-15

Family

ID=34753194

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020067013317A KR20070007264A (ko) 2003-12-30 2004-12-21 비순차 갱신 블록 관리를 구비한 비휘발성 메모리 및 방법

Country Status (4)

Country Link
EP (1) EP1704484A2 (ko)
KR (1) KR20070007264A (ko)
TW (1) TWI288328B (ko)
WO (1) WO2005066793A2 (ko)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100907477B1 (ko) * 2007-07-16 2009-07-10 한양대학교 산학협력단 플래시 메모리에 저장된 데이터의 인덱스 정보 관리 장치및 방법
US8639891B2 (en) 2009-04-24 2014-01-28 Samsung Electronics Co., Ltd. Method of operating data storage device and device thereof
US8656084B2 (en) 2009-02-27 2014-02-18 Samsung Electronics Co., Ltd. User device including flash memory storing index and index accessing method thereof
KR20190058714A (ko) * 2016-11-08 2019-05-29 마이크론 테크놀로지, 인크 메모리 관리

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7139864B2 (en) 2003-12-30 2006-11-21 Sandisk Corporation Non-volatile memory and method with block management system
WO2005106673A1 (ja) * 2004-04-28 2005-11-10 Matsushita Electric Industrial Co., Ltd. 不揮発性記憶装置及びデータ書込み方法
US9104315B2 (en) 2005-02-04 2015-08-11 Sandisk Technologies Inc. Systems and methods for a mass data storage system having a file-based interface to a host and a non-file-based interface to secondary storage
EP1920335B1 (en) * 2005-08-03 2011-05-11 SanDisk Corporation Reclaiming data storage capacity in flash memory systems
DE602006019263D1 (de) * 2005-08-03 2011-02-10 Sandisk Corp Nichtflüchtiger speicher mit blockverwaltung
US7409489B2 (en) * 2005-08-03 2008-08-05 Sandisk Corporation Scheduling of reclaim operations in non-volatile memory
KR101378031B1 (ko) * 2005-08-03 2014-03-27 샌디스크 테크놀로지스, 인코포레이티드 데이터 파일을 직접적으로 저장하는 메모리 블록의 관리
US7793068B2 (en) 2005-12-21 2010-09-07 Sandisk Corporation Dual mode access for non-volatile storage devices
US7747837B2 (en) 2005-12-21 2010-06-29 Sandisk Corporation Method and system for accessing non-volatile storage devices
US7769978B2 (en) 2005-12-21 2010-08-03 Sandisk Corporation Method and system for accessing non-volatile storage devices
US8046522B2 (en) 2006-12-26 2011-10-25 SanDisk Technologies, Inc. Use of a direct data file system with a continuous logical address space interface and control of file address storage in logical blocks
US7739444B2 (en) 2006-12-26 2010-06-15 Sandisk Corporation System using a direct data file system with a continuous logical address space interface
US8166267B2 (en) 2006-12-26 2012-04-24 Sandisk Technologies Inc. Managing a LBA interface in a direct data file memory system
US7917686B2 (en) 2006-12-26 2011-03-29 Sandisk Corporation Host system with direct data file interface configurability
KR101464199B1 (ko) 2006-12-26 2014-11-21 샌디스크 테크놀로지스, 인코포레이티드 연속 논리 주소 공간 인터페이스를 구비한 다이렉트 데이터 파일 시스템을 사용하는 방법
US8209461B2 (en) 2006-12-26 2012-06-26 Sandisk Technologies Inc. Configuration of host LBA interface with flash memory
US8429352B2 (en) 2007-06-08 2013-04-23 Sandisk Technologies Inc. Method and system for memory block flushing
KR100922389B1 (ko) 2007-07-04 2009-10-19 삼성전자주식회사 플래시 메모리를 위한 색인 스킴
JP2009211192A (ja) * 2008-02-29 2009-09-17 Toshiba Corp メモリシステム
TWI424438B (zh) * 2009-12-30 2014-01-21 Asolid Technology Co Ltd 非揮發性記憶體控制裝置及其多階重新排序方法
TWI417889B (zh) * 2009-12-30 2013-12-01 Silicon Motion Inc 快閃記憶體之寫入逾時控制方法及其記憶裝置
TWI604307B (zh) 2014-10-31 2017-11-01 慧榮科技股份有限公司 資料儲存裝置以及快閃記憶體控制方法
US9817593B1 (en) 2016-07-11 2017-11-14 Sandisk Technologies Llc Block management in non-volatile memory system with non-blocking control sync system
CN108959280B (zh) * 2017-05-17 2021-08-06 中国移动通信有限公司研究院 一种存储虚拟资源关联信息的方法及装置

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3604466B2 (ja) * 1995-09-13 2004-12-22 株式会社ルネサステクノロジ フラッシュディスクカード
JP3072722B2 (ja) * 1997-06-20 2000-08-07 ソニー株式会社 フラッシュメモリを用いるデータ管理装置及びデータ管理方法並びにフラッシュメモリを用いる記憶媒体
JP4085478B2 (ja) * 1998-07-28 2008-05-14 ソニー株式会社 記憶媒体及び電子機器システム
JP3967121B2 (ja) * 2001-12-11 2007-08-29 株式会社ルネサステクノロジ ファイルシステム、ファイルシステム制御方法およびファイルシステムを制御するためのプログラム
US6771536B2 (en) * 2002-02-27 2004-08-03 Sandisk Corporation Operating techniques for reducing program and read disturbs of a non-volatile memory

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100907477B1 (ko) * 2007-07-16 2009-07-10 한양대학교 산학협력단 플래시 메모리에 저장된 데이터의 인덱스 정보 관리 장치및 방법
US8656084B2 (en) 2009-02-27 2014-02-18 Samsung Electronics Co., Ltd. User device including flash memory storing index and index accessing method thereof
US8639891B2 (en) 2009-04-24 2014-01-28 Samsung Electronics Co., Ltd. Method of operating data storage device and device thereof
KR20190058714A (ko) * 2016-11-08 2019-05-29 마이크론 테크놀로지, 인크 메모리 관리

Also Published As

Publication number Publication date
TW200601043A (en) 2006-01-01
WO2005066793A3 (en) 2006-06-15
WO2005066793A2 (en) 2005-07-21
TWI288328B (en) 2007-10-11
EP1704484A2 (en) 2006-09-27

Similar Documents

Publication Publication Date Title
JP5617079B2 (ja) 不揮発性メモリおよび制御データ管理を伴う方法
KR20070007264A (ko) 비순차 갱신 블록 관리를 구비한 비휘발성 메모리 및 방법
EP1758027B1 (en) Non-volatile memory and method with control data management
US20080091871A1 (en) Non-volatile memory with worst-case control data management
US20080091901A1 (en) Method for non-volatile memory with worst-case control data management
KR20060134011A (ko) 메모리 플레인 배열을 갖춘 비휘발성 메모리 및 방법
WO2008045839A1 (en) Non-volatile memory with worst-case control data management and methods therefor
EP1704479B1 (en) Non-volatile memory and method with phased program failure handling
JP2007519996A6 (ja) 不揮発性メモリおよびフェーズ化されたプログラム障害処理を伴う方法

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