KR20090079197A - Non-volatile memory and method for class-based update block replacement rules - Google Patents

Non-volatile memory and method for class-based update block replacement rules Download PDF

Info

Publication number
KR20090079197A
KR20090079197A KR1020097007548A KR20097007548A KR20090079197A KR 20090079197 A KR20090079197 A KR 20090079197A KR 1020097007548 A KR1020097007548 A KR 1020097007548A KR 20097007548 A KR20097007548 A KR 20097007548A KR 20090079197 A KR20090079197 A KR 20090079197A
Authority
KR
South Korea
Prior art keywords
block
update
data
blocks
memory
Prior art date
Application number
KR1020097007548A
Other languages
Korean (ko)
Other versions
KR101430097B1 (en
Inventor
제이슨 티. 린
Original Assignee
쌘디스크 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US11/532,467 external-priority patent/US7774392B2/en
Priority claimed from US11/532,456 external-priority patent/US7779056B2/en
Application filed by 쌘디스크 코포레이션 filed Critical 쌘디스크 코포레이션
Publication of KR20090079197A publication Critical patent/KR20090079197A/en
Application granted granted Critical
Publication of KR101430097B1 publication Critical patent/KR101430097B1/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7202Allocation control and policies

Abstract

In a nonvolatile memory with block management system, data are written to blocks and are erasable block by block. At any time a pool of blocks are open for storing data concurrently. The number of blocks in the pool is limited. A replacement system allows new blocks to be introduced into the pool without exceeding the limit. In particular, different classes of blocks in the pool each has its own replacement rule, such as closing a least active block before being replaced. In this way, possible inefficiency and premature closure of blocks in the pool can be avoided.

Description

비휘발성 메모리 및 클래스 기반의 업데이트 블록 대체 규칙을 위한 방법{NON-VOLATILE MEMORY AND METHOD FOR CLASS-BASED UPDATE BLOCK REPLACEMENT RULES}NON-VOLATILE MEMORY AND METHOD FOR CLASS-BASED UPDATE BLOCK REPLACEMENT RULES}

이 발명은, 일반적으로 비휘발성 반도체 메모리에 관한 것이고, 구체적으로는 데이터를 저장하기 위해 동시 개방된 블록 풀(pool)의 대체를 관리하는 개선된 시스템을 갖춘 메모리 블록 관리 시스템을 구비한 것에 관한 것이다.This invention relates generally to nonvolatile semiconductor memory, and more particularly to having a memory block management system with an improved system that manages the replacement of concurrently open block pools for storing data. .

특히 소형 폼 팩터(form factor) 카드로서 패키지된 EEPROM 및 플래시 EEPROM 형태인, 전하를 비휘발성으로 저장할 수 있는 고체 상태 메모리는 최근에 다양한 이동 및 휴대장치들, 특히 정보 기기들 및 소비자 전자제품들에서 선택되는 저장장치가 되었다. 역시 고체상태 메모리인 RAM(랜덤 액세스 메모리)과는 달리, 플래시 메모리는 비휘발성이어서, 이의 저장된 데이터를 파워가 턴 오프 된 후에도 보존한다. 또한, ROM(판독 전용 메모리)과 달리, 플래시 메모리는 디스크 저장 장치와 유사하게 재기입 가능하다. 더 높은 비용에도 불구하고, 플래시 메모리는 대량 저장 애플리케이션들에서 점점 더 사용되고 있다. 하드 드라이브들 및 플로피 디스크들과 같은 회전 자기매체에 기반한 종래의 대량 저장장치는 이동 및 휴대 환경엔 적합하지 않다. 이것은 디스크 드라이브들이 부피가 크고 기계적 고장이 나기 쉽고, 큰 레이턴시 및 고 파워 요구조건들을 갖는 경향이 있기 때문이다. 이들 바람직하지 못한 속성들은 디스크 기반의 저장장치를 대부분의 이동 및 휴대 응용들에서 사용되지 못하게 한다. 한편, 내장되고 탈착 가능한 카드 형태의 플래시 메모리는, 소형 크기, 낮은 전력소모, 고속 및 고 신뢰성 특징들 때문에 이동 및 휴대용 환경에서 이상적으로 적합하다.Non-volatile storage of solid state memory, especially in the form of EEPROM and Flash EEPROM packaged as small form factor cards, has recently been used in a variety of mobile and portable devices, especially information devices and consumer electronics. It is the storage device of choice. Unlike RAM (random access memory), which is also a solid state memory, flash memory is nonvolatile, preserving its stored data even after power is turned off. Also, unlike ROM (Read Only Memory), flash memory is rewritable, similar to disk storage. Despite the higher cost, flash memory is increasingly used in 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 portable environments. This is because disk drives are bulky and prone to mechanical failure, and tend to have large latency and high power requirements. These undesirable attributes prevent disk-based storage from being used in most mobile and portable applications. On the other hand, embedded and removable card-type flash memories are ideally suited for mobile and portable environments because of their small size, low power consumption, high speed and high reliability features.

플래시 EEPROM은 이것이 소거될 수 있고 이들의 메모리 셀들에 기입 또는 "프로그램"된 새로운 데이터를 가질 수 있다는 비휘발성 메모리라는 점에서 EEPROM(전기적 소거 가능 및 프로그램가능한 판독 전용 메모리)과 유사하다. 둘 다는 소스 영역과 드레인 영역 사이에, 반도체 기판 내 채널 영역 상에 위치된, 전계효과 트랜지스터 구조에서, 플로팅(비접속된) 도전성 게이트를 이용한다. 제어 게이트는 플로팅 게이트 상에 제공된다. 트랜지스터의 임계 전압 특성은 플로팅 게이트 상에 보유되는 전하량에 의해 제어된다. 즉, 플로팅 게이트 상에 주어진 레벨의 전하에 대해서, 트랜지스터가 이의 소스영역과 드레인 영역과의 사이에 도통을 허용하게 턴 "온" 되기 전에 제어 게이트에 인가되어야 하는 대응하는 전압(임계)이 있다. 특히, 플래시 EEPROM과 같은 플래시 메모리는 전체 블록들의 메모리 셀들이 동시에 소거될 수 있게 한다.Flash EEPROMs are similar to EEPROMs (electrically erasable and programmable read-only memory) in that they are nonvolatile memory that can be erased and have new data written or "programmed" into their memory cells. Both utilize a floating (unconnected) conductive gate in the field effect transistor structure, located on the channel region in 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 on the floating gate. That is, for a given level of charge 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 its source and drain regions. In particular, flash memory, such as flash EEPROM, allows memory cells of all blocks to be erased simultaneously.

플로우팅 게이트는 한 범위의 전하들을 유지할 수 있고, 따라서 임계 전압 윈도우 내에서 임의의 임계 전압 레벨로 프로그램될 수 있다. 임계 전압 윈도우의 크기는 플로우팅 게이트에 프로그램될 수 있는 전하들의 범위에 대응하게 될 장치의 최소 및 최대 임계 레벨들에 의해 경계가 정해진다. 임계 윈도우는 일반적으로 메모리 장치의 특성들, 동작 조건들 및 이력(history)에 좌우된다. 윈도우 내에서 각각의 구별되는 분해가능한(resolvable) 임계전압 레벨 범위는 원리적으로 셀의 확정된 메모리 상태를 지정하는데 사용될 수 있다. 임계전압이 2개의 서로 구별되는 영역들로 분할될 때, 각 메모리 셀은 일 비트의 데이터를 저장할 수 있을 것이다. 마찬가지로, 임계 전압 윈도우가 2 이상의 서로 구별되는 영역들로 분할될 때, 각 메모리 셀은 1 이상의 비트의 데이터를 저장할 수 있을 것이다.The floating gate can hold a range of charges and can therefore be programmed to any threshold voltage level within the threshold voltage window. The size of the threshold voltage window is bounded by the minimum and maximum threshold levels of the device that will 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 distinct resolvable threshold voltage level range within the window can in principle be used to specify the determined memory state of the cell. When the threshold voltage is divided into two distinct regions, each memory cell may store one bit of data. Likewise, when the threshold voltage window is divided into two or more distinct regions, each memory cell may store one or more bits of data.

메모리 셀로서 작용하는 트랜지스터는 전형적으로 두 메커니즘들 중 한 메커니즘에 의해 "프로그램된" 상태로 프로그램된다. "핫(hot) 전자 주입"에서, 드레인에 인가되는 고전압은 기판 채널 영역을 횡단하는 전자들을 가속시킨다. 동시에, 제어 게이트에 인가되는 고전압은 얇은 게이트 유전체를 통해서 플로우팅 게이트로 핫 전자들을 가져간다. "터널링 주입"에서, 고전압은 기판에 대해서 제어 게이트로 인가된다. 이에 따라, 전자들은 기판으로부터 개재된 플로우팅 게이트로 당겨지게 된다. 메모리 상태를 변경하기 위해서 메모리 셀의 초기에 소거된 전하 저장유닛에 전자들을 주입함으로써 메모리에 기입하는 것을 기술하기 위해 그동안 "프로그램"이라는 용어가 사용되었으나, 이제는 "기입" 또는 "기록"과 같은 더 일반적인 용어들과 상호교환적으로 사용되었다.Transistors that act as memory cells are typically programmed to a "programmed" state by one of two mechanisms. In "hot electron injection", the high voltage applied to the drain accelerates electrons across the substrate channel region. At the same time, the high voltage applied to the control gate brings hot electrons through the thin gate dielectric to the floating gate. In "tunneling injection", a high voltage is applied to the control gate to the substrate. Accordingly, electrons are pulled from the substrate to the interposed floating gate. While the term "program" has been used to describe writing to memory by injecting electrons into an initially erased charge storage unit of a memory cell to change the memory state, now more such as "write" or "write" It is used interchangeably with general terms.

메모리 장치는 다수의 메커니즘들에 의해 소거될 수 있다. EEPROM에 있어서, 메모리 셀은 플로우팅 게이트에서 전자들을 얇은 산화물을 통해서 기판채널 영역으로 터널링되게 하기 위하여(즉, 파울러-노다임 터널링) 고전압을 제어 게이트에 대해서 기판에 인가함으로써 전기적으로 소거될 수 있다. 전형적으로, EEPROM은 한 바이트씩 소거될 수 있다. 플래시 EEPROM에 있어서, 메모리는 한꺼번에 또는 한번에 하나 이상의 블록들이 전기적으로 소거될 수 있는데, 여기서 최소 소거 가능 블록은 하나 이상의 섹터들로 구성될 수 있고 각 섹터는 512 바이트들 또는 그 이상의 데이터를 저장할 수 있다.The memory device may be erased by a number of mechanisms. In an EEPROM, the memory cell can be electrically erased by applying a high voltage to the substrate relative to the control gate in order to allow the electrons in the floating gate to be tunneled through the thin oxide into the substrate channel region (ie, Fowler-Nodymim tunneling). . Typically, the EEPROM can be erased one byte. In a flash EEPROM, the memory may be electrically erased one or more blocks at a time or at a time, where the minimum erasable block may consist of one or more sectors and each sector may store 512 bytes or more data. .

메모리 장치들은 전형적으로 카드상에 설치될 수 있는 하나 이상의 메모리 칩들을 포함한다. 각 메모리 칩은 디코더들 및 소거, 기입 및 판독 회로들과 같은 주변 회로들에 의해 지원되는 메모리 셀들의 어레이를 포함한다. 더 복잡한 메모리 장치들은 지능형이고 더 높은 레벨의 메모리 동작들 및 인터페이싱을 수행하는 제어기가 수반된다.Memory devices typically include one or more memory chips that can be installed on a card. Each memory chip includes an array of memory cells supported by decoders and peripheral circuits such as erase, write and read circuits. More complex memory devices are intelligent and involve a controller that performs 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 등의, "NROM: A Novel Localized Trapping, 2-Bit Nonvolatile Memory Cell" IEEE Electron Device Letters, vol. 21, no. 11, November 2000, pp. 543 ~ 545에 기술 되어 있다. ONO 유전층은 소스 확산부와 드레인 확산부 사이에 채널에 걸쳐 확장한다. 한 데이터 비트를 위한 전하는 드레인에 이웃한 유전층 내에 모이게 되고, 다른 데이터 비트를 위한 전하는 소스에 인접한 유전층 내에 모이게 된다. 예를 들면, 미국 특허 5,768,192 및 6,011,725은 2개의 이산화규소층 사이에 개재된 트랩핑 유전체를 갖는 비휘발성 메모리 셀을 개시한다. 복수-상태 데이터 저장은 유전체 내 공간적으로 분리된 전하 저장 영역들의 2진 상태들을 개별적으로 판독함으로써 구현된다.There are many commercially successful nonvolatile solid state memory devices used in recent years. These memory devices may be flash EEPROM or may employ other types of nonvolatile memory cells. Examples of flash memories and systems and methods of making them are given in US Pat. Nos. 5,070,032, 5,095,344, 5,315,541, 5,343,063, 5,661,053, 5,313,421, 6,222,762. In particular, flash memory devices having a NAND string structure are described in US Pat. Nos. 5,570,315, 5,903,495, 6,046,935. In addition, nonvolatile memory devices are fabricated from memory cells having a dielectric layer for storing charge. Instead of the conductive floating gate described above, a dielectric layer is used. Such memory devices utilizing dielectric storage devices are described in Eitan et al., "NROM: A Novel Localized Trapping, 2-Bit Nonvolatile Memory Cell" IEEE Electron Device Letters, vol. 21, no. 11, November 2000, pp. 543-545. The ONO dielectric layer extends across the channel between the source and drain diffusions. Charge for one data bit is collected in the dielectric layer adjacent to the drain, and charge for another data bit is collected 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 implemented by individually reading the binary states of the spatially separated charge storage regions in the dielectric.

판독 및 프로그램 수행을 개선하기 위해서, 어레이 내에 복수의 전하 저장 소자들 또는 메모리 트랜지스터들이 병렬로 판독 또는 프로그램된다. 이에 따라, 메모리 소자들의 "페이지"가 함께 판독 또는 프로그램된다. 현존의 메모리 아키텍처들에서, 행은 전형적으로 몇 개의 인터리브된 페이지들을 내포하거나 한 페이지를 구성할 수 있다. 페이지의 모든 메모리 소자들은 함께 판독되거나 프로그램될 것이다.In order to improve read and program performance, a plurality of charge storage elements or memory transistors in the array are read or programmed in parallel. Thus, the "pages" of the memory elements are read or programmed together. In existing memory architectures, a row can typically contain several interleaved pages or make up a page. All memory elements of the page will be read or programmed together.

플래시 메모리 시스템들에서, 소거 동작은 판독 및 프로그램 동작들보다 한 자리수 크기만큼 더 길게 걸릴 수도 있다. 이에 따라, 상당한 크기의 소거 블록을 갖는 것이 바람직하다. 그러므로, 소거 시간은 큰 일단의 메모리 셀들에 대해 감소된다.In flash memory systems, an erase operation may take as long as one digit in size than read and program operations. Accordingly, it is desirable to have an erase block of considerable size. Therefore, the erase time is reduced for a large group of memory cells.

플래시 메모리의 특성은 데이터가 소거된 메모리 위치에 기입되어야 하는 것에 기초한다. 호스트로부터 어떤 논리 어드레스의 데이터가 업데이트되어야 할 것이라면, 한 방법은 동일 물리적 메모리 위치에 업데이트 데이터를 재기입하는 것이 다. 즉, 논리 대 물리적 어드레스 맵핑이 변경되지 않는다. 그러나, 이것은 이 물리적 위치를 내포하는 전체 소거 블록이 먼저 소거되고, 이어서 업데이트된 데이터로 재기입되어야 할 것임을 의미할 것이다. 이 업데이트 방법은 전체 소거 블록이 소거되고 재기입될 것을 요구하기 때문에, 특히 업데이트될 데이터만이 소거 블록의 작은 부분만을 점유한다면 비효율적이다. 또한, 이에 따라, 메모리 블록의 소거 리사이클 빈도가 높아지게 되고, 이는 이러한 유형의 메모리 장치의 제한된 내구성 면에서 바람직하지 못하다. The characteristic of the flash memory is based on that data must be written to the erased memory location. If data at any logical address from the host will have to be updated, one way is to rewrite the update data in the same physical memory location. That is, the logical to physical address mapping does not change. However, this would mean that the entire erase block containing this physical location would first have to be erased and then rewritten with updated data. Since this update method requires the entire erase block to be erased and rewritten, it is particularly inefficient if only the data to be updated occupies only a small portion of the erase block. In addition, this also increases the erase recycling frequency of the memory block, which is undesirable in view of the limited durability of this type of memory device.

플래시 메모리 시스템을 관리하는데 있어 또 다른 문제는 시스템 제어 및 디렉토리 데이터를 사용해야 한다는 점이다. 데이터는 다양한 메모리 동작들의 과정 동안에 생성되고 액세스된다. 이에 따라, 이의 효율적인 취급 및 준비된 액세스는 수행에 직접적으로 영향을 줄 것이다. 플래시 메모리는 저장하기 위한 것이고 비휘발성이기 때문에, 플래시 메모리에 이러한 유형의 데이터를 유지하는 것이 바람직할 것이다. 그러나, 제어기와 플래시 메모리 간에 파일 관리 시스템이 개입함으로써, 데이터는 직접적으로 액세스될 수 없다. 또한, 시스템 제어 및 디렉토리 데이터는 활동적이고 분산(fragment)되는 경향이 있으며, 이는 큰 크기의 블록 소거를 갖는 시스템에서 저장에 도움이 되지 않는다. 통상적으로, 이러한 유형의 데이터는 제어기 RAM에 구축되어, 제어기에 의해 직접 액세스할 수 있게 한다. 메모리 장치가 기동된 후에, 초기화 프로세스는 제어기 RAM에 두어질 필요한 시스템 제어 및 디렉토리 정보를 컴파일하기 위해서 플래시 메모리가 스캔될 수 있게 한다. 이 프로세스는 시간이 걸리며 제어기 RAM 용량을 요구하며, 더욱 증가하는 플래시 메모 리 용량에 따라 더욱더 그러하다.Another problem with managing flash memory systems is the need to use system control and directory data. Data is generated and accessed during the course of various memory operations. As such, its efficient handling and prepared access will directly impact performance. Since flash memory is for storage and non-volatile, it would be desirable to keep this type of data in flash memory. However, as the file management system intervenes between the controller and the flash memory, the data cannot be accessed directly. In addition, system control and directory data tend to be active and fragmented, which is not helpful for storage in systems with large block erases. Typically, this type of data is built into the controller RAM, making it directly accessible by the controller. After the memory device is started up, the initialization process allows the flash memory to be scanned to compile the necessary system control and directory information to be placed in the controller RAM. This process is time consuming and requires controller RAM capacity, even more so with the increasing flash memory capacity.

미국 특허 6,567,307는 스크래치 패드로서 작용하는 복수의 소거 블록들에 업데이트 데이터를 기록하고 종국에는 다양한 블록들 중에 유효 섹터들을 합체하고, 이들을 논리적으로 순차적인 순서로 재배열한 후에 섹터들을 재기입하는 것을 포함하는, 큰 소거 블록간에 섹터 업데이트들을 처리하는 방법을 개시한다. 이러한 방법으로 블록은 모든 최소한의 업데이트로 소거되고 재기입되지 않을 필요가 있다.U. S. Patent 6,567, 307 includes writing update data in a plurality of erased blocks that act as scratch pads and eventually coalescing valid sectors among the various blocks and rewriting the sectors after rearranging them in a logically sequential order. A method of processing sector updates between large erase blocks is disclosed. In this way, blocks need not be erased and rewritten with every minimal update.

WO 03/027828 및 WO 00/49488 모두는 논리 섹터 어드레스들을 구역들로 분할하는 것을 포함하는 큰 소거 블록 중에 업데이트들을 처리하는 메모리 시스템을 개시한다. 사용자 데이터를 위한 다른 구역과는 별개로 활동적 시스템 제어 데이터를 위해 작은 구역의 논리 어드레스 범위가 유보된다. 이렇게 하여, 자신의 구역 내 시스템 제어 데이터의 조작은 다른 구역 내 연관된 사용자 데이터와 상호작용하지 않을 것이다. 업데이트들은 논리 섹터 레벨에 있고 기입 포인터는 기입될 블록 내 대응하는 물리 섹터들을 가리킨다. 맵핑 정보는 RAM에 버퍼되고 결국에는 주메모리 내 섹터 할당 테이블에 저장된다. 논리 섹터의 최신 버전은 현존 블록들 중에 모든 이전 버전들을 폐용시킬 것이며, 이것은 부분적으로 폐용이 된다. 가비지 수거는 수락가능한 수까지 부분적으로 폐용된 블록들을 유지하기 위해 수행된다.Both WO 03/027828 and WO 00/49488 disclose a memory system that handles updates during a large erase block that includes dividing logical sector addresses into zones. Apart from other zones for user data, a small zone logical address range is reserved for active system control data. In this way, manipulation of system control data in its own zone will not interact with associated user data in other zones. The updates are 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 eventually stored in the main memory's sector allocation table. The latest version of the logical sector will discard all previous versions of existing blocks, which are partially obsolete. Garbage collection is performed to keep partially obsolete blocks up to an acceptable number.

종래 기술의 시스템들은 많은 블록들에 걸쳐 업데이트 데이터가 분포되게 하는 경향이 있거나 업데이트 데이터는 많은 현존의 블록들을 부분적으로 폐용이 되게 할 수도 있다. 결과는 흔히 부분적으로 폐용이 된 블록들에 대해 필요한 큰 양 의 가비지 수거이며, 이것은 비효율적이며 메모리의 조기 노화를 야기한다. 또한, 비순차적 업데이트와 비교했을 때 순차적 업데이트를 취급하는 계통적이고 효율적인 방법은 없다.Prior art systems tend to cause the update data to be distributed over many blocks or the update data may partially obsolete many existing blocks. The result is often a large amount of garbage collection required for partially obsolete blocks, which is inefficient and leads to premature aging of memory. In addition, there is no systematic and efficient way of dealing with sequential updates compared to nonsequential updates.

그러므로, 고용량 및 고성능 비휘발성 메모리에 대한 일반적인 필요성이 있다. 특히, 위에 언급된 문제가 없는 큰 블록들로 메모리 동작들을 수행할 수 있는 고용량 비휘발성 메모리가 있을 필요성이 있다.Therefore, there is a general need for high capacity and high performance nonvolatile memory. In particular, there is a need for a high capacity non-volatile memory capable of performing memory operations in large blocks without the above mentioned problems.

발명의 요약Summary of the Invention

비휘발성 메모리 시스템은 물리적 메모리 위치들의 물리적 그룹들로 구성된다. 각 물리적 그룹(메타블록)은 단위로서 소거될 수 있고, 논리 그룹의 데이터를 저장하기 위해 사용될 수 있다. 메모리 관리 시스템은 논리 그룹의 업데이트 데이트를 기록하는데 전용되는 메타블록을 할당함으로써 논리 그룹의 데이터가 업데이트될 수 있게 한다. 업데이트 메타블록은 수신된 순서로 업데이트 데이터를 기록하며 기록이 원래 저장된(순차적) 바와 맞는 논리적 순서로 되어 있는지, 그렇지 않은지(무순서)에 제약은 없다. 결국, 업데이트 메타블록은 추가 기록에 대해 폐쇄된다. 몇 가지 프로세스들 중 하나가 일어날 것이지만, 종국에는 원 메타블록을 대체하는 정확한 순서로 완전히 채워진 메타블록으로 끝나게 될 것이다. 무순서 경우에, 디렉토리 데이터는 빈번한 업데이트들에 도움이 되는 방식으로 비휘발성 메모리에 유지된다. 시스템은 복수의 논리 그룹들이 동시에 업데이트되는 것을 지원한다.A nonvolatile memory system consists of physical groups of physical memory locations. Each physical group (metablock) can be erased as a unit and used to store data of the logical group. The memory management system allows the data of the logical group to be updated by allocating a metablock dedicated to recording the update data of the logical group. The update metablock records the update data in the order in which it was received and there is no restriction as to whether the record is in logical order as it was originally stored (sequential) or not (out of order). As a result, the update metablock is closed for further records. One of several processes will take place, but eventually it will end with a fully filled metablock in the exact order that it replaces the original metablock. In the random case, directory data is kept in nonvolatile memory in a manner that aids in frequent updates. The system supports multiple logical groups being updated at the same time.

발명의 한 특징은 논리-그룹별로 데이터가 업데이트될 수 있게 한다. 이에 따라, 논리 그룹이 업데이트되고 있을 때, 논리 단위들(및 업데이트들이 폐용된 소수의 메모리 유닛들)의 분포는 범위가 제한된다. 이것은 논리 그룹이 통상적으로 물리적 블록 내에 내포될 때 특히 그러하다.One feature of the invention allows data to be updated on a logical-group basis. Thus, when a logical group is being updated, the distribution of logical units (and a few memory units in which updates are obsolete) is limited in scope. This is especially true when logical groups are typically nested within physical blocks.

논리 그룹의 업데이트 동안에, 업데이트된 논리 단위들을 버퍼하기 위해서 전형적으로 한 또는 2개의 블록들이 할당될 필요가 있다. 이에 따라, 가비지 수거는 비교적 몇 개의 블록들에 대해 수행될 필요가 있을 뿐이다. 무순서 블록의 가비지 수거는 합체 또는 압축(compaction)에 의해 수행될 수도 있다.During the update of a logical group, typically one or two blocks need to be allocated to buffer the updated logical units. Accordingly, garbage collection only needs to be performed for a relatively few blocks. Garbage collection of random blocks may be performed by coalescence or compaction.

업데이트 프로세스의 효율적 사용은 어떠한 추가의 블록도 순차적인 것들과 비교했을 때 무순서(비순차적) 업데이트들에 대해 할당될 필요가 없도록 업데이트 블록들의 일반적인 처리에서 더욱 명백해진다. 모든 업데이트 블록들은 순차적 업데이트 블록으로서 할당되며, 어떠한 업데이트 블록이든 무순서 업데이트 블록으로 변경될 수 있다. 사실, 순차에서 무순서로 업데이트 블록의 변경은 자유재량이다.The efficient use of the update process becomes more apparent in the general processing of update blocks such that no additional block needs to be allocated for random (non-sequential) updates as compared to sequential ones. All update blocks are allocated as sequential update blocks, and any update blocks can be changed to random update blocks. In fact, changing the update block from sequential to random is at its discretion.

시스템 자원의 효율적 사용은 복수의 논리 그룹들이 동시에 업데이트될 수 있게 한다. 이것은 효율을 더 증가시키며 오버헤드들을 감소시킨다.Efficient use of system resources allows multiple logical groups to be updated at the same time. This further increases efficiency and reduces overheads.

발명의 일면에 따라서, 블록 관리 시스템을 갖춘 비휘발성 메모리에서, 개선된 블록 대체 기법은 개선된 블록 대체 방법은 데이터를 기록하기 위해 동시 개방되는 제 1 소정 최대 개수의 업데이트 블록까지 지원하는 시스템을 위해 구현된다. 업데이트 블록들은 데이터가 논리적으로 순차적 순서로 기록되지만 데이터가 논리적으로 순차적인 순서로 데이터가 기록되지 않는 무순서 업데이트 블록들이 되어도 좋을 제 2 소정 최대 개수까지 기록되는, 주로 순차적인 업데이트 블록들이다. 업데이트 블록의 새로운 할당이 업데이트 블록 풀을 제 1 또는 제 2 소정 최대 개수를 초과하게 할 때마다, 풀 내 현존의 업데이트 블록들 중 하나는 제한에 따르기 위해서 폐쇄되고 제거될 것이다. 업데이트 블록을 폐쇄하기에 앞서, 이의 데이터는 순차적 블록에 합체된다. 개선된 방법은 순차 업데이트가 무순서 블록 합체들의 초과된 수를 야기할 수 있는 상황을 피하게 하는 것이다. 이것은 순차 업데이트 블록들 및 무순서 업데이트 블록들을 각각의 대체 또는 합체 풀들로 분리함으로써 달성된다. 특히, 순차 업데이트가 새로운 업데이트 블록의 할당을 제 1 소정 최대 개수를 초과하게 할 때, 풀의 최근 최소 사용된 순차적 업데이트 블록에 우선적으로 빈 공간을 만드는 것이다.According to one aspect of the invention, in a nonvolatile memory with a block management system, an improved block replacement scheme is provided for systems that support up to a first predetermined maximum number of update blocks that are simultaneously open for writing data. Is implemented. The update blocks are mainly sequential update blocks, in which data is written in a logically sequential order, but up to a second predetermined maximum number, which may be random update blocks in which the data is not written in a logically sequential order. Each time a new allocation of update blocks causes the update block pool to exceed the first or second predetermined maximum number, one of the existing update blocks in the pool will be closed and removed to comply with the restriction. Prior to closing the update block, its data is merged into the sequential block. An improved approach is to avoid situations where sequential updates can cause an excessive number of random block coalescings. This is accomplished by separating the sequential update blocks and the random update blocks into respective replacement or coalescing pools. In particular, when the sequential update causes the allocation of new update blocks to exceed the first predetermined maximum number, free space is preferentially made in the latest least used sequential update block of the pool.

현 시스템에서, 일반적으로는 2가지 유형들의 데이터로서 사용자 데이터 및 제어 데이터가 있다. 사용자 데이터는 호스트에서 메모리 시스템으로 전형적으로 논리적 순차적 순서로 보내진다. 호스트로부터 순차적 기입 동작들을 최적으로 취급하기 위해 순차적 업데이트 블록들이 할당된다. 또한, 사용자 데이터는 특히 논리 데이터에 후속된 업데이트들이 있을 때 논리적으로 비순차적 순서로 있을 수도 있다. 무순서 업데이트 블록들은 비순차적 순서로 데이터를 최적으로 취급하기 위해 생성된다. 무순서 또는 비순차적 데이터의 또 다른 소스는 사용자 데이터를 저장하는 과정에서 발생되는 파일 및 디렉토리 정보와 같은 파일 시스템 또는 메모리 시스템에 의해 유지되는 제어 데이터이다.In current systems, there are generally two types of data: user data and control data. User data is typically sent from the host to the memory system in logical sequential order. Sequential update blocks are allocated to optimally handle sequential write operations from the host. In addition, the user data may be in a logically out of order, especially when there are updates following the logical data. Random update blocks are generated to optimally handle data in an out of order order. Another source of random or out of order data is control data maintained by the file system or memory system, such as file and directory information generated in the course of storing user data.

동시에 개방된 업데이트 블록들의 최대수까지 지원하는 실제 시스템 제한에 준수하는 이전의 방법은 순차적이든 무순서이든 관계없이, 풀에 최근 최소에 사용된 업데이트 블록을 폐쇄하는 것이었다.The previous method to comply with the actual system limit, which supports up to the maximum number of open update blocks simultaneously, was to close the most recently used update blocks in the pool, whether in sequential or random order.

