[운영체제] Thread(1) - Thread란?
Thread
스레드란 프로그램(프로세스) 실행의 단위이며, 하나의 프로세스는 여러 개의 스레드로 구성이 가능하다. 프로세스를 구성하는 스레드들은 프로세스에 할당된 메모리, 자원 등을 공유한다. 또한 프로세스와 같이 실행, 준비, 대기 등의 상태를 가지며 상태가 변할 때마다 스레드 콘텍스트 스위칭을 수행한다. 그리고 스레드별로 자신만의 스택과 레지스터를 가지고 한 순간에 하나의 스레드만 실행 가능하다.

Thread와 Process
프로세스는 실행 중인 프로그램으로, 디스크로부터 메모리에 적재되어 CPU의 할당을 받을 수 있는 것을 말한다. 하지만 프로세스 생성은 많은 시간과 자원을 소비한다. 반면 스레드는 프로세스의 실행 단위라고 할 수 있다. 한 프로세스 내에서 동작되는 여러 실행 흐름으로 프로세스 내의 주소 공간이나 자원을 공유할 수 있다. 이 경우 각각의 스레드는 독립적인 작업을 수행해야 하기 때문에 각자의 스택과 PC 레지스터 값을 갖고 있다.
스택은 함수 호출 시 전달되는 인자, 되돌아갈 주소 값 및 함수 내에서 선언하는 변수 등을 저장하기 위해 사용되는 메모리 공간이므로 스택 메모리 공간이 독립적이라는 것은 독립적인 함수 호출이 가능하다는 것이고 이는 독립적인 실행 흐름을 가능하게 한다. 따라서 독립적인 실행 흐름을 위한 최소 조건으로 독립된 스택을 할당한다.
PC 레지스터 값은 스레드가 명령어를 어디까지 수행했는지 나타나게 된다. 스레드는 CPU를 할당받았다가 스케줄러에 의해 다시 선점당한다. 그렇기 때문에 명령어가 연속적으로 수행되지 못하고 어느 부분까지 수행했는지 기억할 필요가 있다. 따라서 PC 레지스터를 독립적으로 할당한다.
Thread의 장점
스레드는 프로세스보다 생성 및 종료시간, 스레드 간 전환 시간이 짧다. 또한 스레드는 프로세스의 메모리, 자원 등을 공유하므로 커널의 도움 없이 상호 간에 통신이 가능하다.