KR20060133892A - 메모리 미러링 장치 및 방법 - Google Patents

메모리 미러링 장치 및 방법 Download PDF

Info

Publication number
KR20060133892A
KR20060133892A KR1020060050764A KR20060050764A KR20060133892A KR 20060133892 A KR20060133892 A KR 20060133892A KR 1020060050764 A KR1020060050764 A KR 1020060050764A KR 20060050764 A KR20060050764 A KR 20060050764A KR 20060133892 A KR20060133892 A KR 20060133892A
Authority
KR
South Korea
Prior art keywords
data
memory
error
pulley
logic
Prior art date
Application number
KR1020060050764A
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 KR20060133892A publication Critical patent/KR20060133892A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/16Protection against loss of memory contents
    • 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/16Error detection or correction of the data by redundancy in hardware
    • G06F11/1666Error detection or correction of the data by redundancy in hardware where the redundant component is memory or memory area
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • 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/16Error detection or correction of the data by redundancy in hardware
    • G06F11/1666Error detection or correction of the data by redundancy in hardware where the redundant component is memory or memory area
    • G06F11/167Error detection by comparing the memory output
    • 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/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error 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/2053Error 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/2056Error 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 by mirroring

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)
  • Debugging And Monitoring (AREA)
  • Image Input (AREA)

Abstract

메모리 미러링을 위한 다양한 시스템 및 방법이 제공된다. 일 실시예에 따르면, 메모리 풀리 버퍼드 컨트롤러(113)를 가지는 미러 메모리(105)가 제공되고, 메모리 풀리 버퍼드 컨트롤러(113)는 중앙처리장치{CPU}(103)에 의하여 미러 메모리(106) 내 복수의 메모리(116)로의 액세스를 용이하게 하도록 구성된다. 주 메모리(109)에 결합하도록 구성된 주 메모리 링크 인터페이스(136)가 메모리 풀리 버퍼드 컨트롤러(113)에 제공된다. 메모리 풀리 버퍼드 컨트롤러(113)는 주 메모리(109)로부터의 제1 데이터 출력에 제1 데이터 에러가 존재하는지를 검출하도록 구성된 제1 에러 로직, 및 미러 메모리(106)로부터의 제2 데이터 출력에 제2 데이터 에러가 존재하는지를 검출하도록 구성된 제2 에러 로직을 더 포함한다. 또한, 메모리 풀리 버퍼드 컨트롤러(113)는 CPU(103)에 인가되는 제1 데이터 출력 또는 제2 데이터 출력 중 하나를 선택하는 선택 로직도 포함한다.
메모리 미러링, 메모리 풀리 버퍼드 컨트롤러, 듀얼 인라인 메모리 모듈(DIMM)

Description

