상세 컨텐츠

본문 제목

다중 스레드 모델(Multithreading Models)

운영체제

by AyaanDev 2023. 1. 5. 17:32

본문

반응형

스레드는 크게 사용자 스레드(user thread) 와 커널 스레드(kernel thread)로 나뉜다.

사용자 스레드는 커널 위에서 지원되며 커널의 지원 없이 관리된다.

반면 커널 스레드는 윈영체제에 의해 직접 지원되고 관리된다.

 

사용자 스레드는 커널 스레드에 매핑되어 작업이 이루어진다.

사용자 스레드와 커널스레드의 연관 관계 모델에는 일반적으로 세 가지 방법이 있는데

 

1. 다대일 모델

2. 일대일 모델

3. 다대다 모델

 

이번 포스팅에서는 각각의 모델에 대해 알아보고 장단점을 알아보도록 하겠다.

 

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

다대일 모델에서는 여러 user thread를 하나의 kernel thread로 사상한다.

kernel thread가 하나밖에 없으므로 봉쇄형 system call 이 발생하면 모든 user thread가 중지된다는 큰 단점이 있다.

또한 한 번에 하나의 스레드만이 커널에 접근할 수 있기 때문에 다중 스레드가 다중코어 시스템에서 병렬로 실행될 수 없다.

단점

1. 하나의 user thread에서 봉쇄형 system call 이 발생하면 남아있는 kernel thread가 없으므로 모든 user thread가 함께 중단된다.

2. kernel thread가 1개밖에 없으므로 multi-processor에서도 parallel하게 실행되지 못한다. 

 

초기 Solaris 시스템이나 Java 초기버전에서 사용된 모델이지만 현재에 있어서는 다대일 모델을 사용하는 시스템은 거의 존재하지 않는다고 한다.

 

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

일대일 모델은 user thread가 각각 하나의 kernel thread로 사상된다.

이 모델은 하나의 user thread가 봉쇄형 system call을 호출하더라도 다른 스레드가 실행될 수 있기 때문에 더 많은 병렬성을 제공하며 multi-processor 시스템에서 다중 스레드가 병렬로 실행되는것을 허용한다.

장점

1. 다대일 모델과는 달리 kernel thread가 여러 개이므로 하나의 user thread가 봉쇄형 system call을 호출한다고 다른 user thread까지 모두 봉쇄되지는 않는다.

2. kernel에 접근할 수 있는 스레드가 여러 개라 다중처리기에서도 실제로 병렬적으로 실행될 수 있다.

 

단점

1. 사용자 스레드가 생성될 때 그에 대응되는 kernel 스레드를 생성해야 한다. kernel 스레드를 생성하는 것은 사용자 스레드보다 더 오랜 시간이 걸린다. 이 오버해드가 프로그램의 성능을 저하시킬 수 있다.

 

요즘은 워낙 하드웨어 성능이 좋다 보니 이러한 단점에도 불구하고 많은 시스템이 일대일 모델을 채택하고 있다.

window, Linux, Solaris 운영체제에서 일대일 모델을 채택하고 있다고 한다.

 

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

이 모델은 다대일 모델과 일대일 모델의 절충안으로 생각하면 된다.

다대일 모델의 경우 하나의 kernel만 존재하기 때문에 하나의 user thread만 봉쇄되어도 모든 user thread가 함께 봉쇄되며

하나의 스레드만이 커널에 의해 스케줄 되기 때문에 진정한 병렬 실행을 획득할 수없다.

다만 one-to-one모델의 경우 개발자가 너무 많은 user thread를 만들지 않도록 조심해야 한다.(user thread 하나당 kernel thread 하나씩 생성해주어야 하므로 오버헤드가 크다)

위 모델은 그에 대한 절충안으로 일정량의 커널스레드가 미리 만들어져 있으며 user thread는 그위에서 스케줄링된다.

다대다 모델

 

반응형

'운영체제' 카테고리의 다른 글

실시간 CPU 스케줄링  (0) 2023.01.04
CPU 스케줄링(CPU Scheduling)  (0) 2022.12.28
Thread -1(Thread vs Process)  (0) 2022.12.28
프로세스-2 (프로세스 생성과 종료)  (0) 2022.12.28
프로세스 -1 (프로세스란)  (1) 2022.12.28

관련글 더보기

댓글 영역