Contents
1. 배경
2. 주요 개념
3. 실행 방식의 발전
1. 배경
컴퓨터에서 프로그램을 실행할 때 CPU와 I/O 속도 차이로 인해 병목 현상이 발생한다.
- CPU는 빠름
- I/O(DB, 파일, 네트워크)는 느림
단일 프로그램만 실행한다면:
- I/O동안 CPU는 아무것도 하지 못함
- 전체 성능이 낮아짐
따라서 CPU 사용률을 높이기 위해 여러 작업을 동시에 처리하려는 방식이 등장한다.
2. 주요 개념
2.1 용어
프로그램:
- 실행 가능한 파일
- 단순한 명령어의 집합
프로세스:
- 실행 중인 프로그램
- OS가 자원을 할당한 단위
- 독립된 메모리 공간(Heap, Stack, Code 등)을 가진다.
- 다른 프로세스와 메모리 공유가 불가능하다.
스레드:
- CPU에서 실행되는 최소 단위
- 하나의 프로세스 내부에서 동작한다.
- 같은 프로세스의 메모리를 공유한다.
CPU:
- 명령어를 해석하고 실행하는 장치
- 연산과 제어를 담당한다.
- 프로세스·스레드를 실제로 실행한다.
레지스터:
- CPU 내부에 존재하는 저장 공간
- 연산에 필요한 값과 실행 상태를 임시로 저장한다.
- PC(Program Counter) 등 실행 제어 정보도 포함한다.
메인 메모리:
- 실행 중인 프로그램과 데이터를 저장하는 공간
- 프로세스의 코드, 데이터, 스택, 힙이 올라간다.
IO:
- 외부 장치와 데이터를 주고받는 작업
- 디스크, 네트워크, 키보드 등과의 입출력을 포함한다.
2.2 메모리 구조

같은 프로세스의 스레드는
Code,Data,Heap영역을 공유하고,Stack은 각각 독립적으로 가진다.
스레드 간 공유:
- Code: 실행 코드(읽기 전용)
- Data: 전역 변수, static 변수
- Heap: 동적 할당 영역
스레드별 독립:
- Stack: 함수 호출 정보(스레드별 독립)
2.3 CPU / 실행 정보
PC와 레지스터는 메모리 영역이 아니라 CPU 내부에 존재한다.
PC(Register):
- 다음에 실행할 명령어 주소를 담고 있는 레지스터(스레드별)
Register:
- 연산에 사용되는 값 저장(스레드별)
2.4 PCB(Process Control Block)

운영체제가 관리하는 프로세스의 실행 상태를 저장하는 구조체
- 각 프로세스는 고유한 PCB를 하나씩 가지며, 운영체제는 이를 통해 프로세스의 상태를 추적하고 제어한다.
- PC, 레지스터 값, 스케줄링 정보 등을 포함
- Context Switch 시 CPU 상태를 저장/복원하는 역할
- 스케줄러는 PCB를 기준으로 실행 대상을 결정한다.
2.5 컨텍스트 스위칭

커널이 CPU의 실행 중인 작업을 중단하고, 다른 프로세스(또는 스레드)로 전환하는 과정
동작 과정:
- 현재 실행 중인 프로세스의 상태를 저장한다.(Context Save)
- PC(Program Counter), Register 값 등 CPU 상태를 PCB에 저장한다.
- 다음에 실행할 프로세스를 선택한다.(스케줄러)
- 선택된 프로세스의 상태를 복원한다.(Context Restore)
- PCB에 저장된 PC, Register 값을 CPU에 로드
특징:
- 커널 모드에서 수행된다.
- CPU의 레지스터 상태를 교체한다.
- 전환 과정 동안 CPU는 실제 작업을 수행하지 못한다.
- 너무 자주 발생하면 성능 저하가 발생한다.
- 캐시 오염 발생
프로세스 컨텍스트 스위칭:
- 가상(virtual) 메모리 주소 관련 처리를 추가로 수행
- MMU → 페이지 테이블(주소 공간) 변경
- TLB → 비움
- 무거움(메모리 공간 변경)
스레드 컨텍스트 스위칭:
- 메모리 주소 관련 처리를 하지 않음
- 가벼움(같은 메모리 공유)
3. 실행 방식의 발전
3.1 단일 프로세스
한번에 하나의 프로그램만 실행
- I/O 동안 CPU idle
- 자원 활용 비효율
3.2 멀티프로그래밍
여러 프로세스를 메모리에 올려두고 실행
- 한 프로세스에서 I/O → 다른 프로세스 실행
- CPU 사용률 올라감
- 특정 프로세스가 CPU를 오랫동안 점유할 위험이 있음
3.3 멀티태스킹
CPU를 짧은 시간 단위로 나눠 실행
- 각 프로세스·스레드는 quantum(타임 슬라이스) 만큼 실행
- 번갈아 실행 → 동시에 실행되는 것처럼 보임(동시성)
- 응답 시간 최소화(사용자 경험 개선)
3.4 멀티스레딩
하나의 프로세스에서 여러 작업 수행
- 스레드 간 메모리 공유
- 같은 프로세스 내에서는 주소 공간을 공유하기 때문에, 프로세스 전환보다 컨텍스트 스위칭 비용이 낮다.
- 컨텍스트 스위칭 비용↓
- 빠른 실행 + 쉬운 데이터 공유
- 동기화 문제 발생
- mutex, semaphore 필요
3.5 멀티프로세싱
CPU 코어를 여러 개 사용하는 방식
- 실제 병렬 처리 가능
- 성능 극대화(병렬성)