KR101257990B1 - 인덱스 캐시 트리 - Google Patents

인덱스 캐시 트리 Download PDF

Info

Publication number
KR101257990B1
KR101257990B1 KR1020100071639A KR20100071639A KR101257990B1 KR 101257990 B1 KR101257990 B1 KR 101257990B1 KR 1020100071639 A KR1020100071639 A KR 1020100071639A KR 20100071639 A KR20100071639 A KR 20100071639A KR 101257990 B1 KR101257990 B1 KR 101257990B1
Authority
KR
South Korea
Prior art keywords
logical address
entry
entries
node
address
Prior art date
Application number
KR1020100071639A
Other languages
English (en)
Other versions
KR20110010583A (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 KR20110010583A publication Critical patent/KR20110010583A/ko
Application granted granted Critical
Publication of KR101257990B1 publication Critical patent/KR101257990B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Memory System (AREA)

Abstract

논리 섹터가 휘발성 및 비휘발성 메모리내의 데이터 구조를 이용하여 물리적 페이지로 매핑되는 비휘발성 메모리에 대한 메모리 매핑 기술이 개시된다. 몇몇 구현예에서, 비휘발성 메모리내의 제1 룩업 테이블은 논리 섹터를 직접 물리적 페이지로 매핑한다. 휘발성 메모리내의 제2 룩업 테이블은 비휘발성 메모리내의 제1 룩업 테이블의 위치를 유지한다. 휘발성 메모리내의 인덱스 캐시 트리는 압축 포맷으로 가장 최근에 기입 또는 액세스된 논리 섹터의 물리적 주소를 유지한다.

Description

인덱스 캐시 트리{INDEX CACHE TREE}
[관련 출원의 상호 참조]
본 출원은 2009년 7월 24일 출원된 미국 출원 제12/509,267호를 우선권 주장을 한다.
본 발명은 일반적으로 메모리 매핑에 관한 것이다.
플래시 메모리는 EEPROM(electrically erasable programmable read-only memory)의 한 유형이다. 플래시 메모리들은 비휘발성이고, 비교적 고밀도이기 때문에, 이들은 헨드헬드 컴퓨터, 이동 전화, 디지털 카메라, 휴대용 음악 플레이어(portable music player), 및 다른 저장 솔루션(예컨대, 자기 디스크)이 적절하지 않은 다수의 여러 장치들에서 파일 및 다른 지속적인 오브젝트를 저장하는데 이용된다. 불행하게도, 플래시는 2가지 제한을 받고 있다. 첫째로, 비트들은 메모리의 큰 블록을 소거함으로써만 클리어될 수 있다. 둘째로, 각각의 블록은, 한정된 수의 소거(erasure)만을 견딜 수 있고, 그 후에는 더 이상 안정적으로 데이터를 저장할 수 없게 된다. 이러한 제한들로 인해, 복잡한 데이터 구조 및 알고리즘이 종종 플래시 메모리들을 효과적으로 이용하는 데에 요구된다. 이들 알고리즘 및 데이터 구조는 데이터의 효율적인 제자리 아닌 갱신(not-in-place update)들을 지원하고, 소거의 횟수를 감소시키고, 장치내의 블록의 마모(wear)를 고르게 하는데 이용된다.
플래시 메모리들은 페이지를 포함하는 블록이 먼저 삭제되지 않는 한, 제자리(in-place) 갱신을 지원하지 않거나 또는 물리적 메모리 페이지에 재기입한다. 이러한 결함을 극복하기 위해 하드웨어 및/또는 소프트웨어 계층이 종종 플래시 서브시스템에 부가된다. 종종 FTL(flash translation layer)으로 명칭되는 이러한 계층은 플래시 메모리와 함께, 논리 섹터를 물리적 메모리 페이지로 매핑하여 보조 저장 장치를 모방할 수 있다. 다수의 플래시 기반 장치에 대해, FTL은 하드웨어내의 컨트롤러로 구현된다. 컨트롤러는 작은 용량의 휘발성 메모리(예컨대, RAM)와 함께 프로세서 또는 마이크로컨트롤러를 포함할 수 있다. 컨트롤러는 파일 시스템(예컨대, 논리 섹터)으로부터의 판독/기입 요청을 플래시의 특정 블록상의 판독/기입 동작으로 변환하는 책임을 질 수 있다.
물리적 메모리 페이지들에 액세스하기 위해, 컨트롤러는 논리 섹터들의 물리적 메모리 페이지들로의 매핑을 리졸브(resolve)하고자 시도할 수 있다.
논리 섹터들이 휘발성 및 비휘발성 메모리내의 데이터 구조를 이용하여 물리적 페이지들로 매핑되는 비휘발성 메모리에 대한 메모리 매핑 기술이 개시된다. 몇몇 구현예에서, 비휘발성 메모리내의 제1 룩업 테이블은 논리 섹터를 직접 물리적 페이지로 매핑한다. 휘발성 메모리내의 제2 룩업 테이블은 비휘발성 메모리내의 제1 룩업 테이블의 위치를 홀드(hold)한다. 휘발성 메모리내의 인덱스 캐시 트리는 가장 최근에 기입 또는 액세스된 논리 섹터들의 물리적 주소들을 압축 포맷으로 홀드한다.
개시된 메모리 매핑 기술은 종래의 플래시 메모리 블록 매핑 기술에 비해 몇몇 장점을 제공한다. 이들 몇몇 장점은, 1) 논리 섹터들을 물리적 페이지들로 직접 매핑하여 블록 매핑의 필요성을 제거하는 것, 2) 현재의 블록내의 모든 페이지가 할당될 때까지 새로운 블록을 할당할 필요성을 제거하는 것, 3) 상이한 논리 영역들에 대해 상이한 저널링(journaling) 블록들을 할당할 필요성을 제거하는 것, 및 4) 현재의 블록 내의 모든 페이지가 할당될 때까지 폐영역 회수 동작(garbage collection operation)을 트리거링할 필요성을 제거하는 것을 포함하지만, 이에 국한되는 것은 아니다. 휘발성 메모리에서 개시된 인덱스 캐시 트리 데이터 구조를 이용하는 것과 관련된 부가적인 장점들은, 1) 휘발성 메모리 내에서 물리적 주소들로 매핑된 논리 섹터들의 수를 증가시키는 것, 및 2) 컨트롤러가 논리 섹터를 물리적 주소로 리졸브하는데 걸리는 평균 시간을 감소시키는 것을 포함하지만, 이에 국한되는 것은 아니다.
도 1a는 룩업 테이블 및 인덱스 캐시 트리를 이용하여 논리 섹터를 물리적 페이지로 매핑하는 예시적인 메모리 매핑 아키텍처를 도시하는 블록도.
도 1b - 1c는 예시적인 인덱스 캐시 트리를 이용하여 논리 섹터를 직접 물리적 데이터 페이지로 매핑하는 예를 도해하는 블록도.
도 2a - 2b는 도 1a - 1c에 도시된 메모리 매핑 아키텍처를 이용하는 예시적인 판독 동작의 흐름도.
도 3a - 3b는 도 1a - 1c의 메모리 매핑 아키텍처를 이용하여 인덱스 캐시 트리내에서 엔트리를 위치시키기 위한 예시적인 동작의 흐름도.
도 4는 도 1a - 1c의 메모리 매핑 아키텍처를 이용하여 엔트리를 인덱스 캐시 트리에 부가하기 위한 예시적인 동작의 흐름도.
도 5a는 도 1-4의 메모리 아키텍처 및 동작을 구현하기 위한 예시적인 메모리 서브시스템의 블록도.
도 5b는 도 1-4의 메모리 아키텍처 및 동작을 구현하기 위한 메모리 서브시스템을 포함하는 예시적인 장치의 시스템 아키텍처를 도해하는 블록도.
시스템 개관
도 1a는 룩업 테이블 및 인덱스 캐시 트리를 이용하여 논리 섹터들을 물리적 페이지들로 매핑하는 예시적인 메모리 매핑 아키텍처(100)를 도해하는 블록도이다. 몇몇 구현예에서, 휘발성 메모리(예컨대, RAM) 내의 룩업 테이블(102)은 비휘발성 메모리(예컨대, 플래시 메모리) 내의 룩업 테이블(106)의 위치(예컨대, 물리적 주소)를 홀드(hold)한다. 룩업 테이블(106)은 데이터 페이지(108)의 물리적 주소를 홀드한다. 몇몇 구현예에서, 휘발성 메모리내의 캐시(104)는 더 빠른 판독을 허용하기 위해 최근에 기입, 판독 또는 액세스된 논리 섹터의 물리적 주소를 유지한다. 도시된 예에서, 룩업 테이블(102)은 인덱스 TOC(102)로도 명칭되고, 룩업 테이블(106)은 인덱스 테이블(106) 또는 인덱스 페이지로도 명칭되고, 캐시(104)는 인덱스 테이블 캐시(104)로도 명칭된다.
아키텍처(100)에서, 인덱스 TOC(102) 및 인덱스 테이블 캐시(104)는 인덱스 테이블(106)의 적어도 일부가 비휘발성 메모리에 저장되도록 한다. 이것은, 컨트롤러 내에서 전형적으로 이용가능한 RAM의 작은 양이 컨트롤러의 비용, 면적, 및 전력 소비의 증가로 인해 그 크기가 조정될 수 없기 때문에 장점이 있다. 몇몇 구현예에서, 휘발성 메모리는 그 가용성 또는 다른 트리거 이벤트 및/또는 동작 모드에 기초하여 동적으로 구성될 수 있다.
인덱스 캐시 테이블(104)에서 이용되는 데이터 구조
예시적인 아키텍처(100)에서 도시된 바와 같이, 인덱스 캐시 테이블(104)은 인덱스 캐시 트리 데이터 구조(110)를 포함한다. 도시된 예에서, 인덱스 캐시 트리 데이터 구조(110)는 인덱스 캐시 트리(110)로도 명칭된다.
인덱스 캐시 트리(110)는, 인덱스 테이블 캐시(104)내의 엔트리들에 대한 검색 시간을 감소시키기 위해 트리 구조(예컨대, a b-트리, a b*-트리 등)를 이용한다. 인덱스 테이블 캐시(104) 내에 포함된 엔트리들의 효율적인 검색(예컨대, 이진 검색 등)을 가능하게 하는 데이터 구조를 이용함으로써, 원하는 논리적 대 물리적 주소 매핑이 인덱스 테이블 캐시(104) 내에 포함되는지의 여부를 판정할 때 증가된 속도가 얻어질 수 있다. 논리적 대 물리적 주소 매핑이 인덱스 테이블 캐시(104) 내에 포함되는지의 여부에 대한 판정이 더 빨리 수행될수록, 아키텍처(100)를 이용하는 플래시 메모리 장치는 식별된 물리적 메모리의 검색을 개시하기 위해 매핑을 더 빨리 이용할 수 있다. 이것은, 플래시 메모리 장치가, 논리적 대 물리적 주소 매핑에 대한 리졸브를 시도할 때, 빈번하게 (예컨대, 판독 동작 동안) 인덱스 테이블 캐시(104)를 컨설팅(consult)할 수 있기 때문에 장점이 있다.
인덱스 캐시 트리(110)는 또한 인덱스 캐시 테이블(104)의 저장 용량을 증가시키기 위해 데이터 압축을 이용할 수 있다. 논리적 대 물리적 주소 매핑을 저장하기 위한 인덱스 테이블 캐시(104)의 용량을 증가시킴으로써, 아키텍처(100)를 이용하는 플래시 메모리 장치는 인덱스 캐시 테이블(104) 내에서 원하는 매핑을 더 자주 로케이팅할 수 있고, 비휘발성 메모리 내에서 인덱스 테이블(106)로부터의 원하는 매핑의 검색을 덜 자주 개시할 수 있다. 이것은, 휘발성 메모리 내에서 인덱스 테이블 캐시(104)로부터의 검색이 일반적으로 비휘발성 메모리 내의 인덱스 테이블(106)로부터의 검색보다 더 빠르기 때문에 장점이 있다.
예시적인 인덱스 캐시 트리들
도 1b는 예시적인 인덱스 캐시 트리(118)를 이용하여 논리 섹터들을 직접 물리적 데이터 페이지들(119)로 매핑하는 예를 도해하는 블록도이다. 도 1a와 관련하여 전술한 바와 같이, 인덱스 캐시 트리(118)는 인덱스 캐시 트리(110)와 유사하고, 데이터 페이지(119)는 데이터 페이지(108)와 유사하다. 도시된 예에서, 인덱스 캐시 트리(118)는 데이터 압축의 2개의 레벨을 이용하는 트리 구조를 갖는다. 데이터 압축의 제1 레벨은 런-길이(run-length) 인코딩에 대응하고, 데이터 압축의 제2 레벨은 트리 내의 각 엔트리에 대한 크기를 지정하는 플래그에 대응한다. 엔트리 크기는 런-길이 인코딩 스팬(span)에 할당된 비트들의 수에 대응할 수 있다. 런-길이 인코딩 스팬이 그 크기가 증가함에 따라, 런-길이 인코딩 스팬에 할당된 비트들의 수도 증가할 수 있다. 예컨대, 100개의 논리 주소의 스팬이 100,000개의 논리 주소의 스팬보다 더 작은 수의 런-길이 인코딩 비트를 할당받을 수 있다. 플래그는 고정된 수의 미리 정해진 크기 중 어느 것이 각 엔트리에 대응하는지를 나타낼 수 있다. 예컨대, 장치가 일반적으로 작은 파일(예컨대, 텍스트 파일, 구성 파일 등) 및 큰 파일(예컨대, 오디오 파일, 비디오 파일 등)을 저장하면, 플래그는 2개의 고정 크기(예컨대, 4 비트 및 6 비트) 중 어느 것이 각 엔트리에 대한 런-길이 인코딩을 위해 이용되는지를 나타낼 수 있다. 임의의 수의 미리 정해진 엔트리 크기(예컨대, 2개의 크기, 4개의 크기, 8개의 크기, 10개의 크기 등)가 트리 내에서 이용될 수 있고, 플래그에 의해 표시될 수 있다. 몇몇 구현예에서, 물리적 주소 및/또는 포인터 필드를 저장하기 위한 가변-크기 엔트리도 이용될 수 있다.
이러한 도시된 예에서, 데이터 파일 A-E 120a-e가 논리 주소에 대응하는 것으로 도시된다. 예컨대, 데이터 파일 B 120b는 주소(300)에 대응하는 것으로 도시된다. 각각의 데이터 파일 A-E 120a-e의 크기는 데이터 파일 A-E 120a-e의 좌측에 넘버링된(numbered) 스팬들에 의해 도시된다. 예컨대, 데이터 파일 D 120d는 400개의 논리 주소 스팬을 갖는다.
데이터 파일 A-E 120a-e는, 물리적 데이터 파일 A-E 122a-e에 의해 도시된 바와 같이, 데이터 페이지(119) 내의 물리적 위치에 대응한다. 이러한 물리적 데이터 파일 A-E 122a-e의 각각은 대응하는 물리적 주소 P0-P4를 갖는다. 예컨대, 물리적 데이터 파일 A 122a는 물리적 주소 P2를 갖는다.
인덱스 캐시 트리(118)는 논리 주소를 노드(124, 128, 132 및 136)의 트리를 이용하여 물리적 주소로 매핑한다. 노드(124, 128, 132 및 136)의 각각은 엔트리 126a-c, 130a-b, 134a-b, 및 138a 중 적어도 하나를 포함한다. 엔트리들은, 데이터 파일 A-E 120a-e의 각각에 대한 논리 주소 스팬, 및 다른 노드에 대한 포인터 또는 대응하는 물리적 데이터 파일 A-E 122a-e에 대한 물리적 주소 중 하나로 파퓰레이팅(populate)된다. 예컨대, 데이터 파일 A 120a에 대응하는 엔트리(130a)는 논리 주소 스팬(300) 및 물리적 데이터 파일 A 122a의 물리적 주소 P2를 포함한다.
노드(124, 128, 132 및 136) 및 엔트리(126a-c, 130a-b, 134a-b 및 138a)는 각 엔트리에 대한 논리 주소 오프셋에 따라 구성된다. 논리 주소 오프셋은 엔트리의 논리 주소와 제1 논리 주소 간의 차이가 될 수 있다. 본 예에서, 논리 주소 오프셋은 제1 논리 주소가 0이기 때문에 논리 주소 자신과 동일하다. 그러나, 제1 논리 주소가 100이 되면(예컨대, 파일 A 120a에 대한 논리 주소가 100), 이후 논리적 오프셋은 논리 주소에서 100을 뺀 것[예컨대, 파일 B 120b에 대해 논리적 오프셋은 200(300-100=200)]이 된다.
본 예에서, 노드(124, 128, 132 및 136) 및 엔트리(126a-c, 130a-b, 134a-b 및 138a)는 가장 작은 논리 주소 오프셋으로부터 가장 큰 논리 주소 오프셋으로 좌에서 우로 배열된다. 예컨대, 엔트리(130a)는 데이터 파일 A 120a(논리 주소 0을 가짐)에 대응하고 엔트리(130b)는 데이터 파일 B 120b(논리 주소 300을 가짐)에 대응하기 때문에, 엔트리(130a)는 엔트리(130b)의 좌측으로 배열된다.
다른 노드에 대한 포인터(예컨대, 엔트리 126a-c)를 포함하는 엔트리들은 노드에 대해 포인팅된 것(및 자식 노드들에 대해 포인팅된 것) 내에 포함된 엔트리들에 대해 주합(aggregate) 논리 주소 스팬을 저장할 수 있다. 예컨대, 엔트리(126a)는 340개의 논리 주소 스팬을 갖고, 이것은 130a-b에 대한 논리 주소 스팬의 주합 값(300+40 = 340)이다.
데이터 파일에 대한 물리적 주소를 로케이팅(locating)하기 위해 데이터 파일(가령, 데이터 파일 A-E(120a-e))의 논리 주소 오프셋이 이용될 수 있다. 대응 물리적 주소를 포함하는 인덱스 캐시 트리(118) 내의 엔트리를 식별하기 위해, 노드들(124, 128, 132, 136)이 트래버스(traverse)됨에 따라 엔트리들(126a-c, 130a-b, 134a-b, 138a)에 저장된 논리 주소 스팬들이 주합된다(aggregated). 인덱스 캐시 트리(118)의 엔트리들은 개별적으로 검사되기 때문에, 주합된 값[가령, 득점(tally)]는 현재 평가되고 있는 엔트리에 대한 논리 주소 오프셋으로서 역할을 한다. 득점은 0에서 초기화되고 인덱스 캐시 트리(118)의 운행법(traversal)은 루트 노드(124)의 제1 엔트리(126a)(가령, 최소 논리 주소 오프셋을 갖는 엔트리)에서 시작할 수 있다. 만약 이슈가 되는 논리 주소 오프셋(가령, 물리적 주소가 그에 대해 구해지는 논리 주소)이 평가되는 엔트리의 논리 주소 스팬에 득점을 더한 값과 같거나 크다면, 엔트리의 논리 주소 스팬은 득점에 부가되고 노드의 다음 엔트리가 평가된다.
만약 논리 주소 오프셋이 평가되는 엔트리의 논리 주소 스팬에 득점을 더한 값보다 작다면, 평가되는 엔트리는 발행시의 논리 주소 오프셋에 대응한다. 그러한 경우, 만약 평가되는 엔트리가 다른 노드에 대한 포인터를 저장하고 있다면, 평가는 노드에 포인팅된 것의 제1 엔트리로 이동한다. 만약 평가되는 엔트리가 물리적 주소를 저장하고 있다면, 대응하는 물리적 주소가 로케이팅되었기 때문에 평가가 종료될 수 있다.
예를 들어, 만약 데이터 파일 D(120d)에 대한 물리적 주소가 검색된 경우, 다음 단계들이 취해질 것이다.
단계 1: 데이터 파일 D(120d)에 대한 논리 주소 오프셋(논리 주소 오프셋=400)을 수신하고 득점=0으로 초기화함
단계 2: 엔트리(126a)의 논리 주소 스팬(340)+득점(0)≤논리 주소 오프셋(400)? 그렇다면, 엔트리(126a)의 논리 주소 스팬을 득점에 가산(340=0+340)
단계 3: 엔트리(126b)의 논리 주소 스팬(460)+득점(340)≤논리 주소 오프셋(400)? 그렇지 않다면, 노드(132)에 대한 엔트리(126b)의 포인터를 따름
단계 4: 엔트리(134a)(60)의 논리 주소 스팬(60)+득점(340)≤논리 주소 오프셋(400)? 그렇다면, 엔트리(134a)의 논리 주소 스팬을 득점에 가산(400=340+60)
단계 5: 엔트리(134b)의 논리 주소 스팬(400)+득점(400)≤논리 주소 오프셋(400)? 그렇지 않다면, 엔트리(134b)에 저장된 물리적 주소(P1) - 로케이팅된 대응 물리적 주소 - 를 검색
논리 주소 자체 대신에 논리 주소 스팬을 저장함으로써, 인덱스 캐시 트리(118) 내의 각 엔트리가 압축된다. 논리 주소 스팬은 일반적으로 논리 주소 크기의 분수만큼의 크기를 가질 것이며, 몇 비트가 할당되게 해준다. 그처럼, 인덱스 테이블 캐시(104)는 인덱스 캐시 트리(118)를 이용하여 많은 수의 엔트리를 저장할 수 있게 하는데, 이는 다음으로 메모리 액세스들이 처리되는 속도를 개선하고 플래시 메모리 내의 효율성을 더 크게 할 수 있다.
논리 주소 스팬을 이용하는 것에 관한 상기 내용은 인덱스 캐시 트리(118) 내의 제1 레벨의 데이터 압축에 대응한다. 제2 레벨의 데이터 압축은 엔트리에 대한 길이 유형을 나타내는 각 엔트리 내에 포함된 플래그와 관련된다. 예시적인 인덱스 캐시 트리(118)에서, 플래그(각 엔트리의 상부 우측 모서리 내의 박스로 표시됨)는, 엔트리가 짧은 엔트리(가령, 1 바이트, 2 바이트, 4 바이트, 6 바이트 등) 또는 긴 엔트리(가령, 2 바이트, 4 바이트, 6 바이트, 8 바이트, 10 바이트, 16 바이트, 32 바이트 등)인지를 나타낸다. "X"를 갖는 엔트리들[엔트리들(126a-c, 130a, 134b, 138a)]은 긴 엔트리들로서 지정된다. 점선(dashed line)은 긴 엔트리들에 대한 부가적 비트 길이를 나타내기 위해 의도된 것이다. 상기 예는 설명을 위해 제공된다. 임의의 수의 엔트리 길이들(가령, 2, 4, 6, 8, 16 등)이 사용될 수 있다. 엔트리 길이들의 수는 2개의 엔트리 길이(짧은 엔트리 및 긴 엔트리)에 국한되는 것은 아니다.
엔트리에 대한 길이 유형은 다양한 요소들, 예를 들어, 논리 주소 스팬에 대한 비트 길이, 및/또는 엔트리가 포인터 또는 물리적 주소를 저장하는지에 근거할 수 있다. 본 예에서, 엔트리가 짧은 엔트리인지 긴 엔트리인지에 관한 판정은 논리 주소 스팬의 길이에 대응한다. 설명을 위해, 3 디지트 논리 주소 스팬을 저장하는 엔트리들[가령, 엔트리(130a)의 논리 주소 스팬 300]은 "X"에 의해 긴 것으로서 지정되고, 2 디지트 논리 주소 스팬[가령, 엔트리(130b)의 논리 주소 스팬 40]은 빈 박스에 의해 짧은 것으로서 지정된다.
또한, 각 길이 유형에 대한 비트들의 수 및 길이 유형들의 수(가령, 2개의 유형 - 짧은 것 및 긴 것; 4개의 유형 - 짧은 것, 중간-짧은 것, 중간-긴 것, 긴 것)는 다양한 요소에 의존하여 변할 수 있다. 그러한 요소들은, 플래시 메모리 장치[가령, 휴대용 미디어 플레이어, 썸 드라이브(thumb drive), 스마트 폰, 내장형 장치 등]를 위해 의도된 이용, 장치에 대한 이용 통계(가령, 가장 빈번히 액세스된 파일 유형, 공유 파일 길이들 등), 인덱스 캐시 트리(118)에 대한 인덱스 테이블 캐시(104)의 이용가능한 공간 등을 포함한다. 예를 들어, 컨택트 정보, 이메일들, 텍스트 메시지들 및 미디어 파일들을 저장하는 스마트 폰은 이런 4개의 공유 파일 유형에 맞추어진 4개의 길이 유형을 가지도록 구성된다.
각 길이 유형에 대한 비트들의 수 및/또는 길이 유형들의 수는 또한 장치의 수명에 걸쳐서 추가적으로 바뀔 수 있다. 예를 들어, 전력 공급시 장치는 장치에 대한 이용 통계를 평가하여 현재 스킴에 대한 조정이 이루어져야 하는지를 판정할 수 있다.
인덱스 캐시 트리(118) 내의 엔트리들에 대한 플래그 표시된 길이 유형들의 이용은, 인덱스 테이블 캐시(104)가 비휘발성 메모리로부터 인덱스 테이블(106)의 더 많은 것을 저장할 수 있게 해 주는 부가적인 압축 레벨을 제공한다. 앞서 명기한 바와 같이, 인덱스 테이블 캐시(104) 내에 저장되는 엔트리들이 많으면 많을수록, 플래시 메모리 장치는 물리적 주소를 평균적으로 더 빨리 얻을 수 있을 것이다. 또한, 비트 이용 효율이 증가될 것이다. 예를 들어, 길이를 나타내는 플래그를 이용함으로써, 미사용 비트들의 발생이 최소 수의 비트들이 각 엔트리의 길이를 식별하기 위해 전용됨에 따라 최소화될 것이다(가령, 긴 엔트리와 연관된 여분의 비트들은 필요시에만 할당됨).
도 1c는 예시적 인덱스 캐시 트리(148)를 이용하여 논리 섹터들을 물리 데이터 페이지들(149)로 직접 매핑하는 다른 예를 도시하는 블록도이다. 도 1a 및 도 1b에 대하여 앞서 기술한 바와 같이, 인덱스 캐시 트리(148)는 인덱스 캐시 트리들(110, 118)과 유사하고, 데이터 페이지들(149)은 데이터 페이지들(108, 119)과 유사하다. 도시된 예시적 인덱스 캐시 트리(148)는 고정 크기 노드들, 다중-계층화된 노드들, 인덱스 캐시 트리 내에 리스트되어 있지 않은 데이터 페이지들(149) 내의 파일, 인덱스 캐시 트리(148) 내의 논리 주소 오프셋 시퀀스의 갭들, 및 포인터들 및 물리적 주소들을 갖는 혼합 엔트리들을 갖는 노드들을 보여준다.
데이터 페이지들(149)은 다수의 파일들 A-ZZ(150a-h)를 포함하며, 그들 각각은 물리적 주소를 갖는다. 인덱스 캐시 트리(118)와 유사하게, 인덱스 캐시 트리(148)는 다수의 노드들(152-166)과 다수의 엔트리(152a-d, 154a-e, 156a-c, 158a-d, 160a-f, 162a-d, 164a-c 및 166a-e)를 포함한다. 예시적 인덱스 캐시 트리(148)에서, 긴 엔트리들[가령, 엔트리(152b)]은 상부 우측 모서리 내의 "X" 플래그로 식별되고 짧은 엔트리들[가령, 엔트리(152a)]은 빈 박스를 갖는다. 이 예에서, 짧은 엔트리들은 긴 엔트리들의 길이의 대략 절반(가령, 비트들 수의 절반)이 되도록 의도된다. 도 1b에 대하여 상술한 바와 같이, 임의의 짧은 엔트리 대 긴 엔트리 비(가령, 4 바이트 대 6 바이트 등)가 사용될 수 있고/있거나, 임의의 수의 엔트리 길이가 사용될 수 있다(가령, 4개의 상이한 엔트리 길이가 사용될 수 있음).
파일 150a-h 철자를 포함하는 엔트리들은 식별된 파일에 대한 물리적 주소를 저장하는 것을 나타내고자 의도된다. 비록 도시되지는 않았지만, 논리적 페이지 스팬들은, 도 1b에 대하여 전술한 논리적 페이지 스팬에 관한 기술과 유사하게, 각 엔트리 내에도 제공될 수 있다.
도시된 예시적 인덱스 캐시 트리(148)는 고정 크기 노드들을 보여주는데, 이는 각 노드가 인덱스 캐시[가령, 인덱스 테이블 캐시(104)] 내의 동일한 양의 메모리 공간에 할당되는 것을 의미한다. 도시된 예에서, 노드들(152-166) 각각은 동일한 전체 엔트리의 길이를 포함한다[가령, 노드(156)는 3개의 긴 엔트리(156a-c)를 포함하는데, 이는 이 예에서 노드(160)에 포함되는 6개의 짧은 엔트리(160a-f)와 같음]. 각 노드에 할당되는 메모리의 양은 캐시 내의 데이터 라인들의 공간(가령, 각 노드는 24 바이트, 32 바이트, 64 바이트, 128 바이트, 512 바이트, 1024 바이트 등이 할당될 수 있음), 또는 휘발성 메모리 액세스 효율성을 위한 다른 구성들에 근거할 수 있다. 각 노드에 대한 그러한 고정 메모리 할당은 효과적으로 사용되고 분할되는 캐싱 메모리(cached memory)일 수 있다.
노드들(152-166)은 다중-계층화된다(multi-tiered). 예를 들어, 노드(152)는 노드(156)에 대해 포인팅하는 엔트리(152b)를 갖는데, 이는 노드(164)에 대해 포인팅하는 노드(156c)를 다음으로 갖는다. 인덱스 캐시 트리(148)에 걸쳐서 노드들 및 엔트리들의 최적의 분배를 보장하기 위해, 다양한 노드 및 엘리먼트 밸런싱 및 리패키징 기술이 사용될 수 있다.
각 노드 내의 엔트리들은 포인터 및 물리적 주소를 저장하는 것 사이에서 혼합될 수 있다. 예를 들어, 노드(158)는 물리적 주소들을 포함하는 3개의 엔트리들(158a-b, 158d)과 포인터를 포함하는 하나의 엔트리(158c)를 포함한다.
인덱스 캐시 트리(148)는 비휘발성 메모리 내의 인덱스 테이블[가령, 인덱스 테이블(106)]에 포함되는 논리 주소 대 물리적 주소 매핑들의 모두를 표현하기에 충분한 저장 능력을 가지지 못할 수 있다. 예를 들어, 파일 D(150d)는 인덱스 캐시 트리(148) 내에 포함되지 않을 수 있다.
인덱스 캐시 트리(148)는 엔트리들에 의해 표현되는 선형 논리 주소 오프셋 내의 갭들을 포함할 수 있다. 그러한 갭들은 논리 주소 스팬을 포함하는 엔트리들에 의해 표현될 수 있지만, 포인터 또는 물리적 페이지 주소들을 포함하지 않는다(가령, 엔트리들(164b, 166c)). 그러한 예들에서, 갭은 몇몇 파일들에 대한 논리 주소 오프셋을 커버할 수 있다. 예를 들어, 엔트리(164b)는 파일 D(150d) 및 파일 F(미도시)에 대응하는 논리 주소 오프셋을 커버할 수 있다. 만약 파일 D(150d)의 논리 주소 대 물리적 주소 매핑에 대한 요청이 수신되었다면, 엔트리(164b)는, 적어도 부분적으로, 파일 D(150d)에 대응하는 엔트리로 대체될 것이다. 노드(164)의 고정 크기 성질(nature)이 주어진다면, 파일 D(150d)에 대응하는 엔트리의 삽입은 다른 엔트리 및/또는 노드의 소거를 초래할 수 있다.
비휘발성 메모리의 다른 예시적 데이터 구조
몇몇 실시예에서, 인덱스 TOC(102)의 각 엔트리는 물리적 주소를 인덱스 테이블(106) 엔트리의 비휘발성 메모리 내에 저장하고 엔트리에 대한 포인터를 인덱스 테이블 캐시(104)에 저장한다. 원하는 인덱스 테이블(106) 엔트리가 인덱스 테이블 캐시(104) 내에 저장되지 않았음을 나타내기 위해, 주소 0xff 또는 다른 적절한 표시자(indicator)가 인덱스 TOC(102) 엔트리에 배치될 수 있다.
몇몇 실시예에서, 인덱스 테이블(106)은 물리적 주소 매핑들에 논리 주소를 제공하는 플랫(flat) 파일 구조를 포함할 수 있다. 다른 실시예들에서, 인덱스 테이블(106)은, 인덱스 캐시 트리들(110, 118 및/또는 148)과 유사한, 데이터 엔트리들의 압축을 제공하는 인덱스 트리를 포함할 수 있다.
몇몇 실시예에서, 인덱스 캐시 트리(110)의 각 엔트리는 상태 데이터(가령, 클린, 더티, 프리) 및/또는 카운터(가령, 시리얼 카운터 또는 특정 블록이 몇회나 액세스되었는지를 나타내는 카운트)를 포함하는데, 이에 한정되는 것은 아니다.
상술한 데이터 구조들은 예들이며, 본 출원에 기초하여 다른 데이터 구조들이 사용될 수 있다.
예시적 판독 동작
도 2a-2b는 도 1a-1c에 도시된 메모리 매핑 아키텍처를 이용한 예시적 판독 동작(200)의 흐름도이다.
도 2a를 참조하면, 몇몇 실시예에서, 판독 동작(200)은 하나 이상의 논리 섹터(202)와 연관된 판독 요청을 취득함으로써 시작될 수 있다. 예를 들어, 판독 요청은 파일 시스템에 의해 발행될 수 있다. 판독 요청은 제1 섹터 번호 및 다수의 연속 섹터들을 포함할 수 있다. 요청(204) 내의 각 논리 섹터에 대해, 휘발성 메모리 내의 인덱스 TOC[가령, 인덱스 TOC(102)]가 검사되어(206), 현재 논리 섹터와 연관된 데이터 페이지 주소가 휘발성 메모리 내의 인덱스 캐시 트리[가령, 인덱스 캐시 트리(110, 118, 148)] 내에 저장되어 있는지를 판정한다. 만약 데이터 페이지 주소가 인덱스 캐시 트리(208) 내에 저장되어 있다면, 데이터 페이지 주소들은 인덱스 캐시 트리(210)로부터 판독되고 비휘발성 메모리(212)에서의 판독 동작을 수행하는데 사용된다.
데이터 페이지 주소가 인덱스 테이블 캐시(208) 내에 저장되어 있지 않다면, 데이터 페이지 주소들을 저장하는 관련 인덱스 테이블 엔트리의 물리적 페이지 주소가 인덱스 TOC(214)로부터 판독되고, 데이터 페이지 주소들을 저장하는 관련 인덱스 테이블 엔트리가 인덱스 테이블로부터 판독되어, 인덱스 테이블 캐시(216) 내에 저장된다. 그런 다음, 데이터 페이지 주소들은 인덱스 캐시 트리(210)로부터 판독되어 비휘발성 메모리(212)에서의 판독 동작을 수행하는데 사용될 수 있다.
많은 논리 섹터들이 처리될 필요가 있다면(204), 모든 논리 섹터들이 판독 동작(200)에 대해 처리될 때까지, 전술한 단계들이 반복된다.
몇몇 구현들에서, 단계(216) 동안에 인덱스 캐시 트리가 찼으면, 인덱스 캐스 트리에서 더 오래된 데이터 페이지 주소들이 비휘발성 메모리에서 인덱스 테이블로부터 판독된 더 새로운 데이터 페이지 주소들에 대한 공간을 확보하기 위해 플러싱(flush)될 수 있다. 인덱스 캐시 트리의 플러싱은 비휘발성 메모리 상의 불필요한 기입 동작들을 트리거할 수 있다. 불필요한 기입 동작들을 피하기 위해, 오버플로우 버퍼가 휘발성 메모리에 생성되어 비휘발성 메모리에서 인덱스 테이블로부터 판독된 데이터 페이지 주소들을 저장하는데 이용될 수 있다. 오버플로우 버퍼는 판독 동작(200)에서 이용하기 위한 데이터 페이지 주소들을 얻기 위해 판독될 수 있다. 따라서, 휘발성 메모리에서의 오버플로우 버퍼의 생성은 판독 동작들 동안에 비휘발성 메모리로의 불필요한 기입 동작들을 방지할 수 있다.
도 1a를 참조하면, 휘발성 메모리에서의 인덱스 TOC(102)는 판독될 데이터 페이지(108)의 물리적 페이지 주소들을 홀드하는 인덱스 테이블(106)에 관한 정보를 포함한다. 인덱스 테이블(106)의 적어도 한 부분은 휘발성 메모리에서 인덱스 캐시 트리(110)에 저장되거나 또는 비휘발성 메모리에서 인덱스 블록에 저장될 수 있다. 인덱스 테이블(106)이 인덱스 캐시 트리(110)에 저장되면, 인덱스 테이블(106)은 인덱스 캐시 트리(110)로부터 판독될 수 있으며 비휘발성 메모리에서 판독될 데이터 페이지(108)의 물리적 주소를 찾는데 이용될 수 있다. 인덱스 테이블(106)이 인덱스 캐시 트리(110)에 저장되지 않으면, 데이터 페이지 주소들은 비휘발성 메모리에서 인덱스 테이블(106)의 관련 엔트리로부터 판독될 수 있으며 인덱스 캐시 트리(110)에 삽입될 수 있다. 데이터 페이지 주소들은 인덱스 캐시 트리(110)로부터 판독될 수 있으며 비휘발성 메모리에서 데이터 페이지(108)에 대한 판독 동작을 수행하는데 이용될 수 있다.
몇몇 구현들에서, 판독 동작(200)은 논리 섹터 넘버(Lpn) 및 판독될 다수의 연속적인 논리 섹터들을 얻는다. 판독 동작(200)은 비휘발성 메모리에서 논리 섹터 넘버를 물리적 로케이션들로 매핑한다. 2KB의 페이지 사이즈를 가정하면, 판독 동작(200)에 대한 몇몇 예의 단계들은 다음과 같은 의사 코드(pseudo code)를 사용하여 설명될 수 있다.
단계 1: indexPage = readPhysicalPage (TOC[Lpn/512])
단계 2: dataBuffer = readPhysicalPage (indexPage[Lpn%512])
단계 3: dataBuffer 복귀.
여기서, readPhysicalPage는 포인터를 물리적 페이지로 복귀시키는 함수, TOC[]이고, indexPage[]는 TOC 엔트리들 및 indexPage 엔트리들 각각을 저장하기 위한 어레이이며, 512는 인덱스 테이블 엔트리에 의해 매핑되는 데이터 페이지들의 수(512*4바이트 = 2KB)이다. 이 예에서, 타입 indexPage는 인덱스 테이블의 시작 주소(포인터)를 유지하고, 타입 dataBuffer는 판독될 논리 섹터 넘버 Lpn에 대응하는 데이터 페이지들의 시작 주소(포인터)를 유지한다.
인덱스 캐시 트리에서 엔트리를 로케이팅하기 위한 예시 방안
도 3a 및 도 3b는 도 1a 내지 도 1c의 메모리 매핑 아키텍처를 이용하여 인덱스 캐시 트리에서 엔트리를 로케이팅하기 위한 예시 동작들(300)의 흐름도가다.
도 3a 및 도 3b를 참조하면, 몇몇 구현들에서, 동작(300)은 인덱스 캐시 트리(302)의 루트 노드를 로케이팅함으로써 시작할 수 있다. 예컨대, 인덱스 캐시 트리(118)의 루트 노드(124) 또는 인덱스 캐시 트리(148)의 루트 노드(152)는 도 1b 및 도 1c에 관해 설명한 바와 같이 로케이팅될 수 있다. 루트 노드는 도 2a 및 도 2b에 관해 설명한 대로 판독 요청(202)에 응답하여, 단계(208)와 같이 판독 요청을 수신하는 것에 응답하여 로케이팅될 수 있다. 루트 노드(예를 들면, 평가되는 현재 노드)의 제1 엔트리가 식별된다(304). 예컨대, 루트 노드(124)의 제1 엔트리(126a)가 식별된다. 식별된 엔트리에 대한 논리 주소 스팬은 판독되고 득점에 추가된다(306). 도 1b에 관해 설명한 바와 같이, 득점은 엔트리에 대한 논리 주소 오프셋에 대응한다. 득점은 도 1b에 관해 설명한 바와 같이 식별된 엔트리로부터의 논리 주소 스팬이 추가되기 전에 초기화될 수 있다. 판독 요청(202)에 의해 획득되는 논리 섹터와 같은 논리 섹터가 득점에 대해 비교된다(308). 논리 섹터가 득점보다 크지 않거나 또는 득점과 같다면(308), 도 1b에 관해 설명한 바와 같이, 현재 노드에서의 다음 엔트리가 식별된다(304).
논리 섹터가 득점보다 크거나 또는 득점과 같다면(308), 식별된 엔트리는 논리 섹터에 대응하는 것으로 판정된다. 식별된 엔트리가 물리적 주소를 포함하고 있다면(310), 판독 동작은 도 2b에 관해 설명한 판독 동작과 같이 엔트리에 포함된 물리적 주소를 이용하여 비휘발성 메모리에 대해 수행된다(318). 식별된 엔트리가 물리적 주소를 포함하지 않으면, 식별된 엔트리가 다른 노드에 대한 포인터를 포함하는지 여부에 대한 판정이 내려진다(312). 식별된 엔트리가 다른 노드에 대한 포인터를 가지고 있으면, 이 포인터에 의해 표시되는 다음 노드가 식별된다(단계 314). 로케이팅된 다음 노드를 이용하여, 도 1b에 관해 설명한 바와 같이, 다음 노드의 제1 엔트리가 식별되고(304), 식별된 엔트리에 대한 논리 주소 스팬이 득점에 추가되며(306), 득점이 논리 섹터에 비교된다(308).
식별된 엔트리가 다른 노드에 대한 포인터를 갖고 있지 않으면(312), 논리 섹터에 대한 물리적 주소는 비휘발성 메모리에서의 인덱스 테이블[예를 들면, 인덱스 테이블(106)]을 이용하여 로케이팅될 수 있다(314). 또한, 논리 섹터에 대한 식별된 물리적 주소는 도 4에 관해 상세히 설명하는 바와 같이 인덱스 캐시 트리(예를 들면, 인덱스 캐시 트리들 110, 118 및 148)에 엔트리로서 추가될 수 있다.
인덱스 캐시 트리의 노드들 및 엔트리들은, 식별된 엔트리가 물리적 주소를 포함하거나(318) 또는 식별된 엔트리가 도 1c에 관해 설명한 바와 같이 노드(164)의 엔트리(164b)와 같이 물리적 주소 또는 다른 노드에 대한 포인터를 포함하지 않을 때(316)까지 로케이팅되고, 득점에 추가되며, 논리 섹터들에 대해 비교될 수 있다.
엔트리를 인덱스 캐시 트리에 추가하기 위한 예시 동작
도 4는 도 1a 내지 도 1c의 메모리 매핑 아키텍처를 이용하여 인덱스 캐시 트리에 엔트리를 추가하기 위한 예시 동작(400)의 흐름도가다. 동작(400)은 인덱스 캐시 트리에 나타나지 않은 논리 섹터에 대해 논리 주소를 물리적 주소로 매핑하는 엔트리를 추가하는 데에 이용될 수 있다. 동작(400)은 도 2b 및 도 3b에 관해 설명한 대로 단계들(216 및 316)과 같이 물리적 주소에 대한 논리 주소가 비휘발성 메모리로부터 검색된 후에 수행될 수 있다.
인덱스 캐시 트리에 나타나지 않은 논리 섹터에 대한 물리적 주소는 인덱스 테이블[예를 들면, 인덱스 테이블(106)]을 이용하여 비휘발성 메모리에 로케이팅된다(402). 인덱스 캐시 트리에서의 로케이션은 비휘발성 메모리로부터 로케이팅된 물리적 주소에 대응하는 엔트리를 삽입하도록 로케이팅된다(404). 동작(300)에 유사한 동작이 수행되어 비휘발성 메모리로부터 로케이팅된 물리적 주소가 추가될 수 있는 적절한 노드 및 엔트리를 로케이팅할 수 있다. 예컨대, 적절한 로케이션은, 도 1c에 관해 설명한 엔트리들(164a 및 166b)과 같이, 포인터 또는 물리적 주소 없이 논리 주소 스팬을 포함하는 엔트리일 수 있다.
인덱스 캐시 트리가 찼다면(406), 엔트리(또는 가능한 노드)는 식별되어 인덱스 캐시 트리로부터 제거될 수 있다(408). 인덱스 캐시 트리로부터 제거하기 위해 엔트리 또는 노드를 식별하는 다양한 방안들이 이용될 수 있다. 예컨대, 몇몇 구현들에서, (예를 들어, 인덱스 캐시 트리에 가장 오래전에 추가된) 가장 오래된 엔트리가 인덱스 캐시 트리로부터 제거된다. 다른 구현들에서는, 가장 오래전에 액세스된 엔트리가 제거될 수 있다. 몇몇 구현들에서, 데이터 구조는 복수의 트리로 분할될 수 있으며, 가장 높은 메모리 사용을 갖는 트리(들)가 제거될 수 있다. 인덱스 캐시 트리에서의 엔트리의 수명 및 액세스들, 및 트리(들)의 사이즈에 관한 정보는 인덱스 캐시 트리와 연관되고 휘발성 메모리(예를 들면, 엔트리용의 카운터 등)에 저장된 메타데이터로부터 획득될 수 있다.
인덱스 캐시 트리로부터 제거되도록 식별된 엔트리들(또는 노드들)이 인덱스 캐시 트리로부터 소거된다(410). 로케이팅된 물리적 주소에 대응하는 엔트리가 생성되어 식별된 로케이션(예를 들면, 단계 404에서 식별된 로케이션)에서 인덱스 캐시 트리에서의 노드에 추가된다(412). 인덱스 캐시 트리에 대한 유지 동작들이 수행된다(414). 유지 동작들은 엔트리들 및 노드들의 거의 고른 분포가 달성되고 낭비된 공간이 최소화되도록 인덱스 캐시 트리를 밸런싱하고 재패킹하는 것을 포함할 수 있다. 인덱스 캐시 트리를 밸런싱할 때, 부모 엔트리들(예를 들면, 도 1b로부터의 엔트리(126a)와 같이 다른 노드에 대한 포인터를 포함하는 엔트리들)에 대한 논리 주소 스팬들은 이들이 그 자식 노드들의 논리 주소 스팬들에 기반하기 때문에 다시 조절될 필요가 있을 수 있다. 본 기술 분야에서 알려져 있는 여러 트리 밸런싱 및 리패킹 방안들이 이용될 수 있다.
예시 메모리 서브시스템들
도 5a는 도 1 내지 도 4의 메모리 아키텍처 및 동작들을 구현하기 위한 예시 메모리 서브시스템의 블록도이다. 몇몇 구현들에서, 서브시스템(500)은 컨트롤러(502), 비휘발성 메모리(504) 및 호스트 인터페이스(506)를 포함할 수 있다. 컨트롤러(502)는 휘발성 메모리(510)(예를 들면, RAM) 및 프로세서(508)를 포함할 수 있다. 휘발성 메모리(510)는 블록 TOC(512), 블록 테이블(513) 및 인덱스 테이블 캐시(514)를 저장한다. 인덱스 테이블 캐시(514)는 인덱스 캐시 트리(515)(예를 들면, 인덱스 캐시 트리들 110, 118 및 148)를 이용하여 전술한 동작들을 수행한다. 휘발성 메모리(510)는 가용성 및 임의의 다른 적합한 인자들에 기반하여 프로세서(508)에 의해 동적으로 설정될 수 있다. 비휘발성 메모리(504)는 인덱스 테이블(516) 및 데이터 페이지들(518)을 포함할 수 있다. 서브시스템(500)은 명료함을 위해 도 5로부터 생략되었던 다른 컴포넌트들을 포함할 수 있다.
동작시, 호스트 인터페이스(506)는 버스(예를 들면, IDE/ATT) 상에서 호스트 시스템으로부터 판독/기입 요청들을 획득할 수 있다. 호스트 인터페이스(506)는 데이터, 주소들 및 제어 신호들을 수신하기 위한 회로 및 소프트웨어를 포함할 수 있다. 판독/기입 요청들은 논리 섹터 넘버 및 판독/기입을 위한 다수의 연속적인 논리 섹터들을 포함할 수 있다.
프로세서(508)는 휘발성 메모리(510)에 액세스하고 인덱스 TOC(512)를 판독하여 인덱스 테이블 캐시(514)가 논리 섹터에 대한 물리적 주소들을 포함하는지 여부를 판정할 수 있다. 보다 구체적으로, 프로세서(508)는 인덱스 캐시 트리(515)(예를 들면, 인덱스 캐시 트리들 110, 118 및 148)를 이용하여 논리 섹터들에 대한 물리적 주소들이 인덱스 테이블 캐시(514)에 포함되어 있는지 여부를 판정할 수 있다. 인덱스 캐시 트리(515)가 물리적 주소들을 포함한다면, 물리적 주소들은 판독/기입 동작에 이용된다. 인덱스 캐시 트리(515)가 물리적 주소들을 포함하지 않는다면, 프로세서(508)는 휘발성 메모리(510)에 액세스하여 비휘발성 메모리(504)에서 인덱스 테이블(516)의 페이지 주소들을 획득하기 위해 인덱스 TOC(512)를 판독한다. 프로세서(508)는 판독/기입 동작 동안에 인덱스 테이블(516)에서의 물리적 주소들을 이용하여 데이터 페이지들(518)에 대한 메모리 매핑을 수행할 수 있다.
몇몇 구현들에서, 데이터 페이지들(518), 인덱스 TOC(512) 및/또는 인덱스 테이블(516)은 하나 또는 그 이상의 상이한 메모리 장치들에 대해 수행될 수 있다.
도 5b는 도 1 내지 도 4의 메모리 아키텍처 및 동작들을 구현하기 위한 메모리 서브시스템을 포함하는 예시적인 장치(520)를 나타내는 블록도이다. 몇몇 구현들에서, 장치(520)는 예를 들어 미디어 재생기 장치, PDA, 모바일 폰, 휴대용 컴퓨터들, 디지털 카메라 등과 같은 휴대용 장치이다.
장치(520)는 호스트 컨트롤러(또는 소위 "SoC(System-on-Chip)")(522) 및 비휘발성 메모리(528)를 포함한다. 장치(520)는 호스트 컨트롤러(522) 및 비휘발성 메모리(528)의 외부에 있는 추가 메모리를 옵션으로 포함할 수 있다. 호스트 컨트롤러(522)는 하나 또는 그 이상의 프로세서들(524) 및 휘발성 메모리(526)를 포함한다. 몇몇 구현들에서, 휘발성 메모리(526)는 SRAM이다. 호스트 컨트롤러(522)는 도 2 내지 도 4에 관해 설명한 동작들을 포함하는 여러 프로세싱 동작들 및/또는 입/출력 동작들을 수행한다. 예컨대, 호스트 컨트롤러(522)는 프로세싱 동작들 이외에 사용자 입력들을 수신 및 프로세싱하고, 출력들을 생성하며 미디어(예를 들면, 오디오, 비디오, 그래픽들) 디코딩 및 프로세싱 동작들 등을 수행할 수 있다. 호스트 컨트롤러(522)는 휘발성 메모리(526)로부터 데이터를 판독하고 또한 휘발성 메모리(526)에 데이터를 기입할 수 있다. 호스트 컨트롤러(522)는 인터페이스(도시되지 않음)를 통해 비휘발성 메모리(528)에게 판독 또는 기입 동작들을 또한 발행할 수 있다. 몇몇 구현들에서, 데이터에 대한 요청들은 호스트 컨트롤러(522)에 의해 발행되고 및/또는 호스트 컨트롤러(522)에 의해 수신될 수 있다. 예컨대, 호스트 컨트롤러(522)는 비휘발성 메모리(528)에 포함된 데이터에 대한 요청을 발행할 수 있다. 발행된 요청은 호스트 컨트롤러(522)에 의해 수신될 수 있으며 요청된 데이터에 대한 논리 주소는 도 1 내지 도 4에 관해 설명한 바와 같이 인덱스 캐시 트리를 이용하여 물리적 주소가 될 수 있다.
몇몇 구현들에서, 비휘발성 메모리(528)는 NAND 플래시 메모리이다. 몇몇 다른 구현들에서, 비휘발성 메모리(528)는 예를 들어 NOR 플래시 메모리와 같은 다른 타입의 비휘발성 메모리, 다른 타입의 고체 상태 메모리 또는 하드 디스크 드라이브이다. 장치(520)는 명료함을 위해 도 5b로부터 생략되었던 하나 또는 그 이상의 다른 컴포넌트들을 또한 포함할 수 있다.
다수의 구현들에 대해 설명하였다. 그렇지만, 여러 수정들이 행해질 수 있다는 것을 알 것이다. 예컨대, 하나 또는 그 이상의 구현들의 엘리먼트들이 조합, 삭제, 수정 또는 보충되어 추가의 구현들을 형성할 수 있다. 또 다른 예로서, 도면들에 도시되어 있는 논리 흐름들은 바람직한 결과들을 달성하기 위해 도시된 특정한 순서 또는 순차적인 순서를 반드시 필요로 하지는 않는다. 또한, 다른 단계들이 제공되거나 또는 설명하였던 흐름들로부터 단계들이 삭제될 수 있으며, 설명하였던 시스템들에 다른 컴포넌트들이 추가되거나 또는 이 시스템들로부터 제거될 수 있다. 따라서, 다른 구현들은 다음의 청구범위의 범주 내에 속한다.

