KR101428189B1 - 비휘발성 메모리를 갖는 시스템을 위한 고속 트리 플래트닝 - Google Patents

비휘발성 메모리를 갖는 시스템을 위한 고속 트리 플래트닝 Download PDF

Info

Publication number
KR101428189B1
KR101428189B1 KR1020120102593A KR20120102593A KR101428189B1 KR 101428189 B1 KR101428189 B1 KR 101428189B1 KR 1020120102593 A KR1020120102593 A KR 1020120102593A KR 20120102593 A KR20120102593 A KR 20120102593A KR 101428189 B1 KR101428189 B1 KR 101428189B1
Authority
KR
South Korea
Prior art keywords
entries
tree
sliding window
nvm
nvm interface
Prior art date
Application number
KR1020120102593A
Other languages
English (en)
Other versions
KR20130030238A (ko
Inventor
다니엘 제이. 포스트
바딤 크멜니트스키
Original Assignee
애플 인크.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 애플 인크. filed Critical 애플 인크.
Publication of KR20130030238A publication Critical patent/KR20130030238A/ko
Application granted granted Critical
Publication of KR101428189B1 publication Critical patent/KR101428189B1/ko

Links

Images

Classifications

    • 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
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0608Saving storage space on storage systems
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • GPHYSICS
    • 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
    • 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
    • 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
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0643Management of files
    • 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
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • 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/7201Logical to physical mapping or translation of blocks or pages

Abstract

비휘발성 메모리(NVM)를 갖는 시스템을 위한 효율적인 버퍼링을 위한 시스템 및 방법이 개시된다. 트리는 논리 공간과 NVM의 물리적 어드레스들 간의 논리-대-물리 맵핑을 포함하는 휘발성 메모리 내에 저장될 수 있다. 트리에 대해 이용가능한 메모리의 양이 미리 정해진 임계 미만일 때, 시스템은 NVM 내의 데이터 단편들의 수를 감소시키려고 시도하고, 그 결과로 트리의 일부분을 플래트닝할 수 있다. NVM 인터페이스는 결합을 위해, 트리의 엔트리들의 최적 집합을 선택할 수 있다. 예를 들어, 하나 이상의 슬라이딩 윈도우를 트리를 가로질러 이동시키는 것, 조건이 만족될 때 슬라이딩 윈도우를 확장하는 것, 트리를 스캐닝하는 동안 우선순위 큐를 이용하는 것, 및/또는 트리가 갱신되고 있는 동안 우선순위 큐를 유지하는 것과 같은 임의의 적절한 접근법이 이용될 수 있다.

Description

비휘발성 메모리를 갖는 시스템을 위한 고속 트리 플래트닝{FASTER TREE FLATTENING FOR A SYSTEM HAVING NON-VOLATILE MEMORY}
대용량 저장을 위해, 다른 유형의 비휘발성 메모리(NVM)들뿐만 아니라 NAND 플래시 메모리가 흔하게 이용된다. 예를 들어, 휴대용 미디어 플레이어와 같은 가전 제품들은 음악, 비디오 및 기타 매체를 저장하기 위해 플래시 메모리를 종종 포함한다.
NVM을 갖는 시스템은 파일 시스템에 의해 이용되는 논리적 어드레스들을 NVM의 물리적 어드레스들로 맵핑하는(예를 들어, 논리-대-물리 맵핑을 제공하는) 데이터 구조를 포함할 수 있다. 그 구조는 때로는 휘발성 메모리 내에 존재한다. 기존 파일들이 갱신되고 추가 파일들이 더해짐에 따라, 맵핑을 저장하는 데에 필요한 메모리의 양이 그에 따라 증가할 수 있다. 따라서, 일부 경우들에서는, 구조에 대해 할당된 메모리의 양이 논리-대-물리 맵핑 전부를 캡처하기에 불충분할 수 있다.
비휘발성 메모리(NVM)를 갖는 시스템을 위한 고속 트리 플래트닝을 위한 시스템 및 방법이 개시된다. 트리는 시스템의 휘발성 메모리 내에 저장될 수 있고, 트리는 논리 공간과 NVM의 물리적 어드레스들 간의 논리-대-물리 맵핑을 포함할 수 있다. 트리에 대해 이용가능한 메모리의 양이 미리 정해진 임계 미만일 때, 시스템은 NVM 내의 데이터 단편들의 개수를 감소시키려고 시도할 수 있고, 그 결과로 트리의 일부분을 플래트닝할 수 있다. 비워진 트리 메모리의 양은 트리 메모리 풀(tree memory pool)에 다시 추가될 수 있다. NVM 인터페이스는 예를 들어 하나 이상의 슬라이딩 윈도우를 트리를 가로질러 이동시키는 것, 조건이 만족될 때 슬라이딩 윈도우를 확장하는 것, 트리를 스캐닝하는 동안 우선순위 큐를 이용하는 것, 및/또는 트리가 갱신되고 있는 동안 우선순위 큐를 유지하는 것과 같은 임의의 적절한 접근법에 기초하여, 결합을 위해 트리의 엔트리들의 최적 집합을 선택할 수 있다.
상기의 본 발명의 양태들 및 이점들과, 다른 양태들 및 이점들은 이하의 상세한 설명을 첨부 도면들과 함께 고찰하면 더 분명해질 것이고, 도면들 전체에서는 유사한 참조 기호들이 유사한 부분들을 지칭한다.
도 1 및 도 2는 본 발명의 다양한 실시예들에 따라 구성된 전자 디바이스들의 블록도이다.
도 3은 본 발명의 다양한 실시예들에 따른 비휘발성 메모리의 기능도이다.
도 4는 본 발명의 다양한 실시예들에 따른 논리 블록 어드레스들의 물리 페이지들로의 예시적 맵핑의 블록도이다.
도 5는 본 발명의 다양한 실시예들에 따라 논리-대-물리 맵핑을 제공하기 위해 이용되는 예시적인 트리의 일부분의 블록도이다.
도 6은 본 발명의 다양한 실시예들에 따른 논리 블록 어드레스들의 물리 페이지들로의 다른 예시적인 맵핑의 블록도이다.
도 7은 본 발명의 다양한 실시예들에 따른 논리-대-물리 맵핑을 제공하기 위해 이용되는 다른 예시적인 트리의 일부분의 블록도이다.
도 8은 본 발명의 다양한 실시예들에 따른 고속 트리 플래트닝을 위한 예시적인 프로세스의 흐름도이다.
도 9는 본 발명의 다양한 실시예들에 따라 비휘발성 메모리 내에 물리적으로 인접한 단편들을 생성하기 위한 예시적인 프로세스의 흐름도이다.
도 10a 및 도 10b는 본 발명의 다양한 실시예들에 따른 고속 트리 플래트닝을 위한 다른 예시적인 프로세스의 흐름도이다.
도 11은 본 발명의 다양한 실시예들에 따른 고속 트리 플래트닝을 위한 또 다른 예시적인 프로세스의 흐름도이다.
도 12는 본 발명의 다양한 실시예들에 따른 우선순위 큐의 블록도이다.
도 13은 본 발명의 다양한 실시예들에 따른 고속 트리 플래트닝을 위한 또 다른 예시적인 프로세스의 흐름도이다.
도 14는 본 발명의 다양한 실시예들에 따른 다른 우선순위 큐의 블록도이다.
비휘발성 메모리(NVM)를 갖는 시스템을 위한 고속 트리 플래트닝을 위한 시스템 및 방법이 제공된다. 트리는 시스템의 휘발성 메모리 내에 저장될 수 있고, 트리는 논리 공간과 NVM의 물리적 어드레스들 간의 논리-대-물리 맵핑을 포함할 수 있다. 트리에 대해 이용가능한 메모리의 양이 미리 정해진 임계 미만일 때, 시스템의 NVM 인터페이스는 NVM 내의 데이터 단편들의 개수를 감소시키려고 시도할 수 있고, 그 결과로 트리의 일부분을 플래트닝할 수 있다. 그 다음, 비워진 트리 메모리의 양은 트리 메모리 풀에 다시 추가될 수 있다.
NVM 인터페이스는 예를 들어 트리의 엔트리들의 최적 집합을 단일 엔트리 또는 노드로 결합함으로써 트리의 일부분을 플래트닝할 수 있다. 엔트리들의 최적 집합은 논리 공간 내에서는 인접할 수 있지만, 물리적 공간 내에서는 인접하지 않을 수 있다. 따라서, 엔트리들의 최적 집합을 선택한 후, NVM 인터페이스는 엔트리들에 대응하는 데이터 단편들을 재프로그래밍하여, 그 단편들이 물리적으로 인접할 수 있게 할 수 있다. 구체적으로, NVM 인터페이스는 NVM으로부터 다수의 엔트리에 대응하는 데이터를 판독한 다음, 그 데이터를 휘발성 메모리 내에 저장함으로써 단편들을 재프로그래밍할 수 있다. 데이터를 저장한 후에, NVM 인터페이스는 그 데이터를 NVM의 새로운 수퍼 블록에 순차적으로 프로그래밍할 수 있다.
NVM 인터페이스는 임의의 적절한 접근법을 이용하여 엔트리들의 최적 집합을 선택할 수 있다. 일부 실시예들에서, NVM 인터페이스는 엔트리들의 최적 집합을 획득하기 위해 하나 이상의 슬라이딩 윈도우를 이용할 수 있다. 일부 경우들에서, 하나 이상의 슬라이딩 윈도우 각각에 대하여 최소 스팬(minimum span)이 유지될 수 있다. 다음으로, NVM 인터페이스는 상이한 최소 스팬들 간의 비교에 기초하여 엔트리들의 최적 집합을 선택할 수 있다.
다른 실시예들에서, NVM 인터페이스는 플래트닝을 위한 엔트리들의 최적 집합을 찾기 위해 그리디 접근법(greedy approach)을 이용할 수 있다. 즉, NVM 인터페이스는 엔트리들의 최적 집합을 찾은 때에, 엔트리들의 최적 집합에 추가될 수 있는 트리 내의 추가의 연속 엔트리들을 계속하여 검색할 수 있다.
추가 실시예들에서, NVM 인터페이스는 휘발성 메모리 내의 우선순위 큐를 유지함으로써 엔트리들의 최적 집합을 찾을 수 있다. 예를 들어, NVM 인터페이스는 슬라이딩 윈도우에 들어맞는 다수의 엔트리에 관련된 매개변수들을 우선순위 큐 내에 삽입하려고 시도할 수 있다. NVM 인터페이스는 슬라이딩 윈도우가 트리의 끝을 통과할 때까지 이 프로세스를 계속할 수 있다. 다음으로, NVM 인터페이스는 우선순위 큐를 이용하여 엔트리들의 최적 집합을 찾을 수 있다.
또 다른 실시예들에서, NVM 인터페이스는 트리 갱신을 수행하는 동안 후보 엔트리들의 우선순위 큐를 유지함으로써 엔트리들의 최적 집합을 찾을 수 있다. 나중에, 트리에 대해 이용가능한 메모리의 양이 미리 정해진 임계 미만이라고 판정되는 경우, NVM 인터페이스는 결합될 수 있는 엔트리들을 찾기 위해 우선순위 큐를 이용할 수 있다.
도 1은 전자 디바이스(100)의 블록도를 도시한다. 일부 실시예들에서, 전자 디바이스(100)는 휴대용 미디어 플레이어, 셀룰러 전화, 포켓 사이즈 개인용 컴퓨터, PDA(personal digital assistance), 데스크탑 컴퓨터, 랩탑 컴퓨터, 및 임의의 다른 적절한 유형의 전자 디바이스이거나 그를 포함할 수 있다.
전자 디바이스(100)는 SoC(system-on-a-chip)(110) 및 NVM(non-volatile memory)(120)를 포함할 수 있다. 비휘발성 메모리(120)는 부동 게이트 또는 차지 트랩(charge trapping) 기술에 기초하는 NAND 플래시 메모리, NOR 플래시 메모리, EPROM(erasable programmable read only memory), EEPROM(electrically erasable programmable read only memory), FRAM(Ferroelectric RAM), MRAM(magnetoresistive RAM) 또는 그들의 임의의 조합을 포함할 수 있다.
NVM(120)은 최소 소거가능한 단위일 수 있는 "블록들"로 조직될 수 있고, 프로그래밍되거나 판독될 수 있는 최소 단위일 수 있는 "페이지들"로 더 조직될 수 있다. 일부 실시예들에서, NVM(120)은 다수의 집적 회로를 포함할 수 있고, 각각의 집적 회로는 다수의 블록을 가질 수 있다. 대응하는 집적 회로들로부터의 메모리 위치들(예를 들어, 블록들 또는 블록들의 페이지들)은 "수퍼 블록들(super blocks)"을 형성할 수 있다. NVM(120)의 각각의 메모리 위치(예를 들어, 페이지 또는 블록)는 물리적 어드레스(예를 들어, 물리 페이지 어드레스 또는 물리 블록 어드레스)를 이용하여 참조될 수 있다.
SoC(System-on-a-chip)(110)는 SoC 제어 회로(112), 메모리(114) 및 NVM 인터페이스(118)를 포함할 수 있다. SoC 제어 회로(112)는 SoC(110), 및 SoC(110) 또는 디바이스(100)의 다른 컴포넌트들의 일반적 동작들 및 기능들을 제어할 수 있다. 예를 들어, SoC 제어 회로(112)는 사용자 입력들 및/또는 애플리케이션 또는 운영 체제의 명령어들에 응답하여, NVM(120)으로부터 데이터를 획득하거나 거기에 데이터를 저장하기 위해, NVM 인터페이스(118)에 판독 또는 기입 요청을 발행할 수 있다. 명확함을 위하여, SoC 제어 회로(112)가 저장 또는 검색을 요청할 수 있는 데이터가 "사용자 데이터"라고 지칭될 수 있지만, 그 데이터는 사용자 또는 사용자 애플리케이션에 직접 관련되지 않을 수 있다. 오히려, 사용자 데이터는 (예를 들어, 애플리케이션 또는 운영 체제를 통해) SoC 제어 회로(112)에 의해 생성되거나 획득되는 디지털 정보의 임의의 적절한 시퀀스일 수 있다.
SoC 제어 회로(112)는 전자 디바이스(100)의 기능성을 구동하도록 동작하는 하드웨어, 소프트웨어 및 펌웨어의 임의의 조합, 및 임의의 컴포넌트들, 회로망 또는 로직을 포함할 수 있다. 예를 들어, SoC 제어 회로(112)는 NVM(120) 또는 메모리(114) 내에 저장되는 소프트웨어/펌웨어의 제어 하에서 동작하는 하나 이상의 프로세서를 포함할 수 있다.
메모리(114)는 RAM(random access memory)(예를 들어, SRAM(static RAM), DRAM(dynamic random access memory), SDRAM(synchronous dynamic random access memory), DDR(double-data-rate) RAM), 캐시 메모리, ROM(read-only memory) 또는 그들의 임의의 조합과 같은 임의의 적절한 유형의 휘발성 메모리를 포함할 수 있다. 메모리(114)는 비휘발성 메모리(120)에의 프로그래밍 또는 그로부터의 판독을 위해 사용자 데이터를 임시 저장할 수 있는 데이터 소스를 포함할 수 있다. 일부 실시예들에서, 메모리(114)는 SoC 제어 회로(112)의 일부로서 구현되는 임의의 프로세서들을 위한 메인 메모리의 역할을 할 수 있다.
일부 실시예들에서, 메모리(114)는 관련 동작들을 수행하기 위해 NVM 인터페이스(118)에 의해 이용될 수 있는 하나 이상의 데이터 구조를 저장할 수 있다. 예를 들어, 메모리(114)는 파일 시스템에 의해 이용되는 논리적 어드레스들과 NVM(120)의 물리적 어드레스들 간의 논리-대-물리 맵핑을 제공할 수 있는 트리를 포함할 수 있다. 다른 예로서, 메모리(114)는 하나 이상의 우선순위 큐를 포함할 수 있는데, 그것은 트리를 관리하기 위해 NVM 인터페이스(118)에 의해 이용될 수 있는 정보를 포함할 수 있다. 트리들 및 우선순위 큐들은 도 4-14에 관련하여 더 상세하게 설명될 것이다.
NVM 인터페이스(118)는 SoC 제어 회로(112)와 NVM(120) 사이의 인터페이스 또는 드라이버로서 기능하도록 구성된 하드웨어, 소프트웨어 및/또는 펌웨어의 임의의 적절한 조합을 포함할 수 있다. NVM 인터페이스(118) 내에 포함된 임의의 소프트웨어 모듈들에 대하여, 대응하는 프로그램 코드가 NVM(120) 또는 메모리(114) 내에 저장될 수 있다.
NVM 인터페이스(118)는 SoC 제어 회로(112)가 NVM(120)에 액세스하고 NVM(120)의 메모리 위치들(예를 들어, 페이지들, 블록들, 수퍼 블록들, 집적 회로들) 및 거기에 저장된 데이터(예를 들어, 사용자 데이터)를 관리하는 것을 허용하는 다양한 기능을 수행할 수 있다. 예를 들어, NVM 인터페이스(118)는 SoC 제어 회로(112)로부터의 판독 또는 기입 요청들을 해석하고, 웨어 레벨링(wear leveling)을 수행하고, NVM(120)의 버스 프로토콜과 호환가능한 판독 및 프로그램 명령어들을 생성할 수 있다.
NVM 인터페이스(118) 및 SoC 제어 회로(112)가 분리된 모듈들로서 도시되어 있긴 하지만, 이것은 본 발명의 실시예들의 설명을 단순하게 하도록 의도된 것에 지나지 않는다. 이러한 모듈들은 하드웨어 컴포넌트들, 소프트웨어 컴포넌트들 또는 둘 다를 공유할 수 있음을 이해해야 한다. 예를 들어, SoC 제어 회로(112)는 NVM 인터페이스(118)를 위한 소프트웨어 기반 메모리 드라이버를 실행할 수 있다.
일부 실시예들에서, 전자 디바이스(100)는 NVM(120) 및 NVM 인터페이스(118)의 일부 또는 전부를 포함하는 플래시 메모리 드라이브 또는 SD 카드와 같은 목표 디바이스를 포함할 수 있다. 이러한 실시예들에서, SoC(110) 또는 SoC 제어 회로(112)는 목표 디바이스를 위한 호스트 제어기의 역할을 할 수 있다. 예를 들어, 호스트 제어기로서, SoC(110)는 목표 디바이스에 판독 및 기입 요청들을 발행할 수 있다.
도 2는 전자 디바이스(200)의 블록도를 도시한 것으로서, 이것은 다양한 실시예들에 따른 전자 디바이스(100)(도 1)의 펌웨어, 소프트웨어 및/또는 하드웨어 컴포넌트들의 일부를 더 상세하게 나타낼 수 있다. 전자 디바이스(200)가 도 1에 관련하여 위에서 설명된 특징들 및 기능성들 중 임의의 것을 가질 수 있거나 그 반대로도 될 수 있다. 도시된 바와 같이, 점선들은 계층들의 경계를 정한다. 어느 컴포넌트들이 경계선들 안에 포함되는지에 관한 도시는 예시적인 것에 지나지 않으며, 하나 이상의 컴포넌트가 상이한 계층과 연계될 수 있음을 이해해야 한다.
전자 디바이스(200)는 파일 시스템(210), NVM 드라이버(212), NVM 버스 제어기(216) 및 NVM(220)을 포함할 수 있다. 일부 실시예들에서, 파일 시스템(210) 및 NVM 드라이버(212)는 소프트웨어 또는 펌웨어 모듈일 수 있지만, NVM 버스 제어기(216) 및 NVM(220)은 하드웨어 모듈일 수 있다. 따라서, 이러한 실시예들에서, NVM 드라이버(212)는 NVM 인터페이스(218)의 소프트웨어 또는 펌웨어 양태를 표현할 수 있고, NVM 버스 제어기(216)는 NVM 인터페이스(218)의 하드웨어 양태를 표현할 수 있다.
파일 시스템(210)은 FAT(File Allocation Table) 파일 시스템 또는 HFS+(Hierarchical File System Plus)와 같은 임의의 적절한 유형의 파일 시스템을 포함할 수 있고, 전자 디바이스(200)의 운영 체제의 일부(예를 들어, 도 1의 SoC 제어 회로(112)의 일부)일 수 있다. 일부 실시예들에서, 파일 시스템(210)은 플래시 파일 시스템을 포함할 수 있고, 이것은 페이지들의 논리-대-물리 맵핑을 제공한다. 이러한 실시예들에서, 파일 시스템(210)은 이하에 논의되는 NVM 드라이버(212)의 기능성들의 일부 또는 전부를 수행할 수 있고, 그러므로 파일 시스템(210) 및 NVM 드라이버(212)는 분리된 모듈들일 수도 있고 아닐 수도 있다.
파일 시스템(210)은 애플리케이션 및 운영 체제를 위한 파일 및 폴더 구조를 관리할 수 있다. 파일 시스템(210)은 전자 디바이스(200) 상에서 실행되는 애플리케이션 또는 운영 체제의 제어 하에서 동작할 수 있고, 애플리케이션 또는 운영 체제가 정보가 NVM(220)으로부터 판독되거나 거기에 저장될 것을 요청할 때에 NVM 드라이버(212)에 기입 및 판독 요청들을 제공할 수 있다. 각각의 판독 또는 기입 요청과 함께, 파일 시스템(210)은 논리 페이지 어드레스 또는 페이지 오프셋을 갖는 논리 블록 어드레스와 같이, 사용자 데이터가 어디로부터 판독되거나 어디에 기입되어야하는지를 지시하기 위해 논리 어드레스를 제공할 수 있다.
파일 시스템(210)은 NVM(220)과 직접적으로 호환되지 않는 NVM 드라이버(212)에의 판독 및 기입 요청을 제공할 수 있다. 예를 들어, 논리 어드레스들은 하드 드라이브 기반 시스템에 전형적인 규약 또는 프로토콜을 이용할 수 있다. 플래시 메모리와는 달리, 하드 드라이브 기반 시스템은 블록 소거를 먼저 수행하지 않고서도 메모리 위치에 덮어쓰기할 수 있다. 더욱이, 하드 드라이브들은 디바이스의 수명을 증가시키기 위한 웨어 레벨링을 필요로 하지 않을 수 있다. 그러므로, NVM 인터페이스(218)는 NVM(220)에 적절한 방식으로 파일 시스템 요청들을 다루고 다른 관리 기능들을 수행하기 위해, 메모리 특정적이거나 벤더 특정적이거나 둘 다인 임의의 기능들을 수행할 수 있다.
NVM 드라이버(212)는 변환 계층(214)을 포함할 수 있다. 일부 실시예들에서, 변환 계층(214)은 플래시 변환 계층(FTL : flash translation layer)이거나 그것을 포함할 수 있다. 기입 요청 시에, 변환 계층(214)은 제공된 논리 어드레스를 NVM(220) 상의 비어있는 소거된 물리적 위치에 맵핑할 수 있다. 판독 요청 시에, 변환 계층(214)은 요청된 데이터가 저장되어 있는 물리적 어드레스를 결정하기 위해, 제공된 논리적 어드레스를 이용할 수 있다. 각각의 NVM은 NVM의 크기 또는 벤더에 따라 상이한 레이아웃을 가질 수 있으므로, 이러한 맵핑 동작은 메모리 및/또는 벤더 특정적일 수 있다.
논리-대-물리 어드레스 맵핑에 더하여, 변환 계층(214)은 가비지 컬렉션(GC : garbage collection) 및 웨어 레벨링과 같은 플래시 변환 계층들에 전형적일 수 있는 임의의 다른 적절한 기능들을 수행할 수 있다.
일부 실시예들에서, NVM 드라이버(212)는 NVM 액세스 요청들(예를 들어, 프로그래밍, 판독 및 소거 요청들)을 완료하기 위해 NVM 버스 제어기(216)와 인터페이스할 수 있다. 버스 제어기(216)는 NVM(220)에 대한 하드웨어 인터페이스로서 기능할 수 있고, NVM(220)의 버스 프로토콜, 데이터 레이트 및 다른 규격들을 이용하여 NVM(220)과 통신할 수 있다.
NVM 인터페이스(218)는 여기에서 때로는 "메타데이터"라고 지칭되는 메모리 관리 데이터에 기초하여 NVM(220)을 관리할 수 있다. 메타데이터는 NVM 드라이버(212)에 의해 생성될 수 있거나, NVM 드라이버(212)의 제어 하에서 동작하는 모듈에 의해 생성될 수 있다. 예를 들어, 메타데이터는 논리 어드레스와 물리 어드레스 사이의 맵핑, 불량 블록 관리, 웨어 레벨렝, 데이터 에러들을 검출하거나 정정하기 위해 이용되는 ECC 데이터 또는 그들의 임의의 조합을 관리하기 위해 이용되는 임의의 정보를 포함할 수 있다. 메타데이터는 논리 어드레스와 같이, 사용자 데이터와 함께 파일 시스템(210)에 의해 제공되는 데이터를 포함할 수 있다. 따라서, "메타데이터"는 일반적으로 사용자 데이터에 관한 것이거나 그에 관련된, 또는 비휘발성 메모리의 동작 및 메모리 위치들을 관리하기 위해 일반적으로 이용되는 임의의 정보를 지칭할 수 있다.
NVM 인터페이스(218)는 NVM(220) 내에 메타데이터를 저장하도록 구성될 수 있다. 일부 실시예들에서, NVM 인터페이스(218)는 사용자 데이터에 관련된 메타데이터를, 그 사용자 데이터가 저장되어 있는 것과 동일한 메모리 위치(예를 들어 페이지)에 저장할 수 있다. 예를 들어, NVM 인터페이스(218)는 NVM(220)의 하나 이상의 메모리 위치에서 사용자 데이터, 관련된 논리 어드레스, 및 그 사용자 데이터를 위한 ECC 데이터를 저장할 수 있다. NVM 인터페이스(218)는 또한 동일한 메모리 위치 내의 사용자 데이터에 관한 다른 유형의 메타데이터를 저장할 수 있다.
NVM 인터페이스(218)는 NVM(220)의 전원을 켤 때 또는 NVM(220)의 동작 동안 전자 디바이스(200)가 그 위치에 어떤 데이터가 존재하는지를 판정할 수 있도록, 논리 어드레스를 저장할 수 있다. 구체적으로, 파일 시스템(210)은 사용자 데이터를 그것의 물리적 어드레스가 아니라 그것의 논리적 어드레스에 따라 참조할 수 있으므로, NVM 인터페이스(218)는 사용자 데이터와 논리 어드레스를 함께 저장하여 그들의 관련을 유지할 수 있다. 이러한 방식으로, NVM(220) 내의 물리-대-노리 맵핑을 유지하는 별도의 테이블이 만료되더라도, NVM 인터페이스(218)는 여전히 예를 들어 전자 디바이스(200)의 기동 또는 리부팅 시에 적절한 맵핑을 결정할 수 있다.
위에서 논의된 바와 같이, NVM(예를 들어, 도 1의 NVM(120) 또는 도 2의 NVM(220))은 다이들, 블록들, 페이지들, 수퍼 블록들 및 그와 유사한 것으로 조직될 수 있다. 예를 들어, 도 3은 NVM(300)의 기능도를 도시한다. NVM(300)은 NVM(120)(도 1) 또는 NVM(220)(도 2)과 동일 또는 유사할 수 있다. 도 3은 단순히 NVM(300)의 조직 레이아웃을 도시하도록 의도된 것이며, 비휘발성 메모리의 실제의 물리적 레이아웃을 나타내지 않는다. 예를 들어, 도 3에서는 다이 0이 다이 1 옆에 있는 것으로서 도시되지만, 그것은 이들 다이들의 기능적 관계를 도시하기 위한 것일 뿐이고, NVM(300)의 실제의 물리적 레이아웃에서는 이들 다이들이 서로 가깝게 위치될 수도 있고 그렇지 않을 수도 있다.
더욱이, 소정 개수의 다이들, 블록들 및 페이지들이 도 3에 도시되어 있긴 하지만, 이것은 설명을 목적으로 하는 것일 뿐이고, 본 기술분야의 숙련된 자는 NVM(300)이 임의의 적절한 개수의 다이들, 블록들 및 페이지들을 포함할 수 있음을 알아야 한다.
도 3에 도시되어 있는 바와 같이, NVM(300)은 다이 0, 다이 1, 다이 2 및 다이 3과 같은 하나 이상의 다이(즉, 집적 회로)를 포함할 수 있다. NVM(300)의 각각의 다이는 하나 이상의 "블록"으로 조직될 수 있다. 예를 들어, 다이들 0-3은 각각 블록들 0-3으로 조직되는 것으로 도시되어 있다.
다이들의 각 블록은 하나 이상의 페이지로 더 조직될 수 있다. 예를 들어, 다이들 0-3 각각의 블록 0은 페이지들 0-3으로 조직되는 것으로서 도시되어 있다. NVM(300)의 각각의 페이지는 임의의 적절한 정보를 포함할 수 있다. 예를 들어, 페이지들은 사용자 데이터, 메타데이터 또는 둘 다를 포함할 수 있다. 일부 실시예들에서, ECC 데이터와 같은 메타데이터는 NVM(300) 내에 저장된 정보의 에러 검출 및/또는 정정을 제공하기 위해 페이지들 내에 포함될 수 있다.
NVM(300)은 또한 다이 내에서 동일한 위치 또는 "블록 번호"를 갖는 각각의 다이로부터의 하나의 블록을 포함하는 하나 이상의 수퍼 블록을 포함할 수 있다. 예를 들어, NVM(300)의 수퍼 블록 0은 다이들 0-3 각각의 블록 0을 포함할 수 있다. 마찬가지로, NVM(300)의 수퍼 블록 1은 다이들 0-3 각각의 블록 1을 포함할 수 있고, NVM(300)의 수퍼 블록 2는 다이들 0-3 각각의 블록 2를 포함할 수 있는 등이다.
수퍼 블록들은 하나 이상의 블록을 함께 가상으로 링크하거나 "스트라이핑(striping)"하는 것에 의해 형성될 수 있다. 블록들은 수퍼 블록으로서 가상 링크될 각 다이의 동일 로우 내에 있을 필요는 없다. 사실, 블록들은 수퍼 블록을 형성하기 위해 둘 이상의 다이로부터 무작위로 선택될 수 있다. 일부 실시예들에서, 수퍼 블록은 단 하나의 블록을 포함할 수 있다. 수퍼 블록들은 동작 상의 병렬성을 제공하며, 그에 의해 상이한 다이들에 위치된 블록들에 대하여, 프로그래밍, 판독 및 소거 동작이 병렬로 수행되는 것을 가능하게 한다.
추가로, 둘 이상의 다이로부터의 페이지들이 가상으로 함께 링크되어 수퍼 페이지들 또는 "스트라이프들"을 형성할 수 있다. 예를 들어, 스트라이프(302)는 다이들 0-3 각각의 블록 0으로부터의 페이지 0을 포함할 수 있다. 마찬가지로, 스트라이프(304)는 다이들 0-3 각각의 블록 0으로부터의 페이지 3을 포함할 수 있다. NVM 인터페이스 내에 구현되는 변환 계층(예를 들어, 도 2의 변환 계층(214))은 수퍼 블록들 또는 스트라이프들을 추적할 수 있다.
NVM(300)의 블록은 상위 페이지 및 하위 페이지 둘 다를 포함하는 멀티레벨 셀(MLC : multi-level cell) 블록일 수 있다. MLC 블록에 대하여, 특정 스트라이프(예를 들어, 스트라이프(302 또는 304)) 내에 포함되는 페이지들에 대해서는 액세스 시간(예를 들어, 판독 및 프로그래밍 시간)이 동일하게 유지될 수 있다. 즉, 전체 스트라이프가 프로그래밍되고 있을 때, 그 스트라이프의 하위 페이지들이 먼저 프로그래밍될 수 있고, 상위 페이지들이 그에 후속할 수 있다. 반대로, 프로그래밍되고 있는 데이터가 스트라이프 경계와 정렬되지 않는 경우, 하위 페이지들과 상위 페이지들은 교대하는 순서로 프로그래밍될 수 있다. 즉, 프로그래밍 순서에 대한 2-모드성(bi-modalism)이 존재한다.
따라서, 상위 페이지 프로그래밍은 전형적으로 하위 페이지 프로그래밍보다 긴 기간을 소비하므로, 디바이스가 하나 이상의 스트라이프 경계를 따라 페이지들을 프로그래밍하는 것이 유리하다. 이것은 비-스트라이프-정렬식 프로그래밍(non-stripe-aligned programming) 내에 존재하는 2-모드성을 회피한다.
이제 도 4를 참조하면, 논리 블록 어드레스들(402)의 물리 페이지들(404)로의 맵핑(400)을 도시하는 블록도가 도시되어 있다. 논리 블록 어드레스들(402)은 논리 공간에 대응할 수 있다.
파일 시스템(예를 들어 도 2의 파일 시스템(210))은 임의의 적절한 개수의 LBA를 파일에 할당할 수 있다. 예를 들어, 도 4에 도시된 바와 같이, LBA들(402)은 파일들 A-N에 대응할 수 있는데, 파일들 A-N 각각은 하나 이상의 LBA를 할당받는다. 예를 들어, 파일 A는 LBA 0-38을 할당받고, 파일 B는 LBA 39를 할당받고, 파일 C는 LBA 40을 할당받는 등이다.
추가로, LBA들은 NVM(예를 들어, 도 1의 NVM(120), 도 2의 NVM(220) 또는 도 3의 NVM(300))의 하나 이상의 물리 어드레스 내에 저장된 데이터를 참조하기 위해 파일 시스템에 의해 이용될 수 있다. 예를 들어, 도 4에 도시된 바와 같이, NVM은 페이지들(404)을 포함할 수 있는 수퍼 블록들(410, 414)을 포함할 수 있다. LBA들(402) 각각은 페이지들(404) 중의 한 페이지에 맵핑할 수 있다. 따라서, 각각의 LBA는 대응하는 페이지의 물리 어드레스에 맵핑할 수 있다. 도 4에 도시된 바와 같이, 예를 들어 파일 A를 위한 시작 LBA는 물리 어드레스 P3에 맵핑하고, 파일 B의 시작 LBA는 물리 어드레스 P0에 맵핑하는 등이다.
도 5는 논리-대-물리 맵핑을 제공하기 위해 이용될 수 있는 트리(500)의 일부분의 블록도를 보여준다. 구체적으로, 트리(500)는 LBA들(예를 들어, 도 4의 LBA(402))과, NVM(예를 들어, 도 1의 NVM(120), 도 2의 NVM(220) 또는 도 3의 NVM(300))의 대응하는 물리 어드레스들(예를 들어, 도 4의 페이지(404)들의 물리 어드레스) 사이의 맵핑을 제공할 수 있다. 앞에서 논의된 바와 같이, 트리(500)는 휘발성 메모리(예를 들어, 도 1의 메모리(114)) 내에 저장되고 유지될 수 있다.
트리(500)는 다수의 노드를 포함할 수 있으며, 각각의 노드는 메모리 할당을 목적으로 일관되게 크기가 정해질 수 있다 (예를 들어, 각각의 노드는 64 바이트의 고정된 크기를 가질 수 있음). 추가로, 트리(500)의 각 노드는 하나 이상의 엔트리를 포함할 수 있다. 예를 들어, 도 5에 도시된 바와 같이, 노드(502)는 3개의 엔트리(예를 들어, 엔트리들(503-505))를 포함할 수 있다. 간단하게 하기 위해, 도 5는 트리(500)의 일부분만을 보여준다. 따라서, 점선 박스들(508 및 508)은 도 5에 도시되지 않은 추가의 노드들 및 엔트리들을 표현할 수 있다.
노드의 각각의 엔트리는 스팬(예를 들어, 엔트리의 논리적 크기 또는 논리 어드레스의 개수)에 대응할 수 있고, 다른 노드에의 포인터(노드 포인터) 또는 NVM의 물리 어드레스로의 포인터(NAND 포인터)를 포함할 수 있다. 일부 경우들에서, 스팬은 런-길이 인코딩 압축된(rle-compressed) 범위에 대응할 수 있다. 예를 들어, 도 5에 도시된 바와 같이, 엔트리들(503-505)은 각기 스팬들 2, 2 및 38에 대응하는 것으로 나타나 있다.
더욱이, 도 5에 도시된 바와 같이, 엔트리들(503-505) 각각은 트리 내의 추가 노드들을 포인팅하는 노드 포인터들을 가질 수 있다. 구체적으로, 엔트리(503)는 노드(510)를 포인팅하는 것으로 나타나고, 그것은 결국 2개의 엔트리(예를 들어, 엔트리들(512 및 514))를 포함한다. 마찬가지로, 엔트리(504)는 노드(520)를 포인팅하는 것으로 나타나며, 이것은 2개의 엔트리(예를 들어, 엔트리들(522 및 524))를 포함한다. 마지막으로, 엔트리(505)는 노드(530)를 포인팅하는 것으로 나타나며, 이것은 2개의 엔트리(예를 들어, 엔트리들(532 및 534))를 포함한다.
스팬들이 LBA들을 대신하여 트리(500) 내에 저장되므로, NVM 인터페이스(예를 들어, 도 1의 NVM 인터페이스(118) 또는 도 2의 NVM 인터페이스(218))는 특정 파일의 논리-대-물리 맵핑을 획득하기 위해 최상위 노드로부터 최하위 노드들로 트리(500)를 횡단할 수 있다. 예를 들어, 파일에 할당된 LBA들에 기초하여, NVM 인터페이스는 결과적인 어드레스 탤리(address tally)가 파일의 LBA들에 일치할 때까지, 어드레스 탤리가 트리(500)의 최상위 노드로부터 확장해감에 따라 그것을 증분시킬 수 있다. 본 기술분야의 숙련된 자들은 트리(500)가 임의의 적절한 트리 구조를 가질 수 있음을 알 것이다. 일부 경우들에서, 트리(500)는 예를 들어 b-트리 또는 b*-트리와 같이 특정한 엔트리에 대한 검색 시간을 개선하는 트리 구조를 가질 수 있다. 본 기술분야의 숙련된 자들은 시스템(예를 들어, 도 1의 전자 디바이스(100) 또는 도 2의 전자 디바이스(200))의 임의의 다른 적절한 컴포넌트(들)가 대신하여 트리(500)를 유지할 수 있음을 알 것이다. 예를 들어, 트리(500)는 NVM 인터페이스 및/또는 제어 회로(예를 들어, 도 1의 제어 회로(112)) 상에 구현되는 소프트웨어 계층에 의해 유지될 수 있다.
더욱이, LBA들 대신 스팬들을 저장함으로써, 트리(500)의 각 노드 내에 더 많은 엔트리 및 포인터(예를 들어, 노드 및 NAND 포인터)가 포함될 수 있다. 예를 들어, 트리(500)의 각 노드가 64 바이트를 할당받고, 각각의 엔트리가 4 내지 6 바이트를 할당받는 경우, 트리(500)의 각각의 노드는 10 내지 16 엔트리(예를 들어, 포인터)를 저장할 수 있을 수 있다.
엔트리들(512, 514, 522, 524 및 532)은 각각 NAND 포인터들(540-544) 및 스팬들(545-549)을 포함할 수 있다. 추가로, 엔트리들(512, 514, 522, 524 및 532)은 각각 페이지 어드레스들(551-555)을 포함할 수 있다. 페이지 어드레스들(551-555) 각각은 대응하는 엔트리의 시작 페이지 어드레스를 제공할 수 있다. 예를 들어, 도 5에 도시된 바와 같이, 엔트리(512)는 파일 G(도 4)에 대응할 수 있고, 결과적으로 1의 스팬(545) 및 P8의 페이지 어드레스(551)를 가질 수 있다. 마찬가지로, 엔트리들(514, 522, 524 및 532) 각각은 파일들 H, K에 각기 대응할 수 있다.
비교적 큰 파일이 NVM에 순차적으로 프로그래밍될 때(예를 들어, 미디어 파일, 애플리케이션 또는 시스템 파일), 특정 파일에 대응하는 데이터가 동일한 수퍼 블록 또는 동일한 집합의 수퍼 블록들(예를 들어, 도 3의 수퍼 블록 0-3)에 저장될 수 있다. 결과적으로, 파일은 논리적으로도 물리적으로도 인접할 수 있다 (예를 들어, 파일은 인접한 논리 어드레스들의 집합, 및 인접한 물리 어드레스들의 대응하는 집합과 관련될 수 있음). 따라서, 파일은 트리 내의 단일 엔트리(예를 들어, 단일 NAND 포인터)에 의해 표현될 수 있다.
일부 경우들에서, 파일 시스템은 또한 작은 무작위 기입들(예를 들어, 다수의 작은 파일에 관련된 데이터)을 발행할 수 있다. 논리적으로 인접할 수 있는 이러한 기입들은 다수의 수퍼 블록에 걸쳐 분산될 수 있다. 그러므로, NVM 내의 다수의 데이터 단편 각각은 트리 내의 별도의 개별 엔트리에 의해 표현될 필요가 있을 수 있다. 예를 들어, 파일들 H-K 각각은 트리(500) 내의 별도의 엔트리(예를 들어, 엔트리들(예를 들어, 512, 514, 522, 524 및 532 중 하나)에 의해 표현된다.
휘발성 메모리의 공간 제약으로 인해, 고정된 양의 메모리 공간(예를 들어, 1MB 또는 100MB의 트리 메모리 풀)이 트리(500)에 대해 할당될 수 있다. 결국, 트리 메모리 풀은 추가의 데이터 단편들에 대해서는 더 이상 논리-대-물리 맵핑이 저장될 수 없는 지점까지 고갈될 수 있다.
그러므로, 트리 메모리 풀을 위해 추가 메모리를 비우기 위해, NVM 인터페이스는 NVM 내의 데이터 단편의 개수를 감소시키려고 시도할 수 있고, 그에 의해 트리의 일부분을 플래트닝할 수 있다. 비워지는 메모리의 양은 트리 메모리 풀에 다시 추가될 수 있다. 예를 들어, 파일 시스템으로부터 기입 요청을 수신한 것에 응답하여, NVM 인터페이스는 트리의 적어도 일부분을 플래트닝하려고 선택할 수 있다. 일 실시예에서, NVM 인터페이스는 트리 플래트너 함수(tree flattener function)를 호출할 수 있다.
NVM 인터페이스는 예를 들어 트리의 다수의 엔트리를 단일 엔트리 또는 노드로 결합함으로써 트리의 일부분을 플래트닝할 수 있다. 이러한 다수의 엔트리는 논리 공간 내에서는 인접할 수 있지만, 물리적 공간 내에서는 인접하지 않게 프로그래밍될 수 있다. 즉, 그들은 NVM의 다양한 수퍼 블록들 내에 무작위로 분산된 데이터 단편들에 대응할 수 있다. 따라서, 엔트리들에 대응하는 데이터를 새로운 수퍼 블록에 인접하여 재프로그래밍함으로써, NVM 인터페이스는 데이터 단편들이 물리적으로도 논리적으로도 인접할 것을 보장할 수 있다.
일반적으로, 트리의 일부분을 플래트닝하는 것은 사용자에 의해서도 파일 시스템에 의해서도 요청되지 않은 프로그래밍 동작들을 요구하므로, 플래트닝 동작들은 시스템의 전체적인 기입 증폭(write amplification)을 증가시킬 수 있다. 여기에서 이용될 때, "기입 증폭"은 파일 시스템 요청들과 NVM의 물리적 액세스들 간의 비율을 지칭할 수 있다. 기입 증폭에서의 증가는 불량한 시스템 성능을 야기하여, NVM의 증가된 마모(wear) 및 증가된 시스템 전력 요구를 유발할 수 있다.
그러므로, 트리 플래트닝 동작들은 그것이 필요할 때에만 호출되어야 한다. 예를 들어, 트리 플래트닝 함수는 트리에 대해 이용가능한 메모리의 양이 미리 정해진 임계 미만일 때에만 호출될 수 있다. 미리 정해진 임계는 예를 들어 트리 메모리 풀의 2%와 같이 트리 메모리 풀(예를 들어, 트리에 대해 할당된 메모리의 총량)의 고갈 근접 지점에 대응하는 임의의 적절한 수치일 수 있다. 즉, 이용가능한 메모리의 양이 트리 메모리 풀의 1%인 경우에 조건이 만족되는데, 그것은 트리 메모리 풀의 2%인 미리 정해진 임계보다 작은 것이다.
그러한 접근법을 이용하면, NVM 인터페이스는 디바이스에 불필요한 부담을 주는 것을 피할 수 있다. 구체적으로, 트리의 메모리 사용이 트리 메모리 풀을 고갈시키지 않는 경우, 플래트닝 동작은 필요하지 않다. 더욱이, 트리를 플래트닝하기를 기다림으로써, 플래트닝될 수 있는 후보 트리 엔트리의 개수가 증가할 수 있다. 그러므로, NVM 인터페이스는 플래트닝을 위한 엔트리들의 최적 집합(예를 들어, 기입 증폭과 메모리 사용 간의 최적의 트레이드오프를 만들어내는 엔트리들)을 찾을 높은 확률을 갖는다.
NVM 인터페이스는 결합할 트리의 엔트리들을 찾기 위해 임의의 적절한 접근법을 이용할 수 있다. 예를 들어, NVM 인터페이스는 트리를 가로질러 슬라이딩 윈도우를 이동시킬 수 있다. 일부 실시예들에서, 슬라이딩 윈도우는 트리의 엔트리들에 대응하는 요소들을 갖는 목록일 수 있다. 따라서, NVM 인터페이스가 트리를 가로질러 슬라이딩 윈도우를 이동시킴에 따라, 새로운 엔트리들이 목록에 추가될 수 있다.
NVM 인터페이스가 트리를 가로질러 슬라이딩 윈도우를 이동시키고 있는 동안, NVM 인터페이스는 또한 슬라이딩 윈도우에 의해 현재 포함되는 엔트리들의 스팬을 나타내는 러닝 카운터(running counter)를 유지할 수 있다. 예를 들어, 도 4를 다시 참조하면, NVM 인터페이스는 LBA들(402)에 관련된 트리를 가로질러 슬라이딩 윈도우(406)를 이동시킬 수 있다. 처음에, 러닝 카운터는 제로 값을 가질 수 있고, 슬라이딩 윈도우(406)는 파일들 A-E를 포함할 수 있다. 본 기술분야의 숙련된 자들은 슬라이딩 윈도우(406)가 임의의 적절한 개수의 엔트리(예를 들어, 32개의 엔트리)를 포함하도록 구성될 수 있음을 알 것이다. 그러나, 도 4에서는 오직 단순하게 하기 위해 슬라이딩 윈도우(406)가 5개의 엔트리(예를 들어, 파일)를 포함하는 것으로 도시된다.
NVM 인터페이스는 포함된 엔트리들에 대응하는 논리 공간의 크기를 러닝 카운터에 추가할 수 있다. 즉, NVM 인터페이스는 파일들 A-E에 대응하는 엔트리들의 전체 스팬(예를 들어 82의 전체 스팬)을 러닝 카운터에 추가할 수 있다. 다음으로, NVM 인터페이스는 러닝 카운터의 현재 값을 메모리 내에 저장된 최소 스팬과 비교할 수 있다. 예를 들어, 최소 스팬은 처음에 32비트 카운터에 들어맞을 수 있는 가장 큰 값으로 설정될 수 있다.
러닝 카운터의 현재 값이 최소 스팬보다 작은 경우, NVM 인터페이스는 러닝 카운터의 현재 값을 최소 스팬으로서 대체할 수 있다. 추가로, NVM 인터페이스는 메모리 내의 슬라이딩 윈도우의 시작 LBA를 저장할 수 있다. 파일들 A-E(도 4)에 대해, 예를 들어 NVM 인터페이스는 최소 스팬으로서 82를 저장할 수 있고, 시작 LBA로서 0을 저장할 수 있다. 반대로, 현재 값이 최소 스팬보다 큰 경우, NVM 인터페이스는 메모리 내에 저장되어 있는 시작 LBA 및 최소 스팬의 값들을 유지할 수 있다.
다음으로, NVM 인터페이스는 슬라이딩 윈도우(406)를 단일 엔트리(예를 들어, 하나의 파일)만큼 이동시켜서, 슬라이딩 윈도우(406)가 이제 파일들 B-F를 포함하게 할 수 있다. 그러면, NVM 인터페이스는 슬라이딩 윈도우(406)에 의해 포함되는 새로운 엔트리(파일 F)의 크기를 러닝 카운터에 추가할 수 있고, 슬라이딩 윈도우(406)에 의해 더 이상 포함되지 않는 엔트리(파일 A)의 크기를 러닝 카운터로부터 제할 수 있다. 도 4에 도시된 바와 같이, 파일 F에 대응하는 엔트리의 스팬은 38이고, 파일 A에 대응하는 엔트리의 스팬은 39이다. 그러므로, 러닝 카운터의 결과적인 값은 81이다(82+38-39 = 81).
다음으로, NVM 인터페이스는 러닝 카운터의 현재 값이 최소 스팬보다 작은지를 검출할 수 있다. 러닝 카운터의 현재 값(예를 들어, 81)이 메모리 내에 저장된 최소 스팬(예를 들어, 82)보다 작으므로, NVM 인터페이스는 러닝 카운터를 최소 스팬으로서 대체할 수 있다. 추가로, NVM 인터페이스는 메모리 내에 저장된 시작 LBA(예를 들어, 0)를 현재의 시작 LBA(예를 들어, 39)로 갱신할 수 있다.
다음으로, NVM 인터페이스는 트리의 연속적인 엔트리들을 통해 슬라이딩 윈도우를 계속하여 이동시킬 수 있고, 그에 따라 (예를 들어, 슬라이딩 윈도우(406)에 의해 새롭게 포함되는 엔트리의 스팬을 추가하고, 슬라이딩 윈도우(406)에 의해 더 이상 포함되지 않은 엔트리의 스팬을 제함으로써) 러닝 카운터를 계속하여 갱신할 수 있다. 다음으로, 러닝 카운터의 현재 값과 최소 스팬의 비교에 기초하여, NVM 인터페이스는 메모리 내에 저장된 최소 스팬 및 시작 LBA를 대체하거나 유지할 수 있다. 슬라이딩 윈도우가 트리를 가로질러 이동하는 것을 완료하고 나면, NVM 인터페이스는 최소 스팬에 대응하는 트리의 엔트리들의 최적 집합을 결합할 수 있다.
이상적으로, 엔트리들의 최적 집합은 그 집합 내의 엔트리들의 개수와 동일한 스팬을 가질 수 있다. 즉, 엔트리들의 최적 집합은 연속적인 LBA들을 갖는 파일들의 집합에 대응할 것이고, 여기에서 각각의 엔트리는 최소 LBA 크기(예를 들어, 1의 LBA)를 갖는다. 예를 들어, 도 4의 LBA들(402)에 대하여, 파일들 G-K에 대응하는 엔트리들의 집합이 슬라이딩 윈도우(406)에 대해 최적일 것이다(예를 들어, 도 5의 엔트리들(512, 514, 522, 524 및 532). 다른 예로서, 슬라이딩 윈도우가 32개의 엔트리를 포함하는 경우, 슬라이딩 윈도우를 위한 엔트리들의 최적 집합은 각각 단일 섹터(예를 들어 각각 1 LBA)인 32개의 논리적으로 연속적인 엔트리들일 수 있다.
엔트리들의 최적 집합을 획득한 후, NVM 인터페이스는 엔트리들에 대응하는 데이터 단편들을, 그 단편들이 물리적으로 인접하도록 재프로그래밍할 것을 선택할 수 있다. 예를 들어, NVM 인터페이스는 NVM으로부터 엔트리들의 집합에 대응하는 데이터를 판독할 수 있고, 다음으로 그 데이터를 휘발성 메모리 내에(예를 들어, 메모리 버퍼 내에) 저장할 수 있다. 데이터를 저장한 후에, NVM 인터페이스는 데이터를 NVM의 새로운 수퍼 블록에 순차적으로 프로그래밍할 수 있고, 트리 내의 엔트리들을 플래트닝할 수 있다 (예를 들어, 엔트리들의 집합을 단일 노드 또는 엔트리로 결합함). 예를 들어, 각각 크기에 있어서 단일 LBA인 32개의 엔트리가 존재하고, 각각의 LBA가 4K인 경우, NVM 인터페이스는 NVM 내에 크기 128K의 데이터를 재프로그래밍할 필요가 있을 수 있다.
이제 도 6을 보면, 논리 블록 어드레스들의 물리 페이지들로의 맵핑(600)의 블록도가 도시되어 있다. 도 6에 도시된 바와 같이, 파일들 G-K에 대응하는 데이터가 수퍼 블록(414)에 순차적으로 재프로그래밍되었다. 파일들의 이전 물리적 어드레스들이 무효인 것으로 마킹되었다(도 6의 줄을 그어 지운 박스들에 의해 나타남).
추가로, 논리-대-물리 맵핑을 제공하는 트리가 갱신될 수 있다. 예를 들어, 도 7을 참조하면, 갱신된 트리(700)의 일부분의 블록도가 나타나 있다. 구체적으로, NVM 인터페이스는 엔트리들의 집합(예를 들어, 도 5의 엔트리들(512, 514, 522, 524 및 532)을 단일 노드(702)로 결합할 수 있다. 본 기술분야의 숙련된 자들은 엔트리들의 집합이 노드 또는 엔트리로 결합될 수 있음을 알 것이다. 예를 들어, 엔트리들의 집합은 엔트리들의 집합의 전체 스팬의 크기 및/또는 노드 또는 트리에 할당된 크기에 기초하여, 노드 또는 엔트리로 결합될 수 있다.
도 7에 도시된 바와 같이, 엔트리들의 결합된 집합에 대한 페이지 어드레스(704)는 P14에 있고, 전체 스팬(706)은 5이다. LBA들(120-124)(도 6) 중 하나에 액세스하기 위해, NVM 인터페이스는 스팬(706)을 이용하여 LBA 오프셋을 계산할 수 있다. 예를 들어, 갱신된 트리(700)를 횡단함으로써, NVM 인터페이스는 그 스팬에 대한 LBA 베이스가 120임을 결정할 수 있다. LBA 베이스에 기초하여, NVM 인터페이스는 (예를 들어, 액세스될 LBA로부터 LBA 베이스를 제함으로써) 액세스될 LBA에 대응하는 LBA 오프셋을 결정할 수 있다. 다음으로, NVM 인터페이스는 NVM 내의 대응하는 물리 어드레스에 액세스하기 위해, LBA 오프셋을 시작 페이지 어드레스에 더할 수 있다.
예를 들어, LBA(122)에 액세스하기 위해, NVM 인터페이스는 2(예를 들어, 122-120 = 2)의 LBA 오프셋이 존재한다고 판정할 수 있다. 다음으로, NVM 인터페이스는 2의 LBA 오프셋을 P14의 시작 페이지 어드레스(704)에 더하여, P16의 대응하는 물리 어드레스를 획득할 수 있다. 이것이 LBA(122)의 물리 페이지 어드레스이다.
다른 실시예들에서, 트리를 스캔하는 동안 엔트리들의 최적 집합이 찾아졌다고 판정하면, NVM 인터페이스는 트리를 가로질러 슬라이딩 윈도우를 이동시키는 것을 중단할 수 있다. 예를 들어, 도 4를 다시 참조하면, 파일들 G-K을 포함하도록 슬라이딩 윈도우(406)를 이동시킬 때, NVM 인터페이스는 파일들 G-K에 대응하는 엔트리들이 슬라이딩 윈도우(406)에 대해 최적임을 판정할 수 있다(예를 들어, 엔트리들 각각이 1의 LBA를 가짐). 다음으로, NVM 인터페이스는 슬라이딩 윈도우가 트리를 가로질러 이동하는 것을 완료하기를 기다리지 않고서도, 트리의 엔트리들을 플래트닝할 것을 선택할 수 있다.
다른 실시예들에서, NVM 인터페이스는 엔트리들의 최적 집합을 획득하기 위해 다수의 슬라이딩 윈도우를 이용할 수 있다. 이제 도 8 및 도 9를 보면, 본 발명의 다양한 실시예들에 따른 예시적인 프로세스들의 흐름도들이 나타나 있다.
먼저 도 8을 보면, 고속 트래 플래트닝을 위한 프로세스(800)가 나타나 있다. 프로세스(800)는 단계(802)에서 시작할 수 있고, 단계(804)에서, NVM 인터페이스는 트리(예를 들어, 도 5의 트리(500))에 대해 현재 이용가능한 메모리의 양이 미리 정해진 임계 미만임을 검출할 수 있고, 여기에서 트리는 논리 공간과 NVM(예를 들어 도 1의 NVM(120), 도 2의 NVM(220) 또는 도 3의 NVM(300))의 물리적 어드레스들 간의 논리-대-물리 맵핑을 저장할 수 있다.
단계(806)에서, NVM 인터페이스는 트리를 가로질러 적어도 2개의 슬라이딩 윈도우(예를 들어, 도 4의 슬라이딩 윈도우들(406 및 408))를 이동시킬 수 있다. 적어도 2개의 슬라이딩 윈도우는 상이한 크기들을 가질 수 있다. 즉, 각각의 슬라이딩 윈도우는 트리의 상이한 개수의 엔트리를 포함할 수 있다. 예를 들어, 제1 슬라이딩 윈도우는 트리의 32개의 엔트리를 포함하도록 구성될 수 있고, 제2 슬라이딩 윈도우는 트리의 128개의 엔트리를 포함하도록 구성될 수 있다.
상이한 크기들의 슬라이딩 윈도우들을 이용함으로써, 단 하나의 슬라이딩 윈도우를 이용할 때에 비해, 엔트리들의 더 최적의 집합이 트리 내에서 찾아질 수 있다. 구체적으로, 파일 시스템 할당 정책들로 인해, 유사한 크기의 파일들이 논리 공간 내에서 인접할 수 있다. 따라서, 1의 스팬을 갖는 수 개의 엔트리가 존재하는 경우, 이들 엔트리들에 인접한 새로운 엔트리는 1의 스팬을 가질 가능성이 있다. 그러한 경우들에서, 더 큰 슬라이딩 윈도우는 더 작은 슬라이딩 윈도우에 비해 더 최적인 엔트리들을 캡처할 수 있다. 한편, 슬라이딩 윈도우가 지나치게 큰 경우, 슬라이딩 윈도우 내에 들어맞는 엔트리들 중 일부가 최소 스팬을 갖는 엔트리들이 아닐 확률이 더 높을 수도 있다.
본 기술분야의 숙련된 자들은 임의의 적절한 개수의 슬라이딩 윈도우가 이용될 수 있음을 알 것이다(예를 들어, 2, 3, 4 등). 또한, 본 기술분야의 숙련된 자들은 적어도 2개의 슬라이딩 윈도우가 임의의 적절한 개수의 엔트리를 포함하도록 구성될 수 있음을 알 것이다. 그러나, 간단히 하기 위해, 도 4에서는 슬라이딩 윈도우들(406 및 408)이 각기 5개 및 10개의 엔트리(예를 들어, 파일)를 포함하는 것으로 도시된다.
일부 실시예들에서, 적어도 2개의 슬라이딩 윈도우는 연속하여 트리를 가로질러 이동할 수 있다. 다른 실시예들에서는, 검색의 속도를 개선하기 위해, 적어도 2개의 슬라이딩 윈도우가 병렬로 트리를 가로질러 이동할 수 있다.
단계(808)로 계속하여, NVM 인터페이스는 적어도 2개의 슬라이딩 윈도우가 트리를 가로질러 이동할 때, 그 적어도 2개의 슬라이딩 윈도우에 대응하는 적어도 2개의 최소 스팬을 유지할 수 있다. 예를 들어, 적어도 2개의 슬라이딩 윈도우 각각에 대해, NVM 인터페이스는 슬라이딩 윈도우에 의해 새롭게 포함되는 엔트리의 스팬을 러닝 카운터에 추가할 수 있다. 러닝 카운터는 슬라이딩 윈도우에 의해 포함되는 트리의 엔트리들의 전체 스팬에 대응할 수 있다. 추가로, NVM 인터페이스는 슬라이딩 윈도우에 의해 더 이상 포함되지 않는 엔트리의 스팬을 러닝 카운터로부터 제할 수 있다. 다음으로, 러닝 카운터의 현재 값은 휘발성 메모리 내에 저장된 최소 스팬에 비교될 수 있다. 그 비교에 기초하여, NVM 인터페이스는 메모리 내에 저장된 최소 스팬을 대체하거나 유지할 수 있다. 추가로, NVM 인터페이스는 메모리 내에 저장된 시작 LBA도 대체하거나 유지할 수 있다. 다음으로, 프로세스(800)는 단계(810)로 이동할 수 있다.
단계(810)에서, NVM 인터페이스는 적어도 2개의 슬라이딩 윈도우가 트리를 가로질러 이동하는 것을 완료하였다고 판정할 수 있다. 그러면, 단계(812)에서, NVM 인터페이스는 적어도 2개의 최소 스팬 간의 비교에 적어도 부분적으로 기초하여 트리의 엔트리들의 집합을 플래트닝할 것을 선택할 수 있다. 예를 들어, NVM 인터페이스는 적어도 2개의 최소 스팬 중 어느 것이 더 작은 값을 갖는지를 판정할 수 있다.
적어도 2개의 최소 스팬을 비교한 후에, NVM 인터페이스는 더 작은 값을 갖는 슬라이딩 윈도우에 대응하는 엔트리들의 집합을 플래트닝하기로 선택할 수 있다. 엔트리들의 집합은 논리적으로 인접한 엔트리들을 포함할 수 있다. 예를 들어, 도 4 및 도 5를 다시 참조하면, NVM 인터페이스는 슬라이딩 윈도우(406)(도 4)에 대응하는 엔트리들(512, 514, 522, 523 및 532)(도 5)을 선택할 수 있다. 다음으로, 프로세스(800)는 단계(814)에서 끝날 수 있다.
이제 도 9를 보면, 물리적으로 인접한 데이터 단편들을 프로그래밍하기 위한 예시적인 프로세스의 흐름도가 나타나 있다. 일부 실시예들에서, 프로세스(900)는 프로세스(800)(도 8)의 플래트닝 선택 단계(812)의 더 상세한 도면을 나타낼 수 있다.
프로세스(900)는 단계(902)에서 시작할 수 있고, 단계(904)에서 NVM 인터페이스는 NVM으로부터 엔트리들의 집합(예를 들어, 도 5의 엔트리들(512, 514, 522, 523 및 532)에 대응하는 데이터(예를 들어, 사용자 데이터)를 판독할 수 있다. 예를 들어, 도 4를 다시 참조하면, NVM 인터페이스는 물리 페이지 어드레스들 P8, P5, P12, P6 및 P11에서 저장된 데이터를 판독할 수 있다.
단계(906)로 계속하여, NVM 인터페이스는 휘발성 메모리(예를 들어, 도 1의 메모리(114)) 내에 데이터를 저장할 수 있다. 다음으로, 프로세스(900)는 단계(908)로 이동할 수 있다. 단계(908)에서, NVM 인터페이스는 데이터를 NVM의 새로운 수퍼 블록(예를 들어, 도 4의 수퍼 블록(414))에 순차적으로 프로그래밍할 수 있다(예를 들어, 기입 스트림 내에서). 다음으로, 프로세스(900)는 단계(910)에서 끝날 수 있다.
다른 실시예들에서, NVM 인터페이스는 플래트닝을 위하여 엔트리들의 최적 집합을 찾는 것에 그리디 접근법을 적용할 수 있다. 즉, 엔트리들의 최초의 최적 집합을 찾은 때, NVM 인터페이스는 엔트리들의 최초의 최적 집합에 추가될 수 있는 트리의 추가의 연속적 엔트리들을 계속하여 검색할 수 있다. 이들 추가의 엔트리들은 때로는 추가의 프로그래밍 비용을 초래하지 않고서 재프로그래밍될 수 있다.
이제 도 10a 및 도 10b를 참조하면, 플래트닝을 위한 엔트리들의 최적 집합을 찾는 것에 대한 그리디 접근법을 위한 프로세스(1000)가 도시되어 있다. 프로세스(1000)는 단계(1002)에서 시작할 수 있고, 단계(1004)에서 NVM 인터페이스(예를 들어, 도 1의 NVM 인터페이스(118) 또는 도 2의 NVM 인터페이스(218))는 휘발성 메모리(예를 들어, 도 1의 메모리(114)) 내에 저장된 트리(예를 들어, 도 5의 트리(500))에 대해 현재 이용가능한 메모리의 양이 미리 정해진 임계 미만임을 검출할 수 있다.
다음으로, 단계(1006)에서, NVM 인터페이스는 트리의 다수의 엔트리를 가로질러 슬라이딩 윈도우(예를 들어, 도 4의 슬라이딩 윈도우(406))를 이동시킬 수 있고, 슬라이딩 윈도우는 트리의 미리 정해진 개수의 엔트리를 포함할 수 있다. 예를 들어, 슬라이딩 윈도우는 32개의 엔트리를 포함할 수 있다(예를 들어, NVM 내의 스트라이프의 크기와 동일함).
단계(1008)로 계속하여, NVM 인터페이스는 슬라이딩 윈도우에 의해 포함되는 엔트리들의 집합이 엔트리들의 집합 내의 엔트리들의 개수와 동일한 스팬을 갖는지를 판정할 수 있다. 단계(1008)에서, NVM 인터페이스가 슬라이딩 윈도우에 의해 포함되는 엔트리들의 집합이 엔트리들의 집합 내의 엔트리들의 개수와 동일한 스팬을 갖지 않는다고 판정한 경우, 프로세스(1000)는 단계(1010)로 이동할 수 있다.
단계(1010)에서, NVM 인터페이스는 슬라이딩 윈도우가 트리를 가로질러 이동하는 것을 완료하였는지를 판정할 수 있다. 단계(1010)에서, NVM 인터페이스가 슬라이딩 윈도우가 트리를 가로질러 이동하는 것을 완료하였다고 판정한 경우, 프로세스(1000)는 단계(1012)로 이동할 수 있다.
단계(1012)에서, NVM 인터페이스는 트리 플래트닝을 위해 슬라이딩 윈도우에 의해 만들어지는 트리의 엔트리들의 집합을 선택할 수 있다. 예를 들어, NVM 인터페이스는 메모리 내에 저장된 하나 이상의 값(예를 들어, 최소 스팬 및 시작 LBA)에 대응하는 엔트리들의 집합을 선택할 수 있다. 즉, 엔트리들의 집합은 트리 내의 엔트리들의 다른 집합들에 비교하여 최소 스팬을 가질 수 있다. 다음으로, 프로세스(1000)는 단계(1014)에서 끝날 수 있다.
단계(1010)에서, NVM 인터페이스가 대신, 슬라이딩 윈도우가 트리를 가로질러 이동하는 것을 완료하지 않았다고 판정하는 경우, 프로세스(1000)는 단계(1006)로 복귀할 수 있다. 단계(1006)에서, NVM 인터페이스는 트리들의 엔트리들을 가로질러 슬라이딩 윈도우를 이동시키는 것을 계속할 수 있다.
단계(1008)를 다시 참조하면, NVM 인터페이스가 대신에, 슬라이딩 윈도우에 의해 포함되는 엔트리들의 집합이 엔트리들의 집합 내의 엔트리들의 개수와 동일한 스팬을 갖는다고 판정하는 경우, 프로세스(1000)는 단계(1016)로 이동할 수 있다. 즉, 그 엔트리들의 집합은 현재의 슬라이딩 윈도우를 위한 엔트리들의 최적 집합일 수 있다.
단계(1016)에서, NVM 인터페이스는 확장 슬라이딩 윈도우(예를 들어, 도 4의 슬라이딩 윈도우(408))를 생성하기 위해, 슬라이딩 윈도우에 의해 포함되는 미리 정해진 개수의 엔트리를 확장할 수 있다. 일부 경우들에서, 슬라이딩 윈도우가 이전에 32개의 엔트리를 포함했던 경우, NVM 인터페이스는 64개의 엔트리를 포함하도록 슬라이딩 윈도우를 확장할 수 있다.
일부 실시예들에서, NVM 인터페이스는 확장 슬라이딩 윈도우에 의해 포함되는 엔트리들의 집합의 스팬을 스트라이프-경계에 정렬하려고 시도할 수 있다. 예를 들어, 도 3을 다시 참조하면, 각각의 스트라이프(예를 들어, 스트라이프(302 또는 304))는 32개의 LBA를 저장할 수 있을 수 있다. 슬라이딩 윈도우에 의해 포함되는 엔트리들의 최적 집합의 스팬이 32인 경우, NVM 인터페이스는 슬라이딩 윈도우의 미리 정해진 개수의 엔트리를 스트라이프의 크기의 배수만큼 확장할 수 있다. 결과적으로, 확장 슬라이딩 윈도우에 의해 포함되는 엔트리들의 최적 집합은 64 LBA, 96 LBA 등의 스팬을 가질 수 있다.
다른 예로서, 슬라이딩 윈도우에 의해 포함되는 엔트리들의 최적 집합의 스팬이 스트라이프의 크기보다 작은 경우(예를 들어, 48 LBA의 스팬), 슬라이딩 윈도우는 스트라이프 경계와 정렬되도록 확장될 수 있다. 즉, NVM 인터페이스는 슬라이딩 윈도우의 미리 정해진 개수의 엔트리를 64개의 엔트리로 확장할 수 있다. 위에서 논의된 바와 같이, 액세스 시간은 특정 스트라이프 내에 포함된 페이지들에 대해 동일하게 유지되므로, 전체 스트라이프를 채우는 사용자 데이터를 프로그래밍하기 위한 시간은 스트라이프보다 적게 채우는 사용자 데이터를 프로그래밍하기 위한 시간과 동일할 수 있다.
또 다른 예로서, NVM 인터페이스는 NVM의 블록 또는 수퍼 블록(예를 들어, 도 4의 수퍼 블록(414)) 내의 현재 위치에 기초하여 슬라이딩 윈도우를 어떻게 확장할지를 결정할 수 있다. 예를 들어, 수퍼 블록의 스트라이프가 현재 데이터로 중간쯤 채워진 경우, NVM 인터페이스는 엔트리들의 미리 정해진 개수를 스트라이프의 크기의 절반(예를 들어, 16개의 엔트리)만큼 확장할 수 있다.
다음으로, 단계(1018)에서, NVM 인터페이스는 확장 슬라이딩 윈도우를 트리의 복수의 엔트리의 적어도 일부에 적용할 수 있다. 구체적으로, NVM 인터페이스는 확장 슬라이딩 윈도우에 추가될 수 있는 작은 스팬들(예를 들어, 1, 2, 3 또는 4 LBA)을 갖는 트리의 추가의 연속적인 엔트리들을 검색할 수 있다. 다음으로, 프로세스(1000)는 단계(1020)로 이동할 수 있다.
단계(1020)에서, NVM 인터페이스는 확장 슬라이딩 윈도우에 의해 생성되는 러닝 카운터의 값이 미리 정해진 값과 동일한지를 판정할 수 있다. 예를 들어, NVM 인터페이스는 러닝 카운터의 값(예를 들어, 확장 슬라이딩 윈도우에 의해 포함되는 엔트리들의 집합을 위한 전체 스팬)이 스트라이프 크기의 배수와 동일한지를 판정할 수 있다.
단계(1020)에서, NVM 인터페이스가 러닝 카운터의 값이 미리 정해진 값과 동일하지 않다고 판정하는 경우, 프로세스(1000)는 단계(1012)로 이동할 수 있다. 구체적으로, NVM 인터페이스는 확장 슬라이딩 윈도우에 의해 포함되는 엔트리들의 집합의 전체 스팬이 하나 이상의 스트라이프의 크기보다 작거나 크다고 판정했을 수 있다. 이러한 판정에 기초하여, 엔트리들의 원래의 집합이 확장 슬라이딩 윈도우에 의해 포함되는 엔트리들의 집합보다 더 바람직하다고 고려될 수 있다. 단계(1012)에서, NVM 인터페이스는 트리 플래트닝을 위해, 슬라이딩 윈도우에 의해 만들어진 트리의 엔트리들의 집합을 선택할 수 있다.
단계(1020)를 다시 참조하면, NVM 인터페이스가 대신, 러닝 카운터의 값이 미리 정해진 값과 동일하다고 판정하면, 프로세스(1000)는 단계(1022)로 이동할 수 있다. 단계(1022)에서, NVM 인터페이스는 트리 플래트닝을 위해, 확장 슬라이딩 윈도우에 의해 만들어진 트리의 엔트리들의 집합을 선택할 수 있다. 다음으로, 프로세스(1000)는 단계(1014)에서 끝날 수 있다.
다른 실시예들에서, 트리 내에서 결합될 수 있는 엔트리들의 단일의 최적 집합을 찾는 대신에, NVM 인터페이스는 트리의 단일 통과에서 엔트리들의 다수의 후보 집합을 찾을 수 있다. 구체적으로, NVM 인터페이스는 최소 스팬 및 시작 LBA와 함께 단일 러닝 카운터를 유지하기보다는, 휘발성 메모리 내에 우선순위 큐를 유지할 수 있다.
NVM 인터페이스는 슬라이딩 윈도우에 의해 포함되는 다수의 엔트리에 관련된 매개변수들을 우선순위 큐 내에 삽입하려고 시도할 수 있다. 다음으로, NVM 인터페이스는 슬라이딩 윈도우를 트리 내에서 엔트리들의 개수만큼 이동시킬 수 있고, 여기에서 엔트리들의 개수는 우선순위 큐의 현재 상태에 적어도 부분적으로 기초한다. 슬라이딩 윈도우가 트리를 가로질러 이동하는 것을 완료하고 나면, NVM 인터페이스는 우선순위 큐를 이용하여 엔트리들의 최적 집합을 찾을 수 있다.
여기에서 이용될 때, "우선순위 큐"는 하나 이상의 데이터 항목을 포함하는 임의의 적절한 데이터 구조(예를 들어, 순서화된 목록)일 수 있고, 여기에서 각각의 데이터 항목은 우선순위 번호에 관련될 수 있다. 예를 들어, 최소 우선순위 큐는, 낮은 우선순위 번호를 갖는 요소들은 목록의 앞으로 이동할 수 있고 높은 우선순위 번호를 갖는 요소들은 목록의 끝으로 이동할 수 있는 목록일 수 있다. 다른 예로서, 최대 우선순위 큐는 높은 우선순위 번호를 갖는 요소들은 목록의 앞으로 이동할 수 있고 낮은 우선순위 번호를 갖는 요소들은 목록의 끝으로 이동할 수 있는 목록일 수 있다.
이제 도 11을 참조하면, 우선순위 큐를 이용하여 트리를 플래트닝하기 위한 프로세스(1100)의 흐름도가 나타나 있다. 프로세스(1100)는 단계(1102)에서 시작할 수 있고, 단계(1104)에서, NVM 인터페이스(예를 들어, 도 1의 NVM 인터페이스(118) 또는 도 2의 NVM 인터페이스(218))는 휘발성 메모리(예를 들어, 도 1의 메모리(114))에 저장된 트리(예를 들어, 도 5의 트리(500))에 대해 현재 이용가능한 메모리의 양이 미리 정해진 임계 미만임을 검출할 수 있다.
단계(1106)에서, NVM 인터페이스는 슬라이딩 윈도우(예를 들어, 도 4의 슬라이딩 윈도우(406))에 들어맞는 트리의 복수의 엔트리(예를 들어, 도 4의 파일들 A-E에 대응하는 엔트리들)를 검출할 수 있다. 복수의 엔트리를 검출한 후, 프로세스(1100)는 단계(1108)로 이동할 수 있다.
단계(1108)에서, NVM 인터페이스는 우선순위 큐가 가득 차 있는지를 판정할 수 있다. 예를 들어, 우선순위 큐는 고정된 크기(예를 들어, 20개의 요소)를 가질 수 있고, 비어있는 값들의 집합으로 초기화될 수 있다. 우선순위 큐가 가득 차 있지 않은 경우(예를 들어, 우선순위 큐 내에 20개의 요소보다 적게 있음), 프로세스(1100)는 단계(1110)로 이동할 수 있다.
단계(1110)에서, NVM 인터페이스는 복수의 엔트리에 관련된 매개변수들을 우선순위 큐 내에 삽입할 수 있다. 우선순위 큐에 추가될 수 있는 매개변수들은 복수의 엔트리에 관련된 전체 스팬 및 시작 LBA를 포함할 수 있다.
예를 들어, 파일들 A-E(도 4)에 대해, NVM 인터페이스는 관련 매개변수들을 제1 요소로서 우선순위 큐 내에 삽입할 수 있다. 구체적으로, NVM 인터페이스는 0의 시작 LBA를 데이터 항목으로서 삽입하고, 82의 전체 스팬(82-0 = 82)을 관련된 우선순위 번호로서 삽입할 수 있다.
본 기술분야의 숙련된 자들은 다른 적절한 매개변수들이 대신 또는 추가로 우선순위 큐 내에 포함될 수 있음을 알 것이다. 예를 들어, 슬라이딩 윈도우가 트리를 가로질러 이동할 때 일정한 개수의 엔트리를 포함하는 경우, 스팬은 우선순위 큐 내에 저장될 수 있다. 그러나, 슬라이딩 윈도우가 트리를 가로질러 이동할 때 가변 개수의 엔트리를 포함하는 경우, 비율(예를 들어, 복수의 엔트리의 전체 스팬과 복수의 엔트리 내의 엔트리들의 개수 간의 비율)이 우선순위 큐 내에 대신 저장될 수 있다.
다음으로, 단계(1112)에서, NVM 인터페이스는 슬라이딩 윈도우를 트리 내에서 단일 엔트리만큼 전방으로 이동시킬 수 있다. 예를 들어, 도 4를 참조하면, NVM 인터페이스는 파일들 B-F에 대응하는 엔트리들을 포함하도록 슬라이딩 윈도우(406)를 이동시킬 수 있다.
단계(1114)로 계속하여, NVM 인터페이스는 슬라이딩 윈도우가 트리의 끝을 통과하였는지를 판정할 수 있다. 단계(1114)에서, NVM 인터페이스가 슬라이딩 윈도우가 트리의 끝을 통과하지 않았다고 판정하는 경우, 프로세스(1100)는 단계(1108)로 복귀할 수 있고, 거기에서 NVM 인터페이스는 갱신된 엔트리들(예를 들어, 파일들 B-F에 대응하는 엔트리들)에 관련된 매개변수들을 우선순위 큐 내에 삽입하려고 시도할 수 있다.
단계(1114)에서, NVM 인터페이스가 대신, 슬라이딩 윈도우가 트리의 끝을 통과하였다고 판정하는 경우, 프로세스(1100)는 단계(1116)에서 끝날 수 있다.
단계(1108)를 다시 참조하면, NVM 인터페이스가 대신, 우선순위 큐가 가득 차 있다고 판정하는 경우(예를 들어, 우선순위 큐 내에 이미 20개의 요소가 있음), 프로세스(1100)는 단계(1118)로 이동할 수 있다.
예를 들어, 도 12를 참조하면, 우선순위 큐(1202)의 블록도(1200)가 나타나 있다. 우선순위 큐(1202)는 4개의 요소(1204-1210)를 포함할 수 있고, 각각의 요소는 각각 파일들 C-G, D-H, E-I 및 F-J(도 4)에 대응할 수 있다. 본 기술분야의 숙련된 자들은 우선순위 큐(1202)가 임의의 적절한 개수의 요소를 포함할 수 있음을 알 것이다. 그러나, 간단히 하기 위해, 우선순위 큐(1202)는 4개의 요소를 포함하는 것으로 나타나 있다. 그러한 것으로서, 우선순위 큐(1202)는 가득 차 있다.
요소들(1204-1210) 각각은 전체 스팬 및 시작 LBA에 관련될 수 있다. 전체 스팬은 우선순위 번호로서 기능할 수 있다. 도시된 바와 같이, 우선순위 큐(1202)는 요소들이 전체 스팬에 기초하는 오름차순으로 정렬되도록, 최소 우선순위 큐일 수 있다. 결과적으로, 최저 우선순위 번호(예를 들어, 최저 전체 스팬)를 갖는 요소가 큐의 앞으로 이동될 수 있다. 새로운 요소들은 그들의 관련 전체 스팬에 기초하여 우선순위 큐(1202) 내에 삽입될 수 있다.
도 11을 다시 참조하면, 단계(1118)에서 NVM 인터페이스는 복수의 엔트리에 관련된 매개변수들이 삽입가능한지를 판정할 수 있다. 예를 들어, 슬라이딩 윈도우(406)(도 4)가 현재 파일들 G-K에 대응하는 복수의 엔트리를 포함하는 경우, NVM 인터페이스는 엔트리들(512, 514, 522, 524 및 532)에 관련된 매개변수들이 우선순위 큐(1202)(도 12) 내에 삽입가능한지를 판정할 수 있다.
구체적으로, 복수의 엔트리의 전체 스팬은 우선순위 큐 내에 이미 저장되어 있는 전체 스팬과 비교될 수 있다. 전체 스팬이 우선순위 큐(1202) 내의 최고 전체 스팬보다 작은 경우, 매개변수들은 큐(1202) 내의 적절한 위치에 삽입될 수 있다. 예를 들어, 파일들 G-K에 대응하는 전체 스팬(예를 들어, 5)이 우선순위 큐(1202) 내의 최고 전체 스팬(예를 들어, 81)보다 작으므로, NVM 인터페이스는 엔트리들(512, 514, 522, 524 및 532)에 관련된 매개변수들이 삽입가능하다고 판정할 수 있다. 대안적으로, 전체 스팬이 우선순위 큐(1202) 내의 최고 전체 스팬보다 큰 경우, NVM 인터페이스는 매개변수들을 폐기할 수 있다.
NVM 인터페이스가 매개변수들이 삽입가능하다고 판정하는 경우, 프로세스(1100)는 단계(1120)로 이동할 수 있다. 단계(1120)에서, NVM 인터페이스는 매개변수들을 우선순위 큐 내에 삽입할 수 있다. 예를 들어, 파일들 G-K(도 4)의 5의 전체 스팬과 120의 시작 LBA가 우선순위 큐(1202)(도 12) 내에 요소들(1212)로서 삽입될 수 있다. 추가로, 우선순위 큐(1202)가 4개의 요소의 고정된 크기를 가지므로, 요소들(1212)의 삽입은 큐(1202)의 끝에 있는 요소(예를 들어, 요소(1204))를 밀어낸다.
매개변수들을 삽입한 후에, 프로세스(1100)는 단계(1122)로 이동할 수 있다. 단계(1122)에서, NVM 인터페이스는 슬라이딩 윈도우를 복수의 엔트리 내의 엔트리들의 개수와 동일한 엔트리 개수만큼 트리 내에서 전방으로 이동시킬 수 있다. 예를 들어, 도 4를 다시 참조하면, NVM 인터페이스는 슬라이딩 윈도우(406)를 5 엔트리만큼 전방으로 이동시킬 수 있다. 즉, 새롭게 이동된 슬라이딩 윈도우(406)의 제1 엔트리는 파일 L에 대응할 수 있다. 다음으로, 프로세스(1100)는 단계(1114)로 이동할 수 있고, 여기에서 NVM 인터페이스는 슬라이딩 윈도우가 트리의 끝을 지나쳤는지를 판정할 수 있다.
단계(1118)를 다시 참조하면, NVM 인터페이스가 대신, 매개변수들이 삽입가능하지 않다고 판정한 경우, 프로세스(1100)는 단계(1112)로 이동할 수 있다. 단계(1112)에서, NVM 인터페이스는 슬라이딩 윈도우를 단일 엔트리만큼 트리 내에서 전방으로 이동시킬 수 있다.
그러한 접근법을 이용하여, NVM 인터페이스는 논리 공간 내에서 연결되어 있지 않은 엔트리들의 다수의 후보 집합을 찾을 수 있고, 여기에서 엔트리들의 각각의 집합은 트리 내에서 단일 엔트리 또는 노드로서 결합될 수 있다. 결과적으로, NVM 인터페이스는 트리의 스캐닝을 다수의 트리 플래트닝 동작에 걸쳐 나누어 행할 수 있다. 트리 스캐닝은 프로세싱 효율성 면에서 고비용이므로(예를 들어, 많은 횟수의 메모리 동작 및 캐시 스래시(cache thrashes)를 요구함), 이것은 특히 유용할 수 있다. 따라서, NVM 인터페이스가 트리의 단일 통과에서 다수의 후보를 생성할 수 있는 경우, 시스템 효율성이 개선될 수 있다. 더욱이, 슬라이딩 윈도우를 슬라이딩 윈도우에 의해 포함되는 엔트리들의 개수와 동일한 엔트리들의 개수만큼 트리 내에서 전방으로 이동시킴으로써, NVM 인터페이스는 우선순위 큐 내에 관련 매개변수들을 삽입한 후에 동일 엔트리들을 다시 고찰해야만 하는 것을 회피할 수 있다.
일부 실시예들에서, NVM 인터페이스는 복수의 슬라이딩 윈도우 또는 그리디 알고리즘을 프로세스(1100)(도 11)에 결합할 수 있다. 예를 들어, 프로세스(800)(도 8)와 유사한 프로세스를 이용하면, NVM 인터페이스는 둘 이상의 슬라이딩 윈도우에 들어맞는 엔트리들을 검출할 수 있다. 다음으로, NVM 인터페이스는 둘 이상의 슬라이딩 윈도우의 엔트리들에 관련된 매개변수들을 둘 이상의 우선순위 큐에 삽입하려고 시도할 수 있고, 여기에서 각각의 우선순위 큐는 둘 이상의 슬라이딩 윈도우 중 하나에 관련될 수 있다.
다른 예로서, 프로세스(1000)(도 10a 및 도 10b)와 유사한 프로세스를 이용하여, NVM 인터페이스는 우선순위 큐에 기초하여, 엔트리들의 최적 집합이 검출되었는지를 판정할 수 있다. 구체적으로, 슬라이딩 윈도우에 의해 포함되는 엔트리들의 최적 집합의 전체 스팬은 엔트리들의 최적 집합 내의 엔트리들의 개수와 동일한 값을 가질 수 있다. 즉, 32개의 엔트리를 포함하는 슬라이딩 윈도우에 대하여, 엔트리들의 최적 집합의 전체 스팬도 32일 수 있다.
엔트리들의 최적 집합이 검출되었다고 판정한 것에 응답하여, NVM 인터페이스는 슬라이딩 윈도우에 의해 포함되는 미리 정해진 개수의 엔트리들을 확장하여, 확장 슬라이딩 윈도우를 생성할 수 있다. 그 다음, NVM 인터페이스는 확장 슬라이딩 윈도우를 트리에 적용할 수 있다.
또 다른 실시예들에서는, 트리에 대해 현재 이용가능한 메모리의 양이 미리 정해진 임계 미만일 때에만 트리를 검색하는 것을 대신하여, NVM 인터페이스가 트리 갱신들을 수행하는 동안 엔트리들의 후보 집합들의 우선순위 큐를 유지할 수 있다. 구체적으로, NVM 인터페이스가 (예를 들어, 하나 이상의 엔트리를 추가하고, 하나 이상의 엔트리를 제거하고/거나 하나 이상의 엔트리의 크기를 변경함으로써) 트리의 노드를 갱신하고 있는 동안, NVM 인터페이스는 노드의 내용을 압축해제하여 메모리(예를 들어, 도 1의 메모리(114))에 읽어내야 할 필요가 있을 수 있다. 이러한 프로세스 동안, 노드는 이미 압축해제되어 있으므로, NVM 인터페이스는 몇 개의 추가 동작만으로 노드에 관련된 매개변수들을 쉽게 획득할 수 있다. 다음으로, 이 매개변수들은 우선순위 큐에 저장될 수 있다.
우선순위 큐(1202)(도 12)와 마찬가지로, 트리 갱신들 동안 유지되는 우선순위 큐는 임의의 적절한 개수의 요소를 포함할 수 있다. 각각의 요소는 예를 들어 노드의 메리트(merit), 전체 스팬 및/또는 시작 LBA와 같은 하나 이상의 매개변수에 관련될 수 있다.
이제 도 13을 참조하면, 트리 갱신들 동안 유지되는 우선순위 큐를 이용하는 트리 플래트닝을 위한 프로세스(1300)의 흐름도가 도시된다. 프로세스(1300)는 단계(1302)에서 시작할 수 있고, 단계(1304)에서 NVM 인터페이스(예를 들어, 도 1의 NVM 인터페이스(118) 또는 도 2의 NVM 인터페이스(218))는 휘발성 메모리(예를 들어, 도 1의 휘발성 메모리(114)) 내에 저장된 트리의 노드에 대한 갱신을 수행할 수 있고, 여기에서 노드는 복수의 엔트리를 포함한다.
다음으로, 단계(1306)에서, NVM 인터페이스는 복수의 엔트리의 개수가 미리 정해진 값을 초과하는지를 검출할 수 있다. 따라서, 효율성을 개선하기 위해, NVM 인터페이스는 노드가 비교적 가득 차 있거나 높은 사용량을 갖는 경우에 그 노드가 우선순위 큐 내에 삽입될 수 있는지를 고려할 수 있을 뿐이다. 일부 경우들에서, 예를 들어, NVM 인터페이스는 노드가 비교적 가득 차 있는지를 판정하기 위해 필터를 적용할 수 있다. 대안적으로, NVM 인터페이스는 노드에 관련된 사용량을 판정할 수 있다.
NVM 인터페이스는 복수의 엔트리의 개수가 미리 정해진 값을 초과함을 검출한 경우, 프로세스(1300)는 단계(1308)로 이동할 수 있다. 단계(1308)에서, NVM 인터페이스는 노드에 관련된 매개변수들을 우선순위 큐 내에 삽입하려고 시도할 수 있다. 예를 들어, NVM 인터페이스는 노드의 엔트리들에 대한 전체 스팬 및 시작 LBA를 획득할 수 있다. 노드는 가변 개수의 엔트리(예를 들어, 10 내지 16 엔트리)를 저장할 수 있으므로, NVM 인터페이스는 노드의 메리트를 계산할 필요가 있을 수 있고, 여기에서 메리트는 우선순위 큐 내의 우선순위 번호로서 기능할 수 있다. 일부 실시예들에서, 계산된 메리트는 엔트리들의 전체 스팬과 엔트리들의 개수 간의 비율에 기초할 수 있다. 예를 들어, 계산된 메리트는 엔트리들의 전체 스팬과 엔트리들의 개수 사이의 비율과 동일할 수 있다. 다른 예로서, 메리트를 위한 정수값을 생성하기 위해, 결과적인 비율에 가중치가 곱해질 수 있다. 이러한 실시예들 둘 다에서, 우선순위 큐 내의 요소들이 메리트에 기초하는 오름차순으로 저장되도록, 우선순위 큐는 최소 우선순위 큐일 수 있다.
다른 예로서, 메리트는 계산된 메리트의 역일 수 있다. 그러한 것으로서, 요소들이 메리트에 기초하는 내림차순으로 저장되도록, 우선순위 큐는 최대 우선순위 큐일 수 있다. 또 다른 실시예들에서, 메리트를 계산하기 위해 엔트리들의 개수를 이용하는 대신에, NVM 인터페이스는 메리트를 계산하기 위해 바이트 사용량을 이용할 수 있다.
이제 도 14를 참조하면, 우선순위 큐(1402)의 블록도(1400)가 나타나 있다. 우선순위 큐(1402)는 4개의 요소를 포함할 수 있고, 여기에서 각각의 요소는 메리트, 전체 스팬 및 시작 LBA에 관련될 수 있다. 도시된 바와 같이, 요소들이 메리트에 기초하는 오름차순으로 정렬되도록, 우선순위 큐(1402)는 최소 우선순위 큐일 수 있다. 그에 대응하여, 최소의 우선순위 번호(예를 들어, 최저 메리트)를 갖는 요소가 큐의 앞으로 이동할 수 있다. 본 기술분야의 숙련된 자들은 우선순위 큐(1402)가 임의의 적절한 개수의 요소를 포함할 수 있음을 알 것이다. 그러나, 간단히 하기 위해, 우선순위 큐(1402)는 4개의 요소를 포함하는 것으로 나타나 있다.
논의된 바와 같이, 메리트는 엔트리들의 전체 스팬과 엔트리들의 개수 간의 비율과 동일할 수 있다. 따라서, 요소(1404)에 대응하는 노드가 10개의 엔트리를 갖는다고 가정하면, 노드의 메리트는 값 42를 가질 수 있고, 이것은 노드의 엔트리들의 전체 스팬과 엔트리들의 개수의 비율(420/10 = 42)과 동일하다. 요소들(1406-1410)의 메리트들에 대해서도 유사한 계산들이 수행될 수 있다.
삽입될 노드의 메리트가 우선순위 큐(1402) 내에 현재 저장되어 있는 최고 메리트보다 작은 경우, NVM 인터페이스는 관련된 매개변수들을 큐(1402) 내의 적절한 위치에 삽입할 수 있다. 그러나, 노드의 메리트가 우선순위 큐(1402) 내에 현재 저장되어 있는 최고 메리트보다 큰 경우, NVM 인터페이스는 관련 매개변수들을 폐기할 수 있다.
도 13의 단계(1306)를 다시 참조하면, NVM 인터페이스가 대신, 복수의 엔트리의 개수가 미리 정해진 값 미만임을 검출하는 경우, 프로세스(1300)는 단계(1310)로 이동할 수 있다. 구체적으로, NVM 인터페이스는 노드가 가득 차 있지 않다고 판정할 수 있다.
단계(1310)에서, NVM 인터페이스는 노드를 우선순위 큐에 삽입하기를 시도하기 전에 기다릴 수 있다. 즉, NVM 인터페이스는 노드를 우회할 수 있고, 추가 엔트리들이 노드에 추가될 때까지(예를 들어, 사용량이 증가할 때까지) 기다릴 수 있다.
본 기술분야의 숙련된 자들은 (도 13의 점선 박스에 의해 나타난) 서브프로세스(1340)가 트리의 다수의 노드에 대해 실행될 수 있음을 알 것이다. 구체적으로, NVM 인터페이스는 갱신되고 있는 트리의 각 노드를 가로질러 반복할 수 있고, 노드를 우선순위 큐에 추가하려고 시도할 수 있다.
단계들(1310 및 1308) 각각으로부터, 프로세스(1300)는 단계(1312)로 이동할 수 있다. 구체적으로, 단계(1312)에서, NVM 인터페이스는 트리에 대해 현재 이용가능한 메모리의 양이 미리 정해진 임계 미만임을 검출할 수 있다. 그러면, 단계(1314)에서, NVM 인터페이스는 우선순위 큐에 적어도 부분적으로 기초하여 트리의 적어도 일부분을 결합할 수 있다.
예를 들어, 우선순위 큐에 기초하여, NVM 인터페이스는 결합될 수 있는 엔트리들을 갖는 최적의 노드를 판정할 수 있다. 따라서, 최소 우선순위 큐에 대하여, NVM 인터페이스는 우선순위 큐 내의 제1 요소를 최적 노드로서 취할 수 있다. 트리의 각각의 노드가 10 내지 16개의 엔트리를 저장할 수 있는 경우, 최적 노드는 16개의 엔트리를 포함할 수 있고, 각각의 엔트리는 하나의 LBA의 스팬을 갖는다.
일부 실시예들에서, NVM 인터페이스가 최적 노드를 결정하고 나면, NVM 인터페이스는 트리에 필요한 추가 메모리의 양이 최적 노드의 엔트리들을 결합함으로써 비워질 수 있는 메모리의 양을 초과하는지를 검출할 수 있다. NVM 인터페이스가 필요한 추가 메모리의 양이 엔트리들을 결합함으로써 비워질 수 있는 메모리의 양 이하임을 검출하는 경우, NVM 인터페이스는 트리의 추가 검색을 반드시 하지 않고서도, 그 엔트리들을 결합할 수 있다.
그러나, NVM 인터페이스가 필요한 추가 메모리의 양이 엔트리들을 결합함으로써 비워질 수 있는 메모리의 양보다 큰 것을 검출하는 경우, NVM 인터페이스는 플래트닝을 위한 엔트리들의 다른 집합을 찾기 위해 임의의 다른 적절한 프로세스를 이용할 수 있다. 예를 들어, NVM 인터페이스는 트리를 가로질러 적어도 하나의 슬라이딩 윈도우를 이동시킬 수 있고, 적어도 하나의 슬라이딩 윈도우를 이용하여 트리의 적어도 일부를 결합할 수 있다. 예를 들어, NVM 인터페이스는 도 8, 10a 및 10b, 및 11 각각의 프로세스들(800, 1000 및 1100) 중 하나 이상과 유사한 프로세스를 이용할 수 있다. 그러면, 프로세스(1300)는 단계(1316)에서 끝날 수 있다.
트리의 철저한 검색(exhaustive search)에 비교하여, 위에서 설명된 접근법은 비교적 짧은 시간량 내에 양호한 플래트닝 후보들을 만들어낼 수 있다. 더욱이, 메모리는 고비용의 트리 리밸런스 동작들(tree rebalance operations)을 요구하지 않고서, 트리 플래트닝 이후에 즉시 해제될 수 있다(예를 들어, 전체 스팬이 부모 노드 내에서 어드레스될 수 있음).
도 8, 9, 10a-10b, 11 및 13의 프로세스들(800, 900, 1000, 1100 및 1300)은 시스템(예를 들어, 도 1의 전자 장치(100) 또는 도 2의 전자 장치(200)) 내의 하나 이상의 컴포넌트에 의해 실행될 수 있음을 이해해야 한다. 예를 들어, 프로세스들 내의 단계들의 적어도 일부는 NVM 인터페이스(예를 들어, 도 1의 NVM 인터페이스(118) 또는 도 2의 NVM 인터페이스(218))에 의해 수행될 수 있다. 본 기술분야의 숙련된 자들은 단계들 중 하나 이상이 제어 회로(예를 들어, 도 1의 SoC 제어 회로(112))에 의해 수행될 수 있음을 알 것이다.
또한, 도 8, 9, 10a-10b, 11 및 13의 프로세스들(800, 900, 1000, 1100 및 1300)은 예시에 지나지 않음을 이해해야 한다. 본 발명의 범위를 벗어나지 않고서, 단계들 중 임의의 것이 제거, 수정 또는 조합될 수 있고, 임의의 추가의 단계들이 더해질 수 있다.
본 발명의 설명된 실시예들은 제한이 아니라 설명을 목적으로 제시된 것이다.

Claims (23)

  1. 고속 트리 플래트닝(faster tree flattening)을 위한 방법으로서,
    트리에 대해 현재 이용가능한 메모리의 양이 미리 정해진 임계 미만임을 검출하는 단계 - 상기 트리는 논리 공간과 비휘발성 메모리(NVM: non-volatile memory)의 물리적 어드레스들 사이의 논리-대-물리 맵핑을 저장함 - ;
    상기 트리를 가로질러 적어도 2개의 슬라이딩 윈도우를 이동시키는 단계;
    상기 적어도 2개의 슬라이딩 윈도우가 상기 트리를 가로질러 이동할 때 상기 적어도 2개의 슬라이딩 윈도우에 대응하는 적어도 2개의 최소 스팬(span)을 유지하는 단계;
    상기 적어도 2개의 슬라이딩 윈도우가 상기 트리를 가로질러 이동하는 것을 완료하였다고 판정하는 단계; 및
    상기 적어도 2개의 최소 스팬 간의 비교에 적어도 부분적으로 기초하여 상기 트리의 엔트리들의 집합을 플래트닝하도록 선택하는 단계
    를 포함하는 방법.
  2. 제1항에 있어서,
    상기 적어도 2개의 슬라이딩 윈도우는 각각 상기 트리의 상이한 개수의 엔트리들을 포함(encompass)하는 방법.
  3. 제1항 또는 제2항에 있어서,
    상기 엔트리들의 집합은 논리적으로 인접한 엔트리들을 포함하는 방법.
  4. 제1항 또는 제2항에 있어서,
    상기 적어도 2개의 최소 스팬을 유지하는 단계는,
    상기 적어도 2개의 슬라이딩 윈도우 각각에 대하여, 상기 슬라이딩 윈도우에 의해 새롭게 포함된 엔트리의 스팬을 러닝 카운터(running counter)에 추가하는 단계; 및
    상기 슬라이딩 윈도우에 의해 더 이상 포함되지 않는 엔트리의 스팬을 상기 러닝 카운터로부터 제하는(subtracting) 단계
    를 포함하는 방법.
  5. 제4항에 있어서,
    상기 러닝 카운터를 휘발성 메모리 내에 저장된 최소 스팬과 비교하는 단계;
    상기 러닝 카운터가 상기 최소 스팬보다 작은지를 판정하는 단계; 및
    상기 러닝 카운터가 상기 최소 스팬보다 작다는 판정에 응답하여, 상기 러닝 카운터를 상기 최소 스팬으로서 대체하는 단계
    를 더 포함하는 방법.
  6. 제5항에 있어서,
    상기 러닝 카운터가 상기 최소 스팬보다 크다는 판정에 응답하여 상기 최소 스팬을 유지하는 단계를 더 포함하는 방법.
  7. 제1항 또는 제2항에 있어서,
    상기 선택하는 단계는 상기 적어도 2개의 최소 스팬 중 어느 것이 더 작은 값을 갖는지를 판정하는 단계를 포함하는 방법.
  8. 제1항 또는 제2항에 있어서,
    상기 적어도 2개의 슬라이딩 윈도우는 병렬로 상기 트리를 가로질러 이동하는 것 및 연속하여 상기 트리를 가로질러 이동하는 것 중 적어도 하나인 방법.
  9. 비휘발성 메모리(NVM);
    복수의 엔트리를 포함하는 트리를 저장하기 위한 휘발성 메모리 - 상기 트리는 논리 공간과 상기 NVM의 물리적 어드레스들 간의 논리-대-물리 맵핑을 제공함 - ; 및
    제어 회로를 포함하는 메모리 인터페이스
    를 포함하고, 상기 제어 회로는,
    트리에 대해 현재 이용가능한 메모리의 양이 미리 정해진 임계 미만임을 검출하고;
    상기 트리의 복수의 엔트리를 가로질러 슬라이딩 윈도우를 이동시키고 - 상기 슬라이딩 윈도우는 상기 트리의 미리 정해진 개수의 엔트리를 포함함 - ;
    상기 슬라이딩 윈도우에 의해 포함되는 엔트리들의 집합이 상기 엔트리들의 집합 내의 엔트리들의 개수와 동일한 스팬을 갖는다고 판정하고;
    상기 슬라이딩 윈도우에 의해 포함되는 상기 미리 정해진 개수의 엔트리를 확장하여, 확장 슬라이딩 윈도우를 생성하고;
    상기 확장 슬라이딩 윈도우를 상기 트리의 상기 복수의 엔트리의 적어도 일부분에 적용하도록
    동작하는 시스템.
  10. 제9항에 있어서,
    상기 제어 회로는 상기 슬라이딩 윈도우의 상기 미리 정해진 개수의 엔트리를 상기 NVM의 스트라이프(stripe)의 크기의 배수만큼 확장하도록 동작하는 시스템.
  11. 제9항 또는 제10항에 있어서,
    상기 제어 회로는 상기 슬라이딩 윈도우를 확장하여 스트라이프 경계에 정렬시키도록 동작하는 시스템.
  12. 제9항 또는 제10항에 있어서,
    상기 제어 회로는,
    상기 확장 슬라이딩 윈도우에 의해 생성되는 러닝 카운터의 값이 미리 정해진 값과 동일한지를 판정하고;
    상기 확장 슬라이딩 윈도우에 의해 생성되는 상기 러닝 카운터의 값이 상기 미리 정해진 값과 동일하다는 판정에 응답하여, 상기 확장 슬라이딩 윈도우에 의해 생성되는 상기 트리의 엔트리들의 집합을 트리 플래트닝을 위하여 선택하도록
    동작하는 시스템.
  13. 제12항에 있어서,
    상기 확장 윈도우에 의해 생성되는 상기 러닝 카운터의 값이 상기 미리 정해진 값과 동일하지 않다는 판정에 응답하여, 상기 제어 회로는 상기 슬라이딩 윈도우에 의해 생성되는 상기 트리의 엔트리들의 집합을 트리 플래트닝을 위해 선택하도록 동작하는 시스템.
  14. 제13항에 있어서,
    상기 NVM과의 통신을 위한 버스 제어기를 더 포함하고, 상기 제어 회로는,
    상기 버스 제어기에게 상기 NVM으로부터의 엔트리들의 집합에 대응하는 데이터를 판독할 것을 지시하고;
    상기 데이터를 상기 휘발성 메모리 내에 저장하고;
    상기 버스 제어기에게 상기 데이터를 상기 NVM의 수퍼 블록에 순차적으로 프로그래밍할 것을 지시하도록
    동작하는 시스템.
  15. 비휘발성 메모리(NVM)에 액세스하기 위한 메모리 인터페이스로서,
    제어 회로
    를 포함하며, 상기 제어 회로는,
    휘발성 메모리 내에 저장된 트리에 대해 현재 이용가능한 메모리의 양이 미리 정해진 임계 미만임을 검출하고;
    슬라이딩 윈도우에 들어맞는, 트리의 제1의 복수의 엔트리를 검출하고;
    우선순위 큐(priority queue) 내의 현재 상태에 따라 상기 제1의 복수의 엔트리에 관련된 매개변수들을 상기 우선순위 큐 내에 삽입하고;
    상기 슬라이딩 윈도우를 상기 트리 내에서 상기 우선순위 큐의 현재 상태에 적어도 부분적으로 기초하는 엔트리들의 개수만큼 전방으로 이동시키도록
    동작하는 메모리 인터페이스.
  16. 제15항에 있어서,
    상기 제어 회로는,
    상기 슬라이딩 윈도우가 상기 트리를 가로질러 이동하는 것을 완료하였음을 검출하고;
    상기 우선순위 큐를 이용하여 엔트리들의 최적 집합을 찾아내도록 동작하고,
    상기 엔트리들의 최적 집합은 상기 제1의 복수의 엔트리 내의 엔트리들의 개수와 동일한 스팬을 가지는 메모리 인터페이스.
  17. 제15항 또는 제16항에 있어서,
    상기 제어 회로는,
    상기 우선순위 큐가 가득 차 있는지를 판정하고;
    상기 우선순위 큐가 가득 차 있지 않다는 판정에 응답하여, 상기 제1의 복수의 엔트리에 관련된 매개변수들을 상기 우선순위 큐 내에 삽입하고;
    상기 슬라이딩 윈도우를 상기 트리 내에서 하나의 엔트리만큼 전방으로 이동시키도록
    더 동작하는 메모리 인터페이스.
  18. 제17항에 있어서,
    상기 우선순위 큐가 가득 차 있다는 판정에 응답하여, 상기 제어 회로는,
    상기 제1의 복수의 엔트리에 관련된 매개변수들이 삽입가능한지를 판정하고;
    상기 매개변수들이 삽입가능하다는 판정에 응답하여, 상기 매개변수들을 상기 우선순위 큐 내에 삽입하고;
    상기 슬라이딩 윈도우를 상기 트리 내에서 상기 제1의 복수의 엔트리 내의 엔트리들의 개수와 동일한 수의 엔트리만큼 전방으로 이동시키도록
    더 동작하는 메모리 인터페이스.
  19. 제18항에 있어서,
    상기 제어 회로는 상기 우선순위 큐의 끝에 있는 요소를 밀어내도록(displace) 더 동작하는 메모리 인터페이스.
  20. 제18항에 있어서,
    상기 매개변수들이 삽입가능하지 않다는 판정에 응답하여, 상기 제어 회로는 상기 슬라이딩 윈도우를 상기 트리 내에서 하나의 엔트리만큼 전방으로 이동시키도록 동작하는 메모리 인터페이스.
  21. 제15항 또는 제16항에 있어서,
    상기 우선순위 큐는 순서화된 목록(ordered list)이고, 낮은 우선순위 번호를 갖는 요소들이 상기 목록의 앞으로 이동하고, 높은 우선순위 번호를 갖는 요소들이 상기 목록의 끝으로 이동하는 메모리 인터페이스.
  22. 제15항 또는 제16항에 있어서,
    상기 제어 회로는,
    추가의 슬라이딩 윈도우에 들어맞는, 상기 트리의 제2의 복수의 엔트리를 검출하고;
    적어도 2개의 우선순위 큐의 현재 상태에 따라, 상기 제1의 복수의 엔트리에 관련된 매개변수들 및 상기 제2의 복수의 엔트리에 관련된 매개변수들을 상기 적어도 2개의 우선순위 큐에 삽입하도록 동작하고,
    상기 적어도 2개의 우선순위 큐 각각은 상기 슬라이딩 윈도우 및 상기 추가의 슬라이딩 윈도우 중 하나에 관련되는 메모리 인터페이스.
  23. 제15항 또는 제16항에 있어서,
    상기 제어 회로는,
    상기 우선순위 큐에 기초하여, 엔트리들의 최적 집합이 검출되었는지를 판정하고 - 상기 엔트리들의 최적 집합은 상기 제1의 복수의 엔트리 내의 엔트리들의 개수와 동일한 스팬을 가짐 -;
    엔트리들의 최적 집합이 검출되었다는 판정에 응답하여, 상기 슬라이딩 윈도우에 의해 포함되는 엔트리들의 개수를 확장하여 확장 슬라이딩 윈도우를 생성하고;
    상기 확장 슬라이딩 윈도우를 상기 트리에 적용하도록
    동작하는 메모리 인터페이스.
KR1020120102593A 2011-09-16 2012-09-17 비휘발성 메모리를 갖는 시스템을 위한 고속 트리 플래트닝 KR101428189B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/234,954 US8924632B2 (en) 2011-09-16 2011-09-16 Faster tree flattening for a system having non-volatile memory
US13/234,954 2011-09-16

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020120134217A Division KR101865959B1 (ko) 2011-09-16 2012-11-26 비휘발성 메모리를 갖는 시스템을 위한 고속 트리 플래트닝

Publications (2)

Publication Number Publication Date
KR20130030238A KR20130030238A (ko) 2013-03-26
KR101428189B1 true KR101428189B1 (ko) 2014-08-07

Family

ID=47002646

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020120102593A KR101428189B1 (ko) 2011-09-16 2012-09-17 비휘발성 메모리를 갖는 시스템을 위한 고속 트리 플래트닝
KR1020120134217A KR101865959B1 (ko) 2011-09-16 2012-11-26 비휘발성 메모리를 갖는 시스템을 위한 고속 트리 플래트닝

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020120134217A KR101865959B1 (ko) 2011-09-16 2012-11-26 비휘발성 메모리를 갖는 시스템을 위한 고속 트리 플래트닝

Country Status (7)

Country Link
US (1) US8924632B2 (ko)
EP (1) EP2570914A3 (ko)
JP (1) JP5709814B2 (ko)
KR (2) KR101428189B1 (ko)
CN (1) CN102999429B (ko)
TW (2) TWI567553B (ko)
WO (1) WO2013040538A1 (ko)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8838882B1 (en) * 2012-03-19 2014-09-16 Google Inc. Multi-level promotion caching
CN103117922B (zh) * 2013-02-20 2014-06-11 浪潮电子信息产业股份有限公司 一种双重滑动窗口实现报文查找的方法
CN104065906B (zh) * 2014-07-09 2017-02-15 珠海全志科技股份有限公司 数字录像设备的录像方法及装置
CN107408074B (zh) * 2015-02-10 2021-07-27 净睿存储股份有限公司 存储系统架构
CN106294189B (zh) * 2015-05-25 2020-09-25 中兴通讯股份有限公司 内存碎片整理方法及装置
US20190012259A1 (en) * 2017-07-06 2019-01-10 Futurewei Technologies, Inc. Lba eviction in pcm media
KR102619954B1 (ko) * 2018-03-29 2024-01-02 삼성전자주식회사 데이터를 처리하기 위한 방법 및 이를 지원하는 전자 장치
US10592427B2 (en) * 2018-08-02 2020-03-17 Micron Technology, Inc. Logical to physical table fragments
CN110442531B (zh) * 2019-08-08 2021-10-26 深圳忆联信息系统有限公司 基于固态硬盘的读性能提升方法、装置和计算机设备
JP7048650B2 (ja) * 2020-02-04 2022-04-05 キオクシア株式会社 メモリ装置及び方法
US20220075830A1 (en) * 2020-09-10 2022-03-10 EMC IP Holding Company LLC Resumable ordered recursive traversal of an unordered directory tree
CN112115126A (zh) * 2020-09-29 2020-12-22 北京人大金仓信息技术股份有限公司 集合数据类型的处理方法、装置和数据库管理系统
CN114281248B (zh) * 2021-11-29 2022-12-09 深圳三地一芯电子有限责任公司 一种提升ram读写性能的方法、电子设备及介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070268754A1 (en) 2000-01-06 2007-11-22 Super Talent Electronics Inc. Recycling Partially-Stale Flash Blocks Using a Sliding Window for Multi-Level-Cell (MLC) Flash Memory
EP2282266A1 (en) * 2009-07-24 2011-02-09 Apple Inc. Index cache tree

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5247634A (en) 1990-03-20 1993-09-21 Hewlett-Packard Company Method of managing memory allocation by association of memory blocks with a tree structure
US5604902A (en) 1995-02-16 1997-02-18 Hewlett-Packard Company Hole plugging garbage collection for a data storage system
US7035989B1 (en) 2000-02-16 2006-04-25 Sun Microsystems, Inc. Adaptive memory allocation
JP3694501B2 (ja) * 2002-10-30 2005-09-14 松下電器産業株式会社 記憶装置
US7272698B2 (en) 2003-03-19 2007-09-18 Autodesk, Inc. Heap memory management
US8203972B2 (en) 2004-06-30 2012-06-19 Sap Ag Method and system for compressing a tree
US7461209B2 (en) * 2005-12-06 2008-12-02 International Business Machines Corporation Transient cache storage with discard function for disposable data
US7929646B2 (en) * 2006-01-27 2011-04-19 Qualcomm Incorporated Map decoder with bidirectional sliding window architecture
US7822941B2 (en) 2006-06-05 2010-10-26 Oracle America, Inc. Function-based virtual-to-physical address translation
US8484651B2 (en) 2007-05-04 2013-07-09 Avaya Inc. Distributed priority queue that maintains item locality
KR100922389B1 (ko) 2007-07-04 2009-10-19 삼성전자주식회사 플래시 메모리를 위한 색인 스킴
KR101447188B1 (ko) * 2007-07-31 2014-10-08 삼성전자주식회사 플래시 메모리에 최적화된 입출력 제어 방법 및 장치
US8095724B2 (en) 2008-02-05 2012-01-10 Skymedi Corporation Method of wear leveling for non-volatile memory and apparatus using via shifting windows
TWI499906B (zh) * 2008-12-08 2015-09-11 Apacer Technology Inc Memory reorganization method of storage device, computer storage medium, computer program product, reorganization method
KR20100091544A (ko) * 2009-02-10 2010-08-19 삼성전자주식회사 메모리 시스템 및 그 마모도 관리 방법
US8468293B2 (en) 2009-07-24 2013-06-18 Apple Inc. Restore index page
US8688894B2 (en) 2009-09-03 2014-04-01 Pioneer Chip Technology Ltd. Page based management of flash storage

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070268754A1 (en) 2000-01-06 2007-11-22 Super Talent Electronics Inc. Recycling Partially-Stale Flash Blocks Using a Sliding Window for Multi-Level-Cell (MLC) Flash Memory
EP2282266A1 (en) * 2009-07-24 2011-02-09 Apple Inc. Index cache tree

Also Published As

Publication number Publication date
JP2013065310A (ja) 2013-04-11
TWI608351B (zh) 2017-12-11
CN102999429A (zh) 2013-03-27
EP2570914A3 (en) 2014-07-16
US20130073787A1 (en) 2013-03-21
TWI567553B (zh) 2017-01-21
KR20130030238A (ko) 2013-03-26
TW201329715A (zh) 2013-07-16
JP5709814B2 (ja) 2015-04-30
WO2013040538A1 (en) 2013-03-21
US8924632B2 (en) 2014-12-30
CN102999429B (zh) 2016-07-06
EP2570914A2 (en) 2013-03-20
TW201324149A (zh) 2013-06-16
KR101865959B1 (ko) 2018-06-08
KR20130030243A (ko) 2013-03-26

Similar Documents

Publication Publication Date Title
KR101428189B1 (ko) 비휘발성 메모리를 갖는 시스템을 위한 고속 트리 플래트닝
US9477596B2 (en) LBA bitmap usage
KR101818578B1 (ko) 비휘발성 메모리를 갖는 시스템을 위한 동적 및 정적 데이터의 처리
US9841917B2 (en) Systems and methods for configuring non-volatile memory
US9367451B2 (en) Storage device management device and method for managing storage device
KR101484816B1 (ko) 비휘발성 메모리 시스템 내의 미사용 논리 어드레스들의 마운트 시간 맵핑 해제
US20130219106A1 (en) Trim token journaling
KR20150142583A (ko) 플래시 저장 장치의 어드레스 매핑 테이블 정리 방법
CN106557428A (zh) 数据存储设备的映射系统选择
US9880930B2 (en) Method for operating controller and method for operating device including the same
US20120198126A1 (en) Methods and systems for performing selective block switching to perform read operations in a non-volatile memory

Legal Events

Date Code Title Description
A201 Request for examination
A107 Divisional application of patent
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: 20170704

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20180628

Year of fee payment: 5