LISTORY

[윈도우즈 시스템 프로그래밍] 커널 레벨 쓰레드와 유저 레벨 쓰레드 본문

IT/윈도우 프로그래밍

[윈도우즈 시스템 프로그래밍] 커널 레벨 쓰레드와 유저 레벨 쓰레드

LiStoryTeller 2018. 7. 22. 15:13


뇌를 자극하는 윈도우즈 시스템 프로그래밍 유투브 강의 정리이다.


오늘 정리할 내용은 커널 레벨 쓰레드와 유저 레벨 쓰레드 부분이다.


YouTube 주소 커널 레벨 쓰레드와 유저 레벨 쓰레드



커널 레벨 쓰레드와 유저 레벨 쓰레드


쓰레드 구현 모델에 따른 구분


쓰레드는 구현 모델에 따라 그 종류가 달라진다. 교과서적인 설명을 해보자면..


OS는 멀티 프로세스를 지원하는가 여부, 또 쓰레드를 지원하는가에 대한 여부에 따라 종류가 나뉜다.


오늘날에 OS가 두개가 있다고 가정해보겠다.


OS1은 쓰레드를 지원하고, OS2는 쓰레드를 지원하지 않는다.


쓰레드를 지원한다는 것..? 커널이 쓰레드라는 기능을 지원한다.


여기서 쓰레드를 지원하지 않는 다는건, 커널이 쓰레드라는 기능을 제공하지 않는다는 뜻이다.


근데 사실, 커널 또한 프로그램이다. 커널이라는 프로그램이 기능을 제공하지 않는다면 개발자가 직접 개발하여 제공할 수 있다.


개발자가 쓰레드를 필요로 하면, 쓰레드를 라이브러리 형태로 제공할 수 있다.


이렇게 유저가 직접 만들어서 사용하는  쓰레드를 가르켜 유저 레벨 쓰레드라고 하고 


커널이 제공하는 쓰레드를 커널 레벨 쓰레드라고 한다.


커널레벨 쓰레드란?  커널이 제공하는 API형태의 쓰레드

유저레벨 쓰레드란?  유저가 개발하여 라이브러리 형태로 제공하는 쓰레드




이제 본론으로 들어가겠다.


유저영역, 커널 영역이라는 것이 존재한다. 여기서 이야기하는 커널 영역은 OS를 뜻한다.


반면 유저영역은 어떤 부분일까?


우리가 아는 대표적인 라이브러리? DirectX OpenGL 등등 여러가지 있다.


이런 라이브러리들을 하나로 묵어서 컴파일 해서 OS위에서 동작 시키는데, 이 모든 것을 가리켜 유저영역이라 한다.


우리가 포함시키는 라이브러리는 유저영역에 포함된다.


만일, 유저 레벨 쓰레드를 사용하는 OS라 치면 유저 레벨 쓰레드도 유저영역에 존재한다.



그림을 보면, 왼쪽의 그림은 커널영역 쓰레드를 설명한다.


커널이 쓰레드 기능을 제공하므로 쓰레드를 커널이 직접 관리한다. 즉, 스케줄러가 쓰레드들을 직접 관리한다.


그래서 쓰레드들의 정보를 커널 영역이 가지고 있다.


반면 오른쪽그림은 쓰레드가 라이브러리 모델로 제공된다.


커널 입장에서는 쓰레드를 알지 못하므로 그냥 코드가 실행되고 있는거지 쓰레드인지 뭔지 모른다.


그림에서 보면 커널은 단순히 프로세스를 관리한다.


프로세스를 관리한다는 것은 프로세스 우선순위, 상태 이런거를 스케줄러가 관리를 하고,그 안에서 쓰레드가 동작하는 형태가 된다.


그래서 오른쪽 그림을 보면 왼쪽과 다르게 쓰레드 정보가 프로세스 안에 존재한다.



이 둘을 보면 기능적으로 큰 차이가 없을 것 같지만 실행하는데 있어 큰 차이가 존재한다.


왼쪽 그림은 쓰레드A, B, C가 각각 시간을 나눠 실행한다.


반면 왼쪽 그림은 커널이 유저 영역에 있는 프로세스 A, B 에게 시간을 분배하고 


프로세스 안에서 쓰레드마다 시간을 나누게 된다.


즉, 왼쪽은 쓰레드 A,B,C가 완전 대등 우선순위가 같으면 할당받는 시간 똑같지만 


오른쪽은 기타 조건이 대등하다해도 쓰레드 A,B,C가 할당 받는 시간이 다르다.


예제로 봐보자.


왼쪽의 그림에서 쓰레드 A가 IO 상태에 빠져 자신의 실행을 포기했다.


그럼 스케줄러가 B나 C에게 실행을 넘기게 된다.


만면 오른쪽 그림에서 쓰레드 A가 IO 상태에 빠져 자신의 실행을 포기했다.


하지만 스케줄러는 예측 못한다. 왜냐면 쓰레드 A 존재 자체도 모르기 때문이다.


그러므로 스케줄러는 프로세스 A가 실행 안하기로 했다니까 프로세스 B가 실행되도록 한다.


이게 굉장히 불합리한게, 그럼 쓰레드 B는 쓰레드 A가 실행을 포기해도 실행을 하지 못하게 된다.


그럼 유저 레벨 쓰레드가 좋지 않은 것이구나 생각할 수 있지만, 그렇지는 않다.


결과적으로 보면 유저레벨 쓰레드가 더 빠르기 때문이다.


왜 빠른진 다음시간에 설명하도록 하겠다. 











Comments