답변:
멀티 태스킹 운영 체제 커널의 역할 중 하나는 스케줄링입니다 . 언제 실행할 스레드를 결정합니다. 따라서 이러한 커널에는 스레드 또는 프로세스 라는 개념이 있습니다 . 스레드는 실행중인 순차 코드이며 자체 스택 과 때로는 다른 데이터를 가지고 있습니다. 운영 체제 컨텍스트에서 사람들은 일반적으로 프로세스 를 사용 하여 자체 메모리 공간이있는 스레드 를 의미하고 스레드는 메모리 공간을 다른 스레드와 공유하는 스레드를 의미합니다. 프로세스에는 하나 이상의 스레드가있을 수 있습니다.
오래된 유닉스 시스템과 같은 일부 운영 체제는 프로세스 만 제공합니다. 커널이 관리하는 모든 스레드에는 자체 메모리 공간이 있습니다. 대부분의 최신 유닉스 시스템과 같은 다른 운영 체제는 프로세스가 여러 실행 스레드를 포함 할 수 있도록합니다. 즉, 커널 수준의 스레드 개념을 제공합니다.
프로세스가 자체 스레딩을 관리 할 수도 있습니다. 에서 협동 멀티 스레딩, 각 스레드의 코드가 다른 스레드로 전환하는 지침이 포함되어 있습니다. 에서 선점 형 멀티 스레딩, 처리는 주기적 요청 비동기 다른 스레드로 스위칭함으로써 이러한 알림 커널 알림과 반응하고있다. 이런 방식으로 라이브러리에서 사용자 수준으로 커널 협력없이 멀티 스레딩이 구현됩니다.
시스템은 커널 수준 및 사용자 수준 스레드를 모두 제공 할 수 있습니다. 이를 하이브리드 스레딩이라고 합니다.
사용자 및 커널 수준 스레드에는 각각 장점과 단점이 있습니다. 커널 내 스케줄러로 전환하고 다시 프로세스로 전환하기 위해 메모리 보호를 재설정 할 필요가 없기 때문에 사용자 수준 스레드 간 전환이 더 빠릅니다. 이것은 주로 일부 고급 언어 ( 특히 Erlang ) 및 녹색 스레드 와 같이 매우 짧은 수명의 스레드를 많이 사용하는 대규모 동시 시스템에 중요 합니다 . 사용자 수준 스레드는 커널 지원이 덜 필요하므로 커널을 더 간단하게 만들 수 있습니다. 커널 수준 스레드를 사용하면 동일한 프로세스의 다른 스레드가 시스템 호출 에서 차단되는 동안 스레드를 실행할 수 있습니다.; 사용자 레벨 스레드가있는 프로세스는 프로세스의 모든 스레드를 차단하므로 시스템 호출을 차단하지 않도록주의해야합니다. 커널 수준 스레드는 다중 프로세서 시스템에서 동시에 실행될 수 있으며 순전히 사용자 수준 스레드는 달성 할 수 없습니다.
커널 레벨 스레드를 " 가상 프로세서 " 로 생각 하고 사용자 레벨 스레드를 단순히 스레드로 생각하십시오 (지금은이를 호출하십시오). 이제 스레드를 실행하려면 프로세서에 할당 되었습니까? 따라서 각 스레드는 가상 프로세서에 할당되어 실행될 수 있습니다.
여기에 사실이 있습니다
새로운 가상 프로세서를 만드는 데 약간의 비용이 듭니다. (커널은 Thread Control Block에 엔트리를 생성하고 스택을 할당해야합니다.)
스레드를 생성하는 것은 새로운 가상 프로세서를 생성하는 것에 비해 매우 간단합니다. 응용 프로그램 개발자는 프로그래밍 언어에서 제공하는 스레드 라이브러리를 사용하여 스레드를 만들 수 있으며 사용자 공간 에서 관리됩니다 . 그리고 다른 언어 는 다른 방식으로 멀티 스레딩 을 구현 합니다.
스레드가 단일 가상 프로세서에 매핑되면 다른 스레드가 더 이상 동시에 실행될 수 없으므로 스레드 중 하나에서 블로킹 시스템 호출을하지 않도록주의해야합니다.
가상 프로세서를 몇 개 더 만들 수 있으면이 제한을 극복 할 수 있습니다. 이제 여러 실제 프로세서가있는 경우 스레드가 동시에 실행될 수 있습니다. 스레드는 다른 가상 프로세서에 매핑 된 다른 스레드에는 영향을 미치지 않습니다.
후자의 모델에서는 하나 이상의 스레드가 가상 프로세서에 매핑 될 수 있습니다.
상기 모델들은 각각 다 대일, 일대일 및 다 대다로 명명된다.
Referene : Galvin et al.의 운영 체제 개념 주제 : 스레드-> 멀티 스레딩 모델