스레드(Threads)
Threads란 프로세스 내에서 실행되는 흐름의 단위이다.
하나의 프로세스에 Threads가 하나 있으면 single-threaded process이고 여러 개 있는 경우 multi-threaded process라 한다.
이때 하나의 프로세스에 있는 Threads들은 code, data, files을 서로 공유한다.
멀티스레드의 장점
응답성(Responsiveness)
- 만약 유저 인터페이스 같이 중요한 곳에 프로세스의 일부가 block 되어도 실행을 계속할 수 있다.
- 하나의 스레드가 block 되어도 다른 스레드가 여전히 실행되어 사용자들에게 output을 제공할 수 있다.
자원 공유(Resource sharing
- 스레드는 공유 메모리와 메시지 전달 방식보다 더 쉽게 프로세스의 자원을 공유할 수 있다
- IPC가 필요하지 않다.
경제성(Economy)
- 스레드를 생성, 삭제하는 것은 프로세스를 생성, 삭제하는 것보다 시간이 적게 든다.
- 같은 프로세스 내의 스레드 간의 교환이 빠르게 가능하다.
- 각 스레드는 stack, memory 공간만 필요하여 적은 자원을 사용한다.
규모 적용성
- 멀티 프로세서 구조에서 스레드가 다른 프로세서에서 병렬적으로 수행이 가능하다는 장점이 있다.
다중 코어 프로그래밍(Multi-core programming)
single-core system에서는 한 번에 하나의 프로세스만 실행을 한다.
CPU 스케줄러가 context switch를 통해 빠르게 모든 프로세스를 번갈아 가면서 실행하여 병렬적으로 실행하는 것처럼 보이지만 한 번에 하나의 task을 수행하는 방식이다.
이러한 방식을 Concurrency라고 한다.
multi-core system에서는 코어마다 각각의 스레드를 할당할 수 있기 때문에 같은 시간에 여러 스레드의 실행이 가능하다.
이렇게 하나 이상의 task를 동시에 실행가능하게 하는 시스템을 Parallel이라고 한다.
다중 스레드 모델
스레드는 사용자 수준에서 User Thread, 커널 수준에서 Kernal Thread로 제공될 수 있다.
다대일 모델(Many-to-One)
여러 개의 user thread를 하나의 kernal thread로 매핑한다.
장점
- 스레드 전환에 커널이 포함되지 않아 모드 전환이 없다.
- 스케줄링은 응용프로그래밍에 따라 달라질 수 있어 best algorithm을 선택할 수 있다.
- 사용자 수준 스레드는 모든 OS에서 실행 가능하다.
단점
- kernal thread가 block 되면 모든 스레드가 block 된다.
- 한 번에 한 스레드만 kernal로 접근할 수 있기 때문에 parallel 하게 실행할 수 없다.
일대일 모델(One-to-One)
user thread와 kernal thread를 일대일로 매핑한다.
장점
- 하나의 스레드가 block 되더라도 다른 스레드는 정상적으로 실행될 수 있어 parallel 하게 실행 가능하다.
단점
- user thread를 생성할 때 그에 따른 kernal thread도 함께 생성해야 한다.
- kernal thread의 숫자가 너무 크면 성능을 저하시킬 수 있으므로 kernal thread의 수를 제한해야 한다.
다대다 모델(Many-to-Many)
여러 개의 user thread를 그보다 작거나 같은 수의 kernal thread로 매핑한다.
두 수준 모델(Two-level)
다대다 모델과 일대일 모델을 결합한 모델이라고 볼 수 있다.
'OS' 카테고리의 다른 글
[OS] 교착상태(Deadlock) (0) | 2023.10.04 |
---|---|
[OS] 프로세스 동기화 (0) | 2023.09.27 |
[OS] CPU 스케줄링(CPU Scheduling) (0) | 2023.09.20 |
[OS] 프로세스 (0) | 2023.09.06 |
[OS] 운영체제 구조 (0) | 2023.08.30 |