Attach2011. 7. 16. 19:21

32bit OS에서 유저 프로세스가 사용할 수 있는 메모리 영역은 4GB이다.
하지만 AWE(Address Windowing Extension)을 이용하면 4GB보다 더 많이 쓸 수 있다.

AWE의 원리는, 기본적으로 Virtual address 가 가르키는 물리 메모리 영역은 1byte 인데.
Address Translation mode 를 바꿈으로써 1byte 이상을 가르키게 할 수 있는 방법이다.

AllocateUserPhysicalPages()를 이용하여 AWE로 사용할 물리 메모리 영역을 할당해놓고,
VirtualAlloc()의 MEM_PHYSICAL 로 VA Range(ex: 0x40000 ~ 
0x50000) 에 AWE 물리 메모리 영역을 가르키게 해놓는다.
그러면 기본적으로는 0x40000 ~ 0x50000 이 가르키는 영역은 기본 Virtual Address 영역이지만,
MapUserPhysicalPages() 를 호출하면 VA Range 가 가르키는 영역이 AWE 물리 메모리 영역으로 바뀐다.
즉, MapuserPhysicalPages()를 호출하면 Virtual Address Translation 로직이 다르게 바뀌는 것이다.
원래대로 되돌리려면  
 MapuserPhysicalPages() 에 인자를 NULL을 넣어서 호출한다.

이렇게 하면 물리적으로 4GB 이상의 메모리를 쓸 수 있지만, 
포인터를 이용해서 접근하려면 내가 지금 AWE 용 Address Translation 모드인지 아닌지를 항상 기억해야 한다 -_-
그래서 잘 안쓰는 듯..?
(혹시 잘 쓰시는 분 있으시면 리플 좀 부탁 드립니다 ㅠㅠ)

설명 : http://msdn.microsoft.com/en-us/library/aa366527(v=vs.85).aspx
예제 : http://msdn.microsoft.com/en-us/library/aa366531(v=vs.85).aspx

 

Posted by 飛烏

댓글을 달아 주세요

  1. ...일단 주로 사용되는 용어는 physical address extension인 듯 하고 (네가 써 놓은 용어는 오늘 처음 봤다), 64 bit OS를 직접 선택할 수 있는 환경이면 이런 번잡하고 error prone한 방법을 쓸 이유가 없다. 그냥 WoW64 위에 돌리면 해결.
    나머지 중, 4G 이상의 메모리에 특정 Windows boot loader 옵션에 이런 식으로 트릭을 써서 메모리 처리해야하는 프로그램이 많지 않은 이상 (거의 없다고 본다?) 이걸 쓸 일은 없겠지.

    한마디로 (현재로써는) 별 쓸모가 없어서 안 쓴다가 아닌가?

    2011.07.16 21:00 [ ADDR : EDIT/ DEL : REPLY ]
    • PAE 는 32bit OS가 물리적으로 사용할 수 있는 메모리의 한계치를 늘릴 수 있는 방법이고, PAE로 늘어난 메모리를 유저 프로세스에서 사용하는 방법 중 하나가 AWE 로 알고 있어요.
      말씀하신대로 error 나기가 겁나 쉽고, 복잡한 메모리풀을 만들어야지만 쓸 수 있는데, 32bit OS용 mssql 같은 거는 어쩔 수 없이 쓸 수 밖에 없죠 뭐;;
      메모리 부족 이슈에 대해서 제가 생각하는 솔루션도 64bit 고고씽입니다 ㅎㅎ

      2011.07.17 18:36 [ ADDR : EDIT/ DEL ]
  2. 일단, 64빗으로 포팅할 수 없다면, WoW64에서 돌리더라도 유저 프로세스 주소 공간이 4G로 제한되니, 의미가 없진 않겠네요. 그러나 로직 짤 때 현재 페이지를 신경써가면서 짜야 하는 상황은 절대로 피하고 적절한 추상화 계층을 통해서만 접근하도록 해야 할텐데, 그럴거면 memcached나 redis 같은 외부 프로세스 해결책을 쓰는 걸 먼저 검토해 보는 게 바람직하겠죠.

    2011.07.17 11:03 [ ADDR : EDIT/ DEL : REPLY ]
    • memcached 나 redis 에 대해서 한번 알아봐야겠네요.
      뭘 쓰든지 결국 한시책인 것 같고, 결론적으로 64bit 용으로 포팅하는 것이 올바른 방향이겠죠-

      2011.07.17 18:35 [ ADDR : EDIT/ DEL ]
  3. 결론은 언제나 그렇듯 "그거(늘어난 메모리) 가지고 어디 쓰려고?"

    2011.07.17 11:08 [ ADDR : EDIT/ DEL : REPLY ]