Claims (21)

  1. 논리 주소(logical address)와 연관된 데이터에 대한 요청을 수신하는 단계 - 상기 논리 주소는 비휘발성 메모리 내의 상기 요청된 데이터의 물리적 주소에 대응함 - ;
    인덱스 트리(index tree)에 액세스하는 단계 - 상기 인덱스 트리는, 논리 주소들을 상기 비휘발성 메모리 내의 데이터의 물리적 주소들(physical addresses)로 매핑(mapping)하는 압축된 데이터를 포함함 - ;
    상기 액세스된 인덱스 트리를 트래버스(traversing)함으로써, 상기 연관된 논리 주소를 상기 대응하는 물리적 주소로 변환하는(translating) 단계; 및
    상기 비휘발성 메모리 내의 상기 요청된 데이터의 상기 대응하는 물리적 주소를 리턴하는 단계를 포함하고,
    상기 인덱스 트리는 계층적 구조(hierachical structure)로 조직화(organized)된 복수의 노드들을 포함하고, 각각의 노드는 논리 주소 스팬들(logical address spans)을 저장하는 복수의 엔트리들을 포함하며,
    상기 액세스된 인덱스 트리는, 상기 논리 주소에 대응하는 상기 물리적 주소를 포함하는 엔트리의 위치를 찾을 때까지(located) 트래버스되는데, 상기 액세스된 인덱스 트리의 트래버스는,
    i) 상기 인덱스 트리의 루트 노드(root node)에서 시작하여, 검사되는 노드의 엔트리들의 논리 주소 스팬들을 순차적으로 주합하되, 주합 논리 주소 스팬(aggregate logical address span)이 상기 연관된 논리 주소에 대응할 때까지 상기 검사되는 노드의 엔트리들의 논리 주소 스팬들을 순차적으로 주합함으로써, 상기 연관된 논리 주소에 대응하는 상기 검사되는 노드 중의 하나의 엔트리를 식별하는 단계;
    ii) 상기 식별된 엔트리가 상기 인덱스 트리 내의 다른 노드에 대한 포인터를 포함하는 경우, 상기 다른 노드에 대해 상기 단계 i)를 다시 수행하는 단계; 및
    iii) 상기 식별된 엔트리가 물리적 주소에 대한 포인터를 포함하는 경우, 상기 포인터에 의해 표시되는 물리적 주소를 상기 논리 주소에 대응하는 상기 물리적 주소로서 식별하는 단계를 포함하는,
    방법.
  2. 제1항에 있어서,
    상기 인덱스 트리는 휘발성 메모리에 위치되는, 방법.
  3. 제1항에 있어서,
    상기 인덱스 트리는 비휘발성 메모리에 위치되는, 방법.
  4. 삭제
  5. 제1항에 있어서,
    상기 복수의 엔트리들 각각마다, 상기 압축된 데이터는, 연관된 메모리 세그먼트의 길이에 대응하는 해당 엔트리에 포함된 논리 주소 스팬(span)을 포함하는, 방법.
  6. 제1항에 있어서,
    상기 복수의 엔트리들 각각마다, 상기 압축된 데이터는, 해당 엔트리에 대한 사전 결정된 길이를 표시하는 해당 엔트리에 포함된 플래그를 포함하는, 방법.
  7. 제6항에 있어서,
    플래그는 엔트리의 하나 또는 그 이상의 비트들인, 방법.
  8. 제1항에 있어서,
    상기 복수의 엔트리들 각각은 노드에 대한 포인터, 메모리 세그먼트에 대응하는 물리적 주소, 및 상기 요청된 물리적 주소가 상기 인덱스 트리에 포함되지 않는다는 표시자(indicator) 중 적어도 하나를 포함하는, 방법.
  9. 삭제
  10. 제1항에 있어서,
    상기 루트 노드의 상기 식별된 엔트리가 상기 인덱스 트리의 제2 노드로의 포인터를 포함하는, 방법.
  11. 제10항에 있어서,
    상기 제2 노드의 엔트리들의 논리 주소 스팬들을 상기 주합 논리 주소 스팬에 순차적으로 가산하되, 상기 주합 논리 주소 스팬이 상기 연관된 논리 주소에 대응할 때까지 상기 제2 노드의 엔트리들의 논리 주소 스팬을 순차적으로 가산함으로써, 상기 연관된 논리 주소에 대응하는 상기 제2 노드 중의 하나의 엔트리를 식별하는 단계를 더 포함하고,
    상기 제2 노드의 상기 식별된 엔트리는 메모리 세그먼트에 대한 물리적 주소를 포함하는, 방법.
  12. 물리적 주소들과 연관된 데이터를 저장하는 비휘발성 메모리; 및
    상기 비휘발성 메모리에 결합되어, 논리 주소와 연관된 데이터에 대한 요청을 수신하는 컨트롤러를 포함하고,
    상기 논리 주소는 상기 비휘발성 메모리 내의 상기 요청된 데이터의 물리적 주소에 대응하고,
    상기 컨트롤러는 논리 주소들을 상기 비휘발성 메모리에 저장된 데이터의 물리적 주소들로 매핑하는 압축된 데이터를 포함하는 인덱스 트리에 액세스하고, 상기 액세스된 인덱스 트리를 사용하여 상기 연관된 논리 주소를 상기 대응하는 물리적 주소로 변환함으로써 - 상기 연관된 논리 주소는 상기 액세스된 인덱스 트리를 트래버스함으로써 상기 대응하는 물리적 주소로 변환됨 - 상기 대응하는 물리적 주소를 결정하도록 동작하고,
    상기 인덱스 트리는 계층적 구조로 조직화된 복수의 노드들을 포함하고, 각각의 노드는 논리 주소 스팬들을 저장하는 복수의 엔트리들을 포함하며,
    상기 액세스된 인덱스 트리는, 상기 논리 주소에 대응하는 상기 물리적 주소를 포함하는 엔트리의 위치를 찾을 때까지(located) 트래버스되는데, 상기 액세스된 인덱스 트리의 트래버스는,
    i) 상기 인덱스 트리의 루트 노드(root node)에서 시작하여, 검사되는 노드의 엔트리들의 논리 주소 스팬들을 순차적으로 주합하되, 주합 논리 주소 스팬(aggregate logical address span)이 상기 연관된 논리 주소에 대응할 때까지 상기 검사되는 노드의 엔트리들의 논리 주소 스팬들을 순차적으로 주합함으로써, 상기 연관된 논리 주소에 대응하는 상기 검사되는 노드 중의 하나의 엔트리를 식별하는 단계;
    ii) 상기 식별된 엔트리가 상기 인덱스 트리 내의 다른 노드에 대한 포인터를 포함하는 경우, 상기 다른 노드에 대해 상기 단계 i)를 다시 수행하는 단계; 및
    iii) 상기 식별된 엔트리가 물리적 주소에 대한 포인터를 포함하는 경우, 상기 포인터에 의해 표시되는 물리적 주소를 상기 논리 주소에 대응하는 상기 물리적 주소로서 식별하는 단계를 포함하는,
    시스템.
  13. 제12항에 있어서,
    상기 인덱스 트리를 저장하는 휘발성 메모리를 더 포함하는, 시스템.
  14. 제12항에 있어서,
    상기 인덱스 트리는 상기 비휘발성 메모리에 저장되는, 시스템.
  15. 삭제
  16. 제12항에 있어서,
    상기 복수의 엔트리들 각각마다, 상기 압축된 데이터는, 연관된 메모리 세그먼트의 길이에 대응하는 해당 엔트리에 포함된 논리 주소 스팬을 포함하는, 시스템.
  17. 제12항에 있어서,
    상기 복수의 엔트리들 각각마다, 상기 압축된 데이터는, 해당 엔트리에 대한 사전 결정된 길이를 표시하는 해당 엔트리에 포함된 플래그를 포함하는, 시스템.
  18. 삭제
  19. 삭제
  20. 삭제
  21. 제1항에 있어서,
    각각의 엔트리의 길이는 해당 엔트리에 대한 논리 주소 스팬에 기초하여 제1 수의 비트 길이 또는 제2 수의 비트 길이를 포함하고, 노드의 엔트리들은 최하위 논리 주소로부터 최상위 논리 주소까지 순차적으로 정렬되는, 방법.
