Theory
운영체제
스레드

사용자 스레드 vs 커널 스레드

사용자 스레드는 커널 위에서 지원되며 커널의 지원 없이 관리된다.
커널 스레드는 커널이 관리하는 백그라운드 스레드로 커널이 하는 동작을 수행하는 스레드이다.

다중 스레드 모델

다대일 모델(Many-to-One Model)


그린 스레드가 다대일 모델을 사용하였는데 java의 초기 버전도 이런 green thread를 사용했다.

스레드가 봉쇄형 시스템 콜을 할 경우, 전체 프로세스가 봉쇄된다. 또한, 한 번에 하나의 스레드만 커널에 접근 할 수 있기 때문에 다중 스레드가 다중 코어 시스템에서 병렬로 실행될 수 없다.

일대일 모델(One-to-One Model)


각 사용자 스레드를 각각 하나의 커널 스레드로 맵핑한다.

사용자 스레드를 만들려면 해당 커널 스레드를 만들어야 하며 많은 수의 커널 스레드가 시스템 성능에 부담을 줄 수 있다는 단점이 있다.

다대다 모델(Many-to-Many Model)


여러 개의 사용자 수준 스레드를 그보다 작은 수, 혹은 같은 수의 커널 스레드로 멀티플렉스 한다. 커널 스레드의 수는 응용 프로그램이나 특정 기계에 따라 결정된다.

다대다 모델이 가장 융튱성 있는 모델로 보이지만 실제로는 구현하기가 어렵다.

두 수준 모델(two-level) 이라고도 불린다.

목적 스레드(Target Thread)

데이터베이스에서 여러 스레드가 병렬로 검색하고 있다고 가정할 때, 한 스레드에서 결과를 찾으면 나머지 스레드는 찾을 필요가 없다. 이처럼 취소되어야 할 스레드를 목적 스레드라고 한다.

비동기식 취소(asynchronous cancellation)

한 스레드가 즉시 스레드를 강제 종료 시킨다. 이 방식을 사용해서 취소하게되면 필요한 시스템 자원을 다 사용 가능한 상태로 만들지 못할 수도 있다는 단점이 있다.

지연 취소(deferred cancellation)

목적 스레드가 주기적으로 자신이 강제 종료 되어야 할지를 점검한다.

스레드 로컬 저장장치(TLS, Thread Local Storage)

멀티스레딩 환경에서 각 스레드가 독점적으로 사용할 수 있는 메모리 영역을 제공하는 것을 말하지만 지역변수와는 다르다.

지역변수는 함수 내에서만 유효하며, 함수를 벗어나면 더 이상 접근할 수 없지만 TLS는 스레드의 실행환경에서 함수호출 회수에 관계없이 스레드가 종료될 때까지 유지된다. 또한 TLS는 가비지 컬렉터가 메모리를 해제하지 않는다.

스케줄러 액티베이션

스레드 라이브러리와 커널의 통신하는 방법이다.

커널은 응용에 가상 처리기의 집합을 제공하고 응용은 사용자 스레드를 가용한 가상 처리기로 스케줄한다. 커널은 응용에게 특정 이벤트에 대해서 알려줘야 하는데 이 프로시저를 upcall이라고 한다. upcall스레드 라이브러리의 upcall 처리기에 의해서 처리되고, upcall 처리기가상 처리기상에서 실행되어야 한다.