Wykorzystanie 32-bitowej pamięci aplikacji w 64-bitowym systemie operacyjnym.

13

Jeśli mój system operacyjny jest 64-bitowy, czy moje 32-bitowe aplikacje mogą korzystać z pamięci 64-bitowej (> 3,5 GB)?

Pete2k
źródło

Odpowiedzi:

6

Jeśli aplikacja ma świadomość AWE, może używać przestrzeni adresowej przekraczającej 4 Gb, choć mniej wydajnie niż 64-bitowa aplikacja. Możliwe jest nawet, aby procesy 32-bitowe w 32-bitowych wariantach systemu Windows uzyskały dostęp większy niż 32-bitowa przestrzeń adresowa na to pozwala, jeśli PAE jest włączone i proces jest w stanie z niego korzystać.

Indywidualny proces 32-bitowy (który nie jest świadomy AWE) jest zwykle ograniczony do 3Gb (pierwszy Gb jego wirtualnej przestrzeni adresowej jest zarezerwowany dla akcji związanej z jądrem), ale jeśli uruchomisz wiele procesów, będą mogli użyć więcej w łącznie (każdy może zużyć do 3Gb, jeśli pozwala na to całkowita pamięć), ponieważ ich wirtualne przestrzenie adresowe nie są współużytkowane.

Limit na proces jest bardziej pomocny w środowisku podobnym do Uniksa, w którym usługi są raczej oparte na procesach niż na wątkach (wiele wątków w jednym procesie współużytkuje zasoby procesów, a zatem współdzieli jedną wirtualną przestrzeń adresową 3Gb), ponieważ jest to bardziej powszechne w systemie Windows (rozpoczęcie nowego procesu w systemie Windows jest dość drogie, więc preferowane są wątki, w większości środowisk Unix rozpoczęcie nowego procesu nie wymaga dużo więcej zasobów niż rozpoczęcie nowego wątku) . Nie jest to bardzo pomocne na przykład na komputerze, na którym działa tylko SQL Server, ponieważ będzie to tylko jeden proces, więc osiągnie limit 3Gb (niektóre edycje można skonfigurować tak, aby były świadome AWE, ale nie wszystkie, i funkcja ma zostać usunięta w następnej głównej wersji) .

Oprócz tego, że 32-bitowe procesy mogą w sumie użyć więcej niż 3Gb, system operacyjny będzie mógł wykorzystać dowolną nieużywaną pamięć do buforowania dysku, więc może się nie zmarnować, zakładając, że procesy nie otwierają plików w taki sposób aby powiedzieć systemowi operacyjnemu, aby nie zawracał sobie tym głowy.

David Spillett
źródło
Proces 32-bitowy z zestawem IMAGE_FILE_LARGE_ADDRESS_AWARE ma limit 4 GB, a nie 3. msdn.microsoft.com/en-us/library/aa366778(VS.85).aspx
Mark Sowul
5

Jeśli aplikacja używa AWE , to tak (chociaż nie jest to ograniczone do 64-bitowych systemów operacyjnych). Bez tego proces jest nadal ograniczony do przestrzeni adresowej 4 GB.

Ignacio Vazquez-Abrams
źródło
-1, chociaż prawda, myślę, że częściowa odpowiedź jest myląca, ponieważ żaden (32-bitowy proces AWE) nigdy nie będzie miał do dyspozycji 4 GB pamięci RAM.
pipTheGeek,
@pipTheGeek Erroneous: 32-bitowy proces z ustawionym IMAGE_FILE_LARGE_ADDRESS_AWARE = ​​dostępne 4 GB. msdn.microsoft.com/en-us/library/aa366778(VS.85).aspx
Mark Sowul
@ Mark - zapomniałem o tym i poprawiłem swoją odpowiedź poniżej. Nadal uważam, że ta odpowiedź jest niepełna.
pipTheGeek
3

Sortuj, w zależności od tego, co masz na myśli.

Zakładanie systemu Windows ...

Jeśli system operacyjny jest 64-bitowy, proces 32-bitowy domyślnie otrzymuje 2 GB wirtualnej przestrzeni adresowej adresu użytkownika. Jeśli nagłówek PE pliku .exe jest oznaczony flagą IMAGE_FILE_LARGE_ADDRESS_AWARE, wówczas proces otrzyma 4 GB wirtualnej przestrzeni adresowej adresowanej przez użytkownika. W obu przypadkach wirtualna przestrzeń adresowa jądra jest taka sama jak procesy 64-bitowe, ponieważ jest współdzielona przez wszystkie procesy. Warto również zauważyć, że 64-bitowe procesy, które nie ustawiają flagi IMAGE_FILE_LARGE_ADDRESS_AWARE, mają również dostęp tylko do 2 GB wirtualnej przestrzeni adresowej użytkownika.

Rzeczy, które słyszysz o specjalnych flagach rozruchowych, przełącznikach 3 GB, / 3 GB lub / userva dotyczą 32-bitowych systemów operacyjnych i nie mają zastosowania w 64-bitowym systemie Windows.

Wszystko to zostało szczegółowo omówione na niesamowitej stronie Microsoft Limity pamięci dla wydań Windows .

Odpowiedź Davida Spilletta dotyczy także innego punktu: wiele procesów, wszystkie ograniczone do 2 GB przestrzeni użytkownika, może nadal używać znacznej ilości pamięci RAM, jeśli jest dostępna, podobnie jak pamięć podręczna plików.

afrazier
źródło
0

Proces 32-bitowy w 32-bitowym systemie operacyjnym ma 4 GB przestrzeni adresowej, z czego 2 GB jest zarezerwowane przez system operacyjny, 2 GB jest dostępne dla tego procesu.
Istnieje przełącznik, który można określić w systemie operacyjnym (/ 3 GB), który zmienia kwotę zarezerwowaną dla systemu operacyjnego tylko na 1 GB i pozwala procesowi mieć 3 GB, ALE, tylko jeśli proces deklaruje się jako duży adres świadomy w flagach pliku wykonywalnego.

W 64-bitowym systemie operacyjnym proces 32-bitowy otrzyma 4 GB, jeśli ma duży adres, w przeciwnym razie 2 GB.

Wszystko to dotyczy procesów nieświadomych AWE. Jeśli proces może korzystać z AWE, to, jak powiedzieli inni, może korzystać z dużej przestrzeni adresowej, ale mniej wydajnie niż proces 64-bitowy.

PAE pozwala 32-bitowemu systemowi operacyjnemu na wykorzystanie więcej niż 4 GB pamięci RAM, ma jednak problemy ze zgodnością i został wyłączony w XP przez jeden z dodatków Service Pack, więc jest dostępny tylko w wersjach systemu operacyjnego serwera.

pipTheGeek
źródło