본 방법은 특히 순차 기입 동작 동안 블록의 풀 중에 업데이트 블록이 새로운 할당을 위해 빈 공간을 만들기 위해 폐쇄될 필요가 있다면, 풀 내 최근 최소 사용된 순차 업데이트 블록이 폐쇄되는 이전 방법보다 개선된다. 이것은 순차 기입 동작들 및 랜덤 기입 동작들을 취급하기 위해 다양한 업데이트 블록들이 효과적으로 사용될 수 있게 한다. 특히, 이것은 호스트에 의해 큰 순차 기입 동작이 FAT 및 디렉토리 정보를 내포하는 무순서 업데이트 블록의 조기 폐쇄를 강제할 수 있는 비효율적인 상황을 회피한다. 또 다른 무순서 블록은 일단 큰 순차 기입 동작이 행해지면 다시 업데이트될 FAT 및 디렉토리 정보를 저장하기 위해 사실상 거의 즉시 생성될 것이다. 개선된 대체 정책의 생성은 후속되는 FAT 및 디렉토리 업데이트를 관리하기 위해 잠재적으로 개방된 순차 또는 개방된 무순서 블록의 순차적 기입 및 합체 동안 무순서 블록을 합체할 때 부가되는 오버헤드를 방지하기 위해 대체 및 합체 풀의 분리를 요구한다.The method is improved over the previous method in which the latest least used sequential update block in the pool is closed, especially if the update block needs to be closed in the pool of blocks during sequential write operations to make free space for new allocation. This allows various update blocks to be effectively used to handle sequential write operations and random write operations. In particular, this avoids the inefficient situation by the host where a large sequential write operation may force premature closure of random update blocks containing FAT and directory information. Another random block will be created almost immediately to store FAT and directory information that will be updated again once a large sequential write operation is performed. Creation of an improved replacement policy is used to avoid the overhead added when merging random blocks during sequential writing and coalescing of potentially open sequential or open random blocks to manage subsequent FAT and directory updates. And separation of coalescing pools.

본 방법의 일반화는 이를테면 업데이트 블록이 순차적인 데이터를 저장하고 있는지 아니면 비순차적인 데이터를 저장하고 있는지, 또는 어떤 기정의된 유형의 시스템 데이터를 저장하고 있는지와 같이, 한 세트의 속성들에 기초하여 업데이트 블록들을 유별하는 것이다. 제한된 수의 업데이트 블록들의 풀을 구현함에 있어, 업데이트 블록들의 각 클래스는 이 클래스를 위해 지원되는 최대수가 초과하게 될 때 대체를 위해 그 자신의 규칙을 가질 것이다.The generalization of the method is based on a set of attributes, such as whether the update block is storing sequential data or nonsequential data, or what predefined type of system data. To classify update blocks. In implementing a limited number of update blocks pools, each class of update blocks will have its own rules for replacement when the maximum number supported for this class is exceeded.

예를 들면, 순차적 업데이트 블록 및 비순차적 업데이트 블록들은 2개의 서로 다른 클래스들이다. 이들 클래스들 각각에 대한 대체 규칙들은 동일하다. 즉 최소 활동적인 것을 새로운 것으로 대체한다. 이에 따라, 순차 업데이트 블록의 풀(pool)이 초과하게 될 때, 풀 내 최소 활동적인 것은 폐쇄되고 새로운 것이 풀에 넣어지기 전에 제거될 것이다. 비순차적 업데이트 블록들의 풀에 대해서도 유사하다.For example, sequential update blocks and non-sequential update blocks are two different classes. The substitution rules for each of these classes are the same. That is, replace the least active with a new one. Thus, when the pool of sequential update blocks is exceeded, the least active in the pool will be closed and removed before new ones are put into the pool. The same is true for a pool of out of order update blocks.

일반적으로 각 클래스는 다른 클래스들과는 무관하게 그 자신의 대체 규칙을 갖는다. 대체 규칙들의 예들은 대응하는 클래스들에 따라, 최근 최소 액세스된, 가장 최근 액세스된, 최소의 빈번하게 액세스된, 가장 빈번하게 액세스된, 등을 대체하는 것이다.In general, each class has its own replacement rules, independent of other classes. Examples of replacement rules are to replace the latest least accessed, most recently accessed, least frequently accessed, most frequently accessed, etc., according to corresponding classes.

본 발명의 추가의 특징들 및 이점들은 이의 바람직한 실시예의 다음의 설명으로부터 이해될 것이며, 이 설명은 첨부한 도면들에 관련하여 취해질 것이다.Further features and advantages of the invention will be understood from the following description of its preferred embodiments, which description will be taken in conjunction with the accompanying drawings.

도 1은 본 발명을 구현하기에 적합한 메모리 시스템의 주 하드웨어 성분들을 개략적으로 도시한 것이다.Figure 1 schematically shows the main hardware components of a memory system suitable for implementing the present invention.

도 2는 발명의 바람직한 실시예에 따라, 물리적 그룹들의 섹터들(또는 메타블록들)로 조직되고 제어기의 메모리 관리자에 의해 관리되는 메모리를 도시한 것이다.2 illustrates a memory organized into sectors (or metablocks) of physical groups and managed by a memory manager of a controller, in accordance with a preferred embodiment of the 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 metablocks.

도 4는 물리적 메모리에 구조들에 메타블록의 정렬을 도시한 것이다.4 illustrates the alignment of metablocks to structures in physical memory.

도 5a는 서로 다른 플레인들의 최소 소거 단위들을 링크하여 구성되는 메타블록들을 도시한 것이다.5A illustrates metablocks formed by linking minimum erasure units of different planes.

도 5b는 메타블록에 링크하기 위해 각각의 플레인으로부터 한 최소 소거 단위(MEU)가 선택되는 일 실시예를 도시한 것이다.5B illustrates one embodiment where one minimum erase unit (MEU) is selected from each plane to link to the metablock.

도 5c는 메타블록에 링크하기 위해 각각의 플레인으로부터 하나보다 더 많은 MEU가 선택되는 또 다른 실시예를 도시한 것이다.5C illustrates another embodiment where more than one MEU is selected from each plane to link to the metablock.

도 6은 제어기 및 플래시 메모리에 구현되는 메타블록 관리 시스템의 개략적 블록도이다.6 is a schematic block diagram of a metablock management system implemented in a controller and a flash memory.

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

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

도 8은 논리 어드레스들에서 불연속을 갖는 2개의 개별적 호스트 기입 동작들의 결과로서 순차 업데이트 블록에 순차적 순서로 기입되는 논리 그룹에 섹터들의 예를 도시한 것이다.8 illustrates an example of sectors in a logical group that are sequentially written to a sequential update block as a result of two separate host write operations with discontinuities at logical addresses.

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

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

도 11a는 도 10에 도시된 무순서 업데이트 블록을 폐쇄하는 합체 프로세스를 보다 상세히 도시한 흐름도이다.11A is a flow diagram illustrating in more detail the coalescing process of closing the random update block shown in FIG. 10.

도 11b는 도 10에 도시된 무순서 업데이트 블록을 폐쇄하기 위한 압축 프로세스를 보다 상세히 도시한 흐름도이다.FIG. 11B is a flow chart illustrating in more detail the compression 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 them under various operations.

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

도 13a는 메타블록의 모든 가능한 상태들, 및 여러 가지 동작들 하에서 이들 간에 가능한 전이들을 도시한 것이다. 메타블록은 논리 그룹에 대응하는 물리 그룹이다.13A shows all possible states of a metablock, and possible transitions between them under various operations. A metablock is a physical group corresponding to a logical group.

도 13b는 메타블록의 가능한 상태들을 리스트한 테이블이다.13B is a table listing the possible states of a metablock.

도 14(a) 내지 도 14(j)는 논리 그룹의 상태에 그리고 물리 메타블록에 여러 가지 동작들의 영향을 보인 상태도들이다.14 (a) to 14 (j) are state diagrams showing the effects of various operations on the state of a logical group and the physical metablock.

도 15는 개방된 및 폐쇄된 업데이트 블록들 그리고 할당을 위해 소거된 블록들을 추적하기 위한 할당 블록 리스트(ABL)의 구조의 바람직한 실시예를 도시한 것이다.Figure 15 shows a preferred embodiment of the structure of an allocation block list (ABL) for tracking open and closed update blocks and blocks erased for allocation.

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

도 16b는 무순서 블록 색인(CBI) 섹터들이 전용의 메타블록에 기록되는 예를 도시한 것이다.16B illustrates an example where random block index (CBI) sectors are written to a dedicated metablock.

도 16c는 무순서 업데이트는 되는 주어진 논리 그룹의 논리 섹터의 데이터에의 액세스를 도시한 흐름도이다.16C is a flow diagram illustrating access to data of logical sectors of a given logical group being randomly updated.

도 16d는 논리 그룹이 하위 그룹들로 분할된 대안적 실시예에 따라, 무순서 업데이트되는 주어진 논리 그룹의 논리 섹터의 데이터에의 액세스를 도시한 흐름도이다.FIG. 16D is a flow diagram illustrating access to data of a logical sector of a given logical group being randomly updated, according to an alternative embodiment where the logical group is divided into subgroups.

도 16e는 각각의 논리 그룹이 복수의 하위 그룹들로 분할되는 실시예에 있어서 무순서 블록 색인(CBI) 섹터들 및 이들의 기능들의 예들을 도시한 것이다.16E illustrates examples of random block index (CBI) sectors and their functions in an embodiment where each logical group is divided into a plurality of subgroups.

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

도 17b는 그룹 어드레스 테이블(GAT) 섹터들이 GAT 블록에 기록되는 예를 도시한 것이다.17B illustrates an example in which group address table (GAT) sectors are 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 a process of logical to physical address translation.

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

도 21은 블록 관리 시스템에 대한 업데이트 블록들의 수에 2가지 규정된 제한들을 개략적으로 도시한 것이다.21 schematically illustrates two defined limits on the number of update blocks for a block management system.

도 22는 다양한 메모리 장치들에 대해 최적인 2개의 제한들의 조합들의 전형적인 예들을 도시한 것이다.FIG. 22 shows typical examples of combinations of two limitations that are optimal for various memory devices.

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

도 23b는 이전 방법에 따라, 새로운 업데이트 블록을 위해 빈 공간을 만들기 위해서 최소 활동적인 업데이트 블록의 폐쇄를 개략적으로 도시한 것이다.Figure 23b schematically illustrates the closing of the least active update block to make free space for a new update block, according to the previous method.

도 23c는 폐쇄된 업데이트 블록이 빈 공간을 만들기 위해 제거된 후에 새롭게 할당된 업데이트 블록을 풀에 넣는 것을 개략적으로 도시한 것이다.FIG. 23C schematically illustrates putting a newly allocated update block into a pool after a closed update block has been removed to make free space.

도 24a는 도 22에 기술된 바와 같이 "5-2"인 업데이트 풀을 개략적으로 도시한 것이다.FIG. 24A schematically illustrates an update pool of "5-2" as described in FIG.

도 24b는 이전의 방법에 따라, 새로운 업데이트 블록을 위한 빈 공간을 만들기 위해서 최소의 활동적인 업데이트 블록의 폐쇄를 개략적으로 도시한 것이다.24B schematically illustrates the closure of a minimum active update block to make free space for a new update block, according to the previous method.

도 24c는 폐쇄된 업데이트 블록이 빈 공간을 만들기 위해 제거된 후에 풀에 새로운 할당된 업데이트 블록을 넣는 것을 개략적으로 도시한 것이다.24C schematically illustrates putting a new allocated update block into a pool after a closed update block has been removed to make free space.

도 25a는 도 10, 단계 410에, 그리고 새로운 할당이 소정의 제한을 초과하게 될 때는 언제나 최근 최소 액세스된 업데이트 블록이 폐쇄되는 도 23b 및 도 24b에서 이전에 도시된 방법을 도시한 것이다.FIG. 25A illustrates the method previously shown in FIG. 10, step 410, and in FIGS. 23B and 24B in which the most recently accessed update block is closed whenever a new assignment exceeds a predetermined limit.

도 25b는 무순서 업데이트 블록 개수가 소정의 제한을 초과할 때마다, 최근 최소 액세스된 무순서(비순차적) 업데이트 블록이 폐쇄되는 도 10, 단계 370에 이전에 도시된 방법을 도시한 것이다.FIG. 25B illustrates the method previously shown in FIG. 10, step 370 where the most recently accessed randomized (non-sequential) update block is closed whenever the number of random update blocks exceeds a predetermined limit.

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

도 26b는 본 개선된 방법에 따라, 새로운 업데이트 블록을 위한 빈 공간을 만들기 위해서 업데이트 블록의 풀 중 하나의 폐쇄를 개략적으로 도시한 것이다. FIG. 26B schematically illustrates the closure of one of the pools of update blocks to make free space for a new update block, according to the present improved method.

도 26c는 폐쇄된 업데이트 블록이 빈 공간을 만들기 위해 제거된 후에 새롭게 할당된 업데이트 블록을 풀에 넣는 것을 개략적으로 도시한 것이다.FIG. 26C schematically illustrates putting a newly allocated update block into a pool after a closed update block has been removed to make free space.

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

도 27b는 본 개선된 방법에 따라, 새로운 업데이트 블록을 위한 빈 공간을 만들기 위해서 업데이트 블록의 풀 중 하나의 폐쇄를 개략적으로 도시한 것이다.27B schematically illustrates the closure of one of the pools of update blocks to make free space for a new update block, in accordance with the present improved method.

도 27c는 빈 공간을 만들기 위해서 또 다른 무순서 업데이트 블록이 폐쇄되어 제거된 후에 새로운 무순서 업데이트 블록을 풀에 넣는 것을 개략적으로 도시한 것이다.FIG. 27C schematically illustrates the insertion of a new random update block into a pool after another random update block is closed and removed to make room.

도 28은 제 1 실시예에 따라, 순차 업데이트 동안에, 제한된 한 세트의 업데이트 블록들을 관리하는 본 개선된 방법을 도시한 흐름도이다.28 is a flowchart illustrating the present improved method of managing a limited set of update blocks during sequential update, according to the first embodiment.

도 29는 제 2 실시예에 따라, 2개의 소정 제한을 갖는 제한된 한 세트의 업데이트 블록들을 관리하는 본 개선된 방법을 도시한 흐름도이다.29 is a flowchart illustrating the present improved method of managing a limited set of update blocks having two predetermined limits, according to the second embodiment.

도 30은 클래스 기반의 대체 규칙들을 갖는 제한된 한 세트의 업데이트 블록들을 관리하는 본 개선된 방법을 도시한 흐름도이다.30 is a flow diagram illustrating the present improved method of managing a limited set of update blocks with class based replacement rules.

도 1 내지 도 20은 본 발명의 다양한 면들이 구현될 수 있는 블록 관리를 갖춘 메모리 시스템들의 예들을 도시한 것이다. 유사한 메모리 시스템들이 Gorobets 등의 "Non-Volatile Memory and Method with Control Data Management" 명칭의 미국특허출원 공개번호 US-2005-0144365-A1에 개시되어 있다.1-20 illustrate examples of memory systems with block management in which various aspects of the invention may be implemented. Similar memory systems are disclosed in US Patent Application Publication No. US-2005-0144365-A1 entitled " Non-Volatile Memory and Method with Control Data Management " 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)에 저장된 펌웨어는 프로세서(120)가 제어기(100)의 기능들을 구현하기 위한 코드들을 제공한다. 오류 정정 코드들은 프로세서(120) 또는 선택적인 코프로세서(121)에 의해 처리될 수 있다. 대안적 실시예에서, 제어기(100)는 상태 머신(도시되지 않음)에 의해 구현된다. 또 다른 실시예에서, 제어기(100)는 호스트 내에 구현된다.Figure 1 schematically shows the main hardware components of a memory system suitable for implementing the present invention. Memory system 20 typically operates with host 10 via a host interface. The memory system is typically in the form of a memory card or an embedded memory system. The memory system 20 includes a memory 200 in which operations are controlled by the controller 100. The memory 200 is composed of one or more arrays of nonvolatile memory cells distributed over one or more integrated circuit chips. The controller 100 includes an interface 110, a processor 120, an optional coprocessor 121, a read only memory (ROM) 122, a random access memory (RAM) 130, and an optionally programmable nonvolatile memory. 124. The interface 110 has one component that interfaces the controller to the host and another component that interfaces with the memory 200. Firmware stored in nonvolatile ROM 122 and / or optional nonvolatile memory 124 provides code for processor 120 to implement the functions of controller 100. Error correction codes may be processed by processor 120 or optional coprocessor 121. In alternative embodiments, controller 100 is implemented by a state machine (not shown). In another embodiment, the controller 100 is implemented in a host.

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

도 2는 발명의 바람직한 실시예에 따라, 물리적 그룹들의 섹터들(또는 메타블록들)로 조직되고 제어기의 메모리 관리자에 의해 관리되는 메모리를 도시한 것 이다. 메모리(200)는 메타블록들로 조직되는데, 각 메타블록은 함께 소거될 수 있는 일 그룹의 물리적 섹터들(S0,...,SN-1)이다.2 illustrates a memory organized into sectors (or metablocks) of physical groups and managed by a memory manager of a controller, in accordance with a preferred embodiment of the invention. Memory 200 is organized into metablocks, each metablock being a group of physical sectors S 0 ,..., S N-1 that can be erased together.

호스트(10)는 파일 시스템 또는 운영 시스템 하에 애플리케이션을 실행할 때 메모리(200)에 액세스한다. 전형적으로, 호스트 시스템은 예를 들면 각 섹터가 512 바이트의 데이터를 포함할 수 있는 논리 섹터들의 단위들로 데이터를 어드레스한다. 또한, 호스트가 한 단위의 논리 클러스터들로 판독하거나 메모리 시스템에 기입하는 것이 보통이며, 각 클러스터는 하나 이상의 논리 섹터들로 구성된다. 일부 호스트 시스템들에서, 호스트에서 저 레벨의 메모리 관리를 수행하기 위해, 선택적인 호스트측 메모리 관리자가 존재할 수도 있다. 대부분의 경우들에서 판독 또는 기입 동작들 동안, 호스트(10)는 필수적으로, 연속한 어드레스들을 가진 한 스트링의 논리 섹터들의 데이터를 내포하는 세그먼트를 판독 또는 기입하라는 명령을 메모리 시스템(20)에 발행한다.Host 10 accesses memory 200 when running an application under a file system or operating system. Typically, the host system addresses the data in units of logical sectors, for example, where each sector may contain 512 bytes of data. It is also common for a host to read or write to a unit of logical clusters, each cluster consisting of one or more logical sectors. In some host systems, there may be an optional host-side memory manager to perform low levels of memory management at the host. In most cases, during read or write operations, the host 10 essentially issues a command to the memory system 20 to read or write a segment containing data of a string of logical sectors with consecutive addresses. do.

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

도 3a(i) ~ 도 3a(iii)는 본 발명의 바람직한 실시예에 따라, 논리 그룹과 메타블록간에 맵핑을 개략적으로 도시한 것이다. 물리적 메모리의 메타블록은 논리 그룹의 N개의 논리 섹터들의 데이터를 저장하기 위해 N개의 물리적 섹터들을 갖는다. 도 3a(i)는 논리 그룹(LGi)로부터의 데이터를 나타낸 것으로, 여기서 논리 섹터들은 연속한 논리적 순서 0, 1,..., N-1로 되어 있다. 도 3a(ii)는 같은 데이터가 같은 논리적 순서로 메타블록에 저장되는 것을 도시한 것이다. 이러한 식으로 저장되었을 때 메타블록은 "순차적이다"라고 한다. 일반적으로, 메타블록은 데이터를 다른 순서로 저장되게 할 수도 있는데, 이 경우 메타블록은 "비순차적" 또는 "무순서(chaotic)"라고 한다.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 to store data of N logical sectors of a logical group. 3A (i) shows data from logical group LG i , where logical sectors are in contiguous logical order 0, 1,..., N-1. 3A (ii) shows that the same data is stored in the metablock in the same logical order. Metablocks are said to be "sequential" when stored this way. In general, metablocks may cause data to be stored in a different order, in which case the metablocks are referred to as "out of order" or "chaotic".

논리 그룹의 최하위 어드레스와 매타블록이 맵핑되는 이 메타블록의 최하위 어드레스와의 사이에 오프셋이 있을 수 있다. 이 경우, 논리 섹터 어드레스는 메타블록 내 논리 그룹의 맨 아래에서 다시 맨 위까지 루프(loop)로서 감싸여진다(wrap round). 예를 들면, 도 3a(iii)에서, 메타블록은 이의 제 1 위치에, 논리 섹터 k의 데이터부터 시작하여 저장한다. 마지막 논리 섹터 N-1에 도달하였을 때, 섹터 0으로 감싸여지고 마지막으로 논리 섹터 k-1에 연관된 데이터를 마지막 물리적 섹터 내에 저장한다. 바람직한 실시예에서, 메타블록의 제 1 물리 섹터에 저장된 데이터의 시작 논리 섹터 어드레스를 확인하는 것과 같은 임의의 오프셋을 확인하기 위해서 페이지 태그가 사용된다. 2개의 블록들의 논리 섹터들이 페이지 태그만큼만 다를 때 이들을 유사한 순서로 저장되게 하기 위해서 이들 2개의 블록들이 고찰될 것이다.There may be an offset between the lowest address of the logical group and the lowest address of this metablock to which the metablock is mapped. In this case, the logical sector address is wrapped 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 its first location, starting with the data of logical sector k. When the last logical sector N-1 is reached, it is wrapped in sector 0 and finally stores the data associated with logical sector k-1 in 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. When the logical sectors of the two blocks differ only by the page tag, these two blocks will be considered to ensure that they are stored in a similar order.

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

논리 그룹을 메타블록에 맵핑하는 다른 유형들도 고려된다. 예를 들면, 가변 크기를 갖는 메타블록들이, 본원과 같은 날에 Alan Sinclair에 의해 출원된 "Adaptive Metablocks" 명칭의 함께 계류중이고 본 출원인 소유의 미국특허출원에 개시되어 있다. 함께 계류중인 출원의 전체 개시된 바는 여기 참조로 포함시킨다.Other types of mapping logical groups to metablocks are also contemplated. For example, metablocks with variable sizes are disclosed together in the US patent application, pending and co-pending under the name “Adaptive Metablocks” filed by Alan Sinclair on the same day as the present application. The entire disclosure of the co-pending application is hereby incorporated by reference.

발명의 한 특징은 시스템이 단일 논리 파티션으로 동작하며 메모리 시스템의 논리 어드레스 범위 전체에 걸쳐 논리 섹터들의 그룹들이 동일하게 취급된다는 것이다. 예를 들면, 시스템 데이터를 내포하는 섹터들 및 사용자 데이터를 내포하는 섹터들은 논리 어드레스 공간 중에 임의의 곳에 분포될 수 있다.One feature of the invention is that the system operates as a single logical partition and groups of logical sectors are treated identically throughout the logical address range of the memory system. For example, sectors containing system data and sectors containing user data may be distributed anywhere in the logical address space.

종래 기술의 시스템들과는 달리, 고-빈도 및 작은 크기의 업데이트들을 가진 데이터를 내포할 수 있을 섹터들을 논리 어드레스 공간에 국부화하기 위해서 시스템 섹터들(즉, 파일 할당 테이블들, 디렉토리들 또는 하위-디렉토리들에 관계된 섹터들)의 어떠한 특별한 분할 또는 구역화도 없다. 대신, 논리 그룹들의 섹터들을 업데이트하는 본 방법은 파일 데이터에 전형적인 액세스 패턴들뿐만 아니라, 시스템 섹터들에 전형적인 액세스 패턴들을 효율적으로 다룰 것이다.Unlike prior art systems, system sectors (ie, file allocation tables, directories, or sub-directories) to localize sectors in the logical address space that may contain data with high-frequency and small size updates. There is no special partitioning or zoning of the sectors involved). Instead, the present method of updating sectors of logical groups will effectively handle the access patterns typical for system sectors, as well as the access patterns typical for file data.

도 4는 물리적 메모리에 구조들에서 메타블록의 정렬을 예시한 것이다. 플래 시 메모리는 단위로서 함께 소거될 수 있는 블록들의 메모리 셀들을 포함한다. 이러한 소거 블록들은 플래시 메모리의 소거의 최소 단위 또는 메모리의 최소 소거 가능한 단위(MEU)이다. 복수의 MEU의 소거를 지원하는 어떤 메모리 시스템들에서 하나보다 더 많은 MEU를 포함하는 "슈퍼 MEU"를 구성하는 것이 가능할지라도, 최소 소거 단위가, 메모리의 하드웨어 설계 파라미터이다. 플래시 EEPROM에 대해서, MEU는 한 섹터, 그러나 바람직하게는 복수의 섹터들을 포함할 수 있다. 보인 예에서, 이것은 M 섹터들을 갖는다. 바람직한 실시예에서, 각 섹터는 512 바이트의 데이터를 저장할 수 있고 사용자 데이터 부분, 그리고 시스템 또는 오버헤드 데이터를 저장하기 위한 헤더 부분을 갖는다. 메타블록이 P개의 PEU들로 구성되고 각 MEU가 M개의 섹터들을 내포한다면, 각 메타블록은 N = P*M 섹터들을 가질 것이다.4 illustrates the alignment of metablocks in structures in physical memory. The flash memory includes memory cells of blocks that can be erased together as a unit. These erase blocks are the minimum unit of erase of flash memory or the minimum erasable unit of memory (MEU). Although it is possible to construct a "super MEU" containing more than one MEU in some memory systems that support the erasure of multiple MEUs, the minimum erase unit is a hardware design parameter of the memory. For a flash EEPROM, the MEU may comprise one sector, but preferably a plurality of sectors. In the example shown, it 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 consists of P PEUs and each MEU contains M sectors, then each metablock will have N = P * M sectors.

메타블록은, 시스템 레벨에서, 일 그룹의 메모리 위치들, 예를 들면, 함께 소거될 수 있는 섹터들을 나타낸다. 플래시 메모리의 물리 어드레스 공간은, 한 메타블록이 최소 소거 단위인, 한 세트의 메타블록들로서 취급된다. 이 명세서 내에서, "메타블록" 및 "블록"이라는 용어들은 미디어 관리를 위해 시스템 레벨에서 최소 소거 단위를 정의하기 위해 동의어로 사용되며, "최소 소거 단위" 또는 MEU라는 용어는 플래시 메모리의 최소 소거 단위를 나타내기 위해 사용된다.The metablock represents a group of memory locations, for example, sectors that can be erased together at the system level. The physical address space of the flash memory is treated as a set of metablocks, where one metablock is the minimum erase unit. 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 is the minimum erase of the flash memory. Used to represent units.

메타블록을 형성하기 위한 최소 소거 단위들(Minimum erase units for forming the metablock ( MEUMEU )의 링크) 'S link

프로그래밍 속도 및 소거 속도를 최대화하기 위해서, 복수의 MEU들에 위치된 복수 페이지들의 정보가 병렬로 프로그램되고, 복수의 MEU들이 병렬로 소거되게 배열함으로써 병행을 가능한 한 많이 활용한다.In order to maximize the programming speed and the erase speed, the information of a plurality of pages located in the plurality of MEUs is programmed in parallel, and the parallelism is utilized as much as possible by arranging the plurality of MEUs to be erased in parallel.

플래시 메모리에서, 페이지는 단일 동작으로 함께 프로그램될 수 있는 그룹화된 메모리 셀들이다. 페이지는 하나 이상의 섹터를 포함할 수 있다. 또한, 메모리 어레이는 하나보다 더 많은 플레인(plane)으로 분할될 수 있고, 여기서 한 플레인 내 단지 하나의 MEU만이 한번에 프로그램 또는 소거될 수 있다. 마지막으로, 플레인들은 하나 이상의 메모리 칩들 간에 분포될 수 있다.In flash memory, pages are grouped memory cells that can be programmed together in a single operation. The page may include one or more sectors. Also, a memory array can be partitioned into more than one plane, where only one MEU in one plane can be programmed or erased at a time. Finally, planes may be distributed among one or more memory chips.

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

도 5a는 서로 다른 플레인들의 최소 소거 단위들을 링크하여 구성되는 메타블록들을 도시한 것이다. MB0, MB1,...과 같은 각각의 메타블록은 메모리 시스템의 서로 다른 플레인들로부터의 MEU들로 구성되며, 여기서 서로 다른 플레인들은 하나 이상의 칩들간에 분포될 수 있다. 도 2에 도시된 메타블록 링크 관리자(170)는 각 메타블록에 대한 MEU들을 링크하는 것을 관리한다. 각 메타블록은 초기 포맷 프로세스 동안 구성되며, MEU들 중 하나의 장애가 없는 한, 시스템의 수명 내내 이 메타블록의 성분이 되는 MEU들을 보존한다.5A illustrates metablocks formed by linking minimum erasure units of different planes. Each metablock, such as MB0, MB1, ..., consists of MEUs from different planes of the memory system, where the different planes can be distributed between one or more chips. The metablock link manager 170 shown in FIG. 2 manages linking MEUs for each metablock. Each metablock is configured during the initial format process and preserves MEUs that are components of this metablock throughout the life of the system, unless there is a failure of one of the MEUs.

도 5b는 메타블록에 링크하기 위해 각각의 플레인으로부터 한 최소 소거 단위(MEU)가 선택되는 일 실시예를 도시한 것이다.5B illustrates one embodiment where one minimum erase unit (MEU) is selected from each plane to link to the metablock.

도 5c는 메타블록에 링크하기 위해 각각의 플레인으로부터 하나보다 더 많은 MEU가 선택되는 또 다른 실시예를 도시한 것이다. 또 다른 실시예에서, 각각의 플 레인으로부터 하나보다 더 많은 MEU가 선택되어 슈퍼 MEU를 형성할 수 있다. 예를 들면, 슈퍼 MEU가 2개의 MEU들로부터 형성될 수 있다. 이 경우, 판독 또는 기입 동작을 위해 하나 이상의 패스(pass)를 취할 수도 있다.5C illustrates another embodiment where more than one MEU is selected from each plane to link to the metablock. In another embodiment, more than one MEU 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, one or more passes may be taken for read or write operations.

메타블록들에 MEU들을 링크 및 재 링크하는 것은 본원과 동일 날에, Carlos Gonzales 등에 의해 출원된 "Adaptive Deterministic Grouping of Blocks into Multi-Block Structures" 명칭의 함께 계류중이고 본 출원인 소유의 미국특허출원에도 개시되어 있다. 함께 계류중인 출원의 전체 개시된 바를 여기 참조로 포함시킨다.Linking and relinking MEUs to metablocks is also disclosed on the same day as the present application, filed with Carlos Gonzales et al., Pending US patent application entitled "Adaptive Deterministic Grouping of Blocks into Multi-Block Structures". It is. The entire disclosure of the co-pending application is hereby incorporated 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 implemented in a controller and a flash memory. The metablock management system includes various functional modules implemented in the controller 100 and includes various control data (directory data) in tables and lists hierarchically distributed in the flash memory 200 and the controller RAM 130. Keep). The functional modules implemented in the controller 100 may include the interface module 110 logical to physical address translation module 140, the update block manager module 150, the erase block manager module 160, and the metablock link manager 170. Include.

