[OS] Thread Management
Contents
Thread에 대한 개념 정리
스레드(Thread)
- Light weight process
- 프로세서 활용의 기본 단위
- 프로세스는 자원을 할당받고 이를 제어하는 과정인데 이 때, 제어를 여러개의 스레드로 할 수 있다
- 제어 요소 외 code, data 및 자원들은 프로세스 내 다른 스레드들과 공유
- 구성요소
- Thread ID
- Register set (stack pointer, program pointer)
- 등
스레드의 장점
- 사용자 응답성
- 일부 스레드의 처리가 지연되어도 다른 스레드는 작업을 계속 처리 가능
- 자원 공유
- 자원을 공유하기 때문에 효율성이 증가
- 예를 들어, 게임(프로세스)을 할 때 모니터(화면출력), 마우스(사용자입력), 헤드셋 와 관련해서 멀티스레드로 게임 관련 자원을 공유하면서 3가지 작업을 동시에 진행할 수 있는 것이다.
- 경제성
- 프로세스의 생성, context switching에 비해 효율적
- 멀티 프로세서 활용
- 병렬처리를 통한 성능 향상
스레드의 구현
사용자 수준 스레드 (User Thread)
- 사용자 영역의 스레드 라이브러리로 구현됨
- 사용자 영역에서는 여러 개의 스레드가 있지만 커널 영역에는 하나의 스레드만 존재 (다대일 매핑)
- 커널은 스레드의 존재를 모름
- 장점: 커널의 관리를 받지 않음
- 생성 및 관리의 부하가 적음, 유연한 관리
- 단점: 커널은 프로세스 단위로 자원 할당
- 하나의 스레드가 block 상태가 되면 모든 스레드가 대기
- 장점: 커널의 관리를 받지 않음
커널 수준 스레드 (Kernel Thread)
- 커널이 직접 관리
- 커널 영역에서 스레드의 생성, 관리 수행
- context switching 등 부하가 크다 (프로세스의 context switching 보다는 덜 하지만)
- 커널이 각 스레드를 개별적으로 관리
- 하나의 스레드가 block 상태가 되어도, 다른 스레드는 계속 작업 수행 가능
- 일대일 매핑
혼합형 스레드
- n개의 사용자 수준 스레드, m개의 커널 스레드 (n > m)