참고 : [Course] Operating System (CPA310) - 운영체제 강의


[ 운영 체제 5강. 스레드 관리 ]

1. Process & Thread

  • 자원(Resource)은 프로세스에 할당된다!

  • 프로세스는 자원(Resource)을 제어한다!

    • 자원 & 제어를 “Thread”라고 하고,
    • 하나의 프로세스에는 여러 개의 Thread가 있을 수 있다.


figure2

  • 프로세스안에 여러 개의 thread가 존재할 수 있고,
  • 각 thread는 자기만의 제어를 할 수 있음
  • 이 thread들이 사용하는 resource는 서로 공유함


(1) 프로세스에 할당된 메모리 공간

같은 프로세스들 ( 내의 여러 스레드들은 ) 동일한 주소 공간을 공유한다!

그 안에, 자신만의 할당된 stack을 가진다.

figure2


(2) 요약

  • Thread = “LIGHT” weight process (LWP)
    • 이유? 프로세스는 자원+제어를 가지고 있어야 하는데, 쓰레드는 “자원은 공유”하고, “제어”만 각자 가지고 있기 떄문에, 일반 프로세스보다는 가볍기 때문!
  • 프로세서 활용의 “기본 단위”
  • 구성 요소
    • 1) Thread ID
    • 2) Register Set ( ex. PC (Program Count), SP (Stack Pointer) )
    • 3) Stack ( 자신만의 Stack 영역)
  • 다른 스레드들과 함께 자원 공유!
  • 전통적 process = “단일 thread” process!


(3) Single vs Multi thread

figure2

figure2


(4) Thread의 장점

  • 1) 사용자 응답성

    • 특정 스레드 지연되어도, 다른 스레드는 작업 계속 OK
  • 2) 자원 공유를 통한 효율성 UP

    • process 1 & 2 둘다 자원 A 사용 중인 상황. process 1이 A를 사용하는 동안은, process 2는 대기 중

      ( 번갈아 가면서 사용 중 ( =context switching 발생 중 )

    • 이게 “process” 대신 “thread”라면, 둘이 자원을 공유하므로, context switching이 발생하지 않아서 보다 효율적으로 사용 가능!

  • 3) 경제성 (Economy)

    • 프로세스를 새로 생성하거나, context switch를 하는 것에 비해 효율적이다
  • 4) Multi-processor 활용

    • 병렬 처리 OK ( 여러 CPU core 동시 사용 가능 )


스레드 사용의 예시

컴퓨터 게임 중..

  • 1) 화면 출력
  • 2) 사용자의 입력
  • 3) 스피커/마이크

스레드 3개를 이용하자!


(5) Thread의 구현

  1. 사용자 수준 thread
  2. 커널 수준 thread


사용자 수준 thread

  • Thread를 라이브러리 레벨로 구현함
  • 커널은 thread의 존재를 모른다
    • 커널의 관리 X ( 더 효율적 & 유연하다 )
      • 이식성이 높음 ( ex. JVM만 있으면 돌아감 )
    • 커널은 “프로세스” 단위로 자원을 할당함
      • 하나의 thread가 block시, 모든 thread가 대기해야함

figure2


커널 수준 thread

  • Thread를 커널이 직접 관리함! ( 따라서 overhead가 클 수 밖에 없음 . Context Switching 등 )

  • 프로세스 내 “thread들이 병행 수행 가능”

figure2


2. Multi-Thraeding Model

(1) 다대일(n:1) 모델

  • 사용자 수준 thread


(2) 일대일(1:1) 모델

  • 커널 수준 thread

(3) 다대다(n:m) 모델 ( 혼합형 스레드 모델 )

  • (1), (2) 모두 사용하자

  • n>m
  • 혼합형 스레드라고도 부름


n개 사용자 수준 스레드 & m개의 커널 스레드 구조

  • 사용자는 원하는 수 만큼의 스레드 사용

  • 커널 스레드는, 자신에게 할당된 1개의 사용자 스레드가 block이어도, 다른 스레드는 OK

    ( 병행 처리 OK )

  • 효율적 & 유연함


figure2