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 |