2025-09-17 22:47
Tags: 소프트웨어 공학
폰 노이만 구조
- 프로그램(명령어)과 데이터를 동일한 메모리에 저장하는 핵심 아이디어를 기반으로 한다.
- “프로그램을 데이터처럼 취급하여 메모리에 저장하자”
- 중앙처리장치(CPU), 메모리, 입출력장치, 그리고 이들을 잇는 버스로 구성되며, 명령어 사이클에 따라 작동한다.
- 대부분의 컴퓨터는 폰 노이만 구조를 따르지만, ‘폰 노이만 병목 현상’을 극복하기 위해 하버드 구조의 특징을 결합한 수정된 형태를 사용한다.
구성 요소 | 역할 | 비유 |
---|---|---|
중앙처리장치 (CPU) | 명령어를 해석하고 연산을 수행하는 컴퓨터의 두뇌 | 총지휘하는 요리사 |
메모리 (Memory) | 명령어(프로그램)와 데이터를 저장하는 작업 공간 | 요리법과 재료를 보관하는 저장고 |
입출력장치 (I/O Devices) | 컴퓨터와 사용자 또는 다른 기기 간의 소통을 담당 | 주방의 문, 창문, 배달 시스템 |
시스템 버스 (System Bus) | 위 세 요소를 연결하여 데이터를 전송하는 통로 | 저장고와 요리사를 잇는 길 |
폰 노이만 구조의 4가지 핵심 구성 요소
중앙처리장치 (CPU: Central Processing Unit)
- CPU는 컴퓨터의 모든 작동을 통제하고 실제 연산을 수행하는 핵심 장치다. CPU 내부는 다시 크게 세 부분으로 나뉜다.
- 산술/논리 연산 장치 (ALU: Arithmetic Logic Unit):
- 덧셈, 뺄셈 같은 산술 연산과 AND, OR 같은 논리 연산을 직접 수행하는 계산기다. CPU의 실질적인 계산 능력은 ALU에서 나온다.
- 제어 장치 (CU: Control Unit):
- 메모리에서 읽어온 명령어를 해석하고, 각 장치에 “무엇을 할지” 지시하는 신호를 보내는 총사령관이다.
- 데이터의 흐름을 통제하고 작업 순서를 결정한다.
- 레지스터 (Registers):
- CPU 내부에 존재하는 매우 빠른 임시 저장 공간이다.
- 메모리에서 가져온 명령어, 데이터, 연산 결과 등을 잠시 보관하여 CPU가 빠르게 접근할 수 있도록 돕는다.
- CPU의 개인 작업 책상이라고 비유할 수 있다.
메모리 (Memory Unit)
- 메모리는 프로그램 코드(명령어)와 그 코드가 사용할 데이터가 함께 저장되는 공간이다.
- CPU는 메모리에 있는 주소(address)를 통해 특정 위치의 명령어와 데이터를 읽고 쓸 수 있다.
- 폰 노이만 구조의 핵심은 바로 이처럼 명령어와 데이터가 구분 없이 동일한 메모리 공간에 저장된다는 점이다.
입출력장치 (Input/Output Devices)
- 입력 장치: 키보드, 마우스, 스캐너, 마이크 등 외부의 데이터를 컴퓨터 내부로 전달한다.
- 출력 장치: 모니터, 프린터, 스피커 등 컴퓨터 내부의 데이터를 외부로 전달한다.
시스템 버스 (System Bus)
- 버스는 각 구성 요소를 물리적으로 연결하여 데이터와 신호를 주고받을 수 있게 하는 통신 경로
- 주소 버스 (Address Bus):
- CPU가 메모리나 입출력장치의 특정 위치를 지정할 때 사용하는 단방향 통로. 주소 정보만 전달한다.
- 데이터 버스 (Data Bus):
- CPU, 메모리, 입출력장치 간에 실제 데이터를 주고받는 양방향 통로.
- 제어 버스 (Control Bus):
- CPU가 다른 장치들을 제어하기 위한 신호(읽기, 쓰기 등)를 보내는 통로.
폰 노이만 구조는 어떻게 작동하는가? 명령어 사이클
- 컴퓨터는 CPU를 중심으로 ‘명령어 사이클(Instruction Cycle)‘이라는 정해진 과정을 무한히 반복하며 작동한다.
- 이 과정은 크게 인출(Fetch) → 해독(Decode) → 실행(Execute) 3단계로 이루어진다.
- 세 단계가 끝나면 프로그램 카운터(PC)는 다음 명령어를 가리키도록 자동으로 증가하고,
- CPU는 다시 다음 명령어를 인출하며 이 사이클을 프로그램이 끝날 때까지 쉼 없이 반복한다.
- 인출 단계 (Fetch Cycle)
- CPU의 제어 장치(CU)는 다음에 실행할 명령어가 저장된 메모리 주소를 **프로그램 카운터(PC, Program Counter)**라는 레지스터를 통해 확인한다.
- CU는 주소 버스를 통해 해당 메모리 주소를 메모리에 전달한다.
- 메모리는 해당 주소에 저장된 명령어를 데이터 버스를 통해 CPU로 보낸다.
- CPU는 받아온 명령어를 명령어 레지스터(IR, Instruction Register) 에 임시로 저장한다.
- 해독 단계 (Decode Cycle)
- CU는 명령어 레지스터(IR)에 있는 명령어의 비트 패턴을 해석한다
- “이 명령어는 덧셈을 하라는 뜻이구나”, “메모리 100번지의 데이터가 필요하구나” 와 같이 명령의 의미를 파악한다.
- 실행 단계 (Execute Cycle)
- 해독된 명령어에 따라 실제 작업을 수행한다.
- 만약 덧셈 명령어라면, CU는 ALU에 덧셈을 수행하라는 제어 신호를 보낸다.
- 필요한 데이터가 있다면 메모리에서 해당 데이터를 다시 가져와(이 과정도 인출의 일종) ALU로 보낸다.
- ALU는 연산을 수행하고, 그 결과는 특정 레지스터나 메모리에 저장된다.
- 해독된 명령어에 따라 실제 작업을 수행한다.
폰 노이만 병목 현상 (Von Neumann Bottleneck)
-
가장 큰 단점은 명령어를 가져오는 통로와 데이터를 가져오는 통로가 시스템 버스로 동일하다는 것이다.
- CPU의 처리 속도는 메모리의 접근 속도에 비해 훨씬 빠르다.
- 그런데 CPU가 아무리 빨라도 명령어와 데이터를 동시에 가져올 수 없고, 하나의 버스를 통해 순차적으로 가져와야만 한다.
-
이는 왕복 1차선 도로에 비유할 수 있다.
- 아무리 빠른 자동차(CPU)라도 도로(시스템 버스)가 좁고 막히면 속도를 낼 수 없다.
-
이처럼 CPU와 메모리 간의 속도 차이, 그리고 단일 통로로 인한 데이터 전송 지연 현상을 ‘폰 노이만 병목 현상’이라고 부른다.
구분 | 폰 노이만 구조 | 하버드 구조 |
---|---|---|
메모리 | 명령어와 데이터가 동일한 메모리에 저장 | 명령어와 데이터 메모리가 물리적으로 분리 |
버스 | 단일 시스템 버스 사용 | 명령어 버스와 데이터 버스가 분리 |
장점 | 구조가 단순하고 유연성이 높음 | 명령어와 데이터를 동시에 접근 가능하여 속도가 빠름 (병목 현상 완화) |
단점 | 폰 노이만 병목 현상 발생 가능 | 구조가 복잡하고 비용이 높음 |
-
현대의 CPU는 기본적으로 폰 노이만 구조를 따른다.
- 즉, 메인 메모리(RAM)에는 명령어와 데이터가 함께 저장된다.
- 하지만 CPU 내부적으로는 폰 노이만 병목 현상을 극복하기 위해 하버드 구조의 아이디어를 차용한다.
-
CPU 내부의 고속 캐시 메모리(Cache Memory)를 명령어 전용 캐시(L1 Instruction Cache)와 데이터 전용 캐시(L1 Data Cache)로 분리하는 것이 그 예다. (캐싱)
- CPU는 메인 메모리에서 명령어와 데이터를 가져와 각각의 전용 캐시에 저장해두고,
- 다음 작업부터는 이 분리된 캐시에 별도의 버스로 동시에 접근한다.
-
이를 통해 CPU 코어와 캐시 메모리 사이에서는 하버드 구조처럼 작동하여 병목 현상을 크게 완화할 수 있다.
-
이처럼 현대 컴퓨터는 두 구조의 장점을 결합한 ‘수정된 하버드 구조(Modified Harvard Architecture)‘를 채택하고 있다.