사용자 수준의 스레드와 커널 수준의 스레드의 차이

나의 답변

사용자 수준은 context switching이 없다. 그리고 커널 수준은 사용자 수준보다 효과적일 수 있다.

개념

사용자 수준 스레드와 커널 수준의 스레드 차이

  1. 사용자 수준은 context switch가 없다.

사용자 스레드 방식이 커널 스레드보다 오버헤드가 적은 이유는 프로세서가 실행할 스레드를 전환할때 커널 스케줄러를 호출할 필요가 없기 때문이다. 커널 스케줄러로 진입하려면 프로세서 모드를 사용자 모드에서 커널모드로 전환해야하는데, 이때 사용자쪽 하드웨어 레지스터를 저장하고 커널 레지스터를 복구하고, 등등 많은 작업이 일어난다. 따라서 사용자 모드와 커널모드를 자주 바꿀 경우 성능이 급격하게 떨어진다. 사용자 스레드는 스레드 스케줄러가 사용자 모드에만 있기 때문에 위와같은 오버헤드는 발생하지 않는다.

  1. 커널 수준은 사용자 수준보다 효율적일 수 있다.

사용자 스레드의 결정적인 단점은 프로세스내의 한 스레드가 커널로 진입하는 순간 나머지 스레드들도 전부 정지된다는 점입니다. 커널이 스레드의 존재를 알지 못하므로 불가피한 현상입니다. 스레드가 커널로 진입할 때는 write(), read() 같은 시스템 호출을 부를 때인데, 시스템 호출 길이가 짧아서 바로 리턴할 대는 문제가 없지만 연산이 길어지면 상당한문제가 된다.

커널 스레드를 쓰면 멀티프로세서를 활용할 수 있다는 큰 장점이 있다. 사용자 스레드는 CPU가 아무리 많더라도 커널 모드에서는 스레드 단위로 스케줄이 안되므로 각 CPU에 효율적으로 스레드를 배당할 수 없는 문제가 있다.

출처:

https://drawdeveloper.tistory.com/109

[mkdir]

자세한 참고 링크 : https://helloinyong.tistory.com/293