오늘날 대부분의 컴퓨터는 폰노이만 구조를 따른다.
폰 노이만 구조는 애니악에서 사용했던 하드웨어 프로그램 방식이 아닌, 프로그램 내장 방식으로 프로그래밍과 컴퓨터의 유지보수를 훨씬 효율적으로 만들었다.
폰 노이만 구조
폰 노이만 구조
폰 노이만 구조는 위 그림처럼 중앙 처리 장치 (CPU), 메모리 (Memory), 프로그램 세 가지 요소로 구성되어 있다. CPU와 메모리는 서로 분리되어 있고 이 둘은 버스를 통해서 연결된다. 폰 노이만 구조의 구체적인 동작과정을 알아보기 위해, 폰 노이만 구조의 구성요소들을 살펴보자.
중앙 처리 장치 (CPU)
연산을 수행하고 명령어를 실행하는 핵심 부분으로 연산장치(Arithmetic Logic Unit, ALU)와 제어장치(Control Unit), 레지스터(Register)들로 구성된다.
- 연산장치 (ALU): 연산장치는 산술 및 논리 연산을 수행하는 부분으로, 숫자와 데이터에 대한 계산을 처리한다. 이는 컴퓨터의 기본 연산인 덧셈, 뺄셈, 곱셈, 나눗셈과 같은 산술 연산 뿐만 아니라 논리 연산(AND, OR, NOT 등)을 포함한다. ALU는 레지스터에서 데이터를 읽어와 연산을 수행하고, 결과를 다시 레지스터에 저장한다. 이때 레지스터는 ALU의 입력과 출력을 보관하는 임시 저장소 역할을 한다.
- 제어장치 (Control Unit): 제어장치는 CPU 내에서 명령어를 해석하고, 연산장치와 메모리와의 상호 작용을 조절한다. 명령어가 순차적으로 실행되는지, 조건부로 분기되는지 등을 결정하며 CPU의 시계 신호와 함께 모든 동작을 동기화한다. 제어장치는 프로그램 카운터(Program Counter)와 같은 레지스터를 사용하여 다음에 실행할 명령어의 위치를 추적하고, 명령어 레지스터(Instruction Register)를 통해 현재 실행 중인 명령어를 가져온다.
메모리 (Memory)
데이터와 명령어를 저장하는 장치로, 주기억장치와 보조기억장치로 나뉜다.
- 주기억장치: 주기억장치는 CPU가 실시간으로 데이터와 명령어에 접근할 수 있는 공간을 제공한다. CPU는 주기억장치에서 명령어를 읽어와 실행하며, 데이터를 처리한다. 주기억장치는 CPU에 가까운 위치에 있어 빠른 데이터 액세스가 가능하다. 주기억장치는 전원이 꺼지면 데이터가 소멸하는 휘발성 메모리이며, 대표적인 예시로 RAM(Random Access Memory)이 있다.
- 보조기억장치: 보조기억장치는 데이터의 장기 저장 및 백업을 위한 메모리로 사용된다. 주기억장치와는 다르게 느린 액세스 시간을 갖고 있으며, 데이터 보존이 휘발성이 아닌 비휘발성 메모리이다. HDD, SSD 등이 보조기억장치의 예시이다.
데이터 버스 (Data Bus)와 주소 버스 (Address Bus)
데이터와 주소 정보를 전송하는 통로이다.
데이터 버스 (Data Bus)
- 데이터 버스는 CPU내의 메모리 버퍼 레지스터와 연결된 버스로 메모리 간 데이터 전송, 입출력 장치와 데이터 교환, 그리고 데이터 버스를 통한 다양한 하드웨어 컴포넌트 간의 통신에 사용된다. 데이터 버스는 이진 데이터의 비트들을 전송하며 CPU에서 메모리로 데이터를 보내거나 메모리에서 CPU로 데이터를 전송할 때 사용되어 양방향 통신을 지원한다.
- CPU에서 메모리로 데이터를 전송하려고 할 때, 먼저 CPU는 데이터를 데이터 버스에 올린다. 그리고 데이터 버스는 이진 형태의 데이터 비트들을 전기적 신호로 변환하여 메모리로 전송하고 메모리는 데이터 버스에서 전달받은 데이터를 받아서 저장하거나 필요한 경우 CPU로 다시 반환한다.
주소 버스 (Address Bus)
- 주소 버스는 CPU내의 메모리 주소 레지스터와 연결된 버스로, 메모리나 주변장치에 데이터를 읽거나 쓸 때 위치 정보를 보내기 위해 사용하며 단방향이다.
- CPU가 메모리의 특정 주소에 데이터를 요청할 때, CPU는 주소 정보를 주소 버스에 전송하고 주소 버스는 CPU가 보낸 주소 정보를 메모리로 전달한다. 메모리는 주소 버스에서 전달받은 주소에 해당하는 데이터를 찾아서 CPU로 반환한다.
프로그램의 동작
폰 노이만 구조의 컴퓨터는 아래와 같은 명령어 실행 사이클로 동작한다.
1) 명령어 가져오기 (IF, Instruction Fetch)
프로그램 카운터(PC)는 현재 실행 중인 명령어의 주소를 가리키고, 이 주소를 기반으로 메모리에서 다음 명령어를 가져온다. 메모리로부터 가져온 명령어는 명령어 레지스터(IR)에 저장된다.
2) 명령어 해석 (ID, Instruction Decode)
명령어 레지스터(IR)에 저장된 명령어를 해석한다. 명령어의 종류와 필요한 동작을 파악하며, 필요한 제어 신호를 생성한다. 즉, 어떤 연산을 수행해야 하는지, 어떤 레지스터나 메모리 주소를 사용해야 하는지를 결정한다.
3) 피연산자 인출 (OF, Operands Fetch)
명령어 해석 단계에서 결정된 피연산자(데이터)들을 가져온다. 피연산자는 메모리에서 또는 레지스터에서 읽어올 수 있다.
4) 명령어 실행 (EX, Instruction Execution)
명령어 해석과 피연산자 인출이 완료되면, 실제로 명령어를 실행한다. 산술 논리 연산, 데이터 이동 등 다양한 명령어가 이 단계에서 실행된다. 예를 들어, 덧셈 명령어의 경우, 피연산자를 더하고 결과를 저장할 레지스터에 저장하는 과정이 이루어진다.
5) 인터럽트 체크
프로그램이 실행 중에 인터럽트 요청이 있는지 확인한다. 인터럽트는 하드웨어 장치에서의 이벤트나 운영 체제로부터의 요청 등으로 발생할 수 있고 인터럽트가 발생하면 현재 실행 중인 프로그램의 흐름을 일시적으로 중단하고, 인터럽트 처리 루틴으로 이동한다.
폰 노이만 구조의 단점
병목 현상
CPU는 메모리에서 명령어와 데이터를 불러와야 하는데, 주기억장치로 사용되고 있는 RAM이 CPU의 동작 속도보다 너무 느려 속도 차이가 발생한다. 또한 프로그램 메모리와 데이터 메모리가 물리적 구분없이 하나의 버스를 통해 CPU와 교류하기 때문에 기억장치의 속도가 전체 시스템의 성능 저하를 야기하는 병목현상이 발생한다.
순차처리 방식
폰 노이만 구조의 순차처리 방식은 수치계산이나 정밀한 프로그램 실행에는 탁월하지만, 이미지나 소리와 같은 아날로그 데이터 처리와 같이 복잡한 작업을 수행하는데 제한이 있으며, 병렬 처리에 적합하지 않다.
하버드 구조
폰 노이만 구조의 병목 현상을 완화하고자 나타난 방법 중 하나가 하버드 구조이다.
하버드 구조는 명령어와 데이터를 나눠서 보관한다. 버스 또한 명령어 버스와 데이터 버스를 각각 구성하여 버스의 혼잡을 줄였다. 이로 인해 명령을 읽으면서 동시에 데이터를 저장하는 등의 행위가 가능해져 폰 노이만 병목현상을 완화할 수 있게 되었다. 또한 현재 명령의 처리를 끝냄과 동시에 다음 명령을 읽어 들일 수 있어 기존의 폰 노이만 구조보다 더 빠른 속도를 낼 수 있다.
하지만 이렇게 처리 속도를 높이려면 더 많은 버스가 필요하므로 설계가 복잡하다. 따라서 현대에는 하나의 구조만 사용하는 것이 아니라 CPU의 외부적으로는 폰 노이만 구조를, 내부적으로는 하버드 구조를 적용함으로써 각 구조의 장점을 최대한 활용하는 구조가 등장하고 있다.
참조한 블로그
https://m.blog.naver.com/with_msip/221981730449
컴퓨터의 구조는 어떻게 생겼을까? 폰 노이만 구조
현대인이라면 누구나 컴퓨터와 스마트폰을 사용합니다. 그중 컴퓨터는 단순 사무 작업 뿐 아니라 학습과 오...
blog.naver.com
'CS' 카테고리의 다른 글
[컴퓨터네트워크] TCP/UDP를 알아보자 (2) | 2023.11.26 |
---|---|
[OS] 인터럽트의 구동방식 이해하기 (0) | 2023.10.29 |