Computer Architecture

이동화·2025년 7월 3일

Architecture

CPU, 저장 장치, GPU, NIC 등 '고유 기능'을 가진 컴퓨터를 구성하는 서로 다른 부품들을 하나의 '컴퓨터'라는 기계로 작동할 수 있게 하는 기본 설계

ISA (Instruction Set Architecture)

전체적인 컴퓨터 구조 중 CPU가 해석하고 사용하는 명령어의 집합이다. 프로그램을 실행하면 기계어로 된 명령어들을 CPU가 fetch-decode-execute 과정을 반복하는데, ISA는 이 일련의 과정을 정의한 것이라고 보면 된다.

  • CISC (Complex ISA)
    메모리 효율성에 초점을 맞춘 구조로, 한정된 메모리에 고밀도의 명령어를 담는다. (x86-64)
  • RISC (Reduced ISA)
    명령어의 길이가 CISC보다 짧고, 고정되어 있다. 이를 통해 CPU의 decode 속도를 높이고, 전력 효율을 높여 mobile, embedded에 주로 사용되는 형태이다. 다만 code의 크기는 커지고 CISC보다 구조가 상대적으로 복잡하다. (ARM, MIPS)

폰 노이만 구조

'Stored-program' 개념을 도입하여, 프로그램을 구성하는 명령어들을 임의 접근이가능한 메모리 상에 실행 순서대로 배열하고, 동시에 조건 분기를 무제한으로 허용하는 형태의 컴퓨터 구조.
실행 코드와 데이터가 구분되어 있지 않고 메모리에 혼재되어 있으며, OS가 실행 코드와 데이터를 분리한다.
CPU, Memory, Program 세 가지 구성요소를 기본으로 하고 있다. 이 때문에 컴퓨터에 다른 작업을 수행시키려면 HW 교체가 아닌, SW(Program) 교체만을 요구하여 범용성이 향상한다.
다만, 메모리의 값을 읽고 쓰는 구조이기 때문에 병목 현상이 발생하여, 메모리 계층 구조 (Register-cache-memory-disk), NUMA 등의 병목 현상 완화 기술들이 필요하다.
또한, 난수 생성에취약하다. 코드를 순차적으로 실행하는 것이기 때문에 정해진 입력에 따라 정해진 값만을 출력하는 Finite Automata 형식을 가진다. 이는 AI 기술과도 굉장히 동떨어져있는 부분.

CPU

연산을 처리하고 시스템을 관리하는 장치로,
산술/논리 연산을 처리하는 ALU (산술 논리 장치), CPU를 제어하는 Control Unit (제어 장치), 데이터를 저장하는 Register로 구성되어 있다.

Memory

용도에 따라 주기억장치와 보조 기억장치로 분류된다.
주기억 장치는 프로그램 실행 과정에서 필요한 데이터들을 임시로 저장하기 위한 것으로 RAM (Random Access Memory)아 대표적이고
보조 기억 장치로는 OS, 프로그램과 같은 데이터들을 장기적으로 보관하고자 할 때 사용되며 대표적으로 HDD, SSD가 있다.

Bus

컴퓨터 부품과 부품 사이, 컴퓨터와 컴퓨터 사이에 신호를 전송하는 통로로, 데이터가 이동하는 data bus, 주소를 지정하는 address bus, read/write를 제어하는 control bus 등이 있다.

x86-64

x86 아키텍처와 호환되는 64비트 아키텍처로, 64bit는 한 번에 처리할 수 있는 데이터의 크기이다.
레지스터 크기, ALU 연산 크기, 주소 크기, bus 대역폭을 의미하기도 한다. 이를 WORD라고 하며, 2byte 크기를 의미하는 WORD와는 다르다.
주소 크기가 64bit이면 이론상 16T 크기의 가상 메모리를 제공할 수 있어 가용 메모리 자원이 부족해서 소프트웨어의 성능을 내지 못하는 일은 발생하지 않는다.
x86의 경우 32bit 크기를 가지고 앞에 e가 붙는다.

  • 범용 register (x64 기준)
    rax : 함수의 반환 값
    rcx : count (반복 횟수, 연산 횟수)
    rsi : 데이터를 옮길 때 src를 가리킴
    rdi : 데이터를 옮길 때 dst를 가리킴
    rsp : 사용 중인 stack의 위치를 가리킴
    rbp : 스택의 base를 가리킴
    rip : 실행 중인 명령어 주소를 가리킴
  • segment register
    x86 상에서는 메모리를 세그먼트 단위로 접근하는 데 사용하는 레지스터로, 16 bit processor를 사용할 때 cs::offset 와 같은 형식을 통해 cs<<4+offset 주소에 접근하는 용도로 사용했다.
    x64에서는 cs, ds, ss 레지스터는 각각 code, data, stack 영역의 주소를 저장하는데 사용하고 그 외 es, fs, gs는 범용적인 용도로 사용한다.
  • flag register
    CPU가 연산을 수행한 후 결과의 상태를 저장하는 특수 레지스터로, 조건문, interrupt, 특수 연산 후 조건을 판단하는데 사용된다.
    CF : carry가 발생한 경우 (unsigned 연산에서 범위를 벗어남)
    ZF : 연산 결과가 0
    SF : 연산 결과가 음수
    OF : overflow (signed 연산에서 범위를 벗어남)
profile
notion이 나은듯

0개의 댓글