콘텐츠로 바로가기

Threading Models

하나의 주소 공간 내에서 여러 실행 흐름을 물리적으로 구현하고 관리하는 유저 수준, 커널 수준, 그리고 혼합 스레딩 모델의 물리 구조를 다루는 학습 노드입니다.

sys.entry
M

Me

hyunyoun's Blog

posts7 min read

1. Overview

스레딩 모델(Threading Models, THM)은 운영체제가 하나의 '덩어리'인 프로세스를 다시 여러 개의 작은 '흐름'으로 쪼개어 하드웨어의 병렬 연산력을 극대화하는 물리적 분할 체계입니다.

프로세스가 무거운 '가방'이라면, 스레드는 그 안에서 각자의 바느질을 하는 '바늘'과 같습니다. 학습자는 커널이 알지 못하는 **유저 수준 스레드(User-level Threads)**와 커널이 직접 관리하는 **커널 수준 스레드(Kernel-level Threads)**의 물리적 가닥이 CPU 코어에 어떻게 사상(Mapping)되는지 배웁니다. 특히 스레드마다 독립적으로 가지는 **스레드 제어 블록(Thread Control Block, TCB)**과 스택 공간이 프로세스의 전체 메모리 맵 내에서 어떻게 물리적으로 분산 배치되는지 분석합니다. 이를 통해 현대 소프트웨어의 동시성(Concurrency) 성능을 좌우하는 하부 엔진 구조를 이해합니다.

2. Scope & Boundaries

In-Scope

  • Thread Architectures: User-level(Many-to-One), Kernel-level(One-to-One), Hybrid(Many-to-Many) 모델
  • TCB & Thread Stack: 레지스터 세트, 스레드 고유 상태 정보의 커널 및 사용자 공간 배치
  • Multicore Mapping: 하드웨어 가속 스레딩(SMT/Hyper-threading)과 OS 스레드의 물리적 사상
  • Synchronization Physics: 스레드 간 자원 공유 및 물리적 경합(Race Condition) 기초

Out-of-Scope

  • 특정 언어(Java, Go)의 고수준 스레드 라이브러리 상세 (해당 언어 노드로 위임)
  • 동시성 제어를 위한 데이터 알고리즘 (04. Algorithms 영역으로 위임)

Boundaries

  • THM vs. Process: 프로세스가 '물리적 주소 공간의 격리'를 뜻한다면, THM은 '격리된 공간 내부에서의 물리적 흐름 분리'에 집중하여 경계를 설정합니다.

3. Counterexample

  • 단순히 "함수를 동시에 돌리는 것"을 THM이라고 정의하는 것은 부족합니다. 유저 수준 스레드에서 하나의 스레드가 **블로킹 I/O(Blocking I/O)**를 요청했을 때, 왜 프로세스 내의 다른 '모든' 스레드가 함께 멈춰버리는지 물리적 실행권 상실 관점에서 설명할 수 있어야 합니다. 또한 커널 수준 스레드가 유저 스레드보다 왜 생성 및 소멸의 물리적 시간 비용이 더 비싼지 모드 전환(Mode Switch) 관점에서 입증하지 못한다면 THM의 기술적 깊이를 놓친 것입니다.

4. Prerequisites

  • Process Lifecycle & PCB (Basic): PCB와 컨텍스트 스위칭 기초가 필수입니다. (03-02-01 PLP)
  • SIMD & Vector Processing (Recommended): 하드웨어 병렬 구조 이해가 권장됩니다. (02-03-02 SVP)

5. Learning Map

  1. Lightweight Threading: 무거운 프로세스를 가볍게 쪼개어 시작하는 '경량화' 철학을 배웁니다.
  2. The Mapping Maze: 수많은 유저 흐름을 몇 개의 커널 통로로 보낼지 사상(Mapping) 전략을 익힙니다.
  3. TCB Fortress: 각 스레드가 자기만의 비밀 일기장(TCB)과 개인용 작업대(Stack)를 유지하는 법을 분석합니다.
  4. Hardware Handshake: OS 스레드가 실제 CPU의 물리 코어 및 하이퍼스레딩 유닛에 안착하는 과정을 완성합니다.

6. Learning Topics

Basic

Core: 스레드의 정의와 TCB 구조 (Thread Anatomy)

  • Why to Learn: 프로세스 내부에서 무엇이 공유되고 무엇이 격리되는지 알아야 메모리 오염을 막을 수 있기 때문입니다.
  • What to Learn:
    • Shared Resources: 코드, 데이터 영역 및 파일 핸들러의 물리적 공유
    • Thread Private Data: PC, 스택 포인터, 레지스터 셋 전용 보관
    • TCB Structure: 프로세스 수준(PCB) 정보와 독립적인 스레드 제어 물리
  • How to Learn:
    • pthread를 사용하여 여러 스레드를 만들고, 전역 변수와 지역 변수의 주소값이 어떻게 물리적으로 공유/분리되는지 확인 실습
    • 스레드 종료 시 램(RAM)에서 사라지는 영역과 남는 영역 분류 분석
  • Implement: 스레드 아이디(TID)를 기반으로 각 스레드의 개별 스택 주소 범위를 출력하는 코드

Core: 유저 수준 스레드 vs 커널 수준 스레드 (LWP Mechanics)

  • Why to Learn: 모델 선택에 따라 시스템의 성능과 블로킹 대응력이 물리적으로 정반대가 되기 때문입니다.
  • What to Learn:
    • Model 1<1>, N<1>, M:N: 유저 실행체와 시스템 실행체의 물리적 결합 수 분석
    • LWP (Lightweight Process): 리눅스 등에서 스레드를 구현하기 위해 사용하는 커널 인터페이스
    • Context switch overhead: 스레드 간 전환 시 커널 개입 유무에 따른 물리 시간 측정
  • How to Learn:
    • 유저 스레드 라이브러리(Green Threads)와 네이티브 스레드의 블로킹 상황 시 시스템 처리량 비교 실습
    • 리눅스 clone() 시스템 콜이 프로세스와 스레드를 가르는 물리적 인자(Flag) 연구
  • Implement: N:1 모델에서 하나의 스레드가 무한 루프에 빠졌을 때 다른 스레드의 운명을 물리적으로 재현하는 실험

