주소 창 확장
AWE(Address Windowing Extensions)는 애플리케이션이 4GB보다 큰 실제 메모리를 신속하게 조작할 수 있는 확장 집합입니다. 데이터베이스 관리 시스템 및 과학 및 엔지니어링 소프트웨어와 같은 특정 데이터 집약적 애플리케이션은 매우 큰 데이터 캐시에 액세스해야 합니다. 매우 큰 데이터 세트의 경우 애플리케이션의 2GB 사용자 주소 공간에 맞게 캐시를 제한하는 것은 심각한 제한입니다. 이러한 상황에서는 캐시가 너무 작아서 애플리케이션을 제대로 지원하지 않습니다.
AWE는 애플리케이션이 32비트 포인터를 계속 사용하는 동안 엄청난 양의 메모리를 직접 해결할 수 있도록 하여 이 문제를 해결합니다. AWE를 사용하면 애플리케이션에서 4GB보다 큰 데이터 캐시를 가질 수 있습니다(충분한 실제 메모리가 있는 경우). AWE는 32비트 가상 주소 공간 내에서 이 실제 메모리의 다양한 부분에 대한 실제 비페이지 메모리 및 창 보기를 사용합니다.
AWE는 주로 이러한 제한으로 인해 매우 빠른 매핑, 다시 매핑 및 해제가 가능하기 때문에 이 메모리를 사용하는 방법에 몇 가지 제한 사항을 배치합니다. 이러한 잠재적으로 엄청난 주소 공간에는 빠른 메모리 관리가 중요합니다.
- AWE에 할당된 가상 주소 범위는 다른 프로세스와 공유할 수 없으므로 상속할 수 없습니다. 실제로 동일한 프로세스 내의 두 개의 서로 다른 AWE 가상 주소는 동일한 실제 페이지를 매핑할 수 없습니다. 이러한 제한은 메모리가 해제되면 빠른 다시 매핑 및 정리를 제공합니다.
- AWE 지역에 할당할 수 있는 실제 페이지는 컴퓨터에 있는 실제 페이지 수에 의해 제한됩니다. 이 메모리는 페이징되지 않으므로 애플리케이션이 명시적으로 해제하거나 종료할 때까지 잠깁니다. 지정된 프로세스에 할당된 실제 페이지는 동일한 프로세스 내의 모든 AWE 가상 지역에 매핑할 수 있습니다. AWE를 사용하는 애플리케이션은 너무 많은 물리적 메모리를 사용하지 않도록 주의해야 하므로 다른 애플리케이션이 과도하게 페이지로 이동하거나 리소스 부족으로 인해 새 프로세스 또는 스레드가 생성되지 않도록 방지해야 합니다. GlobalMemoryStatusEx 함수를 사용하여 실제 메모리 사용을 모니터링합니다.
- AWE 가상 주소는 항상 읽기/쓰기이며 VirtualProtect 호출을 통해 보호할 수 없습니다(즉, 읽기 전용 메모리, noaccess 메모리, 보호 페이지 등을 지정할 수 없음).
- AWE 주소 범위는 그래픽 또는 비디오 호출에 대한 데이터를 버퍼링하는 데 사용할 수 없습니다.
- AWE 메모리 범위는 분할할 수 없으며 일부 메모리 범위를 삭제할 수도 없습니다. 대신 삭제가 필요한 경우 전체 가상 주소 범위를 단위로 삭제해야 합니다. 즉, VirtualFree를 호출할 때 MEM_RELEASE 지정해야 합니다.
- 애플리케이션은 겹치지 않는 경우 여러 지역을 동시에 매핑할 수 있습니다.
- AWE를 사용하는 애플리케이션은 에뮬레이션 모드에서 지원되지 않습니다. 즉, AWE 함수를 사용하는 x86 애플리케이션은 다른 프로세서에서 실행되도록 다시 컴파일해야 하는 반면, 대부분의 애플리케이션은 다른 플랫폼의 에뮬레이터에서 다시 컴파일하지 않고 실행할 수 있습니다.
이 솔루션은 매우 일반적으로 널리 적용 가능한 방식으로 실제 메모리 문제를 해결합니다. AWE의 이점 중 일부는 다음과 같습니다.
- AWE 메모리를 조작하기 위해 작은 새 함수 그룹이 정의됩니다.
- AWE는 매우 빠른 다시 매핑 기능을 제공합니다. 다시 매핑은 실제 메모리에서 데이터를 이동하는 것이 아니라 가상 메모리 테이블을 조작하여 수행됩니다.
- AWE는 프로세서에 적합한 페이지 크기 세분성(예: x86의 경우 4KB)을 제공하며, 이는 큰 페이지(예: x86의 경우 2MB 또는 4MB)보다 애플리케이션에 더 유용합니다.
AWE를 사용하려면 애플리케이션에 메모리의 페이지 잠금 권한이 있어야 합니다. 이 권한을 얻으려면 관리자가 사용자의 사용자 권한 할당에 메모리의 잠금 페이지를 추가해야 합니다. 이 작업을 수행하는 방법에 대한 자세한 내용은 운영 체제 도움말의 "사용자 권한"을 참조하세요.
다음 함수는 AWE(주소 창 확장) API를 구성합니다.
함수 | Description |
---|---|
VirtualAlloc 및 VirtualAllocEx | MEM_PHYSICAL 사용하여 AWE에 사용할 가상 주소 공간의 일부를 예약합니다. |
AllocateUserPhysicalPages | AWE에서 사용할 실제 메모리를 할당합니다. |
MapUserPhysicalPages | AWE 가상 주소를 AllocateUserPhysicalPages로 가져온 실제 페이지 집합에 매핑(또는 무효화)합니다. |
MapUserPhysicalPagesScatter | AWE 가상 주소를 AllocateUserPhysicalPages로 가져온 실제 페이지 집합에 매핑(또는 무효화)하지만 MapUserPhysicalPages에서 제공하는 것보다 더 세밀하게 제어합니다. |
FreeUserPhysicalPages | AWE에 사용된 사용 가능한 실제 메모리입니다. |