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?
Odpowiedzi:
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.
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.
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?
źródło
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.
źródło
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.
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).
źródło
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.
źródło
mmap
dodatkowej pamięci.