[Computer Architecture] 중앙처리장치(CPU) 작동 원리

jiny·2026년 2월 4일

Computer Science

목록 보기
2/16

1. 중앙처리장치(CPU)의 핵심 구성 요소

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

(1) CPU의 주요 구성 장치

  • 연산장치 (산술논리연산장치)
    • 산술연산(덧셈, 뺄셈 등)논리연산(AND, OR 등)을 수행한다.
    • 연산에 필요한 데이터를 레지스터에서 가져오고, 연산 결과를 다시 레지스터로 보낸다.
  • 제어장치
    • 명령어를 순서대로 실행할 수 있도록 제어하는 장치
    • 주기억장치에서 프로그램 명령어를 꺼내 해독하고, 그 결과에 따라 명령어 실행에 필요한 제어 신호를 기억장치, 연산장치, 입출력장치로 보낸다.
    • 이들 장치가 보낸 신호를 받아, 다음에 수행할 동작을 결정한다.
  • 레지스터 (고속 기억장치)
    • 명령어 주소, 코드, 연산에 필요한 데이터, 연산 결과 등을 임시로 저장하는 고속 기억장치
    • 용도에 따라 범용 레지스터특수목적 레지스터로 구분된다.
      • 범용 레지스터: 연산에 필요한 데이터나 연산 결과를 임시로 저장한다.
      • 특수목적 레지스터: 특별한 용도로 사용하는 레지스터
    • 중앙처리장치 종류에 따라 사용할 수 있는 레지스터의 개수와 크기가 다르다.

(2) 주요 특수목적 레지스터의 역할

  • PC (Program Counter, 프로그램 카운터)
    • 역할: 다음에 실행할 명령어의 주소를 기억하는 레지스터이다.
    • 특별한 이유: CPU는 명령어를 하나 실행하면 바로 다음엔 뭘 해야 할지 알아야 하는데, PC가 그 이정표 역할을 한다. 명령어를 하나 가져오면 PC 값은 자동으로 증가해서 다음 단계를 준비한다.
  • IR (Instruction Register, 명령어 레지스터)
    • 역할: 현재 실행 중인 명령어 자체를 담고 있다.
    • 특별한 이유: 메모리에서 가져온 명령어가 실제로 실행되기 위해 머무르는 곳이다. 제어 장치는 이 IR 안에 들어 있는 명령어를 보고 "아, 이번엔 더하기를 해야 하는구나!"라고 해독하게 된다.
  • MAR (Memory Address Register, 메모리 주소 레지스터)
    • 역할: 데이터를 읽거나 쓸 메모리의 주소를 임시로 저장한다.
    • 특별한 이유: CPU가 메모리에 접근하려면 "몇 번지 데이터를 가져와!"라고 주소를 찍어줘야 하는데, 그 주소 값을 들고 있는 문지기 역할을 한다.
  • MBR (Memory Buffer Register, 메모리 버퍼 레지스터)
    • 역할: 메모리에서 읽어온 실제 데이터나 메모리에 저장할 데이터를 잠시 붙잡아두는 곳이다.
    • 특별한 이유: MAR이 '주소(어디)'를 가리킨다면, MBR은 그 주소에 있는 '내용물(무엇)'을 직접 주고받는 바구니 역할을 한다.
  • AC (Accumulator, 누산기)
    • 역할: 연산 결과를 임시로 저장한다.
    • 특별한 이유: 예를 들어 1+2를 계산하면 그 결과인 3을 잠시 보관했다가, 나중에 다른 연산에 다시 쓰거나 메모리로 보낼 때 사용한다.
레지스터핵심 키워드비유
PC다음 명령어 주소다음 페이지를 가리키는 책갈피
IR현재 실행 명령어지금 읽고 있는 문장
MAR메모리 주소택배를 보낼 집 주소
MBR메모리 데이터택배 상자 안의 물건
AC연산 결과 저장계산기의 결과창

