[OS] Thread & Process - 2
프로세스 & 스레드의 생명 주기
● 각각의 생명 주기를 가지고 있으며, 운영체제(OS)는 이러한 생명 주기를 관리하고, 프로세스와 스레드를
조정하여 시스템 자원을 효율적으로 사용
● 프로세스 스케줄링 (Process Scheduling)
- 운영체제에서 CPU를 사용할 수 있는 프로세스를 선택하고, CPU를 할당하는 작업
- 프로세스의 우선순위, 작업량 등을 고려하여 효율적으로 배치
→ 운영체제가 CPU를 효율적으로 사용하며 시스템 전반적인 성능을 향상
○ 스케줄링(Scheduling)
- 운영채제의 특징과 시스템 요구사항에 따라 알고리즘이 다름
- 알고리즘 종류 :
FCFS(First-Come, First-Served)
SJF(Shortest-Job-First)
Priority
RR(Round-Robin)
Multildevel Queue
● 프로세스 상태
- 프로세스가 실행되는 동안 변경되는 고유 상태
| 프로세스 상태 | 설명 |
| 생성 (new) | 프로세스가 생성되고 아직 준비가 되지 않은 상태 |
| 준비 (ready) | - 프로세스가 실행을 위해 기다리는 상태 - CPU를 할당받을 수 있는 상태이며, 언제든지 실행될 준비 되어 있음. |
| 실행 (running) | - 프로세스가 CPU를 할당받아 실행되는 상태 |
| 대기 (waiting) | - 프로세스가 특정 이벤트(입출력 요청 등)가 발생하여 대기하는 상태 - CPU를 할당받지 못하며, 이벤트가 발생하여 다시 ready 상태로 전환까지 대기 |
| 종료 (terminated) | - 프로세스가 실행을 완료하고 종료된 상태 - 더 이상 실행될 수 없으며, 메모리에서 제거 |
○ 프로세스 상태 전이
- 프로세스가 실행되는 동안 상태가 OS에 의해 변경되는 것
- 운영체제는 프로세스의 상태를 감시하고,
프로세스 상태를 기반으로 프로세스 스케줄링을 통해 프로세스 관리, 제어

1) Admitted (new → ready) : 프로세스 생성 승인받음
2) Dispatch (ready → running) : 준비 상태 여러 프로세스들 중 하나가 스케줄러 의해 실행
3) Interrupt (running → ready) : Timeout, 예기치 않은 이벤트 발생
→ 현재 실행 중인 프로세스 준비 상태로 전환, 해당 작업 먼저 처리
4) I/O or event wait (running → waiting) :
- 실행 중인 프로세스가 입출력이나 이벤트 처리해야 하는 경우,
입출력이나 이벤트가 끝날 때까지 대기 상태로 전환
5) I/O or event completion (waiting → ready) :
- 입출력이나 이벤트가 모두 끝난 프로세스를 다시 준비 상태로 전환
→ 스케줄러에 의해 선택될 수 있는 상태로 전환
프로세스 컨텍스트 스위칭
● Context Switching은 CPU가 한 프로세스에서 다른 프로세스로 전환할 때 발생하는 일련의 과정
● 프로세스 컨텍스트 스위칭 동작 원리
1) 동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태(context)를 보관
2) 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스 상태 복구
● 컨텍스트 스위칭을 하는 주체는 스케줄러
● PCB (Process Contorl Block)
- 프로세스 제어 블록, 운영체제에서 프로세스를 관리하기 위해
해당 프로세스의 상태 정보를 담고 있는 자료구조
- 왜 필요한가?
→ 컨텍스트 스위칭 할 때 기존 프로세스의 상태를 어딘가에 저장해둬야 다음에 똑같은 작업을
이어서 할 수 있는 것과 새로 해야 할 작업의 상태를 알아야 하기 때문에
- 즉, PCB는 임시 저장소
- 프로세스가 생성되면 메모리에 해당 프로세스의 PCB 함께 생성, 종료 시 삭제
● 프로세스 Context Switching 과정

