운영체제

08. 멀티스레딩

syom 2021. 9. 8. 12:25

Thread 의 타입

  1. user thread
    • 커널 서포트 없이 유저 모드에서 관리됨
    • 유저 스페이스
  2. kernel thread
    • OS가 CPU core 를 직접 설정해서 사용
    • 커널 스페이스

유저 스레드와 커널 스레드의 관계

커널모드 위에서 유저모드가 돌아감

  • Many-to-One Model
  • One-to-One Model
  • Many-to-Many Model

요즘 자주 사용되는 스레드 라이브러리

  • POSIX Pthreads
  • Windows thread
  • Java thread(유닉스라면 pthrad, 윈도우면 윈도우꺼 사용)

Pthreads

  • POSIX 기본 규격 (IEEE 1003,1c)

Implicit Threading 방법

  • 동시, 병렬적인 앱을 디자인하는 것은 멀티코어, 멀티스레딩을 디자인하는것과 같다 ⇒ 어렵다
  • 그래서 컴파일러, 라이브러리가 알아서 해주는 것
  • Thread pools (스레드 풀링)⇒ 너무 많은 스레드를 유저가 만들게 하지 않도록 미리 몇개를 만들어놔서 쓰는게 효과적
  • ⇒ 여러 개의 스레드를 풀에 넣어놓고 필요할때 쓰는 것
  • create & joinexplicit → 사용자가 스레드에 직접 관여하는 것
  • implicit → 운영체제가 관리하는 것
  • ⇒ explicit(명시적) 스레딩이 있고 implicit(암시적) 하게 스레딩하는 방법도 있다(?)
  • OpenMP
  • ⇒ 컴파일러 지시어(compiler directive)를 이용하여 C 나 C++ 에서아주쉽게 병렬처리 할 수 있도록 지원
  • Grand Central Dispatch (GCD)
  • ⇒ Apple 이나 iOS 에서 사용됨

OpenMP

  • parallel region 만 지정해주면 알아서 병렬적으로 실행되는 것#include <stdio.h> #include <omp.h> int main(void) { #pragma omp parallel { printf("parallel region\\n"); } // 병렬 처리 되는 영역 }
    • 컴파일시 -fopenmp 플래그 추가해야함
    #include <stdio.h> #include <omp.h> int main(void) { omp_set_num_thread(4); // 개수를 지정할 수도 있다 #pragma omp parallel { printf("openMP thread: %d\\n", omp_get_thread_num()); } // 병렬 처리 되는 영역 }#pragma omp parallel for : 반복문 사용
  • 반복문같은 경우 그냥 실행하는것 보다 시간이 단축됨

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

10. 스케줄링 알고리즘  (0) 2021.09.10
09. CPU 스케줄링  (0) 2021.09.09
07. 스레드의 이해  (0) 2021.09.07
06. 프로세스간 통신의 실제  (0) 2021.09.06
05. 프로세스간 통신  (0) 2021.09.05