NPTL - Native POSIX Threading Library -- 김도집 (2005.11.17) [[TableOfContents]] = NPTL = 리눅스에서 사용하고 있는 스레드는 사실 상 프로세스와 별반 차이가 없이 생성이 되었다. 또한 스레드의 생성 및 파괴 등의 관리를 위한 매니저 스레드가 만들어야 했으며, 이를 통해 스레드가 생성 및 파괴 등의 관리가 이뤄졌다. 이로 인해 리눅스의 스레드는 스레드로 인정 받지 못하는 결과를 낳기도 했다. 커널 2.6에서는 NPTL이라는 Native 스레드를 구현함으로써 지금까지 리눅스 스레드의 문제점을 해결하고 대폭적인 성능 향상을 이뤘다. == NPTL의 구현 == 다음 내용은 The Native POSIX Thread Library for Linux의 내용을 정리한 것이다. 설계에 있어서 '''커널 스레드'''와 '''사용자 레벨 스레드''' 간의 관계를 어떻게 둘 것인가 주요 쟁점이다. * 1:1 관계 * M:N 관계 후자의 경우 M개의 커널 스레드와 N개의 커널 스레드가 상관성을 갖도록 하며, 이 두 종류의 스레드를 위한 두 개의 스케줄러가 필요하다. 사용자 레벨 스케줄러는 커널 스케줄러에게 정보를 전달할 수 있을 것이고 커널 스케줄러는 결정된 내용을 사용자 레벨 스케줄러에게 알려줄 것이다. 그런데 M:N은 리눅스에서는 적합하지 않다는 것이 커널 개발자들의 중론이다. 이를 구현하기에는 너무 많은 비용이 든다는 것이다. 사용자 레벨에서 스케줄을 하기 위해서는 커널 공간의 레지스터 내용을 복사해 와야 하는 등의 문제가 있기 때문이다. '''결론을 말하자면 NPTL은 1:1 관계를 채택하고 있다.''' == NPTL 지원 여부 확인 == NPTL은 glibc에 포함되어 사용할 수 있다. 이를 확인하는 방법은 {{{/lib/lib.so.6}}} 또는 {{{/lib/tls/lib.so.6}}}를 실행했을 때 다음과 같은 메시지가 나타나면 NPTL을 지원하는 것이다. {{{#!vim sh /lib/tls/libc.so.6 GNU C Library stable release version 2.3.2, by Roland McGrath et al. Copyright (C) 2003 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Compiled by GNU CC version 3.3.5 (Debian 1:3.3.5-12). Compiled on a Linux 2.6.0-test7 system on 2005-05-10. Available extensions: GNU libio by Per Bothner crypt add-on version 2.1 by Michael Glad and others NPTL 0.60 by Ulrich Drepper BIND-8.2.3-T5B NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk Thread-local storage support included. Report bugs using the `glibcbug' script to . }}} 위 내용에서 '''NPTL 0.60 by Ulrich Drepper''' 라는 부분이 NPTL을 지원하고 있음을 의미한다. == NPTL on ARM == ARM에서 NPTL을 지원하는 것은 커널 버전 2.6.12 이후 지원하고 있다. 관련 패치는 다음에서 구할 수 있다. * [http://www.arm.linux.org.uk/developer/patches/viewpatch.php?id=2651/3 ARM Patches] == URLs == * [http://people.redhat.com/drepper/nptl-design.pdf The Native POSIX Thread Library for Linux] * [http://en.wikipedia.org/wiki/NPTL Native POSIX Thread Library - Wikipedia, the free encyclopedia] * [http://kerneltrap.org/node.php?id=429 Linux: NPTL vs. NPGT vs. LinuxThreads] * [http://linuxdevices.com/articles/AT6753699732.html Migrating to Linux kernel 2.6 -- Part 5: Migrating apps to the 2.6 ... ] * [http://lwn.net/Articles/10465/ Native POSIX Thread Library (NPTL) 0.1 Released] * [http://lwn.net/Articles/10710/ The Native POSIX Thread Library]