KR20150058315A - 기록 재생 장치, 오류 정정 방법 및 제어 장치 - Google Patents

기록 재생 장치, 오류 정정 방법 및 제어 장치 Download PDF

Info

Publication number
KR20150058315A
KR20150058315A KR1020157009434A KR20157009434A KR20150058315A KR 20150058315 A KR20150058315 A KR 20150058315A KR 1020157009434 A KR1020157009434 A KR 1020157009434A KR 20157009434 A KR20157009434 A KR 20157009434A KR 20150058315 A KR20150058315 A KR 20150058315A
Authority
KR
South Korea
Prior art keywords
data
error
error correction
ecc
stripe
Prior art date
Application number
KR1020157009434A
Other languages
English (en)
Inventor
요꼬 가와노
데루마사 하네다
Original Assignee
후지쯔 가부시끼가이샤
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 후지쯔 가부시끼가이샤 filed Critical 후지쯔 가부시끼가이샤
Publication of KR20150058315A publication Critical patent/KR20150058315A/ko

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1012Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • G06F11/108Parity data distribution in semiconductor storages, e.g. in SSD

Abstract

스토리지 장치(1)는 기입 데이터에 ECC를 부가하여 스트라이프를 생성하고, 소정 수의 스트라이프에 패리티를 부가한 용장 그룹을 생성하여 NAND 플래시(11)에 기입한다. 스토리지 장치(1)는 NAND 플래시로부터 판독된 동일한 용장 그룹에 속하는 스트라이프에 오류가 있으면, 오류가 있는 스트라이프의 정정을 행하는 패리티 정정 제어부(173a)와, NAND 플래시로부터 각각 판독된 동일한 용장 그룹에 속하는 각 스트라이프와 패리티를 ECC의 생성 단위마다 조 분할하고, 복수의 분할 스트라이프와 분할 패리티를 포함하는 오류 정정 그룹을 복수 생성하고, 동일한 오류 정정 그룹에 있어서 각 분할 스트라이프에 오류가 있는지의 여부를 분할 패리티에 의해 검출하고, 오류가 있는 분할 스트라이프의 정정을 행하는 ECC 그룹 정정 제어부(173b)를 구비함으로써, NAND 플래시(11)의 데이터의 수복율을 향상시킬 수 있다.

Description