2. CPU를 포함한 컴퓨터 시스템의 동작 과정

  1. 주기억장치 준비: 주기억장치는 입력장치에서 입력받은 데이터 또는 보조기억장치에 저장된 프로그램을 읽어온다.

  2. CPU의 처리: CPU는 프로그램을 실행하기 위해 주기억장치에 저장된 프로그램 명령어와 데이터를 읽어와 처리하고, 그 결과를 다시 주기억장치에 저장한다.

  3. 결과 처리: 주기억장치는 처리 결과를 보조기억장치에 저장하거나 출력장치로 보낸다.

  4. 제어: 제어장치는 위 과정에서 명령어가 순서대로 실행되도록 각 장치를 제어한다.

    🌟 컴퓨터 시스템 동작 과정 이해하기

    컴퓨터 시스템의 동작 과정을 '요리하는 주방'에 비유해서 이해해 보자.

    👉️ 컴퓨터 시스템: "최고급 레스토랑 주방"

    1. 각 부분의 역할 매칭
      • CPU (요리사): 모든 연산과 제어를 담당하는 핵심 주인공
        • 레지스터 (조리대/손): 요리사가 지금 당장 손에 들고 있거나 조리대 위에 올려둔 아주 좁지만 가장 빠른 공간
        • 연산 장치 (가스레인지): 실제로 재료를 볶고 지지는(연산) 곳
        • 제어 장치 (주방장): 레시피를 읽고 "지금은 불을 켜!", "지금은 재료를 가져와!"라고 지시한다.
      • 주기억장치/RAM (작업대): 요리하기 위해 냉장고에서 꺼내온 재료들을 펼쳐 놓는 넓은 공간
      • 보조기억장치/SSD·HDD (냉장고): 수많은 재료(데이터)와 레시피(프로그램)를 오랫동안 보관하는 큰 창고
      • 입력장치 (주문서): 손님이 주문한 내용
      • 출력장치 (완성된 요리): 손님 식탁에 나가는 음식
    2. 전체 동작 흐름 (주방의 업무 루틴)
      컴퓨터가 일을 시작하면 다음과 같은 순서로 움직인다.
      1. 준비 단계: 냉장고(보조기억장치)에 있던 레시피와 재료를 작업대(RAM)로 꺼내온다.
      2. 인출 단계: 요리가(CPU)가 작업대(RAM)에서 레시피 한 줄을 읽어 조리대(레지스터)로 가져온다.
      3. 실행 단계: 주방장(제어 장치)의 지시에 따라 가스레인지(연산 장치)에서 요리를 한다.
      4. 저장 단계: 완성된 요리나 중간 결과물을 다시 작업대(RAM)에 놓거나, 나중을 위해 냉장고(보조기억장치)에 넣는다.

    🌟 SSD에서 CPU로 가기 전 RAM을 거치는 이유

    1. 가장 큰 이유: 압도적인 속도 차이 때문이다.
      요리사(CPU)는 1초에 수십억 번의 칼질을 할 수 있을 정도로 엄청나게 빠르다. 반면, 냉장고(SSD/HDD)는 문을 열고 재료를 찾는 데 시간이 꽤 걸린다.

      • 만약 RAM이 없다면? 요리사가 양파 한 조각 썰 때마다 저 멀리 있는 냉장고까지 걸어갔다 와야 한다. 요리사는 0.1초만에 칼질을 끝내는데, 재료 가져오는 데만 10분이 걸리는 셈이다.
      • 결과: 요리사는 하루 종일 멍하니 재료를 기다리는 시간(Idle Time)이 더 많아지게 되고, 컴퓨터는 엄청나게 느려진다. 이 현상을 병목 현상(Bottleneck)이라고 부른다.
    2. 기억장치 계층 구조의 효율성 때문이다.
      모든 데이터를 CPU 옆에 두면 좋겠지만, 기술적·경제적 한계가 있다.

      구분레지스터 (손)RAM (작업대)SSD/HDD (냉장고)
      속도가장 빠름빠름느림
      용량아주 작음적당함매우 큼
      가격매우 비쌈비쌈저렴함
      휘발성전원 꺼지면 사라짐전원 꺼지면 사라짐영구 저장

      비유: 조리대(레지스터)를 운동장만큼 크게 만들면 요리사가 움직이기 힘들고 비용이 어마어마하게 들 것이다. 그래서 '자주 쓰는 것만 작업대(RAM)에 꺼내놓고 쓰자'는 전략을 취하는 것이다.

    3. CPU의 집중력을 유지하기 위해서이다.
      CPU는 한 번에 하나의 일에 집중할 때 최고의 성능을 낸다.

    • RAM의 역할: 보조기억장치에서 실행할 프로그램과 데이터를 미리 RAM으로 옮겨두는 과정을 '로딩(Loading)'이라고 한다.
    • 일단 로딩이 끝나면, CPU는 느린 SSD 신경 안 쓰고 빠른 RAM하고만 대화하며 미친 듯이 일을 처리할 수 있게 된다.

