Thread/팁

[스크랩] Thread Model

Binceline 2012. 10. 22. 15:18

[출처] 스레드 모델(Thread Model)|작성자 표효찬

http://blog.naver.com/gouhc46?Redirect=Log&logNo=60144278990

-------------------------------------------

고전적인 스레드 모델

프로세스를 바라보는 관점

1. 서로 관련된 자원을 한 군데로 모은다.(address space, code, data, etc...)

2. 실행의 흐름(thread)

=> 결국 프로세스는 자원을 한 군데로 모으고, 스레드는 CPU에서 실행되는 것


여러개의 스레드가 하나의 프로세스에서 병렬로 수행되는 것은, 여러개의 프로세스가 하나의 컴퓨터에서 병렬로 수행되는 것과 유사하다

스레드의 경우는 한 프로세스 안에 들어있는 스레드들이 주소공간과 자원들을 공유한다.

프로세스의 경우는 한 컴퓨터 안에 들어있는 프로세스들이 메모리, 디스크, 등을 공유한다.

스레드는 프로세스의 일부 속성을 가지고 있기 때문에 경량프로세스(lightweight process)라고 불린다.


* multi-threading : 여러 스레드가 하나의 프로세스 안에서 수행되는 것이 가능한 시스템


스레드와 프로세스를 다시 비교하자면, 프로세스는 자신의 주소공간과 실행의 흐름을 한 개씩 갖는 반면, 스레드는 주소공간을 공유한다.


다중스레드 프로세스가 하나의 CPU를 가진 시스템에서 실행될 때 스레드는 순서대로 수행된다. 예를 들어, 3개의 스레드가 있으면, 하나씩 순서대로 CPU에서 실행되며, CPU의 1/3 속도를 갖는 CPU 세 개에서 병렬로 수행되는 것처럼 보이게 된다.


모든 스레드는 동일한 주소공간을 공유하며, 이는 전역변수를 공유하는 것이다. 모든 스레드들은 주소공간을 공유하기 때문에, 스레드는 다른 스레드의 스택을 읽고, 쓰고 지울 수 있다. 프로세스끼리는 CPU를 점유하기 위하여 서로 경쟁하지만, 스레드끼리는 서로 협력하여 작업을 수행한다.


프로세스 당 가지고 있는 자원 : 주소공간, 전역변수, 열린 파일들, 자식 프로세스들, 대기중인 alarm, 시그널과 핸들러, 등등

스레드 당 가지고 있는 자원 : PC, 레지스터, 스택, 현재상태(실행, 대기, 종료 등)


스레드의 전이 단계를 살펴보면, 실행(running), 대기(block), 준비(ready), 종료(terminate) 단계가 있다.

실행 : 스레드가 CPU를 점유하여 수행중이다.

대기 : 대기상태로 풀릴때까지 기다리는 중이다.

준비 : 다음 차례에 수행 될 수 있다.

시스템콜을 이용하여 키보드로부터 입력을 받으려고 하는 상태는 대기 상태가 되고 입력이 들어오면 깨어난다.

외부 이벤트가 발생하거나, 다른 스레드가 자신을 깨워줄 수 있다.


스레드는 자신만의 고유한 스택을 갖는다. 예를 들어, A, B, C 스레드가 존재한다고 가정하고, A가 B를, B가 C를 호출했다고 하면, 각각의 스레드들은 서로 다른 실행 히스토리를 갖는다. 이 점이 스레드 당 고유한 스택을 가져야 하는 이유이다.



POSIX 스레드 모델

POSIX에서 제공하는 스레드 함수

pthread_create : 스레드 생성

pthread_exit : 스레드 종료

pthread_join : 새로운 스레드를 생성했을 때, 생성된 스레드가 종료될 때까지 기다린다.

pthread_yeild : 스레드가 충분히 오래 CPU를 사용하여 점유를 다른 스레드에게 넘긴다.



User-Level 스레드 모델

Kernel-Level 스레드 모델

하이브리드 스레드 모델

반응형