본문 바로가기

운영체제

4)스레드 관리

1)프로세스(Process)와 스레드(Thread)

프로세스가 자원을 할당받고 제어해서 원하는 목적을 달성하는 것이 프로세스가 하는 일이다.

여기서 제어만 따로 떼어서 놓은 것을 쓰레드라고 한다.

제어는 여러 쓰레드에서 나눠서 하고 리소스는 공유한다.

 

2)스레드(Thread)

- Light Weight Process (LWP)

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

- 구성요소

> Thread ID

> Register set(PC, SP 등)

> Stack (i.e. local data)

- 제어 요소 외 코드, 데이터 및 자원들은 프로세스 내 다른 스레드들과 공유

- 전통적 프로세스 = 단일 스레드 프로세스

 

3)Single-thread vs Multi-threads

싱글 스레드

멀티 스레드

 

4)스레드의 장점

- 사용자 응답성(Responsiveness)

> 일부 스레드의 처리가 지연되어도, 다른 스레드는 작업을 계속 처리 가능하다.

 

- 자원 공유(Resource sharing)

> 자원을 공유해서 효율성이 증가한다.(커널의 개입을 피할 수 있음)

> 예) 동일 address space에서 스레드 여러 개

 

- 경제성(Economy)

> 프로세스의 생성, context switch에 비해 효율적

> 컨텍스트 스위치는 매우 비싼연산이고 가능한 피하는 것이 좋다
> 쓰레드가 자원을 공유한다면 context switching을 피할 수 있다.

 

- 멀티 프로세서(multi-processor) 활용

> 병렬처리를 통해 성능 향상

 

5)스레드의 사용 예

만약 싱글 스레드일 때 I/O가 발생한다면 run -> block -> ready -> run을 거치게 되는데 

화면을 출력하고 있을 때 마우스를 돌리면 마우스를 돌릴 동안 화면은 잠깐 멈출 것이다. 

해결책은 I/O별로 스레드를 만들어주는 것이다.

 

6)스레드의 구현

사용자 수준 스레드 (User Thread)

- 사용자 영역의 스레드 라이브러리로 구현 된다.

> 스레드의 생성, 스케쥴링 등

> POSIX threads, Win32 threads, java thread API 등

 

- 커널은 스레드의 존재를 모른다.

> 커널의 관리(개입)를 받지 않는다.

>생성 및 관리의 부하가 적고 유연한 관리가 가능하다.

> 이식성(portability)이 높다.

 

- 커널은 프로세스 단위로 자원을 할당한다.

> 하나의 스레드가 block 상태가 되면, 모든 스레드가 대기한다.

> 커널 수준에서 스레드는 하나인데 사용자 수준에서 스레드가 여러 개 일 때 커널 수준의 스레드가 정지되면 모든 스레드가 기다려야 한다.

 

커널 수준 스레드 (Kernel Threads)

- OS(Kernel)가 직접 관리

- 커널 영역에서 스레드의 생성, 관리를 수행한다.

> Context switching 등 부하(Overhead)가 크다.

 

- 커널이 각 스레드를 개별적으로 관리한다.

> 프로세스 내 스레드들이 병행 수행이 가능하다.

> 하나의 스레드가 block 상태가 되어도, 다른 스레드는 계속 작업 수행이 가능하다.

 

3.Multi-Threading Model

- 다대일(n:1) 모델

> 사용자 수준 스레드

 

- 일대일(1:1) 모델

> 커널 수준 스레드

 

- 다대다(n:m) 모델

> n > m

> 혼합형 스레드

 

혼합형 (n:m) 스레드

- n개 사용자 수준 스레드와 m개의 커널 스레드 (n > m)

> 사용자는 원하는 수만큼 스레드를 사용한다.

> 커널 스레드는 자신에게 할당된 하나의 스레드가 block 상태가 되어도, 다른 스레드 수행이 가능하다.

> 효율적이면서도 유연하다.

 

'운영체제' 카테고리의 다른 글

5)프로세스 스케쥴링  (0) 2021.11.03
3)프로세스 관리  (0) 2021.11.02
2)운영체제 개요  (0) 2021.11.02
1)컴퓨터 시스템 개요  (0) 2021.11.01