LISTORY

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

IT/윈도우 프로그래밍

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

LiStoryTeller 2018. 7. 22. 16:21


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


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


YouTube 주소 커널 모드와 유저 모드



커널 모드와 유저 모드


지난 시간에 커널 레벨 쓰레드와 유저 레벨 쓰레드에 대해 설명했다.


유저 레벨 쓰레드를 사용할 경우, 빠르지만 blocking 상태에 문제가 있을 수 있다고 설명하였다.


오늘은 유저 레벨 쓰레드가 왜 빠른지 그 이유를 설명하겠다.


설명하기에 앞서 알아야 할 부분이 커널 모드와 유저 모드이다.



커널모드 & 유저모드


우리가 사용하고 있는 윈도우즈란 운영체제는 항상 커널모드, 유저모드 둘중 하나의 상태를 지닌다.


우리가 사용하면서도 우리는 모르게 수도 없이 많이 커널모드와 유저모드 사이를 왔다갔다 한다.


그럼 커널모드와 유저모드는 무슨 상태일까?


우리가 사용하는 Program은 OS와 APP 부분으로 나뉘어 진다.


다시 말하지만 OS도 프로그램이고, APP도 하나의 프로그램이다.


하지만 OS가 일반적인 프로그램으로 동일 시 하면 문제가 생길수 있다.



OS나 APP이나 프로세스를 생성하면, 32비트 기준에서 4기가의 메모리 공간을 할당받는다.


이건 시스템마다 다르지만... 반은 OS가 사용하고 나머지 반은 APP이 사용한다.


이 부분들은 코드를 담아두기도 하지만, 실행을 위한 것이다.


우리가 프로세스 4개를 생성하면 메모리 공간이 네개가 생기는데, 그럼 이 네개의 메모리 공간마다 OS가 존재하는 것일까?


코드는 하나이고 OS 메모리 공간에 코드가 일부 매핑이 되는 것이다. 즉, 이 메모리 공간은 실행을 위한 곳이다.



그럼 그림의 유저영역, 커널영역이 각각 2기가라고 해보자(32비트 시스템 기준).


그럼 커널 영역에서 2기가가 실행되는 것이 아니라 커널 영역에 커널 코드가 주소가 할당이 되어, 실행이된다.


우리의 코드도 유저 영역에 주소가 매핑이 되고 실행이 된다.


윈도우 입장에서 보면 커널 영역도 실행되야 하고 유저 영역도 실행이 되어야 한다.


즉, 커널영역과 유저영역을 번갈아가며 실행을 해야한다.


이 메모리 공간은 0~4기가-1까지 주소가 하나로, 리니어 하게 매핑되어있다.


여기서 문제가 생기는데, 실수지만 유저 영역에서 커널 영역에 접근하여 바꿀 가능성 존재하다는 것이다.


아다시피 커널 코드는 바뀌면 안된다.


이러한 문제점 때문에 커널입장에선 유저모드에게 자신의 공간에 접근할 권한을 주는 것을 무서워한다.


그래서 커널모드, 유저모드가 생겼다. 


커널 모드일 때에는 어디든 접근 가능하지만 유저모드, 즉, 유저의 코드가 실행될 때에는 커널영역으로 접근 불가능하다.


즉, 권한을 제한하기 위해 이 모드들이 생겼다.


커널 모드에서 하는 동작은 스케줄러 동작, 프로세스 생성 등 커널이 일하는 부분이다.


커널이 일하려면 무조건 커널 모드로 들어와야 한다.



그럼 커널 레벨 쓰레드는 왜 느릴까?


쓰레드의 기능은 커널이 제공한다. 그렇기 때문에 쓰레드 간의 컨텍스트 스위칭이 일어날때마다 커널 모드로 들어와야 한다.


하지만 유저 레벨 쓰레드는 프로세스 컨텍스트 스위칭이 일어날 때만 커널 모드로 들어와도 된다.


즉, 모드의 변환이 많으므로 느리다.



장점과 단점


커널 레벨 쓰레드의 장점 및 단점

장점 : 커널에서 직접 제공해 주기 때문에 안전성과 다양한 기능성 제공

단점 : 유저 모드에서 커널 모드로의 전환이 비번


유저 레벨 쓰레드의 장점 및 단점

장점 : 유저 모드에서 커널 모드로의 전환이 필요 없다.

단점 : 프로세스 단위 블로킹








Comments