[CS]컴퓨터 구조..인데 주요 부품들에 대하여..(CPU, Main Memory, Cache……)

김민제·2024년 5월 3일
post-thumbnail
  • 오늘은 컴퓨터를 구성하는 부품들에 대해 알아보겠습니다!!!
  • 컴퓨터 구조론 수업을 듣다가 각 부품에 대하여 더 자세하게 알고 싶어져 글을 작성하였습니다!!
  • 처음으로는 각 부품들을 연결해주는 메인보드부터 알아보겠습니다!!

Main Board - 메인 보드

  • 메인 보드는 마더보드Mother Board)라고도 불리며 CPU, Main Memory, graphic card 등 컴퓨터를 작동시키는 여러 중요한 부품들이 연결됩니다.
  • 메인 보드는 제조사마다 규격이 다를 수도 있지만 표준은 있습니다. 보통 PC에서 쓰는 규격은 ATX규격(24.430.5)입니다. 다른 규격으로는 Micro-ATX(19.324.4, 24.4*24.4)등이 있습니다.
    Apple처럼 독자적인 규격을 사용하는 곳도 있습니다!!
  • 만약 조립형 컴퓨터 등을 구매할 때 본체의 크기 등도 중요하겠지만 메인보드를 어떤 규격을 구매하느냐에 따라 안에 들어가는 부품들의 크기도 달라지게 됩니다. 예를 들어 Micro-ATX를 구매하여 GPU를 넣는다면 크기가 작기 때문에 그 사이즈에 맞는 GPU를 구매해야하는 의존 관계가 발생할 것입니다.

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

  • 컴퓨팅 자원에서 대표적인 연산 장치로 사람으로 따지면 연산을 하는 뇌와 같은 기능을 합니다.
  • CPU를 기계적인 관점에서 바라본다면 트랜지스터의 집합이라고 볼 수 있습니다. 트랜지스터는 0과 1로 구분되는 기계적인 신호를 표현하는 소자입니다. CPU는 이러한 트랜지스터를 몇 개 집적해놓았느냐에 따라 성능의 차이를 보이게 됩니다. 최신 CPU인 Ryzen사의 7000시리즈 제품은 트랜지스터 집적도가 약 100억개라고 합니다.
  • 주어진 명령에 따라서 더하기와 같은 연산이나 데이터의 내용을 메모리에서 CPU로 가져오는 것과 같은 연산을 합니다. 코드를 한 줄씩 해석하여 처리하는 것도 CPU가 합니다.
  • 많은 연산을 고속으로 처리하기 때문에 많은 열이 발생합니다. 이러한 열을 해소해주기 위해 방열판과 프로펠러 등을 사용합니다.

코어(core)

  • 과거에는 하나의 CPU에 하나의 코어만 존재하였습니다. 하지만 기술의 발전으로 CPU에는 다량의 코어를 탑재할 수 있게 되었습니다. 코어의 수에 따라 CPU는 여러 일을 병렬적으로 처리할 수 있게 되었습니다.
  • 예를 들어 코어를 도로에 비유하고 작업을 차량에 비유한다면 여러 코어가 생긴 것은 도로가 여러개 뚫린 것이고 그 도로로 여러 차량이 한 번에 다닐 수 있게 된 것입니다.
  • 또한 코어 안에서도 소프트웨어적으로 쓰레드를 가상으로 분리하여 더욱 많은 작업을 병렬적으로 처리할 수 있게 되었습니다.
  • 하지만 단순히 코어와 쓰레드가 많다고 좋은 CPU는 아니고 제조사 모델마다 용도에 따른 최적화된 속도가 다르기 때문에 적절한 CPU를 잘 알아보는 것도 중요합니다!

