Skip to Content
독학사독학사 2단계컴퓨터구조06. 컴퓨터 시스템 구성과 성능 지표

이번 문서의 목표: 이 파일을 다 읽으면 폰노이만 구조의 동작 원리를 설명하고, CPI·클록 주파수·MIPS 같은 성능 지표를 실제 숫자로 계산해 두 시스템의 성능을 비교할 수 있다.

왜 컴퓨터 구조부터 다시 짚어야 할까

05편 “컴퓨터구조 용어 지도”에서 CPU(Central Processing Unit, 중앙처리장치)·메모리(memory)·버스(bus)·입출력장치(I/O device)가 어떤 역할을 하는지 큰 그림으로 살펴봤다. 이번 편부터는 본론이다. 본론의 첫 단추는 “이 부품들이 왜 하필 이런 구조로 연결되어 있는가”와 “이 시스템이 얼마나 빠른지 어떻게 숫자로 말할 것인가” 두 가지다.

독학사 컴퓨터구조 시험에서는 이 두 주제가 항상 짝을 이뤄 나온다. 폰노이만 구조(Von Neumann architecture)의 특징을 묻는 개념 문제와, 클록(clock)·CPI(Cycles Per Instruction, 명령어당 클록 수)·MIPS(Million Instructions Per Second, 초당 백만 명령어 수)를 대입해 계산하는 문제가 매 회차 나온다고 봐도 된다.

폰노이만 구조: 프로그램도 데이터처럼 저장한다

쉽게 말하면: 명령어(프로그램)와 데이터를 같은 기억장치에 같은 방식으로 저장해 두고, CPU가 그 기억장치에서 명령어를 하나씩 꺼내와 실행하는 구조다.

왜 이런 구조가 필요했나

1940년대 이전의 초기 계산기는 배선판을 물리적으로 바꿔 꽂아야 다른 계산을 할 수 있었다. 프로그램을 바꾸려면 기계 내부의 전선을 다시 연결해야 했으니, 새 작업마다 몇 시간에서 며칠이 걸렸다. 수학자 존 폰 노이만(John von Neumann)이 1945년에 제안한 구조는 이 문제를 근본적으로 해결했다. 프로그램(명령어의 집합)을 데이터와 똑같이 2진수로 부호화해서 기억장치에 저장해두면, 배선을 바꾸지 않고도 기억장치의 내용만 바꿔서 다른 작업을 수행할 수 있다.

정의: 폰노이만 구조의 3가지 핵심 특징

폰노이만 구조는 다음 세 가지로 요약된다.

  1. 저장 프로그램 방식(stored program concept): 명령어와 데이터를 동일한 주기억장치(main memory)에 이진 코드로 저장한다. CPU 입장에서는 지금 읽어온 것이 명령어인지 데이터인지 그 자체로는 구분할 수 없고, 문맥(어느 레지스터로 가져오는지)으로 구분한다.
  2. 순차적 명령어 실행(sequential execution): 프로그램 카운터(Program Counter, PC 레지스터)가 가리키는 주소에서 명령어를 하나씩 순서대로 꺼내(인출, fetch) 실행한다. 분기(branch) 명령이 없다면 PC는 매 사이클 자동으로 다음 주소로 증가한다.
  3. 단일 버스를 통한 접근(single bus architecture): CPU와 기억장치 사이에 명령어와 데이터가 같은 통로(버스)를 오간다. 이 통로가 하나이기 때문에 명령어를 읽어오는 동안에는 데이터를 동시에 읽어올 수 없다.

이 세 번째 특징 때문에 생기는 구조적 한계를 폰노이만 병목(Von Neumann bottleneck)이라 부른다. CPU의 연산 속도가 아무리 빨라져도, 명령어와 데이터가 같은 버스 하나를 두고 순서를 기다려야 하므로 기억장치와 CPU 사이의 전송 속도가 전체 시스템 성능의 상한선을 정해버린다. 비유하자면 왕복 2차선 도로에 트럭(데이터)과 승용차(명령어)가 한 줄로만 다닐 수 있는 것과 같다. 차량 성능이 아무리 좋아져도 도로 자체가 병목이 된다.

