포스트

[Computer Architecture] How CPU works

중앙처리장치(CPU) 작동 원리


  • CPU는 컴퓨터에서 가장 핵심적인 역할을 수행하며, ‘인간의 두뇌’에 해당한다. CPU는 크게 연산 장치, 제어 장치, 레지스터로 구성된다.

연산 장치 (Arithmetic Logic Unit, ALU)

  • 역할: 덧셈, 뺄셈, 곱셈, 나눗셈 등의 산술 연산과 AND, OR, NOT 등의 논리 연산을 수행한다. 따라서 산술논리연산장치라고도 불린다.
  • 작동 방식: 연산에 필요한 데이터를 레지스터에서 가져오고, 연산 결과를 다시 레지스터로 보낸다.

제어 장치 (Control Unit)

  • 역할: 명령어를 순서대로 실행할 수 있도록 제어하는 장치이다.
  • 작동 방식:
    • 주기억장치에서 프로그램 명령어를 꺼내 해독하고, 그 결과에 따라 명령어 실행에 필요한 제어 신호를 기억장치, 연산장치, 입출력장치로 보낸다. 또한 이들 장치가 보낸 신호를 받아, 다음에 수행할 동작을 결정한다.
    • 프로그램 카운터(PC), 명령 레지스터(IR), 명령어 디코더 등을 포함하여, 명령어의 인출, 해독, 실행을 관리한다.

레지스터 (Registers)

  • 역할: 고속 기억장치로, 명령어 주소, 코드, 연산에 필요한 데이터, 연산 결과 등을 임시로 저장한다.
  • 종류:
    • 범용 레지스터: 다목적으로 사용되며, 연산 결과나 중간 데이터를 임시로 저장한다.
    • 특수목적 레지스터:
      • 특별한 용도로 사용하는 레지스터이다. 중앙처리장치 종류에 따라 사용할 수 있는 레지스터 개수와 크기가 다르다.
      • 프로그램 카운터(PC), 명령 레지스터(IR), 스택 포인터(SP) 등 특정 용도로 사용되는 레지스터이다.

CPU의 동작 과정


  1. 명령어 인출 (Fetch): 제어 장치가 주기억장치에서 명령어를 읽어온다.
  2. 명령어 해독 (Decode): 제어 장치가 인출한 명령어를 해독한다.
  3. 명령어 실행 (Execute): 해독된 명령어에 따라 연산 장치가 연산을 수행하거나, 제어 신호를 기억장치나 입출력장치로 보낸다.
  4. 결과 저장 (Store): 연산 결과를 레지스터나 주기억장치에 저장한다.
1
2
3
4
1. 주기억장치는 입력 장치에서 받은 데이터 또는 보조기억장치에 저장된 프로그램을 읽어온다.
2. CPU는 프로그램을 실행하기 위해 주기억장치에 저장된 프로그램 명령어와 데이터를 읽어와 처리하고, 결과를 다시 주기억장치에 저장한다.
3. 주기억장치는 처리 결과를 보조기억장치에 저장하거나 출력 장치로 보낸다.
4. 제어 장치는 1~3 과정에서 명령어가 순서대로 실행되도록 각 장치를 제어한다.

요약


  • CPU는 컴퓨터의 두뇌 역할을 하며, 연산 장치(ALU), 제어 장치(Control Unit), 레지스터(Registers)로 구성된다.
  • 연산 장치는 산술 및 논리 연산을 수행하고, 제어 장치는 명령어의 인출, 해독, 실행을 관리하며, 레지스터는 고속 기억장치로 데이터를 임시 저장한다.
  • 이러한 구성 요소들이 협력하여 CPU의 기본 작동 과정을 실현한다.