KR1020100071639A 2009-07-24 2010-07-23 인덱스 캐시 트리 KR101257990B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/509,267 US8516219B2 (en) 2009-07-24 2009-07-24 Index cache tree
US12/509,267 2009-07-24

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020110100293A Division KR101384435B1 (ko) 2009-07-24 2011-09-30 인덱스 캐시 트리

Publications (2)

Publication Number Publication Date
KR20110010583A KR20110010583A (ko) 2011-02-01
KR101257990B1 true KR101257990B1 (ko) 2013-04-30

Family

ID=43083057

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020100071639A KR101257990B1 (ko) 2009-07-24 2010-07-23 인덱스 캐시 트리
KR1020110100293A KR101384435B1 (ko) 2009-07-24 2011-09-30 인덱스 캐시 트리

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020110100293A KR101384435B1 (ko) 2009-07-24 2011-09-30 인덱스 캐시 트리

Country Status (5)

Country Link
US (1) US8516219B2 (ko)
EP (1) EP2282266A1 (ko)
KR (2) KR101257990B1 (ko)
CN (1) CN102473092B (ko)
WO (1) WO2011011487A1 (ko)

Families Citing this family (114)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080140724A1 (en) 2006-12-06 2008-06-12 David Flynn Apparatus, system, and method for servicing object requests within a storage controller
US8719501B2 (en) 2009-09-08 2014-05-06 Fusion-Io Apparatus, system, and method for caching data on a solid-state storage device
US8935302B2 (en) * 2006-12-06 2015-01-13 Intelligent Intellectual Property Holdings 2 Llc Apparatus, system, and method for data block usage information synchronization for a non-volatile storage volume
US8489817B2 (en) 2007-12-06 2013-07-16 Fusion-Io, Inc. Apparatus, system, and method for caching data
US9519540B2 (en) 2007-12-06 2016-12-13 Sandisk Technologies Llc Apparatus, system, and method for destaging cached data
US7836226B2 (en) 2007-12-06 2010-11-16 Fusion-Io, Inc. Apparatus, system, and method for coordinating storage requests in a multi-processor/multi-thread environment
US8621138B2 (en) 2007-12-27 2013-12-31 Sandisk Enterprise Ip Llc Flash storage controller execute loop
US9122579B2 (en) 2010-01-06 2015-09-01 Intelligent Intellectual Property Holdings 2 Llc Apparatus, system, and method for a storage layer
WO2011031903A2 (en) * 2009-09-09 2011-03-17 Fusion-Io, Inc. Apparatus, system, and method for allocating storage
US8407259B2 (en) * 2009-10-16 2013-03-26 Research In Motion Limited System and method for storing and retrieving data from storage
US8812816B2 (en) * 2010-03-23 2014-08-19 Apple Inc. Garbage collection schemes for index block
CN102238202B (zh) * 2010-04-23 2014-12-03 华为技术有限公司 索引信息的存储、查找方法及装置
US8949506B2 (en) 2010-07-30 2015-02-03 Apple Inc. Initiating wear leveling for a non-volatile memory
JP5749486B2 (ja) * 2010-12-17 2015-07-15 任天堂株式会社 プログラム、情報処理装置、情報処理システムおよび情報処理方法
WO2012083308A2 (en) 2010-12-17 2012-06-21 Fusion-Io, Inc. Apparatus, system, and method for persistent data management on a non-volatile storage media
US8521948B2 (en) * 2011-01-03 2013-08-27 Apple Inc. Handling dynamic and static data for a system having non-volatile memory
US9003104B2 (en) 2011-02-15 2015-04-07 Intelligent Intellectual Property Holdings 2 Llc Systems and methods for a file-level cache
US8874823B2 (en) 2011-02-15 2014-10-28 Intellectual Property Holdings 2 Llc Systems and methods for managing data input/output operations
US9201677B2 (en) 2011-05-23 2015-12-01 Intelligent Intellectual Property Holdings 2 Llc Managing data input/output operations
US9141527B2 (en) 2011-02-25 2015-09-22 Intelligent Intellectual Property Holdings 2 Llc Managing cache pools
CN102654863A (zh) * 2011-03-02 2012-09-05 华北计算机系统工程研究所 一种实时数据库历史数据组织管理方式
WO2012129191A2 (en) 2011-03-18 2012-09-27 Fusion-Io, Inc. Logical interfaces for contextual storage
US9563555B2 (en) 2011-03-18 2017-02-07 Sandisk Technologies Llc Systems and methods for storage allocation
US9645758B2 (en) * 2011-07-22 2017-05-09 Sandisk Technologies Llc Apparatus, system, and method for indexing data of an append-only, log-based structure
US9235502B2 (en) 2011-09-16 2016-01-12 Apple Inc. Systems and methods for configuring non-volatile memory
US8924632B2 (en) * 2011-09-16 2014-12-30 Apple Inc. Faster tree flattening for a system having non-volatile memory
US9069657B2 (en) * 2011-12-12 2015-06-30 Apple Inc. LBA bitmap usage
KR101915073B1 (ko) 2011-12-20 2018-11-06 인텔 코포레이션 2-레벨 메모리 계층구조에서 메모리측 캐쉬의 동적인 부분적 전원 차단
US9274937B2 (en) 2011-12-22 2016-03-01 Longitude Enterprise Flash S.A.R.L. Systems, methods, and interfaces for vector input/output operations
US9251086B2 (en) 2012-01-24 2016-02-02 SanDisk Technologies, Inc. Apparatus, system, and method for managing a cache
US9116812B2 (en) 2012-01-27 2015-08-25 Intelligent Intellectual Property Holdings 2 Llc Systems and methods for a de-duplication cache
US8874850B1 (en) * 2012-05-10 2014-10-28 Netapp, Inc. Hierarchically tagged cache
US9612966B2 (en) 2012-07-03 2017-04-04 Sandisk Technologies Llc Systems, methods and apparatus for a virtual machine cache
US10339056B2 (en) 2012-07-03 2019-07-02 Sandisk Technologies Llc Systems, methods and apparatus for cache transfers
US9699263B1 (en) 2012-08-17 2017-07-04 Sandisk Technologies Llc. Automatic read and write acceleration of data accessed by virtual machines
US10346095B2 (en) 2012-08-31 2019-07-09 Sandisk Technologies, Llc Systems, methods, and interfaces for adaptive cache persistence
US10509776B2 (en) 2012-09-24 2019-12-17 Sandisk Technologies Llc Time sequence data management
US10318495B2 (en) 2012-09-24 2019-06-11 Sandisk Technologies Llc Snapshots for a non-volatile device
US8612402B1 (en) * 2012-10-26 2013-12-17 Stec, Inc. Systems and methods for managing key-value stores
US9501398B2 (en) 2012-12-26 2016-11-22 Sandisk Technologies Llc Persistent storage device with NVRAM for staging writes
CN103902467B (zh) * 2012-12-26 2017-02-22 华为技术有限公司 压缩内存访问控制方法、装置及系统
US9612948B2 (en) 2012-12-27 2017-04-04 Sandisk Technologies Llc Reads and writes between a contiguous data block and noncontiguous sets of logical address blocks in a persistent storage device
US9454420B1 (en) 2012-12-31 2016-09-27 Sandisk Technologies Llc Method and system of reading threshold voltage equalization
US9870830B1 (en) 2013-03-14 2018-01-16 Sandisk Technologies Llc Optimal multilevel sensing for reading data from a storage medium
US9842053B2 (en) 2013-03-15 2017-12-12 Sandisk Technologies Llc Systems and methods for persistent cache logging
US9367246B2 (en) 2013-03-15 2016-06-14 Sandisk Technologies Inc. Performance optimization of data transfer for soft information generation
US10102144B2 (en) 2013-04-16 2018-10-16 Sandisk Technologies Llc Systems, methods and interfaces for data virtualization
US10558561B2 (en) 2013-04-16 2020-02-11 Sandisk Technologies Llc Systems and methods for storage metadata management
US9524235B1 (en) 2013-07-25 2016-12-20 Sandisk Technologies Llc Local hash value generation in non-volatile data storage systems
US9842128B2 (en) 2013-08-01 2017-12-12 Sandisk Technologies Llc Systems and methods for atomic storage operations
US9582426B2 (en) * 2013-08-20 2017-02-28 International Business Machines Corporation Hardware managed compressed cache
US9361221B1 (en) 2013-08-26 2016-06-07 Sandisk Technologies Inc. Write amplification reduction through reliable writes during garbage collection
US9639463B1 (en) 2013-08-26 2017-05-02 Sandisk Technologies Llc Heuristic aware garbage collection scheme in storage systems
US9442662B2 (en) 2013-10-18 2016-09-13 Sandisk Technologies Llc Device and method for managing die groups
US10019320B2 (en) 2013-10-18 2018-07-10 Sandisk Technologies Llc Systems and methods for distributed atomic storage operations
US9436831B2 (en) 2013-10-30 2016-09-06 Sandisk Technologies Llc Secure erase in a memory device
US10073630B2 (en) 2013-11-08 2018-09-11 Sandisk Technologies Llc Systems and methods for log coordination
KR102094393B1 (ko) 2013-11-18 2020-03-27 삼성전자주식회사 불휘발성 메모리 시스템 및 그것의 동작 방법
US9703816B2 (en) 2013-11-19 2017-07-11 Sandisk Technologies Llc Method and system for forward reference logging in a persistent datastore
US9520197B2 (en) 2013-11-22 2016-12-13 Sandisk Technologies Llc Adaptive erase of a storage device
US9520162B2 (en) 2013-11-27 2016-12-13 Sandisk Technologies Llc DIMM device controller supervisor
US9582058B2 (en) 2013-11-29 2017-02-28 Sandisk Technologies Llc Power inrush management of storage devices
US9514057B2 (en) * 2013-12-04 2016-12-06 Sandisk Technologies Llc Storage module and method for managing logical-to-physical address mapping
US9229876B2 (en) * 2013-12-17 2016-01-05 Sandisk Technologies Inc. Method and system for dynamic compression of address tables in a memory
KR102116258B1 (ko) 2013-12-24 2020-06-05 삼성전자주식회사 메모리 시스템 및 그것을 포함하는 유저 장치
CN104750621B (zh) * 2013-12-27 2018-04-06 珠海全志科技股份有限公司 缓存方法及控制系统
US9703636B2 (en) 2014-03-01 2017-07-11 Sandisk Technologies Llc Firmware reversion trigger and control
US9448876B2 (en) 2014-03-19 2016-09-20 Sandisk Technologies Llc Fault detection and prediction in storage devices
US9390814B2 (en) 2014-03-19 2016-07-12 Sandisk Technologies Llc Fault detection and prediction for data storage elements
US9454448B2 (en) 2014-03-19 2016-09-27 Sandisk Technologies Llc Fault testing in storage devices
WO2015142341A1 (en) * 2014-03-20 2015-09-24 Hewleet-Packard Development Company, L. P. Dynamic memory expansion by data compression
US9626399B2 (en) 2014-03-31 2017-04-18 Sandisk Technologies Llc Conditional updates for reducing frequency of data modification operations
US9390021B2 (en) * 2014-03-31 2016-07-12 Sandisk Technologies Llc Efficient cache utilization in a tiered data structure
US9626400B2 (en) 2014-03-31 2017-04-18 Sandisk Technologies Llc Compaction of information in tiered data structure
US9697267B2 (en) 2014-04-03 2017-07-04 Sandisk Technologies Llc Methods and systems for performing efficient snapshots in tiered data structures
TWI502345B (zh) * 2014-05-12 2015-10-01 Via Tech Inc 快閃記憶體控制晶片以及資料儲存裝置以及快閃記憶體控制方法
US10114557B2 (en) 2014-05-30 2018-10-30 Sandisk Technologies Llc Identification of hot regions to enhance performance and endurance of a non-volatile storage device
US10162748B2 (en) 2014-05-30 2018-12-25 Sandisk Technologies Llc Prioritizing garbage collection and block allocation based on I/O history for logical address regions
US10146448B2 (en) 2014-05-30 2018-12-04 Sandisk Technologies Llc Using history of I/O sequences to trigger cached read ahead in a non-volatile storage device
US9703491B2 (en) 2014-05-30 2017-07-11 Sandisk Technologies Llc Using history of unaligned writes to cache data and avoid read-modify-writes in a non-volatile storage device
US10656842B2 (en) 2014-05-30 2020-05-19 Sandisk Technologies Llc Using history of I/O sizes and I/O sequences to trigger coalesced writes in a non-volatile storage device
US10372613B2 (en) 2014-05-30 2019-08-06 Sandisk Technologies Llc Using sub-region I/O history to cache repeatedly accessed sub-regions in a non-volatile storage device
US10656840B2 (en) 2014-05-30 2020-05-19 Sandisk Technologies Llc Real-time I/O pattern recognition to enhance performance and endurance of a storage device
KR20150139718A (ko) 2014-06-03 2015-12-14 에스케이하이닉스 주식회사 불휘발성 메모리를 제어하는 컨트롤러 및 그것을 포함하는 반도체 장치
US9652381B2 (en) 2014-06-19 2017-05-16 Sandisk Technologies Llc Sub-block garbage collection
US9335943B2 (en) * 2014-06-30 2016-05-10 Intel Corporation Method and apparatus for fine grain memory protection
US9443601B2 (en) 2014-09-08 2016-09-13 Sandisk Technologies Llc Holdup capacitor energy harvesting
US10152412B2 (en) * 2014-09-23 2018-12-11 Oracle International Corporation Smart flash cache logger
US9483413B2 (en) 2014-10-24 2016-11-01 Samsung Electronics Co., Ltd. Nonvolatile memory devices and methods of controlling the same
WO2016122549A1 (en) * 2015-01-29 2016-08-04 Hewlett Packard Enterprise Development Lp Read only bufferpool
US11023453B2 (en) 2015-01-29 2021-06-01 Hewlett Packard Enterprise Development Lp Hash index
US9946607B2 (en) 2015-03-04 2018-04-17 Sandisk Technologies Llc Systems and methods for storage error management
US20170068392A1 (en) * 2015-09-03 2017-03-09 Ceebus Technologies, Llc Touchscreen system usable in a variety of media
KR20170044781A (ko) * 2015-10-15 2017-04-26 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작방법
KR20170056765A (ko) 2015-11-13 2017-05-24 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작 방법
US20170177497A1 (en) * 2015-12-21 2017-06-22 Qualcomm Incorporated Compressed caching of a logical-to-physical address table for nand-type flash memory
FR3051574A1 (fr) 2016-05-20 2017-11-24 Proton World Int Nv Gestion du stockage dans une memoire flash
FR3055992A1 (fr) * 2016-09-09 2018-03-16 Proton World International N.V. Gestion d'index dans une memoire flash
KR200487909Y1 (ko) * 2016-09-30 2018-11-20 (주)피스월드 전기렌지 전용 조리 판
US10339062B2 (en) * 2017-04-28 2019-07-02 EMC IP Holding Company LLC Method and system for writing data to and read data from persistent storage
US10956076B2 (en) 2017-05-23 2021-03-23 Texas Instruments Incorporated Integrated circuit capable of switching between non-volatile memory-based and volatile memory-based processor execution
US10289557B2 (en) 2017-08-28 2019-05-14 Western Digital Technologies, Inc. Storage system and method for fast lookup in a table-caching database
FR3072476A1 (fr) 2017-10-13 2019-04-19 Proton World International N.V. Unite logique de memoire pour memoire flash
US10409726B2 (en) * 2017-10-30 2019-09-10 Micron Technology, Inc. Dynamic L2P cache
CN110837338A (zh) * 2018-08-15 2020-02-25 阿里巴巴集团控股有限公司 一种存储索引处理方法及装置
CN111124270B (zh) 2018-10-31 2023-10-27 伊姆西Ip控股有限责任公司 缓存管理的方法、设备和计算机程序产品
US10970228B2 (en) * 2018-12-14 2021-04-06 Micron Technology, Inc. Mapping table compression using a run length encoding algorithm
CN110221986B (zh) * 2019-06-15 2021-11-16 深圳市硅格半导体有限公司 闪存逻辑物理映射表的排序方法、系统以及其闪存
KR20210068699A (ko) * 2019-12-02 2021-06-10 삼성전자주식회사 스토리지 장치, 스토리지 시스템 및 스토리지 장치의 동작 방법
CN111125447A (zh) * 2019-12-22 2020-05-08 北京浪潮数据技术有限公司 一种元数据访问方法、装置、设备及可读存储介质
US11983438B2 (en) * 2021-02-09 2024-05-14 Nutanix, Inc. Technique for improving operations log indexing
US20220374360A1 (en) * 2021-05-18 2022-11-24 Macronix International Co., Ltd. Memory device and method for accessing memory device
US11494303B1 (en) * 2021-09-29 2022-11-08 EMC IP Holding Company LLC Data storage system with adaptive, memory-efficient cache flushing structure
US11880388B2 (en) * 2022-06-13 2024-01-23 Snowflake Inc. Hybrid table secondary index for lookups, unique checks, and referential integrity constraints

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050015378A1 (en) * 2001-06-05 2005-01-20 Berndt Gammel Device and method for determining a physical address from a virtual address, using a hierarchical mapping rule comprising compressed nodes

