프로세스와 쓰레드 개념 정리 – 운영체제 핵심 지식
백엔드 개발자라면 한 번쯤 면접에서 “프로세스와 쓰레드의 차이” 질문을 받아본 경험이 있을 것입니다.
이 글에서는 프로세스와 쓰레드의 개념부터 메모리 구조, 운영체제 관점의 관리 방식까지 정리했습니다.
프로세스(Process)란?
프로세스의 정의
- 프로세스: 실행 중인 프로그램 (동작하는 능동적 개체)
- 프로그램: 실행되지 않는 정적, 수동적 개체
- PID(Process ID): 프로세스를 구분하기 위해 할당된 고유
운영체제로부터 자원 할당
운영체제는 프로세스가 동작할 수 있도록 필요한 자원을 할당합니다.
- 자원: CPU, 메모리, 입출력 장치, 파일 등
- 동작: CPU가 프로세스 명령어를 실행
운영체제가 하는 작업
- 프로세스 생성 및 종료 관리
- 프로세스 실행을 위한 스케줄링
- 프로세스 상태 관리 (대기, 실행 등)
프로세스의 구성
메모리 구조
프로그램 실행에 필요한 코드와 데이터로 구성됩니다.
구분 설명
| 코드 영역 | 프로그램 자체 (명령어 코드) |
| 데이터 영역 | 상수, 변수 값 등 (정적 데이터 영역 / 스택 영역 / 힙 영역) |
프로세스 제어 블록(PCB)
운영체제가 각 프로세스를 관리하기 위해 유지하는 정보입니다.
프로세스가 번갈아 실행될 때 PCB의 정보가 활용됩니다.
항목 설명
| 프로세스 번호 (PID) | 고유 식별자 |
| 프로세스 상태 | 실행, 대기, 준비 상태 등 |
| 프로그램 카운터(PC) | 다음 실행할 명령어의 메모리 위치 |
| 레지스터 | CPU 자원을 잠시 넘길 때 필요한 정보 저장 |
| 메모리 관리 정보 | 메모리 사용에 대한 정보 |
| 프로세스 우선순위 | 스케줄링 시 우선순위 결정 |
| 회계 정보 | 사용한 CPU 시간, 실행 시간 등 관리 |
프로세스 상태
- 생성: 시스템에 작업이 등록된 상태
- 준비: 실행 준비 완료, CPU 할당 대기
- 실행: 프로세스가 CPU에서 처리 중
- 대기: I/O 작업 등으로 대기 상태
- 종료: 실행 종료
프로세스 상태 변화
생성 → 준비 ↔ 실행 → 대기 → 준비 → 실행 → 종료
- 생성된 프로세스는 준비 큐에 들어감
- 준비 상태에서 디스패치(Dispatch)를 통해 실행 상태로 전환
- 실행 도중 I/O 요청 등으로 대기 상태 진입
- 대기 상태에서 이벤트 완료 후 다시 준비 상태로 이동
- 더 이상 실행할 작업이 없거나 종료 신호를 받으면 종료
프로세스 생성 방법
- 사용자가 프로그램을 직접 실행
- 한 프로세스가 다른 프로세스를 생성
- 프로세스 생성 시스템 호출 이용
주요 시스템 호출
OS시스템 호출설명
| UNIX, Linux | fork() | 부모 프로세스 복제본 생성 |
| UNIX, Linux | exec() | 새로운 프로그램으로 자식 프로세스 실행 |
| Windows | CreateProcess() | 새로운 프로그램으로 자식 프로세스 생성 |
부모 프로세스와 자식 프로세스
| PID = 10 | PID = 25 |
| 데이터 영역 공유 여부 없음 | 데이터 영역 공유 여부 없음 |
| 메모리 구조 독립 | 메모리 구조 독립 |
| 독립적인 PCB | 독립적인 PCB |
프로세스 종료 방법
- 모든 작업 완료 시 정상 종료
- 부모 프로세스가 자식 프로세스를 강제 종료
- 종료 시스템 호출 이용
- 자식 PID를 사용해 종료 명령
- 부모 프로세스 종료 시 운영체제가 자식 프로세스도 종료
쓰레드(Thread)란?
전통적인 프로세스
- 하나의 프로그램 실행 단위
- 자원 소유의 단위 (메모리 독립)
- 하나의 제어 흐름
- 프로세스 내 다중 처리 불가능
쓰레드의 등장
- 프로세스 내 다중 처리를 위해 제안된 개념
- 디스패칭(실행)의 단위
- 자원 소유의 단위는 프로세스가 유지
- 하나의 프로세스 내 여러 쓰레드 존재 가능
쓰레드 특징
- 실행에 필요한 최소 정보만 유지
- 프로그램 카운터(PC)
- 레지스터 값
- 스택 영역
- 코드, 데이터, 힙 영역은 같은 프로세스 내 다른 쓰레드와 공유
전통적인 프로세스 vs 쓰레드 기반 프로세스
항목전통적인 프로세스쓰레드 기반 프로세스
| 자원 공유 | 없음 (각 프로세스 메모리 독립) | 동일 프로세스 내 자원 공유 |
| 실행 흐름 | 하나 | 여러 실행 흐름 |
| 컨텍스트 스위칭 비용 | 높음 | 낮음 |
| 병렬 처리 | 불가능 | 가능 (멀티코어, 멀티 CPU 환경) |
다중 쓰레드 프로세스
- 멀티코어 시스템에서 병렬 처리 가능
- 쓰레드 구성을 잘 하면 효율적
- 계산용 쓰레드
- 입력용 쓰레드
- 백업용 쓰레드 등
결론
- 프로세스: 자원 소유 및 실행의 단위
- 쓰레드: 프로세스 내 실행 흐름의 단위
- 실무 중요도: 멀티코어 환경, 서버 최적화, 병목 제거 등에서 핵심 개념
'CS > 운영체제' 카테고리의 다른 글
| Monitor(모니터) 개념과 자바 예제 (0) | 2025.09.03 |
|---|---|
| 스핀락(spinlock) 뮤텍스(mutex) 세마포(semaphore) 각각 특징과 차이 (0) | 2025.09.02 |
| 스레드 풀(Thread Pool)의 개념과 사용방법 (1) | 2025.08.31 |
| 스레드 (Thread)의 종류 (1) | 2025.08.30 |