공부/컴퓨터 구조

[Chap5] 제어 장치

esyeonge 2021. 5. 1. 20:28

01 제어 장치의 기능

제어 장치

; 컴퓨터의 모든 동작을 제어하는 CPU의 핵심 부분

주기억 장치, ALU, I/O 장치에 프로세서가 전송한 명령어를 수행하도록 하는 역할을 함

  • 주기억 장치에서 명령어를 읽어 CPU의 IR로 가져오고
  • 제어 장치는 IR의 opcode를 기반으로 명령어 실행을 지시하는 세부적인 제어 신호 발생

제어 장치의 기본 기능

1) CPU에 접속된 장치들에 대한 데이터 이동 순서를 조정

2) 명령어를 해독

3) CPU 내 데이터 흐름을 제어

4) 외부 명령을 받아 일련의 제어 신호를 생성

5) CPU에 포함된 많은 실행 장치(예를 들어 ALU, 데이터 버퍼, 레지스터)를 제어

6) 명령어 인출, 명령어 해독, 명령어 실행 등을 순서에 맞추어 처리

제어 장치의 내부 구성

; 기억장치 버퍼 레지스터, 기억장치 주소 레지스터, 명령 레지스터, 명령 해독기, 프로그램 카운터로 구성

  • 프로그램 카운터를 통해서 다음 명령어를 결정
  • 주기억장치에서 명령을 인출하여 기억장치 버퍼 레지스터와 명령 레지스터에 임시저장
  • 명령 해독기에서 명령어 해독
  • 해독된 내용들은 연산장치로 전달

02 제어 장치의 종류

[0] 제어 장치의 입출력 신호

클록 신호

; 제어 장치의 동작 타이밍 기준이 되는 신호로서, 하나의 클록 펄스마다 하나의 마이크로 연산 혹은 마이크로 연산의 집합 수행

명령어 레지스터

; 명령어의 연산 코드 필드를 제어 장치에 입력하여 수행해야 할 연산을 결정

플래그

; 중앙처리장치의 상태를 나타내거나 이전 산술 및 논리 연산장치의 연산 결과를 검사

제어신호

1) 제어 버스에서 입력되는 제어 신호 : 인터럽트 처리의 요구 신호 및 확인 신호 등 외부에서 들어오는 제어 신호

2) 중앙처리장치로 전달되는 제어 신호 : 레지스터 간 데이터를 전송할 때 발생되며, 특정 산술 및 논리 연산의 기능을 활성화할 때 출력

3) 제어 버스를 통해 외부로 출력되는 제어 신호 : 중앙처리장치 밖의 기억장치나 입출력장치 모듈로 보내는 제어 신호

[1] 하드와이어 제어 장치

하드와이어 제어 장치

; 논리 회로로 만들어진 하드웨어로 명령어 실행 제어에 필요한 제어 신호를 발생시킴

명령어의 opcode에는 제어 신호를 생성하는 기본 데이터가 포함되어 있음

명령 디코더는 명령어 opcode에 정의된 여러 필드를 해독하는 많은 해독기 세트로 구성된다.

  • 제어 하드웨어는 상태 기계처럼 클록 사이클이 진행됨에 따라 한 상태에서 다음 상태로 변함

cf) 교수님 PPT : 제어 신호 생성을 위해서 순차와 조합논리의 설계를 통해서 구성, 이 회로의 입력 신호는 출력 신호로 변환

하드와이어의 구조

1) 제어장치를 중심으로 명령어 레지스터에서 입력이 될 수 있는 해독기가 존재

2) 클록을 입력으로 받아서 수행되는 시간 발생기가 존재

  • 제어장치의 입력 신호 중 플래그와 제어 버스 신호들은 각 비트들마다 규정된 의미를 가짐

3) 명령어 레지스터는 연산 코드를 해독하여 각 명령들이 여러 가지 연산을 수행할 수 있도록 함

4) 해독기는 각 연산 코드를 고유의 논리 입력을 가지도록 변환해주는 역할을 함

5) 클록은 마이크로 연산의 주기를 측정하는데 사용되며, 클록 펄스의 주기는 신호가 데이터 경로와 중앙처리장치 회로를 통과하는 데 걸리는 시간만큼 길어야 함

하드와이어의 실행

1) 명령어 실행을 위한 제어 신호는 명령어 실행 사이클 전 구간에서 끊임없이 생성됨

2) 사이클 구조에 따라 적절한 내부 상태 순서가 제어 장치에 구성됨