시험에서 자주 나오는 함정: “폰노이만 구조는 명령어와 데이터를 저장하는 기억장치가 물리적으로 분리되어 있다”는 진술은 틀렸다. 이는 정반대인 하버드 구조(Harvard architecture)의 특징이다. 하버드 구조는 명령어 기억장치와 데이터 기억장치, 그리고 그 둘을 잇는 버스를 각각 분리해 동시에 접근할 수 있게 만들어 폰노이만 병목을 완화한 구조다. 독학사 컴퓨터구조는 폰노이만 구조를 기본 전제로 다루되, “폰노이만 vs 하버드” 비교 문항이 나올 수 있으니 아래 표로 정리해 둔다.

비교: 폰노이만 구조 vs 하버드 구조

구분폰노이만 구조하버드 구조
명령어·데이터 저장같은 기억장치에 함께 저장명령어용·데이터용 기억장치를 분리
버스 구조단일 버스 공유명령어 버스·데이터 버스 분리
동시 접근명령어 인출과 데이터 접근이 동시에 불가능명령어 인출과 데이터 접근이 동시에 가능
대표 병목폰노이만 병목 발생상대적으로 병목 완화
대표 활용범용 컴퓨터(PC·서버)임베디드 프로세서·디지털 신호처리기(DSP) 일부

컴퓨터 시스템의 기본 데이터패스 흐름

CPU가 기억장치에서 명령어를 꺼내 실행하는 흐름을 큰 그림으로 mermaid 다이어그램으로 그리면 다음과 같다. 세부 단계(인출·해독·실행)는 12편 “명령 사이클과 인터럽트”에서 자세히 다루므로, 여기서는 폰노이만 구조가 실제로 어떻게 동작하는지 감을 잡는 용도로만 본다.

이 그림에서 명령어 인출(MEM에서 IR로)과 데이터 처리(ALU와 MEM 사이)가 같은 화살표 경로(버스)를 공유한다는 점이 폰노이만 구조의 핵심이다.

성능 지표: “빠르다”를 숫자로 말하는 법

쉽게 말하면: 컴퓨터가 얼마나 빠른지는 “클록이 몇 번 뛰는가”, “명령어 하나에 클록이 몇 번 필요한가”, “그래서 초당 명령어를 몇 개 처리하는가” 세 가지 숫자의 조합으로 계산한다.

왜 이 지표들이 필요한가

“이 CPU가 저 CPU보다 빠르다”는 말은 애매하다. 클록 속도만 높다고 반드시 빠른 것도 아니고(클록마다 하는 일의 양이 다르면), 명령어 수가 적다고 반드시 빠른 것도 아니다(명령어 하나가 무거우면). 그래서 컴퓨터구조에서는 처리시간(execution time)을 여러 구성요소로 쪼개서 어느 부분이 병목인지 짚어내는 계산법을 쓴다.

정의: 클록·CPI·MIPS

클록(clock)은 CPU 내부의 모든 동작 타이밍을 맞추는 규칙적인 전기 신호다. 클록이 한 번 오르내리는 구간을 클록 사이클(clock cycle) 또는 클록 주기(clock period)라 하고, 1초에 클록이 몇 번 뛰는지를 클록 주파수(clock frequency)라 하며 단위는 헤르츠(Hz, Hertz)다. 3GHz(기가헤르츠)는 1초에 30억 번 클록이 뛴다는 뜻이다.

클록 주기 TT(초 단위)와 클록 주파수 ff(Hz 단위)는 서로 역수 관계다.

T=1fT = \frac{1}{f}
  • TT: 클록 주기(clock period), 클록이 한 번 뛰는 데 걸리는 시간(초)
  • ff: 클록 주파수(clock frequency), 1초당 클록이 뛰는 횟수(Hz)

CPI(Cycles Per Instruction, 명령어당 평균 클록 사이클 수)는 명령어 하나를 처리하는 데 평균적으로 클록이 몇 번 필요한지를 나타낸다. 덧셈처럼 단순한 명령어는 CPI가 낮고(1에 가깝고), 나눗셈처럼 복잡한 명령어는 CPI가 높다(여러 클록이 필요).

