KR20130118370A - 상위-레벨 리던던시 정보 계산 - Google Patents
상위-레벨 리던던시 정보 계산 Download PDFInfo
- Publication number
- KR20130118370A KR20130118370A KR1020137021636A KR20137021636A KR20130118370A KR 20130118370 A KR20130118370 A KR 20130118370A KR 1020137021636 A KR1020137021636 A KR 1020137021636A KR 20137021636 A KR20137021636 A KR 20137021636A KR 20130118370 A KR20130118370 A KR 20130118370A
- Authority
- KR
- South Korea
- Prior art keywords
- units
- data storage
- storage information
- information
- data
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/16—Protection against loss of memory contents
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding 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/1044—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices with specific ECC/EDC distribution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1076—Parity data used in redundant arrays of independent storages, e.g. in RAID systems
- G06F11/108—Parity data distribution in semiconductor storages, e.g. in SSD
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/20—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
- G06F11/2053—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
- G06F11/2094—Redundant storage or storage space
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Detection And Correction Of Errors (AREA)
Abstract
상위-레벨 리던던시 정보 계산은 SSD의 동작 동안 비-휘발성(예를 들어, 플래시) 메모리 엘리먼트들의 실패들의 맥락에서 신뢰성있는 동작을 유지하기 위해 고체-상태 디스크(SSD) 제어기가 상위-레벨 리던던시 능력들을 제공하게 할 수 있다. 상위-레벨 리던던시 정보의 제 1 부분은 상위-레벨 리던던시 정보에 의해 보호되는 데이터의 일부분에서의 모든 페이지들의 XOR를 통해 패리티 코딩을 이용하여 계산된다. 상위-레벨 리던던시 정보의 제 2 부분은 가중된-합 기술을 이용하여 계산되며, 그 부분에서의 각 페이지는 가중된-합을 계산할 때 가중치로서 고유한 비-제로 "인덱스"를 할당받는다. (갈르와 필드와 같은) 유한 필드를 통해 산술연산이 수행된다. 상위-레벨 리던던시 정보의 일부분들은 비-휘발성 메모리 엘리먼트들의 판독 동작 완료의 순서에 기초한 순서와 같은, 임의의 순서로 계산가능하다.
Description
본 출원에 대한 우선권 이익 주장은 첨부하는 출원 데이터 시트, 요청 또는 전송(적절한 경우에)에서 이루어진다. 즉시 출원의 타입에 의해 허용된 범위까지, 본 출원은 후속하는 출원들의 모든 목적들을 위해 인용에 의해 통합하며, 모두 공통으로 발명이 이루어진 때에 즉시 출원으로 소유되었다.
2011년 1월 18일에 출원된 제 1 발명자 명칭 Jeremy Isaac Nathaniel Werner의 "Higher-Level Redundancy Information Computation"이란 명칭의 미국 가 출원(도켓 번호 SF-10-14 및 일련번호 제 61/433,918 호);
2011년 3월 11일에 출원된 제 1 발명자 명칭 Hao Zhong인 "LDPC Erasure Decoding for Flash Memories"란 명칭의 PCT 출원(도켓 번호 SF-10-01PCTB 및 일련번호 PCT/US11/28244); 및
2011년 10월 26일에 출원된 제 1 발명자 명칭 Yan Li인 "Adaptive ECC Techniques for Flash Memory Based Data Storage"란 명칭의 PCT 출원(도켓 번호 SF-10-03PCT 및 일련번호 PCT/US11/57914).
이용의 성능, 효율성 및 유틸리티에서의 개선들을 제공하기 위해 플래시 메모리 저장 기술에서의 진보들이 필요하다.
공개적으로 또는 잘 알려진 것으로 명시적으로 식별되지 않는 한, 맥락, 정의들 또는 비교 목적들을 위해 포함하는 본원에 언급된 기술들 및 개념들은 그와 같은 기술들 및 개념들이 이전에 공개적으로 알려지거나 그렇지 않으면 종래 기술의 일부라는 승인으로서 해석되어서는 안된다. 특허들, 특허 출원들 및 공개공보들을 포함하는 (만약 있다면) 본원에 인용된 모든 참조들은 구체적으로 통합되든지 아니든지 간에, 모든 목적들을 위해 그 전체들이 인용에 의해 본원에 통합된다.
본 발명은 수많은 방식들, 예를 들어, 프로세스, 제조 물건, 장치, 시스템, 물질의 구성 및 컴퓨터 판독가능한 저장 매체(예를 들어, 디스크와 같은 광학 및/또는 자기 대량 저장 디바이스, 플래시 저장장치와 같은 비-휘발성 저장장치를 갖는 집적된 회로에서의 매체) 또는 프로그램 명령들이 광학 또는 전자 통신 링크들을 통해 송신되는 컴퓨터 네트워크로서 구현될 수 있다. 상세한 설명은 상기에 식별된 분야에서의 이용의 비용, 수익성, 성능, 효율성 및 유틸리티에서의 개선들을 가능하게 하는 본 발명의 하나 또는 둘 이상의 실시예들의 설명을 제공한다. 상세한 설명은 상세한 설명의 나머지의 이해를 용이하게 하기 위한 도입을 포함한다. 도입은 본원에 설명된 개념들에 따른 시스템들, 방법들, 제조 물건들 및 컴퓨터 판독가능한 매체들 중 하나 또는 둘 이상의 예시적인 실시예들을 포함한다. 결론들에서 더 상세하게 논의되는 바와 같이, 본 발명은 발행된 청구범위의 범위 내에서 모든 가능한 수정들 및 변형들을 망라한다.
도 1a는 비-휘발성 메모리들(NVMs)을 액세스하고 제어하기 위한 독립적 실리콘 엘리먼트들을 갖는 동적 상위-레벨 리던던시(redundancy) 모드 관리를 이용하는 SSD 제어기를 포함하는 고체-상태 디스크(Solid-State Disk: SSD)의 일 실시예의 선택된 상세들을 도시한다.
도 1b는 도 1a의 SSD의 하나 또는 둘 이상의 경우들을 포함하는 시스템들의 다양한 실시예들의 선택된 상세들을 도시한다.
도 2는 논리적 블록 어드레스(LBA)의 논리적 페이지 번호(LPN) 부분을 매핑하는 실시예의 선택된 상세들을 도시한다.
도 3은 집합적으로 판독 유닛들의 양자들로 측정된 길이를 갖는 다양한 판독 유닛들로서 조직된 판독 데이터를 생성하기 위해 판독 유닛 어드레스에서 비-휘발성 메모리(Non-Volatile Memory: NVM)를 액세스하는 실시예의 선택된 상세들을 도시한다.
도 4a는 판독 유닛의 실시예의 선택된 상세들을 도시한다.
도 4b는 판독 유닛의 다른 실시예의 선택된 상세들을 도시한다.
도 5는 다수의 필드들을 갖는 헤더의 실시예의 선택된 상세들을 도시한다.
도 6은 다수의 NVM 디바이스들의 블록들, 페이지들 및 판독 유닛들의 실시예의 선택된 상세들을 도시한다.
도 7a는 상위-레벨 리던던시 기술들의 다양한 실시예들의 선택된 상세들을 도시한다.
도 7b는 R-블록들의 실시예의 선택된 상세들을 도시한다.
도 8은 실리콘 독립 엘리먼트들의 리던던트 어레이(Redundant Array of Silicon Independent Elements)를 갖는 동적 상위-레벨 리던던시 모드 관리의 실시예의 선택된 상세들을 도시한다.
도 9는 판독 유닛들의 하나 또는 둘 이상에 저장된 상위-레벨 리던던시 정보에 의해 보호된 적응형 코드 레이트들의 하위-레벨 리던던시 정보를 갖는 판독 유닛들의 실시예를 도시한다.
도 10은 상위-레벨 리던던시 정보 결과 및 데이터 소스 관련성들의 실시예의 선택된 상세들을 도시한다.
도 11은 상위-레벨 리던던시 정보 계산들의 실시예의 선택된 상세들을 도시한다.
도 12는 (단일 연산 동안) 하나의 (하위-레벨) 실패로부터의 복구의 실시예의 선택된 상세들을 도시한다.
도 13a-13d는 (단일 연산 동안) 2개의 (하위-레벨) 실패들로부터의 복구의 실시예의 선택된 상세들을 도시한다.
도 14a 및 14b는 NVM들로부터 수신된 페이지들에 관한 상위-레벨 리던던시 정보를 계산하는 실시예의 선택된 상세들을 도시한다.
도 15a-15c는 NVM들에 제공된 기록에 관한 상위-레벨 리던던시 정보의 계산을 백 아웃하는(backing out) 실시예의 선택된 상세들을 도시한다.
도면들에서의 참조 심볼들의 목록
[0023]
도 1b는 도 1a의 SSD의 하나 또는 둘 이상의 경우들을 포함하는 시스템들의 다양한 실시예들의 선택된 상세들을 도시한다.
도 2는 논리적 블록 어드레스(LBA)의 논리적 페이지 번호(LPN) 부분을 매핑하는 실시예의 선택된 상세들을 도시한다.
도 3은 집합적으로 판독 유닛들의 양자들로 측정된 길이를 갖는 다양한 판독 유닛들로서 조직된 판독 데이터를 생성하기 위해 판독 유닛 어드레스에서 비-휘발성 메모리(Non-Volatile Memory: NVM)를 액세스하는 실시예의 선택된 상세들을 도시한다.
도 4a는 판독 유닛의 실시예의 선택된 상세들을 도시한다.
도 4b는 판독 유닛의 다른 실시예의 선택된 상세들을 도시한다.
도 5는 다수의 필드들을 갖는 헤더의 실시예의 선택된 상세들을 도시한다.
도 6은 다수의 NVM 디바이스들의 블록들, 페이지들 및 판독 유닛들의 실시예의 선택된 상세들을 도시한다.
도 7a는 상위-레벨 리던던시 기술들의 다양한 실시예들의 선택된 상세들을 도시한다.
도 7b는 R-블록들의 실시예의 선택된 상세들을 도시한다.
도 8은 실리콘 독립 엘리먼트들의 리던던트 어레이(Redundant Array of Silicon Independent Elements)를 갖는 동적 상위-레벨 리던던시 모드 관리의 실시예의 선택된 상세들을 도시한다.
도 9는 판독 유닛들의 하나 또는 둘 이상에 저장된 상위-레벨 리던던시 정보에 의해 보호된 적응형 코드 레이트들의 하위-레벨 리던던시 정보를 갖는 판독 유닛들의 실시예를 도시한다.
도 10은 상위-레벨 리던던시 정보 결과 및 데이터 소스 관련성들의 실시예의 선택된 상세들을 도시한다.
도 11은 상위-레벨 리던던시 정보 계산들의 실시예의 선택된 상세들을 도시한다.
도 12는 (단일 연산 동안) 하나의 (하위-레벨) 실패로부터의 복구의 실시예의 선택된 상세들을 도시한다.
도 13a-13d는 (단일 연산 동안) 2개의 (하위-레벨) 실패들로부터의 복구의 실시예의 선택된 상세들을 도시한다.
도 14a 및 14b는 NVM들로부터 수신된 페이지들에 관한 상위-레벨 리던던시 정보를 계산하는 실시예의 선택된 상세들을 도시한다.
도 15a-15c는 NVM들에 제공된 기록에 관한 상위-레벨 리던던시 정보의 계산을 백 아웃하는(backing out) 실시예의 선택된 상세들을 도시한다.
도면들에서의 참조 심볼들의 목록
[0023]
[0024] 본 발명의 하나 또는 둘 이상의 실시예들의 상세한 설명이 본 발명의 선택된 상세들을 도시하는 첨부 도면들과 함께 이하에 제공된다. 본 발명은 실시예들과 관련하여 설명된다. 본원에서의 실시예들은 단지 예시적인 것으로 이해되며, 본 발명은 본원의 실시예들 중 임의의 것 또는 전부에 또는 그에 의해 분명하게 제한되지 않으며, 본 발명은 수많은 대안들, 수정들 및 등가물들을 망라한다. 설명의 단조로움을 회피하기 위해, 다양한 낱말 라벨들(첫 번째, 최종, 특정한, 다양한, 더, 다른, 특별한, 선택, 일부 및 두드러진)이 실시예들의 별개 세트들에 적용될 수 있다; 본원에 이용된 바와 같은 그와 같은 라벨들은 품질 또는 임의의 형태의 선호도 또는 선입견을 전달하는 것을 분명하게 의미하는 것이 아니라 단지 편의적으로 별개의 세트들 사이를 구별하는 것이다. 개시된 프로세스들의 일부 동작들의 순서는 본 발명의 범위 내에서 변경가능하다. 다수의 실시예들이 프로세스, 방법 및/또는 프로그램 명령 특징들에서의 변형들을 설명하도록 작용하는 곳마다, 미리 결정된 또는 동적으로 결정된 기준에 따라 복수의 다수 실시예들에 각각 대응하는 복수의 동작 모드들 중 하나의 정적 및/또는 동적 선택을 수행하는 다른 실시예들이 고려된다. 본 발명의 완전한 이해를 제공하기 위해 다음의 설명에서 수많은 특정 상세들이 설명된다. 상세들은 예시의 목적들을 위해 제공되며 본 발명은 상세들 중 일부 또는 전부 없이도 청구범위에 따라 실시될 수 있다. 명확성의 목적들을 위해, 본 발명에 관련된 기술 분야들에 알려지는 기술적 자료는 본 발명이 불필요하게 모호해지지 않도록 상세하게 설명되지 않는다.
도입
[0025] 본 도입은 상세한 설명의 더 빠른 이해를 용이하게 하기 위해서만 포함된다; 임의의 도입의 단락들이 반드시 전체 주제의 요약된 관점이며 소모적이거나 제한적인 설명임을 의미하지 않으므로, 본 발명은 (만약 있다면, 명시적 예들을 포함하는) 도입에 제시된 개념들로 제한되지 않는다. 예를 들어, 후속하는 도입은 공간 및 조직에 의해 특정 실시예들에만 제한되는 개관 정보를 제공한다. 명세서의 균형 전반에 논의된, 궁극적으로 그려지는 청구범위를 포함하는 많은 다른 실시예들이 존재한다.
약어들
[0026] 본원에 정의된 다양한 약칭의 축약들(예를 들어, 약어들)은 본원에 이용된 특정 엘리먼트들을 지칭한다.
[0027] NAND 플래시 메모리는 정보를 저장하기 위해 플로팅(floating) 게이트 트랜지스터들의 어레이를 이용한다. SLC 기술에서, 정보의 1 비트를 저장하기 위해 각 비트 셀(예를 들어, 플로팅 게이트 트랜지스터)이 인에이블된다. MLC 기술에서, 정보의 다수의 비트들을 저장하기 위해 각 비트 셀이 인에이블된다. 제조 기술(예를 들어, CMOS 기술)이 스케일 다운됨에 따라, 각 플로팅 게이트는 더 적은 전자들을 저장한다. 또한, 저장 용량 및 밀도가 증가함에 따라, 각 비트 셀은 더 많은 비트들을 저장한다. 따라서, 비트 셀들에 저장된 값들은 더 작은 전압 범위들로 표현된다. 시간을 통해 저장된 전자들의 양의 변화들 및/또는 센싱의 불확실성들은 데이터가 올바르지 않게 저장되는 또는 판독될 확률을 증가시킨다. (예를 들어, 하위-레벨에서의) 하나 또는 둘 이상의 리던던시 및/또는 ECC 기술들의 이용은 NAND 플래시 메모리로부터 그렇지 않으면 손상되는 데이터의 올바른 검색을 가능하게 하여, 일부 사용 시나리오들에서 상술한 어려움들 중 일부를 극복한다.
[0028] 일부 타입들의 SSD들은 비-휘발성 저장을 제공하기 위해 플래시 메모리를 이용한다(예를 들어, 플래시 메모리는 전력의 적용 없이 정보를 유지한다). (예를 들어, 상위-레벨에서의) 하나 또는 둘 이상의 ECC 및/또는 리던던시 기술들의 이용은 플래시 메모리로부터 그렇지 않으면 손상되는 데이터의 올바른 검색을 가능하게 하며, 및/또는 하나 또는 둘 이상의 플래시 메모리 엘리먼트들이 간헐적으로 또는 영구적으로 실패할 때조차 SSD의 적절한 시스템-레벨 동작을 가능하게 한다.
[0029] 예를 들어, SSD 제어기는 제어기에 의해 부분적으로 구현되는 SSD의 동작 동안 하나 또는 둘 이상의 NVM(예를 들어, 플래시) 엘리먼트들이 실패함에 따라 우아한 성능저하를 제공하기 위해 독립적 실리콘 엘리먼트들로 동적 상위-레벨 리던던시 모드 관리를 가능하게 한다. NVM의 일부분이 판독된다. (하나 또는 둘 이상의 ECC 기술들에 따르는 것과 같이) 하위-레벨 리던던시 및/또는 에러 정정을 이용하여 정정가능하지 않은 에러가 발생하는 경우에, (하나 또는 둘 이상의 RASIE 기술들 및/또는 동적 상위-레벨 리던던시 모드 관리 기술들에 따르는 것과 같은) 상위-레벨 에러 정정이 그 에러를 정정하려 시도하기 위해 이용된다. NVM 엘리먼트들 중 하나의 실패가 하위-레벨 및/또는 상위-레벨 에러 정정, 및/또는 (NVM 엘리먼트들 중 하나 또는 둘 이상에 의해 보고된 실패 상태와 같은) 다른 기술들에 의해 검출되는 경우에, 상위-레벨 에러 정정은 현재 모드에서의 동작으로부터 새로운 모드에서의 동작으로 동적으로 천이된다. 천이는 SSD 상에 이용가능한 자유 공간을 감소시키는 것, SSD의 데이터 저장을 재배열하는 것, (가능한 경우에) 실패된 사용자 데이터를 복구/저장하는 것, 및 수정된 상위-레벨 에러 정정 정보를 결정/저장하는 것 중 하나 또는 둘 이상을 포함한다. 동작은 그 후에 새로운 모드에서 계속한다. NVM 엘리먼트들 중 다른 하나의 다른 실패가 이제 새로운 모드에서 동작하는 상위-레벨 에러 정정으로 검출되는 경우에, 다른 상위-레벨 에러 정정 모드로의 다른 천이가 이루어진다. NVM을 기록하는 것은 상위-레벨 에러 정정 동작 모드에 따라 상위-레벨 에러 정정 정보 및 기록 데이터를 결정하는 것/저장하는 것을 포함하는, 상위-레벨 에러 정정 동작 모드에 따라 이루어진다.
[0030] 상위-레벨 에러 정정 정보를 결정하는 것/저장하는 것은 일부 실시예들 및/또는 사용 시나리오들에서, 상위-레벨 리던던시 정보의 계산에 따라 이루어진다. 상위-레벨 리던던시 정보 계산은 제어기에 의해 부분적으로 구현되는 SSD의 동작 동안 비-휘발성(예를 들어, 플래시) 메모리 엘리먼트들의 실패들의 맥락에서 신뢰성있는 동작을 유지하기 위해 SSD 제어기가 상위-레벨 리던던시 능력들을 제공하게 할 수 있다. 상위-레벨 리던던시 정보의 제 1 부분은 상위-레벨 리던던시 정보에 의해 보호되는 데이터(예를 들어, 스트라이프)의 일부분에서 전체 페이지들의 XOR을 통한 패리티 코딩을 이용하여 계산된다. 상위-레벨 리던던시 정보의 제 2 부분은 가중된-합 기술을 이용하여 계산되며, 그 일부분에서의 각 페이지는 가중된-합을 계산할 때 가중치로서 고유한 비-제로 "인덱스"를 할당받는다. (갈르와 필드(Galois Field), 또는 p가 소수(prime)인 정수 계수 p와 같은) 유한 필드(finite field)를 통해 산술연산이 수행된다.
[0031] 상위-레벨 리던던시 정보의 일부분들은 NVM 엘리먼트들 상에 수행되는 하나 또는 둘 이상의 판독 동작들의 완료의 순서에 의해 결정되는 순서와 같은, 또는 다양한 실시예들에서, 감소된 또는 제거된 버퍼링을 가능하게 하는, NVM 엘리먼트들로부터 이용가능한 및/또는 리턴된 데이터의 순서에 기초한 순서와 같은 임의의 순서로 계산가능하다. 다양한 실시예들에서, 임의의 순서 계산 능력은 비교적 순간의 및/또는 중간 버퍼링 및/또는 상태를 이용하여 기록을 백 아웃하는 것 및/또는 복구 데이터 값들을 계산하는 것을 가능하게 한다. 상위-레벨 리던던시 정보의 일부분들은 이용가능한 전용 하드웨어 엘리먼트들에 의해 결정된 바와 같은 임의의 정도의 유사성으로 계산가능하며, 이는 다양한 실시예들에서, 감소된 지연 프로세싱 및/또는 감소된 메모리(예를 들어, NVM) 대역폭 사용을 가능하게 한다.
[0032] 일부 실시예들에서, SSD와 같은 I/O 디바이스는 SSD 제어기를 포함한다. SSD 제어기는 SSD의 NVM과 호스트 인터페이스 사이의 브리지로서 동작하며 SSD의 호스트 인터페이스를 통해 컴퓨팅 호스트로부터 송신된 호스트 프로토콜의 커맨드들을 실행한다. 커맨드들 중 적어도 일부는 컴퓨팅 호스트로부터 그리고 컴퓨팅 호스트에 각각 송신된 데이터로 NVM을 기록하고 판독하도록 SSD에 지시한다. 추가적인 실시예들에서, SSD 제어기는 NVM에서의 물리적 저장 어드레스들과 호스트 프로토콜의 LBA들 사이를 변환하기 위해 맵을 이용하도록 가능해진다. 추가적인 실시예들에서, 맵의 적어도 일부분은 (컴퓨팅 호스트에 보이지 않는) I/O 디바이스의 사설 저장을 위해 이용된다. 예를 들어, 컴퓨팅 호스트에 의해 액세스가능하지 않은 LBA들의 일부분은 로그들, 통계들 또는 다른 사설 데이터로의 액세스를 관리하기 위해 I/O 디바이스에 의해 이용된다.
[0033] 일부 실시예들에서, NVM에서의 변화하는-크기의 양자들의 압축된 데이터를 액세싱하는 것은 일부 사용 시나리오들에서 개선된 저장 효율을 제공한다. 예를 들어, SSD 제어기는 (예를 들어, 디스크 기록 커맨드에 관련하는) 컴퓨팅 호스트로부터 (압축해제된) 데이터를 수신하고, 데이터를 압축하며, 압축된 데이터를 플래시 메모리에 저장한다. (예를 들어, 디스크 판독 커맨드에 관련하는) 컴퓨팅 호스트로부터의 후속하는 요청에 응답하여, SSD 제어기는 플래시 메모리로부터 압축된 데이터를 판독하며, 압축된 데이터를 압축해제하며, 압축해제된 데이터를 컴퓨팅 호스트에 제공한다. 압축된 데이터는 변화하는-크기의 양자들에 따라 플래시 메모리에 저장되며, 양자들 크기는 예를 들어, 다양한 데이터에 관한 압축 효율성, 동작 모드 및 압축 알고리즘으로 인해 변화한다. SSD 제어기는 헤더(들)가 플래시 메모리에서의 어디에 저장되는지를 결정하기 위해 포함된 맵 테이블을 살핌으로써 부분적으로 데이터를 압축해제한다. SSD 제어기는 적절한(압축된) 데이터가 플래시 메모리에 저장되는지를 결정하기 위해 플래시 메모리로부터 획득된 헤더(들)를 파싱(parse)한다. SSD 제어기는 컴퓨팅 호스트에 제공하기 위해 압축해제된 데이터를 생성하도록 플래시 메모리로부터 적절한 데이터를 압축해제한다. 즉시 출원에서, 압축해제(uncompress)(및 그의 변형들)는 압축풀기(decompress)(및 그의 변형들)와 유사어이다.
[0034] 다양한 실시예들에서, SSD 제어기는 컴퓨팅 호스트와 인터페이스하기 위한 호스트 인터페이스, 플래시 메모리와 같은 NVM과 인터페이스하기 위한 인터페이스, 및 인터페이스들을 제어하고 압축 및 압축해제뿐 아니라, 하위-레벨 에러 정정, 상위-레벨 에러 정정 및 독립적 실리콘 엘리먼트들로의 동적 상위-레벨 리던던시 모드 관리를 수행하기 위한(및/또는 그 수행의 다양한 양상들을 제어하기 위한) 회로를 포함한다.
[0035] 다양한 실시예들에 따르면, 일부 호스트 인터페이스들은 USB 인터페이스 표준, CF 인터페이스 표준, MMC 인터페이스 표준, eMMC 인터페이스 표준, 전폭기(Thunderbolt) 인터페이스 표준, UFS 인터페이스 표준, SD 인터페이스 표준, 메모리 스틱 인터페이스 표준, xD-화상 카드 인터페이스 표준, IDE 인터페이스 표준, SATA 인터페이스 표준, SCSI 인터페이스 표준, SAS 인터페이스 표준 및 PCIe 인터페이스 표준 중 하나 또는 둘 이상과 호환가능하다. 다양한 실시예들에 따르면, 컴퓨팅 호스트는 컴퓨터, 워크스테이션 컴퓨터, 서버 컴퓨터, 저장 서버, SAN, NAS 디바이스, DAS 디바이스, 저장 기기, PC, 랩톱 컴퓨터, 노트북 컴퓨터, 넷북 컴퓨터, 태블릿 디바이스 또는 컴퓨터, 울트라북 컴퓨터, (e-리더와 같은) 전자 판독 디바이스, PDA, 네비게이션 시스템, (휴대용) GPS 디바이스, 자동차 제어 시스템, 자동차 매체 제어 시스템 또는 컴퓨터, 프린터, 복사기 또는 팩스 머신 또는 일체형 디바이스, POS 디바이스, 금전-등록기, 매체 플레이어, 텔레비전, 매체 리코더, DVR, 디지털 카메라, 셀룰러 핸드셋, 코드리스 전화 핸드셋 및 전자 게임의 전부 또는 임의의 부분들이다. 일부 실시예들에서, (SAS/SATA 브리지와 같은) 인터페이싱 호스트는 컴퓨팅 호스트 및/또는 컴퓨팅 호스트에 대한 브리지로서 동작한다.
[0036] 다양한 실시예들에서, SSD 제어기는 하나 또는 둘 이상의 프로세서들을 포함한다. 프로세서들은 SSD 제어기의 동작을 제어 및/또는 수행하기 위해 펌웨어를 실행한다. SSD 제어기는 커맨드들 및/또는 상태뿐 아니라 데이터를 송신하고 수신하기 위해 컴퓨팅 호스트와 통신한다. 컴퓨팅 호스트는 운영 시스템, 드라이버 및 애플리케이션 중 하나 또는 둘 이상을 실행한다. SSD 제어기와의 컴퓨팅 호스트에 의한 통신은 드라이버 및/또는 애플리케이션을 통해 임의선택적으로 및/또는 선택적으로 이루어진다. 제 1 예에서, SSD 제어기에 대한 모든 통신은 드라이버를 통해 이루어지며, 애플리케이션은 드라이버가 SSD 제어기에 대한 특정 커맨드들로 변환하는 상위-레벨 커맨드들을 드라이버에 제공한다. 제 2 예에서, 드라이버는 바이패스 모드를 구현하며 애플리케이션은 드라이버를 통해 SSD 제어기에 특정 커맨드들을 송신하도록 가능해진다. 제 3 예에서, PCIe SSD 제어기는 하나 또는 둘 이상의 가상 기능들(VFs)을 지원하며, 일단 구성되면, 애플리케이션은 드라이버를 바이패싱하면서 SSD 제어기와 직접 통신할 수 있게 된다.
[0037] 다양한 실시예들에 따르면, 일부 SSD들은 HDD들, CD 드라이브들 및 DVD 드라이브들과 같은 자기 및/또는 광학 비-휘발성 저장장치에 의해 이용되는 형태-팩터들, 전기적 인터페이스들 및/또는 프로토콜들과 호환가능하다. 다양한 실시예들에서, SSD들은 제로 또는 그 이상의 패리티 코드들, 제로 또는 그 이상의 RS 코드들, 제로 또는 그 이상의 BCH 코드들, 제로 또는 그 이상의 비터비 또는 다른 트렐리스 코드들 및 제로 또는 그 이상의 LDPC 코드들의 다양한 조합들을 이용한다.
예시적인 실시예들
[0038] 상세한 설명에 대한 도입부를 끝내며, 후속하는 것은 본원에 설명된 개념들에 따른 다양한 실시예 타입들의 추가적인 설명을 제공하면서, "EC들"(예시적인 조합들)로서 명시적으로 열거된 적어도 일부를 포함하는 예시적인 실시예들을 수집한 것이다; 이들 예들은 상호 배타적이거나, 소모적이거나 제한적인 것으로 의미되지 않는다; 그리고 본 발명은 이들 예시적인 실시예들로 제한되는 것이 아니라 오히려 발행된 청구범위의 범위 내의 모든 가능한 수정들 및 변형들을 망라한다.
[0039] EC 1) 데이터 저장 정보의 복수의 유닛들에 적어도 부분적으로 기초하여 상위-레벨 리던던시 정보의 하나 또는 둘 이상의 유닛들을 계산하기 위한 수단을 포함하는 시스템으로서,
상기 계산하기 위한 수단은 상위-레벨 리던던시 정보의 유닛들 중 적어도 일부분으로서 데이터 저장 정보의 유닛들의 컨텐츠에 의해 곱해진 데이터 저장 정보의 유닛들 각각에 대한 각각의 비-제로 고유 상수 값의 가중된 합을 누적하기 위한 수단을 포함한다.
[0040] EC2) EC1의 시스템은, 하나 또는 둘 이상의 비-휘발성 메모리 디바이스들의 일부분들에서 데이터 저장 정보의 유닛들 및 상위-레벨 리던던시 정보의 유닛들을 저장하기 위한 수단을 더 포함한다.
[0041] EC3) EC2의 시스템에서, 상기 일부분들은 비-휘발성 메모리 디바이스들의 페이지들의 하나 또는 둘 이상의 진정수들(integral numbers)을 포함하며, 상기 비-휘발성 메모리 디바이스들은 하나 또는 둘 이상의 플래시 메모리들을 포함한다.
[0042] EC4) EC1의 시스템에서, 상기 유닛들은 하나 또는 둘 이상의 플래시 메모리들의 페이지들의 하나 또는 둘 이상의 진정수들에 대응한다.
[0043] EC5) EC1의 시스템에서, 상위-레벨 리던던시 정보의 유닛들은 데이터 저장 정보의 유닛들의 대응하는 바이트들의 발생기 다항식에 의한 다항식 나눗셈의 나머지로서 계산가능하지 않다.
[0044] EC6) EC1의 시스템에서, 누적을 위한 수단은 점진적으로 가중된 합의 적어도 일부분을 누적하도록 가능해진다.
[0045] EC7) EC6의 시스템에서, 누적을 위한 수단은 데이터 저장 정보의 유닛들 중 2개 이상을 병렬로 프로세스하도록 더 가능해진다.
[0046] EC8) EC7의 시스템에서, 2개 이상의 유닛들은 하나 또는 둘 이상의 플래시 메모리들의 페이지들의 하나 또는 둘 이상의 진정수들에 대응한다.
[0047] EC9) EC1의 시스템에서, 누적하기 위한 수단은 하나 또는 둘 이상의 플래시 메모리들에 의한 판독 동작 완료의 순서에 대응하는 순서로 가중된 합의 적어도 일부분을 누적하도록 가능해진다.
[0048] EC10) EC1의 시스템에서, 누적하기 위한 수단은 하나 또는 둘 이상의 플래시 메모리들로부터 리턴된 데이터의 순서에 대응하는 순서로 가중된 합의 적어도 일부분을 누적하도록 가능해진다.
[0049] ECl1) EC10의 시스템에서, 리턴된 데이터의 순서는 데이터가 하나 또는 둘 이상의 플래시 메모리들로부터 이용가능한 순서에 적어도 부분적으로 기초한다.
[0050] EC12) EC1의 시스템에서, 누적하기 위한 수단은 가중된 합의 적어도 일부분을 병렬로 누적하도록 가능해진다.
[0051] EC13) EC1의 시스템에서, 누적하기 위한 수단은 가중된 합의 적어도 일부분을 병렬로 누적하도록 가능해지며, 그 일부분은 하나 또는 둘 이상의 플래시 메모리들의 대응하는 페이지들로부터 리트리브가능한(retrievable) 데이터 저장 정보의 유닛들의 엘리먼트들에 대응한다.
[0052] EC14) EC13의 시스템에서, 엘리먼트들은 대응하는 페이지들의 판독 동작들의 완료의 순서에 의해, 적어도 부분적으로 결정된다.
[0053] EC15) EC2의 시스템은 그 일부분들 중 하나 또는 둘 이상이 판독될 때 하위-레벨 에러 정정 실패를 갖는지 여부를 결정하기 위한 수단을 더 포함한다.
[0054] EC16) EC2의 시스템은 그 일부분들 중 하나 또는 둘 이상을 판독하기 위한 수단을 더 포함한다.
[0055] EC17) EC1의 시스템에서, 가중된 합을 누적하기 위한 수단은 데이터 저장 정보의 유닛들 중 2개까지 가중된 합으로부터 선택적으로 배제하도록 가능해진다.
[0056] EC18) EC17의 시스템은 데이터 저장 정보의 배제된 유닛들을 복원하기 위해 누적하기 위한 수단의 결과들을 프로세싱하기 위한 수단을 더 포함한다.
[0057] EC19) EC17의 시스템에서, 누적하기 위한 수단은 점진적으로 그리고 하나 또는 둘 이상의 비-휘발성 메모리 디바이스들에 의한 판독 동작 완료의 순서에 대응하는 순서로 가중된 합의 적어도 일부분을 누적하도록 가능해진다.
[0058] EC20) EC17의 시스템에서, 누적하기 위한 수단은 점진적으로 그리고 하나 또는 둘 이상의 비-휘발성 메모리 디바이스들로부터 리턴된 데이터의 순서에 대응하는 순서로 가중된 합의 적어도 일부분을 누적하도록 가능해진다.
[0059] EC21) EC20의 시스템에서, 리턴된 데이터의 순서는 데이터가 하나 또는 둘 이상의 비-휘발성 메모리 디바이스들로부터 이용가능한 순서에 적어도 부분적으로 기초한다.
[0060] EC22) EC1의 시스템에서, 상위-레벨 리던던시 정보의 유닛들 및 데이터 저장 정보의 유닛들은 하나 또는 둘 이상의 플래시 메모리들의 각각의 페이지들에 대응한다.
[0061] EC23) EC22의 시스템에서, 플래시 메모리들은 복수의 다이들을 포함하며, 각 페이지들의 각각은 고유한 하나의 다이 상에 있다.
[0062] EC24) EC1의 시스템은 컴퓨팅 호스트로부터의 요청들에 응답하여 적어도 부분적으로 하나 또는 둘 이상의 플래시 메모리들의 일부분들에 데이터 저장 정보의 유닛들 및 상위-레벨 리던던시 정보의 유닛들을 저장하기 위한 수단을 더 포함한다.
[0063] EC25) EC24의 시스템은 컴퓨팅 호스트와 요청들을 인터페이스하기 위한 수단을 더 포함한다.
[0064] EC26) EC25의 시스템에서, 컴퓨팅 호스트와 요청들을 인터페이스하기 위한 수단은 저장 인터페이스 표준과 호환가능하다.
[0065] EC27) EC24의 시스템에서, 저장하기 위한 수단은 플래시 메모리들과 인터페이싱하기 위한 수단을 포함한다.
[0066] EC28) EC27의 시스템에서, 플래시 메모리들과 인터페이싱하기 위한 수단은 플래시 메모리 인터페이스를 포함한다.
[0067] EC29) EC24의 시스템은 컴퓨팅 호스트와 요청들을 인터페이싱하기 위한 수단을 더 포함하며; 및
상기 저장하기 위한 수단은 플래시 메모리들과 인터페이싱하기 위한 수단을 포함한다.
[0068] EC30) EC29의 시스템에서, 수단은 단일 집적된 회로(IC)에 집합적으로 구현된다.
[0069] EC31) EC29의 시스템에서, 수단은 고체-상태 디스크(SSD)에 포함된다.
[0070] EC32) EC24의 시스템은 컴퓨팅 호스트의 전부 또는 임의의 부분들을 더 포함한다.
[0071] EC33) EC3의 시스템은 플래시 메모리들 중 적어도 하나를 더 포함한다.
[0072] EC34) 데이터 저장 정보의 복수의 유닛들 상에 적어도 부분적으로 기초하여 상위-레벨 리던던시 정보의 하나 또는 둘 이상의 유닛들을 계산하는 단계를 포함하는 방법으로서,
계산하는 단계는 상위-레벨 리던던시 정보의 유닛들의 적어도 일부분으로서 데이터 저장 정보의 유닛들의 컨텐츠에 의해 곱해진 데이터 저장 정보의 유닛들의 각각에 대한 각각의 비-제로 고유 상수 값의 가중된 합을 누적하는 단계를 포함한다.
[0073] EC35) EC34의 방법은 하나 또는 둘 이상의 비-휘발성 메모리 디바이스들의 일부분들에 데이터 저장 정보의 유닛들 및 상위-레벨 리던던시 정보의 유닛들을 저장하는 단계를 더 포함한다.
[0074] EC36) EC35의 방법에서, 일부분들은 비-휘발성 메모리 디바이스들의 페이지들의 하나 또는 둘 이상의 진정수들을 포함하며, 상기 비-휘발성 메모리 디바이스들은 하나 또는 둘 이상의 플래시 메모리들을 포함한다.
[0075] EC37) EC34의 방법에서, 유닛들은 하나 또는 둘 이상의 플래시 메모리들의 페이지들의 하나 또는 둘 이상의 진정수들에 대응한다.
[0076] EC38) EC34의 방법에서, 상위-레벨 리던던시 정보의 유닛들은 데이터 저장 정보의 유닛들의 대응하는 바이트들의 발생기 다항식에 의한 다항식 나눗셈의 나머지로서 계산가능하지 않다.
[0077] EC39) EC34의 방법에서, 누적하는 단계는 점진적으로 가중된 합의 적어도 일부분을 누적하는 단계를 포함한다.
[0078] EC40) EC39의 방법에서, 누적하는 단계는 데이터 저장 정보의 유닛들 중 2개 이상을 병렬로 프로세싱하는 단계를 더 포함한다.
[0079] EC41) EC40의 방법에서, 2개 이상의 유닛들은 하나 또는 둘 이상의 플래시 메모리들의 페이지들의 하나 또는 둘 이상의 진정수들에 대응한다.
[0080] EC42) EC34의 방법에서, 누적하는 단계는 하나 또는 둘 이상의 플래시 메모리들에 의한 판독 동작 완료의 순서에 대응하는 순서로 가중된 합의 적어도 일부분을 누적하는 단계를 포함한다.
[0081] EC43) EC34의 방법에서, 누적하는 단계는 하나 또는 둘 이상의 플래시 메모리들로부터 리턴된 데이터의 순서에 대응하는 순서로 가중된 합의 적어도 일부분을 누적하는 단계를 포함한다.
[0082] EC44) EC43의 방법에서, 리턴된 데이터의 순서는 데이터가 하나 또는 둘 이상의 플래시 메모리들로부터 이용가능한 순서에 적어도 부분적으로 기초한다.
[0083] EC45) EC34의 방법에서, 누적하는 단계는 가중된 합의 적어도 일부분을 병렬로 누적하는 단계를 포함한다.
[0084] EC46) EC34의 방법에서, 상기 누적하는 단계는 가중된 합의 적어도 일부분을 병렬로 누적하는 단계를 포함하며, 그 일부분은 하나 또는 둘 이상의 플래시 메모리들의 대응하는 페이지들로부터 리트리브가능한 데이터 저장 정보의 유닛들의 엘리먼트들에 대응한다.
[0085] EC47) EC46의 방법에서, 엘리먼트들은 대응하는 페이지들의 판독 동작들의 완료의 순서에 의해, 적어도 부분적으로 결정된다.
[0086] EC48) EC35의 방법은 그 일부분들 중 하나 또는 둘 이상이 판독될 때 하위-레벨 에러 정정 실패를 갖는지 여부를 결정하는 단계를 더 포함한다.
[0087] EC49) EC35의 방법은 그 일부분들 중 하나 또는 둘 이상을 판독하는 단계를 더 포함한다.
[0088] EC50) EC34의 방법에서, 가중된 합을 누적하는 단계는 데이터 저장 정보의 유닛들 중 2개까지 가중된 합으로부터 선택적으로 배제한다.
[0089] EC51) EC50의 방법은 데이터 저장 정보의 배제된 유닛들을 복원하기 위해 누적하는 단계의 결과들을 프로세싱하는 단계를 더 포함한다.
[0090] EC52) EC50의 방법에서, 누적하는 단계는 점진적으로 그리고 하나 또는 둘 이상의 비-휘발성 메모리 디바이스들에 의한 판독 동작 완료의 순서에 대응하는 순서로 가중된 합의 적어도 일부분을 누적하는 단계를 포함한다.
[0091] EC53) EC50의 방법에서, 누적하는 단계는 점진적으로 그리고 하나 또는 둘 이상의 비-휘발성 메모리 디바이스들로부터 리턴된 데이터의 순서에 대응하는 순서로 가중된 합의 적어도 일부분을 누적하는 단계를 포함한다.
[0092] EC54) EC53의 방법에서, 리턴된 데이터의 순서는 데이터가 하나 또는 둘 이상의 비-휘발성 메모리 디바이스들로부터 이용가능한 순서에 적어도 부분적으로 기초한다.
[0093] EC55) EC34의 방법에서, 상위-레벨 리던던시 정보의 유닛들 및 데이터 저장 정보의 유닛들은 하나 또는 둘 이상의 플래시 메모리들의 각각의 페이지들에 대응한다.
[0094] EC56) EC55의 방법에서, 플래시 메모리들은 복수의 다이들을 포함하며, 각 페이지들의 각각은 고유한 하나의 다이 상에 있다.
[0095] EC57) EC34의 방법은 컴퓨팅 호스트로부터의 요청들에 응답하여 적어도 부분적으로 하나 또는 둘 이상의 플래시 메모리들의 일부분들에서 데이터 저장 정보의 유닛들 및 상위-레벨 리던던시 정보의 유닛들을 저장하는 단계를 더 포함한다.
[0096] EC58) EC57의 방법은 컴퓨팅 호스트와 요청들을 인터페이스하는 단계를 더 포함한다.
[0097] EC59) EC58의 방법에서, 컴퓨팅 호스트와 요청들을 인터페이스하는 단계는 저장 인터페이스 표준과 호환가능하다.
[0098] EC60) EC57의 방법에서, 저장하는 단계는 플래시 메모리들과 인터페이싱하는 단계를 포함한다.
[0099] EC61) EC60의 방법에서, 플래시 메모리들과 인터페이스하는 단계는 플래시 메모리 인터페이스를 포함한다.
[0100] EC62) EC57의 방법은 컴퓨팅 호스트 인터페이스 로직 회로를 통해 적어도 부분적으로 컴퓨팅 호스트와 요청들을 인터페이싱하는 단계를 더 포함하며; 및
저장하는 단계는 플래시 메모리들과 인터페이스하도록 가능한 플래시 메모리 인터페이스 로직 회로를 통해 적어도 부분적으로 이루어진다.
[0101] EC63) EC62의 방법에서, 컴퓨팅 호스트 인터페이스 로직 회로 및 플래시 메모리 인터페이스 로직 회로는 단일 집적된 회로(IC)에 집합적으로 구현된다.
[0102] EC64) EC62의 방법에서, 컴퓨팅 호스트 인터페이스 로직 회로 및 플래시 메모리 인터페이스 로직 회로는 고체-상태 디스크(SSD)에 포함된다.
[0103] EC65) EC57의 방법은 컴퓨팅 호스트의 전부 또는 임의의 부분들을 동작하는 단계를 더 포함한다.
[0104] EC66) EC36의 방법은 플래시 메모리들 중 적어도 하나를 동작하는 단계를 더 포함한다.
[0105] EC67) 데이터 저장 정보의 복수의 유닛들 상에 적어도 부분적으로 기초하여 상위-레벨 리던던시 정보의 하나 또는 둘 이상의 유닛들을 계산하도록 가능해진 컴퓨팅 로직 회로를 포함하는 시스템으로서,
컴퓨팅 로직 회로는 상위-레벨 리던던시 정보의 유닛들 중 적어도 일부분으로서 데이터 저장 정보의 유닛들의 컨텐츠에 의해 곱해진 데이터 저장 정보의 유닛들의 각각에 대한 각각의 비-제로 고유 상수 값의 가중된 합을 누적하도록 가능해진 누적 로직 회로를 포함한다.
[0106] EC68) EC67의 시스템은 하나 또는 둘 이상의 비-휘발성 메모리 디바이스들의 일부분들에 데이터 저장 정보의 유닛들 및 상위-레벨 리던던시 정보의 유닛들을 저장하도록 가능해진 로직 회로를 더 포함한다.
[0107] EC69) EC68의 시스템에서, 일부분들은 비-휘발성 메모리 디바이스들의 페이지들의 하나 또는 둘 이상의 진정수들을 포함하며, 상기 비-휘발성 메모리 디바이스들은 하나 또는 둘 이상의 플래시 메모리들을 포함한다.
[0108] EC70) EC67의 시스템에서, 유닛들은 하나 또는 둘 이상의 플래시 메모리들의 페이지들의 하나 또는 둘 이상의 진정수들에 대응한다.
[0109] EC71) EC67의 시스템에서, 상위-레벨 리던던시 정보의 유닛들은 데이터 저장 정보의 유닛들의 대응하는 바이트들의 발생기 다항식에 의한 다항식 나눗셈의 나머지로서 계산가능하지 않다.
[0110] EC72) EC67의 시스템에서, 누적 로직 회로는 점진적으로 가중된 합의 적어도 일부분을 누적하도록 더 가능해진다.
[0111] EC73) EC72의 시스템에서, 누적 로직 회로는 데이터 저장 정보의 유닛들 중 2개 이상을 병렬로 프로세싱하도록 더 가능해진다.
[0112] EC74) EC73의 시스템에서, 2개 이상의 유닛들은 하나 또는 둘 이상의 플래시 메모리들의 페이지들의 하나 또는 둘 이상의 진정수들에 대응한다.
[0113] EC75) EC67의 시스템에서, 누적 로직 회로는 하나 또는 둘 이상의 플래시 메모리들에 의한 판독 동작 완료의 순서에 대응하는 순서로 가중된 합의 적어도 일부분을 누적하도록 더 인에이블된다.
[0114] EC76) EC67의 시스템에서, 누적 로직 회로는 하나 또는 둘 이상의 플래시 메모리들로부터 리턴된 데이터의 순서에 대응하는 순서로 가중된 합의 적어도 일부분을 누적하도록 더 가능해진다.
[0115] EC77) EC76의 시스템에서, 리턴된 데이터의 순서는 데이터가 하나 또는 둘 이상의 플래시 메모리들로부터 이용가능한 순서에 적어도 부분적으로 기초한다.
[0116] EC78) EC67의 시스템에서, 누적 로직 회로는 가중된 합의 적어도 일부분을 병렬로 누적하도록 더 가능해진다.
[0117] EC79) EC67의 시스템에서, 누적 로직 회로는 가중된 합의 적어도 일부분을 병렬로 누적하도록 더 가능해지며, 그 일부분은 하나 또는 둘 이상의 플래시 메모리들의 대응하는 페이지들로부터 리트리브가능한 데이터 저장 정보의 유닛들의 엘리먼트들에 대응한다.
[0118] EC80) EC79의 시스템에서, 엘리먼트들은 대응하는 페이지들의 판독 동작들의 완료의 순서에 의해, 적어도 부분적으로 결정된다.
[0119] EC81) EC68의 시스템은 그 일부분들 중 하나 또는 둘 이상이 판독될 때 하위-레벨 에러 정정 실패를 갖는지 여부를 결정하도록 가능해진 로직 회로를 더 포함한다.
[0120] EC82) EC68의 시스템은 그 일부분들 중 하나 또는 둘 이상을 판독하도록 가능해진 로직 회로를 더 포함한다.
[0121] EC83) EC67의 시스템에서, 누적 로직 회로는 데이터 저장 정보의 유닛들 중 2개까지 가중된 합으로부터 선택적으로 배제하도록 더 가능해진다.
[0122] EC84) EC83의 시스템은 데이터 저장 정보의 배제된 유닛들을 복원하기 위해 누적 로직 회로의 결과들을 프로세싱하도록 가능해진 로직 회로를 더 포함한다.
[0123] EC85) EC83의 시스템에서, 누적 로직 회로는 점진적으로 그리고 하나 또는 둘 이상의 비-휘발성 메모리 디바이스들에 의한 판독 동작 완료의 순서에 대응하는 순서로 가중된 합의 적어도 일부분을 누적하도록 더 가능해진다.
[0124] EC86) EC83의 시스템에서, 누적 로직 회로는 점진적으로 그리고 하나 또는 둘 이상의 비-휘발성 메모리 디바이스들로부터 리턴된 데이터의 순서에 대응하는 순서로 가중된 합의 적어도 일부분을 누적하도록 더 가능해진다.
[0125] EC87) EC86의 시스템에서, 리턴된 데이터의 순서는 데이터가 하나 또는 둘 이상의 비-휘발성 메모리 디바이스들로부터 이용가능한 순서에 적어도 부분적으로 기초한다.
[0126] EC88) EC67의 시스템에서, 상위-레벨 리던던시 정보의 유닛들 및 데이터 저장 정보의 유닛들은 하나 또는 둘 이상의 플래시 메모리들의 각각의 페이지들에 대응한다.
[0127] EC89) EC88의 시스템에서, 플래시 메모리들은 복수의 다이들을 포함하며, 각 페이지들의 각각은 고유한 하나의 다이 상에 있다.
[0128] EC90) EC67의 시스템은 컴퓨팅 호스트로부터의 요청들에 응답하여 적어도 부분적으로 하나 또는 둘 이상의 플래시 메모리들의 일부분들에 데이터 저장 정보의 유닛들 및 상위-레벨 리던던시 정보의 유닛들을 저장하도록 가능해진 플래시 저장 로직 회로를 더 포함한다.
[0129] EC91) EC90의 시스템은 컴퓨팅 호스트와 요청들을 인터페이스하도록 가능해진 컴퓨팅 호스트 인터페이스 로직 회로를 더 포함한다.
[0130] EC92) EC91의 시스템에서, 컴퓨팅 호스트 인터페이스 로직 회로는 저장 인터페이스 표준과 호환가능하다.
[0131] EC93) EC90의 시스템에서, 플래시 저장 로직 회로는 플래시 메모리들과 인터페이스하도록 가능해진 플래시 메모리 인터페이스 로직 회로를 포함한다.
[0132] EC94) EC93의 시스템에서, 플래시 메모리 인터페이스 로직 회로는 플래시 메모리 인터페이스를 포함한다.
[0133] EC95) EC90의 시스템은 컴퓨팅 호스트와 요청들을 인터페이스하도록 가능해진 컴퓨팅 호스트 인터페이스 로직 회로를 더 포함하며; 및
플래시 저장 로직 회로는 플래시 메모리들과 인터페이스하도록 가능해진 플래시 메모리 인터페이스 로직 회로를 포함한다.
[0134] EC96) EC95의 시스템에서, 컴퓨팅 호스트 인터페이스 로직 회로 및 플래시 메모리 인터페이스 로직 회로는 단일 집적된 회로(IC)에 집합적으로 구현된다.
[0135] EC97) EC95의 시스템에서, 컴퓨팅 호스트 인터페이스 로직 회로 및 플래시 메모리 인터페이스 로직 회로는 고체-상태 디스크(SSD)에 포함된다.
[0136] EC98) EC90의 시스템은 컴퓨팅 호스트의 전부 또는 임의의 부분들을 더 포함한다.
[0137] EC99) EC69의 시스템은 플래시 메모리들 중 적어도 하나를 더 포함한다.
[0138] EC100) 프로세싱 엘리먼트에 의해 실행될 때 프로세싱 엘리먼트가 동작들을 수행하게 하는 그 내부에 저장된 명령들의 세트를 갖는 탠저블 컴퓨터 판독가능한 매체로서:
상기 동작들은:
데이터 저장 정보의 복수의 유닛들에 적어도 부분적으로 기초하여 상위-레벨 리던던시 정보의 하나 또는 둘 이상의 유닛들을 계산하는 것을 관리하는 단계를 포함하며; 및
상기 계산하는 것은 상위-레벨 리던던시 정보의 유닛들 중 적어도 일부분으로서 데이터 저장 정보의 유닛들의 컨텐츠에 의해 곱해진 데이터 저장 정보의 유닛들의 각각에 대한 각각의 비-제로 고유 상수 값의 가중된 합을 누적하는 것을 포함한다.
[0139] EC101) EC100의 탠저블 컴퓨터 판독가능한 매체에서, 동작들은 하나 또는 둘 이상의 비-휘발성 메모리 디바이스들의 일부분들에 데이터 저장 정보의 유닛들 및 상위-레벨 리던던시 정보의 유닛들을 저장하는 것을 관리하는 단계를 더 포함한다.
[0140] EC102) EC101의 탠저블 컴퓨터 판독가능한 매체에서, 일부분들은 비-휘발성 메모리 디바이스들의 페이지들의 하나 또는 둘 이상의 진정수들을 포함하며, 상기 비-휘발성 메모리 디바이스들은 하나 또는 둘 이상의 플래시 메모리들을 포함한다.
[0141] EC103) EC100의 탠저블 컴퓨터 판독가능한 매체에서, 유닛들은 하나 또는 둘 이상의 플래시 메모리들의 페이지들의 하나 또는 둘 이상의 진정수들에 대응한다.
[0142] EC104) EC100의 탠저블 컴퓨터 판독가능한 매체에서, 상위-레벨 리던던시 정보의 유닛들은 데이터 저장 정보의 유닛들의 대응하는 바이트들의 발생기 다항식에 의한 다항식 나눗셈의 나머지로서 계산가능하지 않다.
[0143] EC105) EC100의 탠저블 컴퓨터 판독가능한 매체에서, 누적하는 것은 점진적으로 가중된 합의 적어도 일부분을 누적하는 것을 포함한다.
[0144] EC106) EC105의 탠저블 컴퓨터 판독가능한 매체에서, 누적하는 것은 데이터 저장 정보의 유닛들 중 2개 이상을 병렬로 프로세싱하는 것을 더 포함한다.
[0145] EC107) EC106의 탠저블 컴퓨터 판독가능한 매체에서, 2개 이상의 유닛들은 하나 또는 둘 이상의 플래시 메모리들의 페이지들의 하나 또는 둘 이상의 진정수들에 대응한다.
[0146] EC108) EC100의 탠저블 컴퓨터 판독가능한 매체에서, 누적하는 것은 하나 또는 둘 이상의 플래시 메모리들에 의한 판독 동작 완료의 순서에 대응하는 순서로 가중된 합의 적어도 일부분을 누적하는 것을 포함한다.
[0147] EC109) EC100의 탠저블 컴퓨터 판독가능한 매체에서, 누적하는 것은 하나 또는 둘 이상의 플래시 메모리들로부터 리턴된 데이터의 순서에 대응하는 순서로 가중된 합의 적어도 일부분을 누적하는 것을 포함한다.
[0148] EC110) EC109의 탠저블 컴퓨터 판독가능한 매체에서, 리턴된 데이터의 순서는 데이터가 하나 또는 둘 이상의 플래시 메모리들로부터 이용가능한 순서에 적어도 부분적으로 기초한다.
[0149] EC111) EC100의 탠저블 컴퓨터 판독가능한 매체에서, 누적하는 것은 가중된 합의 적어도 일부분을 병렬로 누적하는 것을 포함한다.
[0150] EC112) EC100의 탠저블 컴퓨터 판독가능한 매체에서, 상기 누적하는 것은 가중된 합의 적어도 일부분을 병렬로 누적하는 것을 포함하며, 그 일부분은 하나 또는 둘 이상의 플래시 메모리들의 대응하는 페이지들로부터 리트리브가능한 데이터 저장 정보의 유닛들의 엘리먼트들에 대응한다.
[0151] EC113) EC112의 탠저블 컴퓨터 판독가능한 매체에서, 엘리먼트들은 대응하는 페이지들의 판독 동작들의 완료의 순서에 의해, 적어도 부분적으로 결정된다.
[0152] EC114) EC101의 탠저블 컴퓨터 판독가능한 매체에서 그 동작들은 그 일부분들 중 하나 또는 둘 이상이 판독될 때 하위-레벨 에러 정정 실패를 갖는지 여부를 결정하는 것을 관리하는 단계를 더 포함한다.
[0153] EC115) EC101의 탠저블 컴퓨터 판독가능한 매체에서, 그 동작들은 그 일부분들 중 하나 또는 둘 이상을 판독하는 것을 관리하는 단계를 더 포함한다.
[0154] EC116) EC100의 탠저블 컴퓨터 판독가능한 매체에서, 가중된 합을 누적하는 것은 데이터 저장 정보의 유닛들 중 2개까지 가중된 합으로부터 선택적으로 배제한다.
[0155] EC117) EC116의 탠저블 컴퓨터 판독가능한 매체에서 그 동작들은 데이터 저장 정보의 배제된 유닛들을 복원하기 위해 누적하는 단계의 결과들을 프로세싱하는 것을 관리하는 단계를 더 포함한다.
[0156] EC118) EC116의 탠저블 컴퓨터 판독가능한 매체에서, 누적하는 것은 점진적으로 그리고 하나 또는 둘 이상의 비-휘발성 메모리 디바이스들에 의한 판독 동작 완료의 순서에 대응하는 순서로 가중된 합의 적어도 일부분을 누적하는 것을 포함한다.
[0157] EC119) EC116의 탠저블 컴퓨터 판독가능한 매체에서, 누적하는 것은 점진적으로 그리고 하나 또는 둘 이상의 비-휘발성 메모리 디바이스들로부터 리턴된 데이터의 순서에 대응하는 순서로 가중된 합의 적어도 일부분을 누적하는 것을 포함한다.
[0158] EC120) EC119의 탠저블 컴퓨터 판독가능한 매체에서, 리턴된 데이터의 순서는 데이터가 하나 또는 둘 이상의 비-휘발성 메모리 디바이스들로부터 이용가능한 순서에 적어도 부분적으로 기초한다.
[0159] EC121) EC100의 탠저블 컴퓨터 판독가능한 매체에서, 상위-레벨 리던던시 정보의 유닛들 및 데이터 저장 정보의 유닛들은 하나 또는 둘 이상의 플래시 메모리들의 각각의 페이지들에 대응한다.
[0160] EC122) EC121의 탠저블 컴퓨터 판독가능한 매체에서, 플래시 메모리들은 복수의 다이를 포함하며, 각 페이지들의 각각은 고유한 하나의 다이 상에 있다.
[0161] EC123) EC100의 탠저블 컴퓨터 판독가능한 매체에서, 동작들은 컴퓨팅 호스트로부터의 요청들에 응답하여 적어도 부분적으로 하나 또는 둘 이상의 플래시 메모리들의 일부분들에 데이터 저장 정보의 유닛들 및 상위-레벨 리던던시 정보의 유닛들을 저장하는 것을 관리하는 단계를 더 포함한다.
[0162] EC124) EC123의 탠저블 컴퓨터 판독가능한 매체에서, 동작들은 컴퓨팅 호스트와 요청들을 인터페이스하는 것을 관리하는 단계를 더 포함한다.
[0163] EC125) EC124의 탠저블 컴퓨터 판독가능한 매체에서, 컴퓨팅 호스트와 요청들을 인터페이스하는 것은 저장 인터페이스 표준과 호환가능하다.
[0164] EC126) EC123의 탠저블 컴퓨터 판독가능한 매체에서, 저장하는 것은 플래시 메모리들과 인터페이싱하는 것을 포함한다.
[0165] EC127) EC126의 탠저블 컴퓨터 판독가능한 매체에서, 플래시 메모리들과 인터페이스하는 것은 플래시 메모리 인터페이스를 포함한다.
[0166] EC128) EC123의 탠저블 컴퓨터 판독가능한 매체에서, 동작들은:
컴퓨팅 호스트 인터페이스 로직 회로를 관리하는 것을 통해 적어도 부분적으로 컴퓨팅 호스트와 요청들을 인터페이싱하는 것을 관리하는 단계를 더 포함하며; 및
상기 저장하는 것은 플래시 메모리들과 인터페이싱하도록 가능해진 플래시 메모리 인터페이스 로직 회로를 통해 적어도 부분적으로 이루어진다.
[0167] EC129) EC128의 탠저블 컴퓨터 판독가능한 매체에서, 컴퓨팅 호스트 인터페이스 로직 회로 및 플래시 메모리 인터페이스 로직 회로는 단일 집적된 회로(IC)에 집합적으로 구현된다.
[0168] EC130) EC128의 탠저블 컴퓨터 판독가능한 매체에서, 컴퓨팅 호스트 인터페이스 로직 회로 및 플래시 메모리 인터페이스 로직 회로는 고체-상태 디스크(SSD)에 포함된다.
[0169] EC131) EC123의 탠저블 컴퓨터 판독가능한 매체에서 동작들은 컴퓨팅 호스트의 전부 또는 임의의 부분들을 동작하는 것을 관리하는 단계를 더 포함한다.
[0170] EC132) EC102의 탠저블 컴퓨터 판독가능한 매체에서 동작들은 플래시 메모리들 중 적어도 하나를 동작하는 것을 관리하는 단계를 더 포함한다.
[0171] EC133) 데이터 저장 정보의 복수의 페이지들에 적어도 부분적으로 기초하여 상위-레벨 리던던시 정보의 하나 또는 둘 이상의 페이지들을 계산하는 단계;
하나 또는 둘 이상의 플래시 메모리들의 페이지들에서의 데이터 저장 정보의 페이지들 및 상위-레벨 리던던시 정보의 페이지들을 저장하는 단계를 포함하며; 및
상기 계산하는 단계는 상위-레벨 리던던시 정보의 페이지들의 적어도 일부분으로서 데이터 저장 정보의 페이지들의 컨텐츠에 의해 곱해진 데이터 저장 정보의 페이지들의 각각에 대한 각각의 비-제로 고유 상수 값의 가중된 합을 누적하는 단계를 포함한다.
[0172] EC134) EC133의 방법에서, 상위-레벨 리던던시 정보의 페이지들은 데이터 저장 정보의 페이지들의 대응하는 바이트들의 발생기 다항식에 의한 다항식 나눗셈의 나머지로서 계산가능하지 않다.
[0173] EC135) EC133의 방법에서, 누적하는 단계는 점진적으로 누적하는 단계를 포함한다.
[0174] EC136) EC135의 방법에서, 누적하는 단계는 데이터 저장 정보의 페이지들 중 2개 이상을 적어도 부분적으로 병렬로 프로세싱하는 단계를 더 포함한다.
[0175] EC137) EC133의 방법은 플래시 메모리들에 저장된 적어도 일부의 페이지들을 판독하는 단계; 및 판독된 페이지들 중 임의의 것이 하위-레벨 리던던시 정보를 거쳐 정정가능하지 않은지 여부를 결정하는 단계를 더 포함한다.
[0176] EC138) EC133의 방법은 상위-레벨 리던던시 정보의 정정 버전을 계산하는 단계를 더 포함하며, 여기서 상위-레벨 리던던시 정보의 정정 버전을 계산하는 단계는 데이터 저장 정보의 페이지들 중 2개의 페이지들까지 선택적으로 배제한다.
[0177] EC139) EC138의 방법은 데이터 저장 정보의 배제된 페이지들을 복원하기 위해 상위-레벨 리던던시 정보의 정정 버전을 계산하는 결과들을 프로세싱하는 단계를 더 포함한다.
[0178] EC140) EC138의 방법에서, 누적하는 단계는 판독 동작들이 플래시 메모리들에 의해 완료되는 순서에 의해 적어도 부분적으로 결정되는 순서로 적어도 부분적으로 점진적으로 누적하는 단계를 포함한다.
[0179] EC141) EC133의 방법에서, 플래시 메모리들은 복수의 다이로 구성되며, 상위-레벨 리던던시 정보 또는 데이터 저장 정보의 페이지들 중 하나만이 다이 중 임의의 하나에 저장된다.
[0180] EC142) EC141의 방법에서, 상위-레벨 리던던시 정보의 페이지들은 다이 중 적어도 하나로부터 배제된다.
[0181] EC143) EC141의 방법에서, 데이터 저장 정보의 페이지들은 다이 중 적어도 하나로부터 배제된다.
[0182] EC144) 전술한 EC들 중 임의의 것은 저장 인터페이스 표준을 갖거나 지칭하며, 저장 인터페이스 표준은,
유니버설 직렬 버스(USB) 인터페이스 표준
컴팩트 플래시(CF) 인터페이스 표준,
멀티미디어카드(MMC) 인터페이스 표준,
임베디드 MMC(eMMC) 인터페이스 표준,
전폭기 인터페이스 표준,
UFS 인터페이스 표준,
보안 디지털(SD) 인터페이스 표준,
메모리 스틱 인터페이스 표준,
xD-화상 카드 인터페이스 표준,
집적된 드라이브 전자제품(IDE) 인터페이스 표준,
직렬 진보된 기술 첨부(SATA) 인터페이스 표준,
외부 SATA(eSATA) 인터페이스 표준,
소형 컴퓨터 시스템 인터페이스(SCSI) 인터페이스 표준,
직렬 첨부된 소형 컴퓨터 시스템 인터페이스(SAS) 인터페이스 표준,
파이버 채널 인터페이스 표준,
이더넷 인터페이스 표준, 및
주변 컴포넌트 상호접속 익스프레스(PCIe) 인터페이스 표준 중 하나 또는 둘 이상을 포함한다.
[0183] EC145) 전술한 EC들 중 임의의 것은 플래시 메모리 인터페이스를 갖거나 지칭하며, 여기서 플래시 메모리 인터페이스는,
개방 NAND 플래시 인터페이스(ONFI),
토글-모드 인터페이스,
2배-데이터-레이트(DDR) 동기 인터페이스,
DDR2 동기 인터페이스;
동기 인터페이스, 및
비동기 인터페이스 중 하나 또는 둘 이상과 호환가능하다.
[0184] EC146)전술한 EC들 중 임의의 것은 컴퓨팅 호스트를 갖거나 지칭하며, 여기서 컴퓨팅 호스트는,
컴퓨터,
워크스테이션 컴퓨터,
서버 컴퓨터,
저장 서버,
저장 첨부된 네트워크(SAN)
네트워크 첨부된 저장(NAS) 디바이스,
직접 첨부된 저장(DAS) 디바이스,
저장 기기,
퍼스널 컴퓨터(PC),
랩톱 컴퓨터,
노트북 컴퓨터,
넷북 컴퓨터,
태블릿 디바이스 또는 컴퓨터,
울트라북 컴퓨터,
전자 판독 디바이스(e-리더)
개인 휴대 정보 단말(PDA),
네비게이션 시스템,
(휴대용) 위성 위치확인 시스템(GPS) 디바이스,
자동차 제어 시스템,
자동차 매체 제어 시스템 또는 컴퓨터,
프린터, 복사기 또는 팩스 머신 또는 일체형 디바이스,
POS(Point Of Sale) 디바이스,
금전-등록기,
매체 플레이어,
텔레비전,
매체 리코더,
디지털 비디오 리코더(DVR),
디지털 카메라,
셀룰러 핸드셋,
코드리스 전화 핸드셋, 및
전자 게임 중 하나 또는 둘 이상을 포함한다.
[0185] EC147) 전술한 EC들 중 임의의 것은 적어도 하나의 플래시 메모리를 갖거나 지칭하며, 여기서 적어도 하나의 플래시 메모리의 적어도 일부분은
NAND 플래시 기술 저장 셀들, 및
NOR 플래시 기술 저장 셀들 중 하나 또는 둘 이상을 포함한다.
[0186] EC148) 전술한 EC들 중 임의의 것은 적어도 하나의 플래시 메모리를 갖거나 지칭하며, 여기서 적어도 하나의 플래시 메모리의 적어도 일부분은
단일-레벨 셀(SLC) 플래시 기술 저장 셀들, 및
멀티-레벨 셀(MLC) 플래시 기술 저장 셀들 중 하나 또는 둘 이상을 포함한다.
[0187] EC149) 전술한 EC들 중 임의의 것은 적어도 하나의 플래시 메모리를 갖거나 지칭하며, 여기서 적어도 하나의 플래시 메모리의 적어도 일부분은,
폴리실리콘 기술-기반된 전하 저장 셀들, 및
폴리실리콘 질화물 기술-기반된 전하 저장 셀들 중 하나 또는 둘 이상을 포함한다.
[0188] EC150) 전술한 EC들 중 임의의 것은 적어도 하나의 플래시 메모리를 갖거나 지칭하며, 여기서 적어도 하나의 플래시 메모리의 적어도 일부분은,
2-차원 기술-기반된 플래시 메모리 기술, 및
3-차원 기술-기반된 플래시 메모리 기술 중 하나 또는 둘 이상을 포함한다.
시스템
[0189] 도 1a는 NVM들을 액세싱하고 제어하기 위한 독립 실리콘 엘리먼트들로 동적 상위-레벨 리던던시 모드 관리를 이용하여 SSD 제어기를 포함하는 고체-상태 디스크(SSD)의 일 실시예의 선택된 상세들을 도시한다. SSD 제어기는 NVM 엘리먼트들(예를 들어, 플래시 메모리들)을 통해 구현된 바와 같은 비-휘발성 저장장치를 관리하기 위한 것이다. SSD 제어기(100)는 호스트(도시되지 않음)에 하나 또는 둘 이상의 외부 인터페이스들(110)을 통해 통신적으로 커플링된다. 다양한 실시예들에 따르면, 외부 인터페이스들(110)은: SATA 인터페이스; SAS 인터페이스; PCIe 인터페이스; 파이버 채널 인터페이스; (10 기가비트 이더넷과 같은) 이더넷 인터페이스; 선행하는 인터페이스들 중 임의의 것의 비-표준 버전; 커스텀(custom) 인터페이스; 또는 저장 및/또는 통신들 및/또는 컴퓨팅 디바이스들을 상호접속하기 위해 이용된 임의의 다른 타입의 인터페이스 중 하나 또는 둘 이상이다. 예를 들어, 일부 실시예들에서, SSD 제어기(100)는 SATA 인터페이스 및 PCIe 인터페이스를 포함한다.
[0190] SSD 제어기(100)는 하나 또는 둘 이상의 플래시 디바이스(192)와 같은 하나 또는 둘 이상의 저장 디바이스들을 포함하는 NVM(199)에 하나 또는 둘 이상의 디바이스 인터페이스들(190)을 통해 더 통신적으로 커플링된다. 다양한 실시예들에 따르면, 디바이스 인터페이스들(190)은: 비동기 인터페이스; 동기 인터페이스; 단일-데이터-레이트(SDR) 인터페이스; 2배-데이터-레이트(DDR) 인터페이스; DRAM-호환성 DDR 또는 DDR2 동기 인터페이스; ONFI 2.2 또는 ONFI 3.0 호환가능한 인터페이스와 같은 ONFI 호환가능한 인터페이스; 토글-모드 호환가능한 플래시 인터페이스; 선행하는 인터페이스들 중 임의의 것의 비-표준 버전; 커스텀 인터페이스; 또는 저장 디바이스들에 접속하기 위해 이용된 임의의 다른 타입의 인터페이스 중 하나 또는 둘 이상이다.
[0191] 각 플래시 디바이스(192)는 일부 실시예들에서, 하나 또는 둘 이상의 개별 플래시 다이(194)를 갖는다. 플래시 디바이스(192) 중 특정한 하나의 타입에 따르면, 특정 플래시 디바이스(192)에서의 복수의 플래시 다이(194)가 임의선택적으로 및/또는 선택적으로 병렬로 액세스가능하다. 플래시 디바이스(192)는 단지 SSD 제어기(100)에 통신적으로 커플링하도록 가능해진 저장 디바이스의 일 타입을 나타낸다. 다양한 실시예들에서, SLC NAND 플래시 메모리, MLC NAND 플래시 메모리, NOR 플래시 메모리, 폴리실리콘 또는 실리콘 질화물 기술-기반된 전하 저장 셀들을 이용하는 플래시 메모리, 2- 또는 3-차원 기술-기반된 플래시 메모리, 판독-전용 메모리, 정적 랜덤 액세스 메모리, 동적 랜덤 액세스 메모리, 강자성체 메모리, 위상-변경 메모리, 레이스트랙(racetrack) 메모리, 또는 임의의 다른 타입의 메모리 디바이스 또는 저장 매체와 같은 임의의 타입의 저장 디바이스가 이용가능하다.
[0192] 다양한 실시예들에 따르면, 디바이스 인터페이스들(190)은 다음과 같이 조직된다: 버스 당 하나 또는 둘 이상의 플래시 디바이스(192)를 갖는 하나 또는 둘 이상의 버스들; 버스 당 하나 또는 둘 이상의 플래시 디바이스(192)를 갖는 하나 또는 둘 이상의 그룹들의 버스들, 여기서 그룹의 버스들은 일반적으로 병렬로 액세스된다; 또는 디바이스 인터페이스(190) 상의 하나 또는 둘 이상의 플래시 디바이스(192)의 임의의 다른 조직.
[0193] 도 1a에 계속하여, SSD 제어기(100)는 호스트 인터페이스들(111), 데이터 프로세싱(121), 버퍼(131), 맵(141), 재생 처리기(151), ECC(161), 디바이스 인터페이스 로직(191) 및 CPU(171)와 같은 하나 또는 둘 이상의 모듈들을 갖는다. 도 1a에 도시된 특정 모듈들 및 상호접속들은 단지 일 실시예를 나타내며, 모듈들의 일부 또는 전부의 다수의 배열들 및 상호접속들뿐 아니라 도시되지 않은 추가적인 모듈들이 구상된다. 제 1 예에서, 일부 실시예들에서, 듀얼-포팅을 제공하기 위해 2개 또는 그 이상의 호스트 인터페이스들(111)이 존재한다. 제 2 예에서, 일부 실시예들에서, 데이터 프로세싱(121) 및/또는 ECC(161)가 버퍼(131)와 조합된다. 제 3 예에서, 일부 실시예들에서, 호스트 인터페이스들(111)이 직접 버퍼(131)에 커플링되며, 데이터 프로세싱(121)은 임의선택적으로 및/또는 선택적으로 버퍼(131)에 저장된 데이터 상에 동작한다. 제 4 예에서, 일부 실시예들에서, 디바이스 인터페이스 로직(191)은 버퍼(131)에 직접 커플링되며, ECC(161)는 임의선택적으로 및/또는 선택적으로 버퍼(131)에 저장된 데이터 상에 동작한다.
[0194] 호스트 인터페이스들(111)은 외부 인터페이스들(110)을 통해 커맨드들 및/또는 데이터를 송신하고 수신하며, 일부 실시예들에서, 태그 트래킹(113)을 통해 개별 커맨드들의 진행을 트래킹한다. 예를 들어, 커맨드들은 (LBA와 같은) 어드레스를 특정하는 판독 커맨드 및 판독할 (다수의 LBA 양자들, 예를 들어, 섹터들과 같은) 데이터의 양을 포함한다; 이에 응답하여, SSD는 판독 상태 및/또는 판독 데이터를 제공한다. 다른 예에서, 커맨드들은 (LBA와 같은) 어드레스 및 기록할 (다수의 LBA 양자들, 예를 들어, 섹터들과 같은) 데이터의 양을 포함한다; 이에 응답하여, SSD는 기록 상태를 제공하고 및/또는 기록 데이터를 요청하며 임의선택적으로 후속하여 기록 상태를 제공한다. 또 다른 예에서, 커맨드들은 더 이상 할당될 필요가 없는 (하나 또는 둘 이상의 LBA들과 같은) 하나 또는 둘 이상의 어드레스들을 특정하는 할당해제(de-allocation) 커맨드(예를 들어, 트림(trim) 커맨드)를 포함한다; 이에 응답하여 SSD는 따라서 맵을 수정하며 임의선택적으로 할당-해제 상태를 제공한다. 일부 컨텍스트들에서 ATA 호환가능한 TRIM 커맨드는 예시적인 할당-해제 커맨드이다. 또 다른 예에서, 커맨드들은 수퍼 커패시터 테스트 커맨드 또는 데이터 경화 성공 질문을 포함한다; 이에 응답하여, SSD는 적절한 상태를 제공한다. 일부 실시예들에서, 호스트 인터페이스들(111)은 SATA 프로토콜과 호환가능하며, NCQ 커맨드들을 이용하여, 각각이 0 내지 31의 숫자로 표현된 고유한 태그를 갖는 최대 32개의 계류중인 커맨드들을 갖도록 가능해진다. 일부 실시예들에서, 태그 트래킹(113)은 SSD 제어기(100)에 의한 프로세싱 동안 커맨드를 트래킹하기 위해 이용된 내부 태그와 외부 인터페이스들(110)을 통해 수신된 커맨드에 대한 외부 태그를 관련시키도록 가능해진다.
[0195] 다양한 실시예들에 따르면, 하나 또는 둘 이상은: 데이터 프로세싱(121)은 임의선택적으로 및/또는 선택적으로 버퍼(131)와 외부 인터페이스들(110) 사이에 송신된 일부 또는 전부의 데이터를 프로세싱한다; 그리고 데이터 프로세싱(121)은 임의선택적으로 및/또는 선택적으로 버퍼(131)에 저장된 데이터를 프로세싱한다. 일부 실시예들에서, 데이터 프로세싱(121)은: 포맷팅; 리포맷팅; 트랜스코딩; 및 임의의 다른 데이터 프로세싱 및/또는 조작 태스크 중 하나 또는 둘 이상을 수행하기 위해 하나 또는 둘 이상의 엔진들(123)을 이용한다.
[0196] 버퍼(131)는 디바이스 인터페이스들(190)로부터/에 외부 인터페이스들(110)에/로부터 송신된 데이터를 저장한다. 일부 실시예들에서, 버퍼(131)는 플래시 디바이스(192) 중 하나 또는 둘 이상을 관리하기 위해 SSD 제어기(100)에 의해 이용된 일부 또는 전부의 맵 테이블들과 같은 시스템 데이터를 추가로 저장한다. 다양한 실시예들에서, 버퍼(131)는: 데이터의 일시적 저장을 위해 이용되는 메모리(137); 버퍼(131)에 및/또는 버퍼(131)로부터의 데이터의 이동을 제어하기 위해 이용된 DMA(133); 및 상위-레벨 에러 정정 및/또는 리던던시 기능들을 제공하기 위해 이용되는 ECC-X(135); 및 다른 데이터 이동 및/또는 조작 기능들 중 하나 또는 둘 이상을 갖는다. 상위-레벨 리던던시 기능의 일 예는 RAID-형 성능(예를 들어, RASIE)이며, 여기서 리던던시는 디스크 레벨에서 대신에 플래시 디바이스(예를 들어, 다수개의 플래시 디바이스(192)) 레벨에서 및/또는 플래시 다이(예를 들어, 플래시 다이(194)) 레벨에 있다.
[0197] 다양한 실시예들에 따르면, 하나 또는 둘 이상은: ECC(161)는 임의선택적으로 및/또는 선택적으로 버퍼(131) 및 디바이스 인터페이스들(190) 사이에 송신된 일부 또는 전부의 데이터를 프로세싱하며; ECC(161)는 임의선택적으로 및/또는 선택적으로 버퍼(131)에 저장된 데이터를 프로세싱한다. 일부 실시예들에서, ECC(161)는 하나 또는 둘 이상의 ECC 기술들에 따르는 것과 같은 하위-레벨 에러 정정 및/또는 리던던시 기능들을 제공하기 위해 이용된다. 일부 실시예들에서, ECC(161)는: CRC 코드; 해밍 코드; RS 코드; BCH 코드; LDPC 코드; 비터비 코드; 트렐리스 코드; 하드-결정(hard-decision) 코드; 소프트-결정(soft-decision) 코드; 소거-기반된 코드; 임의의 에러 검출 및/또는 정정 코드; 및 선행한 것의 임의의 조합 중 하나 또는 둘 이상을 구현한다. 일부 실시예들에서, ECC(161)는 (LDPC 디코더들과 같은) 하나 또는 둘 이상의 디코더들을 포함한다.
[0198] 디바이스 인터페이스 로직(191)은 디바이스 인터페이스들(190)을 통해 플래시 디바이스(192)의 사례들을 제어한다. 디바이스 인터페이스 로직(191)은 플래시 디바이스(192)의 프로토콜에 따라 플래시 디바이스(192)의 사례들에/로부터 데이터를 송신하도록 가능해진다. 디바이스 인터페이스 로직(191)은 디바이스 인터페이스들(190)을 통해 플래시 디바이스(192)의 사례들의 제어를 선택적으로 시퀀싱하기 위한 스케줄링(193)을 포함한다. 예를 들어, 일부 실시예들에서, 스케줄링(193)은 플래시 디바이스(192)의 사례들에 대한 동작들을 큐잉하도록, 그리고 플래시 디바이스(192)(또는 플래시 디바이스(194))의 사례들 중 개별적인 것들이 이용가능함에 따라 플래시 디바이스(192)(또는 플래시 디바이스(194))의 사례들 중 개별적인 것들에 대한 동작들을 선택적으로 송신하도록 가능해진다.
[0199] 맵(141)은 NVM(199)에서의 위치들로 외부 데이터 어드레스들을 매핑하기 위해 테이블(143)을 이용하여, 디바이스 인터페이스들(190) 상에 이용된 데이터 어드레싱과 외부 인터페이스들(110) 상에 이용된 데이터 어드레싱 사이로 변환한다. 예를 들어, 일부 실시예들에서, 맵(141)은 외부 인터페이스들(110) 상에 이용된 LBA들을 테이블(143)에 의해 제공된 매핑을 통해, 하나 또는 둘 이상의 플래시 다이(194)를 목표로 하는 블록 및/또는 페이지 어드레스들로 변환한다. 드라이브 제조 또는 할당해제로 인해 기록되지 않은 LBA들에 대해, 맵은 LBA들이 판독되는 경우에 리턴하기 위한 디폴트 값을 지시한다. 예를 들어, 할당 해제 커맨드를 프로세싱할 때, 할당 해제된 LBA들에 대응하는 입력들이 디폴트 값들 중 하나를 지시하도록 맵이 수정된다. 다양한 실시예들에서, 다양한 디폴트 값들이 존재하며, 각각은 대응하는 포인터를 갖는다. 복수의 디폴트 값들은 하나의 디폴트 값으로서 (제 1 범위에서와 같은) 일부 할당해제된 LBA들을 판독하는 것을 가능하게 하는 한편, 다른 디폴트 값으로서 (제 2 범위에서와 같은) 다른 할당해제된 LBA들을 판독한다. 다양한 실시예들에서, 디폴트 값들은 플래시 메모리, 하드웨어, 펌웨어, 커맨드 및/또는 원시 아규먼트들 및/또는 파라미터들, 프로그램가능한 레지스터들 또는 그들의 다양한 조합들에 의해 정의된다.
[0200] 일부 실시예들에서, 맵(141)은 외부 인터페이스들(110) 상에 이용된 어드레스들과 디바이스 인터페이스들(190) 상에 이용된 데이터 어드레싱 사이의 변환들을 수행 및/또는 탐색하기 위해 테이블(143)을 이용한다. 다양한 실시예들에 따르면, 테이블(143)은: 일-레벨 맵; 2-레벨 맵; 멀티-레벨 맵; 맵 캐시; 압축된 맵; 하나의 어드레스 공간으로부터 다른 공간으로의 임의의 타입의 매핑; 및 전술한 임의의 조합 중 하나 또는 둘 이상이다. 다양한 실시예들에 따르면, 테이블(143)은: 정적 랜덤 액세스 메모리; 동적 랜덤 액세스 메모리; (플래시 메모리와 같은) NVM; 캐시 메모리; 온-칩 메모리; 오프-칩 메모리; 및 전술한 바의 임의의 조합 중 하나 또는 둘 이상을 포함한다.
[0201] 일부 실시예들에서, 재생 처리기(151)는 가비지(garbage) 수집을 수행한다. 예를 들어, 일부 실시예들에서, 플래시 디바이스(192)의 사례들은 블록들이 재-기록가능하기 전에 소거되어야 하는 블록들을 포함한다. 재생 처리기(151)는 맵(141)에 의해 유지된 맵을 스캐닝함으로써와 같은, (예를 들어, 할당-해제되는 대신 할당되는) 플래시 디바이스(192)의 사례들의 어느 부분들이 활성으로 사용중인지를 결정하도록, 그리고 그들을 소거함으로써 플래시 디바이스(192)의 사례들의 비사용되는(예를 들어, 할당해제되는) 부분들을 기록을 위해 이용가능하게 하도록 가능해진다. 추가적인 실시예들에서, 재생 처리기(151)는 플래시 디바이스(192)의 사례들의 더 큰 인접한 부분들을 기록을 위해 이용가능하게 하도록 플래시 디바이스(192)의 사례들 내에 저장된 데이터를 이동시키도록 가능해진다.
[0202] 일부 실시예들에서, 플래시 디바이스(192)의 사례들은 서로 다른 타입들 및/또는 특성들의 데이터를 저장하기 위한 하나 또는 둘 이상의 대역들을 갖기 위해 선택적으로 및/또는 동적으로 구성되고, 관리되며 및/또는 이용된다. 대역들의 수, 배열, 크기 및 타입은 동적으로 변경가능하다. 예를 들어, 컴퓨팅 호스트로부터의 데이터가 핫(활성) 대역으로 기록되는 한편, 재생 처리기(151)로부터의 데이터는 콜드(덜 활성인) 대역에 기록된다. 일부 사용 시나리오들에서, 컴퓨팅 호스트가 긴 시퀀셜 스트림을 기록하는 경우에, 핫 밴드의 크기가 성장하는 한편, 컴퓨팅 호스트가 랜덤 기록들 또는 소수의 기록들을 행하는 경우에, 콜드 대역의 크기가 성장한다.
[0203] CPU(171)는 SSD 제어기(100)의 다양한 부분들을 제어한다. CPU(171)는 CPU 코어(172)를 포함한다. CPU 코어(172)는 다양한 실시예들에 따르면, 하나 또는 둘 이상의 단일-코어 또는 멀티-코어 프로세서들이다. CPU 코어(172)에서의 개별적인 프로세서들 코어들은 일부 실시예들에서, 멀티-스레드된다. CPU 코어(172)는 명령 및/또는 데이터 캐시들 및/또는 메모리들을 포함한다. 예를 들어, 명령 메모리는 SSD 제어기(100)를 제어하기 위해 CPU 코어(172)가 프로그램들(예를 들어, 소프트웨어 때때로 펌웨어로 칭해지는) 프로그램들을 실행할 수 있게 하기 위한 명령들을 포함한다. 일부 실시예들에서, CPU 코어(172)에 의해 실행되는 펌웨어의 일부 또는 전부가 (예를 들어, 도 1b의 NVM(199)의 펌웨어(106)로서 도시된 바와 같은) 플래시 디바이스(192)의 사례들 상에 저장된다.
[0204] 다양한 실시예들에서, CPU(171)는: 커맨드들이 진행중인 동안 외부 인터페이스들(110)을 통해 수신된 커맨드들을 트래킹하고 제어하기 위한 커맨드 관리(173); 버퍼(131)의 할당 및 이용을 제어하기 위한 버퍼 관리(175); 맵(141)을 제어하기 위한 변환 관리(177); 데이터 어드레싱의 일치성을 제어하고 외부 데이터 액세스들과 재생 데이터 액세스들 사이와 같은 충돌들을 회피하기 위한 코히런시 관리(179); 디바이스 인터페이스 로직(191)을 제어하기 위한 디바이스 관리(181); 식별 정보의 수정 및 전달을 제어하기 위한 아이덴티티 관리(182), 및 임의선택적으로 다른 관리 유닛들을 더 포함한다. 다양한 실시예들에 따르면, CPU(171)에 의해 수행된 관리 기능들 중 아무것도 없거나, 임의의 것 또는 전부는 하드웨어에 의해, (외부 인터페이스들(110)을 통해 접속된 호스트 상에 또는 CPU 코어(172) 상에 실행하는 펌웨어와 같은) 소프트웨어에 의해, 또는 그들의 임의의 조합에 의해 제어되고 및/또는 관리된다.
[0205] 일부 실시예들에서, CPU(171)는: 성능 통계들을 수집하고 및/또는 보고하는 것; SMART를 구현하는 것; 전력 시퀀싱을 제어하는 것, 전력 소모를 제어하는 것 및/또는 모니터링하는 것 및/또는 조정하는 것; 전력 실패들에 응답하는 것; 클록 레이트들을 제어하는 것 및/또는 모니터링하는 것 및/또는 조정하는 것; 및 다른 관리 태스크들 중 하나 또는 둘 이상과 같은 다른 관리 태스크들을 수행하도록 가능해진다.
[0206] 다양한 실시예들은 SSD 제어기(100)와 유사하며 호스트 인터페이스들(111) 및/또는 외부 인터페이스들(110)의 적응을 통해서와 같은, 다양한 컴퓨팅 호스트들과의 동작과 호환가능한 컴퓨팅-호스트 플래시 메모리 제어기를 포함한다. 다양한 컴퓨팅 호스트들은 컴퓨터, 워크스테이션 컴퓨터, 서버 컴퓨터, 저장 서버, SAN, NAS 디바이스, DAS 디바이스, 저장 기기, PC, 랩톱 컴퓨터, 노트북 컴퓨터, 넷북 컴퓨터, 태블릿 디바이스 또는 컴퓨터, 울트라북 컴퓨터, (e-리더와 같은) 전자 판독 디바이스, PDA, 네비게이션 시스템, (휴대용) GPS 디바이스, 자동차 제어 시스템, 자동차 매체 제어 시스템 또는 컴퓨터, 프린터, 복사기 또는 팩스 머신 또는 일체형 디바이스, POS 디바이스, 금전-등록기, 매체 플레이어, 텔레비전, 매체 리코더, DVR, 디지털 카메라, 셀룰러 핸드셋, 코드리스 전화 핸드셋 및 전자 게임 중 하나 또는 임의의 조합을 포함한다.
[0207] 다양한 실시예들에서, SSD 제어기(또는 컴퓨팅-호스트 플래시 메모리 제어기)의 전부 또는 임의의 부분들은 단일 IC, 멀티-다이 IC의 단일 다이, 멀티-다이 IC의 복수의 다이들, 또는 복수의 IC들 상에 구현된다. 예를 들어, 버퍼(131)는 SSD 제어기(100)의 다른 엘리먼트들에서와 동일한 다이 상에 구현된다. 다른 예에서, 버퍼(131)는 SSD 제어기(100)의 다른 엘리먼트들과 다른 다이 상에 구현된다.
[0208] 도 1b는 도 1a의 SSD의 하나 또는 둘 이상의 사례들을 포함하는 시스템들의 다양한 실시예들의 선택된 상세들을 도시한다. SSD(101)는 디바이스 인터페이스들(190)을 통해 NVM(199)에 커플링된 SSD 제어기(100)를 포함한다. 도면은 실시예들의 다양한 클래스들을 도시한다: 호스트에 직접 커플링되는 단일 SSD, 각각의 외부 인터페이스들을 통해 호스트에 직접 각각 개별적으로 커플링되는 복수의 SSD들, 및 다양한 상호접속 엘리먼트들을 통해 호스트에 간접으로 커플링된 하나 또는 둘 이상의 SSD들.
[0209] 호스트에 직접 커플링된 단일 SSD의 예시적인 실시예로서, SSD(101)의 하나의 사례가 외부 인터페이스들(110)에 직접 커플링된다(예를 들어, 스위치/패브릭/중간 제어기(103)가 생략, 바이패스 또는 통과된다). 각각의 외부 인터페이스들을 통해 호스트에 직접 각각 커플링된 복수의 SSD들의 예시적인 실시예로서, SSD(101)의 복수의 사례들의 각각은 외부 인터페이스들(110)의 각각의 사례를 통해 호스트(102)에 직접 각각 커플링된다(예를 들어, 스위치/패브릭/중간 제어기(103)가 생략, 바이패스 또는 통과된다). 다양한 상호접속 엘리먼트들을 통해 호스트에 간접으로 커플링된 하나 또는 둘 이상의 SSD들의 예시적인 실시예로서, SSD(101)의 하나 또는 둘 이상의 사례들의 각각은 호스트(102)에 간접으로 각각 커플링된다. 각각의 간접 커플링은 스위치/패브릭/중간 제어기(103)에 커플링된 외부 인터페이스들(110), 및 호스트(102)에 커플링하는 중간 인터페이스들(104)의 각각의 사례를 통해 이루어진다.
[0210] 스위치/패브릭/중간 제어기(103)를 포함하는 실시예들 중 일부는 또한 메모리 인터페이스(180)를 통해 커플링되고 SSD들에 의해 액세스가능한 카드 메모리(112C)를 포함한다. 다양한 실시예들에서, SSD들, 스위치/패브릭/중간 제어기, 및/또는 카드 메모리 중 하나 또는 둘 이상이 물리적으로 식별가능한 모듈, 카드 또는 플러그가능한 엘리먼트(예를 들어, I/O 카드(116)) 상에 포함된다. 일부 실시예들에서, SSD(101)(또는 그의 변형들)는 호스트(102)로서 동작하는 개시자에 커플링되는 SAS 드라이브 또는 SATA 드라이브에 대응한다.
[0211] 호스트(102)는 OS(105), 드라이버(107), 애플리케이션(109) 및 멀티-디바이스 관리 소프트웨어(114)의 다양한 조합들과 같은 호스트 소프트웨어(115)의 다양한 엘리먼트들을 실행하도록 가능해진다. 점선-화살표(107D)는 호스트 소프트웨어 ←→ I/O 디바이스 통신을 나타내며, 예를 들어, SSD(101)의 사례들 중 하나 또는 둘 이상에/로부터 및 드라이버(107)를 통한 OS(105), 드라이버(107) 및 애플리케이션(109) 중 임의의 하나 또는 둘 이상으로부터/에, 드라이버(107)를 통하거나 VF로서 직접 데이터가 송신/수신된다.
[0212] OS(105)는 SSD와 인터페이싱하기 위한 (개념적으로 드라이버(107)에 의해 도시되는) 드라이버들로 동작하도록 포함하고 및/또는 가능해진다. 윈도우즈의 다양한 버전들(예를 들어, 95, 98, ME, NT, XP, 2000, 서버, 비스타 및 7), 리눅스의 다양한 버전들(예를 들어, 레드 햇(Red Hat), 데비앙(Debian) 및 Ubuntu), 및 MacOS의 다양한 버전들(예를 들어, 8, 9 및 X)이 OS(105)의 예들이다. 다양한 실시예들에서, 드라이버들은 SATA, AHCI 또는 NVM 익스프레스와 같은 표준 인터페이스 및/또는 프로토콜로 동작가능한 (때때로 "수축-포장된(shrink-wrapped)" 또는 "사전-설치된"이라 칭해지는) 표준 및/또는 일반 드라이버들이거나, 임의선택적으로 커스토마이징되고 및/또는 SSD(101)에 특정한 커맨드들의 이용을 가능하게 하도록 벤더 특정된다. 일부 드라이브들 및/또는 드라이버들은 커스토마이징된 애플리케이션이 심지어 일반 드라이버로 SSD(101)에 특정한 커맨드들을 이용하게 할 수 있는, SSD(101)에 직접 커맨드들을 전달하기 위해 최적화된 NAND 액세스(때때로 ONA라 칭해짐) 또는 직접 NAND 액세스(때때로 DNA로 칭해짐) 기술들을 통해 애플리케이션(109)과 같은 애플리케이션-레벨 프로그램들을 가능하게 하는 통과 모드들을 갖는다. ONA 기술들은: 비-표준 수정자들(힌트들)의 이용; 벤더-특정 커맨드들의 이용; 압축성에 따른 실제 NVM 사용과 같은 비-표준 통계들의 전달; 및 다른 기술들 중 하나 또는 둘 이상을 포함한다. DNA 기술들은: NVM에 대한 비매핑된 판독, 기록 및/또는 소거 액세스를 제공하는 벤더-특정 또는 비-표준 커맨드들의 이용; I/O 디바이스가 그렇지 않으면 행하는 데이터의 포맷팅을 바이패싱함으로써와 같이, NVM에 대한 더욱 직접 액세스를 제공하는 비-표준 또는 벤더-특정 커맨드들의 이용; 및 다른 기술들 중 하나 또는 둘 이상을 포함한다. 드라이버의 예들은 ONA 또는 DNA 지원이 없는 드라이버, ONA-가능한 드라이버, DNA-가능한 드라이버 및 ONA/DNA-가능한 드라이버이다. 드라이버의 추가적인 예들은 벤더-제공된, 벤더-발전된, 및/또는 벤더-강화된 드라이버, 및 클라이언트-제공된, 클라이언트-발전된 및/또는 클라이언트-강화된 드라이버이다.
[0213] 애플리케이션-레벨 프로그램들의 예들은 ONA 또는 DNA 지원이 없는 애플리케이션, ONA-가능한 애플리케이션, DNA-가능한 애플리케이션 및 ONA/DNA-가능한 애플리케이션이다. 점선 화살표(109D)는 애플리케이션 ←→ I/O 디바이스 통신을 나타내며(예를 들어, 애플리케이션을 위한 VF를 통한 바이패스 또는 드라이버를 통한 바이패스), 예를 들어, ONA-가능한 애플리케이션 및 ONA-가능한 드라이버는 중재자로서 OS를 이용하는 애플리케이션이 없이, SSD와 통신한다. 점선-화살표(109V)는 애플리케이션 ←→ I/O 디바이스 통신을 나타내며(예를 들어, 애플리케이션을 위한 VF를 통한 바이패스), 예를 들어, DNA-가능한 애플리케이션 및 DNA-가능한 드라이버는 중재자로서 OS 또는 드라이버를 이용하는 애플리케이션이 없이, SSD와 통신한다.
[0214] NVM(199)의 하나 또는 둘 이상의 일부분들은 일부 실시예들에서, 예를 들어, 펌웨어(106)의 펌웨어 저장을 위해 이용된다. 펌웨어 저장은 하나 또는 둘 이상의 펌웨어 이미지들(또는 그 일부분들)을 포함한다. 펌웨어 이미지는 예를 들어, SSD 제어기(100)의 CPU 코어(172)에 의해 실행된 펌웨어의 하나 또는 둘 이상의 이미지들을 갖는다. 펌웨어 이미지는 다른 예에서 예를 들어, 펌웨어 실행 동안 CPU 코어에 의해 참조되는, 정수들, 파라미터 값들 및 NVM 디바이스 정보 중 하나 또는 둘 이상의 이미지들을 갖는다. 펌웨어의 이미지들은 예를 들어, 현재의 펌웨어 이미지 및 제로 또는 그 이상의 (펌웨어 업데이트들에 관하여) 이전의 펌웨어 이미지들에 대응한다. 다양한 실시예들에서, 펌웨어는 일반, 표준, ONA 및/또는 DNA 동작 모드들을 제공한다. 일부 실시예들에서, 펌웨어 동작 모드들 중 하나 또는 둘 이상은 임의선택적으로 드라이버에 의해 전달되고 및/또는 제공되는 키들 또는 다양한 소프트웨어 기술들을 통해 가능해진다(예를 들어, 하나 또는 둘 이상의 API들이 "로킹해제"된다).
[0215] 스위치/패브릭/중간 제어기를 결여하는 일부 실시예들에서, SSD는 외부 인터페이스들(110)을 통해 직접 호스트에 커플링된다. 다양한 실시예들에서, SSD 제어기(100)는 RAID 제어기와 같은, 다른 제어기들의 하나 또는 둘 이상의 중간 레벨들을 통해 호스트에 커플링된다. 일부 실시예들에서, SSD(101)(또는 그의 변형들)는 SAS 드라이브 또는 SATA 드라이브에 대응하며, 스위치/패브릭/중간 제어기(103)는 차례로 개시자에 커플링되는 확장자에 대응하거나, 대안적으로 스위치/패브릭/중간 제어기(103)는 확장자를 통해 개시자에 간접으로 커플링되는 브리지에 대응한다. 일부 실시예들에서, 스위치/패브릭/중간 제어기(103)는 하나 또는 둘 이상의 PCIe 스위치들 및/또는 패브릭들을 포함한다.
[0216] 호스트(102)가 컴퓨팅 호스트(예를 들어, 컴퓨터, 워크스테이션 컴퓨터, 서버 컴퓨터, 저장 서버, SAN, NAS 디바이스, DAS 디바이스, 저장 기기, PC, 랩톱 컴퓨터, 노트북 컴퓨터 및/또는 넷북 컴퓨터)인 실시예들 중 일부와 같은 다양한 실시예들에서, 컴퓨팅 호스트는 임의선택적으로 하나 또는 둘 이상의 로컬 및/또는 원격 서버들(예를 들어, 임의선택적 서버들(118))과 (예를 들어, 임의선택적 I/O & 저장 디바이스들/자원들(117) 및 임의선택적 LAN/WAN(119)을 통해) 통신하도록 가능해진다. 통신은 예를 들어, SSD(101) 엘리먼트들 중 임의의 하나 또는 둘 이상의 로컬 및/또는 원격 액세스, 관리 및/또는 사용을 가능하게 한다. 일부 실시예들에서, 통신은 전적으로 또는 부분적으로 이더넷을 통한다. 일부 실시예들에서, 통신은 전적으로 또는 부분적으로 파이버 채널을 통한다. LAN/WAN(119)은 다양한 실시예들에서, 서버 팜(farm)에서의 네트워크, 네트워크 커플링 서버 팜들, 메트로-영역 네트워크 및 인터넷 중 임의의 하나 또는 둘 이상과 같은 로컬 및/또는 광역 네트워크들을 나타낸다.
[0217] 다양한 실시예들에서, SSD 제어기 및/또는 하나 또는 둘 이상의 NVM들과 조합하는 컴퓨팅-호스트 플래시 메모리 제어기는 USB 저장 컴포넌트, CF 저장 컴포넌트, MMC 저장 컴포넌트, eMMC 저장 컴포넌트, 전폭기 저장 컴포넌트, UFS 저장 컴포넌트, SD 저장 컴포넌트, 메모리 스틱 저장 컴포넌트 및 xD-화상 카드 저장 컴포넌트와 같은 비-휘발성 저장 컴포넌트로서 구현된다.
[0218] 다양한 실시예들에서, SSD 제어기(또는 컴퓨팅-호스트 플래시 메모리 제어기)의 전부 또는 임의의 일부분들, 또는 그의 기능들은 제어기가 커플링되는 호스트(예를 들어, 도 1b의 호스트(102))에 구현된다. 다양한 실시예들에서, SSD 제어기(또는 컴퓨팅-호스트 플래시 메모리 제어기)의 전부 또는 임의의 부분들, 또는 그 기능들이 하드웨어(예를 들어, 로직 회로), 소프트웨어 및/또는 펌웨어(예를 들어, 드라이버 소프트웨어 또는 SSD 제어 펌웨어), 또는 그의 임의의 조합을 통해 구현된다. 예를 들어, (도 1a의 ECC(161) 및/또는 ECC-X(135)와 유사한 바와 같은) ECC 유닛의 또는 그와 관련된 기능은 호스트 상의 소프트웨어를 통해 부분적으로 및 SSD 제어기에서의 펌웨어와 하드웨어의 조합을 통해 부분적으로 구현된다. 다른 예에서, (도 1a의 재생 처리기(151)와 유사한 바와 같은) 재생 처리기 유닛의 또는 그와 관련된 기능은 호스트 상의 소프트웨어를 통해 부분적으로 및 컴퓨팅-호스트 플래시 메모리 제어기에서의 하드웨어를 통해 부분적으로 구현된다.
매핑 동작
[0219] 도 2는 LBA의 LPN 부분을 매핑하는 일 실시예의 선택된 상세들을 도시한다. 일부 실시예들에서, 판독 유닛은 NVM의 페이지의 일부분과 같은 독립적으로 판독가능한 NVM의 미세 입자이다. 추가적인 실시예들에서, 판독 유닛은 검사 비트들에 의해 보호된 모든 데이터와 함께 (하위-레벨) 에러-정정 코드의 검사 비트들(때때로, 리던던시라 칭함)에 대응한다. 예를 들어, 도 1a의 ECC(161)는 LDPC 코드를 통해서와 같은 검사 비트들을 통한 에러 정정을 구현하며, 판독 유닛은 LDPC 코딩 비트들에 의해 보호되는 데이터 비트들에 더하여 LDPC 코드를 구현하는 코딩 비트들에 대응한다.
[0220] 일부 실시예들에서, 맵(141)은 (도 1a에 도시된 바와 같은) 테이블(143)을 통해서와 같이, LBA(211)의 LPN(213) 부분을 LPN(221)을 위한 맵 정보로 매핑한다. (LPN(221)을 위한 맵 정보와 같은) LPN을 위한 맵 정보는 때때로 맵 입력이라 칭해진다. 맵(141)은 LPN을 대응하는 맵 입력과 관련시킨다고 한다. 다양한 실시예들에서, 매핑은 하나 또는 둘 이상의 관련 탐색들을 통해, 하나 또는 둘 이상의 비-관련 탐색들을 통해, 및/또는 하나 또는 둘 이상의 다른 기술들을 통한다.
[0221] 일부 실시예들에서, SSD 제어기(100)는 잠재적으로 및/또는 활성적으로 사용중인 각 LPN에 대한 하나의 맵 입력을 유지한다.
[0222] 일부 실시예들에서, LPN(221)에 대한 맵 정보는 각각의 판독 유닛 어드레스(223) 및 판독 유닛들에서의 길이(225)를 포함한다. 일부 실시예들에서, 길이 및/또는 기간(span)은 예를 들어, 판독 유닛들에서의 길이(225)의 전부 또는 임의의 부분들에서 기간으로부터의 오프셋으로서 길이를 저장함으로써와 같이, 저장되어 인코딩된다. 추가적인 실시예들에서, 제 1 LPN은 제 1 맵 입력과 관련되고, (제 1 LPN과 다르지만, 제 1 LPN에 의해 지칭된 논리적 페이지와 동일한 크기의 논리적 페이지를 지칭하는) 제 2 LPN은 제 2 맵 입력과 관련되며, 제 1 맵 입력의 판독 유닛들에서의 각 길이는 제 2 맵 입력의 판독 유닛들에서의 각각의 길이와 다르다.
[0223] 다양한 실시예들에서, 동일한 시간 지점에서, 제 1 LPN은 제 1 맵 입력과 관련되고, (제 1 LPN과 다른) 제 2 LPN은 제 2 맵 입력과 관련되며, 제 1 맵 입력의 각각의 판독 유닛 어드레스는 제 2 맵 입력의 각각의 판독 유닛 어드레스와 동일하다. 추가적인 실시예들에서, 제 1 LPN과 관련된 데이터 및 제 2 LPN과 관련된 데이터는 둘 다 NVM(199)에서의 동일한 디바이스의 동일한 물리적 페이지에 저장된다.
[0224] 다양한 실시예들에 따르면, 판독 유닛 어드레스(223)는: NVM에서의 시작 어드레스; NVM에서의 종료 어드레스; 선행하는 것 중 임의의 오프셋; 및 LPN(213)과 관련된 NVM의 일부분을 식별하기 위한 임의의 다른 기술들 중 하나 또는 둘 이상과 관련된다.
[0225] 도 3은 판독 유닛들의 양자들로 측정된 길이를 집합적으로 갖는 다양한 판독 유닛들로서 조직된 판독 데이터를 생성하기 위해 판독 유닛 어드레스에서 NVM을 액세스하는 실시예의 선택된 상세들을 도시한다. 다양한 실시예들에 따르면, 제 1 판독 유닛(313)은: NVM의 어드레스 공간에서의 최저 어드레스를 갖는 판독 데이터(311)에서의 판독 유닛들 중 하나; 판독 유닛들 중 고정된 하나; 판독 유닛들 중 임의의 하나; 판독 유닛들 중 가변의 하나; 및 임의의 다른 기술에 의해 선택된 판독 유닛들 중 하나 중 하나 또는 둘 이상이다. 다양한 실시예들에서, SSD 제어기(100)는 단지 판독 유닛들에서의 길이(225)에 의해 특정된 판독 유닛들의 수를 판독함으로써 판독 데이터(311)를 생성하고 NVM(199)을 액세스하도록 가능해진다.
[0226] 도 4a는 판독 유닛(404A)으로서 (도 3의 판독 유닛들(313 또는 315)과 같은) 판독 유닛의 일 실시예의 선택된 상세들을 도시한다. 다양한 실시예들 및/또는 사용 시나리오들에서, 헤더 1(411A) 내지 헤더 N(419A)은 인접하며, 헤더들의 각각에 의해 (각각의 오프셋들을 통해서와 같이) 식별된 각각의 데이터 구역들은 헤더들 중 최종 헤더에 후속하여 인접하다. 데이터 구역들은 집합적으로 데이터 바이트들(421A)을 형성한다. 데이터 구역들은 헤더들이 저장되는 위치 순서를 매칭하는 위치 순서로 저장된다. 예를 들어, 판독 유닛의 시작에서, 제 2 헤더 및 제 3 헤더가 제 1 헤더 근처에 후속하는 제 1 헤더를 고려한다. (제 1 헤더에서의 제 1 오프셋에 의해 식별되는) 제 1 데이터 구역은 근처에서 제 3 헤더에 후속한다. (제 2 헤더에서의 제 2 오프셋에 의해 식별되는) 제 2 데이터 구역은 제 1 데이터 구역 근처에 후속한다. 유사하게, (제 3 헤더에 의해 식별되는) 제 3 데이터 구역은 제 2 데이터 구역 근처에 후속한다.
[0227] 도 4b는 판독 유닛(401B)으로서 (도 3의 판독 유닛들(313 또는 315)과 같은) 판독 유닛의 다른 실시예의 선택된 상세들을 도시한다. 다양한 실시예들 및/또는 사용 시나리오들에서, 헤더 마커(HM)(410B)는 후속하는 인접 헤더들(헤더 1(411B), 헤더 2(412B)..., 헤더 N(419B))의 수를 표시하는 (1-바이트 필드와 같은) 임의선택적 초기 필드이다. 데이터 구역들(데이터 바이트들(421B), 데이터 바이트들(422B)... 데이터 바이트들(429B))은 헤더들(헤더 1(411B), 헤더 2(412B)..., 헤더 N(419B))에 의해 각각 식별되며 헤더들이 저장되는 위치 순서의 반대인 위치 순서로 저장된다. 헤더들은 판독 유닛의 시작에서 시작하는 한편, 대응하는 데이터 구역들은 판독 유닛의 종료에서 시작한다. 일부 실시예들에서, 데이터 구역 내의 데이터 바이트들(예를 들어, 데이터 바이트들(421B), 데이터 바이트들(422B), ..., 데이터 바이트들(429B))은 순방향 순서(위치 순서를 매칭하는 바이트 순서)로 배열되는 한편, 다른 실시예들에서, 데이터 바이트들은 역방향 순서(위치 순서에 관하여 역전된 바이트 순서)로 배열된다. 일부 실시예들에서, 헤더 마커는 헤더들 및 데이터 바이트들이 (예를 들어, 도 4a에 도시된 바와 같은) 동일한 위치 순서로 저장되는 판독 유닛들에 이용된다.
[0228] 일부 실시예들에서, 임의선택적 패딩 바이트들(431A)(또는 431B)은 특정 LPN과 관련된 데이터의 입도에 따른다. 예를 들어, 일부 실시예들에서, 데이터 바이트들(421A)(또는 집합적으로 데이터 바이트들(421B), 데이터 바이트들(422B), ..., 데이터 바이트들(429B))은 헤더 1(411A) 내지 헤더 N(419A)(또는 헤더 1(411B), 헤더 2(412B), ..., 헤더 N(419B)) 중 최종 하나를 제외한 전부와 관련된 데이터를 저장한 후에, 8 바이트들과 같은 나머지 공간의 고정된 양보다 작은 경우에, 최종 헤더와 관련된 LPN에 대한 데이터가 후속적인 판독 유닛에서 시작한다. 추가적인 실시예들에서, 최종 헤더에서의 특정 오프셋 값(예를 들어, 모두 1들)은 최종 헤더와 관련된 LPN에 대한 데이터가 후속하는 판독 유닛에서 시작하는 것을 표시한다.
[0229] 도 5는 다수의 필드들을 갖는 (도 4a의 헤더 1(411A) 내지 헤더 N(419A) 또는 도 4b의 헤더 1(411B) 내지 헤더(419B) 중 임의의 것과 같은) 헤더의 일 실시예의 선택된 상세들을 도시한다. 일부 실시예들에서, 헤더들은 고정된-길이이다(예를 들어, 각 헤더는 동일한 수의 바이트들 길이이다). 헤더(501)는 필드들 타입(511), 최종 표시자(513), 플래그들(515), LPN(517), 길이(519) 및 오프셋(521)을 포함한다. 타입 필드는 데이터 바이트들의 카테고리를 식별한다. 예를 들어, 타입 필드는 데이터 바이트들의 카테고리가 호스트 데이터(예를 들어, 논리적 페이지 데이터) 또는 시스템 데이터(예를 들어, 맵 정보 또는 검사지점 정보) 중 하나임을 표시한다. 최종 필드는 헤더가 데이터 바이트들 전의 최종 헤더임을 표시한다. 헤더 마커를 갖는 일부 실시예들에서, 최종 필드는 임의선택적으로 생략된다. LPN 필드는 헤더가 관련되는 LPN이다. LPN 필드는 예를 들어, 특정 LPN을 매칭하는 LPN 필드를 갖는 하나에 대한 헤더들을 탐색함으로써 특정 LPN과 관련되는 헤더들 중 특정한 하나를 결정하기 위해 헤더들의 파싱을 인에이블한다. 길이 필드는 (예를 들어, 헤더(501)와 관련된 데이터 바이트들(421A)에 얼마나 많은 데이터가 존재하는지) 데이터 바이트들의 바이트들로의 길이이다. 일부 실시예들에서, 오프셋 필드에서의 오프셋은 특정 입도(예를 들어, 8 바이트 입도)에 따라 라운딩된다.
[0230] 다양한 실시예들에서, 특정 LPN과 관련된 일부 또는 전부의 정보는 특정 LPN과 관련된 맵 입력, 특정 LPN과 관련된 헤더 또는 둘 다에 저장된다. 예를 들어, 일부 실시예들에서, 길이(519)의 일부 또는 전부가 헤더에서보다는 오히려 맵에 저장된다.
[0231] 도 6은 다수의 NVM 디바이스들의 블록들, 페이지들 및 판독 유닛들의 실시예의 선택된 상세들을 도시한다. 예를 들어, 601, 603, ... 및 609는 도 1a의 하나 또는 둘 이상의 개별적인 플래시 다이(194)의 각각의 하나들에 대응한다.
[0232] 일부 실시예들에서, 디바이스들(601, 603, ... 및 609)은 NVM(199)의 전부보다 적은 일부분이다. 예를 들어, 다양한 실시예들에서, 데이터는 디바이스들의 다수 그룹들에 걸쳐 독립적으로 스트라이프되며, 여기서 디바이스들의 그룹들 각각은 독립적으로 액세스가능하다.
[0233] (디바이스들(601, 603, ... 및 609) 중 임의의 하나와 같은) 각 디바이스는 (디바이스(601)의 블록들(631, 633, ... 및 639); 디바이스(603)의 블록들(661, 663, ... 및 669); 등과 같은) 블록들로서 조직된 저장소를 제공한다. 일부 실시예들에서, 각 디바이스는 진정수의 블록들을 포함하며 블록은 소거의 최소 양자이다. 블록들은 차례로 (블록(631)의 페이지들(621, 623, ... 및 629); 블록(661)의 페이지들(651, 653, ... 및 659); 등과 같은) 페이지들을 포함한다. 일부 실시예들에서, 각 블록은 진정수의 페이지들을 포함하며 페이지는 기록의 최소 양자이다. 페이지들은 차례로 (페이지(621)의 판독 유닛들(611, 613, ... 및 619); 페이지(651)의 판독 유닛들(641, 643, ... 및 649); 등과 같은) 판독 유닛들을 포함한다. 다양한 실시예들에 따르면, 하나 또는 둘 이상은: 판독 유닛은 판독 및 에러 정정의 최소 양자이다; 각 페이지는 진정수의 판독 유닛들을 포함한다; 2개 또는 그 이상의 페이지들의 관련된 그룹은 진정수의 판독 유닛들을 포함한다; 그리고 판독 유닛들은 임의선택적으로 및/또는 선택적으로 페이지 경계들에 걸친다. 디바이스들에서의 정보의 판독들 및/또는 기록들은 '판독 유닛 제 1' 순서 또는 '페이지 제 1' 순서와 같은 순서에 따라 수행된다. 도면에 도시된 판독 유닛들에 대한 판독 유닛 제 1 순서의 일 예는 판독 유닛(611)으로 시작하여 641, 671, 613, 643, 673 등이 후속하며, 679로 종료한다. 도면에 도시된 판독 유닛들에 대한 페이지 제 1 순서의 일 예는 판독 유닛(611)으로 시작하여 613, ..., 619, 641, 643, ..., 649, 671, 673 등이 후속하며, 679로 종료한다.
[0234] 일부 실시예들에서, 다양한 NVM 관리 기능들이 R-블록들의 유닛들로 수행된다. R-블록의 일 예는 플래시 메모리의 모든 다이에 걸친 논리적 슬라이스 또는 섹션이다. 예를 들어, R 플래시 다이를 갖는 플래시 메모리에서, 각 플래시 다이는 N개의 블록들을 가지며, 각 R-블록은 총 N개의 R-블록들에 대해 함께 취해지는 플래시 다이의 각각으로부터의 제 i 블록이다. 다른 예에서, R 플래시 다이를 갖는 플래시 메모리에서, 각각은 N개의 블록들을 가지며, 각 R-블록은 총 N/2 R-블록들에 대한 플래시 다이의 각각으로부터의 제 i 및 제 (i+1) 블록이다. 또 다른 예에서, 복수의 듀얼 평면 디바이스들을 갖는 플래시 메모리에서, 각 R-블록은 듀얼 평면 디바이스들로부터의 제 i 짝수 블록 및 제 i 홀수 블록이다.
상위-레벨 리던던시 기술들
[0235] 도 7a는 상위-레벨 리던던시 기술들의 다양한 실시예들의 선택된 상세들을 도시한다. 플래시 디바이스(들)(720)는 64개의 플래시 다이(플래시 다이 710.63, 710.62, 710.61, ..., 710.0)를 포함하며 인터페이스 채널(들)(730)을 통해 통신한다. 추가 플래시 디바이스(들)(740)는 최대 2개의 플래시 다이(플래시 다이(710.65 및 710.64))를 포함하며 추가 인터페이스 채널(들)(750)을 통해 통신한다. 플래시 다이는 상위-레벨 리던던시 정보를 위한 저장 및 SSD에서의 NVM과 같은 저장 서브시스템에서의 데이터 저장(예를 들어, 사용자 데이터 및/또는 사용자 자유 공간)을 제공한다. (리던던시 정보 및 데이터 저장의 맥락들에서 '사용자 데이터'의 예들은 동작 시스템 데이터, 애플리케이션 데이터, SSD 관리 데이터 등과 같은 이후의 검색을 위해 플래시 메모리 상에 저장된 리던던시 정보와 다른 모든 데이터를 포함한다.) 상위-레벨 리던던시는 적절하게 기록 동작을 완료하기 위해 판독 동작 또는 실패에 대한 (예를 들어, 하위-레벨 ECC 기능들을 통한) 에러-정정된 데이터를 제공하기 위한 실패와 같은, 예를 들어, 하나 또는 둘 이상의 다이의 하나 또는 둘 이상의 일부분들의 간헐적 또는 영구적 실패로부터 복구하는 것을 가능하게 한다.
[0236] 예를 들어, 각 플래시 다이(또는 대안적으로 각 블록 또는 각 블록 내의 각 페이지)는 실리콘 독립 엘리먼트들의 리던던트 어레이(RASIE)의 맥락에서 동작된다. (예를 들어, 특정 다이의 블록의 일부분의 ECC-정정가능하지 않은 판독 에러로 인해) 특정 플래시 다이에서 실패가 검출되는 경우에, 이에 응답하여, 특정 다이에 의해 제공된 정보를 결정하기 위해 플래시 다이의 다른 것들에 저장되는 리던던트 정보가 이용된다. 일부 실시예들 및/또는 사용 시나리오들에서, (단일 동작 동안) 하나의 플래시 다이 내의 하나의 실패로부터의 복구를 가능하게 하도록 충분한 리던던트 정보가 저장된다. 단일 실패로부터의 복구를 가능하게 하는 모드에서의 동작은 일부 실시예들에서, 상위-레벨 리던던시 정보에 대한 하나의 플래시 다이와 동등한 공간을 할당하고 관리하는 것을 포함하며, 'RASIE-1'이라 칭한다. 2개의 실패들로부터의 복구를 가능하게 하는 모드에서의 동작은 일부 실시예들에서, 상위-레벨 리던던시 정보에 대한 2개의 플래시 다이와 동등한 공간을 할당하고 관리하는 것을 포함하며, 'RASIE-2'라 칭한다.
[0237] 일부 실시예들 및/또는 사용 시나리오들에서, 다이-레벨 실패들을 관리하는 것이 목표이며, 다이 사이에 정보를 확산하는 것이 수행된다. 예를 들어, 상위-레벨 리던던시 정보는 유일하게 상위-레벨 리던던시 정보에 구체적으로 할당되는 하나 또는 둘 이상의 다이에 저장된다. 일부 실시예들 및/또는 사용 시나리오들에서, 블록-레벨 실패들을 관리하는 것이 목표이며, 다이 내의 블록들 사이에 정보를 확산하는 것이 수행된다. 예를 들어, 상위-레벨 리던던시 정보는 상위-레벨 리던던시 정보에 할당되는 하나 또는 둘 이상의 블록들에 저장되며, 할당은 블록들이 어느 특정 다이의 일부인지에 관계없이 이루어진다. 일부 실시예들 및/또는 사용 시나리오들에서, 특정-엔티티-레벨 실패들을 관리하는 것은 단지 N개의 엘리먼트들(예를 들어, RASIE-1에 대한 1 및 RASIE-2에 대한 2)이 특정 엔티티들 중 임의의 하나에 있도록 정보를 확산하는 것을 포함한다.
[0238] 플래시 다이에 기록된 (사용자) 데이터에 따라 상위-레벨 리던던시 정보가 계산되고 기록되며, 따라서 실패가 검출될 때 정보를 제공하도록 이용가능하다. 다양한 실시예들에서, 상위-레벨 리던던시 정보는 그 상위-레벨 리던던시 정보가 관련되는 (사용자) 데이터의 기록에 관하여 이전, 이후 또는 특정 시간 순서 없이 플래시 다이에 기록된다.
[0239] 도면은 다음의 표에 요약된 바와 같은 RASIE 동작 모드들의 다양한 실시예들을 도시한다.
[0240] 더 구체적으로, RASIE-1 모드들에서, 하나의 다이에 동등한 공간은 상위-레벨 리던던시 정보에 할당된다. RASIE-1 모드 1-0에서, 상위-레벨 리던던시 정보가 데이터 저장(예를 들어, 사용자 데이터 및/또는 사용자 자유 공간)을 위해 이용가능한 다이(플래시 다이 710.62...710.0)를 63개를 남기면서, 플래시 디바이스(들)(720) 중 하나의 다이(예를 들어, 플래시 다이(710.63))에 저장됨에 따라, 추가 플래시 디바이스(들)(740)가 이용되지 않는다. RASIE-1 모드 1-1에서, 추가 플래시 디바이스(들)(740) 중 하나의 다이가 이용되며, 모든 플래시 디바이스(들)(720)(64개의 다이)이 데이터 저장을 위해 이용가능하게 남긴다.
[0241] RASIE-2 모드들에서, 2개의 다이와 동등한 공간은 상위-레벨 리던던시 정보에 할당된다. RASIE-2 모드 2-0에서, 상위-레벨 리던던시 정보가 데이터 저장을 위해 이용가능한 다이(플래시 다이 710.61...710.0)를 62개를 남기면서, 플래시 디바이스(들)(720) 중 2개의 다이(예를 들어, 플래시 다이(710.63) 및 플래시 다이(710.62))에 저장됨에 따라, 추가 플래시 디바이스(들)(740)가 이용되지 않는다. RASIE-1 모드 2-1에서, 상위-레벨 리던던시 정보가 데이터 저장을 위해 이용가능한 다이(플래시 다이 710.62...710.0)를 63개를 남기면서, 플래시 디바이스(들)(720) 중 하나의 다이(예를 들어, 플래시 다이(710.63))에 부분적으로 저장됨에 따라, 추가 플래시 디바이스(들)(740) 중 하나의 다이가 이용된다(예를 들어, 플래시 다이(710.64)). RASIE-2 모드 2-2에서, 추가 플래시 디바이스(들)(740) 중 2개의 다이가 이용되며(예를 들어, 플래시 다이(710.65) 및 플래시 다이(710.64)), 모든 플래시 디바이스(들)(720)(64개의 다이)가 데이터 저장을 위해 이용가능하게 남긴다.
[0242] 일부 실시예들에서, 모든 사용 시나리오들에서 이용되지 않는 다이는 덧붙여지지 않는다. 예를 들어, (다른 RASIE 모드들에서가 아닌) RASIE 2-0 모드 및 RASIE 1-0 모드에서만 동작가능한 시스템에서, 추가 플래시 디바이스(들)(740) 는 덧붙여지지 않는다.
[0243] 일부 실시예들에서, 상위-레벨 리던던시 정보가 "전용된" 다이(예를 들어, RASIE-1 모드 1-0에서의 플래시 다이(710.63) 또는 RASIE-2 모드 2-2에서의 플래시 다이(710.65) 및 플래시 다이(710.64))에 전적으로 저장된다. 다른 실시예들에서, 상위-레벨 리던던시 정보가 다이의 임의의 것에 저장되며, 따라서 예를 들어, RASIE-1 모드 1-0에서 플래시 다이(710.62)가 상위-레벨 리던던시 정보를 위해 이용되는 한편, 플래시 다이(710.63) 및 플래시 다이(710.61...710.0)가 데이터 저장을 위해 이용된다. 일부 실시예들 및/또는 사용 시나리오들에서, 상위-레벨 리던던시 정보가 시간을 통해 다른 다이(및/또는 그의 일부분들)에 저장되며, 따라서 예를 들어, 제 1 시간 주기에서 제 1 플래시 다이는 상위-레벨 리던던시 정보를 유지하는 한편 제 2 시간 주기에서 제 2 플래시 다이는 상위-레벨 리던던시 정보를 유지한다.
[0244] 다양한 실시예들에서, 얼마나 많은 플래시 다이가 이용가능한지에 따라 복수의 RASIE 1-0 모드들(및 복수의 RASIE 2-0 모드들)이 존재한다. 예를 들어, (상기의 표에 도시된 바와 같은) 제 1 RASIE 1-0 모드에서, 플래시 다이(710.63)는 상위-레벨 리던던시 정보를 저장하며, 플래시 다이(710.62 ... 710.0)는 데이터 저장을 위해 이용가능하다. 제 2 RASIE 1-0 모드에서, 플래시 다이(710.63)는 더 이상 이용가능하지 않으며, 플래시 다이(710.62)는 상위-레벨 리던던시 정보를 저장하며, 플래시 다이(710.61 ... 710.0)는 데이터 저장을 위해 이용가능하여, 이용가능한 데이터 저장량이 1개의 다이만큼 감소한다. 데이터 저장을 위해 이전에 이용가능한 다이(또는 그 임의의 일부분들)가 상위-레벨 리던던시 정보에 대한 다이(또는 그 일부분들)의 이용으로 인해 데이터 저장을 위해 더 이상 이용가능하지 않은 경우의 RASIE 모드들은 때때로 감소된-용량 RASIE 모드들로 지칭된다.
[0245] 일부 실시예들에서, 상위-레벨 리던던시 정보는 상위-레벨 리던던시 정보에 의해 보호되는 사용자 데이터로서 동일한 및/또는 유사한 하위-레벨 에러 정정 코딩 방식을 이용하여 저장된다. 상위-레벨 리던던시 정보를 보호하기 위해 하위-레벨 에러 정정 방식을 이용하는 것은 사용자 데이터에서의 정정가능하지 않은 하위-레벨 에러가 결정되는 동일한 및/또는 유사한 방식으로, 상위-레벨 리던던시 정보에서 정정가능하지 않은 에러가 존재하는지를 결정하는 것을 가능하게 한다.
[0246] 도 7b는 R-블록들의 선택된 상세들을 도시한다. 플래시 다이는 모든 다이에 걸친 논리적 슬라이스들 또는 섹션들에서 (예를 들어, 재생 및/또는 소거를 위해) 관리되며, 슬라이스들/섹션들은 R-블록들로 지칭된다. 도면은 66개의 플래시 다이(플래시 다이(710.65... 710.0))를 갖는 실시예를 도시한다. 블록들, 페이지들, 및 R-블록들로서의 블록들의 관리가 도시된다. 각 플래시 다이는 (플래시 다이(710.65)의 블록(710.65B0), 블록(710.65B1) ... 블록(710.65BB)와 같은) N개의 블록들을 갖는 것으로 도시된다. 각 R-블록은 플래시 다이의 각각으로부터의 제 i 블록이며, 함께 취해진다(R-블록(760.0)은 플래시 다이(710.65)로부터의 블록(710.65B0), 플래시 다이(710.64)(명시적으로 도시되지 않음)로부터의 블록 0 등 플래시 다이(710.0)의 블록(710.0B0)임). 따라서 총 N개의 R-블록들이 존재한다(R-블록(760.0), R-블록(760.1) ... R-블록(760.R))
[0247] 다양한 실시예들에서, R-블록 내의 데이터의 기록 및/또는 스트라이핑 순서는 모든 디바이스들(예를 들어, 도 6의 스트라이핑 방향(600)에 의해 개념적으로 제안된 바와 같이 최저에서 최고로 넘버링된 디바이스들)에 걸쳐 페이지(예를 들어, 최저에서 최고) 제 1 이며, 그 후에 (모든 디바이스들에 걸친) 다음의 최상위 페이지 등이며, R-블록의 최종 페이지 전반으로 계속된다. 구체적으로 도 7의 R-블록(760.0)에 관하여, 예시적인 순서는 페이지(710.0P0)로 시작하며, 그 다음에 플래시 다이(710.1)의 제 1 블록에서의 제 1 페이지 등 페이지(710.65P0)까지 계속된다. 예시적인 순서는 페이지(710.0P1)로 계속하며, 그 다음에 플래시 다이(710.1)의 제 1 블록에서의 제 2 페이지 등 페이지(710.65P1)까지 계속된다. 예시적인 순서는 페이지(710.0PP)로 완료하며, 그 다음에 플래시 다이(710.1)의 제 1 블록에서의 최종 페이지 등 페이지(710.65PP)로 종료한다.
[0248] R-블록의 다른 예는 함께 취해지는, 플래시 다이의 각각으로부터의 제 i 블록 및 제 (i+1) 블록이다(예를 들어, 플래시 다이(710.65)로부터의 블록들(0 및 1), 플래시 다이(710.64)로부터의 블록들(0 및 1) 및 등 플래시 다이(710.0)으로부터의 블록들(0 및 1)). 각 플래시 다이에 N개의 블록들이 존재하는 경우에, 따라서 N/2개의 R-블록들이 존재한다. R-블록의 또 다른 예는 복수의 듀얼 평면 디바이스들의 각각으로부터의 제 i 짝수 및 홀수 블록들이다. 일부 블록들이 동작가능하지 않을 때조차, R-블록들이 각 다이로부터 하나의 블록을 갖는 것을 보증하기 위해 가상 및 물리적 블록 어드레스들 사이의 매핑을 포함하여, R-블록들로서의 관리를 위한 플래시 다이 블록들의 다른 배열들이 고려된다. 다양한 실시예들에서, 각 플래시 다이에서의 N 블록들 중 일부는 스페어들로서 이용되어, 가상 및 물리적 블록 어드레스들 사이의 매핑은 R-블록들에서의 블록들 중 결함있는 것들을 교체하기 위해 스페어(그렇지 않으면 비사용되는) 블록들을 갖는다.
[0249] 블록들이 R-블록을 형성하는 일부로서 쌍들로 또는 다른 관련된 그룹들로 취급되는 다양한 실시예들에서, 블록들의 관련된 그룹의 각 블록으로부터의 각각의 페이지들이 또한 적어도 더 큰 멀티-블록 페이지를 기록, 형성하기 위한 유닛으로서 취급된다. 예를 들어, 상기 듀얼 평면 예에 계속하여, 짝수 블록들 중 특정한 하나의 제 1 페이지 및 홀수 블록들 중 관련된 하나의 제 1 페이지가 기록을 위한 유닛 및 임의선택적으로 및/또는 선택적으로 판독을 위한 유닛으로서 취급된다. 유사하게, 특정 짝수 블록의 제 2 페이지 및 관련된 홀수 블록의 제 2 페이지가 유닛으로서 취급된다. 다양한 실시예들에 따르면, 본원에 이용된 바와 같은 VNM의 페이지는: NVM의 단일 페이지; NVM의 멀티-블록 페이지; 임의선택적으로 및/또는 선택적으로 판독을 위한 하나 또는 둘 이상의 개별 페이지들로서 취급되는 기록을 위한 NVM의 멀티-블록 페이지; 및 NVM의 페이지들의 임의의 다른 그룹핑 또는 관련 중 하나 또는 둘 이상을 지칭한다.
[0250] 일부 실시예들에서, 상위-레벨 리던던시 정보가 데이터의 다른 일부분들에 대해 다른 다이에 저장된다. 예를 들어, 플래시 다이가 R-블록들에서 관리되는 일부 실시예들에서, 상위-레벨 리던던시 정보가 서로 다른 R-블록들에 대해 다른 플래시 다이에 저장된다. 예를 들어, 플래시 다이(710.0)의 블록 0을 포함하는 R-블록을 위한 상위-레벨 리던던시 정보가 플래시 다이(710.0)에 저장되는 한편, 플래시 다이(710.0)의 블록 1을 포함하는 R-블록을 위한 상위-레벨 리던던시 정보가 플래시 다이(710.1)에 저장되는 등이다. 플래시 다이가 R-블록들에서 관리되는 일부 실시예들과 같은 일부 실시예들에서, 상위-레벨 리던던시 정보가 의존하는 데이터가 알려지고 및/또는 기록된 후에 상위-레벨 리던던시 정보가 기록된다.
[0251] 일부 사용 시나리오들에서, NVM 엘리먼트(예를 들어, 도 6의 디바이스(601)의 블록(639)과 같은 디바이스의 블록)의 하나 또는 둘 이상의 일부분들은 동작가능하지 않거나 동작 동안 동작가능하지 않게 된다. 일부 실시예들에서, 동작가능하지 않은 부분들은 가상 및 물리적 블록 어드레스들을 통해(예를 들어, 도 1a의 맵(141) 및/또는 테이블(143)을 통해 수행된 프로세싱을 통해) 매핑 아웃된다. 대안적으로, 동작가능하지 않은 부분들은 (명시적으로 매핑 아웃되기보다는 오히려) 스킵된다. R-블록들에 기초한 일부 실시예들에서, 스킵핑은 R-블록들 중 일부가 서로 다른 수의 블록들을 갖게 발생시킨다. 예를 들어, 블록(710.0B0)이 결함이 있으며 이용가능하지 않은 경우에, R-블록(760.0)은 R-블록(760.1)보다 하나 더 적은 블록을 갖는다. 상위-레벨 리던던시 정보는 예를 들어, 각 R-블록의 최종 블록인 가변 위치에서 (R-블록당) 기록된다.
[0252] 다양한 실시예들에서, 도 7a의 하나 또는 둘 이상의 엘리먼트들은 도 1a의 하나 또는 둘 이상의 엘리먼트들에 대응한다. 예를 들어, 플래시 디바이스(들)(720) 및 추가 플래시 디바이스(들)(740)는 집합적으로 NVM(199)에 대응하며 인터페이스 채널(들)(730) 및 추가 인터페이스 채널(들)(750)은 집합적으로 디바이스 인터페이스들(199)에 대응한다. 다른 예에서, 플래시 다이(710.65 ... 710.0)은 집합적으로 플래시 다이(194)의 사례들에 대응한다. 다른 예에서, 플래시 디바이스(들)(720) 및/또는 추가 플래시 디바이스(들)(740)의 플래시 디바이스들 중 하나 또는 둘 이상은 플래시 디바이스들(192)의 사례들 중 하나 또는 둘 이상에 대응한다. 다양한 실시예들에서, 도 1a의 하나 또는 둘 이상의 엘리먼트들은 본원에 설명된 RASIE 동작 모드들에 따라 상위-레벨 리던던시 정보에 적어도 부분적으로 기초하여 사용자 데이터를 복구하고 및/또는 상위-레벨 리던던시 정보를 관리한다. 예를 들어, CPU(171)의 소프트웨어 실행 능력들 중 일부분은 다양한 RASIE 동작 모드들에 따라 상위-레벨 리던던시 정보의 계산을 관리하기 위해 이용된다. 다른 예에서, 데이터 프로세싱(121) 및/또는 ECC-X(135)는 다양한 RASIE 동작 모드들에 따른 사용자 데이터의 복구 및/또는 상위-레벨 리던던시 정보의 계산을 위해 특화되고 및/또는 그 계산에 전용되는 하드웨어 엘리먼트들을 포함한다. 또 다른 예에서, ECC(161)는 플래시 다이의 일부분의 ECC-정정가능하지 않은(하위-레벨) 판독 에러를 검출하며, ECC-X(135)는 RASIE(상위-레벨) 판독 에러를 검출하고 및/또는 그의 정정을 가능하게 한다.
[0253] 다양한 실시예들에서, 인터페이스 채널(730)은 다양하게 하나, 4개, 8개 또는 16개의 채널들을 가지며, 추가 인터페이스 채널(들)(750)은 다양하게 하나 또는 2개의 채널들을 갖는다. 다양한 실시예들에서, 플래시 디바이스(들)(720)는 하나, 2개, 4개, 8개 또는 16개의 디바이스들로서 구현되며, 각각은 플래시 다이 중 64개, 32개, 16개, 8개 및 4개를 갖는다. 다양한 실시예들에서, 추가 플래시 디바이스(들)(740)는 하나 또는 2개의 다이를 갖는 하나의 디바이스로서 구현되거나 각각 하나의 다이를 갖는 2개의 디바이스들로서 구현된다. 일부 실시예들에서, 추가 플래시 디바이스(들)(740)의 플래시 다이는 또한 플래시 디바이스(들)(720)의 플래시 다이를 구현하는 디바이스들에 구현된다. 예를 들어, 하나의 플래시 디바이스는 66개의 플래시 다이(플래시 다이 710.65 ... 710.0)를 구현한다. 다른 예에서, 2개의 플래시 디바이스는 예를 들어, 제 1 플래시 디바이스(플래시 다이(710.65 ... 710.33)) 및 제 2 플래시 디바이스(플래시 다이(710.32 ... 710.0))에서 각각 33개의 플래시 다이를 구현한다. 플래시 다이 및 플래시 디바이스들의 다른 배열들이 고려된다. 또한 플래시 디바이스(들)(720)의 플래시 다이를 구현하는 디바이스들에서 구현되는 추가 플래시 디바이스(들)(740)를 갖는 일부 실시예들에서, 플래시 다이는 공유된 인터페이스 채널들을 통해, 또는 대안적으로 플래시 다이의 특정한 것들(또는 세트들)에 전용된 인터페이스 채널들을 통해 통신한다. 플래시 디바이스(들)(720) 및 추가 플래시 디바이스(들)(740)가 특정 수들의 플래시 다이(각각 2 및 64)로 도시되는 한편, 플래시 디바이스(들)(720)이 2, 4, 8, 16, 32 또는 128개의 플래시 다이를 갖으며, 및/또는 추가 플래시 디바이스(들)(740)가 0, 1, 또는 4개의 플래시 다이를 갖는 것과 같은 다른 실시예들이 고려된다.
[0254] 도 8은 도 7a 및/또는 도 7b에 의해 도시된 다양한 실시예들에 의해 인에이블되는 RASIE 모드들 사이를 동적으로 스위칭하는 것과 같은, RASIE로 동적 상위-레벨 리던던시 모드 관리의 일 실시예의 선택된 상세들을 도시한다. 일부 실시예들 및/또는 사용 시나리오들에서, 저장 서브시스템(예를 들어, SSD)이 제 1 상위-레벨 리던던시 모드에서 동작하는 것으로부터 제 2 상위-레벨 리던던시 모드에서 동작하는 것으로 동적으로 천이되는 경우의 우아한 성능저하의 형태가 제공된다. 천이는 전체 플래시 다이 또는 그의 하나 또는 둘 이상의 일부분들, 또는 그에 관한(판독 또는 기록 동작과 같은) 동작의 영구적 또는 간헐적 오동작과 같은 실패의 검출에 응답한다. 다양한 실시예들에 따르면, 천이는: SSD에 대한 글로벌화; SSD의 하나 또는 둘 이상의 서브세트들 상에 수행됨; 및 SSD의 하나 또는 둘 이상의 R-블록들 상에 수행됨 중 하나 또는 둘 이상이다. 예를 들어, RASIE-2 정보를 저장하는 NVM 디바이스들 중 하나의 특정 블록이 프로그래밍 동안 실패하는 경우에, 특정의(실패된) 블록을 포함하는 R-블록의 후속하는 동작은 다른 상위-레벨 리던던시 모드(예를 들어, RASIE-1 모드)로 천이하는 한편, SSD에서의 다른 R-블록들은 영향받지 않으며 RASIE-2 모드에서 계속해서 동작한다.
[0255] 도 8에 관하여, 프로세싱은 제 1 상위-레벨 리던던시 모드(제 1 상위-레벨 리던던시 모드에서 동작함(802))에 따라 플래시 다이에 배열되는 데이터 저장(예를 들어, 사용자 데이터 및/또는 사용자 자유 공간) 및 상위-레벨 리던던시 정보로 시작한다. 흐름은 그 후에 하위-레벨 정정가능하지 않은 판독 에러 또는 기록/프로그램 실패와 같은, 실패가 검출되었는지를(실패?(803)) 결정하도록 진행한다. 실패가 검출되지 않았다면, 흐름은 제 1 상위-레벨 리던던시 모드에서의 동작을 계속하도록 되돌려 진행한다. 실패가 검출되었다면, 그 후에 흐름은 제 1 상위-레벨 리던던시 모드에서 동작하는 것으로부터 제 2 상위-레벨 리던던시 모드에서 동작하는 것으로 스위칭하도록 진행한다. 스위치는 실패를 처리하기 위해 데이터 저장을 위해 이용가능한 공간을 (임의선택적으로) 감소시키기 시작한다(자유 공간을 감소시킴(804)). 제 2 상위-레벨 리던던시 모드가 제 1 상위-레벨 리던던시 모드보다 충분히 적은 상위-레벨 리던던시 정보를 이용하는 경우에, 이용가능한 공간의 감소가 생략된다. 스위치는 계속해서 제 2 상위-레벨 리던던시 모드에 따라 데이터 저장을 재조직화한다(데이터 저장(805)을 재배열함). 재조직화는 플래시 다이 중 다른 하나에 실패가 발생한 경우의 플래시 다이로부터 모든 사용자 데이터 및/또는 사용자 자유 공간을 임의선택적으로 이동시키는 것을 포함한다(사용자 자유 공간 이동은 일부 실시예들에서, 포인터들 및/또는 다른 데이터 구조 엘리먼트들의 조작에 의해 달성된다). 스위치는 제 2 상위-레벨 리던던시 모드에 따라, 실패가 발생한 플래시 다이에 저장된 임의의 사용자 데이터를, 제 1 상위-레벨 리던던시 모드의 상위-레벨 리던던시 정보를 통해 선택적으로 복원함으로써(가능하다면), 및 복원된 사용자 데이터를 플래시 다이 중 다른 것에 기록함으로써 더 계속한다(실패된 사용자 데이터를 복구/저장함(806)). 실패가 기록/프로그램 실패인 경우에 복원은 생략된다. 스위치는 제 2 상위-레벨 리던던시 모드에 따라 상위-레벨 리던던시 정보를 임의선택적으로 계산하고 플래시 다이에 기록함으로써 더 계속한다(수정된 상위-레벨 리던던시 정보를 결정/저장함(807)). 제 2 상위-레벨 리던던시 모드가 제 1 상위-레벨 리던던시 모드에서 동작하는 것으로 인해 이전에 위치한 상위-레벨 리던던시 정보로 동작가능한 경우에 계산 및 기록은 생략된다. 그 후에 동작은 제 2 상위-레벨 리던던시 모드에서 시작한다(제 2 상위-레벨 리던던시 모드에서 동작함(808)).
[0256] 실패 검출(실패?(803))은: (예를 들어, 하나 또는 둘 이상의 ECC 기술들에 따른) 하위-레벨 에러 정정, (예를 들어, 하나 또는 둘 이상의 RASIE 기술들에 따른) 상위-레벨 에러 정정, 및 플래시 다이 또는 그의 일부분들 중 하나 또는 둘 이상에 의해 보고된 실패 상태 중 하나 또는 둘 이상을 통한다. 예를 들어, 특정 플래시 다이의 특정 부분 내의 판독들의 하위-레벨 정정들의 임계 수를 초과하는 것은 임의선택적으로 및/또는 조건적으로 특정 플래시 다이(또는 특정 부분)가 실패한 것으로 취급되게 하며, 실패된 플래시 다이(또는 일부분)이 더 이상 이용되지 않도록 상위-레벨 리던던시 모드 스위치가 수행된다. 다른 예에서, 상위-레벨 에러 정정이 실패하는 경우에, 플래시 다이의 적절한 하나(또는 그 일부분)는 실패한 것으로 취급되며 실패된 플래시 다이(또는 일부분)가 더 이상 이용되지 않도록 상위-레벨 리던던시 모드 스위치가 수행된다. 또 다른 예에서, 플래시 다이가 (기록 동작이 성공적이지 않음을 나타내는) 프로그램 실패 상태를 리턴하는 경우에, 플래시 다이 중 적절한 하나의 적절한 블록이 실패한 것으로 취급되며, 임의선택적으로 및/또는 조건적으로 실패된 플래시 다이가 더 이상 이용되지 않도록 상위-레벨 리던던시 모드 스위치가 수행된다.
[0257] 일부 실시예들에서, 가상 및 물리적 블록 어드레스들을 통해(예를 들어, 도 1a의 맵(141) 및/또는 테이블(143)을 통해 수행된 프로세싱을 통해) 리매핑함으로써 실패된 블록이 교체된다. 스페어 블록들의 풀(pool)로부터의 스페어 블록은 실패된 블록 대신에 매핑된다. 실패된 블록에 기록된 임의의 컨텐츠는 교체 블록에 복제되며, 기록은 실패가 실패된 블록에 발생한 경우로부터의 스페어 블록에서 진행한다.
[0258] 일부 실시예들에서, 실패된 블록은 (명시적으로 리매핑되기보다는) 스킵되어, 구멍이 있는 R-블록이 다음에 소거될 때(재-기록을 준비하여) 임의선택적으로 및/또는 조건적으로 상위-레벨 리던던시 모드 스위치를 발생시키는 "구멍"을 야기한다. 구멍이 데이터 저장을 위한 위치에 있는 경우에, 스위치가 이루어지지 않으며, 구멍은 남아있다. 구멍이 상위-레벨 리던던시 정보를 위한 위치에 있는 경우에, 상위-레벨 리던던시 정보가 다른 위치에 저장되며, 임의선택적으로 상위-레벨 리던던시 모드가 스위칭된다.
[0259] 일부 실시예들 및/또는 사용 시나리오들에서, 실패가 발생된 플래시 다이에 저장된 사용자 데이터의 복원은 가능하지 않다. 예를 들어, 실패가 상위-레벨 에러 정정을 통해 검출된 실패들의 일부 타입들 및/또는 하나 또는 둘 이상의 플래시 다이 또는 그 일부분들에 의해 보고된 실패 상태의 일부 타입들로 인한 것인 경우에, 일부 사용자 데이터가 소실될 수 있다.
[0260] 일부 실시예들에서, 도 8의 프로세싱은 복수의 실패들에 응답하여 상위-레벨 리던던시 모드들 사이를 동적으로 천이하는(예를 들어, SSD 제어기) 맥락으로 수행된다. 구체적으로, SSD 제어기는 제 1 상위-레벨 리던던시 모드에서 동작하기 시작하며 제 1 실패에 응답하여 제 2 상위-레벨 리던던시 모드로 동적으로 천이하며, 후속적으로 제 2 실패에 응답하여 제 2 상위-레벨 리던던시 모드로부터 제 3 상위-레벨 리던던시 모드로 동적으로 천이하는 등이다. 예를 들어, SSD 제어기는 RASIE-2 모드 2-2에 따라 다양한 플래시 다이를 동작시키며 제 1 실패에 응답하여 RASIE-2 모드 2-1에 따르도록 동작을 동적으로 천이시킨다. 후속적으로, SSD 제어기는 제 2 실패에 응답하여 RASIE-2 모드 2-0에 따르도록 동작을 동적으로 천이시킨다. 더 후속적으로, SSD 제어기는 제 3 실패에 응답하여 RASIE-1 감소된-용량 모드 1-0에 따르도록 동작을 동적으로 천이시킨다(감소된-용량 모드 1-0은 상위-레벨 리던던시 정보를 위해 이용되는 하나의 플래시 다이 및 데이터 저장을 위해 이용되는 62개의 플래시 다이인 것을 제외하고 RASIE-1 모드 1-0과 유사하다).
[0261] 특정 예로서, 제 1 상위-레벨 리던던시 모드에서 동작하는 것에 대응하는, RASIE-2 모드 2-2에서 초기에 동작하는 도 7a의 엘리먼트들(예를 들어, 플래시 다이(710.65) 및 플래시 다이(710.64)에서의 상위-레벨 리던던시 정보 및 플래시 다이(710.63 ... 710.0)에서의 데이터 저장)에 커플링된 (도 1a의 SSD 제어기(100)와 같은) SSD 제어기를 고려한다. 그 후에, 플래이 다이 중 하나 또는 둘 이상의 판독 또는 대안적으로 기록이 수행된다. 플래시 다이 중 특정한 하나의 일부분(예를 들어, 사용자 데이터 및/또는 사용자 자유 공간을 위해 이용되는 플래시 다이(710.62)의 페이지)에서, 판독이 정정가능하지 않은(하위-레벨) ECC 실패를 발생시키거나, 대안적으로 기록이 성공적이지 못하다. 이에 응답하여, SSD 제어기는 더 이상 플래시 다이(710.62) 중 임의의 것을 이용하지 않고, RASIE-2 모드 2-2에서 동작하는 것으로부터 RASIE-2 모드 2-1로 동적으로 스위칭한다. RASIE-2 모드 2-1에서의 동작이 데이터 저장을 위한 63개의 다이(대 RASIE-2 모드 2-2에서 64개의 다이)를 제공함에 따라, 데이터 저장을 위해 이용가능한 공간은 64개 다이로부터 63개 다이로 감소되며, 사용자 데이터 및/또는 사용자 자유 공간이 그에 따라 이동된다. 예를 들어, 플래시 다이(710.62)로부터의 모든 사용자 데이터가 사용자 자유 공간에 따라 플래시 다이(710.63) 및 플래시 다이(710.61 ... 710.0)의 일부분들로 이동된다. 정정가능하지 않은 ECC 실패를 갖는 페이지에서의 임의의 사용자 데이터는 플래시 다이(710.65) 및/또는 플래시 다이(710.64)에서의 상위-레벨 리던던시 정보에 기초하여 복구된다. 플래시 다이(710.63) 및 플래시 다이(710.61 ... 710.0)에서의 데이터 저장에 기초한 상위-레벨 리던던시 정보는 RASIE-2 모드 2-1에 따라 계산되며 플래시 다이(710.65) 및/또는 플래시 다이(710.64)에 저장된다. SSD 제어기는 그 후에 RASIE-2 모드 2-1(플래시 다이(710.65) 및 플래시 다이(710.64)에서의 상위-레벨 리던던시 정보 및 플래시 다이(710.63) 및 플래시 다이(710.61 ... 710.0)에서의 데이터 저장소)에서 동작한다.
[0262] 상기에 설명된 여러 실시예들은 전체 플래시 다이의 입도의 독립적 실리콘 엘리먼트들로 동적 상위-레벨 리던던시 모드를 관리하는 한편, 다른 실시예들은 하나 또는 둘 이상의 페이지들, 블록들 또는 R-블록들과 같은 다이의 일부분들인 독립적 실리콘 엘리먼트들로 동적 상위-레벨 리던던시 모드 관리를 구현한다.
[0263] 다양한 실시예들에서, 도 8의 하나 또는 둘 이상의 엘리먼트들에 관련한 프로세싱은 도 1a의 하나 또는 둘 이상의 엘리먼트들(또는 그 일부분들)에 의해 전적으로 또는 부분적으로 수행된다. 예를 들어, CPU(171)의 소프트웨어 실행 능력들의 일부분은 데이터 저장을 위해 이용가능한 공간을 감소시킬 것을 지시함으로써 또는 데이터 저장을 재조직하는 것을 지시함으로써와 같이, 상위-레벨 리던던시 모드들 사이의 동적 천이를 관리하도록 이용된다. 다른 예에서, 데이터 프로세싱(121) 및/또는 ECC-X(135)는 '타겟' 리던던시 모드에 따른 상위-레벨 리던던시 정보의 계산에 전용된 및/또는 그 계산을 위해 특화된 하드웨어 엘리먼트들을 포함한다. 또 다른 예에서, ECC(161)는 정정가능하지 않은 에러들의 하위-레벨(예를 들어, ECC) 에러 정정 및 검출을 구현하는 한편, ECC-X(135)는 정정가능하지 않은 에러들 및/또는 메모리 엘리먼트 실패들의 상위-레벨(예를 들어, RASIE) 에러 정정 및 검출을 구현한다. 다른 예에서, (상위-레벨) 리던던시 모드들 사이의 동적 천이에 관한 기능의 전부 또는 임의의 일부분들은 ECC-X(135)의 하나 또는 둘 이상의 일부분들에 의해 수행된다.
상위-레벨 리던던시 및 적응형 하위-레벨 코드 레이트들
[0264] 일부 실시예들 및/또는 사용 시나리오들에서, 하위-레벨 에러 정정은 적응형 코드 레이트(예를 들어, 가변 코드 레이트를 이용한 적응형 ECC 기술)를 이용한다. 예를 들어, 제 1 판독 유닛은 제 2 코드 레이트로 관리되는 제 2 판독 유닛보다 비교적 더 이용가능한 데이터 비트들을 제공하는 제 1 코드 레이트로 관리된다. 가변 코드 레이트를 이용하여 하위-레벨 에러 정정을 갖는 일부 실시예들 및/또는 사용 시나리오들에서, 상위-레벨 리던던시 정보는 상위-레벨 리던던시 정보에 의해 보호된 데이터 저장에 관하여 비교적 더 이용가능한 데이터 비트들 또는 가장 이용가능한 데이터 비트들을 제공하는 하위-레벨 에러 정정으로 관리되는 (플래시 다이의 일부분들과 같은) 독립적 실리콘 엘리먼트들의 일부분들에 저장된다. 상위-레벨 리던던시 정보가 저장되는 일부분(들)은 다양한 실시예들 및/또는 사용 시나리오들에서, R-블록 기반 상에, 다이 기반 상에, 시간을 통해 동적으로 또는 그의 임의의 조합으로 변화한다. 다양한 실시예들에서, 하위-레벨 에러 정정 코드 레이트에 관하여 가장 이용가능한 데이터를 갖는 것에 기초하여 상위-레벨 리던던시 데이터의 저장을 위해 하나 또는 둘 이상의 다이, R-블록들, 블록들 및/또는 페이지들이 선택된다.
[0265] 예를 들어, 상위-레벨 리던던시 정보는 R-블록 기반 상에 (블록 위치들과 같은) 변화하는 위치들에 저장되며, (블록들과 같은) 위치들은 하위-레벨 에러 정정 코드 레이트에 기초하여 가장 이용가능한 데이터를 갖는 것들이다. 임의의 예에서, 도 7a의 컨텍스트에서 RASIE-2 동작 모드 시나리오를 고려하며, 여기서 66개의 플래시 다이의 수집은 각각 1-블록 높이의 최대 M개의 R-블록들의 논리적 "스택"으로서 취급된다. (가장 개념적으로 간단한 경우에, 스택에서의 각 R-블록은 각 다이로부터의 동일한 물리적 블록 수로 구성되지만 실패된 블록들을 수용하기 위해 이러한 제약은 적어도 일부 실시예들에서 리프팅된다. 또 다른 실시예들에서, 제약이 유지되지만, "구멍들"은 실패된 블록들에 대응하여 수용된다.) 따라서, 각 R-블록은 플래시 다이(710.0) 내지 플래시 다이(710.65)의 각각으로부터의 일 블록에 대응하는 최대 66개의 블록들을 갖는다. (도 7a에서, 범위 710.0 내지 710.65에서의 일부 플래시 다이만이 명시적으로 열거되는 한편, 이 범위의 모든 플래시 다이가 암시적으로 도시되는 것이 생략의 이용에 의해 이해된다.) 상위-레벨 리던던시 정보는 하위-레벨 정정 코드 레이트에 기초하여 가장 이용가능한 데이터를 갖는 각 R-블록의 어느 블록들에나 기록된다. 예를 들어, 제 1 R-블록에서, 플래시 다이(710.15 및 710.49)에 대응하는 블록들은 하위-레벨 에러 정정 코드 레이트에 기초하여 가장 이용가능한 데이터를 갖게 되는 경우에, 상위-레벨 리던던시 정보가 (플래시 다이(710.15 및 710.49)에 대응하는) 블록들로 기록된다. 제 2 R-블록에서, 플래시 다이(710.9 및 710.35)에 대응하는 블록들은 하위-레벨 에러 정정 코드 레이트에 기초하여 가장 이용가능한 데이터를 갖게 되는 경우에, 상위-레벨 리던던시 정보가 (플래시 다이(710.15 및 710.49)에 대응하는) 블록들로 기록된다. 일부 실시예들에서, R-블록에서의 모든 다른 데이터가 알려진 후에 상위-레벨 리던던시 데이터가 기록된다.
[0266] 도 9는 판독 유닛들 중 하나 또는 둘 이상에 저장된 상위-레벨 리던던시 정보에 의해 보호되는 (예를 들어, 시간을 통해 및/또는 위치에 의해 달라지고 및/또는 변화하는) 적응형 코드 레이트들의 하위-레벨 리던던시 정보를 갖는 판독 유닛들(911, 931, ... 951, 971)의 실시예를 도시한다. 판독 유닛들의 각각은 사용자 데이터(911.U, 931.U, ... 951.U, 971.U), 및 하위-레벨 ECC(911.E, 931.E, ... 951.E, 971.E)로서 ECC 코드의 검사 비트들과 같은 하위-레벨 리던던시 정보를 포함하도록 가능해진 및/또는 할당된 나머지 부분을 포함하도록 가능해진 및/또는 할당된 일부분을 갖는다.
[0267] 도면에서, 수직 치수들은 상대적으로 스케일가능하고 상대적 크기를 나타낸다. 따라서 판독 유닛들(911 및 951)은 동일한 제 1 크기이며(일부 실시예들에서, 모든 판독 유닛들은 모든 NVM 디바이스들의 모든 블록들에 대해 동일한 크기임), 하위-레벨 ECC 부분들(931.E 및 951.E)은 동일한 제 2 크기이며, 하위-레벨 ECC 부분들(911.E 및 971.E)은 동일한 제 3 크기이다. 판독 유닛(931)은 차례로 판독 유닛(971)보다 더 큰 판독 유닛들(911 및 951)보다 더 크다. 사용자 데이터 부분(931.U)은 사용자 데이터 부분(951.U)보다 더 크다. 사용자 데이터 부분(951.U)은 사용자 데이터 부분(911.U)보다 더 크다. 하위-레벨 ECC 부분(951.E)은 하위-레벨 ECC 부분(911.E)보다 작다.
[0268] 도면에 도시된 바와 같이, 각각의 판독 유닛들은 NVM의 각각의 블록당 각각의 크기들을 가지며, 이는 각각의 블록들에 이용된 바와 같은 하위-레벨 코드 레이트들을 변화시킬 수 있게 한다. 더 구체적으로, 판독 유닛들(931 및 951)은 동일한 양의 하위-레벨 리던던시 정보(931.E 및 951.E가 동일한 크기임)를 갖지만, 판독 유닛(931)이 (사용자 데이터(951.U)를 포함하는) 판독 유닛(951)보다 많은 사용자 데이터(931.U)를 포함하기 때문에, 판독 유닛(931)의 하위-레벨 코드 레이트는 판독 유닛(951)의 하위-레벨 코드 레이트보다 높다.
[0269] 도면에 도시된 바와 같이, 각각의 판독 유닛들은 사용자 데이터의 각각의 크기들을 가지며, 이는 동일한 크기의 2개 또는 그 이상의 판독 유닛들 각각에서 사용자 데이터의 다양한 크기들을 가능하게 한다. 예를 들어, 사용자 데이터의 크기는 특정 판독 유닛에서 이용되는 하위-레벨 코드 레이트를 변경하도록 변화된다. 더 구체적으로, 판독 유닛들(951 및 911)은 동일한 크기를 갖지만, 사용자 데이터(951.U 및 911.U)의 다른 각각의 양들, 및 따라서 하위-레벨 리던던시 정보(951.E 및 911.E)의 서로 다른 각각의 양들을 가지며, 이는 판독 유닛(951)이 판독 유닛(911)보다 더 높은 하위-레벨 코드 레이트를 갖게 할 수 있다.
[0270] 일부 실시예들 및/또는 사용 시나리오들에서, 하위-레벨 코드 레이트를 변화시키고 및/또는 변경하는 것은 유용하게 사용자 데이터의 양을 최대화하면서 하위-레벨 에러 정정 요건들을 달성하기 위해 충분한 양의 하위-레벨 ECC 정보를 제공하는 것을 가능하게 한다.
[0271] 판독 유닛들에서 변화하는 사용자 데이터의 양을 갖는 일부 실시예들에서, 상위-레벨 리던던시 정보가 사용자 데이터의 최대량을 갖는 판독 유닛들 중 하나 또는 둘 이상에 저장된다. 예를 들어, 도 9에서 RASIE-1 모드를 이용하면, 상위-레벨 리던던시 정보가 사용자 데이터(931.U)에 저장되며, RASIE-2 모드를 이용하면, 상위-레벨 리던던시 정보가 사용자 데이터(931.U) 및 사용자 데이터(951.U)에 저장된다. (상위-레벨 리던던시 정보에 의해 보호되는 판독 유닛들 중에서) 최대량의 사용자 데이터로 판독 유닛들에 상위-레벨 리던던시 정보를 저장하는 것은 다른 판독 유닛들의 전부에서의 사용자 데이터를 보호하기 위해 충분한 상위-레벨 리던던시 정보가 존재함을 보증한다.
[0272] 다양한 실시예들에 따르면, 상위-레벨 리던던시 정보를 저장하기 위해 상위-레벨 리던던시 정보에 의해 보호되는 다수의 판독 유닛들 중 하나 또는 둘 이상의 판독 유닛들이 이용되는지를 결정하기 위해 하나 또는 둘 이상의 기술들이 이용된다. 제 1 예에서, 사용자 데이터의 최대량을 갖는 (RASIE-1에 대한) 최종-기록된 하나 또는 (RASIE-2에 대한) 2개의 판독 유닛들이 이용된다. 제 2 예에서, 사용자 데이터의 최대량을 갖는 (RASIE-1에 대한) 최기(earliest)-기록된 하나 또는 (RASIE-2에 대한) 2개의 판독 유닛들이 이용된다. 유사하게, 다른 판독 유닛들에서의 나머지 사용자 데이터의 전부를 보호하도록 사용자 데이터의 최대량을 갖는 하나 또는 둘 이상의 판독 유닛들을 결정적으로 선택하는 임의의 기술은 본원에 고려된 기술들의 범위 내에 있다.
상위-레벨 리던던시 정보 계산 기술들
[0273] 다양한 실시예들 및/또는 사용 시나리오들에서, 상위-레벨 리던던시 정보가 패리티, RS 및/또는 가중된-합 기술들을 통해서와 같이, 다양한 기술들로 계산된다. 예를 들어, 하나(하위-레벨)의 실패(예를 들어, RASIE-1)로부터의 복수를 가능하게 하는 일부 상위-레벨 리던던시 모드들에서, 상위-레벨 리던던시 정보가 패리티 기술들을 통해 계산된다. 다른 예에서, 2개의(하위-레벨) 실패들(예를 들어, RASIE-2)로부터의 복구를 가능하게 하는 일부 상위-레벨 리던던시 모드들에서, 상위-레벨 리던던시 정보는 패리티 및 RS 기술들의 조합을 통해 계산된다. 상위-레벨 리던던시 정보의 제 1 부분은 패리티 코딩을 이용하여 계산되며 제 2 부분은 RS 코딩을 이용하여 계산된다. 또 다른 예에서, 2개의 실패들(예를 들어, RASIE-2)로부터의 복구를 가능하게 하는 일부 상위-레벨 리던던시 모드들에서, 상위-레벨 리던던시 정보는 패리티 및 가중된-합 기술들의 조합을 통해 계산된다. 상위-레벨 리던던시 정보의 제 1 부분은 패리티 코딩을 이용하여 계산되며 제 2 부분은 가중된-합 코딩을 이용하여 계산한다. 상위-레벨 리던던시 정보에 의해 보호되는 데이터를 저장하기 위해 이용가능한 NVM의 페이지들을 위해 이용되는 하위-레벨 실패 검출 기술들과 동일하거나 유사한 (ECC와 같은) 하위-레벨 실패 검출 기술들을 이용하여, 예를 들어, NVM의 페이지들의 판독들 및 기록들을 통해 상위-레벨 리던던시 정보가 관리된다.
[0274] RASIE-2에 대한 특정 예로서, 상위-레벨 리던던시 정보의 제 1 페이지가 R-블록에 걸쳐 스트라이프로 모든 첫 번째 페이지들의 XOR을 통한 패리티 코딩을 이용하여 계산된다. 더 구체적으로, R-블록에 걸쳐 스트라이프에서 첫 번째 페이지들 전부의 첫 번째 바이트들의 전부의 XOR이 수행되며, 이는 상위-레벨 리던던시 정보의 제 1 페이지의 제 1 바이트를 발생시킨다. 유사하게, 상위-레벨 리던던시 정보의 제 2 바이트는 스트라이프로 첫 번째 페이지들의 전부의 바이트들의 전부에 대해 R-블록을 걸쳐 스트라이프로 첫 번째 페이지들의 전부의 두 번째 바이트들의 전부를 XOR함으로써 형성된다. 상위-레벨 리던던시 정보의 제 2 페이지는 다음과 같은 가중된-합 기술을 이용하여 계산된다.
[0275] (일 예로서 이용되는) 갈르와 필드와 같은 유한 필드를 통해 산술연산이 수행된다. 예들은 데이터가 바이트-폭으로 동작되는 것을 가정하며, 따라서 GF(256)와 같은 필드가 이용된다. 다양한 실시예들에서, 데이터는 임의의 유닛들로 동작된다.
[0276] 스트라이프에서의 각 페이지는 고유한 비-제로 "인덱스"를 할당받는다. 인덱스들의 값들은 구현 복잡도를 간략화하도록 선택되며, 발생기 다항식의 임의의 형태에 관련되지 않는다. 예를 들어, 페이지들은 0 내지 N-1의 스트라이프에서의 다이 위치에 의해 (예를 들어, 소프트웨어에 의해) 라벨링되며, 인덱스들에 대한 적합한 값은 (N < 255로 제공되는 비-제로인 것이 보증되는) 다이 번호의 1의 보수이다. 인덱스 값의 다른 선택은 예를 들어, 하드웨어 비용들을 감소시키고 및/또는 최소화하기 위해, 최저-가중치(최소수의 설정 비트들 또는 최소수의 클리어 비트들) 비-제로 정수들이다. 일부 실시예들 및/또는 사용 시나리오들에서 인덱스들에 대한 그레이-코딩된 값들을 선택하는 것은 천이들을 최소화하고 및/또는 페이지들이 프로세싱됨에 따른 전력을 감소시킨다.
[0277] 인덱스 값들은 유한 필드 산술연산에 따라 선택되지 않지만, 다른 원리들에 따라 선택된다. 이와 같음에도 불구하고, 각 인덱스 값은 유한 필드에서의 비-제로 엘리먼트에 대응한다. 페이지 i는 인덱스 값 Ki를 갖는(그리고 페이지 j는 인덱스 값 Kj를 갖는) 것으로 가정한다. 가중된-합 리던던시는 Ki*Pi의 (각 페이지 i로부터의 대응하는 바이트들 Pi를 통해) (GF 필드) 합이며, 각 바이트는 그 인덱스 값에 의해 (GF 필드를 통해) 곱해진다.
[0278] 따라서 가중된-합 리던던시 정보는 다음과 같이 각 바이트에 대해 계산된다:
R0 = 모든 대응하는 바이트들 Pi 합;
Rl = 모든 대응하는 바이트들 Ki*Pi 합;
R0는 모든 대응하는 바이트들의 XOR이며; 및
Rl은 바이트들의 가중된 합이며, 여기서 가중치들은 인덱스 값들로서 선택된다. 전술한 계산은 R0 및 R1 각각에 대한 바이트들의 대응하는 페이지들을 생성하면서, 페이지에서의 대응하는 바이트들의 각각에 대해 반복된다. 다음의 논의에서, R0 및 R1은 설명의 명확성을 위해 (예를 들어, 각각이 단일 바이트인) 단일 엘리먼트들로서 각각 일부 맥락들에서 설명되지만, 전술한 계산에서와 같이, 각각은 (예를 들어, 각각이 바이트들의 페이지인) 엘리먼트들의 각 페이지를 나타낸다.
[0279] Pi는 페이지 i에서의 바이트를 나타내며, Pj는 페이지 j에서의 바이트를 나타낸다. 각 페이지로부터의 대응하는 바이트들의 하나의 스트라이프에 관한 프로세싱이 설명되며, 모든 대응하는 바이트들을 통해 반복이 수행된다. 예를 들어 서로 다른(하위-레벨) 리던던시 코드 레이트를 갖기 때문에, 일부 페이지들이 다른 페이지들보다 "더 짧은" 경우에, 더 짧은 페이지들은 효율적으로 프로세싱되는 모든 페이지들이 동일한 크기를 갖도록 제로-패딩(또는 인코드 및 디코드 상에 동일한 방법을 이용한 임의의 알려진 값에 의해 패딩)된다.
[0280] R0 및 R1을 계산하는 합산들이 다양한 실시예들에 따른, 다양한 직렬 및/또는 병렬 계산들을 통해 임의의 순서로 수행가능하다. 페이지들은 Ki*Pi가 Kj*Pj의 이전에 또는 그에 후속하여 가산되는지 여부가 R1에서의 결과에 영향을 미치지 않기 때문에 임의의 특정 순서로 프로세싱될 필요가 없다. 다양한 실시예들에 따르면, 리던던시 정보의 페이지의 다양한 바이트들에 대응하는 R0 및 R1 값들의 계산은 서로 무관하며 다양한 직렬 및/또는 병렬 계산들을 통해 임의의 순서로 계산가능하다. 또한, R1으로부터 Ki*Pi를 감산하는 것(및 R0로부터 Pi를 감산하는 것)은 페이지들 상의 계산 효과들을 "백 아웃"하는 것을 가능하게 한다. 일부 실시예들 및/또는 사용 시나리오들에서, GF 필드를 통한 가산 및 감산은 둘 다 XOR이기 때문에(따라서 감산은 단순하게 두 번째로 가산하는 것과 동등함), 페이지를 "백 아웃"하기 위해 GF 필드 구현들을 위한 특정 하드웨어가 필요하지 않다(예를 들어, 논리적 XOR 능력이 충분하다).
[0281] 정정가능하지 않은 하위-레벨 에러의 경우에, 상위-레벨 정정은 일부 실시예들에서, R0 및 R1을 재-계산함으로써, 그거나 정정가능하지 않은 하위-레벨 에러들을 갖는 페이지(들)(때때로 열(들)로 지칭됨)을 생략함으로써 시작한다. 를 생성하기 위해 원래의 RO로부터 재계산된 RO를 감산함으로써, 그리고 을 생성하기 위해 원래의 R1으로부터 재계산된 R1을 감산함으로써 정정이 진행된다.
[0282] 정정가능하지 않은 하위-레벨 에러들이 존재하지 않는 경우에, 재계산된 RO 및 R1은 둘 다 제로이다. 정정가능하지 않은 하위-레벨 에러들이 존재하는 경우에, (감산 후의) 재계산된 RO 및 R1은 (두 번째로 가산되지 않지만 원래 값들에 존재하는) "분실(missing)" 데이터를 반영한다.
[0283] 하나의 정정가능하지 않은 하위-레벨 에러가 존재하는 경우에, 에러를 정정하기 위해 재계산된 RO가 이용된다(그리고 재계산된 R1이 필요하지 않다).
[0284] 2개의 정정가능하지 않은 하위-레벨 에러가 존재하는 경우에, 에러를 정정하기 위해 재계산된 RO 및 R1이 이용된다. R0 및 R1 값들의 페이지들 둘 다가 정정가능하지 않은 하위-레벨 에러들을 갖는 페이지들인 경우에, 데이터 저장 페이지들의 정정이 필요하지 않다. R1 값들의 페이지가 정정가능하지 않은 하위-레벨 에러들을 갖는 페이지들 중 하나인 경우에, 정정은 RO를 통해 이루어진다(재계산된 RO 값은 정정가능하지 않은 하위-레벨 에러들을 갖는 데이터 저장 페이지의 값이다).
[0285] 데이터 저장 페이지들에 2개의 정정가능하지 않은 하위-레벨 에러들이 존재하는 경우에, 또는 R0 페이지가 정정가능하지 않은 하위-레벨 에러들을 갖는 페이지들 중 하나인 경우에, 상기와 같이 및 을 계산함으로써 정정이 시작된다. R0 페이지가 정정가능하지 않은 하위-레벨 에러들을 갖는 페이지들 중 하나인 경우에, 페이지의 계산은 임의선택적으로 생략된다. 페이지 i 및 페이지 j가 정정가능하지 않은 하위-레벨 에러들인 경우에, 재계산된 이고, 재계산된 이다. 방정식 풀이는 다음을 생성한다:
R0가 정정가능하지 않은 하위-레벨 에러들 중 하나인 경우에, (R0는 R1에 포함되지 않기 때문에), 이거나, 이다; 동일한 결과가 (를 무시하기 위해) 상기의 공식들에서 을 설정함으로써 획득된다.
[0286] 대안적인 실시예에서, p가 소수(prime)인 정수 계수 p에 의해 정의되는 유한 필드가 갈르와 필드 대신에 이용된다. 계산들은 상술한 바와 동일하며, 덧셈은 정수 덧셈 계수 p이며, 곱셈은 정수 곱셈 계수 p이다. 예를 들어, 페이지들이 바이트들의 페이지들인 경우에, 정수들 계수 257의 유한 필드가 이용된다. 모든 사용자 데이터 바이트들이 범위 0 - 255에 있으며, 표현을 위해 2개 이상의 바이트를 요구한다. 저장 공간을 최소화하기 위해 0 - 256의 값들을 인코딩하고 R1 페이지가 감소된 오버헤드로 저장되게 할 수 있는 많은 방법들이 존재한다. 예를 들어, 값들 0 및 256은 각각 9-비트 시퀀스들 및 로서 저장되며, 모든 다른 값들은 8개 비트들로 저장된다. R1 값들의 랜덤 분포를 고려할 때, 저장 오버헤드는 < 0.1%이다. 도 9에 관하여 설명된 바와 같이, R1 페이지는 사용자 데이터의 최대량을 갖도록 선택되며, 이는 저장 오버헤드가 일부 사용 시나리오들에서 숨겨지게 할 수 있다.
[0287] 도 10은 예를 들어, 도 7a 및 도 7b에 더 도시된 바와 같은 컨텍스트에서 RASIE-2 모드 2-2에 의해 이용된 바와 같은 상위-레벨 리던던시 정보 결과 및 데이터 소스 관련성들의 일 실시예의 선택된 상세들을 도시한다. 도 10은 플래시 다이(710.0, 710.63, 710.64 및 710.65)를 명시적으로 도시하며, 생략(...)에 의해 플래시 다이(710.1 ... 710.62)를 암시적으로 도시한다. 플래시 다이의 블록들, 페이지들 및 바이트들의 선택된 상세들이 도시된다. 상위-레벨 리던던시 정보의 제 1 부분은 R0(1010)로서 도시되며(플래시 다이(710.64)에 저장됨), 패리티 코딩을 이용하여 계산된다. 상위-레벨 리던던시 정보의 제 2 부분은 R1(1011)로서 도시되며(플래시 다이(710.65)에 저장됨), 가중된-합 코딩을 이용하여 계산된다. 데이터 정보를 위한 저장소는 데이터(1019)로서 도시된다(플래시 다이(710.0 ... 710.63)에 저장됨).
[0288] 점선 화살표(1001)는 데이터(1019)의 (모든 플래시 다이에 걸친) 모든 첫 번째 페이지들의 대응하는 첫 번째 바이트들에 기초한 2-바이트 리던던시 계산 결과(R0(1010) 및 R1(1011)의 각각에 대해 1 바이트)를 개념적으로 표시한다. 도시된 바와 같이, 2-바이트 결과는 첫 번째 R0 및 R1 페이지들의 각각 상의 첫 번째 바이트이다. 점선 화살표(1002)는 데이터(1019)의 모든 첫 번째 페이지들의 대응하는 최종 바이트들에 기초한 2-바이트 리던던시 계산 결과(R0(1010) 및 R1(1011)의 각각에 대해 1 바이트)를 개념적으로 표시한다. 도시된 바와 같이, 2-바이트 결과는 첫 번째 R0 및 R1 페이지들의 각각 상의 최종 바이트이다. 점선 화살표(1003)는 데이터(1019)의 (모든 플래시 다이에 걸친) 첫 번째 블록들의 대응하는 최종 페이지들에 기초한 2-페이지 리던던시 계산 결과(R0(1010) 및 R1(1011)의 각각에 대해 1 페이지)를 개념적으로 표시한다.
[0289] 본원의 다른 곳에 설명된 바와 같이, 일부 실시예들에서 상위-레벨 리던던시 정보는 데이터의 서로 다른 부분들에 대해 서로 다른 다이에 저장된다. 따라서, 일부 실시예들에서 R0 및 R1은 도 10에 도시된 바와 같이, 2개의 "전용된" 다이보다는 오히려, 다양한 다이에 걸쳐 저장된다.
[0290] 도 11은 다양한 실시예들에 따른 다양한 동작 조건들을 갖는, 도 7a에서와 같은 그리고 도 7b 및 도 10에 더 도시된 바와 같은 컨텍스트에서 RASIE-2 모드 2-2에 의해 이용된 바와 같은 상위-레벨 리던던시 정보 계산들의 일 실시예의 선택된 상세들을 도시한다. 더 구체적으로, 도 11은 예를 들어, 도 10의 점선-화살표(1001)에 의해 개념적으로 도시된 2-바이트 리던던시 계산 결과에 따라, R0의 바이트에 대한 패리티 코딩 계산 및 R1의 바이트에 대한 가중된-합 코딩 계산을 도시한다. 동작 조건들은: (갈르와 필드와 같은) 유한 필드를 통한 산술을 수행하는 것, (도 11에서의 더미 합산 변수 "i" 값들에 대응하는) 인덱스들이 플래시 다이 넘버(또는 임의의 다른 고유한 그리고 비-제로인 넘버링)의 1의 보수인 것 및 인덱스들이 유한 필드에서의 비-제로 엘리먼트들에 대응하는 것 중 하나 또는 둘 이상을 포함한다. 도 11에 도시된 바와 같은 계산은 대응하는 데이터 바이트들에 기초하여, R0 및 R1의 바이트들의 전부에 대해 반복된다. 비-제로 인덱스들은 R1 값들이 Pi의 모든 엘리먼트로부터의 기여를 포함하게 할 수 있음을 주목한다.
[0291] 따라서 서로에 관한 R0의 바이트들 중 임의의 것 또는 R1의 바이트들 중 임의의 것 사이를 계산하는 것에 대한 의존성들이 존재하지 않는다. 따라서 R0 및 R1 값들이 전적으로(대량으로) 병렬로, 부분적으로 병렬로 또는 전적으로 직렬로 계산되는 다양한 실시예들이 고려된다. 예를 들어, 페이지의 R0 및/또는 R1 바이트들의 전부는 병렬로 계산된다. 다른 예에서, 페이지의 R0 바이트들의 전부는 병렬로 계산된 후에(또는 선행된 후에) 페이지의 R1 바이트들의 전부를 병렬로 계산한다.
[0292] 또한, 서로에 관하여 또는 R1의 바이트들의 임의의 것을 계산하는데 관하여 R0의 바이트들 중 임의의 것을 계산하는 것에 관한 정렬 요건들이 존재하지 않는다. 따라서 R0 및 R1 값들이 전적으로 서로에 관하여 차례대로, 서로에 관한 차례와 별개로(예를 들어, R0 계산들은 서로에 관하여 차례대로 이루어지지만 R1에 관하여 순서가 없고, 및 그 반대도 마찬가지임), 또는 특정 순서 없이(예를 들어, 전적으로 순서를 벗어나, 비순서화된, 또는 랜덤하게 정렬된) 계산된다. 예를 들어, 페이지의 R0 바이트들의 전부가 특정 순서로(예를 들어, 최저 바이트로부터 최고 바이트까지) 계산된 후에, 페이지의 R1 바이트들의 전부가 특정 순서로 계산된다. 다른 예에서, 페이지의 R0 바이트들의 전부가 특정 순서로 계산되며, 독립적으로 페이지의 R1 바이트들의 전부가 특정 순서로 계산된다. 또 다른 예에서, 페이지의 R0 바이트들의 전부뿐 아니라 페이지의 R1 바이트들의 전부가 서로에 관하여 특정 순서 없이(예를 들어, 데이터 오퍼랜드들(operands)이 이용가능함에 따라) 계산된다.
[0293] 또 다른 예에서, 하나 또는 둘 이상의 페이지들의 R0 및 R1 바이트들의 전부는 도 11에 도시된 합산 및 가중된-합산 계산들(Pi)에 의해 참조되는 데이터 바이트들을 판독하기 위한 판독 동작들, 하나 또는 둘 이상의 NVM들(각각 예를 들어, 하나 또는 둘 이상의 플래시 다이를 갖음) 상에 수행된 하나 또는 둘 이상의 판독 동작들의 완료 순서에 의해 결정된 순서로 계산된다. 판독 동작들의 완료에 의해 결정된 순서로 계산들을 수행하는 것은 일부 실시예들 및/또는 사용 시나리오들에서, 계산들을 수행하기 위해 인에이블된 엘리먼트들과 NVM들 사이의 버퍼링의 제거 또는 감소를 가능하게 한다. 판독 동작들의 완료에 의해 결정된 순서로 계산들을 수행하는 것은 일부 실시예들 및/또는 사용 시나리오들에서, NVM들의 메모리 대역폭과 같은, 계산들을 수행하기 위해 이용되는 메모리 대역폭에서의 감소를 가능하게 한다.
[0294] 또 다른 예에서, 하나 또는 둘 이상의 페이지들의 R0 및 R1 바이트들의 전부는 도 11에 도시된 합산 및 가중된-합산 계산들(Pi)에 의해 참조되는 데이터 바이트들에 대응하는 이용가능한 데이터 및/또는 리턴된 데이터, 하나 또는 둘 이상의 NVM들(각각 예를 들어, 하나 또는 둘 이상의 플래시 다이를 갖음) 상에 수행된 판독 동작들에 응답하여 이용가능한 데이터 및/또는 리턴된 데이터의 순서에 의해 결정된 순서로 계산된다. 일부 실시예들 및/또는 사용 시나리오들에서, 이용가능한 데이터 및/또는 리턴된 데이터에 의해 결정된 순서로 계산들을 수행하는 것은 NVM들과 계산들을 수행하도록 가능해진 엘리먼트들 사이의 버퍼링을 제거하거나 감소시킨다. 일부 실시예들 및/또는 사용 시나리오들에서, 이용가능한 데이터 및/또는 리턴된 데이터에 의해 결정된 순서로 계산들을 수행하는 것은 NVM들의 메모리 대역폭과 같은 계산들을 수행하기 위해 이용된 메모리 대역폭을 감소시킨다. 일부 실시예들에서, 판독 동작들은 특정 순서로(예를 들어, Pi의 최저 바이트로부터 최고 바이트까지) 수행되는 한편, 다른 실시예들에서, 판독 동작들은 특정 순서 없이 수행된다.
[0295] 도 12는 예를 들어, 도 11과 관련된 바와 같은, 그리고 하위-레벨 실패가 페이지 j 상에 발생한 경우의 맥락에서 하나의(하위-레벨) 실패(단일 동작 동안)로부터의 복구의 실시예의 선택된 상세들을 도시한다. 하위-레벨 실패가 R0 또는 R1 페이지 상에 있는 경우에, R0(또는 R1)가 도 11에 의해 설명된 바와 같이 재-결정됨을 주목한다. 도 12는 페이지 j에 대한 복구된 값의 일 바이트에 대한 계산을 도시한다(합산은 실패가 발생한 경우에 페이지 j를 생략함을 주목한다). R0의 대응하는 바이트들 및 페이지 j를 제외한 데이터 페이지들의 전부로부터의 대응하는 바이트들에 기초하여, 페이지 j의 바이트들의 전부에 대한 복구된 값들을 결정하기 위해 도 12에 도시된 바와 같은 계산이 반복된다.
[0296] 따라서 서로에 관한 페이지 j의 복구된 값들의 바이트들 중 임의의 것을 계산하는 것에 대한 의존성들이 존재하지 않는다. 따라서 R0 및 R1 값들에 대한 상술한 계산들과 유사하게, Pj 복구 값들은 고도로 병렬로부터 고도로 직렬까지 범위로 계산되는 다양한 실시예들이 고려된다. 또한, 서로에 관하여 페이지 j의 복구 값들 중 임의의 것을 계산하는데 관한 순서 요건들이 존재하지 않는다. 따라서, R0 및 R1 값들에 대한 상술한 계산들과 유사하게, Pj 복구 값들이 서로에 관하여 변화하는 순서들로 계산되는 다양한 실시예들이 고려된다.
[0297] 일부 예시적인 실시예들은 도 12에 의해 도시된 바와 같은 R0 및/또는 Pi 값들을 획득하기 위해 NVM들을 판독하기 위한 판독 동작들, 하나 또는 둘 이상의 NVM들(각각 예를 들어, 하나 또는 둘 이상의 플래시 다이를 갖음) 상에 수행된 하나 또는 둘 이상의 판독 동작들의 완료 순서에 의해 적어도 부분적으로 결정된 순서들로 복구 값들을 결정하는데 관련된 계산들을 수행한다. 판독 동작들의 완료의 순서로 계산들을 수행하는 것은 일부 실시예들 및/또는 사용 시나리오들에서, 계산들을 수행하도록 가능해진 엘리먼트들과 NVM들 사이의 버퍼링의 제거 또는 감소를 가능하게 한다. 판독 동작들의 완료의 순서로 계산들을 수행하는 것은 일부 실시예들 및/또는 사용 시나리오들에서, NVM들의 메모리 대역폭과 같은, 계산들을 수행하기 위해 이용되는 메모리 대역폭에서의 감소를 가능하게 한다.
[0298] 일부 예시적인 실시예들은 도 12에 도시된 바와 같은 R0 및/또는 Pi 값들을 획득하기 위해 NVM들 상에 수행된 판독 동작들에 응답하여 이용가능한 데이터 및/또는 리턴된 데이터, 하나 또는 둘 이상의 NVM들(각각 예를 들어, 하나 또는 둘 이상의 플래시 다이를 갖음)로부터 이용가능한 데이터 및/또는 리턴된 데이터의 순서에 의해 적어도 부분적으로 결정된 순서들로 복구 값들을 결정하는데 관련된 계산들을 수행한다. 일부 실시예들 및/또는 사용 시나리오들에서, 판독 동작들로부터 이용가능한 데이터 및/또는 리턴된 데이터의 순서로 계산들을 수행하는 것은 계산들을 수행하도록 가능해진 엘리먼트들과 NVM들 사이의 버퍼링을 감소시키거나 제거한다. 일부 실시예들 및/또는 사용 시나리오들에서, 판독 동작들로부터 이용가능한 데이터 및/또는 리턴된 데이터의 순서로 계산들을 수행하는 것은 NVM들의 메모리 대역폭과 같은 계산들을 수행하기 위해 이용된 메모리 대역폭을 감소시킨다. 일부 실시예들에서, 판독 동작들은 특정 순서로(예를 들어, Pi의 최저 바이트로부터 최고 바이트까지) 수행되는 한편, 다른 실시예들에서, 판독 동작들은 특정 순서 없이 수행된다.
[0299] 도 13a-13d는 예를 들어, 도 11과 관련된 바와 같은, 그리고 하위-레벨 실패들이 페이지들 m 및 n 상에 발생한 경우와 같은 맥락에서 (단일 동작 동안) 2개의 (하위-레벨) 실패들로부터의 복구의 실시예의 선택된 상세들을 도시한다. 하위-레벨 실패들이 R0 및 R1 페이지들 상에 있는 경우에, 데이터 복구를 위해 R0 및 R1은 필요하지 않으며, 데이터를 복구하는 프로세싱이 존재하지 않음을 주목한다. 그렇지 않고, 하위-레벨 실패들 중 하나가 R1 페이지인 경우에, 데이터 복구는 도 12에 의해 설명된 바와 같이 진행함을 주목한다. 하위-레벨 실패들 중 어느 것도 R0 또는 R1 페이지들 상에 있지 않은 경우에, Pm 및 Pn 값들의 복구는 다음과 같이 진행한다. 도 13a는 R0'으로서 수정된 R0의 일 바이트에 대해, 그리고 R1'으로서 수정된 R1의 일 바이트에 대한 계산들을 도시한다(합산들은 실패들이 발생한 경우에 페이지들 m 및 n을 생략함을 주목한다). 도 13b는 원래의 리던던시 정보(R0, R1)의 일 바이트를 수정된 리던던시 정보(R0', R1')에 관련시키는 등호들을 도시하며, 수정된 R0 및 R1을 형성하기 위해 이용된 합산들로부터의 항들은 생략된다. 도 13c는 도입된 항들 델타 R0 및 델타 R1을 갖는, 도 13b의 대수적 재배열을 도시한다. 도 13d는 Pn 및 Pm에 대한 도 13c의 솔루션을 도시하며, 따라서 R1, R0의 대응하는 바이트들, 및 페이지들 m 및 n을 제외한 데이터 페이지들의 전부로부터의 대응하는 바이트들에 기초하여, 페이지 n에 대한 복구된 값의 일 바이트 및 페이지 m에 대한 복구된 값의 일 바이트에 대한 계산들을 나타낸다. Kn은 Km에 관하여 고유하기 때문에, 고유한 인덱스들은 비-제로 분모를 가능하게 함을 주목한다.
[0300] 다양한 실시예들에서, 도 13a-13d에 의해 표현된 바와 같은 계산들은 페이지 m에 대한 복구된 값의 일 바이트 및 페이지 n에 대한 복구된 값의 일 바이트를 결정하기 위해 수행된다. R1, R0의 대응하는 바이트들, 및 페이지들 m 및 n을 제외한 데이터 페이지들의 전부로부터의 대응하는 바이트들에 기초하여, 페이지들 m 및 n의 바이트들의 전부에 대한 복구된 값들을 결정하기 위해 계산들이 반복된다.
[0301] 따라서 서로에 관한 페이지들 m 및 n의 복구된 값들의 바이트들 중 임의의 것을 계산하는 것에 대한 의존성들이 존재하지 않는다. 따라서 Pj 복구 값들에 대한 상술한 계산들과 유사하게, Pm 및/또는 Pn 복구 값들은 고도로 병렬로부터 고도로 직렬까지 범위로 계산되는 다양한 실시예들이 고려된다. 또한, 서로에 관하여 페이지 m 및/또는 페이지 n의 복구 값들 중 임의의 것을 계산하는데 관한 순서 요건들이 존재하지 않는다. 따라서, Pj 복구 값들에 대한 상술한 계산들과 유사하게, Pm 및/또는 Pn 복구 값들이 서로에 관하여 변화하는 순서들로 계산되는 다양한 실시예들이 고려된다.
[0302] 일부 예시적인 실시예들은 도 13a-13d 중 임의의 것에서의 계산들을 위한 소스들로서 도시된 값들 중 임의의 하나 또는 둘 이상을 획득하기 위한 판독 동작들, 하나 또는 둘 이상의 NVM들(각각 예를 들어, 하나 또는 둘 이상의 플래시 다이를 갖음) 상에 수행된 하나 또는 둘 이상의 판독 동작들의 완료 순서에 의해 적어도 부분적으로 결정된 순서들로 (R0' 및 R1'에 대한 계산들과 같은) 복구 값들을 결정하는데 관련된 계산들을 수행한다. 판독 동작들의 완료의 순서로 계산들을 수행하는 것은 일부 실시예들 및/또는 사용 시나리오들에서, 계산들을 수행하기 위해 인에이블된 엘리먼트들과 NVM들 사이의 버퍼링의 제거 또는 감소를 가능하게 한다. 판독 동작들의 완료의 순서로 계산들을 수행하는 것은 일부 실시예들 및/또는 사용 시나리오들에서, NVM들의 메모리 대역폭과 같은, 계산들을 수행하기 위해 이용되는 메모리 대역폭에서의 감소를 가능하게 한다.
[0303] 일부 예시적인 실시예들은 도 13a-13d 중 임의의 것에서의 계산들을 위한 소스들로서 도시된 값들 중 임의의 하나 또는 둘 이상을 획득하기 위해 NVM들 상에 수행된 판독 동작들에 응답하여 이용가능한 데이터 및/또는 리턴된 데이터, 하나 또는 둘 이상의 NVM들(각각 예를 들어, 하나 또는 둘 이상의 플래시 다이를 갖음)로부터 이용가능한 데이터 및/또는 리턴된 데이터의 순서에 의해 적어도 부분적으로 결정된 순서들로 (R0' 및 R1'에 대한 계산들과 같은) 복구 값들을 결정하는데 관련된 계산들을 수행한다. 일부 실시예들 및/또는 사용 시나리오들에서, 판독 동작들로부터 이용가능한 데이터 및/또는 리턴된 데이터의 순서로 계산들을 수행하는 것은 계산들을 수행하도록 가능해진 엘리먼트들과 NVM들 사이의 버퍼링을 감소시키거나 제거한다. 일부 실시예들 및/또는 사용 시나리오들에서, 판독 동작들로부터 이용가능한 데이터 및/또는 리턴된 데이터의 순서로 계산들을 수행하는 것은 NVM들의 메모리 대역폭과 같은, 계산들을 수행하기 위해 이용된 메모리 대역폭을 감소시킨다. 일부 실시예들에서, 판독 동작들은 특정 순서로(예를 들어, Pi의 최저 바이트로부터 최고 바이트까지) 수행되는 한편, 다른 실시예들에서, 판독 동작들은 특정 순서 없이 수행된다.
[0304] 도 14a 및 14b는 NVM들로부터 수신된 페이지들에 관한 상위-레벨 리던던시 정보를 계산하는 일 실시예의 선택된 상세들을 도시한다. 도 14a는 발행(판독 동작을 발행함(1402A))을 통해 하나 또는 둘 이상의 NVM들에 복수의 판독 커맨드들을 송신하고, 커맨드들의 전부가 송신되었는지를 검사하며(모두 발행되었는가?(1403A)), 그렇지 않다면, 커맨드들 중 다른 하나를 송신하기 위해 루프 백하는 실시예의 선택된 상세들을 도시한다. 다른 실시예들은 복수의 커맨드들이 한번에 하나보다는 오히려, 한번에 복수의 커맨드들이 발행되는 경우의 다른 실시예들이 고려됨을 주목한다.
[0305] 도 14b는 도 14a에 도시된 바와 같이 송신된 판독 커맨드들에 응답하여 NVM들로부터 수신된 프로세싱 페이지들의 일 실시예의 선택된 상세들을 도시한다. 페이지가 이용가능한지를 결정하기 위한 검사가 이루어진다(페이지 준비?(1402B)). 이용가능하지 않으면, 프로세싱은 검사를 다시 수행하도록 루프 백한다. 페이지가 이용가능한 경우에, 페이지에 관련하는 상위-레벨 리던던시 정보 프로세싱이 실행된다(페이지-기반된 계산들을 수행함(1403B)). 그 후에, 모든 페이지들이 프로세싱되었는지를 결정하기 위한 검사가 이루어진다(페이지 종료됨?(1404B)). 종료되었다면, 프로세싱은 완료하고(종료(1499B)), 그렇지 않으면 흐름은 다른 페이지가 이용가능한지를 결정하기 위해 루프 백 한다.
[0306] 도 14a에 도시된 바와 같이 송신된 커맨드들에 응답하는 페이지들의 수신과 달리, 도 14b는 도 14a에 도시된 프로세싱과 무관하다. 다양한 시나리오들에서, 페이지들의 도착 순서는 NVM 타입, 상태, 동작 환경 및 다른 팩터들에 따라 변화하며, 일부 환경들에서 도착하는 페이지들에 대응하는 판독 커맨드들의 도착 순서 또는 송신 순서와는 다르다. (페이지 데이터 도착이 송신되는 대응하는 판독 커맨드에 의존하는 것과 다르게) 도 14a의 프로세싱이 도 14b와 무관하기 때문에, 일부 실시예들 및/또는 사용 시나리오들에서, 판독 커맨드들이 송신되는 한편(도 14a) 판독 데이터가 수신/프로세싱된다(도 14b). 일부 실시예들 및/또는 사용 시나리오들에서, 예를 들어 특정 페이지에 대한 판독 커맨드가 송신되기 전에 특정 페이지가 특정 버퍼에 존재하는 경우에, 페이지들 중 일부는 NVM들에 지시된 판독 커맨드들을 통해 요청되기보다는 오히려 하나 또는 둘 이상의 버퍼들로부터 제공된다. 일부 실시예들 및/또는 사용 시나리오들에서, 송신된 커맨드들에 응답하는 것과 다른 페이지들은 송신된 커맨드들에 응답하여 제공되는 페이지들, 예를 들어 다른 활동들을 위해 송신된 판독 커맨드들에 응답하여 제공된 페이지들과 혼합된 NVM들에 의해 제공된다.
[0307] 다양한 실시예들에서, 도 11에 의해 도시된 바와 같은 R0 및 R1에 대한 계산들은 도 14a 및 14b에 의해 도시된 바와 같이 적어도 부분적으로 수행된다. 제 1 예에서, 대응하는 R0 및 R1 페이지들을 계산하는데 필요한 모든 데이터 페이지들에 대한 판독 커맨드들이 도 14a에 의해 도시된 바와 같은 하나 또는 둘 이상의 NVM들에 송신된다. 도 11에 의해 도시된 바와 같이, 판독 커맨드들이 페이지들로서 프로세싱되는데 응답하여 수신된 데이터의 페이지들은 R0 및 R1 페이지들을 계산하기 위해 수신된다. 제 2 예에서, R0 및 R1 페이지들의 (예를 들어, 듀얼-평면 NVM의 2개의 평면들에 대응하는) 한 쌍을 위한 판독 커맨드들이 도 14a에 의해 도시된 바와 같은 하나 또는 둘 이상의 NVM들에 송신된다. 도 11에 의해 도시된 바와 같이, 판독 커맨드들이 페이지들로서 프로세싱되는데 응답하여 수신된 데이터의 페이지들은 R0 및 R1 페이지들을 계산하기 위해 수신된다.
[0308] 다양한 실시예들에서, 도 12에 의해 도시된 바와 같은 Pj에 대한 계산들은 도 14a 및 14b에 의해 도시된 바와 같이 적어도 부분적으로 수행된다. 제 1 예에서, 특정 Pj 페이지를 계산하는데 필요한 모든 데이터 페이지들에 대한 판독 커맨드들이 도 14a에 의해 도시된 바와 같이 하나 또는 둘 이상의 NVM들에 송신된다. 도 12에 의해 도시된 바와 같이, 판독 커맨드들이 페이지들로서 프로세싱되는데 응답하여 수신된 데이터의 페이지들은 Pj 페이지들을 계산하기 위해 수신된다. 제 2 예에서, Pj 페이지들의 (예를 들어, 듀얼-평면 NVM의 2개의 평면들에 대응하는) 한 쌍을 위한 판독 커맨드들이 도 14a에 의해 도시된 바와 같이 하나 또는 둘 이상의 NVM들에 송신되며, Pj 페이지들의 쌍을 계산하기 위해, 도 14b에 의해 도시된 바와 같이, 수신된 데이터의 페이지들이 수신된 것으로 프로세싱된다.
[0309] 다양한 실시예들에서, 도 13a-13d 중 임의의 것에 의해 도시된 바와 같은, (R0' 및 R1'에 대한 계산들과 같은) 복구 값들을 결정하는데 관련된 계산들은 도 14a 및 14b에 의해 도시된 바와 같이 적어도 부분적으로 수행된다. 제 1 예에서, 특정 R0' 페이지 및 특정 R1'을 계산하는데 필요한 모든 데이터 페이지들에 대한 판독 커맨드들이 도 14a에 의해 도시된 바와 같이 하나 또는 둘 이상의 NVM들에 송신된다. 도 13a에 의해 도시된 바와 같이, 판독 커맨드들이 페이지들로서 프로세싱되는데 응답하여 수신된 데이터의 페이지들은 R0' 및 R1' 페이지들을 계산하기 위해 수신된다. 제 2 예에서, (예를 들어, 듀얼-평면 NVM의 2개의 평면들에 대응하는) R0' 및 R1' 페이지들의 한 쌍을 위한 판독 커맨드들이 도 14a에 의해 도시된 바와 같이 하나 또는 둘 이상의 NVM들에 송신되며, R0' 및 R1' 페이지들의 쌍을 계산하기 위해, 도 14b에 의해 도시된 바와 같이, 수신된 데이터의 페이지들이 수신된 것으로 프로세싱된다.
[0310] 도 15a-15c는 예를 들어 도 11에 관련된 바와 같은 컨텍스트에서, NVM들에 제공되는 기록에 관한 상위-레벨 리던던시 정보의 계산을 백 아웃하는 실시예의 선택된 상세들을 도시한다. 도 15a는 발행(기록 동작을 발행함(1502A))을 통해 하나 또는 둘 이상의 NVM들에 복수의 기록 커맨드들을 송신하고, 커맨드들의 전부가 송신되었는지를 검사하며(모두 발행되었는가?(1503A)), 그렇지 않다면, 커맨드들 중 다른 하나를 송신하기 위해 루프 백하는 실시예의 선택된 상세들을 도시한다. 다른 실시예들은 복수의 커맨드들이 한번에 하나보다는 오히려, 한번에 복수의 커맨드들이 발행되는 경우의 다른 실시예들이 고려됨을 주목한다.
[0311] 도 15b는 도 15a에 도시된 바와 같이 송신되는 기록 커맨드들에 응답하여 NVM들로부터 수신되는 상태 정보 및 기록 완료를 프로세싱하는 일 실시예의 선택된 상세들을 도시한다. 기록이 에러들 없이 완료하였는지를 결정하기 위한 검사가 이루어진다(기록 OK?(1502B)). 그렇다면, 모든 기록들이 완료되었는지를 결정하기 위한 검사가 이루어진다(기록들이 종료됨?(1504B)). 그렇다면, 프로세싱은 완료한다(종료(1599B)). 기록이 완료되었지만 프로그램 실패와 같은 (하위-레벨) 에러를 갖는 경우에, 흐름은 상위-레벨 리던던시 정보 계산에 관하여 기록의 효과를 "무효로 하도록" 진행한다(리던던시로부터 기록을 백아웃(1503B)). 더 구체적으로, 하위-레벨 에러를 갖는 기록을 위한 데이터가 임의의 대응하는 상위-레벨 리던던시 정보 계산들로부터 역-계산(de-computed)된다(기록을 위한 데이터는 기록이 성공한다는 추정 하에 대응하는 상위-레벨 리던던시 계산들에 이미 포함된 것으로 가정함). 예를 들어, 하위-레벨 기록 실패가 특정 페이지 j 상에 검출된다. 이에 응답하여, 페이지 j 데이터(Pj)가 제로로 설정되도록 수정된 R0 및 R1 페이지들이 계산된다. 도 15c는 j가 하위-레벨 기록 실패의 페이지인 경우에, 수정된 R0(nR0)의 단일 바이트 및 수정된 R1(nR1)의 단일 바이트에 대한 계산의 일 실시예의 선택된 상세들을 도시한다. 도 11과 관련된 바와 같은 도 12의 맥락들에서, 유한 필드가 갈르와 필드인 경우에, 도 15c에 도시된 감산 연산("-")은 논리적 XOR 연산과 동등함을 주목한다. 다양한 실시예들에서, 하위-레벨 기록 실패를 갖는 페이지(Pj)뿐 아니라, 수정된 상위-레벨 리던던시 페이지들(nR0 및 nR1)을 저장하기 위해 (도시되지 않은) 다른 프로세싱이 수행된다.
[0312] 도 15a에 도시된 바와 같이 송신되는 커맨드들에 응답하는 상태 정보 및 기록 완료의 수신과 달리, 도 15b에 도시된 프로세싱은 도 15a에 도시된 프로세싱과 무관하다. 다양한 시나리오들에서, 기록 완료 및 상태 정보의 도착 순서는 NVM 타입, 상태, 동작 환경 및 다른 팩터들에 따라 변화하며, 일부 환경들에서 도착하는 기록 완료 및 상태 정보에 대응하는 기록 커맨드들의 도착 순서 또는 송신 순서와는 다르다. (기록 완료 및 상태 정보 도착이 송신되는 대응하는 기록 커맨드들에 의존하는 것과 다르게) 도 15a의 프로세싱이 도 15b와 무관하기 때문에, 일부 실시예들 및/또는 사용 시나리오들에서, 기록 커맨드들이 송신되는 한편(도 15a) 기록 완료 및 상태 정보가 수신/프로세싱된다(도 15b).
[0313] 일부 실시예들 및/또는 사용 시나리오들에서, 기록 커맨드들에 응답하여 NVM들로부터의 상태 정보 및 기록 완료의 수신과 기록 커맨드들이 NVM들에 송신되는 것 사이에 상당한 지연이 발생한다. 일부 실시예들 및/또는 사용 시나리오들에서, 도 15a에 도시된 바와 같이 송신되는 커맨드들에 응답하는 것과 다른 상태 정보 및 기록 완료는 도 15a에 도시된 바와 같이 송신되는 커맨드들에 응답하여 제공되는 상태 정보 및 기록 완료, 예를 들어 다른 활동들을 위해 송신되는 기록 커맨드들에 응답하여 제공되는 상태 정보 및 기록 완료와 혼합되어 NVM들에 의해 제공된다.
[0314] 다양한 실시예들 및/또는 사용 시나리오들에서, 그렇지 않으면 데이터 정보를 위해 이용되는 하나 또는 둘 이상의 페이지들이 비사용된다. 다양한 시나리오들에서 비사용되는 페이지는 블록, R-블록, 스트라이프 또는 임의의 종류의 페이지들의 시퀀스의 첫 번째, 중간 또는 최종 페이지이다. 일부 환경들에서, 비사용되는 페이지들은 선험적으로 비사용되고("생략(left out)"), 일부 환경들에서 비사용되는 페이지들이 일부의 이용 이후에 비사용된다("서비스로부터 제거됨"). 생략되는 비사용되는 페이지의 일 예는 올바르지 않게 제조되는 페이지이다. 서비스로부터 제거되는 비사용되는 페이지의 일 예는 (예를 들어, 도 15b에 관하여 하위-레벨 기록 에러로서 설명된 바와 같이) 적절하게 기록하는 것을 실패하는 페이지이다. 예를 들어, 도 10-12, 13a-13d, 14a-14b 및 15a-15b에 관련하는 프로세싱은 계산들로부터 전적으로 비사용되는 페이지들을 생략함으로써, 또는 비사용되는 페이지들 상의 모든 데이터가 제로인 것처럼 계산들을 수행함으로써와 같이, (생략이든지 서비스로부터 제거되든지 간에) 임의의 비사용되는 페이지들을 스킵한다.
[0315] 다양한 실시예들에서, 도 10-12, 13a-13d, 14a-14b 및 15a-15b의 하나 또는 둘 이상의 엘리먼트들의 또는 그에 관련하는 프로세싱은 도 1a의 하나 또는 둘 이상의 엘리먼트들(또는 그의 일부분들)에 의해 전적으로 또는 부분적으로 수행된다. 예를 들어, 도 12 및 도 13a-13d에 의해 도시된 바와 같은 데이터 복구 연산들을 지시함으로써와 같이, 상위-레벨 리던던시 프로세싱을 관리하기 위해 CPU(171)의 소프트웨어 실행 능력들의 일부분이 이용된다. 다른 예에서, 데이터 프로세싱(121)은 도 11에 의해 도시된 바와 같은 계산들에 따라 상위-레벨 리던던시 정보의 계산에 전용되는 및/또는 그 계산을 위해 특화되는 하드웨어 엘리먼트들을 포함한다.
예시적인 구현 기술들
[0316]
일부 실시예들에서, 독립적 실리콘 엘리먼트들(예를 들어, 플래시 메모리들), 컴퓨팅-호스트 플래시 메모리 제어기, 및/또는 (도 1a의 SSD 제어기(100)와 같은) SSD 제어기, 및 프로세서, 마이크로프로세서, 시스템-온-칩, 응용 주문형 집적 회로, 하드웨어 액셀러레이터(accelerator) 또는 상술한 동작들 중 전부 또는 일부분들을 제공하는 다른 회로를 갖는 것과 같은, 동적 상위-레벨 리던던시 모드 관리를 구현하는 시스템에 의해 수행되는 동작들 중 전부 또는 일부분들의 다양한 조합들이 컴퓨터 시스템에 의한 프로세싱과 호환가능한 사양에 의해 특정된다. 그 사양은 하드웨어 설명 언어들, 회로 설명들, 네트리스트(netlist) 설명들, 마스크 설명들 또는 레이아웃 설명들과 같은 다양한 설명들에 따른다. 예시적인 설명들은: 베릴로그(Verilog), VHDL, SPICE, PSpice와 같은 SPICE 변형들, IBIS, LEF, DEF, GDS-II, OASIS 또는 다른 설명들을 포함한다. 다양한 실시예들에서, 프로세싱은 하나 또는 둘 이상의 집적된 회로들 상의 포함을 위해 적합한 로직 및/또는 회로를 생성하고, 검증하거나 특정하기 위해 번역, 컴필레이션, 시뮬레이션 및 합성의 임의의 조합을 포함한다. 다양한 실시예들에 따른 각 집적 회로는 다양한 기술들에 따라 설계가능 및/또는 제조가능하다. 기술들은 (필드 또는 마스크 프로그램가능한 게이트 어레이 집적 회로와 같은) 프로그램가능 기술, (전적으로 또는 부분적으로 셀-기반된 집적 회로와 같은) 세미-커스텀(semi-custom) 기술 및 (실질적으로 특화되는 집적 회로와 같은) 풀-커스텀(full-custom) 기술 및 그의 임의의 조합, 또는 집적 회로들의 설계 및/또는 제조와 호환가능한 임의의 다른 기술을 포함한다.
[0317] 일부 실시예들에서, 그 안에 저장된 명령들의 세트를 갖는 컴퓨터 판독가능한 매체에 의해 설명된 바와 같은 동작들의 전부 또는 일부분들의 다양한 조합들은 하나 또는 둘 이상의 프로그램 명령들의 실행 및/또는 번역에 의해, 하나 또는 둘 이상의 소스 및/또는 스크립트 언어 구문들의 번역 및/또는 컴파일링에 의해, 또는 프로그래밍 및/또는 스크립팅 언어 구문들에 표현된 정보를 컴파일링, 변환, 및/또는 번역함으로써 생성되는 이진 명령들의 실행에 의해 수행된다. 구문들은 (C, C++, 포트란, 파스칼, Ada, Java, VBscript 및 쉘(Shell)과 같은) 임의의 표준 프로그래밍 또는 스크립팅 언어와 호환가능하다. 프로그램 명령들, 언어 구문들 또는 이진 명령들 중 하나 또는 둘 이상은 하나 또는 둘 이상의 컴퓨터 판독가능한 저장 매체 엘리먼트들 상에 임의선택적으로 저장된다. 다양한 실시예들에서, 프로그램 명령들 중 일부, 전부 또는 다양한 부분들은 하나 또는 둘 이상의 함수들, 루틴들, 서브-루틴들, 인-라인(in-line) 루틴들, 절차들, 매크로들 또는 그 일부분들로서 실현된다.
결론
[0318] 단지 텍스트 및 도면들을 준비하는데 편의를 위해 특정 선택들이 이루어졌으며 반대의 표시가 존재하지 않는 한 그 선택들은 그 자체가 설명된 실시예들의 구조 또는 동작에 관한 추가적인 정보를 전달하는 것으로 해석되어서는 안된다. 선택들의 예들은: 실시예들의 특징들 및 엘리먼트들을 식별하고 참조하기 위해 이용되는 엘리먼트 식별자들(예를 들어, 발호들(callouts) 또는 수치적 지시자들)의 특정 조직 또는 할당과 도면 넘버링을 위해 이용되는 지시들의 특정 조직 또는 할당을 포함한다.
[0319] 용어들 "포함하다" 또는 "포함하는"은 구체적으로 개방형 범위의 논리적 세트들을 설명하는 관념들로서 해석되도록 의도되며 용어 "~내의"가 명시적으로 후속하지 않는 한 물리적 봉쇄를 전달하도록 의미되지 않는다.
[0320] 전술한 실시예들이 설명 및 이해의 명확성의 목적들을 위해 일부 상세에서 설명되었더라도, 본 발명은 제공된 상세들에 제한되지 않는다. 본 발명의 많은 실시예들이 존재한다. 개시된 실시예들은 예시적이며 제한하지 않는다.
[0321] 설명에 일치하는 구성, 배열 및 이용에서의 많은 변형들이 가능하며, 발행된 특허 청구범위의 범위 내에 있음이 이해될 것이다. 예를 들어, 상호접속 및 기능-유닛 비트-폭들, 클록 속도들 및 기술의 타입은 각 컴포넌트 블록에서의 다양한 실시예들에 따라 가변적이다. 상호접속 및 로직에 정해지는 명칭들은 단지 예시적이며, 설명된 개념들을 제한하는 것으로 해석되어서는 안 된다. 흐름도 및 흐름도 프로세스, 동작 및 기능 엘리먼트들의 순서 및 배열은 다양한 실시예들에 따라 가변적이다. 또한, 구체적으로 반대도 서술되지 않는 한, 특정된 값 범위들, 이용된 최대 및 최소 값들 또는 (플래시 메모리 기술 타입들; 및 레지스터들 및 버퍼들에서의 입력들 또는 스테이지들의 수와 같은) 다른 특정 사양들은 단지 설명된 실시예들이며, 구현 기술에서의 개선들 및 변경들을 추적할 것이 예상되며, 제한들로서 해석되어서는 안 된다.
[0322] 기술분야에 알려진 기능적으로 동등한 기술들은 다양한 컴포넌트들, 서브-시스템들, 동작들, 기능들, 루틴들, 서브-루틴들, 인-라인 루틴들, 절차들, 매크로들 또는 그 일부분들을 구현하도록 설명된 것들 대신에 사용가능하다. 실시예들의 많은 기능적 양상들은 (이전에 하드웨어에서의 기능들의 소프트웨어로의 이동을 용이하게 하는) 더 고속의 프로세싱 및 (이전에 소프트웨어에서의 기능들의 하드웨어로의 이동을 용이하게 하는) 더 높은 집적 밀도의 기술 트렌드들 및 설계 제약들에 의존하는 실시예의 기능으로서, 선택적으로 하드웨어(즉, 일반적으로 전용 회로) 또는 (즉, 프로그램되는 제어기 또는 프로세서의 일부 방식을 통한) 소프트웨어로 실현가능하다. 다양한 실시예들에서의 특정 변형들은: 분할에서의 차이들; 서로 다른 형태 팩터들 및 구성들; 서로 다른 운영 시스템들 및 다른 시스템 소프트웨어의 이용; 서로 다른 인터페이스 표준들, 네트워크 프로토콜들 또는 통신 링크들의 이용; 및 특정 애플리케이션의 고유한 엔지니어링 및 비지니스 제약들에 따라 본원에 설명된 개념들을 구현할 때 예상되는 다른 변형들을 포함하지만, 이들로 제한되는 것은 아니다.
[0323] 실시예들은 설명된 실시예들의 많은 양상들의 최소 구현을 위해 요구되는 것을 훨씬 넘어선 상세 및 환경적 컨텍스트로 설명되었다. 당업자는 일부 실시예들이 나머지 엘리먼트들 사이의 기본적 협력을 변경하지 않고서 개시된 컴포넌트들 또는 특징들을 생략함을 인식할 것이다. 따라서 개시된 상세들의 다수는 설명된 실시예들의 다양한 양상들을 구현하도록 요구되지 않음이 이해된다. 나머지 엘리먼트들이 종래 기술과 구별되는 범위까지, 생략되는 컴포넌트들 및 특징들은 본원에 설명된 개념들 상에 제한하지 않는다.
[0324] 그와 같은 모든 설계에서의 변형들은 설명된 실시예들에 의해 전달되는 교시들을 통한 실체 없는 변경들이다. 본원에 설명된 실시예들은 다른 컴퓨팅 및 네트워킹 애플리케이션들로의 광범위한 적용가능성을 가지며, 설명된 실시예들의 특정 애플리케이션 또는 산업으로 제한되지 않음이 또한 이해된다. 본 발명은 따라서 발행되는 특허 청구범위의 범위 내에 망라되는 모든 가능한 수정들 및 변형들을 포함하는 것으로 해석된다.
Claims (32)
- 데이터 저장 정보의 복수의 유닛들 각각이 개별적으로 이용가능해지는 것에 응답하여 제 1 순서로 상위-레벨 리던던시 정보의 하나 또는 둘 이상의 유닛들을 계산하기 위해 데이터 저장 정보의 복수의 유닛들 각각을 개별적으로 프로세싱하기 위한 수단;
데이터 저장 정보의 정정가능하지 않은 유닛들 각각과 관련되는 각 하위-레벨 리던던시 정보에 적어도 부분적으로 기초하여 데이터 저장 정보의 정정가능하지 않은 유닛들로서 데이터 저장 정보의 복수의 유닛들 중 특정의 하나 또는 둘 이상을 결정하기 위한 수단―상기 데이터 저장 정보의 정정가능하지 않은 유닛들 외에 상기 데이터 저장 정보의 복수의 유닛들은 데이터 저장 정보의 정정가능한 유닛들임―;
적어도 부분적으로, 데이터 저장 정보의 복수의 유닛들 각각이 개별적으로 이용가능해지는 것에 응답하여 제 2 순서로 데이터 저장 정보의 정정가능한 유닛들 각각을 개별적으로 프로세싱하기 위한 수단을 통해 데이터 저장 정보의 정정가능하지 않은 유닛들의 정정된 버전들을 계산하기 위한 수단을 포함하며; 및
상기 제 1 순서는 상기 제 2 순서와 다른, 시스템. - 제 1 항에 있어서,
하나 또는 둘 이상의 비-휘발성 메모리들(NVMs) 및 상기 NVM들로부터 데이터 저장 정보의 상기 정정가능한 유닛들 중 적어도 일부를 판독하기 위한 수단을 더 포함하며, 여기서 상기 제 2 순서는 상기 NVM들이 상기 데이터 저장 정보의 정정가능한 유닛들 중 적어도 일부를 리턴하는 순서에 따르는, 시스템. - 제 2 항에 있어서,
상기 NVM들에서의 상기 데이터 저장 정보의 복수의 유닛들을 저장하기 위한 수단을 더 포함하며, 여기서 상기 제 1 순서는 상기 저장의 순서에 따르는, 시스템. - 제 3 항에 있어서,
고체-상태 디스크(Solid-State Disk: SSD)를 구현하기 위해 부분적으로 상기 NVM들 중 하나 또는 둘 이상을 관리하기 위한 수단을 더 포함하는, 시스템. - 제 1 항에 있어서,
하나 또는 둘 이상의 비-휘발성 메모리들(NVMs)을 더 포함하며, 여기서 상기 데이터 저장 정보의 복수의 유닛들 각각은 상기 NVM들의 하나 또는 둘 이상의 각 페이지들에 대응하는, 시스템. - 제 5 항에 있어서,
상기 NVM들 중 하나 또는 둘 이상은 고체-상태 디스크(SSD)에 포함되는 플래시 메모리들인, 시스템. - 제 1 항에 있어서,
상기 데이터 저장 정보의 정정가능하지 않은 유닛들의 수는 2인, 시스템. - 제 1 항에 있어서,
상기 데이터 저장 정보의 정정가능하지 않은 유닛들의 상기 정정된 버전들을 계산하기 위한 수단은 적어도 부분적으로, 상위-레벨 리던던시 정보의 유닛들 중 적어도 하나를 프로세싱하기 위한 수단을 더 통하는, 시스템. - 제 8 항에 있어서,
상기 데이터 저장 정보의 정정가능하지 않은 유닛들의 수는 상위-레벨 리던던시 정보의 유닛들 중 적어도 하나의 수와 동일한, 시스템. - 제 1 항에 있어서,
상기 상위-레벨 리던던시 정보의 유닛들은 상기 데이터 저장 정보의 복수의 유닛들의 대응하는 바이트들의 발생기 다항식에 의한 다항식 나눗셈의 나머지로서 계산가능하지 않은, 시스템. - 제 1 항에 있어서,
하나 또는 둘 이상의 플래시 메모리들 및 상기 플래시 메모리들의 다이의 제 1 부분에 데이터 저장 정보의 복수의 유닛들을 저장하기 위한 수단, 상기 플래시 메모리들의 다이의 제 2 부분에 상위-레벨 리던던시 정보의 유닛들을 저장하기 위한 수단을 더 포함하며, 여기서 상기 제 1 및 제 2 부분들은 상호 배타적인, 시스템. - 제 1 항에 있어서,
하나 또는 둘 이상의 플래시 메모리들 및 상기 플래시 메모리들의 다이의 일부분에 데이터 저장 정보의 복수의 유닛들을 저장하기 위한 수단을 더 포함하며, 상기 일부분은 상기 플래시 메모리들의 모든 다이보다 적은, 시스템. - 제 1 항에 있어서,
하나 또는 둘 이상의 플래시 메모리들 및 상기 플래시 메모리들의 다이의 일부분에 상위-레벨 리던던시 정보의 유닛들을 저장하기 위한 수단을 더 포함하며, 상기 일부분은 상기 플래시 메모리들의 모든 다이보다 적은, 시스템. - 데이터 저장 정보의 복수의 유닛들 각각이 개별적으로 이용가능해지는 것에 응답하여 제 1 순서로 상위-레벨 리던던시 정보의 하나 또는 둘 이상의 유닛들을 계산하기 위해 데이터 저장 정보의 복수의 유닛들 각각을 개별적으로 프로세싱하는 단계;
데이터 저장 정보의 정정가능하지 않은 유닛들 각각과 관련되는 개별적인 하위-레벨 리던던시 정보에 적어도 부분적으로 기초하여 데이터 저장 정보의 정정가능하지 않은 유닛들로서 데이터 저장 정보의 복수의 유닛들 중 특정의 하나 또는 둘 이상을 결정하는 단계―상기 데이터 저장 정보의 정정가능하지 않은 유닛들 외에 상기 데이터 저장 정보의 복수의 유닛들은 데이터 저장 정보의 정정가능한 유닛들임―;
적어도 부분적으로, 데이터 저장 정보의 복수의 유닛들 각각이 개별적으로 이용가능해지는 것에 응답하여 제 2 순서로 데이터 저장 정보의 정정가능한 유닛들 각각을 개별적으로 프로세싱하는 단계를 통해 데이터 저장 정보의 정정가능하지 않은 유닛들의 정정되는 버전들을 계산하는 단계를 포함하며; 및
상기 제 1 순서는 상기 제 2 순서와 다른, 방법. - 제 14 항에 있어서,
하나 또는 둘 이상의 비-휘발성 메모리들(NVMs) 및 상기 NVM들로부터 데이터 저장 정보의 상기 정정가능한 유닛들 중 적어도 일부를 판독하는 단계를 더 포함하며, 여기서 상기 제 2 순서는 상기 NVM들이 상기 데이터 저장 정보의 정정가능한 유닛들 중 적어도 일부를 리턴하는 순서에 따르는, 방법. - 제 15 항에 있어서,
상기 NVM들에서의 상기 데이터 저장 정보의 복수의 유닛들을 저장하는 단계를 더 포함하며, 여기서 상기 제 1 순서는 상기 저장의 순서에 따르는, 방법. - 제 16 항에 있어서,
고체-상태 디스크(SSD)를 구현하기 위해 부분적으로 상기 NVM들 중 하나 또는 둘 이상을 관리하는 단계를 더 포함하는, 방법. - 제 14 항에 있어서,
상기 데이터 저장 정보의 복수의 유닛들 각각은 하나 또는 둘 이상의 비-휘발성 메모리들(NVMs)의 하나 또는 둘 이상의 개별적인 페이지들에 대응하는, 방법. - 제 18 항에 있어서,
상기 NVM들 중 하나 또는 둘 이상은 고체-상태 디스크(SSD)에 포함되는 플래시 메모리들인, 방법. - 제 14 항에 있어서,
상기 데이터 저장 정보의 정정가능하지 않은 유닛들의 수는 2인, 방법. - 제 14 항에 있어서,
상기 데이터 저장 정보의 정정가능하지 않은 유닛들의 상기 정정된 버전들을 계산하는 단계는 적어도 부분적으로, 상위-레벨 리던던시 정보의 유닛들 중 적어도 하나를 프로세싱하는 단계를 더 통하는, 방법. - 제 21 항에 있어서,
상기 데이터 저장 정보의 정정가능하지 않은 유닛들의 수는 상위-레벨 리던던시 정보의 유닛들 중 적어도 하나의 수와 동일한, 방법. - 제 14 항에 있어서,
상기 상위-레벨 리던던시 정보의 유닛들은 상기 데이터 저장 정보의 복수의 유닛들의 대응하는 바이트들의 발생기 다항식에 의한 다항식 나눗셈의 나머지로서 계산가능하지 않은, 방법. - 제 14 항에 있어서,
하나 또는 둘 이상의 플래시 메모리들의 다이의 제 1 부분에 데이터 저장 정보의 복수의 유닛들을 저장하는 단계, 상기 플래시 메모리들의 다이의 제 2 부분에 상위-레벨 리던던시 정보의 유닛들을 저장하는 단계를 더 포함하며, 여기서 상기 제 1 및 제 2 부분들은 상호 배타적인, 방법. - 제 14 항에 있어서,
하나 또는 둘 이상의 플래시 메모리들의 다이의 일부분에 데이터 저장 정보의 복수의 유닛들을 저장하는 단계를 더 포함하며, 상기 일부분은 상기 플래시 메모리들의 모든 다이보다 적은, 방법. - 제 14 항에 있어서,
하나 또는 둘 이상의 플래시 메모리들의 다이의 일부분에 상위-레벨 리던던시 정보의 유닛들을 저장하는 단계를 더 포함하며, 상기 일부분은 상기 플래시 메모리들의 모든 다이보다 적은, 방법. - 데이터 저장 정보의 복수의 유닛들 각각이 개별적으로 이용가능해지는 것에 응답하여 제 1 순서로 상위-레벨 리던던시 정보의 하나 또는 둘 이상의 유닛들을 계산하기 위해 데이터 저장 정보의 복수의 유닛들 각각을 개별적으로 프로세싱하도록 가능해진 제 1 프로세싱 로직 회로;
데이터 저장 정보의 정정가능하지 않은 유닛들 각각과 관련되는 개별적인 하위-레벨 리던던시 정보에 적어도 부분적으로 기초하여 데이터 저장 정보의 정정가능하지 않은 유닛들로서 데이터 저장 정보의 복수의 유닛들 중 특정의 하나 또는 둘 이상을 결정하도록 가능해진 결정 로직 회로―상기 데이터 저장 정보의 정정가능하지 않은 유닛들 외에 상기 데이터 저장 정보의 복수의 유닛들은 데이터 저장 정보의 정정가능한 유닛들임―;
적어도 부분적으로, 데이터 저장 정보의 복수의 유닛들 각각이 개별적으로 이용가능해지는 것에 응답하여 제 2 순서로 데이터 저장 정보의 정정가능한 유닛들 각각을 개별적으로 프로세싱하도록 가능해진 제 2 프로세싱 로직 회로를 통해 데이터 저장 정보의 정정가능하지 않은 유닛들의 정정되는 버전들을 계산하도록 가능해진 계산 로직 회로를 포함하며; 및
상기 제 1 순서는 상기 제 2 순서와 다른, 시스템. - 제 27 항에 있어서,
하나 또는 둘 이상의 비-휘발성 메모리들(NVMs) 및 상기 NVM들로부터 데이터 저장 정보의 상기 정정가능한 유닛들 중 적어도 일부를 판독하도록 가능한 판독 로직 회로를 더 포함하며, 여기서 상기 제 2 순서는 상기 NVM들이 상기 데이터 저장 정보의 정정가능한 유닛들 중 적어도 일부를 리턴하는 순서에 따르는, 시스템. - 제 28 항에 있어서,
상기 NVM들에서의 상기 데이터 저장 정보의 복수의 유닛들을 저장하도록 가능한 저장 로직 회로를 더 포함하며, 여기서 상기 제 1 순서는 상기 저장의 순서에 따르는, 시스템. - 제 29 항에 있어서,
상기 NVM들은 고체-상태 디스크(SSD)에 포함되는, 시스템. - 제 27 항에 있어서,
하나 또는 둘 이상의 비-휘발성 메모리들(NVMs)을 더 포함하며, 여기서 상기 데이터 저장 정보의 복수의 유닛들 각각은 상기 NVM들의 하나 또는 둘 이상의 개별적인 페이지들에 대응하는, 시스템. - 제 31 항에 있어서,
상기 NVM들 중 하나 또는 둘 이상은 고체-상태 디스크(SSD)에 포함되는 플래시 메모리들인, 시스템.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201161433918P | 2011-01-18 | 2011-01-18 | |
US61/433,918 | 2011-01-18 | ||
PCT/US2012/021682 WO2012099937A2 (en) | 2011-01-18 | 2012-01-18 | Higher-level redundancy information computation |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020147019498A Division KR101564569B1 (ko) | 2011-01-18 | 2012-01-18 | 상위-레벨 리던던시 정보 계산 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20130118370A true KR20130118370A (ko) | 2013-10-29 |
KR101454807B1 KR101454807B1 (ko) | 2014-11-04 |
Family
ID=46516340
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020147019498A KR101564569B1 (ko) | 2011-01-18 | 2012-01-18 | 상위-레벨 리던던시 정보 계산 |
KR1020137021636A KR101454807B1 (ko) | 2011-01-18 | 2012-01-18 | 상위-레벨 리던던시 정보 계산 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020147019498A KR101564569B1 (ko) | 2011-01-18 | 2012-01-18 | 상위-레벨 리던던시 정보 계산 |
Country Status (7)
Country | Link |
---|---|
US (2) | US8656101B2 (ko) |
EP (1) | EP2666091A2 (ko) |
JP (1) | JP2014507717A (ko) |
KR (2) | KR101564569B1 (ko) |
CN (1) | CN103415844B (ko) |
TW (1) | TW201241615A (ko) |
WO (1) | WO2012099937A2 (ko) |
Families Citing this family (45)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8935595B2 (en) | 2010-03-12 | 2015-01-13 | Lsi Corporation | LDPC erasure decoding for flash memories |
US9582431B2 (en) | 2010-03-22 | 2017-02-28 | Seagate Technology Llc | Storage address space to NVM address, span, and length mapping/converting |
KR101636785B1 (ko) | 2010-12-01 | 2016-07-06 | 엘에스아이 코포레이션 | 독립 실리콘 소자들을 갖는 동적 상위 레벨 리던던시 모드 관리 |
US9569320B2 (en) * | 2010-12-01 | 2017-02-14 | Seagate Technology Llc | Non-volatile memory program failure recovery via redundant arrays |
US8719663B2 (en) | 2010-12-12 | 2014-05-06 | Lsi Corporation | Cross-decoding for non-volatile storage |
KR101564569B1 (ko) | 2011-01-18 | 2015-11-03 | 엘에스아이 코포레이션 | 상위-레벨 리던던시 정보 계산 |
JP5346978B2 (ja) * | 2011-04-15 | 2013-11-20 | シャープ株式会社 | インターフェイス装置、配線基板、及び情報処理装置 |
JP5346979B2 (ja) * | 2011-04-18 | 2013-11-20 | シャープ株式会社 | インターフェイス装置、配線基板、及び情報処理装置 |
KR101438716B1 (ko) | 2011-08-09 | 2014-09-11 | 엘에스아이 코포레이션 | I/o 디바이스 및 컴퓨팅 호스팅 상호동작 |
US8799598B2 (en) * | 2012-02-17 | 2014-08-05 | Spansion Llc | Redundancy loading efficiency |
US8856431B2 (en) * | 2012-08-02 | 2014-10-07 | Lsi Corporation | Mixed granularity higher-level redundancy for non-volatile memory |
WO2014047182A2 (en) * | 2012-09-21 | 2014-03-27 | Nyse Group, Inc. | High performance data streaming |
US9395924B2 (en) | 2013-01-22 | 2016-07-19 | Seagate Technology Llc | Management of and region selection for writes to non-volatile memory |
US20140281802A1 (en) * | 2013-03-15 | 2014-09-18 | SEAKR Engineering, Inc. | Multi-dimensional error detection and correction memory and computing architecture |
EP2830226A1 (en) * | 2013-07-24 | 2015-01-28 | Pierre Arrigo | Encoding and decoding methods and devices |
JP5978259B2 (ja) * | 2013-08-16 | 2016-08-24 | エルエスアイ コーポレーション | 順次読み出し最適化可変サイズフラッシュトランスレーションレイヤ |
JP6443794B2 (ja) * | 2013-08-16 | 2018-12-26 | エルエスアイ コーポレーション | ホストとコントローラとの間でパーティション化された変換レイヤ |
US9535628B2 (en) * | 2013-10-10 | 2017-01-03 | Apple Inc. | Memory system with shared file system |
US20150199293A1 (en) * | 2013-11-20 | 2015-07-16 | Hangzhou Dianzi University | Method and apparatus with interface for redundant array of independent modules |
US9455020B2 (en) * | 2014-06-05 | 2016-09-27 | Micron Technology, Inc. | Apparatuses and methods for performing an exclusive or operation using sensing circuitry |
US10652193B2 (en) * | 2014-06-18 | 2020-05-12 | Western Digital Technologies, Inc. | Managing and accessing data storage systems |
CN104050061B (zh) * | 2014-07-01 | 2016-01-20 | 中国航天科工集团第二研究院七〇六所 | 一种基于PCIe总线多主控板冗余备份系统 |
US9766972B2 (en) * | 2014-08-07 | 2017-09-19 | Pure Storage, Inc. | Masking defective bits in a storage array |
US9575853B2 (en) * | 2014-12-12 | 2017-02-21 | Intel Corporation | Accelerated data recovery in a storage system |
US10162700B2 (en) * | 2014-12-23 | 2018-12-25 | International Business Machines Corporation | Workload-adaptive data packing algorithm |
US9678665B2 (en) * | 2015-03-06 | 2017-06-13 | Western Digital Technologies, Inc. | Methods and systems for memory page allocation |
US10275310B2 (en) | 2015-03-09 | 2019-04-30 | Western Digital Technologies, Inc. | Updating exclusive-or parity data |
CN106155812A (zh) | 2015-04-28 | 2016-11-23 | 阿里巴巴集团控股有限公司 | 一种对虚拟主机的资源管理的方法、装置、系统及电子设备 |
US10191841B2 (en) | 2015-07-06 | 2019-01-29 | Shannon Systems Ltd. | Host device, access system, and access method |
CN106339179B (zh) * | 2015-07-06 | 2020-11-17 | 上海宝存信息科技有限公司 | 主机装置、存取系统、以及存取方法 |
US9734009B2 (en) * | 2015-10-08 | 2017-08-15 | Sandisk Technologies Llc | Data encoding techniques for a device |
US9946596B2 (en) | 2016-01-29 | 2018-04-17 | Toshiba Memory Corporation | Global error recovery system |
US10275376B2 (en) | 2016-03-02 | 2019-04-30 | Western Digital Technologies, Inc. | Efficient cross device redundancy implementation on high performance direct attached non-volatile storage with data reduction |
US10275165B2 (en) | 2016-09-12 | 2019-04-30 | Toshiba Memory Corporation | Memory controller |
US10606767B2 (en) * | 2017-05-19 | 2020-03-31 | Samsung Electronics Co., Ltd. | Ethernet-attached SSD for automotive applications |
US10474527B1 (en) | 2017-06-30 | 2019-11-12 | Seagate Technology Llc | Host-assisted error recovery |
TWI651650B (zh) * | 2018-02-05 | 2019-02-21 | 大陸商深圳大心電子科技有限公司 | 記憶體管理方法及使用所述方法的儲存控制器 |
CN111243654B (zh) * | 2018-11-28 | 2024-10-22 | 杭州知存算力科技有限公司 | 一种闪存芯片及其校准方法和装置 |
US11204819B2 (en) * | 2018-12-21 | 2021-12-21 | Samsung Electronics Co., Ltd. | System and method for offloading application functions to a device |
CN110572864A (zh) * | 2019-08-28 | 2019-12-13 | 惠州Tcl移动通信有限公司 | 驻网频段的存储及调用方法、移动终端、计算机存储介质 |
US11531590B2 (en) | 2019-09-17 | 2022-12-20 | Western Digital Technologies, Inc. | Method and system for host-assisted data recovery assurance for data center storage device architectures |
TWI785702B (zh) * | 2021-05-07 | 2022-12-01 | 旺宏電子股份有限公司 | 用於產生識別碼之儲存裝置及識別碼產生方法 |
US11984166B2 (en) | 2021-05-07 | 2024-05-14 | Macronix International Co., Ltd. | Storage device for generating identity code and identity code generating method |
US20230015697A1 (en) * | 2021-07-13 | 2023-01-19 | Citrix Systems, Inc. | Application programming interface (api) authorization |
CN117274027B (zh) * | 2023-08-22 | 2024-05-24 | 北京辉羲智能科技有限公司 | 一种硬件安全冗余的图像处理芯片 |
Family Cites Families (61)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US565113A (en) * | 1896-08-04 | graves | ||
US5099484A (en) | 1989-06-09 | 1992-03-24 | Digital Equipment Corporation | Multiple bit error detection and correction system employing a modified Reed-Solomon code incorporating address parity and catastrophic failure detection |
US5418921A (en) * | 1992-05-05 | 1995-05-23 | International Business Machines Corporation | Method and means for fast writing data to LRU cached based DASD arrays under diverse fault tolerant modes |
JPH07271672A (ja) | 1994-03-30 | 1995-10-20 | Toshiba Corp | マルチウェイセットアソシアティブキャッシュシステム |
EP1278125A2 (en) | 1994-10-14 | 2003-01-22 | MIPS Technologies, Inc. | Indexing and multiplexing of interleaved cache memory arrays |
US5666512A (en) | 1995-02-10 | 1997-09-09 | Hewlett-Packard Company | Disk array having hot spare resources and methods for using hot spare resources to store user data |
US5862158A (en) | 1995-11-08 | 1999-01-19 | International Business Machines Corporation | Efficient method for providing fault tolerance against double device failures in multiple device systems |
JPH10222314A (ja) * | 1997-01-31 | 1998-08-21 | Xing:Kk | 記憶装置アレイシステム |
US6557123B1 (en) | 1999-08-02 | 2003-04-29 | Inostor Corporation | Data redundancy methods and apparatus |
US7117397B1 (en) | 1999-12-15 | 2006-10-03 | Fujitsu Limited | Apparatus and method for preventing an erroneous operation at the time of detection of a system failure |
US6594796B1 (en) | 2000-06-30 | 2003-07-15 | Oak Technology, Inc. | Simultaneous processing for error detection and P-parity and Q-parity ECC encoding |
KR100388208B1 (ko) | 2001-05-25 | 2003-06-19 | 주식회사 하이닉스반도체 | 반도체 메모리 장치의 리던던시 회로 |
US6961890B2 (en) | 2001-08-16 | 2005-11-01 | Hewlett-Packard Development Company, L.P. | Dynamic variable-length error correction code |
US7073115B2 (en) | 2001-12-28 | 2006-07-04 | Network Appliance, Inc. | Correcting multiple block data loss in a storage array using a combination of a single diagonal parity group and multiple row parity groups |
US7372731B2 (en) | 2003-06-17 | 2008-05-13 | Sandisk Il Ltd. | Flash memories with adaptive reference voltages |
US20090193184A1 (en) | 2003-12-02 | 2009-07-30 | Super Talent Electronics Inc. | Hybrid 2-Level Mapping Tables for Hybrid Block- and Page-Mode Flash-Memory System |
US7237067B2 (en) * | 2004-04-22 | 2007-06-26 | Hewlett-Packard Development Company, L.P. | Managing a multi-way associative cache |
US8122193B2 (en) | 2004-12-21 | 2012-02-21 | Samsung Electronics Co., Ltd. | Storage device and user device including the same |
US8200887B2 (en) | 2007-03-29 | 2012-06-12 | Violin Memory, Inc. | Memory management system and method |
WO2007012920A1 (en) * | 2005-07-27 | 2007-02-01 | Adaptec, Inc. | Method and system for improving the performance of reed-solomon parity operations in redundant array of inexpensive disks |
KR100732628B1 (ko) | 2005-07-28 | 2007-06-27 | 삼성전자주식회사 | 멀티-비트 데이터 및 싱글-비트 데이터를 저장하는 플래시메모리 장치 |
US7681109B2 (en) * | 2005-10-13 | 2010-03-16 | Ramot At Tel Aviv University Ltd. | Method of error correction in MBC flash memory |
US20070143541A1 (en) | 2005-12-19 | 2007-06-21 | Lsi Logic Corporation | Methods and structure for improved migration of raid logical volumes |
US7809994B2 (en) | 2006-05-17 | 2010-10-05 | Sandisk Corporation | Error correction coding for multiple-sector pages in flash memory devices |
US7739576B2 (en) | 2006-08-31 | 2010-06-15 | Micron Technology, Inc. | Variable strength ECC |
US20080126839A1 (en) | 2006-09-19 | 2008-05-29 | Satish Sangapu | Optimized reconstruction and copyback methodology for a failed drive in the presence of a global hot spare disc |
US8171380B2 (en) | 2006-10-10 | 2012-05-01 | Marvell World Trade Ltd. | Adaptive systems and methods for storing and retrieving data to and from memory cells |
KR20090087498A (ko) | 2006-12-06 | 2009-08-17 | 퓨전 멀티시스템즈, 인크.(디비에이 퓨전-아이오) | 고-용량, 비-휘발성 스토리지를 위한 캐시로서의 솔리드-스테이트 스토리지 장치, 시스템 및 방법 |
US7505319B2 (en) | 2007-01-31 | 2009-03-17 | Taiwan Semiconductor Manufacturing Company, Ltd. | Method and apparatus for high efficiency redundancy scheme for multi-segment SRAM |
US20100107039A1 (en) | 2007-02-01 | 2010-04-29 | Kabushiki Kaisha Toshiba | Semiconductor memory with reed-solomon decoder |
US8122323B2 (en) | 2007-03-08 | 2012-02-21 | Intel Corporation | Method, apparatus, and system for dynamic ECC code rate adjustment |
US20080276124A1 (en) | 2007-05-04 | 2008-11-06 | Hetzler Steven R | Incomplete write protection for disk array |
US8429492B2 (en) | 2007-11-30 | 2013-04-23 | Marvell World Trade Ltd. | Error correcting code predication system and method |
US9152496B2 (en) | 2007-12-21 | 2015-10-06 | Cypress Semiconductor Corporation | High performance flash channel interface |
US8443260B2 (en) | 2007-12-27 | 2013-05-14 | Sandisk Il Ltd. | Error correction in copy back memory operations |
KR20100139010A (ko) | 2008-03-11 | 2010-12-31 | 에이저 시스템즈 인크 | 멀티-레벨 셀 플래쉬 메모리 디바이스 내에 데이터를 저장하는 방법 및 멀티-레벨 셀 플래쉬 메모리 디바이스 |
EP2297742B1 (en) * | 2008-05-16 | 2013-07-24 | Fusion-io, Inc. | Apparatus, system, and method for detecting and replacing failed data storage |
US8959280B2 (en) | 2008-06-18 | 2015-02-17 | Super Talent Technology, Corp. | Super-endurance solid-state drive with endurance translation layer (ETL) and diversion of temp files for reduced flash wear |
US20100017649A1 (en) | 2008-07-19 | 2010-01-21 | Nanostar Corporation | Data storage system with wear-leveling algorithm |
US20100017650A1 (en) | 2008-07-19 | 2010-01-21 | Nanostar Corporation, U.S.A | Non-volatile memory data storage system with reliability management |
US8041984B2 (en) | 2008-10-17 | 2011-10-18 | International Business Machines Corporation | Redundancy information for adjusting threshold for component failure in a multi-layer system |
KR101059673B1 (ko) | 2008-12-26 | 2011-08-25 | 서울대학교산학협력단 | 신뢰도 또는 저장 용량을 동적으로 조절하는 저장 장치 및 그 방법 |
US8438455B2 (en) * | 2008-12-31 | 2013-05-07 | Intel Corporation | Error correction in a solid state disk |
US8065558B2 (en) | 2009-03-24 | 2011-11-22 | Lsi Corporation | Data volume rebuilder and methods for arranging data volumes for improved RAID reconstruction performance |
CN101882472A (zh) | 2009-05-05 | 2010-11-10 | 建兴电子科技股份有限公司 | 具可变动错误校正码机制的快闪储存装置及其控制方法 |
US8307258B2 (en) | 2009-05-18 | 2012-11-06 | Fusion-10, Inc | Apparatus, system, and method for reconfiguring an array to operate with less storage elements |
JP4843695B2 (ja) * | 2009-06-26 | 2011-12-21 | 株式会社東芝 | ディスクアレイ制御装置及びディスクアレイ装置 |
US7856528B1 (en) | 2009-08-11 | 2010-12-21 | Texas Memory Systems, Inc. | Method and apparatus for protecting data using variable size page stripes in a FLASH-based storage system |
US8402217B2 (en) | 2009-09-15 | 2013-03-19 | Marvell International Ltd. | Implementing RAID in solid state memory |
US8266501B2 (en) | 2009-09-29 | 2012-09-11 | Micron Technology, Inc. | Stripe based memory operation |
US8935595B2 (en) | 2010-03-12 | 2015-01-13 | Lsi Corporation | LDPC erasure decoding for flash memories |
US9189385B2 (en) | 2010-03-22 | 2015-11-17 | Seagate Technology Llc | Scalable data structures for control and management of non-volatile storage |
CN103329103B (zh) | 2010-10-27 | 2017-04-05 | 希捷科技有限公司 | 使用用于基于闪存的数据存储的自适应ecc技术的方法和设备 |
KR101636785B1 (ko) | 2010-12-01 | 2016-07-06 | 엘에스아이 코포레이션 | 독립 실리콘 소자들을 갖는 동적 상위 레벨 리던던시 모드 관리 |
US9727414B2 (en) * | 2010-12-01 | 2017-08-08 | Seagate Technology Llc | Fractional redundant array of silicon independent elements |
US9569320B2 (en) | 2010-12-01 | 2017-02-14 | Seagate Technology Llc | Non-volatile memory program failure recovery via redundant arrays |
US8719663B2 (en) | 2010-12-12 | 2014-05-06 | Lsi Corporation | Cross-decoding for non-volatile storage |
KR101564569B1 (ko) | 2011-01-18 | 2015-11-03 | 엘에스아이 코포레이션 | 상위-레벨 리던던시 정보 계산 |
US8595415B2 (en) | 2011-02-02 | 2013-11-26 | Micron Technology, Inc. | At least semi-autonomous modules in a memory system and methods |
US8856431B2 (en) | 2012-08-02 | 2014-10-07 | Lsi Corporation | Mixed granularity higher-level redundancy for non-volatile memory |
KR20140086223A (ko) | 2012-12-28 | 2014-07-08 | 주식회사 옵토스타 | 디스크 어레이의 패리티 재동기화 장치 및 방법 |
-
2012
- 2012-01-18 KR KR1020147019498A patent/KR101564569B1/ko not_active IP Right Cessation
- 2012-01-18 EP EP12736920.5A patent/EP2666091A2/en not_active Withdrawn
- 2012-01-18 JP JP2013550554A patent/JP2014507717A/ja active Pending
- 2012-01-18 WO PCT/US2012/021682 patent/WO2012099937A2/en active Application Filing
- 2012-01-18 TW TW101102013A patent/TW201241615A/zh unknown
- 2012-01-18 KR KR1020137021636A patent/KR101454807B1/ko not_active IP Right Cessation
- 2012-01-18 US US13/979,805 patent/US8656101B2/en active Active
- 2012-01-18 CN CN201280012139.7A patent/CN103415844B/zh not_active Expired - Fee Related
-
2014
- 2014-02-14 US US14/181,252 patent/US9183140B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
CN103415844A (zh) | 2013-11-27 |
US9183140B2 (en) | 2015-11-10 |
JP2014507717A (ja) | 2014-03-27 |
CN103415844B (zh) | 2016-04-20 |
TW201241615A (en) | 2012-10-16 |
KR20140094661A (ko) | 2014-07-30 |
US20140237166A1 (en) | 2014-08-21 |
US8656101B2 (en) | 2014-02-18 |
KR101564569B1 (ko) | 2015-11-03 |
KR101454807B1 (ko) | 2014-11-04 |
WO2012099937A2 (en) | 2012-07-26 |
EP2666091A2 (en) | 2013-11-27 |
US20130290618A1 (en) | 2013-10-31 |
WO2012099937A3 (en) | 2012-09-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11144389B2 (en) | Non-volatile memory program failure recovery via redundant arrays | |
US11379301B2 (en) | Fractional redundant array of silicon independent elements | |
US9183140B2 (en) | Higher-level redundancy information computation | |
KR102101650B1 (ko) | 비-휘발성 메모리에 대한 혼합된 입도 상위-레벨 리던던시 | |
US9105305B2 (en) | Dynamic higher-level redundancy mode management with independent silicon elements | |
KR20140094468A (ko) | 비휘발성 메모리에 대한 기록들의 관리 및 그 기록들의 영역 선택 | |
TWI531902B (zh) | 矽獨立元件之部分冗餘陣列 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
A302 | Request for accelerated examination | ||
E902 | Notification of reason for refusal | ||
A107 | Divisional application of patent | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20170921 Year of fee payment: 4 |
|
LAPS | Lapse due to unpaid annual fee |