컴퓨터 구조를 알아야 하는 이유 및 컴퓨터 구조에 대한 큰 그림,
그리고 컴퓨터를 어떻게 작동시키는지 알아가는 시간이다.
더 알아보기
우리가 알아야 할 컴퓨터 구조 지식은 두 가지로 나뉜다.
여기서는 다 기억하려고 하기 보다는 큼직하게 느낌만 알고 넘어가도록 하자.
컴퓨터의 네 가지 핵심 부품을 간단히 도식화하면 다음과 같다.
각 부품의 세부사항들은 앞으로 자세히 학습하는 과정에서 알게 될 것이다.
네 가지 핵심 부품 외에도 "메인보드"와 "시스템 버스"가 추가적으로 언급된다.
데이터를 읽고자 할 땐 주소 버스와 제어 버스를 이용하여
주소 버스로 전달된 주소의 메모리 내용이 CPU에 전달되며,
데이터를 쓰고자 할 땐 주소 버스와 데이터 버스와 제어 버스를 이용하여
CPU에서 데이터 버스를 통해 전달된 내용이 주소 버스로 전달된 주소의 메모리에 저장된다.
더 알아보기
【↗[컴퓨터 공학 기초 강의] 2강. 컴퓨터 구조의 큰 그림】
【↗[컴퓨터 공학 기초 강의] 3강. 컴퓨터의 4가지 핵심 부품 직접 보기】
이름 | 크기 |
---|---|
1바이트 (1byte) | 8비트 (8bit) |
1킬로바이트 (1kB) | 1000바이트 (1000byte) |
1메가바이트 (1MB) | 1000킬로바이트 (1000kB) |
1기가바이트 (1GB) | 1000메가바이트 (1000MB) |
1테라바이트 (1TB) | 1000기가바이트 (1000GB) |
⋮ | ⋮ |
1000개가 아닌 =1024개 단위로 표현한 것은 KiB, MiB, GiB, TiB, ...라고 한다.
과거엔 혼용했지만 이제는 단위가 커지며 오차가 커져 명확히 구분하는 편.
이러한 비트를 이용하여 0과 1만으로 숫자를 표기하는 방식은 이진법 binary.
0~9를 이용하여 9를 넘어가면 자리 올림을 하는 십진법처럼
0~1을 이용하여 1을 넘어가면 자리 올림을 하는 방식.
이진법으로 표기한 숫자 즉, 이진수는 십진수와 구분하기 위해 다음과 같이 표기한다.
이진법으로 음수를 표현할 땐 보통 2의 보수 two's complement 를 이용한다.
"2의 보수"의 사전적 의미는 "어떤 수를 그보다 큰 에서 뺀 값"을 나타낸다.
그 값을 간단히 구하기 위해서는 모든 0과 1을 서로 뒤집고 거기에 1을 더하면 된다.
어떤 이진수가 있을 때 그것만으로는 이 값이 양수인지 2의 보수로 나타낸 음수인지 알 수 없기에
컴퓨터 내부에서 숫자를 다룰 때는 이 수가 양수인지 음수인지 나타내는 플래그를 사용하곤 한다.
이 플래그가 양수를 나타낼 때 0101는 5로 해석되며
이 플래그가 음수를 나타낼 때 0101는 -11로 해석된다.
이진수는 두 가지 값으로만 숫자를 표현하므로 작은 숫자를 나타낼 때도 자릿수가 많아진다.
이런 문제를 해결하기 위해 이진수 네 자리씩 묶어서 한 문자로 나타내는 십육진법을 사용할 수 있다.
십육진법은 말 그대로 0~15를 이용하여 16을 넘어가면 자리 올림을 하는 방식으로,
10~15의 값은 A~D로 표기한다.
그리고 십진수와 구분하기 위해 다음과 같이 표기한다.
16이 2를 n제곱해서 구할 수 있는 수이기 때문에 이진수와 십육진수 사이의 변환은 간편하다.
이진수를 십육진수로 변환할 땐 네 자리씩 끊어서 변환하면 되고,
십육진수를 이진수로 변환할 땐 각각의 값을 네 자리 이진수로 변환하여 이어붙이면 된다.
더 알아보기
대표적인 문자 집합과 인코딩 방식을 알아보자.
첫 코드 포인트 | 마지막 코드 포인트 | 1바이트 | 2바이트 | 3바이트 | 4바이트 |
---|---|---|---|---|---|
0000 | 007F | 0××××××× | - | - | - |
0080 | 07FF | 1 1 0 ××××× | 1 0 ×××××× | - | - |
0800 | FFFF | 1 1 1 0 ×××× | 1 0 ×××××× | 1 0 ×××××× | - |
10000 | 10FFFF | 1 1 1 1 0 ××× | 1 0 ×××××× | 1 0 ×××××× | 1 0 ×××××× |
더 알아보기
프로그래밍 언어로 작성한 모든 소스 코드는 컴퓨터 내부에서 명령어로 변환된다.
컴퓨터는 프로그래밍 언어 그 자체를 이해하지는 못한다.
요즘은 컴파일 방식과 인터프리 방식이 혼용되어 있는 경우도 있다.
더 알아보기
명령어는 "무엇을 대상으로, 어떤 작동을 수행하라"는 구조로 되어 있다.
명령어 길이는 특정 비트로 정해져 있고, 연산 코드 필드 길이 또한 특정 비트로 정해져 있다.
오퍼랜드는 비트의 길이를 나누어 사용하여, 오퍼랜드 수가 많을수록 하나의 크기가 작다.
이러한 길이 제한 때문에 데이터 그 자체보다는 메모리나 레지스터의 주소를 사용하는 경향.
유효 주소를 찾는 방법 즉, 주소 지정 방식 addressing mode 에는 여러 가지가 있다.
그 중 대표적인 방식 몇 가지를 알아보도록 하자.
더 알아보기
【↗[컴퓨터 공학 기초 강의] 7강. 명령어의 구조와 주소 지정 방식】
【↗[컴퓨터 공학 기초 강의] 8강. C언어의 컴파일 과정(추가 강의)】
이번 주 미션
- 기본 미션 | p. 51의 확인 문제 3번, p. 65의 확인 문제 3번 풀고 인증하기
- 선택 미션 | p. 100의 스택과 큐의 개념을 정리하기
미션은 P.51 & P.65의 3번 문제뿐이지만, 이왕 학습하고 확인 문제를 푸는 거 다 풀어보자.
P.35 [01-1 | 컴퓨터 구조를 알아야 하는 이유] 확인 문제
- 컴퓨터 구조를 알아야 하는 이유로 적절하지 않은 것을 고르세요.
① 문제 해결을 위한 다양한 실마리를 찾을 수 있습니다.
② 프로그램을 빠르게 구현할 수 있습니다. → 구현 속도하고는 무관하다.
③ 개발한 프로그램의 성능과 용량을 고려할 수 있습니다.
④ 개발한 프로그램의 비용을 고려할 수 있습니다.
- 다음 설명의 빈칸에 들어갈 알맞은 내용을 보기에서 골라 써 보세요.
[보기| 미지의 대상, 분석의 대상]
"컴퓨터 구조를 이해하면 우리는 컴퓨터를 [① 미지의 대상 ]에서 [② 분석의 대상 ]으로 인식하게 됩니다."
P.50~51 [01-2 | 컴퓨터 구조의 큰 그림] 확인 문제
- 다음 설명의 빈칸에 들어갈 알맞은 내용을 보기에서 골라 써 보세요.
[보기| 명령어, 데이터, CPU, 메모리, 보조기억장치]
"컴퓨터가 이해하는 정보에는 [① 명령어 ]와 [② 데이터 ]가 있습니다."
- 컴퓨터의 네 가지 핵심 부품 중 명령어를 해석하고 실행하는 장치를 고르세요.
① 보조기억장치
② 입출력장치
③ CPU
④ 주기억장치
- 다음 설명의 빈칸에 들어갈 알맞은 내용을 써 보세요.
"프로그램이 실행되려면 반드시 [ 메모리 ]에 저장되어 있어야 합니다."(요것이 이번주 기본 미션!!)
- 컴퓨터의 부품과 역할을 올바르게 짝지으세요.
① 보조기억장치 ― ㉡ 보관할 프로그램 저장
② 메모리 ― ㉠ 실행되는 프로그램 저장
- 시스템 버스와 관련하여 옳지 않은 내용을 고르세요.
① 시스템 버스는 컴퓨터의 핵심 부푼을 분리시키는 버스입니다. → 분리가 아니라 연결!
② 시스템 버스는 주소 버스, 데이터 버스, 제어 버스로 구성되어 있습니다.
③ 메인보드 내부에는 시스템 버스를 비롯한 다양한 버스가 있습니다.
④ CPU가 메모리에 값을 저장할 때 주소 버스, 데이터 버스, 제어 버스를 모두 사용할 수 있습니다.
P.64~65 [02-1 | 0과 1로 숫자를 표현하는 방법] 확인 문제
- 2000MB는 몇 GB인가요?
"2000MB = [ 2 ]GB"
- 다음 중 옳지 않은 것을 골라 보세요.
① 1000GB는 1TB와 같습니다.
② 1000kB는 1MB와 같습니다.
③ 1000MB는 1GB와 같습니다.
④ 1024bit는 1byte와 같습니다. → 1byte는 8bit!
- 1101의 음수를 2의 보수 표현법으로 구해 보세요.
[1 1 0 1]
↓ 모든 0과 1 뒤집기
[ 0 0 1 0 ]
↓ 1 더하기
[ 0 0 1 1 ]
1101을 음수로 표현한 값은 [ 0011 ] 입니다.(요것이 이번주 기본 미션!!)
- DA를 이진수로 표현하면 무엇인가요?
[D A]
↙ ↘
[ 1 1 0 1 ] | [ 1 0 1 0 ]
↘ ↙
DA = [ 11011010 ]
- 이진수와 더불어 십육진수가 많이 사용되는 대표적인 이유는 무엇인가요?
① 이진수와 십육진수 간의 변환이 쉽기 때문입니다.
② 십육진수에 비해 이진수로 표현되는 글자 수가 일반적으로 적기 때문입니다.
③ 십육진수가 십진수보다 일상적으로 더 많이 사용되기 때문입니다.
④ 컴퓨터는 이진수를 이해하지 못하기 때문입니다.
P.75 [02-2 | 0과 1로 문자를 표현하는 방법] 확인 문제
- 68쪽 아스키 코드표를 참고하여 아래의 아스키 코드를 디코딩한 내용을 써 보세요.
"104 111 110 103 111 110 103 → [ hongong ]"
- 다음 중 EUC-KR 인코딩에 대한 설명 중 옳지 않은 것을 고르세요.
① 한국어를 표현할 수 있는 인코딩 방식입니다.
② 조합형 인코딩 방식입니다. → 완성형 인코딩 방식!
③ 하나의 완성된 한글 글자에 코드를 부여합니다.
④ 모든 한글을 표현할 수 없습니다.
- 유니코드 문자 집합에서 '안'에 부여된 값은 C548, '녕'에 부여된 값은 B155입니다. '안녕'을 UTF-8로 인코딩한 값을 구해 보세요.
(C548은 이진수로 1100 0101 0100 1000이고, B155는 이진수로 1011 0001 0101 0101입니다.)
11101100 10010101 10001000 11101011 10000101 10010101
P.89 [03-1 | 소스 코드와 명령어] 확인 문제
- 다음 중 고급 언어가 아닌 것을 모두 고르세요.
① 컴파일 언어
② 인터프리터 언어
③ 기계어 → 저급 언어!
④ 어셈블리 언어 → 저급 언어!
- 다음 중 옳지 않은 것을 고르세요..
① 컴파일 언어는 한 줄이라도 소스 코드 상에 오류가 있다면 실행될 수 없습니다.
② 일반적으로 컴파일 언어보다 인터프리터 언어가 더 빠릅니다. → 컴파일 언어는 한 번 컴파일 해두면 다시 변환하지 않아도 되지만, 인터프리터 언어는 실행할 때마다 한 줄씩 변환해주야 해서 더 느리다. (수정되지 않았음을 확신하면 캐싱 해둔 것을 사용할 수 있겠지만?)
③ 인터프리터는 인터프리터 언어로 작성된 소스 코드를 한 줄씩 저급 언어로 변환하여 실행합니다.
④ 컴파일러는 컴파일 언어로 작성된 소스 코드 전체를 목적 코드로 변환합니다.
P.101 [03-2 | 명령어의 구조] 확인 문제
- 명령어에 대한 설명 중 옳지 않은 것을 고르세요.
① 명령어는 연산 코드와 오퍼랜드로 구성됩니다.
② 연산 코드 필드에는 메모리 주소만 담을 수 있습니다. → 연산 코드 필드에 담는 건 명령어가 수행할 연산.
③ 오퍼랜드 필드는 여러 개 있을 수 있습니다.
④ 명령어에 연산에 사용할 데이터를 직접 명시할 경우 표현할 수 있는 데이터의 크기는 연산 코드의 크기만큼 작아집니다.
- 아래 그림 속 CPU에는 R1, R2라는 레지스터가 있고, 메모리 5번지에 100, 6번지에 200, 7번지 300이 저장되어 있습니다. 아래 명령어를 레지스터 간접 주소 지정 방식으로 수행한다면 결과는 어떻게 나올까요? 아래에 빈칸을 채워 보세요.
"메모리 [① 6 ]번지 속 [② 200 ]이라는 값을 CPU로 가지고 온다."
스택 stack | 큐 queue |
---|---|
나중에 저장한 데이터를 먼저 빼내는 데이터 관리 방식 | 먼저 저장한 데이터를 먼저 빼내는 데이터 저장 방식 |
후입선출(後入先出); LIFO(Last-In First-Out) | 선입선출(先入先出); FIFO(First-In First-Out) |
PUSH 명령어로 데이터를 맨 뒤에 넣기 | ENQUEUE 명령어로 데이터를 맨 뒤에 넣기 |
POP 명령어로 데이터를 맨 뒤에서 꺼내기 | DEQUEUE 명령어로 데이터를 맨 앞에서 꺼내기 |
입구가 하나인 통에 비유 | 양쪽이 뚤려 있는 파이프에 비유 |
스택에 데이터를 넣고 빼는 것을 간단히 그려 보면 다음과 같다.
큐에 데이터를 넣고 빼는 것을 간단히 그려 보면 다음과 같다.