인터페이스(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 the host to host to physical memory locations. The update block manager module 150 manages in-memory data update operations for data of a given logical group. The erased block manager 160 manages the erase operation of metablocks and the allocation of these metablocks for storage of new information. The metablock link manager 170 manages linking sub-groups of sectors of the minimum erasable blocks making up a given metablock. Details of these modules will be given in their respective paragraphs.

동작 동안에 메타블록 관리 시스템은 어드레스, 제어 및 상태 정보와 같은 제어 데이터를 발생하고 이들로 동작한다. 제어 데이터의 대부분은 작은 크기의 빈번히 변하는 데이터인 경향이 있기 때문에, 큰 블록 구조를 가진 플래시 메모리에서는 쉽게 저장될 수도 효율적으로 유지될 수도 없다. 더 효율적인 업데이트 및 액세스를 위해 제어기 RAM에 소량의 더 가변하는 제어 데이터를 배치하는 반면 비휘발성 플래시 메모리에는 보다 정적인 제어 데이터를 저장하기 위해 계층 및 분산 방법이 채용된다. 파워 셧다운 또는 장애의 경우에, 이 방법은 비휘발성 메모리 내 작은 한 세트의 제어 데이터를 스캐닝함으로써 제어 데이터가 비휘발성 제어기 RAM에 신속하게 재구축되게 한다. 이것은 주어진 논리 그룹의 데이터의 가능한 활동에 연관된 블록들의 수를 제약시킨다. 이에 따라, 스캐닝은 제한된다. 또한, 지속을 요구하는 일부 제어 데이터는 섹터별로 업데이트될 수 있는 비휘발성 메타블록에 저장되는데, 각 업데이트는 이전 것을 대체하는 새로운 섹터가 기록되는 결과가 된다. 제어 데이터가 메타블록 내 섹터별 업데이트들을 추적하기 위해 섹터 색인 방법이 채용된다.During operation, the metablock management system generates and operates with control data such as address, control and status information. Since most of the control data tends to be small and frequently changing data, it cannot be easily stored or efficiently maintained in a flash memory having a large block structure. Hierarchical and distributed methods are employed to store more static control data while non-volatile flash memory places small amounts of more variable control data in the controller RAM for more efficient updating and access. In the case of a power shutdown or failure, this method scans a small set of control data in the nonvolatile memory, thereby allowing the control data to be quickly rebuilt into the nonvolatile controller RAM. This limits the number of blocks associated with possible activity of data in a given logical group. Accordingly, scanning is limited. In addition, some control data requiring persistence are stored in non-volatile metablocks that can be updated sector by sector, with each update resulting in a new sector replacing the old one. A sector indexing method is employed for the control data to track sector-by-sector updates in the metablock.

비휘발성 메모리(200)는 비교적 정적인 대량의 제어 데이터를 저장한다. 이것은 그룹 어드레스 테이블들(GAT)(210), 무순서 블록 색인들(CBI)(220), 소거된 블록 리스트들(EBL)(230) 및 MAP(240)을 포함한다. GAT(210)은 논리 그룹들의 섹터들과 이들의 대응하는 메타블록들간에 맵핑을 추적한다. 맵핑은 업데이트되는 것들을 제외하곤 변하지 않는다. CBI(220)는 업데이트 동안에 논리적으로 비순차적인 섹터들의 맵핑을 추적한다. EBL(230)은 소거가 된 메타블록 풀(pool)을 추적한다. MAP(240)은 플래시 메모리에 모든 메타브록들의 소거 상태를 보이는 비트맵이다.The nonvolatile memory 200 stores a relatively static large amount of control data. This includes group address tables (GAT) 210, random block indexes (CBI) 220, erased block lists (EBL) 230, and MAP 240. GAT 210 tracks the mapping between sectors of logical groups and their corresponding metablocks. The mapping does not change except for those that are updated. CBI 220 tracks the mapping of sectors that are logically out of order during the update. The EBL 230 keeps track of the erased metablock pool. The MAP 240 is a bitmap showing the erase state of all metablocks in the flash memory.

휘발성 제어기 RAM(130)은 빈번히 변하고 액세스되는 작은 부분의 제어 데이터를 저장한다. 이것은 할당 블록 리스트(ABL)(134) 및 클리어된 블록 리스트(CBL)(136)를 포함한다. CBL(136)이 할당이 해제되고 소거가 된 메타블록들을 추적하는 반면 ABL(134)은 업데이트 데이터를 기록하기 위해 메타블록들의 할당을 추적한다. 바람직한 실시예에서, 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 cleared block list (CBL) 136. The CBL 136 tracks the de-allocated and erased metablocks while the ABL 134 tracks the allocation of metablocks to record the update data. 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, sectors of each logical group to be updated are assigned a dedicated update metablock for recording update data. In a preferred embodiment, any segment of one or more sectors of the logical group will be written to the update block. The update block may be managed to receive the updated data in sequential order or out of order (also known as random order). The random update block allows sector data to be updated in any order within the logical group, and by randomly repeating the individual sectors. In particular, the sequential update block can be an out-of-order update block, without the need for relocation of any data sectors. No predetermined allocation of blocks is required for random data update, where out of order writing to any logical address is automatically adjusted. Thus, unlike prior art systems, there is no special handling whether the various update segments of a logical group are in logical sequential or out of order. The generic update block will simply be used to record the various segments in the order requested by the host. For example, even though host system data or system control data tends to be updated in an unordered manner, regions of the logical address space corresponding to host system data need not be treated differently than regions with host user data.

완전한 논리 그룹의 섹터들의 데이터는 바람직하게는 논리적으로 순차적인 순서로 단일 메타블록에 저장된다. 이에 따라, 저장된 논리 섹터들의 색인은 사전에 정의된다. 메타블록이 주어진 논리 그룹의 모들 섹터들을 기정의된 순서로 저장장치에 갖고 있을 때, "온전(intact)"하다고 한다. 업데이트 블록에 관해서, 이것이 결국에 논리적으로 순차적인 순서로 업데이트 블록으로 완전히 채워졌을 때, 업데이트 블록은 쉽게 원 메타블록을 대체하는 업데이트된 온전한 메타블록이 될 것이다. 반면, 업데이트 블록이 온전한 블록과는 논리적으로 다른 순서로 업데이트 데이터로 완전히 채워진다면, 업데이트 블록은 비순차적 또는 무순서 업데이트 블록이며 비순서적 세그먼트들은 종국에 논리 그룹의 업데이트 데이터가 온전한 블록의 순서와 동일한 순서로 저장되도록 추가로 더 처리되어야 한다. 바람직한 경우 에, 이것은 단일 메타블록에 논리적으로 순차적인 순서로 되어 있다. 추가의 처리는 원 블록 내 변경되지 않은 섹터들과 함께 업데이트 블록 내 업데이트된 섹터들을 또 다른 업데이트 메타블록에 합체하는 것을 수반한다. 합체된 업데이트 블록은 논리적으로 순차적인 순서로 있을 것이며 원 블록을 대체하는데 사용될 수 있다. 어떤 소정의 조건 하에서, 합체 프로세스는 하나 이상의 압축 프로세스들이 선행된다. 압축 프로세스는 단순히, 동일 논리적 섹터의 후속의 업데이트에 의해 폐용이 된 임의의 이중의 논리 섹터는 제거하면서, 무순서 업데이트 블록의 섹터들을 대체 무순서 블록에 재기록한다.The data of sectors of the complete logical group is preferably stored in a single metablock in a logically sequential order. Thus, the index of stored logical sectors is predefined. When a metablock has all sectors of a given logical group in storage in a predefined order, it is said to be "intact". Regarding the update block, when it is eventually completely filled with update blocks in a logically sequential order, the update block will be an updated intact metablock that easily replaces the original metablock. On the other hand, if the update block is completely populated with update data in a logically different order than the intact block, then the update block is an out-of-order or out-of-order update block and the out-of-order segments will eventually have the same update data in the logical group as the intact block. It must be further processed to be stored in order. In the preferred case, this is in logically sequential order in a single metablock. Further processing involves incorporating the updated sectors in the update block into another update metablock along with the unchanged sectors in the original block. The merged update blocks will be in logically sequential order and can be used to replace the original block. Under certain predetermined conditions, the coalescing process is preceded by one or more compression processes. The compression process simply rewrites the sectors of the random update block to the replacement random block, removing any duplicate logical sectors that were obsolete by subsequent updates of the same logical sector.

업데이트 방법은 기정의된 최대까지 복수의 업데이트 스레드들(thread)이 동시에 진행될 수 있게 한다. 각각의 스레드는 자신의 전용의 업데이트 메타블록을 사용하여 업데이트되는 논리 그룹이다.The update method allows a plurality of update threads to proceed simultaneously up to a predefined maximum. Each thread is a logical group that is updated using its own update metablock.

순차 데이터 Sequential data 업데이트update

논리 그룹에 속하는 데이터가 우선 업데이트될 때, 논리 그룹의 업데이트 데이터를 위한 업데이트 블록으로서 메타블록이 할당되고 전용된다. 업데이트 블록은 현존의 메타블록이 이의 모든 섹터들을 온전하게 저장하고 있었던 논리 그룹의 하나 이상의 섹터들의 세그먼트를 기입하라는 명령이 호스트로부터 수신되었을 때 할당된다. 제 1 호스트 기입 동작에 있어서, 제 1 세그먼트의 데이터는 업데이트 블록에서 기록된다. 각각의 호스트 기입은 연속된 논리 어드레스를 가진 하나 이상의 섹터의 세그먼트이기 때문에, 이에 따라 제 1 업데이트는 사실상 항시 순차적이게 된다. 후속되는 호스트 기입들에서, 동일 논리 그룹 내 업데이트 세그먼트들은 호 스트로부터 수신된 순서로 업데이트 블록 내에 기록된다. 블록은 연관된 논리 그룹 내 호스트에 의해 업데이트된 섹터들은 논리적으로 순차적인 상태로 있는 반면 순차적인 업데이트 블록으로서 계속하여 관리된다. 이 논리 그룹 내 업데이트된 모든 섹터들은 이 순차적 업데이트 블록이 폐쇄(close)되거나 무순서 업데이트 블록으로 전환될 때까지, 이 블록에 기입된다.When data belonging to a logical group is first updated, a metablock is allocated and dedicated as an update block for update data of the logical group. The update block is allocated when a command is received from the host to write a segment of one or more sectors of the logical group in which the existing metablock has stored all its sectors intact. In the first host write operation, data of the first segment is written in an update block. Since each host write is a segment of one or more sectors with consecutive logical addresses, the first update is therefore virtually always sequential. In subsequent host writes, update segments in the same logical group are written into 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 updated sectors in this logical group are written to this block until this sequential update block is closed or switched to an unsequential update block.

도 7a는 논리 그룹에 대한 원 블록 내 대응하는 섹터들은 폐용으로 되면서, 2개의 개별적 호스트 기입 동작들의 결과로서 논리 그룹 내 섹터들이 순차적 업데이트 블록에 순차적 순서로 기입되는 예를 도시한 것이다. 호스트 기입 동작 #1에서, 논리 섹터들(LS5 ~ LS8) 내의 데이터가 업데이트되고 있다. LS5' ~ LS8'로서 업데이트된 데이터는 새롭게 할당된 전용의 업데이트 블록에서 기록된다.FIG. 7A illustrates an example in which sectors in a logical group are written in sequential update block in sequential update block as a result of two separate host write operations, with corresponding sectors in the original block for the logical group being obsolete. In host write operation # 1, data in logical sectors LS5 to LS8 are being updated. Data updated as LS5 'to LS8' is recorded in a newly allocated dedicated update block.

편의상, 논리 그룹 내 업데이트될 제 1 섹터는 제 1 물리적 섹터 위치부터 시작하여 전용의 업데이트 블록에 기록된다. 일반적으로, 업데이트될 제 1 논리 섹터는 반드시 그룹의 논리적 제 1 섹터인 것은 아니며, 따라서 논리 그룹의 시작과 업데이트 블록의 시작 간에는 오프셋이 있을 수 있다. 이 오프셋은 도 3a에 관련하여 앞에서 기술된 바와 같이 페이지 태그로서 알게 된다. 후속되는 섹터들은 논리적으로 순차적인 순서로 업데이트된다. 논리 그룹의 마지막 섹터가 기입될 때, 그룹 어드레스들은 감싸여지며 기입 시퀀스는 그룹의 제 1 섹터에서 계속된다.For convenience, the first sector to be updated in the logical group is written to 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 described above with respect to FIG. 3A. Subsequent sectors are updated in a logically sequential order. When the last sector of the logical group is written, the group addresses are wrapped and the write sequence continues at the first sector of the group.

호스트 기입 동작 #2에서, 논리 섹터들(LS9 ~ LS12)에 한 세그먼트의 데이터가 업데이트되고 있다. LS9' ~ LS12'로서 업데이트된 데이터는 마지막 기입이 끝나는 곳 바로 다음 위치에 전용의 업데이트 블록에 기록된다. 2개의 호스트 기입들은 업데이트 데이터가 논리적으로 순차적인 순서로, 즉 LS5' ~ LS12'로 업데이트 블록에 기록되게 하는 것임을 알 수 있다. 업데이트 블록은 논리적으로 순차적인 순서로 채워졌기 때문에 순차적 업데이트 블록으로서 간주된다. 업데이트 블록 내 기록된 업데이트 데이트는 원 블록 내 대응하는 것들을 폐용시킨다.In host write operation # 2, one segment of data is updated in the logical sectors LS9 to LS12. The data updated as LS9 'to LS12' is recorded in a dedicated update block at the position immediately after the last write end. It can be seen that the two host writes cause the update data to be written to the update block in a logically sequential order, that is, LS5 'to LS12'. Update blocks are considered as sequential update blocks because they are filled in a logically sequential order. The recorded update data in the update block discards the corresponding ones in the original block.

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

무순서 업데이트 블록 관리는 연관된 논리 그룹 내 호스트에 의해 업데이트된 임의의 섹터가 논리적으로 비순차적일 때 현존의 순차적 업데이트 블록에 대해, 개시될 수 있다. 무순서 업데이트 블록은 연관된 논리 그룹 내 논리 섹터들이 임의의 순서로 그리고 임의의 반복 량을 갖고 업데이트될 수 있는 데이터 업데이트 블록 형태이다. 이것은 호스트에 의해 기입된 섹터가 논리적으로 비순차적일 때 순차적 업데이트 블록에서, 업데이트되는 논리 그룹 내 전에 기입된 섹터로 전환에 의해 생성된다. 이 논리 그룹에 후속하여 업데이트되는 모든 섹터들은 그룹 내 이들의 논리 섹터 어드레스가 어떻든 간에, 무순서 업데이트 블록 내 다음 가용 섹터 위치에 기입된다.Random update block management may be initiated for an existing sequential update block when any sector updated by the 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 with any amount of repetition. This is created by switching from the sequential update block to the previously written sector in the logical group being updated when the sector written by the host is logically out of order. All sectors that are updated following this logical group are written to the next available sector location in the random update block, whatever their logical sector address is 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 illustrates that random sectors in the original block for the logical group and dual sectors in the randomized update block are written out of order in the randomized update block as a result of five separate host write operations. Examples of sectors in a logical group are shown. In host write operation # 1, logical sectors LS10-LS11 of a given logical group stored in the original metablock are updated. The updated logical sectors LS10 'to LS11' are stored in a newly allocated update block. At this time, the update block is a sequential block. In host write operation # 2, logical sectors LS5 to LS6 are updated as LS5 'to LS6' and written to the update block at the position immediately after the last write. This converts the update block from sequential to random. In host write operation # 3, the logical sector LS10 is being updated again and written to the next position of the update block as LS10 ", where LS10" in the update block replaces LS10 in the original block by replacing LS10 'in the previous write. do. In host write operation # 4, the data in logical sector LS10 is updated again and written to the next position of the update block as LS10 "'. Accordingly, LS10"' is now the latest and unique to logical sector LS10. Valid data. In host write operation # 5, data is being updated in logical sector LS30 and written to the update block as LS30 '. Thus, the example illustrates that sectors within a logical group may be written to the randomized update block in any order, randomly and repeatedly.

강제 순차 Forced sequencing 업데이트update

도 8은 논리 어드레스들에서 불연속을 갖는 2개의 개별적 호스트 기입 동작들의 결과로서 논리 그룹에 섹터들이 순차 업데이트 블록에 순차적 순서로 기입되는 예를 도시한 것이다. 호스트 기입 #1에서, 논리 섹터들(LS5 ~ LS8)에 업데이트 데이터는 LS5' ~ LS8'로서 전용의 업데이트 블록에 기록된다. 호스트 기입 #2에서, 논리 섹터들(LS14 ~ LS16)에 업데이트 데이터는 LS14' ~ LS16'로서 마지막 기입 다음에 업데이트 블록에 기록되고 있다. 그러나, LS8과 LS14 간에 어드레스 도약이 있고 호스트 기입 #2는 정상적으로 업데이트 블록을 비순차가 되게 할 것이다. 어 드레스 도약은 순차적이지 않기 때문에, 한 선택은 우선 호스트 기입 #2을 실행하기 전에 개재된 섹터들의 데이터를 원 블록에서 업데이트 블록에 카피함으로써 패딩(padding) 동작(#2A)을 수행하는 것이다. 이에 따라서, 업데이트 블록의 순차 특성이 보존된다.8 illustrates an example in which sectors are written in a sequential update block in a sequential update block as a result of two separate host write operations with discontinuities in logical addresses. In host write # 1, update data in the logical sectors LS5 to LS8 are recorded in a dedicated update block as LS5 'to LS8'. In host write # 2, update data in the logical sectors LS14 to LS16 are written to the update block after the last write as LS14 'to LS16'. However, there is an address jump between LS8 and LS14 and host write # 2 will normally cause the update block out of order. Since the address jump is not sequential, one choice is to perform the padding operation # 2A by first copying the data of intervening sectors from the original block to the update block before executing host write # 2. Accordingly, the sequential characteristics of the update block are preserved.

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

단계 260: 메모리는 블록들로 조직되고, 각 블록은 함께 소거 가능한 메모리 단위들로 분할되며, 각 메모리 단위는 논리적 단위의 데이터를 저장한다.Step 260: The memory is organized into blocks, where each block is divided into erasable memory units, each memory unit storing data in logical units.

단계 262: 데이터는 논리 그룹들로 조직되며, 각 논리 그룹은 논리 단위들로 분할된다.Step 262: The data is organized into logical groups, each logical grouping 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 logically sequential order. In this way, the index for accessing the individual logical units in the block is known.

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

단계 272: 요청된 업데이트 논리 단위는 LGX의 업데이트들을 기록하는데 전용되는 제 2 블록에 저장되어야 한다. 기록 순서는 제 2 순서, 전형적으로 업데이트들이 요청된 순서에 따른다. 발명의 한 특징은 논리적으로 순차적인 또는 무순서의 순서로 데이터를 기록하는데 초기에는 포괄적이 되게 업데이트 블록을 구축할 수 있게 한다. 따라서 제 2 순서에 따라, 제 2 블록은 순차적인 것이 되거나 무순서인 것이 될 수 있다.Step 272: The requested update logical unit should be stored in a second block dedicated to recording updates of LG X. The recording order follows a second order, typically the order in which updates are requested. One feature of the invention is that it is possible to build an update block that is initially comprehensive in recording data in a logically sequential or random order. Thus, according to the second order, the second block may be sequential or random.

단계 274: 제 2 블록은 프로세스가 단계 270으로 다시 루프하여 요청된 논리 단위들이 계속하여 기록되게 한다. 제 2 블록은 폐쇄를 위한 소정의 조건이 구체화되었을 때 추가 업데이트를 받는 것에 대해 폐쇄될 것이다. 이 경우, 프로세스는 단계 276으로 진행한다.Step 274: The second block causes the process to loop back to step 270 so that the requested logical units continue to be written. The second block will be closed for receiving further updates when certain conditions for closure are specified. In this case, the process proceeds to step 276.

단계 276: 폐쇄된 제 2 블록이 원 블록의 순서와 유사한 순서로 기록된 그의 업데이트 논리 단위들을 갖는지가 판정된다. 두 개의 블록은 이들의 기록된 논리 단위들이 도 3a에 관련하여 기술된 바와 같이, 페이지 태그만큼만 다를 때 유사한 순서를 갖는 것으로 간주된다. 2개의 블록들이 유사한 순서를 갖는다면 프로세스는 단계 280로 진행하고, 그렇지 않다면 어떤 일종의 가비지 수거(garbage collection)가 단계 290에서 수행될 필요가 있다.Step 276: It is determined whether the closed second block has its update logic units written in an order similar to that of the original block. The two blocks are considered to have a similar order when their written logical units differ only by the page tag, as described with respect to 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 used to replace the original first block. The update process ends at step 299.

단계 290: 주어진 논리 그룹의 각 논리 단위들의 가장 최신의 버전은 제 2 블록(업데이트 블록) 및 제 1 블록(원 블록) 중에서 수집된다. 주어진 논리 그룹의 합체된 논리 단위들은 제 1 블록과 유사한 순서로 제 3 블록에 기입된다.Step 290: The most recent version of each logical unit of a given logical group is collected among a second block (update block) and a first block (one block). Merged 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 (merged block) has a similar order as the first block, it is used to replace the original first block. The update process ends at step 299.

단계 299: 폐쇄 프로세스가 온전한 업데이트 블록을 생성할 때, 이것은 주어진 논리 그룹에 대한 새로운 표준 블록이 된다. 논리 그룹에 대한 업데이트 스레드는 종료될 것이다.Step 299: When the closure process creates an intact update block, this becomes a new standard block for a given logical group. The update thread for the logical group will end.

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

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

단계 312: LGX에 전용되는 업데이트 블록이 이미 존재하지 않는다면, 논리 그룹에 대한 새로운 업데이트 스레드를 개시하기 위해 단계 410로 진행한다. 이것은 논리 그룹의 업데이트 데이터를 기록하는데 전용되는 업데이트 블록을 할당함으로써 달성될 것이다. 개방된 업데이트 블록이 이미 있다면, 업데이트 블록에 업데 이트 섹터를 기록하는 것을 시작하기 위해 단계 314로 진행한다.Step 312: If there is no update block dedicated to LG X already, proceed to step 410 to initiate a new update thread for the logical group. This will be accomplished by assigning an update block dedicated to writing the update data of the logical group. If there is already an open update block, proceed to step 314 to begin writing an update sector to the update block.

단계 314: 현 업데이트 블록이 이미 무순서이라면(즉, 비순차적), 간단히, 요청된 업데이트 섹터를 무순서 업데이트 블록에 기록하기 위해 단계 510으로 진행한다. 현 업데이트 블록이 순차적이라면, 순차적 업데이트 블록의 처리를 위해 단계 316으로 진행한다.Step 314: If the current update block is already out of order (ie, out of order), simply proceed to step 510 to write the requested update sector to the out of order 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 invention allows an update block to be built up initially to be comprehensive in writing data in a logically sequential or random order. However, it is desirable to keep the update blocks as sequential as possible, since the logical grouping eventually causes its data to be stored in the metablock in a logically sequential order. Since no garbage collection will then be needed, less processing will be required when the update block is closed for further updates.

이에 따라, 요청된 업데이트가 업데이트 블록의 현재의 순차적 순서에 따를 것인지의 여부가 판정된다. 업데이트가 순차적으로 이어진다면, 단계 510으로 진행하여 순차적 업데이트를 수행하고, 업데이트 블록은 순차적인 상태가 될 것이다. 반면, 업데이트가 순차적으로 이어지지 않는다면(무순서 업데이트), 이것은 어떠한 다른 조치들도 취해지지 않는다면 순차적 업데이트 블록을 무순서로 전환할 것이다.Accordingly, it is determined whether the requested update will be in accordance with the current sequential order of the update block. If the updates follow sequentially, proceed to step 510 to perform sequential updates, and the update block will be in sequential state. On the other hand, if the updates are not in sequence (random update), this will switch the sequential update block out of order if no other actions are taken.

일 실시예에서, 상황을 구하기 위해서 어떤 것도 더 행해지지 않으며 프로세스는 곧바로 단계 370로 가서 업데이트 블록을 무순서인 것으로 전환하게 업데이트가 허용된다.In one embodiment, nothing is done to save the situation and the process is allowed to update to go straight to step 370 and switch the update block to random.

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

또 다른 실시예에서, 강제 순차 프로세스 단계 320은 현안의 무순서 업데이트에 대해 가능한 한 순차적 업데이트 블록을 유지하기 위해 선택적으로 수행된다. 2가지 상황들이 있으며, 이들 둘 다는 업데이트 블록에 기록된 논리 섹터들의 순차적 순서를 유지하기 위해 원 블록으로부터 빠진 섹터들을 카피하는 것을 요구한다. 제 1 상황은 업데이트가 짧은 어드레스 도약을 야기하는 경우이다. 제 2 상황은 업데이트 블록을 순차적 상태로 유지하기 위해 이 업데이트 블록을 조기에 폐쇄하는 것이다. 강제 순차 프로세스 단계 320은 다음 하위 단계들을 포함한다.In another embodiment, forced sequential process step 320 is optionally performed to maintain sequential update blocks as much as possible for current random order updates. There are two situations, both of which require copying sectors missing from the original block to maintain the sequential order of the logical sectors written to the update block. The first situation is when the update causes a short address jump. The second situation is to close this update block early to keep the update blocks in sequential state. The forced sequential process step 320 includes the following substeps.

단계 330: 업데이트가 소정량 CB보다 크지 않은 논리 어드레스 도약을 야기한다면, 프로세스는 단계 350에서 강제 순차 업데이트 프로세스로 진행하며, 그렇지 않다면 프로세스는 강제 순차 폐쇄에 적격인지를 고찰하기 위해 단계 340으로 진행한다.Step 330: If the update causes a logical address jump not greater than the predetermined amount C B , the process proceeds to a forced sequential update process in step 350, otherwise the process proceeds to step 340 to consider whether the process is eligible for forced sequential closure. do.

단계 340: 채워지지 않은 물리적 섹터들의 수가, 업데이트 블록의 크기의 반이 전형적인 값인 소정의 설계 파라미터 CC를 초과한다면, 업데이트 블록은 상대적으로 미사용되며 조기에 폐쇄되지 않을 것이다. 프로세스는 단계 370으로 진행하며 업데이트 블록은 무순서가 될 것이다. 반면, 업데이트 블록이 상당히 채워진다면, 이것은 이미 이용이 된 것으로 간주되고 따라서 강제 순차 폐쇄를 위해 단계 360으로 진행된다.Step 340: If the number of unfilled physical sectors exceeds a predetermined design parameter C C where half of the size of the update block is a typical value, the update block is relatively unused and will not close early. The process proceeds to step 370 where the update block will be out of order. On the other hand, if the update block is significantly filled, it is considered already used and therefore proceeds to step 360 for forced sequential closure.

단계 350: 강제 순차 업데이트는 어드레스 도약이 소정량 CB을 초과하는 한, 현 순차 업데이트 블록을 순차 상태에 있게 한다. 필수로, 업데이트 블록의 연관된 원 블록으로부터의 섹터들은 어드레스 도약에 의한 크기의 갭을 채우게 카피된다. 이에 따라, 순차 업데이트 블록은 현 업데이트를 순차로 기록하기 위해 단계 510으로 진행하기 전에 개재된 어드레스들 내 데이터로 패딩될 것이다.Step 350: Forced sequential update keeps the current sequential update block in sequential state as long as the address hop exceeds a predetermined amount C B. Essentially, sectors from the associated original block of the update block are copied to fill the gap of size by address hop. Accordingly, the sequential update block will be padded with data in intervening addresses before proceeding to step 510 to sequentially record the current update.

단계 360: 강제 순차 폐쇄는 현안의 무순서 업데이트에 의한 무순서인 것으로 전환되기보다는 이미 상당히 채워졌다면 현재 순차 업데이트 블록이 폐쇄되게 한다. 무순서 또는 비순차 업데이트는 위에 기술된 어드레스 동작 예외에 의해 커버되지 않은 순방향 어드레스 전이, 역방향 어드레스 전이, 또는 어드레스 반복을 갖는 것으로서 정의된다. 순차 업데이트 블록이 무순서 업데이트에 의해 전환되는 것을 방지하기 위해서, 업데이트 블록의 미기입된 섹터 위치들은 업데이트 블록의 연관된 원래의 부분적으로 폐용된 블록으로부터 섹터들을 카피함으로써 채워진다. 원래의 블록은 완전히 폐용이 되고 소거될 수 있다. 현 업데이트 블록은 이제 완전한 한 세트의 논리 섹터들을 가지며 이어서 원 메타블록을 대체하는 온전한 메타블록으로서 폐쇄된다. 이어서 프로세스는 단계 430으로 진행하여 새로운 업데이트 블록이 이의 장소에, 처음에 단계 310에서 요청되었던 현안의 섹터 업데이트의 기록을 받아들이기 위해 할당되게 한다.Step 360: Forced sequential closure causes the current sequential update block to be closed if it has already been sufficiently filled rather than switched to being out of order by the current random order update. Out of order or out of order updates are defined as having forward address transitions, reverse address transitions, or address repetitions not covered by the address operation exception described above. To prevent the sequential update block from being switched by random updates, the unwritten sector positions of the update block are filled by copying sectors from the associated original partially obsolete block of the update block. The original block can be completely obsolete and erased. The current update block now has a complete set of logical sectors and is then closed as an intact metablock replacing the original metablock. The process then proceeds to step 430 where a new update block is assigned to it to accept a record of the current sector update that was originally requested in step 310.

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

단계 370: 현안의 업데이트가 순차적인 순서가 아닐 때, 그리고 선택적으로, 강제 순차 조건들이 만족되지 않는다면, 단계 510으로 프로세스가 진행할 때 비순차적 어드레스를 가진 현안의 업데이트 섹터가 업데이트 블록에 기록될 수 있게 한 덕택으로 순차 업데이트 블록은 무순서인 것으로 전환되는 것이 허용된다. 무순서 업데이트 블록들의 최대수가 존재한다면, 전환이 진행될 수 있게 하기 전에 최근 최소 액세스된 무순서 업데이트 블록을 폐쇄하는 것이 필요하며, 이에 따라 최대수의 무순서 블록들이 초과되는 것을 방지한다. 최근 최소 액세스된 무순서 업데이트 블록의 식별은 단계 420에 기술된 일반적인 경우와 동일하며, 그러나 무순서 업데이트 블록들만으로 제약된다. 이때 무순서 업데이트 블록을 폐쇄하는 것은 단계 550에서 기술된 바와 같은 합체에 의해 달성된다.Step 370: When the update of the issues is not in sequential order, and optionally, if the forced sequential conditions are not satisfied, the update sector of the issue with the non-sequential address can be written to the update block when the process proceeds to step 510. By virtue, the sequential update block is allowed to transition to being out of order. If there is a maximum number of random update blocks, it is necessary to close the recently minimum accessed random update block before allowing the transition to proceed, thus preventing the maximum number of random blocks 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 limited to random update blocks only. Closing the random update block at this time is accomplished by coalescing as described in step 550.

시스템 제약하에 새로운 New under system constraints 업데이트update 블록의 할당 Block allocation

단계 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 has been exceeded. Due to finite resources, the memory management system typically allows a certain 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 eight update blocks. Also, due to a higher demand for system resources, there may be a corresponding predetermined restriction on the maximum number of random update blocks that can be open at the same time (eg, four).

이에 따라, UMAX 업데이트 블록들이 이미 할당되었을 때, 다음 할당 요청은 현존의 할당된 것들 중 하나를 폐쇄한 후에만 만족될 수도 있을 것이다. 프로세스는 단계 420으로 진행한다. 개방된 업데이트 블록들의 수가 CA 미만일 때, 프로세스 는 단계 430으로 곧바로 진행한다.Thus, when U MAX update blocks have already been allocated, the next allocation request may be satisfied only after closing one of the existing allocated ones. The process proceeds to step 420. When the number of open update blocks is less than C A , the process proceeds directly to 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. For the purpose of determining the latest minimally accessed update blocks, the access includes writes and optionally reads of logical sectors. The list of open update blocks is maintained in the order of access: In initialization, no access order is assumed. Closure of the update block is done following the similar process described with respect to steps 360 and 530 when the update block is sequential and with respect to step 540 when the update block is random. Closure creates an empty space for allocation of the new update block at step 430.

단계 430: 할당 요청은 주어진 논리 그룹(LGX)에 전용되는 업데이트 블록으로서 새로운 메타블록의 할당에 의해 이행된다. 이어서 프로세스는 단계 510으로 간다.Step 430: The allocation request is fulfilled by assignment of a new metablock as an update block dedicated to a given logical group LG X. The process then goes to step 510.

업데이트 블록에 In the update block 업데이트update 데이터를 기록 Record data

단계 510: 요청된 업데이트 섹터는 업데이트 블록의 다음 가용한 물리적 위치에 기록된다. 이어서 프로세스는 업데이트 블록이 폐쇄될 수 있게 되었는지 여부를 판정하기 위해 단계 520으로 진행한다.Step 510: The requested update sector is written to the next available physical location of the update block. The process then proceeds to step 520 to determine whether the update block can be closed.

업데이트update 블록 폐쇄 Block closure

단계 520: 업데이트 블록이 여전히 추가의 업데이트들을 받아들일 공간을 갖고 있다면, 단계 570로 간다. 그렇지 않다면 단계 522으로 가서 업데이트 블록을 폐쇄한다. 현재 요청된 기입이 블록이 그럴 공간을 갖고 있는 것보다 더 많은 논리 섹터들을 기입하려고 할 때 업데이트 블록을 채우는 2가지 가능한 구현들이 있다. 제 1 구현에서, 기입 요청은 2가지 부분들로 분할되는데, 제 1 부분은 블록의 마지막 물리적 섹터까지 기입하는 것이다. 이어서 블록은 폐쇄되고 기입의 제 2 부분은 다음 요청된 기입으로서 취급될 것이다. 다른 구현에서, 요청된 기입은 블록이 이의 나머지 섹터들을 패딩되게 한 후 폐쇄되는 동안 보류된다. 요청된 기입은 다음 요청된 기입으로서 취급될 것이다.Step 520: If the update block still has space to accept additional updates, go to step 570. Otherwise go to step 522 and close the update block. There are two possible implementations that fill the update block when the currently requested write attempts to write more logical sectors than the block has that space. In a first implementation, the write request is split into two parts, the first part being writing up to the last physical sector of the block. The block will then be closed and the second portion of the write will be treated as the next requested write. In another implementation, the requested write is held while the block is closed after causing the rest of its sectors to be padded. The requested entry will be treated as the next requested entry.

단계 522: 업데이트 블록이 순차적이면 순차 폐쇄를 위해 단계 530으로 간다. 업데이트 블록이 무순서이면 무순서 폐쇄를 위해서 단계 540으로 간다.Step 522: If the update blocks are sequential, go to step 530 for sequential closure. If the update block is random, go to step 540 for random closure.

순차 Sequential 업데이트update 블록 폐쇄 Block closure

단계 530: 업데이트 블록이 순차적이고 충만되었기 때문에, 이에 저장된 논리 그룹은 온전하다. 메타블록은 온전하며 원래의 것을 대체한다. 이때, 원래의 블록은 완전히 폐용이 되며 소거될 수도 있다. 이어서 프로세스는 단계 570로 가서, 주어진 논리 그룹에 대한 업데이트가 끝난다.Step 530: Since the update blocks are sequential and full, the logical group stored therein is intact. The metablock is intact and replaces the original. At this time, the original block is completely used and may be erased. The process then proceeds to step 570, where the update for the given logical group ends.

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

단계 540: 업데이트 블록은 비순차적으로 채워지고 어떤 논리 섹터들의 복수의 업데이트들을 내포할 수 있기 때문에, 이에 유효한 데이터를 구하기 위해 가비지 수거가 수행된다. 무순서 업데이트 블록은 압축되거나 합체될 것이다. 어떤 프 로세스가 수행될 것인지는 단계 542에서 결정될 것이다.Step 540: Since the update block is filled out of order and can contain multiple updates of certain logical sectors, garbage collection is performed to obtain valid data thereon. The random update block will be compressed or coalesced. Which process will be performed will be determined in step 542.

단계 542: 압축 또는 합체를 수행하는 것은 업데이트 블록의 악화에 따를 것이다. 논리 섹터가 다수회 업데이트된다면, 이의 논리 어드레스는 매우 악화된다. 업데이트 블록에 기록된 동일 논리 섹터의 복수의 버전들이 있을 것이며 마지막 기록된 버전만이 이 논리 섹터에 유효한 버전이다. 복수의 버전들을 갖는 논리 섹터들을 내포하는 업데이트 블록에서, 구별되는 논리 섹터들의 수는 논리 그룹의 수보다 훨씬 적을 것이다.Step 542: Performing compression or coalescing will follow the deterioration of the update block. If a logical sector is updated many times, its logical address becomes very bad. There will be multiple versions of the same logical sector written to the update block and only the last recorded version is a valid version for this logical sector. In an update block containing logical sectors having multiple versions, the number of distinct logical sectors will be much less than the number of logical groups.

바람직한 실시예에서, 업데이트 블록 내 구별되는 논리 섹터들의 수가, 논리 그룹의 크기의 반인 전형적인 값을 갖는 소정의 설계 파라미터 CD를 초과할 때, 폐쇄 프로세스는 단계 550에서 합체를 수행할 것이며, 그렇지 않다면 프로세스는 단계 560에서 압축을 진행할 것이다.In a preferred embodiment, when the number of distinct logical sectors in the update block exceeds a predetermined design parameter C D with a typical value that is half the size of the logical group, the closing process will perform coalescing in step 550, otherwise The process will proceed with the compression at step 560.

단계 550: 무순서 업데이트 블록이 합체되어야 할 것이라면, 원 블록 및 업데이트 블록은 합체된 데이터를 내포하는 새로운 표준 메타블록에 의해 대체될 것이다. 합체 후에 업데이트 스레드는 단계 570에서 끝날 것이다.Step 550: If the random update block is to be coalesced, the original block and the update block will be replaced by a new standard metablock containing the coalesced data. After coalescing, the update thread will end at step 570.

단계 560: 무순서 업데이트 블록이 압축될 것이라면, 압축된 데이터를 갖고 있는 새로운 업데이트 블록에 의해 대체될 것이다. 압축 후에 압축된 업데이트 블록의 처리는 단계 570에서 끝날 것이다. 대안적으로, 압축은 업데이트 블록이 다시 기입될 때까지 지연될 수 있고, 이에 따라 compaction에 이어 개재되는 업데이트들 없이 합체가 이어질 가능성을 제거한다. 새로운 업데이트 블록은 LGX에 업데이트를 위한 다음 요청이 단계 502에서 나타날 때 주어진 논리 블록을 또 업데이트하는데 사용될 것이다. Step 560: If the random update block is to be compressed, it will be replaced by a new update block with compressed data. Processing of the compressed update block after compression will end at step 570. Alternatively, compression can be delayed until the update block is rewritten, thus eliminating the possibility of coalescing following compaction and without intervening updates. The new update block will be used to update the given logical block again when the next request for update to LG X appears in step 502.

단계 570: 폐쇄 프로세스가 온전한 업데이트 블록을 생성할 때, 주어진 논리 그룹에 대한 새로운 표준 블록이 된다. 논리 그룹을 위한 업데이트 스레드는 종료될 것이다. 폐쇄 프로세스가 현존 블록을 대체하는 새로운 업데이트 블록을 생성할 때, 새로운 업데이트 블록은 주어진 논리 그룹에 대해 요청된 다음 업데이트를 기록하는데 사용될 것이다. 업데이트 블록이 폐쇄되지 않을 때, 처리는 LGX에서 업데이트를 위한 다음 요청이 단계 310에서 나타날 때 계속할 것이다.Step 570: When the closure process creates an intact 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 block, the new update block will be used to record the next update requested for a given logical group. When the update block is not closed, processing will continue when the next request for update in LG X appears in step 310.

위에 기술된 프로세스로부터 알 수 있는 바와 같이, 무순서 업데이트 블록이 폐쇄될 때, 이에 기록된 업데이트 데이터는 더 처리된다. 특히 이의 유효한 데이터는 또 다른 무순서 블록으로의 압축의 프로세스에 의해서, 또는 이의 연관된 원 블록에 합체로 새로운 표준 순차 블록을 형성하는 프로세스에 의해서 가비지 수거된다.As can be seen from the process described above, when the random update block is closed, the update data recorded therein is further processed. In particular its valid data is garbage collected by the process of compression into another random block, or by the process of forming a new standard sequential block incorporating its associated raw block.

도 11a는 도 10에 도시된 무순서 업데이트 블록을 폐쇄하는 합체 프로세스를 보다 상세히 도시한 흐름도이다. 무순서 업데이트 블록 합체는 업데이트 블록이 폐쇄되고 있을 때, 예를 들어 업데이트 블록이, 기입된 이 블록의 마지막 물리적 섹터로 모두 채워졌을 때 수행되는 2가지 가능한 프로세스들 중 하나이다. 합체는 블록 내 기입된 구별되는 논리 섹터들의 수가 소정의 설계 파라미터 CD를 초과할 때 선택된다. 도 10에 도시된 합체 프로세스 단계 550은 다음 하위 단계들을 포함한 다.11A is a flow diagram illustrating in more detail the coalescing process of closing the random update block shown in FIG. 10. Random update block coalescing is one of two possible processes that are performed when the update block is closing, for example when the update block is filled with all the last physical sectors of this block written. The coalescing is selected when the number of distinct logical sectors written in the block exceeds a predetermined design parameter C D. The coalescing process step 550 shown in FIG. 10 includes the following substeps.

단계 551: 무순서 업데이트 블록이 폐쇄되고 있을 때, 이를 대체하는 새로운 메트로블록이 할당될 것이다.Step 551: When the random update block is closing, a new metroblock to replace it will be allocated.

단계 552: 모든 폐용 섹터들은 무시하고, 무순서 업데이트 블록 및 이의 연관된 원 블록 중에서 각 논리 섹터의 가장 최신의 버전을 모은다. Step 552: Ignore all discarded sectors and collect the most recent version of each logical sector among the random update block and its associated original block.

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

단계 556: 원 블록을 새로운 온전한 블록으로 대체한다.Step 556: Replace the original block with a new intact block.

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

도 11b는 도 10에 도시된 무순서 업데이트 블록을 폐쇄하기 위한 압축 프로세스를 보다 상세히 도시한 흐름도이다. 압축은 블록에 기입된 서로 구별되는 논리 섹터의 개수가 소정의 설계 파라미터 CD 미만일 때 선택된다. 도 10에 도시된 압축 프로세스 단계 560은 다음 하위 단계들을 포함한다.FIG. 11B is a flow chart illustrating in more detail the compression process for closing the random update block shown in FIG. 10. Compression is selected when the number of distinct logical sectors written in the block is less than the predetermined design parameter C D. The compression process step 560 shown in FIG. 10 includes the following substeps.

단계 561: 무순서 업데이트 블록이 압축되고 있을 때, 이를 대체하는 새로운 메타블록이 할당될 것이다.Step 561: When the random update block is being compressed, a new metablock to replace it will be allocated.

단계 562: 압축될 현존 무순서 업데이트 블록 중에서 각 논리 섹터의 최신의 버전을 모은다. Step 562: Gather the latest version of each logical sector among the existing random update blocks to be compressed.

단계 564: 모아진 섹터들을 새로운 업데이트 블록에 기록하여 압축된 섹터들 을 갖는 새로운 업데이트 블록을 형성한다.Step 564: Write the collected sectors to a new update block to form a new update block with the compressed sectors.

단계 566: 현존 업데이트 블록을 압축된 섹터들을 갖는 새로운 업데이트 블록으로 대체한다.Step 566: Replace the existing update block with a new update block with compressed sectors.

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

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

도 12a는 논리 그룹의 모든 가능한 상태들, 및 여러 가지 동작들 하에서 이들 간에 가능한 전이(transition)를 도시한 것이다.12A shows all possible states of a logical group, and possible transitions between them under various operations.

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

1. 온전: 논리 그룹 내 모든 논리 섹터들은 아마도 감싸여진 페이지 태그를 사용하여, 논리적으로 순차적인 순서로 단일 메타블록에 기입되었다.1. Intact: All logical sectors in a logical group were written to a single metablock in a logically sequential order, perhaps with wrapped page tags.

2. 미기입: 논리 그룹 내 어떠한 논리 섹터도 기입된 적이 없다. 논리 그룹은 그룹 어드레스 테이블에 미기입으로서 마크되고 할당된 메타블록을 갖고 있지 않다. 기정의된 데이터 패턴은 이 그룹 내 모든 섹터에 대해 판독된 호스트에 응하여 리턴된다.2. Unwritten: No logical sectors in the logical group have been written. The logical group is marked as unwritten in the group address table and does not have an assigned metablock. The predefined data pattern is returned in response to the host read for all sectors in this group.

3. 순차적 업데이트: 논리 그룹 내 일부 섹터들은 아마도 페이지 태그를 사용하여, 메타블록에 논리적으로 순차적인 순서로 기입되었으며, 따라서, 이들은 그룹의 임의의 이전의 온전한 상태로부터 대응하는 논리 섹터들을 대체한다.3. Sequential Update: Some sectors in the logical group have been written in logically sequential order in the metablock, perhaps using page tags, thus replacing the corresponding logical sectors from any previous intact state of the group.

4. 무순서 업데이트: 논리 그룹 내 일부 섹터들은 아마도 페이지 태그를 사용하여, 메타블록에 논리적으로 비순차적인 순서로 기입되었으며, 따라서, 이들은 그룹의 임의의 이전의 온전한 상태로부터 대응하는 논리 섹터들을 대체한다. 그룹 내 섹터는 최신의 버전이 모든 이전 버전들을 대체하면서, 1회 이상으로 기입될 수도 있다.4. Out of order update: Some sectors in the logical group have been written logically in a non-sequential order in the metablock, perhaps using page tags, so that they replace the corresponding logical sectors from any previous intact state of the group. do. Sectors in a group may be written more than once, with the latest version replacing all previous versions.

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

도 13b는 메타블록의 가능한 상태들을 리스트한 테이블이다. 메타블록 상태들은 다음처럼 정의된다.13B is a table listing 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: The metablock probably uses page tags, where sectors are partially written in a logically sequential order. All sectors belong to the same logical group.

3. 무순서 업데이트: 메타블록은 논리적으로 비순차적 순서로 섹터들이 부분적으로 또는 전체적으로 기입된다. 임의의 섹터가 1회 이상 기입될 수 있다. 모든 섹터들은 동일 논리 그룹에 속한다.3. Out-of-order update: A metablock is where sectors are partially or wholly written in logically out of order. Any sector may be written more than once. All sectors belong to the same logical group.

4: 온전: 메타블록은 아마도 페이지 태그를 사용하여, 논리적으로 순차적인 순서로 전체적으로 기입된다.4: Intact: Metablocks are written globally in a logically sequential order, perhaps using page tags.

5: 원본: 메타블록은 이전에는 온전하였으나 적어도 한 섹터는 호스트 데이터 업데이트에 의해 폐용으로 되었다.5: Original: Metablock was previously intact, but at least one sector was obsolete by host data update.

도 14(a) 내지 도 14(j)는 논리 그룹의 상태에 그리고 물리 메타블록에 여러 가지 동작들의 영향을 보인 상태도들이다.14 (a) to 14 (j) are state diagrams showing the effects of various operations on the state of a logical group and the physical metablock.

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

도 14(b)는 제 1 온전 동작을 위한 논리 그룹 및 메타블록 전이들에 대응하는 상태도이다. 이전에 미기입된 순차적인 업데이트 논리 그룹은 모든 섹터들이 호스트에 의해 순차적으로 기입되었을 때 온전하게 된다. 또한, 전이는 나머지 미기입된 섹터들을 기정의된 데이터 패턴으로 채움으로써 그룹을 채운다면 일어날 수 있다. 메타블록은 온전히 된다.14 (b) is a state diagram corresponding to logical group and metablock transitions for the first sanity operation. The previously written sequential update logical group is intact when all sectors have been written sequentially by the host. Further, the transition can occur if the group is filled by filling the remaining unwritten sectors with a predefined data pattern. The metablock is intact.

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

도 14(d)는 제 1 압축 동작을 위한 논리 그룹 및 메타블록 전이들에 대응하는 상태도이다. 이전에 미기입된 무순서 업데이트 논리 그룹 내 모든 유효한 섹터들은 이전 블록으로부터 새로운 무순서 메타블록에 카피되고, 이 이전 블록은 이어서 소거된다.14 (d) is a state diagram corresponding to logical group and metablock transitions for the first compression operation. All valid sectors in a previously unordered random update logical group are copied from the previous block into a new random metablock, which is then erased.

도 14(e)는 제 1 합체 동작을 위한 논리 그룹 및 메타블록 전이들에 대응하는 상태도이다. 미기입된 무순서 업데이트 논리 그룹 내 모든 유효한 섹터들은 논리적으로 순차적인 순서로 새롭게 할당된 소거된 블록을 채우기 위해 이전 블록으로부터 옮겨진다. 호스트에 의해 미기입된 섹터들은 기정의된 데이터 패턴으로 채 워진다. 이어서 이전의 무순서 블록은 소거된다.14 (e) is a state diagram corresponding to logical group and metablock transitions for the first coalescing operation. All valid sectors in the unwritten random update logical group are moved from the previous block to fill the newly allocated erased block in a logically sequential order. Sectors not written by the host are filled with a predefined data pattern. The previous random block is then erased.

도 14(f)는 순차 기입 동작을 위한 논리 그룹 및 메타블록 전이들에 대응하는 상태도이다. 호스트는 논리적으로 순차적인 순서로 온전한 논리 그룹의 하나 이상의 섹터들을 새롭게 할당된 소거된 메타블록에 기입한다. 논리 그룹 및 메타블록은 순차적인 업데이트 상태로 간다. 이전에 온전한 메타블록은 원 메타블록이 된다.14 (f) is a state diagram corresponding to logical group and metablock transitions for a sequential write operation. The host writes one or more sectors of an intact logical group into the newly allocated erased metablock in logically sequential order. Logical groups and metablocks go into a sequential update state. Previously intact metablocks become original metablocks.

도 14(g)는 순차적인 채움 동작을 위해 논리 그룹 및 메타블록 전이들에 대응하는 상태도이다. 순차적인 업데이트 논리 그룹은 모든 이의 섹터들이 순차적으로 호스트에 의해 기입될 때 온전히 된다. 또한, 이것은 순차적인 업데이트 논리 그룹이 온전하게 되게 하기 위해서 원 블록으로부터 유효한 섹터들로 채워질 때 가비지 소거 동안 일어날 수 있고, 그 후에 원 블록은 소거된다.14 (g) is a state diagram corresponding to logical group and metablock transitions for sequential filling operation. The sequential update logical group is intact when all its sectors are sequentially written by the host. In addition, this may occur during garbage erasing when the sequential update logical group is filled with valid sectors from the original block in order to be intact, after which the original block is erased.

도 14(h)는 비순차 기입 동작을 위한 논리 그룹 및 메타블록 전이들에 대응하는 상태도이다. 순차 업데이트 논리 그룹은 적어도 한 섹터가 호스트에 의해 비순차적으로 기입될 때 무순서가 된다. 비순차 섹터 기입들은 업데이트 블록 또는 대응하는 원 블록 내 유효한 섹터들이 폐용이 되게 할 수도 있다.14 (h) is a state diagram corresponding to logical group and metablock transitions for an out of order write operation. The sequential update logical group is out of order when at least one sector is written out of order by the host. Out of order sector writes may cause valid sectors in the update block or the corresponding original block to be discarded.

도 14(i)는 압축 동작을 위한 논리 그룹 및 메타블록 전이들에 대응하는 상태도이다. 무순서 논리 그룹 내 모든 유효한 섹터들은 이전 블록으로부터 새로운 무순서 메타블록에 카피되고, 이 이전 블록은 이어서 소거된다. 원 블록은 영향을 받지 않는다.14 (i) is a state diagram corresponding to logical group and metablock transitions for the compression operation. All valid sectors in the randomized logical group are copied from the previous block into a new randomized metablock, which is then erased. The original block is not affected.

도 14(j)는 합체 동작을 위한 논리 그룹 및 메타블록 전이들에 대응하는 상 태도이다. 무순서 업데이트 논리 그룹 내 모든 유효한 섹터들은 새롭게 할당된 소거된 블록을 논리적으로 순차적인 순서로 채우기 위해서 이전 무순서 블록 및 원 블록으로부터 카피된다. 이어서 이전 무순서 블록 및 원 블록은 소거된다.14 (j) is a phase attitude corresponding to logical group and metablock transitions for coalescing operation. All valid sectors in the random update logical group are copied from the previous random blocks and the original block to fill the newly allocated erased blocks in a logically sequential order. The previous random block and the original block are then erased.

업데이트update 블록 추적 및 관리 Block tracking and management

도 15는 개방된 및 폐쇄된 업데이트 블록들 그리고 할당을 위해 소거된 블록들을 추적하기 위한 할당 블록 리스트(ABL)의 구조의 바람직한 실시예를 도시한 것이다. 할당 블록 리스트(ABL)(610)는 제어기 RAM(130)에 유지되어, 소거된 블록들, 할당된 업데이트 블록들, 연관된 블록들 및 제어 구조들의 할당의 관리를 할 수 있게 하며, 정확한 논리 대 물리 어드레스 변환을 할 수 있게 한다. 바람직한 실시예에서, ABL은 소거된 블록들의 리스트, 개방된 업데이트 블록 리스트(614) 및 폐쇄된 업데이트 블록 리스트(616)를 포함한다.Figure 15 shows a preferred embodiment of the structure of an allocation block list (ABL) for tracking open and closed update blocks and blocks erased for allocation. An allocation block list (ABL) 610 is maintained in the controller RAM 130 to enable management of the allocation of erased blocks, allocated update blocks, associated blocks and control structures, and provides accurate logic to physical Enable address translation. 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는 연관된 원 블록의 메타블록 어드레스이다. 페이지 Tag0은 연관된 원 블록의 페이지 태그이다.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 to which the update metablock is currently dedicated. Sequential / out of order is a state indicating whether the update block has been filled with sequential or out of order update data. 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 represents the number of sectors currently written to the update block. MB 0 is the metablock address of the associated original block. Page Tag 0 is the page tag of the associated circle block.

폐쇄된 업데이트 블록 리스트(616)는 할당 블록 리스트(ABL)의 일부이다. 이것은 폐쇄된 업데이트 블록의 속성들과 함께 ABL 내 한 세트의 블록 엔트리들이다. 폐쇄된 업데이트 블록 리스트는, 폐쇄되었지만 엔트리가 논리 대 주 물리 디렉토리에 업데이트되어 있지 않은 각각의 데이터 업데이트 블록에 대한 한 엔트리를 갖는다. 각각의 엔트리는 다음 정보를 유지한다. LG는 현재 업데이트 블록이 전용되는 논리 그룹 어드레스이다. MB는 업데이트 블록의 메타블록 어드레스이다. 페이지 태그는 업데이트 블록의 제 1 물리적 위치에 기록된 시작 논리 섹터이다. MB0는 연관된 원 블록의 메타블록 어드레스이다.The closed update block list 616 is part of the allocation block list ABL. This is a set of block entries in the ABL with the attributes of the closed update block. The closed update block list has one entry for each data update block that is closed but the entry is not updated in the logical versus primary physical directory. Each entry holds the following information: LG is the logical group address to which 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 Index

순차 업데이트 블록은 논리적으로 순차적인 순서로 저장된 데이터를 가지며, 이에 따라 블록 중에 임의의 논리적 섹터가 쉽게 찾아질 수 있다. 무순서 업데이트 블록은 순서없이 저장된 자신의 논리 섹터들을 가지며 논리적 섹터의 복수의 업데이트 발생들을 저장할 수도 있다. 각 유효 논리 섹터가 무순서 업데이트 블록 내 어디에 위치하여 있는가를 추적하기 위해 추가의 정보가 유지되어야 한다.Sequential update blocks have data stored in a logically sequential order, so that any logical sector in the block can be easily found. The random update block has its logical sectors stored out of order and may store a plurality of update occurrences of the logical sector. Additional information must be maintained to track where each valid logical sector is located in the random update block.

바람직한 실시예에서, 무순서 블록 색인 데이터 구조들은 무순서 블록 내 모든 유효한 섹터들의 추적 및 빠른 액세스를 할 수 있게 한다. 무순서 블록 색인은 작은 영역들의 논리 어드레스 공간을 독립적으로 관리하며, 사용자 데이터의 시스 템 데이터 및 핫 영역들을 효율적으로 취급한다. 색인 데이터 구조들은 근본적으로 빈번하지 않은 업데이트 요구조건을 갖고 플래시 메모리에 색인 정보가 유지될 수 있게 하므로 수행은 현저하게 영향을 받지 않는다. 반면, 무순서 블록들 내 최근 기입된 섹터들의 리스트들은 제어기 RAM 내 무순서 섹터 리스트에 유지된다. 또한, 어드레스 변환을 위한 플래시 섹터 액세스들의 수를 최소화하기 위해서 플래시 메모리로부터 색인 정보의 캐시는 제어기 RAM에 유지된다. 각각의 무순서 블록을 위한 색인들은 플래시 메모리 내 무순서 블록 색인(CBI) 섹터들에 저장된다.In the preferred embodiment, the random block index data structures allow for fast access and tracking of all valid sectors in the random block. The random block index manages the logical address space of small areas independently, and efficiently handles system data and hot areas of user data. Performance is not significantly affected since index data structures have inherently infrequent update requirements and allow index information to be maintained in flash memory. On the other hand, the list of recently written sectors in the random blocks are 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 for address translation. Indexes for each random block are stored in random block index (CBI) sectors in flash memory.

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

도 16b는 무순서 블록 색인(CBI) 섹터들이 전용의 메타블록에 기록되는 예를 도시한 것이다. 전용의 메타블록은 CBI 블록(620)이라 언급될 것이다. CBI 섹터가 업데이트될 때, CBI 블록(620) 내 다음 가용한 물리 섹터 위치에 기입된다. 그러므로 CBI 섹터의 복수의 카피들이 CBI 블록 내 존재할 수 있고, 단지 마지막 기입된 카피만이 유효하다. 예를 들면 논리 그룹 LG1에 대한 CBI 섹터는 3회 업데이트되었 으며 최신 버전이 유효한 것이다. CBI 블록 내 각각의 유효한 섹터의 위치는 블록 내 마지막 기입된 CBI 섹터에 한 세트의 색인들에 의해 확인된다. 이 예에서, 블록에 마지막 기입된 CBI 섹터는 LG136에 대한 CBI 섹터이며 이의 한 세트의 색인들은 모든 이전 것들을 대체하는 유효한 것이다. CBI 블록이 종국에 CBI 섹터들로 모두 채워지게 되었을 때, 블록은 모든 유효한 섹터들을 새로운 블록 위치에 재기입함으로써 제어 기입 동작 동안 압축된다. 이어서 전체 블록은 소거된다.16B illustrates an example where random block index (CBI) sectors are written to a dedicated metablock. The dedicated metablock will be referred to as CBI block 620. When the CBI sector is updated, it is written to the next available physical sector location in the CBI block 620. Therefore, multiple copies of the CBI sector can exist in the CBI block, only the last written copy is valid. For example, the CBI sector for logical group LG 1 has been updated three times and the latest version is valid. 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 example, the last CBI sector written to the block is the CBI sector for LG 136 and its set of indices is valid to replace all previous ones. When the CBI block eventually becomes full with CBI sectors, the block is compressed during the control write operation by rewriting all valid sectors to the new block position. The entire 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 sub-group that maps to the logical group or random update block. Each index entry represents an offset in the random update block in which valid data for the corresponding logical sector is located. 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 that records address parameter information for the block that exists in the system. Information in this field is only valid for the last sector written in the CBI block. This information is also in the data structures in RAM.

각 무순서 업데이트 블록에 대한 엔트리는 3개의 어드레스 파라미터들을 포함한다. 첫 번째는 무순서 업데이트 블록에 연관된 논리 그룹(또는 논리 그룹 번 호)의 논리 어드레스이다. 두 번째는 무순서 업데이트 블록의 메타블록 어드레스이다. 세 번째는 무순서 업데이트 블록에 기입된 마지막 섹터의 물리 어드레스 오프셋이다. 오프셋 정보는 초기화 동안 무순서 업데이트 블록의 스캐닝을 하기 위한 시작 지점을 설정하여, RAM에 데이터 구조들을 재구축한다.The entry for each random update block contains three address parameters. The first is the logical address of the logical group (or logical group number) associated with the random update block. The second is the metablock address of the random update block. The third is the physical address offset of the last sector written to the random update block. The offset information sets the starting point for scanning of the random update block during initialization, rebuilding the 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 in the CBI block in which the most recently written CBI sectors associated with each allowed random update block are located. The reserved value of the offset in the index indicates that no random update block allowed.

도 16c는 무순서 업데이트되는 주어진 논리 그룹의 논리 섹터의 데이터에의 액세스를 도시한 흐름도이다. 업데이트 프로세스 동안에, 업데이트 데이터는 무순서 업데이트 블록에 기록되고 반면에 변경되지 않은 데이터는 논리 그룹에 연관된 원 메타블록에 남아 있는다. 무순서 업데이트 하에 논리 그룹의 논리 섹터에 액세스하는 프로세스는 다음과 같다.16C is a flow diagram illustrating access to data of logical sectors of a given logical group being updated in random order. During the update process, the update data is written to the random update block while the unchanged data remains 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: Start searching for a given logical sector of a given logical group.

단계 652: CBI 블록 내 마지막 기입된 CBI 섹터를 찾는다.Step 652: Find the last written CBI sector in the CBI block.

단계 654: 마지막 기입된 CBI 섹터의 무순서 블록 정보 필드를 조회함으로써 주어진 논리 그룹에 연관된 무순서 업데이트 블록 또는 원 블록을 찾는다. 이 단계는 단계 662 바로 전 임의의 시간에 수행될 수 있다.Step 654: Find the random update block or original block associated with the given logical group by querying 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 relates to a given logical group, the CBI sector is found. Proceed to step 662, otherwise proceed to step 660.

단계 660: 마지막 기입된 CBI 섹터의 섹터 색인 필드를 조회함으로써 주어진 논리 그룹에 대한 CBI 섹터를 찾는다.Step 660: Find the CBI sector for the given logical group by looking up the sector index field of the last written CBI sector.

단계 662: 찾아진 CBI 섹터의 무순서 블록 색인 필드를 조회함으로써 무순서 블록 또는 원 블록 중에서 주어진 논리 섹터를 찾는다.Step 662: Search for a given logical sector among random blocks or original blocks by querying the random block index field of the found CBI sector.

도 16d는 논리 그룹이 하위 그룹들로 분할된 대안적 실시예에 따라, 무순서 업데이트되는 주어진 논리 그룹의 논리 섹터의 데이터에의 액세스를 도시한 흐름도이다. CBI 섹터의 유한한 용량은 소정의 최대 개수의 논리 섹터만을 추적할 수 있다. 논리 그룹이 단일 CBI 섹터가 취급할 수 있는 것보다 더 많은 논리 섹터들을 가질 때, 논리 그룹은 복수의 하위 그룹들로 분할되고 CBI 섹터는 각 하위 그룹에 할당된다. 일 예에서, 각 CBI 섹터는 256 섹터들과 최대 8개의 무순서 블록들로 구성된 논리 그룹을 추적하기 위한 충분한 용량을 갖는다. 논리 그룹이 256 섹터들을 초과하는 크기를 갖는다면, 논리 그룹 내 256 섹터의 하위 그룹에 대해 별도의 CBI 섹터가 존재한다. 논리 그룹 내 최대 8개의 하위 그룹들에 대해 CBI 섹터들이 존재하여, 크기가 최대 2048 섹터들까지의 논리 그룹들에 대해 지원을 제공한다.FIG. 16D is a flow diagram illustrating access to data of a logical sector of a given logical group being randomly updated, according to an alternative embodiment where the logical group is divided into subgroups. The finite capacity of a CBI sector can only track a certain maximum number of logical sectors. When a logical group has more logical sectors than a single CBI sector can handle, the logical group is divided into a plurality of subgroups and a CBI sector is assigned to each subgroup. In one example, each CBI sector has sufficient capacity to track a logical group of 256 sectors and up to eight random blocks. If the logical group has a size exceeding 256 sectors, there is a separate CBI sector for a subgroup of 256 sectors in the logical group. CBI sectors exist for up to eight subgroups within a logical group, providing support for logical groups up to 2048 sectors in size.

바람직한 실시예에서, 색인의 관리를 용이하게 하기 위해서 간접 색인 방법이 채용된다. 섹터 색인의 각 엔트리는 직접 및 간접 필드들을 갖는다.In a preferred embodiment, an indirect indexing method is employed to facilitate the management of the index. Each entry in the sector index has direct and indirect fields.

직접 섹터 색인은 특정 무순서 업데이트 블록에 관계된 모든 가능한 CBI 섹터들이 위치되는 CBI 블록 내 오프셋들을 정의한다. 이 필드 내 정보는 이 특정의 무순서 업데이트 블록에 관계된 마지막 기입된 CBI 섹터에서만 유효하다. 색인 내 오프셋의 유보된 값은 무순서 업데이트 블록에 관계된 대응하는 논리 하위 그룹이 존재하지 않기 때문에, 또는 업데이트 블록이 할당되어 있지 않아 업데이트되지 않았기 때문에 존재하지 않음을 나타낸다.The direct sector index defines the offsets in the CBI block where all possible CBI sectors related to a particular random update block are located. Information in this field is only valid for the last written CBI sector associated with this particular random update block. The reserved value of the offset in the index indicates that it does not exist because the corresponding logical subgroup related to the randomized update block does not exist, or because the update block is not allocated and has not been updated.

간접 섹터 색인은 각 허용된 무순서 업데이트 블록에 관계된 가장 최근 기입된 CBI 섹터들이 위치된 CBI 블록 내 오프셋들을 정의한다. 색인에 오프셋의 유보된 값은 허용된 무순서 업데이트 블록이 존재하지 않음을 나타낸다.The indirect sector index defines the offsets in the CBI block where the most recently written CBI sectors associated with each allowed random update block are located. The reserved value of the offset in the index indicates that no allowed random update block exists.

도 16d는 다음과 같이 무순서 업데이트 하의 논리 그룹의 논리 섹터에 액세스하는 프로세스를 도시한 것이다.16D illustrates a process of accessing logical sectors in a logical group under random update as follows.

단계 670: 각 논리 그룹을 복수의 하위 그룹들로 분할하고 각 하위 그룹에 CBI 섹터를 할당한다.Step 670: Divide each logical group into a plurality of subgroups and assign a CBI sector to each subgroup.

단계 680: 주어진 논리 그룹의 주어진 하위 그룹의 주어진 논리 섹터를 찾기를 시작한다. Step 680: Start searching for a given logical sector of a given subgroup of a given logical group.

단계 682: CBI 블록 내 마지막 기입된 CBI 섹터를 찾는다.Step 682: Find the last written CBI sector in the CBI block.

단계 684: 마지막 기입된 CBI 섹터의 무순서 블록 정보 필드를 조회함으로써 주어진 하위 그룹에 연관된 무순서 업데이트 블록 또는 원 블록을 찾는다. 이 단계는 단계 696 바로 전 임의의 시간에 수행될 수 있다.Step 684: Find the randomized update block or original block associated with the given subgroup by querying the randomized block information field of the last written CBI sector. This step may be performed at any time immediately before step 696.

단계 686: 마지막 기입된 CBI 섹터가 주어진 논리 그룹에 관계된다면, 단계 691로 진행하며, 그렇지 않다면 단계 690으로 진행한다.Step 686: If the last written CBI sector relates to the given logical group, go to step 691, otherwise proceed to step 690.

단계 690: 마지막 기입된 CBI 섹터의 간접 섹터 색인 필드를 조회함으로써 주어진 논리 그룹에 대한 마지막 기입된 복수의 CBI 섹터들을 찾는다.Step 690: Find the last written plurality of CBI sectors for a given logical group by querying the indirect sector index field of the last written CBI sector.

단계 691: 주어진 논리 그룹에 대한 하위 그룹들 중 하나에 연관된 적어도 CBI 섹터가 찾아졌다. 계속한다.Step 691: At least a CBI sector associated with one of the subgroups for a given logical group has been found. Continue.

단계 692: 찾아진 CBI 섹터가 주어진 하위 그룹에 관계되었다면, 주어진 하위 그룹에 대한 CBI 섹터가 찾아진다. 단계 696으로 진행한다. 그렇지 않다면, 단계 694로 진행한다.Step 692: If the found CBI sector is related to a given subgroup, then the CBI sector for the given subgroup is found. Proceed to step 696. Otherwise, go to Step 694.

단계 694: 현재 찾아진 CBI 섹터의 직접 섹터 색인 필드를 조회함으로써 주어진 하위 그룹에 대한 CBI 섹터를 찾는다.Step 694: Find the CBI sector for the given subgroup by querying the direct sector index field of the currently found CBI sector.

단계 696: 주어진 하위 그룹에 대한 CBI 섹터의 무순서 블록 색인 필드를 조회함으로써 무순서 블록 또는 원 블록 중에서 주어진 논리 섹터를 찾는다.Step 696: Find a given logical sector among random blocks or original blocks by querying the random block index field of the CBI sector for a given subgroup.

도 16e는 각각의 논리 그룹이 복수의 하위 그룹들로 분할되는 실시예에 있어서 무순서 블록 색인(CBI) 섹터들 및 이들의 기능들의 예들을 도시한 것이다. 논리 그룹(700)은 원래는 원 메타블록(702)에 저장된 자신의 온전 데이터를 갖는다. 이어서 논리 그룹에는 전용의 무순서 업데이트 블록(704)을 할당하는 업데이트들이 행해진다. 현 예에서, 논리 그룹(700)은 하위 그룹들로 분할되며 이러한 하위 그룹 A, B, C, D 각각은 256 섹터들을 갖는다.16E illustrates examples of random block index (CBI) sectors and their functions in an embodiment where each logical group is divided into a plurality of subgroups. Logical group 700 originally has its own intact data stored in the original metablock 702. Updates are then made to the logical group to assign a dedicated random update block 704. In the present example, logical group 700 is divided into subgroups, each of these subgroups A, B, C, D having 256 sectors.

하위 그룹 B에서 i번째 섹터를 찾기 위해서, CBI 블록(620)에 마지막 기입된 CBI 섹터가 먼저 찾아진다. 마지막 기입된 CBI 섹터의 무순서 블록 정보 필드는 주어진 논리 그룹에 대한 무순서 업데이트 블록(704)을 찾기 위해 어드레스를 제공한다. 동시에 이것은 무순서 블록에 기입된 마지막 섹터의 위치를 제공한다. 이 정보는 색인들을 스캐닝하고 재구축하는 경우 유용하다.To find the i-th sector in subgroup B, the last CBI sector written to CBI block 620 is first found. The Random Block Information field of the last written CBI sector provides an address to find the random update block 704 for a given logical group. At the same time this gives the position of the last sector written to the random block. This information is useful when scanning and rebuilding indexes.

마지막 기입된 CBI 섹터가 주어진 논리 그룹의 4개의 CBI 섹터들 중 하나인 것으로 판명되면, 이것은 이것이 정확히, i번째 논리 섹터를 내포하는 주어진 하위 그룹 B에 대한 CBI 섹터인지 더 판정될 것이다. 그러하다면, CBI 섹터의 무순서 블록 색인은 i번째 논리 섹터에 대한 데이터를 저장하기 위한 메타블록 위치를 가리킬 것이다. 섹터 위치는 무순서 업데이트 블록(704) 또는 원 블록(702)에 있을 수도 있을 것이다.If the last written CBI sector turns out to be one of the four CBI sectors of a given logical group, it will be further determined if this 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 for storing 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)에 대한 것은 아니라면, 이의 직접 섹터 색인이 조회되어 하위 그룹 B에 대한 CBI 섹터를 찾는다. 일단 이 정확한 CBI 섹터가 찾아지면, 이의 무순서 블록 색인이 조회되어 무순서 업데이트 블록(704) 및 원 블록(702) 중에서 i번째 논리 섹터를 찾는다.If the last written CBI sector turns out to be one of the four CBI sectors of a given logical group but is not exactly for subgroup B, its direct sector index is queried to find the CBI sector for subgroup B. Once this correct CBI sector is found, its random block index is queried to find the i th logical sector among random update block 704 and original block 702.

