학교생활/운영체제

[운영체제] Ch4(2)Implicit Threading

sh1256 2022. 10. 13. 16:56
728x90

Implicit Threading

: 애플리케이션 프로그래머가 쓰레드 생성을 하겠다는 api를 실질적으로 사용하는 것.

--> 더 쉽게 멀티쓰레드를 만드는 것.

 

컴파일러나 라이브러리가 프로그래머 대신에 OS에서 thread를 만들어 준다.

 

1. Thread pool p34

  • 쓰레드를 미리 많이 만들어 놓는다.
  • 미리 만들어 놓으면 프로그램 수행 속도가 더 빠르다.
  • 쓰레드 갯수를 미리 정할수도 있고 동적으로 변화시킬 수도 있다.

2. Fork-Join p37

  • 쓰레드를 세로 만든 후(Fork), 만든 쓰레드에게 일을 시키고 종료되기를 기다린다.(Join)

3. OpenMP(C, C++, FORTURAM) p43

  • 이것을 parallel로 해달라고 컴파일러에게 부탁하는 것
  • #paragma omp parallel

4. Grand Central Dispatch p45

  • ^{ } 안에 parallel 하게 할 부분을 작성한다.
  • Two types of dispatch queues: serial, concurrent
  • dispatch_async( )안에 parallel 하게 할 부분을 작성한다.

5. Intel Threading Building Blocks(TBB)

  • parallel_for( )안에 parallel 하게 할 부분을 작성한다.

Threading Issues

Semenatics of fork() and exec()

프로세스가 fork()and exec()를 할 때 프로세스가 가지고 있는 쓰레드도 모두 함께 복제할 것인가?

 

signal Handling

OS의 디폴트 시그널 핸들러 루틴도 있고 사용자정의 시그널 핸들러 루틴이 있다.

시그널을 받으면 안에 쓰레드가 여러개 있을 때 어떤 쓰레드만 시그널을 받는건가, 아님 모두가 받는건가?

 

Thread cancellation of target thread

target thread:  쓰레드 종료 명령을 받은 쓰레드

1. Asynchronous cancellation: target thread가 즉시 종료된다.

2. Deferred cancellation: target thread의 판단 하에 종료가 지연될 수 있다.

Thread-local storage(TLS)

TLS: 쓰레드마다 독립적으로 가지고 있는 저장공간

Local variable은 스택이기 때문에 함수가 사라지만 같이 사라짐

Scheduler Activations

lightweight process(LWP): 

  • user thread가 활동할려면 LWP를 할당받아야 하고,
  • kernel 쓰레드마다 하나씩 가지고 있는 것이고,
  • Kernel thread가 활동할려면 CPU에게서 할당받아야한다.

upcall: 아래에서 위로(kernel thread에서 user thread로) 어떠한 시그널을 줘서 어떠한 기능이 수행되도록 하는 것.


Operating System Example p58

1. window Threads Data Structures

2. Linux threads