KR20090088858A - Non-volatile memory with worst-case control data management and methods therefor - Google Patents

Non-volatile memory with worst-case control data management and methods therefor Download PDF

Info

Publication number
KR20090088858A
KR20090088858A KR1020097007576A KR20097007576A KR20090088858A KR 20090088858 A KR20090088858 A KR 20090088858A KR 1020097007576 A KR1020097007576 A KR 1020097007576A KR 20097007576 A KR20097007576 A KR 20097007576A KR 20090088858 A KR20090088858 A KR 20090088858A
Authority
KR
South Korea
Prior art keywords
block
data
memory
update
blocks
Prior art date
Application number
KR1020097007576A
Other languages
Korean (ko)
Inventor
앨런 데이비드 베네트
닐 데이비드 허치슨
세르게이 아나토리비츠 고로베츠
Original Assignee
쌘디스크 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US11/549,035 external-priority patent/US20080091901A1/en
Priority claimed from US11/549,040 external-priority patent/US20080091871A1/en
Application filed by 쌘디스크 코포레이션 filed Critical 쌘디스크 코포레이션
Publication of KR20090088858A publication Critical patent/KR20090088858A/en

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
    • 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
    • G11C16/102External programming circuits, e.g. EPROM programmers; In-circuit programming or reprogramming; EPROM emulators
    • G11C16/105Circuits or methods for updating contents of nonvolatile memory, especially with 'security' features to ensure reliable replacement, i.e. preventing that old data is lost before new data is reliably written
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/34Determination of programming status, e.g. threshold voltage, overprogramming or underprogramming, retention
    • G11C16/349Arrangements for evaluating degradation, retention or wearout, e.g. by counting erase cycles
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/34Determination of programming status, e.g. threshold voltage, overprogramming or underprogramming, retention
    • G11C16/349Arrangements for evaluating degradation, retention or wearout, e.g. by counting erase cycles
    • G11C16/3495Circuits or methods to detect or delay wearout of nonvolatile EPROM or EEPROM memory devices, e.g. by counting numbers of erase or reprogram cycles, by using multiple memory areas serially or cyclically
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C8/00Arrangements for selecting an address in a digital store
    • G11C8/12Group selection circuits, e.g. for memory block selection, chip selection, array selection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0292User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • 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
    • 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/7205Cleaning, compaction, garbage collection, erase control
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

In a nonvolatile memory with a block management system, data written to blocks include host write data and also system control data for managing the blocks. When a block is full or no longer accepting data, it is closed after valid versions of the data on it are relocated to another block in a rewrite operation. An improved pre-emptive rewrite scheme prevents a worst-case situation where multiple rewrites to occur at once when they happened to be full at the same time. Particularly, the scheduling of the pre-emptive rewrites for control data is based on a number of considerations including the time required for each control block rewrite and the time available for control block rewrites based on the configuration of the update blocks for storing host data, the time required in the foreground host operation and the host write latency. ® KIPO & WIPO 2009

Description

최악의 경우 제어 데이터 관리를 사용하는 비휘발성 메모리 및 관리 방법{NON-VOLATILE MEMORY WITH WORST-CASE CONTROL DATA MANAGEMENT AND METHODS THEREFOR}NON-VOLATILE MEMORY WITH WORST-CASE CONTROL DATA MANAGEMENT AND METHODS THEREFOR}

본 발명은, 일반적으로 비휘발성 반도체 메모리에 관한 것이고, 구체적으로는 메모리 동작을 제어하기 위하여 사용된 시스템 데이터를 관리하기 위한 개선된 시스템을 가진 메모리 블록 관리 시스템을 구비한 비휘발성 반도체 메모리에 관한 것이다.FIELD OF THE INVENTION The present invention relates generally to nonvolatile semiconductor memory, and more particularly to nonvolatile semiconductor memory having a memory block management system having an improved system for managing system data used to control memory operation. .

소형 팩터 카드로서 패키지된 특히 EEPROM 및 플래시 EEPROM 형태의 전하를 비휘발성 저장할 수 있는 고형 메모리는 최근에 다양한 모바일 및 핸드헬드 장치들, 특히 정보 기구들 및 고객 전자 제품들에서 선택 저장장치가 되었다. 고형 메모리인 RAM(랜덤 액세스 메모리)과 달리, 플래시 메모리는 비휘발성이고, 전력이 턴오프된 후에도 데이터가 저장되어 유지된다. 또한, ROM(판독 전용 메모리)과 달리, 플래시 메모리는 디스크 저장 장치와 유사하게 재기입할 수 있다. 보다 높은 비용에도 불구하고, 플래시 메모리는 대량 저장 애플리케이션들에 점차 사용된다. 하드 드라이브들 및 플로피 디스크들 같은 회전 자기 매체를 바탕으로 하는 종래의 대량 저장 장치는 모바일 및 핸드헬드 환경에 적당하지 않다. 이것은 디스크 드라 이브들이 부피가 크고, 기계적 결함이 발생하기 쉽고 높은 레이턴시 및 높은 전력 요구조건들을 가지기 때문이다. 이들 바람직하지 않은 속성들은 대부분의 모바일 및 휴대용 애플리케이션들에서 비실용적인 디스크 바탕 저장 장치를 형성한다. 다른 한편, 내장되고 탈착 가능한 카드 형태의 플래시 메모리는 작은 크기, 낮은 전력 소비, 고속 및 높은 신뢰성 특징들로 인해 모바일 및 핸드헬드 환경에서 이상적으로 적당하다.Solid memory capable of non-volatile storage of charge, particularly in the form of small-factor cards, in the form of EEPROM and Flash EEPROM, has recently become the selective storage device in a variety of mobile and handheld devices, in particular information appliances and customer electronics. Unlike RAM (random access memory), which is a solid memory, flash memory is nonvolatile and data is stored and maintained even after power is turned off. Also, unlike ROM (Read Only Memory), flash memory can be rewritten similarly to disk storage devices. Despite the higher cost, flash memory is increasingly used for mass storage applications. Conventional mass storage devices based on rotating magnetic media such as hard drives and floppy disks are not suitable for mobile and handheld environments. This is because disk drives are bulky, prone to mechanical defects and have high latency and high power requirements. These undesirable attributes form disk based storage that is impractical in most mobile and portable applications. On the other hand, embedded and removable card-like flash memory is ideally suited for mobile and handheld environments due to its small size, low power consumption, high speed and high reliability features.

플래시 EEPROM은 소거되고 메모리 셀들로 기입되거나 "프로그램된" 새로운 데이터를 가질 수 있는 비휘발성 메모리인 EEPROM(전기적으로 소거 가능하고 프로그램 가능한 판독 전용 메모리)과 유사하다. 양쪽은 소스 및 드레인 영역들 사이에서 반도체 기판의 채널 영역 상에 배치된 전계 효과 트랜지스터 구조의 플로팅(접속되지 않은) 전도성 게이트를 사용한다. 제어 게이트는 플로팅 게이트 상에 제공된다. 트랜지스터의 임계 전압 특성은 플로팅 게이트에 유지된 전하량에 의해 제어된다. 즉, 플로팅 게이트상 주어진 전하 레벨 동안, 소스 및 드레인 영역들 사이에 도전을 허용하도록 트랜지스터가 턴 "온"되기 전에 제어 게이트에 인가되어야 하는 대응하는 전압(임계값)이 존재한다. 특히, 플래시 EEPROM 같은 플래시 메모리는 메모리 셀들의 전체 블록들이 동시에 소거되게 한다.Flash EEPROM is similar to EEPROM (electrically erasable and programmable read-only memory), which is a nonvolatile memory that can be erased and have new data written or "programmed" into memory cells. Both use a floating (unconnected) conductive gate of a field effect transistor structure disposed on the channel region of the semiconductor substrate between the source and drain regions. The control gate is provided on the floating gate. The threshold voltage characteristic of the transistor is controlled by the amount of charge retained in the floating gate. That is, for a given charge level on the floating gate, there is a corresponding voltage (threshold) that must be applied to the control gate before the transistor is turned "on" to allow conduction between the source and drain regions. In particular, flash memory, such as flash EEPROM, allows entire blocks of memory cells to be erased simultaneously.

플로팅 게이트는 전하들의 범위를 홀딩하고 그러므로 임계 전압 윈도우내에서 임의의 임계 전압 레벨로 프로그램될 수 있다. 임계 전압 윈도우의 크기는 디바이스의 최소 및 최대 임계 레벨들에 의해 한정되고, 차례로 플로팅 게이트에 프로그램될 수 있는 전하들의 범위에 대응한다. 임계 윈도우는 일반적으로 메모리 디바 이스의 특성들, 동작 조건들 및 히스토리에 따른다. 윈도우내의 각각의 별개의 분해할 수 있는 임계 전압 레벨 범위는 본래 셀의 명확한 메모리 상태를 설계하기 위하여 사용될 수 있다. 임계 전압이 두 개의 별개의 영역들로 분할될 때, 각각의 메모리 셀은 데이터의 하나의 비트를 저장할 수 있을 것이다. 유사하게, 임계 전압 윈도우가 두 개 이상의 별개의 영역들로 분할될 때, 각각의 메모리 셀은 데이터의 하나 이상의 비트를 저장할 것이다.The floating gate holds a range of charges and can therefore be programmed to any threshold voltage level within the threshold voltage window. The magnitude of the threshold voltage window is defined by the minimum and maximum threshold levels of the device, which in turn correspond to the range of charges that can be programmed into the floating gate. The threshold window generally depends on the characteristics, operating conditions and history of the memory device. Each separate resolvable threshold voltage level range in the window can be used to design a specific memory state of the original cell. When the threshold voltage is divided into two separate regions, each memory cell may store one bit of data. Similarly, when the threshold voltage window is divided into two or more separate regions, each memory cell will store one or more bits of data.

메모리 셀로서 사용하는 트랜지스터는 통상적으로 두 개의 메카니즘들 중 하나에 의해 "프로그램된" 상태로 프로그램된다. "핫 전자 유입"시, 드레인에 인가된 고전압은 기판 채널 영역을 가로질러 전자들을 가속시킨다. 동시에 제어 게이트에 인가된 고전압은 얇은 게이트 유전체를 통하여 플로팅 게이트상으로 핫 전자들을 당긴다. "터널링 주입"시, 고전압은 기판에 관련하여 제어 게이트에 인가된다. 이런 방식에서, 전자들은 기판으로부터 중간 플로팅 게이트로 당겨진다. 용어 "프로그램"이 메모리 상태를 변경하기 위하여 메모리 셀의 처음에 소거되는 전하 저장 단위로 전자들을 주입함으로써 메모리에 기입 동작을 기술하기 위하여 예전부터 사용되었고, 지금은 "기입" 또는 "기록" 같은 보다 공통의 용어들과 상호교환할 수 있게 사용되었다.Transistors used as memory cells are typically programmed to a "programmed" state by one of two mechanisms. Upon "hot electron inflow", the high voltage applied to the drain accelerates the electrons across the substrate channel region. At the same time, the high voltage applied to the control gate pulls hot electrons onto the floating gate through the thin gate dielectric. In "tunneling injection", a high voltage is applied to the control gate in relation to the substrate. In this way, electrons are pulled from the substrate to the intermediate floating gate. The term "program" has long been used to describe a write operation in a memory by injecting electrons into a charge storage unit that is initially erased of a memory cell to change the memory state, and is now more like "write" or "write". It is used interchangeably with common terms.

메모리 디바이스는 다수의 메카니즘들에 의해 소거될 수 있다. EEPROM에 대해, 메모리 셀은 얇은 산화물을 통하여 기판 채널 영역으로 터널링하기 위하여(즉, FN(Fowler-Nordheim) 터널링) 플로팅 게이트에 전자들을 유도하도록 제어 게이트에 관련하여 고전압을 기판에 인가함으로써 전기적으로 소거 가능하다. 통상적으로, EEPROM은 바이트 단위로 소거 가능하다. 플래시 EEPROM에 대해, 메모리는 한 번에 하나 이상의 최소 소거 가능한 블록들 또는 한번에 모두를 전기적으로 소거할 수 있고, 여기서 최소 소거 가능 블록은 하나 이상의 섹터들로 구성될 수 있고 각각의 섹터는 512 바이트들 또는 그 이상의 데이터를 저장할 수 있다.The memory device may be erased by a number of mechanisms. For EEPROM, the memory cell is electrically erased by applying a high voltage to the substrate in conjunction with the control gate to induce electrons to the floating gate to tunnel through the thin oxide (ie, Fowler-Nordheim tunneling) to the substrate channel region. It is possible. Typically, the EEPROM is erasable in bytes. For a flash EEPROM, the memory can electrically erase one or more minimum erasable blocks at a time or all at once, where the minimum erasable block may consist of one or more sectors, each sector having 512 bytes. Or you can store more data.

메모리 디바이스는 카드상에 장착될 수 있는 하나 이상의 메모리 칩들을 포함한다. 각각의 메모리 칩은 통상적으로 디코더들 및 소거, 기입 및 판독 회로들 같은 주변 회로들에 의해 지원되는 메모리 셀들의 어레이를 포함한다. 보다 정교한 메모리 디바이스들은 또한 지능적이고 보다 높은 레벨의 메모리 동작들 및 인터페이싱을 수행하는 제어기에 부속되어 있다.The memory device includes one or more memory chips that can be mounted on a card. Each memory chip typically includes an array of memory cells supported by decoders and peripheral circuits such as erase, write and read circuits. More sophisticated memory devices are also attached to a controller that performs intelligent and higher levels of memory operations and interfacing.

오늘날 사용되는 많은 상업적으로 성공한 비휘발성 고형 메모리 디바이스들이 있다. 이들 메모리 디바이스들은 플래시 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 등에 의한 2000년 11월 "NROM: A Novel Localized Trapping, 2-Bit Nonvolatile Memory Cell", IEEE Electron Device Letters, vol.21, no. 11, 543-545쪽에 기술되었다. ONO 유전체 층들은 소스 및 드레인 확산부들 사이의 채널을 가로질러 연장한다. 하나의 데이터 비트에 대한 전하는 드레인에 인접한 유전체 층에 배치되고, 다른 데이터 비트에 대한 전하는 소스에 인접한 유전체 층에 배치된다. 예를 들어, 미국특허 5,768,192 및 6,011,725는 두 개의 실리콘 디옥사이드 층들 사이에 샌드위치된 트랩핑 유전체를 가진 비휘발성 메모리 셀을 개시한다. 다중 상태 데이트 저장은 유전체 내에서 공간적으로 분리된 전하 저장 영역들의 이진 상태들을 독립적으로 판독함으로써 실행된다.There are many commercially successful nonvolatile solid state memory devices in use today. These memory devices may be flash EEPROM or other types of nonvolatile memory cells. Examples and methods of manufacturing flash memories and systems are provided in US Pat. Nos. 5,070,032, 5,095,344, 5,315,541, 5,343,063 and 5,661,053, 5,313,421 and 6,222,762. In particular, flash memory devices having NAND string structures are described in US Pat. Nos. 5,570,315, 5,903,495, 6,046,935. Also, nonvolatile memory devices are fabricated from memory cells having a dielectric layer for storing charge. Instead of the conductive floating gate elements described previously, a dielectric layer is used. Such memory devices using dielectric storage elements are described by Eitan et al., Nov. 2000, "NROM: A Novel Localized Trapping, 2-Bit Nonvolatile Memory Cell", IEEE Electron Device Letters, vol. 21, no. 11, pp. 543-545. The ONO dielectric layers extend across the channel between the source and drain diffusions. The charge for one data bit is placed in the dielectric layer adjacent to the drain and the charge for the other data bit is placed in the dielectric layer adjacent to the source. For example, US Pat. Nos. 5,768,192 and 6,011,725 disclose nonvolatile memory cells having a trapping dielectric sandwiched between two silicon dioxide layers. Multi-state data storage is performed by independently reading the binary states of spatially separated charge storage regions within the dielectric.

판독 및 프로그램 성능을 개선하기 위하여, 어레이내 다중 전하 저장 엘리먼트들 또는 메모리 트랜지스터들은 병렬로 판독 또는 프로그램된다. 따라서, 메모리 엘리먼트들의 "페이지"는 함께 판독 또는 프로그램된다. 기존 메모리 아키텍쳐들에서, 행은 통상적으로 몇몇 인터리빙된 페이지들을 포함하거나, 하나의 페이지를 구성할 수 있다. 페이지의 모든 메모리 엘리먼트들은 함께 판독 또는 프로그램될 것이다.In order to improve read and program performance, multiple charge storage elements or memory transistors in an array are read or programmed in parallel. Thus, a "page" of memory elements is read or programmed together. In existing memory architectures, a row typically contains several interleaved pages or may constitute one page. All memory elements of the page will be read or programmed together.

플래시 메모리 시스템들에서, 소거 동작은 판독 및 프로그램 동작들보다 긴 크기 정도를 취할 수 있다. 따라서, 상당한 크기의 소거 블록을 가지는 것이 바람직하다. 이런 방식에서, 소거 시간은 큰 집단의 메모리 셀들에 걸쳐 상환된다.In flash memory systems, an erase operation may take a longer magnitude than read and program operations. Therefore, it is desirable to have an erase block of considerable size. In this way, the erase time is repaid over a large group of memory cells.

플래시 메모리의 성질은 데이터가 소거된 메모리 위치에 기입되는 것을 나타낸다. 만약 호스트로부터 특정 논리 어드레스의 데이터가 업데이트되면, 하나의 방식은 동일한 물리적 메모리 위치에 업데이트 데이터를 재기입한다. 즉, 논리 대 물리적 어드레스 맵핑은 변화되지 않는다. 그러나, 이것은 물리적 위치가 우선 소거 되고 그 다음 업데이트 데이터가 재기입되는 것을 전체 소거 블록이 포함하는 것을 의미한다. 이런 업데이트 방법은, 특히 만약 업데이트될 데이터만이 소거 블록의 작은 부분을 차지하면, 전체 소거 블록이 소거 및 재기입되는 것이 요구되기 때문에 불충분하다. 이것은 메모리 블록의 소거 재순환 주파수를 보다 높이고, 이것은 이런 타입의 메모리 디바이스의 제한된 내구력 측면에서 바람직하지 않다.The nature of flash memory indicates that data is written to an erased memory location. If data at a particular logical address is updated from the host, one approach rewrites the update data in the same physical memory location. That is, the logical to physical address mapping does not change. However, this means that the entire erase block includes that the physical location is first erased and then the update data is rewritten. This update method is insufficient, especially if only the data to be updated occupies a small portion of the erase block, since the entire erase block is required to be erased and rewritten. This results in a higher erase recycling frequency of the memory block, which is undesirable in view of the limited durability of this type of memory device.

플래시 메모리 시스템을 관리하는 것의 다른 문제점은 시스템 제어 및 디렉토리 데이터를 수행하는 것이다. 데이터는 다양한 메모리 동작들의 진행 동안 형성 및 액세스된다. 따라서, 효과적인 취급 및 준비된 액세스는 직접 성능에 충격을 줄 것이다. 플래시 메모리가 저장장치를 의미하고 비휘발성이기 때문에 플래시 메모리에 이런 타입의 데이터를 유지하는 것은 바람직하다. 그러나, 제어기 및 플래시 메모리 사이의 중간 파일 관리 시스템으로 인해, 데이터는 직접 액세스될 수 없다. 또한, 시스템 제어 및 디렉토리 데이터는 활성화되고 분해될 수 있고, 큰 크기의 블록 소거를 사용하는 시스템에 저장할 수 없게 한다. 통상적으로, 이런 타입의 데이터는 제어기 RAM에 설정되고, 이에 따라 제어기에 의해 직접 액세스할 수 있다. 메모리 디바이스에 전력이 인가된 후, 초기화 프로세스는 플래시 메모리가 스캔되게 하여 제어기 RAM에 배치될 필요한 시스템 제어 및 디렉토리 정보가 컴파일되게 한다. 이런 프로세스는 시간이 걸리고 제어기 RAM 용량을 요구하고, 따라서 더욱더 플래시 메모리 용량을 증가시킨다.Another problem with managing flash memory systems is performing system control and directory data. Data is formed and accessed during the progress of various memory operations. Thus, effective handling and prepared access will directly impact performance. It is desirable to keep this type of data in flash memory because flash memory means storage and is nonvolatile. However, due to the intermediate file management system between the controller and the flash memory, the data cannot be accessed directly. In addition, system control and directory data can be activated and resolved, making it impossible to store in systems that use large block erases. Typically, this type of data is set in the controller RAM and thus directly accessible by the controller. After power is applied to the memory device, the initialization process causes the flash memory to be scanned to compile the necessary system control and directory information to be placed in the controller RAM. This process takes time and requires controller RAM capacity, thus further increasing flash memory capacity.

US 6,567,307은 스크래치 채드로서 작용하는 다중 소거 블록들에 업데이트 데이터를 기록하고 궁극적으로 다양한 블록들 사이에서 유효 섹터들을 결합하고 논 리적으로 추후 순서에 섹터들을 재배열한 후 섹터들을 재기입하는 것을 포함하는 큰 소거 블록 사이의 섹터 업데이트들을 다루는 방법을 개시한다. 이런 방식에서, 하나의 블록은 소거될 필요가 없고 매 가장 작은 업데이트시 재기입된다.US Pat. No. 6,567,307 includes writing update data to multiple erase blocks acting as a scratch chad and ultimately combining valid sectors between the various blocks and logically rewriting the sectors in a later order and then rewriting the sectors. A method of handling sector updates between erase blocks is disclosed. In this way, one block does not need to be erased and rewritten on every smallest update.

WO 03/027828 및 WO 00/49488 모두는 존들에 논리적 섹터 어드레스를 분할하는 방법을 포함하는 큰 소거 블록 사이에서 업데이트들을 다루는 메모리 시스템을 개시한다. 작은 존의 논리 어드레스 범위는 사용자 데이터를 위한 다른 존으로부터 분리된 액티브 시스템 제어 데이터를 위해 비축된다. 이런 방식으로, 자신의 존에서 시스템 제어 데이터를 조작하는 것은 다른 존의 연관된 사용자 데이터와 상호작용하지 않을 것이다. 업데이트들은 논리적 섹터 레벨에서 이루어지고 기입 포인터는 기입될 블록에서 대응 물리적 섹터들을 가리킨다. 맵핑 정보는 RAM에 버퍼되고 궁극적으로 메인 메모리의 섹터 할당 테이블에 저장된다. 논리 섹터의 가장 최신 버전은 부분적으로 폐기될 기존 블록들 사이에서 모든 이전 버전들을 폐기한다. 가비지(garbage) 수집은 폐기될 블록들을 부분적으로 허용 가능한 숫자로 유지하게 하기 위해 수행된다.Both WO 03/027828 and WO 00/49488 disclose a memory system that handles updates between large erase blocks, including a method of partitioning logical sector addresses in zones. The logical address range of the small zone is reserved for active system control data separated from other zones for user data. In this way, manipulating system control data in its zone will not interact with associated user data in other zones. Updates are made at the logical sector level and the write pointer points to the corresponding physical sectors in the block to be written. The mapping information is buffered in RAM and ultimately stored in the sector allocation table in main memory. The most recent version of the logical sector discards all previous versions among existing blocks that will be partially discarded. Garbage collection is performed to keep the blocks to be discarded at a partially acceptable number.

종래 기술 시스템들은 많은 블록들에 걸쳐 분산되는 업데이트는 데이터를 가지거나 업데이트 데이터는 많은 기존 블록들이 부분적으로 폐기되게 한다. 그 결과는 종종 불충분하고 메모리의 너무 이른 노화를 유발하는 부분적으로 폐기되는 블록들에 필요한 다량의 가비지 수집이다. 또한, 비순차적 업데이트와 비교할 때 순차적 업데이트를 처리하는 시스템적이고 효과적인 방식이 없다.Prior art systems have data that is distributed over many blocks having data or update data causing many existing blocks to be partially discarded. The result is a large amount of garbage collection required for partially discarded blocks that are often insufficient and cause premature aging of memory. In addition, there is no systematic and effective way to handle sequential updates compared to nonsequential updates.

메모리 위치들의 블록들 내에 구성된 데이터 저장 시스템에서, 호스트는 한 세트의 호스트 데이터 블록들에 호스트 데이터를 저장할 수 있다. 그동안, 시스템은 또한 블록들이 할당되는 방법 및 데이터가 블록들 사이에 배치되는 장소의 트랙을 유지하기 위하여 다른 세트의 제어 데이터 블록들에 제어 데이터를 저장한다. 어느 하나의 경우에서나, 데이터 및 하나의 블록을 채우는 상기 데이터의 업데이트들로 인해, 블록은 데이터의 가장 최근 버전이 빈 블록에 재할당된 후 폐쇄될 것이다. 이런 재기입 프로세스는 일반적으로 가비지 수집이라 한다. 다른 타입의 가비지 수집들이 있고 몇몇 수집은 다른 것보다 많은 시간이 걸린다.In a data storage system configured within blocks of memory locations, a host may store host data in a set of host data blocks. In the meantime, the system also stores control data in different sets of control data blocks to keep track of how the blocks are allocated and where the data is placed between the blocks. In either case, due to updates of the data filling the data and one block, the block will be closed after the most recent version of the data is reallocated to the empty block. This rewrite process is commonly referred to as garbage collection. There are other types of garbage collections, and some collections take longer than others.

가비지 수집들은 블록 경계가 교차되거나 결함이 있을 때 호스트 기입 동안 트리거될 수 있다. 유사하게, 가비지 수집들은 제어 블록 경계가 교차되거나(제어 블록 재기입) 또는 프로그램 에러 또는 결함 발생이 있을 때(에러 취급)처럼 메모리 시스템의 내부 또는 하우스키핑 동작들 동안 트리거될 수 있다. 다른 예시적인 가비지 수집은 소모도 레벨링 및 판독 스크러브(scrub)를 포함한다.Garbage collections can be triggered during host write when block boundaries are crossed or defective. Similarly, garbage collections can be triggered during internal or housekeeping operations of the memory system, such as when the control block boundary is crossed (control block rewrite) or when there is a program error or fault occurrence (error handling). Other exemplary garbage collections include consumption leveling and read scrubs.

가비지 수집들이 시간 소비적이고 몇몇 최악의 상황에서, 몇몇 가비지 수집들이 연속적으로 발생하기 때문에, 시스템 타이밍들은 혼란되고 메모리는 동작하지 않게 될 수 있다.Because garbage collections are time consuming and in some worst-case situations, some garbage collections occur in succession, system timings can be confusing and memory can become inoperable.

그러므로 고성능 및 고성능 비휘발성 메모리에 대한 일반적인 필요성이 있다. 특히, 상기된 문제들 없이 고성능 비휘발성 메모리가 메모리 동작들을 수행하는 것이 필요하다.Therefore, there is a general need for high performance and high performance nonvolatile memory. In particular, it is necessary for a high performance nonvolatile memory to perform memory operations without the problems described above.

따라서, 본 발명의 목적은 타이밍 요구조건들을 위반하지 않고 상기된 임의의 호스트 업데이트 시퀀스에서 내부 동작들을 다룰 수 있는 강건한 데이터 저장 시스템을 제공하는 것이다.It is therefore an object of the present invention to provide a robust data storage system that can handle internal operations in any of the host update sequences described above without violating timing requirements.

특히, 본 발명의 목적은 메모리 동작을 제어하기 위하여 사용된 시스템 제어 데이터를 저장하기 위한 메모리 블록들의 풀에 비축된 블록들의 수를 감소시키고 제어 블록 업데이트를 위한 최악의 경우 타이밍을 감소시키는 것이다.In particular, it is an object of the present invention to reduce the number of blocks reserved in the pool of memory blocks for storing system control data used to control memory operation and to reduce the worst case timing for control block updates.

본 발명에 따라, 개선된 방법은 제어 데이터의 가능한 긴 캐스케이드 업데이트들을 방지하기 위하여 제공된다. 이것은 각각의 타입의 제어 데이터에 대한 블록 마진을 설정하고 블록 마진에 도달되었을 때 가장 빠른 기회에서 블록을 재기입함으로써 달성된다. 특히, 마진은 재기입이 발생하기 전에 블록을 완전히 충전하지 않도록 재기입이 발생하기 전에 미리 결정된 간격에 수용되는 데이터를 수용하기에 충분하게 설정된다. 미리 결정된 간격은 무엇보다도 재기입이 발생하기 전에 최악의 경우 간격을 양산하는 호스트 기입 패턴을 고려하여 결정된다. 마진을 설정하기 위한 다른 고려사항들은 각각의 제어 블록 재기입을 위해 요구된 시간 및 호스트 데이터를 저장하기 위하여 업데이트의 구성을 바탕으로 블록 재기입들을 제어하기 위하여 이용할 수 있는 시간을 포함하고, 상기 시간은 포그라운드 호스트 동작 및 호스트 기입 레이턴시에 요구된다.According to the present invention, an improved method is provided to prevent possible long cascade updates of control data. This is accomplished by setting a block margin for each type of control data and rewriting the block at the earliest opportunity when the block margin is reached. In particular, the margin is set sufficiently to accommodate data received at a predetermined interval before rewriting occurs so that the block is not completely filled before rewriting occurs. The predetermined interval is determined above all in consideration of the host write pattern which yields the interval in the worst case before rewriting occurs. Other considerations for setting the margin include the time required for each control block rewrite and the time available to control the block rewrites based on the configuration of the update to store host data, the time being Required for foreground host operation and host write latency.

일 실시예에서, 계류중인 하나 이상의 제어 블록 재기입이 있을 때, 보다 활성화된 제어 데이터 타입을 가진 것은 호스트 동작에서 발견된 다음 이용 가능한 기회에서 우선적으로 실행된다. 이런 방식에서, 비축된 블록들의 최대값은 단지 하나의 제어 블록 재기입이 동시에 발생하기 때문에 제어 블록 재기입들을 위한 리소스로서 옆에 설정될 필요가 있다.In one embodiment, when there is one or more pending control block rewritings, those with more active control data types are preferentially executed at the next available opportunity found in the host operation. In this way, the maximum value of the reserved blocks needs to be set next as a resource for control block rewrites because only one control block rewrite occurs at the same time.

상기 개선은 캐스케이드 제어 업데이트당 다중 프로그램 에러들이 허용되게 하여, 타이밍 제한 내에서 다른 것 다음에 바로 발생하는 하나 이상의 ECC 또는 프로그램 에러를 취급할 수 있다. 이런 특징은 만약 결함들이 하위 레벨에서 패치되지 못하면 위험이 매우 높기 때문에 일회 프로그램 가능("OTP") 메모리에 특히 중요하다. 개선은 제어 데이터를 제어하기 위한 업데이트 블록들의 풀에 최소의 블록들이 비축되게 한다. 비축된 블록들은 메모리 제어 시스템이 최악의 경우 캐스케이드 업데이트를 취급하게 하고, 여기서 모든 제어 데이터 블록들은 동시에 충전되고, 동일한 비지 기간에 모두 재기입되어야 한다. 만약 보다 적은 블록들이 제어 데이터를 위하여 비축되도록 요구되면, 보다 많은 블록들이 호스트 데이터 업데이트들에 이용 가능할 것이다.The improvement allows multiple program errors per cascade control update to be handled, allowing for handling one or more ECC or program errors that occur immediately after another within a timing constraint. This feature is especially important for one-time programmable ("OTP") memory because the risk is very high if the defects are not patched at a lower level. The improvement allows the minimum blocks to be stored in the pool of update blocks for controlling the control data. Reserved blocks cause the memory control system to handle cascade updates in the worst case, where all control data blocks must be charged simultaneously and rewritten in the same busy period. If fewer blocks are required to be reserved for control data, more blocks will be available for host data updates.

본 발명의 장점들은 다음을 포함한다. 증가된 에러들의 수는 최악의 경우 업데이트 시퀀스에서 취급될 수 있다. 최악의 경우의 가장 긴 가비지 수집부들(GC)의 결합 및 제어 블록 컴팩트화는 방지될 수 있다. 예를 들어, 무순서 GC는 가장 최악의 경우 명령 레이턴시가 감소될 수 있는 무순서 GC와 동시에 제어 업데이트들을 수행하는 것을 방지함으로써 순차적 GC보다 길다. 최적화된 성능은 블록 마진들의 최적의 선택(예를 들어, 보다 가득찬 제어 블록이 컴팩트화되도록 선택함으로써) 및 수행하기 위한 내부 동작의 스케쥴링에 의해 얻어진다. 감소된 수의 비축된 소거 블록들은 최악의 경우 업데이트 시퀀스를 취급하기 위하여 요구된다. 에러들은 에러 취급이 재스케쥴될 수 있기 때문에 선제 내부 동작들의 경우 보다 빠르게 취급될 수 있다. 부분 에러 취급 및 에러 취급의 스케쥴 완료는 가능하다. 레이턴시를 짧게하고 추후 수행될(예를 들어, 다음 기입 동작 동안) 판독 동작 동안 ECC 에러 취급을 스케쥴하는 것은 가능하다.Advantages of the present invention include the following. The increased number of errors can be handled in the worst case update sequence. The combination of worst case longest garbage collectors GC and control block compaction can be avoided. For example, an unordered GC is longer than a sequential GC by preventing control updates from being performed concurrently with an unordered GC, in the worst case where command latency can be reduced. Optimized performance is obtained by optimal selection of block margins (e.g., by selecting more full control blocks to be compact) and scheduling of internal operations to perform. Reduced number of reserved erase blocks are required in the worst case to handle the update sequence. Errors can be handled faster than preemptive internal operations because error handling can be rescheduled. Partial error handling and schedule completion of error handling are possible. It is possible to shorten latency and schedule ECC error handling during a read operation to be performed later (eg during the next write operation).

본 발명의 부가적인 특징들 및 장점들은 바람직한 실시예들의 다음 상세한 설명으로부터 이해될 것이고, 상기 상세한 설명은 첨부 도면들과 관련하여 얻어져야 한다.Additional features and advantages of the invention will be understood from the following detailed description of the preferred embodiments, which should be obtained in conjunction with the accompanying drawings.

도 1은 본 발명을 실행하기에 적당한 메모리 시스템의 메인 하드웨어 구성요소들을 개략적으로 도시한다.1 schematically illustrates the main hardware components of a memory system suitable for practicing the present invention.

도 2는 본 발명의 바람직한 실시예에 따라 섹터들(또는 메타 블록들)의 물리적 그룹들 내에 구성되고 제어기의 메모리 관리기에 의해 관리되는 메모리를 도시한다.2 illustrates a memory organized within physical groups of sectors (or meta blocks) and managed by a memory manager of a controller in accordance with a preferred embodiment of the present invention.

도 3a(i) ~ 3a(iii)는 본 발명의 바람직한 실시예에 따라 논리 그룹 및 메타블록 사이에서 맵핑을 개략적으로 도시한다.3A (i) to 3A (iii) schematically illustrate the mapping between logical groups and metablocks in accordance with a preferred embodiment of the present invention.

도 3b는 논리적 그룹들 및 메타 블록들 사이의 맵핑을 개략적으로 도시한다.3B schematically illustrates the mapping between logical groups and meta blocks.

도 4는 물리적 메모리에서 구조들을 가진 메타 블록의 정렬을 도시한다.4 illustrates the alignment of a metablock with structures in physical memory.

도 5a는 다른 평면들의 최소 소거 단위들의 링킹으로부터 구성된 메타블록들을 도시한다.5A shows metablocks constructed from linking of minimum erase units of other planes.

도 5b는 하나의 최소 소거 단위(MEU)가 메타블록에 링킹하기 위한 각각의 평면으로부터 선택되는 다른 실시예를 도시한다.FIG. 5B shows another embodiment where one minimum erase unit (MEU) is selected from each plane for linking to the metablock.

도 5c는 메타블록에 링킹하기 위한 각각의 평면으로부터 하나 이상의 MEU가 선택되는 다른 실시예를 도시한다.5C illustrates another embodiment in which one or more MEUs are selected from each plane for linking to metablocks.

도 6은 제어기 및 플래시 메모리에서 실행된 바와 같은 메타블록 관리 시스템의 개략적인 블록도이다.6 is a schematic block diagram of a metablock management system as implemented in a controller and flash memory.

도 7a는 순차적인 업데이트 블록에 순차적인 순서로 기입되는 논리 그룹 내 섹터들의 예를 도시한다.7A shows an example of sectors in a logical group that are written in sequential order to sequential update blocks.

도 7b는 무순서 업데이트 블록에 무순서 순서로 기입되는 논리 그룹의 섹터들의 예를 도시한다.7B shows an example of sectors in a logical group that are written out of order in the out of order update block.

도 8은 논리 어드레스들 내에서 불연속성을 가진 두 개의 독립된 호스트 기입 동작들의 결과로서 순차적 업데이트 블록에 순차적인 방식으로 기입된 논리적 그룹의 섹터들의 예를 도시한다.8 shows an example of sectors in a logical group written in a sequential manner to a sequential update block as a result of two independent host write operations with discontinuities within logical addresses.

도 9는 본 발명의 일반적인 실시예에 따라, 데이터의 논리 그룹을 업데이트하기 위한 업데이트 블록 관리자에 의한 프로세스를 도시하는 흐름도이다.9 is a flow diagram illustrating a process by an update block manager for updating a logical group of data, in accordance with a general embodiment of the present invention.

도 10은 본 발명의 바람직한 실시예에 따라, 데이터의 논리 그룹을 업데이트하기 위하여 업데이트 블록 관리자에 의한 프로세스를 도시하는 흐름도이다.10 is a flow diagram illustrating a process by an update block manager to update a logical group of data, in accordance with a preferred embodiment of the present invention.

도 11a는 도 10에 도시된 무순서 업데이트 블록을 폐쇄하는 정리 통합 프로세서를 보다 상세하게 도시하는 흐름도이다.FIG. 11A is a flow diagram illustrating in more detail the cleanup integration processor closing the random update block shown in FIG. 10.

도 11b는 도 10에 도시된 무순서 업데이트 블록을 폐쇄하기 위한 컴팩트화 프로세스를 보다 상세히 도시하는 흐름도이다.FIG. 11B is a flow chart illustrating in more detail the compaction process for closing the random update block shown in FIG. 10.

도 12a는 논리 그룹의 모든 가능한 상태들, 및 다양한 동작들 하에서 이들 상태들 사이의 가능한 전이들을 도시한다.12A shows all possible states of a logical group, and possible transitions between these states under various operations.

도 12b는 논리 그룹의 가능한 상태들을 기술하는 테이블이다.12B is a table describing the possible states of a logical group.

도 13a는 메타블록의 모든 가능한 상태들, 및 다양한 동작들 하에서 이들 상태들 사이의 가능한 전이들을 도시한다. 메타블록은 논리 그룹에 대응하는 물리적 그룹이다.13A shows all possible states of a metablock, and possible transitions between these states under various operations. Metablocks are physical groups that correspond to logical groups.

도 13b는 메타블록의 가능한 상태들을 기술하는 테이블이다.13B is a table describing the possible states of a metablock.

도 14(a) ~ 14(j)는 논리적 그룹 및 물리적 메타블록의 상태상에서 다양한 동작들의 효과를 도시하는 상태도이다.14 (a) to 14 (j) are state diagrams illustrating the effects of various operations on the state of logical groups and physical metablocks.

도 15는 개방 및 폐쇄된 업데이트 블록들 및 할당을 위한 소거된 블록들의 트랙을 유지하기 위한 할당 블록 리스트(ABL)의 구조의 바람직한 실시예를 도시한다.Fig. 15 shows a preferred embodiment of the structure of the allocation block list ABL for keeping track of open and closed update blocks and erased blocks for allocation.

도 16a는 무순서 블록 인덱스(CBI) 섹터의 데이터 필드들을 도시한다.16A shows data fields of an out of order block index (CBI) sector.

도 16b는 전용 메타블록에 기록된 무순서 블록 인덱스(CBI) 섹터들의 예를 도시한다.16B shows an example of random block index (CBI) sectors written to a dedicated metablock.

도 16c는 무순서 업데이트를 겪은 주어진 논리 그룹의 논리 섹터의 데이터에 대한 액세스를 도시하는 흐름도이다.16C is a flow diagram illustrating access to data in logical sectors of a given logical group that have undergone random updates.

도 16d는 논리적 그룹이 서브그룹들로 분할되는 다른 실시예에 따라, 무순서 업데이트를 겪는 주어진 논리 그룹의 논리 섹터의 데이터에 대한 액세스를 도시하는 흐름도이다.16D is a flow diagram illustrating access to data in a logical sector of a given logical group undergoing random update, according to another embodiment where the logical group is divided into subgroups.

도 16e는 각각의 논리 그룹이 다중 서브그룹들로 분할되는 실시예에 대한 무 순서 블록 인덱싱(CBI) 섹터들 및 기능들의 실시예들을 도시한다.FIG. 16E illustrates embodiments of random block indexing (CBI) sectors and functions for an embodiment where each logical group is divided into multiple subgroups.

도 17a는 그룹 어드레스 테이블(GAT) 섹터의 데이터 필드들을 도시한다.17A shows data fields of a group address table (GAT) sector.

도 17b는 GAT 블록에 기록된 그룹 어드레스 테이블(GAT) 섹터들의 실시예를 도시한다.17B illustrates an embodiment of group address table (GAT) sectors written to a GAT block.

도 18은 소거된 블록들의 사용 및 재사이클링을 위한 제어 및 디렉토리 정보의 분배 및 흐름을 도시하는 개략적인 블록도이다.18 is a schematic block diagram illustrating the distribution and flow of control and directory information for use and recycling of erased blocks.

도 19는 논리 대 물리적 어드레스 변환의 프로세스를 도시하는 흐름도이다.19 is a flowchart illustrating the process of logical to physical address translation.

도 20은 메모리 관리 동작 중 제어 데이터 구조들 상에서 수행되는 동작들의 계층을 도시한다.20 illustrates a hierarchy of operations performed on control data structures during a memory management operation.

도 21은 블록 마진 시스템에 대한 업데이트 블록들의 수에서 두 개의 규정된 제한들을 개략적으로 도시한다.21 schematically illustrates two defined limits in the number of update blocks for a block margin system.

도 22는 다양한 메모리 디바이스들에 대해 최적화된 두 개의 제한들의 실시예들의 통상적인 예들을 도시한다.22 shows typical examples of embodiments of two limitations optimized for various memory devices.

도 23a는 도 22에 기술된 바와 같은 "5-2" 구성을 가진 업데이트 풀을 개략적으로 도시한다.FIG. 23A schematically illustrates an update pool with a “5-2” configuration as described in FIG. 22.

도 23b는 새로운 업데이트 블록에 대한 룸을 형성하기 위하여 최소한 액티브 업데이트 블록의 폐지를 개략적으로 도시한다.23B schematically illustrates the revocation of at least an active update block to form a room for a new update block.

도 23c는 폐쇄된 업데이트 블록이 룸을 형성하기 위하여 제거된 후 풀에 새롭게 할당된 업데이트 블록을 개략적으로 도입하는 것을 도시한다.FIG. 23C schematically illustrates the introduction of a newly allocated update block to a pool after a closed update block has been removed to form a room.

도 24a는 도 22에 기술된 바와 같은 "5-2" 구성을 가진 업데이트 풀을 개략 적으로 도시한다.FIG. 24A schematically illustrates an update pool with a “5-2” configuration as described in FIG. 22.

도 24b는 새로운 무순서 업데이트 블록에 대한 룸을 형성하기 위하여 무순서 업데이트 블록의 폐쇄를 개략적으로 도시한다.24B schematically illustrates the closure of the random update block to form a room for a new random update block.

도 24c는 폐쇄된 무순서 업데이트 블록이 룸을 형성하기 위하여 제거된 후 풀에 새롭게 할당된 무순서 업데이트 블록을 개략적으로 도입하는 것을 도시한다.24C illustrates schematically introducing a randomly allocated random update block to the pool after the closed random update block is removed to form a room.

도 25a는 간단한 순차적 업데이트를 포함하는 호스트 기입을 실행하는 메모리에 대한 타이밍 도를 개략적으로 도시한다.25A schematically illustrates a timing diagram for a memory that performs host write including a simple sequential update.

도 25b는 순차적 업데이트 플러스 다른 순차적 블록의 폐쇄를 포함하는 호스트 기입을 실행하는 메모리에 대한 타이밍도를 개략적으로 도시한다.25B schematically illustrates a timing diagram for a memory that executes host write including sequential update plus closure of another sequential block.

도 25c는 무순서 업데이트 및 다른 무순서 업데이트 블록의 폐쇄 및 재할당을 포함하는 호스트 기입을 실행하는 메모리에 대한 타이밍도를 개략적으로 도시한다.FIG. 25C schematically illustrates a timing diagram for a memory that performs host write including closing and reassigning random order updates and other random update blocks.

도 25d는 다른 무순서 업데이트 블록을 폐쇄할 때 두 개의 통로들 플러스 무순서 업데이트를 포함하는 호스트 기입을 실행하는 메모리에 대한 타이밍도를 개략적으로 도시한다.FIG. 25D schematically illustrates a timing diagram for a memory that executes a host write that includes two passages plus a random update when closing another random update block.

도 26은 제어 데이터를 저장하기 위하여 비축된 블록들의 풀을 개략적으로 도시한다.Fig. 26 schematically shows a pool of blocks reserved for storing control data.

도 27a는 "7-3" 업데이트 풀을 가진 메모리 구성에 대한 무순서 블록 통합들의 최대 빈도를 형성하는 최악의 경우 기입 패턴을 도시하는 테이블이다.FIG. 27A is a table illustrating the worst case write pattern forming the maximum frequency of random block consolidations for a memory configuration with a "7-3" update pool.

도 27b는 "7-3" 업데이트 풀을 가진 메모리 구성에 대한 순차적 블록 폐쇄들 의 연속적 진행을 형성하는 최악의 경우 기입 패턴을 도시하는 테이블이다.FIG. 27B is a table illustrating the worst case write pattern forming a continuous progression of sequential block closures for a memory configuration with a “7-3” update pool.

도 28a는 "3-1" 업데이트 풀을 가진 메모리 구성에 대한 무순서 블록 통합들의 최대 빈도를 형성하는 최악의 경우 기입 패턴을 도시한 테이블이다.FIG. 28A is a table showing the worst case write pattern forming the maximum frequency of random block consolidations for a memory configuration with a "3-1" update pool.

도 29a는 "3-3" 업데이트 풀을 가진 메모리 구성에 대한 무순서 블록 통합의 최대 빈도를 형성하는 최악의 경우 기입 패턴을 도시한 테이블이다.FIG. 29A is a table illustrating the worst case write pattern forming the maximum frequency of random block consolidation for a memory configuration with a "3-3" update pool.

도 29b는 "3-3" 업데이트 풀을 가진 메모리 구성에 대한 순차적 블록 폐쇄들의 연속적 진행을 형성하는 최악의 경우 기입 패턴을 도시한다.FIG. 29B shows the worst case write pattern forming a continuous progression of sequential block closures for a memory configuration with a "3-3" update pool.

도 30은 방법 1의 제어 블록 재기입 스케쥴을 적용함으로써 각각의 제어 데이터 타입에 대한 예시적인 계산된 마진들을 기술하는 테이블이다.30 is a table describing exemplary calculated margins for each control data type by applying the control block rewrite schedule of Method 1. FIG.

도 31은 방법 2의 제어 블록 재기입 스케쥴을 적용함으로써 각각의 제어 데이터 타입에 대한 예시적인 계산된 마진들을 기술하는 테이블이다.FIG. 31 is a table describing exemplary calculated margins for each control data type by applying the control block rewrite schedule of Method 2. FIG.

도 32는 방법 3의 제어 블록 재기입 스케쥴을 적용함으로써 각각의 제어 데이터 타입에 대한 예시적인 계산된 마진들을 기술하는 테이블이다.32 is a table describing example calculated margins for each control data type by applying the control block rewrite schedule of method 3. FIG.

도 33은 방법 4의 제어 블록 재기입 스케쥴을 적용함으로써 각각의 제어 데이터 타입에 대한 예시적인 계산된 마진들을 기술하는 테이블이다.33 is a table describing exemplary calculated margins for each control data type by applying the control block rewrite schedule of method 4. FIG.

도 34는 최악의 경우 고려상황들을 바탕으로 제어 데이터 블록들의 선제 재기입 방법을 도시하는 흐름도이다.34 is a flowchart illustrating a preemptive rewrite method of control data blocks based on worst case considerations.

도 35는 보다 상위 랭크 데이터 타입의 부가적인 선제 처리를 제외하고 도 34와 유사한 선제 재기입에 대한 다른 방법을 도시하는 흐름도이다.FIG. 35 is a flow chart illustrating another method for pre-emptive rewrite similar to FIG. 34 except for the additional pre-emptive processing of the higher rank data type.

도 36은 도 34 및 35의 흐름도 단계들 중 하나에 대한 다른 단계를 도시한 다.36 shows another step for one of the flowchart steps of FIGS. 34 and 35.

도 37은 도 34 및 35의 흐름도의 상태들 중 하나에 대한 다른 단계를 도시한다.FIG. 37 shows another step for one of the states of the flowcharts of FIGS. 34 and 35.

도 1 내지 도 20은 본 발명의 다양한 측면들이 실행될 수 있는 블록 관리를 사용하는 메모리 시스템들의 예들을 도시한다. 유사한 메모리 시스템들은 미국특허 출원 공보에 개시되었다. U.S. 특허 출원 공보 US-2005-0144365-A1은 Gorobets 등에 의한 발명의 명칭이 "Non-Volatile Memory and Method with Control Data Management"이고, U.S. 출원 공보 US-2006-0155922-A1은 2006년 7월 13일에 공개되었고 Gorobets 등에 의한 발명의 명칭이 "Non-Volatile Memory And Method With Improved Indexing For Scratch Pad And Update Blocks"이다.1-20 illustrate examples of memory systems using block management in which various aspects of the invention may be implemented. Similar memory systems have been disclosed in US patent application publications. U.S. Patent application publication US-2005-0144365-A1 is entitled "Non-Volatile Memory and Method with Control Data Management" by Gorobets et al., U.S. Pat. Application publication US-2006-0155922-A1 was published on July 13, 2006 and entitled "Non-Volatile Memory And Method With Improved Indexing For Scratch Pad And Update Blocks" by Gorobets et al.

도 1은 본 발명을 실행하기에 적당한 메모리 시스템의 메인 하드웨어 구성요소들을 개략적으로 도시한다. 메모리 시스템(20)은 통상적으로 호스트 인터페이스를 통하여 호스트(10)와 함께 동작한다. 메모리 시스템은 메모리 카드 또는 삽입된 메모리 시스템 형태이다. 메모리 시스템(20)은 동작들이 제어기(100)에 의해 제어되는 메모리(200)를 포함한다. 메모리(200)는 하나 이상의 집적된 회로 칩 상에 분배된 비휘발성 메모리 셀들의 하나 이상의 어레이를 포함한다. 제어기(100)는 인터페이스(110), 프로세서(120), 선택적 코프로세서(121), ROM(122)(판독 전용 메모리), RAM(130)(임의의 액세스 메모리) 및 선택적으로 프로그램 가능한 비휘발성 메모리(124)를 포함한다. 인터페이스(110)는 호스트에 제어기를 인터페이싱하는 하나 의 구성요소 및 메모리(200)에 인터페이싱하는 다른 구성요소를 가진다. 비휘발성 ROM(122)에 저장된 펌웨어 및/또는 선택적 비휘발성 메모리(124)는 제어기(100)의 기능들을 실행하기 위하여 프로세서(120)에 코드들을 제공한다. 에러 수정 코드들은 프로세서(120) 또는 선택적인 코프로세서(121)에 의해 처리될 수 있다. 다른 실시예에서, 제어기(100)는 상태 머신(도시되지 않음)에 의해 실행된다. 다른 실시예에서, 제어기(100)는 호스트 내에서 실행된다.1 schematically illustrates the main hardware components of a memory system suitable for practicing the present invention. The memory system 20 typically operates with the host 10 through a host interface. The memory system is in the form of a memory card or an inserted memory system. The memory system 20 includes a memory 200 in which operations are controlled by the controller 100. Memory 200 includes one or more arrays of nonvolatile memory cells distributed on one or more integrated circuit chips. Controller 100 includes interface 110, processor 120, optional coprocessor 121, ROM 122 (read only memory), RAM 130 (any access memory) and optionally programmable non-volatile memory. 124. Interface 110 has one component that interfaces a controller to a host and another component that interfaces to memory 200. Firmware and / or optional nonvolatile memory 124 stored in nonvolatile ROM 122 provide codes to processor 120 to execute the functions of controller 100. Error correction codes may be processed by processor 120 or optional coprocessor 121. In another embodiment, the controller 100 is executed by a state machine (not shown). In another embodiment, the controller 100 runs in a host.

논리 및 물리적 블록 구조들Logical and Physical Block Structures

도 2는 본 발명의 바람직한 실시예에 따른 섹터들(또는 메타블록들)의 물리적 그룹들로 구성되고 제어기의 메모리 관리기에 의해 관리되는 메모리를 도시한다. 메모리(200)는 메타블록들로 구성되고, 여기서 각각의 메타블록은 함께 소거할 수 있는 물리적 섹터들(S0,...,SN-1)의 그룹이다.2 illustrates a memory comprised of physical groups of sectors (or metablocks) and managed by a memory manager of a controller according to a preferred embodiment of the present invention. Memory 200 consists of metablocks, where each metablock is a group of physical sectors S 0 ,..., S N-1 that can be erased together.

호스트(10)는 파일 시스템 또는 연산 시스템 하에서 애플리케이션을 운용할 때 메모리(200)에 액세스한다. 통상적으로, 호스트 시스템은 논리 섹터들의 단위들로 데이터를 어드레스하고, 예를 들어 각각의 섹터는 512 바이트의 데이터를 포함할 수 있다. 또한, 호스트가 논리 클러스터들의 단위로 메모리 시스템에 판독 또는 기입하는 것은 일반적이고, 상기 클러스터들 각각은 하나 이상의 논리 섹터들로 구성된다. 몇몇 호스트 시스템들에서, 선택적인 호스트 측면 메모리 관리기는 하위 레벨 메모리 관리를 호스트에서 수행하기 위하여 존재할 수 있다. 판독 또는 기입 동작들 동안 대부분의 경우들에서, 호스트(10)는 인접한 어드레스들을 가진 데이터 의 논리적 섹터들의 문자열을 포함하는 세그먼트를 판독 또는 기입하도록 메모리 시스템(20)에 명령을 내린다.The host 10 accesses the memory 200 when operating an application under a file system or computing system. Typically, a host system addresses data in units of logical sectors, for example each sector may contain 512 bytes of data. It is also common for a host to read or write to a memory system in units of logical clusters, each of which consists of one or more logical sectors. In some host systems, an optional host side memory manager may be present to perform low level memory management at the host. In most cases during read or write operations, the host 10 instructs the memory system 20 to read or write a segment comprising a string of logical sectors of data with adjacent addresses.

메모리 측 메모리 관리기는 플래시 메모리(200)의 메타블록들 사이에서 호스트 논리 섹터들의 데이터의 저장 및 검색을 관리하기 위하여 메모리 시스템(20)의 제어기(100)에서 실행된다. 바람직한 실시예에서, 메모리 관리기는 메타블록들의 소거, 판독 및 기입 동작들을 관리하기 위한 다수의 소프트웨어 모듈들을 포함한다. 메모리 관리기는 플래시 메모리(200) 및 제어기 RAM(130) 사이의 동작들과 연관된 시스템 제어 및 디렉토리 데이터를 유지한다.The memory side memory manager is executed in the controller 100 of the memory system 20 to manage the storage and retrieval of data of host logical sectors between metablocks of the flash memory 200. In a preferred embodiment, the memory manager includes a number of software modules for managing erase, read and write operations of metablocks. The memory manager maintains system control and directory data associated with operations between flash memory 200 and controller RAM 130.

도 3a(i) ~ 3a(iii)는 본 발명의 바람직한 실시예에 따른 논리 그룹 및 메타블록 사이의 맵핑을 개략적으로 도시한다. 물리적 메모리의 메타블록은 논리 그룹의 N 논리 섹터들을 저장하기 위한 N 물리적 섹터들을 가진다. 도 3a(i)는 논리 그룹(LGi)으로부터 데이터를 도시하고 여기서 논리 섹터들은 연속적인 논리 순서(0,1, ...,N-1)에 있다. 도 3a(ii)는 동일한 논리 순서의 메타블록에 저장되는 동일한 데이터를 도시한다. 이런 방식으로 저장될 때 메타블록은 "순차적"이라 한다. 일반적으로, 메타블록은 다른 순서로 저장되는 데이터를 가질 수 있고, 상기 경우 메타블록은 "비순차적" 또는 "무순서"라고 한다.3A (i) to 3A (iii) schematically illustrate the mapping between logical groups and metablocks in accordance with a preferred embodiment of the present invention. The metablock of physical memory has N physical sectors for storing N logical sectors of a logical group. 3a (i) shows data from a logical group LG i where the logical sectors are in successive logical order (0, 1, ..., N-1). 3A (ii) shows the same data stored in metablocks of the same logical order. Metablocks are called "sequential" when stored in this way. In general, metablocks may have data stored in a different order, in which case the metablocks are referred to as "out of order" or "out of order."

맵핑되는 메타블록의 최하위 어드레스 및 논리 그룹의 최하위 어드레스 사이에는 오프셋이 있을 수 있다. 이 경우, 논리 섹터 어드레스는 메타블록내 논리 그룹의 바닥으로부터 상부로 루프로서 랩라운드(wrap round)한다. 예를 들어, 도 3a(iii)에서, 메타블록은 논리 섹터(k)의 데이터에서 시작하는 제 1 위치에 저장한다. 최종 논리 섹터(N-1)에 도달될 때, 섹터 0으로 랩라운드하고 최종적으로 최종 물리 섹터의 논리 섹터(k-1)와 연관된 데이터를 저장한다. 바람직한 실시예에서, 페이지 태그는 메타블록의 제 1 물리적 섹터에 저장된 데이터의 시작 논리 섹터 어드레스를 식별하는 것과 같은 임의의 오프셋을 식별하기 위해 사용된다. 두 개의 블록들은 상기 블록들이 페이지 태그에 의해서만 다를 때 유사한 순서로 저장된 논리 섹터들을 가지는 것으로 생각될 것이다.There may be an offset between the lowest address of the mapped metablock and the lowest address of the logical group. In this case, the logical sector addresses wrap round as a loop from the bottom to the top of the logical group in the metablock. For example, in FIG. 3A (iii), the metablock is stored at the first location starting from the data of the logical sector k. When the last logical sector N-1 is reached, it wraps around sector 0 and finally stores the data associated with logical sector k-1 of the last physical sector. In a preferred embodiment, the page tag is used to identify any offset, such as identifying the starting logical sector address of data stored in the first physical sector of the metablock. Two blocks will be considered to have logical sectors stored in a similar order when the blocks differ only by page tag.

도 3b는 논리 그룹들 및 메타블록들 사이의 맵핑을 개략적으로 도시한다. 각각의 논리 그룹은 데이터가 현재 업데이트되는 작은 수의 논리 그룹들을 제외하고, 유일한 메타블록에 맵핑된다. 논리 그룹이 업데이트된 후, 다른 메타블록에 맵핑될 수 있다. 맵핑 정보는 한 세트의 논리에서 추후 보다 상세히 기술될 물리적 디렉토리들에 유지된다.3B schematically illustrates the mapping between logical groups and metablocks. Each logical group is mapped to a unique metablock, except for a small number of logical groups whose data is currently updated. After the logical group is updated, it can be mapped to another metablock. Mapping information is maintained in a set of logic in physical directories, which will be described in more detail later.

메타블록 맵핑에 대한 다른 타입의 논리 그룹은 또한 고안된다. 예를 들어, 가변하는 크기를 가진 메타블록들은 공동 계류중이고 공동 소유이며 2003년 12월 30일자 Alan Sinclair에 의해 출원된 "Adaptive Metablocks"인 U.S. 특허 출원 공보 US-2005-0144357 A1에 개시된다. 공동 계류중인 출원의 전체 개시물은 여기에 참조로써 통합된다.Other types of logical groups for metablock mapping are also devised. For example, metablocks of varying sizes are co-pending, co-owned, and "Adaptive Metablocks" filed by Alan Sinclair on December 30, 2003, U.S. Pat. Patent application publication US-2005-0144357 A1. The entire disclosure of the co-pending application is incorporated herein by reference.

본 발명의 하나의 특징은 시스템이 단일 논리 구획부와 함께 동작하고, 메모리 시스템의 논리 어드레스 범위에 걸쳐 논리 섹터들의 그룹들은 동일하게 처리된다는 것이다. 예를 들어, 시스템 데이터를 포함하는 섹터들 및 사용자 데이터를 포 함하는 섹터들은 논리 어드레스 공간 사이 어느 곳에나 분배될 수 있다.One feature of the present invention is that the system operates with a single logical partition, and groups of logical sectors are treated identically across the logical address range of the memory system. For example, sectors containing system data and sectors containing user data may be distributed anywhere between logical address spaces.

종래 기술 시스템들과 달리, 고주파 및 작은 크기의 업데이트들을 가진 데이터를 포함하는 논리 어드레스 공간 섹터들에 배치하기 위하여 시스템 섹터들(즉, 파일 할당 테이블들에 관련된 섹터들, 디렉토리들 또는 서브디렉토리들)의 특정 분할 또는 존화(zoning)가 없다. 대신, 섹터들의 논리 그룹들을 업데이팅하는 현재 방법은 데이터의 통상적인 것뿐 아니라 시스템 섹터들에 통상적인 액세스 패턴들을 효과적으로 취급할 것이다. Unlike prior art systems, system sectors (ie, sectors, directories or subdirectories related to file allocation tables) for placement in logical address space sectors containing data with high frequency and small sized updates. There is no specific partitioning or zoning of. Instead, current methods of updating logical groups of sectors will effectively handle the access patterns common to system sectors as well as the usual ones in data.

도 4는 물리적 메모리에 구조들을 가진 메타블록의 정렬을 도시한다. 플래시 메모리는 단위로서 함께 소거 가능한 메모리 셀들의 블록들을 포함한다. 상기 소거는 메모리의 최소 소거 가능 단위(MEU) 또는 플래시 메모리의 최소 소거 단위이다. 최소 소거 단위는 비록 다중 MEU들 소거를 지원하는 몇몇 메모리 시스템들에서, 하나 이상의 MEU를 포함하는 "슈퍼 MEU"를 구성하는 것이 가능하지만, 메모리의 하드웨어 설계 파라미터이다. 플래시 EEPROM에 대해, MEU는 하나의 섹터를 포함하지만 바람직하게 다중 섹터들을 포함할 수 있다. 도시된 실시예에서, MEU는 M 섹터들을 가진다. 바람직한 실시예에서, 각각의 섹터는 512 바이트의 데이터를 저장할 수 있고 시스템 또는 오버헤드 데이터를 저장하기 위하여 사용자 데이터 부분 및 헤더 부분을 가진다. 만약 메타블록이 P MEU들로부터 구성되고, 각각의 MEU가 M 섹터들을 포함하면, 각각의 메타블록은 N=P*M 섹터들을 가질 것이다.4 illustrates the alignment of a metablock with structures in physical memory. The flash memory includes blocks of memory cells that can be erased together as a unit. The erase is a minimum eraseable unit (MEU) of the memory or a minimum erase unit of the flash memory. The minimum erase unit is a hardware design parameter of the memory, although in some memory systems that support multiple MEUs, it is possible to construct a “super MEU” that includes more than one MEU. For a flash EEPROM, the MEU includes one sector but preferably may comprise multiple sectors. In the embodiment shown, the MEU has M sectors. In a preferred embodiment, each sector can store 512 bytes of data and has a user data portion and a header portion for storing system or overhead data. If the metablock is constructed from P MEUs and each MEU contains M sectors, then each metablock will have N = P * M sectors.

메타블록은 시스템 레벨에서 메모리 위치들의 그룹, 예를 들어 함께 소거 가능한 섹터들을 나타낸다. 플래시 메모리의 물리적 어드레스 공간은 한 세트의 메타 블록들로서 처리되고, 메타블록은 최소 소거 단위이다. 이런 명세내에서, 용어들 "메타블록" 및 "블록"은 미디어 관리를 위한 시스템 레벨에서 최소 소거 단위를 정의하기 위하여 동의어로 사용되고, 용어 "최소 소거 단위" 또는 MEU는 플래시 메모리의 최소 소거 단위를 나타내기 위하여 사용된다.The metablock represents a group of memory locations at the system level, for example sectors that can be erased together. The physical address space of the flash memory is treated as a set of metablocks, which are the minimum erase units. Within this specification, the terms “metablock” and “block” are used synonymously to define the minimum erase unit at the system level for media management, and the term “minimum erase unit” or MEU refers to the minimum erase unit of flash memory. Used to indicate.

메타블록을 형성하기 위하여 최소 소거 단위들(Meu들)의 링킹Linking of minimum erase units (Meu) to form a metablock

프로그래밍 속도 및 소거 속도를 최대화하기 위하여, 대구법은 다중 MEU들로 배치되어 병렬로 프로그램될 정보의 다중 페이지들, 및 병렬로 소거될 다중 MEU들을 가능한 한 많이 배열함으로써 이용된다. In order to maximize the programming speed and the erase speed, the paraphrase is used by arranging as many pages of information to be placed in multiple MEUs and to be programmed in parallel, and as many as possible.

플래시 메모리에서, 한 페이지는 단일 동작시 함께 프로그램될 수 있는 메모리 셀들의 그룹화이다. 하나의 페이지는 하나 이상의 섹터를 포함할 수 있다. 또한, 메모리 어레이는 하나 이상의 평면으로 분할되고, 여기서 하나의 평면내 단지 하나의 MEU는 한번에 프로그램 또는 소거될 수 있다. 최종적으로, 평면들은 하나 이상의 메모리 칩들 사이에 분배될 수 있다.In flash memory, one page is a grouping of memory cells that can be programmed together in a single operation. One page may include one or more sectors. In addition, the memory array is divided into one or more planes, where only one MEU in one plane can be programmed or erased at a time. Finally, planes can be distributed between one or more memory chips.

플래시 메모리에서, MEU들은 하나 이상의 페이지를 포함한다. 플래시 메모리 칩내 MEU들은 평면들 내에서 구성될 수 있다. 각각의 평면으로부터 하나의 MEU가 동시에 프로그램되거나 소거될 수 있기 때문에, 각각의 평면으로부터 하나의 MEU를 선택함으로써 다중 MEU 메타블록을 형성하는 것이 편리하다(하기 도 5b 참조).In flash memory, MEUs contain one or more pages. MEUs in a flash memory chip may be configured in planes. Since one MEU from each plane can be programmed or erased simultaneously, it is convenient to form multiple MEU metablocks by selecting one MEU from each plane (see FIG. 5B below).

도 5a는 다른 평면들의 최소 소거 단위들의 링킹으로부터 구성되는 메타블록들을 도시한다. MB0, MB1, ..., 같은 각각의 메타블록은 메모리 시스템의 다른 평면들로부터의 MEU들로부터 구성되고, 여기서 다른 평면들은 하나 이상의 칩들 사이 에 분배될 수 있다. 도 2에 도시된 메타블록 링크 관리기는 각각의 메타블록에 대한 MEU들의 링킹을 관리한다. 각각의 메타블록은 처음 포맷팅 프로세스 동안 구성되고, 만약 MEU들 중 하나의 결함이 없으면, 시스템의 수명에 걸쳐 구성된 MEU들을 유지한다.5A shows metablocks constructed from the linking of the minimum erase units of the other planes. Each metablock, such as MB0, MB1, ..., is constructed from MEUs from different planes of the memory system, where the other planes may be distributed between one or more chips. The metablock link manager shown in FIG. 2 manages the linking of MEUs for each metablock. Each metablock is configured during the initial formatting process and, if there is no fault in one of the MEUs, maintains the configured MEUs over the life of the system.

도 5b는 하나의 최소 소거 단위(MEU)가 메타블록에 링킹하기 위하여 각각의 평면으로부터 선택되는 일 실시예를 도시한다.FIG. 5B shows one embodiment where one minimum erase unit (MEU) is selected from each plane to link to the metablock.

도 5c는 하나 이상의 MEU가 메타블록에 링킹하기 위한 각각의 평면으로부터 선택되는 다른 실시예를 도시한다. 다른 실시예에서, 하나 이상의 MEU는 슈퍼 MEU를 형성하기 위하여 각각의 평면으로부터 선택될 수 있다. 예를 들어, 슈퍼 MEU는 두 개의 MEU들로부터 형성될 수 있다. 이 경우, 판독 또는 기입 동작 동안 하나 이상의 패스(pass)를 가질 수 있다.5C shows another embodiment in which one or more MEUs are selected from each plane for linking to the metablock. In other embodiments, one or more MEUs may be selected from each plane to form a super MEU. For example, a super MEU can be formed from two MEUs. In this case, it may have one or more passes during a read or write operation.

메타블록들에 MEU들의 링킹 및 재링킹은 2003년 12월 30일 Carlos Gonzales 등에 의해 출원된 발명의 명칭이 "Adaptive Deterministic Grouping of Blocks into Multi-Block Units"인 공동 계류중인 공동 소유인 미국특허 출원 공보 US-2005-0144516 A1에 개시된다. 공동 계류중인 출원의 전체 개시물은 여기에 참조로써 통합된다.Linking and relinking of MEUs to metablocks is a co-pending co-owned US patent application publication US entitled "Adaptive Deterministic Grouping of Blocks into Multi-Block Units" filed December 30, 2003 by Carlos Gonzales et al. -2005-0144516 A1. The entire disclosure of the co-pending application is incorporated herein by reference.

메타블록 관리Metablock Management

도 6은 제어기 및 플래시 메모리에서 실행된 바와 같은 메타블록 관리 시스템의 개략적인 블록도이다. 메타블록 관리 시스템은 제어기(100)에서 실행되는 다양한 기능 모듈들을 포함하고 테이블들에 다양한 제어 데이터(디렉토리 데이터 포 함) 및 플래시 메모리(200) 및 제어기 RAM(130)에 계층적으로 분배된 리스트들을 유지한다. 제어기(100)에서 실행된 기능 모듈들은 인터페이스 모듈(110), 논리 대 물리 어드레스 변환 모듈(140), 업데이트 블록 관리기 모듈(150), 소거 관리기 모듈(160) 및 메타블록 링크 관리기(170)를 포함한다.6 is a schematic block diagram of a metablock management system as implemented in a controller and flash memory. The metablock management system includes various functional modules executed in the controller 100 and lists various control data (including directory data) in the tables and hierarchically distributed lists in the flash memory 200 and the controller RAM 130. Keep it. The functional modules executed in the controller 100 include an interface module 110, a logical to physical address translation module 140, an update block manager module 150, an erase manager module 160, and a metablock link manager 170. do.

인터페이스(110)는 메타블록 관리 시스템이 호스트 시스템과 인터페이스하게 한다. 논리 대 물리 어드레스 변환 모듈(140)은 호스트로부터 물리적 메모리 위치로 논리 어드레스를 맵핑한다. 업데이트 블록 관리기 모듈(150)은 데이터의 주어진 논리 그룹에 대한 메모리에서 데이터 업데이트 동작들을 관리한다. 소거된 블록 관리기(160)는 새로운 정보의 저장을 위한 위치 및 메타블록들의 소거 동작을 관리한다. 메타블록 링크 관리기(170)는 주어진 메타블록을 구성하기 위하여 섹터들의 최소 소거 블록의 서브그룹들의 링킹을 관리한다. 이들 모듈들의 상세한 설명은 각각의 섹션들에서 제공될 것이다.The interface 110 allows the metablock management system to interface with the host system. Logical to physical address translation module 140 maps logical addresses from a host to physical memory locations. The update block manager module 150 manages data update operations in memory for a given logical group of data. The erased block manager 160 manages an erase operation of metablocks and a location for storing new information. The metablock link manager 170 manages linking of subgroups of the minimum erased block of sectors to form a given metablock. Detailed descriptions of these modules will be provided in the respective sections.

동작 동안 메타블록 관리 시스템은 어드레스들, 제어 및 상태 정보 같은 제어 데이터를 생성 및 상기 데이터와 작동한다. 많은 제어 데이터가 작은 크기의 데이터를 빈번하게 변화시키기 때문에, 쉽게 저장될 수 없고 큰 블록 구조를 가진 플래시 메모리에서 효과적으로 유지될 수 없다. 계층 및 분배 방법은 보다 효율적인 업데이트 및 액세스에 대한 제어기 RAM에 보다 많이 가변하는 제어 데이터의 보다 작은 양을 배치하면서 비휘발성 플래시 메모리에 보다 정적인 제어 데이터를 저장하기 위하여 사용된다. 전력 중단 또는 결함이 발생할 때, 상기 방법은 비휘발성 메모리내 작은 세트의 제어 데이터를 빠르게 스캐닝함으로써 휘발성 제어기 RAM의 제어 데이터가 재구성되게 한다. 이것은 주어진 데이터의 논리 그룹의 가능한 작용과 연관된 블록들의 수를 제한한다. 이런 방식으로, 스캐닝은 구성된다. 게다가, 내구력을 요구하는 몇몇 제어 데이터는 섹터 단위로 업데이트될 수 있는 비휘발성 메타블록에 저장되고, 각각의 업데이트는 이전 것을 대체하도록 새로운 섹터가 기록되게 한다. 섹터 인덱싱 방법은 제어 데이터가 메타블록에서 섹터 단위 업데이트들의 트랙을 유지하게 하기 위하여 사용된다.During operation, the metablock management system generates and operates with control data such as addresses, control and status information. Since many control data frequently change small size data, it cannot be easily stored and effectively maintained in flash memory having a large block structure. Hierarchical and distribution methods are used to store more static control data in non-volatile flash memory while placing smaller amounts of more variable control data in the controller RAM for more efficient updates and access. When a power interruption or fault occurs, the method causes the control data of the volatile controller RAM to be reconstructed by quickly scanning a small set of control data in the nonvolatile memory. This limits the number of blocks associated with possible behavior of a logical group of given data. In this way, scanning is configured. In addition, some control data requiring durability is stored in a non-volatile metablock that can be updated sector by sector, with each update causing a new sector to be written to replace the old one. The sector indexing method is used to allow control data to keep track of sector-by-sector updates in the metablock.

비휘발성 플래시 메모리(200)는 비교적 정적인 제어 데이터의 벌크를 저장한다. 이것은 어드레스 테이블들(GAT)(210), 무순서 블록 인다이스들(CBI)(220), 소거된 블록 리스트들(EBL)(230) 및 MAP(240)을 포함한다. GAT(210)는 섹터들의 논리 그룹들 및 대응 메타블록들 사이에서 맵핑하는 트랙을 유지한다. 맵핑은 이들 업데이트되는 것을 제외하고 변화시키지 않는다. CBI(220)는 업데이트 동안 논리적으로 비순차적인 섹터들의 맵핑 트랙을 유지한다. EBL(230)은 소거된 메타블록들 풀의 트랙을 유지한다. MAP(240)는 플래시 메모리에서 모든 메타블록들의 소거 상태를 도시하는 비트맵이다.Nonvolatile flash memory 200 stores a relatively static bulk of control data. This includes address tables (GAT) 210, random block dice (CBI) 220, erased block lists (EBL) 230, and MAP 240. GAT 210 maintains a track that maps between logical groups of sectors and corresponding metablocks. The mapping does not change except those updated. CBI 220 maintains a mapping track of sectors that are logically out of order during the update. EBL 230 maintains a track of the pool of erased metablocks. MAP 240 is a bitmap depicting the erased state of all metablocks in flash memory.

휘발성 제어기 RAM(130)는 빈번하게 변화하고 액세스되는 제어 데이터의 작은 부분을 저장한다. 이것은 할당 블록 리스트(ABL)(134) 및 소거된 블록 리스트(CBL)(136)를 포함한다. ABL(134)은 CBL(136)이 할당해제 및 소거된 메타블록들의 트랙을 유지하는 동안 업데이트 데이터를 기록하기 위한 메타블록들의 할당 트랙을 유지한다. 바람직한 실시예에서, RAM(130)은 플래시 메모리(200)에 저장된 제어 데이터에 대한 캐시로서 작동한다.Volatile controller RAM 130 stores small portions of control data that are frequently changed and accessed. This includes the allocation block list (ABL) 134 and the erased block list (CBL) 136. ABL 134 keeps track of allocation of metablocks for recording update data while CBL 136 keeps track of deallocated and erased metablocks. In a preferred embodiment, RAM 130 acts as a cache for control data stored in flash memory 200.

업데이트 블록 관리기Update block manager

업데이트 블록 관리기(150)(도 2에 도시됨)는 논리 그룹들의 업데이트를 취급한다. 본 발명의 일 측면에 따라, 업데이트를 겪는 섹터들의 각각의 논리 그룹은 업데이트 데이터를 기록하기 위한 전용 업데이트 메타블록이 할당된다. 바람직한 실시예에서, 논리 그룹의 하나 이상의 섹터들의 임의의 세그먼트는 업데이트 블록에 기록될 것이다. 업데이트 블록은 순차적 순서 또는 비순차적(또한 혼란으로서 공지됨) 순서로 업데이트된 데이터를 수신하기 위하여 관리될 수 있다. 무순서 업데이트 블록은 섹터 데이터가 논리 그룹내에서 임의의 순서로 그리고 개별 섹터들의 임의의 반복으로 업데이트되게 한다. 특히, 순차적 업데이트 블록은 임의의 데이터 섹터들의 재배치를 요구하지 않고 무순서 업데이트 블록이 될 수 있다. 무순서 업데이트를 위한 블록들의 미리 결정된 할당이 요구되지 않고; 임의의 논리 어드레스에서 비순차적 기입은 자동으로 수용된다. 따라서, 종래 기술 시스템들과 달리, 논리 그룹의 다양한 업데이트 세그먼트들이 논리 순차적 순서인지 비순차적 순서인지 특정한 처리가 없다. 일반적인 업데이트 블록은 호스트에 의해 요구된 순서로 다양한 세그먼트들을 기록하기 위하여 간단히 사용될 것이다. 예를 들어, 비록 호스트 시스템 데이터 또는 시스템 제어 데이터가 무순서 방식으로 업데이트되면, 호스트 시스템 데이터에 대응하는 논리 어드레스 공간 영역들은 호스트 사용자 데이터를 가진 영역들과 다르게 처리될 필요가 없다.The update block manager 150 (shown in FIG. 2) handles updating of logical groups. According to one aspect of the invention, each logical group of sectors undergoing an update is assigned a dedicated update metablock for writing the update data. In a preferred embodiment, any segment of one or more sectors of the logical group will be written to the update block. Update blocks may be managed to receive updated data in sequential order or out of order (also known as confusion) order. The random update block causes the sector data to be updated in any order within the logical group and in any iteration of the individual sectors. In particular, the sequential update block can be a random update block without requiring relocation of any data sectors. No predetermined allocation of blocks for random updating is required; Out of order writes are automatically accepted at any logical address. Thus, unlike prior art systems, there is no specific processing whether the various update segments of a logical group are in logical sequential or non-sequential order. The generic update block will simply be used to write the various segments in the order required by the host. For example, even if the host system data or system control data is updated in an unordered manner, the logical address space areas corresponding to the host system data need not be treated differently than areas with host user data.

섹터들의 완전한 논리 그룹의 데이터는 바람직하게 단일 메타블록에 논리적으로 순차적 순서로 저장된다. 이런 방식에서, 저장된 논리 섹터들에 대한 인덱스 는 미리 정의된다. 메타블록이 미리 정의된 순서로 주어진 논리 그룹의 모든 섹터들을 저장할 때, "완전한"이라 한다. 업데이트 블록에 대해, 궁극적으로 논리적 순차적 순서로 업데이트 데이터로 충전할 때, 업데이트 블록은 반복적으로 본래 메타블록을 대체하는 업데이트된 완전한 메타블록이 될 것이다. 다른 한편, 만약 업데이트 블록이 완전한 블록과 논리적으로 다른 순서로 업데이트 데이터를 충전하면, 업데이트 블록은 비순차적이거나 무순서 업데이트 블록이고 순서가 바뀐 세그먼트들은 궁극적으로 논리 그룹의 업데이트 데이터가 완전한 블록과 동일한 순서로 저장되도록 추가로 처리되어야 한다. 바람직한 경우, 이것은 단일 메타블록에서 논리적으로 순차적 순서이다. 추가 처리는 다른 업데이트 메타블록에 본래 블록의 변화되지 않은 섹터들을 가진 업데이트 블록의 업데이트된 섹터들을 통합하는 것을 포함한다. 통합된 업데이트 블록은 논리적으로 순차적 순서이고 본래 블록을 대체하기 위하여 사용될 수 있다. 몇몇 미리 결정된 조건하에서, 통합 프로세스는 하나 이상의 컴팩트화 프로세스들 다음이다. 컴팩트화 프로세스는 동일한 논리 섹터의 추후 업데이트에 의해 폐기되는 임의의 이중 논리 섹터를 제거하면서 대체한 무순서 업데이트 블록에 무순서 업데이트 블록의 섹터들을 간단히 재기록한다.The data of the complete logical group of sectors is preferably stored in a logically sequential order in a single metablock. In this way, the index for the stored logical sectors is predefined. When a metablock stores all sectors of a given logical group in a predefined order, it is referred to as "complete". For an update block, when filling ultimately with update data in logical sequential order, the update block will be an updated complete metablock that replaces the original metablock repeatedly. On the other hand, if the update block charges the update data in a logically different order than the complete block, the update block is an out-of-order or out-of-order update block and the ordered segments ultimately result in the same order in which the update data in the logical group is the same as the complete block. It must be further processed to be stored. If desired, this is a logically sequential order in a single metablock. Further processing includes incorporating the updated sectors of the update block with the unchanged sectors of the original block into another update metablock. The integrated update blocks are in logical sequential order and can be used to replace the original block. Under some predetermined conditions, the integration process is followed by one or more compaction processes. The compacting process simply rewrites the sectors of the randomized update block to the replaced randomized update block while eliminating any dual logical sectors discarded by later updates of the same logical sector.

업데이트 방법은 미리 정의된 최대값까지 동시에 운용하는 다중 업데이트 스레드들(thread)을 허용한다. 각각의 스레드는 전용 업데이트 메타블록을 사용하여 업데이트를 겪는 논리 그룹이다.The update method allows multiple update threads to run simultaneously up to a predefined maximum. Each thread is a logical group that undergoes an update using a dedicated update metablock.

순차적 데이터 업데이트Sequential Data Update

논리 그룹에 속하는 데이터가 첫번째 업데이트될 때, 메타블록은 논리 그룹 의 업데이트 데이터에 대한 업데이트 블록으로서 할당되고 전용으로 사용된다. 업데이트 블록은 기존 메타블록이 모든 완전한 섹터들을 저장하는 논리 그룹의 하나 이상의 섹터들을 세그먼트를 기입하기 위하여 호스트로부터 명령이 수신될 때 허용된다. 제 1 호스트 기입 동작을 위해, 데이터의 제 1 세그먼트는 업데이트 블록상에 기록된다. 각각의 호스트 기입이 연속적인 논리 어드레스를 가진 하나 이상의 섹터의 세그먼트이기 때문에, 제 1 업데이트가 항상 자연적으로 순차적인 것이 뒤따른다. 순차적 호스트 기입들 시, 동일한 논리 그룹내에서 업데이트 세그먼트들은 호스트로부터 수신된 순서로 업데이트 블록에 기록된다. 블록은 연관된 논리 그룹내 호스트에 의해 업데이트된 섹터들이 논리적으로 순차적으로 유지되는 동안 순차적 업데이트 블록으로서 계속 관리된다. 이런 논리 그룹내에서 업데이트된 모든 섹터들은 블록이 폐쇄되거나 무순서 업데이트 블록으로 전환될 때까지 이런 순차적 업데이트 블록에 기입된다.When data belonging to a logical group is first updated, the metablock is allocated as an update block for the update data of the logical group and used exclusively. The update block is allowed when a command is received from the host to segment one or more sectors of a logical group in which the existing metablock stores all complete sectors. For the first host write operation, a first segment of data is written on the update block. Since each host write is a segment of one or more sectors with consecutive logical addresses, the first update always follows naturally sequential. In sequential host writes, update segments in the same logical group are written to the update block in the order received from the host. The block continues to be managed as a sequential update block while the sectors updated by the host in the associated logical group remain logically sequential. All sectors updated in this logical group are written to this sequential update block until the block is closed or transitioned to an out-of-order update block.

도 7a는 논리 그룹에 대한 본래 블록의 대응 섹터들이 폐기되는 동안, 두 개의 독립된 호스트 기입 동작들의 결과로서 순차적 업데이트 블록에 순차적 순서로 기입되는 노리 그룹내 섹터들의 예를 도시한다. 호스트 기입 동작 #1에서, 논리 섹터들(LS5-LS8)의 데이터는 업데이트된다. LS5'-LS8' 같은 업데이트된 데이터는 새롭게 할당된 전용 업데이트 블록에 기록된다.7A shows an example of sectors in a nori group that are sequentially written to the sequential update block as a result of two independent host write operations, while corresponding sectors of the original block for the logical group are discarded. In host write operation # 1, the data of logical sectors LS5-LS8 is updated. Updated data such as LS5'-LS8 'is written to the newly allocated dedicated update block.

편리성을 위해, 논리 그룹에서 업데이트될 제 1 섹터는 제 1 물리적 섹터 위치로부터 시작하여 전용 업데이트 블록에서 렌더된다. 일반적으로, 업데이트될 제 1 논리 섹터는 필수적으로 그룹의 논리 제 1 섹터가 아니고, 그러므로 논리 그룹의 시작 및 업데이트 블록의 시작 사이의 오프셋이 있을 수 있다. 이런 오프셋은 도 3a와 관련하여 이전에 기술된 바와 같이 페이지 태그로서 공지되었다. 추후 섹터들은 논리적으로 순차적 순서로 업데이트된다. 논리 그룹의 최종 섹터가 기입될 때, 그룹 어드레스들은 랩어라운드하고 기입 시퀀스는 그룹의 제 1 섹터에 대해 계속된다.For convenience, the first sector to be updated in the logical group is rendered in a dedicated update block starting from the first physical sector location. In general, the first logical sector to be updated is not necessarily the logical first sector of the group, so there may be an offset between the start of the logical group and the start of the update block. This offset is known as the page tag as previously described with respect to FIG. 3A. Subsequent sectors are updated in logical sequential order. When the last sector of the logical group is written, the group addresses wrap around and the write sequence continues for the first sector of the group.

호스트 기입 동작 #2에서, 논리 섹터들(LS9-LS12)의 데이터 세그먼트는 업데이트된다. LS9'-LS12'으로서 업데이트된 데이터는 최종 기입이 종료될 때 바로 다음 위치에 전용 업데이트 블록에 기록된다. 업데이트 데이터가 논리적으로 순차적 순서로 업데이트 블록, 즉 LS5'-LS12'에 기록되도록 두 개의 호스트 기입들이 발생하는 것을 알 수 있다. 업데이트 블록은 논리적으로 순차적 순서로 충전되기 때문에 순차적 업데이트 블록으로서 고려된다. 업데이트 블록에 기록된 업데이트 데이터는 본래 블록에서 대응하는 것들을 폐기한다.In host write operation # 2, the data segments of the logical sectors LS9-LS12 are updated. The data updated as LS9'-LS12 'is written to the dedicated update block at the next position when the last writing is completed. It can be seen that two host writes occur such that the update data is written to the update block, that is, LS5'-LS12 'in logically sequential order. Update blocks are considered as sequential update blocks because they are logically filled in sequential order. The update data recorded in the update block discards the corresponding ones in the original block.

무순서 데이터 업데이트Random data update

무순서 업데이트 블록 관리는 연관된 논리 그룹내의 호스트에 의해 업데이트된 임의의 섹터가 논리적으로 비순차적일 때 기존 순차적 업데이트 블록에 대해 시작될 수 있다. 무순서 업데이트 블록은 연관된 논리 그룹내 논리 섹터들이 임의의 순서로 임의의 양의 반복으로 업데이트될 수 있는 데이터 업데이트 블록 형태이다. 이것은 호스트에 의해 기입된 섹터가 업데이트되는 논리 그룹내 이전에 기입된 섹터에 논리적으로 비순차적일 때 순차적 업데이트 블록으로부터 전환에 의해 생성된다. 논리 그룹내에서 추후 업데이트되는 모든 섹터들은, 어떤 논리 섹터가 그룹내 에 어드레스하든, 무순서 업데이트 블록내 다음 이용 가능한 섹터 위치에 기입된다.Random update block management can be initiated for an existing sequential update block when any sector updated by a host in the associated logical group is logically out of order. The random update block is in the form of a data update block in which logical sectors in the associated logical group can be updated in any order and in any amount of repetition. This is created by switching from the sequential update block when the sector written by the host is logically out of order to the previously written sector in the logical group to be updated. All sectors that are subsequently updated in the logical group are written to the next available sector location in the random update block, whatever logical sector addresses in the group.

도 7b는 무순서 업데이트 블록내 이중 섹터들 및 논리 그룹에 대한 본래 블록의 대체된 섹터들이 폐기되는 동안, 5개의 독립된 호스트 기입 동작들의 결과로서 무순서 업데이트 블록에 무순서 순서로 기입되는 논리 그룹내 섹터들의 예를 도시한다. 호스트 기입 동작 #1에서, 본래 메타블록내에 저장된 주어진 논리 그룹의 논리 섹터들(LS10-LS11)은 업데이트된다. 업데이트된 논리 섹터들(LS10'-LS11')은 새롭게 할당된 업데이트 블록에 저장된다. 이런 포인트에서, 업데이트 블록은 순차적 블록이다. 호스트 기입 동작 #2에서, 논리 섹터들(LS5-LS6)은 LS5'-LS6'으로서 업데이트되고 최종 기입 바로 다음 위치에서 업데이트 블록에 기록된다. 이것은 순차적 블록으로부터 무순서 블록으로 업데이트 블록을 전환한다. 호스트 기입 동작 #3에서, 논리 섹터(LS10)는 다시 업데이트되고 LS10"으로서 업데이트 블록의 다음 위치에 기록된다. 이런 포인트에서, 업데이트 블록의 LS10"은 이전 기록에서 LS10'을 대체하고, 차례로 본래 블록에서 LS10을 대체한다. 호스트 기입 동작 #4에서, 논리 섹터(LS10)의 데이터는 다시 업데이트되고 LS10'''으로서 업데이트 블록의 다음 위치에 기록된다. 따라서, LS10'''은 논리 섹터(LS10)에 대한 최신의 유효 데이터이다. 호스트 기입 동작 #5에서, 논리 섹터(LS30)의 데이터는 업데이트되고 LS30' 으로서 업데이트 블록에 기록된다. 따라서, 상기 실시예는 논리 그룹내 섹터들이 임의의 순서 및 임의의 반복으로 무순서 업데이트 블록에 기입되는 것을 도시한다.FIG. 7B shows in a logical group being written in random order to the random update block as a result of five independent host write operations, while the dual sectors in the random update block and the replaced sectors of the original block for the logical group are discarded. An example of sectors is shown. In host write operation # 1, logical sectors LS10-LS11 of a given logical group originally stored in the metablock are updated. The updated logical sectors LS10'-LS11 'are stored in the newly allocated update block. At this point, the update block is a sequential block. In host write operation # 2, logical sectors LS5-LS6 are updated as LS5'-LS6 'and written to the update block at the location immediately after the last write. This switches the update block from the sequential block to the random block. In host write operation # 3, the logical sector LS10 is updated again and written to the next position of the update block as LS10 ". At this point, LS10" of the update block replaces LS10 'in the previous write, which in turn replaces the original block. Replace LS10 in. In host write operation # 4, the data of logical sector LS10 is updated again and written to the next position of the update block as LS10 '' '. Therefore, LS10 '' 'is the latest valid data for the logical sector LS10. In host write operation # 5, the data of logical sector LS30 is updated and written to the update block as LS30 '. Thus, the above embodiment shows that sectors in a logical group are written to an out-of-order update block in any order and in any iteration.

강제 순차적 업데이트Forced sequential update

도 8은 논리 어드레스들에서 불연속성을 가진 두 개의 독립된 호스트 기입 동작들의 결과로서 순차적 업데이트 블록에 순차적 방식으로 기입된 논리 그룹에서 섹터들의 예를 도시한다. 호스트 기입 #1에서, 논리 섹터들(LS5-LS8)의 업데이트 데이터는 LS5'-LS8'으로서 전용 업데이트 블록에 기록된다. 호스트 기입 #2에서, 논리 섹터들(LS14-LS16)내 업데이트 데이터는 LS14'-LS16'으로서 최종 기입 다음 업데이트 블록에 기록된다. 그러나, LS8 및 LS14 사이에 어드레스 점프가 있고 호스트 기입 #2는 일반적으로 업데이트 블록이 비순차적이 되게 한다. 어드레스 점프가 중요하지 않기 때문에, 하나의 옵션은 호스트 기입 #2를 실행하기 전에 본래 블록으로부터 업데이트 블록으로 중재 섹터들의 데이터를 카피함으로써 패딩 동작(#2A)을 우선 수행하는 것이다. 이런 방식에서, 업데이트 블록의 순차적 성질은 유지된다.8 shows an example of sectors in a logical group written in a sequential manner to a sequential update block as a result of two independent host write operations with discontinuities at logical addresses. In host write # 1, update data of logical sectors LS5-LS8 is written to the dedicated update block as LS5'-LS8 '. In host write # 2, update data in logical sectors LS14-LS16 are written to the update block following the last write as LS14'-LS16 '. However, there is an address jump between LS8 and LS14 and host write # 2 generally causes the update block to be out of order. Since address jumps are not important, one option is to perform the padding operation # 2A first by copying the data of the arbitration sectors from the original block to the update block before executing host write # 2. In this way, the sequential nature of the update block is maintained.

도 9는 본 발명의 일반적인 실시예에 따라 데이터의 논리적 그룹을 업데이트하기 위하여 업데이트 블록 관리기에 의한 프로세스를 도시하는 흐름도이다. 업데이트 프로세스는 다음 단계들을 포함한다:9 is a flowchart illustrating a process by an update block manager to update a logical group of data in accordance with a general embodiment of the present invention. The update process includes the following steps:

단계 260: 메모리는 블록들로 구성되고, 각각의 블록은 함께 소거 가능한 메모리 단위들로 분할되고, 각각의 메모리 단위는 데이터의 논리 단위를 저장하기 위한 것이다.Step 260: The memory is composed of blocks, each block being divided into erasable memory units, each memory unit for storing a logical unit of data.

단계 262: 데이터는 논리 그룹들로 구성되고, 각각의 논리 그룹은 논리 단위들로 분할된다.Step 262: The data is organized into logical groups, each logical group being divided into logical units.

단계 264: 표준 경우, 논리 그룹의 모든 논리 단위들은 제 1 규정된 순서, 바람직하게 논리적으로 순차적인 순서에 따라 본래 블록의 메모리 단위들 사이에 저장된다. 이런 방식으로, 블록내 개별 논리 단위들로 액세스하기 위한 인덱스는 공지된다.Step 264: In the standard case, all logical units of a logical group are stored between the memory units of the original block in a first defined order, preferably in a logically sequential order. In this way, indexes for accessing individual logical units in a block are known.

단계 270: 데이터의 주어진 논리 그룹(예를 들어, LGx)에 대해, LGX내의 논리 단위를 업데이트하기 위한 요구가 이루어진다. (논리 단위 업데이트는 예로서 제공된다. 일반적으로 업데이트는 LGX내의 하나 이상의 인접한 논리 단위들의 세그먼트일 것이다).Step 270: For a given logical group of data (eg, LG x ), a request is made to update the logical unit in LG X. (Logical unit updates are provided by way of example. In general, an update will be a segment of one or more adjacent logical units in LG X ).

단계 272: 요구된 업데이트 논리 단위는 LGX의 업데이트들을 기록하는데 전용인 제 2 블록에 저장된다. 기록 순서는 제 2 순서에 따르고, 통상적으로 업데이트들이 요구되는 순서에 따른다. 본 발명의 하나의 특징은 논리적으로 순차적 또는 무순서 순서로 데이터를 기록하기 위하여 처음에 일반적으로 업데이트 블록이 설정되게 한다. 따라서 제 2 순서에 따라, 제 2 블록은 순차적 순서 또는 무순서 순서일 수 있다.Step 272: The requested update logical unit is stored in a second block dedicated to recording updates of LG X. The recording order is in the second order and typically in the order in which updates are required. One feature of the present invention is that an update block is generally set up initially to write data in logically sequential or random order. Therefore, according to the second order, the second block may be in sequential order or in random order.

단계 274: 제 2 블록은 단계 270으로 다시 프로세스 루프들로서 기록된 요구된 논리 단위들을 계속 가진다. 제 2 블록은 폐쇄를 위한 미리 결정된 조건이 실현될 때 추가 업데이트를 수신하는 것으로 폐쇄될 것이다. 상기 경우, 프로세스는 단계 276으로 진행한다.Step 274: The second block continues with the requested logical units written as process loops back to step 270. The second block will be closed by receiving further updates when a predetermined condition for closure is realized. In that case, the process proceeds to step 276.

단계 276: 폐쇄되든 되지 않든 결정이 이루어지고, 제 2 블록은 본래 블록과 유사한 순서로 기록된 업데이트 논리 단위들을 가진다. 두 개의 블록들은 그들이 도 3a와 관련하여 기술된 바와 같이 하나의 페이지 태그에 의해서만 다른 논리적 단위들을 기록할 때 유사한 순서를 가지는 것으로 고려된다. 만약 두 개의 블록들이 유사한 순서를 가지면 프로세스는 단계 280으로 진행하고, 그렇지 않으면 몇몇 종류의 가비지 수집부는 단계 290에서 수행될 필요가 있다.Step 276: A decision is made whether or not to be closed and the second block has update logic units written in an order similar to the original block. The two blocks are considered to have a similar order when they write different logical units only by one page tag as described in connection with FIG. 3A. If the two blocks have a similar order, the process proceeds to step 280, otherwise some sort of garbage collection needs to be performed in step 290.

단계 280: 제 2 블록이 제 1 블록과 동일한 순서를 가지기 때문에, 본래 제 1 블록을 대체하기 위하여 사용된다. 그 다음 업데이트 프로세스는 단계(299)에서 종료한다.Step 280: Since the second block has the same order as the first block, it is originally used to replace the first block. The update process then ends at step 299.

단계 290: 주어진 논리 그룹의 각각의 논리 단위들의 최신 버젼은 제 2 블록(업데이트 블록) 및 제 1 블록(본래 블록) 사이에서 모아진다. 주어진 논리 그룹의 통합된 논리 단위들은 제 1 블록과 유사한 순서로 제 3 블록에 기입된다.Step 290: The latest version of each logical unit of a given logical group is collected between a second block (update block) and a first block (original block). Integrated logical units of a given logical group are written to the third block in an order similar to the first block.

단계 292: 제 3 블록(통합된 블록)이 제 1 블록과 유사한 순서를 가지기 때문에, 본래 제 1 블록을 대체하기 위하여 사용된다. 업데이트는 단계 299에서 종료한다.Step 292: Since the third block (integrated block) has a similar order as the first block, it is originally used to replace the first block. The update ends at step 299.

단계 299: 폐쇄처리가 완전한 업데이트 블록을 생성할 때, 상기 블록은 주어진 논리 그룹에 대해 새로운 표준 블록이 된다. 논리적 그룹에 대한 업데이트 스레드는 종료될 것이다.Step 299: When the closing process generates a complete update block, the block becomes a new standard block for a given logical group. The update thread for the logical group will end.

도 10은 본 발명의 바람직한 실시예에 따라 데이터의 논리 그룹을 업데이트하기 위하여 업데이트 블록 관리기에 의한 프로세스를 도시하는 흐름도이다. 업데이트 프로세스는 다음 단계들을 포함한다:10 is a flow chart illustrating a process by an update block manager to update a logical group of data in accordance with a preferred embodiment of the present invention. The update process includes the following steps:

단계 310: 데이터의 주어진 논리 그룹(예를 들어, LGX)에 대해, LGX내의 논리 섹터를 업데이트하기 위한 요구가 이루어진다. (섹터 업데이트는 예로서 주어진다. 일반적으로 업데이트는 LGX내의 하나 이상의 인접한 논리 섹터들의 세그먼트일 것이다).Step 310: For a given logical group of data (eg, LG X ), a request is made to update a logical sector in LG X. (Sector updates are given by way of example. In general, an update will be a segment of one or more adjacent logical sectors in the LG X ).

단계 312: 만약 LGX에 전용인 업데이트 블록이 미리 존재하지 않으면, 논리 그룹에 대한 새로운 업데이트를 시작하기 위하여 단계 410으로 진행한다. 이것은 논리 그룹의 업데이트 데이터를 기록하는 것에 전용으로 사용되는 업데이트 블록을 할당함으로써 달성될 것이다. 만약 업데이트 블록이 이미 개방되었다면, 업데이트 블록상에 업데이트 섹터를 기록하는 것을 시작하기 위하여 단계 314로 진행한다.Step 312: If there is no update block dedicated to the LG X in advance, proceed to step 410 to start a new update for the logical group. This will be accomplished by assigning an update block dedicated to recording the update data of the logical group. If the update block has already been opened, proceed to step 314 to begin writing the update sector on the update block.

단계 314: 만약 현재 업데이트 블록이 이미 혼란하면(즉, 비순차적), 무순서 업데이트 블록상에 요구된 업데이트 섹터를 기록하기 위한 단계 510으로 간단히 진행한다. 만약 현재 업데이트 블록이 순차적이면, 순차적 업데이트 블록의 처리를 위해 단계 316으로 진행한다.Step 314: If the current update block is already confused (ie, out of order), simply proceed to step 510 to write the required update sector on the random update block. If the current update block is sequential, flow proceeds to step 316 for processing of the sequential update block.

단계 316: 본 발명의 하나의 특징은 업데이트 블록이 논리적으로 순차적 순서 또는 무순서 순서로 데이터를 기록하는 것으로 처음으로 일반적으로 설정되게 한다. 그러나, 논리 그룹이 궁극적으로 논리적으로 순차적 순서로 메타블록에 저장된 데이터를 가지기 때문에, 가능한 한 업데이트 블록 순서를 유지하는 것은 바람직하다. 보다 적은 처리는 가비지 수집이 필요하지 않을 추가 업데이트들로 업데이트 블록이 근접될 때 요구될 것이다. Step 316: One feature of the present invention is that the update block is generally initially set to write data in logically sequential or random order. However, since logical groups ultimately have data stored in metablocks in logically sequential order, it is desirable to maintain the update block order as much as possible. Less processing will be required when the update block approaches with additional updates that will not require garbage collection.

따라서 요구된 업데이트가 업데이트 블록의 현재 순차적 순서를 따를지에 대한 결정이 이루어진다. 만약 업데이트가 순차적으로 따르면, 순차적 업데이트를 수행하기 위하여 단계 510으로 진행하고, 업데이트 블록은 순차적으로 유지할 것이다. 다른 한편, 만약 업데이트가 순차적이지 않으면(무순서 업데이트), 다른 작용들이 취해지지 않는 경우 순차적 업데이트 블록을 무순서 블록으로 전환할 것이다.Thus, a determination is made whether the requested update will follow the current sequential order of the update blocks. If the updates follow sequentially, proceed to step 510 to perform a sequential update, and update blocks will remain sequentially. On the other hand, if the update is not sequential (random update), it will switch the sequential update block to the random block if no other actions are taken.

일 실시예에서, 상기 상황을 구하기 위한 많은 것들이 수행되고 프로세스는 직접적으로 업데이트가 업데이트 블록을 무순서 블록으로 전환하게 하는 단계 370으로 진행한다.In one embodiment, much is done to obtain the situation and the process proceeds directly to step 370 where the update causes the update block to switch to the random block.

선택적 강제 순차적 프로세스Optional forced sequential process

다른 실시예에서, 강제 순차적 프로세스 단계 320은 계류중인 무순서 업데이트의 측면에서 가능한 한 순차적 업데이트 블록을 유지하기 위하여 선택적으로 수행된다. 두 개의 상황들이 있고, 그 모두는 업데이트 블록상에 기록된 논리 섹터들의 순차적 순서를 유지하기 위하여 본래 블록으로부터 빠진 섹터들을 카피하는 것을 요구한다. 제 1 상황은 업데이트가 짧은 어드레스 점프를 생성하는 경우이다. 제 2 상황은 순서를 유지하기 위해 업데이트 블록을 미리 폐쇄하는 것이다. 강제 순차적 프로세서 단계 320은 다음 서브단계들을 포함한다:In another embodiment, forced sequential process step 320 is optionally performed to maintain sequential update blocks as much as possible in terms of pending random updates. There are two situations, all of which require copying sectors missing from the original block to maintain the sequential order of the logical sectors written on the update block. The first situation is when the update produces a short address jump. The second situation is to close the update block in advance to maintain order. Forced sequential processor step 320 includes the following substeps:

단계 330: 만약 업데이트가 미리 결정된 양(CB)보다 크지 않는 논리 어드레스 점프를 생성하면, 프로세스는 단계 350의 강제 순차적 업데이트 프로세스로 진행하고, 그렇지 않으면 강제 순차적 폐쇄를 위해 적합한지를 고려하기 위하여 단계 340으로 진행한다.Step 330: If the update produces a logical address jump that is not greater than the predetermined amount C B , the process proceeds to the forced sequential update process of step 350, otherwise considering step 340 to consider whether it is suitable for forced sequential closure. Proceed to

단계 340: 만약 충전되지 않은 물리적 섹터들의 수가 미리 결정된 설계 파라미터(CC)를 초과하면 - 상기 파라미터의 통상적인 값은 업데이트 블록의 크기의 절반임 -, 업데이트 블록은 상대적으로 사용되지 않고 미리 폐쇄되지 않을 것이다. 프로세스는 단계 370으로 진행하고 업데이트 블록은 혼란하게 될 것이다. 다른 한편, 만약 업데이트 블록이 실질적으로 충전되면, 상기 블록이 미리 사용되었고 그러므로 강제 순차 폐쇄를 위한 단계 360으로 지향된다.Step 340: If the number of unfilled physical sectors exceeds a predetermined design parameter C C -the typical value of the parameter is half the size of the update block-the update block is relatively unused and not closed in advance Will not. The process proceeds to step 370 and the update block will be confusing. On the other hand, if the update block is substantially filled, the block has been used in advance and is therefore directed to step 360 for forced sequential closure.

단계 350: 강제 순차적 업데이트는 어드레스 점프가 미리 결정된 양(CB)을 초과하지 않는 한 현재 순차적 업데이트 블록이 순서를 유지하게 한다. 필수적으로, 본래 블록과 연관된 업데이트 블록으로부터의 섹터들은 어드레스 점프에 의해 걸쳐진 갭을 충전하기 위하여 카피된다. 따라서, 순차적 업데이트 블록은 현재 업데이트를 순차적으로 기록하기 위하여 단계 510으로 진행하기 전에 중재 어드레스의 데이터가 패드될 것이다.Step 350: Forced sequential update causes the current sequential update block to remain in order unless the address jump exceeds a predetermined amount C B. Essentially, sectors from the update block associated with the original block are copied to fill the gaps covered by the address jumps. Thus, in the sequential update block, the data of the arbitration address will be padded before proceeding to step 510 to sequentially record the current update.

단계 360: 강제 순차적 폐쇄는 계류중인 무순서 업데이트에 의해 무순서 것으로 전환되기보다 실질적으로 충전되면 현재 순차적 업데이트 블록이 폐쇄되게 한다. 혼란하거나 비순차적 업데이트는 상기된 어드레스 점프 예외에 의해 커버되지않은 순방향 어드레스 전이, 역방향 어드레스 전이, 또는 어드레스 수신을 가지는 것으로 정의된다. 순차적 업데이트 블록이 무순서 업데이트에 의해 전환되는 것을 방지하기 위하여, 업데이트 블록의 기입되지 않은 세터 위치들은 업데이트 블록의 연관된 본래 부분적으로 폐기 블록으로부터 섹터들을 카피함으로써 충전된다. 그 다음 본래 블록은 완전히 폐기되고 소거될 수 있다. 현재 업데이트 블록은 논리 섹터들의 전체 세트를 가지며 그 다음 본래 메타블록을 대체하는 완전한 메타블록으로서 폐쇄된다. 그 다음 프로세스는 단계 310에서 우선 요구되었던 계류중인 섹터 업데이트의 기록을 허용하기 위하여 적소에 배치된 새로운 업데이트 블록을 가지기 위하여 단계 430으로 진행한다.Step 360: Forced sequential closure causes the current sequential update block to be closed if it is substantially filled rather than converted to random by the pending random update. Confused or out-of-order updates are defined as having forward address transitions, reverse address transitions, or address receptions that are not covered by the address jump exception described above. In order to prevent the sequential update block from being switched by random updates, the unwritten setter positions of the update block are filled by copying sectors from the associated original partially discarded block of the update block. The original block can then be completely discarded and erased. The current update block has a complete set of logical sectors and is then closed as a complete metablock replacing the original metablock. The process then proceeds to step 430 to have a new update block placed in place to allow the recording of pending sector updates that were first requested in step 310.

무순서 업데이트 블록으로의 전환Switch to random update block

단계 370: 계류중인 업데이트가 순차적 순서가 아니고 선택적으로 만약 강제 순차적 조건들이 만족되지 않을 때, 순차적 업데이트 블록은 프로세스가 단계 510으로 진행할 때 비순차적 어드레스를 가진 계류중인 업데이트 섹터가 업데이트 블록상에 기록되게 한다는 사실에 의해 무순서 것으로 전환되게 한다. 만약 무순서 업데이트 블록들의 최대 수가 존재하면, 전환이 진행되기 전에 최근 최소 액세스된 무순서 업데이트 블록을 폐쇄할 필요가 있다; 따라서 무순서 블록들의 최대 수가 초과되는 것을 방지한다. 최근 최소 액세스된 무순서 업데이트 블록의 식별은 단계 420에 기술된 일반적인 경우와 동일하지만, 단지 무순서 업데이트 블록들로 제한된다. 이런 시점에서 무순서 업데이트 블록을 폐쇄하는 것은 단계 550에 기술된 바와 같이 통합에 의해 달성된다.Step 370: The pending update is not in sequential order and optionally if the forced sequential conditions are not satisfied, the sequential update block causes the pending update sector with the non-sequential address to be written on the update block when the process proceeds to step 510. By the fact that it is converted to random. If there is a maximum number of random update blocks, it is necessary to close the latest minimum accessed random update block before the switchover proceeds; Thus, the maximum number of random blocks is prevented from being exceeded. The identification of the latest minimally accessed random update block is the same as the general case described in step 420, but is limited to only random update blocks. Closing the random update block at this point is accomplished by consolidation as described in step 550.

시스템 제한에 영향을 받는 새로운 업데이트 블록의 할당Allocation of new update blocks affected by system limitations

단계 410: 업데이트 블록으로서 소거 메타블록을 할당하는 프로세스는 미리 결정된 시스템 제한이 초과되는지 아닌지 결정에서 시작한다. 한정된 리소스들로 인해, 메모리 관리 시스템은 통상적으로 업데이트 블록들(UMAX)의 미리 결정된 최대 수가 동시에 존재하게 한다. 이런 제한은 순차적 업데이트 블록들 및 무순서 업데이트 블록들의 집단이고, 설계 파라미터이다. 바람직한 실시예에서, 제한은 예를 들어 최대 8 업데이트 블록들이다. 또한, 시스템 리소스들 상 보다 높은 수요로 인해, 동시에 개방될 수 있는 최대 수의 무순서 업데이트 블록들 상에 대응하는 미리 결정된 제하니 있을 수 있다(예를 들어, 4).Step 410: The process of assigning an erase metablock as an update block begins with determining whether a predetermined system limit is exceeded. Due to limited resources, the memory management system typically causes a predetermined maximum number of update blocks U MAX to exist simultaneously. This limit is a collection of sequential update blocks and random update blocks, and is a design parameter. In a preferred embodiment, the limit is for example up to 8 update blocks. In addition, due to higher demand on system resources, there may be a corresponding predetermined limit on the maximum number of random update blocks that may be open at the same time (eg, 4).

따라서, UMAX 업데이트 블록들이 이미 할당되었을 때, 다음 할당 요구는 기존 할당된 것들 중 하나를 폐쇄한 후에만 만족될 수 있다. 프로세스는 단계 420으로 진행한다. 개방 업데이트 블록들의 수가 CA 미만일 때, 프로세스는 단계 430으로부터 직접 진행한다.Thus, when U MAX update blocks have already been allocated, the next allocation request can only be satisfied after closing one of the existing allocations. The process proceeds to step 420. When the number of open update blocks is less than C A , the process proceeds directly from step 430.

단계 420: 업데이트 블록들(CA)의 최대 수가 초과되는 경우, 최근 최소 액세스된 업데이트 블록은 폐쇄되고 가비지 수집은 수행된다. 최근 최소 액세스된 업데이트 블록은 최근 최소 액세스된 논리 블록과 연관된 업데이트 블록으로서 식별된다. 최근 최소 액세스된 블록들을 결정하기 위하여, 액세스는 논리 섹터들의 기입들 및 선택적으로 판독들을 포함한다. 개방 업데이트 블록들의 리스트가 액세스 순서로 유지되고; 처음에 액세스 순서는 가정되지 않는다. 업데이트 블록의 폐쇄는 업데이트 블록이 순차적일 때 단계 360 및 단계 530, 및 업데이트 블록이 혼란할 때 단계 540과 관련하여 기술된 것과 유사한 프로세스를 따른다. 폐쇄는 단계 430에서 새로운 업데이트 블록의 할당을 위한 룸을 형성한다.Step 420: If the maximum number of update blocks C A is exceeded, the most recently accessed update block is closed and garbage collection is performed. The latest least accessed update block is identified as the update block associated with the most recently accessed logical block. To determine the latest least accessed blocks, the access includes writes and optionally reads of logical sectors. A list of open update blocks is maintained in the access order; Initially no access order is assumed. Closure of the update block follows a process similar to that described in connection with step 360 and step 530 when the update blocks are sequential, and step 540 when the update block is confused. Closure forms a room for allocation of new update blocks in step 430.

단계 430: 할당 요구는 주어진 논리 그룹(LGX)에 전용으로 사용되는 업데이트 블록으로서 새로운 메타블록의 할당으로 충족된다. 프로세스는 단계 510으로 진행한다.Step 430: The allocation request is satisfied with the allocation of a new metablock as an update block dedicated to a given logical group LG X. The process proceeds to step 510.

업데이트 블록상 업데이트 데이터 기록Write update data on update block

단계 510: 요구된 업데이트 섹터는 업데이트 블록의 다음 이용 가능한 물리적 위치에 기록된다. 프로세스는 만약 업데이트 블록이 막 폐쇄를 하였는지를 결정하기 위하여 단계 520으로 진행한다.Step 510: The requested update sector is written to the next available physical location of the update block. The process proceeds to step 520 to determine if the update block has just closed.

업데이트 블록 폐쇄Update block closure

단계 520: 만약 업데이트 블록이 부가적인 업데이트들을 허용하기 위한 룸을 가지면, 단계 570으로 진행한다. 그렇지 않으면 업데이트 블록을 폐쇄하기 위하여 단계(522)로 진행한다. 블록보다 많은 논리 섹터들을 기입하기 위한 현재 요구된 기입 시도들이 룸을 가질 때 업데이트 블록을 충전하기 위한 두 개의 가능한 실행들이 있다. 제 1 실행시, 기입 요구는 두 개의 부분들로 분할되고, 제 1 부분은 블록의 최종 물리적 섹터에 기입하는 것이다. 그 다음 블록은 폐쇄되고 기입의 제 2 부분은 다음 요구된 기입으로서 처리될 것이다. 다른 실행에서, 요구된 기입은 제한되고 블록은 패드된 섹터들을 유지되게 하고 그 다음 폐쇄된다. 요구된 기입은 다음 요구된 기입으로서 처리된다.Step 520: If the update block has room to allow additional updates, go to step 570. Otherwise proceed to step 522 to close the update block. There are two possible implementations for charging the update block when the currently required write attempts to write more logical sectors than the block have room. In a first implementation, the write request is split into two parts, the first part being to write to the final physical sector of the block. The next block is then closed and the second portion of the write will be treated as the next requested write. In another implementation, the required write is limited and the block keeps padded sectors and then closes. The requested write is processed as the next requested write.

단계 522: 만약 업데이트 블록이 순차적이면, 순차적 폐쇄를 위하여 단계 530으로 진행한다. 만약 업데이트 블록이 혼란하면, 무순서 폐쇄를 위하여 단계 540으로 진행한다.Step 522: If the update blocks are sequential, proceed to step 530 for sequential closure. If the update block is confused, proceed to step 540 for random closure.

순차적 업데이트 블록 폐쇄Sequential Update Block Closure

단계 530: 업데이트 블록이 순차적이고 완전히 충전되기 때문에, 그 내부에 저장된 논리 그룹은 완전하다. 메타블록은 완전하고 본래 것을 대체한다. 이때, 본래 블록은 완전히 폐기되고 소거될 수 있다. 그 다음 프로세스는 단계 570으로 진행하고 주어진 논리 그룹에 대한 업데이트 스레드는 종료한다.Step 530: Since the update blocks are sequential and fully charged, the logical group stored therein is complete. Metablocks are complete and replace the original ones. At this time, the original block can be completely discarded and erased. The process then proceeds to step 570 where the update thread for the given logical group ends.

무순서 업데이트 블록 폐쇄Random update block closure

단계 540: 업데이트 블록이 비순차적으로 충전되고 몇몇 논리 섹터들의 다중 업데이트들을 포함하기 때문에, 가비지 수집은 그 내부의 유효 데이터를 이용하기 위하여 수행된다. 무순서 업데이트 블록은 컴팩트화되고 통합된다. 어느 프로세스를 수행할 가는 단계 542에서 결정될 것이다.Step 540: Since the update block is filled out of order and includes multiple updates of several logical sectors, garbage collection is performed to use valid data therein. The random update block is compact and integrated. Which process to perform will be determined in step 542.

단계 542: 컴팩트화 또는 통합을 수행하는 것은 업데이트 블록의 퇴화에 의존할 것이다. 만약 논리 섹터가 다수번 업데이트되면, 논리 어드레스가 퇴화한다. 업데이트 블록상에 기록된 동일한 논리 섹터의 다중 버전들이 있고 최종 기록된 버전만이 논리 섹터를 위하여 유효한 것이다. 다중 버전들을 가진 논리 섹터들을 포함하는 업데이트 블록에서, 별개의 논리 섹터들의 수는 논리 그룹의 수 미만일 것이다.Step 542: Performing compaction or consolidation will depend on the degeneration of the update block. If the logical sector is updated many times, the logical address degenerates. There are multiple versions of the same logical sector written on the update block and only the last recorded version is valid for the logical sector. In an update block that includes logical sectors with multiple versions, the number of distinct logical sectors will be less than the number of logical groups.

바람직한 실시예에서, 업데이트 블록의 별개의 논리 섹터들의 수가 미리 결정된 설계 파라미터(CD)를 초과할 때 - 상기 파라미터의 통상적인 값은 논리 그룹의 크기의 절반임 -, 폐쇄 프로세스는 단계 550의 통합을 수행할 것이고, 그렇지 않으면 프로세스는 단계 560에서 컴팩트화로 진행할 것이다.In a preferred embodiment, when the number of distinct logical sectors of the update block exceeds a predetermined design parameter C D , where the typical value of the parameter is half the size of the logical group, the closing process is incorporated in step 550. Otherwise, the process will proceed to compaction at step 560.

단계 550: 만약 무순서 업데이트 블록이 통합되면, 본래 블록 및 업데이트 블록은 통합된 데이터를 포함하는 새로운 표준 메타블록에 의해 대체될 것이다. 통합 후 업데이트 스레드는 단계 570에서 종료할 것이다.Step 550: If the random update block is merged, the original block and update block will be replaced by a new standard metablock that contains the merged data. The post update thread will terminate at step 570.

단계 560: 만약 무순서 업데이트 블록이 컴팩트화되면, 컴팩트화된 데이터를 보유한 새로운 업데이트 블록에 의해 대체될 것이다. 컴팩트화 후 컴팩트화된 업데이트 블록의 처리는 단계 570에서 종료될 것이다. 선택적으로, 컴팩트화는 업데이트 블록이 다시 기입될 때까지 지연될 수 있고, 따라서 업데이트들을 중재하지 않고 통합 다음 컴팩트화 가능성을 제거한다. 새로운 업데이트 블록은 LGX에서 업데이트에 대한 다음 요구가 단계 502에서 나타날 때, 주어진 논리 블록의 추가 업데이트에 사용된다.Step 560: If the random update block is compacted, it will be replaced by a new update block containing the compacted data. After compacting, processing of the compacted update block will end in step 570. Optionally, compaction can be delayed until the update block is rewritten, thus eliminating the possibility of consolidation next compaction without arbitrating the updates. The new update block is used for further update of the given logical block when the next request for update in LG X appears in step 502.

단계 570: 폐쇄 프로세스가 완전한 업데이트 블록을 생성할 때, 주어진 논리 그룹에 대해 새로운 표준 블록이 된다. 논리 그룹에 대한 업데이트 스레드는 종료될 것이다. 폐쇄 프로세스가 기존 것을 대체하는 새로운 업데이트 블록을 생성할 때, 새로운 업데이트 블록은 주어진 논리 그룹을 위하여 요구된 다음 업데이트를 기록하기 위하여 사용될 것이다. 업데이트 블록이 폐쇄되지 않을 때, 프로세싱은 LGX의 업데이트를 위한 다음 요구가 단계 310에서 나타날 때까지 계속할 것이다.Step 570: When the closure process generates a complete update block, it becomes a new standard block for a given logical group. The update thread for the logical group will end. When the closure process creates a new update block that replaces an existing one, the new update block will be used to record the next update required for a given logical group. When the update block is not closed, processing will continue until the next request for the update of LG X appears in step 310.

상기된 프로세스로부터 알 수 있는 바와 같이, 무순서 업데이트 블록이 폐쇄 될 때, 그 위에 기록된 업데이트 데이터는 추가로 처리된다. 특히 유효 데이터는 다른 무순서 블록에 대한 컴팩트화 프로세스, 또는 새로운 표준 순차적 블록을 형성하기 위하여 연관된 본래 블록과 통합 처리에 의해 가비지 수집된다.As can be seen from the above process, when the random update block is closed, the update data recorded thereon is further processed. In particular, valid data is garbage collected by a compacting process for other random blocks, or by integrating with the original block associated with it to form a new standard sequential block.

도 11a는 도 10에 도시된 무순서 업데이트 블록을 폐쇄하는 통합 프로세스를 상세히 도시하는 흐름도이다. 무순서 업데이트 블록 통합은 업데이트 블록이 폐쇄될 때, 예를 들어 업데이트 블록이 기입된 최종 물리적 섹터 위치에 대해 가득 찰 때 수행되는 두 개의 가능한 프로세스들 중 하나이다. 통합은 블록내에 기입된 별개의 논리적 섹터들의 수가 미리 결정된 설계 파라미터(CD)를 초과할 때 선택된다. 도 10에 도시된 통합 프로세스 단계 550은 다음 서브단계들을 포함한다:FIG. 11A is a flowchart detailing an integration process for closing the random update block shown in FIG. 10. Random update block consolidation is one of two possible processes that are performed when the update block is closed, for example when the update block is full for the last physical sector location written. Integration is selected when the number of distinct logical sectors written in the block exceeds a predetermined design parameter C D. The integration process step 550 shown in FIG. 10 includes the following substeps:

단계 551: 무순서 업데이트 블록이 폐쇄될 때, 이를 대체하는 새로운 메타블록은 할당될 것이다.Step 551: When the random update block is closed, a new metablock that replaces it will be allocated.

단계 552: 무순서 업데이트 블록 및 연관된 본래 블록 사이의 각각의 논리 섹터의 최신 버전을 수집하고, 모든 폐기된 섹터들을 무시한다.Step 552: Collect the latest version of each logical sector between the random update block and the associated original block, ignoring all discarded sectors.

단계 554: 완전한 블록, 즉 순차적 순서로 기록된 논리적 그룹의 모든 논리 섹터들을 가진 블록을 형성하기 위하여 논리적으로 순차적 순서로 새로운 메타블록상에 모아진 유효 섹터들을 기록한다.Step 554: Write valid sectors collected on the new metablock in logical sequential order to form a complete block, ie a block with all logical sectors of the logical group written in sequential order.

단계 556: 새로운 환전한 블록으로 본래 블록을 대체한다.Step 556: Replace the original block with the new exchanged block.

단계 558: 폐쇄된 업데이트 블록 및 본래 블록을 소거한다.Step 558: Clear the closed update block and the original block.

도 11b는 도 10에 도시된 무순서 업데이트 블록을 폐쇄하기 위한 컴팩트화 프로세스를 보다 상세하게 도시하는 흐름도이다. 컴팩트화는 블록내에 기입된 별개의 논리 섹터들의 수가 미리 결정된 설계 파라미터(CS) 미만일 때 선택된다. 도 10에 도시된 컴팩트화 프로세스 단계 560은 다음 서브단계들을 포함한다:FIG. 11B is a flow chart illustrating in more detail the compaction process for closing the random update block shown in FIG. 10. Compaction is selected when the number of distinct logical sectors written in the block is less than the predetermined design parameter C S. Compaction process step 560 shown in FIG. 10 includes the following substeps:

단계 561: 무순서 업데이트 블록이 컴팩트화될 때, 이를 대체하는 새로운 메타블록은 할당될 것이다.Step 561: When the random update block is compacted, a new metablock that replaces it will be allocated.

단계 562: 컴팩트화될 기존 무순서 업데이트 블록 사이에서 각각의 논리 섹터의 최신 버전을 모은다.Step 562: Collect the latest version of each logical sector between existing random update blocks to be compacted.

단계 564: 컴팩트화된 섹터들을 가진 새로운 업데이트 블록을 형성하기 위하여 새로운 업데이트 블록상에 모아진 섹터들을 기록한다.Step 564: Record the collected sectors on the new update block to form a new update block with compacted sectors.

단계 566: 컴팩트화된 섹터들을 가진 새로운 업데이트 블록으로 기존 업데이트 블록을 대체한다.Step 566: Replace the existing update block with a new update block with compacted sectors.

단계 568: 폐쇄된 업데이트 블록을 소거한다.Step 568: Clear the closed update block.

논리 및 메타블록 상태들Logical and Metablock States

도 12a는 논리 그룹의 모든 가능한 상태들, 및 다양한 동작들 하에서 상기 상태들 사이의 가능한 전이들을 도시한다.12A shows all possible states of a logical group, and possible transitions between the states under various operations.

도 12b는 논리 그룹의 가능한 상태들을 기술하는 테이블이다. 논리 그룹 상태들은 다음과 같이 정의된다:12B is a table describing the possible states of a logical group. Logical group states are defined as follows:

1. 완전한: 논리 그룹내 모든 논리 섹터들은 단일 메타블록에서 페이지 태그 랩 어라운드를 사용하여 논리적으로 순차적 순서로 기입된다.1. Complete: All logical sectors in a logical group are written in logical sequential order using page tag wrap around in a single metablock.

2. 미기입된: 논리 그룹내 논리 섹터가 결코 기입되지 않는다. 논리 그룹은 그룹 어드레스 테이블에 미기입된 것으로 표시되고 할당된 메타블록을 가지지 않는다. 미리 정의된 데이터 패턴은 이 그룹내 모든 섹터에 대한 호스트 판독에 응답하여 리턴된다.2. Unwritten: Logical sectors in a logical group are never written. The logical group is marked as unwritten in the group address table and does not have an assigned metablock. Predefined data patterns are returned in response to host reads for all sectors in this group.

3. 순차적 업데이트: 논리 그룹내 몇몇 섹터들은 페이지 태그를 사용하여 메타블록내에서 논리적으로 순차적 순서로 기입되고, 이에 따라 상기 섹터들은 그룹의 임의의 이전 완전한 상태로부터 대응하는 논리 섹터들을 대체한다.3. Sequential Update: Some sectors in the logical group are written in logically sequential order within the metablock using the page tag, thus replacing the corresponding logical sectors from any previous complete state of the group.

4. 무순서 업데이트: 논리 그룹내 몇몇 섹터들은 페이지 태그를 사용하여 메타블록내 논리적으로 비순차적 순서로 기입되고, 이에 따라 상기 섹터들은 그룹의 임의의 이전 완전한 상태로부터 대응하는 논리 섹터들을 대체한다. 그룹내 섹터는 한번 이상 기입될 수 있고, 최신 버젼은 모든 이전 버전들을 대체한다.4. Out of order update: Some sectors in a logical group are written in a logically out-of-order order in the metablock using page tags, thus replacing the corresponding sectors from any previous complete state of the group. Sectors in a group can be written more than once, and the latest version replaces all previous versions.

도 13a는 메타블록의 모든 가능한 상태들, 및 다양한 동작들 하에서 이들 상태들 사이의 가능한 전이들을 도시한다.13A shows all possible states of a metablock, and possible transitions between these states under various operations.

도 13b는 메타블록의 가능한 상태들을 기술하는 테이블이다. 메타블록 상태들은 다음과 같이 정의된다:13B is a table describing the possible states of a metablock. Metablock states are defined as follows:

1. 소거: 메타블록내 모든 섹터들은 소거된다.1. Erase: All sectors in the metablock are erased.

2. 순차적 업데이트: 메타블록은 페이지 태그를 사용하여 논리적으로 순차적 순서로 섹터들이 부분적으로 기입된다. 모든 섹터들은 동일한 논리 그룹에 속한다.2. Sequential Update: Metablocks are partially written sectors in logically sequential order using page tags. All sectors belong to the same logical group.

3. 무순서 업데이트는 논리적으로 비순차적 순서로 섹터들이 부분적으로 또는 완전히 기입된다. 임의의 섹터는 한번 이상 기입될 수 있다. 모든 섹터들은 동 일한 논리 그룹에 속한다.3. The out of order update is where the sectors are partially or completely written in logically out of order. Any sector can be written more than once. All sectors belong to the same logical group.

4. 완전한: 메타블록은 페이지 태그를 사용하여 논리적으로 순차적 순서로 완전히 기입된다.4. Complete: Metablocks are written completely in logical sequential order using page tags.

5. 본래: 메타블록은 이전에 완전하였지만 적어도 하나의 섹터는 호스트 데이터 업데이트에 의해 폐기된다.5. Originally: The metablock was previously complete but at least one sector is discarded by the host data update.

도 14(a)-14(j)는 논리 그룹의 상태 및 물리적 메타블록상에서 다양한 동작들의 효과를 도시하는 상태도이다.14 (a) -14 (j) are state diagrams illustrating the state of logical groups and the effects of various operations on physical metablocks.

도 14(a)는 제 1 기입 동작 동안 논리 그룹 및 메타블록 전이들에 대응하는 상태도를 도시한다. 호스트는 새롭게 할당된 소거 메타블록에 논리적으로 순차적 순서로 이전에 미기입된 논리 그룹의 하나 이상의 섹터들을 기입한다. 논리 그룹 및 메타블록은 순차적 업데이트 상태로 진행한다.14 (a) shows a state diagram corresponding to logical group and metablock transitions during a first write operation. The host writes one or more sectors of a previously unwritten logical group in logically sequential order to the newly allocated erase metablock. Logical groups and metablocks proceed in a sequential update state.

도 14(b)는 제 1 완전한 동작 동안 논리 그룹 및 메타블록 전이들에 대응하는 상태도를 도시한다. 이전에 미기입된 순차적 업데이트 논리 그룹은 모든 섹터들이 호스트에 의해 순차적으로 기입될 때 완전하게 된다. 전이는 미리 정의된 데이터 패턴으로 나머지 미기입된 섹터들을 충전함으로써 카드가 그룹을 충전하면 발생한다. 메타블록은 완전하게 된다.14 (b) shows a state diagram corresponding to logical group and metablock transitions during the first complete operation. The previously unwritten sequential update logical group is complete when all sectors are written sequentially by the host. The transition occurs when the card fills a group by charging the remaining unwritten sectors with a predefined data pattern. The metablock is complete.

도 14(c)는 제 1 무순서 동작 동안 논리 그룹 및 메타블록 전이들에 대응하는 상태도들을 도시한다. 이전에 미기입된 순차적 업데이트 논리 그룹은 적어도 하나의 섹터가 호스트에 의해 비순차적으로 기입될 때 혼란된다.14C shows state diagrams corresponding to logical group and metablock transitions during the first random operation. The previously unwritten sequential update logical group is confused when at least one sector is written out of order by the host.

도 14(d)는 제 1 컴팩트화 동작 동안 논리 그룹 및 메타블록 전이들에 대응 하는 상태도를 도시한다. 이전에 미기입된 무순서 업데이트 논리 그룹내 모든 유효한 섹터들은 오래된 블록으로부터 새로운 무순서 메타블록에 카피되고, 그 다음 소거된다.14 (d) shows a state diagram corresponding to logical group and metablock transitions during the first compaction operation. All valid sectors in the previously unordered random update logical group are copied from the old block into the new random metablock and then erased.

도 14(e)는 제 1 통합 동작 동안 논리 그룹 및 메타블록 전이들에 대응하는 상태도들을 도시한다. 이전에 미기입된 무순서 업데이트 논리 그룹내 모든 유효 섹터들은 논리적으로 순차적 순서로 새롭게 할당된 소거 블록을 충전하기 위하여 오래된 무순서 블록으로부터 이동된다. 호스트에 의해 미기입된 섹터들은 미리 정의된 데이터 패턴이 충전된다. 그 다음 오래된 무순서 블록은 소거된다.14 (e) shows state diagrams corresponding to logical group and metablock transitions during the first coalescing operation. All valid sectors in the previously unordered random update logical group are moved from the old randomly ordered blocks to fill the newly allocated erased blocks in logically sequential order. Sectors not written by the host are filled with a predefined data pattern. The old random blocks are then erased.

도 14(f)는 순차적 기입 동작 동안 논리 그룹 및 메타블록 전이들에 대응하는 상태도들을 도시한다. 호스트는 새롭게 할당된 소거 메타블록에 논리적으로 순차적 순서로 완전한 논리 그룹의 하나 이상의 섹터들을 기입한다. 논리 그룹 및 메타블록은 순차적 업데이트 상태로 진행한다. 이전에 완전한 메타블록은 본래 메타블록이 된다.14 (f) shows state diagrams corresponding to logical group and metablock transitions during a sequential write operation. The host writes one or more sectors of the complete logical group in logically sequential order to the newly allocated erase metablock. Logical groups and metablocks proceed in a sequential update state. Previously, complete metablocks are inherently metablocks.

도 14(g)는 순차적 충전 동작 동안 논리적 그룹 및 메타블록에 대응하는 상태도들을 도시한다. 순차적 업데이트 논리 그룹은 모든 섹터들이 호스트에 의해 순차적으로 기입될 때 완전하게 된다. 이것은 순차적 업데이트 논리 그룹이 완전하게 되기 위하여 본래 블록으로부터 유효한 섹터들이 충전될 때 가비지 수집 동안 발생할 수 있고, 그 후 본래 블록은 소거된다.14 (g) shows state diagrams corresponding to logical groups and metablocks during sequential charging operation. The sequential update logical group is complete when all sectors are written sequentially by the host. This may occur during garbage collection when valid sectors from the original block are filled to make the sequential update logical group complete, after which the original block is erased.

도 14(h)는 비순차적 기입 동작 동안 논리 그룹 및 메타블록 전이들에 대응하는 상태도들을 도시한다. 순차적 업데이트 논리 그룹은 적어도 하나의 섹터가 비 순차적으로 호스트에 의해 기입될 때 혼란된다. 비순차적 섹터 기입들은 업데이트 블록 또는 대응 본래 블록의 유효 섹터들이 폐기되게 할 수 있다.14 (h) shows state diagrams corresponding to logical group and metablock transitions during an out of sequence write operation. Sequential update logical groups are confused when at least one sector is written by the host out of sequence. Out of order sector writes may cause valid sectors of the update block or the corresponding original block to be discarded.

도 14(i)는 컴팩트화 동작 동안 논리 그룹 및 메타블록 전이들에 대응하는 상태도를 도시한다. 무순서 업데이트 논리 그룹내의 모든 유효 섹터들은 오래된 블록으로부터 새로운 무순서 메타블록에 카피되고, 그 다음 소거된다. 본래 블록은 영향을 받지 않는다.14 (i) shows a state diagram corresponding to logical group and metablock transitions during the compaction operation. All valid sectors in the random update logical group are copied from the old block to the new random metablock and then erased. The original block is not affected.

도 14(j)는 통합 동작 동안 논리 그룹 및 메타블록에 대응하는 상태도를 도시한다. 무순서 업데이트 논리 그룹내 모든 유효한 섹터들은 논리적으로 순차적 순서로 새롭게 할당된 소거 블록을 충전하기 위하여 오래된 무순서 블록 및 본래 블록으로부터 카피된다. 오래된 무순서 블록 및 본래 블록은 그 다음 소거된다.14 (j) shows a state diagram corresponding to logical groups and metablocks during the coalescing operation. All valid sectors in the random update logical group are copied from the old random blocks and the original block to fill the newly allocated erased blocks in logical sequential order. The old random blocks and the original blocks are then erased.

업데이트 블록 트랙킹 및 관리Update block tracking and management

도 15는 할당 동안 개방 및 폐쇄된 업데이트 블록들 및 소거된 블록들의 트랙을 유지하기 위하여 할당 블록 리스트(ABL) 구조의 바람직한 실시예를 도시한다. 할당 블록 리스트(ABL)(610)는 소거된 블록들, 할당된 업데이트 블록들, 연관된 블록들 및 제어 구조들의 할당을 관리하게 하고, 및 올바른 논리 대 물리적 어드레스 전이를 수행하기 위하여 제어기 RAM(130)에 홀딩된다. 바람직한 실시예에서, ABL은 소거된 블록들의 리스트, 개방 업데이트 블록 리스트(614) 및 폐쇄된 업데이트 블록 리스트(616)를 포함한다.Figure 15 shows a preferred embodiment of an allocation block list (ABL) structure to keep track of open and closed update blocks and erased blocks during allocation. The allocation block list (ABL) 610 allows the controller RAM 130 to manage the allocation of erased blocks, allocated update blocks, associated blocks and control structures, and to perform correct logical to physical address transitions. Is held in. In a preferred embodiment, the ABL includes a list of erased blocks, an open update block list 614 and a closed update block list 616.

개방 업데이트 블록 리스트(614)는 개방 업데이트 블록의 속성들을 가진 ABL내 블록 엔트리들의 세트이다. 개방 업데이트 블록 리스트는 현재 개방된 각각의 데이터 업데이트 블록에 대한 하나의 엔트리를 가진다. 각각의 엔트리는 다음 정보를 홀딩한다. LG는 현재 업데이트 메타블록이 전용으로 사용되는 논리 그룹 어드레스이다. 순차적/무순서는 순차적 또는 무순서는 업데이트 블록에 업데이트 데이터가 충전되는지를 가리키는 상태이다. MB는 업데이트 블록의 메타블록 어드레스이다. 페이지 태그는 업데이트 블록의 제 1 물리적 위치에 기록된 시작 논리 섹터이다. 기입된 섹터들의 수는 업데이트 블록상에 현재 기입된 섹터들의 수를 가리킨다. MB0는 연관된 본래 블록의 메타블록 어드레스이다. 페이지 태그0는 연관된 본래 블록의 페이지 태그이다.The open update block list 614 is a set of block entries in the ABL with the attributes of the open update block. The open update block list has one entry for each data update block that is currently open. Each entry holds the following information. LG is the logical group address for which the update metablock is currently dedicated. Sequential / random order is a state indicating whether update data is filled in the update block. MB is the metablock address of the update block. The page tag is the starting logical sector written to the first physical location of the update block. The number of sectors written indicates the number of sectors currently written on the update block. MB 0 is the metablock address of the associated original block. Page tag 0 is the page tag of the associated original block.

폐쇄된 업데이트 블록 리스트(616)는 할당 블록 리스트(ABL)의 서브세트이다. 이는 폐쇄된 업데이트 블록의 속성들을 가진 ABL내 블록 엔트리들의 세트이다. 폐쇄된 업데이트 블록 리스트는 폐쇄되었지만, 엔트리가 논리 대 메인 물리적 디렉토리에서 업데이트되지 않은 각각의 데이터 업데이트 블록에 대한 하나의 엔트리를 가진다. 각각의 엔트리는 다음 정보를 홀딩한다. LG는 현재 업데이트 블록이 전용으로 사용되는 논리 그룹 어드레스이다. MB는 업데이트 블록의 메타블록 어드레스이다. 페이지 태그는 업데이트 블록의 제 1 물리적 위치에 기록된 시작 논리 섹터이다. MB0는 연관된 본래 블록의 메타블록 어드레스이다. The closed update block list 616 is a subset of the allocation block list ABL. This is a set of block entries in the ABL with the properties of a closed update block. The closed update block list is closed, but has one entry for each data update block whose entry is not updated in the logical versus main physical directory. Each entry holds the following information. LG is a logical group address where the update block is currently dedicated. MB is the metablock address of the update block. The page tag is the starting logical sector written to the first physical location of the update block. MB 0 is the metablock address of the associated original block.

무순서 블록 인덱싱Random Block Indexing

순차적 업데이트 블록은 논리적으로 순차적인 순서로 저장된 데이터를 가지며, 따라서 블록 사이의 임의의 논리적 섹터는 쉽게 배치될 수 있다. 무순서 업데 이트 블록은 순서가 뒤바뀌게 저장된 논리 섹터들을 가지며 또한 논리 섹터의 다중 업데이트 생성물들을 저장할 수 있다. 부가적인 정보는 각각의 유효 논리 섹터가 무순서 업데이트 블록에 배치되는 트랙을 유지하기 위하여 유지되어야 한다.Sequential update blocks have data stored in a logically sequential order, so any logical sectors between blocks can be easily placed. The random update block has logical sectors stored out of order and can also store multiple update products of logical sectors. Additional information must be maintained to keep track of where each valid logical sector is placed in the random update block.

바람직한 실시예에서, 무순서 블록 인덱싱 데이터 구조들은 무순서 블록에서 모든 유효 섹터들의 트랙킹 및 빠른 액세스를 허용한다. 무순서 블록 인덱싱은 논리적 어드레스 공간의 작은 영역들을 독립적으로 관리하고, 시스템 데이터 및 사용자 데이터의 핫 영역들을 효과적으로 취급한다. 인덱싱 데이터 구조들은 필수적으로 인덱싱 정보가 빈번한 업데이트 요구조건을 가진 플래시 메모리에 유지되게 하여, 성능은 크게 영향을 받지 않는다. 다른 한편, 무순서 블록들에서 최근에 기입된 섹터들의 리스트들은 제어기 RAM에서 무순서 섹터 리스트에 유지된다. 또한, 플래시 메모리로부터의 인덱스 정보의 캐시는 제어기 RAM에 유지되어 어드레스 전이 동안 플래시 섹터 액세스들의 횟수를 최소화한다. 각각의 무순서 블록에 대한 인덱스들은 플래시 메모리에서 무순서 블록 인덱스(CBI)에 저장된다.In a preferred embodiment, the random block indexing data structures allow tracking and quick access of all valid sectors in the random block. Random block indexing independently manages small areas of the logical address space and effectively handles hot areas of system data and user data. Indexing data structures essentially keep indexing information in flash memory with frequent update requirements, so performance is not significantly affected. On the other hand, the list of recently written sectors in the random blocks is kept in the random sector list in the controller RAM. In addition, a cache of index information from flash memory is maintained in the controller RAM to minimize the number of flash sector accesses during address transitions. The indexes for each random block are stored in random block index (CBI) in flash memory.

도 16a는 무순서 블록 인덱스(CBI) 섹터의 데이터 필드들을 도시한다. 무순서 블록 인덱스 섹터(CBI 섹터)는 무순서 업데이트 블록 또는 그의 연관된 본래 블록내의 논리 그룹의 각각의 섹터 위치를 정의하는 무순서 업데이트 블록에 맵핑된 논리 그룹에 각각의 섹터에 대한 인덱스를 포함한다. CBI 섹터는 무순서 블록내에 유효한 섹터들의 트랙을 유지하기 위한 무순서 블록 인덱스 필드, 무순서 블록에 대한 어드레스 파라미터들의 트랙을 유지하기 위한 무순서 블록 정보 필드, 및 CBI 섹터들을 저장하는 메타블록(CBI)내 유효 CBI 섹터들의 트랙을 유지하기 위한 섹터 인덱스 필드를 포함한다.16A shows data fields of an out of order block index (CBI) sector. An unordered block index sector (CBI sector) includes an index for each sector in a logical group mapped to an unordered update block that defines the location of each sector of the logical group within the random update block or its associated original block. The CBI sector is an unordered block index field for keeping track of valid sectors in an unordered block, an unordered block information field for keeping track of address parameters for an unordered block, and a metablock that stores CBI sectors (CBI). A sector index field for keeping track of valid CBI sectors.

도 16b는 전용 메타블록에 기록된 무순서 블록 인덱스(CBI) 섹터들의 예를 도시한다. 전용 메타블록은 CBI 블록(620)이라 할 것이다. CBI 섹터가 업데이트될 때, 상기 섹터는 CBI 블록(620)의 다음 이용 가능한 물리적 섹터 위치내에 기입된다. CBI 섹터의 다중 카피들은 CBI 블록내에 존재할 수 있고, 단지 최종 기입 카피가 유효화된다. 예를 들어 논리 그룹(LG1)에 대한 CBI 섹터는 유효한 최신 버전으로 3회 업데이트되었다. CBI 블록내 각각의 유효 섹터의 위치는 블록내 최종 기입된 CBI 섹터내 한 세트의 인덱스들에 의해 식별된다. 이 실시예에서, 블록내 최종 기입된 CBI 섹터는 LG136에 대한 CBI 섹터이고 인덱스들의 세트는 모든 이전 것들을 대체하는 유효한 인덱스들이다. CBI 블록에 CBI 섹터들 완전히 충전될 때, 블록은 새로운 블록 위치에 모든 유효한 섹터들을 재기입함으로써 제어 기입 동작 동안 컴팩트화된다. 가득찬 블록은 그 다음 소거된다.16B shows an example of random block index (CBI) sectors written to a dedicated metablock. The dedicated metablock will be referred to as CBI block 620. When a CBI sector is updated, the sector is written into the next available physical sector location of CBI block 620. Multiple copies of a CBI sector can exist in a CBI block, only the last write copy is validated. For example, the CBI sector for logical group LG 1 has been updated three times with the latest valid version. The location of each valid sector in the CBI block is identified by a set of indices in the last written CBI sector in the block. In this embodiment, the last written CBI sector in the block is the CBI sector for LG 136 and the set of indices is valid indices replacing all previous ones. When the CBI block is fully charged in the CBI block, the block is compacted during the control write operation by rewriting all valid sectors in the new block position. The full block is then erased.

CBI 섹터내 무순서 블록 인덱스 필드는 무순서 업데이트 블록에 맵핑된 논리 그룹 또는 서브 그룹내 각각의 논리 섹터에 대한 인덱스 엔트리를 포함한다. 각각의 인덱스 엔트리는 대응하는 논리 섹터에 대한 유효 데이터가 배치된 무순서 업데이트 블록내의 오프셋을 표시한다. 비축된 인덱스 값은 논리 섹터에 대한 유효한 데이터가 무순서 업데이트 블록에 존재하지 않고, 연관된 본래 블록내 대응 섹터가 유효한 것을 가리킨다. 몇몇 무순서 블록 인덱스 필드 엔트리들의 캐시는 제어기 RAM에 유지된다.The Random Block Index field in the CBI sector contains an index entry for each logical sector in the logical group or subgroup mapped to the random update block. Each index entry indicates an offset in the random update block in which valid data for the corresponding logical sector is placed. The reserved index value indicates that no valid data for the logical sector is present in the random update block, and the corresponding sector in the associated original block is valid. A cache of some random block index field entries is maintained in the controller RAM.

CBI 섹터내 무순서 블록 정보 필드는 블록에 대한 파라미터 정보를 기록하는 시스템에 존재하는 각각의 무순서 업데이트 블록에 대한 하나의 엔트리를 포함한다. 이런 필드에서 정보는 CBI 블록내 최종 기입된 섹터에서만 유효하다. 이런 정보는 또한 RAM의 데이터 구조들에 제공된다.The Random Block Information field in the CBI sector contains one entry for each random update block present in the system that records parameter information for the block. Information in this field is only valid for the last sector written in the CBI block. This information is also provided to the data structures of the RAM.

각각의 무순서 업데이트 블록에 대한 엔트리는 3개의 어드레스 파라미터들을 포함한다. 제 1 파라미터는 무순서 업데이트 블록과 연관된 논리 그룹의 논리 어드레스(또는 논리 그룹 번호)이다. 제 2 파라미터는 무순서 업데이트 블록의 메타블록 어드레스이다. 제 3 파라미터는 무순서 업데이트 블록에 기입된 최종 섹터의 물리적 어드레스 오프셋이다. 오프셋 정보는 RAM에 데이터 구조들을 재구성하기 위하여 초기화 동안 무순서 업데이트 블록의 스캐닝을 위하여 시작 포인트를 설정한다.The entry for each random update block contains three address parameters. The first parameter is the logical address (or logical group number) of the logical group associated with the random update block. The second parameter is the metablock address of the random update block. The third parameter is the physical address offset of the last sector written to the random update block. The offset information sets a starting point for the scanning of random update blocks during initialization to reconstruct data structures in RAM.

섹터 인덱스 필드는 CBI 블록에 각각의 유효 CBI 섹터에 대한 엔트리를 포함한다. 이것은 각각 허용된 무순서 업데이트 블록에 관련된 가장 최근에 기입된 CBI 섹터들이 배치되는 CBI 블록내 오프셋들을 정의한다. 인덱스내 오프셋의 비축된 값은 허용된 무순서 업데이트 블록이 존재하지 않는 것을 가리킨다.The sector index field contains an entry for each valid CBI sector in the CBI block. This defines the offsets within the CBI block in which the most recently written CBI sectors associated with each allowed random update block are placed. The reserved value of the offset in the index indicates that there is no allowed random update block.

도 16c는 무순서 업데이트를 겪는 주어진 논리 그룹의 논리 섹터 데이터에 대한 액세스를 도시하는 흐름도이다. 업데이트 처리 동안, 업데이트 데이터는 무순서 업데이트 블록에 기록되고 변화되지 않은 데이터는 논리 그룹과 연관된 본래 메타블록내에 유지된다. 무순서 업데이트하에서 논리 그룹의 논리 섹터에 액세스하는 프로세스는 다음과 같다:16C is a flow diagram illustrating access to logical sector data of a given logical group undergoing random update. During the update process, the update data is written to the random update block and the unchanged data is kept in the original metablock associated with the logical group. The process of accessing logical sectors of a logical group under random update is as follows:

단계 650: 주어진 논리 그룹의 주어진 논리 섹터를 배치하는 것을 시작한다.Step 650: Begin placing a given logical sector of a given logical group.

단계 652: CBI 블록내에 최종 기입된 CBI 섹터를 배치한다.Step 652: Place the last written CBI sector in the CBI block.

단계 654: 최종 기입된 CBI 섹터의 무순서 블록 정보 필드를 찾음으로써 주어진 논리 그룹과 연관된 무순서 업데이트 블록 또는 본래 블록을 배치한다. 이 단계는 단계 662 바로 이전 임의의 시간에서 수행될 수 있다.Step 654: Locate the random update block or original block associated with the given logical group by finding the random block information field of the last written CBI sector. This step may be performed at any time immediately before step 662.

단계 658: 만약 최종 기입된 CBI 섹터가 주어진 논리 그룹으로 지향되면, CBI 섹터는 배치된다. 단계 662로 진행한다. 그렇지 않으면, 단계 660으로 진행한다.Step 658: If the last written CBI sector is directed to a given logical group, the CBI sector is placed. Proceed to step 662. Otherwise, go to Step 660.

단계 660: 최종 기입된 CBI 섹터의 섹터 인덱스 필드를 찾음으로써 주어진 논리 그룹에 대한 CBI 섹터를 배치한다.Step 660: Place the CBI sector for the given logical group by finding the sector index field of the last written CBI sector.

단계 662: 배치된 CBI 섹터의 무순서 블록 인덱스 필드를 찾음으로써 무순서 블록 또는 본래 블록 사이에 주어진 논리 섹터를 배치한다.Step 662: Place the given logical sector between the random block or the original block by finding the random block index field of the placed CBI sector.

도 16d는 논리 그룹이 서브그룹들로 분할된 다른 실시예에 따라, 무순서 업데이트를 겪는 주어진 논리 그룹의 논리 섹터 데이터에 대한 액세스를 도시하는 흐름도이다. CBI 섹터의 한정된 용량은 미리 결정된 논리 섹터들의 최대 수의 트랙만을 유지할 수 있다. 논리 그룹이 단일 CBI 섹터가 취급하는 것보다 많은 논리 섹터들을 가질 때, 논리 그룹은 각각의 서브그룹에 할당된 CBI 섹터를 가진 다중 서브그룹들로 분할된다. 일 실시예에서, 각각의 CBI 섹터는 256 섹터들 및 8 무순서 업데이트 블록들로 구성된 논리 그룹을 트랙킹하기 위하여 충분한 용량을 가진다. 만약 논리 그룹이 256 섹터들을 초과하는 크기를 가지면, 독립된 CBI 섹터는 논리 그룹내에 각각 256 섹터 서브 그룹을 위해 존재한다. CBI 섹터들은 2048 섹터들의 크 기까지의 논리 그룹들에 대해 지원을 제공하는 논리 그룹내 8 서브 그룹들까지에 대해 존재할 수 있다.16D is a flow diagram illustrating access to logical sector data of a given logical group undergoing random update, according to another embodiment where the logical group is divided into subgroups. The limited capacity of the CBI sector can only keep track of the maximum number of predetermined logical sectors. When a logical group has more logical sectors than a single CBI sector handles, the logical group is divided into multiple subgroups with CBI sectors assigned to each subgroup. In one embodiment, each CBI sector has sufficient capacity to track a logical group of 256 sectors and 8 random update blocks. If a logical group has a size exceeding 256 sectors, separate CBI sectors exist for each 256 sector subgroup in the logical group. CBI sectors may exist for up to 8 subgroups in a logical group providing support for logical groups up to the size of 2048 sectors.

바람직한 실시예에서, 간접적인 인덱싱 방법은 인덱스의 관리를 용이하게 하기 위하여 사용된다. 섹터 인덱스의 각각의 엔트리는 직접 및 간접 필드들을 가진다.In a preferred embodiment, an indirect indexing method is used to facilitate the management of the index. Each entry of the sector index has direct and indirect fields.

직접적인 섹터 인덱스는 특정 무순서 업데이트 블록에 관련된 모든 가능한 CBI 섹터들이 배치되는 CBI 블록내 오프셋들을 정의한다. 이런 필드내 정보는 특정 무순서 업데이트 블록과 관련된 최종 기입된 CBI 섹터에서만 유효하다. 인덱스내 오프셋의 비축된 값은 무순서 업데이트 블록과 관련된 대응하는 논리 서브그룹이 존재하지 않기 때문에 CBI 섹터가 존재하지 않거나, 업데이트 블록이 할당되었기 때문에 업데이트되지 않은 것을 가리킨다.The direct sector index defines the offsets in the CBI block in which all possible CBI sectors related to a particular random update block are placed. This intrafield information is valid only in the last written CBI sector associated with the particular random update block. The reserved value of the offset in the index indicates that the CBI sector does not exist because there is no corresponding logical subgroup associated with the random update block, or that it has not been updated because the update block has been allocated.

간접적인 섹터 인덱스는 각각의 허용된 무순서 업데이트 블록에 관련된 가장 최근에 기입된 CBI 섹터들이 할당된 CBI 블록내 오프셋들을 정의한다. 인덱스의 오프셋 비축 값은 허용된 무순서 업데이트 블록이 존재하지 않는 것을 가리킨다.The indirect sector index defines the offsets in the CBI block to which the most recently written CBI sectors associated with each allowed random update block are assigned. The offset reserve value of the index indicates that no allowed random update block exists.

도 16d는 다음과 같은 무순서 업데이트하에서 논리적 그룹의 논리적 섹터를 액세스하는 프로세스를 도시한다:16D shows a process for accessing logical sectors in a logical group under the following random update:

단계 670: 다중 서브그룹들로 각각의 논리 그룹을 분할하고 각각의 서브그룹에 CBI 섹터를 할당한다.Step 670: Split each logical group into multiple subgroups and assign a CBI sector to each subgroup.

단계 680: 주어진 논리 그룹의 주어진 서브그룹의 주어진 논리 섹터를 가리키는 것을 시작한다.Step 680: Begin pointing to a given logical sector of a given subgroup of a given logical group.

단계 682: CBI 블록에 최종 기입된 CBI 섹터를 배치한다.Step 682: Place the last written CBI sector in the CBI block.

단계 684: 최종 기입된 CBI 섹터의 무순서 블록 정보 필드를 찾음으로써 주어진 서브그룹과 연관된 무순서 업데이트 블록 또는 본래 블록을 배치한다. 이 단계는 단계 696 바로 이전 임의의 시간에 수행될 수 있다.Step 684: Locate the random update block or original block associated with the given subgroup by finding the random block information field of the last written CBI sector. This step may be performed any time immediately before step 696.

단계 686: 만약 최종 기입된 CBI 섹터가 주어진 논리적 그룹으로 지향되면, 단계 691로 진행한다. 그렇지 않으면, 단계 690으로 진행한다.Step 686: If the last written CBI sector is directed to the given logical group, go to step 691. Otherwise, go to Step 690.

단계 690: 최종 기입된 CBI 섹터의 간접적 섹터 인덱스 필드를 찾음으로써 주어진 논리 그룹에 대한 최종 기입된 다중 CBI 섹터들을 배치한다.Step 690: Locate the last written multiple CBI sectors for a given logical group by finding the indirect sector index field of the last written CBI sector.

단계 691: 적어도 CBI 섹터는 주어진 논리 그룹에 대한 서브그룹들 중 하나가 배치된 것과 연관한다. 계속.Step 691: At least the CBI sector is associated with one of the subgroups for a given logical group deployed. continue.

단계 692: 만약 배치된 CBI 섹터가 주어진 서브그룹으로 지향되면, 주어진 서브그룹에 대한 CBI 섹터는 배치된다. 단계 696으로 진행한다. 그렇지 않으면 단계 694로 진행한다.Step 692: If the deployed CBI sector is directed to a given subgroup, the CBI sector for the given subgroup is deployed. Proceed to step 696. Otherwise proceed to step 694.

단계 694: 현재 배치된 CBI 섹터의 직접 인덱스 필드를 찾음으로써 주어진 서브그룹에 대한 CBI 섹터를 배치한다.Step 694: Locate the CBI sector for the given subgroup by finding the direct index field of the currently located CBI sector.

단계 696: 주어진 서브그룹에 대한 CBI 섹터의 무순서 블록 인덱스 필드를 찾음으로써 무순서 블록 또는 본래 블록 사이에 주어진 논리 섹터를 배치한다.Step 696: Place the given logical sector between the random block or the original block by finding the random block index field of the CBI sector for the given subgroup.

도 16e는 각각의 논리 그룹이 다중 서브그룹들로 분할되는 실시예에 대한 무순서 블록 인덱싱(CBI) 섹터들 및 기능들의 예들을 도시한다. 논리 그룹(700)은 본래 메타블록(702)에 저장된 완전한 데이터를 가진다. 논리 그룹은 전용 무순서 업 데이트 블록(704)의 할당을 사용하여 업데이트들을 경험한다. 본 실시예들에서, 논리 그룹(700)은 각각 256 섹터들을 가진 서브 그룹들, 즉 서브그룹들 A,B,C,D로 분할된다.FIG. 16E shows examples of random block indexing (CBI) sectors and functions for an embodiment where each logical group is divided into multiple subgroups. Logical group 700 has complete data originally stored in metablock 702. The logical group experiences updates using the allocation of dedicated random update block 704. In the present embodiments, the logical group 700 is divided into subgroups having 256 sectors, that is, subgroups A, B, C, and D, respectively.

서브그룹 B내에 i번째 섹터를 배치하기 위하여, CBI 블록(620)내 최종 기입된 CBI 섹터는 첫번째로 배치된다. 최종 기입된 CBI 섹터의 무순서 블록 정보 필드는 주어진 논리 그룹에 대한 무순서 업데이트 블록(704)을 배치하기 위하여 어드레스를 제공한다. 동시에, 무순서 블록내에 기입된 최종 섹터의 위치를 제공한다. 이 정보는 스캐닝 및 재구성 인덱스들의 경우 유용하다.To place the i-th sector in subgroup B, the last written CBI sector in CBI block 620 is placed first. The Random Block Information field of the last written CBI sector provides an address to place the Random Update block 704 for a given logical group. At the same time, it provides the position of the last sector written in the random block. This information is useful for scanning and reconstruction indices.

만약 최종 기입된 CBI 섹터가 주어진 논리 그룹의 4개의 CBI 섹터들 중 하나이면, 추가로 상기 섹터가 i번째 논리 섹터를 포함하는 주어진 서브그룹(B)에 대한 정확히 CBI 섹터인 것이 결정될 것이다. 만약 그렇다면, CBI 섹터의 무순서 블록인덱스는 i번째 논리 섹터에 대한 데이터를 저장하기 위하여 메타블록 위치를 가리킬 것이다. 섹터 위치는 무순서 업데이트 블록(704) 또는 본래 블록(702) 내에 있을 수 있다.If the last written CBI sector is one of the four CBI sectors of a given logical group, it will further be determined that the sector is exactly the CBI sector for a given subgroup B containing the i th logical sector. If so, the random block index of the CBI sector will point to the metablock location to store data for the i th logical sector. The sector location may be in random update block 704 or original block 702.

만약 최종 기입된 CBI 섹터가 주어진 논리 그룹의 4개의 CBI 섹터들 중 하나이지만 서브그룹에 대해 정확하지 않으면, 직접 섹터 인덱스는 서브그라운드(B)에 대하여 CBI 섹터를 배치시키기 위하여 찾아진다. 일단 이런 정확한 CBI 섹터가 배치되면, 무순서 블록 인덱스는 무순서 업데이트 블록(704) 및 본래 블록(702) 사이에 i번째 논리 섹터를 배치하기 위하여 찾아진다.If the last written CBI sector is one of the four CBI sectors of a given logical group but is incorrect for the subgroup, then a direct sector index is found to place the CBI sector with respect to the subground (B). Once this correct CBI sector is placed, the random block index is found to place the ith logical sector between the random update block 704 and the original block 702.

만약 최종 기입된 CBI 섹터가 주어진 논리 그룹의 4개의 CBI 섹터들 중 임의 의 하나가 아니면, 간접 섹터 인덱스는 4개 중 하나를 배치하기 위하여 찾아진다. 도 16e에 도시된 실시예에서, 서브그룹(C)에 대한 CBI 섹터는 배치된다. 그 다음 서브그룹(C)에 대한 이런 CBI 섹터는 서브그룹(B)에 대한 정확한 CBI 섹터를 배치하기 위하여 찾아진 직접 섹터 인덱스를 가진다. 상기 예는 무순서 블록 인덱스가 찾아질 때, i번째 논리 섹터가 변화되지 않은 것으로 발견되고 유효한 데이터가 본래 블록내에 배치되는 것을 나타낸다.If the last written CBI sector is not any one of the four CBI sectors of a given logical group, the indirect sector index is found to place one of the four. In the embodiment shown in Fig. 16E, CBI sectors for subgroup C are arranged. This CBI sector for subgroup C then has a direct sector index found to locate the correct CBI sector for subgroup B. The above example shows that when the random block index is found, the i th logical sector is found unchanged and valid data is placed in the original block.

유사한 고려사항은 주어진 논리 그룹의 서브그룹(C)에 j번째 논리 섹터를 배치하기 위하여 적용한다. 상기 예는 최종 기입된 CBI 섹터가 주어진 논리 그룹의 4개의 CBI 섹터들 중 임의의 하나가 아닌 것을 나타낸다. 간접 섹터 인덱스는 주어진 그룹에 대하여 4개의 CBI 중 하나를 가리킨다. 4개 중 최종 기입된 CBI 섹터는 서브그룹(C)에 대해 정확하게 CBI 섹터가 아닌 것을 가리킨다. 무순서 블록 인덱스가 찾아질 때, j번째 논리 섹터는 무순서 업데이트 블록(704)의 지정된 위치에 배치되는 것을 발견된다.Similar considerations apply to placing the j th logical sector in subgroup C of a given logical group. The example shows that the last written CBI sector is not any one of the four CBI sectors of a given logical group. The indirect sector index points to one of four CBIs for a given group. The last written CBI sector out of four indicates that it is not exactly a CBI sector for the subgroup (C). When the random block index is found, the j th logical sector is found to be placed at the designated position of the random update block 704.

무순서 섹터들의 리스트는 시스템의 각각의 무순서 업데이트 블록에 대한 제어기 RAM에 존재한다. 각각의 리스트는 관련된 CBI 섹터가 플래시 메모리에서 최종 업데이트 되었기 때문에 무순서 업데이트 블록에 기입된 섹터들의 기록을 포함한다. 무순서 섹터 리스트에 홀딩될 수 있는 특정 무순서 업데이트 블록에 대한 논리 섹터의 수는 8 내지 16의 통상적인 값을 가진 설계 파라미터이다. 리스트의 최적의 크기는 무순서 데이터 기입 동작들 동안 오버헤드 및 초기화 동안 섹터 스캐닝 시간 사이의 트래이드오프로서 결정된다.The list of random sectors is in the controller RAM for each random update block of the system. Each list contains a record of the sectors written to the random update block because the associated CBI sector was last updated in flash memory. The number of logical sectors for a particular random update block that can be held in the random sector list is a design parameter with typical values of 8-16. The optimal size of the list is determined as the tradeoff between overhead during random data write operations and sector scanning time during initialization.

시스템 초기화 동안, 각각의 무순서 업데이트 블록은 연관된 CBI 섹터들 중 하나의 이전 업데이트 이후 기입된 유효 섹터들을 식별하기 위한 필요할 때 스캔된다. 각각의 무순서 업데이트 블록에 대한 제어기 RAM의 무순서 섹터 리스트는 구성된다. 각각의 블록은 최종 기입된 CBI 섹터내 무순서 블록 정보 필드에서 정의된 최종 섹터 어드레스로부터만 스캔될 필요가 있다.During system initialization, each random update block is scanned as needed to identify valid sectors written after a previous update of one of the associated CBI sectors. The random sector list of the controller RAM for each random update block is constructed. Each block needs to be scanned only from the last sector address defined in the Random Block Information field in the last written CBI sector.

무순서 업데이트 블록이 할당될 때, CBI 선택기는 모든 업데이트된 논리 서브 그룹들에 대응하도록 기입된다. 무순서 업데이트 블록에 대한 논리 및 물리적 어드레스들은 무순서 블록 인덱스 필드에 널(null) 엔트리들을 가진 섹터의 이용 가능한 무순서 블록 정보 필드에 기입된다. 무순서 섹터 리스트는 제어기 RAM에서 개방된다. When a random update block is allocated, the CBI selector is written to correspond to all updated logical subgroups. The logical and physical addresses for the random update block are written to the available random block information field of a sector having null entries in the random block index field. The random sector list is opened in the controller RAM.

무순서 업데이트 블록이 폐쇄될 때, CBI 섹터는 섹터에서 무순서 블록 정보 필드로부터 제거된 블록의 논리 및 물리적 어드레스들이 기입된다. RAM의 대응하는 무순서 섹터 리스트는 사용되지 않는다.When the random update block is closed, the CBI sector writes the logical and physical addresses of the block removed from the random block information field in the sector. The corresponding random sector list in RAM is not used.

제어기 RAM에서 대응하는 무순서 섹터 리스트는 무순서 업데이트 블록에 기입된 섹터들의 기록들을 포함하도록 변형된다. 제어기 RAM의 무순서 섹터 리스트가 무순서 업데이트 블록에 추가 섹터 기입들의 기록들을 위한 이용 가능한 공간을 가지지 않을 때, 업데이트된 CBI 섹터들은 리스트의 섹터들에 관련한 논리적 서브 그룹들을 위해 기입되고, 리스트는 삭제된다. The corresponding random sector list in the controller RAM is modified to include records of sectors written in the random update block. When the random sector list of the controller RAM does not have available space for writing of additional sector writes in the random update block, the updated CBI sectors are written for logical subgroups related to the sectors of the list, and the list is deleted. do.

CBI 블록(620)이 가득차게 될 때, 유효한 CBI 섹터들은 할당된 소거 블록에 카피되고, 이전 CBI 블록은 소거된다.When the CBI block 620 becomes full, valid CBI sectors are copied into the allocated erase block, and the previous CBI block is erased.

어드레스 테이블들Address tables

도 2에 도시된 논리 대 물리 어드레스 전이 모듈(140)은 플래시 메모리의 대응하는 물리적 어드레스에 호스트의 논리 어드레스를 관련시키기 위하여 작용한다. 논리 그룹들 및 물리적 그룹들(메타블록들) 사이의 맵핑은 한 세트의 테이블에 저장되고 리스트들은 비휘발성 플래시 메모리(200) 및 휘발성이지만 보다 민첩한(agile) RAM(130) 사이에 분배된다(도 1 참조), 어드레스 테이블은 메모리 시스템의 모든 논리 그룹에 대한 메타블록 어드레스를 포함하는 플래시 메모리에 유지된다. 게다가, 최근에 기입된 섹터들에 대한 논리 대 물리적 어드레스 기록들은 일시적으로 RAM에 홀딩된다. 이들 휘발성 기록들은 시스템이 전력 인가 후 초기화될 때 플래시 메모리의 데이터 섹터 헤더들 및 블록 리스트들로부터 재구성될 수 있다. 따라서, 플래시 메모리의 어드레스 테이블은 단지 드물게만 업데이트될 필요가 있고, 이것은 데이터를 제어하기 위한 오버헤드 기입 동작들의 낮은 퍼센트를 유도한다.The logical-to-physical address transition module 140 shown in FIG. 2 serves to associate the logical address of the host with the corresponding physical address of the flash memory. The mapping between logical groups and physical groups (metablocks) is stored in a set of tables and the lists are distributed between non-volatile flash memory 200 and volatile but more agile RAM 130 (FIG. 1), an address table is maintained in flash memory containing metablock addresses for all logical groups of the memory system. In addition, logical to physical address records for recently written sectors are temporarily held in RAM. These volatile writes can be reconstructed from data sector headers and block lists of flash memory when the system is initialized after power up. Thus, the address table of the flash memory only needs to be updated rarely, which leads to a low percentage of overhead write operations to control the data.

논리 그룹들에 대한 어드레스 기록들의 계층은 개방된 업데이트 블록 리스트, RAM에서 폐쇄된 업데이트 블록 리스트 및 플래시 메모리에 유지된 그룹 어드레스 테이블(GAT)을 포함한다.The hierarchy of address writes for the logical groups includes an open update block list, a closed update block list in RAM, and a group address table (GAT) maintained in flash memory.

개방된 업데이트 블록 리스트는 업데이트된 호스트 섹터 데이터를 기입하기 위하여 현재 개방된 데이터 업데이트 블록들의 제어기 RAM의 리스트이다. 블록에 대한 엔트리는 블록이 폐쇄될 때 폐쇄된 업데이트 블록 리스트로 이동된다. 폐쇄된 업데이트 블록 리스트는 폐쇄된 데이터 업데이트 블록들의 제어기 RAM의 리스트이 다. 리스트내 엔트리들의 서브세트는 제어 기입 동작 동안 그룹 어드레스 테이블내 섹터로 이동된다.The open update block list is a list of controller RAMs of data update blocks currently open for writing updated host sector data. The entry for the block is moved to the closed update block list when the block is closed. The closed update block list is a list of controller RAMs of the closed data update blocks. The subset of entries in the list is moved to a sector in the group address table during a control write operation.

그룹 어드레스 테이블(GAT)은 메모리 시스템의 호스트 데이터의 모든 논리 그룹들에 대한 메타블록 어드레스들의 리스트이다. GAT는 논리 어드레스에 따라 순차적으로 순서가 정해진 각각의 논리 그룹에 대한 하나의 엔트리를 포함한다. GAT내 n번째 엔트리는 어드레스(n)를 가진 논리 그룹에 대한 메타블록 어드레스를 포함한다. 바람직한 실시예에서, 상기 엔트리는 메모리 시스템내 모든 논리 그룹에 대한 메타블록 어드레스들을 정의하는 엔트리들을 가진 한 세트의 섹터들(GAT 섹터들이라 함)을 포함하는 플래시 메모리내 테이블이다. GAT 섹터들은 플래시 메모리에서 하나 이상의 전용 제어 블록들(GAT 블록들이라 함)에 배치된다.The group address table (GAT) is a list of metablock addresses for all logical groups of host data of the memory system. The GAT includes one entry for each logical group sequentially ordered according to the logical address. The nth entry in the GAT contains the metablock address for the logical group with address n. In a preferred embodiment, the entry is a table in flash memory containing a set of sectors (called GAT sectors) with entries defining metablock addresses for all logical groups in the memory system. GAT sectors are placed in one or more dedicated control blocks (called GAT blocks) in flash memory.

도 17a는 그룹 어드레스 테이블(GAT) 섹터의 데이터 필드들을 도시한다. GAT 섹터는 한 세트의 128 인접 논리 그룹들에 대한 GAT 엔트리들을 포함하기 위한 충분한 용량을 가질 수 있다. 각각의 GAT 섹터는 두 개의 구성요소들, 즉 하나의 범위내에 각각의 논리 그룹의 메타블록 어드레스에 대한 한 세트의 GAT 엔트리들, 및 GAT 섹터 인덱스를 포함한다. 제 1 구성요소는 논리 어드레스와 연관된 메타블록을 배치시키기 위한 정보를 포함한다. 제 2 구성요소는 GAT 블록내 모든 유효한 GAT 섹터들을 배치시키기 위한 정보를 포함한다. 각각의 GAT 엔트리는 3개의 필드들, 즉 메타블록 번호, 도 3a(iii)와 관련하여 이전에 정의된 바와 같은 페이지 태그, 및 메타블록이 재링크되는지를 가리키는 플래그를 포함한다. GAT 섹터 인덱스는 GAT 블록내 유효한 GAT 섹터들의 위치들을 리스트한다. 이런 인덱스는 모든 GAT 섹 터내에 있지만 GAT 블록내 다음 기입된 GAT 섹터의 버전에 의해 대체된다. 따라서 최종 기입된 GAT 섹터내 버전만이 유효하다.17A shows data fields of a group address table (GAT) sector. The GAT sector may have sufficient capacity to contain GAT entries for a set of 128 contiguous logical groups. Each GAT sector includes two components, one set of GAT entries for the metablock address of each logical group within one range, and a GAT sector index. The first component includes information for placing a metablock associated with a logical address. The second component contains information for placing all valid GAT sectors in the GAT block. Each GAT entry contains three fields, a metablock number, a page tag as previously defined with respect to FIG. 3A (iii), and a flag indicating whether the metablock is relinked. The GAT sector index lists the positions of valid GAT sectors in the GAT block. This index is in all GAT sectors but is replaced by the version of the next written GAT sector in the GAT block. Thus only the last written GAT sector version is valid.

도 17b는 하나 이상의 GAT 블록에 기록된 그룹 어드레스 테이블(GAT) 섹터들의 예를 도시한다. GAT 블록은 GAT 섹터들을 기록하는데 전용으로 사용되는 메타블록이다. GAT 섹터가 업데이트될 때, 상기 섹터는 GAT 블록(720)내 다음 이용 가능한 물리적 섹터 위치내에 기입된다. GAT 섹터의 다중 카피들은 그러므로 GAT 블록내에 존재하고, 단지 최종 기입된 카피만이 유효하다. 예를 들어 GAT 섹터(255)(논리 그룹들 LG3968 - LG4098에 대한 포인터들을 포함)는 유효한 것인 최종 버젼으로 적어도 두번 업데이트되었다. GAT 블록내 각각의 유효 섹터의 위치는 블록내 최종 기입된 GAT 섹터의 한 세트의 인덱스들에 의해 식별된다. 이런 실시예에서, 블록내 최종 기입된 GAT 섹터는 GAT 섹터(236)이고 그것의 인덱스들 세트는 모든 이전 것들을 대체하는 유효한 것이다. GAT 블록이 궁극적으로 GAT 섹터들로 완전히 가득 차게 될 때, 블록은 새로운 블록 위치에 모든 유효 섹터들을 재기입함으로써 제어 기입 동작 동안 컴팩트화된다. 가득찬 블록은 그 다음 소거된다.17B shows an example of group address table (GAT) sectors written to one or more GAT blocks. The GAT block is a metablock used exclusively for recording GAT sectors. When a GAT sector is updated, the sector is written into the next available physical sector location in the GAT block 720. Multiple copies of the GAT sector are therefore present in the GAT block, and only the last written copy is valid. For example, the GAT sector 255 (including pointers to logical groups LG 3968 -LG 4098 ) has been updated at least twice to the last version that is valid. The location of each valid sector in the GAT block is identified by the set of indices of the last written GAT sector in the block. In this embodiment, the last written GAT sector in the block is the GAT sector 236 and its set of indices is valid to replace all previous ones. When the GAT block ultimately becomes completely full of GAT sectors, the block is compacted during the control write operation by rewriting all valid sectors in the new block position. The full block is then erased.

이전에 기술된 바와 같이, GAT 블록은 논리 어드레스 공간 영역에 논리적으로 인접한 그룹들의 세트에 대한 엔트리들을 포함한다. GAT 블록내 GAT 섹터들 각각은 128 인접한 논리 그룹들에 대한 논리 대 물리적 맵핑 정보를 포함한다. GAT 블록에 의해 걸쳐진 어드레스 범위내 모든 논리 그룹들에 대한 엔트리들을 저장하기 위하여 요구된 GAT 섹터들의 수는 블록내 총 섹터 위치들의 일부만을 차지한다. GAT 섹터는 그러므로 블록내 다음 이용 가능한 섹터 위치에 이를 기입함으로써 업데이트된다. 모든 유효 GAT 섹터들의 인덱스 및 GAT 블록내 위치는 가장 최근에 기입된 GAT 섹터내 인덱스 필드에 유지된다. 유효 GAT 섹터들에 의해 점유된 GAT 블록내 총 섹터들의 일부는 통상적으로 25%인 시스템 설계 파라미터이다. 그러나, GAT 블록당 최대 64개의 유효 GAT 섹터들이 있다. 큰 논리 용량을 가진 시스템들에서, 하나 이상의 GAT 블록에 GAT 섹터들을 저장할 필요가 있을 수 있다. 이 경우, 각각의 GAT 블록은 논리 그룹들의 고정된 범위와 연관된다.As previously described, the GAT block contains entries for a set of groups logically adjacent to a logical address space area. Each of the GAT sectors in the GAT block contains logical to physical mapping information for 128 contiguous logical groups. The number of GAT sectors required to store entries for all logical groups in the address range spanned by the GAT block occupies only a portion of the total sector locations in the block. The GAT sector is therefore updated by writing it to the next available sector position in the block. The index of all valid GAT sectors and the position in the GAT block are kept in the index field in the most recently written GAT sector. Some of the total sectors in the GAT block occupied by valid GAT sectors are typically system design parameters that are 25%. However, there are up to 64 valid GAT sectors per GAT block. In systems with large logical capacity, it may be necessary to store GAT sectors in one or more GAT blocks. In this case, each GAT block is associated with a fixed range of logical groups.

GAT 업데이트는 ABL이 할당을 위해 블록들을 써버릴 때 트리거되는 제어 기입 동작의 일부로서 수행된다(도 18 참조). 이는 ABL 충전 및 CBL 비움 동작들과 동시에 수행된다. GAT 업데이트 동작 동안, 하나의 GAT 섹터는 폐쇄된 업데이트 블록 리스트내 대응 엔트리들로부터 정보가 업데이트된 엔트리들을 가진다. GAT 엔트리가 업데이트될 때, 임의의 대응 엔트리들은 폐쇄된 업데이트 블록 리스트(CUBL)로부터 제거된다. 예를 들어, 업데이트될 GAT 섹터는 폐쇄된 업데이트 블록 리스트의 제 1 엔트리를 바탕으로 선택된다. 업데이트된 섹터는 GAT 블록내 다음 이용 가능한 섹터 위치에 기입된다.GAT update is performed as part of the control write operation triggered when ABL uses blocks for allocation (see FIG. 18). This is done simultaneously with ABL charging and CBL emptying operations. During a GAT update operation, one GAT sector has entries whose information has been updated from corresponding entries in the closed update block list. When the GAT entry is updated, any corresponding entries are removed from the closed update block list CUBL. For example, the GAT sector to be updated is selected based on the first entry of the closed update block list. The updated sector is written to the next available sector location in the GAT block.

GAT 기입 동작은 섹터 위치가 업데이트된 GAT 섹터에서 이용될 수 없을 때 제어 기입 동작 동안 발생한다. 새로운 GAT 블록은 할당되고, GAT 인덱스에 의해 정의된 바와 같은 유효한 GAT 섹터들은 가득찬 GAT 블록으로부터 순차적 순서로 카피된다. 전체 GAT 블록은 그 다음 소거된다.The GAT write operation occurs during the control write operation when the sector location is not available in the updated GAT sector. A new GAT block is allocated and valid GAT sectors as defined by the GAT index are copied in sequential order from the full GAT block. The entire GAT block is then erased.

GAT 캐시는 GAT 섹터의 128 엔트리들의 부분할 시 엔트리들의 제어기 RAM(130)의 카피본이다. GAT 캐시 엔트리들의 수는 시스템 설계 파라미터이고, 통상 값 32를 가진다. 관련 섹터 부분할을 위한 GAT 캐시는 엔트리가 GAT 섹터로부터 판단되는 각각의 시간에 생성된다. 다중 GAT 캐시들은 유지된다. 그 수는 통상 4의 값을 가진 설계 파라미터이다. GAT 캐시는 최근 최소 사용된 것을 바탕으로 다른 섹터 부분할을 위하여 엔트리들이 겹쳐 기입된다.The GAT cache is a copy of the controller RAM 130 of the entries upon partial 128 entries of the GAT sector. The number of GAT cache entries is a system design parameter and usually has a value of 32. A GAT cache for related sector subdivision is created each time an entry is determined from a GAT sector. Multiple GAT caches are maintained. The number is usually a design parameter with a value of four. The GAT cache is overwritten with entries for other sector subdivisions based on the least recently used.

소거된 메타블록 관리Erased metablock management

도 2에 도시된 소거 블록 관리기(160)는 디렉토리 및 시스템 제어 정보를 유지하기 위한 한 세트의 리스트들을 사용하는 소거 블록들을 관리한다. 이들 리스트들은 제어기 RAM(130) 및 플래시 메모리(200) 사이에 분배된다. 소거된 메타블록이 사용자 데이터의 저장을 위해, 또는 시스템 제어 데이터 구조들의 저장을 위해 할당되어야 할 때, 제어기 RAM에 유지된 할당 블록 리스트(ABL)(도 15 참조)에서 다음 이용 가능한 메타블록 수는 선택된다. 유사하게, 메타블록이 회수된 후 소거될 때, 번호는 제어기 RAM에 홀딩된 삭제된 블록 리스트(CBL)에 부가된다. 상대적 정적 디렉토리 및 시스템 제어 데이터는 플래시 메모리에 저장된다. 이들은 플래시 메모리의 모든 블록들의 소거 상태를 리스트하는 소거 블록 리스트들 및 비트맵(MAP)을 포함한다. 소거된 블록 리스트들 및 MAP는 개별 섹터들에 저장되고 MAP 블록으로서 공지된 전용 메타블록에 기록된다. 제어기 RAM 및 플래시 메모리 사이에 분배된 이들 리스트들은 소거된 메타블록 사용을 효과적으로 관리하기 위하여 소거된 블록 기록들의 계층을 제공한다.The erase block manager 160 shown in FIG. 2 manages erase blocks that use a set of lists to maintain directory and system control information. These lists are distributed between the controller RAM 130 and the flash memory 200. When an erased metablock has to be allocated for the storage of user data or for the storage of system control data structures, the next available metablock number in the allocation block list (ABL) (see FIG. 15) maintained in the controller RAM is Is selected. Similarly, when the metablock is retrieved and then erased, the number is added to the deleted block list CBL held in the controller RAM. Relative static directories and system control data are stored in flash memory. These include erase block lists and bitmaps (MAPs), which list erase states of all blocks of flash memory. The erased block lists and the MAP are stored in separate sectors and written to a dedicated metablock known as the MAP block. These lists distributed between the controller RAM and the flash memory provide a hierarchy of erased block writes to effectively manage erased metablock usage.

도 18은 사용을 위한 제어 및 디렉토리 정보의 분배 및 흐름 및 소거된 블록 들의 재사이클링을 도시하는 개략적인 블록도이다. 제어 및 디렉토리 데이터는 플래시 메모리(200)에 잔류하는 제어기 RAM(130) 또는 MAP 블록(750)에 홀딩되는 리스트들에 유지된다.18 is a schematic block diagram illustrating the distribution and flow of control and directory information for use and recycling of erased blocks. Control and directory data are maintained in lists held in controller RAM 130 or MAP block 750 remaining in flash memory 200.

바람직한 실시예에서, 제어기 RAM(130)은 부가적인 블록 리스트(ABL)(610) 및 삭제된 블록 리스트(CBL)(740)를 홀딩한다. 도 15와 관련하여 이전에 기술된 바와 같이, 할당 블록 리스트(ABL)는 메타블록들이 사용자 데이터의 저장, 또는 시스템 제어 데이터 구조들의 저장을 위하여 최근에 할당된 트랙을 유지한다. 새로운 소거된 메타블록이 할당될 필요가 있을 때, 할당 블록 리스트(ABL)내 다음 이용 가능한 메타블록 수는 선택된다. 유사하게, 삭제된 블록 리스트(CBL)는 할당 해제되고 소거된 업데이트 메타블록들의 트랙을 유지하기 위하여 사용된다. ABL 및 CBL은 최근에 액티브 업데이트 블록들을 트랙킹할 때 빠른 액세스 및 쉬운 관리를 위해 제어기 RAM(130)(도 1 참조)에 홀딩된다.In the preferred embodiment, controller RAM 130 holds additional block list (ABL) 610 and deleted block list (CBL) 740. As previously described with respect to FIG. 15, the allocation block list (ABL) keeps track of which metablocks have been recently assigned for storage of user data, or storage of system control data structures. When a new erased metablock needs to be allocated, the next available metablock number in the allocation block list (ABL) is selected. Similarly, the deleted block list CBL is used to keep track of deallocated and erased update metablocks. ABL and CBL are held in controller RAM 130 (see FIG. 1) for quick access and easy management when tracking active update blocks recently.

할당 블록 리스트(ABL)는 소거된 메타블록들 풀의 트랙 및 업데이트 블록일 소거된 메타블록들의 할당을 유지한다. 따라서, 각각의 이들 메타블록들은 ABL 계류 할당시 소거 블록인지, 개방 업데이트 블록인지, 또는 폐쇄된 업데이트 블록인지를 나타내는 속성에 의해 기술될 수 있다. 도 18은 소거된 ABL 리스트(612), 개방 업데이트 블록 리스트(614) 및 폐쇄된 업데이트 블록 리스트(616)를 포함하는 ABL을 도시한다. 게다가, 개방된 업데이트 블록 리스트(614)와 연관된 것은 연관된 본래 블록 리스트(615)이다. 유사하게, 폐쇄된 업데이트 블록 리스트와 연관된 것은 연관된 소거된 본래 블록 리스트(617)이다. 도 15에 이전에 도시된 바와 같이, 이들 연관된 리스트들은 각각 개방 업데이트 블록 리스트(614) 및 폐쇄 업데이트 블록 리스트(616)의 서브세트이다. 소거된 ABL 블록 리스트(612), 개방된 업데이트 블록 리스트(614), 및 폐쇄된 업데이트 블록 리스트(616)는 할당 블록 리스트(ABL)(610)의 모든 서브세트들이고, 각각의 엔트리들은 각각 대응하는 속성을 가진다.The allocation block list (ABL) maintains the allocation of erased metablocks as tracks and update blocks of the erased metablocks pool. Thus, each of these metablocks may be described by an attribute indicating whether it is an erase block, an open update block, or a closed update block in the ABL pending allocation. 18 illustrates an ABL including an erased ABL list 612, an open update block list 614, and a closed update block list 616. In addition, associated with the open update block list 614 is the original block list 615 associated with it. Similarly, associated with the closed update block list is the associated erased original block list 617. As previously shown in FIG. 15, these associated lists are a subset of the open update block list 614 and the closed update block list 616, respectively. The erased ABL block list 612, the open update block list 614, and the closed update block list 616 are all subsets of the allocation block list (ABL) 610, each entry corresponding to each corresponding entry. Has properties

MAP 블록(750)은 플래시 메모리(200)에서 소거 관리 기록들을 저장하는 것에 전용으로 사용되는 메타블록이다. MAP 블록은 MAP 블록 섹터들의 시간 시리즈들을 저장하고, 각각의 MAP 섹터는 소거 블록 관리(EBM) 섹터(760) 또는 MAP 섹터(780)이다. 소거된 블록들은 할당시 사용되고 메타블록이 회수될 때 재사이클되고, 연관된 제어 및 디렉토리 데이터는 바람직하게 MAP 블록내에서 업데이트될 수 있는 논리 섹터에 포함되고, 업데이트 데이터의 각각의 예는 새로운 블록 섹터에 기록된다. EBM 섹터들(760) 및 MAP 섹터들(780)의 다중 카피들은 MAP 블록(750)에 존재하고, 단지 가장 최신 버전만이 유효하다. 유효 MAP 섹터들의 위치들에 대한 인덱스는 EMB 블록내 필드에 포함된다. 유효 EMB 섹터는 제어 기입 동작 동안 MAP 블록내에서 항상 최종 기입된다. MAP 블록(750)이 가득차게 될 때, 새로운 블록 위치에 모든 유효 섹터들을 기입함으로써 제어 기입 동작 동안 컴팩트화된다. 가득찬 블록은 그 다음 소거된다.MAP block 750 is a metablock dedicated to storing erase management records in flash memory 200. The MAP block stores time series of MAP block sectors, each MAP sector being an erase block management (EBM) sector 760 or MAP sector 780. Erased blocks are used in allocation and recycled when the metablock is retrieved, and the associated control and directory data are preferably contained in logical sectors that can be updated in the MAP block, each example of update data being in a new block sector. Is recorded. Multiple copies of EBM sectors 760 and MAP sectors 780 are present in MAP block 750, only the most recent version is valid. The index for the locations of valid MAP sectors is contained in a field in the EMB block. A valid EMB sector is always last written in the MAP block during a control write operation. When the MAP block 750 becomes full, it is compacted during the control write operation by writing all valid sectors to the new block position. The full block is then erased.

각각의 EBM 섹터(760)는 소거된 블록들 집단의 서브세트의 어드레스들의 리스트들인 소거된 블록리스트들(EBL)(770)을 포함한다. 소거된 블록 리스트들(EBL)(770)은 소거된 메타블록 번호들을 포함하는 버퍼로서 작동하고, 이로부터 메타블록 번호들은 ABL을 재충전하기 위하여 주기적으로 취해지고, 메타블록 번호들은 CBL을 다시 비우기 위하여 주기적으로 부가된다. EBL(770)은 이용 가능한 블록 버퍼(ABB)(772), 소거된 블록 버퍼(EBB)(774) 및 소거된 블록 버퍼(CBB)(776)들로서 사용한다.Each EBM sector 760 includes erased block lists (EBL) 770, which are lists of addresses of a subset of the erased block family. Erased block lists (EBL) 770 act as a buffer containing erased metablock numbers, from which metablock numbers are taken periodically to recharge the ABL, and metablock numbers are used to empty the CBL again. It is added periodically. EBL 770 uses as available block buffer (ABB) 772, erased block buffer (EBB) 774 and erased block buffer (CBB) 776.

이용 가능한 블록 버퍼(ABB)(772)는 이전 ABL 충전 동작 다음 바로 ABL(610)에 엔트리들의 카피를 포함한다. 상기 카피는 사실상 ABL 충전 동작 바로 이후 ABL의 백업 카피이다.The available block buffer (ABB) 772 includes a copy of the entries in ABL 610 immediately after the previous ABL charging operation. The copy is actually a backup copy of the ABL immediately after the ABL charging operation.

소거된 블록 버퍼(EBB)(774)는 MAP 섹터들(780) 또는 CBB 리스트(776)(이하에 기술됨)로부터 이전에 전달되고, ABL 충전 동작 동안 ABL(610)에 전달하기 위하여 이용할 수 있는 소거된 블록 어드레스들을 포함한다.The erased block buffer (EBB) 774 is previously delivered from the MAP sectors 780 or the CBB list 776 (described below) and may be available for delivery to the ABL 610 during an ABL charging operation. Contains erased block addresses.

삭제된 블록 버퍼(CBB)(776)는 CBL 비움 동작 동안 CBL(740)로부터 전달되었고 추후 MAP 섹터들(780) 또는 EBB 리스트(774)에 전달될 소거된 블록들의 어드레스들을 포함한다.The erased block buffer (CBB) 776 contains addresses of erased blocks that were delivered from the CBL 740 during the CBL empty operation and will later be delivered to the MAP sectors 780 or the EBB list 774.

각각의 MAP 섹터들(780)은 MAP라 불리는 비트맵 구조를 포함한다. MAP는 각각의 블록의 소거 상태를 표시하기 위하여 사용된 플래시 메모리의 각각의 메타블록에 대한 하나의 비트를 사용한다. EBM 섹터에서 ABL, CBL, 또는 소거된 블록 리스트들에 리스트된 블록 어드레스들에 대응하는 비트들은 MAP에서 소거 상태로 설정되지 않는다. Each MAP sector 780 includes a bitmap structure called MAP. The MAP uses one bit for each metablock of flash memory used to indicate the erase state of each block. Bits corresponding to ABL, CBL, or block addresses listed in the erased block lists in the EBM sector are not set to the erased state in the MAP.

유효한 데이터 구조들을 포함하지 않고 MAP내의 소거 블록, 소거된 블록 리스트들, ABL 또는 CBL로서 설계되지 않은 임의의 블록은 결코 블록 할당 알고리즘 에 의해 사용되지 않고 그러므로 호스트 또는 제어 데이터 구조들의 저장을 위해 액세스할 수 없다. 이것은 액세스 가능한 플래시 메모리 어드레스 공간으로부터 결함 위치들을 가진 블록들을 배제하기 위한 간단한 메카니즘을 제공한다.Any block that does not contain valid data structures and is not designed as an erased block, erased block lists, ABL or CBL in the MAP is never used by the block allocation algorithm and is therefore not accessible for storage of host or control data structures. Can't. This provides a simple mechanism for excluding blocks with defective locations from the accessible flash memory address space.

도 18에 도시된 계층은 소거된 블록 레코드들이 효율적으로 관리되게 하고 제어기의 RAM에 저장된 블록 어드레스 리스트들의 완전한 보안을 제공한다. 소거된 블록 엔트리들은 드물게 이들 블록 어드레스 리스트들 및 하나 이상의 MAP 섹터들(780) 사이에서 교환된다. 이들 리스트들은 플래시 메모리의 섹터들에 저장된 어드레스 변환 테이블들 및 소거된 블록 리스트들의 정보, 및 플래시 메모리의 작은수의 기준 데이터 블록들의 제한된 스캐닝을 통하여 전력 차단 후 시스템 초기화 동안 재구성될 수 있다.The hierarchy shown in FIG. 18 allows the erased block records to be managed efficiently and provides complete security of the block address lists stored in the controller's RAM. Erased block entries are rarely exchanged between these block address lists and one or more MAP sectors 780. These lists can be reconstructed during system initialization after power down through limited scanning of address translation tables and erased block lists stored in sectors of flash memory, and a small number of reference data blocks in flash memory.

소거된 메타블록 기록들의 계층을 업데이트하기 위하여 제공된 알고리즘들은 순서 블록들을 반영하는 CBL(740)으로부터 블록 어드레스들의 버스트들을 가진 MAP 블록(750)으로부터 어드레스 순서의 블록들의 인터리빙 버스트들이 호스트에 의해 업데이트되는 순서에 사용하기 위하여 소거된 블록들이 할당되게 한다. 대부분의 메타블록 크기들 및 시스템 메모리 용량들을 위해, 단일 MAP 섹터는 시스템에서 모든 메타블록들에 비트맵을 제공할 수 있다. 이 경우, 소거된 블록들은 이런 MAP 섹터에 기록된 바와 같은 어드레스 순서에 사용하기 위하여 항상 할당된다.Algorithms provided for updating a layer of erased metablock writes are the order in which interleaving bursts of blocks of address order are updated by the host from MAP block 750 with bursts of block addresses from CBL 740 reflecting order blocks. Allow erased blocks to be allocated for use in For most metablock sizes and system memory capacities, a single MAP sector can provide a bitmap for all metablocks in the system. In this case, erased blocks are always allocated for use in the address order as recorded in this MAP sector.

소거 블록 관리 동작들Erase block management operations

이전에 기술된 바와 같이, ABL(610)은 사용하기 위하여 할당될 수 있는 소거된 메타블록들, 및 데이터 업데이트 블록들로서 최근에 할당된 메타블록들에 대한 어드레스 엔트리들을 가진 리스트이다. AL에서 블록 어드레스들의 실제 수는 시스템 설계 변수들인 최대 및 최소 제한들 사이에 놓인다. 제조 동안 포맷화된 ABL 엔트리들의 수는 카드 타입 및 용량의 함수이다. 게다가, ABL에서 엔트리들의 수는 이용 가능한 소거된 블록들의 수가 수명 동안 블록들의 결함에 의해 감소될 때, 시스템의 수명 종료 근처에서 감소될 수 있다. 예를 들어, 충전 동작 후, ABL의 엔트리들은 다음 목적을 위하여 이용 가능한 블록들을 나타낼 수 있다. 부분적으로 기입되는 데이터 블록들을 위한 엔트리들은 블록당 하나의 엔트리를 가지지만, 동시에 개방된 업데이트 블록들의 최대값에 대하여 시스템 제한을 초과하지 않는다. 이것은 데이터 업데이트 블록들로서 할당하기 위하여 소거된 블록들에 대해 1 내지 20 엔트리들 사이이다. 제어 블록들로서 할당을 위하여 소거된 블록들에 대해 4개의 엔트리들이 있다.As previously described, ABL 610 is a list with erased metablocks that can be allocated for use, and address entries for recently assigned metablocks as data update blocks. The actual number of block addresses in the AL lies between the maximum and minimum limits, which are system design variables. The number of ABL entries formatted during manufacture is a function of card type and capacity. In addition, the number of entries in ABL can be reduced near the end of life of the system, when the number of available erased blocks is reduced by the defect of blocks during its lifetime. For example, after the charging operation, the entries of the ABL may represent the blocks available for the next purpose. Entries for partially written data blocks have one entry per block, but do not exceed the system limit for the maximum value of open update blocks at the same time. This is between 1 and 20 entries for blocks that are erased for allocation as data update blocks. There are four entries for blocks that are erased for assignment as control blocks.

ABL 충전 동작ABL charging operation

ABL(610)이 할당들을 통하여 삭제되었기 때문에, 재충전이 필요할 것이다. ABL을 충전하기 위한 동작은 제어 기입 동작 동안 발생한다. 이것은 블록이 할당되어야 할 때 트리거되지만, ABL은 데이터 업데이트 블록으로서 할당하거나, 몇몇 다른 제어 데이터 업데이트 블록을 위하여 이용할 수 있는 불충분한 소거 블록 엔트리들을 포함한다. 제어 기입 동안, ABL 충전 동작은 GAT 업데이트 동작과 동시이다.Since ABL 610 has been deleted through assignments, recharging will be necessary. The operation for charging the ABL occurs during the control write operation. This is triggered when a block should be allocated, but the ABL contains insufficient erase block entries that can be allocated as a data update block or available for some other control data update block. During the control write, the ABL charging operation is concurrent with the GAT update operation.

다음 작용들은 ABL 충전 동작 동안 발생한다.The following actions occur during an ABL charging operation.

1. 현재 데이터 업데이트 블록들의 속성들을 가진 ABL 엔트리들은 유지된다.1. ABL entries with properties of current data update blocks are maintained.

2. 만약 블록에 대한 엔트리가 동시 GAT 업데이트 동작에 기입되지 않으면 폐쇄된 데이터 업데이트 블록들의 속성들을 가진 ABL 엔트리들은 유지되고, 상기 경우 엔트리는 ABL로부터 제거된다.2. If the entry for the block is not written to the concurrent GAT update operation, the ABL entries with the attributes of the closed data update blocks are retained, in which case the entry is removed from the ABL.

3. 할당되지 않은 소거 블록들에 대한 ABL 엔트리들은 유지된다.3. ABL entries for unallocated erase blocks are maintained.

4. ABL은 엔트리들의 제거에 의해 생성된 갭들을 제거하기 위하여 컴팩트화되고, 엔트리들의 순서를 유지한다.4. ABL is compacted to remove gaps created by the removal of entries and maintains the order of entries.

5. ABL은 EBB 리스트로부터 다음 이용 가능한 엔트리들을 추가함으로써 완전히 충전된다.5. The ABL is fully charged by adding the next available entries from the EBB list.

6. ABB 리스트는 ABL의 현재 엔트리들과 함께 겹쳐 기입된다.6. The ABB list is overwritten with the current entries of the ABL.

CBL 비움 동작CBL empty action

CBL은 ABL로서 소거된 블록 엔트리들의 수에서 동일한 제한을 가진 제어기 RAM내 소거된 블록 어드레스들의 리스트이다. CBL을 비우기 위한 동작은 제어 기입 동작 동안 발생한다. 그러므로 이런 동작은 ABL 충전/GAT 업데이트 동작들, 또는 CBI 블록 기입 동작들과 동시이다. CBL 비움 동작에서, 엔트리들은 CBL(740)로부터 제거되고 CBB 리스트(776)에 기입된다.CBL is a list of erased block addresses in the controller RAM with the same limitation in the number of block entries erased as ABL. The operation to empty the CBL occurs during the control write operation. This operation is therefore concurrent with ABL charge / GAT update operations, or CBI block write operations. In a CBL empty operation, entries are removed from the CBL 740 and written to the CBB list 776.

MAP 교환 동작MAP exchange behavior

MAP 섹터들(780) 및 EBM 섹터들(760)내 소거 블록 정보 사이의 MAP 교환 동작은 EBB 리스트(774)가 비워질 때 제어 기입 동작 동안 주기적으로 발생할 수 있다. 만약 시스템의 모든 소거된 메타블록들이 EBM 섹터(760)에 기록되면, MAP 섹터(780)는 존재하고 MAP 교환은 수행된다. MAP 교환 동작 동안, 소거된 블록들을 가진 EBB(774)를 공급하는 MAP 섹터는 소스 MAP 섹터(782)로서 고려된다. 반대로, CBB(766)로부터 소거된 블록들을 수신하는 MAP 섹터는 목적지 MAP 섹터(784)로서 고려된다. 만약 하나의 MAP 섹터가 존재하면, 하기된 바와 같이 양쪽 소스 및 목적지 MAP 섹터로서 작동한다.MAP exchange operations between erase block information in MAP sectors 780 and EBM sectors 760 may occur periodically during a control write operation when the EBB list 774 is empty. If all erased metablocks in the system are written to EBM sector 760, then MAP sector 780 is present and MAP exchange is performed. During the MAP exchange operation, the MAP sector supplying the EBB 774 with erased blocks is considered as the source MAP sector 782. Conversely, a MAP sector that receives erased blocks from CBB 766 is considered as destination MAP sector 784. If there is one MAP sector, it acts as both source and destination MAP sector as described below.

다음 작용들은 MAP 교환 동안 수행된다.The following actions are performed during the MAP exchange.

1. 소스 MAP 섹터는 증가 포인터를 바탕으로 선택된다.1. The source MAP sector is selected based on the increment pointer.

2. 목적지 MAP 섹터는 소스 MAP 섹터에 있지 않은 제 1 CBB 엔트리에 있는 블록 어드레스를 바탕으로 선택된다.2. The destination MAP sector is selected based on the block address in the first CBB entry that is not in the source MAP sector.

3. 목적지 MAP 섹터는 CBB의 상대적 엔트리들에 의해 정의된 바와 같이 업데이트되고, 엔트리들은 CBB로부터 제거된다.3. The destination MAP sector is updated as defined by the relative entries of the CBB, and the entries are removed from the CBB.

4. 업데이트된 목적지 MAP 섹터는 만약 독립된 소스 MAP 섹터가 존재하지 않으면, MAP 블록에 기입된다.4. The updated destination MAP sector is written to the MAP block if no independent source MAP sector exists.

5. 소스 MAP 섹터는, CBB의 관련 엔트리들에 의해 정의된 바와 같이 업데이트되고, 엔트리들은 CBB로부터 제거된다.5. The source MAP sector is updated as defined by the relevant entries of the CBB, and the entries are removed from the CBB.

6. CBB의 나머지 엔트리들은 EBB에 부가된다.6. The remaining entries of the CBB are added to the EBB.

7. EBB는 소스 MAP 섹터로부터 정의된 소거된 블록 어드레스들을 가진 범위까지 충전된다.7. The EBB is charged to a range with erased block addresses defined from the source MAP sector.

8. 업데이트된 소스 MAP 섹터는 MAP 블록에 기입된다.8. The updated source MAP sector is written to the MAP block.

9. 업데이트된 EBM 섹터는 MAP 블록에 기입된다.9. The updated EBM sector is written to the MAP block.

리스트 관리List management

도 18은 다양한 리스트들 사이의 제어 및 디렉토리 정보의 분배 및 흐름을 도시한다. 편리성을 위하여, 도 18 [A] 내지 [O]에서 식별되는 리스트들의 엘리먼트들 사이에서 엔트리들을 이동시키고 엔트리들의 속성들을 교환하기 위한 동작들은 다음과 같다.18 illustrates the distribution and flow of control and directory information between the various lists. For convenience, the operations for moving entries and exchanging attributes of entries between the elements of the lists identified in FIGS. 18A-O are as follows.

[A] 소거된 블록이 호스트 데이터에 대한 업데이트 블록으로서 할당될 때, ABL내 엔트리의 속성들은 소거된 ABL 블록으로부터 개방 업데이트 블록으로 교환된다.[A] When an erased block is allocated as an update block for host data, the attributes of the entry in the ABL are exchanged from the erased ABL block to an open update block.

[B] 소거된 블록이 제어 블록으로서 할당될 때, ABL의 엔트리는 제거된다.[B] When the erased block is allocated as a control block, the entry of the ABL is removed.

[C] ABL 엔트리가 개방 업데이트 블록 속성들이 생성될 때, 연관된 본래 블록 필드는 업데이트된 논리 그룹에 대한 본래 메타블록 어드레스를 기록하기 위하여 엔트리에 부가된다. 이 정보는 GAT로부터 얻어진다.[C] When an ABL entry is created with open update block attributes, the associated original block field is added to the entry to record the original metablock address for the updated logical group. This information is obtained from the GAT.

[D] 업데이트 블록이 폐쇄될 때, ABL의 엔트리 속성들은 개방 업데이트 블록으로부터 폐쇄 업데이트 블록으로 변화된다.When the [D] update block is closed, the entry attributes of the ABL are changed from the open update block to the closed update block.

[E] 업데이트 블록이 폐쇄될 때, 연관된 본래 블록은 소거되고 ABL의 엔트리내 연관된 본래 블록 필드의 속성들은 소거된 본래 블록으로 변화된다.[E] When the update block is closed, the associated original block is erased and the attributes of the associated original block field in the entry of the ABL are changed to the erased original block.

[F] ABL 충전 동작 동안, 어드레스가 동일한 제어 기입 동작 동안 GAT에서 업데이트되는 임의의 폐쇄된 업데이트 블록은 ABL로부터 제거된 엔트리를 가진다.[F] During an ABL charging operation, any closed update block whose address is updated in the GAT during the same control write operation has an entry removed from the ABL.

[G] ABL 충전 동작 동안, 폐쇄된 업데이트 블록에 대한 엔트리가 ABL로부터 제거될 때, 연관된 소거 본래 블록에 대한 엔트리는 CBL로 이동된다.[G] During an ABL charging operation, when an entry for a closed update block is removed from the ABL, the entry for the associated erase original block is moved to the CBL.

[H] 제어 블록이 소거될 때, 이에 대한 엔트리는 CBL에 부가된다.When the [H] control block is erased, an entry for it is added to the CBL.

[I] ABL 충전 동작 동안, 소거된 블록 엔트리들은 EBB 리스트로부터 ABL로 이동되고, 소거된 ABL 블록들의 속성들이 주어진다.[I] During an ABL charging operation, the erased block entries are moved from the EBB list to the ABL and given the attributes of the erased ABL blocks.

[J] ABL 충전 동작 동안 모든 관련된 ABL 엔트리들의 변형 후, ABL의 블록 어드레스들은 ABB 리스트의 블록 어드레스들을 대체한다.[J] After modification of all relevant ABL entries during an ABL charging operation, the block addresses of the ABL replace the block addresses of the ABB list.

[K] 제어 기입 동안 ABL 충전 동작과 동시에, CBL에서 소거된 블록들에 대한 엔트리들은 CBB 리스트로 이동된다.Simultaneously with the ABL charging operation during the [K] control write, entries for blocks erased in the CBL are moved to the CBB list.

[L] MAP 교환 동작 동안, 모든 관련 엔트리들은 CBB 리스트로부터 MAP 목적지 섹터로 이동된다.[L] During the MAP exchange operation, all relevant entries are moved from the CBB list to the MAP destination sector.

[M] MAP 교환 동작 동안, 모든 관련 엔트리들은 CBB 리스트로부터 MAP 소스 선택기로 이동된다.During the [M] MAP exchange operation, all relevant entries are moved from the CBB list to the MAP source selector.

[N] MAP 교환 동작 동안 [L] 및 [M] 다음, 모든 나머지 엔트리들은 CBB 리스트로부터 EBB 리스트로 이동된다.[N] Following [L] and [M] during the MAP exchange operation, all remaining entries are moved from the CBB list to the EBB list.

[O] MAP 교환 동작 동안 [N] 다음에, [M]에 이동된 것과 다른 엔트리들은 만약 가능하면 EBB 리스트를 충전하기 위하여 MAP 소스 선택기로부터 이동된다.[O] Following [N] during the MAP exchange operation, entries other than those moved in [M] are moved from the MAP source selector if possible to fill the EBB list.

논리 대 물리 어드레스 변환Logical to Physical Address Translation

플래시 메모리에 논리 선택의 물리적 위치를 배치하기 위하여, 도 2에 도시된 논리 대 물리 어드레스 변환 모듈(140)은 논리 대 물리 어드레스 변환을 수행한다. 최근에 업데이트된 이들 논리 그룹들을 제외하고, 변환 벌크는 플래시 메모리(200)내에 잔류하는 그룹 어드레스 테이블(GAT) 또는 제어기 RAM(130)내 GAT 캐시를 사용하여 수행될 수 있다. 최근에 업데이트된 논리 그룹들에 대한 어드레스 변환들은 제어기 RAM(130)에 잔류하는 업데이트 블록들에 대한 어드레스 리스트들을 찾는 것을 요구할 것이다. 논리 선택기 어드레스에 대한 논리 대 물리 어드레스 변환을 위한 프로세스는 섹터가 배치된 논리 그룹과 연관된 블록 타입에 좌우된다. 블록들의 타입들은 완전한 블록, 순차적 데이터 업데이트 블록, 무순서 데이트 업데이트 블록, 폐쇄된 데이트 업데이트 블록이다.In order to place the physical location of the logical selection in the flash memory, the logical to physical address translation module 140 shown in FIG. 2 performs logical to physical address translation. Except for these recently updated logical groups, translation bulk may be performed using a group address table (GAT) remaining in flash memory 200 or a GAT cache in controller RAM 130. Address translations for recently updated logical groups will require finding address lists for update blocks remaining in controller RAM 130. The process for logical to physical address translation for the logical selector address depends on the block type associated with the logical group in which the sector is placed. The types of blocks are complete blocks, sequential data update blocks, random data update blocks, and closed data update blocks.

도 19는 논리 대 물리 어드레스 변환 프로세스를 도시하는 흐름도이다. 필수적으로, 대응하는 메타블록 및 물리적 섹터는 개방 업데이트 블록 리스트 및 폐쇄 업데이트 블록 리스트 같은 다양한 업데이트 디렉토리들을 찾기 위하여 논리 섹터 어드레스를 사용함으로써 배치된다. 만약 연관된 메타블록이 업데이트 프로세스의 일부가 아니면, 디렉토리 정보는 GAT에 의해 제공된다. 논리 대 물리 어드레스 변환은 다음 단계들을 포함한다:19 is a flowchart illustrating a logical to physical address translation process. Essentially, corresponding metablocks and physical sectors are located by using logical sector addresses to find various update directories, such as an open update block list and a closed update block list. If the associated metablock is not part of the update process, directory information is provided by the GAT. Logical to physical address translation involves the following steps:

단계 800: 논리 섹터 어드레스는 제공된다.Step 800: A logical sector address is provided.

단계 810: 제어기 RAM에서 개방 업데이트 블록들 리스트(614)(도 15 및 18 참조)의 주어진 논리 어드레스를 찾는다. 만약 찾음이 실패하면, 단계 820으로 진행하고, 그렇지 않으면 단계 830으로 진행한다.Step 810: Find the given logical address of the open update blocks list 614 (see Figures 15 and 18) in the controller RAM. If the finding fails, go to step 820; otherwise, go to step 830.

단계 820: 폐쇄된 업데이트 블록 리스트(616)에서 주어진 논리 어드레스를 찾는다. 만약 찾음이 실패하면, 주어진 논리 어드레스는 임의의 업데이트 프로세서의 일부가 아니다. GAT 어드레스 변환 동안 단계 870으로 진행한다. 그렇지 않으면, 폐쇄된 업데이트 블록 어드레스 변환 동안 단계 860으로 진행한다.Step 820: Find the given logical address in the closed update block list 616. If the find fails, the given logical address is not part of any update processor. Proceed to step 870 during GAT address translation. Otherwise, proceed to step 860 during the closed update block address translation.

단계 830: 만약 주어진 논리 어드레스를 포함하는 업데이트 블록이 순차적이 면, 순차적 업데이트 블록 어드레스 변환 동안 단계 840으로 진행한다. 그렇지 않으면 무순서 업데이트 블록 어드레스 변환 동안 단계 850으로 진행한다.Step 830: If the update block containing the given logical address is sequential, proceed to step 840 during sequential update block address translation. Otherwise proceed to step 850 during random update block address translation.

단계 840: 순차적인 업데이트 블록 어드레스 변환을 사용하여 메타블록 어드레스를 얻는다. 단계 880으로 진행한다.Step 840: Obtain the metablock address using sequential update block address translation. Proceed to step 880.

단계 850: 무순서 업데이트 블록 어드레스 변환을 사용하여 메타블록 어드레스를 얻는다. 단계 880으로 진행한다.Step 850: Obtain a metablock address using random update block address translation. Proceed to step 880.

단계 860: 폐쇄된 업데이트 블록 어드레스 변환을 사용하여 메타블록 어드레스를 얻는다. 단계 880으로 진행한다.Step 860: Obtain a metablock address using closed update block address translation. Proceed to step 880.

단계 870: 그룹 어드레스 테이블(GAT) 변환을 사용하여 메타블록 어드레스를 얻는다. 단계 880으로 진행한다.Step 870: Obtain a metablock address using group address table (GAT) translation. Proceed to step 880.

단계 880: 메타블록 어드레스를 물리적 어드레스로 전환한다. 변환 방법은 메타블록이 재링크되는지 여부에 따른다.Step 880: Convert the metablock address into a physical address. The conversion method depends on whether the metablock is relinked.

단계 890: 물리적 섹터 어드레스는 얻어진다.Step 890: A physical sector address is obtained.

다양한 어드레스 변환 프로세스들은 다음과 같이 보다 상세히 기술된다.Various address translation processes are described in more detail as follows.

순차적 업데이트 블록 어드레스 변환(단계 840)Sequential Update Block Address Translation (step 840)

순차적 업데이트 블록과 연관된 논리 그룹내 타켓 논리 섹터 어드레스에 대한 어드레스 변환은 다음과 같이 개방 업데이트 블록 리스트(614)(도 15 및 18)의 정보로부터 직접 달성될 수 있다.Address translation for the target logical sector address in the logical group associated with the sequential update block can be achieved directly from the information in the open update block list 614 (FIGS. 15 and 18) as follows.

1. 타켓 논리 섹터가 업데이트 블록에 배치되는지 연관된 본래 블록에 배치되는지 리스트의 "페이지 태그" 및 "기입된 섹터들의 수" 필드들로부터 결정된다.1. It is determined from the "page tag" and "number of written sectors" fields of the list whether the target logical sector is placed in the update block or the associated original block.

2. 타켓 논리 섹터에 적당한 메타블록 어드레스는 리스트로부터 판독된다.2. The metablock address appropriate for the target logical sector is read from the list.

3. 메타블록내 섹터 어드레스는 적당한 "페이지 태그" 필드로부터 결정된다.3. The sector address in the metablock is determined from the appropriate "Page Tag" field.

무순서 업데이트 블록 어드레스 변환(단계 850)Random update block address translation (step 850)

무순서 업데이트 블록과 연관된 논리 그룹내 타켓 논리 섹터 어드레스에 대한 어드레스 변환 시퀀스는 다음과 같다.The address translation sequence for the target logical sector address in the logical group associated with the random update block is as follows.

1. 섹터가 최근에 기입 섹터인 것이 RAM의 무순서 섹터 리스트로부터 결정되면, 어드레스 변환은 이 리스트의 위치로부터 직접 달성될 수 있다.1. If it is determined from the random sector list of RAM that the sector is the recent write sector, address translation can be achieved directly from the location of this list.

2. CBI 블록내 가장 최근에 기입된 섹터는 무순서 블록 데이터 필드 내에 타켓 논리 섹터 어드레스에 관련된 무순서 업데이트 블록의 물리적 어드레스를 포함한다. 또한, 간접 섹터 인덱스 필드 내에 이런 무순서 업데이트 블록(도 16a ~ 16e 참조)에 관련된 최종 기입된 CBI 섹터의 CBI 블록내 오프셋을 포함한다.2. The most recently written sector in the CBI block contains the physical address of the random update block associated with the target logical sector address in the random block data field. Also included in the indirect sector index field is the offset in the CBI block of the last written CBI sector related to this random update block (see FIGS. 16A-16E).

3. 이들 필드들의 정보는 RAM에 캐시되고, 추후 어드레스 변환 동안 섹터를 판독할 필요성을 제거한다.3. The information in these fields is cached in RAM, eliminating the need to read sectors during later address translation.

4. 단계 3에서 간접 섹터 인덱스 필드에 의해 식별된 CBI 섹터는 판독된다.4. The CBI sector identified by the indirect sector index field in step 3 is read.

5. 대부분 최근에 액세스된 무순서 업데이트 서브그룹에 대한 직접 섹터 인덱스 필드는 RAM에 캐시되고, 동일한 무순서 업데이트 블록에 반복된 액세스들을 위해 단계 4에서 판독을 수행할 필요성을 제거한다.5. The direct sector index field for the most recently accessed randomized update subgroup is cached in RAM, eliminating the need to perform a read in step 4 for repeated accesses to the same randomized update block.

6. 단계 4 또는 단계 5에서 직접 섹터 인덱스 필드는 차례로 타켓 논리 섹터 어드레스를 포함하는 논리 서브 그룹에 관한 CBI 섹터를 식별한다.6. In step 4 or step 5 the direct sector index field identifies the CBI sector for the logical subgroup which in turn contains the target logical sector address.

7. 타켓 논리 섹터 어드레스에 대한 무순서 블록 인덱스 엔트리는 단계 6에 서 식별된 CBI 섹터로부터 판독된다.7. The random block index entry for the target logical sector address is read from the CBI sector identified in step 6.

8. 가장 최근에 판독된 무순서 블록 인덱스 필드는 제어기 RAM에서 캐시될 수 있고, 동일한 논리 서브 그룹에 대한 반복된 액세스들을 위해 단계 4 및 단계 7을 수행할 필요성을 제거한다.8. The most recently read randomized block index field can be cached in the controller RAM, eliminating the need to perform steps 4 and 7 for repeated accesses to the same logical subgroup.

9. 무순서 블록 인덱스 엔트리는 무순서 업데이트 블록 또는 연관된 본래 블록내 타켓 논리 섹터의 위치를 정의한다. 만약 타켓 논리 섹터의 유효 카피가 본래 블록내에 있으면, 본래 메타블록 및 페이지 태그 정보의 사용에 의해 배치된다.9. The random block index entry defines the location of the target logical sector in the random update block or associated original block. If a valid copy of the target logical sector is in the original block, it is placed by use of the original metablock and page tag information.

폐쇄된 업데이트 블록 어드레스 변환(단계 860)Closed Update Block Address Translation (step 860)

폐쇄된 업데이트 블록과 연관된 논리 그룹내 타켓 논리 섹터 어드레스에 대한 어드레스 변환은 다음과 같이 폐쇄된 블록 업데이트 리스트내 정보로부터 직접 달성될 수 있다(도 18 참조).Address translation for the target logical sector address in the logical group associated with the closed update block can be achieved directly from the information in the closed block update list as follows (see FIG. 18).

1. 타켓 논리 그룹에 할당된 메타블록 어드레스는 리스트로부터 판독된다.1. The metablock address assigned to the target logical group is read from the list.

2. 메타블록내 섹터 어드레스는 리스트내 "페이지 태그" 필드로부터 결정된다.2. The sector address in the metablock is determined from the "Page Tag" field in the list.

GAT 어드레스 변환(단계 870)GAT Address Translation (Step 870)

만약 논리 그룹이 개방 또는 폐쇄 블록 업데이트 리스트들에 의해 참조되지 않으면, GAT의 엔트리는 유효하다. GAT에 의해 참조된 논리 그룹의 타켓 논리 섹터 어드레스에 대한 어드레스 변환 시퀀스는 다음과 같다.If the logical group is not referenced by open or closed block update lists, the entry of the GAT is valid. The address translation sequence for the target logical sector address of the logical group referenced by the GAT is as follows.

1. RAM에서 이용 가능한 GAT의 범위들은 만약 타켓 논리 그룹에 대한 엔트리가 GAT 캐시에 포함되면 결정하기 위하여 평가된다.1. The ranges of GAT available in RAM are evaluated to determine if an entry for the target logical group is included in the GAT cache.

2. 만약 타켓 논리 그룹이 단계 1에서 발견되면, GAT 캐시는 타켓 논리 섹터 어드레스의 변환을 허용하는 메타블록 어드레스 및 페이지 태그 모두를 포함하는 전체 그룹 어드레스 정보를 포함한다.2. If the target logical group is found in step 1, the GAT cache contains full group address information including both the metablock address and the page tag to allow translation of the target logical sector address.

3. 만약 타켓 어드레스가 GAT 캐시내에 있지 않으면, GAT 인덱스는 타켓 논리 그룹 어드레스에 관련한 GAT 섹터의 위치를 식별하기 위하여 타켓 GAT 블록을 위해 판독되어야 한다. 3. If the target address is not in the GAT cache, the GAT index should be read for the target GAT block to identify the location of the GAT sector relative to the target logical group address.

4. 최종 액세스된 GAT 블록에 대한 GAT 인덱스는 제어기 RAM에 홀딩되고 플래시 메모리로부터 섹터를 판독할 필요없이 액세스될 수 있다.4. The GAT index for the last accessed GAT block is held in the controller RAM and can be accessed without having to read a sector from the flash memory.

5. 모든 GAT 블록에 대한 메타블록 어드레스들의 리스트, 및 각각의 GAT 블록에 기입된 섹터들의 수는 제어기 RAM에 홀딩된다. 만약 요구된 GAT 인덱스가 단계 4에서 이용될 수 없으면, 플래시 메모리로부터 직접 판독될 수 있다.5. The list of metablock addresses for all GAT blocks, and the number of sectors written to each GAT block, are held in the controller RAM. If the required GAT index is not available in step 4, it can be read directly from the flash memory.

6. 타켓 논리 그룹 어드레스에 관한 GAT 섹터는 단계 4 또는 단계 6에서 얻어진 GAT 인덱스에 의해 정의된 GAT 블록의 섹터 위치로부터 판독된다. GAT 캐시는 타켓 엔트리를 포함하는 섹터의 부분할로 업데이트된다.6. The GAT sector with respect to the target logical group address is read from the sector position of the GAT block defined by the GAT index obtained in step 4 or step 6. The GAT cache is updated with a portion of the sector containing the target entry.

7. 타켓 섹터 어드레스는 메타블록 어드레스 및 타켓 GAT 엔트리내의 '페이지 태그" 필드들로부터 얻어진다.7. The target sector address is obtained from the 'page tag' fields in the metablock address and target GAT entry.

메타블록 대 물리적 어드레스 변환(STEP 880)Metablock-to-Physical Address Translation (STEP 880)

만약 메타블록이 재링크되었다는 것을 메타블록 어드레스와 연관된 플래그가 가리키면, 관련된 LT 섹터는 타켓 섹터 어드레스에 대한 소거 블록 어드레스를 결정하기 위하여 BLM 블록으로부터 판독된다. 그렇지 않으면, 소거 블록 어드레스는 메타블록 어드레스로부터 직접 결정된다.If the flag associated with the metablock address indicates that the metablock has been relinked, the associated LT sector is read from the BLM block to determine the erase block address for the target sector address. Otherwise, the erase block address is determined directly from the metablock address.

스크래치 패드 블록Scratch pad block

다른 실시예에서, 스크래치 패드 블록("SPB")은 업데이트 블록에 기입된 버퍼 데이터에 실행된다. 비휘발성 메모리에 대한 업데이트는 미리 결정된 조건에 따라 업데이트 블록 또는 스크래치 패드 블록에 같은 적어도 두 개의 중재 스트림들에 기록될 수 있다. 스크래치 패드 블록은 상부 블록을 위하여 궁극적으로 정해진 버퍼된 업데이트 데이터에 사용된다. 바람직한 실시예에서, 업데이트 블록에 저장된 스크래치 패드에 저장된 데이터의 인덱스("SPBI/CBI")는 제어기 RAM의 데이터 구조들에 유지된다. 이들 데이터 구조들은 스크래치 패드 블록들(SPB) 및 무순서 블록들의 모든 유효 섹터들의 트랙킹 및 빠른 액세스를 허용한다. 하기된 바와 같이 적당한 때, SPB1/CB1 데이터는 스크래치 패드 블록 페이지의 사용되지 않은 부분에서 절약될 것이다.In another embodiment, the scratch pad block ("SPB") is executed on the buffer data written to the update block. The update to the nonvolatile memory may be written to at least two arbitration streams, such as in an update block or scratch pad block, according to a predetermined condition. The scratch pad block is used for buffered update data that is ultimately defined for the upper block. In a preferred embodiment, the index of data stored in the scratch pad stored in the update block ("SPBI / CBI") is maintained in the data structures of the controller RAM. These data structures allow tracking and quick access of all valid sectors of scratch pad blocks (SPB) and random blocks. When appropriate as described below, SPB1 / CB1 data will be saved in the unused portion of the scratch pad block page.

이런 실시예에서, 도 19에 도시된 어드레스 변환은 SPB에서 버퍼된 임의의 데이터의 룩업(lookup)을 포함하도록 변형된다. 따라서, 개방 업데이트 블록(810) 및 순차적 업데이트 블록(830) 사이에는 SPB에 버퍼된 임의의 데이터가 있다는 것을 결정하기 위하여 부가적인 질문 박스가 있을 것이다. 만약 없다면, 흐름은 순차적 업데이트 블록(830)으로 진행하고, 그렇지 않으면 메타블록 대 물리적 어드레스 변환 모듈(890)로 진행하기 전에 SPB 어드레스 변환이 있을 것이다.In this embodiment, the address translation shown in FIG. 19 is modified to include a lookup of any data buffered in the SPB. Thus, there will be an additional question box between the open update block 810 and the sequential update block 830 to determine that there is any data buffered in the SPB. If not, flow proceeds to sequential update block 830, otherwise there will be SPB address translation before proceeding to metablock to physical address translation module 890.

스크래치 패드 블록의 실행은 Gorobets 등에 의한 발명의 명칭이 "Non-Volatile Memory And Method With Improved Indexiing For Scratch Pad And Update Blocks"인 2006년 7월 13일 공개된 US-2006-0155922에 기술되었다.Execution of the scratch pad block is described in US-2006-0155922 published July 13, 2006, entitled "Non-Volatile Memory And Method With Improved Indexiing For Scratch Pad And Update Blocks".

제어 데이터 관리Control data management

도 20은 메모리 관리 동작중 제어 데이터 구조들 상에서 수행되는 동작들의 계층을 도시한다. 데이터 업데이트 관리 동작들은 RAM에 잔류하는 다양한 리스트들에 작용한다. 제어 기입 동작들은 다양한 제어 데이터 섹터들 및 플래시 메모리의 전용 블록들에 작용하고 또한 RAM에 리스트들과 데이터를 교환한다.20 illustrates a hierarchy of operations performed on control data structures during a memory management operation. Data update management operations operate on the various lists remaining in RAM. Control write operations operate on various control data sectors and dedicated blocks of flash memory and also exchange lists and data in RAM.

데이터 업데이트 관리 동작들은 ABL, CBL 및 스크래치 패드 섹터 리스트/무순서 섹터 리스트상 RAM에서 수행된다. ABL은 소거된 블록이 업데이트 블록 또는 제어 블록으로서 할당되거나, 업데이트 블록이 폐쇄될 때 업데이트된다. CBL은 제어 블록이 소거되거나 폐쇄된 업데이트 블록에 대한 엔트리가 GAT에 기입될 때 업데이트된다. 스크래치 패드 섹터 리스트는 섹터들이 스크래치 패드 블록에 기입될 때 업데이트된다. 업데이트 혼란 섹터 리스트는 섹터가 무순서 업데이트 블록에 기입될 때 업데이트된다. 섹터가 페이지로서 참조되는 기입 데이터의 단위의 예인 것이 이해될 것이다.Data update management operations are performed in RAM on the ABL, CBL, and scratch pad sector lists / random sector lists. The ABL is updated when the erased block is allocated as an update block or control block, or when the update block is closed. The CBL is updated when an entry for the update block in which the control block is erased or closed is written to the GAT. The scratch pad sector list is updated when sectors are written to the scratch pad block. The update chaotic sector list is updated when a sector is written to the random update block. It will be appreciated that the sector is an example of a unit of write data referred to as a page.

제어 기입 동작은 RAM내 제어 데이터 구조들로부터 정보가 만약 필요하다면 플래시 메모리 및 RAM의 다른 지원 제어 데이터 구조들의 결과적인 업데이트를 가진 플래시 메모리의 데이터 구조들을 제어하기 위하여 기입되게 한다. 상기 제어 기입 동작은 ABL이 업데이트 블록들로서 할당될 소거된 블록들에 대한 추가 엔트리들을 포함하지 않거나, SP 블록이 재기입될 때 트리거된다.The control write operation causes information from the control data structures in the RAM to be written to control the data structures of the flash memory with the resultant update of the flash memory and other supporting control data structures of the RAM if necessary. The control write operation is triggered when the ABL does not contain additional entries for the erased blocks to be allocated as update blocks, or when the SP block is rewritten.

바람직한 실시예에서, ABL 충전 동작, CBL 비움 동작 및 EBM 섹터 업데이트 동작은 모든 제어 기입 동작 동안 수행된다. EBM 섹터를 포함하는 MAP 블록이 충전될 때, 유효한 EBM 및 MAP 섹터들은 할당된 소거 블록에 카피되고, 이전 MAP 블록은 소거된다.In a preferred embodiment, the ABL charging operation, CBL emptying operation and EBM sector update operation are performed during all control write operations. When a MAP block containing an EBM sector is charged, valid EBM and MAP sectors are copied to the allocated erase block, and the previous MAP block is erased.

하나의 GAT 섹터는 기입되고, 폐쇄된 업데이트 블록 리스트는 모든 제어 기입 동작 동안 이에 따라 변형된다.One GAT sector is written and the closed update block list is modified accordingly during all control write operations.

GAT 블록 재기입은 GAT 블록이 가득차고 가득찬 블록내 데이터가 할당된 소거 블록에 재할당될 때 발생한다.GAT block rewriting occurs when the GAT block is full and the data in the full block is reallocated to the allocated erase block.

SPBI/CBI 섹터는 특정 무순서 섹터 기입 동작들 후 기입된다.The SPBI / CBI sector is written after certain random sector write operations.

SPB 블록 재기입은 SPBI/CBI 블록이 가득찰 때 발생한다. 유효 SPBI/CBI 섹터들은 할당된 소거 블록에 카피되고, 이전 SPB 블록은 소거된다.SPB block rewriting occurs when the SPBI / CBI block is full. Valid SPBI / CBI sectors are copied into the allocated erase block, and the previous SPB block is erased.

이전에 기술된 바와 같은 MAP 교환 동작은 EBM 섹터의 EBB 리스트에 추가 소거 블록 엔트리들이 없을 때 수행된다.The MAP exchange operation as previously described is performed when there are no additional erase block entries in the EBB list of the EBM sector.

MAP 블록 재기입은 MAP 블록이 가득차고 유효 EBM 및 MAP 섹터들이 할당된 소거 블록에 카피될 때 발생하고, 이전 MAP 블록은 소거된다.MAP block rewriting occurs when the MAP block is full and valid EBM and MAP sectors are copied to the allocated erase block, and the previous MAP block is erased.

부트 섹터는 MAP 블록이 이동되는 각각의 경우 현재 부트 블록에 기입된다.The boot sector is written to the current boot block in each case where the MAP block is moved.

부트 블록 재기입은 부트 블록이 가득찰 때 발생한다. 유효 부트 섹터는 부트 블록의 현재 버전으로부터 현재 버전이 되는 백업 버젼으로 카피된다. 이전 현재 버젼은 소거되고 백업 버전이 되고, 유효 부트 섹터는 다시 기입된다.Boot block rewriting occurs when the boot block is full. The valid boot sector is copied from the current version of the boot block into a backup version that becomes the current version. The previous current version is erased and becomes the backup version, and the valid boot sector is rewritten.

제어 데이터의 예는 도 20과 관련하여 기술된 바와 같은 메모리 블록 관리 시스템과 연관된 블록 할당 정보 및 디렉토리 정보이다. 이전에 기술된 바와 같이, 제어 데이터는 고속 RAM 및 보다 느린 비휘발성 메모리 블록들 모두에 유지된다. 임의의 빈번하게 변화하는 제어 데이터는 비휘발성 메타블록에 저장된 등가의 정보를 업데이트하기 위하여 주기적 제어 기입들로 인해 RAM에 유지된다. 이런 방식으로, 제어 데이터는 빈번한 액세스에 대한 필요성 없이 비휘발성이지만 보다 느린 플래시 메모리에 저장된다. 도 20에 도시된 부트, 섹터, GAT, SBI/CBI 및 MAP 같은 제어 데이터 구조들의 계층은 플래시 메모리에 유지된다. 따라서, 제어 기입 동작은 RAM의 제어 데이터 구조로부터 정보가 플래시 메모리의 등가의 제어 데이터 구조들을 업데이트하게 한다.Examples of control data are block allocation information and directory information associated with a memory block management system as described in connection with FIG. 20. As previously described, control data is maintained in both fast RAM and slower nonvolatile memory blocks. Any frequently changing control data is held in RAM due to periodic control writes to update the equivalent information stored in the nonvolatile metablock. In this way, control data is stored in nonvolatile but slower flash memory without the need for frequent access. The hierarchy of control data structures such as boot, sector, GAT, SBI / CBI and MAP shown in FIG. 20 is maintained in flash memory. Thus, the control write operation causes information from the control data structure of the RAM to update the equivalent control data structures of the flash memory.

도 20과 관련하여 기술된 바와 같이, 블록 관리 시스템은 동작 동안 플래시 메모리에 한 세트의 제어 데이터를 유지한다. 이런 제어 데이터 세트는 호스트 데이터와 유사한 메타블록들에 저장된다. 이와 같이, 제어 데이터 자체는 관리되는 블록이고 업데이트들 및 그러므로 가비지 수집 동작에 영향을 받을 것이다.As described in connection with FIG. 20, the block management system maintains a set of control data in flash memory during operation. This control data set is stored in metablocks similar to host data. As such, the control data itself is a managed block and will be subject to updates and therefore garbage collection operations.

일회 프로그램 가능 메모리("OTP")One time programmable memory ("OTP")

데이터가 다시 업데이트되지 않을 메모리에 위임되는 특정 메모리 애플리케이션들이 있다. 그러므로 일회 프로그램 가능 메모리 또는 OTP 메모리 디바이스들이라 불리는 이들 애플리케이션들에 대한 메모리 디바이스들은 소거 및 재프로그램 설비들을 제공할 필요가 없다. OTP 메모리 디바이스들은 간략화된 블록 관리 시스템을 가질 수 있고, 이에 따라 복잡성 및 오버헤드들을 감소시킨다.There are certain memory applications that are delegated to memory where data will not be updated again. Therefore, memory devices for these applications, called once programmable memory or OTP memory devices, do not need to provide erase and reprogram facilities. OTP memory devices may have a simplified block management system, thereby reducing complexity and overheads.

여기에 기술된 블록 관리 시스템은 OTP 메모리 디바이스의 실행과 호환할 수 있다. 필수적으로 OTP 메모리를 위하여, 각각의 블록은 메모리 저장 단위로서 처리 된다. 기술된 소거 가능 블록 시스템과의 차이는 블록들이 소거되지 않는 것이다. 그러나, 하나의 블록으로부터 다른 블록으로 선제 재할당 기술은 똑같이 OTP 메모리에 응용할 수 있다. The block management system described herein is compatible with the implementation of OTP memory devices. Essentially for OTP memory, each block is treated as a memory storage unit. The difference from the erasable block system described is that the blocks are not erased. However, pre-allocation techniques from one block to another can equally apply to OTP memory.

OTP 메모리 시스템들은 발명의 명칭이 "Method and Apparatus for Using a One-Time or Few-Time Programmale Memory with a Host Device designated for Erasable/Rewriteable Memory"인 2006년 3월 2일 공개된 미국출원 공보 US-2006-0047920-A1에 기술되었다.OTP memory systems are described in US application publication US-2006, published on March 2, 2006, entitled "Method and Apparatus for Using a One-Time or Few-Time Programmable Memory with a Host Device designated for Erasable / Rewriteable Memory". -0047920-A1.

선제 데이터 재할당Preassignment of Preemptive Data

하위 계층의 것들이 상위 계층보다 보다 자주 업데이트되는 제어 데이터의 계층이 존재하는 것이 이전에 기술되었다. 예를 들어, 모든 제어 블록이 일반적으로 발생하는 제어 업데이트들 및 제어 블록 재할당들의 다음 시퀀스를 기입하기 위하여 N 제어 섹터들을 가지는 것을 가정한다. 도 20을 다시 참조하여, 모든 N SPBI/CBI 업데이트들은 SP 블록을 충전하고 SPB 재할당(재기입) 및 MAP 업데이트를 트리거한다. 만약 무순서 블록이 폐쇄되면, GAT 업데이트를 트리거할 수 있다. 모든 GAT는 MAP 업데이트를 트리거한다. 모든 N GAT 업데이트들은 블록을 충전하고 GAT 블록 재할당을 트리거한다. 게다가, MAP 블록이 충전될 때, MAP 블록 재할당, 부트 블록 업데이트를 트리거한다. 게다가, 부트 블록이 충전될 때, 다른 부트 블록에 대한 액티브 부트 블록 재할당을 트리거한다.It has been previously described that there is a layer of control data in which the lower layers are updated more frequently than the upper layers. For example, assume that every control block has N control sectors to write the next sequence of control updates and control block reassignments that generally occur. Referring again to FIG. 20, all N SPBI / CBI updates charge the SP block and trigger SPB reallocation (rewrite) and MAP update. If the random block is closed, it can trigger a GAT update. Every GAT triggers a MAP update. All N GAT updates charge a block and trigger GAT block reallocation. In addition, when the MAP block is charged, it triggers MAP block reallocation, boot block update. In addition, when the boot block is charged, it triggers an active boot block reallocation to another boot block.

계층이 MAP 및 그 다음 GAT 다음 상부 부트 제어 데이터에 의해 형성되기 때문에, GAT 업데이트 후 몇몇 예들에서 "캐스케이드 제어 업데이트"가 있을 것이고, 여기서 모든 GAT, MAP 및 부트 블록들은 재할당된다. GAT 업데이트가 호스트 기입의 결과로서 무순서 또는 순차적 업데이트 블록 폐쇄에 의해 발생되는 경우, 가비지 수집 동작(즉, 재할당 또는 재기입)이 있을 것이다. 무순서 업데이트 블록 가비지 수집의 경우, SPBI/CBI 인덱스는 업데이트되고, 그것은 SP 블록 재할당을 트리거할 수 있다. 따라서, 이런 극한 상황에서, 다수의 메타블록들은 동시에 수집된 가비지일 필요가 있다.Since the layer is formed by MAP and then GAT next upper boot control data, there will be a "cascade control update" in some examples after the GAT update, where all GAT, MAP and boot blocks are reallocated. If the GAT update is caused by random or sequential update block closure as a result of the host write, there will be garbage collection operations (ie, reassign or rewrite). In the case of random update block garbage collection, the SPBI / CBI index is updated, which can trigger SP block reallocation. Thus, in this extreme situation, multiple metablocks need to be garbage collected at the same time.

계층의 각각의 제어 데이터 블록이 충전되고 재할당되는 측면에서 주기성을 가지는 것을 알 수 있다. 만약 각각이 정상적으로 진행하면, 다수의 블록들의 상들이 정렬하고 동시에 모든 블록들을 포함하는 대량 재할당 또는 가비지 수집을 트리거할 때 시간들이 걸릴 것이다. 많은 제어 블록들의 재할당은 오랜 시간이 걸리고 몇몇 호스트들이 상기 대량 제어 동작들에 의해 발생되는 오랜 지연들을 허용하지 않기 때문에 방지되어야 한다.It can be seen that each control data block of the layer has periodicity in terms of being charged and reallocated. If each proceeds normally, it will take time when the phases of the multiple blocks align and trigger massive reallocation or garbage collection that includes all blocks at the same time. Reassignment of many control blocks takes a long time and should be avoided because some hosts do not tolerate the long delays caused by the bulk control operations.

예를 들어, 이런 바람직하지 않은 상황은 블록 관리 시스템의 동작을 제어하기 위하여 사용된 제어 데이터를 업데이트할 때 발생할 수 있다. 제어 데이터 타입의 계층은 업데이트 빈도들이 가변하여, 연관된 업데이트 블록들이 다른 레이트들에서 가비지 수집 또는 재할당을 요구하게 한다. 하나 이상의 제어 데이터 타입들의 가비지 수집 동작들이 동시에 발생하는 특정한 시간들이 있을 것이다. 극한 상황에서, 모든 제어 데이터 타입들에 대한 블록들의 재할당 상들은 정렬할 수 있어서, 모든 블록들이 동시에 재할당 또는 재기입을 요구할 수 있다.For example, this undesirable situation can occur when updating control data used to control the operation of the block management system. The hierarchy of control data types varies in update frequencies, causing associated update blocks to require garbage collection or reallocation at different rates. There will be certain times when garbage collection operations of one or more control data types occur simultaneously. In extreme situations, the reallocation phases of blocks for all control data types may be sorted, such that all blocks may require reallocation or rewriting at the same time.

데이터의 캐스케이드 재할당을 방지하기 위한 하나의 해결책은 Gorobeats 등 에 의한 발명의 명칭이 "Non-Volatile Memory and Method with Control Data Management"인 2005년 6월 30일 공개된 미국출원 공보 US-2005-0144365-A1에 기술되었다. 블록 관리 시스템을 가진 비휘발성 메모리에서, 메모리 블록 또는 제어된 재기입의 선제 재할당은 다수의 제어 업데이트 블록들이 모두 동시에 재할당할 필요성이 있는 상황을 방지하기 위하여 실행된다. 이런 바람직하지 않은 상황은 현재 호스트 동작이 하우스키핑 동작을 수용할 수 있을 때마다 방지되고, 제어 블록의 선제 재할당은 블록이 미리 전체적으로 충전을 발생시킨다. 특히, 우선권은 가장 빠른 충전 속도를 가진 데이터 타입을 가진 블록에 제공된다. 상기 방법은 당해의 다양한 블록들의 상들의 정렬을 방지하기 위하여 전체 혼합에 몇몇 종류의 혼란을 도입하는 것으로 고려될 수 있다. 따라서, 기회가 발생할 때마다, 전체적으로 충전되는 것으로부터 약간의 마진을 가진 빠른 충전 블록은 선제적으로 재할당된다.One solution to preventing cascade reallocation of data is US application publication US-2005-0144365, issued June 30, 2005, entitled "Non-Volatile Memory and Method with Control Data Management" by Gorobeats et al. Described in -A1. In non-volatile memory with a block management system, pre-allocation of memory blocks or controlled rewrites is performed to avoid situations where multiple control update blocks all need to be reallocated at the same time. This undesirable situation is avoided whenever the current host operation can accommodate a housekeeping operation, and pre-allocation of the control block causes the block to fully charge in advance. In particular, priority is given to the block with the data type with the fastest charging speed. The method can be considered to introduce some kind of confusion in the overall mixing to prevent the alignment of the phases of the various blocks in the art. Thus, whenever an opportunity arises, a fast charging block with some margin from being fully charged is preemptively reallocated.

시간 비용 분석을 사용한 스케쥴링 내부 하우스키핑 동작들Scheduling Internal Housekeeping Operations Using Time Cost Analysis

이전에 기술된 바와 같이, 재기입 동작들은 제어 데이터를 포함하는 블록이 가득찬 경우 필요할 것이다. 일련의 업데이트들을 겪은 후, 충전된 블록은 통상적으로 유효 데이터 및 폐기 데이터를 포함한다. 유효 데이터는 빈 공간을 가진 다른 블록에 카피된다. 이런 재할당 동작은 전체 블록이 소거되고 유효 데이터가 이용되고 다른 블록에 카피된 후 소거 및 재사이클되는 가비지 수집 동작이다. 재할당을 위한 다른 이유는 결함이 블록에서 발생할 때이고, 블록이 이용될 수 없게 한다. 이것은 특히 내장 에러 수정 코드에 의한 과도한 에러 수정을 요구하거나 간단히 수정될 수 없는 결함들에 대해 진실이다. 재할당을 위한 다른 이유는 블록이 미리 과도한 소거/프로그램 사이클링을 소모시키지 않도록 메모리의 모든 블록들의 균일한 사용을 보장할 필요성이다.As previously described, rewrite operations will be needed if the block containing control data is full. After undergoing a series of updates, the charged block typically contains valid data and discarded data. Valid data is copied to another block with free space. This reallocation operation is a garbage collection operation in which the entire block is erased and valid data is used and copied to another block and then erased and recycled. Another reason for reallocation is when a fault occurs in a block, making the block unavailable. This is especially true for defects that require excessive error correction by the built-in error correction code or simply cannot be fixed. Another reason for reallocation is the need to ensure uniform use of all blocks of memory so that the blocks do not consume excessive erase / program cycling in advance.

상기된 재할당 동작들은 시스템 하우스키핑 동작의 모든 예들이다. 하나의 블록으로부터 다른 블록으로 데이터의 재할당은 통상적으로 상당량의 데이터를 판독 및 기입하는 것을 포함할 때 통상적으로 비교적 시간 소비적이다. 하우스키핑 동작들은 호스트가 메모리와 액티브하게 속박되지 않을 때 백그라운드에서 수행될 수 있다. 그러나 진행 중, 호스트는 메모리에 명령을 전송하지 못하게 하고 메모리의 전력을 차단하여 진행중 하우스키핑 동작을 중단시킨다. 바람직한 방식은 호스트 명령을 실행하는 메모리와 동시에 포그라운드에서 하우스키핑 동작들을 수행하는 것이다.The reassignment operations described above are all examples of system housekeeping operations. Reallocation of data from one block to another is typically relatively time consuming when it involves reading and writing a significant amount of data. Housekeeping operations may be performed in the background when the host is not actively bound to memory. In progress, however, the host does not send commands to the memory and interrupts the ongoing housekeeping operation by cutting off power to the memory. The preferred approach is to perform housekeeping operations in the foreground concurrently with the memory executing the host command.

Bennett등에 의한 발명의 명칭이 "Scheduling of Housekeeping Operations in Flash Memory Systems"인 2006년 7월 20일에 공개된 미국출원 공보 US-2006-0161728-A1은 특정 호스트 명령을 실행하기 위하여 설정된 시간 비용내에서 하나 이상의 상기 하우스키핑 동작들과 함께 수행되는 호스트 명령의 실행을 개시한다. 특히, 하나의 상기 호스트 명령은 메모리에 수신된 데이터를 기입하는 것이다. 하나의 상기 하우스키핑 동작은 반복 소거 및 재프로그래밍을 통하여 수용하는 개별 블록들의 내구력을 레벨링하는 것이다. US application publication US-2006-0161728-A1, published on July 20, 2006, entitled "Scheduling of Housekeeping Operations in Flash Memory Systems," within a set time cost for executing a particular host command. Initiates execution of a host command performed in conjunction with one or more of the housekeeping operations. In particular, one such host command is to write received data to a memory. One such housekeeping operation is to level the endurance of individual blocks to accommodate through iterative erase and reprogramming.

최악의 경우 제어 데이터 관리Worst case control data management

본 발명에 따라, 개선된 방법은 제어 데이터의 가능한 한 긴 캐스케이드 업데이트들을 방지하기 위하여 제공된다. 이것은 각각의 타입의 제어 데이터에 대한 블록 마진을 설정하고 블록 마진에 도달할 때 가장 빠른 기회에서 블록을 재기입하여 달성된다. 특히, 마진은 재기입이 발생하기 전에 블록을 전체적으로 충전하지 않도록 재기입이 발생하기 전에 미리 결정된 기간 내에서 누적되는 데이터를 수용하기에 충분하게 설정된다. 미리 결정된 기간은 여러 가지 중에서 재기입이 발생하기 전 최악의 경우 기간을 형성하는 호스트 기입 패턴을 고려함으로써 결정된다. 마진을 설정하기 위한 다른 고려 사항들은 각각의 제어 블록 재기입을 위해 요구된 시간 및 호스트 데이터를 저장하기 위한 업데이트 블록들의 구성을 바탕으로 제어 블록 재기입들에 이용할 수 있는 시간을 포함하고, 상기 시간은 포그라운드 호스트 동작 및 호스트 기입 레이턴시에 요구된다.According to the invention, an improved method is provided for preventing as long as possible cascade updates of control data. This is accomplished by setting a block margin for each type of control data and rewriting the block at the earliest opportunity when the block margin is reached. In particular, the margin is set sufficiently to accommodate data that accumulates within a predetermined period before rewriting occurs so that the block is not fully filled before rewriting occurs. The predetermined period of time is determined by considering a host write pattern that forms, among other things, the worst case period before rewriting occurs. Other considerations for setting the margin include the time available for each control block rewrite and the time available for control block rewrites based on the configuration of the update blocks for storing host data, the time being Required for foreground host operation and host write latency.

상기 개선은 캐스케이드 제어 업데이트 당 다중 프로그램 에러들을 허용하여, 타이밍 제한 내에서 바로 다음 발생하는 하나 이상의 ECC 또는 프로그램 에러를 취급할 수 있다. 이런 특징은 만약 결함들이 하위 레벨에서 패치되지 않으면 위험이 매우 커지기 때문에 일회 프로그램 가능("OTP") 메모리에서 특히 중요하다. 상기 개선은 제어 데이터를 저장하기 위한 업데이트 블록들의 풀에 최소의 블록들이 비축되게 한다. 비축된 블록들은 모든 제어 데이터 블록들이 잠재적으로 동시에 충전되는 경우 최악의 캐스케이드 업데이트를 메모리 제어 시스템이 취급하게 하고, 동일한 비지(busy) 기간내에서 모두 재기입되어야 한다. 만약 보다 적은 블록들이 제어 데이터를 위해 비축되면, 보다 많은 블록들은 호스트 데이터 업데이트들에 이용될 것이다.The improvement allows for multiple program errors per cascade control update to handle one or more ECC or program errors that occur immediately within the timing constraints. This feature is especially important in one-time programmable ("OTP") memory because the risk is very high if the defects are not patched at a lower level. The improvement allows the minimum blocks to be stored in the pool of update blocks for storing control data. The reserved blocks allow the memory control system to handle the worst cascade update if all control data blocks are potentially charged at the same time and must all be rewritten within the same busy period. If fewer blocks are reserved for control data, more blocks will be used for host data updates.

본 발명의 장점들은 다음을 포함한다. 증가된 에러들의 수는 최악의 경우 업 데이트 시퀀스에서 취급될 수 있다. 가비지 수집들(GC) 및 제어 블록 컴팩트화의 최악의 경우의 가장 긴 결합은 방지될 수 있다. 예를 들어, 무순서 GC는 최악의 경우 명령 레이턴시가 감소될 수 있는 무순서 GC와 동시에 제어 업데이트들을 피함으로써 순차적 GC보다 길게 걸릴 수 있다. 최적화된 성능은 블록 마진들의 최적 선택(예를 들어, 컴팩트화하기 위하여 보다 많이 충전된 제어 블록을 선택함으로써) 및 수행하기 위한 내부 동작을 스케쥴링함으로써 얻어진다. 비축된 소거 블록들의 수 감소는 최악의 경우 업데이트 시퀀스를 취급하기 위하여 요구된다. 에러들은 에러 취급이 재스케쥴될 수 있을 때 선제 내부 동작들의 경우들에서 보다 빠르게 취급될 수 있다. 부분 에러 취급 및 에러 취급의 스케쥴 완료는 가능하다. 짧은 레이턴시를 가지며 이후 수행되는(예를 들어, 다음 기입 동작 동안) 판독 동작 동안 취급하는 ECC 에러를 스케쥴하는 것은 가능하다. Advantages of the present invention include the following. The increased number of errors can be handled in the update sequence in the worst case. The worst case longest combination of garbage collections (GC) and control block compaction can be avoided. For example, an unordered GC may take longer than a sequential GC by avoiding control updates at the same time as the unordered GC, in which worst case command latency may be reduced. Optimized performance is obtained by scheduling the optimal operation of the block margins (e.g., by selecting more charged control blocks to compact) and internal operations to perform. Reducing the number of reserved erase blocks is required in the worst case to handle the update sequence. Errors can be handled faster in cases of preemptive internal operations when error handling can be rescheduled. Partial error handling and schedule completion of error handling are possible. It is possible to schedule an ECC error that has a short latency and handles during a read operation that is subsequently performed (eg, during the next write operation).

호스트 명령 동작 기간의 평가Evaluation of Host Command Operation Period

기입 호스트 데이터 같은 통상적인 호스트 명령에서, 호스트는 명령을 완성하기 위하여 메모리에 대한 최악의 상황을 수용하도록 설계된 타임아웃 또는 기입 레이턴시를 지정한다. 명령을 실행하기 위한 메모리에 대한 실제 기간은 데이터가 기입된 메모리 블록의 상태에 좌우된다. 특히 기입이 블록들 사이의 부가적인 시간 소비적인 데이터 재할당을 포함하는지에 따른다. 이들 데이터 재할당은 할당되는 새로운 블록에 응답하여 블록의 폐쇄에 의해 유발된다. 블록의 폐쇄는 통상적으로 소거 및 재사이클되기 전에 가비지 수집을 요구한다.In a typical host command, such as write host data, the host specifies a timeout or write latency designed to accommodate the worst case for memory to complete the command. The actual period for the memory for executing the command depends on the state of the memory block in which data is written. In particular, it depends on whether the write involves additional time consuming data reallocation between blocks. These data reallocations are caused by the closure of blocks in response to new blocks being allocated. Closure of a block typically requires garbage collection before it is erased and recycled.

업데이트 블록들 풀의 구성Organization of Update Blocks Pool

블록은 충전된 후 또는 데이터가 몇몇 이유 때문에 더 이상 기입되지 않을 때 통상적으로 폐쇄된다. 블록이 폐쇄되는 타이밍에 영향을 미치는 다른 요소는 동시에 업데이트들을 위하여 개방된 업데이트 블록들의 풀이 구성되는 방법이다. 풀내에 블록들의 수 제한이 있기 때문에, 기존 블록은 만약 새로운 블록이 가득차게 거주된 풀에 도입되면 폐쇄되어야 한다.The block is typically closed after it is charged or when data is no longer written for some reason. Another factor influencing the timing at which a block is closed is how the pool of update blocks that are open for updates at the same time is configured. Since there is a limit on the number of blocks in the pool, existing blocks must be closed if new blocks are introduced into the pool in which they reside.

동시에 개방된 블록들의 최대 수까지 지원하는 실제 시스템 제한은 이전에 기술되었다. 예를 들어, 도 10과 관련하여 기술된 일 실시예에서, 단계(410)는 만약 새로운 할당이 업데이트 데이터를 허용하기 위하여 동시에 개방될 수 있는 업데이트 블록들의 최대 수(UMAX)를 초과하면 검사한다. 만약 UMAX가 초과되면, 업데이트 블록들 사이의 최소한의 액티브는 규정된 제한내에서 시스템을 유지하기 위하여 단계(420)에서 폐쇄될 것이다.The actual system limitations that support up to the maximum number of simultaneously open blocks have been described previously. For example, in one embodiment described in connection with FIG. 10, step 410 checks if the new allocation exceeds the maximum number of update blocks U MAX that can be open simultaneously to allow update data. . If U MAX is exceeded, the minimum active between update blocks will be closed at step 420 to keep the system within the defined limit.

폐쇄하기 위한 가득찬 풀내 업데이트 블록들이 가지는 다른 선택은 Jason Lin에 의한 발명의 명칭이 "Method For Class-Based Update Block Replacement Rules In Non-Volatile Memory"인 2006년 9월 15일 출원된 미국특허 출원 11/532,456에 개시되었다.Another option with full in-pool update blocks for closing is US patent application 11 filed Sep. 15, 2006, entitled "Method For Class-Based Update Block Replacement Rules In Non-Volatile Memory" by Jason Lin. / 532,456.

도 21은 블록 관리 시스템에 대한 업데이트 블록들의 수에 대한 두 개의 규정된 제한들을 개략적으로 도시한다. 시스템에 의해 유지된 업데이트 블록들의 풀에 전체적인 제한이 있다. 업데이트 블록들의 총 수는 무순서 업데이트 블록들의 수(NC) 및 순차적인 업데이트 블록들의 수(NS)의 합에 의해 제공되는 최대값(UMAX)를 초과할 수 없다. 따라서, 업데이트 풀은 순차적 및 무순서 업데이트 블록들의 혼합을 포함할 수 있다. 무순서 업데이트 블록이 보다 많은 리소스 강도를 가지기 때문에, 무순서 블록 인덱스(CBI)의 부가적인 유지를 요구하고, 바람직하게 무순서 업데이트 블록들("UCMAX")의 최대 수에 대한 제한이 있다. 다라서, 제 1 제한은 업데이트 블록들의 총 수, NC+NS<=UMAX인 것을 요구한다. 제 2 제한은 무순서 업데이트 블록들의 수 NC<=UCMAX인 것을 요구한다. 그러므로 순차적 업데이트 블록들의 수 NS=UMAX를 가지지만, 일반적으로 무순서 업데이트 블록의 수 UCMAX는 UMAX 미만이다.21 schematically shows two defined limits on the number of update blocks for a block management system. There is an overall limitation on the pool of update blocks maintained by the system. The total number of update blocks cannot exceed the maximum value U MAX provided by the sum of the number of random update blocks N C and the number of sequential update blocks N S. Thus, the update pool can include a mixture of sequential and random update blocks. Since the random update block has more resource strength, it requires additional maintenance of the random block index (CBI), and preferably there is a limit on the maximum number of random update blocks (“U CMAX ”). Thus, the first restriction requires that the total number of update blocks, N C + N S <= U MAX . The second restriction requires that the number of random update blocks N C <= U CMAX . Therefore, although the number of sequential update blocks N S = U MAX , in general, the number of random update blocks U CMAX is less than U MAX .

도 22는 다양한 메모리 디바이스들에 대해 최적화된 두 개의 제한들의 결합들의 통상적인 예들을 도시한다. 주어진 결합은 UMAX "대시" UCMAX에 의해 표시된다. 예를 들어, "3-1"은 업데이트 풀에 최대 3개의 업데이트 블록들까지 허용하고 단지 하나만이 무순서 업데이트 블록인 블록 관리 시스템을 나타낸다. 유사하게 "7-3"은 최대 7개의 업데이트 블록들까지 지원하고 그중 3개가 무순서 업데이트 블록들인 블록 관리 시스템을 나타낸다. 일반적으로 보다 작은 메모리 용량을 가진 보다 작은 메모리 시스템들은 보다 제한적이고, 보다 작은 최대 수들을 가질 것이다.22 shows typical examples of combinations of two constraints optimized for various memory devices. The given combination is represented by U MAX "dash" U CMAX . For example, "3-1" indicates a block management system that allows up to three update blocks in the update pool and only one is an orderly update block. Similarly, "7-3" represents a block management system that supports up to seven update blocks, three of which are random update blocks. Generally smaller memory systems with smaller memory capacities are more limited and will have smaller maximum numbers.

도 23a, 도 23b 및 도 23c는 업데이트 블록들의 풀에 새로운 업데이트 블록을 도입하고, 이에 따라 기존 순차적 블록의 폐쇄를 유도하는 이벤트의 시퀀스를 개략적으로 도시한다.23A, 23B, and 23C schematically illustrate a sequence of events that introduces a new update block into a pool of update blocks, thereby inducing closure of an existing sequential block.

도 23a는 도 22에 기술된 바와 같은 "5-2" 구성들을 가진 업데이트 풀을 개 략적으로 도시한다. 이 실시예에서, 업데이트 풀은 최대 5개의 허용 가능한 업데이트 블록들이 완전히 거주된다. 업데이트 풀은 최대 두 개의 혼란하거나 비순차적 업데이트 블록들(C4 및 C5)을 포함하는 무순서 풀(1300) 및 3개의 순차적 업데이트 블록들(S1,S2 및 S3)을 포함하는 순차적 풀(1200)로 추가로 분할된다. 예는 S3(1201) 같은 순차적 업데이트 블록일 적어도 액티브 블록을 도시한다.FIG. 23A schematically illustrates an update pool with “5-2” configurations as described in FIG. 22. In this embodiment, the update pool is fully populated with up to five allowable update blocks. The update pool is a sequential pool 1200 comprising up to two chaotic or non-sequential update blocks C4 and C5 and an ordered pool 1300 and three sequential update blocks S1, S2 and S3. It is further divided. The example shows at least an active block that is a sequential update block such as S3 1201.

새로운 업데이트 블록이 할당될 필요가 있는 경우, 업데이트 풀의 기존 업데이트 블록들 중 하나는 룸을 형성하기 위하여 폐쇄될 필요가 있다. 예를 들어 호스트가 풀의 기존 업데이트 블록들에 의해 서비스되지 않은 섹터들의 논리 그룹에 대한 순차적 데이터를 기입하는 경우, 새로운 업데이트 블록은 데이터를 기록하기 위하여 할당될 필요가 있을 것이다.If a new update block needs to be allocated, one of the existing update blocks of the update pool needs to be closed to form a room. For example, if the host writes sequential data for a logical group of sectors not serviced by existing update blocks in the pool, a new update block will need to be allocated to write the data.

도 23b는 새로운 업데이트 블록에 대한 룸을 형성하기 위하여 최소 액티브 업데이트 블록의 폐쇄를 개략적으로 도시한다. 최소 액티브 업데이트 블록은 이 경우 S3(1201)이고 상부 블록들의 풀로부터 폐쇄 및 제거될 것이다. 이전에 기술된 바와 같이, 순차적 블록의 폐쇄는 일반적으로 다른 블록들로부터 카피된 데이터를 가진 임의의 남은 빈 공간을 패딩하는 것과 같이 적어도 상대적 작은 재할당을 포함한다. 23B schematically illustrates the closure of the minimum active update block to form a room for a new update block. The minimum active update block is in this case S3 1201 and will be closed and removed from the pool of upper blocks. As previously described, closing of a sequential block generally involves at least a relatively small reallocation, such as padding any remaining free space with data copied from other blocks.

도 23c는 룸을 형성하기 위하여 폐쇄된 업데이트 블록이 제거된 후 풀에 새롭게 할당된 업데이트 블록을 도입하는 것을 개략적으로 도시한다. 이 경우, 새롭게 할당된 업데이트 블록인 S6(1212)은 논리적으로 순차적 순서로 데이터를 기록하기 위하여 순차적 풀(1200)에 도입될 것이다. 이런 방식으로, 허용된 업데이트 블 록들의 최대 수 UMAX는 초과되지 않는다.FIG. 23C schematically illustrates introducing a newly allocated update block to a pool after a closed update block is removed to form a room. In this case, S6 1212, which is a newly allocated update block, will be introduced to the sequential pool 1200 to write data in logically sequential order. In this way, the maximum number of allowed update blocks U MAX is not exceeded.

도 24a, 도 24b 및 도 24c는 업데이트 블록들의 풀에 새로운 업데이트 블록을 도입하여, 결과적으로 기존 무순서 블록의 폐쇄를 유도하기 위한 이벤트의 시퀀스를 개략적으로 도시한다.24A, 24B and 24C schematically show a sequence of events for introducing a new update block into a pool of update blocks, resulting in the closure of an existing random block.

도 24a는 도 22에 기술된 바와 같은 "5-2" 구성을 가진 업데이트 풀을 개략적으로 도시한다. 이 실시예에서, 업데이트 풀은 최대 5개의 허용 가능한 업데이트 블록들이 완전히 거주된다. 업데이트 풀은 3개의 순차적 업데이트 블록들(S1,S2 및 S3)을 포함하는 순차적 풀(1200) 및 최대 두 개의 무순서 또는 비순차적 업데이트 블록들(C4 및 C5)을 포함하는 무순서 풀(1300)로 추가로 분할된다. 상기 예는 C4(1301) 같은 무순서 업데이트 블록이도록 무순서 블록이 폐쇄되는 것을 도시한다.FIG. 24A schematically illustrates an update pool with a “5-2” configuration as described in FIG. 22. In this embodiment, the update pool is fully populated with up to five allowable update blocks. The update pool is a sequential pool 1200 comprising three sequential update blocks S1, S2 and S3 and an unordered pool 1300 including up to two unordered or nonsequential update blocks C4 and C5. Is further divided into. The above example shows that the random blocks are closed such that they are random update blocks such as C4 1301.

도 24b는 새로운 무순서 업데이트 블록에 대한 룸을 형성하기 위하여 무순서 업데이트 블록의 폐쇄를 개략적으로 도시한다. 예를 들어, 만약 순차적 업데이트 블록(S1)이 데이터를 비순차적으로 기록하기 시작하고 무순서 업데이트 블록(C1 1312)으로 변화하면, 기존 무순서 블록(예를 들어, C4 1301)은 폐쇄되고 무순서 풀(1300)로부터 제거될 것이다. 다른 예는 무순서 업데이트 블록이 C4(1301)일때 가득차게 될 수 있다. 상기 무순서 업데이트 블록은 폐쇄되고 데이터가 새로운 무순서 블록으로 컴팩트화된 후 풀로부터 제거된다. 이전에 기술된 바와 같이, 무순서 블록의 폐쇄는 무순서 블록이 통합된 데이터를 수행하는 새로운 블록에 의해 대 체되는 통합을 포함할 수 있다. 24B schematically illustrates the closure of the random update block to form a room for a new random update block. For example, if the sequential update block S1 begins to write data out of order and changes to the out of order update block C1 1312, the existing random block (eg, C4 1301) is closed and unordered. It will be removed from the pool 1300. Another example may be full when the random update block is C4 1301. The random update block is closed and data is removed from the pool after compacting into a new random block. As previously described, the closing of the random blocks may include consolidation replaced by new blocks that perform data in which the random blocks are consolidated.

도 24c는 폐쇄된 무순서 업데이트 블록이 룸을 형성하기 위하여 제거된 후 풀에 새롭게 할당된 무순서 업데이트 블록을 개략적으로 도입하는 것을 도시한다. 이 경우, 새롭게 할당된 무순서 업데이트 블록인 C1(1312)은 폐쇄된 무순서 블록(C4 1301)을 대체하고 통합된 데이터를 보유한다(도 24b 참조). 무순서 풀(1300)에 새롭게 도입된 C1(1312)은 논리적으로 비순차적 순서로 데이터를 기록할 것이다. 이런 방식으로, 허용된 최대 수의 무순서 업데이트 블록들 UCMAX는 초과되지 않는다.24C illustrates schematically introducing a randomly allocated random update block to the pool after the closed random update block is removed to form a room. In this case, the newly allocated random update block C1 1312 replaces the closed random block C4 1301 and retains the consolidated data (see FIG. 24B). C1 1312, newly introduced to the random pool 1300, will record data in a logically out of order order. In this way, the maximum number of random update blocks U CMAX allowed is not exceeded.

호스트 명령 실행 타이밍Host command execution timing

도 25a 내지 도 25d는 메모리상 호스트 기입 명령의 예시적인 타이밍들을 도시한다. 통상적으로, 호스트는 실행을 위해 메모리에 대한 기입 명령을 내린다. 호스트는 명령이 완료된 것으로 예상되는 지정된 타임아웃 또는 기입 레이턴시를 가진다. 메모리가 호스트 명령을 실행할 때, 호스트에 비지(BUSY) 신호를 주장함으로써 이런 사실을 통신한다. 만약 비지 신호가 기입 레이턴시 기간을 넘어 진행하면, 호스트는 기입 명령을 타임아웃하고 중단할 것이다. 만약 메모리가 레이턴시 기간내 기입 명령을 완료하면, 실행되고 다음 명령을 수신하기 위하여 준비된 호스트에 준비(READY)를 신호하기 위하여 비지 신호를 주장 해제할 것이다.25A-25D show exemplary timings of a host write command in memory. Typically, the host issues a write command to the memory for execution. The host has a specified timeout or write latency at which the command is expected to complete. When the memory executes a host command, it communicates this by asserting a BUSY signal to the host. If the busy signal proceeds beyond the write latency period, the host will time out and abort the write command. If the memory completes a write command within the latency period, it will assert the busy signal to signal READY to a host that is executed and ready to receive the next command.

도 25a 내지 도 25d는 실행기간이 기입 데이터의 성질 및 리소스 제한 풀의 업데이트 블록들의 상태로 인해 다를 수 있는 다양한 시나리오들을 도시한다.25A-25D illustrate various scenarios in which the execution time may vary due to the nature of the write data and the state of the update blocks of the resource limit pool.

도 25는 간단한 순차적 업데이트를 포함하는 호스트 기입을 실행하는 메모리에 대한 타이밍도를 개략적으로 도시한다. 호스트 기입(1)은 몇몇 호스트 데이터가 블록(1) 같은 블록에 기입되는 간단한 업데이트이다. 도 23a의 실시예들을 사용하여, 데이터는 순차적 업데이트 풀(1200)에서 순차적 블록, 즉 S1에 부가된다. 도 25a로부터 다른 데이터 재할당들이 포함되지 않는 이런 간단한 경우에서, 기입 동작이 기입 명령을 위한 레이턴시 기간(TW) 내에서 잘 완료되는 것을 알 수 있을 것이다. 유사하게, 무순서 풀(1300)내 무순서 블록에 간단한 기입은 만약 다른 데이터 재할당들이 포함되지 않으면 비교적 빠를 것이다.25 schematically illustrates a timing diagram for a memory that performs host write including a simple sequential update. Host write 1 is a simple update in which some host data is written to a block, such as block 1. Using the embodiments of FIG. 23A, data is added to sequential blocks, ie, S1 in sequential update pool 1200. It can be seen from this simple case that other data reallocations are not included from FIG. 25A, the write operation completes well within the latency period T W for the write command. Similarly, a simple write to an random block in random pool 1300 will be relatively fast if no other data reallocations are included.

도 25b는 순차적 업데이트 플러스 다른 순차적 블록의 폐쇄를 포함하는 호스트 기입을 실행하는 메모리에 대한 타이밍도를 개략적으로 도시한다. 호스트 기입(2)시, 데이터를 기입하는 것은 데이터를 기록하기 위한 새로운 순차적 블록의 할당을 요구하기 위하여 발생한다. 예를 들어, 데이터는 업데이트 풀의 임의의 업데이트 블록들에 의해 현재 커버되지 않은 논리 그룹에 속한다. 도 23b의 예들을 사용하여, 업데이트 풀이 7개의 업데이트 블록들의 최대 수에 있기 때문에, 기존 업데이트 블록들 중 하나는 새롭게 할당된 것에 대한 룸을 형성하기 위하여 첫째로 폐쇄되어야 한다. 이 경우, 순차적 블록(S3)은 폐쇄된다. 이것은 통상적으로 다른 블록으로부터 전달된 기존 데이터로 패딩될 나머지 빈 공간이다. 도 23c의 예를 참조하여, 새로운 순차적 블록(S6)은 할당되고 그 다음 호스트는 상기 블록에 데이터를 기입할 것이다. 도 25b로부터 이런 순차적 폐쇄의 경우 기입 동작이 순차적 블 록을 폐쇄하는 추가 동작으로 인해 완료하는데 보다 긴 비트를 가지지만, 총 동작은 기입 명령에 대한 레이턴시 기간(TW)내에 있다.25B schematically illustrates a timing diagram for a memory that executes host write including sequential update plus closure of another sequential block. In host write 2, writing data occurs to require allocation of a new sequential block to write data. For example, data belongs to a logical group that is not currently covered by any update blocks in the update pool. Using the examples of FIG. 23B, because the update pool is at the maximum number of seven update blocks, one of the existing update blocks must first be closed to form a room for newly allocated. In this case, the sequential block S3 is closed. This is typically the remaining free space to be padded with existing data passed from another block. Referring to the example of FIG. 23C, a new sequential block S6 is allocated and the next host will write data to the block. From FIG. 25B the write operation has a longer bit to complete due to the additional operation of closing the sequential block, but the total operation is within the latency period T W for the write command.

도 25c는 무순서 업데이트 플러스 폐쇄 및 다른 무순서 업데이트 블록의 재할당을 포함하는 호스트 기입을 실행하는 메모리에 대한 타이밍도를 개략적으로 도시한다. 호스트 기입(3)시, 데이터를 기입하는 것은 순차적인 블록에 비순차적으로 기입된다. 이것은 무순서 블록에 순차적 블록을 전환하는 효과를 가지며 업데이트 풀에 새로운 무순서 블록의 할당을 효과적으로 요구한다. 도 24b의 예들을 사용하여, 무순서 업데이트 풀(1300)이 2개의 업데이트 블록들의 최대 수에 있기 때문에, 기존 무순서 업데이트 블록들 중 하나(예를 들어, C4 1301)는 데이터가 새롭게 할당된 블록(예를 들어, C6 1312)에 할당된 후 폐쇄된다. 도 24c의 예를 참조하여, 새로운 무순서 블록(C6)은 할당되고 무순서 업데이트 풀의 C4를 대체한다. 호스트는 그 다음 상기 블록에 데이터를 기입한다. 도 25c로부터 이런 무순서 폐쇄의 경우 기입 동작이 무순서 블록을 폐쇄하는 추가 동작으로 인해 완료되는데 보다 오래 걸리는 것을 알 수 있다. 일반적으로, 무순서 블록의 폐쇄는 일반적으로 순차적 블록보다 많은 데이터의 할당을 요구하고 따라서 비교적 보다 길게 수행될 것이다. 그러나, 무순서 블록 폐쇄 및 무순서 기입을 결합한 총 동작은 기입 명령에 대한 레이턴시 기간(TW) 내에 있다.FIG. 25C schematically illustrates a timing diagram for a memory that performs host write including random order update plus closure and reallocation of other random update blocks. In host write 3, writing data is written out of sequence in a sequential block. This has the effect of switching sequential blocks to random blocks and effectively requires the allocation of new random blocks to the update pool. Using the examples of FIG. 24B, because the random update pool 1300 is at the maximum number of two update blocks, one of the existing random update blocks (eg, C4 1301) is a block to which data is newly allocated. (E.g., C6 1312) and then closed. Referring to the example of FIG. 24C, a new random block C6 is allocated and replaces C4 of the random update pool. The host then writes data to the block. It can be seen from FIG. 25C that the write operation takes longer to complete due to the additional operation of closing the random block in the case of such random closure. In general, closing of random blocks generally requires allocation of more data than sequential blocks and will therefore be performed relatively longer. However, the total operation combining random block closure and random write is within the latency period T W for the write command.

도 25d는 다른 무순서 업데이트 블록을 폐쇄할 때 무순서 업데이트 플러스 두 개의 패스들을 포함하는 호스트 기입을 실행하는 메모리에 대한 타이밍 도를 개 략적으로 도시한다. 상기 예는 C4의 폐쇄로부터 데이터의 재할당이 한번 이상 반복되는 것을 제외하고 도 25c에 도시된 것과 유사하다. 이것은 C4로부터의 데이터가 C6의 결함과 만나는 C6에 통합될 때 발생할 수 있다. 다른 새로운 블록은 컴팩트화된 데이터를 수신하기 위하여 할당될 필요가 있을 것이다. 도 25d로부터 에러를 마주하는 이런 무순서 폐쇄 경우, 기입 동작이 도 25a 내지 도 25c에 도시된 경우들보다 오래 걸릴 것이라는 것을 알 수 있다. 이것은 무순서 블록의 데이터를 두번 재할당함에 따른다. 이 경우, 총 동작은 실질적으로 기입 명령에 대해 대부분의 레이턴시 기간(TW)을 사용한다. 실시간으로 프로그램 에러들을 취급하는 것을 방지하기 위한 방법은 미국출원 공보 US-2005-0144365-A1에 기술되었다. 대신, 마주하는 에러는 추후 다루어진다. 이런 방식으로, TW를 초과하는 위험성은 추후 수행될 스케쥴된 임무의 수에 부가하는 비용으로 최소화된다.FIG. 25D schematically illustrates a timing diagram for a memory that executes a host write including random order update plus two passes when closing another random update block. This example is similar to that shown in FIG. 25C except that reallocation of data from the closure of C4 is repeated one or more times. This may occur when data from C4 is incorporated into C6, which encounters a defect in C6. Another new block will need to be allocated to receive the compacted data. It can be seen from this random closing that encounters an error from FIG. 25D, the write operation will take longer than the cases shown in FIGS. 25A-25C. This is due to reallocating the data in the random block twice. In this case, the total operation substantially uses most of the latency period T W for the write command. A method for preventing the handling of program errors in real time is described in US application publication US-2005-0144365-A1. Instead, errors encountered are dealt with later. In this way, the risk of exceeding T W is minimized at a cost that adds to the number of scheduled tasks to be performed later.

제어 데이터 블록들의 재기입들Rewrites of Control Data Blocks

도 26은 제어 데이터를 저장하기 위하여 비축된 블록들의 풀을 개략적으로 도시한다. 도 20에 주어진 실시예를 사용하여, 각각의 타입의 제어 데이터를 저장하는 것에 전용을 사용되는 적어도 하나의 블록을 가진 4가지 타입의 제어 정보가 있다. 따라서 제어 데이터 블록들(1400)의 풀은 제어 데이터를 저장하기 위하여 비축된 다수의 블록들(1402)을 포함한다. 특히, MAP 블록은 MAP 제어 데이터를 저장하기 위한 것이고, GAT 블록은 GAT 제어 데이터를 저장하기 위한 것이고, SPB 블록은 SPBI/CBI 제어 데이터를 저장하기 위한 것이고 부트 블록은 부트 블록 제어 데 이터를 저장하기 위한 것이다.Fig. 26 schematically shows a pool of blocks reserved for storing control data. Using the embodiment given in Fig. 20, there are four types of control information with at least one block dedicated to storing each type of control data. Thus, the pool of control data blocks 1400 includes a number of blocks 1402 reserved for storing control data. In particular, the MAP block is for storing MAP control data, the GAT block is for storing GAT control data, the SPB block is for storing SPBI / CBI control data and the boot block is for storing boot block control data. It is for.

제어 블록이 가득차게 될 때, 내부 재기입 동작은 풀에서 대체하는 새로운 블록에 유효 데이터를 재할당한다. 몇몇 실행에서, 다수의 소거된 블록들(1406)은 캐스케이드 재기입들이 동시에 발생하는 경우 풀에서 비축된다.When the control block becomes full, the internal rewrite operation reallocates valid data to the new block replacing it in the pool. In some implementations, multiple erased blocks 1406 are reserved in the pool when cascade rewrites occur simultaneously.

최악의 경우 캐스케이드 업데이트는 부트 블록, MAP 블록, 스크래치 패드 블록 및 GAT 블록이 동일한 비지 기간에 재기입될 때이다. 이것과 합하여, 캐스케이드 업데이트는 호스트 기입 동안 업데이트 블록 가비지 수집과 동시에 발생할 수 있다. 상기 캐스케이드 업데이트들을 피하기 위하여, 제어 블록들은 거의 가득차게 되고, 상기 블록들은 가장 빠른 이용 가능한 기회에 재기입되어, 최악의 시나리오에서, 임계 타이밍을 가진 호스트 기입의 결과로서 제어 블록들을 강제로 재기입하기 전에 선제적으로 제어 블록들을 재기입하는데 항상 충분한 시간이 있을 것이다.The worst case cascade update is when the boot block, MAP block, scratch pad block and GAT block are rewritten in the same busy period. Combined with this, cascade updates can occur concurrently with update block garbage collection during host writes. In order to avoid the cascade updates, the control blocks are almost full and the blocks are rewritten at the earliest available opportunity, forcing the rewriting of the control blocks as a result of a host write with threshold timing in the worst case scenario. There will always be enough time to rewrite control blocks preemptively before.

도 26은 제어 블록들(1402) 각각에 대한 "거의 가득찬" 임계값 또는 마진(1404)을 도시한다. 제어 블록에 대한 기입 포인터가 이런 임계값에 도달할 때, 플래그는 블록을 재기입하기 위하여 설정될 것이다. 그 다음 블록은 다음 가장 빠른 기회에 재기입될 것이다. 상기 선제 재기입 방법은 미국 출원 공보 US-2005-0144356-A1에 개시되었다. 만약 이런 '거의 가득찬' 임계값 또는 마진이 너무 높게 설정되면, 블록은 강제로 수행되기 전에 재기입되지 않을 수 있다. 다른 한편, 만약 이런 임계값이 너무 낮게 설정되면, 블록은 요구된 것보다 빈번하게 재기입될 것이고, 따라서 데이터 구조를 유지하는 비용을 증가시킨다.FIG. 26 shows a “almost full” threshold or margin 1404 for each of the control blocks 1402. When the write pointer for the control block reaches this threshold, the flag will be set to rewrite the block. The next block will be rewritten at the next quickest opportunity. The preemptive rewrite method is disclosed in US application publication US-2005-0144356-A1. If this 'almost full' threshold or margin is set too high, the block may not be rewritten before being forced to run. On the other hand, if this threshold is set too low, the block will be rewritten more frequently than required, thus increasing the cost of maintaining the data structure.

하나 이상의 제어 블록이 동시에 거의 가득차게 되는 경우, 제어 블록들은 업데이트를 위해 이용할 수 있는 자유 비축된 블록(1406)이 항상 있고, 하나의 제어 블록에 대한 업데이트가 다른 제어 블록의 재기입을 트리거하지 않고, 캐스케이드를 강요하는 것을 보장하기 위하여 미리 결정된 순서로 재기입될 것이다.If one or more control blocks become nearly full at the same time, the control blocks always have free reserve block 1406 available for update, and an update to one control block does not trigger a rewrite of another control block, It will be rewritten in a predetermined order to ensure that the cascade is forced.

우선화된 제어 데이터 타입Preferred Control Data Types

일 실행에서, 계류중인 하나 이상의 제어 블록 재기입들이 있을 때, 보다 액티브한 제어 데이터 타입을 가진 것은 호스트 동작시 발견된 다음 이용 가능한 기회에서 우선 실행된다. 이런 방식에서, 최대 비축된 블록들은 단지 하나의 제어 블록 재기입이 한번에 발생할 때 제어 블록 재기입들에 대한 리소스로서 따로 설정될 필요가 있다.In one implementation, when there are one or more pending control block rewrites, the one with the more active control data type is executed first at the next available opportunity found in the host operation. In this way, the maximum reserved blocks need to be set separately as a resource for control block rewrites when only one control block rewrite occurs at a time.

도 26은 바람직한 실시예에 따른 순서: MAP 블록 -> GAT 블록 -> SPB 블록 -> 부트 블록으로 우선 순위가 정해진 제어 데이터 타입들 또는 블록들을 도시한다. 일반적으로, 상기 순서는 보다 액티브한 데이터 타입이 재기입되는 보다 높은 우선 순위를 가진다는 것이다. 또한, GAT 블록 이전에 MAP 블록을 재기입함으로써, GAT 블록 재기입은 MAP 블록 재기입을 트리거하지 않는 것이 보장된다. 게다가, MAP 블록 재기입 후, 오래된 MAP 블록은 소거 풀로 리턴되고 바로 임의의 추후 제어 블록 재기입들을 위해 재사용될 수 있다. SPB의 작용은 호스트 기입 패턴들에 따르고, 다른 실행시 GAT 블록 이전에 랭크될 수 있다. 부트 블록은 다른 블록들보다 덜 빈번하게 업데이트되어, 재기입하는데 덜 위급하기 때문에 가장 낮은 우선 순위가 제공된다. 이런 방식으로, 제어 데이터 블록 풀(1400)에서 비축된 블록들(1406)의 수는 임의의 시간에 하나의 재기입을 지원하기 위해 하나의 비축된 블 록 같은 최소로 감소될 수 있다.FIG. 26 illustrates control data types or blocks prioritized in the order: MAP block-> GAT block-> SPB block-> boot block according to a preferred embodiment. In general, the order is that the more active data types have a higher priority to be rewritten. In addition, by rewriting the MAP block before the GAT block, it is ensured that the GAT block rewrite does not trigger the MAP block rewrite. In addition, after the MAP block rewrite, the old MAP block can be returned to the erase pool and immediately reused for any future control block rewrites. The action of the SPB depends on the host write patterns and may be ranked before the GAT block in other executions. The boot block is updated less frequently than the other blocks, giving the lowest priority because it is less urgent to rewrite. In this way, the number of blocks 1406 reserved in the control data block pool 1400 may be reduced to a minimum, such as one reserved block, to support one rewrite at any time.

최악의 경우 호스트 기입 패턴에 대한 선제 재기입들을 위한 마진들 설정Set worst case margins for preemptive rewrites to host write pattern

임계값이 최악의 경우 호스트 기입 패턴이 발생하게 하도록 설정되는 것을 보장함으로써, 캐스케이드 업데이트는 임의의 시간에 확실하게 방지될 것이다. 각각의 제어 데이터 블록들(예를 들어, MAP, GAT, SPB 및 BOOT)에 대한 임계값들은 최종부로부터 미리 결정된 수의 페이지들의 마진을 가지게 설정된다. 각각의 블록들에 대한 정확한 마진은 사용된 캐스케이드 회피 메카니즘에 따를 것이다.By ensuring that the threshold is set to cause the host write pattern to occur in the worst case, cascade updates will be reliably prevented at any time. Thresholds for each control data block (eg, MAP, GAT, SPB and BOOT) are set to have a margin of a predetermined number of pages from the last portion. The exact margin for each block will depend on the cascade avoidance mechanism used.

최악의 경우 시나리오는 각각의 제어 블록 재기입 동안 전달하기 위한 데이터 페이지들의 최대 양 및 호스트 기입 동안 피기백 제어 블록 재기입을 위한 최소한의 기회를 발생시키는 호스트 기입 패턴의 최악의 경우에 의해 합성된다.The worst case scenario is synthesized by the worst case of the host write pattern that generates the maximum amount of data pages to deliver during each control block rewrite and the minimum opportunity for piggyback control block rewrite during host write.

각각의 데이터 타입에 대한 재기입에 대한 데이터량Data amount for rewriting for each data type

상기된 특정 예시적인 메모리 시스템들을 사용하여, 각각의 제어 블록 재기입 동안 전달하기 위하여 데이터 페이지의 양의 포인트로부터 최악의 경우는 다음과 같다. MAP 블록 재기입은 최대 8 MAP 섹터들 및 EBM 섹터를 카피하는 것을 포함한다. 만약 각각의 섹터가 하나의 페이지에 기입되면, 새로운 MAP 블록에 카피될 9개의 페이지들이 있을 것이다. GAT 블록 재기입은 새로운 GAT 블록에 카피되는 16 페이지들, 플러스 MAP 블록에 대한 1 페이지의 EBM 업데이트처럼 64 GAT 섹터들을 카피하는 것을 포함하고, 이는 카피될 8 페이지들 플러스 기입될 1 페이지에 달한다. 스크래치 패드 블록 재기입은 새로운 SP 블록에 버퍼된 호스트 데이터의 8 스크래치 패드 페이지들(업데이트 풀에 8 페이지들이 있다는 것을 가정), 플러스 새 로운 SP 블록상 1 스크래치 패드 인덱스 업데이트, 및 MAP 블록에 1 페이지의 EBM 업데이트를 카피하는 것을 포함하고, 이는 카피될 8 페이지들 및 기입될 2 페이지들에 달한다. 부트 블록 재기입은 8 LT 섹터들, 8 SPBL 섹터들, 및 부트 섹터를 카피하는 것을 포함하고, 이는 17 페이지들에 달한다. 만약 부트 블록의 두 개의 카피들이 메모리에 유지되면, 카피들은 반복된다.Using the particular example memory systems described above, the worst case from the positive point of the data page for delivery during each control block rewrite is as follows. MAP block rewriting includes copying up to 8 MAP sectors and an EBM sector. If each sector is written to one page, there will be nine pages to be copied into a new MAP block. GAT block rewriting involves copying 64 GAT sectors, such as 16 pages copied into a new GAT block, 1 page EBM update for a plus MAP block, which amounts to 8 pages to be copied plus 1 page to be written. Scratch pad block rewrite writes 8 scratch pad pages of host data buffered in the new SP block (assuming there are 8 pages in the update pool), plus 1 scratch pad index update on the new SP block, and 1 page in the MAP block. Copying the EBM update, which amounts to 8 pages to be copied and 2 pages to be written. Boot block rewriting includes copying 8 LT sectors, 8 SPBL sectors, and a boot sector, which amounts to 17 pages. If two copies of the boot block are kept in memory, the copies are repeated.

제어 데이터 블록 재기입들의 각각 4가지 타입들은 완료하는데 상당한 시간을 요구할 것이다. 업데이트 풀이 8 미만이거나, 호스트 데이터가 많이 버퍼될 필요가 없는 실행에서, SPB 블록 재기입들은 카피하기에 비교적 적은 페이지들이 있기 때문에 다른 것들보다 빠를 수 있다.Each of the four types of control data block rewrites will require significant time to complete. In implementations where the update pool is less than 8, or where the host data does not need to be buffered much, SPB block rewrites can be faster than others because there are relatively few pages to copy.

최악의 경우 호스트 기입들의 시퀀스 동안 다양한 메모리 구성들을 위한 가능한 제어 블록 기입들의 케이스 연구들Case studies of possible control block writes for various memory configurations during the worst case sequence of host writes

선제 제어 블록 재기입을 수행하기 위한 이상적인 시간은 호스트 명령의 포그라운드 실행에서 "피기백"하는 것이다. 이것은 새로운 호스트 명령 자체가 가비지 수집을 트리거하지 않아서, 호스트 명령의 레이턴시 기간내 제어 블록 재기입들을 수행하기 위하여 보다 많은 시간이 있을 때 특히 바람직하다. 그러나, 많은 예들에서 호스트 기입 같은 호스트 명령은 부가적인 가비지 수집(순차적 블록 폐쇄, 또는 무순서 블록 통합)과 함께 실행될 것이다. 이들 예들에서, 제어 블록 재기입을 피기백하기 위하여 작거나 심지어 불충분한 시간이 존재할 것이다.The ideal time to perform preemptive control block rewriting is to "piggyback" in the foreground execution of the host command. This is particularly desirable when the new host command itself does not trigger garbage collection, so there is more time to perform control block rewrites within the latency period of the host command. However, in many examples a host command, such as a host write, will be executed with additional garbage collection (sequential block closure, or random block consolidation). In these examples, there will be a small or even insufficient time to piggyback control block rewriting.

특정 메모리 시스템 및 구성들의 하기 케이스 연구들은 최악의 경우 호스트 기입 패턴에서, 모든 호스트 기입(예를 들어 도 28b 참조)으로 순차적 블록 폐쇄를 얻는 것이 가능한 것을 나타낼 것이다. 선택적으로, 또한 모든 다른 호스트 기입과 함께 무순서 블록 통합을 얻는 것은 가능하다. 이들 최악의 경우 시나리오들 하에서 제어 데이터 재기입들을 스케쥴하기 위한 룸을 발견하기 위해, 다수의 재기입 스케쥴링 방법들은 다양한 타이밍들에 따라 가능하다.The following case studies of specific memory systems and configurations will indicate that in the worst case host write pattern, it is possible to obtain sequential block closure with all host writes (see, eg, FIG. 28B). Optionally, it is also possible to obtain random block consolidation along with all other host writes. In order to find room for scheduling control data rewrites under these worst case scenarios, multiple rewriting scheduling methods are possible according to various timings.

캐스케이드 업데이트들이 방지되는 것을 보장하기 위하여, 적어도 하나의 선제 제어 블록 재기입은 가비지 수집과 관련하여 허용되어야 한다. 하나의 방법은 순차적 폐쇄와 관련하여 하나의 제어 블록 재기입을 허용하지만, 무순서 블록 통합과 관련해서는 허용하지 않는데, 그 이유는 순차적 폐쇄가 일반적으로 보다 짧은 동작이기 때문이다. 일반적으로, 행에서 많은 통합들을 트리거하는 것은 가능하지 않다. 호스트 명령 동작에 의해 트리거되는 가비지 수집이 없을 때, 동작 시간은 두 개의 제어 블록 재기입들 까지를 지원할 수 있다.In order to ensure that cascade updates are prevented, at least one preemptive control block rewrite should be allowed with respect to garbage collection. One method allows for one control block rewrite with respect to sequential closure, but not with regard to random block consolidation because sequential closure is generally a shorter operation. In general, it is not possible to trigger many integrations in a row. When there is no garbage collection triggered by a host command operation, the operation time can support up to two control block rewrites.

상기 방법은 그들이 절대적으로 가득차게 되기 전에 편리한 시간에 제어 블록들을 재기입하는 것에 따른다. 이들 케이스 연구들은 가비지 수집의 오버헤드들에 관련하여 명령들의 최악의 시퀀스를 발견하고, 트리거하는 업데이트들을 제어하는 것이 목표이다. 이것은 제어 블록들이 재기입되는 순서, 및 얼마나 많은 공간이 거의 가득차게 된 것으로 생각되기 전에 비축되어야 하는가를 정의하기 위하여 사용될 수 있다.The method relies on rewriting control blocks at a convenient time before they become absolutely full. These case studies aim to find the worst sequence of instructions and control the triggering updates in relation to the overheads of garbage collection. This can be used to define the order in which the control blocks are rewritten and how much space should be reserved before it is considered almost full.

통상적인 업데이트 풀 구성들에 대한 예시적인 계산들(도 22 참조)은 제공되고, 무순서 통합들의 최대 빈도를 가진 최악의 경우 및 연속적인 순차적 폐쇄들의 운용을 가진 최악의 경우 사이를 구별한다. 다음 최악의 경우 가정들이 이루어진 다:Example calculations for typical update pool configurations (see FIG. 22) are provided to distinguish between the worst case with the maximum frequency of random integrations and the worst case with the operation of consecutive sequential closures. The following worst case assumptions are made:

(1) 모든 기입은 검색 패드에 대한 단일 섹터 기입(단지 1 비지 기간 및 적어도 1 제어 블록 기입)이다.(1) All writes are single sector writes to the search pad (only one busy period and at least one control block write).

(2) 각각의 순차적 폐쇄는 스크래치 패드 업데이트를 트리거한다. 이것은 만약 이런 블록에 대한 스크래치 패드에 유효한 호스트 데이터가 있다면 발생한다.(2) Each sequential closure triggers a scratch pad update. This happens if there is valid host data in the scratch pad for this block.

(3) 각각의 무순서 통합은 항상 스크래치 패드 업데이트를 트리거한다.(3) Each random integration always triggers a scratch pad update.

(4) 각각의 순차적 대 무순서 전환은 스크래치 패드 업데이트를 트리거한다.(4) Each sequential vs. out of order transition triggers a scratch pad update.

(5) 최악의 운용 동안, MAP 업데이트들 중 1은 MAP 교환을 포함할 것이다. (5) During worst case operation, one of the MAP updates will include a MAP exchange.

(6) 업데이트 풀 또는 블록 리스트는 항상 가득차, 새로운 소거된 메타블록에 대한 모든 요구는 블록리스트 릴리스(release)(GAT, 및 MAP 업데이트)를 트리거한다.(6) The update pool or block list is always full, so every request for a new erased metablock triggers a block list release (GAT, and MAP update).

(7) 모든 GAT 업데이트들은 다른 GAT 블록들을 업데이트하는 것이 GAT 블록들이 충전되는 속도를 감소시키기 때문에 동일한 GAT 블록에 대해 이루어진다.(7) All GAT updates are made for the same GAT block because updating other GAT blocks reduces the rate at which the GAT blocks are charged.

도 27a는 "7-3" 업데이트 풀을 가진 메모리 구성에 대한 무순서 블록 통합들의 최대 빈도를 형성하는 최악의 경우 기입 패턴을 도시하는 테이블이다. 도 22와 관련하여 이전에 기술된 바와 같이, "7-3" 업데이트 풀 구성은 메모리가 호스트 데이터를 저장하기 위하여 최대 7 업데이트 블록들을 동시에 지원하고 최대 3개의 업데이트 블록들이 혼란하거나 비순차적일 수 있는 경우이다. FIG. 27A is a table illustrating the worst case write pattern forming the maximum frequency of random block consolidations for a memory configuration with a "7-3" update pool. As previously described with respect to FIG. 22, the "7-3" update pool configuration allows memory to simultaneously support up to 7 update blocks to store host data and up to 3 update blocks may be confused or out of order. If it is.

업데이트 풀의 처음 상태는 모두 7 업데이트 블록들이 개방되고, 그들 중 3개의 무순서 업데이트 블록들이다. 호스트 기입 패턴은 각각의 순차적 업데이트 블 록에 혼란된 호스트 기입들이고, 새로운 순차적 블록을 반복적으로 개방하고, 다음 기입 중 혼란하게 된다.The initial state of the update pool is that all 7 update blocks are open, and 3 of them are random update blocks. The host write pattern is confused host writes in each sequential update block, iteratively opens new sequential blocks, and becomes confused during the next write.

단계 0: 시작 상태Step 0: Start Status

단계 1: 무순서 블록(1)은 새로운 메타블록(GAT 및 MAP 업데이트), 및 스크래치 패드에 대한 업데이트를 필요로 하도록 폐쇄된다. 새로운 명령은 순차적 블록 4가 혼란하게 되게 하고(스크래치 패드 업데이트), 그 다음 호스트 데이터는 스크래치 패드에 기입될 수 있다. 총 제어 데이터는 트리거된다: 1 GAT 업데이트, 1 MAP 업데이트, 및 3 스크래치 패드 업데이트들. 무순서 블록을 폐쇄하는 것은 다른 블록에 재배치된(또는 통합된) 유효 데이터를 유발한다. 상기 방법에 따라, 이런 통합 오버헤드로 인해, 제어 블록들의 재기입이 이런 단계에서 피기백되지 않을 것이다.Step 1: The random block 1 is closed to require a new metablock (GAT and MAP update), and an update to the scratch pad. The new command causes the sequential block 4 to be confused (scratch pad update), and then host data can be written to the scratch pad. Total control data is triggered: 1 GAT update, 1 MAP update, and 3 scratch pad updates. Closing random blocks results in valid data relocated (or integrated) to other blocks. According to the method, due to this integration overhead, the rewriting of control blocks will not be piggybacked at this stage.

단계 2-4: 단계 1과 같이. 제어 블록들의 재기입은 가능하지 않다.Step 2-4: As in Step 1. Rewriting of control blocks is not possible.

단계 5: 이것은 선제 재기입을 수행하기 위한 제 1 기회이다. 새로운 명령은 새로운 순차적 업데이트 블록을 개방한다. 예비 업데이트 블록이 있고, 이에 따라 다른 블록은 폐쇄될 필요가 없지만, 호스트 기입은 스크래치 패드로 진행할 수 있다. 이런 포인트에 의해 4 MAP 업데이트들, 4GAT 업데이트, 및 13 스크래치 패드 업데이트들은 이루어질 수 있다.Step 5: This is the first opportunity to perform preemptive rewrite. The new instruction opens a new sequential update block. There is a spare update block, so other blocks do not need to be closed, but the host write can proceed to the scratch pad. By this point 4 MAP updates, 4GAT update, and 13 scratch pad updates can be made.

단계 6: 단계 1과 같이.Step 6: As in step 1.

단계 7: 단계 5와 같이. 이런 포인트에 의해 6 MAP 페이지들, 6 GAT 페이지들, 및 16 스크래치 패드 페이지들은 기입될 수 있다.Step 7: As in step 5. By this point 6 MAP pages, 6 GAT pages, and 16 scratch pad pages can be written.

따라서, 만약 마진이 MAP 블록에 대해 6개의 빈 MAP 페이지들을 가지며, GAT 블록에 대해 4개의 빈 GAT 페이지들을 가지며, SP 블록에 대해 16개의 빈 스크래치 패드 페이지들을 가지도록 설정되면, 단계 5에서 MAP 및 GAT 블록들을 재기입함으로써 캐스케이드를 피하기 위하여 다양한 제어 블록들이 정시에 재기입되는 것을 보장하는 것은 가능하다.Thus, if the margin is set to have six empty MAP pages for the MAP block, four empty GAT pages for the GAT block, and sixteen empty scratch pad pages for the SP block, then the MAP and It is possible to ensure that the various control blocks are rewritten on time to avoid cascade by rewriting the GAT blocks.

도 27b는 "7-3" 업데이트 풀을 가진 메모리 구성에 대해 순차적 블록 폐쇄들의 연속적인 운행을 형성하는 최악의 경우 기입 패턴을 도시하는 테이블이다.FIG. 27B is a table illustrating the worst case write pattern forming a continuous run of sequential block closures for a memory configuration with a "7-3" update pool.

업데이트 풀의 시작 상태는 모두 7개의 업데이트 블록들이 개방되고, 그들 중 3은 무순서 업데이트 블록들이고 가득찬다. 호스트 기입 패턴은 호스트가 무순서 블록을 충전하기 위하여 혼란되게 기입하고, 그 다음 순차적 업데이트 블록을 반복적으로 개방하도록 한다.The start state of the update pool is that all seven update blocks are open, and three of them are random update blocks and are full. The host write pattern causes the host to write clutteredly to fill the random block and then repeatedly open the sequential update block.

단계 0: 시작 상태Step 0: Start Status

단계 1: 이미 가득찬 무순서 블록(1)에 기입. 이것은 GAT 및 MAP 업데이트 및 스크래치 패드 업데이트를 트리거하는 통합을 트리거한다. 새로운 순차적 업데이트 블록은 개방되고 호스트 데이터는 스크래치 패드에 기입된다.Step 1: Fill in randomly filled block (1). This triggers an integration that triggers GAT and MAP updates and scratch pad updates. The new sequential update block is opened and the host data is written to the scratch pad.

단계들 2 및 3: 단계 1 같이Steps 2 and 3: Like Step 1

단계 4: 이것은 선제 기입을 수행하기 위한 제 1 기회이다. 새로운 명령은 새로운 업데이트 블록을 요구하고, 상기 새로운 업데이트 블록은 기존 순차적 업데이트 블록을 폐쇄한다. 폐쇄는 스크래치 패드 기입을 요구하고, 새로운 블록은 GAT 및 MAP 업데이트를 요구한다. 이런 포인트에 의해, 4 MAP 업데이트들, 4 GAT 업데 이트들, 및 8 스크래치 패드 업데이트들은 수행되었다.Step 4: This is the first opportunity to perform a preemptive entry. The new command requires a new update block, which closes the existing sequential update block. Closure requires scratch pad writing, and new blocks require GAT and MAP updates. By this point, 4 MAP updates, 4 GAT updates, and 8 scratch pad updates were performed.

단계 5 진행: 단계 4에서처럼, 각각은 순차적 폐쇄를 트리거링하고, 새로운 블록을 할당하는 것은 1 GAT, 1 MAP 및 2 스크래치 패드 업데이트들을 트리거링한다.Step 5 Proceed: As in Step 4, each triggers a sequential closure, and allocating a new block triggers 1 GAT, 1 MAP and 2 scratch pad updates.

MAP 블록이 단계 4에서 재기입되고, GAT 블록이 단계 5에서 재기입되고 스크래치 패드가 단계 6에서 재기입되는 것을 가정하면, 마진은 MAP 블록 5의 6 페이지들, GAT 블록의 5 페이지들, 및 스크래치 패드 블록의 12 페이지들로 설정될 필요가 있다.Assuming that the MAP block is rewritten in step 4, the GAT block is rewritten in step 5 and the scratch pad is rewritten in step 6, the margin is 6 pages of MAP block 5, 5 pages of GAT block, and It needs to be set to 12 pages of the scratch pad block.

도 28a는 "3-1" 업데이트 풀을 가진 메모리 구성에 대한 무순서 블록 통합들의 최대 빈도를 형성하는 최악의 경우 기입 패턴을 도시하는 테이블이다. 도 22와 관련하여 이전에 기술된 바와 같이, "3-1" 업데이트 풀 구성은 메모리가 호스트 데이터를 저장하기 위하여 최대 3 개의 업데이트 블록들을 동시에 지원하고 3 개의 업데이트 블록들 중 기껏 하나가 혼란하거나 비순차적일 수 있는 경우이다. FIG. 28A is a table illustrating the worst case write pattern forming the maximum frequency of random block consolidations for a memory configuration with a "3-1" update pool. As previously described with respect to FIG. 22, the "3-1" update pool configuration allows the memory to support up to three update blocks simultaneously to store host data and at least one of the three update blocks is confused or non-conforming. It may be sequential.

업데이트 풀의 시작 상태는 모두 3개의 업데이트 블록들이 개방되고, 그들 중 1은 무순서 업데이트 블록이다. 호스트 기입 패턴은 각각의 순차적 업데이트 블록에 대한 무순서 호스트 기입이고, 새로운 순차적 블록을 반복적으로 개방하고, 다음 기입 중 무순서 상태로 진행하게 된다.The start state of the update pool is that all three update blocks are open, and one of them is a random update block. The host write pattern is an unordered host write for each sequential update block, repeatedly opening a new sequential block, and proceeding in an unordered state during the next write.

단계 0: 시작 상태Step 0: Start Status

단계 1: 무순서 블록(1)은 새로운 메타블록(GAT 및 MAP 업데이트), 및 스크래치 패드에 대한 기입을 요구하도록 폐쇄된다. 새로운 명령은 순차적 블록(2)이 무순서 것으로 진행하게 하고(스크래치 패드 업데이트), 및 그 다음 호스트 데이터는 스크래치 패드에 기입될 수 있다. 총 1 GAT 페이지, 1 MAP 페이지, 및 3 스크래치 패드 페이지들.Step 1: The random block 1 is closed to require writing a new metablock (GAT and MAP update), and a scratch pad. The new instruction causes the sequential block 2 to proceed in random order (scratch pad update), and then the host data can be written to the scratch pad. 1 GAT page total, 1 MAP page, and 3 scratch pad pages.

단계 2: 단계 1 같이Step 2: Like Step 1

단계 3: 이것은 선제 재기입을 수행하기 위한 제 1 기회이다. 새로운 명령은 새로운 순차적 업데이트 블록을 개방한다. 예비 업데이트 블록이 있으므로, 다른 블록은 폐쇄될 필요가 없고, 호스트 기입은 스크래치 패드로 진행할 수 있다. 이런 포인트에 의해 3 MAP 업데이트들, 3 GAT 업데이트들, 및 7 스크래치 패드 업데이트들은 이루어질 수 있다.Step 3: This is the first opportunity to perform a preemptive rewrite. The new instruction opens a new sequential update block. Since there is a spare update block, the other block does not need to be closed, and the host write can proceed to the scratch pad. By this point 3 MAP updates, 3 GAT updates, and 7 scratch pad updates can be made.

단계 4: 단계 1과 같이Step 4: As in Step 1

단계 5: 단계 3과 같이. 이런 포인트에 의해 6 MAP 업데이트들, 6 GAT 업데이트들, 및 11 스크래치 패드 업데이트들은 이루어질 수 있다.Step 5: As in step 3. By this point 6 MAP updates, 6 GAT updates, and 11 scratch pad updates can be made.

따라서, 만약 마진에 MAP 블록에 대해 5개의 빈 MAP 페이지들, GAT 블록에 대해 3개의 빈 GAT 페이지들, 및 SP 블록에 대해 11개의 빈 스크래치 패드 페이지들이 설정되면, 단계 3에서 MAP 및 GAT 블록들, 및 단계 5에서 스크래치 패드를 재기입함으로써 캐스케이드를 피하기 위하여 적절한 때 다양한 제어 블록들이 재기입되게 하는 것을 보장하는 것은 가능하다.Thus, if five empty MAP pages for the MAP block, three empty GAT pages for the GAT block, and eleven empty scratch pad pages for the SP block are set in the margin, in step 3 the MAP and GAT blocks It is possible to ensure that the various control blocks are rewritten when appropriate to avoid cascade by rewriting the scratch pad in step 5 and.

도 28b는 "3-1" 업데이트 풀을 가진 메모리 구성에 대해 순차적 블록 폐쇄들의 연속적인 운행을 형성하는 최악의 경우 기입 패턴을 도시하는 테이블이다.FIG. 28B is a table showing the worst case write pattern forming a continuous run of sequential block closures for a memory configuration with a "3-1" update pool.

업데이트 풀의 시작 상태는 모두 3개의 업데이트 블록들이 개방되고, 그들 중 하나는 무순서 업데이트 블록이고 가득찬다. 호스트 기입 패턴은 호스트가 가득찬 무순서 블록들에 혼란하게 기입되고, 그 다음 순차적 업데이트 블록을 반복적으로 개방하도록 한다.The start state of the update pool is that all three update blocks are open, and one of them is a random update block and is full. The host write pattern causes the host to write cluttered randomly filled blocks and then repeatedly open sequential update blocks.

단계 0: 시작 상태Step 0: Start Status

단계 1: 이미 가득찬 무순서 블록 1에 기입. 이것은 GAT 및 MAP 업데이트 및 스크래치 패드 업데이트를 트리거하는 통합을 트리거한다. 새로운 순차적 업데이트 블록은 개방되고 호스트 데이터는 스크래치 패드에 기입된다. 총 2개의 GAT 업데이트들, 2 MAP 업데이트들 및 2 스크래치 패드 업데이트들은 이런 포인트에 의해 이루어질 수 있다.Step 1: Fill in random block 1, which is already full. This triggers an integration that triggers GAT and MAP updates and scratch pad updates. The new sequential update block is opened and the host data is written to the scratch pad. A total of two GAT updates, two MAP updates and two scratch pad updates can be made by this point.

단계 2: 이것은 선제 재기입을 수행하기 위한 제 1 기회이다. 새로운 명령은 기존 순차적 업데이트 블록을 폐쇄하는 새로운 업데이트 블록을 필요로 한다. 폐쇄는 스크래치 패드 기입을 요구하고, 새로운 블록은 GAT 및 MAP 업데이트를 필요로 한다. 이런 포인트에 의해, 3 MAP 업데이트들, 3 GAT 업데이트들, 및 6 스크래치 패드 업데이트들은 수행될 수 있다.Step 2: This is the first opportunity to perform preemptive rewrite. The new instruction requires a new update block that closes the existing sequential update block. Closure requires scratch pad writing, and new blocks require GAT and MAP updates. By this point, 3 MAP updates, 3 GAT updates, and 6 scratch pad updates can be performed.

단계 3 진행: 단계 2에서 같이, 각각은 순차적 폐쇄를 트리거하고, 새로운 블록을 할당하는 것은 1 GAT, 1 MAP 및 2 스크래치 패드 업데이트들을 트리거링한다.Step 3 Proceed: As in Step 2, each triggers a sequential closure, and allocating a new block triggers 1 GAT, 1 MAP and 2 scratch pad updates.

MAP 블록이 단계 2에서 재기입되고, GAT 블록이 단계 3에서 재기입되고 스크래치 패드가 단계 4에서 재기입되는 것을 가정하면, 마진은 MAP 블록에서 5 페이지들, GAT 블록에서 4 페이지들, 및 스크래치 패드 블록에서 10 페이지들이 설정되는 것을 요구한다.Assuming that the MAP block is rewritten in step 2, the GAT block is rewritten in step 3, and the scratch pad is rewritten in step 4, the margin is 5 pages in the MAP block, 4 pages in the GAT block, and scratch Requires 10 pages to be set in the pad block.

도 29a는 "3-3" 업데이트 풀을 가진 메모리 구성에 대한 무순서 블록 통합들의 최대 빈도를 형성하는 최악의 경우 기입 패턴을 도시하는 테이블이다. 도 22와 관련하여 이전에 기술된 바와 같이, "3-3" 업데이트 풀 구성은 메모리가 호스트 데이터를 저장하기 위한 최대 3개의 업데이트 블록들을 동시에 지원하고 3개의 업데이트 블록들 중 임의의 것이 순차적이나 혼란하게 될 수 있는 경우이다.FIG. 29A is a table illustrating the worst case write pattern forming the maximum frequency of random block consolidations for a memory configuration with a "3-3" update pool. As previously described with respect to FIG. 22, the "3-3" update pool configuration allows memory to simultaneously support up to three update blocks for storing host data and any of the three update blocks may be sequential or confusing. This can be the case.

업데이트 풀의 시작 상태는 모두 3개의 업데이트 블록들이 개방되고, 그들 중 3개가 무순서 업데이트 블록들이다. 호스트 기입 패턴은 호스트가 각각의 순차적 업데이트 블록에 혼란하게 기입하고, 새로운 순차적 블록을 반복적으로 개방하고, 다음 기입 중 무순서 상태로 가게 한다.The start state of the update pool is that all three update blocks are open, and three of them are random update blocks. The host write pattern causes the host to confuse each sequential update block, to repeatedly open a new sequential block, and to go out of order during the next write.

단계 0: 시작 상태Step 0: Start Status

단계 1: 무순서 블록(1)은 새로운 메타블록(GAT 및 MAP 업데이트), 및 스크래치 패드에 대한 기입을 요구하도록 폐쇄된다. 새로운 명령은 새로운 메타 블록(GAT 및 MAP 업데이트들)을 요구하고, 스크래치 패드로 진행한다. 총 2 GAT 업데이트들, 2 MAP 업데이트들, 및 2 스크래치 패드 업데이트들은 이런 포인트에 의해 이루어질 수 있다.Step 1: The random block 1 is closed to require writing a new metablock (GAT and MAP update), and a scratch pad. The new command requires a new meta block (GAT and MAP updates) and proceeds to the scratch pad. A total of 2 GAT updates, 2 MAP updates, and 2 scratch pad updates can be made by this point.

단계들 2 및 3: 단계 1 같이Steps 2 and 3: Like Step 1

단계 4: 이것은 사전 선제 기입을 수행하기 위한 제 1 기회이다. 새로운 명령은 새로운 순차적 업데이트 블록을 개방한다. 예비 업데이트 블록이 있어서, 다른 블록은 폐쇄될 필요가 없지만, 호스트 기입은 스크래치 패드로 진행할 수 있다. 이런 포인트에 의해 6 MAP 업데이트들, 6 GAT 업데이트들, 및 8 스크래치 패드 업데이트들은 수행될 수 있다.Step 4: This is the first opportunity for performing the pre-emptive entry. The new instruction opens a new sequential update block. Since there is a spare update block, the other block does not need to be closed, but the host write can proceed to the scratch pad. By this point 6 MAP updates, 6 GAT updates, and 8 scratch pad updates can be performed.

단계들 5 및 6: 단계 4같이As Steps 5 and 6: As Step 4

단계 7: 단계 1 같이Step 7: Like Step 1

따라서, 만약 마진에 MAP 블록에 대해 8개의 빈 MAP 페이지들, GAT 블록에 대해 6개의 빈 GAT 페이지들, 및 SP 블록에 대해 10개의 빈 스크래치 패드 페이지들이 설정되면, 단계 4에서 MAP 및 GAT 블록들 및 단계 5에서 스크래치 패드를 재기입함으로써 캐스케이드를 회피하기 위하여 다양한 제어 블록들이 적당한 때 재기입되는 것을 보장하는 것은 가능하다.Thus, if eight empty MAP pages for the MAP block, six empty GAT pages for the GAT block, and ten empty scratch pad pages for the SP block are set in the margin, the MAP and GAT blocks in step 4 And by rewriting the scratch pad in step 5, it is possible to ensure that the various control blocks are rewritten in time to avoid cascade.

도 29b는 "3-3" 업데이트 풀을 가진 메모리 구성에 대한 순차적 블록 폐쇄들의 연속적 운행을 형성하는 최악의 경우 기입 패턴을 도시하는 테이블이다.FIG. 29B is a table illustrating the worst case write pattern forming a continuous run of sequential block closures for a memory configuration with a "3-3" update pool.

업데이트 풀의 시작 상태는 모두 개의 업데이트 블록들이 개방되고, 그들 중 3개는 무순서 업데이트 블록들이고 가득찬다. 호스트 기입 패턴은 호스트가 가득찬 무순서 블록들에 혼란하게 기입하고, 그 다음 순차적 업데이트 블록을 반복적으로 개방하도록 한다.The start state of the update pool is that all of the update blocks are open, and three of them are random update blocks and are full. The host write pattern causes the host to write cluttered randomly filled blocks and then repeatedly open sequential update blocks.

단계 0: 시작 상태Step 0: Start Status

단계 1: 이미 가득찬 무순서 블록(1)에 기입. 이것은 GAT 및 MAP 업데이트 및 스크래치 패드 업데이트를 트리거하는 통합을 트리거한다. 새로운 순차적 업데이트 블록은 개방되고 호스트 데이터는 스크래치 패드에 기입된다. 총 2 GAT 업데이트들, 2 MAP 업데이트들 및 2 스크래치 패드 업데이트들은 이런 포인트에 의해 이루어진다.Step 1: Fill in randomly filled block (1). This triggers an integration that triggers GAT and MAP updates and scratch pad updates. The new sequential update block is opened and the host data is written to the scratch pad. A total of 2 GAT updates, 2 MAP updates and 2 scratch pad updates are made by this point.

단계들 2 및 3: 단계 1 같이Steps 2 and 3: Like Step 1

단계 4: 이것은 선제 재기입을 수행하기 위한 제 1 기회이다. 새로운 명령은 기존 순차적 업데이트 블록을 폐쇄하는 새로운 업데이트 블록을 요구한다. 폐쇄는 스크래치 패드 기입을 필요로 하고, 새로운 블록은 GAT 및 MAP 업데이트를 요구한다. 이런 포인트에 의해, 7 MAP 업데이트들, 4 GAT 업데이트들, 및 8 스크래치 패드 업데이트들은 수행될 수 있다.Step 4: This is the first opportunity to perform preemptive rewrite. The new command requires a new update block that closes the existing sequential update block. Closure requires scratch pad writing, and new blocks require GAT and MAP updates. By this point, 7 MAP updates, 4 GAT updates, and 8 scratch pad updates can be performed.

단계들 5 진행: 단계 4 같이, 각각은 순차적 폐쇄를 트리거하고, 새로운 블록을 할당하는 것은 1 GAT, 1 MAP 및 2 스크래치 패드 업데이트들을 트리거한다.Step 5 Proceed: Like step 4, each triggers a sequential closure, and allocating a new block triggers 1 GAT, 1 MAP, and 2 scratch pad updates.

따라서, 만약 마진에 MAP 블록의 9 페이지들, GAT 블록의 5 페이지들, 및 스크래치 패드 블록의 12 페이지들이 설정되면, 단계 4에서 MAP 블록, 단계 5에서 GAT 블록 및 단계 6에서 스크래치 패드를 기입함으로써 캐스케이드를 회피하기 위하여 다양한 제어 블록들이 적당한 때 재기입되는 것을 보장하는 것은 가능하다.Thus, if 9 pages of the MAP block, 5 pages of the GAT block, and 12 pages of the scratch pad block are set in the margin, by writing the MAP block in step 4, the GAT block in step 5 and the scratch pad in step 6, It is possible to ensure that various control blocks are rewritten when appropriate to avoid cascade.

에러 취급Error handling

데이터 재배치 동작 동안 프로그램 에러는 시간 소비적 동작이 다시 시작될 필요가 있기 때문에 보다 중요하다. 하나의 가능한 발생은 호스트 명령에 의해 트리거된 무순서 블록 통합 또는 순차적 블록 폐쇄 동안이다. 다른 가능한 발생은 제어 블록 재기입 동안이다. 캐스케이드를 회피하기 위한 선제 제어 블록 재기입은 이들 문제들을 고려할 필요가 있을 것이다.Program errors during data relocation operations are more important because time-consuming operations need to be restarted. One possible occurrence is during random block consolidation or sequential block closure triggered by a host command. Another possible occurrence is during control block rewriting. Preemptive control block rewriting to avoid cascade will need to consider these issues.

통합 동안 프로그램 에러는 두 개의 방식들 중 하나로 취급된다. 만약 에러 가 통합 시작 근처에서 발생하면, 통합은 다른 블록을 사용하여 재시작된다. 만약 에러가 통합의 종료 근처에서 발생하면, 상 에러 블록은 나머지 섹터들을 저장하기 위하여 사용된다. 상 프로그램 에러 취급은 2005년 7월 28일 공개된 미국출원 공보 US-2005-0166087-A1에 개시되었다. 만약 상 에러가 사용되면, 상 에러 블록은 다음 편리한 시간에서 폐쇄되고 데이터는 비결함 블록에 재배치된다. 이것은 선제 재기입들이 지연되는 것을 의미한다. 이런 이유 때문에, 보다 많은 섹터들은 각각의 제어 블록들의 마진에 비축될 필요가 있다. 순차적 폐쇄 동안 프로그램 에러는 통합 동안과 동일한 방식으로 필수적으로 취급된다.During the integration, the program error is treated in one of two ways. If an error occurs near the start of the integration, the integration is restarted using another block. If an error occurs near the end of the consolidation, the phase error block is used to store the remaining sectors. Phase program error handling was disclosed in US application publication US-2005-0166087-A1, published July 28, 2005. If phase error is used, the phase error block is closed at the next convenient time and the data is relocated to the non-defective block. This means that preemptive rewrites are delayed. For this reason, more sectors need to be reserved for the margin of the respective control blocks. Program errors during sequential closure are essentially treated in the same way as during integration.

프로그램 에러는 제어 데이터 업데이트 동안 발생할 수 있다. 에러를 취급하는 하나의 방식은 새로운 제어 블록에 제어 데이터를 재배치하는 것이다. 대안은 제어 블록의 다음 이용 가능한 페이지에 섹터를 기입하는 것이다. 플래그는 그 다음 이런 블록이 다음 편리한 시간에 재기입되도록 설정될 수 있다. 이것은 제어 블록의 마진에 추가 페이지를 비축하는 것을 요구한다.Program errors can occur during control data updates. One way of dealing with errors is to relocate control data to a new control block. An alternative is to write the sector to the next available page of the control block. The flag may then be set such that this block is rewritten at the next convenient time. This requires storing an additional page at the margin of the control block.

선제 제어 블록 재기입 동안 프로그램 에러는 다른 블록에 대해 재기입을 반복함으로써 취급된다. 대안은 선제 재기입을 포기하고 다음 편리한 시간에 다시 재기입을 시도하는 것이다.Program errors during preemptive control block rewriting are handled by repeating rewriting for other blocks. An alternative is to abandon preemptive rewriting and try to rewrite it at the next convenient time.

양쪽 경우들에서, 임의의 다른 계류중인 선제 재기입들은 지연된다. 이런 이유로, 추가 섹터들은 제어 블록들 각각의 마진에 비축될 필요가 있다.In both cases, any other pending preemptive rewrites are delayed. For this reason, additional sectors need to be reserved in the margin of each of the control blocks.

선제 제어 블록들 재기입을 위한 스케쥴링 방법들Scheduling Methods for Rewriting Preemptive Control Blocks

이전에 언급된 바와 같이, 다수의 제어 블록 재기입 스케쥴링 방법들은 호스 트 및 메모리 시스템들의 다양한 타이밍들에 따라 가능하다. 다음은 제어 블록 재기입 스케쥴링 방법들의 몇몇 예들이다.As mentioned previously, a number of control block rewrite scheduling methods are possible depending on the various timings of the host and memory systems. The following are some examples of control block rewrite scheduling methods.

방법 1은 도 27a ~ 27b, 도 28a ~ 28b 및 도 29a ~ 29b에 도시된 케이스 연구들에 대한 계산들을 수행하기 위하여 사용된 방법이다. 기본적으로 호스트 기입 레이턴스가 명령에 의해 트리거되는 가비지 수집이 없을 때 두 개의 재기입들을 수행하고; 가비지 수집이 순차적 폐쇄를 포함할 때 하나의 재기입을 수행하고; 및 가비지 수집이 무순서 폐쇄를 포함할 때 재기입이 없도록 하는 충분한 시간을 허용한다.Method 1 is the method used to perform the calculations for the case studies shown in FIGS. 27A-27B, 28A-28B, and 29A-29B. By default two writes are performed when the host write latency is not garbage collected triggered by the command; Perform one rewrite when garbage collection includes sequential closure; And allow sufficient time to ensure that there is no rewriting when garbage collection includes random closure.

1. 무순서 블록 통합과 동일한 비지 기간에서 선제 제어 블록 재기입들을 수행하지 않는다.1. Do not perform preemptive control block rewrites in the same busy period as random block consolidation.

2. 적당한 블록 폐쇄와 동일한 비지 기간에서 1 선제 제어 블록 재기입을 허용한다.2. Allows one preemptive control block rewrite in the busy period equal to proper block closure.

3. 업데이트 블록 가비지 수집이 없을 때 2 선제 제어 블록 재기입들을 허용한다.3. Allow two preemptive control block rewrites when there is no update block garbage collection.

도 30은 방법 1의 제어 블록 재기입 스케쥴을 적용함으로써 각각의 제어 데이터 타입에 대한 예시적인 계산된 마진들을 리스트하는 테이블이다. 요약하여, 방법 1은 모든 업데이트 풀 구성들에 대하여 MAP 블록에 대해 9 MAP 페이지들, GAT 블록에 대해 6 GAT 페이지들 및 스크래치 패드 블록에 대해 16 페이지들이 설정된 마진들을 가져야 한다. 또한, 취급될 각각의 에러에 대해, 2 추가 페이지들은 각각의 마진에 부가되어야 한다.30 is a table listing exemplary calculated margins for each control data type by applying the control block rewrite schedule of Method 1. FIG. In summary, Method 1 should have margins with 9 MAP pages for the MAP block, 6 GAT pages for the GAT block, and 16 pages for the scratch pad block for all update pool configurations. In addition, for each error to be handled, two additional pages must be added to each margin.

방법 2는 기본적으로 호스트 기입이 가비지 수집을 트리거하더라도 호스트 기입 레이턴시가 스크래치 패드 재기입 같은 짧은 제어 블록 재기입을 수행하기 위한 충분한 시간을 허용하는 것을 가정한다.Method 2 basically assumes that although the host write triggers garbage collection, the host write latency allows sufficient time to perform short control block rewrites, such as scratch pad rewrites.

1. 임의의 시간에 선제 스크래치 패드 재기입을 허용한다.1. Allow pre-write scratch pad rewrite at any time.

2. 순차적 폐쇄와 동일한 비지 기간에서 1 선제 제어 블록 재기입을 허용한다.2. Allow one preemptive control block rewrite in the same busy period as sequential closure.

3. 업데이트 블록 가비지 수집이 없을 때 2 선제 제어 블록 재기입들을 허용한다.3. Allow two preemptive control block rewrites when there is no update block garbage collection.

도 31은 방법 2의 제어 블록 재기입 스케쥴을 적용함으로써 각각의 제어 데이터 타입에 대한 예시적인 계산된 마진들을 리스트하는 테이블이다. 요약하여, 방법 2는 모든 업데이트 풀 구성들에 대하여 MAP 블록에 대해 2 MAP 페이지들, GAT 블록에 대해 4 GAT 페이지들 및 스크래치 패드 블록에 대해 3 페이지들이 설정된 마진을 가져야 한다. 또한, 취급될 각각의 에러에 대해, 2 추가 페이지들은 각각의 마진에 부가되어야 한다.FIG. 31 is a table listing exemplary calculated margins for each control data type by applying the control block rewrite schedule of Method 2. FIG. In summary, Method 2 should have a margin set with 2 MAP pages for the MAP block, 4 GAT pages for the GAT block, and 3 pages for the scratch pad block for all update pool configurations. In addition, for each error to be handled, two additional pages must be added to each margin.

방법 3은 각각의 재기입들 동안 재배치하기 위한 페이지들의 양을 검사하고 이들 중 임의의 것이 호스트 기입 레이턴시에 의해 설정된 나머지 시간 내에서 실행될 수 있는 양적인 방법을 취한다. 이 방법은 각각의 재기입을 위한 재할당 양을 마이크로 트랙킹하는 비용에서 가장 충분히 호스트 기입 레이턴시 기간을 사용할 것이다. 장점은 마진들이 최소일 것이라 것이다.Method 3 examines the amount of pages to relocate during each rewrite and takes a quantitative way in which any of these can be executed within the remaining time set by the host write latency. This method will use the host write latency period most fully at the cost of microtracking the amount of reallocation for each rewrite. The advantage would be minimal margins.

1. 각각의 제어 블록 재기입(페이지 카피들의 수)에 대해 요구된 작업을 카 운트한다.1. Count the required work for each control block rewrite (number of page copies).

2. 총 작업 수행이 정의된 임계값을 초과할 때까지 선제 제어 블록 재기입들을 허용한다.2. Allow preemptive control block rewrites until the total work performance exceeds the defined threshold.

도 32는 방법 3의 제어 블록 재기입 스케쥴을 적용함으로써 각각의 제어 데이터 타입에 대한 예시적인 계산된 마진들을 리스팅하는 테이블이다. 요약하여, 방법 3은 모든 업데이트 풀 구성들에 대해 MAP 블록에 대해 2 MAP 페이지들, GAT 블록에 대해 2 GAT 페이지들 및 스크래치 패드 블록에 대해 3 페이지들이 설정된 마진들을 가져야 한다. 취급될 각각의 에러에 대해, 2 추가 페이지들은 각각의 마진에 부가되어야 한다.32 is a table listing exemplary calculated margins for each control data type by applying the control block rewrite schedule of Method 3. FIG. In summary, Method 3 should have margins with 2 MAP pages for the MAP block, 2 GAT pages for the GAT block, and 3 pages for the scratch pad block for all update pool configurations. For each error to be handled, two additional pages must be added to each margin.

방법 4는 무순서 폐쇄가 순차적 폐쇄와 동일한 속도로 수행될 수 있는 부가적인 가정을 가진 방법 1과 유사하다.Method 4 is similar to Method 1 with the additional assumption that random order closure can be performed at the same rate as sequential closure.

1. 순서 MAP -> 스크래치 패드 -> GAT -> BB로 제어 블록들을 재기입한다. 이것은 SP에 4 미만의 페이지들을 비축하게 한다.1. Rewrite the control blocks with the sequence MAP-> Scratch Pad-> GAT-> BB. This allows you to store less than 4 pages in the SP.

2. 순차적 폐쇄 또는 무순서 컴팩트화와 동일한 비지 기간에서 1 선제 제어 블록 재기입을 허용한다.2. Allows one preemptive control block rewriting in busy periods equal to sequential closing or no order compaction.

3. 업데이트 블록 가비지 수집이 없을 때 2 선제 제어 블록 재기입들을 허용한다.3. Allow two preemptive control block rewrites when there is no update block garbage collection.

도 33은 방법 4의 제어 블록 재기입 스케쥴을 적용함으로써 각각의 제어 데이터 타입에 대한 예시적인 계산된 마진들을 리스트하는 테이블이다. 요약하여, 방법 4는 모든 업데이트 풀 구성들에 대해 MAP 블록에 대해 4 MAP 페이지들, GAT 블 록에 대해 6 GAT 페이지들 및 스크래치 패드 블록에 대해 5 페이지들이 설정된 마진들을 가져야 한다. 취급될 각각의 에러에 대해, 2 추가 페이지들은 각각의 마진에 부가되어야 한다.33 is a table listing exemplary calculated margins for each control data type by applying the control block rewrite schedule of method 4. FIG. In summary, Method 4 should have margins with 4 MAP pages for the MAP block, 6 GAT pages for the GAT block, and 5 pages for the scratch pad block for all update pool configurations. For each error to be handled, two additional pages must be added to each margin.

개선된 선제 제어 데이터 재배치Improved preemptive control data relocation

도 34는 최악의 경우를 바탕으로 제어 데이터 블록들의 선제 재기입들을 위한 방법을 도시하는 흐름도이다.34 is a flow chart illustrating a method for preemptive rewrites of control data blocks on a worst case basis.

단계 1402: 블록들로 비휘발성 메모리 구성.Step 1402: Configure the nonvolatile memory into blocks.

단계 1404: 다른 타입의 데이터 유지.Step 1404: Retain other types of data.

단계 1410: 블록이 각각의 타입의 데이터에 대해 가득차기 전에 다수의 빈 메모리 단위들의 마진을 설정하고, 상기 마진은 블록내 데이터가 재배치 되도록 하기 전에 미리 결정된 기간에 누적된 데이터를 수용하기에 충분하고, 미리 결정된 기간은 블록내 데이터가 재배치되도록 하기 전에 최악의 경우 기간을 양산하는 호스트 기입 패턴으로부터 결정된다.Step 1410: Set a margin of a plurality of free memory units before the block is full for each type of data, wherein the margin is sufficient to accommodate the data accumulated in a predetermined period before causing the data in the block to be relocated. The predetermined period of time is determined from a host write pattern that yields a period in the worst case before causing the in-block data to be relocated.

단계 1420: 각각의 블록이 동일한 타입의 데이터를 필수적으로 저장하도록 다수의 블록들 사이에서 상기 다른 타입의 데이터의 업데이트들을 저장한다.Step 1420: Store updates of the different type of data among multiple blocks such that each block essentially stores the same type of data.

단계 1430: 데이터 타입에 대한 마진에 도달한 데이터를 저장한 블록에 응답하여, 수행될 때 다른 블록에 블록의 데이터를 재배치한다. 만약 중단되지 않으면 단계 1420으로 진행한다.Step 1430: In response to the block storing the data that reached the margin for the data type, relocate the data of the block to another block when performed. If not, go to step 1420.

도 35는 상위 랭킹 데이터 타입의 부가적인 우선 처리를 제외하고 도 34와 유사한 선제 재기입들을 위한 다른 방법을 도시하는 흐름도이다.FIG. 35 is a flow diagram illustrating another method for pre-emptive rewrites similar to FIG. 34 except for additional priority processing of the higher ranking data type.

단계 1402: 블록들로 비휘발성 메모리 구성.Step 1402: Configure the nonvolatile memory into blocks.

단계 1404: 다른 타입의 데이터 유지.Step 1404: Retain other types of data.

단계 1406: 다른 타입의 데이터에 랭킹 할당.Step 1406: Assign ranking to other types of data.

단계 1410: 블록이 각각의 타입의 데이터에 대해 가득차기 전에 다수의 빈 메모리 단위들의 마진을 설정하고, 마진은 블록내 데이터가 재배치되기 전에 미리 결정된 기간에 누적된 데이터를 수용하기에 충분하고, 미리 결정된 기간은 블록내 데이터가 재배치되도록 하기 전에 최악의 경우 기간을 양산하는 호스트 기입 패턴으로부터 결정된다.Step 1410: Set a margin of a plurality of free memory units before the block is full for each type of data, the margin sufficient to accommodate data accumulated in a predetermined period before data in the block is relocated, The determined period is determined from a host write pattern that yields a period in the worst case before causing the in-block data to be relocated.

단계 1420: 각각의 블록이 동일한 타입의 데이터를 필수적으로 저장하도록 다수의 블록들 사이에서 상기 다른 타입의 데이터의 업데이트들을 저장한다.Step 1420: Store updates of the different type of data among multiple blocks such that each block essentially stores the same type of data.

단계 1430': 데이터 타입에 대한 마진에 도달하고 임의의 유사한 블록들 사이의 최상위 랭크의 데이터 타입을 가지는 데이터를 저장하는 블록에 응답하여, 수행되도록 될 때 다른 블록에 블록내 데이터를 재배치한다. 만약 중단되지 않으면 단계 1420으로 진행한다.Step 1430 ': Respond to the block storing the data having the highest rank data type between any similar blocks and reaching a margin for the data type, relocating the data in the block to another block as it is to be performed. If not, go to step 1420.

도 36은 도 34 및 35의 흐름도들의 단계들 중 하나에 대한 대안 단계를 도시한다. 단계 1402'는 도 34 및 도 35에 도시된 단계 1402에 대한 대안 단계이다.36 shows an alternative step to one of the steps of the flowcharts of FIGS. 34 and 35. Step 1402 ′ is an alternative to step 1402 shown in FIGS. 34 and 35.

단계 1402': 블록들로 비휘발성 메모리를 구성하고, 각각의 블록은 함께 소거 가능한 메모리 단위들로 분할된다.Step 1402 ': Configure the nonvolatile memory into blocks, each block divided into erasable memory units.

도 37은 도 34 및 35의 흐름도의 단계들 중 하나에 대한 다른 대안 단계를 도시한다. 단계 1401'은 도 34 및 도 35에 도시된 단계 1410에 대한 대안 단계이 다.FIG. 37 shows another alternative step to one of the steps of the flowcharts of FIGS. 34 and 35. Step 1401 ′ is an alternative to step 1410 shown in FIGS. 34 and 35.

단계 1410': 블록이 각각의 타입의 데이터에 대해 가득차기 전에 다수의 빈 메모리 단위들의 마진을 설정하고, 상기 마진은 블록내 데이터가 재배치되도록 하기 전에 미리 결정된 기간내에 누적된 데이터를 수용하기에 충분하고, 미리 결정된 기간은 데이터 블록이 재배치되도록 하기 전에 최악의 경우 기간을 양산하는 호스트 기입 패턴 및 재배치하기 위한 데이터의 양으로부터 결정된다.Step 1410 ′: Set a margin of a number of free memory units before the block is full for each type of data, wherein the margin is sufficient to accommodate the accumulated data within a predetermined period before causing the data in the block to be relocated. The predetermined period of time is then determined from the host write pattern that yields the worst case period and the amount of data to relocate before causing the data block to be relocated.

여기에 참조된 모든 특허들, 특허 출원들, 논문들, 책들, 명세서들, 다른 공보, 서류들 및 사항들은 전체적으로 참조로써 여기에 통합된다. 임의의 통합된 공보, 서류들 또는 사항들 및 본 서류의 텍스트 사이에서 용어의 정의 또는 사용시 임의의 불일치 또는 충돌 범위에 대해, 본 서류의 용어의 정의 또는 사용이 이루어진다.All patents, patent applications, papers, books, specifications, other publications, documents, and references referenced herein are incorporated herein by reference in their entirety. For any inconsistency or scope of conflict in the definition or use of any term between any consolidated publication, documents or matters and the text of this document, the definition or use of the term in this document is made.

비록 본 발명의 다양한 측면들이 특정 실시예들과 관련하여 기술되었지만, 본 발명이 첨부된 청구항들의 전체 범위내에서 보호되는 것이 이해된다.Although various aspects of the invention have been described in connection with specific embodiments, it is understood that the invention is protected within the scope of the appended claims.

상술한 바와 같이, 본 발명은, 일반적으로 비휘발성 반도체 메모리를 제공하고, 구체적으로는 메모리 동작을 제어하기 위하여 사용된 시스템 데이터를 관리하기 위한 개선된 시스템을 가진 메모리 블록 관리 시스템을 구비한 비휘발성 반도체 메모리를 제공하는데 사용된다.As noted above, the present invention generally provides a nonvolatile semiconductor memory, and specifically a nonvolatile with a memory block management system having an improved system for managing system data used to control memory operation. It is used to provide a semiconductor memory.

Claims (60)

메모리로서,As a memory, 블록으로 구성된 비휘발성 메모리;Nonvolatile memory organized in blocks; 상기 메모리에 유지된 하나 이상의 타입의 데이터;One or more types of data held in the memory; 각각의 타입의 데이터에 대한 마진(margin)으로서, 상기 마진은 상기 블록의 데이터가 재배치되도록 허용되기 전에 상기 마진이 미리 결정된 기간에 누적된 데이터를 수용하기에 충분하도록 블록이 가득 차기 전에 다수의 빈 메모리 단위이고, 상기 미리 결정된 기간은 상기 블록의 데이터가 재배치되도록 허용되기 전에 최악의 경우 기간(worst-case interval)을 양산하는 호스트 기입 패턴으로부터 결정되는, 마진;Margin for each type of data, the margin being a number of bins before the block is full enough to accommodate data accumulated in a predetermined period of time before the data in the block is allowed to be relocated. A predetermined unit of memory, the predetermined period of time being determined from a host write pattern that yields a worst-case interval before data in the block is allowed to be relocated; 상기 하나 이상의 타입의 데이터의 업데이트들을 저장하기 위한 다수의 블록으로서, 상기 각각의 블록은 그 안에 동일 타입의 데이터를 필수 저장하는, 블록;A plurality of blocks for storing updates of the one or more types of data, each block mandatory storing therein data of the same type therein; 상기 데이터 타입에 대한 마진에 도달한 데이터를 저장하는 블록에 응답하여 수행되도록 허용될 때 다른 블록에 상기 블록의 데이터를 재배치하기 위한 판독/기입 회로들을Read / write circuits for relocating the data of the block to another block when allowed to be performed in response to a block storing data having reached a margin for the data type. 포함하는, 메모리.Including, memory. 제 1항에 있어서,The method of claim 1, 상기 메모리를 동작시키는 것은 호스트 기입을 포함하고,Operating the memory includes a host write, 상기 미리 결정된 기간은 상기 블록의 데이터가 재배치되도록 허용되기 전에 최대 기간을 양산하는 최악의 경우 호스트 기입 패턴에 따르는, 메모리.The predetermined period of time is in accordance with a worst-case host write pattern that yields a maximum period of time before data in the block is allowed to be relocated. 제 1항에 있어서, 상기 미리 결정된 기간은 재배치하기 위한 최대량의 데이터를 양산하는 블록의 최악의 경우 구성에 따르는, 메모리.2. The memory of claim 1, wherein the predetermined time period is in accordance with the worst case configuration of a block that yields a maximum amount of data to relocate. 제 1항에 있어서, 상기 서로 다른 타입의 데이터는 미리 결정된 랭킹을 갖고,The method of claim 1, wherein the different types of data have a predetermined ranking, 상기 판독/기입 재배치 데이터는 상기 데이터 타입에 대한 마진에 도달하고 임의의 유사한 블록 가운데 최상위 랭크의 데이터 타입을 가진 데이터를 저장하는 블록에 응답하는, 메모리.Wherein the read / write relocation data reaches a margin for the data type and responds to a block storing data having a data type of the highest rank among any similar blocks. 제 4항에 있어서, 상기 최상위 랭크를 갖는 데이터 타입은, 가장 빠르게 상기 블록을 채우는 것으로 예상되는 데이터 타입인, 메모리.5. The memory of claim 4, wherein the data type with the highest rank is the data type expected to fill the block fastest. 제 1항에 있어서, 상기 서로 다른 타입의 데이터는, 상기 메모리가 상기 블록을 관리하기 위하여 사용하는 제어 데이터인, 메모리.The memory of claim 1, wherein the different types of data are control data used by the memory to manage the block. 제 6항에 있어서, 상기 서로 다른 타입의 제어 데이터는 상기 블록의 공급(provision)을 제어하는 제어 데이터를 포함하는, 메모리.7. The memory of claim 6 wherein the different types of control data include control data for controlling the provision of the block. 제 6항에 있어서, 상기 서로 다른 타입의 제어 데이터는 상기 블록에 저장된 데이터의 위치에 관한 제어 데이터를 포함하는, 메모리.7. The memory of claim 6, wherein the different types of control data include control data relating to the location of data stored in the block. 제 6항에 있어서, 상기 블록의 데이터는 상기 메모리의 호스트 명령을 실행하는 동안 재배치되도록 허용되는, 메모리.7. The memory of claim 6, wherein data of the block is allowed to be relocated during execution of a host command of the memory. 제 1항에 있어서, 상기 블록의 데이터가 재배치되도록 허용되기 전 미리 결정된 기간은 상기 블록의 데이터를 재배치하는데 필요한 시간에 따르는, 메모리.The memory of claim 1, wherein a predetermined period of time before data of the block is allowed to be relocated is in accordance with the time required to relocate the data of the block. 제 1항에 있어서, 상기 블록의 데이터가 재배치되도록 허용되기 전 미리 결정된 기간은 호스트 데이터를 수용하기 위해 개방된 블록의 풀(pool)이 구성되는 방법에 따르는, 메모리.The memory of claim 1, wherein a predetermined period of time before data in the block is allowed to be relocated is in accordance with how a pool of open blocks is configured to accommodate host data. 제 1항에 있어서, 상기 블록의 데이터가 재배치되도록 허용되기 전 미리 결정된 기간은 호스트 명령에 의해 설정된 최대 시간에 따르는, 메모리.The memory of claim 1, wherein a predetermined period of time before data in the block is allowed to be relocated is in accordance with a maximum time set by a host command. 제 1항에 있어서, 각 블록의 상기 데이터는 함께 소거 가능한, 메모리.2. The memory of claim 1 wherein the data in each block is erasable together. 제 2항에 있어서, 각 블록의 상기 데이터는 함께 소거 가능한, 메모리.3. The memory of claim 2 wherein the data in each block is erasable together. 제 3항에 있어서, 각 블록의 상기 데이터는 함께 소거 가능한, 메모리.4. The memory of claim 3 wherein the data in each block is erasable together. 제 4항에 있어서, 각 블록의 상기 데이터는 함께 소거 가능한, 메모리.5. The memory of claim 4 wherein the data in each block is erasable together. 제 5항에 있어서, 각 블록의 상기 데이터는 함께 소거 가능한, 메모리.6. The memory of claim 5 wherein the data in each block is erasable together. 제 6항에 있어서, 각 블록의 상기 데이터는 함께 소거 가능한, 메모리.7. The memory of claim 6 wherein the data in each block is erasable together. 제 7항에 있어서, 각 블록의 상기 데이터는 함께 소거 가능한, 메모리.8. The memory of claim 7, wherein the data in each block is erasable together. 제 8항에 있어서, 각 블록의 상기 데이터는 함께 소거 가능한, 메모리.10. The memory of claim 8 wherein the data in each block is erasable together. 제 9항에 있어서, 각 블록의 상기 데이터는 함께 소거 가능한, 메모리.10. The memory of claim 9 wherein the data in each block is erasable together. 제 10항에 있어서, 각 블록의 상기 데이터는 함께 소거 가능한, 메모리.11. The memory of claim 10 wherein the data in each block is erasable together. 제 11항에 있어서, 각 블록의 상기 데이터는 함께 소거 가능한, 메모리.12. The memory of claim 11 wherein the data in each block is erasable together. 제 12항에 있어서, 각 블록의 상기 데이터는 함께 소거 가능한, 메모리.13. The memory of claim 12 wherein the data in each block is erasable together. 제 1항에 있어서, 상기 메모리는 일회 프로그램 가능 메모리인, 메모리.The memory of claim 1, wherein the memory is a one-time programmable memory. 제 1항에 있어서, 상기 메모리는 플래시 EEPROM인, 메모리.The memory of claim 1, wherein the memory is a flash EEPROM. 제 1항에 있어서, 상기 메모리는 탈착 가능한 메모리 카드에 구현되는, 메모리.2. The memory of claim 1 wherein the memory is embodied in a removable memory card. 메모리로서,As a memory, 블록으로 구성된 비휘발성 메모리;Nonvolatile memory organized in blocks; 상기 메모리에 유지된 하나 이상의 타입의 데이터;One or more types of data held in the memory; 각각의 타입의 데이터에 대한 마진으로서, 상기 마진은 상기 블록의 데이터가 재배치되도록 허용되기 전에 상기 마진이 미리 결정된 기간에 누적된 데이터를 수용하기에 충분하도록 블록이 가득차기 전에 다수의 빈 메모리 단위이고, 상기 미리 결정된 기간은 상기 블록의 데이터가 재배치되도록 허용되기 전에 최악의 경우 기간을 양산하는 호스트 기입 패턴으로부터 결정되는, 마진;As a margin for each type of data, the margin is a number of free memory units before the block is full enough to accommodate data accumulated in a predetermined period before the data in the block is allowed to be relocated. The predetermined period of time is determined from a host write pattern that yields a worst case period of time before data in the block is allowed to be relocated; 상기 하나 이상의 타입의 데이터의 업데이트들을 저장하기 위한 다수의 블록으로서, 상기 블록 각각은 그 안에 동일 타입의 데이터를 필수 저장하는, 블록;A plurality of blocks for storing updates of the one or more types of data, each block mandatory storing therein data of the same type therein; 상기 데이터 타입에 대한 마진에 도달한 데이터를 저장한 블록에 응답하여 수행하도록 허용될 때 다른 블록에 상기 블록의 데이터를 재배치하기 위한 수단을Means for relocating the data of the block to another block when allowed to perform in response to the block storing the data that has reached a margin for the data type. 포함하는, 메모리.Including, memory. 제 28항에 있어서, 상기 서로 다른 타입의 데이터는 미리 결정된 랭킹을 갖고,29. The method of claim 28, wherein the different types of data have a predetermined ranking, 상기 데이터를 재배치하기 위한 수단은 상기 데이터 타입에 대한 마진에 도달하고 임의의 유사한 블록 가운데 최상위 랭크의 데이터 타입을 갖는 데이터를 저장하는 블록에 응답하는, 메모리.And means for relocating the data is responsive to a block reaching a margin for the data type and storing data having a data type of the highest rank among any similar blocks. 제 1항 내지 제 29항 중 어느 한 항에 있어서, 상기 메모리는 각각 1 비트의 데이터를 저장하는 메모리 셀들을 갖는, 메모리.30. The memory of any preceding claim, wherein the memory has memory cells that each store one bit of data. 제 1항 내지 제 29항 중 어느 한 항에 있어서, 상기 메모리는 각각 1 비트 이상의 데이터를 저장하는 메모리 셀들을 갖는, 메모리.30. The memory of any one of the preceding claims wherein the memory has memory cells each storing one or more bits of data. 메모리 동작 방법으로서,As a memory operation method, 블록으로 비휘발성 메모리를 구성하는 단계;Organizing the nonvolatile memory into blocks; 하나 이상의 타입의 데이터를 유지하는 단계;Maintaining at least one type of data; 블록이 각 타입의 데이터에 대해 가득차기 전 다수의 빈 메모리 단위들의 마진을 설정하는 단계로서, 상기 마진은 상기 블록의 데이터가 재배치되도록 허용되기 전에 미리 결정된 기간에 누적된 데이터를 수용하기에 실질적으로 충분한, 단 계;Setting a margin of a plurality of free memory units before the block is full for each type of data, the margin being substantially sufficient to accommodate data accumulated in a predetermined period of time before data in the block is allowed to be relocated. Sufficient, step; 각각의 블록이 상기 동일 타입의 데이터를 필수 저장하도록 다수의 블록들 가운데 하나 이상의 타입의 데이터의 업데이트들을 저장하는 단계; 및Storing updates of one or more types of data among a plurality of blocks such that each block necessarily stores the same type of data; And 상기 데이터 타입에 대한 마진에 도달한 데이터를 저장하는 블록에 응답하여, 수행하도록 허용시 다른 블록에 상기 블록의 데이터를 재배치하는 단계를In response to the block storing the data that has reached the margin for the data type, relocating the data of the block to another block when allowed to perform 포함하는, 메모리 동작 방법.Including a memory operating method. 제 32항에 있어서, 상기 메모리를 동작시키는 단계는 호스트 기입을 포함하고,33. The method of claim 32, wherein operating the memory comprises a host write, 상기 미리 결정된 기간은 상기 블록의 데이터가 재배치되도록 허용되기 전에 최대 기간을 양산하는 최악의 경우 호스트 기입 패턴에 따르는, 메모리 동작 방법.And the predetermined period of time is in accordance with a worst-case host write pattern that yields a maximum period of time before data in the block is allowed to be relocated. 제 32항에 있어서, 상기 미리 결정된 기간은 재배치하기 위한 최대량의 데이터를 양산하는 블록의 최악의 경우 구성에 따르는, 메모리 동작 방법.33. The method of claim 32 wherein the predetermined period of time is in accordance with the worst case configuration of a block that yields a maximum amount of data to relocate. 제 32항에 있어서,The method of claim 32, 만약 하나 이상이면 각 타입의 데이터에 랭킹을 할당하는 단계를 더 포함하고,If more than one, further comprising assigning a ranking to each type of data, 상기 데이터를 재배치하는 단계는 상기 데이터 타입에 대한 마진에 도달하고 임의의 서로 유사한 블록들 가운데 최상위 랭크의 데이터 타입을 갖는 데이터를 저 장하는 블록에 응답하는, 메모리 동작 방법.Relocating the data responsive to a block reaching a margin for the data type and storing data having a data type of the highest rank among any similar blocks. 제 35항에 있어서, 상기 최상위 랭크를 갖는 데이터 타입은 가장 빠르게 상기 블록을 채울 것으로 예상되는 데이터 타입인, 메모리 동작 방법.36. The method of claim 35, wherein the data type having the highest rank is the data type expected to fill the block fastest. 제 32항에 있어서, 상기 서로 다른 타입의 데이터는 상기 메모리가 상기 블록을 관리하는데 사용하는 제어 데이터인, 메모리 동작 방법.33. The method of claim 32 wherein the different types of data are control data that the memory uses to manage the block. 제 37항에 있어서, 상기 서로 다른 타입의 제어 데이터는 상기 블록의 공급을 제어하는 제어 데이터를 포함하는, 메모리 동작 방법.38. The method of claim 37, wherein the different types of control data include control data for controlling the supply of the block. 제 37항에 있어서, 상기 서로 다른 타입의 제어 데이터는 상기 블록에 저장된 데이터의 위치에 관한 제어 데이터를 포함하는, 메모리 동작 방법.38. The method of claim 37 wherein the different types of control data include control data relating to the location of data stored in the block. 제 37항에 있어서, 상기 블록의 데이터는 상기 메모리의 호스트 명령을 실행하는 동안 재배치되도록 허용되는, 메모리 동작 방법.38. The method of claim 37, wherein the data in the block is allowed to be relocated while executing a host command of the memory. 제 32항에 있어서, 상기 블록의 데이터가 재배치되도록 허용되기 전에 미리 결정된 기간의 결정은 상기 블록의 데이터를 재배치하는데 필요한 시간을 포함하는, 메모리 동작 방법.33. The method of claim 32 wherein the determination of a predetermined period of time before the data of the block is allowed to be relocated includes the time required to relocate the data of the block. 제 32항에 있어서, 상기 블록의 데이터가 재배치되도록 허용되기 전에 미리 결정된 기간의 결정은 호스트 데이터를 수신하기 위하여 개방된 블록의 풀이 구성되는 방법을 포함하는, 메모리 동작 방법.33. The method of claim 32 wherein the determination of a predetermined period of time before the data of the block is allowed to be relocated comprises how the pool of open blocks is configured to receive host data. 제 32항에 있어서, 상기 블록의 데이터가 재배치되도록 허용되기 전 미리 결정된 기간의 결정은 호스트 명령에 의해 설정된 최대 시간을 포함하는, 메모리 동작 방법.33. The method of claim 32 wherein the determination of a predetermined period of time before data in the block is allowed to be relocated includes a maximum time set by a host command. 제 32항에 있어서, 각 블록의 상기 데이터는 함께 소거 가능한, 메모리 동작 방법.33. The method of claim 32 wherein the data in each block is erasable together. 제 33항에 있어서, 각 블록의 상기 데이터는 함께 소거 가능한, 메모리 동작 방법.34. The method of claim 33 wherein the data in each block is erasable together. 제 34항에 있어서, 각 블록의 상기 데이터는 함께 소거 가능한, 메모리 동작 방법.35. The method of claim 34 wherein the data in each block is erasable together. 제 35항에 있어서, 각 블록의 상기 데이터는 함께 소거 가능한, 메모리 동작 방법.36. The method of claim 35 wherein the data in each block is erasable together. 제 36항에 있어서, 각 블록의 상기 데이터는 함께 소거 가능한, 메모리 동작 방법.37. The method of claim 36 wherein the data in each block is erasable together. 제 37항에 있어서, 각 블록의 상기 데이터는 함께 소거 가능한, 메모리 동작 방법.38. The method of claim 37, wherein the data in each block is erasable together. 제 38항에 있어서, 각 블록의 상기 데이터는 함께 소거 가능한, 메모리 동작 방법.39. The method of claim 38 wherein the data in each block is erasable together. 제 39항에 있어서, 각 블록의 상기 데이터는 함께 소거 가능한, 메모리 동작 방법.40. The method of claim 39 wherein the data in each block is erasable together. 제 40항에 있어서, 각 블록의 상기 데이터는 함께 소거 가능한, 메모리 동작 방법.41. The method of claim 40 wherein the data in each block is erasable together. 제 41항에 있어서, 각 블록의 상기 데이터는 함께 소거 가능한, 메모리 동작 방법.42. The method of claim 41 wherein the data in each block is erasable together. 제 42항에 있어서, 각 블록의 상기 데이터는 함께 소거 가능한, 메모리 동작 방법.43. The method of claim 42 wherein the data in each block is erasable together. 제 43항에 있어서, 각 블록의 상기 데이터는 함께 소거 가능한, 메모리 동작 방법.44. The method of claim 43 wherein the data in each block is erasable together. 제 32항에 있어서, 상기 메모리는 일회 프로그램 가능한 메모리인, 메모리 동작 방법.33. The method of claim 32 wherein the memory is a one-time programmable memory. 제 32항에 있어서, 상기 메모리는 플래시 EEPROM인, 메모리 동작 방법.33. The method of claim 32 wherein the memory is a flash EEPROM. 제 32항에 있어서, 상기 메모리는 탈착 가능한 메모리 카드로 구현되는, 메모리 동작 방법.33. The method of claim 32 wherein the memory is embodied as a removable memory card. 제 32항 내지 제 58항 중 어느 한 항에 있어서, 상기 메모리는 각각 1 비트의 데이터를 저장하는 메모리 셀을 갖는, 메모리 동작 방법.59. The method of any one of claims 32-58, wherein the memory has memory cells that each store one bit of data. 제 32항 내지 제 58항 중 어느 한 항에 있어서, 상기 메모리는 각각 1 비트 이상의 데이터를 저장하는 메모리 셀들을 갖는, 메모리 동작 방법.59. The method of any of claims 32-58, wherein the memory has memory cells that each store one or more bits of data.
KR1020097007576A 2006-10-12 2007-10-08 Non-volatile memory with worst-case control data management and methods therefor KR20090088858A (en)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US11/549,040 2006-10-12
US11/549,035 US20080091901A1 (en) 2006-10-12 2006-10-12 Method for non-volatile memory with worst-case control data management
US11/549,035 2006-10-12
US11/549,040 US20080091871A1 (en) 2006-10-12 2006-10-12 Non-volatile memory with worst-case control data management

Publications (1)

Publication Number Publication Date
KR20090088858A true KR20090088858A (en) 2009-08-20

Family

ID=39052642

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020097007576A KR20090088858A (en) 2006-10-12 2007-10-08 Non-volatile memory with worst-case control data management and methods therefor

Country Status (4)

Country Link
JP (1) JP2010507147A (en)
KR (1) KR20090088858A (en)
TW (1) TW200844999A (en)
WO (1) WO2008045839A1 (en)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20130050591A (en) * 2011-11-08 2013-05-16 삼성전자주식회사 Memory device including nonvolatile memory and controling method of nonvolatile memory

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI413984B (en) * 2008-10-16 2013-11-01 Silicon Motion Inc Flash memory apparatus and updating method
KR101269366B1 (en) * 2009-02-12 2013-05-29 가부시끼가이샤 도시바 Memory system and method of controlling memory system
TWI408689B (en) * 2009-04-14 2013-09-11 Jmicron Technology Corp Method for accessing storage apparatus and related control circuit
TWI404071B (en) * 2009-06-23 2013-08-01 Phison Electronics Corp Controller circuit having functions for identifying error data in flash memory and storage system and method thereof
TWI426528B (en) * 2009-09-30 2014-02-11 Phison Electronics Corp Block management method for a flash memory and flash memory controller and storage system using the same
DE102011107435A1 (en) * 2011-07-15 2013-01-17 Giesecke & Devrient Gmbh Method for detecting erased memory areas
US20240143171A1 (en) * 2022-07-06 2024-05-02 Samsung Electronics Co., Ltd. Systems, methods, and devices for using a reclaim unit based on a reference update in a storage device
US20240012579A1 (en) * 2022-07-06 2024-01-11 Samsung Electronics Co., Ltd. Systems, methods, and apparatus for data placement in a storage device

Family Cites Families (2)

* 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
KR100654429B1 (en) * 2004-03-03 2006-12-06 삼성전자주식회사 Method and apparatus for dynamically controlling the traffic in a wireless station

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20130050591A (en) * 2011-11-08 2013-05-16 삼성전자주식회사 Memory device including nonvolatile memory and controling method of nonvolatile memory

Also Published As

Publication number Publication date
TW200844999A (en) 2008-11-16
WO2008045839A1 (en) 2008-04-17
JP2010507147A (en) 2010-03-04

Similar Documents

Publication Publication Date Title
US7913061B2 (en) Non-volatile memory and method with memory planes alignment
US20080091871A1 (en) Non-volatile memory with worst-case control data management
US7774392B2 (en) Non-volatile memory with management of a pool of update memory blocks based on each block&#39;s activity and data order
US20080091901A1 (en) Method for non-volatile memory with worst-case control data management
US7779056B2 (en) Managing a pool of update memory blocks based on each block&#39;s activity and data order
EP1702338B1 (en) Robust data duplication and improved update method in a multibit non-volatile memory
KR101430097B1 (en) Non-volatile memory and method for class-based update block replacement rules
KR20090088858A (en) Non-volatile memory with worst-case control data management and methods therefor
WO2005066792A2 (en) Non-volatile memory and method with memory planes alignment
EP1704479B1 (en) Non-volatile memory and method with phased program failure handling
JP2007519996A6 (en) Nonvolatile memory and method with phased program fault handling

Legal Events

Date Code Title Description
A201 Request for examination
N231 Notification of change of applicant
E902 Notification of reason for refusal
E601 Decision to refuse application