자격/임베디드기사

[임베디드기사] [필기] CPU와 마이크로프로세서 – 구조, 명령어 셋

CPU(중앙처리장치)는 디지털 시스템에서 모든 연산을 처리하는, 따지면 뇌와 같은 기관이다. 빠른 연산속도를 가지고 명령의 해석이나 연산을 수행하는 기관으로 컴퓨터 논리기관의 핵심적인 소자라고 할 수 있다.

 

임베디드 기사에서는 위와 같은 이유로 CPU의 구조와 세부적인 내용을 시험으로 출제하고 있다. 하나하나 알아보자.


CPU의 개요

Central Process Unit, 중앙처리장치의 풀네임이다. 중앙에서 다 해먹는 중요한 처리장치라고 할 수 있겠다. 현대의 CPU구조는 1970년에 페드리코 페긴이 개발한 구조와 설계에서 기인했다고 한다. 컴퓨터 시스템은 운영 간 수많은 명령어를 처리하는데, 명령어를 기준으로 다음과 같은 기능을 가진다.

  • 인출(Fetch) : 저장공간상에 프로그램카운터(PC, 후술)이 가리키는 명령어를 가져와서 연산공간에 적재한다.
  • 해석(Decode) : 사용자나 시스템에 의해서 지정된 명령어를 해석하고 실행가능한 코드로 변환한다.
  • 실행(Execute) : 해석된 명령어에 따른 연산을 수행한다.
  • 쓰기(Writeback) : 명령어 수행결과를 다시 저장공간(메모리)에 작성한다.

CPU의 구성

CPU는 내부는 다음과 같은 개념도를 가진다.

<위키백과 - CPU - https://ko.wikipedia.org/wiki/%EC%A4%91%EC%95%99_%EC%B2%98%EB%A6%AC_%EC%9E%A5%EC%B9%98 >

위 그림에서 INPUT / OUTPUT과 저장공간(Main Memory)를 제외한 살구색 범위가 CPU의 내부 요소라고 보면 되겠다.

  • 제어부(Control Unit) : CPU와 전체 회로의 동작을 제어하게 되는 부품이다. 입출력장치와의 통신과 데이터처리를 수행한다.
  • 버스(Bus) : 데이터의 통신이 수행되는 모든 데이터의 전송경로를 Bus라고 부른다. 용도와 목적에 따라 입출력 버스 / 내부버스 등으로 구분되는데 CPU내부에 존재하는 버스는 내부버스라고 칭한다.
  • 산술논리장치(ALU;Arithmetic logic Unit) : CPU에서 연산을 전담하는 기관이다.
  • 레지스터 : CPU내부에서 특정한 기능을 수행하는 부품들이다. CPU를 구성하기 위해서 반드시 다음과 같은 레지스터가 필요하다.
    • 프로그램 카운터(Program Counter) : 다음 실행될 명령어의 주소를 가지고 있는 레지스터 이다. 다음 명령어가 인출(Fetch)된 이후에 다음 공간을 가리키기위해서 주소단위로 증가한다.
    • 명령어 레지스터(Instruction Register) ; 가장 마지막으로 실행된 명령어가 저장되어 있다.
    • 누산기(AC) : 연산을 위해서 일시적으로 저장되는 데이터를 가리키는 레지스터이다.
    • 메모리 버퍼 레지스터(MBR; Memory Buffer Register) : 기억장치에서 읽어들어온 데이터가 일시적으로 저장되는 레지스터다.
    • 메모리 주소 레지스터(MAR; Memory Address Register) : PC에 지정된 명령어 주소가 CPU로 넘어가기 전에 일시적으로 저장되는 공간이다.

명령어의 해석 

CPU나 마이크로 프로세서마다 길이와 구조가 달라진다. 실제로는 01의 연속된 임의의 길이로 구성되어있는데, 세상에 이것을 보고 작성할 수 있는 설계자가 어디있으랴, 이를 일정길이단위와 규격으로 기계어를 사람이 적어도 알아볼 수 있게 매핑해 둔 명령어 구조가 어셈블리어(Assembly)어 이다. 이를 통해서 우리는 CPU명령이 어떤 구조로 이루어져있는지를 알 수 있고 이 구소를 명령어 집합 구조(ISA; Instruction Set Architecture)라고 칭한다.

 

이 구조를 알기위해서 반드시 알아야하는 대표적인 CPU의 구조 구분으로 RISCCISC를 알아보겠다.

 

CISC vs RISC

RISC(Reduced Instruction Set Computer)은 지정된 CPU의 명령어 수를 압도적으로 줄여서 개별 명령어의 실행속도를 빠르게 한 컴퓨터 종류를 의미한다. 명령어 파이프라인(동시수행)을 통해 실행속도를 높여 후술될 비교대상군인 CISC의 느린속도 단점을 극복한다. 실제로 사용되는 명령어 개수가 적다는 점에서 착안하였다.

 

CISC(Complex Instruction Set Computer)은 반대로 RISC보다 많고 긴 명령어를 지원하는 컴퓨터 종류이다. 회로도 복잡해지지만 피연산자를 2~3개까지 지정할 수 있어서 일부 명령어는 재인출 없이 명령어 안쪽에서 처리되는 등(피연산자 12의 연산결과를 3에 지정) 직관적으로 변환한다. 요즈음은 실제로는 CISC구조 이더라도 내부적으로 파이프라인(병렬처리)를 다 수행하기 때문에 구분에 큰 의미가 없다는 정보도 뜨문뜨문 보이는거 같다.

 

명령어 지정방식

아무튼 명령어 지정방식에 컴퓨터구조에 따른 차이가 있다는 것을 알았고 본격적인 명령어의 지정방식에는 피연산자의 개수에 따라 0~3 operand가 존재한다.(Ex 1-operand면 피연산자가 1개이다.) 이 피연산자를 지정하는 방식이 여러 가지가 있는데, 다음과 같다.

  • 레지스터(Register) : 레지스터에 저장된 값을 접근할 때 사용한다.
  • 즉치방식(Immediately) : 명령어 자체에서 상수 값을 읽어올 때 지정한다.
  • 직접방식(Direct) : 고정된 주소의 메모리를 접근할 때 지정한다.
  • 레지스터 간접방식(Register Indirect) : 레지스터에 있는 주소의 메모리를 접근할 때 사용한다.
  • 거리방식(Distance) : 레지스터에 있는 주소에 일정 거리를 더한 주소의 메모리를 접근할 때 사용한다.
  • 인덱스방식(Index) : 레지스터에 있는 주소에 다른 레지스터 값에 해당하는 거리를 더한 주소의 메모리를 접근할 때 사용한다.

정리

중앙처리장치(CPU;Central Process unit)은 디지털 시스템의 뇌와 같은 기관으로 명령어의 해석 / 연산등을 담당한다. 내부에는 명령어 수행을 위한 레지스터와 제어부 같은 소자들이 존재한다. 이 명령어는 CPU의 방식(RISC vs CISC)에 따라 명령어의 구조나 길이가 달라진다.

 

다음시간에는

명령어의 병렬처리방식인 슈퍼스칼라방식과 파이프라인등을 알아보고 파이프라인의 해저드 등을 알아보도록 하겠다.