본문 바로가기
컴퓨터 구조

Ch01~02 컴퓨터 구조 시작하기-데이터

by plum06 2024. 8. 2.

*틀린 내용이 있을 경우 댓글로 알려주신다면 감사하겠습니다!

 

 

Ch 01 컴퓨터 구조 시작하기

  • 컴퓨터 구조 지식의 필요성

1) 같은 코드여도 컴퓨터에 따라 실행이 안 될 가능성 존재 -> 문제 해결의 단서가 될 수 있음.

2) 성능, 용량, 비용에 따라 최적화된 프로그램 실행 환경 만들기 가능

  • 컴퓨터 구조 간결하게 표현하기

컴퓨터 구조 마인드맵으로 간단하게 표현(자세한 내용은 뒤에서 공부)

  • 메인보드와 시스템 버스

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

시스템 버스에는 다음과 같은 종류가 있습니다.

  • 주소 버스: 주소를 주고받는 통로
  • 데이터 버스: 명령어와 데이터를 주고받는 통로
  • 제어 버스: 제어 신호를 주고받는 통로

교재 내용 참고해 만듦

 

간략한 CPU 작동 예시

  1. CPU에서 메모리 속 명령어를 읽기 위해 제어장치에서 신호를 보냄. 그와 동시에 CPU에서 주소 버스를 통해 읽고자 하는 메모리 주소를 함께 내보냄.
  2. 메모리는 1에서 보낸 걸 받고, CPU가 요청한 주소에 있는 내용을 데이터 버스를 통해 CPU로 보냄.
  3. 프로그램 작동 과정에서 값을 저장해야 하는 경우. 저장할 데이터를 데이터 버스로, 저장할 곳 메모리 주소를 주소 버스로, 제어 버스를 통해 제어 신호를 메모리로 보냄.
  4. 메모리에서는 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)  

  1. 비트를 뒤에서부터 네 개씩 쪼개기 → 1101 / 0101
  2. 비트 네 개씩 묶어서 따로 볼 것. 1101을 먼저 십진수로 표현하면 13, 다시 십육진수로 표현하면 D. 0101은 십진수로 표현했을 때 5, 십육진수로 바꿔도 5가 됨.
  3. 2에서 한 것을 붙이기 → D5(16)
  • 십육진수 →이진수

1A2B(16)

  1. 십육진수를 하나씩 쪼개기 → 1 / A / 2 / B
  2. 1에서 나눈 것을 따로 따로 볼 것. 1은 0001, A는 십진수로 10이므로 1010, 2는 0010, B는 십진수로 11이므로 1011
  3. 2에서 한 것을 붙이기 → 0001101000101011
  • 문자집합

컴퓨터가 인식하고 표현할 수 있는 문자의 모음을 의미합니다. 그러나 이 문자들도 0과 1로 변환해야 컴퓨터가 이해할 수 있는데 이 과정을 '문자 인코딩(character encoding)'이라 합니다. 인코딩 후 0과 1로 이루어진 결과값이 문자 코드가 됩니다. 사람이 이해할 수 있게 변환하는, 인코딩의 반대 과정을 '문자 디코딩(character decoding)'이라 합니다.

문자집합 종류로 다음과 같이 있습니다.

  • 아스키코드(ASCII)

: 초창기 문자 집합 중 하나입니다. 7비트를 사용해 문자를 표현하기에, 표현할 수 있는 정보의 가짓수는 2^7(=128)개입니다.

출처: https://www.geeksforgeeks.org/ascii-table/

  • EUC-KR

: KS X 1001, KS X 1003이란 문자 집합 기반의 완성형 인코딩 방식입니다. 초성, 중성, 종성 모두 결합된 한글 단어에 2바이트 크기의 코드를 부여합니다. 그런데 이 방식만으로 모든 한글 조합을 표현할 수 없었고, CP949라는 확장된 버전이 나왔음에도 한글 전체를 표현하기에는 무리가 있습니다.

더보기

영어의 알파벳과 달리 한글은 하나의 음절에 초성, 중성, 종성의 조합으로 형성되어 있습니다. 한글 인코딩 방식에는 아래와 같이 있습니다.

  1. 완성형 인코딩 : 초성, 중성, 종성 세 조합으로 이뤄진 하나의 글자에 고유한 코드를 부여하는 인코딩 방식. 예를 들어 '안', '녕' 하나 하나에 비트열을 부여하는 것.
  2. 조합형 인코딩 : 각각 초성, 중성, 종성에 비트열을 할당해 그것들의 조합으로 하나의 글자 코드를 완성하는 방식. 예를 들어 'ㄱ', 'ㄴ', 'ㅏ' 하나 하나에 비트열을 부여하는 것.
  • 유니코드

: 각 국가에서 본인 나라에서만 사용할 것도 아니고, 세계적으로 소통하기 위해 통일된 방식이 필요했습니다. 모든 나라 언어의 문자 집합과 인코딩 방식이 통일하기 위해 나온 문자 집합이 '유니코드'입니다. 현대 문자를 표현할 때 가장 많이 사용되는 표준 문자 집합입니다.

아스키 코드나 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