본문으로 건너뛰기

버그 제보

이상한 점을 알려 주시면 고칠게요. 지금 보고 있는 페이지와 브라우저 정보가 함께 담겨요.

페이지:

Computer Science

컴퓨터 시스템의 기본 구성

작성 2026. 10. 13.추가
목차16개 항목
출처와 참고

「컴퓨터 구조를 알아야 하는 이유」, 「네 가지 핵심 부품과 시스템 버스」 절과 「클럭과 멀티코어」·「코어와 스레드」 절의 일부는 강민철의 「혼자 공부하는 컴퓨터 구조+운영체제」 강의(한빛미디어)를 바탕으로 보강했다. 「CPU 성능은 무엇으로 재나」 절은 fru1tworld/cs-basic 모의 면접 질문 목록을 점검해 빠진 개념을 보강했다.

현대 컴퓨터는 "계산하는 CPU + 프로그램과 데이터를 기억하는 메모리 + 오래 보관하는 저장 장치"라는 단순한 틀 위에 서 있다. 이 틀이 어떻게 생겨났는지 역사를 따라가 보면 각 부품의 역할이 자연스럽게 이해된다.

컴퓨터 구조를 알아야 하는 이유

프로그래밍 언어의 문법만으로는 풀리지 않는 문제가 있다. 컴퓨터 구조와 운영체제는 그 아래층, 즉 코드가 하드웨어에서 실제로 어떻게 실행되는지를 다룬다.

얻는 것설명
문제 해결 능력문법상 문제없는 코드가 다른 환경에서 동작하지 않을 때, 원인은 대개 언어 밖(하드웨어, OS, 실행 환경)에 있다. 컴퓨터를 입력하면 결과가 나오는 미지의 상자가 아니라 분석할 수 있는 대상으로 보고 내부를 따라가 원인을 찾는다
성능·용량·비용 판단서비스를 올릴 서버는 무조건 싼 것도, 무조건 최신인 것도 답이 아니다. 클라우드를 써도 CPU 종류, 메모리, 스토리지를 직접 고르고 그에 따라 비용이 달라진다. 코드에 필요한 성능·용량을 스스로 가늠하려면 각 부품의 특성을 알아야 한다

컴퓨터의 발전 과정

스위치 부품의 세대교체와 프로그램 입력 수단의 변천 같은 더 긴 흐름은 컴퓨터의 역사에 있다.

ENIAC (1946)

  • 에커트와 모클리가 만든, 프로그래밍이 가능한 초기 전자식 컴퓨터.
  • 다만 소프트웨어를 "저장"하는 개념이 없어서, 작업을 바꿀 때마다 사람이 직접 전선을 다시 꽂아 회로를 바꿔야 했다.

폰 노이만과 프로그램 내장 방식

  • 프로그램도 데이터처럼 메모리에 저장해 두면 CPU는 그것을 읽어 계산만 하면 된다는 아이디어(stored-program).
  • 이로써 계산하는 CPU / 명령을 담은 소프트웨어 / 그것을 저장하는 하드웨어라는 구성 체계가 자리 잡았다. 오늘날 대부분의 컴퓨터가 이 구조를 따른다.

논리 회로와 CPU

  • 전구를 켜고 끄는 것처럼, 스위치의 on/off(1/0)에 약속된 의미를 부여하면 정보를 표현할 수 있다.
  • 이런 스위칭으로 논리 연산을 구현한 것이 논리 회로이고, CPU는 엄청난 수의 논리 회로로 이루어져 있다.

집적회로 (1958, 잭 킬비)

  • 트랜지스터, 저항, 커패시터 같은 부품을 반도체 공정으로 한 칩에 함께 만드는 IC(Integrated Circuit)를 고안했다.
  • 덕분에 회로를 극도로 작게 만들 수 있게 되었고, 오늘날의 소형 CPU로 이어졌다.

컴퓨터의 기본 구조

flowchart LR
  inp["입력"] --> sys
  subgraph sys[" "]
    cpu["CPU (제어 장치 + 연산 장치)"] <--> mem["메모리"] <--> io["I/O"]
  end
  sys --> outp["출력"]
구성 요소역할
CPU연산 장치(ALU)가 계산을, 제어 장치가 명령 해석과 흐름 제어를 맡는다. 스스로는 기억 공간이 거의 없어 메모리가 필요하다.
메모리(RAM)실행 중인 프로그램과 데이터를 0/1로 기억한다. 전원이 꺼지면 사라진다(휘발성).
저장 장치(HDD/SSD)전원이 꺼져도 남는 대용량 영구 저장소. 당장 쓰는 부분만 RAM으로 올린다.

