1. Fork() 및 exec() 시스템콜
- 문제 : Fork()시 모든 스레드를 복사해야할까?
- exec를 사용할 경우 스레드가 다 초기화되기에 굳이 모두 할 필요는 없다.
→ 새로운 스래드 구성으로 바뀌기 때문
2. 신호 처리
- 신호 : 특정 이벤트 발생시 알림
- 처리 방법
- 동기식 처리 방법 : 프로세스 연산 내에서 문제가 발생시 관련 스레드를 종료시키는 것
- 비동기식 처리 방법 : 프로세스 외부에서 문제 발생시, 실행 중에 문제를 받고(비동기식) 후에 관련 스레드를 종료시키는 것
- 신호 처리기
- 디폴트 처리 신호기 : 커널 딴에서 기본적으로 신호를 처리하는 것, 사용자 처리 신호기로 대체 가능
- 사용자 처리 신호기 : 사용자가 지정한 방식으로 신호를 처리하는 것
3. 스레드 취소
- 신호 처리와 다르게 정상적으로 동작하지만, 불필요한 동작을 취소하여 자원을 확보하기 위한 동작
- 목적 스레드 : 취소되어야 할 스레드를 일컫는 말
- 취소 방법
- 비동기식 취소 : kill 같은 명령어를 사용해 그냥 바로 취소하는 방법
- 단점으로는 잘못된 취소시 자원을 회수하지 못하는 상황이 발생할 수 있다
- 동시식 취소 : 목적 스레드가 주기적으로 자신이 회수되어야하는지 확인하는 법
- 단계적으로 취소되기 때문에 자원을 잃는 일이 없다.
4. 스레드 로컬 저장소 (Thread Local Storage - TLS)
- 일반적으로 같은 프로세스의 스레드는 자원을 공유하지만, 스레드마다 고유한 저장공간이 필요함
- 정적 데이터에 가깝다(실제로도 static으로 생성), 그러나 전역으로 쓰는게 아닌 스레드 고유 데이터다.
5. 스레드 액티베이션
- 스레드와 커널간의 통신에 대한 문제의 해결 방안이 스레드 액티베이션이다
- 다중 스레드 모델중 다대다 모델과 두수준 모델이를 필요로한다.
- 경량 프로세스(LWP) 가 중간에서 처리하는 것 처럼 보인다.
- 하지만 LWP는 커널 스레드의 부분이어서, 커널 스레드가 봉쇄시 봉쇄된다. 연쇄적으로 사용자 스레드도 봉쇄
- 이 LWP를 이용하여 커널 스레드와 사용자 스레드를 스케줄링 하는 것