[OS] Lecture 4. Thread management - kibitzing/EnGrow GitHub Wiki
진구
- 프로세스에 비해 가볍고
- 싱글에 비해 효율적
멀티 프로세스 vs 멀티 스레드
- 자원을 공유했을 때 효율적인가?
- 게임같은 경우는 공유를 해야만 되겠다..
사용자 레벨 스레드와 커널 레벨 스레드
멀티 커널 레벨 스레드와 멀티 프로세스와 차이는 무엇일까요?
세영
스레드
- 프로세스: 리소스를 제어하는 것
- 리소스 영역:
- 코드, 전역 데이터, 힙, …
- 제어 영역 (스레드, 여러 개가 생길 수 있음):
- 제어 정보 (PC, Stack Pointer, …)
- 지역 데이터, 스택, …
- 하나의 리소스 영역을 공유
- 프로세스의 스레드는 동일한 메모리 공간을 공유
- [코드 - 데이터 - 힙 → … ← … - 스레드 3 스택 - 스레드 2 스택 - 스레드 1 스택]
- CPU 활용의 기본 단위
- Thread ID, Register Set (PC, SP), Stack(local data) 등으로 구성됨
- 장점
- 사용자 응답성 (스레드 하나가 지연되어도 다른 스레드는 작업 처리)
- 자원 공유, 경제성 (동일한 프로세스에서 자원을 공유하므로 Context Switching 없이 사용 가능)
- 멀티 프로세서 활용 (병렬 처리)
스레드 구현
사용자 수준 스레드 (n:1 mapping)
- 스레드 라이브러리 (POSIX, Win32, Java thread API등) 활용
- 커널은 스레드가 몇 개인지 모름 (라이브러리가 관리해주기 때문)
- 유연한 관리, 생성 및 관리 부하 적음, 이식성 높음
- 단점: 하나의 스레드가 block상태가 되면 모든 스레드가 대기
커널 수준 스레드 (1:1 mapping)
- 커널이 직접 관리하는 스레드
- 스레드들의 병렬 수행 가능
- 단점: 오버헤드가 큼 (Thread context switching이 존재)
혼합형 스레드 (n:m mapping)
- n개의 사용자 수준 - m개의 커널 스레드 (n > m)
- 중간에 경량 프로세스를 두어 여러 개의 스레드를 관리
- 사용자는 원하는 수만큼 스레드 사용
- 커널 스레드는 자기한테 할당된 사용자 스레드가 block 상태가 되어도 다른 스레드 수행 가능
진성