네 가지 핵심 부품과 시스템 버스

컴퓨터가 이해하는 정보는 0과 1로 된 두 가지다. 명령어는 데이터를 움직이고 컴퓨터를 작동시키는 정보이고, 데이터는 명령어의 재료가 되는 숫자·문자·이미지 같은 정보다. 아두이노든 서버든 이 정보를 다루는 핵심 부품은 네 가지로 같다.

부품역할
CPU메모리의 명령어를 읽고 해석해 실행한다. 안에 ALU(계산), 레지스터(작은 임시 저장소), 제어장치(명령어 해석과 제어 신호 발생)가 있다.
메모리(주기억장치)현재 실행 중인 프로그램의 명령어와 데이터를 저장한다. 프로그램이 실행되려면 반드시 메모리에 있어야 하고, 각 값의 위치는 주소로 찾는다. 주기억장치에는 RAM과 ROM이 있지만 보통 「메모리」는 RAM을 가리킨다.
보조기억장치HDD·SSD·USB 메모리처럼 전원이 꺼져도 남는 장치. 보관할 프로그램을 저장한다.
입출력장치키보드·마우스·스피커처럼 외부와 정보를 주고받는다. 보조기억장치도 넓게 보면 메모리를 보조하는 특별한 입출력장치라, 둘을 묶어 주변 장치라고도 부른다.

크기가 달라도 구성은 같다. 데스크톱은 메인보드에 CPU(발열 때문에 쿨러 아래에 있다)·RAM·SSD를 꽂고 USB 포트로 입출력장치를 잇는다. 라즈베리 파이는 손바닥만 한 보드에 CPU와 RAM이 붙어 있고 SD 카드가 보조기억장치를 맡는다.

이 부품들은 메인보드(마더보드)에 꽂히고, 메인보드 안의 버스라는 통로로 정보를 주고받는다. 그중 네 부품을 잇는 가장 중요한 버스가 시스템 버스다.

시스템 버스주고받는 것
주소 버스읽거나 쓸 주소
데이터 버스명령어와 데이터
제어 버스메모리 읽기·쓰기 같은 제어 신호

CPU가 메모리의 값을 읽을 때:

sequenceDiagram
  participant CPU
  participant MEM as 메모리
  CPU->>MEM: 1. 제어 버스로 '메모리 읽기' 신호를 보낸다
  CPU->>MEM: 2. 주소 버스로 읽을 주소를 보낸다
  MEM-->>CPU: 3. 그 주소의 내용을 데이터 버스로 돌려준다
  Note over CPU: CPU의 레지스터에 저장

쓸 때는 정보가 세 가지 필요하다. 어디에(주소 버스), 무엇을 할지(제어 버스의 '메모리 쓰기'), 무엇을(데이터 버스)이다. 네 부품이 함께 명령어 두 개를 실행하는 흐름은 다음과 같다.

sequenceDiagram
  participant CU as 제어장치
  participant MEM as 메모리
  participant REG as 레지스터
  participant ALU
  Note over MEM: 1번지: 더하라 3번지, 4번지<br/>2번지: 결과를 5번지에 저장하라<br/>3번지: 120<br/>4번지: 100
  CU->>MEM: 1. 1번지에 '메모리 읽기'
  MEM-->>REG: 명령어가 레지스터로 온다
  Note over CU: 2. 해석: 3번지와 4번지 값이 필요하다
  CU->>MEM: 다시 '메모리 읽기'
  MEM-->>REG: 120, 100이 레지스터로
  REG->>ALU: 3. 120 + 100 = 220을 계산
  ALU-->>REG: 220을 레지스터에 둔다
  CU->>MEM: 4. 2번지 명령어를 읽어 해석
  CU->>MEM: '메모리 쓰기' 신호, 주소 5번지, 데이터 220을 보낸다

실제 CPU는 이보다 단계가 많다. 명령어를 가져오는 경로(PC·MAR·MBR·IR)는 CPU와 명령어 구조에 있다. 버스의 폭과 대역폭, 동기식·비동기식 버스, 여러 장치가 버스를 동시에 원할 때의 버스 중재는 입출력 구조와 시스템 버스에 있다.

속도 계층

flowchart RL
  dk["디스크<br/>느림 (수십~수천 배 차이)"] --> dr["메인 메모리(DRAM)"] --> ca["캐시(SRAM)<br/>빠름"] --> cpu["CPU"]

