5 분 소요

The von Neumann Model

Basic Components

컴퓨터가 한 task를 수행하도록 하기 위해서는 우리는 두 가지가 필요하다.

  • computer program: 컴퓨터가 어떤 일을 수행해야 하는지 알려줌.
  • computer: 그 task를 이행함.

이 때 컴퓨터프로그램은 instruction의 집합으로 이루어져 있다.

instruction: 컴퓨터 프로그램에서 지정된 가장 작은 단위의 work

본 노이만 모델은 컴퓨터가 컴퓨터 프로그램을 처리하는 근본적인 모델을 제시했는데, 5가지로 이루어져 있다.

memory, processing unit, input, output, Control Unit

프로그램이 프로그램의 작업을 수행하기 위해 필요한 데이터는 INPUT이나 프로그램의 Memory로부터 가져오고 프로그램의 실행 결과는 output device로 전달되고 instruction을 어떤 순서로 행할지는 control unit의 역할이다.

Memory

메모리는 데이터를 저장하는 물리적 공간인 location과 공간 안에는 n bit의 데이터가 저장되고 각 location을 식별하는 식별자인 address는 n bit로 표현한다고 저번글에서 배웠었다.

따라서 위 이미지의 내용을 해석해보면 메모리는 2^k X m array of stored bits로 표현할 수 있는데

k 비트만큼의 address로 location을 하고 그 Contents는 m bit만큼의 값이 location 안에 저장될 수 있는 것이다.

  • 기본 연산
    • LOAD: 생각을 해보면 각 location에 저장된 bit를 read
    • STORE: location에 새로운 bit를 주는 것(write)

위 basic한 연산을 그대로 쓰는 것이 아니라 Interface를 통해 Memory와 processing unit이 소통하는데 MAR은 주소를 관리하고 MDR은 DATA를 관리한다.

To LOAD a Location (A):

  1. 값을 읽으려는 데이터를 가진 Location의 주소 A를 MAR에 WRITE하고
  2. 메모리에 read 신호를 보낸다.
  3. MDR이 그 location에 있는 data(bit)를 읽는다.

location에 값을 Store 하려면:

  1. MDR에 값을 Write한다.
  2. MAR에 주소를 Write한다.
  3. 메모리에 write 신호를 보낸다.

Processing Unit

컴퓨터에서 정보를 실제로 처리하는 것은 Processing Unit이다.

  • ALU: Arithmetic Logic Unit의 약어로 말그래도 기본적인 산수나(+, -) 기본 논리 연산(and, or, not)을 수행할 수 있는 Processing unit이다.
  • words: ALU가 연산을 수행할 때 사용하는 data element를 words라고 부르는데, 이 words의 고정된 길이를 word length(Size)라고 부른다. ALU에서는 보통 16-bit의 words를 처리.
  • Register:
    • ALU 가까이에 작은 공간의 저장소를 제공하는데 ALU가 처리한 결과를 일시적으로 저장해두는 곳이다. 이러한 가장 흔한 일시적인 저장소의 형태가 레지스터 모음이다.
    • LC-3는 8개의 레지스터를 가지고 있고 각 레지스터는 16bit다.

Input and Output

컴퓨터 메모리에서 데이터를 받거나 출력하는 Device를 말하는 것이다. LC-3에서 사용할 디바이스를 살펴보면 keyboard와 monitor가 있다. 키보드와 모니터는 앞서봤던 MDR, MAR 처럼 레지스터를 갖고 있다.

  • keyboard: data register, status register
    • 키보드가 데이터를 입력하기 전에 상태를 가지고 있는지 체크하는 KBSR과 데이터를 메모리에 전달하는 KBDR이 있고 아래 모니터도 유추해서 역할을 알 수 있겠다.
  • monitor: data register, status register

그리고 disk와 network의 경우에는 Input과 output 둘 다의 역할을 할 수 있다.

Control Unit