특수 목적 레지스터


  • 특수 목적 레지스터는 CPU 내부에서 특정한 기능을 수행하는 데 사용되는 레지스터이다. 이들 레지스터는 주로 데이터의 저장, 명령어 실행 제어, 주소 지정 등 특정한 작업을 효율적으로 처리하기 위해 설계되었다.

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

  • 기능: 다음에 수행할 명령어의 주소를 저장한다.
  • 역할: 제어 장치가 명령어를 인출할 때, PC의 값을 사용하여 주기억장치에서 명령어를 가져온다. 명령어가 실행되면 PC 값은 다음 명령어를 가리키도록 증가한다. 명령어 사이클 동안 명령어를 순차적으로 인출하기 위해 PC는 현재 명령어의 다음 주소를 가리킨다.

MAR (Memory Address Register, 메모리 주소 레지스터)

  • 기능: 주기억장치에서 읽기와 쓰기 연산을 수행할 메모리 주소를 저장한다.
  • 역할: CPU가 데이터를 읽거나 쓸 때, 해당 메모리 주소를 MAR에 저장하여 주기억장치와 통신한다.

MBR (Memory Buffer Register, 메모리 버퍼 레지스터)

  • 기능: 주기억장치에서 읽어온 데이터나 저장할 데이터를 임시로 저장한다.
  • 역할: 주기억장치와 CPU 사이의 데이터 전송을 중계한다. MBR은 데이터 버퍼 역할을 하여 주기억장치와의 데이터를 임시로 저장한다.

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

  • 기능: 현재 실행 중인 명령어를 저장한다.
  • 역할: 주기억장치에서 인출된 명령어가 IR에 저장되며, 제어 장치는 이 명령어를 해독하고 실행한다. IR의 내용은 명령어 사이클 동안 유지된다.

AC (Accumulator, 누산기)

  • 기능: 연산 결과를 임시로 저장한다.
  • 역할: 산술 및 논리 연산의 결과를 저장하는 데 사용된다. AC는 연산 장치(ALU)와 직접 연결되어 있어 연산 결과를 신속하게 저장하고 사용할 수 있다.

레지스터의 상호 작용


  • 이러한 특수 목적 레지스터들은 CPU의 명령어 사이클 동안 중요한 역할을 하며, 각 레지스터는 특정한 작업을 신속하고 효율적으로 처리할 수 있도록 설계되었다.
    • 명령어 인출: PC가 다음 명령어의 주소를 MAR로 전달하고, 해당 주소에서 명령어를 인출하여 MBR로 저장한다. MBR의 데이터는 IR로 전달되어 해독된다.
    • 명령어 실행: IR에 저장된 명령어가 실행되면서 필요시 AC를 사용하여 연산을 수행한다. 연산 결과는 AC에 저장된다.
    • 메모리 접근: 메모리에서 데이터를 읽거나 쓸 때, 해당 메모리 주소는 MAR에 저장되고 데이터는 MBR을 통해 전송된다.

제어 장치와의 관계


  • 제어 장치: CPU 내에서 명령어의 인출, 해독, 실행 과정을 지휘하는 역할을 한다. 제어 장치는 PC, IR, MAR, MBR, AC와 같은 특수 목적 레지스터들을 사용하여 명령어의 흐름과 데이터 처리를 관리한다.
  • 작동 방식: 제어 장치는 PC의 값을 이용해 다음 명령어의 주소를 MAR에 저장하고, 해당 주소에서 명령어를 인출하여 IR에 저장한다. 그런 다음, IR에 저장된 명령어를 해독하고 실행한다. 명령어 실행 과정에서 필요한 데이터를 MBR에 저장하고, 연산 결과를 AC에 저장하며, 필요 시 메모리 주소를 MAR에 저장하여 주기억장치와의 데이터 교환을 관리한다.

CPU와 주기억장치 간의 상호작용


  • 명령어 인출: 제어 장치는 프로그램 카운터(PC)에 저장된 주소를 통해 주기억장치에서 명령어를 인출한다.
  • 데이터 인출: 연산에 필요한 데이터는 주기억장치에서 레지스터로 인출된다.
  • 결과 저장: 연산 결과는 다시 주기억장치나 레지스터에 저장된다.