기록 재생 장치, 오류 정정 방법 및 제어 장치{RECORD/PLAY DEVICE, ERROR CORRECTION METHOD, AND CONTROL DEVICE}
본 발명은 기록 재생 장치 등에 관한 것이다.
NAND형의 플래시 메모리(이후, 「NAND 플래시」라고 함)는 액세스 성능, 용량 및 비용의 균형이 잡힌 불휘발성 기억 매체로서 최근 많이 사용되고 있다. 한편으로는, NAND 플래시는, 에러율이 다른 불휘발성 기억 매체와 비교하여 높아, 신뢰성을 저해하는 요인이 되어 있다.
이로 인해, NAND 플래시를 제어하는 컨트롤러가, NAND 플래시에 기입하는 데이터에 ECC(Error Correcting Code)를 부가하여, 데이터의 판독 시에, ECC에 의한 에러 정정을 행하고 있다.
또한, 판독 데이터에 대하여 복수의 오류 정정 부호를 사용하여 오류 정정하는 ECC 회로의 기술이 알려져 있다(예를 들어, 특허문헌 1 참조). 예를 들어, ECC 회로는, 판독 데이터에 대하여 제1 오류 정정 부호(허밍 부호)를 사용하여 제1 오류 정정한다. 그리고, ECC 회로는, 이 제1 오류 정정 결과를, 제2 오류 정정 부호(BHC 부호)를 사용하여 추가로 제2 오류 정정한다. 또한, ECC 회로는, 제2 오류 정정 결과를, 제3 오류 정정 부호(RS 부호)를 사용하여 제3 오류 정정한다.
또한, 에러율이 높아지고 있는 것의 대책으로서, 예를 들어, NAND 플래시를 제어하는 컨트롤러가, RAID(Redundant Array of Inexpensive Disks)(5)의 구성을 이용한 데이터를 NAND 플래시에 기입한다. 여기서, RAID5의 구성이란, 데이터가 복수로 분할된 결과 얻어지는 복수의 스트라이프 데이터에 패리티가 부가된 구성이다. 그리고, 컨트롤러는, 데이터의 판독 시에, 패리티에 의한 에러 정정을 행한다.
일본 특허 공개 제2009-211209호 공보 일본 특허 공개 평9-218754호 공보
그러나, 종래의 NAND 플래시에 대한 에러율의 대책에서는, NAND 플래시의 데이터 수복율을 향상시킬 수 없다는 문제가 있다.
예를 들어, 최근에는, NAND 플래시에서는, 미세화나 다식화가 진행되는 동시에, 비트가 깨지기 쉬워지는 등의 신뢰성이 저하되었다. 이에 수반하여 ECC에 의한 에러 정정이 곤란해지게 되었다. 또한, 데이터가 RAID5의 구성인 경우에도, 복수의 스트라이프 데이터에 에러가 발생하면, 패리티에 의한 에러 정정을 할 수 없다. 따라서, 종래의 NAND 플래시에 대한 에러율의 대책 이외에, NAND 플래시의 데이터 수복율을 향상시키는 책(策)이 요구되고 있다.
또한, 상기 과제는, NAND 플래시에 한하지 않고, 다른 기억 매체여도 마찬가지로 발생하는 과제이다.
하나의 측면에서는, 본 발명은 기억 매체의 데이터 수복율을 향상시키는 것을 목적으로 한다.
본원이 개시하는 기록 재생 장치는, 하나의 형태에 있어서, 복수의 데이터 기억부와, 기입 데이터에 제1 오류 정정 부호를 부가하여 소정의 기입 용량의 스트라이프 데이터를 생성하고, 소정 수의 상기 스트라이프 데이터에 제2 오류 정정 부호를 부가한 용장 그룹을 생성하고, 동일한 용장 그룹에 속하는 복수의 스트라이프 데이터와 제2 오류 정정 부호를 상기 복수의 데이터 기억부에 각각 대응지어서 기입하는 제어를 행하는 제어부와, 상기 복수의 데이터 기억부로부터 각각 판독된 동일한 용장 그룹에 속하는 스트라이프 데이터에 오류가 있는지의 여부를 제2 오류 정정 부호에 의해 검출하고, 오류가 있는 스트라이프 데이터의 정정을 행하는 제1 오류 검출 정정부와, 상기 복수의 데이터 기억부로부터 각각 판독된 동일한 용장 그룹에 속하는 각 스트라이프 데이터와 제2 오류 정정 부호를 상기 제1 오류 정정 부호의 생성 단위마다 조 분할하고, 복수의 분할 스트라이프 데이터와 분할 제2 오류 정정 부호를 포함하는 오류 정정 그룹을 복수 생성하고, 동일한 오류 정정 그룹에 있어서 각 분할 스트라이프 데이터에 오류가 있는지의 여부를 분할 제2 오류 정정 부호에 의해 검출하고, 오류가 있는 분할 스트라이프 데이터의 정정을 행하는 제2 오류 검출 정정부를 구비한다.
본원의 개시하는 장치의 하나의 형태에 따르면, 기억 매체의 데이터 수복율을 향상시킬 수 있다.
도 1은 실시예 1에 관한 스토리지 장치의 하드웨어 구성을 도시하는 도면이다.
도 2a는 NAND 플래시의 구성 일례를 도시하는 도면이다.
도 2b는 NAND 플래시에 기억되는 데이터의 데이터 구조를 도시하는 도면이다.
도 3은 실시예 1에 관한 판독 데이터의 그룹화를 설명하는 도면이다.
도 4는 실시예 1에 관한 데이터 정정의 구체예를 설명하는 도면이다.
도 5는 데이터의 기입 처리의 흐름도를 도시하는 도면이다.
도 6은 데이터의 정정 처리의 흐름도를 도시하는 도면이다.
도 7은 실시예 2에 관한 스토리지 장치의 하드웨어 구성을 도시하는 도면이다.
도 8은 실시예 2에 관한 데이터 정정의 구체예를 설명하는 도 (1)이다.
도 9는 실시예 2에 관한 데이터 정정의 구체예를 설명하는 도 (2)이다.
도 10은 데이터의 정정 처리의 흐름도를 도시하는 도면이다.
이하에, 본원의 개시하는 기록 재생 장치, 오류 정정 방법 및 제어 장치의 실시예를 도면에 기초하여 상세하게 설명한다. 또한, 본 실시예에 의해 본 발명이 한정되는 것은 아니다. 그리고, 각 실시예는, 처리 내용을 모순되지 않는 범위에서 적절히 조합하는 것이 가능하다. 이하에서는, 스토리지 장치에 본 발명을 적용한 경우에 대하여 설명한다.
실시예 1
[실시예 1에 관한 스토리지 장치의 구성]
도 1은, 실시예 1에 관한 스토리지 장치의 하드웨어 구성을 도시하는 도면이다. 도 1에 도시한 바와 같이, 스토리지 장치(1)는 서버(9)와 접속한다. 스토리지 장치(1)는 NAND 플래시 메모리(이후, 「NAND 플래시」라고 함)(11), 전원 공급 유닛(12), 정전 시 급전 유닛(13) 및 캐시 메모리(14)를 갖는다. 또한, 스토리지 장치(1)는 CPU(15), 메모리 컨트롤러(16) 및 NAND 컨트롤러(17)를 갖는다. 또한, NAND 컨트롤러(17)와 NAND 플래시(11)가 협동함으로써, 예를 들어, 기록 재생 장치로서 동작한다. 스토리지 장치(1) 내에 갖는 이들 디바이스는, 컨트롤러 모듈(CM: Controller Module) 내에 구비하는 것으로 해도 된다. 또한, 스토리지 장치(1)는 서버(9)와 접속한다. 스토리지 장치(1)는 서버(9)로부터의 명령에 기초하여 NAND 플래시 메모리(11)에 데이터를 기입하거나, 판독하거나 한다.
NAND 플래시(11)는 불휘발성의 반도체 기억 장치이다. NAND 플래시(11)는 서버(9)로부터 유저 데이터나 프로그램을 기억한다. 즉, NAND 플래시(11)는 서버(9)로부터의 데이터 보존 장소의 기억 매체(스토리지)로서 사용된다.
NAND 플래시(11)는 유저 데이터를 분할하여 얻어지는 복수의 스트라이프 데이터를 각각 기억함과 함께, 소정 수의 스트라이프 데이터에 부가되는 패리티를 기억한다. 즉, NAND 플래시(11)에는, 유저 데이터가, RAID5 구성으로 기억된다. 또한, 도 1에서는, NAND 플래시(11)가 2개 탑재되어 있는 것으로 했지만, 3개 이상 탑재되어 있는 것으로 해도 된다.
여기서, NAND 플래시(11)의 구성에 대해서, 도 2a를 참조하여 설명한다. 도 2a는, NAND 플래시의 구성 일례를 도시하는 도면이다. 도 2a에 도시한 바와 같이, 1개의 NAND 플래시(11)는 4개의 셀을 구비한다. 1개의 셀에는, 유저 데이터의 복수의 스트라이프 데이터 중 1개의 스트라이프 데이터가 기억된다. 예를 들어, 후술하는 NAND 컨트롤러(17)가 유저 데이터를 기입하는 경우, NAND 플래시(11)의 각각의 셀에 대응하는 기입부에, 기입 대상의 스트라이프 데이터의 라이트 커맨드를 발행한다. 라이트 커맨드를 수취한 기입부는, 라이트 커맨드에 대응하는 스트라이프 데이터를 셀에 기입한다. 한편, NAND 컨트롤러(17)가 유저 데이터를 판독하는 경우, NAND 플래시(11)의 각각의 셀에 대응하는 판독부에, 판독 대상의 스트라이프 데이터의 리드 커맨드를 발행한다. 리드 커맨드를 수취한 판독부는, 리드 커맨드에 대응하는 스트라이프 데이터를 셀로부터 판독하고, 판독한 스트라이프 데이터를 NAND 컨트롤러(17)에 넘겨준다. 이러한 NAND 플래시(11)는 복수의 셀에 기억되는 각각의 스트라이프 데이터에 의해 RAID5 구성을 실현한다.
또한, 1개의 NAND 플래시(11)는 4개의 셀을 구비하므로, 1개의 NAND 플래시(11)에, 서로 다른 RAID의 각각의 스트라이프 데이터가 기억되도록 해도 된다. 예를 들어, 1개째의 NAND 플래시(11)에, 1번째의 RAID의 스트라이프 데이터 0, 2번째의 RAID의 스트라이프 데이터 0, 3번째의 RAID 스트라이프 데이터 0 및 4번째의 RAID 스트라이프 데이터 0이 기억된다. 2개째의 NAND 플래시(11)에, 1번째의 RAID의 스트라이프 데이터 1, 2번째의 RAID의 스트라이프 데이터 1, 3번째의 RAID 스트라이프 데이터 1 및 4번째의 RAID 스트라이프 데이터 1이 기억된다. 이렇게 기억됨으로써, 1개의 NAND 플래시(11)가 고장난 경우에도, 고장난 NAND 플래시(11)의 데이터 복원이 다른 NAND 플래시(11)의 데이터를 사용하여 가능하게 된다.
여기서, NAND 플래시(11)에 기억되는 유저 데이터의 데이터 구조에 대해서, 도 2b를 참조하여 설명한다. 도 2b는, NAND 플래시에 기억되는 유저 데이터의 데이터 구조를 도시하는 도면이다. 도 2b에 도시한 바와 같이, NAND 플래시에 기억되는 유저 데이터는, 복수의 스트라이프 데이터와, 복수의 스트라이프 데이터에 대응지어지는 패리티를 갖는다. 여기에서는, 7개의 스트라이프 데이터와 패리티에 의해 RAID5가 구성되어 있다. 각 스트라이프 데이터 및 패리티는, 각각 NAND 플래시(11)에의 기입 단위인 4킬로바이트(KB)의 데이터이다. 그리고, 각 스트라이프 데이터에는, 유저 데이터(d1)와 CRC(Cyclic Redundancy Check)(d2)와 ECC(Error Correcting Code)(d3)가 포함된다. CRC(d2)는 유저 데이터(d1)의 오류를 검출하는 오류 검출 부호이며, ECC(d3)는 유저 데이터(d1)의 오류를 정정하는 오류 정정 부호이다. 예를 들어, 스트라이프 데이터 0 내지 3이 각각 도 2a의 셀 0 내지 3에 기억되고, 스트라이프 데이터 4 내지 6 및 패리티가, 각각 도 2a의 셀 4 내지 7에 기억된다. 또한, CRC(d2)는 후술하는 CRC 생성부(171a)에 의해 생성되고, ECC(d3)는 후술하는 ECC 생성부(172a)에 의해 생성되고, 패리티는, 후술하는 패리티 생성부(171b)에 의해 생성된다.
도 1로 돌아가서, 전원 공급 유닛(12)은 통상 시에, 스토리지 장치(1)에 전력을 공급한다. 또한, 여기에서 말하는 통상 시란, 스토리지 장치(1)에 전원이 투입된 후, 정전이 발생하지 않고 운전하고 있는 상태를 가리킨다. 정전 시 공급 유닛(13)은 정전 발생 시에 NAND 플래시(11), 캐시 메모리(14), CPU(15), 메모리 컨트롤러(16) 및 NAND 컨트롤러(17)에 전력을 공급한다. 정전 시 공급 유닛(13)은 내부에 콘덴서를 구비하고, 통상 시에, 전원 공급 유닛(12)으로부터의 전력을 콘덴서에 축전한다. 정전 시 공급 유닛(13)은 정전 시에, 콘덴서에 축전된 전력을 공급한다.
캐시 메모리(14)는 예를 들어, DIMM(Dual Inline Memory Module)이나 DDR SDRAM(Double Date Rate Synchronous DRAM) 등의 휘발성 메모리이다. 캐시 메모리(14)는 서버(9)로부터의 기입 명령에 따라서 NAND 플래시(11)에 기입하는 유저 데이터를 일시적으로 기억한다. 또한, 캐시 메모리(14)는 서버(9)로부터의 판독 명령에 따라서 NAND 플래시(11)로부터 판독한 유저 데이터를 일시적으로 기억한다.
CPU(Central Processing Unit)(15)는 스토리지 장치(1)의 전체를 제어한다. 예를 들어, CPU(15)는 서버와의 인터페이스 제어를 실행한다. 메모리 컨트롤러(16)는 서버(9)로부터의 명령에 따라, 캐시 메모리(14)에의 데이터의 입출력 제어를 행한다. 또한, CPU(15) 및 메모리 컨트롤러(16)는 독립된 구성인 것으로 하여 설명했지만, 병합된 구성인 메모리 컨트롤러에 내장된 CPU여도 된다.
메모리 컨트롤러(16)는 CPU(15)를 통하지 않고 캐시 메모리(14)와 NAND 플래시(11) 사이의 데이터 전송을 제어한다. NAND 컨트롤러(17)는 NAND 플래시(11)에의 데이터의 입출력 제어를 행한다. 또한, NAND 컨트롤러(17)는 라이트 DMA(Direct Memory Access)(171), 컨트롤러(172) 및 리드 DMA(173)를 갖는다. 라이트 DMA(171)는 캐시 메모리(14)로부터 NAND 플래시(11)로의 기입 데이터의 전송을 제어한다. 리드 DMA(173)는 NAND 플래시(11)로부터 캐시 메모리(14)로의 판독 데이터의 전송을 제어한다. 컨트롤러(172)는 기입 데이터 및 판독 데이터를 제어한다.
라이트 DMA(171)는 CRC 생성부(171a) 및 패리티 생성부(171b)를 갖는다.
CRC 생성부(171a)는 NAND 플래시(11)에 데이터를 기입할 때, 데이터를 RAID5로 구성하기 위하여 복수 분할하고, 분할한 분할 데이터마다, 오류 검출에 사용되는 CRC를 생성한다. 그리고, CRC 생성부(171a)는 생성한 CRC를 대응하는 분할 데이터에 부가한다. 이러한 분할 데이터는 스트라이프 데이터에 대응한다. 이후, 분할 데이터를 스트라이프 데이터라고 하는 것으로 한다.
패리티 생성부(171b)는 소정 수의 스트라이프 데이터에 대응지어, RAID5에서 사용되는 패리티를 생성한다. 이러한 패리티는 오류 정정 부호로서 사용된다. 그리고, 패리티 생성부(171b)는 생성한 패리티를 1개의 스트라이프 데이터로 하여 소정 수의 스트라이프 데이터와 함께 기입 데이터로 한다. 이에 의해, 기입 데이터는, 예를 들어, 소정 수의 스트라이프 데이터와 이들에 대응지어진 패리티에 의해, NAND 플래시(11)에의 기입 단위인 4KB의 배열이 된다. 또한, 소정 수는, 예를 들어 7개이지만, 6개이거나, 8개여도 되고, RAID5를 구성할 수 있는 수이면 된다. 또한, 패리티 생성부(171b)는 제어부의 일례이다.
컨트롤러(172)는 ECC 생성부(172a) 및 ECC 정정 제어부(172b)를 갖는다.
ECC 생성부(172a)는 기입 데이터의 각 스트라이프 데이터를 ECC의 생성 단위씩, ECC를 생성한다. ECC의 생성 단위란, ECC 체크를 실행하기 위하여 ECC를 생성하는 단위이다. 이러한 ECC의 생성 단위는, NAND 플래시(11)의 사양에 의해 정해진 ECC의 정정 능력에 의존하는 것이며, 일례로서 224바이트이다. 그리고, 이 경우의 ECC는 16바이트이다. 그리고, ECC 생성부(172a)는 생성한 ECC와 함께 기입 데이터를 NAND 플래시(11)에 기입한다. 또한, ECC 생성부(172a)는 제어부의 일례이다.
ECC 정정 제어부(172b)는 ECC 생성부(172a)에 의해 기입된 데이터를 판독하면, 판독한 판독 데이터의 ECC 체크를 행한다. 그리고, ECC 정정 제어부(172b)는 ECC 체크의 결과, 오류가 검출되지 않으면, 판독 데이터를 그대로 리드 DMA(173)에 출력한다. 한편, ECC 정정 제어부(172b)는 ECC 체크의 결과, 오류가 검출되고 또한 오류가 정정 가능한 에러일 경우, ECC에 의해 오류를 정정하고, 정정 후의 판독 데이터를 리드 DMA(173)에 출력한다. 또한, 기입된 데이터를 판독하는 타이밍은, 예를 들어, 서버로부터의 판독 명령이 발행되었을 때이다.
또한, ECC 정정 제어부(172b)는 ECC 체크의 결과, 오류가 검출되고 또한 오류가 정정 불가능한 에러일 경우, 오류가 검출된 ECC의 생성 단위의 위치를 리드 DMA(173)에 출력한다. 이때, ECC 정정 제어부(172b)는 판독 데이터를 그대로 리드 DMA(173)에 출력한다. 또한, ECC 정정 제어부(172b)는 위치 출력부의 일례이다.
리드 DMA(173)는 패리티 정정 제어부(173a) 및 ECC 그룹 정정 제어부(173b)를 갖는다.
패리티 정정 제어부(173a)는 ECC 정정 제어부(172b)로부터 출력된 판독 데이터의 CRC 체크를 행한다. 그리고, 패리티 정정 제어부(173a)는 CRC 체크의 결과, 오류가 검출되지 않으면, 오류가 검출되지 않은 판독 데이터를 메모리 컨트롤러(16)에 출력한다.
또한, 패리티 정정 제어부(173a)는 CRC 체크의 결과, 오류가 검출되면, RAID의 패리티에 의해 오류가 정정 가능한지의 여부를 판정한다. 그리고, 패리티 정정 제어부(173a)는 RAID의 패리티에 의해 오류가 정정 가능하다고 판정한 경우, 오류가 검출된 스트라이프 데이터를, 패리티를 사용하여 정정한다. 즉, 패리티 정정 제어부(173a)는 CRC 체크에 의해 오류가 검출된 스트라이프 데이터가 1개뿐일 경우, 그 스트라이프 데이터를 다른 스트라이프 데이터와 패리티를 사용하여 정정한다. 그리고, 패리티 정정 제어부(173a)는 오류가 검출된 스트라이프 데이터를 정정하면, 정정된 스트라이프 데이터를 포함하는 판독 데이터를 메모리 컨트롤러(16)에 출력한다. 또한, 패리티 정정 제어부(173a)에서는, CRC 체크에 의해 오류가 검출된 스트라이프 데이터가 2개 이상 있을 경우, 에러가 발생된 위치를 특정할 수 없기 때문에, 패리티를 사용하여 오류를 정정할 수 없다. 또한, 패리티 정정 제어부(173a)는 제1 오류 검출 정정부의 일례이다.
ECC 그룹 정정 제어부(173b)는 판독 데이터 중 2개 이상의 스트라이프 데이터에서 오류가 검출된 경우, 판독한 데이터의 각 스트라이프 데이터로부터 1개씩 얻어지는 ECC의 생성 단위를 그룹화한다. ECC의 생성 단위에 의해 그룹화하는 것은, ECC의 생성 단위로 오류가 검출되는 위치를 특정할 수 있기 때문이다. 즉, ECC 정정 제어부(172b)가 오류가 검출된 ECC의 생성 단위의 위치를 출력하므로, ECC 그룹 정정 제어부(173b)가 출력된 위치를 사용하여 그룹 내의 오류 위치를 특정할 수 있는 것이다. 또한, ECC의 생성 단위로 작성되는 그룹을 「ECC 그룹」이라고 하는 것으로 한다.
또한, ECC 그룹 정정 제어부(173b)는 ECC 그룹 마다의 단위로 ECC 그룹에 포함되는 패리티를 사용하여 오류의 정정을 제어한다. 예를 들어, ECC 그룹 정정 제어부(173b)는 ECC 정정 제어부(172b)에 의해 출력된, 오류가 검출된 ECC의 생성 단위의 위치를 취득한다. 그리고, ECC 그룹 정정 제어부(173b)는 취득한 ECC의 생성 단위의 위치를 포함하는 ECC 그룹을 검출한다. 그리고, ECC 그룹 정정 제어부(173b)는 검출한 ECC 그룹의 단위로, 그 ECC 그룹에 포함되는 패리티에 의해 오류가 정정 가능한지의 여부를 판정한다. 그리고, ECC 그룹 정정 제어부(173b)는 그 ECC 그룹에 포함되는 패리티에 의해 오류가 정정 가능하다고 판정한 경우, 패리티를 사용하여, 오류가 검출된 ECC의 생성 단위를 정정한다. 즉, ECC 그룹 정정 제어부(173b)는 오류가 검출된 ECC의 생성 단위의 위치가 ECC 그룹 내에서 1개뿐일 경우, 그 위치의 생성 단위를, 동일한 그룹 내의 패리티를 사용하여 정정한다.
또한, ECC 그룹 정정 제어부(173b)는 오류가 검출된 ECC의 생성 단위를 정정하면, 정정된 생성 단위를 포함하는 판독 데이터를 메모리 컨트롤러(16)에 출력한다. 또한, 그룹 정정 제어부(173b)는 오류가 검출된 ECC의 생성 단위의 위치가 ECC 그룹 내에서 2개 이상인 경우, 동일한 ECC 그룹 내의 패리티를 사용하여 오류를 정정할 수 없다. 또한, ECC 그룹 정정 제어부(173b)는 제2 오류 검출 정정부의 일례이다.
[판독 데이터의 그룹화]
여기서, ECC 그룹 정정 제어부(173b)에 의해 작성되는 판독 데이터의 그룹화에 대해서, 도 3을 참조하여 설명한다. 도 3은, 실시예 1에 관한 판독 데이터의 그룹화를 설명하는 도면이다. 도 3에 도시한 바와 같이, 판독 데이터는, 스트라이프 데이터 0 내지 6 및 패리티를 갖는 RAID5의 구성이다. 각 스트라이프 데이터 및 패리티는, ECC의 생성 단위인 224바이트씩으로 나타내어진다. 그리고, ECC는, ECC의 생성 단위마다 생성된다. 일례로서, 스트라이프 데이터 0은 ECC의 생성 단위인 224바이트 마다로 나타내어지고, 여기에서는 데이터 0-0, 데이터 0-1, ···데이터 0-17로 나타내어진다. 그리고, 각 ECC는, 데이터 0-0 내지 데이터 0-17마다 생성된다. 마찬가지로, 패리티도, ECC의 생성 단위인 224바이트 마다 나타내어지고, 여기에서는 패리티-0, 패리티-1, ···패리티-17로 나타내어진다. 그리고, 각 ECC는, 패리티-0 내지 패리티-17마다 생성된다. ECC는, 각각 16바이트이다.
그리고, ECC 그룹 정정 제어부(173b)는 판독 데이터의 각 스트라이프 데이터 및 패리티로부터 1개씩 얻어지는 ECC의 생성 단위를 그룹화한다. 여기에서는, ECC 그룹 정정 제어부(173b)는 스트라이프 데이터 0의 데이터 0-0, 스트라이프 데이터 1의 데이터 1-0, 스트라이프 데이터 2의 데이터 2-0, ···, 패리티의 패리티-0을 ECC 그룹 0로 한다. ECC 그룹 정정 제어부(173b)는 스트라이프 데이터 0의 데이터 0-1, 스트라이프 데이터 1의 데이터 1-1, 스트라이프 데이터 2의 데이터 2-1, ···, 패리티의 패리티-1을 ECC 그룹 1로 한다.
[데이터 정정의 구체예]
이렇게 그룹화된 판독 데이터에 대해서, 데이터의 정정 구체예를, 도 4를 참조하여 설명한다. 도 4는, 실시예 1에 관한 데이터 정정의 구체예를 설명하는 도면이다. 도 4의 상기 도면에 도시한 바와 같이, 판독 데이터 중 CRC 체크에 의해 오류가 검출된 스트라이프 데이터가, 스트라이프 데이터 1, 스트라이프 데이터 3, 스트라이프 데이터 5로 2개 이상 있는 것으로 한다. 따라서, 패리티 정정 제어부(173a)에서는, RAID의 패리티 그 자체를 사용하여 오류를 정정할 수 없다.
도 4의 아랫 도면에 도시한 바와 같이, ECC 그룹 정정 제어부(173b)는 ECC 그룹 마다의 단위로 ECC 그룹에 포함되는 패리티를 사용하여 오류의 정정을 제어한다. 여기에서는, ECC 그룹 정정 제어부(173b)는 오류가 검출된 ECC의 생성 단위의 위치를, 스트라이프 데이터 1의 데이터 1-0의 위치로서 취득한다. 그리고, ECC 그룹 정정 제어부(173b)는 취득한 데이터 1-0의 위치를 포함하는 ECC 그룹 0을 검출한다. 그리고, ECC 그룹 정정 제어부(173b)는 오류가 검출된 ECC의 생성 단위의 위치가 ECC 그룹 0 내에서 데이터 1-0의 1개뿐이므로, 데이터 1-0을, ECC 그룹 0 내의 다른 데이터 및 패리티-0을 사용하여 정정한다.
이어서, ECC 그룹 정정 제어부(173b)는 오류가 검출된 ECC의 생성 단위의 위치를, 스트라이프 데이터 3의 데이터 3-2의 위치로서 취득한다. 그리고, ECC 그룹 정정 제어부(173b)는 취득한 데이터 3-2의 위치를 포함하는 ECC 그룹 2를 검출한다. 그리고, ECC 그룹 정정 제어부(173b)는 오류가 검출된 ECC의 생성 단위의 위치가 ECC 그룹 2 내에서 데이터 3-2의 1개뿐이므로, 데이터 3-2를, ECC 그룹 2 내의 다른 데이터 및 패리티-2를 사용하여 정정한다.
이어서, ECC 그룹 정정 제어부(173b)는 오류가 검출된 ECC의 생성 단위의 위치를, 스트라이프 데이터 5의 데이터 5-1의 위치로서 취득한다. 그리고, ECC 그룹 정정 제어부(173b)는 취득한 데이터 5-1의 위치를 포함하는 ECC 그룹 1을 검출한다. 그리고, ECC 그룹 정정 제어부(173b)는 오류가 검출된 ECC의 생성 단위의 위치가 ECC 그룹 1 내에서 데이터 5-1의 1개뿐이므로, 데이터 5-1을, ECC 그룹 1 내의 다른 데이터 및 패리티-1을 사용하여 정정한다.
이와 같이 하여, 판독 데이터 중 오류가 검출된 스트라이프 데이터가 2개 이상 있어도, ECC 그룹 정정 제어부(173b)는 오류가 있는 ECC의 생성 단위의 위치가 동일한 ECC 그룹이 아니면, 판독 데이터의 오류를 정정할 수 있다. 여기서, 판독 데이터의 오류를 정정하는 다른 방법으로서, RAID의 스트라이프의 사이즈를 작게 함으로써 RAID의 단위를 증가시키고, RAID의 패리티에 의해 판독 데이터의 오류를 정정하는 방법도 생각된다. 그러나, RAID의 스트라이프의 사이즈를 작게 해버리면, CRC나 패리티의 용장 비트수가 증가하게 되어, 기입 시의 성능이 떨어지게 된다. 따라서, RAID의 스트라이프의 사이즈를 바꾸지 않고, ECC 그룹을 이용하여 오류를 정정함으로써, 기입 시의 성능을 떨어뜨리지 않고, NAND 플래시(11)의 신뢰성을 향상시킬 수 있다.
[데이터의 기입 처리 및 데이터의 정정 처리의 흐름도]
이어서, 실시예 1에 관한 데이터의 정정 처리에 대해서, 도 5 및 도 6을 참조하여 설명한다. 여기에서는, 일례로서, 서버(9)로부터 데이터의 기입 명령이 발행된 경우에, 기입 명령에 따라서 캐시 메모리(14)의 데이터를 기입하는 기입 처리에 대하여 설명한다. 또한, 서버(9)로부터 데이터의 판독 명령이 발행된 경우에, 판독 명령에 따라서 NAND 플래시(11)로부터 판독한 데이터를 정정하는 처리에 대하여 설명한다. 도 5는, 데이터의 기입 처리의 흐름도를 도시하는 도면이다. 도 6은, 데이터의 정정 처리의 흐름도를 도시하는 도면이다.
도 5에 도시한 바와 같이, 서버(9)로부터 기입 명령을 수취한 CPU(15)는 라이트 DMA(171)를 기동한다(스텝 S11). 그리고, CPU(15)는 서버(9)로부터의 기입 명령에 따라서 캐시 메모리(14)로부터 유저 데이터를 판독한다(스텝 S12).
그리고, 라이트 DMA(171)는, 판독된 유저 데이터에 대해서 RAID5용의 패리티를 생성함과 함께, CRC를 생성한다(스텝 S13). 예를 들어, 라이트 DMA(171)의 CRC 생성부(171a)는 RAID5로 구성하기 위하여 유저 데이터를 복수의 스트라이프 데이터로 분할하고, 분할한 스트라이프 데이터마다 CRC를 생성한다. 그리고, 라이트 DMA(171)의 패리티 생성부(171b)는, 소정 수의 스트라이프 데이터에 대응지어, RAID5에서 사용되는 패리티를 생성한다. 그리고, 패리티 생성부(171b)는, 생성한 패리티를 1개의 스트라이프 데이터로 하여 소정 수의 스트라이프 데이터와 함께 기입 데이터로 한다.
계속해서, 컨트롤러(172)는 기입 데이터에 대해서 ECC를 생성한다(스텝 S14). 예를 들어, 컨트롤러(172)의 ECC 생성부(172a)는 기입 데이터의 각 스트라이프 데이터를 ECC의 생성 단위씩, ECC를 생성한다.
그리고, 컨트롤러(172)는 NAND 플래시(11)에 데이터를 기입한다. 여기에서 말하는 데이터는, 구체적으로는 유저 데이터와 패리티와 CRC와 ECC이다(스텝 S15). 즉, 컨트롤러(172)의 ECC 생성부(172a)는 생성한 ECC와 함께 기입 데이터를 NAND 플래시(11)에 기입한다.
이에 의해, 서버(9)로부터의 기입 명령에 따라서 캐시 메모리(14)에 보유되어 있는 유저 데이터는, NAND 플래시(11)에 기입된다.
도 6에 도시한 바와 같이, 서버(9)로부터 판독 명령을 수취한 CPU(15)는 리드 DMA(173)를 기동한다(스텝 S21). 그리고, CPU(15)는 NAND 플래시(11)로부터 데이터를 판독한다(스텝 S22).
그리고, 컨트롤러(172)의 ECC 정정 제어부(172b)는 판독한 데이터에 대해서 ECC 체크를 행하고(스텝 S23), ECC에 의해 정정 가능한 에러(ECC 코렉터블 에러)인지의 여부를 판정한다(스텝 S24). ECC 코렉터블 에러라고 판정한 경우(스텝 S24; "예"), ECC 정정 제어부(172b)는 ECC에 의해 데이터를 정정한다(스텝 S25). 그리고, ECC 정정 제어부(172b)는 CRC 체크를 하기 위해, 스텝 S28로 이행한다. 이것은, ECC에 의해 데이터를 정정해도, CRC에 의해 오류가 검출되는 경우가 있기 때문이다.
한편, ECC 코렉터블 에러가 아니라고 판정한 경우(스텝 S24; "아니오"), 컨트롤러(172)의 ECC 정정 제어부(172b)는 ECC에 의해 정정 불가능한 에러(ECC 언코렉터블 에러)인지의 여부를 판정한다(스텝 S26). ECC 언코렉터블 에러라고 판정한 경우(스텝 S26; "예"), 컨트롤러(172)의 ECC 정정 제어부(172b)는 에러(오류)가 있었던 ECC의 생성 단위의 위치를 리드 DMA(173)에 통지한다(스텝 S27). 그리고, ECC 정정 제어부(172b)는 CRC 체크를 하기 위해, 스텝 S28로 이행한다.
한편, ECC 언코렉터블 에러가 아니라고 판정한 경우(스텝 S26; "아니오"), 즉 ECC에 의해 데이터에 에러가 없다고 판정된 경우, ECC 정정 제어부(172b)는 CRC 체크를 하기 위해, 스텝 S28로 이행한다. 이것은, ECC에 의해 데이터에 에러가 없다고 판정된 경우에도, CRC에 의해 오류가 검출되는 경우가 있기 때문이다.
계속해서, 리드 DMA(173)는 판독 데이터 또는 정정된 판독 데이터에 대해서 CRC 체크를 행하고(스텝 S28), RAID의 패리티에 의해 정정 가능한 에러(RAID 코렉터블 에러)인지의 여부를 판정한다(스텝 S29).
RAID 코렉터블 에러라고 판정한 경우(스텝 S29; "예"), 리드 DMA(173)의 패리티 정정 제어부(173a)는 1페이지(스트라이프) 단위로 데이터를 정정한다(스텝 S30). 즉, 패리티 정정 제어부(173a)는 CRC 체크에 의해 에러가 검출된 스트라이프 데이터가 1개뿐일 경우, 그 스트라이프 데이터를 다른 스트라이프 데이터와 패리티를 사용하여 정정한다. 패리티 정정 제어부(173a)는 정정한 판독 데이터를 메모리 컨트롤러(16)에 출력한다. 그리고, 패리티 정정 제어부(173a)는 스텝 S35로 이행한다.
한편, RAID 코렉터블 에러가 아니라고 판정한 경우(스텝 S29; "아니오"), 패리티 정정 제어부(173a)는 RAID의 패리티에 의해 정정 불가능한 에러(RAID 언코렉터블 에러)인지의 여부를 판정한다(스텝 S31). 즉, 패리티 정정 제어부(173a)는 CRC 체크에 의해 에러가 검출된 스트라이프 데이터가 2개 이상 있는지의 여부를 판정한다.
RAID 언코렉터블 에러가 아니라고 판정한 경우(스텝 S31; "아니오"), 패리티 정정 제어부(173a)는 에러가 검출되지 않으므로, 판독 데이터를 메모리 컨트롤러(16)에 출력한다. 그리고, 패리티 정정 제어부(173a)는 스텝 S35로 이행한다.
한편, RAID 언코렉터블 에러라고 판정한 경우(스텝 S31; "예"), 패리티 정정 제어부(173a)는 에러가 검출된 스트라이프 데이터가 2개 이상 있으므로, 에러가 발생된 위치를 특정할 수 없어, 패리티를 사용해서 에러를 정정할 수 없다고 판단한다.
그리고, 리드 DMA(173)의 ECC 그룹 정정 제어부(173b)는 ECC 그룹에 의해 정정 가능한 에러(ECC 그룹 코렉터블 에러)인지의 여부를 판정한다(스텝 S32). 예를 들어, ECC 그룹 정정 제어부(173b)는 ECC 정정 제어부(172b)에 의해 통지된, 에러가 발생된 ECC의 생성 단위의 위치를 취득한다. 그리고, ECC 그룹 정정 제어부(173b)는 취득한 ECC의 생성 단위의 위치를 포함하는 ECC 그룹을 검출한다. 그리고, ECC 그룹 정정 제어부(173b)는 검출한 ECC 그룹의 단위로, 그 ECC 그룹에 포함되는 패리티에 의해 에러가 정정 가능한지의 여부를 판정한다. 즉, ECC 그룹 정정 제어부(173b)는 ECC 그룹 단위로 에러가 있는 ECC의 생성 단위가 2개 이상 있는지의 여부를 판정한다.
ECC 그룹 코렉터블 에러라고 판정한 경우(스텝 S32; "예"), ECC 그룹 정정 제어부(173b)는 ECC의 생성 단위로 데이터를 정정한다(스텝 S33). 예를 들어, ECC 그룹 정정 제어부(173b)는 ECC 그룹에 포함되는 패리티를 사용하여, 에러가 검출된 ECC의 생성 단위를 정정한다. 즉, ECC 그룹 정정 제어부(173b)는 에러가 검출된 ECC의 생성 단위의 위치가 ECC 그룹 내에서 1개뿐일 경우, 그 위치의 생성 단위를, 동일한 그룹 내의 패리티를 사용하여 정정한다. 그리고, ECC 그룹 정정 제어부(173b)는 정정된 판독 데이터를 메모리 컨트롤러(16)에 출력한다. 그리고, ECC 그룹 정정 제어부(173b)는 스텝 S35로 이행한다.
한편, ECC 그룹 코렉터블 에러가 아니라고 판정한 경우(스텝 S32; "아니오"), ECC 그룹 정정 제어부(173b)는 ECC 그룹에 의해 정정 불가능한 에러라고 판단한다. 즉, ECC 그룹 정정 제어부(173b)는 에러가 검출된 ECC의 생성 단위의 위치가 ECC 그룹 내에서 2개 이상 있으므로, 동일한 ECC 그룹 내의 패리티를 사용해서 에러를 정정할 수 없다고 판단한다. 이 결과, 판독 실패로서, 처리가 종료한다.
스텝 S35에서는, 메모리 컨트롤러(16)는 캐시 메모리(14)에 유저 데이터를 기입한다(스텝 S35). 즉, 메모리 컨트롤러(16)는 리드 DMA(173)로부터 출력된 판독 데이터를 캐시 메모리(14)에 기입하고, 그 후, 판독 데이터를 서버(9)에 출력한다. 이 결과, 판독 완료로서, 처리가 종료한다.
이에 의해, NAND 플래시(11)에 기입된 유저 데이터는, 판독 처리에서 에러가 되어도 캐시 메모리(14)에 정확하게 기입된다. 그리고, 메모리 컨트롤러(16)는 올바른 유저 데이터를 서버(9)에 전달할 수 있다.
[실시예 1의 효과]
상기 실시예 1에 의하면, 라이트 DMA(171)는, NAND 플래시(11)에 데이터를 기입할 때, 데이터를 복수로 분할한 스트라이프마다 CRC를 생성하여 부가함과 함께, 연속한 소정 수의 스트라이프에 대응지어서 패리티를 생성한다. 그리고, ECC 생성부(172a)는 생성된 패리티를 1개의 스트라이프로서 부가한 기입 데이터의 각 스트라이프를 ECC의 생성 단위씩 ECC를 생성하고, 생성한 ECC와 함께 기입 데이터를 NAND 플래시(11)에 기입한다. 그리고, ECC 그룹 정정 제어부(173b)는 기입된 데이터를 판독할 때, 판독한 데이터 중 복수의 스트라이프에서 오류가 검출된 경우, 판독한 데이터의 각 스트라이프로부터 1개씩 얻어지는 ECC의 생성 단위를 그룹화한다. 그리고, ECC 그룹 정정 제어부(173b)는 그룹 마다의 단위로 패리티를 사용하여 오류의 정정을 제어한다. 이러한 구성에 따르면, NAND 플래시(11)로부터 판독한 데이터의 복수의 스트라이프에 오류가 검출된 경우에도, ECC 그룹 정정 제어부(173b)는 판독한 데이터의 각 스트라이프로부터 얻어지는 ECC 그룹 마다의 단위로 오류의 정정을 제어한다. 이로 인해, ECC 그룹 정정 제어부(173b)는 NAND 플래시(11)의 데이터 수복율을 향상시킬 수 있다.
또한, 상기 실시예 1에 의하면, ECC 정정 제어부(172b)는 판독한 데이터를, ECC를 사용하여 체크한 결과, 판독한 데이터가 정정 불가능할 경우, ECC로 나타내어지는 어느 하나의 생성 단위의 위치에서 오류가 검출되었는지를 출력한다. 그리고, ECC 그룹 정정 제어부(173b)는 출력된 오류 위치를 포함하는 그룹에서 패리티를 사용하여 오류 정정을 제어한다. 이러한 구성에 따르면, ECC 그룹 정정 제어부(173b)는 오류가 검출된 위치를 포함하는 그룹 단위를 검출할 수 있고, 검출한 그룹 단위로 오류의 정정을 제어할 수 있으므로, NAND 플래시(11)의 데이터 수복율을 향상시킬 수 있다.
실시예 2
그런데, 실시예 1에서는, 스토리지 장치(1)에서는, NAND 플래시(11), 캐시 메모리(14), CPU(15) 및 메모리 컨트롤러(16)가 이중화되어 있지 않은 경우에 대하여 설명하였다. 그러나, 스토리지 장치(1)에서는, 이것에 한정되지 않고, NAND 플래시(11), 캐시 메모리(14), CPU(15) 및 메모리 컨트롤러(16)가 이중화되어 있는 경우여도 된다. 이에 의해, 스토리지 장치(1)는 이중화된 각각의 판독 데이터를 대조함으로써, NAND 플래시(11)의 신뢰성을 더욱 향상시킬 수 있다.
따라서, 실시예 2에서는, NAND 플래시(11), 캐시 메모리(14), CPU(15) 및 메모리 컨트롤러(16)가 이중화되어 있는 경우의 스토리지 장치(2)에 대하여 설명한다.
[실시예 2에 관한 스토리지 장치의 구성]
도 7은, 실시예 2에 관한 스토리지 장치의 하드웨어 구성을 도시하는 도면이다. 또한, 도 1에 도시하는 스토리지 장치(1)와 동일한 구성에 대해서는 동일 부호를 나타냄으로써, 그 중복하는 구성 및 동작의 설명에 대해서는 생략한다. 실시예 1과 실시예 2가 다른 점은, 스토리지 장치(2)에서는, CM(1A)과 CM(1B)이 이중화되어 있는 점이다. 그리고, 각 CM은, NAND 플래시(11), 전원 공급 유닛(12), 정전 시 급전 유닛(13) 및 캐시 메모리(14), CPU(15), 메모리 컨트롤러(16) 및 NAND 컨트롤러(17)를 갖는다. 또한, 실시예 1과 실시예 2가 다른 점은, CM(1A) 내의 NAND 컨트롤러(17)에 타 CM 통신부(201)와 리드 데이터용 버퍼(202)와 타 CM 간 정정 제어부(203)를 추가한 점에 있다. 또한, 실시예 1과 실시예 2가 다른 점은, CM(1B) 내의 NAND 컨트롤러(17)에 타 CM 통신부(301)와 리드 데이터용 버퍼(302)와 타 CM 간 정정 제어부(303)를 추가한 점에 있다.
타 CM 통신부(201)는 이중화된 다른 CM과 통신한다. 예를 들어, 타 CM 통신부(201)는 자기 CM에서 오류가 검출된 ECC의 생성 단위의 위치를 CM(1B)에 송신한다. 또한, 타 CM 통신부(201)는 CM(1B)에서 오류가 검출된 ECC의 생성 단위의 위치를 수신한다. 또한, 타 CM 통신부(201)는 CM(1B)에 ECC의 생성 단위의 데이터를 요청하고, 리퀘스트에 따라서 데이터를 수신한다.
리드 데이터용 버퍼(202)에는, NAND 플래시(11)로부터 판독된 판독 데이터가 저장된다. 예를 들어, 리드 데이터용 버퍼(202)에는, 오류가 검출된 ECC의 생성 단위를 포함하는 ECC 그룹이 저장된다. 이러한 리드 데이터용 버퍼(202)를 사용하여, 후술하는 타 CM 간 정정 제어부(203)가 타 CM 통신부(201)와 협동하여 오류가 검출된 ECC의 생성 단위를 정정한다.
ECC 그룹 정정 제어부(173b)는 실시예 1에서 설명한 대로이므로 간략하게 설명한다. 예를 들어, ECC 그룹 정정 제어부(173b)는 오류가 검출된 ECC의 생성 단위의 위치를 포함하는 ECC 그룹을 검출하고, 검출한 ECC 그룹에 포함되는 패리티를 사용하여 오류의 정정을 제어한다. 이때, ECC 그룹 정정 제어부(173b)는 오류가 정정 가능, 즉 오류가 검출된 ECC의 생성 단위의 위치가 ECC 그룹 내에서 1개뿐일 경우, 그 위치의 생성 단위를, 동일한 그룹에 포함되는 패리티를 사용하여 정정한다. 또한, ECC 그룹 정정 제어부(173b)는 오류가 정정 불가능, 즉 오류가 검출된 ECC의 생성 단위의 위치가 ECC 그룹 내에서 2개 이상인 경우, ECC 그룹에 포함되는 패리티를 사용하여 오류를 정정할 수 없다.
타 CM 간 정정 제어부(203)는 오류가 검출된 ECC의 생성 단위의 위치가 ECC 그룹 내에서 2개 이상 있을 경우, 이중화된 다른 CM(1B) 내의 NAND 플래시(11)에 기억된 데이터를 이용하여, 오류가 검출된 ECC의 생성 단위를 정정한다. 예를 들어, 타 CM 간 정정 제어부(203)는 타 CM 통신부(201)에 의한 CM(1B)과의 통신을 사용하여, 동일한 판독 데이터의 ECC 그룹에 대해서, CM(1B)에서 오류가 있었던 ECC의 생성 단위의 위치를 취득한다. 그리고, 타 CM 간 정정 제어부(203)는 취득한 오류가 있었던 ECC의 생성 단위의 위치를 사용하여, CM(1B)에 있어서, ECC에 의한 정정 불가능한 오류를 검출했는지의 여부를 판정한다. 그리고, 타 CM 간 정정 제어부(203)는 CM(1B)에 있어서, ECC에 의한 정정 불가능한 오류를 검출하지 않았다고 판정한 경우, 오류가 없으므로, 타 CM 통신부(201)에 의한 CM(1B)과의 통신을 사용하여 CM(1B)의 ECC 그룹의 전체 데이터를 취득한다. 그리고, 타 CM 간 정정 제어부(203)는 CM(1B)으로부터 취득된 ECC 그룹의 전체 데이터를, 리드 데이터용 버퍼(202)에 저장된 ECC 그룹의 데이터에 덮어 쓴다.
또한, 타 CM 간 정정 제어부(203)는 CM(1B)에 있어서, ECC에 의해 정정 불가능한 오류를 검출했다고 판정한 경우, 자기 CM과 CM(1B)의 동일한 ECC 그룹에서, 각각 오류가 있었던 ECC의 생성 단위의 위치를 체크한다. 그리고, 타 CM 간 정정 제어부(203)는 오류가 있었던 ECC의 생성 단위의 위치가 전혀 중복되지 않거나, 또는 1군데만 중복되는 경우, 타 CM 통신부(201)에 의한 CM(1B)과의 통신을 사용하여, 정정에 필요한 ECC의 생성 단위를 취득한다. 그리고, 타 CM 간 정정 제어부(203)는 CM(1B)으로부터 취득된 정정에 필요한 ECC의 생성 단위를, 리드 데이터용 버퍼(202)에 저장된 ECC 그룹의 대응하는 위치에 덮어 쓴다. 또한, 타 CM 간 정정 제어부(203)는 덮어 쓰기된 ECC의 생성 단위 및 동일한 ECC 그룹 내의 패리티를 포함하는 ECC의 생성 단위를 사용하여 오류를 정정한다. 또한, 타 CM 간 정정 제어부(203)는 복제부의 일례이다.
타 CM 통신부(301)는 이중화된 다른 CM과 통신한다. 예를 들어, 타 CM 통신부(301)는 다른 CM(1A)으로부터 리퀘스트를 수신하고, 리퀘스트에 따른 데이터를 송신한다. 여기에서 말하는 리퀘스트란, 일례로서, 해당하는 ECC의 생성 단위의 데이터 송신 요구이거나, 오류가 있었던 ECC의 생성 단위의 위치 송신 요구이다.
리드 데이터용 버퍼(302)에는, NAND 플래시(11)로부터 판독된 판독 데이터가 저장된다. 리드 데이터용 버퍼(302)는 리드 데이터용 버퍼(202)와 동일하므로, 설명을 생략한다.
타 CM 간 정정 제어부(303)는 오류가 검출된 ECC의 생성 단위의 위치가 ECC 그룹 내에서 2개 이상 있을 경우, 이중화된 다른 CM(1A) 내의 NAND 플래시(11)에 기억된 데이터를 이용하여, 오류가 검출된 ECC의 생성 단위를 정정한다. 타 CM정정 제어부(303)는 타 CM정정 제어부(203)의 처리와 동일하므로, 설명을 생략한다.
[데이터 정정의 구체예]
이어서, 실시예 2에 관한 데이터의 정정 구체예를, 도 8 및 도 9를 참조하여 설명한다. 도 8 및 도 9는, 실시예 2에 관한 데이터 정정의 구체예를 설명하는 도면이다.
도 8에 도시한 바와 같이, CM(1A)에 있어서의 ECC 그룹 0에서 오류가 정정 불가능한 것으로 한다. 즉, ECC 그룹 0에서 오류가 검출된 ECC의 생성 단위의 위치가, 데이터 0-0과 데이터 2-0으로 2개 이상 있는 것으로 한다. 한편, 이중화된 다른 CM(1B)에 있어서의 ECC 그룹 0에서 오류를 검출하지 않은 것으로 한다.
그렇게 하면, CM(1A)의 타 CM 간 정정 제어부(203)는 CM(1B)에 있어서, CM(1A)에서 오류가 검출된 ECC 그룹 0과 동일한 ECC 그룹에 오류가 없으므로, CM(1B)의 ECC 그룹 0의 전체 데이터를 취득한다. 그리고, 타 CM 간 정정 제어부(203)는 CM(1B)으로부터 취득된 ECC 그룹 0의 전체 데이터를, 리드 데이터용 버퍼(202)에 저장된 ECC 그룹 0의 데이터에 덮어 쓴다. 이에 의해, 타 CM 간 정정 제어부(203)는 다른 CM(1B)의 ECC 그룹 0의 오류 없는 데이터를 이용함으로써, CM(1A)에서 오류가 정정 불가능했던 ECC 그룹 0을 정정할 수 있다.
또한, CM(1B)에 있어서의 ECC 그룹 1에서 오류가 정정 불가능한 것으로 한다. 즉, ECC 그룹 1에서 오류가 검출된 ECC의 생성 단위의 위치가, 데이터 2-1과 데이터 4-1로 2개 이상 있는 것으로 한다. 한편, 이중화된 다른 CM(1A)에 있어서의 ECC 그룹 1에서 오류를 검출하지 않은 것으로 한다.
그렇게 하면, CM(1B)의 타 CM 간 정정 제어부(303)는 CM(1A)에 있어서, CM(1B)에서 오류가 검출된 ECC 그룹 1과 동일한 ECC 그룹에 오류가 없으므로, CM(1A)의 ECC 그룹 1의 전체 데이터를 취득한다. 그리고, 타 CM 간 정정 제어부(303)는 CM(1A)으로부터 취득된 ECC 그룹 1의 전체 데이터를, 리드 데이터용 버퍼(302)에 저장된 ECC 그룹 1의 데이터에 덮어 쓴다. 이에 의해, 타 CM 간 정정 제어부(303)는 다른 CM(1A)의 ECC 그룹 1의 오류 없는 데이터를 이용함으로써, CM(1B)에서 오류가 정정 불가능했던 ECC 그룹 1을 정정할 수 있다.
도 9에 도시한 바와 같이, CM(1A)에 있어서의 ECC 그룹 0에서 오류가 정정 불가능한 것으로 한다. 즉, ECC 그룹 0에서 오류가 검출된 ECC의 생성 단위의 위치가, 데이터 0-0과 데이터 2-0으로 2개 이상 있는 것으로 한다. 한편, CM(1B)에 있어서의 ECC 그룹 0에서 오류가 정정 불가능한 것으로 한다. 즉, ECC 그룹 0에서 오류가 검출된 ECC의 생성 단위의 위치가, 데이터 2-0과 데이터 3-0으로 2개 이상 있는 것으로 한다.
그렇게 하면, CM(1A)의 타 CM 간 정정 제어부(203)는 오류가 있었던 ECC의 생성 단위의 위치가 전혀 중복되지 않거나, 또는 1군데만 중복되는지를 체크한다. 여기에서는, 타 CM 간 정정 제어부(203)는 데이터 2-0이 중복되지만, 데이터 0-0과 데이터 3-0이 중복되지 않으므로, 1군데만 중복된다고 판단한다. 따라서, 타 CM 간 정정 제어부(203)는 CM(1B)으로부터, 정정에 필요한 데이터 0-0을 취득하고, 취득한 데이터 0-0을 리드 데이터용 버퍼(202)에 저장된 ECC 그룹 0의 데이터 0-0의 위치에 덮어 쓴다. 그리고, 타 CM 간 정정 제어부(203)는 ECC 그룹 0 내의 패리티-0을 포함하는 ECC의 생성 단위의 데이터를 사용하여 데이터 2-0을 정정한다. 이에 의해, 타 CM 간 정정 제어부(203)는 다른 CM(1B)의 ECC 그룹 0의 오류 없는 데이터를 이용함으로써, CM(1A)에서 오류가 정정 불가능했던 ECC 그룹 0을 정정할 수 있다.
또한, CM(1B)의 타 CM 간 정정 제어부(303)는 CM(1A)으로부터, 정정에 필요한 데이터 3-0을 취득하고, 취득한 데이터 3-0을 리드 데이터용 버퍼(302)에 저장된 ECC 그룹 0의 데이터 3-0의 위치에 덮어 쓴다. 그리고, 타 CM 간 정정 제어부(303)는 ECC 그룹 0 내의 패리티-0을 포함하는 ECC의 생성 단위의 데이터를 사용하여 데이터 2-0을 정정한다. 이에 의해, 타 CM 간 정정 제어부(303)는 다른 CM(1A)의 ECC 그룹 0의 오류 없는 데이터를 이용함으로써, CM(1B)에서 오류가 정정 불가능했던 ECC 그룹 0을 정정할 수 있다.
[데이터의 정정 처리의 흐름도]
이어서, 실시예 2에 관한 데이터의 정정 처리에 대해서, 도 10을 참조하여 설명한다. 여기에서는, 일례로서, 서버(9)로부터 데이터의 판독 명령이 발행된 경우에, 판독 명령에 따라서 NAND 플래시(11)로부터 판독한 데이터를 정정하는 처리에 대하여 설명한다. 추가로, 도 10에서는, 도 6에 있어서의 데이터의 정정 처리의 흐름도 중 에러(오류)가 있었던 ECC 그룹이 ECC 그룹 코렉터블 에러가 아닐 경우(스텝 S32; "아니오")의 정정 처리에 대하여 설명한다. 또한, ECC 그룹 코렉터블 에러란, ECC 그룹에서 정정 가능한 에러인 것을 말한다.
먼저, 도 6에서는, 리드 DMA(173)의 ECC 그룹 정정 제어부(173b)는 에러(오류)가 있었던 ECC 그룹에 대해서, ECC 그룹 코렉터블 에러인지의 여부를 판정한다(스텝 S32). 즉, ECC 그룹 정정 제어부(173b)는 ECC 그룹 단위로 오류가 있는 ECC의 생성 단위가 2개 이상 있는지의 여부를 판정한다. ECC 그룹 코렉터블 에러라고 판정한 경우(스텝 S32; "예"), ECC 그룹 정정 제어부(173b)는 에러가 있었던 ECC 그룹에 대해서, ECC의 생성 단위로 데이터를 정정한다(스텝 S33).
한편, ECC 그룹 코렉터블 에러가 아니라고 판정한 경우(스텝 S32; "아니오"), ECC 그룹 정정 제어부(173b)는 에러가 있었던 ECC 그룹에 대해서, ECC 그룹 언코렉터블 에러인지의 여부를 판정한다(스텝 S41). 또한, ECC 그룹 언코렉터블 에러란, ECC 그룹에서 정정 불가능한 에러인 것을 말한다. ECC 그룹 언코렉터블 에러라고 판정한 경우(스텝 S41; "예"), 리드 DMA(173)의 타 CM 간 정정 제어부(203)는 타 CM에 있어서의 에러가 발생된 ECC의 생성 단위의 위치를 체크한다(스텝 S42).
계속해서, 타 CM 간 정정 제어부(203)는 체크의 결과, 에러가 있었던 ECC 그룹과 동일한 ECC 그룹에 대해서, 타 CM(1B)에서 ECC 언코렉터블 에러를 검출하였는지의 여부를 판정한다(스텝 S43). 또한, ECC 언코렉터블 에러란, 에러가 있었던 ECC 그룹에 대하여 ECC에 의해 정정 불가능한 에러인 것을 말한다. 타 CM(1B)에서 ECC 언코렉터블 에러를 검출하였다고 판정한 경우(스텝 S43; "예"), 타 CM 간 정정 제어부(203)는 스텝 S46으로 이행한다.
한편, 타 CM(1B)에서 ECC 언코렉터블 에러를 검출하지 않았다고 판단한 경우(스텝 S43; "아니오"), 타 CM 통신부(201)는 타 CM(1B)의 ECC 그룹의 전체 데이터를 요청한다(스텝 S44).
그리고, 타 CM 간 정정 제어부(203)는 메모리 컨트롤러(16)를 통하여, 자기 CM의 캐시 메모리(14)에 타 CM(1B)의 ECC 그룹의 데이터를 기입한다(스텝 S45). 예를 들어, 타 CM 간 정정 제어부(203)는 리퀘스트에 따라서 얻어진 타 CM(1B)의 ECC 그룹의 전체 데이터를 취득한다. 그리고, 타 CM 간 정정 제어부(203)는 취득한 ECC 그룹의 전체 데이터를, 리드 데이터용 버퍼(202)에 저장된 ECC 그룹의 데이터에 덮어 쓴다. 그리고, 타 CM 간 정정 제어부(203)는 리드 데이터용 버퍼(202)에 덮어 쓰기된 ECC 그룹의 데이터를, 메모리 컨트롤러(16)를 통하여 캐시 메모리(14)에 기입하고, 그 후, 판독 데이터를 서버(9)에 출력한다. 이 결과, 판독 처리 완료로서, 처리가 종료한다.
스텝 S46에서는, 리드 DMA(173)의 타 CM 간 정정 제어부(203)는 자기 CM과 타 CM(1B)에서 에러가 있었던 ECC의 생성 단위의 위치를 체크한다(스텝 S46). 그리고, 타 CM 간 정정 제어부(203)는 체크의 결과, 에러가 있었던 ECC의 생성 단위의 위치가 정정 가능한 에러의 위치인지의 여부를 판정한다(스텝 S47). 즉, 타 CM 간 정정 제어부(203)는 자기 CM 및 타 CM(1B)의 각각 에러가 있었던 ECC의 생성 단위의 위치가 전혀 중복되지 않거나, 또는 1군데만 중복되는지의 여부를 판정한다.
에러가 있었던 ECC의 생성 단위의 위치가 정정 가능한 에러의 위치가 아니라고 판정한 경우(스텝 S47; "아니오"), 타 CM 간 정정 제어부(203)는 에러가 있었던 ECC 그룹에 대해서 에러를 정정할 수 없다고 판단한다. 이 결과, 판독 실패로서, 처리가 종료한다.
한편, 에러가 있었던 ECC의 생성 단위의 위치가 정정 가능한 에러의 위치라고 판정한 경우(스텝 S47; "예"), 타 CM 통신부(201)는 정정에 필요한 데이터인 ECC의 생성 단위를 타 CM(1B)에 요청한다(스텝 S48). 그리고, 리드 DMA(173)의 타 CM 간 정정 제어부(203)는 타 CM(1B)의 데이터를 사용하여, 에러가 있었던 ECC 그룹의 데이터를 ECC의 생성 단위로 정정한다(스텝 S49). 예를 들어, 타 CM 간 정정 제어부(203)는 리퀘스트에 따라서 얻어진 타 CM(1B)의 정정에 필요한 ECC의 생성 단위를 취득한다. 그리고, 타 CM 간 정정 제어부(203)는 취득한 ECC의 생성 단위를, 리드 데이터용 버퍼(202)에 저장된 ECC 그룹의 대응하는 위치에 덮어 쓴다. 그리고, 타 CM 간 정정 제어부(203)는 덮어 쓰기된 ECC의 생성 단위 및 ECC 그룹 내의 패리티를 포함하는 ECC의 생성 단위를 사용해서 에러가 있었던 ECC의 생성 단위를 정정한다.
그리고, 타 CM 간 정정 제어부(203)는 메모리 컨트롤러(16)를 통하여, 정정한 ECC 그룹의 데이터를 자기 CM의 캐시 메모리(14)에 기입하고(스텝 S50), 그 후, 판독 데이터를 서버(9)에 출력한다. 이 결과, 판독 처리 완료로서, 처리가 종료한다.
이에 의해, NAND 플래시(11)에 기입된 유저 데이터는, 판독 처리에서 에러가 되어도 캐시 메모리(14)에 정확하게 기입된다. 그리고, 메모리 컨트롤러(16)는 올바른 유저 데이터를 서버(9)에 전달할 수 있다.
[실시예 2의 효과]
상기 실시예 2에 의하면, 타 CM 간 정정 제어부(203)는 오류가 있었던 ECC의 생성 단위의 위치가 ECC 그룹 내에서 복수인 경우, 자기 CM과 이중화된 CM(1B)의 NAND 플래시(11)에 기억된 데이터를 이용하여, 오류 위치의 ECC의 생성 단위를 정정한다. 즉, 타 CM 간 정정 제어부(203)는 CM(1B)에 있어서, 오류 위치와 동일 위치의 ECC의 생성 단위에 오류가 없으면, 오류가 없는 ECC의 생성 단위를 자기 CM의 오류가 있었던 위치에 덮어 쓰기함으로써, 오류 위치의 ECC의 생성 단위를 정정한다. 이러한 구성에 따르면, 타 CM 간 정정 제어부(203)는 자기 CM과 이중화된 CM(1B)의 오류가 없는 ECC의 생성 단위를 이용하여, 오류가 있었던 ECC의 생성 단위의 오류 정정을 제어할 수 있으므로, NAND 플래시(11)의 데이터 수복율을 더욱 향상시킬 수 있다.
[기타]
또한, 실시예 1, 2의 스토리지 장치(1, 2)는, NAND 플래시(11)를 서버(9)로부터의 데이터 보존 장소의 기억 매체로서 사용하는 것으로 하여 설명하였다. 그러나, 스토리지 장치(1, 2)는, NAND 플래시(11)를 정전이 발생한 경우의 백업처의 기억 매체로서 사용하는 것으로 해도 된다. 이러한 경우, 스토리지 장치(1, 2)는, 서버(9)로부터의 데이터 보존 장소의 기억 매체로서 HDD(Hard Disk Drive)를 탑재하도록 하면 된다. 예를 들어, 스토리지 장치(1, 2)는, 메모리 컨트롤러(17)에 RAID 컨트롤러를 접속하고, RAID 컨트롤러 관리 하에 HDD를 탑재한다. 이러한 구성에서는, 캐시 메모리(14)는 통상 시, 서버(9)로부터의 기입 명령에 따라서 HDD에 기입하는 유저 데이터를 일시적으로 기억한다. 또한, 캐시 메모리(14)는 통상 시, 서버(9)로부터의 판독 명령에 따라서 HDD로부터 판독한 유저 데이터를 일시적으로 기억한다. 그리고, 정전 시, 메모리 컨트롤러(16)는 캐시 메모리(14)에 일시적으로 기억된 유저 데이터의 NAND 플래시(11)에의 백업 처리를 실행한다. 그리고, 전원 복귀 시, 메모리 컨트롤러(16)는 리드 DMA(173)로부터 출력된 판독 데이터를 캐시 메모리(14)에 재기입한다. 이러한 구성이어도, 캐시 메모리(14)에 일시적으로 기억되어 있었던 유저 데이터는, 정전 시에 NAND 플래시(11)에 저장할 수 있다. 그리고, 정전 시에 NAND 플래시(11)에 저장된 유저 데이터는, 전원 복귀 시에 캐시 메모리(14)에 정확하게 재기입될 수 있다.
또한, 도시한 스토리지 장치(1, 2)의 각 구성 요소는, 반드시 물리적으로 도시된 바와 같이 구성되어 있을 것을 필요로 하는 것은 아니다. 즉, 스토리지 장치(1, 2)의 분산·통합의 구체적 형태는 도시한 것에 한정되지 않고, 그 전부 또는 일부를, 각종 부하나 사용 상황 등에 따라, 임의의 단위로 기능적 또는 물리적으로 분산·통합하여 구성할 수 있다. 예를 들어, CRC 생성부(171a)와 패리티 생성부(171b)를 오류 부호 생성부로서 1개의 부에 통합해도 된다. ECC 그룹 정정 제어부(173b)와 타 CM 간 정정 제어부(203)를 ECC 그룹 정정 제어부로서 1개의 부에 통합해도 된다. 한편, 패리티 정정 제어부(173a)를 CRC 체크부와 패리티 정정 제어부에 분산해도 된다.
1, 2: 스토리지 장치
1A, 1B: CM
11: NAND 플래시
12: 전원 공급 유닛
13: 정전 시 급전 유닛
14: 캐시 메모리
15: CPU
16: 메모리 컨트롤러
17: NAND 컨트롤러
171: 라이트 DMA
171a: CRC 생성부
171b: 패리티 생성부
172: 컨트롤러
172a: ECC 생성부
172b: ECC 정정 제어부
173: 리드 DMA
173a: 패리티 정정 제어부
173b: ECC 그룹 정정 제어부
201, 301: 타 CM 통신부
202, 302: 리드 데이터용 버퍼
203, 303: 타 CM 간 정정 제어부

