이 블로그에서는 교재 '최신 컴퓨터 구조(임석구 홍성규 지음)을 참고합니다.
컴퓨터 구조에서 컴퓨터가 데이터를 표현하고 처리하고 오류를 검출하는 방식을 설명한 블로그입니다.
1. 진법과 진법 변환
2. 정수 표현
3. 실수 표현
4. 디지털 코드
5. 에러 검출 코드
1. 진법과 진법 변환
단위
1nibble - 4bit
1byte - 8bit
영어 1문자 - 1byte
한글 1문자 - 2byte
1 워드 - CPU에서 취급하는 명령어나 데이터의 길이에 해당하는 비트 수 (8의 배수 비트)
(MSB - 최상위 비트, LSB - 최하위 비트)
진법
10 진법 - 우리가 아는 수
2진법 - 2의 n승 단위 -> 0, 1
8진법 - 8의 n승 단위 -> 0~8
16진법 - 16의 n승 단위 -> 0~9, A~F
-> 어셈블리어에서는 16진수를 많이 사용, 더 많은 자릿수를 더 짧게 표현 가능
예시
2진법 : 101101.101 -> 1x2의5승 + ... + 1x2의-3승
8진법 : 364.35 -> 3x8의2승 + ... + 5x8의-2승
16진법 : A3.D2 -> A(10)x16의1승 + ... + 2x16의-2승
- 8진수로 변환시 8로 나누고 곱한다.
- 16진수로 변환시 16으로 나누고 곱한다.
- 결과 배치 순서는 2진법과 동일
2. 정수 표현
양-음 표현
양수 : 최상위 비트가 0
음수 : 최상위 비트가 1
1의 보수
0->1, 1->0으로 변환
2의 보수
1의 보수 + 1
예시
0000 0011 (2진수)
1111 1100 (1의보수)
1111 1101 (2의 보수)
보수의 특정
1. r진수에는 r의 보수와 r-1의 보수가 있다.
- 2진수에는 2의 보수와 1의 보수가 있다.
- 10진수에는 10의 보수와 9의 보수가 있다.
예시
10진수 : 567
10진수의 9의 보수 : 999-567 = 432
10진수의 10의 보수 : 433 + 1 = 433
2. 양수를 보수로 바꾸면 음수, 음수를 보수로 바꾸면 양수이다.
3. 특정 2진수와 그 수의 1의 보수의 합은 모든 비트가 1이 된다.
4. 특정 2진수와 그 수의 2의 보수의 합은 모든 비트가 0이 된다. (자릿수가 벗어나는 비트는 제외)
5. n비트를 가진 2의 보수는 -2의 n-1승부터 2의 n-1승 -1 범위의 10진수를 표현 가능하다.
6. 2의 보수로 표현된 수를 10진수로 변환할 때 최상위 비트가 1(음수)이라면 2의 보수를 한번 더 취한 후 10진수로 변환 후 -부호를 붙임.
ex) 1010 1100 -> 0101 0011 -> 0101 0100 -> 84 -> -84
"ex) -7을 이진법으로 : 7의 2의보수"
부호 확장
2진 정수 연산
- 덧셈
0011 0001 + 0011 1010 = 0 0110 1011
- 뺄셈 : A-B -> A+(B의 2의 보수)
0011 1010 - 0011 0001 = 0011 1010 + 1100 1111 = 1 0000 1001
" 뺄셈 개념보단 -부호가 붙은 숫자를 2의 보수로 바꾸어 연산한다. "
-> 오버플로 발생시 부호확정으로 해결
10진 정수 표현
3. 실수 표현
- 부호, 지수, 가수의 세 영역으로 표시
- 부호 : 0(양수), 1(음수)
- 2가지의 표현방식 : 단정도 부동소수점수(32비트, 바이어스=127), 배정도 부동소수점수(64비트, 바이어스=1023)
ex)
-0.2
-> -0.00110011...
-> -1.100110011... x2**(-3)
-> -1.100110011... x2**(-11)
4. 디지털 코드
1) BCD 코드 (8421코드, 가중치 코드)
- 10진수를 4비트 단위로 2진화한 코드
- 표기는 2진수이지만 의미는 10진수
- 1010~1111까지 6개는 사용하지 않는다.
- 연산시 결과가 BCD 코드를 벗어나는 경우 6(0110)을 더한다
ex)
9 -> 1001(BCD)
10 -> 0001 0000(BCD)
8+7
-> 1000 + 0111
-> 1111 (BCD 벗어남)
-> 1111 + 0110
-> 0001 0101
2) 3초과 코드 (비가중치 코드)
- BCD코드에 3(0011)을 더해준 값
- 자기 보수의 성질
- 0과9, 2과8 등 은 보수 관계
0 : 0000 -> 0011
9 : 1001 -> 1100
3) 그레이 코드 (비가중치 코드)
- 가중치가 없는 코드이기 때문에 연산에는 부적당하지만 아날로그 디지털 변환기나 입출력 장치 코드로 자주 쓰인다.
- 연속되는 코드들 간에 하나의 비트만 변화하여 새로운 코드가 된다.
0 : 0000
1 : 0001
2 : 0011
3 : 0010
4 : 0110
5 : 0111
6 : 0101
7 : 0100
8 : 1100
9 : 1101
10 : 1111
11 : 1110
...
15 : 1000
가중치 코드 : 각 비트의 위치에 따라 값이 정해진 코드
비가중치 코드 : 각 위치에 해당하는 값이 없는 코드이며 이러한 코드들은 데이터 변환 같은 특수한 용도로 사용
4) 74-2-1 코드
(예시1 : 2진수 -> 10진수)
0110
-> 7x0 + 4x1 + -2x1 + -1x0
-> 4-2
result : 2
(예시2 : 10진수 -> 2진수)
2
-> 2 = 4-2
result : 0110
5) 2421 코드
(예시1 : 10진수 -> 2진수)
3864
-> 3 8 6 4
-> 3 = 2 + 1 -> 1001 or 0011
-> 8 = 2 + 4 + 2 -> 1110
-> 6 = 2 + 4 -> 1100 or 0110
-> 4 = 2 + 2 or 4 -> 1010 or 0100
result : 1001 1110 1100 1010
(예시2 : 2진수 -> 10진수)
1001
-> 2+1
result : 3
6) 표준 BCD 코드
- 영,숫자, 특수문자를 표현
- 6비트 단위
- 64개의 문자 표현
7) ACII 코드
- 영,숫자, 특수문자를 표현
- 128가지의 문자 표현
5. 에러 검출 코드
1) 패리티 비트
- 데이터 전송과정에서 에러 검사를 위한 추가 비트
- 짝수 패리티 : 데이터에서 1의 개수를 짝수 개로 맞춘다.
- 홀수 패리티 : 1의 개수를 홀수 개로 맞춘다.
ex)
데이터 : A (100001, ACII)
짝수 패리티 : 0 1000001
홀수 패리티 : 1 1000001
이는 전송과정에 붙여지는 비트로써, 이 비트를 수신한 사람은 패리티의 종류에 따라 오류 검출이 가능하다.
예를 들어, 짝수 패리티인데 비트에서 1의 수가 짝수가 아니라면 오류가 발생한 것임.
2) 해밍 코드
- 에러를 정정할 수 있는 코드
- 데이터 비트와 패리티 비트와의 관계
- 짝수 패리티를 사용
해밍코드에서 오류 검출 과정
1. 해밍 코드 생성 (원본 + 패리티)
- 12비트로 구성
- 1, 2, 4, 8 비트가 패리티 비트
- 나머지 비트는 원본 데이터
(P1, P2, D, P4, D, D, D, P8, D, D, D, D)
- P1 = D(3, 5, 7, 9, 11) XOR
- P2 = D(3, 6, 7, 10, 11) XOR
- P4 = D(5, 6, 7, 12) XOR
- P8 = D(9, 10, 11, 12) XOR
2. 해밍코드에서 오류 검사 (패리티 검사 값 생성)
(위의 P1, P2, P4, P8에 1, 2, 4, 8 추가)
- P1 영역 : 1, 3, 5, 7, 9, 11 비트 -> 홀수
- P2 영역 : 2, 3, 6, 7, 10, 11 비트 -> 4단위당 가운데 2개 비트
- P4 영역 : 4, 5, 6, 7, 12 비트
- P8 영역 : 8, 9, 10, 11, 12 비트
- 검출방법 -> 영역 마다 xor 처리(같으면 0, 다르면 1)
- 모두 0이면 오류가 없다.
- 하나라도 1이면 오류 처리
3. 해밍코드 수정
ex) 패리티 검사 값 : 1010 (P1, P2, P4, P8)
-> 0101 (P8, P4, P2, P1)
-> 5
-> 5 번째 비트 반전 ( 0->1, 1->0)
3) CRC
- 높은 신뢰도를 확보하며 에러 검출을 위한 오버헤드가 적고, 랜덤 에러나 버스트 에러를 포함한 에러 검출에 매우 좋은 성능을 갖는다.
CRC 발생기 및 검출기
- 수신 측에서는 수신된 d+k 비트의 데이터를 키 값으로 나누었을 때, 나머지가 0이면 에러가 없는 것이지만 0 이 아니면 에러가 발생한 것으로 판단한다.
CRC 하드웨어 구성
보통은 하드웨어 구성보단 값마다 CRC 값을 저장해 놓고 사용한다.
'CS Knowledge > Computer Structure' 카테고리의 다른 글
Computer Structure - CPU(2) (0) | 2023.04.18 |
---|---|
Computer Structure - CPU(1) (0) | 2023.04.17 |
Computer Structure - Digital Logic Circuits(2) (0) | 2023.04.17 |
Computer Structure - Digital Logic Circuits(1) (0) | 2023.04.17 |
Computer Structure - Basic (1) | 2023.04.16 |