*틀린 내용이 있을 경우 댓글로 알려주신다면 감사하겠습니다!
Ch 01 컴퓨터 구조 시작하기
- 컴퓨터 구조 지식의 필요성
1) 같은 코드여도 컴퓨터에 따라 실행이 안 될 가능성 존재 -> 문제 해결의 단서가 될 수 있음.
2) 성능, 용량, 비용에 따라 최적화된 프로그램 실행 환경 만들기 가능
- 컴퓨터 구조 간결하게 표현하기

- 메인보드와 시스템 버스
네 가지 핵심 부품이 정보를 주고받기 위해 하나의 모이는 지점이 필요했고, 그것이 '메인보드(main board)'입니다. 메인보드 내에서 컴퓨터 부품이 정보를 주고받을 수 있는 건 '버스'라는 일종의 통로가 내부에 존재했기 때문입니다. 다양한 종류의 버스가 있지만, 네 가지 컴퓨터 핵심 부품을 연결하는 버스를 '시스템 버스'라고 합니다.
시스템 버스에는 다음과 같은 종류가 있습니다.
- 주소 버스: 주소를 주고받는 통로
- 데이터 버스: 명령어와 데이터를 주고받는 통로
- 제어 버스: 제어 신호를 주고받는 통로

간략한 CPU 작동 예시
- CPU에서 메모리 속 명령어를 읽기 위해 제어장치에서 신호를 보냄. 그와 동시에 CPU에서 주소 버스를 통해 읽고자 하는 메모리 주소를 함께 내보냄.
- 메모리는 1에서 보낸 걸 받고, CPU가 요청한 주소에 있는 내용을 데이터 버스를 통해 CPU로 보냄.
- 프로그램 작동 과정에서 값을 저장해야 하는 경우. 저장할 데이터를 데이터 버스로, 저장할 곳 메모리 주소를 주소 버스로, 제어 버스를 통해 제어 신호를 메모리로 보냄.
- 메모리에서는 3에서 받은 걸 토대로 값을 저장.
Ch02 데이터
컴퓨터는 0과 1로 정보를 이해합니다. 이렇게 0과 1을 나타내는 가장 작은 정보 단위를 비트(bit)라고 합니다. 참고로 CPU가 한 번에 처리할 수 있는 데이터 크기를 '워드(word)'라고 합니다.
n개의 비트로 2^n가지의 정보를 표현할 수 있습니다.
참고) 8bit=1byte
1KB=1000byte
1MB=1000KB
1GB=1000MB
1TB=1000GB
- 이진법(Binary)
0과 1만으로 모든 숫자를 표현하는 방법입니다. 예시로 설명을 이어 하겠습니다.
보통 십진수를 일상에서 쓰는데, 8을 이진수로 표현하려고 합니다. 우선 네 개의 비트가 있다고 상상합니다.
(2^3의 자리) (2^2의 자리) (2^1의 자리) (2^0의 자리)
맨 오른쪽 끝에 있는 비트 값만 1이라면 십진수로 표현했을 때 2^0x1로 1의 값을 나타냅니다. 맨 오른쪽에서 두 번째 비트만 1이라면 십진수로 표현했을 때 2^1x1로 2의 값을 나타냅니다.
그러면 8을 이진수로 표현하기 위해 2^3x1+2^2x0+2^1x0+2^0x0으로 바꿀 수 있는데, 이를 이진수로 1000으로 나타낼 수 있습니다.
참고) 2진수 음수표현 방법
'-' 부호를 사용하는 것이 아닌 '2의 보수'를 활용.
2의 보수 정의 : 어떤 수를 그보다 큰 2^n에서 뺀 값
간단히 표현하면 이진수에서 0 →1, 1 →0로 바꾸고 거기에 1을 더한 값.
ex) 1011(2)
→ 0100(2) → 0101(2)
2의 보수를 두 번 하면 원래 값으로 돌아옴. 이진수만 봤을 때 음수인지 양수인지 구별하기 힘들기에 컴퓨터에서는 '플래그(flag)'란 부가 정보를 사용.
2의 보수의 한계 : 1000 → 0111 → 1000 처럼 8을 이진수로 바꾼 값의 양수와 음수가 표현이 동일해짐. n비트로 -2^n과 2^n 동시 표현 불가.
- 십육진법
이진법으로 데이터를 표현했을 때 길이가 너무 길어질 수 있기에 이를 보완하기 위해서 0~F까지를 사용하는 방법을 말합니다. (A=10, B=11, C=12, D=13, E=14, F=15)
이진수에서 십육진수로, 십육진수에서 이진수로 바꾸는 것을 예시로 표현하겠습니다.
- 이진수 → 십육진수
11010101(2)
- 비트를 뒤에서부터 네 개씩 쪼개기 → 1101 / 0101
- 비트 네 개씩 묶어서 따로 볼 것. 1101을 먼저 십진수로 표현하면 13, 다시 십육진수로 표현하면 D. 0101은 십진수로 표현했을 때 5, 십육진수로 바꿔도 5가 됨.
- 2에서 한 것을 붙이기 → D5(16)
- 십육진수 →이진수
1A2B(16)
- 십육진수를 하나씩 쪼개기 → 1 / A / 2 / B
- 1에서 나눈 것을 따로 따로 볼 것. 1은 0001, A는 십진수로 10이므로 1010, 2는 0010, B는 십진수로 11이므로 1011
- 2에서 한 것을 붙이기 → 0001101000101011
- 문자집합
컴퓨터가 인식하고 표현할 수 있는 문자의 모음을 의미합니다. 그러나 이 문자들도 0과 1로 변환해야 컴퓨터가 이해할 수 있는데 이 과정을 '문자 인코딩(character encoding)'이라 합니다. 인코딩 후 0과 1로 이루어진 결과값이 문자 코드가 됩니다. 사람이 이해할 수 있게 변환하는, 인코딩의 반대 과정을 '문자 디코딩(character decoding)'이라 합니다.
문자집합 종류로 다음과 같이 있습니다.
- 아스키코드(ASCII)
: 초창기 문자 집합 중 하나입니다. 7비트를 사용해 문자를 표현하기에, 표현할 수 있는 정보의 가짓수는 2^7(=128)개입니다.

