CPU 구조와 기능

심영민·2023년 10월 29일
0

컴퓨터 구조

목록 보기
2/5

CPU 기본 구조

CPU는 기본적으로 아래 그림과 같이 ALU(산술논리연산장치), 레지스터 세트, 제어 유니트가 내부 버스로 이어져 있는 구조를 가진다.

CPU 기능

CPU는 모든 명령어에 공통적으로 수행하거나 명령어에 따라 필요한 경우에만 수행한다.

  • 프로그램 수행 : CPU가 기억장치에 저장된 명령어를 실행

  • 명령어 인출 : 기억장치로부터 명령어를 읽음

  • 명령어 해독 : 인출된 명령어를 해독

명령어 인출과 해독은 모든 명령어에 대해 공통적으로 수행한다.

  • 데이터 인출 : 명령어 실행을 위해 데이터가 필요한 경우 메모리 또는 I/O장치로 부터 데이터 읽음

  • 데이터 처리 : 데이터에 대한 산술/논리 연산 수행

  • 데이터 쓰기 : 수행 결과를 저장

반면 위 기능은 명령어에 따라 필요한 경우에만 수행한다.

CPU 내부 구성요소

  • ALU : 각종 산술 연산들과 논리 연산들을 수행하는 회로들로 이루어진 하드웨어 모듈

  • 레지스터 세트 : CPU 내부 레지스터들의 집합으로 액세스 속도가 가장 빠른 기억장치
    CPU내부에 포함할 수 있는 레지스터들의 수는 제한적임

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

  • CPU 내부버스 : ALU와 레지스터들 사이에서 데이터 이동을 위한 데이터 선과, 제어 유니트로부터 발생되는 제어 신호 선

명령어 실행

명령어 사이클은 CPU가 한개의 명령어를 실행하는데 필요한 전체 처리과정이다.
기본 명령어 사이클은 인출사이클(Fetch Cycle)과 실행사이클(Execution Cycle)이 있다.

CPU 내부 레지스터들

  • PC (프로그램 카운터) : program counter / 다음에 인출한 명령어의 주소를 가지고 있는 레지스터
    명령어가 인출된 후에는 자동적으로 일정 크기만큼 증가

  • AC (누산기) : accumulator / 데이터를 일시적으로 저장하는 레지스터
    레지스터 크기는 CPU가 한번에 처리할 수 있는 비트 수와 동일

  • IR (명령어 레지스터) : instruction register / 가장 최근에 인출된 명령어 코드가 저장되어 있는 레지스터

  • MAR (명령어 주소 레지스터) : memory address register / PC에 저장된 명령어 주소가 시스템 주소 버스로 출력되기 전에 일시적으로 저장되는 주소 레지스터

  • MBR (명령어 버퍼 레지스터) : memory buffer register / 기억장치에 저장할 데이터 또는 기억장치로부터 읽은 데이터를 일시적으로 저장하는 버퍼 레지스터

해당 레지스터들을 그림으로 나타내면 아래와 같다.

인출 사이클

인출 사이클은 메모리에 저장된 명령어를 인출하는 사이클이다.

PC >> MAR >> M >> MBR >> IR

1) PC의 내용을 CPU내부버스를 통해 MAR로 이동

2) 그 주소가 지정하는 메모리 위치로 부터 읽혀진 명령어 데이터가 데이터 버스를 통해 MBR로 적재

3) MBR에 있는 명령어 코드가 IR로 이동

실행 사이클

실행 사이클은 명령어 코드를 해독하고, 필요한 연산들을 수행하는 사이클이다.
연산의 종류로는 데이터 이동, 데이터 처리, 데이터 저장, 제어 등이 있다.

기본적인 명령어 구성

연산코드 + 오퍼랜드로 구성되어 있으며
연산코드는 CPU가 처리할 연산을 지정해주고
오퍼랜드는 명령어 실행에 필요한 데이터가 저장된 주소이다.

LOAD addr 명령어

기억장치에 저장되어 있는 데이터를 CPU 내부 레지스터인 AC로 이동하는 명령어

IR >> MAR >> M >> MBR >> AC

1) IR에 있는 명령어의 주소 부분을 MAR로 전송

2) 그 주소가 지정한 기억장치 위치로 부터 데이터를 인출하여 MBR로 전송

3) 그 데이터를 AC에 적재

STA addr 명령어

AC 레지스터의 내용을 기억장치에 저장하는 명령어

IR >> MAR // AC >> MBR >> M

1) IR에 있는 명령어 주소 부분을 MAR로 전송

2) 저장할 데이터를 버퍼레지스터인 MBR로 이동

3) MBR의 내용을 MAR이 지정한 기억장치 위치로 저장

ADD addr 명령어

기억장치에 저장된 데이터를 AC의 내용과 더하고, 그 결과를 다시 AC에 저장하는 명령어

IR >> MAR >> M >> MBR >> +AC >> AC

