KR20150020137A - 가변 크기 플래시 변환 계층 - Google Patents

가변 크기 플래시 변환 계층 Download PDF

Info

Publication number
KR20150020137A
KR20150020137A KR20140105900A KR20140105900A KR20150020137A KR 20150020137 A KR20150020137 A KR 20150020137A KR 20140105900 A KR20140105900 A KR 20140105900A KR 20140105900 A KR20140105900 A KR 20140105900A KR 20150020137 A KR20150020137 A KR 20150020137A
Authority
KR
South Korea
Prior art keywords
data
page
read
units
compressed data
Prior art date
Application number
KR20140105900A
Other languages
English (en)
Other versions
KR102307382B1 (ko
Inventor
얼 티 코헨
Original Assignee
엘에스아이 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US14/055,336 external-priority patent/US9495288B2/en
Application filed by 엘에스아이 코포레이션 filed Critical 엘에스아이 코포레이션
Publication of KR20150020137A publication Critical patent/KR20150020137A/ko
Application granted granted Critical
Publication of KR102307382B1 publication Critical patent/KR102307382B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1068Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in sector programmable memories, e.g. flash disk
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • G06F11/108Parity data distribution in semiconductor storages, e.g. in SSD
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/40Specific encoding of data in memory or cache
    • G06F2212/401Compressed data
    • 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
    • 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/7208Multiple device management, e.g. distributing data over multiple flash devices

Abstract

가변 크기 플래시 변환 계층을 사용하는 방법이 개시된다. 단계 (A)는 비휘발성 메모리로부터 논리 블록 어드레스에 상응하는 데이터를 판독하라는 판독 요청을 수신한다. 단계 (B)는 (i) 비휘발성 메모리의 특정 페이지의 물리 어드레스, (ii) 이전에 저장된 압축된 데이터에 대한 특정 페이지 내의 오프셋 및 (iii) 압축된 데이터의 길이를 획득하기 위해 맵의 특정 엔트리를 판독한다. 특정 엔트리는 논리 블록 어드레스와 연관된다. 단계 (C)는 오프셋 및 길이를 (i) 특정 페이지 내의 소정의 판독 유닛의 어드레스 및 (ii) 판독될 판독 유닛의 개수로 변환한다. 단계 (D)는 특정 페이지로부터 최대 소정의 판독 유닛으로부터 시작되는 판독 유닛의 개수를 판독한다. 오프셋 및 길이 세밀도는 판독 유닛보다 더 미세하다.

Description

가변 크기 플래시 변환 계층{VARIABLE-SIZE FLASH TRANSLATION LAYER}
본 출원은 2013년 10월 9일자로 출원된 미국 가출원 제61/888,681호, 2013년 8월 16일자로 출원된 미국 가출원 제61/866,672호, 및 2013년 1월 22일자로 출원된 미국 가출원 제61/755,169호에 관한 것이며, 그 각각은 이로써 전체적으로 참조로서 통합된다.
본 출원은 2011년 3월 21일자로 출원된 미국 출원 제13/053,175호에 관한 것이며, 이는 2010년 3월 22일자로 출원된 미국 가출원 제61/316,373호에 관한 것이고, 그 각각은 이로써 전체적으로 참조로서 통합된다.
본 출원은 또한 2012년 10월 4일의 국제 출원일을 갖는 국제 출원 제PCT/US2 012/058583호에 관한 것이며, 이는 2011년 10월 5일자로 출원된 미국 가출원 제61/543,707호의 이익을 주장하고, 그 각각은 이로써 전체적으로 참조로서 통합된다.
본 발명의 분야
본 발명은 일반적으로 컴퓨팅 호스트 및 입력/출력 장치 기술에 관한 것으로서, 특히 가변 크기 플래시 변환 계층을 구현하는 방법 및/또는 장치에 관한 것이다.
종래의 고체 상태 드라이브는 고정된 정수개의 호스트 논리 블록을 비휘발성 메모리의 각각의 페이지에 저장한다. 저장 효율 문제는 비휘발성 메모리의 각각의 페이지의 사용자 데이터 크기 또는 사용 가능 크기가 고정되지 않을 때 발생한다. 고체 상태 드라이브 내의 가변 크기 플래시 변환 계층에 대한 아키텍처는 하드웨어 집중적이다. 페이지 헤더는 사용자 데이터가 고체 상태 드라이브의 페이지 내의 다수의 판독 유닛 중에 저장되는 경우를 식별하기 위해 사용되고, 데이터를 추출하는 것은 우선 페이지 헤더를 판독하고 파싱하는 것을 수반한다.
본 발명은 가변 크기 플래시 변환 계층을 사용하는 방법에 관한 것이다. 단계 (A)는 비휘발성 메모리로부터 논리 블록 어드레스에 상응하는 데이터를 판독하라는 판독 요청을 수신한다. 단계 (B)는 (i) 비휘발성 메모리의 특정 페이지의 물리 어드레스, (ii) 이전에 저장된 압축된 데이터에 대한 특정 페이지 내의 오프셋 및 (iii) 압축된 데이터의 길이를 획득하기 위해 맵의 특정 엔트리를 판독한다. 특정 엔트리는 논리 블록 어드레스와 연관된다. 단계 (C)는 오프셋 및 길이를 (i) 특정 페이지 내의 소정의 판독 유닛의 어드레스 및 (ii) 판독될 판독 유닛의 개수로 변환한다. 단계 (D)는 특정 페이지로부터 최대 소정의 판독 유닛으로부터 시작되는 판독 유닛의 개수를 판독한다. 오프셋 및 길이 세밀도는 판독 유닛보다 더 미세하다.
본 발명의 실시예는 이하의 상세한 설명 및 첨부 청구범위 및 도면으로부터 명백할 것이다.
도 1은 논리 블록 어드레스를 플래시 페이지 내의 고정 크기 영역에 매핑하는 일 실시예의 선택된 상세의 예시이다.
도 2는 논리 블록 어드레스를 플래시 페이지에 선택적으로 걸치는 가변 크기 영역에 매핑하는 일 실시예의 선택된 상세의 예시이다.
도 3은 정수의 판독 유닛을 포함하는 플래시 페이지의 일 실시예의 예시이다.
도 4는 논리 블록 어드레스를 하나 이상의 판독 유닛에 걸치는 가변 크기 영역에 매핑하는 일 실시예의 선택된 상세의 예시이다.
도 5는 헤더 및 데이터를 포함하는 판독 유닛의 일 실시예에 대한 선택된 상세의 예시이다.
도 6은 헤더 및 데이터를 포함하는 플래시 페이지의 일 실시예에 대한 선택된 상세의 예시이다.
도 7은 본 발명의 일 실시예에 따른 헤더 및 데이터를 포함하는 플래시 페이지의 일 실시예에 대한 선택된 상세의 예시이다.
도 8은 다양한 타입의 헤더의 일 실시예에 대한 선택된 상세의 예시이다.
도 9는 맵 엔트리의 일 실시예에 대한 선택된 상세의 예시이다.
도 10은 다양하게 압축된 맵 엔트리의 일 실시예에 대한 선택된 상세의 예시이다.
도 11은 비휘발성 메모리를 판독하는 흐름도이다.
도 12는 고체 상태 드라이브 컨트롤러의 일 실시예에 대한 선택된 상세의 예시이다.
본 발명의 실시예는 (i) 광범위한 데이터 크기를 지원하고/하거나, (ii) 타일링(tiling) 프로세스로 헤더를 생성하고/하거나, (iii) 언타일링(un-tiling) 프로세스로 헤더를 파싱하고/하거나, (iv) 각각의 페이지의 시작에 모든 헤더를 배치하고/하거나, (v) 각각의 페이지 내의 헤더 뒤에 모든 데이터를 배치하고/하거나, (vi) 판독 유닛 경계에 할당되지 않은 오프셋 및 헤더를 사용하고/하거나 (vii) 하나 이상의 집적 회로 및/또는 연관된 펌웨어로 구현될 수 있는 가변 크기 플래시 변환 계층을 제공하는 것을 포함한다.
본 발명은 다수의 방법, 예를 들어 프로세스, 제조 물품, 장치, 시스템, 물질의 구성, 및 컴퓨터 판독 가능 저장 매체(예를 들어, 디스크와 같은 광 및/또는 자기 대용량 저장 장치의 매체, 플래시 스토리지와 같은 비휘발성 스토리지를 갖는 집적 회로)와 같은 컴퓨터 판독 가능 매체, 또는 프로그램 명령어가 광 또는 전자 통신 링크를 통해 송신되는 컴퓨터 네트워크로 구현될 수 있다. 상세한 설명은 위에서 확인된 필드에서 사용의 비용, 수익성, 효율, 및 유용성의 개선을 가능하게 하는 본 발명의 하나 이상의 실시예의 설명을 제공한다. 상세한 설명은 상세한 설명의 나머지의 이해를 용이하게 하는 서론을 포함한다. 서론은 본 명세서에 설명된 개념에 따른 시스템, 방법, 제조 물품, 및 컴퓨터 판독 가능 매체 중 하나 이상에 대한 예시적 실시예를 포함한다. 더 상세히 논의되는 바와 같이, 본 발명은 특허받은 청구 범위 내의 모든 가능한 수정 및 변화를 포괄한다.
FTL(예를 들어, Flash translation layer)은 논리 블록 어드레스 공간(입력/출력 동작을 입력/출력 장치에 수행하는 호스트에 의해 사용되는 것과 같은) 내의 LBA(예를 들어, logical block address)를 NAND 플래시 비휘발성 메모리와 같은 비휘발성 메모리(예를 들어, NVM) 내의 물리 위치에 매핑한다. 매핑은 매핑 유닛으로 칭해지는 하나 이상의 논리 블록의 정렬된 유닛 상에서 동작되며, 그 결과 각각의 매핑 유닛은 매핑 유닛의 데이터가 저장되는 상응하는 물리 위치를 갖는다(매핑 유닛이 결코 기록되지 않았거나 트리밍되면 NULL 물리 위치의 가능성을 포함함). 예를 들어, 4 KB(예를 들어, kilobyte) 매핑 유닛의 경우, 8개의 인접한(및 전형적으로 8개의 섹터 정렬된) SATA(예를 들어, Serial Advanced Technology Attachment) 512 바이트 섹터는 단일 유닛으로 매핑된다. 일반적으로, 맵과 같은 변환 테이블은 각각의 변환을 매핑 유닛과 연관된 논리 블록 어드레스로부터 비휘발성 메모리 및/또는 다른 제어 정보 내의 물리 어드레스로 저장하기 위해 매핑 유닛 당 엔트리를 갖는다.
NAND 플래시와 같은 비휘발성 메모리는 플래시 페이지로 칭해지는 기록 가능(또는 프로그램 가능) 유닛을 제공한다. 플래시 페이지는 사용자(비에러 정정 코드) 데이터 바이트의 수 및 메타데이터 및 ECC(예를 들어, error correction coding)에 대한 여유 공간의 양을 포함하고, 일반적으로 비휘발성 메모리의 최소 기록 가능 유닛이다. 전형적 플래시 페이지 크기는 사용자 데이터의 8KB 또는 16KB 또는 32KB 인 반면, 전형적 매핑 유닛 크기는 4KB 또는 8KB이다. (용어 "사용자" 데이터가 플래시 페이지에 대해 사용되지만, 일부 플래시 페이지는 맵 데이터 및/또는 체크포인트 데이터와 같은 "시스템" 데이터를 저장한다. 사용자 데이터는 일반적으로 플래시 페이지의 비-ECC 부분을 지칭하도록 의도된다.) 플래시 페이지는 블록 전형적으로 블록 당 128, 256, 또는 512 플래시 페이지로 조직된다. 블록은 소거될 수 있는 최소 크기 유닛이고, 플래시 페이지는 페이지가 (재)기록될 수 있기 전에 소거된다.
도 1을 참조하면, 논리 블록 어드레스를 플래시 페이지 내의 고정 크기 영역에 매핑하는 일 실시예의 선택된 상세의 예시가 도시된다. 종래의 플래시 변환 계층은 플래시 페이지(예를 들어, 플래시 페이지(100)) 내의 다수의 사용자 데이터 바이트의 2의 거듭제곱(및/또는 섹터 크기의 배수)인 것을 가정하고, 플래시 페이지를 정수의 매핑 유닛(도 1에 데이터로 각각 도시된)으로 분할한다. 예를 들어, 플래시 페이지 당 16KB의 사용자 데이터 및 4KB 매핑 유닛의 경우, 각각의 플래시 페이지는 4개의 매핑 유닛을 포함하고, 플래시 변환 계층은 각각의 매핑 유닛의 어드레스(예를 들어, LBA[M:U](110))를 각각의 플래시 페이지에 매핑하고 4개의 매핑 유닛 중 하나를 각각의 플래시 페이지 내에 매핑한다. 즉, 각각의 맵 엔트리는 이하와 같은 각각의 필드를 포함한다:
flash_page_address [n-1:0], flash_page_address가 비휘발성 메모리 내의 고유 플래시 페이지를 지칭하는 mapping_unit_within_flash_page [k-1:0] - mapping_unit_within_flash_page는 각각의 플래시 페이지의 2k 매핑 유닛 크기 부분(k는 전체 비휘발성 메모리에 대해 고정임) 중 하나를 지칭함 -. 서브페이지 어드레스(104)는 flash_page_address 및 mapping_unit_within_flash_page의 조합이다. 섹터 기반 어드레싱에 대해, 논리 블록 어드레스의 저차 비트(예를 들어, LBA [U-1:0](111))는 매핑 유닛 유닛 내에 다수의 섹터(예를 들어, 서브페이지(113) 내의 섹터(들))와 같은 서브 부분을 지정한다.
도 2를 참조하면, 논리 블록 어드레스를 플래시 페이지에 선택적으로 걸치는 가변 크기 영역에 매핑하는 일 실시예의 선택된 상세의 예시가 도시된다. VFTL(예를 들어, variable-size flash translation layer)은 매핑 유닛의 어드레스(예를 들어, LBA [M:U](110))를 하나 이상의 플래시 페이지의 가변 크기 영역에 개념적으로 매핑한다(예를 들어, 매핑 유닛의 데이터가 플래시에 저장되기 전에 압축되기 때문에, 및/또는 다른 예에서, 매핑 유닛이 호스트에 의해 객체 스토어에 대해서와 같이 가변 크기 피스로 기록되기 때문에). 그러나, 각각의 맵 엔트리에 완전한 바이트 어드레스(204) 및 바이트 데이터 길이(206)를 제공하는 것은 종래의 플래시 변환 계층과 비교될 때 맵 엔트리를 크게 한다.
가변 크기 플래시 변환 계층은 일부 SSD(예를 들어, solid-state disk)에 사용된다. 고체 상태 디스크 시스템은 일반적으로 랜덤 액세스 성능 제약이 전체 시스템 설계에서 구동 인자인 하이 엔드 클라이언트 및/또는 엔터프라이즈 응용을 위해 설계되었다. 로우 엔드 및/또는 이동 환경을 위한 가변 크기 플래시 변환 계층을 구성하기 위해, 변화는 구동 인자로서 순차 성능을 구성하기 위해 구현될 수 있다. 본 발명의 실시예는 순차 판독 성능이 지배적인 제약인 덜 비싸고 더 효율적인 로우 엔드 및 이동 비휘발성 메모리 시스템을 가능하게 하기 위해 사용자 데이터 및 VFTL 메타데이터를 조직하는 하나 이상의 방법을 제공한다.
도 3을 참조하면, 정수의 판독 유닛을 포함하는 플래시 페이지의 일 실시예의 예시가 도시된다. 일부 실시예에서, 가변 크기 플래시 변환 계층은 또한 "판독 유닛" 어드레스로 칭해지는 Epage(예를 들어, ECC page) 어드레스에 매핑함으로써 매핑 유닛의 어드레스로부터 물리 어드레스까지 매핑을 수행한다. Epage(또는 판독 유닛)은 비휘발성 메모리로부터 판독되고 비휘발성 메모리의 콘텐츠를 보호하기 위해 사용되는 에러 정정 코드에 의해 정정될 수 있는 최소 양의 데이터이다. 즉, 각각의 판독 유닛은 데이터의 양 및 그 데이터를 보호하는 상응하는 ECC 체크 바이트를 포함한다. 일부 실시예에서, 플래시 페이지(플래시 페이지(100)와 같은), 또는 다른 실시예에서, 기록의 목적을 위한 유닛으로 취급되는 플래시 페이지의 그룹은 도 3에 예시된 바와 같이 정수의 판독 유닛으로 분할된다.
다양한 실시예에서, 플래시 페이지 당 판독 유닛의 수는 변화되도록 허용된다. 예를 들어, 비휘발성 메모리의 일부 부분은 다른 것(에러 정정 코딩을 위해 플래시 페이지에서 더 많은 바이트를 사용하는)보다 더 강한 에러 정정 코드를 사용하고, 판독 유닛 당 더 적은 판독 유닛 및/또는 더 적게 사용 가능한 데이터를 갖는다. 다른 예에서, 플래시 페이지 당 판독 유닛의 수는 비휘발성 메모리가 사용됨에 따라 변화되어, 프로그램/삭제 사이클은 비휘발성 메모리를 약화시키는 경향이 있으므로, 비휘발성 메모리가 더 사용(마모)됨에 따라 더 강한 에러 정정 코드를 초래한다.
다양한 실시예에 따르면, 사용되는 에러 정정 코드는 RS(예를 들어, Reed-Solomon) 코드; BCH(예를 들어, Bose Chaudhuri Hocquenghem) 코드; 터보 코드; LDPC(예를 들어, low-density parity-check) 코드; 극성 코드; 비이진 코드; RAID(예를 들어, redundant array of inexpensive/independent disk) 코드; 소거 코드; 임의의 다른 에러 정정 코드; 구성, 연결, 및 인터리빙을 포함하는 상술한 것의 임의의 조합 중 하나 이상이다. 전형적 코드워드 크기는 512 바이트(플러스 ECC 바이트)에서 2176 바이트(플러스 ECC 바이트)까지의 범위이다. 전형적인 ECC 바이트의 수는 단지 몇 바이트에서 수백 바이트까지의 범위이다.
도 4를 참조하면, 논리 블록 어드레스를 하나 이상의 판독 유닛에 걸치는 가변 크기 영역에 매핑하는 일 실시예의 선택된 상세의 예시가 도시된다. 일부 실시예에서, VFTL 매핑은 가변 크기(예를 들어, 압축된) 매핑 유닛의 어드레스(예를 들어, LBA[M:U](110))를 판독 유닛 어드레스(404) 및 스팬(판독 유닛의 개수)(406)으로서 맵의 각각의 엔트리으로 표현되는 판독 유닛의 개수에 매핑한다. 맵 엔트리 중 하나에 의해 참조되는 판독 유닛은 하나 이상의(논리적으로 및/또는 물리적으로) 순차 플래시 페이지, 예를 들어 옵션으로 및/또는 선택적으로 플래시 페이지 경계를 가로지르는 판독 유닛의 개수이다. 맵의 엔트리만으로는 일반적으로 연관된 데이터를 위치시키기에 충분하지 않고(엔트리가 판독 유닛만을 참조하고, 판독 유닛 내의 데이터의 위치를 참조하지 않으므로), 참조된 판독 유닛 내의 추가 정보(헤더와 같은)는 연관된 데이터를 정확히 위치시키기 위해 사용된다.
일부 실시예에서, 데이터는 비휘발성 메모리의 다수의 다이를 가로질러 스트라이핑되는 방식으로 플래시 페이지에 기록된다. 다수의 다이를 가로질러 기록 데이터를 스트라이핑하는 것은 플래시 페이지를 스트라이프 당 한 번 주어진 다이로 단지 기록함으로써 더 큰 기록 대역폭을 가능하게 한다. 다수의 다이를 가로지르는 블록의 스트라이프는 추가 실시예 및/또는 사용 시나리오에서 RAID와 같은 리던던시가 예를 들어 하나의 리던던시 다이를 사용하여 리던던시 블록상에 추가되기 때문에 리던던시 블록으로 칭해진다. 다양한 실시예에서, 비휘발성 메모리의 일부 블록은 결함이 있어 기록 시에 스킵되며, 그 결과 스트라이핑은 때때로 다이 중 하나가 스킵되는 (나쁜 블록의 플래시 페이지 내로의 기록보다는 오히려) 구멍을 갖는다. 그러한 실시예에서, "순차" 플래시 페이지는 플래시 페이지가 기록되는 순서에 의해 결정되는 로직 순서에 순차적이다.
도 5를 참조하면, 헤더 및 데이터를 포함하는 판독 유닛의 일 실시예에 대한 선택된 상세의 예시가 도시된다. 다양한 실시예에서, 도 4에 예시된 매핑은 판독 유닛 내에 가변 크기 데이터를 위치시키는 기준을 발생시킨다. 도 5에 예시된 바와 같이, 각각의 판독 유닛(예를 들어, 판독 유닛(500 및 510))은 하나의 헤더(501)를 갖고, 헤더는 전형적으로 가변 크기 데이터가 하나 이상의 판독 유닛으로 "타일링"(예를 들어, 폐기된 공간 없이 조밀하게 패킹)되므로 하드웨어에 의해 기록된다. 헤더는 전형적으로 비휘발성 메모리가 판독될 때 가변 크기 데이터를 추출하기 위해 다른 하드웨어에 의해 해석된다. 가변 크기 데이터는 매칭 논리 블록 어드레스를 갖는 헤더 중 하나에서 각각의 오프셋 및 길이에 의해 위치되고, 데이터는 옵션으로 및/또는 선택적으로 판독 유닛("데이터, 시작" 및 "데이터, 계속"에 의해 예시되는 가변 크기 데이터에 의해 예시된 것과 같은)에 걸친다.
다양한 실시예에서, 헤더는 또한 재이용(예를 들어, 가비지 컬렉션)의 일부로서 사용된다 - 헤더에 논리 블록 어드레스(또는 등가적으로, 매핑 유닛 어드레스)를 포함하는 것은 판독 유닛 내에서 가변 크기 데이터를 찾는 것을 가능하게 하고, 가변 크기 데이터가 내부에서 여전히 유효하거나 중복 기재되었다면(맵에서 논리 블록 어드레스를 룩업하고 맵이 여전히 특정 판독 유닛의 물리 어드레스를 참조하거나, 핀독 유닛 중 다른 판독 유닛을 참조하도록 갱신되었는지를 판단함으로써) 판독 유닛 중 특정 판독 유닛이 판독될 때를 결정하는 방식을 제공한다.
일부 실시예에서, 논리 블록 어드레스에 기초하여 판독 유닛으로부터 데이터를 추출하는 전용 하드웨어는 랜덤 판독을 위해 고효율로 동작하도록 구현된다. 전용 하드웨어는 주어진 논리 블록 어드레스를 갖는 헤더 중 하나를 발견하기 위해 하나 이상의 판독 유닛 내에서 헤더를 파싱하며, 그 다음에 연관된 가변 크기 데이터를 추출하기 위해 각각의 길이 및 오프셋을 사용한다. 그러나, 하드웨어 기반 해결법은 (실리콘 면적 및 전력에서) 비용이 많이 든다. 순차 성능이 랜덤보다 더 중요한 로우 엔드 및/또는 이동 환경에 대해, 변화는 실리콘 면적을 감소시키고, 전력을 절약하고, 높은 순차 처리율을 달성하기 위해 가변 크기 플래시 변환 계층에 구현된다.
일부 실시예에서, SRO-VFTL(예를 들어, sequential-read-optimized variable-size flash translation layer)은 데이터 내의 헤더에 대한 임의의 갭 없이 데이터를 플래시 페이지(또는, 일부 실시예에서, 기록의 목적을 위한 유닛으로서 취급되는 플래시 페이지의 그룹)로 타일링한다 - 모든 헤더는 플래시 페이지의 일 부분으로 그룹화된다. 추가 실시예에서, 헤더는 (일부 가변 크기 플래시 변환 계층에서와 같이) 데이터에 액세스하기 위해 동적으로 사용되지 않는 것이 아니라, 재이용 및 복구에만 사용된다. 그 대신에, 맵의 엔트리는 플래시 페이지 내의 가변 크기(예를 들어, 압축된) 데이터를 발견하기 위해 사용되는 완전한 정보를 포함한다. 헤더 및 데이터를 플래시 페이지의 상이한 부분으로 분리하는 것은 헤더만을 포함하는 판독 유닛, 헤더 및 데이터(그러나 플래시 페이터 당 단지 하나의 그러한 판독 유닛)의 혼합을 포함하는 판독 유닛, 및 데이터만을 포함하는 판독 유닛을 초래한다.
저비용으로 순차 판독 처리량을 위해 구성되지만, 순차 판독 최적화 가변 크기 플래시 변환 계층은 초(예를 들어, IOP) 당 랜덤 판독 입력/출력 동작, 초 당 랜덤 기록 입력/출력 동작, 및 순차 기록 처리량과 같은 다른 메트릭스상에서 비교적 잘 수행될 수 있다. 그러나, 하드웨어의 제거는 제어 프로세서에 큰 부담을 주는 각각의 판독 유닛에서 헤더에 의한 VFTL 스타일 데이터 타일링과 같은 기능을 원조한다.
도 6을 참조하면, SRO-VFTL 플래시 페이지의 제 1 실시예의 예시가 도시된다. 도 7을 참조하면, SRO-VFTL 플래시 페이지의 제 2 실시예의 예시가 본 발명의 일 실시예에 따라 도시된다. 도 6 및 도 7의 실시예 사이의 차이는 이전 플래시 페이지(640)로부터의 연속 데이터가 헤더 이전에 있는지 이후에 있는지의 여부이다. 플래시 페이지 내의 데이터의 다양한 실시예 및 배열이 고려된다.
다양한 실시예에 따르면, 플래시 페이지는 이하 중 하나 이상을 포함한다:
- 마스터 헤더(610), 옵션으로 및/또는 선택적으로 리던던시 블록 헤더(620)(예를 들어, 리던던시 블록 내의 각각의 블록의 제 1 페이지에 추가된 헤더), 및 제로 이상의 부가 패킹 헤더(630)를 포함하는 헤더. 모든 플래시 페이지는 적어도 데이터(헤더와 연관된)가 플래시 페이지에서 시작되는 이하의 헤더 및 포인터의 수의 카운트를 갖는다. 일부 실시예에서, 헤더는 바이트 정렬될 수 있지만, 각각 6 바이트(예를 들어, B)만이다. 헤더는 데이터 헤더, 에포크 헤더 및 패딩을 포함할 수 있지만, 이에 제한되지 않는다. 데이터 헤더는 매핑 유닛 어드레스 및 길이를 이용한다. 오프셋은 모든 데이터가 연속적으로 패킹되기 때문에 암시적이다.
- 옵션으로 및/또는 선택적으로 이전 플래시 페이지로부터의 연속 데이터(매핑 유닛의 가변 크기 데이터의 일부)(640).
- 플래시 페이지를 채우는 하나 이상의 매핑 유닛(650)의 패킹된(예를 들어, 옵션으로 및/또는 선택적으로 압축된) 데이터, 그 마지막은 옵션으로 및/또는 선택적으로 후속 플래시 페이지에서 계속된다.
- 플래시 페이지의 마지막에서의 선택적 패딩(650에 포함되는). 다양한 실시예에서, 데이터가 바이트 패킹되지만(예를 들어, 구멍이 없음), 높게 압축되면(예를 들어, 매우 많은 헤더) 플래시 페이지의 마지막에서 패딩되는 것이 가능하다. 패딩은 예를 들어 (i) 플래시 페이지에 추가된 데이터의 마지막 가변 크기 피스가 헤더의 크기보다 더 적은 미사용 바이트로 남겨져서(새로운 헤더가 데이터의 다른 가변 크기 피스를 시작하도록 추가될 수 없으면) 그리고 (ii) 옵션으로 및/또는 선택적으로, 플래시 페이지 당 지정된 수의 헤더가 초과되어(플래시 페이지에 저장되는 지정된 수의 매핑 유닛이 지정된 수의 헤더에 의해 제한되고 매핑 유닛의 데이터의 크기에 의해 제한되지 않으면) 사용된다.
일부 실시예에서, 순차 판독 최적화 가변 크기 플래시 변환 계층에 의한 복구 및/또는 재이용(예를 들어, 가비지 컬렉션)은 유리하게 플래시 페이지 각각의 헤더 부분만을 판독하고/하거나 에러 정정하고/하거나 검사할 수 있고, 비순차 판독 최적화 가변 크기 플래시 변환 계층에서와 같이 모든 판독 유닛을 그렇게 할 수 있는 것은 아니다. 재이용이 플래시 페이지의 데이터가 재기록될 수 있다고 판단하면, 그 데이터는 또한 판독될 수 있고 또한 에러 정정될 수 있다. 일부 실시예에서, 전체 플래시 페이지는 재이용을 위해 판독되지만, 헤더 부분만은 플래시 페이지 내의 일부 데이터가 재이용되어야 한다는 판단이 이루어질 때까지 에러 정정된다.
다양한 실시예에서, 플래시 페이지 당 헤더의 개수는 모든 헤더가 비휘발성 메모리로부터 판독된 것을 보장하기 위해 판독될 수 있는 플래시 페이지 당 판독 유닛의 개수를 억제하기 위해 제한된다. 도 6의 실시예에서, 최대 수의 헤더를 포함하기에 충분한 개수의 판독 유닛만이 판독된다. 도 7의 실시예에서, 추가적인 개수의 판독 유닛이 이전 플래시 페이지(예를 들어, 연속 데이터(640))로부터 완료되는 최대 크기의 데이터를 처리하기 위해 판독된다. 그러나, 도 7의 실시예는 데이터의 완성에서 바이트 수가 연관된 맵 엔트리의 각각의 오프셋 및 길이, 및 이전 플래시 페이지 내의 사용자(비에러 정정 코드) 데이터의 바이트의 수에 기초하여 결정되므로, 일정 개수의 판독 유닛이 연관된 맵 엔트리으로부터 결정될 이전 플래시 페이지로부터의 데이터의 완성에 액세스할 수 있게 한다. 게다가, 데이터의 완성 전의 헤더만이 옵션 리던던시 블록 헤더(각각의 블록 내의 제 1 페이지와 같은 공지된 플래시 페이지에만 존재하는) 및 마스터 헤더(각각의 플래시 페이지에 항상 존재하는)이다. 도 6의 실시예에서, 비휘발성 메모리에 2회 액세스해야 하지 않으면서 데이터의 완성을 판독하기 위해, 최대 수의 헤더가 존재하는(또는 전체 플래시 페이지가 판독되는) 것으로 가정된다.
일부 실시예에서, 순차 판독 최적화 가변 크기 플래시 변환 계층은 복수의 맵 엔트리를 갖는 단일 레벨 맵을 사용한다. 다른 실시예에서, 순차 판독 최적화 가변 크기 플래시 변환 계층은 SLM(예를 들어, second-level map) 페이지를 가리키는 FLM(예를 들어, first-level map)을 갖는 2개의 레벨 맵과 같은 멀티 레벨 맵을 사용하고, 제 2 레벨 맵 페이지 각각은 복수의 리프 레벨 맵 엔트리를 포함한다. 추가 실시예에서, 멀티 레벨 맵은 3개의 레벨은 2개보다 많은 레벨을 갖는다. 일부 실시예 및/또는 사용 시나리오에서, 멀티 레벨 맵의 사용은 맵의 관련(예를 들어, 사용 시의) 부분만이 로컬(예를 들어, 온 칩) 메모리에 저장(예를 들어, 캐시)될 수 있게 하여, 맵을 유지하는 비용을 감소시킨다. 예를 들어, 전형적 사용 패턴이 임의의 시점에 활성인 1 기가바이트(예를 들어, GB)의 논리 블록 어드레스 공간을 갖는다면, 이때 논리 블록 어드레스 공간의 활성 1GB 부분에 액세스하기에 충분한 맵의 부분만이 비휘발성 메모리에 저장되는 것과 대조적으로 빠른 접근을 위해 로컬 저장된다. 논리 블록 어드레스 공간의 활성 부분의 외부 참조는 비휘발성 메모리로부터 멀티 레벨 맵의 하나 이상의 레벨의 요청된 부분을 인출하여, 옵션으로 및/또는 선택적으로 맵의 다른 로컬 저장된 부분을 대체한다.
리프 레벨 맵 엔트리 각각은 복수의 매핑 유닛 중 하나에 대한 어드레스와 연관된다(상응한다). 논리 블록 어드레스는 논리 블록 어드레스의 제로 이상의 LSB(예를 들어, least-significant bit)를 제거하고/하거나 정렬의 목적을 위해 논리 블록 어드레스에 상수를 추가함으로써와 같이, 매핑 유닛 어드레스로 변환되고, 매핑 유닛 어드레스는 맵의 상응하는 엔트리를 결정하기 위해 맵에서 룩업된다.
도 8을 참조하면, 다양한 타입의 헤더에 대한 일 실시예의 상세의 예시가 도시된다. 도 8의 예에서, 헤더는 6 바이트 각각에 맞게 포맷되었다. 다양한 실시예에 따르면, 다양한 타입의 헤더는 이하 중 하나이다: 동일한 크기의 전체; 옵션으로 및/또는 선택적으로 상이한 크기; 헤더의 크기를 지정하는 각각의 필드의 각각의 포함; 상이한 플래시 페이지의 크기 변화; 및 상술한 것의 임의의 조합.
다양한 실시예에 따르면, 플래시 페이지 내의 헤더는 이하 중 하나 이상을 포함한다:
- 가변 크기 데이터 부분과 연관된 정보를 표시하는 데이터 헤더(810). 일부 실시예에서, 데이터 헤더와 연관된 데이터는 데이터 헤더가 나타남에 따라 동일한 플래시 페이지에서 시작된다. 추가 실시예 및/또는 사용 시나리오에서, 플래시 페이지만이 데이터 헤더에 대한 나머지 공간을 가지면, 연관된 데이터의 모두는 후속 플래시 페이지에서 시작된다.
- SLM(예를 들어, second-level map) 헤더(820)와 같은 맵 헤더. 제 2 레벨 맵 헤더는 (제 2 레벨 맵 재이용 및/또는 복구에 대해서와 같이) 어느 제 2 레벨 맵 페이지가 저장되고 있는지를 표시하는 FLMI(예를 들어, first-level map index)를 포함한다.
로그/체크포인트 헤더(820). 로그/체크포인트 헤더는 재이용, 복구, 에러 처리, 디버깅, 또는 다른 특수 조건에 사용되는 데이터를 표시한다.
에포크 헤더(830)는 데이터를 상응하는 맵/체크포인트 정보와 연관시키는 복구의 일부로 사용된다. 전형적으로, 플래시 페이지 당 적어도 하나의 에포크 헤더가 있다.
- 마스터 헤더(870)는 플래시 페이지에 헤더의 개수에 관한 정보를 제공하기 위해 플래시 페이지 당 한 번 그리고 비헤더 데이터가 플래시 페이지 내에서 시작되는 경우 사용된다. 다양한 기법이 도 6 및 도 7의 실시예에 예시된 것과 같이 비헤더 데이터의 시작을 결정한다.
- 리던던시 블록 헤더(880)는 리던던시 블록 내의 각각의 블록에서의 제 1 플래시 페이지와 같은 특정 플래시 페이지에 사용된다.
- 패딩 헤더, 더 큰 길이를 지원하는 체크포인트 헤더 등과 같은 다른 타입의 헤더(840).
일부 실시예에서, 일부 헤더는 다수의 서브타입의 헤더를 제공하는 타입 필드를 포함한다. 다양한 실시예에서, 일부 헤더는 헤더와 연관된 데이터의 길이를 포함하는 LEN(length) 필드를 포함한다. 다른 실시예에서, LEN 필드보다는 오히려, 일부 헤더는 헤더와 연관된 데이터의 마지막에 오프셋(플래시 페이지 내의)을 포함하는 OFFSET(offset) 필드(도시되지 않은)를 포함한다. (데이터의 가변 크기 피스 중 마지막 피스가 플래시 페이지에 걸치면, OFFSET는 후속 플래시 페이지 내의 오프셋 또는 후속 플래시 페이지 내의 다수의 바이트이다.) LEN 필드 또는 오프셋 필드 중 단 하나는 일반적으로 데이터의 가변 크기 피스가 폐기되지 않은 공간으로 패킹된 상태에서, 플래시 페이지 내의 데이터의 가변 크기 피스 각각의 시작 위치 및 종료 위치가 플래시 페이지(예를 들어, 도 7에서와 같이 헤드 직후의) 내의 데이터의 제 1 가변 크기 피스의 시작 위치, 및 LEN 또는 OFFSET 필드의 리스트에 의해 암시되므로 구현된다.
도 9를 참조하면, 맵 엔트리(900)의 일 실시예에 대한 선택된 상세의 예시가 도시된다. 다양한 실시예에 따르면, 맵 엔트리는 이하 중 하나 이상을 포함할 수 있다:
- 물리 플래시 페이지 어드레스,
- 가변 크기 데이터 아이템에 대한 플래시 페이지 내의 오프셋,
- 가변 크기 데이터 아이템의 길이, 및
- 다른 제어 정보.
일부 실시예에서, 길이는 예를 들어 제로의 값이 지정된 최소 길이에 상응하도록 오프셋됨으로써 인코딩된다. 추가 실시예에서, 지정된 최소 길이보다 더 적게 압축되는 데이터는 적어도 크기에 있어서 지정된 최소 길이이도록 패딩된다.
다양한 실시예에서, SRO-VFTL 맵 엔트리는 SRO-VFTL 맵 엔트리가 상응하는 데이터의 전체 오프셋 및 바이트 길이를 저장하기 때문에 VFTL 맵 엔트리보다 더 크다. 비휘발성 메모리에 저장될 때 맵 엔트리의 크기를 감소시키는 것은 유리할 수 있다. 전형적인 사용에서, 데이터는 종종 적어도 1보다 더 큰 일부 세밀도 및/또는 연속 매핑 유닛의 평균 수에 의해 순차적으로 판독 및 기록되고, 기록의 순차적 특징을 이용하는 맵 엔트리 압축 포맷은 높은 맵 압축율을 구현하고 생성하는 데 비교적 저렴하다. 맵 엔트리의 압축은 플래시 페이지의 경계가 교차될 때까지 동일한 플래시 페이지로 가는 순차적 기록 데이터에 의해 더 원조된다.
도 10을 참조하면, 다양하게 압축된 맵 엔트리의 일 실시예에 대한 선택된 상세의 예시가 도시된다. 다양한 맵 엔트리는 비압축(1010), 이전 맵 엔트리과 동일한 플래시 페이지 어드레스를 갖는 것(1020), 이전 맵 엔트리과 동일한 플래시 페이지 어드레스를 갖고 이전 데이터가 종료되는 오프셋에서 시작하는 것(1030), 및 이전 맵 엔트리과 동일한 플래시 페이지 어드레스를 갖고, 이전 데이터가 종료되는 오프셋에서 시작하고, 이전 맵 엔트리과 동일한 길이를 갖는 것(1040)을 포함한다.
멀티 레벨 맵을 갖는 일부 실시예에서, 캐시는 하위 레벨(리프 레벨과 같은) 맵 페이지로 유지된다. 캐시된 맵 페이지는 비압축 형태이어서, 프로세서에 의해 빠른 액세스를 제공한다. 맵 페이지가 (예컨대 비휘발성 메모리 또는 DRAM(예를 들어, dynamic random access memory)으로부터) 캐시로 이동될 때, 맵 페이지가 압축되지 않는다. 맵 페이지가 (수정되는 것으로 인한 것과 같이) 캐시로부터 플러시될 때, 맵 페이지는 스토리지(비휘발성 메모리에서와 같이)에 대해 압축된다. DRAM이 동적 랜덤 액세스 메모리에 맵 페이지의 일부 또는 전부를 저장함으로써 레이턴시를 감소시키기 위해 사용되는 다양한 실시예에 따르면, 동적 랜덤 액세스 메모리 내의 맵 페이지는 이하 중 하나 이상으로 저장된다: 압축된 형태; 비압축된 형태; 선택적으로 압축되거나 비압축된 형태; 및 동적 랜덤 액세스 메모리 내의 맵 페이지의 압축된 버전에 액세스하기 사용되는 인디렉션 테이블(indirection table).
일부 실시예에서, 호스트 기록 명령의 호스트 기록 데이터는 호스트 기록 데이터가 도착함에 따라 옵션으로 또는 선택적으로 압축되고, 로컬(온 칩과 같은) 메모리에 FIFO(예를 들어, first-in-first-out)와 같은 방식으로 저장된다. 예를 들어, 일부 실시예에서, 호스트 기록 데이터는 펌웨어 데이터 구조, 플래시 통계, 하나 이상의 페이지 맵을 유지하는 캐시와 같은 맵의 부분, 재이용 판독 데이터를 포함하는 비휘발성 메모리로부터의 판독 데이터, 비휘발성 메모리에 기록될 데이터의 헤더, 펌웨어 코드, 및 다른 사용과 함께, UBUF(예를 들어, 도 12의 unified buffer)에 저장된다. 다른 실시예에서, 하나 이상의 전용 메모리는 고체 상태 드라이브의 다양한 로컬 스토리지 기준에 사용된다.
호스트로부터 도착하는 데이터의 각각의 매핑 유닛의 경우, 고체 상태 드라이브의 제어 프로세서(예를 들어, 도 12의 CPU(central processing unit))는 이하 중 하나 이상을 통지받는다: 각각의 매핑 유닛 어드레스, 각각의 로컬 메모리 어드레스, 및/또는 호스트 데이터의 가변 크기(예를 들어, 압축된)에 대한 각각의 매핑 유닛의 각각의 길이. 제어 프로세서는 플래시 페이지의 기록의 순서, 및 플래시 페이지 각각에 이용 가능한 비-ECC 바이트의 전체 수를 결정하도록 인에이블된다. 플래시 페이지 중 주어진 하나에 이용 가능한 비-ECC 바이트의 전체 수에 따르면, 제어 프로세서는 헤더의 양 및 주어진 플래시 페이지에 배치된 데이터의 양을 결정하도록 인에이블된다. 예를 들어, 제어 프로세서는 주어진 플래시 페이지에 대한 헤더를 축적하고(지금까지 사용된 헤더의 바이트의 수를 추적하고), 주어진 플래시 페이지가 가득찰 때까지 매핑 유닛 및 헤더의 가변 크기 데이터를 주어진 플래시 페이지에 차례로 추가한다. 주어진 플래시 페이지가 가득찰 때, 주어진 플래시 페이지에 추가되는 매핑 유닛 중 최종 매핑 유닛에 대한 데이터의 마지막 부분은 주어진 플래시 페이지에 맞지 않을 가능성이 있고, 플래시 페이지 중 후속 페이지의 데이터 완성 부분으로서 사용되어, 새로운 헤더 및 데이터에 대한 후속 플래시 페이지에 이용 가능한 비-ECC 바이트의 전체 수를 감소시킨다.
특정 시점에, 하나 이상의 플래시 페이지는 호스트 기록 데이터로 채워지도록 인에이블되고, 하나 이상의 플래시 페이지는 재이용된 데이터로 채워지도록 인에이블된다. 예를 들어, 적어도 2개의 밴드(예를 들어, FIFO와 같은 시리즈의 리던던시 블록)가 채워질 수 있으며, 한 밴드는 "핫" 데이터(예를 들어, 호스트로부터 프레시된)를 갖고 다른 밴드는 "쿨" 데이터(예를 들어, 재이용된)를 갖는다. 예를 계속하면, 다양한 실시예에서, 호스트 기록 데이터는 핫 또는 쿨 밴드 중 하나로 지향되도록 인에이블되고, 재이용된 데이터는 핫 또는 쿨 밴드 중 하나로 지향되도록 인에이블된다.
제어 프로세서는 일련의 각각의 매핑 유닛 어드레스, 로컬 메모리 어드레스 및 길이를 이하 중 하나 이상으로 변환하도록 인에이블된다: 플래시 페이지의 헤더 부분으로서 플래시 페이지에 기록될 일련의 헤드; 플래시 페이지의 사용자 데이터로서 플래시 페이지에 기록될 로컬 메모리의 순차 부분의 제 1 시작 어드레스 및 제 1 길이, 적어도 하나의 매핑 유닛의 데이터의 적어도 일부를 포함하는 플래시 페이지의 사용자 데이터 부분; 후속 플래시 페이지의 사용자 데이터 완성 부분으로서 후속 플래시 페이지에 기록될 로컬 메모리의 순차 부분의 제 2 시작 어드레스 및 제 2 길이, 하나의 매핑 유닛 또는 비어 있는 데이터의 부분을 포함하는 사용자 데이터 완성 부분; 플래시 페이지에 기록될 제로 이상의 패딩 바이트의 수 - 패딩 바이트는 예를 들어 사용자 데이터 완성 부분이 비어 있거나 플래시 페이지가 채워져 있지 않으면 사용됨 - . 유리하게는, 제어 프로세서는 일련의 각각의 매핑 유닛 어드레스, 로컬 메모리 어드레스 및 길이를 재포맷에 의해 일련의 헤더로 간단히 변환시키고, 플래시 페이지(일련의 헤더, 이전 플래시 페이지의 완성 부분, 사용자 데이터 부분, 및 임의의 패딩 바이트)를 포함하는 부분을 비휘발성 메모리에 전송하는 소수의 DMA(예를 들어, direct memory access) 명령을 생성하도록 인에이블된다.
다양한 실시예에서, 호스트 기록 데이터의 압축은 옵션으로 및/또는 선택적으로 인에이블된다. 제 1 예에서, 호스트 기록 명령의 정보는 선택적으로 압축을 인에블한다. 제 2 예에서, 압축은 호스트 기록 명령의 논리 블록 어드레스의 함수로서 선택적으로 인에이블된다. 제 3 예에서, 압축은 호스트 기록 데이터의 압축이 호스트 기록 데이터의 크기를 감소시키지 않았다면 선택적으로 디스에이블된다. 압축이 인에이블되지 않으면, 호스트 기록 데이터는 비압축으로 저장된다. 다양한 실시예에 따르면, 맵의 엔트리는 상응하는 데이터가 이하 중 하나 이상에 의해 압축되거나 압축되지 않는지를 표시한다: 맵의 각각의 엔트리 내의 각각의 비트; 및/또는 각각의 맵 엔트리에 저장된 길이의 값. 예를 들어, 맵 엔트리 내의 4KB의 길이는 맵 엔트리의 연관된 데이터가 압축되지 않은 것을 표시하는 반면, 4KB 미만의 길이는 연관된 데이터가 압축된 것을 표시한다.
일부 실시예에서, 데이터는 재이용될 리던던시 블록을 선택하고, 플래시 페이지기 기록된 순서로 리던던시 블록의 플래시 페이지를 판독하고, 플래시 페이지의 헤더를 포함하는 판독 유닛만을 처리하고, 데이터가 여전히 유효한지, 및 데이터가 새로운 플래시 페이지의 부분으로서 재이용될 데이터를 모으는 적절한 새로운 헤더 및 DMA 명령을 여전히 유효하게 구성하는지를 인식하기 위해 맵 내의 데이터인 각각의 헤더의 논리 블록 어드레스(또는 등가 매핑 유닛 어드레스)를 룩업함으로써 재이용된다. 그 다음, 새로운 플래시 페이지는 비휘발성 메모리에 기록된다
도 11을 참조하면, 비휘발성 메모리를 판독하는 흐름도(1100)의 예시가 도시된다. 비순차 판독 최적 가변 크기 플래시 변환 계층과 대조적으로, 판독 유닛 내의(또는 플래시 페이지 내의) 헤더는 판독 데이터를 추출하기 위해 사용되지 않는다. 비순차 판독 최적화 가변 크기 플래시 변환 계층 및 순차 판독 최적화 가변 크기 플래시 변환 계층 둘 다는 유리하게는 가변 크기 데이터에 액세스하도록 인에이블되고, 원하는 판독 데이터를 포함하는 판독 유닛에만 액세스하도록 인에이블된다.
일부 실시예에서, 논리 블록 어드레스를 포함하는 호스트로부터 판독 명령을 수신하는 것에 대응하여(단계 1110), 제어 프로세서 및/또는 다양한 하드웨어 유닛은 이하 중 하나 이상을 수행할 수 있다:
- 논리 블록 어드레스를 매핑 유닛 어드레스로 변환하는 단계(단계 1114);
- 맵 엔트리 중 연관된 하나를 결정하기 위해 복수의 맵 엔트리를 포함하는 맵에서 매핑 유닛 어드레스를 룩업하는 단계(단계 1118)와;
- 연관된 맵 엔트리의 각각의 플래시 페이지 어드레스를 추출하고(단계 1122) 연관된 플래시 페이지가 플래시 페이지 캐시에 있거나, 비휘발성 메모리로부터 판독되는지를 판단하는 단계(단계 1130)와;
- 연관된 맵 엔트리으로부터 각각의 오프셋 및 길이를 추출하고, 각각의 오프셋 및 길이에 따라 이하를 결정하는 단계(단계 1126)와:
- a. 연관된 플래시 페이지에서 액세스하는 복수의 판독 유닛의 수,
- b. 판독 유닛 오프셋 및 액세스된 판독 유닛의 플래시 페이지 내에서의 전체 판독 유닛 길이, 및
- c. 액세스된 판독 유닛의 디코딩된 버전으로부터 매핑 유닛 어드레스와 연관된 데이터를 추출하고 처리하는(예를 들어, 압축 해제함으로써) DMA 명령;
- 연관된 플래시 페이지가 플래시 페이지 캐시에 있지 않다고 판단하는 것에 대응하여, 비휘발성 메모리로부터 연관된 플래시 페이지의 액세스된 판독 유닛을 판독하고(단계 1134), 데이터를 생성하기 위해 액세스된 판독 유닛상에서 에러 정정 디코딩을 수행하는 단계(단계 1138)와;
- 연관된 맵 엔트리의 각각의 오프셋 및 길이에 따라 정정된 데이터 내에서 연관된 데이터를 추출하고, 추출된 데이터를 압축 해제하는 단계(단계 1142)와;
- 판독 명령에 응하여 압축 해제된 데이터를 호스트에 제공하는 단계(단계 1146).
전형적으로 랜덤 판독을 위해, 연관된 데이터를 판독하기 위해 연관된 플래시 페이지에서 액세스하는 판독 유닛의 개수는 연관된 플래시 페이지에서의 판독 유닛 모두보다 적다. 게다가, 연관된 데이터가 가변 크기 조정됨에 따라, 제 1 논리 블록 어드레스를 참조하는 제 1 판독 명령에 대한 연관된 플래시 페이지에서 액세스하는 판독 유닛의 개수는 제 2 논리 블록 어드레스를 참조하는 제 2 판독 명령에 대한 연관된 플래시 페이지에서 액세스하는 판독 유닛의 개수와 상이하며, 제 2 논리 블록 어드레스는 제 1 논리 블록 어드레스와 상이하다. 일부 실시예에서, 오로지 연관된 플래시 페이지에서 액세스하는 판독 유닛의 개수는 연관된 플래시 페이지로부터 판독된다. 즉, 연관된 데이터의 일부를 포함하는 판독 유닛의 것만이 연관된 데이터를 액세스하기 위해 판독된다.
일부 실시예 및/또는 사용 시나리오에서, 판독 유닛 중 특정 판독 유닛은 제 1 논리 블록 어드레스와 연관된 데이터 중 적어도 일부, 및 제 2 상이한 논리 블록 어드레스와 연관된 데이터 중 적어도 일부를 포함한다.
도 12를 참조하면, 고체 상태 드라이브 컨트롤러(1200)의 일 실시예에 대한 선택된 상세의 예시가 도시된다. 일부 실시예에서, 고체 상태 드라이브 컨트롤러(1200)는 순차 판독 최적화 가변 크기 플래시 변환 계층을 구현하도록 인에이블된다. 다양한 실시예에서, 컨트롤러(1200)는 하나 이상의 집적 회로로 구현될 수 있다.
도 12에 예시된 바와 같이, SerDes(예를 들어, serialization-deserialization)와 같은 HIF(예를 들어, host interface)는 입력/출력 수신기를 통해, 판독 및 기록 명령과 같은 명령을 수신하고, 기록 데이터를 수신하고, 판독 데이터를 송신한다. 명령은 공유 메모리(예를 들어, OpRAM)를 통해 CPU로 송신된다. CPU는 명령을 해석하고 공유 메모리를 통해 SSD 컨트롤러의 다른 부분을 제어한다. 예를 들어, CPU는 공유 메모리를 통해 호스트 수신 데이터경로(예를 들어, HDRx) 또는 플래시 송신 데이터경로(예를 들어, FDTx)와 같은 다양한 데이터경로 송신 및 수신 유닛으로 DMA 명령을 통신하고 이것으로부터 응답을 수신한다.
호스트 인터페이스로부터의 기록 데이터는 호스트 수신 데이터경로(예를 들어, HDRx)를 통해 UBUF(예를 들어, unified buffer)로 전송된다. 다양한 실시예에서, 호스트 수신 데이터경로는 호스트 기록 데이터를 옵션으로 및/또는 선택적으로 압축하고/하거나 암호화하는 로직을 포함한다. 옵션으로 및/또는 선택적으로 압축되고/되거나 암호화된 호스트 기록 데이터는 그 다음 통합 버퍼로부터 플래시 송신 데이터경로(예를 들어, FDTx)를 통해 비휘발성 메모리 및 GAFI(예를 들어, generic flash interface)로 송신된다. 다양한 실시예에서, 플래시 송신 데이터경로는 암호화 및/또는 스크램블링 및/또는 에러 정정 인코딩을 수행하는 로직을 포함한다. 호스트 판독 명령에 응하여, 데이터는 GAFI(예를 들어, generic flash interface)를 통해 비휘발성 메모리로부터 판독되고 플래시 수신 데이터경로(예를 들어, FDRx)를 통해 통합 버퍼로 송신된다. 다양한 실시예에서, 플래시 수신 데이터경로는 에러 정정 디코딩 및/또는 복호화 및/또는 디스크램블링을 통합한다. 다른 실시예에서, 별개의 에러 정정 디코더(예를 들어, LDPC 코드를 구현하는 LDPC-D)는 플래시 수신 데이터경로에 의해 통합 버퍼 내에 저장되는 "원시" 데이터상에서 동작하도록 인에이블된다. 통합 버퍼에서 디코딩된 판독 데이터는 그 다음 호스트 송신 데이터경로(예를 들어, HDTx)를 통해 호스트 인터페이스로 송신된다. 다양한 실시예에서, 호스트 송신 데이터경로는 디코딩된 판독 데이터를 옵션으로 및/또는 선택적으로 암호화하고/하거나 압축 해제하는 로직을 포함한다. 일부 실시예에서, RAID-식 및 RASP(예를 들어, soft-decision processing unit)는 비휘발성 메모리 내에 저장되는 호스트 기록 데이터 및/또는 시스템 데이터를 부가적으로 보호하고/하거나 LDPC-D와의 사용을 위해 연 판정 처리 동작을 수행하기 위해 RAID과 같은 리던던시를 생성하도록 인에이블된다.
다양한 실시예에 따르면, 제어 프로세서의 임의의 동작은 하나 이상의 CPU 중 임의의 것, 하나 이상의 하드웨어 유닛, 및/또는 전술한 것 중 임의의 조합에 의해 수행된다. 예를 들어, 기록을 위해, 일련의 각각의 매핑 유닛 어드레스, 로컬 메모리 어드레스 및 길이의 일련의 헤더로의 변환은 일련의 각각의 매핑 유닛 어드레스, 로컬 메모리 어드레스 및 길이를 일련의 헤더의 포맷과 동일하고/하거나 유사한 포맷으로 하드웨어 공급함으로써 원조된다.
다양한 실시예에 따르면, 비휘발성 메모리에 결합된 고체 상태 드라이브 컨트롤러는 이하 중 하나 이상을 사용하도록 인에이블된다: 통상의 플래시 변환 계층; 가변 크기 플래시 변환 계층; 순차 판독 최적화 가변 크기 플래시 변환 계층; 비휘발성 메모리의 상이한 물리적 부분에서의 전술한 것 중 임의의 조합; SSD 컨트롤러의 논리적 어드레스 공간의 상이한 논리적 부분에서의 전술한 것 중 임의의 조합; 비휘발성 메모리에의 원시 물리적 액세스; 및 SSD 컨트롤러에 결합되는 호스트의 제어 하에서의 전술한 것 중 임의의 조합.
다양한 실시예에 따르면, 호스트 기록 데이터는 비휘발성 메모리에 기록되기 전에 임의로 암호화되고, 비휘발성 메모리로부터 판독된 후에 복호화된다. 추가 실시예에서, 암호화는 호스트 기록 데이터의 압축 후에 발생하고, 복호화는 호스트로 리턴하기 위해 판독되는 데이터의 압축 해제 전에 발생한다.
예시적 실시예가 고체 상태 드라이브를 사용했지만, 본 명세서에서 설명된 기술은 다른 입력/출력 장치 및/또는 하드 디스크 드라이브와 같은 데이터 저장 장치에 일반적으로 적용 가능하다.
이하는 적어도 일부 명확하게 열거된 예시적 조합(예를 들어, EC)을 포함하여 본 명세서에서 설명되는 개념에 따른 다양한 실시예 타입의 부가 설명을 제공하는 예시적 실시예의 수집이고; 예는 상호 배타적이거나, 완전하거나, 제한적인 것으로 의미되지 않고; 본 발명은 이러한 예시적 실시예에 제한되지 않고 오히려 공표된 청구항 및 그것의 균등물의 범위 내에서 모든 가능한 수정 및 변화를 망라한다.
방법(EC1)은 입력/출력 장치에서 그리고 호스트를 통해 입력/출력 장치 인터페이스로, 입력/출력 장치의 비휘발성 메모리로부터의 판독 요청의 논리 블록 어드레스에 상응하는 데이터를 판독하라는 판독 요청을 수신하는 단계와, 판독 요청을 수신하는 것에 대응하여, 비휘발성 메모리의 복수의 페이지 중 특정 페이지의 물리 어드레스, 논리 블록 어드레스에 상응하는 데이터를 기록하는 것에 대응하여 이전에 저장된 압축된 데이터에 대한 특정 페이지 내의 오프셋, 및 압축된 데이터의 바이트의 길이를 획득하기 위해 맵의 다수의 엔트리 중 특정 맵 엔트리를 판독하는 단계와 - 상기 특정 맵 엔트리는 판독 요청의 논리 블록 어드레스와 연관됨 - 압축된 데이터에 대한 특정 페이지 내의 오프셋 및 압축된 데이터의 바이트의 길이를 특정 페이지 내의 복수의 판독 유닛 중 제 1 판독 유닛의 어드레스 및 특정 페이지로부터 판독될 판독 유닛의 개수로 변환하는 단계와, 특정 페이지로부터 판독 유닛의 개수만을 판독하는 단계와, 정정된 데이터를 획득하기 위해 특정 페이지로부터 판독되는 판독 유닛 각각에 에러 정정 디코딩을 수행하는 단계와, 압축된 데이터에 대한 특정 페이지 내의 오프셋 및 압축된 데이터의 바이트의 길이에 따라 정정된 데이터로부터 압축된 데이터를 추출하는 단계와, 리턴 데이터를 생성하기 위해 압축된 데이터를 압축 해제하는 단계와, 리턴 데이터를 호스트에 리턴하는 단계를 포함한다.
방법(EC2)은 입력/출력 장치에서 그리고 호스트를 통해 입력/출력 장치 인터페이스로, 입력/출력 장치의 비휘발성 메모리로부터의 판독 요청의 논리 블록 어드레스에 상응하는 데이터를 판독하라는 판독 요청을 수신하는 단계와, 판독 요청을 수신하는 것에 대응하여, 비휘발성 메모리의 복수의 페이지 중 특정 페이지의 물리 어드레스, 논리 블록 어드레스에 상응하는 데이터를 기록하는 것에 대응하여 이전에 저장된 압축된 데이터에 대한 특정 페이지 내의 오프셋, 및 압축된 데이터의 바이트의 길이를 획득하기 위해 맵의 다수의 엔트리 중 특정 맵 엔트리를 판독하는 단계와 - 상기 특정 맵 엔트리는 판독 요청의 논리 블록 어드레스와 연관됨 - 압축된 데이터에 대한 특정 페이지 내의 오프셋 및 압축된 데이터의 바이트의 길이를 특정 페이지 내의 복수의 판독 유닛 중 제 1 판독 유닛의 어드레스 및 특정 페이지로부터 판독될 판독 유닛의 개수로 변환하는 단계와, 특정 페이지로부터 적어도 특정 페이지 내의 모두보다 적은 판독 유닛의 개수를 판독하는 단계와, 정정된 데이터를 획득하기 위해 특정 페이지로부터 판독되는 판독 유닛 각각에 에러 정정 디코딩을 수행하는 단계와, 압축된 데이터에 대한 특정 페이지 내의 오프셋 및 압축된 데이터의 바이트의 길이에 따라 정정된 데이터로부터 압축된 데이터를 추출하는 단계와, 리턴 데이터를 생성하기 위해 압축된 데이터를 압축 해제하는 단계와, 리턴 데이터를 호스트에 리턴하는 단계를 포함한다.
EC1 또는 EC2에 있어서, 판독될 판독 유닛의 개수는 특정 페이지 내의 판독 유닛의 모두보다 더 적은 방법(EC3).
EC1 또는 EC2에 있어서, 압축된 데이터에 대한 특정 페이지 내의 오프셋 및 특정 페이지 내의 사용자 데이터의 양과 결합되는 압축된 데이터의 바이트 길이에 따라 압축된 데이터의 적어도 일부가 비휘발성 메모리의 페이지의 후속 페이지의 하나 이상의 판독 유닛에 있는 것을 결정하는 단계를 더 포함하는 방법(EC4).
EC4에 있어서, 제 2 처리 노드상의 전체 리던던트 데이터의 갱신에 대응하여, 제 2 처리 노드의 각각의 로컬 리던던시 계산 유닛은 제 2 처리 노드의 각각의 디스트 중 적어도 일부상에 저장하는 전체 리던던트 데이터의 갱신의 데이터에 따라 제 2 리던던트 데이터를 계산하도록 인에이블되는 방법(EC5).
EC1 또는 EC2에 있어서, 비휘발성 메모리의 페이지 중 제 1 페이지는 판독 유닛의 제 1 개수를 포함하고, 비휘발성 메모리의 페이지 중 제 2 페이지는 판독 유닛의 제 2 개수를 포함하고, 판독 유닛의 제 1 개수는 판독 유닛의 제 2 개수와 상이한 방법(EC6).
EC1 또는 EC2에 있어서, 비휘발성 메모리의 페이지 중 제 1 페이지는 사용자 데이터의 제 1 양을 포함하며, 비휘발성 메모리의 페이지 중 제 2 페이지는 사용자 데이터의 제 2 양을 포함하고, 사용자 데이터의 제 1 개수는 사용자 데이터의 제 2 양과 상이한 방법(EC7).
EC1 또는 EC2에 있어서, 입력/출력 장치에서 그리고 호스트를 통해 입력/출력 장치 인터페이스로, 논리 블록 어드레스에 상응하는 데이터를 기록하는 기록 요청을 수신하는 단계와, 기록 요청을 수신하는 것에 대응하여, 논리 블록 어드레스에 상응하는 데이터보다 더 작은 압축된 기록 데이터를 형성하기 위해 논리 블록 어드레스에 상응하는 데이터를 압축하는 단계와, 특정 페이지에서 적어도 압축된 기록 데이터의 제 1 부분을 기록하는 단계와, 특정 엔트리에, 특정 페이지의 물리 어드레스, 압축된 기록 데이터에 대한 특정 페이지 내의 오프셋, 및 압축된 기록 데이터의 바이트의 길이를 저장하는 단계를 더 포함하는 방법(EC8).
EC8에 있어서, 데이터를 기록하는 요청을 수신하는 것에 대응하여, 특정 페이지에 헤더를 기록하는 단계 - 헤더는 요청의 논리 블록 어드레스 및 압축된 데이터의 바이트의 길이를 포함함 - 를 더 포함하는 방법(EC9).
EC1 또는 EC2에 있어서, 논리 블록 어드레스는 복수의 논리 블록 어드레스중 제 1 어드레스이고, 판독 유닛의 개수의 판독 유닛 중 적어도 하나는 논리 블록 어드레스의 상이한 어드레스에 상응하는 데이터를 적어도 일부를 포함하는 방법(EC10).
EC1 또는 EC2에 있어서, 판독 유닛의 개수의 판독 유닛 중 적어도 하나는 압축된 데이터의 일부에 더하여 하나 이상의 헤더를 포함하는 방법(EC11).
방법(EC12)은 입력/출력 장치에서 그리고 호스트를 통해 입력/출력 장치 인터페이스로, 입력/출력 장치의 비휘발성 메모리로부터의 판독 요청의 논리 블록 어드레스에 상응하는 데이터를 판독하라는 판독 요청을 수신하는 단계와, 판독 요청을 수신하는 것에 대응하여, 비휘발성 메모리의 복수의 페이지 중 특정 페이지의 물리 어드레스, 논리 블록 어드레스에 상응하는 데이터를 기록하는 것에 대응하여 이전에 저장된 가변 크기 데이터에 대한 특정 페이지 내의 오프셋, 및 가변 크기 데이터의 바이트의 길이를 획득하기 위해 맵의 다수의 엔트리 중 특정 맵 엔트리를 판독하는 단계와 - 상기 특정 맵 엔트리는 판독 요청의 논리 블록 어드레스와 연관됨 - 가변 크기 데이터에 대한 특정 페이지 내의 오프셋 및 가변 크기 데이터의 바이트의 길이를 특정 페이지 내의 복수의 판독 유닛 중 제 1 판독 유닛의 어드레스 및 특정 페이지로부터 판독될 판독 유닛의 개수로 변환하는 단계와, 특정 페이지로부터 판독 유닛의 개수만을 판독하는 단계와, 정정된 데이터를 획득하기 위해 특정 페이지로부터 판독되는 판독 유닛 각각에 에러 정정 디코딩을 수행하는 단계와, 가변 크기 데이터에 대한 특정 페이지 내의 오프셋 및 가변 크기 데이터의 바이트의 길이에 따라 정정된 데이터로부터 가변 크기 데이터를 추출하는 단계와, 추출된 데이터를 호스트에 리턴하는 단계를 포함한다.
EC1 또는 EC22에 있어서, 입력/출력 장치에서 그리고 호스트를 통해 입력/출력 장치 인터페이스로, 논리 블록 어드레스에 상응하는 가변 크기 어드레스 및 가변 크기 데이터의 크기를 기록하는 기록 요청을 수신하는 단계와, 기록 요청을 수신하는 것에 대응하여, 특정 페이지에 적어도 가변 크기 데이터의 제 1 부분을 기록하는 단계와, 특정 엔트리에, 특정 페이지의 물리 어드레스, 가변 크기 데이터에 대한 특정 페이지 내의 오프셋, 및 가변 크기 데이터의 크기에 따른 가변 크기 데이터의 바이트의 길이를 저장하는 단계를 더 포함하는 방법(EC13).
일부 실시예에서, 멀티 노드 저장 장치 또는 그것의 부분(들), 예를 들어 프로세서(CPU와 같은)와의 연동을 위해 인에이블되는 입력/출력 장치의 하드 디스크 드라이브 또는 고체 상태 디스크 컨트롤러, 입력/출력 컨트롤러(RAID 온 칩 다이와 같은), 및 프로세서, 마이크로프로세서, 시스템 온 칩, 응용 주문형 집적 회로, 하드웨어 가속도계, 또는 동작의 전부 또는 일부를 제공하는 다른 회로의 일부에 의해 수행되는 동작의 전부 또는 일부의 다양한 조합은 컴퓨터 시스템에 의한 처리와 호환 가능한 사양에 의해 지정된다. 사양은 하드웨어 기술 언어, 회로 기술, 넷리스트 기술, 마스크 기술, 또는 레이아웃 기술과 같은 다양한 기술에 따른다. 예시적 기술은 베릴로그, VHDL, SPICE, PSpice와 같은 SPICE 변형, IBIS, LEF, DEF, GDS-II, OASIS, 또는 다른 기술을 포함하지만, 이에 제한되지 않는다. 다양한 실시예에서, 처리는 하나 이상의 집적 회로상의 포함에 적절한 로직 및/또는 회로를 생성하거나, 검증하거나, 지정하기 위해 해석, 컴파일, 시뮬레이션, 및 합성의 임의의 조합을 포함한다. 다양한 실시예에 따른 각각의 집적 회로는 다양한 기술에 따라 설계 가능하고/하거나 제조 가능하다. 기술은 프로그램 가능 기술(필드 또는 마스크 프로그램 가능 게이트 어레이 집적 회로와 같은), 세미 커스텀(semi-custom) 기술(전체적 또는 부분적 셀 기반 집적 회로와 같은), 및 풀 커스텀(full-custom) 기술(실질적으로 전문화되는 집적 회로와 같은), 그것의 임의의 조합, 또는 집적 회로의 설계 및/또는 제조와 호환 가능한 임의의 다른 기술을 포함한다.
일부 실시예에서, 명령어 세트를 저장한 컴퓨터 판독 가능 매체에 의해 설명되는 바와 같은 동작의 전부 또는 일부의 다양한 조합은 하나 이상의 프로그램 명령어의 실행 및/또는 해석에 의해, 하나 이상의 소스 및/또는 스크립트 언어 스테이트먼트의 해석 및/또는 컴파일에 의해, 또는 프로그래밍 및/또는 스크립팅 언어 스테이트먼트로 표현되는 정보를 컴파일하고/하거나, 변환하고/하거나, 해석함으로써 생성되는 이진 명령어의 실행에 의해 수행된다. 스테이트먼트는 임의의 표준 프로그래밍 또는 스크립팅 언어(C, C++, 포트란, 파스칼, 에이다, 자바, VBscript, 및 셸과 같은)와 호환 가능하다. 프로그램 명령어, 언어 스테이트먼트, 또는 이진 명령어 중 하나 이상은 하나 이상의 컴퓨터 판독 가능 저장 매체 요소상에 선택적으로 저장된다. 다양한 실시예에서, 프로그램 명령어의 일부, 전부, 또는 다양한 부분은 하나 이상의 기능, 루틴, 서브루틴, 인라인 루틴, 절차, 매크로, 또는 그것의 부분으로 실현된다.
특정 선택은 본문 및 도면을 준비할 시에 편의상 설명에만 이루어졌고, 반대 표시가 있지 않으면, 선택은 설명된 실시예의 구조 또는 동작에 관한 부가 정보를 전달하는 그 자체로 해석되지 않아야 한다. 선택의 예는 도면 번호에 사용되는 지정의 특정 조직 또는 할당 및 실시예의 특징 및 요소를 식별하고 참조하기 위해 사용되는 요소 식별자(예를 들어, 콜아웃(callout) 또는 수치 지시자)의 특정 조직 또는 할당을 포함하지만, 이에 제한되지 않는다.
단어 "포함한다" 또는 "포함하는"은 개방형 범위의 논리 세트를 설명하는 관념으로 해석되도록 구체적으로 의도되고 단어 "내에"가 명시적으로 이어지지 않으면 물리적 봉쇄를 전달하도록 의미되지 않는다.
전술한 실시예가 설명 및 이해의 명료성을 위해 다소 상세하게 설명되었지만, 본 발명은 제공된 상세에 제한되지 않는다. 본 발명의 많은 실시예가 있다. 개시된 실시예는 예시적이고 제한되지 않는다.
구성, 배열, 및 사용의 많은 변화는 설명에 따라 가능하고, 공표된 특허의 청구범위 내에 있다. 예를 들어, 사용된 기술의 상호연결 및 기능 단위 비트 폭, 클록 속도, 및 타입은 각각의 구성요소 블록에서 다양한 실시예에 따라 가변적이다. 인터커넥트 및 로직에 주어진 명칭은 단지 예시적이고, 설명된 개념을 제한하는 것으로 해석되지 않아야 한다. 순서도 및 흐름도 프로세스, 동작, 및 기능 요소의 순서 및 배열은 다양한 실시예에 따라 가변적이다. 또한, 특별히 반대로 명시되지 않으면, 지정된 값 범위, 사용된 최대 및 최소 값, 또는 다른 특정 사양(입력/출력 장치 기술 타입, 및 레지스터 및 버퍼에서의 엔트리 또는 단계의 수와 같은)은 단지 설명된 실시예의 것이며, 구현 기술에서 개선 및 변경을 추적하도록 기대되고, 제한으로 해석되지 않아야 한다.
본 기술에 공지된 기능적 등가 기술은 다양한 구성요소, 서브시스템, 동작, 기능, 루틴, 서브루틴, 인라인 루틴, 절차, 매크로, 또는 그것의 부분을 구현하도록 설명된 것 대신에 이용 가능하다. 실시예의 많은 기능 양태는 더 빠른 처리(소프트웨어로 하드웨어 내의 이전 기능의 이동을 용이하게 하는) 및 고집적도(하드웨어로 소프트웨어 내의 이전 기능의 이동을 용이하게 하는)의 실시예 의존 설계 제약 및 기술 경향의 목적(function)으로서, 하드웨어(예를 들어, 일반적으로 전용 회로) 또는 소프트웨어로(예를 들어, 프로그램된 컨트롤러 또는 프로세서의 어떤 방식을 통해) 선택적으로 실현 가능하다. 다양한 실시예의 특정 변화는 분할, 상이한 폼 팩터(form factor) 및 구성의 차이; 상이한 운영 체제 및 다른 시스템 소프트웨어의 사용; 상이한 인터페이스 표준, 네트워크 프로토콜, 또는 통신 링크의 사용; 상이한 코딩 타입의 사용; 및 특정 응용의 고유 공학 및 사업 제약에 따라 본 명세서에 설명된 개념을 구현할 때 예상되는 다른 변화를 포함하지만, 이에 제한되지 않는다.
실시예는 설명된 실시예의 많은 양태의 최소 구현을 넘어 상세하게 그리고 환경적 상황으로 잘 설명되었다. 당업자는 일부 실시예가 나머지 요소 중에서 기본 협력을 변경하지 않으면서 개시된 구성요소 또는 특징을 생략한다는 것을 인식할 것이다. 개시된 많은 상세는 설명된 실시예의 다양한 양태를 구현하도록 이용되지 않는다. 나머지 요소가 종래 기술과 구별할 수 있을 정도까지, 생략되는 구성요소 및 특징은 본 명세서에 설명된 개념에 제한되지 않는다.
설계의 모든 그러한 변화는 설명된 실시예에 의해 전달되는 교시를 통한 비현실적인 변경이다. 본 명세서에 설명된 실시예는 다른 컴퓨팅 및 네트워킹 응용에 광범위하게 적용 가능하고, 설명된 실시예의 특정 응용 및 산업에 제한되지 않는다. 따라서, 본 발명은 특허의 청구범위 내에 망라되는 모든 가능한 수정 및 변화를 포함하는 것으로 해석되어야 한다.
도 1-도 12의 도면에 의해 수행되는 기능은 관련 기술(들)에 숙련된 자에게 분명한 바와 같이 종래의 일반 목적 프로세서, 디지털 컴퓨터, 마이크로프로세서, 마이크로컨트롤러, RISC(reduced instruction set computer) 프로세서, CISC(complex instruction set computer) 프로세서, SIMD(single instruction multiple data) 프로세서, 신호 프로세서, CPU(central processing unit), ALU(arithmetic logic unit), VDSP(video digital signal processor) 및/또는 본 명세서의 교시에 따라 프로그램된 유사한 컴퓨터 기계 중 하나 이상을 사용하여 구현될 수 있다. 적절한 소프트웨어, 펌웨어, 코딩, 루틴, 명령어, 옵코드, 마이크로코드, 및/또는 프로그램 모듈은 또한 관련 기술(들)에 숙련된 자에게 분명한 바와 같이, 본 명세서의 교시에 기초하여 숙련된 프로그래머에 의해 즉시 용이하게 준비될 수 있다. 소프트웨어는 일반적으로 기계 구현의 프로세서 중 하나 이상에 의해 매체 또는 수개의 매체들로부터 실행된다.
본 발명은 또한, 본 명세서에 설명된 바와 같이, 플립 칩 모듈 및/또는 멀티 칩 모듈로 배열된 ASIC(application specific integrated circuit), 플랫폼 ASIC, FPGA(field programmable gate array), PLD(programmable logic device), CPLD(complex programmable logic device), SOG(sea-of-gate), RFIC(radio frequency integrated circuit), ASSP(application specific standard product), 하나 이상의 모놀리식 집적 회로, 하나 이상의 칩 또는 다이의 준비에 의해 또는 종래의 구성요소 회로의 적절한 망을 연결함으로써 구현될 수 있으며, 그 수정은 당업자(들)에게 매우 명백할 것이다.
따라서, 본 발명은 또한 본 발명에 따른 하나 이상의 프로세스 또는 방법을 수행하기 위해 기계를 프로그램하는 데 사용될 수 있는 명령어를 포함하는 저장 매체 또는 매체들 및/또는 송신 매체 또는 매체들일 수 있는 컴퓨터 제품을 포함할 수 있다. 주변 회로의 동작과 함께, 기계에 의해 컴퓨터 제품에 포함된 명령어의 실행은 입력 데이터를 저장 매체상의 하나 이상의 파일 및/또는 오디오 및/또는 시각적 묘사와 같은 물리적 객체 또는 실체를 나타내는 하나 이상의 출력 신호로 변환할 수 있다. 저장 매체는 플로피 디스크, 하드 드라이브, 자기 디스크, 광 디스크, CD-ROM, DVD 및 자기 광 디스크를 포함하는 임의의 타입의 디스크 및 ROM(read-only memory), RAM(random access memory), EPROM(erasable programmable ROM), EEPROM(electrically erasable programmable ROM), WPROM(ultra-violet erasable programmable ROM), 플래시 메모리와 같은 회로, 자기 카드, 광학 카드, 및/또는 전자 명령어를 저장하는 데 적절한 임의의 타입의 매체를 포함할 수 있지만, 이에 제한되지 않는다.
본 발명의 요소는 하나 이상의 장치, 유닛, 구성요소, 시스템, 기계 및/또는 장치의 일부 또는 전부를 형성할 수 있다. 장치는 서버, 워크스테이션, 저장 어레이 컨트롤러, 저장 시스템, 개인용 컴퓨터, 랩톱 컴퓨터, 노트북 컴퓨터, 팜 컴퓨터, 개인 휴대 정보 단말기, 휴대용 전자 장치, 배터리 전력 공급 장치, 셋톱 박스, 인코더, 디코더, 트랜스코더, 압축기, 압축해제기, 전처리기, 후처리기, 송신기, 수신기, 송수신기, 암호 회로, 휴대 전화, 디지털 카메라, 위치 결정 및/또는 내비게이션 시스템, 의료 기구, 헤드업 디스플레이, 무선 장치, 오디오 레코딩, 오디오 저장 및/또는 오디오 재생 장치, 비디오 레코딩, 비디오 저장 및/또는 비디오 재생 장치, 게임 플랫폼, 주변 장치 및/또는 멀티 칩 모듈을 포함할 수 있지만, 이제 제한되지 않는다. 관련 기술(들)에 숙련된 자는 본 발명의 요소가 특정 응용의 기준을 충족시키기 위해 다른 타입의 장치로 구현될 수 있는 것을 이해할 것이다.
"있다(is(are))" 및 동사와 함께 본 명세서에 사용될 때 용어 "할 수 있다(may)" 및 "일반적으로(generally)"는 설명이 예시적이라는 의도를 전달하도록 의미되고 본 개시에 기초하여 유도될 수 있는 대안 예뿐만 아니라 본 개시에 제시된 구체적 예 둘 다를 포괄할 만큼 충분히 넓은 것으로 생각된다. 본 명세서에 사용되는 바와 같은 용어 "할 수 있다(may)" 및 "일반적으로(generally)"는 반드시 상응하는 요소를 생략하는 것의 바람직함 또는 가능성을 의미하도록 해석되어야 하는 것은 아니다.
본 발명이 그 실시예를 참조하여 특별히 도시되고 설명되었지만, 형태 및 상세의 다양한 변경이 본 발명의 범위로부터 벗어나지 않으면서 이루어질 수 있다는 점은 당업자에 의해 이해될 것이다.

Claims (20)

  1. 가변 크기 플래시 변환 계층을 사용하는 방법으로서,
    (A) 장치에서 호스트로부터, 상기 장치의 비휘발성 메모리로부터 논리 블록 어드레스에 상응하는 특정 데이터를 판독하라는 판독 요청을 수신하는 단계와,
    (B) (i) 상기 비휘발성 메모리의 복수의 페이지 중 특정 페이지의 물리 어드레스, (ii) 상기 논리 블록 어드레스에 상응하는 압축된 데이터를 기록하는 것에 대응하여 이전에 저장된 압축된 데이터에 대한 상기 특정 페이지 내의 오프셋, 및 (iii) 상기 압축된 데이터의 길이를 획득하기 위해 맵에서 복수의 엔트리(entry) 중 특정 엔트리를 판독하는 단계 - 상기 특정 엔트리는 상기 논리 블록 어드레스와 연관됨 - 와,
    (C) 상기 오프셋 및 상기 길이를 (i) 상기 특정 페이지 내의 복수의 판독 유닛 중 소정의 판독 유닛의 어드레스, 및 (ii) 상기 특정 페이지로부터 판독될 상기 판독 유닛의 개수로 변환하는 단계와,
    (D) 상기 특정 페이지로부터 최대 상기 소정의 판독 유닛으로부터 시작되는 상기 판독 유닛의 상기 개수를 판독하는 단계 - 상기 오프셋 및 상기 길이의 세밀도는 상기 판독 유닛 중 하나의 크기보다 더 미세함 - 를 포함하는
    방법.
  2. 제 1 항에 있어서,
    정정된 데이터를 생성하기 위해 상기 특정 페이지로부터 판독되는 상기 판독 유닛 각각에 대해 에러 정정 디코딩을 수행하는 단계와,
    (i) 상기 압축된 데이터에 대한 상기 특정 페이지 내의 상기 오프셋 및 (ii) 상기 압축된 데이터의 상기 길이 둘 다에 따라 상기 정정된 데이터로부터 상기 압축된 데이터를 추출하는 단계를 더 포함하는
    방법.
  3. 제 2 항에 있어서,
    리턴 데이터(return data)를 생성하기 위해 상기 압축된 데이터를 압축 해제하는 단계와,
    상기 리턴 데이터를 상기 호스트에 전송하는 단계를 더 포함하는
    방법.
  4. 제 1 항에 있어서,
    판독될 상기 판독 유닛의 상기 개수는 상기 특정 페이지 내의 상기 판독 유닛의 전부보다 더 적은
    방법.
  5. 제 1 항에 있어서,
    (i) 상기 압축된 데이터에 대한 상기 특정 페이지 내의 상기 오프셋 및 (ii) 상기 특정 페이지 내의 사용자 데이터의 양과 결합되는 상기 압축된 데이터의 상기 길이 둘 다에 기초하여, 상기 압축된 데이터의 적어도 일부가 상기 비휘발성 메모리의 상기 복수의 페이지의 후속 페이지의 하나 이상의 후속 판독 유닛에 있다고 판단하는 단계를 더 포함하는
    방법.
  6. 제 5 항에 있어서,
    상기 후속 페이지로부터 최대한으로 상기 하나 이상의 후속 판독 유닛을 판독하는 단계를 더 포함하는
    방법.
  7. 제 1 항에 있어서,
    (i) 상기 비휘발성 메모리의 상기 복수의 페이지 중 제 1 페이지는 상기 판독 유닛의 제 1 개수를 포함하고, (ii) 상기 비휘발성 메모리의 상기 복수의 페이지 중 제 2 페이지는 상기 판독 유닛의 제 2 개수를 포함하고, (iii) 상기 제 1 개수는 상기 제 2 개수와 상이한
    방법.
  8. 제 1 항에 있어서,
    (i) 상기 비휘발성 메모리의 상기 복수의 페이지 중 제 1 페이지는 사용자 데이터의 제 1 양을 포함하고, (ii) 상기 비휘발성 메모리의 상기 복수의 페이지 중 제 2 페이지는 상기 사용자 데이터의 제 2 양을 포함하고 (iii) 상기 제 1 양은 상기 제 2 양과 상이한
    방법.
  9. 제 1 항에 있어서,
    상기 특정 데이터를 상기 비휘발성 메모리에 기록하라는 기록 요청을 수신하는 단계와,
    상기 특정 데이터보다 더 작은 상기 압축된 데이터를 생성하기 위해 상기 특정 데이터를 압축하는 단계와,
    상기 특정 페이지에 상기 압축된 데이터의 적어도 일부를 기록하는 단계와,
    상기 특정 엔트리에 (i) 상기 특정 페이지의 상기 물리 어드레스, (ii) 상기 압축된 데이터에 대한 상기 특정 페이지 내의 상기 오프셋, 및 (iii) 상기 압축된 데이터의 상기 길이를 저장하는 단계를 더 포함하는
    방법.
  10. 제 9 항에 있어서,
    상기 특정 페이지에 상기 기록 요청의 상기 논리 블록 어드레스 및 상기 길이 중 적어도 일부를 포함하는 헤더를 기록하는 단계를 더 포함하는
    방법.
  11. 제 1 항에 있어서,
    (i) 상기 논리 블록 어드레스는 복수의 논리 블록 어드레스 중 하나이고, (ii) 상기 판독 유닛의 상기 개수의 상기 판독 유닛 중 적어도 하나는 상기 논리 블록 어드레스의 상이한 어드레스에 상응하는 적어도 일부 상이한 데이터를 포함하는
    방법.
  12. 제 1 항에 있어서,
    상기 판독 유닛의 상기 개수의 상기 판독 유닛 중 적어도 하나는 (i) 하나 이상의 헤더, 및 (ii) 상기 압축된 데이터의 일부를 포함하는
    방법.
  13. 비휘발성 메모리와,
    (i) 호스트로부터 상기 비휘발성 메모리로부터 논리 블록 어드레스에 상응하는 특정 데이터를 판독하라는 판독 요청을 수신하고, (ii) (a) 상기 비휘발성 메모리의 복수의 페이지 중 특정 페이지의 물리 어드레스, (b) 상기 논리 블록 어드레스에 상응하는 압축된 데이터를 기록하는 것에 대응하여 이전에 저장된 압축된 데이터에 대한 상기 특정 페이지 내의 오프셋 및 (c) 상기 압축된 데이터의 길이를 획득하기 위해 맵에서 복수의 엔트리 중 특정 엔트리를 판독 - 상기 특정 엔트리는 상기 논리 블록 어드레스와 연관됨 - 하고, (iii) 상기 오프셋 및 상기 길이를 (a) 상기 특정 페이지 내의 복수의 판독 유닛 중 소정의 판독 유닛의 어드레스 및 (b) 상기 특정 페이지로부터 판독될 상기 판독 유닛의 개수로 변환하고, (iv) 상기 특정 페이지로부터 최대 상기 소정의 판독 유닛으로부터 시작되는 상기 판독 유닛의 상기 개수를 판독 - 상기 오프셋 및 상기 길이의 세밀도는 상기 판독 유닛 중 하나에 대한 크기보다 더 미세함 - 하도록 구성된 회로를 포함하는
    장치.
  14. 제 13 항에 있어서,
    상기 회로는 (i) 정정된 데이터를 생성하기 위해 상기 특정 페이지로부터 판독되는 상기 판독 유닛 각각에 대해 에러 정정 디코딩을 수행하고, (ii) (a) 상기 압축된 데이터에 대한 상기 특정 페이지 내의 상기 오프셋 및 (b) 상기 압축된 데이터의 상기 길이 둘 다에 따라 상기 정정된 데이터로부터 상기 압축된 데이터를 추출하도록 더 구성되는
    장치.
  15. 제 14 항에 있어서,
    상기 회로는 (i) 리턴 데이터를 생성하기 위해 상기 압축된 데이터를 압축 해제하고, (ii) 상기 리턴 데이터를 상기 호스트에 전송하도록 더 구성되는
    장치.
  16. 제 13 항에 있어서,
    판독될 상기 판독 유닛의 상기 개수는 상기 특정 페이지 내의 상기 판독 유닛의 전부보다 더 적은
    장치.
  17. 제 13 항에 있어서,
    상기 회로는, (i) 상기 압축된 데이터에 대한 상기 특정 페이지 내의 상기 오프셋 및 (ii) 상기 특정 페이지 내에서 사용자 데이터의 양과 결합되는 상기 압축된 데이터의 상기 길이 둘 다에 기초하여, 상기 압축된 데이터의 적어도 일부가 상기 비휘발성 메모리의 상기 복수의 페이지의 후속 페이지의 하나 이상의 후속 판독 유닛에 있다고 판단하도록 더 구성되는
    장치.
  18. 제 17 항에 있어서,
    상기 회로는 상기 후속 페이지로부터 최대한으로 상기 하나 이상의 후속 판독 유닛을 판독하도록 더 구성되는
    장치.
  19. 제 13 항에 있어서,
    (i) 상기 비휘발성 메모리의 상기 복수의 페이지 중 제 1 페이지는 상기 판독 유닛의 제 1 개수를 포함하고, (ii) 상기 비휘발성 메모리의 상기 복수의 페이지 중 제 2 페이지는 상기 판독 유닛의 제 2 개수를 포함하고 (iii) 상기 제 1 개수는 상기 제 2 개수와 상이한
    장치.
  20. 제 13 항에 있어서,
    상기 장치는 하나 이상의 집적 회로로 구현되는
    장치.
KR1020140105900A 2013-08-16 2014-08-14 가변 크기 플래시 변환 계층 KR102307382B1 (ko)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
US201361866672P 2013-08-16 2013-08-16
US61/866,672 2013-08-16
US201361888681P 2013-10-09 2013-10-09
US61/888,681 2013-10-09
US14/055,336 US9495288B2 (en) 2013-01-22 2013-10-16 Variable-size flash translation layer
US14/055,336 2013-10-16

Publications (2)

Publication Number Publication Date
KR20150020137A true KR20150020137A (ko) 2015-02-25
KR102307382B1 KR102307382B1 (ko) 2021-09-29

Family

ID=52430390

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020140105900A KR102307382B1 (ko) 2013-08-16 2014-08-14 가변 크기 플래시 변환 계층

Country Status (4)

Country Link
KR (1) KR102307382B1 (ko)
CN (1) CN104375956B (ko)
DE (1) DE102014111668A1 (ko)
TW (1) TWI609263B (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210134947A (ko) * 2019-03-18 2021-11-11 베리실리콘 마이크로일렉트로닉스 (청두) 컴퍼니 리미티드 외부 메모리의 협력 액세스 방법 및 시스템, 협력 액세스 아키텍처

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106354615B (zh) * 2015-07-21 2021-06-01 北京忆恒创源科技有限公司 固态硬盘日志生成方法及其装置
US10359953B2 (en) * 2016-12-16 2019-07-23 Western Digital Technologies, Inc. Method and apparatus for offloading data processing to hybrid storage devices
US10725685B2 (en) 2017-01-19 2020-07-28 International Business Machines Corporation Load logical and shift guarded instruction
US10732858B2 (en) 2017-01-19 2020-08-04 International Business Machines Corporation Loading and storing controls regulating the operation of a guarded storage facility
US10579377B2 (en) 2017-01-19 2020-03-03 International Business Machines Corporation Guarded storage event handling during transactional execution
US10496292B2 (en) 2017-01-19 2019-12-03 International Business Machines Corporation Saving/restoring guarded storage controls in a virtualized environment
US10496311B2 (en) 2017-01-19 2019-12-03 International Business Machines Corporation Run-time instrumentation of guarded storage event processing
US10452288B2 (en) 2017-01-19 2019-10-22 International Business Machines Corporation Identifying processor attributes based on detecting a guarded storage event
TWI633434B (zh) * 2017-07-12 2018-08-21 宏碁股份有限公司 管理固態硬碟之方法、系統及電腦可讀取媒體
CN108959491A (zh) * 2018-06-25 2018-12-07 北斗地网(重庆)科技集团有限公司 一种卫星数据的可视化显示方法、装置、设备及存储介质
CN109471594B (zh) * 2018-10-09 2020-07-10 华中科技大学 一种mlc闪存读写方法
CN112115067A (zh) 2019-06-21 2020-12-22 慧荣科技股份有限公司 闪存物理资源集合管理装置及方法及计算机可读取存储介质
CA3142618A1 (en) * 2019-07-02 2021-01-07 Microsoft Technology Licensing, Llc Hardware-based memory compression
TWI754206B (zh) 2020-01-10 2022-02-01 祥碩科技股份有限公司 資料儲存系統、資料儲存裝置及其管理方法
CN114327272A (zh) * 2021-12-28 2022-04-12 深圳大普微电子科技有限公司 一种数据处理方法、固态硬盘控制器及固态硬盘
CN115629720B (zh) * 2022-12-20 2023-07-28 鹏钛存储技术(南京)有限公司 基于闪存为介质的存储设备上的非对称条带化方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110154158A1 (en) * 2009-12-23 2011-06-23 Sandisk Corporation System and method of error correction of control data at a memory device

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6523104B2 (en) * 2001-07-13 2003-02-18 Mips Technologies, Inc. Mechanism for programmable modification of memory mapping granularity
US7469331B2 (en) * 2004-07-22 2008-12-23 International Business Machines Corporation Method and apparatus for supporting shared library text replication across a fork system call
KR20050107369A (ko) * 2005-10-27 2005-11-11 서운식 모바일 기기를 위한 코드 직접 수행기능을 갖는 대용량저장장치 및 제어 방법
TW200823923A (en) * 2006-11-23 2008-06-01 Genesys Logic Inc Caching method for address translation layer of flash memory
US8949513B2 (en) * 2011-05-10 2015-02-03 Marvell World Trade Ltd. Data compression and compacting for memory devices
CN102567132B (zh) * 2011-12-30 2014-12-03 记忆科技(深圳)有限公司 端对端芯片数据通路保护装置及其方法

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110154158A1 (en) * 2009-12-23 2011-06-23 Sandisk Corporation System and method of error correction of control data at a memory device

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210134947A (ko) * 2019-03-18 2021-11-11 베리실리콘 마이크로일렉트로닉스 (청두) 컴퍼니 리미티드 외부 메모리의 협력 액세스 방법 및 시스템, 협력 액세스 아키텍처

Also Published As

Publication number Publication date
TW201523249A (zh) 2015-06-16
CN104375956B (zh) 2017-11-14
DE102014111668A1 (de) 2015-02-19
CN104375956A (zh) 2015-02-25
TWI609263B (zh) 2017-12-21
KR102307382B1 (ko) 2021-09-29

Similar Documents

Publication Publication Date Title
US10346312B2 (en) Variable-size flash translation layer
KR102307382B1 (ko) 가변 크기 플래시 변환 계층
US9329991B2 (en) Translation layer partitioned between host and controller
US11449252B2 (en) Method of writing and reading data in an NVM using Lpage identification headers
KR102328612B1 (ko) 호스트와 컨트롤러 간에 파티셔닝된 변환 계층
US11379301B2 (en) Fractional redundant array of silicon independent elements
JP6387231B2 (ja) 不揮発性メモリへの書き込みの管理および領域選択
EP2750018A2 (en) Non-volatile memory program failure recovery via redundant arrays
WO2014022159A1 (en) Mixed granularity higher-level redundancy for non-volatile memory
WO2012075200A2 (en) Dynamic higher-level redundancy mode management with independent silicon elements
JP5978259B2 (ja) 順次読み出し最適化可変サイズフラッシュトランスレーションレイヤ
WO2014028183A1 (en) Fractional redundant array of silicon independent elements

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant