운영체제(OS)의 동작 흐름을 이해하기 위해서는 CPU와 메모리(Memory)의 구조를 먼저 알아둘 필요가 있습니다.
운영체제(OS)의 여러 기능은 결국 CPU와 메모리(Memory)를 어떻게 효율적으로 사용하고 관리할 것인가에 초점이 맞추어져 있습니다.
예를 들어 프로세스(Process) 실행, 스레드(Thread) 관리, 인터럽트(Interrupt) 처리, 문맥 교환(Context Switching), 시스템 호출(System Call)과 같은 개념들은 모두 CPU와 메모리(Memory)의 동작 방식과 밀접하게 연결됩니다.
따라서 운영체제(OS)의 기능이 왜 그렇게 설계되었는지 이해하려면, CPU와 메모리(Memory)의 구조를 먼저 이해하는 것이 중요합니다.
이번 글에서는 그중에서도 CPU의 구조와 동작 과정에 대해 먼저 정리해보겠습니다.

CPU는 크게 연산장치(ALU), 레지스터(Register), 버스(Bus), 제어장치(CU, Control Unit)로 구성되어 있습니다.
각 요소의 역할은 아래와 같습니다.
| 요소 | 기능 |
| 연산장치(ALU) | 산술 연산, 논리 연산 처리 |
| 레지스터(Register) | 특수 값, 프로세스 실행 과정 중에 발생하는 임시 값 저장 |
| 버스(Bus) | 데이터, 제어 신호, 명령어의 이동 경로 |
| 제어장치(CU) | 프로그램(Program) 코드 해석 및 실행을 위한 제어 신호 발행 |
정리하면, CPU는 제어장치(CU)가 명령어를 해석하고 실행 흐름을 제어하며, 버스(Bus)가 필요한 신호와 데이터를 각 구성요소 사이로 전달하고, 연산장치(ALU)가 실제 계산을 수행하며, 레지스터(Register)가 필요한 값을 임시로 저장하는 방식으로 동작합니다.
즉, CPU는 하나의 부품이 아니라 여러 구성요소가 협력하여 명령어를 처리하는 구조라고 볼 수 있습니다.
레지스터(Register)는 CPU 내부에서 가장 빠르게 접근할 수 있는 저장 공간입니다.
그중에서도 운영체제(OS)와 CPU 동작을 이해할 때 자주 등장하는 몇 가지 특수 레지스터(Register)가 있습니다.
| 레지스터(Register) | 설명 |
| PC(Program Counter) | 다음에 수행할 명령어에 대한 주기억장치(Memory) 주소 저장 |
| MAR(Memory Address Register) | 주기억장치(Memory) 접근을 위한 주기억장치(Memory) 주소 저장 |
| MBR(Memory Buffer Register) | I/O 자료 저장 |
| IR(Instruction Register) | 주기억장치(Memory)에서 인출한 명령어(Instruction) 저장 |
특히 PC(Program Counter)는 CPU가 다음에 어떤 명령어를 실행해야 하는지 가리키는 중요한 역할을 합니다.
또한 IR(Instruction Register)은 현재 실행할 명령어를 담고 있으며, MAR과 MBR은 메모리(Memory) 접근 과정에서 함께 사용됩니다.
운영체제(OS)를 공부하다 보면 인터럽트(Interrupt), 문맥 교환(Context Switching), 프로세스(Process) 전환 과정에서 이러한 레지스터(Register) 상태를 저장하고 복원하는 장면이 자주 등장하게 됩니다.

CPU는 프로그램(Program)의 명령어를 한 번에 하나씩 처리합니다.
이때 하나의 명령어가 시작되어 실행이 끝날 때까지 반복되는 과정을 명령어 주기(Instruction Cycle) 라고 합니다.
명령어 주기는 일반적으로 다음 단계로 이루어집니다.
1. 인출(Instruction Fetch)
메모리(Memory)에 저장된 명령어를 CPU가 가져오는 단계입니다.
보통 PC(Program Counter)가 가리키는 주소의 명령어를 읽어와 IR(Instruction Register)에 저장합니다.
2. 간접(Indirect)
명령어가 간접 주소 방식(Indirect Addressing Mode)을 사용하는 경우 추가로 수행되는 단계입니다.
간접 주소 방식이란, 명령어가 실제 데이터가 있는 위치를 직접 가리키는 것이 아니라, 데이터의 주소가 저장된 위치를 먼저 참조하는 방식입니다.
C 언어의 포인터(Pointer) 개념과 비슷하게 이해할 수 있습니다.
3. 실행(Execution)
CPU가 명령어를 해석하고 실제 연산이나 제어 동작을 수행하는 단계입니다.
이 과정에서 연산장치(ALU)가 산술 연산이나 논리 연산을 처리하고, 필요한 값은 레지스터(Register)를 통해 사용됩니다.
4. 인터럽트(Interrupt)
명령어 실행 도중 또는 실행 직후, 외부 장치나 예외 상황 등으로 인해 CPU가 현재 작업 흐름을 잠시 멈추고 다른 처리를 해야 하는 경우가 있습니다.
이러한 상황에서 인터럽트(Interrupt)가 발생하며, CPU는 이에 맞는 처리를 수행한 뒤 다시 원래 작업으로 복귀합니다.
즉, 명령어 주기는 단순히 명령어를 실행하는 과정만이 아니라, 필요에 따라 인터럽트(Interrupt)를 처리하며 계속 반복되는 구조라고 볼 수 있습니다.
인터럽트(Interrupt)는 CPU가 현재 수행 중인 작업과는 별개로, 즉시 처리해야 할 사건이 발생했음을 알리는 신호입니다.
운영체제(OS)를 공부할 때 인터럽트(Interrupt)가 중요한 이유는, CPU가 항상 하나의 작업만 수행하는 것이 아니라 다양한 예외 상황과 외부 요청에 반응해야 하기 때문입니다.
예를 들어 다음과 같은 상황에서 인터럽트가 발생할 수 있습니다.
인터럽트는 크게 하드웨어(Hardware) 인터럽트와 소프트웨어(Software) 인터럽트로 나누어 볼 수 있습니다.
운영체제(OS)는 이러한 인터럽트(Interrupt)를 바탕으로 외부 요청에 반응하고, 멀티태스킹 환경에서 CPU를 효율적으로 제어합니다.

