폰 노이만 vs 하버드 아키텍처: 차이점 설명

폰 노이만 아키텍처에서는 명령어와 데이터가 하나의 메모리와 하나의 버스를 공유하므로, 프로세서가 명령어 인출과 데이터 접근을 동시에 할 수 없습니다. 이 한계를 폰 노이만 병목이라고 합니다. 하버드 아키텍처에서는 명령어와 데이터가 별도의 버스를 가진 별도의 메모리에 있어 둘을 동시에 접근할 수 있습니다. 현대 CPU 대부분은 둘을 결합합니다. 메인 메모리는 통합되어 있지만 L1 캐시는 명령어 캐시와 데이터 캐시로 분리되어 있으며, 이를 수정된 하버드 아키텍처라고 합니다.

비교 항목폰 노이만하버드
메모리하나의 메모리에 명령어와 데이터를 모두 저장명령어용과 데이터용으로 메모리가 분리됨
버스공유 버스 하나분리된 버스
명령어 인출과 데이터 접근같은 버스를 두고 경쟁(폰 노이만 병목)동시에 수행 가능
처리량같은 버스 속도에서 더 낮음병렬 접근 덕분에 더 높음
유연성높음: 프로그램이 데이터이므로 쉽게 로드, 생성, 수정할 수 있음더 낮음: 코드와 데이터가 분리되어 있음
메모리 할당코드와 데이터 간 유연한 분할각 메모리의 크기가 고정
하드웨어 복잡도더 단순더 복잡함: 메모리 두 개와 버스 두 개
주요 장치범용 컴퓨터디지털 신호 처리기(DSP)와 많은 마이크로컨트롤러(AVR, PIC 등)
현대 CPU에서통합된 메인 메모리분리된 L1 명령어 캐시와 데이터 캐시(수정된 하버드)

수치는 대략적인 자릿수 기준이며, 공정 세대와 제품에 따라 달라져요.

상황별 선택 기준

폰 노이만
프로그램을 스토리지에서 로드하며 유연성이 중요한 범용 컴퓨팅.
하버드
명령어와 데이터에 대한 예측 가능한 고처리량 접근이 중요한 신호 처리와 임베디드 장치.

자주 묻는 질문

폰 노이만 병목이란 무엇인가요?

명령어와 데이터가 하나의 메모리와 버스를 공유하므로, 프로세서가 명령어 인출과 데이터 접근을 동시에 할 수 없는 것입니다. 이는 처리량을 제한합니다.

현대 CPU는 하버드 아키텍처를 쓰나요?

부분적으로 그렇습니다. 메인 메모리는 통합되어 있지만 L1 캐시는 명령어 캐시와 데이터 캐시로 분리되어 있으며, 이를 수정된 하버드 아키텍처라고 합니다.

어떤 마이크로컨트롤러가 하버드 아키텍처를 쓰나요?

AVR과 PIC 칩을 포함해 많은 마이크로컨트롤러가 프로그램 메모리와 데이터 메모리를 분리해 둡니다.

하버드 머신에서 자기 수정 코드를 실행할 수 있나요?

코드와 데이터가 별도의 메모리에 있기 때문에 쉽지 않습니다. 이러한 분리가 폰 노이만 머신이 더 유연한 이유 중 하나입니다.

이해도 확인

폰 노이만형 컴퓨터의 특징으로 올바른 것은?

  1. A명령어와 데이터를 반드시 별도의 메모리에 둔다
  2. B배선을 바꿔 연결하는 방식으로 프로그램을 변경한다
  3. C프로그램(명령어)과 데이터를 같은 주기억장치에 저장하고 명령어를 차례로 읽어 실행한다
정답과 해설 보기

정답: C. 프로그램(명령어)과 데이터를 같은 주기억장치에 저장하고 명령어를 차례로 읽어 실행한다

폰 노이만형(프로그램 내장 방식)에서는 명령어와 데이터를 같은 주기억장치에 두고 CPU가 명령어를 차례로 읽어 실행합니다. 프로그램을 데이터로서 고쳐 쓸 수 있는 유연성이 강점이며 현재 컴퓨터의 기본입니다. 한편 명령어와 데이터가 같은 경로를 두고 다투는 것이 속도의 제약이 되며, 이를 폰 노이만 병목이라고 합니다. 그래서 많은 CPU는 L1 캐시를 명령어용과 데이터용으로 나눕니다(하버드형의 사고방식).

CPU가 하나의 명령어를 처리하는 기본적인 흐름으로 올바른 순서는?

  1. A실행 → 해독 → 인출
  2. B인출(페치) → 해독(디코드) → 실행
  3. C해독 → 인출 → 실행
정답과 해설 보기

정답: B. 인출(페치) → 해독(디코드) → 실행

CPU는 메모리에서 명령어를 인출(페치)하고, 내용을 해독(디코드)하여 무엇을 할지 정하며, 연산 등을 실행하고, 필요하면 결과를 레지스터나 메모리에 다시 씁니다. 인출할 명령어의 위치는 프로그램 카운터가 가리키고, 해독에서는 연산의 종류와 사용할 레지스터를 판정합니다. 파이프라인은 이 단계들을 겹쳐 병행하여 진행하고 매 클록 1개 이상의 명령어를 완료하는 구조입니다.

파이프라인에서 앞선 명령어의 결과를 다음 명령어가 곧바로 사용할 때(데이터 해저드), 레지스터에 쓰기를 기다리지 않고 연산 결과를 곧바로 다음 명령어에 전달하는 기법은?

  1. A포워딩(바이패스)
  2. B가상 메모리
  3. C분기 예측
정답과 해설 보기

정답: A. 포워딩(바이패스)

포워딩(바이패스)은 연산기의 출력을 레지스터에 쓰이기를 기다리지 않고 후속 명령어의 입력으로 직접 보내는 기법입니다. 예를 들어 「r1 = r2 + r3」 바로 뒤에 「r4 = r1 × 2」가 있어도 수 클록의 정지(스톨) 없이 실행할 수 있습니다. 다만 메모리에서 로드한 결과를 바로 뒤에서 사용하는 경우에는 데이터가 아직 도착하지 않았으므로 1클록 정도의 정지가 남습니다(로드-사용 해저드).

CPU와 아키텍처 문제 풀기

주요 용어 설명

ノイマン型アーキテクチャ
プログラムとデータを同じ主記憶に置き、命令を順に読み出して実行するコンピュータの構成。
キャッシュメモリ
CPUの近くに置く高速・小容量のメモリ。よく使うデータを保持して主記憶との速度差を緩和する。主にSRAMでつくられる。

관련 비교