CH01. 컴퓨터 구조 시작하기
컴퓨터 구조를 알아야 하는 이유
- 컴퓨터를 분석의 대상으로 바라볼 수 있게 되어 문제 해결 능력을 키울 수 있다.
- 성능, 용량, 비용을 고려해서 개발할 수 있게 된다.
컴퓨터 구조의 큰 그림
- 컴퓨터는 0과 1로된 데이터와 명령어를 사용해서 동작한다.
- 컴퓨터는 네 가지 핵심 부품으로 구성된다.
- CPU : ALU, register, CU를 사용해서 메모리에 저장된 명령어를 해석하고 실행
- RAM : 실행 중인 프로그램의 명령어와 데이터를 저장
- 보조기억장치 : 전원이 꺼져도 프로그램의 데이터를 저장
- 입출력장치 : 모니터, 마우스, 키보드 등
- 이 부품들은 메인보드에서 시스템 버스를 통해 연결되어 상호작용한다.
CH02. 데이터
0과 1로 숫자를 표현하는 방법
- 컴퓨터는 0과 1로된 데이터와 명령어만 이해할 수 있기 떄문에 0과 1을 사용하는 이진법으로 숫자를 표현함
- 이진법으로 표현하면 너무 길어지기 때문에 상호 변환하기 쉬운 십육진법으로 표현하기도 함
0과 1로 문자를 표현하는 방법
- 컴퓨터가 표현할 수 있는 문자 집합을 정의하고 각 문자에 이진법 코드를 부여
- 컴퓨터는 문자 집합에 이진법 코드에 대응되는 문자가 있을 때 이해하고 표현할 수 있음
- ASCII : 7비트를 사용해서 알파벳과 몇 가지 특수문자를 포함한 128가지 문자 표현
- EUC-KR : 2바이트를 사용해서 완성된 글자마다 코드를 부여하여 2350개 정도 문자 표현
- 유니코드 : 대부분의 언어, 특수문자, 이모티콘 등을 모두 포함하는 통일된 문자 집합
- UTF-8 : 유니코드 문자를 인코딩하는 방식 중 하나로, ASCII나 EUC-KR과 달리 문자에 부여된 코드를 한번 더 인코딩함
CH03. 명령어
소스 코드와 명령어
- 고급 언어 : 사람이 이해할 수 있는 언어 (e.g. C, C++, Java, Python)
- 저급 언어 : 컴퓨터가 이해할 수 있는 언어 (e.g. 기계어(0과 1로 이루어진 언어), 어셈블리어)
- 컴파일 언어 : 소스 코드 전체를 저급 언어로 변환한 뒤 실행하는 방식으로 동작하는 언어
- 목적 코드 : 컴파일러를 통해 저급 언어로 변환된 코드
- 인터프리터 언어 : 소스 코드를 한 줄씩 저급 언어로 변환해서 실행하는 방식으로 동작하는 언어
- 컴파일 동작 방식 (C 언어 예시)
- 전처리 : 외부 라이브러리 코드를 가져오거나 매크로 코드를 변환하며 컴파일을 준비함
- 컴파일 : 소스 코드를 어셈블리 코드로 변환
- 어셈블 : 어셈블리 코드를 목적 코드로 변환
- 링킹 : 모든 목적 코드들을 하나의 실행 파일로 변환
명령어의 구조
- 연산 코드 필드 : 명령어가 수행하려는 연산의 종류 명시
- 오퍼랜드 필드 : 데이터 또는 데이터가 저장된 주소(유효 주소) 명시
- 명령어는 오퍼랜드 필드에서 가져온 데이터로 연산 코드 필드에 명시된 연산을 수행한다.
- 오퍼랜드 필드는 연산 코드 필드의 크기 만큼 표현 가능한 데이터 가짓수가 적기 때문에, 주로 데이터를 직접 명시하지 않고 유효 주소를 명시한다.
- 주소 지정 방식 : 오퍼랜드 필드에 저장할 유효 주소를 찾는 방법
- 즉시 주소 지정 방식 : 데이터를 직접 명시
- 직접 주소 지정 방식 : 데이터를 메모리에 저장한 뒤 그 유효 주소를 명시
- 간접 주소 지정 방식 : 메모리에 저장된 유효 주소의 주소를 명시
- 레지스터 주소 지정 방식 : 데이터를 레지스터에 저장한 뒤 그 유효 주소를 명시
- 레지스터 간접 주소 지정 방식 : 데이터를 메모리에 저장한 뒤 그 유효 주소를 레지스터에 저장하고 레지스터 주소를 명시
숙제
p.51 확인 문제 3번
프로그램이 실행되려면 반드시 메모리에 저장되어 있어야 합니다.
p.65 확인 문제 3번
1011(2)의 음수를 2의 보수 표현법으로 구하기
1101 -> 0010 -> 0011
스택과 큐
- 스택 : LIFO 방식으로 동작하는 자료구조
- 큐 : FIFO 방식으로 동작하는 자료구조