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?
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).
źródło
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.
źródło
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.
źródło
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ć?)
źródło