'redirection'에 해당되는 글 2건

  1. 2009.09.01 Wow64 - Registry Redirection
  2. 2009.09.01 Wow64에 대해서

앞서 64bit 플랫폼에서 32bit용으로 개발된 기존 어플리케이션이 실행될 수 있도록 해주는 Wow64에 대해서 알아본 바 있습니다. 이번에는 그 세부 내용으로 Registry Redirection에 대해서 알아 보도록 하겠습니다.

‘Redirection’이란 용어는 다른 루트로 자동으로 이동시킨다는 의미입니다. 즉, Wow64를 이용해서 32bit 응용 프로그램이 시스템 레지스트리의 특정 경로에 접근하려고 할 때 64bit 응용 프로그램이 사용되는 공간을 함께 사용하는 것이 아니라 별도의 레지스트리를 사용할 수 있게끔 자동으로 redirection 하는 기능을 말합니다. 이로써 32bit 응용 프로그램에 의해서 64bit 플랫폼에서 사용되는 레지스트리의 값이 임의로 변경되는 것을 막을 수 있기 때문에 전체적으로는 시스템 안정성을 높일 수 있게 됩니다.

리디렉션이 되는 경로는 자동으로 Wow6432Node라는 키 하위로 맵핑 됩니다. 예를 들어 HKEY_LOCAL_MACHINE\SoftwareHKEY_LOCAL_MACHINE\Software\Wow6432Node로 변경되어 사용됩니다. 이러한 행위는 시스템 내부적으로 자동으로 이뤄지는 것이며 이러한 맵핑 경로는 향후 새로운 운영체제나 플랫폼에서 변경될 수도 있기 때문에 응용 프로그램에서 Wow6432Node로 직접 접근해서는 안됩니다.

이러한 Redirection이 모든 레지스트리 키에 대해서 발생하는 것은 아닙니다. 플랫폼에 종속적인 키들은 redirection 되어 물리적으로 독립적인 저장공간을 가지게 되지만, 그 외에 32bit 응용 프로그램과 64bit 응용 프로그램 및 플랫폼이 공유할 수 있는 키는 동일한 저장공간을 그대로 이용하게 됩니다.

예를 들어 HKEY_LOCAL_MACHINE\Software는 Redirection이 발생하지만, HKEY_LOCAL_MACHINE\Software\Classes는 Sharing되어 사용됩니다. 어떠한 항목이 Redirection 또는 Sharing 되는 지에 대해서는 아래 문서에 정리되어 있으므로 참고하시기 바랍니다.

Registry Keys Affected by WOW64
http://msdn.microsoft.com/en-us/library/aa384253(VS.85).aspx

그 외에 Registry Redirection에 대한 전반적인 내용 및 각 항목에 대한 세부 내용을 확인하려면 아래 문서를 참고하시기 바랍니다.

Registry Redirector
http://msdn.microsoft.com/en-us/library/aa384232(VS.85).aspx

'Programming' 카테고리의 다른 글

Device Stack와 Driver loading 순서  (0) 2009.09.07
PnP device의 인식 과정  (0) 2009.09.07
Wow64에 대해서  (0) 2009.09.01
Symbol file에 대해서  (0) 2009.08.05
JavaScript로 클래스 구현하기  (0) 2009.06.16
Posted by noenemy
,

Wow64에 대해서

Programming 2009. 9. 1. 16:08

예전에는 서버용 운영체제에서만 사용되던 64bit 컴퓨팅 환경이 최근에는 CPU 기술의 발달로 개인용 컴퓨터에도 보편화된 추세입니다. 32bit 환경에서는 Intel사가 독보적인 존재였지만, 64bit 환경에서는 AMD가 저렴한 가격에 Intel보다 빨리 개인 사용자용 64bit CPU를 상용화해서 출시함에 따라 시장에서 보다 우위를 차지하고 있습니다.

흔히 32bit 운영체제를 Intel CPU의 이름을 따라 ‘x86’ 기반의 플랫폼이라고 합니다. Intel이 먼저 제품을 출시하였고 이에 따라 후발업체인 AMD는 x86에 호환되도록 CPU를 개발하게 되었습니다. 64bit의 경우 AMD가 먼저 상용화하여 제품을 출시하였는데 이를 ‘x64’라고 흔히 얘기합니다. 그리고 이후에 출시된 Intel의 64bit 제품군은 ‘IA64’라는 이름으로 부릅니다.

