Chapter 01 | 컴퓨터 구조 시작하기
- 컴퓨터 구조를 알아야 하는 이유
- 컴퓨터 구조를 이해하면 문제 해결 능력이 향상됨
- 성능, 용량, 비용을 고려하며 개발할 수 있음
- 컴퓨터 구조의 큰 그림
- 우리가 알아야 하는 컴퓨터 구조 지식 : 컴퓨터가 이해하는 정보 + 컴퓨터의 네 가지 핵심 부품
- 컴퓨터가 이해하는 정보 : 0과 1로 표현된 정보
- 데이터 : 컴퓨터가 이해하는 숫자, 문자, 이미지, 동영상과 같은 정적인 정보
- 명령어 : 데이터를 움직이고 컴퓨터를 작동시키는 정보
- 컴퓨터의 네 가지 핵심 부품 시스템 버스 : 컴퓨터의 네 가지 핵심 부품들이 서로 정보를 주고받는 통로
- 중앙처리장치(CPU) : 메모리에 저장된 명령어를 읽어 들이고, 해석하고, 실행
- 주기억장치(메모리) : 현재 실행되는 프로그램의 명령어와 데이터를 저장
- 보조기억장치 : 전원이 꺼져도 보관할 프로그램을 저장
- 입출력장치 : 컴퓨터 외부에 연결되어 컴퓨터 내부와 정보를 교환
Chapter 02 | 데이터
- 0과 1로 숫자를 표현하는 방법
- 비트 : 0과 1로 표현할 수 있는 가장 작은 정보 단위
- word : CPU가 한 번에 처리할 수 있는 데이터 크기
- 이진법 : 1을 넘어가는 시점에 자리 올림을 하여 0과 1만으로 수를 표현하는 방법
- 음수 표현 시 플래그와 2의 보수(모든 0과 1을 뒤집고 + 1한 값) 사용
- 이진법으로 모든 숫자를 표현하면 숫자의 길이가 길어지므로 십육진법도 자주 사용함
- 십육진수를 이진수로 변환 : 한 글자를 4비트의 이진수로 간주
- 이진수를 십육진수로 변환 : 이진수 숫자를 네 개씩 끊고 십육진수로 변환
- 0과 1로 문자를 표현하는 방법
- 문자 집합 : 컴퓨터가 인식하고 표현할 수 있는 문자의 모음
- 문자 인코딩 : 문자를 0과 1로 변환하는 과정 (↔ 문자 디코딩)
- 코드 포인트 : 글자에 부여된 고유한 값 (아스키 문자 A의 코드 포인트는 65)
- 아스키 코드 : 아스키 문자 집합에 0 ~ 127까지의 수가 할당되어 인코딩 된 문자 표현 방식
- 한글 인코딩 방식
- 완성형 인코딩 : 초성, 중성, 종성의 조합으로 이루어진 완성된 하나의 글자에 고유한 코드 부여하는 방식
- 조합형 인코딩 : 초성을 위한 비트열, 중성을 위한 비트열, 종성을 위한 비트열을 할당하여 그것들의 조합으로 하나의 글자 코드를 완성하는 방식
- EUC-KR : 완성형 인코딩 방식으로 2350개 정도의 한글 단어 표현 가능 (표현 불가능한 단어가 있음)
- CP949 : EUC-KR의 확장 버전 (표현 불가능한 단어가 있음)
- 유니코드 : 대부분 나라의 문자, 특수문자, 화살표, 이모티콘 등을 표현 가능
- UTF(Unicode Transformation Format) : 유니코드의 글자를 인코딩하는 방법 (예) UTF-8, UTF-16, UTF-32 등
- UTF-8 : 통상 1바이트 ~ 4바이트까지의 인코딩 결과를 만들어 냄
- 한 : D55C₍₁₆₎, 글 : AE00₍₁₆₎ 이므로 두 글자 모두 0800₍₁₆₎ ~FFFF₍₁₆₎ 사이에 있음 ⇒ 3바이트
Chapter 03 | 명령어
- 소스 코드와 명령어
- 고급 언어 : 사람이 이해하고 작성하기 쉽게 만들어진 언어
- 저급 언어 : 컴퓨터가 직접 이해하고 실행할 수 있는 언어
- 기계어 : 0과 1의 명령어 비트로 이루어진 언어
- 어셈블리어 : 기계어를 읽기 편한 형태로 번역한 언어
- 고급 언어 → 저급 언어로 변환하는 방식
- 컴파일 방식 : 컴파일러에 의해 전체 코드를 저급 언어(목적 코드)로 변환하는 방식으로 소스 코드 컴파일 중 오류가 발생하면 소스 코드 전체가 실행되지 않음
- 인터프리트 방식 : 소스 코드를 한 줄씩 차례로 실행하는 방식으로 오류가 발생하면 오류 발생 전까지의 코드는 실행됨
- 목적 파일 vs 실행 파일
- 목적 파일 : 목적 코드로 이루어진 파일
- 목적 코드가 실행 코드가 되기 위해서는 링킹 과정이 필요함
- 실행 파일 : 실행 코드로 이루어진 파일
- 명령어의 구조
- 명령어 : 연산 코드와 오퍼랜드로 구성되어 있음
- 연산 코드(연산자) : 명령어가 수행할 연산(데이터 전송, 산술/논리 연산, 제어 흐름 변경, 입출력 제어)
- 오퍼랜드(피연산자) : 연산에 사용할 데이터가 저장된 위치
- 주소 지정 방식 : 연산에 사용할 데이터 위치를 찾는 방법
- 즉시 주소 지정 방식 : 오퍼랜드 필드에 연산에 사용할 데이터를 직접 명시하는 방법
- 직접 주소 지정 방식 : 오퍼랜드 필드에 유효 주소(메모리 주소)를 직접적으로 명시하는 방식
- 간접 주소 지정 방식 : 오퍼랜드 필드에 유효 주소의 주소를 명시하는 방식
- 레지스터 주소 지정 방식 : 오퍼랜드 필드에 연산에 사용할 데이터를 저장한 레지스터를 직접 명시하는 방법
- 레지스터 간접 주소 방식 : 연산에 사용할 데이터를 메모리에 저장하고, 그 주소를 지정한 레지스터를 오퍼랜드 필드에 명시하는 방법
- 스택과 큐
- 스택 : 한쪽 끝이 막혀 있는 통과 같은 저장 공간으로 LIFO(Last In First Out) 방식으로 데이터를 관리
- 큐 : 양쪽이 뚫려 있는 통과 같은 저장 공간으로 FIFO(First In First Out) 방식으로 데이터를 관리