Claims (5)

  1. 복수의 데이터 기억부와,
    기입 데이터에 제1 오류 정정 부호를 부가하여 소정의 기입 용량의 스트라이프 데이터를 생성하고, 소정 수의 상기 스트라이프 데이터에 제2 오류 정정 부호를 부가한 용장 그룹을 생성하고, 동일한 용장 그룹에 속하는 복수의 스트라이프 데이터와 제2 오류 정정 부호를 상기 복수의 데이터 기억부에 각각 대응지어서 기입하는 제어를 행하는 제어부와,
    상기 복수의 데이터 기억부로부터 각각 판독된 동일한 용장 그룹에 속하는 스트라이프 데이터에 오류가 있는지의 여부를 제2 오류 정정 부호에 의해 검출하고, 오류가 있는 스트라이프 데이터의 정정을 행하는 제1 오류 검출 정정부와,
    상기 복수의 데이터 기억부로부터 각각 판독된 동일한 용장 그룹에 속하는 각 스트라이프 데이터와 제2 오류 정정 부호를 상기 제1 오류 정정 부호의 생성 단위마다 조 분할하고, 복수의 분할 스트라이프 데이터와 분할 제2 오류 정정 부호를 포함하는 오류 정정 그룹을 복수 생성하고, 동일한 오류 정정 그룹에 있어서 각 분할 스트라이프 데이터에 오류가 있는지의 여부를 분할 제2 오류 정정 부호에 의해 검출하고, 오류가 있는 분할 스트라이프 데이터의 정정을 행하는 제2 오류 검출 정정부
    를 구비하는 것을 특징으로 하는 기록 재생 장치.
  2. 제1항에 있어서, 상기 복수의 데이터 기억부로부터 각각 판독된 동일한 용장 그룹에 속하는 데이터에 오류가 있는지의 여부를 제1 오류 정정 부호에 의해 검출하고, 오류가 있는 데이터의 정정을 행할 수 없는 경우, 제1 오류 정정 부호의 생성 단위의 어느 위치에서 오류가 검출되었는지를 출력하는 오류 위치 출력부를 구비하고,
    상기 제2 오류 검출 정정부는, 상기 오류 위치 출력부에 의해 출력된 오류 위치를 포함하는 오류 정정 그룹에서 오류가 있는 분할 스트라이프 데이터의 정정을 행하는
    것을 특징으로 하는 기록 재생 장치.
  3. 제2항에 있어서, 상기 오류 정정 그룹에 복수의 오류 위치가 있는 경우, 자기 장치(自裝置)와 용장화된 장치 내의 복수의 데이터 기억부에 기억된 데이터 중 상기 오류 정정 그룹에 대응하는 그룹에 속하는, 자기 장치의 오류 위치와 동일 위치의 분할 스트라이프 데이터에 오류가 없으면, 오류가 없는 분할 스트라이프 데이터를 수취하고, 수취한 분할 스트라이프 데이터를 자기 장치의 해당하는 오류 위치에 복제하는 복제부를
    더 구비하는 것을 특징으로 하는 기록 재생 장치.
  4. 기입 데이터에 제1 오류 정정 부호를 부가하여 소정의 기입 용량의 스트라이프 데이터를 생성하고, 소정 수의 상기 스트라이프 데이터에 제2 오류 정정 부호를 부가한 용장 그룹을 생성하고, 동일한 용장 그룹에 속하는 복수의 스트라이프 데이터와 제2 오류 정정 부호를 복수의 데이터 기억부에 각각 대응지어서 기입하는 제어가 행하여지는 기록 재생 장치의 데이터 오류 정정 장치가,
    상기 복수의 데이터 기억부로부터 각각 판독된 동일한 용장 그룹에 속하는 스트라이프 데이터에 오류가 있는지의 여부를 제2 오류 정정 부호에 의해 검출하고, 오류가 있는 스트라이프 데이터의 정정을 행하고,
    상기 복수의 데이터 기억부로부터 각각 판독된 동일한 용장 그룹에 속하는 각 스트라이프 데이터와 제2 오류 정정 부호를 상기 제1 오류 정정 부호의 생성 단위마다 조 분할하고, 복수의 분할 스트라이프 데이터와 분할 제2 오류 정정 부호를 포함하는 오류 정정 그룹을 복수 생성하고, 동일한 오류 정정 그룹에 있어서 각 분할 스트라이프 데이터에 오류가 있는지의 여부를 분할 제2 오류 정정 부호에 의해 검출하고, 오류가 있는 분할 스트라이프 데이터의 정정을 행하는
    각 처리를 실행하는 것을 특징으로 하는 오류 정정 방법.
  5. 복수의 데이터 기억부에의 데이터의 기입 및 상기 복수의 데이터 기억부로부터의 데이터의 판독을 제어하는 제어 장치로서,
    기입 데이터에 제1 오류 정정 부호를 부가하여 소정의 기입 용량의 스트라이프 데이터를 생성하고, 소정 수의 상기 스트라이프 데이터에 제2 오류 정정 부호를 부가한 용장 그룹을 생성하고, 동일한 용장 그룹에 속하는 복수의 스트라이프 데이터와 제2 오류 정정 부호를 상기 복수의 데이터 기억부에 각각 대응지어서 기입하는 제어를 행하는 제어부와,
    상기 복수의 데이터 기억부로부터 각각 판독된 동일한 용장 그룹에 속하는 스트라이프 데이터에 오류가 있는지의 여부를 제2 오류 정정 부호에 의해 검출하고, 오류가 있는 스트라이프 데이터의 정정을 행하는 제1 오류 검출 정정부와,
    상기 복수의 데이터 기억부로부터 각각 판독된 동일한 용장 그룹에 속하는 각 스트라이프 데이터와 제2 오류 정정 부호를 상기 제1 오류 정정 부호의 생성 단위마다 조 분할하고, 복수의 분할 스트라이프 데이터와 분할 제2 오류 정정 부호를 포함하는 오류 정정 그룹을 복수 생성하고, 동일한 오류 정정 그룹에 있어서 각 분할 스트라이프 데이터에 오류가 있는지의 여부를 분할 제2 오류 정정 부호에 의해 검출하고, 오류가 있는 분할 스트라이프 데이터의 정정을 행하는 제2 오류 검출 정정부
    를 구비하는 것을 특징으로 하는 제어 장치.
