CS/OS

[운영체제] 4-2. 쓰레드 정의

F12:) 2023. 9. 27. 13:28

오늘은 쓰레드에 대해서 알아보고, 이와 유사한 개념인 프로세스와의 차이점까지 알아보겠습니다.

 


Thread

쓰레드는 프로세스 내부의 instruction의 집합을 의미합니다. 즉, 프로세스의 하위 개념으로 쓰레드가 존재하는 것이죠.

따라서, 리눅스에서는 lightweight process(경량화 프로세스)라고도 부릅니다.

 

 

 

프로세스가 어떻게 구성되어있는지 기억하시나요?? 프로세스는 stack, code, data, PCB로 구성되어있다고 설명드린 바 있습니다. 그렇다면 쓰레드는 어떻게 구성되어 있을까요??

 

쓰레드의 구성요소는 다음과 같습니다.

  • stack
  • thread control block

 

쓰레드는 프로세스의 instruction set이라고 했으니까, 메서드가 존재할 것이고 그렇다면 지역변수를 저장할 공간이 필요합니다. 따라서, stack이 필수적입니다. 또한 쓰레드는 다른 쓰레드와의 전환이 가능해야합니다. 따라서, 쓰레드를 옮기려고 할 때, 옮기기 이전의 정보를 저장할 control block이 필요했고 이를 TCB라고 부릅니다.

 

 

Single Thread와 Multi Thread

single thread vs multi thread

 

만약 우리가 하나의 코드를 점 이라고 생각한다면, 코드의 집합으로 이루어진 thread는 점의 연속인 선으로 볼 수 있습니다. 따라서 쓰레드를 우리는 위와 같이 선으로 표시합니다.

 

좌측은 자세히 보면 사실 프로세스와 동일한 구조를 갖고 있습니다. 즉, 프로세스 자체가 하나의 쓰레드가 될 수 있습니다. 더 정확히 설명하면 프로세스란 하나 혹은 그 이상의 쓰레드가 모아진 집합체라고 생각해야 합니다.

 

우측은 하나의 프로세스에 3개의 쓰레드가 존재합니다. 따라서 각 쓰레드마다 스택과 TCB(register로 표현됨)가 있음을 알 수 있습니다.

 

 

 

Thread의 장점

그렇다면 굳이굳이 프로세스를 많이 두면 되는데, 왜 쓰레드를 사용할까요?? 그 이유를 알아봅시다.

 

1. 생성, 종료 관점에서 프로세스보다 쓰레드에 소요되는 시간이 더 적게 걸립니다.

        - 실제로, 프로세스를 구성하는 구성요소가 쓰레드를 구성하는 요소보다 더 많죠. code, data 등등..

 

2. 두 개의 프로세스가 서로 통신하기 위해서는 Shared Memory든, Message Passing이든 Mode change가 한번은 일어납니다. 하지만 쓰레드는 프로세스 내에서 통신하기 위해서 프로세스에 있는 Data 영역을 이용합니다. 즉, Shared memory의 역할을 프로세스 Data가 하는 것이죠. 따라서 Mode change가 일어나지 않고, 이는 프로세스가 통신하는 시간보다 덜 걸릴 것입니다.

 


이렇게 오늘은 간단하게 쓰레드에 대해서 알아봤습니다. 다음에는 멀티 쓰레드에 대해서 조금 더 자세히 다뤄보겠습니다.