[Dreamhack]Computer Architecture

최윤지·2024년 1월 28일

System Hacking

목록 보기
1/9

컴퓨터 구조(Computer Architecture)

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

    • 폰 노이만 구조, 하버드 구조, 수정된 하버드 구조
  • 명령어 집합 구조(Instruction Set Architecture)
    : CPU의 명령어에 대한 설계

    • ARM, MIPS, AVR, 인텔의 x86 및 x86-64
  • 마이크로 아키텍처(Micro Architecture)
    : CPU의 하드웨어적 설계

    • 캐시 설계, 파이프라이닝, 슈퍼 스칼라, 분기 예측, 비순차적 명령어 처리
  • 하드웨어 및 컴퓨팅 방법론

    • 직접 메모리 접근

폰 노이만 구조

중앙처리장치(Central Processing Unit, CPU)

: 프로그램의 연산을 처리하고 시스템을 관리하는 컴퓨터의 두뇌(연산, 제어)

  • 산술논리장치(Arithmetic Logic Unit, ALU) : 산술/논리 연산 처리
  • 제어장치(Control Unit) : CPU 제어
  • 레지스터(Register) : CPU에 필요한 데이터 저장

기억장치(memory)

: 컴퓨터가 동작하는데 필요한 여러 데이터 저장(저장)

  • 주기억장치 : 프로그램 실행과정에서 필요한 데이터들을 임시로 저장하기 위해 사용
    • 대표적으로 램(Random-Access Memory, RAM)
  • 보조기억장치 : 운영체제, 프로그램 등과 같은 데이터를 장기간 보관하고자 할 때 사용
    • 대표적으로 하드 드라이브(Hard Disk Drive, HDD), SSD(Solid State Drive)

버스(bus)

: 컴퓨터 부품과 부품 사이 또는 컴퓨터와 컴퓨터 사이에 신호를 전송하는 통로(데이터나 제어 신호 교환)

  • 데이터 버스(Data Bus) : 데이터 이동
  • 주소 버스(Address Bus) : 주소 지정
  • 제어 버스(Control Bus) : 읽기/쓰기 제어
  • 이 외에도 랜선이나 데이터 전송 소프트웨어, 프로토콜 등

명령어 집합 구조(Istruction Set Architecture, ISA)

명령어 집합 구조
: CPU가 해석하는 명령어의 집합

프로그램을 실행하면 명령어들을 CPU가 읽고, 처리
(프로그램은 기계어로 이루어짐)

  • IA-32, x86-64(x64), MIPS, AVR 등

  • x86-64는 고성능 프로세서를 설계하기 위해 사용

    • 이를 기반으로 한 CPU들은 많은 전력 소모, 발열 심함 => 안정적으로 전력 공급 가능, 냉각 장치를 구비하는데 공간상의 부담이 크지 않은 데스크톱 또는 랩톱에 적합
    • 배터리를 사용하거나 크기가 작은 임베디드 기기들은 적합X => 전력 소모와 발열이 적은 ARM이나 MIPS 또는 AVR 프로세서 사용

x86-64 아키텍처

x86-64 : AMD가 개발한 x86과 호환되는 64비트 아키텍처(인텔의 32비트 CPU 아키텍처인 IA-32를 64비트로 확장)

  • Intel64, IA-32e, EM64T, AMD64라고도 불림

* n비트 아키텍처
n => CPU가 한번에 처리할 수 있는 데이터의 크기
ex ) 32비트 아키텍처, 64비트 아키텍처에서 32와 64

  • WORD : CPU가 이해할 수 있는 데이터의 단위
  • WORD가 클수록 최대로 제공 가능한 가상 메모리의 크기가 큼
    => 가상 메모리가 클수록 가용한 메모리 자원이 부족해서 소프트웨어의 최고 성능을 낼 수 없다거나 소프트웨어의 실행이 불가능한 상황이 거의 발생하지 않음

레지스터(Register)

레지스터
: CPU가 데이터를 빠르게 저장하고 사용할 때 이용하는 보관소

x64 아키텍처에 존재하는 레지스터↓

  • 범용 레지스터(General Register)
    : x86-64에서 각각의 범용 레지스터는 8바이트를 저장 가능

    ↓이 외에도 x64에는 r8, r9 , ... , r15까지의 범용 레지스터가 더 존재

    이름주용도
    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)스택의 바닥을 가리키는 포인터
  • 세그먼트 레지스터(Segment Register)

    • cs, ds, ss 레지스터 : 코드 영역과 데이터, 스택 메모리 영역을 가리킬 때 사용
    • es, fs, gs 레지스터 : 운영체제 별로 용도를 결정할 수 있도록 범용적인 용도로 제작된 세그먼트 레지스터
  • 명령어 포인터 레지스터(Instruction Pointer Register, IP)
    : CPU가 어느 부분의 코드를 실행할지 가리킴

    • x64 아키텍처의 명령어 레지스터는 rip(8바이트)
  • 플래그 레지스터(Flag Register)
    : 프로세서의 현재 상태를 저장

    • x64 아키텍처에서는 RFLAGS라고 불리는 64비트 크기의 플래그 레지스터 존재

      플래그의미
      CF(Carry Flag)부호 없는 수의 연산 결과가 비트의 범위를 넘을 경우 설정
      ZF(Zero Flag)연산의 결과가 0일 경우 설정
      SF(Sign Flag)연산의 결과가 음수일 경우 설정
      OF(Overflow Flag)부호 있는 수의 연산 결과가 비트 범위를 넘을 경우 설정

레지스터 호환

RAX(64비트) = 상위 32비트 + 하위 32비트(EAX)
EAX(32비트) = 상위 16비트 + 하위 16비트(AX)
AX(16비트) = 상위 8비트(AH) + 하위 8비트(AL)

0개의 댓글