3-2. 사용자 레벨 스레드 vs 커널 레벨 스레드

1. 스레드, 왜 두 가지 방식으로 구현될까?

운영체제는 여러 작업을 동시에 처리하기 위해 프로세스스레드라는 개념을 사용합니다. 프로세스는 독립적인 실행 환경을 제공하며, 스레드는 프로세스 내에서 실제 작업을 수행하는 실행 단위입니다. 스레드를 사용하면 하나의 프로세스 내에서 여러 작업을 병렬적으로 처리하여 프로그램의 효율성을 높일 수 있습니다. 그런데, 이 스레드를 운영체제가 어떻게 관리하느냐에 따라 크게 두 가지 방식으로 나뉩니다. 바로 사용자 레벨 스레드커널 레벨 스레드입니다. 이 둘의 차이점은 스레드 생성, 스케줄링, 동기화 등의 작업을 누가 담당하느냐에 달려 있습니다. 이해를 돕기 위해, 마치 회사에서 여러 부서(스레드)가 업무를 처리할 때, 누가 지시하고 관리하는지에 비유할 수 있습니다.

2. 사용자 레벨 스레드 (User-Level Threads)

사용자 레벨 스레드는 스레드 관리의 모든 책임을 사용자 공간스레드 라이브러리가 담당합니다. 여기서 사용자 공간은 운영체제의 커널 영역 밖에 있는, 일반적인 애플리케이션 코드가 실행되는 영역을 의미합니다. 즉, 스레드의 생성, 스케줄링, 동기화 등 스레드 관련 모든 작업이 커널의 도움 없이 이루어집니다.

1) 작동 방식

사용자 레벨 스레드는 스레드 라이브러리에 의해 관리되므로, 운영체제 커널은 이러한 스레드의 존재를 인지하지 못합니다. 커널은 프로세스를 하나의 실행 단위로 인식하고, 프로세스 내의 스레드들은 라이브러리에 의해 스케줄링됩니다.

2) 장점

  • 빠른 스레드 생성 및 관리: 커널 호출 없이 사용자 공간에서 스레드를 생성하고 관리하기 때문에 스레드 생성 및 컨텍스트 스위칭이 매우 빠릅니다.
  • 유연성: 스레드 라이브러리를 통해 다양한 스케줄링 알고리즘을 구현할 수 있습니다.
  • 이식성: 운영체제 커널에 종속되지 않으므로, 다양한 운영체제에서 동일한 방식으로 동작합니다.

3) 단점

  • 블로킹 시스템 콜 문제: 만약 사용자 레벨 스레드 중 하나가 블로킹 시스템 콜을 호출하면, 해당 프로세스 전체가 블록됩니다. 커널은 프로세스 전체를 블록시키기 때문에, 해당 프로세스 내의 다른 스레드들 또한 실행될 수 없습니다.
  • 멀티 프로세서 활용의 한계: 커널은 하나의 프로세스를 하나의 실행 단위로 인식하기 때문에, 멀티 프로세서 환경에서 여러 스레드가 동시에 실행될 수 없습니다. 즉, CPU 코어가 여러 개 있어도, 하나의 코어만 사용하게 됩니다.

블로킹 시스템 콜 문제 설명 뒤

3. 커널 레벨 스레드 (Kernel-Level Threads)

커널 레벨 스레드는 스레드 관리를 운영체제 커널이 담당합니다. 커널은 각 스레드의 존재를 인식하고, 스케줄링과 관리를 직접 수행합니다.

1) 작동 방식

커널은 각 스레드를 독립적인 실행 단위로 인식하여 스케줄링합니다. 따라서, 한 스레드가 블로킹 시스템 콜을 호출하더라도 다른 스레드들은 계속 실행될 수 있습니다.

2) 장점

  • 블로킹 문제 해결: 한 스레드가 블로킹되더라도, 다른 스레드들은 계속 실행될 수 있습니다.
  • 멀티 프로세서 활용: 여러 스레드가 동시에 여러 CPU 코어에서 실행될 수 있습니다.
  • 다양한 스케줄링 정책: 커널의 스케줄러를 사용하여 다양한 스케줄링 정책을 구현할 수 있습니다.

3) 단점

  • 느린 스레드 생성 및 관리: 스레드 생성, 컨텍스트 스위칭, 그리고 동기화 작업 시 커널 호출이 필요하므로 사용자 레벨 스레드에 비해 속도가 느립니다.
  • 운영체제 종속성: 운영체제 커널에 의존적이므로, 다른 운영체제로의 이식이 어렵습니다.
  • 오버헤드: 커널 자원을 사용하므로 사용자 레벨 스레드에 비해 오버헤드가 발생할 수 있습니다.

멀티 프로세서 활용 설명 뒤

4. 사용자 레벨 vs 커널 레벨: 비교

특징 사용자 레벨 스레드 커널 레벨 스레드
스레드 관리 사용자 공간의 스레드 라이브러리 운영체제 커널
스레드 생성/컨텍스트 스위칭 빠름 느림
블로킹 시스템 콜 프로세스 전체 블록 다른 스레드 실행 가능
멀티 프로세서 활용 불가능 가능
이식성 우수 좋지 않음
오버헤드 적음 많음

5. 하이브리드 접근 방식

위에서 언급한 두 가지 방식의 장점을 결합한 하이브리드 접근 방식도 존재합니다. 이 방식은 사용자 레벨 스레드와 커널 레벨 스레드의 중간 형태로, 사용자 공간에서 스레드를 관리하고, 일부 스레드를 커널 스레드에 매핑하여 블로킹 문제와 멀티 프로세서 활용의 문제를 해결하려고 시도합니다.

하이브리드 접근 방식 설명 뒤

1) N:1 모델

  • 여러 사용자 레벨 스레드를 하나의 커널 레벨 스레드에 매핑합니다.
  • 사용자 레벨 스레드의 장점인 빠른 생성과 관리를 유지하면서, 커널 레벨 스레드의 장점인 블로킹 문제를 부분적으로 해결합니다.
  • 그러나 멀티 프로세서 활용은 제한적입니다. 왜냐하면, 하나의 커널 스레드에 매핑된 사용자 스레드들은 동시에 실행될 수 없기 때문입니다.

2) M:N 모델

  • 여러 사용자 레벨 스레드를 여러 커널 레벨 스레드에 매핑합니다.
  • 사용자 레벨 스레드의 빠른 생성과 관리, 그리고 커널 레벨 스레드의 블로킹 문제 해결과 멀티 프로세서 활용을 모두 가능하게 합니다.
  • 가장 유연하고 강력한 하이브리드 모델이지만, 구현이 복잡합니다.

6. 결론

사용자 레벨 스레드와 커널 레벨 스레드는 각각 장단점을 가지고 있으며, 어떤 방식을 선택할지는 응용 프로그램의 요구 사항과 운영체제의 특징에 따라 결정됩니다. 사용자 레벨 스레드는 간단한 프로그램이나 컨텍스트 스위칭 속도가 중요한 경우에 적합하며, 커널 레벨 스레드는 블로킹 문제 해결과 멀티 프로세서 활용이 필요한 경우에 적합합니다. 하이브리드 접근 방식은 두 가지 방식의 장점을 절충하여, 보다 유연하고 효율적인 스레드 관리를 가능하게 합니다.

비슷한 글 추천

Comments (0)

No comments yet. Be the first to comment!