3. 명령어 세트와 명령어 사이클

(1) 명령어 세트의 구성

  • 명령어 세트: CPU가 실행할 명령어의 집합
  • 구성 요소: 명령어는 연산 코드(Operation Code)피연산자(Operand)로 이루어진다.
    • 연산 코드: 실행할 연산을 지정하며, 연산, 제어, 데이터 전달, 입출력 기능을 가진다.
    • 피연산자: 연산에 필요한 데이터 또는 저장 위치를 의미하며, 주소, 숫자/문자, 논리 데이터 등을 저장한다.

(2) 명령어 사이클의 정의 및 종류

  • 명령어 실행 반복 과정: CPU는 프로그램 실행을 위해 주기억장치에서 명령어를 순차적으로 인출하여 해독하고 실행하는 과정을 반복한다.

  • 명령어 사이클: CPU가 주기억장치에서 한 번에 하나의 명령어를 인출하여 실행하는 데 필요한 일련의 활동

  • 사이클 종류: 명령어 사이클은 인출 사이클, 실행 사이클, 간접 사이클, 인터럽트 사이클로 나누어진다.

    🌟 명령어 사이클 종류

    CPU가 하나의 명령어를 처리하는 전체 과정을 명령어 사이클(Instruction Cycle)이라고 한다. 이 사이클은 크게 4가지 단계로 나뉜다.

    1. 인출 사이클 (Fetch Cycle)
      • 역할: 주기억장치(메모리)에 있는 명령어를 CPU로 가져오는 단계
      • 핵심 동작
        1) PC에 저장된 주소를 MAR로 전달한다.
        2) 메모리의 해당 주소에서 명령어를 꺼내 MBR에 담는다.
        3) PC 값을 증가시켜 다음 명령어를 준비한다.
        4) MBR의 명령어를 IR(명령어 레지스터)로 옮긴다.
    2. 실행 사이클 (Execute Cycle)
      • 역할: 가져온 명령어를 해독(Decode)하고 실제로 수행하는 단계
      • 핵심 동작: 제어 장치가 IR에 있는 명령어를 분석하여 필요한 제어 신호를 보낸다. 예를 들어 ADD 명령이라면 연산 장치(ALU)를 통해 값을 더하고 결과를 AC(누산기)에 저장한다.
    3. 간접 사이클 (Indirect Cycle)
      • 역할: 명령어가 '간접 주소 지정 방식'일 때, 실제 데이터가 있는 주소를 한 번 더 찾아가는 단계이다.
      • 필요성: 명령어에 적힌 주소에 데이터가 바로 있는 게 아니라, "진짜 주소는 저기 있어"라고 또 다른 주소가 적혀 있는 경우에 필요하다.
      • 흐름: 인출 사이클과 실행 사이클 사이에 위치하며, 메모리에 한 번 더 접근하여 유효 주소를 가져온다.
    4. 인터럽트 사이클 (Interrupt Cycle)
      • 역할: 프로그램 실행 중에 예기치 않은 상황(입출력 요청, 오류 등)이 발생했을 때, 이를 처리하기 위해 잠시 멈추는 단계
      • 핵심 동작
        1) 실행 사이클이 끝나면 인터럽트 요청이 있는지 확인한다.
        2) 요청이 있다면 현재 하던 일(PC 값 등)을 안전한 곳에 저장한다.
        3) 인터럽트 서비스 루틴(ISR)으로 점프하여 긴급한 일을 처리한 후, 다시 원래 자리로 돌아온다.

    🌟 명령어 사이클 흐름도

  • 인출 및 실행

    • 인출 사이클에서는 주기억장치의 지정된 주소에서 하나의 명령어를 가져온다.
    • 실행 사이클에서는 해당 명령어를 실행한다.
    • 하나의 명령어 실행이 완료되면 그 다음 명령어에 대한 인출 사이클이 시작된다.