문제 발생에 따른 인터럽트(Interrupt) 발생 시 처리 과정에 대해서도 알고 있으면 좋습니다.
앞으로 CPU의 기능을 공부하면서 인터럽트(Interrupt)는 계속해서 등장하기 때문입니다.
1. 인터럽트 요청(Interrupt Request)
하드웨어(Hardware) 또는 소프트웨어(Software)가 CPU에 인터럽트 신호를 전달합니다.
2. 인터럽트 검사 및 인식
CPU는 현재 실행 중인 명령어를 마친 뒤 인터럽트 발생 여부를 확인합니다.
즉시 중간 명령을 끊기보다는 보통 현재 명령어 단위까지는 마무리한 후 인터럽트를 인식합니다.
3. 인터럽트 마스크(Interrupt Mask) 확인 및 수락
CPU는 인터럽트 마스크 비트(Interrupt Mask Bit)를 확인하여 해당 인터럽트를 처리할 수 있는 상태인지 판단합니다.
처리가 가능한 경우 인터럽트를 수락합니다.
4. 현재 상태 저장
현재 실행 중이던 작업의 레지스터(Register) 상태, 프로그램 카운터(PC), 관련 정보 등을 저장합니다.
이 정보는 보통 스택(Stack)에 저장되며, 인터럽트 처리 후 원래 작업으로 복귀하기 위해 필요합니다.
5. 인터럽트 벡터(Interrupt Vector) 참조
CPU는 인터럽트 벡터 테이블(Interrupt Vector Table)을 참조하여, 해당 인터럽트에 대응하는 인터럽트 서비스 루틴(ISR)의 시작 주소를 찾습니다.
6. 인터럽트 서비스 루틴(ISR) 실행
해당 ISR이 실행되며, 인터럽트의 실제 처리가 이루어집니다.
예를 들어 입출력 완료 처리, 예외 처리, 타이머 처리 등이 이 단계에서 수행됩니다.
7. 상태 복구 및 복귀
ISR 실행이 끝나면, 스택(Stack)에 저장해 두었던 레지스터(Register) 상태와 실행 정보를 복원합니다.
이후 CPU는 인터럽트가 발생하기 전 시점으로 돌아가 원래 작업을 다시 이어서 수행합니다.

인터럽트(Interrupt)를 이해하고 나면 자연스럽게 문맥 교환(Context Switching)과도 연결됩니다.
운영체제(OS)는 여러 프로세스(Process)를 번갈아 실행하기 위해 현재 실행 중인 작업의 상태를 저장하고, 다음에 실행할 작업의 상태를 복원해야 합니다.
이처럼 현재 실행 중인 작업의 문맥(Context)을 저장하고, 다른 작업의 문맥으로 전환하는 과정을 문맥 교환(Context Switching)이라고 합니다.
이 과정에서 레지스터(Register) 상태, 프로그램 카운터(PC), 스택(Stack), 메모리 관련 정보 등이 함께 다뤄집니다.
즉, CPU 구조와 인터럽트 처리 과정은 문맥 교환(Context Switching)을 이해하는 데에도 매우 중요한 기초가 됩니다
운영체제(OS)의 동작 원리를 이해하기 위해서는 CPU가 어떤 구조로 이루어져 있고, 어떤 방식으로 명령어를 처리하는지 먼저 이해할 필요가 있습니다.
CPU는 제어장치(CU), 연산장치(ALU), 레지스터(Register), 버스(Bus)가 협력하여 명령어를 실행하며, 이 과정에서 명령어 주기(Instruction Cycle)와 인터럽트(Interrupt) 처리 절차가 반복적으로 이루어집니다.
또한 이러한 구조는 운영체제(OS)의 핵심 기능인 프로세스(Process) 관리, 스케줄링(Scheduling), 인터럽트 처리, 문맥 교환(Context Switching)을 이해하는 데 직접적으로 연결됩니다.
결국 CPU 구조와 동작 과정을 이해하는 것은 운영체제(OS)를 더 깊이 이해하기 위한 중요한 출발점이라고 할 수 있습니다.
| 캐시 메모리의 동작 과정 (0) | 2026.04.21 |
|---|---|
| 메모리의 구조와 동작 방식은 어떻게 될까? (0) | 2026.04.20 |
| 운영체제는 어떻게 프로그램을 실행할까? (0) | 2026.04.16 |
| 운영체제의 내부 구성 (0) | 2026.04.15 |
| 운영체제란 무엇인가? (1) | 2026.04.14 |