레지스터(Register)

  • 레지스터는 CPU 안에 자리하고 있고 지연시간이 0.1ns정도의 수준으로 매우 짧아 요청과 실행 시간의 지연이 거의 없는 고속 장치입니다. 여기서 지연 시간(Latency)은 어떠한 요청을 했을 때부터 일을 시작하기까지의 시간입니다.
  • CPU의 작동을 제어하기 위해 사용되고 여러 기준으로 종류가 구분됩니다. 용도에 따라 전용 레지스터와 범용 레지스터로 구분되기도 하고 저장되는 정보에 종류에 따라 데이터 레지스터, 주소 레지스터, 상태 레지스터로 나뉘기도 합니다 사용자의 정보 변경 가능 유무에 따라 사용자가 변경할 수 있는 가시 레지스터와 사용자가 임의로 변경할 수 없는 불가시 레지스터로 구분됩니다.
  • 사용자가 변경할 수 있는 가시 레지스터와 사용자가 임의로 변경할 수 없는 불가시 레지스터를 알아보겠습니다.

사용자 가시 레지스터

  • 데이터 레지스터(DR) : CPU가 명령어를 처리하는데 필요한 일반 데이터를 임시로 저장하는 범용 레지스터입니다.
  • 주소 레지스터(AR) : 데이터나 명령어가 저장된 주소를 저장합니다.

사용자 불가시 레지스터

  • 프로그램 카운터(PC) : 다음으로 실행할 명령어의 위치 정보(코드 행번호, 메모리 주소 등)를 저장합니다.

  • 명령어 레지스터(IR) : 현재 실행중인 명령어를 저장합니다.

  • 메모리 주소 레지스터(MAR) : 메모리 관리자가 접근해야할 메모리 주소를 저장합니다.

  • 메모리 버퍼 레지스터(MBR) : 메모리 관리자가 메모리에서 가져온 데이터를 임시로 저장합니다.

  • 프로그램 상태 레지스터(PSR) : 연산 결과를 저장합니다.

  • 또한 CPU에는 크게 x86, ARM 두 가지 흐름이 있습니다.

x86(CISC)

  • intel에서 개발한 CPU의 표준안으로 일반적으로 PC에서 사용하는 CPU들은 x86의 명령어 셋을 호환하고 있습니다. 만약 이러한 표준안을 따르지 않고 intel과 AMD가 동일한 명령어 셋을 지원하지 않는다면 프로그램을 만들 때마다 각각의 환경에서 구동되는 프로그램을 따로 만들어야 할 것입니다.
  • intel i시리즈, AMD Ryzen 시리즈 등이 여기에 속합니다.
    • i시리즈나 Ryzen시리즈는 뒤의 숫자가 높을수록 성능이 좋습니다. 하지만 매년 새로운 세대의 CPU가 출시되기 때문에 성능 차이가 지속적으로 발생하게 됩니다. 어떤 경우에서 극단적으로 보면 최신 세대의 i3가 이전 세대의 i7보다 성능이 좋을 때도 있습니다. 그래서 CPU를 볼 때 출시 년도를 확인해봐야 합니다!!

ARM(RISC)

  • ARM의 경우 구조가 단순하여
  • Samsung Exynos, Apple A16, M 시리즈, Qualcomm Snapdragon 등이 여기에 속합니다.

캐시 메모리(Cache Memory)

  • 캐시 메모리는 CPU와 메인 메모리 사이에 위치한 고속 기억장치로 CPU가 메인 메모리의 특정 주소에 접근할 때 먼저 캐시 메모리를 읽어내어 접근 속도를 높이는게 목적인 장치입니다.
  • 특히 대규모 컴퓨터에서는 CPU와 주 기억장치의 물리적 거리가 멀어 전송 시간이 길어지게 되기 때문에 캐시메모리를 이용하여 CPU와 주 기억장치의 속도 차이로 인한 성능 저하를 막습니다.
  • 동작 과정은 다음과 같습니다.
    1. CPU가 데이터를 읽어야할 때 메인 메모리를 가기 전 캐시 메모리를 먼저 검색해봅니다.
    2. 캐시 메모리에 데이터가 있다면 바로 데이터를 가져오거나 전달합니다.
    3. 데이터가 없다면 메인 메모리에서 블록 단위로 가져와 확인합니다.
    4. CPU에는 워드 단위로 전송됩니다.
  • 보통 SRAM(Static Memory)으로 구성되지만 DRAM(Dynamic RAM)을 사용한 캐시 메모리도 있습니다.
  • 또한 캐시 메모리는 속도에 따라 L1 캐시, L2 캐시, L3 캐시 등으로 구분되며 숫자가 작을수록 용량이 작고 빠르며 숫자가 클수록 용량이 크고 느립니다. CPU와 물리적으로 가까울수록 상위 레벨 캐시로 취급되고 멀수록 하위 레벨 캐시로 취급됩니다.
  • 보통 L1캐시와 RAM의 지연 시간 차이가 약 100배정도 된다고 합니다.

