본문 바로가기

CS Knowledge/Computer Structure

Computer Structure - Controller

 

임석구, 홍경호의 '최신 컴퓨터 구조' 를 참고 하였습니다.

 

 

1. 제어 장치의 기능

2. 제어 장치의 종류

3. 명령어 사이클

4. 파이프 라이닝

 

 

1. 제어장치의 기능

 

제어장치

정의 : 컴퓨터의 모든 동작을 제어하는 CPU의 핵심장치

기능

1. ALU, I/O 장치를 제어해 프로세스가 명령한 수행

2. 주기억 장치의 명령어를 읽어 CPU의 명령 레지스터 IR로 가져오고, 이의 opcode를 해독하여 제어 신호를 발생

(명령어 인출, 해독, 실행 제어)

 

 

 

2. 제어장치의 종류

- 하드와이어 제어장치

- 마이크로 프로그램 제어장치

   - 수평적 마이크로 프로그램

   - 수직적 마이크로 프로그램

 

 

 

3. 명령어 사이클

명령어 사이클 : 명령어 인출 -> 명령어 해독 -> 명령어 실행 

인터럽트 사이클 : 매 명령어 사이클이 끝나고 인터럽트 유무를 점검, 있으면 인터럽트 루틴 실행

 

마이크로 연산 : 프로세서의 가장 작은 동작

명령어 사이클

 

 

3-1. 명령어 인출 사이클

 

- 다음에 실행할 명령어를 주기억장치로 부터 읽어오는 과정

- PC로부터 주소를 읽고 주기억장치의 해당 주소로 가서 데이터를 읽어 명령 레지스터(IR)로 가져오는 과정

 

 

마이크로 연산 설명

t1 : MAR <- (PC) 

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

-> MAR은 주소버스를 통해 주기억장치에서 명령어를 읽고 데이터버스를 통해 해당 주소의 값을 전달

-> I는 명령어의 크기로 바이트 단위이며 t2 또는 t3시점에 PC 증가

t3 : IR <- (MBR)

 

 

 

 

3-2. 명령어 해독 사이클 

 

1. 명령 레지스터(IR)의 내용 중 opcode만 해독기로 전달

2. 해독기는 제어 기억장치에서 명령 연산에 해당되는 마이크로 루틴을 찾아 해독

 

마이크로 연산 설명

t1 : Decoder <- (IR : opcode)

t2 : Instruction Decoding

-> 디코더는 명령어를 CU에 전달하고 CU는 명령어를 해독하여 제어신호를 발생시킨다.

 

 

 

 

 

3-3. 명령어 실행 사이클

 

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

 

 

예시 1 : 데이터를 읽어서 레지스터 R1에 저장하는 명령어 사이클

(주기억 장치에 있는 데이터를 읽어서 R1에 저장하는 과정)

MAR <- (IR : operand)

MBR <- M[MAR]

R1(누산기) <- MBR

 

- (b)에서 IR은 MAR로 operand인 860전달

- (c)에서 주기억장치의 주소 860에 해당하는 데이터 5를 MBR로 전달

- (d)에서 5를 R1으로 전달

 

 

 

예시2 : ADD

 

예시3 : LOAD(1), ADD(5), STORE(2)

 

 

LOAD(1)

인출 : PC는 MAR로 400을 전달하고 MAR은 주기억장치의 주소 400에 해당하는 값 1860을 가져와 MBR을 거쳐 IR로 전달, 이 후, PC는 명령어 크기만큼 증가

실행 : 1860에서 860에 해당하는 값을 MAR, MBR을 거쳐 주기억 장치에서 인출해 R1에 저장

 

ADD(5)

인출 : PC에서 가져온 주소 값 401에서 값을 가져와 IR로 전달 이 후, PC는 명령어 크기만큼 증가

실행 : 5861에서 861에 해당하는 값을 가져와 R1에 가져오는데 기존 값에 더해서 저장

 

STORE(2)

인출 : PC에서 가져온 주소 값 402에서 2861을 가져와 IR에 전달 이 후, PC는 명령어 크기만큼 증가

실행 : 주소 861에 R1의 값 9를 저장.

 

 

 

예시 4 : ISZ(Increment and Skip if Zero)

ISZ X : X의 값을 증가시키고 그 결과가 0이면 바로 다음 명령을 건너뜀

t1 : MAR <- (IR : X)

t2 : MBR <- M[MAR] + 1

t3 : M[MAR] <- (MBR), IF((MBR) = 0) then (PC <- PC + I) 

 

 

 

예시 5 : BSA(Brach-and-Save-Address)

t1 : SP의 값을 MAR로 보내고 PC의 값은 MBR로 보내놓는다.

t2 : MBR의 값을 MAR에 지정된 주소에 저장. 즉, 결과적으로 PC의 값이 SP값에 해당하는 주소에 저장, SP는 명령어 크기만큼 감소

t3 : PC에는 IR의 값(550) 배치

 

 

 

예시 6 : RET(Return)