마지막 기입된 CBI 섹터가 주어진 논리 그룹의 4개의 CBI 섹터들 중 어느 하나도 아닌 것으로 판명되면, 이의 간접 섹터 색인이 조회되어 4개 중 하나를 찾는다. 도 16e에 도시된 예에서, 하위 그룹 C에 대한 CBI 섹터가 찾아진다. 이어서 하위 그룹 C에 대한 이 CBI 섹터는 하위 그룹 B에 대한 정확한 CBI 섹터를 찾기 위해 조회된 자신의 직접 섹터 색인을 갖는다. 예는 그의 무순서 블록 색인이 조회될 때, i번째 논리 섹터는 변경되지 않은 것으로 발견되고 이의 유효한 데이터는 원 블록에서 찾아질 것임을 보여준다.If the last written CBI sector turns out to be none of the four CBI sectors of a given logical group, its indirect sector index is queried to find one of four. In the example shown in FIG. 16E, the CBI sector for subgroup C is found. This CBI sector for subgroup C then has its own direct sector index queried to find the correct CBI sector for subgroup B. The example shows that when its random block index is queried, the i th logical sector is found unchanged and its valid data will be found in the original block.

유사한 고찰이 주어진 논리 그룹의 하위 그룹 C에 j 번째 논리 섹터를 찾는데 적용된다. 예는 마지막 기입된 CBI 섹터가 주어진 논리 그룹의 4개의 CBI 섹터들 중 어느 하나도 아닌 것으로 판명됨을 보여준다. 이의 간접 섹터 색인은 주어진 그룹에 대한 4개의 CBI 섹터들 중 하나를 가리킨다. 가리켜진 4개 중 마지막 기입된 것은 정확히 하위 그룹 C에 대한 CBI 섹터인 것으로 판명된다. 이의 무순서 블록 색인이 조회되었을 때, 7번째 논리 섹터는 무순서 업데이트 블록(704)에 지정된 위치에 위치된 것으로 발견된다.Similar considerations apply to finding the j th logical sector in subgroup C of a given logical group. The example shows that the last written CBI sector turns out to be none of the four CBI sectors of a given logical group. Its indirect sector index points to one of four CBI sectors for a given group. The last of the four points indicated turns out to be exactly the CBI sector for subgroup C. When its random block index is queried, the seventh logical sector is found to be located at the location specified in the random update block 704.

