찰리의 놀이터

[CS] 폰노이만 아키텍처(Von Neumann Architecture) 본문

Computer Science

[CS] 폰노이만 아키텍처(Von Neumann Architecture)

차알리 2023. 3. 19. 14:54

컴퓨터의 설계 관점에서 분석할 때, 1940년대 이후 지금까지 거의 모든 컴퓨터가 폰노이만의 구조(Von Neumann Architecture)를 기반으로 합니다.

그는 컴퓨터 분야 외에도 수학, 경제학, 물리학 등 다양한 분야에서 큰 영향을 끼친 인물입니다.
대학교수 시절, 양자역햑의 수학적 기초와 집합론의 공리화, 에르고드 이론의 연구, 실내 게임 이론 등에 관한 논문을 집필하였습니다.
세계 2차 대전 당시에는 맨해튼 프로젝트에 참여하여, 원자 폭탄의 핵심 기술인 고폭발성 렌즈를 개발하였고, 인공 생명을 최초로 연구하여 자기 복제의 원리를 수학적으로 증명하였습니다.


폰 노이만의 구조(Von Neumann Architecture)

1945년 이전, 폰 노이만의 구조가 제안되기 전까지 애니악(ENIAC)이라는 최초의 컴퓨터가 주로 이용되었습니다. 애니악은 계산을 진행할 때마다, 손으로 직접 진공관의 회로 스위치를 다시 조정하여 새 입력을 처리하는 하드웨어 프로그램 방식이었습니다.


맨해튼 프로젝트에서 <전자계산기의 이론 설계 서론>이라는 논문에서 프로그램 내장 방식 컴퓨터를 최초로 제안하였습니다.
7년 후, 이를 바탕으로 한 최초의 프로그램 내장 전자식 컴퓨터에드삭(EDSAC)이 제작 되었습니다.
현재까지도 모든 범용 컴퓨터들이 폰노이만의 구조를 따르고 있습니다.

  • 산술 논리 장치(ALU)와 프로세서 레지스터를 포함하는 처리 장치
  • 명령 레지스터와 프로그램 카운터를 포함하는 컨트롤 유닛
  • 데이터와 명령어를 저장하는 메모리 (Memory Unit에는 Program Memory와 Data Memory가 있습니다.)
  • 외부 대용량 스토리지
  • 입출력 메커니즘

가장 큰 장점프로그램 내장 방식 컴퓨터라는 것입니다.
애니악에서 1+5를 수행하기 위해선 전선을 1과 더하기, 그리고 5에 끼워 입력해야 했습니다.
프로그램 내장 방식에서는 연산 기능의 소프트웨어가 메모리 안에 내장되어 있고, 계산이 필요할 때마다 메모리 안의 프로그램과 데이터를 CPU에 전달하여 연산을 수행합니다.


수행 순서는 아래와 같이 진행됩니다.

  • fetch : CPU가 메모리에 저장된 명령어를 가져옵니다.
  • decode : 명령어를 해석합니다.
  • execute : 명령어를 실행합니다.
  • store : 결과를 저장합니다.

또한, 폰 노이만의 구조는 내장 메모리 순차처리 방식을 따르고 있기 때문에, CPU는 순차적으로 한 번에 명령어 하나씩 실행합니다.

폰 노이만의 병목현상(Von Neumann Bottleneck)

기억장치의 속도가 전체 시스템의 성능 저하를 야기하는 현상폰 노이만의 병목현상이라고 합니다.
인간의 사고과정을 참고하여 설계한 구조이기 때문에, 폰 노이만의 구조는 우리가 어떤 연산을 마주했을 때, 머릿 속의 기억을 불러와서 계산하는 과정과 유사합니다.


여기서 치명적인 단점은, 빠르게 계산할 수 있는 능력이 있더라도 기억을 불러오는 속도가 느리다면, 연산을 수행하는 전체의 속도가 느려진다는 것입니다.

이를 해결하기 위해 다양한 기술 및 구조가 등장하였습니다.
CPU가 명령어와 데이터를 동시에 사용할 수 있도록 명령용 버스와 데이터용 버스를 물리적으로 구분한 하버드 구조와 이외에도 메모리 계층 구조, NUMA 등 여러 방법을 통해 한계를 극복하고자 하였습니다.


또 하나의 문제점순차적으로 한 번에 하나의 명령어를 처리하는 CPU의 사용이 효율적이지 못하다는 것입니다.

순차처리 방식은 수치 계산이나, 정밀하게 작성된 프로그램을 실행하는 상황에서는 탁월한 성능을 보이지만, 이미지 또는 음성 데이터와 같은 아날로그 데이터를 처리하는데 효율성이 떨어진다는 한계점이 있습니다.

이 문제 역시나 해결하기 위해 명령어 병렬처리, 대칭형 다중처리(SMP), 대규모 병렬 컴퓨터(MPP) 등 다양한 병렬처리 방식이 등장하였습니다.

병렬처리 방식은 하나의 프로그램을 여러 개의 프로세서로 분담하여 동시에 처리하여, 처리 속도와 효율성을 향상시키는 것을 추구하는 기술입니다.

병렬처리 역시도 모든 상황에서 효율적이지 못하다는 점처리를 위해 부가적으로 시간이 들어가는 오버헤드 현상이 발생한다는 점 등의 단점으로 인해 폰노이만의 구조를 완전히 대체하기에는 적절하지 않습니다.


다음 포스팅에서는 폰 노이만의 구조를 개선하고자 했던 노력과 병렬처리에 대해서 다뤄보도록 하겠습니다.