3) 제어 신호 생성 회로에서 생성된 신호들은 다음 제어 신호 발생 회로에 입력되어 타이밍 신호와 결합하여 클록을 기반으로 동작함

4) 명령이 제어 장치에 도착하면 새 명령어 인출 초기 상태가 됨

5) 명령어 해독은 제어 장치가 새 명령 실행과 관련된 첫 번째 상태로 들어갈 수 있도록 함.

6) 제어 신호 발생 회로에 대해 각각의 새 입력이 생김

7) 사이클의 마지막은 프로그램의 다음 명령을 가져오기 시작하는 제어 상태이며, 프로그램 카운터의 내용을 MAR로 보내고 그 다음 컴퓨터의 IR에 대한 명령어를 읽음

[2] 마이크로 프로그램 제어 장치

; 명령어 실행을 위해 각 명령 실행 순서에 해당하는 일련의 해독된 제어 신호를 비트 패턴으로 만들어 제어 메모리에 저장

주기억장치에서 다음에 실행할 명령어를 명령 레지스터로 가져옴

각 명령의 opcode가 제어 신호를 생성하기 위해 해독되지 않고, 제어 메모리에서 해당 마이크로 프로그램의 시작 주소를 지시 == 명령 레지스터의 opcode가 제어 메모리의 제어 주소 레지스터(CMAR)로 전송

cf) 교수님 ppt : 마이크로 명령어를 제어 기억장치에 저장하고 이것을 실행시켜서 제어 신호를 발생하는 방법

마이크로 순서기

; 마이크로 프로그램을 이용하여 구현된 대표적인 제어장치

 

마이크로 순서기의 구조

  • 명령어 레지스터의 연산코드, 플래그, 마이크로 코드 기억장치의 출력이 다음 명령의 주소를 결정
  • 얻어진 마이크로 코드 기억장치의 주소는 레지스터에 임시로 저장되었다가 다시 이 주소에 근거하여, 마이크로 코드가 실행됨
  • 이 실행 결과의 출력이 제어 신호가 됨

[3] 하드와이어 제어 장치 vs 마이크로 프로그램 제어 장치

하드와이어드 제어 방식은 마이크로 연산의 실행 순서제어와 수행을 위한 회로 그리고 연산 코드의 해석 및 ALU 플래그들의 검사 등을 위한 논리 회로를 포함

  • 하드웨어의 설계와 검사는 복잡한 과정, 회로의 융통성이 낮음
  • 새로운 명령을 추가하기 위하여 설계를 변경하는 것이 어려움
  • 오늘날 제어장치의 구현은 하드와이어드 구현보다는 마이크로 프로그램을 이용

[정리] 01-02 정리

점선으로 네모친 부분이 제어 장치

제어장치의 역할 : 명령어를 받으면 해석해서 우리가 수행할 수 있게끔 제어 신호를 보내주는 것

즉, 주기억장치에 있는 명령을 해독하고 해독한 명령이 수행될 수 있게 해당 장치에 제어 신호들을 전달해주는 역할을 함

  • 프로그램 카운터 : 다음에 실행할 주소가 뭔지 저장하는 곳
  • 명령 레지스터 : 현재 실행 중인 명령어가 저장된 레지스터 == 가장 최근에 인출한 명령어
  • 기억장치 버퍼 레지스터 : 기억장치에 저장될 데이터들, 혹은 읽어질 데이터가 저장
  • 기억장치 주소 레지스터 : 프로그램 카운터에 저장된 명령어 주소가 실제로 사용되기 전에 살짝 들어갔다 나오는 곳
  • 누산기 : 연산 결과를 잠깐 저장하는 레지스터

03 명령어 사이클

명령어 사이클(=데이터 경로)

; 명령어 인출, 명령어 해독, 명령어 실행 사이클 순서로 진행됨

PC → MAR → 주소 버스 → 주기억장치 → 데이터 버스 → MBR → IR → 디코더... 이런 순서로 나간다.

마이크로 연산

; 부사이클(인출, 해독, 실행)이 실제로 실행될 때 나눌 수 있는 가장 작은 단위

프로세서의 가장 작은 동작

하나의 기계어 명령

; 일련의 마이크로 명령으로 구성된 명령어 사이클을 이루어 실행

각 명령어 사이클은 여러 개의 작은 단위로 구성

; 명령어 인출, 명령어 해독, 명령어 실행, 인터럽트로 구별

