3주차
Shared on April 16, 2026
프로세스와 스레드 개념 및 관리
개요
- 운영체제에서 프로세스는 실행 중인 프로그램이며, CPU와 메모리, I/O 자원을 사용한다.
- 프로세스는 메모리 세그먼트(코드, 데이터, 힙, 스택)로 구성되고, 프로세스 제어 블럭(PCB) 에서 상태와 컨텍스트를 관리한다.
- 프로세스의 생명주기는 생성 → 준비 → 실행 → 대기 → 종료이며, 스케줄러와 컨텍스트 스위치가 이를 조정한다.
fork()같은 시스템 호출로 프로세스가 복제될 때 부모‑자식 관계가 형성된다.- 프로세스 내부에 스레드가 존재하면, 스레드는 공통 주소공간을 공유하지만 스택만 별도이며, 스레드 단위의 컨텍스트 스위치가 빠르다.
핵심 개념
| 용어 | 의미 |
|---|---|
| 프로세스 | 실행 중인 프로그램, CPU 할당 필요 |
| PCB | 프로세스 식별자, 상태, PC, 레지스터, 우선순위 등 저장 |
| 메모리 세그먼트 | 텍스트(코드), 데이터(전역, 정적), 힙(동적 할당), 스택(함수 호출) |
| 스케줄러 | 프로세스 상태 변화를 관리, 작업 스케줄러(프로세스 생성), 프로세스 스케줄러(CPU 할당) |
| 컨텍스트 스위치 | 현재 프로세스의 PCB에 상태 저장 후 다른 프로세스의 PCB에서 로드 |
| fork() | 현재 프로세스를 복제해 자식 프로세스 생성, 부모는 자식 PID 반환, 자식은 0 반환 |
| 스레드 | 프로세스 내부 실행 단위, 공통 주소공간, 별도 스택, TCB(스레드 제어 블럭) |
| 스레드와 프로세스 차이 | 프로세스는 자원 단위, 스레드는 실행 단위; 스레드 간 컨텍스트 스위치가 가볍다 |
상세 내용
1. 프로세스 정의와 메모리 구조
- 프로세스는 디스크에 있는 실행 파일이 메모리에 올라와 실행되는 주체.
- 메모리 영역 분할:
- 텍스트 영역: 실행 파일의 명령어 코드 저장.
- 데이터 영역: 전역·정적 변수 저장.
- 힙:
malloc같은 동적 할당 영역; 실행 중에 크기 변동. - 스택: 함수 호출 시 지역 변수·매개변수·리턴 주소 저장.
- 각 영역은 OS가 별도 관리하며, 코드·데이터는 공유 가능하지만 힙·스택은 프로세스마다 독립.
2. 프로세스 제어 블럭(PCB)
- PCB에는 다음 정보가 포함:
- PID(프로세스 식별자), PPID(부모 PID)
- 프로세스 상태(생성, 준비, 실행, 대기, 종료)
- 프로그램 카운터(PC), 레지스터 값(CPU 컨텍스트)
- 우선순위, 우선순위 큐 포인터
- 스케줄링 정보(큐 위치, 타이머 값)
- 컨텍스트 스위치 시 현재 프로세스의 PCB에 상태 저장 후, 새 프로세스 PCB에서 레지스터 로드.
3. 프로세스 상태 전이
- 생성 → 준비: 프로세스 생성 후 CPU 할당 대기.
- 준비 → 실행: 스케줄러가 선택 → CPU 할당 → 실행 상태.
- 실행 → 대기: I/O 요청 시 CPU 반환, 대기 큐에 이동.
- 대기 → 준비: I/O 완료 시 다시 준비 큐 삽입.
- 실행 → 종료: 프로그램 종료 시 PCB 해제.
핵심: 프로세스는 항상 하나의 상태에만 존재하며, 스케줄러와 타이머가 상태 변화를 조정한다.
4. 스케줄링
- 작업 스케줄러: 디스크에 저장된 프로그램을 선택해 프로세스로 변환하고 준비 큐에 넣음. 빈번한 실행으로 메모리 프로세스 수를 결정.
- 프로세스 스케줄러: 준비 큐에서 프로세스를 선택해 CPU 할당(디스패치). 우선순위, 라운드 로빈 등 다양.
- 타이머 인터럽트: 실행 중 프로세스가 할당된 CPU 시간을 초과하면 타임아웃 → 준비 큐 재삽입.
- I/O 인터럽트: I/O 완료 시 프로세스 대기 → 준비 상태 전환.
5. fork()와 부모‑자식 관계
fork()호출 시:- 부모 프로세스와 동일한 주소공간, PCB(가장 부분) 복제.
- PID는 새로운 값, PPID는 부모 PID.
- 부모는 자식 PID 반환, 자식은 0 반환.
- 자식 프로세스는 독립적으로 실행되며, 필요 시
exec()로 다른 프로그램으로 교체 가능.
6. 스레드 개념
- 스레드는 프로세스 내부의 실행 단위; 프로세스와 동일한 코드·데이터·힙을 공유하지만 스택은 별도.
- **TCB(스레드 제어 블럭)**에 스레드 ID, 레지스터, 스택 포인터 등 저장.
- 스레드 간 컨텍스트 스위치가 가볍고, 멀티스레딩으로 I/O 대기 중에도 다른 스레드가 CPU를 사용할 수 있어 응답성 향상.
- 운영체제는 스레드 단위로 스케줄링하고, 필요 시 스레드 컨텍스트 스위치 또는 프로세스 컨텍스트 스위치를 수행.
7. 응용 예시
- 크롬 브라우저: 디스크에서 실행 파일 로드 → 프로세스 생성 →
fork()로 탭마다 스레드 생성 → 각 스레드가 이미지 로딩, 입력 처리 등 병렬 수행. - I/O 중심 프로그램: 대기 상태에서 CPU를 반환해 다른 프로세스·스레드가 실행, 이벤트 발생 시 wake‑up.
정리
- 프로세스는 OS 자원을 관리하며, PCB와 상태 전이를 통해 스케줄링된다.
fork()를 통해 부모와 자식이 생성되고, 각 프로세스는 독립적인 힙·스택을 갖는다.- 스레드는 프로세스 내부에서 실행 단위를 분할해 성능을 높이며, 스레드 전환은 프로세스 전환보다 비용이 적다.
- 효율적인 운영체제는 스케줄링, 컨텍스트 스위치 및 자원 회수를 최적화하여 시스템 성능을 극대화한다.