메모리 미러링 장치 및 방법 {MEMORY MIRRORING APPARATUS AND METHOD}
본 발명은 이하의 도면을 참조하여 해석될 수 있다. 도면의 구성요소는 반드시 실제 크기에 맞추어져 있는 것은 아니다. 또한, 도면에서 동일한 참조 번호는 여러 도면을 통하여 대응하는 부분을 가리킨다.
도 1은 본 발명의 실시예에 따라 중앙처리장치(CPU), 미러 풀리 버퍼드 컨트롤러(mirror fully buffered controller), 및 주 풀리 버퍼드 메모리(primary fully buffered memory)를 포함하는 컴퓨터 시스템의 개략도.
도 2는 본 발명의 실시예에 따라 미러 풀리 버퍼드 메모리(mirror fully buffered memory)의 컴퓨터 시스템의 개략도.
도 3은 본 발명의 실시예에 따라 도 2의 미러 풀리 버퍼드 메모리에서 사용되는 선택 로직의 한 예의 흐름도.
도 4는 본 발명의 실시예에 따라 도 2의 미러 풀리 버퍼드 메모리에서 사용되는 선택 로직의 다른 예의 흐름도.
메모리 미러링(memory mirroring)은, 메모리 장치에서 일어날 수 있는 파국 적 고장(catastrophic failure) 또는 에러 때문에 데이터가 손실되지 않도록 데이터의 중복 저장(redundant storage)을 제공하기 위하여 전형적으로 사용된다. 메모리 미러링은 주 메모리에 기록된 데이터의 사본을 대응하는 미러 메모리에 저장함으로써 데이터의 중복 저장을 제공한다.
본 발명은 메모리 미러링을 위한 다양한 시스템 및 방법을 제공하고자 한다. 본 발명에서는 메모리 미러링을 위하여 미러 풀리 버퍼드 컨트롤러를 가지는 미러 메모리를 사용한다.
도 1에서는, 본 발명의 일 실시예에 따른 컴퓨터 시스템(100)이 도시되고 있다. 이 점에 있어서, 컴퓨터 시스템(100)은 예를 들면, 서버, 개인용 컴퓨터 시스템, 또는 인정될 수 있는 다른 시스템일 수 있다. 컴퓨터 시스템(100)은 중앙처리장치(CPU; 103)를 포함한다. 또한, 컴퓨터 시스템(100)은 미러 풀리 버퍼드 듀얼 인라인 메모리 모듈(DIMM; 106)과 주 풀리 버퍼드 DIMM(109)도 포함한다.
미러 풀리 버퍼드 DIMM(106) 내에 미러 풀리 버퍼드 컨트롤러(113)가 존재한다. 미러 풀리 버퍼드 컨트롤러(113)는, 예컨대 동적 랜덤 액세스 메모리(DRAM) 또는 다른 유형의 적절한 메모리와 같은 다수의 랜덤 액세스 메모리(116)에 결합된다. 메모리(116)는 인정될 수 있는 하나 이상의 메모리 칩에서 구현될 수 있다. 또한, 미러 풀리 버퍼드 컨트롤러(113)는 고속의 버스(119) 덕분에 CPU(103)에도 결합된다.
미러 풀리 버퍼드 DIMM(106)과 유사하게, 주 풀리 버퍼드 DIMM(109)은 주 풀리 버퍼드 컨트롤러(123)를 포함한다. 주 풀리 버퍼드 컨트롤러(123)는, 예컨대 동적 랜덤 액세스 메모리(DRAM)나 다른 유형의 랜덤 액세스 메모리와 같은 다수의 랜덤 액세스 메모리(126)에 결합된다. 또한, 주 풀리 버퍼드 컨트롤러(123)는 고속의 데이터 버스(119) 덕분에 미러 풀리 버퍼드 컨트롤러(113)에 전기적으로 연결된다. 미러 풀리 버퍼드 컨트롤러(113)를 통하여 주 풀리 버퍼드 DIMM(109)과 CPU(103) 사이에 데이터 통신이 성립된다.
미러 풀리 버퍼드 DIMM(106)과 주 풀리 버퍼드 DIMM(109)은, 예를 들면 CPU(103)에 의하여 액세스 되는 랜덤 액세스 메모리(116/126)를 포함하는 메모리 카드 또는 기타 모듈을 포함할 수 있다. 미러 풀리 버퍼드 컨트롤러(113)와 주 풀리 버퍼드 컨트롤러(123)는 각각 중앙처리장치(103)에 의한 각각의 메모리(116 및 126)에의 액세스를 용이하게 한다. 미러 풀리 버퍼드 컨트롤러(113)는 고속 데이터 버스(119)를 통하여 주 풀리 버퍼드 DIMM(109)의 주 풀리 버퍼드 컨트롤러(123)에 결합하도록 구성된 주 메모리 입력(primary memory input)을 포함한다.
미러 풀리 버퍼드 DIMM(106)과 주 풀리 버퍼드 DIMM(109)은, 버퍼 회로 또는 기타 회로가 고속 데이터 버스(119)와 메모리(116/126) 사이의 인터페이스로서 미러 풀리 버퍼드 컨트롤러(113)와 주 풀리 버퍼드 컨트롤러(123)의 형태로 사용된다는 점에서, "완전히 버퍼링된다". 미러 풀리 버퍼드 컨트롤러(113)와 주 풀리 버퍼드 컨트롤러(123)는 메모리(116/126) 사이에서 주소와 컨트롤 정보를 분배하도록, 각각 CPU(103)로부터 읽기 및 쓰기 연산을 용이하게 하도록 각각 설정된다. 경우에 따라서는, 미러 풀리 버퍼드 컨트롤러(113)와 주 풀리 버퍼드 컨트롤러(123)의 사용을 통해, 읽기 및 쓰기 연산을 수행하기 위해 메모리(116/126)에 적절히 액세스하기 위한 다양한 주소 및 컨트롤 회로가 컴퓨터 시스템(100)의 마더보드에서 제거된다.
미러 풀리 버퍼드 DIMM(106)과 CPU(103) 사이, 및 주 풀리 버퍼드 DIMM(109)과 미러 풀리 버퍼드 컨트롤러(113) 사이의 고속 인터페이스(119)는, 예컨대 초당 4.8 기가비트에서 초당 6.4 기가비트 이상까지의 범위에 이르는 매우 빠른 속도로 동작할 수 있다. 이러한 점에서, 고속 데이터 버스(119)는 복수의 디퍼런셜 핀(differential pin)을 포함할 수 있다. 예컨대, 일 실시예에 따르면, CPU(103)와 미러 풀리 버퍼드 DIMM(106) 또는 주 풀리 버퍼드 DIMM(109) 사이의 통신을 용이하게 하기 위해 10개의 디퍼런셜 핀이 사용될 수 있으며, 미러 풀리 버퍼드 DIMM(106) 또는 주 풀리 버퍼드 DIMM(109) 둘 중 하나에서 CPU(103)로의 데이터 통신 흐름을 용이하게 하기 위하여 14개의 디퍼런셜 핀이 사용될 수 있다. 디퍼런셜 핀의 다른 조합 또는 다른 유형의 전기적 데이터 통신이 사용될 수 있다.
미러 풀리 버퍼드 컨트롤러(113)와 주 풀리 버퍼드 컨트롤러(123)를 사용함으로써, 각각의 메모리(116/126)로의 액세스를 제공하는데 필요한 핀 개수(pin count)는, 마더보드로부터 메모리(116/126)에 직접 액세스하는데 필요한 핀을 제공할 필요가 없으므로 상당히 감소된다. 또한, 다수의 메모리(116/126) 사이에서의 액세스 타이밍이 개선되는데, 그에 의하여 결국 데이터 전송이 더 빨라지며, 이는 둘 이상의 메모리(116/126)가 연관되는 각각의 데이터 전송 사이에서 빈틈없는 타 이밍을 특정할 수 있기 때문이다.
연산 동안 CPU(103)는 주어진 하나 이상의 메모리(116/126)에 대하여 읽기 또는 쓰기 연산을 수행하기 위하여 미러 풀리 버퍼드 컨트롤러(113) 또는 주 풀리 버퍼드 컨트롤러(123) 중 적절한 하나에 메시지를 전송한다. 그리고 나서 미러 풀리 버퍼드 컨트롤러(113) 또는 주 풀리 버퍼드 컨트롤러(123)는 각각의 메모리(116/126)에 대하여 읽기 또는 쓰기 연산을 수행한다. 예를 들면, 읽기 연산이 요구되면, 미러 풀리 버퍼드 컨트롤러(113) 또는 주 풀리 버퍼드 컨트롤러(123)가 적절한 메모리(116/126)로부터 데이터를 액세스하고 논의될 고속 데이터 버스(119)를 통해 CPU(103)로 전송한다.
주 풀리 버퍼드 컨트롤러(123)가 CPU(103)에 데이터를 전송할 때, 이는 미러 풀리 버퍼드 컨트롤러(113)를 통하여 이루어진다. 이처럼 미러 풀리 버퍼드 컨트롤러(113)를 거쳐 주 풀리 버퍼드 DIMM(109)과 CPU(103) 사이의 데이터 통신을 성립시킴으로써, 미러 풀리 버퍼드 컨트롤러(113)가 에러 검사 및/또는 수정을 수행한다는 이점이 있고 각각의 미러 풀리 버퍼드 DIMM(106) 또는 주 풀리 버퍼드 DIMM(109)으로부터 정확한 값이 얻어짐을 보증할 수 있다.
미러 풀리 버퍼드 DIMM(106)은 주 풀리 버퍼드 DIMM(109)에 대하여 미러 메모리로서 사용된다. 이러한 점에서, 미러 풀리 버퍼드 컨트롤러(113)는 주 풀리 버퍼드 컨트롤러(123)에 의해 수행되는 모든 읽기 및 쓰기 연산을 수행한다. 메모리(116)의 상태는 메모리(126)의 상태를 미러링한다. CPU(103)가 주 풀리 버퍼드 DIMM(109)의 하나 이상의 메모리(126)로부터 데이터를 액세스하기 원할 때, 동일한 데이터가 미러 풀리 버퍼드 컨트롤러(113)에 의해 대응 메모리(116)로부터 액세스된다. 이 때, 논의될 본 발명의 다양한 실시예에 따라, 미러 풀리 버퍼드 컨트롤러(113)에는 에러 검사 및 주 풀리 버퍼드 DIMM(109)의 메모리(126)로부터 얻어진 데이터와 미러 풀리 버퍼드 DIMM(106)의 메모리(116)로부터 얻어진 대응 데이터에 대한 비교를 수행하는 유리한 기회가 제공된다. 궁극적으로, 미러 풀리 버퍼드 컨트롤러(113)는 어떠한 데이터가 주 또는 미러 풀리 버퍼드 DIMM(106/109)으로부터 CPU(103)로 발송되는지를 결정한다. 주 또는 미러 풀리 버퍼드 DIMM(106/109)으로부터의 데이터 중 어느 하나가 선택되어, CPU(103)로 버스(119)를 통해 전송되기 때문에, CPU(103)는, 예컨대 에러가 존재하는지를 결정하기 위한 중복 데이터를 얻기 위해, 각각의 읽기 요청을 주 및 미러 풀리 버퍼드 DIMM(106/109)에 발송할 필요가 없다. 주 풀리 버퍼드 DIMM(109)에 데이터를 쓸 때, 미러 풀리 버퍼드 컨트롤러(113)는 자동적으로 미러 풀리 버퍼드 DIMM(106)의 적절한 메모리(116)에 그 데이터의 사본을 쓴다. 따라서, CPU(103)는 주 및 미러 풀리 버퍼드 DIMM(106/109) 모두를 읽고 쓰기 위하여 그러한 연산이 수행될 때마다 읽기 또는 쓰기 요청을 두 번 전송할 필요가 없다. 이는 데이터 버스(119)의 트래픽을 반으로 감소시킨다는 이점이 있는 동시에 데이터 미러링을 효과적으로 제공한다. 또한, 에러 검사 또는 수정이 마더보드의 회로 또는 CPU(103) 자체에 의하여서보다 미러 풀리 버퍼드 컨트롤러(113)에 의하여 유리하게 수행된다.
도 2에서는, 본 발명의 일 실시예에 따른 미러 풀리 버퍼드 컨트롤러(113)의 개략적인 블록도를 도시하고 있다. 미러 풀리 버퍼드 컨트롤러(113)는 CPU 링크 인터페이스(CPU link interface; 133)와 주 링크 인터페이스(primary link interface; 136)를 포함한다. 또한, 미러 풀리 버퍼드 컨트롤러(113)는 RAM 인터페이스(139)도 포함한다.
CPU 링크 인터페이스(133)는 전술한 고속 데이터 버스(119)를 통하여 CPU(103)에 연결되도록 구성된다. 또한 주 링크 인터페이스(136)는 전술한 고속 인터페이스(119)를 통하여 주 풀리 버퍼드 DIMM(109)에 연결되도록 구성된다. RAM 인터페이스(139)는 각각의 메모리(116)와의 데이터 통신을 성립시키도록 구성된다. 일 실시예에 따르면, 메모리(116)는, 예컨대 동적 랜덤 액세스 메모리(DRAM) 또는 당업자에게 인정될 수 있는 다른 적절한 유형의 메모리를 포함한다. 또한, 미러 풀리 버퍼드 컨트롤러(113)는 주 에러 로직(primary error logic; 143) 또는 미러 에러 로직(mirror error logic; 146)을 포함한다.
주 링크 인터페이스(136)의 출력은 주 에러 로직(143)의 입력으로서 수신된다. 주 에러 로직(143)의 출력은 멀티플렉서(149)와 선택 로직(selection logic; 153)에 인가된다. RAM 인터페이스(139)의 출력은 미러 에러 로직(146)에 인가된다. 그리고 나서 미러 에러 로직(146)의 출력은 멀티플렉서(149)의 입력과 선택 로직(153)에 인가된다. 선택 로직(153)은 멀티플렉서(149)에 인가되는 컨트롤 입력을 발생시킨다. 멀티플렉서(149)의 출력은 CPU 링크 인터페이스(133)에 인가된다.
연산 동안, CPU(103)는 주 풀리 버퍼드 DIMM(109)의 메모리(126)로 향하는 읽기 요청 또는 쓰기 요청을 전송할 수 있다(도 1). 미러 풀리 버퍼드 DIMM(106) 은 주 풀리 버퍼드 DIMM(109)의 미러 메모리로 사용된다. 이러한 점에서, 주 풀리 버퍼드 DIMM(109)에서 읽히거나 쓰이는 데이터는 동시에 미러 풀리 버퍼드 DIMM(106)에서도 읽히거나 쓰인다. 미러 풀리 버퍼드 컨트롤러(113)의 RAM 인터페이스(139)는 언제 특정 읽기 또는 쓰기 요청이 CPU(103)로부터 주 풀리 버퍼드 DIMM(109)으로 예정되는지를 인식하도록 구성된다. 이러한 점에서, RAM 인터페이스(139)는, 주 풀리 버퍼드 컨트롤러(123)에 의하여 조정되는 주 풀리 버퍼드 DIMM(109)의 메모리(126)에 대하여 발생할 동일한 읽기 또는 쓰기 연산이 미러 풀리 버퍼드 DIMM(106)의 메모리(116)에 대하여 일어나도록 한다.
읽기 연산이 수행되면, RAM 인터페이스(139)는 메모리(116) 중 하나의 특정 장소로부터 원하는 데이터를 획득하고 동일한 데이터를 미러 에러 로직(146)에 가한다. 마찬가지로, 주 풀리 버퍼드 컨트롤러(123){도 1}도 각각의 메모리(126) 중 하나로부터 동일한 데이터를 읽는다. 그리고 나서 주 풀리 버퍼드 컨트롤러(123)는 각각의 메모리(126) 중 하나로부터 읽은 데이터를 미러 풀리 버퍼드 컨트롤러(113)로 전송하는데, 그러한 데이터는 주 링크 인터페이스(136)에 의하여 수신된다. 그 후, 데이터는 주 에러 로직(143)에 인가된다.
주 에러 로직(143)과 미러 에러 로직(146)은 모두 각각 예컨대 CRC 검사(cyclical redundancy check)를 수행하는 회로를 포함할 수 있다. 이와 달리, 주 에러 로직(143)과 미러 에러 로직(146)은 각각 에러 수정 코드(error correcting code; ECC)를 포함할 수도 있다. 주 에러 로직(143) 및 미러 에러 로직(146)이 CRC 검사를 수행하는 코드를 포함하는 경우, 주 에러 로직(143) 및 미러 에러 로직(146)은 주 링크 인터페이스(136) 또는 RAM 인터페이스(139)로부터 각각 수신한 데이터에서 에러가 검출되는지를 결정하기 위하여 연산한다. 주 에러 로직(143) 및 미러 에러 로직(146)이 각각 에러 수정 코드(ECC)를 사용하는 경우, 주 에러 로직(143) 및 미러 에러 로직(146)은 주 링크 인터페이스(136) 또는 RAM 인터페이스(139)로부터 각각 수신한 데이터에서 검출된 에러를 수정하려고 할 수 있다. 주 에러 로직(143)과 미러 에러 로직(146)이 데이터에 수정을 가하는 경우, 주 에러 로직(143) 및 미러 에러 로직(146)은 그러한 수정이 이루어졌음을 선택 로직(153)에 알린다.
선택 로직(153)은 주 에러 로직(143)과 미러 에러 로직(146)으로부터 데이터를 수신한다. 또한 선택 로직(153)은 주 에러 로직(143) 또는 미러 에러 로직(146)으로부터 수신한 각각의 데이터에 데이터 에러가 존재하는지를 표시하는 데이터를 수신한다. 이와 달리, 에러 수정 코드(ECC)가 주 에러 로직(143) 및 미러 에러 로직(146)에 사용되면, 경우에 따라서 주 링크 인터페이스(136) 또는 RAM 인터페이스(139)로부터 수신한 데이터에 수정이 가해졌는지에 대한 표시가 제공될 수 있다.
그 후, 선택 로직(153)은 CPU(103)로 전송되는 CPU 링크 인터페이스(133)에 주 에러 로직(143)으로부터 데이터가 인가될지 미러 에러 로직(146)으로부터 데이터가 인가될지에 대한 결정을 한다(도 1). 이러한 결정을 함에 있어서, 선택 로직(153)은 주 에러 로직(143)과 미러 에러 로직(146)으로부터 데이터 및 그러한 데이터에 에러가 존재하는지에 관한 표시 또는 그러한 데이터가 경우에 따라 수정되 었는지에 대한 표시를 포함하는 다양한 입력을 고려할 것이다. 선택 로직(153)은 멀티플렉서(149)로의 컨트롤 입력을 생성함으로써 어떠한 데이터가 CPU 링크 인터페이스(133)에 인가될지를 제어한다. 이하의 논의는 그러한 정보에 기초하여 발생할 수 있는 다수의 선택 시나리오의 예를 기술한다.
일 실시예에 따르면, 주 에러 로직(143) 및 미러 에러 로직(146)은 주 링크 인터페이스(136) 및 RAM 인터페이스(139)로부터 수신한 데이터 상에서 CRC 검사를 수행할 수 있다. 주 풀리 버퍼드 DIMM(109) 또는 미러 풀리 버퍼드 DIMM(106) 중 하나로부터의 데이터가 에러를 경험한 경우, 선택 로직(153)은 주 에러 로직(143) 및 미러 에러 로직(146)으로부터의 데이터 출력 중 에러가 없는 하나를 선택하여 CPU 인터페이스(133)를 통해 CPU에 인가될 것이다. 주 에러 로직(143) 및 미러 에러 로직(146) 모두의 데이터 출력이 데이터 에러가 존재함을 나타낸다면, 선택 로직(153)은 주 풀리 버퍼드 DIMM(109)으로부터의 데이터와 같은 주 또는 미러 에러 로직 출력 중 미리 정의된 하나를 선택할 수 있다. 또한, 선택 로직(153)은 데이터에 에러가 존재한다는 표시를 CPU(103)에 전송할 수 있다.
다른 실시예에 따르면, 주 에러 로직(143) 및 미러 에러 로직(146)은 에러 수정 코드(ECC)를 사용한다. 이러한 경우, 주 에러 로직(143) 또는 미러 에러 로직(146)에 의하여 주 링크 인터페이스(136) 또는 RAM 인터페이스(139)로부터의 데이터에서 각각 에러가 검출되면, 주 에러 로직(143) 또는 미러 에러 로직(146)은 에러 자체를 수정하려고 할 것이다. 이러한 경우, 선택 로직(153)은 주 에러 로직(143) 또는 미러 에러 로직(146)으로부터의 데이터 출력 중 수정되지 않은 하나 를 선택하도록 구성된다. 그러한 시나리오에 따르면, 주 링크 인터페이스(136) 또는 RAM 인터페이스(139) 중 단 하나로부터의 데이터가 수정된 에러를 포함하는 것으로 가정된다. 예컨대 에러 수정 코드(ECC)를 사용해서 수정될 수 없는 복수의 비트 에러가 발생할 경우 수정이 잘못될 수 있으므로, 데이터 출력 중 수정되지 않은 하나는 선택된다.
후속적인 예에 따르면, 주 에러 로직(143)과 미러 에러 로직(146)으로부터의 데이터가 모두 수정된 것으로 표시되고, 주 에러 로직(143)과 미러 에러 로직(146)의 데이터 출력이 동일하다면, 선택 로직은 데이터 출력 중 미리 정의된 하나를 선택하여 CPU 링크 인터페이스(133)에 인가되도록 구성될 수 있다. 일 실시예에 따르면, 주 에러 로직(143)의 출력이 선택될 수 있다. 주 에러 로직(143)과 미러 에러 로직(146)으로부터의 수정된 데이터가 동일하다는 사실은, 두 에러의 수정이 두 소스로부터의 정확한 데이터를 결과로 갖는다는 표시를 제공한다. 따라서, 그러한 시나리오에서 소스의 실제 선택이 크게 중요하지는 않지만, 주 에러 로직(143)으로부터의 데이터가 주 풀리 버퍼드 DIMM(109)으로부터 나온 것이므로 선택된다.
그러나, 다른 시나리오에 따르면, RAM 인터페이스(139)에 의하여 미러 에러 로직(146)으로 제공된 데이터와 주 링크 인터페이스(136)에 의하여 주 에러 로직(143)으로 제공된 데이터는, 주 에러 로직(143)과 미러 에러 로직(146)이 각각 수정하고자 했던 에러를 각각 포함할 수 있다. 그러나, 경우에 따라서는, 선택 로직(153)에 인가된 주 에러 로직(143)과 미러 에러 로직(146)으로부터의 수정된 데이터가 서로 같지 않을 수 있다. 그러한 경우에 있어서, 주 에러 로직(143) 또는 미러 에러 로직(146)으로부터의 데이터 출력 중 적어도 하나가 부정확하고 대응하는 시도된 수정이 실패하였음이 명백하게 된다. 경우에 따라서는, 주 에러 로직(143)과 미러 에러 로직(146)의 출력이 모두 부정확하고 두 경우에 모두 수정이 실패할 수 있다.
다른 상황에 따르면, 선택 로직(153)은 주 에러 로직(143) 또는 미러 에러 로직(146) 둘 중 하나로부터 수신한 데이터 값 중 어떤 것이 정확한지를 결정할 수 없다. 따라서, 선택 로직(153)은 CPU(103)로의 전송을 위하여 CPU 링크 인터페이스(133)에 인가하기 위하여 주 에러 로직(143) 또는 미러 에러 로직(146)의 출력 중 미리 정의된 하나를 선택할 수 있다. 또한, 선택 로직(153)은 CPU(103)로의 데이터 자체에서는 수정될 수 없었던 에러가 검출되었음을 나타내는 표지를 전송할 수 있다.
또 다른 예에 따르면, RAM 인터페이스(139)에 의하여 미러 에러 로직(146)에 제공된 데이터 및/또는 주 링크 인터페이스(136)에 의하여 주 에러 로직(143)에 제공된 데이터는 소위 데이터 미스매치(data mismatch)가 발생하였다는 사실에 기인하여 부정확할 수 있다. 데이터 미스매치는 예컨대 사일런트 데이터 손상(silent data corruption) 때문에 일어날 수 있다. 예를 들면, 데이터가 메모리(116/126)로부터 읽혀질 때 어떠한 점에서 주소 비트나 명령 비트가 뒤집힐 수 있는데, 그 때문에 각각의 메모리(116/126)로부터 잘못된 데이터를 읽게 된다. 잘못된 메모리 장소로부터 읽혀진 잘못된 데이터가 미러 에러 로직(146) 또는 주 에러 로직(143)에 인가된다면, 경우에 따라서 미러 에러 로직(146)과 주 에러 로직(143)에서 CRC 가 사용되든지 ECC가 사용되든지 간에 에러가 검출되지 않을 수 있다. 이는, 잘못된 메모리 장소로부터 읽혀진 데이터 내에 포함된 데이터 정보 및 중복 정보에 대한 미러 에러 로직(146) 및/또는 주 에러 로직(143)의 연산이 그러한 데이터에 대하여 정확한 결과를 가져오기 때문이다. 데이터 자체가 손상된다는 것이 문제가 아니라, 데이터가 메모리의 잘못된 장소로부터 액세스된다는 것이 문제이다.
그러한 경우에 있어서, 선택 로직(153)으로 제공된 미러 에러 로직(146) 및 주 에러 로직(143)으로부터의 데이터는, 미러 에러 로직(146)과 주 에러 로직(143)으로부터 에러가 존재한다든가 수정되었다는 등의 표시가 수신되지 않는다 하더라도, 같지 않을 것이다. 이러한 환경에서, 선택 로직(153)은 미러 에러 로직(146) 및 주 에러 로직(143) 중 적어도 하나로부터의 출력에 에러가 존재하는 상황에 마주하게 되지만, 어떠한 출력이 부정확한지를 결정할 수는 없다. 따라서, 선택 로직(153)은 CPU(103)로의 전송을 위한 CPU 링크 인터페이스(133)에 가하기 위하여 미러 에러 로직(146) 또는 주 에러 로직(143)의 출력 중 미리 정의된 하나를 선택할 수 있다. 또한, 선택 로직(153)은 데이터 자체에서 수정될 수 없었던 에러가 검출되었음을 나타내는 표지를 CPU(103)에 전송할 수 있다.
상기 시나리오 중 하나에 따라 에러가 검출되었음을 CPU(103)에 알리기 위하여, 선택 로직(153)은 선택 로직(153)의 출력을 CPU 링크 인터페이스(133)에 인가하도록 멀티플렉서(149)를 조작할 수 있다. 이러한 출력은, 예컨대 데이터 에러가 발생하였고 메모리로부터 데이터를 읽기 위한 시도가 실패하였음을 CPU(103)에 표시하는 미리 정의된 데이터 열(data sequence)일 수 있다.
또한, 선택 로직(153)은 데이터 미러링 기능을 하지 않도록 구성될 수 있다. 이러한 점에서, 선택 로직(153)은 주 에러 로직(143)으로부터의 출력을 직접 CPU 링크 인터페이스(133)에 계속해서 인가하도록 멀티플렉서(149)를 조작한다. 이러한 점에서, 주 풀리 버퍼드 DIMM(109){도 1}으로부터의 데이터는 미러 풀리 버퍼드 DIMM(106){도 1}을 통해 통과되고, 메모리 미러링은 사용되지 않는다.
도 3에서는, 본 발명의 실시예에 따라, 여기서는 선택 로직(153a)으로 표시된 선택 로직(153)의 일 실시예의 흐름도를 도시하고 있다. 대안적으로는, 도 3의 흐름도가 미러 풀리 버퍼드 컨트롤러(113)에서 구현되는 방법의 단계를 묘사하는 것으로 보여질 수 있다. 예를 들면, 주 에러 로직(143)과 미러 에러 로직(146)이 각각 CRC 검사를 사용할 때 선택 로직(153a)이 사용된다. 박스(163)에서 시작하면서, 선택 로직(153a)은 중앙처리장치(103)로 넘겨질 데이터가 주 에러 로직(143) 및 미러 에러 로직(146)으로부터 수신된 것인지를 결정한다(도 1). 만약 그렇다면, 선택 로직(153a)은 박스(166)로 나아가는데, 여기에서 주 에러 로직(143)으로부터의 데이터에 에러가 존재하는지(도 2)와 미러 에러 로직(146)으로부터의 데이터가 정확한지가 결정된다. 이는, 데이터가 정확하다고 결정되었는지 또는 그러한 데이터에서 에러가 검출되었는지에 대한 주 에러 로직(143)과 미러 에러 로직(146)으로부터의 표시를 검사함으로써 결정될 수 있다.
주 에러 로직(143)으로부터의 데이터가 에러를 경험하였고, 미러 에러 로직(146)으로부터의 데이터가 정확하다면, 선택 로직(153a)은 박스(169)로 나아가는데, 여기에서 미러 에러 로직(146)으로부터의 데이터가 선택되고 CPU 링크 인터페 이스(133)에 인가된다. 그 후, 선택 로직(153a)은 박스(163)로 되돌아간다.
반면에, 박스(166)에서 주 에러 로직(143)으로부터의 데이터가 정확하다면, 선택 로직(153a)은 박스(173)로 나아간다. 박스(173)에서, 선택 로직(153a)은 미러 에러 로직(146)으로부터의 데이터가 부정확한지와, 주 에러 로직(143)으로부터의 데이터가 정확한지를 결정한다. 그런 경우라면, 선택 로직(153a)은 박스(176)로 나아간다. 그렇지 않으면, 선택 로직(153a)은 박스(179)로 나아간다. 박스(176)에서, 주 에러 로직(143)으로부터의 데이터는 CPU 링크 인터페이스(133)에 인가되고 그 후 CPU(103)에 전송되도록 선택된다. 그 후, 선택 로직(153a)은 박스(163)로 되돌아간다. 따라서, 박스(166)부터 박스(173)까지, 선택 로직(153a)은, 데이터 출력 중 하나가 에러를 경험한 경우 CPU에 인가되는 주 및 미러 에러 로직(146 및 149)으로부터의 제1 및 제2 데이터 출력 중 에러가 없는 하나를 선택하는 것으로 이해된다.
박스(179)에서, 선택 로직(153a)은 주 에러 로직(143) 및 미러 에러 로직(146)으로부터의 출력 모두에 에러가 존재하는지를 결정한다. 만약 그렇다면, 선택 로직(153a)은 박스(183)로 나아간다. 그렇지 않으면, 선택 로직(153a)은 박스(186)로 나아간다. 박스(183)에서, 선택 로직(153a)은 CPU 링크 인터페이스(133)를 통해 CPU(103)로 데이터 에러의 표시를 전송한다. 일 실시예에 따르면, 이는 멀티플렉서(149)가 CPU(103) 상에 넘겨진 데이터 에러 표시가 전송되는 곳을 통하여 선택 로직(153a)의 출력을 선택하도록 제어함으로써 이루어질 수 있다. 이러한 점에서, 선택 로직(153a)은 주 에러 로직(143)이나 미러 에러 로직(146)으로 부터의 데이터 출력 대신에 미리 정의된 데이터 열을 CPU(103)에 전송할 수 있다. 이러한 미리 정의된 데이터 열은 데이터 에러가 발생하였음과 각각의 메모리로부터 원하는 데이터가 읽힐 수 없음을 CPU(103)에 알린다.
대안적으로, 선택 로직(153a)은 데이터 에러가 발생하였다는 표시와 함께 CPU(103)에 전송되도록 CPU 링크 인터페이스(133)에 인가되는 주 에러 로직(143)으로부터의 데이터를 선택할 수 있다. 그렇게 하기 위하여, 멀티플렉서(149)가 그에 따라 조작될 수 있다. 이러한 점에서, 선택 로직(153a)은 주 에러 로직(143) 또는 미러 에러 로직(146)으로부터의 출력 중 미리 정의된 하나를 선택할 수 있는데, 이는 둘 다 에러가 있기 때문이다. 그 후, 선택 로직(153a)은 박스(163)로 되돌아간다.
선택 로직(153)이 박스(186)에 도달하면, 선택 로직(153a)은 데이터 미스매치가 발생하였는지를 결정한다. 전술한 바와 같이, 예컨대 주 에러 로직(143)도 미러 에러 로직(146)도 에러가 검출되었다고 표시하지 않으면 이러한 상황이 존재하지만, 주 에러 로직(143)으로부터의 데이터 출력은 미러 에러 로직(146)으로부터의 데이터 출력과 같지 않다. 그런 경우라면, 선택 로직(153a)은 도시된 바와 같이 박스(183)로 나아간다. 그렇지 않으면, 선택 로직(153a)은 박스(189)로 나아간다.
박스(189)에서, 주 에러 로직(143)으로부터의 데이터는 CPU 링크 인터페이스(133)와 그 후 CPU(103)에 전송되도록 멀티플렉서(149)의 조작에 의하여 선택된다. 이러한 경우, 주 에러 로직(143) 및 미러 에러 로직(146)으로부터의 데이터는 모두 정확하고, 둘 중 디폴트 하나가 선택된다. 실시예에 따르면, 디폴트는 주 에러 로직(143)으로부터의 데이터이다. 그 후, 선택 로직(153a)은 박스(163)로 되돌아간다.
도 4에서는, 본 발명의 실시예에 따라, 여기서는 선택 로직(153b)으로 표시된 선택 로직(153)의 다른 실시예의 흐름도를 도시하고 있다. 선택 로직(153b)은 선택 로직이 전술한 에러 수정 코드(ECC)를 구현하는 경우에 있어서의 선택 로직(153)의 구성을 반영한다. 대안적으로, 도 4의 흐름도는 미러 풀리 버퍼드 컨트롤러(113)에서 구현되는 방법의 단계를 묘사하는 것으로 보여질 수 있다.
박스(203)에서 시작하면서, 선택 로직(153b)은 데이터가 주 에러 로직(143) 및 미러 에러 로직(146)으로부터 수신되었는지를 결정한다. 만약 그렇다면, 선택 로직(153b)은 박스(206)로 나아간다. 박스(206)에서, 선택 로직(153b)은 주 에러 로직으로부터의 데이터에서 에러가 검출 및 수정되었는지와, 미러 에러 로직(146)으로부터의 데이터가 수정되었는지를 결정한다. 이러한 점에서, 주 에러 로직(143)은 에러 수정 코드(ECC)의 구현으로 데이터가 수정되었다는 표시와 함께 데이터를 선택 로직(153)에 제공할 것이다.
그런 경우라면, 선택 로직(153b)은 박스(209)로 나아간다. 그렇지 않으면, 선택 로직(153b)은 박스(215)로 나아간다. 박스(209)에서, 미러 풀리 버퍼드 DIMM(106)으로부터 나온 미러 에러 로직(146)으로부터의 데이터가, CPU(103)로의 전송을 위한 CPU 링크 인터페이스(133)에 인가되기 위하여 선택된다. 이러한 점에서, 선택 로직(153)은 도시된 바와 같이 CPU 링크 인터페이스(133)에 그러한 것을 가하기 위하여 미러 에러 로직(146)의 출력을 선택하도록 멀티플렉서(149)로의 컨트롤 입력을 가한다. 그 후, 선택 로직(153b)은 박스(203)로 되돌아간다.
박스(213)에서, 선택 로직(153b)은 미러 에러 로직(146)으로부터의 데이터가 검출 및 수정되었는지와, 주 에러 로직(143)으로부터의 데이터가 에러 요구 수정(error requiring correction)을 경험하지 않았는지를 결정한다. 그러한 경우에 있어서, 주 에러 로직(143)으로부터의 데이터는 에러 수정 코드에 의하여 수행되는 검사에 따라 정확하여야 한다. 그런 경우라면, 선택 로직(153b)은 박스(216)로 나아간다. 그렇지 않으면, 선택 로직(153b)은 박스(219)로 나아간다. 박스(216)에서, 주 풀리 버퍼드 DIMM(109)으로부터 얻어진 주 에러 로직(143)으로부터의 데이터는 멀티플렉서(149)를 적절히 조작함으로써 CPU(103)로의 전송을 위하여 CPU 링크 인터페이스(133)에 인가되기 위해 선택된다. 그리고 나서, 선택 로직(153b)은 박스(203)로 되돌아간다.
박스(219)에서, 선택 로직(153b)은 주 풀리 버퍼드 DIMM(109)으로부터 나온 주 에러 로직(143)으로부터의 데이터와 미러 풀리 버퍼드 DIMM(106)으로부터 나온 미러 에러 로직(146)으로부터의 데이터가 모두 수정되었는지와, 주 에러 로직(143)과 미러 에러 로직(146)으로부터의 데이터가 동일한지를 결정한다. 이는, 두 장소로부터의 데이터가 수정되었고, 두 수정의 결과가 동일하다면 모두 정확하다는 것을 나타낸다. 그런 경우라면, 선택 로직(153b)은 박스(223)로 나아간다. 그렇지 않으면, 선택 로직(153b)은 박스(226)로 나아간다.
박스(223)에서, 선택 로직(153b)은 주 에러 로직(143)이나 미러 에러 로 직(146) 중 미리 정의된 하나로부터의 데이터를 선택한다. 예를 들면, 디폴트로서, 궁극적으로는 주 풀리 버퍼드 DIMM(109)으로부터 나온, 주 에러 로직(143)으로부터의 데이터가, 모든 징후가 그러한 데이터가 정확하고 주 메모리가 주요 데이터 저장 장소임을 나타내므로 선택된다. 그 후, 선택 로직(153b)은 도시된 바와 같이 박스(203)로 되돌아간다.
박스(226)에서, 선택 로직(153b)은 주 풀리 버퍼드 DIMM(109)으로부터 나온 주 에러 로직(143)으로부터의 데이터와 미러 풀리 버퍼드 DIMM(106)으로부터 나온 미러 에러 로직(146)으로부터의 데이터가 모두 수정되었다고 결정하지만, 주 에러 로직(143)과 미러 에러 로직(146)으로부터의 데이터는 같지 않다. 그러한 경우, 주 에러 로직(143)과 미러 에러 로직(146)으로부터의 데이터 출력 모두 또는 그 중 하나가 부정확할 수 있다. 그러한 경우, 선택 로직(153b)은 박스(229)로 나아간다. 그렇지 않으면, 선택 로직(153b)은 박스(233)로 나아간다.
박스(229)에서, 선택 로직(153b)은 데이터 에러가 검출되었고 전송된 데이터가 부정확할 수 있다는 표시를 CPU 링크 인터페이스(133)를 통해 CPU(103)에 전송한다. 이러한 점에서, 선택 로직(153b)은 주 에러 로직(143)이나 미러 에러 로직(146) 둘 중 하나로부터의 데이터 출력 대신에 미리 정의된 데이터 열을 CPU(103)에 전송할 수 있다. 이러한 미리 정의된 데이터 열은 데이터 에러가 발생하였고 원하는 데이터가 각각의 메모리로부터 읽혀질 수 없음을 CPU(103)에 알린다.
대안적으로는, 선택 로직(153b)이 데이터 에러가 발생하였다는 표시와 함께 CPU(103)에 전송되도록 CPU 링크 인터페이스(133)에 인가되는 주 에러 로직(143)으로부터의 데이터를 선택할 수 있다. 그렇게 하기 위하여, 멀티플렉서(149)가 그에 따라 조작될 수 있다. 이러한 점에서, 선택 로직(153b)은 주 에러 로직(143)이나 미러 에러 로직(146)으로부터의 출력 중 미리 지정된 하나를 선택할 수 있다. 그 후, 선택 로직(153b)은 도시된 바와 같이 박스(203)로 되돌아간다.
선택 로직(153b)이 박스(233)로 나아간다면, 선택 로직(153b)은 데이터 미스매치가 일어났는지를 결정한다. 전술한 바와 같이, 예컨대 주 에러 로직(143)도 미러 에러 로직(146)도 에러가 검출되었다고 표시하지 않으면 이러한 상황이 존재하지만, 주 에러 로직(143)으로부터의 데이터 출력은 미러 에러 로직(146)으로부터의 데이터 출력과 같지 않다. 그런 경우라면, 선택 로직(153b)은 도시된 바와 같이 박스(229)로 나아간다. 그렇지 않으면, 선택 로직(153b)은 박스(236)로 나아간다.
박스(236)에서, 주 풀리 버퍼드 DIMM(109)으로부터 나온 주 에러 로직(143)으로부터의 데이터는 멀티플렉서(149)의 조작에 의하여 CPU 인터페이스(133)에 인가되도록 선택된다. 이는 주 에러 로직(143)이나 미러 에러 로직(146)에 의하여 에러가 검출되지 않았고 이러한 장소 중 어느 한 곳에서도 수정이 일어나지 않았기 때문이다. 따라서, 실시예에 따르면, 주 풀리 버퍼드 DIMM(109)으로부터 나온 데이터가 미리 정의된 디폴트로서 이해될 수 있어 선택된다. 그 후, 선택 로직(153b)은 다음 데이터의 도착을 기다리기 위해 박스(203)로 되돌아간다.
실시예에 따르면, 선택 로직(153)은 하드웨어로 구현된다. 이러한 경우, 선 택 로직(153)은 다수의 기술 중 하나 또는 그 조합을 사용하는 상태 기계(state machine) 또는 회로로 구현될 수 있다. 이러한 기술에는 하나 이상의 데이터 신호의 응용에 있어서 다양한 로직 기능을 구현하기 위한 로직 게이트를 가지는 이산 로직 회로, 적절한 로직 게이트를 가지는 주문형 집적 회로(application specific integrated circuit), PGA(programmable gate array), FPGA(field programmable gate array), 또는 기타 구성요소 등이 포함될 수 있으나 이에 한정되지는 않는다. 그러한 기술들은 일반적으로 당업자에게 공지되어 있으며, 따라서 본 명세서에서 상세히 기술되지 않는다. 이와 달리 선택 로직(153)은 소프트웨어, 또는 하드웨어와 소프트웨어의 조합으로 구현될 수 있다.
도 3 및 도 4의 흐름도는 선택 로직(153) 구현의 기능성 및/또는 작용을 나타낸다. 소프트웨어로 구현된다면, 각각의 블록은 특정 로직 기능을 구현하기 위한 프로그램 명령을 포함하는 코드의 일부, 세그먼트, 또는 모듈을 나타낼 수 있다. 프로그램 명령은 컴퓨터 시스템이나 다른 시스템의 프로세서와 같이 적절한 실행 시스템에 의하여 인식될 수 있는 수치 명령을 포함하는 기계어나 프로그래밍 언어로 쓰여진 사람이 읽을 수 있는 문장을 포함하는 소스 코드의 형태로 구현될 수 있다. 기계어는 소스 코드 등으로부터 변환될 수 있다. 하드웨어로 구현된다면, 각 블록은 특정 로직 기능을 구현하기 위한 회로 또는 다수의 상호 접속된 회로를 나타낼 수 있다.
도 3 및 도 4의 흐름도가 특정 실행 순서를 나타내고 있지만, 실행 순서는 설명된 것과 다를 수 있음을 알 수 있다. 예를 들면, 둘 이상의 블록의 실행 순서 가 도시된 순서와 대비해 변동될 수 있다. 또한, 도 3 및 도 4에서 연속하여 도시되는 둘 이상의 블록이 동시에 또는 부분적으로 동시에 실행될 수 있다. 또한, 많은 카운터, 상태 변수, 경고 세마포어(warning semaphore), 또는 메시지가, 높은 효용, 어카운팅, 기능 조사, 또는 고장 수리 제공 등의 목적으로 본 명세서에서 기술된 로직 흐름에 덧붙여질 수 있다. 모든 이러한 변수들은 본 발명의 범위 내에 있음을 알 수 있다.
또한, 선택 로직(153)이 소프트웨어 또는 코드를 포함하는 경우, 예컨대 컴퓨터 시스템이나 다른 시스템의 프로세서와 같은 명령 실행 시스템에 의하여 또는 그에 연결되어 사용하기 위한 컴퓨터로 읽을 수 있는 매체(computer-readable medium)로 구현될 수 있다. 이러한 의미에서, 로직은 예컨대 컴퓨터로 읽을 수 있는 매체로부터 꺼내질 수 있고 명령 실행 시스템에 의하여 실행될 수 있는 선언과 명령을 포함하는 문장을 포함할 수 있다. 본 명세서에서, "컴퓨터로 읽을 수 있는 매체"는 명령 실행 시스템에 의하여 또는 그에 연결되어 사용하기 위한 선택 로직(153)을 포함, 저장, 또는 유지할 수 있는 모든 매체일 수 있다. 컴퓨터로 읽을 수 있는 매체는 예컨대 전자, 자기, 광학, 전자기, 적외선, 또는 반도체 매체와 같은 많은 물리적 매체 중 하나를 포함할 수 있다. 적절한 컴퓨터로 읽을 수 있는 매체의 더 구체적인 예에는 자기 테이프, 자기 플로피 디스크, 자기 하드 드라이브, 또는 콤팩트 디스크가 포함될 것이나, 이에 한정되지는 않는다. 또한, 컴퓨터로 읽을 수 있는 매체는 예컨대 정적 랜덤 액세스 메모리(SRAM) 및 동적 랜덤 액세스 메모리(DRAM), 또는 자기 랜덤 액세스 메모리(MRAM)를 포함하는 랜덤 액세스 메 모리(RAM)일 수 있다. 또한, 컴퓨터로 읽을 수 있는 매체는 읽기 전용 메모리(ROM), 프로그램 가능 읽기 전용 메모리(PROM), 소거 및 프로그램 가능 읽기 전용 메모리(EPROM), 전기적 소거 및 프로그램 가능 읽기 전용 메모리(EEPROM), 또는 기타 유형의 메모리 장치일 수 있다.
또한, 다른 실시예에 따르면, 풀리 버퍼드 컨트롤러를 가지는 미러 메모리를 사용하는 메모리 미러링 방법이 제공된다. 이 방법은, 중앙처리장치(CPU)에 의하여 미러 메모리 내 복수의 메모리에 대한 액세스를 용이하게 하기 위해 풀리 버퍼드 컨트롤러를 사용하는 단계와, 풀리 버퍼드 컨트롤러 내 주 메모리 링크 인터페이스를 주 메모리에 연결시키는 단계를 포함한다. 이 방법은 풀리 버퍼드 컨트롤러에서 주 메모리 링크 인터페이스를 통해 수신한 주 메모리로부터의 제1 데이터 출력에 제1 데이터 에러가 존재하는지를 검출하는 단계와, 풀리 버퍼드 컨트롤러에서 미러 메모리로부터의 제2 데이터 출력에 제2 데이터 에러가 존재하는지를 검출하는 단계를 더 포함한다. 또한 이 방법은 풀리 버퍼드 컨트롤러에서 CPU에 인가될, 제1 데이터 출력 또는 제2 데이터 출력 중 하나를 선택하는 단계도 포함한다.
다른 실시예에 따르면, 방법은 풀리 버퍼드 컨트롤러를 통해 주 메모리와 CPU 사이의 데이터 통신을 성립시키는 단계를 더 포함한다. 제1 및 제2 데이터 에러는 CRC 검사를 수행하거나 에러 수정 코드(ECC)를 사용함으로써 검출될 수 있다. 또한, 풀리 버퍼드 컨트롤러에서 CPU에 인가되는 제1 데이터 출력 또는 제2 데이터 출력 중 하나를 선택하는 단계는 제1 및 제2 데이터 출력 중 하나가 에러를 경험한 경우 CPU에 인가되는 제1 및 제2 데이터 출력 중 에러가 없는 하나를 선택하는 단 계를 더 포함할 수 있다.
방법은 제1 데이터 에러가 존재하는 경우 제1 데이터 에러의 수정을 시도하는 단계와, 제2 데이터 에러가 존재하는 경우 제2 데이터 에러의 수정을 시도하는 단계를 더 포함할 수 있다. 또한, 풀리 버퍼드 컨트롤러에서 CPU에 인가되는 제1 데이터 출력 또는 제2 데이터 출력 중 하나를 선택하는 단계는 제1 및 제2 데이터 출력 중 하나가 제1 및 제2 에러 로직 중 하나에 의하여 각각 수정된 경우 CPU에 인가된 제1 및 제2 데이터 출력 중 수정되지 않은 하나를 선택하는 단계를 더 포함할 수 있다.
또 다른 실시예에 따르면, 방법은 제1 데이터 에러가 존재하면 제1 데이터 에러의 수정을 시도하는 단계와, 제2 데이터 에러가 존재하면 제2 데이터 에러의 수정을 시도하는 단계를 더 포함할 수 있다. 또한, 풀리 버퍼드 컨트롤러에서 CPU에 인가되는 제1 데이터 출력 또는 제2 데이터 출력 중 하나를 선택하는 단계는, 제1 및 제2 데이터 출력이 모두 수정되었고 제1 데이터 출력이 제2 데이터 출력과 같은 경우 CPU에 인가되는 제1 및 제2 데이터 출력 중 미리 정의된 하나를 선택하는 단계를 더 포함할 수 있다.
또 다른 실시예에 따르면, 방법은 제1 데이터 에러가 존재하면 제1 데이터 에러의 수정을 시도하는 단계와, 제2 데이터 에러가 존재하면 제2 데이터 에러의 수정을 시도하는 단계를 더 포함할 수 있다. 또한 이 방법은 제1 및 제2 데이터 출력이 모두 수정되었고 제1 데이터 출력이 제2 데이터 출력과 같지 않은 경우 데이터 에러의 존재를 CPU에 알리는 단계도 포함한다. 또한, 풀리 버퍼드 컨트롤러 에서 CPU에 인가되는 제1 데이터 출력 또는 제2 데이터 출력 중 하나를 선택하는 단계는, 제1 및 제2 데이터 출력이 모두 수정되었고 제1 데이터 출력이 제2 데이터 출력과 같지 않은 경우 CPU에 인가되는 제1 및 제2 데이터 출력 중 미리 정의된 하나를 선택하는 단계를 더 포함할 수 있다.
본 발명이 특정한 실시예에 대하여 설명되었지만, 본 명세서를 읽고 이해하는 당업자에게 있어서 치환과 수정이 일어날 것임이 명백하다. 본 발명은 모든 그러한 치환 및 변경을 포함하고, 특허청구범위의 범위에 의해서만 한정된다.
본 발명에 의하면, 메모리 풀리 버퍼드 컨트롤러를 가지는 미러 메모리를 사용하여 데이터 에러를 검출 및 수정하는 메모리 미러링 시스템 및 방법이 제공된다. 메모리 미러링을 통하여 데이터의 손실을 방지할 수 있다.

