knri.log
로그인
knri.log
로그인
[컴퓨터구조] 컴퓨터구조 기초
누디
·
2023년 3월 3일
팔로우
0
컴퓨터구조
0
Computer Architecture
목록 보기
4/5
1. 데이터
1) 0과 1로 숫자를 표현하는 방법
컴퓨터가 표현하는 정보 단위와 0과 1만으로 숫자를 표현하는 법
a. 정보단위
0과 1을 나타내는 가장 작은 정보 단위 =
비트(bit)
N개의 전구가 있다고 할 때, 표현할 수 있는 정보의 수 =
2
N
2^N
2
N
전구 = 비트
8 비트(bit) → 1 바이트(byte) =
2
8
2^8
2
8
→ 256 개의 정보 표현 가능
1000 바이트(byte) → 1 킬로바이트(KB) = 전구 8개짜리가 1000개 →
2
8000
2^{8000}
2
8
0
0
0
개의 정보 표현 가능
1000 KB → 1 MB = 전구 8개짜리가 1,000,000 개
1000 MB → 1 GB
1000 GB → 1 TB
+) 워드
CPU가 한 번에 처리할 수 있는 데이터 크기
b. 이진법
0과 1만으로 모든 숫자를 표현하는 방법
2의 보수로 음수
어떤 수를 그보다 큰
2
n
2^n
2
n
에서 뺀 값
1
1
(
2
)
11_{(2)}
1
1
(
2
)
의 2의 보수는
1
1
(
2
)
11_{(2)}
1
1
(
2
)
보다 큰
2
n
2^n
2
n
, 즉
10
0
(
2
)
100_{(2)}
1
0
0
(
2
)
에서
1
1
(
2
)
11_{(2)}
1
1
(
2
)
을 뺀
0
1
(
2
)
01_{(2)}
0
1
(
2
)
수
쉽게 계산하자면, 모든 0과 1을 뒤집고 거기에 1을 더한 값
컴퓨터가 이진수의 음 / 양을 구분하는 방법 → 플래그 사용
c. 십육진법
이진법으로 표현하면 숫자가 너무 길어진다는 단점
사용하는 이유는 이진수와 십육진수 상호 변환 편리함
2) 0과 1로 문자를 표현하는 방법
컴퓨터에 문자를 입력했을 때, 어떻게 이해하고 모니터에 출력할까?
a. 문자 집합과 인코딩 / 디코딩
문자 집합 : 컴퓨터가 인식하고 표현할 수 있는 문자의 모음
문자 인코딩 : 문자 집합에 속한 문자를 0과 1로 변환하여 컴퓨터가 이해할 수 있도록
문자 디코딩 : 0과 1로 이루어진 문자 코드를 사람이 이해할 수 있는 문자로 변환
b. 아스키코드
초창기 문자 집합 중 하나로, 영어 알파벳과 아라비아 숫자, 그리고 일부 특수 문자 포함
아스키 문자 집합에 속한 문자 하나는 7비트로 표현 → 전구 7개 → 128개의 정보 표현 가능
단점을 한글, 특수문자 등 표현 불가능 하다는 것
c. EUC-KR
따라서
한글 인코딩
방식 필요
완성형 인코딩
초성, 중성, 종성의 조합으로 이루어진 완성된 하나의 글자에 고유한 코드를 부여
조합형 인코딩
초성을 위한 비트열, 중성을 위한 비트열, 종성을 위한 비트열을 할당 → 조합으로 완성
EUC-KR은 완성형 인코딩 방식
한글 한 글자에 2바이트 코드 부여
근데 한글 조합은 무궁무진하다..
d. 유니코드와 UTF-8
모든 한글 표현할 수 없다는 한계
언어별로 인코딩하면 나라마다 인코딩 방식 알아야 함
따라서 모든 나라 언어의 문자 집합과 인코딩 방식 통일되어 있다면 편리함
현대 문자를 표현할 때 가장 많이 사용되는 표준 문자 집합
문자 집합 = 유니코드
인코딩 방식 = UTF8
1바이트부터 4바이트까지의 인코딩 결과를 만들어냄
인코딩한 결과가 몇 바이트가 될지는 유니코드 문자에 부여된 값의 범위에 따라 결정됨
2. 명령어
1) 소스 코드와 명령어
명령어는 컴퓨터를 실질적으로 작동시키는 매우 중요한 정보
소스코드는 컴퓨터 내부에서 명령어로 변환됨
a. 고급 언어와 저급 언어
프로그래밍 언어는 사람이 이해하고 작성하기 쉽게 만들어진 언어
사람을 위한 언어 =
고급 언어
C, C++, Java, Python
컴퓨터가 직접 이해하고 실행할 수 있는 언어 =
저급 언어
기계어 : 0과 1의 명령어 비트로 이루어진 언어
어셈블리어 : 0과 1로 표현된 명령어(기계어)를 읽기 편한 형태로 변역한 언어
하드웨어와 밀접하게 맞닿아 있는 프로그램을 개발할 때 자주 사용
관찰의 대상이 되기도 함 : 어떤 절차로 작동하는지 볼 수 있음
b. 컴파일 언어와 인터프리터 언어
고급 언어가 변환되는 두 가지 방식
컴파일 언어
컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급 언어
C
컴파일은 코드 전체가 저급 언어로 변환되는 과정을 말한다. → 컴파일러가 수행
컴파일러를 통해 저급 언어로 변환된 코드 → 목적 코드(object code)
인터프리트
인터프리터에 의해 소스 코드가 한 줄씩 실행되는 고급 언어
Python
소스 코드가 한 줄씩 차례로 실행되어 저급 언어로 변환 → 인터프리터가 수행
컴파일 언어보다 느림
2) 명령어의 구조
하나의 명령어를 자세히 들여다보며 연산 코드, 오퍼랜드, 주소 지정 방식 학습
a. 연산 코드와 오퍼랜드
컴퓨터 속 명령어는 ‘무엇을 대상으로, 어떤 작동을 수행하라’ 구조로 되어 있음
연산 코드 = 연산자
명령어가 수행할 연산
분홍색 필드
기본적인 연산 코드 유형
데이터 전송
MOVE
STORE
LOAD(FETCH) : 메모리에서 CPU로 데이터를 가져와라
PUSH : 스택에 데이터를 저장하라
POP : 스택의 최상단 데이터를 가져와라
산술 / 논리 연산
AND / SUBSTRACT / MULTYPLY / DIVIDE
INCREMENT / DECREMENT
AND / OR / NOT
COMPARE
제어 흐름 변경
JUMP
CONDITIONAL JUMP
HALT
CALL
RETURN
입출력 제어
READ
WRITE
START IO
TEST IO
오퍼랜드 = 피연산자
연산에 사용할 데이터가 저장된 위치
흰색 필드
숫자와 문자 등을 나타내는 데이터 또는 메모리나 레지스터 주소가 올 수 있다
주소필드라고 부르기도 함
b. 주소 지정 방식
메모리나 레지스터의 주소를 담는 경우를 많은데, 이는 명령어의 길이 때문
한 주소에 16비트를 저장할 수 있는 메모리가 있다 가정
메모리에 데이터를 저장하고, 오퍼랜드 필드 안에는 메모리 주소를 명시하면
표현할 수 있는 정보의 가짓수가
2
16
2^{16}
2
1
6
으로 확 커진다
레지스터도 마찬가지
연산의 대상이 되는 데이터가 저장된 위치를
유효주소
라고 한다.
따라서 주소 지정 방식은 오퍼랜드 필드에 데이터가 저장된 위치를 명시할 때, 연산에 사용할 데이터 위치를 찾는 방법
즉, 유효 주소를 찾는 방법
(1) 즉시 주소 지정 방식
연산에 사용할 데이터를 오퍼랜드 필더에 직접 명시
빠르다는 장점
(2) 직접 주소 지정 방식
오퍼랜드 필드에 유효
주소를
직접적으로 명시하는 방식
무슨 메모리 몇번째에 있다
유효주소에 제한이 생길수도(연산 코드 만큼 짧아지니까)
(3) 간접 주소 지정 방식
유효
주소의 주소
를 오퍼랜드 필드에 명시
무슨 메모리 몇번째에 진짜 주소가 있다
직접 주소 지정 방식보다 표현할 수 있는 유효 주소의 범위가 넓어짐
두 번의 메모리 접근 → 느리다
(4) 레지스터 주소 지정 방식
직접 주소 지정 방식과 비슷하게 연산에 사용할 데이터를 저장한 레지서터를 오퍼랜드 필드에 명시
레지스터는 CPU 내부에 있기 때문에 레지스터에 접근하는 것이 더 빠름
하지만 표현할 수 있는 레지스터 크기에 제한 생길수 있음
(5) 레지스터 간접 주소 지정 방식
연산에 사용할 데이터를 메모리에 저장하고, 그 주소(유효 주소)를 저장한 레지스터를 오퍼랜드 필드에 명시
메모리 접근 횟수 한번으로 줄어든다 → 간접 주소 지정 방식과 차이이자 장점
3. 기계어와 명령어를 해석하기
MPU
CPU를 기능에 따라 나눈 종류 중 하나
Cache
자주 사용하는 데이터의 값을 미리 복사해놓는 임시 장소, 메모리 접근 지역성 이용
캐시를 통해 메모리 한계 극복 가능
시간 단축
MMU
CPU가 메모리에 접근하는 것을 관리하는 장치
물리 주소(Physical Memory)와 가상 주소(Virtual Memory)를 변환하는 역할
TLB (Translate Look-Aside Buffer)
고속의 보조기억장치
MPU가 MMU에게 Virtual Memory를 전송하면
MMU는 TLB를 참조하여
찾은 물리 주소로 물리 메모리의 데이터를 가져온다.
누디
팔로우
이전 포스트
Slide 6
다음 포스트
[컴퓨터구조] 컴퓨터의 구성
0개의 댓글
댓글 작성