Jak DOS wykorzystuje górny obszar pamięci

Widzieliśmy już, że górny obszar pamięci zawiera obszary nie używane. Jednakże, pamięć ta jest wolna w niesąsiadujących z sobą kawałkach. Na początku mieści się obszar zarezerwowany dla karty graficznej monitora, potem jest przerwa, obszar pamięci stałej ROM tejże karty, znowu przerwa, potem pamięć ROM dla dysku stałego itd.

Widzieliśmy już, że górny obszar pamięci zawiera obszary nie używane. Jednakże, pamięć ta jest wolna w niesąsiadujących z sobą kawałkach. Na początku mieści się obszar zarezerwowany dla karty graficznej monitora, potem jest przerwa, obszar pamięci stałej ROM tejże karty, znowu przerwa, potem pamięć ROM dla dysku stałego itd.

Wolne obszary pamięci zwane są w terminologii DOS-u blokami górnej pamięci (UMB --- ang. Upper Memory Blocks). Aby można było z nich korzystać, trzeba je przygotować za pomocą poleceń systemu i programu EMM386.EXE (pod warunkiem, że mamy procesor 386SX lub lepszy). Powrócimy do tego problemu za chwilę.

Po przygotowaniu bloków górnej pamięci można do nich załadować sterowniki urządzeń, zwalniając miejsce w pamięci głównej.

Warunki pracy

Dalej przyjmiemy, że plik CONFIG.SYS ma następującą postać:

device=c:\dos\setver.exe device=c:\himem.sys dos=high,umb device=c:\dos\emm386.exe 512 ram devicehigh=c:\dos\display.sys con=(ega,437,1) break=on country=33,,c:\dos\country.sys files=30 buffers=3 shell=c:\dos\command.com c:\dos\ /E:512 /P /F

Proszę zwrócić uwagę na wiersze: drugi, trzeci i czwarty tego pliku. Sterownik HIMEM.SYS służy do zarządzania pamięcią rozszerzoną, zarówno w DOS jak i w Windows. Sterownik ten jest niezbędny do poprawnego działania programu Windows 3.0 w trybie rzeczywistym i standard (dla Windows 3.1 nie istnieje tryb rzeczywisty) na komputerze z procesorem 286 lub wyższym. Ponadto w Windows sterownik ten zamienia pamięć rozszerzoną na pamięć stronicowaną w oknie DOS-owym Windows (nie daje natomiast tej pamięci w DOS-ie). Polecenie DOS=HIGH,UMB określa, że system operacyjny będzie ładowany w blok HMA pamięci, a sterowniki urządzeń mogą być załadowane w górne bloki pamięci (UMB). Sterownik EMM386 służy do obsługi pamięci stronicowanej w DOS-ie (opcja ram; w tym przypadku zadano, że będzie jej 512 kB) i przygotowania bloków UMB pamięci.

Przykładowy plik AUTOEXEC.BAT może wyglądać następująco:

c:\windows\smartdrv.exe 1024 256 c smouse/2/1 loadhigh c:\dos\nlsfunc.exe loadhigh c:\dos\doskey /bufsize=2048/insert instal klc klc

Zauważmy, że sterowniki rezydentne DOS-u są ładowane za pomocą poleceń DEVICEHIGH i LOADHIGH, co stało się możliwe na skutek tego, że w CONFIG.SYS jest załadowany sterownik HIMEM.SYS.

Jak obejrzeć pamięć RAM

W celu optymalizacji użycia pamięci należy mieć możliwość pokazania jej wypełnienia. Można do tego użyć dwóch programów: EMM386 i MEM.

Po zainstalowaniu sterownika EMM386.EXE można go wywoływać z wiersza poleceń, podając ewentualne opcje. Po takim wywołaniu program podaje informacje o swoim działaniu.

Program podaje ile mamy wolnej pamięci EMS, w którym segmencie usytuowana jest tak zwana ramka pamięci stronicowanej (domyślnie program korzysta z segmentu D000) i czy EMM386 jest aktywne.

Progam MEM/C podaje dokładniejszy komunikat o wypełnieniu pamięci, programach rezydentnych, sterownikach i ich usytuowaniu w pamięci.

Poniżej podajemy wydruk z ekranu komputera z procesorem 386SX, z pamięcią RAM o pojemności sumarycznej 5 MB. Jak widać, mimo żądania załadowania sterowników w górny obszar pamięci pojawiły się one w pamięci konwencjonalnej, poniżej 640 kB, ze względu na brak miejsca w pamięci górnej. Do dyspozycji programów DOS pozostało nam 585 kB, co jest i tak niezłym wynikiem jeśli uprzytomnimy sobie, że w systemach niższych wersji w tych samych warunkach mielibyśmy około 530 kB. W górnym obszarze pamięci pozostało nam jedynie ok. 4 kB, co nie wystarcza na załadowanie żadnego sterownika.

Modyfikujemy rozmieszczenie sterowników

Aby zwiększyć pojemność dostępnej pamięci w DOS-ie wystarcza prosta modyfikacja pliku CONFIG.SYS. Wiersz ładowania sterownika EMM386.EXE powinien mieć postać:

device=c:\dos\emm386.exe 512 frame=E000 ram

Celem tej operacji jest przeniesienie ramki pamięci EMS do segmentu E000, dzięki czemu górny obszar pamięci będzie mniej rozdrobniony i zmieści się do niego więcej sterowników urządzeń. I tak jest istotnie: proszę popatrzeć na następny wydruk z ekranu polecenia MEM/C. Do górnych bloków pamięci załadował się teraz w całości sterownik bufora dyskowego SMARTDRV (poprzednio mieścił się częściowo w pamięci górnej, częściowo na dole); załadowały się tam także rozszerzenie systemu NLSFUNC i DOSKEY. Mimo to w górnym obszarze pamięci mamy nadal wolne ponad 48 kB, a pamięć główna dla DOS-u to ponad 604 kB!

Jeszcze lepsze wyniki osiągniemy jeśli nie potrzebujemy pamięci EMS dla żadnych programów DOS-owych, ale nadal chcemy ładować sterownik urządzeń w górny obszar pamięci. Wystarczy wtedy opcję "ram" w wywołaniu sterownika EMM386.EXE zamienić na "noems" i usunąć z wywołania liczbę 512. Dostępny obszar górnej pamięci wzrośnie wtedy do ponad 80 kB. Proszę sprawdzić samemu.

Zachęcamy Czytelników do sprawdzania i zmieniania konfiguracji komputera. Tu ostrzeżenie: przed przystąpieniem do zmieniania plików CONFIG.SYS i AUTOEXEC.BAT proszę przygotować dyskietkę systemową (poleceniem FORMAT A:/S) i zapisać na nią aktualną wersję tych plików, co - w razie awarii - pozwoli powrócić do dawnej konfiguracji komputera.

W następnych odcinkach: inne sterowniki pamięci.

W celu komercyjnej reprodukcji treści Computerworld należy zakupić licencję. Skontaktuj się z naszym partnerem, YGS Group, pod adresem [email protected]

TOP 200