토픽 90 / 97·비교표
프로세스 관리
프로세스 vs 스레드
| 항목 | 프로세스 | 스레드 |
|---|---|---|
| 주소공간 | 독립 | 프로세스 내 공유 (코드/데이터/힙) |
| 생성 비용 | 무거움 | 가벼움 (10~100배 빠름) |
| 통신 | IPC 필요 (파이프, 소켓 등) | 공유 메모리로 직접 통신 |
| 안정성 | 크래시 격리 (다른 프로세스 무사) | 한 스레드 크래시→전체 프로세스 종료 |
| 컨텍스트 스위칭 | 무거움 (메모리 맵 변경, TLB 플러시) | 가벼움 (공유 메모리) |
PCB vs TCB
| 항목 | PCB (Process Control Block) | TCB (Thread Control Block) |
|---|---|---|
| 단위 | 프로세스 | 스레드 |
| 크기 | 무거움 | 가벼움 |
| 주소공간 | 독립 주소공간 정보 포함 | 공유 주소공간 (프로세스 PCB 참조) |
| 포함 정보 | PID, 메모리 맵, 파일 테이블 | 스레드 ID, PC, 레지스터, 스택 |
좀비 프로세스 vs 고아 프로세스
| 항목 | 좀비 프로세스 | 고아 프로세스 |
|---|---|---|
| 상태 | 종료됨, PCB 잔존 | 실행 중, 부모 없음 |
| 원인 | 부모가 wait() 미호출 | 부모가 먼저 종료 |
| 처리 | 부모 wait() 또는 부모 종료 | init(PID 1)이 입양 |
| 위험성 | PID 고갈 가능 | 낮음 (정상 동작 계속) |
멀티스레딩 vs 멀티프로세싱
| 항목 | 멀티스레딩 | 멀티프로세싱 |
|---|---|---|
| 메모리 | 공유 | 독립 |
| 동기화 | 필요 (뮤텍스, 세마포어) | 불필요 (독립 주소공간) |
| 안전성 | 낮음 (레이스 컨디션, 데드락) | 높음 (프로세스 격리) |
| 오버헤드 | 낮음 | 높음 |
| 적합 | 공유 데이터 많은 작업 | 격리 필요한 작업 |
사용자 수준 스레드 vs 커널 수준 스레드
| 항목 | 사용자 수준 (M:1) | 커널 수준 (1:1) | 하이브리드 (M:N) |
|---|---|---|---|
| 관리 | 사용자 공간 라이브러리 | 커널이 관리 | 혼합 |
| 속도 | 빠름 (모드 전환 없음) | 느림 (시스템 호출) | 중간 |
| 병렬성 | 불가 (커널 인식 못함) | 진짜 병렬 | 유연 |
| 사례 | Green Thread | Linux, Windows | Go goroutine |
5상태 모델 vs 7상태 모델
| 항목 | 5상태 모델 | 7상태 모델 |
|---|---|---|
| 상태 | New/Ready/Running/Waiting/Terminated | + Suspended Ready/Suspended Blocked |
| 스와핑 | 미고려 | 포함 (중기 스케줄러) |
| 복잡도 | 단순 | 실제 OS에 근접 |
cgroups vs namespaces
| 항목 | cgroups | namespaces |
|---|---|---|
| 역할 | 자원 제한 (얼마나 사용) | 환경 격리 (무엇을 볼 수 있는지) |
| 대상 | CPU, 메모리, I/O, 네트워크 | PID, MNT, NET, UTS, IPC, USER |
| 제어 | 사용량 제한/계측 | 독립된 시스템 뷰 제공 |
| 컨테이너 역할 | 자원 할당 | 환경 격리 |