본문 바로가기
Computer Science

[Operating System] Threads: Implementation of Threads

by Henry Cho 2022. 3. 2.
728x90

Threads: Implementation of Threads


포스트 난이도: HOO_Middle

 

[Notice] 포스트 난이도에 대한 설명

안녕하세요, HOOAI의 Henry입니다. Bro들의 질문에 대한 내용을 우선적으로 포스팅이 되다 보니 각각의 포스트에 대한 난이도가 달라서 난이도에 대한 부분을 작성하면 좋겠다는 의견을 들었습니다

whoishoo.tistory.com


 

# Implementing Threads

Implementing threads란 Threads를 어떻게 구현할 것인지에 대한 걸 의미한다.

Threads를 생성하고 관리하는 것 자체는 API를 통해 Thread 라이브러리가 제공되지만 Threads을 어디서 구현해서 사용할 지에 대해서는 각기 다른 부분이 있다.

Threads가 구현되는 위치나 방법이 다르다는 것은 당연히 장단점을 포함하고 있고 각각의 특성에 맞게 원하는 위치나 방식을 채택하여 Threads을 Implementing 하면 된다.

Implementing Threads에는 3가지의 방법이 있다.

  • In user space
  • In kernel
  • A hybrid implementation

# In User Space

In user space 또는 In user level threads라고도 불리는 이 구현 방식은 말 그대로 Kernel이 아닌 user space에서 threads를 구현하여 사용하는 것을 의미한다.

이 경우 Kernel(커널)은 변함없이 그대로 single threaded processes를 관리하게 된다.

Threads 라이브러리를 통해 Threads는 구현이 되고 API를 통해 제공된다.

User level threads의 경우에는 Operating system에도 implemented가 될 수는 있지만 kernel안의 threads을 지원하지는 않는다.

왜냐하면 User level threads이기 때문이다.

따라서 Kernel은 Threads가 존재하는지에 대해서 알 수 없다.

User level threads의 경우에는 thread swithching이 커널에 구현된 threads 방식보다 빠르며, 각각의 process들은 각기 다른 방식의 scheduling algorithm을 가질 수 있게 된다.

반면에 User level threads를 구현할 경우 아래와 같은 단점이 발생한다.

  • Blocking system calls
  • Page faults block the entire process
  • No clock interrupts
  • Limited performance gain

여기서 System calls이 blocking되기 때문에 제한적인 능률 및 효율성을 가져오게 된다.

또한 페이지 결함이 전체 프로세스의 영향을 미칠 수 있게 된다는 단점도 가지고 있다.

또한 clock interrupts이 없다는 것은 round-robin scheduling이 없다는 것을 의미하면 결과적으로 voluntary 산출이 필요로 해진다.


# In Kernel Space

Kernel level threads라고도 불리는 Kernel space 안에 구현되는 threads의 경우 run time system이 필요 없다.

또한 각각의 프로세스들이 thread table을 필요로 하며 Kernel이 thread table을 유지 관리를 한다.

Thread table을 Kernel이 관리한다는 것은 kernel이 지속적으로 Threads에 대한 tracking을 통해 관리가 이루어진다는 것을 의미한다.

이 경우 Kernel 안에 Thread table이 존재하고 이 Thread table에는 User level에 있는 Threads와 같은 정보를 가지고 있게 된다.

이로써 Kernel Threads에 대해서 알 수 있으며, managing process처럼 Threads를 관리할 수 있게 된다는 것이다.

한마디로 User level threads에는 kernel에 process table만 존재했다면, kernel level threads에는 Process table과 더불어 Thread table이 존재한다는 것이다.

 

Threads가 Kernel space에 Implemented 되어 있다면, 같은 process에 대해서 이미 배정된 Thread와 별개로 또 다른 Thread에게 같은 프로세스를 배정할 수 있다.

또한 새로운 non-blocking system calls를 필요로 하지 않는다.

결과적으로 Performance가 향상된다.

다만 In kernel space 구현 방식의 경우는 현실적인 측면에서 비용이 상당히 높은 편이다.

일단은 Kernel 안에 Threads가 구현되어 있다 보니 새롭게 creat 하거나 destroy 하는 과정이 상대적으로 쉽지 않다.

따라서 Thread recycling technique가 사용되고는 한다.


# Hybrid Implementation

Hybrid Implementation 구현 방식의 경우는 User level과 Kernel level에 모두 구현된 방식을 의미한다.

다만 그저 두 가지 구현 방식을 합쳐 놓은 것은 아니다.

우선은 user level에 multiple user threads가 구현되고 multiple user threads가 kener level에 있는 threads로 mapped 된다.

이 경우 결과적으로 user level에 있는 다중 Threads가 Kernel level에 있는 다중 Threads로 mapped 되고 다중 프로세서로 처리가 이루어지는 걸 의미한다.

현실적인 측면에서 다 좋아 보이는 Hybrid implementation은 구현이 상대적으로 어렵다는 단점을 가지고 있다.


728x90

댓글