CS) 쓰레드

Havi·2021년 7월 4일
0

CS

목록 보기
9/13

쓰레드란 프로세스 내에서 실행되는 흐름의 단위이다.

쓰레드는 각각의 레지스터와 stack영역을 할당받고, 프로세스의 heap, stack, code영역을 공유한다. 따라서 하나의 heap영역에 다른 쓰레드가 동시에 접근할 수 있다. 쓰레드 또한 프로세스처럼 스케쥴 관리의 대상이다. 따라서 컨텍스트 스위칭이 발생한다. 하지만 공유하고 있는 메모리 영역 덕분에 프로세스에 비해 오버헤드가 적다.

쓰레드의 장점

  1. 응답시간이 줄어든다.
  • 다중 쓰레드로 구성된 프로세스는 하나의 쓰레드가 blocked 상태일 때에도 빠른 처리가 가능
  1. 자원 소모가 줄어든다.
  • 비슷한 작업에 대해 리소스를 공유하기 때문에 메모리 낭비를 줄일 수 있다.
  1. 경제적이다.
  • 생성하고 switch 하는 면에서 프로세스보다 오버헤드가 적고 빠르다.
  1. 병렬성을 높일 수 있다.

프로세스와 쓰레드의 차이

프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고
쓰레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위이다.

새로운 프로세스의 생성은 많은 시간과 자원을 소모한다.

쓰레드마다 스택을 독립적으로 할당하는 이유

스택은 함수 호출시 전달되는 인자, 복귀 주소값 및 함수 내에서 선언하는 변수 등을 저장하기 위해 사용되는 메모리 공간이다.
스택 메모리 공간이 독립적이라는 것은 독립적인 함수 호출이 가능하다는 것이고, 이는 독립적인 실행흐름이 가능하게 한다.

따라서 독립적인 실행 흐름을 위한 최소 조건으로 독립된 스택을 할당한다.

쓰레드마다 PC Register를 독립적으로 할당하는 이유

PC값은 쓰레드가 명령어를 어디까지 수행했는지를 나타내게 된다. 쓰레드는 CPU를 할당받았다가 스케쥴러에 의해 다시 선점당한다. 그렇기 때문에 명령어가 연속적으로 수행되지 못하고 어느 부분까지 수행했는지 기억할 필요가 있다. 따라서 PC 레지스터를 독립적으로 할당하는 것이다.

쓰레드의 장점

  1. 쓰레드는 프로세스보다 생성, 종료, 전환 시간이 짧다.
  2. 쓰레드는 프로세스의 자원을 공유하므로 커널의 도움없이 상호 간의 통신이 가능하다.
  3. 프로세스 간의 통신 방법에 비해 쓰레드간의 통신 방법이 훨씬 간단하다.

쓰레드의 단점

  1. 동기화 문제
    • 다른 쓰레드가 하나의 공유자원을 바라보고 있을 때 충돌문제가 일어날 수 있다.
  2. 멀티 쓰레드를 이용할 때 설계를 주의깊게 해야한다.
  3. 디버깅이 어렵다.

쓰레드의 종류

  1. kernel Thread(커널 쓰레드)

프레소스 내 스레드가 여러 개라는 것을 OS가 알고 있는 쓰레드이다. 그래서 커널이 쓰레드 스케쥴링을 맡아서 하게 된다.

  1. User Thread(유저 쓰레드)

라이브러리 차원에서 지원되는 쓰레드이다. 프로세스 안에 쓰레드가 여러 개 있다는 것을 OS가 모르기 때문에 커널 입장에서는 하나의 일반적인 프로세스로 인식된다.

참고

https://woovictory.github.io/2018/12/26/OS-Thread/

profile
iOS Developer

0개의 댓글