본문 바로가기
OS

[OS] 스레드(Threads)

by 당코 2023. 9. 14.

스레드(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