Szukaj…


Wprowadzenie

Historia

Pierwsze komputery

Wczesne komputery miały blok pamięci, w którym programista umieszczał kod i dane oraz procesor wykonywany w tym środowisku. Biorąc pod uwagę, że komputery były wtedy bardzo drogie, niefortunnie było, że wykonałoby ono jedno zadanie, zatrzymało się i czekało na załadowanie następnego zadania, a następnie przetworzyło je.

Wielu użytkowników, wiele procesów

Komputery szybko stały się bardziej wyrafinowane i obsługiwały jednocześnie wielu użytkowników i / lub programy - ale wtedy zaczęły się pojawiać problemy z prostym pomysłem „jednego bloku pamięci”. Jeśli na komputerze działały dwa programy jednocześnie lub ten sam program dla wielu użytkowników - co oczywiście wymagałoby osobnych danych dla każdego użytkownika - zarządzanie pamięcią stało się krytyczne.

Przykład

Na przykład: jeśli program został napisany do pracy pod adresem pamięci 1000, ale został już tam załadowany inny program, nowego programu nie można załadować. Jednym ze sposobów rozwiązania tego problemu byłoby uruchomienie programów z „względnym adresowaniem” - nie miało znaczenia, gdzie program został załadowany, po prostu zrobił wszystko względem adresu pamięci, w którym został załadowany. Wymagało to jednak wsparcia sprzętowego.

Sofistyka

Ponieważ sprzęt komputerowy stał się bardziej wyrafinowany, był w stanie obsługiwać większe bloki pamięci, pozwalając na więcej jednoczesnych programów, i trudniej było pisać programy, które nie kolidowały z tym, co zostało już załadowane. Jedno zbłąkane odniesienie do pamięci może sprowadzić nie tylko bieżący program, ale każdy inny program w pamięci - w tym sam system operacyjny!

Rozwiązania

Potrzebny był mechanizm, który pozwalał blokom pamięci na dynamiczne adresy. W ten sposób program mógłby zostać napisany do pracy z blokami pamięci pod adresami, które rozpoznał - i nie byłby w stanie uzyskać dostępu do innych bloków dla innych programów (chyba że pozwoliła na to pewna współpraca).

Segmentacja

Jednym z mechanizmów, który to zaimplementował, była segmentacja. Umożliwiło to zdefiniowanie bloków pamięci o różnych rozmiarach, a program musiałby zdefiniować, do którego segmentu chce mieć dostęp przez cały czas.

Problemy

Ta technika była potężna - ale jej elastyczność była problemem. Ponieważ segmenty zasadniczo dzieliły dostępną pamięć na porcje o różnych rozmiarach, zarządzanie pamięcią dla tych segmentów stanowiło problem: alokacja, dezalokacja, wzrost, zmniejszanie, fragmentacja - wszystkie wymagały skomplikowanych procedur, a czasem masowego kopiowania w celu wdrożenia.

Stronicowanie

Inna technika podzieliła całą pamięć na bloki o jednakowych rozmiarach, zwane „stronami”, co bardzo uprościło procedury alokacji i dezalokacji oraz wyeliminowało powiększanie, zmniejszanie i fragmentację (z wyjątkiem fragmentacji wewnętrznej, która jest jedynie problemem ubytek).

Adresowanie wirtualne

Dzieląc pamięć na te bloki, można je w razie potrzeby przypisać do różnych programów z dowolnym adresem, pod którym program ich potrzebuje. To „mapowanie” między fizycznym adresem pamięci a pożądanym adresem programu jest bardzo potężne i stanowi dziś podstawę zarządzania pamięcią każdego głównego procesora (Intel, ARM, MIPS, Power i in.).

Obsługa sprzętu i systemu operacyjnego

Sprzęt przeprowadzał ponowne mapowanie automatycznie i ciągle, ale wymagał pamięci, aby zdefiniować tabele tego, co należy zrobić. Oczywiście porządkowanie związane z tym mapowaniem musiało być przez coś kontrolowane. System operacyjny musiałby w razie potrzeby zwolnić pamięć i zarządzać tabelami danych wymaganych przez sprzęt, aby obsłużyć to, czego wymagały programy.

Funkcje stronicowania

Kiedy sprzęt mógł wykonać to mapowanie, na co pozwoliło? Głównym sterownikiem było przetwarzanie wieloprocesorowe - możliwość uruchamiania wielu programów, każdy z „własną” pamięcią, chronionych przed sobą. Ale dwie inne opcje obejmowały „rzadkie dane” i „pamięć wirtualną”.

