KR102328612B1 - 호스트와 컨트롤러 간에 파티셔닝된 변환 계층 - Google Patents

호스트와 컨트롤러 간에 파티셔닝된 변환 계층 Download PDF

Info

Publication number
KR102328612B1
KR102328612B1 KR1020140105759A KR20140105759A KR102328612B1 KR 102328612 B1 KR102328612 B1 KR 102328612B1 KR 1020140105759 A KR1020140105759 A KR 1020140105759A KR 20140105759 A KR20140105759 A KR 20140105759A KR 102328612 B1 KR102328612 B1 KR 102328612B1
Authority
KR
South Korea
Prior art keywords
data
volatile memory
host
memory
read
Prior art date
Application number
KR1020140105759A
Other languages
English (en)
Other versions
KR20150020136A (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/060,799 external-priority patent/US9329991B2/en
Application filed by 엘에스아이 코포레이션 filed Critical 엘에스아이 코포레이션
Publication of KR20150020136A publication Critical patent/KR20150020136A/ko
Application granted granted Critical
Publication of KR102328612B1 publication Critical patent/KR102328612B1/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/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
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/04Addressing variable-length words or parts of words
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0608Saving storage space on storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0292User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Quality & Reliability (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Memory System (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

파티셔닝된 플래시 변환 계층을 사용하는 방법이 개시된다. 단계 (A)는 장치에서, 호스트로부터, 제 1 기록 데이터를 가진 기록 커맨드를 수신한다. 단계 (B)는 장치에서 제 1 기록 데이터를 압축하는 것에 의해 제 2 기록 데이터를 생성한다. 제 2 기록 데이터는 일반적으로 가변 사이즈를 갖는다. 단계 (C)는 비휘발성 메모리 내의 물리적 위치에 제 2 기록 데이터를 저장한다. 물리적 위치는 다음의 미기록된 위치이다. 단계 (D)는 기록 커맨드에 대한 응답으로 장치에서 호스트로 물리적 위치의 표시를 반환한다.

Description

호스트와 컨트롤러 간에 파티셔닝된 변환 계층{TRANSLATION LAYER PARTITIONED BETWEEN HOST AND CONTROLLER}
본원은 2013년 10월 21일 출원된 미국 가출원 제61/893,383호, 2013년 10월 9일 출원된 미국 가출원 제61/888,681호, 2013년 9월 3일 출원된 미국 가출원 제61/873,357호, 2013년 8월 16일 출원된 미국 가출원 제61/866,672호, 및 2013년 1월 22일 출원된 미국 가출원 제61/755,169호에 관한 것이며, 이들 각각은 그들 전체 내용이 참조로서 본 명세서에 포함된다.
본원은 2010년 3월 22일 출원된 미국 가출원 제61/316,373호와 관련된, 2011년 3월 21일에 출원된 미국 출원번호 제13/053,175호에 관한 것이며, 이들 각각은 그들 전체 내용이 참조로서 본 명세서에 포함된다.
또한, 본원은 2011년 10월 5일 출원된 미국 가출원 제61/543,707호에 대한 우선권을 주장하는, 2012년 10월 4일에 국제출원된 국제출원번호 PCT/US2012/058583호에 관한 것이며, 이들 각각은 그들 전체 내용이 참조로서 본 명세서에 포함된다.
본원은 2011년 9월 6일 출원된 미국 가출원 제61/531,551호 및 2011년 8월 9일 출원된 미국 가출원 제61/521,739에 대한 우선권을 주장하는, 2012년 8월 8일에 국제출원된 국제출원번호 PCT/US2012/049905호와 관련된, 2013년 7월 10일 출원된 미국 출원번호 제13/936,010호에 관한 것이며, 이들 각각은 그들 전체 내용이 참조로서 본 명세서에 포함된다.
본 발명은 일반적으로 컴퓨팅 호스트 및 입/출력 디바이스 기술에 관한 것이며, 보다 구체적으로는, 호스트와 컨트롤러 간에 파티셔닝된 변환 계층을 제공하는 방법 및/또는 장치에 관한 것이다.
종래의 솔리드-스테이트 드라이브(solid-state drive; SSD)는 비휘발성 메모리의 각 페이지에 일정한, 정수 개의 호스트 논리 블록들을 저장한다. 비휘발성 메모리의 각 페이지에 대한 사용자 데이터 사이즈 또는 사용가능한 사이즈가 일정하지 않은 경우, 저장 효율 문제들이 발생하게 된다. 솔리드-스테이트 드라이브들 내의 가변 사이즈 플래시 변환 계층용 아키텍처들은 하드웨어 집중적이다. 페이지 헤더(page header)들은 솔리드-스테이트 드라이브의 페이지들 내에 존재하는 복수의 판독 유닛들 중에서 사용자 데이터가 저장되는 장소를 식별하는데 사용되며, 데이터의 추출은 먼저 이 페이지 헤더들을 판독 및 파싱하는 것을 포함한다.
본 발명은 파티셔닝된 플래시 변환 계층을 사용하는 방법에 관한 것이다. 단계 (A)는, 호스트로부터의 장치에서, 제 1 기록 데이터를 가진 기록 커맨드를 수신한다. 단계 (B)는 상기 장치에서 제 1 기록 데이터를 압축함으로써 제 2 기록 데이터를 생성한다. 일반적으로, 제 2 기록 데이터는 가변 사이즈를 갖는다. 단계 (C)는 비휘발성 메모리의 물리적 위치에서 제 2 기록 데이터를 저장한다. 물리적 위치는 다음의 기록되지 않은 위치이다. 단계 (D)는, 기록 커맨드에 대한 응답으로, 장치에서 호스트로, 물리적 위치의 표시를 반환한다.
본 발명의 실시예들은 다음의 상세한 설명 및 첨부된 청구항들과 도면들로부터 명백하게 될 것이다.
도 1은 비휘발성 메모리 페이지 내의 고정-사이즈 영역들에 논리 블록 어드레스를 맵핑하는 일 실시예의 선택된 상세 도면이다.
도 2는 선택적으로 비휘발성 메모리 페이지들을 스패닝하는 가변-사이즈 영역에 논리 블록 어드레스를 맵핑하는 일 실시예의 선택된 상세 도면이다.
도 3은 정수 개의 판독 유닛들을 포함하는 비휘발성 메모리 페이지에 대한 일 실시예의 도면이다.
도 4는 하나 이상의 판독 유닛들을 스패닝하는 가변-사이즈 영역에 논리 블록 어드레스를 맵핑하는 일 실시예의 선택된 상세 도면이다.
도 5는 헤더들 및 데이터를 포함하는 판독 유닛에 대한 일 실시예의 선택된 상세 도면이다.
도 6은 헤더들 및 데이터를 포함하는 비휘발성 메모리 페이지에 대한 일 실시예의 선택된 상세 도면이다.
도 7은 헤더들 및 데이터를 포함하는 비휘발성 메모리 페이지에 대한 다른 실시예의 선택된 상세 도면이다.
도 8은 각종 타입의 헤더들에 대한 일 실시예의 선택된 상세 도면이다.
도 9는 맵 엔트리에 대한 일 실시예의 선택된 상세 도면이다.
도 10은 각종 압축된 맵 엔트리들에 대한 일 실시예의 선택된 상세 도면이다.
도 11a는 솔리드-스테이트 드라이브 컨트롤러에 대한 일 실시예의 선택된 상세 도면이다.
도 11b는 데이터 경로 세그먼트에 대한 일 실시예의 선택된 상세 도면이다.
도 11c는 본 발명의 일 실시예에 따른 시스템에 대한 각종 실시예들의 선택된 상세 도면이다.
도 12는 비휘발성 메모리에 데이터를 기록하는 흐름도이다.
도 13은 비휘발성 메모리로부터 데이터를 판독하는 흐름도이다.
도 14는 비휘발성 메모리에서 데이터를 리사이클링하는 흐름도이다.
본 발명의 실시예들은 (i) 광범위한 데이터 사이즈들을 지원할 수 있고, (ii) 비-블록 기반 데이터로 동작할 수 있고, (iii) 데이터 기록에 대한 응답으로 호스트에게 핸들(handle)을 반환할 수 있고, (iv) 그 핸들을 이용하여 데이터를 판독할 수 있고/있거나, (v) 하나 이상의 집적 회로들 및/또는 관련 펌웨어 구현될 수 있는, 호스트와 컨트롤러 간에 파티셔닝된 변환 계층을 제공하는 것을 포함한다.
호스트는 입/출력 디바이스(예를 들면, 솔리드-스테이트 드라이브(예컨대, SSD) 컨트롤러)에 커플링되고, 입/출력 디바이스는 비휘발성 메모리(예컨대, NVM)에 커플링되고/되거나 이를 포함한다. 호스트의 예들로는 컴퓨팅 호스트, 서버, 개인용 컴퓨터, 랩탑 컴퓨터, 노트북 컴퓨터, 워크스테이션 컴퓨터, PDA(personal digital assistant), 스마트폰, 셀룰러 핸드셋, 미디어 플레이어 or 레코더, 입/출력 컨트롤러, RAID(redundant array of inexpensive/independent disks)-온-칩(예컨대, ROC) 컨트롤러, 및 프로세서 또는 컴퓨터를 포함하는 임의의 다른 디바이스들을 포함한다. 호스트는 입/출력 디바이스를 통해 비휘발성 메모리에 액세스하기 위한(예컨대, 판독 또는 기입을 위한) 요청들을 발생시키며, 이 요청들은 호스트의 조합에 의해(예컨대, 적어도 부분적으로는 호스트에서 실행되는 소프트웨어에 의해) 그리고 입/출력 디바이스에 의해(예컨대, 적어도 부분적으로는 입/출력 디바이스에서 실행되는 펌웨어에 의해) 수행된다.
몇몇 실시예들에서, 플래시 변환 계층들(예컨대, FTL들)은 (예컨대, 입/출력 디바이스에 대한 입/출력 동작들을 수행하기 위해 호스트에 의해 사용되는) 논리 블록 어드레스 공간 내의 논리 블록 어드레스들(예컨대, LBA들)을, NAND 플래시 비휘발성 메모리와 같은 비휘발성 메모리 내의 물리적 위치들(예컨대, 물리적 어드레스 공간 내의 물리적 저장 어드레스들)로 맵핑(변환)할 수 있다. 각종 실시예들에 따르면, 논리 블록 어드레스 공간 내의 논리 블록 어드레스의 맵핑은 1-레벨 맵; 2-레벨 맵; 멀티-레벨 맵; 다이렉트 맵; 연관 맵; 해시 테이블; B-트리; 트라이(trie); 맵의 일부분의 캐시; 및 논리 블록 어드레스들을 비휘발성 메모리 내의 물리적 위치들에 연관시키는 임의의 다른 수단 중의 하나 이상을 통한 것이다. 다른 실시예들에서, 맵은 예컨대, 하나의 엔트리가 논리 블록 어드레스 공간 내의 각 논리 블록 어드레스에 대한 것인, 복수의 엔트리들을 포함한다.
다른 실시예들에서, 플래시 변환 계층들은 각각의 데이터에 대한 라벨들 또는 그 밖의 고유의 식별자들을, 비휘발성 메모리 내의 물리적 위치들로 맵핑한다. 예를 들어, 라벨은 각각의 데이터에 대한 해시(예컨대, SHA-256 또는 SHA-512 해시), 또는 각각의 데이터로서 또는 그에 저장된 각각의 객체에 대한 객체 식별자, 또는 각각의 데이터에 대한 파일 시스템 식별자(예컨대, 아이노드)(각각의 데이터가 파일 시스템 객체인 경우)일 수 있다. 각종 실시예들에 따르면, 각각의 데이터의 라벨들 또는 다른 고유 식별자들의 맵핑은, 1-레벨 맵; 2-레벨 맵; 멀티-레벨 맵; 다이렉트 맵; 연관 맵; 해시 테이블; B-트리; 트라이; 맵의 일부분의 캐시; 및 이 라벨들 또는 다른 고유 식별자들을 비휘발성 메모리의 물리적 위치들 내에 연관시키는 임의의 다른 수단 중의 하나 이상을 통한 것이다. 다른 실시예들에서, 맵은 예컨대, 하나의 엔트리가 각각의 현존 라벨 또는 다른 고유 식별자에 대한 것인, 복수의 엔트리들을 포함한다. 또 다른 실시예들에서, 맵은 크기가 동적이며, 현존 라벨들 또는 다른 고유 식별자들이 증가하거나 감소함에 따라, 커지거나 작아진다. 일 예에서는, 현존 라벨들 또는 다른 고유 식별자들의 수가 증가하거나 감소함에 따라, 맵 사이즈는 선형적으로 커지거나 작아진다. 다른 예에서, 현존 라벨들 또는 다른 고유 식별자들의 수가 각각의 임계값보다 많이 증가하거나 감소함에 따라, 단계적-방식으로(개별 양으로) 커지거나 작아진다.
각종 실시예들에서, 멀티-레벨 맵은 고유 식별자들을 제공하고/하거나 고유 식별자들의 범위를 제한하는데 사용된다. 예를 들어, 제 1 연관 맵에서 라벨을 조회하여 그 라벨보다 길이가 짧은 고유 식별자를 생성한다. 이어서, 제 2 맵에서 고유 식별자를 조회하여, 비휘발성 메모리 내의 물리적 위치를 생성한다. 다른 실시예들에서, 제 2 맵은 예컨대, 하나의 맵이 비휘발성 메모리의 복수의 물리적으로 분리된 부분들(예컨대, 상이한 솔리드-스테이트 디스크들에 존재하는) 및/또는 기능적으로 상이한 부분들(예컨대, 상이한 타입들)의 각각에 대한 것인, 복수의 맵들이다.
복수의 라벨들(또는 핸들들 또는 논리 블록 어드레스들 또는 식별자들 또는 그 밖의 유사한 용어들)의 각각은 일반적으로 각각의 데이터 객체(또는 섹터 또는 블록 또는 아이템 또는 그 밖의 유사한 용어들)에 대응하고, 플래시 변환 계층은 그 라벨들 각각을 대응하는 데이터 객체의 비휘발성 메모리 내 물리적 위치와 연관시킨다. 라벨과 대응하는 데이터 객체의 비휘발성 메모리 내 물리적 위치의 연관은 그 연관이 수행되는 방식과 관계없이, 맵을 통해 이루어지는 것으로 알려져 있다. 본 명세서의 각종 예들이 논리 블록 어드레스들의 맵핑을 사용하고 또한 다른 예들이 객체 라벨들이나 객체 식별자들의 맵핑을 사용하지만, 다수의 유사한 데이터 라벨링 기술들이 관련 맵핑 기술들과 함께 본원의 교시의 사상 내에서 사용될 수 있다.
본 명세서에서 사용되는 용어 "맵핑 유닛(mapping unit)"은 플래시 변환 계층에 의해 맵핑되어 있는 데이터 객체들의 사이즈를 지칭한다. 몇몇 실시예들에서, 맵핑 유닛은 고정 사이즈이며, 다른 실시예들에서, 데이터 객체들은 가변 사이즈이다(따라서 이 맵핑 유닛들은 고정 사이즈가 아니다).
몇몇 실시예들에서, 맵핑은 하나 이상의 논리 섹터들 또는 블록들의 정렬된 유닛들 상에서 동작한다. 각 맵핑 유닛은 하나 이상의 논리 섹터들 또는 블록들의 정렬된 유닛이다. 각각의 맵핑 유닛은 그 맵핑 유닛의 데이터가 저장되는(맵핑 유닛이 기록되지 않았거나 트리밍(trimming)된 경우의 NULL 물리적 위치 가능성을 포함) 대응하는 물리적 위치를 갖는다. 예를 들어, 4 킬로바이트(예컨대, KB) 맵핑 유닛들에 있어서, 8개의 인접한(및 통상적으로 8개-섹터가 정렬된) SATA(Serial Advanced Technology Attachment) 512 바이트 섹터들이 단일 유닛으로서 맵핑된다. 일반적으로, 논리 블록 어드레스들에 대한 맵은, 맵핑 유닛과 연관된 논리 블록 어드레스로부터 비휘발성 메모리 내의 물리적 어드레스로의 각각의 변환 및/또는 제어 정보를 저장하기 위하여, 맵핑 유닛마다 하나의 엔트리를 갖는다.
각종 실시예들에서, 맵핑되어 있는 데이터 객체들의 사이즈(각 맵핑 유닛의 사이즈) 및/또는 비휘발성 메모리에 저장되는 데이터 객체들의 사이즈는 달라진다. 일 예에서, 맵 내의 각 엔트리들은 각각의 데이터 객체의 사이즈를 저장한다. 이 예에 대해 계속하면, 키/값 저장에서, 키에 따라 저장된 맵의 엔트리에 액세스하기 위하여 라벨이 사용되며, 이 값은 각각의 데이터 객체로서, 키들의 상이한 객체들 간에서 사이즈가 달라진다. 다른 예에서, 맵 내의 각각의 엔트리들은 저장된 데이터 객체를 검색하기 위하여 판독할 비휘발성 메모리에 대한 양의 표시를 저장한다. 다른 예의 변형에서, 맵의 엔트리에 의해 명시된 양의 비휘발성 메모리는, 상기 맵의 엔트리에 의해 명시된 양의 비휘발성 메모리 내의 하나 이상의 저장되어 있는 데이터 객체들 또는 그 일부들 중에서 각각의 저장되어 있는 데이터 객체의 위치를 탐색하는 헤더(header)들을 포함한다. 다른 예의 다른 변형에서, 각각의 데이터 객체를 검색하기 위하여 판독할 상기 양의 비휘발성 메모리는, 비휘발성 메모리의 페이지 내의 각각의 저장되어 있는 데이터 객체에 대한 정확한 사이즈 및 위치를 명시하지만, 비휘발성 메모리 오류 정정과는 관계가 없다. 추가적인 연산들이 사용되어 각각의 저장되어 있는 데이터 객체 및 비휘발성 메모리로부터 데이터 판독에 대한 오류 정정을 수행하는데 충분한 다른 정보를 검색하기 위하여 판독할 더 큰 양의 비휘발성 메모리를 결정한다.
각종 실시예들에 따르면, 비휘발성 메모리는 셀당 1 비트(예컨대, 단일-레벨 셀), 2 비트(예컨대, 멀티-레벨 셀), 3 비트(예컨대, 트리플-레벨 셀), 또는 그 이상의 비트를 저장하며, 평면형(2-차원) 또는 3-차원형(예컨대, 3D)인 NAND 플래시; NOR 플래시; 임의의 다른 타입의 플래시 메모리 또는 전기적 소거가능 메모리; PCM(phase change memory); MRAM(magnetic random access memory); 레이스트랙 메모리; ReRAM(resistive random access memory); 배터리 구동형(battery-backed) SRAM(static random access memory) 또는 DRAM(dynamic random access memory); 임의의 자기 또는 광 저장 매체; 또는 임의의 다른 비휘발성 메모리 중의 하나 이상이다.
몇몇 실시예들에서, 비휘발성 메모리는, 예를 들어 상이한 입/출력 디바이스들에서(예컨대, 상이한 솔리드-스테이트 디스크들에서) 물리적으로 분리되는 것에 의해, 또는 상이한 물리적 위치들이나 액세스 메커니즘들을 갖는 것(예컨대, 비휘발성 메모리의 일부분이 NAND 플래시이고, 제 2 부분이 상 변화 메모리)에 의해, 하나 이상의 그룹들로 구성된다. 이 실시예들의 일부에서는, 맵은, 각 엔트리가 해당 입/출력 디바이스의 입/출력 디바이스 식별자(예컨대, ID) 및 물리적 위치를 명시하는 글로벌 맵(global map)이다. 다른 실시예들에서, 맵은 복수의 부분들, 예를 들어 입/출력 디바이스마다 하나의 부분으로 파티셔닝되며, 각각의 라벨의 기능 및/또는 상위-레벨 맵은 입/출력 디바이스들 중의 선택된 것을 결정한다.
NAND 플래시와 같은 일부 비휘발성 메모리들은 비휘발성 메모리 페이지로 호칭되는 기록가능한(또는 프로그램가능한) 유닛(또는 예를 들어 NAND 플래시를 지칭하는 경우에는 플래시 페이지)를 제공한다. 일반적으로, 비휘발성 메모리 페이지는 비휘발성 메모리의 최소 기록가능한 유닛이다. 몇몇 실시예들 및/또는 사용 시나리오들에서, 비휘발성 메모리 페이지는 다량의 사용자(비-오류 정정 코드) 데이터 바이트들 및 메타-데이터와 오류 정정 코딩(예컨대, ECC)을 위한 스페어 공간의 양을 포함한다. 통상적인 NAND 플래시 페이지 사이즈는 8 KB 또는 16 KB 또는 32 KB의 사용자 데이터인 반면, 논리 블록 어드레스들을 위한 통상적인 맵핑 유닛 사이즈는 4 KB 또는 8 KB이다. (용어 "사용자" 데이터는 비휘발성 메모리 페이지에 대해 사용되며, 일부 비휘발성 메모리 페이지들은 맵 데이터 및/또는 체크포인트 데이터와 같은 "시스템" 데이터를 저장한다. 사용자 데이터는 일반적으로 비휘발성 메모리 페이지의 비-오류 정정 코딩 부분들을 지칭하는 것으로 의도된다.) NAND 플래시 페이지들은 블록들로 구성되며, 통상적으로는 블록당 128, 256, 또는 512 플래시 페이지들이다. 블록은 소거가능한 최소-사이즈 유닛이며, NAND 플래시 페이지는 그 페이지가 (재)기록될 수 있기 이전에 소거된다.
NAND 플래시와 같은 일부 비휘발성 메모리들은 복수의 플레인(plane)들 및/또는 뱅크(bank)들을 구비하며, 2개 이상의 플레인들 각각으로부터 동시에 페이지 및/또는 블록에 액세스하는 "멀티-플레인(multi-plane)" 동작들을 허용한다. 멀티-플레인 프로그래밍의 사용은 기록 대역폭을 유리하게 증가시키며, 기록의 기본 유닛이 단일의, 1-플레인 페이지가 아닌 멀티-플레인 페이지가 되게 한다. 본 명세서에서 사용되는 용어 비휘발성 메모리 페이지(또는 비휘발성 메모리 블록)는 비휘발성 메모리가 사용되는 방식에 따라, 단일 비휘발성 메모리 페이지(또는 블록) 또는 멀티-플레인 비휘발성 메모리 페이지(또는 블록)을 나타낸다.
본 명세서에서는 용어 "플래시" 변환 계층(예컨대, FTL)이 사용되지만, 논리적 어드레스와 물리적 어드레스 간의 변환 계층의 개념은 복수 타입의 비휘발성 메모리에 적용될 수 있다. 일 예에서, 소정 타입의 비휘발성 메모리, 예컨대 NAND 플래시는 재기록되기 이전에 큰 유닛들로 소거된다. 다른 예에서, 몇몇 타입의 비휘발성 메모리는 웨어링(wearing) 처리되어, 웨어-레벨링(wear-leveling)(비휘발성 메모리의 보다 많이 마모된 부분들에서 덜 마모된 부분들로 데이터를 이동시킴)을 발생시킨다. 또 다른 예에서, 새로운 형태의 하드 디스크 자기 기록, 예컨대 싱글드 자기 기록(shingled magnetic recording)은 이전에 기록된 데이터를 갱신 기록하는 능력을 갖지 않으며, 훨씬 더 큰 양의 다른 데이터를 소거하지 않는다. 각종 실시예들에서, 코어스-그레인형(coarse-grained)이거나 유한 내구성을 갖는 비휘발성 메모리가 (플래시) 변환 계층으로부터 혜택을 받을 수 있다.
도 1을 참조하면, 비휘발성 메모리 페이지 내의 고정-사이즈 영역들에 논리 블록 어드레스를 맵핑하는 일 실시예의 선택된 상세 도면이 도시되어 있다. 몇몇 전통적 플래시 변환 계층들은 비휘발성 메모리 페이지(예컨대, 비휘발성 메모리 페이지(100)) 내의 사용자 데이터 바이트들의 수는 2의 거듭제곱(및/또는 섹터 사이즈의 배수)이며, 비휘발성 메모리 페이지를 정수 개의 맵핑 유닛들(도 1에 그 각각의 데이터가 도시됨)로 나눈 것으로 가정한다. 예를 들어, 비휘발성 메모리 페이지당 16 KB의 사용자 데이터 및 4 KB 맵핑 유닛들을 가진 경우에 있어서, 각각의 비휘발성 메모리 페이지는 4개의 맵핑 유닛을 포함하고, 플래시 변환 계층은 각 맵핑 유닛의 어드레스(예컨대, LBA[M:U](110))를 각각의 비휘발성 메모리 페이지에 맵핑하며, 이 4개의 맵핑 유닛 중의 하나는 각각의 비휘발성 메모리 페이지 내에 존재한다. 즉, 각 맵 엔트리는 다음과 같은 각각의 필드들을 포함한다:
nonvolatile_memory_page_address[n-1:0], mapping_unit_within_nonvolatile_memory_page[k-1:0]
여기서, nonvolatile_memory_page_address는 비휘발성 메모리 내의 고유의 비휘발성 메모리 페이지를 지칭하고, mapping_unit_within_nonvolatile_memory_page는 각 비휘발성 메모리 페이지의 2k 맵핑-유닛-사이즈 부분들 중의 하나를 지칭한다(k는 전체 비휘발성 메모리에 대해 고정되어 있음). 서브-페이지 어드레스(104)는 nonvolatile_memory_page_address과 mapping_unit_within_nonvolatile_memory_page의 조합이다. 섹터-기반(예컨대, 맵핑 유닛보다 정교한 입도(granularity)) 어드레싱에 있어서, 논리 블록 어드레스(예컨대, LBA[U-1:0](111))의 하위(lower-order) 비트들은, 서브-부분, 예를 들어 맵핑 유닛 내의 섹터들(예컨대, 서브-페이지(113) 내의 섹터(들))의 개수를 명시한다.
도 2를 참조하면, 선택적으로 비휘발성 메모리 페이지들을 스패닝하는 가변-사이즈 영역에 논리 블록 어드레스를 맵핑하는 일 실시예의 선택된 상세 도면이 도시되어 있다. 가변-사이즈 플래시 변환 계층(예컨대, VFTL)들은 하나 이상의 비휘발성 메모리 페이지들의 가변-사이즈 영역에 대하여 맵핑 유닛(예컨대, LBA[M:U](110)) 중의 하나의 어드레스(또는 라벨)을 개념적 맵핑한다(예를 들어, 맵핑 유닛은 비휘발성 메모리에 저장되기 이전에 압축되기 때문, 및/또는, 다른 예에서, 맵핑 유닛들은 호스트에 의해서 예컨대 객체 저장소(object store)용의 가변-사이즈 조각들로 기록되기 때문임). 그러나, 각 맵 엔트리에 완전한 바이트 어드레스(204) 및 바이트 데이터 길이(206)를 제공하는 것은, 전통적 플래시 변환 계층들과 비교할 때 맵 엔트리들을 커지게 만든다.
도 3을 참조하면, 정수 개의 판독 유닛들을 포함하는 비휘발성 메모리 페이지에 대한 일 실시예의 도면이 도시되어 있다. 몇몇 실시예들에서, 가변-사이즈 플래시 변환 계층들은, E페이지(예컨대, 오류 정정 코딩 페이지) 어드레스("판독 유닛" 어드레스로도 불림)에 대한 맵핑에 의해서 맵핑 유닛들의 어드레스들(또는 라벨들)에서 물리적 어드레스들로의 맵핑을 수행한다. E페이지(또는 판독 유닛)는 비휘발성 메모리로부터 판독될 수 있고 또한 비휘발성 메모리의 콘텐츠들을 보호하는데 사용되는 오류 정정 코드에 의해 정정될 수 있는 최소 데이터의 양이다. 즉, 각 판독 유닛은 데이터 및 해당 데이터를 보호하는 대응하는 오류 정정 코딩 체크 바이트들의 양을 포함한다. 몇몇 실시예들에서, 비휘발성 메모리 페이지(예컨대, 비휘발성 메모리 페이지(100)), 또는 다른 실시예들에서, 기록을 위해 하나의 유닛으로 처리되는 비휘발성 메모리 페이지들의 그룹은, 도 3에 도시된 바와 같이, 정수 개의 판독 유닛들로 분할된다.
NAND 플래시와 같은 몇몇 타입의 비휘발성 메모리에 있어서, 비휘발성 메모리에 저장되는 데이터는 사용자 데이터 바이트들과 오류 정정 코드 바이트들(오류 정정 정보)의 혼합이며, 비휘발성 메모리에 액세스하는 상위-레벨 컨트롤러는 비휘발성 메모리의 어느 바이트들 및 얼마나 많은 바이트들이 사용자 데이터를 위해 사용될지 및 어느 바이트들 및 얼마나 많은 바이트들이 오류 정정 코딩을 위해 사용될지를 결정한다. 각종 실시예들에서, 비휘발성 메모리 페이지당 판독 유닛들의 수는 달라질 수 있다. 예를 들어, 비휘발성 메모리의 일부 부분들은 다른 것보다 강한 오류 정정 코드들을 사용(오류 정정 코딩 정보를 위하여 비휘발성 메모리 페이지에 더 많은 바이트들을 사용)하며, 더 적은 판독 유닛들 및/또는 판독 유닛당 더 적게 사용될 수 있는 데이터를 갖는다. 다른 예에서, 프로그램/소거 사이클들은 비휘발성 메모리를 약하게 만들기 때문에, 비휘발성 메모리 페이지당 판독 유닛들이 수는 비휘발성 메모리가 사용됨에 따라 달라질 수 있으며, 이로 인해 비휘발성 메모리가 더 사용(마모)됨에 따라 더 강한 오류 정정 코드들을 야기한다.
각종 실시예들에 따르면, 사용되는 오류 정정 코드는 RS(Reed-Solomon) 코드; BCH(Bose Chaudhuri Hocquenghem) 코드; 터보 코드; 경판정(hard-decision) 및/또는 연판정(soft-decision) LDPC(low-density parity-check) 코드; 폴라 코드; 비이진(non-binary) 코드; RAID(redundant array of inexpensive/independent disks) 코드; 소거 코드; 임의의 다른 오류 정정 코드; 구성들, 연결들, 및 인터리빙을 포함하는 전술의 것들의 임의의 조합 중의 하나 이상의 것이다. 통상적인 코드워드 사이즈들의 범위는 512 바이트(플러스 오류 정정 코딩 바이트들)로부터 2176 바이트(플러스 오류 정정 코딩 바이트들)까지가 된다. 통상적인 오류 정정 코딩 바이트들의 수의 범위는 단지 몇 바이트로부터 수백 바이트까지가 된다. 몇몇 멀티-레벨 셀 NAND 플래시 디바이스들에서, 오류 정정 기준들은 1 KB의 사용자 데이터당 40비트이다. 몇몇 멀티-레벨 셀 NAND 플래시 디바이스들에서, 코드 레이트(판독 유닛에서의 전체 바이트에 대한 사용자 바이트의 비율)는 통상적으로 94% 미만이다. 예를 들어, MLC NAND 플래시 디바이스는 17664 바이트 사이즈의 플래시 페이지들을 가지며, 이 중의 16384 바이트는 맵핑된 데이터를 명목상 저장하는데 사용되고, 1280 바이트는 메타-데이터 및 오류 정정 코딩 바이트들을 명목상 저장하는데 사용되는 "스페어(spare)" 바이트이다. MLC NAND 플래시 디바이스용으로 권고되는 오류 정정 코딩 크기는 1 킬로바이트당 40비트의 정정이며, 이것은 1 킬로바이트의 맵핑된 데이터 바이트당 70바이트의 스페어 바이트를 사용한다.
도 4를 참조하면, 하나 이상의 판독 유닛들을 스패닝하는 가변-사이즈 영역으로 논리 블록 어드레스를 맵핑한 일 실시예의 선택된 상세 도면이 도시되어 있다. 몇몇 실시예들에서, VFTL 맵핑은 가변-사이즈(예컨대, 압축된) 맵핑 유닛의 어드레스(또는 라벨)(예컨대, LBA[M:U](110))을, 다수의 판독 유닛들로 맵핑시키며, 이 맵의 각 엔트리에서는 판독 유닛들이 판독 유닛 어드레스(404) 및 스팬(span)(판독 유닛들의 수)(406)으로서 나타나 있다. 맵 엔트리들 중의 하나에 의해 참조되는 판독 유닛들은, 하나 이상의 (논리적 및/또는 물리적) 순차적 비휘발성 메모리 페이지들, 예를 들어, 비휘발성 메모리 페이지 바운더리에 임의적 및/또는 선택적으로 걸쳐있는 다수의 판독 유닛들이다. 판독 유닛들 내에 데이터를 패킹(packing)하는 각종 실시예들에서는, 일반적으로 맵의 엔트리 단독만으로는 연관된 데이터의 위치를 탐색하는데 충분하지 않으며(왜냐하면, 엔트리는 판독 유닛들만을 표시하며, 판독 유닛들 내의 데이터를 위치를 표시하는 것은 아니기 때문임), 참조되는 판독 유닛들 내의 다른 정보(예컨대, 헤더들)를 사용하여, 그 연관된 데이터의 위치를 정확하게 탐색하게 된다.
몇몇 실시예들에서, 데이터는, 비휘발성 메모리의 복수의 다이(die)들에 걸쳐 스트라이핑(Striping)되는 방식으로, 비휘발성 메모리 페이지들에 기록된다. 복수의 다이들에 걸쳐 기록 데이터를 스트라이핑하는 것은, 유리하게도, 비휘발성 메모리 페이지를 스트라이프당 한번씩 소정 다이에 기록하는 것만으로 더 큰 기록 대역폭을 가능하게 한다. 복수의 다이들에 걸친 블록들의 스트라이프는, 다른 실시예들 및/또는 사용 시나리오들에서, RAID-유사 리던던시가 예를 들어 하나의 리던던트 다이(redundant die)를 사용하여 리던던시 블록 단위로 부가되기 때문에, 리던던시 블록으로 지칭된다. 각종 실시예들에서, 비휘발성 메모리의 몇몇 블록들은 기록시에 결함이 존재하여 스킵(skip)되며, 이에 따라 스트라이핑은 때때로, 그 다이 중의 하나가 스킵되는 "홀(holes)"을 갖는다. 이러한 실시예들에서, "순차적" 비휘발성 메모리 페이지들은 비휘발성 메모리 페이지가 기록되는 순서에 의해 결정되는 논리 순서로 순차적이다.
도 5를 참조하면, 헤더들 및 데이터를 포함하는 판독 유닛에 대한 일 실시예의 선택된 상세 도면이 도시되어 있다. 각종 실시예들에서, 도 4에 도시된 맵핑은 판독 유닛들 내의 가변-사이즈 데이터의 위치를 탐색하는 기준을 발생시킨다. 도 5에 도시된 바와 같이, 각 판독 유닛(예컨대, 판독 유닛들(500 및 510))은 0개 이상의 헤더들(501)의 세트를 가지며, 통상적으로 헤더들은, 가변-사이즈 데이터가 하나 이상의 판독 유닛들로 "타일링(tiled)"됨(예컨대, 낭비되는 공간 없이 조밀하게 패킹됨)에 따라 하드웨어에 의해 기록된다. 통상적으로, 헤더들은 비휘발성 메모리가 판독될 시에, 다른 하드웨어에 의해 해석되어서 가변-사이즈 데이터를 추출한다. 가변-사이즈 데이터는 매칭 논리 블록 어드레스(또는 라벨)를 가진 헤더들 중의 하나에서 각각의 오프셋들 및 길이로 위치되며, 데이터는 판독 유닛들(예컨대, "DATA, START" 및 "DATA, CONTINUE"로 예시된 가변-사이즈 데이터)을 임의적으로 및/또는 선택적으로 스패닝한다.
각종 실시예들에서, 또한 헤더들은 판독 유닛 내의 논리 블록 어드레스(또는 동등하게는, 맵핑 유닛 어드레스나 라벨)를 포함하는 리사이클링(예컨대, 가비지 컬렉션(garbage collection) 및/또는 웨어-레벨링(wear-leveling))의 일부로서 사용되며, 이들 모두는 판독 유닛 내의 가변-사이즈 데이터를 탐색을 가능하게 하고, 가변-사이즈 데이터가 계속 유효하거나 갱신 기록된 경우에는, 판독 유닛들 중의 특정의 것이 판독될 시점을 결정하는 방식을 제공한다(맵에서 논리 블록 어드레스 또는 라벨을 조회하고, 그 맵이 특정 판독 유닛의 물리적 어드레스를 계속 참조하고 있는지 또는 판독 유닛들 중의 다른 것을 참조하도록 업데이트되었는지를 결정하는 것에 의해). 따라서, 헤더들은, 판독 유닛들의 물리적 위치와 조합된 헤더들이, 맵 내의 것과 유사하되 물리적 위치로부터 논리 블록 어드레스(또는 라벨)로 연관되어 있는 정보를 갖는다는 점에서 "리버스 맵(reverse map)"을 형성한다고 한다.
몇몇 실시예들에서, 논리 블록 어드레스들(또는 라벨들)에 기초하여 판독 유닛들로부터 데이터를 추출하는 전용 하드웨어가 실행되어 랜덤 판독을 위한 고효율로 동작한다. 전용 하드웨어는 하나 이상의 판독 유닛들 내에 있는 헤더들을 파싱하여 소정의 논리 블록 어드레스(또는 라벨)를 가진 헤더들 중의 하나를 탐색하며, 이어서 그 각각의 길이 및 오프셋을 사용하여 연관된 가변-사이즈 데이터를 추출한다. 그러나, 하드웨어-기반 솔루션은 (실리콘 면적 및 전력)에 비용이 많이 든다. 순차적 성능이 랜덤 성능보다 더욱 중요한 로우-엔드 및/또는 모바일 환경에서는, 실리콘 면적을 줄여, 전력을 절약하고, 높은 순차적 스루풋 레이트(throughput rate)들을 달성하기 위해 가변-사이즈 플래시 변환 계층에 대한 변경들이 실행된다.
몇몇 실시예들에서, 순차적-판독-최적화된 가변-사이즈 플래시 변환 계층(예컨대, SRO-VFTL)은 데이터 내의 헤더들에 대한 임의의 갭(gap)들 없이 비휘발성 메모리 페이지들(또는, 몇몇 실시예들에서는, 기록 목적으로 하나의 유닛으로 취급되는 비휘발성 메모리 페이지들의 그룹)로, (밀집 패킹된) 데이터를 타일링한다 - 모든 헤더들은 비휘발성 메모리 페이지의 한 부분으로 그룹화됨. 다른 실시예들에서, 헤더들은 데이터에 액세스하기 위해 동적으로 사용되지 않으며, 리사이클링 및 복구를 위해(예컨대, 예상치 못한 전력 손실로부터의)서만 사용된다. 대신에, 맵의 엔트리들은 비휘발성 메모리 페이지들 내의 가변-사이즈 (예컨대, 압축된) 데이터를 탐색하는데 사용되는 완전한 정보를 포함한다. 헤더들 및 데이터를 비휘발성 메모리 페이지의 상이한 부분들로 분리시키는 것으로 인해, 헤더들만 포함하는 판독 유닛들, 헤더들 및 데이터의 혼합(그러나, 도 6에서와 같이, 비휘발성 메모리 페이지당 단 하나의 판독 유닛)을 포함하는 판독 유닛들, 및 데이터만을 포함하는 판독 유닛들이 발생된다.
저비용의 순차적 판독 스루풋으로 구성되었지만, 순차적-판독-최적화된-가변-사이즈 플래시 변환 계층은 초당 랜덤 판독 입/출력 동작들(예컨대, IOP들), 초당 랜덤 기록 입/출력 동작들, 및 순차적 기록 스루풋과 같은 다른 메트릭스에 대하여 비교적 잘 수행할 수 있다. 그러나, 각 판독 유닛의 헤더들과의 VFTL-스타일 데이터 타일링과 같은 기능들에 대한 하드웨어 보조들을 제거하는 것은, 제어 프로세서에게 더 큰 부담을 지우게 된다. 다르게는, 몇몇 실시예들에서, 순차적-판독-최적화된-가변-사이즈 플래시 변환 계층은 데이터 타일링, 데이터 추출, 또는 그 밖의 동작들에 대한 하드웨어 보조들을 사용한다.
도 6을 참조하면, SRO-VFTL 비휘발성 메모리 페이지에 대한 일 실시예의 도면이 도시되어 있다. 도 7을 참조하면, SRO-VFTL 비휘발성 메모리 페이지에 대한 다른 실시예의 도면이 도시되어 있다. 도 6과 도 7의 실시예들 간의 차이점은 이전의 비휘발성 메모리 페이지(640)로부터의 연속 데이터가 헤더들의 앞에 있는지 뒤에 있는지의 여부이다. 비휘발성 메모리 페이지 내의 데이터에 대한 다양한 실시예들 및 구성들이 고려된다.
각종 실시예들에 따르면, 비휘발성 메모리 페이지는 다음 중의 하나 이상을 포함한다:
- 마스터 헤더(610), 임의적 및/또는 선택적으로는 리던던시 블록 헤더(620)(예컨대, 리던던시 블록에서 각 블록의 첫번째 페이지에 부가된 헤더), 및 0개 이상의 추가적인 패킹된 헤더들(630)을 포함하는, 헤더들. 각 비휘발성 메모리 페이지는 (헤더들과 연관된) 데이터가, 적어도 일 카운트 개수의 다음의 헤더들 및 비휘발성 메모리 페이지에서 시작하는 위치에 대한 포인터를 갖는다. 몇몇 실시예들에서, 헤더들은 바이트-정렬될 수 있으며, 각기 6 바이트(예컨대, B)만일 수 있다. 헤더들은 데이터 헤더들, 에포크(epoch) 헤더들 및 패딩(padding)을 포함할 수 있으며, 이에 한정되지 않는다. 데이터 헤더들은 맵핑 유닛 어드레스 및 길이를 이용한다. 모든 데이터는 연속적으로 패킹되기 때문에, 오프셋이 나타난다.
- 임의적 및/또는 선택적으로는, 이전의 비휘발성 메모리 페이지(맵핑 유닛의 가변-사이즈 데이터의 일부)(640)로부터의 연속 데이터.
- 비휘발성 메모리 페이지에 채워지는 하나 이상의 맵핑 유닛들(650)의 패킹된(예컨대, 임의적 및/또는 선택적으로는 압축된) 데이터, 임의적 및/또는 선택적으로는 이것의 마지막이 후속의 비휘발성 메모리 페이지에서 계속된다.
- (650에 포함된) 비휘발성 메모리 페이지의 끝 부분에서의 임의적 패딩.
각종 실시예들에서, 고도로 압축되어 있는 경우(예컨대, 매우 많은 헤더들), 데이터는, 비휘발성 메모리 페이지의 끝 부분에서 패딩되는 것이 가능하더라도, 바이트-패킹된다(예컨대, 홀이 없음). 패딩은, 예를 들어, (i) 비휘발성 메모리 페이지에 부가되는 마지막 가변-사이즈 데이터 조각에 헤더의 사이즈보다 적게 사용된 바이트가 남아 있는 경우(이에 따라 새로운 헤더가, 다른 가변-사이즈 데이터 조각을 시작시키기 위해 부가될 수 없는 경우) 및 (ii) 임의적 및/또는 선택적으로는, 명시된 개수의 비휘발성 메모리 페이지당 헤더들이 초과된 경우(이에 따라 비휘발성 메모리 페이지들에 저장되는 맵핑 유닛들의 수가, 맵핑 유닛들의 데이터 사이즈가 아닌, 명시된 개수의 헤더들로 제한되는 경우)에 사용된다.
몇몇 실시예들에서, 순차적-판독-최적화된-가변-사이즈 플래시 변환 계층을 이용한 복구 및/또는 리사이클링(예컨대, 가비지 컬렉션)은, 유리하게도 비-순차적-판독-최적화된-가변-사이즈 플래시 변환 계층에서와 같은 모든 판독 유닛이 아닌, 각각의 비휘발성 메모리 페이지들의 헤더 부분만을 판독 및/또는 오류 정정 및/또는 검사할 수 있다. 비휘발성 메모리 페이지의 데이터가 재기록될 수 있는 것으로 리사이클링이 결정한 경우, 해당 데이터가 또한 판독될 수 있으며, 오류 정정될 수도 있다. 몇몇 실시예들에서는, 리사이클링을 위해 전체 비휘발성 메모리 페이지가 판독되지만, 비휘발성 메모리 페이지 내의 일부 데이터가 리사이클링되어야 하는 것으로 결정될 때까지는 헤더 부분만이 오류 정정된다.
각종 실시예들에서, 비휘발성 메모리 페이지당 헤더들의 수는 모든 헤더들이 비휘발성 메모리로부터 판독되는 것을 보장하도록 판독될 수 있는 확실한 비휘발성 메모리 페이지당 판독 유닛들의 수로 제한된다. 도 6의 실시예에서는, 최대 개수의 헤더들을 포함하기에 충분한 개수의 판독 유닛들만이 판독된다. 도 7의 실시예에서는, 추가 개수의 판독 유닛들이 판독되어 이전의 비휘발성 메모리 페이지(예컨대, 연속 데이터(640))로부터 완료된 가장 큰 데이터 사이즈를 처리한다. 그러나, 도 7의 실시예는 연관된 맵 엔트리에 대한 각각의 오프셋과 길이, 및 이전의 비휘발성 메모리 페이지에서의 사용자(비-오류 정정 코드) 데이터의 바이트들의 수에 기초하여 완료된 데이터의 바이트들의 수가 결정가능함에 따라, 다수의 판독 유닛들이 연관된 맵 엔트리로부터 결정되는 이전의 비휘발성 메모리 페이지(예컨대, 연속 데이터(640))로부터 완료된 데이터에 액세스하는 것을 가능하게 한다. 또한, 완료된 데이터 이전의 헤더들만이 임의적 리던던시 블록 헤더(각 블록의 첫 번째 페이지와 같은, 명시된 비휘발성 메모리 페이지들에만 존재함) 및 마스터 헤더(각 비휘발성 메모리 페이지에 항시 존재함)이다. 도 6의 실시예에서, 비휘발성 메모리에 두 번 액세스할 필요없이 완료된 데이터를 판독하기 위해, 최대 개수의 헤더들이 존재하는 것으로(또는 전체 비휘발성 메모리 페이지가 판독되는 것으로) 가정된다.
몇몇 실시예들에서, 순차적-판독-최적화된-가변-사이즈 플래시 변환 계층은 복수의 맵 엔트리들을 가진 단일-레벨 맵을 사용한다. 다른 실시예들에서, 순차적-판독-최적화된-가변-사이즈 플래시 변환 계층은 제2-레벨 맵(예컨대, SLM) 페이지들을 가리키는 제1-레벨 맵(예컨대, FLM)을 구비한 2-레벨 맵과 같은 멀티-레벨 맵을 사용하며, 여기서 각각의 제2-레벨 맵 페이지들은 복수의 리프(leaf)-레벨 맵 엔트리들을 포함한다. 다른 실시예들에서, 멀티-레벨 맵은 2개보다 많은 레벨들, 예컨대 3개의 레벨들을 갖는다. 몇몇 실시예들 및/또는 사용 시나리오들에서, 멀티-레벨 맵의 사용은 맵 중의 관련 부분(예컨대, 사용에)만이 로컬 메모리(예컨대, 솔리드-스테이트 드라이브 컨트롤러의 온-칩 SRAM, 또는 호스트의 로컬 DRAM)에 저장되는 것(예컨대, 캐싱되는 것)을 가능하게 하며, 이에 따라 맵의 유지 비용을 감소시킨다. 예를 들어, 일반적 사용 패턴들이 어느 한 시점에서 1 기가바이트(예컨대, GB)의 논리 블록 어드레스 공간 활성 상태를 갖는 경우, 그 활성 상태인 1 GB 부분의 논리 블록 어드레스 공간에 액세스하는데 충분한 맵의 부분만이, 비휘발성 메모리에 저장되는 것에 대한 고속 액세스를 위해 로컬로 저장된다. 논리 블록 어드레스 공간 중의 활성 상태인 부분 이외의 참조들은, 비휘발성 메모리로부터 하나 이상 레벨의 멀티-레벨 맵의 요청된 부분들을 페칭하며, 임의적 및/또는 선택적으로는 그 맵의 다른 로컬-저장된 부분들을 대체한다.
각각의 리프-레벨 맵 엔트리들은 복수의 맵핑 유닛들 중의 하나의 어드레스(또는 라벨)과 연관된다(대응한다). 일 예에서, 논리 블록 어드레스는 예컨대, 논리 블록 어드레스 중의 0개 이상의 최하위 비트(least-significant bit)(예컨대, LSB)를 제거하고/하거나 정렬 목적으로 논리 블록 어드레스에 상수를 부가하는 것에 의해 맵핑 유닛 어드레스로 변환되며, 이 맵핑 유닛 어드레스이 맵 내에서 조회됨으로써 대응하는 맵의 엔트리를 결정하게 된다. 다른 예에서는, 해시 테이블(또는 다른 연관 데이터 구조)에서 라벨이 조회됨으로써 맵핑 유닛 어드레스로서 사용되는 고유 식별자를 결정하게 된다.
도 8을 참조하면, 각종 타입의 헤더들에 대한 일 실시예의 상세 도면이 도시되어 있다. 도 8의 예에서, 헤더들은 각기 6 바이트로 피팅(fiting)되도록 포맷되어 있다. 각종 실시예들에 따르면, 각종 타입의 헤더들은 다음들 중의 하나 이상의 헤더이다: 모두 동일한 사이즈를 가짐; 임의적 및/또는 선택적으로는 상이한 사이즈를 가짐; 각각의 헤더들은 헤더의 사이즈를 명시한 각각의 필드를 포함함; 상이한 비휘발성 메모리 페이지들에서는 사이즈가 달라짐; 및 전술한 것들의 임의의 조합.
각종 실시예들에 따르면, 비휘발성 메모리 페이지의 헤더들은 다음 중의 하나 이상을 포함한다:
- 가변-사이즈 데이터 부분과 연관된 정보를 표시하는 데이터 헤더들(810). 데이터 헤더와 연관된 데이터는 데이터 헤더가 나나타나는 것과 동일한 비휘발성 메모리 페이지에서 시작된다. 다른 실시예들 및/또는 사용 시나리오들에서, 비휘발성 메모리 페이지가 데이터 헤더용의 잔존 공간만을 가진 경우에는, 모든 연관된 데이터가 후속의 비휘발성 메모리 페이지에서 시작된다.
- 맵 헤더들, 예를 들어 제2-레벨 맵(예컨대, SLM) 헤더들(820). 제2-레벨 맵 헤더들은 어떤 제2-레벨 맵 페이지가 저장되어 있는지를 나타내는(예컨대, 제2-레벨 맵 리사이클링 및/또는 복구를 위한) 제1-레벨 맵 인덱스(예컨대, FLMI)를 포함한다.
- 로그/체크포인트 헤더들(820). 로그/체크포인트 헤더들은 리사이클링, 복구, 오류 처리, 디버깅, 또는 그 밖의 특수한 상황들을 위해 사용되는 데이터를 나타낸다.
- 데이터를 대응하는 맵/체크포인트 정보와 연관시키는 복구의 부분으로서 사용되는, 에포크 헤더들(830). 통상적으로는, 비휘발성 메모리 페이지당 적어도 하나의 에포크 헤더가 존재한다.
- 비휘발성 메모리 페이지에 있는 헤더들의 개수 및 비-헤더 데이터가 비휘발성 메모리 페이지 내에서 시작되는 위치에 관한 정보를 제공하도록 비휘발성 메모리 페이지당 한번 사용되는 마스터 헤더들(870). 도 6 및 도 7의 실시예들에서 도시된 바와 같은, 각종 기술들이 비-헤더 데이터의 시작을 결정한다.
- 소정의 비휘발성 메모리 페이지들, 예를 들어 리던던시 블록의 각 블록에 있는 첫 번째 비휘발성 메모리 페이지에서 사용되는 리던던시 블록 헤더들(880).
- 그 밖의 타입의 헤더들 (840), 예를 들어, 패딩 헤더들, 더 큰 길이를 지원하는 체크포인트 헤더들 등.
몇몇 실시예들에서, 일부 헤더들은 헤더에 대한 복수의 하위타입들을 제공하는 TYPE 필드를 포함한다. 각종 실시예들에서, 일부 헤더들은 헤더와 연관된 데이터의 길이를 포함하는 LEN(길이) 필드를 포함한다. 각종 실시예들에서, LEN 필드 이외에, 또는 그에 부가하여, 일부 헤더들은 헤더와 연관된 데이터의 끝 부분에 대한 오프셋(비휘발성 메모리 페이지 내의)을 포함하는 OFFSET(오프셋) 필드(미도시)를 포함한다. (몇몇 실시예들에서, 가변-사이즈 데이터 조각들 중의 마지막 조각이 비휘발성 메모리 페이지를 스패닝하는 경우, OFFSET은 후속의 비휘발성 메모리 페이지 내의 오프셋 또는 후속의 비휘발성 메모리 페이지 내의 바이트들의 수이다.) 낭비되는 공간 없이 패킹된 가변-사이즈 데이터 조각들을 이용하여, 비휘발성 메모리 페이지 내의 각 가변-사이즈 데이터 조각들의 시작 위치 및 끝 위치가, 비휘발성 메모리 페이지 내의 첫 번째 가변-사이즈 데이터 조각들의 시작 위치(예컨대, 도 7에서와 같이 헤더들의 직후의), 및 LEN 또는 OFFSET 필드들에 의해 나타낼 수 있기 때문에, 일반적으로 LEN 필드 또는 OFFSET 필드 중의 하나 만이 실행된다.
도 9를 참조하면, 맵 엔트리(900)에 대한 일 실시예의 선택된 상세 도면이 도시되어 있다. 각종 실시예들에 따르면, 맵 엔트리들은 다음 중의 하나 이상을 포함한다:
- 물리적 비휘발성 메모리 페이지 어드레스,
- 가변-사이즈 데이터 아이템에 대한 비휘발성 메모리 페이지 내의 오프셋(예컨대, OFFSET),
- 가변-사이즈 데이터 아이템(예컨대, LEN_M128)의 길이, 및
- 그 밖의 제어 정보.
몇몇 실시예들에서, 길이는 예를 들어, 0의 값이 명시된 최소 길이에 대응하게 되도록 오프셋되는 것에 의해 인코딩된다. 예를 들어, 최소 길이가 128 바이트인 경우, LEN_M128 값 0은 128 바이트를 나타낸다. 다른 실시예들에서, 명시된 최소 길이 미만으로 압축되는 데이터는 적어도 명시된 최소 길이 사이즈까지 패딩된다.
각종 실시예들에서, SRO-VFTL 맵 엔트리들은 풀(full) 오프셋 및 대응하는 데이터의 바이트 길이를 저장하기 때문에, SRO-VFTL 맵 엔트리들은 VFTL 맵 엔트리들보다 크다. 이에 따라, 비휘발성 메모리에 저장시에 맵 엔트리들의 사이즈를 감소시키는 것은 유리할 수 있다. 통상적인 사용에 있어서, 흔히 데이터는 적어도 일부 입도(granularity) 및/또는 하나보다 많은 평균 개수의 순차적 맵핑 유닛들로, 순차적으로 판독 및 기록된다. 또한, 기록의 순차적 성질을 이용하는 맵 엔트리 압축 포맷은 높은 맵 압축율을 구현 및 생성함에 있어서 상대적으로 저가이다. 맵 엔트리들의 압축은, 비휘발성 메모리 페이지 바운더리가 크로스(crossing)될 때까지 동일한 비휘발성 페이지들로 들어가는 순차적-기록된 데이터에 의해 또한 도움을 받는다.
도 10을 참조하면, 각종 압축된 맵 엔트리들에 대한 일 실시예의 선택된 상세 도면이 도시되어 있다. 각종 맵 엔트리들은 압축되지 않은 부분(1010), 이전의 맵 엔트리와 동일한 비휘발성 메모리 페이지 어드레스를 갖는 부분(1020), 이전의 맵 엔트리와 동일한 비휘발성 메모리 페이지 어드레스를 가지면서 이전의 데이터가 끝난 오프셋에서 시작하는 부분(1030), 및 이전의 맵 엔트리와 동일한 비휘발성 메모리 페이지 어드레스를 가지면서 이전의 데이터가 끝난 오프셋에서 시작하며 또한 이전의 맵 엔트리와 동일한 길이를 갖는 부분(1040)을 포함한다.
멀티-레벨 맵을 갖는 몇몇 실시예들에서, 캐시(cache)는 하위-레벨(예를 들면, 리프-레벨) 맵 페이지들로 유지된다. 캐싱된 맵 페이지들 압축되지 않은 형태이며, 프로세서(예를 들면, 솔리드-스테이트 드라이브 컨트롤러의 호스트 또는 제어 프로세서)에 의한 신속한 액세스를 제공한다. 맵 페이지들이 캐시로 이동하는 경우(예를 들면, 비휘발성 메모리 또는 DRAM(dynamic random access memory)으로부터), 맵 페이지들은 압축되지 않는다. 맵 페이지들이 캐시로부터 플러싱(flushing)되는 경우(예를 들면, 수정으로 인해), 맵 페이지들은 저장소(예를 들면, 비휘발성 메모리)에 압축된다. 동적 랜덤 액세스 메모리에 맵 페이지들의 일부 또는 전부를 저장하는 것에 의해 레이턴시를 감소시키는데 DRAM이 사용되는 각종 실시예들에 따르면, 동적 랜덤 액세스 메모리 내의 맵 페이지들은 다음 중의 하나 이상으로 저장된다: 압축된 형태; 압축되지 않은 형태; 선택적으로 압축되거나 압축되지 않은 형태; 및 동적 랜덤 액세스 메모리 내의 맵 페이지들의 (가변-사이즈) 압축 버젼들에 액세스하는데 사용되는 인디렉션 테이블(indirection table)을 구비한 형태.
몇몇 실시예들에서, 호스트 기록 커맨드의 호스트 기록 데이터는, 그 호스트 기록 데이터가 솔리드-스테이트 드라이브 컨트롤러에 도달하여 로컬(예를 들면, 온-칩) 메모리에 FIFO(first-in-first-out)-유사 방식으로 저장됨에 따라, 임의적 및/또는 선택적으로 압축된다. 예를 들어, 몇몇 실시예들에서, 호스트 기록 데이터는 펌웨어 데이터 구조들, 플래시 통계, 맵의 일부들(예를 들면, 하나 이상의 맵 페이지들을 담당하는 캐시), 리사이클링 판독 데이터를 포함하는 비휘발성 메모리로부터의 판독 데이터, 비휘발성 메모리에 기록될 데이터의 헤더들, 소프트웨어 코드, 펌웨어 코드, 및 그 밖의 사용들과 함께, 통합 버퍼(예컨대, 도 11a의 UBUF)에 저장된다. 각종 실시예들에서, 하나 이상의 전용 메모리들이 각종 솔리드-스테이트 드라이브의 로컬 저장 기준들을 위해 사용된다.
몇몇 실시예들에서, 호스트 기록 커맨드의 호스트 기록 데이터는 솔리드-스테이트 드라이브 컨트롤러로 전송되기 이전에 호스트에서 임의적 및/또는 선택적으로 압축된다. 예를 들어, 데이터베이스 레코드들이 입/출력 디바이스로 기록되기 이전에 호스트 데이터베이스에 의해 압축된다.
각종 실시예들에서, 호스트로부터 도달한 각 데이터의 맵핑 유닛에 있어서, 솔리드-스테이트 드라이브의 제어 프로세서(예컨대, 도 11a의 CPU(central 프로세싱 유닛))에는 다음 중의 하나 이상이 통지된다: 각각의 맵핑 유닛 어드레스, 이 각각의 맵핑 유닛 어드레스와 연관된 데이터가 저장되는 각각의 로컬 메모리 어드레스, 및/또는 가변-사이즈 (예컨대, 압축된) 호스트 데이터의 각 맵핑-유닛에 대한 각각의 길이. 제어 프로세서는 비휘발성 메모리 페이지들의 기록 순서, 및 비휘발성 메모리 페이지들 각각에서 사용가능한 비-오류 정정 코딩 바이트의 전체 개수를 결정할 수 있다. 비휘발성 메모리 페이지들 중의 소정의 비휘발성 메모리 페이지에서 사용가능한 비-오류 정정 코딩 바이트의 전체 개수에 따라, 제어 프로세서는 그 소정의 비휘발성 메모리 페이지에 배치된 헤더들의 양 및 데이터의 양을 결정할 수 있다. 예를 들어, 제어 프로세서는 그 소정의 비휘발성 메모리 페이지에 대한 헤더들을 축적하며(또한 지금까지 사용된 헤더들의 바이트의 개수를 추적), 그 소정의 비휘발성 메모리 페이지가 완전히 채워질 때까지 한번에 하나씩 맵핑 유닛들 및 헤더들의 가변-사이즈 데이터를 그 소정의 비휘발성 메모리 페이지에 부가한다. 그 소정의 비휘발성 메모리 페이지가 완전히 채워진 경우, 그 소정의 비휘발성 메모리 페이지에 부가된 맵핑 유닛들 중의 마지막 유닛의 마지막 부분은 그 소정의 비휘발성 메모리 페이지에 정합되지 않을 수도 있고, 비휘발성 메모리 페이지들 중의 후속의 것(예컨대, 연속 데이터(640))의 데이터 완료 부분으로서 사용되며, 이에 따라 새로운 헤더들 및 데이터를 위한 후속의 비휘발성 메모리 페이지에서 사용가능한 비-오류 정정 코딩 바이트의 전체 개수를 감소시키게 된다.
몇몇 실시예들에서, 특정 시점에서, 0개 이상의 비휘발성 메모리 페이지들은 호스트 기록 데이터로 채워질 수 있으며, 0개 이상의 비휘발성 메모리 페이지들은 리사이클링된 데이터로 채워질 수 있다. 예를 들어, 적어도 2개의 밴드(band)들(예컨대, FIFO-유사한 일련의 리던던시 블록들)이 각기 채워지되, 하나의 밴드는 "핫(hot)" 데이터(예컨대, 호스트로부터 갓 나온)로 채워지고, 다른 밴드는 "콜드(cold)" 데이터(예컨대, 리사이클링된)로 채워질 수 있으며, 0개 이상의 비휘발성 메모리 페이지들 가치의 공간이 버퍼로부터 각 밴드로 할당된다. 이 예에 대해 계속 설명하면, 각종 실시예들에서, 호스트 기록 데이터는 임의적 및/또는 선택적으로 핫 밴드 또는 콜드 밴드로 향할 수 있으며, 리사이클링된 데이터는 임의적 및/또는 선택적으로 핫 밴드 또는 콜드 밴드로 향할 수 있다.
몇몇 실시예들에서, 제어 프로세서는 일련의 각각의 맵핑 유닛 어드레스들, 로컬 메모리 어드레스들 및 각각의 길이들을 다음 중의 하나 이상으로 변환할 수 있다: 비휘발성 메모리 페이지의 헤더 부분으로서 비휘발성 메모리 페이지에 기록될 일련의 헤더들; 비휘발성 메모리 페이지의 사용자 데이터 부분으로서 비휘발성 메모리 페이지에 기록될 로컬 메모리의 순차적 부분의 첫 번째 시작 어드레스 및 첫 번째 길이로서, 상기 비휘발성 메모리 페이지의 사용자 데이터 부분은 적어도 하나의 맵핑 유닛의 적어도 일부분을 포함함; 후속의 비휘발성 메모리 페이지의 사용자 데이터 완료 부분으로서 후속의 비휘발성 메모리 페이지에 기록될 로컬 메모리의 순차적 부분의 두 번째 시작 주소 및 두 번째 길이로서, 상기 사용자 데이터 완료 부분은 하나의 맵핑 유닛의 데이터의 부분 또는 비어 있는(empty) 부분을 포함함; 비휘발성 메모리 페이지에 기록될 0개 이상의 패딩 바이트의 개수, 여기서 상기 패딩 바이트는 예를 들어, 사용자 데이터 완료 부분이 비어있고 비휘발성 메모리 페이지가 채워져 있지 않은 경우에 사용됨. 유리하게는, 제어 프로세서는 재포맷(reformatting)에 의해 일련의 각각의 맵핑 유닛 어드레스들, 각각의 로컬 메모리 어드레스들 및 각각의 길이들을 일련의 헤더들로 간단히 변환하고, 작은 개수의 DMA(direct memory access) 커맨드들을 생성하여 비휘발성 메모리 페이지를 포함하는 부분들(이전의 비휘발성 메모리 페이지의 일련의 헤더들, 완료 부분, 사용자 데이터 부분, 및 임의의 패딩 바이트들)을 비휘발성 메모리로 전송할 수 있다.
각종 실시예들에서는, 호스트 기록 데이터의 압축이 임의적 및/또는 선택적으로 가능하게 된다. 일 예에서, 호스트 기록 커맨드의 정보는 선택적으로 압축가능하다. 다른 예에서는, 호스트 기록 커맨드의 논리 블록 어드레스(또는 라벨)의 기능으로서 압축이 선택적으로 가능하게 된다. 또 다른 예에서, 호스트 기록 데이터의 압축이 호스트 기록 데이터의 사이즈를 감소시키지 않는 경우, 압축은 선택적으로 사용 불가능하게 된다. 압축이 사용 가능하지 않은 경우, 호스트 기록 데이터는 압축되지 않은 상태로 저장된다. 각종 실시예들에 따르면, 맵의 엔트리들은 다음 중의 하나 이상에 의해 해당 데이터가 압축되어 있는지 또는 압축되어 있지 않은지를 나타낸다: 맵의 각 엔트리에서의 각각의 비트; 및/또는 각 맵 엔트리에 저장되어 있는 길이의 값. 예를 들어, 맵핑 유닛들이 4 KB인 경우, 맵 엔트리의 4 KB 길이는 맵 엔트리의 연관된 데이터가 압축되어 있지 않다는 것을 나타내고, 4 KB 미만의 길이는 연관된 데이터가 압축되어 있다는 것을 나타낸다. 몇몇 실시예들 및/또는 사용 시나리오들에서, 저장되어 있는 임의적 및/또는 선택적으로는 압축되어 있는 호스트 기록 데이터의 버전과 연관된 헤더는, 그 저장된 호스트 기록 데이터가 압축되어 있는지의 여부를 명시한다.
몇몇 실시예들에서는, 리사이클링될 리던던시 블록을 선택하고, 비휘발성 메모리 페이지들이 기록된 순서로 리던던시 블록의 비휘발성 메모리 페이지들을 판독하고, 비휘발성 메모리 페이지들의 헤더들을 포함하는 판독 유닛들만을 처리하고, 맵 내의 데이터 헤더인 각 헤더의 논리 블록 어드레스(또는 동등하게는, 맵핑 유닛 어드레스 또는 라벨)를 조회하여 데이터가 여전히 유효한지의 여부를 확인하고, 또한 데이터가 여전히 유효한 경우에는 적절한 새로운 헤더들 및 DMA 커맨드들을 구성하여 새로운 비휘발성 메모리 페이지의 일부로서 리사이클링될 데이터를 모으는 것에 의해, 데이터가 리사이클링된다. 그 후에, 이 새로운 비휘발성 메모리 페이지는 비휘발성 메모리에 기록된다.
도 11a를 참조하면, 솔리드-스테이트 드라이브 컨트롤러(1100)에 대한 일 실시예의 선택된 상세 도면이 도시되어 있다. 몇몇 실시예들에서, 솔리드-스테이트 드라이브 컨트롤러(1100)는 예를 들어, 호스트와 협력하여 플래시 변환 계층을 실행시키는 것에 의해, 하나 이상의 플래시 변환 계층들 또는 그 일부들을 실행시킬 수 있다. 각종 실시예들에서, 컨트롤러(1100)는 하나 이상의 집적 회로들로서 구현될 수 있다.
도 11a에 도시된 바와 같이, 솔리드-스테이트 드라이브 컨트롤러(1100)의 SerDes(serializer-deserializer)와 같은 입/출력 수신기는 외부 인터페이스(1111)를 통해 호스트와 커플링된다. 호스트 인터페이스(예컨대, HIF)는, SerDes를 통해, 판독 및 기록 커맨드들과 같은 커맨드들을 수신하고, 기록 데이터를 수신하며, 판독 데이터를 송신한다. 커맨드들은 공유 메모리(예컨대, OpRAM)를 통해 중앙 처리 장치로 전송된다. 중앙 처리 장치는 커맨드들을 해석하고, 공유 메모리를 통해 솔리드-스테이트 드라이브 컨트롤러의 다른 부분들을 제어한다. 예를 들어, 중앙 처리 장치는 공유 메모리를 통하여 호스트 데이터 경로 수신 세그먼트(예컨대, HDRx) 또는 플래시 데이터 경로 송신 세그먼트(예컨대, FDTx)와 같은 각종 데이터 경로 송수신 유닛들에게 DMA 커맨드들을 전달하고 그들로부터의 응답들을 수신한다.
호스트 인터페이스로부터의 기록 데이터는 호스트 데이터 경로 수신 세그먼트(예컨대, HDRx)를 통하여 통합 버퍼(예컨대, UBUF)로 전송된다. 각종 실시예들에서, 호스트 데이터 경로 수신 세그먼트는 호스트 기록 데이터를 임의적 및/또는 선택적으로 압축 및/또는 암호화하는 로직을 포함한다. 그 후에, 임의적 및/또는 선택적으로 압축 및/또는 암호화된 호스트 기록 데이터는, 플래시 데이터 경로 송신 세그먼트 및 일반 플래시 인터페이스(예컨대, GAFI)를 통해, 통합 버퍼로부터 비휘발성 메모리로 전송된다. 각종 실시예들에서, 플래시 데이터 경로 송신 세그먼트는 암호화 및/또는 스크램블링 및/또는 오류 정정 인코딩을 수행하는 로직을 포함한다. 호스트 판독 커맨드들에 대한 응답으로, 일반 플래시 인터페이스를 통해 데이터가 비휘발성 메모리로부터 판독되어서, 플래시 데이터 경로 수신 세그먼트(예컨대, FDRx)를 통해 통합 버퍼로 전송된다. 각종 실시예들에서, 플래시 데이터 경로 수신 세그먼트는 오류 정정 디코딩 및/또는 복호화 및/또는 디-스크램블링을 포함한다. 다른 실시예들에서는, 별개의 오류 정정 디코더(예컨대, LDPC 코드들을 구현하는 LDPC-D)가 플래시 데이터 경로 수신 세그먼트에 의해서 통합 버퍼에 저장되어 있는 "로우(raw)" 데이터에 대하여 동작할 수 있다. 그 후에, 통합 버퍼 내의 디코딩된 판독 데이터는 호스트 데이터 경로 송신 세그먼트(예컨대, HDTx)를 통하여 호스트 인터페이스로 전송된다. 각종 실시예들에서, 호스트 데이터 경로 송신 세그먼트는 디코딩된 판독 데이터를 임의적 및/또는 선택적 복호화 및/또는 압축 해제하는 로직을 포함한다. 몇몇 실시예들에서는, RAID-유사한 연판정(soft-decision) 처리 유닛(예컨대, RASP)이 인에이블되어, RAID-유사 리던던시를 생성하여 비휘발성 메모리에 저장되어 있는 호스트 기록 데이터 및/또는 시스템 데이터를 추가로 보호하고/하거나 LDPC-D과 사용을 위한 연판정 처리 동작들을 수행한다.
각종 실시예들에 따르면, 솔리드-스테이트 드라이브 컨트롤러는 하나 이상의 플래시 변환 계층들을 실행하지 않거나 그것들의 일부, 전부, 또는 부분들을 실행시킬 수 있다. 일 예에서, 플래시 변환 계층의 상위-레벨 맵핑 부분이 호스트에서 수행되며, 플래시 변환 계층의 하위-레벨 맵핑 부분은 솔리드-스테이트 드라이브 컨트롤러에서 수행된다. 다른 예에서, 솔리드-스테이트 드라이브 컨트롤러는 판독 유닛 어드레스들 및 스팬들과 같은 추상적 물리 유닛 어드레스들을 호스트와 송수신하며, 호스트는 이 추상적 물리 유닛 어드레스들에 대하여 논리 블록 어드레스들(또는 라벨들)을 맵핑한다. 솔리드-스테이트 드라이브 컨트롤러는 헤더에 저장되어 있는 논리 블록 어드레스(또는 라벨)와 같은 특정 데이터의 식별자를 통해, 추상적 물리 유닛 어드레스들과 연관된 특정 데이터의 위치를 탐색할 수 있다. 또 다른 예에서, 논리 블록 어드레스(또는 라벨)의 호스트에서의 맵핑은, 비휘발성 메모리 페이지 어드레스, 비휘발성 메모리 페이지 내의 오프셋, 및 바이트 길이를 생성한다. 솔리드-스테이트 드라이브 컨트롤러는 비휘발성 메모리에 액세스하여 하나 이상의 비휘발성 메모리 페이지들 내의 특정 데이터를 탐색할 판독 유닛들의 개수를 결정할 수 있다. 유리하게는, 이 예들의 하나 이상에서는, 솔리드-스테이트 드라이브 컨트롤러에 의해 오류 정정 코딩의 세부사항들(예컨대, 비휘발성 메모리 페이지당 사용자 데이터 바이트들의 개수 또는 판독 유닛들의 사이즈)가 유지되며, 이에 따라 호스트에 대한 오버헤드(overhead)를 감소시킨다.
도 11b를 참조하면, 데이터 경로 세그먼트에 대한 일 실시예의 선택된 상세 도면이 도시되어 있다. 데이터 경로 세그먼트(1190)는, 도 11a의 호스트 데이터 경로 수신 세그먼트 또는 플래시 데이터 경로 송신 세그먼트를 예시하는 것일 수 있다. 데이터 경로 세그먼트(1190)는, 판독 시퀀서(read sequencer)(1130), 기록 시퀀서(write sequencer)(1140), 및 0개 이상의 데이터 경로 유닛들(예컨대, DPU들)을 포함한다. 도 11b는 2개의 데이터 경로 유닛들(1150-1 및 1150-2)을 가진 예를 도시한다.
판독 시퀀서(1130)는 OpRAM(도 11a 참조)에 커플링되어 판독/액세스될 데이터를 명시하는 제어 정보를 수신한다. 예를 들어, 이 정보는 통합 버퍼 내의 주소 및/또는 길이이거나 호스트 인터페이스 또는 일반 플래시 인터페이스에 대한 커맨드일 수 있으며, 그 데이터와 혼합될 커맨드들을 명시할 수 있다. 또한, 판독 시퀀서(1130)는 판독기(1110)에 커플링되어 예를 들어 UBUF, 호스트 인터페이스, 또는 일반 플래시 인터페이스로부터의 데이터를 판독/액세스한다. 판독 시퀀서(1130)는 OpRAM로부터 수신되는 요청들에 따라, 인터리빙된 스트림의 판독 데이터 및 커맨드들을, 0개 이상의 데이터 경로 유닛들(1150-1 및 1150-2) 및 기록 시퀀서(1140)로 전송할 수 있다.
기록 시퀀서(1140)는 판독 시퀀서(1130)로부터 송신되는 인터리빙된 스트림의 데이터 및 커맨드들을 수신할 수 있다. 기록 시퀀서(1140)는 기록기(1120)에 커플링되어 UBUF, 호스트 인터페이스, 또는 일반 플래시 인터페이스와 같은 데이터를 기록할 수 있다. 이 데이터는 기록 시퀀서(1140)에 의해 수신되는 데이터 스트림 내의 커맨드들에 따라(예를 들면, 어드레스 및/또는 길이를 명시한 커맨드들에 의해) 기록된다. 또한, 기록 시퀀서(1140)는 OpRAM(도 11a 참조)에 커플링되어, 수신된 커맨드들에 따라서, 기록된 데이터에 관한 상태 정보를 전송한다. 예를 들어, 상태 정보는 데이터 스트림의 명시된 부분(예컨대, 하나의 4 KB 맵핑 유닛)의 기록 완료를 나타내도록 OpRAM에 기록된다.
데이터 경로 유닛들(1150-1 및 1150-2)은 판독 시퀀서(1130)와 기록 시퀀서(1140)를 순회하면서 데이터를 변형시킬 수 있다. 데이터 스트림 내의 판독 시퀀서(1130)에 의해 생성된 커맨드들은 데이터 경로 유닛들(1150-1 및 1150-2) 또는 기록 시퀀서(1140) 중의 하나에 의해 수신되도록 임의적 및/또는 선택적으로 타겟팅(targeting)된다. 데이터 경로 유닛들(1150-1 및 1150-2)의 예들은 다음을 포함한다:
- 암호화를 위해 사용될 설트(salt)(초기화 벡터)를 포함하는 커맨드를 수신하며, 그 설트에 따라 다음의 데이터를 암호화하는 암호화 유닛. 다른 실시예들에서, 이 커맨드는 암호화 키의 스펙(specification)을 또한 포함한다.
- 복호화를 위해 사용될 설트(초기화 벡터)를 포함하는 커맨드를 수신하며, 그 설트에 따라 다음의 데이터를 복호화하는 복호화 유닛. 다른 실시예들에서, 이 커맨드는 복호화 키의 스펙을 또한 포함한다.
- 압축 유닛(예컨대, 맵핑 유닛) 바운더리의 시작을 나타내는 커맨드를 수신하여, 다음의 데이터를 압축하는 압축 유닛. 각종 실시예들에서, 이 커맨드는 하나의 유닛으로 압축될 데이터의 양, 압축 타입, 압축을 위한 최대 런-타임, 및 그 밖의 압축 제어 사항들 중의 하나 이상을 또한 포함한다.
- 압축 유닛 바운더리의 시작을 나타내는 커맨드를 수신하여, 다음의 데이터를 압축 해제하는 압축 해제 유닛. 각종 실시예들에서, 이 커맨드는 하나의 유닛으로 압축 해제될 데이터의 양, 예상되는 압축 해제될 데이터의 사이즈, 압축 해제 타입, 압축 해제를 위한 최대 런-타임, 및 그 밖의 압축 해제 제어 사항들 중의 하나 이상을 또한 포함한다.
- 사이클릭 리던던시 체크 값을 계산하는데 사용될 설트(초기화 벡터)를 포함하는 커맨드를 수신하며, 그 설트에 따라 다음의 데이터에 대한 사이클릭 리던던시 체크 값을 계산하는 사이클릭 리던던시 체크 유닛(cyclic redundancy check)(예컨대, CRC). 다른 실시예들에서, 이 커맨드는 임의적 및/또는 선택적으로 사이클릭 리던던시 체크 유닛이 이전에 계산된 사이클릭 리던던시 체크 값을, 사이클릭 리던던시 체크 값으로 커버되어 있는 이전에 수신된 데이터에 첨부하는 것을 가능하게 한다.
- 코드 레이트를 포함하는 커맨드를 수신하여, 해당 코드 레이트의 오류 정정 코드에 따라 다음의 데이터를 인코딩 및 디코딩하는 오류 정정 인코딩 및/또는 디코딩 유닛. 다른 실시예들에서, 이 커맨드는 임의적 및/또는 선택적으로 연판정 처리 정보, 사용할 최대 반복 횟수, 및 그 밖의 인코더 및/또는 디코더 제어 정보와 같은 추가 제어 사항들을 포함한다.
예시적 동작에 있어서, 호스트로부터 기록 커맨드를 수신한 것에 대한 응답으로, 호스트 데이터 경로 수신 세그먼트의 판독 시퀀스에 대한 커맨드 리스트가 중앙 처리 장치에 의해 구축되며, 이 커맨드 리스트에 따라, 호스트 데이터 경로 수신 세그먼트는 호스트 인터페이스를 통해서 호스트에서 통합 버퍼로 기록 커맨드의 기록 데이터를 송신할 수 있다. 호스트 데이터 경로 수신 세그먼트 내의 데이터 경로 유닛은 (압축된) 기록 데이터가 통합 버퍼에 기록되기 이전에 기록 데이터를 압축할 수 있다. 복수의 (압축된) 맵핑 유닛들이 낭비되는 공간없이 통합 버퍼 내에서 타이트하게 패킹될 수 있다. 중앙 처리 장치에게는, OpRAM에 기록된 상태 정보에 의해서(호스트 데이터 경로 수신 세그먼트의 기록 시퀀서를 통해), (압축된) 맵핑 유닛들 각각의 위치 및 사이즈가 통지된다. 중앙 처리 장치는 이 상태 정보에 따라 헤더들을 구성할 수 있으며, 또한 하나의 비휘발성 메모리 페이지를 채울 헤더들 및 (압축된) 맵핑 유닛들의 양을 결정할 수 있다. 또한, 중앙 처리 장치는 플래시 데이터 경로 송신 세그먼트의 판독 시퀀스에 대한 커맨드 리스트를 구축하여 헤더들 및 데이터의 비휘발성 메모리 페이지를 비휘발성 메모리로 송신할 수 있다. 플래시 데이터 경로 송신 세그먼트 내의 데이터 경로 유닛은, 비휘발성 메모리에 송신되어 복수의 판독 유닛들 각각에 대하여 오류 정정 코딩 보호를 위한 추가 바이트들을 부가하는 헤더들 및 데이터를 인코딩할 수 있다. 플래시 데이터 경로 송신 세그먼트의 기록 시퀀서로부터 NVM 페이지 기록이 완료되었다는 상태를 수신시에, (압축된) 맵핑 유닛들에 의해서 통합 버퍼에 사용될 공간은 복구(재사용)될 수 있다.
다른 예시적 동작에서, 호스트로부터 판독 커맨드를 수신한 것에 대한 응답으로, 플래시 데이터 경로 수신 세그먼트의 판독 시퀀스에 대한 커맨드 리스트가 중앙 처리 장치에 의해 구성되며, 커맨드 리스트에 따라, 플래시 데이터 경로 수신 세그먼트가 일반 플래시 인터페이스를 통하여 비휘발성 메모리에서 통합 버퍼로 판독되는 하나 이상의 판독 유닛들을 수신할 수 있다. 몇몇 실시예들에서, 플래시 데이터 경로 수신 세그먼트 내의 데이터 경로 유닛은, 각 판독 유닛과의 오류 정정 코딩 보호를 위한 추가 바이트들을 사용하여 비휘발성 메모리로 전송되는 데이터를 디코딩할 수 있다. 다른 실시예들에서, 오류 정정은 별도의 데이터 경로 세그먼트(예컨대, 도 11a의 LDPC-D)를 통해 일어난다. 중앙 처리 장치에게는, 플래시 데이터 경로 수신 세그먼트의 기록 시퀀서로부터의 상태 수신에 의하여, 통합 버퍼에의 (정정된) 데이터 수신이 통지되며, 또는 다른 실시예에서는 LDPC-D 데이터 경로 세그먼트의 기록 시퀀서로부터의 상태 수신에 의하여, 통합 버퍼에의 (정정된) 데이터 수신이 통지된다. 또한, 중앙 처리 장치는 호스트 데이터 경로 송신 세그먼트에 대한 커맨드 리스트를 구축하여 호스트 인터페이스를 통해 통합 버퍼에서 호스트로 정정된 데이터의 적어도 일부분을 송신할 수 있다. 호스트 데이터 경로 송신 세그먼트 내의 데이터 경로 유닛은 호스트로 송신하기 이전에 정정된 데이터를 압축 해제할 수 있다. 호스트 데이터 경로 송신 세그먼트의 기록 시퀀서로부터, 정정된 데이터가 성공적으로 송신되었다는 상태의 수신시에, 그 정정 데이터에 의해 통합 버퍼에서 사용되는 공간은 복구(재사용)가능하다.
도 11c를 참조하면, 본 발명의 실시예에 따른 시스템의 각종 실시예들에 대해 선택된 상세 도면이 도시되어 있다. 일반적으로 이 실시예들은 도 11a의 솔리드-스테이트 드라이브 컨트롤러(1100)에 대한 하나 이상의 예들을 포함한다. 일반적으로, 몇몇의 솔리드-스테이트 드라이브들(1101a-1101n)은 각기 디바이스 인터페이스들(1190a-1190n)을 통해 비휘발성 메모리들(1199a-1199n)에 커플링되는 솔리드-스테이트 드라이브 컨트롤러들(1100a-1100n)을 포함한다. 본 도면은 다음의 실시예들에 대한 각종 클래스들을 도시한다: 호스트(1102)에 다이렉트로 커플링되는 단일의 솔리드-스테이트 드라이브, 각각의 외부 인터페이스들(1111a-1111n)을 통해 호스트(1102)에 그 각각이 다이렉트로 커플링되는 복수의 솔리드-스테이트 드라이브들, 및 각종 인터커넥션 요소들을 통해 호스트(1102)에 다이렉트로 커플링되는 하나 이상의 솔리드-스테이트 드라이브들.
호스트에 다이렉트로 커플링되는 단일의 솔리드-스테이트 드라이브의 예시적 실시예로서, 일 예인 솔리드-스테이트 드라이브(1101a)는 외부 인터페이스(1111a)를 통해 호스트(1102)에 다이렉트로 커플링된다(예컨대, 스위치/패브릭/중간 컨트롤러(1103)가 생략되거나, 우회되거나, 통과된다). 각각의 외부 인터페이스들을 통해 그 각각이 호스트에 다이렉트로 커플링되는 복수의 솔리드-스테이트 드라이브들의 예시적 실시예로서, 각각의 복수 예들인 솔리드-스테이트 드라이브들(1101a-1101n)은 각각의 예인 외부 인터페이스들(1111a-1111n)을 통해 각기 호스트(1102)에 다이렉트로 커플링된다(예컨대, 스위치/패브릭/중간 컨트롤러(1103)가 생략되거나, 바이패스되거나, 패스 스루된다). 각종 인터커넥션 요소들을 통해 호스트에 간접적으로 커플링되는 하나 이상의 솔리드-스테이트 드라이브들의 예시적 실시예로서, 각각의 하나 이상의 예들인 솔리드-스테이트 드라이브(1101)는 각기 호스트(1102)에 간접적으로 커플링된다. 각각의 간접 커플링은 각각의 예인 스위치/패브릭/중간 컨트롤러(1103)에 커플링된 외부 인터페이스들(1111a-1111n) 및 호스트(1102)에 커플링된 중간 인터페이스(1104)를 통해 이루어진다.
또한, 스위치/패브릭/중간 컨트롤러(1103)를 포함하는 몇몇 실시예들은, 메모리 인터페이스(1180)를 통해 커플링되며, 솔리드-스테이트 드라이브들(1101a-1101n) 및/또는 호스트(102)에 의해 액세스 가능한 카드 메모리(1112C)를 포함한다. 각종 실시예들에서, 하나 이상의 솔리드-스테이트 드라이브들(1101a-1101n), 스위치/패브릭/중간 컨트롤러(1103), 및/또는 카드 메모리(1112C)는 물리적 식별 가능 모듈, 카드, 또는 플로그 가능 요소(예컨대, 입/출력 카드(1116))에 포함되어 있다. 몇몇 실시예들에서, 솔리드-스테이트 드라이브(1101a-1101n)(또는 그 변형들)은 호스트(1102)로서 동작하는 이니시에이터(initiator)에 커플링된 SAS(serial attached SCSI) 드라이브 또는 SATA(Serial Advanced Technology Attachment) 드라이브에 대응한다.
호스트(1102)는 OS(operating system)(1105), 드라이버(1107), 애플리케이션(1109), 및 멀티-디바이스 관리 소프트웨어(1114)의 각종 조합들과 같은 호스트 소프트웨어(1115)의 각종 요소들을 실행할 수 있다. 점선 화살표(1107D)는 호스트 소프트웨어와 입/출력 디바이스 간의 양방향 통신을 나타낸다(예컨대, 드라이버(1107)를 통한 솔리드-스테이트 드라이브들(1101a-1101n)의 하나 이상의 인스턴스들과 하나 이상의 오퍼레이팅 시스템(1105)과의 데이터 송/수신 및 드라이버(1107)를 통하거나, (예컨대, PCIe) VF(virtual function)로서 다이렉트로 애플리케이션(1109)과 데이터 송/수신).
몇몇 실시예들 및/또는 사용 시나리오들에서, 호스트 소프트웨어(1115)는 솔리드-스테이트 드라이브들(1101a-1101n)에 사용되는 플래시 변환 계층의 일부, 전부, 또는 부분들을 포함한다. 일 예에서, 각종 실시예들에서, 드라이버(1107)는 솔리드-스테이트 드라이브들(1101a-1101n)에 사용되는 플래시 변환 계층들의 적어도 일부분을 실행시킨다. 다른 예에서, 각종 실시예들에서, 멀티-디바이스 관리 소프트웨어(1114)는 솔리드-스테이트 드라이브들(1101a-1101n)에 사용되는 플래시 변환 계층들의 적어도 일부분을 실행시킨다.
오퍼레이팅 시스템(1105)은 솔리드-스테이트 드라이브들(1101a-1101n)과 인터페이싱하는 드라이버들(드라이버(1107)에 의해 개념적으로 도시됨)을 포함하고/하거나 그것들과 함께 동작할 수 있다. 윈도우즈의 다양한 버전들(예를 들어, 95, 98, ME, NT, XP, 2000, 서버, 비스타 및 7과 8), 리눅스의 다양한 버전들(예를 들어, 레드 햇(Red Hat), 데비앙(Debian) 및 우분투(Ubuntu)), 및 MacOS의 다양한 버전들(예를 들어, 8, 9 및 X)이 오퍼레이팅 시스템(1105)의 예들이다. 각종 실시예들에서, 드라이버들은 SATA, AHCI(advanced host controller interface) 또는 NVM 익스프레스와 같은 표준 인터페이스 및/또는 프로토콜로 동작가능한 (때때로 "압축된(shrink-wrapped)" 또는 "사전 설치된(pre-installed)"으로 지칭되는) 표준 및/또는 일반 드라이버들이거나, 임의적으로 커스터마이징되고/되거나 솔리드-스테이트 드라이브들(1101a-1101n)에 특정한 커맨드들 및/또는 플래시 변환 계층의 사용을 가능하게 하는 특정 벤더(vendor)이다. 일부 드라이브들 및/또는 드라이버들은 커스터마이징된 애플리케이션이 심지어 일반 드라이버로 솔리드-스테이트 드라이브들(1101a-1101n)에 특정한 커맨드들 및/또는 플래시 변환 계층들을 이용하게 할 수 있는, 솔리드-스테이트 드라이브들(1101a-1101n)에 다이렉트로 커맨드들을 전달하기 위해, 최적화된 NAND 액세스(때때로 ONA로 지칭됨) 또는 다이렉트 NAND 액세스(때때로 DNA로 지칭됨) 기술들을 통해 애플리케이션(1109)과 같은 애플리케이션-레벨 프로그램들을 인에이블시키는 패스-쓰루(pass-through) 모드들을 갖는다. ONA 기술들은 다음 중의 하나 이상을 포함한다: 비-표준 수정자들(힌트들)의 이용; 벤더-고유 커맨드들의 이용; 압축성에 따른 실제 비휘발성 메모리 사용과 같은 비-표준 통계의 전달; 판독 유닛 어드레스들 및 스팬들을 전달하는 것 또는 비휘발성 메모리 페이지 어드레스들, 오프셋들, 및 바이트 길이들을 전달하는 것과 같은 플래시 변환 계층-특정 프로토콜들의 이용; 및 그 밖의 기술들. DNA 기술들은 다음 중의 하나 이상을 포함한다: 비휘발성 메모리에 대한 비맵핑된 판독, 기록 및/또는 소거 액세스를 제공하는 비표준 커맨드들 또는 벤더-고유 커맨드들의 이용; 예를 들면 데이터의 포맷팅을 바이패싱함으로써(이를 하지 않는다면 입/출력 디바이스가 데이터의 포맷팅을 행할 것임), 비휘발성 메모리에 대한 더욱 직접적인 액세스를 제공하는 비표준 또는 벤더-고유 커맨드들의 이용; 및 그 밖의 기술들. 드라이버의 예들은 ONA 또는 DNA 지원이 없는 드라이버, ONA-가능한 드라이버, DNA-가능한 드라이버 및 ONA/DNA-가능한 드라이버이다. 드라이버의 추가적인 예들은 벤더-제공형(vendor-provided), 벤더-발전형(vendor-developed), 및/또는 벤더-강화형(vendor-enhanced) 드라이버, 및 클라이언트-제공형(client-provided), 클라이언트-발전형(client-developed) 및/또는 클라이언트-강화형(client-enhanced) 드라이버이다.
애플리케이션-레벨 프로그램들의 예들은 ONA 또는 DNA 지원이 없는 애플리케이션, ONA-가능한 애플리케이션, DNA-가능한 애플리케이션 및 ONA/DNA-가능한 애플리케이션이다. 점선 화살표(1109D)는 애플리케이션과 애플리케이션용 입/출력 디바이스 간의 양방향 통신(예컨대, 드라이버를 통한 바이패스 또는 VF(virtual function)를 통한 바이패스)을 나타낸다(예컨대, ONA-가능한 애플리케이션 및 ONA-가능한 드라이버는 예를 들면 중재자(intermediary)로서 오퍼레이팅 시스템를 이용하는 애플리케이션이 없이, 솔리드-스테이트 드라이브와 통신한다). 점선 화살표(1109V)는 애플리케이션과 애플리케이션용 입/출력 디바이스 간의 양방향 통신들(예컨대, VF(virtual function)를 통한 바이패스)을 나타낸다(예컨대, DNA-가능한 애플리케이션 및 DNA-가능한 드라이버는 예를 들면 중재자로서 오퍼레이팅 시스템 또는 드라이버를 이용하는 애플리케이션이 없이, 솔리드-스테이트 드라이브와 통신한다).
몇몇 실시예들에서, 비휘발성 메모리들(1199a-1199n)의 하나 이상의 부분들은 펌웨어 스토리지(예컨대, 펌웨어(1106a-1106n))에 이용된다. 펌웨어 스토리지는 하나 이상의 펌웨어 이미지들(또는 그 일부들)을 포함한다. 펌웨어 이미지는 (예컨대, 솔리드-스테이트 드라이브 컨트롤러들(1100a-1100n)의 중앙 처리 장치에 의해) 실행되는, 펌웨어의 하나 이상의 이미지들을 갖는다. 다른 예의 경우, 펌웨어 이미지는 예를 들어, 펌웨어 실행 동안 중앙 처리 장치에 의해 참조되는, 상수들, 파라미터 값들 및 비휘발성 메모리 디바이스 정보 중의 하나 이상의 이미지들을 갖는다. 펌웨어의 이미지들은 예를 들어, 현재의 펌웨어 이미지 및 0개 이상의 이전의 (펌웨어 업데이트들에 관한) 펌웨어 이미지들에 대응한다. 각종 실시예들에서, 펌웨어는 일반, 표준, ONA 및/또는 DNA 동작 모드들, 그리고 하나 이상의 플래시 변환 계층들과의 동작을 제공한다. 몇몇 실시예들에서, 펌웨어 동작 모드들 중 하나 이상이 인에이블된다(예컨대, 임의적으로 드라이버에 의해 전달되고/되거나 제공되는 키들 또는 각종 소프트웨어 기술들을 통해 하나 이상의 애플리케이션 프로그램 인터페이스들(예컨대, API들)이 "록킹 해제(unlocked)"된다). 다른 실시예들에서, 펌웨어 이미지들 중의 상이한 것들이 동작 모드들 중의 상이한 것들에 사용되고/되거나 플래시 변환 계층들 중의 상이한 것들에 사용된다.
몇몇 실시예들에서, 호스트(1102)는 맵을 실행시키는 별개의 하드웨어 리소스로서 맵(1108)을 포함한다. 다른 실시예들에서, 맵은 맵(1108) 및/또는 호스트 메모리(1112H)를 통해 및/또는 솔리드-스테이트 드라이브 컨트롤러(1100)의 맵(1141)을 통해 및/또는 카드 메모리(1112C)를 통해 부분적으로 또는 전체적으로 실행된다. 맵(1108), 호스트 메모리(1112H), 솔리드-스테이트 드라이브 컨트롤러(1100)의 맵(1141), 및 카드 메모리(1112C)의 예들은, 예컨대 DRAM, SRAM, 및/또는 플래시 또는 그 밖의 비휘발성 메모리 디바이스들과 같은 하나 이상의 휘발성 및/또는 비휘발성 메모리 소자들이다. 호스트 메모리의 다른 예들은 시스템 메모리, 호스트 메인 메모리, 호스트 캐시 메모리, 호스트-액세스가능 메모리, 및 입/출력 디바이스-액세스가능 메모리이다. 몇몇 실시예들 및/또는 사용 시나리오들에서(예를 들면, 입/출력 카드(1116)를 구비하며 (맵의 적어도 일부를 위한) 스토리지로서 도 11c의 임의적 카드 메모리(1112C)를 사용하는 몇몇 실시예들)는, 하나 이상의 입/출력 디바이스들 및/또는 호스트(1102)가 카드 메모리(1112C) 내의 맵에 액세스한다.
각종 실시예들에서, 호스트(1102) 및/또는 솔리드-스테이트 드라이브(1101)의 하나 이상의 인스턴스들은 맵(1108), 호스트 메모리(1112H), 카드 메모리(1112C) 및/또는 맵(1141)에 액세스하여, 비휘발성 메모리(1199a-1199n)의 하나 이상의 인스턴스들에 대한 요소들과 같은 입/출력 디바이스 비휘발성 메모리의 하나 이상의 부분들을 타겟팅하는 비휘발성 메모리 위치들(예컨대, 블록 및/또는 페이지 어드레스 및/또는 판독 유닛 어드레스들)로 논리 블록 어드레스들(또는 라벨 등의 다른 명시자들)을 변환하는데 사용될 수 있는 맵핑 정보의 전부 또는 임의의 부분들을 저장 및 검색할 수 있다. 개념적으로, 단일의 맵이 존재할 수 있으며, 각종 실시예들에 따르면 맵의 제어 및/또는 스토리지 및/또는 사용이 하나 이상의 호스트들(1102) 및/또는 솔리드-스테이트 드라이브 컨트롤러들(1100a-1100n)에 의해 제공된다.
스위치/패브릭/중간 컨트롤러(1103)가 없는(lacking) 몇몇 실시예들에서, 솔리드-스테이트 드라이브들(1101a-1101n)은 외부 인터페이스들(1111a-1111n)을 통해 다이렉트로 호스트(1102)에 커플링된다. 각종 실시예들에서, 솔리드-스테이트 드라이브 컨트롤러들(1100a-1100n)은 RAID 컨트롤러 또는 입/출력 컨트롤러와 같은, 다른 컨트롤러들의 하나 이상의 중간 레벨들을 통해 호스트(1102)에 커플링된다. 몇몇 실시예들에서, 솔리드-스테이트 드라이브들(1101a-1101n)(또는 그 변형들)은 SAS 드라이브 또는 SATA 드라이브에 대응하며, 스위치/패브릭/중간 컨트롤러(1103)는 결과적으로(in turn) 이니시에이터에 커플링되는 확장자(expander)에 대응하거나, 다르게는 스위치/패브릭/중간 컨트롤러(1103)는 확장자를 통해 이니시에이터에 간접적으로 커플링되는 브리지에 대응한다. 몇몇 실시예들에서, 스위치/패브릭/중간 컨트롤러(1103)는 하나 이상의 PCIe 스위치들 및/또는 패브릭들을 포함한다.
컴퓨팅 호스트(예를 들어, 컴퓨터, 워크스테이션 컴퓨터, 서버 컴퓨터, 스토리지 서버, 개인용 컴퓨터, 랩탑 컴퓨터, 노트북 컴퓨터, 넷북 컴퓨터, 및/또는 태블릿 컴퓨터)로서 호스트(1102)를 갖는 실시예들 중 일부와 같은 다양한 실시예들에서, 컴퓨팅 호스트는 임의적으로 하나 이상의 로컬 및/또는 원격 서버들(예컨대, 임의적 서버들(1118))과 (예컨대, 임의적 입/출력 및 스토리지 디바이스들/리소스들(1117) 및 임의적 LAN/WAN(local area network/wide area network)(1119)을 통해) 통신할 수 있다. 통신은 예를 들어, 솔리드-스테이트 드라이브 요소들 중 임의의 하나 이상의 것의 로컬 및/또는 원격 액세스, 관리, 및/또는 사용을 가능하게 한다. 몇몇 실시예들에서, 통신은 전적으로 또는 부분적으로 이더넷을 통해 이루어진다. 몇몇 실시예들에서, 통신은 전적으로 또는 부분적으로 파이버 채널을 통해 이루어진다. 각종 실시예들에서, LAN/WAN(1119)은 서버 팜(farm)에서의 네트워크, 서버 팜들을 커플링하는 네트워크, 메트로-영역 네트워크 및 인터넷 중 임의의 하나 이상의 것과 같은, 하나 이상의 LAN(local area network)들 및/또는 WAN(wide area network)들을 나타낸다.
각종 실시예들에서, 솔리드-스테이트 드라이브 컨트롤러 및/또는 하나 이상의 비휘발성 메모리들과 결합하는 컴퓨팅-호스트 비휘발성 메모리 컨트롤러는, 비휘발성 스토리지 컴포넌트, 예컨대 USB(universal serial bus) 스토리지 컴포넌트, UFS(universal flash storage) 스토리지 컴포넌트, CF(compact flash) 스토리지 컴포넌트, MMC(multimedia card) 스토리지 컴포넌트, SD(secure digital) 스토리지 컴포넌트, 메모리 스틱 스토리지 컴포넌트, 및 xD-화상 카드 스토리지 컴포넌트로서 구현된다.
각종 실시예들에서, 솔리드-스테이트 드라이브 컨트롤러(또는 컴퓨팅-호스트 비휘발성 메모리 컨트롤러)의 전부 또는 임의의 부분들, 또는 그 기능들은 컨트롤러가 커플링되는 호스트(예를 들어, 도 11c의 호스트(1102))에 구현된다. 각종 실시예들에서, 솔리드-스테이트 드라이브 컨트롤러(또는 컴퓨팅-호스트 비휘발성 메모리 컨트롤러)의 전부 또는 임의의 부분들, 또는 그 기능들이 하드웨어(예를 들어, 로직 회로), 소프트웨어 및/또는 펌웨어(예를 들어, 드라이버 소프트웨어 또는 솔리드-스테이트 드라이브 제어 펌웨어), 또는 이들의 임의의 조합을 통해 구현된다.
도 12를 참조하면, 비휘발성 메모리에 데이터를 기록하는 흐름도(1200)가 도시되어 있다. 이 프로세스는 단계 1202에서 개시되며, 단계 1206에서 복수의 라벨들(또는 객체 식별자들이나 논리 블록 어드레스들과 같은 그 밖의 고유 식별자들) 중의 특정 라벨과 연관된 데이터를 비휘발성 메모리에 기록(저장)하는 결정이 이루어진다. 예를 들어, 이 결정은 애플리케이션 프로그램, 오퍼레이팅 시스템, 하이퍼바이저, 또는 임의의 다른 소프트웨어 또는 펌웨어 모듈 중의 하나 이상의 것에 의해 이루어진다. 몇몇 실시예들에서, 기록 데이터는 가변-사이즈이다(예컨대, 가능하게는 각 기록 동작에 따라 달라질 수 있다). 다른 실시예들에서, 기록 데이터는 다수의 고정-사이즈 유닛들, 예를 들면 다수의 SATA 섹터들이다.
단계 1210에서, 기록 커맨드 및 연관된 (가능하게는 가변-사이즈) 기록 데이터가 수신된다. 일 예에서, 애플리케이션은 시스템 호출을 사용하여 드라이버에게 기록 커맨드 및 기록 데이터(예를 들면, 데이터에 대한 포인터(pointer)를 통해)를 전송한다. 다른 예에서, 호스트는 솔리드-스테이트 드라이브 컨트롤러로 하여금 연관된 기록 데이터를 검색하게 하는 정보와 함께 기록 커맨드를 솔리드-스테이트 드라이브 컨트롤러에게 전송한다. 예를 들어, 기록 커맨드는 SATA NCQ(native command queue) 태그를 포함하며, 이 NCQ 태그는 연관된 기록 데이터를 페치하는데 사용된다.
단계 1214에서, (가능하게는 가변-사이즈를 갖는) 기록 데이터는 임의적 및/또는 선택적으로 압축되거나 다르게는 사이즈가 감소된다. 연관된 기록 데이터가 이미 가변-사이즈를 가진 경우라도, 가능하게는 압축이 연관된 기록 데이터를 더욱 사이즈 감소시킬 수 있다. 몇몇 실시예들에서, (가능하게는 가변-사이즈를 갖는, 가능하게는 압축된) 기록 데이터는 임의적 및/또는 선택적으로 암호화된다.
단계 1218에서, 데이터 기록용 비휘발성 메모리의 다음의 미기록되어 있는 물리적 위치(물리적 어드레스 공간에서)가 결정된다. 일 예에서, 상기 결정된 다음의 미기록되어 있는 물리적 위치는 이전에-기록된, 가변-사이즈 데이터에 바로 인접해 있다(비휘발성 메모리의 공간 낭비없이). 다른 예에서, 상기 결정된 다음의 미기록되어 있는 물리적 위치는 이전에-기록된 가변-사이즈 데이터와 동일한 판독 유닛에서 시작된다. 몇몇 실시예들에서, 상기 결정된 다음의 미기록되어 있는 물리적 위치는 기록 커맨드에 명시되어 있는 밴드에 따라 결정된다.
단계 1222에서, (가능하게는 가변-사이즈를 갖는, 가능하게는 압축된) 기록 데이터는 상기 결정된 다음의 미기록되어 있는 물리적 위치에서 비휘발성 메모리에 저장된다. 몇몇 실시예들에서, 하드웨어 유닛은 (가능하게는 가변-사이즈를 갖는, 가능하게는 압축된) 기록 데이터를 비휘발성 메모리 페이지의 이미지(예컨대, 비휘발성 메모리 페이지로 기록될 버퍼의 일부분)로 타일링한다.
단계 1226에서, 기록 데이터의 식별자를 포함하는 헤더는 (가능하게는 가변-사이즈를 갖는, 가능하게는 압축된) 기록 데이터의 적어도 일부분과 동일한 비휘발성 메모리 페이지에 저장된다. 예를 들어, 헤더는 도 6에서와 같은 (가능하게는 가변-사이즈를 갖는, 가능하게는 압축된) 기록 데이터의 적어도 일부분과 동일한 비휘발성 메모리 페이지에 저장되고/되거나 헤더는 도 5에서와 같은 (가능하게는 가변-사이즈를 갖는, 가능하게는 압축된) 기록 데이터의 적어도 일부분과 동일한 판독 유닛에 저장된다. 각종 실시예들에 따르면, 식별자 다음 중의 하나 이상의 것이다: 기록 데이터의 특정 라벨과 동일한 것; 기록 데이터의 특정 라벨의 기능; 테이블을 통해 기록 데이터의 특정 라벨과 연관된 식별자; 비휘발성 메모리에 저장된 모든 데이터 중의 고유 식별자; 및 전술한 것의 임의의 조합.
각종 실시예들에 따르면, (가능하게는 가변-사이즈를 갖는, 가능하게는 압축된) 기록 데이터 및/또는 헤더의 저장은, 단계들 1222 및/또는 1226에서 발생하며/하거나 (예를 들면, 복수의 기록 동작들로부터의) 헤더들 및 데이터의 비휘발성 메모리 페이지가 축적될 때까지 연기된다. 몇몇 실시예들에서, 오류 정정 인코딩은 비휘발성 메모리에 저장하는 것의 일부로서 수행된다. 다른 실시예들에서, 오류 정정 인코딩은 각 판독 유닛의 사용자 부분에 다수의 오류 정정 코딩 바이트를 첨부함으로써 비휘발성 메모리에 저장되는 판독 유닛들을 형성한다. 또 다른 실시예들에서는, 스크램블링이 오류 정정 인코딩의 이전에 수행된다.
단계 1230에서, 상기 결정된 다음의 미기록되어 있는 물리적 위치의 표시가 반환된다. 일 예에서, 상기 결정된 다음의 미기록되어 있는 물리적 위치의 표시는 (가능하게는 가변-사이즈를 갖는, 가능하게는 압축된) 기록 데이터를 저장하는데 사용되는 판독 유닛들 중의 첫 번째 판독 유닛의 어드레스와 같은, 판독 유닛 어드레스를 포함한다. 이 예에 대해 계속하면, 몇몇 실시예들에서, 상기 결정된 다음의 미기록되어 있는 물리적 위치의 표시는, (가능하게는 가변-사이즈를 갖는, 가능하게는 압축된) 기록 데이터에 의해 스패닝되는 다수의 판독 유닛들, 예를 들어 (가능하게는 가변-사이즈를 갖는, 가능하게는 압축된) 기록 데이터의 전부 및 그 미만의 것을 검색하기 위해 판독해야 하는 다수의 판독 유닛들을 더 포함한다. 다수의 판독 유닛들 중의 하나 이상의 판독 유닛은, 라벨들 중의 다른 것들과 연관된 데이터를 임의적 및/또는 선택적으로 포함하며, 그 다수의 판독 유닛들 각각은 (가능하게는 가변-사이즈를 갖는, 가능하게는 압축된) 기록 데이터 중의 적어도 일부를 포함한다. 다른 예에서, 상기 결정된 다음의 미기록되어 있는 물리적 위치의 표시는, (가능하게는 가변-사이즈를 갖는, 가능하게는 압축된) 기록 데이터의 적어도 일부분을 저장하는데 사용되는 비휘발성 메모리 페이지의 어드레스 및/또는 비휘발성 메모리 페이지에서의 오프셋을 포함한다. 다른 예에 대해 계속하면, 몇몇 실시예들에서, 상기 결정된 다음의 미기록되어 있는 물리적 위치의 표시는, (가능하게는 가변-사이즈를 갖는, 가능하게는 압축된) 기록 데이터의 바이트들의 길이를 더 포함한다. 이 다른 예에 대해 더 계속하면, 또 다른 실시예들에서, (가능하게는 가변-사이즈를 갖는, 가능하게는 압축된) 기록 데이터는 하나보다 많은 비휘발성 메모리 페이지를 스패닝한다(예컨대, 첫 번째 비휘발성 메모리 페이지에서 시작되어 하나 이상의 후속의 비휘발성 메모리 페이지들까지 계속됨). 예를 들어, 첫 번째 비휘발성 메모리 페이지의 오프셋 및 그 이후에 있는 사용자 데이터의 잔존 양이 (가능하게는 가변-사이즈를 갖는, 가능하게는 압축된) 기록 데이터의 바이트 길이보다 작은 경우, (가능하게는 가변-사이즈를 갖는, 가능하게는 압축된) 기록 데이터는 하나보다 많은 비휘발성 메모리 페이지를 스패닝한다.
단계 1234에서, 맵은 특정 라벨을 상기 결정된 다음의 미기록되어 있는 물리적 위치의 표시와 연관시키는 것으로 유지된다. 예를 들어, 맵을 유지하는 것은, 특정 라벨과 연관된 데이터가 후속 판독 동작에 의해 검색되는 것을 가능하게 한다.
단계 1238에서, 기록 커맨드에 따른 통계가 유지된다. 예를 들어, 특정 라벨과 연관된 데이터를 기록하는 것은, 데이터가 기록된 리던던시 블록 내의 소정 양의 공간을 사용하며, 임의적 및/또는 선택적으로는 특정 라벨과 연관된 이전 버전의 데이터가 저장된 리던던시 블록 내의 소정 양의 공간을 비우게 된다. 통계는 각 리던던시 블록에서 사용되는 공간의 양(또는 동등하게는 몇몇 실시예들에서, 자유 공간의 양)을 추적한다. 이 프로세스는 단계 1290에서 종료된다.
몇몇 실시예들에서, 록킹(locks)(예컨대, 세마포어(semaphore)들)이 사용되어 프로세스 1200의 적어도 일부분 동안 맵의 적어도 일부분에의 액세스를 방지한다. 예를 들어, 몇몇 실시예들에서, 특정 라벨과 연관된 맵의 엔트리는 단계들 1210 내지 1234에서 록킹됨으로써, 그것이 업데이트되고 있는 동안의 엔트리에 대한 다른 액세스를 방지한다.
도 13을 참조하면, 비휘발성 메모리로부터 데이터를 판독하는 흐름도(1300)가 도시되어 있다. 이 프로세스는 단계 1302에서 개시되며, 단계 1306에서는 비휘발성 메모리로부터 복수의 라벨들(또는 객체 식별자들이나 논리 블록 어드레스들과 같은 다른 고유 식별자들) 중의 특정의 것과 연관된 데이터를 판독(검색)하는 결정이 이루어진다. 예를 들어, 이 결정은 애플리케이션 프로그램, 오퍼레이팅 시스템, 하이퍼바이저, 또는 임의의 다른 소프트웨어 또는 펌웨어 모듈 중의 하나 이상의 것에 의해 이루어진다. 몇몇 실시예들에서, 데이터는 가변-사이즈이다(예컨대, 가능하게는 각 판독 동작에 따라 달라질 수 있음). 다른 실시예들에서, 데이터는 다수의 SATA 섹터들과 같은, 다수의 고정-사이즈 유닛들이다.
단계 1310에서는, 라벨과 연관된 저장 버전(stored version)의 데이터인, 비휘발성 메모리 내의 물리적 위치에 대한 표시를 결정하기 위해, 특정 라벨이 조회된다. 각종 실시예들에 따르면, 맵 조회는 판독 동작을 발생시키는 소프트웨어 모듈에 의해서, 또는 판독 동작을 발생시키는 소프트웨어 모듈에 의해 작동되는 다른 소프트웨어 모듈에 의해서 수행된다. 예를 들어, 애플리케이션이 판독 동작을 발생시키고, 호스트의 드라이버 계층 또는 솔리드-스테이트 드라이브 컨트롤러의 펌웨어 계층이 맵 조회를 수행한다.
단계 1314에서, 비휘발성 메모리 내의 물리적 위치에 대한 표시를 가진 판독 커맨드가 수신된다. 일 예에서, 호스트의 드라이버 계층이 맵 조회를 수행한 이후에, 드라이버 계층은 판독 커맨드 및 비휘발성 메모리 내의 물리적 위치에 대한 표시를 솔리드-스테이트 드라이브 컨트롤러로 전송한다. 다른 예에서, 솔리드-스테이트 드라이브 컨트롤러의 제 1 프로세서가 맵 조회를 수행한 이후에, 제 1 프로세서는 판독 커맨드 및 비휘발성 메모리 내의 물리적 위치에 대한 표시를, 비휘발성 메모리에 대한 액세스를 제어하는 솔리드-스테이트 드라이브 컨트롤러의 제 2 프로세서로 전송한다.
단계 1318에서, 비휘발성 메모리 내의 물리적 위치에 대한 표시는, 특정 라벨과 연관된 저장 버전의 데이터를 포함하는, 판독 유닛들의 위치 및 개수를 결정하는데 사용된다. 일 예에서, 이 물리적 위치에 대한 표시는 특정 라벨과 연관된 저장 버전의 데이터를 저장하는데 사용되는 하나 이상의 판독 유닛들 중의 첫 번째 판독 유닛의 어드레스와 같은 판독 유닛 어드레스를 포함한다. 이 예에 대해 계속하면, 몇몇 실시예들에서, 이 물리적 위치에 대한 표시는 하나 이상의 판독 유닛들의 개수, 예를 들어, 특정 라벨과 연관된 저장 버전의 데이터의 모두 및 일부를 검색하기 위해 판독되어야 하는 판독 유닛들의 개수를 더 포함한다. (하나 이상의 판독 유닛들 중의 하나 이상의 것은 라벨들 중의 다른 것들과 연관된 데이터를 임의적 및/또는 선택적으로 포함하며, 하나 이상의 판독 유닛들 각각은 특정 라벨과 연관된 저장 버전의 데이터 중의 적어도 일부를 포함한다.) 다른 예에서, 이 물리적 위치에 대한 표시는, 특정 라벨과 연관된 저장 버전의 데이터 중의 적어도 일부분을 저장하는데 사용되는 비휘발성 메모리 페이지의 어드레스 및/또는 비휘발성 메모리 페이지에서의 오프셋을 포함한다. 다른 예에 대해 계속하면, 몇몇 실시예들에서, 이 물리적 위치에 대한 표시는 특정 라벨과 연관된 저장 버전의 데이터의 바이트 길이를 더 포함한다. 이 다른 예에 대해 더 계속하면, 또 다른 실시예들에서, 특정 라벨과 연관된 저장 버전의 데이터는 하나보다 많은 비휘발성 메모리 페이지를 스패닝한다(예컨대, 첫 번째 비휘발성 메모리 페이지에서 시작되어 하나 이상의 후속의 비휘발성 메모리 페이지들까지 계속됨). 예를 들어, 첫 번째 비휘발성 메모리 페이지에서의 오프셋 및 그 이후의 사용자 데이터의 잔존 양이, 특정 라벨과 연관된 저장 버전의 데이터의 바이트 길이보다 작은 경우, 특정 라벨과 연관된 저장 버전의 데이터는 하나보다 많은 비휘발성 메모리 페이지를 스패닝한다. 이 다른 예에 대해 더 계속하면, 첫 번째 비휘발성 메모리 페이지 내의 판독 유닛들의 개수 및/또는 사이즈에 따라, 그리고 특정 라벨과 연관된 저장 버전의 데이터의 바이트 길이 및 오프셋에 따라, 첫 번째 비휘발성 메모리 페이지 내의 하나 이상의 판독 유닛들 중의 첫 번째 판독 유닛 및 첫 번째 비휘발성 메모리 페이지 내의 판독 유닛들의 개수가 결정된다. 특정 라벨과 연관된 저장 버전의 데이터가 하나보다 많은 비휘발성 메모리 페이지를 스패닝하는 경우, 유사한 절차가 비휘발성 메모리 페이지들의 하나 이상의 후속의 비휘발성 메모리 페이지들에 사용되어, 특정 라벨과 연관된 저장 버전의 데이터의 적어도 일부분을 포함하는 후속의 비휘발성 메모리 페이지들 내의 추가 판독 유닛들을 결정한다.
단계 1322에서, 상기 결정된 판독 유닛들이 비휘발성 메모리로부터 판독된다. 몇몇 실시예들에서, 오류 정정 디코딩이 이 판독 유닛들에 대해 수행됨으로써 저장시에 발생하는 임의의 오류들을 정정하고/하거나 비휘발성 메모리로 또는 그로부터 송신한다. 다른 실시예들에서, 디-스크램블링이 오류 정정 디코딩 이후에 수행된다. 상기 결정된 판독 유닛들의 오류 정정 인코딩으로 인해, 비휘발성 메모리로부터 판독되는 것으로 결정된 바이트들의 수는, 판독 유닛들 내의 사용자 데이터 및 판독 유닛들 각각에서의 오류 정정 코딩 바이트를 포함한다. 몇몇 실시예들에서, 판독 유닛들 각각에서의 오류 정정 코딩 바이트들의 수는 예를 들면, 비휘발성 메모리의 마모로 인해 솔리드-스테이트 드라이브 컨트롤러 하에서 동적으로 달라진다. 각종 실시예들 및/또는 사용 시나리오들에서, 상기 결정된 판독 유닛들에서의 사용자 데이터의 바이트들의 총 수는, 예를 들어 상기 결정된 판독 유닛들의 적어도 하나의 것이 라벨들 중의 다른 것과 연관된 데이터의 일부분을 포함하는 경우, 특정 라벨과 연관된 저장 버전의 데이터의 바이트 길이를 초과한다.
단계 1326에서, 특정 라벨과 연관된 저장 버전의 데이터가 상기 결정된 판독 유닛들로부터 추출된다. 몇몇 실시예들에서, 이 추출은 판독 커맨드가 제공되는 식별자에 따라 행해진다. 각종 실시예들에 따르면, 식별자는 다음 중의 하나 이상의 것이다: 데이터의 특정 라벨과 동일한 것; 데이터의 특정 라벨의 기능; 테이블을 통해 데이터의 특정 라벨과 연관된 식별자; 비휘발성 메모리에 저장된 모든 데이터 중의 고유 식별자; 및 전술한 것의 임의의 조합. 일 예에서, 판독 유닛들은 도 5에 도시된 바와 같은 하나 이상의 헤더들을 포함하며, 식별자는 헤더들 중의 매칭되는 것을 결정하는데 사용되며, 그 후에 이것은 상기 결정된 판독 유닛들에서 특정 라벨과 연관된 저장 버전의 데이터를 탐색하는데 사용된다. 다른 예에서, 이 물리적 위치에 대한 표시는 상기 결정된 판독 유닛들 내의 특정 라벨과 연관된 저장 버전의 데이터의 위치를 명시하는 정보를 포함한다. 각종 실시예들에 따르면, 특정 라벨과 연관된 저장 버전의 데이터는 가변-사이즈이다. 예를 들어, 특정 라벨과 연관된 데이터는 저장되기 이전에 압축되었으며, 및/또는 특정 라벨과 연관된 데이터는 그 자체가 가변-사이즈를 가지고 있다.
단계 1330에서, 특정 라벨과 연관된 저장 버전의 데이터는 임의적 및/또는 선택적으로 복호화되며, 및/또는 임의적 및/또는 선택적으로 압축 해제되어 특정 라벨과 연관된 데이터를 생성한다.
단계 1334에서는, 특정 라벨과 연관된 데이터가 판독 동작에 대한 응답으로 반환된다.
단계 1338에서, 판독 커맨드에 따라 통계가 유지된다. 일 예에서, 판독 커맨드는 소정 개수의 비휘발성 메모리 블록들에 액세스하여 상기 결정된 판독 유닛들을 검색하고, 통계는 비휘발성 메모리 블록당 판독 방해 이벤트들의 수를 카운팅하는 것으로 유지된다. 다른 예에서, 판독 커맨드는 소정 개수의 비휘발성 메모리 블록들에 액세스하여 상기 결정된 판독 유닛들을 검색하고, 상기 결정된 판독 유닛들의 오류 정정이 상기 결정된 판독 유닛들 각각에서 각 개수의 오류들을 정정하고, 통계는 비휘발성 메모리 블록들 각각의 임의의 판독 유닛들에서 정정되는 최대 개수의 오류들로 유지된다. 이 프로세스는 단계 1390에서 종료된다.
통상적으로, 복수의 비휘발성 메모리 페이지들을 스패닝하지 않는 단일 맵핑 유닛의 데이터를 판독하기 위해서는, 맵핑 유닛의 저장 버전의 데이터를 획득하기 위해 비휘발성 메모리 페이지에서 액세스할 판독 유닛들의 개수는 비휘발성 메모리 페이지 내의 판독 유닛들의 전부보다 작다. 또한, 맵핑 유닛의 저장 버전의 데이터는 가변-사이즈이기 때문에, 제 1 논리 블록 어드레스(또는 라벨)를 참조하는 제 1 판독 커맨드를 위해 비휘발성 메모리 페이지에서 액세스할 판독 유닛들의 개수는, 제 2 논리 블록 어드레스(또는 라벨)을 참조하는 제 2 판독 커맨드를 위해 비휘발성 메모리 페이지에서 액세스할 판독 유닛들의 개수와 상이하며, 제 2 논리 블록 어드레스는 제 1 논리 블록 어드레스와 상이하다. 몇몇 실시예들에서는, 비휘발성 메모리 페이지에서 액세스할 판독 유닛들의 개수만이 비휘발성 메모리 페이지로부터 판독된다. 즉, 맵핑 유닛의 저장 버전의 데이터의 일부분을 포함하는 판독 유닛들의 것들만이 비휘발성 메모리로부터 판독됨으로써, 맵핑 유닛의 저장된 버전의 데이터에 액세스하고 이를 검색한다.
도 14를 참조하면, 비휘발성 메모리에서 데이터를 리사이클링하는 흐름도가 도시되어 있다. 이 프로세스는 단계 1402에서 개시되며, 단계 1406에서는 리사이클링될 비휘발성 메모리의 영역에 대한 결정이 이루어진다. 각종 실시예들 및/또는 사용 시나리오들에 따르면, 영역은 다음 중의 하나 이상의 것이다: 리던던시 블록; 하나 이상의 비휘발성 메모리 블록들; 비어 있으며/있거나 사용된 공간 통계가 유지되는 비휘발성 메모리의 부분; 웨어-레벨링 통계가 유지되는 비휘발성 메모리의 부분; 및 전술한 것들의 임의의 조합. 각종 실시예들 및/또는 사용 시나리오들에 따르면, 리사이클링은 다음 중의 하나 이상으로 수행된다: 비휘발성 메모리 내의 가비지 컬렉션(총 자유 공간); 비휘발성 메모리의 웨어-레벨링(비휘발성 메모리의 블록들을 각각의 프로그램/소거 카운트에서 상대적으로 동일하게 유지하기 위해); 및 프로그램 장애, 과도한 판독 방해 및/또는 과도한 에러 레이트들과 관련된 오류들 및/또는 예외들을 처리. 다른 실시예들에서, 리사이클링은 전반적으로 수행되며, 예를 들면 호스트에 의해서, 복수의 솔리드-스테이트 드라이브들에 걸쳐 수행된다.
단계 1410에서, 하나 이상의 비휘발성 메모리 페이지들이 비휘발성 메모리의 영역으로부터 판독된다. 몇몇 실시예들에서, 비휘발성 메모리 페이지들은 전체적으로 오류 정정된다. 비휘발성 메모리 페이지들 내의 모든 판독 유닛들은 오류 정정된다. 다른 실시예들에서는, (도 6에 도시된 바와 같이) 헤더들을 포함하는 것으로 결정된 비휘발성 메모리 페이지들의 부분만이 먼저 오류 정정되며, 비휘발성 메모리 페이지들의 다른 부분들은, 그 비휘발성 메모리 페이지들이 리사이클링될 필요가 있는 데이터를 포함하는 것으로 결정된 경우(예컨대, 단계 1426)에 필요에 따라 오류 정정된다.
단계 1414에서는, 헤더들이 비휘발성 메모리 페이지들로부터 추출된다. 일 예에서, 도 5에 도시된 실시예에서, 헤더들은 비휘발성 메모리 페이지들 각각의 각 판독 유닛으로부터 추출된다. 다른 예에서, 도 6에 도시된 실시예에서, 헤더들은 비휘발성 메모리 페이지들 각각의 일부분, 예를 들어 비휘발성 메모리 페이지들 각각의 첫 번째 하나 이상의 판독 유닛들로부터 추출된다.
단계 1418에서, 비휘발성 메모리 페이지들로부터 추출된 헤더들이 파싱되어 비휘발성 메모리 페이지들 내의 (예컨대, 개시)와 연관된 데이터의 식별자들을 결정한다.
단계 1422에서는, 맵 내에서 식별자들이 조회됨으로써 식별자들과 연관된 데이터의 비휘발성 메모리 내의 물리적 위치들에 대한 각각의 표시들을 결정한다. 몇몇 실시예들에서, 식별자들은 비휘발성 메모리가 기록될 시에 사용된 데이터의 각각의 라벨들과 동일하다. 다른 실시예들에서, 식별자들은 다른 정보, 예를 들면 솔리드-스테이트 드라이브 식별자와 조합되어 맵 내에서 조회되는 라벨들을 형성한다. 또 다른 실시예들에서, 맵은 식별자들을 라벨들과 연관시키는 것으로 유지되며/되거나 식별자들을 그 식별자들과 연관된 데이터의 비휘발성 메모리 내의 물리적 위치들에 대한 표시들과 연관시키는 것으로 유지된다.
단계 1426에서, (리사이클링되고 있는 비휘발성 메모리 페이지들에서) 계속 현재 진행되고 있는 식별자들과 연관된 임의의 데이터가 비휘발성 메모리 내의 새로운 물리적 위치로 기록된다. 예를 들어, 식별자들과 연관된 데이터의 비휘발성 메모리 내의 물리적 위치들에 대한 각각의 표시들이 각각의 판독 유닛 어드레스들로 변환되며, 각각의 판독 유닛 어드레스들이 리사이클링되고 있는 비휘발성 메모리 페이지들 내에 있는 경우에는, 리사이클링되고 있는 비휘발성 메모리 페이지들이 식별자들과 연관된 가장 최신 버전의 데이터를 포함한다. 각종 실시예들에서, 계속 현재 진행되고 있는 식별자들과 연관된 데이터를 비휘발성 메모리 내의 새로운 물리적 위치로 기록하는 것은, 프로세스 1200의 단계 1218 내지 단계 1230과 유사하게 수행된다. 각종 실시예들에서, 계속 현재 진행되고 있는 데이터가 압축 및 암호화되는 경우, 이 계속 현재 진행되고 있는 데이터는 압축 및 암호화된 형태에서 "그대로(as is)" 재기록된다. 몇몇 실시예들에서, 이 계속 현재 진행되고 있는 데이터는 리사이클링되고 있는 비휘발성 메모리 페이지로부터 솔리드-스테이트 드라이브 컨트롤러 내의 새로운 비휘발성 메모리 페이지로 이동된다(그리고, 이 계속 현재 진행되고 있는 데이터는 호스트로 전송되지 않음으로써, 이 계속 현재 진행되고 있는 데이터를 리사이클링 하도록 한다). 다른 실시예들에서, 리사이클링은 이 계속 현재 진행되고 있는 데이터를 호스트로 전송하고, 프로세스 1200과 유사하게 그것을 재기록하는 것을 포함한다. 다른 실시예들에서, 리사이클링은 복수의 솔리드-스테이트 드라이브들에 걸쳐 전반적으로 수행되며, 솔리드-스테이트 드라이브들 중의 하나의 것에 이전에 저장된 계속 현재 진행되고 있는 데이터가 리사이클링 목적으로 솔리드-스테이트 드라이브들 중의 다른 것으로 재기록된다.
단계 1430에서는, 리사이클링된 임의의 데이터의 새로운 물리적 위치의 표시를 반영하도록 맵이 업데이트된다.
단계 1434에서, 그 영역 내에 처리될 더 많은 비휘발성 메모리 페이지들이 계속 존재하는지의 여부에 대한 결정이 이루어진다. 만일 그러한 경우, 프로세스는 단계 1410으로 진행하여 계속해서 다른 비휘발성 메모리 페이지들을 리사이클링한다.
단계 1438에서, 리사이클링 프로세스 동안의 비휘발성 메모리의 판독 및 기록에 따라 통계가 유지된다. 일 예에서, 비휘발성 메모리를 판독하는 것은, 소정 개수의 비휘발성 메모리 블록들에 액세스하여 비휘발성 메모리 페이지들을 검색하는 것이며, 통계는 비휘발성 메모리 블록당 판독 방해 이벤트들의 수를 카운팅하는 것으로 유지된다. 다른 예에서, 비휘발성 메모리를 판독하는 것은 소정 개수의 비휘발성 메모리 블록들에 액세스하여 비휘발성 메모리 페이지들을 검색하는 것이고, 비휘발성 메모리 페이지들의 오류 정정은 오류 정정 디코딩된 비휘발성 메모리 페이지들의 판독 유닛들 각각에서의 각각의 개수의 오류들을 정정하는 것이며, 통계는 비휘발성 메모리 블록들 각각의 임의의 판독 유닛에서 정정된 오류들의 최대 개수로 유지된다. 또 다른 예에서, 비휘발성 메모리를 기록하는 것에 의해 데이터를 리사이클링하는 것은, 리사이클링된 데이터가 기록된 리던던시 블록 내의 소정 양의 공간을 사용하는 것이고, 임의적 및/또는 선택적으로는 리사이클링되고 있는 리던던시 블록 내의 소정 양의 공간을 비우는 것이다. 통계는 각 리던던시 블록 내의 사용 공간의 양(또는 동등하게는 몇몇 실시예들에서, 자유 공간의 양)을 추적한다. 몇몇 실시예들에서, 리사이클링되고 있는 영역 내의 사용 공간의 양이 0이 되는 경우, 그 영역에는 현재 진행되고 있는(아직 갱신 기록되지 않은) 데이터만이 리사이클링되며, 프로세스 1400은 리사이클링되고 있는 영역 내의 비휘발성 메모리 페이지들 모두를 판독하기 이전에 완료될 수 있다. 이 프로세스는 단계 1490에서 종료된다.
몇몇 실시예들에서, 록킹들(예컨대, 세마포어(semaphore)들)이 사용되어 프로세스 1400의 적어도 일부분 동안 맵의 적어도 일부분에의 액세스를 방지한다. 예를 들어, 몇몇 실시예들에서, 현재 진행되고 있는 데이터를 가진 식별자들 중의 하나와 연관된 맵의 엔트리는 단계들 1422 내지 1430에서 록킹됨으로써, 그것이 업데이트되고 있는 동안의 엔트리에 대한 다른 액세스를 방지한다.
각종 실시예들에 따르면, 호스트는 리사이클링될 비휘발성 메모리의 영역들을 선택하고; 솔리드-스테이트 드라이브 컨트롤러는 리사이클링될 비휘발성 메모리의 영역들을 선택하고; 호스트는 제 1 이유로 리사이클링될 비휘발성 메모리의 영역들을 선택하며 솔리드-스테이트 드라이브 컨트롤러는 이와 다른 제 2 이유로 리사이클링될 비휘발성 메모리의 영역들을 선택하고; 또한 전술한 것들의 임의의 조합이 있을 수 있다. 일 예에서, 리사이클링될 비휘발성 메모리의 영역들의 모든 선택들은 호스트에서 수행된다. 다른 예에서, 호스트는 가비지 컬렉션을 위해 리사이클링될 비휘발성 메모리의 영역들을 선택하고, 솔리드-스테이트 드라이브 컨트롤러는 웨어-레벨링을 위해 리사이클링될 비휘발성 메모리의 영역들을 선택한다. 또 다른 예에서, 호스트는 가비지 컬렉션 및 웨어-레벨링을 위해 리사이클링될 비휘발성 메모리의 영역들을 선택하고, 솔리드-스테이트 드라이브 컨트롤러는 예외적 상황들 및/또는 프로그램 장애들, 과도한 오류 정정 코딩 오류들과 같은 오류들 또는 판독 방해 이벤트들 때문에 리사이클링될 비휘발성 메모리의 영역들을 선택한다. 다른 실시예들에서, 솔리드-스테이트 드라이브 컨트롤러는 프로그램/소거 카운트들 및/또는 사용 공간 통계와 같은 비휘발성 메모리의 하나 이상의 통계를 호스트에게 전달할 수 있다. 예를 들어, 통계는 솔리드-스테이트 드라이브 컨트롤러의 논리 블록 어드레스 공간의 예약된 부분을 통해, 또는 통계를 판독 및/또는 기록하는 특수 커맨드들에 의해서 SMART 로그들과 같은 로그들로서 전달된다. 몇몇 실시예들 및/또는 사용 시나리오들에서, 통계를 호스트에게 전달함으로 인해 호스트는 리사이클링될 비휘발성 메모리의 영역들을 선택하는 것이 가능하게 되며, 솔리드-스테이트 드라이브 컨트롤러는 호스트로부터의 통계를 유지하는 것을 오프로드(offload) 할 수 있게 된다.
몇몇 실시예들에서, 솔리드-스테이트 드라이브 컨트롤러는 호스트와 독립적으로 비휘발성 메모리의 적어도 일부분을 리사이클링할 수 있으며, 업데이트된 물리적 위치들을 호스트에게 전달할 수 있다. 예를 들어, 예외적 상황들 및/또는 프로그램 장애들, 과도한 오류 정정 코딩 오류들, 또는 판독 방해 이벤트들과 같은 오류들에 대한 응답으로, 솔리드-스테이트 드라이브 컨트롤러는 리사이클링되어야 하는 비휘발성 메모리의 영역을 결정한다. 솔리드-스테이트 드라이브 컨트롤러는 비휘발성 메모리의 영역 내에 있는 헤더들을 판독하여, 비휘발성 메모리의 영역 내에 계속 현재 진행되고 있는 데이터를, 비휘발성 메모리의 상이한 부분 내의 각각의 새로운 물리적 위치들로 재위치 시킨다. 각종 실시예들에 따르면, 하나 이상의 구현들에서, 솔리드-스테이트 드라이브는 맵을 유지하고 계속 현재 진행되고 있는 데이터의 각각의 새로운 물리적 위치들을 반영하도록 맵을 업데이트시킬 수 있고; 솔리드-스테이트 드라이브 컨트롤러는 솔리드-스테이트 드라이브 컨트롤러에 의해 재위치된 데이터에 대한 별개의 부분 맵을 유지하고, 상기 별개의 부분 맵은 비휘발성 메모리의 영역 내의 계속 현재 진행되고 있는 데이터의 물리적 위치들의 표시들을 각각의 새로운 물리적 위치들과 연관시킨 것이며; 솔리드-스테이트 드라이브 컨트롤러는 헤더들로부터의 정보, 예를 들면 계속 현재 진행되고 있는 데이터의 각각의 식별자들과 함께 각각의 새로운 물리적 위치들을 호스트에게 전달하고, 상기 호스트는 맵을 업데이트하며; 전술한 것들의 임의의 조합을 포함한다. 유리하게는, 계속 현재 진행되고 있는 데이터는, 비휘발성 메모리의 영역이 소거될 때까지, 비휘발성 메모리의 영역 및 각각의 새로운 물리적 위치들 모두에서 액세스할 수 있다. 다른 실시예들에서, 비휘발성 메모리의 영역은, 각각의 새로운 물리적 위치들로 맵이 업데이트되는 이후 까지 소거되지 않는다. 예를 들어, 솔리드-스테이트 드라이브 컨트롤러에게는, 호스트에 의해, 맵이 업데이트되었으며, 그 후에만 솔리드-스테이트 드라이브 컨트롤러가 비휘발성 메모리의 영역을 소거할 수 있다는 것이 통지된다.
각종 실시예들에서, 호스트는 예를 들면, 판독될 다수의 비휘발성 메모리 페이지들, 또는 호스트로 전송될 다수의 추출 헤더들을 요청하는 것에 의해, 리사이클링을 위해 비휘발성 메모리로부터 비휘발성 메모리 페이지들의 판독을 제어한다(단계 1410). 각종 실시예들에 따르면, 호스트는 적어도 몇몇의 헤더 파싱을 수행하며(단계 1418) 및/또는 솔리드-스테이트 드라이브 컨트롤러는 예를 들면, 추출된 헤더들을 사전-처리 및/또는 재포맷팅 및/또는 필터링하는 것에 의해 적어도 몇몇의 헤더 파싱을 수행한다. 다른 실시예들에서, 호스트는 맵 조회를 수행하며(단계 1422) 또한 어떤 데이터가 재기록이 필요한지의 여부를 결정한다. 재기록(단계 1426)은 호스트의 제어하에, 예를 들면, 호스트가 임의의 계속 현재 진행되고 있는 데이터에 대한 "재기록" 커맨드를 전송하는 것에 의해, 솔리드-스테이트 드라이브 컨트롤러에 의해서 수행된다. 재기록 커맨드는 기록 데이터를 구비한다는 것을 제외하고는 기록 커맨드과 유사하며, 재기록 커맨드는 판독 커맨드가 될 비휘발성 메모리 내의 물리적 위치(데이터가 리사이클링되고 있는 위치)에 대한 표시를 포함한다. 기록 커맨드과 유사하게, 재기록 커맨드는 재기록되는 데이터의 새로운 물리적 위치의 표시를 반환하며, 호스트는 단계 1430을 수행하여 맵을 업데이트한다. 호스트가 프로세스 1400의 많은 부분을 수행하는 관련 실시예들에서, 재기록 커맨드는 계속 현재 진행되고 있는 데이터에 대한 솔리드-스테이트 드라이브 컨트롤러 내의 버퍼 위치를 포함한다.
몇몇 실시예들에서, 비표준 및/또는 벤더-고유 커맨드들이 호스트와 솔리드-스테이트 드라이브 컨트롤러 간의 통신 프로토콜의 일부로서 사용된다. 각종 실시예들에 따르면, 통신 프로토콜은 다음 중의 하나 이상의 것이다: SATA, SCSI(small computer system interface), SAS, PCIe(peripheral component interconnect express), NVM 익스플레스(비휘발성 메모리), SOP(SCSI Over PCIe), 모바일 익스플레스, USB, UFS, eMMC(embedded multimedia card), 이더넷, 파이버 채널, 또는 2개의 전자 디바이스들 간의 통신에 적절한 임의의 다른 프로토콜. 일 예에서, 호스트와 솔리드-스테이트 드라이브 컨트롤러 간의 물리적 위치에 대한 표시의 전달은 벤더-고유 버전의 표준 판독 및 기록 커맨드들과 같은, 벤더-고유 커맨드들을 사용한다. 다른 예에서, 리사이클링을 위해 추출된 헤더들은 로그 페이지들(예컨대, SMART 로그 페이지들)로 솔리드-스테이트 드라이브 컨트롤러로부터 호스트로 전달된다. 또 다른 예에서, 추출된 헤더들은 판독 데이터와 유사하게 취급되지만, 벤더-고유의 "판독 추출된 헤더들(read extracted headers)" 커맨드으로 판독된다.
각종 실시예들에 따르면, 프로세스 1200 및/또는 프로세스 1300 및/또는 프로세스 1400의 단계들 중의 임의의 것은 다음 중의 하나 이상에 의해 수행된다: 호스트가 솔리드-스테이트 드라이브 컨트롤러에 커플링됨; 솔리드-스테이트 드라이브 컨트롤러가 호스트에 커플링됨; 및 전술한 것들의 임의의 조합. 일 예에서, 맵 조회 및 맵 유지관리는 호스트에서 수행된다. 다른 예에서, 판독 유닛들의 개수의 결정은 호스트 및 솔리드-스테이트 드라이브 컨트롤러 중의 어느 하나 또는 양쪽 모두에서 수행된다. 또 다른 예에서, 기록 데이터를 비휘발성 메모리 페이지들로 타일링하는 것(예컨대, 단계 1222)은 솔리드-스테이트 드라이브 컨트롤러에서 수행된다. 일 예에서, 기록 데이터는 호스트의 제어하에서 솔리드-스테이트 드라이브 컨트롤러의 버퍼 내의 비휘발성 메모리 페이지 이미지들로 타일링된다. 다른 예에서, 판독 유닛들로부터 데이터를 추출하는 것(예컨대, 단계 1326)은 솔리드-스테이트 드라이브 컨트롤러에서 수행된다. 또 다른 예에서, 압축(예컨대, 단계 1214) 및 압축 해제(예컨대, 단계 1330)는 솔리드-스테이트 드라이브 컨트롤러에서 수행된다. 일 예에서, 통계는 솔리드-스테이트 드라이브 컨트롤러에서 유지된다(예컨대, 단계 1238 또는 단계 1338). 다른 예에서, 리사이클링할 비휘발성 메모리의 영역들을 결정하는 것(예컨대, 단계 1406)은 호스트에서 수행된다. 또 다른 예에서, 리사이클링된 계속 현재 진행되고 있는 데이터를 이전의 위치에서 새로운 위치로 이전하는 것은(예컨대, 단계 1426) 솔리드-스테이트 드라이브 컨트롤러에서 수행된다.
몇몇 실시예들에서, 호스트 및/또는 솔리드-스테이트 드라이브 컨트롤러는 비휘발성 메모리의 복수의 영역들 각각을 명시된 특성들 및/또는 특징들과 연관시키는 테이블을 유지한다. 일 예에서, 테이블은 비휘발성 메모리의 영역들 각각을 복수의 코드 레이트들(오류 정정 코드 강도들) 중의 특정한 것과 연관시키며, 이에 따라 영역들의 각각에서 저장되는 데이터의 양이 영역들 각각의 "건강성(health)"에 따라 달라질 수 있게 한다. 더 건강한 영역들은 더 높은(더 약한) 코드 레이트를 사용하며 또한 더 많은 사용자 데이터를 저장할 수 있고, 더 약한 영역들은 더 낮은(더 강한) 코드 레이트를 사용하며 또한 더 적은 사용자 데이터를 저장할 수 있다(그러나, 더 많은 오류들을 정정할 수 있다). 다른 예에서, 테이블은 결함이 있거나 장애가 있어서 사용되지 않아야 하는 영역들의 것들을 나타낸다. 예를 들어, NAND와 플래시에 있어서, NAND 플래시의 복수의 블록들 중의 일부는 NAND 플래시가 신규한 것인 경우에도 결함이 있을 수 있으며, 가능하게는 블록들 중의 다른 것들은 NAND 플래시의 수명 동안에 고장이 날 수도 있다. 테이블은 복수의 NAND 플래시 디바이스들에 걸쳐 순차적으로 데이터를 기록할 경우(예컨대, 스트리핑), 건너뛰어야 하는 블록들을 나타낸다.
몇몇 실시예들에서, 맵의 상위-레벨 부분은 호스트에서 유지되며, 맵의 하위-레벨 부분은 솔리드-스테이트 드라이브 컨트롤러에서 유지된다. 맵의 상위-레벨 부분은 라벨들(또는 논리 블록 어드레스들)을 비휘발성 메모리 내의 물리적 위치들에 대한 각각의 표시들과 연관시킨다. 그 후에, 비휘발성 메모리 내의 물리적 위치들에 대한 표시들은, 맵의 하위-레벨 부분을 사용하여 솔리드-스테이트 드라이브 컨트롤러에 의해 더 해석되어 판독 및/또는 기록될 비휘발성 메모리의 물리적 부분들을 결정하도록 한다. 호스트의 관점에서, 물리적 위치들에 대한 표시들은, 솔리드-스테이트 드라이브 컨트롤러가 물리적 위치들에 대한 표시들 중의 하나를 기록시에 특정 데이터 객체에 할당하고, 솔리드-스테이트 드라이브 컨트롤러는 대응하는 물리적 위치에 대한 표시가 다시 주어졌을 때 특정 데이터 객체를 반환할 수 있다는 점에서, 오페이크 핸들(opaque handle)들의 역할을 한다. 환언하면, 비휘발성 메모리 내의 사용자 데이터 구성의 특성에 대한 지식은 호스트로부터 숨겨져 있다. 유리하게는, 솔리드-스테이트 드라이브 컨트롤러는 예를 들면, 코드 레이트들을 선택하고, 양호하지 못한 블록들 또는 그 밖의 호스트에 의해 사용되지 못하는 비휘발성 메모리의 부분들을 선택하는 등의, 비휘발성 메모리의 적어도 일부 관리를 수행할 수 있다.
일 예에서, 비휘발성 메모리의 복수의 블록들 중의 특정 블록이 먼저 사용되는 경우, 솔리드-스테이트 드라이브 컨트롤러는 그 특정 블록의 복수의 페이지들 각각을 복수의(예컨대, 8개의) 각각의 판독 유닛들로 분할하고, 그 특정 블록의 오류 정정을 위해 복수의 코드 레이트들 중의 특정 코드 레이트를 사용한다. 그 후에, 특정 블록이 더 마모된 이후에 재사용되는 경우, 솔리드-스테이트 드라이브 컨트롤러는 특정 블록의 복수의 페이지들 각각을 복수의(예컨대, 7개의) 각각의 판독 유닛들로 분할하고, 그 특정 블록의 오류 정정을 위해 코드 레이트들 중의 더 강한 코드 레이트를 사용한다. 양쪽 모두의 경우, 호스트가 특정 블록에 저장되는 데이터를 기록하는 경우, 특정 블록 내의 물리적 위치에 대한 표시는, 특정 블록의 페이지들이 분할되는 판독 유닛들의 개수에 독립적이다.
다른 예에서, 가변-사이즈 데이터가 비휘발성 메모리의 복수의 블록들 중의 복수의 블록들을 스패닝하는 경우, 호스트에 의해 사용되는 물리적 위치들에 대한 표시들은, 비휘발성 메모리의 특정 블록이 사용되고 있는지 또는 양호하지 못한 것으로 표시되어 사용되지 못하는지의 여부에 대한 지식에 독립적이다. 이 다른 예에 대해 계속 설명하면, 비휘발성 메모리의 복수의 다이 중의 특정 블록인 블록 7이 양호하지 못하여 사용되지 못하는 것으로 가정한다. 이 다이 중의 이전의 블록인 블록 6 내의 데이터가 후속 블록으로 스패닝하는 경우, 솔리드-스테이트 드라이브 컨트롤러는 그 특정 다이의 블록 6을 사용한다. 이전의 다이의 블록 7 내의 데이터가 후속의 블록으로 스패닝하는 경우, 솔리드-스테이트 드라이브 컨트롤러는 특정 다이의 블록 7을 건너 뛰고서 다이의 다음 블록인 블록 7 내의 데이터에서 계속 행한다. 호스트는 어떤 블록들로 데이터가 스패닝하는 지에 대한 지식을 갖고 있지 않다.
각종 실시예들에 따르면, 판독 스크럽(read scrub) 및 리사이클링과 같은 백그라운드 동작들이 호스트, 솔리드-스테이트 드라이브 컨트롤러, 및 그들의 임의의 조합 중의 하나 이상에 의해 수행된다.
각종 실시예들에 따르면, 솔리드-스테이트 드라이브 컨트롤러의 호스트의 및/또는 프로세서의 동작들은, 하나 이상의 중앙 처리 장치들 중의 임의의 것, 하나 이상의 하드웨어 유닛들, 및/또는 전술한 것들의 임의의 조합에 의해 수행된다.
각종 실시예들에 따르면, 호스트 및/또는 솔리드-스테이트 드라이브 컨트롤러는 다음 중의 하나 이상을 사용할 수 있다: 전통적 플래시 변환 계층; 가변-사이즈 플래시 변환 계층; 순차적 판독 최적화된 가변-사이즈 플래시 변환 계층; 비휘발성 메모리의 상이한 물리적 부분들 내의 임의의 다른 타입의 플래시 변환 계층, 비휘발성 메모리에 대한 다이렉트 액세스, 전술한 것들의 임의의 조합; 솔리드-스테이트 드라이브 컨트롤러의 논리적 어드레스 공간의 상이한 논리적 부분들에서 전술한 것들의 임의의 조합; 비휘발성 메모리에 대한 로우(raw) 물리적 액세스; 및 전술한 것들의 임의의 조합.
각종 실시예들에 따르면, 호스트 기록 데이터는 비휘발성 메모리에 기록되기 이전에 임의적 및/또는 선택적으로 암호화되며, 비휘발성 메모리로부터 판독된 이후에 임의적 및/또는 선택적으로 복호화된다. 다른 실시예들에서, 호스트 기록 데이터의 임의적 및/또는 선택적 압축 이후에 암호화가 일어나며, 호스트에게 반환할 판독 데이터의 임의적 및/또는 선택적 압축 해제 이전에 복호화가 일어난다.
본 명세서에서 몇몇 예시적 실시예들은 솔리드-스테이트 드라이브들 및 솔리드-스테이트 드라이브 컨트롤러들을 사용하였지만, 전술한 기술들은 다른 입/출력 디바이스들 및/또는 하드 디스크 드라이브들과 같은 데이터 저장 디바이스들에 일반적으로 적용될 수 있다. 이러한 입/출력 디바이스들에서 사용되는 비휘발성 메모리는, 각종 실시예들에서, "솔리드-스테이트" 비휘발성 메모리 이외에, 예를 들면 하드 디스크 드라이브들의 자기 플래터(예컨대, 싱글드 자기 기록(shingled magnetic recording)을 사용하는 하드 디스크 드라이브들)이다.
몇몇 실시예들에서, 멀티-노드 저장 디바이스 또는 그 부분(들), 예를 들어 프로세서(예컨대, CPU), 입/출력 컨트롤러(예컨대, RAID-온-칩 다이)와의 연동을 위해 인에이블되는 입/출력 디바이스의 비휘발성 메모리 컨트롤러 또는 솔리드-스테이트 디스크 또는 하드 디스크 드라이브에 의해 수행되는 동작들의 전부 또는 일부의 각종 조합 그리고 프로세서, 마이크로프로세서, 시스템-온-칩, 응용 주문형 집적 회로, 하드웨어 액셀러레이터(accelerator) 또는 전술한 동작들의 전부 또는 일부를 제공하는 다른 회로의 부분들의 각종 조합이, 컴퓨터 시스템에 의한 프로세싱과 호환가능한 사양에 의해 특정된다. 그 사양은 하드웨어 디스크립션(description) 언어, 회로 디스크립션들, 네트리스트(netlist) 디스크립션들, 마스크 디스크립션들 또는 레이아웃 디스크립션들과 같은 다양한 디스크립션들에 따른다. 예시적인 디스크립션들은, 베릴로그(Verilog), VHDL(very high speed integrated circuit hardware description language), SPICE(simulation program with integrated circuit emphasis), PSpice와 같은 SPICE 변형들, IBIS(input/output buffer information specification), LEF(library exchange format), DEF(design exchange format), GDS-II(graphic database system-II), OASIS(open artwork system interchange 표준) 또는 다른 디스크립션들을 포함한다. 다양한 실시예들에서, 프로세싱은 하나 이상의 집적 회로들의 포함을 위해 적합한 로직 및/또는 회로를 생성하고, 검증하거나 특정하기 위해 해석(interpretation), 컴필레이션, 시뮬레이션 및 합성의 임의의 조합을 포함한다. 각종 실시예들에 따른 각각의 집적 회로는 다양한 기술들에 따라 설계가능 및/또는 제조가능하다. 기술들은 (필드 또는 마스크 프로그램가능한 게이트 어레이 집적 회로와 같은) 프로그램가능 기술, (전적 또는 부분적 셀-기반 집적 회로와 같은) 세미-커스텀(semi-custom) 기술 및 (실질적으로 특화되는 집적 회로와 같은) 풀-커스텀(full-custom) 기술 및 이들의 임의의 조합 또는 집적 회로들의 설계 및/또는 제조와 호환가능한 임의의 다른 기술을 포함한다.
도 1 내지 도 14의 도면에 의해 수행되는 기능들은, 본 상세한 설명의 교시에 따라 프로그래밍되는 종래의 범용 프로세서, 디지털 컴퓨터, 마이크로프로세서, 마이크로컨트롤러, 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 arrays)들, 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)들, UVPROM(ultra-violet erasable programmable ROM)들, 플래시 메모리, 자기 카드들, 광학 카드들, 및/또는 전자적 인스트럭션들을 저장하는데 적절한 임의의 타입의 매체를 포함할 수 있으며, 이에 한정되지 않는다.
본 발명의 구성요소들은 하나 이상의 디바이스들, 유닛들, 컴포넌트들, 시스템들, 머신들 및/또는 장치들의 일부 또는 전부를 형성할 수 있다. 이 디바이스들은 서버들, 워크스테이션들, 스토리지 어레이 컨트롤러들, 스토리지 시스템들, 개인용 컴퓨터들, 랩탑 컴퓨터, 노트북 컴퓨터들, 팜 컴퓨터들, PDA(personal digital assistant)들, 휴대용 전자 디바이스들, 배터리 전원공급형 디바이스들, 셋-탑 박스들, 인코더들, 디코더들, 트랜스코더들, 컴프레서들, 디컴프레서들, 프리-프로세서들, 포스트-프로세서들, 송신기들, 수신기들, 송수신기들, 암호 회로들, 휴대 전화들, 디지털 카메라들, 포지셔닝 및/또는 네비게이션 시스템들, 의료 기기, 헤드 업 디스플레이들, 무선 디바이스들, 오디오 녹음 디바이스, 오디오 저장 디바이스 및/또는 오디오 재생 디바이스, 비디오 녹화 디바이스, 비디오 저장 디바이스 및/또는 비디오 재생 디바이스, 게임 플랫폼들, 주변장치들 및/또는 멀티-칩 모듈들을 포함할 수 있으며, 이에 한정되지 않는다. 관련 기술분야(들)의 당업자는 본 발명의 구성요소들이 특정 애플리케이션의 기준을 충족하는 다른 타입의 디바이스들에서 구현될 수도 있음을 이해할 것이다.
용어 "할 수 있다" 및 용어 "일반적으로"가 용어 "이다"와 함께 사용되는 경우, 이 동사는 그 설명이 예시적인 것을 의도함을 전달하기 위한 것이고, 본 명세서에 제시된 특정 예들 및 본 명세서에 기초하여 도출될 수 있는 다른 예들 모두를 포괄하기에 충분히 넓은 것으로 여겨져야 한다. 본 명세서에서 사용되는 용어 "할 수 있다" 및 용어 "일반적으로"는 반드시 바람직한 사항을 나타내는 것으로 해석되어서는 아니 되며 가능하게는 대응하는 구성요소를 생략 가능함을 나타낼 수 있다.
본 발명은 그것의 실시예들을 참조하여 구체적으로 도시 및 기술되었지만, 본 발명의 범위로부터 벗어나지 않는 범위 내에서 형태 및 세부사항의 다양한 변형들이 이루어질 수 있음을 당업자는 이해할 것이다.

Claims (22)

  1. 파티셔닝된 플래시 변환 계층(flash translation layer)을 활용하여 데이터를 저장하는 방법으로서,
    호스트로부터 기록될 제 1 데이터를 수신하는 단계; 및
    상기 제 1 데이터로부터 생성되는 제 2 데이터를 메모리에 저장하는 단계 ― 상기 제 1 데이터는 상기 제 2 데이터를 생성하기 위해 압축되고, 상기 제 2 데이터는 가변 사이즈를 갖고, 상기 제 2 데이터는 상기 메모리 내의 복수의 물리적 위치들에 저장되고, 상기 제 2 데이터를 보유하는 상기 복수의 물리적 위치들의 초기 물리적 위치는 상기 메모리의 다음의 미기록된 위치(next unwritten location)이고, 상기 제 2 데이터의 사이즈는 상기 메모리에 로컬인 상기 플래시 변환 계층의 제 1 파티션에 저장되고, 상기 메모리의 상기 제 2 데이터의 상기 초기 물리적 위치는 상기 호스트의 상기 플래시 변환 계층의 제 2 파티션에 저장됨 ―
    를 포함하는,
    파티셔닝된 플래시 변환 계층을 활용하여 데이터를 저장하는 방법.
  2. 삭제
  3. 제 1 항에 있어서,
    상기 호스트로부터 상기 제 2 데이터의 상기 초기 물리적 위치를 갖는 판독 커맨드를 수신하는 단계;
    상기 플래시 변환 계층의 상기 제 1 파티션으로부터 상기 제 2 데이터의 사이즈를 판독하는 단계; 및
    상기 제 2 데이터의 사이즈 및 상기 초기 물리적 위치에 기초하여 상기 메모리의 부분을 판독함으로써 상기 제 2 데이터를 검색해내는(retrieve) 단계
    를 더 포함하는,
    파티셔닝된 플래시 변환 계층을 활용하여 데이터를 저장하는 방법.
  4. 제 3 항에 있어서,
    상기 메모리로부터 검색해낸 상기 제 2 데이터를 압축 해제하는 것에 의해 상기 제 1 데이터를 재생성하는 단계; 및
    상기 재생성된 제 1 데이터를 상기 호스트에게 반환하는 단계
    를 더 포함하는,
    파티셔닝된 플래시 변환 계층을 활용하여 데이터를 저장하는 방법.
  5. 제 1 항에 있어서,
    상기 제 2 데이터와 연관된 헤더의 적어도 일부분으로서 상기 메모리에 상기 제 1 데이터와 연관된 식별자를 저장하는 단계를 더 포함하는,
    파티셔닝된 플래시 변환 계층을 활용하여 데이터를 저장하는 방법.
  6. 제 5 항에 있어서,
    상기 호스트 내의 맵을 유지하는 단계를 더 포함하고, 상기 맵은 상기 식별자를 상기 메모리 내의 상기 제 2 데이터의 상기 초기 물리적 위치와 연관시키는,
    파티셔닝된 플래시 변환 계층을 활용하여 데이터를 저장하는 방법.
  7. 제 5 항에 있어서,
    상기 식별자는 논리 블록 어드레스이고, 상기 초기 물리적 위치는 상기 제 2 데이터를 보유하는 상기 메모리 내의 복수의 판독 유닛들 중의 하나의 판독 유닛 내의 어드레스이고, 상기 복수의 판독 유닛들 각각은 상기 제 2 데이터의 각각의 부분 및 상기 제 2 데이터의 각각의 부분을 보호하는 각각의 오류 정정 정보를 포함하는,
    파티셔닝된 플래시 변환 계층을 활용하여 데이터를 저장하는 방법.
  8. 제 7 항에 있어서,
    상기 메모리는 복수의 페이지들을 가지며, 상기 어드레스는 상기 제 2 데이터를 보유한 상기 복수의 페이지들 중 제 1 페이지에 있으며, 상기 제 1 페이지는 상기 제 2 데이터를 보유한 제 1 개수의 상기 복수의 판독 유닛들을 포함하고, 상기 복수의 페이지들 중의 제 2 페이지는 상기 제 2 데이터를 보유한 제 2 개수의 상기 복수의 판독 유닛들을 포함하며, 상기 제 1 개수는 상기 제 2 개수와 상이한,
    파티셔닝된 플래시 변환 계층을 활용하여 데이터를 저장하는 방법.
  9. 제 1 항에 있어서,
    상기 다음의 미기록된 위치는 상기 메모리의 물리적 어드레스 공간에서 이전에 기록된 데이터에 인접해 있는,
    파티셔닝된 플래시 변환 계층을 활용하여 데이터를 저장하는 방법.
  10. 파티셔닝된 플래시 변환 계층을 활용하여 데이터를 저장하는 방법으로서,
    호스트로부터 기록될 상기 데이터를 수신하는 단계 ― 상기 데이터는 가변 사이즈를 가짐 ―; 및
    상기 데이터를 메모리에 저장하는 단계 ― 상기 데이터는 상기 메모리 내의 복수의 물리적 위치들에 저장되고, 상기 데이터를 보유하는 상기 복수의 물리적 위치들의 초기 물리적 위치는 상기 메모리의 다음의 미기록된 위치이고, 상기 데이터의 사이즈는 상기 메모리에 로컬인 상기 플래시 변환 계층의 제 1 파티션에 저장되고, 상기 메모리의 상기 데이터의 상기 초기 물리적 위치는 상기 호스트의 상기 플래시 변환 계층의 제 2 파티션에 저장됨 ―;
    를 포함하는,
    파티셔닝된 플래시 변환 계층을 활용하여 데이터를 저장하는 방법.
  11. 제 10 항에 있어서,
    상기 호스트로부터 상기 데이터를 보유한 상기 메모리의 상기 초기 물리적 위치를 가진 판독 커맨드를 수신하는 단계,
    상기 플래시 변환 계층의 상기 제 1 파티션으로부터 상기 데이터의 사이즈를 판독하는 단계; 및
    상기 데이터의 사이즈 및 상기 초기 물리적 위치에 기초하여 상기 메모리의 부분을 판독함으로써 상기 데이터를 검색해내는 단계
    를 더 포함하는,
    파티셔닝된 플래시 변환 계층을 활용하여 데이터를 저장하는 방법.
  12. 제 11 항에 있어서
    상기 호스트로 상기 데이터를 반환하는 단계를 더 포함하는,
    파티셔닝된 플래시 변환 계층을 활용하여 데이터를 저장하는 방법.
  13. 제 10 항에 있어서,
    상기 데이터와 연관된 헤더의 적어도 일부분으로서 상기 메모리에 상기 데이터와 연관된 식별자를 저장하는 단계를 더 포함하는,
    파티셔닝된 플래시 변환 계층을 활용하여 데이터를 저장하는 방법.
  14. 제 13 항에 있어서,
    상기 호스트 내의 맵을 유지하는 단계를 더 포함하고, 상기 맵은 상기 식별자를 상기 메모리 내의 상기 데이터의 상기 초기 물리적 위치와 연관시키는,
    파티셔닝된 플래시 변환 계층을 활용하여 데이터를 저장하는 방법.
  15. 제 13 항에 있어서,
    상기 식별자는 논리 블록 어드레스이고, 상기 초기 물리적 위치는 상기 데이터를 보유하는 상기 메모리 내의 복수의 판독 유닛들 중의 하나의 판독 유닛 내의 어드레스이고, 상기 복수의 판독 유닛들 각각은 상기 데이터의 각각의 부분 및 상기 데이터의 각각의 부분을 보호하는 각각의 오류 정정 정보를 포함하는,
    파티셔닝된 플래시 변환 계층을 활용하여 데이터를 저장하는 방법.
  16. 제 15 항에 있어서,
    상기 메모리는 복수의 페이지들을 가지며, 상기 어드레스는 상기 데이터를 보유한 상기 복수의 페이지들 중 제 1 페이지에 있으며, 상기 제 1 페이지는 상기 데이터를 보유한 제 1 개수의 상기 복수의 판독 유닛들을 포함하고, 상기 복수의 페이지들 중의 제 2 페이지는 상기 데이터를 보유한 제 2 개수의 상기 복수의 판독 유닛들을 포함하며, 상기 제 1 개수는 상기 제 2 개수와 상이한,
    파티셔닝된 플래시 변환 계층을 활용하여 데이터를 저장하는 방법.
  17. 제 10 항에 있어서,
    상기 다음의 미기록된 위치는 상기 메모리의 물리적 어드레스 공간에서 이전에 기록된 데이터에 인접해 있는,
    파티셔닝된 플래시 변환 계층을 활용하여 데이터를 저장하는 방법.
  18. 메모리로 또는 메모리로부터의 복수의 판독/기록 동작들을 프로세싱하도록 구성된 인터페이스; 및
    제어 회로를 포함하고,
    상기 제어 회로는 호스트로부터 제 1 데이터를 수신하고, 상기 제 1 데이터로부터 생성되는 제 2 데이터를 상기 메모리에 저장하도록 구성되고, 상기 제 1 데이터는 상기 제 2 데이터를 생성하기 위해 압축되고, 상기 제 2 데이터는 가변 사이즈를 갖고, 상기 제 2 데이터는 상기 메모리 내의 복수의 물리적 위치들에 저장되고, 상기 제 2 데이터를 보유하는 상기 복수의 물리적 위치들의 초기 물리적 위치는 상기 메모리의 다음의 미기록된 위치이고, 상기 제 2 데이터의 사이즈는 상기 메모리에 로컬인 플래시 변환 계층의 제 1 파티션에 저장되고, 상기 메모리의 상기 제 2 데이터의 상기 초기 물리적 위치는 상기 호스트의 상기 플래시 변환 계층의 제 2 파티션에 저장되는,
    파티셔닝된 플래시 변환 계층을 활용하여 데이터를 저장하기 위한 장치.
  19. 삭제
  20. 제 18 항에 있어서,
    상기 인터페이스 및 상기 제어 회로는 솔리드-스테이트 드라이브(solid-state drive) 제어기의 부분인,
    파티셔닝된 플래시 변환 계층을 활용하여 데이터를 저장하기 위한 장치.
  21. 제 1 항에 있어서,
    상기 단계들은 솔리드-스테이트 드라이브 제어기에서 수행되는,
    파티셔닝된 플래시 변환 계층을 활용하여 데이터를 저장하는 방법.
  22. 제 10 항에 있어서,
    상기 단계들은 솔리드-스테이트 드라이브 제어기에서 수행되는,
    파티셔닝된 플래시 변환 계층을 활용하여 데이터를 저장하는 방법.
KR1020140105759A 2013-08-16 2014-08-14 호스트와 컨트롤러 간에 파티셔닝된 변환 계층 KR102328612B1 (ko)

Applications Claiming Priority (10)

Application Number Priority Date Filing Date Title
US201361866672P 2013-08-16 2013-08-16
US61/866,672 2013-08-16
US201361873357P 2013-09-03 2013-09-03
US61/873,357 2013-09-03
US201361888681P 2013-10-09 2013-10-09
US61/888,681 2013-10-09
US201361893383P 2013-10-21 2013-10-21
US61/893,383 2013-10-21
US14/060,799 2013-10-23
US14/060,799 US9329991B2 (en) 2013-01-22 2013-10-23 Translation layer partitioned between host and controller

Publications (2)

Publication Number Publication Date
KR20150020136A KR20150020136A (ko) 2015-02-25
KR102328612B1 true KR102328612B1 (ko) 2021-11-17

Family

ID=51662491

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020140105759A KR102328612B1 (ko) 2013-08-16 2014-08-14 호스트와 컨트롤러 간에 파티셔닝된 변환 계층

Country Status (6)

Country Link
JP (1) JP6443794B2 (ko)
KR (1) KR102328612B1 (ko)
CN (1) CN104679446B (ko)
DE (1) DE102014111670A1 (ko)
GB (1) GB2519211A (ko)
TW (1) TWI637262B (ko)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016139749A1 (ja) * 2015-03-03 2016-09-09 株式会社日立製作所 計算機システム、及び、記憶制御方法
CN106101096B (zh) * 2016-06-10 2022-06-28 北京数盾信息科技有限公司 一种基于接口总线分离的高速加密模组
US10236909B2 (en) * 2017-03-31 2019-03-19 Sandisk Technologies Llc Bit-order modification for different memory areas of a storage device
US10534718B2 (en) 2017-07-31 2020-01-14 Micron Technology, Inc. Variable-size table for address translation
US10354732B2 (en) * 2017-08-30 2019-07-16 Micron Technology, Inc. NAND temperature data management
JP6785204B2 (ja) * 2017-09-21 2020-11-18 キオクシア株式会社 メモリシステムおよび制御方法
JP6785205B2 (ja) * 2017-09-21 2020-11-18 キオクシア株式会社 メモリシステムおよび制御方法
FR3072476A1 (fr) * 2017-10-13 2019-04-19 Proton World International N.V. Unite logique de memoire pour memoire flash
JP6982468B2 (ja) * 2017-10-27 2021-12-17 キオクシア株式会社 メモリシステムおよび制御方法
CN107861752A (zh) * 2017-11-29 2018-03-30 英业达科技有限公司 服务器系统
US10878859B2 (en) 2017-12-20 2020-12-29 Micron Technology, Inc. Utilizing write stream attributes in storage write commands
CN108319429B (zh) * 2018-01-10 2021-02-19 北京思特奇信息技术股份有限公司 一种加快文件读取的方法及计算机设备
JP6960877B2 (ja) 2018-03-22 2021-11-05 キオクシア株式会社 メモリシステム
US11803325B2 (en) 2018-03-27 2023-10-31 Micron Technology, Inc. Specifying media type in write commands
CN109471596B (zh) * 2018-10-31 2022-03-18 北京小米移动软件有限公司 数据写入方法、装置、设备及存储介质
US11048413B2 (en) * 2019-06-12 2021-06-29 Samsung Electronics Co., Ltd. Method for reducing read ports and accelerating decompression in memory systems
US11188459B2 (en) * 2019-12-23 2021-11-30 Micron Technology, Inc. Data block switching at a memory sub-system
KR102267477B1 (ko) * 2020-02-20 2021-06-22 삼성전자주식회사 스토리지 장치 및 이의 동작 방법
US11481115B2 (en) * 2020-08-17 2022-10-25 Western Digital Technologies, Inc. Host-managed hardware compression with zoned namespaces
GB2603459B (en) * 2021-01-22 2023-05-10 Advanced Risc Mach Ltd Data processing systems
CN113419678A (zh) * 2021-06-18 2021-09-21 上海盈方微电子有限公司 一种用于嵌入式系统的存储管理方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090222596A1 (en) * 2007-12-06 2009-09-03 David Flynn Apparatus, system, and method for coordinating storage requests in a multi-processor/multi-thread environment

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB9113469D0 (en) * 1991-06-21 1991-08-07 Anamartic Ltd Data storage management systems
US5943692A (en) * 1997-04-30 1999-08-24 International Business Machines Corporation Mobile client computer system with flash memory management utilizing a virtual address map and variable length data
JP3766188B2 (ja) * 1997-08-22 2006-04-12 沖電気工業株式会社 論理フォーマット変換方法およびデータ保存媒体
JP2000076117A (ja) * 1998-08-31 2000-03-14 Kano Densan Hongkong Yugenkoshi 電子機器及びその制御方法及び記憶媒体
JP2001101071A (ja) * 1999-09-29 2001-04-13 Victor Co Of Japan Ltd フラッシュ型メモリを用いたデータ記憶装置及びフラッシュ型メモリのデータ管理方法
KR100706242B1 (ko) * 2005-02-07 2007-04-11 삼성전자주식회사 메모리 시스템 및 그것의 런 단위 어드레스 매핑 테이블 구성 방법
TW200832440A (en) * 2007-01-25 2008-08-01 Genesys Logic Inc Flash memory translation layer system
JP5257444B2 (ja) * 2008-03-05 2013-08-07 日本電気株式会社 メタサーバ、及び、ファイル管理システム
US7933303B2 (en) 2009-06-17 2011-04-26 Sumitomo Electric Industries, Ltd. Group-III nitride semiconductor laser device, and method for fabricating group-III nitride semiconductor laser device
US9058047B2 (en) 2010-08-26 2015-06-16 Semiconductor Energy Laboratory Co., Ltd. Semiconductor device
WO2012075200A2 (en) * 2010-12-01 2012-06-07 Sandforce, Inc. Dynamic higher-level redundancy mode management with independent silicon elements
JP2014507717A (ja) * 2011-01-18 2014-03-27 エルエスアイ コーポレーション より高いレベルの冗長な情報の計算
US8880839B2 (en) * 2011-04-14 2014-11-04 International Business Machines Corporation Writing adjacent tracks to a stride, based on a comparison of a destaging of tracks to a defragmentation of the stride

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090222596A1 (en) * 2007-12-06 2009-09-03 David Flynn Apparatus, system, and method for coordinating storage requests in a multi-processor/multi-thread environment

Also Published As

Publication number Publication date
JP2015036982A (ja) 2015-02-23
GB201414515D0 (en) 2014-10-01
CN104679446A (zh) 2015-06-03
CN104679446B (zh) 2017-10-03
GB2519211A (en) 2015-04-15
KR20150020136A (ko) 2015-02-25
TW201518944A (zh) 2015-05-16
TWI637262B (zh) 2018-10-01
JP6443794B2 (ja) 2018-12-26
DE102014111670A1 (de) 2015-02-19

Similar Documents

Publication Publication Date Title
KR102328612B1 (ko) 호스트와 컨트롤러 간에 파티셔닝된 변환 계층
US9329991B2 (en) Translation layer partitioned between host and controller
US10346312B2 (en) Variable-size flash translation layer
US11449252B2 (en) Method of writing and reading data in an NVM using Lpage identification headers
KR102155191B1 (ko) 비휘발성 메모리에 대한 기록들의 관리 및 그 기록들의 영역 선택
KR102307382B1 (ko) 가변 크기 플래시 변환 계층
US9448738B2 (en) Compression and formatting of data for data storage systems
US9122587B2 (en) Self recovery in a solid state drive
US8230317B2 (en) Data protection method for variable length records by utilizing high performance block storage metadata
WO2012148812A2 (en) Encrypted transport solid-state disk controller
US9141477B2 (en) Data protection for variable length records by utilizing high performance block storage metadata
GB2519629A (en) Variable-size flash translation layer

Legal Events

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