💻 01장 컴퓨터 구조 시작하기
01-1. 컴퓨터 구조를 알아야 하는 이유
#문제해결
#성능/용량/비용
1. 컴퓨터 구조를 이해하면 문제 해결 능력이 향상된다.
→ 실행이 될 때도 있고 안 될 때도 있다면, 컴퓨터의 문제 일 수도 있다.
따라서 컴퓨터 구조를 이해하고 있으면 문제를 더 잘 해결 할 수도 있다.
2. 컴퓨터 구조를 이해하면 문법만으로는 알기 어려운 성능/용량/비용을 고려하며 개발 할 수 o
→ 서버 컴퓨터를 사야할 때 자신의 프로그램에 맞는 성능/용량/비용을 고민하며 사야됨
더 자세하게 알고 싶다면 아래 글을 참고해주세요!!
컴퓨터 구조와 운영체제를 알아야 하는 이유
컴퓨터 구조와 운영체제를 알아야 하는 이유
프로그래밍 언어의 문법만 안다고 해서 실력 있는 개발자가 되기는 어렵습니다. 컴퓨터 구조와 운영체제를 알아야 프로그래밍을 근본적으로 이해하고 다양한 문제를 쉽게 해결할 수 있습니다.
hongong.hanbit.co.kr
01-2. 컴퓨터 구조의 큰 그림
#데이터
#명령어
#메모리
#CPU
#보조기억장치
#입출력장치
#시스템버스
컴퓨터 구조에는 컴퓨터가 이해하는 정보, 컴퓨터의 네가지 핵심 부품 2가지로 크게 나뉩니다.
1. 컴퓨터가 이해하는 정보
컴퓨터는 0
과 1
로 표현된 정보만을 이해합니다.
그리고 이렇게 0과 1로 표현된 정보에는 크게 데이터 와 명령어 로 나뉩니다.
컴퓨터가 이해하는 숫자, 문자, 이미지, 동영상과 같은 정적인 정보를 데이터라고 하고,
데이터를 움직이고 컴퓨터를 실질적으로 동작시키는 정보를 명령어라고 합니다.
ex) ‘1’과 ‘2’는 데이터이고, ‘더하라. 1과 2를’은 명령어 입니다.
‘안녕하세요’는 데이터이고, ‘화면에 출력하라. 안녕하세요를’은 명령어 입니다.
즉 명령어는 컴퓨터를 작동시키는 정보이고, 데이터는 명령어를 위해 존재하는 일종의 재료입니다.
TIP) “컴퓨터를 한 마디로 정의 해보세요” 라고 묻는 다면
“컴퓨터는 명령어를 처리하는 기계입니다” 라고 답할 수 있습니다.
2. 컴퓨터의 4가지 핵심 부품
- 중앙처리 장치(CPU)
- 주기억장치(메모리)
→ RAM과 ROM으로 나누는데 보통 RAM으로 지칭 - 보조기억장치
- 입출력장치
컴퓨터 안에 이러한 네가지 부품이 구성되어 있습니다.
각각의 부품에 대해서 자세히 알아보도록 하겠습니다!!
메모리
- 프로그램이 실행되기 위해서는 반드시 메모리에 저장되어 있어야 합니다.
- 메모리는 현재 실행되는 프로그램의 명령어와 데이터를 저장합니다.
- 메모리에 저장된 값의 위치는 주소로 알 수 있습니다.
CPU
CPU는 메모리에 저장된 값을 읽어 들이고, 해석하고, 실행하는 장치입니다.
CPU 내부에는 ALU, 레지스터, 제어장치가 있습니다.
- 산술논리연산장치(ALU) : 계산하는 장치
- 레지스터 : 프로그램을 실행하는데 필요한 값들을 임시 저장
- 제어장치 : 제어신호를 보내 명령어를 해석하는 장치
보조기억장치
전원이 꺼져도 저장된 내용을 기억할 수 있는 장치
ex) 하드 디스크 드라이브, SSD, USB 메모리, DVD, CD-ROM 등
즉, 메모리는 현재 ‘실행되는’ 프로그램을 저장한다면,
보조기억장치는 ‘보관할’ 프로그램을 저장한다고 생각하면 됩니다.
입출력장치
컴퓨터 외부에 연결되어 컴퓨터 내부와 정보를 교환할 수 있는 장치
ex) 마이크, 스피커, 프린터, 마우스, 키보드 등
메인보드
지금까지 설명한 컴퓨터의 핵심 부품들은 모두 메인보드라는 판에 연결됩니다.
+ 마더보드(mother board)라고도 부릅니다.
시스템 버스
컴퓨터 네 가지 핵심 부품(CPU, 메모리, 보조기억장치, 입출력장치)을 연결하는 가장 주요한 버스입니다.
1. 주소 버스 : 주소를 주고 받는 통로
2. 데이터 버스 : 명령어와 데이터를 주고 받는 통로
3. 제어 버스 : 제어 신호를 주고받는 통로
🧬 02장 데이터
02-1. 0과 1로 숫자를 표현하는 방법
#비트
#바이트
#이진법
2의 보수
#삼육진법
정보단위
컴퓨터는 0과 1로 모든 정보를 표현하고, 0과 1로 표현된 정보만을 이해할 수 있는데,
여기서 0과 1을 나타내는 가장 작은 정보 단위를 비트라고 합니다.
비트는 전구에 빗대어 생각해 보면 이해하기 쉽습니다. 전구 한 개로 (꺼짐) 혹은 (켜짐), 두 가지 상태를 표현할 수 있듯, 1비트는 0 또는 1, 두가지 정보를 표현 할 수 있습니다.

