스레드
- 프로세스의 특성인 자원과 제어에서 제어만 분리한 실행 단위
- 프로세서 활용의 기본 단위
- 프로세스 관리 정보 공유
- 같은 프로세스의 스레드들은 동일한 주소 공간 공유
스레드 병렬 수행의 이점
- 사용자 응답성 증가 : 일부 스레드가 지연되어도, 다른 스레드가 작업을 처리할 수 있다.
- 프로세스의 자원과 메모리 공유 가능 : 커널 개입을 피할 수 있다.
- 경제성 좋음 : Context Switching 발생보다 효율적이다.
- 다중 처리로 성능과 효율이 향상된다.
스레드와 프로세스의 관계
다중 스레드 : 프로그램 하나를 여러 실행 단위로 쪼개어 실행한다는 측면에서 다중 처리와 비슷하다.
스레드 제어 블록 (TCB, Thread Control Block)
- 정보 저장
- 프로세스 제어 블록은 스레드 제어 블록의 리스트
- 스레드 간에 보호하지 않음
- TCB의 내용
- 실행 상태 : 프로세서 레지스터, 프로그램 카운터, 스택 포인터
- 스케줄링 정보 : 상태, 우선순위, 프로세서 시간
- 계정 정보
- 스케줄링 큐용 다양한 포인터
- 프로세스 제어 블록 PCB을 포함하는 포인터
사용자 수준 스레드 : 다대일(n:1) 매핑
- 스레드와 관련된 모든 행위를 사용자 영역에서 함
- 스레드 교환에 커널이 개입하지 않아 커널에서 사용자 영역으로 전환 불필요
- 커널은 스레드가 아닌 프로세스를 한 단위로 인식, 프로세서 할당(프로세스 테이블 유지)
장점
커널의 개입을 받지 않는다.
- 이식성 높음 : 커널에 독립적 스케줄링을 할 수 있어 모든 운영체제에 적용 가능
- 오버헤드 적음 : 커널을 호출하지 않아, 영역 전환 오버헤드 감소
- 유연한 스케줄링 가능
단점
- 시스템의 동시성을 지원하지 않음
- 스레드 간 보호 불가능
커널은 프로세스 단위로 자원을 할당하기 때문에, 스레드 한 개가 대기 상태가 되면 다른 스레드도 실행 불가능
커널 수준 스레드 : 일대일(1:1) 매핑
- OS가 스레드를 직접 관리
- 커널 영역에서 스레드의 생성, 관리 수행 (Context Switching 부하가 큼)
- 프로세스 내 스레드들이 병행 수행 가능 (하나의 스레드가 block 되어도 다른 스레드는 계속 작업 가능)
두 개 짬뽕 = 혼합형 스레드 (효율적이면서 유연)
우리가 코드로 스레드를 생성해서 사용하는 것은 사용자 수준 스레드이다.
병렬 처리가 가능하다는 것과, 오버헤드의 부담을 덜 받는다는 것이 가장 큰 장점이라고 생각한다.
Reference
- 운영체제:그림으로 배우는 구조와 원리 - 한빛 아카데미