컴퓨터 구조 및 운영체제

CPU의 구조와 원리

sekong 2023. 11. 20. 17:01

중앙처리장치 (CPU)

CPU는 컴퓨터의 두뇌와 같다.

메모리에 저장된 명령어를 읽어 들이고, 읽어 들인 명령어를 해석하고, 실행하는 부품이다. 이는 컴퓨터에서 가장 중요한 부품으로 연산과 제어 회로가 포함되어 있다.

아래 사진과 같이 다양한 입력 장치로부터 입력 받아 처리한다.

그리고 그 결과를 출력 장치로 보내는 일련의 과정을 제어하고 조정하는 일을 수행한다.

 

CPU의 구성요소

CPU는 전에 컴퓨터의 구성에서도 이야기 한 것 처럼

  • 제어 장치
  • 연산 장치
  • 레지스터

이렇게 3가지와 각 구성 요소를 연결하는 내부 버스로 이루어진다.

CPU의 구성요소

 

CPU

  • 제어 장치 (CU, Control Unit)
    • 제어 신호라는 전기 신호를 내보내고 명령어를 해석하는 장치이다.
    • 컴퓨터 시스템의 작동을 통제한다.
    • CPU가 메모리에 저장된 값을 읽고 싶을 땐 메모리에 “메모리 읽기” 제어 신호를 보낸다.
    • CPU가 메모리에 값을 저장하고 싶을 땐 메모리에 “메모리 쓰기” 제어 신호를 보낸다.
    • 즉, 기억 장치로부터 프로그랭 명령을 순차적으로 꺼내 해독하고, 해석에 따라서 명령어 실행에 필요한 제어 신호를 기억장치, 연산장치, 입출력 장치 등으로 보내는 장치이다.

 

  • 연산 장치 (ALU, Arithmetic and Logical Unit)
    • 계산기이다. 즉, 명령어를 실행하기 위한 마이크로 연산을 수행하는 장치이다.
    • 연산에 필요한 자료를 입력 받아 산술, 논리, 관계, 이동(Shift) 등 다양한 연산을 수행하는 장치이다.
    • 가산기, 보수기, 누산기, 데이터 레지스터 등으로 구성된다.

 

  • 레지스터(Register)
    • CPU 내부의 작은 임시 저장 장치로 중앙 처리 장치 내에 있는 소규모의 고속 기억장치이다.
    • 명령어 주소, 명령어 코드, 연산에 필요한 데이터, 연산 결과 등을 임시로 저장한다.
    • 레지스터는 메모리 계층의 최상위에 위치하며 가장 빠른 속도로 접근 가능한 메모리이다.
    • 용도에 따라 범용 레지스터와 특수 목적 레지스터로 구분된다.
      • 범용레지스터: 연산에 필요한 데이터나 연산 결과를 임시로 저장한다.
      • 특수 목적 레지스터: 특별한 용도로 사용하는 레지스터로 용도와 기능에 따라 구분된다.

특수 목적 레지스터 중에서도 중요한 것들

  • MAR(메모리 주소 레지스터) : 읽기와 쓰기 연산을 수행할 주기억장치 주소 저장
  • PC(프로그램 카운터) : 다음에 수행할 명령어 주소 저장
  • IR(명령어 레지스터) : 현재 실행 중인 명령어 저장
  • MBR(메모리 버퍼 레지스터) : 주기억장치에서 읽어온 데이터 or 저장할 데이터 임시 저장
  • AC(누산기) : 연산 결과 임시 저장

제어 장치, 연산 장치, 레지스터들은 서로 영향을 주며 할 일을 하는데

 

[컴퓨터 구조] CPU, 메모리, 보조기억장치, 입출력장치를 알아보자

컴퓨터의 핵심 부품은 CPU, 메모리, 보조기억장치, 입출력장치입니다. 이 네 가지 부품의 역할만 이해하고 있어도 컴퓨터의 작동 원리를 대부분 파악할 수 있습니다. 주기억장치에는 크게 RAM과 RO

hongong.hanbit.co.kr

위 링크의 예시가 아주 잘 나와있다.

 

CPU의 연산

1. Fetch(인출) : 메모리상의 프로그램 카운터가 가리키는 명령어를 CPU로 인출하여 적재

2. Decode(해석) : 명령어의 해석. 이 단계에서 명령어의 종류와 타겟 등을 판단한다.

3. Execute(실행) : 해석된 명령어에 따라 데이터에 대한 연산을 수행한다.

4. Writeback(쓰기) : 명령어대로 처리 완료된 데이터를 메모리에 기록한다.

 

CPU 동작과정

  1. 주기억 장치는 입력장치에서 입력받은 데이터 또는 보조기억장치에 저장된 프로그램을 읽어온다.
  2. CPU는 프로그램을 실행하기 위해 주기억장치에서 저장된 프로그램 명령어와 데이터를 읽어와 처리하고 결과를 다시 주기억장치에 저장한다.
  3. 주기억장치는 처리결과를 보조기억 장치에 저장하거나 출력장치로 보낸다.
  4. 제어장치는 1~3과정에서 명령어가 순서대로 실행되도록 각 장치를 제어한다.

 

CPU의 명령어

명령어 종류

명령어 형식

명령어는 CPU가 한번에 처리할 수 있는 비트 수의 크기(word)로 정의된다.

명령어를 구성하는 비트는 용도에 따라 몇 개의 필드(field)로 나누어진다.

기본적으로 Op-Code 필드, Operand필드로 구성된다.

