Background : Computer Architecture
컴퓨터 구조(Computer Architecture)
컴퓨터가 효율적으로 작동할 수 있도록 하드웨어 및 소프트웨어의 기능을 고안하고, 이들을 구성하는 방법
컴퓨터의 기능 구조에 대한 설계, 명령어 집합구조, 마이크로 아키텍처, 그리고 기타 하드웨어 및 컴퓨팅 방법에 대한 설계 등이 포함된다.
컴퓨터의 기능 구조에 대한 설계
컴퓨터가 연산을 효율적으로 하기 위해 어떤 기능들이 컴퓨터에 필요한지 고민하고, 설계하는 분야
폰 노이만 구조, 하버드 구조, 수정된 하버드 구조가 있다.
폰 노이만 구조

폰 노이만 구조 : 연산과 제어를 위해 중앙처리장치(CPU)를, 저장을 위해 기억장치(memory)를 사용하고 장치간에 데이터나 제어 신호를 교환할 수 있도록 버스(bus)라는 전자 통로를 사용하는 구조
CPU : 프로그램의 연산을 처리하고 시스템을 관리하는 컴퓨터의 두뇌
산술/논리 연산을 처리하는 산술논리장치(ALU)와 CPU를 제어하는 제어장치, CPU에 필요한 데이터를 저장하는 레지스터 등으로 구성된다.
CPU의 연산속도가 기억장치와의 데이터 교환속도보다 압도적으로 빠르기 때문에 레지스터를 사용한다.
기억장치는 주기억장치와 보조기억장치로 분류된다.
주기억장치는 프로그램 실행과정에서 필요한 데이터들을 임시로 저장하기 위해 사용되며, 대표적으로 램(RAM)이 있다.
보조기억장치는 운영 체제, 프로그램 등과 같은 데이터를 장기간 보관하고자 할 때 사용되며, 대표적으로 하드 드라이브, SSD가 있다.
명령어 집합구조(ISA)
CPU의 명령어에 대한 설계
CPU가 처리해야하는 명령어를 설계하는 분야
ARM, MIPS, AVR, 인텔의 x86 및 x86-64 등이 있다.
x86-64 : 많은 전력을 소모하며, 발열도 상대적으로 심하지만 안정적으로 전력을 공급할 수 있기 때문에 냉각 장치를 구비하는데 공간상의 부담이 크지 않은 데스크톱 또는 랩톱에 적합하다.
ARM, MIPS, AVR : 전력 소모와 발열이 적어 드론, 공유기, 인공지능 스피커, 스마트폰과 같은 임베디드 장비에 적합하다.
x86-64 아키텍처
인텔의 64비트 CPU 아키텍처, 즉 WORD가 64비트인 아키텍쳐
범용 레지스터(General Register), 세그먼트 레지스터(Segment Register), 명령어 포인터 레지스터(Instruction Pointer Register, IP), 플래그 레지스터(Flag Register)가 있다.
범용 레지스터 : 주용도는 있으나, 그 외의 다양한 용도로 사용될 수 있는 레지스터
8바이트를 저장할 수 있으며, 부호 없는 정수를 기준으로 2^64 - 1까지의 수를 나타낼 수 있다.
세그먼트 레지스터 : s, ss, ds, es, fs, gs 총 6가지가 있음
과거에는 세그먼트 레지스터를 이용하여 사용 가능한 물리 메모리의 크기를 키우려고 했다.
현대의 x64에서 cs, ds, ss 레지스터는 코드 영역과 데이터, 스택 메모리 영역을 가리킬 때 사용되고, 나머지 레지스터는 운영체제 별로 용도를 결정할 수 있도록 범용적인 용도로 제작된다.
명령어 포인터 레지스터 : CPU가 어느 부분의 코드를 실행할지 가리키는 레지스터
x64 아키텍처의 명령어 레지스터는 rip이며, 크기는 8바이트이다.
플래그 레지스터 : 프로세서의 현재 상태를 저장하고 있는 레지스터
과거 16비트 → 현재 64비트(RFLAGS)
자신을 구성하는 여러 비트들로 CPU의 현재 상태를 표현한다.
플래그
|
의미
|
CF(Carry Flag)
|
부호 없는 수의 연산 결과가 비트의 범위를 넘을 경우 설정
|
ZF(Zero Flag)
|
연산의 결과가 0일 경우 설정
|
SF(Sign Flag)
|
연산의 결과가 음수일 경우 설정
|
OF(Overflow Flag)
|
부호 있는 수의 연산 결과가 비트 범위를 넘을 경우 설정
|
레지스터 호환
x86-64 아키텍처는 IA-32의 64비트 확장 아키텍처이므로 호환 가능하다.

마이크로 아키텍처
CPU의 하드웨어적 설계
정의된 명령어 집합을 효율적으로 처리할 수 있도록, CPU의 회로를 설계한다.
캐시 설계, 파이프라이닝, 슈퍼 스칼라, 분기 예측, 비순차적 명령어 처리 등이 있다.
퀴즈 풀면서 정리
rax: 0x0123456789abcdef
eax: 0x89abcdef
ax : 0xcdef
ah : 0xcd
al : 0xef
rax는 64비트 기준
eax는 32비트
ax는 16비트
ah,al는 8비트
ah(high)는 ax의 상위 8비트
al(low)는 ax의 하위 8비트