1) IR에 있는 명령어의 주소 부분을 MAR로 전송

2) 저장할 데이터를 버퍼 레지스터인 MBR로 전송

3) 그 데이터와 AC의 내용을 더하고 결과값을 다시 AC에 저장

JUMP addr 명령어

오퍼랜드가 가리키는 위치의 명령어로 실행 순서를 변경하는 분기 명령어

IR >> PC
명령어의 오퍼랜드(분기할 목적지 주소)가 PC에 저장

인터럽트 사이클

인터럽트란 다른 모듈들 (I/O나 기억장치)이 프로세서의 정상적인 처리를 중단할 수 있는 메커니즘이다.
프로그램 실행 중에 CPU의 현재 처리 순서를 중단시키고 다른 동작을 수행하도록 함으로써 처리 효율을 향상 시킨다.

외부로부터 인터럽트 요구가 들어오면 CPU는 원래의 프로그램 수행을 중단하고, 요구된 인터럽트를 위한 서비스 프로그램(ISR)을 먼저 수행한다.

1) PC의 내용이 MBR로 전송

2) SP(스택포인터)의 내용이 MAR로 전송되고 PC의 내용은 ISR 시작 주소로 변경

3) MBR에 저장되어 있던 원래 PC의 내용이 스택에 저장

인터럽트 종류

  • Program : 산술 오버플로우나 권한 밖의 명령어, 0으로 나누는 등의 명령어 실행으로 발생하는 인터럽트

  • Timer : 프로세스 내 타이머로 생성되는 인터럽트로, 운영체제가 정기적으로 특정 기능을 수행 할 수 있음

  • I/O : 입출력 장치 제어기로 발생하는 인터럽트로, 정상 완료 또는 다양한 오류 조건을 알려줌

  • Hardware Failure : 전원 공급 문제로 발생되는 인터럽트

인터럽트 처리

인터럽트가 발생하면 CPU는 인터럽트 서비스 루틴(ISR)을 호출하고 서비스 종료 후 중단되었던 원래 프로그램을 계속 수행한다.

해당과정은 아래와 같다.

1) 현재 명령어 실행 중단

2) 실행 context 저장 : PC값 및 레지스터 값들을 스택에 저장

3) 인터럽트 서비스 루틴을 호출 및 실행 (ISR 주소를 PC에 적재)

4) ISR 완료 후 스택에 저장된 context를 CPU에 복원 (중단된 프로그램 다시 시작)

다중 인터럽트

인터럽트 서비스 루틴을 수행하는 동안에 다른 인터럽트가 발생하는 것이다.
다중 인터럽트는 순차적 인터럽트 처리와 우선순위에 의한 인터럽트 처리, 2가지 방식으로 처리된다.

순차적 인터럽트 처리는 CPU가 인터럽트 서비스 루틴을 처리하고 있는 도중에 새로운 인터럽트 요구가 들어와도 CPU가 인터럽트 사이클을 수행하지 않도록 방지하는 것이다.

우선순위에 의한 인터럽트 처리는 스택에 중단된 ISR 주소도 추가 저장하여 우선순위에 따라 인터럽트 처리하는 것이다.

간접 사이클

일반적인 명령어는 오퍼랜드에 데이터가 저장된 기억장치의 주소를 포함시키지만,
간접사이클은 간접 주소지정 방식을 사용하여 명령어에 포함되어 있는 주소 공간에 실제 명령어 실행에 필요한 데이터가 저장된 기억장치의 주소를 지정한다.

전체 사이클 실행 순서는 인출사이클 > 간접 사이클 > 실행 사이클 순서이다.

IR >> MAR >> M >> MBR >>IR

인출된 명령어의 주소 필드 내용을 이용하여 기억장치로부터 데이터의 실제 주소를 인출하여 IR 주소 필드에 저장한다.

명령어 파이프 라이닝

명령어 파이프 라이닝이란 CPU의 프로그램 처리 속도를 높이기 위하여 CPU 내부 하드웨어를 여러 단계로 나누어 동시에 처리하는 기술이다.

CPU의 처리 속도를 더욱 높이기 위해 내부에 두개 혹은 그 이상의 명령어 파이프 라인을 포함시킨 구조는 슈퍼스칼라 구조라고 한다.

실행할 명령어의 개수가 N이고 파이프라인의 단계 수가 K개 일때 파이프라인에 의한 속도 향상 S를 구하는 식은 S = K x N / K + (N - 1)이다.

파이프라인 수가 m개인 m-way 슈퍼스칼라 구조에서는 N이 무한일때 S = m이다.

2단계 파이프 라인

아래 그림 같이 명령어를 실행하는 하드웨어를 인출단계와 실행단계의 독립적인 파이프라인 모듈들로 분리하여 두 단계들에 동일한 클럭을 가하여 동작 시간을 일치시키는 기술이다.

