Organizacja pamięci komputera
Przestrzeń adresowa komputera typu IBM PC podzielona jest na następujące cztery obszary, spełniające różne funkcje :
- pamięć konwencjonalną ( 0 - 640 KB ), w której uruchamiane są programy pracujące pod
kontrolą systemu MS-DOS ;
- pamięć górną ( 640 KB - 1 MB ), w której znajduje się ROM BIOS komputera ( ostatnie 64
KB ), pamięć video kart graficznych ( 128 KB - w obszarze od A000h do BFFFh ) wraz z ich
BIOS-em ( 32 KB - od C000h do C7FFFh ). W obszarze tym znajduje się także ramka pamięci
EMS ( page frame ) zajmująca 64 KB. Jeżeli komputer nie posiada innych specjalizowanych
kart to reszta pamięci górnej pozostaje wolna. Dzięki mechanizmowi stronicowania
zastosowanemu w procesorze 386 oraz wyższych tę dodatkową przestrzeń można wykorzystać
głównie do uzupełnienia systemu o programy rezydentne, lub sterowniki, bez konieczności
alokacji cennej pamięci konwencjonalnej. Służą do tego komendy : LOADHIGH (LH),
INSTALLHIGH,oraz DEVICEHIGH. Ich użycie wymaga podania w pliku CONFIG.SYS
polecenia DOS=UMB, które informuje DOS o udostępnieniu mu bloków pamięci górnej
( Upper Memory Blocks ). MS-DOS włącza wówczas dostepną pamięć górną do listy
zarządzanych obszarów pamięci. Aby pamięć ta była dostępna konieczne jest zastosowanie
specjalizownaego programu takiego jak EMM386, QEMM386, lub UMB_DRVR.
- obszar HMA ( High Memory Area ), znajdujący się w przestrzeni adresowej od adresu
100000h do 10FFEFh, zajmujący pierwsze 64 KB pamięci rozszerzonej. Może on być
adresowany przez procesory 286, 386 w trybie rzeczywistym, stanowi więc dodatkowe 64 KB
dla programów pracujących pod kontrolą systemu MS-DOS. HMA należy traktować jako jedną
niepodzielną jednostkę. System operacyjny, rezydując w pamięci konwencjonalnej, nie ma
możliwości sublokacji HMA, dlatego powinien znajdować się tam program wykorzystujący go
w sposób maksymalny. Optymalnym wykorzystaniem HMA jest umieszczenie w nim części
systemu operacyjnego, co uzyskuje się przez podanie polecenia DOS=HIGH w pliku
CONFIG.SYS. Jest to możliwe począwszy od wersji 5.0 systemu MS-DOS.
- pamięć rozszerzoną, adresowaną od 100000h do ostatniej komórki pamięci. Może ona być
obsługiwana w standardzie XMS (Extended) lub EMS (Expanded), w zależności od
wyboru użytkownika.Do obsługi pamięci rozszerzonej w standardzie XMS służy program
HIMEM dołączany standardowo do systemu MS-DOS, lub program QEMM386. Standard
EMS obsługiwany jest za pomocą programu EMM386 standardowo dołączanego do systemu
MS-DOS, lub za pomocą programu QEMM386.
Program HIMEM
Program HIMEM zarządza dostępem do pamięci rozszerzonej. Jego funkcje pozwalają na przechowanie w niej struktur danych o rozmiarach ograniczonych jedynie jej pojemnością. Mechanizmy działania zapewniają dostęp do pamięci rozszerzonej kilku programom jednocześnie, obszar zaalokowany przez jeden program może zostać przekazany do użytku drugiemu, kiedy ten pierwszy zakończy działanie.
Program HIMEM można zainstalować na komputerze spełniającym następujące wymagania :
- procesor 286 lub wyżej ;
- fizyczna obecność pamięci rozszerzonej ;
- system operacyjny MS-DOS 3.0 lub wyżej.
W celu zainstalowania programu HIMEM należy w pliku CONFIG.SYS podać następujące polecenie :
DEVICE = [dysk:][ściezka]HIMEM.SYS[/HMAMIN=N][/NUMHANDLES=n]
[/INT15=xxxx][/MACHINE:xxx][/A20CONTROL:ON|OFF]
[/EISA][SHADOWRAM:ON|OFF][/VERBOSE]
Program HIMEM powinien zawsze być instalowany przed tymi wszystkimi programami, które wykorzystują jego funkcje. Najlepszym rozwiązaniem jest wpisanie tego polecenia w pierwszej linii pliku CONFIG.SYS.
Opcje wywołania mają znaczenie w przypadkach szczególnych. Najczęściej do prawidłowego działania wystarczy wywołanie z parametrami domyślnymi. Poszczególne opcje mają nastepujące znaczenie.
/HMAMIN=n
Określa rozmiar HMA, który program rezydentny będzie musiał wykorzystać dla własnych potrzeb. Program potrafiący przepisać swój kod do HMA, wymagający dla uruchomienia przestrzeni mniejszej niż podana, nie uzyska dostępu do HMA.
/NUMHANDLES=n
Parametr n określa maksymalną liczbe tzw. uchwytów ( handles ), a tym samym mozliwych do alokacji bloków pamięci rozszerzonej. Przykładowo, jeżeli po instalacji HIMEM-a uruchomione zostaną programy takie jak SMARTDRV, czy RAMDRIVE, które na własne potrzeby alokują po jednym bloku, dostępna liczba bloków będzie mniejsza od podanej o 2. Minimalną wartością n jest 1, maksymalną - 128, domyślną - 32.
/INT15=xxxx
Pozostawia żądaną przestrzeń ( określoną w KB ) pamięci rozszerzonej, nie zarządzanej przez HIMEM. Pamięć ta przeznaczona jest dla programów alokujących ją za pomocą schematu zgodnego z INT 15. Minimalną wartością jest 64, maksymalną - 65535, domyslną - 0.
/MACHINE:xxxx
Określa system sterowania stanem linii A20. W większości przypadków jest on identyfikowany automatycznie. Opcja ta powinna zostać podana jedynie, gdy stwierdzony zostanie problem w sterowaniu stanem linii A20. Symbol xxxx definiuje kod lub nume systemu.
/A20CONTROL: ON|OFF
Określa warunek, przy którym HIMEM przejmie kontrolę nad stanem linii A20. Parametr OFF powoduje przejęcie kontroli jedynie wówczas, gdy linia A20 została zablokowana przed instalacją HIMEM-a. Parametrem domyślnym jest ON.
/EISA
Informuje HIMEM, że komputer jest zgodny ze standarden EISA ( Extended Industry Standard Architecture ) i jest wyposażony w pamięć o pojemności większej od 16 MB. Jeżeli opcja ta jest podana HIMEM rezerwuje na własne potrzeby całą dostepną pamięć. W innych komputerach cała dostępma pamięć rezerwowana jest automatycznie.
/SHADOWRAM: ON|OFF
Określa, czy HIMEM ma dołączyć do zarządzanej przez siebie pamięci obszar przeznaczony na SHADOWRAM. Jest to mozliwe tylko w niektórych komputerach. Jeżeli komputer jest wyposażony w pamięć mniejszą od 2 MB domyslnym parametrem jest OFF, co oznacza, że HIMEM po zainstalowaniu będzie się starał wykorzystać obszar SHADOWRAM do zwiększenia pamięci XMS dostępnej dla programów.
/VERBOSE
Nakazuje wyświetlanie wszystkich komunikatów podczas instalacji programu HIMEM. Ten sam efekt można uzyskać wciskając podczas instalacji klawisz Alt.
Przykłady
Wywołanie ustalające minimalny obszar HMA do wykorzystania dla TSR-ów, na 30 KB :
DEVICE=C:\DOS\HIMEM.SYS /HMAMIN=30 /VERBOSE
Wywołanie ustalające dozwoloną liczbę bloków pamięci rozszerzonej ( EMB ) na 128 :
DEVICE=C:\DOS\HIMEM.SYS /NUMHANDLES=128 /VERBOSE
Wywołanie ustalające rozmiar HMA na 40 KB oraz maks. liczbę bloków EMB na 64 :
DEVICE=C:\DOS\HIMEM.SYS /HMAMIN=40 /NUMHANDLES=64 /VERBOSE
Program EMM386
Program EMM386, dołączany standardowo do systemu MS-DOS, służy do emulowania pamięci EMS (Expanded Memory) na komputerach wyposażonych w procesor 386 lub wyżej. Do poprawnego funkcjonowania wymaga on obecności w pamięci komputera programu zarządzającego pamięcią rozszerzoną ( np. HIMEM ). Programy te pozwalają na wykorzystanie pamięci EMS wraz z pamięcią XMS, przy czym ta pierwsza jest emulowana. Implementują one także funkcje platformy VCPI ( Virtual Control Program Interface ).
Program EMM386 można zainstalować na komputerze spełniającym nastepujące wymagania :
- 32-bitowy procesor 386 lub wyższy ;
- fizyczna obecność pamięci rozszerzonej ;
- obecność sterownika pamięci rozszerzonej ( HIMEM ) ;
- system operacyjny MS-DOS 5.0 lub wyżej.
Instalację EMM386 wykonuje się z reguły za pomocą programu MEMMAKER. Polecenie umieszcane w pliku CONFIG.SYS ma postać :
DEVICE=[dysk:][ścieżka]EMM386.EXE [ON|OFF|AUTO] [memory] [MIN=size]
[W=ON|OFF] [Mx|FRAME=address|/Pmmmm] [Pn=address]
[X=mmmm-nnnn] [I=mmmm-nnnn] [B=address] [L=minXMS]
[D=nnn] [A=altregs] [H=handles] [RAM=mmmm-nnnn] [NOEMS]
[NOVCPI] [NOEMS] [VERBOSE] [WIN=mmmm-nnnn] [NOHI]
[ROM=mmmm-nnnn] [NOMOVEXBDA] [ALTBOOT]
ON|OFF|AUTO
Uaktywnia, zawiesza, lub wprowadza program w tryb pracy automatycznej, który uruchamia mechanizmy dostępu do pamięci EMS lub obsługi bloków UMB tylko wtedy, gdy program żąda dostępu do nich. Domyślną wartością jest ON.
memory
Określa maks. rozmiar pamięci XMS ( w KB ) wykorzystywanej przez EMM386 do emulacji pamięci EMS oraz implementowania platformy VCPI. Jeżeli nie jest podana opcja NOEMS wartością domyślną jest rozmiar dostępnej pamięci XMS.
MIN=size
Określa minimalny rozmiar pamięci EMS lub pamięci wykorzystywanej przez VCPI, którą EMM386 będzie emulowac w pamięci XMS, jeżeli dostepny jej rozmiar jest wystarczający. Maks. rozmiar ograniczony jest wartością stałej memory, jeżeli jest ona większa od parametru size. Gdy podana jest opcja NOEMS wartością domyślną jest 256, inaczej 0.
W=ON|OFF
Uaktywnia lub blokuje obsługę koprocesora Weitek.
Mx
Definiuje adres segmentowy ramki pamięci EMS. Wartość x mieści się w granicach od 1 do14 i odpowiada określonym adresom segmentowym.
FRAME=address
Definiuje bezpośrednio adres segmentowy ramki pamięci EMS. Wartość parametru address może zmieniać się w zakresie od 8000h do 9000h oraz od C000h do E000h ze skokiem 400h.
/Pmmmm
Definiuje adres segmentowy ramki pamięci EMS. Wartość parametru mmmm może zmieniać się w zakresie od 8000h do 9000h oraz do C000h do E000h ze skokiem co 400h.
Pn=address
Definuje adres segmentowy zadanej strony o numerze n .(0 - 255) Parametr address określa adres segmentowy (8000h - 9000h lub C000-E000h co 400h).
X=mmmm-nnnn
Blokuje wykorzystywanie przez EMM386 zadanego zakresu adresów segmentowych na obszar ramki lub bloków UMB. Wartości parametrów mogą zmieniać się w zakresie od A000h do FFFFh. Opcja ta ma wyższy priorytet niż opcja I jeżeli podane adresy nakładają się na siebie.
I=mmmm-nnnn
Definiuje zakres adresu segmentowego obszaru pamięci górnej, w którym zostanie utworzona ramka pamięci EMSlub bloki UMB. Wartości parametrów j.w.
B=address
Określa najniższy adres segmentowy obszaru przeznaczonego do wymiany zawartości 16-KB stron. Wartość domyślna wynosi 4000h.
L=minXMS
Określa minimalną pojemność pamięci XMS, która nie zostanie wykorzystana do implementacji pamięci EMS. Wartością domyślną jest 0.
D=nnn
Określa rozmiar pamięci ( w KB ) którą należy zarezerwować do buforowania operacji DMA . Wartością domyślną jest 16, a może ona się zmieniać od 16 do 156.
A=altregs
Określa liczbę szybkich alternatywnych grup rejestrów ( wykorzystywanych do wielozadaniowości ), którą nalezy zarezewować. Wartością domyślną jest 7, a może ona się zmieniac od 0 do 254.
H=handles
Określa liczbę uchwytów EMS, które programy będą mogły wykorzystać. Wartością domyślną jest 64, a może ona się zmieniac od 2 do 255.
RAM=mmmm-nnnn
Definiuje zakres adresów segmentowych, które zostaną wykorzystane na bloki UMB, jak również obsługę pamięci EMS. Podanie opcji bez parametru powoduje wykorzystanie przez EMM386 całej dostępnej przestrzeni adresowej.
NOEMS
Wyłącza obsługę pamięci EMS pozostawiając jedynie dostęp do bloków UMB.
NOVCPI
Blokuje dostęp do mechanizmów VCPI. Opcja ta musi być podana w połączeniu z NOEMS, inaczej zostanie zignorowana.
HIGHSCAN
Nakazuje wykonanie kontroli pamięci w celu wykrycia dodatkowego obszaru, który możnaby wykorzystać na bloki UMB lub ramkę pamięci EMS. Obszar taki jest fragmentem pamięci górnej zajmowanym przez nieaktywne rozszerzenia podsystemu BIOS. W niektórych przypadkach opcja ta nie przynosi rezultatu, a w niektórych prowadzi do zawieszenia komputera.
VERBOSE
Patrz HIMEM.
WIN=mmmm-nnnn
Pozwala określić zakres adresu segmentowego obszaru, który ma być wykorzystywany przez Windows. Opcja ta ma niższy priorytet niż X, natomiast wyższy niż RAM, ROM, oraz I.
NOHI
Blokuje ładowanie EMM386 do pamięci górnej.
ROM=mmmm-nnnn
Określa zakres adresów segmentowych obszaru, który EMM386 wykorzysta na SHADOWRAM. Podanie tej opcji może przyspieszyć pracę systemu jeżeli nie posiada on pamięci SHADOWRAM.
NOMOVEXBDA
Blokuje przesunięcie obszaru dodatkowych danych BIOS-u z pamięci konwencjonalnej do górnej.
ALTBOOT
Nakazuje przejęcie kontroli nad restartem systemu. Opcja ta powinna być używana jedynie w przypadku nieprawidłowości przy restarcie systemu, kiedy EMM386 rezyduje w pamięci.