보통, 네트워크 환경에서 많이 사용됩니다. 네트워크 환경에서는 에러는 피하지 못할 요소인데요. 전송 도중에 에러가 나더라도, 그 에러를 고쳐서 올바르게 처리할 수 있도록 하는 기술이 ECC이죠.
해밍코드에 대해서 간단하게 예를 들어보죠. A에서 B로 데이터를 보내는데, 다음 세가지 데이터를 보낸다고 합시다.
10010111
11100001
01111010
이 코드들의 해밍코드는 5입니다. 즉, 서로의 비트를 XOR하면, 적어도 5이상의 1이 나온다는 것이죠.
이론적으로, [5/2] ([]는 가우스 기호) 라는 계산법에 따라서, 2 비트 이하의 에러가 나면, 이 에러는 자동적으로 고쳐질 수 있습니다.
만약, B에게 이런 데이터가 왔습니다.
10111111
이 데이터는, 앞의 3개의 데이터와 다릅니다. 즉, 중간에 에러가 난 것이죠. 하지만, 이 데이터는, 앞의 3개와 데이터와 비교를 해서, 제일 첫번째 데이터와 가장 유사합니다. (즉, 차이가 가장 적습니다.)
그러면, 이 데이터는, 첫번째 데이터이다. 라고 자동적으로 바뀌어서 정상적으로 처리를 하게됩니다.
즉, 에러가 난 비트와 첫번째 데이터와는 비트 차이가 2이하가 나기때문에, 해밍코드에 의해서 고쳐질 수가 있는 것이죠.
---------------------------------------------------------------------------
컴퓨터와 같은 디지털 장비에서는 정확성을 유지하기 위해 특별한 오류 검출(error detection) 방법을 사용합니다. 데이터를 한 장소에서 다른 장소로 전송할 때는 항상 오류가 발생할 수 있죠.
전송된 데이터에 발생한 오류를 검출하기 위해서는 여분의 패리티 비트(parity bit)를 추가하여 데이터와 함께 전송합니다.
제가 가지고 있는 책에는 그 시스템에 대한 사진도 첨부되어있는데 올릴 수가 없군요..
오류검출의 한 예를 들어보죠..
패리티 비트 발생기에 3개의 병렬 데이터(A, B, C)를 입력하면 패리티 비트가 발생되며 데이터 비트와 발생된 패리티 비트를 함께 전송합니다. 전송과정에서 데이터인 오류가 발생하면 수신측의 오류 검출기는 경보신호를 발생하죠.
Inputs Output
Parallel Data Parity Bit
C B A p
0 0 0 0
0 0 1 1
0 1 0 1
0 1 1 0
1 0 0 1
1 0 1 0
1 1 0 0
1 1 1 1
위 표는 오류 검출 시스템에서 패리티 비트 발생기의 동작상태를 나타내는 진리표입니다.
전송하려는 입력 데이터는 각 행의 A, B, C로 표시되어 있고, 1의 개수가 짝수 개(0, 2, 4)가 되도록 짝수 패리티를 발생시킨 결과입니다. 2행은 1의 개수가 1개이므로 패리티 비트는 1이 되고, 따라서 2개의 1을 갖게 됩니다.
입력을 3개 받는 XOR 게이트로 구성된 오류 검출기는 수신된 데이터에 오류가 발생하여 데이터 비트에 포함된 1의 개수가 홀수 개가 되면, XOR 게이트의 출력이 1(HIGH)이 됩니다.
1이 출력되면 경고등이 켜지거나 하는 방식으로 알려주죠.
패리티 비트를 이용하면 전송된 데이터에 발생한 오류를 확인할 수 있을 뿐이며, 오류를 정정하는 기능은 갖지 못합니다. 전송과정에 발생한 오류를 정정하기 위해서는 해밍 코드(Hamming code)와 같은 특수한 코드들을 사용하여야 하며, 이러한 코드들은 여러 개의 패리티 비트들을 데이터와 함께 전송합니다.
첫댓글 요즘 NAND Flash 제어해보는데... 요놈이 걸림돌이네요... 그래도 보고 또 보니 조금씩 적응(?)이 되네요^^