이제 진짜 다중 스레드에 대해서 알아보려고 한다.
그래서 스레드도 2개의 종류로 나눠서 살펴보려고 한다. 한 번 보자
• User threads - management done by user-level threads library
• Three primary thread libraries:
POSIX Pthreads
Windows threads
Java threads
• Kernel threads - Supported by the Kernel
Examples – virtually all general purpose operating systems, including:
Windows
Solaris
Linux
Tru64 UNIX
Mac OS X
사용자 스레드(User threads) , 커널 스레드(Kernel thread)가 있다.
사용자 스레드는 커널 위에서 지원되며 커널의 지원 없이도 관리 된다,.
커널 스레드는 운영체제에 의해 지원되고 관리된다.
이런 식으로 되어있다.
모델에는 3가지가 있는데
• Many-to-One
• One-to-One
• Many-to-Many
다대일, 일대일, 다대다가 있다.
차례대로 살펴보자
다대일을 보자
많은 사용자 수준 스레드를 하나의 커널 스레드로 사상한다. //사상한다는 영어로 mapping한다랑 비슷하다
스레드 관리는 사용자 공간의 스레드 라이브러리에 의해 행해진다. // 효율적이다.
하지만 한 스레드가 봉쇄형 시스템 콜을 할 경우 전체 프로세스가 봉쇄된다. //block
또한 한 번에 하나의 스레드만이 커널에 접근할 수 있기 때문에, 다중 스레드가 다중 코어 시스템에서 병렬로 실행될 수 없다.
//단점이 조금 많다.
• Many user-level threads mapped to single kernel thread
• One thread blocking causes all to block
• Multiple threads may not run in parallel on muticore system because only one may be in kernel at a time
• Few systems currently use this model
일대일을 보자
각 사용자 스레드를 각각 하나의 커널 스레드로 사상한다.
하나의 스레드가 봉쇄적 시스템 콜을 하더라도 다른 스레드가 작업 가능하다.
++다대일보다 더 많은 병렬성 제공
이 모델은 다중 처리기에서 다중 스레드가 병렬로 수행되는 것을 허용한다.
단점이라면 사용자 스레드를 만드려면 그에 맞게 커널 스레드도 만들어야 하는 것이 단점이다.
// 커널 스레드가 시스템 성능에 부담을 줄 수 있다는 것이다.
• Each user-level thread maps to kernel thread
• Creating a user-level thread creates a kernel thread
• More concurrency than many-to-one
• Number of threads per process sometimes restricted due to overhead
다대다
마지막에 설명하는 거 보니까 가장 좋은거겠지???
사실 혼합형이다.
여러 개의 사용자 수준 스레드, 그리고 그보다 작거나 같은 커널 스레드의 수로 구성된다.
병행 실행의 관점에서는 어떨까??
다대일 모델은 앞서 원하는 만큼의 사용자 스레드를 생성하도록 허용하지만, 커널은 한 번에 하나의 커널 스레드만 스케줄 할 수 있어서 병렬실행에는 어려움이 있다.
일대일은 너무 많은 스레드가 생성되어 부담을 줄 수 있다는 것이다.
그래서 다대다가 이것을 해결하려고 고안되었다.
필요한 사용자 수준 스레드를 생성 가능하고 상응하는 커널 스레드가 다중 처리기에서 병렬로도 실행될 수 있다.
봉쇄형 시스템 호출이 발생해도 커널이 다른 스레드의 수행을 스케줄 할 수 있다.
++ two-level model이라고도 한다.
**다대다 모델이 좋아보이고 실제로 좋지만 구현하기가 어렵다.
대부분의 시스템에서 처리 코어 수가 증가하는 추세라, 커널 스레드의 수를 제한하는 것의 중요성이 약해졌다.
그래서 요즘은 거의 일대일 모델을 이용한다.
• Allows many user level threads to be mapped to many kernel threads
• Allows the operating system to create a sufficient number of kernel threads
• Solaris prior to version 9
• Windows with the ThreadFiber package
'컴퓨터(Computer Science) > 운영체제(Operation System)' 카테고리의 다른 글
프로세스 간 통신, Interprocess Commnunication/IPC (0) | 2020.05.31 |
---|---|
스레드 라이브러리?? Thread library (0) | 2020.05.31 |
다중 코어 프로그래밍 (Multicore programming) (0) | 2020.05.30 |
스레드,Thread [운영체제] (0) | 2020.05.30 |
Process Life Cycle, 프로세스 생성부터 종료까지 (0) | 2020.05.29 |