4. 인출 사이클과 실행 사이클에 의한 명령어 처리 과정

(1) 인출 사이클

인출 사이클에서 가장 중요한 부분은 PC(프로그램 카운터) 값 증가이다.

  1. 주소 전달(PC ➡️ MAR)
    • 다음에 실행할 명령어의 주소를 가진 PC(프로그램 카운터)가 그 주소를 MAR(메모리 주소 레지스터)로 보낸다.
    • "이 주소에 있는 명령어를 가져와!"라고 지정하는 단계이다.
  2. 메모리 읽기 (Memory ➡️ MBR)
    • MAR에 적힌 주소를 토대로 주기억장치에서 해당 명령어를 찾아낸다.
    • 인출된 명령어는 일단 MBR(메모리 버퍼 레지스터)에 임시로 저장된다.
  3. 다음 준비 (PC 증가)
    • 명령어를 하나 가져왔으니, CPU는 미리 다음 명령어를 가져올 준비를 한다.
    • PC의 값을 증가시켜 다음 명령어의 주소를 가리키게 만든다.
  4. 명령어 이동 (MBR ➡️ IR)
    • MBR에 담긴 명령어 데이터를 실제 실행을 위해 IR(명령어 레지스터)로 옮긴다.
  5. 인출 완료
    • 이제 IR에 명령어가 들어왔으므로, 제어 장치가 이를 해독하고 실행할 준비가 끝난 상태가 된다.

🌟 PC 값을 미리 증가시킨다?

  1. PC를 미리 증가시키는 이유

    • 인출 사이클 도중에 PC 값을 증가시키는 것은 "이번 거 가져왔으니, 다음엔 여기를 봐야 해"라고 미리 포스트잇(주소)만 붙여두는 과정이다.
    • 만약 실행 중에 인터럽트가 발생하거나 다른 곳으로 점프해야 한다면, 이 증가된 PC 값을 기준으로 돌아올 위치를 결정하기 때문에 미리 바꿔두는 것이 효율적이다.
  2. 기본 모델: "하나씩 순서대로"

    • 명령어 사이클은 기본적으로 하나의 명령어 실행이 완료되면 그 다음 명령어에 대한 인출 사이클이 시작된다.
    • 즉, 인출 → (PC 증가) → 실행 → (완료) → 다음 인출 순서로 진행된다.
    • PC 값은 이미 증가해 있으니, 다음 인출 사이클이 시작될 때 CPU는 고민 없이 그 주소로 바로 달려갈 수 있는 것이다.
  3. 추가 개념: 파이프라이닝(Pipelining)

    • 현대의 고성능 CPU는 현재 명령어를 실행하는 동안 다음 명령어를 미리 인출하기도 한다. 이를 파이프라이닝 기법이라고 한다.

    • 기본 명령어 사이클: 요리사가 재료를 다 썰고(인출), 볶기(실행)를 완전히 끝낸 다음에야 다음 재료를 썬다.

      시간인출 단계실행 단계
      T1명령어 1 인출 (PC 증가)-
      T2-명령어 1 실행
      T3명령어 2 인출 (PC 증가)-
    • 파이프라이닝 (현대 CPU): 요리사가 재료를 볶는(실행) 동안, 보조 요리사가 다음 재료를 미리 썬다(인출).

      시간인출 단계실행 단계
      T1명령어 1 인출-
      T2명령어 2 인출명령어 1 실행
      T3명령어 3 인출명령어 2 실행

(2) 실행 사이클 - ADD addr 명령어 예시

인출이 이미 진행되었으므로, 명령어를 실행하는 과정에서는 PC를 증가할 필요가 없다.

  1. 상태 확인: IR에 MBR의 값이 이미 저장된 상태이다.
  2. 연산 수행: ADD addr 명령어 연산은 주기억장치 주소(addr)에 있는 데이터를 가져와 누산기(AC)에 더하는 연산이다.
  3. 최종 처리: 따라서 AC(누산기)에 MBR(주기억장치에서 가져온 데이터)을 더해주기만 해면 명령어가 실행된다.

0개의 댓글