Operand 필드는 컴퓨터의 처리 능력에 따라 여러 개의 Operand 필드로 구성한다.

연산 코드 (Operation Code) : 실행할 연산을 나타낸다.

피연산자 (Operand) : 연산에 필요한 데이터나 데이터의 저장 위치를 나타낸다.

 

연산 코드 (Operation Code)

  • 연산 기능 : 사칙연산, 이동(shift), 보수 등의 산술연산과 논리곱, 논리합, 부정 등의 논리연산을 수행한다.
  • 제어 기능 : 조건 분기와 무조건 분기 등을 사용하여 명령어의 실행 순서를 제어한다.
  • 데이터 전달 기능 : 레지스터와 레지스터 사이, 레지스터와 주기억장치 사이에서 데이터를 전달한다.
  • 입출력 기능 : 프로그램과 데이터를 주기억장치에 전달하고, 연산 결과는 출력장치에 전달한다.

 

피연산자 (Operand)

피연산자에는 주소, 숫자, 문자, 논리 데이터 등을 저장할 수 있다.

  • 주소 : 기억장치 혹은 레지스터의 주소가 저장된다.
  • 숫자/문자 : 숫자는 정수, 고정 소수점 수, 부동 소수점 수 및 각각의 코드로 저장되고 문자는 아스키코드로 저장된다.
  • 논리 데이터 : 참 또는 거짓을 표현할 때 사용하며 비트나 플래그로 저장된다.

명령어 사이클(Instruction Cycle)

CPU는 프로그램 명령어를 클럭에 따라 일정한 주기를 반복하여 실행하는데, 이 주기를 명령어 사이클**(Instruction Cycle)** 이라고 한다.

클럭(CLOCK)이란 CPU의 속도를 나타내는 단위이다.

클럭은 1초 동안 파장이 한 번 움직이는 시간을 의미하는데, 이 시간 동안 처리하는 데이터 양에 따라 CPU의 속도가 달라지게된다.

명령어 사이 클의 종류에는 4가지가 있다.

  1. 인출 사이클
  2. 실행 사이클
  3. 간접 사이클
  4. 인터럽트 사이클

⇒ 인출과 실행 사이클은 항상 수행된다. 하지만 간접과 인터럽트 사이클은 주소 지정 방식이 필요할 때나 인터럽트 요구가 있을 때만 수행된다.

 

인출 사이클

t0 : MAR <- PC 
t1 : MBR <- M[MAR], PC <- PC + 1
t2 : IR <- MBR

t0: 프로그램 카운터(PC)에 저장된 명령어 주소를 CPU 내부 버스를 통해 메모리 주소 레지스터(MAR)로 보낸다.

t1: MAR가 지정하는 기억장치 주소로부터 명령어를 읽어 데이터 버스를 통해 (MBR)메모리 버퍼 레지스터에 저장한다. 이와 동시에 PC(프로그램 카운터)가 1 증가한다.

t2: MBR에 저장된 명령어를 IR(명령어 레지스터)에 저장한다.

 

실행 사이클

실행 사이클 동안에

CPU가 명령어 코드를 해독(decode)하고 그 결과에 따라 필요한 연산들을 수행한다.

CPU가 수행하는 연산에는 데이터 이동데이터 처리데이터 저장프로그램 제어 가 있다.

명령어는 Op-Code와 Operand로 이루어진다.

1. 데이터 이동: Load addr ⇒ 기억 장치에 있는 데이터를 CPU 내부 누산기(AC)에 저장하는 명령어

t0 : MAR <- IR(addr)
t1 : MBR <- M[MAR]
t2 : AC <- MBR

 

2. 데이터 저장: STA addr ⇒ 누산기(AC)에 저장된 데이터를 기억 장치에 저장하는 명령어

t0 : MAR <- IR(addr)
t1 : MBR <- AC
t2 : M[MAR] <- MBR

 

3. 데이터 처리: ADD addr ⇒ 기억 장치에 저장된 데이터를 누산기(AC)에 저장된 값에 더하여 그 결과를 다시 누산기에 저장하는 명령어

t0 : MAR <- IR(addr)
t1 : MBR <- M[MAR]
t2 : AC <- AC + MBR

 

4. 프로그램 제어: JUMP addr ⇒ 오퍼랜드가 가리키는 주소의 명령어로 실행 순서를 변경하는 분기(branch) 명령어로 레지스터(IR)에 저장된 오퍼랜드를 PC에 저장하여 명령어 순서를 변경한다.

t0 : PC <- IR(addr)
💡 실행 사이클에서는 프로그램 카운터를 증가시키지 않는 이유

인출 사이클과는 달리 실행 사이클에서는 프로그램 카운터(PC)를 증가시키지 않는다.
이는 인출이 진행되어 명령어 실행만 하면 되는 상황이기 때문에 프로그램 카운터를 증가시킬 필요가 없기 때문.
즉, 이미 인출이 되어 명령어 레지스터(IR)에 메모리 버퍼 레지스터(MBR)의 값이 저장된 상태라는 의미이다.

 

면접 예상 질문

CPU란?

CPU의 구성요소는?

CPU의 명령어 세트는 어떻게 구성되어 있는가?

실행 사이클에서 프로그램 카운터를 증가시키지 않는 이유는?

 

참고 URL

'컴퓨터 구조 및 운영체제' 카테고리의 다른 글

컨텍스트 스위칭  (1) 2024.01.21
프로세스 동기화  (0) 2023.12.24
프로세스와 스레드  (1) 2023.12.18
컴퓨터의 구성  (0) 2023.11.17