바이트(byte)는 여덟 개의 비트를 묶은 단위로, 비트보다 한 단계 큰 단위입니다.
단위 바이트 | (Bytes) |
1 바이트 (1B) | 8 비트 (8 bits) |
1 킬로바이트 (1KB) | 1,000 바이트 (1,000B) |
1 메가바이트 (1MB) | 1,000 킬로바이트 (1,000KB) |
1 기가바이트 (1GB) | 1,000 메가바이트 (1,000MB) |
1 테라바이트 (1TB) | 1,000 기가바이트 (1,000GB) |
info) 워드란?
워드란 CPU가 한 번에 처리할 수 있는 데이터 크기를 의미합니다. 만약 CPU가 한 번에 16비트를 처리 할 수 있다면 1워드는 16비트가 되고, 한 번에 32 비트를 처리할 수 있다면 1워드 32비트가 되는 것이죠.
이진법
이제 본격적으로 0과 1만으로 숫자를 표시하는 방법을 알아보겠습니다.
수학에서 0과 1만으로 모든 숫자를 표현하는 방법을 이진법이라고 합니다.
우리가 보통 숫자를 셀 때 9를 넘어가는 시점에서 자리 올림을 하죠?
9 다음이 10, 19 다음이 20이 인것을 신집법이라고 하는데
이처럼 이진법에서는 숫자가 1을 넘어가는 시점에서 자리 올림을 하는 것입니다.
이진법으로 표현한 수를 이진수, 십진법으로 표현한 수를 십진수라고 합니다.
+이진수. 십진수 8을 이진수로 표현하면 1000('일영영영'으로 읽습니다)
이진수의 음수 표현
0과 1만으로 음수를 표현하는 방법 중 가장 널리 사용되는 방법은 2의 보수를 구해 이 값을 간주하는 방법입니다.
2의 보수의 사전적 의미는 ‘어떤 수를 그보다 큰 2^n에서 뺀값을 의미합니다’
쉽게 표현하자면 ‘모든 0과 1을 뒤집고, 거기에 1을 더한 값’으로 이해하면 됩니다.
1101(2)을 음수(2의 보수)로 표현하자면
1101
→ 모든 0과 1뒤집기0010
(1의 보수) → 1더하기0011
= 1101(2)을 음수로 표현한 값(2의 보수)
모든 이진수의 0과 1을 뒤집은 수를 1의 보수,
거기에 1을 더한 값을 2의 보수라고 합니다. 컴퓨터는 이 수를 음수로 간주합니다.
+이 수가 양수인지 음수인지를 구분하기 위해 플래그(flag)를 사용합니다.
십육진법
이진법을 사용하다보면 0과 1만으로 모든 숫자를 표현하다 보니 숫자의 길이가 너무 길어진다는 단점이 있는데요. 그래서 데이터를 표현할 때 이진법 이외에 십육진법도 자주 사용합니다.
십육진법은 수가 15를 넘어가는 시점에 자리 올림을 하는 숫자 표현 방식입니다.
십육진수(16진수)를 이진수로 변환하는 방법
- 각 십육진수 자리를 4비트의 이진수로 나타냅니다.
- 16진수의 각 자리를 아래 표를 사용하여 이진수로 변환합니다.
십진수 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
십육진수 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | 10 | 11 |
예시: 1A3B를 16진수에서 이진수로 변환합니다.
- 1은 0001, A는 1010, 3은 0011, B는 1011로 변환됩니다.
- 따라서 1A3B는 0001 1010 0011 1011으로 이진수로 표현됩니다.
이진수를 십육진수(16진수)로 변환하는 방법
- 이진수를 4비트씩 끊어 읽습니다.
- 각각의 4비트 이진수를 위의 표를 사용하여 십육진수로 변환합니다.
예시: 11011001을 이진수에서 16진수로 변환합니다.
- 1101은 D, 1001은 9로 변환됩니다.
- 따라서 11011001은 D9로 십육진수로 표현됩니다.
진법표
10진수 | 2진수 | 8진수 | 16진수 |
0 | 0000 | 0 | 0 |
1 | 0001 | 1 | 1 |
2 | 0010 | 2 | 2 |
3 | 0011 | 3 | 3 |
4 | 0100 | 4 | 4 |
5 | 0101 | 5 | 5 |
6 | 0110 | 6 | 6 |
7 | 0111 | 7 | 7 |
8 | 1000 | 10 | 8 |
9 | 1001 | 11 | 9 |
10 | 1010 | 12 | A |
11 | 1011 | 13 | B |
12 | 1100 | 14 | C |
13 | 1101 | 15 | D |
14 | 1110 | 16 | E |
15 | 1111 | 17 | F |
16 | 10000 | 20 | 10 |
17 | 10001 | 21 | 11 |
① 10진법 : 0~9까지 10개의 숫자를 이용하여 한 자리수를 표현
② 2진법 : 0과 1이라는 2개의 숫자를 이용하여 한 자리수를 표현
③ 8진법 : 0~7까지 8개의 숫자를 이용하여 한 자리수를 표현
④ 16진법 : 0~15까지 16개의 숫자를 이용하여 한 자리수를 표현
02-2. 0과 1로 문자를 표현하는 방법
#문자 집합
#아스키코드
#EUC-KR
유니코드
문자 집합과 인코딩
문자 집합(Character Set)
: 컴퓨터가 인식하고 표현할 수 있는 문자들의 모음을 의미합니다. 일반적으로 문자 집합은 알파벳, 숫자, 구두점 및 다양한 특수 기호 등을 포함합니다.
문자 인코딩(Encoding)
: 문자 집합에 속한 문자를 컴퓨터가 이해할 수 있는 0과 1로 변환하는 과정입니다. 이진화된 형태로 표현된 문자 코드를 생성합니다.
문자 디코딩(Decoding)
: 인코딩의 반대 과정으로, 0과 1로 이루어진 문자 코드를 사람이 이해할 수 있는 문자로 변환하는 과정입니다.
아스키 코드
아스키 코드(ASCII): 미국 표준 협회에서 만든 정보 교환용 코드로, 7비트로 구성되어 128(2^7)개의 문자를 표현합니다.
주로 영문 알파벳, 숫자, 특수 문자 등을 나타냅니다.
확장 2진화 10진 코드(EBCDIC): 주로 대형 컴퓨터에서 사용되며, 8비트로 구성되어 256(2^8)개의 문자를 표현합니다.

