CPU의 구조

이승주·2024년 7월 31일

Computer Science

목록 보기
2/3
post-thumbnail

개요

CPU(Central Processing Unit)은 주 기억장치인 메모리에서 명령어를 읽고 해석하여 수행하는 작업을 한다. CPU의 주요 구성 요소로는 산술 및 논리 연산 을 수행하는 ALU(Arithmetic[산수] Logic), 명령어의 순서와 수행을 제어하는 제어유닛(Control Unit),그리고 중간 결과와 작업 상태를 저장하는 Register가 있다.


ALU

ALU는 산술 및 논리 연산을 처리한다.

  • 산술연산: 사칙연산

  • 논리연산: AND, OR, NOT 과 같은 비트 논리 연산, 비트 시프트 연산

    위 그림은 ALU의 구조이며, 레지스터를 통해 입력받은 피연산자(Integer Operand)와 제어 유닛으로 부터 받은 명령 코드(opcode)를 통해 연산을 수행하며 결과값(Integer Result)을 다시 레지스터로 반환한다.

    또한 ALU의 연산 결과를 플래그 레지스터에 저장함으로써, 추가적인 상태 정보(플래그)를 제공할 수 있다. 이는 연산 결과가 양수 또는 음수인지, 오버플로우(연산 결과가 레지스터의 용량을 초과한 경우)가 발생했는지 등의 정보를 나타낸다.

    Flag register

    Flag register는 CPU 내부 기구중 하나로 산술 연산 결과의 상태를 보여주는 flag bit들이 모인 레지스터이다.
    산술 연산시 CPU에 의해 자동적으로 세팅되며, 프로세서의 현재 상태를 결정한다.
    상태레지스터라고 불리고 기종에 따라 condition register라고 불리기도한다.

    1) 상태 플래그 (Status Flag)

    Flag기능
    Carry Flag (CF)Unsigned overflow가 발생할 때 1로 세팅된다.
    Parity Flag (PF)연산결과에 1인 bit의 개수가 짝수개이면 1 , 홀수개이면 0으로 세팅된다.
    Auxiliary Flag (AF)연산결과 하위 4bit에 Unsigned overflow가 발생했을때 1로 세팅된다.
    Zero Flag (ZF)연산결과가 0일 때 1로 세팅된다.
    Sign Flag (SF)부호를 나타내는 flag로 연산결과의 MSB(Most Significant Bit)와 같다. 연산결과가 양수이면 0 , 음수이면 1로 세팅된다.
    Overflow Flag (OF)Signed overflow가 발생할 때 1로 세팅된다.

    2) 컨트롤 플래그 (Control flag) : CPU의 동작상태를 제어하는 flag

    Flag기능
    Trap Flag (TF)Trap flag가 1로 세팅되면 명령어를 한개 수행하고 , 0x01 inturrupt (the debug interrupt)를 발생시키게 되는데 0x01 inturrupt가 발생하면 디버거가 해당 프로세스를 attach 할 수 있는 상태가 된다.
    Interrupt enable Flag (IF)Interrupt enable Flag가 1로 세팅되면 외부 인터럽트 요구는 무시되고 , 0으로 세팅되면 외부 인터럽트요구를 받아들인다.
    Direction Flag (DF)데이터를 다른 메모리에 복사할때 방향을 결정하는 flag이다. Direction flag가 0으로 세팅되있을동안 데이터 주소를 가르키는 레지스터가 증가하고 , 1로 세팅되있을동안 데이터 주소를 가르키는 레지스터가 감소한다.
    • 연산에 따른 Flag Bit

      1. Signed

      CFZFSFOF
      ADDX>0 , Y>0 , X+Y<RANGE0000
      ADDX>0 , Y>0 , X+Y>RANGE0011
      SUBX>0 , Y>0 , X>Y0000
      SUBX>0 , Y>0 , X<Y1010
      SUBX>0 , Y>0 , X=Y0100

      2. Unsigned

      CFZFSFOF
      ADDX>0 , Y>0 , X+Y<RANGE0000
      ADDX>0 , Y>0 , X+Y>RANGE1010
      SUBX>0 , Y>0 , X>Y0000
      SUBX>0 , Y>0 , X<Y1010
      SUBX>0 , Y>0 , X=Y0100

Control Unit

  1. CU는 Clock에서 신호를 받는다. 이때 클럭은 특정 주기로 반복되는 신호로서 제어장치가 타이밍을 맞추어 다른 장치들과 동기화를 하는데 중요한 역할을 한다.

  2. 명령 레지스터와 Flag 레지스터로 부터 명령어와 Flag를 받아 제어신호를 발생시킴

  3. Cpu 내부 혹은 Control Bus로 신호를 보내고(출력), 받아들인다.(입력)


Register

  1. Program Counter, PC: 메모리에서 읽어 들일 명령어의 주소를 저장
  2. Command Register, Instruction Register, IR: 현재 CPU가 해석하고 있는 명령어를 저장
  3. Memory Address Register, MAR: 메모리의 주소를 저장
  4. Memory Buffer Register, MBR: 메모리와 주고받을 데이터와 명령어를 저장
  5. General Purpose Register: 다양하고 일반적인 상황에서 자유롭게 사용
  6. Flag Register: CPU가 수행한 최근 연산에 대한 정보, 그리고 CPU의 현재 상태를 나타내는 여러 플래그를 저장
  7. Stack pointer: 스택의 Top을 가리키는 레지스터
  8. Base-register: 기준 주소를 나타내는 레지스터
profile
개발자 공부

0개의 댓글