Control Unit은 프로그램의 실행을 지휘하는 역할이다.

Control Unit은 PC와 IR로 구성된다.

  • PC(Program Counter)
    • 다음에 실행할 instruction의 address를 가지고 있고
  • IR(Instruction Register)
    • 현재 실행되는 instruction에 대한 정보를 가지고 있다.

Control Unit의 실행 방식은

  1. PC를 통해 다음에 실행한 Insturction의 address를 통해 Instruction을 읽고
  2. 그 instruction을 해석하거나 신호를 만들어 다른 컴포넌트들에게 무엇을 할지 전달한다.

Instruction Processing

보통 Instruction의 작동 과정은

  1. 메모리로부터 어떤 instruction을 수행해야 하는지 읽고
  2. 그 instruction을 해석하고(decode)
  3. 그 instruction을 실행(Excution)한다.

위 이미지에서는 3번의 가정을 더 분해해서 서술되어 있는데,

  1. address를 평가하고
  2. instruction 실행에 필요한 operand를 가져와서
  3. instruction을 실행하고
  4. 실행 결과를 저장한다.

The Instruction

instruction은 앞에서 살펴봤듯이, 컴퓨터 프로그램이 수행하는 작업에 대한 가장 작은 단위인데, opcode와 oprand를 instruction에 지정한다.

  • opcode: 어떤 연산을 수행할 것인지
  • oprand: 그 연산에 사용될 data나 location

이 instruction은 bit로 encoding 되는데 보통은 16 or 32비트의 길이를 가지고 Control Unit은 이 instruction을 해석하여 다른 요소들이 어떤 연산을 수행해야 하는지에 대한 signal을 만든다.

Instruction Set Architecture(ISA)

  • 컴퓨터의 Instruction에 대한 형태나 패턴에 대한 것을 칭한다.

LC-3 ADD Instruction

LC-3의 ADD Instruction 예시를 봐보자. LC-3는 16bit의 Instruction을 다룬다고 앞서 얘기했었다. 그리고 LC-3는 8개의 Register(일시적 저장소)를 가지고 있고 이 예시는 ADD 연산에 대한 예시다. bit의[15:12]는 ADD 연산에 대한 정보를 담은 bit이고 add 연산은 더할 두 숫자와 결과가 나오는데, 더할 oprand인 src1과 src2가 bit[8:6]과 bit[2:0]에서 읽어와 bit11:9에 저장한다.

즉, Src1이 2이고 Src2가 6이므로 위 Instruction을 해석해보면 Register2와 6에 들어있는 데이터를 더해서 R6에 저장한다 이다.

LC-3 LDR Instruction

memory로부터 data를 읽는 연산인데, offset에 base 값을 더해서 나온 결과로 memory 주소 값을 만들고 이를 그 주소에 해당하는 location의 값을 Destination register에 Load한다.

LD의 의미는 특정 메모리 Location에가서 location에 있는 값을 read하고 레지스터 중 하나에 그 값을 저장해! 와 같다.

그럼 이 연산을 수행하기 위해선 location을 참조할 메모리 주소가 필요하고 그 location에 있는 값을 저장한 레지스터가 필요하다.

The Instruction Cycle (Not the Clock Cycle!)

이제 Instruction이 실행되는 순서를 알아보자.

먼저 Fetch단계로 PC에 저장되어있는 주소를 메모리에서 참조해 해당 값 을 IR(Instruction Register)에 저장한다.

  • PC에 있는 메모리 주소를 MAR에 저장하고
  • 메모리에 read 신호를 보내면 해당 주소에 있는 bit를 읽어와
  • MDR에 저장한다.
  • 그러고 PC는 다음 Instruction에 대한 메모리 주소이므로 이번 주소를 참조했기 때문에 +1을 해주면 Fetch 단계가 끝난다.

