Rodzaje pamięci w MS-DOS Radosław Sokół Na początku 640

Transkrypt

Rodzaje pamięci w MS-DOS Radosław Sokół Na początku 640
Rodzaje pamięci w MS-DOS
Radosław Sokół
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 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 po 256 czy 512 KiB pamięci — większa jej ilość
zwiększała tylko koszt maszyny, nie dając uŜytkownikowi wiele w zamian.
Komputery
IBM PC
jednak
w niesamowitym,
nie przewidzianym
przez nikogo tempie zdobywały popularność i rozprzestrzeniały się po świecie.
Coraz większe rzesze programistów tworzyły coraz bardziej skomplikowane
programy. Kolejne wersje systemu operacyjnego MS-DOS zajmowały coraz to
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.
8086, 8088
Pamięć EMS
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.
Podział fizycznej przestrzeni adresowej procesorów 8086 i 8088
w komputerach IBM PC i zgodnych (minimalna konfiguracja sprzętowa)
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 —
Expanded
Memory Specification.
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.
Przykład włączenia czterech 16-kilobajtowych banków pamięci znajdującej się
na osobnej karcie rozszerzającej w przestrzeń adresową mikroprocesora
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 sterowniki
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 rozszerzające
sterownik EMS,
by zgodne
z EMS
oprogramowanie
mogło
wykorzystać
rozszerzenie pamięci. Cały 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.
-----------------------------------------------

Podobne dokumenty