[OS] Lecture 4. Thread management - kibitzing/EnGrow GitHub Wiki

유튜브 링크


진구

  • 프로세스에 비해 가볍고
  • 싱글에 비해 효율적

멀티 프로세스 vs 멀티 스레드

  • 자원을 공유했을 때 효율적인가?
  • 게임같은 경우는 공유를 해야만 되겠다..

사용자 레벨 스레드와 커널 레벨 스레드

멀티 커널 레벨 스레드와 멀티 프로세스와 차이는 무엇일까요?


세영

Lecture 4 - Thread Management

스레드

  • 프로세스: 리소스를 제어하는 것
  • 리소스 영역:
    • 코드, 전역 데이터, 힙, …
  • 제어 영역 (스레드, 여러 개가 생길 수 있음):
    • 제어 정보 (PC, Stack Pointer, …)
    • 지역 데이터, 스택, …
    • 하나의 리소스 영역을 공유
  • 프로세스의 스레드는 동일한 메모리 공간을 공유
    • [코드 - 데이터 - 힙 → … ← … - 스레드 3 스택 - 스레드 2 스택 - 스레드 1 스택]
  • CPU 활용의 기본 단위
  • Thread ID, Register Set (PC, SP), Stack(local data) 등으로 구성됨

  • 장점
    • 사용자 응답성 (스레드 하나가 지연되어도 다른 스레드는 작업 처리)
    • 자원 공유, 경제성 (동일한 프로세스에서 자원을 공유하므로 Context Switching 없이 사용 가능)
    • 멀티 프로세서 활용 (병렬 처리)

스레드 구현

사용자 수준 스레드 (n:1 mapping)

  • 스레드 라이브러리 (POSIX, Win32, Java thread API등) 활용
  • 커널은 스레드가 몇 개인지 모름 (라이브러리가 관리해주기 때문)
    • 유연한 관리, 생성 및 관리 부하 적음, 이식성 높음
  • 단점: 하나의 스레드가 block상태가 되면 모든 스레드가 대기

커널 수준 스레드 (1:1 mapping)

  • 커널이 직접 관리하는 스레드
  • 스레드들의 병렬 수행 가능
  • 단점: 오버헤드가 큼 (Thread context switching이 존재)

혼합형 스레드 (n:m mapping)

  • n개의 사용자 수준 - m개의 커널 스레드 (n > m)
  • 중간에 경량 프로세스를 두어 여러 개의 스레드를 관리
  • 사용자는 원하는 수만큼 스레드 사용
  • 커널 스레드는 자기한테 할당된 사용자 스레드가 block 상태가 되어도 다른 스레드 수행 가능

진성