앞서 배운 스레드는 일반적인 의미의 스레드다. 그러나 스레드는 사용자 수준의 사용자 스레드(user threads)와 커널 수준의 커널 스레드(kernel threads)로 구분된다.
사용자 스레드는 커널 위에서 지원되며, 커널의 지원 없이 사용자 공간에서 관리된다.
ex)POSIX Pthreads, Windows threads, Javathreads
커널 스레드는 운영체제가 직접 지원하고 관리한다.
즉, 사용자 스레드는 사용자가 자유롭게 생성할 수 있지만, 실제로 CPU에서 실행되기 위해서는 커널 스레드를 통해야 한다.
많은 사용자 수준 스레드를 하나의 커널 스레드로 사상한다.
문제는 한 스레드가 봉쇄형 시스템 콜을 할 경우, 전체 프로세스가 봉쇄된다.
또한 한 번에 하나의 스레드만 커널에 접근 가능해 병렬 실행이 불가능하다.
사용자 스레드와 커널 스레드가 1대1 매칭이 된다.
하나의 쓰레드가 봉쇄 되어도 다른 쓰레드는 실행된다.
병렬적으로 멀티프로세싱이 가능하다.
다만 너무 많은 쓰레드를 올리면 시스템 자원이 고갈될 수 있다.
여러개의 사용자 모델과 작거나 같은 수의 커널 스레드로 멀티플렉스한다.
죽, 필요한 만큼 사용자 스레드를 생성하고 그에 상응하는 커널 스레드를 통해 병렬로 수행할 수 있다,
그러나 1.구현이 너무 어렵고 2.요새는 워낙 코어가 많아서 굳이 사용하지 않는다.
다대다 모델과 일대일 모델을 섞었다. 그러나 구현이 어려워 사용하지 않는다.
현대 운영체제는 일대일 모델을 사용한다!