Udostępnij za pośrednictwem


Rozszerzenia okien adresowych

Rozszerzenia okien adresowych (AWE) to zestaw rozszerzeń, które umożliwiają aplikacji szybkie manipulowanie pamięcią fizyczną większą niż 4 GB. Niektóre aplikacje intensywnie korzystające z danych, takie jak systemy zarządzania bazami danych i oprogramowanie naukowe i inżynieryjne, wymagają dostępu do bardzo dużych pamięci podręcznych danych. W przypadku bardzo dużych zestawów danych ograniczenie pamięci podręcznej tak, aby mieściła się w 2 GB przestrzeni adresowej użytkownika aplikacji, jest poważnym utrudnieniem. W takich sytuacjach pamięć podręczna jest zbyt mała, aby prawidłowo obsługiwać aplikację.

AWE rozwiązuje ten problem, umożliwiając aplikacjom bezpośrednie adresowanie ogromnych ilości pamięci, jednocześnie używając wskaźników 32-bitowych. Usługa AWE umożliwia aplikacjom posiadanie pamięci podręcznych danych większych niż 4 GB (w przypadku gdy jest wystarczająca ilość pamięci fizycznej). AWE używa fizycznej niestronicowanej pamięci oraz widoków okien na różne części tej pamięci fizycznej w 32-bitowej wirtualnej przestrzeni adresowej.

AWE nakłada kilka ograniczeń dotyczących sposobu użycia tej pamięci, przede wszystkim dlatego, że te ograniczenia umożliwiają bardzo szybkie mapowanie, ponowne mapowanie i zwalnianie. Szybkie zarządzanie pamięcią jest ważne dla tych potencjalnie ogromnych przestrzeni adresowych.

  • Wirtualne zakresy adresów przydzielone dla AWE nie są dostępne dla innych procesów (i dlatego nie są dziedziczone). W rzeczywistości dwa różne adresy wirtualne AWE w ramach tego samego procesu nie mogą mapować tej samej strony fizycznej. Te ograniczenia zapewniają szybkie ponowne mapowanie i czyszczenie, gdy pamięć zostanie zwolniona.
  • Strony fizyczne, które można przydzielić dla regionu AWE, są ograniczone przez liczbę stron fizycznych znajdujących się na maszynie, gdyż ta pamięć nigdy nie jest stronicowana — jest zablokowana i niedostępna do momentu jawnego zwolnienia przez aplikację lub wyjścia z niej. Strony fizyczne przydzielone dla danego procesu można mapować do dowolnego regionu wirtualnego AWE w ramach tego samego procesu. Aplikacje korzystające z AWE muszą uważać, aby nie używać tak dużej ilości pamięci fizycznej, że powodują nadmierne stronicowania innych aplikacji lub zapobiegać tworzeniu nowych procesów lub wątków z powodu braku zasobów. Użyj funkcji GlobalMemoryStatusEx, aby monitorować użycie pamięci fizycznej.
  • Adresy wirtualne AWE są zawsze do odczytu/zapisu i nie mogą być chronione przez wywołania do VirtualProtect (to znaczy, że nie można określić pamięci tylko do odczytu, pamięci niedostępnej, stron ochrony ani podobnych).
  • Zakresy adresów AWE nie mogą być używane do buforowania danych na potrzeby wywołań graficznych lub wideo.
  • Nie można podzielić zakresu pamięci AWE ani usunąć elementów. Zamiast tego cały zakres adresów wirtualnych należy usunąć jako jednostkę, gdy jest wymagane usunięcie. Oznacza to, że podczas wywoływania VirtualFreenależy określić MEM_RELEASE .
  • Aplikacje mogą mapować wiele regionów jednocześnie, pod warunkiem, że nie nakładają się na siebie.
  • Aplikacje korzystające z AWE nie są obsługiwane w trybie emulacji. Oznacza to, że aplikacja x86 korzystająca z funkcji AWE musi być ponownie skompilowana do uruchamiania na innym procesorze, podczas gdy większość aplikacji może działać bez ponownego komplikowania w emulatorze na innych platformach.

To rozwiązanie rozwiązuje problemy z pamięcią fizyczną w bardzo ogólny, powszechnie stosowany sposób. Oto niektóre zalety AWE:

  • Niewielka grupa nowych funkcji jest definiowana w celu manipulowania pamięcią AWE.
  • AWE zapewnia bardzo szybką możliwość ponownego mapowania. Ponowne mapowanie odbywa się przez manipulowanie tabelami pamięci wirtualnej, a nie przenoszeniem danych w pamięci fizycznej.
  • Usługa AWE zapewnia stopień szczegółowości rozmiaru strony odpowiedni dla procesora (na przykład 4 KB na x86), co jest bardziej przydatne dla aplikacji niż duże strony (na przykład 2 MB lub 4 MB na x86).

Aby móc korzystać z usługi AWE, aplikacja musi mieć uprawnienia Blokada stron w pamięci. Aby uzyskać to uprawnienie, administrator musi dodać Zablokuj strony w pamięci do Przypisywania praw użytkownika. Aby uzyskać więcej informacji na temat tego, jak to zrobić, zobacz "Prawa użytkownika" w pomocy systemu operacyjnego.

Następujące funkcje składają się na interfejs API AWE (Address Windowing Extensions).

Funkcja Opis
VirtualAlloc i VirtualAllocEx Zarezerwuj część wirtualnej przestrzeni adresowej do użycia w ramach AWE przy użyciu MEM_PHYSICAL.
PrzydzielUserPhysicalPages Przydziel pamięć fizyczną do użycia z AWE.
MapUserPhysicalPages Mapuj (lub unieważnij) adresy wirtualne AWE na dowolny zestaw stron fizycznych uzyskanych za pomocą AllocateUserPhysicalPages.
MapUserPhysicalPagesScatter Mapuj (lub unieważniaj) adresy wirtualne AWE na dowolny zestaw stron fizycznych uzyskanych za pomocą AllocateUserPhysicalPages, ale z dokładniejszą kontrolą niż ta oferowana przez MapUserPhysicalPages.
FreeUserPhysicalPages Bezpłatna pamięć fizyczna używana przez AWE.