저장 장치 계층 구조

  • 컴퓨터의 성능 향상을 위해서 메모리 확장이나 캐시를 늘려 캐시 적중률을 높이는 등의 방법을 사용할 수도 있습니다. 하지만 이러한 방법들은 비용적으로나 물리적으로 한계가 명확하기 때문에 이를 타협하기 위한 저장 장치 계층 구조가 있습니다.
  • 속도가 빠른 장치들은 CPU와 가깝게, 속도가 느린 장치들은 CPU와 멀게 배치하여 데이터 접근의 효율성을 극대화 할 수 있습니다. 또한 이는 데이터의 일관성을 유지하는 것도 중요합니다.

Main Memory - 주 기억장치

  • 전원이 인가되지 않으면 데이터가 사라지고 CPU와 긴밀하게 작동하여 빠른 속도로 작업을 처리합니다.
  • 메인 메모리는 연산의 결과나 연산에 필요한 데이터를 담아놓습니다.
  • 예를 들어 CPU 연산 장치가 두 개의 숫자만 더하는 기능이 있다면 1+2의 연산은 쉽게 할 수 있을 것입니다. 하지만 1+2+3+4+5의 연산을 한다면 과정은 다음과 같을 것입니다.
    숫자를 기록하는 메모리 공간 A 할당 후 A = 0으로 초기화
    A + 1 => A
    A + 2 => A
    A + 3 => A
    A + 4 => A
    A + 5 => A
  • 위와 같이 CPU는 2개의 연산만 할 수 있어도 메모리와 협업하여 그 이상의 수의 연산도 할 수 있게 됩니다.

RAM(Random Access Memory)

  • 임의 접근 기억장치로 “어느 위치에든 똑같은 속도로 접근하여 읽고 쓸 수 있다”라는 의미의 주 기억 장치입니다. 위에서 말했듯이 휘발성의 특징을 가지고 있습니다.
  • DDR3, DDR4와 같은 규격으로 성능을 표현하기도 합니다.

보조 기억 장치

  • 전원이 인가되지 않아도 데이터가 남아있는 메모리이며 대용량의 데이터를 저장하기 위한 메모리입니다.

HDD (Hard Disk Drive)

  • 이름에서 알 수 있듯이 디스크(원반)이 있기 때문에 원반을 물리적인 모터로 돌리며 내가 접근하고자 하는 곳의 위치를 찾아갈 수 있게 됩니다.
  • 물리적인 이동, 시간이 데이터 접근에 관여가 되기 때문에 성능에 손해가 많습니다.

SSD(Solid State Drive)

  • 물리적인 장치가 없이 내부적으로 플래시, 메모리, 셀들로만 구성이 되어있어 빠른 접근 속도를 가지고 있습니다.
  • SSD는 메인 보드에 SATA라는 규격을 통해 케이블에 연결이 되어 나머지 컴포넌트들(CPU, 메모리)과 통신하며 데이터를 저장하고 읽는 등의 작업을 수행합니다.
  • 요즘은 고성능으로 나오는 M.2 NVMe SSD와 같은 규격도 있습니다. 이는 SATA와 물리적인 모양도 다르고 실제 대역폭도 달라 성능이 더 좋습니다. 최신 노트북들은 NVMe기반 SSD가 장착되어 나오는 것들도 많습니다!

