Od prawie ćwierć wieku użytkownicy komputerów klasy PC pod pojęciem „konfiguracja pamięci” rozumieją dostrajanie wydajności modułów pamięci: zmiany częstotliwości taktowania lub modyfikowanie parametrów czasowych. Wcześniej ten termin znaczył jednak coś zupełnie innego. Użytkownicy systemu MS-DOS musieli wiedzieć, czym różnią się obszary pamięci podstawowej, extended i expanded oraz co oznaczają skróty takie jak EMS, HMA czy UMB. Od umiejętnego wyznaczania podziałów między blokami pamięci o różnym charakterze i możliwościach wykorzystania zależała nie tylko szybkość działania programów, ale czasem i to, czy te programy można było w ogóle uruchomić.
W poniższym artykule przypominam te zagadnienia, pokazując Wam, jak wiele mozolnej, technicznej pracy wymagającej szczegółowej znajomości zasad działania komputera oszczędzają nam dzisiejsze systemy operacyjne pracujące w trybie nadzorowanym.
Na początku 640 kilobajtów miało wystarczyć każdemu. Tak przynajmniej głosi fama: sam Bill Gates twierdzi, że nigdy nie wypowiedział tych słów. Niezależnie od tego, układ Intel 8086, ze swoją megabajtową przestrzenią adresową, w momencie premiery nie nakładał na programistów zbyt dużych ograniczeń. Szesnaście segmentów po 64 KiB każdy – dokładnie szesnaście razy więcej, niż oferowały mikroprocesory 8-bitowe – pozwalało zmieścić całkiem pokaźny program wraz z wymaganymi danymi. Twórcom oprogramowania dla komputerów IBM PC pozostawiono co prawda tylko dziewięć takich bloków, ale i taką ilość pamięci trudno było zapełnić w sposób pożyteczny. Nic dziwnego, że pierwsze komputery PC miały 64 KiB pamięci, a nawet później typową pojemnością było tylko 256 czy 512 KiB: większa jej ilość zwiększała koszt, nie dając użytkownikowi wiele w zamian.
Komputery IBM PC jednak w niesamowitym, nieprzewidzianym przez nikogo tempie zdobywały popularność i rozprzestrzeniały się po świecie. Coraz szersze rzesze programistów tworzyły coraz bardziej skomplikowane programy. Kolejne wersje systemu operacyjnego MS-DOS zajmowały kolejne kilobajty kurczącej się przestrzeni adresowej procesora a proste, jednosegmentowe programy typu COM zostały zastąpione skomplikowanymi, wielosegmentowymi EXE. Pojawił się mechanizm nakładek mający, kosztem wydłużonego oczekiwania na wywołanie funkcji programu, pozostawić użytkownikowi jak największy obszar pamięci na jego dokumenty, bez konieczności rezygnacji z funkcjonalności programu, prostoty obsługi, elegancji interfejsu czy bogatej dokumentacji elektronicznej. Wreszcie, gdy pojawiły się programy rezydentne, zajmujące pamięć przez cały czas pracy komputera, a raczkujące środowisko Microsoft Windows pokazało użytkownikom, że możliwa jest jednoczesna praca z wieloma programami działającymi we własnych oknach, oczywiste stało się, że architektura PC potrzebuje więcej pamięci.
Procesory 8086 i 8088, w które były wyposażone komputery IBM PC i PC/XT, dysponowały 20-bitową magistralą adresową. Cała fizyczna przestrzeń adresowa była wykorzystana: 640 KiB na pamięć RAM, 320 KiB na dodatkowe obszary pamięci kart rozszerzających (w tym bufor ramki) i 64 KiB na pamięć ROM. Karta rozszerzenia pamięci mogłaby wykorzystać okno o rozmiarze 64 lub 128 KiB; trudno mówić o przydatności takiego rozszerzenia, a ograniczenie dostępnej przestrzeni adresowej, szczególnie w przypadku okna 128 KiB, byłoby znaczne.
Któż jednak powiedział, że cała dodatkowa pamięć musi być bez przerwy widoczna i dostępna dla procesora? Już w świecie 8-bitowych mikrokomputerów stosowano przecież mechanizmy dzielenia pamięci na rozłączne banki, z których tylko kilka było w danym momencie włączonych w przestrzeń adresową mikroprocesora. Wystarczała jedna operacja zapisu konfiguracji do portu, by pod adresami używanymi jeszcze przed chwilą przez jeden z banków pojawiał się inny. Korzystanie z tak bankowanej pamięci nie było wygodne ze względu na konieczny mały rozmiar banków (zazwyczaj 16 KiB), teraz jednak bank mógłby być znacznie większy: do wykorzystania był przecież cały segment 64 KiB w obszarze własnej pamięci kart rozszerzających!
Tak narodził się standard EMS. Idea była prosta: na dodatkowej karcie rozszerzającej umieszczano oprócz pamięci również rejestr konfiguracyjny i prosty dekoder adresowy. Program przystosowany do pracy z taką kartą mógł, zapisując odpowiednie numery banków w rejestrach konfiguracyjnych, spowodować pojawienie się wskazanych banków w odpowiednim obszarze przestrzeni adresowej (w tak zwanym oknie EMS). Rozmiar banku wynosił 16 KiB, co umożliwiało jednoczesne korzystanie z czterech dowolnych fragmentów pamięci EMS lub łączenie kilku przyległych banków w większy, ciągły blok.
Ponieważ taki mechanizm szybko doprowadziłby do uzależnienia programów od konkretnych modeli kart, firmy Lotus, Intel i Microsoft wspólnie opracowały i opublikowały definicję standardu oraz opracowały programy obsługi dla systemu MS-DOS, pośredniczące między aplikacją a kartą rozszerzającą. Niezależni producenci kart EMS nie musieli tworzyć produktów zgodnych sprzętowo: wystarczyło, aby udostępnili obsługujący ich karty program obsługi EMS, by oprogramowanie mogło wykorzystać rozszerzenie pamięci. Standard nazwano LIM EMS.
Pamięć EMS szybko została wykorzystana przez wszystkie poważne programy i środowiska. Niezależnym aplikacjom (takim jak Lotus 1-2-3) umożliwiała zmieszczenie w pamięci wszystkich wykorzystywanych nakładek, dzięki czemu użytkownik nie musiał czekać na załadowanie z dyskietki potrzebnego fragmentu kodu za każdym wywołaniem danej funkcji. Graficzne środowiska operacyjne, takie jak Microsoft Windows 1.0, wykorzystywały pamięć EMS do przechowywania nie mieszczących się w pamięci podstawowej segmentów, znacząco zmniejszając częstotliwość wymiany danych między pamięcią a dyskiem twardym. I choć pamięć EMS była powolna (wolniejsza zazwyczaj, niż pamięć główna) a korzystanie z niej było utrudnione (choć niewiele bardziej, niż ze skomplikowanego, segmentowego podziału pamięci głównej), stanowiła dowód, że kolejne modele komputerów muszą zakładać możliwość rozszerzania pamięci: 640 kilobajtów przestało tak naprawdę wystarczać praktycznie wszystkim.
Projektanci mikroprocesora Intel 80286, 16-bitowego kontynuatora linii zapoczątkowanej przez 8086, nauczyli się na pamięć listy niedoskonałości swojego poprzedniego „dziecka” i, tworząc nowy układ, postanowili je zlikwidować. Wystarczyło rozszerzyć magistralę adresową o cztery bity, by fizyczna przestrzeń adresowa rozszerzyła się z jednego do szesnastu megabajtów. Biorąc pod uwagę, że karty rozszerzeń EMS rzadko zawierały więcej niż dwa megabajty pamięci, założono czterokrotny nadmiar — wydawałoby się, wystarczający.
Postanowiono też rozprawić się z największym problemem mikrokomputera wyposażonego w pojemną pamięć: brakiem separacji jednocześnie działających programów. Mikroprocesor 80286 obsługiwał pamięć wirtualną i pozwalał programistom systemowym na idealne rozdzielenie systemu operacyjnego od aplikacji i samych aplikacji od siebie nawzajem: żadna z nich nie mogła korzystać z bloków pamięci należących do innego programu.
Niestety, dążąc do pełnej zgodności z układem 8086 i zakładając krótki żywot prymitywnego systemu MS-DOS, rozszerzona (ang. extended) pamięć dostępna była wyłącznie w nadzorowanym (chronionym, ang. protected) trybie pracy mikroprocesora, niezgodnym z 8086. Tryb zgodności, nazwany rzeczywistym (ang. real), nadal obarczony był megabajtowym limitem fizycznej przestrzeni adresowej. W rezultacie programy MS-DOS nie mogły w ogóle korzystać z megabajtów pamięci możliwych do zainstalowania na płycie głównej IBM PC/AT i znów konieczne było ratowanie się kartami rozszerzającymi EMS.
Co gorsza, wykorzystanie dodatkowej pamięci nie było proste również w trybie nadzorowanym. BIOS komputera PC/AT został rozszerzony jedynie o możliwość pobierania informacji o ilości dodatkowej pamięci, bez jakiegokolwiek sposobu na zaalokowanie części z niej lub zwolnienie używanego bloku. Konstruktorzy założyli, że pamięcią będzie zarządzał przyszły system operacyjny pracujący w trybie nadzorowanym (na przykład OS/2) i korzystanie z programu BIOS będzie nie tylko zbędne, ale i niemożliwe.
Pamięć Extended, jak zaczęto ją nazywać, nie miała zatem żadnego praktycznego zastosowania. Producenci sprzętu musieli dopiero zastanowić się, jaki z niej zrobić użytek.
Co stanie się, gdy do 20-bitowej liczby binarnej zawierającej same jedynki doda się jeszcze jeden? Na skutek przepełnienia liczba „zawinie się” z powrotem do zera. Jeżeli tę samą sztuczkę zrobimy jednak z 21-bitową liczbą zawierającą jedynki wszędzie poza najbardziej znaczącą pozycją, uzyskamy zupełnie inny wynik: 20 mniej znaczących bitów wyzeruje się, a jedna jedynka pojawi się na pozycji o wadze 220.
Takie „przeoczenie” pojawiło się właśnie w układzie 80286. W sytuacji, w której procesor 8086 wyznaczał adresy trafiające w początek pamięci fizycznej, 80286 mógł wygenerować odwołanie do pierwszego megabajta pamięci rozszerzonej nawet w trybie rzeczywistym pracy procesora. Ponieważ niektóre programy z różnych powodów wykorzystywały sztuczkę z „zawinięciem do zera”, projektanci komputera PC/AT nie mogli zignorować problemu i umieścili na płycie głównej sterowaną programowo bramkę blokującą na żądanie linię adresową A20: blokada była uaktywniana w czasie uruchamiania komputera, wyłączać miał ją zaś dopiero system operacyjny pracujący w trybie nadzorowanym, przystosowany do obsługi całej pojemności pamięci i nie pozwalający na takie sztuczki z zawijaniem adresacji.
Okazało się jednak, że coś, co dotychczas rozpatrywano w kategorii dokuczliwej niekompatybilności, jest rewelacyjną funkcją: bez przechodzenia w tryb nadzorowany uzyskiwało się dostęp do niecałego 64-kilobajtowego segmentu pamięci rozszerzonej! Może się dzisiaj wydawać, że 64 KiB to niedużo, jednak w zatłoczonej mapie pamięci systemu MS-DOS znaczyło to bardzo wiele. Do dodatkowych 65 520 bajtów pamięci, dostępnych po załadowaniu rejestrów segmentowego i indeksowego wartościami FFFF:0010h, można było przenieść programy obsługi urządzeń, bufory systemu operacyjnego czy niewielkie programy rezydentne, dotychczas współdzielące pamięć z programami użytkowymi.
Nowo uzyskany obszar, nazwany HMA, miał sporo ograniczeń. Dostępny był w sposób sekwencyjny, a więc raz przyznany programowi blok pamięci HMA nie mógł być już zwolniony aż do wyłączenia komputera. Programy z niego korzystające nie mogły też czynić żadnych założeń co do rejestrów adresowych. Jeśli jednak udało się HMA prawidłowo skonfigurować, zyskiwało się kilkanaście lub kilkadziesiąt kilobajtów pamięci podstawowej bez utraty funkcjonalności.
Pamięć EMS kojarzona była dotychczas wyłącznie z odrębnymi kartami rozszerzeń. Ponieważ jednak standard EMS zadomowił się wśród aplikacji, a rozszerzona pamięć komputerów AT była często bezużyteczna, niektórzy producenci płyt głównych postanowili połączyć jedno z drugim i udostępnić pamięć rozszerzoną jako EMS.
Nie było to specjalnie trudne. Wystarczyło umieścić między procesorem a pamięcią układ bankujący, zamieniający odwołania do obszaru okna EMS (umieszczonego w pierwszym megabajcie przestrzeni adresowej) na operacje odczytu i zapisu do 16-kilobajtowego bloku umieszczonego w pamięci rozszerzonej. Jeszcze tylko odpowiedni program obsługi EMS dla systemu MS-DOS i gotowe: pamięć rozszerzona przestaje być dostępna w normalny sposób, stając się pamięcią EMS.
Na dobrą sprawę implementacja pamięci EMS mogłaby być zrealizowana nawet w sposób całkowicie programowy. Wystarczyło, by program obsługi EMS rezerwował obszar 64 KiB w pamięci podstawowej jako okno EMS, a operacje zmiany aktywnego banku realizował przełączając procesor w tryb nadzorowany, kopiując 16 KiB danych między oknem a pamięcią rozszerzoną, a na koniec wracając do trybu rzeczywistego. Żałosna wydajność takiego rozwiązania, spowodowana z jednej strony koniecznością ciągłego kopiowania danych, a z drugiej brakiem sensownej i szybkiej metody wracania z trybu nadzorowanego do rzeczywistego, czyniła je jednak mało praktycznym. Taka realizacja EMS czasem też więcej by szkodziła niż pomagała: podczas gdy sprzętowe realizacje standardu EMS wykorzystywały pusty (nie obsadzony pamięcią fizyczną) obszar przestrzeni adresowej procesora, programowe EMS zabierałoby programom 64 KiB pamięci podstawowej, by stworzyć własne okno służące do kopiowania banków z pamięci rozszerzonej.
Pamięć EMS spełniała swoje zadanie całkiem nieźle. Mimo to, zależność od dobrej woli producenta płyty głównej (który musiał zaimplementować obwód obsługujący przełączanie banków EMS) i mała ilość dostępnej jednocześnie pamięci dodatkowej (do 64 KiB) spowodowały, że zaczęto szukać lepszego rozwiązania.
Znaleziono je w formie specyfikacji XMS, opracowanej przez firmę Microsoft i zaimplementowanej w systemie MS-DOS za pomocą programu rezydentnego HIMEM.SYS (obsługiwał on zresztą również bloki pamięci HMA). Specyfikacja była bardzo prosta: program mógł zaalokować blok pamięci, zwolnić go, skopiować z lub do pamięci podstawowej albo zablokować w pamięci rozszerzonej, uniemożliwiając jego przemieszczanie w zależności od potrzeb. Chociaż taka prostota umożliwiała wykorzystanie pamięci rozszerzonej XMS jedynie do przechowywania bloków danych oraz nakładek programowych (podczas gdy z pamięci EMS można było bezpośrednio uruchamiać kod tych nakładek), a zamiast przełączenia banków trzeba było zdać się na powolne kopiowanie (chyba, że programista zdecydował się na chwilowe przejście w tryb nadzorowany i bezpośrednie przetworzenie danych), to jednak pamięć XMS miała jedną niezaprzeczalną zaletę: była dostępna na prawie każdym komputerze z procesorem 80286.
Jako że mikrokomputery z procesorami 8086 i 8088 odchodziły powoli do przeszłości (a wraz z nimi karty rozszerzeń EMS), standard XMS zaczął być szeroko wykorzystywany. W gruncie rzeczy skopiowanie kilkudziesięciu kilobajtów danych lub kodu z jednego miejsca pamięci w drugie było i tak szybsze, niż pobranie ich z dyskietki lub dysku twardego. Rozwiązanie nieco sprawniejsze (w postaci EMS) musiało ulec nowocześniejszemu.
Procesor Intel 80386 (i nowsze, zgodne z nim modele) nie wprowadzał wiele nowego w zakresie obsługi pamięci rozszerzonej. Najważniejszą zmianą było rozszerzenie fizycznej przestrzeni adresowej z 16 MiB do 4 GiB. Wreszcie zlikwidowano też podział pamięci na 64-kilobajtowe segmenty, wprowadzając pełną dowolność rozmiaru segmentu aż do przypadku skrajnego — jednego segmentu obejmującego całą pamięć. Obowiązkową dotychczas przy wykorzystaniu pamięci wirtualnej segmentację uzupełniono stronicowaniem pamięci.
Zachowano też szczególną „właściwość” procesora 80286, polegającą na możliwości uzyskania dostępu do niecałego pierwszego 64-kilobajtowego segmentu pamięci rozszerzonej z poziomu trybu rzeczywistego. Dzięki temu blok HMA dostępny był na identycznych zasadach, znacząco zwiększając swobodę pracy systemu MS-DOS.
Mechanizmy stronicowania i maszyny wirtualnej VM86 umożliwiły zdecydowaną zmianę sposobu obsługi standardu EMS. Najnowsze wersje programu obsługi EMM386.EXE, odpowiedzialnego za programową emulację pamięci EMS w systemie MS-DOS, w przypadku wykrycia procesora 80386 przełączały go w tryb nadzorowany, uruchamiały maszynę wirtualną VM86 (umożliwiając w ten sposób normalną pracę systemu MS-DOS i jego aplikacji) po czym włączały wybrane banki EMS w obszar okna korzystając z mechanizmu stronicowania. Przełączenie banku było natychmiastowe, nie wymagało kopiowania danych, a co najważniejsze — działało na każdym komputerze bez względu na to, czy producent płyty głównej przewidział obsługę standardu EMS. Emulacja była tak dobra, że wszystkie sprzętowe implementacje EMS, występujące jeszcze czasem w epoce komputerów PC/AT, zaniknęły całkowicie.
Jednym z ważniejszych usprawnień obsługi EMS w okresie schyłkowym było dynamiczne tworzenie okna EMS. Dotychczas wystarczyło, by jeden program w czasie sesji wymagał dostępności pamięci EMS, by konieczne było rezerwowanie bloku 64 KiB cennej pamięci podstawowej. Nowe wersje programu EMM386.EXE tworzyły okno EMS dopiero w momencie, gdy któryś z programów rezerwował pierwszy blok pamięci EMS i niszczyły je (zwalniając obszar pamięci), gdy obsługa EMS przestawała być potrzebna. W sytuacji, gdy każdy kilobajt był na wagę złota, była to niezwykle istotna optymalizacja.
Co może ważniejsze, program EMM386.EXE potrafi też tworzyć okno EMS nie w obszarze pamięci przynależnym systemowi operacyjnemu, lecz w niewykorzystanych fragmentach ostatnich 384 KiB pierwszego megabajta przestrzeni adresowej. Wyszukuje on 64 KiB ciągłego obszaru nieużywanego przez żadną kartę rozszerzającą i za pomocą mechanizmu stronicowania umieszcza w nim banki pamięci EMS. W ten sposób można uzyskać obsługę EMS prawie „za darmo”, w zasadzie na identycznych warunkach, jak w przypadku rozwiązania sprzętowego.
Program EMM386.EXE potrafi zmieścić w niewykorzystanych wycinkach przestrzeni adresowej nie tylko okno EMS. Dzięki mechanizmowi stronicowania można w nieużywane miejsca podstawić strony pamięci rozszerzonej, uzyskując dodatkowe bloki pamięci dostępne w trybie rzeczywistym.
Na pierwszy rzut oka rozwiązanie to przypomina bardzo blok HMA. O ile jednak HMA ma stały rozmiar równy niespełna 64 KiB, bloki UMB powstałe w ten sposób mogą w sumie mieć pojemność przekraczającą nawet 128 KiB. Niestety, zazwyczaj obszar ten jest mocno pofragmentowany i składa się z kilku odrębnych obszarów o rozmiarze od kilkunastu do kilkudziesięciu kilobajtów. Jego wykorzystanie wymaga ze strony systemu operacyjnego sprawnego wyszukiwania najmniejszego bloku spełniającego wymagania ładowanego do UMB programu, zaś ze strony użytkownika — sporo sprytu oraz eksperymentalnego dobrania kolejności wprowadzania programów do bloków UMB.
Bloki UMB przywracały życie systemowi MS-DOS, z wersji na wersję zwiększającemu swój rozmiar i z roku na rok obrastającego programami obsługi kupowanych przez użytkowników peryferiów. Choć aplikacje coraz częściej sięgały po tryb nadzorowany i bezpośrednio korzystały z całej dostępnej pamięci komputera, starsze programy dostawały nową szansę sprawnej pracy. Pełne wykorzystanie bloków HMA i UMB pozwalało wygospodarować w pamięci podstawowej aż 620 KiB wolnej przestrzeni na programy: więcej, niż za czasów pierwszej wersji MS-DOS.
Przy tylu różnych rodzajach pamięci i zbiorze programów, z których każdy obsługiwał inny standard rozszerzenia pamięci, użytkownik systemu MS-DOS musiał lawirować pomiędzy programami obsługi oraz obszarami pamięci, dobierając kompromisową konfigurację pamięci albo zmieniając ją co chwilę w zależności od potrzeb. Dopiero ostatnie wcielenia systemu MS-DOS ograniczyły nieco ten problem, zanim gwałtowna migracja do systemów 32-bitowych nie usunęła go raz na zawsze w cień.
Użytkownik komputera zgodnego z IBM PC/XT nie miał specjalnego wyboru, jeżeli chodzi o wykorzystanie pamięci rozszerzonej. Jedynym możliwym sposobem rozszerzenia pamięci była karta pamięci EMS i zgodne ze standardem EMS oprogramowanie. Nie dawało to oczywiście możliwości zwolnienia większej ilości pamięci podstawowej, trzeba było zatem rezygnować ze zbędnych programów rezydentnych, korzystać ze starszych, lecz oszczędniejszych wersji systemu MS-DOS i obchodzić się smakiem widząc nowe, lecz wymagające mnóstwa pamięci wersje aplikacji.
Komputer klasy PC/AT dawał znacznie większe możliwości kształtowania środowiska pracy. Wystarczyło, by komputer był wyposażony w 1 MiB pamięci operacyjnej, by pojawiało się 384 KiB pamięci rozszerzonej. Niecałe 64 KiB z niej od razu tworzyło obszar HMA, wykorzystywany przez nowsze wersje MS-DOS do buforowania danych oraz ładowania programów obsługi urządzeń.
Szczęśliwi posiadacze niektórych płyt głównych AT, wyposażonych w sprzętową obsługę standardu EMS, po załadowaniu jednego programu obsługi mogli wykorzystywać całą rozszerzoną pamięć jako EMS. Ponieważ biblioteka oprogramowania zgodnego z EMS była względnie szeroka, zwiększenie wydajności i wygody pracy ograniczało się w takim przypadku do uzupełnienia podstawek na płycie głównej komputera lub wstawienia modułów pamięci w gniazda SIPP. Pozostali użytkownicy byli skazani na powolne, programowe rozwiązania EMS, lub na szukanie programów działających w trybie nadzorowanym lub przynajmniej przechowujących dane w pamięci XMS. Nieliczni tylko czekali na pełne rozwiązanie problemu, które miało nadejść wraz z premierą systemu OS/2; było to jak czekanie na Godota.
W pewnym momencie ceny procesorów 80386SX spadły na tyle, że kupowanie komputerów AT przestało być opłacalne. Choć 80386SX nie oferował takiej wydajności, jak „pełnokrwista” wersja tego mikroprocesora, był mimo wszystko szybszy od 80286, a do tego oferował całą gamę dodatkowych możliwości, wykorzystywanych przez system MS-DOS.
Użytkownik komputera z procesorem zgodnym z 80386 mógł w bardzo szerokim zakresie kształtować przestrzeń adresową dostępną dla MS-DOS. Oprócz znanego z komputerów AT obszaru HMA, można było skonfigurować bloki UMB i przenieść do nich programy obsługi urządzeń, a nawet niektóre programy rezydentne. W starsze programy można było tchnąć nowe życie, konfigurując obsługę pamięci EMS z dynamicznie tworzonym oknem. Niektóre programy zarządzające pamięcią stosowały jeszcze inne sztuczki: na przykład, blokując możliwość wykorzystania trybu graficznego i umieszczając w obszarze bufora ramki strony pamięci rozszerzonej można było uzyskać ponad 700 KiB pamięci podstawowej — coś, co nawet autorom systemu MS-DOS się pewnie nigdy nie śniło.
Dopiero jednak ostatnie wersje systemu MS-DOS (i programu obsługi EMM386.EXE) były tak elastyczne. Wcześniejsze wymagały statycznego określenia, czy używana będzie pamięć EMS (i na stałe alokowały okno EMS) oraz ile tej pamięci będzie potrzebnej (co zmniejszało z kolei ilość wolnej pamięci XMS). Użytkownik musiał albo znaleźć kompromisową konfigurację, umożliwiającą sprawną pracę wszystkich programów, lub – jeżeli miał czas uruchamiać co chwilę komputer od nowa – stworzyć zestaw profili konfiguracyjnych, wybieranych z menu podczas ładowania systemu MS-DOS.
Nowoczesne, 32-bitowe systemy operacyjne zlikwidowały jakiekolwiek podziały pamięci na typy i obszary. Cała pamięć traktowana jest jednakowo od momentu uruchomienia systemu, a programy są od siebie nawzajem izolowane, nie mogąc bezpośrednio odwoływać się do pamięci fizycznej czy do pamięci innego procesu.
Narzekając na powolne stronicowanie lub dużą zajętość pamięci warto pamiętać o tym, że kiedyś było znacznie gorzej. Programy ledwie mieściły się w pamięci, wymagały jej rozszerzenia zgodnego z konkretną specyfikacją, a próba jednoczesnego uruchomienia kilku programów często kończyła się niepowodzeniem w momencie, gdy jeden z nich nadpisywał pamięć należącą do drugiego.
Dużo się jednak zmieniło od czasów IBM PC.