스레드 스케줄링 & 스레드 컨텍스트 스위칭
● Thread Scheduling, 운영체제에서 다중 스레드를 관리하며, CPU를 사용할 수 있는 스레드를 선택하고
CPU를 할당하는 작업
- 스레드의 우선순위, 실행 시간, 입출력 요청 등의 정보들을 고려하여 CPU를 사용할 수 있는 스레드를 선택
- Process 스케줄링과 유사한 알고리즘으로 동작 RR, Proirity-based scheduling, Multi-level Queue 등...
- 프로세스 스케줄링과는 다르게, 하나의 프로세스 내에서 다수의 스레드가 동작.
→ 즉, 스레드 간의 상호작용과 동기화 문제를 고려해야 한다.
● 스레드 상태
- 프로세스와 마찬가지로 상태가 존재함
| 스레드 상태 | 설명 |
| NEW | - 스레드가 생성되고 아직 호출되지 않은 상태 |
| RUNNABLE | - 스레드가 실행되기 위해 기다리는 상태 (feat. 실행준비가 된) - CPU를 할당받을 수 있는 상태이며, 언제든지 실행될 준비 완료 |
| BLOCKED | - 스레드가 일정 이벤트(입출력 요청 등)가 발생하여 대기하는 상태 - CPU를 할당받지 못하며, 이벤트가 발생하여 다시 RUNNABLE 상태로 전환 될 때까지 대기 |
| TERMINATED | - 스레드가 실행을 완료하고 종료된 상태 - 더 이상 실행 되지 않으며, 메모리에서 제거 |
● Thread Context Switching
- 멀티 스레딩 환경에서 스레드 간의 실행을 전환하는 기술
- 하나의 프로세스 내의 스레드들을 교환한다.

● TCB (Thread Control Block)
- PCB와 비슷하며 각 스레드마다 운영 체제에서 유지하는 스레드에 대한 정보를 담고 있는 자료구조
- TCB는 PCB 안에서 실행된다.
- 스레드의 상태 정보, 스레드 ID, 스레드 우선순위, 스케줄링 정보 등 다양 정보 저장
- 스레드가 생성될 때 운영 체제에 의해 생성, 스레드가 실행을 마치면 소멸될 때 함께 소멸
- 스레드 간의 자원 공유와 동기화가 TCB를 사용하여 관리
- TCB에서 해당 스레드의 뮤텍스(Mutex)나 세마포어(Semaphore) 정보를 관리
- 스레드가 해당 자원에 대한 접근 권한을 획득하거나 반납할 때 TCB 정보를 업데이트
▷ 뮤텍스(MUTual EXclusion, Mutex) :
- 임계 구역에 1개의 스레드만 들어갈 수 있는 동기화 기법
▷ 세마포어(Semaphore) :
- 임계 구역에 여러 스레드 들어갈 수 있고, counter를 두어서 허용 가능한 스레드 제한하는 기법
Process Context Switching VS Thread Context Switching
● 두 기술 모두 멀티태스킹 환경에서 여러 프로세스, 스레드를 동시에 실행하기 위한 기술이다
● 차이점
○ TCB가 PCB보다 가볍다
- 프로세스 내의 스레드들은 text, data, heap 영역 메모리만 공유하기에
TCB에는 stack 및 register 포인터 정보만 저장하기 때문에 가볍고 더 빨리 읽고 쓰기 가능
○ 캐시 메모리 초기화 여부
- 프로세스 컨텍스트 스위칭의 경우
→ 다른 프로세스 실행으로 인해 CPU가 새로운 명령어와 데이터를 로드해야 하기 때문에
CPU 캐시 메모리를 초기화해야 함.
- 스레드 컨텍스트 스위칭의 경우
→ 프로세스 내 스레드 간에 stack과 register 값 등 일부 컨텍스트 정보만 변경되므로
CPU 캐시 메모리는 초기화되지 않음.
단, 스레드가 다른 CPU 코어에서 실행될 때는 해당 코어의 캐시 메모리에
컨텍스트 정보가 로드되어야 하므로 초기화될 수 있음.
○ 자원 동기화 문제
- 스레드 컨텍스트 스위칭이 발생하여 다른 스레드가 heap 영역 공유 데이터에 접근할 때
이전 스레드가 이미 공유 자원을 사용하고 있는 경우 동기화 문제 발생
- 두 개의 스레드가 동시에 하나의 변수를 수정하려고 할 때, 스레드 컨텍스트 스위칭 발생하면
변수의 값을 잘못된 값으로 업데이트할 수 있다.
= 스레드 간에 경쟁 조건 (race condition)
- 프로세스도 기본적으로는 독립된 공간이지만 IPC(프로세스 간 통신 Inter-Process Communication)
같은 공유 자원을 사용하는 경우 race condition 발생
# 다음 정리할 것
스레드 개념프로세스, 프로그램 차이
스레드의 자원 공유
프로세스, 스레드의 생명 주기
컨텍스트 스위칭
스레드 스케줄링
멀티 스레드