문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 폰노이만 구조 (문서 편집) [include(틀:컴퓨터공학)] [include(틀:이론 컴퓨터 과학)] [목차] == 개요 == {{{+1 Von Neumann architecture}}} [[존 폰 노이만]]이 제시한 [[컴퓨터 구조]]. 프로그램 내장 방식이라고도 불리며, 이론상 [[튜링 머신]]과 같은 일을 할 수 있다.[* 이를 “[[튜링 완전]]하다”라고 한다.] 폰노이만 구조가 등장하기 이전의 컴퓨터들은 스위치를 설치하고 전선을 연결하여 데이터를 전송하고 신호를 처리하는 식으로 [[프로그래밍]]을 하였다. 그리고 폰 노이만 구조는 '''중앙처리장치(CPU), 메모리, 프로그램''' 이 세 가지 구성요소로 이루어져 있다. 폰노이만 구조의 [[디지털]] 컴퓨터에서는 "저장된 프로그램"(stored-program)의 개념이 도입되었다. 이는 프로그램을 구성하는 명령어들을 [[RAM|임의 접근이 가능한 메모리]]상에 순차로 배열하고, 동시에 조건 분기[* 조건에 따라 메모리의 특정 위치에 있는 명령어를 불러와 실행하는 것.]를 무제한으로 허용[* 조건 분기가 무제한으로 허용되는 기계는 [[튜링 완전]]하다. 여기서 무제한이라는 말은 횟수 제한이 없다는 것이다.]한다는 것을 뜻한다. 폰노이만 구조에서는 같은 메모리 속에 실행코드와 데이터가 따로 구분되지 않고 함께 섞여 있다. == 역사 == 1944년, 모클리와 에커트는 최초의 범용 전자 컴퓨터 [[ENIAC|에니악(ENIAC)]]을 개발하면서 "스위치 설치와 전선 연결" 방식[* 현대의 [[FPGA]]와 개념은 거의 동일하지만, 1940년대에는 논리회로를 사람이 손수 짜줘야 했다.]의 커다란 단점을 깨달았다. 그래서 이들은 EDVAC을 설계하면서 프로그램을 기억장치에 저장하고 명령을 불러오는 방법을 연구했고 이를 메모로 남겼다. 폰 노이만은 에니악 제작에 뛰어들면서 에드박 이야기를 듣고 <[[https://en.wikipedia.org/wiki/First_Draft_of_a_Report_on_the_EDVAC|에드박에 관한 보고서 초안]]>을 작성한다. 폰 노이만에게 에니악을 소개시켜줬던 골드스타인 장교가 이 글을 배포해 버렸다. 문제는 '''그 보고서에 폰노이만 자신의 이름밖에 없었다는 것.''' 그 이후 모클리와 에커트는 EMCC라는 회사를 세우고 UNIVAC을 팔아 성공하지만, 돈이 바닥나자 회사와 에니악 특허 사용권을 레밍턴랜드에 팔고, 그 보고서에 있던 에니악의 설계 때문에 에니악의 특허도 무효가 되어 버렸다. 물론 폰노이만은 "폰 노이만 구조"의 제창자로서 이름을 날렸다. 모클리와 에커트는 폰 노이만 구조의 실제 창시자가 본인들인 것을 알 수 있게 공개 해명해달라고 여러 차례 폰 노이만에게 요구했으나 묵살당했다. 이러한 이유로 "폰 노이만 구조"가 아니라 "에커트 구조"라고 불러야 한다는 사람들도 있다. 이후 폰노이만의 보고서를 통해 또 다른 내장 프로그램 방식 애드삭도 만들어졌다. 많은 대중들이 폰노이만 본인이 애드박 또는 애드삭을 만들었다고 잘못 알려져있는데, 이는 사실이 아니다. 애드박은 프레스퍼 에커트, 존 모클리가 만들었고 애드삭은 모리스 윌크스가 만들었다. 폰노이만은 에니악 프로젝트 막단에 자문위원으로 참여한 인물로, 에니악의 후속버전인 애드박 개발과정에서 작성한 보고서를 통해 폰노이만 구조가 세상에 처음 소개된 것으로 알려진다. [[https://history.computer.org/pioneers/von-neumann.html|#]] 이 엄청난 편의성 때문에 현재 '''거의 모든 컴퓨터들은 폰노이만 구조'''를 따르고 있다. [[클라우드 컴퓨팅]] 같이 네트워크가 필수인 구조는 예외. 네트워크가 하드웨어 속성 중 하나이기 때문에 외부로는 폰노이만 구조를 따르지 못한다. 하지만 개별 컴퓨터는 여전히 폰노이만 구조를 따르고 있다. == 장점 == 컴퓨터에 다른 작업을 시키려고 할 때 굳이 [[하드웨어]](전선)를 재배치할 필요 없이 [[소프트웨어]](프로그램)만 교체하면 되기 때문에 범용성이 크게 향상된다는 것이다. 전선을 일일이 교체하면 교체인원도 많이 필요하고 시간도 많이 잡아먹는 등 여러모로 불편함이 있지만[* [[에니악]]이 이러한 구조를 가지고 있다.], 폰노이만 구조를 도입하면 프로그램을 교체하는 것으로 모든 일이 끝난다. == 단점 == 폰노이만 [[병목현상]]이 있다. 우선 메모리의 값을 읽고 쓰는 구조이기 때문에 기억장치에 병목현상이 생길 수밖에 없다. [[메모리 계층 구조]][* [[레지스터]] > [[캐시 메모리]] > [[RAM]] > [[하드 디스크 드라이브|HDD]]/[[SSD]](보조기억장치) 식의 계층구조]나 [[NUMA]], DMA같은 것들이 모두 이러한 문제를 조금이나마 완화하기 위해 도입된 기술들이다. 또한 코드를 순차로 실행하기 때문에 정해진 입력에 따라 정해진 값만을 출력하는 멍청한 구조, 즉 '결정적 유한 오토마타'의 한계에 묶이기 쉽다. [[GIGO]]가 나온 이유도 그렇고, [[P-NP 문제]]가 여전히 난제인 것도 이 때문. 같은 이유로 [[난수생성]]도 우리가 원하는 진짜 [[난수]]를 생성하려면 특수한 하드웨어 없이는 불가능하다. 이건 [[SIMD]] 구조도 마찬가지라, [[CUDA]] 같은 병렬 처리 아키텍처도 예외는 아니다. === 해결책과 한계 === 폰노이만 병목현상을 해결하기 위해 약간의 변형을 가하여, 메모리를 명령어가 저장되는 곳과 데이터를 저장하는 곳으로 구분한 '''하버드 아키텍처'''가 있다. 현대의 컴퓨터는 외부는 폰노이만 구조를 쓰고 있으나 [[CPU]] 내부는 하버드 아키텍처를 적용[* 예를 들면 [[인텔 코어 i 시리즈]] CPU를 살펴보면 1세대~9세대 기준 각 코어의 L1 캐시 메모리는 명령어용 32KB, 데이터용 32KB로 나뉘어 있다.]해서 속도를 향상시킨 것이 많다. 그러나 이것 또한 폰노이만 구조를 기반으로 만들어진 것이기 때문에 병목현상만 어느 정도 해결할 뿐 메모리 속의 프로그램을 순차로 실행하는 근본 구조는 변하지 않는다. [[난해한 프로그래밍 언어]]들 중 일부는 이러한 구조를 까기 위해 만들어지기도 하는데, 대표격으로 꼽히는 것이 ‘Java2K’이다. 다른 시도도 있다. ‘[[뉴로모픽 컴퓨팅]]’이라고 하여, [[인간]]과 같은 고등동물의 [[뇌]] 구조를 모방한 [[인공신경망]] 형태의 집적회로를 만들어 기존의 컴퓨터 구조가 지닌 한계를 극복하려는 것이다. [[뉴런]]은 하나하나가 작은 컴퓨터와도 같은데, 이를 모방하여 연산과 기억 기능이 통합된 유닛을 수없이 많이 준비하여 [[통신망#s-3|그물망처럼 병렬로 연결]]한 다음 각 유닛을 이벤트 구동(event-driven) 방식으로 작동시키는 것이다. 다만 병렬처리나 네트워킹은 '''무지막지하게 난도가 높은 방법'''이기 때문에[* 당장, '''이후 계산이 이전 계산에 종속된다면 병렬 처리는 쓸 수 없다.''' 일반항을 쓰지 않고 정석대로 [[피보나치 수열]]을 구한다면 n-1번째를 구하지 않고는 n번째를 구할 수 없는데, 이러한 구조는 병렬 컴퓨터에서 효율이 극악이다.], 이러한 방법은 2014년 [[IBM]] 등에서 [[http://www.bloter.net/archives/202263|선도하여]] [[http://news.zum.com/articles/15334645|연구]]하는 단계에 그치고 있다. 물론 위에 이런 새로운 아키텍처가 폰노이만 아키텍처의 종말을 뜻하는 건 아니며, GPU처럼 CPU의 특정 애플리케이션을 보조해 전체 성능을 늘리는 식으로 쓰일 전망이다. [[분류:컴퓨터 공학]]저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기