Practical

Core: 스레드 풀링과 자원 제약 (Thread Pooling)

  • Why to Learn: 무분별한 스레드 생성은 시스템의 메모리를 고갈시키고 문맥 교환 지옥(Thrashing)을 부르기 때문입니다.
  • What to Learn:
    • Resource Contention: 과도한 스레드가 CPU 시간과 대역폭을 갉아먹는 물리적 과정
    • Thread Pool Architecture: 미리 만들어둔 스레드를 재사용하여 물리적 할당 비용 제거
    • Stack Size Physics: 각 스레드에 할당된 1MB 단위의 물리적 메모리 점유 압박
  • How to Learn:
    • 스레드 만 개를 한 번에 생성했을 때 운영체제가 내뱉는 물리적 오류(EAGAIN 등) 포착 실습
    • 스레드 풀 적용 전후의 시스템 응답 지연(Tail Latency) 변화 수치 분석
  • Implement: 주어진 큐에 쌓인 요청을 정해진 개수의 스레드가 돌아가며 처리하는 기초 스레드 풀

Advanced

Core: 하드웨어 다중 스레딩 사상 (SMT/Hyper-threading)

  • Why to Learn: 소프트웨어 스레드가 실제 '전기 신호가 흐르는' 하드웨어 실행 유닛에 어떻게 안착하는지 이해하기 위함입니다.
  • What to Learn:
    • Physical vs Logical Cores: 칩 내부의 실행 자원 공유 방식과 OS 인지 구조
    • Hardware Context Switch: 하드웨어가 레지스터 세트 두 벌을 가지고 0ns에 전환하는 물리 메커니즘
    • Cache Contention in SMT: 두 스레드가 하나의 L1 캐시를 경쟁하며 성능이 깎이는 물리 현상
  • How to Learn:
    • 하이퍼스레딩 활성화 유무에 따라 메모리 집약적 작업과 CPU 집약적 작업의 물리 효율 변화 측정 실습
    • 칩셋 데이터시트에서 'Thread architecture' 섹션을 읽고 하드웨어 파이프라인 구조 분석
  • Implement: 특정 스레드를 특정 물리 코어에 고정(Affinity)시켜 실행 성능을 물리적으로 격리하는 코드

7. Terminology

Term (EN / ko, abbr) 1문장 정의 단계(기본/권장/실무/심화) 역할/맥락 관련 개념 유사/대비/함께 사용 오해 포인트 Evidence(Primary/Secondary/Industry) Flags(core)
Thread 프로세스 내에서 실행되는 독립적인 CPU 명령어 흐름의 물리적 단위입니다. 기본 최소 실행 단위 LWP / Stream Process 자원을 '소유'하는 주체는 아님 P1:CS2023 core
TCB 스레드마다 독립적으로 유지하는 레지스터 상태와 우선순위 정보를 담은 커널/사용자 관리 블록입니다. 기본 실행 문맥 보관 PC / SP PCB PCB의 일부분이 아닌 별도 존재 P1:CS2023 core
User Thread 커널의 지원 없이 사용자 공간의 라이브러리에 의해 스케줄링되는 물리 실행체입니다. 추천 고속 제어 Managed / Green Kernel Thread '속도가 무조건 빠르다'는 건 시스템 콜 기준 Industry/Java core
Affinity (어피니티) 특정 스레드를 특정 물리 CPU 코어에만 할당되도록 강제하는 하드웨어 사상 정책입니다. 심화 성능 최적화 Binding / Cache Balancing '자동 분산'과는 반대되는 개념 Industry/Gaming core

8. References

Primary

Secondary

  • [Programming with POSIX Threads] David R. Butenhof — The multithreading classic.
  • [Systems Performance: Enterprise and the Cloud] Brendan Gregg — Threads and CPU physics.

Industry

  • [Intel: Introduction to Hyper-Threading Technology] — Hardware threading standards.
  • [Microsoft: Threading in the Windows Kernel] — NT thread implementation details.

9. Final Checklist

Primary

  • '프로세스'와 '스레드'가 물리 메모리를 대하는 방식(격리 vs 공유)의 차이를 데이터 손상 관점에서 설명 가능한가? (P1)
  • 'TCB'에 저장되어야 하는 '최소한의 물리적 정보'가 무엇인지 CPU의 명령어 실행 주기와 연관 지어 입증할 수 있는 가? (P1)

Secondary

  • 'N<1> 스레딩 모델'이 현대의 멀티코어 하드웨어 자원을 왜 100% 활용하지 못하는지 물리적 사상 구조를 근거로 소통 가능한가?
  • 스레드마다 별도의 '스택 공간'이 할당될 때, 전체 프로세스의 가상 주소 공간에 미치는 물리적 배치를 도출할 수 있는 가?

Industry

  • 실시간 멀티미디어 인코딩 서버 설계 시, 왜 '커널 수준 스레드'를 써야 하드웨어 가속기(GPU/NPU)를 병렬로 제어할 수 있는지 제안할 수 있는 가? (SFIA)
  • 스레드 수가 CPU 코어 수를 훨씬 초과할 때, 왜 전체 처리량이 늘지 않고 '지연 시간(Latency)'만 물리적으로 악화되는지 기술할 수 있는 가?