찰리의 놀이터

[컴퓨터 구조] 중앙처리장치 (CPU, Central Processing Unit) 본문

Computer Science

[컴퓨터 구조] 중앙처리장치 (CPU, Central Processing Unit)

차알리 2023. 2. 20. 23:27

중앙처리장치(CPU, Central Processing Unit)

중앙처리장치(이하 CPU)는 컴퓨터에서 기억, 해석, 연산, 제어라는 4대 주요 기능을 관할하는 장치입니다.
프로그램의 실행과 데이터를 처리하는 역할을 수행합니다.
지난 포스팅에서 컴퓨터의 구조를 전체적으로 알아보았다면, 이번 포스팅에서는 중앙처리장치에 대해 알아보는 시간을 가지도록 하겠습니다.

CPU 구성

CPU는 기본적으로 산술논리연산장치(ALU, Arithmetic and Logical Unit)와 레지스터(Register Set), 그리고 제어장치(Control Unit)으로 구성이 됩니다.

산술논리연산장치(ALU, Arithmetic and Logical Unit)

CPU 내의 연산기능을 수행하는 장치로 산술연산과 논리 데이터에 대한 연산을 합니다.

ALU는 산술연산장치, 논리연산장치, 보수기, 시프트레지스터, 상태 레지스터로 구성되어 있습니다.

  • 산술연산장치 : 가감승제(+,-,*,/)를 수행하는 장치
  • 논리연산장치 : 논리연산(AND, OR, XOR, NOT 등)을 수행하는 장치
  • 보수기 : 2진 데이터를 2의 보수(음수화)로 변환시키는 장치
  • 시프트레지스터 : 비트들을 좌측 또는 우측으로 이동시키는 장치
  • 상태 레지스터 : 연산 결과의 상태를 나타내는 장치

제어장치(Control Unit)

명령어를 순서대로 실행할 수 있도록 제어하는 장치입니다.

주기억장치에서 프로그램 명령어를 꺼내어 해독한 뒤 명령어 레지스터에 저장합니다. 이 후, 명령어 레지스터에 저장된 명령어를 실행하여 제어신호를 기억장치, ALU, 입출력장치로 내보냅니다.

다른 장치들이 보낸 신호를 받아, 다음에 수행할 동작을 결정하는 역할을 합니다.
제어장치는 프로그램 카운터, 명령어 레지스터, 명령어 해독기로 구성됩니다.

  • 프로그램 카운터(PC, Program Counter) : 다음번에 수행할 명령어의 주소를 기억하는 레지스터입니다.
  • 명령어 레지스터(IR, Instruction Register) : 기억장치에서 읽어온 명령어를 저장하는 레지스터입니다.
  • 명령어 해독기(Decoder) : 명령어 레지스터로부터 연산코드를 받아 해석합니다. 해석 결과를 제어신호 발생기에 전달합니다.

명령어 실행단계는 인출, 간접, 실행, 인터럽트로 구성이 됩니다.

  • 인출(Fetch): 주기억 장치로부터 명령어를 읽어 해석합니다.
  • 간접(Indirect): 해석된 명렁어 주소가 간접주소일 때 수행합니다. 주기억 장치에 한번 더 접근합니다.
  • 실행(Excute): 해석한 명령을 실행합니다.
  • 인터럽트(Interrupt): 예기치 않은 문제가 발생해도 업무 처리가 계속될 수 있도록 합니다.

레지스터(Register)

고속 기억장치입니다.
명령어 주소, 코드, 연산에 필요한 데이터와 연산 결과를 임시로 저장하는 장치입니다.
메모리 계층의 최상위에 위치하며 가장 빠른 속도로 접근 가능한 메모리입니다.

CPU에서 주기억장치로부터 읽어온 명령어와 데이터를 임시로 보관하는 역할과 ALU에서 처리된 결과 데이터를 임시로 보관하는 역할을 합니다.

범용 레지스터와 특수 목적 레지스터로 나뉩니다.

  • 범용 레지스터 : 연산에 필요한 데이터나 연산 결과를 임시로 저장합니다. 데이터를 연산할 때 메모리로부터 데이터를 인출할 경우 호출시간이 오래걸리기 때문에 CPU 내부의 레지스터에 임시 저장하여 연산을 수행합니다.
  • 특수 목적 레지스터 : 특별한 용도가 있는 레지스터입니다.
    • 주소를 기억하는 레지스터
      • 프로그램 카운터(PC, Program Counter) : 제어장치 내부에 있는 레지스터로 다음번에 수행할 명령어의 주소를 기억하는 레지스터입니다. 데이터가 저장되어 있는 기억장치의 주소를 지정해주는 레시스터이며, 현재 처리하려고 하는 데이터를 인출한 후에는 자동으로 1을 증가하여 다음에 수행해야할 명령어가 저장된 기억장치의 주소를 지정해줍니다.
      • 메모리 주소 레지스터(MAR, Memory Address Register) : 다음번에 수행될 명령어를 인출하기 위해 현재 프로그램 카운터에 들어있는 주소가 시스템버스의 주소버스로 출력되기 전에 임시로 저장하는 주소 레지스터입니다.
      • 스택 포인터(SP, Stack Pointer) : 스택 주소지정방식에서 사용됩니다. 스택의 최상위(Top) 부분을 지정합니다. 스택은 스택 포인터와 스택 영역으로 나뉘며, 스택포인터는 CPU 내부에 있는 레지스터로, 스택 영역의 주소를 지정해주는 포인터입니다. 스택 영역은 실제로 데이터가 존재하는 장소로 기억장치에 위치합니다.
    • 데이터를 기억하는 레지스터
      • 메모리 버퍼 레지스터(MBR, Memory Buffer Register) : 주기억장치에서 읽어온 데이터를 임시로 저장합니다.
      • 누산기(Accumulator) : 산술 연산 및 논리 연산이 이루어질 경우에는 오퍼랜드나 연산결과를 임시로 저장합니다. CPU가 연산을 수행한 후 그 결과는 반드시 누산기에 저장합니다.
      • 명령어 레지스터(IR, Instruction Register) : 제어장치 내부에 있는 레지스터로 현재 실행 중인 명령어를 저장합니다.