무순서 섹터들의 리스트는 시스템 내 각각의 무순서 업데이트 블록에 대해 제어기 RAM에 존재한다. 각각의 리스트는 관계된 CBI 섹터가 플래시 메모리에 마지막 업데이트되었기 때문에 무순서 업데이트 블록에 기입된 섹터들의 기록을 내포한다. 무순서 섹터 리스트에 유지될 수 있는 특정 무순서 업데이트 블록에 대한 논리 섹터 어드레스들의 수는 8 내지 16의 전형적인 값을 갖는 설계 파라미터이다. 리스트의 최적 크기는 이것이 무순서 데이터-기입 동작들에 대한 오버헤드에의 영향과 초기화 동안 섹터 스캐닝 시간간에 절충으로서 결정된다.The list of random sectors is in the controller RAM for each random update block in 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 sector addresses for a particular random update block that can be maintained in the random sector list is a design parameter with typical values of 8-16. The optimal size of the list is determined as a compromise between the impact on overhead for random data-write operations and the 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 the previous update of one of its associated CBI sectors. The random sector list in the controller RAM for each random update block is constructed. Each block only needs to be scanned into the last written CBI sector from the last sector address defined in its random block information field.

무순서 업데이트 블록이 할당될 때, CBI 섹터는 모든 업데이트된 논리 하위 그룹들에 대응하여 기입된다. 무순서 업데이트 블록에 대한 논리 및 물리 어드레스들은 무순서 블록 색인 필드에 눌(null) 엔트리들을 갖고, 섹터 내 가용 무순서 블록 정보 필드에 기입된다. 무순서 섹터 리스트는 제어기 RAM에서 개방된다. When a random update block is allocated, the CBI sector is written corresponding to all updated logical subgroups. The logical and physical addresses for the random update block have null entries in the random block index field and are written to the available random block information field in the sector. The random sector list is opened in the controller RAM.

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

제어기 RAM 내 대응하는 무순서 섹터 리스트는 무순서 업데이트 블록에 기입된 섹터들의 기록들을 포함하게 수정된다. 제어기 RAM 내 무순서 섹터 리스트가, 무순서 업데이트 블록에 추가의 섹터 기입들의 기록들을 위한 가용한 공간이 없을 때, 업데이트된 CBI 섹터들은 리스트에 섹터들에 관계된 논리 하위 그룹들에 대해 기입되고 리스트는 클리어된다.The corresponding random sector list in the controller RAM is modified to include the records of the sectors written to the random update block. When there is no ordered sector list in the controller RAM, there is no space available for writing of additional sector writes in the ordered update block, the updated CBI sectors are written for the logical subgroups related to the sectors in the list and the list is Cleared.

CBI 블록(620)이 완전히 채워지게 되었을 때, 유효한 CBI 섹터들은 할당된 소거된 블록에 카피되고, 이전 CBI 블록은 소거된다.When the CBI block 620 is fully filled in, valid CBI sectors are copied into the allocated erased block, and the previous CBI block is erased.

어드레스 테이블들Address tables

도 2에 도시된 논리 대 물리 어드레스 변환 모듈(140)은 호스트의 논리 어드레스를 플래시 메모리 내 대응하는 물리 어드레스에 관계시키기 위한 것이다. 논리 그룹들과 물리 그룹들(메타블록들)간에 맵핑은 비휘발성 플래시 메모리(200) 그리고 휘발성이지만 더 고속의 RAM(130)(도 1 참조) 중에 분포된 한 세트의 테이블 및 리스트들에 저장된다. 어드레스 테이블은 메모리 시스템 내 모든 논리 그룹에 대한 메타블록 어드레스를 포함하여, 플래시 메모리에 유지된다. 또한, 최근 기입된 섹터들에 대한 논리 대 물리 어드레스 기록들은 임시로 RAM에 유지된다. 이들 휘발성 기록들은 시스템이 기동후 초기화되었을 때 플래시 메모리 내에 블록 리스트들 및 데이터 섹터 헤더들로부터 재구성될 수 있다. 이에 따라, 플래시 메모리 내 어드레 스 테이블은 단지 드물게만 업데이트될 필요가 있어, 제어 데이터에 대한 낮은 퍼센티지의 오버헤드 기입 동작들에 이르게 한다. The logical-to-physical address translation module 140 shown in FIG. 2 is for associating a logical address of a host with a corresponding physical address in flash memory. The mapping between logical groups and physical groups (metablocks) is stored in a set of tables and lists distributed among nonvolatile flash memory 200 and volatile but faster RAM 130 (see FIG. 1). . The address table is maintained in flash memory, including metablock addresses for all logical groups in 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 block lists and data sector headers in flash memory when the system is initialized after startup. Thus, the address table in flash memory only needs to be updated infrequently, leading to low percentage overhead write operations for control data.

논리 그룹들에 대한 어드레스 기록들의 계층은 개방된 업데이트 블록 리스트, RAM 내 폐쇄된 업데이트 블록 리스트, 및 플래시 메모리에 유지된 그룹 어드레스 테이블(GAT)를 포함한다.The hierarchy of address writes for 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 in the controller RAM 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 in the controller RAM of the closed data update blocks. Some of the entries in the list are moved to sectors in the group address table during the 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 in the memory system. The GAT contains one entry for each logical group, in sequential order according to logical address. The nth entry in the GAT contains the metablock address for the logical group with address n. In a preferred embodiment, this is a table in flash memory, comprising a set of sectors (called GAT sectors) with entries defining metablock addresses for all logical groups in the memory system. GAT sectors are located in one or more dedicated control blocks (called GAT blocks) in flash memory.

도 17a는 그룹 어드레스 테이블(GAT) 섹터의 데이터 필드들을 도시한 것이 다. GAT 섹터는 예를 들면 한 세트의 128개의 연속한 논리 그룹들에 대한 GAT 엔트리들을 포함하는데 충분한 용량을 가질 수 있다. 각각의 GAT 섹터는 2개의 성분들, 즉 한 범위 내 각 논리 그룹의 메타블록 어드레스에 대한 한 세트의 GAT 엔트리들, 및 GAT 섹터 색인을 포함한다. 제 1 성분은 논리 어드레스에 연관된 메타블록을 찾기 위한 정보를 포함한다. 제 2 성분은 GAT 블록 내 모든 유효한 GAT 섹터들을 찾기 위한 정보를 포함한다. 각 GAT 엔트리는 3개의 필드들, 즉 메타블록 번호, 도 3a(iii)에 관련하여 앞에서 정의된 바와 같은 페이지 태그, 및 메타블록이 다시 링크되었는지를 나타내는 플래그를 갖는다. GAT 섹터 색인은 GAT 블록 내 유효한 GAT 섹터들의 위치들을 리스트한다. 이 색인은 모든 GAT 섹터에 있으나 GAT 블록 내 다음 기입된 GAT 섹터의 버전에 의해 대체된다. 이에 따라서, 마지막 기입된 GAT 섹터 내 버전만이 유효하다.17A illustrates data fields of a group address table (GAT) sector. The GAT sector may have sufficient capacity to contain, for example, GAT entries for a set of 128 consecutive logical groups. Each GAT sector includes two components, a set of GAT entries for the metablock address of each logical group in a range, and a GAT sector index. The first component includes information for finding a metablock associated with the logical address. The second component contains information for finding all valid GAT sectors in the GAT block. Each GAT entry has three fields, a metablock number, a page tag as defined above with respect to FIG. 3A (iii), and a flag indicating whether the metablock has been linked again. The GAT sector index lists the locations 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. Accordingly, only the version in the last written GAT sector is valid.

도 17b는 그룹 어드레스 테이블(GAT) 섹터들이 하나 이상의 GAT 블록에 기록되는 예를 도시한 것이다. GAT 블록은 GAT 섹터들을 기록하는데 전용되는 메타블록이다. GAT 섹터가 업데이트될 때, 이것은 GAT 블록(720) 내 다음 가용한 물리적 섹터 위치에 기입된다. 그러므로 GAT 섹터의 복수의 카피들이 GAT 블록에 존재하며, 마지막 기입된 카피만이 유효하다. 예를 들면, GAT 섹터(255)(논리 그룹들(LG3968 ~ LG4098)에 대한 포인터들을 포함하는)는 적어도 2회 업데이트 되었으며 최신 버전이 유효한 것이다. GAT 블록에 각각의 유효한 섹터의 위치는 블록 내 마지막 기입된 GAT 섹터 내 한 세트의 색인들에 의해 확인된다. 이 예에서, 블록 내 마지막 기입 된 GAT 섹터는 GAT 섹터(236)이며 이의 한 세트의 색인들은 모든 이전 것들을 대체하는 유효한 색인이다. GAT 블록이 결국에 GAT 섹터들로 완전히 채워지게 되었을 때, 블록은 모든 유효한 섹터들을 새로운 블록 위치에 재기입함으로써 제어 기입 동작 동안 압축된다. 이어서 전체 블록은 소거된다.17B illustrates an example in which group address table (GAT) sectors are written to one or more GAT blocks. The GAT block is a metablock dedicated to recording GAT sectors. When the GAT sector is updated, it is written to the next available physical sector location in the GAT block 720. Therefore, multiple copies of the GAT sector exist 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 and the latest version is valid. The location of each valid sector in the GAT block is identified by a set of indices in the last written GAT sector in the block. In this example, the last written GAT sector in the block is the GAT sector 236 and its set of indexes is a valid index that replaces all previous ones. When the GAT block eventually becomes completely filled with GAT sectors, the block is compressed during the control write operation by rewriting all valid sectors to the new block position. The entire 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, a GAT block contains entries for a set of groups that are logically contiguous in the area of the logical address space. Each of the GAT sectors in the GAT block contains logical to physical mapping information for 128 consecutive 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. Therefore, the GAT sector can be updated by writing it to the next available sector location in the block. The index of all valid GAT sectors and the position of these sectors in the GAT block is kept in the index field in the most recently written GAT sector. The portion of the total sectors in the GAT block occupied by valid GAT sectors is a system design parameter that is typically 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 블록 내 다음 가용한 섹터 위치에 기입된다.The GAT update is performed as part of the control write operation, which is triggered when the ABL runs out of blocks for allocation (see Figure 18). This is done concurrently with ABL fill and CBL empty operations. During a GAT update operation, one GAT sector has entries updated with information 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 in 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 rewrite operation occurs during the control write operation when no sector position can be obtained for the updated GAT sector. A new GAT block is allocated and valid GAT sectors defined by the GAT index are copied in sequential order from the full GAT block. The filled GAT block is then erased.

GAT 캐시는 GAT 섹터 내 128개의 엔트리들의 세분할에 엔트리들의, 제어기 RAM(130) 내 카피이다. GAT 캐시 엔트리들의 수는 32의 전형적인 값을 갖는 시스템 설계 파라미터이다. 엔트리가 GAT 섹터로부터 읽혀질 때마다 관계된 섹터 세분할을 위한 GAT 캐시가 생성된다. 복수의 GAT 캐시들이 유지된다. 수는 4의 전형적인 값을 갖는 설계 파라미터이다. GAT 캐시는 최근 최소 사용된 것에 기초하여 상이한 섹터 세분할에 대한 엔트리로 덮어써진다.The GAT cache is a copy in controller RAM 130, of entries in subdivisions of 128 entries in the GAT sector. The number of GAT cache entries is a system design parameter with a typical value of 32. Each time an entry is read from a GAT sector, a GAT cache is created for the relevant sector subdivision. Multiple GAT caches are maintained. Number is a design parameter with a typical value of four. The GAT cache is overwritten with entries for different sector subdivisions based on the last least 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 using a set of lists for maintaining directories and system control information. These lists are distributed among the controller RAM 130 and the flash memory 200. When an erased metablock is to be allocated for storage of user data or for 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 a metablock is erased after it is discarded, its number is added to the cleared block list CBL which is also maintained in the controller RAM. Relatively static directories and system control data are stored in flash memory. These include erased block lists and a bitmap MAP listing the erased state of all metablocks in flash memory. The erased block lists and the MAP are stored in individual sectors and written to a dedicated metablock known as the MAP block. These lists, distributed among the controller RAM and flash memory, provide a hierarchy of erased block writes to efficiently manage erased metablock usage.

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

바람직한 실시예에서, 제어기 RAM(130)은 할당 블록 리스트(ABL)(610) 및 클리어된 블록 리스트(CBL)(740)를 유지한다. 도 15에 관련하여 앞에서 기술된 바와 같이, 할당 블록 리스트(ABL)는 사용자 데이터의 저장을 위해서, 또는 시스템 제어 데이터 구조들의 저장을 위해서 어떤 메타블록들이 최근이 할당되었는지를 추적한다. 새로운 소거된 메타블록이 할당될 필요가 있을 때, 할당 블록 리스트(ABL)에 다음 가용 메타블록 번호가 선택된다. 유사하게, 할당해제 및 소거된 업데이트 메타블록들을 추적하기 위해, 클리어된 블록 리스트(CBL)가 사용된다. 비교적 활동적 인 업데이트 블록들을 추적할 때 빠른 액세스 및 용이한 조작을 위해서 ABL 및 CBL이 제어기 RAM(130)(도 1 참조)에 유지된다. In a preferred embodiment, the controller RAM 130 maintains an allocation block list (ABL) 610 and a cleared block list (CBL) 740. As described above with respect to FIG. 15, the allocation block list ABL keeps track of which metablocks have been recently allocated for storage of user data or for storage of system control data structures. When a new erased metablock needs to be allocated, the next available metablock number is selected in the allocation block list (ABL). Similarly, to track deallocated and erased update metablocks, a cleared block list (CBL) is used. When tracking relatively active update blocks, ABL and CBL are maintained in controller RAM 130 (see FIG. 1) for quick access and easy operation.

할당 블록 리스트(ABL)는 소거된 메타블록 풀(pool)을, 그리고 업데이트 블록이 되게, 소거된 메타블록들의 할당을 추적한다. 이에 따라, 이들 메타블록들 각각은 이것이 ABL 미결 할당에서 소거된 블록인지, 개방된 업데이트 블록인지, 아니면 폐쇄된 업데이트 블록인지를 나타내는 속성에 의해 기술될 수 있다. 도 18은 소거된 ABL 리스트(612), 개방된 업데이트 블록 리스트(614), 및 폐쇄된 업데이트 블록 리스트(616)를 포함하는 ABL을 도시한 것이다. 또한, 연관된 원 블록 리스트(615)는 개방된 업데이트 블록 리스트(614)에 연관된다. 마찬가지로, 연관된 소거된 원 블록 리스트(617)는 폐쇄된 업데이트 블록 리스트에 연관된다. 전에 도 15에 도시된 바와 같이, 이들 연관된 리스트들은 각각 개방된 업데이트 블록 리스트(614) 및 폐쇄된 업데이트 블록 리스트(616)의 일부이다. 소거된 ABL 블록 리스트(612), 개방된 업데이트 블록 리스트(614), 및 폐쇄된 업데이트 블록 리스트(616)는 모두, 할당 블록 리스트(ABL)(61)의 일부분들이며, 각각에 엔트리들은 대응하는 속성을 각각 갖는다. The allocation block list (ABL) tracks the erased metablock pool and the allocation of the erased metablocks to be an update block. Accordingly, each of these metablocks may be described by an attribute indicating whether it is an erased block, an open update block, or a closed update block in an ABL open assignment. 18 illustrates an ABL including an erased ABL list 612, an open update block list 614, and a closed update block list 616. Also, the associated original block list 615 is associated with the open update block list 614. Similarly, the associated erased original block list 617 is associated with the closed update block list. As previously shown in FIG. 15, these associated lists are part of an open update block list 614 and a 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 part of the allocation block list (ABL) 61, with entries in each of which correspond to the corresponding attribute. Have each.

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 a time series of MAP block sectors, each MAP sector being an erase block management (EBM) sector 760 or MAP sector 780. Since the erased blocks are all used for allocation and are recycled when the metablock is discarded, the associated control and directory data is preferably contained in a logical sector that can be updated in the MAP block, in each case a new block. Is written to the sector. Multiple copies of EBM sectors 760 and MAP sectors 780 may exist in MAP block 750, and only the latest version is valid. The index to the locations of valid MAP sectors is implied in a field in the EMB block. A valid EMB sector is always written last in the MAP block during a control write operation. When the MAP block 750 is full, it is compressed during the control write operation by rewriting all valid sectors to the new block position. The filled block is then erased.

각각의 EBM 섹터(760)는 소거된 블록 리스트들(EBL)(770)을 내포하며, 이들은 모집단의 소거된 블록들의 일부의 어드레스들의 리스트들이다. 소거된 블록 리스트들(EBL)(770)은 소거된 메타블록 번호들을 내포하는 버퍼로서 작용하며, 이로부터 메타블록 번호들이 주기적으로 취해져 ABL를 다시 채우고, 이에 메타블록번호들이 주기적으로 추가되어 CBL을 다시 비운다. EBL(770)은 가용 블록 버퍼(ABB)(772), 소거된 블록 버퍼(EBB)(774) 및 클리어된 블록 버퍼(EBB)(776)을 위한 버퍼들로서 기능한다.Each EBM sector 760 contains erased block lists (EBL) 770, which are lists of addresses of some of the erased blocks of the population. Erased block lists (EBL) 770 act as a buffer containing erased metablock numbers from which metablock numbers are taken periodically to repopulate ABL, with metablock numbers periodically added to form a CBL. Empty it again. The EBL 770 functions as buffers for the available block buffer (ABB) 772, the erased block buffer (EBB) 774, and the cleared block buffer (EBB) 776.

가용 블록 버퍼(ABB)(772)는 이전의 ABL 채움 동작에 바로 이어 ABL(610)에 엔트리들의 카피를 내포한다. 이것은 사실상 ABL 채움 동작 바로 후에 ABL의 백업 카피이다. The available block buffer (ABB) 772 contains a copy of the entries in ABL 610 immediately following the previous ABL fill operation. This is actually a backup copy of the ABL immediately after the ABL fill operation.

