[시스템 해킹] 컴퓨터 구조와 ISA
컴퓨터 구조
컴퓨터 구조엔 기능 구조의 설계, 명령어 집합구조, 마이크로 아키텍처, 하드웨어 및 컴퓨팅 방법에 대한 설계등이 있다.
기능 구조의 설계에는 폰 노이만 구조, 하버드 구조, 수정된 하버드 구조 등이 있다.
폰노이만 구조는 중앙처리장치(CPU), 기억장치, 프로그램으로 이루어져 있고 버스라는 전자 통로를 사용해 장치간에 데이터나 제어 신호를 교환한다.
*CPU는 프로그램 연산을 처리한다. 산술논리장치(ALU), 제어장치, 레지스터 등으로 구성.
*기억장치는 주기억장치와 보조기억장치로 분류된다.
- 주기억장치는 프로그램 실행과정에서 필요한 데이터들을 임시로 저장하는데 사용되고 대표적으로 RAM이 있다.
- 보조기억장치는 운영 체제, 프로그램 등과 같은 데이터를 장기간 보관하고 대표적으로는 HDD, SSD가 있다.
ISA
ISA(Instruction Set Architecture)는 컴퓨터 또는 컴퓨터 제품 군의 CPU를 소프트웨어가 제어하는 방법을 정의한다.
대표적으로 ARM, MIPS, AVR, intel의 x86-64 등이 있다.
그 중에 x86-64 아키텍처에선?
‘64비트 아키텍처’'32비트 아키텍처'에서 64와 32는 CPU가 한번에 처리할 수 있는 데이터의 크기이다.
WORD라고도 쓰이고 WORD는 CPU의 설꼐에 따라 크기가 달라진다.
x86-64 아키텍처 : 레지스터
레지스터는 CPU가 데이터를 빠르게 저장하고 사용할 때 이용하는 보관소이다.
산술 연산에 필요한 데이터를 저장하거나 주소를 저장하고 참조한다.
x64 아키텍처에는 범용 레지스터, 세그먼트 레지스터, 명령어 포인터 레지스터, 플래그 레지스터가 존재한다.
범용 레지스터는 주 용도는 있으나, 그 외의 용도로도 자유롭게 사용할 수 있는 레지스터이다.
rax (accumulator register) | 함수의 반환 값 |
rbx (base register) | x64에서는 주된 용도 없음 |
rcx (counter register) | 반복문의 반복 횟수, 각종 연산의 시행 횟수 |
rdx (data register) | x64에서는 주된 용도 없음 |
rsi (source index) | 데이터를 옮길 때 원본을 가리키는 포인터 |
rdi (destination index) | 데이터를 옮길 때 목적지를 가리키는 포인터 |
rsp (stack pointer) | 사용중인 스택의 위치를 가리키는 포인터 |
rbp (stack base pointer) | 스택의 바닥을 가리키는 포인터 |
32비트에서는 eax, ebx, ecx, edx, esi, edi, esp, ebp로 표현
16비트에서는 ax, bx, cx, dx, si, di, sp, bp로 표현
세그먼트 레지스터는 과거에는 메모리 세그멘테이션이나, 가용 메모리 공간의 확장을 위해 사용됐으나, 현재는 주로 메모리 보호를 위해 사용, x64에는 cs, ss, ds, es, fs, gs 총 6가지 세그먼트 레지스터가 존재한다.
명령어 포인터 레지스터는 CPU가 어느 부분의 코드를 실행할 지 가리키는 역할을 한다.
플래그 레지스터는 프로세서의 현재 상태를 저장하고 있다.
자신을 구성하는 여러 비트들로 CPU의 현재 상태를 표현한다.
CF(Carry Flag) | 부호 없는 수의 연산 결과가 비트의 범위를 넘을 경우 설정 됩니다. |
ZF(Zero Flag) | 연산의 결과가 0일 경우 설정 됩니다. |
SF(Sign Flag) | 연산의 결과가 음수일 경우 설정 됩니다. |
OF(Overflow Flag) | 부호 있는 수의 연산 결과가 비트 범위를 넘을 경우 설정 됩니다. |
CPU의 하드웨어적 설계
CPU의 하드웨어적 설계는 마이크로 아키텍처라고 불리며 정의된 명령어 집합을 효율적으로 처리할 수 있도록, CPU의 회로를 설계하는 분야이다.
캐시 설계, 파이프라이닝, 슈퍼 스칼라, 분기 예측, 비순차적 명령어 처리 등이 있다.