데이터는 디스크 → 메모리 → 캐시를 거쳐 CPU에 전달된다. 위로 갈수록 빠르고 비싸며 용량이 작다. 캐시에 쓰는 SRAM과 주기억장치에 쓰는 DRAM의 차이를 비롯한 자세한 내용은 메모리 계층 구조에 있다.

클럭과 멀티코어

  • CPU는 클럭에 맞춰 "메모리에서 읽기 → 계산 → 결과 쓰기"를 반복한다.
  • 클럭 속도는 1초에 클럭이 반복되는 횟수로, 헤르츠(Hz)로 잰다. 2.5GHz면 1초에 25억 번이다. 클럭이 빠를수록 명령어 사이클을 빨리 돌기 때문에 클럭 속도는 CPU 속도의 단위처럼 쓰인다. 다만 항상 일정하지는 않아서, 부하가 클 때 순간적으로 높이기도 하고 최대치 이상으로 끌어올리는 것을 오버클럭킹이라 한다. 클럭만 높이면 발열이 커지므로 코어와 스레드를 늘리는 방식이 함께 발전했다.
  • 멀티코어(듀얼 코어 등): 여러 코어로 작업을 나눠 병렬로 처리한다.
    • 코어를 늘려도 성능이 비례해 오르지는 않는다. 전력 소모와 발열이 커지고, 프로그램 중 병렬화할 수 없는 부분이 전체 속도 향상의 상한을 정하기 때문이다(아래 「암달의 법칙」).
    • 작업을 코어마다 고르게 나누지 못하면 일부 코어만 바쁘고 나머지는 논다. 처리할 일 자체가 코어 수보다 적어도 코어를 더 늘린 효과가 없다. 멀티코어 성능은 일을 얼마나 고르게 나누느냐에 달려 있다.

코어와 스레드

코어는 명령어를 실행하는 하드웨어 부품이다. 예전에 "CPU"라고 부르던 단위가 이제 CPU 안의 코어 하나에 해당한다. 8코어 CPU는 명령어 실행 부품을 8개 가진 CPU다.

스레드는 "실행 흐름의 단위"인데, 하드웨어와 소프트웨어에서 뜻이 다르다.

구분의미예
하드웨어 스레드코어가 OS에 보여 주는 논리 프로세서 하나. 자기 아키텍처 상태를 가진다인텔의 하이퍼스레딩. 2코어 4스레드 CPU
소프트웨어 스레드프로그램 안에서 독립적으로 실행되는 흐름Java·Python으로 만드는 스레드(프로세스와 스레드)
  • 하드웨어 스레드를 만드는 기술이 SMT(동시 멀티스레딩, 인텔 이름은 하이퍼스레딩)다. 코어가 프로그램 카운터·레지스터 같은 아키텍처 상태만 여러 벌 두고, 실행 유닛·캐시는 스레드끼리 나눠 쓴다. OS에는 코어마다 논리 프로세서가 여러 개로 보이지만, 처리량이 그 배수로 늘지는 않는다. 한 스레드가 메모리를 기다리며 비워 둔 실행 유닛을 다른 스레드가 채워 사용률을 높이는 기술이다(현대 CPU의 마이크로아키텍처).
  • 실행 중인 프로그램은 코어와 하드웨어 스레드가 몇 개인지 알지 못한다. 명령어를 동시에 몇 개씩 처리해 주는지만 느끼므로, 하드웨어 스레드 수가 곧 프로그램이 보는 CPU 수다. 윈도우 작업 관리자가 코어 수와 별도로 「논리 프로세서」 수를 보여 주는 이유다.
  • 두 스레드 개념은 서로 독립이다. 1코어 1스레드 CPU에서도 소프트웨어 스레드를 여러 개 실행할 수 있다. 운영체제가 스레드들을 아주 빠르게 번갈아 실행해 동시에 도는 것처럼 보이게 한다(프로세스 상태와 CPU 스케줄링).
  • 전력 효율을 위해 SMT를 빼는 설계도 있어, 인텔 Core Ultra 200 계열(Lunar Lake·Arrow Lake, 2024)은 코어당 스레드가 하나다.
용어한 줄 정의
멀티코어 프로세서명령어를 실행하는 부품(코어)을 2개 이상 가진 CPU
멀티스레드(SMT) 프로세서코어 하나가 여러 하드웨어 스레드의 명령어를 섞어 실행하는 CPU

CPU 성능은 무엇으로 재나

