Limity pamięci w systemach 16, 32 i 64 bitowych

17

Teoretyczne limity pamięci w maszynach 16, 32 i 64-bitowych są następujące:

  • 16 bitów = 65 536 bajtów (64 kilobajtów)

  • 32 bity = 4 294 967 296 bajtów (4 gigabajty)

  • 64 bity = 18446,744,073,709,551,616 (16 eksabajtów)

Pamiętam z DOS / Windows 3.11 dni, że 16-bitową pamięć można podzielić na segmenty, aby 16-bitowa maszyna mogła uzyskać dostęp do większej ilości pamięci niż 64 kilobajty.

Mam maszynę z 16 GB pamięci i uruchamiam podwójnie 32-bitowy system operacyjny i 64-bitowy system operacyjny. Mogę uzyskać dostęp do wszystkich 16 GB z 64-bitowego, ale tylko 3,21 GB w 32-bitowym.

Zatem moje pytanie brzmi: jeśli 16-bitowe systemy operacyjne zezwalają na dostęp do pamięci o wielkości większej niż 64 KB z powodu segmentacji pamięci, dlaczego maszyny 32-bitowe nie zachowują się tak samo?

Matthew Layton
źródło

Odpowiedzi:

15

Robią, system nazywa się rozszerzenie adresu fizycznego (PAE) . Oto lista systemów operacyjnych Windows i ich maksymalnej pamięci, dowolny 32-bitowy system, który pozwala na więcej niż 4 GB pamięci RAM, korzysta z PAE w celu uzyskania dostępu do pamięci (na przykład Windows 2003 R2 Datacenter 32-bitowy pozwala na 128 GB pamięci RAM).


W rzeczywistości Windows 8 wymaga procesora obsługującego PAE w minimalnych wymaganiach .


Aby odpowiedzieć na „niezadane” pytanie, dlaczego 32-bitowy system operacyjny nie może uzyskać dostępu do pamięci RAM, jeśli istnieje: Licencjonowanie. Zdecydowali się nie zezwalać, aby pamięć RAM była większa niż 4 GB dla ich 32-bitowych systemów operacyjnych, chyba że zapłacisz za edycję centrum danych (dlatego sprzedają edycję centrum danych, jeśli potrzebujesz tak dużo pamięci RAM, prawdopodobnie możesz sobie pozwolić na więcej pieniądze w systemie operacyjnym).

Scott Chamberlain
źródło
Ach, słyszałem wcześniej o PAE, ale nigdy go nie badałem. Wydaje się, że jest w dużej mierze wykorzystywany w architekturze serwerów, więc nie wydaje się mieć zastosowania do 32-bitowej instalacji systemu Windows 7, ponieważ lista wskazuje, że W7x86 pozwala tylko na 4 GB
Matthew Layton
1
@ 0xC0000022L, żeby być uczciwym, dodałem część licencji jako edycję po jego komentarzu, ale ze względu na 4-minutowe okno edycji wygląda na to, że opublikowałem go przed opublikowaniem komentarza.
Scott Chamberlain
1
PAE wymaga przełącznika tabeli stron do działania, co jest kosztowne pod względem wydajności.
vonbrand
3
To jest mit. Koszty ogólne związane z PAE są niewielkie. A jeśli nie lubisz PAE, powinieneś nienawidzić x64, ponieważ struktura tabeli stron na x64 wygląda tak samo jak PAE, tylko z kolejnym poziomem tabeli dodanym na górze i więcej bitów dla PFN w PxE.
Jamie Hanrahan,
1
PAE nie został „usunięty w systemie Windows 7, ponieważ nie jest już potrzebny”, jest nadal obecny w systemie Windows 7 x86 - jest tam domyślnie, zamiast być włączonym.
Jamie Hanrahan,
13

Zamiast wyjaśniać to osobiście, pozwolę komuś, kto musi utrzymywać jądro ze wsparciem PAE, przemawiać w uroczy sposób, Linus Torvalds

Należy również pamiętać, że obsługa PAE w 32-bitowych wersjach systemu Windows wiąże się z dużą ilością gotówki. XP nawet nie będzie w stanie normalnie wykorzystać pełnego 4 GiB pamięci RAM, ponieważ MS zdecydowało się nie włączać na nim funkcji PAE. Jądro, które jest ściśle powiązane, Windows 2003 Server, obsługuje PAE. Jednak nawet tam Twoja „Standardowa edycja” będzie obsługiwać tylko do 4 GiB (ale obejmie dziurę w pamięci BIOS), podczas gdy droższe wersje pozwolą na do 64 GiB RAM. To samo dotyczy 32-bitowego systemu Vista .

