제2장 CPU의 구조와 기능

고독한 복전생·2022년 10월 21일
0
post-thumbnail

2.1 CPU의 기본 구조

CPU 기능

명령어를 인출(fetch) 및 해독(decode) 하며, 데이터를 인출, 처리, 저장(store)할 수 있다.

CPU 구조 및 구성요소

컴구2장

ALU

  • 산술 및 논리 연산들을 수행하는 회로들로 이루어진 하드웨어 모듈

레지스터(Register)

  • 엑세스 속도가 가장 빠른 기억장치, 다양한 종류의 레지스터가 있다.

제어 유니트

  • 명령을 해석하고, 실행하기 위한 제어 신호들을 순차적으로 발생하는 하드웨어 모듈

내부 버스

  • 레지스터 및 각 모듈들간 데이터 및 신호 이동을 위한 버스. 외부 버스와는 반드시 버퍼 레지스터 등을 통해서만 연결된다.

2.2 명령어 실행

명령어 사이클 : CPU가 한 개의 명령어를 실행하는데 필요한 전체 처리 과정.

컴구2장

명령어 실행에 필요한 CPU 내부 레지스터

프로그램 카운터(Program Counter : PC)

  • 다음에 인출할 명령어의 주소를 가지고 있음
  • 명령어가 인출된 후에는 자동으로 일정 크기 증가

누산기(Accumulator : AC)

  • 데이터를 일시적으로 저장하는 레지스터
  • 레지스터의 길이는 CPU가 한번에 처리할 수 있는 데이터 비트 수와 동일

명령어 레지스터(Instruction Register : IR)

  • 가장 최근에 인출된 명령어 코드가 저장되어 있는 레지스터

기억장치 주소 레지스터(Memory Address Register : MAR)

  • PC에 저장된 명령어 주소가 시스템 주소 버스로 출력되기 전에 일시적으로 저장되는 레지스터

기억장치 버퍼 레지스터(Memory Buffer Register : MBR)

  • 기억장치에 쓰여질 데이터 혹은 기억장치로부터 읽혀진 데이터를 일시적으로 저장하는 버퍼 레지스터

실행 사이클

명령어 코드를 해독(decode)하고, 필요한 연산들을 수행하는 과정. op code에 의해 결정됨

어셈블리 명령어 예시

LOAD 명령어 : 기억장치의 데이터를 AC 레지스터로 이동
STA 명령어 : AC 레지스터의 내용을 기억장치에 저장
ADD 명령어 : 기억장치의 데이터 + AC 레지스터의 데이터 연산 후, 결과를 AC 레지스터에 저장
JUMP 명령어 : 오퍼랜드가 가리키는 위치의 명령어로 실행 순서를 변경

LOAD : 1, STORE : 2, ADD : 5, JUMP : 8 일 때
컴구2장

인터럽트 사이클

인터럽트란?
프로그램 실행 중에 CPU의 현재 처리 순서를 중단시키고, 다른 동작을 수행하도록 요구하는 시스템 동작

인터럽트 사이클 예시

LOAD 250이 실행되는 동안 인터럽트가 발생했고, 현재 SP(stack point) = 999 이고, ISR은 650번지 라고 했을 때...

다중 인터럽트

하나의 인터럽트 서비스 루틴을 수행하는 동안에 다른 인터럽트가 발생할 수 도 있다. 그럴땐,
(1) 인터럽트 플래그를 0으로 하여 인터럽트 불가능 상태로 만들어 주거나
(2) 인터럽트에 우선순위를 정해 처리할 수 있도록 하다.

간접 사이클

명령어 실행에 필요한 데이터의 주소를 인출하는 사이클. '간접 주소지정 방식'에서 사용된다.


2.3 명령어 파이프라이닝

CPU의 프로그램 처리 속도를 높이기 위해 CPU 내부 하드웨어를 여러 단계로 나누어 동시에 처리하는 기술

2-단계 명령어 파이프라인(two-stage instruction pipeline)

컴구2장

명령어를 실행하는 하드웨어를 인출(fetch) 단계와 실행(execute) 단계라는 두 개의 독립적인 파이프라인 모듈로 분리.
장점 : 명령어 처리 속도가 두 배 향상
단점 : 두 단계의 처리 시간이 동일하지 않으면 두 배의 속도 향상을 얻지 못함

4-단계 명령어 파이프라인

컴구2장

파이프라인 단계의 수를 증가시켜 2-단계 명령어 파이프라인의 단점을 해결하고자 함.
명령어 인출(IF), 명령어 해독(ID), 오퍼랜드 인출(OF), 실행 단계(EX)로 이루어진 4-단계

파이프라인에 의한 전체 명령어 실행 시간

파이프라인 단계 수 = k, 실행할 명령어들의 수 = N 일때
각 단계가 한 클럭 주기씩이라면
a = K + (N-1)
첫 번째 명령어를 실행하는데 K 주기가 걸리고, 나머지 (N-1)개의 명령어들은 각 한주기씪만 소요
파이프라인이 되지 않은 경우 b = K x N
속도 향상 = a / b

조건 분기(Conditional branch)

조건 분기는 대표적인 파이프라인 효율 저하 원인이다. 조건 분기 명령어가 실행되면, 미리 인출하여 처리하던 명령어들이 무효화된다. 이에 여러가지 분기 발생에 의한 성능 저하 최소하 방법이 등장했다.
분기 예측
분기 역사 표를 이용하여 최근 분기 결과를 참조해서 분기가 일어날 것인지 예측하고, 그에 따라 명령어를 인출하는 방법

분기 목적지 선인출
분기 명령어의 다음 명령어와 분기의 목적지 명령어도 함께 인출하여 실행하는 방법