프로그램 하나를 실행하는 데 걸리는 CPU 시간은 세 요소의 곱이다.

CPU 시간 = 명령어 수 × CPI × 클럭 주기 = 명령어 수 × CPI ÷ 클럭 속도
지표뜻무엇이 정하나
클럭 속도 (Hz)1초에 도는 클럭 수반도체 공정, 전력·발열 한도
CPI (Cycles Per Instruction)명령어 하나에 평균 몇 클럭이 드나마이크로아키텍처, 캐시 미스·분기 예측 실패
IPC (Instructions Per Cycle)한 클럭에 평균 몇 명령어를 끝내나. CPI의 역수슈퍼스칼라 폭, 비순차 실행(현대 CPU의 마이크로아키텍처)
명령어 수프로그램이 실행하는 명령어 개수알고리즘, 컴파일러, ISA
  • 클럭만으로 CPU를 비교할 수 없다. 클럭이 같아도 IPC가 높은 코어가 같은 시간에 더 많은 일을 한다. 클럭 경쟁이 발열 때문에 수 GHz에서 멈춘 뒤로, 세대 간 성능 향상은 주로 IPC와 코어 수에서 나온다.
  • IPC는 같은 CPU에서도 프로그램마다 크게 다르다. 캐시 미스가 잦은 포인터 추적 코드는 1에 못 미치고, 잘 짠 수치 코드는 3~4를 넘기도 한다. Linux perf stat이 instructions와 cycles를 세어 IPC를 보여 준다. IPC가 낮으면 계산보다 메모리를 기다리는 시간이 길다는 신호다.
  • 초당 명령어 수(MIPS)는 ISA마다 명령어 하나가 하는 일이 달라 서로 다른 CPU를 비교하는 지표로 부적절하다.

암달의 법칙

프로그램에서 병렬화할 수 있는 비율을 P, 코어 수를 N이라 하면 전체 속도 향상은 다음과 같다.

속도 향상 = 1 ÷ ((1 − P) + P ÷ N)
 
P = 0.9, N = 16  → 1 ÷ (0.1 + 0.05625) = 6.4배
P = 0.9, N = ∞   → 1 ÷ 0.1 = 10배가 상한

순차 부분 10%가 코어를 아무리 늘려도 넘지 못하는 벽을 만든다. 실제 순차 구간은 락으로 직렬화된 임계 구역, 작업 분배와 결과 합치기, 공유 자원 경합에서 생긴다. 구스타프슨의 법칙은 관점을 바꿔, 코어가 늘면 문제 크기도 함께 키운다고 본다(같은 시간에 더 큰 데이터를 처리). 그러면 병렬 부분의 비중이 커져 확장성이 선형에 가까워진다. 암달은 「정해진 일을 얼마나 빨리 끝내나」, 구스타프슨은 「같은 시간에 얼마나 많은 일을 하나」를 본다.

벤치마크

종류재는 것예
마이크로벤치마크함수 하나, 연산 하나의 비용Google Benchmark, JMH
표준 벤치마크 모음실제 프로그램을 모은 작업 부하로 CPU·시스템 비교SPEC CPU(정수·부동소수점), Geekbench
애플리케이션 부하 테스트실제 서비스의 처리량과 지연TPC(데이터베이스), 웹 서버 부하 테스트

측정은 워밍업 뒤 여러 번 반복해 중앙값과 분산을 보고, 서비스라면 평균 대신 지연의 분위수(p99)를 본다. 캐시 상태가 측정을 흔드는 문제와 그 대책은 캐시를 고려한 코드에 있다.

운영체제와의 연결

  • 디스크에 파일로 있던 프로그램이 실행되어 메모리에 올라오면 프로세스가 된다(프로세스와 스레드).
  • 메모리는 비싸므로 프로그램 전체가 아니라 필요한 부분만 올라간다.
  • 운영체제는 수많은 프로세스가 동시에 실행되는 것처럼 CPU 시간을 나누고, 어떤 데이터를 어떤 순서로 메모리·캐시·버스를 통해 옮길지 관리해 성능을 최적화한다.

핵심 정리

  • 프로그램 내장 방식(폰 노이만 구조)이 현대 컴퓨터의 기본 틀이다.
  • CPU는 계산, 메모리는 실행 중 데이터 보관, 디스크는 영구 보관을 맡는다.
  • 캐시(SRAM)·메인 메모리(DRAM)·디스크의 계층으로 속도와 비용의 균형을 맞춘다.
원본 기록8

댓글

GitHub 계정으로 댓글을 남길 수 있어요.