[컴개실] Ch.3-4.2 - The von Neumann Model
이제 프로그램을 비트로 저장해 튜링 머신과 같은 일을 할 수 있는 컴퓨터의 기본적인 구조, 폰 노이만 구조(Von Neumann Model)에 관해 알아보자. 우선 기본적인 논리 회로들을 정리해 보겠다.
논리 회로를 이루는 논리 게이트(Logic Gate)는 위 그림과 같은 종류들이 있다. 이들을 조합함으로써 비트의 논리 연산을 물리적으로 구현할 수 있다. 논리 게이트를 트랜지스터 레벨에서 구현하는 것에 대해선 교재에 더 자세히 나와 있으나 이 부분은 넘어가겠다.
위 사진은 비트의 덧셈을 수행하는 가산기(Adder)의 회로도이다. 1비트 가산기 여러 개를 조합하여 여러 자리 비트의 덧셈도 수행할 수 있다.
위 사진은 멀티플렉서(Multiplexer)의 회로도이다. Mux라고도 한다. 이 회로는 S0, S1의 2가지 신호에 따라 입력 I0, I1, I2, I3 중 하나를 '선택'해 출력하는 역할을 한다. S에 해당하는 비트가 N개 있으면 가지 신호 중 하나를 출력할 수 있는 멀티플렉서가 된다.
위 사진은 래치(Latch)라고 하는 회로이다. 한번 신호를 주면 계속 그 상태를 저장하는, 기억 장치의 구현에 필수적인 회로이다. Latch는 입력 신호가 들어오는 즉시 상태가 바뀌지만, 주기적인 클럭(Clock) 신호가 들어오는 순간에 입력 신호에 따라 상태를 바꾸는 회로도 있다. 이를 플립플롭(Flip-Flop)이라고 한다. 아래 사진은 Master-Slave Flip Flop의 회로도이다.
Flip-Flop을 여러 개 쌓아 프로세서에서 데이터를 저장하는 레지스터를 만든다.
The Von Neumann Model
이제 본격적으로 폰 노이만 모델에 대해 알아보자. 저장된 프로그램에 따라 계산을 수행할 수 있는 컴퓨터의 구조로, 아래와 같은 도식으로 요약할 수 있다.
여기서 Memory Unit은 휘발성(volatile) 메모리로서 입력/출력 데이터를 저장하고, Processing Unit의 Arithmetic/Logic Unit(ALU)에서 계산이 이루어진다. Control Unit은 프로그램에 따라 컴퓨터의 동작을 제어하는 역할을 한다.
Memory Unit에는 MAR과 MDR이 있다. MAR(Memory Address Register)는 데이터의 주소를 저장하는 레지스터, MDR(Memory Data Register)는 데이터의 값을 저장하는 레지스터이다. 메모리와 Processing Unit의 상호작용은 다음과 같이 이루어진다.
메모리로부터 주소 A에 있는 데이터 읽기: memory write signal을 0으로 설정한다. -> MAR에 주소 A를 입력한다. -> MDR에 데이터 D가 출력되면 D를 가져간다.
메모리의 주소 A에 데이터 D 쓰기: memory write signal을 1로 설정한다. -> MAR에 주소 A를 입력한다. -> MDR에 데이터 D를 입력한다.
Processing Unit에는 ALU와 빠른 저장 장치인 Register file이 있다. ALU는 입력 값과 어떤 연산을 할지(add, shift, xor 등)에 대한 값을 받아 연산 결과를 내놓는다. (연산을 '선택'하는 데는 멀티플렉서가 이용된다.) 또한 ALU가 한 번에 다루는 데이터의 크기를 word length라고 하는데, 현대의 일반적인 컴퓨터는 word length가 64비트이다.
Control Unit에는 PC와 IR이 있다. PC(Program Counter)는 현재 작동 중인 프로그램(메모리에 저장되어 있다)이 다음에 실행할 명령어의 주소를 저장하는 레지스터이다. IR(Instruction Register)는 해당 주소에 해당하는 명령어 데이터를 복사해 가지고 있는 레지스터이다.
다음 포스팅에서는 ALU가 실행하는 명령어(Instruction)에 대해 자세히 알아보겠다.
References
- Yale N. Patt, Sanjay J. Patel. 『Introduction to Computing Systems: From Bits&Gates to C/C++ and Beyond』. 3rd ed. McGraw Hill(2019). p58-127
- [Image Source] https://en.wikipedia.org/wiki/Adder_(electronics)
- [Image Source] https://en.wikipedia.org/wiki/Multiplexer
- [Image Source] https://en.wikipedia.org/wiki/Flip-flop_(electronics)
- https://en.wikipedia.org/wiki/Von_Neumann_architecture