MIPS(Million Instructions Per Second, 초당 백만 명령어 수)는 CPU가 1초에 몇 백만 개의 명령어를 처리하는지 나타내는 지표다. 클록 주파수가 높아도 CPI가 크면 MIPS는 낮아질 수 있으므로, MIPS는 클록 주파수 하나만으로는 알 수 없는 실질 처리 능력을 보여준다.

처리시간 공식

CPU 처리시간(execution time, TCPUT_{CPU})은 다음 공식으로 구한다.

TCPU=IC×CPI×TT_{CPU} = IC \times CPI \times T
  • TCPUT_{CPU}: CPU가 프로그램 전체를 실행하는 데 걸리는 총 시간(초)
  • ICIC: Instruction Count, 프로그램이 실행하는 총 명령어 수(개)
  • CPICPI: 명령어 하나를 처리하는 데 필요한 평균 클록 사이클 수
  • TT: 클록 주기(초), 즉 1f\frac{1}{f}

MIPS는 다음과 같이 정의한다.

MIPS=ICTCPU×106MIPS = \frac{IC}{T_{CPU} \times 10^6}
  • ICIC: 총 명령어 수
  • TCPUT_{CPU}: 총 실행 시간(초)
  • 10610^6: 백만 단위로 환산하기 위한 상수

클록 주파수와 CPI로 MIPS를 바로 구하는 식도 자주 쓰인다.

MIPS=fCPI×106MIPS = \frac{f}{CPI \times 10^6}
  • ff: 클록 주파수(Hz)
  • CPICPI: 명령어당 평균 클록 사이클 수

작은 예시로 손 계산해보기

어떤 CPU가 클록 주파수 2GHz(즉 2×1092 \times 10^9Hz)로 동작하고, 평균 CPI가 4이며, 어떤 프로그램을 실행하는 데 총 8,000,000개(800만 개)의 명령어를 처리한다고 하자. 이 프로그램의 실행 시간과 MIPS를 구해보자.

1단계: 클록 주기 구하기

T=1f=12×109=0.5×109=0.5나노초T = \frac{1}{f} = \frac{1}{2 \times 10^9} = 0.5 \times 10^{-9}\text{초} = 0.5\text{나노초}

2단계: 총 실행 시간 구하기

TCPU=IC×CPI×T=(8×106)×4×(0.5×109)T_{CPU} = IC \times CPI \times T = (8 \times 10^6) \times 4 \times (0.5 \times 10^{-9})

계산 순서대로 정리하면 다음과 같다. 먼저 8×106×4=32×1068 \times 10^6 \times 4 = 32 \times 10^6이고, 여기에 0.5×1090.5 \times 10^{-9}를 곱하면 16×10316 \times 10^{-3}초, 즉 0.016초(16밀리초)다.

3단계: MIPS 구하기

MIPS=fCPI×106=2×1094×106=500MIPS = \frac{f}{CPI \times 10^6} = \frac{2 \times 10^9}{4 \times 10^6} = 500

결과 해석: 이 CPU는 초당 500만이 아니라 500 MIPS, 즉 초당 5억 개의 명령어를 처리할 수 있는 성능이다(1 MIPS = 초당 100만 개이므로 500 MIPS = 초당 5억 개). 같은 클록 주파수라도 CPI가 절반(2)으로 줄면 MIPS는 두 배(1000)로 뛴다는 점에서, CPI를 낮추는 설계(파이프라이닝 등)가 클록을 올리는 것 못지않게 중요하다는 사실을 알 수 있다.

