CS/운영체제

폰 노이만 구조

12.tka 2021. 1. 21. 14:07
728x90

목표

폰 노이만 구조를 이해할 수 있다.
폰 노이만 구조의 장단점을 이해할 수 있다.

 

1. 애니악(ENIAC)

폰 노이만 구조가 나오기 전에는 애니악이라는 컴퓨터가 주로 이용되었습니다. 애니악은 계산을 할 때마다 손으로 직접 진공관의 회로 스위치를 다시 조정하여 새 입력을 처리하는 하드웨어 프로그램 방식입니다.

 

2. 폰 노이만 구조

폰 노이만 구조 (출처: 위키백과)

폰 노이만 구조는 중앙처리장치(CPU), 메모리, 프로그램 세 가지 요소로 구성되어 있습니다. CPU와 메모리는 서로 분리되어 있고 둘을 연결하는 버스를 통해 명령어 읽기, 데이터 읽기 및 쓰기가 가능합니다. 메모리 안의 프로그램과 데이터 영역은 물리적 구분이 없기 때문에 같은 메모리와 버스를 사용합니다. 따라서 CPU가 명령어와 데이터에 동시 접근할 수 없습니다.

 

폰 노이만 구조의 가장 큰 장점은 프로그램 내장 방식 컴퓨터라는 점입니다. 예전에는 다른 기능을 수행하기 위해서 손으로 직접 회로를 조정하는 작업이 필요하였지만 내장 방식 컴퓨터는 다양한 기능을 담은 소프트웨어가 메모리 안에 내장되어 있습니다. 따라서 연산이 필요할 때마다 메모리 안의 프로그램과 데이터를 CPU에 전달하여 계산을 처리할 수 있습니다. 애니악과 달리 하드웨어는 그대로 두고 소프트웨어만 교체하면 다양한 작업을 처리할 수 있기 때문에 편의성이 크게 증가하였고 범용성이 향상되었습니다.

 

CPU가 연산을 처리하는 과정은 다음과 같습니다. 메모리로부터 명령을 가져오고(fetch), 명령어의 의미를 해석한 후(decode), 명령어를 실행(execute)하고 결과를 저장(store)합니다. 그리고 폰 노이만 구조는 '내장 메모리 순차처리 방식'을 따르고 있기 때문에 CPU는 순차적으로 한 번에 명령어 하나씩 실행합니다.

 

2.1 폰 노이만 구조의 단점

폰 노이만 구조는 프로그램 메모리와 데이터 메모리가 물리적 구분 없이 하나의 버스를 통해 CPU와 교류하기 때문에 계산 속도가 기억장치 속도에 영향을 받습니다. 기억장치의 속도가 전체 시스템의 성능 저하를 야기하는 이 현상을 폰 노이만 병목현상(Bottleneck)이라고 합니다.

 

또 다른 문제점은, 순차적으로 한 번에 하나의 명령어만을 처리하기 때문에 CPU를 효율적으로 사용하지 못한다는 점입니다. 폰 노이만 구조의 순차처리 방식은 정밀하게 작성된 프로그램을 실행하는 데에는 탁월하지만, 이미지나 소리와 같은 아날로그 데이터를 처리하는 데에는 효율성이 낮다는 한계가 있습니다. 이를 해결하기 위해 한 번에 여러 개의 명령어를 처리하는 다양한 병렬 처리 방식이 등장하였습니다. 그러나 병렬 처리 기반으로 하는 컴퓨터 구조를 만들기에는 지나치게 복잡하다는 점과 모든 문제에 효율적으로 적용되는 것이 아니라는 점, 처리를 위해 부가적으로 시간이 들어가는 오버헤드가 발생한다는 점 등 여러 단점으로 인해 폰 노이만 구조를 완전히 대체하기에는 적절하지 않습니다.

 

3. 하버드 구조

폰 노이만 구조의 병목현상을 해결하기 위한 방법 중 하버드 구조에 대해서 알아보겠습니다. 하버드 구조는 CPU가 명령어와 데이터를 동시에 사용할 수 있도록 명령용 버스와 데이터용 버스를 물리적으로 구분했습니다. 이를 통해 현재 명령의 처리를 끝냄과 동시에 다음 명령을 읽어 들일 수 있기 때문에 기존의 폰 노이만 구조보다 더 빠른 속도를 낼 수 있습니다. 그렇지만 이렇게 처리 속도를 높이려면 더 많은 버스가 필요하므로 설계가 복잡하다는 단점이 있습니다. 따라서 현대에는 하나의 구조만 사용하는 것이 아니라 CPU의 외부적으로는 폰 노이만 구조를, 내부적으로는 하버드 구조를 적용함으로써 각 구조의 장점을 최대한 활용하는 구조가 등장하고 있습니다.

하버드 구조 (출처 : 위키백과)

 

 

728x90

'CS > 운영체제' 카테고리의 다른 글

동기와 비동기, 블로킹과 논블로킹  (0) 2021.01.07
스케줄링이란?  (0) 2021.01.06
식사하는 철학자 문제(Dining Philosopher Problem)  (0) 2021.01.05
교착 상태(Deadlock)  (0) 2021.01.05
프로세스와 스레드  (0) 2020.12.29