문제점은 일반적으로 실행단계가 인출단계보다 소요 시간이 길고, 두 단계의 처리 시간이 동일하지 않으면 두 배의 속도 향상이 불가하여 효율성이 떨어진다는 점이다.

해결방안은 파이프라인 단계수를 증가시켜 각 단계의 처리 시간을 같게하여 전체적으로 속도 향상을 높이게 하는 것이다.

4단계 파이프 라인

아래 그림 같이 명령어를 명령어 인출(IF)단계, 명령어 해독(ID)단계, 오퍼랜드 인출(OF)단계, 실행단계(EX)로 분리하여 네 단계들에 동일한 클럭을 가하여 동작 시간을 일치시키는 기술이다.

문제점은 파이프라인의 클럭은 처리 시간이 가장 오래 걸리는 단계가 기준이 되어 시간이 길어지고, IF단계와 OF단계가 동시에 기억장치를 액세스하는 경우 역시 지연된다.
또한 조건 분기 명령어 실행시 미리 인출하여 처리하던 명령어들이 무효화된다.

이러한 분기 발생에 대한 해결 방안은 분기 목적지를 선인출, 루프 버퍼 사용, 분기 예측, 지연 분기 등이 있다.

상태 레지스터

CPU 내부 레지스터로 조건 분기 명령어가 사용할 조건 플래그들을 저장한다.
아래 그림은 각각 다른 상태와 의미를 나타낸다.

  • 부호 플래그 (S) : 직전에 수행된 산술연산 결과값의 부호 비트 저장
  • 영 플래그 (Z) : 연산 결과값이 0이면 1
  • 올림수 플래그 (C) : 올림수 발생시 1
  • 동등 플래그 (E) : 두 수의 비교가 동등하면 1
  • 오버 플로우 플래그 (V) : 오버플로우 발생시 1
  • 인터럽트 플래그 (I) : 인터럽트 가능이면 0, 인터럽트 불가능이면 1
  • 슈퍼바이저 플래그 (P) : 사용자 모드면 0, 슈퍼바이저 모드는 1

명령어 세트

CPU의 기능을 수행하기 위하여 정의되어 있는 명령어들의 집합으로 기계어 혹은 어셈블리 명령어로 CPU에 따라 종류와 수가 다르다.

명령어 세트 설계를 위해서는 연산 종류, 데이터 형태, 명령어 형식, 주소지정 방식 등이 고려되어져야 한다.

연산 종류

데이터 전송, 산술 연산, 논리 연산, 입출력장치, 프로그램 제어(분기, 서브루틴 호출)등이 있다.

서브루틴 수행 과정은 아래 그림과 같다.

명령어 형식

명령어는 연산 코드와 오퍼랜드와 다음 명령어 주소로 구성되어 있다.
명령어 형식이란 명령어 내 필드들의 수와 배치 방식 및 각 필드의 비트 수를 의미한다.
필드란 명령어의 각 구성 요소들에 소요되는 비트들의 그룹이다.

예를 들어 3개의 필드들로 구성된 16비트 명령어라 하면 4비트의 연산코드, 4비트의 오퍼랜드1, 8비트의 오퍼랜드2로 표현된다.

이때 오퍼랜드 필드의 범위는 오퍼랜드의 종류(데이터, 기억장치 주소, 레지스터 번호)에 따라 결정된다.

  • 데이터 : 표현 가능한 수의 크기가 결정
  • 기억장치 주소 : CPU가 오퍼랜드 인출을 위하여 직접 주소를 지정할 수 있는 기억장치 영역의 범위가 결정
  • 레지스터 번호: 데이터 저장에 사용될 수 있는 레지스터의 수가 결정

오퍼랜드 수에 따라 1-주소 명령어, 2-주소 명령어, 3-주소 명령어로도 분류 가능하다.

주소지정방식

다양한 주소지정 방식을 사용하여 제한된 수의 명령어 비트들을 이용하여 사용자에게 여러가지 방법으로 오퍼랜드를 지정하고, 더 큰 용량의 기억장치를 사용할 수 있게끔 해준다.

기호

EA : 데이터가 저장된 실제 주소
A : 명령어 내의 주소 필드 내용 (오퍼랜드 필드 : 기억장치 주소)
R : 명령어 내의 레지스터 번호 (오퍼랜드 필드 : 레지스터 번호)
(A) : 기억장치 A번지 내용
(R) : 레지스터 R의 내용

주소지정방식 종류

  • 직접 주소 방식 : EA=A
  • 간접 주소 방식 : EA=(A)
  • 묵시적 주소 방식 : 데이터의 위치를 지정하지 않음
  • 즉시 주소 방식 : 데이터가 명령어에 포함되어 있는 방식
  • 레지스터 주소지정 방식 : EA=R
  • 레지스터 간접 주소지정 방식 : EA=(R)
  • 변위 주소지정 방식 : EA=A+(R)
profile
코딩너무어려운대 어떡할과 재학중

0개의 댓글

관련 채용 정보