사용자 수준 스레드와 커널 수준 스레드의 차이점은 무엇입니까?


33

여러 소스를 읽은 후에도 여전히 사용자 및 커널 수준 스레드에 대해 혼란스러워합니다.

특히:

스레드는 사용자 수준과 커널 수준 모두에 존재할 수 있습니다

사용자 수준과 커널 수준의 차이점은 무엇입니까?


1
이것이 실제로 Comp Sci (이론)입니까 아니면 프로그래밍입니까?
Mehrdad

6
@Mehrdad, 운영 체제는 컴퓨터 과학의 일부입니다.
Kaveh

답변:


28

멀티 태스킹 운영 체제 커널의 역할 중 하나는 스케줄링입니다 . 언제 실행할 스레드를 결정합니다. 따라서 이러한 커널에는 스레드 또는 프로세스 라는 개념이 있습니다 . 스레드는 실행중인 순차 코드이며 자체 스택 과 때로는 다른 데이터를 가지고 있습니다. 운영 체제 컨텍스트에서 사람들은 일반적으로 프로세스 를 사용 하여 자체 메모리 공간이있는 스레드 를 의미하고 스레드는 메모리 공간을 다른 스레드와 공유하는 스레드를 의미합니다. 프로세스에는 하나 이상의 스레드가있을 수 있습니다.

오래된 유닉스 시스템과 같은 일부 운영 체제는 프로세스 만 제공합니다. 커널이 관리하는 모든 스레드에는 자체 메모리 공간이 있습니다. 대부분의 최신 유닉스 시스템과 같은 다른 운영 체제는 프로세스가 여러 실행 스레드를 포함 할 수 있도록합니다. 즉, 커널 수준의 스레드 개념을 제공합니다.

프로세스가 자체 스레딩을 관리 할 수도 있습니다. 에서 협동 멀티 스레딩, 각 스레드의 코드가 다른 스레드로 전환하는 지침이 포함되어 있습니다. 에서 선점 형 멀티 스레딩, 처리는 주기적 요청 비동기 다른 스레드로 스위칭함으로써 이러한 알림 커널 알림과 반응하고있다. 이런 방식으로 라이브러리에서 사용자 수준으로 커널 협력없이 멀티 스레딩이 구현됩니다.

시스템은 커널 수준 및 사용자 수준 스레드를 모두 제공 할 수 있습니다. 이를 하이브리드 스레딩이라고 합니다.

사용자 및 커널 수준 스레드에는 각각 장점과 단점이 있습니다. 커널 내 스케줄러로 전환하고 다시 프로세스로 전환하기 위해 메모리 보호를 재설정 할 필요가 없기 때문에 사용자 수준 스레드 간 전환이 더 빠릅니다. 이것은 주로 일부 고급 언어 ( 특히 Erlang ) 및 녹색 스레드 와 같이 매우 짧은 수명의 스레드를 많이 사용하는 대규모 동시 시스템에 중요 합니다 . 사용자 수준 스레드는 커널 지원이 덜 필요하므로 커널을 더 간단하게 만들 수 있습니다. 커널 수준 스레드를 사용하면 동일한 프로세스의 다른 스레드가 시스템 호출 에서 차단되는 동안 스레드를 실행할 수 있습니다.; 사용자 레벨 스레드가있는 프로세스는 프로세스의 모든 스레드를 차단하므로 시스템 호출을 차단하지 않도록주의해야합니다. 커널 수준 스레드는 다중 프로세서 시스템에서 동시에 실행될 수 있으며 순전히 사용자 수준 스레드는 달성 할 수 없습니다.


마지막 줄은 "커널 수준 스레드는 순전히 사용자 수준 스레드로는 달성 할 수없는 다중 프로세서 시스템에서 동시에 실행될 수 있습니다"라고 말합니다. 그러나 주어진 링크에 따르면 ULT는 동시에 stackoverflow.com/questions/14791801/…을 실행할 수 있습니다 . 내가 잘못 받고 있습니까?
Garrick

위의 의견을 확인해 주시겠습니까?
Garrick

1
@Garrick 여러 사용자 수준 스레드는 다른 커널 수준 스레드 내에서 실행되는 경우 다른 코어에서 동시에 실행될 수 있습니다. 도구로 ULT 만있는 경우 단일 프로세서로 제한됩니다. KLT를 사용할 수있는 경우 여러 프로세서에 커널 스레드를 분산시키고 사용 가능한 커널 스레드간에 ULT를 디스패치 할 수 있습니다.
Gilles 'SO- 악한 중지'

4

커널 레벨 스레드를 " 가상 프로세서 " 로 생각 하고 사용자 레벨 스레드를 단순히 스레드로 생각하십시오 (지금은이를 호출하십시오). 이제 스레드를 실행하려면 프로세서에 할당 되었습니까? 따라서 각 스레드는 가상 프로세서에 할당되어 실행될 수 있습니다.

여기에 사실이 있습니다

  • 새로운 가상 프로세서를 만드는 데 약간의 비용이 듭니다. (커널은 Thread Control Block에 엔트리를 생성하고 스택을 할당해야합니다.)

  • 스레드를 생성하는 것은 새로운 가상 프로세서를 생성하는 것에 비해 매우 간단합니다. 응용 프로그램 개발자는 프로그래밍 언어에서 제공하는 스레드 라이브러리를 사용하여 스레드를 만들 수 있으며 사용자 공간 에서 관리됩니다 . 그리고 다른 언어 는 다른 방식으로 멀티 스레딩 을 구현 합니다.

모형

  • 스레드가 단일 가상 프로세서에 매핑되면 다른 스레드가 더 이상 동시에 실행될 수 없으므로 스레드 중 하나에서 블로킹 시스템 호출을하지 않도록주의해야합니다.

  • 가상 프로세서를 몇 개 더 만들 수 있으면이 제한을 극복 할 수 있습니다. 이제 여러 실제 프로세서가있는 경우 스레드가 동시에 실행될 수 있습니다. 스레드는 다른 가상 프로세서에 매핑 된 다른 스레드에는 영향을 미치지 않습니다.

  • 후자의 모델에서는 하나 이상의 스레드가 가상 프로세서에 매핑 될 수 있습니다.

  • 상기 모델들은 각각 다 대일, 일대일 및 다 대다로 명명된다.

Referene : Galvin et al.의 운영 체제 개념 주제 : 스레드-> 멀티 스레딩 모델

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.