Wieloprocesowe

Każdy program otrzymał własną, wirtualną „Przestrzeń adresową” - zakres adresów, na które mogliby zamapować pamięć fizyczną pod dowolnymi adresami. Dopóki jest wystarczająca ilość pamięci fizycznej do obejścia (chociaż patrz „Pamięć wirtualna” poniżej), wiele programów może być obsługiwanych jednocześnie.

Co więcej, te programy nie mogły uzyskać dostępu do pamięci, która nie została zamapowana w wirtualnej przestrzeni adresowej - ochrona między programami była automatyczna. Jeśli programy muszą się komunikować, mogą poprosić system operacyjny o zorganizowanie wspólnego bloku pamięci - bloku pamięci fizycznej, który został zmapowany jednocześnie na dwie różne przestrzenie adresowe programów.

Rzadkie dane

Zezwolenie na ogromną wirtualną przestrzeń adresową (typowo 4 GB, co odpowiada 32-bitowym rejestrom, które te procesory zwykle miały) nie samo w sobie marnuje pamięci, jeśli duże obszary tej przestrzeni adresowej nie zostaną zmapowane. Umożliwia to tworzenie ogromnych struktur danych, w których jednocześnie tylko niektóre części są mapowane. Wyobraź sobie trójwymiarową tablicę 1000 bajtów w każdym kierunku: normalnie zajęłoby to miliard bajtów! Ale program może zarezerwować blok wirtualnej przestrzeni adresowej, aby „przechowywać” te dane, ale mapować tylko małe sekcje w miarę ich zapełniania. Umożliwia to wydajne programowanie, a jednocześnie nie marnuje pamięci na dane, które nie są jeszcze potrzebne.

Pamięć wirtualna

Powyżej użyłem terminu „Adresowanie wirtualne”, aby opisać adresowanie wirtualne do fizycznego wykonywane przez sprzęt. Jest to często nazywane „pamięcią wirtualną” - ale termin ten bardziej poprawnie odpowiada technice korzystania z wirtualnego adresowania w celu zapewnienia iluzji większej ilości pamięci niż jest w rzeczywistości dostępna.

Działa to tak:

  • Gdy programy są ładowane i żądają więcej pamięci, system operacyjny zapewnia pamięć z tego, co jest dostępne. Oprócz śledzenia mapowanej pamięci system operacyjny śledzi również faktyczne użycie pamięci - sprzęt obsługuje oznaczanie używanych stron.
  • Kiedy systemowi wyczerpuje się pamięć fizyczna, sprawdza całą pamięć, która została już wydana dla tego, która strona była używana najmniej lub nie była używana najdłużej. Zapisuje zawartość tej strony na dysku twardym, zapamiętuje, gdzie to było, oznacza ją jako „Nieobecna” na sprzęcie dla pierwotnego właściciela, a następnie zeruje stronę i przekazuje ją nowemu właścicielowi.
  • Jeśli pierwotny właściciel spróbuje ponownie uzyskać dostęp do tej strony, sprzęt powiadomi system operacyjny. System operacyjny przydziela następnie nową stronę (być może konieczne będzie ponowne wykonanie poprzedniego kroku!), Ładuje zawartość starej strony, a następnie przekazuje nową stronę oryginalnemu programowi.

    Należy zauważyć, że ponieważ każdą stronę można zmapować na dowolny adres, a każda strona ma taki sam rozmiar, to jedna strona jest tak dobra, jak każda inna - pod warunkiem, że zawartość pozostanie taka sama!

  • Jeśli program uzyskuje dostęp do niezapisanej lokalizacji pamięci, sprzęt powiadamia system operacyjny jak poprzednio. Tym razem system operacyjny zauważa, że nie została zapisana Strona, więc rozpoznaje go jako błąd w programie i przerywa go!

    Tak właśnie dzieje się, gdy Twoja aplikacja w tajemniczy sposób znika na tobie - być może z MessageBox z systemu operacyjnego. To także (często) powoduje niesławny niebieski ekran lub smutny Mac - błędny program był w rzeczywistości sterownikiem systemu operacyjnego, który uzyskiwał dostęp do pamięci, a nie powinien!

Decyzje stronicowania

Architekci sprzętu musieli podjąć poważne decyzje dotyczące stronicowania, ponieważ projekt miałby bezpośredni wpływ na projekt procesora! Bardzo elastyczny system wymagałby dużego obciążenia, wymagającego dużej ilości pamięci tylko do zarządzania samą infrastrukturą stronicowania.

