[210623 TIL - (2)] OS

Choi Rim·2021년 6월 23일
0

Way to developer

목록 보기
4/21
post-thumbnail

스레드 관리 (Thread management)

1. 스레드의 개념

사진출처 - https://ko.wikipedia.org/wiki/%EC%8A%A4%EB%A0%88%EB%93%9C_(%EC%BB%B4%ED%93%A8%ED%8C%85)

(1) 프로세스 (process)

  • 프로세스는 자원(resources)을 할당받고 그 자원을 제어해서 우리가 원하는 작업을 수행하는 것을 말한다.
  • 프로세스는 자원과 제어로 구성되어 있다.

(2) 스레드 (thread)

  • 실타래라는 뜻을 가지고 있다.
  • 같은 자원을 할당받아 제어를 여러개로 구분한 것을 스레드라고 한다.

    사진출처 - https://youtu.be/zgVFiYh3ZTk
  • 각 스레드들은 코드, 전역 데이터, 힙을 공유하고 있다.
  • 여기서 코드, 전역 데이터, 힙은 자원을 의미한다.
  • SP, SR, PC는 레지스터라고 한다.
  • for문을 사용한다고 하면 블록안에서 선언하는 문을 지역 데이터라고 한다.
  • 어떤 함수를 호출하게 되며 스택에 들어갔다 나오게 되는데, 함수의 호출과 제어와 관련이 깊다고 할 수 있다.
  • 이렇게 스레드는 자원은 공유하고 각 각의 제어를 따로 가지고 있다.
    사진출처 - https://youtu.be/zgVFiYh3ZTk
  • 메모리 공간 상에서 보면 위 사진처럼 생겼다.
  • 힙, 데이터, 텍스트(코드) 부분은 우리가 할당받은 자원이다.
  • 각 스레드마다 스택에서 자신만의 메모리 공간을 가진다.

스레드 개념 정리

  • Light Weight Process (LWP) : 프로세스와 비슷하지만 자원을 공유하기 때문에 프로세스보다 가볍다.
  • 프로세서(e.g CPU) 활용의 기본 단위
  • 구성요소
    • Thread ID : 자신만의 번호
    • Register set (PC 등) : 자신만의 제어를 가져가지 때문에 자신만의 레지스터 존재
    • Stack (i.e local data) : 제어하면서 중간에 저장하는 데이터
  • 제어 요소 외 코드, 데이터 및 자원들은 프로세스의 다른 스레드들과 공유
  • 전통적 프로세스 = 단일 스레드 프로세스

2. Single-thread vs Multi-threads

사진출처 - https://youtu.be/zgVFiYh3ZTk

(1) 단일 스레드 프로세스

  • 우리가 지금까지 배워온 프로세스는 단일 스레드의 프로세스를 의미한다.
  • 제어가 하나만 존재한다.

(2) 다중 스레드 프로세스

  • 자원을 공유한다.
  • 각 스레드 마다 자기만의 제어를 가지게 된다.

(3) 다중 처리(다중 프로세스) vs 다중 스레드

다중 프로세스

  • 여러개의 프로세스가 동시에 어떤 작업을 진행함.
  • 각자 다른 자원과 제어를 가진다.

다중 스레드

  • 여러 개의 스레드가 공통된 자원을 가지고 작업함.
  • 자원은 공유하고 각자 다른 제어를 가진다.

스레드가 프로세스보다 빠른 이유

스레드는 컨텍스트 스위칭 될때 text, data, heap의 자원이 프로세스 것이라 자신의 PCB에는 스택 및 간단한 정보만 저장하기 때문에 프로세스의 컨텍스트 스위칭보다 빠릅니다.

2. 스레드의 장점

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

3. 스레드 사용의 예

사진출처 - https://youtu.be/zgVFiYh3ZTk

  • 우리가 워드 프로세스를 이용할 때 우리는 키보드를 입력하고 화면에는 그 입력이 반영된다. 그리고 중간중간 임시저장을 한다.
  • 단일 스레드라면 이것이 불가능할 것이다. 우리가 키보드를 입력하고 있다면 화면이 출력되지 않을것이고 화면을 출력하면 키보드의 입력을 할 수 없을 것이다.
  • 우리가 워드 프로세스를 이용할 수 있는 이유는 멀티 스레드 덕분이다.
  • 이것이 바로 스레드가 사용자 응답성이 좋다고 하는 이유이다.

4. 스레드의 구현

사진 출처 - https://www.researchgate.net/figure/user-level-light-weight-HPX-thread-and-kernel-thread_fig3_340609554

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

  • 사용자 영역의 스레드 라이브러리로 구현됨
    • 스레드를 라이브러리 형태로 구현하는 것이다. 즉, 어떤 프로세스 내부적으로 스레드라는 개념을 구현해내는 것.
    • 스레드를 생성하고, 스레드 사이를 스케쥴링 하는 것을 라이브러리가 해주는 형태이다.
    • e.g) POSIX threads, Windows threads, JAVA threads
  • 커널은 스레드의 존재를 모름
    • 커널의 관리(개입)을 받지 않는다
      생성 및 관리의 부하가 적음, 유연한 관리 가능
      이식성(portability)이 높음
  • 커널은 프로세스 단위로 자원 할당
    • 하나의 스레드가 block 상태가 되면, 모든 스레드가 대기 (single-threaded kernel의 경우)

(2) 커널 수준 스레드 (Kernel threads)

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

사진출처 - https://youtu.be/zgVFiYh3ZTk

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

사진 출처 - https://youtu.be/zgVFiYh3ZTk

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

Multi-Threading Model

  • 다대일(n:1) 모델
    • 사용자 수준 스레드
  • 일대일(1:1) 모델
    • 커널 수준 스레드
  • 다대다(n:m) 모델
    • n > m
    • 혼합형 스레드

<참고>

profile
https://rimi0108.github.io/

0개의 댓글