폰 노이만 아키텍처의 프로그램 내장 방식과 메모리 병목
폰 노이만 아키텍처의 프로그램 내장 방식, 명령어 실행 사이클, 메모리 버스 병목과 이를 완화하는 구조를 정리한다.
2026-08-14 · 최초 발행 2025-12-28
하나의 메모리에 프로그램과 데이터를 함께 둔다
Von Neumann 아키텍처는 1945년 수학자 존 폰 노이만이 제안한 컴퓨터 구조 설계 개념이다. 프로그램 내장 방식(Stored Program Concept)을 바탕으로 명령어와 데이터를 동일한 메모리 공간에 저장하고 처리한다.
이 방식은 대부분의 범용 컴퓨터 설계에 기반이 됐다. 하드웨어는 프로그램을 바꿔가며 다양한 작업을 처리할 수 있지만, 명령어와 데이터가 같은 전송 경로를 공유한다는 제약도 함께 가진다.
CPU, 메모리, 입출력이 맡는 역할
중앙처리장치(CPU)는 산술논리연산장치(ALU), 제어장치(Control Unit), 레지스터(Registers)로 구성된다. ALU는 산술과 논리 연산을 수행하고, 제어장치는 명령어를 해석해 실행을 제어한다. 레지스터는 처리 중인 데이터를 고속으로 임시 저장한다.
메모리 시스템은 명령어와 데이터가 공유하는 단일 메모리 공간을 사용한다. 프로그램 영역과 데이터 영역은 주소 공간에서 구분할 수 있지만, 메모리 주소만으로 그것이 명령어인지 데이터인지를 구분할 수는 없다. 메모리 주소는 선형적으로 배치된다.
입출력 장치에는 키보드·마우스·센서 같은 입력장치와 모니터·프린터·스피커 같은 출력장치가 포함된다. 이들 구성요소 사이의 데이터, 주소, 제어 신호는 버스 시스템을 통해 전달된다.
명령어는 인출부터 결과 저장까지 반복된다
프로그램 카운터가 다음 명령어 위치를 가리키면 CPU는 그 명령어를 가져와 해석하고 실행한 뒤 결과를 저장한다. 이 순차적 처리 흐름이 계속 반복된다.
Fetch에서는 프로그램 카운터(PC)가 가리키는 메모리 주소에서 명령어를 인출해 명령어 레지스터(IR)에 적재하고, PC를 다음 명령어 주소로 증가시킨다.
Decode 단계에서는 제어장치가 IR의 명령어를 분석한다. 이때 연산 코드(Opcode)를 식별하고 피연산자(Operand)의 위치를 파악한다.
Execute 단계에서는 ALU가 실제 연산을 수행한다. 메모리 접근, 레지스터 조작, 조건 분기 처리도 이 과정에 포함된다.
Store 단계는 연산 결과를 메모리 또는 레지스터에 저장하고 상태 플래그를 갱신한 뒤 다음 사이클을 준비하는 시점이다.
프로그램 내장 방식이 주는 유연성과 제약
명령어와 데이터는 같은 물리적 메모리에 저장되며, 프로그램 카운터 값으로 명령어 영역을 식별한다. 이 설계는 하드웨어 구조를 단순하게 만들고 프로그램 수정과 메모리 공간 활용을 쉽게 한다. 범용 컴퓨터에 적합한 이유도 여기에 있다.
반면 명령어와 데이터에 동시에 접근할 수 없고, 메모리 버스를 두 요청이 경쟁하게 된다. 코드 실행이 가능한 데이터 영역이라는 보안 취약성도 고려해야 한다.
메모리 버스가 만드는 폰 노이만 병목
Von Neumann Bottleneck은 CPU와 메모리 사이의 단일 경로가 명령어와 데이터를 모두 전달하면서 생긴다. CPU는 명령어를 요청하고 받은 뒤, 다시 데이터 요청을 같은 버스로 처리해야 한다.
CPU 처리 속도는 메모리 접근 속도보다 훨씬 빠를 수 있다. 그 차이 때문에 명령어 인출 대기 시간이 늘고 전체 시스템 성능이 낮아진다. 멀티코어 환경에서는 이 문제가 더 심해질 수 있다.
단일 버스가 모든 데이터를 전송하므로 명령어와 데이터가 경합하며, 버스 클럭 속도가 성능의 상한선을 결정한다. 병렬 처리 구현도 어려워진다.
병목을 줄이기 위한 프로세서 구조
캐시 메모리는 L1/L2/L3 다층 구조에 자주 사용되는 명령어와 데이터를 고속으로 저장해 메모리 접근 횟수를 줄인다.
파이프라이닝은 명령어 실행 단계를 중첩해 여러 명령어를 동시에 처리하고 처리량(Throughput)을 높인다. 분기 예측은 조건 분기 결과를 미리 예측해 파이프라인 중단을 줄이며, 투기적 실행(Speculative Execution)과 연결된다.
슈퍼스칼라 구조는 다중 실행 유닛을 배치하고 명령어 수준 병렬성(ILP)을 활용해 사이클당 다수의 명령어를 처리한다.
x86과 ARM에서 이어지는 기본 구조
x86 아키텍처는 Intel과 AMD 프로세서에서 사용되며 CISC 명령어 세트를 기반으로 한다. 내부적으로는 RISC 마이크로 연산으로 변환하고, 복잡한 메모리 관리 유닛을 사용한다.
ARM 아키텍처는 모바일 및 임베디드 시스템에서 널리 쓰인다. RISC 원칙에 기반해 전력 효율성을 중시하며 Von Neumann 변형 구조를 따른다.
데스크톱 PC, 서버 시스템, 워크스테이션 같은 범용 컴퓨터는 프로그램 유연성을 우선하는 이 구조를 사용한다.
통합 메모리와 분리 메모리의 차이
Von Neumann 구조는 통합 메모리 공간을 사용하고, Harvard 구조는 명령어 메모리와 데이터 메모리를 분리한다. 접근 방식도 순차와 병렬로 나뉜다.
Von Neumann 구조는 유연성이 우수하지만 성능 제약이 있고, Harvard 구조는 성능이 우수한 대신 설계가 복잡하다. 어떤 구조를 선택할지는 사용 목적에 따라 달라진다.
폰 노이만 아키텍처는 70년 이상 컴퓨터 설계의 표준으로 자리잡아 왔다. 캐시 메모리, 파이프라이닝, 분기 예측은 병목을 완화하지만 완전한 해결책은 아니다. Harvard 아키텍처 같은 대안이 특정 응용 분야에서 채택되는 배경도 이 한계와 맞닿아 있다.