그래픽 카드

  • 그래픽 카드는 전통적인 출력 장치입니다.
  • 그래픽 카드는 메인 보드에 PCIe 4.0(PCI express slot) 규격을 따르는 형태로 만들어져 있습니다. 그래픽 카드는 PCI express slot에 장착되어 다른 부품들과 통신하며 그래픽을 출력합니다.
  • 전통적인 그래픽 카드의 그래픽을 출력하는 과정은 다음과 같습니다.
    CPU - 화면에 그려질 개별 요소들의 정보 계산(Rendering)
    -> 메모리 - 계산 결과 저장(, 메모리에는 우리가 보고 있는 화면 한 장이 저장됨)
    -> 그래픽 카드 - 이를 모니터에 전달하여 화면을 띄움

GPU(Graphics Processing Unit)

  • 하지만 요즘 나오는 그래픽 카드에는 고성능의 GPU(Graphics Processing Unit)가 장착되어 있습니다. 그래서 화면 요소들의 정보 계산을 CPU가 하지 않고 그래픽 카드 내부의 GPU가 처리하게 됩니다.
  • 그래픽 카드의 경우 해야할 연산이 제한적이기 때문에 제한적인 연산을 수행할 수 있도록 GPU 코어를 구성하고 GPU 코어를 여러 개 배치시켜둔다면 동시에 병렬 작업이 처리 가능합니다. 2024년 출시될 NVIDIA의 RTX 5090은 24,576개의 코어로 구성된다고 합니다!!! 일반적으로 사용하는 CPU의 갯수가 보통 4~8개인 것을 생각한다면 엄청난 숫자라는 것을 알 수 있고 이는 병렬 연산이 엄청나게 빠른 속도로 일어날 수 있다는 것을 의미합니다.
  • 그래서 굉장히 고성능의 그래픽 랜더링이 가능하여 고해상도에 높은 픽셀 수를 가진 데이터들도 빠르게 화면에 출력할 수 있습니다.또한 GPU 내부에 메모리가 존재하기 때문에 랜더링된 이미지가 메모리에 바로 기록될 수 있습니다.
  • GPU의 그래픽 출력 과정은 다음과 같습니다.
    GPU(Graphics Processing Unit) - 각 픽셀 단위로 그래질 정보 병렬 계산(Rendering)
    -> GPU 메모리 - 계산 결과 저장(, 메모리에는 우리가 보고 있는 화면 한 장이 저장됨)
    -> 그래픽 카드 - 이를 모니터에 전달하여 화면을 띄움
  • 이러한 고성능의 GPU를 그림 출력에만 사용하는 것은 아깝기 때문에 출력 장치의 역할을 넘어 대량의 연산을 병렬로 처리하는 연산 장치의 역할도 하고 있습니다. 이렇게 범용적으로 사용할 수 있는 GPU를 GPGPU(General Purpose GPU)라고 합니다. 위에서 말한 RTX 5090같은 장치도 GPGPU입니다.
  • 요즘 많이 사용되는 AI 딥러닝에서 병렬로 많은 학습을 수행하기 위해 GPU를 많이 사용하고 있습니다. 작년 학과에서 진행하였던 머신러닝 프로젝트에서 Jupyter Notebook을 통하여 학습을 진행하였는데 여기서도 GPU사용이라는 기능을 쓰면 학습 속도가 수십배로 빨라지는 것을 확인할 수 있었습니다.(Jupyter Notebook에서 GPU 사용 기능을 하루종일 쓰려면 유료 결제를 해야한다는 단점도 있었습니다.….)
  • 또한 블록 체인에서도 마이닝을 한다라는 표현이 있는데 이러한 연산들도 해시 함수를 구동시키는 기초적인 수학 연산이 기본이기 때문에 GPU를 많이 사용합니다.

정리

  • 이번에는 컴퓨터를 구성하는 주요 부품들에 대하여 알아보았습니다!!
  • 이를 공부하니 컴퓨터 구조에 대하여 더 자세하게 공부해보아야 되겠다라는 생각이 드는 것 같습니다!!
  • 다음 포스팅에서는 더 자세하거나 기본적인 컴퓨터 구조에 대해서 공부해보겠습니다!!
profile
블로그 이전했습니다!! 👉 https://alswp006.github.io/

0개의 댓글