강의를 보면서 공부하던 중에 폰 노이만 아키텍쳐에 대한 설명이 나왔다. 1학년 때 책에서 본 듯한 내용인데 기억이 하나도 나지 않아서 다시 정리해 보았다.
폰 노이만 아키텍처와 하버드 아키텍처
컴퓨터는 프로그램을 실행하고 데이터를 처리하는 장치다. 이때 프로그램이 어떻게 실행되며, 데이터는 어떻게 이동하는가를 이해해야 최적화가 가능하다.
폰 노이만 아키텍처와 하버드 아키텍처는 이러한 동작 원리를 설명하는 가장 기초적인 개념이다.
이 개념을 배우는 이유는 다음과 같다.
-
컴퓨터의 동작 원리 이해:
프로그램이 실행되는 방식과 데이터 처리 과정을 이해하면 최적화가 가능하다.
-
성능 최적화와 병목 현상 해결:
폰 노이만 구조의 한계인 병목 현상을 극복하기 위해 캐시, 파이프라이닝 등의 기술이 도입되었다.
-
하드웨어와 소프트웨어의 연결 고리:
CPU 구조를 이해하면 프로그래밍 성능 최적화, 운영체제 설계, 임베디드 시스템 개발 등에 도움이 된다.
폰 노이만 아키텍처 (Von Neumann Architecture)
정의
폰 노이만 아키텍처는 프로그램 내장 방식의 범용 컴퓨터 구조를 의미하며, 1945년 존 폰 노이만(John von Neumann)이 제안한 개념이다.
그 이전의 컴퓨터는 스위치 배선 방식으로 프로그램을 실행했지만, 폰 노이만 구조는 프로그램을 메모리에 저장하고 실행하는 방식으로 설계되었다.
폰 노이만 아키텍쳐의 구성 요소
- 중앙처리장치 (CPU, Central Processing Unit)
- 컴퓨터의 연산과 제어를 담당하는 핵심 장치
- 제어 장치 (CU, Control Unit): 명령어 해석 및 실행 흐름 관리
- 산술 논리 연산 장치 (ALU, Arithmetic Logic Unit): 연산 수행 (덧셈, 뺄셈, 논리 연산 등)
- 메모리 (Memory, 주기억장치)
- 프로그램 코드와 데이터를 저장하는 공간
- RAM (Random Access Memory): 실행 중인 프로그램과 데이터를 저장
- ROM (Read-Only Memory): 변경할 수 없는 기본적인 프로그램 저장
- 입력 장치 (Input Device)
- 사용자 또는 외부 시스템으로부터 데이터를 입력받는 장치
- 키보드, 마우스, 터치스크린, 센서 등
- 출력 장치 (Output Device)
- 처리된 데이터를 사용자에게 전달하는 장치
- 모니터, 프린터, 스피커 등
- 버스 (Bus, 데이터 전송 경로)
- CPU, 메모리, 입력/출력 장치 간 데이터를 주고받는 통로
- 데이터 버스: 데이터 전송
- 주소 버스: 메모리 주소 전달
- 제어 버스: 데이터 흐름 및 명령어 실행 제어
이러한 구조에서 CPU는 메모리에 저장된 프로그램 코드와 데이터를 순차적으로 읽고 실행한다. 즉, 명령어를 메모리에서 가져와(페치) 해석(디코드)한 후 실행(익스큐트)하는 과정을 반복하는 것이 폰 노이만 아키텍처의 핵심 원리다.
특징
- 단일 메모리 구조
- 프로그램 코드와 데이터가 같은 메모리에 저장된다.
- 순차적 실행 방식
- 단일 버스 사용
- 명령어와 데이터가 같은 버스를 통해 이동하므로, 동시에 접근할 수 없다.
장점
- 범용성 증가: 프로그램을 변경하는 것만으로 다른 작업 수행 가능
- 하드웨어 변경 불필요: 소프트웨어만 수정하면 새로운 기능 추가 가능
- 컴퓨터 구조 단순화: 하나의 메모리와 버스를 사용해 설계가 쉬움
단점 (폰 노이만 병목 현상)
- 명령어와 데이터가 같은 경로(버스)를 공유 → 동시에 접근 불가능
- CPU가 메모리에 접근하는 속도가 느려짐 → 연산 속도 저하
- 병목 현상 해결을 위한 추가 기술 필요 (예: 캐시 메모리, 파이프라이닝)
하버드 아키텍처 (Harvard Architecture)
정의
하버드 아키텍처는 명령어와 데이터를 저장하는 메모리를 물리적으로 분리한 컴퓨터 구조이다. 이 구조는 주로 고속 처리를 필요로 하는 시스템에서 사용된다
폰 노이만 구조의 병목 현상을 해결하기 위해 제안되었다.
하버드 아키텍처의 구성 요소
- 중앙처리장치 (CPU, Central Processing Unit)
- 제어 장치 (CU, Control Unit): 명령어의 해석과 실행 흐름을 관리
- 산술 논리 연산 장치 (ALU, Arithmetic Logic Unit): 연산 수행 (덧셈, 뺄셈, 논리 연산 등)
- 명령어 메모리 (Instruction Memory)
- 명령어만 저장하는 메모리로, 데이터 메모리와 분리되어 있다.
- 명령어를 저장하고 CPU가 읽어 실행한다.
- 데이터 메모리 (Data Memory)
- 데이터만 저장하는 메모리로, 명령어 메모리와 분리되어 있다.
- 프로그램 실행 중 필요한 데이터를 저장하고, CPU가 이를 읽어 연산을 한다.
- 입력 장치 (Input Device)
- 사용자 또는 외부 시스템으로부터 데이터를 입력받는 장치
- 키보드, 마우스, 터치스크린, 센서 등
- 출력 장치 (Output Device)
- 처리된 데이터를 사용자에게 전달하는 장치
- 모니터, 프린터, 스피커 등
- 버스 (Bus, 데이터 전송 경로)
- 명령어와 데이터를 처리하는 두 개의 독립적인 버스를 사용하여 명령어와 데이터를 각각 동시에 처리 가능
- 명령어 버스와 데이터 버스가 분리되어 있어 동시에 접근할 수 있어 속도가 향상된다.
특징
- 명령어 메모리와 데이터 메모리 분리
- 독립적인 버스 사용
- 각각의 메모리(명령어, 데이터)에 전용 버스가 존재하여 속도 향상
장점
- 동시 접근 가능: 명령어와 데이터를 동시에 읽고 처리 가능 → 속도 향상
- 병목 현상 완화: 폰 노이만 구조의 한계를 보완
단점
- 설계 복잡도 증가: 명령어 메모리와 데이터 메모리를 따로 관리해야 함
- 하드웨어 비용 증가: 두 개의 버스를 사용해야 하므로 추가적인 회로 필요
폰 노이만 VS 하버드 아키텍쳐 차이점
- 메모리 구조
-
폰 노이만 아키텍처는 프로그램 메모리와 데이터 메모리가 동일한 메모리에 저장된다. 즉, 명령어와 데이터가 하나의 메모리에서 처리되며, CPU가 이를 순차적으로 처리함.
-
하버드 아키텍처는 프로그램 메모리와 데이터 메모리가 분리되어 있다. 즉, 두 개의 별도 메모리가 각각 명령어와 데이터를 저장하고, CPU는 이를 동시에 접근할 수 있음.
- 버스 사용
-
폰 노이만 아키텍처에서는 하나의 버스를 통해 명령어와 데이터가 모두 전송된다. 따라서 CPU는 명령어와 데이터를 동시에 처리할 수 없고, 순차적으로 처리해야 한다.
-
하버드 아키텍처에서는 명령어와 데이터용 별도의 버스를 사용해 명령어와 데이터를 동시에 처리할 수 있다. -> 처리 속도 향상
현대 컴퓨터 구조
현재의 CPU는 외부적으로는 폰 노이만 구조, 내부적으로는 하버드 구조를 적용하는 하이브리드 방식이다.
- 외부적으로 폰 노이만 구조를 따라 프로그램을 실행
- 내부적으로는 하버드 구조를 적용해 명령어와 데이터 접근 속도 향상
즉, 메모리 속의 프로그램을 순차적으로 실행하는 기본 구조는 유지하면서도, 성능을 높이기 위해 하버드 아키텍처의 일부 개념을 적용하고 있다.
함께 알아두면 좋은 개념
폰 노이만 및 하버드 아키텍처는 단순한 개념이 아니라, 여러 기술과 연결되어 있다.
이를 이해하면 성능 최적화나 컴퓨터 설계 원리를 보다 깊이 있게 파악할 수 있다.
개념 | 설명 |
---|
캐시 메모리 | CPU와 메모리 간 속도 차이를 줄이기 위한 고속 메모리 |
파이프라이닝 | CPU의 명령어 실행 단계를 여러 개로 나누어 동시 처리 |
DMA (Direct Memory Access) | CPU 개입 없이 메모리 간 직접 데이터 전송 |
NUMA (Non-Uniform Memory Access) | 멀티코어 환경에서 메모리 접근 속도를 최적화하는 방식 |
RISC vs CISC | CPU의 명령어 집합 설계 방식 (단순한 연산 중심 vs 복잡한 연산 포함) |
멀티코어 CPU | 여러 개의 코어를 활용해 병렬 처리를 수행하는 방식 |