비트의 데이터를 전송할 때, 컴퓨터에서 비트 전송의 에러를 확인해볼 필요가 있다. 항상 비트가 잘 갔는지는 확실하지 않기 때문이다!(그렇다고 하자.)
그렇다면 우리는 어떠한 방식으로 비트의 전송이 정확히 이루어졌는지 판단할 수 있을까??
여기서는 Parity bit를 사용한다. 컴퓨터는 이진수로 이루어져있기 때문에, 데이터 또한 이진수로 주고 받는다. 이 때, Parity bit는 전송되는 1의 개수가 홀수 혹은 짝수가 되도록 만들어주는 비트이다. 만약 우리가 1의 개수를 짝수로 만들고 싶다면 even parity bit를 홀수 개로 만들어주고 싶다면 odd parity bit가 되겠다.
만약, 우리가 odd Parity bit로 설정했고, 1101 이라는 데이터를 전송한다고 한다면 1의 개수가 3개 즉 홀수 개이므로 Parity bit는 0이 되게하여 전체 비트의 1의 개수가 홀수를 유지하도록 한다.
이러한 parity bit가 어떻게 만들어지고 작동하는지 알아보자.
이 그림으로 작동 원리를 설명해보겠다.
입력으로 x = 1, y = 0, z = 1이 주어졌다고 해보자.
1번 xor gate를 보면 첫번째 값으로 z의 값인 1이 들어왔고, 두번째 값으로 y=0이 들어왔다. 따라서 1번 gate의 출력값은 1이 된다.
2번 not xor gate를 보면 첫 번째 값으로 1번 xor gate의 출력값인 1이 들어왔고, 두 번째 값으로 x의 값인 1이 들어왔다. 따라서 2번 gate의 출력값은 0의 not을 취한 1이 된다.
딱 여기서 2번 게이트의 값이 바로 Parity bit인 것이다. 우리는 odd parity bit를 가정하였고, 입력은 x=1, y=0, z=1이었으니, odd parity bit의 값은 1의 개수가 홀수가 되게 하기 위해서 1을 나타내게 된 것이다.
우리는 이 과정에서 x, y, z가 문제 없이 전송되는 상황이라고 생각해보자.
3번 xor gate를 보면 첫 번째 값으로 z=1이 들어왔고, 두 번째 값으로 y=0이 들어왔으므로 출력값은 1이다.
4번 xor gate를 보면 첫 번째 값으로 x=1이 들어왔고, 두 번째 값으로 2번 gate의 출력값인 1이 되었으므로 출력값은 0이다.
마지막 5번 not xor gate를 보면 첫 번째 값으로 3번 게이트의 출력값인 1이, 두 번째 값으로 4번 게이트의 출력값인 0이 들어왔으므로 5번 게이트의 출력은 1의 not을 취한 0이 된다.
정상적으로 출력된 경우 Error Indication의 값이 0이므로 문제 없이 비트가 잘 전송 되었음을 의미하게 된다.
만약 그림에서 분홍색 박스로 칠한 부분에서 어떠한 이유로 비트의 값이 바뀌게 된다면 Error Indication이 1을 가리키게 되므로 수신자는 비트가 잘못 전송되었음을 확인할 수 있다.
하지만 이 Parity bit를 사용한 것은 단순히 오류가 났음만을 찾을 수 있고, 어디서 오류가 났는지를 찾을 수 없다. 따라서 이러한 경우에는 송신자에게 다시 데이터를 요청하는 것과 같은 경우에 쓸 수 있다. 그래서 입출력 장치(모니터와 키보드) 간의 데이터 송수신 같은 경우에 이러한 방법이 쓰이고, 메모리와 cpu 사이에는 error correction 을 사용한다.
또한 조금 생각해보면 알 수 있는 것이 있는데, Parity bit는 2개의 비트가 잘못 전달되었을 때, 일반화 시켜서 짝수 개의 비트가 오류가 났을 때는 탐지하지 못한다. 하지만 하나의 비트가 잘못 전송될 확률은 e-20이라고 한다. 즉 2개의 비트가 한번에 잘못 전달될 확률은 e-40이므로 0에 매우 근사하기 때문에 고려하지 않는다.
단점도 있지만, 이 Parity bit는 데이터의 입력 크기, 즉 n의 size에 상관없이 하나의 비트 만으로 오류를 탐지할 수 있다는 강력한 장점이 있다.
'CS > Computer Architecture' 카테고리의 다른 글
[컴퓨터구조] 4-3. Arithmetic μoperations (0) | 2023.09.16 |
---|---|
[컴퓨터구조] 4-2. Bus and Memory Transfer (0) | 2023.09.14 |
[컴퓨터구조] 4-1. Register Transfer (0) | 2023.09.14 |
[컴퓨터구조] 3-2. Floating-Point Representation (0) | 2023.09.13 |
[컴퓨터구조] 3-1. Complements (0) | 2023.09.13 |