[컴퓨터 구조] Control Unit

henu·2021년 6월 5일
0

Computer Architecture

목록 보기
1/1

Micro-Operations이 무엇인지, 실제 control을 위해서 어떤 기법들이 사용되는지 알아보자

Micro-Operations

위 그림을 살펴보면

Instruction을 Fetch 해서 decoding 하고
Operand의 주소를 계산해서 Operand를 Fetch 하고(Multiple operands 라면 반복)
Data 연산을 수행하고
Operand의 결과를 저장하고 
Interrupt를 체크하고 Interrupt가 발생하면 Instruction 주소를 계산하는 위치로 되돌아가는

위 작업이 한 cycle인 것처럼 보인다.

하지만 Data operation이나 interrupt check 같은 경우에는 해당 작업만 하더라도 무수히 많은 cycle이 돌아간다.

따라서 각각의 동작을 세부적인 연산으로 나는 것을 Micro-Operations라고 한다.

하나의 cycle도 내부적으로 많은 cycle로 구성될 수 있다.

위 그림을 보면 Insturction CycleFetch, Indirect, Execite, Interrupt 같은 각각의 cycle을 가진 작업들로 구성된다.

그리고 FetchIndirect같은 연산을 살펴보면 그 안에도 여러 micro-operation으로 구성되어 있다.


Fetch Cycle

Instruction Fetch 란? - 명령을 메모리로부터 CPU로 가져오는 것

  1. '어디에 있는 명령을 가져오는지'에 대한 정보는 PC에 저장되어 있다.
  2. MAR을 통해서 PC에 있는 명령의 주소 정보가 Address Bus에 보내진다.
  3. Address Bus에 정보가 실리면 Control Unit이 'read 하자'라는 control signal을 Control Bus에 보낸다.
  4. 메모리에 있는 해당되는 데이터(명령(instruction))가 Data Bus를 통해서 MBR에 들어온다.
  5. MBR에서 IR로 명령(instruction)을 가져오고, decoding을 한다.

MAR : Address Bus와 연결되어 있다. 메모리의 어느 위치에 접근할지에 대한 정보가 있다.

MBR : Data Bus와 연결되어 있다. Data Bus를 통해서 무언가를 읽고자 하거나 쓰고자 할 때 사용된다.

Program Counter(PC) : 다음번에 실행할 명령어의 주소를 가지고 있다.

Intruction Register(IR) : 가져온 마지막 명령이 저장되어있다.


위의 Fetch 작업을 Symbolic하게 나타내 보았다.

Fetch Sequence를 그림으로 알아보자

PC에 1100100이라는 주소가 있다.

PC의 주소정보가 MAR로 이동한다.

MAR에서 Address Bus를 통해 메모리 정보를 전달하고 Control signal이 발생한다.

MBR에 있는 주소를 통해 메모리에서 읽은 정보가 Data Bus를 통해서 MBR에 저장된다.

MBR에 있는 Data가 decoding을 위해서 IR로 복사되었다.

이를 통해서 Fetch는 여러개의 micro-operation을 가짐을 알 수 있다.

규칙 : (Memory -> MBR) & (MBR -> IR) 같이 동시에 일어나는 cycle은 금지한다.


Indirect Cycle

  1. IR(address) 에서 MAR로 주소 정보를 이동한다. MAR에
  2. 메모리에서 MBR로 주소정보를 넘겨준다.
  3. MBR은 받은 주소 정보를 IR에 넘겨준다.
  4. IR은 메모리에서 가져온 주소 정보를 통해서 작업을 한다.

Interrupt Cycle

  1. PC(다음에 실행할 명령의 정보가 있음)의 정보를 MBR로 넘겨준다.
  2. Save_Address(저장할 주소)를 MAR로 옮긴다. (PC <- interrupt후에 실행할 명령의 address)
  3. MAR을 통해서 메모리 주소를 지정하고, MBR에 있던 다음에 실행할 명령 정보를 해당 메모리 주소에 저장한다.

Interrupt가 발생하여 현재의 실행 주소를 save_address영역에 저장하는 작업이다.


Execute Cycle (ADD)

ADD R1, X : R1에 있는 정보와 X주소에 있는 정보를 더해서 R1에 저장하라

  1. IR(Address) (X의 주소 정보) 를 MAR로 넘겨준다.
  2. 메모리의 값(X의 주소에 있는 값)이 MBR로 넘어간다.
  3. MBR + R1 = R1 을 수행한다.

Execute Cycle (ISZ)

ISZ  X : X위치에 있는 값을 ++하고 만약 0이면 바로 다음 명령어를 skip

위 과정을 알아보자

  1. IR(address)(X의 주소 정보)를 MAR로 넘겨준다.
  2. 메모리에서 MBR로 X의 값을 가져온다.
  3. MBR = MBR + 1 을 수행한다.
  4. 갱신된 MBR값을 다시 메모리에 쓴다.
  5. 만약 MBR == 0 이면 PC = PC + 1을 수행한다 (바로 다음 명령어를 skip)

Execute Cycle (BSA)

BSA X : BSA 명령의 다음 명령의 주소가 X에 저장된다.

135번 주소에 BSA의 다음 명령의 주소인 21이 저장된다.

그리고 136번 주소에 있는 명령이 수행된다.

명령을 마치면 BUN 135에 의해 135번지에 저장된 주소로 다시 돌아간다.

  1. IR(X의 address)를 MAR로 보낸다.(메모리는 135를 가리킨다)
  2. PC(다음 명령의 주소)를 MBR로 보낸다. (21을 MBR로 보낸다)
  3. MBR(다음 명령의 주소)을 메모리(X의 주소)에 저장한다.  (135에 21 저장)
  4. IR(X의 address)를 PC로 보낸다. (PC <- 135)
  5. PC = PC + I (PC = 136)

Control Unit은 지금까지 보았던 micro-operation들을 잘 수행하기 위해서 Control signal을 만들어 준다.

위 그림에서 만약 Fetch 명령을 수행하려면 어느 부분을 제어해야 할까?

  1. C2를 제어해서 PC에서 MAR로 정보를 이동시킨다.
  2. C0를 제어해서 MAR의 정보를 Address Bus로 보낸다.
  3. C5를 제어해서 메모리로부터 가져온 정보를 MBR로 이동시킨다.
  4. C4를 제어해서 IR에 정보를 저장한다.

profile
우물 안 개구리입니다.

0개의 댓글