
Käytäntö
PC-koneissa näyttömuistin ja BIOS:n EPROM:n väliin
sekä
BIOS:n ja 1MB rajan väliin jää alueet, joita MSDOS ei
osaa
käyttää ilman erillisiä ajuriohjelmia.
Nämä
ohjelmat käynnistetään CONFIG.SYS:ssä
seuraavasti (näiden
rivien kuuluu olla tiedoston ensimmäisinä):
DEVICE=C:\DOS\HIMEM.SYS /TESTMEM:OFF
DEVICE=C:\DOS\EMM386.EXE NOEMS x=C800-CC00 i=CD00-EFFF HIGHSCAN
DOS=HIGH,UMB
Selityksiä:
/TESTMEM:OFF estää DOS:a tekemästä pitkää
ja turhaa muistin
tarkistusta. Tämä kuten BIOS:nkin tekemä
muistin tarkistus vain
tarkistaa, kuinka paljon koneessa mahdollisesti
on muistia. Tämä
tapahtuu siten, että kunkin kilotavun ensimmäiseen
tavuun
kirjoitetaan ja luetaan yleensä kaksi tavua: 0x55 ja 0xAA,
joiden
bittikuviot ovat sopivasti vastakkaiset. Tietyissä
tapauksissa,
erityisesti, mikäli muistiväylä on heikosti
päätetty,
tämä antaa epäluotettavan tuloksen.
RAM ja FRAMES -parametrit viittaavat sivutettuun muistiin. Nykyisin melkeimpä ainoastaan jotkut pelit ja Lotus 1-2-3 käyttävät sivutettua muistia. Näitä ohjelmia varten kannattaa koneeseen tehdä Multiboot -järjestely.
NOEMS ottaa koko ylämuistin käyttöön yhtenäisenä jatkuvana muistialueena.
x=c800-cc00 varaa muistista alueen c800:0000-cc00:0000lisäkortin mahdollisen RAM-muistin käyttöön.
Tätä
käytetään yliopistolla ISA-väylän
verkkokorttien
kanssa. Kotikoneessa tätä harvemmin tarvitaan, ellei
lisäkortin
ohjeissa toisin sanota.
Pitää myös tarkistaa tarvitseeko ISA-korttia varten
varata tilaa
BIOS-setupissa.
i=cd00-efff antaa tämän alueen DOS:n käyttöön.
Ilmeisesti Microfoftin ohjelmoijilla ei ole laskutaito paras mahdollinen,
koska
x- ja i- alueet täytyy asettaa juuri näin. Mikäli
asetetaan x=c800-cc00 i=cc00-efff, DOS ilmoittaa virheestä.
Mikäli asetetaan x=c800-cbff i=cc00-efff, tulee todelliseksi
x-alueeksi c800:0000..cbff:0000, eli muistikortille varattu alue
jääkin
yläpäästään 256 B vajaaksi, jolloin
esim verkkokortin
toiminta on parhaimmillaankin epäluotettavaa !!!
Ylläolevalla tavalla menetetään 4 kB muistia, mutta
saavutetaan
koneen toimivuudessa huomattavaa etua.
DOS=HIGH ilmoittaa DOS:lle, että osan
käyttöjärjestelmästä
voi siirtää BIOS:n ja
1MB rajan väliselle alueelle 'jonka
INTEL unohti'
DOS=UMB ilmoittaa DOS:lle, että ohjelmia saa sijoittaa
myös alueelle
A000-EFFF
Joissain koneissa voi EMM386.EXE -riville pistää myös parametrin i=B000-B7FF, jolloin DOS ottaa ohjelmien käyttöön myös tämän, alkujaan näyttömuistille varatun alueen. Kaikkien näyttökorttien kanssa tämä ei kuitenkaan toimi. Näytölle saattaa ilmestyä roskaa erityisesti graafisessa tilassa. Mahdollisesti Windowsin käynnistyminen ei onnistu.
Joissakin vanhemmissa 386, 486 ja 586 -koneissa on esiintynyt
outoa
vikaa: mikäli koneessa käytetään MSDOS ver 6.xx,
isot
ohjelmat, esim WP51 (erityisesti esikatselussa ) ja Windows joko kaatuvat
tai
jumiutuvat satunnaisesti Tällöin sen kanssa
pitää
käyttää MSDOS ver 5.00:sta kopioitua emm386.exe -ohjainta.
Itse olen kopioinut tämän ohjaimen nimelle C:\DOS5\5EMM386.EXEsekaannusten välttämiseksi. Ainoa tapa todeta tarvitaanko
tätä
korjausta, on testata CHECKIT-ohjelman (kaupallinen)
muistitestillä
muistin alin 64 kB. Jos kone jumiutuu tai boottaa, se
tarvitaan.
Kuvatulla yhdistelmällä paranneltua konetta ei aina saa
bootattua
Ctrl-Alt-Del:lla (three finger salute, Vulcanian nerve pinch)
Tälläisessä
tapauksessa voi kokeilla emm386:n altboot-parametriä.
(If your
computer hangs when you press CTRL+ALT+DEL in step 2, change the
device command
to resemble the following:
device=c:\dos\emm386.exe noems x=a000-efff
altboot)
/HIGHSCAN-parametri ei toimi MSDOS ver 5.00:n emm386.exe:n kanssa vaan
kone
antaa virheilmoituksen.
Ylämuistissa saattaa olla konekohtaisia erikoisuuksia. BIOS
saattaa
normaalin F000-FFFF -muistialueensa lisäksi
käyttää
myös aluetta E000-EFFF. SCSI-kortit
käyttävät usein
aluetta C800-CC00. Tietyt lisäkortit,
erityisesti kannettavien PCMCIA-väylässä,
varaavat muistia
alueelta D000-D400.
Joissakin koneissa heikosti päätetyt
muistiväylät
aiheuttavat ylämuistin virheellistä
kayttäytymistä.
Tämä näkyy TESTI.EXE ohjelmalla siten,
että pyydettäessä
useita kertoja peräkkäin kuvaa
muistin käytöstä
(F3) saadaan joka kerta erilainen kuvio.
Tälläisessä koneessa
on yleensä vaikeaa saada toimimaan
verkkokortteja ja ylämuistiin
latautuvia ohjelmia.
Joissakin vanhemmissa koneissa BIOS peilautui alueelta f000-ffff
alueelle
e000-efff, jolloin menetettiin 64 kB muistia.
Paras tapa nähdä mitä muistissa on, on ohjelma TESTI.EXE Tällä samalla ohjelmalla näkee myös, miten koneen I/O-avaruus on käytetty. Ohjelma on testattu ja toimii MSDOS ver 2.10.. ver 7.0, Win 3.0..Win98 sekä WinNT:ssä. Ainoastaan tietyt erikoisemmat näyttökortit aiheuttavat jumiutumisia I/O-testissä. Windows Y2K:ssa ohjelmaa ei ole vielä testattu. Samaan pyrkii myös Microsoftin MSD-ohjelma, jonka lähtökohta on kuitenkin eri (ja luotettavuus kyseenalainen).
Historiaa määritelmiä ja tulevaisuutta
8080 prosessorissa oli 16 osoitelinjaa, joten se kykeni osoittamaan
64 kB
muistiavaruutta.
8088 kykeni osoittamaan 1 MB muistia
80286 kykeni osoittamaan jo (muistaakseni) 16 MB muistia, mutta
ohjelmia
jouduttiin edelleen ajamaan alimmassa 640 kB:ssä MSDOS:n
rajoitusten
takia. Ainoastaan jotkin apuohjelmat kykenivät
käyttämään
UMB-aluetta (Upper Memory Block).
Sivutettu (EXPANDED) muisti perustuu muistialueeseen, johon voidaan joko teknisin tai ohjelmallisin menetelmin vaihtaa toinen muisti'sivu'. Tätä varten varataan ylämuistista 64 kB alue, yleisimmin d000-dfff, joka jakautuu neljäksi 16 kB sivuksi (muistaakseni). Aluksi muistisivuille voitiin tallentaa ainoastaan dataa, mutta myöhemmissä versioissa myös ohjelmia. Mekanismi on tuttu jo PDP-11, CP/M+, Memotech ja Commodore 64 -koneista.
Sivutettua muistia käytetään nykyisinkin esim näyttökorteilla, joiden pitää kyetä esittämään niille varatussa a000-bfff 128 kB muistialueessa esim 1024x768 kuva 32 värillä. Tähän tarvitaan 1024x768x4 B eli 3.072 MB. Jotkin näyttökortit tosin käyttävät tätä a000-bfff aluetta ainoastaan pieniresoluutioiselle kuvalle ja piirtävät suuriresoluutioisemmat extended-alueelle.
Laajennettu (EXTENDED) muisti tarkoittaa suoraviivaista, lineaarista muistiavaruutta, jossa muistipaikkojen osoitteet ovat yksikäsitteisiä kokonaislukuja.
Ylämuistin käytöstä haaveiltiin myös
8088-koneissa,
joissa oli alkujaan vain 640 kB muistia ja joiden 8-bit
väylä
salli vain alimman 1 MB osoittamisen. Näissä asia
ratkaistiin
erillisillä lisäkorteilla, jotka enemmän tai
vähemmän
tapauskohtaisesti antoivat käyttöön
sivutettua muistia.
286-koneiden yhteydessä asia tuli akuutiksi, ohjelmien kasvaessa
yli
käytössä olevan tilan. Syntyi LIM-EMS
-määrittely
(Lotus + Intel + Microsoft), jonka lopullinen,
jäädytetty versio
oli 4.0. Määrittelyssä sovittiin
aluksi sivutetun muistin
käytöstä mutta mukaan tuli myös
laajennettu muisti.
286-koneiden 16-bit ISA-väylä olisi
sallinut suuremmankin yhtämittaisen
muistin käytön, mutta
MSDOS ei ollut vielä valmis tähän.
286-prosessori käynnistettiin lisäksi MSDOS:a varten
rajoitettuun
8088-yhteensopivaan toimintamoodiinsa, joka lukitsi 1MB rajan
yläpuolisen
muistialueen pois käytöstä. Se saatiin
käyttöön
antamalla näppäimistöohjaimen
rekistereihin tietty koodi,
joka aiheutti prosessorille keskeytyksen, jonka
yhteydessä 286 asetettiin
laajennettuun toimintatilaansa.
386 -prosessorien ja MSDOS ver 5.0
käyttöjärjestelmän
mukana ylämuistin hallinta alkoi
järkiperäistyä ollen
MSDOS ver 6.xx ja 7.xx:ssä jo melkein
järkevä. Alkuperäisessä
MSDOS:ssa ei kuitenkaan ollut
vielä valmiuksia jakaa ylämuistia
ohjelmien kesken, joten vanhimmat
ohjelmat saattavat aiheuttaa ongelmia
ylämuistiin ladattuina. Pahimpia
ovat TSR (Terminate but Stay Resident)
-tyyppiset, taustalla toimivat ohjelmat.
Tyypillisimpänä esimerkkinä
MSDOS ver 2.xx mukana tulleet
KEYBSU, KEYBSV, KEYBIT sekä Borlandin
muuten mukava SideKick.
EMM386:lle on luonnollisesti olemassa kilpailevia tuotteita: QEMM386,
7EMM,
PharLab. Nämä ovat normaalisti kohtuullisen korvaavia.
Ainoastaan
PharLab:n tuote on erikoisempi ratkaisu EXTENDED -muistin ohjain.
Esim
AutoCad:n vanhemmat versiot 2.5 ja 10 ja eräät pelit vaativat
sen
käyttöä kelpuuttamatta standardimpia EMM -ratkaisuja.
PharLab:n menetelma ei toimi luotettavasti Windowsin kanssa.
Windows
sisältää omat
ylämuistimäärittelynsä,
jotka eivät kaikin osin ole
yhteensopivia MSDOS:n kanssa. (tämäkin
saa epäilemään,
ettei Microsoft ole itse kehittänyt
yhtään markkinoimaansa
ohjelmaa)
Tulevaisuudessa päässemme näistä
muistimäärittelyistä
kokonaan eroon. Win 95, 98, NT ja y2k
-ohjelmissa muistin hallintaan on
omat menetelmänsä.
PTMUSTA at UTU.FI