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 |