NPTL - Native POSIX Threading Library
-- 김도집 (2005.11.17)
Contents
- 1 NPTL
- 1.1 NPTL의 구현
- 1.2 NPTL 지원 여부 확인
- 1.3 NPTL on Libraries
- 1.4 NPTL on ARM
- 1.5 ?URLs
1 NPTL #
리눅스에서 사용하고 있는 스레드는 사실 상 프로세스와 별반 차이가 없이 생성이 되었다. 또한 스레드의 생성 및 파괴 등의 관리를 위한 매니저 스레드가 만들어야 했으며, 이를 통해 스레드가 생성 및 파괴 등의 관리가 이뤄졌다. 이로 인해 리눅스의 스레드는 스레드로 인정 받지 못하는 결과를 낳기도 했다.
커널 2.6에서는 NPTL이라는 Native 스레드를 구현함으로써 지금까지 리눅스 스레드의 문제점을 해결하고 대폭적인 성능 향상을 이뤘다.
1.1 NPTL의 구현 #
다음 내용은 The Native POSIX Thread Library for Linux의 내용을 정리한 것이다.
설계에 있어서
커널 스레드와
사용자 레벨 스레드 간의 관계를 어떻게 둘 것인가 주요 쟁점이다.
후자의 경우 M개의 커널 스레드와 N개의 커널 스레드가 상관성을 갖도록 하며, 이 두 종류의 스레드를 위한 두 개의 스케줄러가 필요하다. 사용자 레벨 스케줄러는 커널 스케줄러에게 정보를 전달할 수 있을 것이고 커널 스케줄러는 결정된 내용을 사용자 레벨 스케줄러에게 알려줄 것이다.
그런데 M:N은 리눅스에서는 적합하지 않다는 것이 커널 개발자들의 중론이다. 이를 구현하기에는 너무 많은 비용이 든다는 것이다. 사용자 레벨에서 스케줄을 하기 위해서는 커널 공간의 레지스터 내용을 복사해 와야 하는 등의 문제가 있기 때문이다.
결론을 말하자면 NPTL은 1:1 관계를 채택하고 있다.