마이크로 연산의 형식

; 마이크로 연산을 표현하기 위해서 동작 기호를 사용

cf) 인터럽트 사이클

; 매 명령어 사이클이 끝나고 인터럽트 유무를 점검하여, 인터럽트가 있으면 인터럽트 처리 루틴 실행

인터럽트에 의한 제어 이동

  • 인터럽트가 발생하면 CPU는 어떤 장치가 요구했는지 확인하고, PC에 저장되어 있는 다음에 실행할 명령어의 주소를 스택에 저장
  • 해당 인터럽트 서비스 루틴을 호출하기 위해 그 루틴의 시작 주소를 PC에 적재. 이때 시작 주소는 인터럽트를 요구한 장치에서 전송되거나 미리 정해진 값으로 결정됨
  • 인터럽트 서비스를 순차적으로 실행함
  • 중단되었던 기존 프로그램의 실행을 계속하도록 주 프로그램으로 복귀

[1] 명령어 인출 사이클

명령어 인출 사이클

; 모든 명령어를 실행하는 과정의 첫 번째 단계로 다음에 실행할 명령어를 주기억 장치에서 읽어오는 과정

  • t1 : PC → MAR → 주소버스
  • t2 : M[MAR] → 데이터 버스 → MBR
  • t3 : MBR → 명령 레지스터(IR)

레지스터 변화 과정

t1 : MAR ← (PC)

t2 : MBR ← M[MAR], PC ← (PC) + I

t3 : IR ← (MBR)

I는 명령어의 크기. 명령어의 기본 크기가 2바이트라면 I는 2가 됨

t2는 간접주소방식이라고 생각하면 된다.

PC+I는 t3에서 해도 무방하다.

[2] 명령어 해독 사이클

명령어 해독 사이클

; 명령 레지스터의 내용 중에서 오퍼랜드는 제외한 opcode만 해독기로 전달하고, 해독기는 제어 기억 장치에서 명령 연산에 해당되는 마이크로 루틴을 찾아 해독

t1 : Decoder ← (IR:opcode) #여기서 opcode는 1이라고 가정

t2 : Instruction Decoding # CU가 명령어를 해독하여 제어 신호를 발생시킴

opcode 1은 LOAD이기 때문에 오퍼랜드가 지정한 주기억 장치로 가서 데이터를 읽어 레지스터 R1(AC)에 읽어오도록 함(실행 사이클에서 진행됨)

[3] 명령어 실행 사이클

명령어 실행 사이클

; 해독된 명령어를 실행하는 사이클

ex) opcode가 1(LOAD)인 경우

1) 명령 레지스터의 내용 중에서 오퍼랜드 영역을 MAR로 전달

2) 메모리의 해당 주소를 찾아 데이터를 읽어서 MBR로 전달

3) 레지스터 R1에 저장

 

 

명령어 인출 사이클 레지스터 변화 과정

 

LOAD의 실행 과정

ADD의 실행 과정

STORE의 실행 과정

ISZ

; X 값을 1 증가시키고, 그 결과가 0이면 바로 다음 명령을 건너뛰는 것

t1 : MAR ← (IR:X)

t2 : MBR ← M[MAR] +1

t3 : M[MAR] ← (MBR), If ((MBR) = 0) then (PC ← PC + I)

BSA

; 스택 포인터가 가리키는 스택의 맨 위에 현재 PC의 내용을 저장하고, 서브루틴의 시작 주소인 X로 프로그램 실행 제어를 넘겨줌

t1 : MAR ← (SP) , MBR ← (PC)

t2 : M[MAR] ← (MBR), SP ← SP-I

t3 : PC ← (IR:X)

RET

; 서브루틴의 실행이 모두 끝나고 서브루틴에서 복귀하는 명령

t1 : SP ← SP + I

t2 : MAR ← (SP)

t3 : MBR ← M[MAR]

t4 : PC ← MBR

 

[4] 인터럽트 사이클

인터럽트 사이클

; 실행 주기가 완료되면 인터럽트가 발생했는지 여부를 확인하여 인터럽트가 발생했다면 인터럽트 사이클 실행

<교과서>

t1 : MAR ← (SP), MBR ← (PC)

t2 : M[MAR] ← (MBR), SP ← SP - I

t3 : PC ← Interrupt_Service_Routine_Address

<PPT>

t0 : MBR ← PC # 복귀주소를 저장하기 위해서 프로그램 카운터 내용을 MBR로 이동시킴

