20180203 스레드

운영체제 2018. 2. 3. 11:56

- 스레드 개요

프로세스처럼 프로세서를 사용하는 기본단위이며 명령어를 독립적으로 실행할 수 있는 하나의 제어 흐름이다.


각각의 스레드는 다음과 같은 사항들을 포함하고 있다.

  • 스레드 실행 상태(실행, 준비 등)
  • 실행 스택
  • 수행 중이 아닐 때 저장되어 있는 스레드 문맥(Thread Context)
  • 지역 변수 저장을 위해 각 스레드가 사용하는 스레드별 정적 저장소
  • 프로세스의 메모리 및 자원에 대한 접근으로, 메모리 및 자원은 프로세스의 모든 스레드에 의해 공유

- 스레드 디스크립터의 정보
일반적으로 하나의 프로세스 생성 시, 하나의 기본 스레드도 같이 생성된다. 하나의 프로세스 안의 모든 스레드가 종료하면 프로세스는 제거된다. 프로세스 디스크립터를 PCB라고 부르며 이것이 해당 프로세스에 대한 관리 및 필요정보를 유지하는 테이블이라면, 스레드 디스크립터도 이와 동일하다.

운영체제가 해당 스레드를 관리하도록 필요한 정보를 보관하는 자료구조로, 하나의 스레드에 사용되는 대부분의 자원은 스레드가 아닌 연관된 프로세스에 할당된다. 

스레드에서 건너와 프로세스로 잠시 이야기를 바꾸면, 프로세스에는 단일 스레드형 프로세스가 있고, 다중 스레드형 프로세스가 있다. 둘의 차이를 그림으로 살펴보자.




여기서 다중 스레드형 프로세스는 각각의 스레드가 코드영역와 데이터영역(static) 그리고 files영역(heap)을 공유하고 있으며, 스레드 고유의 레지스터와 스택을 지니고 있다. 단일 스레드형 프로세스는 하난의 스레드가 heap, static, code 영역을 공유하고, 레지스터와 스택을 공유하고 있다.

스레드는 작은 업무에 사용되는 반면에 프로세스는 작은 업무보다는 좀 더 크고 무거운 업무에 사용된다. 또한 동일한 프로세스 내의 스레드들은 동일한 주소 공간을 공유하고 있으며, 각각의 프로세스들은 주소공간을 공유하지 않는다.


- 스레드의 상태
하나의 스레드는 그의 실행 과정 동안에 상태가 변화한다. 각 스레드는 경량 프로세스이기 때문에 프로세스와 같이 순차적으로 수행한다. 그리고 자신이 어디에 위치하고 있는지를 계속해서 유지해야 하기 때문에, 프로그램 카운터(PC)와 스택이 존재하고 있다. 

스레드의 실행 상태는 크게 네가지로 구분된다고 한다.
    • 대기 상태 : 스레드가 다른 스레드나 또는 외부의 사건과 동기화 중에 있는 상태로, 실행에 부적합한 상태이다.
    • 준비 상태 : 스레드가 프로세서로 실행될 수 있는 상태이다.
    • 실행 상태 : 스레드가 현재 프로세스를 가지고 실행 중에 있는, 활성화된 상태이다.
    • 종료 상태 : 스레드가 작업 수행을 완전히 종료한 상태이다. 
Posted by doubler
,