Claims (10)

  1. 메모리 미러링(memory mirroring)을 위한 시스템으로서,
    메모리 풀리 버퍼드 컨트롤러(memory fully buffered controller; 113)를 가지는 미러 메모리(mirror memory; 106) - 상기 메모리 풀리 버퍼드 컨트롤러(113)는 중앙처리장치(CPU; 103)에 의한 상기 미러 메모리(106) 내 복수의 메모리(116)로의 액세스를 용이하게 하도록 구성됨;
    상기 메모리 풀리 버퍼드 컨트롤러(113) 내에 주 메모리(primary memory; 109)에 연결되도록 구성된 주 메모리 링크 인터페이스(primary memory link interface; 136)를 포함하되,
    상기 메모리 풀리 버퍼드 컨트롤러(113)는,
    상기 주 메모리(109)로부터의 제1 데이터 출력에 제1 데이터 에러가 존재하는지를 검출하도록 구성된 제1 에러 로직(error logic);
    상기 미러 메모리(106)로부터의 제2 데이터 출력에 제2 데이터 에러가 존재하는지를 검출하도록 구성된 제2 에러 로직; 및
    상기 제1 데이터 출력 또는 상기 제2 데이터 출력 중에서 상기 CPU(103)에 인가될 하나를 선택하는 선택 로직(selection logic)을 포함하는 메모리 미러링을 위한 시스템.
  2. 제1항에 있어서,
    상기 메모리 풀리 버퍼드 컨트롤러(113)를 통하여 상기 주 메모리(109)와 상기 CPU(103) 사이에 데이터 통신이 성립되는 메모리 미러링을 위한 시스템.
  3. 메모리 풀리 버퍼드 컨트롤러(113)를 가지는 미러 메모리(106)를 사용하는 메모리 미러링 방법으로서,
    중앙처리장치(103)에 의한 상기 미러 메모리(106) 내 복수의 메모리(116)로의 액세스를 용이하게 하기 위하여 상기 메모리 풀리 버퍼드 컨트롤러를 사용하는 단계;
    상기 메모리 풀리 버퍼드 컨트롤러(113)에서 주 메모리 링크 인터페이스(136)를 주 메모리(109)에 연결시키는 단계;
    상기 메모리 풀리 버퍼드 컨트롤러(113)에서 상기 주 메모리 링크 인터페이스(136)를 통하여 수신한 상기 주 메모리(109)로부터의 제1 데이터 출력에 제1 데이터 에러가 존재하는지를 검출하는 단계;
    상기 메모리 풀리 버퍼드 컨트롤러(113)에서 상기 미러 메모리(106)로부터의 제2 데이터 출력에 제2 데이터 에러가 존재하는지를 검출하는 단계; 및
    상기 메모리 풀리 버퍼드 컨트롤러(113)에서 상기 제1 데이터 출력 또는 상기 제2 데이터 출력 중에서 상기 CPU(103)에 인가될 하나를 선택하는 단계를 포함하는 메모리 미러링 방법.
  4. 제3항에 있어서,
    상기 메모리 풀리 버퍼드 컨트롤러(113)를 통하여 상기 주 메모리(109)와 상기 CPU(103) 사이에 데이터 통신을 성립시키는 단계를 더 포함하는 메모리 미러링 방법.
  5. 제3항에 있어서,
    상기 제1 및 제2 데이터 에러는 CRC 검사를 수행함으로써 검출되는 메모리 미러링 방법.
  6. 제3항에 있어서,
    상기 제1 및 제2 데이터 에러는 에러 수정 코드(ECC)를 사용하여 검출되는 메모리 미러링 방법.
  7. 제3항에 있어서,
    상기 메모리 풀리 버퍼드 컨트롤러(113)에서, 상기 제1 데이터 출력 또는 상기 제2 데이터 출력 중에서 상기 CPU(103)에 인가될 하나를 선택하는 상기 단계는, 상기 제1 및 제2 데이터 출력 중 하나가 에러를 경험한 경우 상기 제1 및 제2 데이터 출력 중에서 에러가 없는 하나를 선택하여 상기 CPU(103)에 인가하는 단계를 더 포함하는 메모리 미러링 방법.
  8. 제3항에 있어서,
    상기 제1 데이터 에러가 존재하면 상기 제1 데이터 에러의 수정을 시도하는 단계;
    상기 제2 데이터 에러가 존재하면 상기 제2 데이터 에러의 수정을 시도하는 단계를 더 포함하고,
    상기 메모리 풀리 버퍼드 컨트롤러(113)에서 상기 제1 데이터 출력 또는 상기 제2 데이터 출력 중에서 상기 CPU(103)에 인가될 하나를 선택하는 상기 단계는, 상기 제1 및 제2 데이터 출력 중 하나가 상기 제1 및 제2 에러 로직 중 하나에 의하여 각각 수정된 경우 상기 제1 및 제2 데이터 출력 중에서 수정되지 않은 하나를 선택하여 상기 CPU(103)에 인가하는 단계를 더 포함하는 메모리 미러링 방법.
  9. 제3항에 있어서,
    상기 제1 데이터 에러가 존재하면 상기 제1 데이터 에러의 수정을 시도하는 단계;
    상기 제2 데이터 에러가 존재하면 상기 제2 데이터 에러의 수정을 시도하는 단계를 더 포함하고,
    상기 메모리 풀리 버퍼드 컨트롤러(113)에서 상기 제1 데이터 출력 또는 상기 제2 데이터 출력 중에서 상기 CPU(103)에 인가될 하나를 선택하는 상기 단계는, 상기 제1 및 제2 데이터 출력이 모두 수정되었고 상기 제1 데이터 출력이 상기 제2 데이터 출력과 동일한 경우 상기 제1 및 제2 데이터 출력 중에서 미리 정의된 하나를 선택하여 상기 CPU(103)에 인가하는 단계를 더 포함하는 메모리 미러링 방법.
  10. 제3항에 있어서,
    상기 제1 데이터 에러가 존재하면 상기 제1 데이터 에러의 수정을 시도하는 단계;
    상기 제2 데이터 에러가 존재하면 상기 제2 데이터 에러의 수정을 시도하는 단계; 및
    상기 제1 및 제2 데이터 출력이 모두 수정되었고 상기 제1 데이터 출력이 상기 제2 데이터 출력과 동일하지 않은 경우, 데이터 에러의 존재를 상기 CPU(103)에 알리는 단계를 더 포함하는 메모리 미러링 방법.
