컴퓨터의 기본 설계
컴퓨터가 효율적으로 작동할 수 있도록 HW 및 SW의 기능을 고안하고, 이들을 구성하는 방법
1. 컴퓨터의 기능 구조에 대한 설계
2. 명렁어 집합구조
3. 마이크로 아키텍쳐
4. 기타 하드웨어 및 컴퓨팅 방법에 대한 설계 등
Simple Concept
- CPU : 컴퓨터의 작동에 핵심이 되는 연산을 처리
- 저장장치 : 데이터를 저장하는 장치
- GPU : 그래픽 데이터 처리
- 랜카드 : 네트워크 통신 처리
- 사운드 카드 : 소리 데이터를 처리
효율적 연산을 위해 어떤 기능이 필요한지 고민하고 설계
[ 근대의 컴퓨터 ]
1. 연산과 제어를 위한 CPU
2. 저장을 위한 Memory
3. 장치간 데이터나 제어 신호를 교환할 수 있도록 Bus(전자통로)
설명
프로그램의 연산을 처리하고 시스템을 관리하는 컴퓨터의 두뇌
역할
'코드 불러오기 -> 실행 -> 결과 저장' 일련의 모든 과정 발생
구성
설명
컴퓨터 동작에 필요한 여러 데이터를 저장하기 위해 사용
분류 및 역할
설명
부품 <-> 부품 or 컴퓨터 <-> 컴퓨터 사이에 신호를 전송하는 통로
종류
기억장치만 사용 시 병목현상 이 발생한다.
병목현상 : 전체 시스템의 성능이나 용량이 하나의 구성 요소로 인해 제한을 받는 현상을 말한다.
따라서, CPU는 교환 속도를 획기적으로 단축하기 위해
Register와 Cash라는 저장장치를 자체적으로 가진다.
CPU가 해석하는 명령어의 집합을 의미
종류
IA-32, x86-64(x64), MIPS, AVR 등 다양하게 존재함
모든 컴퓨터가 동일한 수준의 연산 능력을 요구하지 않으며, 컴퓨팅 환경이 다양하기 때문임
고성능 프로세서를 설계하기 위해 사용
=> 전력 소모가 많고 발열이 심하다.
- 안정적인 전력 공급과 냉각 장치를 구비하는데 부담이 적은 Desktop이나 Laptop에 많이 사용
- 스마트폰, 드론, 공유기, 인공지능 스피커 등 크기가 작은 임베디드 기기들은 위의 단점을 해결하기 힘들다.
=> 전력 소모와 발열이 적은 ARM이나 MIPS 또는 AVR 프로세서를 사용한다.
Intel 의 64bit CPU Architecture
WORD가 크면 유리한 점?
현대의 PC는 대부분 64bit Architecture를 사용한다.
- 32bit Architecture의 CPU가 제공할 수 있는 가상메모리의 크기가 작기 때문이다.
가상메모리는 CPU가 프로세스에게 제공하는 가상의 메모리 공간이다.
32bit Architecture는 4GB가 최대 제공 가능 가상 메모리
" 4GB는 일상에서는 큰 불편이 없으나,
많은 메모리 자원을 소모하는 전문 SW, 고사양 게임 등 실행 시 부족 "
64bit Architecture의 경우 이론상 16EB의 가상 메모리 제공
x86-64 는 amd64로 표현하기도 한다.
설명
CPU가 데이터를 빠르게 저장하고 사용할 때 이용하는 보관소
산술 연산에 필요한 데이터를 저장하거나 주소를 저장하고 참조하는 등 다양한 용도로 사용
종류
용도
매우 다양함.
크기
x86-64에서 각각의 범용 레지스터는 8byte 저장 가능
부호 없는 정수를 기준으로 2^64 - 1 까지의 수를 나타낼 수 있다.
자주 사용되는 Reg와 용도
- rax(accumulator register) : 함수의 반환 값
- rbx(base register) : x64에서는 주된 용도 x
- rcx(counter register) : 반복문의 반복 횟수, 각종 연산의 실행 횟수
- rdx(data register) : x64에서는 주된 용도 x
- rsi(source index) : 데이터를 옮길 때 원본을 가리키는 포인터
- rdi(destination index) : 데이터를 옮길 때 목적지를 가리키는 포인터
- rsp(stack pointer) : 사용 중인 스택의 위치를 가리키는 포인터
- rbp(stack base pointer) : 스택의 바닥을 가리키는 포인터
Architecture가 확장되면서 용도에 큰 변화가 생긴 레지스터
종류
cs, ss, ds, es, fs, gs 총 6가지
크기
각 레지스터의 크기는 16bit
추가 설명
IA-32, IA-16에서는 물리 메모리의 크기를 키우려고 했다.
In x64
cs : 코드 영역을 가리킴
ds : 데이터 영역을 가리킴
ss : 스택 메모리 영역을 가리킴
나머지는 운영체제 별로 용도를 결정할 수 있도록 범용적인 용도로 제작됨.
역할
CPU가 어느 부분의 코드를 실행할지 가리키는 역할 수행
rip : 크기는 8byte이며, x64 Architecture의 대표 명령어 레지스터
역할
프로세서의 현재 상태를 저장
설명
자주 사용되는 FLAGS
CF(Carry Flag) : 부호 없는 수의 연산 결과가 비트의 범위를 넘을 경우 설정
ZF(Zero Flag) : 연산의 결과가 0인 경우 설정
SF(Sign Flag) : 연산의 결과가 음수일 경우 설정
OF(Overflow Flag) : 부호 있는 수의 연산 결과가 비트 범위를 넘을 경우 설정됨.
Ex)
a = 3, b= 5 일 때, a - b = 2로 음수가 나오고, 플래그는 SF가 나옴.
이때, CPU는 SF를 통해 a < b 를 알 수 있다.
x86-64 Architecture는 IA-32의 64비트 확장 Architecture라서 호환이 가능하다.
IA-32ㅔ서 CPU 레지스터들은 32비트의 크기를 가지며, 이들의 명칭은
eax, ebx, ecx, edx, esi, edi, esp, ebp
호환성을 위해 이 레지스터들은 x86-64에서도 사용 가능하다.
확장된 형태는
rax, rbx, rcx, rdx, rsi, rdi, rsp, rbp
eax는 rax의 하위 32bit를 의미한다.
아래의 그림을 참조하자
범용 레지스터(General Register)
- 주용도는 있으나, 그 외의 용도로 자유롭게 사용할 수 있는 레지스터
- x64에서는 rax, rbx, rcx, rdx, rsi, rdi, rsp, rbp 등이 존재
세그먼트 레지스터(Segment Register)
- 과거에는 메모리 세그멘테이션이나, 가용 메모리 공간의 확장을 위해 사용
- 현재는 주로 메모리 보호를 위해 사용되는 레지스터
- x64에는 cs, ds, ss, fs, gs 가 존재
플래그 레지스터( Flag Register)
- CPU 상태를 저장하는 레지스터명령어 포인터 레지스터(Instruction Pointer Register, IP)
- CPU가 실행해야할 코드를 가리키는 레지스터
- x64에는 rip가 존재
추가 공부에 도움되는 링크
Processor vs Porcess : https://blogger.pe.kr/422