자주 틀리는 점

  • “클록 주파수가 높으면 무조건 빠르다”는 착각: CPI가 다르면 클록 주파수만으로 성능을 비교할 수 없다. 반드시 IC×CPI×TIC \times CPI \times T 전체를 봐야 한다.
  • MIPS 단위 착각: “500 MIPS”를 “초당 500개”로 잘못 읽는 경우가 많다. M(Million, 백만)이 붙어 있으므로 500 MIPS는 초당 500,000,000(5억)개다.
  • CPI를 정수로만 생각하는 착각: 실제로는 명령어 종류마다 CPI가 다르므로, 프로그램의 평균 CPI는 각 명령어 종류의 비율에 따른 가중평균으로 계산해야 하는 경우가 있다(예: 산술 명령어 CPI 1, 분기 명령어 CPI 3을 각각 60퍼센트·40퍼센트 비율로 실행한다면 평균 CPI는 1×0.6+3×0.4=1.81 \times 0.6 + 3 \times 0.4 = 1.8).

병목과 성능 개선의 방향

쉽게 말하면: 시스템 전체 속도는 가장 느린 부분이 정한다. 그 느린 부분을 찾아 고치는 것이 성능 개선의 핵심이다.

병목(bottleneck)이란 여러 단계로 이어진 처리 과정에서 전체 속도를 가장 많이 늦추는 지점을 말한다. 폰노이만 구조에서는 CPU와 기억장치 사이의 단일 버스가 대표적인 병목이다. 병 목(bottle neck, 병의 목 부분)이라는 이름처럼, 병 전체가 넓어도 목이 좁으면 물이 그만큼만 흘러나오는 것에 비유할 수 있다.

성능을 개선하는 방향은 크게 세 가지로 나뉜다.

  1. 클록 주파수를 높인다: 하지만 발열·소비전력 문제로 무한정 올릴 수 없다.
  2. CPI를 낮춘다: 파이프라이닝(19편에서 다룸)처럼 명령어 처리 단계를 겹쳐서 실행해 평균 CPI를 줄인다.
  3. 명령어 수(IC)를 줄인다: 컴파일러 최적화나 명령어 집합 설계(14편의 CISC/RISC 비교)로 같은 작업을 더 적은 명령어로 처리한다.

세 방향 모두 서로 트레이드오프(trade-off, 하나를 얻으면 다른 하나를 희생하는 관계)가 있다는 점이 시험에서 서술형처럼 다뤄지는 포인트다. 예를 들어 클록을 무작정 높이면 발열이 늘고, 파이프라인 단계를 늘려 CPI를 낮추려 하면 회로 복잡도와 분기 예측 실패 비용이 늘어난다.

핵심 정리

  • 폰노이만 구조는 명령어와 데이터를 같은 기억장치에 저장하고 단일 버스로 접근하는 구조이며, 이 때문에 폰노이만 병목이 발생한다. 하버드 구조는 명령어·데이터 기억장치를 분리해 이 병목을 완화한다.
  • CPU 처리시간은 TCPU=IC×CPI×TT_{CPU} = IC \times CPI \times T로 계산하며, TT는 클록 주파수의 역수다.
  • MIPS는 초당 백만 명령어 수를 뜻하며, MIPS=fCPI×106MIPS = \dfrac{f}{CPI \times 10^6}로 구한다. 클록 주파수만으로는 성능을 비교할 수 없고 CPI를 함께 봐야 한다.
  • 성능 개선은 클록 주파수 상승, CPI 감소(파이프라이닝), 명령어 수 감소(명령어 집합 설계) 세 방향으로 이뤄지며 서로 트레이드오프 관계다.

마무리 복습

문제 14지선다
폰노이만 구조의 특징으로 옳은 것은?
문제 24지선다
클록 주파수가 4GHz인 CPU의 클록 주기는 얼마인가?
문제 34지선다
어떤 프로그램이 총 500만 개의 명령어를 실행하고, CPU의 평균 CPI가 2, 클록 주파수가 1GHz일 때 이 프로그램의 실행 시간은?
문제 44지선다
MIPS(Million Instructions Per Second)에 대한 설명으로 옳은 것은?
문제 54지선다
폰노이만 구조와 하버드 구조를 비교한 설명으로 옳지 않은 것은?
문제 64지선다
어떤 CPU에서 산술 명령어(CPI 1)가 전체 명령어의 70퍼센트, 분기 명령어(CPI 4)가 30퍼센트를 차지할 때 평균 CPI는?

참고 자료

Last updated on