Family Cites Families (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4323987A (en) * 1980-03-28 1982-04-06 Pitney Bowes Inc. Power failure memory support system
US5341330A (en) * 1992-10-30 1994-08-23 Intel Corporation Method for writing to a flash memory array during erase suspend intervals
US5404485A (en) 1993-03-08 1995-04-04 M-Systems Flash Disk Pioneers Ltd. Flash file system
US5689704A (en) * 1994-03-04 1997-11-18 Sony Corporation Recording medium, recording/playback device which uses commands in character string form for audio system control
US5935259A (en) * 1996-09-24 1999-08-10 Apple Computer, Inc. System and method for preventing damage to media files within a digital camera device
US6199076B1 (en) * 1996-10-02 2001-03-06 James Logan Audio program player including a dynamic program selection controller
JPH10260912A (ja) * 1997-03-17 1998-09-29 Mitsubishi Electric Corp メモリカード
SG82587A1 (en) * 1997-10-21 2001-08-21 Sony Corp Recording apparatus, recording method, playback apparatus, playback method, recording/playback apparatus, recording/playback method, presentation medium and recording medium
JPH11203191A (ja) * 1997-11-13 1999-07-30 Seiko Epson Corp 不揮発性記憶装置、不揮発性記憶装置の制御方法、および、不揮発性記憶装置を制御するプログラムを記録した情報記録媒体
US6427186B1 (en) * 1999-03-30 2002-07-30 Frank (Fong-Long) Lin Memory, interface system and method for mapping logical block numbers to physical sector numbers in a flash memory, using a master index table and a table of physical sector numbers
JP3873523B2 (ja) * 1999-05-21 2007-01-24 ソニー株式会社 再生装置
KR100655034B1 (ko) * 1999-05-28 2006-12-07 마츠시타 덴끼 산교 가부시키가이샤 반도체 메모리카드, 재생장치, 기록장치, 재생방법, 기록방법
US7660941B2 (en) * 2003-09-10 2010-02-09 Super Talent Electronics, Inc. Two-level RAM lookup table for block and page allocation and wear-leveling in limited-write flash-memories
US6816856B2 (en) * 2001-06-04 2004-11-09 Hewlett-Packard Development Company, L.P. System for and method of data compression in a valueless digital tree representing a bitset
JP4362248B2 (ja) * 2001-09-03 2009-11-11 パイオニア株式会社 情報記録再生装置およびコンピュータプログラム
US6711663B2 (en) * 2001-11-15 2004-03-23 Key Technology Corporation Algorithm of flash memory capable of quickly building table and preventing improper operation and control system thereof
US7139937B1 (en) * 2002-08-15 2006-11-21 Network Appliance, Inc. Method and apparatus to establish safe state in a volatile computer memory under multiple hardware and software malfunction conditions
US8041878B2 (en) * 2003-03-19 2011-10-18 Samsung Electronics Co., Ltd. Flash file system
US7028139B1 (en) * 2003-07-03 2006-04-11 Veritas Operating Corporation Application-assisted recovery from data corruption in parity RAID storage using successive re-reads
US20060008256A1 (en) * 2003-10-01 2006-01-12 Khedouri Robert K Audio visual player apparatus and system and method of content distribution using the same
US20050251617A1 (en) * 2004-05-07 2005-11-10 Sinclair Alan W Hybrid non-volatile memory system
US7143120B2 (en) * 2004-05-03 2006-11-28 Microsoft Corporation Systems and methods for automated maintenance and repair of database and file systems
JP4209820B2 (ja) * 2004-07-15 2009-01-14 株式会社ハギワラシスコム メモリカードシステム及び該メモリカードシステムで使用されるライトワンス型メモリカード、ホストシステムと半導体記憶デバイスとからなるシステム
US7366887B2 (en) * 2005-07-11 2008-04-29 Lenovo (Singapore) Pte. Ltd. System and method for loading programs from HDD independent of operating system
US20070016721A1 (en) * 2005-07-18 2007-01-18 Wyse Technology Inc. Flash file system power-up by using sequential sector allocation
JP5076411B2 (ja) * 2005-11-30 2012-11-21 ソニー株式会社 記憶装置、コンピュータシステム
US7917723B2 (en) * 2005-12-01 2011-03-29 Microsoft Corporation Address translation table synchronization
US7711923B2 (en) * 2006-06-23 2010-05-04 Microsoft Corporation Persistent flash memory mapping table
KR100843543B1 (ko) * 2006-10-25 2008-07-04 삼성전자주식회사 플래시 메모리 장치를 포함하는 시스템 및 그것의 데이터복구 방법
JP4967680B2 (ja) * 2007-01-23 2012-07-04 ソニー株式会社 記憶装置およびコンピュータシステム、並びに記憶装置の管理方法
US7596643B2 (en) * 2007-02-07 2009-09-29 Siliconsystems, Inc. Storage subsystem with configurable buffer
US8135900B2 (en) * 2007-03-28 2012-03-13 Kabushiki Kaisha Toshiba Integrated memory management and memory management method
US7870122B2 (en) * 2007-04-23 2011-01-11 Microsoft Corporation Self-tuning index for flash-based databases
US8037112B2 (en) * 2007-04-23 2011-10-11 Microsoft Corporation Efficient access of flash databases
CN100478959C (zh) * 2007-05-30 2009-04-15 北京航空航天大学 嵌入式数据库的存储管理方法
US8195912B2 (en) * 2007-12-06 2012-06-05 Fusion-io, Inc Apparatus, system, and method for efficient mapping of virtual and physical addresses
US8892831B2 (en) * 2008-01-16 2014-11-18 Apple Inc. Memory subsystem hibernation
US20090198952A1 (en) * 2008-02-04 2009-08-06 Apple Inc Memory Mapping Architecture
US20090307409A1 (en) * 2008-06-06 2009-12-10 Apple Inc. Device memory management
US20100287329A1 (en) * 2009-05-06 2010-11-11 Apple Inc. Partial Page Operations for Non-Volatile Memory Systems

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050015378A1 (en) * 2001-06-05 2005-01-20 Berndt Gammel Device and method for determining a physical address from a virtual address, using a hierarchical mapping rule comprising compressed nodes

Also Published As

Publication number Publication date
KR101384435B1 (ko) 2014-04-11
KR20110117046A (ko) 2011-10-26
US20110022819A1 (en) 2011-01-27
CN102473092B (zh) 2014-12-24
CN102473092A (zh) 2012-05-23
US8516219B2 (en) 2013-08-20
WO2011011487A1 (en) 2011-01-27
KR20110010583A (ko) 2011-02-01
EP2282266A1 (en) 2011-02-09

Similar Documents

Publication Publication Date Title
KR101257990B1 (ko) 인덱스 캐시 트리
US8397014B2 (en) Memory mapping restore and garbage collection operations
US7516295B2 (en) Method of remapping flash memory
CN107066393B (zh) 提高地址映射表中映射信息密度的方法
KR102603070B1 (ko) 메모리 시스템, 메모리 시스템에 데이터를 기록하는 방법 및 메모리 시스템으로부터 데이터를 판독하는 방법
KR101257989B1 (ko) 인덱스 페이지 복구
US7191306B2 (en) Flash memory, and flash memory access method and apparatus
US7890550B2 (en) Flash memory system and garbage collection method thereof
US20100125694A1 (en) Memory device and management method of memory device
US8825946B2 (en) Memory system and data writing method
JP2008130088A (ja) 不揮発性メモリ管理方法及び装置
KR101510120B1 (ko) 메모리 장치 및 메모리 장치의 관리 방법
CN108073359B (zh) 数据储存装置的操作方法
CN113253926A (zh) 提升新型存储器的查询和存储性能的存储内索引构建方法
Ross Modeling the performance of algorithms on flash memory devices
JP2012068765A (ja) メモリコントローラ及びメモリコントローラを備えるフラッシュメモリシステム、並びにフラッシュメモリの制御方法
CN110968520B (zh) 基于统一缓存架构的多流存储设备
KR100982440B1 (ko) 단일 플래시 메모리의 데이터 관리시스템
KR20100099888A (ko) 플래시 메모리를 기반으로 한 데이터베이스 시스템에 대한 로그 관리 방법
KR100688463B1 (ko) 물리 메모리의 데이터 기록 및 삭제 방법
CN110968528B (zh) 应用统一缓存架构为非易失存储介质组装数据

Legal Events

Date Code Title Description
A201 Request for examination
A107 Divisional application of patent
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20160318

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20170317

Year of fee payment: 5