Jak duża powinna być strona?

W przypadku sprzętu najłatwiejszą implementacją stronicowania byłoby pobranie adresu i podzielenie go na dwie części. Górna część byłaby wskaźnikiem, do której strony można uzyskać dostęp, podczas gdy dolna część byłaby indeksem na stronie dla wymaganego bajtu:

+-----------------+------------+
| Page index      | Byte index |
+-----------------+------------+

Szybko stało się jednak oczywiste, że małe strony będą wymagały obszernych indeksów dla każdego programu: nawet pamięć, która nie została zmapowana, wymagałaby wpisu wskazującego na to w tabeli.

Zamiast tego stosuje się indeks wielopoziomowy. Adres jest podzielony na wiele części (trzy są wskazane w poniższym przykładzie), a górna część (zwykle nazywana „katalogiem”) indeksuje do następnej części i tak dalej, aż do dekodowania indeksu końcowego bajtu na końcowej stronie:

+-----------+------------+------------+
| Dir index | Page index | Byte index |
+-----------+------------+------------+

Oznacza to, że indeks katalogu może wskazywać „nie zmapowany” dla dużej części przestrzeni adresowej, bez konieczności licznego indeksowania stron.

Jak zoptymalizować wykorzystanie tabel stron?

Każdy dostęp do adresu, jaki uzyska procesor, będzie musiał zostać zmapowany - dlatego proces wirtualny na fizyczny musi być tak wydajny, jak to możliwe. Gdyby wdrożony został wyżej opisany system trójwarstwowy, oznaczałoby to, że każdy dostęp do pamięci byłby w rzeczywistości trzema dostępami: jeden do katalogu; jeden do tabeli stron; i wreszcie same pożądane dane. A jeśli procesor musiałby również wykonywać czynności porządkowe, takie jak wskazywanie, że do tej strony już uzyskano dostęp lub zapisano, to wymagałoby to jeszcze większego dostępu do aktualizacji pól.

Pamięć może być szybka, ale spowodowałoby to potrójne spowolnienie wszystkich dostępów do pamięci podczas przywoływania! Na szczęście większość programów ma „lokalizację zasięgu” - to znaczy, jeśli uzyskają dostęp do jednej lokalizacji w pamięci, przyszłe dostępy będą prawdopodobnie w pobliżu. A ponieważ strony nie są zbyt małe, konwersja mapowania musiałaby zostać wykonana tylko po uzyskaniu dostępu do nowej strony: nie dla absolutnie każdego dostępu.

Ale jeszcze lepiej byłoby zaimplementować pamięć podręczną ostatnio otwieranych stron, nie tylko najnowszą. Problem polegałby na tym, aby uzyskać dostęp do Pages, a co nie - sprzęt musiałby skanować pamięć podręczną przy każdym dostępie, aby znaleźć buforowaną wartość. Pamięć podręczna jest więc implementowana jako pamięć podręczna adresowana do treści: zamiast dostępu do adresu, można do niej uzyskać dostęp za pomocą zawartości - jeśli żądane dane są obecne, są oferowane, w przeciwnym razie pusta lokalizacja jest oznaczana do wypełnienia. Pamięć podręczna zarządza tym wszystkim.

Pamięć podręczna adresowana treścią jest często nazywana buforowym tłumaczeniem (TLB) i musi być zarządzana przez system operacyjny jako część podsystemu Adresowanie wirtualne. Gdy katalogi lub tabele stron są modyfikowane przez system operacyjny, musi powiadomić TLB o aktualizacji swoich wpisów - lub po prostu unieważnić je.

80386 Przywoływanie

Projekt na wysokim poziomie

80386 to 32-bitowy procesor z 32-bitową adresowalną pamięcią. Projektanci podsystemu Paging zauważyli, że projekt strony 4K odwzorowany na te 32 bity w dość zgrabny sposób - 10 bitów, 10 bitów i 12 bitów:

+-----------+------------+------------+
| Dir index | Page index | Byte index |
+-----------+------------+------------+
 3         2 2          1 1          0  Bit
 1         2 1          2 1          0  number

Oznaczało to, że indeks Bajtów miał szerokość 12 bitów, co oznaczałoby stronę 4K. Indeksy katalogu i strony zawierały 10 bitów, z których każda mapowałaby w tabeli 1024 wpisów - a jeśli te wpisy tabeli miałyby 4 bajty, byłoby to 4K na tabelę: również stronę!

