본문 바로가기
OS/os 공부

4. Thread Management

by Success T.H.I.E.F 2021. 12. 25.

 

Thread 란?

프로세스는 작업을 하기 위한 자원을 요청해 할당받고 이 자원을 제어하여 원하는 목적을 얻어내는 과정이다.

이 과정에 있어 제어부분만 따로 떼어내어 것을  Thread라 이해하자

제어 담당(팔)->thread

 

하나의 프로세스 안에 여러개의 스레드가 존재할 수 있으며

이 프로세스들은 자원을 공유한다.

 

스레드의 개념

Light weight Processs

Process는 원래 자원과 제어가 필요한데 여기서 제어만 따로 떼어내었기 때문에 가벼운 프로세스라고도 할 수 있다.

 

프로세서(CPU) 활용의 기본단위

 

구성요소

> 1. TID(Threst ID)

2. Register Set(Program Counter, Stack Pointer 등)

3. Stack(local data)

 

제어 요소 외에 코드, 데이터, 기타 자원은 프로세스 내의 다른 스레드와 공유한다.

 

전통적 프로세스는 단일 스레드 프로세스

현재 는 멀티 스레드

스레드의 장점

1. 사용자 응답성(Responsiveness)

> 여러개의 스레드가 있으면 일부 스레드의 처리가 지연되어도 다른 스레드는 독립적 작업공간에서 일하기에 계속할 수 있다. 

 

2. 자원을 공유(Resource sharing)

자원을 공유하기 때문에 효율성이 증가( 커널의 개입을 피할 수있다 -> context switch를 줄일 수 있다.)

 

3. 경제성(Economy)

프로세스를 생성하거나 컨텍스트 스위칭에 비해 효율적이다.

 

4. 멀티 프로세서 활용

동시에 여러 작업을 진행가능하는 병렬 처리를 통해 성능 향상을 할 수 있다.

 

스레드(Thread) 구현

1. 사용자 수준 스레드(User threads)

스레드를 라이브러리 레벨로 구현한 것으로 이 라이브러리가 스레드의 생성 스케쥴링 등을 한다. 

ex) POSIX threads, Win32 Threads, Java thread API 등이 있다.

 

커널은 이 스레드의 존재를 모르므로 커널의 개입을 받지 않아 생성 및 관리에 있어 부하가 적고 유연한 관리가 가능하며 이식성이 높다는 장점이 있다.

 

하지만 커널은 프로세스 단위로 자원을 할당하기 때문에 single-threaded kernel의 경우 하나의 스레드가 block 될 경우 모든 스레드가 대기하는 단점이 있다.

 

2. 커널 수준 스레드(Kernel Threads)

커널 영역에서 스레드의 생성 관리를 OS(kernel)이 직접 관리하겠다는 것이다.

커널이 관리하니 Context switching 등 오버헤드가 크다는 단점이 있다.

 

하지만 커널이 각 스레드를 개별적으로 관리해 주기 때문에 프로세스 내의 스레드들이 병행 수행이 가능하고 하나의 스레드가 block상태가 되어도 다른 스레드는 계속해서 작업 수행이 가능하다는 이점이 있다.

 

3. 혼합형(n:m) 스레드(Multi-Threading Model)

사용자 수준 스레드와 커널 수준 스레드의 장점을 합쳐 혼합형 스레드가 나왔다.

n개의 사용자 수준 스레드 m개의 커널 스레드로 구성되어있고 n> m의 조건이 있다.

 

혼합형 스레드 모델에서는사용자는 원하는 만큼의 스레드를 사용하고 커널 스레드는 자신에게 할당된 하나의 사용자 스레드가 block이 되어도 다른 스레드 수행하는 병행 처리가 가능하므로 효율적이면서도 유연한 장점이 있다.