Windows 유저모드와 커널모드

Windows 유저모드와 커널모드

Windows 아키텍처를 애기하면, 제일 먼저 떠오르는 건 앞에서 말했듯 유저 모드와 커널모드이다.

이를 간단히 구조화 하면 아래그림과 같다.

미리 애기하지만, 이 그림에는 많은 것이 간략화 되어 있어, 모든것이 나타나 있지는 않다.

아래 그림은 TechNet에 공개된 Windows 2000시절의 구조이지만, Windows 2008에서 구조와 크게 다르지 않는다.

최신 Windows Internal 5판의 97페이지를 보면 보다 자세한 그림을 확인할 수 있다.

[그림] 윈도우 아키텍쳐

위와 같이 나누어진 커널과 유저 모드는 권한이라는 나누어져 있다. 인텔 프로세서는 4개의 특권 레벨(Privilege level)을 사용할 수 있는데 이를 ring으로 구분하고, 0~3까지 사용한다. 이중 ring 0는 최고 권한으로 커널모드라 하며, 시스템 자원을 통제 없이 사용할 수 있다. ring 3는 최소 권한으로 유저모드라 불리고, 일반적으로 응용프로그램들이 Subsystem을 이용하여 이 환경에서 실행된다. 크게 4가지(어플리케이션, 시스템 지원 프로세스, 서비스 프로세스, Environment Subsystems) SubSystem이 동작할 수 있는 환경을 제공하는데, SubSystem없이 윈도우 동작 할 수 없는 중요한 부분이다. 그리고 아래 그림은 32bit머신의 커널과 유저모드의 메모리 공간이다.

[그림] 기본 메모리 할당 영역

위 그림처럼 유저모드 영역이 0h~7fffffffh(2GB)까지 사용됨을 알 수 있다. 이후 80000000h~ffffffffh까지 커널 영역이 사용하는데 커널은 시스템 부팅시 시스템에서 필요로 하는 공간을 미리 영역별로 계산하여 공간을 할당하게 된다. 이 특성으로 몇몇 커널의 특정 시스템 영역은 매번 같은 위치를 할당 받기도 한다. 차후 역분석을 많이 하다 보면, 메모리 번지수 만으로도 많은 예측이 가능하게 될 것이다. 다만 이는 32bit 시스템에 일반적인 것이며, 64bit의 경우 전혀 다른 레이아웃을 가지게 된다. 그리고 32bit 메모리 시스템에서 4GB의 메모리 제한 때문에 몇가지 메모리 관련 기술을 추가로 제공한다.

그 하나는 유저모드 영역을 확장해서 써야 하는 경우(MSSQL, EXCHANGE등 많은 메모리를 필요로하는 프로그램) boot.ini에 /3GB 옵션을 사용하여, 유저모드 영역을 늘릴수 있다. 하지만 시스템 관점에서 시스템에서 사용하는 PTE(Page Table Entry), Non-pagepool, pagepool 등에서 사용 가능한 메모리 양이 줄어 들어, 시스템과 프로그램에서 오류를 나타낼 수 있으므로 사용에 주의 해야 하며, /USERVA 옵션을 통해 확장할 유저 모드 공간을 조절하도록 권장하고 있다.

그 외에도 32bit에서 4GB이상을 사용할 수 있는 /PAE(Physical Address Extension)도 있는데, 이 역시 4GB이상 메모리 영역 표시를 위해 기존 32bit 크기의 PTE(Page Table Entry)를 두배로 사용하면서 사용 가능한 PTE 용량이 배로 줄어들어, 사용에 신경을 써야 한다.

위 기술들의 사용이 필요할 경우 (http://support.microsoft.com/kb/291988/ko)를 참고해 사용하기 바라며, 시스템의 메모리 사용량은 아래와 같이 확인 할 수 있다.

[그림] : Livekd에서 확인한 Virtual Memory 사용현황

갑자기 메모리 영역이 나와 조금 당황하였겠지만, 메모리는 윈도우 시스템 구조를 이해하는데 있는 빠질 수 없는 내용으로 다른 글을 내용을 이해하는게 좋다.

Facebook Comments

Leave A Reply

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

This site uses Akismet to reduce spam. Learn how your comment data is processed.