1-1 컴퓨터 구조를 알아야하는 이유
1) 문제해결
- 컴퓨터 구조르 이해하고 있다면 문제 상황을 빠르게 진단하여, 문제 해결의 실마리를 다양하게 찾을 수 있다.
- 컴퓨터란 미지의 대상이 아닌 분석의 대상이기 때문!!
2) 성능 용량 비용
- 컴퓨터 구조는 성능, 용량, 비용의 문제와 직결된다.
- 컴퓨터 구조를 알게 되면, 이를 고려하는 개발자가 될 수 있다.
3) 확인문제
- 2번
- 컴퓨터 구조를 이해하면 우리는 컴퓨터를 [미지의 대상]에서 [분석의 대상]으로 인식하게 됩니다.
1-2 컴퓨터구조의 큰 그림
0) 서론
- 컴퓨터 구조는 크게 [컴퓨터가 이해하는 정보]와 [컴퓨터의 네가지 핵심 부품]으로 나눌 수 있다.
1) 컴퓨터가 이해하는 정보
- 이는 데이터와 명령어로 나뉠 수 있다.
- 데이터: 컴퓨터가 이해하는 숫자, 문자, 이미지 동영상과 같이 정적인 정보
- 명령어를 위해 존재하는 일종의 재료
- ex) 1, 2
- 명령어: 데이터를 움직이고 컴퓨터를 작동시키는 정보
- 컴퓨터를 작동시키는 정보
- ex) 더하라, 1과 2를
- 데이터: 컴퓨터가 이해하는 숫자, 문자, 이미지 동영상과 같이 정적인 정보
2) 컴퓨터의 4가지 핵심부품
2-0) 서론
- 메인보드
- 시스템 버스
- CPU(ALU:산술논리연산장치, 제어장치, 레지스터), 시스템 버스와 연결되어 있음
- 메모리, 시스템 버스와 연결되어 있음
- 보조기억장치, 시스템버스와 연결되어 있음
- 입출력장치(모니터, 키보드, 마우스), 시스템 버스와 연결되어 있음
2-1) 중앙처리장치(CPU)
- 컴퓨터의 두뇌
- 저장된 메모리를 읽고, 읽은 명령어를 해석, 실행하는 부품
- 중요 구성 요소
- [산술논리연산장치(ALU)]
- 계산만을 위해 존재하는 부품
- [레지스터]
- CPU 내부의 작은 임시 저장 장치
- 여러 개의 레지스터가 존재
- [제어장치]
- 제어 신호를 통해 명령어를 해석하는 장치
- CPU가 메모리에 저장된 값을 읽고 싶을 때는 [메모리 읽기]라는 제어신호 사용
- CPU가 메모리에 어떤 값을 저장하고 싶을 땐 [메모리 쓰기]라는 제어신호 사용
- [산술논리연산장치(ALU)]
2-2) 주기억장치(메모리, RAM)
- Ram과 Rom이 있음
- 현재 실행되는 프로그램의 명령어와 데이터를 저장하는 부품
- 프로그램이 실행되기 위해서 반드시 메모리에 저장되어 있어야함
- 메모리에 저장된 값에 빠르고 효율적으로 접근하기 위해 [주소]라는 개념이 있음
2-3) 보조기억장치
- 메모리 크기가 크고 전원이 꺼져도 저장된 내용을 잃지 않는 메모리
- 하드 디스크, SSD, USB, DVD, CD-ROM 등등..
- 메모리는 [실행되는] 프로그램을 저장
- 보조기억장치는 [보관할] 프로그램을 저장
2-4) 입출력 장치
- 컴퓨터 외부에 연결되어 컴퓨터 내부와 정보를 교환하는 장치
- USB, DVD 등과 함께 주변장치라고도 불림
- 단, USB와 DVD는 메모리를 보조하는 특별한 입출력 장치
2-5) 메인보드와 시스템 버스
- 메인보드
- 마더보드라고 부름
- 여러 컴퓨터 부품을 부착할 수 있는 슬롯과 단자가 있음
- 시스템 버스
- 버스: 여러 장치가 서로 정보를 주고받는 통로
- 시스템 버스: 컴퓨터의 네 가지 핵심 부품을 연결하는 가장 중요한 버스
- 시스템 버스의 구성
- 주소 버스: 주소를 주고 받는 통로
- 데이터 버스: 명령어와 데이터를 주고 받는 통로
- 제어 버스: 제어 신호를 주고 받는 통로
3) 확인 문제
- 컴퓨터가 이해하는 정보에는 데이터와 명령어가 있습니다.
- 3번
- [기본 숙제1] 프로그램이 실행되려면 반드시 메모리에 저장되어 있어야 한다.
- 1) ㄴ, 2) ㄱ
- 1번
2-1 0과 1로 숫자를 표현하는 방법
1) 정보 단위
1-1) 비트
- 컴퓨터가 이해하는 가장 작은 정보 단위
- 0 또는 1 두 가지 정보를 표현할 수 있음
- n개의 비트로 표현할 수 있는 상태는 2의 n제곱
1-2) 비트를 묶는 단위
- 바이트(byte): 8 개의 비트를 묶는 단위
- 킬로바이트(kB): 1000 개의 바이트를 묶는 단위
- 메가바이트(MB): 1000 개의 킬로바이트를 묶는 단위
- 기가바이트(GB): 1000 개의 메가바이트를 묶는 단위
- 테라바이트(TB): 1000 개의 기가바이트를 묶는 단위
1-3) 워드
- CPU가 한 번에 처리할 수 있는 데이터의 크기
- 하프워드: 0.5 워드
- 풀 워드: 1 워드
- 더블 워드: 2 워드
2) 이진법
- 이진법: 0과 1로만 모든 숫자를 표현하는 방법
- 숫자가 1을 넘어가는 시점에서 자리 올림을 하는 방법으로 표현
- 이진수: 이진법으로 표현한 수
- ex) 1000(2) or 0b1000 >> 8표기
- 십진법: 일상적으로 사용되는 숫자를 표현하는 방법
- 숫자가 9를 넘어가는 시점에서 자리 올림을 하는 방법
- 십진수: 십진법으로 표현한 수
2-1) 음수를 표현하는 방법
- 2의 보수 표현법
- 2의 보수: 어떤 수를 그보다 큰 2의 n제곱에서 뺀 값
- ex) 11(2)의 2의 보수 >> 100(2) - 11(2) = 01(2)
- 모든 0과 1을 뒤집고 1을 더하면 2의 보수를 취할 수 있다.
- ex) 1011(2) >> 0100(2) >> 0101(2) | 0101(2) >>1010(2) >> 1011(2)
- 플래그: 해당 수가 양수인지 음수인지 구분하기 위해 컴퓨터 내부적으로 사용되는 것
2-2) 2의 보수 표현의 한계
- n 비트로 -2의 n제곱과 2의 n제곱을 동시에 표현할 수 없다.
3) 십육진법
3-1) 십육진법
- 이진법으로 컴퓨터가 이해할 수 있는 숫자 정보를 직접 표현할 수는 있지만, 숫자가 너무 길어진다는 단점이 있음
- 때문에 십육진법으로 표현하기도 함
- 10 > A, 11 > B, 12 > C, 13 > D, 14 > E, 15 > F 로 표기
- ex) 15(16) or 0x15 로 표기
3-2) 십육진법을 사용하는 이유(이진수 <-> 십육진수)
- 이진수와 십육진수는 서로 변환하기 쉽다.
- 십육진수를 이진수로 표현하기
- 십육진수의 한 글자를 4비트의 이진수로 간주하면 쉽게 변환할 수 있다.
- ex) 1A2B(16) >> 1(16) A(16) 2(16) B(16) >> 0001 1010 0010 1011(2)
- 이진수를 십육진수로 표현하기
- 이진수를 네 개씩 끊어주고, 하나하나 16진수로 변환하면 된다.
- ex) 11010101(2) >> 1101(2) 0101(2) >> C5(16)
4) 확인문제
- 2000000 GB
- 4번
- [기본숙제2] 1101(2) >> 0010(2) >> 0011(2)
- DA(16) >> 1110 1010(2)
- 1번
2-2 0과 1로 문자를 표현하는 방법
1) 문자 집합과 인코딩
- 문자 집합: 컴퓨터가 인식하고 표현할 수 있는 문자의 모음
- ex) 문자집합이 {a, b, c, d} 인 컴퓨터는 다섯 문자는 이해할 수 있고, f, g는 이해할 수 없다.
- 문자 인코딩: 문자를 0과 1로 변환하여 컴퓨커가 이해할 수 있도록 하는 변환 과정
- 문자 디코딩: 0과 1로 이루어진 문자 코드를 사람이 이해할 수 있는 문자로 변환하는 과정
2) 아스키 코드
- 아스키: 초창기 문자 집합 중 하나, 영어 알파벳과 아라비아 숫자, 일부 특수 문자를 포함함
- 7비트로 표현할 수 있는, 즉 128 개의 문자를 표현할 수 있다.
- 아스키 코드: 아스키 문자에 대응된 고유한 수
- 코드 포인트: 문자 인코딩에서 글자에 부여된 고유한 값
- 아스키 코드의 단점
- 한글을 표현할 수 없음
- 128 개보다 더 많은 문자를 표현할 수 없다.
- 확장 아스키 코드
- 아스키 코드에 1비트를 추가한 버전
3) EUC-KR
3-1) 한글의 특수성
- 초성 중성 종성의 조합으로 이루어져 있다.
3-2) 한글 인코딩의 2가지 방법
- 완성형 인코딩: 초성, 중성, 종성의 조합으로 이루어진 완성된 하나의 글자에 고유한 코드를 부여하는 방식
- EUC-KR은 대표적인 완성형 인코딩 방식이다.
- 조합형 인코딩: 초성을 위한 비트열, 중성을 위한 비트열, 종성을 위한 비트열을 할당해 그것을 조합으로 하나의 글자코드를 완성하는 인코딩 방식
3-3) EUC-KR로 한글 표현하기
- 한글 한 글자에 2바이트 코드를 부여함
- 즉 네 자리 십육진수로 나타낼 수 있음
- 모든 한글을 표현할 수 없다는 단점이 있음
- CP949: EUC-KR보다 더 확장된 버전
4) 유니코드와 UTF-8
- 유니코드: 한글을 포함하여 대부분 나라의 문자, 특수문자, 화살표, 이모티콘까지 코드로 표현할 수 있는 통일된 문자 집합
- 글자에 부여된 값 자체를 인코딩된 값으로 삼지 않고 이 값을 다양한 방법으로 인코딩함
- ex) UTF-8, UTF-16, UTF-32
5) 확인 문제
- hongong
- 2번
3-1 소스 코드와 명령어
1) 고급언어와 저급언어
- 고급언어: 사람을 위한 언어
- 저급언어: 컴퓨터가 직접 이해하고 실행할 수 있는 언어 (명령어로 이루어짐)
- 고급언어로 작성된 코드가 실행되려면 저급 언어(명령어)로 변환되어야 함
2) 저급 언어
- 기계어: 명령어 비트로 이루어진 언어
- 어셈블리어: 명령어를 읽기 편한 형태로 번역한 언어
3) 컴파일 언어와 인터프리터 언어
- 컴파일 언어: 컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급 언어
- 소스코드 내에 오류가 있으면 컴파일이 실패한다
- 결과적으로 목적 코드가 나옴
- 인터프리터 언어: 인터프리터에 의해 소스코드 한줄 한줄 실행되는 고급 언어
4) 목적파일 vs 실행 파일
- 링킹: 목적 코드가 실행 파일이 되기 위해서 꼭 거처야 하는 작업
5) 확인 문제
- 3, 4번
- 2번
3-2 명령어의 구조
1) 연산 코드와 오퍼랜드
- 연산 코드: 명령어가 수행할 연산
- 오퍼랜드: 연산에 사용되는 데이터 or 데이터의 위치 (오펄랜드 필드 == 주소 필드)
2) 주소 지정 방식
- 즉시 주소 지정 방식: 연산에 필요한 데이터를 오퍼랜드에 직접 명시
- 직접 주소 지정 방식: 유효 주소를 직접 명시
- 간접 주소 지정 방식: 유효 주소의 주소를 직접 명시
- 레지스터 주소 지정 방식: 레지스터를 직접 명시
- 레지스터 간접 주소 지정 방식: 연산에 사용할 메모리의 위치를 저장하고 있는 레지스터를 직접 명시
3) 확인 문제
- 2번
- 메모리 6번지 속 200이라는 값을 CPU로 갖고 온다.