운영체제 (13) - Thread(쓰레드)

@JHSHIN·2023년 4월 27일
0
post-thumbnail

운영체제 수업을 수강하며 정리한 내용을 작성하려고 합니다.

Brief review of Process

  • Process - abstraction for
    • Execution unit : (CPU) 스케줄링 단위
    • Protection domain : 소유하고 있는 자원 (메모리 등)에 대한 보호
  • Program과 Process의 관계
    • Executing program with a single thread of control
  • 지금까지 프로세스 개념
    • 하나의 실행 흐름을 가지고 실행 중인 프로그램

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

스레드란?

  • 스레드
    • 프로세스 내부의 실행 단위
    • 소스코드가 같아도 서로 다른 프로그램 카운터, 레지스터셋, 스택을 가짐
      • 나머지: 프로세스 내 스레드간 공유되는 영역
  • 멀티스레드 프로그램
    • 실행 지점을 둘 이상 가지고 있음
    • 여러 개의 프로그램 카운터
  • 스레드를 왜 사용하는가?
    • 하나의 프로세스에는 하나의 control만이 존재하기 때문에 한 번에 하나의 일만을 처리
    • 프로세스에서 할 작업을 여러 개로 나눈 후에 각각을 스레드화 한다면 병렬적으로 작업을 완수할 수 있음
  • IPC 기반의 협력적 프로세스와의 차이점
    • 프로세스간 통신이 필요 → 비용 소모
    • 프로세스 간의 문맥 교환 비용
    • 스레드로 만든다면 보다 적은 비용으로 동일한 일을 수행할 수 있음

프로세스 vs 스레드

  • 프로세스
    • 프로세스 간 Protection Domain 존재
      • 직접적으로 다른 프로세스의 메모리에 접근 불가
    • 무거움: 문맥 교환에 더 많은 작업이 필요함
  • 스레드
    • 코드, 데이터, 힙 영역이 스레드 간 공유
    • 가벼움: 프로세스 내 스레드 간 더욱 효율적인 스위칭
      • 같은 주소 공간을 공유하기 때문!

멀티스레드 프로그램의 장점

  • 반응성
    • 프로그램의 어느 부분을 담당하는 스레드가 block되거나 시간이 걸리는 작업을 하더라도, 다른 스레드들은 실행되고 있기 때문에 사용자의 입장에서는 그 프로그램이 interactive하다고 볼 수 있음
  • 자원 공유
    • 스레드간 프로세스의 메모리 다수와 다른 자원들을 공유
  • Scalability
    • 여러 개의 스레드가 각각 다른 프로세서에서 동시에 실행 가능(병행)
  • 경제성
    • 스레드들은 단일 프로세스 메모리 영역에서 실행되기 때문에 새로운 프로세스를 생성하는 것보다 스레드를 생성하는 것이 비용이 적게 들어감

스레드 간 문맥 교환

  • 스레드 간에도 문맥 교환이 필요한가?
    • 각각의 스레드는 프로그램 카운터와 레지스터 셋을 가지고 있음
  • 하나의 스레드에서 다른 스레드로 스위칭할 때
    • 레지스터 상태 T1이 저장됨
    • 레지스터 상태 T2를 가져옴
    • 주소 공간은 동일하게 유지
  • 각 스레드별로 지니는 정보를 저장하기 위한 자료구조가 필요함

스레드 구성 요소(커널의 자료구조)

  • TCB
    • 스레드 ID - 스레드 식별자
    • 프로그램 카운터 - 현재 실행중인 instruction의 주소
    • 레지스터 셋 - CPU의 레지스터 값들
    • 스레드 별 스택
  • 동일한 프로세스 내에 있는 스레드가 공유하는 것
    • 코드 - 프로그램의 코드 영역
    • 데이터 - 프로세스의 데이터 영역
    • 파일 - 프로세스에서 open한 file
  • 위의 이유로 스레드 스위칭 비용이 적음

Concurrency vs Parallelism

  • Concurrent execution: 단일 프로세서/코어가 concurrency를 제공할 수 있음

  • Parallelism