Więc to zrobili:

  • Każdy program miałby własny katalog, stronę z 1024 wpisami stron, z których każdy określał miejsce, w którym znajdowała się tablica strony następnego poziomu - jeśli taka istniała.
  • Gdyby tak było, ta Tabela stron miałaby 1024 Pozycje strony, z których każda określała miejsce, w którym znajdowała się Strona ostatniego poziomu - jeśli taka była.
  • Gdyby tak było, wówczas ta Strona mogłaby mieć bezpośrednio odczytany Bajt.

Wpis strony

Zarówno katalog najwyższego poziomu, jak i tabela stron następnego poziomu składają się z 1024 pozycji stron. Najważniejszą częścią tych wpisów jest adres tego, co indeksuje: Tabela stron lub rzeczywista strona. Zauważ, że ten adres nie potrzebuje pełnych 32 bitów - ponieważ wszystko jest stroną, tylko 20 najlepszych bitów jest znaczących. Zatem pozostałe 12 bitów we Wpisie strony można wykorzystać do innych rzeczy: czy obecny jest nawet następny poziom; sprzątanie, czy strona została odwiedzona, czy zapisana; i nawet czy zapisy powinny być dozwolone!

+--------------+----+------+-----+---+---+
| Page Address | OS | Used | Sup | W | P |
+--------------+----+------+-----+---+---+
Page Address = Top 20 bits of Page Table or Page address
OS           = Available for OS use
Used         = Whether this page has been accessed or written to
Sup          = Whether this page is Supervisory - only accessible by the OS
W            = Whether this page is allowed to be Written
P            = Whether this page is even Present

Zauważ, że jeśli bit P ma wartość 0, wówczas reszta wpisu może zawierać wszystko, co system operacyjny chce tam umieścić - na przykład, gdzie zawartość strony powinna znajdować się na dysku twardym!

Rejestr strony katalog podstawowy ( PDBR )

Jeśli każdy program ma swój własny katalog, skąd sprzęt wie, od czego zacząć mapowanie? Ponieważ procesor działa tylko jeden program na raz, ma jeden rejestr kontrolny do przechowywania adresu katalogu bieżącego programu. Jest to rejestr podstawowy katalogu stron ( CR3 ). Gdy system operacyjny przełącza się między różnymi programami, aktualizuje PDBR o odpowiedni katalog stron dla programu.

Błędy strony

Za każdym razem, gdy CPU uzyskuje dostęp do pamięci, musi odwzorować wskazany adres wirtualny na odpowiedni adres fizyczny. Jest to trzyetapowy proces:

  1. PDBR 10 najlepszych bitów adresu na stronie wskazanej przez PDBR aby uzyskać adres odpowiedniej tabeli stron;
  2. Zindeksuj kolejne 10 bitów adresu na stronie wskazanej przez katalog, aby uzyskać adres odpowiedniej strony;
  3. Zindeksuj ostatnie 12 bitów adresu, aby pobrać dane z tej strony.

Ponieważ oba powyższe kroki 1. i 2. wykorzystują Wpisy strony, każdy Wpis może wskazywać na problem:

  • Następny poziom może być oznaczony jako „Nieobecny”;
  • Następny poziom może być oznaczony jako „Tylko do odczytu” - a operacja to Zapis;
  • Następny poziom może być oznaczony jako „Supervisor” - i jest to program uzyskujący dostęp do pamięci, a nie system operacyjny.

Gdy sprzęt zauważy taki problem, zamiast dokończyć dostęp, pojawia się błąd: Przerwanie # 14, błąd strony. Wypełnia również niektóre konkretne rejestry kontrolne informacjami o przyczynie wystąpienia usterki: wskazany adres; czy był to dostęp dla Inspektora; i czy była to próba zapisu.

Oczekuje się, że system operacyjny wyłapie ten błąd, zdekoduje rejestry kontroli i zdecyduje, co zrobić. Jeśli jest to nieprawidłowy dostęp, może zakończyć błędny program. Jeśli jest to dostęp do pamięci wirtualnej, system operacyjny powinien przydzielić nową stronę (która może wymagać opróżnienia strony, która jest już w użyciu!), Wypełnić ją wymaganą zawartością (wszystkie zera lub poprzednia zawartość załadowana z powrotem z dysku ), zamapuj nową stronę do odpowiedniej tabeli stron, zaznacz ją jako obecną, a następnie wznów błędną instrukcję. Tym razem dostęp będzie przebiegał pomyślnie, a program będzie kontynuował bez wiedzy, że wydarzyło się coś specjalnego (chyba że spojrzy na zegar!)

