
해당 내용은 이것이 컴퓨터 과학이다 with CS 기술면접을 학습한 기록입니다.
목차
1. CPU와 레지스터의 역할
2. 인터럽트가 발생하는 이유와 동작 과정
3. CPU 성능 개선
CPU는 데이터를 읽고 명령어를 해석·실행하는 장치로, 컴퓨터 전체 동작을 조율하는 핵심 요소다.
사람에 비유하면 ‘두뇌’와 같은 역할을 한다.
CPU 내부에는 다양한 구성 요소가 존재하며, 각각이 맡은 책임을 이해하면
프로그램이 실제로 어떻게 실행되는지 한층 명확하게 파악할 수 있다.
CPU의 기본적인 역할과 컴퓨터 내부 동작 흐름은 이전 글에서 설명한 바 있다.
1. 컴퓨터 구조의 이해 기초 (1)
해당 내용은 이것이 컴퓨터 과학이다 with CS 기술면접을 학습한 기록입니다. 목차1. 컴퓨터는 어떻게 개발자가 작성한 소스 코드를 이해하는가?2. 컴퓨터를 구성하는 핵심 부품 1. 컴퓨터는 어떻
jignonne.tistory.com
그동안 간단하게만 언급했던 다음 세 가지를 중심으로 살펴보려 한다.
- CPU 레지스터의 역할
- 인터럽트가 발생하는 이유와 동작 과정
- CPU 성능을 좌우하는 요소들
이번 글에서는 CPU 내부 레지스터들이 어떤 역할을 수행하는지,
그리고 이 레지스터들이 왜 중요한지를 좀 더 깊게 살펴보려 한다.
1. CPU와 레지스터
레지스터는 CPU 내부에 위치한 작은 임시 장치이며, 각기 다른 이름과 역할로 다양한 레지스터가 있다.
프로그램을 이루는 데이터와 명령어가 프로그램의 실행 전, 후 레지스터에 저장된다.
CPU를 구성하는 레지스터들의 종류와 이름은 조금씩 다르지만,
대부분 CPU가 공통적으로 포함하고 있는 대표적인 주요 레지스터들은 다음과 같다.
프로그램 카운터(PC, Program Counter)
프로그램 카운터는 메모리에서 다음에 실행할 명령어의 주소를 저장하는 레지스터다.
명령어 흐름을 결정하는 역할을 하므로 Instruction Pointer라고도 부른다.
즉, CPU가 어느 명령어를 실행하고 있으며, 다음에는 어떤 명령어를 실행해야 하는지 알려주는 명령어 흐름의 기준점이다.
1. 프로그램 카운터의 기본 동작
일반적으로, 프로그램 카운터는 1씩 증가하는데, 다음으로 읽을 메모리 주소가 1씩 증가하는것과 같다.
아래 도식처럼 PC 값이 10 → 11 → 12로 진행되면, 메모리의 연속된 명령어가 순차적으로 실행된다.
┌──────────┐
│ CPU │
│ │
│ PC: 10 │ ──> 메모리[10] 읽기
└──────────┘
┌────────────────────────┐
│ 메모리 │
│────────────────────────│
│ 10번지 : 명령어 A │
│ 11번지 : 명령어 B │
│ 12번지 : 명령어 C │
│ ... │
└────────────────────────┘
┌──────────┐
│ CPU │
│ │
│ PC: 11 │ ──> 메모리[11] 읽기
└──────────┘
┌──────────┐
│ CPU │
│ │
│ PC: 12 │ ──> 메모리[12] 읽기
└──────────┘
2. 분기/조건문 실행 흐름
조건문, 반복문, 함수 호출/리턴이 발생하면 프로그램 흐름이 순차적이지 않다.
이때 CPU는 PC 값을 원하는 주소로 직접 변경하여 해당 위치의 명령어를 읽고, 이를 브랜치(Branch)라고 한다.
┌──────────┐
│ CPU │
│ │
│ PC: 10 │ ──> 메모리[10] 읽기
└──────────┘
(조건문 또는 리턴문 실행)
┌──────────┐
│ CPU │
│ │
│ PC: 200 │ ──> 메모리[200] 읽기 ← 점프(Branch)
└──────────┘
명령어 레지스터 (IR, Instruction Resigter)
명령어 레지스터(IR)은 CPU가 방금 메모리에서 가져온 명령어를 저장하는 레지스터다.
프로그램 카운터가 “다음에 읽을 주소”를 저장한다면,
명령어 레지스터는 “지금 해석하고 실행할 명령어” 를 보관하는 역할을 맡는다.
1. 명령어 레지스터의 역할
CPU는 다음과 같은 순서로 명령어를 처리한다.
- 프로그램 카운터(PC) 가 가리키는 주소에서 명령어를 읽어온다.
- 읽어온 명령어를 명령어 레지스터(IR) 에 저장한다.
- 제어장치(Control Unit) 가 IR에 저장된 명령어를 해석한다.
- 명령어 종류에 따라
- ALU 에 연산을 시키거나
- 레지스터·메모리·I/O 장치에 제어 신호를 보내 동작을 수행한다.
즉, 명령어 레지스터는 명령어 해석 과정을 시작하는 출발점이다.
2. 명령어 레지스터가 중요한 이유
CPU는 한 번에 여러 명령어를 읽어두지 않는다.
항상 “지금 실행해야 할 명령어” 하나만 명령어 레지스터에 저장하여 처리한다.
이 구조 덕분에 CPU는
- 명령어 수행을 단계별로 제어할 수 있고
- 파이프라이닝(pipelining) 같은 CPU 성능 향상 기법도 구현할 수 있다.
범용 레지스터(general purpose register)
범용 레지스터는 데이터, 주소, 중간 계산 결과 등 데이터와 명령어 주소 모두를 자유롭게 저장할 수 있는 레지스터다.
특정 목적이 정해져 있는 PC나 IR과 달리, 프로그램 실행 과정에서 필요한 값을 임시로 저장하는 데 사용된다.
1. 어떤 값을 저장할까?
범용 레지스터에는 다음과 같은 값들이 들어간다.
- 연산에 필요한 데이터 값
- 메모리 접근 시 필요한 주소 값
- ALU 연산의 중간 계산 결과
- 함수 호출 시 전달되는 매개변수나 임시 값
이처럼 특정 역할이 고정되지 않아 다양한 용도로 재사용된다.
2. 여러 개가 필요한 이유
CPU 내부에는 보통 여러 개의 범용 레지스터가 존재한다.
그 이유는 연산 과정에서 많은 장점을 제공하기 때문이다.
- 메모리에 접근하지 않아도 되어 전체 연산 속도가 빨라지고
- 동시에 여러 값을 저장할 수 있어 복잡한 연산을 효율적으로 처리할 수 있으며
- 컴파일러가 레지스터 기반 최적화를 적용할 수 있어 실행 성능이 향상된다.
플래그 레지스터(flag register)
플래그 레지스터는 연산 결과나 CPU의 현재 상태를 나타내는 플래그 비트들을 저장하는 레지스터이다.
CPU가 명령어를 처리할 때 반드시 확인해야 하는 상태 정보(플래그)가 담겨 있기 때문에, 제어 흐름과 연산 판단의 기준으로 활용된다.
1. 플래그(flag)란 무엇인가?
플래그는 연산 결과나 시스템 상태를 표현하는 1비트 단위의 상태 값이다.
CPU는 ALU 연산을 수행한 뒤 플래그 비트를 설정하거나 해제하며, 이후 조건 분기(Branch)나 오류 처리 시 이 값을 참조한다.
예를 들어,
- 연산 결과가 0이면 “제로 플래그 = 1”
- 덧셈에서 자리올림이 발생하면 “캐리 플래그 = 1”
- 음수인지 여부도 플래그를 통해 판단한다.
이처럼 플래그 레지스터는 CPU의 상태 정보를 즉시 파악하기 위한 핵심 장치다.
2. 플래그 레지스터 주요 구성 요소
| 종류 | 설명 | 사용 예시 |
| 부호 플래그 (Sign Flag) | 연산 결과가 음수면 1로 설정 | 결과가 음수인지 판단할 때, 조건 분기 |
| 제로 플래그 (Zero Flag) | 연산 결과가 0이면 1 | “값이 0인지” 확인하는 조건문, 반복문 종료 조건 |
| 캐리 플래그 (Carry Flag) | 덧셈 자리올림/뺄셈 자리빌림 발생 시 1 | 부호 없는 정수 연산, 큰 수 연산, 다중 정밀도 연산 |
| 오버플로우 플래그 (Overflow Flag) | 연산 결과가 표현 가능한 범위를 벗어나면 1 | 부호 있는 정수 연산에서 오류 감지, 예외 처리 |
| 인터럽트 플래그 (Interrupt Flag) | 인터럽트 허용 여부를 결정 (1: 허용 / 0: 금지) | 인터럽트 제어, 커널 및 드라이버 동작 |
| 슈퍼바이저 플래그 (Supervisor Flag) | CPU가 현재 커널 모드인지 사용자 모드인지 표시 | 메모리 접근 권한 제어, 특권 명령 실행 여부 결정 |
3. 플래그 레지스터가 중요한 이유
플래그 레지스터는 CPU가 다음 명령어의 흐름을 결정할 때 중요한 근거가 된다.
- 결과가 0이면 분기
- 음수면 다른 경로로 이동
- 오버플로우가 발생하면 예외 처리
- 인터럽트 플래그가 0이면 인터럽트 무시
- 슈퍼바이저 플래그로 권한 제어
이처럼 제어 흐름, 예외 처리, 연산 판단, 시스템 상태 관리를 모두 플래그 레지스터가 담당한다.
스택 포인터(Stack Poiner)
메모리에는 실행 중인 프로그램들이 적재되며, 각 프로그램은 자신의 스택(Stack) 영역을 포함한 주소 공간을 하나 이상 가진다.
스택은 함수 호출, 지역 변수 저장, 리턴 주소 관리처럼 프로그램 실행 과정에 필수적인 데이터를 저장하는 구조이며,
마지막에 저장된 값을 먼저 꺼내는(LIFO) 방식으로 동작한다.
1. 스택 포인터의 기본 동작
예를 들어 스택 포인터가 스택 데이터 3이 저장된 주소를 가리킨다고 하자.
이 상태에서 데이터를 꺼내면(pop) 가장 위에 있는 데이터 3이 제거되고,
스택 포인터는 자동으로 그 아래의 데이터 2가 있는 주소를 가리키게 된다.
┌─────────────── CPU ──────────────┐
│ │
│ ┌──────────────────────┐ │
│ │ 스택 포인터 │────┼───────────────┐
│ └──────────────────────┘ │ │
└──────────────────────────────────┘ ▼
┌──────────────────────────────┐
│ 메모리 │
│──────────────────────────────│
│ │
│ (위쪽 : 주소가 큰 영역) │
│ │
│──────────────────────────────│
│ 스택 데이터 3 │ ← 스택 포인터(SP)
│──────────────────────────────│
│ 스택 데이터 2 │
│──────────────────────────────│
│ 스택 데이터 1 │
│──────────────────────────────│
│ 스택 영역(Stack) │
│──────────────────────────────│
│ (아래쪽 : 주소가 작은 영역) │
└──────────────────────────────┘
2. 스택 포인터가 중요한 이유
스택 포인터는 다음 두 가지 의미를 동시에 갖는다.
- 스택에서 마지막으로 저장된 데이터의 위치를 가리킨다.
- 현재 스택이 얼마나 채워져 있는지를 나타낸다.
즉, 스택 포인터는 함수 호출·복귀, 지역 변수 관리, 인터럽트 처리와 같이
프로그램 흐름을 유지하기 위해 필수적으로 사용되는 레지스터다
'cs study > 컴퓨터 구조' 카테고리의 다른 글
| 1. 컴퓨터 구조 : 메모리 (2) 캐시 메모리 (0) | 2026.01.21 |
|---|---|
| 1. 컴퓨터 구조 : 메모리 (1) RAM (0) | 2026.01.20 |
| 1. 컴퓨터 구조 : CPU (3) (0) | 2026.01.09 |
| 1. 컴퓨터 구조 : CPU (2) (0) | 2025.11.25 |
| 1. 컴퓨터 구조의 이해 기초 (0) | 2025.11.20 |