[운영체제] 다중 스레드 모델
사용자 스레드와 커널 스레드
사용자 스레드
- 사용자 스레드는 커널 위에서 지원되고 커널의 지원 없이 관리된다.
- 구현된 스레드 라이브러리를 가져와 코드를 작성해 사용되는 스레드를 말한다.
- 스레드 라이브러리는 스레드의 생성 및 스케줄링 등에 관한 관리 기능을 제공한다.
- 동일한 메모리 영역에서 스레드가 생성 및 관리되므로 속도가 빠르다.
- 여러 사용자 스레드들 중 하나의 스레드가 시스템 호출 등으로 중단되면, 나머지 스레드들도 모두 중단되버린다. 이는 커널이 프로세스 내부에 있는 스레드들을 인식하지 못하며, 해당 프로세스를 대기 상태로 전환시켜버리기 때문이다.
커널 스레드
- 커널 레벨 스레드는 운영체제에 의해 직접 지원되고 관리된다.
- 스레드가 시스템 호출 등으로 중단되더라도 커널은 프로세스 내의 다른 스레드들도 중단시키지 않고 계속 실행시켜 준다.
- 사용자 스레드에 비해 생성 및 관리하는 것이 어렵다.
다중 스레드 모델
다대일 모델
- 여러 사용자 스레드들을 하나의 커널 스레드로 매핑한다.
- 한 스레드가 블럭을 유발하는 시스템 콜을 호출했을 경우, 전체 프로세스가 블럭되버리므로, 나머지 사용자 스레드들도 블럭 되버린다.
- 한 번에 하나의 스레드만이 커널에 접근할 수 있기 때문에, 여러 스레드가 멀티 코어 시스템에서 병렬로 실행될 수 없다.
- 이 모델을 사용 중인 시스템은 거의 존재하지 않는다.
일대일 모델
- 각 사용자 스레드를 각각 하나의 커널 스레드로 매핑한다.
- 한 스레드가 블럭 시스템 콜을 호출하더라도, 다른 스레드가 실행될 수 있다. 따라서, 다대일 모델보다 큰 병렬성을 제공한다.
- 여러 스레드가 멀티 코어 프로세서에서 수행될 수 있다.
- 사용자 스레드를 만드려면 매핑되는 커널 스레드를 만들어야 하며, 이로 인한 수많은 커널 스레드가 시스템에 부담을 줄 수 있다는 단점이 있다.
- 리눅스, 윈도우를 포함한 대부분의 운영체제는 일대일 모델을 사용한다.
다대다모델
- 여러 개의 사용자 레벨 스레드를 이보다 같거나 적은 수의 커널 스레드로 매핑한다.
- 위의 다대일 모델, 일대일 모델의 단점을 어느 정도 보완했다. 커널이 알아서 사용자 스레드와 커널 스레드간의 매핑을 적절히 조절해준다.
댓글남기기