• os
  • thread
  • scheduling

Thread Scheduling: 경합 범위 PCS와 SCS

스레드 스케줄링의 대상과 LWP의 역할, 경합 범위인 PCS와 SCS의 차이와 장단점을 정리한다.

시리즈 · 운영체제9 / 18
  1. 운영체제의 유형
  2. System Call과 Dual Mode
  3. 인터럽트와 폴링
  4. 프로세스와 PCB, 프로세스의 상태 변화
  5. 프로세스 주소 공간과 Stack이 높은 주소부터 할당되는 이유
  6. 스레드: 사용자·커널 수준 스레드와 Thread Pool, Fork-Join
  7. Context Switching
  8. 프로세스 스케줄링: 단계와 알고리즘
  9. Thread Scheduling: 경합 범위 PCS와 SCS
  10. 경쟁 상태와 상호 배제: Thread Safe, 데커·피터슨 알고리즘
  11. 뮤텍스와 세마포, 모니터
  12. 교착 상태: 발생 조건과 해결 방법
  13. 메모리 계층 구조와 캐시 메모리
  14. 메모리 관리: 주소 바인딩과 연속 메모리 할당
  15. 가상 메모리: Paging과 Segmentation, TLB
  16. 요구 페이징과 페이지 교체 알고리즘, Thrashing
  17. File Descriptor와 File System, I-Node
  18. 동기/비동기와 블로킹/논블로킹, I/O Multiplexing

Process Scheduling을 스터디하던 중 Thread Scheduling에 대한 질문에 답하지 못해 이번 기회에 정리한다. 전제가 되는 User Level Thread와 Kernel Level Thread의 차이, 매핑 모델은 스레드 글에 정리해 두었다.

스케줄링되는 대상

  • 커널이 스케줄링하는 대상은 커널 수준 스레드다.
  • 사용자 수준 스레드는 스레드 라이브러리가 관리하며, 커널은 그 존재를 알지 못한다.

Light Weight Process (LWP)

LWP는 User Thread가 CPU 자원에 접근할 수 있도록 User Thread와 Kernel Thread 사이에서 인터페이스 역할을 한다. 스레드 라이브러리는 프로세스의 어떤 스레드를 어느 LWP에서 얼마 동안 실행할지 스케줄링한다.

경합 범위

스레드를 스케줄링하려면 스케줄링 정책과 우선순위 외에 경합 범위(Contention Scope) 를 정해야 한다. 스레드가 누구와 자원을 두고 경쟁하는지에 대한 구분이다.

프로세스별 PCS·SCS 스레드와 LWP, 커널 스레드의 연결

Process Contention Scope (PCS)

  • 경쟁 대상이 같은 프로세스 안의 스레드다.
  • LWP에 접근하기 위해 경합한다.
  • 우선순위는 개발자가 스레드를 생성할 때 정할 수 있다.

System Contention Scope (SCS)

  • 시스템에 존재하는 모든 스레드와 경쟁한다. CPU에 어떤 커널 스레드를 올릴지 정할 때 쓰는 범위다.
  • 스레드 라이브러리에 의해 각자 LWP에 연결되고, 시스템 스케줄러가 커널 자원에 접근하도록 스케줄링한다.
  • POSIX Pthread 라이브러리는 스레드 생성 시 경합 범위를 지정하는 pthread_attr_setscope 함수를 제공한다.

결국 두 범위의 차이는 스케줄링 방식의 차이라고 생각한다. 스케줄링을 운영체제가 하는지 스레드 라이브러리(개발자가 정한 우선순위)가 하는지, 그리고 경쟁 대상의 범위가 어디까지인지가 다르다.

PCS와 SCS가 함께 있을 때

시스템 스케줄러가 프로세스에 CPU 자원을 할당하면, PCS 스레드는 그 안에서 스레드 라이브러리의 우선순위에 따라 자원을 나눠 쓴다. SCS 스레드는 시스템 스케줄러의 우선순위에 따라 자원을 할당받고, LWP와 Kernel Thread를 통해 커널에 접근한다.

장단점

  • PCS는 컨텍스트 전환, 동기화, 스케줄링이 모두 사용자 공간에서 이루어지므로 시스템 호출이 줄어 성능이 좋다.
  • PCS 스레드는 하나 이상의 LWP를 공유한다. 반면 SCS 스레드는 스레드마다 별도의 LWP가 연결된다.
  • 따라서 Kernel Thread와 LWP의 수가 SCS 스레드 수에 따라 크게 늘어나고, 스케줄링과 동기화를 처리하는 커널의 복잡성이 커진다. 이 때문에 SCS 스레드는 생성이 제한되며, PCS 스레드보다 적게 유지해야 한다.