logo
Published on

OS : 스레드관리

Authors
  • avatar
    Name
    Bora Choi
    Twitter

📚 스레드의 개념

🧠 프로세스(process)와 스레드(thread)

  • 프로세스 : 리소스를 제어하는 것

    • 자원 : 코드, 전역데이터, 힙 등
    • 제어 : 제어 정보 , 지역 데이터 , 스택 등
  • 스레드 : 하나의 프로세스안에 여러개 존재할 수 있다. 프로세스가 할당받은 리소스는 공유한다. 각각의 제어요소를 가지고 있다.

🧵 스레드

  • Light Weight Process(LWP) : 자원은 공유하기 때문
  • 프로세서(e.g CPU) 활용의 기본 단위
  • 구성요소 : Thread ID, register set(PC,SP 등), Stack(i.e. local data)
  • 제어 요소 외 코드, 데이터 및 자원들은 프로세스 내 다른 스레드들과 공유
  • 정통적 프로세스 = 단일 스레드 프로세스

👍 스레드의 장점

  • 사용자 응답성(Responsiveness) : 일부 스레드의 처리가 지연되어도, 다른 스레드는 작업을 계속 처리 가능
  • 자원 공유(Resource sharing) : 자원을 공유해서 효율성 증가(커널의 개입을 피할 수 있음)
  • 경제성(Economy) : 프로세스의 생성, context switch에 비해 효율적
  • 멀티 프로세서(multi-processor) 활용 : 병렬처리를 통해 성능 향상

✨ 스레드의 구현

👯‍♀️ 사용자 수준 스레드(User thread)

  • 사용자 영역의 스레드 라이브러리로 구현 됨
    • 스레드의 생성, 스케줄링 등
    • POSIX thread, Win32 threads, Java thread API 등
  • 커널은 스레드의 존재를 모름
    • 장점 커널의 관리(개입)를 받지 않음 : 생성 및 관리의 부하가 적음, 유연한 관리 기능, 이식성이 높음
    • 단점 커널은 프로세스 단위로 자원 할당 : 하나의 스레드가 block 상태가 되면, 모든 스레드가 대기(single-thread kernel의 경우)

🦸‍♀️ 커널 수준 스레드(Kernel thread)

  • OS(Kernel)이 직접 관리
  • 단점 커널 영약에서 스레드의 생성, 관리 수행 : Context switching 등 부하(Overhead)가 큼
  • 장점 커널이 각 스레드를 개별적으로 관리 : 프로세스 내 스레드들이 병행 수행 가능. 하나의 스래드가 block 상태가 되어도, 다른 스레드는 계속 작업 수행 가능

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

  • n개 사용자 수준 스레드 - m개의 커널 스레드(n>m)
    • 사용자는 원하는 수만 큼 스레드 사용
    • 커널 스레드는 자신에게 할당된 하나의 사용자 스레드가 block 상태가 되어도, 다른 스레드 수행 가능 : 병행 처리 가능
  • 효율적이면서도 유연함