info) 문자 인코딩에서 ‘글자에 부여된 고유한 값’을 코드 포인트라고 합니다.
EUC-KR
EUC-KR: 국제 표준화 기구(ISO)에서 개발한 문자 코드로, 16비트로 구성되어 65,536(2^16)개의 문자를 나타냅니다. 한글을 포함한 다양한 문자를 표현하며, 완성형과 조합형 두 가지 형태로 나뉩니다.
- 완성형 인코딩: 한글 문자를 완전한 형태로 표현하는 방식.
- 조합형 인코딩: 한글 문자를 초성, 중성, 종성으로 나누어 표현하는 방식.
유니코드와 UTF-8
유니코드(Unicode): 전 세계의 모든 문자를 표현하기 위한 국제 표준 문자 코드입니다. UTF-8, UTF-16, UTF-32 등 다양한 인코딩 형식을 사용하여 문자를 나타냅니다.
UTF-8: 가변 길이 문자 인코딩 방식 중 하나로, 유니코드 문자를 8비트로 표현합니다. ASCII 문자는 1바이트, 한글이나 특수 문자 등은 2바이트 이상으로 표현됩니다. UTF-8은 인터넷에서 표준으로 사용되고 있습니다.
📇 03장 명령어
03-1. 소스 코드와 명령어
#고급언어
#저급언어
#기계어
#어셈블리어
#컴파일 언어
#인터프리터 언어
고급언어와 저급언어
고급언어 <———> 저급언어
고급언어는 사람을 위한 언어, 저급언어는 컴퓨터가 직접 이해하고 실행 할 수 있는 언어입니다.
저급언어에는 기계어와 어셈블리어로 나뉩니다.
우선 기계어는 0과 1의 명령어 비트로 이루어진 언어입니다.
0과 1로 이루어진 기계어를 읽기 편한 형태로 번역한 언어가 어셈블리어입니다.
+임베디드 개발자, 게임 개발자, 정보 보안 분야 등의 개발자는 어셈블리어를 많이 사용합니다.
어셈블리어를 읽으면 컴퓨터가 프로그램을 어떤 과정으로 실행하는지, 즉 프로그램이 어떤 절차로 작동하는지를 가장 근본적인 단계에서부터 하나하나 추적하고 관찰 할 수 있기 때문입니다.
컴파일 언어와 인터프리터 언어
- 컴파일 언어 : 컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급
- 인터프리터 언어 : 인터프리터에 의해 소스 코드를 한 줄씩 저급 언어로 변환하여 실행하는 고급 언어

