Dam ci prostą odpowiedź, ale dla dalszych informacji polecam poniższy link do dokumentów architektury AMD, bardzo łatwa lektura.PS: Nie omówiłem tutaj Xeon ani PAE.
Architektura IA-32 (x86) ma 32-bitową magistralę adresową dla pamięci RAM.
32-bitowa magistrala jest dodatkowo podzielona na 2 x 16-bitowe segmenty, z których każdy może uzyskać dostęp do 2 GB pamięci RAM w sumie 4 GB.
Nazywa się to przełączaniem banku pamięci.
W celu umożliwienia ochrony Intel wraz z MS postanowił użyć jednego segmentu dla trybu jądra, a drugi dla trybu użytkownika - i dlatego Windows historycznie miał przestrzeń adresową trybu 2GB. Jest to ograniczenie sprzętowe x86, a nie ograniczenie Windows.
Segment rejestruje oddzielone przestrzenie jądra i adresy przestrzeni użytkownika. W ten sposób wdrożono ochronę pamięci.
Co więcej, IA-32 generał miał również 32-bitowe rejestry wewnętrzne, więc nie mógł się na nie zapisać. To jest tryb rzeczywisty (bez tłumaczenia adresu).
Paging wymaga 36 bitów Myślę, że (nie cytuj mnie), to tam przyszedł IA32e. Dodatkowe bity na IA-32e pozwoliły na stronicowanie z dysku twardego, jest to jedyny sposób, w jaki można go uruchomić na systemie Windows x64, ponieważ x64 wymaga NX i znajduje się na bit 63.
Proszę przeczytać dokumenty architektoniczne AMD, osobiście uważam, że są bardziej przydatne niż wersje Intela.
http://developer.amd.com/wordpress/media/2012/10/24593_APM_v21.pdf
PS z pamięcią płaskiej AMD64 została wprowadzona, rezygnacji z segmentów.
Jednak 32-bitowe procesy nadal wymagają rejestrów segmentów. Na AMD64, gdy proces 32-bitowy trafia na szczyt stosu, wskaźnik jest rzucany do adresu bazowego w nowym rejestrze segmentów. W ten sposób 32-bitowe aplikacje mogą skutecznie jeść tyle pamięci RAM, ile chcą, bez ograniczeń. Oraz w granicach ofc ... :)
Mam nadzieję, że to pomaga.
Jakiego disasemblera używasz? Być może domyślnie zawsze wyprowadza i pokazuje rejestr segmentów w oparciu o kod operacyjny, nawet jeśli pamięć nie jest podzielona na segmenty. – Michael
@Michael: Używam ollydbg – Krab
Pamięć jest nadal podzielona na segmenty, mimo że najbardziej popularne systemy operacyjne używają tylko jednego segmentu i ustawiają wszystkie rejestry segmentów na tę samą wartość. –