[OS] Signals, Thread Cancellation, Thread Pools & Thread Local Storage

Ko Hyejung·2021년 10월 12일
0

Operating Systems

목록 보기
14/26

Signals

Signals are used in UNIX systems to notify a process that a particular event has occurred.

UNIX 시스템에서 신호는 프로세스에 특정 이벤트가 발생했음을 알리는 데 사용

Received depending on the source and the reason for the signal:

  • Synchronous signals are delivered to the same process that performed the operation that caused the signal

동기식 신호는 신호를 발생시킨 작업을 수행한 동일한 프로세스에 전달

(e.g. illegal memory access, division by 0).

  • Asynchronous signals are generated by an event external to a running process

비동기 신호는 실행 중인 프로세스 외부의 이벤트에 의해 생성

(e.g. terminating a process with specific keystrokes such as Ctrl+C, having a timer expire).

Signal Handling


Signal handling in single threaded programs (c.f. process)

  • Signal is generated by particular event.
  • Signal is delivered to a process.
  • Signal is handled
    (either by default signal handler or user-defined signal handler).
  • 신호는 특정 이벤트에 의해 생성됩니다.
  • 신호는 프로세스에 전달됩니다.
  • 신호가 처리됩니다.
    (기본 신호 핸들러 또는 사용자 정의 신호 핸들러로 설정)

Signal handling in multithreaded programs (options)

  • Deliver the signal to the thread to which the signal applies
    (e.g. synchronous signals).
  • Deliver the signal to every thread in the process
    (e.g. process termination signal).
  • Deliver the signal to certain threads in the process
    (e.g. some asynchronous signals to non-blocking threads).
  • Assign a specific thread to receive all signals for the process.
  • 신호가 적용되는 thread에 신호를 전달합니다.
    (예: 동기식 신호).
  • 프로세스의 모든 thread에 신호를 전달합니다.
    (예: 프로세스 종료 신호).
  • 프로세스 중 특정 thread에 신호를 전달합니다.
    (예: 비동기 스레드로의 일부 비동기 신호).
  • 프로세스에 대한 모든 신호를 수신할 특정 스레드를 할당합니다.

Thread Cancellation


Terminating a thread before it has finished.

Two general approaches:

  • Asynchronous cancellation
    terminates the target thread immediately.
    대상 스레드를 즉시 종료
  • Deferred cancellation
    allows the target thread to periodically check if it should be cancelled
    대상 스레드가 주기적으로 취소 여부를 확인

(cf. cancellation points in Pthreads – pthread_testcancel() function).

Thread Pools

Create a number of threads in a pool where they await work.
작업이 대기 중인 풀에 여러 개의 스레드를 작성

Advantages:

  • Usually slightly faster to service a request with an existing thread than create a new thread.
    일반적으로 새 스레드를 만드는 것보다 기존 스레드로 요청을 처리하는 것이 약간 빠릅니다.
  • Allows the number of threads in the application(s) to be bound to the size of the pool.
    응용 프로그램의 스레드 수를 풀 크기에 바인딩할 수 있습니다.

Thread Local Storage (TLS)


Allows each thread to have its own copy of data.
각 스레드가 고유한 데이터 복사본을 가질 수 있습니다.

Most thread libraries and compilers provide support for TLS.
대부분의 스레드 라이브러리와 컴파일러는 TLS를 지원합니다.

For example, the gcc compiler provides TLS via "static __thread int threadID;"

0개의 댓글