80486 Stronicowanie

Podsystem przywoławczy 80486 był bardzo podobny do podsystemu 80386. Był kompatybilny z poprzednimi wersjami, a jedynymi nowymi funkcjami było umożliwienie kontroli pamięci podręcznej na zasadzie strona po stronie - projektanci systemu operacyjnego mogli oznaczać określone strony jako nieprzechowywane w pamięci podręcznej lub stosować różne zapisywanie lub zapisywanie techniki buforowania.

Pod wszystkimi innymi względami zastosowanie ma przykład „stronicowania 80386”.

Stronicowanie Pentium

Kiedy Pentium było rozwijane, rozmiary pamięci i uruchamiane w nich programy były coraz większe. System operacyjny musiał wykonywać coraz więcej pracy, aby utrzymać podsystem stronicowania w samej liczbie indeksów stron, które wymagały aktualizacji, gdy były używane duże programy lub zestawy danych.

Tak więc projektanci Pentium dodali prostą sztuczkę: dodali dodatkowy wpis we wpisach katalogu stron, który wskazywał, czy następny poziom był tabelą stron (jak poprzednio) - czy też poszedł bezpośrednio do strony o wielkości 4 MB! Mając koncepcję 4 MB stron, system operacyjny nie musiałby tworzyć tabeli stron i wypełniać ją 1024 wpisami, które zasadniczo indeksowały adresy o 4K wyższe niż poprzednie.

Układ adresu

+-----------+----------------------+
| Dir Index | 4MB Byte Index       |
+-----------+----------------------+
 3         2 2                    0   Bit
 1         2 1                    0   number

Układ pozycji katalogu

+-----------+----+---+------+-----+---+---+
| Page Addr | OS | S | Used | Sup | W | P |
+-----------+----+---+------+-----+---+---+
Page Addr = Top 20 bits of Page Table or Page address
OS        = Available for OS use
S         = Size of Next Level: 0 = Page Table, 1 = 4 MB Page
Used      = Whether this page has been accessed or written to
Sup       = Whether this page is Supervisory - onlly accessible by the OS
W         = Whether this page is allowed to be Written
P         = Whether this page is even Present

Oczywiście miało to pewne konsekwencje:

  • Strona 4 MB musiała zaczynać się na granicy adresu 4 MB, podobnie jak strony 4K musiały zaczynać się na granicy adresu 4K.
  • Wszystkie 4 MB musiały należeć do jednego programu - lub być dzielone przez wiele programów.

To było idealne do użycia w przypadku urządzeń peryferyjnych o dużej pamięci, takich jak karty graficzne, które miały duże okna przestrzeni adresowej, które musiały zostać zmapowane dla systemu operacyjnego.

Rozszerzenie adresu fizycznego (PAE)

Wprowadzenie

Gdy ceny pamięci spadły, komputery z procesorami Intel mogły mieć coraz więcej pamięci RAM w przystępnej cenie, co złagodziło problemy wielu użytkowników z uruchomieniem wielu coraz większych aplikacji tworzonych jednocześnie. Chociaż pamięć wirtualna pozwalała na wirtualną „tworzenie” pamięci - zamiana istniejącej „starej” zawartości strony na dysk twardy, aby umożliwić przechowywanie „nowych” danych, spowolniło to działanie programów, ponieważ „przeładowanie” strony ciągle wymieniało dane włączanie i wyłączanie dysku twardego.

Więcej pamięci RAM

Potrzebna była możliwość dostępu do większej ilości fizycznej pamięci RAM - ale była to już 32-bitowa magistrala adresowa, więc każdy wzrost wymagałby większych rejestrów adresów. A może by to zrobiło? Opracowując Pentium Pro (a nawet Pentium M), jako stop-gap do 64-bitowych procesorów, można dodać więcej bitów adresu fizycznego (pozwalając na więcej pamięci fizycznej) bez zmiany liczby bitów rejestru. Można to osiągnąć, ponieważ i tak adresy wirtualne były mapowane na adresy fizyczne - wszystko, co trzeba było zmienić, to system mapowania.

Projekt