병렬처리

  • 멀티코어 혹은 멀티프로세서 시스템이 개발자에게 challenging함
    • Dividing activities
    • Balance
    • Data splitting
    • Data dependency
    • Testing and debugging
  • 병행: 시스템이 동시에 하나의 task보다 더 수행할 수 있음
    • 멀티 코어가 필수적임

병행의 종류

  • Data parallelism
    • 다른 데이터 집합에 각각 동일한 작업
  • Task parallelism
    • 동일한 데이터에 각각 다른 작업

AI 학습에서의 parallelism

  • 기계들 사이에서의 병행
    • 커뮤니케이션 개입

스레드의 종류

  • Kernel thread와 User thread
    • 운영체제가 발전해오는 과정과 연관
  • Kernel thread와 User thread의 관계(매핑)
  • 스레드 관리 이슈

유저 스레드

  • User level의 라이브러리를 통해 구현
    • 유저레벨 라이브러리에서 스레드를 생성, 스케줄링과 관련된 관리를 해줌
    • e.g., POSIX Pthreads, Windows threads, Java threads
  • 장점: 동일한 메모리 영역에서 스레드가 생성, 관리되므로 속도가 빠름
  • 단점: 여러 개의 유저 스레드 중에서 하나의 스레드가 system call 요청으로 block이 된다면 나머지 모든 thread 역시 block됨
    • 커널은 여러 개의 유저 스레드를 하나의 프로세스로 간주하기 때문

커널 스레드

  • 운영체제에서 스레드를 지원
    • 커널 영역에서 스레드의 생성, 스케줄링 등을 관리
    • e.g., 대부분의 general-purpose OS (윈도우, 리눅스, 맥 등)
  • 장점: 높은 수준의 concurrency
    • 스레드가 시스템 콜을 호출하여 block이 되면, kernel은 다른 스레드를 실행함으로써 전체적인 thread blocking이 없음
  • 단점: 스레드 생성 관리 비용이 큼
    • 유저 스레드보다 생성 및 관리가 느림
    • 커널 레벨의 context와 metadata 관리 필요.

User to Kernel: mapping methods

  • Many-to-One

    • 여러 개의 유저 레벨 스레드들이 하나의 커널 스레드로 매핑됨
      • 커널 스레드를 지원하지 못하는 시스템에서 사용됨
    • 한계점: 한번에 하나의 스레드만 커널에 접근 가능
      • 하나의 스레드가 커널에 접근(시스템 콜 호출)하면 나머지 스레드들은 대기
      • 진정한 concurrency는 지원하지 못함
      • 동시에 여러 개의 스레드가 시스템 콜 사용 불가
    • 커널의 입장에서 여러 개의 스레드는 하나의 프로세스이기 때문에 멀티프로세서라도 여러 개의 프로세서에서 동시에 수행 불가능
  • One-to-One

    • 유저 스레드 생성 시 그에 따른 커널 스레드가 생성됨
      • 즉, 각 유저 스레드 별 커널 스레드가 1대1로 매핑됨
    • 장점: Many-to-One에 비해 높은 concurrency 제공 가능
      • Many-to-One의 한계 - 시스템 콜 호출 시 다른 스레드들이 Block되는 문제를 해결
    • 한계
      • 커널 스레드도 한정된 자원이기 때문에 무한정 생성할 수 없음
      • 스레드를 생성, 사용하려 할 때 그 개수에 대한 고려가 필요
    • e.g., Windows, linux
  • Many-to-Many

    • 여러 개의 유저 스레드를 여러 개의 커널 스레드로 매핑
      • Many-to-One과 One-to-One model의 문제점을 해결
    • 장점: 운영체제가 필요한 수 만큼의 커널 스레드를 생성할 수 있음
      • One-to-One처럼 사용할 스레드의 수에 대해 고민할 필요 없음
      • Many-to-One처럼 스레드가 시스템 콜을 사용할 경우, 다른 스레드들이 block되는 현상에 대해 걱정할 필요 없음
    • 단점: 관리 복잡도
    • 생각보다 빈번히 사용되지 않음
profile
We Need Better UX

0개의 댓글