소거된 블록 버퍼(EBB)(774)는, MAP 섹터들(780) 또는 CBB 리스트(776)(후술함)로부터 이전에 전송되었고 ABL 채움 동작 동안 ABL(610)에 전송을 위해 사용할 수 있는 소거된 블록 어드레스들을 내포한다. The erased block buffer (EBB) 774 is previously erased from the MAP sectors 780 or the CBB list 776 (described below) and can be used for transmission to the ABL 610 during an ABL fill operation. Contains block addresses.

클리어된 블록 버퍼(CBB)(776)는, CBL 비움 동작 동안 CBL(740)로부터 전송되었고 이어서 MAP 섹터들(78)에 또는 EBB 리스트(774)에 전송될 소거된 블록들의 어드레스들을 내포한다.The cleared block buffer (CBB) 776 contains addresses of erased blocks that were sent from the CBL 740 during the CBL empty operation and then sent to the MAP sectors 78 or to the EBB list 774.

MAP 섹터들(780)의 각각은 MAP이라고 하는 비트맵 구조를 내포한다. MAP은 플래시 메모리 내 각 메타블록에 대해 일 비트를 사용하는데, 이것은 각 블록의 소거 상태를 나타내는데 사용된다. ABL, CBL에 리스트된 블록 어드레스들, 또는 EBM 섹터 내 소거된 블록 리스트들에 대응하는 비트들은 MAP에 소거된 상태로 설정되지 않는다. Each of the MAP sectors 780 contains a bitmap structure called MAP. MAP uses one bit for each metablock in flash memory, which is used to indicate the erase state of each block. Bits corresponding to the block addresses listed in ABL, CBL, or 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 that is not designated as an erased block in MAP, erased block lists, ABL or CBL is never used by the block allocation algorithm, and therefore for storage of host or control data structures. It cannot be accessed. This provides a simple mechanism to exclude blocks with defective locations from the flash memory address space that can be accessed.

도 18에 도시된 계층은 소거된 블록 기록들이 효율적으로 관리될 수 있게 하며 제어기의 RAM에 저장된 블록 어드레스 리스트들의 완전한 보호를 제공한다. 소거된 블록 엔트리들은 덜 빈번한가에 따라, 이들 블록 어드레스 리스트들과 하나 이상의 MAP 섹터들(780)간에 교환된다. 이들 리스트들은 파워-다운 후에 시스템 초기화 동안에, 플래시 메모리에 섹터들에 저장된 소거된 블록 리스트들 및 어드레스 변환 테이블들, 그리고 플래시 메모리에 적은 수의 참조된 데이터 블록들의 제한된 스캐닝을 통해서, 재구성될 수 있다.The hierarchy shown in FIG. 18 allows the erased block writes to be managed efficiently and provides complete protection of the block address lists stored in the controller's RAM. Erased block entries are exchanged between these block address lists and one or more MAP sectors 780, depending on whether they are less frequent. These lists can be reconstructed during system initialization after power-down, through limited scanning of erased block lists and address translation tables stored in sectors in flash memory, and a small number of referenced data blocks in flash memory. .

소거된 메타블록 기록들의 계층을 업데이트하기 위해 채택된 알고리즘들은 블록들이 호스트에 의해 업데이트되었던 순서를 반영하는 CBL(740)로부터 한 집단의 블록 어드레스들로 MAP 블록(750)으로부터 어드레스 순서로 한 집단의 블록들을 인터리브하는 순서로 사용을 위해, 소거된 블록들을 할당한다. 대부분의 메타블록 크기들 및 시스템 메모리 용량들에 대해서, 단일 MAP 섹터는 시스템에 모든 메타블록들에 대한 비트맵을 제공할 수 있다. 이 경우, 소거된 블록들은 이 MAP 섹터에 기록된 어드레스 순서로 사용을 위해 항시 할당된다.Algorithms employed to update the hierarchy of erased metablock writes are one group of addresses in the order of addresses from the MAP block 750 with one group of block addresses from the CBL 740 reflecting the order in which the blocks were updated by the host. Assigns erased blocks for use in the order of interleaving blocks. For most metablock sizes and system memory capacities, a single MAP sector can provide the system with a bitmap for all metablocks. In this case, erased blocks are always allocated for use in the order of addresses recorded in this MAP sector.

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

앞에서 기술된 바와 같이, ABL(610)은 사용을 위해 할당될 수 있는 소거된 메타블록들, 및 데이터 업데이트 블록들로서 최근 할당된 메타블록들에 대한 어드레스 엔트리들을 가진 리스트이다. ABL 내 블록 어드레스들의 실제 수는 시스템 설계 변수들인 최상한과 최하한 사이에 있다. 제조 동안 포맷되는 ABL 엔트리들의 수는 카드 유형과 용량의 함수이다. 또한, ABL에 엔트리들의 수는 가용한 소거된 블록들의 수가 수명 동안 블록들의 장애에 의해 감소될 때, 시스템의 수명의 끝 근처에서 감소될 수도 있다. 예를 들면, 채움 동작 후에, ABL에 엔트리들은 다음 목적들을 위해 가용한 블록들을 지정할 수도 있다. 블록당 한 엔트리를 가진 부분적으로 기입된 데이터 업데이트 블록들에 대한 엔트리들, 최대 동시 개방된 업데이트 블록들에 대한 시스템 제한을 초과하지 않는다. 데이터 업데이트 블록들로서 할당을 위해 소거된 블록들에 대한 1 내지 12 엔트리들 사이. 제어 블록들로서 할당을 위해 소거된 블록들에 대한 4개의 엔트리들.As described above, ABL 610 is a list with erased metablocks that can be allocated for use, and address entries for recently allocated metablocks as data update blocks. The actual number of block addresses in the ABL is between the best and lowest 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 the ABL may be reduced near the end of the life of the system when the number of available erased blocks is reduced by the failure of the blocks during its lifetime. For example, after the filling operation, entries in the ABL may specify the blocks available for the following purposes. Entries for partially written data update blocks with one entry per block, do not exceed the system limit for maximum concurrently opened update blocks. Between 1 and 12 entries for blocks erased for allocation as data update blocks. 4 entries for blocks that are erased for allocation as control blocks.

ABL 채움 동작ABL Fill Behavior

ABL(610)이 할당들을 통해 격감됨에 따라, 다시 채워질 필요가 있을 것이다. ABL를 채우는 동작은 제어 기입 동작 동안 일어난다. 이것은 블록이 할당되어야 할 때 시작되나, ABL은 데이터 업데이트 블록으로서, 또는 이외 얼마간의 제어 데이터 업데이트 블록에 대해, 할당을 위해 가용한 불충분한 소거된 블록 엔트리들을 내포한다. 제어 기입동안, ABL 채움 동작은 GAT 업데이트 동작과 동시에 행해진다.As ABL 610 is diminished through assignments, it will need to be refilled. The operation of filling the ABL occurs during the control write operation. This begins when a block should be allocated, but ABL contains insufficient erased block entries available for allocation, either as a data update block or for some other control data update block. During the control write, the ABL filling operation is performed simultaneously with the GAT update operation.

다음 동작들은 ABL 채움 동작 동안 행해진다.The following operations are performed during the ABL filling operation.

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

2. 블록에 대한 엔트리가 동시적 GAT 업데이트 동작에서 기입되고 있지 않는한, 폐쇄된 데이터 업데이트 블록들의 속성들을 가진 ABL 엔트리들은 보존되며, 이 경우 엔트리는 ABL로부터 제거된다.2. Unless an entry for a block is being written in a concurrent GAT update operation, ABL entries with attributes of closed data update blocks are preserved, in which case the entry is removed from the ABL.

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

4. ABL은 엔트리들의 제거에 의해 생긴 갭들을 제거하기 위해 압축되고, 엔트리들의 순서를 유지한다.4. The ABL is compressed to remove gaps caused by the removal of entries, and maintains the order of entries.

5. ABL은 EBB 리스트로부터 다음 가용한 엔트리들을 첨부함으로써 완전히 채워진다.5. The ABL is fully populated by attaching the next available entries from the EBB list.

6. ABB 리스트는 ABL에 현재 엔트리들로 덮어써진다.6. The ABB list is overwritten with the current entries in the ABL.

CBLCBL 비움 동작 Emptying behavior

CBL은 소거된 블록 엔트리들의 수에 대해 ABL과 동일한 제한을 갖는, 제어기 RAM에 소거된 블록 어드레스들의 리스트이다. CBL을 비우는 동작은 제어 기입 동작 동안 행해진다. 그러므로 이것은 ABL 채움/GAT 업데이트 동작들, 또는 CBI 블록 기입 동작들과 동시적이다. CBL 비움 동작에서, 엔트리들은 CBL(74)으로부터 제거되고 CBB 리스트(776)에 기입된다.CBL is a list of block addresses erased in the controller RAM, with the same limitation as ABL for the number of block entries erased. The operation of emptying the CBL is performed during the control write operation. This is therefore concurrent with ABL fill / GAT update operations, or CBI block write operations. In a CBL empty operation, entries are removed from CBL 74 and written to CBB list 776.

MAPMAP 교환 동작 Exchange behavior

MAP 섹터들(780)에 소거 블록 정보와 EBM 섹터들(760)간에 MAP 교환 동작은 EBB 리스트(774)가 비었을 때 제어 기입 동작 동안에 주기적으로 행해질 수 있다. 시스템에 모든 소거된 메타블록들이 EBM 섹터(760)에 기록된다면, 어떠한 MAP 섹터(780)도 존재하지 않으며 어떠한 MAP 교환도 수행되지 않는다. MAP 교환 동작 동안에, EBB(774)를 소거된 블록들에 공급하는 MAP 섹터는 소스 MAP 섹터(782)로서 간주된다. 반대로, CBB(776)으로부터 소거된 블록들을 수신하는 MAP 섹터는 목적지 MAP 섹터(784)로서 간주된다. 단지 한 MAP 섹터만이 존재한다면, 이것은 이하 정의되는 바와 같이, 소스 및 목적지 MAP 섹터 둘 다로서 작용한다.The MAP exchange operation between the erase block information in the MAP sectors 780 and the EBM sectors 760 may be performed periodically during the control write operation when the EBB list 774 is empty. If all erased metablocks in the system are written to the EBM sector 760, then no MAP sector 780 exists and no MAP exchange is performed. During the MAP exchange operation, the MAP sector supplying the EBB 774 to the erased blocks is considered as the source MAP sector 782. Conversely, a MAP sector that receives erased blocks from CBB 776 is considered as destination MAP sector 784. If there is only one MAP sector, this acts as both the source and destination MAP sectors, as defined below.

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

1. 소스 MAP 섹터는 증분 포인터에 기초하여, 선택된다.1. The source MAP sector is selected based on the incremental 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 related entries in 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 there is a separate source MAP sector.

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

6. CBB 내 나머지 엔트리들은 EBB에 첨부된다.6. The remaining entries in the CBB are attached to the EBB.

7. EBB는 소스 MAP 섹터로부터 정의된 소거된 블록 어드레스들로 가능한 정도까지 채워진다.7. The EBB is filled to the extent possible 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은 여러 리스트들 간에 제어 및 디렉토리 정보의 분포 및 흐름을 도시한 것이다. 편의를 위해, [A] 내지 [O]으로서 도 18에서 확인되는, 리스트들의 요소들 간에 엔트리들을 이동시키거나 엔트리들의 속성들을 변경하는 동작들은 다음과 같다.18 illustrates the distribution and flow of control and directory information among various lists. For convenience, the operations of moving entries between elements of lists or changing attributes of entries, identified in FIG. 18 as [A] to [O], are as follows.

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

[B] 소거된 블록이 제어 블록으로서 할당될 때, ABL에 그의 엔트리는 제거된다.[B] When an erased block is allocated as a control block, its entry in 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 logical group being updated. This information is obtained from the GAT.

[D] 업데이트 블록이 폐쇄되었을 때, ABL에 그의 엔트리의 속성들은 개방 업데이트 블록에서 폐쇄된 업데이트 블록으로 변경된다.[D] When the update block is closed, the attributes of its entry in the ABL are changed from the open update block to the closed update block.

[E] 업데이트 블록이 폐쇄되었을 때, 이의 연관된 원 블록은 소거되며 ABL에 그의 엔트리 내 연관된 원 블록 필드의 속성들은 소거된 원 블록으로 변경된다.[E] When the update block is closed, its associated original block is erased and the attributes of the associated one block field in its entry in the ABL are changed to the erased one block.

[F] ABL 채움 동작 동안에, 어드레스가 동일 제어 기입 동작 동안 GAT에 업데이트되는 임의의 폐쇄된 업데이트 블록은 ABL로부터 제거된 자신의 엔트리를 갖는다.[F] During the ABL fill operation, any closed update block whose address is updated to the GAT during the same control write operation has its entry removed from the ABL.

[G] ABL 채움 동작 동안에, 폐쇄된 업데이트 블록에 대한 엔트리가 ABL로부터 제거되었을 때, 이의 연관된 소거된 원 블록에 대한 엔트리는 CBL로 옮겨진다.[G] During the ABL fill operation, when an entry for a closed update block is removed from the ABL, the entry for its associated erased 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 the ABL fill operation, erased block entries are moved from the EBB list to ABL and are given attributes of the erased ABL blocks.

[J] ABL 채움 동작 동안 모든 관계된 ABL 엔트리들의 수정 후에, ABL 내 블록 어드레스들은 ABB 리스트에 블록 어드레스들을 대체한다.[J] After modification of all relevant ABL entries during the ABL fill operation, block addresses in the ABL replace the block addresses in the ABB list.

[K] 제어 기입동안 ABL 채움 동작과 동시에, CBL 내 소거된 블록들에 대한 엔트리들은 CBB 리스트로 옮겨진다.At the same time as the ABL fill operation during the [K] control write, the entries for the erased blocks in the CBL are moved to the CBB list.

[L] MAP 교환 동작 동안에, 모든 관계된 엔트리들은 CC 리스트에서 MAP 목적지 섹터로 옮겨진다.[L] During the MAP exchange operation, all relevant entries are moved to the MAP destination sector in the CC list.

[M] MAP 교환 동작 동안에, 모든 관계된 엔트리들은 CBB 리스트에서 MAP 소 스 섹터로 옮겨진다.[M] During the MAP exchange operation, all related entries are moved from the CBB list to the MAP source sector.

[N] MAP 교환 동작 동안에 [L] 및 [M]에 이어, 모든 나머지 엔트리들은 CBB 리스트에서 EBB 리스트로 옮겨진다. [L] 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 to [M] are moved from the MAP source sector to populate the EBB list if possible.

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

플래시 메모리에 논리 섹터의 물리 위치를 찾기 위해서, 도 2에 도시된 논리 대 물리 어드레스 변환 모듈(140)은 논리 대 물리 어드레스 변환을 수행한다. 최근 업데이트된 이들 논리 그룹들을 제외하고, 대량 변환이 플래시 메모리(200)에 있는, 또는 제어기 RAM(130) 내 GAT 캐시에 있는 그룹 어드레스 테이블을 사용하여 수행될 수도 있을 것이다. 최근 업데이트된 논리 그룹들에 대한 어드레스 변환들은 주로 제어기 RAM(130)에 있는 업데이트 블록들에 대한 어드레스 리스트들을 조회하는 것을 요구할 것이다. 그러므로 논리 섹터 어드레스에 대한 논리 대 물리 어드레스 변환을 위한 프로세스는 섹터가 위치된 논리 그룹에 연관된 블록의 유형에 따른다. 블록들의 유형들은 온전한 블록, 순차 데이터 업데이트 블록, 무순서 데이터 업데이트 블록, 폐쇄된 데이터 업데이트 블록이다.In order to find the physical location of the logical sector 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, mass translation may be performed using a group address table in flash memory 200 or in a GAT cache in controller RAM 130. Address translations for recently updated logical groups will primarily require querying address lists for update blocks in controller RAM 130. The process for logical-to-physical address translation for logical sector addresses therefore depends on the type of block associated with the logical group in which the sector is located. The types of blocks are intact blocks, sequential data update blocks, random data update blocks, and closed data update blocks.

도 19는 논리 대 물리 어드레스 변환의 프로세스를 나타낸 흐름도이다. 필수적으로, 대응하는 메타블록 및 물리 섹터는 개방 업데이트 블록 리스트 및 폐쇄된 업데이트 블록 리스트와 같은 다양한 업데이트 디렉토리들을 먼저 조회하기 위해 논리 섹터 어드레스를 사용함으로써 찾아진다. 연관된 메타블록이 업데이트 프로세 스의 부분이 아니라면, 디렉토리 정보가 GAT에 의해 제공된다. 논리 대 물리 어드레스 변환은 다음 단계들을 포함한다.19 is a flowchart illustrating a process of logical to physical address translation. Essentially, the corresponding metablocks and physical sectors are found by using the logical sector address to first look up the various update directories such as the open update block list and the 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 includes the following steps.

단계 800: 논리 섹터 어드레스가 주어진다.Step 800: A logical sector address is given.

단계 810: 제어기 RAM 내 개방된 업데이트 블록 리스트(614)(도 15 및 도 18 참조) 내 주어진 논리 어드레스를 조회한다. 조회가 실패하면, 단계 820로 가고, 그렇지 않다면 단계 830로 간다.Step 810: Query the given logical address in the open update block list 614 (see Figures 15 and 18) in the controller RAM. If the query fails, go to step 820; otherwise, go to step 830.

단계 820: 폐쇄된 업데이트 블록 리스트(616)에서 주어진 논리 어드레스를 조회한다. 조회가 실패하면, 주어진 논리 어드레스는 임의의 업데이트 프로세스의 부분이 아니며, GAT 어드레스 변환을 위해 단계 870로 간다. 그렇지 않다면, 폐쇄된 업데이트 블록 어드레스 변환을 위해 단계 860로 간다.Step 820: Query the given logical address in the closed update block list 616. If the lookup fails, the given logical address is not part of any update process and goes to step 870 for GAT address translation. Otherwise, go to step 860 for a closed update block address translation.

단계 830: 주어진 논리 어드레스를 내포하는 업데이트 블록이 순차적이라면, 순차 업데이트 블록 어드레스 변환을 위해 단계 840로 간다. 그렇지 않다면, 무순서 업데이트 블록 어드레스 변환을 위해 단계 850으로 간다.Step 830: If the update blocks containing the given logical address are sequential, go to step 840 for sequential update block address translation. Otherwise, go to step 850 for random update block address translation.

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

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

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

단계 870: 그룹 어드레스 테이블(GAT) 변환을 사용하여 메타블록 어드레스를 얻는다. 단계 880로 간다.Step 870: Obtain a metablock address using group address table (GAT) translation. Go 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: Obtained physical sector address.

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

순차 Sequential 업데이트update 블록 어드레스 변환(단계 840) 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 (see FIGS. 15 and 18) as follows.

1. 타겟 논리 섹터가 업데이트 블록 또는 이의 연관된 원 블록에 위치되어 있는지를 리스트 내 "페이지 태그" 및 "기입된 섹터들의 수" 필드들로부터 결정된다.1. It is determined from the "page tag" and "number of written sectors" fields in the list whether the target logical sector is located in the update block or its 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.

무순서 Random 업데이트update 블록 어드레스 변환(단계 850) 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 in RAM that the sector is a recently written sector, address translation can be achieved directly from its position in this list.

2. CBI 블록 내 가장 최근 기입된 섹터는 이의 무순서 블록 데이터 필드 내에, 타겟 논리 섹터 어드레스에 관계된 무순서 업데이트 블록의 물리 어드레스를 내포한다. 또한, 이것은 이의 간접 섹터 색인 필드 내에, 이 무순서 업데이트 블록(도 16a 내지 도 16e 참조)에 관계된 마지막 기입된 CBI 섹터의 CBI 블록 내에 오프셋을 내포한다.2. The most recently written sector in the CBI block contains, in its random block data field, the physical address of the random update block relative to the target logical sector address. It also implies an offset in its indirect sector index field, in the CBI block of the last written CBI sector associated with 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 subsequent address translations.

4. 단계 3에서 간접 섹터 색인 필드에 의해 확인된 CBI 섹터가 읽혀진다.4. In step 3, the CBI sector identified by the indirect sector index field 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. The direct sector index field read in step 4 or step 5 this time identifies the CBI sector associated with the logical subgroup containing 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 reads in 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 in the associated original block. If a valid copy of the target logical sector is in the original block, this is found by using the original metablock and page tag information.

폐쇄된 Closed 업데이트update 블록 어드레스 변환(단계 860) 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 (see FIG. 18) as follows.

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.

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

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

1. 타겟 논리 그룹에 대한 엔트리가 GAT 캐시에 내포되어 있는지를 판정하기 위해서, RAM에 가용 GAT 캐시들의 범위들이 평가된다. 1. To determine if an entry for the target logical group is contained in the GAT cache, the ranges of available GAT caches in RAM are evaluated.

2. 타겟 논리 그룹이 단계 1에서 발견된다면, GAT 캐시는 메타블록 어드레스 및 페이지 태그 둘 다를 포함한, 완전한 그룹 어드레스 정보를 내포하여, 타겟 논리 섹터 어드레스의 변환을 할 수 있게 한다.2. If the target logical group is found in step 1, the GAT cache contains complete group address information, including both the metablock address and the page tag, to enable 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 must be read for the target GAT block to locate the GAT sector related to the target logical group address.

4. 마지막 액세스된 GAT 블록에 대한 GAT 색인은 제어기 RAM에 유지되며 플래시 메모리로부터 섹터를 판독할 필요성 없이 액세스될 수 있다.4. The GAT index for the last accessed GAT block is maintained in the controller RAM and can be accessed without the need to read sectors 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, is maintained in the controller RAM. If the required GAT index is not available in step 4, it may therefore be immediately read from the flash memory.

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

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

메타블록Metablock 대 물리 어드레스 변환(단계 880) 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.

제어 데이터 관리Control data management

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

데이터 업데이트 관리 동작들은 ABL, CBL 및 무순서 섹터 리스트에 관해 RAM에서 수행된다. ABL은 소거된 블록이 업데이트 블록으로서 또는 제어 블록으로서 할당되었을 때 또는 업데이트 블록이 폐쇄되었을 때 할당된다. CBL은 제어 블록이 소거되었을 때 또는 폐쇄된 업데이트 블록에 대한 엔트리가 GAT에 기입되었을 때 업데이트된다. 업데이트 무순서 섹터 리스트는 섹터가 무순서 업데이트 블록에 기입되었을 때 업데이트된다.Data update management operations are performed in RAM with respect to ABL, CBL and random sector list. ABL is allocated when an erased block is allocated as an update block or as a control block or when the update block is closed. The CBL is updated when the control block is erased or when an entry for a closed update block is written to the GAT. The update random sector list is updated when a sector is written to the random update block.

제어 기입 동작은 제어 데이터 구조들로부터 정보가 플래시 메모리 내 제어 데이터 구조들에 기입되게 하여, 결과적으로, 필요하다면, 플래시 메모리 및 RAM에 제어 데이터 구조들을 지원하는 다른 것을 업데이트하게 된다. 이것은 소거된 블록들에 대해 업데이트 블록들로서 할당될 더 이상의 어떠한 엔트리들도 ABL이 내포하지 않을 때, 또는 CBI 블록이 재기입될 때 시작된다.The control write operation causes information from the control data structures to be written to the control data structures in the flash memory, resulting in updating the flash memory and the other supporting control data structures in the RAM, if necessary. This starts when the ABL contains no further entries to be allocated as update blocks for erased blocks, or when the CBI block is rewritten.

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

한 GAT 섹터가 기입되며, 매 제어 기입 동작 동안, 폐쇄된 업데이트 블록 리스트는 그에 따라 수정된다. GAT 블록이 충만되었을 때, GAT 재기입 동작이 수행된다.One GAT sector is written, and during every control write operation, the closed update block list is modified accordingly. When the GAT block is full, a GAT rewrite operation is performed.

CBI 섹터는 앞에서 기술된 바와 같이, 어떤 무순서 섹터 기입 동작 후에 기입된다. CBI 블록이 충만되었을 때, 할당된 소거된 블록에 유효한 CBI 섹터들이 카 피되고, 이전 CBI 블록은 소거된다.The CBI sector is written after some random sector write operation, as described above. When the CBI block is full, valid CBI sectors are copied to the allocated erased block, and the previous CBI block is erased.

앞에서 기술된 바와 같이, MAP 교환 동작은 EBM 섹터에 EBB 리스트에 더 이상의 소거된 블록 엔트리들이 없을 때 수행된다.As described above, the MAP exchange operation is performed when there are no more erased block entries in the EBB list in the EBM sector.

MAP 블록의 현재 어드레스를 기록하는 MAP 어드레스(MAPA) 섹터는 MAP 블록이 재기입되는 각 경우에 전용의 MAPA 블록에 기입된다. MAPA 블록이 충만되었을 때, 유효한 MAPA 섹터는 할당된 소거된 블록에 카피되고, 이전 MAPA 블록은 소거된다.A MAP address (MAPA) sector that records the current address of the MAP block is written to a dedicated MAPA block in each case where the MAP block is rewritten. When the MAPA block is full, valid MAPA sectors are copied to the allocated erased block, and the previous MAPA block is erased.

부트 섹터는 MAPA 블록이 재기입되는 각 경우에 현재 부트 블록에 기입된다. 부트 블록이 충만되었을 때, 유효한 부트 섹터가 부트 블록의 현재 버전에서 백업 버전으로 카피되며, 이것은 이어서 현재 버전이 된다. 이전 현재 버전은 소거되며 백업 버전이 되고, 유효한 부트 섹터는 이에 다시 기입된다.The boot sector is written to the current boot block in each case where the MAPA block is rewritten. When the boot block is full, a valid boot sector is copied from the current version of the boot block to the backup version, which then becomes the current version. The previous current version is erased and becomes the backup version, and a valid boot sector is written back to it.

제어 데이터 무결성 및 관리Control data integrity and management

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

도 20에 관련하여 기술된 바와 같이, 블록 관리 시스템은 이의 동작 동안 플래시 메모리에 한 세트의 제어 데이터를 유지한다. 이 한 세트의 제어 데이터는 호스트 데이터와 유사하게 메타블록들에 저장된다. 이러하므로, 제어 데이터 자신은 블록으로 관리될 것이며, 업데이트들, 따라서 가비지 수거 동작들을 받게 될 것이다.As described in relation to FIG. 20, the block management system maintains a set of control data in flash memory during its operation. This set of control data is stored in metablocks similar to host data. As such, the control data itself will be managed in blocks and will receive updates, and thus garbage collection operations.

또한, 제어 데이터의 계층이 존재하고 하위 계층에 것들이 상위 계층의 것들보다더 자주 업데이트되는 것이 기술되었다. 예를 들면, 모든 제어 블록이 기입할 N 제어 섹터들을 갖는다고 할 때, 제어 업데이트들 및 제어 블록 재배치들의 다음 시퀀스가 정규로 일어난다. 다시 도 20을 참조하면, 매 N CBI 업데이트들이 CBI 블록을 채우며 CBI 재배치(재기입) 및 MAP 업데이트를 시작하게 한다. 무순서 블록이 폐쇄된다면 이 또한 GAT 업데이트를 시작하게 한다. 모든 GAT 업데이트는 MAP 업데이트를 시작하게 한다. 모든 N GAT 업데이트들이 블록을 채우며 GAT 블록 재배치를 시작하게 한다. 또한, MAP 블록이 채우질 때 이 또한 MAP 블록 재배치 및 MAPA 블록(존재한다면, 그러나 그렇지 않다면 부트 블록이 직접 MAP을 가리킨다) 업데이트를 시작하게 한다. 또한, MAPA 블록이 채워졌을 때, 이 또한 MAPA 블록 재배치, 부트 블록 업데이트 및 MAP 업데이트를 시작하게 한다. 또한, 부트 블록이 채워졌을 때, 이것은 또 다른 부트 블록에 활동적 부트 블록 재배치를 시작하게 한다.It has also been described that there is a hierarchy of control data and that things in the lower layer are updated more frequently than those in the upper layer. For example, assuming that every control block has N control sectors to write to, the next sequence of control updates and control block relocations normally occurs. Referring again to FIG. 20, every N CBI updates populates the CBI block and causes CBI relocation (rewrite) and MAP update to begin. If the random block is closed, this also starts the GAT update. All GAT updates cause the MAP update to begin. All N GAT updates fill the block and start the GAT block relocation. In addition, when the MAP block is filled, it also causes the MAP block relocation and MAPA block (if present, but otherwise the boot block points directly to the MAP) update. In addition, when the MAPA block is filled, it also causes the MAPA block relocation, boot block update, and MAP update to begin. Also, when the boot block is filled, it causes active boot block relocation to another boot block.

업데이트update 블록 대체 방법 Block replacement method

발명의 또 다른 면에 따라서, 블록 관리 시스템을 갖춘 비휘발성 메모리에서, 개선된 블록 대체 방법은 데이터를 기록하기 위해 동시 개방된 제 1 소정 최대 개수의 업데이트 블록까지 지원하는 시스템을 위해 구현된다. 업데이트 블록들은 데이터가 논리적으로 순차적 순서로 기록되지만 데이터가 논리적으로 순차적인 순서로 데이터가 기록되지 않는 무순서 업데이트 블록들이 되어도 좋을 제 2 소정 최대 개수까지가 기록되는, 주로 순차적인 업데이트 블록들이다. 업데이트 블록의 새로운 할당이 업데이트 블록의 풀을 제 1 또는 제 2 소정 최대 개수를 초과하게 할 때마다, 풀 내 현존의 업데이트 블록들 중 하나는 제한에 따르기 위해서 폐쇄되고 제거될 것이다. 업데이트 블록을 폐쇄하에 앞서, 이의 데이터는 순차적 블록에 합체된다. 개선된 방법은 순차 업데이트가 무순서 블록 합체들의 초과된 수를 야기할 수 있는 상황을 피하게 하는 것이다. 이것은 순차 업데이트 블록들 및 무순서 업데이트 블록들을 각각의 대체 또는 합체 풀들로 분리함으로써 달성된다. 특히, 순차 업데이트가 새로운 업데이트 블록의 할당을 제 1 소정 최대 개수 초과시, 풀의 최근 최소 사용된 순차적 업데이트 블록에 우선적으로 빈 공간을 만드는 것이다. According to another aspect of the invention, in a nonvolatile memory with a block management system, an improved block replacement method is implemented for a system that supports up to a first predetermined maximum number of update blocks simultaneously open for writing data. The update blocks are mainly sequential update blocks in which data is recorded in a logically sequential order, but up to a second predetermined maximum number, which may be random update blocks, in which the data is not recorded in a logically sequential order. Each time a new allocation of update blocks causes the pool of update blocks to exceed the first or second predetermined maximum number, one of the existing update blocks in the pool will be closed and removed to comply with the restriction. Prior to closing the update block, its data is merged into the sequential block. An improved approach is to avoid situations where sequential updates can cause an excessive number of random block coalescings. This is accomplished by separating the sequential update blocks and the random update blocks into respective replacement or coalescing pools. In particular, when the sequential update exceeds the first predetermined maximum number of allocations of new update blocks, it first makes free space in the latest least used sequential update block of the pool.