그렇게 IR에 있는 현재 Instruction에 대한 bit를 해석하는데, 어떤 Instruction인지 알기 위해

  1. MSB쪽 4bit를 해석해 opcode를 해석한다.
  2. 그리고 해당 opcode를 수행하기 위해 필요한 oprand를 식별하기 위해 나머지 bit를 해석한다.

아까 Fetch 단계에서 수행한 메모리를 참조하는 행위 말고 Decode단계에서 opcode이외의 비트에서 해석한 oprand 중에 메모리를 참조해야 할 것이 있다면 메모리에 접근하기 위해 주소를 계산한다.

그리고 위에서 주소를 계산했으니 opcode를 수행하기 위한 operand에 대한 값을 받아온다.

이제 opcode와 operand가 있으니 Instruction을 실행해 결과를 얻고

결과를 레지스터나 메모리에 저장한다.

Changing the Sequence of Execution

위에서 Instruction을 수행하는 순서는 명시적으로 무엇인가 있지 않은 이상 Fetch 단계가 끝나면 Program Counter에 1을 추가해줬다.

하지만 Instruction을 바로 다음 단계의 것을 따르고 싶지 않을 때도 있을 것이다.

이를 해결하기 위해서는 pc가 다음 instruction에 대한 주소를 가지고 있으므로 이를 조작해야 하는데 이 pc의 값을 바꾸는 특별한 Instruction을 control instruction이라고 한다.

이를 나누는 기준은 conditional 한가? 인데,

  • jump는 unconditional으로 항상 pc의 값을 바꾸고
  • branch는 conditional로 어떤 조건이 충족됐을 때만 pc의 값을 바꾼다.

Jump instruction의 예시로 base(레지스터)에 들어있는 instruction 주소를 PC에 LOAD함으로써 묻지말고 그 Instruction에 대한 값을 메모리에서 받아오도록 한다.

Instruction Summary

결국 Instruction도 data처럼 bit로 해석된 것을 알 수 있었다. 그럼 data랑 instruction은 둘 다 bit인데 어떻게 구분하냐? 로 질문이 이어질 수 있는데, 이 경우에는 PC(Program Counter)가 저장하고 있는 메모리 주소는 Instruction에 대한 content를 담고 있을 것이고 이 Instruction을 해석했는데 opcode를 수행하기 위한 source operand의 경우에는 data로 해석할 수 있다.

그리고 Instruction의 기본적인 종류에는 다음과 같이 크게 2가지로 나눌 수 있고

  • 계산하는 것(add, and…)
  • 데이터를 이동하는 경우
    • memory -> register (LDR)
    • register -> memory (Store Register)

Instruction의 실행 단계는 크게는 3, 세분화하면 6단계로 나눌 수 있다. Fetch - Decode - EA - Fetch Operand - Execute - Store

Stopping the Clock

Control Unit은 clock이 실행되는 동안 instruction 처리를 계속하게 되는데 이를 멈추기 위해서는 이미지에서 볼 수 있듯이, and 연산 결과를 0으로 만들어주면 된다. 그럼 control unit이 CLOCK의 신호를 그만 읽게 될 때 Processing이 멈추게 된다.

꼭 기억해야 할 것!

이번 차시에서는 본 노이만 모델에 대해서 배웠는데 컴퓨터가 연산을 어떻게 수행하는지 큰 그림을 볼 수 있었다.

구성 요소로는 Processing unit(ALU, Temp Storage), Memory(MAR, MDR), INPUT, OUTPUT, Control Unit(PC, IR)이 있었다.

그리고 ISA라고 하여 HW와 SW 사이의 인터페이스 역할이 있었는데 Instruction의 format과 semantic의 모음으로 가교 역할을 하나 보다..!

Instruction에는 계산, 데이터 이동(Load, Store), control(jump, branch)가 있었다.

마지막으로 Instruction의 Process는 Fetch, Decode, Evaluate Address, Fetch Operand, Excute, Store가 있었다!

댓글남기기