목차
폰 노이만 구조
수학이나 컴퓨터 구조를 공부할 때, 종종 등장하는 폰 노이만. (정말 대단합니다…)
현대 컴퓨터의 구조도 폰 노이만이 설계한 구조를 사용하고 있습니다.
•
프로세서 : 중앙 처리 장치는 모든 연산과 제어 명령을 처리합니다. CPU는 연산을 수행하는 산술 논리 장치(ALU)와 명령어들을 순차적으로 처리하는 제어 유닛(CU)을 포함합니다.
•
메모리 : 메모리는 데이터와 프로그램의 명령어를 저장합니다. 폰 노이만 구조에서는 데이터와 명령어가 같은 메모리에 저장되며 이를 '프로그램 내장 방식'이라고 합니다.
이 부분이 폰 노이만 구조의 핵심입니다. 지금은 메모리에 프로그램 코드와 데이터를 함께 적재해서 사용하지만, 이전 구조에서는 그렇지 않았습니다.
여러 프로그램을 실행하려면 전기 배선을 직접 바꿔야 했습니다.
예를 들어 덧셈 장치에서 뺄셈 장치로 바꾸기 위해서는 이런 작업들이 필요했습니다.
•
입출력 장치 : 컴퓨터와 외부 환경 간의 데이터를 교환하는 장치입니다. 예를 들어, 키보드, 마우스, 디스플레이, 네트워크 어댑터 등이 이에 해당합니다.
•
버스 : 프로세서, 메모리, 입출력 장치 간의 데이터 전송을 위한 통신 경로입니다. 데이터 버스, 주소 버스, 제어 버스 등이 있습니다.
폰 노이만 구조의 한계
•
폰 노이만 병목현상 : 폰 노이만 구조에서는 CPU가 메모리에서 데이터와 명령어를 순차적으로 불러와야 합니다. 이 때 메모리의 속도가 CPU의 처리 속도를 따라가지 못하면 CPU는 데이터를 기다리는 시간 동안 유휴 상태가 되어 시스템의 전체 성능이 저하됩니다. 이를 해결하기 위해 캐시 메모리 같은 기술이 도입되었습니다.
캐시와 같은 기술뿐만 아니라 현대 메모리는 DDR4, DDR5와 같이 큰 대역폭의 데이터 버스로 발전하고 있습니다. CPU의 처리 속도가 빨라지는 만큼 데이터 버스의 크기도 커지면서 데이터를 불러오는 속도도 빨라지고 있죠.
•
메모리 구조의 제한 : 폰 노이만 구조는 명령어와 데이터를 동일한 메모리에 저장합니다. 이로 인해 명령어의 길이나 형태가 메모리의 구조에 의해 제한되며, 효율적인 메모리 사용에 한계가 있습니다.
•
보안 취약성: 같은 메모리에 데이터와 프로그램이 저장되어 있기 때문에, 악성 프로그램이 쉽게 데이터를 조작하거나 불법적으로 접근할 수 있습니다.
•
프로그램과 데이터의 구분 부재 : 명령어와 데이터가 같은 메모리 공간에 존재함으로써, 명령어가 데이터로 해석되거나 그 반대의 오류가 발생할 가능성이 있습니다.
사실상 위 부분들은 아키텍처로서 문제가 있어 보이지만, 현대의 하드웨어와 운영체제가 이를 해결합니다.
예를 들어, 메모리 구조의 제한은 버스의 대역폭을 크게 하거나 읽기/쓰기 속도를 향상시켜 하드웨어적으로 해결할 수 있습니다.
보안 취약성이나 데이터의 구분 부재 또한 운영체제가 해당 메모리를 논리적으로 구분함으로써 해결할 수 있습니다.
예를 들어, 코드 영역의 프로그램 코드는 읽기만 가능하게 하거나, 어떤 프로세스가 할당된 메모리 영역이 아닌 다른 메모리 영역에 접근할 시 강제 종료시킬 수도 있습니다.
•
병렬 처리의 제한 : 폰 노이만 구조는 기본적으로 순차적 처리를 기반으로 합니다. 따라서 데이터나 명령어를 병렬적으로 처리하는 데 있어 구조적인 한계가 있습니다.
이는 폰 노이만 구조에서 CPU가 여러 문제를 병렬 처리해서 빠르게 푸는 것보다, 어려운 문제를 빠르게 푸는 단일 방식에 중점을 두기 때문입니다.
그래서 아무리 멀티 코어를 많이 가진 CPU라도 병렬 처리에 최적화되어 있지 않습니다. 이를 해결하기 위해 병렬 처리 문제를 전담하는 GPU가 있습니다.
GPU는 수천 개 이상의 코어들이 여러 문제를 동시에 푸는 연산 장치입니다. (하지만 한 가지 어려운 문제의 경우, CPU보다 훨씬 느립니다.)