KR1020060050764A 2005-06-21 2006-06-07 메모리 미러링 장치 및 방법 KR20060133892A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/158,187 US7444540B2 (en) 2005-06-21 2005-06-21 Memory mirroring apparatus and method
US11/158,187 2005-06-21

Publications (1)

Publication Number Publication Date
KR20060133892A true KR20060133892A (ko) 2006-12-27

Family

ID=37574723

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020060050764A KR20060133892A (ko) 2005-06-21 2006-06-07 메모리 미러링 장치 및 방법

Country Status (3)

Country Link
US (1) US7444540B2 (ko)
KR (1) KR20060133892A (ko)
TW (1) TWI417891B (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101149685B1 (ko) * 2010-08-05 2012-05-23 한국원자력연구원 원자력 발전소 디지털 안전계통의 실시간 진단기능을 갖춘 제어장치
US10318182B2 (en) 2017-06-20 2019-06-11 SK Hynix Inc. Semiconductor memory apparatus relating to various operation modes, and memory module and system including the same

Families Citing this family (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7404057B2 (en) * 2005-06-24 2008-07-22 Dell Products L.P. System and method for enhancing read performance of a memory storage system including fully buffered dual in-line memory modules
FR2896077B1 (fr) * 2006-01-11 2008-02-22 Bull Sa Sa Agencement de cartes a modules memoire totalement bufferises et utilisation d'une puce entre deux modules consecutifs
JP2007188428A (ja) * 2006-01-16 2007-07-26 Fuji Xerox Co Ltd 半導体ストレージ装置およびストレージシステム
US8086936B2 (en) 2007-08-31 2011-12-27 International Business Machines Corporation Performing error correction at a memory device level that is transparent to a memory channel
US8082482B2 (en) 2007-08-31 2011-12-20 International Business Machines Corporation System for performing error correction operations in a memory hub device of a memory module
US8019919B2 (en) 2007-09-05 2011-09-13 International Business Machines Corporation Method for enhancing the memory bandwidth available through a memory module
US20100269021A1 (en) * 2007-09-05 2010-10-21 Gower Kevin C Method for Performing Error Correction Operations in a Memory Hub Device of a Memory Module
US20090150721A1 (en) * 2007-12-10 2009-06-11 International Business Machines Corporation Utilizing A Potentially Unreliable Memory Module For Memory Mirroring In A Computing System
KR20090060774A (ko) * 2007-12-10 2009-06-15 한국전자통신연구원 임베디드 시스템의 펌웨어 및 데이터 미러링 장치 및 방법
US8140936B2 (en) 2008-01-24 2012-03-20 International Business Machines Corporation System for a combined error correction code and cyclic redundancy check code for a memory channel
US20090300411A1 (en) * 2008-06-03 2009-12-03 Gerald Keith Bartley Implementing Redundant Memory Access Using Multiple Controllers for Memory System
US20090300291A1 (en) * 2008-06-03 2009-12-03 Gerald Keith Bartley Implementing Cache Coherency and Reduced Latency Using Multiple Controllers for Memory System
US8291181B2 (en) * 2008-10-28 2012-10-16 Micron Technology, Inc. Temporary mirroring, logical segregation, and redundant programming or addressing for solid state drive operation
US8151138B2 (en) * 2008-10-31 2012-04-03 Dell Products L.P. Redundant memory architecture management methods and systems
JP5590028B2 (ja) * 2009-03-27 2014-09-17 富士通株式会社 情報処理装置、メモリ制御方法、及びメモリ制御装置
TWI417893B (zh) * 2009-05-06 2013-12-01 Silicon Motion Inc 資料存取裝置及資料存取方法
JP2012003644A (ja) * 2010-06-21 2012-01-05 Fujitsu Ltd メモリエラー箇所検出装置、及びメモリエラー箇所検出方法。
US20120096310A1 (en) * 2010-10-18 2012-04-19 Brocade Communications Systems, Inc. Redundancy logic
TWI557636B (zh) * 2012-11-12 2016-11-11 慧榮科技股份有限公司 儲存媒體、存取系統及方法
US9760293B2 (en) * 2013-03-07 2017-09-12 Seagate Technology Llc Mirrored data storage with improved data reliability
GB201315397D0 (en) * 2013-08-29 2013-10-16 Quixant Plc Memory controller and memory access method
US9804931B2 (en) 2014-04-25 2017-10-31 Rambus Inc. Memory mirroring utilizing single write operations
US10169126B2 (en) 2016-10-12 2019-01-01 Samsung Electronics Co., Ltd. Memory module, memory controller and systems responsive to memory chip read fail information and related methods of operation
US10725672B2 (en) 2016-10-12 2020-07-28 Samsung Electronics Co., Ltd. Memory module, memory controller and systems responsive to memory chip read fail information and related methods of operation
US10534719B2 (en) 2017-07-14 2020-01-14 Arm Limited Memory system for a data processing network
US10467159B2 (en) 2017-07-14 2019-11-05 Arm Limited Memory node controller
US10489304B2 (en) 2017-07-14 2019-11-26 Arm Limited Memory address translation
US10592424B2 (en) 2017-07-14 2020-03-17 Arm Limited Range-based memory system
US10565126B2 (en) 2017-07-14 2020-02-18 Arm Limited Method and apparatus for two-layer copy-on-write
US10613989B2 (en) 2017-07-14 2020-04-07 Arm Limited Fast address translation for virtual machines
US10613951B2 (en) * 2017-09-13 2020-04-07 International Business Machines Corporation Memory mirror invocation upon detecting a correctable error
CN107748704A (zh) * 2017-10-13 2018-03-02 郑州云海信息技术有限公司 基于fpga的内存镜像实现的方法及装置
US10884850B2 (en) * 2018-07-24 2021-01-05 Arm Limited Fault tolerant memory system
CN109117302A (zh) * 2018-07-26 2019-01-01 郑州云海信息技术有限公司 一种内存数据获取方法、***、内存管理中间件及介质
US11010234B2 (en) * 2019-02-01 2021-05-18 Winbond Electronics Corp. Memory device and error detection method thereof
EP3764233A1 (en) * 2019-07-08 2021-01-13 Continental Teves AG & Co. OHG Method of identifying errors in or manipulations of data or software stored in a device
US11960360B1 (en) * 2022-09-22 2024-04-16 Micron Technology, Inc. Redundancy-based error detection in a memory device

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4541094A (en) * 1983-03-21 1985-09-10 Sequoia Systems, Inc. Self-checking computer circuitry
JP2754722B2 (ja) * 1989-05-12 1998-05-20 日本電気株式会社 二重書データチェック装置
US5263034A (en) * 1990-10-09 1993-11-16 Bull Information Systems Inc. Error detection in the basic processing unit of a VLSI central processor
US5216672A (en) * 1992-04-24 1993-06-01 Digital Equipment Corporation Parallel diagnostic mode for testing computer memory
US5619642A (en) * 1994-12-23 1997-04-08 Emc Corporation Fault tolerant memory system which utilizes data from a shadow memory device upon the detection of erroneous data in a main memory device
US6295591B1 (en) * 1999-03-30 2001-09-25 International Business Machines Corporation Method of upgrading and/or servicing memory without interrupting the operation of the system
US6732243B2 (en) * 2001-11-08 2004-05-04 Chaparral Network Storage, Inc. Data mirroring using shared buses

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101149685B1 (ko) * 2010-08-05 2012-05-23 한국원자력연구원 원자력 발전소 디지털 안전계통의 실시간 진단기능을 갖춘 제어장치
US10318182B2 (en) 2017-06-20 2019-06-11 SK Hynix Inc. Semiconductor memory apparatus relating to various operation modes, and memory module and system including the same

Also Published As

Publication number Publication date
US7444540B2 (en) 2008-10-28
TWI417891B (zh) 2013-12-01
US20060288177A1 (en) 2006-12-21
TW200703349A (en) 2007-01-16

Similar Documents

Publication Publication Date Title
KR20060133892A (ko) 메모리 미러링 장치 및 방법
US7428689B2 (en) Data memory system and method for transferring data into a data memory
TWI635503B (zh) 半導體記憶體裝置及操作該半導體記憶體裝置的方法
KR102378466B1 (ko) 메모리 장치 및 모듈
KR102399843B1 (ko) 결함 탐지를 가진 오류 정정 하드웨어
KR950033824A (ko) 하드웨어에 의해 메모리의 ecc에러를 자동적으로 스크러빙하는 방법 및 장치
KR20150070943A (ko) 프로그래머블 컨트롤러
US20210350870A1 (en) Memory system with error detection
US9627092B2 (en) Semiconductor device performing error correction operation
JP4349532B2 (ja) メモリ制御装置、メモリ制御方法、情報処理システム、そのプログラム及び記憶媒体
US11609816B2 (en) Efficient storage of error correcting code information
US20070255999A1 (en) Memory Arrangement And Method For Error Correction
JP2009181425A (ja) メモリモジュール
US20110004817A1 (en) Crc management method performed in sata interface and data storage device using crc management method
US8291270B2 (en) Request processing device, request processing system, and access testing method
WO2012046343A1 (ja) メモリモジュール冗長化方法、記憶処理装置、及びデータ処理装置
JP2001290710A (ja) データエラー検出装置
JPS6235144B2 (ko)
JPH01282659A (ja) エラー訂正書き込み機能を有する多数決回路
JP2011048742A (ja) ミラーリング制御装置、ミラーリング制御回路、ミラーリング制御方法およびそのプログラム
JP4921216B2 (ja) メモリ制御回路、記憶システム、情報処理装置、および、メモリ制御方法
JPH05165734A (ja) 主記憶装置の固定障害診断装置
JP2022142201A (ja) 情報処理装置、情報処理システム、情報処理方法およびプログラム
JPH06214890A (ja) 計算機
JPS63271555A (ja) 記憶制御方式

Legal Events

Date Code Title Description
A201 Request for examination
E601 Decision to refuse application