명령어 세트란?


  • 명령어 세트는 CPU가 실행할 수 있는 명령어들의 집합이다. 각 명령어는 연산 코드(Operation Code, Opcode)와 피연산자(Operand)로 구성된다.

명령어 구성 요소


  1. 연산 코드 (Opcode): 실행할 연산을 지정한다.
  2. 피연산자 (Operand): 연산에 필요한 데이터나 데이터의 저장 위치를 지정한다.

명령어의 기능


  • 연산 기능: 산술 연산 (예: 덧셈, 뺄셈), 논리 연산 (예: AND, OR)
  • 제어 기능: 프로그램 흐름 제어 (예: 분기, 점프)
  • 데이터 전달 기능: 데이터 이동 (예: 로드, 저장)
  • 입출력 기능: 외부 장치와의 데이터 교환

피연산자의 형태


  • 주소: 메모리나 레지스터의 주소
  • 상수: 숫자나 문자의 값
  • 논리 데이터: 논리적인 값 (예: true/false)

명령어 사이클


  • CPU는 프로그램을 실행하기 위해 주기억장치에서 명령어를 순차적으로 인출하여 해독하고 실행한다. 이 일련의 과정을 ‘명령어 사이클’이라고 한다.

명령어 사이클의 단계


  1. 인출 사이클 (Fetch Cycle): 명령어를 주기억장치에서 인출한다.
  2. 해독 사이클 (Decode Cycle): 인출한 명령어를 해독한다.
  3. 실행 사이클 (Execute Cycle): 해독된 명령어를 실행한다.
  4. 간접 사이클 (Indirect Cycle): 간접 주소 지정 방식을 사용하는 경우 추가적인 주소 인출을 한다.
  5. 인터럽트 사이클 (Interrupt Cycle): 인터럽트가 발생하면 처리한다.

인출 사이클과 실행 사이클


  • 주기억장치의 지정된 주소에서 하나의 명령어를 가져오고, 실행 사이클에서 그 명령어를 실행한다. 하나의 명령어 실행이 완료되면 다음 명령어 인출 사이클이 시작된다.
  • 인출 사이클 (Fetch Cycle)
    1. T0: MAR ← PC
      • 프로그램 카운터(PC)의 값을 메모리 주소 레지스터(MAR)로 전달한다.
    2. T1: MBR ← M[MAR], PC ← PC + 1
      • MAR에 지정된 주소의 메모리 내용을 메모리 버퍼 레지스터(MBR)에 저장하고, 프로그램 카운터(PC)를 증가시킨다.
    3. T2: IR ← MBR
      • MBR에 저장된 명령어를 명령어 레지스터(IR)에 저장한다. - 여기까지가 명령어 인출 과정이다.
  • 실행 사이클 (Execute Cycle)
    • 예를 들어, ADD addr 명령어를 실행하는 과정은 다음과 같다:
      1. T0: MAR ← IR(addr)
        • 명령어 레지스터(IR)의 주소 부분을 메모리 주소 레지스터(MAR)로 전달한다.
      2. T1: MBR ← M[MAR]
        • MAR에 지정된 주소의 메모리 내용을 메모리 버퍼 레지스터(MBR)에 저장한다.
      3. T2: AC ← AC + MBR
        • 누산기(AC)에 MBR의 값을 더한다.
    • 이미 명령어가 인출된 후에는 명령어를 실행하기만 하면 되므로 PC를 증가시킬 필요가 없다. 이때 IR에는 이미 MBR의 값이 저장되어 있다. 따라서 AC에 MBR의 값을 더해주는 작업만 수행하면 된다.

요약


  • 명령어 세트는 CPU가 실행할 수 있는 명령어들의 집합으로, 각 명령어는 연산 코드와 피연산자로 구성된다.
  • CPU는 명령어 사이클을 통해 명령어를 인출, 해독, 실행한다.
  • 인출 사이클에서 PC 값을 증가시키며, 실행 사이클에서 필요한 연산을 수행한다. 이러한 과정을 통해 CPU는 프로그램을 실행한다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.