32bit 플랫폼에서는 프로세스의 가상메모리로 4G의 영역을 사용할 수 있었습니다. 이는 32bit 플랫폼에서 주소를 가리키는 포인터가 4 byte(32bit)로 표현되기 때문에 표현가능한 주소의 범위가 0~2^32이기 때문입니다. 64bit 플랫폼에서는 포인터의 크기가 8byte로 늘어났기 때문에 프로세스별로 사용가능한 가상메모리의 크기가 크게 늘어났습니다.

하지만 새로운 운영체제를 개발할 때마다 그럼 기존에 개발된 어플리케이션에 대한 하위 호환성도 제공하느냐는 것이 이슈가 됩니다. 사용자들이 업무용이나 개인용으로 사용하고 있던 어플리케이션이 새로운 플랫폼에서 정상 동작하지 않는다면 아무리 새로운 플랫폼이 기술적으로 뛰어나다고 할지라도 새로운 플랫폼으로 이동하는데 장벽이 되기 때문입니다.

64bit 플랫폼에서도 기존에 32bit 용으로 개발된 어플리케이션이 실행될 수 있도록 하는 기능을 제공하고 있는데 이를 ‘Wow64’라고 합니다. Wow는 ‘Windows on Windows’를 의미하는 것으로 실제 64bit Windows 상에서 또 다른 32bit Windows가 실행된다는 의미로 일종의 가상 머신(virtual machine) 환경을 제공한다고 이해하시면 됩니다.

image

[그림] Wow64 아키텍쳐

앞서 이미 설명한 바 있지만 기존에 32bit용으로 개발된 어플리케이션을 64bit 플랫폼에서 실행하는데 있어서 가장 큰 문제가 되는 것은 서로 다른 가상주소 체계를 가지고 있다는 것입니다. 기존에 개발된 어플리케이션은 64bit 플랫폼에서 실행되더라도 여전히 4GB의 가상주소 체계를 사용하고 있습니다. 따라서 기존 어플리케이션의 실행을 위해서 32bit 플랫폼을 시뮬레이션 해주는 중간 계층이 필요하게 됩니다. 위 그림에서 우측 점선으로 표시된 박스가 바로 이 역할을 담당합니다.

32bit 어플리케이션에서 user mode 영역에서 가장 하위에 위치한 ntdll.dll은 원래 kernel mode의 시스템 서비스를 호출하기 위한 stub 코드를 제공합니다만, Wow64의 경우에는 32bit ntdll.dll이 kernel code를 실행하기 이전에 이를 Wow64.dll에서 가로채고 64bit 환경에 맞는 주소체계와 적절한 CPU 명령어로 이를 변환한 후에 64bit ntdll.dll로 전달합니다. 이후의 과정은 64bit kernel code에 의해서 실행되고, 이를 다시 어플리케이션으로 반환하기 위해서는 Wow64 모듈에 의해서 다시 32bit 주소체계로 변환되어 전달되는 식으로 동작합니다.

다만 Wow64가 동작하는 데에는 다음과 같은 제약사항이 있습니다.

  • user mode 영역은 기본으로 2GB, /LARGEADDRESSAWARE가 사용된 경우에는 4GB 까지만 사용 가능합니다.
  • 32bit 응용프로그램은 64bit DLL을 로딩할 수 없습니다. (Wow64 관련 모듈은 제외)
    16bit 응용프로그램은 지원하지 않습니다.
  • Virtual DOS Machine(VDM) API는 사용할 수 없습니다.
  • AWE(Address Windowing Extension), scatter/gather I/O, write-tracking 처럼 page size에 종속적인 API들은 Intel Itanium 계열에서 사용할 수 없습니다.
  • PAE(Physical Address Extension) API는 Intel Itanium 계열에서 사용할 수 없습니다.
    DirectX 하드웨어 가속 API들은 Intel Itanium 계열에서 사용할 수 없습니다.

'Programming' 카테고리의 다른 글

PnP device의 인식 과정  (0) 2009.09.07
Wow64 - Registry Redirection  (0) 2009.09.01
Symbol file에 대해서  (0) 2009.08.05
JavaScript로 클래스 구현하기  (0) 2009.06.16
Windows Sidebar Gadget 만들기 #3 - Settings  (0) 2009.06.01
Posted by noenemy
,