본문 바로가기

C.E/OS

Thread - Thread란?

Thread, 스레드

 

Thread란 특정 Process내에서 실행되는 하나의 흐름을 나타내는 단위이다. 또한 독립된 Program counter를 갖는

 

단위이며 또한 독립된 Register Set과 Stack을 가지고 있다. 보통은 한 Process당 하나의 Threa를 가지고 있고

 

여러 Thread를 가지고 있는 경우 Multi-Thread라고 한다.

 

Multi-Thread에서 각각의 Thread는 상호간에 동일한 Address Space에 존재하는 Code,Stack,Resource를 공유하기 때문에

 

Context Switching보다 비용이 저렴하다. 이러한 Multi-Thread를 제어하는 방법은 크게 두가지로 나눌수 있다.

 

User Thread : User레벨에서 Thread를 제어한다. System Call로 구현하지 않고 User-level Library로 구현하기 때문에

 

Kernel위에서 일련의 Library Call기능이 제공되어야만 한다. 대표적으로 POSIX, Mach등이 있다.

 

Kernel Thread : System Call로서 구현된다. 대표적으로 WIN98/98/NT/2000, Solaris,Linux등이 있다.

 

Multi-Thread의 경우 위의 User Thread와 Kernel Thread가 하나냐 여러개냐 따라서 그 Model이 나뉜다.

 

1. Many-to-One

 

아래 사진에서와 같이 여러개의 User Thread와 하나의 Kernel Thread가 있을 경우이다.

 

 

 

 

이런 경우에는 보통 운영체제가 Multi-Thread를 지원하지 않는 경우이다. 이러한 Model은 한번의 하나의 User Thread밖에

 

Kenel Thread에 접근 가능하기에 병렬성이 떨어진다.

 

2. One-to-One

 

아래 사진과 같이 여러개의 User Thread와 Kernel Thread가 있을 경우이다.

 

 

 

이런 경우는 운영체제와 User 둘다 Multi-Thread를 지원하는 경우이다. 하나의 User Thread가 하나의

 

Kernel Thread에 대응되기 때문에 Many-to-One보다 더 좋은 작업이 가능하지만 User Thread가 늘때마다

 

Kernel Thread도 늘어나야 하기 때문에 운영체의 자원과 시간의 낭비가 심하고 효율성이 떨어진다.

 

대표적으로 WIN98/98/NT/2000, OS/2가 있다.

 

3. Many-to-Many

 

아래 사진과 같이 여러개의 User Thread와 일정 수의 Kernel Thread가 있는 경우이다.

 

 

 

위와 같은 방식은 Many-to-One방식의 문제점인 한번에 하나의 Thread밖에 Kenel Thread에 접근 할 수 없다는 것과

 

Many-to-Many방식의 문제점인 자원과 시간의 낭비를 해결하기 위해서 고안되었다.

 

위의 방식은 Kernel이 User Thread와 Kernel Thread의 연결을 적절하게 조절한다.

 

대표적으로 Solaris 2, WIN NT/2000 with the ThreadFiber package가 있다.

 

'C.E > OS' 카테고리의 다른 글

CPU Scheduling - CPU Scheduling  (0) 2013.12.09
Thread - Multi-Thread VS Multi-Process  (0) 2013.12.09
Process - InterProcess Communication(IPC)_2  (0) 2013.12.09
Process - InterProcess Communication(IPC)_1  (0) 2013.12.09
Process - Operation on Process  (0) 2013.12.09