CS/운영체제(OS)

[OS] Thread

유정주 2022. 5. 21. 17:01
반응형

안녕하세요. 개발하는 정주입니다.

 

오늘은 "쓰레드 (Thread)"을 정리했습니다.

이번 포스팅도 추후에 슬그머니 내용이 추가될 수 있습니다.


Thread란?

Thread란 프로세스 내에서 실행되는 흐름의 단위입니다.

프로세스가 하나의 강이라면 Thread는 그 강의 물길이라고 말할 수 있습니다.

하나의 강에는 여러 개의 물길이 존재하는 것처럼 하나의 프로세스에는 여러 개의 Thread가 존재합니다.

(single thread process에는 1개의 thread만 존재)

 

프로세스의 일부 자원(code, data, heap)을 공유하고 Program Counter, Register set, Stack은 별도로 가집니다.

Thread는 프로세스 내에서 독립적인 작업을 수행해야 하므로 각자의 Stack과 PC를 가집니다.

 

Thread가 Stack을 독립적으로 할당 받는 이유

Stack 영역은 함수 호출 시 전달하는 인자와 함수 종료 시 되돌아갈 주소, 함수 내에서 선언하는 변수 등을 저장하는 메모리 공간입니다.

Thread의 작업은 독립적이어야 하므로 Thread 내의 함수 흐름도 독립적이어야 합니다.

이를 가능하게 하려면 Stack이 독립되어야 하므로 Thread는 Stack을 독립적으로 할당 받습니다.

 

Thread가 PC를 독립적으로 가지는 이유

PC를 먼저 가지는 이유를 알기 위해서는 Thread도 스케줄러에 의해 Context Switching이 발생한다는 것을 알아야 합니다.

PC는 명령어를 어디까지 수행하였는지를 나타냅니다.

Context Switching 후 속개할 위치를 알아야 하는데 Thread는 독립적인 흐름을 가져야 하므로 이 위치를 가리킬 PC도 독립적으로 가져야 합니다.

 


Thread 장점

Thread는 프로세스의 code, data, heap을 공유합니다.

이로 인해 Thread는 아래 이점을 가집니다.

  • 동시에 여러 작업을 할 때 Multi Thread가 시스템 자원을 더 적게 사용합니다.
    특히 Multi Processor 환경에서 서로 다른 CPU가 병렬적으로 Thread를 다루므로 효율이 더 좋습니다.
  • Thread간 Context Switching은 캐시 메모리를 비우지 않아도 됩니다. 또한 Stack 영역만 독자적으로 가지므로 이 영역만 교체하면 됩니다. 따라서 프로세스 Context Switching보다 부담이 적습니다.
  • Thread간 통신은 공유 데이터를 통해 가능합니다.
  • 프로세스를 새로 만드는 것보다 Thread를 새로 만드는 것이 더 경제적입니다.

 


Thread 단점

멀티 프로세스는 공유하는 자원이 없기 때문에 비동기적인 실행에 대해 비교적 안전합니다.

하지만 Thread는 하나의 프로세스에서 Heap 영역을 통해 자원을 공유하므로 동기화 처리를 개발자가 직접 처리해야 합니다.

그렇지 않으면 엉뚱한 값을 읽거나 수정할 수 있습니다.

 

예를 들어, Thread A가 변수를 업데이트하고 Thread B에서 업데이트된 변수 값을 읽으려고 할 때, 

Thread A의 작업이 완료된 후 Thread B에서 값을 읽으면 좋겠지만  A 작업이 모두 완료하기 전에 B 작업이 시작할 가능성이 존재합니다.

 

이러면 B는 잘못된 값을 가지는 것이죠.

 

이런 상황이 발생하지 않도록 동기화 작업을 해야 합니다.

Mutex, Semaphore, Monitor 같은 방법으로 동기화 작업을 할 수 있습니다만 복잡하고 까다롭습니다.

개발자는 사람이기 때문에 이 동기화 작업 과정에서 실수가 있을 수 있는데 동기화 문제는 디버깅이 어렵고 큰 문제로 번질 가능성도 높기 때문에 주의 깊은 설계가 필요합니다.

 

만약 공유 데이터 공간(Critical Section)의 데이터를 하나의 Thread가 망가뜨릴 경우 이 데이터를 사용하는 다른 Thread도 모두 영향을 받을 수 있습니다.

 

따라서 프로세스와 Thread의 차이를 제대로 알고 적절히 사용하는 법을 알아야 합니다.


잘못된 점이 있다면 댓글로 알려주시면 감사하겠습니다.

감사합니다.

 

출처

- 숭실대학교 홍지만 교수님, 운영체제

- 이화여자대학교 반효경 교수님, 운영체제

- A. Silberschatz et al., Operating System Concepts, 9th Edition, John Wiley & Sons, Inc. 2013. 
- A. Silberschatz et al., Operating System Principles, Wiley Asia Student Edition 

 

 

반응형