Harvard 아키텍처의 분리 메모리와 병렬 접근 구조
Harvard 아키텍처의 명령어·데이터 메모리 분리 구조, 독립 버스, 파이프라인과 Modified Harvard 설계를 정리한다.
2026-08-14 · 최초 발행 2025-12-28
명령어와 데이터가 같은 길을 쓰지 않게 하는 구조
Harvard 아키텍처는 1944년 하버드 대학의 Mark I 컴퓨터에서 처음 구현된 설계 방식이다. 명령어 메모리와 데이터 메모리를 물리적으로 나누고, 각각에 독립 버스를 둔다. 하나의 경로가 다음 명령어를 가져오는 동안 다른 경로는 연산에 필요한 데이터를 읽거나 쓸 수 있다.
이 구조는 단일 버스와 통합 메모리를 사용하는 Von Neumann 구조에서 생기는 메모리 접근 경쟁을 줄인다. DSP, 마이크로컨트롤러, 임베디드 시스템처럼 실행 시간의 예측 가능성이 필요한 환경에서 특히 활용된다.
메모리와 버스를 분리하는 구조
CPU 내부의 제어장치와 산술논리장치는 명령어 및 데이터 경로를 각기 사용한다. 프로그램 코드와 실행 중 다루는 값은 같은 저장 공간을 공유하지 않는다.
명령어 메모리는 프로그램 코드를 위한 공간이다. Read-Only 또는 Flash 메모리를 활용하며, 고정된 크기의 명령어 형식과 빠른 인출 속도에 맞춰 설계된다.
반대로 데이터 메모리는 변수, 스택, 힙을 저장한다. RAM(Random Access Memory)을 사용하며 읽기와 쓰기가 모두 가능하고 동적 메모리 할당을 지원한다.
버스도 분리된다.
- 명령어 버스는 프로그램 카운터와 명령어 메모리를 연결한다.
- 데이터 버스는 ALU와 데이터 메모리 사이의 접근을 담당한다.
- 주소 버스는 각 메모리를 독립적으로 주소 지정한다.
- 제어 버스는 읽기 및 쓰기 신호를 전달한다.
명령어 인출과 데이터 접근을 겹치는 방식
분리된 경로의 핵심은 CPU가 명령어를 인출하면서 데이터 읽기 또는 쓰기를 함께 진행할 수 있다는 점이다. 단일 버스를 놓고 두 작업이 경쟁하지 않는다.
원본 구조가 제시하는 효과는 메모리 접근 대역폭 2배 증가, CPU 대기 시간 최소화, 클럭 사이클당 처리량 증대, 버스 병목현상 제거다. 또한 결정적 실행 시간(Deterministic Execution), 예측 가능한 성능, 짧아진 인터럽트 응답 시간이라는 특성은 타이밍 크리티컬 애플리케이션에 맞는다.
파이프라인에서 줄어드는 구조적 경쟁
명령어와 데이터의 접근 경로가 독립적이면 파이프라인 단계도 서로 덜 충돌한다. Fetch 단계가 명령어 버스를 쓰는 사이 Execute와 Write-back 단계는 데이터 버스를 사용할 수 있다.
파이프라인의 Fetch는 명령어 메모리에서 명령어 버스를 통해 명령어를 가져온다. Decode는 CPU 내부에서 명령어를 해독하고, Execute는 연산 및 데이터 접근을 수행한다. Write-back은 결과를 데이터 버스로 저장한다.
이때 독립 버스는 구조적 해저드(Structural Hazard)를 제거하고 자원 경쟁을 방지한다. 명령어 인출 지연이 줄어들며, 데이터 해저드가 주된 관리 대상이 된다. 이상적 조건에서는 1 클럭 사이클당 1 명령어 완료가 가능하고, 분기 예측과의 결합, 슈퍼스칼라 확장, VLIW(Very Long Instruction Word) 지원에도 유리하다.
병렬 연산을 확장할 수 있는 기반
분리된 메모리 접근은 명령어 수준 병렬성(ILP)을 구성할 때도 도움이 된다. 다중 실행 유닛 배치, 명령어 디스패치 병렬화, 비순차 실행(Out-of-Order Execution), 레지스터 리네이밍 효율성을 뒷받침한다.
SIMD 연산에서는 단일 명령어로 다중 데이터를 처리하고 벡터 연산을 최적화할 수 있다. 멀티미디어 처리와 DSP 알고리즘에 적합한 이유다. 멀티코어 환경에서는 코어별로 독립 메모리 공간을 할당해 메모리 경쟁을 최소화하고, 확장성(Scalability) 및 병렬 프로그래밍 모델 측면의 장점을 얻는다.
Von Neumann 병목과 대비되는 지점
Von Neumann 구조는 CPU와 통합 메모리 사이를 단일 버스가 연결한다. Harvard 구조는 명령어와 데이터가 별도 버스를 사용하므로 동일한 병목을 피한다.
명령어 대역폭은 고정 크기 명령어를 통해 예측 가능하게 다룰 수 있고, 데이터 대역폭은 가변 크기 데이터 전송에 맞춰 최적화할 수 있다. 총 메모리 대역폭은 단순 합산이 아니라 각 경로를 독립적으로 활용하는 방식이다. 캐시 역시 메모리 타입별로 최적화해 설계할 수 있다.
명령어 인출 지연과 데이터 접근 대기 시간이 줄어들면 메모리 접근 타이밍을 예측하기 쉬워진다. 불필요한 버스 중재 회로와 메모리 대기 상태가 감소해 전력 소모 최적화에도 유리하며, 배터리 기반 시스템에 적합하다.
적용되는 프로세서와 절충 설계
DSP 프로세서에서는 Texas Instruments TMS320 시리즈와 Analog Devices SHARC 프로세서가 대표적인 사례다. 오디오·비디오 신호 처리, 실시간 필터링 및 변환에 사용된다.
마이크로컨트롤러에서는 ARM Cortex-M 시리즈, Microchip PIC 마이크로컨트롤러, Atmel AVR 일부 모델이 해당 구조를 활용한다. 임베디드 제어 시스템에서 명령어 인출과 데이터 처리를 분리할 수 있다.
그래픽 처리 장치(GPU)에서는 NVIDIA CUDA 코어와 AMD Stream 프로세서가 대규모 병렬 연산과 쉐이더 프로그램 실행을 수행한다.
Modified Harvard 아키텍처는 명령어 캐시와 데이터 캐시를 분리하면서 주메모리는 통합해 쓰는 절충안이다. 성능과 유연성 사이의 균형을 위해 현대 범용 프로세서에 널리 채택된다.
분리 구조를 선택할 때 남는 제약
이 구조는 이중 메모리 시스템, 독립 버스, 메모리 컨트롤러를 함께 구현해야 한다. 그만큼 칩 면적과 비용이 늘고 하드웨어 복잡도가 높아진다.
소프트웨어 측면에서도 명령어와 데이터 메모리의 분리를 인식해야 한다. 크로스 메모리 데이터 이동에는 제약이 있고, 컴파일러 최적화와 디버깅 난이도가 높아질 수 있다. 명령어 메모리는 고정 크기 제약을 가지는 반면 데이터 메모리는 동적 할당이 필요하므로, 애플리케이션별로 적절한 메모리 용량 비율을 정해야 한다.
Harvard와 Von Neumann의 구조적 차이
| 특성 | Harvard | Von Neumann |
|---|---|---|
| 메모리 구조 | 분리형 | 통합형 |
| 동시 접근 | 가능 | 불가능 |
| 파이프라인 | 효율적 | 제약적 |
| 병목현상 | 최소화 | 존재 |
| 구현 복잡도 | 높음 | 낮음 |
| 적용 분야 | 특수 목적 | 범용 |
Harvard 아키텍처는 성능과 실행 시간의 예측 가능성을 우선하는 특수 목적 시스템에 적합하다. 반면 Modified Harvard는 캐시에서 분리 원칙을 적용하고 주메모리에는 통합 구조를 유지해, Harvard의 성능과 Von Neumann의 유연성을 함께 취한다.