현 시스템에서, 일반적으로는 2가지 유형들의 데이터로서 사용자 데이터 및 제어 데이터가 있다. 사용자 데이터는 호스트에서 메모리 시스템으로 전형적으로 논리적 순차적 순서로 보내진다. 호스트로부터 순차적 기입 동작들을 최적으로 취급하기 위해 순차적 업데이트 블록들이 할당된다. 또한, 사용자 데이터는 특히 논리 데이터에 후속된 업데이트들이 있을 때 논리적으로 비순차적 순서로 있을 수도 있다. 무순서 업데이트 블록들은 비순차적 순서로 데이터를 최적으로 취급하기 위 해 생성된다. 무순서 또는 비순차적 데이터의 또 다른 소스는 사용자 데이터를 저장하는 과정에서 발생되는 파일 및 디렉토리 정보와 같은 파일 시스템 또는 메모리 시스템에 의해 유지되는 제어 데이터이다.In current systems, there are generally two types of data: user data and control data. User data is typically sent from the host to the memory system in logical sequential order. Sequential update blocks are allocated to optimally handle sequential write operations from the host. In addition, the user data may be in a logically out of order, especially when there are updates following the logical data. Random update blocks are created to optimally handle data in out-of-order order. Another source of random or out of order data is control data maintained by the file system or memory system, such as file and directory information generated in the course of storing user data.

동시에 개방된 업데이트 블록들의 최대수까지를 지원하는 실제 시스템 제한에 준수하는 이전의 방법은 순차적이든 무순서이든 관계없이, 풀에 최근 최소에 사용된 업데이트 블록을 폐쇄하는 것이었다. The previous method of complying with the actual system limitation of supporting up to the maximum number of open update blocks at the same time was to close the most recently used update blocks in the pool, whether in sequential or random order.

본 방법은 특히 순차 기입 동작 동안 블록의 풀 중에 업데이트 블록이 새로운 할당을 위해 빈 공간을 만들기 위해 폐쇄될 필요가 있다면 풀 내 최근 최소 사용된 순차 업데이트 블록이 폐쇄되는 이전 방법보다 개선된다. 이것은 순차 기입 동작들 및 랜덤 기입 동작들을 취급하기 위해 다양한 업데이트 블록들이 효과적으로 사용될 수 있게 한다. 특히, 이것은 호스트에 의해 큰 순차 기입 동작이 FAT 및 디렉토리 정보를 내포하는 무순서 업데이트 블록의 조기 폐쇄를 강제할 수 있는 비효율적인 상황을 회피한다. 또 다른 무순서 블록은 일단 큰 순차 기입 동작이 행해지면 다시 업데이트될 FAT 및 디렉토리 정보를 저장하기 위해 사실상 거의 즉시로 생성될 것이다. 개선된 대체 정책의 생성은 후속되는 FAT 및 디렉토리 업데이트를 관리하기 위해 잠재적으로 개방된 순차 또는 개방된 무순서 블록의 순차적 기입 및 합체 동안 무순서 블록을 합체할 때 부가되는 오버헤드를 방지하기 위해 대체 및 합체 풀의 분리를 요구한다.The method is improved over the previous method in which the latest least used sequential update block in the pool is closed, especially if the update block needs to be closed in the pool of blocks during sequential write operations to make free space for new allocation. This allows various update blocks to be effectively used to handle sequential write operations and random write operations. In particular, this avoids the inefficient situation by the host where a large sequential write operation may force premature closure of random update blocks containing FAT and directory information. Another random block will be created virtually instantaneously to store FAT and directory information that will be updated again once a large sequential write operation is performed. Creation of an improved replacement policy is used to avoid the overhead added when merging random blocks during sequential writing and coalescing of potentially open sequential or open random blocks to manage subsequent FAT and directory updates. And separation of coalescing pools.

최대수의 동시 개방되는 업데이트 블록까지 지원하는 실제적인 시스템 제한이 앞에서 기술되었다. 예를 들면, 도 10에 관련하여 기술된 일 실시예에서, 단계 410은 새로운 할당이, 업데이트 데이터를 받아들이기 위해 동시에 개방될 수 있는 업데이트 블록들의 최대수 UMAX를 초과할 것인지를 테스트한다. UMAX가 초과될 것이라면, 순차적이든 무순서 업데이트 블록이든 관계없이, 업데이트 블록들 중 최소의 활동적인 것들은 규정된 제한 내에서 시스템을 유지하기 위해 단계 420에서 폐쇄될 것이다.The practical system limitations that support the maximum number of concurrently open update blocks have been described above. For example, in one embodiment described in connection with FIG. 10, step 410 tests whether the new allocation will exceed the maximum number U MAX of update blocks that can be open simultaneously to accept update data. If U MAX will be exceeded, regardless of whether it is a sequential or random update block, the least active of the update blocks will be closed at step 420 to keep the system within the defined limit.

도 21은 블록 관리 시스템에 대한 업데이트 블록들의 수에 2가지 규정된 제한들을 개략적으로 도시한 것이다. 무순서 업데이트 블록들(NC)의 수와 순차적 업데이트 블록들(NS)의 수와의 합에 의해 주어지는 업데이트 블록들의 총 수(UMAX)에 전체적인 제한이 있다. 무순서 업데이트 블록은 더 자원 집약적이어서 무순서 블록 색인(CBI)의 추가의 유지관리를 요구하기 때문에, 바람직하게는 무순서 업데이트 블록들("UCMAX")의 최대수에도 제한이 있다. 이에 따라, 제 1 제한은 업데이트 블록들의 총 수, NC + NS ≤ UMAX일 것을 요구한다. 제 2 제한은 무순서 업데이트 블록들의 수 NC ≤ UCMAX일 것을 요구한다.21 schematically illustrates two defined limits on the number of update blocks for a block management system. There is an overall limitation on the total number U MAX of given update blocks given by the sum of the number of random update blocks N C and the number of sequential update blocks N S. Since the random update block is more resource intensive and requires additional maintenance of the random block index (CBI), there is preferably a limit to the maximum number of random update blocks (“U CMAX ”). Accordingly, the first constraint requires that the total number of update blocks, N C + N S ≦ U MAX . The second limitation requires that the number of random update blocks N C ≦ U CMAX .

도 22는 다양한 메모리 장치들에 대해 최적인 2개의 제한들의 조합들의 전형적인 예들을 도시한 것이다. 주어진 조합을 UMAX "-" UCMAX로 나타낸다. 예를 들면, "3-1"은 업데이트 풀 내에 최대 3개의 업데이트 블록까지 허용하고 이중 하나까지만 무순서 업데이트 블록인 블록 관리 시스템을 나타낸다. 마찬가지로, "7-3"은 최대 7개의 업데이트 블록까지 지원하고 이중 3개까지만 무순서 업데이트 블록일 수 있는 블록 관리 시스템을 나타낸다. 일반적으로 더 적은 메모리 용량을 갖는 더 간단한 메모리 시스템들은 더 제약적일 것이며, 더 적은 최대수들을 갖는다.FIG. 22 shows typical examples of combinations of two limitations that are optimal for various memory devices. The given combination is represented by U MAX "-" U CMAX . For example, " 3-1 " represents a block management system that allows up to three update blocks in the update pool and only one of them is an orderly update block. Likewise, " 7-3 " represents a block management system that supports up to seven update blocks, of which only three can be random update blocks. In general, simpler memory systems with less memory capacity will be more constrained and have fewer maximum numbers.

도 23a, 도 23b 및 도 23c는 이전 대체 방법에서 제 1 상황에 따라, 새로운 업데이트 블록을 업데이트 블록 풀에 넣기 위한 이벤트의 시퀀스를 개략적으로 도시한 것이다. 23A, 23B and 23C schematically show a sequence of events for putting a new update block into an update block pool, according to the first situation in the previous alternative method.

도 23a는 도 22에 기술된 바와 같이 "5-2" 구성의 업데이트 풀을 개략적으로 도시한 것이다. 이 예에서, 업데이트 풀은 최대 5개의 허용가능한 업데이트 블록들이 완전히 차지하게 된다. 업데이트 풀은 3개의 순차 업데이트 블록들(S1, S2, S3)을 내포하는 순차 풀(1200) 및 최대 2개의 무순서 또는 비순차적 업데이트 블록들( C4, C5)을 내포하는 무순서 풀(1300)로 더욱 분할된다. 예는 최소 활동적인 블록이 S3(1201)과 같은 순차 업데이트 블록이 되는 일이 일어나는 제 1 상황을 보인 것이다. FIG. 23A schematically illustrates an update pool of a “5-2” configuration as described in FIG. 22. In this example, the update pool is fully occupied by up to five allowable update blocks. The update pool includes a sequential pool 1200 containing three sequential update blocks S1, S2, S3 and an unordered pool 1300 containing up to two unordered or nonsequential update blocks C4, C5. It is further divided into. The example shows the first situation where the least active block becomes a sequential update block such as S3 1201.

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

도 23b는 이전 방법에 따라, 새로운 업데이트 블록을 위해 빈 공간을 만들기 위해서 최소 활동적인 업데이트 블록의 폐쇄를 개략적으로 도시한 것이다. 이 경우 최소 활동적 업데이트 블록은 S3(1201)가 되는 것이 일어나며 이것은 폐쇄되고 업 데이트 블록들의 풀로부터 제거될 것이다.Figure 23b schematically illustrates the closing of the least active update block to make free space for a new update block, according to the previous method. In this case the least active update block will be S3 1201 which will be closed and removed from the pool of update blocks.

도 23c는 폐쇄된 업데이트 블록이 빈 공간을 만들기 위해 제거된 후에 새롭게 할당된 업데이트 블록을 풀에 넣는 것을 개략적으로 도시한 것이다. 이 경우, 새롭게 할당된 업데이트 블록인 S6(1212)는 논리적으로 순차적인 순서로 데이터를 기록하기 위해 순차 풀(1200)에 넣어질 것이다. 이에 따라, UMAX, 즉 허용된 최대수의 업데이트 블록들은 초과되지 않는다.FIG. 23C schematically illustrates putting a newly allocated update block into a pool after a closed update block has been removed to make free space. In this case, the newly allocated update block S6 1212 will be put into the sequential pool 1200 to write data in a logically sequential order. Accordingly, U MAX , the maximum number of update blocks allowed, is not exceeded.

도 24a, 도 24b 및 도 24c는 이전 대체 방법에서 제 2 상황에 따라, 업데이트 블록 풀에 새로운 업데이트 블록에 넣기 위한 경우의 시퀀스를 개략적으로 도시한 것이다.24A, 24B and 24C schematically show a sequence of cases for putting a new update block into an update block pool according to the second situation in the previous alternative method.

도 24a는 도 22에 기술된 바와 같이 "5-2" 구성인 업데이트 풀을 개략적으로 도시한 것이다. 이 예에서, 업데이트 풀은 최대 5개의 허용가능한 업데이트 블록들로 완전히 채워진다. 업데이트 풀은 3개의 순차적인 업데이트 블록들(S1, S2, S3)을 내포하는 순차 풀(1200) 및 최대 2개의 무순서 또는 비순차적 업데이트 블록들(C4, C5)을 내포하는 무순서 풀(1300)을 내포하는 순차 풀(1200)로 더 분할된다. 예는 최소 활동적 블록이 C4(1301)와 같은 무순서 업데이트 블록이 될 일이 일어나는 제 2 상황을 보여준다.FIG. 24A schematically illustrates an update pool in a " 5-2 " configuration as described in FIG. In this example, the update pool is completely filled with up to five allowable update blocks. The update pool includes a sequential pool 1200 containing three sequential update blocks S1, S2, and S3 and an unordered pool 1300 containing up to two unordered or nonsequential update blocks C4 and C5. Is further divided into a sequential pool (1200) containing. The example shows a second situation in which the least active block will be an unordered update block such as C4 1301.

도 24b는 이전의 방법에 따라, 새로운 업데이트 블록을 위한 빈 공간을 만들기 위해서 최소의 활동적인 업데이트 블록의 폐쇄를 개략적으로 도시한 것이다. 이 경우에 최소의 활동적 업데이트 블록은 C4(1301)이며 이것은 폐쇄되고 업데이트 블 록들의 풀로부터 제거될 것이다.24B schematically illustrates the closure of a minimum active update block to make free space for a new update block, according to the previous method. In this case the minimum active update block is C4 1301 and it will be closed and removed from the pool of update blocks.

도 24c는 폐쇄된 업데이트 블록이 빈 공간을 만들기 위해 제거된 후에 풀에 새로운 할당된 업데이트 블록을 넣는 것을 개략적으로 도시한 것이다. 이 경우, 새롭게 할당된 업데이트 블록인 S6(1212)는 논리적으로 순차적인 순서로 데이터를 기록하기 위해 순차 풀(1200)에 넣어질 것이다. 이에 따라, UMAX, 즉 허용된 최대수의 업데이트 블록들은 초과되지 않는다.24C schematically illustrates putting a new allocated update block into a pool after a closed update block has been removed to make free space. In this case, the newly allocated update block S6 1212 will be put into the sequential pool 1200 to write data in a logically sequential order. Accordingly, U MAX , the maximum number of update blocks allowed, is not exceeded.

도 25a 및 도 25b는 도 10, 도 23b 및 도 24b에 이전에 기술된 방법에서 UMAX 및 UCMAX 제한의 유지보수를 각각 도시한 것이다. 2개의 제한들은 전형적으로 동시에 부과된다.25A and 25B illustrate the maintenance of the U MAX and U CMAX limits in the method previously described in FIGS. 10, 23B and 24B, respectively. Two restrictions are typically imposed at the same time.

도 25a는 도 10, 단계 410에, 그리고 새로운 할당이 소정의 제한을 초과하게 될 때는 언제나 최근 최소 액세스된 업데이트 블록이 폐쇄되는 도 23b 및 도 24b에서 이전에 도시된 방법을 도시한 것이다.FIG. 25A illustrates the method previously shown in FIG. 10, step 410, and in FIGS. 23B and 24B in which the most recently accessed update block is closed whenever a new assignment exceeds a predetermined limit.

단계 1252: 비휘발성 메모리를 블록들로 조직한다. 각 블록은 함께 소거 가능한 데이터를 저장하기 위한 것이다.Step 1252: Organize the nonvolatile memory into blocks. Each block is for storing data that can be erased together.

단계 1254: 논리적 단위들의 데이터의 업데이트들을 저장하기 위해 동시 개방된 제 1 소정 개수의 업데이트 블록까지 할당한다.Step 1254: Allocate up to a first predetermined number of update blocks that are simultaneously open for storing updates of data in logical units.

단계 1256: 새로운 업데이트 블록을 할당하는 것이 소정 개수를 초과할 때는 언제나, 새로운 업데이트 블록을 위해 빈 공간을 만들기 위해서 최근 최소 액세스된 업데이트 블록들 중 하나를 폐쇄된다.Step 1256: Whenever allocating a new update block exceeds a predetermined number, one of the most recently accessed update blocks is closed to make free space for the new update block.

도 25b는 무순서 업데이트 블록 개수가 소정의 제한을 초과할 때마다, 최근 최소 액세스된 무순서(비순차적) 업데이트 블록이 폐쇄되는 도 10, 단계 370에 이전에 도시된 방법을 도시한 것이다.FIG. 25B illustrates the method previously shown in FIG. 10, step 370 where the most recently accessed randomized (non-sequential) update block is closed whenever the number of random update blocks exceeds a predetermined limit.

단계 1354: 논리적으로 비순차적 순서로 논리적 단위들의 데이터를 저장하기 위해 개방된 업데이트 블록들 중에 제 2 소정 개수의 업데이트 블록까지 할당한다.Step 1354: Allocate up to a second predetermined number of update blocks among open update blocks for storing data of logical units in a logically out of order order.

단계 1356: 비순차적 업데이트 블록 개수가 제 2 소정 개수를 초과하게 될 때는 언제나, 제 2 소정 개수를 초과하지 않기 위해 최근 최소 액세스된 비순차적 업데이트 블록들 중 하나를 폐쇄된다.Step 1356: Whenever the number of non-sequential update blocks exceeds the second predetermined number, one of the most recently accessed non-sequential update blocks is closed so as not to exceed the second predetermined number.

이러한 이전의 방법의 한 단점은 이것이 어떤 환경들 하에서 무순서 업데이트 블록들의 과도한 폐쇄에 이르게 할 수 있다는 것이다. 이것은 새롭게 할당된 순차적 블록을 위해 풀에 빈 공간을 만들기 위해서 순차 기입이, 제어 데이터를 내포하는 무순서 블록을 조기에 폐쇄되게 할 때의 경우엔 특히 비효율적이다. 예를 들면, 폐쇄된 무순서 업데이트 블록 C4(1310)이 FAT 및 디렉토리 정보를 기록하는 중이었다면, 대체는 순차 기입이 행해지는 즉시 이 기능을 행하기 위해서 할당될 것을 즉각적으로 필요로 할 것이다. 이것은 제어 데이터를 기록하기 위한 대체 업데이트 블록을 위해 빈 공간을 만들기 위해서 풀에 현재 최소 활동적인 업데이트 블록을 폐쇄하는 과정을 또 수반할 것이다.One disadvantage of this previous method is that this can lead to excessive closure of random update blocks under certain circumstances. This is particularly inefficient when sequential writes cause early closing of random blocks containing control data to make free space in the pool for newly allocated sequential blocks. For example, if the closed random update block C4 1310 was writing FAT and directory information, the replacement would immediately need to be allocated to perform this function as soon as the sequential write was done. This will again entail closing the current least active update block in the pool to make free space for the replacement update block for recording control data.

발명의 현재의 면에 따라서, 소정 최대 개수의 업데이트 블록들을 초과하지 않기 위해서 업데이트 블록의 폐쇄는 최근 최소 사용된 업데이트 블록들을 단순히 선택하는 것에서부터, 무순서 업데이트 블록들의 과도한 폐쇄의 경우를 감소시키는 방법으로 더욱 구체화된다. 바람직한 실시예에서, 업데이트 블록이 순차 데이터를 기록하기 위해 할당되고 업데이트 블록 풀 내 하나는 빈 공간을 만들기 위해 폐쇄될 필요가 있다면, 풀 내 최소의 활동적 순차 업데이트 블록이 폐쇄된다.According to the present aspect of the invention, the closing of the update block in order not to exceed the predetermined maximum number of update blocks, from simply selecting the latest least used update blocks, to a method of reducing the case of excessive closure of random update blocks. It is further embodied as. In a preferred embodiment, if an update block is allocated to write sequential data and one in the update block pool needs to be closed to make free space, the minimum active sequential update block in the pool is closed.

도 26a, 도 26b 및 도 26c는 본 개선된 대체 방법에 따라, 업데이트 블록 풀에 새로운 업데이트 블록을 넣기 위한 이벤트의 시퀀스를 개략적으로 도시한 것이다.26A, 26B and 26C schematically illustrate a sequence of events for putting a new update block into an update block pool, according to this improved alternative method.

도 26a는 도 22에 기술된 바와 같이 "5-2" 구성의 업데이트 풀을 개략적으로 도시한 것이다. 이 예에서, 업데이트 풀은 최대 5개의 허용가능한 업데이트 블록들이 완전히 차지한다. 업데이트 풀은 3개의 순차 업데이트 블록들(S1, S2, S3)을 내포하는 순차 풀(1200), 및 최대 2개의 무순서 또는 비순차 업데이트 블록들(C4, C5)를 내포하는 무순서 풀(1300)로 더 분할된다. 예는 최소의 활동적 블록이 C4(1301)과 같은 무순서 업데이트 블록이 되는 일이 발생하는 도 24a와 유사한 상황을 보여준다. 또한, 이것은 순차 풀(1200)에 최소의 활동적인 것으로서 순차 블록 S3(1202)을 보여준다.FIG. 26A schematically illustrates an update pool of a “5-2” configuration as described in FIG. 22. In this example, the update pool is completely occupied by up to five allowable update blocks. The update pool includes a sequential pool 1200 containing three sequential update blocks S1, S2, and S3, and an unordered pool 1300 containing up to two unordered or nonsequential update blocks C4 and C5. Is further divided into). The example shows a situation similar to FIG. 24A where the smallest active block becomes an random update block such as C4 1301. This also shows sequential block S3 1202 as the least active in sequential pool 1200.

도 26b는 본 개선된 방법에 따라, 새로운 업데이트 블록을 위한 빈 공간을 만들기 위해서 업데이트 블록 풀의 한 블록의 폐쇄를 개략적으로 도시한 것이다. 순차 업데이트에 연관된 새로운 할당 및 풀 내에 업데이트 블록들의 수가 이미 최대에 있는 경우에, 풀 내 업데이트 블록들 중 하나는 새롭게 할당된 업데이트 블록을 위한 빈 공간을 만들기 위해 폐쇄되어야 할 것이다. 그러나, 이 경우에 최소 활동적인 블록은 C4(1301)이며, 이것은 무순서 블록이기 때문에, 이것은 무시될 것이 다. 대신에, 순차 풀(1200) 내 최소 활동적인 업데이트 블록은 폐쇄될 것이다. 이 예에서, 폐쇄되고 업데이트 블록 풀로부터 제거될 것은 S3(1202)이다.FIG. 26B schematically illustrates the closure of one block of an update block pool in order to make free space for a new update block, according to the present improved method. If the number of update blocks in the pool and the new allocation associated with sequential updates is already at a maximum, one of the update blocks in the pool will have to be closed to make free space for the newly allocated update block. However, in this case the least active block is C4 1301, which will be ignored because it is an unordered block. Instead, the least active update block in the sequential pool 1200 will be closed. In this example, it is S3 1202 that is to be closed and removed from the update block pool.

도 26c는 폐쇄된 업데이트 블록이 빈 공간을 만들기 위해 제거된 후에 풀에 새롭게 할당된 업데이트 블록을 넣는 것을 개략적으로 도시한 것이다. 이 경우에, 새롭게 할당된 업데이트 블록인 S6(1212)는 논리적으로 순차적인 순서로 데이터를 기록하기 위해 순차 풀(1200)에 넣어질 것이다. 이에 따라, UMAX, 즉 허용된 최대 수의 업데이트 블록들은 초과되지 않는다.FIG. 26C schematically illustrates putting a newly allocated update block into a pool after a closed update block has been removed to make free space. In this case, the newly allocated update block S6 1212 will be put into the sequential pool 1200 to write the data in a logically sequential order. Accordingly, U MAX , the maximum number of update blocks allowed, is not exceeded.

도 27a, 도 27b 및 도 27c는 본 개선된 대체 방법에 따라, 업데이트 블록 풀에 새로운 무순서 업데이트 블록에 넣기 위한 이벤트의 시퀀스를 개략적으로 도시한 것이다.27A, 27B, and 27C schematically illustrate a sequence of events for putting a new random update block into an update block pool, according to this improved alternative method.

도 27a는 도 22에 기술된 바와 같이 "5-2" 구성의 업데이트 풀을 개략적으로 도시한 것이다. 이 예에서, 업데이트 풀은 최대 5개의 허용가능한 업데이트 블록들이 완전히 차지한다. 업데이트 풀은 3개의 순차 업데이트 블록들(S1, S2, S3)을 내포하는 순차 풀(1200), 및 최대 2개의 무순서 또는 비순차 업데이트 블록들(C4, C5)를 내포하는 무순서 풀(1300)로 더 분할된다. 예는 최소의 활동적인 블록이 S6(1201)과 같은 순차 업데이트 블록이 되는 일이 발생함을 보여준다. 또한, 이것은 무순서 풀(1300)에 최소의 활동적인 것으로서 무순서 블록 C4(1302)을 보여준다.FIG. 27A schematically illustrates an update pool of a “5-2” configuration as described in FIG. 22. In this example, the update pool is completely occupied by up to five allowable update blocks. The update pool includes a sequential pool 1200 containing three sequential update blocks S1, S2, and S3, and an unordered pool 1300 containing up to two unordered or nonsequential update blocks C4 and C5. Is further divided into). The example shows that the least active block becomes a sequential update block such as S6 1201. This also shows random block C4 1302 as the least active in random pool 1300.

도 27b는 본 개선된 방법에 따라, 새로운 업데이트 블록을 위한 빈 공간을 만들기 위해서 업데이트 블록의 풀 중 하나의 폐쇄를 개략적으로 도시한 것이다. 새로운 무순서 업데이트 블록이 이미 충만된 무순서 풀(1300)에 넣어지는 경우에, 무순서 풀 내 업데이트 블록들 중 하나는 빈 공간을 만들기 위해 폐쇄되어야 할 것이다. 예에서, 무순서 풀(1300)은 최대 2개의 무순서 업데이트 블록들을 이미 내포한다. 또 다른 무순서 업데이트 블록이 생성될 때, 예를 들면 현존 순차 블록 S1(1220)이 무순서 블록으로 변환되어야 할 때, 최대수의 무순서 블록들은 이들 중 하나가 제거되지 않는다면 초과될 것이다. 이 경우, 최소의 활동적인 무순서 블록 C4(1302)는 빈 공간을 만들기 위해서 폐쇄되고 무순서 풀(1300)로부터 제거된다.27B schematically illustrates the closure of one of the pools of update blocks to make free space for a new update block, in accordance with the present improved method. If a new random update block is put into the random pool 1300 that is already filled, one of the update blocks in the random pool will have to be closed to make free space. In the example, the random pool 1300 already contains up to two random update blocks. When another random update block is created, for example, when existing sequential block S1 1220 is to be converted to random blocks, the maximum number of random blocks will be exceeded if one of them is not removed. In this case, the minimum active random block C4 1302 is closed and removed from the random pool 1300 to make free space.

도 27c는 또 다른 무순서 업데이트 블록이 빈 공간을 만들기 위해서 폐쇄되고 제거된 후에 풀에 새로운 무순서 업데이트 블록을 넣는 것을 개략적으로 도시한 것이다. 이 경우, S1은 순차 풀(1200) 내 순차 업데이트 블록(1220)에서 무순서 풀(1300)에 무순서 업데이트 블록 C6(1320)으로 전환되었다. 이에 따라, UCMAX, 즉 허용된 최대수의 무순서 업데이트 블록들은 초과되지 않는다.27C schematically illustrates putting a new random update block into the pool after another random update block is closed and removed to make room. In this case, S1 is switched from the sequential update block 1220 in the sequential pool 1200 to the random update block C6 1320 in the random order pool 1300. Accordingly, U CMAX , the maximum number of random update blocks allowed, is not exceeded.

도 28은 제 1 실시예에 따라, 순차 업데이트 동안에, 제한된 한 세트의 업데이트 블록들을 관리하는 본 개선된 방법을 도시한 흐름도이다.28 is a flowchart illustrating the present improved method of managing a limited set of update blocks during sequential update, according to the first embodiment.

단계 1400: 비휘발성 메모리를 블록들로 조직한다. 각 블록은 함께 소거 가능한 데이터를 저장하기 위한 것이다.Step 1400: Organize the nonvolatile memory into blocks. Each block is for storing data that can be erased together.

단계 1402: 논리적 단위들의 데이터의 업데이트들을 저장하기 위해 동시 개방된 제 1 소정 개수의 업데이트 블록까지 할당한다.Step 1402: Allocate up to a first predetermined number of update blocks that are simultaneously open for storing updates of data in logical units.

단계 1406: 순차 데이터를 기입하라는 기입 명령에 응하여, 논리 단위들의 데이터를 순차적 순서로 업데이트 블록에 기입한다.Step 1406: In response to a write command to write sequential data, write data of logical units to the update block in sequential order.

단계 1408: 순차적인 논리 단위들의 데이터의 추가 기입에 대해 폐쇄될 업데이트 블록에 대해 만족되는 소정의 상태에 응하여, 기입을 계속하기 위해 새로운 업데이트 블록을 할당하고, 새로운 할당이 제 1 소정 개수를 초과하면, 비순차 순서로 임의의 최근 최소 액세스된 업데이트 블록에 대해 순차적 순서로 최근 최소에 액세스된 업데이트 블록을 우선적으로 폐쇄한다.Step 1408: In response to a predetermined condition satisfied for the update block to be closed for further writing of sequential logical units of data, allocate a new update block to continue writing, and if the new allocation exceeds the first predetermined number. , Preferentially closes the last least accessed update block in sequential order for any recently least accessed update block in out of order.

도 29는 제 2 실시예에 따라, 2개의 소정의 제한들을 갖는 제한된 한 세트의 업데이트 블록들을 관리하는 본 개선된 방법을 도시한 흐름도이다.29 is a flowchart illustrating the present improved method of managing a limited set of update blocks with two predetermined limitations, according to the second embodiment.

단계 1410: 비휘발성 메모리를 블록들로 조직한다. 각 블록은 함께 소거 가능한 데이터를 저장하기 위한 것이다.Step 1410: Organize the nonvolatile memory into blocks. Each block is for storing data that can be erased together.

단계 1412: 논리적 단위들의 데이터의 업데이트들을 저장하기 위해 동시 개방된 제 1 소정 개수의 업데이트 블록까지 할당한다.Step 1412: Allocate up to a first predetermined number of update blocks that are simultaneously open for storing updates of data in logical units.

단계 1416: 논리적으로 비순차적 순서로 논리적 단위들의 데이터를 저장하기 위해 개방된 업데이트 블록들 중에서 제 2 소정 개수의 업데이트 블록까지 할당한다.Step 1416: Allocate up to a second predetermined number of update blocks among open update blocks for storing data of logical units in a logically out of order order.

단계 1418: 논리적으로 순차적인 순서로 데이터를 저장하기 위한 업데이트 블록의 도입이 제 1 소정 개수를 초과할 수 있을 때마다, 도입된 업데이트 블록을 위해 빈 공간을 만들기 위해 논리적으로 순차적인 순서로 데이터를 내포하는 최근 최소 액세스된 업데이트 블록들을 폐쇄한다.Step 1418: Whenever the introduction of update blocks for storing data in a logically sequential order may exceed the first predetermined number, the data is placed in a logically sequential order to make free space for the introduced update blocks. Close the latest minimally accessed update blocks that contain.

단계 1420: 논리적으로 비순차적인 순서로 데이터를 저장하기 위한 업데이트 블록의 도입이 제 2 소정 개수를 초과할 수 있을 때마다, 도입된 업데이트 블록을 위해 빈 공간을 만들기 위해 논리적으로 비순차적인 순서로 데이터를 내포하는 최근 최소 액세스된 업데이트 블록들을 폐쇄한다.Step 1420: Whenever introduction of update blocks for storing data in a logically out of order order may exceed a second predetermined number, in logically out of order order to make free space for the introduced update blocks. Closes the least recently accessed update blocks containing the data.