t1 : MAR ← (SP), PC ← Routine-address # SP를 MAR로 이동시키고, 인터럽트 처리 루틴 시작 주소를 PC에 적재. SP는 MBR에 저장되어 있는 내용을 스택에 저장하기 위해서 저장할 위치를 지정하는데 사용

t2 : M[MAR] ← (MBR) # MBR의 내용을 MAR에 근거하여 해당 스택 포인터의 스택에 저장

[5] 명령어 사이클

; 명령어 사이클은 항상 인출-해독-실행 순서로 실행되고, 인터럽트 사이클은 명령어 실행이 끝난 후 인터럽트가 있으면 실행 아니면 다음 명령어 인출 사이클로 진행한다.

04 프로세스 제어

마이크로 연산 : 프로세서의 동작이나 기능을 단위 연산으로 나눔

제어 장치의 특성

(1) 프로세서의 기본 장치(ALU, 레지스터, 내부 데이터 경로, 외부 데이터 경로, 제어 장치)를 정의

  • ALU : 컴퓨터의 가장 기본 기능인 연산 장치
  • 레지스터 : 프로세서 내부에 데이터를 저장하는 데 사용
  • 내부 데이터 경로 : 레지스터 간 및 레지스터와 ALU 간 데이터 이동 통로
  • 외부 데이터 경로 : 시스템 버스를 통해 메모리 및 I/O 모듈에 연결
  • 제어 장치 : 프로세서 내부의 연산을 제어

(2) 프로세서가 수행하는 마이크로 연산을 나열

  • 마이크로 연산은 다음 범주 중 하나
    • 한 레지스터에서 다른 레지스터로 데이터 전송
    • 레지스터에서 외부 인터페이스(ex. 시스템 버스)로 데이터 전송
    • 외부 인터페이스에서 레지스터로 데이터 전송
    • 입력 및 출력 레지스터를 사용하여 산술 또는 논리 연산 수행

(3) 마이크로 연산을 할 수 있도록 제어 장치가 수행해야 할 기능 결정

  • 제어 장치는 순서와 실행 두 가지의 기본 작업 수행
    • 순서 : 프로그램에서 정해진 순서와 그에 해당하는 마이크로 연산을 적절한 순서로 진행
    • 실행 : 제어 장치는 각 마이크로 연산 수행

제어 장치가 기능을 수행하기 위해서는 시스템 상태와 시스템 동작을 제어할 수 있는 출력을 결정할 수 있는 입력이 있어야 함 → 이것은 제어 장치 외부의 사양

제어 장치 내부에는 순서 제어 기능과 실행 기능을 수행할 수 있는 논리회로가 있어야 함

 

입력 : 클록, 명령 레지스터, 플래그, 외부 제어 버스로부터의 제어 신호

출력 : 프로세서 내부로 전달되는 신호인 레지스터 간 데이터 이동, ALU의 연산 명령, 메모리, 입출력 장치 등 외부로 장치로 전달되는 신호

데이터 경로와 제어 신호

제어 장치는 다음 제어 신호를 동시에 전송하여 명령 흐름 제어

1) 제어 신호는 MAR 내용을 주소 버스에 전달

2) 제어 버스에 메모리 읽기 제어 신호 전송

3) 데이터 버스 내용을 MBR에 저장할 수 있도록 제어 신호 전송

4) PC 내용에 I를 더해 다시 저장하는 제어 신호

 

데이터 경로

  • 제어 장치는 내부 데이터 흐름 제어 (ex. 명령어 인출을 할 때 MBR 내용이 IR로 전송)
  • 제어할 각 경로에는 스위치 존재(삼각형)
  • 제어 장치에서 나오는 제어 신호는 일시적으로 게이트를 열어 통과

ALU

  • 제어 장치는 일련의 제어 신호로 ALU 제어
  • 이러한 신호는 ALU 내 다양한 논리 회로와 게이트 활성화

시스템 버스

  • 제어 자치는 제어 신호를 시스템 버스의 제어선으로 전송

마이크로 연산에 필요한 제어 신호

05 파이프라이닝

[0] 명령어 단계 병렬 처리

; 프로세서의 제어 장치는 기본적으로 '인출 → 해독 → 실행' 순서로 명령 수행

전통적인 프로세서에서는 다음과 같이 순차적으로 실행

현대 대부분의 프로세서에서는 파이프 라이닝(pipelining) 기술로 명령 실행

