개요
Native Posix Thread Library (NPTL)은 기존의 LinuxThread처럼 M:N 스레딩 방식의 한계를 극복하기 위해서 1:1방식의 스레딩을 구현한 Posix 스레드 규격이다.
설명
기존 리눅스 2.6버전 이하에서는 리눅스에서 스레드를 생성하기 위해서는 CLONE으로 생성하였어야 했다. 여기다가 User level thread를 올리든, Clone된 Process를 VM_CLONE하여 마치 스레드로 쓰든 유저레벨에서 스레드가 구현되어 있었다. 그러나 이러한 방식은 리눅스의 프로세스 모델과 일치하지 않는 문제와, 시그널 핸들링 처리의 복잡성, IPC처리의 복잡성과 성능저하등 여러 문제가 있었다.
이에따라서 리눅스 커널에 스레드 구현을 박아버리게 되는데 LightWeigthProcess라고도 불리는 이러한 기법을 통해서 리눅스가 스레드를 관리하도록 하는 방식을 NPTL이라고 한다. 즉 커널레벨에서 유저레벨 스레드를 관리하며, 기존의 유저레벨 스레드와는 다르게 TCB가 커널에 위치해 있다.
운영체제의 관점에서
스레드는 유저레벨에서 구현된다라고 생각하는 경우가 많은데, 사실! Modern operating 시스템에서 스레드는 커널에 구현된다. 일레로 pthread htop찍어보면 pid다 다르다.