KR1020157009434A 2012-10-19 2012-10-19 기록 재생 장치, 오류 정정 방법 및 제어 장치 KR20150058315A (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2012/077160 WO2014061161A1 (ja) 2012-10-19 2012-10-19 記録再生装置、誤り訂正方法および制御装置

Publications (1)

Publication Number Publication Date
KR20150058315A true KR20150058315A (ko) 2015-05-28

Family

ID=50487749

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157009434A KR20150058315A (ko) 2012-10-19 2012-10-19 기록 재생 장치, 오류 정정 방법 및 제어 장치

Country Status (5)

Country Link
US (1) US20150200685A1 (ko)
JP (1) JP6052294B2 (ko)
KR (1) KR20150058315A (ko)
CN (1) CN104756092A (ko)
WO (1) WO2014061161A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10671478B2 (en) 2016-11-28 2020-06-02 Samsung Electronics Co., Ltd. Scrubbing controllers of semiconductor memory devices, semiconductor memory devices and methods of operating the same

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018185800A1 (ja) * 2017-04-03 2018-10-11 株式会社日立製作所 ストレージ装置
WO2019049224A1 (ja) * 2017-09-06 2019-03-14 株式会社日立製作所 分散ストレージシステム及び分散記憶制御方法

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3958220A (en) * 1975-05-30 1976-05-18 International Business Machines Corporation Enhanced error correction
US4849975A (en) * 1987-11-10 1989-07-18 International Business Machines Corporation Error correction method and apparatus
US5247523A (en) * 1989-07-12 1993-09-21 Hitachi, Ltd. Code error correction apparatus
US6101615A (en) * 1998-04-08 2000-08-08 International Business Machines Corporation Method and apparatus for improving sequential writes to RAID-6 devices
US6351838B1 (en) * 1999-03-12 2002-02-26 Aurora Communications, Inc Multidimensional parity protection system
US6434719B1 (en) * 1999-05-07 2002-08-13 Cirrus Logic Inc. Error correction using reliability values for data matrix
JP2001297038A (ja) * 2000-04-11 2001-10-26 Toshiba Corp データ記憶装置および記録媒体並びに記録媒体制御方法
US6675318B1 (en) * 2000-07-25 2004-01-06 Sun Microsystems, Inc. Two-dimensional storage array with prompt parity in one dimension and delayed parity in a second dimension
US6848022B2 (en) * 2002-10-02 2005-01-25 Adaptec, Inc. Disk array fault tolerant method and system using two-dimensional parity
US7085953B1 (en) * 2002-11-01 2006-08-01 International Business Machines Corporation Method and means for tolerating multiple dependent or arbitrary double disk failures in a disk array
KR20040066638A (ko) * 2003-01-20 2004-07-27 삼성전자주식회사 외부 저장 서브 시스템에서의 패리티 저장 방법 및에러블록 복구 방법
JP2005004290A (ja) * 2003-06-10 2005-01-06 Hitachi Ltd メモリ障害処理方式
US7134066B2 (en) * 2003-10-20 2006-11-07 International Business Machines Corporation Generalized parity stripe data storage array
US7788526B2 (en) * 2007-01-10 2010-08-31 International Business Machines Corporation Providing enhanced tolerance of data loss in a disk array system
US8041990B2 (en) * 2007-06-28 2011-10-18 International Business Machines Corporation System and method for error correction and detection in a memory system
JP5166074B2 (ja) * 2008-02-29 2013-03-21 株式会社東芝 半導体記憶装置、その制御方法、および誤り訂正システム
CN101908376B (zh) * 2009-06-04 2014-05-21 威刚科技(苏州)有限公司 非挥发性存储装置及其控制方法
JP5213061B2 (ja) * 2009-08-28 2013-06-19 エヌイーシーコンピュータテクノ株式会社 ミラーリング制御装置、ミラーリング制御回路、ミラーリング制御方法およびそのプログラム
CN102034537A (zh) * 2009-09-25 2011-04-27 慧荣科技股份有限公司 数据存取装置及数据存取方法
JP5789767B2 (ja) * 2009-11-25 2015-10-07 パナソニックIpマネジメント株式会社 半導体記録装置及び半導体記録装置の制御方法
CN102236585B (zh) * 2010-04-20 2015-06-03 慧荣科技股份有限公司 提升错误更正能力的方法以及相关的记忆装置及其控制器
US9176812B1 (en) * 2012-05-22 2015-11-03 Pmc-Sierra, Inc. Systems and methods for storing data in page stripes of a flash drive
US9021336B1 (en) * 2012-05-22 2015-04-28 Pmc-Sierra, Inc. Systems and methods for redundantly storing error correction codes in a flash drive with secondary parity information spread out across each page of a group of pages

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10671478B2 (en) 2016-11-28 2020-06-02 Samsung Electronics Co., Ltd. Scrubbing controllers of semiconductor memory devices, semiconductor memory devices and methods of operating the same

Also Published As

Publication number Publication date
WO2014061161A1 (ja) 2014-04-24
US20150200685A1 (en) 2015-07-16
JP6052294B2 (ja) 2016-12-27
JPWO2014061161A1 (ja) 2016-09-05
CN104756092A (zh) 2015-07-01

Similar Documents

Publication Publication Date Title
JP6882115B2 (ja) Ddr sdramインタフェイスのためのdram支援エラー訂正方法
US7062704B2 (en) Storage array employing scrubbing operations using multiple levels of checksums
US5379417A (en) System and method for ensuring write data integrity in a redundant array data storage system
US11037619B2 (en) Using dual channel memory as single channel memory with spares
US7017107B2 (en) Storage array employing scrubbing operations at the disk-controller level
EP2715550B1 (en) Apparatus and methods for providing data integrity
US8972823B2 (en) Error correcting for improving reliability by combination of storage system and flash memory device
CA2532766C (en) Data storage array
US5513192A (en) Fault tolerant disk drive system with error detection and correction
US7984325B2 (en) Storage control device, data recovery device, and storage system
US10901839B2 (en) Common high and low random bit error correction logic
US20090327803A1 (en) Storage control device and storage control method
US20140068319A1 (en) Error Detection And Correction In A Memory System
KR20140013095A (ko) 데이터 무결성을 제공하기 위한 방법 및 장치
KR20110089452A (ko) 반도체 디스크 및 시스템
US11170869B1 (en) Dual data protection in storage devices
US20190171520A1 (en) Internally-generated data storage in spare memory locations
JP6052294B2 (ja) 記録再生装置、誤り訂正方法および制御装置
JP2008217395A (ja) ディスクアレイ装置
JP3676793B2 (ja) ディスクアレイ装置
JP2021521524A (ja) 共通の高ランダム・ビット・エラーおよび低ランダム・ビット・エラー修正ロジック
JP2003036146A (ja) ディスクアレイ制御方式
JP3699473B2 (ja) ディスクアレイ装置
US20050102470A1 (en) Disk array device
US20050066254A1 (en) Error detection in redundant array of storage units

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application