1. 컴퓨터의 구조를 알아야 하는 이유
- 문제 상황을 빠르게 진단 가능
- 문제 해결 실마리를 다양하게 찾을 수 있음
- 프로그램을 위한 최적의 컴퓨터 환경을 세팅할 수 있음
2. 컴퓨터 구조
- 크게 아래와 같이 두가지로 기본 컴퓨터 구조 지식을 나눌 수 있음
1) 컴퓨터가 이해하는 정보
- 데이터(data)
- 명령어(instruction)
2) 컴퓨터의 네 가지 핵심 부품
- 중앙처리장치(CPU; central processing unit)
- 주기억장치(메모리, main memory)
- 보조기억장치(secondary storage)
- 입출력장치(I/O device)
3. 컴퓨터의 핵심 부품
1) 주기억장치(메모리)
- 현재 실행되는프로그램의 명령어와 데이터를 저장하는 부품
- 메모리에 빠르고 효율적으로 접근하기 위해 주소(address)를 사용
2) 중앙처리장치(CPU)
- 컴퓨터의 두뇌
- 메모리에 저장된 명령어를 읽어 들이고, 읽어 들인 명령어를 해석하고, 실행하는 부품
- CPU 내부 구성 요소
- 산술논리연산장치(ALU; arithmetic logic unit)
: 계산기. - 레지스터(register)
: CPU 내부 임시 저장 장치 - 제어장치(CU; control unit)
: 제어 신호를 내보내고 명령어를 해석하는 장치
ex) cpu가 메모리에 저장된 값을 읽고 싶을 땐 메모리를 향해 "메모리 읽기" 제어 신호를 보냄
3) 보조기억장치
- 비휘발성 저장장치
- 메모리는 현재 실행되는 프로그램을 저장, 보조기억장치는 보관할 프로그램을 저장
4) 입출력장치
- 컴퓨터 외부에 연결되어 컴퓨터 내부와 정보를 교환하는 장치
- 마이크, 스피커, 프린터, 마우스, 키보드 등
5) 메인보드와 시스템 버스
- 메인보드(마더보드; mother board)
: 여러 컴퓨터 부품을 연결함.
메인보드 내부에 버스라는 통로가 있어 이 시스템 버스를 통해 네가지 핵심 부품(cpu, 메모리, 보조기억장치, 입출력장치)을 연결함
- 시스템버스
: 주소 버스, 데이터 버스, 제어 버스가 있음
cpu가 시스템 버스를 통해 메모리의 값을 불러들이거나 저장함.
4. 데이터
1) 정보 단위
- 비트(bit): 0과 1을 나타내는 가장 작은 정보 단위
- 바이트(byte): 여덟 개의 비트를 묶은 단위(8bite)
- 1킬로바이트(1kB): 1,000 바이트(1,000byte)
- 1메가바이트(1MB): 1,000 킬로바이트(1,000kB)
- 1기가바이트(1GB): 1,000 메가바이트(1,000MB)
- 1 테라바이트(1TB): 1,000 기가바이트(1,000GB)
cf) 워드(word): cpu가 한 번에 처리할 수 있는 데이터 크기
- cpu가 한 번에 16비트를 처리할 수 있다면 1워드는 16비트가 되고, 한 번에 32 비트를 처리할 수 잇다면 1워드는 32비트가 됨.
2) 숫자 표현 방법: 이진법, 십진법, 십육진법
- 이진법: 0과 1로 모든 숫자를 표현하는 방법
- 십진법: 0 ~ 9까지의 숫자로 표현하는 방법
- 십육진법: 0 ~ 9, A,B,C,D,E,F로 숫자를 표현하는 방법.
- 일반적으로 이진법과 십육진법을 많이 사용하는데, 그 이유는 이진법은 십육진법으로 표현이 쉽고, 반대의 경우도 마찬가지이기 때문.
3) 문자 집합 종류: 아스키 코드, EUC-KR, UTF-8
- 문자 집합: 컴퓨터가 인식하고 표현할 수 있는 문자 모음
- 아스키 코드(ASCII; american standard code for information interchange): 초창기 문자 집합 중 하나. 영어 알파벳, 아라비아 숫자, 일부 특수 문자 포함하여 총 128개 문자 표현.
- EUC-KR: 완성형 인코딩과 조합형 인코딩 중 대표적인 완성형 인코딩 방식. 초성, 중성, 종성이 모두 결합된 한글 단어에 2바이트 크기의 코드를 부여.
- CP949(code page 949): EUC-KR의 확장 버전
- 유니코드(unicode): EUC-KR보다 훨씬 더 다양한 한글 포함.
- UTF-8: 가장 대표적인 문자 집합. 1바이트부터 4바이트가지의 인코딩 결과를 만들어냄.
5. 명령어
1) 프로그래밍 언어 종류: 고급 언어, 저급 언어
- 고급 언어(high-level programming language)
: 사람을 위한 언어
- 저급 언어(low-level programming language)
: 컴퓨터가 직접 이해하고 실행할 수 있는 언어.
- 기계어(machine code)
: 0과 1의 명령어 비트로 이루어진 저급 언어 - 어셈블리어(assembly language)
: 기계어를 읽기 편한 형태로 번역한 저급 언어
2) 번역 방식에 따른 언어 구분: 컴파일 언어, 인터프리터 언어
- 고급언어로 작성된 소스 코드는 저급 언어로 변환되어 실행
- 번역방식에 따라 컴파일 방식과 인터프리터 방식으로 구분
- 컴파일 언어(compile language):
- 컴파일(compile): 컴파일 언어로 작성된 전체 소스 코드가 저급 언어로 변환되는 과정. (고급언어 → 저급언어)
- 컴파일러(compiler): 컴파일을 수행해 주는 도구
- 컴파일 언어: 컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급 언어
- 대표적인 컴파일 언어: C
- 컴파일 과정에서 오류를 하나라도 발견하면 해당 소스 코드는 컴파일에 실패함
- 목적 코드(object code): 컴파일러를 통해 저급 언어로 변환된 코드
- 인터프리터 언어(interpreter language):
- 인터프리터에 의해 소스 코드가 한 줄씩 실행되는 고급 언어
- 대표 인터프리터 언어: python
- 인터프리터(interpreter): 소스 코드를 한 줄씩 저급 언어로 변환하여 실행해 주는 도구
- 인터프리터 언어는 소스 코드를 한 줄씩 실행하기 때문에 문법 오류가 있는 N줄 이전까지는 정상 실행.
- 일반적으로 인터프리터 언어는 한 줄씩 저급 언어로 해석해서 실행해야 하기 때문에 목적 코드(저급언어)를 실행하는 컴파일 언어보다 느림.
cf) 링킹(linking): 목적 파일이 실행 파일이 되는 작업
- 목적 파일과 실행 코드를 연결해주는 작업
- 링킹 작업을 해줘야 목적 파일이 실행 파일이 됨
3) 명령어 구조
- 명령어 구조: 연산코드(operation code) + 오퍼랜드(operand)
- 연산코드(operation code): 명령어가 수행할 연산
- 기본적인 연산 코드 유형(4가지)
- 데이터 전송
- 산술/논리 연산
- 제어 흐름 변경
- 입출력 제어
- 기본적인 연산 코드 유형(4가지)
- 오퍼랜드(operand, = 주소필드): 연산에 사용할 데이터 또는 데이터 저장 위치
- 주로 연산에 사용할 데이터를 직접 명시하기 보다는 메모리 주소나 레지스터 이름이 담김
- 0-주소 명령어: 오퍼랜드가 하나도 없는 명령어
- 1-주소 명령어:오퍼랜드가 한 개인 명령어
- 2-주소 명령어: 오퍼랜드가 두 개인 명령어
- 3-주소 명령어: 오퍼랜드가 세 개인 명령어
- 주소 지정 방식(addressing mode): 오퍼랜드 필드에 데이터가 저장된 위치를 명시할 때 연산에 사용할 데이터 위치 찾는 방법
- 즉시 주소 지정 방식: 오퍼랜드 필드에 직접 연산에 사용할 데이터를 명시
- 직접 주소 지정 방식: 오퍼랜드 필드에 유효 주소를 직접 명시하는 방식
- 간접 주소 지정 방식: 오퍼랜드 필드에 유효 주소의 주소를 명시
- 레지스터 주소 지정 방식: 오퍼랜드 필드에 연산에 사용할 데이터를 저장한 레지스터를 명시
- 레지스터 간접 주소 지정 방식: 연산에 사용할 데이터를 메모리에 저장, 유효 주소를 저장한 레지스터를 오퍼랜드 필드에 명시
- 스택과 큐
- 스택(stack):한 쪽 끝이 막혀있는 통과 같은 저장 공간. 후입선출(LIFO; last in first out)로 데이터 관리
- 명령어:
- PUSH: 데이터 저장
- POP: 데이터 출력
- 명령어:
- 큐(queue): 양쪽으로 뚫려있는 통과 같은 저장 공간. 선입선출(FIFO; first in first out)로 데이터 관리
p.51
다음 설명의 빈칸에 들어갈 알맞은 내용을 써보세요
프로그램이 실행되려면 반드시 ( )에 저장되어 있어야 합니다.
정답: 메모리
p.65
1101(2)의 음수를 2의 보수 표현법으로 구해 보세요.
1101 → 0010 → 0011
1101(2)를 음수로 표현한 값은 입니다.
정답: 0011(2)