Jednak nie we wszystkich przypadkach ograniczenie to jest narzucane przez system Windows. Gdyby tak było, uruchomienie jądra Linux z włączoną funkcją PAE nadal umożliwiałoby korzystanie z pełnych 4 GiB (lub więcej). Nie, niektórzy producenci sprzętu zdecydowali się nałożyć to ograniczenie na poziomie BIOS-u, chociaż procesor i mikroukład byłyby w stanie poradzić sobie z PAE.


Tylko uwaga: żaden z obecnych 64-bitowych procesorów opartych na architekturze x86 nie jest w stanie fizycznie adresować pełnego zakresu 64-bitowej przestrzeni adresowej (w celu uzyskania informacji zobacz to pytanie i odpowiedzi).

0xC0000022L
źródło
Hmm, dlaczego mam wrażenie, że Linus naprawdę nienawidzi HIGHMEM.SYS i PAE? : P
Karan
2
Rozumiem, że PAE byłby uciążliwy dla każdego kodu, który wymagałby więcej niż kilku koncertów zestawu roboczego, oraz dla kodu na poziomie systemu, który musi zarządzać wieloma zadaniami złożonymi z około 2 koncertów, ale chyba że jedna aplikacja potrzebuje więcej niż 2 koncerty Oczekiwałbym, że PAE będzie transparentny. Ponadto, sądzę, że PAE byłby lepszy niż globalne użycie 64-bitowych wskaźników w przypadkach, które wymagały 3 gigabajtów pamięci RAM ogólnego przeznaczenia oraz dużej pamięci podręcznej dysku lub napędu temp-storage.
supercat
Komentarze Linusa są dziwne. Nie ma związku między sposobem działania himem.sys a działaniem PAE. To bardzo zabawne, gdy ludzie argumentują za x64 i przeciwko adresowaniu PAE ... kiedy tryb długi x64 po prostu bierze schemat PAE i dodaje jeszcze jeden poziom tabeli stron!
Jamie Hanrahan,
@JamieHanrahan: ... co najmniej dwa na nowszych systemach (z powodu wirtualizacji), co otwiera kilka ekscytujących możliwości. Porównania jego (Linusa) nie są do końca słuszne, ale jeśli jest to obca koncepcja, metafory mogą pomóc :) ... Myślę, że właśnie dlatego wybrał to, aby się wypowiedzieć.
0xC0000022L,
2

8-bitowe procesory zwykle miały 16-bitową magistralę adresową. (Motorola miała zunifikowaną magistralę adresową, pamięć RAM i urządzenia peryferyjne we / wy współużytkowały tę samą przestrzeń adresową, Intel zdecydował się je podzielić. W przypadku Intela limity adresów we / wy 8088 i 8086 przenosiły ograniczenia z 8080 i 8085 procesorów.)

Intel 8088 i 8086 miał 20-bitową magistralę adresową pamięci (1 MB), podczas gdy Motorola 68000 miał 24-bitową magistralę adresową (16 MB). IIRC [80] 286 przeskoczył na 24-bitową magistralę adresową. Oba później rozszerzyły się do 32-bitowej magistrali adresowej odpowiednio z [80] 386 i 68020.) W przypadku układów Pentium magistrala adresowa rozszerzyła się do 64-bitów. (Myślę, że chipy PowerPC Motorola / IBM venture poszły również na 64-bitową magistralę adresową).

Pamięć dostępna poniżej i do maksimum, do której CPU mógł uzyskać bezpośredni dostęp, była ograniczona jedynie przez obsługiwane układy sprzętowe (chipset) i system operacyjny. Bill Gates słynął w przeszłości z tego, że nikt nie potrzebował więcej niż 640 KB pamięci RAM, dlatego DOS nigdy nie ewoluował, aby uzyskać bezpośredni dostęp do większej ilości pamięci RAM. Dzięki HiMem.sys i EMM386 system DOS został rozszerzony, aby uzyskać dostęp do większej „górnej” pamięci, a EMM386 jest używany do bezpośredniego dostępu do całej dostępnej pamięci RAM. HiMem.sys miał mniejszą elastyczność i mógł zasadniczo wykorzystywać dodatkową pamięć RAM do przechowywania.

Pamięć przekraczająca ten limit wymagała MMU (Memory Management Unit), aby podzielić pamięć na segmenty i zmapować ją na adresowalną przestrzeń pamięci CPU. W ten sposób CoCo 3, Commodore 128 i inne 8-bitowe komputery mogą uzyskać dostęp do ponad 64 KB pamięci RAM.