- EUC-KR
: KS X 1001, KS X 1003이란 문자 집합 기반의 완성형 인코딩 방식입니다. 초성, 중성, 종성 모두 결합된 한글 단어에 2바이트 크기의 코드를 부여합니다. 그런데 이 방식만으로 모든 한글 조합을 표현할 수 없었고, CP949라는 확장된 버전이 나왔음에도 한글 전체를 표현하기에는 무리가 있습니다.
영어의 알파벳과 달리 한글은 하나의 음절에 초성, 중성, 종성의 조합으로 형성되어 있습니다. 한글 인코딩 방식에는 아래와 같이 있습니다.
- 완성형 인코딩 : 초성, 중성, 종성 세 조합으로 이뤄진 하나의 글자에 고유한 코드를 부여하는 인코딩 방식. 예를 들어 '안', '녕' 하나 하나에 비트열을 부여하는 것.
- 조합형 인코딩 : 각각 초성, 중성, 종성에 비트열을 할당해 그것들의 조합으로 하나의 글자 코드를 완성하는 방식. 예를 들어 'ㄱ', 'ㄴ', 'ㅏ' 하나 하나에 비트열을 부여하는 것.
- 유니코드
: 각 국가에서 본인 나라에서만 사용할 것도 아니고, 세계적으로 소통하기 위해 통일된 방식이 필요했습니다. 모든 나라 언어의 문자 집합과 인코딩 방식이 통일하기 위해 나온 문자 집합이 '유니코드'입니다. 현대 문자를 표현할 때 가장 많이 사용되는 표준 문자 집합입니다.
아스키 코드나 EUC-KR과 다르게, 글자에 부여된 값 자체를 인코딩된 값으로 하지 않고 그 값을 다양한 방법으로 인코딩하여 사용합니다. 이 방법에는 UTF-8, UTF-16, UTF-32 등으로 크게 나눌 수 있습니다.
UTF-8을 살펴보자면, 1바이트부터 4바이트까지의 인코딩 결과를 만듭니다. 결과 값이 몇 바이트가 될지는 유니코드 문자에 부여된 값의 범위에 따라 달라집니다.
'컴퓨터 구조' 카테고리의 다른 글
| Ch04 CPU의 작동 원리 (1) | 2024.08.10 |
|---|---|
| Ch03 명령어 (0) | 2024.08.02 |
| 공부 계획 (0) | 2023.08.19 |