
[CS/OS] 프로세스(Process)와 스레드(Thread) 핵심 요약
1. 정의 및 개념
프로세스 (Process)
- 정의: 운영체제로부터 시스템 자원을 할당받아 실행 중인 프로그램(Program in execution).
- 특징: 각각 독립된 메모리 영역(Address Space)을 가진다. 기본적으로 다른 프로세스의 변수나 자료구조에 접근할 수 없다.
- 관리: 커널 내의 PCB(Process Control Block)에 프로세스 상태, PID, PC 등의 정보가 저장된다.
스레드 (Thread)
- 정의: 프로세스 내에서 실행되는 흐름의 단위(Light Weight Process).
- 특징: 프로세스가 할당받은 자원을 공유하며, 하나의 프로세스 내에 여러 개의 스레드가 존재할 수 있다.
- 관리: 커널 내의 TCB(Thread Control Block)에 스레드 별 레지스터, PC 등의 정보가 저장된다.
2. 메모리 구조의 차이 (핵심)
가장 중요한 차이는 자원 공유 여부이다.
프로세스의 메모리 (독립적)
각 프로세스는 다음 4가지 영역을 독립적으로 할당받는다.
- Code: 실행할 프로그램의 코드.
- Data: 전역 변수, 정적 변수.
- Heap: 동적 할당 영역 (malloc/new).
- Stack: 지역 변수, 매개 변수, 리턴 주소.
스레드의 메모리 (공유 vs 독립)
스레드는 프로세스 내에서 다음 규칙을 따른다.
- 공유 영역: Code, Data, Heap. (모든 스레드가 접근 가능)
- 독립 영역: Stack, PC(Program Counter), Register.
Why? Stack과 PC는 왜 독립적인가?
- Stack: 독립적인 함수 호출과 실행 흐름을 가지기 위해선 독립된 스택이 필수적이다.
- PC/Register: 스레드 간 문맥 교환(Context Switching) 시, 현재 어디까지 실행했는지를 개별적으로 기억해야 하기 때문이다.
3. 컨텍스트 스위칭 (Context Switching) 오버헤드
CPU가 실행 대상을 변경할 때 발생하는 비용의 차이이다.
프로세스 컨텍스트 스위칭 (비용 큼)
- CPU 캐시 메모리를 비워야 한다.
- TLB(Translation Lookaside Buffer) 초기화가 발생한다. 가상 주소를 물리 주소로 변환하는 캐시가 날아가므로, 스위칭 직후 메모리 접근 성능이 떨어진다.
스레드 컨텍스트 스위칭 (비용 작음)
- 같은 프로세스 내의 스레드끼리 전환될 때는 메모리 주소 공간(Code, Data, Heap)이 동일하다.
- 따라서 TLB를 비울 필요가 없고, 메모리 캐시 적중률(Cache Hit Ratio)이 유지된다.
- Stack과 Register 값만 교체하면 되므로 훨씬 빠르다.
4. 멀티 프로세스 vs 멀티 스레드 비교
| 구분 | 멀티 프로세스 (Multi-Process) | 멀티 스레드 (Multi-Thread) |
|---|---|---|
| 자원 효율성 | 낮음 (메모리 중복 사용) | 높음 (자원 공유) |
| 통신 비용 | 높음 (IPC 필요) | 낮음 (메모리 직접 접근) |
| 안정성 | 높음 (하나가 죽어도 독립적) | 낮음 (하나가 죽으면 전체 종료) |
| 구현 난이도 | 복잡함 (IPC, 분산 처리) | 까다로움 (동기화 문제) |
5. 동기화 (Synchronization) 이슈
멀티 스레드 환경에서 필수적으로 이해해야 할 기술적 문제이다.
경쟁 상태 (Race Condition)
여러 스레드가 공유 자원(Heap, Data 영역)에 동시에 접근하여 쓰기 작업을 할 때, 실행 순서에 따라 결과가 달라지는 현상.
해결 방법
상호 배제(Mutual Exclusion)를 달성하기 위한 기법을 사용한다.
- Mutex (뮤텍스): 공유 자원에 대한 Lock/Unlock 메커니즘. (Key를 가진 1개 스레드만 접근)
- Semaphore (세마포어): 공유 자원에 접근할 수 있는 스레드의 최대 허용 개수를 제어(Signaling).
주의점: 교착 상태 (Deadlock)
두 개 이상의 스레드가 서로가 가진 자원을 기다리며 무한 대기 상태에 빠지는 것.
6. IPC (Inter-Process Communication)
프로세스는 메모리가 독립적이므로 통신을 위해 별도의 매커니즘이 필요하다.
- 종류: 파이프(Pipe), 소켓(Socket), 메시지 큐(Message Queue), 공유 메모리(Shared Memory).
- 특징: 커널 영역을 거쳐야 하므로 스레드 간 통신보다 오버헤드가 크다.
'공부 > CS공부' 카테고리의 다른 글
| 운영체제 - 분산 운영체제 정리 (방송통신대학교 운영체제) (0) | 2022.06.11 |
|---|---|
| 운영체제 - 가상메모리 정리 (방송통신대학교 운영체제) (0) | 2022.06.11 |
| 운영체제 - 메모리관리 정리 (방송통신대학교 운영체제) (0) | 2022.06.11 |
| 운영체제 - 교착상태 정리 (방송통신대학교 운영체제) (0) | 2022.05.28 |