![34abd23eabc236a14e81d2b628f172646e68](https://dcimg3.dcinside.co.kr/viewimage.php?id=3dafdf21f7d335ab67b1d1&no=24b0d769e1d32ca73de887fa11d02831fda25116b354fdde343a07ad05c20efd92ed85aa27652a622fbc712b0d65d7851a783228d40b8b9bc7ce6fe68652a993511510226aec8a)
폰 노이만 구조(영어: Von Neumann architecture)는
에드박의 보고서 최초 초안(First Draft of a Report on the EDVAC)에서 수학자이자
컴퓨터과학자 존 폰 노이만과 다른 사람들이 서술한 1945년 설명에 기반한 컴퓨터 아키텍처이다.
일반적으로 노이만 구조는 다음 다섯가지로 정의된다.
[ 입력 장치Input ] : 컴퓨터에 외부 정보를 입력하기 위한 마우스, 키보드, 디스크(파일 읽기), 네트워크 카드(네트워크 수신) 등
[ 출력 장치Output ] : 모니터, 디스크(파일 쓰기), 네트워크 카드(네트워크 전송) 등 컴퓨터 정보를 외부로 출력합니다.
[ 메모리Memory ]: 메모리, 데이터 및 프로그램 저장
[ 연산장치Arithmetic/Logic Unit ]: 산술 연산 및 논리 연산을 완료합니다.
[ 컨트롤러 Control Unit]: 명령어의 디코딩 및 실행을 담당하며 다양한 부분의 조정을 제어합니다.
사실 이것은 과거의 구분이고 최근에는
여기서 연산장치는 보통 제어장치와 합쳐서 CPU(중앙 처리 장치)라 부르고
디스크와 네트워크 카드등 입/출력이 함께 동작하는 경우가 많다.
또한 1차 메모리(RAM), 2차 메모리(HD,SSD)로 메모리를 구분 하지만 이부분은 생략한다.
각 하드웨어는 독립적으로 존재하고, 하드웨어간의 관계를 설정할때 일반적으로 bus를 사용하여 연결하는데
버스는 일반적으로 '고전적' 시스템에선 시스템 버스와 IO 버스로 구분된다.
고전적 폰 노이만 구조에서 이 버스가 크게 2가지인데
[시스템 버스(System Bus)] 메모리- 연산 장치 및 컨트롤러의 연결
[IO 버스] 메모리 영역과 입출력 장치 사이의 연결
그러나 현대적 컴퓨터 구조는 다양한 버스들이 존재하며, 이러한 버스들의 위계구조나 프로토콜이 훨씬 세분화 되어서 계층화되어있다.
과거의 개념으로는
컴퓨터는 바이너리만 인식할 수 있으며 사용자와 컴퓨터는 직접 상호 작용할 수 없으며 입출력 장치를 통해 통신해야 한다.
장치에는 순수 입력 장치와 출력 장치가 있고 호환 가능한 입력 장치와 출력 장치가 있다
중앙 처리 장치(CPU): 산술 장치와 컨트롤러가 포함된다.
캐시에 관계없이 여기의 CPU는 메모리를 읽고 쓸 수만 있고 주변 장치(입력 또는 출력 장치)에 액세스할 수 없다.
주변 장치(입력 또는 출력 장치)는 데이터를 입력하거나 출력해야 하며 메모리에 쓰거나 메모리에서 읽을 수만 있다
간단히 말해서 모든 장치는 메모리만 직접 처리할 수 있다
라고 할 수 있지만.
현대적인 컴퓨터 아키텍쳐에서는 버스 구조내에서 CPU/메모리/IO장치가 서로 다양한 방식으로 데이터를 주고 받는다
그렇다면 왜 폰 노이만 시스템 구조가 설계됐는가?
폰 노이만 구조는 프로그램 내부 저장(Stored Program Concept)라는 아이디어를 기반으로 설계되었다.
이 개념은 프로그램과 데이터를 동일한 메모리 공간에 저장하여, CPU가 동적으로 명령어를 읽고 실행하는데
이는 당시의 진공관 기반 시스템의 효율성을 고려한 설계였다.
![34abd23eb79c28a8699fe8b115ef046ca76de1a1](https://dcimg3.dcinside.co.kr/viewimage.php?id=3dafdf21f7d335ab67b1d1&no=24b0d769e1d32ca73de887fa11d02831fda25116b354fdde343a07ad05c20efd92ed85aa27652a622fbc712b0d65d7851a783228d40b8b9bc7ce6fb7db50ac97f532927e4716fb)
컴퓨터 스토리지의 계층 구조(스토리지 피라미드)는 CPU에 가까울수록 더 작은 용량이지만 높은 효율을 제공하며 구축 비용이 많이 든다.,
폰 노이만 시스템 구조에서 I/O 장치가 CPU에 빠르게 접근할 수 있을 것처럼 보이지만,
실제로는 컴퓨터 전반의 효율성이 데이터 장치 간의 복사 속도와 CPU의 데이터 처리 속도 조율에 크게 좌우된다.
고전적인 구조에서는 맞는말이지만은 실제 하드웨어상에서는 Von Neumann Bottleneck의 (노이만 병목)이 발생하는데
전통적인 노이만 구조에서는 CPU-메모리-I/O 장치를 하나의 버스로 연결되기때문에 CPU와 메모리 대역폭과 I/O 장치 속도 차이로 인한 병목이 발생하는데
현대적인 구조에서는 CPU가 완전히 대기만하는 것이 아닌,
OS 스케쥴링, 비동기 I/O, 멀티코어-멀티 스레드등으로 CPU가 I/O를 기다리는 동안 다른 작업을 처리할 수 있다.
노이만 병목-> CPU와 메모리 간 데이터 전송 속도가 전체 시스템 성능을 제한하는 문제
메모리의 역할
고전적 노이만 구조에서
[ 메모리를 버퍼로 사용 ]: 대량의 데이터를 미리 메모리에 올려놓아 CPU가 직접 입출력 장치를 기다리는 시간을 줄인다 .
메모리는 주변 장치보다 훨씬 빠르게 읽고 쓸 수 있어 필요한 데이터를 CPU에 더 빠르게 제공된다.
데이터 전송 속도를 가속화하고 CPU에 대한 효율적인 지원을 제공.
-> 다만 실제로 최근에는 캐시-버퍼-등 다양한 기법이 함께 작동해서, 구체적으로는 버스 구조, 캐시 계층등의 더 복잡함이 있다.
-> 캐시 계층 구조, L1,L2,L3 캐시등 여러 단계의 캐시를 통해 데이터 접근 속도를 최적화한다.
[ 병렬성 향상을 위한 별도의 작업 ]: CPU가 메모리에서 데이터를 읽는 과정과 외부 장치가 데이터를 메모리로 가져오는 두 가지 과정을 동시에 수행 할 수 있다
이 병렬 처리 방법은 직렬 실행으로 인한 비효율성을 방지.
데이터 흐름의 병렬화를 달성하고 전반적인 효율성을 크게 향상시킨다.
->다만 실제로 하드웨어 수준에서는 캐시 동기화(DMA로 들어온 데이터와 CPU 캐시간의 불일치)등의 문제로 이론상에서만 성립된다.
실제로 이론상에서는 병렬처리가 가능하다고 해도, 완벽하게 독립적으로 동작하는게 아닌 프로토콜로 분배되어 동작하게 된다.
(이를 프로토콜 의존성이라고 한다.)
기실 현대와 고전적 노이만 구조는 일정부분 차이가 있는 셈이다.
댓글 영역
획득법
① NFT 발행
작성한 게시물을 NFT로 발행하면 일주일 동안 사용할 수 있습니다. (최초 1회)
② NFT 구매
다른 이용자의 NFT를 구매하면 한 달 동안 사용할 수 있습니다. (구매 시마다 갱신)
사용법
디시콘에서지갑연결시 바로 사용 가능합니다.