본문 바로가기
C++ 200제/코딩 IT 정보

WinCE(윈도우 CE) 메모리 아키텍처와 메모리 구조

by vicddory 2018. 4. 20.

WinCE(윈도우 CE) 메모리 아키텍처와 메모리 구조


데스크탑용 윈도우 프로그래머는 윈도우 CE를 접할 때 넘어야 할 산이 조금 있다. WinCE는 다양한 마이크로프로세서와 시스템 아키텍처를 지원하므로 1984년, IBM PC/AT 이래로 계속 유지되어온 IBM/인텔 호환 디자인에 의존한 개발을 할 수 없다.


WinCE는 다양한 장치에서 실행된다. 각 장치는 CPU, 메모리 구조가 다르고 주변 장치가 부분적으로 유사하다는 점을 제외하면 완전히 다른 디자인인 경우가 많다. 하드웨어도 다르지만 윈도우 CE 자체도 이식되는 플랫폼에 따라 달라진다.


어떤 윈도우 모바일 장치들은 버전만 같은 함수 모음을 사용하지만 WinCE는 설정에 따라서 달라질 수도 있다.

또한, 윈도우 CE는 제조업체에서 사용할 수 있는 수많은 컴포넌트를 모아놓은 방식으로 설계됐으므로 각 제조업체는 특정 기능을 제거할 수도 있다.


이런 조건으로 인해 WinCE 개발은 특수한 편이다.


윈도우 CE 메모리 아키텍처 (메모리 구조)


특정 프로세스의 메모리를 다른 프로그램으로부터 보호하는 것은 운영체제의 핵심 기능 중 하나다. 윈도우 ME는 주소 공간을 하나만 사용하고 운영체제와 애플리케이션 사이에 최소한의 보호만을 제공했다. 반면에 윈도우 XP와 윈도우 비스타는 Win32 프로그램을 완전히 분리된 주소 공간에서 동작하게 구현했다.


전체 4GB의 윈도우 CE 주소 영역 다이어그램[전체 4GB의 윈도우 CE 주소 영역 다이어그램]


WinCE는 1996년, 탄생 때부터 모든 프로그램을 하나의 2GB 가상 주소 공간으로 구현했다. 단일 주소 공간을 사용하긴 했지만 각 프로그램은 서로 접근할 수 없게 보호됐다.


이 아키텍처는 윈도우 CE에서 잘 동작하긴 했지만, 익히 알려진(모르는 사람도 있겠지만) 32/32 제한을 수반했다. 32/32 제한이란 가상 머신당 32MB의 메모리와 32개의 프로세스만으로 제한한다는 조건을 말한다.


2006년 11월, 윈도우 CE 6.0(윈도우 임베디드 CE 6.0)가 발표되면서 커널과 운영체제 아키텍처는 완전히 새롭게 설계됐다. 단일 주소 공간을 사용하지 않고 프로그램별로 분리된 가상 공간을 지원하기 시작했다.


WinCE 윈도우 ce 6.0[윈도우 메모리 아키텍처, 구조]


각 프로그램은 2에서 2GB까지 범위의 주소 공간을 사용할 수 있게 됐다. WinCE에서 2GB부터 최상위 4GB까지의 주소 공간 절반은 커널 모드를 위한 영역이다.


이 주소는 커널과 커널 모드에서 실행되는 운영체제의 특정 요소들만 접근할 수 있다. 아래 그림은 이러한 메모리 아키텍처를 나타낸 그림이다. 애플리케이션에서 스레드가 시작될 때 스레드는 운영체제가 활성화한 영역에서 실행이 개시된다.


이 사용자 주소 영역은 사용자 프로세스마다 별도의 영역을 커널 주소 영역은 모든 사용자 프로세스에 대해 일관된 주소 체계를 갖는다. 물론 사용자 모드에서 실행 중인 스레드는 2GB 위의 어떤 주소에도 접근할 수 없으므로 커널 주소 영역을 알 수 없다.


출처 - 윈도우 임베디드 CE 6.0 프로그래밍

WinCE(윈도우 CE) 메모리 아키텍처와 메모리 구조

댓글