Bardziej sprzyjające jest teraz wykorzystanie pamięci wirtualnej w celu przekroczenia limitów pamięci fizycznej, aczkolwiek z limitami narzuconymi przez system operacyjny.

William
źródło
1

Ponieważ nie ma praktycznego powodu, aby to zrobić. Rozszerzenia adresu fizycznego zapewniają taką samą funkcjonalność, a ich użycie jest nadal bardzo ograniczone wśród użytkowników. W Windows 3.1 dni istniały ograniczenia, których dziś po prostu nie ma.

OCDtech
źródło
1
To naprawdę nie ma wystarczających informacji, aby wykonać kopię zapasową wyciągów. Windows 3.1 to 16-bitowy system operacyjny. Trzeba pamiętać, że w 1992 r. 2 MB pamięci wyniosło ponad 300 USD.
Ramhound
Masz komentarz z 22 lutego, a wyjaśnienia Scotta Chamberlina w zasadzie pokrywają to, do czego jechałem. Pomijają opisy, dlaczego rozszerzalna segmentacja stronicowania była używana w DOS / Win16, ale nie w późniejszym Windowsie. Nie uwzględniłem tego, ponieważ nie przyczyniłoby się to bezpośrednio do odpowiedzi na pytanie PO.
OCDtech
Moim zdaniem odpowiedzi powinny być samodzielne. Twój komentarz dodaje wystarczających informacji, aby rozwiązać moje problemy z twoją odpowiedzią.
Ramhound
1
@OCDtech: Model segmentowy 8086 pozwoliłby, aby język zorientowany obiektowo używał 2-bajtowych odniesień do obiektów w celu identyfikacji obiektów wyrównanych do granic 16-bajtowych, ale języki nie były dobrze przygotowane do skutecznego wykorzystania segmentów. Model 80286 nakłada na takie programy potwornie większe koszty, a sposób, w jaki został rozszerzony na 80386, uczyniłby schemat segment na obiekt całkowicie bezużytecznym.
supercat
0

Teoretyczne limity pamięci w maszynach 16, 32 i 64-bitowych są następujące ...

Podstawową wadą jest tutaj to, że „szerokość bitowa” procesora, która zwykle jest wielkością rejestrów ogólnego przeznaczenia maszyny, jest koniecznie taka sama jak szerokość adresów RAM.

W x86 z włączonym stronicowaniem, ale bez PAE, adresy, które program i kod systemu operacyjnego używają, Intel nazywa „adresami liniowymi” - zwykle nazywamy je „adresami wirtualnymi”. Mają 32 bity szerokości. Pozwala to na wirtualną przestrzeń adresową 4 GiB.

Ale to mniej więcej zbieg okoliczności, jedynie artefakt formatu wpisów w tablicy stron, że rozmiar adresu fizycznego (RAM) również wynosi 32 bity.

W przypadku PAE ten ostatni ma 36 bitów (początkowo ... szerszy w późniejszych implementacjach). Zatem fakt, że jest to na przykład „maszyna 32-bitowa”, nie oznacza, że ​​adresy pamięci fizycznej są ograniczone do 32 bitów.

Przemysł ma długą historię maszyn, których „szerokość bitów” nie była zgodna z maksymalnym rozmiarem adresu fizycznego. Na przykład architektura VAX definiuje maszynę 32-bitową, a adresy wirtualne (które są adresami używanymi przez kod po włączeniu translacji adresów) rzeczywiście mają szerokość 32 bitów ... ale adresy fizyczne VAX mają szerokość tylko 30 bitów - a połowa fizycznej przestrzeni adresowej jest przeznaczona na rejestry urządzeń I / O, więc maksymalna pamięć RAM wynosiła tylko 512 MiB.

Nawet bez sprzętu do translacji adresów niekoniecznie jest tak, że „szerokość bitów” maszyny określa maksymalny adres RAM. Przykład: serie CDC „górne 3000” były maszynami 36-bitowymi. Czy myślisz, że mogą rozwiązać 64 GiB pamięci RAM? Nie trudno! Te maszyny pojawiły się w połowie lat 60.! Heck, nie mogliśmy nawet mieć 64 GB miejsca na dysku w tych dniach. (Seria CDC 6000 była maszyną 60-bitową. Potrzebujesz kontynuować?)

Jamie Hanrahan
źródło
I nie zapomnij o systemach, które nie używają 8 bitów na komórkę RAM. (EG: 16/16 = maks. 128 KB, 32/32 = maks. 16G,
32/64