목적 파일 (Object File)
목적 파일은 소스 코드가 컴파일되어 생성된 중간 파일입니다. 컴파일러는 소스 코드를 목적 파일로 번역하며, 목적 파일은 기계어 코드가 아닌 중간 단계의 이진 형식인 어셈블리 코드나 오브젝트 코드를 포함합니다. 목적 파일은 여러 소스 파일을 컴파일한 결과로서, 라이브러리에 속한 여러 모듈들이 모여 있을 수 있습니다.
목적 파일은 주로 다음과 같은 기능을 수행합니다
- 실행 코드 생성: 목적 파일에는 프로그램의 실행 코드 일부가 들어 있을 수 있습니다. 하지만, 완전한 실행 코드는 아니며, 아직 링킹되지 않았습니다.
- 심볼 테이블 포함: 목적 파일은 사용된 심볼들과 그에 대한 정보를 포함합니다. 이 심볼 테이블은 나중에 링커(Linker)에 의해 사용되어 여러 목적 파일을 하나로 결합합니다.
실행 파일 (Executable File)
실행 파일은 목적 파일이나 라이브러리 등을 링킹(Linking)하여 최종적으로 생성된 실행 가능한 파일입니다. 이 파일은 컴퓨터에서 직접 실행되며, 사용자가 프로그램을 실행할 때 메모리에 로드되고 실행됩니다.
실행 파일은 주로 다음과 같은 특징을 가지고 있습니다.
- 완전한 실행 코드: 링킹을 통해 목적 파일이나 라이브러리 등이 결합되어 실행 코드가 완성됩니다.
- 실행에 필요한 데이터 및 리소스: 실행 파일은 프로그램이 실행되기 위해 필요한 데이터, 상수, 리소스 등을 포함합니다.
- 시작 지점: 실행 파일은 프로그램이 실행될 때 시작되는 지점을 가리키는 진입점(entry point)을 가지고 있습니다.
요약하면, 목적 파일은 중간 단계의 이진 형식으로, 실행 파일은 최종적으로 실행될 수 있는 형태로 링킹된 파일입니다.
03-2. 명령어의 구조
#명령어
#연산코드
#오퍼랜드
#주소 지정 방식
연산 코드와 오퍼랜드
명령어는 연산 코드와 오퍼랜드로 구성되어 있습니다.
즉, ‘명령어가 수행할 연산’을 연산코드라 하고,
‘연산에 사용할 데이터’ 또는 ‘연산에 사용할 데이터가 저장된 위치’를 오퍼랜드라고 합니다.
오퍼랜드(= 피연산자)
: 연산에 사용할 데이터 또는 연산에 사용할 데이터가 저장된 위치를 의미합니다.
연산코드(= 연산자)
: 명령어가 수행할 연산을 의미합니다.
- 데이터 전송(Data Transfer):
- MOV (Move): 두 오퍼랜드 간의 데이터를 복사합니다.
- LOAD: 메모리에서 데이터를 레지스터로 이동시킵니다.
- STORE: 레지스터의 데이터를 메모리에 저장합니다.
- 산술/논리 연산(Arithmetic/Logical Operations):
- ADD (Addition): 연산자 간의 합을 계산합니다.
- SUB (Subtraction): 연산자 간의 차를 계산합니다.
- AND, OR, XOR (Bitwise Logical Operations): 비트 단위로 AND, OR, XOR 연산을 수행합니다.
- 제어 흐름 변경(Control Flow Alteration):
- JUMP (Unconditional Jump): 주어진 주소로 무조건 이동합니다.
- BRANCH (Conditional Branch): 조건에 따라 분기합니다.
- CALL (Subroutine Call): 서브루틴을 호출하고 되돌아갈 주소를 스택에 저장합니다.
- RETURN: 서브루틴 호출에서 돌아옵니다.
- 입출력 제어(Input/Output Control):
- IN (Input): 외부 장치에서 데이터를 읽어옵니다.
- OUT (Output): 데이터를 외부 장치로 전송합니다.
- HLT (Halt): 프로세서를 멈춥니다.
주소 지정방식
: 연산에 사용할 데이터 위치를 찾는 방법입니다.
- 즉시 주소 지정 방식 : 연산에 사용할 데이터
- 직접 주소 지정 방식 : 유효 주소(메모리 주소)
- 간접 주소 지정 방식 : 유효 주소의 주소
- 레지스터 주소 지정 방식 : 유효 주소 (레지스터 이름)
- 레지스터 간접 주소 지정 방식 : 유효 주소를 저장한 레지스터
'혼공학습단 > 컴퓨터 구조 with 운영체제' 카테고리의 다른 글
[컴퓨터 구조] Chapter05 : CPU 성능 향상 기법 (0) | 2024.01.10 |
---|---|
[컴퓨터 구조] 혼공학습단 11기_2주차 (2) | 2024.01.10 |
[컴퓨터 구조] Chapter04 : CPU의 작동 원리 (0) | 2023.12.24 |
스택과 큐 개념 정리하기 (0) | 2023.12.21 |
[컴퓨터 구조] 혼공학습단 11기_1주차 (0) | 2023.12.21 |