Thread
정의
- 프로세스 내에서 실제로 작업을 수행하는 주체를 의미합니다.
- 프로그램(프로세스)의 실행의 단위
- 모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행합니다.
스레드는 독립적인 작업 수행을 위해 각자의 스텍과 PC 레지스터 값을 갖고 있다.
-
스택을 독립적으로 할당하는 이유
- 스택은 함수 호출 시 전달되는 인자, 되돌아갈 주소값 및 함수 내에서 선언하는 변수 등을 저장하기 위해 사용되는 메모리 공간이다.
- 스택 메모리 공간이 독립적이라는 것은 독립적인 함수 호출이 가능하다는 것이고, 이는 독립적인 실행 흐름이 가능하다는 것 이다.
- 따라서, 독립적인 실행 흐름을 위한 최소 조건 으로 독립된 스택을 할당한다.
-
PC 레지스터를 독립적으로 할당하는 이유
- PC 값은 쓰레드가 명령어의 어디까지 수행하였는지를 나타나게 된다.
- 쓰레드는 CPU를 할당받았다가 스케줄러에 의해 다시 선점당한다.
- 그렇기 때문에 명령어가 연속적으로 수행되지 못하고, 어느 부분까지 수행했는지 기억할 필요가 있다.
- 따라서 PC 레지스터를 독립적으로 할당한다.
Multi-thread
정의
- 두 개 이상의 스레드를 가지는 프로세스
- 스레드들이 공유 메모리를 통해 다수의 작업을 동시에 처리하도록 해 줌
장•단점
모델
Many-to-One
- 다수의 user thread : 하나의 kernel thread
- 특정 시간에 오직 1개의 스레드만이 kernel에 존재한다.
One-to-One
- 하나의 user thread : 하나의 kernel thread
- 병렬 처리 가능
- overhead 비용 증가
Many-to-Many
- 다수의 user thread : 다수의 kernel thread
- 스레드 동시 수행 가능
- One-to-One 보다 비용이 저렴하다.
Thread VS Process
프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고
스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위이다.