Istniejący system może uzyskać dostęp do maksymalnie 32 bitów adresów fizycznych. Zwiększenie tego wymagało całkowitej zmiany struktury Wpisu strony, z 32 do 64 bitów. Zdecydowano zachować minimalną ziarnistość na stronach 4K, więc 64-bitowy wpis miałby 52 bity adresu i 12 bitów kontroli (podobnie jak poprzedni wpis miał 20 bitów adresu i 12 bitów kontroli).

Posiadanie 64-bitowego wpisu, ale o rozmiarze strony (wciąż) 4K, oznaczało, że będzie tylko 512 wpisów na tabelę stron lub katalog, zamiast poprzednich 1024. Oznaczało to, że 32-bitowy adres wirtualny będzie podzielony inaczej niż wcześniej:

+-----+-----------+------------+------------+
| DPI | Dir Index | Page Index | Byte Index |
+-----+-----------+------------+------------+
 3   3 2         2 2          1 1          0   Bit
 1   0 9         1 0          2 1          0   number

 DPI        = 2-bit index into Directory Pointer Table
 Dir Index  = 9-bit index into Directory
 Page Index = 9-bit index into Page Table
 Byte Index = 12-bit index into Page (as before)

Wycięcie jednego bitu zarówno z indeksu katalogu, jak i indeksu strony dało dwa bity dla trzeciego poziomu mapowania: nazwali to Tablicą wskaźników katalogu stron (PDPT), tabelą dokładnie czterech 64-bitowych wpisów, która adresowała cztery katalogi zamiast poprzedniego jeden. PDBR ( CR3 ) wskazuje teraz na PDPT - który, ponieważ CR3 miał tylko 32 bity, musiał być przechowywany w pierwszych 4 GB pamięci RAM dla ułatwienia dostępu. Należy zauważyć, że ponieważ do kontroli wykorzystywane są małe bity CR3 , PDPT musi zaczynać się od 32-bajtowej granicy.

Rozszerzenie rozmiaru strony (PSE)

A ponieważ poprzednie strony 4 MB były tak dobrym pomysłem, chcieli ponownie móc obsługiwać duże strony. Tym razem jednak usunięcie ostatniej warstwy systemu poziomów nie spowodowało wygenerowania stron 10 + 12 bitów 4 MB, a zamiast tego stron 9 + 12 bitów 2 MB.

PSE-32 (i PSE-40)

Ponieważ tryb rozszerzenia adresu fizycznego (PAE), który został wprowadzony w Pentium Pro (i Pentum M), był taką zmianą w podsystemie zarządzania pamięcią systemu operacyjnego, kiedy Intel zaprojektował Pentium II, postanowił ulepszyć „normalny” tryb strony, aby obsługuje nowe bity adresu fizycznego procesora w ramach wcześniej zdefiniowanych wpisów 32-bitowych.

Zdali sobie sprawę, że gdy użyto strony o wielkości 4 MB, pozycja katalogu wyglądała następująco:

+-----------+------------+---------+
| Dir Index |  Unused    | Control |
+-----------+------------+---------+

Obszary Dir Index i Control wejścia były takie same, ale blok nieużywanych bitów między nimi - który zostałby wykorzystany przez Indeks Strony, gdyby istniał - został zmarnowany. Zdecydowali więc użyć tego obszaru do zdefiniowania górnych bitów adresu fizycznego powyżej 31 !

+-----------+------+-----+---------+
| Dir Index |Unused|Upper| Control |
+-----------+------+-----+---------+

Pozwoliło to na dostęp do pamięci RAM powyżej 4 GB dla systemów operacyjnych, które nie przyjęły trybu PAE - przy odrobinie dodatkowej logiki mogą one zapewnić dużą ilość dodatkowej pamięci RAM dla systemu, chociaż nie więcej niż normalne 4 GB dla każdego programu. Początkowo dodano tylko 4 bity, pozwalając na 36-bitowe adresowanie fizyczne, więc ten tryb został nazwany Page Size Extension 36 (PSE-36). W rzeczywistości nie zmieniło to rozmiaru strony, tylko adresowanie.

Ograniczeniem tego było jednak to, że tylko 4 MB Strony powyżej 4 GB były definiowalne - Strony 4K nie były dozwolone. Przyjęcie tego trybu nie było szerokie - podobno było wolniejsze niż używanie PAE, a Linux nigdy go nie używał.

Niemniej jednak w późniejszych procesorach, które miały jeszcze więcej bitów adresu fizycznego, zarówno AMD, jak i Intel rozszerzyły obszar PSE do 8 bitów, które niektórzy nazwali „PSE-40”



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow