폰 노이만, 하버드, 수정된 하버드 아키텍처

2022. 9. 18. 14:03Computer System

Von Neumann Architecture

폰 노이만 구조는 폰 노이만에 의해 고안된 디지털 컴퓨터의 설계 구조로, 명령어(instruction)들과 데이터(data)들이 같은 메모리에 저장되며, 명령어와 데이터의 메모리 주소가 하나의 주소 공간(address space)을 공유한다. 폰 노이만 구조는 명령어와 데이터를 동시에 가져올 수 없는데, 같은 메모리 버스(memory bus)를 공유하기 때문이다. 메모리 버스를 공유하면 한 번에 하나의 명령어 또는 데이터 메모리 주소에 접근이 가능하기 때문에 처리에 필요한 데이터가 많아지면 병목 현상이 발생하게 되는데, 이 병목 현상을 폰 노이만 병목(Von Neumann bottleneck)이라 한다.

 

 

Harvard Architecture

사진을 보면 폰 노이만과 하버드 구조의 가장 큰 차이점이 나와있다. 하나의 메모리만 존재했던 폰 노이만 구조와는 달리, 하버드 구조는 명령어와 데이터의 메모리가 분리되어 있으며, 각각의 메모리 버스가 존재한다는 것이다. 따라서 명령어와 데이터에 동시에 접근이 가능해졌으며, 폰 노이만 병목을 어느정도 완화하였다. 또한, 각 메모리 별로 각자의 주소 공간이 존재한다. 즉, 폰 노이만 구조에서는 100번지가 의미하는 것이 명령어 또는 데이터 둘 중 하나지만, 하버드 구조에서는 명령어가 저장된 100번지와 데이터가 저장된 100번지가 공존한다는 것이다. 이것은 메모리 낭비로 이어질 수 있는데, 예를 들어 램 4GB를 명령어와 데이터 주소 공간에 각각 2GB씩 부여한다고 했을때, 명령어 주소 공간을 500MB밖에 사용을 안하는데 데이터 주소 공간은 2GB 넘게 필요로 한다면, 명령어 주소 공간의 1.5GB가 낭비되는 것이다. 또한 코드 영역에 저장된 상수가 어떤 함수의 인자로 전달될 때 문제가 될 수 있는데, 호출되는 함수 입장에서는 매개변수로 전달받은 포인터가 가리키는 주소가 어느 주소 공간에서 왔는지 알 수 없기 때문이다. 이 때 포인터를 역참조를 하게 되면 데이터 주소 공간에 있는 이상한 데이터를 가져오게 될 것이다.

 

 

Modified Harvard Architecture

수정된 하버드 구조는 이름 그대로 하버드 구조가 수정된 것이다. 사실 수정된 하버드 구조는 여러가지 버전이 존재하는데, 가장 흔한 버전은 현대 CPU와 같이 보통 L1 캐시에서 명령어와 데이터를 분리하고, 보다 낮은 단계의 메모리에서는 메모리를 통합하여 계층을 형성하는 것이다. 이 구조에서 코드가 실행될 때는 명령어와 데이터들이 각각의 캐시로 옮겨져야 하므로 하버드 구조의 메모리 동시 접근의 장점을 통해 폰 노이만 병목을 완화할 수 있다. 또한 이 구조는 폰 노이만 구조와 같이 주소 공간이 하나로 통합되어 있어 하버드 구조의 메모리가 낭비나 다른 주소 공간을 역참조하는 등의 문제가 발생하지 않는다. 다른 버전의 수정된 하버드 구조는 [3], [4]에 소개된 내용을 참고.

 

[참고]

[1] https://en.wikipedia.org/wiki/Von_Neumann_architecture

[2] https://en.wikipedia.org/wiki/Harvard_architecture

[3] https://en.wikipedia.org/wiki/Modified_Harvard_architecture

[4] http://ithare.com/modified-harvard-architecture-clarifying-confusion/#rabbitref-WikiModifiedHarvard

[5] https://www.quora.com/Should-modern-computers-switch-to-Harvard-architecture-What-are-the-pros-and-cons