t1 : SP를 명령어 크기만큼 증가

t2 : MAR에 SP값 할당

t3 : MAR에 할당된 주소에 해당하는 값을 MBR에 전달

t4 : MBR에 할당된 값을 PC값 전달

 

 

 

예시 7 : 중첩 서브루틴, 다중 서브루틴

 

(1) : 340이 실행되면서 다음 실행되어야할 341을 스택에 넣는다. 또한 SP가 다음 스택주소인 998로 설정

(2) : 722가 실행되면서 다음 실행되어야할 723을 스택에 넣는다. 또한 SP가 다음 스택주소인 997로 설정

(3) : 결과를 반환하면서 스택에서 723을 뺀다. 또한 다시 SP가 998로 설정된다.

-> 위의 과정을 규칙삼아 반복

 

3-4. 인터럽트 사이클

- 실행 주기가 완료되면 인터럽트가 발생했는지 체크

- 발생시 인터럽트 사이클 실행

 

인터럽트 사이클

 

 

 

4. 파이프 라이닝

제어장치의 기본 수행 순서 (순차적 진행)

 

파이프 라이닝 기술로 실행

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

 

5단계 파이프 라이닝

- 각각의 단계를 S1~S5로 표현한 5단계 파이프 라이닝 기술

- 실행시간 훨씬 단축

 

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

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

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

4단계 : 명령어 연산 수행

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

 

시간에 단축 예시

 

 

 

 

4-1. 파이프라이닝의 문제 1 : 데이터 해저드 (Data Hazards)

 

- 앞의 명령결과가 다음에 이어질 명령결과에 영향을 주는 경우(데이터 의존성) 파이프 라인 시스템에서 문제가 발생

 

종류

- WAW, WAR 해저드 : 레지스터를 관련 없는 레지스터로 바꾸어 사용함으로써 해당 해저드 해결

(Write After Write, Write After Read)

- RAW 해저드

 

RAW 해저드 예시

- 해결 방법 

  • 레지스터에 결과가 저장되기 전에 해당 결과를 다음 명령어에 직접 전달하는 데이터 포워딩 
  • 버블을 명령어 사이에 끼워넣어 프로그램 실행을 1단계에서 2단계 지연시키는 방법

 

 

 

4-2. 파이프라이닝의 문제 2 : 제어 해저드 (Control Hazards)

- 파이프라인 CPU 구조의 분기 명령이 실행될때 발생하는 문제를 의미.

- 즉, 이미 파이프라인에 적재되어 실행되고 있는 명령어들이 더이상 실행할 필요가 없어지는 경우

- 전체 프로그램 속도 저하의 원인이 된다.

 

해결 방법

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

(지연슬롯 : NOP나 분기명령과 관계없는 명령어를 끼워넣는 것, 컴파일러나 프로그래머가 프로그램 순서를 바꾸는 것)

- 분기 예측 알고리즘 이용

 

 

 

 

 

4-3. 파이프라이닝의 문제 3 : 구조적 해저드 (Structural Hazards)

- 서로 다른 파이프에서 동시에 컴퓨터 내의 장치를 사용하려고 할 때 발생하는 문제를 의미.

예시 : 명령어 인출, 오퍼랜드 인출 동시 실행(버스, 메모리에서 충돌), ALU 동시에 사용

 

해결 방법

(인출 문제 해결)

- 하버드 구조를 사용 : 메모리를 명령어 메모리와 데이터 메모리로 분리해서 사용하는 구조

- 분리 캐시를 사용하여 충돌 회피 : 캐시를 명령어 캐시와 데이터 캐시로 분리해서 사용하는 방식으로 캐시 미스 발생시 해결이 안됨.

(동시에 장치 접근 해결)

- 장치를 하나 더 사용(예 : ALU 2개 사용)

 

 

 

 

슈퍼 스칼라

- 하나의 프로세스 안에 2개 이상의 파이프 라인 탑재

- 명령어 인출 장치가 명령어를 쌍을 지어 가져오고 각각의 파이프라인에 배치하며 각각의 파이프라인은 서로다른 장치(ALU 등)를 사용하는 구조

- 쌍을 이룬 두 명령어는 서로 의존하지 않아야 함.

- 하드웨어를 추가하여 실행 도중에 충돌을 감지 및 제거

 

 

실행 규칙

1. 명령어 한쌍이 동시 병렬 실행 가능한지 파악

2. 불가능한 경우 첫번째 명령어만 실행

3. 두번째 명령어는 다음 명령어와 함께 짝을 지어 실행

4. 명령어는 항상 순서대로 실행

 

 

 

 

 

 

'CS Knowledge > Computer Structure' 카테고리의 다른 글

Computer Structure - Sub Memory  (0) 2023.06.18
Computer Structure - Memory  (1) 2023.06.14
Computer Structure - CPU(2)  (0) 2023.04.18
Computer Structure - CPU(1)  (0) 2023.04.17
Computer Structure - Digital Logic Circuits(2)  (0) 2023.04.17