Thread란??

 

Thread는 프로세스 내에 존재하는 것으로 실제로 실행되는 독립적인 작업단위이다. Thread는 Process의 모든 자원을 공유할 수 있으며, CPU는 각각의 Thread를 수행하고 각각의 Thread는 해당 Thread만의 고유한 작업을 가지고 있다.

  가령 예를들어, 인터넷 웹브라우저를 킨 후에 네이버를 들어갔을 경우에, 네이버의 광고(검색바 밑에)가 다 나오기 전에 기사글이 먼저 나오고 그 후에 광고나 이미지가 나오는 경우를 많이 봐왔을 것이다.

웹브라우져에서도 Thread가 각각 존재하여, html,image,script를 받아오는 쓰레드가 따로 존재하여 효율적이면서, 빠른 속도로 인터넷 서핑이 가능한 것이다.

 

쓰레드는 프로세스처럼 메모리자원을 할당 받는 것이 아니고, 이미 할당받아져 있는 프로세스 안에서 생성되는 것이기 때문에 프로세스를 새로 할당 받는 것보다 생성속도가 무려 67배가 빠르다고 한다.

보통은 한 프로세스당 하나의 쓰레드를 가지나 여러 쓰레드를 가지고 있는 경우를 Multi-Thread라 한다.

또한 프로세스가 할당받은 자원에 있는 것을 공유하기 때문에 Context-switch보다 훨씬 저렴한 자원으로 이용할 수 있다.

 

Thread에도 종류가 있는데 User-Thread와 Kernel-Thread이다.

User-Thread는 user레벨 권한에서 Thread를 제어한다. 따라서 System Call을 사용할 필요는 없지만 kernel system call을 기반에 두고 사용하여야 한다.

반면에, Kernel-Thread는 System Call로 구현되어 진다.

 

Multi-Thread의 경우 User-Thread와 Kernel-Thread에 따라서 모델이 나뉘게 된다.

 

One to one Model

User-Thread와 Kernel-Thread가 일대일로 매칭되는 구조이다.

자원낭비가 심하고 오버헤드가 발생할 확률이 높다.

 

 

 

Many to one Model

Kernel-Thread가 하나만 존재하는 것을 말한다. 병렬성이 떨어지고 속도가 늦다.

 

 

Many to many Model

User-Thread와 Kernel-Thread가 복수개 인 것을 말한다.(요즘 대부분의 OS는 이 모델을 따르고 있다.)

하지만 이때 Kernel-Thread는 User-Thread보다 항상 적다.

또한, Many to many Model이지만 OS가 생각하기에 중요한 Thread는 Many to many모델안에서 One to one Model을 따르게 된다.

 

※Multi-Thread System은 PCB가 저장되고 복귀하는 것(Context-switch)가 일어나지 않기 때문에 오버헤드도 줄고 효율성이 올라간다.

'O.S' 카테고리의 다른 글

Process Scheduling - Priority  (0) 2012.04.19
Process Scheduling - SJF  (0) 2012.04.19
Process Scheduling - FCFS  (0) 2012.04.19
Critical Section - 공유메모리  (2) 2012.04.17
Interrupt  (0) 2012.04.17

+ Recent posts