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. -----------------------------------------------