OS- 2. Threads(쓰레드)

장준표·2020년 4월 24일
0

운영체제

목록 보기
2/2
post-thumbnail

Process 모델의 한계점

  • Cooperation 프로세스의 관점
    웹 서버와 같이 자기 프로세스를 복사(fork)하여서 이용하는데, 만약 공유되는 주소 공간이나 자원이 있는 경우에 낭비가 심하다.
  • 멀티 프로세싱의 관점
    고전적 프로세스의 모델에서는 하나의 프로세스는 하나의 프로세서만을 이용함

Thread

  • 프로세스는 무겁다(heavy-weight)
    • 프로세스는 image+ context를 전부 가지고 있음
    • 새로 프로세스 생성시 위의 모두를 복사해서 할당하는 것을 매우 비용이 많이듬.
    • IPC를 통해 데이터 전달하는 것은 OS를 한번 거치므로 비용 많이듬.
  • Thread
    프로그램에 의해서 실행되는 일련의 명령들
    • PC(program counter) + Stack(+SP) + data registers
    • 대부분의 데이터, 이미지들을 공유함
    • 프로세스의 OS 상태 또한 공유

Process vs Thread

  • 고전적 해석
    • 프로세스는 쓰레드를 담고있는 컨테이너(하나의 프로세스안에 여러개의 쓰레드를 포함)
    • 프로세스는 정적, 쓰레드는 동적
  • 공통점
    • 각각 각자 자신의 실행 흐름을 가짐
    • 각각은 서로 다르게 스케쥴링
  • 차이점
    • Thead는 코드, 데이터를 공유, Process 는 공유 X
    • Thread는 생성하는데 있어서 코스트가 Process에 비해서 매우 작음

Thread의 이점

  • 경제성
    • concurrency를 만드는 것이 쉽다(싸다).
    • 생성, 종료, 컨텍스트 스위칭의 시간이 적게든다(프로세스의 비해서)
  • 자원을 공유하므로 커뮤니케이션을 하는게 쉽다.
    • 여럿의 쓰레드는 같은 주소에서 같은 메모리와 파일들을 공유하므로 커널을 통하지 않아도 커뮤니케이션 가능
    • 반응속도 빠르다
  • 멀티 프로세서를 잘 이용가능
    • 각각의 쓰레드는 다른 프로세서에서 동작 가능

User-level-thread VS kernel-level-thread

  • user-level-thread: 특정 라이브러리가 쓰레드와 관련된 것들을 관리.
  • kernel-level-thread: OS가 쓰레드 생성과 관리를 하는데 있어서 관여(시스템콜 필요)
  • 유저-레벨-쓰레드
    • 유저-레벨-쓰레드 라이브러리에서 모든 것을 관리
    • 커널은 아무것도 관여 하지 않음
    • 장점: 매우 가볍다. 생성, 관리, 스케쥴링을 모든 유저라이브러리에서 관여(mini-kernel)
    • 단점: I/O로 하나가 블락만 되도 전부 블락, 멀티 프로세서의 효과를 전혀 볼수 없음
  • 커널-레벨-쓰레드
    • 커널에 의해서 쓰레드가 생성되고 관리됨
    • 각각이 따로 스케쥴됨
    • 각각의 커널 스택을 갖고 있음
    • kernel context와 글로벌 데이터를 공유
    • 커널의 일반적인 싱크로나이즈 하는 방식을 따름
    • one to one model & many to many model(user-level-thread 방식을 믹스한 것)

0개의 댓글