Computer Architecture


컴퓨터의 기본 설계
컴퓨터가 효율적으로 작동할 수 있도록 HW 및 SW의 기능을 고안하고, 이들을 구성하는 방법

1. 컴퓨터의 기능 구조에 대한 설계
2. 명렁어 집합구조
3. 마이크로 아키텍쳐
4. 기타 하드웨어 및 컴퓨팅 방법에 대한 설계 등

Simple Concept

  • CPU : 컴퓨터의 작동에 핵심이 되는 연산을 처리
  • 저장장치 : 데이터를 저장하는 장치
  • GPU : 그래픽 데이터 처리
  • 랜카드 : 네트워크 통신 처리
  • 사운드 카드 : 소리 데이터를 처리

1. 컴퓨터의 기능 구조에 대한 설계

효율적 연산을 위해 어떤 기능이 필요한지 고민하고 설계

폰 노이만 구조

  • 초기 컴퓨터 과학자
  • 컴퓨터에 연산, 제어, 저장의 세가지 핵심 기능이 필요하다고 주장했다.

[ 근대의 컴퓨터 ]
1. 연산과 제어를 위한 CPU
2. 저장을 위한 Memory
3. 장치간 데이터나 제어 신호를 교환할 수 있도록 Bus(전자통로)

CPU

설명
프로그램의 연산을 처리하고 시스템을 관리하는 컴퓨터의 두뇌

역할
'코드 불러오기 -> 실행 -> 결과 저장' 일련의 모든 과정 발생

구성

  • 산술논리처리장치(ALU)
  • CPU 제어장치(Control Unit)
  • CPU에 필요한 데이터를 저장하는 레지스터(Register)
    Etc.

기억장치

설명
컴퓨터 동작에 필요한 여러 데이터를 저장하기 위해 사용

분류 및 역할

  • 주기억장치 : 프로그램 실행과정에서 필요한 데이터들을 임시로 저장 하기 위해 사용 (RAM)
  • 보조기억장치 : 운영체제, 프로그램 등과 같은 데이터를 장기간 보관 하기 위해 사용 (HDD, SSD)

BUS

설명
부품 <-> 부품 or 컴퓨터 <-> 컴퓨터 사이에 신호를 전송하는 통로

종류

  • 데이터가 이동하는 데이터 버스
  • 주소를 지정하는 주소 버스
  • 읽기/쓰기를 제어하는 제어 버스
  • 랜선이나 데이터 전송 소프트웨어, 프로토콜 등도 BUS 라 칭함.

기억장치가 있는데 Register가 왜 필요한가?

  • CPU는 빠른 속도로 연산 처리
  • 이를 위해서는 데이터의 빠른 교환이 필요
  • CPU의 연산 속도 >>> 기억장치와의 데이터 교환 속도

기억장치만 사용 시 병목현상 이 발생한다.

병목현상 : 전체 시스템의 성능이나 용량이 하나의 구성 요소로 인해 제한을 받는 현상을 말한다.

따라서, CPU는 교환 속도를 획기적으로 단축하기 위해
RegisterCash라는 저장장치를 자체적으로 가진다.

2. 명령어 집합 구조(ISA)

CPU가 해석하는 명령어의 집합을 의미

종류
IA-32, x86-64(x64), MIPS, AVR 등 다양하게 존재함

모든 컴퓨터가 동일한 수준의 연산 능력을 요구하지 않으며, 컴퓨팅 환경이 다양하기 때문임

Intel x86-64

고성능 프로세서를 설계하기 위해 사용
=> 전력 소모가 많고 발열이 심하다.

  • 안정적인 전력 공급과 냉각 장치를 구비하는데 부담이 적은 Desktop이나 Laptop에 많이 사용
  • 스마트폰, 드론, 공유기, 인공지능 스피커 등 크기가 작은 임베디드 기기들은 위의 단점을 해결하기 힘들다.
    => 전력 소모와 발열이 적은 ARM이나 MIPS 또는 AVR 프로세서를 사용한다.

3. x86-64 Architecture

Intel 의 64bit CPU Architecture

  • 64는 CPU가 한 번에 처리할 수 있는 데이터의 크기를 뜻함
  • WORD : CPU가 이해할 수 있는 데이터의 단위
  • WORD의 크기는 CPU가 어떻게 설계되었느냐에 따라 다르다.

WORD가 크면 유리한 점?
현대의 PC는 대부분 64bit Architecture를 사용한다.

  • 32bit Architecture의 CPU가 제공할 수 있는 가상메모리의 크기가 작기 때문이다.

가상메모리는 CPU가 프로세스에게 제공하는 가상의 메모리 공간이다.

32bit Architecture는 4GB가 최대 제공 가능 가상 메모리

" 4GB는 일상에서는 큰 불편이 없으나,
많은 메모리 자원을 소모하는 전문 SW, 고사양 게임 등 실행 시 부족 "

64bit Architecture의 경우 이론상 16EB의 가상 메모리 제공

x86-64 는 amd64로 표현하기도 한다.

x86-64의 Register

설명
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의 대표 명령어 레지스터

플래그 레지스터

역할
프로세서의 현재 상태를 저장
설명

  • RFLAGS라고 불리는 64bit 크기의 플래그 레지스터가 존재하며, 이는 과거 16 플래그 레지스터가 확장된 것
  • 플래그 레지스터는 자신을 구서하는 여러 bit 들로 CPU 현재 상태를 표현
  • RFLAGS는 64bit이므로 최대 64개의 플래그를 사용할 수 있지만, 실제로는 20여개만 사용

자주 사용되는 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

0개의 댓글