파이프 라이닝

; 명령 하나를 여러 단계로 나누어 각각을 독립적인 장치에서 동시에 실행하는 기술

5단계 파이프라인

단계가 S1~S5로, 5단계 파이프 라인

1) 1단계 : 메모리에서 명령어를 인출

2) 2단계: 명령어를 해독하고 명령어 형태를 결정하며 필요한 피연산자 결정

3) 3단계: 레지스터 또는 메모리에서 피연산자 결정

4) 4단계: 명령어 연산 수행

5) 5단계: 결과를 레지스터에 저장

5개의 장치가 서로 독립적으로 작동하고, 각각의 명령이 순서대로 각 장치를 이동하며 실행된다면 실행 시간은 훨씬 단축됨

ex) 각 단계가 2ns 소요

  • 전통적인 시스템 : 명령 하나가 완전히 실행되는 데는 10ns 소요
  • 파이프라인 시스템 : 매 클록 사이클(2ns)마다 명령 5개가 동시에 실행되므로 시간은 1/5로 단축
  • 파이프 라인이 없는 컴퓨터는 100MIPS, 파이프 라인 5개 있으면 500MIPS

파이프 라이닝을 사용하면 지연 시간과 프로세서 대역폭 간 균형 유지

  • 한 사이클에 소요되는 시간 : T ns
  • 파이프 라인 : n단계
  • 전체 실행 시간 nT ns

[1] 데이터 해저드

데이터 의존성

; 파이프 라인에서 앞서가는 명령의 ALU 연산 결과를 레지스터에 기록하기 전에 다른 명령에 이 데이터가 필요한 상황

If) 앞의 명령 결과가 다음 명령 입력으로 사용될 때 파이프 라인 시스템에서 문제가 발생하면

→ 레지스터에 저장되기 전에 ALU 결과를 다음 명령에 직접 전달하는 데이터 포워딩

→ 버블을 명령 사이에 끼워 넣어 프로그램 실행을 1단계 또는 2단계 지연

 

WAW와 WAR 해저드

; 레지스터 재명명함 : 관련없는 레지스터로 바꾸어 사용함으로써 쉽게 해결 가능

참 의존은 RAW뿐

예) 첫 번째 연산 ADD의 결과(r3)가 두 번째 연산 SUB의 입력으로 사용

저장은 5단계 오퍼랜드 인출은 3단계

[2] 제어 해저드

; 파이프 라인 CPU 구조의 분기 명령이 실행될 때 발생

  • 이미 파이프 라인에 적재되어 실행되고 있는 이어지는 다른 명령들이 더 이상 필요가 없어지므로 발생
  • 3번 명령에서 15번 명령으로 분기가 일어난다면 이미 파이프 라인 단계에 들어와 실행되고 있는 4, 5, 6, 7번 명령은 더 이상 필요가 없으므로 전체 프로그램의 속도 저하 요인이 됨

해결 방법

1) 지연 슬롯(delay slot)을 넣고 분기 목적지 주소를 계산하는 과정을 파이프 라인 속에 넣는 것

  • 지연 슬롯이란 NOP나 분기 명령과 무관한 명령을 끼워 넣는 것 → 컴파일러나 프로그래머가 프로그램 순서를 바꾸는 것

2) 분기 예측 알고리즘

[3] 구조적 해저드

; 서로 다른 단계에서 동시에 실행되는 명령이 컴퓨터 내의 장치 하나를 동시에 사용하려고 할 때 발생

ex1) 명령어 인출과 오퍼랜드 인출이 동시에 발생하는 경우

  • 명령 2개가 동시에 메모리에 가서 명령과 데이터를 가져와야 하는데, 인출 과정이 모두 같은 장치들(bus, memory)을 사용하므로 충돌 발생

ex2) CPU 내의 장치인 ALU를 명령 2개가 동시에 사용해야 하는 경우

 

 

Notion2Tistory

 

boltlessengineer.github.io

 

[출처]

1. 최신 컴퓨터 구조 - 디지털 논리부터 성능 분석까지,

'공부 > 컴퓨터 구조' 카테고리의 다른 글

[Chap6] 기억 장치(2)  (0) 2021.05.15
[Chap6] 기억 장치  (0) 2021.05.09
[Chap4] 중앙 처리 장치  (0) 2021.05.01
[Chap3] 디지털 논리 회로  (0) 2021.05.01
[Chap2] 데이터의 표현(2)  (0) 2021.05.01