[OS] - Thread

오동훈·2021년 3월 20일
0

Operating System

목록 보기
3/16
post-thumbnail
post-custom-banner

1. 스레드 (Thread)

  • 프로세스가 할당 받은 자원을 이용하는 실행 단위로 프로세스는 최소 한 개 이상의 스레드를 가진다.
  • 프로세스 주소 공간 중 코드, 데이터, 힙은 스레드 간 공유되며 스택만이 스레드 별로 할당된다.
  • Light Weight Process (LWP)
  • 구성요소
    - THread ID
    - Register set (PC, SP 등)
    - Stack (i.e, local data)
  • 여러개가 있을 수 있음

같은 프로세스의 스레드들은 동일한 주소 공간을 공유한다.

1.1 스레드의 장점

  • 사용자 응답성
    - 일부 스레드의 처리가 지연되어도, 다른 스레드는 작업을 계속 처리 가능

  • 자원 공유 (Resource Sharing)
    - 자원을 공유해서 효율성 증가 (커널의 개입을 피할 수 있음)
    ex) 도일 address space에서 스레드 여러개

  • 경제성 (Economy)
    - 프로세스의 생성, Context Switch에 비해 효율적

  • 멀티 프로세서 (Multi - Processor) 활용
    - 벙렬 처리를 통해 성능 향상

1.2 스레드의 구현

1. 사용자 수준 스레드 (User Thread)

  • 사용자 영억의 스레드 라이브러리로 구현 됨
    - 스레드의 생성 및 종료, 스케쥴링, 컨텍스트 등

  • 커널은 스레드의 존재를 모름

  • 장점: 커널의 개입을 받지 않음
    1. 이식성이 높음
    커널에 독립적으로 스케쥴링을 할 수 있어 모든 운영체제에 적용할 수 있다.
    2. overhead가 적음
    스케쥴링이나 동기화를 하려고 커널을 호출하지 않으므로 커널 영역으로 전환하는 오버헤드가 줄어든다.
    3. 유연한 스케쥴링이 가능
    커널이 아닌 스레드 라이브러리에서 스레드 스케줄링을 제어하므로 응용 프로그램에 맞게 스케줄링을 할 수 있다.

  • 단점: 커널은 프로세스 단위로 자원 할당
    1. 시스템의 동시성을 지원하지 않음
    스레드가 아닌 프로세스 단위로 프로세서를 할당하여 다중 처리 환경을 갖춰도 스레드 단위로 다중 처리를 하지 못한다. 동일한 프로세스의 스레드 한개가 대기 상태가 되면 이 중 어떤 스레드도 실행하지 못한다.
    2. 확장에 제약이 따름
    커널이 한 프로세스에 속한 여러 스레드에 프로세서를 동시에 할당할 수 없어 다중 처리 시스템에서 규모를 확장하기 어렵다
    3. 스레드 간 보호 불가능
    스레드 간 보호에 커널의 보호 방법을 사용할 수 없다. 스레드 라이브러리에서 스레드 간 보호를 제공해야 프로세스 수준에서 보호가 가능하다.

  • 다대일(n:1) 매핑

2. 커널 수준 스레드 (Kernel Threads)

사용자 수준 스레드의 한계를 극복하는 방법으로, 커널이 스레드와 관련 된 모든 작업을 관리한다.

  • OS (Kernel)가 직접 관리
    - 장점: 커널이 각 스레드를 개별적으로 관리 = 프로세스 내 스레드들이 병행 수행 가능
    하나의 스레드가 block 상태가 되어도, 다른 스레드들은 계속 작업 수행
    - 단점: 커널 영역에서 스레드의 생성, 관리 수행
    Context Switching등 부하(Overhead)가 큼
유저 레벨 스레드커널 레벨 스레드
장점전환이 필요 없기 때문에 성능이 좋음안전성, 기능의 다양성
단점프로세스 내에 스레드가 하나만 블로킹 되어도 나머지 스레드가 작동하기 어려움커널에서 기능을 제공하기 때문에 속도 저하

1.3 다중 스레드 모델

-보통 운영체제는 유저 레벨 스레드와 커널 레벨 스레드 모두 제공한다. 두 스레드간의 관계 모델 유형을 살펴보면 다음과 같이 3가지로 분류할 수 있다.

1. 다대일(N-to-one) 모델

  • 효율적이긴 하지만 한 스레드가 block 당할 경우 전체 프로세스가 봉쇄된다.

2. 일대일(One-to-one) 모델

  • 다대일보다 더 많은 병렬성을 제공한다.
  • 많은 스레드가 생성됐을 시, cs 비용이 크다.

3. 혼합형 (n : m) 스레드

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

1.4 프로세스와의 차이점

프로세스스레드
정의실행중인 프로그램프로세스의 실행 단위
생성 및 종료 시간많은 시간 소요됨적은 시간 소요됨
context 전환많은 시간 소요됨적은 시간 소요됨
상호작용IPC 사용공유 메모리 사용
자원 소모많음적음
독립성각각 독립적스택만 독립적이고 이외에는 공유

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

1. 컨텍스트 전환(context switch)

컨텍스트 전환(contetxt switch)은 다른 프로세스의 수행을 위해 실행되고 있는 프로세스의 현재 상태를 저장하는 절차를 의미한다. 다시 말해, 실행되고 있던 프로세스의 내용을 프로세스 제어 블록에 저장하고 다른 프로세스의 컨텍스트를 그 프로세스의 제어 블록으로부터 불러와 실행하는 것이다. 컨텍스트 전환 시간은 하드웨어에 지원에 따라 크게 달라지기 때문에 시스스템마다 다르며, context switch이 일어나는 동안은 아무런 작업이 수행되지 않아 순수한 오버헤드(overhead)다.

2. 멀티 프로세스와 멀티 스레드

프로그램을 구현할 때 연산량 증가, 모듈화, 편의성 등의 이유로 하나의 작업을 여러 개의 프로세스로 구성하거나 여러 개의 스레드로 구성한다. 전자를 멀티프로세스(multi-process), 후자를 멀티스레드(munlti-thread)라고 한다.

각각의 장점은 각각의 단점이 되는데, 이는 프로세스와 스레드의 차이점에서 기인한다. 즉, 멀티 프로세스는 시스템 자원을 많이 사용하고 프로세스 간 통신이 어려운 반면 여러 개의 프르세스 중 하나에 문제가 발생하면 그 문제가 다른 프로세스로 확산이 되지 않지만, 멀티 스레드는 시스템 자원은 적게 소모하고 스레드 간 통신은 쉽지만 반면 공유 메모리의 동기화가 문제가 된다.

profile
삽질의 기록들🐥
post-custom-banner

0개의 댓글