본 방법의 일반화는 이를테면 업데이트 블록이 순차적인 데이터를 저장하고 있는지 아니면 비순차적인 데이터를 저장하고 있는지, 또는 어떤 기정의된 유형의 시스템 데이터를 저장하고 있는지와 같이, 한 세트의 속성들에 기초하여 업데이트 블록들을 유별하는 것이다. 제한된 수의 업데이트 블록들의 풀을 구현함에 있어, 업데이트 블록들의 각 클래스는 이 클래스를 위해 지원되는 최대수가 초과하게 될 때 대체를 위해 그 자신의 규칙을 가질 것이다. The generalization of the method is based on a set of attributes, such as whether the update block is storing sequential data or nonsequential data, or what predefined type of system data. To classify update blocks. In implementing a limited number of update blocks pools, each class of update blocks will have its own rules for replacement when the maximum number supported for this class is exceeded.

예를 들면, 순차적 업데이트 블록 및 비순차적 업데이트 블록들은 2개의 서로 다른 클래스들이다. 이들 클래스들 각각에 대한 대체 규칙들은 동일하다. 즉 최소 활동적인 것을 새로운 것으로 대체한다. 이에 따라, 순차 업데이트 블록의 풀이 초과하게 될 때, 풀 내 최소 활동적인 것은 폐쇄되고 새로운 것이 풀에 넣어지기 전에 제거될 것이다. 비순차적 업데이트 블록들의 풀에 대해서도 유사하다.For example, sequential update blocks and non-sequential update blocks are two different classes. The substitution rules for each of these classes are the same. That is, replace the least active with a new one. Thus, when the pool of sequential update blocks is exceeded, the least active in the pool will be closed and removed before new ones are put into the pool. The same is true for a pool of out of order update blocks.

일반적으로 각 클래스는 다른 클래스들과는 무관하게 그 자신의 대체 규칙을 갖는다. 대체 규칙들의 예들은 대응하는 클래스들에 따라, 최근 최소 액세스된, 가장 최근 액세스된, 최소의 빈번하게 액세스된, 가장 빈번하게 액세스된, 등을 대체하는 것이다.In general, each class has its own replacement rules, independent of other classes. Examples of replacement rules are to replace the latest least accessed, most recently accessed, least frequently accessed, most frequently accessed, etc., according to corresponding classes.

도 30은 클래스 기반의 대체 규칙들을 갖는 제한된 한 세트의 업데이트 블록 들을 관리하는 본 개선된 방법을 도시한 흐름도이다.30 is a flowchart illustrating the present improved method of managing a limited set of update blocks with class based replacement rules.

단계 1430: 비휘발성 메모리를 블록들로 조직한다. 각 블록은 함께 소거 가능한 데이터를 저장하기 위한 것이다.Step 1430: Organize the nonvolatile memory into blocks. Each block is for storing data that can be erased together.

단계 1432: 논리적 단위들의 데이터의 업데이트들을 저장하기 위해 동시 개방된 제 1 소정 개수의 업데이트 블록까지의 풀을 제공한다. Step 1432: Provide a pool up to a first predetermined number of update blocks that are simultaneously open for storing updates of data in logical units.

단계 1436: 한 세트의 속성들에 기초하여 업데이트 블록들을 유별하기 위해 한 세트의 기정의된 클래스들을 제공하는 것으로, 각 클래스는 연관된 소정 최대 개수의 업데이트 블록까지의 하위-풀(sub-pool)을 지원한다.Step 1436: Providing a set of predefined classes to classify update blocks based on a set of attributes, each class sub-pool up to a predetermined maximum number of update blocks associated with it. Support.

단계 1438: 대체될 각각의 하위 풀 내 업데이트 블록을 명시하기 위해 한 세트의 기정의된 클래스들에 한 세트의 대응하는 대체 규칙들을 제공한다.Step 1438: Provide a set of corresponding replacement rules to a set of predefined classes to specify an update block in each subpool to be replaced.

단계 1440: 클래스에 의해 풀 내 업데이트 블록들을 대응하는 하위 풀들로 그룹으로 나눈다. Step 1440: Divide the update blocks in the pool by the class into corresponding subpools.

단계 1442: 동일 클래스의 또 다른 업데이트 블록이 이에 넣어지고 있을 때마다 연관된 소정 최대 개수의 업데이트 블록들을 내포하는 하위 풀 내 최소 활동적인 업데이트 블록을 폐쇄하고 제거한다.Step 1442: Each time another update block of the same class is being put in it, close and remove the least active update block in the lower pool containing the associated maximum number of update blocks.

모든 특허들, 특허출원들, 논문들, 책들, 명세들, 그외 공보들, 문서들 및 여기에서 참조된 것들은 모든 목적들을 위해 이들 전부를 참조로 여기 포함시킨다. 포함시킨 공보들, 문서들 또는 참조된 것들 중 어느 것과 본 문서의 텍스트 간에 용어의 정의 또는 사용에서 어떤 불일치 또는 상충의 정도까지도, 본 문서 내 용어의 정의 또는 사용이 우선할 것이다.All patents, patent applications, papers, books, specifications, other publications, documents and references referenced herein are incorporated by reference in their entirety for all purposes. To the extent of any inconsistency or conflict in the definition or use of terms between any publications, documents or references referenced and the text of this document, the definition or use of terms in this document shall prevail.

본 발명의 여러 면들이 어떤 실시예들에 관하여 기술되었을지라도, 발명은 첨부된 청구항들의 전체 범위 내에서 보호될 자격이 있음이 이해된다.Although various aspects of the invention have been described with respect to certain embodiments, it is understood that the invention is entitled to be protected within the scope of the appended claims.

상술한 바와 같이, 본 발명은, 일반적으로 비휘발성 반도체 메모리를 제공하고, 구체적으로는 데이터를 저장하기 위해 동시 개방된 블록 풀(pool)의 대체를 관리하는 개선된 시스템을 갖춘 메모리 블록 관리 시스템을 구비한 것을 제공하는데 사용된다.As noted above, the present invention generally provides a memory block management system with an improved system that provides a non-volatile semiconductor memory and specifically manages the replacement of a concurrently open block pool for storing data. It is used to provide what is provided.

Claims (29)

복수의 블록들로 구성된 비휘발성 메모리에서, 각 블록은 함께 소거 가능한 논리적 단위들의 데이터를 저장하기 위한 것으로, 상기 메모리에 데이터를 저장하기 위한 방법은,In a nonvolatile memory composed of a plurality of blocks, each block is for storing data of logical units that can be erased together, and a method for storing data in the memory includes: 논리 단위의 데이터의 업데이트들을 저장하기 위해 동시 개방된 업데이트 블록들로서 제 1 소정 개수 이하의 블록을 할당하는 단계;Allocating no more than a first predetermined number of blocks as concurrently open update blocks for storing updates of data in a logical unit; 논리적으로 순차적인 순서로 된 데이터를 기입하라는 기입 명령에 응하여, 데이터를 업데이트 블록에 논리적으로 순차적인 순서로 기입하는 단계; 및In response to a write command to write data in a logically sequential order, writing the data to the update block in a logically sequential order; And 상기 순차적인 논리 단위의 데이터의 추가 기입에 대해 상기 업데이트 블록이 폐쇄될 소정의 조건이 충족된 것에 응하여, 상기 기입을 계속하기 위해 새로운 업데이트 블록을 할당하고, 상기 새로운 할당이 상기 제 1 소정 개수를 초과하면, 비순차적 순서로 데이터를 저장한 임의의 최근 최소 액세스된 것보다 순차적 순서로 데이터를 저장한 최근 최소 액세스된 업데이트 블록을 우선적으로 폐쇄하는 단계를In response to a predetermined condition that the update block is closed for further writing of the data in the sequential logical unit, a new update block is allocated to continue the writing, and the new allocation causes the first predetermined number to be allocated. If exceeded, preferentially closing the last least accessed update block that stored the data in sequential order than any recent minimum accessed one that stored the data in a non-sequential order. 포함하는, 메모리에 데이터를 저장하는 방법.And storing the data in the memory. 복수의 블록들로 구성된 비휘발성 메모리에서, 각 블록은 함께 소거 가능한 논리 단위의 데이터를 저장하기 위한 것으로, 상기 메모리에 데이터를 저장하기 위한 방법은,In a nonvolatile memory composed of a plurality of blocks, each block is for storing data of a logical unit that can be erased together, and a method for storing data in the memory is 논리 단위의 데이터의 업데이트들을 저장하기 위해 동시 개방된 업데이트 블록들로서 제 1 소정 개수 이하의 블록을 할당하는 단계;Allocating no more than a first predetermined number of blocks as concurrently open update blocks for storing updates of data in a logical unit; 논리적으로 비순차적 순서로 논리 단위의 데이터를 저장하기 위해 상기 개방된 업데이트 블록들 중에서 제 2 소정 개수의 업데이트 블록까지 할당하는 단계;Allocating up to a second predetermined number of update blocks from the open update blocks to store data in logical units in a logically out of order order; 논리적으로 순차적 순서로 데이터를 저장하기 위해 업데이트 블록의 도입이 상기 제 1 소정 개수를 초과할 수 있을 때는 언제나, 상기 도입되는 업데이트 블록을 위해 빈 공간을 만들기 위해서 논리적으로 순차적인 순서로 데이터를 내포하는 최근 최소 액세스된 업데이트 블록들을 폐쇄하는 단계; 및Whenever the introduction of update blocks to store data in a logically sequential order can exceed the first predetermined number, the data is nested in a logically sequential order to make free space for the introduced update blocks. Closing the most recently accessed update blocks; And 논리적으로 비순차적 순서로 데이터를 저장하기 위해 업데이트 블록의 도입이 상기 제 2 소정 개수를 초과할 수 있을 때는 언제나, 상기 도입되는 업데이트 블록을 위해 빈 공간을 만들기 위해서 논리적으로 비순차적인 순서로 데이터를 내포하는 최근 최소 액세스된 업데이트 블록들을 폐쇄하는 단계를Whenever the introduction of update blocks to store data in a logically out of order order can exceed the second predetermined number, the data is placed in a logically out of order to make free space for the introduced update block. Closing the latest minimally accessed update blocks that contain 포함하는, 메모리에 데이터를 저장하는 방법.And storing the data in the memory. 제 2항에 있어서, 논리적으로 비순차적 순서로 데이터를 저장하기 위한 상기 업데이트 블록은 논리적으로 순차적 순서로 데이터를 저장하는 것으로부터 전환된, 메모리에 데이터를 저장하는 방법.3. The method of claim 2, wherein said update block for storing data in a logically out of order sequence is converted from storing the data in a logically sequential order. 복수의 블록들로 구성된 비휘발성 메모리에서, 각 블록은 함께 소거 가능한 논리 단위의 데이터를 저장하기 위한 것으로, 상기 메모리에 데이터를 저장하기 위 한 방법은,In a nonvolatile memory composed of a plurality of blocks, each block is for storing data of a logical unit that can be erased together. A method for storing data in the memory includes: 논리 단위의 데이터의 업데이트들을 저장하기 위해 동시 개방된 업데이트 블록들로서 제 1 소정 개수 이하의 블록을 할당하는 단계;Allocating no more than a first predetermined number of blocks as concurrently open update blocks for storing updates of data in a logical unit; 논리 단위의 데이터의 업데이트들을 저장하기 위해 동시 개방된 제 1 소정 개수의 업데이트 블록까지의 풀을 제공하는 단계;Providing a pool up to a first predetermined number of update blocks that are simultaneously open for storing updates of data in a logical unit; 한 세트의 속성들에 기초하여 업데이트 블록들을 유별하기 위한 한 세트의 기정의된 클래스들을 제공하는 단계로서, 각각의 클래스는 연관된 소정 최대 개수의 업데이트 블록까지의 하위 풀을 지원하는, 단계;Providing a set of predefined classes for classifying update blocks based on a set of attributes, each class supporting a subpool up to a predetermined maximum number of update blocks associated therewith; 대체될 상기 각각의 하위 풀들 내 상기 업데이트 블록을 명시하기 위해서 상기 한 세트의 기정의된 클래스들에 한 세트의 대응하는 대체 규칙들을 제공하는 단계;Providing a set of corresponding replacement rules for the set of predefined classes to specify the update block in the respective subpools to be replaced; 대응하는 하위 풀들에 클래스별로 상기 풀 내 상기 업데이트 블록들을 그룹으로 나누는 단계; 및Dividing the update blocks in the pool into groups into corresponding lower pools by class; And 상기 연관된 소정 최대 개수의 업데이트 블록들을 내포하는 하위 풀에 동일 클래스의 또 다른 업데이트 블록이 도입되고 있을 때는 언제나, 하위 풀 내 최소 활동적인 업데이트 블록을 폐쇄하고 제거하는 단계로서, 상기 제거된 업데이트 블록은 상기 동일 클래스에 대한 상기 대응하는 대체 규칙에 따라 선택되는, 단계를Whenever and when another update block of the same class is being introduced to a lower pool containing the associated maximum number of update blocks, closing and removing the least active update block in the lower pool, wherein the removed update block is Selecting according to the corresponding replacement rule for the same class. 포함하는, 메모리에 데이터를 저장하는 방법.And storing the data in the memory. 제 4항에 있어서, 상기 한 세트의 속성들은 논리적으로 순차적인 순서로 데 이터를 저장하는 블록을 포함하는, 메모리에 데이터를 저장하는 방법.5. The method of claim 4, wherein said set of attributes comprises a block for storing data in a logically sequential order. 제 4항에 있어서, 상기 한 세트의 속성들은 논리적으로 비순차적인 순서로 데이터를 저장하는 블록을 포함하는, 메모리에 데이터를 저장하는 방법.5. The method of claim 4, wherein said set of attributes comprises a block for storing data in a logically out of order. 제 4항에 있어서, 상기 한 세트의 속성들은 상기 메모리를 동작시키는 것에 연관된 시스템 데이터를 저장하는 블록을 포함하는, 메모리에 데이터를 저장하는 방법.5. The method of claim 4, wherein said set of attributes comprises a block for storing system data associated with operating said memory. 제 4항에 있어서, 상기 메모리는 플래시 EEPROM인, 메모리에 데이터를 저장하는 방법.The method of claim 4, wherein the memory is a flash EEPROM. 제 4항에 있어서, 상기 메모리는 NAND 구조를 갖는, 메모리에 데이터를 저장하는 방법.The method of claim 4, wherein the memory has a NAND structure. 제 4항에 있어서, 상기 메모리는 착탈 가능 메모리 카드상에 있는, 메모리에 데이터를 저장하는 방법.5. The method of claim 4, wherein the memory is on a removable memory card. 제 4항에 있어서, 상기 비휘발성 메모리는 플로팅 게이트 구조를 갖는 메모리 셀들을 구비하는, 메모리에 데이터를 저장하는 방법.5. The method of claim 4, wherein the nonvolatile memory includes memory cells having a floating gate structure. 제 4항에 있어서, 상기 비휘발성 메모리는 유전층 구조를 갖는 메모리 셀들을 구비하는, 메모리에 데이터를 저장하는 방법.5. The method of claim 4, wherein the nonvolatile memory includes memory cells having a dielectric layer structure. 제 1항 내지 제 12항 중 어느 한 항에 있어서, 상기 메모리는 각각 일 비트의 데이터를 저장하는 메모리 셀들을 갖는, 메모리에 데이터를 저장하는 방법.13. The method of any of claims 1 to 12, wherein the memory has memory cells each storing one bit of data. 제 1항 내지 제 12항 중 어느 한 항에 있어서, 상기 메모리는 각각 일 비트 이상의 데이터를 저장하는 메모리 셀들을 갖는, 메모리에 데이터를 저장하는 방법.13. The method of any of claims 1 to 12, wherein the memory has memory cells each storing one or more bits of data. 비휘발성 메모리에 있어서,Non-volatile memory, 블록들로 구성된 메모리로서, 각 블록은 함께 소거 가능한 메모리 단위들로 분할되고, 각 메모리 단위는 논리적 단위의 데이터를 저장하기 위한, 메모리; 및A memory comprised of blocks, each block being divided into erasable memory units, each memory unit for storing data in logical units; And 상기 블록들의 동작들을 제어하기 위한 제어기로서, A controller for controlling the operations of the blocks, 논리 단위의 데이터의 업데이트들을 저장하기 위해 동시 개방된 업데이트 블록들로서 제 1 소정 개수 이하의 블록을 할당하며;Assign a first predetermined number or less of blocks as concurrently open update blocks to store updates of data in a logical unit; 논리적으로 순차적인 순서로 된 데이터를 기입하라는 기입 명령에 응하여, 데이터를 업데이트 블록에 논리적으로 순차적인 순서로 기입하며;In response to a write command to write data in logically sequential order, write the data to the update block in logically sequential order; 상기 순차적인 논리 단위의 데이터의 추가 기입에 대해 상기 업데이트 블록이 폐쇄될 소정의 조건이 충족된 것에 응하여, 상기 기입을 계속하기 위해 새로운 업데이트 블록을 할당하고, 상기 새로운 할당이 상기 제 1 소정 개수를 초과하면, 비순차적 순서로 데이터를 저장한 임의의 최근 최소 액세스된 것보다 순차적 순서로 데이터를 저장한 최근 최소 액세스된 업데이트 블록을 우선적으로 폐쇄하는, 상기 제어기를In response to a predetermined condition that the update block is closed for further writing of the data in the sequential logical unit, a new update block is allocated to continue the writing, and the new allocation causes the first predetermined number to be allocated. If exceeded, the controller is configured to preferentially close the last least accessed update block that stored the data in sequential order than any recent minimum accessed that stored the data in a nonsequential order. 포함하는, 비휘발성 메모리.Including, non-volatile memory. 비휘발성 메모리에 있어서, Non-volatile memory, 블록들로 구성된 메모리로서, 각 블록은 함께 소거 가능한 메모리 단위들로 분할되고, 각 메모리 단위는 논리적 단위의 데이터를 저장하기 위한, 메모리; 및A memory comprised of blocks, each block being divided into erasable memory units, each memory unit for storing data in logical units; And 상기 블록들의 동작들을 제어하기 위한 제어기로서,A controller for controlling the operations of the blocks, 논리 단위의 데이터의 업데이트들을 저장하기 위해 동시 개방된 업데이트 블록들로서 제 1 소정 개수 이하의 블록을 할당하고;Assign a first predetermined number or less of blocks as concurrently open update blocks to store updates of data in a logical unit; 논리적으로 비순차적 순서로 논리 단위의 데이터를 저장하기 위해 상기 개방된 업데이트 블록들 중에서 제 2 소정 개수의 업데이트 블록까지 할당하며;Allocate up to a second predetermined number of update blocks from the open update blocks to store data in logical units in a logically out of order order; 논리적으로 순차적 순서로 데이터를 저장하기 위해 업데이트 블록의 도입이 상기 제 1 소정 개수를 초과할 수 있을 때는 언제나, 상기 도입되는 업데이트 블록을 위해 빈 공간을 만들기 위해서 논리적으로 순차적인 순서로 데이터를 내포하는 최근 최소 액세스된 업데이트 블록들을 폐쇄하며;Whenever the introduction of update blocks to store data in a logically sequential order can exceed the first predetermined number, the data is nested in a logically sequential order to make free space for the introduced update blocks. Closes the least recently accessed update blocks; 논리적으로 비순차적 순서로 데이터를 저장하기 위해 업데이트 블록의 도입이 상기 제 2 소정 개수를 초과할 수 있을 때는 언제나, 상기 도입되는 업데이트 블록을 위해 빈 공간을 만들기 위해서 논리적으로 비순차적인 순서로 데이터를 내포하는 최근 최소 액세스된 업데이트 블록들을 폐쇄하는, 상기 제어기를Whenever the introduction of update blocks to store data in a logically out of order order can exceed the second predetermined number, the data is placed in a logically out of order to make free space for the introduced update block. Closing the containing least recently accessed update blocks; 포함하는, 비휘발성 메모리.Including, non-volatile memory. 제 16항에 있어서, 논리적으로 비순차적 순서로 데이터를 저장하기 위한 상기 업데이트 블록은 논리적으로 순차적 순서로 데이터를 저장하는 것으로부터 전환된, 비휘발성 메모리.17. The non- volatile memory as in claim 16, wherein the update block for storing data in a logically out of order sequence is converted from storing the data in a logically sequential order. 비휘발성 메모리에 있어서, Non-volatile memory, 블록들로 구성된 메모리로서, 각 블록은 함께 소거 가능한 메모리 단위들로 분할되고, 각 메모리 단위는 논리적 단위의 데이터를 저장하기 위한, 메모리; 및A memory comprised of blocks, each block being divided into erasable memory units, each memory unit for storing data in logical units; And 논리 단위의 데이터의 업데이트들을 저장하기 위해 동시 개방된 제 1 소정 개수의 업데이트 블록까지의 풀;A pool up to a first predetermined number of update blocks that are simultaneously open for storing updates of data in a logical unit; 한 세트의 속성들에 기초하여 업데이트 블록들을 유별하기 위한 한 세트의 기정의된 클래스들로서, 각각의 클래스는 연관된 소정 최대 개수의 업데이트 블록까지의 하위 풀을 지원하는, 클래스들;A set of predefined classes for classifying update blocks based on a set of attributes, each class supporting a subpool up to a predetermined maximum number of update blocks associated therewith; 대체될 상기 각각의 하위 풀들 내 상기 업데이트 블록을 명시하기 위해서 상기 한 세트의 기정의된 클래스들에 대한 한 세트의 대응하는 대체 규칙들;A set of corresponding replacement rules for the set of predefined classes to specify the update block in the respective subpools to be replaced; 클래스별로 업데이트 블록들을 내포하는 한 세트의 하위 풀들; 및A set of subpools containing update blocks for each class; And 상기 블록들의 동작들을 제어하기 위한 제어기로서,A controller for controlling the operations of the blocks, 상기 연관된 소정 최대 개수의 업데이트 블록들을 내포하는 하위 풀에 동일 클래스의 또 다른 업데이트 블록이 도입되고 있을 때는 언제나, 하위 풀 내 업데이트 블록을 폐쇄하고 제거하며, 상기 제거된 업데이트 블록은 상기 동일 클래스에 대한 상기 대응하는 대체 규칙에 따라 선택되는, 상기 제어기를Whenever another update block of the same class is being introduced to a lower pool containing the associated predetermined maximum number of update blocks, the update block in the lower pool is closed and removed, and the removed update block is for the same class. Selecting the controller according to the corresponding replacement rule. 포함하는, 비휘발성 메모리.Including, non-volatile memory. 제 18항에 있어서, 상기 한 세트의 속성들은 논리적으로 순차적인 순서로 데이터를 저장하는 블록을 포함하는, 비휘발성 메모리.19. The nonvolatile memory as in claim 18, wherein the set of attributes includes a block for storing data in a logically sequential order. 제 18항에 있어서, 상기 한 세트의 속성들은 논리적으로 비순차적인 순서로 데이터를 저장하는 블록을 포함하는, 비휘발성 메모리.19. The nonvolatile memory as in claim 18, wherein the set of attributes includes a block for storing data in a logically out of order. 제 18항에 있어서, 상기 한 세트의 속성들은 상기 메모리를 동작시키는 것에 연관된 시스템 데이터를 저장하는 블록을 포함하는, 비휘발성 메모리. 19. The non- volatile memory as in claim 18, wherein the set of attributes comprises a block for storing system data associated with operating the memory. 제 18항에 있어서, 상기 메모리는 플래시 EEPROM인, 비휘발성 메모리.19. The nonvolatile memory as in claim 18, wherein the memory is a flash EEPROM. 제 18항에 있어서, 상기 메모리는 NAND 구조를 갖는, 비휘발성 메모리.19. The nonvolatile memory as in claim 18, wherein the memory has a NAND structure. 제 18항에 있어서, 상기 메모리는 착탈 가능 메모리 카드상에 있는, 비휘발 성 메모리.19. The nonvolatile memory as in claim 18, wherein the memory is on a removable memory card. 제 18항에 있어서, 상기 비휘발성 메모리는 플로팅 게이트 구조를 갖는 메모리 셀들을 구비하는, 비휘발성 메모리.19. The nonvolatile memory as in claim 18, wherein the nonvolatile memory includes memory cells having a floating gate structure. 제 18항에 있어서, 상기 비휘발성 메모리는 유전층 구조를 갖는 메모리 셀들을 구비하는, 비휘발성 메모리.19. The nonvolatile memory as in claim 18, wherein the nonvolatile memory includes memory cells having a dielectric layer structure. 비휘발성 메모리에 있어서,Non-volatile memory, 블록들로 구성된 메모리로서, 각 블록은 함께 소거 가능한 메모리 단위들로 분할되고, 각 메모리 단위는 논리적 단위의 데이터를 저장하기 위한, 메모리;A memory comprised of blocks, each block being divided into erasable memory units, each memory unit for storing data in logical units; 논리 단위의 데이터의 업데이트들을 저장하기 위해 동시 개방된 제 1 소정 최대 개수의 업데이트 블록까지의 풀;A pool up to a first predetermined maximum number of update blocks concurrently open for storing updates of data in a logical unit; 한 세트의 속성들에 기초하여 업데이트 블록들을 유별하기 위한 한 세트의 기정의된 클래스들로서, 각각의 클래스는 연관된 소정 최대 개수의 업데이트 블록까지의 하위 풀을 지원하는, 클래스들;A set of predefined classes for classifying update blocks based on a set of attributes, each class supporting a subpool up to a predetermined maximum number of update blocks associated therewith; 대체될 상기 각각의 하위 풀들 내 상기 업데이트 블록을 명시하기 위해서 상기 한 세트의 기정의된 클래스들에 대한 한 세트의 대응하는 대체 규칙들;A set of corresponding replacement rules for the set of predefined classes to specify the update block in the respective subpools to be replaced; 클래스별로 업데이트 블록들을 내포하는 한 세트의 하위 풀들; 및A set of subpools containing update blocks for each class; And 상기 연관된 소정 최대 개수의 업데이트 블록들을 내포하는 하위 풀에 동일 클래스의 또 다른 업데이트 블록이 도입되고 있을 때는 언제나, 하위 풀 내 업데이트 블록을 폐쇄하고 제거하는 수단으로서, 상기 제거된 업데이트 블록은 상기 동일 클래스에 대한 상기 대응하는 대체 규칙에 따라 선택되는, 상기 수단을Whenever another update block of the same class is being introduced into a lower pool containing the associated predetermined maximum number of update blocks, means for closing and removing the update block in the lower pool, wherein the removed update block is the same class. Means selected according to the corresponding replacement rule for 포함하는, 비휘발성 메모리.Including, non-volatile memory. 제 15항 내지 제 27항 중 어느 한 항에 있어서, 상기 메모리는 각각 일 비트의 데이터를 저장하는 메모리 셀들을 갖는, 비휘발성 메모리.28. The nonvolatile memory as in claim 15, wherein the memory has memory cells each storing one bit of data. 제 15항 내지 제 27항 중 어느 한 항에 있어서, 상기 메모리는 각각 일 비트 이상의 데이터를 저장하는 메모리 셀들을 갖는, 비휘발성 메모리.28. The nonvolatile memory as in any one of claims 15-27, wherein the memory has memory cells each storing one or more bits of data.
KR1020097007548A 2006-09-15 2007-09-12 Non-volatile memory and method for class-based update block replacement rules KR101430097B1 (en)

Applications Claiming Priority (5)

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

Publications (2)

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

Family

ID=39185714

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020097007548A KR101430097B1 (en) 2006-09-15 2007-09-12 Non-volatile memory and method for class-based update block replacement rules

Country Status (4)

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

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8832356B2 (en) 2010-02-11 2014-09-09 Samsung Electronics Co., Ltd. Apparatus and method for flash memory address translation
WO2021117939A1 (en) * 2019-12-12 2021-06-17 엘지전자 주식회사 Firmware provision apparatus and provision method therefor

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101526497B1 (en) * 2008-11-27 2015-06-10 삼성전자주식회사 System on chip and information processing method thereof
JP5175703B2 (en) * 2008-12-11 2013-04-03 株式会社東芝 Memory device
US8688894B2 (en) * 2009-09-03 2014-04-01 Pioneer Chip Technology Ltd. Page based management of flash storage
US11238450B2 (en) * 2016-12-21 2022-02-01 Nchain Licensing Ag Computer-implemented systems and methods to enable complex functionality on a blockchain while preserving security-based restrictions on script size and opcode limits
TWI659373B (en) * 2018-02-14 2019-05-11 財團法人工業技術研究院 Blockchain system and method thereof
TWI808384B (en) * 2021-02-23 2023-07-11 慧榮科技股份有限公司 Storage device, flash memory control and control method thereo
TWI821152B (en) * 2021-02-23 2023-11-01 慧榮科技股份有限公司 Storage device, flash memory control and control method thereo
CN115878729B (en) * 2023-03-03 2023-05-02 湖北省楚天云有限公司 Node block storage allocation optimization method and system based on alliance chain

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100389867B1 (en) * 2001-06-04 2003-07-04 삼성전자주식회사 Flash memory management method
US7139864B2 (en) * 2003-12-30 2006-11-21 Sandisk Corporation Non-volatile memory and method with block management system
JP2007280108A (en) * 2006-04-07 2007-10-25 Sony Corp Storage medium controller, storage medium control method, and program
US7779056B2 (en) * 2006-09-15 2010-08-17 Sandisk Corporation Managing a pool of update memory blocks based on each block's activity and data order

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8832356B2 (en) 2010-02-11 2014-09-09 Samsung Electronics Co., Ltd. Apparatus and method for flash memory address translation
WO2021117939A1 (en) * 2019-12-12 2021-06-17 엘지전자 주식회사 Firmware provision apparatus and provision method therefor

Also Published As

Publication number Publication date
TW200837562A (en) 2008-09-16
WO2008033952A2 (en) 2008-03-20
WO2008033952A3 (en) 2008-10-02
JP4682261B2 (en) 2011-05-11
TWI340899B (en) 2011-04-21
JP2010503929A (en) 2010-02-04
KR101430097B1 (en) 2014-08-13

Similar Documents

Publication Publication Date Title
US7774392B2 (en) Non-volatile memory with management of a pool of update memory blocks based on each block's activity and data order
EP1704571B1 (en) Non-volatile memory and method with block management system
US7779056B2 (en) Managing a pool of update memory blocks based on each block's activity and data order
US7624239B2 (en) Methods for the management of erase operations in non-volatile memories
US7783845B2 (en) Structures for the management of erase operations in non-volatile memories
KR101430097B1 (en) Non-volatile memory and method for class-based update block replacement rules
US20080091871A1 (en) Non-volatile memory with worst-case control data management
US20080091901A1 (en) Method for non-volatile memory with worst-case control data management
EP1702338B1 (en) Robust data duplication and improved update method in a multibit non-volatile memory
KR20070007264A (en) Non-volatile memory and method with non-sequential update block management
JP2010507147A (en) Nonvolatile memory with data management in the worst case and method therefor
KR20060134011A (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
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20170719

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20180718

Year of fee payment: 5