Czy komputer z 32-bitowym systemem operacyjnym może zużywać cały 8 GB pamięci RAM + 20 GB pliku strony?

98

Co rozumiem w 32-bitowym systemie operacyjnym, adres jest wyrażony w 32 bitach, więc co najwyżej system operacyjny może użyć 2 32 = 4G pamięci - zakładam, że jednostka to bajty, więc 4 GB.

Czy to oznacza, że ​​jeśli jakikolwiek komputer z 32-bitowym systemem operacyjnym (Windows lub Unix) ma więcej niż 4 GB pamięci RAM + plik strony na dysku twardym, na przykład 8 GB pamięci RAM i plik strony 20 GB, jego pamięć nigdy nie zostanie „zużyta” „?

Przez „zużyty” rozumiem, że zwiększenie pamięci RAM lub pliku strony nie poprawi wydajności; oczywiście zawsze jest możliwe, że aplikacja będzie nadal żądać pamięci od systemu operacyjnego, ale zawiedzie.

Podobnie, jeśli ten 32-bitowy komputer z systemem operacyjnym ma 2 GB pamięci RAM i 2 GB pliku strony, zwiększenie rozmiaru pliku strony nie wpłynie na wydajność. Czy to prawda?

athos
źródło
2
Na marginesie, jeśli masz więcej niż 4 GB pamięci RAM i tylko 32-bitowy system operacyjny, możesz utworzyć dysk RAM. To jest dysk twardy w twojej pamięci RAM i możesz go użyć w nieużywanej / nieadresowanej pamięci RAM.
Simon Verbeke
10
Nie możesz Ramdysk musi zostać utworzony przez system operacyjny, jeśli system operacyjny nie może użyć pamięci, nie można również utworzyć ramdysku. (Chyba że twoje bios może stworzyć ramdysk, co jest rzadkie).
AVee,
1
Krótka odpowiedź brzmi „tak”. Chociaż zwykle procesowi przydzielana jest 32-bitowa przestrzeń adresowa, sam system operacyjny może z niego korzystać więcej (albo przez przełączanie banków, jak to robiliśmy w latach 80., albo przez sztuczkę rozszerzenia adresu jako szkołę PAE Intela. Pamiętaj też, że używasz więcej niż jeden program na raz, który może składać się z więcej niż jednego procesu (Chrome umieszcza zakładki w różnych procesach), a sam system operacyjny będzie używał pamięci do buforowania danych z lokalnych stałych dysków, dzięki czemu uzyskasz szybszy dostęp do danych już używane
rbanffy

Odpowiedzi:

145

Rozumiem, że w 32-bitowym systemie operacyjnym adres jest wyrażony w 32 bitach, więc co najwyżej system operacyjny może użyć 2 ^ 32 = 4 GB pamięci

Najbardziej, że proces może zająć to 4GB. Potencjalnie mylisz pamięć z przestrzenią adresową . Proces może mieć więcej pamięci niż przestrzeń adresowa. Jest to całkowicie legalne i dość powszechne w przetwarzaniu wideo i innych aplikacjach intensywnie korzystających z pamięci. Procesowi można przypisać dziesiątki GB pamięci i dowolnie zamieniać go w przestrzeń adresową. Jednocześnie do przestrzeni adresowej użytkownika można przejść tylko 2 GB .

Jeśli masz garaż na cztery samochody w swoim domu, nadal możesz posiadać pięćdziesiąt samochodów. Po prostu nie możesz trzymać ich wszystkich w garażu. Musisz mieć dodatkowe miejsce do przechowywania co najmniej 46 z nich; jakie samochody trzymasz w garażu, a które na parkingu przy ulicy, zależy od ciebie.

Czy to oznacza dowolny 32-bitowy system operacyjny, czy to Windows, czy Unix, jeśli maszyna ma pamięć RAM + plik stronicowania na dysku twardym większym niż 4 GB, na przykład 8 GB pamięci RAM i plik stronicowania 20 GB, nigdy nie będzie „zużytej pamięci”?

Absolutnie to nie znaczy. Pojedynczy proces może zużyć więcej pamięci! Ponownie ilość pamięci wykorzystywanej przez proces jest prawie całkowicie niezwiązana z ilością wirtualnej przestrzeni adresowej wykorzystywanej przez proces. Podobnie jak liczba samochodów, które trzymasz w garażu, jest całkowicie niezwiązana z liczbą posiadanych przez ciebie samochodów.

Ponadto dwa procesy mogą współużytkować nieprywatne strony pamięci . Jeśli dwadzieścia procesów ładuje tę samą bibliotekę DLL, wszystkie procesy współużytkują strony pamięci dla tego kodu. Nie dzielą przestrzeni adresowej pamięci wirtualnej , dzielą pamięć .

Chodzi mi o to, że w przypadku, gdy nie jest to jasne, powinieneś przestać myśleć o pamięci i adresować przestrzeń jako to samo, ponieważ to wcale nie jest to samo.

jeśli ten 32-bitowy komputer z systemem operacyjnym ma 2 GB pamięci RAM i 2 GB pliku strony, zwiększenie rozmiaru pliku strony nie poprawi wydajności. Czy to prawda?

Masz pięćdziesiąt samochodów i garaż na cztery samochody, a także 100 parkingów na ulicy. Zwiększasz wielkość parkingu do 200 miejsc. Czy któryś z twoich samochodów przyspiesza w wyniku tego, że masz teraz 150 dodatkowych miejsc parkingowych zamiast 50 dodatkowych miejsc parkingowych?

Eric Lippert
źródło
26
Uważam, że ta odpowiedź nie dotyczy omawianego pytania i jest w niektórych punktach zwodnicza.
Rig
48
@Rig: Niesamowite, cieszę się z twojej konstruktywnej krytyki. Teraz masz szansę napisać lepszą odpowiedź i pokazać nam odpowiedź, która Twoim zdaniem jest mniej zwodnicza i trafniejsza.
Eric Lippert,
4
@BlueRaja: Podejrzewam, że mylisz pamięć fizyczną z pamięcią . Pamięć fizyczna to tylko optymalizacja, która umożliwia szybszy dostęp do pamięci. Podobnie jak pamięci podręczne procesorów są optymalizacją, która umożliwia szybszy dostęp do pamięci. Pamięć jest przeznaczona do wszystkich celów i miejsc zarezerwowanych w pliku strony. To, czy dana strona w pliku stron jest (1) zamapowana na adres pamięci wirtualnej, czy (2) skopiowana z dysku do pamięci fizycznej, nie ma znaczenia dla pytania, czy jest ona przydzielona, czy nie.
Eric Lippert,
4
@BlueRaja: Artykuł Raymonda Chena na ten temat może pomóc. Pokazuje, jak przydzielić 4 GB z pliku strony; to pamięć, którą posiada proces . Proces nie może oczywiście zająć się całą rzeczą od razu, ale może adresować dowolną stronę poprzez mapowanie strony na nieużywaną stronę maszyny wirtualnej, używanie jej przez pewien czas, a następnie odrzucanie. blogs.msdn.com/b/oldnewthing/archive/2004/08/10/211890.aspx
Eric Lippert
3
Odpowiedź byłaby jaśniejsza, Eric, gdybyś wyraźnie stwierdził, że Windows (i inne systemy operacyjne) pozwalają ci „zarezerwować” pamięć bez faktycznego posiadania jej w wirtualnej przestrzeni adresowej, a następnie odpowiedzieć na oczywiste pytanie „to jak to zrobić zaadresuj to?". Myślę, że odpowiedź brzmi: „istnieje jakiś identyfikator strony, którego używasz do odwoływania się do niego w wirtualnej przestrzeni adresowej, a potem możesz go tam adresować”, ale nie wiem i twoja odpowiedź nie mówi :)
Timwi
67

Prawdą jest, że procesor może obsłużyć maksymalnie 4 GB pamięci RAM. Jednak obecne procesory używają MMU ( jednostki zarządzania pamięcią ) do tłumaczenia adresów pamięci specyficznych dla procesu na adresy pamięci fizycznej.

Ta MMU jest używana do wszelkiego rodzaju różnych sztuczek, od izolacji pamięci (proces A nie może manipulować pamięcią procesu B) do współdzielenia pamięci (proces A może uzyskać dostęp do tego samego obszaru pamięci fizycznej co proces B i może wymieniać dane w ten sposób).

Chociaż 32-bitowy procesor obsługuje tylko 4 GB pamięci na proces, może on adresować do 64 GB pamięci RAM podczas korzystania z rozszerzenia adresu fizycznego . Umożliwia to procesowi A użycie pierwszego 4 Gb pamięci, podczas gdy proces B używa następnego 4 Gb. W sumie wykorzystuje się ponad 4 GB pamięci fizycznej, ale łączna ilość pamięci wykorzystywana przez pojedynczy proces jest nadal ograniczona do 4 GB .

PAE jest obsługiwany w systemie Linux od jądra w wersji 2.3.23 i niektórych 32-bitowych wersjach systemu Windows Server, ale nie w 32-bitowym systemie Windows XP, Vista lub 7.

Jeśli twój procesor nie obsługuje PAE, będziesz mieć do 4 GB pamięci fizycznej (lub mniej w zależności od innych czynników).

Pamiętaj, że twój system operacyjny nadal może eksmitować części pamięci fizycznej na dysk (plik strony) niezależnie od procesora obsługującego PAE. Dzięki temu możesz rozpocząć wiele procesów, które wykorzystują więcej niż 4 Gb łącznie. Jedyny wpływ PAE polega na tym, czy możesz zachować 4 Gb procesu B w pamięci fizycznej podczas uruchamiania procesu A.

Dave Webb
źródło
czy to znaczy, że jeśli to nie obsługuje, to co powiedziałem powyżej to poprawne?
10
Windows XP obsługuje PAE (myślę, że zaczyna się od SP2), ale ignoruje pamięć RAM przekraczającą 4 GB, nawet jeśli maszyna obsługuje PAE; patrz tutaj . Służy do sprzętowego zapobiegania wykonywaniu danych - bit NX / XD jest dostępny tylko we wpisie tablicy strony PAE, a nie „zwykłym” wpisie tablicy strony.
Wyzard,
Chipset może być również czynnikiem ograniczającym, ile pamięci może być obsługiwane / używane niezależnie od wybranego systemu operacyjnego lub włamania.
Moab
5
Dodałbym, że powodem, dla którego konsumenckie wersje 32-bitowych okien nie obsługują> 4 GB pamięci RAM, było stwierdzenie, że znaczna liczba napędów sprzętowych nie działa poprawnie z tak dużą pamięcią; a ponieważ w tamtym czasie> 4 GB pamięci RAM było niezwykle rzadkie poza serwerami / ultra high endowymi stacjami roboczymi, większość firm, które utrzymywały sterowniki, nie była zainteresowana wydawaniem pieniędzy na aktualizację sterowników, które byłyby wykorzystywane tylko przez 0,1% ich klientów.
Dan Neely,
6
@DanNeely OS nie ma wsparcia dla pamięci, jest ograniczona z powodu problemów licencyjnych . Chociaż zgadzam się, że jest to włamanie do strony trzeciej, dotyczy to tylko konsumenckich wariantów systemu Windows. Dystrybucje Windows oparte na serwerach, począwszy od Windows 2000 , miały wsparcie dla ponad 4 GB pamięci (patrz pierwszy link).
Przełom
15

Mówiąc konkretnie o 32-bitowych wariantach Windows, mieli wsparcie dla ponad 4 GB pamięci RAM od wariantów Windows 2003 (możesz także uzyskać hack jądra dla Windows 7, aby umożliwić korzystanie z całej pamięci RAM w 32-bitowej wersji). Jest to jednak kosztowne, jak opisano w pierwszej części pytania.

W 32-bitowym systemie operacyjnym rozmiar wskaźnika (adres pamięci) jest taki sam, jak długość słowa procesora, 32-bitowa, co pozwala (jak wspomniałeś) na 2 ^ 32 = 4 GB pamięci. System Windows stosuje także podejście „pamięci wirtualnej” dla aplikacji, więc każda aplikacja ma własne miejsce w pamięci.

Ponieważ każdy wskaźnik ma tylko 32-bitową szerokość, wskaźniki każdej aplikacji mogą adresować tylko do 4 GB pamięci, mimo że system może obsłużyć więcej niż 4 GB pamięci RAM. O ile mi wiadomo, jest to jedyne zastrzeżenie dotyczące używania ponad 4 GB pamięci RAM w 32-bitowym systemie operacyjnym. W sumie możesz mieć wiele aplikacji wykorzystujących więcej niż 4 GB pamięci RAM łącznie, ale każdy konkretny proces może przydzielić / uzyskać dostęp do maksymalnie 4 GB.


Wracając do pytania, załóżmy, że masz program, który wykorzystuje 2 GB pamięci RAM. Jeśli masz 10 wystąpień tego programu, to 20 GB. Zużyte zostanie całe 8 GB pamięci RAM, a także kolejne 12 GB pliku strony. Tak, więc w 32-bitowych systemach operacyjnych wykorzystanie tej pamięci jest więcej niż możliwe.

jeśli ten 32-bitowy komputer z systemem operacyjnym ma 2 GB pamięci RAM i 2 GB pliku strony, zwiększenie rozmiaru pliku strony nie poprawi wydajności. czy to prawda?

Zwiększenie rozmiaru pliku stronicowania zwykle nie zwiększa wydajności (chyba że pamięć RAM i plik stronicowania są ustawione na absolutne minimum lub ustawione na tak niskim poziomie, że komputer ciągle drażni). Zapobiegnie to jednak wyczerpaniu się pamięci (wirtualnej) w komputerze. Ilekroć coś musi zostać usunięte do pliku stronicowania, już idziesz do ogromnego spadku wydajności (ponieważ dysk twardy jest o rząd wielkości wolniejszy niż pamięć RAM).

Przełom
źródło
Z 4 GB przestrzeni adresowej, którą otrzymuje każdy proces, tylko 2 GB jest faktycznie dostępne dla programu; pozostałe 2 GB jest zarezerwowane do użytku przez jądro. / 3GB opcja rozruchu może pozwolić niektóre programy do wykorzystania większej ilości pamięci RAM.
Wyzard,
1
@Breakthrough: „Zwiększenie rozmiaru pliku strony nigdy nie zwiększy wydajności” Nie sądzę, że to prawda. Na przykład, jeśli jest więcej wymiany, system operacyjny może bardziej agresywnie wymieniać nieużywane dane programu i wykorzystywać wolną pamięć RAM np. Do buforowania dysku. W niektórych konfiguracjach może to zapewnić lepszą wydajność. Na ServerFault znajduje się ładna odpowiedź na pytanie, dlaczego plik strony jest ważny, który dotyczy tych problemów: serverfault.com/questions/23621/…
sleske,
2
Uważaj na ogólne instrukcje, takie jak: „Zwiększenie rozmiaru pliku strony nigdy nie zwiększy wydajności” , jest całkiem możliwe, że plik strony jest zbyt mały, aby spowodować więcej przeładowania dysku niż posiadanie większego pliku strony! Zobacz odpowiedzi i komentarze w tym pytaniu .
Mark Booth,
1
@sleske Dobra uwaga, zaktualizowałem go, aby był bardziej typem „zwykle nie”. Chociaż zgadzam się, że może to mieć ogromną różnicę na serwerze, dla większości osób próbowałem się z tym pogodzić, ponieważ lepiej byłoby, gdyby mieli więcej pamięci RAM (ponieważ podczas stronicowania wydajność jest tak samo niska jak to możliwe).
Przełom
-1

Kiedy mówi się, że procesor jest 32-bitowy, oznacza to, że może działać z liczbami 32-bitowymi za pomocą jednej instrukcji. Nie ma to wiele wspólnego z szerokością magistrali adresowej, która w architekturze Intela jest 36-bitowa od czasu wydania Pentium Pro w 1995 roku.

Słynne ograniczenie 4 GB wynika z faktu, że większość oprogramowania komputerowego wykorzystuje model pamięci Flat, w którym każdy bajt pamięci może być zaadresowany wskaźnikiem. Ponieważ wskaźnik powinien zmieścić się w rejestrze, który ma być używany, a rejestry mają 32-bitową szerokość, jesteś ograniczony do 4 GB.

Dmitrij Grigoriew
źródło
Jest to nieprawidłowe, jak wskazano w innych wcześniejszych odpowiedziach powyżej.
ChrisInEdmonton,
Czy możesz wskazać jeden konkretny fakt, że się pomyliłem?
Dmitrij Grigoriew
1
Pojedynczy proces może zużyć więcej niż 4 GB. W szczególności poprzednie odpowiedzi wskazywały „Proces może mieć więcej pamięci niż przestrzeń adresowa”.
ChrisInEdmonton,
2
Zobacz na przykład blog.superuser.com/2011/04/23/... Teraz z pewnością nie możesz użyć więcej niż 4 GB jednocześnie, ale pojedynczy proces może odwzorować i odwzorować pamięć, więc można użyć więcej niż 4 GB w jednym procesie, jest tylko trochę księgowości. Ten post na blogu jest raczej specyficzny dla systemu Windows. Uruchomiłem serwery baz danych z przydzielonymi> 4 GB pamięci w 32-bitowych instalacjach Linuksa. W dzisiejszych czasach oczywiście byłby to tylko 64-bitowy system Linux.
ChrisInEdmonton,
1
OK, przepraszam. Nie myślałem o możliwości mmapdodatkowej pamięci.
Dmitrij Grigoriew