루프 버퍼 사용
루프 버퍼(IF 단계에 있음)에 가장 최근 인출된 n개의 명령어들을 순서대로 저장해두는 방법

지연 분기
분기 명령어의 위치를 재배치하는 방법

상태 레지스터

조건분기 명령어가 사용할 조건 플래그들을 저장해둔 레지스터
컴구2장
S : 부호 플래그.직전 산술연산 결과값의 부호 비트 저장
Z : 영 플래그. 연산 결과값이 0이면 1
C : 올림수 플래그. 올림수(carry)나 빌림수(borrow)가 발생한 경우 1
E : 동등 플래그. 두 수의 비교값이 동일할 때 1
V : 오버플로우 플래그. 오버플로우 발생 시 1
I : 인터럽트 플래그. 인터럽트 가능 은 0, 불가능은 1
P : 슈퍼바이저 플래그. 슈퍼바이저 모드면 1, 사용자 모드면 0

슈퍼스칼라(Superscalar)

컴구2장

CPU의 처리 속도를 더욱 높이기 위해 내부에 두 개이상의 명령어 파이프라인들을 포함시킨 구조이다.

명령어 실행 시간
단일 파이프라인 : a = k + N - 1
m-way 슈퍼스칼라 : b = k + (N-m)/m
속도 향상 : a/b

속도 저하

  • 명령어들 간의 데이터 의존 관계, 하드웨어 이용에 대한 경합 등에 의해 발생
  • 명령어 실행 순서를 재배치하거나, 하드웨어를 추가(중복) 설치해서 해결 가능

듀얼-코어 및 멀티-코어

코어 : 명령어 실행에 필요한 CPU 내부의 핵심 하드웨어 모듈(ALU, 레지스터 등)
스레드 : 독립적으로 샐행될 수 있는 최소 크기의 프로그램 단위
RS : 프로그램 카운터, 스택 포인터, 상태 레지스터 등




2.4 명령어 세트

  • 어떤 CPU를 위하여 정의되어 있는 명령어들의 집합
  • 명령어 세트 설계를 위해서는 연산 종류, 데이터 형태, 명령어 형식, 주소지정 방식등이 결정되어야 함

서브루틴 호출(Subroutine call)

CALL : 현재의 PC 내용을 스택에 저장하고 서브루틴의 시작 주소로 분기하는 명령어
RET : CPU가 원래 실행하던 프로그램으로 복귀시키는 명령어

명령어 형식(Instruction Format)

명령어 형식 : 명령어 내 필드들의 수와 배치 방식 및 각 필드의 비트 수
필드 : 명령어의 각 구성 요소들에 소요되는 비트들의 그룹
명령어의 길이 : 단어(word) 길이

오퍼랜드 수에 따른 차이점

X = A + B를 계산해보자

1-주소 명령어
LOAD A ; AC <- M[A]
ADD B ; AC <- AC + M[B]
STOR T ; M[T] <- AC

2-주소 명령어
MOV R1,A ; R1 <- M[A]
ADD R1,B ; R1 <- R1 + M[B]

3-주소 명령어
ADD R1,A,B

주소 지정 방식(Addressing Mode)

  • 명령어 실행에 필요한 오퍼랜드의 주소를 결정하는 방식
  • 오퍼랜드 필드에는 '기억장치 주소', '레지스터 번호', '데이터'가 표현된다.

기호 설명
EA : 유효 주소
A : 명령어 내의 주소 필드 내용
R : 명령어 내의 레지스터 번호
(A) : 기억장치 A 번지의 내용
(R) : 레지스터 R의 내용

직접 주소지정 방식

EA = A
오퍼랜드 필드의 내용이 유효 주소가 되는 방식
장점 : 데이터 인출을 위해선 한 번의 기억장치 액세스만 필요
단점 : 직접 지정할 수 있는 기억장소의 수가 제한됨
ex)

간접 주소지정 방식

EA = (A)

  • 오퍼랜드 필드에 기억장치 주소가 가리키는 기억장소에 데이터의 유효주소를 저장해두는 방식
  • 명령어 형식에 간접비트(I)가 필요한데, I=0 이면 직접, 1이면 간접 주소지정 방식이다.
    장점 : 최대 기억장치용량이 단어의 길에 의해 결정 즉, 주소지정 가능한 기억장치 용량 확장 가능성
    단점 : 두 번의 기억장치 액세스 필요
    ex)

레지스터 주소지정 방식

EA = R
명령어의 오퍼랜드가 연산에 사용될 데이터가 있는 레지스터를 가리키는 방식
장점 : 기억장치 액세스가 필요없으며, 오퍼랜드 필드 비트 수가 적어도 됨
단점 : 데이터 저장공간이 CPU 내부 레지스터들로 제한
ex)

레지스터 간접 주소지정 방식

EA = (R)
오퍼랜드 필드가 가리키는 레지스터 내용을 유효 주소로 사용하여 데이터를 인출하는 방식
장점 : 주소지정 가능한 기억장치의 역여이 확장. 레지스터의 길이가 n 비트라면, 2^n 만큼 지정 가능
ex)

상대 주소지정 방식(변위)

EA = A + (PC)
프로그램 카운터를 레지스터로 사용하는 방식. A>0 이면 앞 방향으로, A<0이면 뒷 방향으로 분기
장점 : 일반적인 분기 명령어보다 적은 수의 비트만 사용
단점 : 분기 범위가 오퍼랜드 필드의 길이에 의해 제한(2의 보수 범위 내)
ex)

인덱스 주소지정 방식(변위)

EA = (IX) + A
인덱스 레지스터의 내용과 변위 A를 더하여 유효 주소를 결정하는 방식
ex) 데이터 배열의 네 번째 데이터 액세스하는 상황

profile
인문대 컴퓨터공학부

0개의 댓글