전성빈의 사리사욕

[OS의 작동방식] 쓰레드란 본문

백엔드 로드맵따라가기/OS 및 일반적인 지식

[OS의 작동방식] 쓰레드란

Been2 2020. 8. 11. 00:23
728x90

쓰레드란?

 

쓰레드란 프로세스 내에서 존재하는 실행의 흐름이자 단위이다. 일반적으로 한 프로그램은 하나의 쓰레드를 가지고 있찌만 프로그램의 환경에 따라 둘 이상의 쓰레드를 가질 수 있다. 이렇게 여러개의 쓰레드를 갖는 방식을 멀티쓰레드(multithread)라고 한다.

 

 

프로세스와 쓰레드의 비교

 

쓰레드는 하나의 프로세스안에 여러개 존재할 수 있습니다. 따라서 여러개의 쓰레드를 생성하여도 코드, 데이터, 파일등은 공유할 수 있기 때문에 경량화 프로세스라고 하기도 합니다.

공유 하는 메타데이터가 있기때문에 쓰레드를 생성할 때 발생하는 오버헤드가 적으며 또한 Context Switch시 내용이 겹치는 부분이 많아 오버헤드가 적습니다.

또한 프로세스 끼리는 메모리에서 Stack 공간을 따로 쓰며 서로 침범하는 일이 없으나 같은 프로세스의 쓰레드들은 Stack영역을 공유한다는 차이가 있습니다.

 

 

쓰레드 사용시 문제점

 

한 프로세스의 서로 다른 쓰레드들은 코드, 파일, 글로벌 변수등을 공유합니다. 예를들어 A 쓰레드가 어떠한 작업을 한 뒤 특정 데이터를 수정하는 과정에서 저장을 하기 전 스케쥴링을 통해 CPU를 뺏긴채로 B 쓰레드가 해당 변수를 읽어 오면 B쓰레드 작업 결과물은 A쓰레드의 작업을 무시한 값으로 나옵니다. 

이러한 문제가 발생할 수 있는 데이터들이 있는 공간을 Critical section이라고 합니다. 즉 서로 다른 쓰레드들이 공유 하는 공간입니다.

 

 

Mutex - 

 

한 쓰레드가 사용중인 데이터를 작업이 완료할 때 까지 다른 쓰레드가 사용하지 못하게 하는 방식을 통해 Critical Section 문제를 해결합니다. 이와 같은 방식을 Mutex(Mutual Exclusion)이라 합니다.

Mutex는 Critical Section을 해결하기 위한 알고리즘으로 글로벌 데이터에 접근시 락을 걸어놔 작업이 끝날때 까지 다른 쓰레드들이 접근하는걸 막는 방법을 말합니다.

728x90