이모저모

pthread 본문

컴퓨터공학/OS

pthread

Alpa 2017. 7. 11. 12:17

java thread의 경우에는 마찬가지로 user level로 동작하는 데 이때 우선순위를 주어지면, 리눅스의 경우에는

nice value와 맵핑되어서 스케쥴링이 된다.!!!


http://www.javamex.com/tutorials/threads/priority_what.shtml



유저레벨 쓰레드와 커널레벨 쓰레드와의 관계에 대해서 고민을 해보았습니다.

그런데 이 모델은 리눅스 커널버젼에 따라 달라지게 됩니다.

일단 리눅스 커널 2.4버젼에대해서 살펴보았습니다.

리눅스에서 쓰레드를 사용할때 보통 pthread를 사용합니다. kldp에서나 어디에서든 pthread를 가지고

유저레벨스레드다 라고 말을 하는 분이 계시고 아니다 커널레벨스레드다 라고 말씀하시는분들도 계시는데

자세히 조사해본 결과 pthread는 하이브리드 스레드이며 (유저레벨스레드도 지원하고, 커널레벨 스레드도 지원)

그 속성은 pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *arg); 중에서
 
두번째 아규먼트인 pthread_attr_t를 세팅해 주는것에 따라 달라집니다.

PTHREAD_SCOPE_SYSTEM : USER MODE 스레드를 사용하기위해
PTHREAD_SCOPE_PROCESS : KERNEL MODE 스레드를 사용하기위해

위 두가지중 하나의 값을 이용하면 됩니다.

그러나 보통 NULL값으로 세팅해서 사용을 하고, 리눅스상에서는 위 값이 null로 지정되어 있으면
 
default로 PTHREAD_SCOPE_SYSTEM이 지정됩니다.

그리고 실제 리눅스 시스템 상에서 지원해주는 부분도 USER MODE만을 지원한다고 합니다.

그럼 PTHREAD_SCOPE_PROCESS 요것을 왜 남겨 놓았느냐 ... 가 관건인데
 
이것은 미래에 지원될때 코드호환 때문이라고 합니다. ^^



그러므로 커널버젼 2.4에서는 USER MODE 스레드 m개가 1개의 커널모드스레드에 매핑되는 M:1관계가 맞습니다.

그럼 커널버젼 2.6에서 살펴 보겠습니다.

2.6에서는 NPTL이라는 것을 지원합니다. (Native POSIX Thread Library)

NPTL은 레드헷에서 릴리즈했고 커널2.6버전의 레드헷 엔터프라이즈버전에 탑재됐으며,
 
나중에는 GNU C Ligrary에도 속하게 됐고 1:1관계를 지원하는 모델입니다.

그래서 리눅스 커널 2.6부터는 1:1관계를 지원합니다.

자세한것은 http://en.wikipedia.org/wiki/Native_POSIX_Thread_Library 여기를 참고 하시기 바랍니다. 

그리고 PTHREAD에대해서 궁금해 하시는분들이 있으셔서 관련 문서도 함께 올려봅니다.

이 내용은 나름대로 이곳저곳 문서를 참조해서 정리해본 내용입니다.




출처: http://kyh1026.tistory.com/19 [Shoveling...]

'컴퓨터공학 > OS' 카테고리의 다른 글

interrupt, exception, trap  (0) 2017.06.08
I/O  (0) 2017.05.18
Deadlock  (0) 2017.05.18
TRIM  (0) 2017.05.18
OS 스케줄링  (0) 2017.05.17
Comments